@redplanethq/corebrain 2.5.0 → 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/browser/status.d.ts.map +1 -1
- package/dist/commands/browser/status.js +5 -3
- package/dist/commands/browser/status.js.map +1 -1
- package/dist/utils/browser-use.js +1 -1
- package/dist/utils/browser-use.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/browser/create-profile.d.ts +0 -10
- package/dist/commands/browser/create-profile.d.ts.map +0 -1
- package/dist/commands/browser/create-profile.js +0 -35
- package/dist/commands/browser/create-profile.js.map +0 -1
- package/dist/commands/browser/delete-profile.d.ts +0 -10
- package/dist/commands/browser/delete-profile.d.ts.map +0 -1
- package/dist/commands/browser/delete-profile.js +0 -34
- package/dist/commands/browser/delete-profile.js.map +0 -1
- package/dist/commands/coding/[agent]/config.d.ts +0 -18
- package/dist/commands/coding/[agent]/config.d.ts.map +0 -1
- package/dist/commands/coding/[agent]/config.js +0 -91
- package/dist/commands/coding/[agent]/config.js.map +0 -1
- package/dist/commands/coding/index.d.ts +0 -8
- package/dist/commands/coding/index.d.ts.map +0 -1
- package/dist/commands/coding/index.js +0 -42
- package/dist/commands/coding/index.js.map +0 -1
- package/dist/commands/gateway/index.d.ts +0 -14
- package/dist/commands/gateway/index.d.ts.map +0 -1
- package/dist/commands/gateway/index.js +0 -10
- package/dist/commands/gateway/index.js.map +0 -1
- package/dist/commands/gateway/off.d.ts +0 -8
- package/dist/commands/gateway/off.d.ts.map +0 -1
- package/dist/commands/gateway/off.js +0 -60
- package/dist/commands/gateway/off.js.map +0 -1
- package/dist/commands/gateway/on.d.ts +0 -8
- package/dist/commands/gateway/on.d.ts.map +0 -1
- package/dist/commands/gateway/on.js +0 -106
- package/dist/commands/gateway/on.js.map +0 -1
- package/dist/commands/gateway/uninstall.d.ts +0 -8
- package/dist/commands/gateway/uninstall.d.ts.map +0 -1
- package/dist/commands/gateway/uninstall.js +0 -68
- package/dist/commands/gateway/uninstall.js.map +0 -1
- package/dist/commands/server.d.ts +0 -10
- package/dist/commands/server.d.ts.map +0 -1
- package/dist/commands/server.js +0 -60
- package/dist/commands/server.js.map +0 -1
- package/dist/server/gateway.d.ts +0 -5
- package/dist/server/gateway.d.ts.map +0 -1
- package/dist/server/gateway.js +0 -136
- package/dist/server/gateway.js.map +0 -1
- package/dist/utils/agent-browser.d.ts +0 -46
- package/dist/utils/agent-browser.d.ts.map +0 -1
- package/dist/utils/agent-browser.js +0 -233
- package/dist/utils/agent-browser.js.map +0 -1
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import { spawn, execSync } from 'node:child_process';
|
|
2
|
-
import { existsSync, mkdirSync, rmSync, readdirSync } 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
|
-
// Blocked commands that cannot be run via browser_command
|
|
9
|
-
const BLOCKED_COMMANDS = [
|
|
10
|
-
'open',
|
|
11
|
-
'close',
|
|
12
|
-
'cookies',
|
|
13
|
-
'storage',
|
|
14
|
-
'network',
|
|
15
|
-
'trace',
|
|
16
|
-
'highlight',
|
|
17
|
-
'console',
|
|
18
|
-
'errors',
|
|
19
|
-
'state',
|
|
20
|
-
'download',
|
|
21
|
-
];
|
|
22
|
-
// ============ Installation ============
|
|
23
|
-
/**
|
|
24
|
-
* Get the agent-browser binary path (cross-platform)
|
|
25
|
-
*/
|
|
26
|
-
function getAgentBrowserPath() {
|
|
27
|
-
try {
|
|
28
|
-
const command = process.platform === 'win32'
|
|
29
|
-
? 'where agent-browser'
|
|
30
|
-
: 'which agent-browser';
|
|
31
|
-
const result = execSync(command, { stdio: 'pipe', encoding: 'utf-8' });
|
|
32
|
-
const path = result.trim().split('\n')[0]; // Take first result on Windows (where can return multiple)
|
|
33
|
-
return path || null;
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
// Cache the binary path
|
|
40
|
-
let cachedBinaryPath;
|
|
41
|
-
function getBinaryPath() {
|
|
42
|
-
if (cachedBinaryPath === undefined) {
|
|
43
|
-
cachedBinaryPath = getAgentBrowserPath();
|
|
44
|
-
}
|
|
45
|
-
return cachedBinaryPath;
|
|
46
|
-
}
|
|
47
|
-
// Clear cache (useful after installation)
|
|
48
|
-
export function clearBinaryPathCache() {
|
|
49
|
-
cachedBinaryPath = undefined;
|
|
50
|
-
}
|
|
51
|
-
export async function isAgentBrowserInstalled() {
|
|
52
|
-
return getBinaryPath() !== null;
|
|
53
|
-
}
|
|
54
|
-
export async function installAgentBrowser() {
|
|
55
|
-
const result = await runNpmCommand(['install', '-g', 'agent-browser']);
|
|
56
|
-
// Clear cache so next check finds the newly installed binary
|
|
57
|
-
clearBinaryPathCache();
|
|
58
|
-
return result;
|
|
59
|
-
}
|
|
60
|
-
function runNpmCommand(args) {
|
|
61
|
-
return new Promise(resolve => {
|
|
62
|
-
const proc = spawn('npm', args, {
|
|
63
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
64
|
-
shell: true,
|
|
65
|
-
});
|
|
66
|
-
let stdout = '';
|
|
67
|
-
let stderr = '';
|
|
68
|
-
proc.stdout?.on('data', data => {
|
|
69
|
-
stdout += data.toString();
|
|
70
|
-
});
|
|
71
|
-
proc.stderr?.on('data', data => {
|
|
72
|
-
stderr += data.toString();
|
|
73
|
-
});
|
|
74
|
-
proc.on('close', code => {
|
|
75
|
-
resolve({ stdout, stderr, code: code ?? 0 });
|
|
76
|
-
});
|
|
77
|
-
proc.on('error', err => {
|
|
78
|
-
resolve({ stdout, stderr: err.message, code: 1 });
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
// ============ Core Browser Command Runner ============
|
|
83
|
-
async function runAgentBrowserCommand(profile, args) {
|
|
84
|
-
const binaryPath = getBinaryPath();
|
|
85
|
-
if (!binaryPath) {
|
|
86
|
-
return {
|
|
87
|
-
stdout: '',
|
|
88
|
-
stderr: 'agent-browser not found. Run: npm install -g agent-browser',
|
|
89
|
-
code: 1,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
// Ensure profile directory exists
|
|
93
|
-
const profilePath = ensureProfileExists(profile);
|
|
94
|
-
return new Promise(resolve => {
|
|
95
|
-
// Use profile path for persistent browser state
|
|
96
|
-
const fullArgs = [...args, '--profile', profilePath];
|
|
97
|
-
const proc = spawn(binaryPath, fullArgs, {
|
|
98
|
-
cwd: COREBRAIN_DIR,
|
|
99
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
100
|
-
});
|
|
101
|
-
let stdout = '';
|
|
102
|
-
let stderr = '';
|
|
103
|
-
proc.stdout?.on('data', data => {
|
|
104
|
-
stdout += data.toString();
|
|
105
|
-
});
|
|
106
|
-
proc.stderr?.on('data', data => {
|
|
107
|
-
stderr += data.toString();
|
|
108
|
-
});
|
|
109
|
-
proc.on('close', code => {
|
|
110
|
-
resolve({ stdout, stderr, code: code ?? 0 });
|
|
111
|
-
});
|
|
112
|
-
proc.on('error', err => {
|
|
113
|
-
resolve({ stdout, stderr: err.message, code: 1 });
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
// ============ Profile Management ============
|
|
118
|
-
function ensureProfileExists(profile) {
|
|
119
|
-
const profilePath = join(BROWSER_PROFILES_DIR, profile);
|
|
120
|
-
if (!existsSync(profilePath)) {
|
|
121
|
-
mkdirSync(profilePath, { recursive: true });
|
|
122
|
-
}
|
|
123
|
-
return profilePath;
|
|
124
|
-
}
|
|
125
|
-
export function createProfile(name) {
|
|
126
|
-
const profilePath = join(BROWSER_PROFILES_DIR, name);
|
|
127
|
-
try {
|
|
128
|
-
if (existsSync(profilePath)) {
|
|
129
|
-
return {
|
|
130
|
-
success: false,
|
|
131
|
-
path: profilePath,
|
|
132
|
-
error: 'Profile already exists',
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
mkdirSync(profilePath, { recursive: true });
|
|
136
|
-
return { success: true, path: profilePath };
|
|
137
|
-
}
|
|
138
|
-
catch (err) {
|
|
139
|
-
return {
|
|
140
|
-
success: false,
|
|
141
|
-
path: profilePath,
|
|
142
|
-
error: err instanceof Error ? err.message : 'Failed to create profile',
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
export function deleteProfile(name) {
|
|
147
|
-
const profilePath = join(BROWSER_PROFILES_DIR, name);
|
|
148
|
-
try {
|
|
149
|
-
if (!existsSync(profilePath)) {
|
|
150
|
-
return { success: false, error: 'Profile does not exist' };
|
|
151
|
-
}
|
|
152
|
-
rmSync(profilePath, { recursive: true, force: true });
|
|
153
|
-
return { success: true };
|
|
154
|
-
}
|
|
155
|
-
catch (err) {
|
|
156
|
-
return {
|
|
157
|
-
success: false,
|
|
158
|
-
error: err instanceof Error ? err.message : 'Failed to delete profile',
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
export function listProfiles() {
|
|
163
|
-
try {
|
|
164
|
-
if (!existsSync(BROWSER_PROFILES_DIR)) {
|
|
165
|
-
return [];
|
|
166
|
-
}
|
|
167
|
-
return readdirSync(BROWSER_PROFILES_DIR, { withFileTypes: true })
|
|
168
|
-
.filter(entry => entry.isDirectory())
|
|
169
|
-
.map(entry => entry.name);
|
|
170
|
-
}
|
|
171
|
-
catch {
|
|
172
|
-
return [];
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
export function getProfilesDir() {
|
|
176
|
-
return BROWSER_PROFILES_DIR;
|
|
177
|
-
}
|
|
178
|
-
export function profileExists(name) {
|
|
179
|
-
const profilePath = join(BROWSER_PROFILES_DIR, name);
|
|
180
|
-
return existsSync(profilePath);
|
|
181
|
-
}
|
|
182
|
-
// ============ Browser Operations ============
|
|
183
|
-
/**
|
|
184
|
-
* Open a browser with URL using the specified profile
|
|
185
|
-
*/
|
|
186
|
-
export async function browserOpen(url, profile = 'default') {
|
|
187
|
-
const args = ['open', url];
|
|
188
|
-
return runAgentBrowserCommand(profile, args);
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Close a browser for the specified profile
|
|
192
|
-
*/
|
|
193
|
-
export async function browserClose(profile) {
|
|
194
|
-
return runAgentBrowserCommand(profile, ['close']);
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Check if a command is blocked
|
|
198
|
-
*/
|
|
199
|
-
export function isBlockedCommand(command) {
|
|
200
|
-
const cmd = command.toLowerCase().trim();
|
|
201
|
-
return BLOCKED_COMMANDS.includes(cmd);
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Execute a generic browser command on a profile
|
|
205
|
-
* Blocks: open, close, cookies, storage, network, trace, highlight, console, errors, state, download
|
|
206
|
-
*/
|
|
207
|
-
export async function browserCommand(profile, command, args = []) {
|
|
208
|
-
// Check if command is blocked
|
|
209
|
-
if (isBlockedCommand(command)) {
|
|
210
|
-
return {
|
|
211
|
-
stdout: '',
|
|
212
|
-
stderr: `Command "${command}" is blocked. Blocked commands: ${BLOCKED_COMMANDS.join(', ')}`,
|
|
213
|
-
code: 1,
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
return runAgentBrowserCommand(profile, [command, ...args]);
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Get all available profiles
|
|
220
|
-
*/
|
|
221
|
-
export function browserGetProfiles() {
|
|
222
|
-
return listProfiles();
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Close a browser for the specified profile
|
|
226
|
-
*/
|
|
227
|
-
export async function browserCloseAll() {
|
|
228
|
-
const profiles = browserGetProfiles();
|
|
229
|
-
for await (const profile of profiles) {
|
|
230
|
-
await runAgentBrowserCommand(profile, ['close']);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
//# sourceMappingURL=agent-browser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-browser.js","sourceRoot":"","sources":["../../src/utils/agent-browser.ts"],"names":[],"mappings":"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"}
|