glirastes 0.1.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 (424) hide show
  1. package/CHANGELOG.md +468 -0
  2. package/README.md +651 -0
  3. package/dist/cli/bin.d.ts +2 -0
  4. package/dist/cli/bin.js +34 -0
  5. package/dist/cli/bin.js.map +1 -0
  6. package/dist/cli/commands/check-upgrade.d.ts +15 -0
  7. package/dist/cli/commands/check-upgrade.js +138 -0
  8. package/dist/cli/commands/check-upgrade.js.map +1 -0
  9. package/dist/cli/commands/test.d.ts +8 -0
  10. package/dist/cli/commands/test.js +76 -0
  11. package/dist/cli/commands/test.js.map +1 -0
  12. package/dist/cli/index.d.ts +1 -0
  13. package/dist/cli/index.js +609 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/cli/utils/changelog-parser.d.ts +13 -0
  16. package/dist/cli/utils/changelog-parser.js +89 -0
  17. package/dist/cli/utils/changelog-parser.js.map +1 -0
  18. package/dist/cli/utils/commit-parser.d.ts +8 -0
  19. package/dist/cli/utils/commit-parser.js +23 -0
  20. package/dist/cli/utils/commit-parser.js.map +1 -0
  21. package/dist/cli/utils/gap-detector.d.ts +14 -0
  22. package/dist/cli/utils/gap-detector.js +65 -0
  23. package/dist/cli/utils/gap-detector.js.map +1 -0
  24. package/dist/cli/utils/get-cli-version.d.ts +2 -0
  25. package/dist/cli/utils/get-cli-version.js +10 -0
  26. package/dist/cli/utils/get-cli-version.js.map +1 -0
  27. package/dist/codegen/asset-sync.d.ts +20 -0
  28. package/dist/codegen/asset-sync.js +26 -0
  29. package/dist/codegen/asset-sync.js.map +1 -0
  30. package/dist/codegen/coverage.d.ts +66 -0
  31. package/dist/codegen/coverage.js +372 -0
  32. package/dist/codegen/coverage.js.map +1 -0
  33. package/dist/codegen/endpoint-scanner.d.ts +16 -0
  34. package/dist/codegen/endpoint-scanner.js +161 -0
  35. package/dist/codegen/endpoint-scanner.js.map +1 -0
  36. package/dist/codegen/format.d.ts +17 -0
  37. package/dist/codegen/format.js +28 -0
  38. package/dist/codegen/format.js.map +1 -0
  39. package/dist/codegen/fs-utils.d.ts +45 -0
  40. package/dist/codegen/fs-utils.js +155 -0
  41. package/dist/codegen/fs-utils.js.map +1 -0
  42. package/dist/codegen/index.d.ts +13 -0
  43. package/dist/codegen/index.js +13 -0
  44. package/dist/codegen/index.js.map +1 -0
  45. package/dist/codegen/mcp-generator.d.ts +50 -0
  46. package/dist/codegen/mcp-generator.js +801 -0
  47. package/dist/codegen/mcp-generator.js.map +1 -0
  48. package/dist/codegen/module-generator.d.ts +11 -0
  49. package/dist/codegen/module-generator.js +351 -0
  50. package/dist/codegen/module-generator.js.map +1 -0
  51. package/dist/codegen/nestjs-scanner.d.ts +43 -0
  52. package/dist/codegen/nestjs-scanner.js +239 -0
  53. package/dist/codegen/nestjs-scanner.js.map +1 -0
  54. package/dist/codegen/output-recommender.d.ts +23 -0
  55. package/dist/codegen/output-recommender.js +31 -0
  56. package/dist/codegen/output-recommender.js.map +1 -0
  57. package/dist/codegen/scaffolder.d.ts +36 -0
  58. package/dist/codegen/scaffolder.js +259 -0
  59. package/dist/codegen/scaffolder.js.map +1 -0
  60. package/dist/codegen/skill-generator.d.ts +49 -0
  61. package/dist/codegen/skill-generator.js +965 -0
  62. package/dist/codegen/skill-generator.js.map +1 -0
  63. package/dist/codegen/types.d.ts +52 -0
  64. package/dist/codegen/types.js +14 -0
  65. package/dist/codegen/types.js.map +1 -0
  66. package/dist/codegen/ui-scanner.d.ts +24 -0
  67. package/dist/codegen/ui-scanner.js +197 -0
  68. package/dist/codegen/ui-scanner.js.map +1 -0
  69. package/dist/codegen/validator.d.ts +35 -0
  70. package/dist/codegen/validator.js +256 -0
  71. package/dist/codegen/validator.js.map +1 -0
  72. package/dist/openapi/demo-generate.d.ts +1 -0
  73. package/dist/openapi/demo-generate.js +15 -0
  74. package/dist/openapi/demo-generate.js.map +1 -0
  75. package/dist/openapi/index.d.ts +78 -0
  76. package/dist/openapi/index.js +341 -0
  77. package/dist/openapi/index.js.map +1 -0
  78. package/dist/react/audio-worklet-processor.d.ts +9 -0
  79. package/dist/react/audio-worklet-processor.js +28 -0
  80. package/dist/react/audio-worklet-processor.js.map +1 -0
  81. package/dist/react/bridges/rest-session-bridge.d.ts +113 -0
  82. package/dist/react/bridges/rest-session-bridge.js +207 -0
  83. package/dist/react/bridges/rest-session-bridge.js.map +1 -0
  84. package/dist/react/components/ai-chat-panel.d.ts +12 -0
  85. package/dist/react/components/ai-chat-panel.js +65 -0
  86. package/dist/react/components/ai-chat-panel.js.map +1 -0
  87. package/dist/react/components/ai-trigger-button.d.ts +2 -0
  88. package/dist/react/components/ai-trigger-button.js +239 -0
  89. package/dist/react/components/ai-trigger-button.js.map +1 -0
  90. package/dist/react/components/approval-card.d.ts +9 -0
  91. package/dist/react/components/approval-card.js +22 -0
  92. package/dist/react/components/approval-card.js.map +1 -0
  93. package/dist/react/components/bulk-approval-card.d.ts +9 -0
  94. package/dist/react/components/bulk-approval-card.js +34 -0
  95. package/dist/react/components/bulk-approval-card.js.map +1 -0
  96. package/dist/react/components/chat-input.d.ts +10 -0
  97. package/dist/react/components/chat-input.js +58 -0
  98. package/dist/react/components/chat-input.js.map +1 -0
  99. package/dist/react/components/chat-window.d.ts +2 -0
  100. package/dist/react/components/chat-window.js +132 -0
  101. package/dist/react/components/chat-window.js.map +1 -0
  102. package/dist/react/components/confirm-dialog.d.ts +32 -0
  103. package/dist/react/components/confirm-dialog.js +46 -0
  104. package/dist/react/components/confirm-dialog.js.map +1 -0
  105. package/dist/react/components/floating-chat-ui.d.ts +84 -0
  106. package/dist/react/components/floating-chat-ui.js +161 -0
  107. package/dist/react/components/floating-chat-ui.js.map +1 -0
  108. package/dist/react/components/mention-chip.d.ts +16 -0
  109. package/dist/react/components/mention-chip.js +39 -0
  110. package/dist/react/components/mention-chip.js.map +1 -0
  111. package/dist/react/components/mention-input.d.ts +8 -0
  112. package/dist/react/components/mention-input.js +115 -0
  113. package/dist/react/components/mention-input.js.map +1 -0
  114. package/dist/react/components/message-bubble.d.ts +11 -0
  115. package/dist/react/components/message-bubble.js +123 -0
  116. package/dist/react/components/message-bubble.js.map +1 -0
  117. package/dist/react/components/message-list.d.ts +8 -0
  118. package/dist/react/components/message-list.js +50 -0
  119. package/dist/react/components/message-list.js.map +1 -0
  120. package/dist/react/components/pipeline-timeline.d.ts +7 -0
  121. package/dist/react/components/pipeline-timeline.js +70 -0
  122. package/dist/react/components/pipeline-timeline.js.map +1 -0
  123. package/dist/react/components/recording-bar.d.ts +2 -0
  124. package/dist/react/components/recording-bar.js +81 -0
  125. package/dist/react/components/recording-bar.js.map +1 -0
  126. package/dist/react/components/recording-controls.d.ts +18 -0
  127. package/dist/react/components/recording-controls.js +35 -0
  128. package/dist/react/components/recording-controls.js.map +1 -0
  129. package/dist/react/components/rich-mention-input.d.ts +2 -0
  130. package/dist/react/components/rich-mention-input.js +569 -0
  131. package/dist/react/components/rich-mention-input.js.map +1 -0
  132. package/dist/react/components/session-switcher.d.ts +14 -0
  133. package/dist/react/components/session-switcher.js +131 -0
  134. package/dist/react/components/session-switcher.js.map +1 -0
  135. package/dist/react/components/suggestion-bar.d.ts +9 -0
  136. package/dist/react/components/suggestion-bar.js +45 -0
  137. package/dist/react/components/suggestion-bar.js.map +1 -0
  138. package/dist/react/components/suggestion-chip.d.ts +9 -0
  139. package/dist/react/components/suggestion-chip.js +12 -0
  140. package/dist/react/components/suggestion-chip.js.map +1 -0
  141. package/dist/react/components/voice-input-addon.d.ts +13 -0
  142. package/dist/react/components/voice-input-addon.js +29 -0
  143. package/dist/react/components/voice-input-addon.js.map +1 -0
  144. package/dist/react/components/voice-input-button.d.ts +2 -0
  145. package/dist/react/components/voice-input-button.js +53 -0
  146. package/dist/react/components/voice-input-button.js.map +1 -0
  147. package/dist/react/hooks/use-ai-chat.d.ts +22 -0
  148. package/dist/react/hooks/use-ai-chat.js +49 -0
  149. package/dist/react/hooks/use-ai-chat.js.map +1 -0
  150. package/dist/react/hooks/use-approvals.d.ts +23 -0
  151. package/dist/react/hooks/use-approvals.js +61 -0
  152. package/dist/react/hooks/use-approvals.js.map +1 -0
  153. package/dist/react/hooks/use-deepgram-transcription.d.ts +2 -0
  154. package/dist/react/hooks/use-deepgram-transcription.js +327 -0
  155. package/dist/react/hooks/use-deepgram-transcription.js.map +1 -0
  156. package/dist/react/hooks/use-drag-resize-panel.d.ts +48 -0
  157. package/dist/react/hooks/use-drag-resize-panel.js +306 -0
  158. package/dist/react/hooks/use-drag-resize-panel.js.map +1 -0
  159. package/dist/react/hooks/use-draggable-position.d.ts +25 -0
  160. package/dist/react/hooks/use-draggable-position.js +132 -0
  161. package/dist/react/hooks/use-draggable-position.js.map +1 -0
  162. package/dist/react/hooks/use-keyboard-shortcut.d.ts +20 -0
  163. package/dist/react/hooks/use-keyboard-shortcut.js +91 -0
  164. package/dist/react/hooks/use-keyboard-shortcut.js.map +1 -0
  165. package/dist/react/hooks/use-mentions.d.ts +23 -0
  166. package/dist/react/hooks/use-mentions.js +40 -0
  167. package/dist/react/hooks/use-mentions.js.map +1 -0
  168. package/dist/react/hooks/use-suggestions.d.ts +22 -0
  169. package/dist/react/hooks/use-suggestions.js +37 -0
  170. package/dist/react/hooks/use-suggestions.js.map +1 -0
  171. package/dist/react/index.d.ts +43 -0
  172. package/dist/react/index.js +53 -0
  173. package/dist/react/index.js.map +1 -0
  174. package/dist/react/provider/ai-chat-provider.d.ts +45 -0
  175. package/dist/react/provider/ai-chat-provider.js +1021 -0
  176. package/dist/react/provider/ai-chat-provider.js.map +1 -0
  177. package/dist/react/provider/chat-context.d.ts +84 -0
  178. package/dist/react/provider/chat-context.js +10 -0
  179. package/dist/react/provider/chat-context.js.map +1 -0
  180. package/dist/react/styles.css +897 -0
  181. package/dist/react/template.d.ts +84 -0
  182. package/dist/react/template.js +83 -0
  183. package/dist/react/template.js.map +1 -0
  184. package/dist/react/themes.d.ts +24 -0
  185. package/dist/react/themes.js +269 -0
  186. package/dist/react/themes.js.map +1 -0
  187. package/dist/react/transports/langgraph/index.d.ts +2 -0
  188. package/dist/react/transports/langgraph/index.js +3 -0
  189. package/dist/react/transports/langgraph/index.js.map +1 -0
  190. package/dist/react/transports/langgraph/langgraph-ai-chat.d.ts +62 -0
  191. package/dist/react/transports/langgraph/langgraph-ai-chat.js +92 -0
  192. package/dist/react/transports/langgraph/langgraph-ai-chat.js.map +1 -0
  193. package/dist/react/transports/langgraph.d.ts +71 -0
  194. package/dist/react/transports/langgraph.js +366 -0
  195. package/dist/react/transports/langgraph.js.map +1 -0
  196. package/dist/react/transports/vercel/index.d.ts +2 -0
  197. package/dist/react/transports/vercel/index.js +3 -0
  198. package/dist/react/transports/vercel/index.js.map +1 -0
  199. package/dist/react/transports/vercel/vercel-ai-chat.d.ts +49 -0
  200. package/dist/react/transports/vercel/vercel-ai-chat.js +79 -0
  201. package/dist/react/transports/vercel/vercel-ai-chat.js.map +1 -0
  202. package/dist/react/transports/vercel.d.ts +30 -0
  203. package/dist/react/transports/vercel.js +67 -0
  204. package/dist/react/transports/vercel.js.map +1 -0
  205. package/dist/react/types.d.ts +750 -0
  206. package/dist/react/types.js +2 -0
  207. package/dist/react/types.js.map +1 -0
  208. package/dist/react/ui.d.ts +73 -0
  209. package/dist/react/ui.js +170 -0
  210. package/dist/react/ui.js.map +1 -0
  211. package/dist/react/utils/create-approval-description.d.ts +53 -0
  212. package/dist/react/utils/create-approval-description.js +120 -0
  213. package/dist/react/utils/create-approval-description.js.map +1 -0
  214. package/dist/react/utils/create-tool-result-handler.d.ts +90 -0
  215. package/dist/react/utils/create-tool-result-handler.js +166 -0
  216. package/dist/react/utils/create-tool-result-handler.js.map +1 -0
  217. package/dist/react/utils/mention-markup.d.ts +13 -0
  218. package/dist/react/utils/mention-markup.js +111 -0
  219. package/dist/react/utils/mention-markup.js.map +1 -0
  220. package/dist/react/utils/merge-pipeline-steps.d.ts +19 -0
  221. package/dist/react/utils/merge-pipeline-steps.js +79 -0
  222. package/dist/react/utils/merge-pipeline-steps.js.map +1 -0
  223. package/dist/react/utils/sanitize-stored-messages.d.ts +23 -0
  224. package/dist/react/utils/sanitize-stored-messages.js +50 -0
  225. package/dist/react/utils/sanitize-stored-messages.js.map +1 -0
  226. package/dist/server/adapters/nestjs/chat/ai-chat-auth.guard.d.ts +10 -0
  227. package/dist/server/adapters/nestjs/chat/ai-chat-auth.guard.js +40 -0
  228. package/dist/server/adapters/nestjs/chat/ai-chat-auth.guard.js.map +1 -0
  229. package/dist/server/adapters/nestjs/chat/ai-chat-module-options.interface.d.ts +32 -0
  230. package/dist/server/adapters/nestjs/chat/ai-chat-module-options.interface.js +2 -0
  231. package/dist/server/adapters/nestjs/chat/ai-chat-module-options.interface.js.map +1 -0
  232. package/dist/server/adapters/nestjs/chat/ai-chat.controller.d.ts +11 -0
  233. package/dist/server/adapters/nestjs/chat/ai-chat.controller.js +78 -0
  234. package/dist/server/adapters/nestjs/chat/ai-chat.controller.js.map +1 -0
  235. package/dist/server/adapters/nestjs/chat/ai-chat.module.d.ts +9 -0
  236. package/dist/server/adapters/nestjs/chat/ai-chat.module.js +116 -0
  237. package/dist/server/adapters/nestjs/chat/ai-chat.module.js.map +1 -0
  238. package/dist/server/adapters/nestjs/chat/ai-chat.service.d.ts +13 -0
  239. package/dist/server/adapters/nestjs/chat/ai-chat.service.js +129 -0
  240. package/dist/server/adapters/nestjs/chat/ai-chat.service.js.map +1 -0
  241. package/dist/server/adapters/nestjs/chat/dto/ai-chat-request.dto.d.ts +7 -0
  242. package/dist/server/adapters/nestjs/chat/dto/ai-chat-request.dto.js +49 -0
  243. package/dist/server/adapters/nestjs/chat/dto/ai-chat-request.dto.js.map +1 -0
  244. package/dist/server/adapters/nestjs/chat/dto/chat-message-part.dto.d.ts +19 -0
  245. package/dist/server/adapters/nestjs/chat/dto/chat-message-part.dto.js +105 -0
  246. package/dist/server/adapters/nestjs/chat/dto/chat-message-part.dto.js.map +1 -0
  247. package/dist/server/adapters/nestjs/chat/dto/chat-message.dto.d.ts +8 -0
  248. package/dist/server/adapters/nestjs/chat/dto/chat-message.dto.js +56 -0
  249. package/dist/server/adapters/nestjs/chat/dto/chat-message.dto.js.map +1 -0
  250. package/dist/server/adapters/nestjs/chat/dto/index.d.ts +3 -0
  251. package/dist/server/adapters/nestjs/chat/dto/index.js +4 -0
  252. package/dist/server/adapters/nestjs/chat/dto/index.js.map +1 -0
  253. package/dist/server/adapters/nestjs/chat/index.d.ts +3 -0
  254. package/dist/server/adapters/nestjs/chat/index.js +3 -0
  255. package/dist/server/adapters/nestjs/chat/index.js.map +1 -0
  256. package/dist/server/adapters/nestjs/chat/speech-stream.gateway.d.ts +4 -0
  257. package/dist/server/adapters/nestjs/chat/speech-stream.gateway.js +69 -0
  258. package/dist/server/adapters/nestjs/chat/speech-stream.gateway.js.map +1 -0
  259. package/dist/server/adapters/nestjs/decorators/ai-module.decorator.d.ts +6 -0
  260. package/dist/server/adapters/nestjs/decorators/ai-module.decorator.js +11 -0
  261. package/dist/server/adapters/nestjs/decorators/ai-module.decorator.js.map +1 -0
  262. package/dist/server/adapters/nestjs/decorators/ai-param.decorator.d.ts +5 -0
  263. package/dist/server/adapters/nestjs/decorators/ai-param.decorator.js +13 -0
  264. package/dist/server/adapters/nestjs/decorators/ai-param.decorator.js.map +1 -0
  265. package/dist/server/adapters/nestjs/decorators/ai-tool.decorator.d.ts +6 -0
  266. package/dist/server/adapters/nestjs/decorators/ai-tool.decorator.js +20 -0
  267. package/dist/server/adapters/nestjs/decorators/ai-tool.decorator.js.map +1 -0
  268. package/dist/server/adapters/nestjs/decorators/constants.d.ts +4 -0
  269. package/dist/server/adapters/nestjs/decorators/constants.js +5 -0
  270. package/dist/server/adapters/nestjs/decorators/constants.js.map +1 -0
  271. package/dist/server/adapters/nestjs/index.d.ts +14 -0
  272. package/dist/server/adapters/nestjs/index.js +20 -0
  273. package/dist/server/adapters/nestjs/index.js.map +1 -0
  274. package/dist/server/adapters/nestjs/metadata.d.ts +39 -0
  275. package/dist/server/adapters/nestjs/metadata.js +30 -0
  276. package/dist/server/adapters/nestjs/metadata.js.map +1 -0
  277. package/dist/server/adapters/nestjs/module/ai-tools-explorer.service.d.ts +36 -0
  278. package/dist/server/adapters/nestjs/module/ai-tools-explorer.service.js +156 -0
  279. package/dist/server/adapters/nestjs/module/ai-tools-explorer.service.js.map +1 -0
  280. package/dist/server/adapters/nestjs/module/ai-tools.module.d.ts +37 -0
  281. package/dist/server/adapters/nestjs/module/ai-tools.module.js +42 -0
  282. package/dist/server/adapters/nestjs/module/ai-tools.module.js.map +1 -0
  283. package/dist/server/adapters/nestjs/module/ai-tools.service.d.ts +28 -0
  284. package/dist/server/adapters/nestjs/module/ai-tools.service.js +38 -0
  285. package/dist/server/adapters/nestjs/module/ai-tools.service.js.map +1 -0
  286. package/dist/server/adapters/nestjs/scanner/nestjs-scanner.d.ts +16 -0
  287. package/dist/server/adapters/nestjs/scanner/nestjs-scanner.js +115 -0
  288. package/dist/server/adapters/nestjs/scanner/nestjs-scanner.js.map +1 -0
  289. package/dist/server/adapters/nestjs/scanner/schema-builder.d.ts +26 -0
  290. package/dist/server/adapters/nestjs/scanner/schema-builder.js +255 -0
  291. package/dist/server/adapters/nestjs/scanner/schema-builder.js.map +1 -0
  292. package/dist/server/adapters/nestjs/swagger.d.ts +7 -0
  293. package/dist/server/adapters/nestjs/swagger.js +37 -0
  294. package/dist/server/adapters/nestjs/swagger.js.map +1 -0
  295. package/dist/server/adapters/nextjs/context-helpers.d.ts +22 -0
  296. package/dist/server/adapters/nextjs/context-helpers.js +55 -0
  297. package/dist/server/adapters/nextjs/context-helpers.js.map +1 -0
  298. package/dist/server/adapters/nextjs/create-ai-chat-handler.d.ts +78 -0
  299. package/dist/server/adapters/nextjs/create-ai-chat-handler.js +950 -0
  300. package/dist/server/adapters/nextjs/create-ai-chat-handler.js.map +1 -0
  301. package/dist/server/adapters/nextjs/index.d.ts +8 -0
  302. package/dist/server/adapters/nextjs/index.js +9 -0
  303. package/dist/server/adapters/nextjs/index.js.map +1 -0
  304. package/dist/server/adapters/nextjs/prepare-model-messages.d.ts +58 -0
  305. package/dist/server/adapters/nextjs/prepare-model-messages.js +111 -0
  306. package/dist/server/adapters/nextjs/prepare-model-messages.js.map +1 -0
  307. package/dist/server/adapters/nextjs/sanitize-model-messages.d.ts +64 -0
  308. package/dist/server/adapters/nextjs/sanitize-model-messages.js +487 -0
  309. package/dist/server/adapters/nextjs/sanitize-model-messages.js.map +1 -0
  310. package/dist/server/adapters/nextjs/server-action-helper.d.ts +7 -0
  311. package/dist/server/adapters/nextjs/server-action-helper.js +38 -0
  312. package/dist/server/adapters/nextjs/server-action-helper.js.map +1 -0
  313. package/dist/server/adapters/nextjs/types.d.ts +246 -0
  314. package/dist/server/adapters/nextjs/types.js +2 -0
  315. package/dist/server/adapters/nextjs/types.js.map +1 -0
  316. package/dist/server/adapters/nextjs/with-ai-tool.d.ts +9 -0
  317. package/dist/server/adapters/nextjs/with-ai-tool.js +10 -0
  318. package/dist/server/adapters/nextjs/with-ai-tool.js.map +1 -0
  319. package/dist/server/core/followup-tool.d.ts +9 -0
  320. package/dist/server/core/followup-tool.js +80 -0
  321. package/dist/server/core/followup-tool.js.map +1 -0
  322. package/dist/server/core/index.d.ts +139 -0
  323. package/dist/server/core/index.js +787 -0
  324. package/dist/server/core/index.js.map +1 -0
  325. package/dist/server/core/intent-classifier.d.ts +94 -0
  326. package/dist/server/core/intent-classifier.js +314 -0
  327. package/dist/server/core/intent-classifier.js.map +1 -0
  328. package/dist/server/core/model-selector.d.ts +12 -0
  329. package/dist/server/core/model-selector.js +45 -0
  330. package/dist/server/core/model-selector.js.map +1 -0
  331. package/dist/server/core/module-router.d.ts +14 -0
  332. package/dist/server/core/module-router.js +107 -0
  333. package/dist/server/core/module-router.js.map +1 -0
  334. package/dist/server/core/zod-compact.d.ts +18 -0
  335. package/dist/server/core/zod-compact.js +127 -0
  336. package/dist/server/core/zod-compact.js.map +1 -0
  337. package/dist/server/index.d.ts +5 -0
  338. package/dist/server/index.js +8 -0
  339. package/dist/server/index.js.map +1 -0
  340. package/dist/server/lancer/cache.d.ts +9 -0
  341. package/dist/server/lancer/cache.js +30 -0
  342. package/dist/server/lancer/cache.js.map +1 -0
  343. package/dist/server/lancer/client.d.ts +2 -0
  344. package/dist/server/lancer/client.js +277 -0
  345. package/dist/server/lancer/client.js.map +1 -0
  346. package/dist/server/lancer/errors.d.ts +13 -0
  347. package/dist/server/lancer/errors.js +18 -0
  348. package/dist/server/lancer/errors.js.map +1 -0
  349. package/dist/server/lancer/index.d.ts +3 -0
  350. package/dist/server/lancer/index.js +3 -0
  351. package/dist/server/lancer/index.js.map +1 -0
  352. package/dist/server/lancer/telemetry-buffer.d.ts +15 -0
  353. package/dist/server/lancer/telemetry-buffer.js +61 -0
  354. package/dist/server/lancer/telemetry-buffer.js.map +1 -0
  355. package/dist/server/lancer/types.d.ts +201 -0
  356. package/dist/server/lancer/types.js +5 -0
  357. package/dist/server/lancer/types.js.map +1 -0
  358. package/dist/server/pii-shield/aegis-detector.d.ts +26 -0
  359. package/dist/server/pii-shield/aegis-detector.js +24 -0
  360. package/dist/server/pii-shield/aegis-detector.js.map +1 -0
  361. package/dist/server/pii-shield/create-pii-shield.d.ts +2 -0
  362. package/dist/server/pii-shield/create-pii-shield.js +189 -0
  363. package/dist/server/pii-shield/create-pii-shield.js.map +1 -0
  364. package/dist/server/pii-shield/deep-walk.d.ts +1 -0
  365. package/dist/server/pii-shield/deep-walk.js +17 -0
  366. package/dist/server/pii-shield/deep-walk.js.map +1 -0
  367. package/dist/server/pii-shield/fake-data.d.ts +5 -0
  368. package/dist/server/pii-shield/fake-data.js +168 -0
  369. package/dist/server/pii-shield/fake-data.js.map +1 -0
  370. package/dist/server/pii-shield/index.d.ts +4 -0
  371. package/dist/server/pii-shield/index.js +5 -0
  372. package/dist/server/pii-shield/index.js.map +1 -0
  373. package/dist/server/pii-shield/leakage.d.ts +1 -0
  374. package/dist/server/pii-shield/leakage.js +13 -0
  375. package/dist/server/pii-shield/leakage.js.map +1 -0
  376. package/dist/server/pii-shield/session-mapping.d.ts +12 -0
  377. package/dist/server/pii-shield/session-mapping.js +68 -0
  378. package/dist/server/pii-shield/session-mapping.js.map +1 -0
  379. package/dist/server/pipeline.d.ts +26 -0
  380. package/dist/server/pipeline.js +125 -0
  381. package/dist/server/pipeline.js.map +1 -0
  382. package/dist/server/testing/approvals.d.ts +11 -0
  383. package/dist/server/testing/approvals.js +39 -0
  384. package/dist/server/testing/approvals.js.map +1 -0
  385. package/dist/server/testing/combination.d.ts +3 -0
  386. package/dist/server/testing/combination.js +81 -0
  387. package/dist/server/testing/combination.js.map +1 -0
  388. package/dist/server/testing/create-test-suite.d.ts +29 -0
  389. package/dist/server/testing/create-test-suite.js +79 -0
  390. package/dist/server/testing/create-test-suite.js.map +1 -0
  391. package/dist/server/testing/edge-cases.d.ts +8 -0
  392. package/dist/server/testing/edge-cases.js +275 -0
  393. package/dist/server/testing/edge-cases.js.map +1 -0
  394. package/dist/server/testing/guardrails.d.ts +14 -0
  395. package/dist/server/testing/guardrails.js +150 -0
  396. package/dist/server/testing/guardrails.js.map +1 -0
  397. package/dist/server/testing/helpers.d.ts +14 -0
  398. package/dist/server/testing/helpers.js +114 -0
  399. package/dist/server/testing/helpers.js.map +1 -0
  400. package/dist/server/testing/index.d.ts +12 -0
  401. package/dist/server/testing/index.js +21 -0
  402. package/dist/server/testing/index.js.map +1 -0
  403. package/dist/server/testing/mock-executor.d.ts +8 -0
  404. package/dist/server/testing/mock-executor.js +38 -0
  405. package/dist/server/testing/mock-executor.js.map +1 -0
  406. package/dist/server/testing/regression.d.ts +7 -0
  407. package/dist/server/testing/regression.js +25 -0
  408. package/dist/server/testing/regression.js.map +1 -0
  409. package/dist/server/testing/routing.d.ts +12 -0
  410. package/dist/server/testing/routing.js +61 -0
  411. package/dist/server/testing/routing.js.map +1 -0
  412. package/dist/server/testing/schema-consistency.d.ts +6 -0
  413. package/dist/server/testing/schema-consistency.js +54 -0
  414. package/dist/server/testing/schema-consistency.js.map +1 -0
  415. package/dist/server/testing/smoke.d.ts +11 -0
  416. package/dist/server/testing/smoke.js +62 -0
  417. package/dist/server/testing/smoke.js.map +1 -0
  418. package/dist/server/testing/types.d.ts +156 -0
  419. package/dist/server/testing/types.js +2 -0
  420. package/dist/server/testing/types.js.map +1 -0
  421. package/dist/types.d.ts +696 -0
  422. package/dist/types.js +84 -0
  423. package/dist/types.js.map +1 -0
  424. package/package.json +187 -0
