@portel/photon-core 2.2.0 → 2.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.
Files changed (75) hide show
  1. package/dist/asset-discovery.d.ts +25 -0
  2. package/dist/asset-discovery.d.ts.map +1 -0
  3. package/dist/asset-discovery.js +144 -0
  4. package/dist/asset-discovery.js.map +1 -0
  5. package/dist/base.d.ts +1 -1
  6. package/dist/base.d.ts.map +1 -1
  7. package/dist/base.js +12 -6
  8. package/dist/base.js.map +1 -1
  9. package/dist/class-detection.d.ts +32 -0
  10. package/dist/class-detection.d.ts.map +1 -0
  11. package/dist/class-detection.js +86 -0
  12. package/dist/class-detection.js.map +1 -0
  13. package/dist/compiler.d.ts +22 -0
  14. package/dist/compiler.d.ts.map +1 -0
  15. package/dist/compiler.js +48 -0
  16. package/dist/compiler.js.map +1 -0
  17. package/dist/config.d.ts +63 -0
  18. package/dist/config.d.ts.map +1 -0
  19. package/dist/config.js +117 -0
  20. package/dist/config.js.map +1 -0
  21. package/dist/design-system/tokens.d.ts +66 -0
  22. package/dist/design-system/tokens.d.ts.map +1 -1
  23. package/dist/design-system/tokens.js +324 -44
  24. package/dist/design-system/tokens.js.map +1 -1
  25. package/dist/env-utils.d.ts +61 -0
  26. package/dist/env-utils.d.ts.map +1 -0
  27. package/dist/env-utils.js +171 -0
  28. package/dist/env-utils.js.map +1 -0
  29. package/dist/index.d.ts +9 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +27 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/mcp-apps.d.ts +130 -0
  34. package/dist/mcp-apps.d.ts.map +1 -0
  35. package/dist/mcp-apps.js +87 -0
  36. package/dist/mcp-apps.js.map +1 -0
  37. package/dist/mime-types.d.ts +13 -0
  38. package/dist/mime-types.d.ts.map +1 -0
  39. package/dist/mime-types.js +47 -0
  40. package/dist/mime-types.js.map +1 -0
  41. package/dist/rendering/index.d.ts +49 -0
  42. package/dist/rendering/index.d.ts.map +1 -1
  43. package/dist/rendering/index.js +153 -0
  44. package/dist/rendering/index.js.map +1 -1
  45. package/dist/schema-extractor.d.ts +18 -1
  46. package/dist/schema-extractor.d.ts.map +1 -1
  47. package/dist/schema-extractor.js +81 -11
  48. package/dist/schema-extractor.js.map +1 -1
  49. package/dist/types.d.ts +75 -0
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/types.js.map +1 -1
  52. package/dist/validation.d.ts +51 -0
  53. package/dist/validation.d.ts.map +1 -0
  54. package/dist/validation.js +249 -0
  55. package/dist/validation.js.map +1 -0
  56. package/dist/version-check.d.ts +22 -0
  57. package/dist/version-check.d.ts.map +1 -0
  58. package/dist/version-check.js +91 -0
  59. package/dist/version-check.js.map +1 -0
  60. package/package.json +12 -2
  61. package/src/asset-discovery.ts +160 -0
  62. package/src/base.ts +12 -5
  63. package/src/class-detection.ts +94 -0
  64. package/src/compiler.ts +57 -0
  65. package/src/config.ts +134 -0
  66. package/src/design-system/tokens.ts +381 -57
  67. package/src/env-utils.ts +216 -0
  68. package/src/index.ts +106 -0
  69. package/src/mcp-apps.ts +204 -0
  70. package/src/mime-types.ts +49 -0
  71. package/src/rendering/index.ts +197 -0
  72. package/src/schema-extractor.ts +95 -12
  73. package/src/types.ts +82 -0
  74. package/src/validation.ts +363 -0
  75. package/src/version-check.ts +92 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Asset Discovery Utilities
