@dsiloed/silo-link 1.0.6 → 1.2.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.
- package/README.md +67 -2
- package/dist/cable/action-cable-client.d.ts +5 -0
- package/dist/cable/action-cable-client.d.ts.map +1 -1
- package/dist/cable/action-cable-client.js +14 -0
- package/dist/cable/action-cable-client.js.map +1 -1
- package/dist/cable/subscription-manager.d.ts.map +1 -1
- package/dist/cable/subscription-manager.js +23 -5
- package/dist/cable/subscription-manager.js.map +1 -1
- package/dist/cli/claude-md-block.d.ts +6 -0
- package/dist/cli/claude-md-block.d.ts.map +1 -0
- package/dist/cli/claude-md-block.js +84 -0
- package/dist/cli/claude-md-block.js.map +1 -0
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +80 -1
- package/dist/cli/commands.js.map +1 -1
- package/dist/core/agent-launcher.d.ts +101 -0
- package/dist/core/agent-launcher.d.ts.map +1 -0
- package/dist/core/agent-launcher.js +2 -0
- package/dist/core/agent-launcher.js.map +1 -0
- package/dist/core/bridge.d.ts +1 -0
- package/dist/core/bridge.d.ts.map +1 -1
- package/dist/core/bridge.js +105 -2
- package/dist/core/bridge.js.map +1 -1
- package/dist/core/claude-launcher.d.ts +50 -5
- package/dist/core/claude-launcher.d.ts.map +1 -1
- package/dist/core/claude-launcher.js +238 -13
- package/dist/core/claude-launcher.js.map +1 -1
- package/dist/core/gemini-launcher.d.ts +32 -0
- package/dist/core/gemini-launcher.d.ts.map +1 -0
- package/dist/core/gemini-launcher.js +55 -0
- package/dist/core/gemini-launcher.js.map +1 -0
- package/dist/core/launcher-factory.d.ts +13 -0
- package/dist/core/launcher-factory.d.ts.map +1 -0
- package/dist/core/launcher-factory.js +24 -0
- package/dist/core/launcher-factory.js.map +1 -0
- package/dist/core/openai-launcher.d.ts +36 -0
- package/dist/core/openai-launcher.d.ts.map +1 -0
- package/dist/core/openai-launcher.js +59 -0
- package/dist/core/openai-launcher.js.map +1 -0
- package/dist/core/workspace-manager.d.ts +65 -0
- package/dist/core/workspace-manager.d.ts.map +1 -0
- package/dist/core/workspace-manager.js +299 -0
- package/dist/core/workspace-manager.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/register-tools.d.ts +2 -0
- package/dist/mcp/tools/register-tools.d.ts.map +1 -1
- package/dist/mcp/tools/register-tools.js +253 -3
- package/dist/mcp/tools/register-tools.js.map +1 -1
- package/dist/types/index.d.ts +28 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
265
|
+
return this.launchInternal('inbound-message', conversationId);
|
|
218
266
|
}
|
|
219
267
|
/**
|
|
220
268
|
* Check for idle sessions — nudge if process alive, respawn if dead.
|
|
@@ -228,6 +276,12 @@ export class ClaudeLauncher {
|
|
|
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
|
|
@@ -259,13 +313,38 @@ export class ClaudeLauncher {
|
|
|
259
313
|
const hungSessions = sessions.filter(s => this.messageQueue.hasUndeliveredMessages(s.sessionId));
|
|
260
314
|
for (const s of hungSessions) {
|
|
261
315
|
this.killByConversation(s.conversationId);
|
|
316
|
+
if (this.messageQueue) {
|
|
317
|
+
this.messageQueue.clearSession(s.sessionId);
|
|
318
|
+
}
|
|
262
319
|
this.sessionManager.unregister(s.sessionId);
|
|
263
|
-
//
|
|
264
|
-
await
|
|
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);
|
|
265
323
|
}
|
|
266
324
|
this.nudgeCount = 0;
|
|
267
325
|
return;
|
|
268
326
|
}
|
|
327
|
+
// Kill zombie sessions — only 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
|
+
}
|
|
269
348
|
// Only nudge if there are messages waiting — no point nudging an idle session
|
|
270
349
|
// that's already polling with nothing to do
|
|
271
350
|
if (hasUndelivered) {
|
|
@@ -281,7 +360,7 @@ export class ClaudeLauncher {
|
|
|
281
360
|
}
|
|
282
361
|
console.log(`[ClaudeLauncher] Sessions orphaned (process dead), respawning...`);
|
|
283
362
|
this.nudgeCount = 0;
|
|
284
|
-
await this.
|
|
363
|
+
await this.launchInternal('process-exit', lastConvId);
|
|
285
364
|
}
|
|
286
365
|
}
|
|
287
366
|
/**
|
|
@@ -299,6 +378,13 @@ export class ClaudeLauncher {
|
|
|
299
378
|
check.on('exit', (code) => {
|
|
300
379
|
if (code !== 0) {
|
|
301
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
|
+
}
|
|
302
388
|
this.tmuxSessions.delete(name);
|
|
303
389
|
if (this.tmuxSessions.size === 0 && this.tmuxMonitorTimer) {
|
|
304
390
|
clearInterval(this.tmuxMonitorTimer);
|
|
@@ -315,16 +401,46 @@ export class ClaudeLauncher {
|
|
|
315
401
|
if (this.tmuxSessions.size === 0)
|
|
316
402
|
return false;
|
|
317
403
|
const now = Date.now();
|
|
318
|
-
|
|
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)
|
|
319
408
|
return false;
|
|
320
409
|
this.lastNudgeAt = now;
|
|
321
410
|
const message = 'Continue polling SiloLink for messages. Do not stop the poll loop.';
|
|
322
411
|
for (const [name] of this.tmuxSessions) {
|
|
323
412
|
spawn('tmux', ['send-keys', '-t', name, message, 'Enter'], { stdio: 'ignore' });
|
|
324
413
|
}
|
|
325
|
-
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)`);
|
|
326
415
|
return true;
|
|
327
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
|
+
}
|
|
328
444
|
/**
|
|
329
445
|
* Kill the Claude session for a specific conversation.
|
|
330
446
|
*/
|
|
@@ -332,6 +448,12 @@ export class ClaudeLauncher {
|
|
|
332
448
|
for (const [name, convId] of this.tmuxSessions) {
|
|
333
449
|
if (convId === conversationId) {
|
|
334
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
|
+
}
|
|
335
457
|
spawn('tmux', ['kill-session', '-t', name], { stdio: 'ignore' });
|
|
336
458
|
this.tmuxSessions.delete(name);
|
|
337
459
|
return;
|
|
@@ -345,9 +467,15 @@ export class ClaudeLauncher {
|
|
|
345
467
|
kill() {
|
|
346
468
|
for (const [name] of this.tmuxSessions) {
|
|
347
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
|
+
}
|
|
348
475
|
spawn('tmux', ['kill-session', '-t', name], { stdio: 'ignore' });
|
|
349
476
|
}
|
|
350
477
|
this.tmuxSessions.clear();
|
|
478
|
+
this.tmuxSessionWorkspaces.clear();
|
|
351
479
|
if (this.tmuxMonitorTimer) {
|
|
352
480
|
clearInterval(this.tmuxMonitorTimer);
|
|
353
481
|
this.tmuxMonitorTimer = null;
|
|
@@ -357,6 +485,103 @@ export class ClaudeLauncher {
|
|
|
357
485
|
this.childProcess = null;
|
|
358
486
|
}
|
|
359
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
|
+
}
|
|
360
585
|
destroy() {
|
|
361
586
|
this.stopIdleMonitor();
|
|
362
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launcher-factory.js","sourceRoot":"","sources":["../../src/core/launcher-factory.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAmC,EACnC,MAAsB,EACtB,cAA8B,EAC9B,aAA6B,EAC7B,YAA2B,EAC3B,gBAAmC;IAEnC,MAAM,gBAAgB,GAAG,QAAQ,IAAI,MAAM,CAAC,cAAc,IAAI,QAAQ,CAAC;IAEvE,QAAQ,gBAAgB,EAAE,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAEnG,KAAK,QAAQ;YACX,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;YACvF,OAAO,IAAI,cAAc,EAAE,CAAC;QAE9B,KAAK,QAAQ;YACX,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;YACvF,OAAO,IAAI,cAAc,EAAE,CAAC;QAE9B;YACE,OAAO,CAAC,IAAI,CAAC,uCAAuC,gBAAgB,2BAA2B,CAAC,CAAC;YACjG,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;IACrG,CAAC;AACH,CAAC"}
|