glirastes 0.3.0 → 0.3.2

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 (310) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +154 -9
  3. package/codegen/package.json +5 -0
  4. package/dist/cjs/codegen/asset-sync.d.ts +20 -0
  5. package/dist/cjs/codegen/asset-sync.js +28 -0
  6. package/dist/cjs/codegen/coverage.d.ts +66 -0
  7. package/dist/cjs/codegen/coverage.js +408 -0
  8. package/dist/cjs/codegen/endpoint-scanner.d.ts +16 -0
  9. package/dist/cjs/codegen/endpoint-scanner.js +197 -0
  10. package/dist/cjs/codegen/format.d.ts +17 -0
  11. package/dist/cjs/codegen/format.js +34 -0
  12. package/dist/cjs/codegen/fs-utils.d.ts +45 -0
  13. package/dist/cjs/codegen/fs-utils.js +165 -0
  14. package/dist/cjs/codegen/index.d.ts +13 -0
  15. package/dist/cjs/codegen/index.js +33 -0
  16. package/dist/cjs/codegen/mcp-generator.d.ts +50 -0
  17. package/dist/cjs/codegen/mcp-generator.js +803 -0
  18. package/dist/cjs/codegen/module-generator.d.ts +11 -0
  19. package/dist/cjs/codegen/module-generator.js +353 -0
  20. package/dist/cjs/codegen/nestjs-scanner.d.ts +43 -0
  21. package/dist/cjs/codegen/nestjs-scanner.js +241 -0
  22. package/dist/cjs/codegen/output-recommender.d.ts +23 -0
  23. package/dist/cjs/codegen/output-recommender.js +33 -0
  24. package/dist/cjs/codegen/scaffolder.d.ts +36 -0
  25. package/dist/cjs/codegen/scaffolder.js +262 -0
  26. package/dist/cjs/codegen/skill-generator.d.ts +49 -0
  27. package/dist/cjs/codegen/skill-generator.js +967 -0
  28. package/dist/cjs/codegen/types.d.ts +52 -0
  29. package/dist/cjs/codegen/types.js +16 -0
  30. package/dist/cjs/codegen/ui-scanner.d.ts +24 -0
  31. package/dist/cjs/codegen/ui-scanner.js +202 -0
  32. package/dist/cjs/codegen/validator.d.ts +35 -0
  33. package/dist/cjs/codegen/validator.js +292 -0
  34. package/dist/cjs/index.d.ts +1 -0
  35. package/dist/cjs/index.js +23 -0
  36. package/dist/cjs/openapi/index.d.ts +78 -0
  37. package/dist/cjs/openapi/index.js +347 -0
  38. package/dist/cjs/package.json +1 -0
  39. package/dist/cjs/react/audio-worklet-processor.d.ts +16 -0
  40. package/dist/cjs/react/audio-worklet-processor.js +27 -0
  41. package/dist/cjs/react/bridges/rest-session-bridge.d.ts +113 -0
  42. package/dist/cjs/react/bridges/rest-session-bridge.js +209 -0
  43. package/dist/cjs/react/components/ai-chat-panel.d.ts +12 -0
  44. package/dist/cjs/react/components/ai-chat-panel.js +67 -0
  45. package/dist/cjs/react/components/ai-trigger-button.d.ts +2 -0
  46. package/dist/cjs/react/components/ai-trigger-button.js +239 -0
  47. package/dist/cjs/react/components/approval-card.d.ts +9 -0
  48. package/dist/cjs/react/components/approval-card.js +24 -0
  49. package/dist/cjs/react/components/bulk-approval-card.d.ts +9 -0
  50. package/dist/cjs/react/components/bulk-approval-card.js +36 -0
  51. package/dist/cjs/react/components/chat-input.d.ts +10 -0
  52. package/dist/cjs/react/components/chat-input.js +60 -0
  53. package/dist/cjs/react/components/chat-window.d.ts +2 -0
  54. package/dist/cjs/react/components/chat-window.js +134 -0
  55. package/dist/cjs/react/components/confirm-dialog.d.ts +32 -0
  56. package/dist/cjs/react/components/confirm-dialog.js +48 -0
  57. package/dist/cjs/react/components/floating-chat-ui.d.ts +90 -0
  58. package/dist/cjs/react/components/floating-chat-ui.js +163 -0
  59. package/dist/cjs/react/components/mention-chip.d.ts +16 -0
  60. package/dist/cjs/react/components/mention-chip.js +42 -0
  61. package/dist/cjs/react/components/mention-input.d.ts +8 -0
  62. package/dist/cjs/react/components/mention-input.js +117 -0
  63. package/dist/cjs/react/components/message-bubble.d.ts +11 -0
  64. package/dist/cjs/react/components/message-bubble.js +171 -0
  65. package/dist/cjs/react/components/message-list.d.ts +8 -0
  66. package/dist/cjs/react/components/message-list.js +52 -0
  67. package/dist/cjs/react/components/pipeline-timeline.d.ts +7 -0
  68. package/dist/cjs/react/components/pipeline-timeline.js +72 -0
  69. package/dist/cjs/react/components/recording-bar.d.ts +2 -0
  70. package/dist/cjs/react/components/recording-bar.js +81 -0
  71. package/dist/cjs/react/components/recording-controls.d.ts +18 -0
  72. package/dist/cjs/react/components/recording-controls.js +38 -0
  73. package/dist/cjs/react/components/rich-mention-input.d.ts +2 -0
  74. package/dist/cjs/react/components/rich-mention-input.js +571 -0
  75. package/dist/cjs/react/components/session-switcher.d.ts +14 -0
  76. package/dist/cjs/react/components/session-switcher.js +133 -0
  77. package/dist/cjs/react/components/suggestion-bar.d.ts +9 -0
  78. package/dist/cjs/react/components/suggestion-bar.js +47 -0
  79. package/dist/cjs/react/components/suggestion-chip.d.ts +9 -0
  80. package/dist/cjs/react/components/suggestion-chip.js +14 -0
  81. package/dist/cjs/react/components/voice-input-addon.d.ts +13 -0
  82. package/dist/cjs/react/components/voice-input-addon.js +31 -0
  83. package/dist/cjs/react/components/voice-input-button.d.ts +2 -0
  84. package/dist/cjs/react/components/voice-input-button.js +55 -0
  85. package/dist/cjs/react/components/wavesurfer-loader.d.ts +5 -0
  86. package/dist/cjs/react/components/wavesurfer-loader.js +36 -0
  87. package/dist/cjs/react/hooks/use-ai-chat.d.ts +22 -0
  88. package/dist/cjs/react/hooks/use-ai-chat.js +51 -0
  89. package/dist/cjs/react/hooks/use-approvals.d.ts +23 -0
  90. package/dist/cjs/react/hooks/use-approvals.js +63 -0
  91. package/dist/cjs/react/hooks/use-deepgram-transcription.d.ts +2 -0
  92. package/dist/cjs/react/hooks/use-deepgram-transcription.js +329 -0
  93. package/dist/cjs/react/hooks/use-drag-resize-panel.d.ts +48 -0
  94. package/dist/cjs/react/hooks/use-drag-resize-panel.js +308 -0
  95. package/dist/cjs/react/hooks/use-draggable-position.d.ts +25 -0
  96. package/dist/cjs/react/hooks/use-draggable-position.js +134 -0
  97. package/dist/cjs/react/hooks/use-keyboard-shortcut.d.ts +20 -0
  98. package/dist/cjs/react/hooks/use-keyboard-shortcut.js +93 -0
  99. package/dist/cjs/react/hooks/use-mentions.d.ts +23 -0
  100. package/dist/cjs/react/hooks/use-mentions.js +42 -0
  101. package/dist/cjs/react/hooks/use-suggestions.d.ts +22 -0
  102. package/dist/cjs/react/hooks/use-suggestions.js +39 -0
  103. package/dist/cjs/react/index.d.ts +43 -0
  104. package/dist/cjs/react/index.js +111 -0
  105. package/dist/cjs/react/provider/ai-chat-provider.d.ts +45 -0
  106. package/dist/cjs/react/provider/ai-chat-provider.js +1024 -0
  107. package/dist/cjs/react/provider/chat-context.d.ts +84 -0
  108. package/dist/cjs/react/provider/chat-context.js +13 -0
  109. package/dist/cjs/react/template.d.ts +84 -0
  110. package/dist/cjs/react/template.js +90 -0
  111. package/dist/cjs/react/themes.d.ts +24 -0
  112. package/dist/cjs/react/themes.js +273 -0
  113. package/dist/cjs/react/transports/langgraph/index.d.ts +2 -0
  114. package/dist/cjs/react/transports/langgraph/index.js +8 -0
  115. package/dist/cjs/react/transports/langgraph/langgraph-ai-chat.d.ts +62 -0
  116. package/dist/cjs/react/transports/langgraph/langgraph-ai-chat.js +94 -0
  117. package/dist/cjs/react/transports/langgraph.d.ts +71 -0
  118. package/dist/cjs/react/transports/langgraph.js +369 -0
  119. package/dist/cjs/react/transports/vercel/index.d.ts +2 -0
  120. package/dist/cjs/react/transports/vercel/index.js +8 -0
  121. package/dist/cjs/react/transports/vercel/vercel-ai-chat.d.ts +49 -0
  122. package/dist/cjs/react/transports/vercel/vercel-ai-chat.js +81 -0
  123. package/dist/cjs/react/transports/vercel.d.ts +30 -0
  124. package/dist/cjs/react/transports/vercel.js +69 -0
  125. package/dist/cjs/react/types.d.ts +760 -0
  126. package/dist/cjs/react/types.js +2 -0
  127. package/dist/cjs/react/ui.d.ts +73 -0
  128. package/dist/cjs/react/ui.js +183 -0
  129. package/dist/cjs/react/utils/create-approval-description.d.ts +53 -0
  130. package/dist/cjs/react/utils/create-approval-description.js +122 -0
  131. package/dist/cjs/react/utils/create-tool-result-handler.d.ts +90 -0
  132. package/dist/cjs/react/utils/create-tool-result-handler.js +168 -0
  133. package/dist/cjs/react/utils/mention-markup.d.ts +13 -0
  134. package/dist/cjs/react/utils/mention-markup.js +117 -0
  135. package/dist/cjs/react/utils/merge-pipeline-steps.d.ts +19 -0
  136. package/dist/cjs/react/utils/merge-pipeline-steps.js +81 -0
  137. package/dist/cjs/react/utils/sanitize-stored-messages.d.ts +23 -0
  138. package/dist/cjs/react/utils/sanitize-stored-messages.js +52 -0
  139. package/dist/cjs/server/adapters/nestjs/chat/ai-chat-auth.guard.d.ts +10 -0
  140. package/dist/cjs/server/adapters/nestjs/chat/ai-chat-auth.guard.js +42 -0
  141. package/dist/cjs/server/adapters/nestjs/chat/ai-chat-module-options.interface.d.ts +32 -0
  142. package/dist/cjs/server/adapters/nestjs/chat/ai-chat-module-options.interface.js +4 -0
  143. package/dist/cjs/server/adapters/nestjs/chat/ai-chat.controller.d.ts +11 -0
  144. package/dist/cjs/server/adapters/nestjs/chat/ai-chat.controller.js +80 -0
  145. package/dist/cjs/server/adapters/nestjs/chat/ai-chat.module.d.ts +9 -0
  146. package/dist/cjs/server/adapters/nestjs/chat/ai-chat.module.js +119 -0
  147. package/dist/cjs/server/adapters/nestjs/chat/ai-chat.service.d.ts +13 -0
  148. package/dist/cjs/server/adapters/nestjs/chat/ai-chat.service.js +131 -0
  149. package/dist/cjs/server/adapters/nestjs/chat/dto/ai-chat-request.dto.d.ts +7 -0
  150. package/dist/cjs/server/adapters/nestjs/chat/dto/ai-chat-request.dto.js +52 -0
  151. package/dist/cjs/server/adapters/nestjs/chat/dto/chat-message-part.dto.d.ts +19 -0
  152. package/dist/cjs/server/adapters/nestjs/chat/dto/chat-message-part.dto.js +108 -0
  153. package/dist/cjs/server/adapters/nestjs/chat/dto/chat-message.dto.d.ts +8 -0
  154. package/dist/cjs/server/adapters/nestjs/chat/dto/chat-message.dto.js +59 -0
  155. package/dist/cjs/server/adapters/nestjs/chat/dto/index.d.ts +3 -0
  156. package/dist/cjs/server/adapters/nestjs/chat/dto/index.js +9 -0
  157. package/dist/cjs/server/adapters/nestjs/chat/index.d.ts +3 -0
  158. package/dist/cjs/server/adapters/nestjs/chat/index.js +9 -0
  159. package/dist/cjs/server/adapters/nestjs/chat/speech-stream.gateway.d.ts +4 -0
  160. package/dist/cjs/server/adapters/nestjs/chat/speech-stream.gateway.js +73 -0
  161. package/dist/cjs/server/adapters/nestjs/chat/ws-loader.d.ts +5 -0
  162. package/dist/cjs/server/adapters/nestjs/chat/ws-loader.js +72 -0
  163. package/dist/cjs/server/adapters/nestjs/decorators/ai-module.decorator.d.ts +6 -0
  164. package/dist/cjs/server/adapters/nestjs/decorators/ai-module.decorator.js +13 -0
  165. package/dist/cjs/server/adapters/nestjs/decorators/ai-param.decorator.d.ts +5 -0
  166. package/dist/cjs/server/adapters/nestjs/decorators/ai-param.decorator.js +15 -0
  167. package/dist/cjs/server/adapters/nestjs/decorators/ai-tool.decorator.d.ts +6 -0
  168. package/dist/cjs/server/adapters/nestjs/decorators/ai-tool.decorator.js +22 -0
  169. package/dist/cjs/server/adapters/nestjs/decorators/constants.d.ts +4 -0
  170. package/dist/cjs/server/adapters/nestjs/decorators/constants.js +7 -0
  171. package/dist/cjs/server/adapters/nestjs/index.d.ts +14 -0
  172. package/dist/cjs/server/adapters/nestjs/index.js +42 -0
  173. package/dist/cjs/server/adapters/nestjs/metadata.d.ts +39 -0
  174. package/dist/cjs/server/adapters/nestjs/metadata.js +36 -0
  175. package/dist/cjs/server/adapters/nestjs/module/ai-tools-explorer.service.d.ts +36 -0
  176. package/dist/cjs/server/adapters/nestjs/module/ai-tools-explorer.service.js +159 -0
  177. package/dist/cjs/server/adapters/nestjs/module/ai-tools.module.d.ts +37 -0
  178. package/dist/cjs/server/adapters/nestjs/module/ai-tools.module.js +44 -0
  179. package/dist/cjs/server/adapters/nestjs/module/ai-tools.service.d.ts +28 -0
  180. package/dist/cjs/server/adapters/nestjs/module/ai-tools.service.js +41 -0
  181. package/dist/cjs/server/adapters/nestjs/scanner/nestjs-scanner.d.ts +16 -0
  182. package/dist/cjs/server/adapters/nestjs/scanner/nestjs-scanner.js +117 -0
  183. package/dist/cjs/server/adapters/nestjs/scanner/schema-builder.d.ts +26 -0
  184. package/dist/cjs/server/adapters/nestjs/scanner/schema-builder.js +259 -0
  185. package/dist/cjs/server/adapters/nestjs/swagger.d.ts +7 -0
  186. package/dist/cjs/server/adapters/nestjs/swagger.js +39 -0
  187. package/dist/cjs/server/adapters/nextjs/context-helpers.d.ts +22 -0
  188. package/dist/cjs/server/adapters/nextjs/context-helpers.js +60 -0
  189. package/dist/cjs/server/adapters/nextjs/create-ai-chat-handler.d.ts +94 -0
  190. package/dist/cjs/server/adapters/nextjs/create-ai-chat-handler.js +965 -0
  191. package/dist/cjs/server/adapters/nextjs/filter-fallback-error.d.ts +11 -0
  192. package/dist/cjs/server/adapters/nextjs/filter-fallback-error.js +41 -0
  193. package/dist/cjs/server/adapters/nextjs/index.d.ts +8 -0
  194. package/dist/cjs/server/adapters/nextjs/index.js +22 -0
  195. package/dist/cjs/server/adapters/nextjs/prepare-model-messages.d.ts +58 -0
  196. package/dist/cjs/server/adapters/nextjs/prepare-model-messages.js +114 -0
  197. package/dist/cjs/server/adapters/nextjs/sanitize-model-messages.d.ts +64 -0
  198. package/dist/cjs/server/adapters/nextjs/sanitize-model-messages.js +489 -0
  199. package/dist/cjs/server/adapters/nextjs/server-action-helper.d.ts +7 -0
  200. package/dist/cjs/server/adapters/nextjs/server-action-helper.js +40 -0
  201. package/dist/cjs/server/adapters/nextjs/types.d.ts +246 -0
  202. package/dist/cjs/server/adapters/nextjs/types.js +2 -0
  203. package/dist/cjs/server/adapters/nextjs/with-ai-tool.d.ts +9 -0
  204. package/dist/cjs/server/adapters/nextjs/with-ai-tool.js +12 -0
  205. package/dist/cjs/server/core/followup-tool.d.ts +9 -0
  206. package/dist/cjs/server/core/followup-tool.js +82 -0
  207. package/dist/cjs/server/core/index.d.ts +139 -0
  208. package/dist/cjs/server/core/index.js +818 -0
  209. package/dist/cjs/server/core/intent-classifier.d.ts +94 -0
  210. package/dist/cjs/server/core/intent-classifier.js +324 -0
  211. package/dist/cjs/server/core/model-selector.d.ts +12 -0
  212. package/dist/cjs/server/core/model-selector.js +48 -0
  213. package/dist/cjs/server/core/module-router.d.ts +14 -0
  214. package/dist/cjs/server/core/module-router.js +110 -0
  215. package/dist/cjs/server/core/zod-compact.d.ts +18 -0
  216. package/dist/cjs/server/core/zod-compact.js +129 -0
  217. package/dist/cjs/server/index.d.ts +6 -0
  218. package/dist/cjs/server/index.js +28 -0
  219. package/dist/cjs/server/lancer/cache.d.ts +9 -0
  220. package/dist/cjs/server/lancer/cache.js +33 -0
  221. package/dist/cjs/server/lancer/client.d.ts +2 -0
  222. package/dist/cjs/server/lancer/client.js +279 -0
  223. package/dist/cjs/server/lancer/errors.d.ts +13 -0
  224. package/dist/cjs/server/lancer/errors.js +21 -0
  225. package/dist/cjs/server/lancer/index.d.ts +3 -0
  226. package/dist/cjs/server/lancer/index.js +7 -0
  227. package/dist/cjs/server/lancer/telemetry-buffer.d.ts +15 -0
  228. package/dist/cjs/server/lancer/telemetry-buffer.js +64 -0
  229. package/dist/cjs/server/lancer/types.d.ts +201 -0
  230. package/dist/cjs/server/lancer/types.js +5 -0
  231. package/dist/cjs/server/pii-shield/aegis-detector.d.ts +26 -0
  232. package/dist/cjs/server/pii-shield/aegis-detector.js +26 -0
  233. package/dist/cjs/server/pii-shield/create-pii-shield.d.ts +2 -0
  234. package/dist/cjs/server/pii-shield/create-pii-shield.js +191 -0
  235. package/dist/cjs/server/pii-shield/deep-walk.d.ts +1 -0
  236. package/dist/cjs/server/pii-shield/deep-walk.js +19 -0
  237. package/dist/cjs/server/pii-shield/fake-data.d.ts +5 -0
  238. package/dist/cjs/server/pii-shield/fake-data.js +170 -0
  239. package/dist/cjs/server/pii-shield/index.d.ts +4 -0
  240. package/dist/cjs/server/pii-shield/index.js +9 -0
  241. package/dist/cjs/server/pii-shield/leakage.d.ts +1 -0
  242. package/dist/cjs/server/pii-shield/leakage.js +15 -0
  243. package/dist/cjs/server/pii-shield/session-mapping.d.ts +12 -0
  244. package/dist/cjs/server/pii-shield/session-mapping.js +70 -0
  245. package/dist/cjs/server/pipeline.d.ts +26 -0
  246. package/dist/cjs/server/pipeline.js +127 -0
  247. package/dist/cjs/server/testing/approvals.d.ts +11 -0
  248. package/dist/cjs/server/testing/approvals.js +41 -0
  249. package/dist/cjs/server/testing/combination.d.ts +3 -0
  250. package/dist/cjs/server/testing/combination.js +83 -0
  251. package/dist/cjs/server/testing/create-test-suite.d.ts +29 -0
  252. package/dist/cjs/server/testing/create-test-suite.js +81 -0
  253. package/dist/cjs/server/testing/edge-cases.d.ts +8 -0
  254. package/dist/cjs/server/testing/edge-cases.js +277 -0
  255. package/dist/cjs/server/testing/guardrails.d.ts +14 -0
  256. package/dist/cjs/server/testing/guardrails.js +152 -0
  257. package/dist/cjs/server/testing/helpers.d.ts +14 -0
  258. package/dist/cjs/server/testing/helpers.js +119 -0
  259. package/dist/cjs/server/testing/index.d.ts +12 -0
  260. package/dist/cjs/server/testing/index.js +37 -0
  261. package/dist/cjs/server/testing/mock-executor.d.ts +8 -0
  262. package/dist/cjs/server/testing/mock-executor.js +40 -0
  263. package/dist/cjs/server/testing/regression.d.ts +7 -0
  264. package/dist/cjs/server/testing/regression.js +27 -0
  265. package/dist/cjs/server/testing/routing.d.ts +12 -0
  266. package/dist/cjs/server/testing/routing.js +63 -0
  267. package/dist/cjs/server/testing/schema-consistency.d.ts +6 -0
  268. package/dist/cjs/server/testing/schema-consistency.js +56 -0
  269. package/dist/cjs/server/testing/smoke.d.ts +11 -0
  270. package/dist/cjs/server/testing/smoke.js +64 -0
  271. package/dist/cjs/server/testing/types.d.ts +156 -0
  272. package/dist/cjs/server/testing/types.js +2 -0
  273. package/dist/cjs/types.d.ts +696 -0
  274. package/dist/cjs/types.js +91 -0
  275. package/dist/cli/commands/install-skills.d.ts +17 -0
  276. package/dist/cli/commands/install-skills.js +185 -0
  277. package/dist/cli/commands/install-skills.js.map +1 -0
  278. package/dist/cli/index.js +25 -0
  279. package/dist/cli/index.js.map +1 -1
  280. package/dist/react/components/ai-trigger-button.js +4 -6
  281. package/dist/react/components/ai-trigger-button.js.map +1 -1
  282. package/dist/react/components/recording-bar.js +4 -6
  283. package/dist/react/components/recording-bar.js.map +1 -1
  284. package/dist/react/components/wavesurfer-loader.d.ts +5 -0
  285. package/dist/react/components/wavesurfer-loader.js +34 -0
  286. package/dist/react/components/wavesurfer-loader.js.map +1 -0
  287. package/dist/server/adapters/nestjs/chat/ai-chat.module.d.ts +1 -1
  288. package/dist/server/adapters/nestjs/chat/ai-chat.module.js +3 -2
  289. package/dist/server/adapters/nestjs/chat/ai-chat.module.js.map +1 -1
  290. package/dist/server/adapters/nestjs/chat/speech-stream.gateway.d.ts +1 -1
  291. package/dist/server/adapters/nestjs/chat/speech-stream.gateway.js +10 -8
  292. package/dist/server/adapters/nestjs/chat/speech-stream.gateway.js.map +1 -1
  293. package/dist/server/adapters/nestjs/chat/ws-loader.d.ts +5 -0
  294. package/dist/server/adapters/nestjs/chat/ws-loader.js +37 -0
  295. package/dist/server/adapters/nestjs/chat/ws-loader.js.map +1 -0
  296. package/openapi/package.json +5 -0
  297. package/package.json +59 -16
  298. package/react/langgraph/package.json +5 -0
  299. package/react/package.json +5 -0
  300. package/react/vercel/package.json +5 -0
  301. package/server/nestjs/package.json +5 -0
  302. package/server/nextjs/package.json +5 -0
  303. package/server/package.json +5 -0
  304. package/server/testing/package.json +5 -0
  305. package/skills/README.md +107 -0
  306. package/skills/building-glirastes-chat-ui/SKILL.md +378 -0
  307. package/skills/integrating-glirastes-nestjs/SKILL.md +346 -0
  308. package/skills/integrating-glirastes-nextjs/SKILL.md +312 -0
  309. package/skills/integrating-glirastes-nextjs-with-nestjs-backend/SKILL.md +359 -0
  310. package/skills/maintaining-glirastes-tools/SKILL.md +467 -0
