@frontmcp/sdk 0.4.1 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +110 -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 +336 -1632
  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 +89 -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 +77 -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 +248 -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 +78 -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 +110 -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 +83 -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 +83 -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 +60 -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 +59 -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 +161 -1112
  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 +51 -474
  377. package/src/tool/flows/tools-list.flow.js +121 -40
  378. package/src/tool/flows/tools-list.flow.js.map +1 -1
  379. package/src/tool/tool.events.d.ts +8 -1
  380. package/src/tool/tool.events.js.map +1 -1
  381. package/src/tool/tool.instance.d.ts +3 -1
  382. package/src/tool/tool.instance.js +17 -3
  383. package/src/tool/tool.instance.js.map +1 -1
  384. package/src/tool/tool.registry.d.ts +7 -1
  385. package/src/tool/tool.registry.js +26 -10
  386. package/src/tool/tool.registry.js.map +1 -1
  387. package/src/tool/tool.types.d.ts +4 -4
  388. package/src/tool/tool.types.js.map +1 -1
  389. package/src/tool/tool.utils.d.ts +3 -12
  390. package/src/tool/tool.utils.js +39 -193
  391. package/src/tool/tool.utils.js.map +1 -1
  392. package/src/tool/ui/index.d.ts +22 -0
  393. package/src/tool/ui/index.js +63 -0
  394. package/src/tool/ui/index.js.map +1 -0
  395. package/src/tool/ui/platform-adapters.d.ts +10 -0
  396. package/src/tool/ui/platform-adapters.js +18 -0
  397. package/src/tool/ui/platform-adapters.js.map +1 -0
  398. package/src/tool/ui/template-helpers.d.ts +46 -0
  399. package/src/tool/ui/template-helpers.js +112 -0
  400. package/src/tool/ui/template-helpers.js.map +1 -0
  401. package/src/tool/ui/ui-resource-template.d.ts +34 -0
  402. package/src/tool/ui/ui-resource-template.js +64 -0
  403. package/src/tool/ui/ui-resource-template.js.map +1 -0
  404. package/src/tool/ui/ui-resource.handler.d.ts +74 -0
  405. package/src/tool/ui/ui-resource.handler.js +129 -0
  406. package/src/tool/ui/ui-resource.handler.js.map +1 -0
  407. package/src/transport/adapters/transport.local.adapter.d.ts +2 -2
  408. package/src/transport/adapters/transport.local.adapter.js +28 -7
  409. package/src/transport/adapters/transport.local.adapter.js.map +1 -1
  410. package/src/transport/adapters/transport.sse.adapter.d.ts +2 -2
  411. package/src/transport/adapters/transport.sse.adapter.js +4 -3
  412. package/src/transport/adapters/transport.sse.adapter.js.map +1 -1
  413. package/src/transport/adapters/transport.streamable-http.adapter.d.ts +10 -3
  414. package/src/transport/adapters/transport.streamable-http.adapter.js +54 -8
  415. package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
  416. package/src/transport/flows/handle.sse.flow.d.ts +29 -63
  417. package/src/transport/flows/handle.sse.flow.js +78 -10
  418. package/src/transport/flows/handle.sse.flow.js.map +1 -1
  419. package/src/transport/flows/handle.stateless-http.flow.d.ts +29 -0
  420. package/src/transport/flows/handle.stateless-http.flow.js +102 -0
  421. package/src/transport/flows/handle.stateless-http.flow.js.map +1 -0
  422. package/src/transport/flows/handle.streamable-http.flow.d.ts +32 -64
  423. package/src/transport/flows/handle.streamable-http.flow.js +158 -26
  424. package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
  425. package/src/transport/legacy/legacy.sse.tranporter.d.ts +9 -0
  426. package/src/transport/legacy/legacy.sse.tranporter.js +17 -2
  427. package/src/transport/legacy/legacy.sse.tranporter.js.map +1 -1
  428. package/src/transport/mcp-handlers/call-tool-request.handler.js +27 -1
  429. package/src/transport/mcp-handlers/call-tool-request.handler.js.map +1 -1
  430. package/src/transport/mcp-handlers/complete-request.handler.d.ts +95 -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 +138 -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 +922 -207
  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 +80 -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 +82 -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 +82 -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 +47 -145
  452. package/src/transport/mcp-handlers/logging-set-level-request.handler.d.ts +66 -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 +72 -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 +57 -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 +57 -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
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ // file: libs/sdk/src/prompt/prompt.instance.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PromptInstance = void 0;
5
+ const common_1 = require("../common");
6
+ const hooks_utils_1 = require("../hooks/hooks.utils");
7
+ const prompt_utils_1 = require("./prompt.utils");
8
+ class PromptInstance extends common_1.PromptEntry {
9
+ providers;
10
+ scope;
11
+ hooks;
12
+ constructor(record, providers, owner) {
13
+ super(record);
14
+ this.owner = owner;
15
+ this.providers = providers;
16
+ this.name = record.metadata.name;
17
+ this.fullName = this.owner.id + ':' + this.name;
18
+ this.scope = this.providers.getActiveScope();
19
+ this.hooks = this.scope.providers.getHooksRegistry();
20
+ this.ready = this.initialize();
21
+ }
22
+ async initialize() {
23
+ // Register hooks for prompts:get-prompt, prompts:list-prompts flows
24
+ const hooks = (0, hooks_utils_1.normalizeHooksFromCls)(this.record.provide).filter((hook) => hook.metadata.flow === 'prompts:get-prompt' || hook.metadata.flow === 'prompts:list-prompts');
25
+ if (hooks.length > 0) {
26
+ await this.hooks.registerHooks(true, ...hooks);
27
+ }
28
+ }
29
+ getMetadata() {
30
+ return this.record.metadata;
31
+ }
32
+ /**
33
+ * Create a prompt context (class or function wrapper).
34
+ */
35
+ create(args, ctx) {
36
+ const metadata = this.metadata;
37
+ const providers = this.providers;
38
+ const scope = this.providers.getActiveScope();
39
+ const logger = scope.logger;
40
+ const authInfo = ctx.authInfo;
41
+ const promptCtorArgs = {
42
+ metadata,
43
+ args,
44
+ providers,
45
+ logger,
46
+ authInfo,
47
+ };
48
+ const record = this.record;
49
+ switch (record.kind) {
50
+ case common_1.PromptKind.CLASS_TOKEN:
51
+ return new record.provide(promptCtorArgs);
52
+ case common_1.PromptKind.FUNCTION:
53
+ return new FunctionPromptContext(record, promptCtorArgs);
54
+ default:
55
+ // Exhaustive check: TypeScript will error if a new PromptKind is added but not handled
56
+ // The assertion below catches runtime cases that TypeScript can't detect
57
+ throw new Error(`Unhandled prompt kind: ${record.kind}`);
58
+ }
59
+ }
60
+ /**
61
+ * Parse and validate arguments against the prompt's argument definitions.
62
+ * @param args Arguments from the MCP request
63
+ * @returns Validated arguments
64
+ */
65
+ parseArguments(args) {
66
+ const argDefs = this.metadata.arguments ?? [];
67
+ const result = {};
68
+ // Check required arguments
69
+ for (const argDef of argDefs) {
70
+ const value = args?.[argDef.name];
71
+ if (argDef.required && (value === undefined || value === null)) {
72
+ throw new Error(`Missing required argument: ${argDef.name}`);
73
+ }
74
+ if (value !== undefined) {
75
+ result[argDef.name] = value;
76
+ }
77
+ }
78
+ // Include any additional arguments not in the definition
79
+ if (args) {
80
+ for (const [key, value] of Object.entries(args)) {
81
+ if (!(key in result)) {
82
+ result[key] = value;
83
+ }
84
+ }
85
+ }
86
+ return result;
87
+ }
88
+ /**
89
+ * Convert the raw prompt return value into an MCP GetPromptResult.
90
+ */
91
+ parseOutput(raw) {
92
+ return (0, prompt_utils_1.buildParsedPromptResult)(raw, this.metadata);
93
+ }
94
+ /**
95
+ * Safe version of parseOutput that returns success/error instead of throwing.
96
+ */
97
+ safeParseOutput(raw) {
98
+ try {
99
+ return { success: true, data: this.parseOutput(raw) };
100
+ }
101
+ catch (error) {
102
+ return { success: false, error: error instanceof Error ? error : new Error(String(error)) };
103
+ }
104
+ }
105
+ }
106
+ exports.PromptInstance = PromptInstance;
107
+ /**
108
+ * Prompt context for function-decorated prompts.
109
+ */
110
+ class FunctionPromptContext extends common_1.PromptContext {
111
+ record;
112
+ constructor(record, args) {
113
+ super(args);
114
+ this.record = record;
115
+ }
116
+ execute(args) {
117
+ return this.record.provide(args, this);
118
+ }
119
+ }
120
+ //# sourceMappingURL=prompt.instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.instance.js","sourceRoot":"","sources":["../../../src/prompt/prompt.instance.ts"],"names":[],"mappings":"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","sourcesContent":["// file: libs/sdk/src/prompt/prompt.instance.ts\n\nimport {\n EntryOwnerRef,\n PromptEntry,\n PromptGetExtra,\n ParsedPromptResult,\n PromptSafeTransformResult,\n PromptRecord,\n PromptKind,\n PromptContext,\n PromptCtorArgs,\n PromptMetadata,\n PromptFunctionTokenRecord,\n} from '../common';\nimport ProviderRegistry from '../provider/provider.registry';\nimport HookRegistry from '../hooks/hook.registry';\nimport { Scope } from '../scope';\nimport { normalizeHooksFromCls } from '../hooks/hooks.utils';\nimport { buildParsedPromptResult } from './prompt.utils';\nimport { GetPromptResult } from '@modelcontextprotocol/sdk/types.js';\n\nexport class PromptInstance extends PromptEntry {\n private readonly providers: ProviderRegistry;\n readonly scope: Scope;\n readonly hooks: HookRegistry;\n\n constructor(record: PromptRecord, providers: ProviderRegistry, owner: EntryOwnerRef) {\n super(record);\n this.owner = owner;\n this.providers = providers;\n this.name = record.metadata.name;\n this.fullName = this.owner.id + ':' + this.name;\n this.scope = this.providers.getActiveScope();\n this.hooks = this.scope.providers.getHooksRegistry();\n\n this.ready = this.initialize();\n }\n\n protected async initialize(): Promise<void> {\n // Register hooks for prompts:get-prompt, prompts:list-prompts flows\n const hooks = normalizeHooksFromCls(this.record.provide).filter(\n (hook) => hook.metadata.flow === 'prompts:get-prompt' || hook.metadata.flow === 'prompts:list-prompts',\n );\n if (hooks.length > 0) {\n await this.hooks.registerHooks(true, ...hooks);\n }\n }\n\n getMetadata(): PromptMetadata {\n return this.record.metadata;\n }\n\n /**\n * Create a prompt context (class or function wrapper).\n */\n override create(args: Record<string, string>, ctx: PromptGetExtra): PromptContext {\n const metadata = this.metadata;\n const providers = this.providers;\n const scope = this.providers.getActiveScope();\n const logger = scope.logger;\n const authInfo = ctx.authInfo;\n\n const promptCtorArgs: PromptCtorArgs = {\n metadata,\n args,\n providers,\n logger,\n authInfo,\n };\n\n const record = this.record;\n\n switch (record.kind) {\n case PromptKind.CLASS_TOKEN:\n return new (record.provide as unknown as new (args: PromptCtorArgs) => PromptContext)(promptCtorArgs);\n case PromptKind.FUNCTION:\n return new FunctionPromptContext(record as PromptFunctionTokenRecord, promptCtorArgs);\n default:\n // Exhaustive check: TypeScript will error if a new PromptKind is added but not handled\n // The assertion below catches runtime cases that TypeScript can't detect\n throw new Error(`Unhandled prompt kind: ${(record as { kind: string }).kind}`);\n }\n }\n\n /**\n * Parse and validate arguments against the prompt's argument definitions.\n * @param args Arguments from the MCP request\n * @returns Validated arguments\n */\n override parseArguments(args?: Record<string, string>): Record<string, string> {\n const argDefs = this.metadata.arguments ?? [];\n const result: Record<string, string> = {};\n\n // Check required arguments\n for (const argDef of argDefs) {\n const value = args?.[argDef.name];\n if (argDef.required && (value === undefined || value === null)) {\n throw new Error(`Missing required argument: ${argDef.name}`);\n }\n if (value !== undefined) {\n result[argDef.name] = value;\n }\n }\n\n // Include any additional arguments not in the definition\n if (args) {\n for (const [key, value] of Object.entries(args)) {\n if (!(key in result)) {\n result[key] = value;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Convert the raw prompt return value into an MCP GetPromptResult.\n */\n override parseOutput(raw: unknown): ParsedPromptResult {\n return buildParsedPromptResult(raw, this.metadata);\n }\n\n /**\n * Safe version of parseOutput that returns success/error instead of throwing.\n */\n override safeParseOutput(raw: unknown): PromptSafeTransformResult<ParsedPromptResult> {\n try {\n return { success: true, data: this.parseOutput(raw) };\n } catch (error: unknown) {\n return { success: false, error: error instanceof Error ? error : new Error(String(error)) };\n }\n }\n}\n\n/**\n * Prompt context for function-decorated prompts.\n */\nclass FunctionPromptContext extends PromptContext {\n constructor(private readonly record: PromptFunctionTokenRecord, args: PromptCtorArgs) {\n super(args);\n }\n\n execute(args: Record<string, string>): Promise<GetPromptResult> {\n return this.record.provide(args, this) as Promise<GetPromptResult>;\n }\n}\n"]}
@@ -1,16 +1,83 @@
1
+ import { EntryOwnerRef, PromptEntry, PromptRecord, PromptRegistryInterface, PromptType } from '../common';
2
+ import { PromptChangeEvent } from './prompt.events';
1
3
  import ProviderRegistry from '../provider/provider.registry';
