@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.
Files changed (181) hide show
  1. package/dist/commands/browser/close.d.ts +10 -0
  2. package/dist/commands/browser/close.d.ts.map +1 -0
  3. package/dist/commands/browser/close.js +60 -0
  4. package/dist/commands/browser/close.js.map +1 -0
  5. package/dist/commands/browser/command.d.ts +10 -0
  6. package/dist/commands/browser/command.d.ts.map +1 -0
  7. package/dist/commands/browser/command.js +67 -0
  8. package/dist/commands/browser/command.js.map +1 -0
  9. package/dist/commands/browser/create-profile.d.ts +10 -0
  10. package/dist/commands/browser/create-profile.d.ts.map +1 -0
  11. package/dist/commands/browser/create-profile.js +29 -0
  12. package/dist/commands/browser/create-profile.js.map +1 -0
  13. package/dist/commands/browser/delete-profile.d.ts +10 -0
  14. package/dist/commands/browser/delete-profile.d.ts.map +1 -0
  15. package/dist/commands/browser/delete-profile.js +27 -0
  16. package/dist/commands/browser/delete-profile.js.map +1 -0
  17. package/dist/commands/browser/install.d.ts +8 -0
  18. package/dist/commands/browser/install.d.ts.map +1 -0
  19. package/dist/commands/browser/install.js +49 -0
  20. package/dist/commands/browser/install.js.map +1 -0
  21. package/dist/commands/browser/open.d.ts +12 -0
  22. package/dist/commands/browser/open.d.ts.map +1 -0
  23. package/dist/commands/browser/open.js +65 -0
  24. package/dist/commands/browser/open.js.map +1 -0
  25. package/dist/commands/browser/status.d.ts +8 -0
  26. package/dist/commands/browser/status.d.ts.map +1 -0
  27. package/dist/commands/browser/status.js +48 -0
  28. package/dist/commands/browser/status.js.map +1 -0
  29. package/dist/commands/coding/[agent]/config.d.ts +18 -0
  30. package/dist/commands/coding/[agent]/config.d.ts.map +1 -0
  31. package/dist/commands/coding/[agent]/config.js +91 -0
  32. package/dist/commands/coding/[agent]/config.js.map +1 -0
  33. package/dist/commands/coding/config.d.ts +23 -0
  34. package/dist/commands/coding/config.d.ts.map +1 -0
  35. package/dist/commands/coding/config.js +116 -0
  36. package/dist/commands/coding/config.js.map +1 -0
  37. package/dist/commands/coding/index.d.ts +8 -0
  38. package/dist/commands/coding/index.d.ts.map +1 -0
  39. package/dist/commands/coding/index.js +42 -0
  40. package/dist/commands/coding/index.js.map +1 -0
  41. package/dist/commands/coding/remove.d.ts +10 -0
  42. package/dist/commands/coding/remove.d.ts.map +1 -0
  43. package/dist/commands/coding/remove.js +37 -0
  44. package/dist/commands/coding/remove.js.map +1 -0
  45. package/dist/commands/coding/setup.d.ts +8 -0
  46. package/dist/commands/coding/setup.d.ts.map +1 -0
  47. package/dist/commands/coding/setup.js +114 -0
  48. package/dist/commands/coding/setup.js.map +1 -0
  49. package/dist/commands/exec/config.d.ts +14 -0
  50. package/dist/commands/exec/config.d.ts.map +1 -0
  51. package/dist/commands/exec/config.js +79 -0
  52. package/dist/commands/exec/config.js.map +1 -0
  53. package/dist/commands/gateway/config.d.ts +8 -0
  54. package/dist/commands/gateway/config.d.ts.map +1 -0
  55. package/dist/commands/gateway/config.js +192 -0
  56. package/dist/commands/gateway/config.js.map +1 -0
  57. package/dist/commands/gateway/index.d.ts +14 -0
  58. package/dist/commands/gateway/index.d.ts.map +1 -0
  59. package/dist/commands/gateway/index.js +10 -0
  60. package/dist/commands/gateway/index.js.map +1 -0
  61. package/dist/commands/gateway/off.d.ts +8 -0
  62. package/dist/commands/gateway/off.d.ts.map +1 -0
  63. package/dist/commands/gateway/off.js +70 -0
  64. package/dist/commands/gateway/off.js.map +1 -0
  65. package/dist/commands/gateway/on.d.ts +8 -0
  66. package/dist/commands/gateway/on.d.ts.map +1 -0
  67. package/dist/commands/gateway/on.js +135 -0
  68. package/dist/commands/gateway/on.js.map +1 -0
  69. package/dist/commands/gateway/restart.d.ts +8 -0
  70. package/dist/commands/gateway/restart.d.ts.map +1 -0
  71. package/dist/commands/gateway/restart.js +70 -0
  72. package/dist/commands/gateway/restart.js.map +1 -0
  73. package/dist/commands/gateway/status.d.ts +8 -0
  74. package/dist/commands/gateway/status.d.ts.map +1 -0
  75. package/dist/commands/gateway/status.js +98 -0
  76. package/dist/commands/gateway/status.js.map +1 -0
  77. package/dist/commands/gateway/uninstall.d.ts +8 -0
  78. package/dist/commands/gateway/uninstall.d.ts.map +1 -0
  79. package/dist/commands/gateway/uninstall.js +80 -0
  80. package/dist/commands/gateway/uninstall.js.map +1 -0
  81. package/dist/commands/index.d.ts +1 -5
  82. package/dist/commands/index.d.ts.map +1 -1
  83. package/dist/commands/login.d.ts +1 -1
  84. package/dist/commands/login.d.ts.map +1 -1
  85. package/dist/commands/logout.d.ts +1 -1
  86. package/dist/commands/logout.d.ts.map +1 -1
  87. package/dist/commands/me.d.ts +1 -1
  88. package/dist/commands/me.d.ts.map +1 -1
  89. package/dist/commands/server.d.ts +10 -0
  90. package/dist/commands/server.d.ts.map +1 -0
  91. package/dist/commands/server.js +60 -0
  92. package/dist/commands/server.js.map +1 -0
  93. package/dist/commands/token.d.ts +1 -1
  94. package/dist/commands/token.d.ts.map +1 -1
  95. package/dist/components/error-message.d.ts.map +1 -1
  96. package/dist/components/error-message.js +6 -1
  97. package/dist/components/error-message.js.map +1 -1
  98. package/dist/components/info-message.d.ts.map +1 -1
  99. package/dist/components/info-message.js +5 -1
  100. package/dist/components/info-message.js.map +1 -1
  101. package/dist/components/success-message.d.ts.map +1 -1
  102. package/dist/components/success-message.js +5 -1
  103. package/dist/components/success-message.js.map +1 -1
  104. package/dist/components/warning-message.d.ts +2 -3
  105. package/dist/components/warning-message.d.ts.map +1 -1
  106. package/dist/components/warning-message.js +10 -4
  107. package/dist/components/warning-message.js.map +1 -1
  108. package/dist/config/index.d.ts +4 -0
  109. package/dist/config/index.d.ts.map +1 -1
  110. package/dist/config/index.js +31 -30
  111. package/dist/config/index.js.map +1 -1
  112. package/dist/config/paths.d.ts.map +1 -1
  113. package/dist/config/paths.js +4 -36
  114. package/dist/config/paths.js.map +1 -1
  115. package/dist/config/preferences.d.ts +14 -0
  116. package/dist/config/preferences.d.ts.map +1 -0
  117. package/dist/config/preferences.js +82 -0
  118. package/dist/config/preferences.js.map +1 -0
  119. package/dist/config/themes.d.ts +5 -0
  120. package/dist/config/themes.d.ts.map +1 -1
  121. package/dist/config/themes.js +5 -0
  122. package/dist/config/themes.js.map +1 -1
  123. package/dist/server/gateway-client.d.ts +80 -0
  124. package/dist/server/gateway-client.d.ts.map +1 -0
  125. package/dist/server/gateway-client.js +280 -0
  126. package/dist/server/gateway-client.js.map +1 -0
  127. package/dist/server/gateway-entry.d.ts +7 -0
  128. package/dist/server/gateway-entry.d.ts.map +1 -0
  129. package/dist/server/gateway-entry.js +138 -0
  130. package/dist/server/gateway-entry.js.map +1 -0
  131. package/dist/server/gateway.d.ts +5 -0
  132. package/dist/server/gateway.d.ts.map +1 -0
  133. package/dist/server/gateway.js +136 -0
  134. package/dist/server/gateway.js.map +1 -0
  135. package/dist/server/tools/browser-tools.d.ts +28 -0
  136. package/dist/server/tools/browser-tools.d.ts.map +1 -0
  137. package/dist/server/tools/browser-tools.js +179 -0
  138. package/dist/server/tools/browser-tools.js.map +1 -0
  139. package/dist/server/tools/coding-tools.d.ts +27 -0
  140. package/dist/server/tools/coding-tools.d.ts.map +1 -0
  141. package/dist/server/tools/coding-tools.js +345 -0
  142. package/dist/server/tools/coding-tools.js.map +1 -0
  143. package/dist/server/tools/exec-tools.d.ts +14 -0
  144. package/dist/server/tools/exec-tools.d.ts.map +1 -0
  145. package/dist/server/tools/exec-tools.js +203 -0
  146. package/dist/server/tools/exec-tools.js.map +1 -0
  147. package/dist/types/config.d.ts +36 -0
  148. package/dist/types/config.d.ts.map +1 -1
  149. package/dist/utils/agent-browser.d.ts +63 -0
  150. package/dist/utils/agent-browser.d.ts.map +1 -0
  151. package/dist/utils/agent-browser.js +301 -0
  152. package/dist/utils/agent-browser.js.map +1 -0
  153. package/dist/utils/coding-runner.d.ts +60 -0
  154. package/dist/utils/coding-runner.d.ts.map +1 -0
  155. package/dist/utils/coding-runner.js +174 -0
  156. package/dist/utils/coding-runner.js.map +1 -0
  157. package/dist/utils/coding-sessions.d.ts +61 -0
  158. package/dist/utils/coding-sessions.d.ts.map +1 -0
  159. package/dist/utils/coding-sessions.js +112 -0
  160. package/dist/utils/coding-sessions.js.map +1 -0
  161. package/dist/utils/process.d.ts +22 -0
  162. package/dist/utils/process.d.ts.map +1 -0
  163. package/dist/utils/process.js +81 -0
  164. package/dist/utils/process.js.map +1 -0
  165. package/dist/utils/service-manager/index.d.ts +49 -0
  166. package/dist/utils/service-manager/index.d.ts.map +1 -0
  167. package/dist/utils/service-manager/index.js +137 -0
  168. package/dist/utils/service-manager/index.js.map +1 -0
  169. package/dist/utils/service-manager/launchd.d.ts +31 -0
  170. package/dist/utils/service-manager/launchd.d.ts.map +1 -0
  171. package/dist/utils/service-manager/launchd.js +208 -0
  172. package/dist/utils/service-manager/launchd.js.map +1 -0
  173. package/dist/utils/service-manager/systemd.d.ts +31 -0
  174. package/dist/utils/service-manager/systemd.d.ts.map +1 -0
  175. package/dist/utils/service-manager/systemd.js +187 -0
  176. package/dist/utils/service-manager/systemd.js.map +1 -0
  177. package/dist/utils/tmux.d.ts +37 -0
  178. package/dist/utils/tmux.d.ts.map +1 -0
  179. package/dist/utils/tmux.js +96 -0
  180. package/dist/utils/tmux.js.map +1 -0
  181. 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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"}
@@ -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;AAI5C,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,wBAAwB,CAAC,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,MAAM,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,CAAC;CACF;AAGD,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,wBAAwB,CAAC,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IAEzB,IAAI,CAAC,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IAGF,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,SAAS,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE;YAChB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,wBAAwB,CAAC,EAAE,MAAM,CAAC;SAClC,CAAC;QACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,EAAE,CAAC;CACJ;AAED,MAAM,WAAW,eAAe;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE;SACf,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM;KACxB,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,WAAW,CAAC;CAC5B"}
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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"}