@portel/photon-core 1.5.0 → 2.1.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 (163) hide show
  1. package/dist/auto-ui.js +1 -1
  2. package/dist/auto-ui.js.map +1 -1
  3. package/dist/base.d.ts +1 -1
  4. package/dist/base.d.ts.map +1 -1
  5. package/dist/base.js +2 -2
  6. package/dist/base.js.map +1 -1
  7. package/dist/cli-ui-renderer.js +1 -1
  8. package/dist/cli-ui-renderer.js.map +1 -1
  9. package/dist/design-system/index.d.ts +21 -0
  10. package/dist/design-system/index.d.ts.map +1 -0
  11. package/dist/design-system/index.js +27 -0
  12. package/dist/design-system/index.js.map +1 -0
  13. package/dist/design-system/tokens.d.ts +149 -0
  14. package/dist/design-system/tokens.d.ts.map +1 -0
  15. package/dist/design-system/tokens.js +413 -0
  16. package/dist/design-system/tokens.js.map +1 -0
  17. package/dist/design-system/transaction-ui.d.ts +70 -0
  18. package/dist/design-system/transaction-ui.d.ts.map +1 -0
  19. package/dist/design-system/transaction-ui.js +982 -0
  20. package/dist/design-system/transaction-ui.js.map +1 -0
  21. package/dist/generator.d.ts +56 -6
  22. package/dist/generator.d.ts.map +1 -1
  23. package/dist/generator.js.map +1 -1
  24. package/dist/index.d.ts +6 -7
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +46 -56
  27. package/dist/index.js.map +1 -1
  28. package/dist/io.d.ts +103 -2
  29. package/dist/io.d.ts.map +1 -1
  30. package/dist/io.js +37 -1
  31. package/dist/io.js.map +1 -1
  32. package/dist/rendering/components.d.ts +29 -0
  33. package/dist/rendering/components.d.ts.map +1 -0
  34. package/dist/rendering/components.js +773 -0
  35. package/dist/rendering/components.js.map +1 -0
  36. package/dist/rendering/field-analyzer.d.ts +48 -0
  37. package/dist/rendering/field-analyzer.d.ts.map +1 -0
  38. package/dist/rendering/field-analyzer.js +270 -0
  39. package/dist/rendering/field-analyzer.js.map +1 -0
  40. package/dist/rendering/field-renderers.d.ts +64 -0
  41. package/dist/rendering/field-renderers.d.ts.map +1 -0
  42. package/dist/rendering/field-renderers.js +317 -0
  43. package/dist/rendering/field-renderers.js.map +1 -0
  44. package/dist/rendering/index.d.ts +28 -0
  45. package/dist/rendering/index.d.ts.map +1 -0
  46. package/dist/rendering/index.js +60 -0
  47. package/dist/rendering/index.js.map +1 -0
  48. package/dist/rendering/layout-selector.d.ts +48 -0
  49. package/dist/rendering/layout-selector.d.ts.map +1 -0
  50. package/dist/rendering/layout-selector.js +347 -0
  51. package/dist/rendering/layout-selector.js.map +1 -0
  52. package/dist/rendering/template-engine.d.ts +41 -0
  53. package/dist/rendering/template-engine.d.ts.map +1 -0
  54. package/dist/rendering/template-engine.js +236 -0
  55. package/dist/rendering/template-engine.js.map +1 -0
  56. package/dist/schema-extractor.d.ts +30 -0
  57. package/dist/schema-extractor.d.ts.map +1 -1
  58. package/dist/schema-extractor.js +205 -12
  59. package/dist/schema-extractor.js.map +1 -1
  60. package/dist/stateful.js +1 -1
  61. package/dist/stateful.js.map +1 -1
  62. package/dist/types.d.ts +9 -1
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/types.js.map +1 -1
  65. package/dist/ucp/ap2/handlers.d.ts +242 -0
  66. package/dist/ucp/ap2/handlers.d.ts.map +1 -0
  67. package/dist/ucp/ap2/handlers.js +482 -0
  68. package/dist/ucp/ap2/handlers.js.map +1 -0
  69. package/dist/ucp/ap2/mandates.d.ts +95 -0
  70. package/dist/ucp/ap2/mandates.d.ts.map +1 -0
  71. package/dist/ucp/ap2/mandates.js +234 -0
  72. package/dist/ucp/ap2/mandates.js.map +1 -0
  73. package/dist/ucp/ap2/types.d.ts +305 -0
  74. package/dist/ucp/ap2/types.d.ts.map +1 -0
  75. package/dist/ucp/ap2/types.js +8 -0
  76. package/dist/ucp/ap2/types.js.map +1 -0
  77. package/dist/ucp/capabilities/checkout.d.ts +118 -0
  78. package/dist/ucp/capabilities/checkout.d.ts.map +1 -0
  79. package/dist/ucp/capabilities/checkout.js +344 -0
  80. package/dist/ucp/capabilities/checkout.js.map +1 -0
  81. package/dist/ucp/capabilities/identity.d.ts +130 -0
  82. package/dist/ucp/capabilities/identity.d.ts.map +1 -0
  83. package/dist/ucp/capabilities/identity.js +290 -0
  84. package/dist/ucp/capabilities/identity.js.map +1 -0
  85. package/dist/ucp/capabilities/order.d.ts +142 -0
  86. package/dist/ucp/capabilities/order.d.ts.map +1 -0
  87. package/dist/ucp/capabilities/order.js +383 -0
  88. package/dist/ucp/capabilities/order.js.map +1 -0
  89. package/dist/ucp/index.d.ts +18 -0
  90. package/dist/ucp/index.d.ts.map +1 -0
  91. package/dist/ucp/index.js +19 -0
  92. package/dist/ucp/index.js.map +1 -0
  93. package/dist/ucp/manifest.d.ts +62 -0
  94. package/dist/ucp/manifest.d.ts.map +1 -0
  95. package/dist/ucp/manifest.js +180 -0
  96. package/dist/ucp/manifest.js.map +1 -0
  97. package/dist/ucp/types.d.ts +327 -0
  98. package/dist/ucp/types.d.ts.map +1 -0
  99. package/dist/ucp/types.js +8 -0
  100. package/dist/ucp/types.js.map +1 -0
  101. package/package.json +3 -4
  102. package/src/auto-ui.ts +1 -1
  103. package/src/base.ts +2 -2
  104. package/src/cli-ui-renderer.ts +1 -1
  105. package/src/design-system/index.ts +30 -0
  106. package/src/design-system/tokens.ts +451 -0
  107. package/src/design-system/transaction-ui.ts +1038 -0
  108. package/src/generator.ts +58 -2
  109. package/src/index.ts +135 -124
  110. package/src/io.ts +108 -3
  111. package/src/rendering/components.ts +785 -0
  112. package/src/rendering/field-analyzer.ts +299 -0
  113. package/src/rendering/field-renderers.ts +356 -0
  114. package/src/rendering/index.ts +63 -0
  115. package/src/rendering/layout-selector.ts +390 -0
  116. package/src/rendering/template-engine.ts +254 -0
  117. package/src/schema-extractor.ts +225 -12
  118. package/src/stateful.ts +1 -1
  119. package/src/types.ts +10 -1
  120. package/src/ucp/ap2/handlers.ts +779 -0
  121. package/src/ucp/ap2/mandates.ts +354 -0
  122. package/src/ucp/ap2/types.ts +441 -0
  123. package/src/ucp/capabilities/checkout.ts +497 -0
  124. package/src/ucp/capabilities/identity.ts +425 -0
  125. package/src/ucp/capabilities/order.ts +549 -0
  126. package/src/ucp/index.ts +27 -0
  127. package/src/ucp/manifest.ts +257 -0
  128. package/src/ucp/types.ts +454 -0
  129. package/dist/cli-formatter.d.ts +0 -92
  130. package/dist/cli-formatter.d.ts.map +0 -1
  131. package/dist/cli-formatter.js +0 -486
  132. package/dist/cli-formatter.js.map +0 -1
  133. package/dist/context.d.ts +0 -6
  134. package/dist/context.d.ts.map +0 -1
  135. package/dist/context.js +0 -3
  136. package/dist/context.js.map +0 -1
  137. package/dist/elicit.d.ts +0 -93
  138. package/dist/elicit.d.ts.map +0 -1
  139. package/dist/elicit.js +0 -373
  140. package/dist/elicit.js.map +0 -1
  141. package/dist/mcp-client.d.ts +0 -218
  142. package/dist/mcp-client.d.ts.map +0 -1
  143. package/dist/mcp-client.js +0 -424
  144. package/dist/mcp-client.js.map +0 -1
  145. package/dist/mcp-sdk-transport.d.ts +0 -88
  146. package/dist/mcp-sdk-transport.d.ts.map +0 -1
  147. package/dist/mcp-sdk-transport.js +0 -360
  148. package/dist/mcp-sdk-transport.js.map +0 -1
  149. package/dist/photon-config.d.ts +0 -86
  150. package/dist/photon-config.d.ts.map +0 -1
  151. package/dist/photon-config.js +0 -156
  152. package/dist/photon-config.js.map +0 -1
  153. package/dist/progress.d.ts +0 -93
  154. package/dist/progress.d.ts.map +0 -1
  155. package/dist/progress.js +0 -195
  156. package/dist/progress.js.map +0 -1
  157. package/src/cli-formatter.ts +0 -579
  158. package/src/context.ts +0 -7
  159. package/src/elicit.ts +0 -438
  160. package/src/mcp-client.ts +0 -561
  161. package/src/mcp-sdk-transport.ts +0 -449
  162. package/src/photon-config.ts +0 -201
  163. package/src/progress.ts +0 -224
