genbox-agent 0.0.2 → 1.0.3
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/configure-hooks.d.ts +17 -0
- package/dist/configure-hooks.d.ts.map +1 -0
- package/dist/configure-hooks.js +235 -0
- package/dist/configure-hooks.js.map +1 -0
- package/dist/daemon.js +2 -2
- package/dist/daemon.js.map +1 -1
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/base-provider.d.ts +125 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +217 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/claude-provider.d.ts +35 -0
- package/dist/providers/claude-provider.d.ts.map +1 -0
- package/dist/providers/claude-provider.js +298 -0
- package/dist/providers/claude-provider.js.map +1 -0
- package/dist/providers/codex-provider.d.ts +73 -0
- package/dist/providers/codex-provider.d.ts.map +1 -0
- package/dist/providers/codex-provider.js +426 -0
- package/dist/providers/codex-provider.js.map +1 -0
- package/dist/providers/gemini-provider.d.ts +37 -0
- package/dist/providers/gemini-provider.d.ts.map +1 -0
- package/dist/providers/gemini-provider.js +352 -0
- package/dist/providers/gemini-provider.js.map +1 -0
- package/dist/providers/index.d.ts +128 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +293 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/types/index.d.ts +123 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/unified-daemon.d.ts +18 -0
- package/dist/unified-daemon.d.ts.map +1 -0
- package/dist/unified-daemon.js +309 -0
- package/dist/unified-daemon.js.map +1 -0
- package/dist/unified-hook.d.ts +24 -0
- package/dist/unified-hook.d.ts.map +1 -0
- package/dist/unified-hook.js +173 -0
- package/dist/unified-hook.js.map +1 -0
- package/package.json +34 -8
- package/src/daemon.ts +0 -329
- package/src/hook.ts +0 -200
- package/src/index.ts +0 -1
- package/src/session-manager.ts +0 -270
- 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"}
|