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,72 @@
1
+ "use strict";
2
+ // Runtime loader for the optional `ws` peer dependency.
3
+ //
4
+ // `ws` is only needed when the speech-to-text feature is enabled
5
+ // (AiChatModule.attachWebSockets()). A top-level `import { WebSocketServer }
6
+ // from 'ws'` would force every NestJS consumer to install `ws` even when
7
+ // they don't use speech — and crash with `ERR_MODULE_NOT_FOUND` at startup
8
+ // if they don't.
9
+ //
10
+ // We use a plain dynamic `import('ws')` inside a try/catch:
11
+ // - In ESM dist: native dynamic import — Node resolves `ws` only at the
12
+ // moment `attachWebSockets` is called.
13
+ // - In CJS dist: TypeScript lowers `import('ws')` to a Promise wrapper around
14
+ // `require('ws')` — same lazy semantics.
15
+ // - Bundlers that bundle the server (esbuild / webpack for serverless deploys)
16
+ // will still see `ws` as a referenced module. If your deployment bundles,
17
+ // either install `ws` unconditionally, or mark it as an external in your
18
+ // bundler config (esbuild `--external:ws`, webpack `externals: { ws: 'commonjs ws' }`).
19
+ // Standard NestJS deployments don't bundle and are unaffected.
20
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ var desc = Object.getOwnPropertyDescriptor(m, k);
23
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
24
+ desc = { enumerable: true, get: function() { return m[k]; } };
25
+ }
26
+ Object.defineProperty(o, k2, desc);
27
+ }) : (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ o[k2] = m[k];
30
+ }));
31
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
32
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
33
+ }) : function(o, v) {
34
+ o["default"] = v;
35
+ });
36
+ var __importStar = (this && this.__importStar) || (function () {
37
+ var ownKeys = function(o) {
38
+ ownKeys = Object.getOwnPropertyNames || function (o) {
39
+ var ar = [];
40
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
41
+ return ar;
42
+ };
43
+ return ownKeys(o);
44
+ };
45
+ return function (mod) {
46
+ if (mod && mod.__esModule) return mod;
47
+ var result = {};
48
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
49
+ __setModuleDefault(result, mod);
50
+ return result;
51
+ };
52
+ })();
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.loadWs = loadWs;
55
+ let cached;
56
+ async function loadWs() {
57
+ if (cached)
58
+ return cached;
59
+ let mod;
60
+ try {
61
+ mod = await Promise.resolve().then(() => __importStar(require('ws')));
62
+ }
63
+ catch (err) {
64
+ throw new Error("[glirastes] The 'ws' package is required for the speech-to-text feature " +
65
+ '(AiChatModule.attachWebSockets). Install it with: npm install ws', { cause: err });
66
+ }
67
+ cached = {
68
+ WebSocketServer: mod.WebSocketServer ?? mod.default?.WebSocketServer,
69
+ WebSocket: mod.default ?? mod.WebSocket,
70
+ };
71
+ return cached;
72
+ }
@@ -0,0 +1,6 @@
1
+ import 'reflect-metadata';
2
+ import type { AiModuleOptions } from '../metadata.js';
3
+ /**
4
+ * Class decorator that marks a NestJS controller as an AI intent module.
5
+ */
6
+ export declare function AiModule(options: AiModuleOptions): ClassDecorator;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AiModule = AiModule;
4
+ require("reflect-metadata");
5
+ const constants_js_1 = require("./constants.js");
6
+ /**
7
+ * Class decorator that marks a NestJS controller as an AI intent module.
8
+ */
9
+ function AiModule(options) {
10
+ return (target) => {
11
+ Reflect.defineMetadata(constants_js_1.AI_MODULE_METADATA, options, target);
12
+ };
13
+ }
@@ -0,0 +1,5 @@
1
+ import 'reflect-metadata';
2
+ /**
3
+ * Property decorator that adds an AI-readable description to a DTO property.
4
+ */
5
+ export declare function AiParam(description: string): PropertyDecorator;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AiParam = AiParam;
4
+ require("reflect-metadata");
5
+ const constants_js_1 = require("./constants.js");
6
+ /**
7
+ * Property decorator that adds an AI-readable description to a DTO property.
8
+ */
9
+ function AiParam(description) {
10
+ return (target, propertyKey) => {
11
+ const existing = Reflect.getMetadata(constants_js_1.AI_PARAM_METADATA, target.constructor) ?? [];
12
+ existing.push({ propertyKey: String(propertyKey), description });
13
+ Reflect.defineMetadata(constants_js_1.AI_PARAM_METADATA, existing, target.constructor);
14
+ };
15
+ }
@@ -0,0 +1,6 @@
1
+ import 'reflect-metadata';
2
+ import type { AiToolOptions } from '../metadata.js';
3
+ /**
4
+ * Method decorator that exposes a controller method as an AI tool.
5
+ */
6
+ export declare function AiTool(options: AiToolOptions): MethodDecorator;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AiTool = AiTool;
4
+ require("reflect-metadata");
5
+ const constants_js_1 = require("./constants.js");
6
+ /**
7
+ * Method decorator that exposes a controller method as an AI tool.
8
+ */
9
+ function AiTool(options) {
10
+ return (target, propertyKey, _descriptor) => {
11
+ const methodName = String(propertyKey);
12
+ const meta = { ...options, methodName };
13
+ // Store per-method metadata
14
+ Reflect.defineMetadata(constants_js_1.AI_TOOL_METADATA, meta, target, propertyKey);
15
+ // Maintain array of decorated method names on the class
16
+ const existingTools = Reflect.getMetadata(constants_js_1.AI_TOOL_METHODS_METADATA, target.constructor) ?? [];
17
+ if (!existingTools.includes(methodName)) {
18
+ existingTools.push(methodName);
19
+ }
20
+ Reflect.defineMetadata(constants_js_1.AI_TOOL_METHODS_METADATA, existingTools, target.constructor);
21
+ };
22
+ }
@@ -0,0 +1,4 @@
1
+ export declare const AI_MODULE_METADATA: unique symbol;
2
+ export declare const AI_TOOL_METADATA: unique symbol;
3
+ export declare const AI_TOOL_METHODS_METADATA: unique symbol;
4
+ export declare const AI_PARAM_METADATA: unique symbol;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AI_PARAM_METADATA = exports.AI_TOOL_METHODS_METADATA = exports.AI_TOOL_METADATA = exports.AI_MODULE_METADATA = void 0;
4
+ exports.AI_MODULE_METADATA = Symbol('AI_MODULE_METADATA');
5
+ exports.AI_TOOL_METADATA = Symbol('AI_TOOL_METADATA');
6
+ exports.AI_TOOL_METHODS_METADATA = Symbol('AI_TOOL_METHODS_METADATA');
7
+ exports.AI_PARAM_METADATA = Symbol('AI_PARAM_METADATA');
@@ -0,0 +1,14 @@
1
+ export { AiModule } from './decorators/ai-module.decorator.js';
2
+ export { AiTool } from './decorators/ai-tool.decorator.js';
3
+ export { AiParam } from './decorators/ai-param.decorator.js';
4
+ export { getAiModuleMeta, getAiToolMeta, getAllAiToolNames, getAllAiTools, getAiParamMeta, } from './metadata.js';
5
+ export type { AiModuleOptions, AiToolOptions, AiModuleMeta, AiToolMeta, AiParamDescription, } from './metadata.js';
6
+ export { AiToolsExplorerService } from './module/ai-tools-explorer.service.js';
7
+ export { AiToolsService } from './module/ai-tools.service.js';
8
+ export { createAiToolsProviders, type AiToolsModuleOptions, } from './module/ai-tools.module.js';
9
+ export { scanNestJsControllers, type NestJsScanOptions, type NestJsScanResult, } from './scanner/nestjs-scanner.js';
10
+ export { buildZodSchemaFromDto, hasAiRelevantMeta, extractRouteParams } from './scanner/schema-builder.js';
11
+ export { applyAiExtensions } from './swagger.js';
12
+ export { AiChatModule } from './chat/ai-chat.module.js';
13
+ export type { AiChatModuleOptions, AiChatModuleAsyncOptions, AiChatModuleFeatures } from './chat/ai-chat-module-options.interface.js';
14
+ export { AiChatRequestDto, ChatMessageDto, ChatMessagePartDto } from './chat/dto/index.js';
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChatMessagePartDto = exports.ChatMessageDto = exports.AiChatRequestDto = exports.AiChatModule = exports.applyAiExtensions = exports.extractRouteParams = exports.hasAiRelevantMeta = exports.buildZodSchemaFromDto = exports.scanNestJsControllers = exports.createAiToolsProviders = exports.AiToolsService = exports.AiToolsExplorerService = exports.getAiParamMeta = exports.getAllAiTools = exports.getAllAiToolNames = exports.getAiToolMeta = exports.getAiModuleMeta = exports.AiParam = exports.AiTool = exports.AiModule = void 0;
4
+ // Decorators
5
+ var ai_module_decorator_js_1 = require("./decorators/ai-module.decorator.js");
6
+ Object.defineProperty(exports, "AiModule", { enumerable: true, get: function () { return ai_module_decorator_js_1.AiModule; } });
7
+ var ai_tool_decorator_js_1 = require("./decorators/ai-tool.decorator.js");
8
+ Object.defineProperty(exports, "AiTool", { enumerable: true, get: function () { return ai_tool_decorator_js_1.AiTool; } });
9
+ var ai_param_decorator_js_1 = require("./decorators/ai-param.decorator.js");
10
+ Object.defineProperty(exports, "AiParam", { enumerable: true, get: function () { return ai_param_decorator_js_1.AiParam; } });
11
+ // Metadata readers
12
+ var metadata_js_1 = require("./metadata.js");
13
+ Object.defineProperty(exports, "getAiModuleMeta", { enumerable: true, get: function () { return metadata_js_1.getAiModuleMeta; } });
14
+ Object.defineProperty(exports, "getAiToolMeta", { enumerable: true, get: function () { return metadata_js_1.getAiToolMeta; } });
15
+ Object.defineProperty(exports, "getAllAiToolNames", { enumerable: true, get: function () { return metadata_js_1.getAllAiToolNames; } });
16
+ Object.defineProperty(exports, "getAllAiTools", { enumerable: true, get: function () { return metadata_js_1.getAllAiTools; } });
17
+ Object.defineProperty(exports, "getAiParamMeta", { enumerable: true, get: function () { return metadata_js_1.getAiParamMeta; } });
18
+ // Module (DI)
19
+ var ai_tools_explorer_service_js_1 = require("./module/ai-tools-explorer.service.js");
20
+ Object.defineProperty(exports, "AiToolsExplorerService", { enumerable: true, get: function () { return ai_tools_explorer_service_js_1.AiToolsExplorerService; } });
21
+ var ai_tools_service_js_1 = require("./module/ai-tools.service.js");
22
+ Object.defineProperty(exports, "AiToolsService", { enumerable: true, get: function () { return ai_tools_service_js_1.AiToolsService; } });
23
+ var ai_tools_module_js_1 = require("./module/ai-tools.module.js");
24
+ Object.defineProperty(exports, "createAiToolsProviders", { enumerable: true, get: function () { return ai_tools_module_js_1.createAiToolsProviders; } });
25
+ // Build-time scanner
26
+ var nestjs_scanner_js_1 = require("./scanner/nestjs-scanner.js");
27
+ Object.defineProperty(exports, "scanNestJsControllers", { enumerable: true, get: function () { return nestjs_scanner_js_1.scanNestJsControllers; } });
28
+ // Schema builder
29
+ var schema_builder_js_1 = require("./scanner/schema-builder.js");
30
+ Object.defineProperty(exports, "buildZodSchemaFromDto", { enumerable: true, get: function () { return schema_builder_js_1.buildZodSchemaFromDto; } });
31
+ Object.defineProperty(exports, "hasAiRelevantMeta", { enumerable: true, get: function () { return schema_builder_js_1.hasAiRelevantMeta; } });
32
+ Object.defineProperty(exports, "extractRouteParams", { enumerable: true, get: function () { return schema_builder_js_1.extractRouteParams; } });
33
+ // Swagger / OpenAPI
34
+ var swagger_js_1 = require("./swagger.js");
35
+ Object.defineProperty(exports, "applyAiExtensions", { enumerable: true, get: function () { return swagger_js_1.applyAiExtensions; } });
36
+ // Chat module
37
+ var ai_chat_module_js_1 = require("./chat/ai-chat.module.js");
38
+ Object.defineProperty(exports, "AiChatModule", { enumerable: true, get: function () { return ai_chat_module_js_1.AiChatModule; } });
39
+ var index_js_1 = require("./chat/dto/index.js");
40
+ Object.defineProperty(exports, "AiChatRequestDto", { enumerable: true, get: function () { return index_js_1.AiChatRequestDto; } });
41
+ Object.defineProperty(exports, "ChatMessageDto", { enumerable: true, get: function () { return index_js_1.ChatMessageDto; } });
42
+ Object.defineProperty(exports, "ChatMessagePartDto", { enumerable: true, get: function () { return index_js_1.ChatMessagePartDto; } });
@@ -0,0 +1,39 @@
1
+ import 'reflect-metadata';
2
+ import type { ModuleClassificationConfig, ModuleExecutionConfig, EndpointMethod, UiActionTemplate, UiPattern } from '../../../types.js';
3
+ import type { z } from 'zod';
4
+ export interface AiModuleOptions {
5
+ intent: string;
6
+ classification: ModuleClassificationConfig;
7
+ execution?: Partial<ModuleExecutionConfig>;
8
+ systemPrompt?: string;
9
+ }
10
+ export interface AiToolOptions {
11
+ name: string;
12
+ description: string;
13
+ needsApproval?: boolean;
14
+ sharedWith?: string[];
15
+ uiActionOnSuccess?: UiActionTemplate;
16
+ uiPattern?: UiPattern;
17
+ method?: EndpointMethod;
18
+ path?: string;
19
+ /**
20
+ * Optional Zod schema describing the tool's response shape.
21
+ * When provided, a compact description is auto-appended to the tool description.
22
+ */
23
+ outputSchema?: z.ZodTypeAny;
24
+ }
25
+ export interface AiParamDescription {
26
+ propertyKey: string;
27
+ description: string;
28
+ }
29
+ export type AiModuleMeta = AiModuleOptions;
30
+ export interface AiToolMeta extends AiToolOptions {
31
+ methodName: string;
32
+ }
33
+ export declare function getAiModuleMeta(controllerClass: Function): AiModuleMeta | undefined;
34
+ export declare function getAiToolMeta(controllerClass: Function, methodName: string): AiToolMeta | undefined;
35
+ export declare function getAllAiToolNames(controllerClass: Function): string[];
36
+ export declare function getAllAiTools(controllerClass: Function): Array<AiToolMeta & {
37
+ module?: string;
38
+ }>;
39
+ export declare function getAiParamMeta(dtoClass: Function): AiParamDescription[];
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAiModuleMeta = getAiModuleMeta;
4
+ exports.getAiToolMeta = getAiToolMeta;
5
+ exports.getAllAiToolNames = getAllAiToolNames;
6
+ exports.getAllAiTools = getAllAiTools;
7
+ exports.getAiParamMeta = getAiParamMeta;
8
+ require("reflect-metadata");
9
+ const constants_js_1 = require("./decorators/constants.js");
10
+ // ---------------------------------------------------------------------------
11
+ // Metadata readers
12
+ // ---------------------------------------------------------------------------
13
+ function getAiModuleMeta(controllerClass) {
14
+ return Reflect.getMetadata(constants_js_1.AI_MODULE_METADATA, controllerClass);
15
+ }
16
+ function getAiToolMeta(controllerClass, methodName) {
17
+ return Reflect.getMetadata(constants_js_1.AI_TOOL_METADATA, controllerClass.prototype, methodName);
18
+ }
19
+ function getAllAiToolNames(controllerClass) {
20
+ return (Reflect.getMetadata(constants_js_1.AI_TOOL_METHODS_METADATA, controllerClass) ?? []);
21
+ }
22
+ function getAllAiTools(controllerClass) {
23
+ const moduleMeta = getAiModuleMeta(controllerClass);
24
+ const toolNames = getAllAiToolNames(controllerClass);
25
+ return toolNames
26
+ .map((methodName) => {
27
+ const toolMeta = getAiToolMeta(controllerClass, methodName);
28
+ if (!toolMeta)
29
+ return null;
30
+ return { ...toolMeta, module: moduleMeta?.intent };
31
+ })
32
+ .filter((t) => t !== null);
33
+ }
34
+ function getAiParamMeta(dtoClass) {
35
+ return Reflect.getMetadata(constants_js_1.AI_PARAM_METADATA, dtoClass) ?? [];
36
+ }
@@ -0,0 +1,36 @@
1
+ import 'reflect-metadata';
2
+ import type { AiEndpointToolDefinition, IntentModule } from '../../../../types.js';
3
+ import { type AiModuleMeta, type AiToolMeta } from '../metadata.js';
4
+ interface DiscoveredController {
5
+ controllerClass: Function;
6
+ moduleMeta: AiModuleMeta;
7
+ tools: Array<AiToolMeta & {
8
+ module: string;
9
+ }>;
10
+ }
11
+ /**
12
+ * Discovers AI-decorated controllers at runtime using NestJS DiscoveryService.
13
+ * Injectable as a NestJS provider.
14
+ */
15
+ export declare class AiToolsExplorerService {
16
+ private readonly discoveryService;
17
+ private readonly reflector;
18
+ private readonly options?;
19
+ private readonly discovered;
20
+ private readonly endpointToolDefs;
21
+ private readonly intentModules;
22
+ constructor(discoveryService: unknown, reflector: unknown, options?: {
23
+ controllers?: Function[];
24
+ } | undefined);
25
+ /**
26
+ * Called during module initialization to scan all controllers.
27
+ */
28
+ explore(): void;
29
+ private scanControllers;
30
+ private buildToolDefinitions;
31
+ private buildIntentModules;
32
+ getEndpointToolDefinitions(): ReadonlyArray<AiEndpointToolDefinition>;
33
+ getIntentModules(): ReadonlyMap<string, IntentModule>;
34
+ getDiscoveredControllers(): ReadonlyArray<DiscoveredController>;
35
+ }
36
+ export {};
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AiToolsExplorerService = void 0;
4
+ require("reflect-metadata");
5
+ const zod_1 = require("zod");
6
+ const metadata_js_1 = require("../metadata.js");
7
+ const schema_builder_js_1 = require("../scanner/schema-builder.js");
8
+ const HTTP_METHOD_MAP = {
9
+ 0: 'GET',
10
+ 1: 'POST',
11
+ 2: 'PUT',
12
+ 3: 'DELETE',
13
+ 4: 'PATCH',
14
+ };
15
+ /**
16
+ * Discovers AI-decorated controllers at runtime using NestJS DiscoveryService.
17
+ * Injectable as a NestJS provider.
18
+ */
19
+ class AiToolsExplorerService {
20
+ discoveryService;
21
+ reflector;
22
+ options;
23
+ discovered = [];
24
+ endpointToolDefs = [];
25
+ intentModules = new Map();
26
+ constructor(discoveryService, reflector, options) {
27
+ this.discoveryService = discoveryService;
28
+ this.reflector = reflector;
29
+ this.options = options;
30
+ }
31
+ /**
32
+ * Called during module initialization to scan all controllers.
33
+ */
34
+ explore() {
35
+ this.scanControllers();
36
+ this.buildToolDefinitions();
37
+ this.buildIntentModules();
38
+ }
39
+ scanControllers() {
40
+ const ds = this.discoveryService;
41
+ const controllers = ds.getControllers();
42
+ for (const wrapper of controllers) {
43
+ const controllerClass = wrapper.metatype;
44
+ if (!controllerClass)
45
+ continue;
46
+ const moduleMeta = (0, metadata_js_1.getAiModuleMeta)(controllerClass);
47
+ if (!moduleMeta)
48
+ continue;
49
+ if (this.options?.controllers &&
50
+ !this.options.controllers.includes(controllerClass)) {
51
+ continue;
52
+ }
53
+ const tools = (0, metadata_js_1.getAllAiTools)(controllerClass);
54
+ this.discovered.push({
55
+ controllerClass,
56
+ moduleMeta,
57
+ tools: tools.map((t) => ({
58
+ ...t,
59
+ module: t.module ?? moduleMeta.intent,
60
+ })),
61
+ });
62
+ }
63
+ }
64
+ buildToolDefinitions() {
65
+ const ref = this.reflector;
66
+ for (const ctrl of this.discovered) {
67
+ const controllerPath = ref.get('path', ctrl.controllerClass) ?? '';
68
+ for (const tool of ctrl.tools) {
69
+ const httpMethodNum = ref.get('method', ctrl.controllerClass.prototype[tool.methodName]);
70
+ const httpMethod = tool.method ??
71
+ HTTP_METHOD_MAP[httpMethodNum ?? 0] ??
72
+ 'GET';
73
+ const methodPath = ref.get('path', ctrl.controllerClass.prototype[tool.methodName]) ?? '';
74
+ const fullPath = `/api/${controllerPath}/${methodPath}`
75
+ .replace(/\/+/g, '/')
76
+ .replace(/\/$/, '') || '/';
77
+ // Resolve DTO
78
+ const paramTypes = Reflect.getMetadata('design:paramtypes', ctrl.controllerClass.prototype, tool.methodName);
79
+ let inputSchema = zod_1.z.object({});
80
+ if (paramTypes) {
81
+ for (const pt of paramTypes) {
82
+ if (pt && typeof pt === 'function' && (0, schema_builder_js_1.hasAiRelevantMeta)(pt)) {
83
+ inputSchema = (0, schema_builder_js_1.buildZodSchemaFromDto)(pt);
84
+ break;
85
+ }
86
+ }
87
+ }
88
+ // Merge path parameters into input schema
89
+ const pathParams = (0, schema_builder_js_1.extractRouteParams)(ctrl.controllerClass, tool.methodName);
90
+ if (pathParams.length > 0) {
91
+ const pathShape = {};
92
+ for (const paramName of pathParams) {
93
+ if (!(inputSchema instanceof zod_1.z.ZodObject) || !(paramName in inputSchema.shape)) {
94
+ pathShape[paramName] = zod_1.z.string().uuid().describe(`Path parameter: ${paramName}`);
95
+ }
96
+ }
97
+ if (Object.keys(pathShape).length > 0) {
98
+ inputSchema = inputSchema instanceof zod_1.z.ZodObject
99
+ ? inputSchema.extend(pathShape)
100
+ : zod_1.z.object(pathShape);
101
+ }
102
+ }
103
+ this.endpointToolDefs.push({
104
+ id: `${ctrl.moduleMeta.intent}.${tool.name}`,
105
+ toolName: tool.name,
106
+ module: tool.module,
107
+ sharedWith: tool.sharedWith,
108
+ description: tool.description,
109
+ method: httpMethod,
110
+ path: fullPath,
111
+ inputSchema,
112
+ outputSchema: tool.outputSchema,
113
+ needsApproval: tool.needsApproval,
114
+ uiActionOnSuccess: tool.uiActionOnSuccess,
115
+ uiPattern: tool.uiPattern,
116
+ });
117
+ }
118
+ }
119
+ }
120
+ buildIntentModules() {
121
+ for (const ctrl of this.discovered) {
122
+ const intent = ctrl.moduleMeta.intent;
123
+ const toolNames = ctrl.tools.map((t) => t.name);
124
+ const existing = this.intentModules.get(intent);
125
+ if (existing) {
126
+ existing.toolNames.push(...toolNames);
127
+ }
128
+ else {
129
+ const meta = {
130
+ classification: ctrl.moduleMeta.classification,
131
+ execution: ctrl.moduleMeta.execution,
132
+ systemPrompt: ctrl.moduleMeta.systemPrompt,
133
+ };
134
+ this.intentModules.set(intent, { type: intent, toolNames, meta });
135
+ }
136
+ }
137
+ // Expand sharedWith
138
+ for (const def of this.endpointToolDefs) {
139
+ if (!def.sharedWith)
140
+ continue;
141
+ for (const sharedModule of def.sharedWith) {
142
+ const mod = this.intentModules.get(sharedModule);
143
+ if (mod && !mod.toolNames.includes(def.toolName)) {
144
+ mod.toolNames.push(def.toolName);
145
+ }
146
+ }
147
+ }
148
+ }
149
+ getEndpointToolDefinitions() {
150
+ return this.endpointToolDefs;
151
+ }
152
+ getIntentModules() {
153
+ return this.intentModules;
154
+ }
155
+ getDiscoveredControllers() {
156
+ return this.discovered;
157
+ }
158
+ }
159
+ exports.AiToolsExplorerService = AiToolsExplorerService;
@@ -0,0 +1,37 @@
1
+ import { AiToolsExplorerService } from './ai-tools-explorer.service.js';
2
+ import { AiToolsService } from './ai-tools.service.js';
3
+ export interface AiToolsModuleOptions {
4
+ controllers?: Function[];
5
+ global?: boolean;
6
+ }
7
+ /**
8
+ * Configuration factory for NestJS module registration.
9
+ *
10
+ * Usage in a NestJS module:
11
+ * ```ts
12
+ * import { Module } from '@nestjs/common';
13
+ * import { DiscoveryModule, DiscoveryService, Reflector } from '@nestjs/core';
14
+ * import { createAiToolsProviders } from '../index.js';
15
+ *
16
+ * @Module({
17
+ * imports: [DiscoveryModule],
18
+ * providers: [...createAiToolsProviders()],
19
+ * exports: [AiToolsService],
20
+ * })
21
+ * export class AiToolsModule {}
22
+ * ```
23
+ */
24
+ export declare function createAiToolsProviders(options?: AiToolsModuleOptions): {
25
+ options: AiToolsModuleOptions;
26
+ ExplorerService: typeof AiToolsExplorerService;
27
+ ToolsService: typeof AiToolsService;
28
+ /**
29
+ * Factory function to create the explorer service with NestJS DI.
30
+ * Call this in a custom provider factory.
31
+ */
32
+ createExplorer(discoveryService: unknown, reflector: unknown): AiToolsExplorerService;
33
+ /**
34
+ * Factory function to create the tools service.
35
+ */
36
+ createService(explorer: AiToolsExplorerService): AiToolsService;
37
+ };
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAiToolsProviders = createAiToolsProviders;
4
+ const ai_tools_explorer_service_js_1 = require("./ai-tools-explorer.service.js");
5
+ const ai_tools_service_js_1 = require("./ai-tools.service.js");
6
+ /**
7
+ * Configuration factory for NestJS module registration.
8
+ *
9
+ * Usage in a NestJS module:
10
+ * ```ts
11
+ * import { Module } from '@nestjs/common';
12
+ * import { DiscoveryModule, DiscoveryService, Reflector } from '@nestjs/core';
13
+ * import { createAiToolsProviders } from '../index.js';
14
+ *
15
+ * @Module({
16
+ * imports: [DiscoveryModule],
17
+ * providers: [...createAiToolsProviders()],
18
+ * exports: [AiToolsService],
19
+ * })
20
+ * export class AiToolsModule {}
21
+ * ```
22
+ */
23
+ function createAiToolsProviders(options) {
24
+ return {
25
+ options: options ?? {},
26
+ ExplorerService: ai_tools_explorer_service_js_1.AiToolsExplorerService,
27
+ ToolsService: ai_tools_service_js_1.AiToolsService,
28
+ /**
29
+ * Factory function to create the explorer service with NestJS DI.
30
+ * Call this in a custom provider factory.
31
+ */
32
+ createExplorer(discoveryService, reflector) {
33
+ const explorer = new ai_tools_explorer_service_js_1.AiToolsExplorerService(discoveryService, reflector, options);
34
+ explorer.explore();
35
+ return explorer;
36
+ },
37
+ /**
38
+ * Factory function to create the tools service.
39
+ */
40
+ createService(explorer) {
41
+ return new ai_tools_service_js_1.AiToolsService(explorer);
42
+ },
43
+ };
44
+ }
@@ -0,0 +1,28 @@
1
+ import type { AiEndpointToolDefinition, IntentModule, ToolContext, ToolRegistry } from '../../../../types.js';
2
+ import { type ToolToAiToolOptions } from '../../../core/index.js';
3
+ import type { AiToolsExplorerService } from './ai-tools-explorer.service.js';
4
+ /**
5
+ * Injectable service for accessing AI tool definitions at runtime.
6
+ */
7
+ export declare class AiToolsService {
8
+ private readonly explorer;
9
+ constructor(explorer: AiToolsExplorerService);
10
+ getEndpointTools(): ReadonlyArray<AiEndpointToolDefinition>;
11
+ getIntentModules(): ReadonlyMap<string, IntentModule>;
12
+ getToolsForIntent(intent: string): AiEndpointToolDefinition[];
13
+ buildToolRegistry(): ToolRegistry;
14
+ buildAiTools(context: ToolContext, options?: ToolToAiToolOptions): Promise<Record<string, {
15
+ _toolId: string;
16
+ description: string;
17
+ parameters: import("zod").ZodType<any, import("zod").ZodTypeDef, any>;
18
+ needsApproval: ((input: unknown) => Promise<boolean>) | undefined;
19
+ execute: (input: unknown) => Promise<unknown>;
20
+ }>>;
21
+ buildAiToolsForIntent(intent: string, context: ToolContext, options?: ToolToAiToolOptions): Promise<Record<string, {
22
+ _toolId: string;
23
+ description: string;
24
+ parameters: import("zod").ZodType<any, import("zod").ZodTypeDef, any>;
25
+ needsApproval: ((input: unknown) => Promise<boolean>) | undefined;
26
+ execute: (input: unknown) => Promise<unknown>;
27
+ }>>;
28
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AiToolsService = void 0;
4
+ const index_js_1 = require("../../../core/index.js");
5
+ /**
6
+ * Injectable service for accessing AI tool definitions at runtime.
7
+ */
8
+ class AiToolsService {
9
+ explorer;
10
+ constructor(explorer) {
11
+ this.explorer = explorer;
12
+ }
13
+ getEndpointTools() {
14
+ return this.explorer.getEndpointToolDefinitions();
15
+ }
16
+ getIntentModules() {
17
+ return this.explorer.getIntentModules();
18
+ }
19
+ getToolsForIntent(intent) {
20
+ const mod = this.explorer.getIntentModules().get(intent);
21
+ if (!mod)
22
+ return [];
23
+ const toolNameSet = new Set(mod.toolNames);
24
+ return this.explorer
25
+ .getEndpointToolDefinitions()
26
+ .filter((t) => toolNameSet.has(t.toolName));
27
+ }
28
+ buildToolRegistry() {
29
+ return (0, index_js_1.endpointToolsToRegistry)(this.explorer.getEndpointToolDefinitions());
30
+ }
31
+ async buildAiTools(context, options) {
32
+ const registry = this.buildToolRegistry();
33
+ return (0, index_js_1.toolsToAiTools)(registry, context, options);
34
+ }
35
+ async buildAiToolsForIntent(intent, context, options) {
36
+ const tools = this.getToolsForIntent(intent);
37
+ const registry = (0, index_js_1.endpointToolsToRegistry)(tools);
38
+ return (0, index_js_1.toolsToAiTools)(registry, context, options);
39
+ }
40
+ }
41
+ exports.AiToolsService = AiToolsService;