@hed-hog/core 0.0.387 → 0.0.390

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 (535) hide show
  1. package/README.md +12 -11
  2. package/dist/access-log/access-log.interceptor.d.ts.map +1 -1
  3. package/dist/access-log/access-log.interceptor.js +4 -2
  4. package/dist/access-log/access-log.interceptor.js.map +1 -1
  5. package/dist/ai/ai-attachment.fragments.d.ts +23 -0
  6. package/dist/ai/ai-attachment.fragments.d.ts.map +1 -0
  7. package/dist/ai/ai-attachment.fragments.js +34 -0
  8. package/dist/ai/ai-attachment.fragments.js.map +1 -0
  9. package/dist/ai/ai.controller.d.ts +7 -16
  10. package/dist/ai/ai.controller.d.ts.map +1 -1
  11. package/dist/ai/ai.prompts.d.ts +16 -0
  12. package/dist/ai/ai.prompts.d.ts.map +1 -0
  13. package/dist/ai/ai.prompts.js +37 -0
  14. package/dist/ai/ai.prompts.js.map +1 -0
  15. package/dist/ai/ai.service.d.ts +63 -12
  16. package/dist/ai/ai.service.d.ts.map +1 -1
  17. package/dist/ai/ai.service.js +215 -88
  18. package/dist/ai/ai.service.js.map +1 -1
  19. package/dist/ai/dto/chat.dto.d.ts +4 -1
  20. package/dist/ai/dto/chat.dto.d.ts.map +1 -1
  21. package/dist/ai/dto/chat.dto.js +23 -1
  22. package/dist/ai/dto/chat.dto.js.map +1 -1
  23. package/dist/ai/dto/create-agent.dto.d.ts +1 -1
  24. package/dist/ai/dto/create-agent.dto.d.ts.map +1 -1
  25. package/dist/ai/dto/create-agent.dto.js +1 -1
  26. package/dist/ai/dto/create-agent.dto.js.map +1 -1
  27. package/dist/ai/dto/update-agent.dto.d.ts +1 -1
  28. package/dist/ai/dto/update-agent.dto.d.ts.map +1 -1
  29. package/dist/ai/dto/update-agent.dto.js +1 -1
  30. package/dist/ai/dto/update-agent.dto.js.map +1 -1
  31. package/dist/ai-instruction/ai-instruction.controller.d.ts +61 -7
  32. package/dist/ai-instruction/ai-instruction.controller.d.ts.map +1 -1
  33. package/dist/ai-instruction/ai-instruction.controller.js +63 -20
  34. package/dist/ai-instruction/ai-instruction.controller.js.map +1 -1
  35. package/dist/ai-instruction/ai-instruction.module.d.ts.map +1 -1
  36. package/dist/ai-instruction/ai-instruction.module.js +13 -2
  37. package/dist/ai-instruction/ai-instruction.module.js.map +1 -1
  38. package/dist/ai-instruction/ai-instruction.service.d.ts +131 -6
  39. package/dist/ai-instruction/ai-instruction.service.d.ts.map +1 -1
  40. package/dist/ai-instruction/ai-instruction.service.js +533 -60
  41. package/dist/ai-instruction/ai-instruction.service.js.map +1 -1
  42. package/dist/ai-instruction/ai-prompt-builder.service.d.ts +8 -0
  43. package/dist/ai-instruction/ai-prompt-builder.service.d.ts.map +1 -1
  44. package/dist/ai-instruction/ai-prompt-builder.service.js +10 -1
  45. package/dist/ai-instruction/ai-prompt-builder.service.js.map +1 -1
  46. package/dist/ai-instruction/ai-prompt-registry.d.ts +45 -0
  47. package/dist/ai-instruction/ai-prompt-registry.d.ts.map +1 -0
  48. package/dist/ai-instruction/ai-prompt-registry.js +49 -0
  49. package/dist/ai-instruction/ai-prompt-registry.js.map +1 -0
  50. package/dist/ai-instruction/ai-prompt-resolver.service.d.ts +89 -0
  51. package/dist/ai-instruction/ai-prompt-resolver.service.d.ts.map +1 -0
  52. package/dist/ai-instruction/ai-prompt-resolver.service.js +222 -0
  53. package/dist/ai-instruction/ai-prompt-resolver.service.js.map +1 -0
  54. package/dist/ai-instruction/ai-prompt-template.util.d.ts +70 -0
  55. package/dist/ai-instruction/ai-prompt-template.util.d.ts.map +1 -0
  56. package/dist/ai-instruction/ai-prompt-template.util.js +154 -0
  57. package/dist/ai-instruction/ai-prompt-template.util.js.map +1 -0
  58. package/dist/ai-instruction/dto/create-ai-instruction.dto.d.ts +5 -0
  59. package/dist/ai-instruction/dto/create-ai-instruction.dto.d.ts.map +1 -1
  60. package/dist/ai-instruction/dto/create-ai-instruction.dto.js +27 -1
  61. package/dist/ai-instruction/dto/create-ai-instruction.dto.js.map +1 -1
  62. package/dist/ai-instruction/dto/preview-ai-instruction.dto.d.ts +14 -0
  63. package/dist/ai-instruction/dto/preview-ai-instruction.dto.d.ts.map +1 -0
  64. package/dist/ai-instruction/dto/preview-ai-instruction.dto.js +42 -0
  65. package/dist/ai-instruction/dto/preview-ai-instruction.dto.js.map +1 -0
  66. package/dist/ai-instruction/dto/update-ai-instruction.dto.d.ts +11 -0
  67. package/dist/ai-instruction/dto/update-ai-instruction.dto.d.ts.map +1 -1
  68. package/dist/ai-instruction/dto/update-ai-instruction.dto.js +34 -0
  69. package/dist/ai-instruction/dto/update-ai-instruction.dto.js.map +1 -1
  70. package/dist/ai-instruction/types/ai-instruction.types.d.ts +13 -1
  71. package/dist/ai-instruction/types/ai-instruction.types.d.ts.map +1 -1
  72. package/dist/ai-instruction/types/ai-instruction.types.js +10 -0
  73. package/dist/ai-instruction/types/ai-instruction.types.js.map +1 -1
  74. package/dist/auth/auth.controller.d.ts +24 -9
  75. package/dist/auth/auth.controller.d.ts.map +1 -1
  76. package/dist/auth/auth.controller.js +49 -21
  77. package/dist/auth/auth.controller.js.map +1 -1
  78. package/dist/auth/auth.service.d.ts +33 -8
  79. package/dist/auth/auth.service.d.ts.map +1 -1
  80. package/dist/auth/auth.service.js +78 -29
  81. package/dist/auth/auth.service.js.map +1 -1
  82. package/dist/captcha/captcha.module.d.ts +3 -0
  83. package/dist/captcha/captcha.module.d.ts.map +1 -0
  84. package/dist/captcha/captcha.module.js +23 -0
  85. package/dist/captcha/captcha.module.js.map +1 -0
  86. package/dist/captcha/captcha.service.d.ts +38 -0
  87. package/dist/captcha/captcha.service.d.ts.map +1 -0
  88. package/dist/captcha/captcha.service.js +144 -0
  89. package/dist/captcha/captcha.service.js.map +1 -0
  90. package/dist/challenge/challenge.service.d.ts +16 -7
  91. package/dist/challenge/challenge.service.d.ts.map +1 -1
  92. package/dist/challenge/challenge.service.js +64 -16
  93. package/dist/challenge/challenge.service.js.map +1 -1
  94. package/dist/core.module.d.ts +3 -1
  95. package/dist/core.module.d.ts.map +1 -1
  96. package/dist/core.module.js +29 -2
  97. package/dist/core.module.js.map +1 -1
  98. package/dist/dashboard/dashboard/dashboard.controller.d.ts +15 -15
  99. package/dist/dashboard/dashboard/dashboard.service.d.ts +15 -15
  100. package/dist/dashboard/dashboard-component/dashboard-component.controller.d.ts +6 -6
  101. package/dist/dashboard/dashboard-component/dashboard-component.service.d.ts +6 -6
  102. package/dist/dashboard/dashboard-component-role/dashboard-component-role.controller.d.ts +20 -20
  103. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts +20 -20
  104. package/dist/dashboard/dashboard-core/dashboard-core.controller.d.ts +1 -1
  105. package/dist/dashboard/dashboard-core/dashboard-core.service.d.ts +1 -1
  106. package/dist/dashboard/dashboard-role/dashboard-role.controller.d.ts +13 -13
  107. package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts +13 -13
  108. package/dist/file/file.service.d.ts +6 -0
  109. package/dist/file/file.service.d.ts.map +1 -1
  110. package/dist/file/file.service.js +44 -4
  111. package/dist/file/file.service.js.map +1 -1
  112. package/dist/incident/incident-notifier.service.d.ts +36 -0
  113. package/dist/incident/incident-notifier.service.d.ts.map +1 -0
  114. package/dist/incident/incident-notifier.service.js +208 -0
  115. package/dist/incident/incident-notifier.service.js.map +1 -0
  116. package/dist/incident/incident.controller.d.ts +23 -0
  117. package/dist/incident/incident.controller.d.ts.map +1 -0
  118. package/dist/incident/incident.controller.js +75 -0
  119. package/dist/incident/incident.controller.js.map +1 -0
  120. package/dist/incident/incident.module.d.ts +7 -0
  121. package/dist/incident/incident.module.d.ts.map +1 -0
  122. package/dist/incident/incident.module.js +32 -0
  123. package/dist/incident/incident.module.js.map +1 -0
  124. package/dist/incident/incident.service.d.ts +72 -0
  125. package/dist/incident/incident.service.d.ts.map +1 -0
  126. package/dist/incident/incident.service.js +184 -0
  127. package/dist/incident/incident.service.js.map +1 -0
  128. package/dist/index.d.ts +26 -0
  129. package/dist/index.d.ts.map +1 -1
  130. package/dist/index.js +30 -0
  131. package/dist/index.js.map +1 -1
  132. package/dist/integration-profile/dto/test.dto.d.ts +13 -0
  133. package/dist/integration-profile/dto/test.dto.d.ts.map +1 -0
  134. package/dist/integration-profile/dto/test.dto.js +26 -0
  135. package/dist/integration-profile/dto/test.dto.js.map +1 -0
  136. package/dist/integration-profile/integration-profile.controller.d.ts +12 -1
  137. package/dist/integration-profile/integration-profile.controller.d.ts.map +1 -1
  138. package/dist/integration-profile/integration-profile.controller.js +9 -1
  139. package/dist/integration-profile/integration-profile.controller.js.map +1 -1
  140. package/dist/integration-profile/integration-profile.module.d.ts +6 -1
  141. package/dist/integration-profile/integration-profile.module.d.ts.map +1 -1
  142. package/dist/integration-profile/integration-profile.module.js +26 -3
  143. package/dist/integration-profile/integration-profile.module.js.map +1 -1
  144. package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
  145. package/dist/integration-profile/integration-profile.secrets.js +9 -1
  146. package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
  147. package/dist/integration-profile/integration-profile.service.d.ts +26 -7
  148. package/dist/integration-profile/integration-profile.service.d.ts.map +1 -1
  149. package/dist/integration-profile/integration-profile.service.js +94 -91
  150. package/dist/integration-profile/integration-profile.service.js.map +1 -1
  151. package/dist/integration-profile/integration-profile.utils.d.ts +13 -1
  152. package/dist/integration-profile/integration-profile.utils.d.ts.map +1 -1
  153. package/dist/integration-profile/integration-profile.utils.js +20 -5
  154. package/dist/integration-profile/integration-profile.utils.js.map +1 -1
  155. package/dist/integration-profile/testers/ai.testers.d.ts +3 -0
  156. package/dist/integration-profile/testers/ai.testers.d.ts.map +1 -0
  157. package/dist/integration-profile/testers/ai.testers.js +125 -0
  158. package/dist/integration-profile/testers/ai.testers.js.map +1 -0
  159. package/dist/integration-profile/testers/captcha.testers.d.ts +3 -0
  160. package/dist/integration-profile/testers/captcha.testers.d.ts.map +1 -0
  161. package/dist/integration-profile/testers/captcha.testers.js +121 -0
  162. package/dist/integration-profile/testers/captcha.testers.js.map +1 -0
  163. package/dist/integration-profile/testers/email.testers.d.ts +3 -0
  164. package/dist/integration-profile/testers/email.testers.d.ts.map +1 -0
  165. package/dist/integration-profile/testers/email.testers.js +128 -0
  166. package/dist/integration-profile/testers/email.testers.js.map +1 -0
  167. package/dist/integration-profile/testers/http-probe.d.ts +57 -0
  168. package/dist/integration-profile/testers/http-probe.d.ts.map +1 -0
  169. package/dist/integration-profile/testers/http-probe.js +140 -0
  170. package/dist/integration-profile/testers/http-probe.js.map +1 -0
  171. package/dist/integration-profile/testers/index.d.ts +12 -0
  172. package/dist/integration-profile/testers/index.d.ts.map +1 -0
  173. package/dist/integration-profile/testers/index.js +45 -0
  174. package/dist/integration-profile/testers/index.js.map +1 -0
  175. package/dist/integration-profile/testers/infrastructure.testers.d.ts +3 -0
  176. package/dist/integration-profile/testers/infrastructure.testers.d.ts.map +1 -0
  177. package/dist/integration-profile/testers/infrastructure.testers.js +105 -0
  178. package/dist/integration-profile/testers/infrastructure.testers.js.map +1 -0
  179. package/dist/integration-profile/testers/integration-tester.registry.d.ts +17 -0
  180. package/dist/integration-profile/testers/integration-tester.registry.d.ts.map +1 -0
  181. package/dist/integration-profile/testers/integration-tester.registry.js +52 -0
  182. package/dist/integration-profile/testers/integration-tester.registry.js.map +1 -0
  183. package/dist/integration-profile/testers/integration-tester.types.d.ts +55 -0
  184. package/dist/integration-profile/testers/integration-tester.types.d.ts.map +1 -0
  185. package/dist/integration-profile/testers/integration-tester.types.js +16 -0
  186. package/dist/integration-profile/testers/integration-tester.types.js.map +1 -0
  187. package/dist/integration-profile/testers/messaging.testers.d.ts +3 -0
  188. package/dist/integration-profile/testers/messaging.testers.d.ts.map +1 -0
  189. package/dist/integration-profile/testers/messaging.testers.js +70 -0
  190. package/dist/integration-profile/testers/messaging.testers.js.map +1 -0
  191. package/dist/integration-profile/testers/oauth.testers.d.ts +3 -0
  192. package/dist/integration-profile/testers/oauth.testers.d.ts.map +1 -0
  193. package/dist/integration-profile/testers/oauth.testers.js +285 -0
  194. package/dist/integration-profile/testers/oauth.testers.js.map +1 -0
  195. package/dist/integration-profile/testers/payment.testers.d.ts +3 -0
  196. package/dist/integration-profile/testers/payment.testers.d.ts.map +1 -0
  197. package/dist/integration-profile/testers/payment.testers.js +169 -0
  198. package/dist/integration-profile/testers/payment.testers.js.map +1 -0
  199. package/dist/integration-profile/testers/storage.testers.d.ts +3 -0
  200. package/dist/integration-profile/testers/storage.testers.d.ts.map +1 -0
  201. package/dist/integration-profile/testers/storage.testers.js +208 -0
  202. package/dist/integration-profile/testers/storage.testers.js.map +1 -0
  203. package/dist/language/en.json +4 -2
  204. package/dist/language/pt.json +4 -2
  205. package/dist/leaked-password/leaked-password.controller.d.ts +24 -0
  206. package/dist/leaked-password/leaked-password.controller.d.ts.map +1 -0
  207. package/dist/leaked-password/leaked-password.controller.js +78 -0
  208. package/dist/leaked-password/leaked-password.controller.js.map +1 -0
  209. package/dist/leaked-password/leaked-password.module.d.ts +8 -0
  210. package/dist/leaked-password/leaked-password.module.d.ts.map +1 -0
  211. package/dist/leaked-password/leaked-password.module.js +31 -0
  212. package/dist/leaked-password/leaked-password.module.js.map +1 -0
  213. package/dist/leaked-password/leaked-password.service.d.ts +64 -0
  214. package/dist/leaked-password/leaked-password.service.d.ts.map +1 -0
  215. package/dist/leaked-password/leaked-password.service.js +218 -0
  216. package/dist/leaked-password/leaked-password.service.js.map +1 -0
  217. package/dist/locale/locale.controller.d.ts +1 -1
  218. package/dist/locale/locale.service.d.ts +1 -1
  219. package/dist/mail/dto/preview.dto.d.ts +18 -0
  220. package/dist/mail/dto/preview.dto.d.ts.map +1 -0
  221. package/dist/mail/dto/preview.dto.js +66 -0
  222. package/dist/mail/dto/preview.dto.js.map +1 -0
  223. package/dist/mail/dto/send.dto.d.ts +7 -0
  224. package/dist/mail/dto/send.dto.d.ts.map +1 -1
  225. package/dist/mail/dto/send.dto.js +10 -0
  226. package/dist/mail/dto/send.dto.js.map +1 -1
  227. package/dist/mail/mail.controller.d.ts +4 -0
  228. package/dist/mail/mail.controller.d.ts.map +1 -1
  229. package/dist/mail/mail.controller.js +16 -2
  230. package/dist/mail/mail.controller.js.map +1 -1
  231. package/dist/mail/mail.service.d.ts +23 -2
  232. package/dist/mail/mail.service.d.ts.map +1 -1
  233. package/dist/mail/mail.service.js +102 -13
  234. package/dist/mail/mail.service.js.map +1 -1
  235. package/dist/mail-layout/dto/update.dto.d.ts +17 -0
  236. package/dist/mail-layout/dto/update.dto.d.ts.map +1 -0
  237. package/dist/mail-layout/dto/update.dto.js +27 -0
  238. package/dist/mail-layout/dto/update.dto.js.map +1 -0
  239. package/dist/mail-layout/mail-layout.controller.d.ts +15 -0
  240. package/dist/mail-layout/mail-layout.controller.d.ts.map +1 -0
  241. package/dist/mail-layout/mail-layout.controller.js +71 -0
  242. package/dist/mail-layout/mail-layout.controller.js.map +1 -0
  243. package/dist/mail-layout/mail-layout.module.d.ts +3 -0
  244. package/dist/mail-layout/mail-layout.module.d.ts.map +1 -0
  245. package/dist/mail-layout/mail-layout.module.js +35 -0
  246. package/dist/mail-layout/mail-layout.module.js.map +1 -0
  247. package/dist/mail-layout/mail-layout.service.d.ts +27 -0
  248. package/dist/mail-layout/mail-layout.service.d.ts.map +1 -0
  249. package/dist/mail-layout/mail-layout.service.js +80 -0
  250. package/dist/mail-layout/mail-layout.service.js.map +1 -0
  251. package/dist/mcp-chat/mcp-chat.controller.d.ts +2 -2
  252. package/dist/mcp-chat/mcp-chat.service.d.ts +24 -2
  253. package/dist/mcp-chat/mcp-chat.service.d.ts.map +1 -1
  254. package/dist/mcp-chat/mcp-chat.service.js +80 -24
  255. package/dist/mcp-chat/mcp-chat.service.js.map +1 -1
  256. package/dist/menu/menu.controller.d.ts +3 -3
  257. package/dist/menu/menu.service.d.ts +3 -3
  258. package/dist/notification/notification.controller.d.ts +12 -12
  259. package/dist/notification/notification.service.d.ts +12 -12
  260. package/dist/oauth/oauth-token-broker.service.d.ts +72 -0
  261. package/dist/oauth/oauth-token-broker.service.d.ts.map +1 -0
  262. package/dist/oauth/oauth-token-broker.service.js +258 -0
  263. package/dist/oauth/oauth-token-broker.service.js.map +1 -0
  264. package/dist/oauth/oauth.module.d.ts.map +1 -1
  265. package/dist/oauth/oauth.module.js +3 -1
  266. package/dist/oauth/oauth.module.js.map +1 -1
  267. package/dist/oauth/oauth.service.d.ts +2 -0
  268. package/dist/oauth/oauth.service.d.ts.map +1 -1
  269. package/dist/oauth/oauth.service.js +6 -3
  270. package/dist/oauth/oauth.service.js.map +1 -1
  271. package/dist/pdf/pdf.service.d.ts +8 -0
  272. package/dist/pdf/pdf.service.d.ts.map +1 -1
  273. package/dist/pdf/pdf.service.js +52 -0
  274. package/dist/pdf/pdf.service.js.map +1 -1
  275. package/dist/presence/presence.controller.d.ts +16 -0
  276. package/dist/presence/presence.controller.d.ts.map +1 -0
  277. package/dist/presence/presence.controller.js +60 -0
  278. package/dist/presence/presence.controller.js.map +1 -0
  279. package/dist/presence/presence.listener.d.ts +29 -0
  280. package/dist/presence/presence.listener.d.ts.map +1 -0
  281. package/dist/presence/presence.listener.js +82 -0
  282. package/dist/presence/presence.listener.js.map +1 -0
  283. package/dist/presence/presence.module.d.ts +3 -0
  284. package/dist/presence/presence.module.d.ts.map +1 -0
  285. package/dist/presence/presence.module.js +32 -0
  286. package/dist/presence/presence.module.js.map +1 -0
  287. package/dist/presence/presence.service.d.ts +42 -0
  288. package/dist/presence/presence.service.d.ts.map +1 -0
  289. package/dist/presence/presence.service.js +147 -0
  290. package/dist/presence/presence.service.js.map +1 -0
  291. package/dist/profile/dto/delete-account.dto.d.ts +8 -0
  292. package/dist/profile/dto/delete-account.dto.d.ts.map +1 -0
  293. package/dist/profile/dto/delete-account.dto.js +22 -0
  294. package/dist/profile/dto/delete-account.dto.js.map +1 -0
  295. package/dist/profile/events/profile-account-deleted.event.d.ts +12 -0
  296. package/dist/profile/events/profile-account-deleted.event.d.ts.map +1 -0
  297. package/dist/profile/events/profile-account-deleted.event.js +17 -0
  298. package/dist/profile/events/profile-account-deleted.event.js.map +1 -0
  299. package/dist/profile/profile.controller.d.ts +21 -15
  300. package/dist/profile/profile.controller.d.ts.map +1 -1
  301. package/dist/profile/profile.controller.js +75 -46
  302. package/dist/profile/profile.controller.js.map +1 -1
  303. package/dist/profile/profile.service.d.ts +30 -18
  304. package/dist/profile/profile.service.d.ts.map +1 -1
  305. package/dist/profile/profile.service.js +113 -37
  306. package/dist/profile/profile.service.js.map +1 -1
  307. package/dist/realtime/realtime.gateway.d.ts +48 -0
  308. package/dist/realtime/realtime.gateway.d.ts.map +1 -0
  309. package/dist/realtime/realtime.gateway.js +156 -0
  310. package/dist/realtime/realtime.gateway.js.map +1 -0
  311. package/dist/realtime/realtime.module.d.ts +8 -0
  312. package/dist/realtime/realtime.module.d.ts.map +1 -0
  313. package/dist/realtime/realtime.module.js +29 -0
  314. package/dist/realtime/realtime.module.js.map +1 -0
  315. package/dist/realtime/realtime.service.d.ts +51 -0
  316. package/dist/realtime/realtime.service.d.ts.map +1 -0
  317. package/dist/realtime/realtime.service.js +177 -0
  318. package/dist/realtime/realtime.service.js.map +1 -0
  319. package/dist/redis/redis-pubsub.d.ts +27 -0
  320. package/dist/redis/redis-pubsub.d.ts.map +1 -0
  321. package/dist/redis/redis-pubsub.js +140 -0
  322. package/dist/redis/redis-pubsub.js.map +1 -0
  323. package/dist/role/role.controller.d.ts +3 -3
  324. package/dist/role/role.service.d.ts +3 -3
  325. package/dist/setting/dto/create.dto.d.ts.map +1 -1
  326. package/dist/setting/dto/create.dto.js +9 -2
  327. package/dist/setting/dto/create.dto.js.map +1 -1
  328. package/dist/setting/setting.controller.d.ts +5 -5
  329. package/dist/setting/setting.service.d.ts +8 -5
  330. package/dist/setting/setting.service.d.ts.map +1 -1
  331. package/dist/setting/setting.service.js +25 -1
  332. package/dist/setting/setting.service.js.map +1 -1
  333. package/dist/user/dto/create-with-email-and-password.dto.d.ts +2 -0
  334. package/dist/user/dto/create-with-email-and-password.dto.d.ts.map +1 -1
  335. package/dist/user/dto/create-with-email-and-password.dto.js +5 -0
  336. package/dist/user/dto/create-with-email-and-password.dto.js.map +1 -1
  337. package/dist/user/dto/query-user-mail-list.dto.d.ts +5 -0
  338. package/dist/user/dto/query-user-mail-list.dto.d.ts.map +1 -0
  339. package/dist/user/dto/query-user-mail-list.dto.js +25 -0
  340. package/dist/user/dto/query-user-mail-list.dto.js.map +1 -0
  341. package/dist/user/user-credential.util.d.ts +19 -0
  342. package/dist/user/user-credential.util.d.ts.map +1 -0
  343. package/dist/user/user-credential.util.js +32 -0
  344. package/dist/user/user-credential.util.js.map +1 -0
  345. package/dist/user/user.controller.d.ts +17 -5
  346. package/dist/user/user.controller.d.ts.map +1 -1
  347. package/dist/user/user.controller.js +18 -3
  348. package/dist/user/user.controller.js.map +1 -1
  349. package/dist/user/user.service.d.ts +28 -6
  350. package/dist/user/user.service.d.ts.map +1 -1
  351. package/dist/user/user.service.js +204 -13
  352. package/dist/user/user.service.js.map +1 -1
  353. package/dist/validators/is-strong-password-with-settings.validator.d.ts.map +1 -1
  354. package/dist/validators/is-strong-password-with-settings.validator.js +11 -0
  355. package/dist/validators/is-strong-password-with-settings.validator.js.map +1 -1
  356. package/dist/validators/service-locator.d.ts +9 -0
  357. package/dist/validators/service-locator.d.ts.map +1 -1
  358. package/dist/validators/service-locator.js +12 -0
  359. package/dist/validators/service-locator.js.map +1 -1
  360. package/dist/whatsapp-sender/whatsapp-sender.module.d.ts +3 -0
  361. package/dist/whatsapp-sender/whatsapp-sender.module.d.ts.map +1 -0
  362. package/dist/whatsapp-sender/whatsapp-sender.module.js +23 -0
  363. package/dist/whatsapp-sender/whatsapp-sender.module.js.map +1 -0
  364. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts +50 -0
  365. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -0
  366. package/dist/whatsapp-sender/whatsapp-sender.service.js +224 -0
  367. package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -0
  368. package/hedhog/data/integration_provider.yaml +16 -0
  369. package/hedhog/data/mail.yaml +88 -61
  370. package/hedhog/data/mail_layout.yaml +188 -0
  371. package/hedhog/data/menu.yaml +67 -3
  372. package/hedhog/data/route.yaml +135 -0
  373. package/hedhog/data/setting_group.yaml +139 -1
  374. package/hedhog/frontend/app/account/components/mfa-setup-dialog.tsx.ejs +36 -0
  375. package/hedhog/frontend/app/account/components/two-factor-auth.tsx.ejs +2 -0
  376. package/hedhog/frontend/app/account/hooks/use-mfa-setup.ts.ejs +10 -7
  377. package/hedhog/frontend/app/ai_agent/page.tsx.ejs +7 -4
  378. package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-form.tsx.ejs +580 -0
  379. package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-preview.tsx.ejs +150 -0
  380. package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-versions.tsx.ejs +199 -0
  381. package/hedhog/frontend/app/ai_instruction/_components/prompt-diff.tsx.ejs +63 -0
  382. package/hedhog/frontend/app/ai_instruction/_lib/line-diff.spec.ts.ejs +59 -0
  383. package/hedhog/frontend/app/ai_instruction/_lib/line-diff.ts.ejs +72 -0
  384. package/hedhog/frontend/app/ai_instruction/_lib/prompt-template.spec.ts.ejs +170 -0
  385. package/hedhog/frontend/app/ai_instruction/_lib/prompt-template.ts.ejs +167 -0
  386. package/hedhog/frontend/app/ai_instruction/_lib/types.ts.ejs +99 -0
  387. package/hedhog/frontend/app/ai_instruction/page.tsx.ejs +422 -0
  388. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +51 -4
  389. package/hedhog/frontend/app/incidents/page.tsx.ejs +400 -0
  390. package/hedhog/frontend/app/integration/profiles/page.tsx.ejs +153 -84
  391. package/hedhog/frontend/app/mail/layout/page.tsx.ejs +344 -0
  392. package/hedhog/frontend/app/mail/template/page.tsx.ejs +155 -121
  393. package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +129 -17
  394. package/hedhog/frontend/app/pages/_components/page-delete-dialog.tsx.ejs +343 -0
  395. package/hedhog/frontend/app/pages/_components/page-detail-sheet.tsx.ejs +438 -0
  396. package/hedhog/frontend/app/pages/_components/page-wizard-sheet.tsx.ejs +1009 -0
  397. package/hedhog/frontend/app/pages/_components/system-page-types.ts.ejs +56 -0
  398. package/hedhog/frontend/app/pages/_components/use-system-pages.ts.ejs +171 -0
  399. package/hedhog/frontend/app/pages/page.tsx.ejs +514 -0
  400. package/hedhog/frontend/app/users/page.tsx.ejs +119 -13
  401. package/hedhog/frontend/app/users/user-activity-timeline.tsx.ejs +231 -0
  402. package/hedhog/frontend/app/users/user-mails.tsx.ejs +399 -0
  403. package/hedhog/frontend/app/users/user-sheet.tsx.ejs +60 -75
  404. package/hedhog/frontend/messages/en.json +499 -3
  405. package/hedhog/frontend/messages/pt.json +499 -3
  406. package/hedhog/table/ai_agent.yaml +1 -0
  407. package/hedhog/table/ai_instruction.yaml +15 -0
  408. package/hedhog/table/leaked_password.yaml +18 -0
  409. package/hedhog/table/mail_layout.yaml +35 -0
  410. package/hedhog/table/mail_var.yaml +4 -0
  411. package/hedhog/table/setting.yaml +1 -0
  412. package/hedhog/table/system_incident.yaml +59 -0
  413. package/hedhog/table/user_presence.yaml +36 -0
  414. package/package.json +8 -4
  415. package/src/access-log/access-log.interceptor.ts +4 -2
  416. package/src/ai/ai-attachment.fragments.spec.ts +319 -0
  417. package/src/ai/ai-attachment.fragments.ts +35 -0
  418. package/src/ai/ai.prompts.ts +38 -0
  419. package/src/ai/ai.service.spec.ts +280 -0
  420. package/src/ai/ai.service.ts +338 -82
  421. package/src/ai/dto/chat.dto.ts +33 -3
  422. package/src/ai/dto/create-agent.dto.ts +2 -2
  423. package/src/ai/dto/update-agent.dto.ts +2 -2
  424. package/src/ai-instruction/ai-instruction.controller.ts +40 -9
  425. package/src/ai-instruction/ai-instruction.module.ts +13 -2
  426. package/src/ai-instruction/ai-instruction.service.spec.ts +658 -0
  427. package/src/ai-instruction/ai-instruction.service.ts +661 -62
  428. package/src/ai-instruction/ai-prompt-builder.service.ts +10 -1
  429. package/src/ai-instruction/ai-prompt-registry.ts +87 -0
  430. package/src/ai-instruction/ai-prompt-resolver.service.spec.ts +375 -0
  431. package/src/ai-instruction/ai-prompt-resolver.service.ts +295 -0
  432. package/src/ai-instruction/ai-prompt-template.util.spec.ts +162 -0
  433. package/src/ai-instruction/ai-prompt-template.util.ts +199 -0
  434. package/src/ai-instruction/dto/create-ai-instruction.dto.ts +39 -3
  435. package/src/ai-instruction/dto/preview-ai-instruction.dto.ts +26 -0
  436. package/src/ai-instruction/dto/update-ai-instruction.dto.ts +42 -1
  437. package/src/ai-instruction/types/ai-instruction.types.ts +24 -1
  438. package/src/auth/auth.controller.ts +31 -5
  439. package/src/auth/auth.service.spec.ts +3 -1
  440. package/src/auth/auth.service.ts +101 -36
  441. package/src/captcha/captcha.module.ts +10 -0
  442. package/src/captcha/captcha.service.spec.ts +210 -0
  443. package/src/captcha/captcha.service.ts +191 -0
  444. package/src/challenge/challenge.service.spec.ts +39 -4
  445. package/src/challenge/challenge.service.ts +72 -17
  446. package/src/core.module.ts +27 -1
  447. package/src/file/file.service.spec.ts +105 -0
  448. package/src/file/file.service.ts +60 -3
  449. package/src/incident/incident-notifier.service.spec.ts +205 -0
  450. package/src/incident/incident-notifier.service.ts +241 -0
  451. package/src/incident/incident.controller.ts +38 -0
  452. package/src/incident/incident.module.ts +19 -0
  453. package/src/incident/incident.service.spec.ts +150 -0
  454. package/src/incident/incident.service.ts +209 -0
  455. package/src/index.ts +37 -0
  456. package/src/integration-profile/dto/test.dto.ts +19 -0
  457. package/src/integration-profile/integration-profile.controller.ts +10 -1
  458. package/src/integration-profile/integration-profile.module.spec.ts +51 -0
  459. package/src/integration-profile/integration-profile.module.ts +23 -4
  460. package/src/integration-profile/integration-profile.secrets.ts +9 -1
  461. package/src/integration-profile/integration-profile.service.spec.ts +279 -0
  462. package/src/integration-profile/integration-profile.service.ts +120 -124
  463. package/src/integration-profile/integration-profile.utils.spec.ts +22 -0
  464. package/src/integration-profile/integration-profile.utils.ts +40 -3
  465. package/src/integration-profile/testers/ai.testers.ts +165 -0
  466. package/src/integration-profile/testers/captcha.testers.spec.ts +92 -0
  467. package/src/integration-profile/testers/captcha.testers.ts +139 -0
  468. package/src/integration-profile/testers/email.testers.ts +161 -0
  469. package/src/integration-profile/testers/http-probe.spec.ts +153 -0
  470. package/src/integration-profile/testers/http-probe.ts +171 -0
  471. package/src/integration-profile/testers/index.ts +30 -0
  472. package/src/integration-profile/testers/infrastructure.testers.ts +122 -0
  473. package/src/integration-profile/testers/integration-tester.registry.spec.ts +75 -0
  474. package/src/integration-profile/testers/integration-tester.registry.ts +43 -0
  475. package/src/integration-profile/testers/integration-tester.types.ts +61 -0
  476. package/src/integration-profile/testers/messaging.testers.ts +102 -0
  477. package/src/integration-profile/testers/oauth.testers.spec.ts +220 -0
  478. package/src/integration-profile/testers/oauth.testers.ts +305 -0
  479. package/src/integration-profile/testers/payment.testers.ts +185 -0
  480. package/src/integration-profile/testers/remaining.testers.spec.ts +401 -0
  481. package/src/integration-profile/testers/storage.testers.spec.ts +185 -0
  482. package/src/integration-profile/testers/storage.testers.ts +226 -0
  483. package/src/integration-profile/testers/tester-coverage.spec.ts +58 -0
  484. package/src/language/en.json +4 -2
  485. package/src/language/pt.json +4 -2
  486. package/src/leaked-password/README.md +83 -0
  487. package/src/leaked-password/leaked-password.controller.ts +52 -0
  488. package/src/leaked-password/leaked-password.module.ts +18 -0
  489. package/src/leaked-password/leaked-password.service.ts +242 -0
  490. package/src/leaked-password/seed/build-seed-sql.mjs +180 -0
  491. package/src/leaked-password/seed/common-passwords.txt +335 -0
  492. package/src/mail/dto/preview.dto.ts +50 -0
  493. package/src/mail/dto/send.dto.ts +14 -1
  494. package/src/mail/mail-template.spec.ts +197 -0
  495. package/src/mail/mail.controller.ts +9 -2
  496. package/src/mail/mail.service.spec.ts +116 -1
  497. package/src/mail/mail.service.ts +118 -12
  498. package/src/mail-layout/dto/update.dto.ts +19 -0
  499. package/src/mail-layout/mail-layout.controller.ts +47 -0
  500. package/src/mail-layout/mail-layout.module.ts +22 -0
  501. package/src/mail-layout/mail-layout.service.ts +94 -0
  502. package/src/mcp-chat/mcp-chat.service.spec.ts +236 -0
  503. package/src/mcp-chat/mcp-chat.service.ts +122 -26
  504. package/src/oauth/oauth-token-broker.service.spec.ts +172 -0
  505. package/src/oauth/oauth-token-broker.service.ts +363 -0
  506. package/src/oauth/oauth.module.ts +3 -1
  507. package/src/oauth/oauth.service.ts +8 -2
  508. package/src/pdf/pdf.service.ts +75 -0
  509. package/src/presence/presence.controller.ts +29 -0
  510. package/src/presence/presence.listener.ts +53 -0
  511. package/src/presence/presence.module.ts +19 -0
  512. package/src/presence/presence.service.spec.ts +97 -0
  513. package/src/presence/presence.service.ts +160 -0
  514. package/src/profile/dto/delete-account.dto.ts +11 -0
  515. package/src/profile/events/profile-account-deleted.event.ts +13 -0
  516. package/src/profile/profile.controller.ts +46 -34
  517. package/src/profile/profile.service.ts +138 -38
  518. package/src/realtime/realtime.gateway.ts +138 -0
  519. package/src/realtime/realtime.module.ts +16 -0
  520. package/src/realtime/realtime.service.spec.ts +50 -0
  521. package/src/realtime/realtime.service.ts +187 -0
  522. package/src/redis/redis-pubsub.ts +179 -0
  523. package/src/setting/dto/create.dto.ts +13 -2
  524. package/src/setting/setting.service.spec.ts +56 -0
  525. package/src/setting/setting.service.ts +29 -1
  526. package/src/user/dto/create-with-email-and-password.dto.ts +6 -1
  527. package/src/user/dto/query-user-mail-list.dto.ts +10 -0
  528. package/src/user/user-credential.util.ts +35 -0
  529. package/src/user/user.controller.ts +17 -2
  530. package/src/user/user.service.spec.ts +153 -0
  531. package/src/user/user.service.ts +255 -12
  532. package/src/validators/is-strong-password-with-settings.validator.ts +12 -0
  533. package/src/validators/service-locator.ts +15 -0
  534. package/src/whatsapp-sender/whatsapp-sender.module.ts +10 -0
  535. package/src/whatsapp-sender/whatsapp-sender.service.ts +313 -0
