@portel/photon 1.8.4 → 1.10.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.
Files changed (295) hide show
  1. package/README.md +163 -210
  2. package/dist/async/dedup-map.d.ts +40 -0
  3. package/dist/async/dedup-map.d.ts.map +1 -0
  4. package/dist/async/dedup-map.js +80 -0
  5. package/dist/async/dedup-map.js.map +1 -0
  6. package/dist/async/index.d.ts +11 -0
  7. package/dist/async/index.d.ts.map +1 -0
  8. package/dist/async/index.js +11 -0
  9. package/dist/async/index.js.map +1 -0
  10. package/dist/async/loading-gate.d.ts +27 -0
  11. package/dist/async/loading-gate.d.ts.map +1 -0
  12. package/dist/async/loading-gate.js +48 -0
  13. package/dist/async/loading-gate.js.map +1 -0
  14. package/dist/async/with-timeout.d.ts +6 -0
  15. package/dist/async/with-timeout.d.ts.map +1 -0
  16. package/dist/async/with-timeout.js +17 -0
  17. package/dist/async/with-timeout.js.map +1 -0
  18. package/dist/auto-ui/beam/class-metadata.d.ts +52 -0
  19. package/dist/auto-ui/beam/class-metadata.d.ts.map +1 -0
  20. package/dist/auto-ui/beam/class-metadata.js +133 -0
  21. package/dist/auto-ui/beam/class-metadata.js.map +1 -0
  22. package/dist/auto-ui/beam/config.d.ts +13 -0
  23. package/dist/auto-ui/beam/config.d.ts.map +1 -0
  24. package/dist/auto-ui/beam/config.js +52 -0
  25. package/dist/auto-ui/beam/config.js.map +1 -0
  26. package/dist/auto-ui/beam/external-mcp.d.ts +37 -0
  27. package/dist/auto-ui/beam/external-mcp.d.ts.map +1 -0
  28. package/dist/auto-ui/beam/external-mcp.js +311 -0
  29. package/dist/auto-ui/beam/external-mcp.js.map +1 -0
  30. package/dist/auto-ui/beam/photon-management.d.ts +51 -0
  31. package/dist/auto-ui/beam/photon-management.d.ts.map +1 -0
  32. package/dist/auto-ui/beam/photon-management.js +310 -0
  33. package/dist/auto-ui/beam/photon-management.js.map +1 -0
  34. package/dist/auto-ui/beam/routes/api-browse.d.ts +17 -0
  35. package/dist/auto-ui/beam/routes/api-browse.d.ts.map +1 -0
  36. package/dist/auto-ui/beam/routes/api-browse.js +531 -0
  37. package/dist/auto-ui/beam/routes/api-browse.js.map +1 -0
  38. package/dist/auto-ui/beam/routes/api-config.d.ts +9 -0
  39. package/dist/auto-ui/beam/routes/api-config.d.ts.map +1 -0
  40. package/dist/auto-ui/beam/routes/api-config.js +494 -0
  41. package/dist/auto-ui/beam/routes/api-config.js.map +1 -0
  42. package/dist/auto-ui/beam/routes/api-marketplace.d.ts +8 -0
  43. package/dist/auto-ui/beam/routes/api-marketplace.d.ts.map +1 -0
  44. package/dist/auto-ui/beam/routes/api-marketplace.js +490 -0
  45. package/dist/auto-ui/beam/routes/api-marketplace.js.map +1 -0
  46. package/dist/auto-ui/beam/startup.d.ts +41 -0
  47. package/dist/auto-ui/beam/startup.d.ts.map +1 -0
  48. package/dist/auto-ui/beam/startup.js +98 -0
  49. package/dist/auto-ui/beam/startup.js.map +1 -0
  50. package/dist/auto-ui/beam/subscription.d.ts +35 -0
  51. package/dist/auto-ui/beam/subscription.d.ts.map +1 -0
  52. package/dist/auto-ui/beam/subscription.js +151 -0
  53. package/dist/auto-ui/beam/subscription.js.map +1 -0
  54. package/dist/auto-ui/beam/types.d.ts +103 -0
  55. package/dist/auto-ui/beam/types.d.ts.map +1 -0
  56. package/dist/auto-ui/beam/types.js +8 -0
  57. package/dist/auto-ui/beam/types.js.map +1 -0
  58. package/dist/auto-ui/beam.d.ts +2 -0
  59. package/dist/auto-ui/beam.d.ts.map +1 -1
  60. package/dist/auto-ui/beam.js +731 -2519
  61. package/dist/auto-ui/beam.js.map +1 -1
  62. package/dist/auto-ui/bridge/index.d.ts.map +1 -1
  63. package/dist/auto-ui/bridge/index.js +10 -2
  64. package/dist/auto-ui/bridge/index.js.map +1 -1
  65. package/dist/auto-ui/components/card.d.ts.map +1 -1
  66. package/dist/auto-ui/components/card.js +3 -1
  67. package/dist/auto-ui/components/card.js.map +1 -1
  68. package/dist/auto-ui/components/progress.d.ts.map +1 -1
  69. package/dist/auto-ui/components/progress.js.map +1 -1
  70. package/dist/auto-ui/daemon-tools.d.ts +1 -1
  71. package/dist/auto-ui/daemon-tools.d.ts.map +1 -1
  72. package/dist/auto-ui/daemon-tools.js +4 -3
  73. package/dist/auto-ui/daemon-tools.js.map +1 -1
  74. package/dist/auto-ui/photon-bridge.d.ts +6 -2
  75. package/dist/auto-ui/photon-bridge.d.ts.map +1 -1
  76. package/dist/auto-ui/photon-bridge.js +20 -8
  77. package/dist/auto-ui/photon-bridge.js.map +1 -1
  78. package/dist/auto-ui/platform-compat.d.ts.map +1 -1
  79. package/dist/auto-ui/platform-compat.js +4 -0
  80. package/dist/auto-ui/platform-compat.js.map +1 -1
  81. package/dist/auto-ui/streamable-http-transport.d.ts +4 -2
  82. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
  83. package/dist/auto-ui/streamable-http-transport.js +120 -30
  84. package/dist/auto-ui/streamable-http-transport.js.map +1 -1
  85. package/dist/auto-ui/types.d.ts +4 -2
  86. package/dist/auto-ui/types.d.ts.map +1 -1
  87. package/dist/auto-ui/types.js +3 -0
  88. package/dist/auto-ui/types.js.map +1 -1
  89. package/dist/beam.bundle.js +9218 -4539
  90. package/dist/beam.bundle.js.map +4 -4
  91. package/dist/cli/commands/alias.d.ts +14 -0
  92. package/dist/cli/commands/alias.d.ts.map +1 -0
  93. package/dist/cli/commands/alias.js +41 -0
  94. package/dist/cli/commands/alias.js.map +1 -0
  95. package/dist/cli/commands/audit.d.ts +9 -0
  96. package/dist/cli/commands/audit.d.ts.map +1 -0
  97. package/dist/cli/commands/audit.js +377 -0
  98. package/dist/cli/commands/audit.js.map +1 -0
  99. package/dist/cli/commands/beam.d.ts +20 -0
  100. package/dist/cli/commands/beam.d.ts.map +1 -0
  101. package/dist/cli/commands/beam.js +256 -0
  102. package/dist/cli/commands/beam.js.map +1 -0
  103. package/dist/cli/commands/config.d.ts +14 -0
  104. package/dist/cli/commands/config.d.ts.map +1 -0
  105. package/dist/cli/commands/config.js +165 -0
  106. package/dist/cli/commands/config.js.map +1 -0
  107. package/dist/cli/commands/daemon.d.ts +11 -0
  108. package/dist/cli/commands/daemon.d.ts.map +1 -0
  109. package/dist/cli/commands/daemon.js +108 -0
  110. package/dist/cli/commands/daemon.js.map +1 -0
  111. package/dist/cli/commands/doctor.d.ts +14 -0
  112. package/dist/cli/commands/doctor.d.ts.map +1 -0
  113. package/dist/cli/commands/doctor.js +257 -0
  114. package/dist/cli/commands/doctor.js.map +1 -0
  115. package/dist/cli/commands/host.d.ts +11 -0
  116. package/dist/cli/commands/host.d.ts.map +1 -0
  117. package/dist/cli/commands/host.js +96 -0
  118. package/dist/cli/commands/host.js.map +1 -0
  119. package/dist/cli/commands/info.d.ts +1 -1
  120. package/dist/cli/commands/info.d.ts.map +1 -1
  121. package/dist/cli/commands/info.js +16 -15
  122. package/dist/cli/commands/info.js.map +1 -1
  123. package/dist/cli/commands/init.d.ts +20 -0
  124. package/dist/cli/commands/init.d.ts.map +1 -0
  125. package/dist/cli/commands/init.js +774 -0
  126. package/dist/cli/commands/init.js.map +1 -0
  127. package/dist/cli/commands/maker.d.ts +12 -0
  128. package/dist/cli/commands/maker.d.ts.map +1 -0
  129. package/dist/cli/commands/maker.js +605 -0
  130. package/dist/cli/commands/maker.js.map +1 -0
  131. package/dist/cli/commands/mcp.d.ts +27 -0
  132. package/dist/cli/commands/mcp.d.ts.map +1 -0
  133. package/dist/cli/commands/mcp.js +390 -0
  134. package/dist/cli/commands/mcp.js.map +1 -0
  135. package/dist/cli/commands/package-app.d.ts +1 -1
  136. package/dist/cli/commands/package-app.d.ts.map +1 -1
  137. package/dist/cli/commands/package-app.js +5 -4
  138. package/dist/cli/commands/package-app.js.map +1 -1
  139. package/dist/cli/commands/package.d.ts +1 -1
  140. package/dist/cli/commands/package.d.ts.map +1 -1
  141. package/dist/cli/commands/package.js +134 -32
  142. package/dist/cli/commands/package.js.map +1 -1
  143. package/dist/cli/commands/run.d.ts +34 -0
  144. package/dist/cli/commands/run.d.ts.map +1 -0
  145. package/dist/cli/commands/run.js +334 -0
  146. package/dist/cli/commands/run.js.map +1 -0
  147. package/dist/cli/commands/search.d.ts +11 -0
  148. package/dist/cli/commands/search.d.ts.map +1 -0
  149. package/dist/cli/commands/search.js +60 -0
  150. package/dist/cli/commands/search.js.map +1 -0
  151. package/dist/cli/commands/serve.d.ts +11 -0
  152. package/dist/cli/commands/serve.d.ts.map +1 -0
  153. package/dist/cli/commands/serve.js +138 -0
  154. package/dist/cli/commands/serve.js.map +1 -0
  155. package/dist/cli/commands/test.d.ts +14 -0
  156. package/dist/cli/commands/test.d.ts.map +1 -0
  157. package/dist/cli/commands/test.js +51 -0
  158. package/dist/cli/commands/test.js.map +1 -0
  159. package/dist/cli/commands/update.d.ts +11 -0
  160. package/dist/cli/commands/update.d.ts.map +1 -0
  161. package/dist/cli/commands/update.js +72 -0
  162. package/dist/cli/commands/update.js.map +1 -0
  163. package/dist/cli/index.d.ts +14 -0
  164. package/dist/cli/index.d.ts.map +1 -0
  165. package/dist/cli/index.js +139 -0
  166. package/dist/cli/index.js.map +1 -0
  167. package/dist/cli-alias.js +2 -2
  168. package/dist/cli-alias.js.map +1 -1
  169. package/dist/cli.d.ts +3 -16
  170. package/dist/cli.d.ts.map +1 -1
  171. package/dist/cli.js +4 -2724
  172. package/dist/cli.js.map +1 -1
  173. package/dist/context-store.d.ts +13 -12
  174. package/dist/context-store.d.ts.map +1 -1
  175. package/dist/context-store.js +47 -23
  176. package/dist/context-store.js.map +1 -1
  177. package/dist/context.d.ts +35 -0
  178. package/dist/context.d.ts.map +1 -0
  179. package/dist/context.js +38 -0
  180. package/dist/context.js.map +1 -0
  181. package/dist/daemon/client.d.ts +25 -13
  182. package/dist/daemon/client.d.ts.map +1 -1
  183. package/dist/daemon/client.js +183 -135
  184. package/dist/daemon/client.js.map +1 -1
  185. package/dist/daemon/manager.d.ts +58 -26
  186. package/dist/daemon/manager.d.ts.map +1 -1
  187. package/dist/daemon/manager.js +348 -157
  188. package/dist/daemon/manager.js.map +1 -1
  189. package/dist/daemon/protocol.d.ts +9 -3
  190. package/dist/daemon/protocol.d.ts.map +1 -1
  191. package/dist/daemon/protocol.js +2 -0
  192. package/dist/daemon/protocol.js.map +1 -1
  193. package/dist/daemon/server.js +850 -200
  194. package/dist/daemon/server.js.map +1 -1
  195. package/dist/daemon/session-manager.d.ts +16 -2
  196. package/dist/daemon/session-manager.d.ts.map +1 -1
  197. package/dist/daemon/session-manager.js +65 -7
  198. package/dist/daemon/session-manager.js.map +1 -1
  199. package/dist/daemon/state-machine.d.ts +22 -0
  200. package/dist/daemon/state-machine.d.ts.map +1 -0
  201. package/dist/daemon/state-machine.js +48 -0
  202. package/dist/daemon/state-machine.js.map +1 -0
  203. package/dist/deploy/cloudflare.d.ts.map +1 -1
  204. package/dist/deploy/cloudflare.js +5 -5
  205. package/dist/deploy/cloudflare.js.map +1 -1
  206. package/dist/loader.d.ts +65 -7
  207. package/dist/loader.d.ts.map +1 -1
  208. package/dist/loader.js +587 -63
  209. package/dist/loader.js.map +1 -1
  210. package/dist/marketplace-manager.d.ts +87 -13
  211. package/dist/marketplace-manager.d.ts.map +1 -1
  212. package/dist/marketplace-manager.js +476 -30
  213. package/dist/marketplace-manager.js.map +1 -1
  214. package/dist/path-resolver.d.ts +3 -1
  215. package/dist/path-resolver.d.ts.map +1 -1
  216. package/dist/path-resolver.js +4 -3
  217. package/dist/path-resolver.js.map +1 -1
  218. package/dist/photon-cli-runner.d.ts +1 -1
  219. package/dist/photon-cli-runner.d.ts.map +1 -1
  220. package/dist/photon-cli-runner.js +34 -44
  221. package/dist/photon-cli-runner.js.map +1 -1
  222. package/dist/photon-doc-extractor.d.ts +1 -0
  223. package/dist/photon-doc-extractor.d.ts.map +1 -1
  224. package/dist/photon-doc-extractor.js +62 -19
  225. package/dist/photon-doc-extractor.js.map +1 -1
  226. package/dist/photons/maker.photon.d.ts.map +1 -1
  227. package/dist/photons/maker.photon.js +4 -4
  228. package/dist/photons/maker.photon.js.map +1 -1
  229. package/dist/photons/maker.photon.ts +4 -3
  230. package/dist/photons/marketplace.photon.d.ts.map +1 -1
  231. package/dist/photons/marketplace.photon.js +10 -27
  232. package/dist/photons/marketplace.photon.js.map +1 -1
  233. package/dist/photons/marketplace.photon.ts +14 -33
  234. package/dist/photons/tunnel.photon.d.ts.map +1 -1
  235. package/dist/photons/tunnel.photon.js +4 -8
  236. package/dist/photons/tunnel.photon.js.map +1 -1
  237. package/dist/photons/tunnel.photon.ts +4 -7
  238. package/dist/serv/session/kv-store.d.ts +1 -1
  239. package/dist/serv/session/kv-store.d.ts.map +1 -1
  240. package/dist/serv/session/store.d.ts.map +1 -1
  241. package/dist/serv/session/store.js +16 -14
  242. package/dist/serv/session/store.js.map +1 -1
  243. package/dist/serv/vault/token-vault.js +1 -1
  244. package/dist/serv/vault/token-vault.js.map +1 -1
  245. package/dist/server.d.ts +34 -12
  246. package/dist/server.d.ts.map +1 -1
  247. package/dist/server.js +364 -313
  248. package/dist/server.js.map +1 -1
  249. package/dist/shared/audit.d.ts +30 -0
  250. package/dist/shared/audit.d.ts.map +1 -0
  251. package/dist/shared/audit.js +89 -0
  252. package/dist/shared/audit.js.map +1 -0
  253. package/dist/shared/cli-sections.d.ts +0 -4
  254. package/dist/shared/cli-sections.d.ts.map +1 -1
  255. package/dist/shared/cli-sections.js +0 -6
  256. package/dist/shared/cli-sections.js.map +1 -1
  257. package/dist/shared/cli-utils.d.ts +2 -56
  258. package/dist/shared/cli-utils.d.ts.map +1 -1
  259. package/dist/shared/cli-utils.js +1 -87
  260. package/dist/shared/cli-utils.js.map +1 -1
  261. package/dist/shared/error-handler.d.ts +6 -72
  262. package/dist/shared/error-handler.d.ts.map +1 -1
  263. package/dist/shared/error-handler.js +22 -213
  264. package/dist/shared/error-handler.js.map +1 -1
  265. package/dist/shared/security.d.ts +0 -9
  266. package/dist/shared/security.d.ts.map +1 -1
  267. package/dist/shared/security.js +0 -30
  268. package/dist/shared/security.js.map +1 -1
  269. package/dist/shared-utils.d.ts +0 -26
  270. package/dist/shared-utils.d.ts.map +1 -1
  271. package/dist/shared-utils.js +0 -44
  272. package/dist/shared-utils.js.map +1 -1
  273. package/dist/shell-completions.d.ts +1 -1
  274. package/dist/shell-completions.d.ts.map +1 -1
  275. package/dist/shell-completions.js +5 -5
  276. package/dist/shell-completions.js.map +1 -1
  277. package/dist/template-manager.d.ts.map +1 -1
  278. package/dist/template-manager.js +14 -1
  279. package/dist/template-manager.js.map +1 -1
  280. package/dist/test-runner.d.ts +0 -12
  281. package/dist/test-runner.d.ts.map +1 -1
  282. package/dist/test-runner.js +4 -39
  283. package/dist/test-runner.js.map +1 -1
  284. package/dist/testing.d.ts +1 -1
  285. package/dist/testing.d.ts.map +1 -1
  286. package/dist/testing.js +2 -2
  287. package/dist/testing.js.map +1 -1
  288. package/dist/version-checker.d.ts +4 -4
  289. package/dist/version-checker.d.ts.map +1 -1
  290. package/dist/version-checker.js +33 -4
  291. package/dist/version-checker.js.map +1 -1
  292. package/dist/watcher.d.ts.map +1 -1
  293. package/dist/watcher.js +14 -12
  294. package/dist/watcher.js.map +1 -1
  295. package/package.json +24 -17
