@hed-hog/core 0.0.328 → 0.0.330

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 (206) hide show
  1. package/dist/ai/ai.service.d.ts +1 -1
  2. package/dist/auth/auth.controller.d.ts +23 -23
  3. package/dist/auth/auth.service.d.ts +41 -41
  4. package/dist/challenge/challenge.service.d.ts +14 -14
  5. package/dist/core/system.controller.d.ts +1 -1
  6. package/dist/core/system.service.d.ts +1 -1
  7. package/dist/core.module.d.ts.map +1 -1
  8. package/dist/core.module.js +9 -2
  9. package/dist/core.module.js.map +1 -1
  10. package/dist/dashboard/dashboard/dashboard.controller.d.ts +84 -84
  11. package/dist/dashboard/dashboard/dashboard.service.d.ts +84 -84
  12. package/dist/dashboard/dashboard-component/dashboard-component.controller.d.ts +29 -29
  13. package/dist/dashboard/dashboard-component/dashboard-component.service.d.ts +29 -29
  14. package/dist/dashboard/dashboard-component-role/dashboard-component-role.controller.d.ts +42 -42
  15. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts +42 -42
  16. package/dist/dashboard/dashboard-core/dashboard-core.controller.d.ts +11 -11
  17. package/dist/dashboard/dashboard-core/dashboard-core.service.d.ts +11 -11
  18. package/dist/dashboard/dashboard-item/dashboard-item.controller.d.ts +6 -6
  19. package/dist/dashboard/dashboard-item/dashboard-item.service.d.ts +6 -6
  20. package/dist/dashboard/dashboard-role/dashboard-role.controller.d.ts +33 -33
  21. package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts +33 -33
  22. package/dist/dashboard/dashboard-user/dashboard-user.controller.d.ts +3 -3
  23. package/dist/dashboard/dashboard-user/dashboard-user.service.d.ts +3 -3
  24. package/dist/file/file.controller.d.ts +10 -10
  25. package/dist/file/file.service.d.ts +22 -22
  26. package/dist/index.d.ts +11 -4
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +12 -4
  29. package/dist/index.js.map +1 -1
  30. package/dist/mail/mail.controller.d.ts +15 -15
  31. package/dist/mail/mail.service.d.ts +15 -15
  32. package/dist/mail-profile/mail-profile.controller.d.ts +9 -9
  33. package/dist/mail-profile/mail-profile.service.d.ts +9 -9
  34. package/dist/mail-sent/mail-sent.controller.d.ts +17 -17
  35. package/dist/mail-sent/mail-sent.service.d.ts +17 -17
  36. package/dist/mcp/decorators/mcp-tool.decorator.d.ts +4 -0
  37. package/dist/mcp/decorators/mcp-tool.decorator.d.ts.map +1 -0
  38. package/dist/mcp/decorators/mcp-tool.decorator.js +8 -0
  39. package/dist/mcp/decorators/mcp-tool.decorator.js.map +1 -0
  40. package/dist/mcp/guards/mcp-auth.guard.d.ts +9 -0
  41. package/dist/mcp/guards/mcp-auth.guard.d.ts.map +1 -0
  42. package/dist/mcp/guards/mcp-auth.guard.js +41 -0
  43. package/dist/mcp/guards/mcp-auth.guard.js.map +1 -0
  44. package/dist/mcp/guards/mcp-permission.guard.d.ts +8 -0
  45. package/dist/mcp/guards/mcp-permission.guard.d.ts.map +1 -0
  46. package/dist/mcp/guards/mcp-permission.guard.js +57 -0
  47. package/dist/mcp/guards/mcp-permission.guard.js.map +1 -0
  48. package/dist/mcp/interfaces/mcp-tool-definition.interface.d.ts +7 -0
  49. package/dist/mcp/interfaces/mcp-tool-definition.interface.d.ts.map +1 -0
  50. package/dist/mcp/interfaces/mcp-tool-definition.interface.js +3 -0
  51. package/dist/mcp/interfaces/mcp-tool-definition.interface.js.map +1 -0
  52. package/dist/mcp/mcp-audit.service.d.ts +17 -0
  53. package/dist/mcp/mcp-audit.service.d.ts.map +1 -0
  54. package/dist/mcp/mcp-audit.service.js +46 -0
  55. package/dist/mcp/mcp-audit.service.js.map +1 -0
  56. package/dist/mcp/mcp-registry.service.d.ts +21 -0
  57. package/dist/mcp/mcp-registry.service.d.ts.map +1 -0
  58. package/dist/mcp/mcp-registry.service.js +69 -0
  59. package/dist/mcp/mcp-registry.service.js.map +1 -0
  60. package/dist/mcp/mcp-server.service.d.ts +12 -0
  61. package/dist/mcp/mcp-server.service.d.ts.map +1 -0
  62. package/dist/mcp/mcp-server.service.js +94 -0
  63. package/dist/mcp/mcp-server.service.js.map +1 -0
  64. package/dist/mcp/mcp.controller.d.ts +8 -0
  65. package/dist/mcp/mcp.controller.d.ts.map +1 -0
  66. package/dist/mcp/mcp.controller.js +54 -0
  67. package/dist/mcp/mcp.controller.js.map +1 -0
  68. package/dist/mcp/mcp.module.d.ts +3 -0
  69. package/dist/mcp/mcp.module.d.ts.map +1 -0
  70. package/dist/mcp/mcp.module.js +49 -0
  71. package/dist/mcp/mcp.module.js.map +1 -0
  72. package/dist/mcp/tools/core-settings.mcp-tools.d.ts +12 -0
  73. package/dist/mcp/tools/core-settings.mcp-tools.d.ts.map +1 -0
  74. package/dist/mcp/tools/core-settings.mcp-tools.js +66 -0
  75. package/dist/mcp/tools/core-settings.mcp-tools.js.map +1 -0
  76. package/dist/mcp/tools/core-users.mcp-tools.d.ts +55 -0
  77. package/dist/mcp/tools/core-users.mcp-tools.d.ts.map +1 -0
  78. package/dist/mcp/tools/core-users.mcp-tools.js +295 -0
  79. package/dist/mcp/tools/core-users.mcp-tools.js.map +1 -0
  80. package/dist/mcp/types/mcp-context.type.d.ts +7 -0
  81. package/dist/mcp/types/mcp-context.type.d.ts.map +1 -0
  82. package/dist/mcp/types/mcp-context.type.js +3 -0
  83. package/dist/mcp/types/mcp-context.type.js.map +1 -0
  84. package/dist/mcp-chat/dto/create-conversation.dto.d.ts +4 -0
  85. package/dist/mcp-chat/dto/create-conversation.dto.d.ts.map +1 -0
  86. package/dist/mcp-chat/dto/create-conversation.dto.js +22 -0
  87. package/dist/mcp-chat/dto/create-conversation.dto.js.map +1 -0
  88. package/dist/mcp-chat/dto/send-message.dto.d.ts +4 -0
  89. package/dist/mcp-chat/dto/send-message.dto.d.ts.map +1 -0
  90. package/dist/mcp-chat/dto/send-message.dto.js +22 -0
  91. package/dist/mcp-chat/dto/send-message.dto.js.map +1 -0
  92. package/dist/mcp-chat/mcp-chat.controller.d.ts +55 -0
  93. package/dist/mcp-chat/mcp-chat.controller.d.ts.map +1 -0
  94. package/dist/mcp-chat/mcp-chat.controller.js +90 -0
  95. package/dist/mcp-chat/mcp-chat.controller.js.map +1 -0
  96. package/dist/mcp-chat/mcp-chat.module.d.ts +3 -0
  97. package/dist/mcp-chat/mcp-chat.module.d.ts.map +1 -0
  98. package/dist/mcp-chat/mcp-chat.module.js +30 -0
  99. package/dist/mcp-chat/mcp-chat.module.js.map +1 -0
  100. package/dist/mcp-chat/mcp-chat.service.d.ts +50 -0
  101. package/dist/mcp-chat/mcp-chat.service.d.ts.map +1 -0
  102. package/dist/mcp-chat/mcp-chat.service.js +290 -0
  103. package/dist/mcp-chat/mcp-chat.service.js.map +1 -0
  104. package/dist/menu/menu.controller.d.ts +8 -8
  105. package/dist/menu/menu.service.d.ts +8 -8
  106. package/dist/oauth/oauth.service.js +1 -1
  107. package/dist/oauth/oauth.service.js.map +1 -1
  108. package/dist/pdf/components/index.d.ts +57 -0
  109. package/dist/pdf/components/index.d.ts.map +1 -0
  110. package/dist/pdf/components/index.js +258 -0
  111. package/dist/pdf/components/index.js.map +1 -0
  112. package/dist/pdf/dto/generate-pdf.dto.d.ts +5 -0
  113. package/dist/pdf/dto/generate-pdf.dto.d.ts.map +1 -0
  114. package/dist/pdf/dto/generate-pdf.dto.js +27 -0
  115. package/dist/pdf/dto/generate-pdf.dto.js.map +1 -0
  116. package/dist/pdf/interfaces/pdf-theme-config.interface.d.ts +10 -0
  117. package/dist/pdf/interfaces/pdf-theme-config.interface.d.ts.map +1 -0
  118. package/dist/pdf/interfaces/pdf-theme-config.interface.js +3 -0
  119. package/dist/pdf/interfaces/pdf-theme-config.interface.js.map +1 -0
  120. package/dist/pdf/pdf.controller.d.ts +16 -0
  121. package/dist/pdf/pdf.controller.d.ts.map +1 -0
  122. package/dist/pdf/pdf.controller.js +100 -0
  123. package/dist/pdf/pdf.controller.js.map +1 -0
  124. package/dist/pdf/pdf.module.d.ts +3 -0
  125. package/dist/pdf/pdf.module.d.ts.map +1 -0
  126. package/dist/pdf/pdf.module.js +29 -0
  127. package/dist/pdf/pdf.module.js.map +1 -0
  128. package/dist/pdf/pdf.service.d.ts +44 -0
  129. package/dist/pdf/pdf.service.d.ts.map +1 -0
  130. package/dist/pdf/pdf.service.js +185 -0
  131. package/dist/pdf/pdf.service.js.map +1 -0
  132. package/dist/pdf/templates/hcode-institutional.template.d.ts +36 -0
  133. package/dist/pdf/templates/hcode-institutional.template.d.ts.map +1 -0
  134. package/dist/pdf/templates/hcode-institutional.template.js +67 -0
  135. package/dist/pdf/templates/hcode-institutional.template.js.map +1 -0
  136. package/dist/pdf/themes/hcode.theme.d.ts +25 -0
  137. package/dist/pdf/themes/hcode.theme.d.ts.map +1 -0
  138. package/dist/pdf/themes/hcode.theme.js +504 -0
  139. package/dist/pdf/themes/hcode.theme.js.map +1 -0
  140. package/dist/profile/profile.controller.d.ts +16 -16
  141. package/dist/profile/profile.service.d.ts +16 -16
  142. package/dist/role/role.controller.d.ts +12 -12
  143. package/dist/role/role.service.d.ts +12 -12
  144. package/dist/route/dto/create.dto.d.ts +6 -2
  145. package/dist/route/dto/create.dto.d.ts.map +1 -1
  146. package/dist/route/dto/create.dto.js +19 -1
  147. package/dist/route/dto/create.dto.js.map +1 -1
  148. package/dist/route/dto/update.dto.d.ts +4 -0
  149. package/dist/route/dto/update.dto.d.ts.map +1 -1
  150. package/dist/route/dto/update.dto.js +19 -3
  151. package/dist/route/dto/update.dto.js.map +1 -1
  152. package/dist/route/route.service.d.ts +1 -1
  153. package/dist/route/route.service.d.ts.map +1 -1
  154. package/dist/route/route.service.js +18 -11
  155. package/dist/route/route.service.js.map +1 -1
  156. package/dist/screen/screen.controller.d.ts +3 -3
  157. package/dist/screen/screen.service.d.ts +3 -3
  158. package/dist/session/session.controller.d.ts +4 -4
  159. package/dist/session/session.service.d.ts +12 -12
  160. package/dist/setting/setting.controller.d.ts +13 -13
  161. package/dist/setting/setting.service.d.ts +13 -13
  162. package/dist/user/user.controller.d.ts +24 -24
  163. package/dist/user/user.service.d.ts +55 -55
  164. package/hedhog/data/menu.yaml +40 -26
  165. package/hedhog/data/route.yaml +583 -152
  166. package/hedhog/data/setting_group.yaml +60 -0
  167. package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +574 -0
  168. package/hedhog/frontend/app/users/user-sheet.tsx.ejs +5 -9
  169. package/hedhog/frontend/messages/en.json +19 -0
  170. package/hedhog/frontend/messages/pt.json +19 -0
  171. package/hedhog/table/mcp_conversation.yaml +12 -0
  172. package/hedhog/table/mcp_conversation_message.yaml +23 -0
  173. package/hedhog/table/mcp_tool_call_log.yaml +22 -0
  174. package/hedhog/table/route.yaml +33 -22
  175. package/package.json +7 -6
  176. package/src/core.module.ts +18 -11
  177. package/src/index.ts +22 -12
  178. package/src/mcp/decorators/mcp-tool.decorator.ts +7 -0
  179. package/src/mcp/guards/mcp-auth.guard.ts +32 -0
  180. package/src/mcp/guards/mcp-permission.guard.ts +51 -0
  181. package/src/mcp/interfaces/mcp-tool-definition.interface.ts +6 -0
  182. package/src/mcp/mcp-audit.service.ts +36 -0
  183. package/src/mcp/mcp-registry.service.ts +69 -0
  184. package/src/mcp/mcp-server.service.ts +87 -0
  185. package/src/mcp/mcp.controller.ts +30 -0
  186. package/src/mcp/mcp.module.ts +36 -0
  187. package/src/mcp/tools/core-settings.mcp-tools.ts +53 -0
  188. package/src/mcp/tools/core-users.mcp-tools.ts +267 -0
  189. package/src/mcp/types/mcp-context.type.ts +6 -0
  190. package/src/mcp-chat/dto/create-conversation.dto.ts +7 -0
  191. package/src/mcp-chat/dto/send-message.dto.ts +7 -0
  192. package/src/mcp-chat/mcp-chat.controller.ts +60 -0
  193. package/src/mcp-chat/mcp-chat.module.ts +17 -0
  194. package/src/mcp-chat/mcp-chat.service.ts +332 -0
  195. package/src/oauth/oauth.service.ts +12 -12
  196. package/src/pdf/components/index.ts +316 -0
  197. package/src/pdf/dto/generate-pdf.dto.ts +11 -0
  198. package/src/pdf/interfaces/pdf-theme-config.interface.ts +10 -0
  199. package/src/pdf/pdf.controller.ts +86 -0
  200. package/src/pdf/pdf.module.ts +17 -0
  201. package/src/pdf/pdf.service.ts +229 -0
  202. package/src/pdf/templates/hcode-institutional.template.ts +122 -0
  203. package/src/pdf/themes/hcode.theme.ts +515 -0
  204. package/src/route/dto/create.dto.ts +32 -14
  205. package/src/route/dto/update.dto.ts +31 -16
  206. package/src/route/route.service.ts +23 -12
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-message.dto.d.ts","sourceRoot":"","sources":["../../../src/mcp-chat/dto/send-message.dto.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAc;IAGzB,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SendMessageDTO = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ class SendMessageDTO {
15
+ }
16
+ exports.SendMessageDTO = SendMessageDTO;
17
+ __decorate([
18
+ (0, class_validator_1.IsString)(),
19
+ (0, class_validator_1.IsNotEmpty)(),
20
+ __metadata("design:type", String)
21
+ ], SendMessageDTO.prototype, "message", void 0);
22
+ //# sourceMappingURL=send-message.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-message.dto.js","sourceRoot":"","sources":["../../../src/mcp-chat/dto/send-message.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAuD;AAEvD,MAAa,cAAc;CAI1B;AAJD,wCAIC;AADC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;+CACG"}
@@ -0,0 +1,55 @@
1
+ import { DeleteDTO } from '../dto/delete.dto';
2
+ import { CreateConversationDTO } from './dto/create-conversation.dto';
3
+ import { SendMessageDTO } from './dto/send-message.dto';
4
+ import { McpChatService } from './mcp-chat.service';
5
+ export declare class McpChatController {
6
+ private readonly service;
7
+ constructor(service: McpChatService);
8
+ listConversations({ id }: {
9
+ id: number;
10
+ }): Promise<{
11
+ created_at: Date;
12
+ id: number;
13
+ updated_at: Date;
14
+ title: string;
15
+ }[]>;
16
+ createConversation({ id }: {
17
+ id: number;
18
+ }, dto: CreateConversationDTO): Promise<{
19
+ created_at: Date;
20
+ id: number;
21
+ updated_at: Date;
22
+ user_id: number;
23
+ title: string | null;
24
+ }>;
25
+ deleteConversations({ id }: {
26
+ id: number;
27
+ }, dto: DeleteDTO): Promise<{
28
+ count: number;
29
+ }>;
30
+ getMessages({ id }: {
31
+ id: number;
32
+ }, conversationId: number): Promise<{
33
+ created_at: Date;
34
+ id: number;
35
+ updated_at: Date;
36
+ content: string;
37
+ role: import("@prisma/client").$Enums.mcp_conversation_message_role_422a6ea954_enum;
38
+ tool_name: string | null;
39
+ conversation_id: number;
40
+ tool_call_id: string | null;
41
+ }[]>;
42
+ sendMessage({ id }: {
43
+ id: number;
44
+ }, conversationId: number, dto: SendMessageDTO, locale: string): Promise<{
45
+ created_at: Date;
46
+ id: number;
47
+ updated_at: Date;
48
+ content: string;
49
+ role: import("@prisma/client").$Enums.mcp_conversation_message_role_422a6ea954_enum;
50
+ tool_name: string | null;
51
+ conversation_id: number;
52
+ tool_call_id: string | null;
53
+ }[]>;
54
+ }
55
+ //# sourceMappingURL=mcp-chat.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-chat.controller.d.ts","sourceRoot":"","sources":["../../src/mcp-chat/mcp-chat.controller.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qBAEa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAGpD,iBAAiB,CAAS,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;;;;;;IAKhD,kBAAkB,CACR,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EACtB,GAAG,EAAE,qBAAqB;;;;;;;IAMpC,mBAAmB,CACT,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EACtB,GAAG,EAAE,SAAS;;;IAMxB,WAAW,CACD,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EACH,cAAc,EAAE,MAAM;;;;;;;;;;IAMnD,WAAW,CACD,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EACH,cAAc,EAAE,MAAM,EACzC,GAAG,EAAE,cAAc,EACjB,MAAM,EAAE,MAAM;;;;;;;;;;CAI3B"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.McpChatController = void 0;
16
+ const api_1 = require("@hed-hog/api");
17
+ const api_locale_1 = require("@hed-hog/api-locale");
18
+ const common_1 = require("@nestjs/common");
19
+ const delete_dto_1 = require("../dto/delete.dto");
20
+ const create_conversation_dto_1 = require("./dto/create-conversation.dto");
21
+ const send_message_dto_1 = require("./dto/send-message.dto");
22
+ const mcp_chat_service_1 = require("./mcp-chat.service");
23
+ let McpChatController = class McpChatController {
24
+ constructor(service) {
25
+ this.service = service;
26
+ }
27
+ listConversations({ id }) {
28
+ return this.service.listConversations(id);
29
+ }
30
+ createConversation({ id }, dto) {
31
+ return this.service.createConversation(id, dto);
32
+ }
33
+ deleteConversations({ id }, dto) {
34
+ return this.service.deleteConversations(id, dto.ids);
35
+ }
36
+ getMessages({ id }, conversationId) {
37
+ return this.service.getMessages(conversationId, id);
38
+ }
39
+ sendMessage({ id }, conversationId, dto, locale) {
40
+ return this.service.sendMessage(conversationId, id, locale, dto.message);
41
+ }
42
+ };
43
+ exports.McpChatController = McpChatController;
44
+ __decorate([
45
+ (0, common_1.Get)(),
46
+ __param(0, (0, api_1.User)()),
47
+ __metadata("design:type", Function),
48
+ __metadata("design:paramtypes", [Object]),
49
+ __metadata("design:returntype", void 0)
50
+ ], McpChatController.prototype, "listConversations", null);
51
+ __decorate([
52
+ (0, common_1.Post)(),
53
+ __param(0, (0, api_1.User)()),
54
+ __param(1, (0, common_1.Body)()),
55
+ __metadata("design:type", Function),
56
+ __metadata("design:paramtypes", [Object, create_conversation_dto_1.CreateConversationDTO]),
57
+ __metadata("design:returntype", void 0)
58
+ ], McpChatController.prototype, "createConversation", null);
59
+ __decorate([
60
+ (0, common_1.Delete)(),
61
+ __param(0, (0, api_1.User)()),
62
+ __param(1, (0, common_1.Body)()),
63
+ __metadata("design:type", Function),
64
+ __metadata("design:paramtypes", [Object, delete_dto_1.DeleteDTO]),
65
+ __metadata("design:returntype", void 0)
66
+ ], McpChatController.prototype, "deleteConversations", null);
67
+ __decorate([
68
+ (0, common_1.Get)(':id/messages'),
69
+ __param(0, (0, api_1.User)()),
70
+ __param(1, (0, common_1.Param)('id', common_1.ParseIntPipe)),
71
+ __metadata("design:type", Function),
72
+ __metadata("design:paramtypes", [Object, Number]),
73
+ __metadata("design:returntype", void 0)
74
+ ], McpChatController.prototype, "getMessages", null);
75
+ __decorate([
76
+ (0, common_1.Post)(':id/messages'),
77
+ __param(0, (0, api_1.User)()),
78
+ __param(1, (0, common_1.Param)('id', common_1.ParseIntPipe)),
79
+ __param(2, (0, common_1.Body)()),
80
+ __param(3, (0, api_locale_1.Locale)()),
81
+ __metadata("design:type", Function),
82
+ __metadata("design:paramtypes", [Object, Number, send_message_dto_1.SendMessageDTO, String]),
83
+ __metadata("design:returntype", void 0)
84
+ ], McpChatController.prototype, "sendMessage", null);
85
+ exports.McpChatController = McpChatController = __decorate([
86
+ (0, api_1.Role)(),
87
+ (0, common_1.Controller)('mcp-chat'),
88
+ __metadata("design:paramtypes", [mcp_chat_service_1.McpChatService])
89
+ ], McpChatController);
90
+ //# sourceMappingURL=mcp-chat.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-chat.controller.js","sourceRoot":"","sources":["../../src/mcp-chat/mcp-chat.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,sCAA0C;AAC1C,oDAA6C;AAC7C,2CAQwB;AACxB,kDAA8C;AAC9C,2EAAsE;AACtE,6DAAwD;AACxD,yDAAoD;AAI7C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAGxD,iBAAiB,CAAS,EAAE,EAAE,EAAkB;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IAGD,kBAAkB,CACR,EAAE,EAAE,EAAkB,EACtB,GAA0B;QAElC,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IAGD,mBAAmB,CACT,EAAE,EAAE,EAAkB,EACtB,GAAc;QAEtB,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC;IAGD,WAAW,CACD,EAAE,EAAE,EAAkB,EACH,cAAsB;QAEjD,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IAGD,WAAW,CACD,EAAE,EAAE,EAAkB,EACH,cAAsB,EACzC,GAAmB,EACjB,MAAc;QAExB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3E,CAAC;CACF,CAAA;AAzCY,8CAAiB;AAI5B;IADC,IAAA,YAAG,GAAE;IACa,WAAA,IAAA,UAAI,GAAE,CAAA;;;;0DAExB;AAGD;IADC,IAAA,aAAI,GAAE;IAEJ,WAAA,IAAA,UAAI,GAAE,CAAA;IACN,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,+CAAqB;;2DAGnC;AAGD;IADC,IAAA,eAAM,GAAE;IAEN,WAAA,IAAA,UAAI,GAAE,CAAA;IACN,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,sBAAS;;4DAGvB;AAGD;IADC,IAAA,YAAG,EAAC,cAAc,CAAC;IAEjB,WAAA,IAAA,UAAI,GAAE,CAAA;IACN,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,qBAAY,CAAC,CAAA;;;;oDAG3B;AAGD;IADC,IAAA,aAAI,EAAC,cAAc,CAAC;IAElB,WAAA,IAAA,UAAI,GAAE,CAAA;IACN,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,qBAAY,CAAC,CAAA;IACzB,WAAA,IAAA,aAAI,GAAE,CAAA;IACN,WAAA,IAAA,mBAAM,GAAE,CAAA;;qDADI,iCAAc;;oDAI5B;4BAxCU,iBAAiB;IAF7B,IAAA,UAAI,GAAE;IACN,IAAA,mBAAU,EAAC,UAAU,CAAC;qCAEiB,iCAAc;GADzC,iBAAiB,CAyC7B"}
@@ -0,0 +1,3 @@
1
+ export declare class McpChatModule {
2
+ }
3
+ //# sourceMappingURL=mcp-chat.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-chat.module.d.ts","sourceRoot":"","sources":["../../src/mcp-chat/mcp-chat.module.ts"],"names":[],"mappings":"AAOA,qBASa,aAAa;CAAG"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.McpChatModule = void 0;
10
+ const api_prisma_1 = require("@hed-hog/api-prisma");
11
+ const common_1 = require("@nestjs/common");
12
+ const mcp_module_1 = require("../mcp/mcp.module");
13
+ const setting_module_1 = require("../setting/setting.module");
14
+ const mcp_chat_controller_1 = require("./mcp-chat.controller");
15
+ const mcp_chat_service_1 = require("./mcp-chat.service");
16
+ let McpChatModule = class McpChatModule {
17
+ };
18
+ exports.McpChatModule = McpChatModule;
19
+ exports.McpChatModule = McpChatModule = __decorate([
20
+ (0, common_1.Module)({
21
+ imports: [
22
+ (0, common_1.forwardRef)(() => api_prisma_1.PrismaModule),
23
+ (0, common_1.forwardRef)(() => setting_module_1.SettingModule),
24
+ (0, common_1.forwardRef)(() => mcp_module_1.McpModule),
25
+ ],
26
+ controllers: [mcp_chat_controller_1.McpChatController],
27
+ providers: [mcp_chat_service_1.McpChatService],
28
+ })
29
+ ], McpChatModule);
30
+ //# sourceMappingURL=mcp-chat.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-chat.module.js","sourceRoot":"","sources":["../../src/mcp-chat/mcp-chat.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAmD;AACnD,2CAAoD;AACpD,kDAA8C;AAC9C,8DAA0D;AAC1D,+DAA0D;AAC1D,yDAAoD;AAW7C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IATzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,8BAAa,CAAC;YAC/B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,sBAAS,CAAC;SAC5B;QACD,WAAW,EAAE,CAAC,uCAAiB,CAAC;QAChC,SAAS,EAAE,CAAC,iCAAc,CAAC;KAC5B,CAAC;GACW,aAAa,CAAG"}
@@ -0,0 +1,50 @@
1
+ import { PrismaService } from '@hed-hog/api-prisma';
2
+ import { SettingService } from '../setting/setting.service';
3
+ import { McpRegistryService } from '../mcp/mcp-registry.service';
4
+ import { CreateConversationDTO } from './dto/create-conversation.dto';
5
+ export declare class McpChatService {
6
+ private readonly prisma;
7
+ private readonly setting;
8
+ private readonly registry;
9
+ constructor(prisma: PrismaService, setting: SettingService, registry: McpRegistryService);
10
+ listConversations(userId: number): Promise<{
11
+ created_at: Date;
12
+ id: number;
13
+ updated_at: Date;
14
+ title: string;
15
+ }[]>;
16
+ createConversation(userId: number, dto: CreateConversationDTO): Promise<{
17
+ created_at: Date;
18
+ id: number;
19
+ updated_at: Date;
20
+ user_id: number;
21
+ title: string | null;
22
+ }>;
23
+ deleteConversations(userId: number, ids: number[]): Promise<{
24
+ count: number;
25
+ }>;
26
+ getMessages(conversationId: number, userId: number): Promise<{
27
+ created_at: Date;
28
+ id: number;
29
+ updated_at: Date;
30
+ content: string;
31
+ role: import("@prisma/client").$Enums.mcp_conversation_message_role_422a6ea954_enum;
32
+ tool_name: string | null;
33
+ conversation_id: number;
34
+ tool_call_id: string | null;
35
+ }[]>;
36
+ sendMessage(conversationId: number, userId: number, locale: string, message: string): Promise<{
37
+ created_at: Date;
38
+ id: number;
39
+ updated_at: Date;
40
+ content: string;
41
+ role: import("@prisma/client").$Enums.mcp_conversation_message_role_422a6ea954_enum;
42
+ tool_name: string | null;
43
+ conversation_id: number;
44
+ tool_call_id: string | null;
45
+ }[]>;
46
+ private toOpenAiMessages;
47
+ private assertOwnership;
48
+ private getOpenAiKey;
49
+ }
50
+ //# sourceMappingURL=mcp-chat.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-chat.service.d.ts","sourceRoot":"","sources":["../../src/mcp-chat/mcp-chat.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAYpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAsBtE,qBACa,cAAc;IAGvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAJR,MAAM,EAAE,aAAa,EAErB,OAAO,EAAE,cAAc,EAEvB,QAAQ,EAAE,kBAAkB;IAGzC,iBAAiB,CAAC,MAAM,EAAE,MAAM;;;;;;IAQhC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB;;;;;;;IAS7D,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;;;IAOjD,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;IAQlD,WAAW,CACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM;;;;;;;;;;IAsLjB,OAAO,CAAC,gBAAgB;YA0CV,eAAe;YAaf,YAAY;CAU3B"}
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.McpChatService = void 0;
19
+ const api_prisma_1 = require("@hed-hog/api-prisma");
20
+ const common_1 = require("@nestjs/common");
21
+ const axios_1 = __importDefault(require("axios"));
22
+ const setting_service_1 = require("../setting/setting.service");
23
+ const mcp_registry_service_1 = require("../mcp/mcp-registry.service");
24
+ const SYSTEM_PROMPT = 'You are a helpful assistant with access to tools from the HedHog system. ' +
25
+ 'Use the available tools to answer the user\'s questions accurately. ' +
26
+ 'Always respond in the same language the user writes in.';
27
+ const sanitize = (n) => n.replace(/\./g, '__');
28
+ const restore = (n) => n.replace(/__/g, '.');
29
+ let McpChatService = class McpChatService {
30
+ constructor(prisma, setting, registry) {
31
+ this.prisma = prisma;
32
+ this.setting = setting;
33
+ this.registry = registry;
34
+ }
35
+ async listConversations(userId) {
36
+ return this.prisma.mcp_conversation.findMany({
37
+ where: { user_id: userId },
38
+ orderBy: { created_at: 'desc' },
39
+ select: { id: true, title: true, created_at: true, updated_at: true },
40
+ });
41
+ }
42
+ async createConversation(userId, dto) {
43
+ var _a;
44
+ return this.prisma.mcp_conversation.create({
45
+ data: {
46
+ user_id: userId,
47
+ title: (_a = dto.title) !== null && _a !== void 0 ? _a : null,
48
+ },
49
+ });
50
+ }
51
+ async deleteConversations(userId, ids) {
52
+ await this.prisma.mcp_conversation.deleteMany({
53
+ where: { id: { in: ids }, user_id: userId },
54
+ });
55
+ return { count: ids.length };
56
+ }
57
+ async getMessages(conversationId, userId) {
58
+ await this.assertOwnership(conversationId, userId);
59
+ return this.prisma.mcp_conversation_message.findMany({
60
+ where: { conversation_id: conversationId },
61
+ orderBy: { created_at: 'asc' },
62
+ });
63
+ }
64
+ async sendMessage(conversationId, userId, locale, message) {
65
+ var _a, _b, _c, _d, _e, _f, _g, _h;
66
+ await this.assertOwnership(conversationId, userId);
67
+ const apiKey = await this.getOpenAiKey();
68
+ // Save user message
69
+ await this.prisma.mcp_conversation_message.create({
70
+ data: {
71
+ conversation_id: conversationId,
72
+ role: 'user',
73
+ content: message,
74
+ },
75
+ });
76
+ // Auto-set title on first message
77
+ const conv = await this.prisma.mcp_conversation.findUnique({
78
+ where: { id: conversationId },
79
+ });
80
+ if (!conv.title) {
81
+ await this.prisma.mcp_conversation.update({
82
+ where: { id: conversationId },
83
+ data: { title: message.slice(0, 60) },
84
+ });
85
+ }
86
+ // Build OpenAI messages from history
87
+ const history = await this.prisma.mcp_conversation_message.findMany({
88
+ where: { conversation_id: conversationId },
89
+ orderBy: { created_at: 'asc' },
90
+ });
91
+ const openAiMessages = [
92
+ { role: 'system', content: SYSTEM_PROMPT },
93
+ ...this.toOpenAiMessages(history),
94
+ ];
95
+ // Build tool definitions
96
+ const tools = this.registry.getAll().map((entry) => {
97
+ var _a;
98
+ return ({
99
+ type: 'function',
100
+ function: {
101
+ name: sanitize(entry.definition.name),
102
+ description: entry.definition.description,
103
+ parameters: (_a = entry.definition.inputSchema) !== null && _a !== void 0 ? _a : {
104
+ type: 'object',
105
+ properties: {},
106
+ },
107
+ },
108
+ });
109
+ });
110
+ // Tool-calling loop
111
+ let maxIterations = 10;
112
+ while (maxIterations-- > 0) {
113
+ let response;
114
+ try {
115
+ response = await axios_1.default.post('https://api.openai.com/v1/chat/completions', {
116
+ model: 'gpt-4o-mini',
117
+ messages: openAiMessages,
118
+ tools: tools.length > 0 ? tools : undefined,
119
+ tool_choice: tools.length > 0 ? 'auto' : undefined,
120
+ }, {
121
+ headers: {
122
+ Authorization: `Bearer ${apiKey}`,
123
+ 'Content-Type': 'application/json',
124
+ },
125
+ });
126
+ }
127
+ catch (err) {
128
+ const status = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status;
129
+ const errBody = (_c = (_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.error;
130
+ if (status === 429) {
131
+ throw new common_1.HttpException((_d = errBody === null || errBody === void 0 ? void 0 : errBody.message) !== null && _d !== void 0 ? _d : 'OpenAI rate limit exceeded. Please try again later.', common_1.HttpStatus.TOO_MANY_REQUESTS);
132
+ }
133
+ if (status === 401) {
134
+ throw new common_1.BadRequestException('Invalid OpenAI API key.');
135
+ }
136
+ throw new common_1.HttpException((_e = errBody === null || errBody === void 0 ? void 0 : errBody.message) !== null && _e !== void 0 ? _e : 'OpenAI API error.', status !== null && status !== void 0 ? status : common_1.HttpStatus.BAD_GATEWAY);
137
+ }
138
+ const choice = (_g = (_f = response.data) === null || _f === void 0 ? void 0 : _f.choices) === null || _g === void 0 ? void 0 : _g[0];
139
+ const assistantMsg = choice === null || choice === void 0 ? void 0 : choice.message;
140
+ if ((_h = assistantMsg === null || assistantMsg === void 0 ? void 0 : assistantMsg.tool_calls) === null || _h === void 0 ? void 0 : _h.length) {
141
+ // Add assistant tool-call message to context
142
+ openAiMessages.push({
143
+ role: 'assistant',
144
+ content: null,
145
+ tool_calls: assistantMsg.tool_calls,
146
+ });
147
+ // Execute each tool call
148
+ for (const toolCall of assistantMsg.tool_calls) {
149
+ const originalName = restore(toolCall.function.name);
150
+ const argsJson = toolCall.function.arguments;
151
+ let args = {};
152
+ try {
153
+ args = JSON.parse(argsJson);
154
+ }
155
+ catch (_j) {
156
+ args = {};
157
+ }
158
+ // Persist tool_call message
159
+ await this.prisma.mcp_conversation_message.create({
160
+ data: {
161
+ conversation_id: conversationId,
162
+ role: 'tool_call',
163
+ content: argsJson,
164
+ tool_name: originalName,
165
+ tool_call_id: toolCall.id,
166
+ },
167
+ });
168
+ // Execute the tool
169
+ let resultContent;
170
+ const entry = this.registry.get(originalName);
171
+ if (entry) {
172
+ const context = {
173
+ userId,
174
+ sessionId: '',
175
+ locale,
176
+ toolName: originalName,
177
+ };
178
+ try {
179
+ const result = await entry.handler(args, context);
180
+ resultContent = JSON.stringify(result);
181
+ }
182
+ catch (e) {
183
+ resultContent = JSON.stringify({ error: e.message });
184
+ }
185
+ }
186
+ else {
187
+ resultContent = JSON.stringify({ error: `Tool '${originalName}' not found` });
188
+ }
189
+ // Persist tool_result message
190
+ await this.prisma.mcp_conversation_message.create({
191
+ data: {
192
+ conversation_id: conversationId,
193
+ role: 'tool_result',
194
+ content: resultContent,
195
+ tool_name: originalName,
196
+ tool_call_id: toolCall.id,
197
+ },
198
+ });
199
+ // Add tool result to context for next iteration
200
+ openAiMessages.push({
201
+ role: 'tool',
202
+ tool_call_id: toolCall.id,
203
+ content: resultContent,
204
+ });
205
+ }
206
+ continue; // next iteration with tool results
207
+ }
208
+ // Final assistant response
209
+ const finalContent = (assistantMsg === null || assistantMsg === void 0 ? void 0 : assistantMsg.content) || '';
210
+ await this.prisma.mcp_conversation_message.create({
211
+ data: {
212
+ conversation_id: conversationId,
213
+ role: 'assistant',
214
+ content: finalContent,
215
+ },
216
+ });
217
+ return this.prisma.mcp_conversation_message.findMany({
218
+ where: { conversation_id: conversationId },
219
+ orderBy: { created_at: 'asc' },
220
+ });
221
+ }
222
+ throw new common_1.BadRequestException('Maximum tool call iterations exceeded.');
223
+ }
224
+ toOpenAiMessages(history) {
225
+ const messages = [];
226
+ const toolCallMap = new Map(); // tool_call_id → sanitized name
227
+ for (const msg of history) {
228
+ if (msg.role === 'user') {
229
+ messages.push({ role: 'user', content: msg.content });
230
+ }
231
+ else if (msg.role === 'assistant') {
232
+ messages.push({ role: 'assistant', content: msg.content });
233
+ }
234
+ else if (msg.role === 'tool_call' && msg.tool_call_id && msg.tool_name) {
235
+ const sanitizedName = sanitize(msg.tool_name);
236
+ toolCallMap.set(msg.tool_call_id, sanitizedName);
237
+ messages.push({
238
+ role: 'assistant',
239
+ content: null,
240
+ tool_calls: [
241
+ {
242
+ id: msg.tool_call_id,
243
+ type: 'function',
244
+ function: { name: sanitizedName, arguments: msg.content },
245
+ },
246
+ ],
247
+ });
248
+ }
249
+ else if (msg.role === 'tool_result' && msg.tool_call_id) {
250
+ messages.push({
251
+ role: 'tool',
252
+ tool_call_id: msg.tool_call_id,
253
+ content: msg.content,
254
+ });
255
+ }
256
+ }
257
+ return messages;
258
+ }
259
+ async assertOwnership(conversationId, userId) {
260
+ const conv = await this.prisma.mcp_conversation.findUnique({
261
+ where: { id: conversationId },
262
+ select: { user_id: true },
263
+ });
264
+ if (!conv) {
265
+ throw new common_1.NotFoundException(`Conversation ${conversationId} not found.`);
266
+ }
267
+ if (conv.user_id !== userId) {
268
+ throw new common_1.ForbiddenException('Access denied to this conversation.');
269
+ }
270
+ }
271
+ async getOpenAiKey() {
272
+ const settings = await this.setting.getSettingValues(['ai-openai-api-key']);
273
+ const key = settings['ai-openai-api-key'];
274
+ if (!key) {
275
+ throw new common_1.BadRequestException('OpenAI API key is not configured (setting "ai-openai-api-key").');
276
+ }
277
+ return key;
278
+ }
279
+ };
280
+ exports.McpChatService = McpChatService;
281
+ exports.McpChatService = McpChatService = __decorate([
282
+ (0, common_1.Injectable)(),
283
+ __param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => api_prisma_1.PrismaService))),
284
+ __param(1, (0, common_1.Inject)((0, common_1.forwardRef)(() => setting_service_1.SettingService))),
285
+ __param(2, (0, common_1.Inject)((0, common_1.forwardRef)(() => mcp_registry_service_1.McpRegistryService))),
286
+ __metadata("design:paramtypes", [api_prisma_1.PrismaService,
287
+ setting_service_1.SettingService,
288
+ mcp_registry_service_1.McpRegistryService])
289
+ ], McpChatService);
290
+ //# sourceMappingURL=mcp-chat.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-chat.service.js","sourceRoot":"","sources":["../../src/mcp-chat/mcp-chat.service.ts"],"names":[],"mappings":"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"}
@@ -41,41 +41,41 @@ export declare class MenuController {
41
41
  code: string;
42
42
  };
