expxagents 0.30.2 → 0.30.4
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/node_modules/@expxagents/agent/dist/agent.d.ts +4 -0
- package/node_modules/@expxagents/agent/dist/agent.js +131 -56
- package/node_modules/@expxagents/agent/dist/agent.js.map +1 -1
- package/node_modules/@expxagents/agent/dist/index.d.ts +1 -1
- package/node_modules/@expxagents/agent/dist/index.js +1 -1
- package/node_modules/@expxagents/agent/dist/index.js.map +1 -1
- package/node_modules/@expxagents/agent/dist/models.d.ts +5 -0
- package/node_modules/@expxagents/agent/dist/models.js +23 -0
- package/node_modules/@expxagents/agent/dist/models.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,4 +5,8 @@ export declare class AgentRunner {
|
|
|
5
5
|
private sessionManager;
|
|
6
6
|
constructor(opts: AgentRunOptions);
|
|
7
7
|
run(prompt?: string): Promise<AgentResult>;
|
|
8
|
+
/** Extract readable error detail from provider errors */
|
|
9
|
+
private static extractErrorDetail;
|
|
10
|
+
/** Check if error is transient and worth retrying */
|
|
11
|
+
private static isRetryableError;
|
|
8
12
|
}
|
|
@@ -3,7 +3,7 @@ import { createOpenAI } from '@ai-sdk/openai';
|
|
|
3
3
|
import { createTools } from './tools/index.js';
|
|
4
4
|
import { buildSystemPrompt } from './system-prompt.js';
|
|
5
5
|
import { SessionManager } from './session.js';
|
|
6
|
-
import { DEFAULT_MODEL } from './models.js';
|
|
6
|
+
import { DEFAULT_MODEL, getFallbacks } from './models.js';
|
|
7
7
|
export class AgentRunner {
|
|
8
8
|
opts;
|
|
9
9
|
provider;
|
|
@@ -26,76 +26,151 @@ export class AgentRunner {
|
|
|
26
26
|
const cwd = this.opts.cwd;
|
|
27
27
|
const model = this.opts.model;
|
|
28
28
|
const maxSteps = this.opts.maxSteps ?? 30;
|
|
29
|
+
const maxRetries = 3;
|
|
29
30
|
const tools = createTools(cwd, this.opts.onAskUser);
|
|
30
31
|
const session = this.opts.sessionId
|
|
31
32
|
? this.sessionManager.getOrCreate(this.opts.sessionId, cwd)
|
|
32
33
|
: null;
|
|
33
34
|
const messages = [];
|
|
34
|
-
// Add session history if multi-turn
|
|
35
35
|
if (session) {
|
|
36
36
|
messages.push(...session.messages);
|
|
37
37
|
}
|
|
38
|
-
// Add current user message
|
|
39
38
|
messages.push({ role: 'user', content: userPrompt });
|
|
40
39
|
const toolCallRecords = [];
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// Use fullStream to capture both text and tool-call events in real-time
|
|
49
|
-
let fullText = '';
|
|
50
|
-
for await (const part of result.fullStream) {
|
|
51
|
-
const p = part;
|
|
52
|
-
if (p.type === 'text-delta' && p.textDelta) {
|
|
53
|
-
// Filter leaked tool-call artifacts from weaker models
|
|
54
|
-
const cleaned = p.textDelta
|
|
55
|
-
.replace(/<TOOLCALL>[\s\S]*?<\/TOOLCALL>/g, '')
|
|
56
|
-
.replace(/\{"(name|tool|function)":\s*"[^"]*",\s*"arguments":\s*\{[^}]*\}\s*\}?\]?/g, '')
|
|
57
|
-
.replace(/<\/?tool_call>/gi, '')
|
|
58
|
-
.replace(/<\/?function_call>/gi, '');
|
|
59
|
-
if (cleaned.trim()) {
|
|
60
|
-
fullText += cleaned;
|
|
61
|
-
this.opts.onChunk?.(cleaned);
|
|
62
|
-
}
|
|
40
|
+
// Try primary model with retries, then fallback models
|
|
41
|
+
const modelsToTry = [model, ...getFallbacks(model)];
|
|
42
|
+
for (let modelIdx = 0; modelIdx < modelsToTry.length; modelIdx++) {
|
|
43
|
+
const currentModel = modelsToTry[modelIdx];
|
|
44
|
+
const isFallback = modelIdx > 0;
|
|
45
|
+
if (isFallback) {
|
|
46
|
+
this.opts.onChunk?.(`\n⟳ Switching to fallback model: ${currentModel}\n\n`);
|
|
63
47
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
48
|
+
// Retry loop for transient errors on current model
|
|
49
|
+
let lastError = null;
|
|
50
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
51
|
+
try {
|
|
52
|
+
const result = streamText({
|
|
53
|
+
model: this.provider(currentModel),
|
|
54
|
+
system: buildSystemPrompt(cwd),
|
|
55
|
+
messages: messages,
|
|
56
|
+
tools: tools,
|
|
57
|
+
maxSteps,
|
|
58
|
+
});
|
|
59
|
+
let fullText = '';
|
|
60
|
+
for await (const part of result.fullStream) {
|
|
61
|
+
const p = part;
|
|
62
|
+
if (p.type === 'text-delta' && p.textDelta) {
|
|
63
|
+
const cleaned = p.textDelta
|
|
64
|
+
.replace(/<TOOLCALL>[\s\S]*?<\/TOOLCALL>/g, '')
|
|
65
|
+
.replace(/\{"(name|tool|function)":\s*"[^"]*",\s*"arguments":\s*\{[^}]*\}\s*\}?\]?/g, '')
|
|
66
|
+
.replace(/<\/?tool_call>/gi, '')
|
|
67
|
+
.replace(/<\/?function_call>/gi, '');
|
|
68
|
+
if (cleaned.trim()) {
|
|
69
|
+
fullText += cleaned;
|
|
70
|
+
this.opts.onChunk?.(cleaned);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (p.type === 'tool-call') {
|
|
74
|
+
this.opts.onToolCall?.(p.toolName ?? 'unknown', p.args ?? {});
|
|
75
|
+
toolCallRecords.push({
|
|
76
|
+
tool: p.toolName ?? 'unknown',
|
|
77
|
+
args: p.args ?? {},
|
|
78
|
+
result: '',
|
|
79
|
+
durationMs: 0,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
else if (p.type === 'tool-result') {
|
|
83
|
+
const last = [...toolCallRecords].reverse().find((tc) => tc.tool === (p.toolName ?? ''));
|
|
84
|
+
if (last) {
|
|
85
|
+
last.result = String(p.result ?? '').slice(0, 500);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const totalUsage = await result.usage;
|
|
90
|
+
if (session) {
|
|
91
|
+
this.sessionManager.addMessages(session.id, [
|
|
92
|
+
{ role: 'user', content: userPrompt },
|
|
93
|
+
{ role: 'assistant', content: fullText },
|
|
94
|
+
]);
|
|
95
|
+
}
|
|
96
|
+
const agentResult = {
|
|
97
|
+
output: fullText,
|
|
98
|
+
toolCalls: toolCallRecords,
|
|
99
|
+
model: currentModel,
|
|
100
|
+
inputTokens: totalUsage?.promptTokens ?? 0,
|
|
101
|
+
outputTokens: totalUsage?.completionTokens ?? 0,
|
|
102
|
+
};
|
|
103
|
+
this.opts.onDone?.(agentResult);
|
|
104
|
+
return agentResult;
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
lastError = err instanceof Error ? err : new Error(String(err));
|
|
108
|
+
const errorDetail = AgentRunner.extractErrorDetail(lastError);
|
|
109
|
+
const isRetryable = AgentRunner.isRetryableError(lastError);
|
|
110
|
+
if (isRetryable && attempt < maxRetries) {
|
|
111
|
+
const waitMs = attempt * 2000;
|
|
112
|
+
this.opts.onChunk?.(`\n[Retry ${attempt}/${maxRetries}] ${errorDetail}. Retrying in ${waitMs / 1000}s...\n`);
|
|
113
|
+
await new Promise(r => setTimeout(r, waitMs));
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
// If there are fallback models left, break retry loop and try next model
|
|
117
|
+
if (modelIdx < modelsToTry.length - 1) {
|
|
118
|
+
this.opts.onChunk?.(`\n⚠ ${currentModel} failed: ${errorDetail}\n`);
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
// No more models to try
|
|
122
|
+
throw new Error(`${errorDetail} (tried ${modelsToTry.slice(0, modelIdx + 1).join(' → ')})`);
|
|
79
123
|
}
|
|
80
124
|
}
|
|
81
125
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
126
|
+
throw new Error('All models failed');
|
|
127
|
+
}
|
|
128
|
+
/** Extract readable error detail from provider errors */
|
|
129
|
+
static extractErrorDetail(err) {
|
|
130
|
+
const msg = err.message ?? '';
|
|
131
|
+
// OpenRouter / OpenAI structured errors
|
|
132
|
+
const jsonMatch = msg.match(/\{[\s\S]*"error"[\s\S]*\}/);
|
|
133
|
+
if (jsonMatch) {
|
|
134
|
+
try {
|
|
135
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
136
|
+
const detail = parsed.error?.message ?? parsed.message ?? parsed.error;
|
|
137
|
+
if (detail)
|
|
138
|
+
return String(detail);
|
|
139
|
+
}
|
|
140
|
+
catch { /* not JSON */ }
|
|
89
141
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
142
|
+
// Rate limit
|
|
143
|
+
if (msg.includes('429') || msg.toLowerCase().includes('rate limit')) {
|
|
144
|
+
return 'Rate limited by provider. Too many requests';
|
|
145
|
+
}
|
|
146
|
+
// Context length
|
|
147
|
+
if (msg.toLowerCase().includes('context') && msg.toLowerCase().includes('length')) {
|
|
148
|
+
return 'Context window exceeded. Try a model with larger context or a shorter conversation (/clear)';
|
|
149
|
+
}
|
|
150
|
+
// Auth
|
|
151
|
+
if (msg.includes('401') || msg.toLowerCase().includes('unauthorized') || msg.toLowerCase().includes('invalid api key')) {
|
|
152
|
+
return 'Invalid API key. Check your OPENROUTER_API_KEY';
|
|
153
|
+
}
|
|
154
|
+
// Quota
|
|
155
|
+
if (msg.includes('402') || msg.toLowerCase().includes('insufficient') || msg.toLowerCase().includes('quota')) {
|
|
156
|
+
return 'Insufficient credits on OpenRouter. Add credits at https://openrouter.ai/credits';
|
|
157
|
+
}
|
|
158
|
+
// Generic provider error
|
|
159
|
+
if (msg.includes('Provider returned error')) {
|
|
160
|
+
return 'Provider returned an error. The model may be temporarily unavailable';
|
|
161
|
+
}
|
|
162
|
+
return msg.slice(0, 300);
|
|
163
|
+
}
|
|
164
|
+
/** Check if error is transient and worth retrying */
|
|
165
|
+
static isRetryableError(err) {
|
|
166
|
+
const msg = err.message ?? '';
|
|
167
|
+
return msg.includes('429') ||
|
|
168
|
+
msg.includes('500') ||
|
|
169
|
+
msg.includes('502') ||
|
|
170
|
+
msg.includes('503') ||
|
|
171
|
+
msg.includes('timeout') ||
|
|
172
|
+
msg.toLowerCase().includes('rate limit') ||
|
|
173
|
+
msg.includes('Provider returned error');
|
|
99
174
|
}
|
|
100
175
|
}
|
|
101
176
|
//# sourceMappingURL=agent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { AgentRunOptions, AgentResult, ToolCallRecord, ModelInfo } from './types.js';
|
|
2
2
|
export { AgentRunner } from './agent.js';
|
|
3
3
|
export { SessionManager, type Session } from './session.js';
|
|
4
|
-
export { SUPPORTED_MODELS, FEATURED_MODELS, DEFAULT_MODEL, getModelInfo, fetchOpenRouterModels } from './models.js';
|
|
4
|
+
export { SUPPORTED_MODELS, FEATURED_MODELS, DEFAULT_MODEL, getModelInfo, fetchOpenRouterModels, getFallbacks, FALLBACK_CHAIN } from './models.js';
|
|
5
5
|
export { createTools } from './tools/index.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { AgentRunner } from './agent.js';
|
|
2
2
|
export { SessionManager } from './session.js';
|
|
3
|
-
export { SUPPORTED_MODELS, FEATURED_MODELS, DEFAULT_MODEL, getModelInfo, fetchOpenRouterModels } from './models.js';
|
|
3
|
+
export { SUPPORTED_MODELS, FEATURED_MODELS, DEFAULT_MODEL, getModelInfo, fetchOpenRouterModels, getFallbacks, FALLBACK_CHAIN } from './models.js';
|
|
4
4
|
export { createTools } from './tools/index.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAgB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAgB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClJ,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -4,6 +4,11 @@ export declare const FEATURED_MODELS: ModelInfo[];
|
|
|
4
4
|
/** @deprecated Use FEATURED_MODELS instead */
|
|
5
5
|
export declare const SUPPORTED_MODELS: ModelInfo[];
|
|
6
6
|
export declare const DEFAULT_MODEL = "anthropic/claude-sonnet-4";
|
|
7
|
+
/** Fallback chain — if primary model fails, try these in order */
|
|
8
|
+
export declare const FALLBACK_CHAIN: Record<string, string[]>;
|
|
9
|
+
/** Default fallback for any model not in the chain */
|
|
10
|
+
export declare const DEFAULT_FALLBACKS: string[];
|
|
11
|
+
export declare function getFallbacks(modelId: string): string[];
|
|
7
12
|
export declare function getModelInfo(id: string): ModelInfo;
|
|
8
13
|
/** Fetches all available models from OpenRouter API */
|
|
9
14
|
export declare function fetchOpenRouterModels(apiKey: string): Promise<ModelInfo[]>;
|
|
@@ -13,6 +13,29 @@ export const FEATURED_MODELS = [
|
|
|
13
13
|
/** @deprecated Use FEATURED_MODELS instead */
|
|
14
14
|
export const SUPPORTED_MODELS = FEATURED_MODELS;
|
|
15
15
|
export const DEFAULT_MODEL = 'anthropic/claude-sonnet-4';
|
|
16
|
+
/** Fallback chain — if primary model fails, try these in order */
|
|
17
|
+
export const FALLBACK_CHAIN = {
|
|
18
|
+
// Anthropic fallbacks
|
|
19
|
+
'anthropic/claude-sonnet-4': ['openai/gpt-4o', 'google/gemini-2.5-flash'],
|
|
20
|
+
'anthropic/claude-haiku-4': ['openai/gpt-4o-mini', 'google/gemini-2.5-flash'],
|
|
21
|
+
// OpenAI fallbacks
|
|
22
|
+
'openai/gpt-4o': ['anthropic/claude-sonnet-4', 'google/gemini-2.5-flash'],
|
|
23
|
+
'openai/gpt-4o-mini': ['anthropic/claude-haiku-4', 'google/gemini-2.5-flash'],
|
|
24
|
+
// Google fallbacks
|
|
25
|
+
'google/gemini-2.5-flash': ['openai/gpt-4o-mini', 'anthropic/claude-haiku-4'],
|
|
26
|
+
'google/gemini-2.5-pro': ['anthropic/claude-sonnet-4', 'openai/gpt-4o'],
|
|
27
|
+
// DeepSeek fallbacks
|
|
28
|
+
'deepseek/deepseek-chat': ['openai/gpt-4o-mini', 'google/gemini-2.5-flash'],
|
|
29
|
+
// Meta fallbacks
|
|
30
|
+
'meta-llama/llama-4-maverick': ['openai/gpt-4o-mini', 'google/gemini-2.5-flash'],
|
|
31
|
+
// Mistral fallbacks
|
|
32
|
+
'mistralai/mistral-large': ['openai/gpt-4o', 'anthropic/claude-sonnet-4'],
|
|
33
|
+
};
|
|
34
|
+
/** Default fallback for any model not in the chain */
|
|
35
|
+
export const DEFAULT_FALLBACKS = ['openai/gpt-4o-mini', 'google/gemini-2.5-flash', 'anthropic/claude-haiku-4'];
|
|
36
|
+
export function getFallbacks(modelId) {
|
|
37
|
+
return FALLBACK_CHAIN[modelId] ?? DEFAULT_FALLBACKS;
|
|
38
|
+
}
|
|
16
39
|
/** Default context window for unknown models */
|
|
17
40
|
const DEFAULT_CONTEXT_WINDOW = 128000;
|
|
18
41
|
export function getModelInfo(id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAEA,gGAAgG;AAChG,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,EAAE,EAAE,EAAE,2BAA2B,EAAE,IAAI,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE;IACnF,EAAE,EAAE,EAAE,0BAA0B,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE;IACjF,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE;IAC9D,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE;IACxE,EAAE,EAAE,EAAE,yBAAyB,EAAE,IAAI,EAAE,kBAAkB,EAAE,aAAa,EAAE,OAAO,EAAE;IACnF,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,OAAO,EAAE;IAC/E,EAAE,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE;IAC3E,EAAE,EAAE,EAAE,yBAAyB,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE;IAC/E,EAAE,EAAE,EAAE,6BAA6B,EAAE,IAAI,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,EAAE;CACvF,CAAC;AAEF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAEzD,gDAAgD;AAChD,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAEtC,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,2DAA2D;IAC3D,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAClG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAC;AAC7D,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAc;IACxD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,qCAAqC,EAAE;YAC7D,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,MAAM,EAAE,EAAE;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,eAAe,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA4E,CAAC;QACxG,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,aAAa,EAAE,CAAC,CAAC,cAAc,IAAI,sBAAsB;SAC1D,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
|