genbox-agent 0.0.2 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/configure-hooks.d.ts +17 -0
  2. package/dist/configure-hooks.d.ts.map +1 -0
  3. package/dist/configure-hooks.js +235 -0
  4. package/dist/configure-hooks.js.map +1 -0
  5. package/dist/index.d.ts +16 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +41 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/providers/base-provider.d.ts +125 -0
  10. package/dist/providers/base-provider.d.ts.map +1 -0
  11. package/dist/providers/base-provider.js +217 -0
  12. package/dist/providers/base-provider.js.map +1 -0
  13. package/dist/providers/claude-provider.d.ts +35 -0
  14. package/dist/providers/claude-provider.d.ts.map +1 -0
  15. package/dist/providers/claude-provider.js +298 -0
  16. package/dist/providers/claude-provider.js.map +1 -0
  17. package/dist/providers/codex-provider.d.ts +73 -0
  18. package/dist/providers/codex-provider.d.ts.map +1 -0
  19. package/dist/providers/codex-provider.js +426 -0
  20. package/dist/providers/codex-provider.js.map +1 -0
  21. package/dist/providers/gemini-provider.d.ts +37 -0
  22. package/dist/providers/gemini-provider.d.ts.map +1 -0
  23. package/dist/providers/gemini-provider.js +352 -0
  24. package/dist/providers/gemini-provider.js.map +1 -0
  25. package/dist/providers/index.d.ts +128 -0
  26. package/dist/providers/index.d.ts.map +1 -0
  27. package/dist/providers/index.js +293 -0
  28. package/dist/providers/index.js.map +1 -0
  29. package/dist/types/index.d.ts +123 -0
  30. package/dist/types/index.d.ts.map +1 -0
  31. package/dist/types/index.js +9 -0
  32. package/dist/types/index.js.map +1 -0
  33. package/dist/unified-daemon.d.ts +18 -0
  34. package/dist/unified-daemon.d.ts.map +1 -0
  35. package/dist/unified-daemon.js +309 -0
  36. package/dist/unified-daemon.js.map +1 -0
  37. package/dist/unified-hook.d.ts +24 -0
  38. package/dist/unified-hook.d.ts.map +1 -0
  39. package/dist/unified-hook.js +173 -0
  40. package/dist/unified-hook.js.map +1 -0
  41. package/package.json +34 -8
  42. package/src/daemon.ts +0 -329
  43. package/src/hook.ts +0 -200
  44. package/src/index.ts +0 -1
  45. package/src/session-manager.ts +0 -270
  46. package/tsconfig.json +0 -19
