@frontmcp/sdk 0.4.1 → 0.5.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 (558) hide show
  1. package/README.md +30 -18
  2. package/package.json +20 -5
  3. package/src/app/app.registry.d.ts +3 -2
  4. package/src/app/app.registry.js +3 -1
  5. package/src/app/app.registry.js.map +1 -1
  6. package/src/app/instances/app.local.instance.js +2 -2
  7. package/src/app/instances/app.local.instance.js.map +1 -1
  8. package/src/auth/auth.registry.d.ts +34 -2
  9. package/src/auth/auth.registry.js +162 -24
  10. package/src/auth/auth.registry.js.map +1 -1
  11. package/src/auth/auth.utils.js +8 -9
  12. package/src/auth/auth.utils.js.map +1 -1
  13. package/src/auth/authorization/authorization.class.d.ts +125 -0
  14. package/src/auth/authorization/authorization.class.js +224 -0
  15. package/src/auth/authorization/authorization.class.js.map +1 -0
  16. package/src/auth/authorization/authorization.types.d.ts +300 -0
  17. package/src/auth/authorization/authorization.types.js +79 -0
  18. package/src/auth/authorization/authorization.types.js.map +1 -0
  19. package/src/auth/authorization/index.d.ts +5 -0
  20. package/src/auth/authorization/index.js +19 -0
  21. package/src/auth/authorization/index.js.map +1 -0
  22. package/src/auth/authorization/orchestrated.authorization.d.ts +242 -0
  23. package/src/auth/authorization/orchestrated.authorization.js +306 -0
  24. package/src/auth/authorization/orchestrated.authorization.js.map +1 -0
  25. package/src/auth/authorization/public.authorization.d.ts +91 -0
  26. package/src/auth/authorization/public.authorization.js +132 -0
  27. package/src/auth/authorization/public.authorization.js.map +1 -0
  28. package/src/auth/authorization/transparent.authorization.d.ts +130 -0
  29. package/src/auth/authorization/transparent.authorization.js +147 -0
  30. package/src/auth/authorization/transparent.authorization.js.map +1 -0
  31. package/src/auth/consent/consent.types.d.ts +111 -0
  32. package/src/auth/consent/consent.types.js +119 -0
  33. package/src/auth/consent/consent.types.js.map +1 -0
  34. package/src/auth/consent/index.d.ts +1 -0
  35. package/src/auth/consent/index.js +13 -0
  36. package/src/auth/consent/index.js.map +1 -0
  37. package/src/auth/detection/auth-provider-detection.d.ts +84 -0
  38. package/src/auth/detection/auth-provider-detection.js +230 -0
  39. package/src/auth/detection/auth-provider-detection.js.map +1 -0
  40. package/src/auth/detection/index.d.ts +1 -0
  41. package/src/auth/detection/index.js +15 -0
  42. package/src/auth/detection/index.js.map +1 -0
  43. package/src/auth/flows/auth.verify.flow.d.ts +110 -0
  44. package/src/auth/flows/auth.verify.flow.js +379 -0
  45. package/src/auth/flows/auth.verify.flow.js.map +1 -0
  46. package/src/auth/flows/oauth.authorize.flow.d.ts +118 -164
  47. package/src/auth/flows/oauth.authorize.flow.js +701 -33
  48. package/src/auth/flows/oauth.authorize.flow.js.map +1 -1
  49. package/src/auth/flows/oauth.callback.flow.d.ts +117 -0
  50. package/src/auth/flows/oauth.callback.flow.js +357 -0
  51. package/src/auth/flows/oauth.callback.flow.js.map +1 -0
  52. package/src/auth/flows/oauth.register.flow.d.ts +32 -125
  53. package/src/auth/flows/oauth.token.flow.d.ts +52 -154
  54. package/src/auth/flows/oauth.token.flow.js +193 -55
  55. package/src/auth/flows/oauth.token.flow.js.map +1 -1
  56. package/src/auth/flows/session.verify.flow.d.ts +66 -321
  57. package/src/auth/flows/session.verify.flow.js +107 -18
  58. package/src/auth/flows/session.verify.flow.js.map +1 -1
  59. package/src/auth/flows/well-known.jwks.flow.d.ts +34 -205
  60. package/src/auth/flows/well-known.jwks.flow.js +15 -8
  61. package/src/auth/flows/well-known.jwks.flow.js.map +1 -1
  62. package/src/auth/flows/well-known.oauth-authorization-server.flow.d.ts +48 -223
  63. package/src/auth/flows/well-known.oauth-authorization-server.flow.js +2 -3
  64. package/src/auth/flows/well-known.oauth-authorization-server.flow.js.map +1 -1
  65. package/src/auth/flows/well-known.prm.flow.d.ts +19 -120
  66. package/src/auth/flows/well-known.prm.flow.js +3 -4
  67. package/src/auth/flows/well-known.prm.flow.js.map +1 -1
  68. package/src/auth/instances/instance.local-primary-auth.d.ts +91 -4
  69. package/src/auth/instances/instance.local-primary-auth.js +236 -6
  70. package/src/auth/instances/instance.local-primary-auth.js.map +1 -1
  71. package/src/auth/instances/instance.remote-primary-auth.d.ts +4 -3
  72. package/src/auth/instances/instance.remote-primary-auth.js +2 -2
  73. package/src/auth/instances/instance.remote-primary-auth.js.map +1 -1
  74. package/src/auth/session/authorization-vault.d.ts +611 -0
  75. package/src/auth/session/authorization-vault.js +817 -0
  76. package/src/auth/session/authorization-vault.js.map +1 -0
  77. package/src/auth/session/authorization.store.d.ts +301 -0
  78. package/src/auth/session/authorization.store.js +323 -0
  79. package/src/auth/session/authorization.store.js.map +1 -0
  80. package/src/auth/session/encrypted-authorization-vault.d.ts +181 -0
  81. package/src/auth/session/encrypted-authorization-vault.js +493 -0
  82. package/src/auth/session/encrypted-authorization-vault.js.map +1 -0
  83. package/src/auth/session/index.d.ts +4 -4
  84. package/src/auth/session/index.js +11 -7
  85. package/src/auth/session/index.js.map +1 -1
  86. package/src/auth/session/session.schema.d.ts +1 -1
  87. package/src/auth/session/session.service.d.ts +1 -1
  88. package/src/auth/session/transport-session.manager.d.ts +101 -0
  89. package/src/auth/session/transport-session.manager.js +300 -0
  90. package/src/auth/session/transport-session.manager.js.map +1 -0
  91. package/src/auth/session/transport-session.types.d.ts +457 -0
  92. package/src/auth/session/transport-session.types.js +110 -0
  93. package/src/auth/session/transport-session.types.js.map +1 -0
  94. package/src/auth/session/utils/session-id.utils.d.ts +14 -2
  95. package/src/auth/session/utils/session-id.utils.js +68 -19
  96. package/src/auth/session/utils/session-id.utils.js.map +1 -1
  97. package/src/auth/session/vault-encryption.d.ts +189 -0
  98. package/src/auth/session/vault-encryption.js +263 -0
  99. package/src/auth/session/vault-encryption.js.map +1 -0
  100. package/src/auth/ui/base-layout.d.ts +188 -0
  101. package/src/auth/ui/base-layout.js +292 -0
  102. package/src/auth/ui/base-layout.js.map +1 -0
  103. package/src/auth/ui/htmx-templates.d.ts +135 -0
  104. package/src/auth/ui/htmx-templates.js +433 -0
  105. package/src/auth/ui/htmx-templates.js.map +1 -0
  106. package/src/auth/ui/index.d.ts +11 -0
  107. package/src/auth/ui/index.js +35 -0
  108. package/src/auth/ui/index.js.map +1 -0
  109. package/src/auth/utils/audience.validator.d.ts +129 -0
  110. package/src/auth/utils/audience.validator.js +196 -0
  111. package/src/auth/utils/audience.validator.js.map +1 -0
  112. package/src/auth/utils/index.d.ts +2 -0
  113. package/src/auth/utils/index.js +7 -0
  114. package/src/auth/utils/index.js.map +1 -0
  115. package/src/auth/utils/www-authenticate.utils.d.ts +97 -0
  116. package/src/auth/utils/www-authenticate.utils.js +183 -0
  117. package/src/auth/utils/www-authenticate.utils.js.map +1 -0
  118. package/src/common/common.schema.d.ts +2 -16
  119. package/src/common/constants.d.ts +3 -0
  120. package/src/common/constants.js +6 -1
  121. package/src/common/constants.js.map +1 -1
  122. package/src/common/decorators/decorator-utils.d.ts +131 -0
  123. package/src/common/decorators/decorator-utils.js +195 -0
  124. package/src/common/decorators/decorator-utils.js.map +1 -0
  125. package/src/common/decorators/front-mcp.decorator.js +3 -2
  126. package/src/common/decorators/front-mcp.decorator.js.map +1 -1
  127. package/src/common/decorators/hook.decorator.d.ts +58 -2
  128. package/src/common/decorators/hook.decorator.js +127 -17
  129. package/src/common/decorators/hook.decorator.js.map +1 -1
  130. package/src/common/decorators/plugin.decorator.d.ts +1 -1
  131. package/src/common/decorators/plugin.decorator.js +11 -10
  132. package/src/common/decorators/plugin.decorator.js.map +1 -1
  133. package/src/common/decorators/resource.decorator.d.ts +32 -3
  134. package/src/common/decorators/resource.decorator.js +46 -4
  135. package/src/common/decorators/resource.decorator.js.map +1 -1
  136. package/src/common/decorators/tool.decorator.d.ts +54 -5
  137. package/src/common/decorators/tool.decorator.js.map +1 -1
  138. package/src/common/dynamic/dynamic.plugin.d.ts +22 -11
  139. package/src/common/dynamic/dynamic.plugin.js +7 -1
  140. package/src/common/dynamic/dynamic.plugin.js.map +1 -1
  141. package/src/common/entries/prompt.entry.d.ts +46 -2
  142. package/src/common/entries/prompt.entry.js +10 -0
  143. package/src/common/entries/prompt.entry.js.map +1 -1
  144. package/src/common/entries/resource.entry.d.ts +69 -6
  145. package/src/common/entries/resource.entry.js +27 -3
  146. package/src/common/entries/resource.entry.js.map +1 -1
  147. package/src/common/entries/scope.entry.d.ts +5 -1
  148. package/src/common/entries/scope.entry.js +3 -3
  149. package/src/common/entries/scope.entry.js.map +1 -1
  150. package/src/common/flow/flow.utils.d.ts +56 -0
  151. package/src/common/flow/flow.utils.js +96 -0
  152. package/src/common/flow/flow.utils.js.map +1 -0
  153. package/src/common/index.d.ts +2 -2
  154. package/src/common/index.js +2 -2
  155. package/src/common/index.js.map +1 -1
  156. package/src/common/interfaces/execution-context.interface.d.ts +59 -0
  157. package/src/common/interfaces/execution-context.interface.js +81 -0
  158. package/src/common/interfaces/execution-context.interface.js.map +1 -0
  159. package/src/common/interfaces/flow.interface.d.ts +1 -1
  160. package/src/common/interfaces/flow.interface.js.map +1 -1
  161. package/src/common/interfaces/index.d.ts +1 -0
  162. package/src/common/interfaces/index.js +1 -0
  163. package/src/common/interfaces/index.js.map +1 -1
  164. package/src/common/interfaces/internal/primary-auth-provider.interface.d.ts +17 -2
  165. package/src/common/interfaces/internal/primary-auth-provider.interface.js +52 -4
  166. package/src/common/interfaces/internal/primary-auth-provider.interface.js.map +1 -1
  167. package/src/common/interfaces/internal/registry.interface.d.ts +16 -2
  168. package/src/common/interfaces/internal/registry.interface.js.map +1 -1
  169. package/src/common/interfaces/plugin.interface.js.map +1 -1
  170. package/src/common/interfaces/prompt.interface.d.ts +53 -4
  171. package/src/common/interfaces/prompt.interface.js +78 -0
  172. package/src/common/interfaces/prompt.interface.js.map +1 -1
  173. package/src/common/interfaces/resource.interface.d.ts +47 -17
  174. package/src/common/interfaces/resource.interface.js +53 -0
  175. package/src/common/interfaces/resource.interface.js.map +1 -1
  176. package/src/common/interfaces/tool.interface.d.ts +39 -22
  177. package/src/common/interfaces/tool.interface.js +61 -34
  178. package/src/common/interfaces/tool.interface.js.map +1 -1
  179. package/src/common/metadata/adapter.metadata.d.ts +1 -9
  180. package/src/common/metadata/app.metadata.d.ts +425 -730
  181. package/src/common/metadata/auth-provider.metadata.d.ts +2 -12
  182. package/src/common/metadata/flow.metadata.d.ts +10 -25
  183. package/src/common/metadata/front-mcp.metadata.d.ts +602 -1023
  184. package/src/common/metadata/front-mcp.metadata.js +6 -4
  185. package/src/common/metadata/front-mcp.metadata.js.map +1 -1
  186. package/src/common/metadata/hook.metadata.d.ts +1 -1
  187. package/src/common/metadata/hook.metadata.js.map +1 -1
  188. package/src/common/metadata/index.d.ts +1 -0
  189. package/src/common/metadata/index.js +1 -0
  190. package/src/common/metadata/index.js.map +1 -1
  191. package/src/common/metadata/logger.metadata.d.ts +1 -9
  192. package/src/common/metadata/plugin.metadata.d.ts +8 -30
  193. package/src/common/metadata/prompt.metadata.d.ts +4 -161
  194. package/src/common/metadata/provider.metadata.d.ts +2 -12
  195. package/src/common/metadata/resource.metadata.d.ts +6 -98
  196. package/src/common/metadata/resource.metadata.js +15 -6
  197. package/src/common/metadata/resource.metadata.js.map +1 -1
  198. package/src/common/metadata/tool-ui.metadata.d.ts +10 -0
  199. package/src/common/metadata/tool-ui.metadata.js +12 -0
  200. package/src/common/metadata/tool-ui.metadata.js.map +1 -0
  201. package/src/common/metadata/tool.metadata.d.ts +78 -199
  202. package/src/common/metadata/tool.metadata.js +11 -14
  203. package/src/common/metadata/tool.metadata.js.map +1 -1
  204. package/src/common/providers/base-config.provider.d.ts +84 -0
  205. package/src/common/providers/base-config.provider.js +128 -0
  206. package/src/common/providers/base-config.provider.js.map +1 -0
  207. package/src/common/records/plugin.record.d.ts +5 -6
  208. package/src/common/records/plugin.record.js.map +1 -1
  209. package/src/common/records/prompt.record.js.map +1 -1
  210. package/src/common/records/resource.record.d.ts +17 -1
  211. package/src/common/records/resource.record.js +12 -6
  212. package/src/common/records/resource.record.js.map +1 -1
  213. package/src/common/records/tool.record.js.map +1 -1
  214. package/src/common/schemas/annotated-class.schema.d.ts +9 -9
  215. package/src/common/schemas/annotated-class.schema.js +92 -27
  216. package/src/common/schemas/annotated-class.schema.js.map +1 -1
  217. package/src/common/schemas/http-input.schema.d.ts +6 -30
  218. package/src/common/schemas/http-output.schema.d.ts +326 -1630
  219. package/src/common/schemas/http-output.schema.js +39 -1
  220. package/src/common/schemas/http-output.schema.js.map +1 -1
  221. package/src/common/tokens/front-mcp.tokens.js +4 -1
  222. package/src/common/tokens/front-mcp.tokens.js.map +1 -1
  223. package/src/common/tokens/resource.tokens.d.ts +2 -0
  224. package/src/common/tokens/resource.tokens.js +4 -1
  225. package/src/common/tokens/resource.tokens.js.map +1 -1
  226. package/src/common/tokens/tool.tokens.d.ts +2 -0
  227. package/src/common/tokens/tool.tokens.js +2 -0
  228. package/src/common/tokens/tool.tokens.js.map +1 -1
  229. package/src/common/types/auth/jwt.types.d.ts +5 -31
  230. package/src/common/types/auth/session.types.d.ts +97 -192
  231. package/src/common/types/auth/session.types.js +24 -11
  232. package/src/common/types/auth/session.types.js.map +1 -1
  233. package/src/common/types/options/auth.options.d.ts +1013 -490
  234. package/src/common/types/options/auth.options.js +554 -36
  235. package/src/common/types/options/auth.options.js.map +1 -1
  236. package/src/common/types/options/http.options.d.ts +1 -9
  237. package/src/common/types/options/logging.options.d.ts +7 -13
  238. package/src/common/types/options/logging.options.js +4 -0
  239. package/src/common/types/options/logging.options.js.map +1 -1
  240. package/src/common/types/options/server-info.options.d.ts +3 -31
  241. package/src/common/types/options/session.options.d.ts +90 -10
  242. package/src/common/types/options/session.options.js +26 -3
  243. package/src/common/types/options/session.options.js.map +1 -1
  244. package/src/common/utils/decide-request-intent.utils.d.ts +8 -46
  245. package/src/common/utils/decide-request-intent.utils.js +88 -23
  246. package/src/common/utils/decide-request-intent.utils.js.map +1 -1
  247. package/src/completion/flows/complete.flow.d.ts +74 -0
  248. package/src/completion/flows/complete.flow.js +199 -0
  249. package/src/completion/flows/complete.flow.js.map +1 -0
  250. package/src/errors/authorization-required.error.d.ts +189 -0
  251. package/src/errors/authorization-required.error.js +274 -0
  252. package/src/errors/authorization-required.error.js.map +1 -0
  253. package/src/errors/index.d.ts +2 -1
  254. package/src/errors/index.js +17 -1
  255. package/src/errors/index.js.map +1 -1
  256. package/src/errors/mcp.error.d.ts +101 -1
  257. package/src/errors/mcp.error.js +147 -2
  258. package/src/errors/mcp.error.js.map +1 -1
  259. package/src/flows/flow.instance.js +4 -3
  260. package/src/flows/flow.instance.js.map +1 -1
  261. package/src/flows/flow.registry.js.map +1 -1
  262. package/src/flows/flow.stages.js +14 -11
  263. package/src/flows/flow.stages.js.map +1 -1
  264. package/src/front-mcp/front-mcp.providers.d.ts +464 -102
  265. package/src/front-mcp/front-mcp.providers.js +3 -5
  266. package/src/front-mcp/front-mcp.providers.js.map +1 -1
  267. package/src/hooks/hook.instance.d.ts +1 -1
  268. package/src/hooks/hook.instance.js +5 -2
  269. package/src/hooks/hook.instance.js.map +1 -1
  270. package/src/hooks/hook.registry.js +7 -5
  271. package/src/hooks/hook.registry.js.map +1 -1
  272. package/src/index.d.ts +28 -9
  273. package/src/index.js +5 -1
  274. package/src/index.js.map +1 -1
  275. package/src/logger/instances/instance.logger.js +3 -2
  276. package/src/logger/instances/instance.logger.js.map +1 -1
  277. package/src/logger/logger.registry.js +7 -2
  278. package/src/logger/logger.registry.js.map +1 -1
  279. package/src/logging/flows/set-level.flow.d.ts +62 -0
  280. package/src/logging/flows/set-level.flow.js +108 -0
  281. package/src/logging/flows/set-level.flow.js.map +1 -0
  282. package/src/mcp-apps/csp.d.ts +111 -0
  283. package/src/mcp-apps/csp.js +267 -0
  284. package/src/mcp-apps/csp.js.map +1 -0
  285. package/src/mcp-apps/index.d.ts +23 -0
  286. package/src/mcp-apps/index.js +91 -0
  287. package/src/mcp-apps/index.js.map +1 -0
  288. package/src/mcp-apps/schemas.d.ts +403 -0
  289. package/src/mcp-apps/schemas.js +345 -0
  290. package/src/mcp-apps/schemas.js.map +1 -0
  291. package/src/mcp-apps/template.d.ts +94 -0
  292. package/src/mcp-apps/template.js +419 -0
  293. package/src/mcp-apps/template.js.map +1 -0
  294. package/src/mcp-apps/types.d.ts +323 -0
  295. package/src/mcp-apps/types.js +59 -0
  296. package/src/mcp-apps/types.js.map +1 -0
  297. package/src/notification/index.d.ts +1 -0
  298. package/src/notification/index.js +13 -0
  299. package/src/notification/index.js.map +1 -0
  300. package/src/notification/notification.service.d.ts +378 -0
  301. package/src/notification/notification.service.js +727 -0
  302. package/src/notification/notification.service.js.map +1 -0
  303. package/src/plugin/plugin.registry.js +12 -9
  304. package/src/plugin/plugin.registry.js.map +1 -1
  305. package/src/prompt/flows/get-prompt.flow.d.ts +153 -0
  306. package/src/prompt/flows/get-prompt.flow.js +214 -0
  307. package/src/prompt/flows/get-prompt.flow.js.map +1 -0
  308. package/src/prompt/flows/prompts-list.flow.d.ts +67 -0
  309. package/src/prompt/flows/prompts-list.flow.js +176 -0
  310. package/src/prompt/flows/prompts-list.flow.js.map +1 -0
  311. package/src/prompt/index.d.ts +7 -0
  312. package/src/prompt/index.js +17 -0
  313. package/src/prompt/index.js.map +1 -0
  314. package/src/prompt/prompt.events.d.ts +17 -0
  315. package/src/prompt/prompt.events.js +25 -0
  316. package/src/prompt/prompt.events.js.map +1 -0
  317. package/src/prompt/prompt.instance.d.ts +30 -0
  318. package/src/prompt/prompt.instance.js +120 -0
  319. package/src/prompt/prompt.instance.js.map +1 -0
  320. package/src/prompt/prompt.registry.d.ts +79 -12
  321. package/src/prompt/prompt.registry.js +360 -15
  322. package/src/prompt/prompt.registry.js.map +1 -1
  323. package/src/prompt/prompt.types.d.ts +26 -0
  324. package/src/prompt/prompt.types.js +11 -0
  325. package/src/prompt/prompt.types.js.map +1 -0
  326. package/src/prompt/prompt.utils.d.ts +26 -0
  327. package/src/prompt/prompt.utils.js +136 -0
  328. package/src/prompt/prompt.utils.js.map +1 -0
  329. package/src/provider/provider.registry.d.ts +12 -5
  330. package/src/provider/provider.registry.js +30 -138
  331. package/src/provider/provider.registry.js.map +1 -1
  332. package/src/regsitry/registry.base.d.ts +1 -1
  333. package/src/regsitry/registry.base.js.map +1 -1
  334. package/src/resource/flows/read-resource.flow.d.ts +91 -0
  335. package/src/resource/flows/read-resource.flow.js +270 -0
  336. package/src/resource/flows/read-resource.flow.js.map +1 -0
  337. package/src/resource/flows/resource-templates-list.flow.d.ts +64 -0
  338. package/src/resource/flows/resource-templates-list.flow.js +191 -0
  339. package/src/resource/flows/resource-templates-list.flow.js.map +1 -0
  340. package/src/resource/flows/resources-list.flow.d.ts +64 -0
  341. package/src/resource/flows/resources-list.flow.js +196 -0
  342. package/src/resource/flows/resources-list.flow.js.map +1 -0
  343. package/src/resource/flows/subscribe-resource.flow.d.ts +45 -0
  344. package/src/resource/flows/subscribe-resource.flow.js +123 -0
  345. package/src/resource/flows/subscribe-resource.flow.js.map +1 -0
  346. package/src/resource/flows/unsubscribe-resource.flow.d.ts +44 -0
  347. package/src/resource/flows/unsubscribe-resource.flow.js +107 -0
  348. package/src/resource/flows/unsubscribe-resource.flow.js.map +1 -0
  349. package/src/resource/index.d.ts +8 -0
  350. package/src/resource/index.js +20 -0
  351. package/src/resource/index.js.map +1 -0
  352. package/src/resource/resource.events.d.ts +24 -0
  353. package/src/resource/resource.events.js +17 -0
  354. package/src/resource/resource.events.js.map +1 -0
  355. package/src/resource/resource.instance.d.ts +35 -0
  356. package/src/resource/resource.instance.js +163 -0
  357. package/src/resource/resource.instance.js.map +1 -0
  358. package/src/resource/resource.registry.d.ts +106 -12
  359. package/src/resource/resource.registry.js +449 -13
  360. package/src/resource/resource.registry.js.map +1 -1
  361. package/src/resource/resource.types.d.ts +35 -0
  362. package/src/resource/resource.types.js +11 -0
  363. package/src/resource/resource.types.js.map +1 -0
  364. package/src/resource/resource.utils.d.ts +30 -0
  365. package/src/resource/resource.utils.js +151 -0
  366. package/src/resource/resource.utils.js.map +1 -0
  367. package/src/scope/flows/http.request.flow.d.ts +48 -330
  368. package/src/scope/flows/http.request.flow.js +306 -78
  369. package/src/scope/flows/http.request.flow.js.map +1 -1
  370. package/src/scope/scope.instance.d.ts +12 -0
  371. package/src/scope/scope.instance.js +145 -15
  372. package/src/scope/scope.instance.js.map +1 -1
  373. package/src/tool/flows/call-tool.flow.d.ts +64 -1110
  374. package/src/tool/flows/call-tool.flow.js +303 -15
  375. package/src/tool/flows/call-tool.flow.js.map +1 -1
  376. package/src/tool/flows/tools-list.flow.d.ts +32 -473
  377. package/src/tool/flows/tools-list.flow.js +121 -40
  378. package/src/tool/flows/tools-list.flow.js.map +1 -1
  379. package/src/tool/tool.events.d.ts +8 -1
  380. package/src/tool/tool.events.js.map +1 -1
  381. package/src/tool/tool.instance.d.ts +3 -1
  382. package/src/tool/tool.instance.js +17 -3
  383. package/src/tool/tool.instance.js.map +1 -1
  384. package/src/tool/tool.registry.d.ts +7 -1
  385. package/src/tool/tool.registry.js +26 -10
  386. package/src/tool/tool.registry.js.map +1 -1
  387. package/src/tool/tool.types.d.ts +4 -4
  388. package/src/tool/tool.types.js.map +1 -1
  389. package/src/tool/tool.utils.d.ts +3 -12
  390. package/src/tool/tool.utils.js +39 -193
  391. package/src/tool/tool.utils.js.map +1 -1
  392. package/src/tool/ui/index.d.ts +22 -0
  393. package/src/tool/ui/index.js +63 -0
  394. package/src/tool/ui/index.js.map +1 -0
  395. package/src/tool/ui/platform-adapters.d.ts +10 -0
  396. package/src/tool/ui/platform-adapters.js +18 -0
  397. package/src/tool/ui/platform-adapters.js.map +1 -0
  398. package/src/tool/ui/template-helpers.d.ts +46 -0
  399. package/src/tool/ui/template-helpers.js +112 -0
  400. package/src/tool/ui/template-helpers.js.map +1 -0
  401. package/src/tool/ui/ui-resource-template.d.ts +34 -0
  402. package/src/tool/ui/ui-resource-template.js +64 -0
  403. package/src/tool/ui/ui-resource-template.js.map +1 -0
  404. package/src/tool/ui/ui-resource.handler.d.ts +74 -0
  405. package/src/tool/ui/ui-resource.handler.js +129 -0
  406. package/src/tool/ui/ui-resource.handler.js.map +1 -0
  407. package/src/transport/adapters/transport.local.adapter.d.ts +2 -2
  408. package/src/transport/adapters/transport.local.adapter.js +28 -7
  409. package/src/transport/adapters/transport.local.adapter.js.map +1 -1
  410. package/src/transport/adapters/transport.sse.adapter.d.ts +2 -2
  411. package/src/transport/adapters/transport.sse.adapter.js +4 -3
  412. package/src/transport/adapters/transport.sse.adapter.js.map +1 -1
  413. package/src/transport/adapters/transport.streamable-http.adapter.d.ts +10 -3
  414. package/src/transport/adapters/transport.streamable-http.adapter.js +54 -8
  415. package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
  416. package/src/transport/flows/handle.sse.flow.d.ts +29 -63
  417. package/src/transport/flows/handle.sse.flow.js +78 -10
  418. package/src/transport/flows/handle.sse.flow.js.map +1 -1
  419. package/src/transport/flows/handle.stateless-http.flow.d.ts +29 -0
  420. package/src/transport/flows/handle.stateless-http.flow.js +102 -0
  421. package/src/transport/flows/handle.stateless-http.flow.js.map +1 -0
  422. package/src/transport/flows/handle.streamable-http.flow.d.ts +32 -64
  423. package/src/transport/flows/handle.streamable-http.flow.js +158 -26
  424. package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
  425. package/src/transport/legacy/legacy.sse.tranporter.d.ts +9 -0
  426. package/src/transport/legacy/legacy.sse.tranporter.js +17 -2
  427. package/src/transport/legacy/legacy.sse.tranporter.js.map +1 -1
  428. package/src/transport/mcp-handlers/call-tool-request.handler.js +27 -1
  429. package/src/transport/mcp-handlers/call-tool-request.handler.js.map +1 -1
  430. package/src/transport/mcp-handlers/complete-request.handler.d.ts +69 -0
  431. package/src/transport/mcp-handlers/complete-request.handler.js +11 -0
  432. package/src/transport/mcp-handlers/complete-request.handler.js.map +1 -0
  433. package/src/transport/mcp-handlers/get-prompt-request.handler.d.ts +87 -0
  434. package/src/transport/mcp-handlers/get-prompt-request.handler.js +11 -0
  435. package/src/transport/mcp-handlers/get-prompt-request.handler.js.map +1 -0
  436. package/src/transport/mcp-handlers/index.d.ts +517 -208
  437. package/src/transport/mcp-handlers/index.js +39 -2
  438. package/src/transport/mcp-handlers/index.js.map +1 -1
  439. package/src/transport/mcp-handlers/initialize-request.handler.d.ts +1 -1
  440. package/src/transport/mcp-handlers/initialize-request.handler.js +73 -7
  441. package/src/transport/mcp-handlers/initialize-request.handler.js.map +1 -1
  442. package/src/transport/mcp-handlers/list-prompts-request.handler.d.ts +54 -0
  443. package/src/transport/mcp-handlers/list-prompts-request.handler.js +11 -0
  444. package/src/transport/mcp-handlers/list-prompts-request.handler.js.map +1 -0
  445. package/src/transport/mcp-handlers/list-resource-templates-request.handler.d.ts +51 -0
  446. package/src/transport/mcp-handlers/list-resource-templates-request.handler.js +12 -0
  447. package/src/transport/mcp-handlers/list-resource-templates-request.handler.js.map +1 -0
  448. package/src/transport/mcp-handlers/list-resources-request.handler.d.ts +51 -0
  449. package/src/transport/mcp-handlers/list-resources-request.handler.js +12 -0
  450. package/src/transport/mcp-handlers/list-resources-request.handler.js.map +1 -0
  451. package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +19 -146
  452. package/src/transport/mcp-handlers/logging-set-level-request.handler.d.ts +46 -0
  453. package/src/transport/mcp-handlers/logging-set-level-request.handler.js +34 -0
  454. package/src/transport/mcp-handlers/logging-set-level-request.handler.js.map +1 -0
  455. package/src/transport/mcp-handlers/mcp-handlers.types.d.ts +3 -7
  456. package/src/transport/mcp-handlers/mcp-handlers.types.js.map +1 -1
  457. package/src/transport/mcp-handlers/read-resource-request.handler.d.ts +46 -0
  458. package/src/transport/mcp-handlers/read-resource-request.handler.js +12 -0
  459. package/src/transport/mcp-handlers/read-resource-request.handler.js.map +1 -0
  460. package/src/transport/mcp-handlers/roots-list-changed-notification.handler.d.ts +11 -0
  461. package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js +26 -0
  462. package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js.map +1 -0
  463. package/src/transport/mcp-handlers/subscribe-request.handler.d.ts +37 -0
  464. package/src/transport/mcp-handlers/subscribe-request.handler.js +34 -0
  465. package/src/transport/mcp-handlers/subscribe-request.handler.js.map +1 -0
  466. package/src/transport/mcp-handlers/unsubscribe-request.handler.d.ts +37 -0
  467. package/src/transport/mcp-handlers/unsubscribe-request.handler.js +34 -0
  468. package/src/transport/mcp-handlers/unsubscribe-request.handler.js.map +1 -0
  469. package/src/transport/transport.local.js +7 -2
  470. package/src/transport/transport.local.js.map +1 -1
  471. package/src/transport/transport.registry.d.ts +30 -0
  472. package/src/transport/transport.registry.js +84 -1
  473. package/src/transport/transport.registry.js.map +1 -1
  474. package/src/transport/transport.types.d.ts +3 -3
  475. package/src/transport/transport.types.js.map +1 -1
  476. package/src/utils/content.utils.d.ts +48 -0
  477. package/src/utils/content.utils.js +194 -0
  478. package/src/utils/content.utils.js.map +1 -0
  479. package/src/utils/index.d.ts +8 -0
  480. package/src/utils/index.js +55 -0
  481. package/src/utils/index.js.map +1 -0
  482. package/src/utils/lineage.utils.d.ts +40 -0
  483. package/src/utils/lineage.utils.js +82 -0
  484. package/src/utils/lineage.utils.js.map +1 -0
  485. package/src/utils/naming.utils.d.ts +46 -0
  486. package/src/utils/naming.utils.js +136 -0
  487. package/src/utils/naming.utils.js.map +1 -0
  488. package/src/utils/types.utils.d.ts +2 -2
  489. package/src/utils/types.utils.js.map +1 -1
  490. package/src/utils/uri-template.utils.d.ts +57 -0
  491. package/src/utils/uri-template.utils.js +113 -0
  492. package/src/utils/uri-template.utils.js.map +1 -0
  493. package/src/utils/uri-validation.utils.d.ts +40 -0
  494. package/src/utils/uri-validation.utils.js +76 -0
  495. package/src/utils/uri-validation.utils.js.map +1 -0
  496. package/src/__test-utils__/fixtures/hook.fixtures.d.ts +0 -46
  497. package/src/__test-utils__/fixtures/hook.fixtures.js +0 -114
  498. package/src/__test-utils__/fixtures/hook.fixtures.js.map +0 -1
  499. package/src/__test-utils__/fixtures/index.d.ts +0 -7
  500. package/src/__test-utils__/fixtures/index.js +0 -11
  501. package/src/__test-utils__/fixtures/index.js.map +0 -1
  502. package/src/__test-utils__/fixtures/plugin.fixtures.d.ts +0 -46
  503. package/src/__test-utils__/fixtures/plugin.fixtures.js +0 -127
  504. package/src/__test-utils__/fixtures/plugin.fixtures.js.map +0 -1
  505. package/src/__test-utils__/fixtures/provider.fixtures.d.ts +0 -69
  506. package/src/__test-utils__/fixtures/provider.fixtures.js +0 -131
  507. package/src/__test-utils__/fixtures/provider.fixtures.js.map +0 -1
  508. package/src/__test-utils__/fixtures/scope.fixtures.d.ts +0 -14
  509. package/src/__test-utils__/fixtures/scope.fixtures.js +0 -59
  510. package/src/__test-utils__/fixtures/scope.fixtures.js.map +0 -1
  511. package/src/__test-utils__/fixtures/tool.fixtures.d.ts +0 -36
  512. package/src/__test-utils__/fixtures/tool.fixtures.js +0 -91
  513. package/src/__test-utils__/fixtures/tool.fixtures.js.map +0 -1
  514. package/src/__test-utils__/helpers/assertion.helpers.d.ts +0 -45
  515. package/src/__test-utils__/helpers/assertion.helpers.js +0 -153
  516. package/src/__test-utils__/helpers/assertion.helpers.js.map +0 -1
  517. package/src/__test-utils__/helpers/async.helpers.d.ts +0 -48
  518. package/src/__test-utils__/helpers/async.helpers.js +0 -112
  519. package/src/__test-utils__/helpers/async.helpers.js.map +0 -1
  520. package/src/__test-utils__/helpers/index.d.ts +0 -6
  521. package/src/__test-utils__/helpers/index.js +0 -10
  522. package/src/__test-utils__/helpers/index.js.map +0 -1
  523. package/src/__test-utils__/helpers/setup.helpers.d.ts +0 -54
  524. package/src/__test-utils__/helpers/setup.helpers.js +0 -106
  525. package/src/__test-utils__/helpers/setup.helpers.js.map +0 -1
  526. package/src/__test-utils__/index.d.ts +0 -9
  527. package/src/__test-utils__/index.js +0 -14
  528. package/src/__test-utils__/index.js.map +0 -1
  529. package/src/__test-utils__/mocks/flow-instance.mock.d.ts +0 -50
  530. package/src/__test-utils__/mocks/flow-instance.mock.js +0 -72
  531. package/src/__test-utils__/mocks/flow-instance.mock.js.map +0 -1
  532. package/src/__test-utils__/mocks/hook-registry.mock.d.ts +0 -25
  533. package/src/__test-utils__/mocks/hook-registry.mock.js +0 -65
  534. package/src/__test-utils__/mocks/hook-registry.mock.js.map +0 -1
  535. package/src/__test-utils__/mocks/index.d.ts +0 -8
  536. package/src/__test-utils__/mocks/index.js +0 -12
  537. package/src/__test-utils__/mocks/index.js.map +0 -1
  538. package/src/__test-utils__/mocks/plugin-registry.mock.d.ts +0 -43
  539. package/src/__test-utils__/mocks/plugin-registry.mock.js +0 -70
  540. package/src/__test-utils__/mocks/plugin-registry.mock.js.map +0 -1
  541. package/src/__test-utils__/mocks/provider-registry.mock.d.ts +0 -39
  542. package/src/__test-utils__/mocks/provider-registry.mock.js +0 -72
  543. package/src/__test-utils__/mocks/provider-registry.mock.js.map +0 -1
  544. package/src/__test-utils__/mocks/tool-registry.mock.d.ts +0 -43
  545. package/src/__test-utils__/mocks/tool-registry.mock.js +0 -79
  546. package/src/__test-utils__/mocks/tool-registry.mock.js.map +0 -1
  547. package/src/auth/path.utils.d.ts +0 -20
  548. package/src/auth/path.utils.js +0 -71
  549. package/src/auth/path.utils.js.map +0 -1
  550. package/src/common/decorators-old/async-with.decorator.d.ts +0 -10
  551. package/src/common/decorators-old/async-with.decorator.js +0 -24
  552. package/src/common/decorators-old/async-with.decorator.js.map +0 -1
  553. package/src/common/decorators-old/auth-hook.decorator.d.ts +0 -14
  554. package/src/common/decorators-old/auth-hook.decorator.js +0 -27
  555. package/src/common/decorators-old/auth-hook.decorator.js.map +0 -1
  556. package/src/common/decorators-old/session-hook.decorator.d.ts +0 -14
  557. package/src/common/decorators-old/session-hook.decorator.js +0 -27
  558. package/src/common/decorators-old/session-hook.decorator.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tool.utils.js","sourceRoot":"","sources":["../../../src/tool/tool.utils.ts"],"names":[],"mappings":"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","sourcesContent":["// file: libs/sdk/src/tool/tool.utils.ts\nimport {\n ToolMetadata,\n FrontMcpToolTokens,\n ToolType,\n Token,\n ToolRecord,\n ToolKind,\n EntryLineage,\n Type,\n ToolContext,\n extendedToolMetadata,\n ParsedToolResult,\n} from '../common';\nimport { depsOfClass, depsOfFunc, isClass } from '../utils/token.utils';\nimport { getMetadata } from '../utils/metadata.utils';\nimport { NameCase } from './tool.types';\nimport {\n AudioContent,\n ContentBlock,\n EmbeddedResource,\n ImageContent,\n ResourceLink,\n TextContent,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { z, ZodBigInt, ZodBoolean, ZodDate, ZodNumber, ZodString } from 'zod';\n\nexport function collectToolMetadata(cls: ToolType): ToolMetadata {\n const extended = getMetadata(extendedToolMetadata, cls);\n const seed = (extended ? { ...extended } : {}) as ToolMetadata;\n return Object.entries(FrontMcpToolTokens).reduce((metadata, [key, token]) => {\n const value = getMetadata(token, cls);\n if (value) {\n return Object.assign(metadata, {\n [key]: value,\n });\n } else {\n return metadata;\n }\n }, seed);\n}\n\nexport function normalizeTool(item: any): ToolRecord {\n if (\n item &&\n typeof item === 'function' &&\n item[FrontMcpToolTokens.type] === 'function-tool' &&\n item[FrontMcpToolTokens.metadata]\n ) {\n return {\n kind: ToolKind.FUNCTION,\n provide: item(),\n metadata: item[FrontMcpToolTokens.metadata] as ToolMetadata,\n };\n }\n\n if (isClass(item)) {\n // read McpToolMetadata from class\n const metadata = collectToolMetadata(item);\n return { kind: ToolKind.CLASS_TOKEN, provide: item as Type<ToolContext>, metadata };\n }\n const name = (item as any)?.name ?? String(item);\n throw new Error(`Invalid adapter '${name}'. Expected a class or a adapter object.`);\n}\n\n/**\n * For graph/cycle detection. Returns dependency tokens that should be graphed.\n * - FUNCTION: get function params without the first argument (the tool input)\n * - CLASS_TOKEN: deps come from the class constructor\n */\nexport function toolDiscoveryDeps(rec: ToolRecord): Token[] {\n switch (rec.kind) {\n case ToolKind.FUNCTION: {\n return depsOfFunc(rec.provide, 'discovery');\n }\n case ToolKind.CLASS_TOKEN:\n return depsOfClass(rec.provide, 'discovery');\n }\n}\n\n// Allowed chars per MCP spec: a-zA-Z0-9 _ -. /\nconst MCP_ALLOWED = /[A-Za-z0-9_\\-./]/;\n\nexport function splitWords(input: string): string[] {\n const parts: string[] = [];\n let buff = '';\n for (let i = 0; i < input.length; i++) {\n const ch = input[i];\n const isAlphaNum = /[A-Za-z0-9]/.test(ch);\n if (!isAlphaNum) {\n if (buff) {\n parts.push(buff);\n buff = '';\n }\n continue;\n }\n if (buff && /[a-z]/.test(buff[buff.length - 1]) && /[A-Z]/.test(ch)) {\n parts.push(buff);\n buff = ch;\n } else {\n buff += ch;\n }\n }\n if (buff) parts.push(buff);\n return parts;\n}\n\nexport function toCase(words: string[], kind: NameCase): string {\n const safe = words.filter(Boolean);\n switch (kind) {\n case 'snake':\n return safe.map((w) => w.toLowerCase()).join('_');\n case 'kebab':\n return safe.map((w) => w.toLowerCase()).join('-');\n case 'dot':\n return safe.map((w) => w.toLowerCase()).join('.');\n case 'camel':\n if (safe.length === 0) return '';\n return (\n safe[0].toLowerCase() +\n safe\n .slice(1)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join('')\n );\n }\n}\n\nexport function normalizeSegment(raw: string, kind: NameCase): string {\n const words = splitWords(raw);\n let cased = toCase(words, kind);\n cased = [...cased].filter((ch) => MCP_ALLOWED.test(ch)).join('');\n return cased || 'x';\n}\n\nexport function normalizeProviderId(raw: string | undefined, kind: NameCase): string | undefined {\n if (!raw) return undefined;\n const tokens = raw.split(/\\W+/);\n const cased = toCase(tokens, kind);\n const safe = [...cased].filter((ch) => MCP_ALLOWED.test(ch)).join('');\n return safe || undefined;\n}\n\nexport function normalizeOwnerPath(ownerKey: string, kind: NameCase): string {\n const levels = ownerKey.split('/');\n const normLevels = levels.map((level) => {\n const parts = level.split(':'); // [\"app\",\"Portal\"]\n return parts\n .map((p) => normalizeSegment(p, kind))\n .join(kind === 'snake' ? '_' : kind === 'kebab' ? '-' : kind === 'dot' ? '.' : '');\n });\n if (kind === 'camel') return normLevels.map((seg) => seg.charAt(0).toLowerCase() + seg.slice(1)).join('');\n const sep = kind === 'snake' ? '_' : kind === 'kebab' ? '-' : '.';\n return normLevels.join(sep);\n}\n\nexport function shortHash(s: string): string {\n let h = 5381;\n for (let i = 0; i < s.length; i++) h = (h << 5) + h + s.charCodeAt(i);\n return (h >>> 0).toString(16).slice(-6).padStart(6, '0');\n}\n\nexport function ensureMaxLen(name: string, max: number): string {\n if (name.length <= max) return name;\n const hash = shortHash(name);\n const lastSep = Math.max(name.lastIndexOf('_'), name.lastIndexOf('-'), name.lastIndexOf('.'), name.lastIndexOf('/'));\n const tail = lastSep > 0 ? name.slice(lastSep + 1) : name.slice(-Math.max(3, Math.min(16, Math.floor(max / 4))));\n const budget = Math.max(1, max - (1 + hash.length + 1 + tail.length));\n const prefix = name.slice(0, budget);\n return `${prefix}-${hash}-${tail}`.slice(0, max);\n}\n\nexport function sepFor(kind: NameCase): string {\n return kind === 'snake' ? '_' : kind === 'kebab' ? '-' : kind === 'dot' ? '.' : '';\n}\n\nexport function ownerKeyOf(lineage: EntryLineage): string {\n return lineage.map((o) => `${o.kind}:${o.id}`).join('/');\n}\n\nexport function qualifiedNameOf(lineage: EntryLineage, name: string): string {\n return `${ownerKeyOf(lineage)}:${name}`;\n}\n\nexport function buildParsedToolResult(descriptor: any, raw: unknown): ParsedToolResult {\n const content: ContentBlock[] = [];\n let structuredData: Record<string, any> | undefined;\n\n // No outputSchema → the best effort: treat the result as structured JSON and text fallback\n if (!descriptor) {\n const structuredContent = getStructuredContent(raw);\n const sanitized = structuredContent ?? raw;\n content.push(makeJsonTextContent(sanitized));\n return { content, structuredContent };\n }\n\n if (Array.isArray(descriptor)) {\n // Multiple content items; expect raw to be an array of the same length.\n const values = Array.isArray(raw) ? raw : [raw];\n const parsedItems: Array<{ blocks: ContentBlock[]; parsedValue?: any; isPrimitive: boolean }> = [];\n\n // Parse all items first\n descriptor.forEach((singleDescriptor: any, idx: number) => {\n const value = values[idx];\n const { blocks, parsedValue, isPrimitive } = parseSingleValue(singleDescriptor, value);\n parsedItems.push({ blocks, parsedValue, isPrimitive });\n content.push(...blocks);\n });\n\n // Check if we have at least one non-primitive item\n const hasNonPrimitive = parsedItems.some(item => !item.isPrimitive);\n\n if (hasNonPrimitive && parsedItems.length > 1) {\n // Multiple items with at least one non-string/primitive: use numeric indices\n structuredData = {};\n parsedItems.forEach((item, idx) => {\n if (item.parsedValue !== undefined) {\n structuredData![idx] = item.parsedValue;\n }\n });\n } else if (parsedItems.length === 1 && parsedItems[0].parsedValue !== undefined) {\n // Single item: wrap primitives in {content: value}, use objects directly\n if (parsedItems[0].isPrimitive) {\n structuredData = { content: parsedItems[0].parsedValue };\n } else if (typeof parsedItems[0].parsedValue === 'object' && parsedItems[0].parsedValue !== null) {\n // Non-primitive object (date, json, etc.) - use directly\n structuredData = parsedItems[0].parsedValue;\n } else {\n // Non-primitive but not an object (shouldn't happen, but handle it)\n structuredData = { content: parsedItems[0].parsedValue };\n }\n } else if (hasNonPrimitive) {\n // Multiple items but only one has a value\n structuredData = {};\n parsedItems.forEach((item, idx) => {\n if (item.parsedValue !== undefined) {\n structuredData![idx] = item.parsedValue;\n }\n });\n }\n } else {\n const { blocks, parsedValue, isPrimitive } = parseSingleValue(descriptor, raw);\n content.push(...blocks);\n\n // Single item: wrap primitives in {content: value}, use objects directly\n if (parsedValue !== undefined) {\n if (isPrimitive) {\n structuredData = { content: parsedValue };\n } else if (typeof parsedValue === 'object' && parsedValue !== null) {\n // Non-primitive object (date, json, etc.) - use directly\n structuredData = parsedValue;\n } else {\n // Non-primitive but not an object (number, boolean, etc.) - wrap it\n structuredData = { content: parsedValue };\n }\n }\n }\n\n const result: ParsedToolResult = { content };\n\n // Add structuredContent if we have structured data\n if (structuredData !== undefined) {\n result.structuredContent = structuredData;\n }\n\n return result;\n}\n\n/**\n * Parse a single schema descriptor + value into one or more ContentBlocks.\n *\n * Returns:\n * - blocks: content blocks to append\n * - parsedValue: the parsed/validated value (for structuredContent)\n * - isPrimitive: whether this is a primitive string type\n */\nfunction parseSingleValue(\n descriptor: any,\n value: unknown\n): { blocks: ContentBlock[]; parsedValue?: any; isPrimitive: boolean } {\n // Literal primitives + special content types\n if (typeof descriptor === 'string') {\n switch (descriptor) {\n case 'string':\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: value,\n isPrimitive: true,\n };\n\n case 'number': {\n const numValue = typeof value === 'number' ? value : Number(value);\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: isNaN(numValue) ? null : numValue,\n isPrimitive: false,\n };\n }\n\n case 'boolean': {\n const boolValue = typeof value === 'boolean' ? value : Boolean(value);\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: boolValue,\n isPrimitive: false,\n };\n }\n\n case 'date': {\n let dateValue: Date | null = null;\n if (value instanceof Date) {\n dateValue = value;\n } else if (typeof value === 'string' || typeof value === 'number') {\n const parsed = new Date(value);\n if (!isNaN(parsed.getTime())) {\n dateValue = parsed;\n }\n }\n\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: dateValue ? {\n iso: dateValue.toISOString(),\n timeInMilli: dateValue.getTime(),\n } : null,\n isPrimitive: false,\n };\n }\n\n case 'image':\n return {\n blocks: toContentArray<ImageContent>('image', value),\n parsedValue: undefined,\n isPrimitive: false,\n };\n\n case 'audio':\n return {\n blocks: toContentArray<AudioContent>('audio', value),\n parsedValue: undefined,\n isPrimitive: false,\n };\n\n case 'resource':\n return {\n blocks: toContentArray<EmbeddedResource>('resource', value),\n parsedValue: undefined,\n isPrimitive: false,\n };\n\n case 'resource_link':\n return {\n blocks: toContentArray<ResourceLink>('resource_link', value),\n parsedValue: undefined,\n isPrimitive: false,\n };\n\n default:\n // Unknown literal: just stringify as text\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: value,\n isPrimitive: true,\n };\n }\n }\n\n // Zod primitives\n if (descriptor instanceof ZodString) {\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: value,\n isPrimitive: true,\n };\n }\n\n if (descriptor instanceof ZodNumber) {\n const parseResult = descriptor.safeParse(value);\n const numValue = parseResult.success ? parseResult.data : (typeof value === 'number' ? value : Number(value));\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: isNaN(numValue) ? null : numValue,\n isPrimitive: false,\n };\n }\n\n if (descriptor instanceof ZodBoolean) {\n const parseResult = descriptor.safeParse(value);\n const boolValue = parseResult.success ? parseResult.data : Boolean(value);\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: boolValue,\n isPrimitive: false,\n };\n }\n\n if (descriptor instanceof ZodBigInt) {\n const parseResult = descriptor.safeParse(value);\n const bigIntValue = parseResult.success ? parseResult.data : (typeof value === 'bigint' ? value : null);\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: bigIntValue !== null ? bigIntValue.toString() : null,\n isPrimitive: false,\n };\n }\n\n if (descriptor instanceof ZodDate) {\n const parseResult = descriptor.safeParse(value);\n const dateValue = parseResult.success ? parseResult.data : (value instanceof Date ? value : null);\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: dateValue ? {\n iso: dateValue.toISOString(),\n timeInMilli: dateValue.getTime(),\n } : null,\n isPrimitive: false,\n };\n }\n\n // Anything else (Zod object/array/union, ZodRawShape, plain object) → JSON/structured\n // Use Zod parsing if it's a Zod schema\n let parsedValue: any;\n\n if (descriptor instanceof z.ZodType) {\n // Use Zod to parse and validate\n const parseResult = descriptor.safeParse(value);\n if (parseResult.success) {\n parsedValue = getStructuredContent(parseResult.data);\n } else {\n // Validation failed, use sanitized raw value\n parsedValue = getStructuredContent(value);\n }\n } else if (typeof descriptor === 'object' && descriptor !== null) {\n // ZodRawShape or plain object - try to create a Zod object schema\n try {\n const schema = z.object(descriptor);\n const parseResult = schema.safeParse(value);\n if (parseResult.success) {\n parsedValue = getStructuredContent(parseResult.data);\n } else {\n parsedValue = getStructuredContent(value);\n }\n } catch {\n // Fallback to sanitized content\n parsedValue = getStructuredContent(value);\n }\n } else {\n parsedValue = getStructuredContent(value);\n }\n\n return {\n blocks: [makeJsonTextContent(parsedValue)],\n parsedValue,\n isPrimitive: false,\n };\n}\n\nfunction makePrimitiveTextContent(value: unknown): TextContent {\n return {\n type: 'text',\n text: value == null ? '' : String(value),\n };\n}\n\nfunction makeJsonTextContent(jsonValue: unknown): TextContent {\n let text: string;\n try {\n text = JSON.stringify(jsonValue);\n } catch {\n text = jsonValue == null ? '' : String(jsonValue);\n }\n return { type: 'text', text };\n}\n\n/**\n * Normalize any `value` into an array of content objects with the given MCP `type`.\n * If `value` is already a single content object (with a matching type), it's wrapped.\n * If it's an array, every element is assumed to already be a content object.\n */\nfunction toContentArray<T extends ContentBlock>(expectedType: T['type'], value: unknown): ContentBlock[] {\n if (Array.isArray(value)) {\n return value.filter(Boolean).map((v) => v as T);\n }\n\n if (value && typeof value === 'object' && (value as any).type === expectedType) {\n return [value as T];\n }\n\n // If the value is null/undefined or doesn't match, we just skip it.\n return [];\n}\n\n/**\n * Sanitize arbitrary JS values into JSON-safe objects suitable for:\n * - MCP `structuredContent`\n * - JSON.stringify without circular reference errors\n *\n * Rules:\n * - Drop functions and symbols.\n * - BigInt → string.\n * - Date → ISO string.\n * - Error → { name, message, stack }.\n * - Map → plain object.\n * - Set → array.\n * - Protect against circular references via WeakSet.\n */\nfunction getStructuredContent(value: unknown): any | undefined {\n const seen = new WeakSet<object>();\n\n function sanitize(val: any): any {\n if (typeof val === 'function' || typeof val === 'symbol') {\n return undefined;\n }\n\n if (typeof val === 'bigint') {\n return val.toString();\n }\n\n if (val instanceof Date) {\n return val.toISOString();\n }\n\n if (val instanceof Error) {\n return {\n name: val.name,\n message: val.message,\n stack: val.stack,\n };\n }\n\n if (val instanceof Map) {\n const obj: Record<string, any> = {};\n for (const [k, v] of val.entries()) {\n obj[String(k)] = sanitize(v);\n }\n return obj;\n }\n\n if (val instanceof Set) {\n return Array.from(val).map(sanitize);\n }\n\n if (Array.isArray(val)) {\n return val.map(sanitize);\n }\n\n if (val && typeof val === 'object') {\n if (seen.has(val)) {\n // Drop circular references\n return undefined;\n }\n seen.add(val);\n\n const sanitized: Record<string, any> = {};\n for (const [key, value] of Object.entries(val)) {\n const clean = sanitize(value);\n if (clean !== undefined) {\n sanitized[key] = clean;\n }\n }\n return sanitized;\n }\n\n // Primitives pass through\n return val;\n }\n\n return sanitize(value);\n}\n"]}
