@frontmcp/sdk 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. package/README.md +30 -18
  2. package/package.json +20 -5
  3. package/src/app/app.registry.d.ts +3 -2
  4. package/src/app/app.registry.js +3 -1
  5. package/src/app/app.registry.js.map +1 -1
  6. package/src/app/instances/app.local.instance.js +2 -2
  7. package/src/app/instances/app.local.instance.js.map +1 -1
  8. package/src/auth/auth.registry.d.ts +34 -2
  9. package/src/auth/auth.registry.js +162 -24
  10. package/src/auth/auth.registry.js.map +1 -1
  11. package/src/auth/auth.utils.js +8 -9
  12. package/src/auth/auth.utils.js.map +1 -1
  13. package/src/auth/authorization/authorization.class.d.ts +125 -0
  14. package/src/auth/authorization/authorization.class.js +224 -0
  15. package/src/auth/authorization/authorization.class.js.map +1 -0
  16. package/src/auth/authorization/authorization.types.d.ts +300 -0
  17. package/src/auth/authorization/authorization.types.js +79 -0
  18. package/src/auth/authorization/authorization.types.js.map +1 -0
  19. package/src/auth/authorization/index.d.ts +5 -0
  20. package/src/auth/authorization/index.js +19 -0
  21. package/src/auth/authorization/index.js.map +1 -0
  22. package/src/auth/authorization/orchestrated.authorization.d.ts +242 -0
  23. package/src/auth/authorization/orchestrated.authorization.js +306 -0
  24. package/src/auth/authorization/orchestrated.authorization.js.map +1 -0
  25. package/src/auth/authorization/public.authorization.d.ts +91 -0
  26. package/src/auth/authorization/public.authorization.js +132 -0
  27. package/src/auth/authorization/public.authorization.js.map +1 -0
  28. package/src/auth/authorization/transparent.authorization.d.ts +130 -0
  29. package/src/auth/authorization/transparent.authorization.js +147 -0
  30. package/src/auth/authorization/transparent.authorization.js.map +1 -0
  31. package/src/auth/consent/consent.types.d.ts +111 -0
  32. package/src/auth/consent/consent.types.js +119 -0
  33. package/src/auth/consent/consent.types.js.map +1 -0
  34. package/src/auth/consent/index.d.ts +1 -0
  35. package/src/auth/consent/index.js +13 -0
  36. package/src/auth/consent/index.js.map +1 -0
  37. package/src/auth/detection/auth-provider-detection.d.ts +84 -0
  38. package/src/auth/detection/auth-provider-detection.js +230 -0
  39. package/src/auth/detection/auth-provider-detection.js.map +1 -0
  40. package/src/auth/detection/index.d.ts +1 -0
  41. package/src/auth/detection/index.js +15 -0
  42. package/src/auth/detection/index.js.map +1 -0
  43. package/src/auth/flows/auth.verify.flow.d.ts +110 -0
  44. package/src/auth/flows/auth.verify.flow.js +379 -0
  45. package/src/auth/flows/auth.verify.flow.js.map +1 -0
  46. package/src/auth/flows/oauth.authorize.flow.d.ts +118 -164
  47. package/src/auth/flows/oauth.authorize.flow.js +701 -33
  48. package/src/auth/flows/oauth.authorize.flow.js.map +1 -1
  49. package/src/auth/flows/oauth.callback.flow.d.ts +117 -0
  50. package/src/auth/flows/oauth.callback.flow.js +357 -0
  51. package/src/auth/flows/oauth.callback.flow.js.map +1 -0
  52. package/src/auth/flows/oauth.register.flow.d.ts +32 -125
  53. package/src/auth/flows/oauth.token.flow.d.ts +52 -154
  54. package/src/auth/flows/oauth.token.flow.js +193 -55
  55. package/src/auth/flows/oauth.token.flow.js.map +1 -1
  56. package/src/auth/flows/session.verify.flow.d.ts +66 -321
  57. package/src/auth/flows/session.verify.flow.js +107 -18
  58. package/src/auth/flows/session.verify.flow.js.map +1 -1
  59. package/src/auth/flows/well-known.jwks.flow.d.ts +34 -205
  60. package/src/auth/flows/well-known.jwks.flow.js +15 -8
  61. package/src/auth/flows/well-known.jwks.flow.js.map +1 -1
  62. package/src/auth/flows/well-known.oauth-authorization-server.flow.d.ts +48 -223
  63. package/src/auth/flows/well-known.oauth-authorization-server.flow.js +2 -3
  64. package/src/auth/flows/well-known.oauth-authorization-server.flow.js.map +1 -1
  65. package/src/auth/flows/well-known.prm.flow.d.ts +19 -120
  66. package/src/auth/flows/well-known.prm.flow.js +3 -4
  67. package/src/auth/flows/well-known.prm.flow.js.map +1 -1
  68. package/src/auth/instances/instance.local-primary-auth.d.ts +91 -4
  69. package/src/auth/instances/instance.local-primary-auth.js +236 -6
  70. package/src/auth/instances/instance.local-primary-auth.js.map +1 -1
  71. package/src/auth/instances/instance.remote-primary-auth.d.ts +4 -3
  72. package/src/auth/instances/instance.remote-primary-auth.js +2 -2
  73. package/src/auth/instances/instance.remote-primary-auth.js.map +1 -1
  74. package/src/auth/session/authorization-vault.d.ts +611 -0
  75. package/src/auth/session/authorization-vault.js +817 -0
  76. package/src/auth/session/authorization-vault.js.map +1 -0
  77. package/src/auth/session/authorization.store.d.ts +301 -0
  78. package/src/auth/session/authorization.store.js +323 -0
  79. package/src/auth/session/authorization.store.js.map +1 -0
  80. package/src/auth/session/encrypted-authorization-vault.d.ts +181 -0
  81. package/src/auth/session/encrypted-authorization-vault.js +493 -0
  82. package/src/auth/session/encrypted-authorization-vault.js.map +1 -0
  83. package/src/auth/session/index.d.ts +4 -4
  84. package/src/auth/session/index.js +11 -7
  85. package/src/auth/session/index.js.map +1 -1
  86. package/src/auth/session/session.schema.d.ts +1 -1
  87. package/src/auth/session/session.service.d.ts +1 -1
  88. package/src/auth/session/transport-session.manager.d.ts +101 -0
  89. package/src/auth/session/transport-session.manager.js +300 -0
  90. package/src/auth/session/transport-session.manager.js.map +1 -0
  91. package/src/auth/session/transport-session.types.d.ts +457 -0
  92. package/src/auth/session/transport-session.types.js +110 -0
  93. package/src/auth/session/transport-session.types.js.map +1 -0
  94. package/src/auth/session/utils/session-id.utils.d.ts +14 -2
  95. package/src/auth/session/utils/session-id.utils.js +68 -19
  96. package/src/auth/session/utils/session-id.utils.js.map +1 -1
  97. package/src/auth/session/vault-encryption.d.ts +189 -0
  98. package/src/auth/session/vault-encryption.js +263 -0
  99. package/src/auth/session/vault-encryption.js.map +1 -0
  100. package/src/auth/ui/base-layout.d.ts +188 -0
  101. package/src/auth/ui/base-layout.js +292 -0
  102. package/src/auth/ui/base-layout.js.map +1 -0
  103. package/src/auth/ui/htmx-templates.d.ts +135 -0
  104. package/src/auth/ui/htmx-templates.js +433 -0
  105. package/src/auth/ui/htmx-templates.js.map +1 -0
  106. package/src/auth/ui/index.d.ts +11 -0
  107. package/src/auth/ui/index.js +35 -0
  108. package/src/auth/ui/index.js.map +1 -0
  109. package/src/auth/utils/audience.validator.d.ts +129 -0
  110. package/src/auth/utils/audience.validator.js +196 -0
  111. package/src/auth/utils/audience.validator.js.map +1 -0
  112. package/src/auth/utils/index.d.ts +2 -0
  113. package/src/auth/utils/index.js +7 -0
  114. package/src/auth/utils/index.js.map +1 -0
  115. package/src/auth/utils/www-authenticate.utils.d.ts +97 -0
  116. package/src/auth/utils/www-authenticate.utils.js +183 -0
  117. package/src/auth/utils/www-authenticate.utils.js.map +1 -0
  118. package/src/common/common.schema.d.ts +2 -16
  119. package/src/common/constants.d.ts +3 -0
  120. package/src/common/constants.js +6 -1
  121. package/src/common/constants.js.map +1 -1
  122. package/src/common/decorators/decorator-utils.d.ts +131 -0
  123. package/src/common/decorators/decorator-utils.js +195 -0
  124. package/src/common/decorators/decorator-utils.js.map +1 -0
  125. package/src/common/decorators/front-mcp.decorator.js +3 -2
  126. package/src/common/decorators/front-mcp.decorator.js.map +1 -1
  127. package/src/common/decorators/hook.decorator.d.ts +58 -2
  128. package/src/common/decorators/hook.decorator.js +127 -17
  129. package/src/common/decorators/hook.decorator.js.map +1 -1
  130. package/src/common/decorators/plugin.decorator.d.ts +1 -1
  131. package/src/common/decorators/plugin.decorator.js +11 -10
  132. package/src/common/decorators/plugin.decorator.js.map +1 -1
  133. package/src/common/decorators/resource.decorator.d.ts +32 -3
  134. package/src/common/decorators/resource.decorator.js +46 -4
  135. package/src/common/decorators/resource.decorator.js.map +1 -1
  136. package/src/common/decorators/tool.decorator.d.ts +54 -5
  137. package/src/common/decorators/tool.decorator.js.map +1 -1
  138. package/src/common/dynamic/dynamic.plugin.d.ts +22 -11
  139. package/src/common/dynamic/dynamic.plugin.js +7 -1
  140. package/src/common/dynamic/dynamic.plugin.js.map +1 -1
  141. package/src/common/entries/prompt.entry.d.ts +46 -2
  142. package/src/common/entries/prompt.entry.js +10 -0
  143. package/src/common/entries/prompt.entry.js.map +1 -1
  144. package/src/common/entries/resource.entry.d.ts +69 -6
  145. package/src/common/entries/resource.entry.js +27 -3
  146. package/src/common/entries/resource.entry.js.map +1 -1
  147. package/src/common/entries/scope.entry.d.ts +5 -1
  148. package/src/common/entries/scope.entry.js +3 -3
  149. package/src/common/entries/scope.entry.js.map +1 -1
  150. package/src/common/flow/flow.utils.d.ts +56 -0
  151. package/src/common/flow/flow.utils.js +96 -0
  152. package/src/common/flow/flow.utils.js.map +1 -0
  153. package/src/common/index.d.ts +2 -2
  154. package/src/common/index.js +2 -2
  155. package/src/common/index.js.map +1 -1
  156. package/src/common/interfaces/execution-context.interface.d.ts +59 -0
  157. package/src/common/interfaces/execution-context.interface.js +81 -0
  158. package/src/common/interfaces/execution-context.interface.js.map +1 -0
  159. package/src/common/interfaces/flow.interface.d.ts +1 -1
  160. package/src/common/interfaces/flow.interface.js.map +1 -1
  161. package/src/common/interfaces/index.d.ts +1 -0
  162. package/src/common/interfaces/index.js +1 -0
  163. package/src/common/interfaces/index.js.map +1 -1
  164. package/src/common/interfaces/internal/primary-auth-provider.interface.d.ts +17 -2
  165. package/src/common/interfaces/internal/primary-auth-provider.interface.js +52 -4
  166. package/src/common/interfaces/internal/primary-auth-provider.interface.js.map +1 -1
  167. package/src/common/interfaces/internal/registry.interface.d.ts +16 -2
  168. package/src/common/interfaces/internal/registry.interface.js.map +1 -1
  169. package/src/common/interfaces/plugin.interface.js.map +1 -1
  170. package/src/common/interfaces/prompt.interface.d.ts +53 -4
  171. package/src/common/interfaces/prompt.interface.js +78 -0
  172. package/src/common/interfaces/prompt.interface.js.map +1 -1
  173. package/src/common/interfaces/resource.interface.d.ts +47 -17
  174. package/src/common/interfaces/resource.interface.js +53 -0
  175. package/src/common/interfaces/resource.interface.js.map +1 -1
  176. package/src/common/interfaces/tool.interface.d.ts +39 -22
  177. package/src/common/interfaces/tool.interface.js +61 -34
  178. package/src/common/interfaces/tool.interface.js.map +1 -1
  179. package/src/common/metadata/adapter.metadata.d.ts +1 -9
  180. package/src/common/metadata/app.metadata.d.ts +425 -730
  181. package/src/common/metadata/auth-provider.metadata.d.ts +2 -12
  182. package/src/common/metadata/flow.metadata.d.ts +10 -25
  183. package/src/common/metadata/front-mcp.metadata.d.ts +602 -1023
  184. package/src/common/metadata/front-mcp.metadata.js +6 -4
  185. package/src/common/metadata/front-mcp.metadata.js.map +1 -1
  186. package/src/common/metadata/hook.metadata.d.ts +1 -1
  187. package/src/common/metadata/hook.metadata.js.map +1 -1
  188. package/src/common/metadata/index.d.ts +1 -0
  189. package/src/common/metadata/index.js +1 -0
  190. package/src/common/metadata/index.js.map +1 -1
  191. package/src/common/metadata/logger.metadata.d.ts +1 -9
  192. package/src/common/metadata/plugin.metadata.d.ts +8 -30
  193. package/src/common/metadata/prompt.metadata.d.ts +4 -161
  194. package/src/common/metadata/provider.metadata.d.ts +2 -12
  195. package/src/common/metadata/resource.metadata.d.ts +6 -98
  196. package/src/common/metadata/resource.metadata.js +15 -6
  197. package/src/common/metadata/resource.metadata.js.map +1 -1
  198. package/src/common/metadata/tool-ui.metadata.d.ts +10 -0
  199. package/src/common/metadata/tool-ui.metadata.js +12 -0
  200. package/src/common/metadata/tool-ui.metadata.js.map +1 -0
  201. package/src/common/metadata/tool.metadata.d.ts +78 -199
  202. package/src/common/metadata/tool.metadata.js +11 -14
  203. package/src/common/metadata/tool.metadata.js.map +1 -1
  204. package/src/common/providers/base-config.provider.d.ts +84 -0
  205. package/src/common/providers/base-config.provider.js +128 -0
  206. package/src/common/providers/base-config.provider.js.map +1 -0
  207. package/src/common/records/plugin.record.d.ts +5 -6
  208. package/src/common/records/plugin.record.js.map +1 -1
  209. package/src/common/records/prompt.record.js.map +1 -1
  210. package/src/common/records/resource.record.d.ts +17 -1
  211. package/src/common/records/resource.record.js +12 -6
  212. package/src/common/records/resource.record.js.map +1 -1
  213. package/src/common/records/tool.record.js.map +1 -1
  214. package/src/common/schemas/annotated-class.schema.d.ts +9 -9
  215. package/src/common/schemas/annotated-class.schema.js +92 -27
  216. package/src/common/schemas/annotated-class.schema.js.map +1 -1
  217. package/src/common/schemas/http-input.schema.d.ts +6 -30
  218. package/src/common/schemas/http-output.schema.d.ts +326 -1630
  219. package/src/common/schemas/http-output.schema.js +39 -1
  220. package/src/common/schemas/http-output.schema.js.map +1 -1
  221. package/src/common/tokens/front-mcp.tokens.js +4 -1
  222. package/src/common/tokens/front-mcp.tokens.js.map +1 -1
  223. package/src/common/tokens/resource.tokens.d.ts +2 -0
  224. package/src/common/tokens/resource.tokens.js +4 -1
  225. package/src/common/tokens/resource.tokens.js.map +1 -1
  226. package/src/common/tokens/tool.tokens.d.ts +2 -0
  227. package/src/common/tokens/tool.tokens.js +2 -0
  228. package/src/common/tokens/tool.tokens.js.map +1 -1
  229. package/src/common/types/auth/jwt.types.d.ts +5 -31
  230. package/src/common/types/auth/session.types.d.ts +97 -192
  231. package/src/common/types/auth/session.types.js +24 -11
  232. package/src/common/types/auth/session.types.js.map +1 -1
  233. package/src/common/types/options/auth.options.d.ts +1013 -490
  234. package/src/common/types/options/auth.options.js +554 -36
  235. package/src/common/types/options/auth.options.js.map +1 -1
  236. package/src/common/types/options/http.options.d.ts +1 -9
  237. package/src/common/types/options/logging.options.d.ts +7 -13
  238. package/src/common/types/options/logging.options.js +4 -0
  239. package/src/common/types/options/logging.options.js.map +1 -1
  240. package/src/common/types/options/server-info.options.d.ts +3 -31
  241. package/src/common/types/options/session.options.d.ts +90 -10
  242. package/src/common/types/options/session.options.js +26 -3
  243. package/src/common/types/options/session.options.js.map +1 -1
  244. package/src/common/utils/decide-request-intent.utils.d.ts +8 -46
  245. package/src/common/utils/decide-request-intent.utils.js +88 -23
  246. package/src/common/utils/decide-request-intent.utils.js.map +1 -1
  247. package/src/completion/flows/complete.flow.d.ts +74 -0
  248. package/src/completion/flows/complete.flow.js +199 -0
  249. package/src/completion/flows/complete.flow.js.map +1 -0
  250. package/src/errors/authorization-required.error.d.ts +189 -0
  251. package/src/errors/authorization-required.error.js +274 -0
  252. package/src/errors/authorization-required.error.js.map +1 -0
  253. package/src/errors/index.d.ts +2 -1
  254. package/src/errors/index.js +17 -1
  255. package/src/errors/index.js.map +1 -1
  256. package/src/errors/mcp.error.d.ts +101 -1
  257. package/src/errors/mcp.error.js +147 -2
  258. package/src/errors/mcp.error.js.map +1 -1
  259. package/src/flows/flow.instance.js +4 -3
  260. package/src/flows/flow.instance.js.map +1 -1
  261. package/src/flows/flow.registry.js.map +1 -1
  262. package/src/flows/flow.stages.js +14 -11
  263. package/src/flows/flow.stages.js.map +1 -1
  264. package/src/front-mcp/front-mcp.providers.d.ts +464 -102
  265. package/src/front-mcp/front-mcp.providers.js +3 -5
  266. package/src/front-mcp/front-mcp.providers.js.map +1 -1
  267. package/src/hooks/hook.instance.d.ts +1 -1
  268. package/src/hooks/hook.instance.js +5 -2
  269. package/src/hooks/hook.instance.js.map +1 -1
  270. package/src/hooks/hook.registry.js +7 -5
  271. package/src/hooks/hook.registry.js.map +1 -1
  272. package/src/index.d.ts +28 -9
  273. package/src/index.js +5 -1
  274. package/src/index.js.map +1 -1
  275. package/src/logger/instances/instance.logger.js +3 -2
  276. package/src/logger/instances/instance.logger.js.map +1 -1
  277. package/src/logger/logger.registry.js +7 -2
  278. package/src/logger/logger.registry.js.map +1 -1
  279. package/src/logging/flows/set-level.flow.d.ts +62 -0
  280. package/src/logging/flows/set-level.flow.js +108 -0
  281. package/src/logging/flows/set-level.flow.js.map +1 -0
  282. package/src/mcp-apps/csp.d.ts +111 -0
  283. package/src/mcp-apps/csp.js +267 -0
  284. package/src/mcp-apps/csp.js.map +1 -0
  285. package/src/mcp-apps/index.d.ts +23 -0
  286. package/src/mcp-apps/index.js +91 -0
  287. package/src/mcp-apps/index.js.map +1 -0
  288. package/src/mcp-apps/schemas.d.ts +403 -0
  289. package/src/mcp-apps/schemas.js +345 -0
  290. package/src/mcp-apps/schemas.js.map +1 -0
  291. package/src/mcp-apps/template.d.ts +94 -0
  292. package/src/mcp-apps/template.js +419 -0
  293. package/src/mcp-apps/template.js.map +1 -0
  294. package/src/mcp-apps/types.d.ts +323 -0
  295. package/src/mcp-apps/types.js +59 -0
  296. package/src/mcp-apps/types.js.map +1 -0
  297. package/src/notification/index.d.ts +1 -0
  298. package/src/notification/index.js +13 -0
  299. package/src/notification/index.js.map +1 -0
  300. package/src/notification/notification.service.d.ts +378 -0
  301. package/src/notification/notification.service.js +727 -0
  302. package/src/notification/notification.service.js.map +1 -0
  303. package/src/plugin/plugin.registry.js +12 -9
  304. package/src/plugin/plugin.registry.js.map +1 -1
  305. package/src/prompt/flows/get-prompt.flow.d.ts +153 -0
  306. package/src/prompt/flows/get-prompt.flow.js +214 -0
  307. package/src/prompt/flows/get-prompt.flow.js.map +1 -0
  308. package/src/prompt/flows/prompts-list.flow.d.ts +67 -0
  309. package/src/prompt/flows/prompts-list.flow.js +176 -0
  310. package/src/prompt/flows/prompts-list.flow.js.map +1 -0
  311. package/src/prompt/index.d.ts +7 -0
  312. package/src/prompt/index.js +17 -0
  313. package/src/prompt/index.js.map +1 -0
  314. package/src/prompt/prompt.events.d.ts +17 -0
  315. package/src/prompt/prompt.events.js +25 -0
  316. package/src/prompt/prompt.events.js.map +1 -0
  317. package/src/prompt/prompt.instance.d.ts +30 -0
  318. package/src/prompt/prompt.instance.js +120 -0
  319. package/src/prompt/prompt.instance.js.map +1 -0
  320. package/src/prompt/prompt.registry.d.ts +79 -12
  321. package/src/prompt/prompt.registry.js +360 -15
  322. package/src/prompt/prompt.registry.js.map +1 -1
  323. package/src/prompt/prompt.types.d.ts +26 -0
  324. package/src/prompt/prompt.types.js +11 -0
  325. package/src/prompt/prompt.types.js.map +1 -0
  326. package/src/prompt/prompt.utils.d.ts +26 -0
  327. package/src/prompt/prompt.utils.js +136 -0
  328. package/src/prompt/prompt.utils.js.map +1 -0
  329. package/src/provider/provider.registry.d.ts +12 -5
  330. package/src/provider/provider.registry.js +30 -138
  331. package/src/provider/provider.registry.js.map +1 -1
  332. package/src/regsitry/registry.base.d.ts +1 -1
  333. package/src/regsitry/registry.base.js.map +1 -1
  334. package/src/resource/flows/read-resource.flow.d.ts +91 -0
  335. package/src/resource/flows/read-resource.flow.js +270 -0
  336. package/src/resource/flows/read-resource.flow.js.map +1 -0
  337. package/src/resource/flows/resource-templates-list.flow.d.ts +64 -0
  338. package/src/resource/flows/resource-templates-list.flow.js +191 -0
  339. package/src/resource/flows/resource-templates-list.flow.js.map +1 -0
  340. package/src/resource/flows/resources-list.flow.d.ts +64 -0
  341. package/src/resource/flows/resources-list.flow.js +196 -0
  342. package/src/resource/flows/resources-list.flow.js.map +1 -0
  343. package/src/resource/flows/subscribe-resource.flow.d.ts +45 -0
  344. package/src/resource/flows/subscribe-resource.flow.js +123 -0
  345. package/src/resource/flows/subscribe-resource.flow.js.map +1 -0
  346. package/src/resource/flows/unsubscribe-resource.flow.d.ts +44 -0
  347. package/src/resource/flows/unsubscribe-resource.flow.js +107 -0
  348. package/src/resource/flows/unsubscribe-resource.flow.js.map +1 -0
  349. package/src/resource/index.d.ts +8 -0
  350. package/src/resource/index.js +20 -0
  351. package/src/resource/index.js.map +1 -0
  352. package/src/resource/resource.events.d.ts +24 -0
  353. package/src/resource/resource.events.js +17 -0
  354. package/src/resource/resource.events.js.map +1 -0
  355. package/src/resource/resource.instance.d.ts +35 -0
  356. package/src/resource/resource.instance.js +163 -0
  357. package/src/resource/resource.instance.js.map +1 -0
  358. package/src/resource/resource.registry.d.ts +106 -12
  359. package/src/resource/resource.registry.js +449 -13
  360. package/src/resource/resource.registry.js.map +1 -1
  361. package/src/resource/resource.types.d.ts +35 -0
  362. package/src/resource/resource.types.js +11 -0
  363. package/src/resource/resource.types.js.map +1 -0
  364. package/src/resource/resource.utils.d.ts +30 -0
  365. package/src/resource/resource.utils.js +151 -0
  366. package/src/resource/resource.utils.js.map +1 -0
  367. package/src/scope/flows/http.request.flow.d.ts +48 -330
  368. package/src/scope/flows/http.request.flow.js +306 -78
  369. package/src/scope/flows/http.request.flow.js.map +1 -1
  370. package/src/scope/scope.instance.d.ts +12 -0
  371. package/src/scope/scope.instance.js +145 -15
  372. package/src/scope/scope.instance.js.map +1 -1
  373. package/src/tool/flows/call-tool.flow.d.ts +64 -1110
  374. package/src/tool/flows/call-tool.flow.js +303 -15
  375. package/src/tool/flows/call-tool.flow.js.map +1 -1
  376. package/src/tool/flows/tools-list.flow.d.ts +32 -473
  377. package/src/tool/flows/tools-list.flow.js +121 -40
  378. package/src/tool/flows/tools-list.flow.js.map +1 -1
  379. package/src/tool/tool.events.d.ts +8 -1
  380. package/src/tool/tool.events.js.map +1 -1
  381. package/src/tool/tool.instance.d.ts +3 -1
  382. package/src/tool/tool.instance.js +17 -3
  383. package/src/tool/tool.instance.js.map +1 -1
  384. package/src/tool/tool.registry.d.ts +7 -1
  385. package/src/tool/tool.registry.js +26 -10
  386. package/src/tool/tool.registry.js.map +1 -1
  387. package/src/tool/tool.types.d.ts +4 -4
  388. package/src/tool/tool.types.js.map +1 -1
  389. package/src/tool/tool.utils.d.ts +3 -12
  390. package/src/tool/tool.utils.js +39 -193
  391. package/src/tool/tool.utils.js.map +1 -1
  392. package/src/tool/ui/index.d.ts +22 -0
  393. package/src/tool/ui/index.js +63 -0
  394. package/src/tool/ui/index.js.map +1 -0
  395. package/src/tool/ui/platform-adapters.d.ts +10 -0
  396. package/src/tool/ui/platform-adapters.js +18 -0
  397. package/src/tool/ui/platform-adapters.js.map +1 -0
  398. package/src/tool/ui/template-helpers.d.ts +46 -0
  399. package/src/tool/ui/template-helpers.js +112 -0
  400. package/src/tool/ui/template-helpers.js.map +1 -0
  401. package/src/tool/ui/ui-resource-template.d.ts +34 -0
  402. package/src/tool/ui/ui-resource-template.js +64 -0
  403. package/src/tool/ui/ui-resource-template.js.map +1 -0
  404. package/src/tool/ui/ui-resource.handler.d.ts +74 -0
  405. package/src/tool/ui/ui-resource.handler.js +129 -0
  406. package/src/tool/ui/ui-resource.handler.js.map +1 -0
  407. package/src/transport/adapters/transport.local.adapter.d.ts +2 -2
  408. package/src/transport/adapters/transport.local.adapter.js +28 -7
  409. package/src/transport/adapters/transport.local.adapter.js.map +1 -1
  410. package/src/transport/adapters/transport.sse.adapter.d.ts +2 -2
  411. package/src/transport/adapters/transport.sse.adapter.js +4 -3
  412. package/src/transport/adapters/transport.sse.adapter.js.map +1 -1
  413. package/src/transport/adapters/transport.streamable-http.adapter.d.ts +10 -3
  414. package/src/transport/adapters/transport.streamable-http.adapter.js +54 -8
  415. package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
  416. package/src/transport/flows/handle.sse.flow.d.ts +29 -63
  417. package/src/transport/flows/handle.sse.flow.js +78 -10
  418. package/src/transport/flows/handle.sse.flow.js.map +1 -1
  419. package/src/transport/flows/handle.stateless-http.flow.d.ts +29 -0
  420. package/src/transport/flows/handle.stateless-http.flow.js +102 -0
  421. package/src/transport/flows/handle.stateless-http.flow.js.map +1 -0
  422. package/src/transport/flows/handle.streamable-http.flow.d.ts +32 -64
  423. package/src/transport/flows/handle.streamable-http.flow.js +158 -26
  424. package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
  425. package/src/transport/legacy/legacy.sse.tranporter.d.ts +9 -0
  426. package/src/transport/legacy/legacy.sse.tranporter.js +17 -2
  427. package/src/transport/legacy/legacy.sse.tranporter.js.map +1 -1
  428. package/src/transport/mcp-handlers/call-tool-request.handler.js +27 -1
  429. package/src/transport/mcp-handlers/call-tool-request.handler.js.map +1 -1
  430. package/src/transport/mcp-handlers/complete-request.handler.d.ts +69 -0
  431. package/src/transport/mcp-handlers/complete-request.handler.js +11 -0
  432. package/src/transport/mcp-handlers/complete-request.handler.js.map +1 -0
  433. package/src/transport/mcp-handlers/get-prompt-request.handler.d.ts +87 -0
  434. package/src/transport/mcp-handlers/get-prompt-request.handler.js +11 -0
  435. package/src/transport/mcp-handlers/get-prompt-request.handler.js.map +1 -0
  436. package/src/transport/mcp-handlers/index.d.ts +517 -208
  437. package/src/transport/mcp-handlers/index.js +39 -2
  438. package/src/transport/mcp-handlers/index.js.map +1 -1
  439. package/src/transport/mcp-handlers/initialize-request.handler.d.ts +1 -1
  440. package/src/transport/mcp-handlers/initialize-request.handler.js +73 -7
  441. package/src/transport/mcp-handlers/initialize-request.handler.js.map +1 -1
  442. package/src/transport/mcp-handlers/list-prompts-request.handler.d.ts +54 -0
  443. package/src/transport/mcp-handlers/list-prompts-request.handler.js +11 -0
  444. package/src/transport/mcp-handlers/list-prompts-request.handler.js.map +1 -0
  445. package/src/transport/mcp-handlers/list-resource-templates-request.handler.d.ts +51 -0
  446. package/src/transport/mcp-handlers/list-resource-templates-request.handler.js +12 -0
  447. package/src/transport/mcp-handlers/list-resource-templates-request.handler.js.map +1 -0
  448. package/src/transport/mcp-handlers/list-resources-request.handler.d.ts +51 -0
  449. package/src/transport/mcp-handlers/list-resources-request.handler.js +12 -0
  450. package/src/transport/mcp-handlers/list-resources-request.handler.js.map +1 -0
  451. package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +19 -146
  452. package/src/transport/mcp-handlers/logging-set-level-request.handler.d.ts +46 -0
  453. package/src/transport/mcp-handlers/logging-set-level-request.handler.js +34 -0
  454. package/src/transport/mcp-handlers/logging-set-level-request.handler.js.map +1 -0
  455. package/src/transport/mcp-handlers/mcp-handlers.types.d.ts +3 -7
  456. package/src/transport/mcp-handlers/mcp-handlers.types.js.map +1 -1
  457. package/src/transport/mcp-handlers/read-resource-request.handler.d.ts +46 -0
  458. package/src/transport/mcp-handlers/read-resource-request.handler.js +12 -0
  459. package/src/transport/mcp-handlers/read-resource-request.handler.js.map +1 -0
  460. package/src/transport/mcp-handlers/roots-list-changed-notification.handler.d.ts +11 -0
  461. package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js +26 -0
  462. package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js.map +1 -0
  463. package/src/transport/mcp-handlers/subscribe-request.handler.d.ts +37 -0
  464. package/src/transport/mcp-handlers/subscribe-request.handler.js +34 -0
  465. package/src/transport/mcp-handlers/subscribe-request.handler.js.map +1 -0
  466. package/src/transport/mcp-handlers/unsubscribe-request.handler.d.ts +37 -0
  467. package/src/transport/mcp-handlers/unsubscribe-request.handler.js +34 -0
  468. package/src/transport/mcp-handlers/unsubscribe-request.handler.js.map +1 -0
  469. package/src/transport/transport.local.js +7 -2
  470. package/src/transport/transport.local.js.map +1 -1
  471. package/src/transport/transport.registry.d.ts +30 -0
  472. package/src/transport/transport.registry.js +84 -1
  473. package/src/transport/transport.registry.js.map +1 -1
  474. package/src/transport/transport.types.d.ts +3 -3
  475. package/src/transport/transport.types.js.map +1 -1
  476. package/src/utils/content.utils.d.ts +48 -0
  477. package/src/utils/content.utils.js +194 -0
  478. package/src/utils/content.utils.js.map +1 -0
  479. package/src/utils/index.d.ts +8 -0
  480. package/src/utils/index.js +55 -0
  481. package/src/utils/index.js.map +1 -0
  482. package/src/utils/lineage.utils.d.ts +40 -0
  483. package/src/utils/lineage.utils.js +82 -0
  484. package/src/utils/lineage.utils.js.map +1 -0
  485. package/src/utils/naming.utils.d.ts +46 -0
  486. package/src/utils/naming.utils.js +136 -0
  487. package/src/utils/naming.utils.js.map +1 -0
  488. package/src/utils/types.utils.d.ts +2 -2
  489. package/src/utils/types.utils.js.map +1 -1
  490. package/src/utils/uri-template.utils.d.ts +57 -0
  491. package/src/utils/uri-template.utils.js +113 -0
  492. package/src/utils/uri-template.utils.js.map +1 -0
  493. package/src/utils/uri-validation.utils.d.ts +40 -0
  494. package/src/utils/uri-validation.utils.js +76 -0
  495. package/src/utils/uri-validation.utils.js.map +1 -0
  496. package/src/__test-utils__/fixtures/hook.fixtures.d.ts +0 -46
  497. package/src/__test-utils__/fixtures/hook.fixtures.js +0 -114
  498. package/src/__test-utils__/fixtures/hook.fixtures.js.map +0 -1
  499. package/src/__test-utils__/fixtures/index.d.ts +0 -7
  500. package/src/__test-utils__/fixtures/index.js +0 -11
  501. package/src/__test-utils__/fixtures/index.js.map +0 -1
  502. package/src/__test-utils__/fixtures/plugin.fixtures.d.ts +0 -46
  503. package/src/__test-utils__/fixtures/plugin.fixtures.js +0 -127
  504. package/src/__test-utils__/fixtures/plugin.fixtures.js.map +0 -1
  505. package/src/__test-utils__/fixtures/provider.fixtures.d.ts +0 -69
  506. package/src/__test-utils__/fixtures/provider.fixtures.js +0 -131
  507. package/src/__test-utils__/fixtures/provider.fixtures.js.map +0 -1
  508. package/src/__test-utils__/fixtures/scope.fixtures.d.ts +0 -14
  509. package/src/__test-utils__/fixtures/scope.fixtures.js +0 -59
  510. package/src/__test-utils__/fixtures/scope.fixtures.js.map +0 -1
  511. package/src/__test-utils__/fixtures/tool.fixtures.d.ts +0 -36
  512. package/src/__test-utils__/fixtures/tool.fixtures.js +0 -91
  513. package/src/__test-utils__/fixtures/tool.fixtures.js.map +0 -1
  514. package/src/__test-utils__/helpers/assertion.helpers.d.ts +0 -45
  515. package/src/__test-utils__/helpers/assertion.helpers.js +0 -153
  516. package/src/__test-utils__/helpers/assertion.helpers.js.map +0 -1
  517. package/src/__test-utils__/helpers/async.helpers.d.ts +0 -48
  518. package/src/__test-utils__/helpers/async.helpers.js +0 -112
  519. package/src/__test-utils__/helpers/async.helpers.js.map +0 -1
  520. package/src/__test-utils__/helpers/index.d.ts +0 -6
  521. package/src/__test-utils__/helpers/index.js +0 -10
  522. package/src/__test-utils__/helpers/index.js.map +0 -1
  523. package/src/__test-utils__/helpers/setup.helpers.d.ts +0 -54
  524. package/src/__test-utils__/helpers/setup.helpers.js +0 -106
  525. package/src/__test-utils__/helpers/setup.helpers.js.map +0 -1
  526. package/src/__test-utils__/index.d.ts +0 -9
  527. package/src/__test-utils__/index.js +0 -14
  528. package/src/__test-utils__/index.js.map +0 -1
  529. package/src/__test-utils__/mocks/flow-instance.mock.d.ts +0 -50
  530. package/src/__test-utils__/mocks/flow-instance.mock.js +0 -72
  531. package/src/__test-utils__/mocks/flow-instance.mock.js.map +0 -1
  532. package/src/__test-utils__/mocks/hook-registry.mock.d.ts +0 -25
  533. package/src/__test-utils__/mocks/hook-registry.mock.js +0 -65
  534. package/src/__test-utils__/mocks/hook-registry.mock.js.map +0 -1
  535. package/src/__test-utils__/mocks/index.d.ts +0 -8
  536. package/src/__test-utils__/mocks/index.js +0 -12
  537. package/src/__test-utils__/mocks/index.js.map +0 -1
  538. package/src/__test-utils__/mocks/plugin-registry.mock.d.ts +0 -43
  539. package/src/__test-utils__/mocks/plugin-registry.mock.js +0 -70
  540. package/src/__test-utils__/mocks/plugin-registry.mock.js.map +0 -1
  541. package/src/__test-utils__/mocks/provider-registry.mock.d.ts +0 -39
  542. package/src/__test-utils__/mocks/provider-registry.mock.js +0 -72
  543. package/src/__test-utils__/mocks/provider-registry.mock.js.map +0 -1
  544. package/src/__test-utils__/mocks/tool-registry.mock.d.ts +0 -43
  545. package/src/__test-utils__/mocks/tool-registry.mock.js +0 -79
  546. package/src/__test-utils__/mocks/tool-registry.mock.js.map +0 -1
  547. package/src/auth/path.utils.d.ts +0 -20
  548. package/src/auth/path.utils.js +0 -71
  549. package/src/auth/path.utils.js.map +0 -1
  550. package/src/common/decorators-old/async-with.decorator.d.ts +0 -10
  551. package/src/common/decorators-old/async-with.decorator.js +0 -24
  552. package/src/common/decorators-old/async-with.decorator.js.map +0 -1
  553. package/src/common/decorators-old/auth-hook.decorator.d.ts +0 -14
  554. package/src/common/decorators-old/auth-hook.decorator.js +0 -27
  555. package/src/common/decorators-old/auth-hook.decorator.js.map +0 -1
  556. package/src/common/decorators-old/session-hook.decorator.d.ts +0 -14
  557. package/src/common/decorators-old/session-hook.decorator.js +0 -27
  558. package/src/common/decorators-old/session-hook.decorator.js.map +0 -1
