agent-recorder 0.0.9 → 0.0.11
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/package.json +1 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.js +5 -31
- package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/configure.d.ts +2 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/configure.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/configure.js +117 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/configure.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/doctor.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/doctor.js +113 -19
- package/vendor/node_modules/@agent-recorder/cli/commands/doctor.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/doctor.test.d.ts +5 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/doctor.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/doctor.test.js +152 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/doctor.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/install.d.ts +7 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/install.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/install.js +89 -14
- package/vendor/node_modules/@agent-recorder/cli/commands/install.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/install.test.d.ts +5 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/install.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/install.test.js +173 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/install.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/start.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/start.js +29 -4
- package/vendor/node_modules/@agent-recorder/cli/commands/start.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/config/hubify.d.ts +51 -0
- package/vendor/node_modules/@agent-recorder/cli/config/hubify.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/cli/config/hubify.js +125 -0
- package/vendor/node_modules/@agent-recorder/cli/config/hubify.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/cli/config/hubify.test.d.ts +5 -0
- package/vendor/node_modules/@agent-recorder/cli/config/hubify.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/cli/config/hubify.test.js +329 -0
- package/vendor/node_modules/@agent-recorder/cli/config/hubify.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/cli/index.js +7 -3
- package/vendor/node_modules/@agent-recorder/cli/index.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/claude-config.d.ts +32 -0
- package/vendor/node_modules/@agent-recorder/core/claude-config.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/claude-config.js +65 -0
- package/vendor/node_modules/@agent-recorder/core/claude-config.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/index.d.ts +3 -0
- package/vendor/node_modules/@agent-recorder/core/index.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/index.js +3 -0
- package/vendor/node_modules/@agent-recorder/core/index.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/providers/index.d.ts +9 -0
- package/vendor/node_modules/@agent-recorder/core/providers/index.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/providers/index.js +9 -0
- package/vendor/node_modules/@agent-recorder/core/providers/index.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/providers/io.d.ts +36 -0
- package/vendor/node_modules/@agent-recorder/core/providers/io.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/providers/io.js +88 -0
- package/vendor/node_modules/@agent-recorder/core/providers/io.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/providers/io.test.d.ts +5 -0
- package/vendor/node_modules/@agent-recorder/core/providers/io.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/providers/io.test.js +248 -0
- package/vendor/node_modules/@agent-recorder/core/providers/io.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/providers/types.d.ts +36 -0
- package/vendor/node_modules/@agent-recorder/core/providers/types.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/providers/types.js +6 -0
- package/vendor/node_modules/@agent-recorder/core/providers/types.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/wrap-utils.d.ts +42 -0
- package/vendor/node_modules/@agent-recorder/core/wrap-utils.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/wrap-utils.js +80 -0
- package/vendor/node_modules/@agent-recorder/core/wrap-utils.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/index.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/index.js +19 -0
- package/vendor/node_modules/@agent-recorder/service/index.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/mcp/auto-wrap-manager.d.ts +43 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/auto-wrap-manager.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/auto-wrap-manager.js +221 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/auto-wrap-manager.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/hub.test.d.ts +6 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/hub.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/hub.test.js +319 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/hub.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/proxy.d.ts +1 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/proxy.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/mcp/proxy.js +239 -34
- package/vendor/node_modules/@agent-recorder/service/mcp/proxy.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/events.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/events.js +1 -0
- package/vendor/node_modules/@agent-recorder/service/routes/events.js.map +1 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for wrapping MCP servers with Agent Recorder proxy.
|
|
3
|
+
* Used by both CLI command and auto-wrap manager.
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from "node:fs";
|
|
6
|
+
import * as path from "node:path";
|
|
7
|
+
/**
|
|
8
|
+
* Load upstreams registry from file.
|
|
9
|
+
* Returns empty object if file doesn't exist or is invalid.
|
|
10
|
+
*/
|
|
11
|
+
export function loadUpstreamsRegistry(upstreamsPath) {
|
|
12
|
+
try {
|
|
13
|
+
if (!fs.existsSync(upstreamsPath)) {
|
|
14
|
+
return {};
|
|
15
|
+
}
|
|
16
|
+
const content = fs.readFileSync(upstreamsPath, "utf-8");
|
|
17
|
+
return JSON.parse(content);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Save upstreams registry to file.
|
|
25
|
+
* Creates directory if it doesn't exist.
|
|
26
|
+
*/
|
|
27
|
+
export function saveUpstreamsRegistry(upstreamsPath, registry) {
|
|
28
|
+
const dir = path.dirname(upstreamsPath);
|
|
29
|
+
if (!fs.existsSync(dir)) {
|
|
30
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
const content = JSON.stringify(registry, null, 2) + "\n";
|
|
33
|
+
fs.writeFileSync(upstreamsPath, content, "utf-8");
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if a server is already wrapped in the upstreams registry.
|
|
37
|
+
*/
|
|
38
|
+
export function isAlreadyWrapped(serverKey, upstreamsPath) {
|
|
39
|
+
const registry = loadUpstreamsRegistry(upstreamsPath);
|
|
40
|
+
return serverKey in registry;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the proxy URL for a given server key.
|
|
44
|
+
*/
|
|
45
|
+
export function getProxyUrl(serverKey, mcpProxyPort) {
|
|
46
|
+
return `http://127.0.0.1:${mcpProxyPort}/?upstream=${serverKey}`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Register a URL-based server in the upstreams registry.
|
|
50
|
+
* Returns the proxy URL that should replace the original URL.
|
|
51
|
+
*/
|
|
52
|
+
export function registerUrlServer(serverKey, originalUrl, upstreamsPath, mcpProxyPort) {
|
|
53
|
+
// Load existing registry
|
|
54
|
+
const registry = loadUpstreamsRegistry(upstreamsPath);
|
|
55
|
+
// Add server to registry
|
|
56
|
+
registry[serverKey] = { url: originalUrl };
|
|
57
|
+
// Save registry
|
|
58
|
+
saveUpstreamsRegistry(upstreamsPath, registry);
|
|
59
|
+
// Return proxy URL
|
|
60
|
+
return getProxyUrl(serverKey, mcpProxyPort);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Unregister a server from the upstreams registry.
|
|
64
|
+
*/
|
|
65
|
+
export function unregisterServer(serverKey, upstreamsPath) {
|
|
66
|
+
const registry = loadUpstreamsRegistry(upstreamsPath);
|
|
67
|
+
if (serverKey in registry) {
|
|
68
|
+
delete registry[serverKey];
|
|
69
|
+
saveUpstreamsRegistry(upstreamsPath, registry);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get the original URL for a wrapped server.
|
|
74
|
+
* Returns null if server is not wrapped.
|
|
75
|
+
*/
|
|
76
|
+
export function getOriginalUrl(serverKey, upstreamsPath) {
|
|
77
|
+
const registry = loadUpstreamsRegistry(upstreamsPath);
|
|
78
|
+
return registry[serverKey]?.url ?? null;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=wrap-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap-utils.js","sourceRoot":"","sources":["../src/wrap-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAQlC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,aAAqB;IAErB,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,aAAqB,EACrB,QAA2B;IAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IACzD,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,aAAqB;IAErB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACtD,OAAO,SAAS,IAAI,QAAQ,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,YAAoB;IACjE,OAAO,oBAAoB,YAAY,cAAc,SAAS,EAAE,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,WAAmB,EACnB,aAAqB,EACrB,YAAoB;IAEpB,yBAAyB;IACzB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAEtD,yBAAyB;IACzB,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;IAE3C,gBAAgB;IAChB,qBAAqB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAE/C,mBAAmB;IACnB,OAAO,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,aAAqB;IAErB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAEtD,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC3B,qBAAqB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,aAAqB;IAErB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACtD,OAAO,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;AAC1C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EASL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EASL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAOD;;GAEG;AACH,wBAAgB,aAAa,IAAI;IAC/B,IAAI,EAAE,QAAQ,GAAG,YAAY,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAMA;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAyHvB"}
|
|
@@ -9,6 +9,7 @@ import { loadConfig, openDatabase, runMigrations, getDefaultMigrationsDir, getDa
|
|
|
9
9
|
import { createServer, startServer } from "./server.js";
|
|
10
10
|
import { createMcpProxy } from "./mcp/index.js";
|
|
11
11
|
import { createSessionManager } from "./session-manager.js";
|
|
12
|
+
import { AutoWrapManager } from "./mcp/auto-wrap-manager.js";
|
|
12
13
|
export { createServer, startServer } from "./server.js";
|
|
13
14
|
export { createMcpProxy } from "./mcp/index.js";
|
|
14
15
|
export { createSessionManager } from "./session-manager.js";
|
|
@@ -51,6 +52,20 @@ export async function startDaemon(options = {}) {
|
|
|
51
52
|
// Store for health endpoint
|
|
52
53
|
daemonSessionId = sessionManager.sessionId;
|
|
53
54
|
daemonStartedAt = startedAt;
|
|
55
|
+
// Initialize auto-wrap manager (fail-open: errors logged, not thrown)
|
|
56
|
+
let autoWrapManager = null;
|
|
57
|
+
try {
|
|
58
|
+
autoWrapManager = new AutoWrapManager({
|
|
59
|
+
config,
|
|
60
|
+
sessionId: sessionManager.sessionId,
|
|
61
|
+
db,
|
|
62
|
+
});
|
|
63
|
+
await autoWrapManager.initialize();
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error("[AutoWrap] Initialization failed:", error instanceof Error ? error.message : "Unknown error");
|
|
67
|
+
console.error("Continuing in manual wrap mode...");
|
|
68
|
+
}
|
|
54
69
|
// Create and start REST API server (pass currentSessionId for /api/sessions/current)
|
|
55
70
|
const app = await createServer({
|
|
56
71
|
db,
|
|
@@ -89,6 +104,10 @@ export async function startDaemon(options = {}) {
|
|
|
89
104
|
sessionManager.shutdown(status);
|
|
90
105
|
await proxy.close();
|
|
91
106
|
await app.close();
|
|
107
|
+
// Cleanup auto-wrap manager
|
|
108
|
+
if (autoWrapManager) {
|
|
109
|
+
await autoWrapManager.cleanup();
|
|
110
|
+
}
|
|
92
111
|
db.close();
|
|
93
112
|
// Clean up PID file and lock in daemon mode
|
|
94
113
|
if (daemonMode) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,GAEZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Wrap Manager
|
|
3
|
+
* Automatically discovers and wraps MCP servers from Claude Code config.
|
|
4
|
+
* Supports URL-based servers (stdio support in later phase).
|
|
5
|
+
*/
|
|
6
|
+
import type Database from "better-sqlite3";
|
|
7
|
+
import type { Config } from "@agent-recorder/core";
|
|
8
|
+
export interface AutoWrapManagerOptions {
|
|
9
|
+
config: Config;
|
|
10
|
+
sessionId: string;
|
|
11
|
+
db: Database.Database;
|
|
12
|
+
}
|
|
13
|
+
export declare class AutoWrapManager {
|
|
14
|
+
private wrappedServers;
|
|
15
|
+
private config;
|
|
16
|
+
private sessionId;
|
|
17
|
+
private db;
|
|
18
|
+
private claudeConfigPath;
|
|
19
|
+
private originalClaudeConfig;
|
|
20
|
+
constructor(options: AutoWrapManagerOptions);
|
|
21
|
+
/**
|
|
22
|
+
* Discover servers from Claude config and wrap them.
|
|
23
|
+
* Fail-open: logs errors but doesn't throw.
|
|
24
|
+
*/
|
|
25
|
+
initialize(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Re-discover and wrap new servers (for hot-reload).
|
|
28
|
+
*/
|
|
29
|
+
handleConfigChange(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Cleanup: restore config, unregister servers.
|
|
32
|
+
*/
|
|
33
|
+
cleanup(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Discover MCP servers from Claude config.
|
|
36
|
+
*/
|
|
37
|
+
private discoverServers;
|
|
38
|
+
/**
|
|
39
|
+
* Wrap a single URL-based MCP server.
|
|
40
|
+
*/
|
|
41
|
+
private wrapUrlServer;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=auto-wrap-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-wrap-manager.d.ts","sourceRoot":"","sources":["../../src/mcp/auto-wrap-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAsBnD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;CACvB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,oBAAoB,CAAiB;gBAEjC,OAAO,EAAE,sBAAsB;IAM3C;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiEjC;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAuDzC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B9B;;OAEG;YACW,eAAe;IAqD7B;;OAEG;YACW,aAAa;CAuD5B"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Wrap Manager
|
|
3
|
+
* Automatically discovers and wraps MCP servers from Claude Code config.
|
|
4
|
+
* Supports URL-based servers (stdio support in later phase).
|
|
5
|
+
*/
|
|
6
|
+
import { registerUrlServer, unregisterServer, isAlreadyWrapped, detectClaudeConfig, readJsonFile, writeJsonFileAtomic, } from "@agent-recorder/core";
|
|
7
|
+
export class AutoWrapManager {
|
|
8
|
+
wrappedServers = new Map();
|
|
9
|
+
config;
|
|
10
|
+
sessionId;
|
|
11
|
+
db;
|
|
12
|
+
claudeConfigPath = null;
|
|
13
|
+
originalClaudeConfig = null;
|
|
14
|
+
constructor(options) {
|
|
15
|
+
this.config = options.config;
|
|
16
|
+
this.sessionId = options.sessionId;
|
|
17
|
+
this.db = options.db;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Discover servers from Claude config and wrap them.
|
|
21
|
+
* Fail-open: logs errors but doesn't throw.
|
|
22
|
+
*/
|
|
23
|
+
async initialize() {
|
|
24
|
+
try {
|
|
25
|
+
// Detect Claude config
|
|
26
|
+
const detected = detectClaudeConfig();
|
|
27
|
+
if (detected.kind === "none" || !detected.path) {
|
|
28
|
+
console.log("[AutoWrap] No Claude Code config found - skipping auto-wrap");
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this.claudeConfigPath = detected.path;
|
|
32
|
+
console.log(`[AutoWrap] Found Claude config: ${detected.path}`);
|
|
33
|
+
// Read and backup original config
|
|
34
|
+
const configData = readJsonFile(this.claudeConfigPath);
|
|
35
|
+
if (!configData) {
|
|
36
|
+
console.error("[AutoWrap] Could not read Claude config - skipping");
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this.originalClaudeConfig = structuredClone(configData);
|
|
40
|
+
// Discover servers
|
|
41
|
+
const discovered = await this.discoverServers(configData);
|
|
42
|
+
console.log(`[AutoWrap] Discovered ${discovered.url.size} URL server(s), ${discovered.stdio.size} stdio server(s)`);
|
|
43
|
+
// Wrap URL servers
|
|
44
|
+
let wrappedCount = 0;
|
|
45
|
+
for (const [key, url] of discovered.url.entries()) {
|
|
46
|
+
try {
|
|
47
|
+
await this.wrapUrlServer(key, url);
|
|
48
|
+
wrappedCount++;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error(`[AutoWrap] Failed to wrap server "${key}":`, error instanceof Error ? error.message : "Unknown error");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (wrappedCount > 0) {
|
|
55
|
+
console.log(`[AutoWrap] Successfully wrapped ${wrappedCount} server(s)`);
|
|
56
|
+
}
|
|
57
|
+
// TODO: Wrap stdio servers (later phase)
|
|
58
|
+
if (discovered.stdio.size > 0) {
|
|
59
|
+
console.log(`[AutoWrap] Skipping ${discovered.stdio.size} stdio server(s) (not yet supported)`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.error("[AutoWrap] Initialization failed:", error instanceof Error ? error.message : "Unknown error");
|
|
64
|
+
console.error("Continuing in manual wrap mode...");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Re-discover and wrap new servers (for hot-reload).
|
|
69
|
+
*/
|
|
70
|
+
async handleConfigChange() {
|
|
71
|
+
console.log("[AutoWrap] Config change detected - re-wrapping...");
|
|
72
|
+
try {
|
|
73
|
+
if (!this.claudeConfigPath) {
|
|
74
|
+
console.error("[AutoWrap] No config path - cannot reload");
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Read updated config
|
|
78
|
+
const configData = readJsonFile(this.claudeConfigPath);
|
|
79
|
+
if (!configData) {
|
|
80
|
+
console.error("[AutoWrap] Could not read updated config");
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Discover servers
|
|
84
|
+
const discovered = await this.discoverServers(configData);
|
|
85
|
+
// Find new servers (not already wrapped)
|
|
86
|
+
const newServers = new Map();
|
|
87
|
+
for (const [key, url] of discovered.url.entries()) {
|
|
88
|
+
if (!this.wrappedServers.has(key)) {
|
|
89
|
+
newServers.set(key, url);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (newServers.size === 0) {
|
|
93
|
+
console.log("[AutoWrap] No new servers to wrap");
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Wrap new servers
|
|
97
|
+
let wrappedCount = 0;
|
|
98
|
+
for (const [key, url] of newServers.entries()) {
|
|
99
|
+
try {
|
|
100
|
+
await this.wrapUrlServer(key, url);
|
|
101
|
+
wrappedCount++;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.error(`[AutoWrap] Failed to wrap new server "${key}":`, error instanceof Error ? error.message : "Unknown error");
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
console.log(`[AutoWrap] Wrapped ${wrappedCount} new server(s)`);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
console.error("[AutoWrap] Config reload failed:", error instanceof Error ? error.message : "Unknown error");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Cleanup: restore config, unregister servers.
|
|
115
|
+
*/
|
|
116
|
+
async cleanup() {
|
|
117
|
+
try {
|
|
118
|
+
console.log("[AutoWrap] Cleaning up...");
|
|
119
|
+
// Unregister all wrapped servers
|
|
120
|
+
for (const [key, server] of this.wrappedServers.entries()) {
|
|
121
|
+
if (server.type === "url") {
|
|
122
|
+
unregisterServer(key, this.config.upstreamsPath);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Restore original Claude config
|
|
126
|
+
if (this.claudeConfigPath && this.originalClaudeConfig) {
|
|
127
|
+
writeJsonFileAtomic(this.claudeConfigPath, this.originalClaudeConfig);
|
|
128
|
+
console.log("[AutoWrap] Restored original Claude config");
|
|
129
|
+
}
|
|
130
|
+
this.wrappedServers.clear();
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
console.error("[AutoWrap] Cleanup failed:", error instanceof Error ? error.message : "Unknown error");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Discover MCP servers from Claude config.
|
|
138
|
+
*/
|
|
139
|
+
async discoverServers(configData) {
|
|
140
|
+
const url = new Map();
|
|
141
|
+
const stdio = new Map();
|
|
142
|
+
if (!configData ||
|
|
143
|
+
typeof configData !== "object" ||
|
|
144
|
+
Array.isArray(configData)) {
|
|
145
|
+
return { url, stdio };
|
|
146
|
+
}
|
|
147
|
+
const config = configData;
|
|
148
|
+
const mcpServers = config.mcpServers;
|
|
149
|
+
if (!mcpServers ||
|
|
150
|
+
typeof mcpServers !== "object" ||
|
|
151
|
+
Array.isArray(mcpServers)) {
|
|
152
|
+
return { url, stdio };
|
|
153
|
+
}
|
|
154
|
+
const servers = mcpServers;
|
|
155
|
+
for (const [key, entry] of Object.entries(servers)) {
|
|
156
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
const serverEntry = entry;
|
|
160
|
+
// URL-based server
|
|
161
|
+
if (typeof serverEntry.url === "string") {
|
|
162
|
+
url.set(key, serverEntry.url);
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
// Command-based server (stdio)
|
|
166
|
+
if (typeof serverEntry.command === "string") {
|
|
167
|
+
const args = Array.isArray(serverEntry.args)
|
|
168
|
+
? serverEntry.args
|
|
169
|
+
: [];
|
|
170
|
+
stdio.set(key, { command: serverEntry.command, args });
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return { url, stdio };
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Wrap a single URL-based MCP server.
|
|
178
|
+
*/
|
|
179
|
+
async wrapUrlServer(key, url) {
|
|
180
|
+
// Check if already wrapped
|
|
181
|
+
if (isAlreadyWrapped(key, this.config.upstreamsPath)) {
|
|
182
|
+
console.log(`[AutoWrap] Server "${key}" already wrapped - skipping`);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// Register in upstreams registry
|
|
186
|
+
const proxyUrl = registerUrlServer(key, url, this.config.upstreamsPath, this.config.mcpProxyPort);
|
|
187
|
+
// Update Claude config to use proxy URL
|
|
188
|
+
if (!this.claudeConfigPath) {
|
|
189
|
+
throw new Error("Claude config path not set");
|
|
190
|
+
}
|
|
191
|
+
const configData = readJsonFile(this.claudeConfigPath);
|
|
192
|
+
if (!configData) {
|
|
193
|
+
throw new Error("Could not read Claude config");
|
|
194
|
+
}
|
|
195
|
+
const config = configData;
|
|
196
|
+
const mcpServers = config.mcpServers;
|
|
197
|
+
const serverEntry = mcpServers[key];
|
|
198
|
+
// Update URL to proxy
|
|
199
|
+
const newEntry = {
|
|
200
|
+
...serverEntry,
|
|
201
|
+
url: proxyUrl,
|
|
202
|
+
};
|
|
203
|
+
const newConfig = {
|
|
204
|
+
...config,
|
|
205
|
+
mcpServers: {
|
|
206
|
+
...mcpServers,
|
|
207
|
+
[key]: newEntry,
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
// Write updated config atomically
|
|
211
|
+
writeJsonFileAtomic(this.claudeConfigPath, newConfig);
|
|
212
|
+
// Track wrapped server
|
|
213
|
+
this.wrappedServers.set(key, {
|
|
214
|
+
key,
|
|
215
|
+
type: "url",
|
|
216
|
+
originalUrl: url,
|
|
217
|
+
});
|
|
218
|
+
console.log(`[AutoWrap] Wrapped "${key}": ${url} -> ${proxyUrl}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=auto-wrap-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-wrap-manager.js","sourceRoot":"","sources":["../../src/mcp/auto-wrap-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub.test.d.ts","sourceRoot":"","sources":["../../src/mcp/hub.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|