@solidxai/core 0.1.10-beta.26 → 0.1.10-beta.28

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 (315) hide show
  1. package/.claude/settings.local.json +15 -0
  2. package/CLAUDE.md +26 -0
  3. package/MICROSOFT_ACTIVE_DIRECTORY_OAUTH_FLOW.md +616 -0
  4. package/ai-interaction-cleanup.sql +53 -0
  5. package/dist/constants/error-messages.d.ts +1 -0
  6. package/dist/constants/error-messages.d.ts.map +1 -1
  7. package/dist/constants/error-messages.js +1 -0
  8. package/dist/constants/error-messages.js.map +1 -1
  9. package/dist/controllers/microsoft-active-directory-authentication.controller.d.ts +28 -0
  10. package/dist/controllers/microsoft-active-directory-authentication.controller.d.ts.map +1 -0
  11. package/dist/controllers/microsoft-active-directory-authentication.controller.js +122 -0
  12. package/dist/controllers/microsoft-active-directory-authentication.controller.js.map +1 -0
  13. package/dist/controllers/service.controller.d.ts +1 -5
  14. package/dist/controllers/service.controller.d.ts.map +1 -1
  15. package/dist/controllers/service.controller.js +6 -11
  16. package/dist/controllers/service.controller.js.map +1 -1
  17. package/dist/controllers/test.controller.d.ts +1 -6
  18. package/dist/controllers/test.controller.d.ts.map +1 -1
  19. package/dist/controllers/test.controller.js +2 -20
  20. package/dist/controllers/test.controller.js.map +1 -1
  21. package/dist/dtos/create-permission-metadata.dto.d.ts.map +1 -1
  22. package/dist/dtos/create-permission-metadata.dto.js +2 -0
  23. package/dist/dtos/create-permission-metadata.dto.js.map +1 -1
  24. package/dist/dtos/create-role-metadata.dto.d.ts +2 -0
  25. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  26. package/dist/dtos/create-role-metadata.dto.js +13 -1
  27. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  28. package/dist/dtos/import-instructions.dto.d.ts +2 -0
  29. package/dist/dtos/import-instructions.dto.d.ts.map +1 -1
  30. package/dist/dtos/import-instructions.dto.js +15 -1
  31. package/dist/dtos/import-instructions.dto.js.map +1 -1
  32. package/dist/dtos/update-permission-metadata.dto.d.ts.map +1 -1
  33. package/dist/dtos/update-permission-metadata.dto.js +3 -1
  34. package/dist/dtos/update-permission-metadata.dto.js.map +1 -1
  35. package/dist/dtos/update-role-metadata.dto.d.ts +2 -0
  36. package/dist/dtos/update-role-metadata.dto.d.ts.map +1 -1
  37. package/dist/dtos/update-role-metadata.dto.js +13 -1
  38. package/dist/dtos/update-role-metadata.dto.js.map +1 -1
  39. package/dist/entities/action-metadata.entity.d.ts.map +1 -1
  40. package/dist/entities/action-metadata.entity.js +1 -0
  41. package/dist/entities/action-metadata.entity.js.map +1 -1
  42. package/dist/entities/agent-event.entity.d.ts.map +1 -1
  43. package/dist/entities/agent-event.entity.js +1 -0
  44. package/dist/entities/agent-event.entity.js.map +1 -1
  45. package/dist/entities/agent-session.entity.d.ts.map +1 -1
  46. package/dist/entities/agent-session.entity.js +1 -0
  47. package/dist/entities/agent-session.entity.js.map +1 -1
  48. package/dist/entities/chatter-message.entity.d.ts.map +1 -1
  49. package/dist/entities/chatter-message.entity.js +2 -0
  50. package/dist/entities/chatter-message.entity.js.map +1 -1
  51. package/dist/entities/email-template.entity.d.ts.map +1 -1
  52. package/dist/entities/email-template.entity.js +1 -0
  53. package/dist/entities/email-template.entity.js.map +1 -1
  54. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  55. package/dist/entities/field-metadata.entity.js +4 -0
  56. package/dist/entities/field-metadata.entity.js.map +1 -1
  57. package/dist/entities/list-of-values.entity.d.ts.map +1 -1
  58. package/dist/entities/list-of-values.entity.js +4 -0
  59. package/dist/entities/list-of-values.entity.js.map +1 -1
  60. package/dist/entities/locale.entity.d.ts.map +1 -1
  61. package/dist/entities/locale.entity.js +1 -0
  62. package/dist/entities/locale.entity.js.map +1 -1
  63. package/dist/entities/media.entity.d.ts.map +1 -1
  64. package/dist/entities/media.entity.js +1 -0
  65. package/dist/entities/media.entity.js.map +1 -1
  66. package/dist/entities/menu-item-metadata.entity.d.ts.map +1 -1
  67. package/dist/entities/menu-item-metadata.entity.js +2 -0
  68. package/dist/entities/menu-item-metadata.entity.js.map +1 -1
  69. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  70. package/dist/entities/model-metadata.entity.js +3 -0
  71. package/dist/entities/model-metadata.entity.js.map +1 -1
  72. package/dist/entities/module-metadata.entity.d.ts.map +1 -1
  73. package/dist/entities/module-metadata.entity.js +2 -0
  74. package/dist/entities/module-metadata.entity.js.map +1 -1
  75. package/dist/entities/permission-metadata.entity.d.ts.map +1 -1
  76. package/dist/entities/permission-metadata.entity.js.map +1 -1
  77. package/dist/entities/role-metadata.entity.d.ts +2 -0
  78. package/dist/entities/role-metadata.entity.d.ts.map +1 -1
  79. package/dist/entities/role-metadata.entity.js +10 -2
  80. package/dist/entities/role-metadata.entity.js.map +1 -1
  81. package/dist/entities/saved-filters.entity.d.ts.map +1 -1
  82. package/dist/entities/saved-filters.entity.js +3 -0
  83. package/dist/entities/saved-filters.entity.js.map +1 -1
  84. package/dist/entities/scheduled-job.entity.d.ts.map +1 -1
  85. package/dist/entities/scheduled-job.entity.js +2 -0
  86. package/dist/entities/scheduled-job.entity.js.map +1 -1
  87. package/dist/entities/security-rule.entity.d.ts.map +1 -1
  88. package/dist/entities/security-rule.entity.js +1 -0
  89. package/dist/entities/security-rule.entity.js.map +1 -1
  90. package/dist/entities/sms-template.entity.d.ts.map +1 -1
  91. package/dist/entities/sms-template.entity.js +2 -0
  92. package/dist/entities/sms-template.entity.js.map +1 -1
  93. package/dist/entities/user-activity-history.entity.d.ts.map +1 -1
  94. package/dist/entities/user-activity-history.entity.js +1 -0
  95. package/dist/entities/user-activity-history.entity.js.map +1 -1
  96. package/dist/entities/user.entity.d.ts +3 -0
  97. package/dist/entities/user.entity.d.ts.map +1 -1
  98. package/dist/entities/user.entity.js +15 -1
  99. package/dist/entities/user.entity.js.map +1 -1
  100. package/dist/entities/view-metadata.entity.d.ts.map +1 -1
  101. package/dist/entities/view-metadata.entity.js +2 -0
  102. package/dist/entities/view-metadata.entity.js.map +1 -1
  103. package/dist/helpers/microsoft-active-directory-oauth.helper.d.ts +34 -0
  104. package/dist/helpers/microsoft-active-directory-oauth.helper.d.ts.map +1 -0
  105. package/dist/helpers/microsoft-active-directory-oauth.helper.js +43 -0
  106. package/dist/helpers/microsoft-active-directory-oauth.helper.js.map +1 -0
  107. package/dist/helpers/module.helper.js +0 -5
  108. package/dist/helpers/module.helper.js.map +1 -1
  109. package/dist/helpers/user-helper.d.ts.map +1 -1
  110. package/dist/helpers/user-helper.js +4 -0
  111. package/dist/helpers/user-helper.js.map +1 -1
  112. package/dist/index.d.ts +1 -5
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +1 -5
  115. package/dist/index.js.map +1 -1
  116. package/dist/interfaces.d.ts +0 -8
  117. package/dist/interfaces.d.ts.map +1 -1
  118. package/dist/interfaces.js.map +1 -1
  119. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.d.ts +14 -0
  120. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.d.ts.map +1 -0
  121. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.js +67 -0
  122. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.js.map +1 -0
  123. package/dist/seeders/seed-data/solid-core-metadata.json +317 -814
  124. package/dist/services/authentication.service.d.ts +12 -0
  125. package/dist/services/authentication.service.d.ts.map +1 -1
  126. package/dist/services/authentication.service.js +64 -0
  127. package/dist/services/authentication.service.js.map +1 -1
  128. package/dist/services/crud-helper.service.d.ts.map +1 -1
  129. package/dist/services/crud-helper.service.js +11 -3
  130. package/dist/services/crud-helper.service.js.map +1 -1
  131. package/dist/services/import-transaction.service.d.ts.map +1 -1
  132. package/dist/services/import-transaction.service.js +6 -0
  133. package/dist/services/import-transaction.service.js.map +1 -1
  134. package/dist/services/settings/default-settings-provider.service.d.ts +100 -0
  135. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  136. package/dist/services/settings/default-settings-provider.service.js +56 -0
  137. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  138. package/dist/services/user.service.d.ts +2 -0
  139. package/dist/services/user.service.d.ts.map +1 -1
  140. package/dist/services/user.service.js +46 -0
  141. package/dist/services/user.service.js.map +1 -1
  142. package/dist/solid-core.module.d.ts.map +1 -1
  143. package/dist/solid-core.module.js +4 -29
  144. package/dist/solid-core.module.js.map +1 -1
  145. package/dist/subscribers/scheduled-job.subscriber.js +1 -1
  146. package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
  147. package/dist/subscribers/security-rule.subscriber.js +1 -1
  148. package/dist/subscribers/security-rule.subscriber.js.map +1 -1
  149. package/package.json +4 -4
  150. package/src/constants/error-messages.ts +2 -1
  151. package/src/controllers/microsoft-active-directory-authentication.controller.ts +104 -0
  152. package/src/controllers/service.controller.ts +4 -7
  153. package/src/controllers/test.controller.ts +0 -9
  154. package/src/dtos/create-permission-metadata.dto.ts +3 -0
  155. package/src/dtos/create-role-metadata.dto.ts +11 -1
  156. package/src/dtos/import-instructions.dto.ts +11 -1
  157. package/src/dtos/update-permission-metadata.dto.ts +4 -1
  158. package/src/dtos/update-role-metadata.dto.ts +21 -1
  159. package/src/entities/action-metadata.entity.ts +1 -0
  160. package/src/entities/agent-event.entity.ts +1 -0
  161. package/src/entities/agent-session.entity.ts +1 -0
  162. package/src/entities/chatter-message.entity.ts +2 -0
  163. package/src/entities/email-template.entity.ts +1 -0
  164. package/src/entities/field-metadata.entity.ts +4 -1
  165. package/src/entities/list-of-values.entity.ts +5 -1
  166. package/src/entities/locale.entity.ts +1 -0
  167. package/src/entities/media.entity.ts +1 -0
  168. package/src/entities/menu-item-metadata.entity.ts +2 -0
  169. package/src/entities/model-metadata.entity.ts +3 -0
  170. package/src/entities/module-metadata.entity.ts +2 -0
  171. package/src/entities/permission-metadata.entity.ts +2 -2
  172. package/src/entities/role-metadata.entity.ts +11 -3
  173. package/src/entities/saved-filters.entity.ts +3 -0
  174. package/src/entities/scheduled-job.entity.ts +2 -0
  175. package/src/entities/security-rule.entity.ts +1 -0
  176. package/src/entities/sms-template.entity.ts +2 -0
  177. package/src/entities/user-activity-history.entity.ts +1 -0
  178. package/src/entities/user.entity.ts +15 -1
  179. package/src/entities/view-metadata.entity.ts +2 -0
  180. package/src/helpers/microsoft-active-directory-oauth.helper.ts +83 -0
  181. package/src/helpers/module.helper.ts +5 -5
  182. package/src/helpers/user-helper.ts +5 -1
  183. package/src/index.ts +1 -5
  184. package/src/interfaces.ts +0 -8
  185. package/src/passport-strategies/microsoft-active-directory-oauth.strategy.ts +63 -0
  186. package/src/seeders/seed-data/solid-core-metadata.json +317 -814
  187. package/src/services/1.js +6 -0
  188. package/src/services/authentication.service.ts +78 -0
  189. package/src/services/crud-helper.service.ts +9 -3
  190. package/src/services/import-transaction.service.ts +11 -1
  191. package/src/services/settings/default-settings-provider.service.ts +59 -0
  192. package/src/services/user.service.ts +61 -0
  193. package/src/solid-core.module.ts +4 -31
  194. package/src/subscribers/scheduled-job.subscriber.ts +1 -1
  195. package/src/subscribers/security-rule.subscriber.ts +1 -1
  196. package/dist/commands/ingest.command.d.ts +0 -16
  197. package/dist/commands/ingest.command.d.ts.map +0 -1
  198. package/dist/commands/ingest.command.js +0 -50
  199. package/dist/commands/ingest.command.js.map +0 -1
  200. package/dist/controllers/ai-interaction.controller.d.ts +0 -29
  201. package/dist/controllers/ai-interaction.controller.d.ts.map +0 -1
  202. package/dist/controllers/ai-interaction.controller.js +0 -218
  203. package/dist/controllers/ai-interaction.controller.js.map +0 -1
  204. package/dist/dtos/create-ai-interaction.dto.d.ts +0 -23
  205. package/dist/dtos/create-ai-interaction.dto.d.ts.map +0 -1
  206. package/dist/dtos/create-ai-interaction.dto.js +0 -149
  207. package/dist/dtos/create-ai-interaction.dto.js.map +0 -1
  208. package/dist/dtos/invoke-ai-prompt.dto.d.ts +0 -5
  209. package/dist/dtos/invoke-ai-prompt.dto.d.ts.map +0 -1
  210. package/dist/dtos/invoke-ai-prompt.dto.js +0 -30
  211. package/dist/dtos/invoke-ai-prompt.dto.js.map +0 -1
  212. package/dist/dtos/update-ai-interaction.dto.d.ts +0 -24
  213. package/dist/dtos/update-ai-interaction.dto.d.ts.map +0 -1
  214. package/dist/dtos/update-ai-interaction.dto.js +0 -150
  215. package/dist/dtos/update-ai-interaction.dto.js.map +0 -1
  216. package/dist/entities/ai-interaction.entity.d.ts +0 -24
  217. package/dist/entities/ai-interaction.entity.d.ts.map +0 -1
  218. package/dist/entities/ai-interaction.entity.js +0 -116
  219. package/dist/entities/ai-interaction.entity.js.map +0 -1
  220. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts +0 -11
  221. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts.map +0 -1
  222. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js +0 -39
  223. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js.map +0 -1
  224. package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts +0 -8
  225. package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts.map +0 -1
  226. package/dist/jobs/database/trigger-mcp-client-queue-options.js +0 -10
  227. package/dist/jobs/database/trigger-mcp-client-queue-options.js.map +0 -1
  228. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +0 -25
  229. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +0 -1
  230. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +0 -222
  231. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +0 -1
  232. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts +0 -11
  233. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts.map +0 -1
  234. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js +0 -39
  235. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js.map +0 -1
  236. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts +0 -8
  237. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts.map +0 -1
  238. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js +0 -10
  239. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js.map +0 -1
  240. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts +0 -18
  241. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts.map +0 -1
  242. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js +0 -103
  243. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js.map +0 -1
  244. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts +0 -11
  245. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts.map +0 -1
  246. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js +0 -39
  247. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js.map +0 -1
  248. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts +0 -8
  249. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts.map +0 -1
  250. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js +0 -10
  251. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js.map +0 -1
  252. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts +0 -18
  253. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts.map +0 -1
  254. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js +0 -103
  255. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js.map +0 -1
  256. package/dist/repository/ai-interaction.repository.d.ts +0 -12
  257. package/dist/repository/ai-interaction.repository.d.ts.map +0 -1
  258. package/dist/repository/ai-interaction.repository.js +0 -34
  259. package/dist/repository/ai-interaction.repository.js.map +0 -1
  260. package/dist/services/ai-interaction.service.d.ts +0 -23
  261. package/dist/services/ai-interaction.service.d.ts.map +0 -1
  262. package/dist/services/ai-interaction.service.js +0 -217
  263. package/dist/services/ai-interaction.service.js.map +0 -1
  264. package/dist/services/genai/ingest-metadata.service.d.ts +0 -38
  265. package/dist/services/genai/ingest-metadata.service.d.ts.map +0 -1
  266. package/dist/services/genai/ingest-metadata.service.js +0 -542
  267. package/dist/services/genai/ingest-metadata.service.js.map +0 -1
  268. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts +0 -9
  269. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts.map +0 -1
  270. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js +0 -39
  271. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js.map +0 -1
  272. package/dist/services/genai/r2r-helper.service.d.ts +0 -9
  273. package/dist/services/genai/r2r-helper.service.d.ts.map +0 -1
  274. package/dist/services/genai/r2r-helper.service.js +0 -40
  275. package/dist/services/genai/r2r-helper.service.js.map +0 -1
  276. package/dist-tests/api/authenticate.spec.js +0 -119
  277. package/dist-tests/api/authenticate.spec.js.map +0 -1
  278. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
  279. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
  280. package/dist-tests/api/ping.spec.js +0 -21
  281. package/dist-tests/api/ping.spec.js.map +0 -1
  282. package/dist-tests/helpers/auth.js +0 -41
  283. package/dist-tests/helpers/auth.js.map +0 -1
  284. package/dist-tests/helpers/env.js +0 -11
  285. package/dist-tests/helpers/env.js.map +0 -1
  286. package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +0 -438
  287. package/docs/dashboards/dashboard-curl-smoke-tests.txt +0 -146
  288. package/docs/dashboards/delete-legacy-dashboard-metadata.sql +0 -172
  289. package/docs/grouping-enhancements.md +0 -89
  290. package/docs/java-spring/README.md +0 -3
  291. package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
  292. package/docs/module-package-import-handoff.md +0 -691
  293. package/docs/seed-changes.md +0 -65
  294. package/docs/test-data-workflow.md +0 -200
  295. package/docs/type-declaration-import-issue.md +0 -24
  296. package/src/commands/ingest.command.ts +0 -36
  297. package/src/controllers/ai-interaction.controller.ts +0 -112
  298. package/src/dtos/create-ai-interaction.dto.ts +0 -89
  299. package/src/dtos/invoke-ai-prompt.dto.ts +0 -10
  300. package/src/dtos/update-ai-interaction.dto.ts +0 -93
  301. package/src/entities/ai-interaction.entity.ts +0 -71
  302. package/src/jobs/database/trigger-mcp-client-publisher-database.service.ts +0 -22
  303. package/src/jobs/database/trigger-mcp-client-queue-options.ts +0 -9
  304. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +0 -278
  305. package/src/jobs/rabbitmq/trigger-mcp-client-publisher.service.ts +0 -22
  306. package/src/jobs/rabbitmq/trigger-mcp-client-queue-options.ts +0 -9
  307. package/src/jobs/rabbitmq/trigger-mcp-client-subscriber.service.ts +0 -104
  308. package/src/jobs/redis/trigger-mcp-client-publisher-redis.service.ts +0 -23
  309. package/src/jobs/redis/trigger-mcp-client-queue-options-redis.ts +0 -9
  310. package/src/jobs/redis/trigger-mcp-client-subscriber-redis.service.ts +0 -98
  311. package/src/repository/ai-interaction.repository.ts +0 -17
  312. package/src/services/ai-interaction.service.ts +0 -239
  313. package/src/services/genai/ingest-metadata.service.ts +0 -798
  314. package/src/services/genai/mcp-handlers/mcp-handler-factory.service.ts +0 -33
  315. package/src/services/genai/r2r-helper.service.ts +0 -37