2
- import { PromptEntry, PromptRecord, PromptRegistryInterface, PromptType } from '../common';
3
- import { RegistryAbstract } from '../regsitry';
4
- export default class PromptRegistry extends RegistryAbstract<PromptEntry, PromptRecord, PromptType[]> implements PromptRegistryInterface {
5
- constructor(providers: ProviderRegistry, list: PromptType[]);
6
- protected buildMap(list: PromptType[]): {
7
- tokens: Set<import("../common").Reference<any>>;
8
- defs: Map<import("../common").Reference<any>, PromptRecord>;
9
- graph: Map<import("../common").Reference<any>, Set<import("../common").Reference<any>>>;
10
- };
11
- buildGraph(): void;
4
+ import { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';
5
+ import { PromptInstance } from './prompt.instance';
6
+ import { PromptExportOptions, IndexedPrompt } from './prompt.types';
7
+ import { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
8
+ export default class PromptRegistry extends RegistryAbstract<PromptInstance, // instances map holds PromptInstance
9
+ PromptRecord, PromptType[]> implements PromptRegistryInterface {
10
+ /** Who owns this registry (used for provenance). */
11
+ owner: EntryOwnerRef;
12
+ /** Prompts truly owned/constructed by THIS registry (with lineage applied) */
13
+ private localRows;
14
+ /** Adopted prompt rows from each child registry (references to the same instances) */
15
+ private adopted;
16
+ /** Children registries that we track */
17
+ private children;
18
+ private byQualifiedId;
19
+ private byName;
20
+ private byOwnerAndName;
21
+ private byOwner;
22
+ private version;
23
+ private emitter;
24
+ constructor(providers: ProviderRegistry, list: PromptType[], owner: EntryOwnerRef);
25
+ protected buildMap(list: PromptType[]): RegistryBuildMapResult<PromptRecord>;
26
+ protected buildGraph(): void;
12
27
  protected initialize(): Promise<void>;
13
- hasAny(): boolean;
14
- getPrompts(): never[];
28
+ /**
29
+ * Adopt prompts from a child registry. Parent runs after children are ready.
30
+ * We *reference* the child's prompt instances; no duplicates are created.
31
+ */
32
+ adoptFromChild(child: PromptRegistry, _childOwner: EntryOwnerRef): void;
33
+ /**
34
+ * Get all prompts
35
+ */
36
+ getPrompts(includeHidden?: boolean): PromptEntry[];
37
+ /**
38
+ * Get inline prompts (local only)
39
+ */
15
40
  getInlinePrompts(): PromptEntry[];
41
+ /**
42
+ * Find a prompt by exact name match
43
+ */
44
+ findByName(name: string): PromptInstance | undefined;
45
+ /**
46
+ * Find all prompts matching a name
47
+ */
48
+ findAllByName(name: string): PromptInstance[];
49
+ /** Internal snapshot of effective indexed rows (locals + adopted). */
50
+ listAllIndexed(): IndexedPrompt[];
51
+ /** List all instances (locals + adopted). */
52
+ listAllInstances(): readonly PromptInstance[];
53
+ /** List instances by owner path (e.g. "app:Portal/plugin:Okta") */
54
+ listByOwner(ownerPath: string): readonly PromptInstance[];
55
+ private reindex;
56
+ /**
57
+ * Produce unique, MCP-valid exported names.
58
+ */
59
+ exportResolvedNames(opts?: PromptExportOptions): Array<{
60
+ name: string;
61
+ instance: PromptInstance;
62
+ }>;
63
+ /** Lookup by the exported (resolved) name. */
64
+ getExported(name: string, opts?: PromptExportOptions): PromptInstance | undefined;
65
+ subscribe(opts: {
66
+ immediate?: boolean;
67
+ filter?: (i: PromptInstance) => boolean;
68
+ }, cb: (evt: PromptChangeEvent) => void): () => void;
69
+ private bump;
70
+ /** Build an IndexedPrompt row */
71
+ private makeRow;
72
+ /** Clone a child row and prepend lineage (with adjacent de-dup to avoid double prefixes). */
73
+ private relineage;
74
+ /** Best-effort provider id used for prefixing. */
75
+ private providerIdOf;
76
+ /** True if this registry (or adopted children) has any prompts. */
77
+ hasAny(): boolean;
78
+ /**
79
+ * Get the MCP capabilities for prompts.
80
+ * These are reported to clients during initialization.
81
+ */
82
+ getCapabilities(): Partial<ServerCapabilities>;
16
83
  }
@@ -1,35 +1,380 @@
1
1
  "use strict";
2
+ // file: libs/sdk/src/prompt/prompt.registry.ts
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
+ const tslib_1 = require("tslib");
5
+ const metadata_utils_1 = require("../utils/metadata.utils");
6
+ const prompt_events_1 = require("./prompt.events");
7
+ const prompt_utils_1 = require("./prompt.utils");
8
+ const token_utils_1 = require("../utils/token.utils");
3
9
  const regsitry_1 = require("../regsitry");
10
+ const prompt_instance_1 = require("./prompt.instance");
11
+ const prompt_types_1 = require("./prompt.types");
12
+ const get_prompt_flow_1 = tslib_1.__importDefault(require("./flows/get-prompt.flow"));
13
+ const prompts_list_flow_1 = tslib_1.__importDefault(require("./flows/prompts-list.flow"));
14
+ /** Maximum attempts for name disambiguation to prevent infinite loops */
15
+ const MAX_DISAMBIGUATE_ATTEMPTS = 10000;
4
16
  class PromptRegistry extends regsitry_1.RegistryAbstract {
5
- constructor(providers, list) {
6
- super('PromptRegistry', providers, list);
17
+ /** Who owns this registry (used for provenance). */
18
+ owner;
19
+ /** Prompts truly owned/constructed by THIS registry (with lineage applied) */
20
+ localRows = [];
21
+ /** Adopted prompt rows from each child registry (references to the same instances) */
22
+ adopted = new Map();
23
+ /** Children registries that we track */
24
+ children = new Set();
25
+ // ---- O(1) indexes over EFFECTIVE set (local + adopted) ----
26
+ byQualifiedId = new Map(); // qualifiedId -> row
27
+ byName = new Map(); // baseName -> rows
28
+ byOwnerAndName = new Map(); // "ownerKey:name" -> row
29
+ byOwner = new Map(); // ownerKey -> rows
30
+ // version + emitter
31
+ version = 0;
32
+ emitter = new prompt_events_1.PromptEmitter();
33
+ constructor(providers, list, owner) {
34
+ // disable auto so subclass fields initialize first
35
+ super('PromptRegistry', providers, list, false);
36
+ this.owner = owner;
37
+ // now it's safe to run the lifecycle
38
+ this.buildGraph();
39
+ this.ready = this.initialize();
7
40
  }
41
+ /* -------------------- Build-time: defs + dep checks -------------------- */
8
42
  buildMap(list) {
9
43
  const tokens = new Set();
10
44
  const defs = new Map();
11
45
  const graph = new Map();
12
- return {
13
- tokens,
14
- defs,
15
- graph,
16
- };
46
+ for (const raw of list) {
47
+ const rec = (0, prompt_utils_1.normalizePrompt)(raw);
48
+ const provide = rec.provide;
49
+ tokens.add(provide);
50
+ defs.set(provide, rec);
51
+ graph.set(provide, new Set());
52
+ }
53
+ return { tokens, defs, graph };
17
54
  }
18
55
  buildGraph() {
19
- // TODO: implement graph building
56
+ for (const token of this.tokens) {
57
+ const rec = this.defs.get(token);
58
+ const deps = (0, prompt_utils_1.promptDiscoveryDeps)(rec);
59
+ for (const d of deps) {
60
+ // Validate against hierarchical providers; throws early if missing
61
+ this.providers.get(d);
62
+ this.graph.get(token).add(d);
63
+ }
64
+ }
20
65
  }
21
- initialize() {
22
- return Promise.resolve();
66
+ /* -------------------- Initialize: create ONE PromptInstance per local prompt -------------------- */
67
+ async initialize() {
68
+ // Instantiate each local prompt once and store in this.instances
69
+ for (const token of this.tokens) {
70
+ const rec = this.defs.get(token);
71
+ // Single, authoritative instance per local prompt
72
+ const pi = new prompt_instance_1.PromptInstance(rec, this.providers, this.owner);
73
+ this.instances.set(token, pi);
74
+ const lineage = this.owner ? [this.owner] : [];
75
+ const row = this.makeRow(token, pi, lineage, this);
76
+ this.localRows.push(row);
77
+ }
78
+ // Adopt prompts from child app registries
79
+ const childAppRegistries = this.providers.getRegistries('AppRegistry');
80
+ childAppRegistries.forEach((appRegistry) => {
81
+ const apps = appRegistry.getApps();
82
+ for (const app of apps) {
83
+ const appPromptRegistries = app.providers.getRegistries('PromptRegistry');
84
+ appPromptRegistries
85
+ .filter((r) => r.owner.kind === 'app')
86
+ .forEach((appPromptRegistry) => {
87
+ this.adoptFromChild(appPromptRegistry, appPromptRegistry.owner);
88
+ });
89
+ }
90
+ });
91
+ // Adopt prompts from other child prompt registries
92
+ const childPromptRegistries = this.providers.getRegistries('PromptRegistry');
93
+ childPromptRegistries
94
+ .filter((r) => r !== this)
95
+ .forEach((promptRegistry) => {
96
+ this.adoptFromChild(promptRegistry, promptRegistry.owner);
97
+ });
98
+ // Build effective indexes from (locals + already adopted children)
99
+ this.reindex();
100
+ this.bump('reset');
101
+ // Register prompt flows with the scope
102
+ const scope = this.providers.getActiveScope();
103
+ await scope.registryFlows(get_prompt_flow_1.default, prompts_list_flow_1.default);
23
104
  }
24
- hasAny() {
25
- return this.tokens.size > 0;
105
+ /* -------------------- Adoption: reference child instances (no cloning) -------------------- */
106
+ /**
107
+ * Adopt prompts from a child registry. Parent runs after children are ready.
108
+ * We *reference* the child's prompt instances; no duplicates are created.
109
+ */
110
+ adoptFromChild(child, _childOwner) {
111
+ if (this.children.has(child))
112
+ return;
113
+ const childRows = child.listAllIndexed();
114
+ const prepend = this.owner ? [this.owner] : [];
115
+ const adoptedRows = childRows.map((r) => this.relineage(r, prepend));
116
+ this.adopted.set(child, adoptedRows);
117
+ this.children.add(child);
118
+ // keep live if child changes
119
+ child.subscribe({ immediate: false }, () => {
120
+ const latest = child.listAllIndexed().map((r) => this.relineage(r, prepend));
121
+ this.adopted.set(child, latest);
122
+ this.reindex();
123
+ this.bump('reset');
124
+ });
125
+ this.reindex();
126
+ this.bump('reset');
26
127
  }
27
- getPrompts() {
28
- return [];
128
+ /* -------------------- Public API -------------------- */
129
+ /**
130
+ * Get all prompts
131
+ */
132
+ getPrompts(includeHidden = false) {
133
+ const all = this.listAllIndexed();
134
+ return all
135
+ .filter((r) => {
136
+ const meta = r.instance.metadata;
137
+ const hidden = 'hideFromDiscovery' in meta && meta.hideFromDiscovery === true;
138
+ return !hidden || includeHidden;
139
+ })
140
+ .map((r) => r.instance);
29
141
  }
142
+ /**
143
+ * Get inline prompts (local only)
144
+ */
30
145
  getInlinePrompts() {
31
- return [];
146
+ return [...this.instances.values()];
147
+ }
148
+ /**
149
+ * Find a prompt by exact name match
150
+ */
151
+ findByName(name) {
152
+ const rows = this.byName.get(name);
153
+ return rows?.[0]?.instance;
154
+ }
155
+ /**
156
+ * Find all prompts matching a name
157
+ */
158
+ findAllByName(name) {
159
+ const rows = this.byName.get(name) ?? [];
160
+ return rows.map((r) => r.instance);
161
+ }
162
+ /** Internal snapshot of effective indexed rows (locals + adopted). */
163
+ listAllIndexed() {
164
+ return [...this.localRows, ...[...this.adopted.values()].flat()];
165
+ }
166
+ /** List all instances (locals + adopted). */
167
+ listAllInstances() {
168
+ return this.listAllIndexed().map((r) => r.instance);
169
+ }
170
+ /** List instances by owner path (e.g. "app:Portal/plugin:Okta") */
171
+ listByOwner(ownerPath) {
172
+ return (this.byOwner.get(ownerPath) ?? []).map((r) => r.instance);
173
+ }
174
+ /* -------------------- Indexing & lookups -------------------- */
175
+ reindex() {
176
+ const effective = this.listAllIndexed();
177
+ this.byQualifiedId.clear();
178
+ this.byName.clear();
179
+ this.byOwnerAndName.clear();
180
+ this.byOwner.clear();
181
+ for (const r of effective) {
182
+ this.byQualifiedId.set(r.qualifiedId, r);
183
+ const listByName = this.byName.get(r.baseName) ?? [];
184
+ listByName.push(r);
185
+ this.byName.set(r.baseName, listByName);
186
+ const byOwnerKey = this.byOwner.get(r.ownerKey) ?? [];
187
+ byOwnerKey.push(r);
188
+ this.byOwner.set(r.ownerKey, byOwnerKey);
189
+ const on = `${r.ownerKey}:${r.baseName}`;
190
+ if (!this.byOwnerAndName.has(on))
191
+ this.byOwnerAndName.set(on, r);
192
+ }
193
+ }
194
+ /* -------------------- Conflict-aware exported names -------------------- */
195
+ /**
196
+ * Produce unique, MCP-valid exported names.
197
+ */
198
+ exportResolvedNames(opts) {
199
+ const cfg = { ...prompt_types_1.DEFAULT_PROMPT_EXPORT_OPTS, ...(opts ?? {}) };
200
+ const rows = this.listAllIndexed().map((r) => {
201
+ const base = (0, prompt_utils_1.normalizeSegment)(r.baseName, cfg.case);
202
+ const isLocal = r.source === this;
203
+ const provider = (0, prompt_utils_1.normalizeProviderId)(this.providerIdOf(r.instance), cfg.case);
204
+ const ownerPath = (0, prompt_utils_1.normalizeOwnerPath)(r.ownerKey, cfg.case);
205
+ return { base, row: r, isLocal, provider, ownerPath };
206
+ });
207
+ // group by standardized base
208
+ const byBase = new Map();
209
+ for (const r of rows) {
210
+ const list = byBase.get(r.base) ?? [];
211
+ list.push(r);
212
+ byBase.set(r.base, list);
213
+ }
214
+ const out = new Map();
215
+ for (const [base, group] of byBase.entries()) {
216
+ if (group.length === 1) {
217
+ const g = group[0];
218
+ out.set((0, prompt_utils_1.ensureMaxLen)(base, cfg.maxLen), g.row.instance);
219
+ continue;
220
+ }
221
+ const locals = group.filter((g) => g.isLocal);
222
+ const children = group.filter((g) => !g.isLocal);
223
+ if (cfg.prefixChildrenOnConflict && locals.length > 0) {
224
+ // Locals
225
+ if (locals.length === 1) {
226
+ const localName = (0, prompt_utils_1.ensureMaxLen)(base, cfg.maxLen);
227
+ out.set(disambiguate(localName, out, cfg), locals[0].row.instance);
228
+ }
229
+ else {
230
+ for (const l of locals) {
231
+ const pref = (0, prompt_utils_1.normalizeOwnerPath)(l.ownerPath, cfg.case);
232
+ const name = (0, prompt_utils_1.ensureMaxLen)(`${pref}${(0, prompt_utils_1.sepFor)(cfg.case)}${base}`, cfg.maxLen);
233
+ out.set(disambiguate(name, out, cfg), l.row.instance);
234
+ }
235
+ }
236
+ // Children
237
+ for (const c of children) {
238
+ const pre = cfg.prefixSource === 'provider' ? c.provider ?? c.ownerPath : c.ownerPath;
239
+ const name = (0, prompt_utils_1.ensureMaxLen)(`${pre}${(0, prompt_utils_1.sepFor)(cfg.case)}${base}`, cfg.maxLen);
240
+ out.set(disambiguate(name, out, cfg), c.row.instance);
241
+ }
242
+ }
243
+ else {
244
+ // Prefix everyone by source
245
+ for (const r of group) {
246
+ const pre = cfg.prefixSource === 'provider' ? r.provider ?? r.ownerPath : r.ownerPath;
247
+ const name = (0, prompt_utils_1.ensureMaxLen)(`${pre}${(0, prompt_utils_1.sepFor)(cfg.case)}${base}`, cfg.maxLen);
248
+ out.set(disambiguate(name, out, cfg), r.row.instance);
249
+ }
250
+ }
251
+ }
252
+ return [...out.entries()].sort((a, b) => a[0].localeCompare(b[0])).map(([name, instance]) => ({ name, instance }));
253
+ function disambiguate(candidate, pool, cfg) {
254
+ if (!pool.has(candidate))
255
+ return candidate;
256
+ let n = 2;
257
+ while (n <= MAX_DISAMBIGUATE_ATTEMPTS) {
258
+ const withN = (0, prompt_utils_1.ensureMaxLen)(`${candidate}${(0, prompt_utils_1.sepFor)(cfg.case)}${n}`, cfg.maxLen);
259
+ if (!pool.has(withN))
260
+ return withN;
261
+ n++;
262
+ }
263
+ throw new Error(`Failed to disambiguate name "${candidate}" after ${MAX_DISAMBIGUATE_ATTEMPTS} attempts`);
264
+ }
265
+ }
266
+ /** Lookup by the exported (resolved) name. */
267
+ getExported(name, opts) {
268
+ const pairs = this.exportResolvedNames(opts);
269
+ return pairs.find((p) => p.name === name)?.instance;
270
+ }
271
+ /* -------------------- Subscriptions -------------------- */
272
+ subscribe(opts, cb) {
273
+ const filter = opts.filter ?? (() => true);
274
+ if (opts.immediate) {
275
+ cb({
276
+ kind: 'reset',
277
+ changeScope: 'global',
278
+ version: this.version,
279
+ snapshot: this.listAllInstances().filter(filter),
280
+ });
281
+ }
282
+ return this.emitter.on((e) => cb({ ...e, snapshot: this.listAllInstances().filter(filter) }));
283
+ }
284
+ bump(kind) {
285
+ const version = ++this.version;
286
+ this.emitter.emit({ kind, changeScope: 'global', version, snapshot: this.listAllInstances() });
287
+ }
288
+ /* -------------------- Helpers -------------------- */
289
+ /** Build an IndexedPrompt row */
290
+ makeRow(token, instance, lineage, source) {
291
+ const ownerKey = (0, prompt_utils_1.ownerKeyOf)(lineage);
292
+ const baseName = instance.name;
293
+ const qualifiedName = (0, prompt_utils_1.qualifiedNameOf)(lineage, baseName);
294
+ const qualifiedId = `${ownerKey}:${(0, token_utils_1.tokenName)(token)}`;
295
+ return {
296
+ token,
297
+ instance,
298
+ baseName,
299
+ lineage,
300
+ ownerKey,
301
+ qualifiedName,
302
+ qualifiedId,
303
+ source,
304
+ };
305
+ }
306
+ /** Clone a child row and prepend lineage (with adjacent de-dup to avoid double prefixes). */
307
+ relineage(row, prepend) {
308
+ const merged = [...prepend, ...row.lineage];
309
+ const lineage = dedupLineage(merged);
310
+ const ownerKey = (0, prompt_utils_1.ownerKeyOf)(lineage);
311
+ const qualifiedName = (0, prompt_utils_1.qualifiedNameOf)(lineage, row.baseName);
312
+ const qualifiedId = `${ownerKey}:${(0, token_utils_1.tokenName)(row.token)}`;
313
+ return {
314
+ token: row.token,
315
+ instance: row.instance, // REFERENCE the same instance
316
+ baseName: row.baseName,
317
+ lineage,
318
+ ownerKey,
319
+ qualifiedName,
320
+ qualifiedId,
321
+ source: row.source, // keep original source (who constructed instance)
322
+ };
323
+ }
324
+ /** Best-effort provider id used for prefixing. */
325
+ providerIdOf(inst) {
326
+ try {
327
+ const meta = inst.getMetadata?.();
328
+ if (!meta || typeof meta !== 'object')
329
+ return undefined;
330
+ const metaObj = meta;
331
+ const maybe = metaObj['providerId'] ?? metaObj['provider'] ?? metaObj['ownerId'];
332
+ if (typeof maybe === 'string' && maybe.length > 0)
333
+ return maybe;
334
+ const cls = metaObj['cls'];
335
+ if (cls && typeof cls === 'function') {
336
+ const id = (0, metadata_utils_1.getMetadata)('id', cls);
337
+ if (typeof id === 'string' && id.length > 0)
338
+ return id;
339
+ if ('name' in cls && typeof cls.name === 'string')
340
+ return cls.name;
341
+ }
342
+ }
343
+ catch {
344
+ // Silently ignore errors - provider ID lookup is best-effort for prefixing
345
+ // and should not fail the overall operation
346
+ }
347
+ return undefined;
348
+ }
349
+ /** True if this registry (or adopted children) has any prompts. */
350
+ hasAny() {
351
+ return this.listAllIndexed().length > 0 || this.tokens.size > 0;
352
+ }
353
+ /**
354
+ * Get the MCP capabilities for prompts.
355
+ * These are reported to clients during initialization.
356
+ */
357
+ getCapabilities() {
358
+ return this.hasAny()
359
+ ? {
360
+ prompts: {
361
+ // List change notifications are only supported when prompts are registered
362
+ listChanged: true,
363
+ },
364
+ }
365
+ : {};
32
366
  }
33
367
  }
34
368
  exports.default = PromptRegistry;
369
+ /* -------------------- lineage utility -------------------- */
370
+ /** Remove only adjacent duplicates like [adapter:x, adapter:x] → [adapter:x] */
371
+ function dedupLineage(l) {
372
+ const out = [];
373
+ for (const o of l) {
374
+ const last = out[out.length - 1];
375
+ if (!last || last.kind !== o.kind || last.id !== o.id)
376
+ out.push(o);
377
+ }
378
+ return out;
379
+ }
35
380
  //# sourceMappingURL=prompt.registry.js.map