@dsiloed/silo-link 1.3.0 → 1.4.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/dist/api/dsiloed-client.d.ts +30 -0
- package/dist/api/dsiloed-client.d.ts.map +1 -1
- package/dist/api/dsiloed-client.js +66 -0
- package/dist/api/dsiloed-client.js.map +1 -1
- package/dist/cable/subscription-manager.d.ts +7 -3
- package/dist/cable/subscription-manager.d.ts.map +1 -1
- package/dist/cable/subscription-manager.js +36 -11
- package/dist/cable/subscription-manager.js.map +1 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +112 -24
- package/dist/cli/commands.js.map +1 -1
- package/dist/config/config-manager.d.ts +4 -4
- package/dist/config/config-manager.d.ts.map +1 -1
- package/dist/config/config-manager.js +28 -14
- package/dist/config/config-manager.js.map +1 -1
- package/dist/core/agent-launcher.d.ts +30 -1
- package/dist/core/agent-launcher.d.ts.map +1 -1
- package/dist/core/base-tmux-launcher.d.ts +102 -0
- package/dist/core/base-tmux-launcher.d.ts.map +1 -0
- package/dist/core/base-tmux-launcher.js +491 -0
- package/dist/core/base-tmux-launcher.js.map +1 -0
- package/dist/core/bridge.d.ts +14 -2
- package/dist/core/bridge.d.ts.map +1 -1
- package/dist/core/bridge.js +129 -35
- package/dist/core/bridge.js.map +1 -1
- package/dist/core/claude-launcher.d.ts +24 -100
- package/dist/core/claude-launcher.d.ts.map +1 -1
- package/dist/core/claude-launcher.js +130 -489
- package/dist/core/claude-launcher.js.map +1 -1
- package/dist/core/gemini-launcher.d.ts +37 -27
- package/dist/core/gemini-launcher.d.ts.map +1 -1
- package/dist/core/gemini-launcher.js +126 -38
- package/dist/core/gemini-launcher.js.map +1 -1
- package/dist/core/launcher-factory.d.ts.map +1 -1
- package/dist/core/launcher-factory.js +1 -2
- package/dist/core/launcher-factory.js.map +1 -1
- package/dist/core/openai-launcher.d.ts +14 -17
- package/dist/core/openai-launcher.d.ts.map +1 -1
- package/dist/core/openai-launcher.js +23 -44
- package/dist/core/openai-launcher.js.map +1 -1
- package/dist/core/session-manager.d.ts +3 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +11 -0
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/workspace-manager.d.ts.map +1 -1
- package/dist/core/workspace-manager.js +53 -16
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +19 -2
- 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 +174 -16
- package/dist/mcp/tools/register-tools.js.map +1 -1
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, copyFileSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { homedir } from 'node:os';
|
|
5
5
|
const STATE_DIR = join(homedir(), '.silolink');
|
|
@@ -27,22 +27,38 @@ export class WorkspaceManager {
|
|
|
27
27
|
const worktreePath = join(STATE_DIR, 'worktrees', repoName, branch);
|
|
28
28
|
// Ensure the parent directory exists
|
|
29
29
|
mkdirSync(join(STATE_DIR, 'worktrees', repoName), { recursive: true });
|
|
30
|
-
//
|
|
30
|
+
// Validate baseBranch exists; fall back to current HEAD if not
|
|
31
|
+
let effectiveBaseBranch = baseBranch;
|
|
31
32
|
try {
|
|
32
|
-
|
|
33
|
+
execFileSync('git', ['-C', absRepoPath, 'rev-parse', '--verify', baseBranch], { stdio: 'pipe' });
|
|
33
34
|
}
|
|
34
35
|
catch {
|
|
35
|
-
//
|
|
36
|
-
|
|
36
|
+
// baseBranch doesn't exist locally — try fetching it
|
|
37
|
+
try {
|
|
38
|
+
execFileSync('git', ['-C', absRepoPath, 'fetch', 'origin', baseBranch], { stdio: 'pipe' });
|
|
39
|
+
effectiveBaseBranch = `origin/${baseBranch}`;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// baseBranch doesn't exist at all — fall back to current branch
|
|
43
|
+
effectiveBaseBranch = execFileSync('git', ['-C', absRepoPath, 'rev-parse', '--abbrev-ref', 'HEAD'], { stdio: 'pipe' }).toString().trim();
|
|
44
|
+
console.warn(`[WorkspaceManager] Base branch "${baseBranch}" not found, using "${effectiveBaseBranch}"`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Fetch latest from remote (non-fatal)
|
|
48
|
+
try {
|
|
49
|
+
execFileSync('git', ['-C', absRepoPath, 'fetch', 'origin', effectiveBaseBranch.replace('origin/', '')], { stdio: 'pipe' });
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Non-fatal: might be offline or branch might be local-only
|
|
37
53
|
}
|
|
38
54
|
// Create the worktree with a new branch from baseBranch
|
|
39
55
|
try {
|
|
40
|
-
|
|
56
|
+
execFileSync('git', ['-C', absRepoPath, 'worktree', 'add', '-b', branch, worktreePath, effectiveBaseBranch], { stdio: 'pipe' });
|
|
41
57
|
}
|
|
42
58
|
catch (err) {
|
|
43
59
|
// Branch might already exist — try checking it out instead
|
|
44
60
|
try {
|
|
45
|
-
|
|
61
|
+
execFileSync('git', ['-C', absRepoPath, 'worktree', 'add', worktreePath, branch], { stdio: 'pipe' });
|
|
46
62
|
}
|
|
47
63
|
catch (innerErr) {
|
|
48
64
|
throw new Error(`Failed to create worktree: ${innerErr}`);
|
|
@@ -59,6 +75,18 @@ export class WorkspaceManager {
|
|
|
59
75
|
};
|
|
60
76
|
this.workspaces.set(sessionId, workspace);
|
|
61
77
|
this.saveState();
|
|
78
|
+
// Copy .mcp.json into the worktree so Claude Code sessions have MCP tools
|
|
79
|
+
const mcpSource = join(absRepoPath, '.mcp.json');
|
|
80
|
+
const mcpTarget = join(worktreePath, '.mcp.json');
|
|
81
|
+
try {
|
|
82
|
+
if (existsSync(mcpSource) && !existsSync(mcpTarget)) {
|
|
83
|
+
copyFileSync(mcpSource, mcpTarget);
|
|
84
|
+
console.log(`[WorkspaceManager] Copied .mcp.json into worktree: ${mcpTarget}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
console.warn(`[WorkspaceManager] Failed to copy .mcp.json to worktree: ${err}`);
|
|
89
|
+
}
|
|
62
90
|
console.log(`[WorkspaceManager] Created worktree: ${worktreePath} (branch: ${branch}, base: ${baseBranch})`);
|
|
63
91
|
return workspace;
|
|
64
92
|
}
|
|
@@ -71,7 +99,7 @@ export class WorkspaceManager {
|
|
|
71
99
|
return;
|
|
72
100
|
// Check for uncommitted changes
|
|
73
101
|
try {
|
|
74
|
-
const status =
|
|
102
|
+
const status = execFileSync('git', ['-C', workspace.worktreePath, 'status', '--porcelain'], { encoding: 'utf-8' }).trim();
|
|
75
103
|
if (status) {
|
|
76
104
|
console.warn(`[WorkspaceManager] Worktree ${workspace.worktreePath} has uncommitted changes — skipping removal`);
|
|
77
105
|
console.warn(` Uncommitted files:\n ${status.split('\n').join('\n ')}`);
|
|
@@ -86,7 +114,7 @@ export class WorkspaceManager {
|
|
|
86
114
|
}
|
|
87
115
|
// Remove the git worktree
|
|
88
116
|
try {
|
|
89
|
-
|
|
117
|
+
execFileSync('git', ['-C', workspace.repoPath, 'worktree', 'remove', workspace.worktreePath, '--force'], { stdio: 'pipe' });
|
|
90
118
|
console.log(`[WorkspaceManager] Removed worktree: ${workspace.worktreePath}`);
|
|
91
119
|
}
|
|
92
120
|
catch (err) {
|
|
@@ -168,7 +196,7 @@ export class WorkspaceManager {
|
|
|
168
196
|
};
|
|
169
197
|
// Ensure all changes in worktree are committed
|
|
170
198
|
try {
|
|
171
|
-
const status =
|
|
199
|
+
const status = execFileSync('git', ['-C', workspace.worktreePath, 'status', '--porcelain'], { encoding: 'utf-8' }).trim();
|
|
172
200
|
if (status) {
|
|
173
201
|
result.conflicts = ['UNCOMMITTED_CHANGES'];
|
|
174
202
|
return result;
|
|
@@ -181,19 +209,28 @@ export class WorkspaceManager {
|
|
|
181
209
|
// Switch to the main repo and merge
|
|
182
210
|
try {
|
|
183
211
|
// Checkout baseBranch in main repo
|
|
184
|
-
|
|
212
|
+
execFileSync('git', ['-C', workspace.repoPath, 'checkout', workspace.baseBranch], { stdio: 'pipe' });
|
|
185
213
|
// Merge the worktree branch
|
|
186
214
|
try {
|
|
187
|
-
|
|
215
|
+
execFileSync('git', ['-C', workspace.repoPath, 'merge', workspace.branch, '--no-ff', '-m', `Merge ${workspace.branch} into ${workspace.baseBranch}`], { stdio: 'pipe' });
|
|
188
216
|
result.success = true;
|
|
217
|
+
// Capture merge details
|
|
218
|
+
try {
|
|
219
|
+
result.mergeCommit = execFileSync('git', ['-C', workspace.repoPath, 'rev-parse', 'HEAD'], { encoding: 'utf-8' }).trim();
|
|
220
|
+
const diffStat = execFileSync('git', ['-C', workspace.repoPath, 'diff', '--stat', 'HEAD~1', '--numstat'], { encoding: 'utf-8' }).trim();
|
|
221
|
+
result.filesChanged = diffStat ? diffStat.split('\n').length : 0;
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// Non-fatal — merge succeeded even if stats fail
|
|
225
|
+
}
|
|
189
226
|
}
|
|
190
227
|
catch {
|
|
191
228
|
// Merge conflict — get the list of conflicting files
|
|
192
|
-
const conflictOutput =
|
|
229
|
+
const conflictOutput = execFileSync('git', ['-C', workspace.repoPath, 'diff', '--name-only', '--diff-filter=U'], { encoding: 'utf-8' }).trim();
|
|
193
230
|
result.conflicts = conflictOutput ? conflictOutput.split('\n') : ['UNKNOWN_MERGE_CONFLICT'];
|
|
194
231
|
// Abort the merge so we don't leave repo in a dirty state
|
|
195
232
|
try {
|
|
196
|
-
|
|
233
|
+
execFileSync('git', ['-C', workspace.repoPath, 'merge', '--abort'], { stdio: 'pipe' });
|
|
197
234
|
}
|
|
198
235
|
catch { /* already clean */ }
|
|
199
236
|
return result;
|
|
@@ -202,7 +239,7 @@ export class WorkspaceManager {
|
|
|
202
239
|
this.removeWorktree(sessionId);
|
|
203
240
|
if (deleteBranch) {
|
|
204
241
|
try {
|
|
205
|
-
|
|
242
|
+
execFileSync('git', ['-C', workspace.repoPath, 'branch', '-d', workspace.branch], { stdio: 'pipe' });
|
|
206
243
|
}
|
|
207
244
|
catch {
|
|
208
245
|
console.warn(`[WorkspaceManager] Could not delete branch ${workspace.branch} (may have been already removed with worktree)`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-manager.js","sourceRoot":"","sources":["../../src/core/workspace-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workspace-manager.js","sourceRoot":"","sources":["../../src/core/workspace-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type { SubscriptionManager } from '../cable/subscription-manager.js';
|
|
|
5
5
|
import type { ActionCableClient } from '../cable/action-cable-client.js';
|
|
6
6
|
import type { SiloLinkConfig } from '../types/index.js';
|
|
7
7
|
import type { WorkspaceManager } from '../core/workspace-manager.js';
|
|
8
|
+
import type { AgentLauncher } from '../core/agent-launcher.js';
|
|
8
9
|
interface McpServerDeps {
|
|
9
10
|
config: SiloLinkConfig;
|
|
10
11
|
sessionManager: SessionManager;
|
|
@@ -13,6 +14,8 @@ interface McpServerDeps {
|
|
|
13
14
|
subscriptionManager: SubscriptionManager;
|
|
14
15
|
cableClient: ActionCableClient;
|
|
15
16
|
workspaceManager?: WorkspaceManager;
|
|
17
|
+
launcher?: AgentLauncher;
|
|
18
|
+
startedAt?: () => Date | null;
|
|
16
19
|
}
|
|
17
20
|
export declare class SiloLinkMcpServer {
|
|
18
21
|
private app;
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,UAAU,aAAa;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAC/B;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,UAAU,CAAyD;IAC3E,OAAO,CAAC,IAAI,CAAgB;gBAEhB,IAAI,EAAE,aAAa;IAO/B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,WAAW;IAqFnB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAe5B"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -73,11 +73,28 @@ export class SiloLinkMcpServer {
|
|
|
73
73
|
}
|
|
74
74
|
await this.transports.get(sessionId).handleRequest(req, res);
|
|
75
75
|
});
|
|
76
|
-
|
|
76
|
+
/**
|
|
77
|
+
* GET /health — Server health check endpoint.
|
|
78
|
+
*
|
|
79
|
+
* Returns operational status, uptime, session count, and ActionCable state.
|
|
80
|
+
* Requires no authentication — suitable for load balancers and monitoring.
|
|
81
|
+
*
|
|
82
|
+
* @returns {object} Health status
|
|
83
|
+
* @returns {string} .status - Always "ok" when the server is running
|
|
84
|
+
* @returns {number|null} .uptime_seconds - Seconds since bridge startup, null if not yet started
|
|
85
|
+
* @returns {number} .active_sessions - Count of currently registered Claude Code sessions
|
|
86
|
+
* @returns {string} .cable - ActionCable WebSocket state:
|
|
87
|
+
* "connected" | "disconnected" | "connecting" | "reconnecting"
|
|
88
|
+
*/
|
|
77
89
|
this.app.get('/health', (_req, res) => {
|
|
90
|
+
const startedAt = this.deps.startedAt?.();
|
|
91
|
+
const uptimeSeconds = startedAt
|
|
92
|
+
? Math.floor((Date.now() - startedAt.getTime()) / 1000)
|
|
93
|
+
: null;
|
|
78
94
|
res.json({
|
|
79
95
|
status: 'ok',
|
|
80
|
-
|
|
96
|
+
uptime_seconds: uptimeSeconds,
|
|
97
|
+
active_sessions: this.deps.sessionManager.getAll().length,
|
|
81
98
|
cable: this.deps.cableClient.getState(),
|
|
82
99
|
});
|
|
83
100
|
});
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import type { SubscriptionManager } from '../../cable/subscription-manager.js';
|
|
|
7
7
|
import type { ActionCableClient } from '../../cable/action-cable-client.js';
|
|
8
8
|
import type { SiloLinkConfig } from '../../types/index.js';
|
|
9
9
|
import type { WorkspaceManager } from '../../core/workspace-manager.js';
|
|
10
|
+
import type { AgentLauncher } from '../../core/agent-launcher.js';
|
|
10
11
|
interface ToolDeps {
|
|
11
12
|
config: SiloLinkConfig;
|
|
12
13
|
sessionManager: SessionManager;
|
|
@@ -15,6 +16,7 @@ interface ToolDeps {
|
|
|
15
16
|
subscriptionManager: SubscriptionManager;
|
|
16
17
|
cableClient: ActionCableClient;
|
|
17
18
|
workspaceManager?: WorkspaceManager;
|
|
19
|
+
launcher?: AgentLauncher;
|
|
18
20
|
}
|
|
19
21
|
export declare function registerTools(server: McpServer, transport: StreamableHTTPServerTransport, deps: ToolDeps): void;
|
|
20
22
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/register-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACxG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAW,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"register-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/register-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACxG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAW,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,UAAU,QAAQ;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAgCD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,6BAA6B,EACxC,IAAI,EAAE,QAAQ,GACb,IAAI,CAg/BN"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
|
-
import {
|
|
3
|
+
import { execFileSync } from 'node:child_process';
|
|
4
4
|
function getSessionForTransport(transport, sessionManager) {
|
|
5
5
|
const mcpSessionId = transport.sessionId;
|
|
6
6
|
if (!mcpSessionId)
|
|
@@ -11,6 +11,16 @@ function getSessionForTransport(transport, sessionManager) {
|
|
|
11
11
|
* Update agent session status only if it has actually changed.
|
|
12
12
|
* Avoids redundant API calls (e.g. poll loop firing every 3s).
|
|
13
13
|
*/
|
|
14
|
+
/**
|
|
15
|
+
* Get the display prefix for messages based on the session's coding agent.
|
|
16
|
+
*/
|
|
17
|
+
function getAgentPrefix(session) {
|
|
18
|
+
switch (session.agentProvider) {
|
|
19
|
+
case 'gemini': return '**[Gemini]**';
|
|
20
|
+
case 'openai': return '**[OpenAI]**';
|
|
21
|
+
default: return '**[Claude Code]**';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
14
24
|
function setAgentStatus(session, status, dsiloedClient) {
|
|
15
25
|
if (!session.agentSessionId || session.lastAgentStatus === status)
|
|
16
26
|
return;
|
|
@@ -23,7 +33,8 @@ export function registerTools(server, transport, deps) {
|
|
|
23
33
|
server.tool('remote_register', 'Register session. Creates or attaches to a conversation.', {
|
|
24
34
|
session_name: z.string().optional().describe('Human-readable name for this session'),
|
|
25
35
|
conversation_id: z.number().optional().describe('Existing conversation ID to attach to (skips conversation creation)'),
|
|
26
|
-
|
|
36
|
+
llm_agent_id: z.number().optional().describe('LlmAgent ID if this session belongs to an SDLC agent'),
|
|
37
|
+
}, async ({ session_name, conversation_id, llm_agent_id }) => {
|
|
27
38
|
const mcpSessionId = transport.sessionId;
|
|
28
39
|
if (!mcpSessionId) {
|
|
29
40
|
return { content: [{ type: 'text', text: JSON.stringify({ success: false, reason: 'No MCP session' }) }] };
|
|
@@ -98,16 +109,31 @@ export function registerTools(server, transport, deps) {
|
|
|
98
109
|
mcpSessionId,
|
|
99
110
|
createdAt: new Date(),
|
|
100
111
|
lastActivity: new Date(),
|
|
112
|
+
llmAgentId: llm_agent_id ?? conversation.accessor_record_id,
|
|
101
113
|
};
|
|
102
114
|
sessionManager.register(session);
|
|
103
115
|
subscriptionManager.subscribe(conversation.id);
|
|
104
116
|
// Drain any messages that arrived before this session registered
|
|
105
117
|
subscriptionManager.drainPendingMessages(conversation.id, sessionId);
|
|
106
|
-
//
|
|
107
|
-
|
|
118
|
+
// Link to active LlmAgentRun if this session belongs to an agent
|
|
119
|
+
let llmAgentRunId;
|
|
120
|
+
if (session.llmAgentId) {
|
|
121
|
+
const activeRun = await dsiloedClient.getActiveAgentRun(session.llmAgentId);
|
|
122
|
+
if (activeRun) {
|
|
123
|
+
llmAgentRunId = activeRun.id;
|
|
124
|
+
console.log(`[SiloLink] Linked to LlmAgentRun ${llmAgentRunId} for agent ${session.llmAgentId}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Find existing agent session for this conversation (created by SilolinkLaunchService)
|
|
128
|
+
// or create a new one for Mission Control dashboard
|
|
129
|
+
const existingSessions = await dsiloedClient.getAgentSessionsForConversation(conversation.id);
|
|
130
|
+
const existingActive = existingSessions.find(s => !s.ended_at);
|
|
131
|
+
const agentSession = existingActive || await dsiloedClient.createAgentSession({
|
|
108
132
|
session_type: 'silolink',
|
|
109
133
|
session_name: name,
|
|
110
134
|
llm_conversation_id: conversation.id,
|
|
135
|
+
llm_agent_id: session.llmAgentId,
|
|
136
|
+
metadata: llmAgentRunId ? { llm_agent_run_id: llmAgentRunId } : undefined,
|
|
111
137
|
});
|
|
112
138
|
if (agentSession) {
|
|
113
139
|
session.agentSessionId = agentSession.id;
|
|
@@ -233,7 +259,8 @@ export function registerTools(server, transport, deps) {
|
|
|
233
259
|
return { content: [{ type: 'text', text: JSON.stringify({ success: false, reason: 'WebSocket disconnected' }) }] };
|
|
234
260
|
}
|
|
235
261
|
try {
|
|
236
|
-
const
|
|
262
|
+
const prefix = getAgentPrefix(session);
|
|
263
|
+
const prefixed = message.startsWith(prefix) ? message : `${prefix} ${message}`;
|
|
237
264
|
const result = await dsiloedClient.postMessage(session.conversationId, prefixed);
|
|
238
265
|
if (result.id) {
|
|
239
266
|
subscriptionManager.trackOutboundMessageId(result.id);
|
|
@@ -250,6 +277,35 @@ export function registerTools(server, transport, deps) {
|
|
|
250
277
|
return { content: [{ type: 'text', text: JSON.stringify({ success: false, reason: msg }) }] };
|
|
251
278
|
}
|
|
252
279
|
});
|
|
280
|
+
// remote_post
|
|
281
|
+
server.tool('remote_post', 'Post a message to ANY conversation by ID. Use this to report findings, status updates, or results to a conversation other than your own SiloLink session. The message is posted via the DSiloed API that SiloLink is connected to.', {
|
|
282
|
+
conversation_id: z.number().describe('ID of the conversation to post to'),
|
|
283
|
+
message: z.string().describe('Message content to post'),
|
|
284
|
+
}, async ({ conversation_id, message }) => {
|
|
285
|
+
const session = getSessionForTransport(transport, sessionManager);
|
|
286
|
+
if (!session) {
|
|
287
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, reason: 'Not registered. Call remote_register first.' }) }] };
|
|
288
|
+
}
|
|
289
|
+
sessionManager.touchActivity(session.sessionId);
|
|
290
|
+
// Cross-posting observability: log when an agent posts to a conversation it doesn't own.
|
|
291
|
+
// Server-side auth (Service::Security.apply_scope on the chat endpoint) enforces that the
|
|
292
|
+
// JWT user has access to the target conversation — SiloLink doesn't need to duplicate that.
|
|
293
|
+
// This log is for debugging pipeline communication patterns.
|
|
294
|
+
if (conversation_id !== session.conversationId) {
|
|
295
|
+
const knownConversations = new Set(sessionManager.getAll().map(s => s.conversationId));
|
|
296
|
+
if (!knownConversations.has(conversation_id)) {
|
|
297
|
+
console.warn(`[SiloLink] remote_post: session ${session.sessionId} posting to conversation ${conversation_id} outside known sessions (own: ${session.conversationId})`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
try {
|
|
301
|
+
const result = await dsiloedClient.postMessage(conversation_id, message);
|
|
302
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: true, conversation_id, message_id: result.id }) }] };
|
|
303
|
+
}
|
|
304
|
+
catch (err) {
|
|
305
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
306
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, conversation_id, reason: msg }) }] };
|
|
307
|
+
}
|
|
308
|
+
});
|
|
253
309
|
// remote_ask
|
|
254
310
|
server.tool('remote_ask', 'Post a question and block until a reply arrives (or timeout).', {
|
|
255
311
|
question: z.string().describe('Question to ask'),
|
|
@@ -262,7 +318,8 @@ export function registerTools(server, transport, deps) {
|
|
|
262
318
|
sessionManager.touchActivity(session.sessionId);
|
|
263
319
|
const timeoutMs = (timeout ?? 300) * 1000;
|
|
264
320
|
try {
|
|
265
|
-
const
|
|
321
|
+
const prefix = getAgentPrefix(session);
|
|
322
|
+
const prefixed = question.startsWith(prefix) ? question : `${prefix} ${question}`;
|
|
266
323
|
const result = await dsiloedClient.postMessage(session.conversationId, prefixed);
|
|
267
324
|
if (result.id) {
|
|
268
325
|
subscriptionManager.trackOutboundMessageId(result.id);
|
|
@@ -427,32 +484,73 @@ export function registerTools(server, transport, deps) {
|
|
|
427
484
|
}],
|
|
428
485
|
};
|
|
429
486
|
});
|
|
430
|
-
// remote_peek — see what Claude is doing in tmux
|
|
431
|
-
server.tool('remote_peek', 'Capture last N lines of terminal output from Claude tmux sessions.', {
|
|
487
|
+
// remote_peek — see what Claude is doing in tmux (enhanced for Dev Manager observation)
|
|
488
|
+
server.tool('remote_peek', 'Capture last N lines of terminal output from Claude tmux sessions. Supports filtering by conversation or project.', {
|
|
432
489
|
lines: z.number().optional().describe('Number of lines to capture (default: 50, max: 200)'),
|
|
433
|
-
session_name: z.string().optional().describe('Specific tmux session name (default: auto-detect silolink
|
|
434
|
-
|
|
490
|
+
session_name: z.string().optional().describe('Specific tmux session name (default: auto-detect silolink-* sessions)'),
|
|
491
|
+
target: z.union([z.literal('all'), z.number()]).optional().describe('"all" to peek all sessions, or a specific conversation_id'),
|
|
492
|
+
}, async ({ lines, session_name, target }) => {
|
|
435
493
|
const lineCount = Math.min(lines ?? 50, 200);
|
|
436
494
|
try {
|
|
437
|
-
//
|
|
495
|
+
// Resolve which tmux sessions to peek
|
|
438
496
|
let sessions;
|
|
439
497
|
if (session_name) {
|
|
440
498
|
sessions = [session_name];
|
|
441
499
|
}
|
|
500
|
+
else if (typeof target === 'number') {
|
|
501
|
+
// Specific conversation_id — find its tmux session via AgentLauncher
|
|
502
|
+
const proc = deps.launcher?.getByConversation(target);
|
|
503
|
+
sessions = proc ? [proc.processId] : [];
|
|
504
|
+
}
|
|
442
505
|
else {
|
|
443
|
-
const listOutput =
|
|
444
|
-
sessions = listOutput.split('\n').filter(s => s.startsWith('silolink-claude-'));
|
|
506
|
+
const listOutput = execFileSync('tmux', ['list-sessions', '-F', '#{session_name}'], { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
507
|
+
sessions = listOutput.split('\n').filter(s => s.startsWith('silolink-claude-') || s.startsWith('silolink-gemini-'));
|
|
445
508
|
}
|
|
446
509
|
if (sessions.length === 0) {
|
|
447
510
|
return { content: [{ type: 'text', text: JSON.stringify({ success: true, sessions: [], message: 'No active Claude tmux sessions found' }) }] };
|
|
448
511
|
}
|
|
512
|
+
// Build a lookup of conversation_id → agent info from registered sessions
|
|
513
|
+
const allSessions = sessionManager.getAll();
|
|
514
|
+
const sessionLookup = new Map();
|
|
515
|
+
// Map tmux process IDs to session info via AgentLauncher
|
|
516
|
+
if (deps.launcher) {
|
|
517
|
+
for (const proc of deps.launcher.getProcesses()) {
|
|
518
|
+
const regSession = allSessions.find(s => s.conversationId === proc.conversationId);
|
|
519
|
+
sessionLookup.set(proc.processId, {
|
|
520
|
+
conversationId: proc.conversationId,
|
|
521
|
+
agentName: regSession?.sessionName,
|
|
522
|
+
llmAgentId: regSession?.llmAgentId,
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
}
|
|
449
526
|
const results = sessions.map(name => {
|
|
527
|
+
const info = sessionLookup.get(name);
|
|
528
|
+
// Validate session name to prevent injection (only alphanumeric, dash, underscore, dot)
|
|
529
|
+
if (!/^[a-zA-Z0-9_.-]+$/.test(name)) {
|
|
530
|
+
return {
|
|
531
|
+
session: name,
|
|
532
|
+
conversation_id: info?.conversationId,
|
|
533
|
+
agent_name: info?.agentName,
|
|
534
|
+
output: '(invalid session name)',
|
|
535
|
+
};
|
|
536
|
+
}
|
|
450
537
|
try {
|
|
451
|
-
const output =
|
|
452
|
-
return {
|
|
538
|
+
const output = execFileSync('tmux', ['capture-pane', '-t', name, '-p', '-S', `-${lineCount}`], { encoding: 'utf-8' });
|
|
539
|
+
return {
|
|
540
|
+
session: name,
|
|
541
|
+
conversation_id: info?.conversationId,
|
|
542
|
+
agent_name: info?.agentName,
|
|
543
|
+
llm_agent_id: info?.llmAgentId,
|
|
544
|
+
output: output.trimEnd(),
|
|
545
|
+
};
|
|
453
546
|
}
|
|
454
547
|
catch {
|
|
455
|
-
return {
|
|
548
|
+
return {
|
|
549
|
+
session: name,
|
|
550
|
+
conversation_id: info?.conversationId,
|
|
551
|
+
agent_name: info?.agentName,
|
|
552
|
+
output: '(failed to capture — session may have ended)',
|
|
553
|
+
};
|
|
456
554
|
}
|
|
457
555
|
});
|
|
458
556
|
return {
|
|
@@ -466,6 +564,28 @@ export function registerTools(server, transport, deps) {
|
|
|
466
564
|
return { content: [{ type: 'text', text: JSON.stringify({ success: true, sessions: [], message: 'No tmux server running or no sessions found' }) }] };
|
|
467
565
|
}
|
|
468
566
|
});
|
|
567
|
+
// remote_interrupt — human/UI use only, not for agent-to-agent communication
|
|
568
|
+
if (deps.launcher) {
|
|
569
|
+
const launcher = deps.launcher;
|
|
570
|
+
server.tool('remote_interrupt', 'Interrupt a Claude session and redirect it. Human/UI use only — agents communicate via @mention.', {
|
|
571
|
+
conversation_id: z.number().describe('Conversation ID of the session to interrupt'),
|
|
572
|
+
message: z.string().optional().describe('Optional redirect instruction'),
|
|
573
|
+
}, async ({ conversation_id, message }) => {
|
|
574
|
+
try {
|
|
575
|
+
const interrupted = await launcher.interrupt(conversation_id, message);
|
|
576
|
+
return {
|
|
577
|
+
content: [{
|
|
578
|
+
type: 'text',
|
|
579
|
+
text: JSON.stringify({ success: interrupted, conversation_id }),
|
|
580
|
+
}],
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
catch (err) {
|
|
584
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
585
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, reason: msg }) }] };
|
|
586
|
+
}
|
|
587
|
+
});
|
|
588
|
+
}
|
|
469
589
|
// remote_unregister
|
|
470
590
|
server.tool('remote_unregister', 'Unregister session and clean up.', {}, async () => {
|
|
471
591
|
const session = getSessionForTransport(transport, sessionManager);
|
|
@@ -658,6 +778,8 @@ export function registerTools(server, transport, deps) {
|
|
|
658
778
|
merged_branch: result.mergedBranch,
|
|
659
779
|
base_branch: result.baseBranch,
|
|
660
780
|
merge_conflicts: result.conflicts,
|
|
781
|
+
files_changed: result.filesChanged,
|
|
782
|
+
merge_commit: result.mergeCommit,
|
|
661
783
|
}),
|
|
662
784
|
}],
|
|
663
785
|
};
|
|
@@ -689,5 +811,41 @@ export function registerTools(server, transport, deps) {
|
|
|
689
811
|
}],
|
|
690
812
|
};
|
|
691
813
|
});
|
|
814
|
+
// remote_orchestration_stage_complete
|
|
815
|
+
server.tool('remote_orchestration_stage_complete', 'Complete a orchestration stage execution. Call this when you have finished the work assigned to your orchestration stage. Reports results back to the workflow orchestration engine.', {
|
|
816
|
+
orchestration_stage_execution_id: z.number().describe('The ID of the WorkflowStageExecution to complete'),
|
|
817
|
+
success: z.boolean().describe('Whether the stage completed successfully'),
|
|
818
|
+
output: z.string().describe('Summary of what was accomplished'),
|
|
819
|
+
artifacts: z.array(z.object({
|
|
820
|
+
key: z.string().describe('Artifact key (e.g., "spec", "design", "test_results")'),
|
|
821
|
+
artifact_type: z.string().describe('Type: llm_file, project, task_set, json_data'),
|
|
822
|
+
llm_file_id: z.number().optional().describe('LlmFile ID if artifact is a document'),
|
|
823
|
+
project_id: z.number().optional().describe('Project ID if artifact is a project'),
|
|
824
|
+
description: z.string().optional().describe('Human-readable description'),
|
|
825
|
+
data: z.record(z.string(), z.unknown()).optional().describe('Inline data for json_data artifacts'),
|
|
826
|
+
})).optional().default([]).describe('Artifacts produced by this stage'),
|
|
827
|
+
}, async (params) => {
|
|
828
|
+
const result = await dsiloedClient.completeOrchestrationStage(params.orchestration_stage_execution_id, params.success, params.output, params.artifacts);
|
|
829
|
+
return {
|
|
830
|
+
content: [{
|
|
831
|
+
type: 'text',
|
|
832
|
+
text: JSON.stringify(result),
|
|
833
|
+
}],
|
|
834
|
+
};
|
|
835
|
+
});
|
|
836
|
+
// remote_orchestration_review_complete
|
|
837
|
+
server.tool('remote_orchestration_review_complete', 'Signal that you have finished reviewing a completed child task. Call this after reviewing the work and performing any integration actions (e.g., merging, compiling, combining).', {
|
|
838
|
+
orchestration_stage_execution_id: z.number().describe('The child stage execution ID that was reviewed'),
|
|
839
|
+
success: z.boolean().describe('Whether the review and merge succeeded'),
|
|
840
|
+
output: z.string().describe('Summary of review findings and merge result'),
|
|
841
|
+
}, async (params) => {
|
|
842
|
+
const result = await dsiloedClient.reviewCompleteOrchestrationStage(params.orchestration_stage_execution_id, params.success, params.output);
|
|
843
|
+
return {
|
|
844
|
+
content: [{
|
|
845
|
+
type: 'text',
|
|
846
|
+
text: JSON.stringify(result),
|
|
847
|
+
}],
|
|
848
|
+
};
|
|
849
|
+
});
|
|
692
850
|
}
|
|
693
851
|
//# sourceMappingURL=register-tools.js.map
|