@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.
Files changed (41) hide show
  1. package/README.md +74 -19
  2. package/dist/auto-ui/frontend/pure-view.html +5 -2
  3. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
  4. package/dist/auto-ui/streamable-http-transport.js +62 -11
  5. package/dist/auto-ui/streamable-http-transport.js.map +1 -1
  6. package/dist/beam.bundle.js +19 -17
  7. package/dist/beam.bundle.js.map +2 -2
  8. package/dist/capability-negotiator.d.ts +11 -0
  9. package/dist/capability-negotiator.d.ts.map +1 -1
  10. package/dist/capability-negotiator.js +20 -0
  11. package/dist/capability-negotiator.js.map +1 -1
  12. package/dist/cli/commands/maker.d.ts.map +1 -1
  13. package/dist/cli/commands/maker.js +159 -27
  14. package/dist/cli/commands/maker.js.map +1 -1
  15. package/dist/daemon/worker-dep-proxy.d.ts +17 -0
  16. package/dist/daemon/worker-dep-proxy.d.ts.map +1 -0
  17. package/dist/daemon/worker-dep-proxy.js +92 -0
  18. package/dist/daemon/worker-dep-proxy.js.map +1 -0
  19. package/dist/daemon/worker-host.js +8 -28
  20. package/dist/daemon/worker-host.js.map +1 -1
  21. package/dist/deploy/cloudflare.d.ts.map +1 -1
  22. package/dist/deploy/cloudflare.js +15 -0
  23. package/dist/deploy/cloudflare.js.map +1 -1
  24. package/dist/photon-doc-extractor.d.ts +10 -0
  25. package/dist/photon-doc-extractor.d.ts.map +1 -1
  26. package/dist/photon-doc-extractor.js +26 -2
  27. package/dist/photon-doc-extractor.js.map +1 -1
  28. package/dist/resource-server.d.ts +15 -0
  29. package/dist/resource-server.d.ts.map +1 -1
  30. package/dist/resource-server.js +86 -5
  31. package/dist/resource-server.js.map +1 -1
  32. package/dist/server.d.ts.map +1 -1
  33. package/dist/server.js +20 -10
  34. package/dist/server.js.map +1 -1
  35. package/dist/template-manager.js +14 -14
  36. package/dist/version.d.ts +7 -0
  37. package/dist/version.d.ts.map +1 -1
  38. package/dist/version.js +8 -1
  39. package/dist/version.js.map +1 -1
  40. package/package.json +1 -1
  41. package/templates/cloudflare/worker.ts.template +26 -8
@@ -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 = '3.0.0';
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\`, \`A collection of single-file TypeScript [MCP](https://modelcontextprotocol.io/introduction) servers for AI assistants.\n\n\`)}## Photons
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 | Description | Tools | Type |
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 filesystem
363
+ # Add a photon from this marketplace
364
+ photon add \${quickStart.photon}
365
365
 
366
366
  # Get MCP config (paste into your client)
367
- photon get filesystem --mcp
367
+ \${quickStart.command}
368
368
  \\\`\\\`\\\`
369
369
 
370
370
  Output:
371
371
  \\\`\\\`\\\`json
372
372
  {
373
373
  "mcpServers": {
374
- "filesystem": {
374
+ "\${quickStart.photon}": {
375
375
  "command": "photon",
376
- "args": ["mcp", "filesystem"]
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 get # List installed photons
387
- photon get <name> --mcp # Get MCP config for a 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 === 'photons', \`
391
+ \${$if(marketplaceName.toLowerCase().includes('photon app'), \`
392
392
  ## Contributing
393
393
 
394
- PRs welcome for bug fixes, enhancements, and new photons.
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
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AA+FA;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,MAAgC,CAAC;AAE9D;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,OAA8B,CAAC;AAE1D,eAAO,MAAM,mBAAmB,EAAE,MAC8B,CAAC;AAEjE;;;;;GAKG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAQrD"}
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 = pkg.version + devMarker;
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
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@portel/photon",
3
- "version": "1.33.1",
3
+ "version": "1.33.3",
4
4
  "description": "You focus on the business logic. We'll enable the rest. Build MCP servers and CLI tools in a single TypeScript file.",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.2.20",
@@ -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 extractInstance(request: Request): string {
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) return 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) return payload.email as string;
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
- return (
1765
- url.searchParams.get('instance') ?? request.headers.get('X-Photon-Instance') ?? 'default'
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
  },