@@ -1,218 +0,0 @@
1
- /**
2
- * MCP Protocol Client for Photons
3
- *
4
- * Enables Photons to call external MCPs via the MCP protocol.
5
- * This is runtime-agnostic - the actual transport is provided by the runtime (NCP, Lumina, etc.)
6
- *
7
- * Usage in Photon:
8
- * ```typescript
9
- * export default class MyPhoton extends PhotonMCP {
10
- * async doSomething() {
11
- * const github = this.mcp('github');
12
- * const issues = await github.call('list_issues', { repo: 'foo/bar' });
13
- * }
14
- * }
15
- * ```
16
- */
17
- /**
18
- * Tool information returned from MCP discovery
19
- */
20
- export interface MCPToolInfo {
21
- name: string;
22
- description?: string;
23
- inputSchema?: {
24
- type: 'object';
25
- properties?: Record<string, any>;
26
- required?: string[];
27
- };
28
- }
29
- /**
30
- * Result from an MCP tool call
31
- */
32
- export interface MCPToolResult {
33
- content: Array<{
34
- type: 'text' | 'image' | 'resource';
35
- text?: string;
36
- data?: string;
37
- mimeType?: string;
38
- }>;
39
- isError?: boolean;
40
- }
41
- /**
42
- * Interface that runtimes must implement to provide MCP connectivity
43
- * This keeps photon-core runtime-agnostic
44
- */
45
- export interface MCPTransport {
46
- /**
47
- * Call a tool on an MCP server
48
- * @param mcpName The MCP server name
49
- * @param toolName The tool to call
50
- * @param parameters Tool parameters
51
- */
52
- callTool(mcpName: string, toolName: string, parameters: Record<string, any>): Promise<MCPToolResult>;
53
- /**
54
- * List available tools on an MCP server
55
- * @param mcpName The MCP server name
56
- */
57
- listTools(mcpName: string): Promise<MCPToolInfo[]>;
58
- /**
59
- * Check if an MCP server is connected/available
60
- * @param mcpName The MCP server name
61
- */
62
- isConnected(mcpName: string): Promise<boolean>;
63
- }
64
- /**
65
- * Factory interface for creating MCP clients
66
- * Runtimes implement this to provide MCP access to Photons
67
- */
68
- export interface MCPClientFactory {
69
- /**
70
- * Create an MCP client for a specific server
71
- * @param mcpName The MCP server name
72
- */
73
- create(mcpName: string): MCPClient;
74
- /**
75
- * List all available MCP servers
76
- */
77
- listServers(): Promise<string[]>;
78
- }
79
- /**
80
- * MCP Client - Protocol wrapper for calling external MCPs
81
- *
82
- * Provides a clean async interface for Photons to call MCP tools.
83
- * The actual protocol communication is handled by the transport layer.
84
- */
85
- export declare class MCPClient {
86
- private mcpName;
87
- private transport;
88
- private toolsCache;
89
- constructor(mcpName: string, transport: MCPTransport);
90
- /**
91
- * Get the MCP server name
92
- */
93
- get name(): string;
94
- /**
95
- * Call a tool on this MCP server
96
- *
97
- * @param toolName The tool to call
98
- * @param parameters Tool parameters
99
- * @returns Tool result (parsed from MCP response)
100
- *
101
- * @example
102
- * ```typescript
103
- * const github = this.mcp('github');
104
- * const issues = await github.call('list_issues', { repo: 'owner/repo', state: 'open' });
105
- * ```
106
- */
107
- call(toolName: string, parameters?: Record<string, any>): Promise<any>;
108
- /**
109
- * List all available tools on this MCP server
110
- *
111
- * @returns Array of tool information
112
- *
113
- * @example
114
- * ```typescript
115
- * const github = this.mcp('github');
116
- * const tools = await github.list();
117
- * // [{ name: 'list_issues', description: '...' }, ...]
118
- * ```
119
- */
120
- list(): Promise<MCPToolInfo[]>;
121
- /**
122
- * Find tools matching a query
123
- *
124
- * @param query Search query (matches name or description)
125
- * @returns Matching tools
126
- *
127
- * @example
128
- * ```typescript
129
- * const github = this.mcp('github');
130
- * const issueTools = await github.find('issue');
131
- * ```
132
- */
133
- find(query: string): Promise<MCPToolInfo[]>;
134
- /**
135
- * Check if this MCP server is connected
136
- */
137
- isConnected(): Promise<boolean>;
138
- /**
139
- * Clear the tools cache (useful after reconnection)
140
- */
141
- clearCache(): void;
142
- /**
143
- * Parse MCP tool result into a usable value
144
- */
145
- private parseResult;
146
- }
147
- /**
148
- * Base class for MCP-related errors
149
- */
150
- export declare class MCPError extends Error {
151
- readonly mcpName: string;
152
- constructor(mcpName: string, message: string);
153
- }
154
- /**
155
- * Error thrown when MCP server is not connected
156
- */
157
- export declare class MCPNotConnectedError extends MCPError {
158
- constructor(mcpName: string);
159
- }
160
- /**
161
- * Error thrown when MCP tool call fails
162
- */
163
- export declare class MCPToolError extends MCPError {
164
- readonly toolName: string;
165
- readonly details: string;
166
- constructor(mcpName: string, toolName: string, details: string);
167
- }
168
- /**
169
- * MCP source type - how the MCP was declared
170
- */
171
- export type MCPSourceType = 'npm' | 'github' | 'local' | 'url' | 'unknown';
172
- /**
173
- * Information about a missing MCP dependency
174
- */
175
- export interface MissingMCPInfo {
176
- name: string;
177
- source: string;
178
- sourceType: MCPSourceType;
179
- declaredIn?: string;
180
- originalError?: string;
181
- }
182
- /**
183
- * Error thrown when MCP is not configured correctly
184
- * Provides detailed, actionable guidance for users
185
- */
186
- export declare class MCPConfigurationError extends MCPError {
187
- readonly configPath: string;
188
- readonly missingMCPs: MissingMCPInfo[];
189
- constructor(missingMCPs: MissingMCPInfo[]);
190
- /**
191
- * Format detailed error message with configuration instructions
192
- */
193
- private static formatMessage;
194
- /**
195
- * Generate example JSON config for missing MCPs
196
- */
197
- private static generateExampleConfig;
198
- /**
199
- * Get example server config based on source type
200
- */
201
- private static getExampleServerConfig;
202
- /**
203
- * Get source-type specific guidance
204
- */
205
- private static getSourceTypeGuide;
206
- }
207
- /**
208
- * Create a proxy-based MCP client that allows direct method calls
209
- *
210
- * This enables a more fluent API:
211
- * ```typescript
212
- * const github = this.mcp('github');
213
- * // Instead of: await github.call('list_issues', { repo: 'foo/bar' })
214
- * // You can do: await github.list_issues({ repo: 'foo/bar' })
215
- * ```
216
- */
217
- export declare function createMCPProxy(client: MCPClient): MCPClient & Record<string, (params?: any) => Promise<any>>;
218
- //# sourceMappingURL=mcp-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
@@ -1,424 +0,0 @@
1
- /**
2
- * MCP Protocol Client for Photons
3
- *
4
- * Enables Photons to call external MCPs via the MCP protocol.
5
- * This is runtime-agnostic - the actual transport is provided by the runtime (NCP, Lumina, etc.)
6
- *
7
- * Usage in Photon:
8
- * ```typescript
9
- * export default class MyPhoton extends PhotonMCP {
10
- * async doSomething() {
11
- * const github = this.mcp('github');
12
- * const issues = await github.call('list_issues', { repo: 'foo/bar' });
13
- * }
14
- * }
15
- * ```
16
- */
17
- /**
18
- * MCP Client - Protocol wrapper for calling external MCPs
19
- *
20
- * Provides a clean async interface for Photons to call MCP tools.
21
- * The actual protocol communication is handled by the transport layer.
22
- */
23
- export class MCPClient {
24
- mcpName;
25
- transport;
26
- toolsCache = null;
27
- constructor(mcpName, transport) {
28
- this.mcpName = mcpName;
29
- this.transport = transport;
30
- }
31
- /**
32
- * Get the MCP server name
33
- */
34
- get name() {
35
- return this.mcpName;
36
- }
37
- /**
38
- * Call a tool on this MCP server
39
- *
40
- * @param toolName The tool to call
41
- * @param parameters Tool parameters
42
- * @returns Tool result (parsed from MCP response)
43
- *
44
- * @example
45
- * ```typescript
46
- * const github = this.mcp('github');
47
- * const issues = await github.call('list_issues', { repo: 'owner/repo', state: 'open' });
48
- * ```
49
- */
50
- async call(toolName, parameters = {}) {
51
- // Check connection first
52
- const connected = await this.transport.isConnected(this.mcpName);
53
- if (!connected) {
54
- throw new MCPNotConnectedError(this.mcpName);
55
- }
56
- try {
57
- const result = await this.transport.callTool(this.mcpName, toolName, parameters);
58
- if (result.isError) {
59
- const errorText = result.content.find(c => c.type === 'text')?.text || 'Unknown error';
60
- throw new MCPToolError(this.mcpName, toolName, errorText);
61
- }
62
- // Extract and parse the result
63
- return this.parseResult(result);
64
- }
65
- catch (error) {
66
- if (error instanceof MCPError) {
67
- throw error;
68
- }
69
- throw new MCPToolError(this.mcpName, toolName, error instanceof Error ? error.message : String(error));
70
- }
71
- }
72
- /**
73
- * List all available tools on this MCP server
74
- *
75
- * @returns Array of tool information
76
- *
77
- * @example
78
- * ```typescript
79
- * const github = this.mcp('github');
80
- * const tools = await github.list();
81
- * // [{ name: 'list_issues', description: '...' }, ...]
82
- * ```
83
- */
84
- async list() {
85
- if (this.toolsCache) {
86
- return this.toolsCache;
87
- }
88
- const connected = await this.transport.isConnected(this.mcpName);
89
- if (!connected) {
90
- throw new MCPNotConnectedError(this.mcpName);
91
- }
92
- this.toolsCache = await this.transport.listTools(this.mcpName);
93
- return this.toolsCache;
94
- }
95
- /**
96
- * Find tools matching a query
97
- *
98
- * @param query Search query (matches name or description)
99
- * @returns Matching tools
100
- *
101
- * @example
102
- * ```typescript
103
- * const github = this.mcp('github');
104
- * const issueTools = await github.find('issue');
105
- * ```
106
- */
107
- async find(query) {
108
- const tools = await this.list();
109
- const lowerQuery = query.toLowerCase();
110
- return tools.filter(t => t.name.toLowerCase().includes(lowerQuery) ||
111
- t.description?.toLowerCase().includes(lowerQuery));
112
- }
113
- /**
114
- * Check if this MCP server is connected
115
- */
116
- async isConnected() {
117
- return this.transport.isConnected(this.mcpName);
118
- }
119
- /**
120
- * Clear the tools cache (useful after reconnection)
121
- */
122
- clearCache() {
123
- this.toolsCache = null;
124
- }
125
- /**
126
- * Parse MCP tool result into a usable value
127
- */
128
- parseResult(result) {
129
- if (!result.content || result.content.length === 0) {
130
- return null;
131
- }
132
- // Single text result - try to parse as JSON
133
- if (result.content.length === 1 && result.content[0].type === 'text') {
134
- const text = result.content[0].text || '';
135
- try {
136
- return JSON.parse(text);
137
- }
138
- catch {
139
- return text;
140
- }
141
- }
142
- // Multiple results or non-text - return as-is
143
- return result.content.map(c => {
144
- if (c.type === 'text') {
145
- try {
146
- return JSON.parse(c.text || '');
147
- }
148
- catch {
149
- return c.text;
150
- }
151
- }
152
- return c;
153
- });
154
- }
155
- }
156
- /**
157
- * Base class for MCP-related errors
158
- */
159
- export class MCPError extends Error {
160
- mcpName;
161
- constructor(mcpName, message) {
162
- super(message);
163
- this.mcpName = mcpName;
164
- this.name = 'MCPError';
165
- }
166
- }
167
- /**
168
- * Error thrown when MCP server is not connected
169
- */
170
- export class MCPNotConnectedError extends MCPError {
171
- constructor(mcpName) {
172
- super(mcpName, `MCP server '${mcpName}' is not connected`);
173
- this.name = 'MCPNotConnectedError';
174
- }
175
- }
176
- /**
177
- * Error thrown when MCP tool call fails
178
- */
179
- export class MCPToolError extends MCPError {
180
- toolName;
181
- details;
182
- constructor(mcpName, toolName, details) {
183
- super(mcpName, `MCP tool '${mcpName}:${toolName}' failed: ${details}`);
184
- this.toolName = toolName;
185
- this.details = details;
186
- this.name = 'MCPToolError';
187
- }
188
- }
189
- /**
190
- * Error thrown when MCP is not configured correctly
191
- * Provides detailed, actionable guidance for users
192
- */
193
- export class MCPConfigurationError extends MCPError {
194
- configPath;
195
- missingMCPs;
196
- constructor(missingMCPs) {
197
- const configPath = `~/.photon/mcp-servers.json`;
198
- const message = MCPConfigurationError.formatMessage(missingMCPs, configPath);
199
- super(missingMCPs[0]?.name || 'unknown', message);
200
- this.name = 'MCPConfigurationError';
201
- this.configPath = configPath;
202
- this.missingMCPs = missingMCPs;
203
- }
204
- /**
205
- * Format detailed error message with configuration instructions
206
- */
207
- static formatMessage(missingMCPs, configPath) {
208
- const lines = [
209
- '',
210
- '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
211
- '❌ MCP Configuration Required',
212
- '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
213
- '',
214
- ];
215
- // List missing MCPs
216
- lines.push(`The following MCP server${missingMCPs.length > 1 ? 's are' : ' is'} required but not configured:`);
217
- lines.push('');
218
- for (const mcp of missingMCPs) {
219
- lines.push(` • ${mcp.name}`);
220
- if (mcp.source) {
221
- lines.push(` Source: ${mcp.source} (${mcp.sourceType})`);
222
- }
223
- if (mcp.declaredIn) {
224
- lines.push(` Declared in: ${mcp.declaredIn}`);
225
- }
226
- if (mcp.originalError) {
227
- lines.push(` Error: ${mcp.originalError}`);
228
- }
229
- lines.push('');
230
- }
231
- // Configuration instructions
232
- lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
233
- lines.push('🔧 How to Fix');
234
- lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
235
- lines.push('');
236
- lines.push(`Add the following to ${configPath}:`);
237
- lines.push('');
238
- // Generate example config
239
- const exampleConfig = MCPConfigurationError.generateExampleConfig(missingMCPs);
240
- lines.push(exampleConfig);
241
- lines.push('');
242
- // Step-by-step instructions
243
- lines.push('Steps:');
244
- lines.push(` 1. Create or edit ${configPath}`);
245
- lines.push(' 2. Add the configuration above');
246
- lines.push(' 3. Replace placeholder values with your actual configuration');
247
- lines.push(' 4. Restart the Photon');
248
- lines.push('');
249
- // Per-source-type guidance
250
- const uniqueTypes = new Set(missingMCPs.map(m => m.sourceType));
251
- if (uniqueTypes.size > 0) {
252
- lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
253
- lines.push('📖 Configuration Guide');
254
- lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
255
- lines.push('');
256
- for (const type of uniqueTypes) {
257
- lines.push(...MCPConfigurationError.getSourceTypeGuide(type));
258
- lines.push('');
259
- }
260
- }
261
- lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
262
- return lines.join('\n');
263
- }
264
- /**
265
- * Generate example JSON config for missing MCPs
266
- */
267
- static generateExampleConfig(missingMCPs) {
268
- const servers = {};
269
- for (const mcp of missingMCPs) {
270
- servers[mcp.name] = MCPConfigurationError.getExampleServerConfig(mcp);
271
- }
272
- const config = { mcpServers: servers };
273
- return JSON.stringify(config, null, 2)
274
- .split('\n')
275
- .map(line => ' ' + line)
276
- .join('\n');
277
- }
278
- /**
279
- * Get example server config based on source type
280
- */
281
- static getExampleServerConfig(mcp) {
282
- switch (mcp.sourceType) {
283
- case 'npm':
284
- return {
285
- command: 'npx',
286
- args: ['-y', mcp.source],
287
- env: {
288
- '// Add required environment variables here': '',
289
- },
290
- };
291
- case 'github': {
292
- // Parse github source: owner/repo or owner/repo#branch
293
- const [repo, branch] = mcp.source.split('#');
294
- const args = ['-y', `github:${repo}`];
295
- if (branch) {
296
- args[1] = `github:${repo}#${branch}`;
297
- }
298
- return {
299
- command: 'npx',
300
- args,
301
- env: {
302
- '// Add required environment variables here': '',
303
- },
304
- };
305
- }
306
- case 'url':
307
- if (mcp.source.startsWith('ws://') || mcp.source.startsWith('wss://')) {
308
- return {
309
- url: mcp.source,
310
- transport: 'websocket',
311
- };
312
- }
313
- return {
314
- url: mcp.source,
315
- transport: 'sse',
316
- };
317
- case 'local':
318
- return {
319
- command: mcp.source,
320
- args: [],
321
- cwd: '// Optional: working directory',
322
- };
323
- default:
324
- return {
325
- '// Configure this MCP server': '',
326
- command: 'npx',
327
- args: ['-y', '<package-name>'],
328
- };
329
- }
330
- }
331
- /**
332
- * Get source-type specific guidance
333
- */
334
- static getSourceTypeGuide(type) {
335
- switch (type) {
336
- case 'npm':
337
- return [
338
- '📦 NPM Packages:',
339
- ' MCP servers from npm are run via npx.',
340
- ' Example: @modelcontextprotocol/server-github',
341
- '',
342
- ' {',
343
- ' "command": "npx",',
344
- ' "args": ["-y", "@modelcontextprotocol/server-github"],',
345
- ' "env": {',
346
- ' "GITHUB_TOKEN": "ghp_your_token_here"',
347
- ' }',
348
- ' }',
349
- ];
350
- case 'github':
351
- return [
352
- '🐙 GitHub Repositories:',
353
- ' MCP servers from GitHub repos are cloned and run.',
354
- ' Format: owner/repo or owner/repo#branch',
355
- '',
356
- ' {',
357
- ' "command": "npx",',
358
- ' "args": ["-y", "github:anthropics/mcp-server-github"],',
359
- ' "env": {',
360
- ' "GITHUB_TOKEN": "ghp_your_token_here"',
361
- ' }',
362
- ' }',
363
- ];
364
- case 'url':
365
- return [
366
- '🌐 Remote URLs:',
367
- ' MCP servers running on remote hosts.',
368
- '',
369
- ' HTTP/SSE:',
370
- ' {',
371
- ' "url": "https://mcp.example.com/api",',
372
- ' "transport": "sse",',
373
- ' "headers": { "Authorization": "Bearer token" }',
374
- ' }',
375
- '',
376
- ' WebSocket:',
377
- ' {',
378
- ' "url": "wss://mcp.example.com/ws",',
379
- ' "transport": "websocket"',
380
- ' }',
381
- ];
382
- case 'local':
383
- return [
384
- '💻 Local Commands:',
385
- ' MCP servers running as local processes.',
386
- '',
387
- ' {',
388
- ' "command": "/path/to/mcp-server",',
389
- ' "args": ["--port", "3000"],',
390
- ' "cwd": "/working/directory",',
391
- ' "env": { "CONFIG": "value" }',
392
- ' }',
393
- ];
394
- default:
395
- return [
396
- '⚙️ Custom Configuration:',
397
- ' Configure the MCP server based on its documentation.',
398
- ];
399
- }
400
- }
401
- }
402
- /**
403
- * Create a proxy-based MCP client that allows direct method calls
404
- *
405
- * This enables a more fluent API:
406
- * ```typescript
407
- * const github = this.mcp('github');
408
- * // Instead of: await github.call('list_issues', { repo: 'foo/bar' })
409
- * // You can do: await github.list_issues({ repo: 'foo/bar' })
410
- * ```
411
- */
412
- export function createMCPProxy(client) {
413
- return new Proxy(client, {
414
- get(target, prop) {
415
- // Return existing methods
416
- if (prop in target) {
417
- return target[prop];
418
- }
419
- // Return a function that calls the tool
420
- return (params = {}) => target.call(prop, params);
421
- },
422
- });
423
- }
424
- //# sourceMappingURL=mcp-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}