@xopcai/xopc 0.0.91 → 0.0.92
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/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/agents-uwPn7ZW9.js +222 -0
- package/dist/gateway/static/root/assets/{apps-page-CIC8bmvZ.js → apps-page-CWKdhSPU.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-hEhW7Mbk.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-CYWL5DLD.js → channels-status-swr-XzddfJW2.js} +1 -1
- package/dist/gateway/static/root/assets/{cron-api-TVqLlGAC.js → cron-api--I8LJ44S.js} +1 -1
- package/dist/gateway/static/root/assets/cron-page-B0kvgZGR.js +1 -0
- package/dist/gateway/static/root/assets/{dist-CUV1uY5f.js → dist-CYgHMQO0.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-mTLHRDp1.js → extension-debug-page-6cRP0nA9.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-iI8BI7WK.js → extension-page-DpwIkspI.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-ByXcdubM.js → extension-settings-page-DYbnQUxH.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-BWtQq_Ys.js → fetch-DTN0w7rV.js} +1 -1
- package/dist/gateway/static/root/assets/{field-primitives-BsZ-4VT5.js → field-primitives-CslW6HwD.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-2UiKevxG.js +1 -0
- package/dist/gateway/static/root/assets/index-BUKUv7QW.css +1 -0
- package/dist/gateway/static/root/assets/{index-CKkR-v9U.js → index-DnevRVa6.js} +82 -82
- package/dist/gateway/static/root/assets/logs-page-sOP4TXJ4.js +1 -0
- package/dist/gateway/static/root/assets/{note-detail-page-DJ2Mb4x7.js → note-detail-page-DvW2qg4i.js} +3 -3
- package/dist/gateway/static/root/assets/{note-time-JLBPSLzK.js → note-time-BEiibLJv.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-BE-75qz9.js → notes-page-BFQaquHU.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-CptjDKAX.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BctKqHcf.js +2 -0
- package/dist/gateway/static/root/assets/{settings-form-section-DSYCknxM.js → settings-form-section-QJh5ruel.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-V3p-hISB.js +2 -0
- package/dist/gateway/static/root/assets/{share-preview-page-awRqs4hV.js → share-preview-page-DBsvvbmD.js} +1 -1
- package/dist/gateway/static/root/assets/skills-page-q2zPUJAR.js +2 -0
- package/dist/gateway/static/root/assets/{theme-store-BC-42BoZ.js → theme-store-ht5iswWS.js} +1 -1
- package/dist/gateway/static/root/assets/{url-CY1RQKTU.js → url-CWWpfkq1.js} +2 -2
- package/dist/gateway/static/root/assets/{utils-DX3TQuap.js → utils-DhPv9xoB.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DLSKUipa.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-page.utils-ClC37yEp.js → workflow-page.utils-CJqnPWkW.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-DRRQ1A0l.js +27 -0
- package/dist/gateway/static/root/index.html +5 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-config.d.ts +2 -9
- package/dist/src/agent/mcp/bundle-mcp-config.js +10 -34
- package/dist/src/agent/mcp/bundle-mcp-config.js.map +1 -1
- package/dist/src/agent/mcp/bundle-mcp-policy.js +2 -2
- package/dist/src/agent/mcp/bundle-mcp-policy.js.map +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +4 -4
- package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +1 -1
- package/dist/src/agent/mcp/index.js +2 -2
- package/dist/src/cli/command-catalog.js +0 -4
- package/dist/src/cli/command-catalog.js.map +1 -1
- package/dist/src/cli/command-loaders.js +1 -2
- package/dist/src/cli/command-loaders.js.map +1 -1
- package/dist/src/cli/command-manifest.js +0 -4
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/config/index.d.ts +0 -1
- package/dist/src/config/index.js +1 -2
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/config/schema.d.ts +36 -6
- package/dist/src/config/schema.js +13 -11
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/connectors/builtin-catalog.d.ts +2 -0
- package/dist/src/connectors/builtin-catalog.js +152 -0
- package/dist/src/connectors/builtin-catalog.js.map +1 -0
- package/dist/src/connectors/catalog.d.ts +5 -0
- package/dist/src/connectors/catalog.js +13 -0
- package/dist/src/connectors/catalog.js.map +1 -0
- package/dist/src/connectors/health.d.ts +3 -0
- package/dist/src/connectors/health.js +61 -0
- package/dist/src/connectors/health.js.map +1 -0
- package/dist/src/connectors/install.d.ts +5 -0
- package/dist/src/connectors/install.js +46 -0
- package/dist/src/connectors/install.js.map +1 -0
- package/dist/src/connectors/instances.d.ts +4 -0
- package/dist/src/connectors/instances.js +43 -0
- package/dist/src/connectors/instances.js.map +1 -0
- package/dist/src/connectors/materialize.d.ts +9 -0
- package/dist/src/connectors/materialize.js +76 -0
- package/dist/src/connectors/materialize.js.map +1 -0
- package/dist/src/connectors/oauth.d.ts +22 -0
- package/dist/src/connectors/oauth.js +99 -0
- package/dist/src/connectors/oauth.js.map +1 -0
- package/dist/src/connectors/providers.d.ts +9 -0
- package/dist/src/connectors/providers.js +20 -0
- package/dist/src/connectors/providers.js.map +1 -0
- package/dist/src/connectors/secret-store.d.ts +7 -0
- package/dist/src/connectors/secret-store.js +47 -0
- package/dist/src/connectors/secret-store.js.map +1 -0
- package/dist/src/connectors/types.d.ts +102 -0
- package/dist/src/connectors/types.js +1 -0
- package/dist/src/connectors/usage.d.ts +6 -0
- package/dist/src/connectors/usage.js +63 -0
- package/dist/src/connectors/usage.js.map +1 -0
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/routes/connectors.d.ts +3 -0
- package/dist/src/gateway/hono/routes/connectors.js +177 -0
- package/dist/src/gateway/hono/routes/connectors.js.map +1 -0
- package/dist/src/gateway/hono/routes/home.d.ts +12 -0
- package/dist/src/gateway/hono/routes/home.js +50 -0
- package/dist/src/gateway/hono/routes/home.js.map +1 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js +12 -4
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/notes.js +31 -0
- package/dist/src/gateway/hono/routes/notes.js.map +1 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/mcp/channel-bridge.js +1 -1
- package/dist/src/mcp/channel-bridge.js.map +1 -1
- package/dist/src/notes/index.d.ts +1 -1
- package/dist/src/notes/service.d.ts +11 -0
- package/dist/src/notes/service.js +42 -0
- package/dist/src/notes/service.js.map +1 -1
- package/dist/src/notes/store.d.ts +1 -0
- package/dist/src/notes/store.js +29 -4
- package/dist/src/notes/store.js.map +1 -1
- package/dist/src/notes/types.d.ts +39 -2
- package/dist/src/session/store.d.ts +2 -0
- package/dist/src/session/store.js +21 -1
- package/dist/src/session/store.js.map +1 -1
- package/package.json +1 -1
- package/dist/gateway/static/root/assets/agents-bVWUlrlD.js +0 -222
- package/dist/gateway/static/root/assets/channels-settings-C8G8RAAP.js +0 -1
- package/dist/gateway/static/root/assets/cron-dreaming-jobs-Ip703-qM.js +0 -2
- package/dist/gateway/static/root/assets/cron-page-BtcFYlvv.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-WjTsRLCU.js +0 -1
- package/dist/gateway/static/root/assets/index-VlELBY99.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-ClnIpxfd.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-bJJkWtTl.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-WcMXLq2U.js +0 -3
- package/dist/gateway/static/root/assets/skills-page-Lu-i1JG7.js +0 -2
- package/dist/gateway/static/root/assets/voice-api-key-field-B5uKlDqA.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-C7VhIXtR.js +0 -27
- package/dist/src/cli/commands/mcp.d.ts +0 -4
- package/dist/src/cli/commands/mcp.js +0 -85
- package/dist/src/cli/commands/mcp.js.map +0 -1
- package/dist/src/config/mcp-config.d.ts +0 -34
- package/dist/src/config/mcp-config.js +0 -116
- package/dist/src/config/mcp-config.js.map +0 -1
- package/dist/src/gateway/hono/routes/mcp.d.ts +0 -3
- package/dist/src/gateway/hono/routes/mcp.js +0 -99
- package/dist/src/gateway/hono/routes/mcp.js.map +0 -1
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { init_paths, resolveConfigPath } from "./paths.js";
|
|
2
|
-
import { init_loader, loadConfig, saveConfig } from "./loader.js";
|
|
3
|
-
import { isRecord } from "../utils/is-record.js";
|
|
4
|
-
import { canonicalizeConfiguredMcpServer, normalizeConfiguredMcpServers } from "./mcp-config-normalize.js";
|
|
5
|
-
import { existsSync } from "node:fs";
|
|
6
|
-
//#region src/config/mcp-config.ts
|
|
7
|
-
init_loader();
|
|
8
|
-
init_paths();
|
|
9
|
-
function listConfiguredMcpServers(configPath) {
|
|
10
|
-
const path = configPath?.trim() || process.env.XOPC_CONFIG_PATH?.trim() || resolveConfigPath();
|
|
11
|
-
if (!existsSync(path)) return {
|
|
12
|
-
ok: false,
|
|
13
|
-
path,
|
|
14
|
-
error: "Config file not found."
|
|
15
|
-
};
|
|
16
|
-
try {
|
|
17
|
-
const config = loadConfig(path);
|
|
18
|
-
return {
|
|
19
|
-
ok: true,
|
|
20
|
-
path,
|
|
21
|
-
config: structuredClone(config),
|
|
22
|
-
mcpServers: normalizeConfiguredMcpServers(config.mcp?.servers)
|
|
23
|
-
};
|
|
24
|
-
} catch (error) {
|
|
25
|
-
return {
|
|
26
|
-
ok: false,
|
|
27
|
-
path,
|
|
28
|
-
error: `Config file is invalid: ${error instanceof Error ? error.message : String(error)}`
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
async function setConfiguredMcpServer(params) {
|
|
33
|
-
const name = params.name.trim();
|
|
34
|
-
if (!name) return {
|
|
35
|
-
ok: false,
|
|
36
|
-
path: "",
|
|
37
|
-
error: "MCP server name is required."
|
|
38
|
-
};
|
|
39
|
-
if (!isRecord(params.server)) return {
|
|
40
|
-
ok: false,
|
|
41
|
-
path: "",
|
|
42
|
-
error: "MCP server config must be a JSON object."
|
|
43
|
-
};
|
|
44
|
-
const loaded = listConfiguredMcpServers(params.configPath);
|
|
45
|
-
if (!loaded.ok) return loaded;
|
|
46
|
-
const next = structuredClone(loaded.config);
|
|
47
|
-
const servers = normalizeConfiguredMcpServers(next.mcp?.servers);
|
|
48
|
-
servers[name] = canonicalizeConfiguredMcpServer(params.server);
|
|
49
|
-
next.mcp = {
|
|
50
|
-
...next.mcp,
|
|
51
|
-
servers
|
|
52
|
-
};
|
|
53
|
-
try {
|
|
54
|
-
await saveConfig(next, loaded.path);
|
|
55
|
-
} catch (error) {
|
|
56
|
-
return {
|
|
57
|
-
ok: false,
|
|
58
|
-
path: loaded.path,
|
|
59
|
-
error: `Failed to save config: ${error instanceof Error ? error.message : String(error)}`
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
return {
|
|
63
|
-
ok: true,
|
|
64
|
-
path: loaded.path,
|
|
65
|
-
config: next,
|
|
66
|
-
mcpServers: servers
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
async function unsetConfiguredMcpServer(params) {
|
|
70
|
-
const name = params.name.trim();
|
|
71
|
-
if (!name) return {
|
|
72
|
-
ok: false,
|
|
73
|
-
path: "",
|
|
74
|
-
error: "MCP server name is required."
|
|
75
|
-
};
|
|
76
|
-
const loaded = listConfiguredMcpServers(params.configPath);
|
|
77
|
-
if (!loaded.ok) return loaded;
|
|
78
|
-
if (!Object.hasOwn(loaded.mcpServers, name)) return {
|
|
79
|
-
ok: true,
|
|
80
|
-
path: loaded.path,
|
|
81
|
-
config: loaded.config,
|
|
82
|
-
mcpServers: loaded.mcpServers,
|
|
83
|
-
removed: false
|
|
84
|
-
};
|
|
85
|
-
const next = structuredClone(loaded.config);
|
|
86
|
-
const servers = normalizeConfiguredMcpServers(next.mcp?.servers);
|
|
87
|
-
delete servers[name];
|
|
88
|
-
if (Object.keys(servers).length > 0) next.mcp = {
|
|
89
|
-
...next.mcp,
|
|
90
|
-
servers
|
|
91
|
-
};
|
|
92
|
-
else if (next.mcp) {
|
|
93
|
-
delete next.mcp.servers;
|
|
94
|
-
if (Object.keys(next.mcp).length === 0) delete next.mcp;
|
|
95
|
-
}
|
|
96
|
-
try {
|
|
97
|
-
await saveConfig(next, loaded.path);
|
|
98
|
-
} catch (error) {
|
|
99
|
-
return {
|
|
100
|
-
ok: false,
|
|
101
|
-
path: loaded.path,
|
|
102
|
-
error: `Failed to save config: ${error instanceof Error ? error.message : String(error)}`
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
return {
|
|
106
|
-
ok: true,
|
|
107
|
-
path: loaded.path,
|
|
108
|
-
config: next,
|
|
109
|
-
mcpServers: servers,
|
|
110
|
-
removed: true
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
//#endregion
|
|
114
|
-
export { listConfiguredMcpServers, normalizeConfiguredMcpServers, setConfiguredMcpServer, unsetConfiguredMcpServer };
|
|
115
|
-
|
|
116
|
-
//# sourceMappingURL=mcp-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.js","names":[],"sources":["../../../src/config/mcp-config.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport type { Config } from './schema.js';\nimport { loadConfig, saveConfig } from './loader.js';\nimport { resolveConfigPath } from './paths.js';\nimport {\n canonicalizeConfiguredMcpServer,\n normalizeConfiguredMcpServers,\n type ConfigMcpServers,\n} from './mcp-config-normalize.js';\nimport { isRecord } from '../utils/is-record.js';\n\nexport { normalizeConfiguredMcpServers, type ConfigMcpServers } from './mcp-config-normalize.js';\n\ntype ConfigMcpReadResult =\n | {\n ok: true;\n path: string;\n config: Config;\n mcpServers: ConfigMcpServers;\n }\n | { ok: false; path: string; error: string };\n\ntype ConfigMcpWriteResult =\n | {\n ok: true;\n path: string;\n config: Config;\n mcpServers: ConfigMcpServers;\n removed?: boolean;\n }\n | { ok: false; path: string; error: string };\n\nexport function listConfiguredMcpServers(configPath?: string): ConfigMcpReadResult {\n const path = configPath?.trim() || process.env.XOPC_CONFIG_PATH?.trim() || resolveConfigPath();\n if (!existsSync(path)) {\n return { ok: false, path, error: 'Config file not found.' };\n }\n try {\n const config = loadConfig(path);\n return {\n ok: true,\n path,\n config: structuredClone(config),\n mcpServers: normalizeConfiguredMcpServers(config.mcp?.servers),\n };\n } catch (error) {\n return {\n ok: false,\n path,\n error: `Config file is invalid: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n}\n\nexport async function setConfiguredMcpServer(params: {\n name: string;\n server: unknown;\n configPath?: string;\n}): Promise<ConfigMcpWriteResult> {\n const name = params.name.trim();\n if (!name) {\n return { ok: false, path: '', error: 'MCP server name is required.' };\n }\n if (!isRecord(params.server)) {\n return { ok: false, path: '', error: 'MCP server config must be a JSON object.' };\n }\n\n const loaded = listConfiguredMcpServers(params.configPath);\n if (!loaded.ok) {\n return loaded;\n }\n\n const next = structuredClone(loaded.config);\n const servers = normalizeConfiguredMcpServers(next.mcp?.servers);\n servers[name] = canonicalizeConfiguredMcpServer(params.server);\n next.mcp = { ...next.mcp, servers };\n\n try {\n await saveConfig(next, loaded.path);\n } catch (error) {\n return {\n ok: false,\n path: loaded.path,\n error: `Failed to save config: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n\n return { ok: true, path: loaded.path, config: next, mcpServers: servers };\n}\n\nexport async function unsetConfiguredMcpServer(params: {\n name: string;\n configPath?: string;\n}): Promise<ConfigMcpWriteResult> {\n const name = params.name.trim();\n if (!name) {\n return { ok: false, path: '', error: 'MCP server name is required.' };\n }\n\n const loaded = listConfiguredMcpServers(params.configPath);\n if (!loaded.ok) {\n return loaded;\n }\n if (!Object.hasOwn(loaded.mcpServers, name)) {\n return {\n ok: true,\n path: loaded.path,\n config: loaded.config,\n mcpServers: loaded.mcpServers,\n removed: false,\n };\n }\n\n const next = structuredClone(loaded.config);\n const servers = normalizeConfiguredMcpServers(next.mcp?.servers);\n delete servers[name];\n if (Object.keys(servers).length > 0) {\n next.mcp = { ...next.mcp, servers };\n } else if (next.mcp) {\n delete next.mcp.servers;\n if (Object.keys(next.mcp).length === 0) {\n delete next.mcp;\n }\n }\n\n try {\n await saveConfig(next, loaded.path);\n } catch (error) {\n return {\n ok: false,\n path: loaded.path,\n error: `Failed to save config: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n\n return {\n ok: true,\n path: loaded.path,\n config: next,\n mcpServers: servers,\n removed: true,\n };\n}\n"],"mappings":";;;;;;aAEqD;YACN;AA6B/C,SAAgB,yBAAyB,YAA0C;CACjF,MAAM,OAAO,YAAY,MAAM,IAAI,QAAQ,IAAI,kBAAkB,MAAM,IAAI,mBAAmB;AAC9F,KAAI,CAAC,WAAW,KAAK,CACnB,QAAO;EAAE,IAAI;EAAO;EAAM,OAAO;EAA0B;AAE7D,KAAI;EACF,MAAM,SAAS,WAAW,KAAK;AAC/B,SAAO;GACL,IAAI;GACJ;GACA,QAAQ,gBAAgB,OAAO;GAC/B,YAAY,8BAA8B,OAAO,KAAK,QAAQ;GAC/D;UACM,OAAO;AACd,SAAO;GACL,IAAI;GACJ;GACA,OAAO,2BAA2B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;GACzF;;;AAIL,eAAsB,uBAAuB,QAIX;CAChC,MAAM,OAAO,OAAO,KAAK,MAAM;AAC/B,KAAI,CAAC,KACH,QAAO;EAAE,IAAI;EAAO,MAAM;EAAI,OAAO;EAAgC;AAEvE,KAAI,CAAC,SAAS,OAAO,OAAO,CAC1B,QAAO;EAAE,IAAI;EAAO,MAAM;EAAI,OAAO;EAA4C;CAGnF,MAAM,SAAS,yBAAyB,OAAO,WAAW;AAC1D,KAAI,CAAC,OAAO,GACV,QAAO;CAGT,MAAM,OAAO,gBAAgB,OAAO,OAAO;CAC3C,MAAM,UAAU,8BAA8B,KAAK,KAAK,QAAQ;AAChE,SAAQ,QAAQ,gCAAgC,OAAO,OAAO;AAC9D,MAAK,MAAM;EAAE,GAAG,KAAK;EAAK;EAAS;AAEnC,KAAI;AACF,QAAM,WAAW,MAAM,OAAO,KAAK;UAC5B,OAAO;AACd,SAAO;GACL,IAAI;GACJ,MAAM,OAAO;GACb,OAAO,0BAA0B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;GACxF;;AAGH,QAAO;EAAE,IAAI;EAAM,MAAM,OAAO;EAAM,QAAQ;EAAM,YAAY;EAAS;;AAG3E,eAAsB,yBAAyB,QAGb;CAChC,MAAM,OAAO,OAAO,KAAK,MAAM;AAC/B,KAAI,CAAC,KACH,QAAO;EAAE,IAAI;EAAO,MAAM;EAAI,OAAO;EAAgC;CAGvE,MAAM,SAAS,yBAAyB,OAAO,WAAW;AAC1D,KAAI,CAAC,OAAO,GACV,QAAO;AAET,KAAI,CAAC,OAAO,OAAO,OAAO,YAAY,KAAK,CACzC,QAAO;EACL,IAAI;EACJ,MAAM,OAAO;EACb,QAAQ,OAAO;EACf,YAAY,OAAO;EACnB,SAAS;EACV;CAGH,MAAM,OAAO,gBAAgB,OAAO,OAAO;CAC3C,MAAM,UAAU,8BAA8B,KAAK,KAAK,QAAQ;AAChE,QAAO,QAAQ;AACf,KAAI,OAAO,KAAK,QAAQ,CAAC,SAAS,EAChC,MAAK,MAAM;EAAE,GAAG,KAAK;EAAK;EAAS;UAC1B,KAAK,KAAK;AACnB,SAAO,KAAK,IAAI;AAChB,MAAI,OAAO,KAAK,KAAK,IAAI,CAAC,WAAW,EACnC,QAAO,KAAK;;AAIhB,KAAI;AACF,QAAM,WAAW,MAAM,OAAO,KAAK;UAC5B,OAAO;AACd,SAAO;GACL,IAAI;GACJ,MAAM,OAAO;GACb,OAAO,0BAA0B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;GACxF;;AAGH,QAAO;EACL,IAAI;EACJ,MAAM,OAAO;EACb,QAAQ;EACR,YAAY;EACZ,SAAS;EACV"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { canonicalizeConfiguredMcpServer, normalizeConfiguredMcpServers } from "../../../config/mcp-config-normalize.js";
|
|
2
|
-
import { loadMergedBundleMcpConfig } from "../../../agent/mcp/bundle-mcp-config.js";
|
|
3
|
-
import { createBundleMcpToolRuntime, listBundleMcpServerToolsForGateway, mapBundleMcpToolsForGateway } from "../../../agent/mcp/bundle-mcp-materialize.js";
|
|
4
|
-
import { getWorkspacePath } from "../../../config/workspace-path-helpers.js";
|
|
5
|
-
//#region src/gateway/hono/routes/mcp.ts
|
|
6
|
-
function registerMcpRoutes(authenticated, deps) {
|
|
7
|
-
authenticated.get("/api/mcp/servers", (c) => {
|
|
8
|
-
const cfg = deps.service.currentConfig;
|
|
9
|
-
const merged = loadMergedBundleMcpConfig({
|
|
10
|
-
workspaceDir: getWorkspacePath(cfg) || "./workspace",
|
|
11
|
-
cfg
|
|
12
|
-
});
|
|
13
|
-
return c.json({
|
|
14
|
-
ok: true,
|
|
15
|
-
payload: {
|
|
16
|
-
servers: Object.keys(merged.config.mcpServers).sort(),
|
|
17
|
-
configured: normalizeConfiguredMcpServers(cfg.mcp?.servers)
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
authenticated.get("/api/mcp/servers/:id/tools", async (c) => {
|
|
22
|
-
const id = c.req.param("id");
|
|
23
|
-
const cfg = deps.service.currentConfig;
|
|
24
|
-
const workspaceDir = getWorkspacePath(cfg) || "./workspace";
|
|
25
|
-
try {
|
|
26
|
-
const tools = await listBundleMcpServerToolsForGateway({
|
|
27
|
-
workspaceDir,
|
|
28
|
-
cfg,
|
|
29
|
-
serverId: id
|
|
30
|
-
});
|
|
31
|
-
return c.json({
|
|
32
|
-
ok: true,
|
|
33
|
-
payload: { tools }
|
|
34
|
-
});
|
|
35
|
-
} catch (err) {
|
|
36
|
-
return c.json({
|
|
37
|
-
ok: false,
|
|
38
|
-
error: err instanceof Error ? err.message : String(err)
|
|
39
|
-
}, 500);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
authenticated.post("/api/mcp/servers/:id/test", async (c) => {
|
|
43
|
-
const id = c.req.param("id");
|
|
44
|
-
const cfg = deps.service.currentConfig;
|
|
45
|
-
const workspaceDir = getWorkspacePath(cfg) || "./workspace";
|
|
46
|
-
const body = await c.req.json().catch(() => ({}));
|
|
47
|
-
const inlineServer = body && typeof body === "object" && !Array.isArray(body) && body.server && typeof body.server === "object" ? body.server : void 0;
|
|
48
|
-
const servers = normalizeConfiguredMcpServers(cfg.mcp?.servers);
|
|
49
|
-
const mergedServers = loadMergedBundleMcpConfig({
|
|
50
|
-
workspaceDir,
|
|
51
|
-
cfg
|
|
52
|
-
}).config.mcpServers;
|
|
53
|
-
if (!(inlineServer ?? servers[id] ?? mergedServers[id])) return c.json({
|
|
54
|
-
ok: false,
|
|
55
|
-
error: `Unknown MCP server: ${id}`
|
|
56
|
-
}, 404);
|
|
57
|
-
try {
|
|
58
|
-
const runtime = await createBundleMcpToolRuntime({
|
|
59
|
-
workspaceDir,
|
|
60
|
-
cfg: inlineServer ? {
|
|
61
|
-
...cfg,
|
|
62
|
-
mcp: {
|
|
63
|
-
...cfg.mcp,
|
|
64
|
-
servers: { [id]: canonicalizeConfiguredMcpServer(inlineServer) }
|
|
65
|
-
}
|
|
66
|
-
} : cfg
|
|
67
|
-
});
|
|
68
|
-
const tools = mapBundleMcpToolsForGateway(runtime.tools, id);
|
|
69
|
-
await runtime.dispose();
|
|
70
|
-
return c.json({
|
|
71
|
-
ok: true,
|
|
72
|
-
payload: {
|
|
73
|
-
serverId: id,
|
|
74
|
-
toolCount: tools.length,
|
|
75
|
-
tools
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
} catch (err) {
|
|
79
|
-
return c.json({
|
|
80
|
-
ok: false,
|
|
81
|
-
error: err instanceof Error ? err.message : String(err)
|
|
82
|
-
}, 500);
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
authenticated.post("/api/mcp/approvals/respond", async (c) => {
|
|
86
|
-
const body = await c.req.json().catch(() => ({}));
|
|
87
|
-
return c.json({
|
|
88
|
-
ok: true,
|
|
89
|
-
payload: {
|
|
90
|
-
acknowledged: true,
|
|
91
|
-
body
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
//#endregion
|
|
97
|
-
export { registerMcpRoutes };
|
|
98
|
-
|
|
99
|
-
//# sourceMappingURL=mcp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","names":[],"sources":["../../../../../src/gateway/hono/routes/mcp.ts"],"sourcesContent":["import type { Hono } from 'hono';\nimport { getWorkspacePath } from '../../../config/workspace-path-helpers.js';\nimport { normalizeConfiguredMcpServers, canonicalizeConfiguredMcpServer } from '../../../config/mcp-config-normalize.js';\nimport { loadMergedBundleMcpConfig } from '../../../agent/mcp/bundle-mcp-config.js';\nimport {\n createBundleMcpToolRuntime,\n listBundleMcpServerToolsForGateway,\n mapBundleMcpToolsForGateway,\n} from '../../../agent/mcp/bundle-mcp-materialize.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\n\nexport function registerMcpRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n authenticated.get('/api/mcp/servers', (c) => {\n const cfg = deps.service.currentConfig;\n const workspaceDir = getWorkspacePath(cfg) || './workspace';\n const merged = loadMergedBundleMcpConfig({\n workspaceDir,\n cfg,\n });\n return c.json({\n ok: true,\n payload: {\n servers: Object.keys(merged.config.mcpServers).sort(),\n configured: normalizeConfiguredMcpServers(cfg.mcp?.servers),\n },\n });\n });\n\n authenticated.get('/api/mcp/servers/:id/tools', async (c) => {\n const id = c.req.param('id');\n const cfg = deps.service.currentConfig;\n const workspaceDir = getWorkspacePath(cfg) || './workspace';\n try {\n const tools = await listBundleMcpServerToolsForGateway({\n workspaceDir,\n cfg,\n serverId: id,\n });\n return c.json({ ok: true, payload: { tools } });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : String(err) },\n 500,\n );\n }\n });\n\n authenticated.post('/api/mcp/servers/:id/test', async (c) => {\n const id = c.req.param('id');\n const cfg = deps.service.currentConfig;\n const workspaceDir = getWorkspacePath(cfg) || './workspace';\n const body = await c.req.json().catch(() => ({}));\n const inlineServer =\n body && typeof body === 'object' && !Array.isArray(body) && body.server && typeof body.server === 'object'\n ? (body.server as Record<string, unknown>)\n : undefined;\n const servers = normalizeConfiguredMcpServers(cfg.mcp?.servers);\n const mergedServers = loadMergedBundleMcpConfig({ workspaceDir, cfg }).config.mcpServers;\n const knownServer =\n inlineServer ??\n (servers[id] as Record<string, unknown> | undefined) ??\n (mergedServers[id] as Record<string, unknown> | undefined);\n if (!knownServer) {\n return c.json({ ok: false, error: `Unknown MCP server: ${id}` }, 404);\n }\n try {\n const testCfg: typeof cfg = inlineServer\n ? {\n ...cfg,\n mcp: {\n ...cfg.mcp,\n servers: {\n [id]: canonicalizeConfiguredMcpServer(inlineServer),\n },\n },\n }\n : cfg;\n const runtime = await createBundleMcpToolRuntime({\n workspaceDir,\n cfg: testCfg,\n });\n const tools = mapBundleMcpToolsForGateway(runtime.tools, id);\n await runtime.dispose();\n return c.json({ ok: true, payload: { serverId: id, toolCount: tools.length, tools } });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : String(err) },\n 500,\n );\n }\n });\n\n authenticated.post('/api/mcp/approvals/respond', async (c) => {\n const body = await c.req.json().catch(() => ({}));\n return c.json({ ok: true, payload: { acknowledged: true, body } });\n });\n}\n"],"mappings":";;;;;AAWA,SAAgB,kBAAkB,eAAqB,MAAoC;AACzF,eAAc,IAAI,qBAAqB,MAAM;EAC3C,MAAM,MAAM,KAAK,QAAQ;EAEzB,MAAM,SAAS,0BAA0B;GACvC,cAFmB,iBAAiB,IAAI,IAAI;GAG5C;GACD,CAAC;AACF,SAAO,EAAE,KAAK;GACZ,IAAI;GACJ,SAAS;IACP,SAAS,OAAO,KAAK,OAAO,OAAO,WAAW,CAAC,MAAM;IACrD,YAAY,8BAA8B,IAAI,KAAK,QAAQ;IAC5D;GACF,CAAC;GACF;AAEF,eAAc,IAAI,8BAA8B,OAAO,MAAM;EAC3D,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK;EAC5B,MAAM,MAAM,KAAK,QAAQ;EACzB,MAAM,eAAe,iBAAiB,IAAI,IAAI;AAC9C,MAAI;GACF,MAAM,QAAQ,MAAM,mCAAmC;IACrD;IACA;IACA,UAAU;IACX,CAAC;AACF,UAAO,EAAE,KAAK;IAAE,IAAI;IAAM,SAAS,EAAE,OAAO;IAAE,CAAC;WACxC,KAAK;AACZ,UAAO,EAAE,KACP;IAAE,IAAI;IAAO,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;IAAE,EACtE,IACD;;GAEH;AAEF,eAAc,KAAK,6BAA6B,OAAO,MAAM;EAC3D,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK;EAC5B,MAAM,MAAM,KAAK,QAAQ;EACzB,MAAM,eAAe,iBAAiB,IAAI,IAAI;EAC9C,MAAM,OAAO,MAAM,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE;EACjD,MAAM,eACJ,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,KAAK,IAAI,KAAK,UAAU,OAAO,KAAK,WAAW,WAC7F,KAAK,SACN,KAAA;EACN,MAAM,UAAU,8BAA8B,IAAI,KAAK,QAAQ;EAC/D,MAAM,gBAAgB,0BAA0B;GAAE;GAAc;GAAK,CAAC,CAAC,OAAO;AAK9E,MAAI,EAHF,gBACC,QAAQ,OACR,cAAc,KAEf,QAAO,EAAE,KAAK;GAAE,IAAI;GAAO,OAAO,uBAAuB;GAAM,EAAE,IAAI;AAEvE,MAAI;GAYF,MAAM,UAAU,MAAM,2BAA2B;IAC/C;IACA,KAb0B,eACxB;KACE,GAAG;KACH,KAAK;MACH,GAAG,IAAI;MACP,SAAS,GACN,KAAK,gCAAgC,aAAa,EACpD;MACF;KACF,GACD;IAIH,CAAC;GACF,MAAM,QAAQ,4BAA4B,QAAQ,OAAO,GAAG;AAC5D,SAAM,QAAQ,SAAS;AACvB,UAAO,EAAE,KAAK;IAAE,IAAI;IAAM,SAAS;KAAE,UAAU;KAAI,WAAW,MAAM;KAAQ;KAAO;IAAE,CAAC;WAC/E,KAAK;AACZ,UAAO,EAAE,KACP;IAAE,IAAI;IAAO,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;IAAE,EACtE,IACD;;GAEH;AAEF,eAAc,KAAK,8BAA8B,OAAO,MAAM;EAC5D,MAAM,OAAO,MAAM,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE;AACjD,SAAO,EAAE,KAAK;GAAE,IAAI;GAAM,SAAS;IAAE,cAAc;IAAM;IAAM;GAAE,CAAC;GAClE"}
|