@mtkn/mega-agent 0.1.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.
- package/dist/artifact/artifact.repository.d.ts +17 -0
- package/dist/artifact/artifact.repository.d.ts.map +1 -0
- package/dist/artifact/artifact.repository.js +66 -0
- package/dist/artifact/artifact.repository.js.map +1 -0
- package/dist/artifact/artifact.service.d.ts +22 -0
- package/dist/artifact/artifact.service.d.ts.map +1 -0
- package/dist/artifact/artifact.service.js +87 -0
- package/dist/artifact/artifact.service.js.map +1 -0
- package/dist/artifact/artifact.types.d.ts +41 -0
- package/dist/artifact/artifact.types.d.ts.map +1 -0
- package/dist/artifact/artifact.types.js +6 -0
- package/dist/artifact/artifact.types.js.map +1 -0
- package/dist/artifact/index.d.ts +6 -0
- package/dist/artifact/index.d.ts.map +1 -0
- package/dist/artifact/index.js +4 -0
- package/dist/artifact/index.js.map +1 -0
- package/dist/chat/chat-memory.integration.d.ts +59 -0
- package/dist/chat/chat-memory.integration.d.ts.map +1 -0
- package/dist/chat/chat-memory.integration.js +148 -0
- package/dist/chat/chat-memory.integration.js.map +1 -0
- package/dist/chat/chat.repository.d.ts +58 -0
- package/dist/chat/chat.repository.d.ts.map +1 -0
- package/dist/chat/chat.repository.js +128 -0
- package/dist/chat/chat.repository.js.map +1 -0
- package/dist/chat/chat.service.d.ts +28 -0
- package/dist/chat/chat.service.d.ts.map +1 -0
- package/dist/chat/chat.service.js +217 -0
- package/dist/chat/chat.service.js.map +1 -0
- package/dist/chat/chat.types.d.ts +198 -0
- package/dist/chat/chat.types.d.ts.map +1 -0
- package/dist/chat/chat.types.js +8 -0
- package/dist/chat/chat.types.js.map +1 -0
- package/dist/chat/index.d.ts +17 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +16 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/memory-detector.d.ts +53 -0
- package/dist/chat/memory-detector.d.ts.map +1 -0
- package/dist/chat/memory-detector.js +172 -0
- package/dist/chat/memory-detector.js.map +1 -0
- package/dist/chat/prompts/index.d.ts +6 -0
- package/dist/chat/prompts/index.d.ts.map +1 -0
- package/dist/chat/prompts/index.js +6 -0
- package/dist/chat/prompts/index.js.map +1 -0
- package/dist/chat/prompts/system.prompts.d.ts +23 -0
- package/dist/chat/prompts/system.prompts.d.ts.map +1 -0
- package/dist/chat/prompts/system.prompts.js +102 -0
- package/dist/chat/prompts/system.prompts.js.map +1 -0
- package/dist/chat/response-parser.d.ts +24 -0
- package/dist/chat/response-parser.d.ts.map +1 -0
- package/dist/chat/response-parser.js +198 -0
- package/dist/chat/response-parser.js.map +1 -0
- package/dist/chat/response.types.d.ts +90 -0
- package/dist/chat/response.types.d.ts.map +1 -0
- package/dist/chat/response.types.js +6 -0
- package/dist/chat/response.types.js.map +1 -0
- package/dist/common/errors.d.ts +60 -0
- package/dist/common/errors.d.ts.map +1 -0
- package/dist/common/errors.js +105 -0
- package/dist/common/errors.js.map +1 -0
- package/dist/common/index.d.ts +3 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +3 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/retry.d.ts +23 -0
- package/dist/common/retry.d.ts.map +1 -0
- package/dist/common/retry.js +57 -0
- package/dist/common/retry.js.map +1 -0
- package/dist/create-mega-agent.d.ts +100 -0
- package/dist/create-mega-agent.d.ts.map +1 -0
- package/dist/create-mega-agent.js +153 -0
- package/dist/create-mega-agent.js.map +1 -0
- package/dist/embedding/embedding.service.d.ts +34 -0
- package/dist/embedding/embedding.service.d.ts.map +1 -0
- package/dist/embedding/embedding.service.js +68 -0
- package/dist/embedding/embedding.service.js.map +1 -0
- package/dist/embedding/embedding.types.d.ts +38 -0
- package/dist/embedding/embedding.types.d.ts.map +1 -0
- package/dist/embedding/embedding.types.js +6 -0
- package/dist/embedding/embedding.types.js.map +1 -0
- package/dist/embedding/index.d.ts +9 -0
- package/dist/embedding/index.d.ts.map +1 -0
- package/dist/embedding/index.js +9 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/embedding/providers/base.provider.d.ts +29 -0
- package/dist/embedding/providers/base.provider.d.ts.map +1 -0
- package/dist/embedding/providers/base.provider.js +19 -0
- package/dist/embedding/providers/base.provider.js.map +1 -0
- package/dist/embedding/providers/index.d.ts +7 -0
- package/dist/embedding/providers/index.d.ts.map +1 -0
- package/dist/embedding/providers/index.js +7 -0
- package/dist/embedding/providers/index.js.map +1 -0
- package/dist/embedding/providers/openai.provider.d.ts +17 -0
- package/dist/embedding/providers/openai.provider.d.ts.map +1 -0
- package/dist/embedding/providers/openai.provider.js +73 -0
- package/dist/embedding/providers/openai.provider.js.map +1 -0
- package/dist/http/chat.controller.d.ts +30 -0
- package/dist/http/chat.controller.d.ts.map +1 -0
- package/dist/http/chat.controller.js +163 -0
- package/dist/http/chat.controller.js.map +1 -0
- package/dist/http/chat.routes.d.ts +5 -0
- package/dist/http/chat.routes.d.ts.map +1 -0
- package/dist/http/chat.routes.js +38 -0
- package/dist/http/chat.routes.js.map +1 -0
- package/dist/http/chat.validation.d.ts +70 -0
- package/dist/http/chat.validation.d.ts.map +1 -0
- package/dist/http/chat.validation.js +28 -0
- package/dist/http/chat.validation.js.map +1 -0
- package/dist/incident/incident.correlator.d.ts +39 -0
- package/dist/incident/incident.correlator.d.ts.map +1 -0
- package/dist/incident/incident.correlator.js +129 -0
- package/dist/incident/incident.correlator.js.map +1 -0
- package/dist/incident/incident.detector.d.ts +62 -0
- package/dist/incident/incident.detector.d.ts.map +1 -0
- package/dist/incident/incident.detector.js +192 -0
- package/dist/incident/incident.detector.js.map +1 -0
- package/dist/incident/incident.repository.d.ts +79 -0
- package/dist/incident/incident.repository.d.ts.map +1 -0
- package/dist/incident/incident.repository.js +216 -0
- package/dist/incident/incident.repository.js.map +1 -0
- package/dist/incident/incident.service.d.ts +71 -0
- package/dist/incident/incident.service.d.ts.map +1 -0
- package/dist/incident/incident.service.js +217 -0
- package/dist/incident/incident.service.js.map +1 -0
- package/dist/incident/incident.types.d.ts +115 -0
- package/dist/incident/incident.types.d.ts.map +1 -0
- package/dist/incident/incident.types.js +6 -0
- package/dist/incident/incident.types.js.map +1 -0
- package/dist/incident/index.d.ts +13 -0
- package/dist/incident/index.d.ts.map +1 -0
- package/dist/incident/index.js +13 -0
- package/dist/incident/index.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/index.d.ts +8 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +9 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/llm.service.d.ts +52 -0
- package/dist/llm/llm.service.d.ts.map +1 -0
- package/dist/llm/llm.service.js +141 -0
- package/dist/llm/llm.service.js.map +1 -0
- package/dist/llm/llm.types.d.ts +77 -0
- package/dist/llm/llm.types.d.ts.map +1 -0
- package/dist/llm/llm.types.js +5 -0
- package/dist/llm/llm.types.js.map +1 -0
- package/dist/llm/providers/anthropic.provider.d.ts +16 -0
- package/dist/llm/providers/anthropic.provider.d.ts.map +1 -0
- package/dist/llm/providers/anthropic.provider.js +118 -0
- package/dist/llm/providers/anthropic.provider.js.map +1 -0
- package/dist/llm/providers/base.provider.d.ts +17 -0
- package/dist/llm/providers/base.provider.d.ts.map +1 -0
- package/dist/llm/providers/base.provider.js +18 -0
- package/dist/llm/providers/base.provider.js.map +1 -0
- package/dist/llm/providers/custom.provider.d.ts +15 -0
- package/dist/llm/providers/custom.provider.d.ts.map +1 -0
- package/dist/llm/providers/custom.provider.js +110 -0
- package/dist/llm/providers/custom.provider.js.map +1 -0
- package/dist/llm/providers/gemini.provider.d.ts +19 -0
- package/dist/llm/providers/gemini.provider.d.ts.map +1 -0
- package/dist/llm/providers/gemini.provider.js +98 -0
- package/dist/llm/providers/gemini.provider.js.map +1 -0
- package/dist/llm/providers/index.d.ts +10 -0
- package/dist/llm/providers/index.d.ts.map +1 -0
- package/dist/llm/providers/index.js +10 -0
- package/dist/llm/providers/index.js.map +1 -0
- package/dist/llm/providers/openai.provider.d.ts +15 -0
- package/dist/llm/providers/openai.provider.d.ts.map +1 -0
- package/dist/llm/providers/openai.provider.js +57 -0
- package/dist/llm/providers/openai.provider.js.map +1 -0
- package/dist/mcp/index.d.ts +13 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/mcp.client.d.ts +57 -0
- package/dist/mcp/mcp.client.d.ts.map +1 -0
- package/dist/mcp/mcp.client.js +150 -0
- package/dist/mcp/mcp.client.js.map +1 -0
- package/dist/mcp/mcp.service.d.ts +64 -0
- package/dist/mcp/mcp.service.d.ts.map +1 -0
- package/dist/mcp/mcp.service.js +207 -0
- package/dist/mcp/mcp.service.js.map +1 -0
- package/dist/mcp/mcp.types.d.ts +142 -0
- package/dist/mcp/mcp.types.d.ts.map +1 -0
- package/dist/mcp/mcp.types.js +6 -0
- package/dist/mcp/mcp.types.js.map +1 -0
- package/dist/mcp/presets/common-sources.d.ts +28 -0
- package/dist/mcp/presets/common-sources.d.ts.map +1 -0
- package/dist/mcp/presets/common-sources.js +114 -0
- package/dist/mcp/presets/common-sources.js.map +1 -0
- package/dist/mcp/presets/index.d.ts +5 -0
- package/dist/mcp/presets/index.d.ts.map +1 -0
- package/dist/mcp/presets/index.js +5 -0
- package/dist/mcp/presets/index.js.map +1 -0
- package/dist/mcp/source.repository.d.ts +68 -0
- package/dist/mcp/source.repository.d.ts.map +1 -0
- package/dist/mcp/source.repository.js +114 -0
- package/dist/mcp/source.repository.js.map +1 -0
- package/dist/mcp/source.service.d.ts +74 -0
- package/dist/mcp/source.service.d.ts.map +1 -0
- package/dist/mcp/source.service.js +181 -0
- package/dist/mcp/source.service.js.map +1 -0
- package/dist/mcp/transports/http.transport.d.ts +45 -0
- package/dist/mcp/transports/http.transport.d.ts.map +1 -0
- package/dist/mcp/transports/http.transport.js +64 -0
- package/dist/mcp/transports/http.transport.js.map +1 -0
- package/dist/mcp/transports/index.d.ts +7 -0
- package/dist/mcp/transports/index.d.ts.map +1 -0
- package/dist/mcp/transports/index.js +7 -0
- package/dist/mcp/transports/index.js.map +1 -0
- package/dist/mcp/transports/stdio.transport.d.ts +21 -0
- package/dist/mcp/transports/stdio.transport.d.ts.map +1 -0
- package/dist/mcp/transports/stdio.transport.js +29 -0
- package/dist/mcp/transports/stdio.transport.js.map +1 -0
- package/dist/memory/index.d.ts +10 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +10 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/memory.repository.d.ts +62 -0
- package/dist/memory/memory.repository.d.ts.map +1 -0
- package/dist/memory/memory.repository.js +148 -0
- package/dist/memory/memory.repository.js.map +1 -0
- package/dist/memory/memory.service.d.ts +63 -0
- package/dist/memory/memory.service.d.ts.map +1 -0
- package/dist/memory/memory.service.js +263 -0
- package/dist/memory/memory.service.js.map +1 -0
- package/dist/memory/memory.types.d.ts +104 -0
- package/dist/memory/memory.types.d.ts.map +1 -0
- package/dist/memory/memory.types.js +8 -0
- package/dist/memory/memory.types.js.map +1 -0
- package/dist/qdrant/index.d.ts +8 -0
- package/dist/qdrant/index.d.ts.map +1 -0
- package/dist/qdrant/index.js +6 -0
- package/dist/qdrant/index.js.map +1 -0
- package/dist/qdrant/qdrant.service.d.ts +63 -0
- package/dist/qdrant/qdrant.service.d.ts.map +1 -0
- package/dist/qdrant/qdrant.service.js +201 -0
- package/dist/qdrant/qdrant.service.js.map +1 -0
- package/dist/qdrant/qdrant.types.d.ts +55 -0
- package/dist/qdrant/qdrant.types.d.ts.map +1 -0
- package/dist/qdrant/qdrant.types.js +6 -0
- package/dist/qdrant/qdrant.types.js.map +1 -0
- package/dist/tools/core-tools.d.ts +7 -0
- package/dist/tools/core-tools.d.ts.map +1 -0
- package/dist/tools/core-tools.js +52 -0
- package/dist/tools/core-tools.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +51 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +50 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/workflow/actions/base.action.d.ts +50 -0
- package/dist/workflow/actions/base.action.d.ts.map +1 -0
- package/dist/workflow/actions/base.action.js +59 -0
- package/dist/workflow/actions/base.action.js.map +1 -0
- package/dist/workflow/actions/incident.action.d.ts +13 -0
- package/dist/workflow/actions/incident.action.d.ts.map +1 -0
- package/dist/workflow/actions/incident.action.js +70 -0
- package/dist/workflow/actions/incident.action.js.map +1 -0
- package/dist/workflow/actions/index.d.ts +9 -0
- package/dist/workflow/actions/index.d.ts.map +1 -0
- package/dist/workflow/actions/index.js +11 -0
- package/dist/workflow/actions/index.js.map +1 -0
- package/dist/workflow/actions/notify.action.d.ts +18 -0
- package/dist/workflow/actions/notify.action.d.ts.map +1 -0
- package/dist/workflow/actions/notify.action.js +106 -0
- package/dist/workflow/actions/notify.action.js.map +1 -0
- package/dist/workflow/actions/report.action.d.ts +13 -0
- package/dist/workflow/actions/report.action.d.ts.map +1 -0
- package/dist/workflow/actions/report.action.js +64 -0
- package/dist/workflow/actions/report.action.js.map +1 -0
- package/dist/workflow/index.d.ts +10 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +11 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/workflow.repository.d.ts +90 -0
- package/dist/workflow/workflow.repository.d.ts.map +1 -0
- package/dist/workflow/workflow.repository.js +238 -0
- package/dist/workflow/workflow.repository.js.map +1 -0
- package/dist/workflow/workflow.service.d.ts +98 -0
- package/dist/workflow/workflow.service.d.ts.map +1 -0
- package/dist/workflow/workflow.service.js +374 -0
- package/dist/workflow/workflow.service.js.map +1 -0
- package/dist/workflow/workflow.types.d.ts +146 -0
- package/dist/workflow/workflow.types.d.ts.map +1 -0
- package/dist/workflow/workflow.types.js +8 -0
- package/dist/workflow/workflow.types.js.map +1 -0
- package/package.json +67 -0
- package/prisma/schema.prisma +551 -0
- package/scripts/prisma-sync.mjs +187 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat Repository
|
|
3
|
+
* Data access layer for chat operations
|
|
4
|
+
*/
|
|
5
|
+
let _deps = null;
|
|
6
|
+
/**
|
|
7
|
+
* Initialize the Chat repository with dependencies
|
|
8
|
+
*/
|
|
9
|
+
export function initChatRepository(deps) {
|
|
10
|
+
_deps = deps;
|
|
11
|
+
}
|
|
12
|
+
export class ChatRepository {
|
|
13
|
+
get prisma() {
|
|
14
|
+
if (!_deps)
|
|
15
|
+
throw new Error('[ChatRepository] Not initialized');
|
|
16
|
+
return _deps.prisma;
|
|
17
|
+
}
|
|
18
|
+
get logger() {
|
|
19
|
+
if (!_deps)
|
|
20
|
+
throw new Error('[ChatRepository] Not initialized');
|
|
21
|
+
return _deps.logger;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create a new chat
|
|
25
|
+
*/
|
|
26
|
+
async createChat(data) {
|
|
27
|
+
const chat = await this.prisma.aiChat.create({
|
|
28
|
+
data: {
|
|
29
|
+
userId: data.userId,
|
|
30
|
+
title: data.title,
|
|
31
|
+
mode: data.mode || 'EXPLORE',
|
|
32
|
+
model: data.model || process.env.ANTHROPIC_DEFAULT_MODEL || 'claude-opus-4-6',
|
|
33
|
+
temperature: data.temperature ?? 0.7,
|
|
34
|
+
systemPrompt: data.systemPrompt,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
this.logger.debug('Chat created', { id: chat.id });
|
|
38
|
+
return chat;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Find chat by ID
|
|
42
|
+
*/
|
|
43
|
+
async findById(id) {
|
|
44
|
+
return this.prisma.aiChat.findUnique({ where: { id } });
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Find chat by ID with messages
|
|
48
|
+
*/
|
|
49
|
+
async findByIdWithMessages(id, messageLimit) {
|
|
50
|
+
return this.prisma.aiChat.findUnique({
|
|
51
|
+
where: { id },
|
|
52
|
+
include: {
|
|
53
|
+
messages: {
|
|
54
|
+
orderBy: { createdAt: 'asc' },
|
|
55
|
+
take: messageLimit,
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Find chats by user
|
|
62
|
+
*/
|
|
63
|
+
async findByUser(userId, limit) {
|
|
64
|
+
return this.prisma.aiChat.findMany({
|
|
65
|
+
where: { userId },
|
|
66
|
+
orderBy: { updatedAt: 'desc' },
|
|
67
|
+
take: limit,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Update a chat
|
|
72
|
+
*/
|
|
73
|
+
async updateChat(id, data) {
|
|
74
|
+
return this.prisma.aiChat.update({
|
|
75
|
+
where: { id },
|
|
76
|
+
data,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Delete a chat
|
|
81
|
+
*/
|
|
82
|
+
async deleteChat(id) {
|
|
83
|
+
await this.prisma.aiChat.delete({ where: { id } });
|
|
84
|
+
this.logger.debug('Chat deleted', { id });
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Add a message to a chat
|
|
88
|
+
*/
|
|
89
|
+
async addMessage(chatId, role, content, metadata) {
|
|
90
|
+
const message = await this.prisma.aiChatMessage.create({
|
|
91
|
+
data: {
|
|
92
|
+
chatId,
|
|
93
|
+
role,
|
|
94
|
+
content,
|
|
95
|
+
model: metadata?.model,
|
|
96
|
+
tokens: metadata?.tokens,
|
|
97
|
+
latencyMs: metadata?.latencyMs,
|
|
98
|
+
usedMemoryIds: metadata?.usedMemoryIds ?? [],
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
// Update chat timestamp
|
|
102
|
+
await this.prisma.aiChat.update({
|
|
103
|
+
where: { id: chatId },
|
|
104
|
+
data: { updatedAt: new Date() },
|
|
105
|
+
});
|
|
106
|
+
return message;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get messages for a chat
|
|
110
|
+
*/
|
|
111
|
+
async getMessages(chatId, limit, before) {
|
|
112
|
+
return this.prisma.aiChatMessage.findMany({
|
|
113
|
+
where: {
|
|
114
|
+
chatId,
|
|
115
|
+
...(before && { createdAt: { lt: before } }),
|
|
116
|
+
},
|
|
117
|
+
orderBy: { createdAt: 'desc' },
|
|
118
|
+
take: limit,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get message count for a chat
|
|
123
|
+
*/
|
|
124
|
+
async getMessageCount(chatId) {
|
|
125
|
+
return this.prisma.aiChatMessage.count({ where: { chatId } });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=chat.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.repository.js","sourceRoot":"","sources":["../../src/chat/chat.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat Service — Agent Loop with Tool Calling
|
|
3
|
+
*/
|
|
4
|
+
import type { AiChat } from '@prisma/client';
|
|
5
|
+
import type { CreateChatDto, UpdateChatDto, SendMessageDto, ChatMessageResponse, ChatStreamChunk, ChatContext, ChatServiceDependencies } from './chat.types.js';
|
|
6
|
+
export declare function initChatService(deps: ChatServiceDependencies): void;
|
|
7
|
+
export declare function getChatServiceDeps(): ChatServiceDependencies | null;
|
|
8
|
+
export declare class ChatService {
|
|
9
|
+
private repository;
|
|
10
|
+
static readonly MAX_CONTEXT_MESSAGES = 20;
|
|
11
|
+
static readonly MAX_AGENT_ITERATIONS = 10;
|
|
12
|
+
constructor();
|
|
13
|
+
private get logger();
|
|
14
|
+
private get llmService();
|
|
15
|
+
createChat(data: CreateChatDto): Promise<AiChat>;
|
|
16
|
+
sendMessage(dto: SendMessageDto): Promise<ChatMessageResponse>;
|
|
17
|
+
approveToolCall(chatId: string, toolName: string, args: Record<string, unknown>, userId: number, conversationState: string): Promise<ChatMessageResponse>;
|
|
18
|
+
streamMessage(dto: SendMessageDto): AsyncGenerator<ChatStreamChunk>;
|
|
19
|
+
getChat(id: string): Promise<AiChat | null>;
|
|
20
|
+
getChatWithMessages(id: string): Promise<ChatContext | null>;
|
|
21
|
+
getUserChats(userId: number, limit?: number): Promise<AiChat[]>;
|
|
22
|
+
updateChat(id: string, data: UpdateChatDto): Promise<AiChat>;
|
|
23
|
+
deleteChat(id: string): Promise<void>;
|
|
24
|
+
generateTitle(chatId: string): Promise<string>;
|
|
25
|
+
private getMemoryIntegration;
|
|
26
|
+
private detectAndSaveMemories;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=chat.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.service.d.ts","sourceRoot":"","sources":["../../src/chat/chat.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAYhK,wBAAgB,eAAe,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAA4C;AAChH,wBAAgB,kBAAkB,IAAI,uBAAuB,GAAG,IAAI,CAAkB;AAEtF,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAiB;IACnC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,MAAM;IAC1C,MAAM,CAAC,QAAQ,CAAC,oBAAoB,MAAM;;IAQ1C,OAAO,KAAK,MAAM,GAA4B;IAC9C,OAAO,KAAK,UAAU,GAAgC;IAEhD,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAShD,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6G9D,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAuBxJ,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAAC,eAAe,CAAC;IAsBpE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAC3C,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAI5D,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAC/D,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAErC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYpD,OAAO,CAAC,oBAAoB;YAId,qBAAqB;CAOpC"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat Service — Agent Loop with Tool Calling
|
|
3
|
+
*/
|
|
4
|
+
import { ChatRepository, initChatRepository } from './chat.repository.js';
|
|
5
|
+
import { buildSystemPrompt } from './prompts/system.prompts.js';
|
|
6
|
+
import { ChatMemoryIntegration, getChatMemoryIntegrationDeps } from './chat-memory.integration.js';
|
|
7
|
+
import { MemoryDetector } from './memory-detector.js';
|
|
8
|
+
import { ResponseParser } from './response-parser.js';
|
|
9
|
+
import { getAllTools, executeTool, requiresApproval, toAnthropicTools } from '../tools/index.js';
|
|
10
|
+
let _deps = null;
|
|
11
|
+
export function initChatService(deps) { _deps = deps; initChatRepository(deps); }
|
|
12
|
+
export function getChatServiceDeps() { return _deps; }
|
|
13
|
+
export class ChatService {
|
|
14
|
+
repository;
|
|
15
|
+
static MAX_CONTEXT_MESSAGES = 20;
|
|
16
|
+
static MAX_AGENT_ITERATIONS = 10;
|
|
17
|
+
constructor() {
|
|
18
|
+
if (!_deps)
|
|
19
|
+
throw new Error('[ChatService] Not initialized!');
|
|
20
|
+
this.repository = new ChatRepository();
|
|
21
|
+
_deps.logger.info('ChatService initialized');
|
|
22
|
+
}
|
|
23
|
+
get logger() { return _deps.logger; }
|
|
24
|
+
get llmService() { return _deps.llmService; }
|
|
25
|
+
async createChat(data) {
|
|
26
|
+
const chat = await this.repository.createChat(data);
|
|
27
|
+
if (data.systemPrompt)
|
|
28
|
+
await this.repository.addMessage(chat.id, 'SYSTEM', data.systemPrompt);
|
|
29
|
+
this.logger.info('Chat created', { id: chat.id, mode: chat.mode });
|
|
30
|
+
return chat;
|
|
31
|
+
}
|
|
32
|
+
// ── Agent Loop sendMessage ─────────────────────────────────────
|
|
33
|
+
async sendMessage(dto) {
|
|
34
|
+
const startTime = Date.now();
|
|
35
|
+
const chat = await this.repository.findByIdWithMessages(dto.chatId, ChatService.MAX_CONTEXT_MESSAGES);
|
|
36
|
+
if (!chat)
|
|
37
|
+
throw new Error(`Chat ${dto.chatId} not found`);
|
|
38
|
+
const userMessage = await this.repository.addMessage(dto.chatId, 'USER', dto.content);
|
|
39
|
+
const systemPrompt = buildSystemPrompt(chat.mode, { customPrompt: chat.systemPrompt ?? undefined });
|
|
40
|
+
// Memory context
|
|
41
|
+
let memoryContext = '';
|
|
42
|
+
const usedMemoryIds = [];
|
|
43
|
+
const memoryInt = this.getMemoryIntegration();
|
|
44
|
+
if (memoryInt) {
|
|
45
|
+
try {
|
|
46
|
+
const sum = memoryInt.buildChatContextSummary(chat.messages);
|
|
47
|
+
const mems = await Promise.race([
|
|
48
|
+
memoryInt.getRelevantMemories(chat.userId, dto.content, sum),
|
|
49
|
+
new Promise((_, r) => setTimeout(() => r(new Error('timeout')), 5000)),
|
|
50
|
+
]);
|
|
51
|
+
if (mems.length > 0) {
|
|
52
|
+
memoryContext = memoryInt.buildMemoryContext(mems);
|
|
53
|
+
usedMemoryIds.push(...mems.map(m => m.memory.id));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch { /* continue */ }
|
|
57
|
+
}
|
|
58
|
+
// Build conversation
|
|
59
|
+
const llmMessages = [
|
|
60
|
+
{ role: 'system', content: systemPrompt + memoryContext },
|
|
61
|
+
...chat.messages.map(m => ({ role: m.role.toLowerCase(), content: m.content })),
|
|
62
|
+
{ role: 'user', content: dto.content },
|
|
63
|
+
];
|
|
64
|
+
const tools = toAnthropicTools();
|
|
65
|
+
const toolsCalled = [];
|
|
66
|
+
let finalContent = '';
|
|
67
|
+
let totalTokens = { prompt: 0, completion: 0, total: 0 };
|
|
68
|
+
// ── Loop ─────────────────────────────────────────────────────
|
|
69
|
+
for (let i = 0; i < ChatService.MAX_AGENT_ITERATIONS; i++) {
|
|
70
|
+
const res = await this.llmService.complete({
|
|
71
|
+
messages: llmMessages,
|
|
72
|
+
model: dto.model || chat.model,
|
|
73
|
+
temperature: chat.temperature,
|
|
74
|
+
tools: tools.length > 0 ? tools : undefined,
|
|
75
|
+
});
|
|
76
|
+
totalTokens.prompt += res.tokens.prompt;
|
|
77
|
+
totalTokens.completion += res.tokens.completion;
|
|
78
|
+
totalTokens.total += res.tokens.total;
|
|
79
|
+
// No tool calls → done
|
|
80
|
+
if (!res.toolCalls || res.toolCalls.length === 0) {
|
|
81
|
+
finalContent = res.content;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
const tc = res.toolCalls[0];
|
|
85
|
+
// WRITE tool → needs approval
|
|
86
|
+
if (requiresApproval(tc.name)) {
|
|
87
|
+
const tool = getAllTools().find(t => t.name === tc.name);
|
|
88
|
+
const approvalMsg = await this.repository.addMessage(dto.chatId, 'ASSISTANT', `I want to execute **${tc.name}**: \`\`\`json\n${JSON.stringify(tc.input, null, 2)}\n\`\`\`\nPlease confirm or reject.`);
|
|
89
|
+
return {
|
|
90
|
+
message: userMessage, assistantMessage: approvalMsg, usedMemories: usedMemoryIds,
|
|
91
|
+
tokens: totalTokens, latencyMs: Date.now() - startTime,
|
|
92
|
+
pendingApproval: {
|
|
93
|
+
id: `apv-${Date.now()}`, chatId: dto.chatId, toolName: tc.name,
|
|
94
|
+
toolDescription: tool?.description || tc.name, arguments: tc.input,
|
|
95
|
+
conversationState: JSON.stringify(llmMessages),
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// READ tool → auto-execute
|
|
100
|
+
this.logger.info('Auto-executing tool', { tool: tc.name, iter: i });
|
|
101
|
+
const tStart = Date.now();
|
|
102
|
+
const result = await executeTool(tc.name, tc.input, chat.userId);
|
|
103
|
+
toolsCalled.push({ name: tc.name, durationMs: Date.now() - tStart });
|
|
104
|
+
// Append tool_use + tool_result to conversation
|
|
105
|
+
llmMessages.push({
|
|
106
|
+
role: 'assistant',
|
|
107
|
+
content: [
|
|
108
|
+
...(res.content ? [{ type: 'text', text: res.content }] : []),
|
|
109
|
+
{ type: 'tool_use', id: tc.id, name: tc.name, input: tc.input },
|
|
110
|
+
],
|
|
111
|
+
});
|
|
112
|
+
llmMessages.push({
|
|
113
|
+
role: 'user',
|
|
114
|
+
content: [{ type: 'tool_result', tool_use_id: tc.id, content: JSON.stringify(result.data ?? result.error) }],
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
// Save final
|
|
118
|
+
const assistantMessage = await this.repository.addMessage(dto.chatId, 'ASSISTANT', finalContent, {
|
|
119
|
+
model: dto.model || chat.model, tokens: totalTokens.total, latencyMs: Date.now() - startTime, usedMemoryIds,
|
|
120
|
+
});
|
|
121
|
+
this.detectAndSaveMemories(chat.userId, dto.chatId, assistantMessage.id, dto.content, finalContent).catch(() => { });
|
|
122
|
+
// Auto-title on first user message
|
|
123
|
+
if (!chat.title && chat.messages.length <= 1) {
|
|
124
|
+
this.generateTitle(dto.chatId).catch(() => { });
|
|
125
|
+
}
|
|
126
|
+
const ctx = { memoriesUsed: usedMemoryIds.map(id => ({ id, title: '', score: 0 })), toolsCalled, modelUsed: dto.model || chat.model, tokens: totalTokens, latencyMs: Date.now() - startTime };
|
|
127
|
+
const structured = ResponseParser.parse(finalContent, ctx);
|
|
128
|
+
if (usedMemoryIds.length > 0)
|
|
129
|
+
structured.memory = { ...structured.memory, referencedIds: usedMemoryIds };
|
|
130
|
+
this.logger.debug('Agent loop done', { chatId: dto.chatId, tools: toolsCalled.length, latencyMs: Date.now() - startTime });
|
|
131
|
+
return { message: userMessage, assistantMessage, usedMemories: usedMemoryIds, tokens: totalTokens, latencyMs: Date.now() - startTime, structured };
|
|
132
|
+
}
|
|
133
|
+
// ── Approve pending tool call ──────────────────────────────────
|
|
134
|
+
async approveToolCall(chatId, toolName, args, userId, conversationState) {
|
|
135
|
+
const startTime = Date.now();
|
|
136
|
+
const result = await executeTool(toolName, args, userId);
|
|
137
|
+
this.logger.info('Approved tool executed', { tool: toolName, success: result.success });
|
|
138
|
+
// Resume conversation with tool result
|
|
139
|
+
const llmMessages = JSON.parse(conversationState);
|
|
140
|
+
const toolId = `tool-${Date.now()}`;
|
|
141
|
+
llmMessages.push({ role: 'assistant', content: [{ type: 'tool_use', id: toolId, name: toolName, input: args }] });
|
|
142
|
+
llmMessages.push({ role: 'user', content: [{ type: 'tool_result', tool_use_id: toolId, content: JSON.stringify(result.data ?? result.error) }] });
|
|
143
|
+
const chat = await this.repository.findByIdWithMessages(chatId, 3);
|
|
144
|
+
const res = await this.llmService.complete({ messages: llmMessages, model: chat?.model, tools: toAnthropicTools() });
|
|
145
|
+
const assistantMessage = await this.repository.addMessage(chatId, 'ASSISTANT', res.content, { model: res.model, tokens: res.tokens.total, latencyMs: res.latencyMs });
|
|
146
|
+
const ctx = { memoriesUsed: [], toolsCalled: [{ name: toolName, durationMs: Date.now() - startTime }], modelUsed: res.model, tokens: res.tokens, latencyMs: Date.now() - startTime };
|
|
147
|
+
const structured = ResponseParser.parse(res.content, ctx);
|
|
148
|
+
return { message: assistantMessage, assistantMessage, usedMemories: [], tokens: res.tokens, latencyMs: Date.now() - startTime, structured };
|
|
149
|
+
}
|
|
150
|
+
// ── Stream (unchanged, no tools) ───────────────────────────────
|
|
151
|
+
async *streamMessage(dto) {
|
|
152
|
+
const chat = await this.repository.findByIdWithMessages(dto.chatId, ChatService.MAX_CONTEXT_MESSAGES);
|
|
153
|
+
if (!chat) {
|
|
154
|
+
yield { type: 'error', error: `Chat not found` };
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
await this.repository.addMessage(dto.chatId, 'USER', dto.content);
|
|
158
|
+
const systemPrompt = buildSystemPrompt(chat.mode, { customPrompt: chat.systemPrompt ?? undefined });
|
|
159
|
+
const msgs = [
|
|
160
|
+
{ role: 'system', content: systemPrompt },
|
|
161
|
+
...chat.messages.map(m => ({ role: m.role.toLowerCase(), content: m.content })),
|
|
162
|
+
{ role: 'user', content: dto.content },
|
|
163
|
+
];
|
|
164
|
+
let full = '';
|
|
165
|
+
try {
|
|
166
|
+
for await (const chunk of this.llmService.stream({ messages: msgs, model: dto.model || chat.model, temperature: chat.temperature })) {
|
|
167
|
+
full += chunk.content;
|
|
168
|
+
yield { type: 'content', content: chunk.content };
|
|
169
|
+
if (chunk.done)
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
await this.repository.addMessage(dto.chatId, 'ASSISTANT', full, { model: dto.model || chat.model });
|
|
173
|
+
yield { type: 'done' };
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
this.logger.error('Stream error', { error });
|
|
177
|
+
yield { type: 'error', error: String(error) };
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// ── CRUD ───────────────────────────────────────────────────────
|
|
181
|
+
async getChat(id) { return this.repository.findById(id); }
|
|
182
|
+
async getChatWithMessages(id) {
|
|
183
|
+
const chat = await this.repository.findByIdWithMessages(id);
|
|
184
|
+
return chat ? { chat, messages: chat.messages } : null;
|
|
185
|
+
}
|
|
186
|
+
async getUserChats(userId, limit) { return this.repository.findByUser(userId, limit); }
|
|
187
|
+
async updateChat(id, data) { return this.repository.updateChat(id, data); }
|
|
188
|
+
async deleteChat(id) { await this.repository.deleteChat(id); }
|
|
189
|
+
async generateTitle(chatId) {
|
|
190
|
+
const chat = await this.repository.findByIdWithMessages(chatId, 3);
|
|
191
|
+
if (!chat?.messages.length)
|
|
192
|
+
return 'New Chat';
|
|
193
|
+
const first = chat.messages.find(m => m.role === 'USER');
|
|
194
|
+
if (!first)
|
|
195
|
+
return 'New Chat';
|
|
196
|
+
const title = first.content.slice(0, 50).trim();
|
|
197
|
+
await this.repository.updateChat(chatId, { title });
|
|
198
|
+
return title;
|
|
199
|
+
}
|
|
200
|
+
// ── Helpers ────────────────────────────────────────────────────
|
|
201
|
+
getMemoryIntegration() {
|
|
202
|
+
return getChatMemoryIntegrationDeps() ? new ChatMemoryIntegration() : null;
|
|
203
|
+
}
|
|
204
|
+
async detectAndSaveMemories(userId, chatId, messageId, userContent, assistantContent) {
|
|
205
|
+
const mi = this.getMemoryIntegration();
|
|
206
|
+
if (!mi)
|
|
207
|
+
return;
|
|
208
|
+
const sug = mi.detectMemorySuggestion(assistantContent);
|
|
209
|
+
if (sug.hasSuggestion && sug.suggestedContent)
|
|
210
|
+
await mi.suggestMemoryFromChat(chatId, messageId, userId, sug.suggestedContent, sug.suggestedType || 'INSIGHT');
|
|
211
|
+
const det = new MemoryDetector();
|
|
212
|
+
const mems = det.analyzeForMemories(userContent, assistantContent);
|
|
213
|
+
for (const m of mems)
|
|
214
|
+
await mi.suggestMemoryFromChat(chatId, messageId, userId, m.content, m.type);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=chat.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.service.js","sourceRoot":"","sources":["../../src/chat/chat.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat Service Types
|
|
3
|
+
* Type definitions for the Chat service and memory integration
|
|
4
|
+
*/
|
|
5
|
+
import { ChatMode, MessageRole } from '@prisma/client';
|
|
6
|
+
import type { AiChat, AiChatMessage, AiMemory, MemoryType, Prisma, PrismaClient } from '@prisma/client';
|
|
7
|
+
export { ChatMode, MessageRole };
|
|
8
|
+
export type { AiChat, AiChatMessage, AiMemory, MemoryType };
|
|
9
|
+
export interface LoggerLike {
|
|
10
|
+
info(message: string, meta?: object): void;
|
|
11
|
+
error(message: string, meta?: object): void;
|
|
12
|
+
warn(message: string, meta?: object): void;
|
|
13
|
+
debug(message: string, meta?: object): void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Memory service interface for chat integration
|
|
17
|
+
* Uses duck typing for loose coupling
|
|
18
|
+
*/
|
|
19
|
+
export interface MemoryServiceLike {
|
|
20
|
+
searchMemories(request: {
|
|
21
|
+
userId: number;
|
|
22
|
+
query: string;
|
|
23
|
+
limit?: number;
|
|
24
|
+
scoreThreshold?: number;
|
|
25
|
+
}): Promise<Array<{
|
|
26
|
+
memory: AiMemory;
|
|
27
|
+
score: number;
|
|
28
|
+
}>>;
|
|
29
|
+
getRelevantMemoriesForContext(userId: number, query: string, maxMemories?: number): Promise<AiMemory[]>;
|
|
30
|
+
suggestMemory(data: {
|
|
31
|
+
userId: number;
|
|
32
|
+
type: MemoryType;
|
|
33
|
+
title: string;
|
|
34
|
+
content: string;
|
|
35
|
+
sourceType: 'CHAT';
|
|
36
|
+
sourceId: string;
|
|
37
|
+
confidence: number;
|
|
38
|
+
}): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Chat service interface for internal operations
|
|
42
|
+
*/
|
|
43
|
+
export interface ChatServiceInternalLike {
|
|
44
|
+
getChat(id: string): Promise<AiChat | null>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* LLM service interface for chat completions
|
|
48
|
+
*/
|
|
49
|
+
export interface LLMServiceLike {
|
|
50
|
+
complete(request: {
|
|
51
|
+
messages: Array<{
|
|
52
|
+
role: string;
|
|
53
|
+
content: unknown;
|
|
54
|
+
}>;
|
|
55
|
+
model?: string;
|
|
56
|
+
temperature?: number;
|
|
57
|
+
maxTokens?: number;
|
|
58
|
+
tools?: Array<{
|
|
59
|
+
name: string;
|
|
60
|
+
description: string;
|
|
61
|
+
input_schema: unknown;
|
|
62
|
+
}>;
|
|
63
|
+
tool_choice?: string;
|
|
64
|
+
}): Promise<{
|
|
65
|
+
content: string;
|
|
66
|
+
model: string;
|
|
67
|
+
tokens: {
|
|
68
|
+
prompt: number;
|
|
69
|
+
completion: number;
|
|
70
|
+
total: number;
|
|
71
|
+
};
|
|
72
|
+
latencyMs: number;
|
|
73
|
+
toolCalls?: Array<{
|
|
74
|
+
id: string;
|
|
75
|
+
name: string;
|
|
76
|
+
input: Record<string, unknown>;
|
|
77
|
+
}>;
|
|
78
|
+
stopReason?: string;
|
|
79
|
+
}>;
|
|
80
|
+
stream(request: {
|
|
81
|
+
messages: Array<{
|
|
82
|
+
role: string;
|
|
83
|
+
content: unknown;
|
|
84
|
+
}>;
|
|
85
|
+
model?: string;
|
|
86
|
+
temperature?: number;
|
|
87
|
+
}): AsyncGenerator<{
|
|
88
|
+
content: string;
|
|
89
|
+
done: boolean;
|
|
90
|
+
}>;
|
|
91
|
+
}
|
|
92
|
+
export interface CreateChatDto {
|
|
93
|
+
userId: number;
|
|
94
|
+
workspaceId?: number;
|
|
95
|
+
title?: string;
|
|
96
|
+
mode?: ChatMode;
|
|
97
|
+
model?: string;
|
|
98
|
+
temperature?: number;
|
|
99
|
+
systemPrompt?: string;
|
|
100
|
+
}
|
|
101
|
+
export interface UpdateChatDto {
|
|
102
|
+
title?: string;
|
|
103
|
+
mode?: ChatMode;
|
|
104
|
+
model?: string;
|
|
105
|
+
temperature?: number;
|
|
106
|
+
systemPrompt?: string;
|
|
107
|
+
}
|
|
108
|
+
export interface SendMessageDto {
|
|
109
|
+
chatId: string;
|
|
110
|
+
content: string;
|
|
111
|
+
model?: string;
|
|
112
|
+
stream?: boolean;
|
|
113
|
+
}
|
|
114
|
+
export interface ChatMessageResponse {
|
|
115
|
+
message: AiChatMessage;
|
|
116
|
+
assistantMessage: AiChatMessage;
|
|
117
|
+
usedMemories: string[];
|
|
118
|
+
tokens: {
|
|
119
|
+
prompt: number;
|
|
120
|
+
completion: number;
|
|
121
|
+
total: number;
|
|
122
|
+
};
|
|
123
|
+
latencyMs: number;
|
|
124
|
+
structured?: import('./response.types.js').StructuredResponse;
|
|
125
|
+
/** If a write-tool needs user approval before execution */
|
|
126
|
+
pendingApproval?: PendingToolApproval;
|
|
127
|
+
}
|
|
128
|
+
export interface PendingToolApproval {
|
|
129
|
+
id: string;
|
|
130
|
+
chatId: string;
|
|
131
|
+
toolName: string;
|
|
132
|
+
toolDescription: string;
|
|
133
|
+
arguments: Record<string, unknown>;
|
|
134
|
+
/** Remaining conversation state for resuming after approval */
|
|
135
|
+
conversationState: string;
|
|
136
|
+
}
|
|
137
|
+
export interface ChatStreamChunk {
|
|
138
|
+
type: 'content' | 'memory' | 'done' | 'error';
|
|
139
|
+
content?: string;
|
|
140
|
+
memoryId?: string;
|
|
141
|
+
error?: string;
|
|
142
|
+
}
|
|
143
|
+
export interface ChatContext {
|
|
144
|
+
chat: AiChat;
|
|
145
|
+
messages: AiChatMessage[];
|
|
146
|
+
relevantMemories?: Array<{
|
|
147
|
+
id: string;
|
|
148
|
+
content: string;
|
|
149
|
+
score: number;
|
|
150
|
+
}>;
|
|
151
|
+
}
|
|
152
|
+
export interface ChatServiceDependencies {
|
|
153
|
+
prisma: Prisma.TransactionClient | PrismaClient;
|
|
154
|
+
logger: LoggerLike;
|
|
155
|
+
llmService: LLMServiceLike;
|
|
156
|
+
memoryService?: MemoryServiceLike;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Dependencies for chat memory integration
|
|
160
|
+
*/
|
|
161
|
+
export interface ChatMemoryIntegrationDependencies {
|
|
162
|
+
logger: LoggerLike;
|
|
163
|
+
memoryService: MemoryServiceLike;
|
|
164
|
+
chatService: ChatServiceInternalLike;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Result of memory search with relevance score
|
|
168
|
+
*/
|
|
169
|
+
export interface MemorySearchResult {
|
|
170
|
+
memory: AiMemory;
|
|
171
|
+
score: number;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Memory suggestion detection result
|
|
175
|
+
*/
|
|
176
|
+
export interface MemorySuggestionResult {
|
|
177
|
+
hasSuggestion: boolean;
|
|
178
|
+
suggestedContent?: string;
|
|
179
|
+
suggestedType?: MemoryType;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Detected memory from conversation
|
|
183
|
+
*/
|
|
184
|
+
export interface DetectedMemory {
|
|
185
|
+
type: MemoryType;
|
|
186
|
+
title: string;
|
|
187
|
+
content: string;
|
|
188
|
+
confidence: number;
|
|
189
|
+
trigger: string;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Configuration for memory detector
|
|
193
|
+
*/
|
|
194
|
+
export interface MemoryDetectorConfig {
|
|
195
|
+
minConfidence: number;
|
|
196
|
+
enableAutoSuggestions: boolean;
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=chat.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.types.d.ts","sourceRoot":"","sources":["../../src/chat/chat.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.types.js","sourceRoot":"","sources":["../../src/chat/chat.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGvD,yBAAyB;AACzB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat Module Index
|
|
3
|
+
* Export all Chat service components
|
|
4
|
+
*/
|
|
5
|
+
export type { ChatServiceInternalLike, LLMServiceLike, CreateChatDto, UpdateChatDto, SendMessageDto, ChatMessageResponse, ChatStreamChunk, ChatContext, ChatServiceDependencies, ChatMemoryIntegrationDependencies, MemorySuggestionResult, DetectedMemory, MemoryDetectorConfig, } from './chat.types.js';
|
|
6
|
+
export type { LoggerLike as ChatLoggerLike } from './chat.types.js';
|
|
7
|
+
export type { MemoryServiceLike as ChatMemoryServiceLike } from './chat.types.js';
|
|
8
|
+
export type { MemorySearchResult as ChatMemorySearchResult } from './chat.types.js';
|
|
9
|
+
export { ChatMode, MessageRole } from './chat.types.js';
|
|
10
|
+
export type { AiChat, AiChatMessage, AiMemory } from './chat.types.js';
|
|
11
|
+
export { ChatService, initChatService, getChatServiceDeps, } from './chat.service.js';
|
|
12
|
+
export { ChatRepository, initChatRepository, } from './chat.repository.js';
|
|
13
|
+
export { ChatMemoryIntegration, initChatMemoryIntegration, getChatMemoryIntegrationDeps, } from './chat-memory.integration.js';
|
|
14
|
+
export { MemoryDetector } from './memory-detector.js';
|
|
15
|
+
export type { MegaAgentPromptOptions } from './prompts/index.js';
|
|
16
|
+
export { MODE_PROMPTS, buildSystemPrompt, buildMemoryContextPrompt, } from './prompts/index.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chat/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,uBAAuB,EACvB,iCAAiC,EACjC,sBAAsB,EACtB,cAAc,EACd,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAClF,YAAY,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAGpF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EACL,WAAW,EACX,eAAe,EACf,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,cAAc,EACd,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC"}
|