package/README.md CHANGED
@@ -11,11 +11,12 @@ The `@hed-hog/core` module is the core of the HedHog monorepo, responsible for p
11
11
  ## 2. Scope and responsibilities
12
12
 
13
13
  - Authentication and authorization management, including MFA, WebAuthn, password recovery, sessions, and social login via OAuth (Google, Facebook, GitHub, Microsoft, Microsoft Entra ID, Apple, LinkedIn) with a multi-app callback hub.
14
- - Artificial intelligence services for chat and AI agents with support for OpenAI and Gemini.
14
+ - Artificial intelligence services for chat and AI agents with support for OpenAI, Gemini and DeepSeek.
15
15
  - Management of dashboards, components, roles, and associated users.
16
16
  - Operating system, hardware, database, and installed-module information.
17
17
  - Data validation and handling via DTOs and integration with the Prisma ORM.
18
18
  - Internationalization and pagination support.
19
+ - Shared CAPTCHA verification for public forms (`CaptchaService`), supporting reCAPTCHA, Cloudflare Turnstile and Altcha. It has no endpoints of its own: other modules inject it and call `verifyForProfile(integrationProfileId, token)`, so credentials stay in an `integration_profile` and a form only stores the profile id. `getPublicConfig()` returns the site key for the front end — the secret never leaves the server.
19
20
 
