genbox-agent 1.0.5 → 1.0.9

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/hook.js CHANGED
@@ -104,12 +104,12 @@ async function sendEvent(eventData) {
104
104
  return false;
105
105
  }
106
106
  const url = new URL('/claude/events', MONITORING_API_URL);
107
- // Add metadata
108
- eventData.genboxId = GENBOX_ID;
109
- eventData.genboxToken = GENBOX_TOKEN;
110
- eventData.sessionId = getOrCreateSessionId();
111
- eventData.tmuxSession = getTmuxSession();
112
- eventData.projectPath = process.cwd();
107
+ // Add metadata (using snake_case to match DTO)
108
+ eventData.genbox_id = GENBOX_ID;
109
+ eventData.genbox_token = GENBOX_TOKEN;
110
+ eventData.session_id = getOrCreateSessionId();
111
+ eventData.tmux_session = getTmuxSession();
112
+ eventData.cwd = process.cwd();
113
113
  eventData.timestamp = new Date().toISOString();
114
114
  const data = JSON.stringify(eventData);
115
115
  const isHttps = url.protocol === 'https:';
@@ -117,17 +117,18 @@ async function sendEvent(eventData) {
117
117
  const options = {
118
118
  hostname: url.hostname,
119
119
  port: url.port || (isHttps ? 443 : 80),
120
- path: url.pathname,
120
+ path: `${url.pathname}?token=${encodeURIComponent(GENBOX_TOKEN)}`,
121
121
  method: 'POST',
122
122
  headers: {
123
123
  'Content-Type': 'application/json',
124
124
  'Content-Length': Buffer.byteLength(data),
125
+ 'X-Genbox-Id': GENBOX_ID,
125
126
  'X-Genbox-Token': GENBOX_TOKEN,
126
127
  },
127
128
  timeout: 5000,
128
129
  };
129
130
  const req = (isHttps ? https : http).request(options, (res) => {
130
- resolve(res.statusCode === 200 || res.statusCode === 201);
131
+ resolve(res.statusCode === 200 || res.statusCode === 201 || res.statusCode === 202);
131
132
  });
132
133
  req.on('error', (error) => {
133
134
  console.error(`Warning: Failed to send event: ${error.message}`);
@@ -160,42 +161,42 @@ async function main() {
160
161
  input = fs.readFileSync(0, 'utf-8');
161
162
  }
162
163
  const hookInput = parseHookInput(input);
163
- // Build event data based on hook type
164
+ // Build event data based on hook type (using snake_case to match DTO)
164
165
  const eventData = {
165
- eventType: HOOK_TYPE,
166
+ event_type: HOOK_TYPE,
166
167
  };
167
168
  switch (HOOK_TYPE) {
168
169
  case 'PreToolUse':
169
- eventData.toolName = hookInput.tool_name || '';
170
- eventData.toolInput = hookInput.tool_input || {};
170
+ eventData.tool_name = hookInput.tool_name || '';
171
+ eventData.tool_input = hookInput.tool_input || {};
171
172
  break;
172
173
  case 'PostToolUse':
173
- eventData.toolName = hookInput.tool_name || '';
174
- eventData.toolInput = hookInput.tool_input || {};
175
- eventData.toolResponse = hookInput.tool_response || {};
174
+ eventData.tool_name = hookInput.tool_name || '';
175
+ eventData.tool_input = hookInput.tool_input || {};
176
+ eventData.tool_response = hookInput.tool_response || {};
176
177
  eventData.success = hookInput.tool_response?.success !== false;
177
178
  break;
178
179
  case 'UserPromptSubmit':
179
180
  const prompt = hookInput.prompt || '';
180
181
  eventData.prompt = prompt;
181
- eventData.promptLength = prompt.length;
182
+ eventData.prompt_length = prompt.length;
182
183
  break;
183
184
  case 'Stop':
184
- eventData.stopReason = hookInput.stop_reason || '';
185
+ eventData.stop_reason = hookInput.stop_reason || '';
185
186
  break;
186
187
  case 'SubagentStop':
187
- eventData.subagentType = hookInput.subagent_type || '';
188
- eventData.stopReason = hookInput.stop_reason || '';
188
+ eventData.subagent_type = hookInput.subagent_type || '';
189
+ eventData.stop_reason = hookInput.stop_reason || '';
189
190
  break;
190
191
  case 'Notification':
191
- eventData.notification = hookInput.message || '';
192
+ eventData.notification_message = hookInput.message || '';
192
193
  break;
193
194
  case 'SessionStart':
194
- eventData.cliVersion = hookInput.cli_version || '';
195
+ eventData.cli_version = hookInput.cli_version || '';
195
196
  break;
196
197
  case 'SessionEnd':
197
198
  clearSessionId();
198
- eventData.sessionDuration = hookInput.duration_ms || 0;
199
+ eventData.duration_ms = hookInput.duration_ms || 0;
199
200
  break;
200
201
  }
201
202
  // Send the event (don't await - fire and forget)
package/dist/hook.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -14,5 +14,4 @@
14
14
  */
15
15
  export * from './types';
16
16
  export { BaseProvider, IAIProvider, ClaudeProvider, GeminiProvider, CodexProvider, ProviderRegistry, UnifiedSessionManager, HookConfigGenerator, } from './providers';
17
- export { SessionManager, ClaudeSession } from './session-manager';
18
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,cAAc,EACd,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,cAAc,EACd,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -28,7 +28,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
28
28
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
29
29
  };
30
30
  Object.defineProperty(exports, "__esModule", { value: true });
31
- exports.SessionManager = exports.HookConfigGenerator = exports.UnifiedSessionManager = exports.ProviderRegistry = exports.CodexProvider = exports.GeminiProvider = exports.ClaudeProvider = exports.BaseProvider = void 0;
31
+ exports.HookConfigGenerator = exports.UnifiedSessionManager = exports.ProviderRegistry = exports.CodexProvider = exports.GeminiProvider = exports.ClaudeProvider = exports.BaseProvider = void 0;
32
32
  // Types
33
33
  __exportStar(require("./types"), exports);
34
34
  // Providers
@@ -40,7 +40,4 @@ Object.defineProperty(exports, "CodexProvider", { enumerable: true, get: functio
40
40
  Object.defineProperty(exports, "ProviderRegistry", { enumerable: true, get: function () { return providers_1.ProviderRegistry; } });
41
41
  Object.defineProperty(exports, "UnifiedSessionManager", { enumerable: true, get: function () { return providers_1.UnifiedSessionManager; } });
42
42
  Object.defineProperty(exports, "HookConfigGenerator", { enumerable: true, get: function () { return providers_1.HookConfigGenerator; } });
43
- // Legacy exports for backwards compatibility
44
- var session_manager_1 = require("./session-manager");
45
- Object.defineProperty(exports, "SessionManager", { enumerable: true, get: function () { return session_manager_1.SessionManager; } });
46
43
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;;;;;;;;;;;;;;;AAEH,QAAQ;AACR,0CAAwB;AAExB,YAAY;AACZ,yCASqB;AARnB,yGAAA,YAAY,OAAA;AAEZ,2GAAA,cAAc,OAAA;AACd,2GAAA,cAAc,OAAA;AACd,0GAAA,aAAa,OAAA;AACb,6GAAA,gBAAgB,OAAA;AAChB,kHAAA,qBAAqB,OAAA;AACrB,gHAAA,mBAAmB,OAAA;AAGrB,6CAA6C;AAC7C,qDAAkE;AAAzD,iHAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;;;;;;;;;;;;;;;AAEH,QAAQ;AACR,0CAAwB;AAExB,YAAY;AACZ,yCASqB;AARnB,yGAAA,YAAY,OAAA;AAEZ,2GAAA,cAAc,OAAA;AACd,2GAAA,cAAc,OAAA;AACd,0GAAA,aAAa,OAAA;AACb,6GAAA,gBAAgB,OAAA;AAChB,kHAAA,qBAAqB,OAAA;AACrB,gHAAA,mBAAmB,OAAA"}
package/package.json CHANGED
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "name": "genbox-agent",
3
- "version": "1.0.5",
3
+ "version": "1.0.9",
4
4
  "description": "Unified agent for monitoring and controlling AI CLI sessions (Claude Code, Gemini CLI, OpenAI Codex) in genbox VMs",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "bin": {
8
8
  "genbox-agent": "./dist/unified-daemon.js",
9
- "genbox-agent-legacy": "./dist/daemon.js",
10
9
  "ai-hook": "./dist/unified-hook.js",
11
10
  "claude-hook": "./dist/hook.js",
12
11
  "genbox-configure-hooks": "./dist/configure-hooks.js"
@@ -14,7 +13,6 @@
14
13
  "scripts": {
15
14
  "build": "tsc",
16
15
  "start": "node dist/unified-daemon.js",
17
- "start:legacy": "node dist/daemon.js",
18
16
  "dev": "tsx watch src/unified-daemon.ts",
19
17
  "hook": "node dist/unified-hook.js",
20
18
  "configure-hooks": "node dist/configure-hooks.js"
package/dist/daemon.d.ts DELETED
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Genbox Agent Daemon
4
- *
5
- * WebSocket client that runs on each genbox VM and:
6
- * 1. Connects to the backend monitoring service
7
- * 2. Receives remote commands (send_prompt, send_keystroke, create_session)
8
- * 3. Manages tmux sessions running Claude Code
9
- * 4. Streams terminal output back to the dashboard
10
- */
11
- export {};
12
- //# sourceMappingURL=daemon.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
package/dist/daemon.js DELETED
@@ -1,395 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- /**
4
- * Genbox Agent Daemon
5
- *
6
- * WebSocket client that runs on each genbox VM and:
7
- * 1. Connects to the backend monitoring service
8
- * 2. Receives remote commands (send_prompt, send_keystroke, create_session)
9
- * 3. Manages tmux sessions running Claude Code
10
- * 4. Streams terminal output back to the dashboard
11
- */
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- const socket_io_client_1 = require("socket.io-client");
14
- const child_process_1 = require("child_process");
15
- const session_manager_1 = require("./session-manager");
16
- // Configuration from environment
17
- const GENBOX_ID = process.env.GENBOX_ID || '';
18
- const GENBOX_TOKEN = process.env.GENBOX_TOKEN || '';
19
- const MONITORING_WS_URL = process.env.MONITORING_WS_URL || 'http://localhost:3001';
20
- // Output polling interval (ms)
21
- const OUTPUT_POLL_INTERVAL = 2000;
22
- // System stats reporting interval (ms)
23
- const STATS_INTERVAL = 10000; // 10 seconds
24
- /**
25
- * Collect system stats from the local machine
26
- */
27
- function collectSystemStats() {
28
- try {
29
- // Load averages
30
- const loadAvgRaw = (0, child_process_1.execSync)("cat /proc/loadavg | awk '{print $1,$2,$3}'", { encoding: 'utf8' }).trim();
31
- const [load1, load5, load15] = loadAvgRaw.split(' ').map(parseFloat);
32
- // Disk usage (root filesystem)
33
- const dfOutput = (0, child_process_1.execSync)("df -BM / | tail -1", { encoding: 'utf8' }).trim();
34
- const dfParts = dfOutput.split(/\s+/);
35
- const diskTotal = parseInt(dfParts[1]?.replace('M', '') || '0', 10);
36
- const diskUsed = parseInt(dfParts[2]?.replace('M', '') || '0', 10);
37
- const diskPct = parseInt(dfParts[4]?.replace('%', '') || '0', 10);
38
- // Memory usage
39
- const memOutput = (0, child_process_1.execSync)("free -m | grep Mem", { encoding: 'utf8' }).trim();
40
- const memParts = memOutput.split(/\s+/);
41
- const memTotal = parseInt(memParts[1] || '0', 10);
42
- const memUsed = parseInt(memParts[2] || '0', 10);
43
- const memPct = memTotal > 0 ? Math.round((memUsed * 100) / memTotal) : 0;
44
- // Swap usage
45
- const swapOutput = (0, child_process_1.execSync)("free -m | grep Swap", { encoding: 'utf8' }).trim();
46
- const swapParts = swapOutput.split(/\s+/);
47
- const swapTotal = parseInt(swapParts[1] || '0', 10);
48
- const swapUsed = parseInt(swapParts[2] || '0', 10);
49
- const swapPct = swapTotal > 0 ? Math.round((swapUsed * 100) / swapTotal) : 0;
50
- // Process count
51
- const procCount = parseInt((0, child_process_1.execSync)("ps aux | wc -l", { encoding: 'utf8' }).trim(), 10);
52
- // Uptime in seconds
53
- const uptimeSec = parseInt((0, child_process_1.execSync)("awk '{print int($1)}' /proc/uptime", { encoding: 'utf8' }).trim(), 10);
54
- // Docker services
55
- let dockerServices = [];
56
- try {
57
- const dockerOutput = (0, child_process_1.execSync)("docker ps -a --format '{{.Names}}|{{.Status}}' 2>/dev/null | head -20", { encoding: 'utf8', timeout: 5000 }).trim();
58
- if (dockerOutput) {
59
- dockerServices = dockerOutput.split('\n').filter(Boolean).map(line => {
60
- const [name, status] = line.split('|');
61
- let health;
62
- if (status?.includes('(healthy)'))
63
- health = 'healthy';
64
- else if (status?.includes('(unhealthy)'))
65
- health = 'unhealthy';
66
- else if (status?.includes('(health:'))
67
- health = 'starting';
68
- return { name: name || '', status: status || '', ...(health && { health }) };
69
- });
70
- }
71
- }
72
- catch {
73
- // Docker not available or command failed
74
- }
75
- // PM2 services
76
- let pm2Services = [];
77
- try {
78
- const pm2Output = (0, child_process_1.execSync)("source /home/dev/.nvm/nvm.sh 2>/dev/null && pm2 jlist 2>/dev/null", { encoding: 'utf8', shell: '/bin/bash', timeout: 5000 }).trim();
79
- if (pm2Output) {
80
- const pm2Data = JSON.parse(pm2Output);
81
- pm2Services = pm2Data.map((app) => ({
82
- name: app.name || '',
83
- status: app.pm2_env?.status || 'unknown',
84
- cpu: app.monit?.cpu || 0,
85
- memory: Math.round((app.monit?.memory || 0) / 1024 / 1024), // Convert to MB
86
- }));
87
- }
88
- }
89
- catch {
90
- // PM2 not available or command failed
91
- }
92
- return {
93
- loadAvg: [load1 || 0, load5 || 0, load15 || 0],
94
- diskUsagePercent: diskPct,
95
- diskUsedGb: Math.round(diskUsed / 1024),
96
- diskTotalGb: Math.round(diskTotal / 1024),
97
- memoryUsagePercent: memPct,
98
- memoryUsedMb: memUsed,
99
- memoryTotalMb: memTotal,
100
- swapUsagePercent: swapPct,
101
- processCount: procCount,
102
- uptimeSeconds: uptimeSec,
103
- dockerServices,
104
- pm2Services,
105
- };
106
- }
107
- catch (error) {
108
- console.error('Failed to collect system stats:', error);
109
- return null;
110
- }
111
- }
112
- class GenboxAgentDaemon {
113
- genboxId;
114
- token;
115
- wsUrl;
116
- socket = null;
117
- sessionManager;
118
- running = false;
119
- outputPollers = new Map();
120
- statsInterval = null;
121
- constructor(genboxId, token, wsUrl) {
122
- this.genboxId = genboxId;
123
- this.token = token;
124
- this.wsUrl = wsUrl;
125
- this.sessionManager = new session_manager_1.SessionManager(genboxId);
126
- }
127
- async connect() {
128
- return new Promise((resolve) => {
129
- console.log(`Connecting to ${this.wsUrl}/ai-monitoring...`);
130
- this.socket = (0, socket_io_client_1.io)(`${this.wsUrl}/ai-monitoring`, {
131
- query: { genboxId: this.genboxId, type: 'genbox' },
132
- auth: { genboxId: this.genboxId, token: this.token },
133
- transports: ['websocket', 'polling'],
134
- reconnection: true,
135
- reconnectionAttempts: Infinity,
136
- reconnectionDelay: 1000,
137
- reconnectionDelayMax: 30000,
138
- });
139
- this.socket.on('connect', () => {
140
- console.log(`[${this.genboxId}] Connected to monitoring server`);
141
- this.running = true;
142
- this.onConnect();
143
- resolve(true);
144
- });
145
- this.socket.on('disconnect', (reason) => {
146
- console.log(`[${this.genboxId}] Disconnected: ${reason}`);
147
- this.running = false;
148
- });
149
- this.socket.on('connect_error', (error) => {
150
- console.error(`[${this.genboxId}] Connection error:`, error.message);
151
- });
152
- // Register event handlers
153
- this.socket.on('send_prompt', this.onSendPrompt.bind(this));
154
- this.socket.on('send_keystroke', this.onSendKeystroke.bind(this));
155
- this.socket.on('create_session', this.onCreateSession.bind(this));
156
- this.socket.on('get_output', this.onGetOutput.bind(this));
157
- this.socket.on('kill_session', this.onKillSession.bind(this));
158
- this.socket.on('list_sessions', this.onListSessions.bind(this));
159
- this.socket.on('error', this.onError.bind(this));
160
- // Timeout after 10 seconds
161
- setTimeout(() => {
162
- if (!this.socket?.connected) {
163
- console.error('Connection timeout');
164
- resolve(false);
165
- }
166
- }, 10000);
167
- });
168
- }
169
- onConnect() {
170
- // Register as genbox agent
171
- this.socket?.emit('register_agent', {
172
- genboxId: this.genboxId,
173
- token: this.token,
174
- });
175
- // Send initial session list
176
- const sessions = this.sessionManager.listSessions();
177
- this.socket?.emit('agent_sessions', {
178
- genboxId: this.genboxId,
179
- sessions,
180
- });
181
- // Start system stats polling
182
- this.startStatsPolling();
183
- // Send initial stats immediately
184
- this.sendSystemStats();
185
- }
186
- startStatsPolling() {
187
- // Clear any existing interval
188
- this.stopStatsPolling();
189
- this.statsInterval = setInterval(() => {
190
- if (this.running && this.socket?.connected) {
191
- this.sendSystemStats();
192
- }
193
- }, STATS_INTERVAL);
194
- console.log(`[${this.genboxId}] Started system stats polling (every ${STATS_INTERVAL / 1000}s)`);
195
- }
196
- stopStatsPolling() {
197
- if (this.statsInterval) {
198
- clearInterval(this.statsInterval);
199
- this.statsInterval = null;
200
- }
201
- }
202
- sendSystemStats() {
203
- const stats = collectSystemStats();
204
- if (stats && this.socket?.connected) {
205
- this.socket.emit('system_stats', {
206
- genboxId: this.genboxId,
207
- stats,
208
- });
209
- }
210
- }
211
- onSendPrompt(data) {
212
- const { sessionId, prompt, requestId } = data;
213
- if (!sessionId || !prompt)
214
- return;
215
- console.log(`[${this.genboxId}] Sending prompt to ${sessionId}: ${prompt.slice(0, 50)}...`);
216
- const success = this.sessionManager.sendPrompt(sessionId, prompt);
217
- this.socket?.emit('prompt_result', {
218
- genboxId: this.genboxId,
219
- sessionId,
220
- requestId,
221
- success,
222
- });
223
- // Capture output after a delay
224
- if (success) {
225
- setTimeout(() => this.captureAndSendOutput(sessionId), 1000);
226
- }
227
- }
228
- onSendKeystroke(data) {
229
- const { sessionId, key, requestId } = data;
230
- if (!sessionId || !key)
231
- return;
232
- console.log(`[${this.genboxId}] Sending keystroke to ${sessionId}: ${key}`);
233
- const success = this.sessionManager.sendKeystroke(sessionId, key);
234
- this.socket?.emit('keystroke_result', {
235
- genboxId: this.genboxId,
236
- sessionId,
237
- requestId,
238
- success,
239
- });
240
- }
241
- onCreateSession(data) {
242
- const { projectPath = '/home/dev', requestId } = data;
243
- console.log(`[${this.genboxId}] Creating new session at ${projectPath}`);
244
- const session = this.sessionManager.createSession(projectPath);
245
- if (session) {
246
- this.socket?.emit('session_created', {
247
- genboxId: this.genboxId,
248
- sessionId: session.sessionId,
249
- sessionName: session.sessionName,
250
- projectPath: session.projectPath,
251
- requestId,
252
- success: true,
253
- });
254
- // Start output polling for this session
255
- this.startOutputPolling(session.sessionId);
256
- }
257
- else {
258
- this.socket?.emit('session_created', {
259
- genboxId: this.genboxId,
260
- requestId,
261
- success: false,
262
- error: 'Failed to create session',
263
- });
264
- }
265
- }
266
- onGetOutput(data) {
267
- const { sessionId, lines = 100, requestId } = data;
268
- if (!sessionId)
269
- return;
270
- const output = this.sessionManager.getOutput(sessionId, lines);
271
- const status = this.sessionManager.getSessionStatus(sessionId);
272
- this.socket?.emit('output_update', {
273
- genboxId: this.genboxId,
274
- sessionId,
275
- requestId,
276
- output: output || '',
277
- status,
278
- });
279
- }
280
- onKillSession(data) {
281
- const { sessionId, requestId } = data;
282
- if (!sessionId)
283
- return;
284
- console.log(`[${this.genboxId}] Killing session ${sessionId}`);
285
- const success = this.sessionManager.killSession(sessionId);
286
- this.stopOutputPolling(sessionId);
287
- this.socket?.emit('session_killed', {
288
- genboxId: this.genboxId,
289
- sessionId,
290
- requestId,
291
- success,
292
- });
293
- }
294
- onListSessions(data) {
295
- const { requestId } = data;
296
- const sessions = this.sessionManager.listSessions();
297
- this.socket?.emit('sessions_list', {
298
- genboxId: this.genboxId,
299
- requestId,
300
- sessions,
301
- });
302
- }
303
- onError(data) {
304
- console.error(`[${this.genboxId}] Error from server:`, data);
305
- }
306
- startOutputPolling(sessionId) {
307
- if (this.outputPollers.has(sessionId))
308
- return;
309
- let lastOutput = '';
310
- const poller = setInterval(() => {
311
- if (!this.running) {
312
- this.stopOutputPolling(sessionId);
313
- return;
314
- }
315
- const output = this.sessionManager.getOutput(sessionId, 100);
316
- const status = this.sessionManager.getSessionStatus(sessionId);
317
- // Only send if output changed
318
- if (output && output !== lastOutput) {
319
- lastOutput = output;
320
- this.socket?.emit('output_update', {
321
- genboxId: this.genboxId,
322
- sessionId,
323
- output,
324
- status,
325
- });
326
- }
327
- // Stop polling if session ended
328
- if (status === 'ended') {
329
- this.stopOutputPolling(sessionId);
330
- }
331
- }, OUTPUT_POLL_INTERVAL);
332
- this.outputPollers.set(sessionId, poller);
333
- }
334
- stopOutputPolling(sessionId) {
335
- const poller = this.outputPollers.get(sessionId);
336
- if (poller) {
337
- clearInterval(poller);
338
- this.outputPollers.delete(sessionId);
339
- }
340
- }
341
- captureAndSendOutput(sessionId) {
342
- const output = this.sessionManager.getOutput(sessionId, 100);
343
- const status = this.sessionManager.getSessionStatus(sessionId);
344
- if (output && this.socket?.connected) {
345
- this.socket.emit('output_update', {
346
- genboxId: this.genboxId,
347
- sessionId,
348
- output,
349
- status,
350
- });
351
- }
352
- }
353
- async run() {
354
- console.log(`Starting Genbox Agent Daemon for ${this.genboxId}`);
355
- const connected = await this.connect();
356
- if (!connected) {
357
- console.log('Initial connection failed, will keep retrying...');
358
- }
359
- // Keep running
360
- await new Promise((resolve) => {
361
- const shutdown = () => {
362
- console.log('Shutting down...');
363
- this.running = false;
364
- // Stop stats polling
365
- this.stopStatsPolling();
366
- // Stop all output pollers
367
- for (const sessionId of this.outputPollers.keys()) {
368
- this.stopOutputPolling(sessionId);
369
- }
370
- this.socket?.disconnect();
371
- resolve();
372
- };
373
- process.on('SIGTERM', shutdown);
374
- process.on('SIGINT', shutdown);
375
- });
376
- }
377
- }
378
- // Main entry point
379
- async function main() {
380
- if (!GENBOX_ID) {
381
- console.error('Error: GENBOX_ID environment variable not set');
382
- process.exit(1);
383
- }
384
- if (!GENBOX_TOKEN) {
385
- console.error('Error: GENBOX_TOKEN environment variable not set');
386
- process.exit(1);
387
- }
388
- const daemon = new GenboxAgentDaemon(GENBOX_ID, GENBOX_TOKEN, MONITORING_WS_URL);
389
- await daemon.run();
390
- }
391
- main().catch((error) => {
392
- console.error('Fatal error:', error);
393
- process.exit(1);
394
- });
395
- //# sourceMappingURL=daemon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -1,52 +0,0 @@
1
- export interface ClaudeSession {
2
- sessionName: string;
3
- sessionId: string;
4
- projectPath: string;
5
- createdAt: number;
6
- status: string;
7
- }
8
- /**
9
- * Manages tmux sessions running Claude Code.
10
- */
11
- export declare class SessionManager {
12
- private readonly genboxId;
13
- private readonly TMUX_PREFIX;
14
- private sessions;
15
- constructor(genboxId: string);
16
- private runTmux;
17
- private generateSessionId;
18
- /**
19
- * Create a new Claude Code session in tmux.
20
- */
21
- createSession(projectPath?: string): ClaudeSession | null;
22
- /**
23
- * Send a prompt to a Claude Code session.
24
- */
25
- sendPrompt(sessionId: string, prompt: string): boolean;
26
- /**
27
- * Send a keystroke to a Claude Code session.
28
- */
29
- sendKeystroke(sessionId: string, key: string): boolean;
30
- /**
31
- * Capture the terminal output from a session.
32
- */
33
- getOutput(sessionId: string, lines?: number): string | null;
34
- /**
35
- * Get the status of a session.
36
- */
37
- getSessionStatus(sessionId: string): string;
38
- /**
39
- * Kill a Claude Code session.
40
- */
41
- killSession(sessionId: string): boolean;
42
- /**
43
- * List all Claude Code sessions.
44
- */
45
- listSessions(): Array<{
46
- sessionId: string;
47
- sessionName: string;
48
- createdAt: number;
49
- status: string;
50
- }>;
51
- }
52
- //# sourceMappingURL=session-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAyC;gBAE5B,QAAQ,EAAE,MAAM;IAE7C,OAAO,CAAC,OAAO;IAiBf,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,aAAa,CAAC,WAAW,SAAc,GAAG,aAAa,GAAG,IAAI;IAwC9D;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAgCtD;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAiCtD;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,MAAM,GAAG,IAAI;IAcxD;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IA8B3C;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAavC;;OAEG;IACH,YAAY,IAAI,KAAK,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CAoCH"}
@@ -1,253 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SessionManager = void 0;
37
- const child_process_1 = require("child_process");
38
- const crypto = __importStar(require("crypto"));
39
- /**
40
- * Manages tmux sessions running Claude Code.
41
- */
42
- class SessionManager {
43
- genboxId;
44
- TMUX_PREFIX = 'claude-';
45
- sessions = new Map();
46
- constructor(genboxId) {
47
- this.genboxId = genboxId;
48
- }
49
- runTmux(args, timeout = 10000) {
50
- try {
51
- const stdout = (0, child_process_1.execSync)(`tmux ${args.join(' ')}`, {
52
- timeout,
53
- encoding: 'utf-8',
54
- stdio: ['pipe', 'pipe', 'pipe'],
55
- });
56
- return { stdout: stdout || '', stderr: '', success: true };
57
- }
58
- catch (error) {
59
- return {
60
- stdout: error.stdout?.toString() || '',
61
- stderr: error.stderr?.toString() || error.message,
62
- success: false,
63
- };
64
- }
65
- }
66
- generateSessionId() {
67
- return crypto
68
- .createHash('sha256')
69
- .update(`${this.genboxId}-${Date.now()}-${process.pid}`)
70
- .digest('hex')
71
- .slice(0, 16);
72
- }
73
- /**
74
- * Create a new Claude Code session in tmux.
75
- */
76
- createSession(projectPath = '/home/dev') {
77
- const sessionId = this.generateSessionId();
78
- const sessionName = `${this.TMUX_PREFIX}${sessionId}`;
79
- // Create a new detached tmux session
80
- const result = this.runTmux([
81
- 'new-session',
82
- '-d',
83
- '-s', sessionName,
84
- '-c', projectPath,
85
- ]);
86
- if (!result.success) {
87
- console.error(`Failed to create tmux session: ${result.stderr}`);
88
- return null;
89
- }
90
- // Give tmux a moment to initialize
91
- (0, child_process_1.execSync)('sleep 0.5');
92
- // Start Claude Code in the session
93
- this.runTmux([
94
- 'send-keys',
95
- '-t', sessionName,
96
- 'claude',
97
- 'Enter',
98
- ]);
99
- const session = {
100
- sessionName,
101
- sessionId,
102
- projectPath,
103
- createdAt: Date.now(),
104
- status: 'active',
105
- };
106
- this.sessions.set(sessionId, session);
107
- return session;
108
- }
109
- /**
110
- * Send a prompt to a Claude Code session.
111
- */
112
- sendPrompt(sessionId, prompt) {
113
- const session = this.sessions.get(sessionId);
114
- const sessionName = session?.sessionName || `${this.TMUX_PREFIX}${sessionId}`;
115
- // Send the prompt text with literal flag to handle special characters
116
- const textResult = this.runTmux([
117
- 'send-keys',
118
- '-t', sessionName,
119
- '-l', // Literal flag
120
- `"${prompt.replace(/"/g, '\\"')}"`,
121
- ]);
122
- if (!textResult.success) {
123
- console.error(`Failed to send prompt text: ${textResult.stderr}`);
124
- return false;
125
- }
126
- // Send Enter to submit the prompt
127
- const enterResult = this.runTmux([
128
- 'send-keys',
129
- '-t', sessionName,
130
- 'Enter',
131
- ]);
132
- if (!enterResult.success) {
133
- console.error(`Failed to send Enter: ${enterResult.stderr}`);
134
- return false;
135
- }
136
- return true;
137
- }
138
- /**
139
- * Send a keystroke to a Claude Code session.
140
- */
141
- sendKeystroke(sessionId, key) {
142
- const session = this.sessions.get(sessionId);
143
- const sessionName = session?.sessionName || `${this.TMUX_PREFIX}${sessionId}`;
144
- // Map common key names to tmux key names
145
- const keyMap = {
146
- enter: 'Enter',
147
- escape: 'Escape',
148
- up: 'Up',
149
- down: 'Down',
150
- left: 'Left',
151
- right: 'Right',
152
- tab: 'Tab',
153
- backspace: 'BSpace',
154
- delete: 'DC',
155
- 'ctrl-c': 'C-c',
156
- 'ctrl-d': 'C-d',
157
- 'ctrl-z': 'C-z',
158
- y: 'y',
159
- n: 'n',
160
- };
161
- const tmuxKey = keyMap[key.toLowerCase()] || key;
162
- const result = this.runTmux([
163
- 'send-keys',
164
- '-t', sessionName,
165
- tmuxKey,
166
- ]);
167
- return result.success;
168
- }
169
- /**
170
- * Capture the terminal output from a session.
171
- */
172
- getOutput(sessionId, lines = 100) {
173
- const session = this.sessions.get(sessionId);
174
- const sessionName = session?.sessionName || `${this.TMUX_PREFIX}${sessionId}`;
175
- const result = this.runTmux([
176
- 'capture-pane',
177
- '-t', sessionName,
178
- '-p', // Print to stdout
179
- '-S', `-${lines}`, // Start from lines back
180
- ]);
181
- return result.success ? result.stdout : null;
182
- }
183
- /**
184
- * Get the status of a session.
185
- */
186
- getSessionStatus(sessionId) {
187
- const session = this.sessions.get(sessionId);
188
- const sessionName = session?.sessionName || `${this.TMUX_PREFIX}${sessionId}`;
189
- // Check if session exists
190
- const hasSession = this.runTmux(['has-session', '-t', sessionName]);
191
- if (!hasSession.success) {
192
- return 'ended';
193
- }
194
- // Get pane content to determine status
195
- const output = this.getOutput(sessionId, 10);
196
- if (output) {
197
- const lowerOutput = output.toLowerCase();
198
- const lastLine = output.split('\n').pop() || '';
199
- if (lowerOutput.includes('waiting for input') || lastLine.includes('>')) {
200
- return 'waiting_input';
201
- }
202
- if (lowerOutput.includes('error')) {
203
- return 'error';
204
- }
205
- if (lowerOutput.includes('thinking') || lowerOutput.includes('working')) {
206
- return 'active';
207
- }
208
- }
209
- return 'idle';
210
- }
211
- /**
212
- * Kill a Claude Code session.
213
- */
214
- killSession(sessionId) {
215
- const session = this.sessions.get(sessionId);
216
- const sessionName = session?.sessionName || `${this.TMUX_PREFIX}${sessionId}`;
217
- const result = this.runTmux(['kill-session', '-t', sessionName]);
218
- if (result.success) {
219
- this.sessions.delete(sessionId);
220
- }
221
- return result.success;
222
- }
223
- /**
224
- * List all Claude Code sessions.
225
- */
226
- listSessions() {
227
- const result = this.runTmux([
228
- 'list-sessions',
229
- '-F', '#{session_name}:#{session_created}',
230
- ]);
231
- if (!result.success) {
232
- return [];
233
- }
234
- const sessions = [];
235
- for (const line of result.stdout.trim().split('\n')) {
236
- if (!line || !line.startsWith(this.TMUX_PREFIX)) {
237
- continue;
238
- }
239
- const [sessionName, createdAtStr] = line.split(':');
240
- const sessionId = sessionName.replace(this.TMUX_PREFIX, '');
241
- const createdAt = parseInt(createdAtStr, 10) * 1000 || 0;
242
- sessions.push({
243
- sessionId,
244
- sessionName,
245
- createdAt,
246
- status: this.getSessionStatus(sessionId),
247
- });
248
- }
249
- return sessions;
250
- }
251
- }
252
- exports.SessionManager = SessionManager;
253
- //# sourceMappingURL=session-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}