@vezlo/assistant-server 1.0.0

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 (113) hide show
  1. package/Dockerfile +64 -0
  2. package/LICENSE +661 -0
  3. package/README.md +432 -0
  4. package/bin/vezlo-server.js +36 -0
  5. package/database-schema.sql +154 -0
  6. package/dist/knexfile.d.ts +6 -0
  7. package/dist/knexfile.d.ts.map +1 -0
  8. package/dist/knexfile.js +85 -0
  9. package/dist/knexfile.js.map +1 -0
  10. package/dist/src/config/database.d.ts +4 -0
  11. package/dist/src/config/database.d.ts.map +1 -0
  12. package/dist/src/config/database.js +30 -0
  13. package/dist/src/config/database.js.map +1 -0
  14. package/dist/src/config/global.d.ts +65 -0
  15. package/dist/src/config/global.d.ts.map +1 -0
  16. package/dist/src/config/global.js +113 -0
  17. package/dist/src/config/global.js.map +1 -0
  18. package/dist/src/config/knex.d.ts +9 -0
  19. package/dist/src/config/knex.d.ts.map +1 -0
  20. package/dist/src/config/knex.js +67 -0
  21. package/dist/src/config/knex.js.map +1 -0
  22. package/dist/src/config/logger.d.ts +4 -0
  23. package/dist/src/config/logger.d.ts.map +1 -0
  24. package/dist/src/config/logger.js +30 -0
  25. package/dist/src/config/logger.js.map +1 -0
  26. package/dist/src/config/swagger.d.ts +18 -0
  27. package/dist/src/config/swagger.d.ts.map +1 -0
  28. package/dist/src/config/swagger.js +230 -0
  29. package/dist/src/config/swagger.js.map +1 -0
  30. package/dist/src/controllers/ChatController.d.ts +16 -0
  31. package/dist/src/controllers/ChatController.d.ts.map +1 -0
  32. package/dist/src/controllers/ChatController.js +281 -0
  33. package/dist/src/controllers/ChatController.js.map +1 -0
  34. package/dist/src/controllers/KnowledgeController.d.ts +13 -0
  35. package/dist/src/controllers/KnowledgeController.d.ts.map +1 -0
  36. package/dist/src/controllers/KnowledgeController.js +210 -0
  37. package/dist/src/controllers/KnowledgeController.js.map +1 -0
  38. package/dist/src/middleware/errorHandler.d.ts +63 -0
  39. package/dist/src/middleware/errorHandler.d.ts.map +1 -0
  40. package/dist/src/middleware/errorHandler.js +226 -0
  41. package/dist/src/middleware/errorHandler.js.map +1 -0
  42. package/dist/src/migrations/001_initial_schema.d.ts +4 -0
  43. package/dist/src/migrations/001_initial_schema.d.ts.map +1 -0
  44. package/dist/src/migrations/001_initial_schema.js +144 -0
  45. package/dist/src/migrations/001_initial_schema.js.map +1 -0
  46. package/dist/src/schemas/ConversationSchemas.d.ts +132 -0
  47. package/dist/src/schemas/ConversationSchemas.d.ts.map +1 -0
  48. package/dist/src/schemas/ConversationSchemas.js +71 -0
  49. package/dist/src/schemas/ConversationSchemas.js.map +1 -0
  50. package/dist/src/schemas/FeedbackSchemas.d.ts +222 -0
  51. package/dist/src/schemas/FeedbackSchemas.d.ts.map +1 -0
  52. package/dist/src/schemas/FeedbackSchemas.js +116 -0
  53. package/dist/src/schemas/FeedbackSchemas.js.map +1 -0
  54. package/dist/src/schemas/KnowledgeSchemas.d.ts +266 -0
  55. package/dist/src/schemas/KnowledgeSchemas.d.ts.map +1 -0
  56. package/dist/src/schemas/KnowledgeSchemas.js +115 -0
  57. package/dist/src/schemas/KnowledgeSchemas.js.map +1 -0
  58. package/dist/src/schemas/MessageSchemas.d.ts +145 -0
  59. package/dist/src/schemas/MessageSchemas.d.ts.map +1 -0
  60. package/dist/src/schemas/MessageSchemas.js +79 -0
  61. package/dist/src/schemas/MessageSchemas.js.map +1 -0
  62. package/dist/src/schemas/index.d.ts +752 -0
  63. package/dist/src/schemas/index.d.ts.map +1 -0
  64. package/dist/src/schemas/index.js +31 -0
  65. package/dist/src/schemas/index.js.map +1 -0
  66. package/dist/src/server.d.ts +2 -0
  67. package/dist/src/server.d.ts.map +1 -0
  68. package/dist/src/server.js +609 -0
  69. package/dist/src/server.js.map +1 -0
  70. package/dist/src/services/AIService.d.ts +17 -0
  71. package/dist/src/services/AIService.d.ts.map +1 -0
  72. package/dist/src/services/AIService.js +174 -0
  73. package/dist/src/services/AIService.js.map +1 -0
  74. package/dist/src/services/ChatManager.d.ts +18 -0
  75. package/dist/src/services/ChatManager.d.ts.map +1 -0
  76. package/dist/src/services/ChatManager.js +174 -0
  77. package/dist/src/services/ChatManager.js.map +1 -0
  78. package/dist/src/services/KnowledgeBaseService.d.ts +72 -0
  79. package/dist/src/services/KnowledgeBaseService.d.ts.map +1 -0
  80. package/dist/src/services/KnowledgeBaseService.js +442 -0
  81. package/dist/src/services/KnowledgeBaseService.js.map +1 -0
  82. package/dist/src/storage/ConversationRepository.d.ts +15 -0
  83. package/dist/src/storage/ConversationRepository.d.ts.map +1 -0
  84. package/dist/src/storage/ConversationRepository.js +123 -0
  85. package/dist/src/storage/ConversationRepository.js.map +1 -0
  86. package/dist/src/storage/FeedbackRepository.d.ts +15 -0
  87. package/dist/src/storage/FeedbackRepository.d.ts.map +1 -0
  88. package/dist/src/storage/FeedbackRepository.js +141 -0
  89. package/dist/src/storage/FeedbackRepository.js.map +1 -0
  90. package/dist/src/storage/MessageRepository.d.ts +13 -0
  91. package/dist/src/storage/MessageRepository.d.ts.map +1 -0
  92. package/dist/src/storage/MessageRepository.js +165 -0
  93. package/dist/src/storage/MessageRepository.js.map +1 -0
  94. package/dist/src/storage/SupabaseStorage.d.ts +20 -0
  95. package/dist/src/storage/SupabaseStorage.d.ts.map +1 -0
  96. package/dist/src/storage/SupabaseStorage.js +347 -0
  97. package/dist/src/storage/SupabaseStorage.js.map +1 -0
  98. package/dist/src/storage/UnifiedStorage.d.ts +45 -0
  99. package/dist/src/storage/UnifiedStorage.d.ts.map +1 -0
  100. package/dist/src/storage/UnifiedStorage.js +94 -0
  101. package/dist/src/storage/UnifiedStorage.js.map +1 -0
  102. package/dist/src/storage/index.d.ts +11 -0
  103. package/dist/src/storage/index.d.ts.map +1 -0
  104. package/dist/src/storage/index.js +21 -0
  105. package/dist/src/storage/index.js.map +1 -0
  106. package/dist/src/types/index.d.ts +163 -0
  107. package/dist/src/types/index.d.ts.map +1 -0
  108. package/dist/src/types/index.js +3 -0
  109. package/dist/src/types/index.js.map +1 -0
  110. package/docker-compose.yml +32 -0
  111. package/env.example +46 -0
  112. package/knexfile.ts +86 -0
  113. package/package.json +92 -0
