@dsiloed/silo-link 1.0.5 → 1.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 (57) hide show
  1. package/README.md +67 -2
  2. package/dist/cable/action-cable-client.d.ts +5 -0
  3. package/dist/cable/action-cable-client.d.ts.map +1 -1
  4. package/dist/cable/action-cable-client.js +25 -1
  5. package/dist/cable/action-cable-client.js.map +1 -1
  6. package/dist/cable/subscription-manager.d.ts.map +1 -1
  7. package/dist/cable/subscription-manager.js +23 -5
  8. package/dist/cable/subscription-manager.js.map +1 -1
  9. package/dist/cli/claude-md-block.d.ts +6 -0
  10. package/dist/cli/claude-md-block.d.ts.map +1 -0
  11. package/dist/cli/claude-md-block.js +84 -0
  12. package/dist/cli/claude-md-block.js.map +1 -0
  13. package/dist/cli/commands.d.ts.map +1 -1
  14. package/dist/cli/commands.js +80 -1
  15. package/dist/cli/commands.js.map +1 -1
  16. package/dist/core/agent-launcher.d.ts +101 -0
  17. package/dist/core/agent-launcher.d.ts.map +1 -0
  18. package/dist/core/agent-launcher.js +2 -0
  19. package/dist/core/agent-launcher.js.map +1 -0
  20. package/dist/core/bridge.d.ts +1 -0
  21. package/dist/core/bridge.d.ts.map +1 -1
  22. package/dist/core/bridge.js +105 -2
  23. package/dist/core/bridge.js.map +1 -1
  24. package/dist/core/claude-launcher.d.ts +50 -5
  25. package/dist/core/claude-launcher.d.ts.map +1 -1
  26. package/dist/core/claude-launcher.js +251 -22
  27. package/dist/core/claude-launcher.js.map +1 -1
  28. package/dist/core/gemini-launcher.d.ts +32 -0
  29. package/dist/core/gemini-launcher.d.ts.map +1 -0
  30. package/dist/core/gemini-launcher.js +55 -0
  31. package/dist/core/gemini-launcher.js.map +1 -0
  32. package/dist/core/launcher-factory.d.ts +13 -0
  33. package/dist/core/launcher-factory.d.ts.map +1 -0
  34. package/dist/core/launcher-factory.js +24 -0
  35. package/dist/core/launcher-factory.js.map +1 -0
  36. package/dist/core/message-queue.d.ts +6 -0
  37. package/dist/core/message-queue.d.ts.map +1 -1
  38. package/dist/core/message-queue.js +15 -0
  39. package/dist/core/message-queue.js.map +1 -1
  40. package/dist/core/openai-launcher.d.ts +36 -0
  41. package/dist/core/openai-launcher.d.ts.map +1 -0
  42. package/dist/core/openai-launcher.js +59 -0
  43. package/dist/core/openai-launcher.js.map +1 -0
  44. package/dist/core/workspace-manager.d.ts +65 -0
  45. package/dist/core/workspace-manager.d.ts.map +1 -0
  46. package/dist/core/workspace-manager.js +299 -0
  47. package/dist/core/workspace-manager.js.map +1 -0
  48. package/dist/mcp/server.d.ts +2 -0
  49. package/dist/mcp/server.d.ts.map +1 -1
  50. package/dist/mcp/server.js.map +1 -1
  51. package/dist/mcp/tools/register-tools.d.ts +2 -0
  52. package/dist/mcp/tools/register-tools.d.ts.map +1 -1
  53. package/dist/mcp/tools/register-tools.js +251 -2
  54. package/dist/mcp/tools/register-tools.js.map +1 -1
  55. package/dist/types/index.d.ts +28 -0
  56. package/dist/types/index.d.ts.map +1 -1
  57. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { spawn } from 'node:child_process';
