@portel/photon 1.33.1 → 1.33.3
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/README.md +74 -19
- package/dist/auto-ui/frontend/pure-view.html +5 -2
- package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
- package/dist/auto-ui/streamable-http-transport.js +62 -11
- package/dist/auto-ui/streamable-http-transport.js.map +1 -1
- package/dist/beam.bundle.js +19 -17
- package/dist/beam.bundle.js.map +2 -2
- package/dist/capability-negotiator.d.ts +11 -0
- package/dist/capability-negotiator.d.ts.map +1 -1
- package/dist/capability-negotiator.js +20 -0
- package/dist/capability-negotiator.js.map +1 -1
- package/dist/cli/commands/maker.d.ts.map +1 -1
- package/dist/cli/commands/maker.js +159 -27
- package/dist/cli/commands/maker.js.map +1 -1
- package/dist/daemon/worker-dep-proxy.d.ts +17 -0
- package/dist/daemon/worker-dep-proxy.d.ts.map +1 -0
- package/dist/daemon/worker-dep-proxy.js +92 -0
- package/dist/daemon/worker-dep-proxy.js.map +1 -0
- package/dist/daemon/worker-host.js +8 -28
- package/dist/daemon/worker-host.js.map +1 -1
- package/dist/deploy/cloudflare.d.ts.map +1 -1
- package/dist/deploy/cloudflare.js +15 -0
- package/dist/deploy/cloudflare.js.map +1 -1
- package/dist/photon-doc-extractor.d.ts +10 -0
- package/dist/photon-doc-extractor.d.ts.map +1 -1
- package/dist/photon-doc-extractor.js +26 -2
- package/dist/photon-doc-extractor.js.map +1 -1
- package/dist/resource-server.d.ts +15 -0
- package/dist/resource-server.d.ts.map +1 -1
- package/dist/resource-server.js +86 -5
- package/dist/resource-server.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +20 -10
- package/dist/server.js.map +1 -1
- package/dist/template-manager.js +14 -14
- package/dist/version.d.ts +7 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +8 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/templates/cloudflare/worker.ts.template +26 -8
package/dist/template-manager.js
CHANGED
|
@@ -16,7 +16,7 @@ export class TemplateManager {
|
|
|
16
16
|
templateDir;
|
|
17
17
|
hashFile;
|
|
18
18
|
// Current template version - increment when templates are updated
|
|
19
|
-
static TEMPLATE_VERSION = '
|
|
19
|
+
static TEMPLATE_VERSION = '4.0.0';
|
|
20
20
|
constructor(workingDir) {
|
|
21
21
|
this.marketplaceDir = path.join(workingDir, '.marketplace');
|
|
22
22
|
this.templateDir = path.join(this.marketplaceDir, '_templates');
|
|
@@ -348,11 +348,11 @@ export class TemplateManager {
|
|
|
348
348
|
getDefaultReadmeTemplate() {
|
|
349
349
|
return `# \${marketplaceName}
|
|
350
350
|
|
|
351
|
-
\${$if(marketplaceDescription, \`\${marketplaceDescription}\n\n\`, \`
|
|
351
|
+
\${$if(marketplaceDescription, \`\${marketplaceDescription}\n\n\`, marketplaceKind === 'examples' ? \`Small examples that teach one Photon capability at a time.\n\n\` : \`Ready-to-use single-file TypeScript [MCP](https://modelcontextprotocol.io/introduction) apps and tools for AI assistants.\n\n\`)}\${$if(marketplaceKind === 'apps', \`Use these directly from Claude Desktop, ChatGPT connectors, Beam, or the Photon CLI. Each photon is one auditable TypeScript file plus optional UI assets.\n\n\`, '')}\${$if(marketplaceKind === 'examples', \`These are learning-oriented photons. For production-ready tools, use the main Photon app marketplace.\n\n\`, '')}## Gallery
|
|
352
352
|
|
|
353
|
-
| Photon |
|
|
354
|
-
|
|
355
|
-
\${each(photons, (p) => \`| [**\${properName(p.description, p.name)}**](\${p.name}.md) | \${brief(cleanDesc(p.description))} | \${p.tools ? p.tools.length : 0} | \${p.photonType === 'workflow' ? 'Workflow' : p.photonType === 'streaming' ? 'Streaming' : 'API'}\${(p.features || []).some(f => f === 'custom-ui' || f === 'dashboard') ? ' + UI' : ''} |\n\`)}
|
|
353
|
+
\${each(sections || [{ title: 'Photons', description: '', photons }], (section) => \`\${section.title ? \`### \${section.title}\n\n\` : ''}\${section.description ? \`\${section.description}\n\n\` : ''}| Photon | What it gives an agent | Tools | Shape |
|
|
354
|
+
|--------|------------------------|-------|-------|
|
|
355
|
+
\${each(section.photons || [], (p) => \`| [**\${p.label || properName(p.description, p.name)}**](\${p.name}.md) | \${p.summary || brief(cleanDesc(p.description))} | \${p.tools ? p.tools.length : 0} | \${p.photonType === 'workflow' ? 'Workflow' : p.photonType === 'streaming' ? 'Streaming' : 'API'}\${(p.features || []).some(f => f === 'custom-ui' || f === 'dashboard') ? ' + UI' : ''} |\n\`)}\n\`)}
|
|
356
356
|
|
|
357
357
|
## Quick Start
|
|
358
358
|
|
|
@@ -360,20 +360,20 @@ export class TemplateManager {
|
|
|
360
360
|
# Install the CLI
|
|
361
361
|
${globalInstallCmd('@portel/photon')}
|
|
362
362
|
|
|
363
|
-
# Add a photon
|
|
364
|
-
photon add
|
|
363
|
+
# Add a photon from this marketplace
|
|
364
|
+
photon add \${quickStart.photon}
|
|
365
365
|
|
|
366
366
|
# Get MCP config (paste into your client)
|
|
367
|
-
|
|
367
|
+
\${quickStart.command}
|
|
368
368
|
\\\`\\\`\\\`
|
|
369
369
|
|
|
370
370
|
Output:
|
|
371
371
|
\\\`\\\`\\\`json
|
|
372
372
|
{
|
|
373
373
|
"mcpServers": {
|
|
374
|
-
"
|
|
374
|
+
"\${quickStart.photon}": {
|
|
375
375
|
"command": "photon",
|
|
376
|
-
"args": ["mcp", "
|
|
376
|
+
"args": ["mcp", "\${quickStart.photon}"]
|
|
377
377
|
}
|
|
378
378
|
}
|
|
379
379
|
}
|
|
@@ -383,15 +383,15 @@ Output:
|
|
|
383
383
|
|
|
384
384
|
\\\`\\\`\\\`bash
|
|
385
385
|
photon add <name> # Install a photon
|
|
386
|
-
photon
|
|
387
|
-
photon
|
|
386
|
+
photon list # List local photons
|
|
387
|
+
photon info <name> --mcp # Get MCP config for a photon
|
|
388
388
|
photon search <keyword> # Search available photons
|
|
389
389
|
photon upgrade # Upgrade all photons
|
|
390
390
|
\\\`\\\`\\\`
|
|
391
|
-
\${$if(marketplaceName
|
|
391
|
+
\${$if(marketplaceName.toLowerCase().includes('photon app'), \`
|
|
392
392
|
## Contributing
|
|
393
393
|
|
|
394
|
-
PRs welcome for
|
|
394
|
+
PRs welcome for focused, well-tested photons. Keep the gallery small: polished apps here, teaching examples in the examples marketplace.
|
|
395
395
|
\`, '')}
|
|
396
396
|
---
|
|
397
397
|
|
package/dist/version.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Published package version without local git build metadata.
|
|
3
|
+
*
|
|
4
|
+
* Use this for generated files that are committed to repositories, where
|
|
5
|
+
* checkout-specific SHA noise would make otherwise stable outputs churn.
|
|
6
|
+
*/
|
|
7
|
+
export declare const PHOTON_PACKAGE_VERSION: string;
|
|
1
8
|
/**
|
|
2
9
|
* Photon runtime version. When running from a git checkout, includes a
|
|
3
10
|
* `+sha.<short>` build-metadata suffix (semver 2.0 legal) so `photon
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AA+FA;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AA+FA;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAoB,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,MAA2C,CAAC;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,OAA8B,CAAC;AAE1D,eAAO,MAAM,mBAAmB,EAAE,MAC8B,CAAC;AAEjE;;;;;GAKG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAQrD"}
|
package/dist/version.js
CHANGED
|
@@ -98,12 +98,19 @@ function computeDevBuildMarker() {
|
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
const devMarker = computeDevBuildMarker();
|
|
101
|
+
/**
|
|
102
|
+
* Published package version without local git build metadata.
|
|
103
|
+
*
|
|
104
|
+
* Use this for generated files that are committed to repositories, where
|
|
105
|
+
* checkout-specific SHA noise would make otherwise stable outputs churn.
|
|
106
|
+
*/
|
|
107
|
+
export const PHOTON_PACKAGE_VERSION = pkg.version;
|
|
101
108
|
/**
|
|
102
109
|
* Photon runtime version. When running from a git checkout, includes a
|
|
103
110
|
* `+sha.<short>` build-metadata suffix (semver 2.0 legal) so `photon
|
|
104
111
|
* --version` distinguishes the dev tree from a published tarball.
|
|
105
112
|
*/
|
|
106
|
-
export const PHOTON_VERSION =
|
|
113
|
+
export const PHOTON_VERSION = PHOTON_PACKAGE_VERSION + devMarker;
|
|
107
114
|
/**
|
|
108
115
|
* True when this process is running from a git checkout rather than an
|
|
109
116
|
* installed npm tarball. Useful for guidance: agents can warn users when
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -24,6 +24,7 @@ const MCP_AUTH_MODE = __MCP_AUTH_MODE__;
|
|
|
24
24
|
const MCP_JWT_ISSUER = __MCP_JWT_ISSUER__;
|
|
25
25
|
const MCP_JWT_AUDIENCE = __MCP_JWT_AUDIENCE__;
|
|
26
26
|
const MCP_JWT_JWKS = __MCP_JWT_JWKS__;
|
|
27
|
+
const DEPLOY_INSTANCE_ALIASES: Record<string, string> = __INSTANCE_ALIASES__;
|
|
27
28
|
|
|
28
29
|
/**
|
|
29
30
|
* Photon name → Worker env binding name. Generated at deploy time from the
|
|
@@ -1743,27 +1744,44 @@ const CF_ACCESS_ENABLED = __CF_ACCESS_ENABLED__;
|
|
|
1743
1744
|
* CF Access verifies the JWT at the edge before the request reaches this
|
|
1744
1745
|
* Worker, so we trust the claim without re-verifying the signature here.
|
|
1745
1746
|
*/
|
|
1746
|
-
function
|
|
1747
|
+
function canonicalizeInstance(instance: string, env: Env): string {
|
|
1748
|
+
const key = instance.trim().toLowerCase();
|
|
1749
|
+
const aliases: Record<string, string> = { ...DEPLOY_INSTANCE_ALIASES };
|
|
1750
|
+
const runtimeAliases = env.PHOTON_INSTANCE_ALIASES;
|
|
1751
|
+
if (typeof runtimeAliases === 'string' && runtimeAliases.trim()) {
|
|
1752
|
+
try {
|
|
1753
|
+
const parsed = JSON.parse(runtimeAliases) as Record<string, unknown>;
|
|
1754
|
+
for (const [from, to] of Object.entries(parsed)) {
|
|
1755
|
+
if (typeof to === 'string' && to.trim()) aliases[from.toLowerCase()] = to;
|
|
1756
|
+
}
|
|
1757
|
+
} catch (err) {
|
|
1758
|
+
console.warn('canonicalizeInstance: PHOTON_INSTANCE_ALIASES parse failed', err);
|
|
1759
|
+
}
|
|
1760
|
+
}
|
|
1761
|
+
return aliases[key] || instance;
|
|
1762
|
+
}
|
|
1763
|
+
|
|
1764
|
+
function extractInstance(request: Request, env: Env): string {
|
|
1765
|
+
let instance: string | null = null;
|
|
1747
1766
|
if (CF_ACCESS_ENABLED) {
|
|
1748
1767
|
const headerEmail = request.headers.get('Cf-Access-Authenticated-User-Email');
|
|
1749
|
-
if (headerEmail)
|
|
1768
|
+
if (headerEmail) instance = headerEmail;
|
|
1750
1769
|
const jwt = request.headers.get('Cf-Access-Jwt-Assertion');
|
|
1751
|
-
if (jwt) {
|
|
1770
|
+
if (!instance && jwt) {
|
|
1752
1771
|
try {
|
|
1753
1772
|
const part = jwt.split('.')[1];
|
|
1754
1773
|
const b64 = part.replace(/-/g, '+').replace(/_/g, '/');
|
|
1755
1774
|
const padded = b64 + '==='.slice((b64.length + 3) % 4);
|
|
1756
1775
|
const payload = JSON.parse(atob(padded));
|
|
1757
|
-
if (payload?.email)
|
|
1776
|
+
if (payload?.email) instance = payload.email as string;
|
|
1758
1777
|
} catch (err) {
|
|
1759
1778
|
console.warn('extractInstance: JWT parse failed', err);
|
|
1760
1779
|
}
|
|
1761
1780
|
}
|
|
1762
1781
|
}
|
|
1763
1782
|
const url = new URL(request.url);
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
);
|
|
1783
|
+
instance ??= url.searchParams.get('instance') ?? request.headers.get('X-Photon-Instance') ?? 'default';
|
|
1784
|
+
return canonicalizeInstance(instance, env);
|
|
1767
1785
|
}
|
|
1768
1786
|
|
|
1769
1787
|
export default {
|
|
@@ -1778,7 +1796,7 @@ export default {
|
|
|
1778
1796
|
},
|
|
1779
1797
|
});
|
|
1780
1798
|
}
|
|
1781
|
-
const instance = extractInstance(request);
|
|
1799
|
+
const instance = extractInstance(request, env);
|
|
1782
1800
|
const id = env.__HOST_BINDING__.idFromName(instance);
|
|
1783
1801
|
return env.__HOST_BINDING__.get(id).fetch(request);
|
|
1784
1802
|
},
|