@@ -0,0 +1,309 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Unified Genbox Agent Daemon
5
+ *
6
+ * WebSocket client that runs on each genbox VM and supports multiple AI CLI tools:
7
+ * - Claude Code
8
+ * - Gemini CLI
9
+ * - OpenAI Codex CLI
10
+ *
11
+ * Features:
12
+ * 1. Connects to the backend monitoring service
13
+ * 2. Receives remote commands (send_prompt, send_keystroke, create_session)
14
+ * 3. Manages tmux sessions for all supported AI CLIs
15
+ * 4. Streams terminal output back to the dashboard
16
+ * 5. Auto-detects installed AI CLIs
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ const socket_io_client_1 = require("socket.io-client");
20
+ const providers_1 = require("./providers");
21
+ // Configuration from environment
22
+ const GENBOX_ID = process.env.GENBOX_ID || '';
23
+ const GENBOX_TOKEN = process.env.GENBOX_TOKEN || '';
24
+ const MONITORING_WS_URL = process.env.MONITORING_WS_URL || 'http://localhost:3001';
25
+ // Output polling interval (ms)
26
+ const OUTPUT_POLL_INTERVAL = 2000;
27
+ class UnifiedGenboxDaemon {
28
+ genboxId;
29
+ token;
30
+ wsUrl;
31
+ socket = null;
32
+ sessionManager;
33
+ registry;
34
+ running = false;
35
+ outputPollers = new Map();
36
+ constructor(genboxId, token, wsUrl) {
37
+ this.genboxId = genboxId;
38
+ this.token = token;
39
+ this.wsUrl = wsUrl;
40
+ this.registry = providers_1.ProviderRegistry.getInstance();
41
+ this.sessionManager = new providers_1.UnifiedSessionManager(genboxId);
42
+ }
43
+ async connect() {
44
+ return new Promise((resolve) => {
45
+ console.log(`[${this.genboxId}] Connecting to ${this.wsUrl}/ai-monitoring...`);
46
+ this.socket = (0, socket_io_client_1.io)(`${this.wsUrl}/ai-monitoring`, {
47
+ query: { genboxId: this.genboxId, type: 'genbox' },
48
+ auth: { genboxId: this.genboxId, token: this.token },
49
+ transports: ['websocket', 'polling'],
50
+ reconnection: true,
51
+ reconnectionAttempts: Infinity,
52
+ reconnectionDelay: 1000,
53
+ reconnectionDelayMax: 30000,
54
+ });
55
+ this.socket.on('connect', () => {
56
+ console.log(`[${this.genboxId}] Connected to monitoring server`);
57
+ this.running = true;
58
+ this.onConnect();
59
+ resolve(true);
60
+ });
61
+ this.socket.on('disconnect', (reason) => {
62
+ console.log(`[${this.genboxId}] Disconnected: ${reason}`);
63
+ this.running = false;
64
+ });
65
+ this.socket.on('connect_error', (error) => {
66
+ console.error(`[${this.genboxId}] Connection error:`, error.message);
67
+ });
68
+ // Register event handlers
69
+ this.socket.on('send_prompt', this.onSendPrompt.bind(this));
70
+ this.socket.on('send_keystroke', this.onSendKeystroke.bind(this));
71
+ this.socket.on('create_session', this.onCreateSession.bind(this));
72
+ this.socket.on('get_output', this.onGetOutput.bind(this));
73
+ this.socket.on('kill_session', this.onKillSession.bind(this));
74
+ this.socket.on('list_sessions', this.onListSessions.bind(this));
75
+ this.socket.on('get_providers', this.onGetProviders.bind(this));
76
+ this.socket.on('error', this.onError.bind(this));
77
+ // Timeout after 10 seconds
78
+ setTimeout(() => {
79
+ if (!this.socket?.connected) {
80
+ console.error('Connection timeout');
81
+ resolve(false);
82
+ }
83
+ }, 10000);
84
+ });
85
+ }
86
+ onConnect() {
87
+ // Get detected providers
88
+ const detectedProviders = this.sessionManager.getDetectedProviders();
89
+ const providers = [];
90
+ for (const [provider, detection] of detectedProviders) {
91
+ if (detection.detected) {
92
+ providers.push({ provider, version: detection.version });
93
+ }
94
+ }
95
+ // Register as genbox agent with provider info
96
+ this.socket?.emit('register_agent', {
97
+ genboxId: this.genboxId,
98
+ token: this.token,
99
+ providers,
100
+ });
101
+ // Send initial session list
102
+ const sessions = this.sessionManager.listAllSessions();
103
+ this.socket?.emit('agent_sessions', {
104
+ genboxId: this.genboxId,
105
+ sessions,
106
+ });
107
+ console.log(`[${this.genboxId}] Detected providers:`, providers.map(p => p.provider).join(', '));
108
+ }
109
+ onSendPrompt(data) {
110
+ const { sessionId, prompt, requestId } = data;
111
+ if (!sessionId || !prompt)
112
+ return;
113
+ console.log(`[${this.genboxId}] Sending prompt to ${sessionId}: ${prompt.slice(0, 50)}...`);
114
+ const success = this.sessionManager.sendPrompt(sessionId, prompt);
115
+ this.socket?.emit('prompt_result', {
116
+ genboxId: this.genboxId,
117
+ sessionId,
118
+ requestId,
119
+ success,
120
+ });
121
+ // Capture output after a delay
122
+ if (success) {
123
+ setTimeout(() => this.captureAndSendOutput(sessionId), 1000);
124
+ }
125
+ }
126
+ onSendKeystroke(data) {
127
+ const { sessionId, key, requestId } = data;
128
+ if (!sessionId || !key)
129
+ return;
130
+ console.log(`[${this.genboxId}] Sending keystroke to ${sessionId}: ${key}`);
131
+ const success = this.sessionManager.sendKeystroke(sessionId, key);
132
+ this.socket?.emit('keystroke_result', {
133
+ genboxId: this.genboxId,
134
+ sessionId,
135
+ requestId,
136
+ success,
137
+ });
138
+ }
139
+ onCreateSession(data) {
140
+ const { projectPath = '/home/dev', provider, requestId } = data;
141
+ console.log(`[${this.genboxId}] Creating new ${provider || 'default'} session at ${projectPath}`);
142
+ const session = this.sessionManager.createSession(projectPath, provider);
143
+ if (session) {
144
+ this.socket?.emit('session_created', {
145
+ genboxId: this.genboxId,
146
+ sessionId: session.sessionId,
147
+ sessionName: session.sessionName,
148
+ provider: session.provider,
149
+ projectPath: session.projectPath,
150
+ requestId,
151
+ success: true,
152
+ });
153
+ // Start output polling for this session
154
+ this.startOutputPolling(session.sessionId);
155
+ }
156
+ else {
157
+ this.socket?.emit('session_created', {
158
+ genboxId: this.genboxId,
159
+ requestId,
160
+ success: false,
161
+ error: 'Failed to create session',
162
+ });
163
+ }
164
+ }
165
+ onGetOutput(data) {
166
+ const { sessionId, lines = 100, requestId } = data;
167
+ if (!sessionId)
168
+ return;
169
+ const output = this.sessionManager.getOutput(sessionId, lines);
170
+ const status = this.sessionManager.getSessionStatus(sessionId);
171
+ this.socket?.emit('output_update', {
172
+ genboxId: this.genboxId,
173
+ sessionId,
174
+ requestId,
175
+ output: output || '',
176
+ status,
177
+ });
178
+ }
179
+ onKillSession(data) {
180
+ const { sessionId, requestId } = data;
181
+ if (!sessionId)
182
+ return;
183
+ console.log(`[${this.genboxId}] Killing session ${sessionId}`);
184
+ const success = this.sessionManager.killSession(sessionId);
185
+ this.stopOutputPolling(sessionId);
186
+ this.socket?.emit('session_killed', {
187
+ genboxId: this.genboxId,
188
+ sessionId,
189
+ requestId,
190
+ success,
191
+ });
192
+ }
193
+ onListSessions(data) {
194
+ const { requestId } = data;
195
+ const sessions = this.sessionManager.listAllSessions();
196
+ this.socket?.emit('sessions_list', {
197
+ genboxId: this.genboxId,
198
+ requestId,
199
+ sessions,
200
+ });
201
+ }
202
+ onGetProviders(data) {
203
+ const { requestId } = data;
204
+ const detectedProviders = this.sessionManager.getDetectedProviders();
205
+ const providers = [];
206
+ for (const [provider, detection] of detectedProviders) {
207
+ providers.push({
208
+ provider,
209
+ detected: detection.detected,
210
+ version: detection.version,
211
+ });
212
+ }
213
+ this.socket?.emit('providers_list', {
214
+ genboxId: this.genboxId,
215
+ requestId,
216
+ providers,
217
+ });
218
+ }
219
+ onError(data) {
220
+ console.error(`[${this.genboxId}] Error from server:`, data);
221
+ }
222
+ startOutputPolling(sessionId) {
223
+ if (this.outputPollers.has(sessionId))
224
+ return;
225
+ let lastOutput = '';
226
+ const poller = setInterval(() => {
227
+ if (!this.running) {
228
+ this.stopOutputPolling(sessionId);
229
+ return;
230
+ }
231
+ const output = this.sessionManager.getOutput(sessionId, 100);
232
+ const status = this.sessionManager.getSessionStatus(sessionId);
233
+ // Only send if output changed
234
+ if (output && output !== lastOutput) {
235
+ lastOutput = output;
236
+ this.socket?.emit('output_update', {
237
+ genboxId: this.genboxId,
238
+ sessionId,
239
+ output,
240
+ status,
241
+ });
242
+ }
243
+ // Stop polling if session ended
244
+ if (status === 'ended') {
245
+ this.stopOutputPolling(sessionId);
246
+ }
247
+ }, OUTPUT_POLL_INTERVAL);
248
+ this.outputPollers.set(sessionId, poller);
249
+ }
250
+ stopOutputPolling(sessionId) {
251
+ const poller = this.outputPollers.get(sessionId);
252
+ if (poller) {
253
+ clearInterval(poller);
254
+ this.outputPollers.delete(sessionId);
255
+ }
256
+ }
257
+ captureAndSendOutput(sessionId) {
258
+ const output = this.sessionManager.getOutput(sessionId, 100);
259
+ const status = this.sessionManager.getSessionStatus(sessionId);
260
+ if (output && this.socket?.connected) {
261
+ this.socket.emit('output_update', {
262
+ genboxId: this.genboxId,
263
+ sessionId,
264
+ output,
265
+ status,
266
+ });
267
+ }
268
+ }
269
+ async run() {
270
+ console.log(`Starting Unified Genbox Agent Daemon for ${this.genboxId}`);
271
+ const connected = await this.connect();
272
+ if (!connected) {
273
+ console.log('Initial connection failed, will keep retrying...');
274
+ }
275
+ // Keep running
276
+ await new Promise((resolve) => {
277
+ const shutdown = () => {
278
+ console.log('Shutting down...');
279
+ this.running = false;
280
+ // Stop all output pollers
281
+ for (const sessionId of this.outputPollers.keys()) {
282
+ this.stopOutputPolling(sessionId);
283
+ }
284
+ this.socket?.disconnect();
285
+ resolve();
286
+ };
287
+ process.on('SIGTERM', shutdown);
288
+ process.on('SIGINT', shutdown);
289
+ });
290
+ }
291
+ }
292
+ // Main entry point
293
+ async function main() {
294
+ if (!GENBOX_ID) {
295
+ console.error('Error: GENBOX_ID environment variable not set');
296
+ process.exit(1);
297
+ }
298
+ if (!GENBOX_TOKEN) {
299
+ console.error('Error: GENBOX_TOKEN environment variable not set');
300
+ process.exit(1);
301
+ }
302
+ const daemon = new UnifiedGenboxDaemon(GENBOX_ID, GENBOX_TOKEN, MONITORING_WS_URL);
303
+ await daemon.run();
304
+ }
305
+ main().catch((error) => {
306
+ console.error('Fatal error:', error);
307
+ process.exit(1);
308
+ });
309
+ //# sourceMappingURL=unified-daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unified-daemon.js","sourceRoot":"","sources":["../src/unified-daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Unified AI CLI Hook Script
4
+ *
5
+ * A single hook script that handles events from all supported AI CLI tools:
6
+ * - Claude Code
7
+ * - Gemini CLI
8
+ * - OpenAI Codex CLI
9
+ *
10
+ * Usage:
11
+ * ai-hook <provider> <event_type>
12
+ *
13
+ * Examples:
14
+ * ai-hook claude PreToolUse
15
+ * ai-hook gemini BeforeTool
16
+ * ai-hook codex agent-turn-complete
17
+ *
18
+ * Environment variables:
19
+ * GENBOX_ID: Unique identifier for this genbox
20
+ * GENBOX_TOKEN: Authentication token for the API
21
+ * MONITORING_API_URL: Base URL for the monitoring API
22
+ */
23
+ export {};
24
+ //# sourceMappingURL=unified-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unified-hook.d.ts","sourceRoot":"","sources":["../src/unified-hook.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;GAoBG"}
@@ -0,0 +1,173 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Unified AI CLI Hook Script
5
+ *
6
+ * A single hook script that handles events from all supported AI CLI tools:
7
+ * - Claude Code
8
+ * - Gemini CLI
9
+ * - OpenAI Codex CLI
10
+ *
11
+ * Usage:
12
+ * ai-hook <provider> <event_type>
13
+ *
14
+ * Examples:
15
+ * ai-hook claude PreToolUse
16
+ * ai-hook gemini BeforeTool
17
+ * ai-hook codex agent-turn-complete
18
+ *
19
+ * Environment variables:
20
+ * GENBOX_ID: Unique identifier for this genbox
21
+ * GENBOX_TOKEN: Authentication token for the API
22
+ * MONITORING_API_URL: Base URL for the monitoring API
23
+ */
24
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ var desc = Object.getOwnPropertyDescriptor(m, k);
27
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
28
+ desc = { enumerable: true, get: function() { return m[k]; } };
29
+ }
30
+ Object.defineProperty(o, k2, desc);
31
+ }) : (function(o, m, k, k2) {
32
+ if (k2 === undefined) k2 = k;
33
+ o[k2] = m[k];
34
+ }));
35
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
36
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
37
+ }) : function(o, v) {
38
+ o["default"] = v;
39
+ });
40
+ var __importStar = (this && this.__importStar) || (function () {
41
+ var ownKeys = function(o) {
42
+ ownKeys = Object.getOwnPropertyNames || function (o) {
43
+ var ar = [];
44
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
45
+ return ar;
46
+ };
47
+ return ownKeys(o);
48
+ };
49
+ return function (mod) {
50
+ if (mod && mod.__esModule) return mod;
51
+ var result = {};
52
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
53
+ __setModuleDefault(result, mod);
54
+ return result;
55
+ };
56
+ })();
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ const fs = __importStar(require("fs"));
59
+ const http = __importStar(require("http"));
60
+ const https = __importStar(require("https"));
61
+ const providers_1 = require("./providers");
62
+ // Configuration
63
+ const GENBOX_ID = process.env.GENBOX_ID || '';
64
+ const GENBOX_TOKEN = process.env.GENBOX_TOKEN || '';
65
+ const MONITORING_API_URL = process.env.MONITORING_API_URL || 'http://localhost:3001';
66
+ /**
67
+ * Send event to the monitoring API
68
+ */
69
+ async function sendEvent(event) {
70
+ if (!GENBOX_ID || !GENBOX_TOKEN) {
71
+ console.error('Warning: GENBOX_ID or GENBOX_TOKEN not set, skipping event');
72
+ return false;
73
+ }
74
+ const url = new URL('/api/v1/ai-monitoring/events', MONITORING_API_URL);
75
+ const data = JSON.stringify({
76
+ ...event,
77
+ genboxId: GENBOX_ID,
78
+ genboxToken: GENBOX_TOKEN,
79
+ });
80
+ const isHttps = url.protocol === 'https:';
81
+ return new Promise((resolve) => {
82
+ const options = {
83
+ hostname: url.hostname,
84
+ port: url.port || (isHttps ? 443 : 80),
85
+ path: url.pathname,
86
+ method: 'POST',
87
+ headers: {
88
+ 'Content-Type': 'application/json',
89
+ 'Content-Length': Buffer.byteLength(data),
90
+ 'X-Genbox-Token': GENBOX_TOKEN,
91
+ },
92
+ timeout: 5000,
93
+ };
94
+ const req = (isHttps ? https : http).request(options, (res) => {
95
+ resolve(res.statusCode === 200 || res.statusCode === 201);
96
+ });
97
+ req.on('error', (error) => {
98
+ console.error(`Warning: Failed to send event: ${error.message}`);
99
+ resolve(false);
100
+ });
101
+ req.on('timeout', () => {
102
+ req.destroy();
103
+ console.error('Warning: Request timeout');
104
+ resolve(false);
105
+ });
106
+ req.write(data);
107
+ req.end();
108
+ });
109
+ }
110
+ /**
111
+ * Parse command line arguments
112
+ */
113
+ function parseArgs() {
114
+ const args = process.argv.slice(2);
115
+ if (args.length < 2) {
116
+ console.error('Usage: ai-hook <provider> <event_type>');
117
+ console.error('Providers: claude, gemini, codex');
118
+ return null;
119
+ }
120
+ const provider = args[0];
121
+ const eventType = args[1];
122
+ if (!['claude', 'gemini', 'codex'].includes(provider)) {
123
+ console.error(`Unknown provider: ${provider}`);
124
+ console.error('Supported providers: claude, gemini, codex');
125
+ return null;
126
+ }
127
+ return { provider, eventType };
128
+ }
129
+ /**
130
+ * Read input from stdin
131
+ */
132
+ function readStdin() {
133
+ try {
134
+ if (!process.stdin.isTTY) {
135
+ return fs.readFileSync(0, 'utf-8');
136
+ }
137
+ }
138
+ catch {
139
+ // Ignore read errors
140
+ }
141
+ return '';
142
+ }
143
+ /**
144
+ * Main entry point
145
+ */
146
+ async function main() {
147
+ const args = parseArgs();
148
+ if (!args) {
149
+ process.exit(0); // Don't block the AI CLI
150
+ }
151
+ const { provider, eventType } = args;
152
+ // Read input from stdin
153
+ const rawInput = readStdin();
154
+ // Get the provider instance
155
+ const registry = providers_1.ProviderRegistry.getInstance();
156
+ const providerInstance = registry.getProvider(provider, GENBOX_ID);
157
+ if (!providerInstance) {
158
+ console.error(`Failed to get provider: ${provider}`);
159
+ process.exit(0);
160
+ }
161
+ // Parse the hook input
162
+ const event = providerInstance.parseHookInput(eventType, rawInput);
163
+ // Add tmux session info if available
164
+ if (process.env.TMUX) {
165
+ event.tmuxSession = process.env.TMUX_PANE?.split(',')[0];
166
+ }
167
+ // Send the event (fire and forget)
168
+ sendEvent(event).catch(() => { });
169
+ // Exit immediately - hooks should not block the AI CLI
170
+ process.exit(0);
171
+ }
172
+ main().catch(() => process.exit(0));
173
+ //# sourceMappingURL=unified-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unified-hook.js","sourceRoot":"","sources":["../src/unified-hook.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,19 +1,41 @@
1
1
  {
2
2
  "name": "genbox-agent",
3
- "version": "0.0.2",
4
- "description": "Agent daemon for monitoring and remotely controlling Claude Code sessions in genbox VMs",
3
+ "version": "1.0.1",
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
- "genbox-agent": "./dist/daemon.js",
9
- "claude-hook": "./dist/hook.js"
8
+ "genbox-agent": "./dist/unified-daemon.js",
9
+ "genbox-agent-legacy": "./dist/daemon.js",
10
+ "ai-hook": "./dist/unified-hook.js",
11
+ "claude-hook": "./dist/hook.js",
12
+ "genbox-configure-hooks": "./dist/configure-hooks.js"
10
13
  },
