@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.
- package/dist/asset-discovery.d.ts +25 -0
- package/dist/asset-discovery.d.ts.map +1 -0
- package/dist/asset-discovery.js +144 -0
- package/dist/asset-discovery.js.map +1 -0
- package/dist/base.d.ts +1 -1
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +12 -6
- package/dist/base.js.map +1 -1
- package/dist/class-detection.d.ts +32 -0
- package/dist/class-detection.d.ts.map +1 -0
- package/dist/class-detection.js +86 -0
- package/dist/class-detection.js.map +1 -0
- package/dist/compiler.d.ts +22 -0
- package/dist/compiler.d.ts.map +1 -0
- package/dist/compiler.js +48 -0
- package/dist/compiler.js.map +1 -0
- package/dist/config.d.ts +63 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +117 -0
- package/dist/config.js.map +1 -0
- package/dist/design-system/tokens.d.ts +66 -0
- package/dist/design-system/tokens.d.ts.map +1 -1
- package/dist/design-system/tokens.js +324 -44
- package/dist/design-system/tokens.js.map +1 -1
- package/dist/env-utils.d.ts +61 -0
- package/dist/env-utils.d.ts.map +1 -0
- package/dist/env-utils.js +171 -0
- package/dist/env-utils.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-apps.d.ts +130 -0
- package/dist/mcp-apps.d.ts.map +1 -0
- package/dist/mcp-apps.js +87 -0
- package/dist/mcp-apps.js.map +1 -0
- package/dist/mime-types.d.ts +13 -0
- package/dist/mime-types.d.ts.map +1 -0
- package/dist/mime-types.js +47 -0
- package/dist/mime-types.js.map +1 -0
- package/dist/rendering/index.d.ts +49 -0
- package/dist/rendering/index.d.ts.map +1 -1
- package/dist/rendering/index.js +153 -0
- package/dist/rendering/index.js.map +1 -1
- package/dist/schema-extractor.d.ts +18 -1
- package/dist/schema-extractor.d.ts.map +1 -1
- package/dist/schema-extractor.js +81 -11
- package/dist/schema-extractor.js.map +1 -1
- package/dist/types.d.ts +75 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/validation.d.ts +51 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +249 -0
- package/dist/validation.js.map +1 -0
- package/dist/version-check.d.ts +22 -0
- package/dist/version-check.d.ts.map +1 -0
- package/dist/version-check.js +91 -0
- package/dist/version-check.js.map +1 -0
- package/package.json +12 -2
- package/src/asset-discovery.ts +160 -0
- package/src/base.ts +12 -5
- package/src/class-detection.ts +94 -0
- package/src/compiler.ts +57 -0
- package/src/config.ts +134 -0
- package/src/design-system/tokens.ts +381 -57
- package/src/env-utils.ts +216 -0
- package/src/index.ts +106 -0
- package/src/mcp-apps.ts +204 -0
- package/src/mime-types.ts +49 -0
- package/src/rendering/index.ts +197 -0
- package/src/schema-extractor.ts +95 -12
- package/src/types.ts +82 -0
- package/src/validation.ts +363 -0
- 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
|
/**
|
package/dist/base.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
131
|
-
if (name
|
|
132
|
-
!
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAA+B,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,OAAO,SAAS;IACpB;;;;;;;;;;;;;;;;;;;;OAoBG;IACO,IAAI,CAAC,IAAS;QACtB,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC;QAE1C,gDAAgD;QAChD,IAAI,KAAK,EAAE,aAAa,EAAE,CAAC;YACzB,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,iFAAiF;QACjF,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC;gBACb,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;gBAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;gBAChD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;aAC9B,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACf,2CAA2C;gBAC3C,yBAAyB;gBACzB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;oBAC7B,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD;;;OAGG;IACO,WAAW,CAAoB;IAEzC;;;OAGG;IACK,WAAW,GAA4E,IAAI,GAAG,EAAE,CAAC;IAEzG;;;OAGG;IACH,MAAM,CAAC,UAAU;QACf,OAAO,IAAI,CAAC,IAAI;aACb,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,iCAAiC;aACrD,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;aAC1B,WAAW,EAAE;aACb,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB;IAC9C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,cAAc;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,8CAA8C;QAC9C,IAAI,OAAO,GAAG,SAAS,CAAC;QACxB,OAAO,OAAO,IAAI,OAAO,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;YAClD,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACnD,
|
|
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"}
|
package/dist/compiler.js
ADDED
|
@@ -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"}
|
package/dist/config.d.ts
ADDED
|
@@ -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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"}
|