2
2
  /**
3
- * Manages Claude Code child processes.
3
+ * Claude Code implementation of the AgentLauncher interface.
4
4
  *
5
5
  * Strategy:
6
6
  * - For SiloLink-spawned sessions: nudge via stdin when idle (preserves context)
@@ -13,8 +13,10 @@ export class ClaudeLauncher {
13
13
  config;
14
14
  sessionManager;
15
15
  dsiloedClient;
16
+ workspaceManager;
16
17
  childProcess = null;
17
18
  tmuxSessions = new Map(); // tmuxName -> conversationId
19
+ tmuxSessionWorkspaces = new Map(); // tmuxName -> sessionId (for worktree cleanup)
18
20
  tmuxMonitorTimer = null;
19
21
  idleCheckTimer = null;
20
22
  launchingConversations = new Set();
@@ -27,11 +29,14 @@ export class ClaudeLauncher {
27
29
  lastClaudeSessionId = null;
28
30
  // Message that triggered the current launch (included in prompt for context)
29
31
  pendingTriggerMessage = null;
30
- constructor(config, sessionManager, dsiloedClient, messageQueue) {
32
+ // Workspace config for the next launch (set by control channel or API)
33
+ pendingWorkspaceConfig = null;
34
+ constructor(config, sessionManager, dsiloedClient, messageQueue, workspaceManager) {
31
35
  this.config = config;
32
36
  this.sessionManager = sessionManager;
33
37
  this.dsiloedClient = dsiloedClient || null;
34
38
  this.messageQueue = messageQueue || null;
39
+ this.workspaceManager = workspaceManager || null;
35
40
  this.enabled = !!(config.claude_command && config.claude_working_directory);
36
41
  }
37
42
  isEnabled() {
@@ -68,8 +73,9 @@ export class ClaudeLauncher {
68
73
  }
69
74
  /**
70
75
  * Launch a new Claude Code session. Uses --resume if a previous session ID is available.
76
+ * This is the internal launch method — use launchAgent() for the AgentLauncher interface.
71
77
  */