@@ -1,239 +0,0 @@
1
- import { BadRequestException, Injectable, Logger } from '@nestjs/common';
2
- import { ModuleRef } from "@nestjs/core";
3
- import { InjectEntityManager } from '@nestjs/typeorm';
4
- import { EntityManager } from 'typeorm';
5
- import type { SolidCoreSetting } from "src/services/settings/default-settings-provider.service";
6
-
7
- import { spawn } from 'child_process';
8
- import * as fs from 'fs/promises';
9
- import { ERROR_MESSAGES } from 'src/constants/error-messages';
10
- import { InvokeAiPromptDto } from 'src/dtos/invoke-ai-prompt.dto';
11
- import { McpResponse, TriggerMcpClientOptions } from 'src/interfaces';
12
- import { AiInteractionRepository } from 'src/repository/ai-interaction.repository';
13
- import { CRUDService } from 'src/services/crud.service';
14
- import { AiInteraction } from '../entities/ai-interaction.entity';
15
- import { McpHandlerFactory } from './genai/mcp-handlers/mcp-handler-factory.service';
16
- import { PublisherFactory } from './queues/publisher-factory.service';
17
-
18
- @Injectable()
19
- export class AiInteractionService extends CRUDService<AiInteraction> {
20
- private readonly logger = new Logger(AiInteractionService.name);
21
-
22
- constructor(
23
- @InjectEntityManager()
24
- readonly entityManager: EntityManager,
25
- // @InjectRepository(AiInteraction, 'default')
26
- // readonly repo: Repository<AiInteraction>,
27
- readonly repo: AiInteractionRepository,
28
- readonly moduleRef: ModuleRef,
29
- readonly publisherFactory: PublisherFactory<TriggerMcpClientOptions>,
30
- // readonly requestContextService: RequestContextService,
31
- readonly mcpHandlerFactory: McpHandlerFactory,
32
-
33
- ) {
34
- super(entityManager, repo, 'aiInteraction', 'solid-core', moduleRef);
35
- }
36
-
37
- async triggerMcpClientJob(dto: InvokeAiPromptDto, userId: number, isAutoApply: boolean = false, threadId: string = null): Promise<any> {
38
- // const activeUser: ActiveUserData = this.requestContextService.getActiveUser();
39
-
40
- const aiInteraction = await this.create({
41
- userId: userId,
42
- threadId: threadId ? threadId : `thread-${userId}`,
43
- role: 'human',
44
- message: dto.prompt,
45
- contentType: '',
46
- errorMessage: '',
47
- modelUsed: '',
48
- responseTimeMs: 0,
49
- metadata: '',
50
- isAutoApply: isAutoApply
51
- });
52
- const m = {
53
- payload: {
54
- aiInteractionId: aiInteraction.id,
55
- moduleName: dto.moduleName
56
- },
57
- parentEntity: 'aiInteraction',
58
- parentEntityId: aiInteraction.id,
59
- };
60
-
61
- const queueMessageId = await this.publisherFactory.publish(m, 'TriggerMcpClientPublisher');
62
-
63
- return {
64
- queueMessageId: queueMessageId,
65
- aiInteractionId: aiInteraction.id
66
- }
67
- }
68
-
69
- /**
70
- * Runs the Python MCP client with a prompt and returns the parsed JSON embedded in the 'response'.
71
- * @param prompt - The question or instruction to send to the MCP client.
72
- * @returns The parsed object inside the 'response' field of the JSON output.
73
- */
74
- async runMcpPrompt(prompt: string): Promise<McpResponse> {
75
- const pythonExecutable = this.settingService.getConfigValue<SolidCoreSetting>('mcpPythonExecutable');
76
- const mcpClient = this.settingService.getConfigValue<SolidCoreSetting>('mcpClient');
77
-
78
- // TODO: We can return an error if the above env variables are not properly setup...
79
- if (!pythonExecutable || !mcpClient) {
80
- throw new BadRequestException(ERROR_MESSAGES.PYTHON_EXECUTABLE_NOT_CONFIGURED);
81
- }
82
-
83
- // Check if both paths are valid and accessible
84
- try {
85
- const [pyStat, clientStat] = await Promise.all([
86
- fs.stat(pythonExecutable),
87
- fs.stat(mcpClient),
88
- ]);
89
-
90
- if (!pyStat.isFile()) {
91
- throw new BadRequestException(`MCP_PYTHON_EXECUTABLE path is not a file: ${pythonExecutable}`);
92
- }
93
-
94
- if (!clientStat.isFile()) {
95
- throw new BadRequestException(`MCP_CLIENT path is not a file: ${mcpClient}`);
96
- }
97
-
98
- } catch (err: any) {
99
- throw new BadRequestException(`Invalid MCP executable or client path: ${err.message}`);
100
- }
101
-
102
- // TODO: Refactor to use the command.service.ts instead...
103
- return new Promise((resolve, reject) => {
104
- this.logger.log(`Attempting to run command:`)
105
- this.logger.log(`${pythonExecutable} ${mcpClient} "${prompt}"`);
106
-
107
- const python = spawn(pythonExecutable, [mcpClient, `"${prompt}"`]);
108
-
109
- let stdout = '';
110
- let stderr = '';
111
-
112
- python.stdout.on('data', (data) => {
113
- stdout += data.toString();
114
- });
115
-
116
- python.stderr.on('data', (data) => {
117
- stderr += data.toString();
118
- });
119
-
120
- python.on('close', (code) => {
121
- this.logger.log(`Python script exited with code ${code}`);
122
-
123
- if (code !== 0) {
124
- this.logger.error(`Python script exited with a non-zero exit code: ${stderr}`);
125
- return reject(new Error(`Python script exited with a non-zero exit code: ${stderr}`));
126
- }
127
-
128
- try {
129
- this.logger.log(`Python script exited with zero exit code: ${stdout}`);
130
- const raw: McpResponse = JSON.parse(stdout);
131
-
132
- // Sometimes the raw.response might not be a valid json
133
- // TODO: examine the content type of the raw response..
134
- // if (raw.content_type==='json') {
135
- // }
136
- let parsedResponse = raw.response;
137
- try {
138
- parsedResponse = JSON.parse(raw.response);
139
- }
140
- catch (ex) {
141
- this.logger.warn(`Attempting to parse mcp client response assuming it is JSON, however it is not: ${parsedResponse}`);
142
- // raw.success = false
143
- }
144
- // Parse the response string into an object
145
- // const parsedResponse = JSON.parse(raw.response);
146
-
147
- // Replace the string with the parsed object
148
- const enrichedRaw = {
149
- ...raw,
150
- response: parsedResponse,
151
- };
152
- // if (!raw.success) {
153
- // return reject(new Error(`MCP error: ${raw.errors?.join(', ')}`));
154
- // }
155
- // let cleaned = raw.response.trim();
156
-
157
- // Don't need to re-parse this...
158
- // const parsed = JSON.parse(cleaned);
159
- // resolve(cleaned);
160
-
161
- resolve(enrichedRaw);
162
- } catch (err: any) {
163
- reject(new Error(`Mcp Invocation Failed: ${err.message}`));
164
- }
165
- });
166
- });
167
- }
168
-
169
- cleanResponse(response: string) {
170
- this.logger.log(`mcp server response is: ${response}`);
171
-
172
- // Remove markdown-style code block wrapper
173
- if (response.startsWith('```json')) {
174
- response = response.replace(/^```json/, '').trim();
175
- }
176
- if (response.endsWith('```')) {
177
- response = response.replace(/```$/, '').trim();
178
- }
179
- this.logger.log(`mcp server response after removing doc tags is: ${response}`);
180
-
181
- return response;
182
- }
183
-
184
- async applySolidAiInteraction(id: number) {
185
- // Fetch the aiInteraction
186
- const aiInteraction = await this.findOne(id, {
187
- populate: ['user']
188
- });
189
- if (!aiInteraction) {
190
- const m = `Unable to identified the aiInteraction entry that triggered this job... using id: ${id}`
191
-
192
- // TODO: RESPONSE SHAPE ALERT Check if we want to control the shape of the response....
193
- throw new Error(m);
194
- }
195
-
196
- // TODO: Validation: Check if JSON.parse(metadata).tools_invoked starts with solid_
197
- let metadata: any = {};
198
- try {
199
- if (typeof aiInteraction.metadata === "string") {
200
- metadata = JSON.parse(aiInteraction.metadata);
201
- } else if (typeof aiInteraction.metadata === "object" && aiInteraction.metadata !== null) {
202
- metadata = aiInteraction.metadata;
203
- } else {
204
- // optional fallback
205
- metadata = {};
206
- }
207
- } catch (e) {
208
- // TODO: RESPONSE SHAPE ALERT Check if we want to control the shape of the response....
209
- throw new Error(`Invalid metadata JSON: ${e}`);
210
- }
211
-
212
- const toolsInvoked = metadata['tools_invoked'];
213
- if (!toolsInvoked) {
214
- // TODO: RESPONSE SHAPE ALERT Check if we want to control the shape of the response....
215
- throw new Error(ERROR_MESSAGES.UNABLE_TO_RESOLVE_SOLID_COMMAND);
216
- }
217
-
218
- // TODO: OPTIMISATION for chained tool invocation, for now we are assuming only 1 tool was used.
219
- const toolInvoked = toolsInvoked[0];
220
-
221
- // TODO: use the toolInvoked to identify a service using some convention.
222
- // TODO: Eg. if toolInvoked is solid_create_module <> SolidCreateModuleMcpToolHandler ... create a factory class to do this mapping and identify the relevant provider.
223
- const mcpToolHandler = this.mcpHandlerFactory.getInstance(toolInvoked);
224
- if (!mcpToolHandler) {
225
- // TODO: RESPONSE SHAPE ALERT Check if we want to control the shape of the response....
226
- throw new Error(ERROR_MESSAGES.UNABLE_TO_RESOLVE_MCP_HANDLER);
227
- }
228
-
229
- const handlerApplicationResponse = await mcpToolHandler.apply(aiInteraction);
230
-
231
- // TODO: This provider to implement an interface - IMcpToolResponseHandler ... apply(aiInteraction: AiInteraction)
232
- // throw new Error('Method not implemented.');
233
-
234
- // Mark the interaction as applied
235
- await this.update(aiInteraction.id, { isApplied: true }, [], true);
236
-
237
- return handlerApplicationResponse;
238
- }
239
- }