3
+ *
4
+ * Discover and extract UI, prompt, and resource assets from Photon files.
5
+ * Extracted from photon's loader.ts.
6
+ *
7
+ * Depends on: getMimeType (from ./mime-types), SchemaExtractor (from ./schema-extractor)
8
+ */
9
+ import type { PhotonAssets } from './types.js';
10
+ /**
11
+ * Discover and extract assets from a Photon file
12
+ *
13
+ * Convention:
14
+ * - Asset folder: {photon-name}/ next to {photon-name}.photon.ts
15
+ * - Subfolder: ui/, prompts/, resources/
16
+ *
17
+ * @param photonPath - Absolute path to the .photon.ts file
18
+ * @param source - Source code content of the Photon file
19
+ */
20
+ export declare function discoverAssets(photonPath: string, source: string): Promise<PhotonAssets | undefined>;
21
+ /**
22
+ * Auto-discover assets from the ui/, prompts/, resources/ subdirectories
23
+ */
24
+ export declare function autoDiscoverAssets(assetFolder: string, assets: PhotonAssets): Promise<void>;
25
+ //# sourceMappingURL=asset-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-discovery.d.ts","sourceRoot":"","sources":["../src/asset-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAc/C;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA+CnC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAgEf"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Asset Discovery Utilities
3
+ *
4
+ * Discover and extract UI, prompt, and resource assets from Photon files.
5
+ * Extracted from photon's loader.ts.
6
+ *
7
+ * Depends on: getMimeType (from ./mime-types), SchemaExtractor (from ./schema-extractor)
8
+ */
9
+ import * as fs from 'fs/promises';
10
+ import * as path from 'path';
11
+ import { getMimeType } from './mime-types.js';
12
+ import { SchemaExtractor } from './schema-extractor.js';
13
+ /**
14
+ * Check if a file or directory exists
15
+ */
16
+ async function fileExists(filePath) {
17
+ try {
18
+ await fs.access(filePath);
19
+ return true;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ /**
26
+ * Discover and extract assets from a Photon file
27
+ *
28
+ * Convention:
29
+ * - Asset folder: {photon-name}/ next to {photon-name}.photon.ts
30
+ * - Subfolder: ui/, prompts/, resources/
31
+ *
32
+ * @param photonPath - Absolute path to the .photon.ts file
33
+ * @param source - Source code content of the Photon file
34
+ */
35
+ export async function discoverAssets(photonPath, source) {
36
+ const extractor = new SchemaExtractor();
37
+ const dir = path.dirname(photonPath);
38
+ const basename = path.basename(photonPath, '.photon.ts');
39
+ // Convention: asset folder has same name as photon (without .photon.ts)
40
+ const assetFolder = path.join(dir, basename);
41
+ // Check if asset folder exists
42
+ let folderExists = false;
43
+ try {
44
+ const stat = await fs.stat(assetFolder);
45
+ folderExists = stat.isDirectory();
46
+ }
47
+ catch {
48
+ // Folder doesn't exist
49
+ }
50
+ // Extract explicit asset declarations from source annotations
51
+ const assets = extractor.extractAssets(source, folderExists ? assetFolder : undefined);
52
+ // If no folder exists and no explicit declarations, skip
53
+ if (!folderExists &&
54
+ assets.ui.length === 0 &&
55
+ assets.prompts.length === 0 &&
56
+ assets.resources.length === 0) {
57
+ return undefined;
58
+ }
59
+ if (folderExists) {
60
+ // Resolve paths for explicitly declared assets
61
+ for (const ui of assets.ui) {
62
+ ui.resolvedPath = path.resolve(assetFolder, ui.path.replace(/^\.\//, ''));
63
+ }
64
+ for (const prompt of assets.prompts) {
65
+ prompt.resolvedPath = path.resolve(assetFolder, prompt.path.replace(/^\.\//, ''));
66
+ }
67
+ for (const resource of assets.resources) {
68
+ resource.resolvedPath = path.resolve(assetFolder, resource.path.replace(/^\.\//, ''));
69
+ }
70
+ // Auto-discover assets from folder structure
71
+ await autoDiscoverAssets(assetFolder, assets);
72
+ }
73
+ return assets;
74
+ }
75
+ /**
76
+ * Auto-discover assets from the ui/, prompts/, resources/ subdirectories
77
+ */
78
+ export async function autoDiscoverAssets(assetFolder, assets) {
79
+ // Auto-discover UI files
80
+ const uiDir = path.join(assetFolder, 'ui');
81
+ if (await fileExists(uiDir)) {
82
+ try {
83
+ const files = await fs.readdir(uiDir);
84
+ for (const file of files) {
85
+ const id = path.basename(file, path.extname(file));
86
+ if (!assets.ui.find((u) => u.id === id)) {
87
+ assets.ui.push({
88
+ id,
89
+ path: `./ui/${file}`,
90
+ resolvedPath: path.join(uiDir, file),
91
+ mimeType: getMimeType(file),
92
+ });
93
+ }
94
+ }
95
+ }
96
+ catch {
97
+ // Ignore errors
98
+ }
99
+ }
100
+ // Auto-discover prompt files
101
+ const promptsDir = path.join(assetFolder, 'prompts');
102
+ if (await fileExists(promptsDir)) {
103
+ try {
104
+ const files = await fs.readdir(promptsDir);
105
+ for (const file of files) {
106
+ if (file.endsWith('.md') || file.endsWith('.txt')) {
107
+ const id = path.basename(file, path.extname(file));
108
+ if (!assets.prompts.find((p) => p.id === id)) {
109
+ assets.prompts.push({
110
+ id,
111
+ path: `./prompts/${file}`,
112
+ resolvedPath: path.join(promptsDir, file),
113
+ });
114
+ }
115
+ }
116
+ }
117
+ }
118
+ catch {
119
+ // Ignore errors
120
+ }
121
+ }
122
+ // Auto-discover resource files
123
+ const resourcesDir = path.join(assetFolder, 'resources');
124
+ if (await fileExists(resourcesDir)) {
125
+ try {
126
+ const files = await fs.readdir(resourcesDir);
127
+ for (const file of files) {
128
+ const id = path.basename(file, path.extname(file));
129
+ if (!assets.resources.find((r) => r.id === id)) {
130
+ assets.resources.push({
131
+ id,
132
+ path: `./resources/${file}`,
133
+ resolvedPath: path.join(resourcesDir, file),
134
+ mimeType: getMimeType(file),
135
+ });
136
+ }
137
+ }
138
+ }
139
+ catch {
140
+ // Ignore errors
141
+ }
142
+ }
143
+ }
144
+ //# sourceMappingURL=asset-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-discovery.js","sourceRoot":"","sources":["../src/asset-discovery.ts"],"names":[],"mappings":"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"}
package/dist/base.d.ts CHANGED
@@ -86,7 +86,7 @@ export declare class PhotonMCP {
86
86
  static getMCPName(): string;
87
87
  /**
88
88
  * Get all tool methods from this class
89
- * Returns all public async methods except lifecycle hooks
89
+ * Returns all public async methods except lifecycle hooks and configuration methods
90
90
  */
91
91
  static getToolMethods(): string[];
92
92
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AAK1E;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IA0B/B;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAEzC;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAsF;IAEzG;;;OAGG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM;IAQ3B;;;OAGG;IACH,MAAM,CAAC,cAAc,IAAI,MAAM,EAAE;IA0BjC;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAkBrH;;OAEG;IACG,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAC9B,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAoBhF;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAM9C;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAOzC;;;;;;;;;;;;;;;;;;;;;OAqBG;cACa,QAAQ,CAAC,CAAC,EACxB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,CAAC;CAGd"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AAK1E;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IA0B/B;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAEzC;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAsF;IAEzG;;;OAGG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM;IAQ3B;;;OAGG;IACH,MAAM,CAAC,cAAc,IAAI,MAAM,EAAE;IAiCjC;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAkBrH;;OAEG;IACG,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAC9B,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAoBhF;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAM9C;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAOzC;;;;;;;;;;;;;;;;;;;;;OAqBG;cACa,QAAQ,CAAC,CAAC,EACxB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,CAAC;CAGd"}
package/dist/base.js CHANGED
@@ -118,20 +118,26 @@ export class PhotonMCP {
118
118
  }
119
119
  /**
120
120
  * Get all tool methods from this class
121
- * Returns all public async methods except lifecycle hooks
121
+ * Returns all public async methods except lifecycle hooks and configuration methods
122
122
  */
123
123
  static getToolMethods() {
124
124
  const prototype = this.prototype;
125
125
  const methods = [];
126
+ // Methods that are conventions, not tools
127
+ const conventionMethods = new Set([
128
+ 'constructor',
129
+ 'onInitialize', // Lifecycle hook
130
+ 'onShutdown', // Lifecycle hook
131
+ 'configure', // Configuration convention
132
+ 'getConfig', // Configuration convention
133
+ ]);
126
134
  // Get all property names from prototype chain
127
135
  let current = prototype;
128
136
  while (current && current !== PhotonMCP.prototype) {
129
137
  Object.getOwnPropertyNames(current).forEach((name) => {
130
- // Skip constructor, private methods (starting with _), and lifecycle hooks
131
- if (name !== 'constructor' &&
132
- !name.startsWith('_') &&
133
- name !== 'onInitialize' &&
134
- name !== 'onShutdown' &&
138
+ // Skip private methods (starting with _) and convention methods
139
+ if (!name.startsWith('_') &&
140
+ !conventionMethods.has(name) &&
135
141
  typeof prototype[name] === 'function' &&
136
142
  !methods.includes(name)) {
137
143
  methods.push(name);
package/dist/base.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Class Detection Utilities
3
+ *
4
+ * Shared logic for detecting Photon classes in ES modules.
5
+ * Extracted from photon, ncp, and lumina loaders.
6
+ */
7
+ /**
8
+ * Check if a value is a class constructor
9
+ */
10
+ export declare function isClass(fn: unknown): fn is new (...args: unknown[]) => unknown;
11
+ /**
12
+ * Check if a class has async methods (instance or static)
13
+ *
14
+ * Checks for AsyncFunction, AsyncGeneratorFunction, and GeneratorFunction
15
+ * on both prototype (instance methods) and the class itself (static methods).
16
+ */
17
+ export declare function hasAsyncMethods(ClassConstructor: new (...args: unknown[]) => unknown): boolean;
18
+ /**
19
+ * Find a single Photon class in a module
20
+ *
21
+ * Priority: default export first, then named exports.
22
+ * Returns the first class with async methods, or null.
23
+ */
24
+ export declare function findPhotonClass(module: Record<string, unknown>): (new (...args: unknown[]) => unknown) | null;
25
+ /**
26
+ * Find all Photon classes in a module
27
+ *
28
+ * Returns every exported class that has async methods.
29
+ * Used by NCP which may load multiple classes from one file.
30
+ */
31
+ export declare function findPhotonClasses(module: Record<string, unknown>): Array<new (...args: unknown[]) => unknown>;
32
+ //# sourceMappingURL=class-detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-detection.d.ts","sourceRoot":"","sources":["../src/class-detection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAE9E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,gBAAgB,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,GAAG,OAAO,CA+B9F;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GAAG,IAAI,CAgB7G;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAU7G"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Class Detection Utilities
3
+ *
4
+ * Shared logic for detecting Photon classes in ES modules.
5
+ * Extracted from photon, ncp, and lumina loaders.
6
+ */
7
+ /**
8
+ * Check if a value is a class constructor
9
+ */
10
+ export function isClass(fn) {
11
+ return typeof fn === 'function' && /^\s*class\s+/.test(fn.toString());
12
+ }
13
+ /**
14
+ * Check if a class has async methods (instance or static)
15
+ *
16
+ * Checks for AsyncFunction, AsyncGeneratorFunction, and GeneratorFunction
17
+ * on both prototype (instance methods) and the class itself (static methods).
18
+ */
19
+ export function hasAsyncMethods(ClassConstructor) {
20
+ const asyncCtorNames = new Set([
21
+ 'AsyncFunction',
22
+ 'AsyncGeneratorFunction',
23
+ 'GeneratorFunction',
24
+ ]);
25
+ // Check instance methods on prototype
26
+ const prototype = ClassConstructor.prototype;
27
+ for (const key of Object.getOwnPropertyNames(prototype)) {
28
+ if (key === 'constructor')
29
+ continue;
30
+ const descriptor = Object.getOwnPropertyDescriptor(prototype, key);
31
+ if (descriptor && typeof descriptor.value === 'function') {
32
+ if (asyncCtorNames.has(descriptor.value.constructor.name)) {
33
+ return true;
34
+ }
35
+ }
36
+ }
37
+ // Check static methods on the class itself
38
+ for (const key of Object.getOwnPropertyNames(ClassConstructor)) {
39
+ if (['length', 'name', 'prototype'].includes(key))
40
+ continue;
41
+ const descriptor = Object.getOwnPropertyDescriptor(ClassConstructor, key);
42
+ if (descriptor && typeof descriptor.value === 'function') {
43
+ if (asyncCtorNames.has(descriptor.value.constructor.name)) {
44
+ return true;
45
+ }
46
+ }
47
+ }
48
+ return false;
49
+ }
50
+ /**
51
+ * Find a single Photon class in a module
52
+ *
53
+ * Priority: default export first, then named exports.
54
+ * Returns the first class with async methods, or null.
55
+ */
56
+ export function findPhotonClass(module) {
57
+ // Try default export first
58
+ if (module.default && isClass(module.default)) {
59
+ if (hasAsyncMethods(module.default)) {
60
+ return module.default;
61
+ }
62
+ }
63
+ // Try named exports
64
+ for (const exportedItem of Object.values(module)) {
65
+ if (isClass(exportedItem) && hasAsyncMethods(exportedItem)) {
66
+ return exportedItem;
67
+ }
68
+ }
69
+ return null;
70
+ }
71
+ /**
72
+ * Find all Photon classes in a module
73
+ *
74
+ * Returns every exported class that has async methods.
75
+ * Used by NCP which may load multiple classes from one file.
76
+ */
77
+ export function findPhotonClasses(module) {
78
+ const classes = [];
79
+ for (const exportedItem of Object.values(module)) {
80
+ if (isClass(exportedItem) && hasAsyncMethods(exportedItem)) {
81
+ classes.push(exportedItem);
82
+ }
83
+ }
84
+ return classes;
85
+ }
86
+ //# sourceMappingURL=class-detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-detection.js","sourceRoot":"","sources":["../src/class-detection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,EAAW;IACjC,OAAO,OAAO,EAAE,KAAK,UAAU,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,gBAAqD;IACnF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;QAC7B,eAAe;QACf,wBAAwB;QACxB,mBAAmB;KACpB,CAAC,CAAC;IAEH,sCAAsC;IACtC,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;QACxD,IAAI,GAAG,KAAK,aAAa;YAAE,SAAS;QACpC,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACzD,IAAI,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1D,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAC1E,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACzD,IAAI,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1D,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAA+B;IAC7D,2BAA2B;IAC3B,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3D,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA+B;IAC/D,MAAM,OAAO,GAA+C,EAAE,CAAC;IAE/D,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * TypeScript Compiler Utilities
3
+ *
4
+ * Shared esbuild-based TypeScript compilation with caching.
5
+ * Extracted from photon and ncp loaders.
6
+ *
7
+ * NOTE: No esbuild dependency in package.json — the consumer must provide it.
8
+ * Uses `await import('esbuild')` for dynamic resolution.
9
+ */
10
+ /**
11
+ * Compile a .photon.ts file to JavaScript and cache the result
12
+ *
13
+ * @param tsFilePath - Absolute path to the TypeScript source file
14
+ * @param options.cacheDir - Directory to store compiled output
15
+ * @param options.content - Optional pre-read file content (avoids extra read)
16
+ * @returns Absolute path to the compiled .mjs file
17
+ */
18
+ export declare function compilePhotonTS(tsFilePath: string, options: {
19
+ cacheDir: string;
20
+ content?: string;
21
+ }): Promise<string>;
22
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,MAAM,CAAC,CA+BjB"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * TypeScript Compiler Utilities
3
+ *
4
+ * Shared esbuild-based TypeScript compilation with caching.
5
+ * Extracted from photon and ncp loaders.
6
+ *
7
+ * NOTE: No esbuild dependency in package.json — the consumer must provide it.
8
+ * Uses `await import('esbuild')` for dynamic resolution.
9
+ */
10
+ import * as fs from 'fs/promises';
11
+ import * as path from 'path';
12
+ import * as crypto from 'crypto';
13
+ /**
14
+ * Compile a .photon.ts file to JavaScript and cache the result
15
+ *
16
+ * @param tsFilePath - Absolute path to the TypeScript source file
17
+ * @param options.cacheDir - Directory to store compiled output
18
+ * @param options.content - Optional pre-read file content (avoids extra read)
19
+ * @returns Absolute path to the compiled .mjs file
20
+ */
21
+ export async function compilePhotonTS(tsFilePath, options) {
22
+ const source = options.content ?? (await fs.readFile(tsFilePath, 'utf-8'));
23
+ const hash = crypto.createHash('sha256').update(source).digest('hex').slice(0, 16);
24
+ const fileName = path.basename(tsFilePath, '.ts');
25
+ const cachedJsPath = path.join(options.cacheDir, `${fileName}.${hash}.mjs`);
26
+ // Check if cached version exists
27
+ try {
28
+ await fs.access(cachedJsPath);
29
+ return cachedJsPath;
30
+ }
31
+ catch {
32
+ // Cache miss — compile
33
+ }
34
+ // Dynamic import — consumer must have esbuild installed
35
+ const esbuild = await import('esbuild');
36
+ const result = await esbuild.transform(source, {
37
+ loader: 'ts',
38
+ format: 'esm',
39
+ target: 'es2022',
40
+ sourcemap: 'inline',
41
+ });
42
+ // Ensure cache directory exists
43
+ await fs.mkdir(options.cacheDir, { recursive: true });
44
+ // Write compiled JavaScript
45
+ await fs.writeFile(cachedJsPath, result.code, 'utf-8');
46
+ return cachedJsPath;
47
+ }
48
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,OAA+C;IAE/C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEnF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,QAAQ,IAAI,IAAI,MAAM,CAAC,CAAC;IAE5E,iCAAiC;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,uBAAuB;IACzB,CAAC;IAED,wDAAwD;IACxD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE;QAC7C,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,QAAQ;KACpB,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtD,4BAA4B;IAC5B,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEvD,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Photon Configuration Utilities
3
+ *
4
+ * Provides standard config storage for photons that implement the configure() convention.
5
+ * Config is stored at ~/.photon/{photonName}/config.json
6
+ *
7
+ * Usage in a Photon:
8
+ * ```typescript
9
+ * import { loadPhotonConfig, savePhotonConfig, getPhotonConfigPath } from '@portel/photon-core';
10
+ *
11
+ * export default class MyPhoton extends PhotonMCP {
12
+ * async configure(params: { apiKey: string }) {
13
+ * savePhotonConfig('my-photon', params);
14
+ * return { success: true, config: params };
15
+ * }
16
+ *
17
+ * async getConfig() {
18
+ * return loadPhotonConfig('my-photon');
19
+ * }
20
+ * }
21
+ * ```
22
+ */
23
+ /**
24
+ * Get the config directory for photons
25
+ * Default: ~/.photon/
26
+ */
27
+ export declare function getPhotonConfigDir(): string;
28
+ /**
29
+ * Get the config file path for a specific photon
30
+ * @param photonName The photon name (kebab-case)
31
+ * @returns Path to config.json for this photon
32
+ */
33
+ export declare function getPhotonConfigPath(photonName: string): string;
34
+ /**
35
+ * Load configuration for a photon
36
+ * @param photonName The photon name (kebab-case)
37
+ * @param defaults Default values if config doesn't exist
38
+ * @returns The config object or defaults
39
+ */
40
+ export declare function loadPhotonConfig<T extends Record<string, any>>(photonName: string, defaults?: T): T;
41
+ /**
42
+ * Save configuration for a photon
43
+ * @param photonName The photon name (kebab-case)
44
+ * @param config The configuration object to save
45
+ */
46
+ export declare function savePhotonConfig<T extends Record<string, any>>(photonName: string, config: T): void;
47
+ /**
48
+ * Check if a photon has been configured
49
+ * @param photonName The photon name (kebab-case)
50
+ * @returns true if config file exists
51
+ */
52
+ export declare function hasPhotonConfig(photonName: string): boolean;
53
+ /**
54
+ * Delete configuration for a photon
55
+ * @param photonName The photon name (kebab-case)
56
+ */
57
+ export declare function deletePhotonConfig(photonName: string): void;
58
+ /**
59
+ * List all configured photons
60
+ * @returns Array of photon names that have config
61
+ */
62
+ export declare function listConfiguredPhotons(): string[];
63
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5D,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,CAAC,GACX,CAAC,CAkBH;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5D,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,GACR,IAAI,CAUN;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAK3D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAehD"}
package/dist/config.js ADDED
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Photon Configuration Utilities
3
+ *
4
+ * Provides standard config storage for photons that implement the configure() convention.
5
+ * Config is stored at ~/.photon/{photonName}/config.json
6
+ *
7
+ * Usage in a Photon:
8
+ * ```typescript
9
+ * import { loadPhotonConfig, savePhotonConfig, getPhotonConfigPath } from '@portel/photon-core';
10
+ *
11
+ * export default class MyPhoton extends PhotonMCP {
12
+ * async configure(params: { apiKey: string }) {
13
+ * savePhotonConfig('my-photon', params);
14
+ * return { success: true, config: params };
15
+ * }
16
+ *
17
+ * async getConfig() {
18
+ * return loadPhotonConfig('my-photon');
19
+ * }
20
+ * }
21
+ * ```
22
+ */
23
+ import * as fs from 'fs';
24
+ import * as path from 'path';
25
+ import * as os from 'os';
26
+ /**
27
+ * Get the config directory for photons
28
+ * Default: ~/.photon/
29
+ */
30
+ export function getPhotonConfigDir() {
31
+ return process.env.PHOTON_CONFIG_DIR || path.join(os.homedir(), '.photon');
32
+ }
33
+ /**
34
+ * Get the config file path for a specific photon
35
+ * @param photonName The photon name (kebab-case)
36
+ * @returns Path to config.json for this photon
37
+ */
38
+ export function getPhotonConfigPath(photonName) {
39
+ const safeName = photonName.replace(/[^a-zA-Z0-9_-]/g, '_');
40
+ return path.join(getPhotonConfigDir(), safeName, 'config.json');
41
+ }
42
+ /**
43
+ * Load configuration for a photon
44
+ * @param photonName The photon name (kebab-case)
45
+ * @param defaults Default values if config doesn't exist
46
+ * @returns The config object or defaults
47
+ */
48
+ export function loadPhotonConfig(photonName, defaults) {
49
+ const configPath = getPhotonConfigPath(photonName);
50
+ try {
51
+ if (fs.existsSync(configPath)) {
52
+ const content = fs.readFileSync(configPath, 'utf-8');
53
+ const config = JSON.parse(content);
54
+ // Merge with defaults
55
+ return defaults ? { ...defaults, ...config } : config;
56
+ }
57
+ }
58
+ catch (error) {
59
+ // Log but don't throw - return defaults
60
+ if (process.env.PHOTON_DEBUG) {
61
+ console.error(`Failed to load config for ${photonName}:`, error);
62
+ }
63
+ }
64
+ return defaults || {};
65
+ }
66
+ /**
67
+ * Save configuration for a photon
68
+ * @param photonName The photon name (kebab-case)
69
+ * @param config The configuration object to save
70
+ */
71
+ export function savePhotonConfig(photonName, config) {
72
+ const configPath = getPhotonConfigPath(photonName);
73
+ const configDir = path.dirname(configPath);
74
+ // Ensure directory exists
75
+ if (!fs.existsSync(configDir)) {
76
+ fs.mkdirSync(configDir, { recursive: true });
77
+ }
78
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
79
+ }
80
+ /**
81
+ * Check if a photon has been configured
82
+ * @param photonName The photon name (kebab-case)
83
+ * @returns true if config file exists
84
+ */
85
+ export function hasPhotonConfig(photonName) {
86
+ return fs.existsSync(getPhotonConfigPath(photonName));
87
+ }
88
+ /**
89
+ * Delete configuration for a photon
90
+ * @param photonName The photon name (kebab-case)
91
+ */
92
+ export function deletePhotonConfig(photonName) {
93
+ const configPath = getPhotonConfigPath(photonName);
94
+ if (fs.existsSync(configPath)) {
95
+ fs.unlinkSync(configPath);
96
+ }
97
+ }
98
+ /**
99
+ * List all configured photons
100
+ * @returns Array of photon names that have config
101
+ */
102
+ export function listConfiguredPhotons() {
103
+ const configDir = getPhotonConfigDir();
104
+ if (!fs.existsSync(configDir)) {
105
+ return [];
106
+ }
107
+ try {
108
+ return fs.readdirSync(configDir, { withFileTypes: true })
109
+ .filter(entry => entry.isDirectory())
110
+ .filter(entry => fs.existsSync(path.join(configDir, entry.name, 'config.json')))
111
+ .map(entry => entry.name);
112
+ }
113
+ catch {
114
+ return [];
115
+ }
116
+ }
117
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}