20
21
  ## 3. Endpoints
21
22
 
@@ -23,12 +24,12 @@ The `@hed-hog/core` module is the core of the HedHog monorepo, responsible for p
23
24
 
24
25
  | Method | Path | Auth | Description | Parameters / Query / Body | Response | Common Errors |
25
26
  |--------|-------------------------|--------------|-----------------------------------------------------|-------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|-------------------------------------|
26
- | POST | `/ai/chat` | Authenticated | Chats with AI, optionally sending a file. | Body: `ChatDTO` (message: string, provider?: 'openai'|'gemini', model?: string, systemPrompt?: string, file_id?: number)<br>File: optional | `{ provider: string, model: string, content: string }` | 400: API key not configured |
27
- | POST | `/ai/agent` | Authenticated | Creates an AI agent. | Body: `CreateAgentDTO` (slug: string, provider?: 'openai'|'gemini', model?: string, instructions?: string) | Created or existing agent object | 400: Slug already exists |
27
+ | POST | `/ai/chat` | Authenticated | Chats with AI, optionally sending a file. | Body: `ChatDTO` (message: string, provider?: 'openai'|'gemini'|'deepseek', model?: string, systemPrompt?: string, file_id?: number)<br>File: optional | `{ provider: string, model: string, content: string }` | 400: API key not configured |
28
+ | POST | `/ai/agent` | Authenticated | Creates an AI agent. | Body: `CreateAgentDTO` (slug: string, provider?: 'openai'|'gemini'|'deepseek', model?: string, instructions?: string) | Created or existing agent object | 400: Slug already exists |
28
29
  | GET | `/ai/agent` | Authenticated | Lists AI agents with pagination. | Query: pagination (page?: number, pageSize?: number, search?: string) | Paginated list of agents | - |
