@portel/photon 1.4.1 → 1.6.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 (395) hide show
  1. package/README.md +326 -1177
  2. package/dist/auto-ui/beam.d.ts +14 -0
  3. package/dist/auto-ui/beam.d.ts.map +1 -0
  4. package/dist/auto-ui/beam.js +3057 -0
  5. package/dist/auto-ui/beam.js.map +1 -0
  6. package/dist/auto-ui/bridge/index.d.ts +37 -0
  7. package/dist/auto-ui/bridge/index.d.ts.map +1 -0
  8. package/dist/auto-ui/bridge/index.js +555 -0
  9. package/dist/auto-ui/bridge/index.js.map +1 -0
  10. package/dist/auto-ui/bridge/openai-shim.d.ts +20 -0
  11. package/dist/auto-ui/bridge/openai-shim.d.ts.map +1 -0
  12. package/dist/auto-ui/bridge/openai-shim.js +231 -0
  13. package/dist/auto-ui/bridge/openai-shim.js.map +1 -0
  14. package/dist/auto-ui/bridge/photon-app.d.ts +162 -0
  15. package/dist/auto-ui/bridge/photon-app.d.ts.map +1 -0
  16. package/dist/auto-ui/bridge/photon-app.js +460 -0
  17. package/dist/auto-ui/bridge/photon-app.js.map +1 -0
  18. package/dist/auto-ui/bridge/types.d.ts +128 -0
  19. package/dist/auto-ui/bridge/types.d.ts.map +1 -0
  20. package/dist/auto-ui/bridge/types.js +7 -0
  21. package/dist/auto-ui/bridge/types.js.map +1 -0
  22. package/dist/auto-ui/components/card.d.ts +13 -0
  23. package/dist/auto-ui/components/card.d.ts.map +1 -0
  24. package/dist/auto-ui/components/card.js +64 -0
  25. package/dist/auto-ui/components/card.js.map +1 -0
  26. package/dist/auto-ui/components/form.d.ts +15 -0
  27. package/dist/auto-ui/components/form.d.ts.map +1 -0
  28. package/dist/auto-ui/components/form.js +72 -0
  29. package/dist/auto-ui/components/form.js.map +1 -0
  30. package/dist/auto-ui/components/list.d.ts +13 -0
  31. package/dist/auto-ui/components/list.d.ts.map +1 -0
  32. package/dist/auto-ui/components/list.js +58 -0
  33. package/dist/auto-ui/components/list.js.map +1 -0
  34. package/dist/auto-ui/components/progress.d.ts +18 -0
  35. package/dist/auto-ui/components/progress.d.ts.map +1 -0
  36. package/dist/auto-ui/components/progress.js +125 -0
  37. package/dist/auto-ui/components/progress.js.map +1 -0
  38. package/dist/auto-ui/components/table.d.ts +13 -0
  39. package/dist/auto-ui/components/table.d.ts.map +1 -0
  40. package/dist/auto-ui/components/table.js +82 -0
  41. package/dist/auto-ui/components/table.js.map +1 -0
  42. package/dist/auto-ui/components/tree.d.ts +13 -0
  43. package/dist/auto-ui/components/tree.d.ts.map +1 -0
  44. package/dist/auto-ui/components/tree.js +61 -0
  45. package/dist/auto-ui/components/tree.js.map +1 -0
  46. package/dist/auto-ui/daemon-tools.d.ts +45 -0
  47. package/dist/auto-ui/daemon-tools.d.ts.map +1 -0
  48. package/dist/auto-ui/daemon-tools.js +580 -0
  49. package/dist/auto-ui/daemon-tools.js.map +1 -0
  50. package/dist/auto-ui/design-system/index.d.ts +21 -0
  51. package/dist/auto-ui/design-system/index.d.ts.map +1 -0
  52. package/dist/auto-ui/design-system/index.js +27 -0
  53. package/dist/auto-ui/design-system/index.js.map +1 -0
  54. package/dist/auto-ui/design-system/tokens.d.ts +9 -0
  55. package/dist/auto-ui/design-system/tokens.d.ts.map +1 -0
  56. package/dist/auto-ui/design-system/tokens.js +27 -0
  57. package/dist/auto-ui/design-system/tokens.js.map +1 -0
  58. package/dist/auto-ui/design-system/transaction-ui.d.ts +70 -0
  59. package/dist/auto-ui/design-system/transaction-ui.d.ts.map +1 -0
  60. package/dist/auto-ui/design-system/transaction-ui.js +982 -0
  61. package/dist/auto-ui/design-system/transaction-ui.js.map +1 -0
  62. package/dist/auto-ui/frontend/index.html +84 -0
  63. package/dist/auto-ui/index.d.ts +23 -0
  64. package/dist/auto-ui/index.d.ts.map +1 -0
  65. package/dist/auto-ui/index.js +28 -0
  66. package/dist/auto-ui/index.js.map +1 -0
  67. package/dist/auto-ui/openapi-generator.d.ts +71 -0
  68. package/dist/auto-ui/openapi-generator.d.ts.map +1 -0
  69. package/dist/auto-ui/openapi-generator.js +223 -0
  70. package/dist/auto-ui/openapi-generator.js.map +1 -0
  71. package/dist/auto-ui/photon-bridge.d.ts +159 -0
  72. package/dist/auto-ui/photon-bridge.d.ts.map +1 -0
  73. package/dist/auto-ui/photon-bridge.js +262 -0
  74. package/dist/auto-ui/photon-bridge.js.map +1 -0
  75. package/dist/auto-ui/photon-host.d.ts +113 -0
  76. package/dist/auto-ui/photon-host.d.ts.map +1 -0
  77. package/dist/auto-ui/photon-host.js +284 -0
  78. package/dist/auto-ui/photon-host.js.map +1 -0
  79. package/dist/auto-ui/platform-compat.d.ts +71 -0
  80. package/dist/auto-ui/platform-compat.d.ts.map +1 -0
  81. package/dist/auto-ui/platform-compat.js +628 -0
  82. package/dist/auto-ui/platform-compat.js.map +1 -0
  83. package/dist/auto-ui/playground-html.d.ts +15 -0
  84. package/dist/auto-ui/playground-html.d.ts.map +1 -0
  85. package/dist/auto-ui/playground-html.js +1113 -0
  86. package/dist/auto-ui/playground-html.js.map +1 -0
  87. package/dist/auto-ui/playground-server.d.ts +7 -0
  88. package/dist/auto-ui/playground-server.d.ts.map +1 -0
  89. package/dist/auto-ui/playground-server.js +840 -0
  90. package/dist/auto-ui/playground-server.js.map +1 -0
  91. package/dist/auto-ui/registry.d.ts +13 -0
  92. package/dist/auto-ui/registry.d.ts.map +1 -0
  93. package/dist/auto-ui/registry.js +62 -0
  94. package/dist/auto-ui/registry.js.map +1 -0
  95. package/dist/auto-ui/renderer.d.ts +14 -0
  96. package/dist/auto-ui/renderer.d.ts.map +1 -0
  97. package/dist/auto-ui/renderer.js +88 -0
  98. package/dist/auto-ui/renderer.js.map +1 -0
  99. package/dist/auto-ui/rendering/components.d.ts +29 -0
  100. package/dist/auto-ui/rendering/components.d.ts.map +1 -0
  101. package/dist/auto-ui/rendering/components.js +773 -0
  102. package/dist/auto-ui/rendering/components.js.map +1 -0
  103. package/dist/auto-ui/rendering/field-analyzer.d.ts +48 -0
  104. package/dist/auto-ui/rendering/field-analyzer.d.ts.map +1 -0
  105. package/dist/auto-ui/rendering/field-analyzer.js +270 -0
  106. package/dist/auto-ui/rendering/field-analyzer.js.map +1 -0
  107. package/dist/auto-ui/rendering/field-renderers.d.ts +64 -0
  108. package/dist/auto-ui/rendering/field-renderers.d.ts.map +1 -0
  109. package/dist/auto-ui/rendering/field-renderers.js +317 -0
  110. package/dist/auto-ui/rendering/field-renderers.js.map +1 -0
  111. package/dist/auto-ui/rendering/index.d.ts +28 -0
  112. package/dist/auto-ui/rendering/index.d.ts.map +1 -0
  113. package/dist/auto-ui/rendering/index.js +60 -0
  114. package/dist/auto-ui/rendering/index.js.map +1 -0
  115. package/dist/auto-ui/rendering/layout-selector.d.ts +48 -0
  116. package/dist/auto-ui/rendering/layout-selector.d.ts.map +1 -0
  117. package/dist/auto-ui/rendering/layout-selector.js +352 -0
  118. package/dist/auto-ui/rendering/layout-selector.js.map +1 -0
  119. package/dist/auto-ui/rendering/template-engine.d.ts +41 -0
  120. package/dist/auto-ui/rendering/template-engine.d.ts.map +1 -0
  121. package/dist/auto-ui/rendering/template-engine.js +238 -0
  122. package/dist/auto-ui/rendering/template-engine.js.map +1 -0
  123. package/dist/auto-ui/streamable-http-transport.d.ts +103 -0
  124. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -0
  125. package/dist/auto-ui/streamable-http-transport.js +1875 -0
  126. package/dist/auto-ui/streamable-http-transport.js.map +1 -0
  127. package/dist/auto-ui/types.d.ts +384 -0
  128. package/dist/auto-ui/types.d.ts.map +1 -0
  129. package/dist/auto-ui/types.js +92 -0
  130. package/dist/auto-ui/types.js.map +1 -0
  131. package/dist/beam.bundle.js +63137 -0
  132. package/dist/beam.bundle.js.map +7 -0
  133. package/dist/claude-code-plugin.d.ts.map +1 -1
  134. package/dist/claude-code-plugin.js +30 -30
  135. package/dist/claude-code-plugin.js.map +1 -1
  136. package/dist/cli/commands/info.d.ts +11 -0
  137. package/dist/cli/commands/info.d.ts.map +1 -0
  138. package/dist/cli/commands/info.js +313 -0
  139. package/dist/cli/commands/info.js.map +1 -0
  140. package/dist/cli/commands/marketplace.d.ts +11 -0
  141. package/dist/cli/commands/marketplace.d.ts.map +1 -0
  142. package/dist/cli/commands/marketplace.js +198 -0
  143. package/dist/cli/commands/marketplace.js.map +1 -0
  144. package/dist/cli/commands/package-app.d.ts +9 -0
  145. package/dist/cli/commands/package-app.d.ts.map +1 -0
  146. package/dist/cli/commands/package-app.js +191 -0
  147. package/dist/cli/commands/package-app.js.map +1 -0
  148. package/dist/cli/commands/package.d.ts +11 -0
  149. package/dist/cli/commands/package.d.ts.map +1 -0
  150. package/dist/cli/commands/package.js +573 -0
  151. package/dist/cli/commands/package.js.map +1 -0
  152. package/dist/cli-alias.d.ts.map +1 -1
  153. package/dist/cli-alias.js +30 -28
  154. package/dist/cli-alias.js.map +1 -1
  155. package/dist/cli-formatter.d.ts +8 -24
  156. package/dist/cli-formatter.d.ts.map +1 -1
  157. package/dist/cli-formatter.js +8 -325
  158. package/dist/cli-formatter.js.map +1 -1
  159. package/dist/cli.d.ts +15 -1
  160. package/dist/cli.d.ts.map +1 -1
  161. package/dist/cli.js +1166 -1131
  162. package/dist/cli.js.map +1 -1
  163. package/dist/daemon/client.d.ts +84 -3
  164. package/dist/daemon/client.d.ts.map +1 -1
  165. package/dist/daemon/client.js +561 -11
  166. package/dist/daemon/client.js.map +1 -1
  167. package/dist/daemon/manager.d.ts +51 -12
  168. package/dist/daemon/manager.d.ts.map +1 -1
  169. package/dist/daemon/manager.js +122 -61
  170. package/dist/daemon/manager.js.map +1 -1
  171. package/dist/daemon/protocol.d.ts +62 -6
  172. package/dist/daemon/protocol.d.ts.map +1 -1
  173. package/dist/daemon/protocol.js +76 -1
  174. package/dist/daemon/protocol.js.map +1 -1
  175. package/dist/daemon/server.d.ts +6 -6
  176. package/dist/daemon/server.js +743 -133
  177. package/dist/daemon/server.js.map +1 -1
  178. package/dist/daemon/session-manager.d.ts +8 -1
  179. package/dist/daemon/session-manager.d.ts.map +1 -1
  180. package/dist/daemon/session-manager.js +32 -9
  181. package/dist/daemon/session-manager.js.map +1 -1
  182. package/dist/deploy/cloudflare.d.ts +12 -0
  183. package/dist/deploy/cloudflare.d.ts.map +1 -0
  184. package/dist/deploy/cloudflare.js +216 -0
  185. package/dist/deploy/cloudflare.js.map +1 -0
  186. package/dist/index.d.ts +1 -0
  187. package/dist/index.d.ts.map +1 -1
  188. package/dist/index.js +3 -0
  189. package/dist/index.js.map +1 -1
  190. package/dist/loader.d.ts +191 -21
  191. package/dist/loader.d.ts.map +1 -1
  192. package/dist/loader.js +1186 -319
  193. package/dist/loader.js.map +1 -1
  194. package/dist/markdown-utils.d.ts +8 -0
  195. package/dist/markdown-utils.d.ts.map +1 -0
  196. package/dist/markdown-utils.js +63 -0
  197. package/dist/markdown-utils.js.map +1 -0
  198. package/dist/marketplace-manager.d.ts +10 -0
  199. package/dist/marketplace-manager.d.ts.map +1 -1
  200. package/dist/marketplace-manager.js +112 -28
  201. package/dist/marketplace-manager.js.map +1 -1
  202. package/dist/mcp-client.d.ts +9 -0
  203. package/dist/mcp-client.d.ts.map +1 -0
  204. package/dist/mcp-client.js +11 -0
  205. package/dist/mcp-client.js.map +1 -0
  206. package/dist/mcp-elicitation.d.ts +32 -0
  207. package/dist/mcp-elicitation.d.ts.map +1 -0
  208. package/dist/mcp-elicitation.js +26 -0
  209. package/dist/mcp-elicitation.js.map +1 -0
  210. package/dist/path-resolver.d.ts +9 -12
  211. package/dist/path-resolver.d.ts.map +1 -1
  212. package/dist/path-resolver.js +13 -43
  213. package/dist/path-resolver.js.map +1 -1
  214. package/dist/photon-cli-runner.d.ts.map +1 -1
  215. package/dist/photon-cli-runner.js +204 -77
  216. package/dist/photon-cli-runner.js.map +1 -1
  217. package/dist/photon-doc-extractor.d.ts +89 -0
  218. package/dist/photon-doc-extractor.d.ts.map +1 -1
  219. package/dist/photon-doc-extractor.js +560 -32
  220. package/dist/photon-doc-extractor.js.map +1 -1
  221. package/dist/photons/maker.photon.d.ts +182 -0
  222. package/dist/photons/maker.photon.d.ts.map +1 -0
  223. package/dist/photons/maker.photon.js +504 -0
  224. package/dist/photons/maker.photon.js.map +1 -0
  225. package/dist/photons/maker.photon.ts +626 -0
  226. package/dist/photons/marketplace.photon.d.ts +110 -0
  227. package/dist/photons/marketplace.photon.d.ts.map +1 -0
  228. package/dist/photons/marketplace.photon.js +260 -0
  229. package/dist/photons/marketplace.photon.js.map +1 -0
  230. package/dist/photons/marketplace.photon.ts +378 -0
  231. package/dist/photons/tunnel.photon.d.ts +80 -0
  232. package/dist/photons/tunnel.photon.d.ts.map +1 -0
  233. package/dist/photons/tunnel.photon.js +269 -0
  234. package/dist/photons/tunnel.photon.js.map +1 -0
  235. package/dist/photons/tunnel.photon.ts +345 -0
  236. package/dist/security-scanner.d.ts.map +1 -1
  237. package/dist/security-scanner.js +18 -15
  238. package/dist/security-scanner.js.map +1 -1
  239. package/dist/serv/auth/jwt.d.ts +89 -0
  240. package/dist/serv/auth/jwt.d.ts.map +1 -0
  241. package/dist/serv/auth/jwt.js +239 -0
  242. package/dist/serv/auth/jwt.js.map +1 -0
  243. package/dist/serv/auth/oauth.d.ts +117 -0
  244. package/dist/serv/auth/oauth.d.ts.map +1 -0
  245. package/dist/serv/auth/oauth.js +395 -0
  246. package/dist/serv/auth/oauth.js.map +1 -0
  247. package/dist/serv/auth/well-known.d.ts +60 -0
  248. package/dist/serv/auth/well-known.d.ts.map +1 -0
  249. package/dist/serv/auth/well-known.js +154 -0
  250. package/dist/serv/auth/well-known.js.map +1 -0
  251. package/dist/serv/db/d1-client.d.ts +65 -0
  252. package/dist/serv/db/d1-client.d.ts.map +1 -0
  253. package/dist/serv/db/d1-client.js +137 -0
  254. package/dist/serv/db/d1-client.js.map +1 -0
  255. package/dist/serv/db/d1-stores.d.ts +62 -0
  256. package/dist/serv/db/d1-stores.d.ts.map +1 -0
  257. package/dist/serv/db/d1-stores.js +307 -0
  258. package/dist/serv/db/d1-stores.js.map +1 -0
  259. package/dist/serv/index.d.ts +114 -0
  260. package/dist/serv/index.d.ts.map +1 -0
  261. package/dist/serv/index.js +172 -0
  262. package/dist/serv/index.js.map +1 -0
  263. package/dist/serv/local.d.ts +118 -0
  264. package/dist/serv/local.d.ts.map +1 -0
  265. package/dist/serv/local.js +392 -0
  266. package/dist/serv/local.js.map +1 -0
  267. package/dist/serv/middleware/auth.d.ts +66 -0
  268. package/dist/serv/middleware/auth.d.ts.map +1 -0
  269. package/dist/serv/middleware/auth.js +178 -0
  270. package/dist/serv/middleware/auth.js.map +1 -0
  271. package/dist/serv/middleware/tenant.d.ts +94 -0
  272. package/dist/serv/middleware/tenant.d.ts.map +1 -0
  273. package/dist/serv/middleware/tenant.js +152 -0
  274. package/dist/serv/middleware/tenant.js.map +1 -0
  275. package/dist/serv/runtime/executor.d.ts +76 -0
  276. package/dist/serv/runtime/executor.d.ts.map +1 -0
  277. package/dist/serv/runtime/executor.js +105 -0
  278. package/dist/serv/runtime/executor.js.map +1 -0
  279. package/dist/serv/runtime/index.d.ts +8 -0
  280. package/dist/serv/runtime/index.d.ts.map +1 -0
  281. package/dist/serv/runtime/index.js +10 -0
  282. package/dist/serv/runtime/index.js.map +1 -0
  283. package/dist/serv/runtime/oauth-context.d.ts +121 -0
  284. package/dist/serv/runtime/oauth-context.d.ts.map +1 -0
  285. package/dist/serv/runtime/oauth-context.js +153 -0
  286. package/dist/serv/runtime/oauth-context.js.map +1 -0
  287. package/dist/serv/session/kv-store.d.ts +54 -0
  288. package/dist/serv/session/kv-store.d.ts.map +1 -0
  289. package/dist/serv/session/kv-store.js +149 -0
  290. package/dist/serv/session/kv-store.js.map +1 -0
  291. package/dist/serv/session/store.d.ts +113 -0
  292. package/dist/serv/session/store.d.ts.map +1 -0
  293. package/dist/serv/session/store.js +284 -0
  294. package/dist/serv/session/store.js.map +1 -0
  295. package/dist/serv/types/index.d.ts +147 -0
  296. package/dist/serv/types/index.d.ts.map +1 -0
  297. package/dist/serv/types/index.js +8 -0
  298. package/dist/serv/types/index.js.map +1 -0
  299. package/dist/serv/vault/token-vault.d.ts +102 -0
  300. package/dist/serv/vault/token-vault.d.ts.map +1 -0
  301. package/dist/serv/vault/token-vault.js +177 -0
  302. package/dist/serv/vault/token-vault.js.map +1 -0
  303. package/dist/server.d.ts +184 -0
  304. package/dist/server.d.ts.map +1 -1
  305. package/dist/server.js +1995 -86
  306. package/dist/server.js.map +1 -1
  307. package/dist/shared/cli-sections.d.ts +6 -0
  308. package/dist/shared/cli-sections.d.ts.map +1 -0
  309. package/dist/shared/cli-sections.js +16 -0
  310. package/dist/shared/cli-sections.js.map +1 -0
  311. package/dist/shared/cli-utils.d.ts +81 -0
  312. package/dist/shared/cli-utils.d.ts.map +1 -0
  313. package/dist/shared/cli-utils.js +174 -0
  314. package/dist/shared/cli-utils.js.map +1 -0
  315. package/dist/shared/config-docs.d.ts +6 -0
  316. package/dist/shared/config-docs.d.ts.map +1 -0
  317. package/dist/shared/config-docs.js +6 -0
  318. package/dist/shared/config-docs.js.map +1 -0
  319. package/dist/shared/error-handler.d.ts +128 -0
  320. package/dist/shared/error-handler.d.ts.map +1 -0
  321. package/dist/shared/error-handler.js +342 -0
  322. package/dist/shared/error-handler.js.map +1 -0
  323. package/dist/shared/logger.d.ts +42 -0
  324. package/dist/shared/logger.d.ts.map +1 -0
  325. package/dist/shared/logger.js +123 -0
  326. package/dist/shared/logger.js.map +1 -0
  327. package/dist/shared/performance.d.ts +65 -0
  328. package/dist/shared/performance.d.ts.map +1 -0
  329. package/dist/shared/performance.js +136 -0
  330. package/dist/shared/performance.js.map +1 -0
  331. package/dist/shared/task-runner.d.ts +2 -0
  332. package/dist/shared/task-runner.d.ts.map +1 -0
  333. package/dist/shared/task-runner.js +16 -0
  334. package/dist/shared/task-runner.js.map +1 -0
  335. package/dist/shared/validation.d.ts +6 -0
  336. package/dist/shared/validation.d.ts.map +1 -0
  337. package/dist/shared/validation.js +6 -0
  338. package/dist/shared/validation.js.map +1 -0
  339. package/dist/shared-utils.d.ts +63 -0
  340. package/dist/shared-utils.d.ts.map +1 -0
  341. package/dist/shared-utils.js +123 -0
  342. package/dist/shared-utils.js.map +1 -0
  343. package/dist/template-manager.d.ts +23 -2
  344. package/dist/template-manager.d.ts.map +1 -1
  345. package/dist/template-manager.js +176 -87
  346. package/dist/template-manager.js.map +1 -1
  347. package/dist/test-client.d.ts.map +1 -1
  348. package/dist/test-client.js +10 -8
  349. package/dist/test-client.js.map +1 -1
  350. package/dist/test-runner.d.ts +52 -0
  351. package/dist/test-runner.d.ts.map +1 -0
  352. package/dist/test-runner.js +785 -0
  353. package/dist/test-runner.js.map +1 -0
  354. package/dist/testing.d.ts +103 -0
  355. package/dist/testing.d.ts.map +1 -0
  356. package/dist/testing.js +163 -0
  357. package/dist/testing.js.map +1 -0
  358. package/dist/version-checker.d.ts.map +1 -1
  359. package/dist/version-checker.js +2 -2
  360. package/dist/version-checker.js.map +1 -1
  361. package/dist/version.d.ts +10 -0
  362. package/dist/version.d.ts.map +1 -0
  363. package/dist/version.js +21 -0
  364. package/dist/version.js.map +1 -0
  365. package/dist/watcher.d.ts +6 -3
  366. package/dist/watcher.d.ts.map +1 -1
  367. package/dist/watcher.js +49 -10
  368. package/dist/watcher.js.map +1 -1
  369. package/package.json +57 -7
  370. package/templates/cloudflare/worker.ts.template +381 -0
  371. package/templates/cloudflare/wrangler.toml.template +9 -0
  372. package/dist/base.d.ts +0 -58
  373. package/dist/base.d.ts.map +0 -1
  374. package/dist/base.js +0 -92
  375. package/dist/base.js.map +0 -1
  376. package/dist/dependency-manager.d.ts +0 -49
  377. package/dist/dependency-manager.d.ts.map +0 -1
  378. package/dist/dependency-manager.js +0 -165
  379. package/dist/dependency-manager.js.map +0 -1
  380. package/dist/registry-manager.d.ts +0 -76
  381. package/dist/registry-manager.d.ts.map +0 -1
  382. package/dist/registry-manager.js +0 -220
  383. package/dist/registry-manager.js.map +0 -1
  384. package/dist/schema-extractor.d.ts +0 -110
  385. package/dist/schema-extractor.d.ts.map +0 -1
  386. package/dist/schema-extractor.js +0 -727
  387. package/dist/schema-extractor.js.map +0 -1
  388. package/dist/test-marketplace-sources.d.ts +0 -5
  389. package/dist/test-marketplace-sources.d.ts.map +0 -1
  390. package/dist/test-marketplace-sources.js +0 -53
  391. package/dist/test-marketplace-sources.js.map +0 -1
  392. package/dist/types.d.ts +0 -109
  393. package/dist/types.d.ts.map +0 -1
  394. package/dist/types.js +0 -12
  395. package/dist/types.js.map +0 -1