@@ -0,0 +1,67 @@
1
+ import { FlowBase, FlowRunOptions } from '../../common';
2
+ import 'reflect-metadata';
3
+ import { z } from 'zod';
4
+ declare const inputSchema: z.ZodObject<{
5
+ request: z.ZodObject<{
6
+ params: z.ZodOptional<z.ZodObject<{
7
+ _meta: z.ZodOptional<z.ZodObject<{
8
+ progressToken: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
9
+ }, z.core.$loose>>;
10
+ cursor: z.ZodOptional<z.ZodString>;
11
+ }, z.core.$loose>>;
12
+ method: z.ZodLiteral<"prompts/list">;
13
+ }, z.core.$strip>;
14
+ ctx: z.ZodUnknown;
15
+ }, z.core.$strip>;
16
+ declare const outputSchema: z.ZodObject<{
17
+ _meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
18
+ nextCursor: z.ZodOptional<z.ZodString>;
19
+ prompts: z.ZodArray<z.ZodObject<{
20
+ description: z.ZodOptional<z.ZodString>;
21
+ arguments: z.ZodOptional<z.ZodArray<z.ZodObject<{
22
+ name: z.ZodString;
23
+ description: z.ZodOptional<z.ZodString>;
24
+ required: z.ZodOptional<z.ZodBoolean>;
25
+ }, z.core.$strip>>>;
26
+ _meta: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
27
+ icons: z.ZodOptional<z.ZodArray<z.ZodObject<{
28
+ src: z.ZodString;
29
+ mimeType: z.ZodOptional<z.ZodString>;
30
+ sizes: z.ZodOptional<z.ZodArray<z.ZodString>>;
31
+ }, z.core.$strip>>>;
32
+ name: z.ZodString;
33
+ title: z.ZodOptional<z.ZodString>;
34
+ }, z.core.$strip>>;
35
+ }, z.core.$loose>;
36
+ declare const stateSchema: z.ZodObject<{
37
+ cursor: z.ZodOptional<z.ZodString>;
38
+ prompts: z.ZodArray<z.ZodObject<{
39
+ ownerName: z.ZodString;
40
+ prompt: z.ZodAny;
41
+ }, z.core.$strip>>;
42
+ resolvedPrompts: z.ZodArray<z.ZodObject<{
43
+ ownerName: z.ZodString;
44
+ prompt: z.ZodAny;
45
+ finalName: z.ZodString;
46
+ }, z.core.$strip>>;
47
+ }, z.core.$strip>;
48
+ declare const plan: {
49
+ readonly pre: ["parseInput"];
50
+ readonly execute: ["findPrompts", "resolveConflicts"];
51
+ readonly post: ["parsePrompts"];
52
+ };
53
+ declare global {
54
+ interface ExtendFlows {
55
+ 'prompts:list-prompts': FlowRunOptions<PromptsListFlow, typeof plan, typeof inputSchema, typeof outputSchema, typeof stateSchema>;
56
+ }
57
+ }
58
+ declare const name: "prompts:list-prompts";
59
+ export default class PromptsListFlow extends FlowBase<typeof name> {
60
+ logger: import("../../common").FrontMcpLogger;
61
+ private sample;
62
+ parseInput(): Promise<void>;
63
+ findPrompts(): Promise<void>;
64
+ resolveConflicts(): Promise<void>;
65
+ parsePrompts(): Promise<void>;
66
+ }
67
+ export {};
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ // file: libs/sdk/src/prompt/flows/prompts-list.flow.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("../../common");
6
+ require("reflect-metadata");
7
+ const zod_1 = require("zod");
8
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
9
+ const errors_1 = require("../../errors");
10
+ const inputSchema = zod_1.z.object({
11
+ request: types_js_1.ListPromptsRequestSchema,
12
+ ctx: zod_1.z.unknown(),
13
+ });
14
+ const outputSchema = types_js_1.ListPromptsResultSchema;
15
+ const stateSchema = zod_1.z.object({
16
+ cursor: zod_1.z.string().optional(),
17
+ prompts: zod_1.z.array(zod_1.z.object({
18
+ ownerName: zod_1.z.string(),
19
+ // z.any() used because PromptEntry is a complex abstract class type
20
+ prompt: zod_1.z.any(),
21
+ })),
22
+ resolvedPrompts: zod_1.z.array(zod_1.z.object({
23
+ ownerName: zod_1.z.string(),
24
+ // z.any() used because PromptEntry is a complex abstract class type
25
+ prompt: zod_1.z.any(),
26
+ finalName: zod_1.z.string(),
27
+ })),
28
+ });
29
+ const plan = {
30
+ pre: ['parseInput'],
31
+ execute: ['findPrompts', 'resolveConflicts'],
32
+ post: ['parsePrompts'],
33
+ };
34
+ const name = 'prompts:list-prompts';
35
+ const { Stage } = (0, common_1.FlowHooksOf)('prompts:list-prompts');
36
+ let PromptsListFlow = class PromptsListFlow extends common_1.FlowBase {
37
+ logger = this.scopeLogger.child('PromptsListFlow');
38
+ sample(arr, n = 5) {
39
+ return arr.slice(0, n);
40
+ }
41
+ async parseInput() {
42
+ this.logger.verbose('parseInput:start');
43
+ let method;
44
+ let params;
45
+ try {
46
+ const inputData = inputSchema.parse(this.rawInput);
47
+ method = inputData.request.method;
48
+ params = inputData.request.params;
49
+ }
50
+ catch (e) {
51
+ throw new errors_1.InvalidInputError('Invalid request format', e instanceof zod_1.z.ZodError ? e.issues : undefined);
52
+ }
53
+ if (method !== 'prompts/list') {
54
+ this.logger.warn(`parseInput: invalid method "${method}"`);
55
+ throw new errors_1.InvalidMethodError(method, 'prompts/list');
56
+ }
57
+ const cursor = params?.cursor;
58
+ if (cursor)
59
+ this.logger.verbose(`parseInput: cursor=${cursor}`);
60
+ this.state.set('cursor', cursor);
61
+ this.logger.verbose('parseInput:done');
62
+ }
63
+ async findPrompts() {
64
+ this.logger.info('findPrompts:start');
65
+ try {
66
+ const prompts = [];
67
+ // Get prompts from scope's prompt registry
68
+ const scopePrompts = this.scope.prompts.getPrompts();
69
+ this.logger.verbose(`findPrompts: scope prompts=${scopePrompts.length}`);
70
+ for (const prompt of scopePrompts) {
71
+ prompts.push({ ownerName: prompt.owner.id, prompt });
72
+ }
73
+ this.logger.info(`findPrompts: total prompts collected=${prompts.length}`);
74
+ if (prompts.length === 0) {
75
+ this.logger.warn('findPrompts: no prompts found');
76
+ }
77
+ this.state.set('prompts', prompts);
78
+ this.logger.verbose('findPrompts:done');
79
+ }
80
+ catch (error) {
81
+ this.logger.error('findPrompts: failed to collect prompts', error);
82
+ throw error;
83
+ }
84
+ }
85
+ async resolveConflicts() {
86
+ this.logger.verbose('resolveConflicts:start');
87
+ try {
88
+ const found = this.state.required.prompts;
89
+ const counts = new Map();
90
+ for (const { prompt } of found) {
91
+ const baseName = prompt.metadata.name;
92
+ counts.set(baseName, (counts.get(baseName) ?? 0) + 1);
93
+ }
94
+ const conflicts = new Set([...counts.entries()].filter(([, n]) => n > 1).map(([k]) => k));
95
+ if (conflicts.size > 0) {
96
+ const preview = this.sample(Array.from(conflicts)).join(', ');
97
+ const extra = conflicts.size > 5 ? `, +${conflicts.size - 5} more` : '';
98
+ this.logger.warn(`resolveConflicts: ${conflicts.size} name conflict(s) detected: ${preview}${extra}`);
99
+ }
100
+ else {
101
+ this.logger.info('resolveConflicts: no name conflicts detected');
102
+ }
103
+ const resolved = found.map(({ ownerName, prompt }) => {
104
+ const baseName = prompt.metadata.name;
105
+ const finalName = conflicts.has(baseName) ? `${ownerName}:${baseName}` : baseName;
106
+ return { ownerName, prompt, finalName };
107
+ });
108
+ this.state.set('resolvedPrompts', resolved);
109
+ this.logger.verbose('resolveConflicts:done');
110
+ }
111
+ catch (error) {
112
+ this.logger.error('resolveConflicts: failed to resolve conflicts', error);
113
+ throw error;
114
+ }
115
+ }
116
+ async parsePrompts() {
117
+ this.logger.verbose('parsePrompts:start');
118
+ try {
119
+ const resolved = this.state.required.resolvedPrompts;
120
+ const prompts = resolved.map(({ finalName, prompt }) => ({
121
+ name: finalName,
122
+ title: prompt.metadata.title,
123
+ description: prompt.metadata.description,
124
+ arguments: prompt.metadata.arguments,
125
+ icons: prompt.metadata.icons,
126
+ }));
127
+ const preview = this.sample(prompts.map((p) => p.name)).join(', ');
128
+ const extra = prompts.length > 5 ? `, +${prompts.length - 5} more` : '';
129
+ this.logger.info(`parsePrompts: prepared ${prompts.length} prompt descriptor(s): ${preview}${extra}`);
130
+ this.respond({ prompts });
131
+ this.logger.info('parsePrompts: response sent');
132
+ this.logger.verbose('parsePrompts:done');
133
+ }
134
+ catch (error) {
135
+ if (error instanceof common_1.FlowControl)
136
+ throw error;
137
+ this.logger.error('parsePrompts: failed to parse prompts', error);
138
+ throw error;
139
+ }
140
+ }
141
+ };
142
+ tslib_1.__decorate([
143
+ Stage('parseInput'),
144
+ tslib_1.__metadata("design:type", Function),
145
+ tslib_1.__metadata("design:paramtypes", []),
146
+ tslib_1.__metadata("design:returntype", Promise)
147
+ ], PromptsListFlow.prototype, "parseInput", null);
148
+ tslib_1.__decorate([
149
+ Stage('findPrompts'),
150
+ tslib_1.__metadata("design:type", Function),
151
+ tslib_1.__metadata("design:paramtypes", []),
152
+ tslib_1.__metadata("design:returntype", Promise)
153
+ ], PromptsListFlow.prototype, "findPrompts", null);
154
+ tslib_1.__decorate([
155
+ Stage('resolveConflicts'),
156
+ tslib_1.__metadata("design:type", Function),
157
+ tslib_1.__metadata("design:paramtypes", []),
158
+ tslib_1.__metadata("design:returntype", Promise)
159
+ ], PromptsListFlow.prototype, "resolveConflicts", null);
160
+ tslib_1.__decorate([
161
+ Stage('parsePrompts'),
162
+ tslib_1.__metadata("design:type", Function),
163
+ tslib_1.__metadata("design:paramtypes", []),
164
+ tslib_1.__metadata("design:returntype", Promise)
165
+ ], PromptsListFlow.prototype, "parsePrompts", null);
166
+ PromptsListFlow = tslib_1.__decorate([
167
+ (0, common_1.Flow)({
168
+ name,
169
+ plan,
170
+ inputSchema,
171
+ outputSchema,
172
+ access: 'authorized',
173
+ })
174
+ ], PromptsListFlow);
175
+ exports.default = PromptsListFlow;
176
+ //# sourceMappingURL=prompts-list.flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts-list.flow.js","sourceRoot":"","sources":["../../../../src/prompt/flows/prompts-list.flow.ts"],"names":[],"mappings":"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","sourcesContent":["// file: libs/sdk/src/prompt/flows/prompts-list.flow.ts\n\nimport { Flow, FlowBase, FlowControl, FlowHooksOf, FlowPlan, FlowRunOptions, PromptEntry } from '../../common';\nimport 'reflect-metadata';\nimport { z } from 'zod';\nimport { ListPromptsRequestSchema, ListPromptsResultSchema, Prompt } from '@modelcontextprotocol/sdk/types.js';\nimport { InvalidMethodError, InvalidInputError } from '../../errors';\n\nconst inputSchema = z.object({\n request: ListPromptsRequestSchema,\n ctx: z.unknown(),\n});\n\nconst outputSchema = ListPromptsResultSchema;\n\nconst stateSchema = z.object({\n cursor: z.string().optional(),\n prompts: z.array(\n z.object({\n ownerName: z.string(),\n // z.any() used because PromptEntry is a complex abstract class type\n prompt: z.any(),\n }),\n ),\n resolvedPrompts: z.array(\n z.object({\n ownerName: z.string(),\n // z.any() used because PromptEntry is a complex abstract class type\n prompt: z.any(),\n finalName: z.string(),\n }),\n ),\n});\n\ntype ResponsePromptItem = Prompt;\n\nconst plan = {\n pre: ['parseInput'],\n execute: ['findPrompts', 'resolveConflicts'],\n post: ['parsePrompts'],\n} as const satisfies FlowPlan<string>;\n\ndeclare global {\n interface ExtendFlows {\n 'prompts:list-prompts': FlowRunOptions<\n PromptsListFlow,\n typeof plan,\n typeof inputSchema,\n typeof outputSchema,\n typeof stateSchema\n >;\n }\n}\n\nconst name = 'prompts:list-prompts' as const;\nconst { Stage } = FlowHooksOf('prompts:list-prompts');\n\n@Flow({\n name,\n plan,\n inputSchema,\n outputSchema,\n access: 'authorized',\n})\nexport default class PromptsListFlow extends FlowBase<typeof name> {\n logger = this.scopeLogger.child('PromptsListFlow');\n\n private sample<T>(arr: T[], n = 5): T[] {\n return arr.slice(0, n);\n }\n\n @Stage('parseInput')\n async parseInput() {\n this.logger.verbose('parseInput:start');\n\n let method!: string;\n let params: { cursor?: string } | undefined;\n try {\n const inputData = inputSchema.parse(this.rawInput);\n method = inputData.request.method;\n params = inputData.request.params as { cursor?: string } | undefined;\n } catch (e) {\n throw new InvalidInputError('Invalid request format', e instanceof z.ZodError ? e.issues : undefined);\n }\n\n if (method !== 'prompts/list') {\n this.logger.warn(`parseInput: invalid method \"${method}\"`);\n throw new InvalidMethodError(method, 'prompts/list');\n }\n\n const cursor = params?.cursor;\n if (cursor) this.logger.verbose(`parseInput: cursor=${cursor}`);\n this.state.set('cursor', cursor);\n this.logger.verbose('parseInput:done');\n }\n\n @Stage('findPrompts')\n async findPrompts() {\n this.logger.info('findPrompts:start');\n\n try {\n const prompts: Array<{ ownerName: string; prompt: PromptEntry }> = [];\n\n // Get prompts from scope's prompt registry\n const scopePrompts = this.scope.prompts.getPrompts();\n this.logger.verbose(`findPrompts: scope prompts=${scopePrompts.length}`);\n\n for (const prompt of scopePrompts) {\n prompts.push({ ownerName: prompt.owner.id, prompt });\n }\n\n this.logger.info(`findPrompts: total prompts collected=${prompts.length}`);\n if (prompts.length === 0) {\n this.logger.warn('findPrompts: no prompts found');\n }\n\n this.state.set('prompts', prompts);\n this.logger.verbose('findPrompts:done');\n } catch (error) {\n this.logger.error('findPrompts: failed to collect prompts', error);\n throw error;\n }\n }\n\n @Stage('resolveConflicts')\n async resolveConflicts() {\n this.logger.verbose('resolveConflicts:start');\n\n try {\n const found = this.state.required.prompts;\n\n const counts = new Map<string, number>();\n for (const { prompt } of found) {\n const baseName = prompt.metadata.name;\n counts.set(baseName, (counts.get(baseName) ?? 0) + 1);\n }\n\n const conflicts = new Set<string>([...counts.entries()].filter(([, n]) => n > 1).map(([k]) => k));\n\n if (conflicts.size > 0) {\n const preview = this.sample(Array.from(conflicts)).join(', ');\n const extra = conflicts.size > 5 ? `, +${conflicts.size - 5} more` : '';\n this.logger.warn(`resolveConflicts: ${conflicts.size} name conflict(s) detected: ${preview}${extra}`);\n } else {\n this.logger.info('resolveConflicts: no name conflicts detected');\n }\n\n const resolved = found.map(({ ownerName, prompt }) => {\n const baseName = prompt.metadata.name;\n const finalName = conflicts.has(baseName) ? `${ownerName}:${baseName}` : baseName;\n return { ownerName, prompt, finalName };\n });\n\n this.state.set('resolvedPrompts', resolved);\n this.logger.verbose('resolveConflicts:done');\n } catch (error) {\n this.logger.error('resolveConflicts: failed to resolve conflicts', error);\n throw error;\n }\n }\n\n @Stage('parsePrompts')\n async parsePrompts() {\n this.logger.verbose('parsePrompts:start');\n\n try {\n const resolved = this.state.required.resolvedPrompts;\n\n const prompts: ResponsePromptItem[] = resolved.map(({ finalName, prompt }) => ({\n name: finalName,\n title: prompt.metadata.title,\n description: prompt.metadata.description,\n arguments: prompt.metadata.arguments,\n icons: prompt.metadata.icons,\n }));\n\n const preview = this.sample(prompts.map((p) => p.name)).join(', ');\n const extra = prompts.length > 5 ? `, +${prompts.length - 5} more` : '';\n this.logger.info(`parsePrompts: prepared ${prompts.length} prompt descriptor(s): ${preview}${extra}`);\n\n this.respond({ prompts });\n this.logger.info('parsePrompts: response sent');\n this.logger.verbose('parsePrompts:done');\n } catch (error) {\n if (error instanceof FlowControl) throw error;\n this.logger.error('parsePrompts: failed to parse prompts', error);\n throw error;\n }\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export { default as PromptRegistry } from './prompt.registry';
2
+ export { PromptInstance } from './prompt.instance';
3
+ export * from './prompt.types';
4
+ export * from './prompt.events';
5
+ export * from './prompt.utils';
6
+ export { default as GetPromptFlow } from './flows/get-prompt.flow';
7
+ export { default as PromptsListFlow } from './flows/prompts-list.flow';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ // file: libs/sdk/src/prompt/index.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PromptsListFlow = exports.GetPromptFlow = exports.PromptInstance = exports.PromptRegistry = void 0;
5
+ const tslib_1 = require("tslib");
6
+ var prompt_registry_1 = require("./prompt.registry");
7
+ Object.defineProperty(exports, "PromptRegistry", { enumerable: true, get: function () { return tslib_1.__importDefault(prompt_registry_1).default; } });
8
+ var prompt_instance_1 = require("./prompt.instance");
9
+ Object.defineProperty(exports, "PromptInstance", { enumerable: true, get: function () { return prompt_instance_1.PromptInstance; } });
10
+ tslib_1.__exportStar(require("./prompt.types"), exports);
11
+ tslib_1.__exportStar(require("./prompt.events"), exports);
12
+ tslib_1.__exportStar(require("./prompt.utils"), exports);
13
+ var get_prompt_flow_1 = require("./flows/get-prompt.flow");
14
+ Object.defineProperty(exports, "GetPromptFlow", { enumerable: true, get: function () { return tslib_1.__importDefault(get_prompt_flow_1).default; } });
15
+ var prompts_list_flow_1 = require("./flows/prompts-list.flow");
16
+ Object.defineProperty(exports, "PromptsListFlow", { enumerable: true, get: function () { return tslib_1.__importDefault(prompts_list_flow_1).default; } });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/prompt/index.ts"],"names":[],"mappings":";AAAA,qCAAqC;;;;AAErC,qDAA8D;AAArD,0IAAA,OAAO,OAAkB;AAClC,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,yDAA+B;AAC/B,0DAAgC;AAChC,yDAA+B;AAC/B,2DAAmE;AAA1D,yIAAA,OAAO,OAAiB;AACjC,+DAAuE;AAA9D,6IAAA,OAAO,OAAmB","sourcesContent":["// file: libs/sdk/src/prompt/index.ts\n\nexport { default as PromptRegistry } from './prompt.registry';\nexport { PromptInstance } from './prompt.instance';\nexport * from './prompt.types';\nexport * from './prompt.events';\nexport * from './prompt.utils';\nexport { default as GetPromptFlow } from './flows/get-prompt.flow';\nexport { default as PromptsListFlow } from './flows/prompts-list.flow';\n"]}
@@ -0,0 +1,17 @@
1
+ import { PromptInstance } from './prompt.instance';
2
+ export type PromptChangeKind = 'added' | 'updated' | 'removed' | 'reset';
3
+ export type PromptChangeEvent = {
4
+ kind: PromptChangeKind;
5
+ changeScope: 'global' | 'session';
6
+ sessionId?: string;
7
+ relatedRequestId?: string;
8
+ version: number;
9
+ snapshot: readonly PromptInstance[];
10
+ };
11
+ type Listener = (e: PromptChangeEvent) => void;
12
+ export declare class PromptEmitter {
13
+ private listeners;
14
+ on(l: Listener): () => void;
15
+ emit(e: PromptChangeEvent): void;
16
+ }
17
+ export {};
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ // file: libs/sdk/src/prompt/prompt.events.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PromptEmitter = void 0;
5
+ class PromptEmitter {
6
+ listeners = new Set();
7
+ on(l) {
8
+ this.listeners.add(l);
9
+ return () => this.listeners.delete(l);
10
+ }
11
+ emit(e) {
12
+ for (const l of [...this.listeners]) {
13
+ try {
14
+ l(e);
15
+ }
16
+ catch (err) {
17
+ // Log error but continue notifying other listeners
18
+ // Use safe logging to avoid Node.js 24 util.inspect bug with Zod errors
19
+ console.error('PromptEmitter listener error:', err instanceof Error ? err.message : 'Unknown error');
20
+ }
21
+ }
22
+ }
23
+ }
24
+ exports.PromptEmitter = PromptEmitter;
25
+ //# sourceMappingURL=prompt.events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.events.js","sourceRoot":"","sources":["../../../src/prompt/prompt.events.ts"],"names":[],"mappings":";AAAA,6CAA6C;;;AAiB7C,MAAa,aAAa;IAChB,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;IAExC,EAAE,CAAC,CAAW;QACZ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,CAAoB;QACvB,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,CAAC,CAAC,CAAC,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,mDAAmD;gBACnD,wEAAwE;gBACxE,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;YACvG,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAnBD,sCAmBC","sourcesContent":["// file: libs/sdk/src/prompt/prompt.events.ts\n\nimport { PromptInstance } from './prompt.instance';\n\nexport type PromptChangeKind = 'added' | 'updated' | 'removed' | 'reset';\n\nexport type PromptChangeEvent = {\n kind: PromptChangeKind;\n changeScope: 'global' | 'session';\n sessionId?: string;\n relatedRequestId?: string;\n version: number;\n snapshot: readonly PromptInstance[];\n};\n\ntype Listener = (e: PromptChangeEvent) => void;\n\nexport class PromptEmitter {\n private listeners = new Set<Listener>();\n\n on(l: Listener): () => void {\n this.listeners.add(l);\n return () => this.listeners.delete(l);\n }\n\n emit(e: PromptChangeEvent) {\n for (const l of [...this.listeners]) {\n try {\n l(e);\n } catch (err) {\n // Log error but continue notifying other listeners\n // Use safe logging to avoid Node.js 24 util.inspect bug with Zod errors\n console.error('PromptEmitter listener error:', err instanceof Error ? err.message : 'Unknown error');\n }\n }\n }\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import { EntryOwnerRef, PromptEntry, PromptGetExtra, ParsedPromptResult, PromptSafeTransformResult, PromptRecord, PromptContext, PromptMetadata } from '../common';
2
+ import ProviderRegistry from '../provider/provider.registry';
3
+ import HookRegistry from '../hooks/hook.registry';
4
+ import { Scope } from '../scope';
5
+ export declare class PromptInstance extends PromptEntry {
6
+ private readonly providers;
7
+ readonly scope: Scope;
8
+ readonly hooks: HookRegistry;
9
+ constructor(record: PromptRecord, providers: ProviderRegistry, owner: EntryOwnerRef);
10
+ protected initialize(): Promise<void>;
11
+ getMetadata(): PromptMetadata;
12
+ /**
13
+ * Create a prompt context (class or function wrapper).
14
+ */
15
+ create(args: Record<string, string>, ctx: PromptGetExtra): PromptContext;
16
+ /**
17
+ * Parse and validate arguments against the prompt's argument definitions.
18
+ * @param args Arguments from the MCP request
19
+ * @returns Validated arguments
20
+ */
21
+ parseArguments(args?: Record<string, string>): Record<string, string>;
22
+ /**
23
+ * Convert the raw prompt return value into an MCP GetPromptResult.
24
+ */
25
+ parseOutput(raw: unknown): ParsedPromptResult;
26
+ /**
27
+ * Safe version of parseOutput that returns success/error instead of throwing.
28
+ */
29
+ safeParseOutput(raw: unknown): PromptSafeTransformResult<ParsedPromptResult>;
30
+ }
@@ -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
  }