@portel/photon 1.16.1 → 1.17.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/auto-ui/beam/external-mcp.d.ts.map +1 -1
- package/dist/auto-ui/beam/routes/api-browse.d.ts.map +1 -1
- package/dist/auto-ui/beam/routes/api-browse.js +28 -7
- package/dist/auto-ui/beam/routes/api-browse.js.map +1 -1
- package/dist/auto-ui/beam/routes/api-config.d.ts.map +1 -1
- package/dist/auto-ui/beam/routes/api-config.js.map +1 -1
- package/dist/auto-ui/beam/types.d.ts.map +1 -1
- package/dist/auto-ui/beam.d.ts.map +1 -1
- package/dist/auto-ui/beam.js +35 -42
- package/dist/auto-ui/beam.js.map +1 -1
- package/dist/auto-ui/bridge/index.d.ts.map +1 -1
- package/dist/auto-ui/bridge/renderers.d.ts.map +1 -1
- package/dist/auto-ui/bridge/renderers.js +202 -13
- package/dist/auto-ui/bridge/renderers.js.map +1 -1
- package/dist/auto-ui/components/checklist.d.ts +13 -0
- package/dist/auto-ui/components/checklist.d.ts.map +1 -0
- package/dist/auto-ui/components/checklist.js +48 -0
- package/dist/auto-ui/components/checklist.js.map +1 -0
- package/dist/auto-ui/photon-host.d.ts +0 -1
- package/dist/auto-ui/photon-host.d.ts.map +1 -1
- package/dist/auto-ui/photon-host.js +0 -3
- package/dist/auto-ui/photon-host.js.map +1 -1
- package/dist/auto-ui/platform-compat.js.map +1 -1
- package/dist/auto-ui/playground-html.js +1 -1
- package/dist/auto-ui/playground-html.js.map +1 -1
- package/dist/auto-ui/registry.d.ts.map +1 -1
- package/dist/auto-ui/registry.js +2 -0
- package/dist/auto-ui/registry.js.map +1 -1
- package/dist/auto-ui/rendering/template-engine.d.ts.map +1 -1
- package/dist/auto-ui/rendering/template-engine.js +0 -3
- package/dist/auto-ui/rendering/template-engine.js.map +1 -1
- package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
- package/dist/auto-ui/streamable-http-transport.js.map +1 -1
- package/dist/auto-ui/types.d.ts +1 -1
- package/dist/auto-ui/types.d.ts.map +1 -1
- package/dist/auto-ui/types.js.map +1 -1
- package/dist/beam-form.bundle.js +131 -0
- package/dist/beam-form.bundle.js.map +2 -2
- package/dist/beam.bundle.js +3988 -84
- package/dist/beam.bundle.js.map +4 -4
- package/dist/cli/commands/config.js +2 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/daemon.js +4 -4
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +0 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/package.d.ts.map +1 -1
- package/dist/cli/commands/package.js +10 -3
- package/dist/cli/commands/package.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +1 -2
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/client.js +0 -2
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/server.js +321 -22
- package/dist/daemon/server.js.map +1 -1
- package/dist/loader.d.ts +0 -2
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +15 -21
- package/dist/loader.js.map +1 -1
- package/dist/marketplace-manager.d.ts +14 -0
- package/dist/marketplace-manager.d.ts.map +1 -1
- package/dist/marketplace-manager.js +146 -26
- package/dist/marketplace-manager.js.map +1 -1
- package/dist/namespace-migration.d.ts.map +1 -1
- package/dist/namespace-migration.js +0 -12
- package/dist/namespace-migration.js.map +1 -1
- package/dist/path-resolver.js.map +1 -1
- package/dist/photon-cli-runner.d.ts.map +1 -1
- package/dist/photon-cli-runner.js +18 -24
- package/dist/photon-cli-runner.js.map +1 -1
- package/dist/photon-doc-extractor.d.ts.map +1 -1
- package/dist/photon-doc-extractor.js +0 -1
- package/dist/photon-doc-extractor.js.map +1 -1
- package/dist/photons/maker.photon.d.ts +0 -1
- package/dist/photons/maker.photon.d.ts.map +1 -1
- package/dist/photons/maker.photon.js +1 -4
- package/dist/photons/maker.photon.js.map +1 -1
- package/dist/photons/maker.photon.ts +1 -5
- package/dist/photons/marketplace.photon.d.ts +1 -2
- package/dist/photons/marketplace.photon.d.ts.map +1 -1
- package/dist/photons/marketplace.photon.js +2 -3
- package/dist/photons/marketplace.photon.js.map +1 -1
- package/dist/photons/marketplace.photon.ts +2 -5
- package/dist/serv/auth/oauth.d.ts.map +1 -1
- package/dist/serv/auth/oauth.js.map +1 -1
- package/dist/serv/local.d.ts.map +1 -1
- package/dist/serv/local.js +1 -1
- package/dist/serv/local.js.map +1 -1
- package/dist/serv/middleware/auth.d.ts.map +1 -1
- package/dist/serv/middleware/auth.js.map +1 -1
- package/dist/serv/runtime/oauth-context.d.ts +0 -1
- package/dist/serv/runtime/oauth-context.d.ts.map +1 -1
- package/dist/serv/runtime/oauth-context.js +0 -2
- package/dist/serv/runtime/oauth-context.js.map +1 -1
- package/dist/serv/vault/token-vault.d.ts +0 -1
- package/dist/serv/vault/token-vault.d.ts.map +1 -1
- package/dist/serv/vault/token-vault.js +0 -2
- package/dist/serv/vault/token-vault.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -4
- package/dist/server.js.map +1 -1
- package/dist/shared/io.d.ts +33 -0
- package/dist/shared/io.d.ts.map +1 -0
- package/dist/shared/io.js +88 -0
- package/dist/shared/io.js.map +1 -0
- package/dist/tasks/store.d.ts.map +1 -1
- package/dist/tasks/store.js +7 -6
- package/dist/tasks/store.js.map +1 -1
- package/dist/template-manager.d.ts +0 -1
- package/dist/template-manager.d.ts.map +1 -1
- package/dist/template-manager.js +0 -2
- package/dist/template-manager.js.map +1 -1
- package/package.json +2 -1
package/dist/loader.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import * as fs from 'fs/promises';
|
|
7
7
|
import { realpathSync, existsSync, mkdirSync, symlinkSync, readFileSync } from 'fs';
|
|
8
|
+
import { readText, readJSON, writeText, writeJSON } from './shared/io.js';
|
|
8
9
|
import { createRequire } from 'module';
|
|
9
10
|
import * as path from 'path';
|
|
10
11
|
import { pathToFileURL } from 'url';
|
|
@@ -185,8 +186,6 @@ export class PhotonLoader {
|
|
|
185
186
|
mcpClients = new Map();
|
|
186
187
|
/** In-flight MCP client creation promises — dedup concurrent creates for the same dep */
|
|
187
188
|
mcpClientPromises = new Map();
|
|
188
|
-
/** SDK factory for MCP connections */
|
|
189
|
-
sdkFactory;
|
|
190
189
|
/** Cached MCP config from ~/.photon/config.json */
|
|
191
190
|
mcpConfig;
|
|
192
191
|
/** Inflight config load promise (dedup concurrent calls) */
|
|
@@ -309,7 +308,7 @@ export class PhotonLoader {
|
|
|
309
308
|
: crypto.createHash('sha256').update(content).digest('hex').slice(0, 12);
|
|
310
309
|
const safeLabel = this.sanitizeCacheLabel(label);
|
|
311
310
|
const cachePath = path.join(cacheDir, `${safeLabel}.${hash}.photon.ts`);
|
|
312
|
-
await
|
|
311
|
+
await writeText(cachePath, content);
|
|
313
312
|
return cachePath;
|
|
314
313
|
}
|
|
315
314
|
async runCommand(command, args, cwd) {
|
|
@@ -357,8 +356,7 @@ export class PhotonLoader {
|
|
|
357
356
|
}
|
|
358
357
|
async readDependencyMetadata(cacheKey) {
|
|
359
358
|
try {
|
|
360
|
-
|
|
361
|
-
return JSON.parse(data);
|
|
359
|
+
return await readJSON(this.getDependencyMetadataPath(cacheKey));
|
|
362
360
|
}
|
|
363
361
|
catch (error) {
|
|
364
362
|
this.logger.debug('Failed to read dependency metadata', { error });
|
|
@@ -390,12 +388,12 @@ export class PhotonLoader {
|
|
|
390
388
|
async writeDependencyMetadata(cacheKey, hash, dependencies, photonPath, photonCoreVersion) {
|
|
391
389
|
const metadataPath = this.getDependencyMetadataPath(cacheKey);
|
|
392
390
|
await fs.mkdir(path.dirname(metadataPath), { recursive: true });
|
|
393
|
-
await
|
|
391
|
+
await writeJSON(metadataPath, {
|
|
394
392
|
hash,
|
|
395
393
|
dependencies,
|
|
396
394
|
photonPath: photonPath ? path.resolve(photonPath) : undefined,
|
|
397
395
|
photonCoreVersion,
|
|
398
|
-
}
|
|
396
|
+
});
|
|
399
397
|
}
|
|
400
398
|
async ensureDependenciesWithHash(cacheKey, mcpName, dependencies, sourceHash, photonPath) {
|
|
401
399
|
const metadata = await this.readDependencyMetadata(cacheKey);
|
|
@@ -521,7 +519,7 @@ export class PhotonLoader {
|
|
|
521
519
|
let mcpName = '';
|
|
522
520
|
let cacheKey = null;
|
|
523
521
|
if (absolutePath.endsWith('.ts')) {
|
|
524
|
-
tsContent = await
|
|
522
|
+
tsContent = await readText(absolutePath);
|
|
525
523
|
// Check runtime version compatibility
|
|
526
524
|
const requiredRuntime = parseRuntimeRequirement(tsContent);
|
|
527
525
|
if (requiredRuntime) {
|
|
@@ -818,7 +816,7 @@ export class PhotonLoader {
|
|
|
818
816
|
const instName = file.replace('.json', '');
|
|
819
817
|
const statePath = path.join(stateDir, file);
|
|
820
818
|
try {
|
|
821
|
-
const snapshot =
|
|
819
|
+
const snapshot = await readJSON(statePath);
|
|
822
820
|
const stat = await fs.stat(statePath);
|
|
823
821
|
yield {
|
|
824
822
|
name: instName,
|
|
@@ -1267,7 +1265,7 @@ export class PhotonLoader {
|
|
|
1267
1265
|
const absolutePath = path.resolve(filePath);
|
|
1268
1266
|
if (absolutePath.endsWith('.ts')) {
|
|
1269
1267
|
// Clear the compiled cache
|
|
1270
|
-
const tsContent = await
|
|
1268
|
+
const tsContent = await readText(absolutePath);
|
|
1271
1269
|
const hash = crypto.createHash('sha256').update(tsContent).digest('hex').slice(0, 16);
|
|
1272
1270
|
const mcpName = path.basename(absolutePath, '.ts').replace('.photon', '');
|
|
1273
1271
|
const cacheKey = this.getCacheKey(mcpName, absolutePath);
|
|
@@ -1401,8 +1399,7 @@ export class PhotonLoader {
|
|
|
1401
1399
|
// First, try loading from manual schema override file
|
|
1402
1400
|
const schemaJsonPath = sourceFilePath.replace(/\.ts$/, '.schema.json');
|
|
1403
1401
|
try {
|
|
1404
|
-
const
|
|
1405
|
-
const schemas = JSON.parse(schemaContent);
|
|
1402
|
+
const schemas = await readJSON(schemaJsonPath);
|
|
1406
1403
|
// Process tools
|
|
1407
1404
|
if (schemas.tools) {
|
|
1408
1405
|
for (const schema of schemas.tools) {
|
|
@@ -1458,7 +1455,7 @@ export class PhotonLoader {
|
|
|
1458
1455
|
jsonError.code === 'ENOENT';
|
|
1459
1456
|
if (isNotFound) {
|
|
1460
1457
|
const extractor = new SchemaExtractor();
|
|
1461
|
-
const source = sourceContent || (await
|
|
1458
|
+
const source = sourceContent || (await readText(sourceFilePath));
|
|
1462
1459
|
const metadata = extractor.extractAllFromSource(source);
|
|
1463
1460
|
// Filter by method names that exist in the class
|
|
1464
1461
|
tools = metadata.tools.filter((t) => methodNames.includes(t.name));
|
|
@@ -1526,8 +1523,7 @@ export class PhotonLoader {
|
|
|
1526
1523
|
async loadSettings(photonName, instanceName) {
|
|
1527
1524
|
const settingsPath = this.getSettingsPath(photonName, instanceName);
|
|
1528
1525
|
try {
|
|
1529
|
-
|
|
1530
|
-
return JSON.parse(data);
|
|
1526
|
+
return await readJSON(settingsPath);
|
|
1531
1527
|
}
|
|
1532
1528
|
catch {
|
|
1533
1529
|
return {};
|
|
@@ -1540,7 +1536,7 @@ export class PhotonLoader {
|
|
|
1540
1536
|
const settingsPath = this.getSettingsPath(photonName, instanceName);
|
|
1541
1537
|
const dir = path.dirname(settingsPath);
|
|
1542
1538
|
await fs.mkdir(dir, { recursive: true });
|
|
1543
|
-
await
|
|
1539
|
+
await writeJSON(settingsPath, values);
|
|
1544
1540
|
}
|
|
1545
1541
|
/**
|
|
1546
1542
|
* Inject settings into a photon instance:
|
|
@@ -1704,7 +1700,7 @@ export class PhotonLoader {
|
|
|
1704
1700
|
*/
|
|
1705
1701
|
async extractConstructorParams(filePath) {
|
|
1706
1702
|
try {
|
|
1707
|
-
const source = await
|
|
1703
|
+
const source = await readText(filePath);
|
|
1708
1704
|
const extractor = new SchemaExtractor();
|
|
1709
1705
|
return extractor.extractConstructorParams(source);
|
|
1710
1706
|
}
|
|
@@ -1831,7 +1827,7 @@ export class PhotonLoader {
|
|
|
1831
1827
|
const stateKey = injection.stateKey;
|
|
1832
1828
|
const stateFile = getInstanceStatePath(mcpName, instanceName, this.baseDir, photonPath);
|
|
1833
1829
|
try {
|
|
1834
|
-
const snapshot =
|
|
1830
|
+
const snapshot = await readJSON(stateFile);
|
|
1835
1831
|
if (stateKey in snapshot) {
|
|
1836
1832
|
values.push(snapshot[stateKey]);
|
|
1837
1833
|
this.log(` ✅ Restored state: ${stateKey} (from ${stateFile})`);
|
|
@@ -2316,7 +2312,7 @@ export class PhotonLoader {
|
|
|
2316
2312
|
const packageJsonPath = path.join(cacheDir, 'package.json');
|
|
2317
2313
|
if (!(await this.pathExists(packageJsonPath))) {
|
|
2318
2314
|
const pkgName = `photon-npm-${this.sanitizeCacheLabel(packageSpec)}`;
|
|
2319
|
-
await
|
|
2315
|
+
await writeJSON(packageJsonPath, { name: pkgName, version: PHOTON_VERSION });
|
|
2320
2316
|
}
|
|
2321
2317
|
const packageRoot = this.getPackageInstallPath(cacheDir, packageName);
|
|
2322
2318
|
if (await this.pathExists(packageRoot)) {
|
|
@@ -2591,9 +2587,7 @@ Run: photon mcp ${mcpName} --config
|
|
|
2591
2587
|
// so we must emit events here where ALL tool executions are guaranteed to pass through
|
|
2592
2588
|
if (mcp.instance && typeof mcp.instance.emit === 'function') {
|
|
2593
2589
|
try {
|
|
2594
|
-
// Check if this is a @stateful photon by looking for emit method and @stateful tag
|
|
2595
2590
|
const photonName = mcp.name;
|
|
2596
|
-
const hasStatefulTag = mcp.tools.some((t) => t.name === toolName); // Assume @stateful if loaded
|
|
2597
2591
|
// Attach __meta to result if it's an object and doesn't already have it
|
|
2598
2592
|
if (result && typeof result === 'object' && !Array.isArray(result) && !result.__meta) {
|
|
2599
2593
|
const timestamp = new Date().toISOString();
|