ai-consultation-mcp 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.
- package/LICENSE +21 -0
- package/README.md +193 -0
- package/dist/api/index.d.ts +27 -0
- package/dist/api/index.js +213 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/middleware/security.d.ts +6 -0
- package/dist/api/middleware/security.js +28 -0
- package/dist/api/middleware/security.js.map +1 -0
- package/dist/api/routes/chat.d.ts +2 -0
- package/dist/api/routes/chat.js +78 -0
- package/dist/api/routes/chat.js.map +1 -0
- package/dist/api/routes/config.d.ts +2 -0
- package/dist/api/routes/config.js +81 -0
- package/dist/api/routes/config.js.map +1 -0
- package/dist/api/routes/providers.d.ts +2 -0
- package/dist/api/routes/providers.js +225 -0
- package/dist/api/routes/providers.js.map +1 -0
- package/dist/api/standalone-server.d.ts +12 -0
- package/dist/api/standalone-server.js +117 -0
- package/dist/api/standalone-server.js.map +1 -0
- package/dist/config/defaults.d.ts +17 -0
- package/dist/config/defaults.js +30 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/encryption.d.ts +12 -0
- package/dist/config/encryption.js +85 -0
- package/dist/config/encryption.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/manager.d.ts +62 -0
- package/dist/config/manager.js +210 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/prompts.d.ts +10 -0
- package/dist/config/prompts.js +168 -0
- package/dist/config/prompts.js.map +1 -0
- package/dist/config/schema.d.ts +141 -0
- package/dist/config/schema.js +54 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +260 -0
- package/dist/index.js.map +1 -0
- package/dist/installer/detector.d.ts +48 -0
- package/dist/installer/detector.js +164 -0
- package/dist/installer/detector.js.map +1 -0
- package/dist/installer/index.d.ts +7 -0
- package/dist/installer/index.js +10 -0
- package/dist/installer/index.js.map +1 -0
- package/dist/installer/installer.d.ts +16 -0
- package/dist/installer/installer.js +262 -0
- package/dist/installer/installer.js.map +1 -0
- package/dist/installer/tools.d.ts +16 -0
- package/dist/installer/tools.js +327 -0
- package/dist/installer/tools.js.map +1 -0
- package/dist/installer/types.d.ts +68 -0
- package/dist/installer/types.js +5 -0
- package/dist/installer/types.js.map +1 -0
- package/dist/providers/base.d.ts +44 -0
- package/dist/providers/base.js +84 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/deepseek.d.ts +30 -0
- package/dist/providers/deepseek.js +148 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/index.d.ts +5 -0
- package/dist/providers/index.js +8 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +30 -0
- package/dist/providers/openai.js +123 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/registry.d.ts +37 -0
- package/dist/providers/registry.js +65 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +71 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/server/conversation.d.ts +105 -0
- package/dist/server/conversation.js +279 -0
- package/dist/server/conversation.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/tools/consult.d.ts +15 -0
- package/dist/server/tools/consult.js +164 -0
- package/dist/server/tools/consult.js.map +1 -0
- package/dist/server/tools/index.d.ts +1 -0
- package/dist/server/tools/index.js +2 -0
- package/dist/server/tools/index.js.map +1 -0
- package/dist/types/config.d.ts +20 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/messages.d.ts +48 -0
- package/dist/types/messages.js +2 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/models.d.ts +39 -0
- package/dist/types/models.js +66 -0
- package/dist/types/models.js.map +1 -0
- package/dist/ui/index.html +1244 -0
- package/dist/utils/errors.d.ts +32 -0
- package/dist/utils/errors.js +53 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.js +73 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { conversationManager } from '../conversation.js';
|
|
2
|
+
import { getConfigManager, getSystemPromptForMode } from '../../config/index.js';
|
|
3
|
+
import { consultRequestSchema, continueRequestSchema, endRequestSchema, } from '../../config/schema.js';
|
|
4
|
+
import { logger, ProviderNotConfiguredError } from '../../utils/index.js';
|
|
5
|
+
import { MODEL_TO_PROVIDER } from '../../types/index.js';
|
|
6
|
+
import { getProviderRegistry, } from '../../providers/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Summarize reasoning content for display
|
|
9
|
+
* Extracts key points if the reasoning is too long
|
|
10
|
+
*/
|
|
11
|
+
function summarizeReasoning(reasoning, maxLength = 500) {
|
|
12
|
+
if (!reasoning)
|
|
13
|
+
return undefined;
|
|
14
|
+
// If short enough, return as-is
|
|
15
|
+
if (reasoning.length <= maxLength)
|
|
16
|
+
return reasoning;
|
|
17
|
+
// Try to extract key sentences/points
|
|
18
|
+
const lines = reasoning.split('\n').filter(line => line.trim());
|
|
19
|
+
const summary = [];
|
|
20
|
+
let totalLength = 0;
|
|
21
|
+
for (const line of lines) {
|
|
22
|
+
if (totalLength + line.length > maxLength - 50)
|
|
23
|
+
break;
|
|
24
|
+
summary.push(line);
|
|
25
|
+
totalLength += line.length;
|
|
26
|
+
}
|
|
27
|
+
if (summary.length > 0) {
|
|
28
|
+
return summary.join('\n') + '\n... [truncated, ' + reasoning.length + ' chars total]';
|
|
29
|
+
}
|
|
30
|
+
return reasoning.substring(0, maxLength) + '... [truncated]';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get provider response for a conversation
|
|
34
|
+
*/
|
|
35
|
+
async function getProviderResponse(messages, model, systemPrompt) {
|
|
36
|
+
const registry = getProviderRegistry();
|
|
37
|
+
const providerType = MODEL_TO_PROVIDER[model];
|
|
38
|
+
const provider = registry.getProvider(providerType);
|
|
39
|
+
if (!provider.isConfigured()) {
|
|
40
|
+
throw new ProviderNotConfiguredError(providerType);
|
|
41
|
+
}
|
|
42
|
+
const response = await provider.createCompletion(messages, {
|
|
43
|
+
model: model,
|
|
44
|
+
systemPrompt,
|
|
45
|
+
maxTokens: 4096,
|
|
46
|
+
});
|
|
47
|
+
return response;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Convert conversation messages to provider format
|
|
51
|
+
*/
|
|
52
|
+
function toProviderMessages(conversationId) {
|
|
53
|
+
const conversation = conversationManager.get(conversationId);
|
|
54
|
+
return conversation.messages.map((m) => ({
|
|
55
|
+
role: m.role,
|
|
56
|
+
content: m.content,
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Consult an AI agent for a second opinion
|
|
61
|
+
*/
|
|
62
|
+
export async function consultAgent(input) {
|
|
63
|
+
const validated = consultRequestSchema.parse(input);
|
|
64
|
+
const config = getConfigManager().getConfig();
|
|
65
|
+
// Determine which model to use (default from config)
|
|
66
|
+
const model = config.defaultModel;
|
|
67
|
+
const mode = validated.mode || 'general';
|
|
68
|
+
// Check if the provider for this model is configured
|
|
69
|
+
const providerType = MODEL_TO_PROVIDER[model];
|
|
70
|
+
if (!getConfigManager().isProviderConfigured(providerType)) {
|
|
71
|
+
throw new ProviderNotConfiguredError(providerType);
|
|
72
|
+
}
|
|
73
|
+
logger.info('Starting consultation', { model, mode });
|
|
74
|
+
// Get system prompt for the mode
|
|
75
|
+
const systemPrompt = getSystemPromptForMode(mode);
|
|
76
|
+
// Create conversation
|
|
77
|
+
const conversation = conversationManager.create(model, systemPrompt);
|
|
78
|
+
// Build the user message with optional context
|
|
79
|
+
let userMessage = validated.question;
|
|
80
|
+
if (validated.context) {
|
|
81
|
+
userMessage = `Context:\n${validated.context}\n\nQuestion:\n${validated.question}`;
|
|
82
|
+
}
|
|
83
|
+
// Add user message
|
|
84
|
+
conversationManager.addMessage(conversation.id, 'user', userMessage);
|
|
85
|
+
// Get AI response
|
|
86
|
+
const messages = toProviderMessages(conversation.id);
|
|
87
|
+
const response = await getProviderResponse(messages, model, systemPrompt);
|
|
88
|
+
// Add assistant response
|
|
89
|
+
conversationManager.addMessage(conversation.id, 'assistant', response.content);
|
|
90
|
+
// Build metadata with thinking information
|
|
91
|
+
const responseTime = response.responseTime || 0;
|
|
92
|
+
const metadata = {
|
|
93
|
+
responseTime,
|
|
94
|
+
tokensUsed: response.usage?.totalTokens,
|
|
95
|
+
thinking: response.reasoningContent
|
|
96
|
+
? {
|
|
97
|
+
summary: summarizeReasoning(response.reasoningContent) || '',
|
|
98
|
+
fullLength: response.reasoningContent.length,
|
|
99
|
+
durationMs: responseTime,
|
|
100
|
+
}
|
|
101
|
+
: undefined,
|
|
102
|
+
};
|
|
103
|
+
logger.info('Consultation completed', {
|
|
104
|
+
conversationId: conversation.id,
|
|
105
|
+
model,
|
|
106
|
+
mode,
|
|
107
|
+
messageCount: conversationManager.getMessageCount(conversation.id),
|
|
108
|
+
responseTime: metadata.responseTime,
|
|
109
|
+
});
|
|
110
|
+
return {
|
|
111
|
+
answer: response.content,
|
|
112
|
+
conversationId: conversation.id,
|
|
113
|
+
model,
|
|
114
|
+
mode,
|
|
115
|
+
messageCount: conversationManager.getMessageCount(conversation.id),
|
|
116
|
+
canContinue: conversationManager.canContinue(conversation.id),
|
|
117
|
+
metadata,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Continue an existing conversation
|
|
122
|
+
*/
|
|
123
|
+
export async function continueConversation(input) {
|
|
124
|
+
const validated = continueRequestSchema.parse(input);
|
|
125
|
+
// Get existing conversation
|
|
126
|
+
const conversation = conversationManager.get(validated.conversationId);
|
|
127
|
+
logger.info('Continuing conversation', {
|
|
128
|
+
conversationId: validated.conversationId,
|
|
129
|
+
model: conversation.model,
|
|
130
|
+
});
|
|
131
|
+
// Add user message
|
|
132
|
+
conversationManager.addMessage(validated.conversationId, 'user', validated.message);
|
|
133
|
+
// Get AI response
|
|
134
|
+
const messages = toProviderMessages(validated.conversationId);
|
|
135
|
+
const response = await getProviderResponse(messages, conversation.model, conversation.systemPrompt);
|
|
136
|
+
// Add assistant response
|
|
137
|
+
conversationManager.addMessage(validated.conversationId, 'assistant', response.content);
|
|
138
|
+
logger.info('Conversation continued', {
|
|
139
|
+
conversationId: validated.conversationId,
|
|
140
|
+
messageCount: conversationManager.getMessageCount(validated.conversationId),
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
answer: response.content,
|
|
144
|
+
conversationId: validated.conversationId,
|
|
145
|
+
messageCount: conversationManager.getMessageCount(validated.conversationId),
|
|
146
|
+
canContinue: conversationManager.canContinue(validated.conversationId),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* End a conversation
|
|
151
|
+
*/
|
|
152
|
+
export async function endConversation(input) {
|
|
153
|
+
const validated = endRequestSchema.parse(input);
|
|
154
|
+
logger.info('Ending conversation', {
|
|
155
|
+
conversationId: validated.conversationId,
|
|
156
|
+
});
|
|
157
|
+
const totalMessages = conversationManager.end(validated.conversationId);
|
|
158
|
+
return {
|
|
159
|
+
status: 'ended',
|
|
160
|
+
conversationId: validated.conversationId,
|
|
161
|
+
totalMessages,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=consult.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consult.js","sourceRoot":"","sources":["../../../src/server/tools/consult.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { consultAgent, continueConversation, endConversation } from './consult.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ModelType } from './models.js';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for a single AI provider
|
|
4
|
+
*/
|
|
5
|
+
export interface ProviderConfig {
|
|
6
|
+
apiKey?: string;
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
baseUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Main application configuration
|
|
12
|
+
*/
|
|
13
|
+
export interface Config {
|
|
14
|
+
defaultModel: ModelType;
|
|
15
|
+
maxMessages: number;
|
|
16
|
+
providers: {
|
|
17
|
+
deepseek: ProviderConfig;
|
|
18
|
+
openai: ProviderConfig;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat message structure
|
|
3
|
+
*/
|
|
4
|
+
export interface Message {
|
|
5
|
+
role: 'system' | 'user' | 'assistant';
|
|
6
|
+
content: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Response metadata for enhanced tracking
|
|
10
|
+
*/
|
|
11
|
+
export interface ResponseMetadata {
|
|
12
|
+
responseTime: number;
|
|
13
|
+
tokensUsed?: number;
|
|
14
|
+
thinking?: {
|
|
15
|
+
summary: string;
|
|
16
|
+
fullLength: number;
|
|
17
|
+
durationMs: number;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Response from consult_agent tool
|
|
22
|
+
*/
|
|
23
|
+
export interface ConsultResponse {
|
|
24
|
+
answer: string;
|
|
25
|
+
conversationId: string;
|
|
26
|
+
model: string;
|
|
27
|
+
mode: string;
|
|
28
|
+
messageCount: number;
|
|
29
|
+
canContinue: boolean;
|
|
30
|
+
metadata?: ResponseMetadata;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Response from continue_conversation tool
|
|
34
|
+
*/
|
|
35
|
+
export interface ContinueResponse {
|
|
36
|
+
answer: string;
|
|
37
|
+
conversationId: string;
|
|
38
|
+
messageCount: number;
|
|
39
|
+
canContinue: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Response from end_conversation tool
|
|
43
|
+
*/
|
|
44
|
+
export interface EndResponse {
|
|
45
|
+
status: 'ended';
|
|
46
|
+
conversationId: string;
|
|
47
|
+
totalMessages: number;
|
|
48
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/types/messages.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider types
|
|
3
|
+
*/
|
|
4
|
+
export type ProviderType = 'deepseek' | 'openai';
|
|
5
|
+
/**
|
|
6
|
+
* Supported AI model types
|
|
7
|
+
*/
|
|
8
|
+
export type ModelType = 'deepseek-chat' | 'deepseek-reasoner' | 'gpt-5.2' | 'gpt-5.2-pro';
|
|
9
|
+
/**
|
|
10
|
+
* List of all supported models (as const for Zod enum)
|
|
11
|
+
*/
|
|
12
|
+
export declare const MODEL_TYPES: readonly ["deepseek-chat", "deepseek-reasoner", "gpt-5.2", "gpt-5.2-pro"];
|
|
13
|
+
/**
|
|
14
|
+
* List of all supported models (array version)
|
|
15
|
+
*/
|
|
16
|
+
export declare const MODEL_LIST: ModelType[];
|
|
17
|
+
/**
|
|
18
|
+
* Mapping from model to provider
|
|
19
|
+
*/
|
|
20
|
+
export declare const MODEL_TO_PROVIDER: Record<ModelType, ProviderType>;
|
|
21
|
+
/**
|
|
22
|
+
* Model configuration interface
|
|
23
|
+
*/
|
|
24
|
+
export interface ModelConfig {
|
|
25
|
+
provider: ProviderType;
|
|
26
|
+
apiModel: string;
|
|
27
|
+
maxTokens: number;
|
|
28
|
+
supportsSystemPrompt: boolean;
|
|
29
|
+
isReasoning: boolean;
|
|
30
|
+
reasoningEffort?: 'low' | 'medium' | 'high';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Model configuration mapping
|
|
34
|
+
*/
|
|
35
|
+
export declare const MODEL_CONFIG: Record<ModelType, ModelConfig>;
|
|
36
|
+
/**
|
|
37
|
+
* Default model for consultations
|
|
38
|
+
*/
|
|
39
|
+
export declare const DEFAULT_MODEL: ModelType;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List of all supported models (as const for Zod enum)
|
|
3
|
+
*/
|
|
4
|
+
export const MODEL_TYPES = [
|
|
5
|
+
'deepseek-chat',
|
|
6
|
+
'deepseek-reasoner',
|
|
7
|
+
'gpt-5.2',
|
|
8
|
+
'gpt-5.2-pro',
|
|
9
|
+
];
|
|
10
|
+
/**
|
|
11
|
+
* List of all supported models (array version)
|
|
12
|
+
*/
|
|
13
|
+
export const MODEL_LIST = [...MODEL_TYPES];
|
|
14
|
+
/**
|
|
15
|
+
* Mapping from model to provider
|
|
16
|
+
*/
|
|
17
|
+
export const MODEL_TO_PROVIDER = {
|
|
18
|
+
'deepseek-chat': 'deepseek',
|
|
19
|
+
'deepseek-reasoner': 'deepseek',
|
|
20
|
+
'gpt-5.2': 'openai',
|
|
21
|
+
'gpt-5.2-pro': 'openai',
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Model configuration mapping
|
|
25
|
+
*/
|
|
26
|
+
export const MODEL_CONFIG = {
|
|
27
|
+
// DeepSeek V3 - Chat (fast, general purpose)
|
|
28
|
+
'deepseek-chat': {
|
|
29
|
+
provider: 'deepseek',
|
|
30
|
+
apiModel: 'deepseek-chat',
|
|
31
|
+
maxTokens: 8192,
|
|
32
|
+
supportsSystemPrompt: true,
|
|
33
|
+
isReasoning: false,
|
|
34
|
+
},
|
|
35
|
+
// DeepSeek R1 - Reasoner (deep thinking, specialized tasks)
|
|
36
|
+
'deepseek-reasoner': {
|
|
37
|
+
provider: 'deepseek',
|
|
38
|
+
apiModel: 'deepseek-reasoner',
|
|
39
|
+
maxTokens: 64000,
|
|
40
|
+
supportsSystemPrompt: false,
|
|
41
|
+
isReasoning: true,
|
|
42
|
+
},
|
|
43
|
+
// OpenAI GPT-5.2 - Flagship model (400K context)
|
|
44
|
+
'gpt-5.2': {
|
|
45
|
+
provider: 'openai',
|
|
46
|
+
apiModel: 'gpt-5.2',
|
|
47
|
+
maxTokens: 400000,
|
|
48
|
+
supportsSystemPrompt: true,
|
|
49
|
+
isReasoning: true,
|
|
50
|
+
reasoningEffort: 'medium',
|
|
51
|
+
},
|
|
52
|
+
// OpenAI GPT-5.2 Pro - More compute, better answers
|
|
53
|
+
'gpt-5.2-pro': {
|
|
54
|
+
provider: 'openai',
|
|
55
|
+
apiModel: 'gpt-5.2-pro',
|
|
56
|
+
maxTokens: 400000,
|
|
57
|
+
supportsSystemPrompt: true,
|
|
58
|
+
isReasoning: true,
|
|
59
|
+
reasoningEffort: 'high',
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Default model for consultations
|
|
64
|
+
*/
|
|
65
|
+
export const DEFAULT_MODEL = 'deepseek-reasoner';
|
|
66
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/types/models.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,eAAe;IACf,mBAAmB;IACnB,SAAS;IACT,aAAa;CACL,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAgB,CAAC,GAAG,WAAW,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAoC;IAChE,eAAe,EAAE,UAAU;IAC3B,mBAAmB,EAAE,UAAU;IAC/B,SAAS,EAAE,QAAQ;IACnB,aAAa,EAAE,QAAQ;CACxB,CAAC;AAcF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAmC;IAC1D,6CAA6C;IAC7C,eAAe,EAAE;QACf,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,eAAe;QACzB,SAAS,EAAE,IAAI;QACf,oBAAoB,EAAE,IAAI;QAC1B,WAAW,EAAE,KAAK;KACnB;IACD,4DAA4D;IAC5D,mBAAmB,EAAE;QACnB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,mBAAmB;QAC7B,SAAS,EAAE,KAAK;QAChB,oBAAoB,EAAE,KAAK;QAC3B,WAAW,EAAE,IAAI;KAClB;IACD,iDAAiD;IACjD,SAAS,EAAE;QACT,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,SAAS;QACnB,SAAS,EAAE,MAAM;QACjB,oBAAoB,EAAE,IAAI;QAC1B,WAAW,EAAE,IAAI;QACjB,eAAe,EAAE,QAAQ;KAC1B;IACD,oDAAoD;IACpD,aAAa,EAAE;QACb,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,aAAa;QACvB,SAAS,EAAE,MAAM;QACjB,oBAAoB,EAAE,IAAI;QAC1B,WAAW,EAAE,IAAI;QACjB,eAAe,EAAE,MAAM;KACxB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAc,mBAAmB,CAAC"}
|