@portel/photon-core 1.3.0 → 1.4.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.
@@ -186,6 +186,219 @@ export class MCPToolError extends MCPError {
186
186
  this.name = 'MCPToolError';
187
187
  }
188
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
+ }
189
402
  /**
190
403
  * Create a proxy-based MCP client that allows direct method calls
191
404
  *
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Photon Runtime Configuration
3
+ *
4
+ * Manages ~/.photon/mcp-servers.json for MCP server configuration.
5
+ * Compatible with Claude Desktop's mcpServers format.
6
+ */
7
+ import type { MCPConfig, MCPServerConfig } from './mcp-sdk-transport.js';
8
+ /**
9
+ * Default config directory
10
+ */
11
+ export declare const PHOTON_CONFIG_DIR: string;
12
+ /**
13
+ * Default MCP servers config file
14
+ */
15
+ export declare const MCP_SERVERS_CONFIG_FILE: string;
16
+ /**
17
+ * Photon MCP servers configuration file format
18
+ * Compatible with Claude Desktop's mcpServers format
19
+ */
20
+ export interface PhotonMCPConfig {
21
+ mcpServers: Record<string, MCPServerConfig>;
22
+ }
23
+ /**
24
+ * Load MCP servers configuration from ~/.photon/mcp-servers.json
25
+ *
26
+ * @param configPath Optional custom config path (defaults to ~/.photon/mcp-servers.json)
27
+ * @returns The MCP configuration, or empty config if file doesn't exist
28
+ */
29
+ export declare function loadPhotonMCPConfig(configPath?: string): Promise<PhotonMCPConfig>;
30
+ /**
31
+ * Save MCP servers configuration to ~/.photon/mcp-servers.json
32
+ *
33
+ * @param config The configuration to save
34
+ * @param configPath Optional custom config path
35
+ */
36
+ export declare function savePhotonMCPConfig(config: PhotonMCPConfig, configPath?: string): Promise<void>;
37
+ /**
38
+ * Check if an MCP server is configured
39
+ *
40
+ * @param mcpName The MCP server name to check
41
+ * @param config Optional pre-loaded config (loads from file if not provided)
42
+ */
43
+ export declare function isMCPConfigured(mcpName: string, config?: PhotonMCPConfig): Promise<boolean>;
44
+ /**
45
+ * Get configuration for a specific MCP server
46
+ *
47
+ * @param mcpName The MCP server name
48
+ * @param config Optional pre-loaded config
49
+ * @returns The server config or undefined if not found
50
+ */
51
+ export declare function getMCPServerConfig(mcpName: string, config?: PhotonMCPConfig): Promise<MCPServerConfig | undefined>;
52
+ /**
53
+ * Add or update an MCP server configuration
54
+ *
55
+ * @param mcpName The MCP server name
56
+ * @param serverConfig The server configuration
57
+ * @param configPath Optional custom config path
58
+ */
59
+ export declare function setMCPServerConfig(mcpName: string, serverConfig: MCPServerConfig, configPath?: string): Promise<void>;
60
+ /**
61
+ * Remove an MCP server configuration
62
+ *
63
+ * @param mcpName The MCP server name to remove
64
+ * @param configPath Optional custom config path
65
+ */
66
+ export declare function removeMCPServerConfig(mcpName: string, configPath?: string): Promise<void>;
67
+ /**
68
+ * List all configured MCP servers
69
+ *
70
+ * @param configPath Optional custom config path
71
+ * @returns Array of MCP server names
72
+ */
73
+ export declare function listMCPServers(configPath?: string): Promise<string[]>;
74
+ /**
75
+ * Convert PhotonMCPConfig to MCPConfig (for SDK transport)
76
+ */
77
+ export declare function toMCPConfig(config: PhotonMCPConfig): MCPConfig;
78
+ /**
79
+ * Merge environment variables into MCP server config
80
+ * Supports ${VAR_NAME} syntax for env var references
81
+ *
82
+ * @param serverConfig The server config to process
83
+ * @returns Config with env vars resolved
84
+ */
85
+ export declare function resolveEnvVars(serverConfig: MCPServerConfig): MCPServerConfig;
86
+ //# sourceMappingURL=photon-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photon-config.d.ts","sourceRoot":"","sources":["../src/photon-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAqC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAmD,CAAC;AAExF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAsBvF;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,eAAe,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAGtC;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,eAAe,EAC7B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAG3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAI9D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,eAAe,GAAG,eAAe,CAuB7E"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Photon Runtime Configuration
3
+ *
4
+ * Manages ~/.photon/mcp-servers.json for MCP server configuration.
5
+ * Compatible with Claude Desktop's mcpServers format.
6
+ */
7
+ import * as fs from 'fs/promises';
8
+ import * as path from 'path';
9
+ import * as os from 'os';
10
+ /**
11
+ * Default config directory
12
+ */
13
+ export const PHOTON_CONFIG_DIR = path.join(os.homedir(), '.photon');
14
+ /**
15
+ * Default MCP servers config file
16
+ */
17
+ export const MCP_SERVERS_CONFIG_FILE = path.join(PHOTON_CONFIG_DIR, 'mcp-servers.json');
18
+ /**
19
+ * Load MCP servers configuration from ~/.photon/mcp-servers.json
20
+ *
21
+ * @param configPath Optional custom config path (defaults to ~/.photon/mcp-servers.json)
22
+ * @returns The MCP configuration, or empty config if file doesn't exist
23
+ */
24
+ export async function loadPhotonMCPConfig(configPath) {
25
+ const filePath = configPath || MCP_SERVERS_CONFIG_FILE;
26
+ try {
27
+ const content = await fs.readFile(filePath, 'utf-8');
28
+ const config = JSON.parse(content);
29
+ // Validate structure
30
+ if (!config.mcpServers || typeof config.mcpServers !== 'object') {
31
+ console.error(`Invalid config format in ${filePath}: missing mcpServers`);
32
+ return { mcpServers: {} };
33
+ }
34
+ return config;
35
+ }
36
+ catch (error) {
37
+ if (error.code === 'ENOENT') {
38
+ // File doesn't exist - return empty config
39
+ return { mcpServers: {} };
40
+ }
41
+ console.error(`Failed to load config from ${filePath}: ${error.message}`);
42
+ return { mcpServers: {} };
43
+ }
44
+ }
45
+ /**
46
+ * Save MCP servers configuration to ~/.photon/mcp-servers.json
47
+ *
48
+ * @param config The configuration to save
49
+ * @param configPath Optional custom config path
50
+ */
51
+ export async function savePhotonMCPConfig(config, configPath) {
52
+ const filePath = configPath || MCP_SERVERS_CONFIG_FILE;
53
+ const dir = path.dirname(filePath);
54
+ // Ensure directory exists
55
+ await fs.mkdir(dir, { recursive: true });
56
+ // Write config with pretty formatting
57
+ await fs.writeFile(filePath, JSON.stringify(config, null, 2), 'utf-8');
58
+ }
59
+ /**
60
+ * Check if an MCP server is configured
61
+ *
62
+ * @param mcpName The MCP server name to check
63
+ * @param config Optional pre-loaded config (loads from file if not provided)
64
+ */
65
+ export async function isMCPConfigured(mcpName, config) {
66
+ const cfg = config || await loadPhotonMCPConfig();
67
+ return mcpName in cfg.mcpServers;
68
+ }
69
+ /**
70
+ * Get configuration for a specific MCP server
71
+ *
72
+ * @param mcpName The MCP server name
73
+ * @param config Optional pre-loaded config
74
+ * @returns The server config or undefined if not found
75
+ */
76
+ export async function getMCPServerConfig(mcpName, config) {
77
+ const cfg = config || await loadPhotonMCPConfig();
78
+ return cfg.mcpServers[mcpName];
79
+ }
80
+ /**
81
+ * Add or update an MCP server configuration
82
+ *
83
+ * @param mcpName The MCP server name
84
+ * @param serverConfig The server configuration
85
+ * @param configPath Optional custom config path
86
+ */
87
+ export async function setMCPServerConfig(mcpName, serverConfig, configPath) {
88
+ const config = await loadPhotonMCPConfig(configPath);
89
+ config.mcpServers[mcpName] = serverConfig;
90
+ await savePhotonMCPConfig(config, configPath);
91
+ }
92
+ /**
93
+ * Remove an MCP server configuration
94
+ *
95
+ * @param mcpName The MCP server name to remove
96
+ * @param configPath Optional custom config path
97
+ */
98
+ export async function removeMCPServerConfig(mcpName, configPath) {
99
+ const config = await loadPhotonMCPConfig(configPath);
100
+ delete config.mcpServers[mcpName];
101
+ await savePhotonMCPConfig(config, configPath);
102
+ }
103
+ /**
104
+ * List all configured MCP servers
105
+ *
106
+ * @param configPath Optional custom config path
107
+ * @returns Array of MCP server names
108
+ */
109
+ export async function listMCPServers(configPath) {
110
+ const config = await loadPhotonMCPConfig(configPath);
111
+ return Object.keys(config.mcpServers);
112
+ }
113
+ /**
114
+ * Convert PhotonMCPConfig to MCPConfig (for SDK transport)
115
+ */
116
+ export function toMCPConfig(config) {
117
+ return {
118
+ mcpServers: config.mcpServers,
119
+ };
120
+ }
121
+ /**
122
+ * Merge environment variables into MCP server config
123
+ * Supports ${VAR_NAME} syntax for env var references
124
+ *
125
+ * @param serverConfig The server config to process
126
+ * @returns Config with env vars resolved
127
+ */
128
+ export function resolveEnvVars(serverConfig) {
129
+ const resolved = { ...serverConfig };
130
+ // Process env object if present
131
+ if (resolved.env) {
132
+ const processedEnv = {};
133
+ for (const [key, value] of Object.entries(resolved.env)) {
134
+ processedEnv[key] = resolveEnvValue(value);
135
+ }
136
+ resolved.env = processedEnv;
137
+ }
138
+ // Process args if present
139
+ if (resolved.args) {
140
+ resolved.args = resolved.args.map(resolveEnvValue);
141
+ }
142
+ // Process url if present
143
+ if (resolved.url) {
144
+ resolved.url = resolveEnvValue(resolved.url);
145
+ }
146
+ return resolved;
147
+ }
148
+ /**
149
+ * Resolve ${VAR_NAME} references in a string value
150
+ */
151
+ function resolveEnvValue(value) {
152
+ return value.replace(/\$\{([^}]+)\}/g, (_, varName) => {
153
+ return process.env[varName] || '';
154
+ });
155
+ }
156
+ //# sourceMappingURL=photon-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photon-config.js","sourceRoot":"","sources":["../src/photon-config.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * Now uses TypeScript's compiler API for robust type parsing
9
9
  */