29
30
  | GET | `/ai/agent/id/:agentId` | Authenticated | Gets an AI agent by ID. | Path param: `agentId` (int) | Agent object | 404: Agent not found |
30
31
  | GET | `/ai/agent/:slug` | Authenticated | Gets an AI agent by slug. | Path param: `slug` (string) | Agent object | 404: Agent not found |
31
- | PATCH | `/ai/agent/:agentId` | Authenticated | Updates an AI agent. | Path param: `agentId` (int)<br>Body: `UpdateAgentDTO` (slug?: string, provider?: 'openai'|'gemini', model?: string, instructions?: string) | Updated agent object | 404: Agent not found<br>400: Duplicate slug |
32
+ | PATCH | `/ai/agent/:agentId` | Authenticated | Updates an AI agent. | Path param: `agentId` (int)<br>Body: `UpdateAgentDTO` (slug?: string, provider?: 'openai'|'gemini'|'deepseek', model?: string, instructions?: string) | Updated agent object | 404: Agent not found<br>400: Duplicate slug |
32
33
  | DELETE | `/ai/agent` | Authenticated | Bulk-deletes AI agents. | Body: `DeleteDTO` (ids: number[]) | `{ count: number }` | 404: One or more agents not found |
33
34
  | POST | `/ai/agent/:slug/chat` | Authenticated | Chats with a specific AI agent, with an optional file. | Path param: `slug` (string)<br>Body: `ChatAgentDTO` (message: string, file_id?: number)<br>File: optional | `{ slug: string, provider: string, model: string, content: string }` | 404: Agent not found |
