@mtkn/mega-agent 0.3.0 → 0.5.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/README.md +145 -14
- package/dist/artifact/artifact.repository.d.ts +2 -1
- package/dist/artifact/artifact.repository.d.ts.map +1 -1
- package/dist/artifact/artifact.repository.js +12 -2
- package/dist/artifact/artifact.repository.js.map +1 -1
- package/dist/artifact/artifact.service.d.ts +1 -0
- package/dist/artifact/artifact.service.d.ts.map +1 -1
- package/dist/artifact/artifact.service.js +11 -1
- package/dist/artifact/artifact.service.js.map +1 -1
- package/dist/artifact/index.d.ts +2 -2
- package/dist/artifact/index.d.ts.map +1 -1
- package/dist/artifact/index.js +2 -2
- package/dist/artifact/index.js.map +1 -1
- package/dist/chat/chat-memory.integration.d.ts +1 -0
- package/dist/chat/chat-memory.integration.d.ts.map +1 -1
- package/dist/chat/chat-memory.integration.js +9 -0
- package/dist/chat/chat-memory.integration.js.map +1 -1
- package/dist/chat/chat.repository.d.ts +2 -1
- package/dist/chat/chat.repository.d.ts.map +1 -1
- package/dist/chat/chat.repository.js +12 -2
- package/dist/chat/chat.repository.js.map +1 -1
- package/dist/chat/chat.service.d.ts +1 -0
- package/dist/chat/chat.service.d.ts.map +1 -1
- package/dist/chat/chat.service.js +15 -3
- package/dist/chat/chat.service.js.map +1 -1
- package/dist/chat/index.d.ts +3 -3
- package/dist/chat/index.d.ts.map +1 -1
- package/dist/chat/index.js +3 -3
- package/dist/chat/index.js.map +1 -1
- package/dist/common/errors.d.ts +6 -0
- package/dist/common/errors.d.ts.map +1 -1
- package/dist/common/errors.js +12 -0
- package/dist/common/errors.js.map +1 -1
- package/dist/common/index.d.ts +1 -0
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +1 -0
- package/dist/common/index.js.map +1 -1
- package/dist/common/url-validator.d.ts +10 -0
- package/dist/common/url-validator.d.ts.map +1 -0
- package/dist/common/url-validator.js +27 -0
- package/dist/common/url-validator.js.map +1 -0
- package/dist/create-mega-agent.d.ts +15 -2
- package/dist/create-mega-agent.d.ts.map +1 -1
- package/dist/create-mega-agent.js +251 -97
- package/dist/create-mega-agent.js.map +1 -1
- package/dist/embedding/embedding.service.d.ts +1 -0
- package/dist/embedding/embedding.service.d.ts.map +1 -1
- package/dist/embedding/embedding.service.js +9 -0
- package/dist/embedding/embedding.service.js.map +1 -1
- package/dist/embedding/index.d.ts +1 -1
- package/dist/embedding/index.d.ts.map +1 -1
- package/dist/embedding/index.js +1 -1
- package/dist/embedding/index.js.map +1 -1
- package/dist/http/error-handler.middleware.d.ts +9 -0
- package/dist/http/error-handler.middleware.d.ts.map +1 -0
- package/dist/http/error-handler.middleware.js +21 -0
- package/dist/http/error-handler.middleware.js.map +1 -0
- package/dist/incident/incident.correlator.d.ts +1 -0
- package/dist/incident/incident.correlator.d.ts.map +1 -1
- package/dist/incident/incident.correlator.js +9 -0
- package/dist/incident/incident.correlator.js.map +1 -1
- package/dist/incident/incident.detector.d.ts +1 -0
- package/dist/incident/incident.detector.d.ts.map +1 -1
- package/dist/incident/incident.detector.js +9 -0
- package/dist/incident/incident.detector.js.map +1 -1
- package/dist/incident/incident.repository.d.ts +2 -1
- package/dist/incident/incident.repository.d.ts.map +1 -1
- package/dist/incident/incident.repository.js +17 -7
- package/dist/incident/incident.repository.js.map +1 -1
- package/dist/incident/incident.service.d.ts +1 -0
- package/dist/incident/incident.service.d.ts.map +1 -1
- package/dist/incident/incident.service.js +11 -1
- package/dist/incident/incident.service.js.map +1 -1
- package/dist/incident/index.d.ts +4 -4
- package/dist/incident/index.d.ts.map +1 -1
- package/dist/incident/index.js +4 -4
- package/dist/incident/index.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/llm/index.d.ts +2 -2
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +1 -1
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/llm.service.d.ts +1 -0
- package/dist/llm/llm.service.d.ts.map +1 -1
- package/dist/llm/llm.service.js +9 -0
- package/dist/llm/llm.service.js.map +1 -1
- package/dist/llm/llm.types.d.ts +14 -8
- package/dist/llm/llm.types.d.ts.map +1 -1
- package/dist/llm/providers/anthropic.provider.d.ts.map +1 -1
- package/dist/llm/providers/anthropic.provider.js +64 -5
- package/dist/llm/providers/anthropic.provider.js.map +1 -1
- package/dist/llm/providers/openai.provider.d.ts +6 -0
- package/dist/llm/providers/openai.provider.d.ts.map +1 -1
- package/dist/llm/providers/openai.provider.js +202 -11
- package/dist/llm/providers/openai.provider.js.map +1 -1
- package/dist/mcp/index.d.ts +3 -3
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +3 -3
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/mcp.service.d.ts +9 -0
- package/dist/mcp/mcp.service.d.ts.map +1 -1
- package/dist/mcp/mcp.service.js +31 -0
- package/dist/mcp/mcp.service.js.map +1 -1
- package/dist/mcp/source.repository.d.ts +2 -1
- package/dist/mcp/source.repository.d.ts.map +1 -1
- package/dist/mcp/source.repository.js +14 -4
- package/dist/mcp/source.repository.js.map +1 -1
- package/dist/mcp/source.service.d.ts +1 -0
- package/dist/mcp/source.service.d.ts.map +1 -1
- package/dist/mcp/source.service.js +11 -1
- package/dist/mcp/source.service.js.map +1 -1
- package/dist/memory/index.d.ts +2 -2
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +2 -2
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/memory.repository.d.ts +2 -1
- package/dist/memory/memory.repository.d.ts.map +1 -1
- package/dist/memory/memory.repository.js +19 -9
- package/dist/memory/memory.repository.js.map +1 -1
- package/dist/memory/memory.service.d.ts +2 -1
- package/dist/memory/memory.service.d.ts.map +1 -1
- package/dist/memory/memory.service.js +13 -2
- package/dist/memory/memory.service.js.map +1 -1
- package/dist/qdrant/qdrant.service.d.ts +1 -0
- package/dist/qdrant/qdrant.service.d.ts.map +1 -1
- package/dist/qdrant/qdrant.service.js +11 -1
- package/dist/qdrant/qdrant.service.js.map +1 -1
- package/dist/qdrant/qdrant.types.d.ts +5 -0
- package/dist/qdrant/qdrant.types.d.ts.map +1 -1
- package/dist/tools/core-tools.js +1 -1
- package/dist/tools/core-tools.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/prisma-helpers.d.ts +18 -0
- package/dist/types/prisma-helpers.d.ts.map +1 -0
- package/dist/types/prisma-helpers.js +8 -0
- package/dist/types/prisma-helpers.js.map +1 -0
- package/dist/workflow/actions/base.action.d.ts +3 -1
- package/dist/workflow/actions/base.action.d.ts.map +1 -1
- package/dist/workflow/actions/base.action.js +2 -0
- package/dist/workflow/actions/base.action.js.map +1 -1
- package/dist/workflow/actions/notify.action.d.ts.map +1 -1
- package/dist/workflow/actions/notify.action.js +15 -5
- package/dist/workflow/actions/notify.action.js.map +1 -1
- package/dist/workflow/index.d.ts +2 -2
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +2 -2
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/workflow.repository.d.ts +1 -0
- package/dist/workflow/workflow.repository.d.ts.map +1 -1
- package/dist/workflow/workflow.repository.js +13 -3
- package/dist/workflow/workflow.repository.js.map +1 -1
- package/dist/workflow/workflow.service.d.ts +1 -0
- package/dist/workflow/workflow.service.d.ts.map +1 -1
- package/dist/workflow/workflow.service.js +44 -20
- package/dist/workflow/workflow.service.js.map +1 -1
- package/dist/workflow/workflow.types.d.ts +17 -0
- package/dist/workflow/workflow.types.d.ts.map +1 -1
- package/package.json +1 -2
- package/prisma/schema.prisma +2 -2
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ AI-powered agent infrastructure for Express + Prisma backends. Drop-in chat API
|
|
|
14
14
|
- **Incident detection** — anomaly detection with severity levels
|
|
15
15
|
- **Workflow automation** — schedule, event, threshold, and manual triggers
|
|
16
16
|
- **Artifact storage** — reports, tables, charts, code, images, datasets
|
|
17
|
-
- **MCP support** — Model Context Protocol for external data sources
|
|
17
|
+
- **MCP support** — Model Context Protocol for external data sources _(not managed by `createMegaAgent`; must be initialized and disposed separately — see [MCP section](#mcp))_
|
|
18
18
|
- **Prisma persistence** — 12 models, fully typed
|
|
19
19
|
|
|
20
20
|
## Quick Start
|
|
@@ -55,7 +55,6 @@ app.use('/api/chat', agent.createChatRouter(authMiddleware));
|
|
|
55
55
|
|---|---|
|
|
56
56
|
| Qdrant | Vector database for semantic search |
|
|
57
57
|
| OpenAI API | Embedding model (`text-embedding-3-small`) |
|
|
58
|
-
| Redis + BullMQ | Job queue (for workflows) |
|
|
59
58
|
|
|
60
59
|
## Installation
|
|
61
60
|
|
|
@@ -69,7 +68,7 @@ npm install -D prisma @types/express typescript
|
|
|
69
68
|
|
|
70
69
|
## Prisma Schema Setup
|
|
71
70
|
|
|
72
|
-
The package requires
|
|
71
|
+
The package requires 15 enums and 12 models in your Prisma schema.
|
|
73
72
|
|
|
74
73
|
### Option A: Automatic Sync (Recommended)
|
|
75
74
|
|
|
@@ -181,8 +180,8 @@ npx prisma generate
|
|
|
181
180
|
|
|
182
181
|
```typescript
|
|
183
182
|
interface MegaAgentConfig {
|
|
184
|
-
/** Prisma client instance */
|
|
185
|
-
prisma: PrismaClient;
|
|
183
|
+
/** Prisma client instance (also accepts TransactionClient) */
|
|
184
|
+
prisma: PrismaClient | Prisma.TransactionClient;
|
|
186
185
|
|
|
187
186
|
/** Logger with info/error/warn/debug methods */
|
|
188
187
|
logger: LoggerLike;
|
|
@@ -208,6 +207,7 @@ interface MegaAgentConfig {
|
|
|
208
207
|
host: string; // default: 'localhost'
|
|
209
208
|
port: number; // default: 6333
|
|
210
209
|
apiKey?: string;
|
|
210
|
+
userIdType?: 'string' | 'number'; // default: 'number'
|
|
211
211
|
};
|
|
212
212
|
};
|
|
213
213
|
|
|
@@ -250,6 +250,10 @@ export async function initChatModule(app: Express): Promise<void> {
|
|
|
250
250
|
});
|
|
251
251
|
}
|
|
252
252
|
|
|
253
|
+
if (providers.length === 0) {
|
|
254
|
+
throw new Error('At least one LLM API key must be set (ANTHROPIC_API_KEY or OPENAI_API_KEY)');
|
|
255
|
+
}
|
|
256
|
+
|
|
253
257
|
// Memory config (optional — requires OpenAI key + Qdrant)
|
|
254
258
|
const memory = process.env.OPENAI_API_KEY
|
|
255
259
|
? {
|
|
@@ -407,6 +411,43 @@ if (getWorkflowServiceDeps()) {
|
|
|
407
411
|
}
|
|
408
412
|
```
|
|
409
413
|
|
|
414
|
+
You can also mount the chat router directly using `createChatRoutes` — the same low-level function that `agent.createChatRouter()` uses internally:
|
|
415
|
+
|
|
416
|
+
```typescript
|
|
417
|
+
import { createChatRoutes, ChatController } from '@mtkn/mega-agent';
|
|
418
|
+
|
|
419
|
+
// Requires services to be initialized (via createMegaAgent or manually)
|
|
420
|
+
const controller = new ChatController();
|
|
421
|
+
const router = createChatRoutes(controller, authMiddleware);
|
|
422
|
+
app.use('/api/chat', router);
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### MCP
|
|
426
|
+
|
|
427
|
+
MCP services (`McpService`, `SourceService`) are **not** managed by `createMegaAgent()`. They must be initialized and disposed separately:
|
|
428
|
+
|
|
429
|
+
```typescript
|
|
430
|
+
import {
|
|
431
|
+
initMcpService,
|
|
432
|
+
McpService,
|
|
433
|
+
disposeMcpService,
|
|
434
|
+
initSourceService,
|
|
435
|
+
SourceService,
|
|
436
|
+
disposeSourceService,
|
|
437
|
+
} from '@mtkn/mega-agent';
|
|
438
|
+
|
|
439
|
+
// Initialize
|
|
440
|
+
initMcpService({ prisma, logger });
|
|
441
|
+
initSourceService({ prisma, logger });
|
|
442
|
+
|
|
443
|
+
const mcp = new McpService();
|
|
444
|
+
const sources = new SourceService();
|
|
445
|
+
|
|
446
|
+
// Dispose (async — must be awaited)
|
|
447
|
+
await disposeMcpService();
|
|
448
|
+
await disposeSourceService();
|
|
449
|
+
```
|
|
450
|
+
|
|
410
451
|
## API Endpoints
|
|
411
452
|
|
|
412
453
|
The chat router creates the following endpoints:
|
|
@@ -443,9 +484,15 @@ Content-Type: application/json
|
|
|
443
484
|
"data": {
|
|
444
485
|
"userMessage": { "id": "...", "role": "USER", "content": "..." },
|
|
445
486
|
"assistantMessage": { "id": "...", "role": "ASSISTANT", "content": "..." },
|
|
446
|
-
"
|
|
487
|
+
"usedMemories": [],
|
|
447
488
|
"tokens": { "prompt": 1200, "completion": 350, "total": 1550 },
|
|
448
|
-
"latencyMs": 2340
|
|
489
|
+
"latencyMs": 2340,
|
|
490
|
+
"structured": {
|
|
491
|
+
"type": "answer",
|
|
492
|
+
"content": "Here are today's production stats...",
|
|
493
|
+
"quality": { "signal": "strong", "confidence": 0.92 },
|
|
494
|
+
"toolsUsed": [{ "name": "get_dashboard", "description": "Get dashboard data", "executionTimeMs": 120 }]
|
|
495
|
+
}
|
|
449
496
|
}
|
|
450
497
|
}
|
|
451
498
|
```
|
|
@@ -458,6 +505,7 @@ Content-Type: application/json
|
|
|
458
505
|
"data": {
|
|
459
506
|
"userMessage": { "id": "...", "role": "USER", "content": "..." },
|
|
460
507
|
"assistantMessage": { "id": "...", "role": "ASSISTANT", "content": "I want to execute **create_order**..." },
|
|
508
|
+
"usedMemories": [],
|
|
461
509
|
"pendingApproval": {
|
|
462
510
|
"id": "a1b2c3d4-...",
|
|
463
511
|
"chatId": "chat-id",
|
|
@@ -473,6 +521,32 @@ Content-Type: application/json
|
|
|
473
521
|
|
|
474
522
|
Use the `pendingApproval.id` value as the `approvalId` when calling the approve or reject endpoints.
|
|
475
523
|
|
|
524
|
+
### Structured Response
|
|
525
|
+
|
|
526
|
+
The `structured` field is a parsed representation of the LLM output, designed for rich frontend rendering. It is present on both regular and approve responses.
|
|
527
|
+
|
|
528
|
+
```typescript
|
|
529
|
+
interface StructuredResponse {
|
|
530
|
+
type: 'answer' | 'table' | 'chart' | 'agent_created' | 'report' | 'error';
|
|
531
|
+
content: string; // Markdown content (always present)
|
|
532
|
+
data?: TableData | ChartData | AgentData | Record<string, unknown>;
|
|
533
|
+
quality?: { signal: 'strong' | 'moderate' | 'weak'; confidence: number; reasoning?: string };
|
|
534
|
+
sources?: { name: string; type: 'memory' | 'database' | 'api' | 'tool' | 'document'; relevance: number }[];
|
|
535
|
+
toolsUsed?: { name: string; description: string; executionTimeMs?: number }[];
|
|
536
|
+
memory?: { saved?: boolean; savedContent?: string; referencedIds?: string[] };
|
|
537
|
+
artifact?: { suggestedTitle: string; type: 'TABLE' | 'CHART' | 'REPORT' | 'CODE' | 'DATASET'; data: unknown };
|
|
538
|
+
}
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
| Type | When |
|
|
542
|
+
|------|------|
|
|
543
|
+
| `answer` | Default — plain text or markdown response |
|
|
544
|
+
| `table` | Response contains tabular data (`data` is `TableData`) |
|
|
545
|
+
| `chart` | Response contains chart data (`data` is `ChartData`) |
|
|
546
|
+
| `report` | Response is a generated report |
|
|
547
|
+
| `agent_created` | A workflow agent was created (`data` is `AgentData`) |
|
|
548
|
+
| `error` | An error occurred during processing |
|
|
549
|
+
|
|
476
550
|
**SSE Streaming:**
|
|
477
551
|
|
|
478
552
|
When `stream: true`, the response uses Server-Sent Events:
|
|
@@ -480,10 +554,10 @@ When `stream: true`, the response uses Server-Sent Events:
|
|
|
480
554
|
```
|
|
481
555
|
Content-Type: text/event-stream
|
|
482
556
|
|
|
483
|
-
data: {"type":"
|
|
484
|
-
data: {"type":"
|
|
485
|
-
data: {"type":"
|
|
486
|
-
data: {"type":"done"
|
|
557
|
+
data: {"type":"content","content":"Here are"}
|
|
558
|
+
data: {"type":"content","content":" today's stats..."}
|
|
559
|
+
data: {"type":"tool_status","toolName":"get_dashboard","content":"Executing get_dashboard..."}
|
|
560
|
+
data: {"type":"done"}
|
|
487
561
|
```
|
|
488
562
|
|
|
489
563
|
### Approve Tool Call
|
|
@@ -507,7 +581,13 @@ The server executes the tool using the original `toolName` and `arguments` store
|
|
|
507
581
|
"data": {
|
|
508
582
|
"assistantMessage": { "id": "...", "role": "ASSISTANT", "content": "Order created successfully..." },
|
|
509
583
|
"tokens": { "prompt": 2100, "completion": 220, "total": 2320 },
|
|
510
|
-
"latencyMs": 3100
|
|
584
|
+
"latencyMs": 3100,
|
|
585
|
+
"structured": {
|
|
586
|
+
"type": "answer",
|
|
587
|
+
"content": "Order created successfully...",
|
|
588
|
+
"quality": { "signal": "strong", "confidence": 0.95 },
|
|
589
|
+
"toolsUsed": [{ "name": "create_order", "description": "Create a new order. Requires approval.", "executionTimeMs": 85 }]
|
|
590
|
+
}
|
|
511
591
|
}
|
|
512
592
|
}
|
|
513
593
|
```
|
|
@@ -571,14 +651,14 @@ Agent processes with LLM
|
|
|
571
651
|
│
|
|
572
652
|
├── POST /:id/approve { approvalId } → executes tool → agent continues
|
|
573
653
|
│
|
|
574
|
-
└── POST /:id/reject { approvalId } → approval cancelled
|
|
654
|
+
└── POST /:id/reject { approvalId } → approval cancelled
|
|
575
655
|
```
|
|
576
656
|
|
|
577
657
|
Conversation state (LLM message history) is stored **server-side** in an in-memory store with a 10-minute TTL. The client only receives an opaque `approvalId` — never the raw conversation state.
|
|
578
658
|
|
|
579
659
|
## Prisma Models
|
|
580
660
|
|
|
581
|
-
The package uses 12 models and
|
|
661
|
+
The package uses 12 models and 15 enums:
|
|
582
662
|
|
|
583
663
|
| Model | Purpose |
|
|
584
664
|
|-------|---------|
|
|
@@ -595,6 +675,20 @@ The package uses 12 models and 16 enums:
|
|
|
595
675
|
| `AiTimelineEvent` | Event log for audit trail |
|
|
596
676
|
| `AiUserPreferences` | Per-user AI settings |
|
|
597
677
|
|
|
678
|
+
### MemoryType Enum
|
|
679
|
+
|
|
680
|
+
The `create_memory` tool and `MemoryService` use the `MemoryType` enum to categorize stored memories:
|
|
681
|
+
|
|
682
|
+
| Value | Description |
|
|
683
|
+
|-------|-------------|
|
|
684
|
+
| `FACT` | Concrete, verifiable piece of information |
|
|
685
|
+
| `INSIGHT` | Analytical observation or inference derived from data |
|
|
686
|
+
| `DECISION` | A choice or resolution made by the user or system |
|
|
687
|
+
| `PATTERN` | Recurring trend or behavior detected over time |
|
|
688
|
+
| `INCIDENT` | Anomaly or notable event captured by the incident service |
|
|
689
|
+
| `REPORT_SUMMARY` | Condensed summary of a generated report |
|
|
690
|
+
| `USER_PREFERENCE` | User-specific setting or preference |
|
|
691
|
+
|
|
598
692
|
## Environment Variables
|
|
599
693
|
|
|
600
694
|
| Variable | Required | Description | Default |
|
|
@@ -630,6 +724,12 @@ interface MegaAgent {
|
|
|
630
724
|
|
|
631
725
|
/** Create Express router with all chat endpoints */
|
|
632
726
|
createChatRouter(authMiddleware: AuthMiddleware): Router;
|
|
727
|
+
|
|
728
|
+
/** Create Express error-handler middleware that formats MegaAgentError responses */
|
|
729
|
+
createErrorHandler(): ErrorRequestHandler;
|
|
730
|
+
|
|
731
|
+
/** Dispose all services and reset module state. Must be called before re-initializing. */
|
|
732
|
+
dispose(): void;
|
|
633
733
|
}
|
|
634
734
|
```
|
|
635
735
|
|
|
@@ -687,6 +787,37 @@ All service methods accept `UserId` for the `userId` parameter, so your app work
|
|
|
687
787
|
|
|
688
788
|
## Changelog
|
|
689
789
|
|
|
790
|
+
### v0.5.0
|
|
791
|
+
|
|
792
|
+
- **Breaking: `bullmq` dependency removed** — Redis + BullMQ is no longer a dependency. Workflow job queue must be provided externally if needed.
|
|
793
|
+
- **Breaking: `MemoryType` enum changed** — `PROCEDURE` removed; `INCIDENT`, `REPORT_SUMMARY`, `USER_PREFERENCE` added.
|
|
794
|
+
- **Breaking: SSE event types renamed** — `chunk` → `content`, `tool_call` → `tool_status`. `done` event no longer includes token data.
|
|
795
|
+
- **Breaking: Response field renamed** — `memories` → `usedMemories` in chat and approve responses.
|
|
796
|
+
- **Structured response** — New `structured` field in chat and approve responses with typed output (`answer`, `table`, `chart`, `report`, `agent_created`, `error`), quality signal, sources, and tools used.
|
|
797
|
+
- **TransactionClient support** — `MegaAgentConfig.prisma` now accepts `PrismaClient | Prisma.TransactionClient`.
|
|
798
|
+
- **`createChatRoutes` export** — Low-level chat router factory is now documented and available for manual mounting.
|
|
799
|
+
- **MCP lifecycle docs** — `McpService` and `SourceService` are not managed by `createMegaAgent`; init/dispose documented separately.
|
|
800
|
+
- **`userIdType` config option** — Qdrant config now accepts `userIdType: 'string' | 'number'`.
|
|
801
|
+
- **Package rename refs** — Internal comments updated from `@7style/mega-agent` to `@mtkn/mega-agent`.
|
|
802
|
+
- **Enum count fix** — Documentation corrected from 16 enums to 15.
|
|
803
|
+
|
|
804
|
+
### v0.4.0
|
|
805
|
+
|
|
806
|
+
- **Breaking: Zero LLM providers now throws** — `createMegaAgent()` throws `ConfigValidationError` if `llm.providers` is empty. Previously it only logged a warning, causing all chat operations to fail at runtime.
|
|
807
|
+
- **Config validation** — `prisma`, `logger`, and `llm.providers` are validated at startup. Missing required fields throw `ConfigValidationError` with a descriptive message.
|
|
808
|
+
- **Race condition fix** — Concurrent `createMegaAgent()` calls are now blocked by an `_megaAgentInitializing` guard, preventing double initialization.
|
|
809
|
+
- **Init rollback** — If any service fails during initialization, all previously initialized services are disposed in reverse order. No more orphaned services.
|
|
810
|
+
- **Idempotent dispose** — `dispose()` immediately sets `_megaAgentInitialized = false` before teardown (flag-first pattern). Double-calling `dispose()` is a safe no-op.
|
|
811
|
+
- **Type safety: discriminated unions** — `LLMContentBlock` is now a discriminated union type instead of a single interface with optional fields. Non-null assertions (`!`) removed from both OpenAI and Anthropic providers.
|
|
812
|
+
- **New export:** `ConfigValidationError` error class.
|
|
813
|
+
- **New method:** `createErrorHandler()` — Express error-handler middleware that formats `MegaAgentError` responses and hides stack traces in production.
|
|
814
|
+
|
|
815
|
+
### v0.3.1
|
|
816
|
+
|
|
817
|
+
- **Init guard** — `createMegaAgent()` now throws `AlreadyInitializedError` if called twice without calling `dispose()` first. All 19 service modules have the same guard.
|
|
818
|
+
- **Dispose lifecycle** — `MegaAgent.dispose()` resets all module state in reverse initialization order, allowing safe re-initialization.
|
|
819
|
+
- **MCP instance guard** — `new McpService()` throws if an instance already exists. `disposeMcpService()` is async and disconnects all active servers.
|
|
820
|
+
|
|
690
821
|
### v0.3.0
|
|
691
822
|
|
|
692
823
|
- **Security: Server-side conversation state** — LLM message history is no longer sent to the client. Conversation state is stored in an in-memory store with a 10-minute TTL. Clients receive only an opaque `approvalId`.
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { AiArtifact } from '@prisma/client';
|
|
6
6
|
import type { CreateArtifactDto, UpdateArtifactDto, ArtifactListQuery, ArtifactServiceDependencies } from './artifact.types.js';
|
|
7
|
-
import type
|
|
7
|
+
import { type UserId } from '../types/index.js';
|
|
8
8
|
export declare function initArtifactRepository(deps: ArtifactServiceDependencies): void;
|
|
9
|
+
export declare function disposeArtifactRepository(): void;
|
|
9
10
|
export declare class ArtifactRepository {
|
|
10
11
|
private get prisma();
|
|
11
12
|
create(data: CreateArtifactDto): Promise<AiArtifact>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact.repository.d.ts","sourceRoot":"","sources":["../../src/artifact/artifact.repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAChI,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"artifact.repository.d.ts","sourceRoot":"","sources":["../../src/artifact/artifact.repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAChI,OAAO,EAAE,KAAK,MAAM,EAAkB,MAAM,mBAAmB,CAAC;AAMhE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,2BAA2B,GAAG,IAAI,CAI9E;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAGhD;AAED,qBAAa,kBAAkB;IAC7B,OAAO,KAAK,MAAM,GAGjB;IAEK,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBpD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIhD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAY5E,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOjD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAahE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxC"}
|
|
@@ -2,9 +2,19 @@
|
|
|
2
2
|
* Artifact Repository
|
|
3
3
|
* Data access layer for artifact operations
|
|
4
4
|
*/
|
|
5
|
+
import { toPrismaUserId } from '../types/index.js';
|
|
6
|
+
import { AlreadyInitializedError } from '../common/errors.js';
|
|
5
7
|
let _deps = null;
|
|
8
|
+
let _initialized = false;
|
|
6
9
|
export function initArtifactRepository(deps) {
|
|
10
|
+
if (_initialized)
|
|
11
|
+
throw new AlreadyInitializedError('ArtifactRepository');
|
|
7
12
|
_deps = deps;
|
|
13
|
+
_initialized = true;
|
|
14
|
+
}
|
|
15
|
+
export function disposeArtifactRepository() {
|
|
16
|
+
_deps = null;
|
|
17
|
+
_initialized = false;
|
|
8
18
|
}
|
|
9
19
|
export class ArtifactRepository {
|
|
10
20
|
get prisma() {
|
|
@@ -15,7 +25,7 @@ export class ArtifactRepository {
|
|
|
15
25
|
async create(data) {
|
|
16
26
|
return this.prisma.aiArtifact.create({
|
|
17
27
|
data: {
|
|
18
|
-
userId: data.userId,
|
|
28
|
+
userId: toPrismaUserId(data.userId),
|
|
19
29
|
type: data.type,
|
|
20
30
|
title: data.title,
|
|
21
31
|
description: data.description,
|
|
@@ -33,7 +43,7 @@ export class ArtifactRepository {
|
|
|
33
43
|
async findByUser(userId, query) {
|
|
34
44
|
return this.prisma.aiArtifact.findMany({
|
|
35
45
|
where: {
|
|
36
|
-
userId: userId,
|
|
46
|
+
userId: toPrismaUserId(userId),
|
|
37
47
|
...(query?.type && { type: query.type }),
|
|
38
48
|
},
|
|
39
49
|
orderBy: { createdAt: 'desc' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact.repository.js","sourceRoot":"","sources":["../../src/artifact/artifact.repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"artifact.repository.js","sourceRoot":"","sources":["../../src/artifact/artifact.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import type { AiArtifact } from '@prisma/client';
|
|
|
6
6
|
import type { CreateArtifactDto, UpdateArtifactDto, ArtifactListQuery, ArtifactServiceDependencies } from './artifact.types.js';
|
|
7
7
|
import type { UserId } from '../types/index.js';
|
|
8
8
|
export declare function initArtifactService(deps: ArtifactServiceDependencies): void;
|
|
9
|
+
export declare function disposeArtifactService(): void;
|
|
9
10
|
export declare function getArtifactServiceDeps(): ArtifactServiceDependencies | null;
|
|
10
11
|
export declare class ArtifactService {
|
|
11
12
|
private repository;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact.service.d.ts","sourceRoot":"","sources":["../../src/artifact/artifact.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,2BAA2B,EAC5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"artifact.service.d.ts","sourceRoot":"","sources":["../../src/artifact/artifact.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,2BAA2B,EAC5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMhD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,2BAA2B,GAAG,IAAI,CAK3E;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAI7C;AAED,wBAAgB,sBAAsB,IAAI,2BAA2B,GAAG,IAAI,CAE3E;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAqB;;IAQvC,OAAO,KAAK,MAAM,GAA4B;IAIxC,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAMpD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI/C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI5E,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIjD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAIhE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjC,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAC/B,OAAO,CAAC,UAAU,CAAC;IAahB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CA6BzE"}
|
|
@@ -2,11 +2,21 @@
|
|
|
2
2
|
* Artifact Service
|
|
3
3
|
* Core service for managing chat-generated artifacts
|
|
4
4
|
*/
|
|
5
|
-
import { ArtifactRepository, initArtifactRepository } from './artifact.repository.js';
|
|
5
|
+
import { ArtifactRepository, initArtifactRepository, disposeArtifactRepository } from './artifact.repository.js';
|
|
6
|
+
import { AlreadyInitializedError } from '../common/errors.js';
|
|
6
7
|
let _deps = null;
|
|
8
|
+
let _initialized = false;
|
|
7
9
|
export function initArtifactService(deps) {
|
|
10
|
+
if (_initialized)
|
|
11
|
+
throw new AlreadyInitializedError('ArtifactService');
|
|
8
12
|
_deps = deps;
|
|
9
13
|
initArtifactRepository(deps);
|
|
14
|
+
_initialized = true;
|
|
15
|
+
}
|
|
16
|
+
export function disposeArtifactService() {
|
|
17
|
+
disposeArtifactRepository();
|
|
18
|
+
_deps = null;
|
|
19
|
+
_initialized = false;
|
|
10
20
|
}
|
|
11
21
|
export function getArtifactServiceDeps() {
|
|
12
22
|
return _deps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact.service.js","sourceRoot":"","sources":["../../src/artifact/artifact.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"artifact.service.js","sourceRoot":"","sources":["../../src/artifact/artifact.service.ts"],"names":[],"mappings":"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"}
|
package/dist/artifact/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type { CreateArtifactDto, UpdateArtifactDto, ArtifactListQuery, ArtifactServiceDependencies } from './artifact.types.js';
|
|
2
2
|
export { ArtifactType } from './artifact.types.js';
|
|
3
3
|
export type { AiArtifact } from './artifact.types.js';
|
|
4
|
-
export { ArtifactService, initArtifactService, getArtifactServiceDeps } from './artifact.service.js';
|
|
5
|
-
export { ArtifactRepository, initArtifactRepository } from './artifact.repository.js';
|
|
4
|
+
export { ArtifactService, initArtifactService, getArtifactServiceDeps, disposeArtifactService } from './artifact.service.js';
|
|
5
|
+
export { ArtifactRepository, initArtifactRepository, disposeArtifactRepository } from './artifact.repository.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/artifact/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAChI,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/artifact/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAChI,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC7H,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/artifact/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { ArtifactType } from './artifact.types.js';
|
|
2
|
-
export { ArtifactService, initArtifactService, getArtifactServiceDeps } from './artifact.service.js';
|
|
3
|
-
export { ArtifactRepository, initArtifactRepository } from './artifact.repository.js';
|
|
2
|
+
export { ArtifactService, initArtifactService, getArtifactServiceDeps, disposeArtifactService } from './artifact.service.js';
|
|
3
|
+
export { ArtifactRepository, initArtifactRepository, disposeArtifactRepository } from './artifact.repository.js';
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/artifact/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/artifact/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC7H,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -10,6 +10,7 @@ import type { UserId } from '../types/index.js';
|
|
|
10
10
|
* Initialize the Chat Memory Integration with dependencies
|
|
11
11
|
*/
|
|
12
12
|
export declare function initChatMemoryIntegration(deps: ChatMemoryIntegrationDependencies): void;
|
|
13
|
+
export declare function disposeChatMemoryIntegration(): void;
|
|
13
14
|
/**
|
|
14
15
|
* Get the current integration dependencies
|
|
15
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-memory.integration.d.ts","sourceRoot":"","sources":["../../src/chat/chat-memory.integration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EACV,iCAAiC,EAGjC,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-memory.integration.d.ts","sourceRoot":"","sources":["../../src/chat/chat-memory.integration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EACV,iCAAiC,EAGjC,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAQhD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,iCAAiC,GAAG,IAAI,CAIvF;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAGnD;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,iCAAiC,GAAG,IAAI,CAEvF;AAID;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,yDAAyD;IACzD,MAAM,CAAC,QAAQ,CAAC,mBAAmB,QAAQ;IAE3C,8CAA8C;IAC9C,MAAM,CAAC,QAAQ,CAAC,oBAAoB,KAAK;;IAQzC,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,aAAa,GAExB;IAED;;;OAGG;IACG,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAqBhC;;;OAGG;IACH,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,MAAM;IAsB1D;;;OAGG;IACH,uBAAuB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,WAAW,GAAE,MAAU,GAAG,MAAM;IAQnF;;;OAGG;IACG,iBAAiB,CACrB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC;IAIhB;;;OAGG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB;IAuBhE;;;OAGG;IACG,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,UAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC;CAmBjB"}
|
|
@@ -3,13 +3,22 @@
|
|
|
3
3
|
* Integrates the Memory System into the Chat Service
|
|
4
4
|
* Handles memory retrieval, context injection, and memory suggestion creation
|
|
5
5
|
*/
|
|
6
|
+
import { AlreadyInitializedError } from '../common/errors.js';
|
|
6
7
|
// ==================== MODULE STATE ====================
|
|
7
8
|
let _deps = null;
|
|
9
|
+
let _initialized = false;
|
|
8
10
|
/**
|
|
9
11
|
* Initialize the Chat Memory Integration with dependencies
|
|
10
12
|
*/
|
|
11
13
|
export function initChatMemoryIntegration(deps) {
|
|
14
|
+
if (_initialized)
|
|
15
|
+
throw new AlreadyInitializedError('ChatMemoryIntegration');
|
|
12
16
|
_deps = deps;
|
|
17
|
+
_initialized = true;
|
|
18
|
+
}
|
|
19
|
+
export function disposeChatMemoryIntegration() {
|
|
20
|
+
_deps = null;
|
|
21
|
+
_initialized = false;
|
|
13
22
|
}
|
|
14
23
|
/**
|
|
15
24
|
* Get the current integration dependencies
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-memory.integration.js","sourceRoot":"","sources":["../../src/chat/chat-memory.integration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"chat-memory.integration.js","sourceRoot":"","sources":["../../src/chat/chat-memory.integration.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { AiChat, AiChatMessage } from '@prisma/client';
|
|
6
6
|
import type { CreateChatDto, UpdateChatDto, ChatServiceDependencies } from './chat.types.js';
|
|
7
|
-
import type
|
|
7
|
+
import { type UserId } from '../types/index.js';
|
|
8
8
|
/**
|
|
9
9
|
* Initialize the Chat repository with dependencies
|
|
10
10
|
*/
|
|
11
11
|
export declare function initChatRepository(deps: ChatServiceDependencies): void;
|
|
12
|
+
export declare function disposeChatRepository(): void;
|
|
12
13
|
export declare class ChatRepository {
|
|
13
14
|
private get prisma();
|
|
14
15
|
private get logger();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.repository.d.ts","sourceRoot":"","sources":["../../src/chat/chat.repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"chat.repository.d.ts","sourceRoot":"","sources":["../../src/chat/chat.repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,KAAK,MAAM,EAAkB,MAAM,mBAAmB,CAAC;AAMhE;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAItE;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED,qBAAa,cAAc;IACzB,OAAO,KAAK,MAAM,GAGjB;IAED,OAAO,KAAK,MAAM,GAGjB;IAED;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBtD;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIlD;;OAEG;IACG,oBAAoB,CACxB,EAAE,EAAE,MAAM,EACV,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,CAAC,MAAM,GAAG;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAY3D;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQnE;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAOlE;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C;;OAEG;IACG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,EACrC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,GACA,OAAO,CAAC,aAAa,CAAC;IAsBzB;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,IAAI,GACZ,OAAO,CAAC,aAAa,EAAE,CAAC;IAW3B;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGvD"}
|
|
@@ -2,12 +2,22 @@
|
|
|
2
2
|
* Chat Repository
|
|
3
3
|
* Data access layer for chat operations
|
|
4
4
|
*/
|
|
5
|
+
import { toPrismaUserId } from '../types/index.js';
|
|
6
|
+
import { AlreadyInitializedError } from '../common/errors.js';
|
|
5
7
|
let _deps = null;
|
|
8
|
+
let _initialized = false;
|
|
6
9
|
/**
|
|
7
10
|
* Initialize the Chat repository with dependencies
|
|
8
11
|
*/
|
|
9
12
|
export function initChatRepository(deps) {
|
|
13
|
+
if (_initialized)
|
|
14
|
+
throw new AlreadyInitializedError('ChatRepository');
|
|
10
15
|
_deps = deps;
|
|
16
|
+
_initialized = true;
|
|
17
|
+
}
|
|
18
|
+
export function disposeChatRepository() {
|
|
19
|
+
_deps = null;
|
|
20
|
+
_initialized = false;
|
|
11
21
|
}
|
|
12
22
|
export class ChatRepository {
|
|
13
23
|
get prisma() {
|
|
@@ -26,7 +36,7 @@ export class ChatRepository {
|
|
|
26
36
|
async createChat(data) {
|
|
27
37
|
const chat = await this.prisma.aiChat.create({
|
|
28
38
|
data: {
|
|
29
|
-
userId: data.userId,
|
|
39
|
+
userId: toPrismaUserId(data.userId),
|
|
30
40
|
title: data.title,
|
|
31
41
|
mode: data.mode || 'EXPLORE',
|
|
32
42
|
model: data.model || process.env.ANTHROPIC_DEFAULT_MODEL || 'claude-opus-4-6',
|
|
@@ -62,7 +72,7 @@ export class ChatRepository {
|
|
|
62
72
|
*/
|
|
63
73
|
async findByUser(userId, limit) {
|
|
64
74
|
return this.prisma.aiChat.findMany({
|
|
65
|
-
where: { userId: userId },
|
|
75
|
+
where: { userId: toPrismaUserId(userId) },
|
|
66
76
|
orderBy: { updatedAt: 'desc' },
|
|
67
77
|
take: limit,
|
|
68
78
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.repository.js","sourceRoot":"","sources":["../../src/chat/chat.repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"chat.repository.js","sourceRoot":"","sources":["../../src/chat/chat.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import type { AiChat } from '@prisma/client';
|
|
|
5
5
|
import type { CreateChatDto, UpdateChatDto, SendMessageDto, ChatMessageResponse, ChatStreamChunk, ChatContext, ChatServiceDependencies } from './chat.types.js';
|
|
6
6
|
import type { UserId } from '../types/index.js';
|
|
7
7
|
export declare function initChatService(deps: ChatServiceDependencies): void;
|
|
8
|
+
export declare function disposeChatService(): void;
|
|
8
9
|
export declare function getChatServiceDeps(): ChatServiceDependencies | null;
|
|
9
10
|
export declare class ChatService {
|
|
10
11
|
private repository;
|
|
@@ -1 +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;AAChK,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
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;AAChK,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAehD,wBAAgB,eAAe,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAKnE;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,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;IAwI9D,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAkCvG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMjC,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAAC,eAAe,CAAC;IAgFpE,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"}
|