@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.
Files changed (134) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/agents-uwPn7ZW9.js +222 -0
  4. package/dist/gateway/static/root/assets/{apps-page-CIC8bmvZ.js → apps-page-CWKdhSPU.js} +1 -1
  5. package/dist/gateway/static/root/assets/channels-settings-hEhW7Mbk.js +1 -0
  6. package/dist/gateway/static/root/assets/{channels-status-swr-CYWL5DLD.js → channels-status-swr-XzddfJW2.js} +1 -1
  7. package/dist/gateway/static/root/assets/{cron-api-TVqLlGAC.js → cron-api--I8LJ44S.js} +1 -1
  8. package/dist/gateway/static/root/assets/cron-page-B0kvgZGR.js +1 -0
  9. package/dist/gateway/static/root/assets/{dist-CUV1uY5f.js → dist-CYgHMQO0.js} +1 -1
  10. package/dist/gateway/static/root/assets/{extension-debug-page-mTLHRDp1.js → extension-debug-page-6cRP0nA9.js} +1 -1
  11. package/dist/gateway/static/root/assets/{extension-page-iI8BI7WK.js → extension-page-DpwIkspI.js} +1 -1
  12. package/dist/gateway/static/root/assets/{extension-settings-page-ByXcdubM.js → extension-settings-page-DYbnQUxH.js} +1 -1
  13. package/dist/gateway/static/root/assets/{fetch-BWtQq_Ys.js → fetch-DTN0w7rV.js} +1 -1
  14. package/dist/gateway/static/root/assets/{field-primitives-BsZ-4VT5.js → field-primitives-CslW6HwD.js} +1 -1
  15. package/dist/gateway/static/root/assets/heartbeat-config-api-2UiKevxG.js +1 -0
  16. package/dist/gateway/static/root/assets/index-BUKUv7QW.css +1 -0
  17. package/dist/gateway/static/root/assets/{index-CKkR-v9U.js → index-DnevRVa6.js} +82 -82
  18. package/dist/gateway/static/root/assets/logs-page-sOP4TXJ4.js +1 -0
  19. package/dist/gateway/static/root/assets/{note-detail-page-DJ2Mb4x7.js → note-detail-page-DvW2qg4i.js} +3 -3
  20. package/dist/gateway/static/root/assets/{note-time-JLBPSLzK.js → note-time-BEiibLJv.js} +1 -1
  21. package/dist/gateway/static/root/assets/{notes-page-BE-75qz9.js → notes-page-BFQaquHU.js} +1 -1
  22. package/dist/gateway/static/root/assets/sessions-page-CptjDKAX.js +1 -0
  23. package/dist/gateway/static/root/assets/settings-advanced-gate-BctKqHcf.js +2 -0
  24. package/dist/gateway/static/root/assets/{settings-form-section-DSYCknxM.js → settings-form-section-QJh5ruel.js} +1 -1
  25. package/dist/gateway/static/root/assets/settings-page-V3p-hISB.js +2 -0
  26. package/dist/gateway/static/root/assets/{share-preview-page-awRqs4hV.js → share-preview-page-DBsvvbmD.js} +1 -1
  27. package/dist/gateway/static/root/assets/skills-page-q2zPUJAR.js +2 -0
  28. package/dist/gateway/static/root/assets/{theme-store-BC-42BoZ.js → theme-store-ht5iswWS.js} +1 -1
  29. package/dist/gateway/static/root/assets/{url-CY1RQKTU.js → url-CWWpfkq1.js} +2 -2
  30. package/dist/gateway/static/root/assets/{utils-DX3TQuap.js → utils-DhPv9xoB.js} +1 -1
  31. package/dist/gateway/static/root/assets/voice-api-key-field-DLSKUipa.js +1 -0
  32. package/dist/gateway/static/root/assets/{workflow-page.utils-ClC37yEp.js → workflow-page.utils-CJqnPWkW.js} +1 -1
  33. package/dist/gateway/static/root/assets/workflows-page-DRRQ1A0l.js +27 -0
  34. package/dist/gateway/static/root/index.html +5 -5
  35. package/dist/package.js +1 -1
  36. package/dist/src/agent/mcp/bundle-mcp-config.d.ts +2 -9
  37. package/dist/src/agent/mcp/bundle-mcp-config.js +10 -34
  38. package/dist/src/agent/mcp/bundle-mcp-config.js.map +1 -1
  39. package/dist/src/agent/mcp/bundle-mcp-policy.js +2 -2
  40. package/dist/src/agent/mcp/bundle-mcp-policy.js.map +1 -1
  41. package/dist/src/agent/mcp/bundle-mcp-runtime.js +4 -4
  42. package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +1 -1
  43. package/dist/src/agent/mcp/index.js +2 -2
  44. package/dist/src/cli/command-catalog.js +0 -4
  45. package/dist/src/cli/command-catalog.js.map +1 -1
  46. package/dist/src/cli/command-loaders.js +1 -2
  47. package/dist/src/cli/command-loaders.js.map +1 -1
  48. package/dist/src/cli/command-manifest.js +0 -4
  49. package/dist/src/cli/command-manifest.js.map +1 -1
  50. package/dist/src/config/index.d.ts +0 -1
  51. package/dist/src/config/index.js +1 -2
  52. package/dist/src/config/index.js.map +1 -1
  53. package/dist/src/config/schema.d.ts +36 -6
  54. package/dist/src/config/schema.js +13 -11
  55. package/dist/src/config/schema.js.map +1 -1
  56. package/dist/src/connectors/builtin-catalog.d.ts +2 -0
  57. package/dist/src/connectors/builtin-catalog.js +152 -0
  58. package/dist/src/connectors/builtin-catalog.js.map +1 -0
  59. package/dist/src/connectors/catalog.d.ts +5 -0
  60. package/dist/src/connectors/catalog.js +13 -0
  61. package/dist/src/connectors/catalog.js.map +1 -0
  62. package/dist/src/connectors/health.d.ts +3 -0
  63. package/dist/src/connectors/health.js +61 -0
  64. package/dist/src/connectors/health.js.map +1 -0
  65. package/dist/src/connectors/install.d.ts +5 -0
  66. package/dist/src/connectors/install.js +46 -0
  67. package/dist/src/connectors/install.js.map +1 -0
  68. package/dist/src/connectors/instances.d.ts +4 -0
  69. package/dist/src/connectors/instances.js +43 -0
  70. package/dist/src/connectors/instances.js.map +1 -0
  71. package/dist/src/connectors/materialize.d.ts +9 -0
  72. package/dist/src/connectors/materialize.js +76 -0
  73. package/dist/src/connectors/materialize.js.map +1 -0
  74. package/dist/src/connectors/oauth.d.ts +22 -0
  75. package/dist/src/connectors/oauth.js +99 -0
  76. package/dist/src/connectors/oauth.js.map +1 -0
  77. package/dist/src/connectors/providers.d.ts +9 -0
  78. package/dist/src/connectors/providers.js +20 -0
  79. package/dist/src/connectors/providers.js.map +1 -0
  80. package/dist/src/connectors/secret-store.d.ts +7 -0
  81. package/dist/src/connectors/secret-store.js +47 -0
  82. package/dist/src/connectors/secret-store.js.map +1 -0
  83. package/dist/src/connectors/types.d.ts +102 -0
  84. package/dist/src/connectors/types.js +1 -0
  85. package/dist/src/connectors/usage.d.ts +6 -0
  86. package/dist/src/connectors/usage.js +63 -0
  87. package/dist/src/connectors/usage.js.map +1 -0
  88. package/dist/src/gateway/heartbeat/service.js +1 -1
  89. package/dist/src/gateway/hono/routes/connectors.d.ts +3 -0
  90. package/dist/src/gateway/hono/routes/connectors.js +177 -0
  91. package/dist/src/gateway/hono/routes/connectors.js.map +1 -0
  92. package/dist/src/gateway/hono/routes/home.d.ts +12 -0
  93. package/dist/src/gateway/hono/routes/home.js +50 -0
  94. package/dist/src/gateway/hono/routes/home.js.map +1 -0
  95. package/dist/src/gateway/hono/routes/lazy-bundles.js +12 -4
  96. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  97. package/dist/src/gateway/hono/routes/notes.js +31 -0
  98. package/dist/src/gateway/hono/routes/notes.js.map +1 -1
  99. package/dist/src/heartbeat/index.js +1 -1
  100. package/dist/src/mcp/channel-bridge.js +1 -1
  101. package/dist/src/mcp/channel-bridge.js.map +1 -1
  102. package/dist/src/notes/index.d.ts +1 -1
  103. package/dist/src/notes/service.d.ts +11 -0
  104. package/dist/src/notes/service.js +42 -0
  105. package/dist/src/notes/service.js.map +1 -1
  106. package/dist/src/notes/store.d.ts +1 -0
  107. package/dist/src/notes/store.js +29 -4
  108. package/dist/src/notes/store.js.map +1 -1
  109. package/dist/src/notes/types.d.ts +39 -2
  110. package/dist/src/session/store.d.ts +2 -0
  111. package/dist/src/session/store.js +21 -1
  112. package/dist/src/session/store.js.map +1 -1
  113. package/package.json +1 -1
  114. package/dist/gateway/static/root/assets/agents-bVWUlrlD.js +0 -222
  115. package/dist/gateway/static/root/assets/channels-settings-C8G8RAAP.js +0 -1
  116. package/dist/gateway/static/root/assets/cron-dreaming-jobs-Ip703-qM.js +0 -2
  117. package/dist/gateway/static/root/assets/cron-page-BtcFYlvv.js +0 -1
  118. package/dist/gateway/static/root/assets/heartbeat-config-api-WjTsRLCU.js +0 -1
  119. package/dist/gateway/static/root/assets/index-VlELBY99.css +0 -1
  120. package/dist/gateway/static/root/assets/logs-page-ClnIpxfd.js +0 -1
  121. package/dist/gateway/static/root/assets/sessions-page-bJJkWtTl.js +0 -1
  122. package/dist/gateway/static/root/assets/settings-page-WcMXLq2U.js +0 -3
  123. package/dist/gateway/static/root/assets/skills-page-Lu-i1JG7.js +0 -2
  124. package/dist/gateway/static/root/assets/voice-api-key-field-B5uKlDqA.js +0 -1
  125. package/dist/gateway/static/root/assets/workflows-page-C7VhIXtR.js +0 -27
  126. package/dist/src/cli/commands/mcp.d.ts +0 -4
  127. package/dist/src/cli/commands/mcp.js +0 -85
  128. package/dist/src/cli/commands/mcp.js.map +0 -1
  129. package/dist/src/config/mcp-config.d.ts +0 -34
  130. package/dist/src/config/mcp-config.js +0 -116
  131. package/dist/src/config/mcp-config.js.map +0 -1
  132. package/dist/src/gateway/hono/routes/mcp.d.ts +0 -3
  133. package/dist/src/gateway/hono/routes/mcp.js +0 -99
  134. 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,3 +0,0 @@
1
- import type { Hono } from 'hono';
2
- import type { AuthenticatedRouteDeps } from './deps.js';
3
- export declare function registerMcpRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void;
@@ -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"}