@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,280 @@
1
+ import WebSocket from 'ws';
2
+ import { hostname } from 'node:os';
3
+ import { browserTools, executeBrowserTool } from '../server/tools/browser-tools.js';
4
+ import { codingTools, executeCodingTool } from '../server/tools/coding-tools.js';
5
+ import { execTools, executeExecTool } from '../server/tools/exec-tools.js';
6
+ import { browserCloseAll } from '../utils/agent-browser.js';
7
+ export class GatewayClient {
8
+ ws = null;
9
+ config;
10
+ state = 'disconnected';
11
+ gatewayId = null;
12
+ reconnectAttempts = 0;
13
+ maxReconnectAttempts = 10;
14
+ reconnectTimer = null;
15
+ shouldReconnect = true;
16
+ pingInterval = null;
17
+ constructor(config) {
18
+ this.config = config;
19
+ }
20
+ /**
21
+ * Log a message using the provided logger or console
22
+ */
23
+ log(message) {
24
+ if (this.config.logger) {
25
+ this.config.logger(message);
26
+ }
27
+ else {
28
+ console.log(message);
29
+ }
30
+ }
31
+ /**
32
+ * Build the WebSocket URL from config
33
+ */
34
+ buildWsUrl() {
35
+ // let baseUrl = this.config.url;
36
+ let baseUrl = `http://localhost:3033`;
37
+ // Convert http(s) to ws(s)
38
+ if (baseUrl.startsWith('https://')) {
39
+ baseUrl = 'wss://' + baseUrl.slice(8);
40
+ }
41
+ else if (baseUrl.startsWith('http://')) {
42
+ baseUrl = 'ws://' + baseUrl.slice(7);
43
+ }
44
+ // Remove trailing slash
45
+ if (baseUrl.endsWith('/')) {
46
+ baseUrl = baseUrl.slice(0, -1);
47
+ }
48
+ return `${baseUrl}/gateway/ws?token=${encodeURIComponent('rc_pat_is6m8b8meuz9b98kyoq5qjv75371cmzqgizbdese')}`;
49
+ }
50
+ /**
51
+ * Connect to the gateway WebSocket server
52
+ */
53
+ connect() {
54
+ if (this.state !== 'disconnected') {
55
+ return;
56
+ }
57
+ this.shouldReconnect = true;
58
+ this.state = 'connecting';
59
+ const wsUrl = this.buildWsUrl();
60
+ this.log(`Connecting to gateway: ${this.config.url}`);
61
+ this.ws = new WebSocket(wsUrl);
62
+ this.ws.on('open', () => {
63
+ this.state = 'connected';
64
+ this.reconnectAttempts = 0;
65
+ this.log('Gateway WebSocket connected');
66
+ this.config.onConnect?.();
67
+ // Send init message
68
+ this.send({
69
+ type: 'init',
70
+ gatewayId: this.config.gatewayId,
71
+ name: this.config.name,
72
+ description: this.config.description,
73
+ platform: process.platform,
74
+ hostname: hostname(),
75
+ clientVersion: '1.0.0',
76
+ });
77
+ // Start ping interval to keep connection alive
78
+ this.startPingInterval();
79
+ });
80
+ this.ws.on('message', async (data) => {
81
+ try {
82
+ const message = JSON.parse(data.toString());
83
+ await this.handleMessage(message);
84
+ }
85
+ catch (parseErr) {
86
+ this.log(`ERROR: Failed to parse message: ${parseErr}`);
87
+ }
88
+ });
89
+ this.ws.on('close', () => {
90
+ this.handleDisconnect();
91
+ });
92
+ this.ws.on('error', (wsErr) => {
93
+ this.log(`ERROR: Gateway WebSocket error: ${wsErr.message}`);
94
+ this.config.onError?.(wsErr);
95
+ });
96
+ }
97
+ /**
98
+ * Handle incoming messages from server
99
+ */
100
+ async handleMessage(message) {
101
+ switch (message.type) {
102
+ case 'get_supported_tools':
103
+ this.send({
104
+ type: 'supported_tools',
105
+ tools: [...browserTools, ...codingTools, ...execTools],
106
+ });
107
+ break;
108
+ case 'ready': {
109
+ this.state = 'ready';
110
+ const readyMsg = message;
111
+ this.gatewayId = readyMsg.gatewayId;
112
+ this.log(`Gateway ready: ${this.gatewayId}`);
113
+ this.config.onReady?.(this.gatewayId);
114
+ break;
115
+ }
116
+ case 'tool_call': {
117
+ const toolCall = message;
118
+ this.log(`TOOL_CALL: ${toolCall.tool} (id: ${toolCall.id})`);
119
+ this.log(`TOOL_PARAMS: ${JSON.stringify(toolCall.params)}`);
120
+ try {
121
+ let result;
122
+ // Route to appropriate executor based on tool prefix
123
+ if (toolCall.tool.startsWith('browser_')) {
124
+ result = await executeBrowserTool(toolCall.tool, toolCall.params);
125
+ }
126
+ else if (toolCall.tool.startsWith('coding_')) {
127
+ result = await executeCodingTool(toolCall.tool, toolCall.params);
128
+ }
129
+ else if (toolCall.tool.startsWith('exec_')) {
130
+ result = await executeExecTool(toolCall.tool, toolCall.params);
131
+ }
132
+ else {
133
+ result = { success: false, error: `Unknown tool: ${toolCall.tool}` };
134
+ }
135
+ if (result.success) {
136
+ this.log(`TOOL_RESULT: ${toolCall.tool} (id: ${toolCall.id}) - success`);
137
+ this.send({
138
+ type: 'tool_result',
139
+ id: toolCall.id,
140
+ result: result.result,
141
+ });
142
+ }
143
+ else {
144
+ this.log(`TOOL_ERROR: ${toolCall.tool} (id: ${toolCall.id}) - ${result.error}`);
145
+ this.send({
146
+ type: 'tool_result',
147
+ id: toolCall.id,
148
+ error: result.error,
149
+ });
150
+ }
151
+ }
152
+ catch (err) {
153
+ const errorMessage = err instanceof Error ? err.message : 'Unknown error';
154
+ this.log(`TOOL_EXCEPTION: ${toolCall.tool} (id: ${toolCall.id}) - ${errorMessage}`);
155
+ this.send({
156
+ type: 'tool_result',
157
+ id: toolCall.id,
158
+ error: errorMessage,
159
+ });
160
+ }
161
+ break;
162
+ }
163
+ case 'error': {
164
+ const errorMsg = message;
165
+ this.log(`ERROR: Gateway error: ${errorMsg.message} (${errorMsg.code})`);
166
+ break;
167
+ }
168
+ default:
169
+ this.log(`Unknown message type: ${message.type}`);
170
+ }
171
+ }
172
+ /**
173
+ * Handle disconnect and attempt reconnection
174
+ */
175
+ async handleDisconnect() {
176
+ const wasReady = this.state === 'ready';
177
+ this.state = 'disconnected';
178
+ this.gatewayId = null;
179
+ this.ws = null;
180
+ this.stopPingInterval();
181
+ this.log('Gateway WebSocket disconnected');
182
+ this.config.onDisconnect?.();
183
+ // Auto-close all browser sessions on disconnect
184
+ if (wasReady) {
185
+ this.log('Closing all browser sessions...');
186
+ try {
187
+ await browserCloseAll();
188
+ }
189
+ catch {
190
+ // Ignore errors when closing browser
191
+ }
192
+ }
193
+ // Attempt reconnection with exponential backoff
194
+ if (this.shouldReconnect &&
195
+ this.reconnectAttempts < this.maxReconnectAttempts) {
196
+ const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 30000);
197
+ this.reconnectAttempts++;
198
+ this.log(`Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})...`);
199
+ this.reconnectTimer = setTimeout(() => {
200
+ this.connect();
201
+ }, delay);
202
+ }
203
+ else if (this.reconnectAttempts >= this.maxReconnectAttempts) {
204
+ this.log('Max reconnection attempts reached. Shutting down gateway.');
205
+ this.config.onMaxReconnectReached?.();
206
+ }
207
+ }
208
+ /**
209
+ * Send a message to the server
210
+ */
211
+ send(message) {
212
+ if (this.ws && this.ws.readyState === WebSocket.OPEN) {
213
+ this.ws.send(JSON.stringify(message));
214
+ }
215
+ }
216
+ /**
217
+ * Start ping interval to keep connection alive
218
+ */
219
+ startPingInterval() {
220
+ this.stopPingInterval();
221
+ this.pingInterval = setInterval(() => {
222
+ if (this.ws && this.ws.readyState === WebSocket.OPEN) {
223
+ this.ws.ping();
224
+ }
225
+ }, 30000);
226
+ }
227
+ /**
228
+ * Stop ping interval
229
+ */
230
+ stopPingInterval() {
231
+ if (this.pingInterval) {
232
+ clearInterval(this.pingInterval);
233
+ this.pingInterval = null;
234
+ }
235
+ }
236
+ /**
237
+ * Disconnect from the gateway
238
+ */
239
+ disconnect() {
240
+ this.shouldReconnect = false;
241
+ if (this.reconnectTimer) {
242
+ clearTimeout(this.reconnectTimer);
243
+ this.reconnectTimer = null;
244
+ }
245
+ this.stopPingInterval();
246
+ if (this.ws) {
247
+ this.ws.close();
248
+ this.ws = null;
249
+ }
250
+ this.state = 'disconnected';
251
+ this.gatewayId = null;
252
+ }
253
+ /**
254
+ * Get the current state
255
+ */
256
+ getState() {
257
+ return this.state;
258
+ }
259
+ /**
260
+ * Get the gateway ID (if ready)
261
+ */
262
+ getGatewayId() {
263
+ return this.gatewayId;
264
+ }
265
+ /**
266
+ * Check if connected and ready
267
+ */
268
+ isReady() {
269
+ return this.state === 'ready';
270
+ }
271
+ }
272
+ /**
273
+ * Create and connect a gateway client
274
+ */
275
+ export function createGatewayClient(config) {
276
+ const client = new GatewayClient(config);
277
+ client.connect();
278
+ return client;
279
+ }
280
+ //# sourceMappingURL=gateway-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../../src/server/gateway-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Gateway client entry point - runs as a detached background process via launchd/systemd
4
+ * Connects to the remote WebSocket server and handles tool calls
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=gateway-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-entry.d.ts","sourceRoot":"","sources":["../../src/server/gateway-entry.ts"],"names":[],"mappings":";AACA;;;GAGG"}
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Gateway client entry point - runs as a detached background process via launchd/systemd
4
+ * Connects to the remote WebSocket server and handles tool calls
5
+ */
6
+ import { writeFileSync, mkdirSync, existsSync, statSync, unlinkSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { hostname } from 'node:os';
9
+ import { GatewayClient } from './gateway-client.js';
10
+ import { getConfig } from '../config/index.js';
11
+ import { getPreferences, updatePreferences } from '../config/preferences.js';
12
+ import { getConfigPath } from '../config/paths.js';
13
+ const LOG_DIR = join(getConfigPath(), 'logs');
14
+ const LOG_FILE = join(LOG_DIR, 'gateway.log');
15
+ const LOG_MAX_AGE_DAYS = 3;
16
+ // Ensure log directory exists
17
+ if (!existsSync(LOG_DIR)) {
18
+ mkdirSync(LOG_DIR, { recursive: true });
19
+ }
20
+ /**
21
+ * Clear log file if it's older than LOG_MAX_AGE_DAYS
22
+ */
23
+ function clearOldLogs() {
24
+ try {
25
+ if (!existsSync(LOG_FILE)) {
26
+ return;
27
+ }
28
+ const stats = statSync(LOG_FILE);
29
+ const ageMs = Date.now() - stats.mtime.getTime();
30
+ const maxAgeMs = LOG_MAX_AGE_DAYS * 24 * 60 * 60 * 1000;
31
+ if (ageMs > maxAgeMs) {
32
+ unlinkSync(LOG_FILE);
33
+ // Create fresh log file with rotation notice
34
+ writeFileSync(LOG_FILE, `[${new Date().toISOString()}] Log file cleared (was older than ${LOG_MAX_AGE_DAYS} days)\n`);
35
+ }
36
+ }
37
+ catch {
38
+ // Ignore errors during log rotation
39
+ }
40
+ }
41
+ function log(message) {
42
+ const timestamp = new Date().toISOString();
43
+ const logMessage = `[${timestamp}] ${message}\n`;
44
+ try {
45
+ writeFileSync(LOG_FILE, logMessage, { flag: 'a' });
46
+ }
47
+ catch {
48
+ // If logging fails, at least try stderr
49
+ process.stderr.write(logMessage);
50
+ }
51
+ }
52
+ async function main() {
53
+ // Clear old logs at startup
54
+ clearOldLogs();
55
+ log(`Starting gateway client...`);
56
+ // Load config and preferences
57
+ const config = getConfig();
58
+ const prefs = getPreferences();
59
+ const gatewayConfig = prefs.gateway;
60
+ // Get gateway info from preferences (set by `corebrain gateway config`)
61
+ const gatewayId = gatewayConfig?.id;
62
+ const gatewayName = gatewayConfig?.name || `${hostname()}-browser`;
63
+ const gatewayDescription = gatewayConfig?.description || 'Browser automation gateway';
64
+ log(`ID: ${gatewayId || '(not set)'}`);
65
+ log(`Name: ${gatewayName}`);
66
+ log(`Description: ${gatewayDescription}`);
67
+ if (!config.auth?.apiKey || !config.auth?.url) {
68
+ log('ERROR: Not authenticated. Run `corebrain login` first.');
69
+ process.exit(1);
70
+ }
71
+ if (!gatewayId) {
72
+ log('WARNING: Gateway not configured. Run `corebrain gateway config` first.');
73
+ }
74
+ log(`Connecting to: ${config.auth.url}`);
75
+ // Create gateway client
76
+ const client = new GatewayClient({
77
+ url: config.auth.url,
78
+ apiKey: config.auth.apiKey,
79
+ gatewayId: gatewayId,
80
+ name: gatewayName,
81
+ description: gatewayDescription,
82
+ logger: log, // Pass logger to GatewayClient for tool call logging
83
+ onConnect: () => {
84
+ log('Connected to gateway server');
85
+ },
86
+ onReady: (gatewayId) => {
87
+ log(`Gateway ready with ID: ${gatewayId}`);
88
+ log(`PID: ${process.pid}`);
89
+ },
90
+ onDisconnect: () => {
91
+ log('Disconnected from gateway server, will attempt reconnection...');
92
+ },
93
+ onError: (error) => {
94
+ log(`Gateway error: ${error.message}`);
95
+ },
96
+ onMaxReconnectReached: () => {
97
+ log('Max reconnection attempts (10) reached. Updating status and shutting down...');
98
+ // Update gateway status to disconnected
99
+ const currentPrefs = getPreferences();
100
+ if (currentPrefs.gateway) {
101
+ updatePreferences({
102
+ gateway: {
103
+ ...currentPrefs.gateway,
104
+ pid: 0,
105
+ startedAt: 0,
106
+ serviceInstalled: false,
107
+ },
108
+ });
109
+ }
110
+ log('Gateway status updated to disconnected. Exiting...');
111
+ process.exit(1);
112
+ },
113
+ });
114
+ // Connect
115
+ client.connect();
116
+ // Handle graceful shutdown
117
+ const shutdown = () => {
118
+ log('Shutting down gateway client...');
119
+ client.disconnect();
120
+ process.exit(0);
121
+ };
122
+ process.on('SIGTERM', shutdown);
123
+ process.on('SIGINT', shutdown);
124
+ // Handle uncaught errors
125
+ process.on('uncaughtException', (err) => {
126
+ log(`Uncaught exception: ${err.message}`);
127
+ log(err.stack || '');
128
+ process.exit(1);
129
+ });
130
+ process.on('unhandledRejection', (reason) => {
131
+ log(`Unhandled rejection: ${reason}`);
132
+ process.exit(1);
133
+ });
134
+ // Keep process alive
135
+ log('Gateway client started, waiting for tool calls...');
136
+ }
137
+ main();
138
+ //# sourceMappingURL=gateway-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-entry.js","sourceRoot":"","sources":["../../src/server/gateway-entry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function startGatewayServer(port: number): Promise<{
2
+ server: any;
3
+ port: number;
4
+ }>;
5
+ //# sourceMappingURL=gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/server/gateway.ts"],"names":[],"mappings":"AA0JA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAWvF"}
@@ -0,0 +1,136 @@
1
+ import { createServer } from 'node:http';
2
+ import { createSession, killSession, getSessionContent, listSessions, sessionExists } from '../utils/tmux.js';
3
+ // In-memory session tracking
4
+ const sessions = new Map();
5
+ function parseBody(req) {
6
+ return new Promise((resolve, reject) => {
7
+ let body = '';
8
+ req.on('data', chunk => { body += chunk.toString(); });
9
+ req.on('end', () => {
10
+ try {
11
+ resolve(body ? JSON.parse(body) : {});
12
+ }
13
+ catch (err) {
14
+ reject(err);
15
+ }
16
+ });
17
+ req.on('error', reject);
18
+ });
19
+ }
20
+ function sendJSON(res, statusCode, data) {
21
+ res.writeHead(statusCode, { 'Content-Type': 'application/json' });
22
+ res.end(JSON.stringify(data));
23
+ }
24
+ function generateSessionId() {
25
+ return `claude-code-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
26
+ }
27
+ async function handleRequest(req, res) {
28
+ const url = new URL(req.url || '/', `http://${req.headers.host}`);
29
+ const method = req.method || 'GET';
30
+ const pathname = url.pathname;
31
+ // CORS headers
32
+ res.setHeader('Access-Control-Allow-Origin', '*');
33
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS');
34
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
35
+ if (method === 'OPTIONS') {
36
+ res.writeHead(204);
37
+ res.end();
38
+ return;
39
+ }
40
+ try {
41
+ // Health check
42
+ if (pathname === '/health' && method === 'GET') {
43
+ sendJSON(res, 200, { status: 'ok', timestamp: Date.now() });
44
+ return;
45
+ }
46
+ // List sessions
47
+ if (pathname === '/sessions' && method === 'GET') {
48
+ const tmuxSessions = await listSessions();
49
+ const activeSessions = Array.from(sessions.entries())
50
+ .filter(([id]) => tmuxSessions.includes(id))
51
+ .map(([id, info]) => ({ ...info }));
52
+ sendJSON(res, 200, { sessions: activeSessions });
53
+ return;
54
+ }
55
+ // Create session
56
+ if (pathname === '/sessions' && method === 'POST') {
57
+ const body = await parseBody(req);
58
+ const { workingDir = process.cwd(), command = 'claude' } = body;
59
+ const sessionId = generateSessionId();
60
+ const sessionInfo = {
61
+ id: sessionId,
62
+ workingDir,
63
+ command,
64
+ createdAt: Date.now(),
65
+ };
66
+ // Create tmux session with claude-code
67
+ const fullCommand = `cd "${workingDir}" && ${command}`;
68
+ await createSession(sessionId, fullCommand);
69
+ sessions.set(sessionId, sessionInfo);
70
+ sendJSON(res, 201, {
71
+ success: true,
72
+ session: sessionInfo
73
+ });
74
+ return;
75
+ }
76
+ // Get session details
77
+ const sessionMatch = pathname.match(/^\/sessions\/([^\/]+)$/);
78
+ if (sessionMatch && method === 'GET') {
79
+ const sessionId = sessionMatch[1];
80
+ const info = sessions.get(sessionId);
81
+ if (!info) {
82
+ sendJSON(res, 404, { error: 'Session not found' });
83
+ return;
84
+ }
85
+ const exists = await sessionExists(sessionId);
86
+ if (!exists) {
87
+ sessions.delete(sessionId);
88
+ sendJSON(res, 404, { error: 'Session no longer active' });
89
+ return;
90
+ }
91
+ const content = await getSessionContent(sessionId);
92
+ sendJSON(res, 200, {
93
+ session: info,
94
+ content,
95
+ active: true
96
+ });
97
+ return;
98
+ }
99
+ // Delete session
100
+ if (sessionMatch && method === 'DELETE') {
101
+ const sessionId = sessionMatch[1];
102
+ const info = sessions.get(sessionId);
103
+ if (!info) {
104
+ sendJSON(res, 404, { error: 'Session not found' });
105
+ return;
106
+ }
107
+ const exists = await sessionExists(sessionId);
108
+ if (exists) {
109
+ await killSession(sessionId);
110
+ }
111
+ sessions.delete(sessionId);
112
+ sendJSON(res, 200, { success: true, message: 'Session killed' });
113
+ return;
114
+ }
115
+ // 404
116
+ sendJSON(res, 404, { error: 'Not found' });
117
+ }
118
+ catch (error) {
119
+ console.error('Gateway error:', error);
120
+ sendJSON(res, 500, {
121
+ error: 'Internal server error',
122
+ message: error instanceof Error ? error.message : 'Unknown error'
123
+ });
124
+ }
125
+ }
126
+ export function startGatewayServer(port) {
127
+ return new Promise((resolve, reject) => {
128
+ const server = createServer(handleRequest);
129
+ server.on('error', reject);
130
+ server.listen(port, () => {
131
+ console.log(`Gateway server listening on port ${port}`);
132
+ resolve({ server, port });
133
+ });
134
+ });
135
+ }
136
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/server/gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import zod from 'zod';
2
+ export declare const BrowserOpenSchema: zod.ZodObject<{
3
+ session_name: zod.ZodString;
4
+ url: zod.ZodString;
5
+ profile: zod.ZodDefault<zod.ZodOptional<zod.ZodString>>;
6
+ }, zod.core.$strip>;
7
+ export declare const BrowserCloseSchema: zod.ZodObject<{
8
+ session_name: zod.ZodString;
9
+ }, zod.core.$strip>;
10
+ export declare const BrowserCommandSchema: zod.ZodObject<{
11
+ session_name: zod.ZodString;
12
+ command: zod.ZodString;
13
+ args: zod.ZodDefault<zod.ZodOptional<zod.ZodArray<zod.ZodString>>>;
14
+ }, zod.core.$strip>;
15
+ export declare const BrowserListSessionsSchema: zod.ZodObject<{}, zod.core.$strip>;
16
+ export declare const BrowserGetProfilesSchema: zod.ZodObject<{}, zod.core.$strip>;
17
+ export interface GatewayTool {
18
+ name: string;
19
+ description: string;
20
+ inputSchema: Record<string, unknown>;
21
+ }
22
+ export declare const browserTools: GatewayTool[];
23
+ export declare function executeBrowserTool(toolName: string, params: Record<string, unknown>): Promise<{
24
+ success: boolean;
25
+ result?: unknown;
26
+ error?: string;
27
+ }>;
28
+ //# sourceMappingURL=browser-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-tools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/browser-tools.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAYtB,eAAO,MAAM,iBAAiB;;;;mBAI5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;mBAE7B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;mBAI/B,CAAC;AAEH,eAAO,MAAM,yBAAyB,oCAAiB,CAAC;AAExD,eAAO,MAAM,wBAAwB,oCAAiB,CAAC;AAIvD,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAqDD,eAAO,MAAM,YAAY,EAAE,WAAW,EA0BrC,CAAC;AAIF,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,CAyF/D"}