11
14
  "scripts": {
12
15
  "build": "tsc",
13
- "start": "node dist/daemon.js",
14
- "dev": "tsx watch src/daemon.ts",
15
- "hook": "node dist/hook.js"
16
+ "start": "node dist/unified-daemon.js",
17
+ "start:legacy": "node dist/daemon.js",
18
+ "dev": "tsx watch src/unified-daemon.ts",
19
+ "hook": "node dist/unified-hook.js",
20
+ "configure-hooks": "node dist/configure-hooks.js"
16
21
  },
22
+ "keywords": [
23
+ "genbox",
24
+ "claude",
25
+ "gemini",
26
+ "codex",
27
+ "ai",
28
+ "cli",
29
+ "monitoring",
30
+ "remote-control",
31
+ "tmux"
32
+ ],
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/goodpass/aigens.git",
36
+ "directory": "packages/genbox-agent"
37
+ },
38
+ "license": "MIT",
17
39
  "dependencies": {
18
40
  "socket.io-client": "^4.8.0"
19
41
  },
@@ -24,5 +46,9 @@
24
46
  },
25
47
  "engines": {
26
48
  "node": ">=18.0.0"
27
- }
49
+ },
50
+ "files": [
51
+ "dist",
52
+ "README.md"
53
+ ]
28
54
  }