@@ -0,0 +1,311 @@
1
+ /**
2
+ * External MCP management — connect, load, reconnect external MCP servers.
3
+ *
4
+ * Extracted from beam.ts. All shared state is passed explicitly via
5
+ * ExternalMCPState rather than module-level globals.
6
+ */
7
+ import { createHash } from 'crypto';
8
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
9
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
10
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
11
+ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
12
+ import { ElicitRequestSchema } from '@modelcontextprotocol/sdk/types.js';
13
+ import { SDKMCPClientFactory } from '@portel/photon-core';
14
+ import { logger } from '../../shared/logger.js';
15
+ import { requestExternalElicitation } from '../streamable-http-transport.js';
16
+ import { prettifyToolName } from './class-metadata.js';
17
+ import { withTimeout } from '../../async/index.js';
18
+ /**
19
+ * Generate a unique ID for an external MCP based on its name.
20
+ */
21
+ export function generateExternalMCPId(name) {
22
+ return createHash('sha256').update(`external:${name}`).digest('hex').slice(0, 12);
23
+ }
24
+ /**
25
+ * Create an HTTP transport for a URL-based MCP.
26
+ * Tries Streamable HTTP first; falls back to legacy SSE.
27
+ */
28
+ async function connectHTTPClient(url, mcpName) {
29
+ const sdkClient = new Client({ name: 'beam-mcp-client', version: '1.0.0' }, {
30
+ capabilities: {
31
+ elicitation: {},
32
+ experimental: {
33
+ ui: {},
34
+ },
35
+ },
36
+ });
37
+ sdkClient.setRequestHandler(ElicitRequestSchema, async (request) => {
38
+ const params = request.params;
39
+ const result = await requestExternalElicitation(mcpName, {
40
+ mode: params.mode,
41
+ message: params.message,
42
+ requestedSchema: params.requestedSchema,
43
+ url: params.url,
44
+ });
45
+ return result;
46
+ });
47
+ try {
48
+ const transport = new StreamableHTTPClientTransport(new URL(url));
49
+ const connectPromise = sdkClient.connect(transport);
50
+ await withTimeout(connectPromise, 10000, 'Connection timeout (10s)');
51
+ logger.debug(`Connected to ${url} via Streamable HTTP`);
52
+ return sdkClient;
53
+ }
54
+ catch (streamableError) {
55
+ logger.debug(`Streamable HTTP failed for ${url}, trying legacy SSE: ${String(streamableError)}`);
56
+ }
57
+ // Fallback: legacy SSE transport
58
+ const sseClient = new Client({ name: 'beam-mcp-client', version: '1.0.0' }, {
59
+ capabilities: {
60
+ elicitation: {},
61
+ experimental: {
62
+ ui: {},
63
+ },
64
+ },
65
+ });
66
+ sseClient.setRequestHandler(ElicitRequestSchema, async (request) => {
67
+ const params = request.params;
68
+ const result = await requestExternalElicitation(mcpName, {
69
+ mode: params.mode,
70
+ message: params.message,
71
+ requestedSchema: params.requestedSchema,
72
+ url: params.url,
73
+ });
74
+ return result;
75
+ });
76
+ const sseTransport = new SSEClientTransport(new URL(url));
77
+ const connectPromise = sseClient.connect(sseTransport);
78
+ await withTimeout(connectPromise, 10000, 'Connection timeout (10s)');
79
+ logger.debug(`Connected to ${url} via legacy SSE`);
80
+ return sseClient;
81
+ }
82
+ /** Extract tools → MethodInfo[] from an SDK client */
83
+ function toolsToMethods(tools) {
84
+ return tools.map((tool) => ({
85
+ name: tool.name,
86
+ description: tool.description || '',
87
+ params: tool.inputSchema || { type: 'object', properties: {} },
88
+ returns: { type: 'object' },
89
+ icon: tool['x-icon'],
90
+ linkedUi: tool._meta?.ui?.resourceUri,
91
+ visibility: tool._meta?.ui?.visibility,
92
+ }));
93
+ }
94
+ /** Detect MCP App resources from an SDK client */
95
+ async function detectMCPApps(sdkClient, methods, mcpInfo, name) {
96
+ try {
97
+ const resourcesResult = await sdkClient.listResources();
98
+ const resources = resourcesResult.resources || [];
99
+ const allUiResources = resources.filter((r) => r.uri?.startsWith('ui://') || r.mimeType === 'application/vnd.mcp.ui+html');
100
+ mcpInfo.resourceCount = resources.length - allUiResources.length;
101
+ const toolLinkedUris = new Set(methods.map((m) => m.linkedUi).filter(Boolean));
102
+ const standaloneResources = allUiResources.filter((r) => !toolLinkedUris.has(r.uri));
103
+ if (standaloneResources.length > 0) {
104
+ mcpInfo.hasApp = true;
105
+ mcpInfo.appResourceUri = standaloneResources[0].uri;
106
+ mcpInfo.appResourceUris = standaloneResources.map((r) => r.uri);
107
+ const uriList = mcpInfo.appResourceUris.join(', ');
108
+ logger.info(`🎨 MCP App detected: ${name} (${uriList})`);
109
+ }
110
+ }
111
+ catch {
112
+ logger.debug(`Resources not supported by ${name}`);
113
+ }
114
+ }
115
+ /**
116
+ * Load external MCPs from config.json mcpServers section.
117
+ *
118
+ * Populates state.externalMCPClients and state.externalMCPSDKClients as
119
+ * side effects. Returns the ExternalMCPInfo[] array to be pushed into
120
+ * state.externalMCPs by the caller.
121
+ */
122
+ export async function loadExternalMCPs(config, state) {
123
+ const mcpServers = config.mcpServers || {};
124
+ const results = [];
125
+ for (const [name, serverConfig] of Object.entries(mcpServers)) {
126
+ const mcpId = generateExternalMCPId(name);
127
+ const mcpInfo = {
128
+ type: 'external-mcp',
129
+ id: mcpId,
130
+ name,
131
+ connected: false,
132
+ methods: [],
133
+ label: prettifyToolName(name),
134
+ icon: '🔌',
135
+ config: serverConfig,
136
+ };
137
+ try {
138
+ let methods = [];
139
+ if (serverConfig.url) {
140
+ // HTTP transport — SDK client only
141
+ const sdkClient = await connectHTTPClient(serverConfig.url, name);
142
+ state.externalMCPSDKClients.set(name, sdkClient);
143
+ const toolsResult = await sdkClient.listTools();
144
+ methods = toolsToMethods(toolsResult.tools || []);
145
+ await detectMCPApps(sdkClient, methods, mcpInfo, name);
146
+ mcpInfo.connected = true;
147
+ mcpInfo.methods = methods;
148
+ }
149
+ else if (serverConfig.command) {
150
+ // Stdio transport
151
+ const mcpConfig = { mcpServers: { [name]: serverConfig } };
152
+ const factory = new SDKMCPClientFactory(mcpConfig, false);
153
+ const client = factory.create(name);
154
+ state.externalMCPClients.set(name, client);
155
+ try {
156
+ const sdkTransport = new StdioClientTransport({
157
+ command: serverConfig.command,
158
+ args: serverConfig.args,
159
+ cwd: serverConfig.cwd,
160
+ env: serverConfig.env,
161
+ stderr: 'ignore',
162
+ });
163
+ const sdkClient = new Client({ name: 'beam-mcp-client', version: '1.0.0' }, {
164
+ capabilities: {
165
+ elicitation: {},
166
+ experimental: { ui: {} },
167
+ },
168
+ });
169
+ sdkClient.setRequestHandler(ElicitRequestSchema, async (request) => {
170
+ const params = request.params;
171
+ const result = await requestExternalElicitation(name, {
172
+ mode: params.mode,
173
+ message: params.message,
174
+ requestedSchema: params.requestedSchema,
175
+ url: params.url,
176
+ });
177
+ return result;
178
+ });
179
+ const connectPromise = sdkClient.connect(sdkTransport);
180
+ await withTimeout(connectPromise, 10000, 'Connection timeout (10s)');
181
+ state.externalMCPSDKClients.set(name, sdkClient);
182
+ const toolsResult = await sdkClient.listTools();
183
+ methods = toolsToMethods(toolsResult.tools || []);
184
+ await detectMCPApps(sdkClient, methods, mcpInfo, name);
185
+ mcpInfo.connected = true;
186
+ mcpInfo.methods = methods;
187
+ }
188
+ catch (sdkError) {
189
+ throw sdkError;
190
+ }
191
+ }
192
+ else {
193
+ // No command or URL — wrapper client (legacy fallback)
194
+ const mcpConfig = { mcpServers: { [name]: serverConfig } };
195
+ const factory = new SDKMCPClientFactory(mcpConfig, false);
196
+ const client = factory.create(name);
197
+ state.externalMCPClients.set(name, client);
198
+ const tools = await client.list();
199
+ methods = (tools || []).map((tool) => ({
200
+ name: tool.name,
201
+ description: tool.description || '',
202
+ params: tool.inputSchema || { type: 'object', properties: {} },
203
+ returns: { type: 'object' },
204
+ icon: tool['x-icon'],
205
+ }));
206
+ mcpInfo.connected = true;
207
+ mcpInfo.methods = methods;
208
+ }
209
+ logger.info(`🔌 Connected to external MCP: ${name} (${methods.length} tools)`);
210
+ }
211
+ catch (error) {
212
+ const errorMsg = error instanceof Error ? error.message : String(error);
213
+ mcpInfo.errorMessage = errorMsg.slice(0, 200);
214
+ const shortMsg = errorMsg.includes('Cannot find module')
215
+ ? `Module not found (run npm build in the MCP directory)`
216
+ : errorMsg.includes('ENOENT')
217
+ ? `Command not found: ${serverConfig.command}`
218
+ : errorMsg.includes('Connection timeout')
219
+ ? `Connection timed out (server may not be running)`
220
+ : errorMsg.includes('Connection closed')
221
+ ? `Server exited immediately (check configuration)`
222
+ : errorMsg.slice(0, 120);
223
+ logger.warn(`⚠️ External MCP "${name}" — ${shortMsg}`);
224
+ }
225
+ results.push(mcpInfo);
226
+ }
227
+ return results;
228
+ }
229
+ /**
230
+ * Reconnect a failed external MCP.
231
+ *
232
+ * Uses re-find-after-await pattern for safe access to state.externalMCPs.
233
+ */
234
+ export async function reconnectExternalMCP(name, state) {
235
+ const mcpIndex = state.externalMCPs.findIndex((m) => m.name === name);
236
+ if (mcpIndex === -1) {
237
+ return { success: false, error: `External MCP not found: ${name}` };
238
+ }
239
+ const mcpConfig = state.externalMCPs[mcpIndex].config;
240
+ try {
241
+ let methods = [];
242
+ let resourceCount;
243
+ let hasApp;
244
+ let appResourceUri;
245
+ let appResourceUris;
246
+ if (mcpConfig.url) {
247
+ const sdkClient = await connectHTTPClient(mcpConfig.url, name);
248
+ state.externalMCPSDKClients.set(name, sdkClient);
249
+ const toolsResult = await sdkClient.listTools();
250
+ methods = toolsToMethods(toolsResult.tools || []);
251
+ try {
252
+ const resourcesResult = await sdkClient.listResources();
253
+ const resources = resourcesResult.resources || [];
254
+ const allUiResources = resources.filter((r) => r.uri?.startsWith('ui://') || r.mimeType === 'application/vnd.mcp.ui+html');
255
+ resourceCount = resources.length - allUiResources.length;
256
+ const toolLinkedUris = new Set(methods.map((m) => m.linkedUi).filter(Boolean));
257
+ const standaloneResources = allUiResources.filter((r) => !toolLinkedUris.has(r.uri));
258
+ if (standaloneResources.length > 0) {
259
+ hasApp = true;
260
+ appResourceUri = standaloneResources[0].uri;
261
+ appResourceUris = standaloneResources.map((r) => r.uri);
262
+ }
263
+ }
264
+ catch {
265
+ // Resources not supported
266
+ }
267
+ }
268
+ else {
269
+ // Stdio / wrapper transport
270
+ const stdioConfig = { mcpServers: { [name]: mcpConfig } };
271
+ const factory = new SDKMCPClientFactory(stdioConfig, false);
272
+ const client = factory.create(name);
273
+ const tools = (await withTimeout(client.list(), 10000, 'Connection timeout (10s)'));
274
+ methods = (tools || []).map((tool) => ({
275
+ name: tool.name,
276
+ description: tool.description || '',
277
+ params: tool.inputSchema || { type: 'object', properties: {} },
278
+ returns: { type: 'object' },
279
+ icon: tool['x-icon'],
280
+ }));
281
+ state.externalMCPClients.set(name, client);
282
+ }
283
+ // Re-find after awaits — externalMCPs may have been modified during connection
284
+ const currentIndex = state.externalMCPs.findIndex((m) => m.name === name);
285
+ if (currentIndex === -1) {
286
+ return { success: false, error: `External MCP '${name}' was removed during reconnection` };
287
+ }
288
+ const mcp = state.externalMCPs[currentIndex];
289
+ mcp.connected = true;
290
+ mcp.methods = methods;
291
+ mcp.errorMessage = undefined;
292
+ if (resourceCount !== undefined)
293
+ mcp.resourceCount = resourceCount;
294
+ if (hasApp !== undefined) {
295
+ mcp.hasApp = hasApp;
296
+ mcp.appResourceUri = appResourceUri;
297
+ mcp.appResourceUris = appResourceUris;
298
+ }
299
+ logger.info(`🔌 Reconnected to external MCP: ${name} (${methods.length} tools)`);
300
+ return { success: true };
301
+ }
302
+ catch (error) {
303
+ const errorMsg = error instanceof Error ? error.message : String(error);
304
+ const failedMcp = state.externalMCPs.find((m) => m.name === name);
305
+ if (failedMcp)
306
+ failedMcp.errorMessage = errorMsg.slice(0, 200);
307
+ logger.warn(`⚠️ Failed to reconnect to external MCP: ${name} - ${errorMsg}`);
308
+ return { success: false, error: errorMsg };
309
+ }
310
+ }
311
+ //# sourceMappingURL=external-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-mcp.js","sourceRoot":"","sources":["../../../src/auto-ui/beam/external-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Photon management operations — configure, reload, remove, update metadata, generate docs.
3
+ *
4
+ * Extracted from beam.ts. All functions take explicit parameters
5
+ * rather than relying on closure-captured state.
6
+ */
7
+ import { SchemaExtractor } from '@portel/photon-core';
8
+ import { PhotonLoader } from '../../loader.js';
9
+ import type { AnyPhotonInfo, PhotonInfo, MethodInfo, ConfigParam } from '../types.js';
10
+ import type { PhotonConfig } from './types.js';
11
+ declare function generatePhotonId(photonPath: string): string;
12
+ /** Build MethodInfo[] from extracted schemas + templates + source */
13
+ declare function buildMethodList(schemas: any[], templates: any[], source: string, uiAssets: any[]): MethodInfo[];
14
+ /** Extract constructor params as ConfigParam[] */
15
+ declare function extractConfigParams(extractor: SchemaExtractor, source: string, photonName: string): ConfigParam[];
16
+ /**
17
+ * Configure a photon via MCP — apply env vars, save config, reload.
18
+ */
19
+ export declare function configurePhotonViaMCP(photonName: string, config: Record<string, any>, photons: AnyPhotonInfo[], photonMCPs: Map<string, any>, loader: PhotonLoader, savedConfig: PhotonConfig, workingDir: string, activeLoads?: Set<string>): Promise<{
20
+ success: boolean;
21
+ error?: string;
22
+ }>;
23
+ /**
24
+ * Reload a photon via MCP — re-read source, rebuild methods, update in-place.
25
+ */
26
+ export declare function reloadPhotonViaMCP(photonName: string, photons: AnyPhotonInfo[], photonMCPs: Map<string, any>, loader: PhotonLoader, savedConfig: PhotonConfig, broadcastChange: () => void, activeLoads?: Set<string>): Promise<{
27
+ success: boolean;
28
+ photon?: PhotonInfo;
29
+ error?: string;
30
+ }>;
31
+ /**
32
+ * Remove a photon — delete from arrays/maps, clear saved config.
33
+ */
34
+ export declare function removePhotonViaMCP(photonName: string, photons: AnyPhotonInfo[], photonMCPs: Map<string, any>, savedConfig: PhotonConfig, broadcastChange: () => void, workingDir: string): Promise<{
35
+ success: boolean;
36
+ error?: string;
37
+ }>;
38
+ /**
39
+ * Update photon or method metadata in-place.
40
+ */
41
+ export declare function updateMetadataViaMCP(photonName: string, methodName: string | null, metadata: Record<string, any>, photons: AnyPhotonInfo[]): Promise<{
42
+ success: boolean;
43
+ error?: string;
44
+ }>;
45
+ /**
46
+ * Generate rich help markdown for a photon.
47
+ * Checks for an existing .md file first; generates and saves one if missing.
48
+ */
49
+ export declare function generatePhotonHelpMarkdown(photonName: string, photons: AnyPhotonInfo[]): Promise<string>;
50
+ export { buildMethodList, extractConfigParams, generatePhotonId };
51
+ //# sourceMappingURL=photon-management.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photon-management.d.ts","sourceRoot":"","sources":["../../../src/auto-ui/beam/photon-management.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,eAAe,EAAyB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAY/C,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,iBAAS,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,qEAAqE;AACrE,iBAAS,eAAe,CACtB,OAAO,EAAE,GAAG,EAAE,EACd,SAAS,EAAE,GAAG,EAAE,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,GAAG,EAAE,GACd,UAAU,EAAE,CAqCd;AAED,kDAAkD;AAClD,iBAAS,mBAAmB,CAC1B,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW,EAAE,CAgBf;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,EAAE,aAAa,EAAE,EACxB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,YAAY,EACzB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiF/C;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,EAAE,EACxB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,YAAY,EACzB,eAAe,EAAE,MAAM,IAAI,EAC3B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8EpE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,EAAE,EACxB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,WAAW,EAAE,YAAY,EACzB,eAAe,EAAE,MAAM,IAAI,EAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB/C;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgC/C;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,MAAM,CAAC,CAyCjB;AAGD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAC"}