@@ -0,0 +1,262 @@
1
+ /**
2
+ * PhotonBridge - Unified UI Communication Layer
3
+ *
4
+ * Provides a standardized API for custom UIs to communicate with Photon servers.
5
+ * Compatible with OpenAI Apps SDK patterns and MCP Apps (SEP-1865) proposal.
6
+ *
7
+ * Usage in custom UI (iframe):
8
+ * window.photon.onProgress((data) => updateProgressBar(data.value));
9
+ * window.photon.onElicitation(async (ask) => showMyDialog(ask));
10
+ *
11
+ * @see https://developers.openai.com/apps-sdk/build/chatgpt-ui/
12
+ * @see https://blog.modelcontextprotocol.io/posts/2025-11-21-mcp-apps/
13
+ */
14
+ // ════════════════════════════════════════════════════════════════════════════════
15
+ // CLIENT IMPLEMENTATION (runs inside iframe)
16
+ // ════════════════════════════════════════════════════════════════════════════════
17
+ /**
18
+ * Create the PhotonBridge instance for use in custom UI iframes.
19
+ * This is injected as window.photon by the PhotonBridgeLoader script.
20
+ */
21
+ export function createPhotonBridge() {
22
+ // Event listeners
23
+ const progressListeners = [];
24
+ const statusListeners = [];
25
+ const streamListeners = [];
26
+ const emitListeners = [];
27
+ const resultListeners = [];
28
+ const errorListeners = [];
29
+ let elicitationHandler = null;
30
+ // State
31
+ let _toolInput = {};
32
+ let _toolOutput = null;
33
+ let _widgetState = {};
34
+ let _context = {
35
+ theme: 'dark',
36
+ locale: 'en-US',
37
+ photon: '',
38
+ method: '',
39
+ };
40
+ // Check if running in ChatGPT
41
+ const isChatGPT = typeof window.openai !== 'undefined';
42
+ // Message handler
43
+ function handleMessage(event) {
44
+ const msg = event.data;
45
+ if (!msg || typeof msg.type !== 'string' || !msg.type.startsWith('photon:'))
46
+ return;
47
+ switch (msg.type) {
48
+ case 'photon:init':
49
+ _toolInput = msg.toolInput;
50
+ _context = msg.context;
51
+ break;
52
+ case 'photon:emit':
53
+ const emitEvent = msg.event;
54
+ emitListeners.forEach((cb) => cb(emitEvent));
55
+ if (emitEvent.emit === 'progress') {
56
+ progressListeners.forEach((cb) => cb(emitEvent));
57
+ }
58
+ else if (emitEvent.emit === 'status') {
59
+ statusListeners.forEach((cb) => cb(emitEvent));
60
+ }
61
+ else if (emitEvent.emit === 'stream') {
62
+ streamListeners.forEach((cb) => cb(emitEvent));
63
+ }
64
+ break;
65
+ case 'photon:ask':
66
+ if (elicitationHandler) {
67
+ elicitationHandler(msg.event).then((value) => {
68
+ window.parent.postMessage({
69
+ type: 'photon:ask-response',
70
+ id: msg.id,
71
+ value,
72
+ }, '*');
73
+ });
74
+ }
75
+ break;
76
+ case 'photon:result':
77
+ _toolOutput = msg.data;
78
+ resultListeners.forEach((cb) => cb(msg.data));
79
+ break;
80
+ case 'photon:error':
81
+ errorListeners.forEach((cb) => cb(msg.error));
82
+ break;
83
+ case 'photon:context':
84
+ _context = { ..._context, ...msg.context };
85
+ break;
86
+ }
87
+ }
88
+ window.addEventListener('message', handleMessage);
89
+ // Notify host that bridge is ready
90
+ window.parent.postMessage({ type: 'photon:ready' }, '*');
91
+ // Helper to create unsubscribe function
92
+ function subscribe(listeners, callback) {
93
+ listeners.push(callback);
94
+ return () => {
95
+ const idx = listeners.indexOf(callback);
96
+ if (idx >= 0)
97
+ listeners.splice(idx, 1);
98
+ };
99
+ }
100
+ return {
101
+ // Data access
102
+ get toolInput() {
103
+ return _toolInput;
104
+ },
105
+ get toolOutput() {
106
+ return _toolOutput;
107
+ },
108
+ get widgetState() {
109
+ return _widgetState;
110
+ },
111
+ setWidgetState(state) {
112
+ _widgetState = state;
113
+ window.parent.postMessage({
114
+ type: 'photon:set-state',
115
+ state,
116
+ }, '*');
117
+ },
118
+ // Event subscriptions
119
+ onProgress: (cb) => subscribe(progressListeners, cb),
120
+ onStatus: (cb) => subscribe(statusListeners, cb),
121
+ onStream: (cb) => subscribe(streamListeners, cb),
122
+ onEmit: (cb) => subscribe(emitListeners, cb),
123
+ onResult: (cb) => subscribe(resultListeners, cb),
124
+ onError: (cb) => subscribe(errorListeners, cb),
125
+ onElicitation(handler) {
126
+ elicitationHandler = handler;
127
+ return () => {
128
+ elicitationHandler = null;
129
+ };
130
+ },
131
+ // Actions
132
+ async callTool(toolName, args) {
133
+ const callId = 'call_' + Math.random().toString(36).slice(2);
134
+ return new Promise((resolve, reject) => {
135
+ function handleResponse(event) {
136
+ const msg = event.data;
137
+ if (msg?.jsonrpc === '2.0' && msg.id === callId && !msg.method) {
138
+ window.removeEventListener('message', handleResponse);
139
+ if (msg.error)
140
+ reject(new Error(msg.error.message || 'Tool call failed'));
141
+ else
142
+ resolve(msg.result);
143
+ }
144
+ }
145
+ window.addEventListener('message', handleResponse);
146
+ window.parent.postMessage({
147
+ jsonrpc: '2.0',
148
+ id: callId,
149
+ method: 'tools/call',
150
+ params: { name: toolName, arguments: args || {} },
151
+ }, '*');
152
+ });
153
+ },
154
+ // Alias for callTool - used by custom UI templates
155
+ async invoke(toolName, args) {
156
+ return this.callTool(toolName, args);
157
+ },
158
+ async sendFollowUpMessage(message) {
159
+ window.parent.postMessage({
160
+ type: 'photon:follow-up',
161
+ message,
162
+ }, '*');
163
+ },
164
+ // Context
165
+ get theme() {
166
+ return _context.theme;
167
+ },
168
+ get locale() {
169
+ return _context.locale;
170
+ },
171
+ get photon() {
172
+ return _context.photon;
173
+ },
174
+ get method() {
175
+ return _context.method;
176
+ },
177
+ get isChatGPT() {
178
+ return isChatGPT;
179
+ },
180
+ };
181
+ }
182
+ // ════════════════════════════════════════════════════════════════════════════════
183
+ // LOADER SCRIPT (injected into custom UI HTML)
184
+ // ════════════════════════════════════════════════════════════════════════════════
185
+ /**
186
+ * Generate the script that should be injected into custom UI HTML.
187
+ * This creates window.photon with the full bridge API.
188
+ */
189
+ export function generateBridgeLoaderScript() {
190
+ // Minified version of createPhotonBridge for injection
191
+ return `
192
+ <script>
193
+ (function() {
194
+ var pL = [], sL = [], strL = [], eL = [], rL = [], errL = [], eH = null;
195
+ var tI = {}, tO = null, wS = {}, ctx = { theme: 'dark', locale: 'en-US', photon: '', method: '' };
196
+
197
+ function sub(arr, cb) { arr.push(cb); return function() { var i = arr.indexOf(cb); if (i >= 0) arr.splice(i, 1); }; }
198
+
199
+ window.addEventListener('message', function(e) {
200
+ var m = e.data;
201
+ if (!m || typeof m.type !== 'string' || m.type.indexOf('photon:') !== 0) return;
202
+
203
+ if (m.type === 'photon:init') { tI = m.toolInput; ctx = m.context; }
204
+ else if (m.type === 'photon:emit') {
205
+ var ev = m.event;
206
+ eL.forEach(function(cb) { cb(ev); });
207
+ if (ev.emit === 'progress') pL.forEach(function(cb) { cb(ev); });
208
+ else if (ev.emit === 'status') sL.forEach(function(cb) { cb(ev); });
209
+ else if (ev.emit === 'stream') strL.forEach(function(cb) { cb(ev); });
210
+ }
211
+ else if (m.type === 'photon:ask' && eH) {
212
+ eH(m.event).then(function(v) {
213
+ window.parent.postMessage({ type: 'photon:ask-response', id: m.id, value: v }, '*');
214
+ });
215
+ }
216
+ else if (m.type === 'photon:result') { tO = m.data; rL.forEach(function(cb) { cb(m.data); }); }
217
+ else if (m.type === 'photon:error') { errL.forEach(function(cb) { cb(m.error); }); }
218
+ else if (m.type === 'photon:context') { Object.assign(ctx, m.context); }
219
+ });
220
+
221
+ window.parent.postMessage({ type: 'photon:ready' }, '*');
222
+
223
+ window.photon = {
224
+ get toolInput() { return tI; },
225
+ get toolOutput() { return tO; },
226
+ get widgetState() { return wS; },
227
+ setWidgetState: function(s) { wS = s; window.parent.postMessage({ type: 'photon:set-state', state: s }, '*'); },
228
+ onProgress: function(cb) { return sub(pL, cb); },
229
+ onStatus: function(cb) { return sub(sL, cb); },
230
+ onStream: function(cb) { return sub(strL, cb); },
231
+ onEmit: function(cb) { return sub(eL, cb); },
232
+ onResult: function(cb) { return sub(rL, cb); },
233
+ onError: function(cb) { return sub(errL, cb); },
234
+ onElicitation: function(h) { eH = h; return function() { eH = null; }; },
235
+ callTool: function(name, args) {
236
+ var id = 'call_' + Math.random().toString(36).slice(2);
237
+ return new Promise(function(res, rej) {
238
+ function h(e) {
239
+ var m = e.data;
240
+ if (m && m.jsonrpc === '2.0' && m.id === id && !m.method) {
241
+ window.removeEventListener('message', h);
242
+ if (m.error) rej(new Error(m.error.message || 'Tool call failed')); else res(m.result);
243
+ }
244
+ }
245
+ window.addEventListener('message', h);
246
+ window.parent.postMessage({ jsonrpc: '2.0', id: id, method: 'tools/call', params: { name: name, arguments: args || {} } }, '*');
247
+ });
248
+ },
249
+ invoke: function(name, args) { return this.callTool(name, args); },
250
+ sendFollowUpMessage: function(msg) {
251
+ window.parent.postMessage({ type: 'photon:follow-up', message: msg }, '*');
252
+ },
253
+ get theme() { return ctx.theme; },
254
+ get locale() { return ctx.locale; },
255
+ get photon() { return ctx.photon; },
256
+ get method() { return ctx.method; },
257
+ get isChatGPT() { return typeof window.openai !== 'undefined'; }
258
+ };
259
+ })();
260
+ </script>`;
261
+ }
262
+ //# sourceMappingURL=photon-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photon-bridge.js","sourceRoot":"","sources":["../../src/auto-ui/photon-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * PhotonHost - Host-side manager for custom UI iframes
3
+ *
4
+ * Manages communication between the Photon runtime and custom UI components
5
+ * rendered in iframes. Handles:
6
+ * - Sending emit/progress events to the UI
7
+ * - Routing elicitation requests and collecting responses
8
+ * - Tool invocations from the UI
9
+ *
10
+ * Usage:
11
+ * const host = new PhotonHost(iframe, { photon: 'demo', method: 'search' });
12
+ * host.sendEmit({ emit: 'progress', value: 0.5, message: 'Loading...' });
13
+ * const response = await host.askElicitation({ ask: 'text', message: 'Name?' });
14
+ */
15
+ interface HTMLIFrameElement {
16
+ contentWindow: {
17
+ postMessage(message: any, targetOrigin: string): void;
18
+ } | null;
19
+ }
20
+ import type { EmitEvent, AskEvent, PhotonContext } from './photon-bridge.js';
21
+ export interface PhotonHostOptions {
22
+ photon: string;
23
+ method: string;
24
+ toolInput: Record<string, any>;
25
+ theme?: 'light' | 'dark';
26
+ locale?: string;
27
+ displayMode?: 'inline' | 'fullscreen' | 'modal';
28
+ hostName?: string;
29
+ hostVersion?: string;
30
+ onCallTool?: (toolName: string, args: Record<string, any>) => Promise<any>;
31
+ onFollowUp?: (message: string) => void;
32
+ onStateChange?: (state: any) => void;
33
+ }
34
+ /**
35
+ * PhotonHost manages the host side of the photon bridge communication.
36
+ * Create one instance per custom UI iframe.
37
+ */
38
+ export declare class PhotonHost {
39
+ private iframe;
40
+ private context;
41
+ private platformContext;
42
+ private toolInput;
43
+ private pendingElicitations;
44
+ private isReady;
45
+ private readyPromise;
46
+ private readyResolve;
47
+ private messageHandler;
48
+ private options;
49
+ constructor(iframe: HTMLIFrameElement, options: PhotonHostOptions);
50
+ /**
51
+ * Wait for the iframe UI to be ready
52
+ */
53
+ waitForReady(): Promise<void>;
54
+ /**
55
+ * Initialize the bridge - call after iframe loads
56
+ * Sends initialization messages for all supported platforms:
57
+ * - MCP Apps Extension (JSON-RPC ui/initialize)
58
+ * - Photon Bridge (photon:init)
59
+ * - OpenAI Apps SDK compatible (openai:set_globals)
60
+ */
61
+ initialize(): void;
62
+ /**
63
+ * Send an emit event (progress, status, stream) to the UI
64
+ */
65
+ sendEmit(event: EmitEvent): void;
66
+ /**
67
+ * Send a progress event
68
+ */
69
+ sendProgress(value: number, message?: string): void;
70
+ /**
71
+ * Send a status message
72
+ */
73
+ sendStatus(message: string): void;
74
+ /**
75
+ * Request user input via elicitation
76
+ * Returns a promise that resolves with the user's response
77
+ */
78
+ askElicitation(ask: AskEvent): Promise<any>;
79
+ /**
80
+ * Send the final result to the UI
81
+ */
82
+ sendResult(data: any): void;
83
+ /**
84
+ * Send an error to the UI
85
+ */
86
+ sendError(message: string, code?: string): void;
87
+ /**
88
+ * Update context (theme, locale, etc.)
89
+ * Sends updates to all supported platforms.
90
+ */
91
+ updateContext(context: Partial<PhotonContext>): void;
92
+ /**
93
+ * Update theme across all platforms
94
+ */
95
+ setTheme(theme: 'light' | 'dark'): void;
96
+ /**
97
+ * Clean up - remove message listener
98
+ */
99
+ destroy(): void;
100
+ private send;
101
+ private sendRaw;
102
+ private handleMessage;
103
+ }
104
+ /**
105
+ * Create an OutputHandler that forwards events to a PhotonHost
106
+ */
107
+ export declare function createHostOutputHandler(host: PhotonHost): (yieldValue: any) => void;
108
+ /**
109
+ * Create an InputProvider that uses PhotonHost for elicitations
110
+ */
111
+ export declare function createHostInputProvider(host: PhotonHost): (ask: any) => Promise<any>;
112
+ export {};
113
+ //# sourceMappingURL=photon-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photon-host.d.ts","sourceRoot":"","sources":["../../src/auto-ui/photon-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,UAAU,iBAAiB;IACzB,aAAa,EAAE;QAAE,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACjF;AAED,OAAO,KAAK,EAGV,SAAS,EACT,QAAQ,EACR,aAAa,EACd,MAAM,oBAAoB,CAAC;AAQ5B,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3E,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CACtC;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,mBAAmB,CAMvB;IACJ,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,OAAO,CAAoB;gBAEvB,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB;IAkCjE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;;;;;OAMG;IACH,UAAU,IAAI,IAAI;IA4BlB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIhC;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAInD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC;;;OAGG;IACG,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAsBjD;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAI3B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAI/C;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAqBpD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAIvC;;OAEG;IACH,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,aAAa;CAsEtB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,IAC9C,YAAY,GAAG,UAKxB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,IACxC,KAAK,GAAG,KAAG,OAAO,CAAC,GAAG,CAAC,CAGtC"}
@@ -0,0 +1,284 @@
1
+ /**
2
+ * PhotonHost - Host-side manager for custom UI iframes
3
+ *
4
+ * Manages communication between the Photon runtime and custom UI components
5
+ * rendered in iframes. Handles:
6
+ * - Sending emit/progress events to the UI
7
+ * - Routing elicitation requests and collecting responses
8
+ * - Tool invocations from the UI
9
+ *
10
+ * Usage:
11
+ * const host = new PhotonHost(iframe, { photon: 'demo', method: 'search' });
12
+ * host.sendEmit({ emit: 'progress', value: 0.5, message: 'Loading...' });
13
+ * const response = await host.askElicitation({ ask: 'text', message: 'Name?' });
14
+ */
15
+ import { getThemeTokens } from './design-system/tokens.js';
16
+ import { createMcpAppsInitialize, createThemeChangeMessages, } from './platform-compat.js';
17
+ /**
18
+ * PhotonHost manages the host side of the photon bridge communication.
19
+ * Create one instance per custom UI iframe.
20
+ */
21
+ export class PhotonHost {
22
+ iframe;
23
+ context;
24
+ platformContext;
25
+ toolInput;
26
+ pendingElicitations = new Map();
27
+ isReady = false;
28
+ readyPromise;
29
+ readyResolve;
30
+ messageHandler;
31
+ options;
32
+ constructor(iframe, options) {
33
+ this.iframe = iframe;
34
+ this.options = options;
35
+ this.toolInput = options.toolInput;
36
+ const theme = options.theme || 'dark';
37
+ this.context = {
38
+ photon: options.photon,
39
+ method: options.method,
40
+ theme,
41
+ locale: options.locale || 'en-US',
42
+ };
43
+ this.platformContext = {
44
+ theme,
45
+ locale: options.locale || 'en-US',
46
+ displayMode: options.displayMode || 'inline',
47
+ photon: options.photon,
48
+ method: options.method,
49
+ hostName: options.hostName || 'beam',
50
+ hostVersion: options.hostVersion || '1.5.0',
51
+ };
52
+ // Create ready promise
53
+ this.readyPromise = new Promise((resolve) => {
54
+ this.readyResolve = resolve;
55
+ });
56
+ // Set up message handler
57
+ this.messageHandler = this.handleMessage.bind(this);
58
+ window.addEventListener('message', this.messageHandler);
59
+ }
60
+ /**
61
+ * Wait for the iframe UI to be ready
62
+ */
63
+ async waitForReady() {
64
+ return this.readyPromise;
65
+ }
66
+ /**
67
+ * Initialize the bridge - call after iframe loads
68
+ * Sends initialization messages for all supported platforms:
69
+ * - MCP Apps Extension (JSON-RPC ui/initialize)
70
+ * - Photon Bridge (photon:init)
71
+ * - OpenAI Apps SDK compatible (openai:set_globals)
72
+ */
73
+ initialize() {
74
+ const themeTokens = getThemeTokens(this.context.theme);
75
+ // 1. Send Photon Bridge init (with theme tokens)
76
+ this.send({
77
+ type: 'photon:init',
78
+ context: this.context,
79
+ toolInput: this.toolInput,
80
+ themeTokens,
81
+ });
82
+ // 2. Send MCP Apps Extension ui/initialize (JSON-RPC)
83
+ const mcpInit = createMcpAppsInitialize(this.platformContext, {
84
+ width: 800,
85
+ height: 600,
86
+ });
87
+ this.sendRaw(mcpInit);
88
+ // 3. Send OpenAI Apps SDK set_globals event
89
+ this.sendRaw({
90
+ type: 'openai:set_globals',
91
+ theme: this.context.theme,
92
+ displayMode: this.platformContext.displayMode,
93
+ locale: this.context.locale,
94
+ toolInput: this.toolInput,
95
+ });
96
+ }
97
+ /**
98
+ * Send an emit event (progress, status, stream) to the UI
99
+ */
100
+ sendEmit(event) {
101
+ this.send({ type: 'photon:emit', event });
102
+ }
103
+ /**
104
+ * Send a progress event
105
+ */
106
+ sendProgress(value, message) {
107
+ this.sendEmit({ emit: 'progress', value, message });
108
+ }
109
+ /**
110
+ * Send a status message
111
+ */
112
+ sendStatus(message) {
113
+ this.sendEmit({ emit: 'status', message });
114
+ }
115
+ /**
116
+ * Request user input via elicitation
117
+ * Returns a promise that resolves with the user's response
118
+ */
119
+ async askElicitation(ask) {
120
+ const id = Math.random().toString(36).slice(2);
121
+ return new Promise((resolve, reject) => {
122
+ this.pendingElicitations.set(id, { resolve, reject });
123
+ this.send({
124
+ type: 'photon:ask',
125
+ id,
126
+ event: ask,
127
+ });
128
+ // Timeout after 5 minutes
129
+ setTimeout(() => {
130
+ if (this.pendingElicitations.has(id)) {
131
+ this.pendingElicitations.delete(id);
132
+ reject(new Error('Elicitation timeout'));
133
+ }
134
+ }, 300000);
135
+ });
136
+ }
137
+ /**
138
+ * Send the final result to the UI
139
+ */
140
+ sendResult(data) {
141
+ this.send({ type: 'photon:result', data });
142
+ }
143
+ /**
144
+ * Send an error to the UI
145
+ */
146
+ sendError(message, code) {
147
+ this.send({ type: 'photon:error', error: { message, code } });
148
+ }
149
+ /**
150
+ * Update context (theme, locale, etc.)
151
+ * Sends updates to all supported platforms.
152
+ */
153
+ updateContext(context) {
154
+ Object.assign(this.context, context);
155
+ Object.assign(this.platformContext, context);
156
+ // Send Photon context update with theme tokens if theme changed
157
+ if (context.theme) {
158
+ const themeTokens = getThemeTokens(context.theme);
159
+ this.send({
160
+ type: 'photon:context',
161
+ context,
162
+ themeTokens,
163
+ });
164
+ // Send to all platforms
165
+ const messages = createThemeChangeMessages(context.theme);
166
+ messages.forEach((msg) => this.sendRaw(msg));
167
+ }
168
+ else {
169
+ this.send({ type: 'photon:context', context });
170
+ }
171
+ }
172
+ /**
173
+ * Update theme across all platforms
174
+ */
175
+ setTheme(theme) {
176
+ this.updateContext({ theme });
177
+ }
178
+ /**
179
+ * Clean up - remove message listener
180
+ */
181
+ destroy() {
182
+ window.removeEventListener('message', this.messageHandler);
183
+ this.pendingElicitations.clear();
184
+ }
185
+ // ─────────────────────────────────────────────────────────────────────────────
186
+ // Private methods
187
+ // ─────────────────────────────────────────────────────────────────────────────
188
+ send(message) {
189
+ if (this.iframe.contentWindow) {
190
+ this.iframe.contentWindow.postMessage(message, '*');
191
+ }
192
+ }
193
+ sendRaw(message) {
194
+ if (this.iframe.contentWindow) {
195
+ this.iframe.contentWindow.postMessage(message, '*');
196
+ }
197
+ }
198
+ handleMessage(event) {
199
+ // Only handle messages from our iframe
200
+ if (event.source !== this.iframe.contentWindow)
201
+ return;
202
+ const msg = event.data;
203
+ if (!msg || typeof msg !== 'object')
204
+ return;
205
+ // ─────────────────────────────────────────────────────────────────────────
206
+ // Handle MCP Apps Extension JSON-RPC messages
207
+ // ─────────────────────────────────────────────────────────────────────────
208
+ if (msg.jsonrpc === '2.0') {
209
+ if (msg.method === 'ui/ready') {
210
+ this.isReady = true;
211
+ this.readyResolve();
212
+ this.initialize();
213
+ }
214
+ else if (msg.method === 'tools/call' && this.options.onCallTool) {
215
+ this.options
216
+ .onCallTool(msg.params.name, msg.params.arguments)
217
+ .then((result) => {
218
+ this.sendRaw({
219
+ jsonrpc: '2.0',
220
+ id: msg.id,
221
+ result: { content: [{ type: 'text', text: JSON.stringify(result) }] },
222
+ });
223
+ })
224
+ .catch((error) => {
225
+ this.sendRaw({
226
+ jsonrpc: '2.0',
227
+ id: msg.id,
228
+ error: { code: -32000, message: error.message },
229
+ });
230
+ });
231
+ }
232
+ return;
233
+ }
234
+ // ─────────────────────────────────────────────────────────────────────────
235
+ // Handle Photon Bridge messages
236
+ // ─────────────────────────────────────────────────────────────────────────
237
+ if (typeof msg.type !== 'string' || !msg.type.startsWith('photon:'))
238
+ return;
239
+ switch (msg.type) {
240
+ case 'photon:ready':
241
+ this.isReady = true;
242
+ this.readyResolve();
243
+ // Send init after ready
244
+ this.initialize();
245
+ break;
246
+ case 'photon:ask-response':
247
+ const pending = this.pendingElicitations.get(msg.id);
248
+ if (pending) {
249
+ this.pendingElicitations.delete(msg.id);
250
+ pending.resolve(msg.value);
251
+ }
252
+ break;
253
+ case 'photon:set-state':
254
+ if (this.options.onStateChange) {
255
+ this.options.onStateChange(msg.state);
256
+ }
257
+ break;
258
+ case 'photon:follow-up':
259
+ if (this.options.onFollowUp) {
260
+ this.options.onFollowUp(msg.message);
261
+ }
262
+ break;
263
+ }
264
+ }
265
+ }
266
+ /**
267
+ * Create an OutputHandler that forwards events to a PhotonHost
268
+ */
269
+ export function createHostOutputHandler(host) {
270
+ return (yieldValue) => {
271
+ if (yieldValue && typeof yieldValue === 'object' && 'emit' in yieldValue) {
272
+ host.sendEmit(yieldValue);
273
+ }
274
+ };
275
+ }
276
+ /**
277
+ * Create an InputProvider that uses PhotonHost for elicitations
278
+ */
279
+ export function createHostInputProvider(host) {
280
+ return async (ask) => {
281
+ return host.askElicitation(ask);
282
+ };
283
+ }
284
+ //# sourceMappingURL=photon-host.js.map