10
- import { ExtractedSchema, ConstructorParam, TemplateInfo, StaticInfo, MCPDependency } from './types.js';
10
+ import { ExtractedSchema, ConstructorParam, TemplateInfo, StaticInfo, MCPDependency, PhotonDependency, ResolvedInjection, PhotonAssets } from './types.js';
11
11
  export interface ExtractedMetadata {
12
12
  tools: ExtractedSchema[];
13
13
  templates: TemplateInfo[];
@@ -53,6 +53,11 @@ export declare class SchemaExtractor {
53
53
  * Returns null if the union should use standard anyOf processing
54
54
  */
55
55
  private extractEnumFromUnion;
56
+ /**
57
+ * Check if a type is a primitive (string, number, boolean)
58
+ * Primitives are injected from environment variables
59
+ */
60
+ private isPrimitiveType;
56
61
  /**
57
62
  * Extract constructor parameters for config injection
58
63
  */
@@ -91,6 +96,11 @@ export declare class SchemaExtractor {
91
96
  * Check if JSDoc contains @Static tag
92
97
  */
93
98
  private hasStaticTag;
99
+ /**
100
+ * Check if JSDoc contains @stateful tag
101
+ * Indicates this method is a stateful workflow that supports checkpoint/resume
102
+ */
103
+ private hasStatefulTag;
94
104
  /**
95
105
  * Extract URI pattern from @Static tag
96
106
  * Example: @Static github://repos/{owner}/{repo}/readme
@@ -139,5 +149,93 @@ export declare class SchemaExtractor {
139
149
  * Classify MCP source type based on format
140
150
  */
141
151
  private classifyMCPSource;
152
+ /**
153
+ * Extract Photon dependencies from source code
154
+ * Parses @photon tags in file-level or class-level JSDoc comments
155
+ *
156
+ * Format: @photon <name> <source>
157
+ *
158
+ * Source formats:
159
+ * - Marketplace: rss-feed (simple name from marketplace)
160
+ * - GitHub: portel-dev/photons/rss-feed
161
+ * - npm package: npm:@portel/rss-feed-photon
162
+ * - Local path: ./my-photon.photon.ts
163
+ *
164
+ * Example:
165
+ * ```
166
+ * /**
167
+ * * @photon rssFeed rss-feed
168
+ * * @photon custom ./my-photon.photon.ts
169
+ * *\/
170
+ * ```
171
+ */
172
+ extractPhotonDependencies(source: string): PhotonDependency[];
173
+ /**
174
+ * Classify Photon source type based on format
175
+ */
176
+ private classifyPhotonSource;
177
+ /**
178
+ * Resolve all injections for a Photon class
179
+ * Determines how each constructor parameter should be injected:
180
+ * - Primitives (string, number, boolean) → env var
181
+ * - Non-primitives matching @mcp → MCP client
182
+ * - Non-primitives matching @photon → Photon instance
183
+ *
184
+ * @param source The Photon source code
185
+ * @param mcpName The MCP name (for env var prefixing)
186
+ */
187
+ resolveInjections(source: string, mcpName: string): ResolvedInjection[];
188
+ /**
189
+ * Convert MCP name and parameter name to environment variable name
190
+ * Example: (filesystem, workdir) → FILESYSTEM_WORKDIR
191
+ */
192
+ private toEnvVarName;
193
+ /**
194
+ * Extract all assets from Photon source code
195
+ * Parses @ui, @prompt, @resource annotations from class-level JSDoc
196
+ *
197
+ * Format:
198
+ * - @ui <id> <path> - UI templates for MCP Apps
199
+ * - @prompt <id> <path> - Static MCP prompts
200
+ * - @resource <id> <path> - Static MCP resources
201
+ *
202
+ * Example:
203
+ * ```
204
+ * /**
205
+ * * @ui preferences ./ui/preferences.html
206
+ * * @prompt system ./prompts/system.md
207
+ * * @resource config ./resources/config.json
208
+ * *\/
209
+ * export default class MyPhoton extends PhotonMCP { ... }
210
+ * ```
211
+ */
212
+ extractAssets(source: string, assetFolder?: string): PhotonAssets;
213
+ /**
214
+ * Extract UI assets from @ui annotations
215
+ * Format: @ui <id> <path>
216
+ * Path must start with ./ or / to distinguish from method-level @ui references
217
+ */
218
+ private extractUIAssets;
219
+ /**
220
+ * Extract prompt assets from @prompt annotations
221
+ * Format: @prompt <id> <path>
222
+ * Path must start with ./ or / to be a valid declaration
223
+ */
224
+ private extractPromptAssets;
225
+ /**
226
+ * Extract resource assets from @resource annotations
227
+ * Format: @resource <id> <path>
228
+ * Path must start with ./ or / to be a valid declaration
229
+ */
230
+ private extractResourceAssets;
231
+ /**
232
+ * Extract method-level @ui annotations that link UI to tools
233
+ * Format: @ui <id> on a method's JSDoc
234
+ */
235
+ private extractMethodUILinks;
236
+ /**
237
+ * Get MIME type from file extension
238
+ */
239
+ private getMimeTypeFromPath;
142
240
  }
143
241
  //# sourceMappingURL=schema-extractor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-extractor.d.ts","sourceRoot":"","sources":["../src/schema-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAA2B,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjI,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAUnE;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB;IAgIvD;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE;IAIpD;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAiC3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyGxB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IA0F5B;;OAEG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAmD5D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IA2G/B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IA0FxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAsBrB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAKvB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE;IAyBvD;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAqB1B"}
1
+ {"version":3,"file":"schema-extractor.d.ts","sourceRoot":"","sources":["../src/schema-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAA2B,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAuC,MAAM,YAAY,CAAC;AAEzN,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAUnE;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB;IAkIvD;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE;IAIpD;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAiC3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyGxB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IA0F5B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAoD5D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IA2G/B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IA0FxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAItB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAsBrB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAKvB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE;IAyBvD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAyB7D;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuB5B;;;;;;;;;OASG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAgDvE;;;OAGG;IACH,OAAO,CAAC,YAAY;IAapB;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY;IAgBjE;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAkBvB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAuC5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAiC5B"}