1
+ {"version":3,"file":"tool.utils.js","sourceRoot":"","sources":["../../../src/tool/tool.utils.ts"],"names":[],"mappings":"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","sourcesContent":["// file: libs/sdk/src/tool/tool.utils.ts\nimport {\n ToolMetadata,\n FrontMcpToolTokens,\n ToolType,\n Token,\n ToolRecord,\n ToolKind,\n Type,\n ToolContext,\n extendedToolMetadata,\n ParsedToolResult,\n} from '../common';\nimport { depsOfClass, depsOfFunc, isClass } from '../utils/token.utils';\nimport { getMetadata } from '../utils/metadata.utils';\nimport { toStructuredContent } from '../utils/content.utils';\nimport {\n AudioContent,\n ContentBlock,\n EmbeddedResource,\n ImageContent,\n ResourceLink,\n TextContent,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { z, ZodBigInt, ZodBoolean, ZodDate, ZodNumber, ZodString } from 'zod';\n\n// Re-export shared naming utilities for backwards compatibility\nexport {\n type NameCase,\n splitWords,\n toCase,\n sepFor,\n normalizeSegment,\n normalizeProviderId,\n normalizeOwnerPath,\n shortHash,\n ensureMaxLen,\n} from '../utils/naming.utils';\n\n// Re-export shared lineage utilities for backwards compatibility\nexport { ownerKeyOf, qualifiedNameOf } from '../utils/lineage.utils';\n\nexport function collectToolMetadata(cls: ToolType): ToolMetadata {\n const extended = getMetadata(extendedToolMetadata, cls);\n const seed = (extended ? { ...extended } : {}) as ToolMetadata;\n return Object.entries(FrontMcpToolTokens).reduce((metadata, [key, token]) => {\n const value = getMetadata(token, cls);\n if (value) {\n return Object.assign(metadata, {\n [key]: value,\n });\n } else {\n return metadata;\n }\n }, seed);\n}\n\nexport function normalizeTool(item: any): ToolRecord {\n if (\n item &&\n typeof item === 'function' &&\n item[FrontMcpToolTokens.type] === 'function-tool' &&\n item[FrontMcpToolTokens.metadata]\n ) {\n return {\n kind: ToolKind.FUNCTION,\n provide: item(),\n metadata: item[FrontMcpToolTokens.metadata] as ToolMetadata,\n };\n }\n\n if (isClass(item)) {\n // read McpToolMetadata from class\n const metadata = collectToolMetadata(item);\n return { kind: ToolKind.CLASS_TOKEN, provide: item as Type<ToolContext>, metadata };\n }\n const name = (item as any)?.name ?? String(item);\n throw new Error(`Invalid adapter '${name}'. Expected a class or a adapter object.`);\n}\n\n/**\n * For graph/cycle detection. Returns dependency tokens that should be graphed.\n * - FUNCTION: get function params without the first argument (the tool input)\n * - CLASS_TOKEN: deps come from the class constructor\n */\nexport function toolDiscoveryDeps(rec: ToolRecord): Token[] {\n switch (rec.kind) {\n case ToolKind.FUNCTION: {\n return depsOfFunc(rec.provide, 'discovery');\n }\n case ToolKind.CLASS_TOKEN:\n return depsOfClass(rec.provide, 'discovery');\n }\n}\n\nexport function buildParsedToolResult(descriptor: any, raw: unknown): ParsedToolResult {\n const content: ContentBlock[] = [];\n let structuredData: Record<string, any> | undefined;\n\n // No outputSchema → the best effort: treat the result as structured JSON and text fallback\n if (!descriptor) {\n const structuredContent = toStructuredContent(raw);\n const sanitized = structuredContent ?? raw;\n content.push(makeJsonTextContent(sanitized));\n return { content, structuredContent };\n }\n\n if (Array.isArray(descriptor)) {\n // Multiple content items; expect raw to be an array of the same length.\n const values = Array.isArray(raw) ? raw : [raw];\n const parsedItems: Array<{ blocks: ContentBlock[]; parsedValue?: any; isPrimitive: boolean }> = [];\n\n // Parse all items first\n descriptor.forEach((singleDescriptor: any, idx: number) => {\n const value = values[idx];\n const { blocks, parsedValue, isPrimitive } = parseSingleValue(singleDescriptor, value);\n parsedItems.push({ blocks, parsedValue, isPrimitive });\n content.push(...blocks);\n });\n\n // Check if we have at least one non-primitive item\n const hasNonPrimitive = parsedItems.some((item) => !item.isPrimitive);\n\n if (hasNonPrimitive && parsedItems.length > 1) {\n // Multiple items with at least one non-string/primitive: use numeric indices\n structuredData = {};\n parsedItems.forEach((item, idx) => {\n if (item.parsedValue !== undefined) {\n structuredData![idx] = item.parsedValue;\n }\n });\n } else if (parsedItems.length === 1 && parsedItems[0].parsedValue !== undefined) {\n // Single item: wrap primitives in {content: value}, use objects directly\n if (parsedItems[0].isPrimitive) {\n structuredData = { content: parsedItems[0].parsedValue };\n } else if (typeof parsedItems[0].parsedValue === 'object' && parsedItems[0].parsedValue !== null) {\n // Non-primitive object (date, json, etc.) - use directly\n structuredData = parsedItems[0].parsedValue;\n } else {\n // Non-primitive but not an object (shouldn't happen, but handle it)\n structuredData = { content: parsedItems[0].parsedValue };\n }\n } else if (hasNonPrimitive) {\n // Multiple items but only one has a value\n structuredData = {};\n parsedItems.forEach((item, idx) => {\n if (item.parsedValue !== undefined) {\n structuredData![idx] = item.parsedValue;\n }\n });\n }\n } else {\n const { blocks, parsedValue, isPrimitive } = parseSingleValue(descriptor, raw);\n content.push(...blocks);\n\n // Single item: wrap primitives in {content: value}, use objects directly\n if (parsedValue !== undefined) {\n if (isPrimitive) {\n structuredData = { content: parsedValue };\n } else if (typeof parsedValue === 'object' && parsedValue !== null) {\n // Non-primitive object (date, json, etc.) - use directly\n structuredData = parsedValue;\n } else {\n // Non-primitive but not an object (number, boolean, etc.) - wrap it\n structuredData = { content: parsedValue };\n }\n }\n }\n\n const result: ParsedToolResult = { content };\n\n // Add structuredContent if we have structured data\n if (structuredData !== undefined) {\n result.structuredContent = structuredData;\n }\n\n return result;\n}\n\n/**\n * Parse a single schema descriptor + value into one or more ContentBlocks.\n *\n * Returns:\n * - blocks: content blocks to append\n * - parsedValue: the parsed/validated value (for structuredContent)\n * - isPrimitive: whether this is a primitive string type\n */\nfunction parseSingleValue(\n descriptor: any,\n value: unknown,\n): { blocks: ContentBlock[]; parsedValue?: any; isPrimitive: boolean } {\n // Literal primitives + special content types\n if (typeof descriptor === 'string') {\n switch (descriptor) {\n case 'string':\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: value,\n isPrimitive: true,\n };\n\n case 'number': {\n const numValue = typeof value === 'number' ? value : Number(value);\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: isNaN(numValue) ? null : numValue,\n isPrimitive: false,\n };\n }\n\n case 'boolean': {\n const boolValue = typeof value === 'boolean' ? value : Boolean(value);\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: boolValue,\n isPrimitive: false,\n };\n }\n\n case 'date': {\n let dateValue: Date | null = null;\n if (value instanceof Date) {\n dateValue = value;\n } else if (typeof value === 'string' || typeof value === 'number') {\n const parsed = new Date(value);\n if (!isNaN(parsed.getTime())) {\n dateValue = parsed;\n }\n }\n\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: dateValue\n ? {\n iso: dateValue.toISOString(),\n timeInMilli: dateValue.getTime(),\n }\n : null,\n isPrimitive: false,\n };\n }\n\n case 'image':\n return {\n blocks: toContentArray<ImageContent>('image', value),\n parsedValue: undefined,\n isPrimitive: false,\n };\n\n case 'audio':\n return {\n blocks: toContentArray<AudioContent>('audio', value),\n parsedValue: undefined,\n isPrimitive: false,\n };\n\n case 'resource':\n return {\n blocks: toContentArray<EmbeddedResource>('resource', value),\n parsedValue: undefined,\n isPrimitive: false,\n };\n\n case 'resource_link':\n return {\n blocks: toContentArray<ResourceLink>('resource_link', value),\n parsedValue: undefined,\n isPrimitive: false,\n };\n\n default:\n // Unknown literal: just stringify as text\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: value,\n isPrimitive: true,\n };\n }\n }\n\n // Zod primitives\n if (descriptor instanceof ZodString) {\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: value,\n isPrimitive: true,\n };\n }\n\n if (descriptor instanceof ZodNumber) {\n const parseResult = descriptor.safeParse(value);\n const numValue = parseResult.success ? parseResult.data : typeof value === 'number' ? value : Number(value);\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: isNaN(numValue) ? null : numValue,\n isPrimitive: false,\n };\n }\n\n if (descriptor instanceof ZodBoolean) {\n const parseResult = descriptor.safeParse(value);\n const boolValue = parseResult.success ? parseResult.data : Boolean(value);\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: boolValue,\n isPrimitive: false,\n };\n }\n\n if (descriptor instanceof ZodBigInt) {\n const parseResult = descriptor.safeParse(value);\n const bigIntValue = parseResult.success ? parseResult.data : typeof value === 'bigint' ? value : null;\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: bigIntValue !== null ? bigIntValue.toString() : null,\n isPrimitive: false,\n };\n }\n\n if (descriptor instanceof ZodDate) {\n const parseResult = descriptor.safeParse(value);\n const dateValue = parseResult.success ? parseResult.data : value instanceof Date ? value : null;\n return {\n blocks: [makePrimitiveTextContent(value)],\n parsedValue: dateValue\n ? {\n iso: dateValue.toISOString(),\n timeInMilli: dateValue.getTime(),\n }\n : null,\n isPrimitive: false,\n };\n }\n\n // Anything else (Zod object/array/union, ZodRawShape, plain object) → JSON/structured\n // Use Zod parsing if it's a Zod schema\n let parsedValue: any;\n\n if (descriptor instanceof z.ZodType) {\n // Use Zod to parse and validate\n const parseResult = descriptor.safeParse(value);\n if (parseResult.success) {\n parsedValue = toStructuredContent(parseResult.data);\n } else {\n // Validation failed, use sanitized raw value\n parsedValue = toStructuredContent(value);\n }\n } else if (typeof descriptor === 'object' && descriptor !== null) {\n // ZodRawShape or plain object - try to create a Zod object schema\n try {\n const schema = z.object(descriptor);\n const parseResult = schema.safeParse(value);\n if (parseResult.success) {\n parsedValue = toStructuredContent(parseResult.data);\n } else {\n parsedValue = toStructuredContent(value);\n }\n } catch {\n // Fallback to sanitized content\n parsedValue = toStructuredContent(value);\n }\n } else {\n parsedValue = toStructuredContent(value);\n }\n\n return {\n blocks: [makeJsonTextContent(parsedValue)],\n parsedValue,\n isPrimitive: false,\n };\n}\n\nfunction makePrimitiveTextContent(value: unknown): TextContent {\n return {\n type: 'text',\n text: value == null ? '' : String(value),\n };\n}\n\nfunction makeJsonTextContent(jsonValue: unknown): TextContent {\n let text: string;\n try {\n text = JSON.stringify(jsonValue);\n } catch {\n text = jsonValue == null ? '' : String(jsonValue);\n }\n return { type: 'text', text };\n}\n\n/**\n * Normalize any `value` into an array of content objects with the given MCP `type`.\n * If `value` is already a single content object (with a matching type), it's wrapped.\n * If it's an array, every element is assumed to already be a content object.\n */\nfunction toContentArray<T extends ContentBlock>(expectedType: T['type'], value: unknown): ContentBlock[] {\n if (Array.isArray(value)) {\n return value.filter(Boolean).map((v) => v as T);\n }\n\n if (value && typeof value === 'object' && (value as any).type === expectedType) {\n return [value as T];\n }\n\n // If the value is null/undefined or doesn't match, we just skip it.\n return [];\n}\n"]}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Tool UI Module
3
+ *
4
+ * Provides UI template rendering and platform-specific metadata generation
5
+ * for MCP tool responses.
6
+ *
7
+ * Three serving modes:
8
+ * - **inline**: HTML is rendered per-request and embedded in _meta['ui/html']
9
+ * - **static**: Static widget is pre-compiled at startup, client fetches via resources/read
10
+ * - **hybrid**: Shell (React + renderer) cached at startup, component + data in response
11
+ *
12
+ * NOTE: Core Tool UI functionality has moved to @frontmcp/ui/registry for standalone usage.
13
+ * This module re-exports from @frontmcp/ui/registry for backwards compatibility.
14
+ */
15
+ export { ToolUIRegistry, renderToolTemplateAsync, renderToolTemplate, hasUIConfig, isReactComponent, containsMdxSyntax, UI_RESOURCE_SCHEME, isUIResourceUri, isStaticWidgetUri, parseWidgetUri, buildStaticWidgetUri, getUIResourceMimeType, } from '@frontmcp/ui/registry';
16
+ export type { RenderOptions, UIRenderResult, CompileStaticWidgetOptions, HybridComponentPayload, BuildHybridComponentPayloadOptions, RenderTemplateOptions, ParsedWidgetUri, } from '@frontmcp/ui/registry';
17
+ export { buildUIMeta } from './platform-adapters';
18
+ export type { UIMetadata, BuildUIMetaOptions } from './platform-adapters';
19
+ export { escapeHtml, formatDate, formatCurrency, uniqueId, jsonEmbed, createTemplateHelpers, resetIdCounter, } from './template-helpers';
20
+ export { handleUIResourceRead, createUIResourceHandler } from './ui-resource.handler';
21
+ export type { UIResourceHandleResult, UIResourceHandlerOptions, HandleUIResourceOptions } from './ui-resource.handler';
22
+ export { StaticWidgetResourceTemplate } from './ui-resource-template';
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * Tool UI Module
4
+ *
5
+ * Provides UI template rendering and platform-specific metadata generation
6
+ * for MCP tool responses.
7
+ *
8
+ * Three serving modes:
9
+ * - **inline**: HTML is rendered per-request and embedded in _meta['ui/html']
10
+ * - **static**: Static widget is pre-compiled at startup, client fetches via resources/read
11
+ * - **hybrid**: Shell (React + renderer) cached at startup, component + data in response
12
+ *
13
+ * NOTE: Core Tool UI functionality has moved to @frontmcp/ui/registry for standalone usage.
14
+ * This module re-exports from @frontmcp/ui/registry for backwards compatibility.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.StaticWidgetResourceTemplate = exports.createUIResourceHandler = exports.handleUIResourceRead = exports.resetIdCounter = exports.createTemplateHelpers = exports.jsonEmbed = exports.uniqueId = exports.formatCurrency = exports.formatDate = exports.escapeHtml = exports.buildUIMeta = exports.getUIResourceMimeType = exports.buildStaticWidgetUri = exports.parseWidgetUri = exports.isStaticWidgetUri = exports.isUIResourceUri = exports.UI_RESOURCE_SCHEME = exports.containsMdxSyntax = exports.isReactComponent = exports.hasUIConfig = exports.renderToolTemplate = exports.renderToolTemplateAsync = exports.ToolUIRegistry = void 0;
18
+ // ============================================
19
+ // Core Registry (from @frontmcp/ui/registry)
20
+ // ============================================
21
+ var registry_1 = require("@frontmcp/ui/registry");
22
+ // Registry
23
+ Object.defineProperty(exports, "ToolUIRegistry", { enumerable: true, get: function () { return registry_1.ToolUIRegistry; } });
24
+ // Template rendering
25
+ Object.defineProperty(exports, "renderToolTemplateAsync", { enumerable: true, get: function () { return registry_1.renderToolTemplateAsync; } });
26
+ Object.defineProperty(exports, "renderToolTemplate", { enumerable: true, get: function () { return registry_1.renderToolTemplate; } });
27
+ Object.defineProperty(exports, "hasUIConfig", { enumerable: true, get: function () { return registry_1.hasUIConfig; } });
28
+ Object.defineProperty(exports, "isReactComponent", { enumerable: true, get: function () { return registry_1.isReactComponent; } });
29
+ Object.defineProperty(exports, "containsMdxSyntax", { enumerable: true, get: function () { return registry_1.containsMdxSyntax; } });
30
+ // URI utilities
31
+ Object.defineProperty(exports, "UI_RESOURCE_SCHEME", { enumerable: true, get: function () { return registry_1.UI_RESOURCE_SCHEME; } });
32
+ Object.defineProperty(exports, "isUIResourceUri", { enumerable: true, get: function () { return registry_1.isUIResourceUri; } });
33
+ Object.defineProperty(exports, "isStaticWidgetUri", { enumerable: true, get: function () { return registry_1.isStaticWidgetUri; } });
34
+ Object.defineProperty(exports, "parseWidgetUri", { enumerable: true, get: function () { return registry_1.parseWidgetUri; } });
35
+ Object.defineProperty(exports, "buildStaticWidgetUri", { enumerable: true, get: function () { return registry_1.buildStaticWidgetUri; } });
36
+ Object.defineProperty(exports, "getUIResourceMimeType", { enumerable: true, get: function () { return registry_1.getUIResourceMimeType; } });
37
+ // ============================================
38
+ // Platform Adapters (from @frontmcp/ui/adapters)
39
+ // ============================================
40
+ var platform_adapters_1 = require("./platform-adapters");
41
+ Object.defineProperty(exports, "buildUIMeta", { enumerable: true, get: function () { return platform_adapters_1.buildUIMeta; } });
42
+ // ============================================
43
+ // Template Helpers (from @frontmcp/ui/runtime)
44
+ // ============================================
45
+ var template_helpers_1 = require("./template-helpers");
46
+ Object.defineProperty(exports, "escapeHtml", { enumerable: true, get: function () { return template_helpers_1.escapeHtml; } });
47
+ Object.defineProperty(exports, "formatDate", { enumerable: true, get: function () { return template_helpers_1.formatDate; } });
48
+ Object.defineProperty(exports, "formatCurrency", { enumerable: true, get: function () { return template_helpers_1.formatCurrency; } });
49
+ Object.defineProperty(exports, "uniqueId", { enumerable: true, get: function () { return template_helpers_1.uniqueId; } });
50
+ Object.defineProperty(exports, "jsonEmbed", { enumerable: true, get: function () { return template_helpers_1.jsonEmbed; } });
51
+ Object.defineProperty(exports, "createTemplateHelpers", { enumerable: true, get: function () { return template_helpers_1.createTemplateHelpers; } });
52
+ Object.defineProperty(exports, "resetIdCounter", { enumerable: true, get: function () { return template_helpers_1.resetIdCounter; } });
53
+ // ============================================
54
+ // SDK-Specific (MCP Integration)
55
+ // ============================================
56
+ // UI Resource Handler - SDK-specific functions for MCP resource handling
57
+ var ui_resource_handler_1 = require("./ui-resource.handler");
58
+ Object.defineProperty(exports, "handleUIResourceRead", { enumerable: true, get: function () { return ui_resource_handler_1.handleUIResourceRead; } });
59
+ Object.defineProperty(exports, "createUIResourceHandler", { enumerable: true, get: function () { return ui_resource_handler_1.createUIResourceHandler; } });
60
+ // UI Resource Templates (for capability advertisement)
61
+ var ui_resource_template_1 = require("./ui-resource-template");
62
+ Object.defineProperty(exports, "StaticWidgetResourceTemplate", { enumerable: true, get: function () { return ui_resource_template_1.StaticWidgetResourceTemplate; } });
63
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tool/ui/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAEH,+CAA+C;AAC/C,6CAA6C;AAC7C,+CAA+C;AAC/C,kDAgB+B;AAf7B,WAAW;AACX,0GAAA,cAAc,OAAA;AACd,qBAAqB;AACrB,mHAAA,uBAAuB,OAAA;AACvB,8GAAA,kBAAkB,OAAA;AAClB,uGAAA,WAAW,OAAA;AACX,4GAAA,gBAAgB,OAAA;AAChB,6GAAA,iBAAiB,OAAA;AACjB,gBAAgB;AAChB,8GAAA,kBAAkB,OAAA;AAClB,2GAAA,eAAe,OAAA;AACf,6GAAA,iBAAiB,OAAA;AACjB,0GAAA,cAAc,OAAA;AACd,gHAAA,oBAAoB,OAAA;AACpB,iHAAA,qBAAqB,OAAA;AAgBvB,+CAA+C;AAC/C,iDAAiD;AACjD,+CAA+C;AAC/C,yDAAkD;AAAzC,gHAAA,WAAW,OAAA;AAGpB,+CAA+C;AAC/C,+CAA+C;AAC/C,+CAA+C;AAC/C,uDAQ4B;AAP1B,8GAAA,UAAU,OAAA;AACV,8GAAA,UAAU,OAAA;AACV,kHAAA,cAAc,OAAA;AACd,4GAAA,QAAQ,OAAA;AACR,6GAAA,SAAS,OAAA;AACT,yHAAA,qBAAqB,OAAA;AACrB,kHAAA,cAAc,OAAA;AAGhB,+CAA+C;AAC/C,iCAAiC;AACjC,+CAA+C;AAC/C,yEAAyE;AACzE,6DAAsF;AAA7E,2HAAA,oBAAoB,OAAA;AAAE,8HAAA,uBAAuB,OAAA;AAGtD,uDAAuD;AACvD,+DAAsE;AAA7D,oIAAA,4BAA4B,OAAA","sourcesContent":["/**\n * Tool UI Module\n *\n * Provides UI template rendering and platform-specific metadata generation\n * for MCP tool responses.\n *\n * Three serving modes:\n * - **inline**: HTML is rendered per-request and embedded in _meta['ui/html']\n * - **static**: Static widget is pre-compiled at startup, client fetches via resources/read\n * - **hybrid**: Shell (React + renderer) cached at startup, component + data in response\n *\n * NOTE: Core Tool UI functionality has moved to @frontmcp/ui/registry for standalone usage.\n * This module re-exports from @frontmcp/ui/registry for backwards compatibility.\n */\n\n// ============================================\n// Core Registry (from @frontmcp/ui/registry)\n// ============================================\nexport {\n // Registry\n ToolUIRegistry,\n // Template rendering\n renderToolTemplateAsync,\n renderToolTemplate,\n hasUIConfig,\n isReactComponent,\n containsMdxSyntax,\n // URI utilities\n UI_RESOURCE_SCHEME,\n isUIResourceUri,\n isStaticWidgetUri,\n parseWidgetUri,\n buildStaticWidgetUri,\n getUIResourceMimeType,\n} from '@frontmcp/ui/registry';\n\nexport type {\n // Registry types\n RenderOptions,\n UIRenderResult,\n CompileStaticWidgetOptions,\n HybridComponentPayload,\n BuildHybridComponentPayloadOptions,\n // Template types\n RenderTemplateOptions,\n // URI types\n ParsedWidgetUri,\n} from '@frontmcp/ui/registry';\n\n// ============================================\n// Platform Adapters (from @frontmcp/ui/adapters)\n// ============================================\nexport { buildUIMeta } from './platform-adapters';\nexport type { UIMetadata, BuildUIMetaOptions } from './platform-adapters';\n\n// ============================================\n// Template Helpers (from @frontmcp/ui/runtime)\n// ============================================\nexport {\n escapeHtml,\n formatDate,\n formatCurrency,\n uniqueId,\n jsonEmbed,\n createTemplateHelpers,\n resetIdCounter,\n} from './template-helpers';\n\n// ============================================\n// SDK-Specific (MCP Integration)\n// ============================================\n// UI Resource Handler - SDK-specific functions for MCP resource handling\nexport { handleUIResourceRead, createUIResourceHandler } from './ui-resource.handler';\nexport type { UIResourceHandleResult, UIResourceHandlerOptions, HandleUIResourceOptions } from './ui-resource.handler';\n\n// UI Resource Templates (for capability advertisement)\nexport { StaticWidgetResourceTemplate } from './ui-resource-template';\n"]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Platform Adapters
3
+ *
4
+ * Re-exports platform adapter functions from @frontmcp/ui/adapters for SDK consumers.
5
+ * This provides a single source of truth for platform-specific metadata building
6
+ * while maintaining backwards compatibility.
7
+ *
8
+ * @see {@link https://docs.agentfront.dev/docs/servers/tools#tool-ui | Tool UI Documentation}
9
+ */
10
+ export { type AIPlatformType, type UIMetadata, type BuildUIMetaOptions, type BuildToolDiscoveryMetaOptions, buildUIMeta, buildToolDiscoveryMeta, buildOpenAICSP, } from '@frontmcp/ui/adapters';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ /**
3
+ * Platform Adapters
4
+ *
5
+ * Re-exports platform adapter functions from @frontmcp/ui/adapters for SDK consumers.
6
+ * This provides a single source of truth for platform-specific metadata building
7
+ * while maintaining backwards compatibility.
8
+ *
9
+ * @see {@link https://docs.agentfront.dev/docs/servers/tools#tool-ui | Tool UI Documentation}
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.buildOpenAICSP = exports.buildToolDiscoveryMeta = exports.buildUIMeta = void 0;
13
+ // Re-export platform adapter types and functions from @frontmcp/ui
14
+ var adapters_1 = require("@frontmcp/ui/adapters");
15
+ Object.defineProperty(exports, "buildUIMeta", { enumerable: true, get: function () { return adapters_1.buildUIMeta; } });
16
+ Object.defineProperty(exports, "buildToolDiscoveryMeta", { enumerable: true, get: function () { return adapters_1.buildToolDiscoveryMeta; } });
17
+ Object.defineProperty(exports, "buildOpenAICSP", { enumerable: true, get: function () { return adapters_1.buildOpenAICSP; } });
18
+ //# sourceMappingURL=platform-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-adapters.js","sourceRoot":"","sources":["../../../../src/tool/ui/platform-adapters.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,mEAAmE;AACnE,kDAQ+B;AAH7B,uGAAA,WAAW,OAAA;AACX,kHAAA,sBAAsB,OAAA;AACtB,0GAAA,cAAc,OAAA","sourcesContent":["/**\n * Platform Adapters\n *\n * Re-exports platform adapter functions from @frontmcp/ui/adapters for SDK consumers.\n * This provides a single source of truth for platform-specific metadata building\n * while maintaining backwards compatibility.\n *\n * @see {@link https://docs.agentfront.dev/docs/servers/tools#tool-ui | Tool UI Documentation}\n */\n\n// Re-export platform adapter types and functions from @frontmcp/ui\nexport {\n type AIPlatformType,\n type UIMetadata,\n type BuildUIMetaOptions,\n type BuildToolDiscoveryMetaOptions,\n buildUIMeta,\n buildToolDiscoveryMeta,\n buildOpenAICSP,\n} from '@frontmcp/ui/adapters';\n"]}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Template Helpers
3
+ *
4
+ * Re-exports template helper utilities from @frontmcp/ui/runtime.
5
+ * Also provides individual helper functions for backwards compatibility.
6
+ *
7
+ * @see {@link https://docs.agentfront.dev/docs/servers/tools#tool-ui | Tool UI Documentation}
8
+ */
9
+ import type { TemplateHelpers } from '../../common/metadata/tool-ui.metadata';
10
+ export { createTemplateHelpers } from '@frontmcp/ui/runtime';
11
+ /**
12
+ * Escape HTML special characters to prevent XSS.
13
+ */
14
+ export declare function escapeHtml(str: string): string;
15
+ /**
16
+ * Format a date for display.
17
+ * @param date - Date object or ISO string
18
+ * @param format - Optional format: 'iso', 'time', 'datetime', or default (localized date)
19
+ */
20
+ export declare function formatDate(date: Date | string, format?: string): string;
21
+ /**
22
+ * Format a number as currency.
23
+ * @param amount - The numeric amount
24
+ * @param currency - ISO 4217 currency code (default: 'USD')
25
+ */
26
+ export declare function formatCurrency(amount: number, currency?: string): string;
27
+ /**
28
+ * Generate a unique ID for DOM elements.
29
+ * @param prefix - Optional prefix for the ID
30
+ */
31
+ export declare function uniqueId(prefix?: string): string;
32
+ /**
33
+ * Safely embed JSON data in HTML.
34
+ * Escapes characters that could break out of script tags or HTML.
35
+ */
36
+ export declare function jsonEmbed(data: unknown): string;
37
+ /**
38
+ * Create a TemplateHelpers object with all helper functions.
39
+ * @deprecated Use createTemplateHelpers from @frontmcp/ui/runtime instead
40
+ */
41
+ export declare function createTemplateHelpersLocal(): TemplateHelpers;
42
+ /**
43
+ * Reset the ID counter (useful for testing).
44
+ * @internal
45
+ */
46
+ export declare function resetIdCounter(): void;
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * Template Helpers
4
+ *
5
+ * Re-exports template helper utilities from @frontmcp/ui/runtime.
6
+ * Also provides individual helper functions for backwards compatibility.
7
+ *
8
+ * @see {@link https://docs.agentfront.dev/docs/servers/tools#tool-ui | Tool UI Documentation}
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.createTemplateHelpers = void 0;
12
+ exports.escapeHtml = escapeHtml;
13
+ exports.formatDate = formatDate;
14
+ exports.formatCurrency = formatCurrency;
15
+ exports.uniqueId = uniqueId;
16
+ exports.jsonEmbed = jsonEmbed;
17
+ exports.createTemplateHelpersLocal = createTemplateHelpersLocal;
18
+ exports.resetIdCounter = resetIdCounter;
19
+ // Re-export createTemplateHelpers from @frontmcp/ui
20
+ var runtime_1 = require("@frontmcp/ui/runtime");
21
+ Object.defineProperty(exports, "createTemplateHelpers", { enumerable: true, get: function () { return runtime_1.createTemplateHelpers; } });
22
+ // ============================================
23
+ // Individual Helper Functions (Backwards Compatibility)
24
+ // ============================================
25
+ // These are exported individually for SDK consumers who import them directly.
26
+ // For new code, prefer using createTemplateHelpers() instead.
27
+ let idCounter = 0;
28
+ /**
29
+ * Escape HTML special characters to prevent XSS.
30
+ */
31
+ function escapeHtml(str) {
32
+ if (typeof str !== 'string') {
33
+ return String(str ?? '');
34
+ }
35
+ return str
36
+ .replace(/&/g, '&amp;')
37
+ .replace(/</g, '&lt;')
38
+ .replace(/>/g, '&gt;')
39
+ .replace(/"/g, '&quot;')
40
+ .replace(/'/g, '&#039;');
41
+ }
42
+ /**
43
+ * Format a date for display.
44
+ * @param date - Date object or ISO string
45
+ * @param format - Optional format: 'iso', 'time', 'datetime', or default (localized date)
46
+ */
47
+ function formatDate(date, format) {
48
+ const d = typeof date === 'string' ? new Date(date) : date;
49
+ if (isNaN(d.getTime())) {
50
+ return String(date);
51
+ }
52
+ switch (format) {
53
+ case 'iso':
54
+ return d.toISOString();
55
+ case 'time':
56
+ return d.toLocaleTimeString();
57
+ case 'datetime':
58
+ return d.toLocaleString();
59
+ default:
60
+ return d.toLocaleDateString();
61
+ }
62
+ }
63
+ /**
64
+ * Format a number as currency.
65
+ * @param amount - The numeric amount
66
+ * @param currency - ISO 4217 currency code (default: 'USD')
67
+ */
68
+ function formatCurrency(amount, currency = 'USD') {
69
+ return new Intl.NumberFormat('en-US', {
70
+ style: 'currency',
71
+ currency,
72
+ }).format(amount);
73
+ }
74
+ /**
75
+ * Generate a unique ID for DOM elements.
76
+ * @param prefix - Optional prefix for the ID
77
+ */
78
+ function uniqueId(prefix = 'mcp') {
79
+ return `${prefix}-${++idCounter}-${Date.now().toString(36)}`;
80
+ }
81
+ /**
82
+ * Safely embed JSON data in HTML.
83
+ * Escapes characters that could break out of script tags or HTML.
84
+ */
85
+ function jsonEmbed(data) {
86
+ return JSON.stringify(data)
87
+ .replace(/</g, '\\u003c')
88
+ .replace(/>/g, '\\u003e')
89
+ .replace(/&/g, '\\u0026')
90
+ .replace(/'/g, '\\u0027');
91
+ }
92
+ /**
93
+ * Create a TemplateHelpers object with all helper functions.
94
+ * @deprecated Use createTemplateHelpers from @frontmcp/ui/runtime instead
95
+ */
96
+ function createTemplateHelpersLocal() {
97
+ return {
98
+ escapeHtml,
99
+ formatDate,
100
+ formatCurrency,
101
+ uniqueId,
102
+ jsonEmbed,
103
+ };
104
+ }
105
+ /**
106
+ * Reset the ID counter (useful for testing).
107
+ * @internal
108
+ */
109
+ function resetIdCounter() {
110
+ idCounter = 0;
111
+ }
112
+ //# sourceMappingURL=template-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-helpers.js","sourceRoot":"","sources":["../../../../src/tool/ui/template-helpers.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAkBH,gCAUC;AAOD,gCAgBC;AAOD,wCAKC;AAMD,4BAEC;AAMD,8BAMC;AAMD,gEAQC;AAMD,wCAEC;AArGD,oDAAoD;AACpD,gDAA6D;AAApD,gHAAA,qBAAqB,OAAA;AAE9B,+CAA+C;AAC/C,wDAAwD;AACxD,+CAA+C;AAC/C,8EAA8E;AAC9E,8DAA8D;AAE9D,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB;;GAEG;AACH,SAAgB,UAAU,CAAC,GAAW;IACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,IAAmB,EAAE,MAAe;IAC7D,MAAM,CAAC,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK;YACR,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACzB,KAAK,MAAM;YACT,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAC;QAChC,KAAK,UAAU;YACb,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;QAC5B;YACE,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,MAAc,EAAE,QAAQ,GAAG,KAAK;IAC7D,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;QACpC,KAAK,EAAE,UAAU;QACjB,QAAQ;KACT,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CAAC,MAAM,GAAG,KAAK;IACrC,OAAO,GAAG,MAAM,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,IAAa;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,SAAgB,0BAA0B;IACxC,OAAO;QACL,UAAU;QACV,UAAU;QACV,cAAc;QACd,QAAQ;QACR,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc;IAC5B,SAAS,GAAG,CAAC,CAAC;AAChB,CAAC","sourcesContent":["/**\n * Template Helpers\n *\n * Re-exports template helper utilities from @frontmcp/ui/runtime.\n * Also provides individual helper functions for backwards compatibility.\n *\n * @see {@link https://docs.agentfront.dev/docs/servers/tools#tool-ui | Tool UI Documentation}\n */\n\nimport type { TemplateHelpers } from '../../common/metadata/tool-ui.metadata';\n\n// Re-export createTemplateHelpers from @frontmcp/ui\nexport { createTemplateHelpers } from '@frontmcp/ui/runtime';\n\n// ============================================\n// Individual Helper Functions (Backwards Compatibility)\n// ============================================\n// These are exported individually for SDK consumers who import them directly.\n// For new code, prefer using createTemplateHelpers() instead.\n\nlet idCounter = 0;\n\n/**\n * Escape HTML special characters to prevent XSS.\n */\nexport function escapeHtml(str: string): string {\n if (typeof str !== 'string') {\n return String(str ?? '');\n }\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n}\n\n/**\n * Format a date for display.\n * @param date - Date object or ISO string\n * @param format - Optional format: 'iso', 'time', 'datetime', or default (localized date)\n */\nexport function formatDate(date: Date | string, format?: string): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n if (isNaN(d.getTime())) {\n return String(date);\n }\n\n switch (format) {\n case 'iso':\n return d.toISOString();\n case 'time':\n return d.toLocaleTimeString();\n case 'datetime':\n return d.toLocaleString();\n default:\n return d.toLocaleDateString();\n }\n}\n\n/**\n * Format a number as currency.\n * @param amount - The numeric amount\n * @param currency - ISO 4217 currency code (default: 'USD')\n */\nexport function formatCurrency(amount: number, currency = 'USD'): string {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(amount);\n}\n\n/**\n * Generate a unique ID for DOM elements.\n * @param prefix - Optional prefix for the ID\n */\nexport function uniqueId(prefix = 'mcp'): string {\n return `${prefix}-${++idCounter}-${Date.now().toString(36)}`;\n}\n\n/**\n * Safely embed JSON data in HTML.\n * Escapes characters that could break out of script tags or HTML.\n */\nexport function jsonEmbed(data: unknown): string {\n return JSON.stringify(data)\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/'/g, '\\\\u0027');\n}\n\n/**\n * Create a TemplateHelpers object with all helper functions.\n * @deprecated Use createTemplateHelpers from @frontmcp/ui/runtime instead\n */\nexport function createTemplateHelpersLocal(): TemplateHelpers {\n return {\n escapeHtml,\n formatDate,\n formatCurrency,\n uniqueId,\n jsonEmbed,\n };\n}\n\n/**\n * Reset the ID counter (useful for testing).\n * @internal\n */\nexport function resetIdCounter(): void {\n idCounter = 0;\n}\n"]}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * UI Resource Template for ui:// URIs
3
+ *
4
+ * Single URI pattern for widget resources:
5
+ *
6
+ * Static Widget URI: ui://widget/{toolName}.html
7
+ * - Used by OpenAI at discovery/listing time
8
+ * - Returns the pre-compiled static HTML for the tool
9
+ * - Widget reads tool output from platform context (e.g., window.openai.toolOutput)
10
+ *
11
+ * The actual read logic is handled by ReadResourceFlow's ui:// interception
12
+ * in read-resource.flow.ts.
13
+ *
14
+ * IMPORTANT: Resources MUST be visible in resources/list for OpenAI ChatGPT
15
+ * to discover and render widgets.
16
+ */
17
+ /**
18
+ * Static Widget Resource Template for OpenAI discovery.
19
+ *
20
+ * URI format: ui://widget/{toolName}.html
21
+ *
22
+ * This is the format OpenAI expects in tools/list _meta.openai/outputTemplate.
23
+ * When OpenAI fetches this resource, we return the pre-compiled static HTML for the tool.
24
+ *
25
+ * The widget includes:
26
+ * - FrontMCP Bridge for reading tool output from platform context
27
+ * - CDN scripts for React/MDX/etc (based on uiType)
28
+ * - Pre-transpiled component embedded in HTML
29
+ *
30
+ * At runtime, the widget reads tool output from:
31
+ * - OpenAI: window.openai.toolOutput
32
+ * - Generic: window.__mcpToolOutput
33
+ */
34
+ export declare const StaticWidgetResourceTemplate: () => import("../../common/decorators/resource.decorator").FrontMcpResourceTemplateExecuteHandler;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ /**
3
+ * UI Resource Template for ui:// URIs
4
+ *
5
+ * Single URI pattern for widget resources:
6
+ *
7
+ * Static Widget URI: ui://widget/{toolName}.html
8
+ * - Used by OpenAI at discovery/listing time
9
+ * - Returns the pre-compiled static HTML for the tool
10
+ * - Widget reads tool output from platform context (e.g., window.openai.toolOutput)
11
+ *
12
+ * The actual read logic is handled by ReadResourceFlow's ui:// interception
13
+ * in read-resource.flow.ts.
14
+ *
15
+ * IMPORTANT: Resources MUST be visible in resources/list for OpenAI ChatGPT
16
+ * to discover and render widgets.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.StaticWidgetResourceTemplate = void 0;
20
+ const resource_decorator_1 = require("../../common/decorators/resource.decorator");
21
+ const template_helpers_1 = require("./template-helpers");
22
+ /**
23
+ * Static Widget Resource Template for OpenAI discovery.
24
+ *
25
+ * URI format: ui://widget/{toolName}.html
26
+ *
27
+ * This is the format OpenAI expects in tools/list _meta.openai/outputTemplate.
28
+ * When OpenAI fetches this resource, we return the pre-compiled static HTML for the tool.
29
+ *
30
+ * The widget includes:
31
+ * - FrontMCP Bridge for reading tool output from platform context
32
+ * - CDN scripts for React/MDX/etc (based on uiType)
33
+ * - Pre-transpiled component embedded in HTML
34
+ *
35
+ * At runtime, the widget reads tool output from:
36
+ * - OpenAI: window.openai.toolOutput
37
+ * - Generic: window.__mcpToolOutput
38
+ */
39
+ exports.StaticWidgetResourceTemplate = (0, resource_decorator_1.resourceTemplate)({
40
+ name: 'static-widget',
41
+ description: 'Static widget HTML for tool UI (OpenAI discovery)',
42
+ uriTemplate: 'ui://widget/{toolName}.html',
43
+ mimeType: 'text/html+skybridge',
44
+ })((uri, params) => {
45
+ // This handler should NOT be called because ReadResourceFlow
46
+ // intercepts ui:// URIs before reaching the resource instance.
47
+ return {
48
+ contents: [
49
+ {
50
+ uri,
51
+ mimeType: 'text/html+skybridge',
52
+ text: `<!DOCTYPE html>
53
+ <html>
54
+ <head><title>Widget Placeholder</title></head>
55
+ <body>
56
+ <p>Widget for tool: ${(0, template_helpers_1.escapeHtml)(String(params['toolName'] || 'unknown'))}</p>
57
+ <p>This is a placeholder. The actual widget HTML is served from the ToolUIRegistry cache.</p>
58
+ </body>
59
+ </html>`,
60
+ },
61
+ ],
62
+ };
63
+ });
64
+ //# sourceMappingURL=ui-resource-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-resource-template.js","sourceRoot":"","sources":["../../../../src/tool/ui/ui-resource-template.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,mFAA8E;AAC9E,yDAAgD;AAEhD;;;;;;;;;;;;;;;;GAgBG;AACU,QAAA,4BAA4B,GAAG,IAAA,qCAAgB,EAAC;IAC3D,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,mDAAmD;IAChE,WAAW,EAAE,6BAA6B;IAC1C,QAAQ,EAAE,qBAAqB;CAChC,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACjB,6DAA6D;IAC7D,+DAA+D;IAC/D,OAAO;QACL,QAAQ,EAAE;YACR;gBACE,GAAG;gBACH,QAAQ,EAAE,qBAAqB;gBAC/B,IAAI,EAAE;;;;wBAIU,IAAA,6BAAU,EAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,CAAC;;;QAGnE;aACD;SACF;KACF,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/**\n * UI Resource Template for ui:// URIs\n *\n * Single URI pattern for widget resources:\n *\n * Static Widget URI: ui://widget/{toolName}.html\n * - Used by OpenAI at discovery/listing time\n * - Returns the pre-compiled static HTML for the tool\n * - Widget reads tool output from platform context (e.g., window.openai.toolOutput)\n *\n * The actual read logic is handled by ReadResourceFlow's ui:// interception\n * in read-resource.flow.ts.\n *\n * IMPORTANT: Resources MUST be visible in resources/list for OpenAI ChatGPT\n * to discover and render widgets.\n */\n\nimport { resourceTemplate } from '../../common/decorators/resource.decorator';\nimport { escapeHtml } from './template-helpers';\n\n/**\n * Static Widget Resource Template for OpenAI discovery.\n *\n * URI format: ui://widget/{toolName}.html\n *\n * This is the format OpenAI expects in tools/list _meta.openai/outputTemplate.\n * When OpenAI fetches this resource, we return the pre-compiled static HTML for the tool.\n *\n * The widget includes:\n * - FrontMCP Bridge for reading tool output from platform context\n * - CDN scripts for React/MDX/etc (based on uiType)\n * - Pre-transpiled component embedded in HTML\n *\n * At runtime, the widget reads tool output from:\n * - OpenAI: window.openai.toolOutput\n * - Generic: window.__mcpToolOutput\n */\nexport const StaticWidgetResourceTemplate = resourceTemplate({\n name: 'static-widget',\n description: 'Static widget HTML for tool UI (OpenAI discovery)',\n uriTemplate: 'ui://widget/{toolName}.html',\n mimeType: 'text/html+skybridge',\n})((uri, params) => {\n // This handler should NOT be called because ReadResourceFlow\n // intercepts ui:// URIs before reaching the resource instance.\n return {\n contents: [\n {\n uri,\n mimeType: 'text/html+skybridge',\n text: `<!DOCTYPE html>\n<html>\n<head><title>Widget Placeholder</title></head>\n<body>\n <p>Widget for tool: ${escapeHtml(String(params['toolName'] || 'unknown'))}</p>\n <p>This is a placeholder. The actual widget HTML is served from the ToolUIRegistry cache.</p>\n</body>\n</html>`,\n },\n ],\n };\n});\n"]}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * UI Resource Handler
3
+ *
4
+ * Handles resources/read requests for ui:// URIs, serving widget HTML
5
+ * from the ToolUIRegistry.
6
+ *
7
+ * Supported URI format:
8
+ * - ui://widget/{toolName}.html - Static widget HTML (pre-compiled at startup)
9
+ *
10
+ * The static widget is registered at server startup for tools with
11
+ * `servingMode: 'static'`. The widget HTML includes the FrontMCP Bridge
12
+ * which reads tool output from the platform context at runtime.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * // Client requests widget HTML (OpenAI discovery)
17
+ * const result = await client.readResource({
18
+ * uri: 'ui://widget/get_weather.html'
19
+ * });
20
+ *
21
+ * // Returns pre-compiled widget with FrontMCP Bridge
22
+ * // Widget reads tool output from window.openai.toolOutput at runtime
23
+ * ```
24
+ */
25
+ import type { ReadResourceResult } from '@modelcontextprotocol/sdk/types.js';
26
+ import type { AIPlatformType } from '../../notification/notification.service';
27
+ import { type ToolUIRegistry } from '@frontmcp/ui/registry';
28
+ /**
29
+ * Result of handling a UI resource request
30
+ */
31
+ export interface UIResourceHandleResult {
32
+ /** Whether the URI was handled */
33
+ handled: boolean;
34
+ /** The resource result if handled successfully */
35
+ result?: ReadResourceResult;
36
+ /** Error message if handling failed */
37
+ error?: string;
38
+ }
39
+ /**
40
+ * Options for handling a UI resource read request
41
+ */
42
+ export interface HandleUIResourceOptions {
43
+ /** The UI resource URI */
44
+ uri: string;
45
+ /** The ToolUIRegistry containing cached HTML */
46
+ registry: ToolUIRegistry;
47
+ /** Platform type of the connected client */
48
+ platformType?: AIPlatformType;
49
+ }
50
+ /**
51
+ * Handle a UI resource read request
52
+ *
53
+ * @param uri - The UI resource URI
54
+ * @param registry - The ToolUIRegistry containing cached HTML
55
+ * @param platformType - Optional platform type for dynamic MIME type selection
56
+ * @returns Handle result with content or error
57
+ */
58
+ export declare function handleUIResourceRead(uri: string, registry: ToolUIRegistry, platformType?: AIPlatformType): UIResourceHandleResult;
59
+ /**
60
+ * Options for creating a UI resource handler
61
+ */
62
+ export interface UIResourceHandlerOptions {
63
+ /** ToolUIRegistry instance */
64
+ registry: ToolUIRegistry;
65
+ /** Optional custom error handler */
66
+ onError?: (error: string, uri: string) => void;
67
+ }
68
+ /**
69
+ * Create a UI resource handler function
70
+ *
71
+ * @param options - Handler options
72
+ * @returns Handler function that can be used in the read-resource flow
73
+ */
74
+ export declare function createUIResourceHandler(options: UIResourceHandlerOptions): (uri: string) => UIResourceHandleResult;