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.
@@ -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
- const result = streamText({
42
- model: this.provider(model),
43
- system: buildSystemPrompt(cwd),
44
- messages: messages,
45
- tools: tools,
46
- maxSteps,
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
- else if (p.type === 'tool-call') {
65
- // Emit tool call immediately so dashboard/CLI shows progress
66
- this.opts.onToolCall?.(p.toolName ?? 'unknown', p.args ?? {});
67
- toolCallRecords.push({
68
- tool: p.toolName ?? 'unknown',
69
- args: p.args ?? {},
70
- result: '',
71
- durationMs: 0,
72
- });
73
- }
74
- else if (p.type === 'tool-result') {
75
- // Update the last matching tool call with the result
76
- const last = [...toolCallRecords].reverse().find((tc) => tc.tool === (p.toolName ?? ''));
77
- if (last) {
78
- last.result = String(p.result ?? '').slice(0, 500);
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
- const totalUsage = await result.usage;
83
- // Save to session history
84
- if (session) {
85
- this.sessionManager.addMessages(session.id, [
86
- { role: 'user', content: userPrompt },
87
- { role: 'assistant', content: fullText },
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
- const agentResult = {
91
- output: fullText,
92
- toolCalls: toolCallRecords,
93
- model,
94
- inputTokens: totalUsage?.promptTokens ?? 0,
95
- outputTokens: totalUsage?.completionTokens ?? 0,
96
- };
97
- this.opts.onDone?.(agentResult);
98
- return agentResult;
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":"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"}
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;AACpH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,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":"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,kEAAkE;AAClE,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,sBAAsB;IACtB,2BAA2B,EAAE,CAAC,eAAe,EAAE,yBAAyB,CAAC;IACzE,0BAA0B,EAAE,CAAC,oBAAoB,EAAE,yBAAyB,CAAC;IAC7E,mBAAmB;IACnB,eAAe,EAAE,CAAC,2BAA2B,EAAE,yBAAyB,CAAC;IACzE,oBAAoB,EAAE,CAAC,0BAA0B,EAAE,yBAAyB,CAAC;IAC7E,mBAAmB;IACnB,yBAAyB,EAAE,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;IAC7E,uBAAuB,EAAE,CAAC,2BAA2B,EAAE,eAAe,CAAC;IACvE,qBAAqB;IACrB,wBAAwB,EAAE,CAAC,oBAAoB,EAAE,yBAAyB,CAAC;IAC3E,iBAAiB;IACjB,6BAA6B,EAAE,CAAC,oBAAoB,EAAE,yBAAyB,CAAC;IAChF,oBAAoB;IACpB,yBAAyB,EAAE,CAAC,eAAe,EAAE,2BAA2B,CAAC;CAC1E,CAAC;AAEF,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,0BAA0B,CAAC,CAAC;AAE/G,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,iBAAiB,CAAC;AACtD,CAAC;AAED,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expxagents",
3
- "version": "0.30.2",
3
+ "version": "0.30.4",
4
4
  "description": "Multi-agent orchestration platform for AI squads",
5
5
  "author": "ExpxAgents",
6
6
  "license": "MIT",