@portel/photon 1.4.1 → 1.5.1

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 (379) hide show
  1. package/README.md +287 -1160
  2. package/dist/auto-ui/beam.d.ts +9 -0
  3. package/dist/auto-ui/beam.d.ts.map +1 -0
  4. package/dist/auto-ui/beam.js +2381 -0
  5. package/dist/auto-ui/beam.js.map +1 -0
  6. package/dist/auto-ui/components/card.d.ts +13 -0
  7. package/dist/auto-ui/components/card.d.ts.map +1 -0
  8. package/dist/auto-ui/components/card.js +64 -0
  9. package/dist/auto-ui/components/card.js.map +1 -0
  10. package/dist/auto-ui/components/form.d.ts +15 -0
  11. package/dist/auto-ui/components/form.d.ts.map +1 -0
  12. package/dist/auto-ui/components/form.js +72 -0
  13. package/dist/auto-ui/components/form.js.map +1 -0
  14. package/dist/auto-ui/components/list.d.ts +13 -0
  15. package/dist/auto-ui/components/list.d.ts.map +1 -0
  16. package/dist/auto-ui/components/list.js +58 -0
  17. package/dist/auto-ui/components/list.js.map +1 -0
  18. package/dist/auto-ui/components/progress.d.ts +18 -0
  19. package/dist/auto-ui/components/progress.d.ts.map +1 -0
  20. package/dist/auto-ui/components/progress.js +125 -0
  21. package/dist/auto-ui/components/progress.js.map +1 -0
  22. package/dist/auto-ui/components/table.d.ts +13 -0
  23. package/dist/auto-ui/components/table.d.ts.map +1 -0
  24. package/dist/auto-ui/components/table.js +82 -0
  25. package/dist/auto-ui/components/table.js.map +1 -0
  26. package/dist/auto-ui/components/tree.d.ts +13 -0
  27. package/dist/auto-ui/components/tree.d.ts.map +1 -0
  28. package/dist/auto-ui/components/tree.js +61 -0
  29. package/dist/auto-ui/components/tree.js.map +1 -0
  30. package/dist/auto-ui/daemon-tools.d.ts +45 -0
  31. package/dist/auto-ui/daemon-tools.d.ts.map +1 -0
  32. package/dist/auto-ui/daemon-tools.js +580 -0
  33. package/dist/auto-ui/daemon-tools.js.map +1 -0
  34. package/dist/auto-ui/design-system/index.d.ts +21 -0
  35. package/dist/auto-ui/design-system/index.d.ts.map +1 -0
  36. package/dist/auto-ui/design-system/index.js +27 -0
  37. package/dist/auto-ui/design-system/index.js.map +1 -0
  38. package/dist/auto-ui/design-system/tokens.d.ts +9 -0
  39. package/dist/auto-ui/design-system/tokens.d.ts.map +1 -0
  40. package/dist/auto-ui/design-system/tokens.js +27 -0
  41. package/dist/auto-ui/design-system/tokens.js.map +1 -0
  42. package/dist/auto-ui/design-system/transaction-ui.d.ts +70 -0
  43. package/dist/auto-ui/design-system/transaction-ui.d.ts.map +1 -0
  44. package/dist/auto-ui/design-system/transaction-ui.js +982 -0
  45. package/dist/auto-ui/design-system/transaction-ui.js.map +1 -0
  46. package/dist/auto-ui/frontend/index.html +84 -0
  47. package/dist/auto-ui/index.d.ts +21 -0
  48. package/dist/auto-ui/index.d.ts.map +1 -0
  49. package/dist/auto-ui/index.js +25 -0
  50. package/dist/auto-ui/index.js.map +1 -0
  51. package/dist/auto-ui/openapi-generator.d.ts +71 -0
  52. package/dist/auto-ui/openapi-generator.d.ts.map +1 -0
  53. package/dist/auto-ui/openapi-generator.js +223 -0
  54. package/dist/auto-ui/openapi-generator.js.map +1 -0
  55. package/dist/auto-ui/photon-bridge.d.ts +159 -0
  56. package/dist/auto-ui/photon-bridge.d.ts.map +1 -0
  57. package/dist/auto-ui/photon-bridge.js +262 -0
  58. package/dist/auto-ui/photon-bridge.js.map +1 -0
  59. package/dist/auto-ui/photon-host.d.ts +113 -0
  60. package/dist/auto-ui/photon-host.d.ts.map +1 -0
  61. package/dist/auto-ui/photon-host.js +284 -0
  62. package/dist/auto-ui/photon-host.js.map +1 -0
  63. package/dist/auto-ui/platform-compat.d.ts +71 -0
  64. package/dist/auto-ui/platform-compat.d.ts.map +1 -0
  65. package/dist/auto-ui/platform-compat.js +574 -0
  66. package/dist/auto-ui/platform-compat.js.map +1 -0
  67. package/dist/auto-ui/playground-html.d.ts +15 -0
  68. package/dist/auto-ui/playground-html.d.ts.map +1 -0
  69. package/dist/auto-ui/playground-html.js +1113 -0
  70. package/dist/auto-ui/playground-html.js.map +1 -0
  71. package/dist/auto-ui/playground-server.d.ts +7 -0
  72. package/dist/auto-ui/playground-server.d.ts.map +1 -0
  73. package/dist/auto-ui/playground-server.js +840 -0
  74. package/dist/auto-ui/playground-server.js.map +1 -0
  75. package/dist/auto-ui/registry.d.ts +13 -0
  76. package/dist/auto-ui/registry.d.ts.map +1 -0
  77. package/dist/auto-ui/registry.js +62 -0
  78. package/dist/auto-ui/registry.js.map +1 -0
  79. package/dist/auto-ui/renderer.d.ts +14 -0
  80. package/dist/auto-ui/renderer.d.ts.map +1 -0
  81. package/dist/auto-ui/renderer.js +88 -0
  82. package/dist/auto-ui/renderer.js.map +1 -0
  83. package/dist/auto-ui/rendering/components.d.ts +29 -0
  84. package/dist/auto-ui/rendering/components.d.ts.map +1 -0
  85. package/dist/auto-ui/rendering/components.js +773 -0
  86. package/dist/auto-ui/rendering/components.js.map +1 -0
  87. package/dist/auto-ui/rendering/field-analyzer.d.ts +48 -0
  88. package/dist/auto-ui/rendering/field-analyzer.d.ts.map +1 -0
  89. package/dist/auto-ui/rendering/field-analyzer.js +270 -0
  90. package/dist/auto-ui/rendering/field-analyzer.js.map +1 -0
  91. package/dist/auto-ui/rendering/field-renderers.d.ts +64 -0
  92. package/dist/auto-ui/rendering/field-renderers.d.ts.map +1 -0
  93. package/dist/auto-ui/rendering/field-renderers.js +317 -0
  94. package/dist/auto-ui/rendering/field-renderers.js.map +1 -0
  95. package/dist/auto-ui/rendering/index.d.ts +28 -0
  96. package/dist/auto-ui/rendering/index.d.ts.map +1 -0
  97. package/dist/auto-ui/rendering/index.js +60 -0
  98. package/dist/auto-ui/rendering/index.js.map +1 -0
  99. package/dist/auto-ui/rendering/layout-selector.d.ts +48 -0
  100. package/dist/auto-ui/rendering/layout-selector.d.ts.map +1 -0
  101. package/dist/auto-ui/rendering/layout-selector.js +352 -0
  102. package/dist/auto-ui/rendering/layout-selector.js.map +1 -0
  103. package/dist/auto-ui/rendering/template-engine.d.ts +41 -0
  104. package/dist/auto-ui/rendering/template-engine.d.ts.map +1 -0
  105. package/dist/auto-ui/rendering/template-engine.js +238 -0
  106. package/dist/auto-ui/rendering/template-engine.js.map +1 -0
  107. package/dist/auto-ui/streamable-http-transport.d.ts +79 -0
  108. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -0
  109. package/dist/auto-ui/streamable-http-transport.js +1314 -0
  110. package/dist/auto-ui/streamable-http-transport.js.map +1 -0
  111. package/dist/auto-ui/types.d.ts +310 -0
  112. package/dist/auto-ui/types.d.ts.map +1 -0
  113. package/dist/auto-ui/types.js +71 -0
  114. package/dist/auto-ui/types.js.map +1 -0
  115. package/dist/beam.bundle.js +13506 -0
  116. package/dist/beam.bundle.js.map +7 -0
  117. package/dist/claude-code-plugin.d.ts.map +1 -1
  118. package/dist/claude-code-plugin.js +30 -30
  119. package/dist/claude-code-plugin.js.map +1 -1
  120. package/dist/cli/commands/info.d.ts +11 -0
  121. package/dist/cli/commands/info.d.ts.map +1 -0
  122. package/dist/cli/commands/info.js +313 -0
  123. package/dist/cli/commands/info.js.map +1 -0
  124. package/dist/cli/commands/marketplace.d.ts +11 -0
  125. package/dist/cli/commands/marketplace.d.ts.map +1 -0
  126. package/dist/cli/commands/marketplace.js +198 -0
  127. package/dist/cli/commands/marketplace.js.map +1 -0
  128. package/dist/cli/commands/package-app.d.ts +9 -0
  129. package/dist/cli/commands/package-app.d.ts.map +1 -0
  130. package/dist/cli/commands/package-app.js +191 -0
  131. package/dist/cli/commands/package-app.js.map +1 -0
  132. package/dist/cli/commands/package.d.ts +11 -0
  133. package/dist/cli/commands/package.d.ts.map +1 -0
  134. package/dist/cli/commands/package.js +573 -0
  135. package/dist/cli/commands/package.js.map +1 -0
  136. package/dist/cli-alias.d.ts.map +1 -1
  137. package/dist/cli-alias.js +30 -28
  138. package/dist/cli-alias.js.map +1 -1
  139. package/dist/cli-formatter.d.ts +8 -24
  140. package/dist/cli-formatter.d.ts.map +1 -1
  141. package/dist/cli-formatter.js +8 -325
  142. package/dist/cli-formatter.js.map +1 -1
  143. package/dist/cli.d.ts +15 -1
  144. package/dist/cli.d.ts.map +1 -1
  145. package/dist/cli.js +1157 -1132
  146. package/dist/cli.js.map +1 -1
  147. package/dist/daemon/client.d.ts +79 -0
  148. package/dist/daemon/client.d.ts.map +1 -1
  149. package/dist/daemon/client.js +532 -8
  150. package/dist/daemon/client.js.map +1 -1
  151. package/dist/daemon/manager.d.ts +46 -12
  152. package/dist/daemon/manager.d.ts.map +1 -1
  153. package/dist/daemon/manager.js +102 -61
  154. package/dist/daemon/manager.js.map +1 -1
  155. package/dist/daemon/protocol.d.ts +62 -6
  156. package/dist/daemon/protocol.d.ts.map +1 -1
  157. package/dist/daemon/protocol.js +76 -1
  158. package/dist/daemon/protocol.js.map +1 -1
  159. package/dist/daemon/server.d.ts +6 -6
  160. package/dist/daemon/server.js +743 -133
  161. package/dist/daemon/server.js.map +1 -1
  162. package/dist/daemon/session-manager.d.ts +8 -1
  163. package/dist/daemon/session-manager.d.ts.map +1 -1
  164. package/dist/daemon/session-manager.js +32 -9
  165. package/dist/daemon/session-manager.js.map +1 -1
  166. package/dist/deploy/cloudflare.d.ts +12 -0
  167. package/dist/deploy/cloudflare.d.ts.map +1 -0
  168. package/dist/deploy/cloudflare.js +216 -0
  169. package/dist/deploy/cloudflare.js.map +1 -0
  170. package/dist/index.d.ts +1 -0
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +3 -0
  173. package/dist/index.js.map +1 -1
  174. package/dist/loader.d.ts +168 -21
  175. package/dist/loader.d.ts.map +1 -1
  176. package/dist/loader.js +1120 -318
  177. package/dist/loader.js.map +1 -1
  178. package/dist/markdown-utils.d.ts +8 -0
  179. package/dist/markdown-utils.d.ts.map +1 -0
  180. package/dist/markdown-utils.js +63 -0
  181. package/dist/markdown-utils.js.map +1 -0
  182. package/dist/marketplace-manager.d.ts +10 -0
  183. package/dist/marketplace-manager.d.ts.map +1 -1
  184. package/dist/marketplace-manager.js +112 -28
  185. package/dist/marketplace-manager.js.map +1 -1
  186. package/dist/mcp-client.d.ts +9 -0
  187. package/dist/mcp-client.d.ts.map +1 -0
  188. package/dist/mcp-client.js +11 -0
  189. package/dist/mcp-client.js.map +1 -0
  190. package/dist/mcp-elicitation.d.ts +32 -0
  191. package/dist/mcp-elicitation.d.ts.map +1 -0
  192. package/dist/mcp-elicitation.js +26 -0
  193. package/dist/mcp-elicitation.js.map +1 -0
  194. package/dist/path-resolver.d.ts +9 -12
  195. package/dist/path-resolver.d.ts.map +1 -1
  196. package/dist/path-resolver.js +13 -43
  197. package/dist/path-resolver.js.map +1 -1
  198. package/dist/photon-cli-runner.d.ts.map +1 -1
  199. package/dist/photon-cli-runner.js +202 -77
  200. package/dist/photon-cli-runner.js.map +1 -1
  201. package/dist/photon-doc-extractor.d.ts +88 -0
  202. package/dist/photon-doc-extractor.d.ts.map +1 -1
  203. package/dist/photon-doc-extractor.js +536 -27
  204. package/dist/photon-doc-extractor.js.map +1 -1
  205. package/dist/photons/maker.photon.d.ts +182 -0
  206. package/dist/photons/maker.photon.d.ts.map +1 -0
  207. package/dist/photons/maker.photon.js +504 -0
  208. package/dist/photons/maker.photon.js.map +1 -0
  209. package/dist/photons/maker.photon.ts +626 -0
  210. package/dist/photons/marketplace.photon.d.ts +110 -0
  211. package/dist/photons/marketplace.photon.d.ts.map +1 -0
  212. package/dist/photons/marketplace.photon.js +260 -0
  213. package/dist/photons/marketplace.photon.js.map +1 -0
  214. package/dist/photons/marketplace.photon.ts +378 -0
  215. package/dist/photons/tunnel.photon.d.ts +80 -0
  216. package/dist/photons/tunnel.photon.d.ts.map +1 -0
  217. package/dist/photons/tunnel.photon.js +269 -0
  218. package/dist/photons/tunnel.photon.js.map +1 -0
  219. package/dist/photons/tunnel.photon.ts +345 -0
  220. package/dist/security-scanner.d.ts.map +1 -1
  221. package/dist/security-scanner.js +18 -15
  222. package/dist/security-scanner.js.map +1 -1
  223. package/dist/serv/auth/jwt.d.ts +89 -0
  224. package/dist/serv/auth/jwt.d.ts.map +1 -0
  225. package/dist/serv/auth/jwt.js +239 -0
  226. package/dist/serv/auth/jwt.js.map +1 -0
  227. package/dist/serv/auth/oauth.d.ts +117 -0
  228. package/dist/serv/auth/oauth.d.ts.map +1 -0
  229. package/dist/serv/auth/oauth.js +395 -0
  230. package/dist/serv/auth/oauth.js.map +1 -0
  231. package/dist/serv/auth/well-known.d.ts +60 -0
  232. package/dist/serv/auth/well-known.d.ts.map +1 -0
  233. package/dist/serv/auth/well-known.js +154 -0
  234. package/dist/serv/auth/well-known.js.map +1 -0
  235. package/dist/serv/db/d1-client.d.ts +65 -0
  236. package/dist/serv/db/d1-client.d.ts.map +1 -0
  237. package/dist/serv/db/d1-client.js +137 -0
  238. package/dist/serv/db/d1-client.js.map +1 -0
  239. package/dist/serv/db/d1-stores.d.ts +62 -0
  240. package/dist/serv/db/d1-stores.d.ts.map +1 -0
  241. package/dist/serv/db/d1-stores.js +307 -0
  242. package/dist/serv/db/d1-stores.js.map +1 -0
  243. package/dist/serv/index.d.ts +114 -0
  244. package/dist/serv/index.d.ts.map +1 -0
  245. package/dist/serv/index.js +172 -0
  246. package/dist/serv/index.js.map +1 -0
  247. package/dist/serv/local.d.ts +118 -0
  248. package/dist/serv/local.d.ts.map +1 -0
  249. package/dist/serv/local.js +392 -0
  250. package/dist/serv/local.js.map +1 -0
  251. package/dist/serv/middleware/auth.d.ts +66 -0
  252. package/dist/serv/middleware/auth.d.ts.map +1 -0
  253. package/dist/serv/middleware/auth.js +178 -0
  254. package/dist/serv/middleware/auth.js.map +1 -0
  255. package/dist/serv/middleware/tenant.d.ts +94 -0
  256. package/dist/serv/middleware/tenant.d.ts.map +1 -0
  257. package/dist/serv/middleware/tenant.js +152 -0
  258. package/dist/serv/middleware/tenant.js.map +1 -0
  259. package/dist/serv/runtime/executor.d.ts +76 -0
  260. package/dist/serv/runtime/executor.d.ts.map +1 -0
  261. package/dist/serv/runtime/executor.js +105 -0
  262. package/dist/serv/runtime/executor.js.map +1 -0
  263. package/dist/serv/runtime/index.d.ts +8 -0
  264. package/dist/serv/runtime/index.d.ts.map +1 -0
  265. package/dist/serv/runtime/index.js +10 -0
  266. package/dist/serv/runtime/index.js.map +1 -0
  267. package/dist/serv/runtime/oauth-context.d.ts +121 -0
  268. package/dist/serv/runtime/oauth-context.d.ts.map +1 -0
  269. package/dist/serv/runtime/oauth-context.js +153 -0
  270. package/dist/serv/runtime/oauth-context.js.map +1 -0
  271. package/dist/serv/session/kv-store.d.ts +54 -0
  272. package/dist/serv/session/kv-store.d.ts.map +1 -0
  273. package/dist/serv/session/kv-store.js +149 -0
  274. package/dist/serv/session/kv-store.js.map +1 -0
  275. package/dist/serv/session/store.d.ts +113 -0
  276. package/dist/serv/session/store.d.ts.map +1 -0
  277. package/dist/serv/session/store.js +284 -0
  278. package/dist/serv/session/store.js.map +1 -0
  279. package/dist/serv/types/index.d.ts +147 -0
  280. package/dist/serv/types/index.d.ts.map +1 -0
  281. package/dist/serv/types/index.js +8 -0
  282. package/dist/serv/types/index.js.map +1 -0
  283. package/dist/serv/vault/token-vault.d.ts +102 -0
  284. package/dist/serv/vault/token-vault.d.ts.map +1 -0
  285. package/dist/serv/vault/token-vault.js +177 -0
  286. package/dist/serv/vault/token-vault.js.map +1 -0
  287. package/dist/server.d.ts +173 -0
  288. package/dist/server.d.ts.map +1 -1
  289. package/dist/server.js +1622 -86
  290. package/dist/server.js.map +1 -1
  291. package/dist/shared/cli-sections.d.ts +6 -0
  292. package/dist/shared/cli-sections.d.ts.map +1 -0
  293. package/dist/shared/cli-sections.js +16 -0
  294. package/dist/shared/cli-sections.js.map +1 -0
  295. package/dist/shared/cli-utils.d.ts +81 -0
  296. package/dist/shared/cli-utils.d.ts.map +1 -0
  297. package/dist/shared/cli-utils.js +174 -0
  298. package/dist/shared/cli-utils.js.map +1 -0
  299. package/dist/shared/config-docs.d.ts +6 -0
  300. package/dist/shared/config-docs.d.ts.map +1 -0
  301. package/dist/shared/config-docs.js +6 -0
  302. package/dist/shared/config-docs.js.map +1 -0
  303. package/dist/shared/error-handler.d.ts +128 -0
  304. package/dist/shared/error-handler.d.ts.map +1 -0
  305. package/dist/shared/error-handler.js +342 -0
  306. package/dist/shared/error-handler.js.map +1 -0
  307. package/dist/shared/logger.d.ts +42 -0
  308. package/dist/shared/logger.d.ts.map +1 -0
  309. package/dist/shared/logger.js +123 -0
  310. package/dist/shared/logger.js.map +1 -0
  311. package/dist/shared/performance.d.ts +65 -0
  312. package/dist/shared/performance.d.ts.map +1 -0
  313. package/dist/shared/performance.js +136 -0
  314. package/dist/shared/performance.js.map +1 -0
  315. package/dist/shared/task-runner.d.ts +2 -0
  316. package/dist/shared/task-runner.d.ts.map +1 -0
  317. package/dist/shared/task-runner.js +16 -0
  318. package/dist/shared/task-runner.js.map +1 -0
  319. package/dist/shared/validation.d.ts +6 -0
  320. package/dist/shared/validation.d.ts.map +1 -0
  321. package/dist/shared/validation.js +6 -0
  322. package/dist/shared/validation.js.map +1 -0
  323. package/dist/shared-utils.d.ts +63 -0
  324. package/dist/shared-utils.d.ts.map +1 -0
  325. package/dist/shared-utils.js +123 -0
  326. package/dist/shared-utils.js.map +1 -0
  327. package/dist/template-manager.d.ts +23 -2
  328. package/dist/template-manager.d.ts.map +1 -1
  329. package/dist/template-manager.js +175 -86
  330. package/dist/template-manager.js.map +1 -1
  331. package/dist/test-client.d.ts.map +1 -1
  332. package/dist/test-client.js +10 -8
  333. package/dist/test-client.js.map +1 -1
  334. package/dist/test-runner.d.ts +52 -0
  335. package/dist/test-runner.d.ts.map +1 -0
  336. package/dist/test-runner.js +785 -0
  337. package/dist/test-runner.js.map +1 -0
  338. package/dist/testing.d.ts +103 -0
  339. package/dist/testing.d.ts.map +1 -0
  340. package/dist/testing.js +163 -0
  341. package/dist/testing.js.map +1 -0
  342. package/dist/version-checker.d.ts.map +1 -1
  343. package/dist/version-checker.js +2 -2
  344. package/dist/version-checker.js.map +1 -1
  345. package/dist/version.d.ts +2 -0
  346. package/dist/version.d.ts.map +1 -0
  347. package/dist/version.js +5 -0
  348. package/dist/version.js.map +1 -0
  349. package/dist/watcher.d.ts +6 -3
  350. package/dist/watcher.d.ts.map +1 -1
  351. package/dist/watcher.js +49 -10
  352. package/dist/watcher.js.map +1 -1
  353. package/package.json +47 -7
  354. package/templates/cloudflare/worker.ts.template +381 -0
  355. package/templates/cloudflare/wrangler.toml.template +9 -0
  356. package/dist/base.d.ts +0 -58
  357. package/dist/base.d.ts.map +0 -1
  358. package/dist/base.js +0 -92
  359. package/dist/base.js.map +0 -1
  360. package/dist/dependency-manager.d.ts +0 -49
  361. package/dist/dependency-manager.d.ts.map +0 -1
  362. package/dist/dependency-manager.js +0 -165
  363. package/dist/dependency-manager.js.map +0 -1
  364. package/dist/registry-manager.d.ts +0 -76
  365. package/dist/registry-manager.d.ts.map +0 -1
  366. package/dist/registry-manager.js +0 -220
  367. package/dist/registry-manager.js.map +0 -1
  368. package/dist/schema-extractor.d.ts +0 -110
  369. package/dist/schema-extractor.d.ts.map +0 -1
  370. package/dist/schema-extractor.js +0 -727
  371. package/dist/schema-extractor.js.map +0 -1
  372. package/dist/test-marketplace-sources.d.ts +0 -5
  373. package/dist/test-marketplace-sources.d.ts.map +0 -1
  374. package/dist/test-marketplace-sources.js +0 -53
  375. package/dist/test-marketplace-sources.js.map +0 -1
  376. package/dist/types.d.ts +0 -109
  377. package/dist/types.d.ts.map +0 -1
  378. package/dist/types.js +0 -12
  379. package/dist/types.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@portel/photon",
