@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.
Files changed (50) hide show
  1. package/dist/commands/browser/status.d.ts.map +1 -1
  2. package/dist/commands/browser/status.js +5 -3
  3. package/dist/commands/browser/status.js.map +1 -1
  4. package/dist/utils/browser-use.js +1 -1
  5. package/dist/utils/browser-use.js.map +1 -1
  6. package/package.json +1 -1
  7. package/dist/commands/browser/create-profile.d.ts +0 -10
  8. package/dist/commands/browser/create-profile.d.ts.map +0 -1
  9. package/dist/commands/browser/create-profile.js +0 -35
  10. package/dist/commands/browser/create-profile.js.map +0 -1
  11. package/dist/commands/browser/delete-profile.d.ts +0 -10
  12. package/dist/commands/browser/delete-profile.d.ts.map +0 -1
  13. package/dist/commands/browser/delete-profile.js +0 -34
  14. package/dist/commands/browser/delete-profile.js.map +0 -1
  15. package/dist/commands/coding/[agent]/config.d.ts +0 -18
  16. package/dist/commands/coding/[agent]/config.d.ts.map +0 -1
  17. package/dist/commands/coding/[agent]/config.js +0 -91
  18. package/dist/commands/coding/[agent]/config.js.map +0 -1
  19. package/dist/commands/coding/index.d.ts +0 -8
  20. package/dist/commands/coding/index.d.ts.map +0 -1
  21. package/dist/commands/coding/index.js +0 -42
  22. package/dist/commands/coding/index.js.map +0 -1
  23. package/dist/commands/gateway/index.d.ts +0 -14
  24. package/dist/commands/gateway/index.d.ts.map +0 -1
  25. package/dist/commands/gateway/index.js +0 -10
  26. package/dist/commands/gateway/index.js.map +0 -1
  27. package/dist/commands/gateway/off.d.ts +0 -8
  28. package/dist/commands/gateway/off.d.ts.map +0 -1
  29. package/dist/commands/gateway/off.js +0 -60
  30. package/dist/commands/gateway/off.js.map +0 -1
  31. package/dist/commands/gateway/on.d.ts +0 -8
  32. package/dist/commands/gateway/on.d.ts.map +0 -1
  33. package/dist/commands/gateway/on.js +0 -106
  34. package/dist/commands/gateway/on.js.map +0 -1
  35. package/dist/commands/gateway/uninstall.d.ts +0 -8
  36. package/dist/commands/gateway/uninstall.d.ts.map +0 -1
  37. package/dist/commands/gateway/uninstall.js +0 -68
  38. package/dist/commands/gateway/uninstall.js.map +0 -1
  39. package/dist/commands/server.d.ts +0 -10
  40. package/dist/commands/server.d.ts.map +0 -1
  41. package/dist/commands/server.js +0 -60
  42. package/dist/commands/server.js.map +0 -1
  43. package/dist/server/gateway.d.ts +0 -5
  44. package/dist/server/gateway.d.ts.map +0 -1
  45. package/dist/server/gateway.js +0 -136
  46. package/dist/server/gateway.js.map +0 -1
  47. package/dist/utils/agent-browser.d.ts +0 -46
  48. package/dist/utils/agent-browser.d.ts.map +0 -1
  49. package/dist/utils/agent-browser.js +0 -233
  50. 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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"}