@frontmcp/sdk 0.4.0 → 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 +111 -10
  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,6 +1,7 @@
1
1
  import { EntryLineage, Token } from '../common';
2
- import { ToolInstance } from "./tool.instance";
3
- import ToolRegistry from "./tool.registry";
2
+ import { ToolInstance } from './tool.instance';
3
+ import ToolRegistry from './tool.registry';
4
+ import type { NameCase } from '../utils/naming.utils';
4
5
  /** Internal augmented row: instance + provenance + token */
5
6
  export type IndexedTool = {
6
7
  token: Token;
@@ -12,10 +13,9 @@ export type IndexedTool = {
12
13
  ownerKey: string;
13
14
  qualifiedName: string;
14
15
  qualifiedId: string;
15
- /** which registry constructed the instance (the owner registry) */
16
+ /** which registry constructed the instance (the "owner" registry) */
16
17
  source: ToolRegistry;
17
18
  };
18
- export type NameCase = 'snake' | 'camel' | 'kebab' | 'dot';
19
19
  export type ExportNameOptions = {
20
20
  case?: NameCase;
21
21
  maxLen?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"tool.types.js","sourceRoot":"","sources":["../../../src/tool/tool.types.ts"],"names":[],"mappings":";;;AA4Ba,QAAA,mBAAmB,GAAgC;IAC9D,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,EAAE;IACV,wBAAwB,EAAE,IAAI;IAC9B,YAAY,EAAE,UAAU;CACzB,CAAC","sourcesContent":["import {EntryLineage, Token} from '../common';\nimport {ToolInstance} from \"./tool.instance\";\nimport ToolRegistry from \"./tool.registry\";\n\n\n/** Internal augmented row: instance + provenance + token */\nexport type IndexedTool = {\n token: Token;\n instance: ToolInstance;\n /** base tool name from metadata (unmodified) */\n baseName: string;\n /** lineage & qualified info */\n lineage: EntryLineage;\n ownerKey: string; // \"app:Portal/plugin:Okta\"\n qualifiedName: string; // \"app:Portal/plugin:Okta:toolName\"\n qualifiedId: string; // \"app:Portal/plugin:Okta:tokenName(<token>)\"\n /** which registry constructed the instance (the owner registry) */\n source: ToolRegistry;\n};\n\nexport type NameCase = 'snake' | 'camel' | 'kebab' | 'dot';\nexport type ExportNameOptions = {\n case?: NameCase; // default 'snake'\n maxLen?: number; // default 64\n prefixChildrenOnConflict?: boolean; // default true\n prefixSource?: 'provider' | 'owner'; // default 'provider'\n};\n\nexport const DEFAULT_EXPORT_OPTS: Required<ExportNameOptions> = {\n case: 'snake',\n maxLen: 64,\n prefixChildrenOnConflict: true,\n prefixSource: 'provider',\n};"]}
1
+ {"version":3,"file":"tool.types.js","sourceRoot":"","sources":["../../../src/tool/tool.types.ts"],"names":[],"mappings":";;;AA0Ba,QAAA,mBAAmB,GAAgC;IAC9D,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,EAAE;IACV,wBAAwB,EAAE,IAAI;IAC9B,YAAY,EAAE,UAAU;CACzB,CAAC","sourcesContent":["import { EntryLineage, Token } from '../common';\nimport { ToolInstance } from './tool.instance';\nimport ToolRegistry from './tool.registry';\nimport type { NameCase } from '../utils/naming.utils';\n\n/** Internal augmented row: instance + provenance + token */\nexport type IndexedTool = {\n token: Token;\n instance: ToolInstance;\n /** base tool name from metadata (unmodified) */\n baseName: string;\n /** lineage & qualified info */\n lineage: EntryLineage;\n ownerKey: string; // \"app:Portal/plugin:Okta\"\n qualifiedName: string; // \"app:Portal/plugin:Okta:toolName\"\n qualifiedId: string; // \"app:Portal/plugin:Okta:tokenName(<token>)\"\n /** which registry constructed the instance (the \"owner\" registry) */\n source: ToolRegistry;\n};\nexport type ExportNameOptions = {\n case?: NameCase; // default 'snake'\n maxLen?: number; // default 64\n prefixChildrenOnConflict?: boolean; // default true\n prefixSource?: 'provider' | 'owner'; // default 'provider'\n};\n\nexport const DEFAULT_EXPORT_OPTS: Required<ExportNameOptions> = {\n case: 'snake',\n maxLen: 64,\n prefixChildrenOnConflict: true,\n prefixSource: 'provider',\n};\n"]}
@@ -1,5 +1,6 @@
1
- import { ToolMetadata, ToolType, Token, ToolRecord, EntryLineage, ParsedToolResult } from '../common';
2
- import { NameCase } from './tool.types';
1
+ import { ToolMetadata, ToolType, Token, ToolRecord, ParsedToolResult } from '../common';
2
+ export { type NameCase, splitWords, toCase, sepFor, normalizeSegment, normalizeProviderId, normalizeOwnerPath, shortHash, ensureMaxLen, } from '../utils/naming.utils';
3
+ export { ownerKeyOf, qualifiedNameOf } from '../utils/lineage.utils';
3
4
  export declare function collectToolMetadata(cls: ToolType): ToolMetadata;
4
5
  export declare function normalizeTool(item: any): ToolRecord;
5
6
  /**
@@ -8,14 +9,4 @@ export declare function normalizeTool(item: any): ToolRecord;
8
9
  * - CLASS_TOKEN: deps come from the class constructor
9
10
  */
10
11
  export declare function toolDiscoveryDeps(rec: ToolRecord): Token[];
11
- export declare function splitWords(input: string): string[];
12
- export declare function toCase(words: string[], kind: NameCase): string;
13
- export declare function normalizeSegment(raw: string, kind: NameCase): string;
14
- export declare function normalizeProviderId(raw: string | undefined, kind: NameCase): string | undefined;
15
- export declare function normalizeOwnerPath(ownerKey: string, kind: NameCase): string;
16
- export declare function shortHash(s: string): string;
17
- export declare function ensureMaxLen(name: string, max: number): string;
18
- export declare function sepFor(kind: NameCase): string;
19
- export declare function ownerKeyOf(lineage: EntryLineage): string;
20
- export declare function qualifiedNameOf(lineage: EntryLineage, name: string): string;
21
12
  export declare function buildParsedToolResult(descriptor: any, raw: unknown): ParsedToolResult;
@@ -1,24 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.qualifiedNameOf = exports.ownerKeyOf = exports.ensureMaxLen = exports.shortHash = exports.normalizeOwnerPath = exports.normalizeProviderId = exports.normalizeSegment = exports.sepFor = exports.toCase = exports.splitWords = void 0;
3
4
  exports.collectToolMetadata = collectToolMetadata;
4
5
  exports.normalizeTool = normalizeTool;
5
6
  exports.toolDiscoveryDeps = toolDiscoveryDeps;
6
- exports.splitWords = splitWords;
7
- exports.toCase = toCase;
8
- exports.normalizeSegment = normalizeSegment;
9
- exports.normalizeProviderId = normalizeProviderId;
10
- exports.normalizeOwnerPath = normalizeOwnerPath;
11
- exports.shortHash = shortHash;
12
- exports.ensureMaxLen = ensureMaxLen;
13
- exports.sepFor = sepFor;
14
- exports.ownerKeyOf = ownerKeyOf;
15
- exports.qualifiedNameOf = qualifiedNameOf;
16
7
  exports.buildParsedToolResult = buildParsedToolResult;
17
8
  // file: libs/sdk/src/tool/tool.utils.ts
18
9
  const common_1 = require("../common");
19
10
  const token_utils_1 = require("../utils/token.utils");
20
11
  const metadata_utils_1 = require("../utils/metadata.utils");
12
+ const content_utils_1 = require("../utils/content.utils");
21
13
  const zod_1 = require("zod");
14
+ // Re-export shared naming utilities for backwards compatibility
15
+ var naming_utils_1 = require("../utils/naming.utils");
16
+ Object.defineProperty(exports, "splitWords", { enumerable: true, get: function () { return naming_utils_1.splitWords; } });
17
+ Object.defineProperty(exports, "toCase", { enumerable: true, get: function () { return naming_utils_1.toCase; } });
18
+ Object.defineProperty(exports, "sepFor", { enumerable: true, get: function () { return naming_utils_1.sepFor; } });
19
+ Object.defineProperty(exports, "normalizeSegment", { enumerable: true, get: function () { return naming_utils_1.normalizeSegment; } });
20
+ Object.defineProperty(exports, "normalizeProviderId", { enumerable: true, get: function () { return naming_utils_1.normalizeProviderId; } });
21
+ Object.defineProperty(exports, "normalizeOwnerPath", { enumerable: true, get: function () { return naming_utils_1.normalizeOwnerPath; } });
22
+ Object.defineProperty(exports, "shortHash", { enumerable: true, get: function () { return naming_utils_1.shortHash; } });
23
+ Object.defineProperty(exports, "ensureMaxLen", { enumerable: true, get: function () { return naming_utils_1.ensureMaxLen; } });
24
+ // Re-export shared lineage utilities for backwards compatibility
25
+ var lineage_utils_1 = require("../utils/lineage.utils");
26
+ Object.defineProperty(exports, "ownerKeyOf", { enumerable: true, get: function () { return lineage_utils_1.ownerKeyOf; } });
27
+ Object.defineProperty(exports, "qualifiedNameOf", { enumerable: true, get: function () { return lineage_utils_1.qualifiedNameOf; } });
22
28
  function collectToolMetadata(cls) {
23
29
  const extended = (0, metadata_utils_1.getMetadata)(common_1.extendedToolMetadata, cls);
24
30
  const seed = (extended ? { ...extended } : {});
@@ -67,110 +73,12 @@ function toolDiscoveryDeps(rec) {
67
73
  return (0, token_utils_1.depsOfClass)(rec.provide, 'discovery');
68
74
  }
69
75
  }
70
- // Allowed chars per MCP spec: a-zA-Z0-9 _ -. /
71
- const MCP_ALLOWED = /[A-Za-z0-9_\-./]/;
72
- function splitWords(input) {
73
- const parts = [];
74
- let buff = '';
75
- for (let i = 0; i < input.length; i++) {
76
- const ch = input[i];
77
- const isAlphaNum = /[A-Za-z0-9]/.test(ch);
78
- if (!isAlphaNum) {
79
- if (buff) {
80
- parts.push(buff);
81
- buff = '';
82
- }
83
- continue;
84
- }
85
- if (buff && /[a-z]/.test(buff[buff.length - 1]) && /[A-Z]/.test(ch)) {
86
- parts.push(buff);
87
- buff = ch;
88
- }
89
- else {
90
- buff += ch;
91
- }
92
- }
93
- if (buff)
94
- parts.push(buff);
95
- return parts;
96
- }
97
- function toCase(words, kind) {
98
- const safe = words.filter(Boolean);
99
- switch (kind) {
100
- case 'snake':
101
- return safe.map((w) => w.toLowerCase()).join('_');
102
- case 'kebab':
103
- return safe.map((w) => w.toLowerCase()).join('-');
104
- case 'dot':
105
- return safe.map((w) => w.toLowerCase()).join('.');
106
- case 'camel':
107
- if (safe.length === 0)
108
- return '';
109
- return (safe[0].toLowerCase() +
110
- safe
111
- .slice(1)
112
- .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())
113
- .join(''));
114
- }
115
- }
116
- function normalizeSegment(raw, kind) {
117
- const words = splitWords(raw);
118
- let cased = toCase(words, kind);
119
- cased = [...cased].filter((ch) => MCP_ALLOWED.test(ch)).join('');
120
- return cased || 'x';
121
- }
122
- function normalizeProviderId(raw, kind) {
123
- if (!raw)
124
- return undefined;
125
- const tokens = raw.split(/\W+/);
126
- const cased = toCase(tokens, kind);
127
- const safe = [...cased].filter((ch) => MCP_ALLOWED.test(ch)).join('');
128
- return safe || undefined;
129
- }
130
- function normalizeOwnerPath(ownerKey, kind) {
131
- const levels = ownerKey.split('/');
132
- const normLevels = levels.map((level) => {
133
- const parts = level.split(':'); // ["app","Portal"]
134
- return parts
135
- .map((p) => normalizeSegment(p, kind))
136
- .join(kind === 'snake' ? '_' : kind === 'kebab' ? '-' : kind === 'dot' ? '.' : '');
137
- });
138
- if (kind === 'camel')
139
- return normLevels.map((seg) => seg.charAt(0).toLowerCase() + seg.slice(1)).join('');
140
- const sep = kind === 'snake' ? '_' : kind === 'kebab' ? '-' : '.';
141
- return normLevels.join(sep);
142
- }
143
- function shortHash(s) {
144
- let h = 5381;
145
- for (let i = 0; i < s.length; i++)
146
- h = (h << 5) + h + s.charCodeAt(i);
147
- return (h >>> 0).toString(16).slice(-6).padStart(6, '0');
148
- }
149
- function ensureMaxLen(name, max) {
150
- if (name.length <= max)
151
- return name;
152
- const hash = shortHash(name);
153
- const lastSep = Math.max(name.lastIndexOf('_'), name.lastIndexOf('-'), name.lastIndexOf('.'), name.lastIndexOf('/'));
154
- const tail = lastSep > 0 ? name.slice(lastSep + 1) : name.slice(-Math.max(3, Math.min(16, Math.floor(max / 4))));
155
- const budget = Math.max(1, max - (1 + hash.length + 1 + tail.length));
156
- const prefix = name.slice(0, budget);
157
- return `${prefix}-${hash}-${tail}`.slice(0, max);
158
- }
159
- function sepFor(kind) {
160
- return kind === 'snake' ? '_' : kind === 'kebab' ? '-' : kind === 'dot' ? '.' : '';
161
- }
162
- function ownerKeyOf(lineage) {
163
- return lineage.map((o) => `${o.kind}:${o.id}`).join('/');
164
- }
165
- function qualifiedNameOf(lineage, name) {
166
- return `${ownerKeyOf(lineage)}:${name}`;
167
- }
168
76
  function buildParsedToolResult(descriptor, raw) {
169
77
  const content = [];
170
78
  let structuredData;
171
79
  // No outputSchema → the best effort: treat the result as structured JSON and text fallback
172
80
  if (!descriptor) {
173
- const structuredContent = getStructuredContent(raw);
81
+ const structuredContent = (0, content_utils_1.toStructuredContent)(raw);
174
82
  const sanitized = structuredContent ?? raw;
175
83
  content.push(makeJsonTextContent(sanitized));
176
84
  return { content, structuredContent };
@@ -187,7 +95,7 @@ function buildParsedToolResult(descriptor, raw) {
187
95
  content.push(...blocks);
188
96
  });
189
97
  // Check if we have at least one non-primitive item
190
- const hasNonPrimitive = parsedItems.some(item => !item.isPrimitive);
98
+ const hasNonPrimitive = parsedItems.some((item) => !item.isPrimitive);
191
99
  if (hasNonPrimitive && parsedItems.length > 1) {
192
100
  // Multiple items with at least one non-string/primitive: use numeric indices
193
101
  structuredData = {};
@@ -293,10 +201,12 @@ function parseSingleValue(descriptor, value) {
293
201
  }
294
202
  return {
295
203
  blocks: [makePrimitiveTextContent(value)],
296
- parsedValue: dateValue ? {
297
- iso: dateValue.toISOString(),
298
- timeInMilli: dateValue.getTime(),
299
- } : null,
204
+ parsedValue: dateValue
205
+ ? {
206
+ iso: dateValue.toISOString(),
207
+ timeInMilli: dateValue.getTime(),
208
+ }
209
+ : null,
300
210
  isPrimitive: false,
301
211
  };
302
212
  }
@@ -343,7 +253,7 @@ function parseSingleValue(descriptor, value) {
343
253
  }
344
254
  if (descriptor instanceof zod_1.ZodNumber) {
345
255
  const parseResult = descriptor.safeParse(value);
346
- const numValue = parseResult.success ? parseResult.data : (typeof value === 'number' ? value : Number(value));
256
+ const numValue = parseResult.success ? parseResult.data : typeof value === 'number' ? value : Number(value);
347
257
  return {
348
258
  blocks: [makePrimitiveTextContent(value)],
349
259
  parsedValue: isNaN(numValue) ? null : numValue,
@@ -361,7 +271,7 @@ function parseSingleValue(descriptor, value) {
361
271
  }
362
272
  if (descriptor instanceof zod_1.ZodBigInt) {
363
273
  const parseResult = descriptor.safeParse(value);
364
- const bigIntValue = parseResult.success ? parseResult.data : (typeof value === 'bigint' ? value : null);
274
+ const bigIntValue = parseResult.success ? parseResult.data : typeof value === 'bigint' ? value : null;
365
275
  return {
366
276
  blocks: [makePrimitiveTextContent(value)],
367
277
  parsedValue: bigIntValue !== null ? bigIntValue.toString() : null,
@@ -370,13 +280,15 @@ function parseSingleValue(descriptor, value) {
370
280
  }
371
281
  if (descriptor instanceof zod_1.ZodDate) {
372
282
  const parseResult = descriptor.safeParse(value);
373
- const dateValue = parseResult.success ? parseResult.data : (value instanceof Date ? value : null);
283
+ const dateValue = parseResult.success ? parseResult.data : value instanceof Date ? value : null;
374
284
  return {
375
285
  blocks: [makePrimitiveTextContent(value)],
376
- parsedValue: dateValue ? {
377
- iso: dateValue.toISOString(),
378
- timeInMilli: dateValue.getTime(),
379
- } : null,
286
+ parsedValue: dateValue
287
+ ? {
288
+ iso: dateValue.toISOString(),
289
+ timeInMilli: dateValue.getTime(),
290
+ }
291
+ : null,
380
292
  isPrimitive: false,
381
293
  };
382
294
  }
@@ -387,11 +299,11 @@ function parseSingleValue(descriptor, value) {
387
299
  // Use Zod to parse and validate
388
300
  const parseResult = descriptor.safeParse(value);
389
301
  if (parseResult.success) {
390
- parsedValue = getStructuredContent(parseResult.data);
302
+ parsedValue = (0, content_utils_1.toStructuredContent)(parseResult.data);
391
303
  }
392
304
  else {
393
305
  // Validation failed, use sanitized raw value
394
- parsedValue = getStructuredContent(value);
306
+ parsedValue = (0, content_utils_1.toStructuredContent)(value);
395
307
  }
396
308
  }
397
309
  else if (typeof descriptor === 'object' && descriptor !== null) {
@@ -400,19 +312,19 @@ function parseSingleValue(descriptor, value) {
400
312
  const schema = zod_1.z.object(descriptor);
401
313
  const parseResult = schema.safeParse(value);
402
314
  if (parseResult.success) {
403
- parsedValue = getStructuredContent(parseResult.data);
315
+ parsedValue = (0, content_utils_1.toStructuredContent)(parseResult.data);
404
316
  }
405
317
  else {
406
- parsedValue = getStructuredContent(value);
318
+ parsedValue = (0, content_utils_1.toStructuredContent)(value);
407
319
  }
408
320
  }
409
321
  catch {
410
322
  // Fallback to sanitized content
411
- parsedValue = getStructuredContent(value);
323
+ parsedValue = (0, content_utils_1.toStructuredContent)(value);
412
324
  }
413
325
  }
414
326
  else {
415
- parsedValue = getStructuredContent(value);
327
+ parsedValue = (0, content_utils_1.toStructuredContent)(value);
416
328
  }
417
329
  return {
418
330
  blocks: [makeJsonTextContent(parsedValue)],
@@ -451,70 +363,4 @@ function toContentArray(expectedType, value) {
451
363
  // If the value is null/undefined or doesn't match, we just skip it.
452
364
  return [];
453
365
  }
454
- /**
455
- * Sanitize arbitrary JS values into JSON-safe objects suitable for:
456
- * - MCP `structuredContent`
457
- * - JSON.stringify without circular reference errors
458
- *
459
- * Rules:
460
- * - Drop functions and symbols.
461
- * - BigInt → string.
462
- * - Date → ISO string.
463
- * - Error → { name, message, stack }.
464
- * - Map → plain object.
465
- * - Set → array.
466
- * - Protect against circular references via WeakSet.
467
- */
468
- function getStructuredContent(value) {
469
- const seen = new WeakSet();
470
- function sanitize(val) {
471
- if (typeof val === 'function' || typeof val === 'symbol') {
472
- return undefined;
473
- }
474
- if (typeof val === 'bigint') {
475
- return val.toString();
476
- }
477
- if (val instanceof Date) {
478
- return val.toISOString();
479
- }
480
- if (val instanceof Error) {
481
- return {
482
- name: val.name,
483
- message: val.message,
484
- stack: val.stack,
485
- };
486
- }
487
- if (val instanceof Map) {
488
- const obj = {};
489
- for (const [k, v] of val.entries()) {
490
- obj[String(k)] = sanitize(v);
491
- }
492
- return obj;
493
- }
494
- if (val instanceof Set) {
495
- return Array.from(val).map(sanitize);
496
- }
497
- if (Array.isArray(val)) {
498
- return val.map(sanitize);
499
- }
500
- if (val && typeof val === 'object') {
501
- if (seen.has(val)) {
502
- // Drop circular references
503
- return undefined;
504
- }
505
- seen.add(val);
506
- const sanitized = {};
507
- for (const [key, value] of Object.entries(val)) {
508
- const clean = sanitize(value);
509
- if (clean !== undefined) {
510
- sanitized[key] = clean;
511
- }
512
- }
513
- return sanitized;
514
- }
515
- // Primitives pass through
516
- return val;
517
- }
518
- return sanitize(value);
519
- }
520
366
  //# sourceMappingURL=tool.utils.js.map
@@ -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';