@pdhaku0/gemini-cli-agent-sdk 0.1.0

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 (54) hide show
  1. package/README.md +109 -0
  2. package/client/index.d.ts +1 -0
  3. package/client/index.js +1 -0
  4. package/client/package.json +1 -0
  5. package/dist/client.d.ts +5 -0
  6. package/dist/client.js +5 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/common/types.d.ts +191 -0
  9. package/dist/common/types.js +18 -0
  10. package/dist/common/types.js.map +1 -0
  11. package/dist/core/AcpWebSocketTransport.d.ts +25 -0
  12. package/dist/core/AcpWebSocketTransport.js +222 -0
  13. package/dist/core/AcpWebSocketTransport.js.map +1 -0
  14. package/dist/core/AgentChatClient.d.ts +75 -0
  15. package/dist/core/AgentChatClient.js +679 -0
  16. package/dist/core/AgentChatClient.js.map +1 -0
  17. package/dist/core/ToolPermissionManager.d.ts +26 -0
  18. package/dist/core/ToolPermissionManager.js +88 -0
  19. package/dist/core/ToolPermissionManager.js.map +1 -0
  20. package/dist/core/diff-utils.d.ts +1 -0
  21. package/dist/core/diff-utils.js +7 -0
  22. package/dist/core/diff-utils.js.map +1 -0
  23. package/dist/core/stream-utils.d.ts +14 -0
  24. package/dist/core/stream-utils.js +57 -0
  25. package/dist/core/stream-utils.js.map +1 -0
  26. package/dist/extras/index.d.ts +1 -0
  27. package/dist/extras/index.js +2 -0
  28. package/dist/extras/index.js.map +1 -0
  29. package/dist/extras/sys-tags.d.ts +38 -0
  30. package/dist/extras/sys-tags.js +150 -0
  31. package/dist/extras/sys-tags.js.map +1 -0
  32. package/dist/index.d.ts +1 -0
  33. package/dist/index.js +2 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/server/GeminiBridge.d.ts +50 -0
  36. package/dist/server/GeminiBridge.js +500 -0
  37. package/dist/server/GeminiBridge.js.map +1 -0
  38. package/dist/server.d.ts +7 -0
  39. package/dist/server.js +7 -0
  40. package/dist/server.js.map +1 -0
  41. package/dist/ui/AgentChatStore.d.ts +16 -0
  42. package/dist/ui/AgentChatStore.js +59 -0
  43. package/dist/ui/AgentChatStore.js.map +1 -0
  44. package/docs/API.md +100 -0
  45. package/docs/EVENTS.md +100 -0
  46. package/docs/INTEGRATION.md +109 -0
  47. package/docs/SPECIFICATION.md +93 -0
  48. package/docs/TROUBLESHOOTING.md +44 -0
  49. package/docs/USAGE.md +270 -0
  50. package/docs/design.md +62 -0
  51. package/package.json +71 -0
  52. package/server/index.d.ts +1 -0
  53. package/server/index.js +1 -0
  54. package/server/package.json +1 -0
