@openweave/weave-link 0.2.0 → 0.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/auth.d.ts +59 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +130 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli.d.ts +22 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +247 -0
- package/dist/cli.js.map +1 -0
- package/dist/http-transport.d.ts +65 -0
- package/dist/http-transport.d.ts.map +1 -0
- package/dist/http-transport.js +265 -0
- package/dist/http-transport.js.map +1 -0
- package/dist/index.d.ts +14 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -1
- package/dist/index.js.map +1 -1
- package/dist/installer/claude-desktop.d.ts +49 -0
- package/dist/installer/claude-desktop.d.ts.map +1 -0
- package/dist/installer/claude-desktop.js +169 -0
- package/dist/installer/claude-desktop.js.map +1 -0
- package/dist/installer/config-generator.d.ts +47 -0
- package/dist/installer/config-generator.d.ts.map +1 -0
- package/dist/installer/config-generator.js +90 -0
- package/dist/installer/config-generator.js.map +1 -0
- package/dist/installer/cursor.d.ts +52 -0
- package/dist/installer/cursor.d.ts.map +1 -0
- package/dist/installer/cursor.js +165 -0
- package/dist/installer/cursor.js.map +1 -0
- package/dist/installer/index.d.ts +11 -0
- package/dist/installer/index.d.ts.map +1 -0
- package/dist/installer/index.js +14 -0
- package/dist/installer/index.js.map +1 -0
- package/dist/mcp-server.d.ts +75 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +364 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/tools.d.ts +42 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +230 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +86 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +2 -3
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* HTTP Transport — M9: Remote WeaveLink
|
|
4
|
+
*
|
|
5
|
+
* Provides an HTTP server with JSON-RPC-style endpoints and
|
|
6
|
+
* optional Server-Sent Events (SSE) for push notifications.
|
|
7
|
+
*
|
|
8
|
+
* Endpoints:
|
|
9
|
+
* GET / → server info (no auth)
|
|
10
|
+
* GET /health → liveness check (no auth)
|
|
11
|
+
* GET /tools → list available tools (auth optional)
|
|
12
|
+
* POST /tools/call → invoke a tool (auth required)
|
|
13
|
+
* GET /events → SSE stream (auth required)
|
|
14
|
+
*
|
|
15
|
+
* Zero runtime dependencies — uses Node built-ins only.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.HttpTransport = void 0;
|
|
19
|
+
const node_http_1 = require("node:http");
|
|
20
|
+
const mcp_server_1 = require("./mcp-server");
|
|
21
|
+
const auth_1 = require("./auth");
|
|
22
|
+
/** Maximum number of concurrent SSE clients (VULN-011) */
|
|
23
|
+
const MAX_SSE_CLIENTS = 100;
|
|
24
|
+
/** Maximum request body size in bytes — 1 MB (VULN-010) */
|
|
25
|
+
const MAX_BODY_BYTES = 1_048_576;
|
|
26
|
+
// ──────────────────────────────────────────────────────────
|
|
27
|
+
// WeaveLink HTTP Transport
|
|
28
|
+
// ──────────────────────────────────────────────────────────
|
|
29
|
+
class HttpTransport {
|
|
30
|
+
server = null;
|
|
31
|
+
weaveLinkServer;
|
|
32
|
+
auth;
|
|
33
|
+
config;
|
|
34
|
+
sseClients = new Map();
|
|
35
|
+
startTime = null;
|
|
36
|
+
constructor(weaveLinkServer, auth, config) {
|
|
37
|
+
this.weaveLinkServer = weaveLinkServer || new mcp_server_1.WeaveLinkServer();
|
|
38
|
+
// VULN-009: auth is enabled by default — callers must explicitly disable it for local stdio use
|
|
39
|
+
this.auth = auth || new auth_1.AuthManager({ enabled: true });
|
|
40
|
+
this.config = {
|
|
41
|
+
port: config?.port ?? 3001,
|
|
42
|
+
host: config?.host ?? '127.0.0.1',
|
|
43
|
+
// VULN-008: CORS off by default — callers must opt-in with a specific origin
|
|
44
|
+
cors: config?.cors ?? false,
|
|
45
|
+
verbose: config?.verbose ?? false,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// ── Lifecycle ─────────────────────────────────────────────
|
|
49
|
+
/**
|
|
50
|
+
* Start listening on the configured port.
|
|
51
|
+
*/
|
|
52
|
+
async start() {
|
|
53
|
+
await this.weaveLinkServer.initialize();
|
|
54
|
+
// VULN-009: refuse to start if auth is on but no keys are configured
|
|
55
|
+
if (this.auth.isEnabled() && this.auth.getKeyCount() === 0) {
|
|
56
|
+
throw new Error('[WeaveLink] Cannot start HTTP server: auth is enabled but no API keys are configured. ' +
|
|
57
|
+
'Provide at least one key via AuthManager or set WEAVE_API_KEY.');
|
|
58
|
+
}
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
this.server = (0, node_http_1.createServer)((req, res) => this.dispatch(req, res));
|
|
61
|
+
this.server.on('error', (err) => reject(err));
|
|
62
|
+
this.server.listen(this.config.port, this.config.host, () => {
|
|
63
|
+
this.startTime = new Date();
|
|
64
|
+
if (this.config.verbose) {
|
|
65
|
+
console.log(`[WeaveLink] HTTP transport listening on http://${this.config.host}:${this.config.port}`);
|
|
66
|
+
}
|
|
67
|
+
resolve();
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Stop the server and disconnect all SSE clients.
|
|
73
|
+
*/
|
|
74
|
+
async stop() {
|
|
75
|
+
// Close all SSE connections
|
|
76
|
+
for (const client of this.sseClients.values()) {
|
|
77
|
+
client.res.end();
|
|
78
|
+
}
|
|
79
|
+
this.sseClients.clear();
|
|
80
|
+
return new Promise((resolve, reject) => {
|
|
81
|
+
if (!this.server)
|
|
82
|
+
return resolve();
|
|
83
|
+
this.server.close((err) => {
|
|
84
|
+
if (err)
|
|
85
|
+
reject(err);
|
|
86
|
+
else
|
|
87
|
+
resolve();
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
isRunning() {
|
|
92
|
+
return this.server?.listening ?? false;
|
|
93
|
+
}
|
|
94
|
+
getPort() {
|
|
95
|
+
return this.config.port;
|
|
96
|
+
}
|
|
97
|
+
getConnectedClients() {
|
|
98
|
+
return this.sseClients.size;
|
|
99
|
+
}
|
|
100
|
+
// ── Request dispatcher ────────────────────────────────────
|
|
101
|
+
dispatch(req, res) {
|
|
102
|
+
if (this.config.cors) {
|
|
103
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
104
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
105
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-API-Key');
|
|
106
|
+
}
|
|
107
|
+
// Preflight
|
|
108
|
+
if (req.method === 'OPTIONS') {
|
|
109
|
+
res.writeHead(204);
|
|
110
|
+
res.end();
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const url = new URL(req.url ?? '/', `http://${this.config.host}`);
|
|
114
|
+
const path = url.pathname;
|
|
115
|
+
// Public endpoints (no auth)
|
|
116
|
+
if (path === '/' && req.method === 'GET')
|
|
117
|
+
return this.handleInfo(req, res);
|
|
118
|
+
if (path === '/health' && req.method === 'GET')
|
|
119
|
+
return this.handleHealth(req, res);
|
|
120
|
+
// Protected endpoints
|
|
121
|
+
if (path === '/tools' && req.method === 'GET') {
|
|
122
|
+
return this.auth.middleware(req, res, () => this.handleListTools(req, res));
|
|
123
|
+
}
|
|
124
|
+
if (path === '/tools/call' && req.method === 'POST') {
|
|
125
|
+
return this.auth.middleware(req, res, () => this.handleCallTool(req, res));
|
|
126
|
+
}
|
|
127
|
+
if (path === '/events' && req.method === 'GET') {
|
|
128
|
+
return this.auth.middleware(req, res, () => this.handleSSE(req, res));
|
|
129
|
+
}
|
|
130
|
+
// 404
|
|
131
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
132
|
+
res.end(JSON.stringify({ error: `Not found: ${req.method} ${path}` }));
|
|
133
|
+
}
|
|
134
|
+
// ── Route handlers ────────────────────────────────────────
|
|
135
|
+
handleInfo(_req, res) {
|
|
136
|
+
const info = this.weaveLinkServer.getServerInfo();
|
|
137
|
+
this.json(res, 200, {
|
|
138
|
+
...info,
|
|
139
|
+
transport: 'http',
|
|
140
|
+
uptime_ms: this.startTime ? Date.now() - this.startTime.getTime() : 0,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
handleHealth(_req, res) {
|
|
144
|
+
this.json(res, 200, {
|
|
145
|
+
status: 'ok',
|
|
146
|
+
timestamp: new Date().toISOString(),
|
|
147
|
+
sse_clients: this.sseClients.size,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
handleListTools(_req, res) {
|
|
151
|
+
const tools = this.weaveLinkServer.listTools();
|
|
152
|
+
this.json(res, 200, { tools, count: tools.length });
|
|
153
|
+
}
|
|
154
|
+
handleCallTool(req, res) {
|
|
155
|
+
this.readBody(req)
|
|
156
|
+
.then(async (body) => {
|
|
157
|
+
let parsed;
|
|
158
|
+
try {
|
|
159
|
+
parsed = JSON.parse(body);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
this.json(res, 400, { error: 'Invalid JSON body' });
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const { tool, args = {} } = parsed;
|
|
166
|
+
if (!tool || typeof tool !== 'string') {
|
|
167
|
+
this.json(res, 400, { error: 'Missing required field: tool' });
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const result = await this.weaveLinkServer.callTool(tool, args);
|
|
171
|
+
// Notify SSE clients of the tool invocation
|
|
172
|
+
this.broadcast({
|
|
173
|
+
event: 'tool_called',
|
|
174
|
+
data: { tool, timestamp: new Date().toISOString() },
|
|
175
|
+
});
|
|
176
|
+
this.json(res, 200, result);
|
|
177
|
+
})
|
|
178
|
+
.catch((err) => {
|
|
179
|
+
const e = err;
|
|
180
|
+
if (e.statusCode === 413) {
|
|
181
|
+
this.json(res, 413, { error: 'Payload too large — request body must not exceed 1 MB' });
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
this.json(res, 500, { error: `Internal error: ${e.message}` });
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
handleSSE(req, res) {
|
|
189
|
+
// VULN-011: cap concurrent SSE connections to prevent memory exhaustion
|
|
190
|
+
if (this.sseClients.size >= MAX_SSE_CLIENTS) {
|
|
191
|
+
res.writeHead(503, { 'Content-Type': 'application/json' });
|
|
192
|
+
res.end(JSON.stringify({ error: 'SSE connection limit reached — try again later' }));
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const clientId = `client-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
196
|
+
res.writeHead(200, {
|
|
197
|
+
'Content-Type': 'text/event-stream',
|
|
198
|
+
'Cache-Control': 'no-cache',
|
|
199
|
+
Connection: 'keep-alive',
|
|
200
|
+
'X-Accel-Buffering': 'no', // Disable nginx buffering
|
|
201
|
+
});
|
|
202
|
+
// Send a welcome event
|
|
203
|
+
this.sendSSE(res, 'connected', { clientId, serverTime: new Date().toISOString() });
|
|
204
|
+
this.sseClients.set(clientId, { id: clientId, res });
|
|
205
|
+
// Remove client on disconnect
|
|
206
|
+
req.on('close', () => {
|
|
207
|
+
this.sseClients.delete(clientId);
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
// ── SSE helpers ───────────────────────────────────────────
|
|
211
|
+
sendSSE(res, event, data) {
|
|
212
|
+
const payload = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
|
|
213
|
+
res.write(payload);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Broadcast a message to all connected SSE clients.
|
|
217
|
+
*/
|
|
218
|
+
broadcast(message) {
|
|
219
|
+
if (this.sseClients.size === 0)
|
|
220
|
+
return;
|
|
221
|
+
const payload = `event: ${message.event}\ndata: ${JSON.stringify(message.data)}\n\n`;
|
|
222
|
+
const toRemove = [];
|
|
223
|
+
for (const [id, client] of this.sseClients) {
|
|
224
|
+
try {
|
|
225
|
+
client.res.write(payload);
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
// Client disconnected but didn't fire 'close' — clean up
|
|
229
|
+
toRemove.push(id);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
for (const id of toRemove) {
|
|
233
|
+
this.sseClients.delete(id);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// ── Utility ───────────────────────────────────────────────
|
|
237
|
+
// VULN-010: enforce a 1 MB body limit to prevent memory exhaustion DoS
|
|
238
|
+
readBody(req) {
|
|
239
|
+
return new Promise((resolve, reject) => {
|
|
240
|
+
const chunks = [];
|
|
241
|
+
let totalBytes = 0;
|
|
242
|
+
req.on('data', (chunk) => {
|
|
243
|
+
totalBytes += chunk.byteLength;
|
|
244
|
+
if (totalBytes > MAX_BODY_BYTES) {
|
|
245
|
+
req.destroy();
|
|
246
|
+
const err = Object.assign(new Error('Payload too large'), { statusCode: 413 });
|
|
247
|
+
return reject(err);
|
|
248
|
+
}
|
|
249
|
+
chunks.push(chunk);
|
|
250
|
+
});
|
|
251
|
+
req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
|
|
252
|
+
req.on('error', reject);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
json(res, status, data) {
|
|
256
|
+
const body = JSON.stringify(data);
|
|
257
|
+
res.writeHead(status, {
|
|
258
|
+
'Content-Type': 'application/json',
|
|
259
|
+
'Content-Length': Buffer.byteLength(body),
|
|
260
|
+
});
|
|
261
|
+
res.end(body);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
exports.HttpTransport = HttpTransport;
|
|
265
|
+
//# sourceMappingURL=http-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../src/http-transport.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,18 @@
|
|
|
2
2
|
* WeaveLink - MCP Server
|
|
3
3
|
* Model Context Protocol server for integrating WeaveGraph with AI clients
|
|
4
4
|
*/
|
|
5
|
-
export
|
|
5
|
+
export * from './types';
|
|
6
|
+
export { ALL_TOOLS, getTool, TOOL_SAVE_NODE, TOOL_QUERY_GRAPH, TOOL_SUPPRESS_ERROR, TOOL_UPDATE_ROADMAP, TOOL_GET_SESSION_CONTEXT, TOOL_GET_NEXT_ACTION, TOOL_LIST_ORPHANS, } from './tools';
|
|
7
|
+
export { WeaveLinkServer } from './mcp-server';
|
|
8
|
+
export { AuthManager, generateApiKey } from './auth';
|
|
9
|
+
export type { AuthConfig, AuthResult } from './auth';
|
|
10
|
+
export { HttpTransport } from './http-transport';
|
|
11
|
+
export type { HttpTransportConfig } from './http-transport';
|
|
12
|
+
export { ConfigGenerator } from './installer/config-generator';
|
|
13
|
+
export type { WeaveLinkConfig, MCPClientEntry, MCPClientsConfig } from './installer/config-generator';
|
|
14
|
+
export { ClaudeDesktopInstaller } from './installer/claude-desktop';
|
|
15
|
+
export type { InstallResult } from './installer/claude-desktop';
|
|
16
|
+
export { CursorInstaller } from './installer/cursor';
|
|
17
|
+
export type { CursorInstallResult, CursorScope } from './installer/cursor';
|
|
18
|
+
export declare const version = "0.2.0";
|
|
6
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,SAAS,EACT,OAAO,EACP,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACtG,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE3E,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* WeaveLink - MCP Server
|
|
3
4
|
* Model Context Protocol server for integrating WeaveGraph with AI clients
|
|
4
5
|
*/
|
|
5
|
-
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
18
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.version = exports.CursorInstaller = exports.ClaudeDesktopInstaller = exports.ConfigGenerator = exports.HttpTransport = exports.generateApiKey = exports.AuthManager = exports.WeaveLinkServer = exports.TOOL_LIST_ORPHANS = exports.TOOL_GET_NEXT_ACTION = exports.TOOL_GET_SESSION_CONTEXT = exports.TOOL_UPDATE_ROADMAP = exports.TOOL_SUPPRESS_ERROR = exports.TOOL_QUERY_GRAPH = exports.TOOL_SAVE_NODE = exports.getTool = exports.ALL_TOOLS = void 0;
|
|
22
|
+
// Core MCP server
|
|
23
|
+
__exportStar(require("./types"), exports);
|
|
24
|
+
var tools_1 = require("./tools");
|
|
25
|
+
Object.defineProperty(exports, "ALL_TOOLS", { enumerable: true, get: function () { return tools_1.ALL_TOOLS; } });
|
|
26
|
+
Object.defineProperty(exports, "getTool", { enumerable: true, get: function () { return tools_1.getTool; } });
|
|
27
|
+
Object.defineProperty(exports, "TOOL_SAVE_NODE", { enumerable: true, get: function () { return tools_1.TOOL_SAVE_NODE; } });
|
|
28
|
+
Object.defineProperty(exports, "TOOL_QUERY_GRAPH", { enumerable: true, get: function () { return tools_1.TOOL_QUERY_GRAPH; } });
|
|
29
|
+
Object.defineProperty(exports, "TOOL_SUPPRESS_ERROR", { enumerable: true, get: function () { return tools_1.TOOL_SUPPRESS_ERROR; } });
|
|
30
|
+
Object.defineProperty(exports, "TOOL_UPDATE_ROADMAP", { enumerable: true, get: function () { return tools_1.TOOL_UPDATE_ROADMAP; } });
|
|
31
|
+
Object.defineProperty(exports, "TOOL_GET_SESSION_CONTEXT", { enumerable: true, get: function () { return tools_1.TOOL_GET_SESSION_CONTEXT; } });
|
|
32
|
+
Object.defineProperty(exports, "TOOL_GET_NEXT_ACTION", { enumerable: true, get: function () { return tools_1.TOOL_GET_NEXT_ACTION; } });
|
|
33
|
+
Object.defineProperty(exports, "TOOL_LIST_ORPHANS", { enumerable: true, get: function () { return tools_1.TOOL_LIST_ORPHANS; } });
|
|
34
|
+
var mcp_server_1 = require("./mcp-server");
|
|
35
|
+
Object.defineProperty(exports, "WeaveLinkServer", { enumerable: true, get: function () { return mcp_server_1.WeaveLinkServer; } });
|
|
36
|
+
// M9 · Remote WeaveLink
|
|
37
|
+
var auth_1 = require("./auth");
|
|
38
|
+
Object.defineProperty(exports, "AuthManager", { enumerable: true, get: function () { return auth_1.AuthManager; } });
|
|
39
|
+
Object.defineProperty(exports, "generateApiKey", { enumerable: true, get: function () { return auth_1.generateApiKey; } });
|
|
40
|
+
var http_transport_1 = require("./http-transport");
|
|
41
|
+
Object.defineProperty(exports, "HttpTransport", { enumerable: true, get: function () { return http_transport_1.HttpTransport; } });
|
|
42
|
+
// M8 · Client Integrations
|
|
43
|
+
var config_generator_1 = require("./installer/config-generator");
|
|
44
|
+
Object.defineProperty(exports, "ConfigGenerator", { enumerable: true, get: function () { return config_generator_1.ConfigGenerator; } });
|
|
45
|
+
var claude_desktop_1 = require("./installer/claude-desktop");
|
|
46
|
+
Object.defineProperty(exports, "ClaudeDesktopInstaller", { enumerable: true, get: function () { return claude_desktop_1.ClaudeDesktopInstaller; } });
|
|
47
|
+
var cursor_1 = require("./installer/cursor");
|
|
48
|
+
Object.defineProperty(exports, "CursorInstaller", { enumerable: true, get: function () { return cursor_1.CursorInstaller; } });
|
|
49
|
+
exports.version = '0.2.0';
|
|
6
50
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,kBAAkB;AAClB,0CAAwB;AACxB,iCAUiB;AATf,kGAAA,SAAS,OAAA;AACT,gGAAA,OAAO,OAAA;AACP,uGAAA,cAAc,OAAA;AACd,yGAAA,gBAAgB,OAAA;AAChB,4GAAA,mBAAmB,OAAA;AACnB,4GAAA,mBAAmB,OAAA;AACnB,iHAAA,wBAAwB,OAAA;AACxB,6GAAA,oBAAoB,OAAA;AACpB,0GAAA,iBAAiB,OAAA;AAEnB,2CAA+C;AAAtC,6GAAA,eAAe,OAAA;AAExB,wBAAwB;AACxB,+BAAqD;AAA5C,mGAAA,WAAW,OAAA;AAAE,sGAAA,cAAc,OAAA;AAEpC,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAGtB,2BAA2B;AAC3B,iEAA+D;AAAtD,mHAAA,eAAe,OAAA;AAExB,6DAAoE;AAA3D,wHAAA,sBAAsB,OAAA;AAE/B,6CAAqD;AAA5C,yGAAA,eAAe,OAAA;AAGX,QAAA,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Desktop Installer — M8: Client Integrations
|
|
3
|
+
*
|
|
4
|
+
* Locates the Claude Desktop MCP config file on the current OS,
|
|
5
|
+
* reads it, injects the WeaveLink `mcpServers` entry, and writes
|
|
6
|
+
* the result back to disk.
|
|
7
|
+
*
|
|
8
|
+
* Claude Desktop config paths:
|
|
9
|
+
* Windows : %APPDATA%\Claude\claude_desktop_config.json
|
|
10
|
+
* macOS : ~/Library/Application Support/Claude/claude_desktop_config.json
|
|
11
|
+
* Linux : ~/.config/Claude/claude_desktop_config.json
|
|
12
|
+
*/
|
|
13
|
+
import { MCPClientsConfig, WeaveLinkConfig } from './config-generator';
|
|
14
|
+
export interface InstallResult {
|
|
15
|
+
success: boolean;
|
|
16
|
+
configPath: string;
|
|
17
|
+
message: string;
|
|
18
|
+
/** The final JSON written to disk (for inspection/logging) */
|
|
19
|
+
configWritten?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class ClaudeDesktopInstaller {
|
|
22
|
+
/**
|
|
23
|
+
* Resolve Claude Desktop's config file path for the current OS.
|
|
24
|
+
*/
|
|
25
|
+
static getConfigPath(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Check whether the Claude Desktop config directory exists.
|
|
28
|
+
* Returns `true` if Claude Desktop appears to be installed.
|
|
29
|
+
*/
|
|
30
|
+
static isInstalled(configPath?: string): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Read the current Claude Desktop config.
|
|
33
|
+
* Returns an empty `{ mcpServers: {} }` structure if the file doesn't exist yet.
|
|
34
|
+
*/
|
|
35
|
+
static readConfig(configPath?: string): Promise<MCPClientsConfig>;
|
|
36
|
+
/**
|
|
37
|
+
* Install (or update) the WeaveLink entry in Claude Desktop's config.
|
|
38
|
+
*
|
|
39
|
+
* @param config Optional WeaveLink connection config.
|
|
40
|
+
* @param mode 'stdio' (default) or 'http'.
|
|
41
|
+
* @param configPath Override the config file path (useful for testing).
|
|
42
|
+
*/
|
|
43
|
+
static install(config?: WeaveLinkConfig, mode?: 'stdio' | 'http', configPath?: string): Promise<InstallResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Remove the WeaveLink entry from Claude Desktop's config.
|
|
46
|
+
*/
|
|
47
|
+
static uninstall(configPath?: string): Promise<InstallResult>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=claude-desktop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-desktop.d.ts","sourceRoot":"","sources":["../../src/installer/claude-desktop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAmB,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAExF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,qBAAa,sBAAsB;IACjC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,MAAM;IAgB9B;;;OAGG;WACU,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/D;;;OAGG;WACU,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAUvE;;;;;;OAMG;WACU,OAAO,CAClB,MAAM,CAAC,EAAE,eAAe,EACxB,IAAI,GAAE,OAAO,GAAG,MAAgB,EAChC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC;IAgCzB;;OAEG;WACU,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAkCpE"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Claude Desktop Installer — M8: Client Integrations
|
|
4
|
+
*
|
|
5
|
+
* Locates the Claude Desktop MCP config file on the current OS,
|
|
6
|
+
* reads it, injects the WeaveLink `mcpServers` entry, and writes
|
|
7
|
+
* the result back to disk.
|
|
8
|
+
*
|
|
9
|
+
* Claude Desktop config paths:
|
|
10
|
+
* Windows : %APPDATA%\Claude\claude_desktop_config.json
|
|
11
|
+
* macOS : ~/Library/Application Support/Claude/claude_desktop_config.json
|
|
12
|
+
* Linux : ~/.config/Claude/claude_desktop_config.json
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.ClaudeDesktopInstaller = void 0;
|
|
49
|
+
const node_fs_1 = require("node:fs");
|
|
50
|
+
const path = __importStar(require("node:path"));
|
|
51
|
+
const os = __importStar(require("node:os"));
|
|
52
|
+
const config_generator_1 = require("./config-generator");
|
|
53
|
+
// ──────────────────────────────────────────────────────────
|
|
54
|
+
// ClaudeDesktopInstaller
|
|
55
|
+
// ──────────────────────────────────────────────────────────
|
|
56
|
+
class ClaudeDesktopInstaller {
|
|
57
|
+
/**
|
|
58
|
+
* Resolve Claude Desktop's config file path for the current OS.
|
|
59
|
+
*/
|
|
60
|
+
static getConfigPath() {
|
|
61
|
+
const platform = process.platform;
|
|
62
|
+
if (platform === 'win32') {
|
|
63
|
+
const appData = process.env['APPDATA'] ?? path.join(os.homedir(), 'AppData', 'Roaming');
|
|
64
|
+
return path.join(appData, 'Claude', 'claude_desktop_config.json');
|
|
65
|
+
}
|
|
66
|
+
if (platform === 'darwin') {
|
|
67
|
+
return path.join(os.homedir(), 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
|
|
68
|
+
}
|
|
69
|
+
// Linux / other
|
|
70
|
+
return path.join(os.homedir(), '.config', 'Claude', 'claude_desktop_config.json');
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check whether the Claude Desktop config directory exists.
|
|
74
|
+
* Returns `true` if Claude Desktop appears to be installed.
|
|
75
|
+
*/
|
|
76
|
+
static async isInstalled(configPath) {
|
|
77
|
+
const cfgPath = configPath ?? ClaudeDesktopInstaller.getConfigPath();
|
|
78
|
+
try {
|
|
79
|
+
await node_fs_1.promises.access(path.dirname(cfgPath));
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Read the current Claude Desktop config.
|
|
88
|
+
* Returns an empty `{ mcpServers: {} }` structure if the file doesn't exist yet.
|
|
89
|
+
*/
|
|
90
|
+
static async readConfig(configPath) {
|
|
91
|
+
const cfgPath = configPath ?? ClaudeDesktopInstaller.getConfigPath();
|
|
92
|
+
try {
|
|
93
|
+
const raw = await node_fs_1.promises.readFile(cfgPath, 'utf-8');
|
|
94
|
+
return JSON.parse(raw);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return { mcpServers: {} };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Install (or update) the WeaveLink entry in Claude Desktop's config.
|
|
102
|
+
*
|
|
103
|
+
* @param config Optional WeaveLink connection config.
|
|
104
|
+
* @param mode 'stdio' (default) or 'http'.
|
|
105
|
+
* @param configPath Override the config file path (useful for testing).
|
|
106
|
+
*/
|
|
107
|
+
static async install(config, mode = 'stdio', configPath) {
|
|
108
|
+
const cfgPath = configPath ?? ClaudeDesktopInstaller.getConfigPath();
|
|
109
|
+
try {
|
|
110
|
+
// Ensure the directory exists
|
|
111
|
+
await node_fs_1.promises.mkdir(path.dirname(cfgPath), { recursive: true });
|
|
112
|
+
// Read existing config
|
|
113
|
+
const existing = await ClaudeDesktopInstaller.readConfig(cfgPath);
|
|
114
|
+
// Merge WeaveLink entry
|
|
115
|
+
const updated = config_generator_1.ConfigGenerator.mergeIntoExisting(existing, 'openweave', mode, config);
|
|
116
|
+
const json = config_generator_1.ConfigGenerator.toJSON(updated);
|
|
117
|
+
// Write back
|
|
118
|
+
await node_fs_1.promises.writeFile(cfgPath, json, 'utf-8');
|
|
119
|
+
return {
|
|
120
|
+
success: true,
|
|
121
|
+
configPath: cfgPath,
|
|
122
|
+
message: `WeaveLink MCP entry added to Claude Desktop config.\nRestart Claude Desktop to apply changes.`,
|
|
123
|
+
configWritten: json,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
return {
|
|
128
|
+
success: false,
|
|
129
|
+
configPath: cfgPath,
|
|
130
|
+
message: `Failed to install: ${err.message}`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Remove the WeaveLink entry from Claude Desktop's config.
|
|
136
|
+
*/
|
|
137
|
+
static async uninstall(configPath) {
|
|
138
|
+
const cfgPath = configPath ?? ClaudeDesktopInstaller.getConfigPath();
|
|
139
|
+
try {
|
|
140
|
+
const existing = await ClaudeDesktopInstaller.readConfig(cfgPath);
|
|
141
|
+
if (!existing.mcpServers?.['openweave']) {
|
|
142
|
+
return {
|
|
143
|
+
success: true,
|
|
144
|
+
configPath: cfgPath,
|
|
145
|
+
message: 'WeaveLink entry not found — nothing to remove.',
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
const { ['openweave']: _removed, ...rest } = existing.mcpServers;
|
|
149
|
+
const updated = { ...existing, mcpServers: rest };
|
|
150
|
+
const json = config_generator_1.ConfigGenerator.toJSON(updated);
|
|
151
|
+
await node_fs_1.promises.writeFile(cfgPath, json, 'utf-8');
|
|
152
|
+
return {
|
|
153
|
+
success: true,
|
|
154
|
+
configPath: cfgPath,
|
|
155
|
+
message: 'WeaveLink MCP entry removed from Claude Desktop config.',
|
|
156
|
+
configWritten: json,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
return {
|
|
161
|
+
success: false,
|
|
162
|
+
configPath: cfgPath,
|
|
163
|
+
message: `Failed to uninstall: ${err.message}`,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.ClaudeDesktopInstaller = ClaudeDesktopInstaller;
|
|
169
|
+
//# sourceMappingURL=claude-desktop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-desktop.js","sourceRoot":"","sources":["../../src/installer/claude-desktop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Generator — M8: Client Integrations
|
|
3
|
+
*
|
|
4
|
+
* Generates MCP server configuration objects compatible with
|
|
5
|
+
* Claude Desktop, Cursor, VS Code, and other MCP clients.
|
|
6
|
+
*/
|
|
7
|
+
export interface WeaveLinkConfig {
|
|
8
|
+
host?: string;
|
|
9
|
+
port?: number;
|
|
10
|
+
apiKey?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface MCPClientEntry {
|
|
13
|
+
command: string;
|
|
14
|
+
args: string[];
|
|
15
|
+
env?: Record<string, string>;
|
|
16
|
+
}
|
|
17
|
+
export interface MCPClientsConfig {
|
|
18
|
+
mcpServers: Record<string, MCPClientEntry>;
|
|
19
|
+
}
|
|
20
|
+
export declare class ConfigGenerator {
|
|
21
|
+
/**
|
|
22
|
+
* Generate an MCP stdio-mode entry for a client's config file.
|
|
23
|
+
* This is the standard mode for Claude Desktop and Cursor.
|
|
24
|
+
*
|
|
25
|
+
* The entry runs `weave-link start` via `npx` so no global install is needed.
|
|
26
|
+
*/
|
|
27
|
+
static stdioEntry(config?: WeaveLinkConfig): MCPClientEntry;
|
|
28
|
+
/**
|
|
29
|
+
* Generate an MCP HTTP-mode entry for remote WeaveLink connections.
|
|
30
|
+
*/
|
|
31
|
+
static httpEntry(config?: WeaveLinkConfig): MCPClientEntry;
|
|
32
|
+
/**
|
|
33
|
+
* Build a full `mcpServers` config block, ready to merge into the client's JSON.
|
|
34
|
+
*/
|
|
35
|
+
static buildMCPConfig(serverName?: string, mode?: 'stdio' | 'http', config?: WeaveLinkConfig): MCPClientsConfig;
|
|
36
|
+
/**
|
|
37
|
+
* Format a config object as indented JSON for writing to disk.
|
|
38
|
+
*/
|
|
39
|
+
static toJSON(config: unknown): string;
|
|
40
|
+
/**
|
|
41
|
+
* Deep-merge a WeaveLink entry into an existing client config object.
|
|
42
|
+
* Preserves all existing `mcpServers` entries and only overwrites the
|
|
43
|
+
* `openweave` key.
|
|
44
|
+
*/
|
|
45
|
+
static mergeIntoExisting(existing: MCPClientsConfig, serverName?: string, mode?: 'stdio' | 'http', config?: WeaveLinkConfig): MCPClientsConfig;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=config-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-generator.d.ts","sourceRoot":"","sources":["../../src/installer/config-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC5C;AAMD,qBAAa,eAAe;IAC1B;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,cAAc;IAoB3D;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,cAAc;IAkB1D;;OAEG;IACH,MAAM,CAAC,cAAc,CACnB,UAAU,SAAc,EACxB,IAAI,GAAE,OAAO,GAAG,MAAgB,EAChC,MAAM,CAAC,EAAE,eAAe,GACvB,gBAAgB;IAYnB;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM;IAItC;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CACtB,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,SAAc,EACxB,IAAI,GAAE,OAAO,GAAG,MAAgB,EAChC,MAAM,CAAC,EAAE,eAAe,GACvB,gBAAgB;CAapB"}
|