3
- "version": "1.4.1",
3
+ "version": "1.5.1",
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
  "main": "dist/index.js",
@@ -12,21 +12,47 @@
12
12
  "templates"
13
13
  ],
14
14
  "scripts": {
15
- "build": "tsc",
15
+ "build": "tsc && cp -r src/photons dist/",
16
16
  "dev": "tsc --watch",
17
- "prepublishOnly": "npm run build",
17
+ "lint": "eslint src/",
18
+ "lint:fix": "eslint src/ --fix",
19
+ "format": "prettier --write \"src/**/*.ts\"",
20
+ "format:check": "prettier --check \"src/**/*.ts\"",
21
+ "typecheck": "tsc --noEmit",
22
+ "build:beam": "tsx scripts/build-beam.ts",
23
+ "watch:beam": "tsx scripts/build-beam.ts --watch",
24
+ "dev:beam": "npm run build:beam && (tsx scripts/build-beam.ts --watch & tsx watch src/cli.ts beam)",
25
+ "prepublishOnly": "node -e \"const p=require('./package.json'); if(JSON.stringify(p.dependencies).includes('file:')) { console.error('ERROR: file: dependency found. Update to npm version before publishing.'); process.exit(1); }\" && npm run build",
18
26
  "test": "npm run test:all",
19
- "test:all": "npm run build && npm run test:schema && npm run test:marketplace && npm run test:loader && npm run test:server && npm run test:integration && npm run test:cli && npm run test:readme",
27
+ "test:all": "npm run build && npm run test:schema && npm run test:marketplace && npm run test:loader && npm run test:server && npm run test:integration && npm run test:ui-resources && npm run test:zero-config && npm run test:mcp-config && npm run test:cli && npm run test:logger && npm run test:error-handler && npm run test:performance && npm run test:validation && npm run test:daemon-pubsub && npm run test:daemon-tools && npm run test:daemon-buffer && npm run test:readme",
28
+ "test:zero-config": "npx tsx tests/zero-config.test.ts",
29
+ "test:mcp-config": "npx tsx tests/mcp-configuration.test.ts",
30
+ "test:coverage": "npm run build && c8 --include='dist/**/*.js' --reporter=text --reporter=html npm run test:unit",
31
+ "test:unit": "npx tsx tests/schema-extractor.test.ts && npx tsx tests/marketplace-manager.test.ts && npx tsx tests/loader.test.ts && npx tsx tests/loader.comprehensive.test.ts && npx tsx tests/server.test.ts && npx tsx tests/server.comprehensive.test.ts && npx tsx tests/cli-runner.test.ts && npx tsx tests/cli.comprehensive.test.ts && npx tsx tests/logger.test.ts && npx tsx tests/error-handler.test.ts && npx tsx tests/performance.test.ts && npx tsx tests/validation.test.ts && npx tsx tests/daemon-pubsub.test.ts && npx tsx tests/daemon-tools.test.ts && npx tsx tests/shared-utils.test.ts",
32
+ "test:cli:comprehensive": "npx tsx tests/cli.comprehensive.test.ts",
33
+ "test:loader:comprehensive": "npx tsx tests/loader.comprehensive.test.ts",
34
+ "test:server:comprehensive": "npx tsx tests/server.comprehensive.test.ts",
35
+ "test:daemon-pubsub": "npx tsx tests/daemon-pubsub.test.ts",
36
+ "test:daemon-tools": "npx tsx tests/daemon-tools.test.ts",
37
+ "test:daemon-buffer": "npx tsx tests/daemon-event-buffer.test.ts",
20
38
  "test:cli": "npx tsx tests/cli-runner.test.ts",
39
+ "test:logger": "npx tsx tests/logger.test.ts",
40
+ "test:error-handler": "npx tsx tests/error-handler.test.ts",
41
+ "test:performance": "npx tsx tests/performance.test.ts",
42
+ "test:validation": "npx tsx tests/validation.test.ts",
21
43
  "test:readme": "bash tests/readme-validation.sh",
22
44
  "test:schema": "npx tsx tests/schema-extractor.test.ts",
23
45
  "test:marketplace": "npx tsx tests/marketplace-manager.test.ts",
24
46
  "test:loader": "npx tsx tests/loader.test.ts",
25
47
  "test:server": "npx tsx tests/server.test.ts",
26
48
  "test:integration": "npx tsx tests/integration.test.ts",
49
+ "test:ui-resources": "npx tsx tests/ui-resources.test.ts",
27
50
  "test:load": "npm run build && node --expose-gc --max-old-space-size=4096 node_modules/.bin/tsx tests/load-test.ts",
28
51
  "test:sqlite": "npm run build && npx tsx tests/sqlite.test.ts",
29
52
  "test:github": "npm run build && npx tsx tests/github-issues.test.ts",
53
+ "test:beam": "npm run build && npx tsx tests/beam/rendering.test.ts",
54
+ "test:e2e": "npm run build && npx playwright test",
55
+ "test:e2e:ui": "npm run build && npx playwright test --ui",
30
56
  "release": "release-it",
31
57
  "release:minor": "release-it minor",
32
58
  "release:major": "release-it major",
@@ -51,19 +77,33 @@
51
77
  "author": "Portel Dev",
52
78
  "license": "MIT",
53
79
  "dependencies": {
54
- "@modelcontextprotocol/sdk": "^1.0.4",
55
- "@portel/photon-core": "^1.1.0",
80
+ "@modelcontextprotocol/sdk": "^1.25.2",
81
+ "@portel/photon-core": "^2.3.0",
56
82
  "chokidar": "^4.0.3",
57
83
  "cli-highlight": "^2.1.11",
58
84
  "commander": "^12.1.0",
59
85
  "esbuild": "^0.27.0",
60
- "typescript": "^5.0.0"
86
+ "lit": "^3.3.2",
87
+ "typescript": "^5.0.0",
88
+ "ws": "^8.19.0"
61
89
  },
62
90
  "devDependencies": {
91
+ "@eslint/js": "^9.39.2",
92
+ "@playwright/test": "^1.58.0",
63
93
  "@release-it/conventional-changelog": "^10.0.1",
94
+ "@types/inquirer": "^9.0.9",
64
95
  "@types/node": "^22.10.2",
96
+ "@types/ws": "^8.18.1",
97
+ "@typescript-eslint/eslint-plugin": "^8.53.0",
98
+ "@typescript-eslint/parser": "^8.53.0",
65
99
  "autocannon": "^8.0.0",
100
+ "c8": "^10.1.3",
66
101
  "clinic": "^13.0.0",
102
+ "eslint": "^9.39.2",
103
+ "eslint-config-prettier": "^10.1.8",
104
+ "openapi-types": "^12.1.3",
105
+ "playwright": "^1.57.0",
106
+ "prettier": "^3.8.0",
67
107
  "release-it": "^19.0.6",
68
108
  "tsx": "^4.20.6",
69
109
  "typescript": "^5.7.3"
@@ -0,0 +1,381 @@
1
+ /**
2
+ * Photon MCP Worker for Cloudflare
3
+ * Auto-generated - do not edit directly
4
+ */
5
+
6
+ // @ts-ignore - Will be replaced during build
7
+ import PhotonClass from './photon';
8
+
9
+ interface Env {
10
+ // Add your environment variables here
11
+ [key: string]: string | undefined;
12
+ }
13
+
14
+ type SSESession = {
15
+ writer: WritableStreamDefaultWriter<Uint8Array>;
16
+ encoder: TextEncoder;
17
+ };
18
+
19
+ const sessions = new Map<string, SSESession>();
20
+
21
+ // Tool definitions extracted at build time
22
+ // @ts-ignore - Will be replaced during build
23
+ const TOOL_DEFINITIONS: any[] = __TOOL_DEFINITIONS__;
24
+ const PHOTON_NAME = '__PHOTON_NAME__';
25
+ const DEV_MODE = __DEV_MODE__;
26
+
27
+ // Instantiate photon
28
+ let photonInstance: InstanceType<typeof PhotonClass> | null = null;
29
+
30
+ function getPhoton(env: Env): InstanceType<typeof PhotonClass> {
31
+ if (!photonInstance) {
32
+ // Pass env vars as constructor params if needed
33
+ photonInstance = new PhotonClass();
34
+ }
35
+ return photonInstance;
36
+ }
37
+
38
+ // MCP JSON-RPC handler
39
+ async function handleMCPRequest(request: any, env: Env): Promise<any> {
40
+ const { method, params, id } = request;
41
+ const photon = getPhoton(env);
42
+
43
+ switch (method) {
44
+ case 'initialize':
45
+ return {
46
+ jsonrpc: '2.0',
47
+ id,
48
+ result: {
49
+ protocolVersion: '2024-11-05',
50
+ capabilities: { tools: {} },
51
+ serverInfo: { name: PHOTON_NAME, version: '1.0.0' },
52
+ },
53
+ };
54
+
55
+ case 'tools/list':
56
+ return {
57
+ jsonrpc: '2.0',
58
+ id,
59
+ result: { tools: TOOL_DEFINITIONS },
60
+ };
61
+
62
+ case 'tools/call': {
63
+ const { name, arguments: args } = params;
64
+ try {
65
+ const method = (photon as any)[name];
66
+ if (typeof method !== 'function') {
67
+ throw new Error(`Unknown tool: ${name}`);
68
+ }
69
+ const result = await method.call(photon, args || {});
70
+ return {
71
+ jsonrpc: '2.0',
72
+ id,
73
+ result: {
74
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
75
+ },
76
+ };
77
+ } catch (error: any) {
78
+ return {
79
+ jsonrpc: '2.0',
80
+ id,
81
+ result: {
82
+ content: [{ type: 'text', text: `Error: ${error.message}` }],
83
+ isError: true,
84
+ },
85
+ };
86
+ }
87
+ }
88
+
89
+ case 'notifications/initialized':
90
+ case 'ping':
91
+ return { jsonrpc: '2.0', id, result: {} };
92
+
93
+ default:
94
+ return {
95
+ jsonrpc: '2.0',
96
+ id,
97
+ error: { code: -32601, message: `Method not found: ${method}` },
98
+ };
99
+ }
100
+ }
101
+
102
+ // SSE stream handler
103
+ async function handleSSE(request: Request, env: Env): Promise<Response> {
104
+ const sessionId = crypto.randomUUID();
105
+ const encoder = new TextEncoder();
106
+
107
+ const { readable, writable } = new TransformStream();
108
+ const writer = writable.getWriter();
109
+
110
+ sessions.set(sessionId, { writer, encoder });
111
+
112
+ // Send session ID
113
+ await writer.write(encoder.encode(`event: session\ndata: ${JSON.stringify({ sessionId })}\n\n`));
114
+
115
+ // Keep-alive
116
+ const interval = setInterval(async () => {
117
+ try {
118
+ await writer.write(encoder.encode(`: keepalive\n\n`));
119
+ } catch {
120
+ clearInterval(interval);
121
+ }
122
+ }, 30000);
123
+
124
+ // Cleanup on close
125
+ request.signal.addEventListener('abort', () => {
126
+ clearInterval(interval);
127
+ sessions.delete(sessionId);
128
+ writer.close().catch(() => {});
129
+ });
130
+
131
+ return new Response(readable, {
132
+ headers: {
133
+ 'Content-Type': 'text/event-stream',
134
+ 'Cache-Control': 'no-cache',
135
+ 'Connection': 'keep-alive',
136
+ 'Access-Control-Allow-Origin': '*',
137
+ },
138
+ });
139
+ }
140
+
141
+ // Message handler for SSE
142
+ async function handleMessage(request: Request, env: Env): Promise<Response> {
143
+ const url = new URL(request.url);
144
+ const sessionId = url.searchParams.get('sessionId');
145
+
146
+ if (!sessionId || !sessions.has(sessionId)) {
147
+ return new Response('Invalid session', { status: 400 });
148
+ }
149
+
150
+ const session = sessions.get(sessionId)!;
151
+ const body = await request.json();
152
+ const response = await handleMCPRequest(body, env);
153
+
154
+ // Send response via SSE
155
+ const data = `event: message\ndata: ${JSON.stringify(response)}\n\n`;
156
+ await session.writer.write(session.encoder.encode(data));
157
+
158
+ return new Response('OK', {
159
+ headers: { 'Access-Control-Allow-Origin': '*' },
160
+ });
161
+ }
162
+
163
+ // Playground HTML
164
+ function getPlaygroundHTML(): string {
165
+ return `<!DOCTYPE html>
166
+ <html lang="en">
167
+ <head>
168
+ <meta charset="UTF-8">
169
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
170
+ <title>${PHOTON_NAME} - Playground</title>
171
+ <style>
172
+ * { margin: 0; padding: 0; box-sizing: border-box; }
173
+ :root { --bg: #0a0a0f; --card: #12121a; --border: #1e1e2e; --text: #e4e4e7; --muted: #71717a; --accent: #6366f1; --green: #22c55e; }
174
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: var(--bg); color: var(--text); min-height: 100vh; }
175
+ .header { background: var(--card); border-bottom: 1px solid var(--border); padding: 16px 24px; display: flex; align-items: center; gap: 12px; }
176
+ .header h1 { font-size: 18px; font-weight: 600; }
177
+ .header h1::before { content: ''; width: 8px; height: 8px; background: var(--green); border-radius: 50%; display: inline-block; margin-right: 8px; box-shadow: 0 0 8px var(--green); }
178
+ .badge { background: #f97316; color: white; padding: 2px 8px; border-radius: 4px; font-size: 11px; font-weight: 600; }
179
+ .container { display: grid; grid-template-columns: 300px 1fr; height: calc(100vh - 57px); }
180
+ .sidebar { background: var(--card); border-right: 1px solid var(--border); padding: 16px; overflow-y: auto; }
181
+ .tool { padding: 12px; border-radius: 8px; cursor: pointer; margin-bottom: 8px; border: 1px solid var(--border); }
182
+ .tool:hover { border-color: var(--accent); }
183
+ .tool.active { border-color: var(--accent); background: rgba(99, 102, 241, 0.1); }
184
+ .tool-name { font-weight: 600; font-size: 14px; margin-bottom: 4px; }
185
+ .tool-desc { font-size: 12px; color: var(--muted); }
186
+ .main { padding: 24px; display: flex; flex-direction: column; gap: 16px; overflow-y: auto; }
187
+ .panel { background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 16px; }
188
+ .panel h3 { font-size: 14px; margin-bottom: 12px; color: var(--muted); }
189
+ .form-group { margin-bottom: 12px; }
190
+ .form-group label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 4px; }
191
+ .form-group input, .form-group select { width: 100%; padding: 8px 12px; background: var(--bg); border: 1px solid var(--border); border-radius: 6px; color: var(--text); font-size: 14px; }
192
+ .btn { background: var(--accent); color: white; border: none; padding: 10px 20px; border-radius: 6px; cursor: pointer; font-weight: 600; }
193
+ .btn:hover { opacity: 0.9; }
194
+ .btn:disabled { opacity: 0.5; cursor: not-allowed; }
195
+ pre { background: var(--bg); padding: 12px; border-radius: 6px; overflow-x: auto; font-size: 13px; white-space: pre-wrap; }
196
+ .preview { flex: 1; min-height: 300px; }
197
+ .preview iframe { width: 100%; height: 100%; border: none; border-radius: 6px; background: white; }
198
+ </style>
199
+ </head>
200
+ <body>
201
+ <div class="header">
202
+ <h1>${PHOTON_NAME}</h1>
203
+ <span class="badge">Cloudflare Workers</span>
204
+ </div>
205
+ <div class="container">
206
+ <div class="sidebar">
207
+ <div id="tools"></div>
208
+ </div>
209
+ <div class="main">
210
+ <div class="panel">
211
+ <h3>Parameters</h3>
212
+ <div id="params"></div>
213
+ <button class="btn" id="call" disabled>Call Tool</button>
214
+ </div>
215
+ <div class="panel">
216
+ <h3>Response</h3>
217
+ <pre id="response">Select a tool to get started</pre>
218
+ </div>
219
+ </div>
220
+ </div>
221
+ <script>
222
+ const tools = ${JSON.stringify(TOOL_DEFINITIONS)};
223
+ let selectedTool = null;
224
+
225
+ function renderTools() {
226
+ const container = document.getElementById('tools');
227
+ container.innerHTML = tools.map(t => \`
228
+ <div class="tool" data-name="\${t.name}">
229
+ <div class="tool-name">\${t.name}</div>
230
+ <div class="tool-desc">\${t.description || ''}</div>
231
+ </div>
232
+ \`).join('');
233
+
234
+ container.querySelectorAll('.tool').forEach(el => {
235
+ el.onclick = () => selectTool(el.dataset.name);
236
+ });
237
+ }
238
+
239
+ function selectTool(name) {
240
+ selectedTool = tools.find(t => t.name === name);
241
+ document.querySelectorAll('.tool').forEach(el => el.classList.remove('active'));
242
+ document.querySelector(\`[data-name="\${name}"]\`).classList.add('active');
243
+ renderParams();
244
+ document.getElementById('call').disabled = false;
245
+ }
246
+
247
+ function renderParams() {
248
+ const container = document.getElementById('params');
249
+ const props = selectedTool?.inputSchema?.properties || {};
250
+ const required = selectedTool?.inputSchema?.required || [];
251
+
252
+ if (Object.keys(props).length === 0) {
253
+ container.innerHTML = '<p style="color: var(--muted); font-size: 13px;">No parameters required</p>';
254
+ return;
255
+ }
256
+
257
+ container.innerHTML = Object.entries(props).map(([key, schema]) => {
258
+ const req = required.includes(key) ? ' *' : '';
259
+ if (schema.enum) {
260
+ return \`<div class="form-group">
261
+ <label>\${key}\${req}</label>
262
+ <select name="\${key}">
263
+ <option value="">Select...</option>
264
+ \${schema.enum.map(v => \`<option value="\${v}">\${v}</option>\`).join('')}
265
+ </select>
266
+ </div>\`;
267
+ }
268
+ const type = schema.type === 'number' ? 'number' : 'text';
269
+ return \`<div class="form-group">
270
+ <label>\${key}\${req}</label>
271
+ <input type="\${type}" name="\${key}" placeholder="\${schema.description || ''}">
272
+ </div>\`;
273
+ }).join('');
274
+ }
275
+
276
+ document.getElementById('call').onclick = async () => {
277
+ if (!selectedTool) return;
278
+ const form = document.getElementById('params');
279
+ const args = {};
280
+ form.querySelectorAll('input, select').forEach(el => {
281
+ if (el.value) {
282
+ args[el.name] = el.type === 'number' ? Number(el.value) : el.value;
283
+ }
284
+ });
285
+
286
+ document.getElementById('response').textContent = 'Calling...';
287
+
288
+ try {
289
+ const res = await fetch('/api/call', {
290
+ method: 'POST',
291
+ headers: { 'Content-Type': 'application/json' },
292
+ body: JSON.stringify({ tool: selectedTool.name, args })
293
+ });
294
+ const data = await res.json();
295
+ document.getElementById('response').textContent = JSON.stringify(data, null, 2);
296
+ } catch (e) {
297
+ document.getElementById('response').textContent = 'Error: ' + e.message;
298
+ }
299
+ };
300
+
301
+ renderTools();
302
+ </script>
303
+ </body>
304
+ </html>`;
305
+ }
306
+
307
+ // Main fetch handler
308
+ export default {
309
+ async fetch(request: Request, env: Env): Promise<Response> {
310
+ const url = new URL(request.url);
311
+
312
+ // CORS preflight
313
+ if (request.method === 'OPTIONS') {
314
+ return new Response(null, {
315
+ headers: {
316
+ 'Access-Control-Allow-Origin': '*',
317
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
318
+ 'Access-Control-Allow-Headers': 'Content-Type',
319
+ },
320
+ });
321
+ }
322
+
323
+ // Info endpoint
324
+ if (url.pathname === '/' && request.method === 'GET') {
325
+ return Response.json({
326
+ name: PHOTON_NAME,
327
+ transport: 'sse',
328
+ runtime: 'cloudflare-workers',
329
+ endpoints: {
330
+ sse: '/mcp',
331
+ messages: '/mcp/messages',
332
+ ...(DEV_MODE ? { playground: '/playground' } : {}),
333
+ },
334
+ tools: TOOL_DEFINITIONS.length,
335
+ });
336
+ }
337
+
338
+ // SSE endpoint
339
+ if (url.pathname === '/mcp' && request.method === 'GET') {
340
+ return handleSSE(request, env);
341
+ }
342
+
343
+ // Message endpoint
344
+ if (url.pathname === '/mcp/messages' && request.method === 'POST') {
345
+ return handleMessage(request, env);
346
+ }
347
+
348
+ // Dev-only endpoints
349
+ if (DEV_MODE) {
350
+ // Playground
351
+ if (url.pathname === '/playground') {
352
+ return new Response(getPlaygroundHTML(), {
353
+ headers: { 'Content-Type': 'text/html' },
354
+ });
355
+ }
356
+
357
+ // API: List tools
358
+ if (url.pathname === '/api/tools') {
359
+ return Response.json({ tools: TOOL_DEFINITIONS });
360
+ }
361
+
362
+ // API: Call tool
363
+ if (url.pathname === '/api/call' && request.method === 'POST') {
364
+ const { tool, args } = await request.json();
365
+ const photon = getPhoton(env);
366
+ try {
367
+ const method = (photon as any)[tool];
368
+ if (typeof method !== 'function') {
369
+ throw new Error(`Unknown tool: ${tool}`);
370
+ }
371
+ const result = await method.call(photon, args || {});
372
+ return Response.json({ success: true, data: result });
373
+ } catch (error: any) {
374
+ return Response.json({ success: false, error: error.message }, { status: 500 });
375
+ }
376
+ }
377
+ }
378
+
379
+ return new Response('Not Found', { status: 404 });
380
+ },
381
+ };
@@ -0,0 +1,9 @@
1
+ name = "__PHOTON_NAME__"
2
+ main = "src/worker.ts"
3
+ compatibility_date = "2024-01-01"
4
+
5
+ # Uncomment to add environment variables
6
+ # [vars]
7
+ # API_KEY = "your-api-key"
8
+
9
+ # For secrets, use: wrangler secret put SECRET_NAME
package/dist/base.d.ts DELETED
@@ -1,58 +0,0 @@
1
- /**
2
- * PhotonMCP Base Class
3
- *
4
- * Optional base class for creating Photon MCPs.
5
- * You don't need to extend this - any class with async methods works!
6
- *
7
- * Usage:
8
- * ```typescript
9
- * export default class Calculator extends PhotonMCP {
10
- * /**
11
- * * Add two numbers together
12
- * * @param a First number
13
- * * @param b Second number
14
- * *\/
15
- * async add(params: { a: number; b: number }) {
16
- * return params.a + params.b;
17
- * }
18
- * }
19
- * ```
20
- *
21
- * Or without extending (plain class):
22
- * ```typescript
23
- * export default class Calculator {
24
- * async add(params: { a: number; b: number }) {
25
- * return params.a + params.b;
26
- * }
27
- * }
28
- * ```
29
- */
30
- /**
31
- * Simple base class for creating Photon MCPs
32
- *
33
- * - Class name = MCP name
34
- * - Public async methods = Tools
35
- * - Return value = Tool result
36
- */
37
- export declare class PhotonMCP {
38
- /**
39
- * Get MCP name from class name
40
- * Converts PascalCase to kebab-case (e.g., MyAwesomeMCP → my-awesome-mcp)
41
- */
42
- static getMCPName(): string;
43
- /**
44
- * Get all tool methods from this class
45
- * Returns all public async methods except lifecycle hooks
46
- */
47
- static getToolMethods(): string[];
48
- /**
49
- * Execute a tool method
50
- */
51
- executeTool(toolName: string, parameters: any): Promise<any>;
52
- /**
53
- * Optional lifecycle hooks
54
- */
55
- onInitialize?(): Promise<void>;
56
- onShutdown?(): Promise<void>;
57
- }
58
- //# sourceMappingURL=base.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB;;;OAGG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM;IAQ3B;;;OAGG;IACH,MAAM,CAAC,cAAc,IAAI,MAAM,EAAE;IA0BjC;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAgBlE;;OAEG;IACG,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAC9B,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;CACnC"}
package/dist/base.js DELETED
@@ -1,92 +0,0 @@
1
- /**
2
- * PhotonMCP Base Class
3
- *
4
- * Optional base class for creating Photon MCPs.
5
- * You don't need to extend this - any class with async methods works!
6
- *
7
- * Usage:
8
- * ```typescript
9
- * export default class Calculator extends PhotonMCP {
10
- * /**
11
- * * Add two numbers together
12
- * * @param a First number
13
- * * @param b Second number
14
- * *\/
15
- * async add(params: { a: number; b: number }) {
16
- * return params.a + params.b;
17
- * }
18
- * }
19
- * ```
20
- *
21
- * Or without extending (plain class):
22
- * ```typescript
23
- * export default class Calculator {
24
- * async add(params: { a: number; b: number }) {
25
- * return params.a + params.b;
26
- * }
27
- * }
28
- * ```
29
- */
30
- /**
31
- * Simple base class for creating Photon MCPs
32
- *
33
- * - Class name = MCP name
34
- * - Public async methods = Tools
35
- * - Return value = Tool result
36
- */
37
- export class PhotonMCP {
38
- /**
39
- * Get MCP name from class name
40
- * Converts PascalCase to kebab-case (e.g., MyAwesomeMCP → my-awesome-mcp)
41
- */
42
- static getMCPName() {
43
- return this.name
44
- .replace(/MCP$/, '') // Remove "MCP" suffix if present
45
- .replace(/([A-Z])/g, '-$1')
46
- .toLowerCase()
47
- .replace(/^-/, ''); // Remove leading dash
48
- }
49
- /**
50
- * Get all tool methods from this class
51
- * Returns all public async methods except lifecycle hooks
52
- */
53
- static getToolMethods() {
54
- const prototype = this.prototype;
55
- const methods = [];
56
- // Get all property names from prototype chain
57
- let current = prototype;
58
- while (current && current !== PhotonMCP.prototype) {
59
- Object.getOwnPropertyNames(current).forEach((name) => {
60
- // Skip constructor, private methods (starting with _), and lifecycle hooks
61
- if (name !== 'constructor' &&
62
- !name.startsWith('_') &&
63
- name !== 'onInitialize' &&
64
- name !== 'onShutdown' &&
65
- typeof prototype[name] === 'function' &&
66
- !methods.includes(name)) {
67
- methods.push(name);
68
- }
69
- });
70
- current = Object.getPrototypeOf(current);
71
- }
72
- return methods;
73
- }
74
- /**
75
- * Execute a tool method
76
- */
77
- async executeTool(toolName, parameters) {
78
- const method = this[toolName];
79
- if (!method || typeof method !== 'function') {
80
- throw new Error(`Tool not found: ${toolName}`);
81
- }
82
- try {
83
- const result = await method.call(this, parameters);
84
- return result;
85
- }
86
- catch (error) {
87
- console.error(`Tool execution failed: ${toolName} - ${error.message}`);
88
- throw error;
89
- }
90
- }
91
- }
92
- //# sourceMappingURL=base.js.map
package/dist/base.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;;GAMG;AACH,MAAM,OAAO,SAAS;IACpB;;;OAGG;IACH,MAAM,CAAC,UAAU;QACf,OAAO,IAAI,CAAC,IAAI;aACb,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,iCAAiC;aACrD,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;aAC1B,WAAW,EAAE;aACb,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB;IAC9C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,cAAc;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,8CAA8C;QAC9C,IAAI,OAAO,GAAG,SAAS,CAAC;QACxB,OAAO,OAAO,IAAI,OAAO,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;YAClD,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACnD,2EAA2E;gBAC3E,IACE,IAAI,KAAK,aAAa;oBACtB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBACrB,IAAI,KAAK,cAAc;oBACvB,IAAI,KAAK,YAAY;oBACrB,OAAQ,SAAiB,CAAC,IAAI,CAAC,KAAK,UAAU;oBAC9C,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EACvB,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,UAAe;QACjD,MAAM,MAAM,GAAI,IAAY,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,0BAA0B,QAAQ,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACvE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CAOF"}