@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,163 @@
1
+ export interface AIServiceConfig {
2
+ openaiApiKey: string;
3
+ organizationName?: string;
4
+ assistantName?: string;
5
+ platformDescription?: string;
6
+ supportEmail?: string;
7
+ model?: string;
8
+ temperature?: number;
9
+ maxTokens?: number;
10
+ enableDatabaseSearch?: boolean;
11
+ enableFeedbackDetection?: boolean;
12
+ navigationLinks?: NavigationLink[];
13
+ existingFeatures?: string[];
14
+ missingFeatures?: string[];
15
+ customInstructions?: string;
16
+ knowledgeBase?: string;
17
+ knowledgeBaseService?: any;
18
+ }
19
+ export interface ChatContext {
20
+ userId?: string;
21
+ organizationId?: string;
22
+ conversationId?: string;
23
+ threadId?: string;
24
+ conversationHistory?: ChatMessage[];
25
+ metadata?: Record<string, any>;
26
+ }
27
+ export interface ChatMessage {
28
+ role: 'user' | 'assistant' | 'system';
29
+ content: string;
30
+ createdAt?: Date;
31
+ toolCalls?: any;
32
+ toolResults?: DatabaseSearchResult[];
33
+ }
34
+ export interface AIResponse {
35
+ content: string;
36
+ toolResults: DatabaseSearchResult[];
37
+ feedbackDetection: FeedbackDetection | null;
38
+ suggestedLinks: NavigationLink[];
39
+ }
40
+ export interface DatabaseSearchResult {
41
+ type: string;
42
+ entity: string;
43
+ source: string;
44
+ title: string;
45
+ content: Array<{
46
+ type: string;
47
+ text: string;
48
+ }>;
49
+ citations: {
50
+ enabled: boolean;
51
+ };
52
+ count?: number;
53
+ data?: any;
54
+ }
55
+ export interface FeedbackDetection {
56
+ type: 'bug_report' | 'feature_request' | 'general_feedback' | 'not_feedback';
57
+ confidence: number;
58
+ keyPoints: string[];
59
+ suggestedAction: string;
60
+ }
61
+ export interface NavigationLink {
62
+ label: string;
63
+ path: string;
64
+ description?: string;
65
+ keywords?: string[];
66
+ icon?: string;
67
+ category?: string;
68
+ }
69
+ export interface ChatConversation {
70
+ id?: string;
71
+ threadId: string;
72
+ userId: string;
73
+ organizationId?: string;
74
+ title: string;
75
+ messageCount: number;
76
+ createdAt: Date;
77
+ updatedAt: Date;
78
+ deletedAt?: Date;
79
+ }
80
+ export interface StoredChatMessage {
81
+ id?: string;
82
+ conversationId: string;
83
+ threadId: string;
84
+ role: 'user' | 'assistant' | 'system';
85
+ content: string;
86
+ parentMessageId?: string;
87
+ toolCalls?: any;
88
+ toolResults?: DatabaseSearchResult[];
89
+ createdAt: Date;
90
+ updatedAt?: Date;
91
+ }
92
+ export interface ChatStorage {
93
+ saveConversation(conversation: ChatConversation): Promise<ChatConversation>;
94
+ getConversation(conversationId: string): Promise<ChatConversation | null>;
95
+ updateConversation(conversationId: string, updates: Partial<ChatConversation>): Promise<ChatConversation>;
96
+ deleteConversation(conversationId: string): Promise<boolean>;
97
+ getUserConversations(userId: string, organizationId?: string): Promise<ChatConversation[]>;
98
+ saveMessage(message: StoredChatMessage): Promise<StoredChatMessage>;
99
+ getMessages(conversationId: string, limit?: number, offset?: number): Promise<StoredChatMessage[]>;
100
+ deleteMessage(messageId: string): Promise<boolean>;
101
+ saveFeedback(feedback: Feedback): Promise<Feedback>;
102
+ getFeedback(messageId: string): Promise<Feedback[]>;
103
+ }
104
+ export interface Feedback {
105
+ id?: string;
106
+ messageId: string;
107
+ conversationId: string;
108
+ userId: string;
109
+ rating: 'positive' | 'negative';
110
+ category?: string;
111
+ comment?: string;
112
+ suggestedImprovement?: string;
113
+ createdAt: Date;
114
+ }
115
+ export interface ChatManagerConfig {
116
+ aiService: any;
117
+ storage?: ChatStorage;
118
+ enableConversationManagement?: boolean;
119
+ conversationTimeout?: number;
120
+ maxMessagesPerConversation?: number;
121
+ }
122
+ export interface HandoffRequest {
123
+ id?: string;
124
+ conversationId: string;
125
+ userId: string;
126
+ reason: string;
127
+ priority: 'low' | 'medium' | 'high' | 'urgent';
128
+ status: 'pending' | 'assigned' | 'active' | 'resolved' | 'cancelled';
129
+ agentId?: string;
130
+ metadata?: any;
131
+ createdAt: Date;
132
+ updatedAt?: Date;
133
+ }
134
+ export interface AgentProfile {
135
+ id: string;
136
+ name: string;
137
+ email: string;
138
+ status: 'online' | 'offline' | 'busy';
139
+ skills: string[];
140
+ maxConcurrentChats: number;
141
+ currentChatCount: number;
142
+ }
143
+ export interface MessageFeedback {
144
+ id?: string;
145
+ messageId: string;
146
+ conversationId: string;
147
+ userId: string;
148
+ rating: 'positive' | 'negative';
149
+ category?: string;
150
+ comment?: string;
151
+ suggestedImprovement?: string;
152
+ createdAt: Date;
153
+ }
154
+ export interface KnowledgeDocument {
155
+ id: string;
156
+ title: string;
157
+ content: string;
158
+ metadata: Record<string, any>;
159
+ embeddings?: number[];
160
+ lastModified: Date;
161
+ source: string;
162
+ }
163
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ vezlo-server:
5
+ build:
6
+ context: .
7
+ dockerfile: Dockerfile
8
+ container_name: vezlo-server
9
+ restart: unless-stopped
10
+ ports:
11
+ - "3000:3000"
12
+ environment:
13
+ - NODE_ENV=production
14
+ - PORT=3000
15
+ - LOG_LEVEL=info
16
+ - CORS_ORIGINS=http://localhost:3000,http://localhost:5173
17
+ env_file:
18
+ - ./.env
19
+ volumes:
20
+ - ./logs:/app/logs
21
+ healthcheck:
22
+ test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/health', (res) => { process.exit(res.statusCode === 200 ? 0 : 1) })"]
23
+ interval: 30s
24
+ timeout: 10s
25
+ retries: 3
26
+ start_period: 40s
27
+ networks:
28
+ - vezlo-network
29
+
30
+ networks:
31
+ vezlo-network:
32
+ driver: bridge
package/env.example ADDED
@@ -0,0 +1,46 @@
1
+ # Server Configuration
2
+ PORT=3000
3
+ NODE_ENV=development
4
+ LOG_LEVEL=info
5
+
6
+ # CORS Configuration
7
+ CORS_ORIGINS=http://localhost:3000,http://localhost:5173
8
+
9
+ # Rate Limiting
10
+ RATE_LIMIT_WINDOW=60000
11
+ RATE_LIMIT_MAX=100
12
+
13
+ # Supabase Configuration (Required)
14
+ SUPABASE_URL=https://your-project.supabase.co
15
+ SUPABASE_ANON_KEY=your-anon-key
16
+ SUPABASE_SERVICE_KEY=your-service-role-key
17
+
18
+ # Database Configuration for Knex.js Migrations
19
+ # Extract these from your Supabase project settings > Database
20
+ SUPABASE_DB_HOST=db.your-project.supabase.co
21
+ SUPABASE_DB_PORT=5432
22
+ SUPABASE_DB_NAME=postgres
23
+ SUPABASE_DB_USER=postgres
24
+ SUPABASE_DB_PASSWORD=your-database-password
25
+ # Alternative: Use connection string (if you prefer)
26
+ # DATABASE_URL=postgresql://postgres:password@db.your-project.supabase.co:5432/postgres
27
+
28
+ # OpenAI Configuration (Required)
29
+ OPENAI_API_KEY=sk-your-openai-api-key
30
+ AI_MODEL=gpt-4o
31
+ AI_TEMPERATURE=0.7
32
+ AI_MAX_TOKENS=1000
33
+
34
+ # Organization Settings
35
+ ORGANIZATION_NAME=Vezlo
36
+ ASSISTANT_NAME=Vezlo Assistant
37
+
38
+ # Feature Flags
39
+ ENABLE_CACHE=true
40
+ ENABLE_VOICE=true
41
+ ENABLE_GITHUB_SYNC=true
42
+ ENABLE_HUMAN_HANDOFF=true
43
+
44
+ # Knowledge Base
45
+ CHUNK_SIZE=1000
46
+ CHUNK_OVERLAP=200
package/knexfile.ts ADDED
@@ -0,0 +1,86 @@
1
+ import type { Knex } from 'knex';
2
+ import dotenv from 'dotenv';
3
+
4
+ // Load environment variables
5
+ dotenv.config();
6
+
7
+ const config: { [key: string]: Knex.Config } = {
8
+ development: {
9
+ client: 'postgresql',
10
+ connection: {
11
+ host: process.env.SUPABASE_DB_HOST || 'localhost',
12
+ port: parseInt(process.env.SUPABASE_DB_PORT || '5432'),
13
+ database: process.env.SUPABASE_DB_NAME || 'postgres',
14
+ user: process.env.SUPABASE_DB_USER || 'postgres',
15
+ password: process.env.SUPABASE_DB_PASSWORD || '',
16
+ ssl: process.env.NODE_ENV === 'production' ? { rejectUnauthorized: false } : false,
17
+ },
18
+ pool: {
19
+ min: 2,
20
+ max: 10
21
+ },
22
+ migrations: {
23
+ directory: './src/migrations',
24
+ tableName: 'knex_migrations',
25
+ extension: 'ts'
26
+ },
27
+ seeds: {
28
+ directory: './src/seeds',
29
+ extension: 'ts'
30
+ }
31
+ },
32
+
33
+ production: {
34
+ client: 'postgresql',
35
+ connection: {
36
+ host: process.env.SUPABASE_DB_HOST || 'localhost',
37
+ port: parseInt(process.env.SUPABASE_DB_PORT || '5432'),
38
+ database: process.env.SUPABASE_DB_NAME || 'postgres',
39
+ user: process.env.SUPABASE_DB_USER || 'postgres',
40
+ password: process.env.SUPABASE_DB_PASSWORD || '',
41
+ ssl: { rejectUnauthorized: false }
42
+ },
43
+ pool: {
44
+ min: 2,
45
+ max: 20
46
+ },
47
+ migrations: {
48
+ directory: './src/migrations',
49
+ tableName: 'knex_migrations',
50
+ extension: 'ts'
51
+ },
52
+ seeds: {
53
+ directory: './src/seeds',
54
+ extension: 'ts'
55
+ }
56
+ },
57
+
58
+ // For Supabase connection using connection string
59
+ supabase: {
60
+ client: 'postgresql',
61
+ connection: process.env.SUPABASE_DB_URL || process.env.DATABASE_URL || {
62
+ host: process.env.SUPABASE_DB_HOST || 'localhost',
63
+ port: parseInt(process.env.SUPABASE_DB_PORT || '5432'),
64
+ database: process.env.SUPABASE_DB_NAME || 'postgres',
65
+ user: process.env.SUPABASE_DB_USER || 'postgres',
66
+ password: process.env.SUPABASE_DB_PASSWORD || '',
67
+ ssl: { rejectUnauthorized: false }
68
+ },
69
+ pool: {
70
+ min: 2,
71
+ max: 10
72
+ },
73
+ migrations: {
74
+ directory: './src/migrations',
75
+ tableName: 'knex_migrations',
76
+ extension: 'ts'
77
+ },
78
+ seeds: {
79
+ directory: './src/seeds',
80
+ extension: 'ts'
81
+ }
82
+ }
83
+ };
84
+
85
+ export default config;
86
+
package/package.json ADDED
@@ -0,0 +1,92 @@
1
+ {
2
+ "name": "@vezlo/assistant-server",
3
+ "version": "1.0.0",
4
+ "description": "Production-ready AI Assistant Server with vector search, conversation management, and real-time communication",
5
+ "main": "dist/server.js",
6
+ "types": "dist/server.d.ts",
7
+ "bin": {
8
+ "vezlo-server": "./bin/vezlo-server.js"
9
+ },
10
+ "files": [
11
+ "dist/",
12
+ "bin/",
13
+ "database-schema.sql",
14
+ "knexfile.ts",
15
+ "env.example",
16
+ "Dockerfile",
17
+ "docker-compose.yml",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "start": "node dist/server.js",
24
+ "prepublishOnly": "npm run build",
25
+ "migrate:make": "knex migrate:make",
26
+ "migrate:latest": "knex migrate:latest",
27
+ "migrate:rollback": "knex migrate:rollback",
28
+ "migrate:status": "knex migrate:status",
29
+ "migrate:up": "knex migrate:up",
30
+ "migrate:down": "knex migrate:down",
31
+ "seed:make": "knex seed:make",
32
+ "seed:run": "knex seed:run"
33
+ },
34
+ "dependencies": {
35
+ "@supabase/supabase-js": "^2.38.0",
36
+ "express": "^4.18.2",
37
+ "cors": "^2.8.5",
38
+ "helmet": "^7.1.0",
39
+ "compression": "^1.7.4",
40
+ "express-rate-limit": "^7.1.5",
41
+ "socket.io": "^4.7.4",
42
+ "dotenv": "^16.3.1",
43
+ "winston": "^3.11.0",
44
+ "openai": "^4.20.1",
45
+ "uuid": "^9.0.1",
46
+ "swagger-jsdoc": "^6.2.8",
47
+ "swagger-ui-express": "^5.0.0",
48
+ "knex": "^3.1.0",
49
+ "pg": "^8.11.3"
50
+ },
51
+ "devDependencies": {
52
+ "@types/node": "^20.10.0",
53
+ "@types/express": "^4.17.20",
54
+ "@types/cors": "^2.8.15",
55
+ "@types/compression": "^1.7.4",
56
+ "@types/uuid": "^9.0.6",
57
+ "@types/swagger-jsdoc": "^6.0.4",
58
+ "@types/swagger-ui-express": "^4.1.6",
59
+ "@types/pg": "^8.10.9",
60
+ "typescript": "^5.2.2"
61
+ },
62
+ "engines": {
63
+ "node": ">=20.0.0",
64
+ "npm": ">=9.0.0"
65
+ },
66
+ "keywords": [
67
+ "ai",
68
+ "assistant",
69
+ "api",
70
+ "typescript",
71
+ "supabase",
72
+ "vector-search",
73
+ "embeddings",
74
+ "openai",
75
+ "chat",
76
+ "conversation",
77
+ "websocket",
78
+ "real-time",
79
+ "knowledge-base",
80
+ "semantic-search"
81
+ ],
82
+ "repository": {
83
+ "type": "git",
84
+ "url": "git+https://github.com/vezlo/assistant-server.git"
85
+ },
86
+ "bugs": {
87
+ "url": "https://github.com/vezlo/assistant-server/issues"
88
+ },
89
+ "homepage": "https://github.com/vezlo/assistant-server#readme",
90
+ "author": "Vezlo <ashaheen@workhub.ai>",
91
+ "license": "AGPL-3.0"
92
+ }