34
35
 
@@ -182,7 +183,7 @@ The `@hed-hog/core` module is the core of the HedHog monorepo, responsible for p
182
183
  ```ts
183
184
  {
184
185
  message: string; // required
185
- provider?: 'openai' | 'gemini'; // optional, default 'openai'
186
+ provider?: 'openai' | 'gemini' | 'deepseek'; // optional, default 'openai'
186
187
  model?: string; // optional
187
188
  systemPrompt?: string; // optional
188
189
  file_id?: number; // optional
@@ -203,7 +204,7 @@ The `@hed-hog/core` module is the core of the HedHog monorepo, responsible for p
203
204
  ```ts
204
205
  {
205
206
  slug: string; // required
206
- provider?: 'openai' | 'gemini'; // optional, default 'openai'
207
+ provider?: 'openai' | 'gemini' | 'deepseek'; // optional, default 'openai'
207
208
  model?: string; // optional
208
209
  instructions?: string; // optional
209
210
  }
@@ -214,7 +215,7 @@ The `@hed-hog/core` module is the core of the HedHog monorepo, responsible for p
214
215
  ```ts
215
216
  {
216
217
  slug?: string;
217
- provider?: 'openai' | 'gemini';
218
+ provider?: 'openai' | 'gemini' | 'deepseek';
218
219
  model?: string;
219
220
  instructions?: string;
220
221
  }
@@ -454,7 +455,7 @@ The `@hed-hog/core` module is the core of the HedHog monorepo, responsible for p
454
455
 
455
456
  - **400 Bad Request**
456
457
 
457
- - API key not configured for OpenAI or Gemini.
458
+ - API key not configured for OpenAI, Gemini or DeepSeek.
458
459
  - AI agent slug already exists.
459
460
  - Invalid or expired verification code.
460
461
  - Refresh token not provided.
@@ -496,7 +497,7 @@ purpose: Stores AI agents configured in the system.
496
497
  columns:
497
498
  - id: integer, PK, auto-increment
498
499
  - slug: string, unique, not null
499
- - provider: enum('openai', 'gemini'), not null
500
+ - provider: enum('openai', 'gemini', 'deepseek'), not null
500
501
  - model: string, nullable
501
502
  - instructions: string, nullable
502
503
  - external_agent_id: string, nullable
@@ -515,7 +516,7 @@ indexes:
515
516
  - id (PK)
516
517
  - slug (unique)
517
518
  enums:
518
- - provider: ['openai', 'gemini']
519
+ - provider: ['openai', 'gemini', 'deepseek']
519
520
  ```
