@portel/photon 1.28.2 → 1.31.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 (183) hide show
  1. package/README.md +42 -11
  2. package/dist/asset-resolver.d.ts +44 -0
  3. package/dist/asset-resolver.d.ts.map +1 -0
  4. package/dist/asset-resolver.js +105 -0
  5. package/dist/asset-resolver.js.map +1 -0
  6. package/dist/auto-ui/beam/external-mcp-manager.d.ts +73 -0
  7. package/dist/auto-ui/beam/external-mcp-manager.d.ts.map +1 -0
  8. package/dist/auto-ui/beam/external-mcp-manager.js +65 -0
  9. package/dist/auto-ui/beam/external-mcp-manager.js.map +1 -0
  10. package/dist/auto-ui/beam/external-mcp.d.ts.map +1 -1
  11. package/dist/auto-ui/beam/external-mcp.js +25 -1
  12. package/dist/auto-ui/beam/external-mcp.js.map +1 -1
  13. package/dist/auto-ui/beam/photon-management.d.ts.map +1 -1
  14. package/dist/auto-ui/beam/photon-management.js +11 -8
  15. package/dist/auto-ui/beam/photon-management.js.map +1 -1
  16. package/dist/auto-ui/beam/routes/api-browse.d.ts.map +1 -1
  17. package/dist/auto-ui/beam/routes/api-browse.js +7 -4
  18. package/dist/auto-ui/beam/routes/api-browse.js.map +1 -1
  19. package/dist/auto-ui/beam/routes/api-config.d.ts.map +1 -1
  20. package/dist/auto-ui/beam/routes/api-config.js +3 -2
  21. package/dist/auto-ui/beam/routes/api-config.js.map +1 -1
  22. package/dist/auto-ui/beam/routes/api-marketplace.d.ts.map +1 -1
  23. package/dist/auto-ui/beam/routes/api-marketplace.js +6 -2
  24. package/dist/auto-ui/beam/routes/api-marketplace.js.map +1 -1
  25. package/dist/auto-ui/beam/startup.js.map +1 -1
  26. package/dist/auto-ui/beam/types.d.ts +5 -2
  27. package/dist/auto-ui/beam/types.d.ts.map +1 -1
  28. package/dist/auto-ui/beam.d.ts.map +1 -1
  29. package/dist/auto-ui/beam.js +239 -88
  30. package/dist/auto-ui/beam.js.map +1 -1
  31. package/dist/auto-ui/bridge/index.d.ts.map +1 -1
  32. package/dist/auto-ui/bridge/index.js +11 -0
  33. package/dist/auto-ui/bridge/index.js.map +1 -1
  34. package/dist/auto-ui/bridge/types.d.ts +2 -0
  35. package/dist/auto-ui/bridge/types.d.ts.map +1 -1
  36. package/dist/auto-ui/openapi-generator.js +1 -4
  37. package/dist/auto-ui/openapi-generator.js.map +1 -1
  38. package/dist/auto-ui/photon-bridge.d.ts +4 -0
  39. package/dist/auto-ui/photon-bridge.d.ts.map +1 -1
  40. package/dist/auto-ui/photon-bridge.js.map +1 -1
  41. package/dist/auto-ui/photon-host.js.map +1 -1
  42. package/dist/auto-ui/streamable-http-transport.d.ts +7 -0
  43. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
  44. package/dist/auto-ui/streamable-http-transport.js +252 -43
  45. package/dist/auto-ui/streamable-http-transport.js.map +1 -1
  46. package/dist/auto-ui/types.d.ts +24 -2
  47. package/dist/auto-ui/types.d.ts.map +1 -1
  48. package/dist/auto-ui/types.js.map +1 -1
  49. package/dist/beam.bundle.js +202 -24
  50. package/dist/beam.bundle.js.map +3 -3
  51. package/dist/capability-negotiator.d.ts +39 -1
  52. package/dist/capability-negotiator.d.ts.map +1 -1
  53. package/dist/capability-negotiator.js +5 -0
  54. package/dist/capability-negotiator.js.map +1 -1
  55. package/dist/cf-bindings-parser.d.ts +15 -0
  56. package/dist/cf-bindings-parser.d.ts.map +1 -0
  57. package/dist/cf-bindings-parser.js +98 -0
  58. package/dist/cf-bindings-parser.js.map +1 -0
  59. package/dist/cf-usage-scanner.d.ts +76 -0
  60. package/dist/cf-usage-scanner.d.ts.map +1 -0
  61. package/dist/cf-usage-scanner.js +179 -0
  62. package/dist/cf-usage-scanner.js.map +1 -0
  63. package/dist/cli/commands/build.d.ts.map +1 -1
  64. package/dist/cli/commands/build.js +124 -16
  65. package/dist/cli/commands/build.js.map +1 -1
  66. package/dist/cli/commands/cf.d.ts +18 -0
  67. package/dist/cli/commands/cf.d.ts.map +1 -0
  68. package/dist/cli/commands/cf.js +207 -0
  69. package/dist/cli/commands/cf.js.map +1 -0
  70. package/dist/cli/commands/info.js +1 -1
  71. package/dist/cli/commands/info.js.map +1 -1
  72. package/dist/cli/commands/init.d.ts.map +1 -1
  73. package/dist/cli/commands/init.js +59 -46
  74. package/dist/cli/commands/init.js.map +1 -1
  75. package/dist/cli/commands/run.d.ts.map +1 -1
  76. package/dist/cli/commands/run.js +3 -0
  77. package/dist/cli/commands/run.js.map +1 -1
  78. package/dist/cli/index.d.ts.map +1 -1
  79. package/dist/cli/index.js +43 -6
  80. package/dist/cli/index.js.map +1 -1
  81. package/dist/daemon/client.d.ts.map +1 -1
  82. package/dist/daemon/client.js +40 -33
  83. package/dist/daemon/client.js.map +1 -1
  84. package/dist/daemon/manager.d.ts +6 -2
  85. package/dist/daemon/manager.d.ts.map +1 -1
  86. package/dist/daemon/manager.js +75 -20
  87. package/dist/daemon/manager.js.map +1 -1
  88. package/dist/daemon/server.js +69 -11
  89. package/dist/daemon/server.js.map +1 -1
  90. package/dist/daemon/worker-host.js.map +1 -1
  91. package/dist/deploy/cloudflare.d.ts +27 -0
  92. package/dist/deploy/cloudflare.d.ts.map +1 -1
  93. package/dist/deploy/cloudflare.js +210 -3
  94. package/dist/deploy/cloudflare.js.map +1 -1
  95. package/dist/editor-support/docblock-tag-catalog.d.ts.map +1 -1
  96. package/dist/editor-support/docblock-tag-catalog.js +32 -2
  97. package/dist/editor-support/docblock-tag-catalog.js.map +1 -1
  98. package/dist/embedded-runtime.js.map +1 -1
  99. package/dist/format/registry.d.ts +83 -0
  100. package/dist/format/registry.d.ts.map +1 -0
  101. package/dist/format/registry.js +139 -0
  102. package/dist/format/registry.js.map +1 -0
  103. package/dist/format/seed.d.ts +18 -0
  104. package/dist/format/seed.d.ts.map +1 -0
  105. package/dist/format/seed.js +246 -0
  106. package/dist/format/seed.js.map +1 -0
  107. package/dist/loader.d.ts +61 -66
  108. package/dist/loader.d.ts.map +1 -1
  109. package/dist/loader.js +315 -327
  110. package/dist/loader.js.map +1 -1
  111. package/dist/photon-cli-runner.d.ts.map +1 -1
  112. package/dist/photon-cli-runner.js +20 -11
  113. package/dist/photon-cli-runner.js.map +1 -1
  114. package/dist/photons/maker.photon.d.ts +2 -2
  115. package/dist/photons/maker.photon.d.ts.map +1 -1
  116. package/dist/photons/maker.photon.js +5 -6
  117. package/dist/photons/maker.photon.js.map +1 -1
  118. package/dist/photons/maker.photon.ts +5 -6
  119. package/dist/resource-server.d.ts +55 -15
  120. package/dist/resource-server.d.ts.map +1 -1
  121. package/dist/resource-server.js +205 -50
  122. package/dist/resource-server.js.map +1 -1
  123. package/dist/runtime/cf-local.d.ts +157 -0
  124. package/dist/runtime/cf-local.d.ts.map +1 -0
  125. package/dist/runtime/cf-local.js +406 -0
  126. package/dist/runtime/cf-local.js.map +1 -0
  127. package/dist/server.d.ts +117 -2
  128. package/dist/server.d.ts.map +1 -1
  129. package/dist/server.js +681 -67
  130. package/dist/server.js.map +1 -1
  131. package/dist/settings-persistence.d.ts +50 -0
  132. package/dist/settings-persistence.d.ts.map +1 -0
  133. package/dist/settings-persistence.js +188 -0
  134. package/dist/settings-persistence.js.map +1 -0
  135. package/dist/shared/asset-encoding.d.ts +30 -0
  136. package/dist/shared/asset-encoding.d.ts.map +1 -0
  137. package/dist/shared/asset-encoding.js +0 -0
  138. package/dist/shared/asset-encoding.js.map +1 -0
  139. package/dist/shared/audit-sqlite.d.ts.map +1 -1
  140. package/dist/shared/audit-sqlite.js +0 -1
  141. package/dist/shared/audit-sqlite.js.map +1 -1
  142. package/dist/shared/cross-origin-headers.d.ts +47 -0
  143. package/dist/shared/cross-origin-headers.d.ts.map +1 -0
  144. package/dist/shared/cross-origin-headers.js +61 -0
  145. package/dist/shared/cross-origin-headers.js.map +1 -0
  146. package/dist/shared/error-handler.d.ts.map +1 -1
  147. package/dist/shared/error-handler.js +3 -1
  148. package/dist/shared/error-handler.js.map +1 -1
  149. package/dist/shared/expose-route-extractor.d.ts +36 -0
  150. package/dist/shared/expose-route-extractor.d.ts.map +1 -0
  151. package/dist/shared/expose-route-extractor.js +64 -0
  152. package/dist/shared/expose-route-extractor.js.map +1 -0
  153. package/dist/shared/extract-claims.d.ts +33 -0
  154. package/dist/shared/extract-claims.d.ts.map +1 -0
  155. package/dist/shared/extract-claims.js +60 -0
  156. package/dist/shared/extract-claims.js.map +1 -0
  157. package/dist/shared/http-route-extractor.d.ts +6 -0
  158. package/dist/shared/http-route-extractor.d.ts.map +1 -1
  159. package/dist/shared/http-route-extractor.js +29 -5
  160. package/dist/shared/http-route-extractor.js.map +1 -1
  161. package/dist/shared/instance-binding.d.ts +53 -0
  162. package/dist/shared/instance-binding.d.ts.map +1 -0
  163. package/dist/shared/instance-binding.js +85 -0
  164. package/dist/shared/instance-binding.js.map +1 -0
  165. package/dist/shared/io.d.ts.map +1 -1
  166. package/dist/shared/io.js +5 -2
  167. package/dist/shared/io.js.map +1 -1
  168. package/dist/shared/logger.js.map +1 -1
  169. package/dist/shared/sqlite-runtime.d.ts.map +1 -1
  170. package/dist/shared/sqlite-runtime.js +0 -1
  171. package/dist/shared/sqlite-runtime.js.map +1 -1
  172. package/dist/task-executor.js.map +1 -1
  173. package/dist/telemetry/sdk.d.ts.map +1 -1
  174. package/dist/telemetry/sdk.js +0 -1
  175. package/dist/telemetry/sdk.js.map +1 -1
  176. package/dist/test-runner.d.ts.map +1 -1
  177. package/dist/test-runner.js.map +1 -1
  178. package/dist/types/server-types.d.ts +16 -7
  179. package/dist/types/server-types.d.ts.map +1 -1
  180. package/package.json +14 -4
  181. package/templates/cloudflare/worker.ts.template +428 -14
  182. package/templates/cloudflare/wrangler.toml.template +2 -7
  183. package/templates/photon.template.ts +13 -0
