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,426 @@
1
+ "use strict";
2
+ /**
3
+ * OpenAI Codex CLI Provider
4
+ *
5
+ * Provider implementation for OpenAI's Codex CLI
6
+ *
7
+ * Note: As of late 2025, Codex CLI has limited hook support:
8
+ * - JSON event streaming via `--json` flag
9
+ * - `notify` config for agent-turn-complete event
10
+ * - Feature request for full hooks system is pending (Issue #2109)
11
+ *
12
+ * This provider is designed to work with current capabilities
13
+ * and will be extended when full hooks support is added.
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.CodexProvider = void 0;
50
+ const child_process_1 = require("child_process");
51
+ const crypto = __importStar(require("crypto"));
52
+ const base_provider_1 = require("./base-provider");
53
+ /**
54
+ * Event mapping from Codex CLI events to unified events
55
+ *
56
+ * Codex CLI JSON events (via --json flag):
57
+ * - thread.started, thread.completed
58
+ * - turn.started, turn.completed, turn.failed
59
+ * - item.* (messages, reasoning, commands, file changes, tool calls)
60
+ * - error
61
+ *
62
+ * Config-based events:
63
+ * - notify (agent-turn-complete)
64
+ */
65
+ const CODEX_EVENT_MAPPING = {
66
+ 'thread.started': 'session_start',
67
+ 'thread.completed': 'session_end',
68
+ 'turn.started': 'before_prompt',
69
+ 'turn.completed': 'after_prompt',
70
+ 'turn.failed': 'error',
71
+ 'item.command.started': 'before_tool',
72
+ 'item.command.completed': 'after_tool',
73
+ 'item.tool_call.started': 'before_tool',
74
+ 'item.tool_call.completed': 'after_tool',
75
+ 'item.file_change': 'after_tool',
76
+ 'item.message': 'notification',
77
+ 'item.reasoning': 'notification',
78
+ error: 'error',
79
+ // Notify event (config-based)
80
+ 'agent-turn-complete': 'after_prompt',
81
+ };
82
+ /**
83
+ * Codex CLI provider configuration
84
+ */
85
+ const CODEX_CONFIG = {
86
+ provider: 'codex',
87
+ displayName: 'OpenAI Codex CLI',
88
+ cliCommand: 'codex',
89
+ settingsPath: '~/.codex/config.toml',
90
+ tmuxPrefix: 'codex-',
91
+ supportedEvents: [
92
+ 'thread.started',
93
+ 'thread.completed',
94
+ 'turn.started',
95
+ 'turn.completed',
96
+ 'turn.failed',
97
+ 'item.command.started',
98
+ 'item.command.completed',
99
+ 'item.tool_call.started',
100
+ 'item.tool_call.completed',
101
+ 'item.file_change',
102
+ 'item.message',
103
+ 'item.reasoning',
104
+ 'error',
105
+ 'agent-turn-complete',
106
+ ],
107
+ eventMapping: CODEX_EVENT_MAPPING,
108
+ };
109
+ class CodexProvider extends base_provider_1.BaseProvider {
110
+ config = CODEX_CONFIG;
111
+ sessions = new Map();
112
+ jsonStreamProcesses = new Map();
113
+ constructor(genboxId) {
114
+ super(genboxId);
115
+ }
116
+ /**
117
+ * Detect if Codex CLI is installed
118
+ */
119
+ detect() {
120
+ try {
121
+ const result = (0, child_process_1.execSync)('codex --version 2>/dev/null', {
122
+ encoding: 'utf-8',
123
+ timeout: 5000,
124
+ });
125
+ const versionMatch = result.match(/(\d+\.\d+\.\d+)/);
126
+ const version = versionMatch ? versionMatch[1] : undefined;
127
+ return {
128
+ detected: true,
129
+ provider: 'codex',
130
+ version,
131
+ configPath: this.config.settingsPath.replace('~', process.env.HOME || ''),
132
+ };
133
+ }
134
+ catch {
135
+ return { detected: false };
136
+ }
137
+ }
138
+ /**
139
+ * Create a new Codex CLI session
140
+ *
141
+ * For Codex, we can optionally run with --json to capture events
142
+ */
143
+ createSession(projectPath = '/home/dev') {
144
+ const sessionId = this.generateSessionId();
145
+ const sessionName = this.getSessionName(sessionId);
146
+ // Create detached tmux session
147
+ const result = this.runTmux([
148
+ 'new-session',
149
+ '-d',
150
+ '-s', sessionName,
151
+ '-c', projectPath,
152
+ ]);
153
+ if (!result.success) {
154
+ console.error(`Failed to create tmux session: ${result.stderr}`);
155
+ return null;
156
+ }
157
+ // Wait for tmux to initialize
158
+ (0, child_process_1.execSync)('sleep 0.5');
159
+ // Start Codex CLI
160
+ // Note: Could use `codex --json` to capture events, but that changes the UI
161
+ this.runTmux([
162
+ 'send-keys',
163
+ '-t', sessionName,
164
+ 'codex',
165
+ 'Enter',
166
+ ]);
167
+ const session = {
168
+ sessionId,
169
+ sessionName,
170
+ provider: 'codex',
171
+ projectPath,
172
+ createdAt: Date.now(),
173
+ status: 'starting',
174
+ };
175
+ this.sessions.set(sessionId, session);
176
+ return session;
177
+ }
178
+ /**
179
+ * Create a session with JSON event streaming
180
+ * This is an alternative mode that captures all events but changes the UI
181
+ */
182
+ createSessionWithJsonStream(projectPath = '/home/dev', onEvent) {
183
+ const sessionId = this.generateSessionId();
184
+ // Spawn codex with --json flag
185
+ const proc = (0, child_process_1.spawn)('codex', ['--json'], {
186
+ cwd: projectPath,
187
+ stdio: ['pipe', 'pipe', 'pipe'],
188
+ });
189
+ let buffer = '';
190
+ proc.stdout?.on('data', (data) => {
191
+ buffer += data.toString();
192
+ const lines = buffer.split('\n');
193
+ buffer = lines.pop() || '';
194
+ for (const line of lines) {
195
+ if (line.trim()) {
196
+ try {
197
+ const jsonEvent = JSON.parse(line);
198
+ const event = this.parseJsonStreamEvent(sessionId, jsonEvent);
199
+ if (event) {
200
+ onEvent(event);
201
+ }
202
+ }
203
+ catch {
204
+ // Ignore parse errors
205
+ }
206
+ }
207
+ }
208
+ });
209
+ proc.on('exit', () => {
210
+ this.jsonStreamProcesses.delete(sessionId);
211
+ const session = this.sessions.get(sessionId);
212
+ if (session) {
213
+ session.status = 'ended';
214
+ }
215
+ });
216
+ this.jsonStreamProcesses.set(sessionId, proc);
217
+ const session = {
218
+ sessionId,
219
+ sessionName: `codex-json-${sessionId}`,
220
+ provider: 'codex',
221
+ projectPath,
222
+ createdAt: Date.now(),
223
+ status: 'starting',
224
+ };
225
+ this.sessions.set(sessionId, session);
226
+ return session;
227
+ }
228
+ /**
229
+ * Parse JSON stream event from Codex CLI
230
+ */
231
+ parseJsonStreamEvent(sessionId, jsonEvent) {
232
+ const eventType = jsonEvent.type || jsonEvent.event;
233
+ if (!eventType)
234
+ return null;
235
+ const baseEvent = this.createBaseHookEvent(eventType, sessionId);
236
+ const event = {
237
+ ...baseEvent,
238
+ eventType: this.mapEventType(eventType),
239
+ provider: 'codex',
240
+ providerEventType: eventType,
241
+ sessionId,
242
+ genboxId: this.genboxId,
243
+ timestamp: new Date().toISOString(),
244
+ projectPath: process.cwd(),
245
+ rawData: jsonEvent,
246
+ };
247
+ // Parse based on event type
248
+ if (eventType.startsWith('item.command')) {
249
+ event.toolName = 'shell';
250
+ event.toolInput = { command: jsonEvent.command || jsonEvent.data?.command };
251
+ if (eventType.includes('completed')) {
252
+ event.toolResponse = { output: jsonEvent.output, exitCode: jsonEvent.exitCode };
253
+ event.toolSuccess = jsonEvent.exitCode === 0;
254
+ }
255
+ }
256
+ else if (eventType.startsWith('item.tool_call')) {
257
+ event.toolName = jsonEvent.name || jsonEvent.tool;
258
+ event.toolInput = jsonEvent.arguments || jsonEvent.input;
259
+ if (eventType.includes('completed')) {
260
+ event.toolResponse = jsonEvent.result;
261
+ event.toolSuccess = !jsonEvent.error;
262
+ }
263
+ }
264
+ else if (eventType === 'item.file_change') {
265
+ event.toolName = 'file_edit';
266
+ event.toolInput = { path: jsonEvent.path, action: jsonEvent.action };
267
+ }
268
+ else if (eventType === 'item.message') {
269
+ event.notification = jsonEvent.content || jsonEvent.message;
270
+ }
271
+ else if (eventType === 'turn.started') {
272
+ event.prompt = jsonEvent.input || jsonEvent.prompt || '';
273
+ event.promptLength = (event.prompt || '').length;
274
+ }
275
+ else if (eventType === 'error') {
276
+ event.error = jsonEvent.message || jsonEvent.error;
277
+ event.errorCode = jsonEvent.code;
278
+ }
279
+ return event;
280
+ }
281
+ /**
282
+ * Parse hook input from Codex CLI
283
+ *
284
+ * Currently Codex only supports notify for agent-turn-complete.
285
+ * This method is designed for future hooks support.
286
+ */
287
+ parseHookInput(eventType, rawInput) {
288
+ let hookData = {};
289
+ try {
290
+ if (rawInput.trim()) {
291
+ hookData = JSON.parse(rawInput);
292
+ }
293
+ }
294
+ catch {
295
+ hookData = { raw_input: rawInput };
296
+ }
297
+ const sessionId = this.getOrCreateSessionId();
298
+ const baseEvent = this.createBaseHookEvent(eventType, sessionId);
299
+ const event = {
300
+ ...baseEvent,
301
+ eventType: this.mapEventType(eventType),
302
+ provider: 'codex',
303
+ providerEventType: eventType,
304
+ sessionId,
305
+ genboxId: this.genboxId,
306
+ timestamp: new Date().toISOString(),
307
+ projectPath: process.cwd(),
308
+ rawData: hookData,
309
+ };
310
+ // Currently only agent-turn-complete is supported via notify
311
+ if (eventType === 'agent-turn-complete') {
312
+ event.stopReason = 'turn_complete';
313
+ }
314
+ return event;
315
+ }
316
+ /**
317
+ * Generate Codex CLI configuration
318
+ *
319
+ * Codex uses TOML for config (~/.codex/config.toml)
320
+ * Currently only supports notify for agent-turn-complete
321
+ */
322
+ generateHookConfig(hookScriptPath) {
323
+ // Codex uses TOML, not JSON, but we return the config structure
324
+ // The caller will need to convert to TOML format
325
+ return {
326
+ provider: 'codex',
327
+ settingsJson: {
328
+ // This will be converted to TOML
329
+ notify: [`${hookScriptPath} codex agent-turn-complete`],
330
+ // Future hooks (when implemented)
331
+ // hooks: { ... }
332
+ },
333
+ };
334
+ }
335
+ /**
336
+ * Generate TOML config string for Codex
337
+ */
338
+ generateTomlConfig(hookScriptPath) {
339
+ return `# Genbox Agent Hook Configuration for Codex CLI
340
+ # Auto-generated - do not edit manually
341
+
342
+ # Notify on agent turn complete
343
+ notify = ["${hookScriptPath}", "codex", "agent-turn-complete"]
344
+
345
+ # Note: Full hooks support is pending (see github.com/openai/codex/issues/2109)
346
+ # When available, additional hook events will be configured here
347
+ `;
348
+ }
349
+ /**
350
+ * Analyze output for Codex-specific status indicators
351
+ */
352
+ analyzeOutputForStatus(output) {
353
+ const lowerOutput = output.toLowerCase();
354
+ const lines = output.split('\n');
355
+ const lastNonEmptyLine = lines.filter(l => l.trim()).pop() || '';
356
+ // Codex-specific patterns
357
+ if (lastNonEmptyLine.includes('❯') || lastNonEmptyLine.includes('>')) {
358
+ return 'waiting_input';
359
+ }
360
+ if (lowerOutput.includes('thinking') || lowerOutput.includes('reasoning')) {
361
+ return 'active';
362
+ }
363
+ if (lowerOutput.includes('error') || lowerOutput.includes('failed')) {
364
+ return 'error';
365
+ }
366
+ return 'idle';
367
+ }
368
+ /**
369
+ * Send prompt to a JSON stream session
370
+ */
371
+ sendPromptToJsonStream(sessionId, prompt) {
372
+ const proc = this.jsonStreamProcesses.get(sessionId);
373
+ if (!proc?.stdin)
374
+ return false;
375
+ try {
376
+ proc.stdin.write(prompt + '\n');
377
+ return true;
378
+ }
379
+ catch {
380
+ return false;
381
+ }
382
+ }
383
+ /**
384
+ * Kill a session (including JSON stream sessions)
385
+ */
386
+ killSession(sessionId) {
387
+ // Kill JSON stream process if exists
388
+ const proc = this.jsonStreamProcesses.get(sessionId);
389
+ if (proc) {
390
+ proc.kill();
391
+ this.jsonStreamProcesses.delete(sessionId);
392
+ }
393
+ // Kill tmux session
394
+ return super.killSession(sessionId);
395
+ }
396
+ generateSessionId() {
397
+ return crypto
398
+ .createHash('sha256')
399
+ .update(`${this.genboxId}-codex-${Date.now()}-${process.pid}`)
400
+ .digest('hex')
401
+ .slice(0, 16);
402
+ }
403
+ getOrCreateSessionId() {
404
+ const fs = require('fs');
405
+ const path = require('path');
406
+ const sessionFile = path.join(process.env.HOME || '/tmp', '.codex-session-id');
407
+ try {
408
+ if (fs.existsSync(sessionFile)) {
409
+ return fs.readFileSync(sessionFile, 'utf-8').trim();
410
+ }
411
+ }
412
+ catch {
413
+ // Ignore read errors
414
+ }
415
+ const sessionId = this.generateSessionId();
416
+ try {
417
+ fs.writeFileSync(sessionFile, sessionId);
418
+ }
419
+ catch {
420
+ // Ignore write errors
421
+ }
422
+ return sessionId;
423
+ }
424
+ }
425
+ exports.CodexProvider = CodexProvider;
426
+ //# sourceMappingURL=codex-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-provider.js","sourceRoot":"","sources":["../../src/providers/codex-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Gemini CLI Provider
3
+ *
4
+ * Provider implementation for Google's Gemini CLI
5
+ */
6
+ import { AISession, ProviderConfig, ProviderDetectionResult, UnifiedHookEvent, HookConfig } from '../types';
7
+ import { BaseProvider } from './base-provider';
8
+ export declare class GeminiProvider extends BaseProvider {
9
+ readonly config: ProviderConfig;
10
+ private sessions;
11
+ constructor(genboxId: string);
12
+ /**
13
+ * Detect if Gemini CLI is installed
14
+ */
15
+ detect(): ProviderDetectionResult;
16
+ /**
17
+ * Create a new Gemini CLI session
18
+ */
19
+ createSession(projectPath?: string): AISession | null;
20
+ /**
21
+ * Parse Gemini CLI hook input
22
+ *
23
+ * Gemini CLI sends JSON to stdin with different structure than Claude
24
+ */
25
+ parseHookInput(eventType: string, rawInput: string): UnifiedHookEvent;
26
+ /**
27
+ * Generate Gemini CLI hook configuration
28
+ */
29
+ generateHookConfig(hookScriptPath: string): HookConfig;
30
+ /**
31
+ * Analyze output for Gemini-specific status indicators
32
+ */
33
+ protected analyzeOutputForStatus(output: string): AISession['status'];
34
+ private generateSessionId;
35
+ private getOrCreateSessionId;
36
+ }
37
+ //# sourceMappingURL=gemini-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-provider.d.ts","sourceRoot":"","sources":["../../src/providers/gemini-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAEL,SAAS,EACT,cAAc,EACd,uBAAuB,EAEvB,gBAAgB,EAChB,UAAU,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAsD/C,qBAAa,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,MAAM,iBAAiB;IAChC,OAAO,CAAC,QAAQ,CAAqC;gBAEzC,QAAQ,EAAE,MAAM;IAI5B;;OAEG;IACH,MAAM,IAAI,uBAAuB;IAqBjC;;OAEG;IACH,aAAa,CAAC,WAAW,SAAc,GAAG,SAAS,GAAG,IAAI;IAyC1D;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB;IAoFrE;;OAEG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,UAAU;IAkEtD;;OAEG;IACH,SAAS,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC;IAmBrE,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,oBAAoB;CAuB7B"}