@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.
- package/README.md +163 -210
- package/dist/async/dedup-map.d.ts +40 -0
- package/dist/async/dedup-map.d.ts.map +1 -0
- package/dist/async/dedup-map.js +80 -0
- package/dist/async/dedup-map.js.map +1 -0
- package/dist/async/index.d.ts +11 -0
- package/dist/async/index.d.ts.map +1 -0
- package/dist/async/index.js +11 -0
- package/dist/async/index.js.map +1 -0
- package/dist/async/loading-gate.d.ts +27 -0
- package/dist/async/loading-gate.d.ts.map +1 -0
- package/dist/async/loading-gate.js +48 -0
- package/dist/async/loading-gate.js.map +1 -0
- package/dist/async/with-timeout.d.ts +6 -0
- package/dist/async/with-timeout.d.ts.map +1 -0
- package/dist/async/with-timeout.js +17 -0
- package/dist/async/with-timeout.js.map +1 -0
- package/dist/auto-ui/beam/class-metadata.d.ts +52 -0
- package/dist/auto-ui/beam/class-metadata.d.ts.map +1 -0
- package/dist/auto-ui/beam/class-metadata.js +133 -0
- package/dist/auto-ui/beam/class-metadata.js.map +1 -0
- package/dist/auto-ui/beam/config.d.ts +13 -0
- package/dist/auto-ui/beam/config.d.ts.map +1 -0
- package/dist/auto-ui/beam/config.js +52 -0
- package/dist/auto-ui/beam/config.js.map +1 -0
- package/dist/auto-ui/beam/external-mcp.d.ts +37 -0
- package/dist/auto-ui/beam/external-mcp.d.ts.map +1 -0
- package/dist/auto-ui/beam/external-mcp.js +311 -0
- package/dist/auto-ui/beam/external-mcp.js.map +1 -0
- package/dist/auto-ui/beam/photon-management.d.ts +51 -0
- package/dist/auto-ui/beam/photon-management.d.ts.map +1 -0
- package/dist/auto-ui/beam/photon-management.js +310 -0
- package/dist/auto-ui/beam/photon-management.js.map +1 -0
- package/dist/auto-ui/beam/routes/api-browse.d.ts +17 -0
- package/dist/auto-ui/beam/routes/api-browse.d.ts.map +1 -0
- package/dist/auto-ui/beam/routes/api-browse.js +531 -0
- package/dist/auto-ui/beam/routes/api-browse.js.map +1 -0
- package/dist/auto-ui/beam/routes/api-config.d.ts +9 -0
- package/dist/auto-ui/beam/routes/api-config.d.ts.map +1 -0
- package/dist/auto-ui/beam/routes/api-config.js +494 -0
- package/dist/auto-ui/beam/routes/api-config.js.map +1 -0
- package/dist/auto-ui/beam/routes/api-marketplace.d.ts +8 -0
- package/dist/auto-ui/beam/routes/api-marketplace.d.ts.map +1 -0
- package/dist/auto-ui/beam/routes/api-marketplace.js +490 -0
- package/dist/auto-ui/beam/routes/api-marketplace.js.map +1 -0
- package/dist/auto-ui/beam/startup.d.ts +41 -0
- package/dist/auto-ui/beam/startup.d.ts.map +1 -0
- package/dist/auto-ui/beam/startup.js +98 -0
- package/dist/auto-ui/beam/startup.js.map +1 -0
- package/dist/auto-ui/beam/subscription.d.ts +35 -0
- package/dist/auto-ui/beam/subscription.d.ts.map +1 -0
- package/dist/auto-ui/beam/subscription.js +151 -0
- package/dist/auto-ui/beam/subscription.js.map +1 -0
- package/dist/auto-ui/beam/types.d.ts +103 -0
- package/dist/auto-ui/beam/types.d.ts.map +1 -0
- package/dist/auto-ui/beam/types.js +8 -0
- package/dist/auto-ui/beam/types.js.map +1 -0
- package/dist/auto-ui/beam.d.ts +2 -0
- package/dist/auto-ui/beam.d.ts.map +1 -1
- package/dist/auto-ui/beam.js +731 -2519
- package/dist/auto-ui/beam.js.map +1 -1
- package/dist/auto-ui/bridge/index.d.ts.map +1 -1
- package/dist/auto-ui/bridge/index.js +10 -2
- package/dist/auto-ui/bridge/index.js.map +1 -1
- package/dist/auto-ui/components/card.d.ts.map +1 -1
- package/dist/auto-ui/components/card.js +3 -1
- package/dist/auto-ui/components/card.js.map +1 -1
- package/dist/auto-ui/components/progress.d.ts.map +1 -1
- package/dist/auto-ui/components/progress.js.map +1 -1
- package/dist/auto-ui/daemon-tools.d.ts +1 -1
- package/dist/auto-ui/daemon-tools.d.ts.map +1 -1
- package/dist/auto-ui/daemon-tools.js +4 -3
- package/dist/auto-ui/daemon-tools.js.map +1 -1
- package/dist/auto-ui/photon-bridge.d.ts +6 -2
- package/dist/auto-ui/photon-bridge.d.ts.map +1 -1
- package/dist/auto-ui/photon-bridge.js +20 -8
- package/dist/auto-ui/photon-bridge.js.map +1 -1
- package/dist/auto-ui/platform-compat.d.ts.map +1 -1
- package/dist/auto-ui/platform-compat.js +4 -0
- package/dist/auto-ui/platform-compat.js.map +1 -1
- package/dist/auto-ui/streamable-http-transport.d.ts +4 -2
- package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
- package/dist/auto-ui/streamable-http-transport.js +120 -30
- package/dist/auto-ui/streamable-http-transport.js.map +1 -1
- package/dist/auto-ui/types.d.ts +4 -2
- package/dist/auto-ui/types.d.ts.map +1 -1
- package/dist/auto-ui/types.js +3 -0
- package/dist/auto-ui/types.js.map +1 -1
- package/dist/beam.bundle.js +9218 -4539
- package/dist/beam.bundle.js.map +4 -4
- package/dist/cli/commands/alias.d.ts +14 -0
- package/dist/cli/commands/alias.d.ts.map +1 -0
- package/dist/cli/commands/alias.js +41 -0
- package/dist/cli/commands/alias.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +9 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +377 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/beam.d.ts +20 -0
- package/dist/cli/commands/beam.d.ts.map +1 -0
- package/dist/cli/commands/beam.js +256 -0
- package/dist/cli/commands/beam.js.map +1 -0
- package/dist/cli/commands/config.d.ts +14 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +165 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +11 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +108 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +14 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +257 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/host.d.ts +11 -0
- package/dist/cli/commands/host.d.ts.map +1 -0
- package/dist/cli/commands/host.js +96 -0
- package/dist/cli/commands/host.js.map +1 -0
- package/dist/cli/commands/info.d.ts +1 -1
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +16 -15
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init.d.ts +20 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +774 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/maker.d.ts +12 -0
- package/dist/cli/commands/maker.d.ts.map +1 -0
- package/dist/cli/commands/maker.js +605 -0
- package/dist/cli/commands/maker.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +27 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +390 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/package-app.d.ts +1 -1
- package/dist/cli/commands/package-app.d.ts.map +1 -1
- package/dist/cli/commands/package-app.js +5 -4
- package/dist/cli/commands/package-app.js.map +1 -1
- package/dist/cli/commands/package.d.ts +1 -1
- package/dist/cli/commands/package.d.ts.map +1 -1
- package/dist/cli/commands/package.js +134 -32
- package/dist/cli/commands/package.js.map +1 -1
- package/dist/cli/commands/run.d.ts +34 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +334 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/search.d.ts +11 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +60 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +11 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +138 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/test.d.ts +14 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +51 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/commands/update.d.ts +11 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +72 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.d.ts +14 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +139 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli-alias.js +2 -2
- package/dist/cli-alias.js.map +1 -1
- package/dist/cli.d.ts +3 -16
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -2724
- package/dist/cli.js.map +1 -1
- package/dist/context-store.d.ts +13 -12
- package/dist/context-store.d.ts.map +1 -1
- package/dist/context-store.js +47 -23
- package/dist/context-store.js.map +1 -1
- package/dist/context.d.ts +35 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +38 -0
- package/dist/context.js.map +1 -0
- package/dist/daemon/client.d.ts +25 -13
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/client.js +183 -135
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/manager.d.ts +58 -26
- package/dist/daemon/manager.d.ts.map +1 -1
- package/dist/daemon/manager.js +348 -157
- package/dist/daemon/manager.js.map +1 -1
- package/dist/daemon/protocol.d.ts +9 -3
- package/dist/daemon/protocol.d.ts.map +1 -1
- package/dist/daemon/protocol.js +2 -0
- package/dist/daemon/protocol.js.map +1 -1
- package/dist/daemon/server.js +850 -200
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/session-manager.d.ts +16 -2
- package/dist/daemon/session-manager.d.ts.map +1 -1
- package/dist/daemon/session-manager.js +65 -7
- package/dist/daemon/session-manager.js.map +1 -1
- package/dist/daemon/state-machine.d.ts +22 -0
- package/dist/daemon/state-machine.d.ts.map +1 -0
- package/dist/daemon/state-machine.js +48 -0
- package/dist/daemon/state-machine.js.map +1 -0
- package/dist/deploy/cloudflare.d.ts.map +1 -1
- package/dist/deploy/cloudflare.js +5 -5
- package/dist/deploy/cloudflare.js.map +1 -1
- package/dist/loader.d.ts +65 -7
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +587 -63
- package/dist/loader.js.map +1 -1
- package/dist/marketplace-manager.d.ts +87 -13
- package/dist/marketplace-manager.d.ts.map +1 -1
- package/dist/marketplace-manager.js +476 -30
- package/dist/marketplace-manager.js.map +1 -1
- package/dist/path-resolver.d.ts +3 -1
- package/dist/path-resolver.d.ts.map +1 -1
- package/dist/path-resolver.js +4 -3
- package/dist/path-resolver.js.map +1 -1
- package/dist/photon-cli-runner.d.ts +1 -1
- package/dist/photon-cli-runner.d.ts.map +1 -1
- package/dist/photon-cli-runner.js +34 -44
- package/dist/photon-cli-runner.js.map +1 -1
- package/dist/photon-doc-extractor.d.ts +1 -0
- package/dist/photon-doc-extractor.d.ts.map +1 -1
- package/dist/photon-doc-extractor.js +62 -19
- package/dist/photon-doc-extractor.js.map +1 -1
- package/dist/photons/maker.photon.d.ts.map +1 -1
- package/dist/photons/maker.photon.js +4 -4
- package/dist/photons/maker.photon.js.map +1 -1
- package/dist/photons/maker.photon.ts +4 -3
- package/dist/photons/marketplace.photon.d.ts.map +1 -1
- package/dist/photons/marketplace.photon.js +10 -27
- package/dist/photons/marketplace.photon.js.map +1 -1
- package/dist/photons/marketplace.photon.ts +14 -33
- package/dist/photons/tunnel.photon.d.ts.map +1 -1
- package/dist/photons/tunnel.photon.js +4 -8
- package/dist/photons/tunnel.photon.js.map +1 -1
- package/dist/photons/tunnel.photon.ts +4 -7
- package/dist/serv/session/kv-store.d.ts +1 -1
- package/dist/serv/session/kv-store.d.ts.map +1 -1
- package/dist/serv/session/store.d.ts.map +1 -1
- package/dist/serv/session/store.js +16 -14
- package/dist/serv/session/store.js.map +1 -1
- package/dist/serv/vault/token-vault.js +1 -1
- package/dist/serv/vault/token-vault.js.map +1 -1
- package/dist/server.d.ts +34 -12
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +364 -313
- package/dist/server.js.map +1 -1
- package/dist/shared/audit.d.ts +30 -0
- package/dist/shared/audit.d.ts.map +1 -0
- package/dist/shared/audit.js +89 -0
- package/dist/shared/audit.js.map +1 -0
- package/dist/shared/cli-sections.d.ts +0 -4
- package/dist/shared/cli-sections.d.ts.map +1 -1
- package/dist/shared/cli-sections.js +0 -6
- package/dist/shared/cli-sections.js.map +1 -1
- package/dist/shared/cli-utils.d.ts +2 -56
- package/dist/shared/cli-utils.d.ts.map +1 -1
- package/dist/shared/cli-utils.js +1 -87
- package/dist/shared/cli-utils.js.map +1 -1
- package/dist/shared/error-handler.d.ts +6 -72
- package/dist/shared/error-handler.d.ts.map +1 -1
- package/dist/shared/error-handler.js +22 -213
- package/dist/shared/error-handler.js.map +1 -1
- package/dist/shared/security.d.ts +0 -9
- package/dist/shared/security.d.ts.map +1 -1
- package/dist/shared/security.js +0 -30
- package/dist/shared/security.js.map +1 -1
- package/dist/shared-utils.d.ts +0 -26
- package/dist/shared-utils.d.ts.map +1 -1
- package/dist/shared-utils.js +0 -44
- package/dist/shared-utils.js.map +1 -1
- package/dist/shell-completions.d.ts +1 -1
- package/dist/shell-completions.d.ts.map +1 -1
- package/dist/shell-completions.js +5 -5
- package/dist/shell-completions.js.map +1 -1
- package/dist/template-manager.d.ts.map +1 -1
- package/dist/template-manager.js +14 -1
- package/dist/template-manager.js.map +1 -1
- package/dist/test-runner.d.ts +0 -12
- package/dist/test-runner.d.ts.map +1 -1
- package/dist/test-runner.js +4 -39
- package/dist/test-runner.js.map +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +2 -2
- package/dist/testing.js.map +1 -1
- package/dist/version-checker.d.ts +4 -4
- package/dist/version-checker.d.ts.map +1 -1
- package/dist/version-checker.js +33 -4
- package/dist/version-checker.js.map +1 -1
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +14 -12
- package/dist/watcher.js.map +1 -1
- 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"}
|