@@ -1 +1 @@
1
- {"version":3,"file":"photon-host.js","sourceRoot":"","sources":["../../src/auto-ui/photon-host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"photon-host.js","sourceRoot":"","sources":["../../src/auto-ui/photon-host.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,13 @@
18
18
  */
19
19
  import type { IncomingMessage, ServerResponse } from 'http';
20
20
  import type { AnyPhotonInfo, PhotonInstance, ExternalMCPInfo } from './types.js';
21
+ /**
22
+ * Wire a PhotonLoader's `notifyResourceUpdated` channel into the streamable-HTTP
23
+ * subscription registry. Call once at server start.
24
+ */
25
+ export declare function attachLoaderForResourceUpdates(loader: {
26
+ setResourceUpdateNotifier: (fn: (uri: string) => void | Promise<void>) => void;
27
+ }): void;
21
28
  export declare function stopSessionCleanup(): void;
22
29
  export interface StreamableHTTPOptions {
23
30
  photons: AnyPhotonInfo[];
@@ -1 +1 @@
1
- {"version":3,"file":"streamable-http-transport.d.ts","sourceRoot":"","sources":["../../src/auto-ui/streamable-http-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streamable-http-transport.d.ts","sourceRoot":"","sources":["../../src/auto-ui/streamable-http-transport.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@
18
18
  */
19
19
  import { randomUUID } from 'crypto';
20
20
  import { readdir, stat, readFile, writeFile } from 'fs/promises';
21
+ import { readText } from '../shared/io.js';
21
22
  import { join, dirname, extname, resolve, normalize } from 'path';
22
23
  import { homedir } from 'os';
23
24
  import { PHOTON_VERSION } from '../version.js';
@@ -34,6 +35,7 @@ import { buildToolMetadataExtensions } from './types.js';
34
35
  import { generateServerCard } from '../server-card.js';
35
36
  import { audit } from '../shared/audit.js';
36
37
  import { writePhotonEditorDeclaration } from '../photon-editor-declarations.js';
38
+ import { isUriTemplate, matchUriTemplate, parseUriTemplateParams, SubscriptionRegistry, } from '../resource-server.js';
37
39
  import { createTask, getTask, updateTask, listTasks, registerController, unregisterController, getController, taskEvents, } from '../tasks/store.js';
38
40
  import { toWireFormat, relatedTaskMeta, TERMINAL_STATES } from '../tasks/types.js';
39
41
  import { runTaskExecution, resolveTaskInput, waitForTerminalOrInput } from '../tasks/executor.js';
@@ -76,6 +78,40 @@ const sessions = new Map();
76
78
  const pendingElicitations = new Map();
77
79
  const pendingServerRequests = new Map();
78
80
  let nextServerRequestId = 1;
81
+ /**
82
+ * Registry of `resources/subscribe` state for the streamable-HTTP transport.
83
+ * Sinks are keyed by sessionId so per-session disconnect can purge in O(1).
84
+ *
85
+ * `attachLoaderForResourceUpdates(loader)` (exported) bridges photon-author
86
+ * `this.notifyResourceUpdated(uri)` calls into `streamableSubscriptions.notify(uri)`
87
+ * so subscribers get `notifications/resources/updated` over the SSE stream.
88
+ */
89
+ const streamableSubscriptions = new SubscriptionRegistry();
90
+ const sessionSubscriptionSinks = new Map();
91
+ function getOrCreateSessionSink(sessionId) {
92
+ const existing = sessionSubscriptionSinks.get(sessionId);
93
+ if (existing)
94
+ return existing;
95
+ const sink = (uri) => {
96
+ sendToSession(sessionId, 'notifications/resources/updated', { uri });
97
+ };
98
+ sessionSubscriptionSinks.set(sessionId, sink);
99
+ return sink;
100
+ }
101
+ function disconnectSessionSubscriptions(sessionId) {
102
+ const sink = sessionSubscriptionSinks.get(sessionId);
103
+ if (!sink)
104
+ return;
105
+ streamableSubscriptions.disconnect(sink);
106
+ sessionSubscriptionSinks.delete(sessionId);
107
+ }
108
+ /**
109
+ * Wire a PhotonLoader's `notifyResourceUpdated` channel into the streamable-HTTP
110
+ * subscription registry. Call once at server start.
111
+ */
112
+ export function attachLoaderForResourceUpdates(loader) {
113
+ loader.setResourceUpdateNotifier((uri) => streamableSubscriptions.notify(uri));
114
+ }
79
115
  /**
80
116
  * Send a JSON-RPC request to a Beam session over its SSE stream and
81
117
  * await the reply. Backs photon-facing providers (sampling, future
@@ -207,22 +243,26 @@ async function getAllPendingApprovals(photonNames) {
207
243
  const all = [];
208
244
  const now = new Date().toISOString();
209
245
  for (const name of photonNames) {
210
- const approvals = await loadApprovals(name);
211
- for (const a of approvals) {
212
- if (a.status === 'pending') {
213
- // Auto-expire
214
- if (a.expiresAt && a.expiresAt < now) {
215
- a.status = 'expired';
216
- }
217
- else {
218
- all.push(a);
246
+ // Hold the mutex across read-mutate-save so concurrent addApproval /
247
+ // resolveApproval can't lose updates while we expire stale entries.
248
+ await approvalsMutex.acquire(async () => {
249
+ const approvals = await loadApprovals(name);
250
+ let mutated = false;
251
+ for (const a of approvals) {
252
+ if (a.status === 'pending') {
253
+ if (a.expiresAt && a.expiresAt < now) {
254
+ a.status = 'expired';
255
+ mutated = true;
256
+ }
257
+ else {
258
+ all.push(a);
259
+ }
219
260
  }
220
261
  }
221
- }
222
- // Persist any expirations
223
- if (approvals.some((a) => a.status === 'expired')) {
224
- await saveApprovals(name, approvals);
225
- }
262
+ if (mutated) {
263
+ await saveApprovals(name, approvals);
264
+ }
265
+ });
226
266
  }
227
267
  return all;
228
268
  }
@@ -339,6 +379,7 @@ function startSessionCleanup() {
339
379
  for (const [id, session] of sessions) {
340
380
  if (now - session.lastActivity.getTime() > SESSION_TIMEOUT_MS) {
341
381
  sessions.delete(id);
382
+ disconnectSessionSubscriptions(id);
342
383
  }
343
384
  }
344
385
  }, 60 * 1000);
@@ -556,7 +597,7 @@ const handlers = {
556
597
  capabilities: {
557
598
  tools: { listChanged: true },
558
599
  prompts: { listChanged: true },
559
- resources: { listChanged: true },
600
+ resources: { listChanged: true, subscribe: true },
560
601
  tasks: {
561
602
  list: {},
562
603
  cancel: {},
@@ -868,6 +909,11 @@ const handlers = {
868
909
  for (const photon of visiblePhotons) {
869
910
  if (!photon.configured || !photon.methods)
870
911
  continue;
912
+ // Check if this photon has a @get / web root so we can advertise a web URL.
913
+ const photonClass = ctx.photonMCPs.get(photon.name);
914
+ const httpRoutes = photonClass?._httpRoutes;
915
+ const webRootRoute = httpRoutes?.find((r) => r.method === 'GET' && r.path === '/');
916
+ const webUrl = webRootRoute ? `/web/${photon.name}/` : undefined;
871
917
  for (const method of photon.methods) {
872
918
  tools.push({
873
919
  name: `${photon.name}/${method.name}`,
@@ -895,6 +941,7 @@ const handlers = {
895
941
  'x-photon-install-source': photon.installSource,
896
942
  'x-photon-prompt-count': photon.promptCount ?? 0,
897
943
  'x-photon-resource-count': photon.resourceCount ?? 0,
944
+ ...(webUrl ? { 'x-web-url': webUrl, 'x-web-description': photon.description } : {}),
898
945
  ...buildToolMetadataExtensions(method),
899
946
  // MCP Apps standard: _meta.ui for linked UI resources and visibility
900
947
  ...(method.linkedUi || method.visibility
@@ -2049,23 +2096,72 @@ const handlers = {
2049
2096
  }
2050
2097
  },
2051
2098
  // ─────────────────────────────────────────────────────────────────────────────
2052
- // Resources (MCP Apps ui:// scheme)
2099
+ // Resources
2100
+ //
2101
+ // Mirrors what STDIO surfaces via ResourceServer (src/resource-server.ts):
2102
+ // - ui://<photon>/<id> UI Apps templates (assets.ui)
2103
+ // - approval://<photon>/<id> pending approval requests
2104
+ // - photon://<photon>/prompts/<id> class-level @prompt static-file
2105
+ // - photon://<photon>/resources/<id> class-level @resource static-file
2106
+ // - <author-defined-uri> method-level @resource / @Static
2107
+ // (non-templated entries from mcp.statics)
2108
+ //
2109
+ // Templated method-level URIs (`person://{slug}`) belong on
2110
+ // resources/templates/list and resolve via resources/read.
2053
2111
  // ─────────────────────────────────────────────────────────────────────────────
2054
2112
  'resources/list': async (req, session, ctx) => {
2055
2113
  const resources = [];
2056
2114
  for (const photon of ctx.photons) {
2057
- if (!photon.configured || !photon.assets?.ui)
2115
+ if (!photon.configured)
2058
2116
  continue;
2059
- for (const uiAsset of photon.assets.ui) {
2060
- const uri = uiAsset.uri || `ui://${photon.name}/${uiAsset.id}`;
2061
- resources.push({
2062
- uri,
2063
- name: uiAsset.id,
2064
- mimeType: uiAsset.mimeType || 'text/html;profile=mcp-app',
2065
- description: uiAsset.linkedTool
2066
- ? `UI template for ${photon.name}/${uiAsset.linkedTool}`
2067
- : `UI template: ${uiAsset.id}`,
2068
- });
2117
+ const mcp = ctx.photonMCPs.get(photon.name);
2118
+ if (photon.assets?.ui) {
2119
+ for (const uiAsset of photon.assets.ui) {
2120
+ const uri = uiAsset.uri || `ui://${photon.name}/${uiAsset.id}`;
2121
+ resources.push({
2122
+ uri,
2123
+ name: uiAsset.id,
2124
+ mimeType: uiAsset.mimeType || 'text/html;profile=mcp-app',
2125
+ description: uiAsset.linkedTool
2126
+ ? `UI template for ${photon.name}/${uiAsset.linkedTool}`
2127
+ : `UI template: ${uiAsset.id}`,
2128
+ });
2129
+ }
2130
+ }
2131
+ // Class-level @prompt <id> <path> static-file prompts
2132
+ if (mcp?.assets?.prompts) {
2133
+ for (const prompt of mcp.assets.prompts) {
2134
+ resources.push({
2135
+ uri: `photon://${photon.name}/prompts/${prompt.id}`,
2136
+ name: `prompt:${prompt.id}`,
2137
+ mimeType: 'text/markdown',
2138
+ description: `Prompt template: ${prompt.id}`,
2139
+ });
2140
+ }
2141
+ }
2142
+ // Class-level @resource <id> <path> static-file resources
2143
+ if (mcp?.assets?.resources) {
2144
+ for (const resource of mcp.assets.resources) {
2145
+ resources.push({
2146
+ uri: `photon://${photon.name}/resources/${resource.id}`,
2147
+ name: `resource:${resource.id}`,
2148
+ mimeType: resource.mimeType || 'application/octet-stream',
2149
+ description: `Static resource: ${resource.id}`,
2150
+ });
2151
+ }
2152
+ }
2153
+ // Method-level @resource / @Static — non-templated URIs only.
2154
+ if (mcp?.statics) {
2155
+ for (const stat of mcp.statics) {
2156
+ if (isUriTemplate(stat.uri))
2157
+ continue;
2158
+ resources.push({
2159
+ uri: stat.uri,
2160
+ name: stat.name,
2161
+ mimeType: stat.mimeType || 'text/plain',
2162
+ description: stat.description || `Resource: ${stat.name}`,
2163
+ });
2164
+ }
2069
2165
  }
2070
2166
  }
2071
2167
  // Add pending approval resources (approval:// scheme)
@@ -2081,9 +2177,30 @@ const handlers = {
2081
2177
  }
2082
2178
  return { jsonrpc: '2.0', id: req.id, result: { resources } };
2083
2179
  },
2180
+ 'resources/templates/list': async (req, _session, ctx) => {
2181
+ const resourceTemplates = [];
2182
+ for (const photon of ctx.photons) {
2183
+ if (!photon.configured)
2184
+ continue;
2185
+ const mcp = ctx.photonMCPs.get(photon.name);
2186
+ if (!mcp?.statics)
2187
+ continue;
2188
+ for (const stat of mcp.statics) {
2189
+ if (!isUriTemplate(stat.uri))
2190
+ continue;
2191
+ resourceTemplates.push({
2192
+ uriTemplate: stat.uri,
2193
+ name: stat.name,
2194
+ mimeType: stat.mimeType || 'text/plain',
2195
+ description: stat.description || `Resource template: ${stat.name}`,
2196
+ });
2197
+ }
2198
+ }
2199
+ return { jsonrpc: '2.0', id: req.id, result: { resourceTemplates } };
2200
+ },
2084
2201
  'resources/read': async (req, session, ctx) => {
2085
2202
  const { uri } = req.params;
2086
- // Parse approval:// URI
2203
+ // approval://<photon>/<id>
2087
2204
  const approvalMatch = uri.match(/^approval:\/\/([^/]+)\/(.+)$/);
2088
2205
  if (approvalMatch) {
2089
2206
  const [, photonName, approvalId] = approvalMatch;
@@ -2106,36 +2223,128 @@ const handlers = {
2106
2223
  },
2107
2224
  };
2108
2225
  }
2109
- // Parse ui:// URI
2110
- const match = uri.match(/^ui:\/\/([^/]+)\/(.+)$/);
2111
- if (!match) {
2226
+ // ui://<photon>/<id>
2227
+ const uiMatch = uri.match(/^ui:\/\/([^/]+)\/(.+)$/);
2228
+ if (uiMatch) {
2229
+ const [, photonName, uiId] = uiMatch;
2230
+ const result = await ctx.loadUIAsset(photonName, uiId);
2231
+ if (!result) {
2232
+ return {
2233
+ jsonrpc: '2.0',
2234
+ id: req.id,
2235
+ error: { code: -32602, message: `Resource not found: ${uri}` },
2236
+ };
2237
+ }
2238
+ const mimeType = result.isPhotonTemplate
2239
+ ? 'text/html;profile=mcp-app;photon-template=true'
2240
+ : 'text/html;profile=mcp-app';
2112
2241
  return {
2113
2242
  jsonrpc: '2.0',
2114
2243
  id: req.id,
2115
- error: { code: -32602, message: `Invalid URI: ${uri}` },
2244
+ result: { contents: [{ uri, mimeType, text: result.content }] },
2116
2245
  };
2117
2246
  }
2118
- const [, photonName, uiId] = match;
2119
- const result = await ctx.loadUIAsset(photonName, uiId);
2120
- if (!result) {
2247
+ // photon://<photon>/(prompts|resources)/<id> class-level static-file assets
2248
+ const assetMatch = uri.match(/^photon:\/\/([^/]+)\/(prompts|resources)\/(.+)$/);
2249
+ if (assetMatch) {
2250
+ const [, photonName, kind, assetId] = assetMatch;
2251
+ const mcp = ctx.photonMCPs.get(photonName);
2252
+ if (!mcp?.assets) {
2253
+ return {
2254
+ jsonrpc: '2.0',
2255
+ id: req.id,
2256
+ error: { code: -32602, message: `Photon assets not found: ${uri}` },
2257
+ };
2258
+ }
2259
+ const list = kind === 'prompts' ? mcp.assets.prompts : mcp.assets.resources;
2260
+ const asset = list?.find((a) => a.id === assetId);
2261
+ const resolvedPath = asset?.resolvedPath;
2262
+ if (!resolvedPath) {
2263
+ return {
2264
+ jsonrpc: '2.0',
2265
+ id: req.id,
2266
+ error: { code: -32602, message: `Asset not found: ${uri}` },
2267
+ };
2268
+ }
2269
+ const text = await readText(resolvedPath);
2270
+ const mimeType = kind === 'prompts'
2271
+ ? 'text/markdown'
2272
+ : asset?.mimeType || 'application/octet-stream';
2121
2273
  return {
2122
2274
  jsonrpc: '2.0',
2123
2275
  id: req.id,
2124
- error: { code: -32602, message: `Resource not found: ${uri}` },
2276
+ result: { contents: [{ uri, mimeType, text }] },
2125
2277
  };
2126
2278
  }
2127
- // Signal declarative mode (.photon.html) via mimeType parameter
2128
- const mimeType = result.isPhotonTemplate
2129
- ? 'text/html;profile=mcp-app;photon-template=true'
2130
- : 'text/html;profile=mcp-app';
2279
+ // Method-level @resource / @Static match against any photon's statics.
2280
+ // The URI may be exact or match a registered template; on match, dispatch
2281
+ // through the loader so middleware (auth, logging, audit) applies.
2282
+ for (const photon of ctx.photons) {
2283
+ const mcp = ctx.photonMCPs.get(photon.name);
2284
+ if (!mcp?.statics)
2285
+ continue;
2286
+ for (const stat of mcp.statics) {
2287
+ const matched = stat.uri === uri || matchUriTemplate(stat.uri, uri);
2288
+ if (!matched)
2289
+ continue;
2290
+ const params = isUriTemplate(stat.uri) ? parseUriTemplateParams(stat.uri, uri) : {};
2291
+ if (!ctx.loader) {
2292
+ return {
2293
+ jsonrpc: '2.0',
2294
+ id: req.id,
2295
+ error: {
2296
+ code: -32603,
2297
+ message: 'Loader not available for static resource resolution',
2298
+ },
2299
+ };
2300
+ }
2301
+ const result = await ctx.loader.executeTool(mcp, stat.name, params);
2302
+ const text = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
2303
+ return {
2304
+ jsonrpc: '2.0',
2305
+ id: req.id,
2306
+ result: {
2307
+ contents: [{ uri, mimeType: stat.mimeType || 'text/plain', text }],
2308
+ },
2309
+ };
2310
+ }
2311
+ }
2131
2312
  return {
2132
2313
  jsonrpc: '2.0',
2133
2314
  id: req.id,
2134
- result: {
2135
- contents: [{ uri, mimeType, text: result.content }],
2136
- },
2315
+ error: { code: -32602, message: `Resource not found: ${uri}` },
2137
2316
  };
2138
2317
  },
2318
+ // resources/subscribe and resources/unsubscribe — exact-URI keyed.
2319
+ // The session's sink is keyed off session.id so disconnect logic in the
2320
+ // session-cleanup path can purge subscriptions in O(1).
2321
+ 'resources/subscribe': async (req, session) => {
2322
+ const { uri } = req.params;
2323
+ if (typeof uri !== 'string' || !uri) {
2324
+ return {
2325
+ jsonrpc: '2.0',
2326
+ id: req.id,
2327
+ error: { code: -32602, message: 'resources/subscribe requires `uri`' },
2328
+ };
2329
+ }
2330
+ const sink = getOrCreateSessionSink(session.id);
2331
+ streamableSubscriptions.subscribe(sink, uri);
2332
+ return { jsonrpc: '2.0', id: req.id, result: {} };
2333
+ },
2334
+ 'resources/unsubscribe': async (req, session) => {
2335
+ const { uri } = req.params;
2336
+ if (typeof uri !== 'string' || !uri) {
2337
+ return {
2338
+ jsonrpc: '2.0',
2339
+ id: req.id,
2340
+ error: { code: -32602, message: 'resources/unsubscribe requires `uri`' },
2341
+ };
2342
+ }
2343
+ const sink = sessionSubscriptionSinks.get(session.id);
2344
+ if (sink)
2345
+ streamableSubscriptions.unsubscribe(sink, uri);
2346
+ return { jsonrpc: '2.0', id: req.id, result: {} };
2347
+ },
2139
2348
  'prompts/list': async (req, _session, ctx) => {
2140
2349
  const prompts = [];
2141
2350
  for (const photon of ctx.photons) {