@@ -0,0 +1,38 @@
1
+ import { endpointToolsToRegistry, toolsToAiTools, } from '../../../core/index.js';
2
+ /**
3
+ * Injectable service for accessing AI tool definitions at runtime.
4
+ */
5
+ export class AiToolsService {
6
+ explorer;
7
+ constructor(explorer) {
8
+ this.explorer = explorer;
9
+ }
10
+ getEndpointTools() {
11
+ return this.explorer.getEndpointToolDefinitions();
12
+ }
13
+ getIntentModules() {
14
+ return this.explorer.getIntentModules();
15
+ }
16
+ getToolsForIntent(intent) {
17
+ const mod = this.explorer.getIntentModules().get(intent);
18
+ if (!mod)
19
+ return [];
20
+ const toolNameSet = new Set(mod.toolNames);
21
+ return this.explorer
22
+ .getEndpointToolDefinitions()
23
+ .filter((t) => toolNameSet.has(t.toolName));
24
+ }
25
+ buildToolRegistry() {
26
+ return endpointToolsToRegistry(this.explorer.getEndpointToolDefinitions());
27
+ }
28
+ async buildAiTools(context, options) {
29
+ const registry = this.buildToolRegistry();
30
+ return toolsToAiTools(registry, context, options);
31
+ }
32
+ async buildAiToolsForIntent(intent, context, options) {
33
+ const tools = this.getToolsForIntent(intent);
34
+ const registry = endpointToolsToRegistry(tools);
35
+ return toolsToAiTools(registry, context, options);
36
+ }
37
+ }
38
+ //# sourceMappingURL=ai-tools.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-tools.service.js","sourceRoot":"","sources":["../../../../../src/server/adapters/nestjs/module/ai-tools.service.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,uBAAuB,EACvB,cAAc,GAEf,MAAM,wBAAwB,CAAC;AAGhC;;GAEG;AACH,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,QAAgC;QAAhC,aAAQ,GAAR,QAAQ,CAAwB;IAAG,CAAC;IAEjE,gBAAgB;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,0BAA0B,EAAE,CAAC;IACpD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC;IAED,iBAAiB,CAAC,MAAc;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,QAAQ;aACjB,0BAA0B,EAAE;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAA+B,CAAC;IAC9E,CAAC;IAED,iBAAiB;QACf,OAAO,uBAAuB,CAC5B,IAAI,CAAC,QAAQ,CAAC,0BAA0B,EAAgC,CACzE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAoB,EAAE,OAA6B;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC1C,OAAO,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,MAAc,EACd,OAAoB,EACpB,OAA6B;QAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAChD,OAAO,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import 'reflect-metadata';
2
+ import type { AiEndpointToolDefinition, IntentModule } from '../../../../types.js';
3
+ export interface NestJsScanOptions {
4
+ controllers: Function[];
5
+ apiPrefix?: string;
6
+ }
7
+ export interface NestJsScanResult {
8
+ tools: AiEndpointToolDefinition[];
9
+ modules: IntentModule[];
10
+ toolsByModule: Record<string, string[]>;
11
+ }
12
+ /**
13
+ * Scan decorated NestJS controllers and produce tool/module definitions.
14
+ * Works at build time without a running NestJS app.
15
+ */
16
+ export declare function scanNestJsControllers(options: NestJsScanOptions): NestJsScanResult;
@@ -0,0 +1,115 @@
1
+ import 'reflect-metadata';
2
+ import { z } from 'zod';
3
+ import { getAiModuleMeta, getAllAiTools } from '../metadata.js';
4
+ import { buildZodSchemaFromDto, hasAiRelevantMeta, extractRouteParams } from './schema-builder.js';
5
+ const HTTP_METHOD_MAP = {
6
+ 0: 'GET',
7
+ 1: 'POST',
8
+ 2: 'PUT',
9
+ 3: 'DELETE',
10
+ 4: 'PATCH',
11
+ };
12
+ /**
13
+ * Scan decorated NestJS controllers and produce tool/module definitions.
14
+ * Works at build time without a running NestJS app.
15
+ */
16
+ export function scanNestJsControllers(options) {
17
+ const apiPrefix = options.apiPrefix ?? '/api';
18
+ const allTools = [];
19
+ const moduleMap = new Map();
20
+ for (const controllerClass of options.controllers) {
21
+ const moduleMeta = getAiModuleMeta(controllerClass);
22
+ if (!moduleMeta)
23
+ continue;
24
+ const tools = getAllAiTools(controllerClass);
25
+ const controllerPath = Reflect.getMetadata('path', controllerClass) ?? '';
26
+ for (const tool of tools) {
27
+ const methodPath = Reflect.getMetadata('path', controllerClass.prototype[tool.methodName]) ?? '';
28
+ const fullPath = `${apiPrefix}/${controllerPath}/${methodPath}`
29
+ .replace(/\/+/g, '/')
30
+ .replace(/\/$/, '') || '/';
31
+ // Resolve HTTP method
32
+ const httpMethodNum = Reflect.getMetadata('method', controllerClass.prototype[tool.methodName]);
33
+ const httpMethod = tool.method ??
34
+ HTTP_METHOD_MAP[httpMethodNum ?? 0] ??
35
+ 'GET';
36
+ // Resolve DTO schema
37
+ const paramTypes = Reflect.getMetadata('design:paramtypes', controllerClass.prototype, tool.methodName);
38
+ let inputSchema = z.object({});
39
+ if (paramTypes) {
40
+ for (const pt of paramTypes) {
41
+ if (pt && typeof pt === 'function' && hasAiRelevantMeta(pt)) {
42
+ inputSchema = buildZodSchemaFromDto(pt);
43
+ break;
44
+ }
45
+ }
46
+ }
47
+ // Merge path parameters into input schema
48
+ const pathParams = extractRouteParams(controllerClass, tool.methodName);
49
+ if (pathParams.length > 0) {
50
+ const pathShape = {};
51
+ for (const paramName of pathParams) {
52
+ if (!(inputSchema instanceof z.ZodObject) || !(paramName in inputSchema.shape)) {
53
+ pathShape[paramName] = z.string().uuid().describe(`Path parameter: ${paramName}`);
54
+ }
55
+ }
56
+ if (Object.keys(pathShape).length > 0) {
57
+ inputSchema = inputSchema instanceof z.ZodObject
58
+ ? inputSchema.extend(pathShape)
59
+ : z.object(pathShape);
60
+ }
61
+ }
62
+ allTools.push({
63
+ id: `${moduleMeta.intent}.${tool.name}`,
64
+ toolName: tool.name,
65
+ module: tool.module ?? moduleMeta.intent,
66
+ sharedWith: tool.sharedWith,
67
+ description: tool.description,
68
+ method: httpMethod,
69
+ path: fullPath,
70
+ inputSchema,
71
+ needsApproval: tool.needsApproval,
72
+ uiActionOnSuccess: tool.uiActionOnSuccess,
73
+ uiPattern: tool.uiPattern,
74
+ });
75
+ }
76
+ // Build IntentModule
77
+ const intent = moduleMeta.intent;
78
+ const toolNames = tools.map((t) => t.name);
79
+ const existing = moduleMap.get(intent);
80
+ if (existing) {
81
+ existing.toolNames.push(...toolNames);
82
+ }
83
+ else {
84
+ const meta = {
85
+ classification: moduleMeta.classification,
86
+ execution: moduleMeta.execution,
87
+ systemPrompt: moduleMeta.systemPrompt,
88
+ };
89
+ moduleMap.set(intent, { type: intent, toolNames, meta });
90
+ }
91
+ }
92
+ // Expand sharedWith
93
+ const toolsByModule = {};
94
+ for (const [intent, mod] of moduleMap) {
95
+ toolsByModule[intent] = [...mod.toolNames];
96
+ }
97
+ for (const tool of allTools) {
98
+ if (!tool.sharedWith)
99
+ continue;
100
+ for (const sharedModule of tool.sharedWith) {
101
+ if (!toolsByModule[sharedModule]) {
102
+ toolsByModule[sharedModule] = [];
103
+ }
104
+ if (!toolsByModule[sharedModule].includes(tool.toolName)) {
105
+ toolsByModule[sharedModule].push(tool.toolName);
106
+ }
107
+ }
108
+ }
109
+ return {
110
+ tools: allTools,
111
+ modules: Array.from(moduleMap.values()),
112
+ toolsByModule,
113
+ };
114
+ }
115
+ //# sourceMappingURL=nestjs-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nestjs-scanner.js","sourceRoot":"","sources":["../../../../../src/server/adapters/nestjs/scanner/nestjs-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ import 'reflect-metadata';
3
+ /**
4
+ * Build a Zod schema from a DTO class.
5
+ *
6
+ * Resolution order per property:
7
+ * 1. @AiParam — explicit AI-specific description (highest priority)
8
+ * 2. @ApiProperty — Swagger metadata as fallback (description, required, constraints)
9
+ * 3. design:type — TypeScript type metadata for base type inference
10
+ *
11
+ * Constraints from @ApiProperty (minLength, maxLength, minimum, maximum, enum)
12
+ * are applied as Zod validations AND appended to the property description so
13
+ * the AI model knows the constraints before generating values.
14
+ */
15
+ export declare function buildZodSchemaFromDto(dtoClass: Function): z.ZodObject<Record<string, z.ZodTypeAny>>;
16
+ /**
17
+ * Check whether a DTO class has any AI-relevant property metadata
18
+ * (either @AiParam or @ApiProperty decorators).
19
+ */
20
+ export declare function hasAiRelevantMeta(dtoClass: Function): boolean;
21
+ /**
22
+ * Extract @Param() parameter names from a controller method's route arguments metadata.
23
+ * NestJS stores route arguments under '__routeArguments__' with keys like "5:0" where
24
+ * 5 = RouteParamtypes.PARAM. The `data` field holds the parameter name (e.g., 'id').
25
+ */
26
+ export declare function extractRouteParams(controllerClass: Function, methodName: string): string[];
@@ -0,0 +1,255 @@
1
+ import { z } from 'zod';
2
+ import 'reflect-metadata';
3
+ import { getAiParamMeta } from '../metadata.js';
4
+ /**
5
+ * Metadata key used by @nestjs/swagger's @ApiProperty decorator.
6
+ * Properties decorated with @ApiProperty store their options under this key.
7
+ */
8
+ const SWAGGER_API_MODEL_PROPERTIES = 'swagger/apiModelProperties';
9
+ const SWAGGER_API_MODEL_PROPERTIES_ARRAY = 'swagger/apiModelPropertiesArray';
10
+ /**
11
+ * Read @ApiProperty metadata for all properties on a DTO class.
12
+ * Returns an array of property descriptors with description and constraints.
13
+ */
14
+ function getSwaggerPropertyMeta(dtoClass) {
15
+ const propertyNames = Reflect.getMetadata(SWAGGER_API_MODEL_PROPERTIES_ARRAY, dtoClass.prototype);
16
+ if (!propertyNames || propertyNames.length === 0)
17
+ return [];
18
+ const result = [];
19
+ for (const rawKey of propertyNames) {
20
+ // Swagger stores keys with a ':' prefix (e.g., ':name', ':description')
21
+ const propertyKey = rawKey.startsWith(':') ? rawKey.slice(1) : rawKey;
22
+ const meta = Reflect.getMetadata(SWAGGER_API_MODEL_PROPERTIES, dtoClass.prototype, propertyKey);
23
+ if (meta) {
24
+ result.push({ propertyKey, meta });
25
+ }
26
+ }
27
+ return result;
28
+ }
29
+ // ============================================================================
30
+ // Public API
31
+ // ============================================================================
32
+ /**
33
+ * Build a Zod schema from a DTO class.
34
+ *
35
+ * Resolution order per property:
36
+ * 1. @AiParam — explicit AI-specific description (highest priority)
37
+ * 2. @ApiProperty — Swagger metadata as fallback (description, required, constraints)
38
+ * 3. design:type — TypeScript type metadata for base type inference
39
+ *
40
+ * Constraints from @ApiProperty (minLength, maxLength, minimum, maximum, enum)
41
+ * are applied as Zod validations AND appended to the property description so
42
+ * the AI model knows the constraints before generating values.
43
+ */
44
+ export function buildZodSchemaFromDto(dtoClass) {
45
+ const aiParams = getAiParamMeta(dtoClass);
46
+ const swaggerProps = getSwaggerPropertyMeta(dtoClass);
47
+ const mergedParams = buildMergedParamList(aiParams, swaggerProps);
48
+ if (mergedParams.length === 0)
49
+ return z.object({});
50
+ const shape = {};
51
+ for (const param of mergedParams) {
52
+ const designType = Reflect.getMetadata('design:type', dtoClass.prototype, param.propertyKey);
53
+ let fieldSchema = buildFieldSchema(designType, param.constraints);
54
+ // Build enriched description: base description + constraint hints
55
+ const enrichedDescription = buildEnrichedDescription(param.description, param.constraints);
56
+ if (enrichedDescription) {
57
+ fieldSchema = fieldSchema.describe(enrichedDescription);
58
+ }
59
+ // Apply optional
60
+ if (param.isOptional) {
61
+ fieldSchema = fieldSchema.optional();
62
+ }
63
+ else {
64
+ fieldSchema = detectOptionalByDefault(dtoClass, param.propertyKey, fieldSchema);
65
+ }
66
+ shape[param.propertyKey] = fieldSchema;
67
+ }
68
+ return z.object(shape);
69
+ }
70
+ /**
71
+ * Check whether a DTO class has any AI-relevant property metadata
72
+ * (either @AiParam or @ApiProperty decorators).
73
+ */
74
+ export function hasAiRelevantMeta(dtoClass) {
75
+ if (getAiParamMeta(dtoClass).length > 0)
76
+ return true;
77
+ if (getSwaggerPropertyMeta(dtoClass).length > 0)
78
+ return true;
79
+ return false;
80
+ }
81
+ // ============================================================================
82
+ // Internal helpers
83
+ // ============================================================================
84
+ function buildMergedParamList(aiParams, swaggerProps) {
85
+ const aiParamMap = new Map(aiParams.map((p) => [p.propertyKey, p]));
86
+ const swaggerMap = new Map(swaggerProps.map((p) => [p.propertyKey, p.meta]));
87
+ // Collect all unique property keys (preserving order)
88
+ const allKeys = new Set();
89
+ for (const p of aiParams)
90
+ allKeys.add(p.propertyKey);
91
+ for (const p of swaggerProps)
92
+ allKeys.add(p.propertyKey);
93
+ const result = [];
94
+ for (const key of allKeys) {
95
+ const aiParam = aiParamMap.get(key);
96
+ const swaggerMeta = swaggerMap.get(key);
97
+ const description = aiParam?.description ?? swaggerMeta?.description ?? '';
98
+ const isOptional = swaggerMeta?.required === false;
99
+ const constraints = {};
100
+ if (swaggerMeta) {
101
+ if (swaggerMeta.minLength !== undefined)
102
+ constraints.minLength = swaggerMeta.minLength;
103
+ if (swaggerMeta.maxLength !== undefined)
104
+ constraints.maxLength = swaggerMeta.maxLength;
105
+ if (swaggerMeta.minimum !== undefined)
106
+ constraints.minimum = swaggerMeta.minimum;
107
+ if (swaggerMeta.maximum !== undefined)
108
+ constraints.maximum = swaggerMeta.maximum;
109
+ if (swaggerMeta.enum !== undefined)
110
+ constraints.enum = swaggerMeta.enum;
111
+ }
112
+ result.push({ propertyKey: key, description, isOptional, constraints });
113
+ }
114
+ return result;
115
+ }
116
+ /**
117
+ * Build a Zod field schema with constraints applied.
118
+ */
119
+ function buildFieldSchema(designType, constraints) {
120
+ const baseSchema = designTypeToZod(designType);
121
+ // Apply constraints based on the Zod type
122
+ if (baseSchema instanceof z.ZodString) {
123
+ return applyStringConstraints(baseSchema, constraints);
124
+ }
125
+ if (baseSchema instanceof z.ZodNumber) {
126
+ return applyNumberConstraints(baseSchema, constraints);
127
+ }
128
+ if (constraints.enum && constraints.enum.length > 0) {
129
+ return buildEnumSchema(constraints.enum);
130
+ }
131
+ return baseSchema;
132
+ }
133
+ function applyStringConstraints(schema, constraints) {
134
+ let s = schema;
135
+ if (constraints.minLength !== undefined)
136
+ s = s.min(constraints.minLength);
137
+ if (constraints.maxLength !== undefined)
138
+ s = s.max(constraints.maxLength);
139
+ // Enum overrides string type entirely
140
+ if (constraints.enum && constraints.enum.length > 0) {
141
+ return buildEnumSchema(constraints.enum);
142
+ }
143
+ return s;
144
+ }
145
+ function applyNumberConstraints(schema, constraints) {
146
+ let n = schema;
147
+ if (constraints.minimum !== undefined)
148
+ n = n.min(constraints.minimum);
149
+ if (constraints.maximum !== undefined)
150
+ n = n.max(constraints.maximum);
151
+ return n;
152
+ }
153
+ function buildEnumSchema(values) {
154
+ const stringValues = values.filter((v) => typeof v === 'string');
155
+ if (stringValues.length >= 2) {
156
+ return z.enum(stringValues);
157
+ }
158
+ if (stringValues.length === 1) {
159
+ return z.literal(stringValues[0]);
160
+ }
161
+ return z.unknown();
162
+ }
163
+ /**
164
+ * Append constraint hints to the base description so the AI model
165
+ * knows the validation rules before generating values.
166
+ */
167
+ function buildEnrichedDescription(baseDescription, constraints) {
168
+ const hints = [];
169
+ if (constraints.minLength !== undefined && constraints.maxLength !== undefined) {
170
+ hints.push(`${constraints.minLength}-${constraints.maxLength} characters`);
171
+ }
172
+ else if (constraints.minLength !== undefined) {
173
+ hints.push(`min ${constraints.minLength} characters`);
174
+ }
175
+ else if (constraints.maxLength !== undefined) {
176
+ hints.push(`max ${constraints.maxLength} characters`);
177
+ }
178
+ if (constraints.minimum !== undefined && constraints.maximum !== undefined) {
179
+ hints.push(`range ${constraints.minimum}-${constraints.maximum}`);
180
+ }
181
+ else if (constraints.minimum !== undefined) {
182
+ hints.push(`min ${constraints.minimum}`);
183
+ }
184
+ else if (constraints.maximum !== undefined) {
185
+ hints.push(`max ${constraints.maximum}`);
186
+ }
187
+ if (constraints.enum && constraints.enum.length > 0) {
188
+ const values = constraints.enum
189
+ .filter((v) => typeof v === 'string' || typeof v === 'number')
190
+ .map((v) => String(v));
191
+ if (values.length > 0) {
192
+ hints.push(`one of: ${values.join(', ')}`);
193
+ }
194
+ }
195
+ if (hints.length === 0)
196
+ return baseDescription;
197
+ const constraintSuffix = `(${hints.join('; ')})`;
198
+ return baseDescription
199
+ ? `${baseDescription} ${constraintSuffix}`
200
+ : constraintSuffix;
201
+ }
202
+ function designTypeToZod(designType) {
203
+ if (!designType)
204
+ return z.unknown();
205
+ switch (designType) {
206
+ case String:
207
+ return z.string();
208
+ case Number:
209
+ return z.number();
210
+ case Boolean:
211
+ return z.boolean();
212
+ case Array:
213
+ return z.array(z.unknown());
214
+ case Date:
215
+ return z.string();
216
+ default:
217
+ return z.unknown();
218
+ }
219
+ }
220
+ /**
221
+ * Extract @Param() parameter names from a controller method's route arguments metadata.
222
+ * NestJS stores route arguments under '__routeArguments__' with keys like "5:0" where
223
+ * 5 = RouteParamtypes.PARAM. The `data` field holds the parameter name (e.g., 'id').
224
+ */
225
+ export function extractRouteParams(controllerClass, methodName) {
226
+ const ROUTE_ARGS_METADATA = '__routeArguments__';
227
+ const PARAM_TYPE = '5'; // RouteParamtypes.PARAM
228
+ const routeArgs = Reflect.getMetadata(ROUTE_ARGS_METADATA, controllerClass, methodName) ?? {};
229
+ const params = [];
230
+ for (const [key, value] of Object.entries(routeArgs)) {
231
+ if (key.startsWith(`${PARAM_TYPE}:`) && value.data) {
232
+ params.push(value.data);
233
+ }
234
+ }
235
+ return params;
236
+ }
237
+ /**
238
+ * Check if a property has a default value on a constructed instance.
239
+ * If so, mark it as optional.
240
+ */
241
+ function detectOptionalByDefault(dtoClass, propertyKey, fieldSchema) {
242
+ try {
243
+ const constructed = new dtoClass();
244
+ if (constructed &&
245
+ typeof constructed === 'object' &&
246
+ propertyKey in constructed) {
247
+ return fieldSchema.optional();
248
+ }
249
+ }
250
+ catch {
251
+ // Cannot construct, skip optional detection
252
+ }
253
+ return fieldSchema;
254
+ }
255
+ //# sourceMappingURL=schema-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.js","sourceRoot":"","sources":["../../../../../src/server/adapters/nestjs/scanner/schema-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAA2B,MAAM,gBAAgB,CAAC;AAEzE;;;GAGG;AACH,MAAM,4BAA4B,GAAG,4BAA4B,CAAC;AAClE,MAAM,kCAAkC,GAAG,iCAAiC,CAAC;AAc7E;;;GAGG;AACH,SAAS,sBAAsB,CAC7B,QAAkB;IAElB,MAAM,aAAa,GAAyB,OAAO,CAAC,WAAW,CAC7D,kCAAkC,EAClC,QAAQ,CAAC,SAAS,CACnB,CAAC;IAEF,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE5D,MAAM,MAAM,GAA8D,EAAE,CAAC;IAE7E,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,wEAAwE;QACxE,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAEtE,MAAM,IAAI,GAAoC,OAAO,CAAC,WAAW,CAC/D,4BAA4B,EAC5B,QAAQ,CAAC,SAAS,EAClB,WAAW,CACZ,CAAC;QAEF,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAqBD,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAkB;IAElB,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAEtD,MAAM,YAAY,GAAG,oBAAoB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAElE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAiC,EAAE,CAAC;IAE/C,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,UAAU,GAAyB,OAAO,CAAC,WAAW,CAC1D,aAAa,EACb,QAAQ,CAAC,SAAS,EAClB,KAAK,CAAC,WAAW,CAClB,CAAC;QAEF,IAAI,WAAW,GAAiB,gBAAgB,CAC9C,UAAU,EACV,KAAK,CAAC,WAAW,CAClB,CAAC;QAEF,kEAAkE;QAClE,MAAM,mBAAmB,GAAG,wBAAwB,CAClD,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,WAAW,CAClB,CAAC;QACF,IAAI,mBAAmB,EAAE,CAAC;YACxB,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QAC1D,CAAC;QAED,iBAAiB;QACjB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,uBAAuB,CACnC,QAAQ,EACR,KAAK,CAAC,WAAW,EACjB,WAAW,CACZ,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,SAAS,oBAAoB,CAC3B,QAA8B,EAC9B,YAAuE;IAEvE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CACjD,CAAC;IAEF,sDAAsD;IACtD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,YAAY;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAExC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,WAAW,IAAI,EAAE,CAAC;QAC3E,MAAM,UAAU,GAAG,WAAW,EAAE,QAAQ,KAAK,KAAK,CAAC;QAEnD,MAAM,WAAW,GAAwB,EAAE,CAAC;QAC5C,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS;gBACrC,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;YAChD,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS;gBACrC,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;YAChD,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS;gBACnC,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;YAC5C,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS;gBACnC,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;YAC5C,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS;gBAAE,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QAC1E,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,UAAgC,EAChC,WAAgC;IAEhC,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAE/C,0CAA0C;IAC1C,IAAI,UAAU,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,sBAAsB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,UAAU,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,sBAAsB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAmB,EACnB,WAAgC;IAEhC,IAAI,CAAC,GAAG,MAAM,CAAC;IACf,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS;QAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC1E,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS;QAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAE1E,sCAAsC;IACtC,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAmB,EACnB,WAAgC;IAEhC,IAAI,CAAC,GAAG,MAAM,CAAC;IACf,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS;QAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACtE,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS;QAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACtE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,eAAe,CAAC,MAAiB;IACxC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAChC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC1C,CAAC;IACF,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,CAAC,IAAI,CAAC,YAA6C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAC/B,eAAuB,EACvB,WAAgC;IAEhC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC/E,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS,aAAa,CAAC,CAAC;IAC7E,CAAC;SAAM,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC,SAAS,aAAa,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC,SAAS,aAAa,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;SAAM,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;SAAM,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAwB,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;aACnF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC;IAE/C,MAAM,gBAAgB,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACjD,OAAO,eAAe;QACpB,CAAC,CAAC,GAAG,eAAe,IAAI,gBAAgB,EAAE;QAC1C,CAAC,CAAC,gBAAgB,CAAC;AACvB,CAAC;AAED,SAAS,eAAe,CAAC,UAAgC;IACvD,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACpC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,OAAO;YACV,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACrB,KAAK,KAAK;YACR,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9B,KAAK,IAAI;YACP,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QACpB;YACE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,eAAyB,EACzB,UAAkB;IAElB,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;IACjD,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,wBAAwB;IAEhD,MAAM,SAAS,GACb,OAAO,CAAC,WAAW,CAAC,mBAAmB,EAAE,eAAe,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;IAE9E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAC9B,QAAkB,EAClB,WAAmB,EACnB,WAAyB;IAEzB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAK,QAA8B,EAAE,CAAC;QAC1D,IACE,WAAW;YACX,OAAO,WAAW,KAAK,QAAQ;YAC/B,WAAW,IAAK,WAAuC,EACvD,CAAC;YACD,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Walks an OpenAPI document and merges `@AiTool` decorator metadata
3
+ * into each matching operation as an `x-ai` extension.
4
+ *
5
+ * Mutates `document` in place.
6
+ */
7
+ export declare function applyAiExtensions(document: Record<string, unknown>, controllers: Array<new (...args: unknown[]) => unknown>): void;
@@ -0,0 +1,37 @@
1
+ import { getAiModuleMeta, getAllAiTools } from './metadata.js';
2
+ /**
3
+ * Walks an OpenAPI document and merges `@AiTool` decorator metadata
4
+ * into each matching operation as an `x-ai` extension.
5
+ *
6
+ * Mutates `document` in place.
7
+ */
8
+ export function applyAiExtensions(document, controllers) {
9
+ const paths = document['paths'];
10
+ if (!paths)
11
+ return;
12
+ for (const controller of controllers) {
13
+ const moduleMeta = getAiModuleMeta(controller);
14
+ const tools = getAllAiTools(controller);
15
+ for (const tool of tools) {
16
+ const toolPath = tool.path;
17
+ const toolMethod = tool.method?.toLowerCase();
18
+ if (!toolPath || !toolMethod)
19
+ continue;
20
+ const pathItem = paths[toolPath];
21
+ if (!pathItem)
22
+ continue;
23
+ const operation = pathItem[toolMethod];
24
+ if (!operation)
25
+ continue;
26
+ const extension = {
27
+ enabled: true,
28
+ toolName: tool.name,
29
+ description: tool.description,
30
+ needsApproval: tool.needsApproval,
31
+ module: moduleMeta?.intent,
32
+ };
33
+ operation['x-ai'] = extension;
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=swagger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swagger.js","sourceRoot":"","sources":["../../../../src/server/adapters/nestjs/swagger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAW/D;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAiC,EACjC,WAAuD;IAEvD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAEjB,CAAC;IAEd,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,EAA4B,CAAC;YAExE,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU;gBAAE,SAAS;YAEvC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAExB,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,MAAM,SAAS,GAAuB;gBACpC,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,MAAM,EAAE,UAAU,EAAE,MAAM;aAC3B,CAAC;YAEF,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { ToolContext, RuntimeContext } from '../../../types.js';
2
+ import { type InternalApiCaller, type NextInternalApiCallerOptions } from '../../core/index.js';
3
+ /**
4
+ * Extract origin from a Next.js request.
5
+ * Checks x-forwarded-host/host headers, falls back to req.url.
6
+ */
7
+ export declare function extractOrigin(req: Request): string;
8
+ /**
9
+ * Build a RuntimeContext from a Next.js request.
10
+ */
11
+ export declare function buildRuntimeContext(req: Request): RuntimeContext;
12
+ /**
13
+ * Build a complete ToolContext from a Next.js request.
14
+ */
15
+ export declare function buildToolContext(req: Request, options?: {
16
+ locale?: string;
17
+ }): ToolContext;
18
+ /**
19
+ * Create an InternalApiCaller from a Next.js request.
20
+ * Automatically extracts origin and cookies.
21
+ */
22
+ export declare function createInternalApiCallerFromRequest(req: Request, overrides?: Partial<NextInternalApiCallerOptions>): InternalApiCaller;
@@ -0,0 +1,55 @@
1
+ import { createNextInternalApiCaller, } from '../../core/index.js';
2
+ /**
3
+ * Extract origin from a Next.js request.
4
+ * Checks x-forwarded-host/host headers, falls back to req.url.
5
+ */
6
+ export function extractOrigin(req) {
7
+ const forwardedHost = req.headers.get('x-forwarded-host');
8
+ const forwardedProto = req.headers.get('x-forwarded-proto') ?? 'https';
9
+ if (forwardedHost) {
10
+ return `${forwardedProto}://${forwardedHost}`;
11
+ }
12
+ const host = req.headers.get('host');
13
+ if (host) {
14
+ const proto = host.startsWith('localhost') ? 'http' : 'https';
15
+ return `${proto}://${host}`;
16
+ }
17
+ try {
18
+ const url = new URL(req.url);
19
+ return url.origin;
20
+ }
21
+ catch {
22
+ return 'http://localhost:3000';
23
+ }
24
+ }
25
+ /**
26
+ * Build a RuntimeContext from a Next.js request.
27
+ */
28
+ export function buildRuntimeContext(req) {
29
+ return {
30
+ origin: extractOrigin(req),
31
+ cookieHeader: req.headers.get('cookie') ?? undefined,
32
+ };
33
+ }
34
+ /**
35
+ * Build a complete ToolContext from a Next.js request.
36
+ */
37
+ export function buildToolContext(req, options) {
38
+ return {
39
+ currentDate: new Date(),
40
+ locale: options?.locale ?? 'en-US',
41
+ runtime: buildRuntimeContext(req),
42
+ };
43
+ }
44
+ /**
45
+ * Create an InternalApiCaller from a Next.js request.
46
+ * Automatically extracts origin and cookies.
47
+ */
48
+ export function createInternalApiCallerFromRequest(req, overrides) {
49
+ return createNextInternalApiCaller({
50
+ origin: extractOrigin(req),
51
+ cookieHeader: req.headers.get('cookie') ?? undefined,
52
+ ...overrides,
53
+ });
54
+ }
55
+ //# sourceMappingURL=context-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-helpers.js","sourceRoot":"","sources":["../../../../src/server/adapters/nextjs/context-helpers.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,2BAA2B,GAG5B,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC1D,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC;IAEvE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,GAAG,cAAc,MAAM,aAAa,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9D,OAAO,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC,MAAM,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,uBAAuB,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAO;QACL,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;QAC1B,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS;KACrD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAY,EACZ,OAA6B;IAE7B,OAAO;QACL,WAAW,EAAE,IAAI,IAAI,EAAE;QACvB,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,OAAO;QAClC,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC;KAClC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kCAAkC,CAChD,GAAY,EACZ,SAAiD;IAEjD,OAAO,2BAA2B,CAAC;QACjC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;QAC1B,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS;QACpD,GAAG,SAAS;KACb,CAAC,CAAC;AACL,CAAC"}