@@ -0,0 +1,17 @@
1
+ import { AIServiceConfig, ChatContext, AIResponse } from '../types';
2
+ import { KnowledgeBaseService } from './KnowledgeBaseService';
3
+ export declare class AIService {
4
+ private openai;
5
+ private systemPrompt;
6
+ private config;
7
+ private navigationLinks;
8
+ private knowledgeBase;
9
+ private knowledgeBaseService?;
10
+ constructor(config: AIServiceConfig);
11
+ setKnowledgeBaseService(service: KnowledgeBaseService): void;
12
+ private buildSystemPrompt;
13
+ generateResponse(message: string, context?: ChatContext): Promise<AIResponse>;
14
+ private detectFeedback;
15
+ private findRelevantLinks;
16
+ }
17
+ //# sourceMappingURL=AIService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AIService.d.ts","sourceRoot":"","sources":["../../../src/services/AIService.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,WAAW,EACX,UAAU,EAIX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,oBAAoB,CAAC,CAAuB;gBAExC,MAAM,EAAE,eAAe;IAenC,uBAAuB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAK5D,OAAO,CAAC,iBAAiB;IA2DnB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;YA+DrE,cAAc;IA8B5B,OAAO,CAAC,iBAAiB;CAsB1B"}
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AIService = void 0;
7
+ const openai_1 = __importDefault(require("openai"));
8
+ class AIService {
9
+ constructor(config) {
10
+ this.config = config;
11
+ this.openai = new openai_1.default({
12
+ apiKey: config.openaiApiKey,
13
+ });
14
+ this.navigationLinks = config.navigationLinks || [];
15
+ this.knowledgeBase = config.knowledgeBase || '';
16
+ if (config.knowledgeBaseService) {
17
+ this.knowledgeBaseService = config.knowledgeBaseService;
18
+ }
19
+ this.systemPrompt = this.buildSystemPrompt();
20
+ }
21
+ setKnowledgeBaseService(service) {
22
+ this.knowledgeBaseService = service;
23
+ this.systemPrompt = this.buildSystemPrompt();
24
+ }
25
+ buildSystemPrompt() {
26
+ const orgName = this.config.organizationName || 'Vezlo';
27
+ const assistantName = this.config.assistantName || `${orgName} Assistant`;
28
+ let prompt = `You are ${assistantName}, an AI-powered help bot for the ${orgName} platform.
29
+
30
+ ${this.config.platformDescription || `${orgName} is a comprehensive AI assistant platform that helps businesses with their operations.`}
31
+
32
+ ## Your Capabilities:
33
+ 1. Answer questions about ${orgName}'s features and functionality
34
+ 2. Search the user's database in real-time when configured
35
+ 3. Provide step-by-step guidance on how to use features
36
+ 4. Navigate users to appropriate pages
37
+ 5. Identify and classify user feedback as bug reports or feature requests
38
+
39
+ ## Platform Knowledge Base:
40
+ ${this.knowledgeBase}
41
+ `;
42
+ if (this.navigationLinks.length > 0) {
43
+ prompt += '\n## Navigation & Links:\n';
44
+ this.navigationLinks.forEach(link => {
45
+ prompt += `- ${link.label}: [${link.description || link.label}](${link.path})`;
46
+ if (link.keywords) {
47
+ prompt += ` (Keywords: ${link.keywords.join(', ')})`;
48
+ }
49
+ prompt += '\n';
50
+ });
51
+ }
52
+ if (this.config.existingFeatures && this.config.existingFeatures.length > 0) {
53
+ prompt += '\n## Key Features That EXIST:\n';
54
+ this.config.existingFeatures.forEach(feature => {
55
+ prompt += `- ${feature}\n`;
56
+ });
57
+ }
58
+ if (this.config.missingFeatures && this.config.missingFeatures.length > 0) {
59
+ prompt += '\n## Features That DON\'T Exist:\n';
60
+ this.config.missingFeatures.forEach(feature => {
61
+ prompt += `- ${feature} - NOT AVAILABLE\n`;
62
+ });
63
+ }
64
+ prompt += `
65
+ ## Important Guidelines:
66
+ 1. Be professional, helpful, and guide users towards successful use of ${orgName}
67
+ 2. Always provide direct clickable links using markdown format [text](path) for features that exist
68
+ 3. If a feature doesn't exist, be honest and transparent
69
+ 4. For support issues, direct users to: ${this.config.supportEmail || 'support@vezlo.ai'}
70
+ `;
71
+ if (this.config.customInstructions) {
72
+ prompt += `\n## Custom Instructions:\n${this.config.customInstructions}\n`;
73
+ }
74
+ return prompt;
75
+ }
76
+ async generateResponse(message, context) {
77
+ try {
78
+ let knowledgeResults = '';
79
+ if (this.knowledgeBaseService) {
80
+ const searchResults = await this.knowledgeBaseService.search(message, {
81
+ limit: 3,
82
+ type: 'hybrid'
83
+ });
84
+ if (searchResults.length > 0) {
85
+ knowledgeResults = '\n\nRelevant information from knowledge base:\n';
86
+ searchResults.forEach(result => {
87
+ knowledgeResults += `- ${result.title}: ${result.content}\n`;
88
+ });
89
+ }
90
+ }
91
+ const messages = [
92
+ {
93
+ role: 'system',
94
+ content: this.systemPrompt + knowledgeResults
95
+ }
96
+ ];
97
+ if (context?.conversationHistory) {
98
+ messages.push(...context.conversationHistory.map(msg => ({
99
+ role: msg.role,
100
+ content: msg.content
101
+ })));
102
+ }
103
+ messages.push({
104
+ role: 'user',
105
+ content: message
106
+ });
107
+ const completion = await this.openai.chat.completions.create({
108
+ model: this.config.model || 'gpt-4',
109
+ messages,
110
+ temperature: this.config.temperature || 0.7,
111
+ max_tokens: this.config.maxTokens || 1000,
112
+ });
113
+ const response = completion.choices[0]?.message?.content || 'I apologize, but I was unable to generate a response.';
114
+ const feedbackDetection = this.config.enableFeedbackDetection ?
115
+ await this.detectFeedback(message) : null;
116
+ const suggestedLinks = this.findRelevantLinks(message);
117
+ return {
118
+ content: response,
119
+ toolResults: [],
120
+ feedbackDetection,
121
+ suggestedLinks
122
+ };
123
+ }
124
+ catch (error) {
125
+ console.error('AI Service Error:', error);
126
+ throw new Error('Failed to generate AI response');
127
+ }
128
+ }
129
+ async detectFeedback(message) {
130
+ try {
131
+ const feedbackPrompt = `Analyze this user message and determine if it contains feedback. Classify it as:
132
+ - bug_report: User reporting a problem or error
133
+ - feature_request: User asking for new functionality
134
+ - general_feedback: User providing opinions or suggestions
135
+ - not_feedback: Regular question or conversation
136
+
137
+ Message: "${message}"
138
+
139
+ Respond with JSON: {"type": "...", "confidence": 0-1, "keyPoints": ["..."], "suggestedAction": "..."}`;
140
+ const completion = await this.openai.chat.completions.create({
141
+ model: 'gpt-3.5-turbo',
142
+ messages: [{ role: 'user', content: feedbackPrompt }],
143
+ temperature: 0.1,
144
+ max_tokens: 200,
145
+ });
146
+ const response = completion.choices[0]?.message?.content;
147
+ if (response) {
148
+ return JSON.parse(response);
149
+ }
150
+ }
151
+ catch (error) {
152
+ console.error('Feedback detection error:', error);
153
+ }
154
+ return null;
155
+ }
156
+ findRelevantLinks(message) {
157
+ const relevantLinks = [];
158
+ const messageLower = message.toLowerCase();
159
+ this.navigationLinks.forEach(link => {
160
+ const linkKeywords = [
161
+ link.label.toLowerCase(),
162
+ ...(link.keywords || []).map(k => k.toLowerCase()),
163
+ link.description?.toLowerCase() || ''
164
+ ];
165
+ const isRelevant = linkKeywords.some(keyword => keyword && messageLower.includes(keyword));
166
+ if (isRelevant) {
167
+ relevantLinks.push(link);
168
+ }
169
+ });
170
+ return relevantLinks.slice(0, 3);
171
+ }
172
+ }
173
+ exports.AIService = AIService;
174
+ //# sourceMappingURL=AIService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AIService.js","sourceRoot":"","sources":["../../../src/services/AIService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { ChatManagerConfig, ChatConversation, ChatContext, AIResponse, ChatMessage } from '../types';
2
+ export declare class ChatManager {
3
+ private aiService;
4
+ private config;
5
+ private activeConversations;
6
+ constructor(config: ChatManagerConfig);
7
+ createConversation(userId: string, organizationId?: string, title?: string): Promise<ChatConversation>;
8
+ getConversation(threadId: string): Promise<ChatConversation | null>;
9
+ sendMessage(message: string, threadId?: string, context?: ChatContext): Promise<AIResponse & {
10
+ conversationId?: string;
11
+ messageId?: string;
12
+ }>;
13
+ getRecentMessages(threadId: string, limit?: number): Promise<ChatMessage[]>;
14
+ getUserConversations(userId: string, organizationId?: string): Promise<ChatConversation[]>;
15
+ deleteConversation(conversationId: string): Promise<boolean>;
16
+ private cleanupExpiredConversations;
17
+ }
18
+ //# sourceMappingURL=ChatManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatManager.d.ts","sourceRoot":"","sources":["../../../src/services/ChatManager.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAEhB,WAAW,EACX,UAAU,EACV,WAAW,EACZ,MAAM,UAAU,CAAC;AAGlB,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,mBAAmB,CAAgC;gBAE/C,MAAM,EAAE,iBAAiB;IAU/B,kBAAkB,CACtB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,MAAM,EACvB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC;IAqBtB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAanE,WAAW,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,UAAU,GAAG;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAsFlE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAmBvE,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAa1F,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuBlE,OAAO,CAAC,2BAA2B;CAUpC"}
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChatManager = void 0;
4
+ const uuid_1 = require("uuid");
5
+ class ChatManager {
6
+ constructor(config) {
7
+ this.config = config;
8
+ this.aiService = config.aiService;
9
+ this.activeConversations = new Map();
10
+ if (config.conversationTimeout) {
11
+ setInterval(() => this.cleanupExpiredConversations(), 60000);
12
+ }
13
+ }
14
+ async createConversation(userId, organizationId, title) {
15
+ const threadId = (0, uuid_1.v4)();
16
+ const conversation = {
17
+ threadId,
18
+ userId,
19
+ organizationId,
20
+ title: title || 'New Conversation',
21
+ messageCount: 0,
22
+ createdAt: new Date(),
23
+ updatedAt: new Date()
24
+ };
25
+ if (this.config.storage && this.config.enableConversationManagement) {
26
+ const savedConversation = await this.config.storage.saveConversation(conversation);
27
+ conversation.id = savedConversation.id;
28
+ }
29
+ this.activeConversations.set(conversation.threadId, conversation);
30
+ return conversation;
31
+ }
32
+ async getConversation(threadId) {
33
+ let conversation = this.activeConversations.get(threadId);
34
+ if (!conversation && this.config.storage && this.config.enableConversationManagement) {
35
+ conversation = await this.config.storage.getConversation(threadId);
36
+ if (conversation) {
37
+ this.activeConversations.set(threadId, conversation);
38
+ }
39
+ }
40
+ return conversation || null;
41
+ }
42
+ async sendMessage(message, threadId, context) {
43
+ let conversation = null;
44
+ if (threadId) {
45
+ conversation = await this.getConversation(threadId);
46
+ }
47
+ if (!conversation) {
48
+ conversation = await this.createConversation(context?.userId || 'anonymous', context?.organizationId, 'Chat Conversation');
49
+ }
50
+ if (!conversation) {
51
+ throw new Error('Failed to create or retrieve conversation');
52
+ }
53
+ const userMessage = {
54
+ conversationId: conversation.id || conversation.threadId,
55
+ threadId: conversation.threadId,
56
+ role: 'user',
57
+ content: message,
58
+ createdAt: new Date()
59
+ };
60
+ if (this.config.storage) {
61
+ try {
62
+ await this.config.storage.saveMessage(userMessage);
63
+ }
64
+ catch (error) {
65
+ console.error('Failed to save user message:', error);
66
+ }
67
+ }
68
+ const chatContext = {
69
+ ...context,
70
+ conversationId: conversation.id || conversation.threadId,
71
+ threadId: conversation.threadId,
72
+ conversationHistory: await this.getRecentMessages(conversation.threadId)
73
+ };
74
+ const aiResponse = await this.aiService.generateResponse(message, chatContext);
75
+ const assistantMessage = {
76
+ conversationId: conversation.id || conversation.threadId,
77
+ threadId: conversation.threadId,
78
+ role: 'assistant',
79
+ content: aiResponse.content,
80
+ toolResults: aiResponse.toolResults,
81
+ createdAt: new Date()
82
+ };
83
+ let messageId;
84
+ if (this.config.storage) {
85
+ try {
86
+ const savedMessage = await this.config.storage.saveMessage(assistantMessage);
87
+ messageId = savedMessage.id;
88
+ }
89
+ catch (error) {
90
+ console.error('Failed to save assistant message:', error);
91
+ }
92
+ }
93
+ conversation.messageCount += 2;
94
+ conversation.updatedAt = new Date();
95
+ if (this.config.storage && this.config.enableConversationManagement) {
96
+ try {
97
+ await this.config.storage.updateConversation(conversation.id || conversation.threadId, {
98
+ messageCount: conversation.messageCount,
99
+ updatedAt: conversation.updatedAt
100
+ });
101
+ }
102
+ catch (error) {
103
+ console.error('Failed to update conversation:', error);
104
+ }
105
+ }
106
+ this.activeConversations.set(conversation.threadId, conversation);
107
+ return {
108
+ ...aiResponse,
109
+ conversationId: conversation.id || conversation.threadId,
110
+ messageId
111
+ };
112
+ }
113
+ async getRecentMessages(threadId, limit = 10) {
114
+ if (!this.config.storage) {
115
+ return [];
116
+ }
117
+ try {
118
+ const messages = await this.config.storage.getMessages(threadId, limit);
119
+ return messages.map(msg => ({
120
+ role: msg.role,
121
+ content: msg.content,
122
+ createdAt: msg.createdAt,
123
+ toolResults: msg.toolResults
124
+ }));
125
+ }
126
+ catch (error) {
127
+ console.error('Failed to get recent messages:', error);
128
+ return [];
129
+ }
130
+ }
131
+ async getUserConversations(userId, organizationId) {
132
+ if (!this.config.storage) {
133
+ return [];
134
+ }
135
+ try {
136
+ return await this.config.storage.getUserConversations(userId, organizationId);
137
+ }
138
+ catch (error) {
139
+ console.error('Failed to get user conversations:', error);
140
+ return [];
141
+ }
142
+ }
143
+ async deleteConversation(conversationId) {
144
+ if (!this.config.storage) {
145
+ return false;
146
+ }
147
+ try {
148
+ const result = await this.config.storage.deleteConversation(conversationId);
149
+ // Remove from active conversations
150
+ for (const [threadId, conversation] of this.activeConversations.entries()) {
151
+ if (conversation.id === conversationId) {
152
+ this.activeConversations.delete(threadId);
153
+ break;
154
+ }
155
+ }
156
+ return result;
157
+ }
158
+ catch (error) {
159
+ console.error('Failed to delete conversation:', error);
160
+ return false;
161
+ }
162
+ }
163
+ cleanupExpiredConversations() {
164
+ const timeout = this.config.conversationTimeout || 3600000; // 1 hour default
165
+ const cutoff = new Date(Date.now() - timeout);
166
+ for (const [threadId, conversation] of this.activeConversations.entries()) {
167
+ if (conversation.updatedAt < cutoff) {
168
+ this.activeConversations.delete(threadId);
169
+ }
170
+ }
171
+ }
172
+ }
173
+ exports.ChatManager = ChatManager;
174
+ //# sourceMappingURL=ChatManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatManager.js","sourceRoot":"","sources":["../../../src/services/ChatManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import { SupabaseClient } from '@supabase/supabase-js';
2
+ interface KnowledgeBaseConfig {
3
+ supabase: SupabaseClient;
4
+ tableName?: string;
5
+ }
6
+ interface KnowledgeItem {
7
+ id?: string;
8
+ parent_id?: string;
9
+ company_id?: number;
10
+ title: string;
11
+ description?: string;
12
+ type: string;
13
+ content?: string;
14
+ file_url?: string;
15
+ file_size?: number;
16
+ file_type?: string;
17
+ metadata?: Record<string, any>;
18
+ created_by: number;
19
+ }
20
+ interface SearchOptions {
21
+ limit?: number;
22
+ threshold?: number;
23
+ type?: 'semantic' | 'keyword' | 'hybrid';
24
+ company_id?: number;
25
+ }
26
+ interface SearchResult {
27
+ id: string;
28
+ title: string;
29
+ description?: string;
30
+ content?: string;
31
+ type: string;
32
+ score: number;
33
+ metadata?: Record<string, any>;
34
+ }
35
+ export declare class KnowledgeBaseService {
36
+ private supabase;
37
+ private tableName;
38
+ constructor(config: KnowledgeBaseConfig);
39
+ createItem(item: {
40
+ parent_id?: string;
41
+ company_id?: number;
42
+ title: string;
43
+ description?: string;
44
+ type: string;
45
+ content?: string;
46
+ file_url?: string;
47
+ file_size?: number;
48
+ file_type?: string;
49
+ metadata?: Record<string, any>;
50
+ created_by: number;
51
+ }): Promise<string>;
52
+ getItem(itemId: string): Promise<KnowledgeItem | null>;
53
+ listItems(options?: {
54
+ parent_id?: string;
55
+ company_id?: number;
56
+ type?: string;
57
+ limit?: number;
58
+ offset?: number;
59
+ }): Promise<{
60
+ items: KnowledgeItem[];
61
+ total: number;
62
+ }>;
63
+ updateItem(itemId: string, updates: Partial<KnowledgeItem>): Promise<boolean>;
64
+ deleteItem(itemId: string): Promise<boolean>;
65
+ search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
66
+ private semanticSearch;
67
+ private cosineSimilarity;
68
+ private keywordSearch;
69
+ private generateEmbedding;
70
+ }
71
+ export {};
72
+ //# sourceMappingURL=KnowledgeBaseService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeBaseService.d.ts","sourceRoot":"","sources":["../../../src/services/KnowledgeBaseService.ts"],"names":[],"mappings":"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"}