72
- async launch(reason = 'manual', conversationId) {
78
+ async launchInternal(reason = 'manual', conversationId) {
73
79
  if (!this.enabled) {
74
80
  console.log('[ClaudeLauncher] Not configured — set claude_command and claude_working_directory in config');
75
81
  return false;
@@ -82,14 +88,39 @@ export class ClaudeLauncher {
82
88
  this.launchingConversations.add(convKey);
83
89
  try {
84
90
  const command = this.config.claude_command || 'claude';
85
- const cwd = this.config.claude_working_directory || process.cwd();
91
+ let cwd = this.config.claude_working_directory || process.cwd();
86
92
  const args = ['--dangerously-skip-permissions'];
93
+ // Create a worktree if workspace config is provided
94
+ let workspaceSessionId = null;
95
+ let workspaceBranch = null;
96
+ const wsConfig = this.pendingWorkspaceConfig;
97
+ this.pendingWorkspaceConfig = null;
98
+ if (wsConfig && this.workspaceManager) {
99
+ // Use a temporary session ID for the worktree (will be updated when Claude registers)
100
+ workspaceSessionId = `tmux-${Date.now()}`;
101
+ workspaceBranch = wsConfig.branch;
102
+ try {
103
+ const workspace = this.workspaceManager.createWorktree(workspaceSessionId, wsConfig.repoPath, wsConfig.branch, wsConfig.baseBranch || 'development');
104
+ cwd = workspace.worktreePath;
105
+ console.log(`[ClaudeLauncher] Created worktree at ${cwd} (branch: ${wsConfig.branch})`);
106
+ }
107
+ catch (err) {
108
+ console.error(`[ClaudeLauncher] Failed to create worktree: ${err}`);
109
+ // Fall back to normal cwd
110
+ workspaceSessionId = null;
111
+ workspaceBranch = null;
112
+ }
113
+ }
87
114
  let prompt;
115
+ // Build workspace context string for inclusion in prompts
116
+ const workspaceContext = workspaceSessionId
117
+ ? `\n\nWORKSPACE: You are working in an isolated git worktree at "${cwd}" on branch "${workspaceBranch}". This is separate from the main repo — your changes won't affect other sessions. Use remote_workspace_claim to claim files before editing, and remote_workspace_check to see what other sessions are working on.`
118
+ : '';
88
119
  // Try to resume previous session if we have an ID
89
120
  if (this.lastClaudeSessionId && (reason === 'process-exit' || reason === 'inbound-message')) {
90
121
  args.push('--resume', this.lastClaudeSessionId);
91
122
  console.log(`[ClaudeLauncher] Resuming session: ${this.lastClaudeSessionId}`);
92
- prompt = 'Continue polling SiloLink for messages. Check memory for context if needed.';
123
+ prompt = 'Continue polling SiloLink for messages. Check memory for context if needed.' + workspaceContext;
93
124
  }
94
125
  else {
95
126
  if (reason === 'process-exit' || reason === 'inbound-message') {
@@ -112,16 +143,19 @@ export class ClaudeLauncher {
112
143
  '',
113
144
  'CRITICAL: The user is NOT watching the terminal. You MUST send a remote_notify progress update after EVERY major step (file edits, commits, merges, deploys, errors). Do not go silent while working.',
114
145
  triggerLine,
146
+ workspaceContext,
115
147
  ].join('\n');
116
148
  }
117
149
  else {
118
- prompt = this.config.claude_session_prompt ||
119
- 'Register with SiloLink as "portablemind" and enter the poll loop.';
150
+ prompt = (this.config.claude_session_prompt ||
151
+ 'Register with SiloLink as "portablemind" and enter the poll loop.') + workspaceContext;
120
152
  }
121
153
  }
122
154
  console.log(`[ClaudeLauncher] Launching Claude Code via tmux (reason: ${reason})`);
123
155
  console.log(` Command: ${command} ${args.join(' ')}`);
124
156
  console.log(` Working directory: ${cwd}`);
157
+ if (workspaceBranch)
158
+ console.log(` Workspace branch: ${workspaceBranch}`);
125
159
  console.log(` Prompt: ${prompt.substring(0, 100)}...`);
126
160
  const tmuxSession = `silolink-claude-${Date.now()}`;
127
161
  // Create a new tmux session running Claude Code in a real TTY
@@ -146,10 +180,17 @@ export class ClaudeLauncher {
146
180
  });
147
181
  if (!sessionExists) {
148
182
  console.error(`[ClaudeLauncher] tmux session ${tmuxSession} failed to start`);
183
+ // Clean up worktree if we created one
184
+ if (workspaceSessionId && this.workspaceManager) {
185
+ this.workspaceManager.removeWorktree(workspaceSessionId);
186
+ }
149
187
  return false;
150
188
  }
151
189
  console.log(`[ClaudeLauncher] tmux session "${tmuxSession}" created`);
152
190
  this.tmuxSessions.set(tmuxSession, conversationId || 0);
191
+ if (workspaceSessionId) {
192
+ this.tmuxSessionWorkspaces.set(tmuxSession, workspaceSessionId);
193
+ }
153
194
  // Send the prompt to Claude via tmux send-keys after MCP servers initialize
154
195
  const sessionToPrompt = tmuxSession;
155
196
  const promptToSend = prompt;
@@ -197,6 +238,13 @@ export class ClaudeLauncher {
197
238
  }
198
239
  }
199
240
  }
241
+ /**
242
+ * Set workspace configuration for the next launch.
243
+ * The worktree will be created when launch() is called.
244
+ */
245
+ setWorkspaceConfig(config) {
246
+ this.pendingWorkspaceConfig = config;
247
+ }
200
248
  /**
201
249
  * Called when an inbound message arrives and no active session can handle it.
202
250
  * @param triggerMessage - Content of the message that triggered the launch (included in prompt)
@@ -214,7 +262,7 @@ export class ClaudeLauncher {
214
262
  }
215
263
  // Store trigger message so the launch prompt can include it
216
264
  this.pendingTriggerMessage = triggerMessage || null;
217
- return this.launch('inbound-message', conversationId);
265
+ return this.launchInternal('inbound-message', conversationId);
218
266
  }
219
267
  /**
220
268
  * Check for idle sessions — nudge if process alive, respawn if dead.
@@ -224,10 +272,16 @@ export class ClaudeLauncher {
224
272
  async checkIdle() {
225
273
  const sessions = this.sessionManager.getAll();
226
274
  const idleTimeout = this.config.claude_idle_timeout_ms || 30000;
227
- const maxNudges = 3; // Kill after 3 failed nudges (~90s with no response)
275
+ const maxNudges = 10; // Kill after 10 failed nudges (~5 min with no response)
228
276
  const now = Date.now();
229
277
  if (sessions.length === 0)
230
278
  return;
279
+ // Don't nudge sessions that were just created — give them time to
280
+ // process the launch prompt and initial messages before intervening.
281
+ const startupGracePeriod = 90000; // 90 seconds
282
+ const allPastStartup = sessions.every(s => now - s.createdAt.getTime() > startupGracePeriod);
283
+ if (!allPastStartup)
284
+ return;
231
285
  const allIdle = sessions.every(s => now - s.lastActivity.getTime() > idleTimeout);
232
286
  if (!allIdle) {
233
287
  // Activity detected — reset nudge counter and update snapshots
@@ -250,24 +304,53 @@ export class ClaudeLauncher {
250
304
  for (const s of sessions) {
251
305
  this.lastActivitySnapshot.set(s.sessionId, s.lastActivity.getTime());
252
306
  }
253
- // Check if any session has pending messages in the queue
254
- const hasPendingMessages = this.messageQueue && sessions.some(s => this.messageQueue.queueSize(s.sessionId) > 0);
255
- if (this.nudgeCount >= maxNudges && hasPendingMessages) {
307
+ // Check if any session has messages that haven't been delivered yet.
308
+ // Messages already polled by Claude (pending ack) don't count — Claude is working on them.
309
+ const hasUndelivered = this.messageQueue && sessions.some(s => this.messageQueue.hasUndeliveredMessages(s.sessionId));
310
+ if (this.nudgeCount >= maxNudges && hasUndelivered) {
256
311
  // Session is hung with undelivered messages — kill and relaunch
257
- console.log(`[ClaudeLauncher] Session hung (${this.nudgeCount} nudges with no response, messages pending) — killing and relaunching`);
258
- const hungSessions = sessions.filter(s => this.messageQueue.queueSize(s.sessionId) > 0);
312
+ console.log(`[ClaudeLauncher] Session hung (${this.nudgeCount} nudges with no response, undelivered messages) — killing and relaunching`);
313
+ const hungSessions = sessions.filter(s => this.messageQueue.hasUndeliveredMessages(s.sessionId));
259
314
  for (const s of hungSessions) {
260
315
  this.killByConversation(s.conversationId);
316
+ if (this.messageQueue) {
317
+ this.messageQueue.clearSession(s.sessionId);
318
+ }
261
319
  this.sessionManager.unregister(s.sessionId);
262
- // Relaunch for this conversation
263
- await this.launch('inbound-message', s.conversationId);
320
+ // Wait for tmux kill to complete before relaunching
321
+ await new Promise(resolve => setTimeout(resolve, 2000));
322
+ await this.launchInternal('inbound-message', s.conversationId);
264
323
  }
265
324
  this.nudgeCount = 0;
266
325
  return;
267
326
  }
268
- // Process alive but idle nudge via stdin
269
- this.nudge();
270
- this.nudgeCount++;
327
+ // Kill zombie sessionsonly if a session hasn't made any MCP tool call in 10 minutes
328
+ // AND has undelivered messages waiting. A session doing non-MCP work (file edits, bash
329
+ // commands, etc.) is not a zombie — it's just not using SiloLink tools.
330
+ const zombieTimeout = 10 * 60 * 1000; // 10 minutes
331
+ const zombieSessions = sessions.filter(s => now - s.lastActivity.getTime() > zombieTimeout &&
332
+ this.messageQueue?.hasUndeliveredMessages(s.sessionId));
333
+ for (const s of zombieSessions) {
334
+ console.log(`[ClaudeLauncher] Zombie session detected (no MCP activity for ${Math.round((now - s.lastActivity.getTime()) / 60000)}min, has undelivered messages) — killing conv=${s.conversationId}`);
335
+ this.killByConversation(s.conversationId);
336
+ // Clear queue before unregister so messages can be re-buffered on relaunch
337
+ if (this.messageQueue) {
338
+ this.messageQueue.clearSession(s.sessionId);
339
+ }
340
+ this.sessionManager.unregister(s.sessionId);
341
+ // Wait for tmux kill to complete before relaunching
342
+ await new Promise(resolve => setTimeout(resolve, 2000));
343
+ console.log(`[ClaudeLauncher] Relaunching for conversation ${s.conversationId} after zombie cleanup`);
344
+ this.launchInternal('inbound-message', s.conversationId).catch(err => {
345
+ console.error(`[ClaudeLauncher] Relaunch after zombie kill failed: ${err}`);
346
+ });
347
+ }
348
+ // Only nudge if there are messages waiting — no point nudging an idle session
349
+ // that's already polling with nothing to do
350
+ if (hasUndelivered) {
351
+ this.nudge();
352
+ this.nudgeCount++;
353
+ }
271
354
  return;
272
355
  }
273
356
  else if (this.launchingConversations.size === 0) {
@@ -277,7 +360,7 @@ export class ClaudeLauncher {
277
360
  }
278
361
  console.log(`[ClaudeLauncher] Sessions orphaned (process dead), respawning...`);
279
362
  this.nudgeCount = 0;
280
- await this.launch('process-exit', lastConvId);
363
+ await this.launchInternal('process-exit', lastConvId);
281
364
  }
282
365
  }
283
366
  /**
@@ -295,6 +378,13 @@ export class ClaudeLauncher {
295
378
  check.on('exit', (code) => {
296
379
  if (code !== 0) {
297
380
  console.log(`[ClaudeLauncher] tmux session "${name}" ended`);
381
+ // Clean up worktree if this session had one
382
+ const wsSessionId = this.tmuxSessionWorkspaces.get(name);
383
+ if (wsSessionId && this.workspaceManager) {
384
+ console.log(`[ClaudeLauncher] Cleaning up worktree for workspace session ${wsSessionId}`);
385
+ this.workspaceManager.removeWorktree(wsSessionId);
386
+ this.tmuxSessionWorkspaces.delete(name);
387
+ }
298
388
  this.tmuxSessions.delete(name);
299
389
  if (this.tmuxSessions.size === 0 && this.tmuxMonitorTimer) {
300
390
  clearInterval(this.tmuxMonitorTimer);
@@ -311,16 +401,46 @@ export class ClaudeLauncher {
311
401
  if (this.tmuxSessions.size === 0)
312
402
  return false;
313
403
  const now = Date.now();
314
- if (now - this.lastNudgeAt < 10000)
404
+ // Exponential backoff: 30s, 60s, 120s, 240s, ... (capped at 5 min)
405
+ const baseInterval = 30000;
406
+ const interval = Math.min(baseInterval * Math.pow(2, this.nudgeCount), 5 * 60 * 1000);
407
+ if (now - this.lastNudgeAt < interval)
315
408
  return false;
316
409
  this.lastNudgeAt = now;
317
410
  const message = 'Continue polling SiloLink for messages. Do not stop the poll loop.';
318
411
  for (const [name] of this.tmuxSessions) {
319
412
  spawn('tmux', ['send-keys', '-t', name, message, 'Enter'], { stdio: 'ignore' });
320
413
  }
321
- console.log(`[ClaudeLauncher] Nudged ${this.tmuxSessions.size} Claude session(s) via tmux`);
414
+ console.log(`[ClaudeLauncher] Nudged ${this.tmuxSessions.size} Claude session(s) via tmux (attempt ${this.nudgeCount + 1}, next in ${Math.round(interval / 1000)}s)`);
322
415
  return true;
323
416
  }
417
+ /**
418
+ * Interrupt the Claude session for a specific conversation.
419
+ * Sends Escape to stop current work, then redirects Claude to check
420
+ * for new messages via remote_poll.
421
+ */
422
+ async interrupt(conversationId, message) {
423
+ for (const [name, convId] of this.tmuxSessions) {
424
+ if (convId === conversationId) {
425
+ console.log(`[ClaudeLauncher] Interrupting tmux session "${name}" (conversation ${conversationId})`);
426
+ // Send Escape to interrupt current work
427
+ spawn('tmux', ['send-keys', '-t', name, 'Escape'], { stdio: 'ignore' });
428
+ // Wait for Claude to stop
429
+ await new Promise(resolve => setTimeout(resolve, 2000));
430
+ // Tell Claude to check for the new message
431
+ const redirect = message
432
+ || 'The user interrupted you. Check remote_poll for their latest message and follow those instructions instead.';
433
+ const escapedRedirect = redirect.replace(/"/g, '\\"').replace(/\n/g, ' ');
434
+ spawn('tmux', ['send-keys', '-t', name, escapedRedirect], { stdio: 'ignore' });
435
+ await new Promise(resolve => setTimeout(resolve, 500));
436
+ spawn('tmux', ['send-keys', '-t', name, 'Enter'], { stdio: 'ignore' });
437
+ console.log(`[ClaudeLauncher] Interrupt sent to "${name}"`);
438
+ return true;
439
+ }
440
+ }
441
+ console.log(`[ClaudeLauncher] No tmux session found for conversation ${conversationId} to interrupt`);
442
+ return false;
443
+ }
324
444
  /**
325
445
  * Kill the Claude session for a specific conversation.
326
446
  */
@@ -328,6 +448,12 @@ export class ClaudeLauncher {
328
448
  for (const [name, convId] of this.tmuxSessions) {
329
449
  if (convId === conversationId) {
330
450
  console.log(`[ClaudeLauncher] Killing tmux session "${name}" (conversation ${conversationId})`);
451
+ // Clean up worktree
452
+ const wsSessionId = this.tmuxSessionWorkspaces.get(name);
453
+ if (wsSessionId && this.workspaceManager) {
454
+ this.workspaceManager.removeWorktree(wsSessionId);
455
+ this.tmuxSessionWorkspaces.delete(name);
456
+ }
331
457
  spawn('tmux', ['kill-session', '-t', name], { stdio: 'ignore' });
332
458
  this.tmuxSessions.delete(name);
333
459
  return;
@@ -341,9 +467,15 @@ export class ClaudeLauncher {
341
467
  kill() {
342
468
  for (const [name] of this.tmuxSessions) {
343
469
  console.log(`[ClaudeLauncher] Killing tmux session "${name}"`);
470
+ // Clean up worktree
471
+ const wsSessionId = this.tmuxSessionWorkspaces.get(name);
472
+ if (wsSessionId && this.workspaceManager) {
473
+ this.workspaceManager.removeWorktree(wsSessionId);
474
+ }
344
475
  spawn('tmux', ['kill-session', '-t', name], { stdio: 'ignore' });
345
476
  }
346
477
  this.tmuxSessions.clear();
478
+ this.tmuxSessionWorkspaces.clear();
347
479
  if (this.tmuxMonitorTimer) {
348
480
  clearInterval(this.tmuxMonitorTimer);
349
481
  this.tmuxMonitorTimer = null;
@@ -353,6 +485,103 @@ export class ClaudeLauncher {
353
485
  this.childProcess = null;
354
486
  }
355
487
  }
488
+ // ---- AgentLauncher interface methods ----
489
+ /**
490
+ * Launch a new agent process (AgentLauncher interface).
491
+ */
492
+ async launch(config) {
493
+ if (config.workspace) {
494
+ this.setWorkspaceConfig(config.workspace);
495
+ }
496
+ if (config.triggerMessage) {
497
+ this.pendingTriggerMessage = config.triggerMessage;
498
+ }
499
+ if (config.sessionPrompt) {
500
+ this.config.claude_session_prompt = config.sessionPrompt;
501
+ }
502
+ const success = await this.launchInternal(config.reason, config.conversationId);
503
+ if (!success)
504
+ return null;
505
+ // Find the process we just created (most recent tmux session)
506
+ const entries = Array.from(this.tmuxSessions.entries());
507
+ const latest = entries[entries.length - 1];
508
+ if (!latest)
509
+ return null;
510
+ const [processId, conversationId] = latest;
511
+ const wsSessionId = this.tmuxSessionWorkspaces.get(processId);
512
+ return {
513
+ processId,
514
+ conversationId,
515
+ workingDirectory: this.config.claude_working_directory || process.cwd(),
516
+ branch: config.workspace?.branch,
517
+ workspaceSessionId: wsSessionId || undefined,
518
+ startedAt: new Date(),
519
+ };
520
+ }
521
+ /**
522
+ * Resume a previous session by ID.
523
+ */
524
+ async resume(resumeId, config) {
525
+ this.setLastResumeId(resumeId);
526
+ return this.launch({ ...config, reason: 'process-exit' });
527
+ }
528
+ /**
529
+ * Check if a specific process is still alive.
530
+ */
531
+ async isAlive(process) {
532
+ return new Promise(resolve => {
533
+ const check = spawn('tmux', ['has-session', '-t', process.processId], { stdio: 'ignore' });
534
+ check.on('exit', code => resolve(code === 0));
535
+ check.on('error', () => resolve(false));
536
+ });
537
+ }
538
+ /**
539
+ * Terminate a specific agent process.
540
+ */
541
+ terminate(process) {
542
+ this.killByConversation(process.conversationId);
543
+ }
544
+ /**
545
+ * Terminate all managed agent processes.
546
+ */
547
+ terminateAll() {
548
+ this.kill();
549
+ }
550
+ /**
551
+ * Get all currently running agent processes.
552
+ */
553
+ getProcesses() {
554
+ const processes = [];
555
+ for (const [processId, conversationId] of this.tmuxSessions) {
556
+ const wsSessionId = this.tmuxSessionWorkspaces.get(processId);
557
+ processes.push({
558
+ processId,
559
+ conversationId,
560
+ workingDirectory: this.config.claude_working_directory || process.cwd(),
561
+ workspaceSessionId: wsSessionId,
562
+ startedAt: new Date(), // Approximate — we don't track exact start time per tmux session
563
+ });
564
+ }
565
+ return processes;
566
+ }
567
+ /**
568
+ * Get the process handling a specific conversation.
569
+ */
570
+ getByConversation(conversationId) {
571
+ for (const [processId, convId] of this.tmuxSessions) {
572
+ if (convId === conversationId) {
573
+ const wsSessionId = this.tmuxSessionWorkspaces.get(processId);
574
+ return {
575
+ processId,
576
+ conversationId,
577
+ workingDirectory: this.config.claude_working_directory || process.cwd(),
578
+ workspaceSessionId: wsSessionId,
579
+ startedAt: new Date(),
580
+ };
581
+ }
582
+ }
583
+ return undefined;
584
+ }
356
585
  destroy() {
357
586
  this.stopIdleMonitor();
358
587
  this.kill();
@@ -1 +1 @@
1
- {"version":3,"file":"claude-launcher.js","sourceRoot":"","sources":["../../src/core/claude-launcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-launcher.js","sourceRoot":"","sources":["../../src/core/claude-launcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { AgentLauncher, LaunchConfig, AgentProcess } from './agent-launcher.js';
2
+ /**
3
+ * Gemini implementation of the AgentLauncher interface.
4
+ *
5
+ * Google Gemini supports MCP natively, so the SiloLink tool layer
6
+ * (remote_register, remote_poll, remote_notify, etc.) should work
7
+ * without modification. The launcher only needs to handle process
8
+ * lifecycle — spawning a Gemini CLI session and managing its state.
9
+ *
10
+ * TODO: Implementation notes:
11
+ * - Gemini CLI: `gemini` command (or Google AI Studio CLI)
12
+ * - MCP support: Native — configure via gemini's MCP config
13
+ * - Session resume: Check if Gemini CLI supports session persistence
14
+ * - Working directory: Same worktree integration as Claude
15
+ * - Prompt injection: Same tmux send-keys approach as Claude,
16
+ * or use Gemini's stdin pipe if supported
17
+ */
18
+ export declare class GeminiLauncher implements AgentLauncher {
19
+ launch(_config: LaunchConfig): Promise<AgentProcess | null>;
20
+ resume(_resumeId: string, _config: LaunchConfig): Promise<AgentProcess | null>;
21
+ isAlive(_process: AgentProcess): Promise<boolean>;
22
+ terminate(_process: AgentProcess): void;
23
+ terminateAll(): void;
24
+ getProcesses(): AgentProcess[];
25
+ getByConversation(_conversationId: number): AgentProcess | undefined;
26
+ nudge(): boolean;
27
+ isEnabled(): boolean;
28
+ isAutoRespawnEnabled(): boolean;
29
+ startIdleMonitor(): void;
30
+ destroy(): void;
31
+ }
32
+ //# sourceMappingURL=gemini-launcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-launcher.d.ts","sourceRoot":"","sources":["../../src/core/gemini-launcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAErF;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,cAAe,YAAW,aAAa;IAC5C,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAI3D,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAI9E,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvD,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIvC,YAAY,IAAI,IAAI;IAIpB,YAAY,IAAI,YAAY,EAAE;IAI9B,iBAAiB,CAAC,eAAe,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIpE,KAAK,IAAI,OAAO;IAIhB,SAAS,IAAI,OAAO;IAIpB,oBAAoB,IAAI,OAAO;IAI/B,gBAAgB,IAAI,IAAI;IAIxB,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Gemini implementation of the AgentLauncher interface.
3
+ *
4
+ * Google Gemini supports MCP natively, so the SiloLink tool layer
5
+ * (remote_register, remote_poll, remote_notify, etc.) should work
6
+ * without modification. The launcher only needs to handle process
7
+ * lifecycle — spawning a Gemini CLI session and managing its state.
8
+ *
9
+ * TODO: Implementation notes:
10
+ * - Gemini CLI: `gemini` command (or Google AI Studio CLI)
11
+ * - MCP support: Native — configure via gemini's MCP config
12
+ * - Session resume: Check if Gemini CLI supports session persistence
13
+ * - Working directory: Same worktree integration as Claude
14
+ * - Prompt injection: Same tmux send-keys approach as Claude,
15
+ * or use Gemini's stdin pipe if supported
16
+ */
17
+ export class GeminiLauncher {
18
+ async launch(_config) {
19
+ throw new Error('GeminiLauncher not yet implemented');
20
+ }
21
+ async resume(_resumeId, _config) {
22
+ throw new Error('GeminiLauncher not yet implemented');
23
+ }
24
+ async isAlive(_process) {
25
+ return false;
26
+ }
27
+ terminate(_process) {
28
+ // TODO: Kill Gemini process
29
+ }
30
+ terminateAll() {
31
+ // TODO: Kill all Gemini processes
32
+ }
33
+ getProcesses() {
34
+ return [];
35
+ }
36
+ getByConversation(_conversationId) {
37
+ return undefined;
38
+ }
39
+ nudge() {
40
+ return false;
41
+ }
42
+ isEnabled() {
43
+ return false; // Not yet implemented
44
+ }
45
+ isAutoRespawnEnabled() {
46
+ return false;
47
+ }
48
+ startIdleMonitor() {
49
+ // TODO: Implement idle monitoring for Gemini sessions
50
+ }
51
+ destroy() {
52
+ this.terminateAll();
53
+ }
54
+ }
55
+ //# sourceMappingURL=gemini-launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-launcher.js","sourceRoot":"","sources":["../../src/core/gemini-launcher.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,MAAM,CAAC,OAAqB;QAChC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB,EAAE,OAAqB;QACnD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAsB;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,CAAC,QAAsB;QAC9B,4BAA4B;IAC9B,CAAC;IAED,YAAY;QACV,kCAAkC;IACpC,CAAC;IAED,YAAY;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,iBAAiB,CAAC,eAAuB;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS;QACP,OAAO,KAAK,CAAC,CAAC,sBAAsB;IACtC,CAAC;IAED,oBAAoB;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB;QACd,sDAAsD;IACxD,CAAC;IAED,OAAO;QACL,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { SiloLinkConfig } from '../types/index.js';
2
+ import type { SessionManager } from './session-manager.js';
3
+ import type { MessageQueue } from './message-queue.js';
4
+ import type { DSiloedClient } from '../api/dsiloed-client.js';
5
+ import type { WorkspaceManager } from './workspace-manager.js';
6
+ import type { AgentLauncher } from './agent-launcher.js';
7
+ export type AgentProvider = 'claude' | 'gemini' | 'openai';
8
+ /**
9
+ * Creates the appropriate AgentLauncher based on provider configuration.
10
+ * Falls back to ClaudeLauncher if no provider is specified.
11
+ */
12
+ export declare function createLauncher(provider: AgentProvider | undefined, config: SiloLinkConfig, sessionManager: SessionManager, dsiloedClient?: DSiloedClient, messageQueue?: MessageQueue, workspaceManager?: WorkspaceManager): AgentLauncher;
13
+ //# sourceMappingURL=launcher-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher-factory.d.ts","sourceRoot":"","sources":["../../src/core/launcher-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,aAAa,GAAG,SAAS,EACnC,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,cAAc,EAC9B,aAAa,CAAC,EAAE,aAAa,EAC7B,YAAY,CAAC,EAAE,YAAY,EAC3B,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,aAAa,CAmBf"}
@@ -0,0 +1,24 @@
1
+ import { ClaudeLauncher } from './claude-launcher.js';
2
+ import { GeminiLauncher } from './gemini-launcher.js';
3
+ import { OpenAILauncher } from './openai-launcher.js';
4
+ /**
5
+ * Creates the appropriate AgentLauncher based on provider configuration.
6
+ * Falls back to ClaudeLauncher if no provider is specified.
7
+ */
8
+ export function createLauncher(provider, config, sessionManager, dsiloedClient, messageQueue, workspaceManager) {
9
+ const resolvedProvider = provider || config.agent_provider || 'claude';
10
+ switch (resolvedProvider) {
11
+ case 'claude':
12
+ return new ClaudeLauncher(config, sessionManager, dsiloedClient, messageQueue, workspaceManager);
13
+ case 'gemini':
14
+ console.log('[LauncherFactory] Gemini provider selected (stub — not yet implemented)');
15
+ return new GeminiLauncher();
16
+ case 'openai':
17
+ console.log('[LauncherFactory] OpenAI provider selected (stub — not yet implemented)');
18
+ return new OpenAILauncher();
19
+ default:
20
+ console.warn(`[LauncherFactory] Unknown provider "${resolvedProvider}", falling back to Claude`);
21
+ return new ClaudeLauncher(config, sessionManager, dsiloedClient, messageQueue, workspaceManager);
22
+ }
23
+ }
24
+ //# sourceMappingURL=launcher-factory.js.map