43
43
  } & {
44
- name: string;
45
- id: number;
46
44
  created_at: Date;
45
+ id: number;
47
46
  updated_at: Date;
47
+ name: string;
48
48
  locale_id: number;
49
49
  menu_id: number;
50
50
  })[];
51
51
  } & {
52
- id: number;
53
- order: number;
54
52
  created_at: Date;
53
+ id: number;
55
54
  updated_at: Date;
56
55
  slug: string;
57
56
  icon: string;
57
+ order: number;
58
58
  url: string | null;
59
59
  menu_id: number | null;
60
60
  }>;
61
61
  create(locale: any, data: CreateDTO): Promise<{
62
- id: number;
63
- order: number;
64
62
  created_at: Date;
63
+ id: number;
65
64
  updated_at: Date;
66
65
  slug: string;
67
66
  icon: string;
67
+ order: number;
68
68
  url: string | null;
69
69
  menu_id: number | null;
70
70
  }>;
71
71
  updateOrder(locale: any, data: OrderDTO): Promise<void>;
72
72
  update(locale: any, menuId: number, data: UpdateDTO): Promise<{
73
- id: number;
74
- order: number;
75
73
  created_at: Date;
74
+ id: number;
76
75
  updated_at: Date;
77
76
  slug: string;
78
77
  icon: string;
78
+ order: number;
79
79
  url: string | null;
80
80
  menu_id: number | null;
81
81
  }>;