@@ -0,0 +1,500 @@
1
+ import { spawn, spawnSync } from 'child_process';
2
+ import * as readline from 'readline';
3
+ import { WebSocketServer, WebSocket } from 'ws';
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ import { EventEmitter } from 'events';
7
+ import * as url from 'url';
8
+ export class GeminiBridge extends EventEmitter {
9
+ options;
10
+ wss = null;
11
+ geminiProcess = null;
12
+ acpSessionId = null;
13
+ isAuthPending = false;
14
+ pendingAuthUrl = null;
15
+ currentTurnModifiedFiles = new Set();
16
+ logFile;
17
+ projectRootReal;
18
+ // History Persistence
19
+ history = [];
20
+ MAX_HISTORY_SIZE = 2000;
21
+ turnId = 0;
22
+ constructor(options = {}) {
23
+ super();
24
+ const cwd = options.projectRoot || process.cwd();
25
+ this.projectRootReal = this.resolveRealPath(cwd);
26
+ this.options = {
27
+ model: options.model || 'gemini-3-flash-preview',
28
+ port: options.port !== undefined ? options.port : 4444,
29
+ approvalMode: options.approvalMode || 'default',
30
+ geminiBin: options.geminiBin || process.env.GEMINI_BIN || '',
31
+ cliPackage: options.cliPackage || '@google/gemini-cli',
32
+ hostApiUrl: options.hostApiUrl || 'http://localhost:3000',
33
+ sessionId: options.sessionId || '',
34
+ bridgeSecret: options.bridgeSecret || '',
35
+ projectRoot: cwd,
36
+ outgoingTransform: options.outgoingTransform || null
37
+ };
38
+ this.logFile = path.join(this.projectRootReal, 'gemini-acp.log');
39
+ this.rotateLog();
40
+ }
41
+ start() {
42
+ this.log(`[Gemini Bridge] Starting on port ${this.options.port}...`);
43
+ this.logCliVersion();
44
+ this.wss = new WebSocketServer({ port: this.options.port, host: '0.0.0.0' });
45
+ this.wss.on('listening', () => {
46
+ this.log(`[Gemini Bridge] WebSocket server listening on 0.0.0.0:${this.options.port}`);
47
+ });
48
+ this.wss.on('error', (err) => {
49
+ this.log(`[Gemini Bridge] WebSocket server error: ${err}`);
50
+ });
51
+ this.wss.on('connection', (ws, req) => {
52
+ this.handleConnection(ws, req);
53
+ });
54
+ this.startGemini();
55
+ }
56
+ stop() {
57
+ if (this.wss) {
58
+ const server = this.wss;
59
+ this.wss = null; // Clear reference first to prevent restart
60
+ server.close();
61
+ }
62
+ if (this.geminiProcess) {
63
+ this.geminiProcess.kill();
64
+ this.geminiProcess = null;
65
+ }
66
+ }
67
+ resolveRealPath(p) {
68
+ try {
69
+ return fs.realpathSync(p);
70
+ }
71
+ catch {
72
+ return path.resolve(p);
73
+ }
74
+ }
75
+ rotateLog() {
76
+ try {
77
+ if (fs.existsSync(this.logFile)) {
78
+ const stats = fs.statSync(this.logFile);
79
+ if (stats.size > 2 * 1024 * 1024) { // 2MB
80
+ const oldLog = this.logFile + '.old';
81
+ fs.renameSync(this.logFile, oldLog);
82
+ this.log(`[Gemini Bridge] Rotated log file to ${oldLog}`);
83
+ }
84
+ }
85
+ }
86
+ catch (e) {
87
+ console.error(`[Gemini Bridge] Log rotation failed: ${e.message}`);
88
+ }
89
+ }
90
+ log(msg) {
91
+ const timestamp = new Date().toISOString();
92
+ const line = `[${timestamp}] ${msg}\n`;
93
+ try {
94
+ fs.appendFileSync(this.logFile, line);
95
+ }
96
+ catch { }
97
+ console.log(line.trim());
98
+ }
99
+ logCliVersion() {
100
+ const launch = this.resolveGeminiLaunch();
101
+ if (!launch.command || launch.command === 'npx') {
102
+ this.log('[Gemini Bridge] CLI version: n/a (using npx)');
103
+ return;
104
+ }
105
+ try {
106
+ const result = spawnSync(launch.command, ['--version'], { encoding: 'utf8' });
107
+ const out = (result.stdout || result.stderr || '').trim();
108
+ if (out) {
109
+ this.log(`[Gemini Bridge] CLI version: ${out.split('\n')[0]}`);
110
+ }
111
+ else {
112
+ this.log('[Gemini Bridge] CLI version: unknown');
113
+ }
114
+ }
115
+ catch (e) {
116
+ this.log(`[Gemini Bridge] CLI version check failed: ${e}`);
117
+ }
118
+ }
119
+ resolveGeminiLaunch() {
120
+ const baseArgs = ['-m', this.options.model, '--experimental-acp'];
121
+ if (this.options.approvalMode) {
122
+ baseArgs.push('--approval-mode', this.options.approvalMode);
123
+ }
124
+ const candidates = [
125
+ this.options.geminiBin,
126
+ path.join(this.projectRootReal, 'node_modules/.bin/gemini'),
127
+ 'gemini',
128
+ 'google-gemini',
129
+ 'google-gemini-cli',
130
+ ].filter(Boolean);
131
+ for (const candidate of candidates) {
132
+ const resolved = this.resolveExecutablePath(candidate);
133
+ if (resolved) {
134
+ return { command: resolved, args: baseArgs, preferOffline: false };
135
+ }
136
+ }
137
+ return {
138
+ command: 'npx',
139
+ args: ['--yes', this.options.cliPackage, ...baseArgs],
140
+ preferOffline: true,
141
+ };
142
+ }
143
+ resolveExecutablePath(raw) {
144
+ if (!raw)
145
+ return null;
146
+ const value = raw.trim();
147
+ if (!value)
148
+ return null;
149
+ if (value.includes(path.sep) || value.startsWith('.')) {
150
+ const abs = path.isAbsolute(value) ? value : path.resolve(this.projectRootReal, value);
151
+ return fs.existsSync(abs) ? abs : null;
152
+ }
153
+ const result = spawnSync('which', [value], { encoding: 'utf8' });
154
+ if (result && result.status === 0) {
155
+ const located = (result.stdout || '').trim();
156
+ if (located)
157
+ return located;
158
+ }
159
+ return null;
160
+ }
161
+ startGemini() {
162
+ const launch = this.resolveGeminiLaunch();
163
+ this.log(`[Gemini Bridge] Spawning: ${launch.command} ${launch.args.join(' ')}`);
164
+ try {
165
+ const env = { ...process.env };
166
+ if (launch.preferOffline) {
167
+ env.NPM_CONFIG_PREFER_OFFLINE = 'true';
168
+ env.npm_config_prefer_offline = 'true';
169
+ env.NPM_CONFIG_UPDATE_NOTIFIER = 'false';
170
+ }
171
+ this.geminiProcess = spawn(launch.command, launch.args, {
172
+ stdio: ['pipe', 'pipe', 'pipe'],
173
+ env: { ...env, FORCE_COLOR: '1' },
174
+ cwd: this.projectRootReal
175
+ });
176
+ }
177
+ catch (e) {
178
+ this.log(`[Gemini Bridge] Failed to spawn process: ${e.message}`);
179
+ return;
180
+ }
181
+ this.isAuthPending = false;
182
+ this.log(`[Gemini Bridge] Spawned PID: ${this.geminiProcess.pid}`);
183
+ this.geminiProcess.on('error', (err) => {
184
+ this.log(`[Gemini Bridge] Process error: ${err}`);
185
+ });
186
+ this.geminiProcess.on('close', (code, signal) => {
187
+ this.log(`[Gemini Bridge] Process exited (code: ${code}, signal: ${signal})`);
188
+ this.geminiProcess = null;
189
+ this.acpSessionId = null;
190
+ this.isAuthPending = false;
191
+ // Auto restart check
192
+ if (this.wss) {
193
+ setTimeout(() => {
194
+ if (this.wss) {
195
+ this.log('[Gemini Bridge] Restarting process...');
196
+ this.startGemini();
197
+ }
198
+ }, 2000);
199
+ }
200
+ });
201
+ if (this.geminiProcess.stdout) {
202
+ const rl = readline.createInterface({ input: this.geminiProcess.stdout });
203
+ rl.on('line', (line) => this.handleGeminiOutput(line));
204
+ }
205
+ if (this.geminiProcess.stderr) {
206
+ this.geminiProcess.stderr.on('data', (data) => {
207
+ this.log(`[Gemini STDERR] ${data}`);
208
+ });
209
+ }
210
+ }
211
+ handleGeminiOutput(line) {
212
+ if (!line.trim())
213
+ return;
214
+ // Strip ANSI escape sequences
215
+ const cleanLine = line.replace(/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\[\?[0-9;]*[a-zA-Z]|\[[0-9]*[GJK]/g, '');
216
+ // Detect Auth URL
217
+ const urlMatch = cleanLine.match(/(https:\/\/accounts\.google\.com\/o\/oauth2\/v2\/auth\?[^\s]+)/) ||
218
+ cleanLine.match(/(https:\/\/accounts\.google\.com\/o\/oauth2\/auth\?[^\s]+)/) ||
219
+ cleanLine.match(/(https:\/\/accounts\.google\.com\/o\/oauth2\/v2\/auth\S*)/);
220
+ if (urlMatch) {
221
+ const authUrl = urlMatch[1];
222
+ this.log(`[Gemini Bridge] Detected Auth URL: ${authUrl.substring(0, 50)}...`);
223
+ this.isAuthPending = true;
224
+ this.pendingAuthUrl = authUrl;
225
+ this.broadcast({
226
+ jsonrpc: '2.0',
227
+ method: 'gemini/authUrl',
228
+ params: { url: authUrl }
229
+ });
230
+ }
231
+ if (cleanLine.trim().startsWith('{')) {
232
+ try {
233
+ const msg = JSON.parse(cleanLine);
234
+ // Special handlers for bridge-emulated tools
235
+ if (msg?.method === 'fs/read_text_file') {
236
+ this.handleFsRead(msg);
237
+ return;
238
+ }
239
+ if (msg?.method === 'fs/write_text_file') {
240
+ this.handleFsWrite(msg);
241
+ return;
242
+ }
243
+ this.broadcast(msg);
244
+ this.emit('gemini:message', msg); // Hook
245
+ if (msg.result && msg.result.sessionId) {
246
+ this.acpSessionId = msg.result.sessionId;
247
+ this.log(`[Gemini Bridge] Session Ready: ${this.acpSessionId}`);
248
+ }
249
+ }
250
+ catch (e) {
251
+ this.log(`[Gemini Bridge] JSON Parse Error: ${e.message} (Line: ${cleanLine.substring(0, 100)})`);
252
+ }
253
+ }
254
+ else {
255
+ this.log(`[Gemini STDOUT] ${line}`);
256
+ }
257
+ }
258
+ handleConnection(ws, req) {
259
+ const addr = ws._socket?.remoteAddress || 'unknown';
260
+ this.log(`[Gemini Bridge] Client connected (${addr})`);
261
+ // Handle Replay logic
262
+ try {
263
+ const query = url.parse(req.url || '', true).query;
264
+ const limit = query.limit ? parseInt(Array.isArray(query.limit) ? query.limit[0] : query.limit, 10) : undefined;
265
+ const since = query.since ? parseInt(Array.isArray(query.since) ? query.since[0] : query.since, 10) : undefined;
266
+ const before = query.before ? parseInt(Array.isArray(query.before) ? query.before[0] : query.before, 10) : undefined;
267
+ let replay = this.history;
268
+ if (since) {
269
+ replay = replay.filter(h => h.timestamp > since);
270
+ }
271
+ if (before) {
272
+ replay = replay.filter(h => h.timestamp < before);
273
+ }
274
+ // Apply limit as "turn count" to avoid slicing mid-stream
275
+ if (limit && limit > 0) {
276
+ const turnIds = [];
277
+ for (const h of replay) {
278
+ const t = typeof h.data?.__turnId === 'number' ? h.data.__turnId : 0;
279
+ if (turnIds.length === 0 || turnIds[turnIds.length - 1] !== t) {
280
+ turnIds.push(t);
281
+ }
282
+ }
283
+ const keep = new Set(turnIds.slice(-limit));
284
+ replay = replay.filter(h => keep.has(typeof h.data?.__turnId === 'number' ? h.data.__turnId : 0));
285
+ }
286
+ if (replay.length > 0) {
287
+ this.log(`[Gemini Bridge] Replaying ${replay.length} messages to client`);
288
+ replay.forEach((h, idx) => {
289
+ if (ws.readyState === WebSocket.OPEN) {
290
+ ws.send(JSON.stringify({
291
+ jsonrpc: '2.0',
292
+ method: 'bridge/replay',
293
+ params: { timestamp: h.timestamp, data: h.data, replayId: `${h.timestamp}-${idx}` }
294
+ }));
295
+ }
296
+ });
297
+ }
298
+ }
299
+ catch (e) {
300
+ this.log(`[Gemini Bridge] Replay handling error: ${e}`);
301
+ }
302
+ if (this.isAuthPending && this.pendingAuthUrl) {
303
+ ws.send(JSON.stringify({
304
+ jsonrpc: '2.0',
305
+ method: 'gemini/authUrl',
306
+ params: { url: this.pendingAuthUrl }
307
+ }));
308
+ }
309
+ ws.on('message', (message) => {
310
+ if (!this.geminiProcess || !this.geminiProcess.stdin) {
311
+ this.log('[Gemini Bridge] Gemini process not ready');
312
+ return;
313
+ }
314
+ const str = message.toString();
315
+ try {
316
+ const parsed = JSON.parse(str);
317
+ this.emit('client:message', parsed); // Hook
318
+ if (parsed?.method === 'gemini/submitAuthCode') {
319
+ const code = parsed?.params?.code;
320
+ if (code) {
321
+ this.log(`[Bridge] Submitting auth code to stdin...`);
322
+ this.geminiProcess.stdin.write(code.trim() + '\n');
323
+ this.isAuthPending = false;
324
+ this.pendingAuthUrl = null;
325
+ }
326
+ return;
327
+ }
328
+ if (parsed?.method === 'authenticate') {
329
+ this.isAuthPending = true;
330
+ this.geminiProcess.stdin.write(str + '\n');
331
+ return;
332
+ }
333
+ if (this.isAuthPending) {
334
+ this.log(`[Bridge] Blocked message during pending auth: ${str.substring(0, 50)}...`);
335
+ return;
336
+ }
337
+ this.geminiProcess.stdin.write(JSON.stringify(parsed) + '\n');
338
+ // Record client prompts for replay and advance turn id
339
+ if (parsed?.method === 'session/prompt') {
340
+ this.turnId += 1;
341
+ this.history.push({ timestamp: Date.now(), data: { ...parsed, __turnId: this.turnId } });
342
+ if (this.history.length > this.MAX_HISTORY_SIZE)
343
+ this.history.shift();
344
+ }
345
+ }
346
+ catch {
347
+ this.geminiProcess.stdin.write(str + '\n');
348
+ }
349
+ });
350
+ ws.on('close', () => {
351
+ this.log('[Gemini Bridge] Client disconnected');
352
+ });
353
+ }
354
+ broadcast(data) {
355
+ const transform = this.options.outgoingTransform ? this.options.outgoingTransform(data) : null;
356
+ const forward = transform && 'forward' in transform ? transform.forward : data;
357
+ const extra = transform?.extra || [];
358
+ if (forward) {
359
+ this.broadcastPayload(forward);
360
+ }
361
+ if (extra.length > 0) {
362
+ for (const item of extra) {
363
+ this.broadcastPayload(item, true);
364
+ }
365
+ }
366
+ }
367
+ broadcastPayload(data, forceStore = false) {
368
+ // Record History (only replay-relevant messages)
369
+ const shouldStore = forceStore ||
370
+ data?.method === 'session/update' ||
371
+ data?.method === 'session/request_permission' ||
372
+ data?.method === 'gemini/authUrl' ||
373
+ data?.method === 'bridge/structured_event';
374
+ if (shouldStore) {
375
+ const timestamp = Date.now();
376
+ const tagged = { ...data, __turnId: this.turnId };
377
+ this.history.push({ timestamp, data: tagged });
378
+ if (this.history.length > this.MAX_HISTORY_SIZE) {
379
+ this.history.shift(); // remove oldest
380
+ }
381
+ }
382
+ if (!this.wss)
383
+ return;
384
+ const str = JSON.stringify(data);
385
+ this.wss.clients.forEach((client) => {
386
+ if (client.readyState === WebSocket.OPEN) {
387
+ client.send(str);
388
+ }
389
+ });
390
+ // Trigger checkpoint on turn end
391
+ const updateType = data?.params?.update?.sessionUpdate || data.sessionUpdate;
392
+ if (updateType === 'end_of_turn' || updateType === 'response.completed') {
393
+ if (this.currentTurnModifiedFiles.size > 0) {
394
+ this.triggerCheckpoint(Array.from(this.currentTurnModifiedFiles));
395
+ this.currentTurnModifiedFiles.clear();
396
+ }
397
+ }
398
+ }
399
+ async triggerCheckpoint(files) {
400
+ if (!this.options.sessionId || !this.options.hostApiUrl)
401
+ return;
402
+ try {
403
+ this.log(`[Gemini Bridge] Triggering checkpoint for ${files.length} files...`);
404
+ const response = await fetch(`${this.options.hostApiUrl}/api/shadow/checkpoint`, {
405
+ method: 'POST',
406
+ headers: { 'Content-Type': 'application/json' },
407
+ body: JSON.stringify({
408
+ sessionId: this.options.sessionId,
409
+ files: files,
410
+ bridgeSecret: this.options.bridgeSecret
411
+ })
412
+ });
413
+ if (response.ok) {
414
+ const json = await response.json();
415
+ this.broadcast({
416
+ jsonrpc: '2.0',
417
+ method: 'session/checkpoint_created',
418
+ params: { stats: json.stats }
419
+ });
420
+ }
421
+ }
422
+ catch (e) {
423
+ this.log(`[Gemini Bridge] Checkpoint error: ${e.message}`);
424
+ }
425
+ }
426
+ handleFsRead(msg) {
427
+ const id = msg.id;
428
+ const params = msg.params || {};
429
+ const reqPath = params.path;
430
+ const line = typeof params.line === 'number' ? params.line : null;
431
+ const limit = typeof params.limit === 'number' ? params.limit : null;
432
+ const abs = this.safeResolveProjectPath(reqPath);
433
+ if (!abs) {
434
+ this.respondError(id, -32602, 'Invalid path');
435
+ return;
436
+ }
437
+ try {
438
+ const raw = fs.readFileSync(abs, 'utf8');
439
+ let content = raw;
440
+ if (line !== null || limit !== null) {
441
+ const lines = raw.split(/\r?\n/);
442
+ const start = Math.max(0, (typeof line === 'number' ? line - 1 : 0));
443
+ const count = typeof limit === 'number' ? Math.max(0, limit) : lines.length - start;
444
+ content = lines.slice(start, start + count).join('\n');
445
+ }
446
+ this.sendToGemini({ jsonrpc: '2.0', id, result: { content } });
447
+ }
448
+ catch (e) {
449
+ if (e && e.code === 'ENOENT') {
450
+ this.sendToGemini({ jsonrpc: '2.0', id, result: { content: '' } });
451
+ return;
452
+ }
453
+ this.respondError(id, -32000, 'File read error', e.message);
454
+ }
455
+ }
456
+ handleFsWrite(msg) {
457
+ const id = msg.id;
458
+ const params = msg.params || {};
459
+ const abs = this.safeResolveProjectPath(params.path);
460
+ if (!abs) {
461
+ this.respondError(id, -32602, 'Invalid path');
462
+ return;
463
+ }
464
+ try {
465
+ fs.mkdirSync(path.dirname(abs), { recursive: true });
466
+ const content = params.content ?? '';
467
+ fs.writeFileSync(abs, String(content), 'utf8');
468
+ if (params.path)
469
+ this.currentTurnModifiedFiles.add(params.path);
470
+ this.sendToGemini({ jsonrpc: '2.0', id, result: null });
471
+ }
472
+ catch (e) {
473
+ this.respondError(id, -32000, 'File write error', e.message);
474
+ }
475
+ }
476
+ safeResolveProjectPath(p) {
477
+ try {
478
+ if (!p)
479
+ return null;
480
+ const abs = path.resolve(this.projectRootReal, p);
481
+ const relative = path.relative(this.projectRootReal, abs);
482
+ if (!relative || (!relative.startsWith('..') && !path.isAbsolute(relative))) {
483
+ return abs;
484
+ }
485
+ return null;
486
+ }
487
+ catch {
488
+ return null;
489
+ }
490
+ }
491
+ sendToGemini(payload) {
492
+ if (this.geminiProcess && this.geminiProcess.stdin) {
493
+ this.geminiProcess.stdin.write(JSON.stringify(payload) + '\n');
494
+ }
495
+ }
496
+ respondError(id, code, message, data) {
497
+ this.sendToGemini({ jsonrpc: '2.0', id, error: { code, message, data } });
498
+ }
499
+ }
500
+ //# sourceMappingURL=GeminiBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GeminiBridge.js","sourceRoot":"","sources":["../../src/server/GeminiBridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { AgentChatClient } from './core/AgentChatClient.js';
2
+ export { AcpWebSocketTransport } from './core/AcpWebSocketTransport.js';
3
+ export { ToolPermissionManager } from './core/ToolPermissionManager.js';
4
+ export { AgentChatStore } from './ui/AgentChatStore.js';
5
+ export * from './common/types.js';
6
+ export { GeminiBridge } from './server/GeminiBridge.js';
7
+ export type { GeminiBridgeOptions } from './server/GeminiBridge.js';
package/dist/server.js ADDED
@@ -0,0 +1,7 @@
1
+ export { AgentChatClient } from './core/AgentChatClient.js';
2
+ export { AcpWebSocketTransport } from './core/AcpWebSocketTransport.js';
3
+ export { ToolPermissionManager } from './core/ToolPermissionManager.js';
4
+ export { AgentChatStore } from './ui/AgentChatStore.js';
5
+ export * from './common/types.js';
6
+ export { GeminiBridge } from './server/GeminiBridge.js';
7
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { AgentChatClient } from '../core/AgentChatClient.js';
2
+ import { AgentChatState } from '../common/types.js';
3
+ type StateListener = (state: AgentChatState) => void;
4
+ export declare class AgentChatStore {
5
+ private client;
6
+ private state;
7
+ private listeners;
8
+ private bindings;
9
+ constructor(client: AgentChatClient);
10
+ getState(): AgentChatState;
11
+ subscribe(listener: StateListener): () => void;
12
+ dispose(): void;
13
+ private bind;
14
+ private setState;
15
+ }
16
+ export {};
@@ -0,0 +1,59 @@
1
+ export class AgentChatStore {
2
+ client;
3
+ state;
4
+ listeners = new Set();
5
+ bindings = [];
6
+ constructor(client) {
7
+ this.client = client;
8
+ this.state = {
9
+ connectionState: client.getConnectionState(),
10
+ isStreaming: false,
11
+ messages: client.getMessages(),
12
+ pendingApproval: client.getPendingApproval(),
13
+ authUrl: client.getAuthUrl(),
14
+ lastStopReason: null,
15
+ lastError: null,
16
+ };
17
+ this.bind('connection_state_changed', (evt) => {
18
+ this.setState({ connectionState: evt.state });
19
+ });
20
+ this.bind('message', () => this.setState({ messages: client.getMessages() }));
21
+ this.bind('message_update', () => this.setState({ messages: client.getMessages() }));
22
+ this.bind('turn_started', () => this.setState({ isStreaming: true, lastStopReason: null }));
23
+ this.bind('turn_completed', (reason) => this.setState({ isStreaming: false, lastStopReason: reason || null }));
24
+ this.bind('permission_required', (approval) => this.setState({ pendingApproval: approval }));
25
+ this.bind('approval_resolved', () => this.setState({ pendingApproval: null }));
26
+ this.bind('auth_required', (url) => this.setState({ authUrl: url }));
27
+ this.bind('auth_resolved', () => this.setState({ authUrl: null }));
28
+ this.bind('error', (err) => this.setState({ lastError: err }));
29
+ this.bind('messages_replayed', () => this.setState({ messages: client.getMessages() }));
30
+ }
31
+ getState() {
32
+ return this.state;
33
+ }
34
+ subscribe(listener) {
35
+ this.listeners.add(listener);
36
+ listener(this.state);
37
+ return () => {
38
+ this.listeners.delete(listener);
39
+ };
40
+ }
41
+ dispose() {
42
+ for (const { event, handler } of this.bindings) {
43
+ this.client.removeListener(event, handler);
44
+ }
45
+ this.bindings = [];
46
+ this.listeners.clear();
47
+ }
48
+ bind(event, handler) {
49
+ this.client.on(event, handler);
50
+ this.bindings.push({ event, handler });
51
+ }
52
+ setState(partial) {
53
+ this.state = { ...this.state, ...partial };
54
+ for (const listener of this.listeners) {
55
+ listener(this.state);
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=AgentChatStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentChatStore.js","sourceRoot":"","sources":["../../src/ui/AgentChatStore.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,cAAc;IACf,MAAM,CAAkB;IACxB,KAAK,CAAiB;IACtB,SAAS,GAAG,IAAI,GAAG,EAAiB,CAAC;IACrC,QAAQ,GAAgE,EAAE,CAAC;IAEnF,YAAY,MAAuB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG;YACT,eAAe,EAAE,MAAM,CAAC,kBAAkB,EAAE;YAC5C,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE;YAC9B,eAAe,EAAE,MAAM,CAAC,kBAAkB,EAAE;YAC5C,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE;YAC5B,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,IAAI;SAClB,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,GAA+B,EAAE,EAAE;YACtE,IAAI,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QACvH,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,QAAyB,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9G,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,SAAS,CAAC,QAAuB;QAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC,CAAC;IACN,CAAC;IAED,OAAO;QACH,KAAK,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAEO,IAAI,CAAC,KAAa,EAAE,OAAiC;QACzD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAEO,QAAQ,CAAC,OAAgC;QAC7C,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;QAC3C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;CACJ"}