@redplanethq/corebrain 1.0.0 → 2.1.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.
- package/dist/commands/browser/close.d.ts +10 -0
- package/dist/commands/browser/close.d.ts.map +1 -0
- package/dist/commands/browser/close.js +60 -0
- package/dist/commands/browser/close.js.map +1 -0
- package/dist/commands/browser/command.d.ts +10 -0
- package/dist/commands/browser/command.d.ts.map +1 -0
- package/dist/commands/browser/command.js +67 -0
- package/dist/commands/browser/command.js.map +1 -0
- package/dist/commands/browser/create-profile.d.ts +10 -0
- package/dist/commands/browser/create-profile.d.ts.map +1 -0
- package/dist/commands/browser/create-profile.js +29 -0
- package/dist/commands/browser/create-profile.js.map +1 -0
- package/dist/commands/browser/delete-profile.d.ts +10 -0
- package/dist/commands/browser/delete-profile.d.ts.map +1 -0
- package/dist/commands/browser/delete-profile.js +27 -0
- package/dist/commands/browser/delete-profile.js.map +1 -0
- package/dist/commands/browser/install.d.ts +8 -0
- package/dist/commands/browser/install.d.ts.map +1 -0
- package/dist/commands/browser/install.js +49 -0
- package/dist/commands/browser/install.js.map +1 -0
- package/dist/commands/browser/open.d.ts +12 -0
- package/dist/commands/browser/open.d.ts.map +1 -0
- package/dist/commands/browser/open.js +65 -0
- package/dist/commands/browser/open.js.map +1 -0
- package/dist/commands/browser/status.d.ts +8 -0
- package/dist/commands/browser/status.d.ts.map +1 -0
- package/dist/commands/browser/status.js +48 -0
- package/dist/commands/browser/status.js.map +1 -0
- package/dist/commands/coding/[agent]/config.d.ts +18 -0
- package/dist/commands/coding/[agent]/config.d.ts.map +1 -0
- package/dist/commands/coding/[agent]/config.js +91 -0
- package/dist/commands/coding/[agent]/config.js.map +1 -0
- package/dist/commands/coding/config.d.ts +23 -0
- package/dist/commands/coding/config.d.ts.map +1 -0
- package/dist/commands/coding/config.js +116 -0
- package/dist/commands/coding/config.js.map +1 -0
- package/dist/commands/coding/index.d.ts +8 -0
- package/dist/commands/coding/index.d.ts.map +1 -0
- package/dist/commands/coding/index.js +42 -0
- package/dist/commands/coding/index.js.map +1 -0
- package/dist/commands/coding/remove.d.ts +10 -0
- package/dist/commands/coding/remove.d.ts.map +1 -0
- package/dist/commands/coding/remove.js +37 -0
- package/dist/commands/coding/remove.js.map +1 -0
- package/dist/commands/coding/setup.d.ts +8 -0
- package/dist/commands/coding/setup.d.ts.map +1 -0
- package/dist/commands/coding/setup.js +114 -0
- package/dist/commands/coding/setup.js.map +1 -0
- package/dist/commands/exec/config.d.ts +14 -0
- package/dist/commands/exec/config.d.ts.map +1 -0
- package/dist/commands/exec/config.js +79 -0
- package/dist/commands/exec/config.js.map +1 -0
- package/dist/commands/gateway/config.d.ts +8 -0
- package/dist/commands/gateway/config.d.ts.map +1 -0
- package/dist/commands/gateway/config.js +192 -0
- package/dist/commands/gateway/config.js.map +1 -0
- package/dist/commands/gateway/index.d.ts +14 -0
- package/dist/commands/gateway/index.d.ts.map +1 -0
- package/dist/commands/gateway/index.js +10 -0
- package/dist/commands/gateway/index.js.map +1 -0
- package/dist/commands/gateway/off.d.ts +8 -0
- package/dist/commands/gateway/off.d.ts.map +1 -0
- package/dist/commands/gateway/off.js +70 -0
- package/dist/commands/gateway/off.js.map +1 -0
- package/dist/commands/gateway/on.d.ts +8 -0
- package/dist/commands/gateway/on.d.ts.map +1 -0
- package/dist/commands/gateway/on.js +135 -0
- package/dist/commands/gateway/on.js.map +1 -0
- package/dist/commands/gateway/restart.d.ts +8 -0
- package/dist/commands/gateway/restart.d.ts.map +1 -0
- package/dist/commands/gateway/restart.js +70 -0
- package/dist/commands/gateway/restart.js.map +1 -0
- package/dist/commands/gateway/status.d.ts +8 -0
- package/dist/commands/gateway/status.d.ts.map +1 -0
- package/dist/commands/gateway/status.js +98 -0
- package/dist/commands/gateway/status.js.map +1 -0
- package/dist/commands/gateway/uninstall.d.ts +8 -0
- package/dist/commands/gateway/uninstall.d.ts.map +1 -0
- package/dist/commands/gateway/uninstall.js +80 -0
- package/dist/commands/gateway/uninstall.js.map +1 -0
- package/dist/commands/index.d.ts +1 -5
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/login.d.ts +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/logout.d.ts +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/me.d.ts +1 -1
- package/dist/commands/me.d.ts.map +1 -1
- package/dist/commands/server.d.ts +10 -0
- package/dist/commands/server.d.ts.map +1 -0
- package/dist/commands/server.js +60 -0
- package/dist/commands/server.js.map +1 -0
- package/dist/commands/token.d.ts +1 -1
- package/dist/commands/token.d.ts.map +1 -1
- package/dist/components/error-message.d.ts.map +1 -1
- package/dist/components/error-message.js +6 -1
- package/dist/components/error-message.js.map +1 -1
- package/dist/components/info-message.d.ts.map +1 -1
- package/dist/components/info-message.js +5 -1
- package/dist/components/info-message.js.map +1 -1
- package/dist/components/success-message.d.ts.map +1 -1
- package/dist/components/success-message.js +5 -1
- package/dist/components/success-message.js.map +1 -1
- package/dist/components/warning-message.d.ts +2 -3
- package/dist/components/warning-message.d.ts.map +1 -1
- package/dist/components/warning-message.js +10 -4
- package/dist/components/warning-message.js.map +1 -1
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +31 -30
- package/dist/config/index.js.map +1 -1
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +4 -36
- package/dist/config/paths.js.map +1 -1
- package/dist/config/preferences.d.ts +14 -0
- package/dist/config/preferences.d.ts.map +1 -0
- package/dist/config/preferences.js +82 -0
- package/dist/config/preferences.js.map +1 -0
- package/dist/config/themes.d.ts +5 -0
- package/dist/config/themes.d.ts.map +1 -1
- package/dist/config/themes.js +5 -0
- package/dist/config/themes.js.map +1 -1
- package/dist/server/gateway-client.d.ts +80 -0
- package/dist/server/gateway-client.d.ts.map +1 -0
- package/dist/server/gateway-client.js +280 -0
- package/dist/server/gateway-client.js.map +1 -0
- package/dist/server/gateway-entry.d.ts +7 -0
- package/dist/server/gateway-entry.d.ts.map +1 -0
- package/dist/server/gateway-entry.js +138 -0
- package/dist/server/gateway-entry.js.map +1 -0
- package/dist/server/gateway.d.ts +5 -0
- package/dist/server/gateway.d.ts.map +1 -0
- package/dist/server/gateway.js +136 -0
- package/dist/server/gateway.js.map +1 -0
- package/dist/server/tools/browser-tools.d.ts +28 -0
- package/dist/server/tools/browser-tools.d.ts.map +1 -0
- package/dist/server/tools/browser-tools.js +179 -0
- package/dist/server/tools/browser-tools.js.map +1 -0
- package/dist/server/tools/coding-tools.d.ts +27 -0
- package/dist/server/tools/coding-tools.d.ts.map +1 -0
- package/dist/server/tools/coding-tools.js +345 -0
- package/dist/server/tools/coding-tools.js.map +1 -0
- package/dist/server/tools/exec-tools.d.ts +14 -0
- package/dist/server/tools/exec-tools.d.ts.map +1 -0
- package/dist/server/tools/exec-tools.js +203 -0
- package/dist/server/tools/exec-tools.js.map +1 -0
- package/dist/types/config.d.ts +36 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/agent-browser.d.ts +63 -0
- package/dist/utils/agent-browser.d.ts.map +1 -0
- package/dist/utils/agent-browser.js +301 -0
- package/dist/utils/agent-browser.js.map +1 -0
- package/dist/utils/coding-runner.d.ts +60 -0
- package/dist/utils/coding-runner.d.ts.map +1 -0
- package/dist/utils/coding-runner.js +174 -0
- package/dist/utils/coding-runner.js.map +1 -0
- package/dist/utils/coding-sessions.d.ts +61 -0
- package/dist/utils/coding-sessions.d.ts.map +1 -0
- package/dist/utils/coding-sessions.js +112 -0
- package/dist/utils/coding-sessions.js.map +1 -0
- package/dist/utils/process.d.ts +22 -0
- package/dist/utils/process.d.ts.map +1 -0
- package/dist/utils/process.js +81 -0
- package/dist/utils/process.js.map +1 -0
- package/dist/utils/service-manager/index.d.ts +49 -0
- package/dist/utils/service-manager/index.d.ts.map +1 -0
- package/dist/utils/service-manager/index.js +137 -0
- package/dist/utils/service-manager/index.js.map +1 -0
- package/dist/utils/service-manager/launchd.d.ts +31 -0
- package/dist/utils/service-manager/launchd.d.ts.map +1 -0
- package/dist/utils/service-manager/launchd.js +208 -0
- package/dist/utils/service-manager/launchd.js.map +1 -0
- package/dist/utils/service-manager/systemd.d.ts +31 -0
- package/dist/utils/service-manager/systemd.d.ts.map +1 -0
- package/dist/utils/service-manager/systemd.js +187 -0
- package/dist/utils/service-manager/systemd.js.map +1 -0
- package/dist/utils/tmux.d.ts +37 -0
- package/dist/utils/tmux.d.ts.map +1 -0
- package/dist/utils/tmux.js +96 -0
- package/dist/utils/tmux.js.map +1 -0
- package/package.json +15 -12
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import zod from 'zod';
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { getPreferences } from '../../config/preferences.js';
|
|
5
|
+
import { getConfigPath } from '../../config/paths.js';
|
|
6
|
+
// Default directory for exec commands - uses same directory as config
|
|
7
|
+
const DEFAULT_EXEC_DIR = getConfigPath();
|
|
8
|
+
// ============ Zod Schemas ============
|
|
9
|
+
export const ExecCommandSchema = zod.object({
|
|
10
|
+
command: zod.string(),
|
|
11
|
+
dir: zod.string().optional(),
|
|
12
|
+
timeout: zod.number().optional(), // Timeout in ms
|
|
13
|
+
});
|
|
14
|
+
// ============ JSON Schemas ============
|
|
15
|
+
const jsonSchemas = {
|
|
16
|
+
exec_command: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
properties: {
|
|
19
|
+
command: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
description: 'The command to execute (e.g., "ls -la" or "git status")',
|
|
22
|
+
},
|
|
23
|
+
dir: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'Working directory for the command (defaults to ~/.corebrain)',
|
|
26
|
+
},
|
|
27
|
+
timeout: {
|
|
28
|
+
type: 'number',
|
|
29
|
+
description: 'Timeout in milliseconds (default: 30000)',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
required: ['command'],
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
// ============ Tool Definitions ============
|
|
36
|
+
export const execTools = [
|
|
37
|
+
{
|
|
38
|
+
name: 'exec_command',
|
|
39
|
+
description: 'Execute a shell command',
|
|
40
|
+
inputSchema: jsonSchemas.exec_command,
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
// ============ Helper Functions ============
|
|
44
|
+
function getExecConfig() {
|
|
45
|
+
const prefs = getPreferences();
|
|
46
|
+
return prefs.exec || {};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Parse a Bash pattern like "Bash(npm run *)" and extract the glob pattern
|
|
50
|
+
*/
|
|
51
|
+
function parseBashPattern(pattern) {
|
|
52
|
+
const match = pattern.match(/^Bash\((.+)\)$/);
|
|
53
|
+
return match ? match[1] : null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Convert a glob-like pattern to a regex
|
|
57
|
+
* * matches any sequence of characters
|
|
58
|
+
*/
|
|
59
|
+
function globToRegex(glob) {
|
|
60
|
+
// Escape regex special chars except *
|
|
61
|
+
const escaped = glob.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
|
|
62
|
+
// Replace * with .*
|
|
63
|
+
const pattern = escaped.replace(/\*/g, '.*');
|
|
64
|
+
return new RegExp(`^${pattern}$`);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if a command matches a Bash pattern
|
|
68
|
+
*/
|
|
69
|
+
function matchesPattern(command, pattern) {
|
|
70
|
+
// Handle wildcard pattern
|
|
71
|
+
if (pattern === '*' || pattern === 'Bash(*)') {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
const glob = parseBashPattern(pattern);
|
|
75
|
+
if (!glob) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const regex = globToRegex(glob);
|
|
80
|
+
return regex.test(command);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check if a command is allowed based on config patterns
|
|
88
|
+
*/
|
|
89
|
+
function isCommandAllowed(command) {
|
|
90
|
+
const config = getExecConfig();
|
|
91
|
+
const allowPatterns = config.allow || [];
|
|
92
|
+
const denyPatterns = config.deny || [];
|
|
93
|
+
// Check deny patterns first (takes precedence)
|
|
94
|
+
for (const pattern of denyPatterns) {
|
|
95
|
+
if (matchesPattern(command, pattern)) {
|
|
96
|
+
return { allowed: false, reason: `Command matches deny pattern: ${pattern}` };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// If no allow patterns configured, allow by default (unless denied above)
|
|
100
|
+
if (allowPatterns.length === 0) {
|
|
101
|
+
return { allowed: true };
|
|
102
|
+
}
|
|
103
|
+
// Check if matches any allow pattern
|
|
104
|
+
const isAllowed = allowPatterns.some((pattern) => matchesPattern(command, pattern));
|
|
105
|
+
if (!isAllowed) {
|
|
106
|
+
return { allowed: false, reason: 'Command not in allow list' };
|
|
107
|
+
}
|
|
108
|
+
return { allowed: true };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Execute a command and return output
|
|
112
|
+
*/
|
|
113
|
+
async function executeCommand(command, dir, timeout) {
|
|
114
|
+
return new Promise((resolve) => {
|
|
115
|
+
const proc = spawn(command, {
|
|
116
|
+
cwd: dir,
|
|
117
|
+
shell: true,
|
|
118
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
119
|
+
});
|
|
120
|
+
let stdout = '';
|
|
121
|
+
let stderr = '';
|
|
122
|
+
let killed = false;
|
|
123
|
+
// Set timeout
|
|
124
|
+
const timer = setTimeout(() => {
|
|
125
|
+
killed = true;
|
|
126
|
+
proc.kill('SIGTERM');
|
|
127
|
+
}, timeout);
|
|
128
|
+
proc.stdout?.on('data', (data) => {
|
|
129
|
+
stdout += data.toString();
|
|
130
|
+
});
|
|
131
|
+
proc.stderr?.on('data', (data) => {
|
|
132
|
+
stderr += data.toString();
|
|
133
|
+
});
|
|
134
|
+
proc.on('close', (code) => {
|
|
135
|
+
clearTimeout(timer);
|
|
136
|
+
if (killed) {
|
|
137
|
+
resolve({ stdout, stderr: stderr + '\nCommand timed out', code: 124 });
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
resolve({ stdout, stderr, code: code || 0 });
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
proc.on('error', (err) => {
|
|
144
|
+
clearTimeout(timer);
|
|
145
|
+
resolve({ stdout, stderr: err.message, code: 1 });
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
// ============ Tool Handlers ============
|
|
150
|
+
async function handleExecCommand(params) {
|
|
151
|
+
const config = getExecConfig();
|
|
152
|
+
// Check if command is allowed
|
|
153
|
+
const { allowed, reason } = isCommandAllowed(params.command);
|
|
154
|
+
if (!allowed) {
|
|
155
|
+
return {
|
|
156
|
+
success: false,
|
|
157
|
+
error: `Command not allowed: ${reason}`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// Determine working directory
|
|
161
|
+
const dir = params.dir || config.defaultDir || DEFAULT_EXEC_DIR;
|
|
162
|
+
// Ensure directory exists
|
|
163
|
+
if (!existsSync(dir)) {
|
|
164
|
+
return {
|
|
165
|
+
success: false,
|
|
166
|
+
error: `Directory "${dir}" does not exist`,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
// Execute command
|
|
170
|
+
const timeout = params.timeout || 30000;
|
|
171
|
+
const result = await executeCommand(params.command, dir, timeout);
|
|
172
|
+
return {
|
|
173
|
+
success: result.code === 0,
|
|
174
|
+
result: {
|
|
175
|
+
command: params.command,
|
|
176
|
+
dir,
|
|
177
|
+
exitCode: result.code,
|
|
178
|
+
stdout: result.stdout,
|
|
179
|
+
stderr: result.stderr || undefined,
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
// ============ Tool Execution ============
|
|
184
|
+
export async function executeExecTool(toolName, params) {
|
|
185
|
+
try {
|
|
186
|
+
switch (toolName) {
|
|
187
|
+
case 'exec_command':
|
|
188
|
+
return await handleExecCommand(ExecCommandSchema.parse(params));
|
|
189
|
+
default:
|
|
190
|
+
return { success: false, error: `Unknown tool: ${toolName}` };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
if (err instanceof zod.ZodError) {
|
|
195
|
+
return { success: false, error: `Invalid parameters: ${err.message}` };
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
success: false,
|
|
199
|
+
error: err instanceof Error ? err.message : 'Unknown error',
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=exec-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec-tools.js","sourceRoot":"","sources":["../../../src/server/tools/exec-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -52,6 +52,39 @@ export interface AppConfig {
|
|
|
52
52
|
[key: string]: unknown;
|
|
53
53
|
}[];
|
|
54
54
|
}
|
|
55
|
+
export type ServiceType = 'launchd' | 'systemd' | 'manual';
|
|
56
|
+
export interface GatewayConfig {
|
|
57
|
+
id?: string;
|
|
58
|
+
name?: string;
|
|
59
|
+
description?: string;
|
|
60
|
+
port?: number;
|
|
61
|
+
pid: number;
|
|
62
|
+
startedAt: number;
|
|
63
|
+
serviceInstalled?: boolean;
|
|
64
|
+
serviceType?: ServiceType;
|
|
65
|
+
serviceName?: string;
|
|
66
|
+
}
|
|
67
|
+
export interface CliBackendConfig {
|
|
68
|
+
command: string;
|
|
69
|
+
args?: string[];
|
|
70
|
+
resumeArgs?: string[];
|
|
71
|
+
sessionArg?: string;
|
|
72
|
+
sessionMode?: 'new' | 'existing' | 'always';
|
|
73
|
+
sessionIdFields?: string[];
|
|
74
|
+
allowedTools?: string[];
|
|
75
|
+
disallowedTools?: string[];
|
|
76
|
+
modelArg?: string;
|
|
77
|
+
systemPromptArg?: string;
|
|
78
|
+
workingDirArg?: string;
|
|
79
|
+
}
|
|
80
|
+
export interface CodingConfig {
|
|
81
|
+
[agentName: string]: CliBackendConfig;
|
|
82
|
+
}
|
|
83
|
+
export interface ExecConfig {
|
|
84
|
+
allow?: string[];
|
|
85
|
+
deny?: string[];
|
|
86
|
+
defaultDir?: string;
|
|
87
|
+
}
|
|
55
88
|
export interface UserPreferences {
|
|
56
89
|
lastProvider?: string;
|
|
57
90
|
lastModel?: string;
|
|
@@ -60,5 +93,8 @@ export interface UserPreferences {
|
|
|
60
93
|
};
|
|
61
94
|
lastUpdateCheck?: number;
|
|
62
95
|
selectedTheme?: ThemePreset;
|
|
96
|
+
gateway?: GatewayConfig;
|
|
97
|
+
coding?: CodingConfig;
|
|
98
|
+
exec?: ExecConfig;
|
|
63
99
|
}
|
|
64
100
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export interface CommandResult {
|
|
2
|
+
stdout: string;
|
|
3
|
+
stderr: string;
|
|
4
|
+
code: number;
|
|
5
|
+
}
|
|
6
|
+
export interface BrowserSession {
|
|
7
|
+
sessionName: string;
|
|
8
|
+
profile: string;
|
|
9
|
+
url: string;
|
|
10
|
+
startedAt: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function getActiveSessions(): BrowserSession[];
|
|
13
|
+
export declare function getSession(sessionName: string): BrowserSession | undefined;
|
|
14
|
+
export declare function canCreateSession(): {
|
|
15
|
+
allowed: boolean;
|
|
16
|
+
count: number;
|
|
17
|
+
};
|
|
18
|
+
export declare function isAgentBrowserInstalled(): Promise<boolean>;
|
|
19
|
+
export declare function installAgentBrowser(): Promise<CommandResult>;
|
|
20
|
+
export declare function createProfile(name: string): {
|
|
21
|
+
success: boolean;
|
|
22
|
+
path: string;
|
|
23
|
+
error?: string;
|
|
24
|
+
};
|
|
25
|
+
export declare function deleteProfile(name: string): {
|
|
26
|
+
success: boolean;
|
|
27
|
+
error?: string;
|
|
28
|
+
};
|
|
29
|
+
export declare function listProfiles(): string[];
|
|
30
|
+
export declare function getProfilesDir(): string;
|
|
31
|
+
/**
|
|
32
|
+
* Open a browser session with URL
|
|
33
|
+
* Creates the corebrain profile if it doesn't exist
|
|
34
|
+
* Enforces max 3 concurrent sessions
|
|
35
|
+
*/
|
|
36
|
+
export declare function browserOpen(sessionName: string, url: string, profile?: string): Promise<CommandResult>;
|
|
37
|
+
/**
|
|
38
|
+
* Close a browser session
|
|
39
|
+
*/
|
|
40
|
+
export declare function browserClose(sessionName: string): Promise<CommandResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Check if a command is blocked
|
|
43
|
+
*/
|
|
44
|
+
export declare function isBlockedCommand(command: string): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Execute a generic browser command
|
|
47
|
+
* Blocks: open, close, cookies, storage, network, trace, highlight, console, errors, state, download
|
|
48
|
+
*/
|
|
49
|
+
export declare function browserCommand(sessionName: string, command: string, args?: string[]): Promise<CommandResult>;
|
|
50
|
+
/**
|
|
51
|
+
* List all active browser sessions
|
|
52
|
+
*/
|
|
53
|
+
export declare function browserListSessions(): BrowserSession[];
|
|
54
|
+
/**
|
|
55
|
+
* Get all available profiles
|
|
56
|
+
*/
|
|
57
|
+
export declare function browserGetProfiles(): string[];
|
|
58
|
+
/**
|
|
59
|
+
* Close all active browser sessions
|
|
60
|
+
*/
|
|
61
|
+
export declare function browserCloseAll(): Promise<void>;
|
|
62
|
+
export declare function getSessionStatus(sessionName: string): Promise<'running' | 'stopped' | 'unknown'>;
|
|
63
|
+
//# sourceMappingURL=agent-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-browser.d.ts","sourceRoot":"","sources":["../../src/utils/agent-browser.ts"],"names":[],"mappings":"AAiCA,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CAClB;AAuBD,wBAAgB,iBAAiB,IAAI,cAAc,EAAE,CAEpD;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAG1E;AAgBD,wBAAgB,gBAAgB,IAAI;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAMpE;AAID,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC,CAOhE;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,aAAa,CAAC,CAElE;AAgFD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAqBA;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAgBA;AAED,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAYvC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAID;;;;GAIG;AACH,wBAAsB,WAAW,CAChC,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAoB,GAC3B,OAAO,CAAC,aAAa,CAAC,CA8BxB;AAED;;GAEG;AACH,wBAAsB,YAAY,CACjC,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAOxB;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,CAuBxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,EAAE,CAEtD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAWrD;AAID,wBAAsB,gBAAgB,CACrC,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,CAa5C"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { spawn, execSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, mkdirSync, rmSync, readdirSync, readFileSync, writeFileSync, } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { getConfigPath } from '../config/paths.js';
|
|
5
|
+
// Constants - use unified config directory
|
|
6
|
+
const COREBRAIN_DIR = getConfigPath();
|
|
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
|
+
// Blocked commands that cannot be run via browser_command
|
|
11
|
+
const BLOCKED_COMMANDS = [
|
|
12
|
+
'open',
|
|
13
|
+
'close',
|
|
14
|
+
'cookies',
|
|
15
|
+
'storage',
|
|
16
|
+
'network',
|
|
17
|
+
'trace',
|
|
18
|
+
'highlight',
|
|
19
|
+
'console',
|
|
20
|
+
'errors',
|
|
21
|
+
'state',
|
|
22
|
+
'download',
|
|
23
|
+
];
|
|
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
|
+
// ============ Installation ============
|
|
70
|
+
export async function isAgentBrowserInstalled() {
|
|
71
|
+
try {
|
|
72
|
+
execSync('which agent-browser', { stdio: 'pipe' });
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export async function installAgentBrowser() {
|
|
80
|
+
return runNpmCommand(['install', '-g', 'agent-browser']);
|
|
81
|
+
}
|
|
82
|
+
function runNpmCommand(args) {
|
|
83
|
+
return new Promise(resolve => {
|
|
84
|
+
const proc = spawn('npm', args, {
|
|
85
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
86
|
+
shell: true,
|
|
87
|
+
});
|
|
88
|
+
let stdout = '';
|
|
89
|
+
let stderr = '';
|
|
90
|
+
proc.stdout?.on('data', data => {
|
|
91
|
+
stdout += data.toString();
|
|
92
|
+
});
|
|
93
|
+
proc.stderr?.on('data', data => {
|
|
94
|
+
stderr += data.toString();
|
|
95
|
+
});
|
|
96
|
+
proc.on('close', code => {
|
|
97
|
+
resolve({ stdout, stderr, code: code ?? 0 });
|
|
98
|
+
});
|
|
99
|
+
proc.on('error', err => {
|
|
100
|
+
resolve({ stdout, stderr: err.message, code: 1 });
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
// ============ Core Browser Command Runner ============
|
|
105
|
+
async function runAgentBrowserCommand(sessionName, args) {
|
|
106
|
+
return new Promise(resolve => {
|
|
107
|
+
const fullArgs = [...args, '--session', sessionName];
|
|
108
|
+
const proc = spawn('/Users/harshithmullapudi/.nvm/versions/node/v20.18.3/lib/node_modules/agent-browser/bin/agent-browser-darwin-arm64', fullArgs, {
|
|
109
|
+
cwd: COREBRAIN_DIR,
|
|
110
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
111
|
+
});
|
|
112
|
+
let stdout = '';
|
|
113
|
+
let stderr = '';
|
|
114
|
+
proc.stdout?.on('data', data => {
|
|
115
|
+
stdout += data.toString();
|
|
116
|
+
});
|
|
117
|
+
proc.stderr?.on('data', data => {
|
|
118
|
+
stderr += data.toString();
|
|
119
|
+
});
|
|
120
|
+
proc.on('close', code => {
|
|
121
|
+
resolve({ stdout, stderr, code: code ?? 0 });
|
|
122
|
+
});
|
|
123
|
+
proc.on('error', err => {
|
|
124
|
+
resolve({ stdout, stderr: err.message, code: 1 });
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
// ============ Profile Management ============
|
|
129
|
+
function ensureProfileExists(profile) {
|
|
130
|
+
const profilePath = join(BROWSER_PROFILES_DIR, profile);
|
|
131
|
+
if (!existsSync(profilePath)) {
|
|
132
|
+
mkdirSync(profilePath, { recursive: true });
|
|
133
|
+
}
|
|
134
|
+
return profilePath;
|
|
135
|
+
}
|
|
136
|
+
export function createProfile(name) {
|
|
137
|
+
const profilePath = join(BROWSER_PROFILES_DIR, name);
|
|
138
|
+
try {
|
|
139
|
+
if (existsSync(profilePath)) {
|
|
140
|
+
return {
|
|
141
|
+
success: false,
|
|
142
|
+
path: profilePath,
|
|
143
|
+
error: 'Profile already exists',
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
mkdirSync(profilePath, { recursive: true });
|
|
147
|
+
return { success: true, path: profilePath };
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
return {
|
|
151
|
+
success: false,
|
|
152
|
+
path: profilePath,
|
|
153
|
+
error: err instanceof Error ? err.message : 'Failed to create profile',
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
export function deleteProfile(name) {
|
|
158
|
+
const profilePath = join(BROWSER_PROFILES_DIR, name);
|
|
159
|
+
try {
|
|
160
|
+
if (!existsSync(profilePath)) {
|
|
161
|
+
return { success: false, error: 'Profile does not exist' };
|
|
162
|
+
}
|
|
163
|
+
rmSync(profilePath, { recursive: true, force: true });
|
|
164
|
+
return { success: true };
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
return {
|
|
168
|
+
success: false,
|
|
169
|
+
error: err instanceof Error ? err.message : 'Failed to delete profile',
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
export function listProfiles() {
|
|
174
|
+
try {
|
|
175
|
+
if (!existsSync(BROWSER_PROFILES_DIR)) {
|
|
176
|
+
return [];
|
|
177
|
+
}
|
|
178
|
+
return readdirSync(BROWSER_PROFILES_DIR, { withFileTypes: true })
|
|
179
|
+
.filter(entry => entry.isDirectory())
|
|
180
|
+
.map(entry => entry.name);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return [];
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
export function getProfilesDir() {
|
|
187
|
+
return BROWSER_PROFILES_DIR;
|
|
188
|
+
}
|
|
189
|
+
// ============ Simplified Browser Tools ============
|
|
190
|
+
/**
|
|
191
|
+
* Open a browser session with URL
|
|
192
|
+
* Creates the corebrain profile if it doesn't exist
|
|
193
|
+
* Enforces max 3 concurrent sessions
|
|
194
|
+
*/
|
|
195
|
+
export async function browserOpen(sessionName, url, profile = 'corebrain') {
|
|
196
|
+
// Check session limit
|
|
197
|
+
const { allowed, count } = canCreateSession();
|
|
198
|
+
const existingSession = getSession(sessionName);
|
|
199
|
+
// Allow if session already exists (re-opening) or under limit
|
|
200
|
+
if (!existingSession && !allowed) {
|
|
201
|
+
return {
|
|
202
|
+
stdout: '',
|
|
203
|
+
stderr: `Maximum ${MAX_SESSIONS} sessions allowed. Currently running: ${count}. Close a session first.`,
|
|
204
|
+
code: 1,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
// Ensure profile directory exists
|
|
208
|
+
const profilePath = ensureProfileExists(profile);
|
|
209
|
+
const args = ['open', url, '--profile', profilePath];
|
|
210
|
+
const result = await runAgentBrowserCommand(sessionName, args);
|
|
211
|
+
if (result.code === 0) {
|
|
212
|
+
addSession({
|
|
213
|
+
sessionName,
|
|
214
|
+
profile,
|
|
215
|
+
url,
|
|
216
|
+
startedAt: new Date().toISOString(),
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
return result;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Close a browser session
|
|
223
|
+
*/
|
|
224
|
+
export async function browserClose(sessionName) {
|
|
225
|
+
const result = await runAgentBrowserCommand(sessionName, ['close']);
|
|
226
|
+
// Remove session regardless of result (it might already be closed)
|
|
227
|
+
removeSession(sessionName);
|
|
228
|
+
return result;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Check if a command is blocked
|
|
232
|
+
*/
|
|
233
|
+
export function isBlockedCommand(command) {
|
|
234
|
+
const cmd = command.toLowerCase().trim();
|
|
235
|
+
return BLOCKED_COMMANDS.includes(cmd);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Execute a generic browser command
|
|
239
|
+
* Blocks: open, close, cookies, storage, network, trace, highlight, console, errors, state, download
|
|
240
|
+
*/
|
|
241
|
+
export async function browserCommand(sessionName, command, args = []) {
|
|
242
|
+
// Check if command is blocked
|
|
243
|
+
if (isBlockedCommand(command)) {
|
|
244
|
+
return {
|
|
245
|
+
stdout: '',
|
|
246
|
+
stderr: `Command "${command}" is blocked. Blocked commands: ${BLOCKED_COMMANDS.join(', ')}`,
|
|
247
|
+
code: 1,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
// Check if session exists
|
|
251
|
+
const session = getSession(sessionName);
|
|
252
|
+
if (!session) {
|
|
253
|
+
return {
|
|
254
|
+
stdout: '',
|
|
255
|
+
stderr: `Session "${sessionName}" not found. Use browser_open to create a session first.`,
|
|
256
|
+
code: 1,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
return runAgentBrowserCommand(sessionName, [command, ...args]);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* List all active browser sessions
|
|
263
|
+
*/
|
|
264
|
+
export function browserListSessions() {
|
|
265
|
+
return getActiveSessions();
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Get all available profiles
|
|
269
|
+
*/
|
|
270
|
+
export function browserGetProfiles() {
|
|
271
|
+
return listProfiles();
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Close all active browser sessions
|
|
275
|
+
*/
|
|
276
|
+
export async function browserCloseAll() {
|
|
277
|
+
const sessions = loadSessions();
|
|
278
|
+
for (const session of sessions) {
|
|
279
|
+
try {
|
|
280
|
+
await browserClose(session.sessionName);
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
// Ignore errors when closing individual sessions
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Clear all sessions
|
|
287
|
+
saveSessions([]);
|
|
288
|
+
}
|
|
289
|
+
// ============ Session Status ============
|
|
290
|
+
export async function getSessionStatus(sessionName) {
|
|
291
|
+
const result = await runAgentBrowserCommand(sessionName, ['status']);
|
|
292
|
+
if (result.code !== 0) {
|
|
293
|
+
return 'unknown';
|
|
294
|
+
}
|
|
295
|
+
const output = result.stdout.toLowerCase();
|
|
296
|
+
if (output.includes('running') || output.includes('active')) {
|
|
297
|
+
return 'running';
|
|
298
|
+
}
|
|
299
|
+
return 'stopped';
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=agent-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-browser.js","sourceRoot":"","sources":["../../src/utils/agent-browser.ts"],"names":[],"mappings":"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"}
|