@@ -0,0 +1,9 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import type { INestApplication } from '@nestjs/common';
3
+ import { type AiChatModuleAsyncOptions, type AiChatModuleOptions } from './ai-chat-module-options.interface.js';
4
+ export declare class AiChatModule {
5
+ private static initialized;
6
+ static forRoot(options: AiChatModuleOptions): DynamicModule;
7
+ static forRootAsync(asyncOptions: AiChatModuleAsyncOptions): DynamicModule;
8
+ static attachWebSockets(app: INestApplication): Promise<void>;
9
+ }
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var AiChatModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.AiChatModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const config_1 = require("@nestjs/config");
13
+ const core_1 = require("@nestjs/core");
14
+ const ai_tools_explorer_service_js_1 = require("../module/ai-tools-explorer.service.js");
15
+ const ai_tools_service_js_1 = require("../module/ai-tools.service.js");
16
+ const ai_tools_module_js_1 = require("../module/ai-tools.module.js");
17
+ const ws_loader_js_1 = require("./ws-loader.js");
18
+ const ai_chat_controller_js_1 = require("./ai-chat.controller.js");
19
+ const ai_chat_service_js_1 = require("./ai-chat.service.js");
20
+ const ai_chat_module_options_interface_js_1 = require("./ai-chat-module-options.interface.js");
21
+ const speech_stream_gateway_js_1 = require("./speech-stream.gateway.js");
22
+ const ai_chat_auth_guard_js_1 = require("./ai-chat-auth.guard.js");
23
+ let AiChatModule = class AiChatModule {
24
+ static { AiChatModule_1 = this; }
25
+ static initialized = false;
26
+ static forRoot(options) {
27
+ AiChatModule_1.initialized = true;
28
+ const aiProviders = (0, ai_tools_module_js_1.createAiToolsProviders)();
29
+ return {
30
+ module: AiChatModule_1,
31
+ imports: [core_1.DiscoveryModule],
32
+ controllers: [ai_chat_controller_js_1.AiChatController],
33
+ providers: [
34
+ {
35
+ provide: ai_chat_module_options_interface_js_1.AI_CHAT_MODULE_OPTIONS,
36
+ useValue: options,
37
+ },
38
+ {
39
+ provide: ai_tools_explorer_service_js_1.AiToolsExplorerService,
40
+ useFactory: (discoveryService, reflector) => aiProviders.createExplorer(discoveryService, reflector),
41
+ inject: [core_1.DiscoveryService, core_1.Reflector],
42
+ },
43
+ {
44
+ provide: ai_tools_service_js_1.AiToolsService,
45
+ useFactory: (explorer) => aiProviders.createService(explorer),
46
+ inject: [ai_tools_explorer_service_js_1.AiToolsExplorerService],
47
+ },
48
+ ai_chat_auth_guard_js_1.AiChatAuthGuard,
49
+ ai_chat_service_js_1.AiChatService,
50
+ ],
51
+ exports: [ai_tools_service_js_1.AiToolsService],
52
+ };
53
+ }
54
+ static forRootAsync(asyncOptions) {
55
+ AiChatModule_1.initialized = true;
56
+ return {
57
+ module: AiChatModule_1,
58
+ imports: [core_1.DiscoveryModule, ...(asyncOptions.imports ?? [])],
59
+ controllers: [ai_chat_controller_js_1.AiChatController],
60
+ providers: [
61
+ {
62
+ provide: ai_chat_module_options_interface_js_1.AI_CHAT_MODULE_OPTIONS,
63
+ useFactory: asyncOptions.useFactory,
64
+ inject: asyncOptions.inject ?? [],
65
+ },
66
+ {
67
+ provide: ai_tools_explorer_service_js_1.AiToolsExplorerService,
68
+ useFactory: (_options, discoveryService, reflector) => {
69
+ const aiProviders = (0, ai_tools_module_js_1.createAiToolsProviders)();
70
+ return aiProviders.createExplorer(discoveryService, reflector);
71
+ },
72
+ inject: [ai_chat_module_options_interface_js_1.AI_CHAT_MODULE_OPTIONS, core_1.DiscoveryService, core_1.Reflector],
73
+ },
74
+ {
75
+ provide: ai_tools_service_js_1.AiToolsService,
76
+ useFactory: (explorer) => new ai_tools_service_js_1.AiToolsService(explorer),
77
+ inject: [ai_tools_explorer_service_js_1.AiToolsExplorerService],
78
+ },
79
+ ai_chat_auth_guard_js_1.AiChatAuthGuard,
80
+ ai_chat_service_js_1.AiChatService,
81
+ ],
82
+ exports: [ai_tools_service_js_1.AiToolsService],
83
+ };
84
+ }
85
+ static async attachWebSockets(app) {
86
+ if (!AiChatModule_1.initialized) {
87
+ throw new Error('AiChatModule.forRoot() or forRootAsync() must be called before attachWebSockets()');
88
+ }
89
+ const options = app.get(ai_chat_module_options_interface_js_1.AI_CHAT_MODULE_OPTIONS);
90
+ if (!options?.features?.speechToText) {
91
+ return;
92
+ }
93
+ const logger = new common_1.Logger('AiChatModule');
94
+ const configService = app.get(config_1.ConfigService);
95
+ const deepgramKey = configService.get('DEEPGRAM_API_KEY');
96
+ if (!deepgramKey) {
97
+ throw new Error('DEEPGRAM_API_KEY environment variable is required when speechToText feature is enabled');
98
+ }
99
+ const { WebSocketServer } = await (0, ws_loader_js_1.loadWs)();
100
+ const httpServer = app.getHttpServer();
101
+ const wss = new WebSocketServer({ noServer: true });
102
+ const handleSpeechStream = (0, speech_stream_gateway_js_1.createSpeechStreamHandler)(configService);
103
+ httpServer.on('upgrade', (req, socket, head) => {
104
+ if (req.url?.startsWith('/api/ai/speech-stream')) {
105
+ wss.handleUpgrade(req, socket, head, (ws) => {
106
+ handleSpeechStream(ws, req);
107
+ });
108
+ }
109
+ else {
110
+ socket.destroy();
111
+ }
112
+ });
113
+ logger.log('Speech-to-text WebSocket attached at /api/ai/speech-stream');
114
+ }
115
+ };
116
+ exports.AiChatModule = AiChatModule;
117
+ exports.AiChatModule = AiChatModule = AiChatModule_1 = __decorate([
118
+ (0, common_1.Module)({})
119
+ ], AiChatModule);
@@ -0,0 +1,13 @@
1
+ import { AiToolsService } from '../module/ai-tools.service.js';
2
+ import { ConfigService } from '@nestjs/config';
3
+ import type { ChatMessageDto } from './dto/index.js';
4
+ import { type AiChatModuleOptions } from './ai-chat-module-options.interface.js';
5
+ export declare class AiChatService {
6
+ private readonly options;
7
+ private readonly aiToolsService;
8
+ private readonly configService;
9
+ private readonly logger;
10
+ constructor(options: AiChatModuleOptions | null, aiToolsService: AiToolsService, configService: ConfigService);
11
+ streamChat(messages: ChatMessageDto[], authHeader: string): Promise<Response>;
12
+ private getInternalApiUrl;
13
+ }
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var AiChatService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.AiChatService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const ai_tools_service_js_1 = require("../module/ai-tools.service.js");
19
+ const index_js_1 = require("../../../core/index.js");
20
+ const types_js_1 = require("../../../../types.js");
21
+ const config_1 = require("@nestjs/config");
22
+ const ai_1 = require("ai");
23
+ const ai_chat_module_options_interface_js_1 = require("./ai-chat-module-options.interface.js");
24
+ function wrapToolsForVercelAi(sdkTools) {
25
+ const wrapped = {};
26
+ for (const [name, raw] of Object.entries(sdkTools)) {
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ const t = raw;
29
+ wrapped[name] = (0, ai_1.tool)({
30
+ description: t.description,
31
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ inputSchema: (0, ai_1.zodSchema)(t.parameters),
33
+ needsApproval: t.needsApproval,
34
+ execute: t.execute,
35
+ });
36
+ }
37
+ return wrapped;
38
+ }
39
+ let AiChatService = AiChatService_1 = class AiChatService {
40
+ options;
41
+ aiToolsService;
42
+ configService;
43
+ logger = new common_1.Logger(AiChatService_1.name);
44
+ constructor(options, aiToolsService, configService) {
45
+ this.options = options;
46
+ this.aiToolsService = aiToolsService;
47
+ this.configService = configService;
48
+ }
49
+ async streamChat(messages, authHeader) {
50
+ if (!this.options) {
51
+ throw new common_1.ServiceUnavailableException('AI chat is not configured');
52
+ }
53
+ const options = this.options;
54
+ const toolContext = {
55
+ currentDate: new Date(),
56
+ locale: 'en-US',
57
+ callEndpoint: (0, index_js_1.createFetchInternalApiCaller)({
58
+ baseUrl: this.getInternalApiUrl(),
59
+ defaultHeaders: { Authorization: authHeader },
60
+ }),
61
+ };
62
+ const registry = this.aiToolsService.buildToolRegistry();
63
+ const sdkTools = await (0, index_js_1.toolsToAiTools)(registry, toolContext, {
64
+ onError: (toolId, error) => {
65
+ this.logger.error(`Tool "${toolId}" execution error: ${error}`, error instanceof Error ? error.stack : undefined);
66
+ },
67
+ onAudit: options.onAudit,
68
+ sessionId: `nestjs-${Date.now()}`,
69
+ });
70
+ const vercelTools = wrapToolsForVercelAi(sdkTools);
71
+ this.logger.log(`Chat request, ${Object.keys(vercelTools).length} tools available`);
72
+ this.logger.debug(`Available tools: ${Object.keys(vercelTools).join(', ')}`);
73
+ const currentDate = new Date().toISOString().split('T')[0];
74
+ let systemPrompt = typeof options.systemPrompt === 'function'
75
+ ? options.systemPrompt({ currentDate })
76
+ : options.systemPrompt;
77
+ // Apply runtime prompt overrides from Glirastes (Pro feature)
78
+ if (options.lancer) {
79
+ try {
80
+ const configResult = await options.lancer.config.fetch(['prompts']);
81
+ const prompts = configResult.prompts;
82
+ // Apply first matching override (NestJS adapter doesn't classify intents yet,
83
+ // so apply if there's a single module override as a reasonable default)
84
+ if (prompts && prompts.length === 1) {
85
+ systemPrompt = (0, types_js_1.applyPromptOverride)(systemPrompt, prompts[0]);
86
+ }
87
+ }
88
+ catch {
89
+ // Graceful degradation: use local prompt
90
+ }
91
+ }
92
+ const modelMessages = await (0, ai_1.convertToModelMessages)(messages);
93
+ this.logger.debug(`Model messages: ${JSON.stringify(modelMessages.map((m) => ({ role: m.role, contentLength: JSON.stringify(m.content).length })))}`);
94
+ const maxSteps = options.maxSteps ?? 4;
95
+ const stream = (0, ai_1.createUIMessageStream)({
96
+ execute: async ({ writer }) => {
97
+ const result = (0, ai_1.streamText)({
98
+ model: options.model,
99
+ system: systemPrompt,
100
+ messages: modelMessages,
101
+ tools: vercelTools,
102
+ stopWhen: (0, ai_1.stepCountIs)(maxSteps),
103
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
104
+ onStepFinish: (step) => {
105
+ this.logger.debug(`Step finished: toolCalls=${JSON.stringify(step.toolCalls)}, toolResults=${JSON.stringify(step.toolResults)}, finishReason=${step.finishReason}`);
106
+ },
107
+ });
108
+ writer.merge(result.toUIMessageStream());
109
+ try {
110
+ await result.response;
111
+ }
112
+ catch (error) {
113
+ this.logger.error(`Stream error: ${error}`, error instanceof Error ? error.stack : undefined);
114
+ throw error;
115
+ }
116
+ },
117
+ });
118
+ return (0, ai_1.createUIMessageStreamResponse)({ stream });
119
+ }
120
+ getInternalApiUrl() {
121
+ const port = this.configService.get('PORT', 3001);
122
+ return `http://localhost:${port}/api`;
123
+ }
124
+ };
125
+ exports.AiChatService = AiChatService;
126
+ exports.AiChatService = AiChatService = AiChatService_1 = __decorate([
127
+ (0, common_1.Injectable)(),
128
+ __param(0, (0, common_1.Inject)(ai_chat_module_options_interface_js_1.AI_CHAT_MODULE_OPTIONS)),
129
+ __metadata("design:paramtypes", [Object, ai_tools_service_js_1.AiToolsService,
130
+ config_1.ConfigService])
131
+ ], AiChatService);
@@ -0,0 +1,7 @@
1
+ import { ChatMessageDto } from './chat-message.dto.js';
2
+ export declare class AiChatRequestDto {
3
+ id?: string;
4
+ messages: ChatMessageDto[];
5
+ trigger?: string;
6
+ messageId?: string;
7
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AiChatRequestDto = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_validator_1 = require("class-validator");
15
+ const class_transformer_1 = require("class-transformer");
16
+ const chat_message_dto_js_1 = require("./chat-message.dto.js");
17
+ class AiChatRequestDto {
18
+ id;
19
+ messages;
20
+ trigger;
21
+ messageId;
22
+ }
23
+ exports.AiChatRequestDto = AiChatRequestDto;
24
+ __decorate([
25
+ (0, swagger_1.ApiPropertyOptional)({ description: 'Unique chat session identifier sent by the Vercel AI SDK transport' }),
26
+ (0, class_validator_1.IsString)(),
27
+ (0, class_validator_1.IsOptional)(),
28
+ __metadata("design:type", String)
29
+ ], AiChatRequestDto.prototype, "id", void 0);
30
+ __decorate([
31
+ (0, swagger_1.ApiProperty)({
32
+ description: 'Chat messages in Vercel AI SDK UIMessage format',
33
+ type: [chat_message_dto_js_1.ChatMessageDto],
34
+ }),
35
+ (0, class_validator_1.IsArray)(),
36
+ (0, class_validator_1.IsNotEmpty)(),
37
+ (0, class_validator_1.ValidateNested)({ each: true }),
38
+ (0, class_transformer_1.Type)(() => chat_message_dto_js_1.ChatMessageDto),
39
+ __metadata("design:type", Array)
40
+ ], AiChatRequestDto.prototype, "messages", void 0);
41
+ __decorate([
42
+ (0, swagger_1.ApiPropertyOptional)({ description: 'Trigger type: submit-message or regenerate-message' }),
43
+ (0, class_validator_1.IsString)(),
44
+ (0, class_validator_1.IsOptional)(),
45
+ __metadata("design:type", String)
46
+ ], AiChatRequestDto.prototype, "trigger", void 0);
47
+ __decorate([
48
+ (0, swagger_1.ApiPropertyOptional)({ description: 'ID of the message to regenerate (for regenerate-message trigger)' }),
49
+ (0, class_validator_1.IsString)(),
50
+ (0, class_validator_1.IsOptional)(),
51
+ __metadata("design:type", String)
52
+ ], AiChatRequestDto.prototype, "messageId", void 0);
@@ -0,0 +1,19 @@
1
+ export declare class ChatMessagePartDto {
2
+ type: string;
3
+ text?: string;
4
+ state?: string;
5
+ toolInvocation?: unknown;
6
+ toolCallId?: string;
7
+ toolName?: string;
8
+ input?: unknown;
9
+ output?: unknown;
10
+ approval?: unknown;
11
+ providerExecuted?: boolean;
12
+ callProviderMetadata?: unknown;
13
+ errorText?: string;
14
+ providerMetadata?: unknown;
15
+ data?: unknown;
16
+ source?: unknown;
17
+ mimeType?: unknown;
18
+ url?: unknown;
19
+ }
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ChatMessagePartDto = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_validator_1 = require("class-validator");
15
+ class ChatMessagePartDto {
16
+ type;
17
+ text;
18
+ state;
19
+ toolInvocation;
20
+ toolCallId;
21
+ toolName;
22
+ input;
23
+ output;
24
+ approval;
25
+ providerExecuted;
26
+ callProviderMetadata;
27
+ errorText;
28
+ providerMetadata;
29
+ data;
30
+ source;
31
+ mimeType;
32
+ url;
33
+ }
34
+ exports.ChatMessagePartDto = ChatMessagePartDto;
35
+ __decorate([
36
+ (0, swagger_1.ApiProperty)({ description: 'The type of the message part (e.g. text, tool-invocation)' }),
37
+ (0, class_validator_1.IsString)(),
38
+ (0, class_validator_1.IsNotEmpty)(),
39
+ __metadata("design:type", String)
40
+ ], ChatMessagePartDto.prototype, "type", void 0);
41
+ __decorate([
42
+ (0, swagger_1.ApiPropertyOptional)({ description: 'The text content of this part' }),
43
+ (0, class_validator_1.IsString)(),
44
+ (0, class_validator_1.IsOptional)(),
45
+ __metadata("design:type", String)
46
+ ], ChatMessagePartDto.prototype, "text", void 0);
47
+ __decorate([
48
+ (0, swagger_1.ApiPropertyOptional)({ description: 'Streaming state of the part' }),
49
+ (0, class_validator_1.IsString)(),
50
+ (0, class_validator_1.IsOptional)(),
51
+ __metadata("design:type", String)
52
+ ], ChatMessagePartDto.prototype, "state", void 0);
53
+ __decorate([
54
+ (0, class_validator_1.Allow)(),
55
+ __metadata("design:type", Object)
56
+ ], ChatMessagePartDto.prototype, "toolInvocation", void 0);
57
+ __decorate([
58
+ (0, class_validator_1.Allow)(),
59
+ __metadata("design:type", String)
60
+ ], ChatMessagePartDto.prototype, "toolCallId", void 0);
61
+ __decorate([
62
+ (0, class_validator_1.Allow)(),
63
+ __metadata("design:type", String)
64
+ ], ChatMessagePartDto.prototype, "toolName", void 0);
65
+ __decorate([
66
+ (0, class_validator_1.Allow)(),
67
+ __metadata("design:type", Object)
68
+ ], ChatMessagePartDto.prototype, "input", void 0);
69
+ __decorate([
70
+ (0, class_validator_1.Allow)(),
71
+ __metadata("design:type", Object)
72
+ ], ChatMessagePartDto.prototype, "output", void 0);
73
+ __decorate([
74
+ (0, class_validator_1.Allow)(),
75
+ __metadata("design:type", Object)
76
+ ], ChatMessagePartDto.prototype, "approval", void 0);
77
+ __decorate([
78
+ (0, class_validator_1.Allow)(),
79
+ __metadata("design:type", Boolean)
80
+ ], ChatMessagePartDto.prototype, "providerExecuted", void 0);
81
+ __decorate([
82
+ (0, class_validator_1.Allow)(),
83
+ __metadata("design:type", Object)
84
+ ], ChatMessagePartDto.prototype, "callProviderMetadata", void 0);
85
+ __decorate([
86
+ (0, class_validator_1.Allow)(),
87
+ __metadata("design:type", String)
88
+ ], ChatMessagePartDto.prototype, "errorText", void 0);
89
+ __decorate([
90
+ (0, class_validator_1.Allow)(),
91
+ __metadata("design:type", Object)
92
+ ], ChatMessagePartDto.prototype, "providerMetadata", void 0);
93
+ __decorate([
94
+ (0, class_validator_1.Allow)(),
95
+ __metadata("design:type", Object)
96
+ ], ChatMessagePartDto.prototype, "data", void 0);
97
+ __decorate([
98
+ (0, class_validator_1.Allow)(),
99
+ __metadata("design:type", Object)
100
+ ], ChatMessagePartDto.prototype, "source", void 0);
101
+ __decorate([
102
+ (0, class_validator_1.Allow)(),
103
+ __metadata("design:type", Object)
104
+ ], ChatMessagePartDto.prototype, "mimeType", void 0);
105
+ __decorate([
106
+ (0, class_validator_1.Allow)(),
107
+ __metadata("design:type", Object)
108
+ ], ChatMessagePartDto.prototype, "url", void 0);
@@ -0,0 +1,8 @@
1
+ import { ChatMessagePartDto } from './chat-message-part.dto.js';
2
+ export declare class ChatMessageDto {
3
+ id?: string;
4
+ role: string;
5
+ content?: string;
6
+ parts?: ChatMessagePartDto[];
7
+ metadata?: unknown;
8
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ChatMessageDto = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_validator_1 = require("class-validator");
15
+ const class_transformer_1 = require("class-transformer");
16
+ const chat_message_part_dto_js_1 = require("./chat-message-part.dto.js");
17
+ class ChatMessageDto {
18
+ id;
19
+ role;
20
+ content;
21
+ parts;
22
+ metadata;
23
+ }
24
+ exports.ChatMessageDto = ChatMessageDto;
25
+ __decorate([
26
+ (0, swagger_1.ApiPropertyOptional)({ description: 'Unique message identifier' }),
27
+ (0, class_validator_1.IsString)(),
28
+ (0, class_validator_1.IsOptional)(),
29
+ __metadata("design:type", String)
30
+ ], ChatMessageDto.prototype, "id", void 0);
31
+ __decorate([
32
+ (0, swagger_1.ApiProperty)({
33
+ description: 'The role of the message sender (e.g. user, assistant)',
34
+ }),
35
+ (0, class_validator_1.IsString)(),
36
+ (0, class_validator_1.IsNotEmpty)(),
37
+ __metadata("design:type", String)
38
+ ], ChatMessageDto.prototype, "role", void 0);
39
+ __decorate([
40
+ (0, swagger_1.ApiPropertyOptional)({ description: 'The text content of the message (legacy format)' }),
41
+ (0, class_validator_1.IsString)(),
42
+ (0, class_validator_1.IsOptional)(),
43
+ __metadata("design:type", String)
44
+ ], ChatMessageDto.prototype, "content", void 0);
45
+ __decorate([
46
+ (0, swagger_1.ApiPropertyOptional)({
47
+ description: 'Message parts in Vercel AI SDK UIMessage format',
48
+ type: [chat_message_part_dto_js_1.ChatMessagePartDto],
49
+ }),
50
+ (0, class_validator_1.IsArray)(),
51
+ (0, class_validator_1.IsOptional)(),
52
+ (0, class_validator_1.ValidateNested)({ each: true }),
53
+ (0, class_transformer_1.Type)(() => chat_message_part_dto_js_1.ChatMessagePartDto),
54
+ __metadata("design:type", Array)
55
+ ], ChatMessageDto.prototype, "parts", void 0);
56
+ __decorate([
57
+ (0, class_validator_1.Allow)(),
58
+ __metadata("design:type", Object)
59
+ ], ChatMessageDto.prototype, "metadata", void 0);
@@ -0,0 +1,3 @@
1
+ export { AiChatRequestDto } from './ai-chat-request.dto.js';
2
+ export { ChatMessageDto } from './chat-message.dto.js';
3
+ export { ChatMessagePartDto } from './chat-message-part.dto.js';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChatMessagePartDto = exports.ChatMessageDto = exports.AiChatRequestDto = void 0;
4
+ var ai_chat_request_dto_js_1 = require("./ai-chat-request.dto.js");
5
+ Object.defineProperty(exports, "AiChatRequestDto", { enumerable: true, get: function () { return ai_chat_request_dto_js_1.AiChatRequestDto; } });
6
+ var chat_message_dto_js_1 = require("./chat-message.dto.js");
7
+ Object.defineProperty(exports, "ChatMessageDto", { enumerable: true, get: function () { return chat_message_dto_js_1.ChatMessageDto; } });
8
+ var chat_message_part_dto_js_1 = require("./chat-message-part.dto.js");
9
+ Object.defineProperty(exports, "ChatMessagePartDto", { enumerable: true, get: function () { return chat_message_part_dto_js_1.ChatMessagePartDto; } });
@@ -0,0 +1,3 @@
1
+ export { AiChatModule } from './ai-chat.module.js';
2
+ export type { AiChatModuleOptions, AiChatModuleAsyncOptions, AiChatModuleFeatures, } from './ai-chat-module-options.interface.js';
3
+ export { AiChatRequestDto, ChatMessageDto, ChatMessagePartDto } from './dto/index.js';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChatMessagePartDto = exports.ChatMessageDto = exports.AiChatRequestDto = exports.AiChatModule = void 0;
4
+ var ai_chat_module_js_1 = require("./ai-chat.module.js");
5
+ Object.defineProperty(exports, "AiChatModule", { enumerable: true, get: function () { return ai_chat_module_js_1.AiChatModule; } });
6
+ var index_js_1 = require("./dto/index.js");
7
+ Object.defineProperty(exports, "AiChatRequestDto", { enumerable: true, get: function () { return index_js_1.AiChatRequestDto; } });
8
+ Object.defineProperty(exports, "ChatMessageDto", { enumerable: true, get: function () { return index_js_1.ChatMessageDto; } });
9
+ Object.defineProperty(exports, "ChatMessagePartDto", { enumerable: true, get: function () { return index_js_1.ChatMessagePartDto; } });
@@ -0,0 +1,4 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import type { IncomingMessage } from 'http';
3
+ import type WebSocket from 'ws';
4
+ export declare function createSpeechStreamHandler(configService: ConfigService): (clientSocket: WebSocket, req: IncomingMessage) => Promise<void>;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSpeechStreamHandler = createSpeechStreamHandler;
4
+ const common_1 = require("@nestjs/common");
5
+ const ws_loader_js_1 = require("./ws-loader.js");
6
+ function createSpeechStreamHandler(configService) {
7
+ const logger = new common_1.Logger('SpeechStreamGateway');
8
+ return async (clientSocket, req) => {
9
+ const { WebSocket: WebSocketCtor } = await (0, ws_loader_js_1.loadWs)();
10
+ const WS_OPEN = WebSocketCtor.OPEN;
11
+ const url = new URL(req.url ?? '', `http://${req.headers.host}`);
12
+ const token = url.searchParams.get('token');
13
+ if (!token) {
14
+ logger.warn('Speech stream connection rejected: missing token');
15
+ clientSocket.close(4401, 'Missing authentication token');
16
+ return;
17
+ }
18
+ // Auth enforcement is the consumer's responsibility — the SDK just requires
19
+ // a token to be present. Validate it upstream (auth guard, reverse proxy, etc.).
20
+ const apiKey = configService.get('DEEPGRAM_API_KEY');
21
+ if (!apiKey) {
22
+ logger.error('DEEPGRAM_API_KEY not configured');
23
+ clientSocket.close(1011, 'Speech-to-text not configured');
24
+ return;
25
+ }
26
+ const language = url.searchParams.get('language') ?? 'en';
27
+ const dgUrl = new URL('wss://api.deepgram.com/v1/listen');
28
+ dgUrl.searchParams.set('model', 'nova-3');
29
+ dgUrl.searchParams.set('language', language);
30
+ dgUrl.searchParams.set('punctuate', 'true');
31
+ dgUrl.searchParams.set('interim_results', 'true');
32
+ dgUrl.searchParams.set('encoding', 'linear16');
33
+ dgUrl.searchParams.set('sample_rate', '16000');
34
+ const dgSocket = new WebSocketCtor(dgUrl.toString(), {
35
+ headers: { Authorization: `Token ${apiKey}` },
36
+ });
37
+ dgSocket.on('open', () => {
38
+ logger.log(`Deepgram connected (language=${language})`);
39
+ });
40
+ dgSocket.on('message', (data) => {
41
+ if (clientSocket.readyState === WS_OPEN) {
42
+ clientSocket.send(data.toString());
43
+ }
44
+ });
45
+ dgSocket.on('error', (err) => {
46
+ logger.error(`Deepgram error: ${err.message}`);
47
+ if (clientSocket.readyState === WS_OPEN) {
48
+ clientSocket.send(JSON.stringify({ type: 'error', message: 'Transcription error' }));
49
+ }
50
+ });
51
+ dgSocket.on('close', () => {
52
+ if (clientSocket.readyState === WS_OPEN) {
53
+ clientSocket.close();
54
+ }
55
+ });
56
+ clientSocket.on('message', (data) => {
57
+ if (dgSocket.readyState === WS_OPEN) {
58
+ dgSocket.send(data);
59
+ }
60
+ });
61
+ clientSocket.on('close', () => {
62
+ if (dgSocket.readyState === WS_OPEN) {
63
+ dgSocket.close();
64
+ }
65
+ });
66
+ clientSocket.on('error', (err) => {
67
+ logger.error(`Client socket error: ${err.message}`);
68
+ if (dgSocket.readyState === WS_OPEN) {
69
+ dgSocket.close();
70
+ }
71
+ });
72
+ };
73
+ }
@@ -0,0 +1,5 @@
1
+ export interface WsModule {
2
+ WebSocketServer: any;
3
+ WebSocket: any;
4
+ }
5
+ export declare function loadWs(): Promise<WsModule>;