genbox-agent 1.0.5 → 1.0.6

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/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.6",
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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"}