520
521
 
521
522
  ### user
@@ -770,7 +771,7 @@ indexes:
770
771
 
771
772
  ## 8. Relevant business rules
772
773
 
773
- - AI agents can be created, updated, and deleted, with direct integration with the OpenAI and Gemini APIs.
774
+ - AI agents can be created, updated, and deleted, with direct integration with the OpenAI, Gemini and DeepSeek APIs.
774
775
  - AI chat supports file attachments, with text extraction for PDFs and text files.
775
776
  - Mandatory MFA can be configured, with support for email, TOTP, and WebAuthn.
776
777
  - Access and refresh tokens are managed securely, including HTTP-only cookies.
@@ -1 +1 @@
1
- {"version":3,"file":"access-log.interceptor.d.ts","sourceRoot":"","sources":["../../src/access-log/access-log.interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAEhB,eAAe,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAO,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,qBACa,oBAAqB,YAAW,eAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,gBAAgB;IAE/D,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC;CAwBzE"}
1
+ {"version":3,"file":"access-log.interceptor.d.ts","sourceRoot":"","sources":["../../src/access-log/access-log.interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAEhB,eAAe,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAO,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,qBACa,oBAAqB,YAAW,eAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,gBAAgB;IAE/D,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC;CA0BzE"}
@@ -30,8 +30,10 @@ let AccessLogInterceptor = class AccessLogInterceptor {
30
30
  return next.handle().pipe((0, rxjs_1.tap)(() => {
31
31
  var _a, _b, _c, _d;
32
32
  const userId = (_a = request.auth) === null || _a === void 0 ? void 0 : _a.sub;
33
- const forwarded = request.headers['x-forwarded-for'];
34
- const ip = forwarded ? forwarded.split(',')[0].trim() : ((_b = request.ip) !== null && _b !== void 0 ? _b : '');
33
+ // request.ip já resolve o IP real do cliente respeitando `trust proxy` (main.ts):
34
+ // ler x-forwarded-for na mão aqui pegava o primeiro valor da lista, que é
35
+ // exatamente o mais fácil de forjar pelo próprio cliente.
36
+ const ip = (_b = request.ip) !== null && _b !== void 0 ? _b : '';
35
37
  const userAgent = (_c = request.headers['user-agent']) !== null && _c !== void 0 ? _c : '';
36
38
  const method = (_d = request.method) !== null && _d !== void 0 ? _d : '';
37
39
  this.accessLogService.recordHttp({ userId, ip, userAgent, method, path });
@@ -1 +1 @@
1
- {"version":3,"file":"access-log.interceptor.js","sourceRoot":"","sources":["../../src/access-log/access-log.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,+BAAuC;AACvC,6DAAwD;AAGjD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAA6B,gBAAkC;QAAlC,qBAAgB,GAAhB,gBAAgB,CAAkB;IAAG,CAAC;IAEnE,SAAS,CAAC,OAAyB,EAAE,IAAiB;;QACpD,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,IAAI,GAAW,MAAA,OAAO,CAAC,GAAG,mCAAI,EAAE,CAAC;QAEvC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,UAAG,EAAC,GAAG,EAAE;;YACP,MAAM,MAAM,GAAuB,MAAA,OAAO,CAAC,IAAI,0CAAE,GAAG,CAAC;YACrD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAuB,CAAC;YAC3E,MAAM,EAAE,GAAW,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAA,OAAO,CAAC,EAAE,mCAAI,EAAE,CAAC,CAAC;YACnF,MAAM,SAAS,GAAW,MAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAY,mCAAI,EAAE,CAAC;YAC1E,MAAM,MAAM,GAAW,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,CAAC;YAE5C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;AA3BY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAEoC,qCAAgB;GADpD,oBAAoB,CA2BhC"}
1
+ {"version":3,"file":"access-log.interceptor.js","sourceRoot":"","sources":["../../src/access-log/access-log.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,+BAAuC;AACvC,6DAAwD;AAGjD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAA6B,gBAAkC;QAAlC,qBAAgB,GAAhB,gBAAgB,CAAkB;IAAG,CAAC;IAEnE,SAAS,CAAC,OAAyB,EAAE,IAAiB;;QACpD,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,IAAI,GAAW,MAAA,OAAO,CAAC,GAAG,mCAAI,EAAE,CAAC;QAEvC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,UAAG,EAAC,GAAG,EAAE;;YACP,MAAM,MAAM,GAAuB,MAAA,OAAO,CAAC,IAAI,0CAAE,GAAG,CAAC;YACrD,kFAAkF;YAClF,0EAA0E;YAC1E,0DAA0D;YAC1D,MAAM,EAAE,GAAW,MAAA,OAAO,CAAC,EAAE,mCAAI,EAAE,CAAC;YACpC,MAAM,SAAS,GAAW,MAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAY,mCAAI,EAAE,CAAC;YAC1E,MAAM,MAAM,GAAW,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,CAAC;YAE5C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;AA7BY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAEoC,qCAAgB;GADpD,oBAAoB,CA6BhC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Framing mecânico de anexo enviado ao modelo — deliberadamente FORA do registry
3
+ * de `ai_instruction` (ver o docblock de `ai.prompts.ts`).
4
+ *
5
+ * Estes marcadores andam em lockstep com `isTextMime`/`isPdfMime`/`extractPdfText`
6
+ * em `ai.service.ts`: são o que diz ao modelo que o texto a seguir é o conteúdo de
7
+ * um arquivo, e não a mensagem do usuário. Antes estavam copiados literalmente nos
8
+ * dois caminhos de provider (Gemini e OpenAI), onde uma cópia podia ser corrigida
9
+ * e a outra esquecida sem gerar erro nenhum.
10
+ *
11
+ * O `\n\n` inicial faz parte do bloco: no Gemini ele abre um `part` separado, no
12
+ * OpenAI ele é a junta logo depois de `${message}`. Nos dois casos os bytes finais
13
+ * são exatamente os mesmos.
14
+ *
15
+ * Coberto byte a byte por `ai-attachment.fragments.spec.ts` — não "arrume" o texto.
16
+ */
17
+ /** Bloco que embrulha o conteúdo textual extraído de um anexo. */
18
+ export declare function attachedFileBlock(filename: string, body: string): string;
19
+ /** Usado quando o anexo não é texto nem PDF legível e vai apenas descrito. */
20
+ export declare function binaryAttachmentMarker(filename: string, mimeType: string, bytes: number): string;
21
+ /** Usado quando `extractPdfText` não consegue extrair nada do PDF. */
22
+ export declare function unreadablePdfMarker(filename: string): string;
23
+ //# sourceMappingURL=ai-attachment.fragments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-attachment.fragments.d.ts","sourceRoot":"","sources":["../../src/ai/ai-attachment.fragments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,CAER;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ /**
3
+ * Framing mecânico de anexo enviado ao modelo — deliberadamente FORA do registry
4
+ * de `ai_instruction` (ver o docblock de `ai.prompts.ts`).
5
+ *
6
+ * Estes marcadores andam em lockstep com `isTextMime`/`isPdfMime`/`extractPdfText`
7
+ * em `ai.service.ts`: são o que diz ao modelo que o texto a seguir é o conteúdo de
8
+ * um arquivo, e não a mensagem do usuário. Antes estavam copiados literalmente nos
9
+ * dois caminhos de provider (Gemini e OpenAI), onde uma cópia podia ser corrigida
10
+ * e a outra esquecida sem gerar erro nenhum.
11
+ *
12
+ * O `\n\n` inicial faz parte do bloco: no Gemini ele abre um `part` separado, no
13
+ * OpenAI ele é a junta logo depois de `${message}`. Nos dois casos os bytes finais
14
+ * são exatamente os mesmos.
15
+ *
16
+ * Coberto byte a byte por `ai-attachment.fragments.spec.ts` — não "arrume" o texto.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.attachedFileBlock = attachedFileBlock;
20
+ exports.binaryAttachmentMarker = binaryAttachmentMarker;
21
+ exports.unreadablePdfMarker = unreadablePdfMarker;
22
+ /** Bloco que embrulha o conteúdo textual extraído de um anexo. */
23
+ function attachedFileBlock(filename, body) {
24
+ return `\n\n[Attached file: ${filename}]\n${body}`;
25
+ }
26
+ /** Usado quando o anexo não é texto nem PDF legível e vai apenas descrito. */
27
+ function binaryAttachmentMarker(filename, mimeType, bytes) {
28
+ return `[Binary attachment: ${filename} | ${mimeType} | ${bytes} bytes]`;
29
+ }
30
+ /** Usado quando `extractPdfText` não consegue extrair nada do PDF. */
31
+ function unreadablePdfMarker(filename) {
32
+ return `[PDF attachment with unreadable text: ${filename}]`;
33
+ }
34
+ //# sourceMappingURL=ai-attachment.fragments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-attachment.fragments.js","sourceRoot":"","sources":["../../src/ai/ai-attachment.fragments.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAGH,8CAEC;AAGD,wDAMC;AAGD,kDAEC;AAjBD,kEAAkE;AAClE,SAAgB,iBAAiB,CAAC,QAAgB,EAAE,IAAY;IAC9D,OAAO,uBAAuB,QAAQ,MAAM,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,8EAA8E;AAC9E,SAAgB,sBAAsB,CACpC,QAAgB,EAChB,QAAgB,EAChB,KAAa;IAEb,OAAO,uBAAuB,QAAQ,MAAM,QAAQ,MAAM,KAAK,SAAS,CAAC;AAC3E,CAAC;AAED,sEAAsE;AACtE,SAAgB,mBAAmB,CAAC,QAAgB;IAClD,OAAO,yCAAyC,QAAQ,GAAG,CAAC;AAC9D,CAAC"}
@@ -8,18 +8,14 @@ export declare class AiController {
8
8
  private readonly aiService;
9
9
  constructor(aiService: AiService);
10
10
  chat(data: ChatDTO, file?: MulterFile): Promise<{
11
- provider: "openai";
12
- model: string;
13
- content: string;
14
- } | {
15
- provider: "gemini";
11
+ provider: "openai" | "deepseek" | "gemini";
16
12
  model: string;
17
13
  content: string;
18
14
  }>;
19
15
  createAgent(data: CreateAgentDTO): Promise<{
20
16
  id: number;
21
17
  slug: string;
22
- provider: "openai" | "gemini";
18
+ provider: "openai" | "deepseek" | "gemini";
23
19
  model: string | null;
24
20
  instructions: string | null;
25
21
  external_agent_id: string | null;
@@ -30,7 +26,7 @@ export declare class AiController {
30
26
  data: {
31
27
  id: number;
32
28
  slug: string;
33
- provider: "openai" | "gemini";
29
+ provider: "openai" | "deepseek" | "gemini";
34
30
  model: string | null;
35
31
  instructions: string | null;
36
32
  external_agent_id: string | null;
@@ -45,7 +41,7 @@ export declare class AiController {
45
41
  getAgentById(agentId: number): Promise<{
46
42
  id: number;
47
43
  slug: string;
48
- provider: "openai" | "gemini";
44
+ provider: "openai" | "deepseek" | "gemini";
49
45
  model: string | null;
50
46
  instructions: string | null;
51
47
  external_agent_id: string | null;
@@ -55,7 +51,7 @@ export declare class AiController {
55
51
  getAgent(slug: string): Promise<{
56
52
  id: number;
57
53
  slug: string;
58
- provider: "openai" | "gemini";
54
+ provider: "openai" | "deepseek" | "gemini";
59
55
  model: string | null;
60
56
  instructions: string | null;
61
57
  external_agent_id: string | null;
@@ -65,7 +61,7 @@ export declare class AiController {
65
61
  updateAgent(agentId: number, data: UpdateAgentDTO): Promise<{
66
62
  id: number;
67
63
  slug: string;
68
- provider: "openai" | "gemini";
64
+ provider: "openai" | "deepseek" | "gemini";
69
65
  model: string | null;
70
66
  instructions: string | null;
71
67
  external_agent_id: string | null;
@@ -77,12 +73,7 @@ export declare class AiController {
77
73
  }>;
78
74
  chatWithAgent(slug: string, data: ChatAgentDTO, file?: MulterFile): Promise<{
79
75
  slug: string;
80
- provider: "openai";
81
- model: string;
82
- content: string;
83
- } | {
84
- slug: string;
85
- provider: "gemini";
76
+ provider: "openai" | "deepseek" | "gemini";
86
77
  model: string;
87
78
  content: string;
88
79
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"ai.controller.d.ts","sourceRoot":"","sources":["../../src/ai/ai.controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,qBAEa,YAAY;IAGrB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAKjC,IAAI,CAAS,IAAI,EAAE,OAAO,EAAkB,IAAI,CAAC,EAAE,UAAU;;;;;;;;;IAK7D,WAAW,CAAS,IAAI,EAAE,cAAc;;;;;;;;;;IAKxC,UAAU,CAAe,gBAAgB,KAAA;;;;;;;;;;;;;;;;IAKzC,YAAY,CAAiC,OAAO,EAAE,MAAM;;;;;;;;;;IAK5D,QAAQ,CAAgB,IAAI,EAAE,MAAM;;;;;;;;;;IAKpC,WAAW,CACiB,OAAO,EAAE,MAAM,EACvC,IAAI,EAAE,cAAc;;;;;;;;;;IAMxB,YAAY,CAAS,IAAI,EAAE,SAAS;;;IAMpC,aAAa,CACF,IAAI,EAAE,MAAM,EACnB,IAAI,EAAE,YAAY,EACV,IAAI,CAAC,EAAE,UAAU;;;;;;;;;;;CAIpC"}
1
+ {"version":3,"file":"ai.controller.d.ts","sourceRoot":"","sources":["../../src/ai/ai.controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,qBAEa,YAAY;IAGrB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAKjC,IAAI,CAAS,IAAI,EAAE,OAAO,EAAkB,IAAI,CAAC,EAAE,UAAU;;;;;IAK7D,WAAW,CAAS,IAAI,EAAE,cAAc;;;;;;;;;;IAKxC,UAAU,CAAe,gBAAgB,KAAA;;;;;;;;;;;;;;;;IAKzC,YAAY,CAAiC,OAAO,EAAE,MAAM;;;;;;;;;;IAK5D,QAAQ,CAAgB,IAAI,EAAE,MAAM;;;;;;;;;;IAKpC,WAAW,CACiB,OAAO,EAAE,MAAM,EACvC,IAAI,EAAE,cAAc;;;;;;;;;;IAMxB,YAAY,CAAS,IAAI,EAAE,SAAS;;;IAMpC,aAAa,CACF,IAAI,EAAE,MAAM,EACnB,IAAI,EAAE,YAAY,EACV,IAAI,CAAC,EAAE,UAAU;;;;;;CAIpC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Core AI prompts.
3
+ *
4
+ * Deliberately NOT moved here: the attachment wrappers (`[Attached file: …]`,
5
+ * `[Binary attachment: …]`, `[PDF attachment with unreadable text: …]`). Those are
6
+ * mechanical framing that must stay in lockstep with `isTextMime`/`isPdfMime`/
7
+ * `buildOpenAiUserContent` on the parsing side — editable prose they are not.
8
+ * They now live in `ai-attachment.fragments.ts` (single copy, in code), covered
9
+ * byte for byte by `ai-attachment.fragments.spec.ts`.
10
+ */
11
+ export declare const CORE_AI_PROMPT_SLUGS: {
12
+ readonly agentDefaultInstructions: "task.core.ai-agent.default-instructions.system";
13
+ };
14
+ /** Used when an agent is created without explicit instructions. */
15
+ export declare const AGENT_DEFAULT_INSTRUCTIONS_PROMPT = "You are the assistant identified by slug {{slug}}.";
16
+ //# sourceMappingURL=ai.prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.prompts.d.ts","sourceRoot":"","sources":["../../src/ai/ai.prompts.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,eAAO,MAAM,oBAAoB;;CAEvB,CAAC;AAEX,mEAAmE;AACnE,eAAO,MAAM,iCAAiC,uDACQ,CAAC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AGENT_DEFAULT_INSTRUCTIONS_PROMPT = exports.CORE_AI_PROMPT_SLUGS = void 0;
4
+ const ai_prompt_registry_1 = require("../ai-instruction/ai-prompt-registry");
5
+ /**
6
+ * Core AI prompts.
7
+ *
8
+ * Deliberately NOT moved here: the attachment wrappers (`[Attached file: …]`,
9
+ * `[Binary attachment: …]`, `[PDF attachment with unreadable text: …]`). Those are
10
+ * mechanical framing that must stay in lockstep with `isTextMime`/`isPdfMime`/
11
+ * `buildOpenAiUserContent` on the parsing side — editable prose they are not.
12
+ * They now live in `ai-attachment.fragments.ts` (single copy, in code), covered
13
+ * byte for byte by `ai-attachment.fragments.spec.ts`.
14
+ */
15
+ exports.CORE_AI_PROMPT_SLUGS = {
16
+ agentDefaultInstructions: 'task.core.ai-agent.default-instructions.system',
17
+ };
18
+ /** Used when an agent is created without explicit instructions. */
19
+ exports.AGENT_DEFAULT_INSTRUCTIONS_PROMPT = 'You are the assistant identified by slug {{slug}}.';
20
+ (0, ai_prompt_registry_1.registerAiPrompts)([
21
+ {
22
+ slug: exports.CORE_AI_PROMPT_SLUGS.agentDefaultInstructions,
23
+ name: 'AI agent — instruções padrão',
24
+ moduleSlug: 'core',
25
+ locale: 'en',
26
+ fallback: exports.AGENT_DEFAULT_INSTRUCTIONS_PROMPT,
27
+ variables: {
28
+ slug: {
29
+ type: 'string',
30
+ required: true,
31
+ description: 'Slug do agente sendo criado.',
32
+ sample: 'finance-payable-extractor',
33
+ },
34
+ },
35
+ },
36
+ ]);
37
+ //# sourceMappingURL=ai.prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.prompts.js","sourceRoot":"","sources":["../../src/ai/ai.prompts.ts"],"names":[],"mappings":";;;AAAA,6EAAyE;AAEzE;;;;;;;;;GASG;AAEU,QAAA,oBAAoB,GAAG;IAClC,wBAAwB,EAAE,gDAAgD;CAClE,CAAC;AAEX,mEAAmE;AACtD,QAAA,iCAAiC,GAC5C,oDAAoD,CAAC;AAEvD,IAAA,sCAAiB,EAAC;IAChB;QACE,IAAI,EAAE,4BAAoB,CAAC,wBAAwB;QACnD,IAAI,EAAE,8BAA8B;QACpC,UAAU,EAAE,MAAM;QAClB,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,yCAAiC;QAC3C,SAAS,EAAE;YACT,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,8BAA8B;gBAC3C,MAAM,EAAE,2BAA2B;aACpC;SACF;KACF;CACF,CAAC,CAAC"}
@@ -2,6 +2,8 @@ import { PaginationDTO } from '@hed-hog/api-pagination';
2
2
  import { PrismaService } from '@hed-hog/api-prisma';
3
3
  import { OnModuleInit } from '@nestjs/common';
4
4
  import { AiExecutionService } from '../ai-instruction/ai-execution.service';
5
+ import { AiPromptResolverService, type PromptSource } from '../ai-instruction/ai-prompt-resolver.service';
6
+ import type { TemplateVars } from '../ai-instruction/ai-prompt-template.util';
5
7
  import { DeleteDTO } from '../dto/delete.dto';
6
8
  import { FileService } from '../file/file.service';
7
9
  import { SettingService } from '../setting/setting.service';
@@ -9,7 +11,19 @@ import { ChatAgentDTO } from './dto/chat-agent.dto';
9
11
  import { ChatDTO } from './dto/chat.dto';
10
12
  import { CreateAgentDTO } from './dto/create-agent.dto';
11
13
  import { UpdateAgentDTO } from './dto/update-agent.dto';
12
- type AiProvider = 'openai' | 'gemini';
14
+ type AiProvider = 'openai' | 'gemini' | 'deepseek';
15
+ /**
16
+ * Optional per-call model tuning.
17
+ *
18
+ * These are only sent to the provider when a value is present: the request
19
+ * bodies must stay byte-identical to what they were before this existed, since
20
+ * some newer models reject `temperature` / `max_tokens` outright.
21
+ */
22
+ export type AiChatModelParams = {
23
+ temperature?: number | null;
24
+ maxTokens?: number | null;
25
+ responseFormat?: 'text' | 'json_object';
26
+ };
13
27
  type AiAgentRecord = {
14
28
  id: number;
15
29
  slug: string;
@@ -25,19 +39,47 @@ export declare class AiService implements OnModuleInit {
25
39
  private readonly settingService;
26
40
  private readonly fileService;
27
41
  private readonly aiExecution;
42
+ private readonly promptResolver;
28
43
  private readonly logger;
29
- constructor(prismaService: PrismaService, settingService: SettingService, fileService: FileService, aiExecution: AiExecutionService);
44
+ constructor(prismaService: PrismaService, settingService: SettingService, fileService: FileService, aiExecution: AiExecutionService, promptResolver: AiPromptResolverService);
30
45
  onModuleInit(): Promise<void>;
31
46
  chat(data: ChatDTO, file?: MulterFile): Promise<{
32
- provider: "openai";
47
+ provider: AiProvider;
33
48
  model: string;
34
49
  content: string;
35
- } | {
36
- provider: "gemini";
50
+ }>;
51
+ /**
52
+ * Chat driven by prompts stored in `ai_instruction`.
53
+ *
54
+ * Resolves the system and user prompts by slug in one query, applies whatever
55
+ * model params the records declare (falling back to `params` and then to the
56
+ * provider defaults), and reports back where each prompt came from so callers
57
+ * can log a fallback.
58
+ */
59
+ chatWithPrompt(input: {
60
+ systemPromptSlug?: string;
61
+ userPromptSlug: string;
62
+ variables?: TemplateVars;
63
+ provider?: AiProvider;
64
+ params?: AiChatModelParams;
65
+ contextSlug?: string;
66
+ }): Promise<{
67
+ provider: AiProvider;
37
68
  model: string;
38
69
  content: string;
70
+ promptSources: Record<string, PromptSource>;
39
71
  }>;
40
72
  createAgent(data: CreateAgentDTO): Promise<AiAgentRecord>;
73
+ /**
74
+ * Creates the agent, or updates it when its stored instructions/model drifted
75
+ * from what the caller now wants.
76
+ *
77
+ * `createAgent` returns the existing row untouched, so a caller that passes
78
+ * instructions on every request would keep whatever the very first call
79
+ * persisted. That silently defeats an editable prompt: the admin would save a
80
+ * change and the agent would go on using the original text.
81
+ */
82
+ upsertAgent(data: CreateAgentDTO): Promise<AiAgentRecord>;
41
83
  listAgents(paginationParams: PaginationDTO): Promise<{
42
84
  data: AiAgentRecord[];
43
85
  total: number;
@@ -52,12 +94,7 @@ export declare class AiService implements OnModuleInit {
52
94
  }>;
53
95
  chatWithAgent(slug: string, data: ChatAgentDTO, file?: MulterFile): Promise<{
54
96
  slug: string;
55
- provider: "openai";
56
- model: string;
57
- content: string;
58
- } | {
59
- slug: string;
60
- provider: "gemini";
97
+ provider: AiProvider;
61
98
  model: string;
62
99
  content: string;
63
100
  }>;
@@ -68,7 +105,7 @@ export declare class AiService implements OnModuleInit {
68
105
  filename: string;
69
106
  mimeType: string;
70
107
  bytes: number;
71
- mode: "binary" | "image" | "pdf-text" | "text";
108
+ mode: "binary" | "text" | "image" | "pdf-text";
72
109
  textLength: number;
73
110
  textSample: string;
74
111
  sha256: string;
@@ -76,7 +113,21 @@ export declare class AiService implements OnModuleInit {
76
113
  private findAgentBySlug;
77
114
  private findAgentById;
78
115
  private getDefaultModel;
116
+ /** Default AI provider used when a caller doesn't specify one (Settings → AI). */
117
+ private getDefaultProvider;
118
+ /**
119
+ * Envia o chat ao provider certo.
120
+ *
121
+ * O DeepSeek expõe a mesma API de `/chat/completions` da OpenAI, então reusa o
122
+ * caminho da OpenAI trocando a base URL — só não aceita imagens, porque os
123
+ * modelos `deepseek-chat`/`deepseek-reasoner` não têm visão.
124
+ */
125
+ private chatWithProvider;
79
126
  private getAiApiKey;
127
+ /** Resolves the active AI integration profile's credentials plus its optional model/timeout overrides. */
128
+ private getAiProfile;
129
+ /** Rejects with a timeout error if `promise` doesn't settle within `ms`. */
130
+ private withTimeout;
80
131
  private chatWithOpenAi;
81
132
  private createOpenAiAssistant;
82
133
  private chatWithOpenAiAssistant;
@@ -1 +1 @@
1
- {"version":3,"file":"ai.service.d.ts","sourceRoot":"","sources":["../../src/ai/ai.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAU,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAOH,YAAY,EACf,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,KAAK,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEtC,KAAK,aAAa,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;CAClB,CAAC;AAQF,qBACa,SAAU,YAAW,YAAY;IAK1C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAV9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;gBAIlC,aAAa,EAAE,aAAa,EAE5B,cAAc,EAAE,cAAc,EAE9B,WAAW,EAAE,WAAW,EAExB,WAAW,EAAE,kBAAkB;IAG5C,YAAY;IAeZ,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,UAAU;;;;;;;;;IA2DrC,WAAW,CAAC,IAAI,EAAE,cAAc;IAmChC,UAAU,CAAC,gBAAgB,EAAE,aAAa;;;;;;;IAuC1C,YAAY,CAAC,OAAO,EAAE,MAAM;IAU5B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc;IA6CjD,YAAY,CAAC,EAAE,GAAG,EAAE,EAAE,SAAS;;;IAyB/B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,UAAU;;;;;;;;;;;IAqDjE,cAAc,CAAC,IAAI,EAAE,MAAM;IAU3B,qBAAqB,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB1E,qBAAqB,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM;;;;;;;;;;YA+ChD,eAAe;YAWf,aAAa;IAW3B,OAAO,CAAC,eAAe;YAQT,WAAW;YAgCX,cAAc;YAwCd,qBAAqB;YAoCrB,uBAAuB;YA2FvB,cAAc;YAuEd,KAAK;YAIL,iBAAiB;YAgCjB,sBAAsB;IA+BpC,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,2BAA2B;YAmBrB,cAAc;IAkB5B,OAAO,CAAC,UAAU;CAGnB"}
1
+ {"version":3,"file":"ai.service.d.ts","sourceRoot":"","sources":["../../src/ai/ai.service.ts"],"names":[],"mappings":"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"}