@zhixuan92/multi-model-agent-core 0.1.1 → 0.2.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 +0 -6
- package/dist/config/schema.d.ts +27 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +13 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/context/context-block-store.d.ts +75 -0
- package/dist/context/context-block-store.d.ts.map +1 -0
- package/dist/context/context-block-store.js +82 -0
- package/dist/context/context-block-store.js.map +1 -0
- package/dist/context/expand-context-blocks.d.ts +20 -0
- package/dist/context/expand-context-blocks.d.ts.map +1 -0
- package/dist/context/expand-context-blocks.js +46 -0
- package/dist/context/expand-context-blocks.js.map +1 -0
- package/dist/delegate-with-escalation.d.ts +34 -0
- package/dist/delegate-with-escalation.d.ts.map +1 -0
- package/dist/delegate-with-escalation.js +168 -0
- package/dist/delegate-with-escalation.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/model-profiles.json +8 -4
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +7 -1
- package/dist/provider.js.map +1 -1
- package/dist/routing/model-profiles.d.ts +1 -0
- package/dist/routing/model-profiles.d.ts.map +1 -1
- package/dist/routing/model-profiles.js +4 -0
- package/dist/routing/model-profiles.js.map +1 -1
- package/dist/run-tasks.d.ts +26 -2
- package/dist/run-tasks.d.ts.map +1 -1
- package/dist/run-tasks.js +61 -19
- package/dist/run-tasks.js.map +1 -1
- package/dist/runners/claude-runner.d.ts.map +1 -1
- package/dist/runners/claude-runner.js +643 -32
- package/dist/runners/claude-runner.js.map +1 -1
- package/dist/runners/codex-runner.d.ts.map +1 -1
- package/dist/runners/codex-runner.js +473 -48
- package/dist/runners/codex-runner.js.map +1 -1
- package/dist/runners/error-classification.d.ts +30 -0
- package/dist/runners/error-classification.d.ts.map +1 -0
- package/dist/runners/error-classification.js +72 -0
- package/dist/runners/error-classification.js.map +1 -0
- package/dist/runners/injection-type.d.ts +17 -0
- package/dist/runners/injection-type.d.ts.map +1 -0
- package/dist/runners/injection-type.js +27 -0
- package/dist/runners/injection-type.js.map +1 -0
- package/dist/runners/openai-runner.d.ts +5 -0
- package/dist/runners/openai-runner.d.ts.map +1 -1
- package/dist/runners/openai-runner.js +508 -36
- package/dist/runners/openai-runner.js.map +1 -1
- package/dist/runners/prevention.d.ts +41 -0
- package/dist/runners/prevention.d.ts.map +1 -0
- package/dist/runners/prevention.js +68 -0
- package/dist/runners/prevention.js.map +1 -0
- package/dist/runners/supervision.d.ts +130 -0
- package/dist/runners/supervision.d.ts.map +1 -0
- package/dist/runners/supervision.js +238 -0
- package/dist/runners/supervision.js.map +1 -0
- package/dist/tools/claude-adapter.d.ts.map +1 -1
- package/dist/tools/claude-adapter.js +6 -3
- package/dist/tools/claude-adapter.js.map +1 -1
- package/dist/tools/definitions.d.ts +3 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +56 -5
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/openai-adapter.d.ts.map +1 -1
- package/dist/tools/openai-adapter.js +6 -3
- package/dist/tools/openai-adapter.js.map +1 -1
- package/dist/tools/scratchpad.d.ts +28 -0
- package/dist/tools/scratchpad.d.ts.map +1 -0
- package/dist/tools/scratchpad.js +49 -0
- package/dist/tools/scratchpad.js.map +1 -0
- package/dist/tools/tracker.d.ts +38 -2
- package/dist/tools/tracker.d.ts.map +1 -1
- package/dist/tools/tracker.js +54 -5
- package/dist/tools/tracker.js.map +1 -1
- package/dist/types.d.ts +184 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +17 -1
- package/dist/types.js.map +1 -1
- package/package.json +7 -3
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
import { Agent, run as agentRun, setTracingDisabled, OpenAIChatCompletionsModel, MaxTurnsExceededError } from '@openai/agents';
|
|
2
|
-
import {
|
|
1
|
+
import { Agent, run as agentRun, setTracingDisabled, OpenAIChatCompletionsModel, MaxTurnsExceededError, } from '@openai/agents';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { withTimeout, computeCostUSD, } from '../types.js';
|
|
4
|
+
import { injectionTypeFor } from './injection-type.js';
|
|
3
5
|
import { FileTracker } from '../tools/tracker.js';
|
|
4
6
|
import { createToolImplementations } from '../tools/definitions.js';
|
|
5
7
|
import { createOpenAITools } from '../tools/openai-adapter.js';
|
|
8
|
+
import { TextScratchpad } from '../tools/scratchpad.js';
|
|
9
|
+
import { buildSystemPrompt, buildBudgetHint, buildReGroundingMessage, buildBudgetPressureNudge, RE_GROUNDING_INTERVAL_TURNS, } from './prevention.js';
|
|
10
|
+
import { validateCompletion, buildRePrompt, sameDegenerateOutput, resolveInputTokenSoftLimit, checkWatchdogThreshold, logWatchdogEvent, THINKING_DIAGNOSTIC_MARKER, } from './supervision.js';
|
|
11
|
+
import { classifyError } from './error-classification.js';
|
|
12
|
+
import { findModelProfile } from '../routing/model-profiles.js';
|
|
6
13
|
// Disable tracing — not all OpenAI-compatible providers support it
|
|
7
14
|
setTracingDisabled(true);
|
|
8
15
|
/**
|
|
@@ -12,9 +19,56 @@ setTracingDisabled(true);
|
|
|
12
19
|
* chain-of-thought inline wrapped in `<think>...</think>` tags. These are
|
|
13
20
|
* scratch-pad content and should not surface to the caller. Stripping is
|
|
14
21
|
* non-greedy, multi-line, and handles multiple blocks.
|
|
22
|
+
*
|
|
23
|
+
* If the entire input was reasoning (stripping leaves nothing), return an
|
|
24
|
+
* explicit marker instead of an empty string. Silently swallowing
|
|
25
|
+
* "all thinking, no answer" responses leaves the caller with `output: ""`
|
|
26
|
+
* and no idea what happened — see the openai-runner empty-output diagnostic.
|
|
15
27
|
*/
|
|
16
28
|
export function stripThinkingTags(text) {
|
|
17
|
-
|
|
29
|
+
if (!text)
|
|
30
|
+
return '';
|
|
31
|
+
const stripped = text.replace(/<think>[\s\S]*?<\/think>\s*/gi, '').trimStart();
|
|
32
|
+
if (!stripped && /<think>[\s\S]*?<\/think>/i.test(text)) {
|
|
33
|
+
return THINKING_DIAGNOSTIC_MARKER;
|
|
34
|
+
}
|
|
35
|
+
return stripped;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Hard cap on supervision re-prompts before we give up and salvage. Three is
|
|
39
|
+
* the value chosen in the spec (A.2.2): enough room for the model to recover
|
|
40
|
+
* from a one-off fragment but not so many that a wedged model can burn the
|
|
41
|
+
* budget via repeated re-prompts.
|
|
42
|
+
*/
|
|
43
|
+
const MAX_SUPERVISION_RETRIES = 3;
|
|
44
|
+
/**
|
|
45
|
+
* Extract every assistant text emission from a single `agentRun(...)` result.
|
|
46
|
+
* See the SDK introspection finding in supervision.ts: `result.newItems` is a
|
|
47
|
+
* discriminated union and entries of type `"message_output_item"` wrap an
|
|
48
|
+
* `AssistantMessageItem` whose `content` is a list of `{ type: 'output_text',
|
|
49
|
+
* text }` / `refusal` / `audio` / `image` parts. We concatenate every
|
|
50
|
+
* `output_text` part from every assistant `message_output_item`. Refusals
|
|
51
|
+
* and non-text parts are ignored (they have no salvage value for a
|
|
52
|
+
* text-in-text-out sub-agent).
|
|
53
|
+
*/
|
|
54
|
+
function extractAssistantText(newItems) {
|
|
55
|
+
const chunks = [];
|
|
56
|
+
for (const item of newItems) {
|
|
57
|
+
if (item.type !== 'message_output_item')
|
|
58
|
+
continue;
|
|
59
|
+
const raw = item.rawItem;
|
|
60
|
+
if (raw.role !== 'assistant')
|
|
61
|
+
continue;
|
|
62
|
+
const content = raw.content;
|
|
63
|
+
if (!Array.isArray(content))
|
|
64
|
+
continue;
|
|
65
|
+
for (const part of content) {
|
|
66
|
+
if (part.type === 'output_text' && typeof part.text === 'string') {
|
|
67
|
+
chunks.push(part.text);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return chunks.join('');
|
|
18
72
|
}
|
|
19
73
|
export async function runOpenAI(prompt, options, runner) {
|
|
20
74
|
const maxTurns = options.maxTurns ?? runner.providerConfig.maxTurns ?? runner.defaults.maxTurns;
|
|
@@ -24,7 +78,33 @@ export async function runOpenAI(prompt, options, runner) {
|
|
|
24
78
|
const effort = options.effort ?? runner.providerConfig.effort;
|
|
25
79
|
const sandboxPolicy = options.sandboxPolicy ?? runner.providerConfig.sandboxPolicy ?? 'cwd-only';
|
|
26
80
|
const abortController = new AbortController();
|
|
27
|
-
|
|
81
|
+
// --- Progress event emission (Task 9) -----------------------------------
|
|
82
|
+
//
|
|
83
|
+
// `onProgress` is already wrapped in `safeSink` by the orchestrator
|
|
84
|
+
// (Task 8), so any throw from the consumer callback is swallowed
|
|
85
|
+
// upstream and cannot corrupt this loop. We do not need to wrap it
|
|
86
|
+
// again here.
|
|
87
|
+
const onProgress = options.onProgress;
|
|
88
|
+
const emit = (event) => {
|
|
89
|
+
if (onProgress)
|
|
90
|
+
onProgress(event);
|
|
91
|
+
};
|
|
92
|
+
// Hoisted out of `run()` so the withTimeout callback (which runs in a
|
|
93
|
+
// different microtask chain) can still read partial usage from the last
|
|
94
|
+
// successful agentRun. `run()` updates this on every turn. Declared
|
|
95
|
+
// here (before the tracker) so the FileTracker callback closure can
|
|
96
|
+
// reference it without a TDZ issue at construction.
|
|
97
|
+
let currentResult;
|
|
98
|
+
// The tracker fires `onToolCall` synchronously inside every
|
|
99
|
+
// `trackToolCall(...)` — which itself is called from inside a tool
|
|
100
|
+
// implementation during an `agentRun` turn. That means `currentResult`
|
|
101
|
+
// may still hold the PREVIOUS turn's request count when the callback
|
|
102
|
+
// fires. We read it with an optional chain + fallback and attribute
|
|
103
|
+
// the tool call to the in-flight turn (previous turn + 1).
|
|
104
|
+
const tracker = new FileTracker((summary) => {
|
|
105
|
+
const inflightTurn = (currentResult?.state.usage.requests ?? 0) + 1;
|
|
106
|
+
emit({ kind: 'tool_call', turn: inflightTurn, toolSummary: summary });
|
|
107
|
+
});
|
|
28
108
|
const toolImpls = createToolImplementations(tracker, cwd, sandboxPolicy, abortController.signal);
|
|
29
109
|
const fileTools = toolMode === 'full' ? createOpenAITools(toolImpls, sandboxPolicy) : [];
|
|
30
110
|
// Add hosted tools (web_search, image_generation, etc.) if configured — only when tools are enabled
|
|
@@ -33,60 +113,452 @@ export async function runOpenAI(prompt, options, runner) {
|
|
|
33
113
|
? (runner.providerConfig.hostedTools ?? []).map(t => ({ type: t }))
|
|
34
114
|
: [];
|
|
35
115
|
const tools = [...fileTools, ...hostedTools];
|
|
116
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
36
117
|
const model = new OpenAIChatCompletionsModel(runner.client, runner.providerConfig.model);
|
|
118
|
+
// --- Prevention layer: system prompt + budget hint ---
|
|
119
|
+
//
|
|
120
|
+
// buildSystemPrompt() is deliberately static and parameter-free. The Task 1
|
|
121
|
+
// review rejected speculative `providerLabel` / `maxTurns` parameters — the
|
|
122
|
+
// system prompt is generic ~400 tokens of discipline that applies to every
|
|
123
|
+
// provider. Per-turn budget information is threaded through buildBudgetHint
|
|
124
|
+
// (prepended to the first user prompt) and buildReGroundingMessage
|
|
125
|
+
// (injected every RE_GROUNDING_INTERVAL_TURNS turns).
|
|
126
|
+
const systemPrompt = buildSystemPrompt();
|
|
127
|
+
const budgetHint = buildBudgetHint({ maxTurns });
|
|
128
|
+
const promptWithBudgetHint = `${budgetHint}\n\n${prompt}`;
|
|
129
|
+
// --- onInitialRequest (Task 12) ----------------------------------------
|
|
130
|
+
//
|
|
131
|
+
// Fire once per attempt with the canonical orchestrator-side initial
|
|
132
|
+
// brief: `${systemPrompt}\n\n${promptWithBudgetHint}`. This is NOT the
|
|
133
|
+
// literal request body the `@openai/agents` SDK transmits — the SDK
|
|
134
|
+
// wraps our systemPrompt in the Agent `instructions` field and our
|
|
135
|
+
// user prompt in a messages array. We hash the canonical form instead
|
|
136
|
+
// so the hash is cross-runner stable: the same canonical brief on any
|
|
137
|
+
// of the three runners produces the same hash, even though each SDK's
|
|
138
|
+
// wire format differs. This answers "did the orchestrator send the
|
|
139
|
+
// same brief across retries?" — not "were the literal wire bytes
|
|
140
|
+
// identical?". See `AttemptRecord.initialPromptHash` in types.ts for
|
|
141
|
+
// the full caveat. We guard with try/catch because the orchestrator
|
|
142
|
+
// owns the callback and a throw would corrupt its closure (symmetry
|
|
143
|
+
// with safeSink around onProgress).
|
|
144
|
+
if (options.onInitialRequest) {
|
|
145
|
+
const canonicalInitialBrief = `${systemPrompt}\n\n${promptWithBudgetHint}`;
|
|
146
|
+
try {
|
|
147
|
+
options.onInitialRequest({
|
|
148
|
+
lengthChars: canonicalInitialBrief.length,
|
|
149
|
+
sha256: createHash('sha256').update(canonicalInitialBrief).digest('hex'),
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Swallow — a broken callback must not affect dispatch.
|
|
154
|
+
}
|
|
155
|
+
}
|
|
37
156
|
const agent = new Agent({
|
|
38
157
|
name: 'sub-agent',
|
|
39
158
|
model,
|
|
40
|
-
instructions:
|
|
159
|
+
instructions: systemPrompt,
|
|
41
160
|
tools,
|
|
42
161
|
...(effort && effort !== 'none' && {
|
|
43
162
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
163
|
modelSettings: { reasoning: { effort: effort } },
|
|
45
164
|
}),
|
|
46
165
|
});
|
|
166
|
+
// --- Watchdog: resolve the input-token soft limit once per run ---
|
|
167
|
+
const profile = findModelProfile(runner.providerConfig.model);
|
|
168
|
+
const softLimit = resolveInputTokenSoftLimit(runner.providerConfig, profile);
|
|
169
|
+
// --- Scratchpad: buffers assistant text across every agentRun() call so
|
|
170
|
+
// that every termination path (ok/incomplete/max_turns/error/timeout/
|
|
171
|
+
// force_salvage) can return the best text we heard, even if the final
|
|
172
|
+
// message is junk. ---
|
|
173
|
+
const scratchpad = new TextScratchpad();
|
|
174
|
+
/**
|
|
175
|
+
* Build an AgentInputItem[] for continuing `prev` with a new user message.
|
|
176
|
+
*
|
|
177
|
+
* @openai/agents does NOT expose a `conversation:` option on `run()`. It
|
|
178
|
+
* accepts `string | AgentInputItem[] | RunState` as the input. The idiomatic
|
|
179
|
+
* way to "continue" a completed run with a new user turn is to pass
|
|
180
|
+
* `[...prev.history, { role: 'user', content: newText }]` as the input on
|
|
181
|
+
* the next call. `result.history` is the full conversation (system prompt
|
|
182
|
+
* + original input + every new item generated during the run), typed as
|
|
183
|
+
* `AgentInputItem[]`. See node_modules/@openai/agents-core/dist/run.d.ts
|
|
184
|
+
* line 182 and result.d.ts line 84 (history getter).
|
|
185
|
+
*/
|
|
186
|
+
const continueWith = (prev, nextUserMessage) => {
|
|
187
|
+
const history = prev.history;
|
|
188
|
+
return [
|
|
189
|
+
...history,
|
|
190
|
+
{ role: 'user', content: nextUserMessage },
|
|
191
|
+
];
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* Local helper: run one agent turn and buffer its assistant text into
|
|
195
|
+
* the scratchpad. Closes over `agent`, `abortController`, `scratchpad`
|
|
196
|
+
* and `emit` so every call site in `run()` is just one line AND every
|
|
197
|
+
* turn automatically emits the correct `turn_start` / `text_emission`
|
|
198
|
+
* / `turn_complete` progress events.
|
|
199
|
+
*
|
|
200
|
+
* Event ordering:
|
|
201
|
+
* 1. `turn_start` — fires BEFORE agentRun. Turn number is the NEXT
|
|
202
|
+
* request count (prev + 1) because the SDK won't bump
|
|
203
|
+
* `state.usage.requests` until the call completes.
|
|
204
|
+
* 2. `text_emission` — fires AFTER scratchpad.append, only when the
|
|
205
|
+
* stripped assistant text is non-empty. Skipping empty emissions
|
|
206
|
+
* keeps the event stream useful (empty-text turns are observable
|
|
207
|
+
* via `turn_complete` alone).
|
|
208
|
+
* 3. `turn_complete` — fires AFTER agentRun, with the post-call
|
|
209
|
+
* cumulative usage from `result.state.usage`.
|
|
210
|
+
*/
|
|
211
|
+
const runTurnAndBuffer = async (input, turnBudget) => {
|
|
212
|
+
const nextTurn = (currentResult?.state.usage.requests ?? 0) + 1;
|
|
213
|
+
emit({ kind: 'turn_start', turn: nextTurn, provider: 'openai-compatible' });
|
|
214
|
+
const result = (await agentRun(agent, input, {
|
|
215
|
+
maxTurns: turnBudget,
|
|
216
|
+
signal: abortController.signal,
|
|
217
|
+
}));
|
|
218
|
+
const text = stripThinkingTags(extractAssistantText(result.newItems));
|
|
219
|
+
scratchpad.append(result.state.usage.requests, text);
|
|
220
|
+
if (text.length > 0) {
|
|
221
|
+
emit({
|
|
222
|
+
kind: 'text_emission',
|
|
223
|
+
turn: result.state.usage.requests,
|
|
224
|
+
chars: text.length,
|
|
225
|
+
preview: text.slice(0, 200),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
emit({
|
|
229
|
+
kind: 'turn_complete',
|
|
230
|
+
turn: result.state.usage.requests,
|
|
231
|
+
cumulativeInputTokens: result.state.usage.inputTokens,
|
|
232
|
+
cumulativeOutputTokens: result.state.usage.outputTokens,
|
|
233
|
+
});
|
|
234
|
+
return result;
|
|
235
|
+
};
|
|
47
236
|
const run = async () => {
|
|
48
237
|
try {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
238
|
+
currentResult = await runTurnAndBuffer(promptWithBudgetHint, maxTurns);
|
|
239
|
+
let supervisionRetries = 0;
|
|
240
|
+
// Initialized to `null` (NOT ''): on the first turn there is no
|
|
241
|
+
// previous degenerate output to compare against, so the
|
|
242
|
+
// same-output early-out must be skipped. Initialising to ''
|
|
243
|
+
// would cause `sameDegenerateOutput('', '')` to fire on a first-
|
|
244
|
+
// turn empty output and break the loop before retries run.
|
|
245
|
+
let lastDegenerateOutput = null;
|
|
246
|
+
// Track the input-token count at which we last fired a warning
|
|
247
|
+
// nudge. This prevents nudging twice in a row for the same
|
|
248
|
+
// `currentResult` when validation still fails after a nudge
|
|
249
|
+
// response: the next loop iteration will see
|
|
250
|
+
// `currentInputTokens <= lastWarnedInputTokens` and fall through
|
|
251
|
+
// to validation / re-prompt instead of re-issuing the nudge.
|
|
252
|
+
let lastWarnedInputTokens = -1;
|
|
253
|
+
// Supervision loop. On each iteration we:
|
|
254
|
+
// 1. Check the watchdog (may force-terminate or nudge)
|
|
255
|
+
// 2. Validate the final message (may re-prompt)
|
|
256
|
+
// 3. Inject re-grounding every RE_GROUNDING_INTERVAL_TURNS turns
|
|
257
|
+
// A single pass where validateCompletion returns `valid` is the clean
|
|
258
|
+
// exit. Otherwise we either re-prompt (and loop) or salvage.
|
|
259
|
+
// eslint-disable-next-line no-constant-condition
|
|
260
|
+
while (true) {
|
|
261
|
+
// --- Watchdog check ---
|
|
262
|
+
const currentInputTokens = currentResult.state.usage.inputTokens;
|
|
263
|
+
const watchdogStatus = checkWatchdogThreshold(currentInputTokens, softLimit);
|
|
264
|
+
if (watchdogStatus !== 'ok') {
|
|
265
|
+
logWatchdogEvent(watchdogStatus, {
|
|
266
|
+
provider: 'openai-compatible',
|
|
267
|
+
model: runner.providerConfig.model,
|
|
268
|
+
turn: currentResult.state.usage.requests,
|
|
269
|
+
inputTokens: currentInputTokens,
|
|
270
|
+
softLimit,
|
|
271
|
+
scratchpadChars: scratchpad.toString().length,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
if (watchdogStatus === 'force_salvage') {
|
|
275
|
+
// `watchdog_force_salvage` is not an injected message — no
|
|
276
|
+
// re-prompt is sent — but observers still want to see exactly
|
|
277
|
+
// why the run is being killed. We emit the event with a
|
|
278
|
+
// `contentLengthChars` of 0 to reflect the "nothing was
|
|
279
|
+
// injected, we just terminated" semantics.
|
|
280
|
+
emit({
|
|
281
|
+
kind: 'injection',
|
|
282
|
+
injectionType: 'watchdog_force_salvage',
|
|
283
|
+
turn: currentResult.state.usage.requests,
|
|
284
|
+
contentLengthChars: 0,
|
|
285
|
+
});
|
|
286
|
+
const salvaged = buildForceSalvageResult(currentResult, scratchpad, tracker, runner.providerConfig, softLimit);
|
|
287
|
+
emit({ kind: 'done', status: salvaged.status });
|
|
288
|
+
return salvaged;
|
|
289
|
+
}
|
|
290
|
+
// Warning-band nudge: fire at most once per distinct input-token
|
|
291
|
+
// level. We dispatch the nudge turn, append to the scratchpad,
|
|
292
|
+
// record the new high-watermark, and then FALL THROUGH to the
|
|
293
|
+
// validation block below — the nudge response might itself be a
|
|
294
|
+
// perfectly valid final answer, so we must validate it in the
|
|
295
|
+
// SAME iteration. Without the fall-through, a valid nudge
|
|
296
|
+
// response would be thrown away and the loop would grind until
|
|
297
|
+
// force_salvage (pre-fix bug #1).
|
|
298
|
+
if (watchdogStatus === 'warning' && currentInputTokens > lastWarnedInputTokens) {
|
|
299
|
+
const warning = buildBudgetPressureNudge({
|
|
300
|
+
inputTokens: currentInputTokens,
|
|
301
|
+
softLimit,
|
|
302
|
+
});
|
|
303
|
+
emit({
|
|
304
|
+
kind: 'injection',
|
|
305
|
+
injectionType: 'watchdog_warning',
|
|
306
|
+
turn: currentResult.state.usage.requests,
|
|
307
|
+
contentLengthChars: warning.length,
|
|
308
|
+
});
|
|
309
|
+
lastWarnedInputTokens = currentInputTokens;
|
|
310
|
+
currentResult = await runTurnAndBuffer(continueWith(currentResult, warning), 1);
|
|
311
|
+
}
|
|
312
|
+
// --- Validation check ---
|
|
313
|
+
const stripped = stripThinkingTags(currentResult.finalOutput ?? '');
|
|
314
|
+
const validation = validateCompletion(stripped);
|
|
315
|
+
if (validation.valid) {
|
|
316
|
+
const ok = buildOkResult(stripped, currentResult, tracker, runner.providerConfig);
|
|
317
|
+
emit({ kind: 'done', status: ok.status });
|
|
318
|
+
return ok;
|
|
319
|
+
}
|
|
320
|
+
// Degenerate. Apply same-output early-out (only when we have a
|
|
321
|
+
// prior degenerate output to compare against) and retry budget.
|
|
322
|
+
if (lastDegenerateOutput !== null && sameDegenerateOutput(stripped, lastDegenerateOutput))
|
|
323
|
+
break;
|
|
324
|
+
lastDegenerateOutput = stripped;
|
|
325
|
+
supervisionRetries++;
|
|
326
|
+
if (supervisionRetries >= MAX_SUPERVISION_RETRIES)
|
|
327
|
+
break;
|
|
328
|
+
// --- Re-prompt the model to recover ---
|
|
329
|
+
const rePrompt = buildRePrompt(validation);
|
|
330
|
+
emit({
|
|
331
|
+
kind: 'injection',
|
|
332
|
+
injectionType: injectionTypeFor(validation.kind),
|
|
333
|
+
turn: currentResult.state.usage.requests,
|
|
334
|
+
contentLengthChars: rePrompt.length,
|
|
335
|
+
});
|
|
336
|
+
// Give the model a small budget to recover. One extra turn per
|
|
337
|
+
// retry is enough for the "emit your final answer" nudge.
|
|
338
|
+
currentResult = await runTurnAndBuffer(continueWith(currentResult, rePrompt), 1);
|
|
339
|
+
// --- Periodic re-grounding ---
|
|
340
|
+
const turnsSoFar = currentResult.state.usage.requests;
|
|
341
|
+
if (turnsSoFar > 0 && turnsSoFar % RE_GROUNDING_INTERVAL_TURNS === 0) {
|
|
342
|
+
const reground = buildReGroundingMessage({
|
|
343
|
+
originalPromptExcerpt: prompt,
|
|
344
|
+
currentTurn: turnsSoFar,
|
|
345
|
+
maxTurns,
|
|
346
|
+
toolCallsSoFar: tracker.getToolCalls().length,
|
|
347
|
+
filesReadSoFar: tracker.getReads().length,
|
|
348
|
+
});
|
|
349
|
+
emit({
|
|
350
|
+
kind: 'injection',
|
|
351
|
+
injectionType: 'reground',
|
|
352
|
+
turn: currentResult.state.usage.requests,
|
|
353
|
+
contentLengthChars: reground.length,
|
|
354
|
+
});
|
|
355
|
+
currentResult = await runTurnAndBuffer(continueWith(currentResult, reground), 1);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
// Supervision exhausted (either retry budget or same-output early-out).
|
|
359
|
+
// Salvage from the scratchpad if we have anything; otherwise return the
|
|
360
|
+
// existing incomplete diagnostic.
|
|
361
|
+
const exhausted = buildSupervisionExhaustedResult(currentResult, scratchpad, tracker, runner.providerConfig);
|
|
362
|
+
emit({ kind: 'done', status: exhausted.status });
|
|
363
|
+
return exhausted;
|
|
63
364
|
}
|
|
64
365
|
catch (err) {
|
|
65
366
|
if (err instanceof MaxTurnsExceededError) {
|
|
367
|
+
// max_turns path: prefer scratchpad salvage over the bare diagnostic.
|
|
368
|
+
// Preserve whatever partial usage we accumulated in the last
|
|
369
|
+
// successful agentRun so the caller sees real numbers, not zeros.
|
|
370
|
+
const filesRead = tracker.getReads();
|
|
371
|
+
const filesWritten = tracker.getWrites();
|
|
372
|
+
const toolCalls = tracker.getToolCalls();
|
|
373
|
+
emit({ kind: 'done', status: 'max_turns' });
|
|
374
|
+
const hasSalvage = !scratchpad.isEmpty();
|
|
66
375
|
return {
|
|
67
|
-
output:
|
|
376
|
+
output: hasSalvage
|
|
377
|
+
? scratchpad.latest()
|
|
378
|
+
: `Agent exceeded max turns (${maxTurns}).`,
|
|
68
379
|
status: 'max_turns',
|
|
69
|
-
usage:
|
|
70
|
-
turns: maxTurns,
|
|
71
|
-
|
|
380
|
+
usage: partialUsage(currentResult, runner.providerConfig),
|
|
381
|
+
turns: currentResult?.state.usage.requests ?? maxTurns,
|
|
382
|
+
filesRead,
|
|
383
|
+
filesWritten,
|
|
384
|
+
toolCalls,
|
|
385
|
+
outputIsDiagnostic: !hasSalvage,
|
|
386
|
+
escalationLog: [],
|
|
72
387
|
};
|
|
73
388
|
}
|
|
389
|
+
// Classify the thrown error into a finer-grained RunStatus so the
|
|
390
|
+
// escalation orchestrator (and downstream observers) can distinguish
|
|
391
|
+
// abort / network / HTTP-error / generic failure modes. We still
|
|
392
|
+
// surface the original error message as the `error` field — the
|
|
393
|
+
// classifier's `reason` is deliberately a stable category label and
|
|
394
|
+
// NOT the human-readable message.
|
|
395
|
+
const { status, reason } = classifyError(err);
|
|
396
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
397
|
+
emit({ kind: 'done', status });
|
|
398
|
+
const hasSalvage = !scratchpad.isEmpty();
|
|
74
399
|
return {
|
|
75
|
-
output: `Sub-agent error: ${
|
|
76
|
-
status
|
|
77
|
-
usage:
|
|
78
|
-
turns: 0,
|
|
79
|
-
|
|
80
|
-
|
|
400
|
+
output: hasSalvage ? scratchpad.latest() : `Sub-agent error: ${msg}`,
|
|
401
|
+
status,
|
|
402
|
+
usage: partialUsage(currentResult, runner.providerConfig),
|
|
403
|
+
turns: currentResult?.state.usage.requests ?? 0,
|
|
404
|
+
filesRead: tracker.getReads(),
|
|
405
|
+
filesWritten: tracker.getWrites(),
|
|
406
|
+
toolCalls: tracker.getToolCalls(),
|
|
407
|
+
outputIsDiagnostic: !hasSalvage,
|
|
408
|
+
escalationLog: [],
|
|
409
|
+
error: msg || reason,
|
|
81
410
|
};
|
|
82
411
|
}
|
|
83
412
|
};
|
|
84
|
-
return withTimeout(run(), timeoutMs, () =>
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
413
|
+
return withTimeout(run(), timeoutMs, () => {
|
|
414
|
+
emit({ kind: 'done', status: 'timeout' });
|
|
415
|
+
const hasSalvage = !scratchpad.isEmpty();
|
|
416
|
+
return {
|
|
417
|
+
output: hasSalvage
|
|
418
|
+
? scratchpad.latest()
|
|
419
|
+
: `Agent timed out after ${timeoutMs}ms.`,
|
|
420
|
+
status: 'timeout',
|
|
421
|
+
filesRead: tracker.getReads(),
|
|
422
|
+
filesWritten: tracker.getWrites(),
|
|
423
|
+
toolCalls: tracker.getToolCalls(),
|
|
424
|
+
// Preserve partial usage from the last successful agentRun so the
|
|
425
|
+
// caller sees real numbers, not zeros, on a timeout.
|
|
426
|
+
usage: partialUsage(currentResult, runner.providerConfig),
|
|
427
|
+
turns: currentResult?.state.usage.requests ?? maxTurns,
|
|
428
|
+
outputIsDiagnostic: !hasSalvage,
|
|
429
|
+
escalationLog: [],
|
|
430
|
+
};
|
|
431
|
+
}, abortController);
|
|
432
|
+
}
|
|
433
|
+
// --- Helpers: canonical return-shape builders -------------------------------
|
|
434
|
+
function buildOkResult(output, currentResult, tracker, providerConfig) {
|
|
435
|
+
const usage = currentResult.state.usage;
|
|
436
|
+
const costUSD = computeCostUSD(usage.inputTokens, usage.outputTokens, providerConfig);
|
|
437
|
+
return {
|
|
438
|
+
output,
|
|
439
|
+
status: 'ok',
|
|
440
|
+
usage: {
|
|
441
|
+
inputTokens: usage.inputTokens,
|
|
442
|
+
outputTokens: usage.outputTokens,
|
|
443
|
+
totalTokens: usage.totalTokens,
|
|
444
|
+
costUSD,
|
|
445
|
+
},
|
|
446
|
+
turns: usage.requests,
|
|
447
|
+
filesRead: tracker.getReads(),
|
|
448
|
+
filesWritten: tracker.getWrites(),
|
|
449
|
+
toolCalls: tracker.getToolCalls(),
|
|
450
|
+
// `ok` always carries a real model answer — never a diagnostic.
|
|
451
|
+
outputIsDiagnostic: false,
|
|
452
|
+
escalationLog: [],
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
function buildSupervisionExhaustedResult(currentResult, scratchpad, tracker, providerConfig) {
|
|
456
|
+
const usage = currentResult.state.usage;
|
|
457
|
+
const filesRead = tracker.getReads();
|
|
458
|
+
const filesWritten = tracker.getWrites();
|
|
459
|
+
const toolCalls = tracker.getToolCalls();
|
|
460
|
+
const costUSD = computeCostUSD(usage.inputTokens, usage.outputTokens, providerConfig);
|
|
461
|
+
const hasSalvage = !scratchpad.isEmpty();
|
|
462
|
+
return {
|
|
463
|
+
output: hasSalvage
|
|
464
|
+
? scratchpad.latest()
|
|
465
|
+
: buildIncompleteDiagnostic({
|
|
466
|
+
providerLabel: 'openai-compatible',
|
|
467
|
+
turns: usage.requests,
|
|
468
|
+
inputTokens: usage.inputTokens,
|
|
469
|
+
outputTokens: usage.outputTokens,
|
|
470
|
+
filesRead,
|
|
471
|
+
filesWritten,
|
|
472
|
+
}),
|
|
473
|
+
status: 'incomplete',
|
|
474
|
+
usage: {
|
|
475
|
+
inputTokens: usage.inputTokens,
|
|
476
|
+
outputTokens: usage.outputTokens,
|
|
477
|
+
totalTokens: usage.totalTokens,
|
|
478
|
+
costUSD,
|
|
479
|
+
},
|
|
480
|
+
turns: usage.requests,
|
|
481
|
+
filesRead,
|
|
482
|
+
filesWritten,
|
|
483
|
+
toolCalls,
|
|
484
|
+
outputIsDiagnostic: !hasSalvage,
|
|
485
|
+
escalationLog: [],
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
function buildForceSalvageResult(currentResult, scratchpad, tracker, providerConfig, softLimit) {
|
|
489
|
+
const usage = currentResult.state.usage;
|
|
490
|
+
const filesRead = tracker.getReads();
|
|
491
|
+
const filesWritten = tracker.getWrites();
|
|
492
|
+
const toolCalls = tracker.getToolCalls();
|
|
493
|
+
const costUSD = computeCostUSD(usage.inputTokens, usage.outputTokens, providerConfig);
|
|
494
|
+
const hasSalvage = !scratchpad.isEmpty();
|
|
495
|
+
return {
|
|
496
|
+
output: hasSalvage
|
|
497
|
+
? scratchpad.latest()
|
|
498
|
+
: `[openai-compatible sub-agent forcibly terminated at ${usage.inputTokens} input tokens (soft limit ${softLimit}). No usable text was buffered.]`,
|
|
499
|
+
status: 'incomplete',
|
|
500
|
+
usage: {
|
|
501
|
+
inputTokens: usage.inputTokens,
|
|
502
|
+
outputTokens: usage.outputTokens,
|
|
503
|
+
totalTokens: usage.totalTokens,
|
|
504
|
+
costUSD,
|
|
505
|
+
},
|
|
506
|
+
turns: usage.requests,
|
|
507
|
+
filesRead,
|
|
508
|
+
filesWritten,
|
|
509
|
+
toolCalls,
|
|
510
|
+
outputIsDiagnostic: !hasSalvage,
|
|
511
|
+
escalationLog: [],
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
/**
|
|
515
|
+
* Synthesise a diagnostic message for runs that completed without producing
|
|
516
|
+
* usable final output. Surfaces enough metadata for the caller to debug:
|
|
517
|
+
* how many turns were spent, what the model burnt token-wise, and what files
|
|
518
|
+
* the worker actually looked at before giving up.
|
|
519
|
+
*/
|
|
520
|
+
function buildIncompleteDiagnostic(opts) {
|
|
521
|
+
const lines = [
|
|
522
|
+
`[${opts.providerLabel} sub-agent terminated without producing a final answer]`,
|
|
523
|
+
'',
|
|
524
|
+
'The agent loop ended on a message with no tool calls and no plain-text content. ' +
|
|
525
|
+
'This usually means one of:',
|
|
526
|
+
' • the model emitted only <think> reasoning, then stopped',
|
|
527
|
+
' • the model produced a conversational fragment instead of a final answer',
|
|
528
|
+
' • a tool call was malformed and the SDK treated the response as terminal',
|
|
529
|
+
'',
|
|
530
|
+
`Turns used: ${opts.turns}`,
|
|
531
|
+
`Input tokens: ${opts.inputTokens}`,
|
|
532
|
+
`Output tokens: ${opts.outputTokens}`,
|
|
533
|
+
`Files read: ${opts.filesRead.length}${opts.filesRead.length > 0 ? ` (${formatFileList(opts.filesRead)})` : ''}`,
|
|
534
|
+
`Files written: ${opts.filesWritten.length}${opts.filesWritten.length > 0 ? ` (${formatFileList(opts.filesWritten)})` : ''}`,
|
|
535
|
+
'',
|
|
536
|
+
'Recommended action: re-dispatch with a tighter, more explicit brief, or escalate to a higher-tier provider.',
|
|
537
|
+
];
|
|
538
|
+
return lines.join('\n');
|
|
539
|
+
}
|
|
540
|
+
function formatFileList(files) {
|
|
541
|
+
const MAX_SHOWN = 10;
|
|
542
|
+
if (files.length <= MAX_SHOWN)
|
|
543
|
+
return files.join(', ');
|
|
544
|
+
return `${files.slice(0, MAX_SHOWN).join(', ')}, … ${files.length - MAX_SHOWN} more`;
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Read whatever usage we managed to accumulate from the last successful
|
|
548
|
+
* `agentRun` before a throw, max_turns, or timeout. Used by every
|
|
549
|
+
* non-happy-path return so the caller sees real token counts (and a
|
|
550
|
+
* real cost estimate) instead of zeros.
|
|
551
|
+
*/
|
|
552
|
+
function partialUsage(result, providerConfig) {
|
|
553
|
+
if (!result) {
|
|
554
|
+
return { inputTokens: 0, outputTokens: 0, totalTokens: 0, costUSD: null };
|
|
555
|
+
}
|
|
556
|
+
const usage = result.state.usage;
|
|
557
|
+
return {
|
|
558
|
+
inputTokens: usage.inputTokens,
|
|
559
|
+
outputTokens: usage.outputTokens,
|
|
560
|
+
totalTokens: usage.totalTokens,
|
|
561
|
+
costUSD: computeCostUSD(usage.inputTokens, usage.outputTokens, providerConfig),
|
|
562
|
+
};
|
|
91
563
|
}
|
|
92
564
|
//# sourceMappingURL=openai-runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-runner.js","sourceRoot":"","sources":["../../src/runners/openai-runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openai-runner.js","sourceRoot":"","sources":["../../src/runners/openai-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,GAAG,IAAI,QAAQ,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,WAAW,EACX,cAAc,GAKf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAsBvD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,EACtB,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,mEAAmE;AACnE,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAEzB;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;IAC/E,IAAI,CAAC,QAAQ,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,OAAO,0BAA0B,CAAC;IACpC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAQD;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAElC;;;;;;;;;GASG;AACH,SAAS,oBAAoB,CAAC,QAAmB;IAC/C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB;YAAE,SAAS;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QACzB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QACvC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,SAAS;QACtC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACjE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,OAAmB,EACnB,MAA2B;IAE3B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAChG,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,cAAc,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;IACpG,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;IAE9D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC,cAAc,CAAC,aAAa,IAAI,UAAU,CAAC;IACjG,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAE9C,2EAA2E;IAC3E,EAAE;IACF,oEAAoE;IACpE,iEAAiE;IACjE,mEAAmE;IACnE,cAAc;IACd,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,MAAM,IAAI,GAAG,CAAC,KAAoB,EAAQ,EAAE;QAC1C,IAAI,UAAU;YAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,sEAAsE;IACtE,wEAAwE;IACxE,oEAAoE;IACpE,oEAAoE;IACpE,oDAAoD;IACpD,IAAI,aAAyC,CAAC;IAE9C,4DAA4D;IAC5D,mEAAmE;IACnE,uEAAuE;IACvE,qEAAqE;IACrE,oEAAoE;IACpE,2DAA2D;IAC3D,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE;QAC1C,MAAM,YAAY,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACpE,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACjG,MAAM,SAAS,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzF,oGAAoG;IACpG,8DAA8D;IAC9D,MAAM,WAAW,GAAG,QAAQ,KAAK,MAAM;QACrC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAU,CAAA,CAAC;QAC1E,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC;IAE7C,8DAA8D;IAC9D,MAAM,KAAK,GAAG,IAAI,0BAA0B,CAAC,MAAM,CAAC,MAAa,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAEhG,wDAAwD;IACxD,EAAE;IACF,4EAA4E;IAC5E,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,mEAAmE;IACnE,sDAAsD;IACtD,MAAM,YAAY,GAAG,iBAAiB,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjD,MAAM,oBAAoB,GAAG,GAAG,UAAU,OAAO,MAAM,EAAE,CAAC;IAE1D,0EAA0E;IAC1E,EAAE;IACF,qEAAqE;IACrE,uEAAuE;IACvE,oEAAoE;IACpE,mEAAmE;IACnE,sEAAsE;IACtE,sEAAsE;IACtE,sEAAsE;IACtE,mEAAmE;IACnE,iEAAiE;IACjE,qEAAqE;IACrE,oEAAoE;IACpE,oEAAoE;IACpE,oCAAoC;IACpC,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,MAAM,qBAAqB,GAAG,GAAG,YAAY,OAAO,oBAAoB,EAAE,CAAC;QAC3E,IAAI,CAAC;YACH,OAAO,CAAC,gBAAgB,CAAC;gBACvB,WAAW,EAAE,qBAAqB,CAAC,MAAM;gBACzC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aACzE,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;QAC1D,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,WAAW;QACjB,KAAK;QACL,YAAY,EAAE,YAAY;QAC1B,KAAK;QACL,GAAG,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI;YACjC,8DAA8D;YAC9D,aAAa,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAa,EAAE,EAAE;SACxD,CAAC;KACH,CAAC,CAAC;IAEH,oEAAoE;IACpE,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,0BAA0B,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAE7E,yEAAyE;IACzE,sEAAsE;IACtE,sEAAsE;IACtE,uBAAuB;IACvB,MAAM,UAAU,GAAG,IAAI,cAAc,EAAE,CAAC;IAExC;;;;;;;;;;;OAWG;IACH,MAAM,YAAY,GAAG,CACnB,IAAoB,EACpB,eAAuB,EACL,EAAE;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,OAAO;YACL,GAAG,OAAO;YACV,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,eAAe,EAAE;SACpD,CAAC;IACJ,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,gBAAgB,GAAG,KAAK,EAC5B,KAAgC,EAChC,UAAkB,EACO,EAAE;QAC3B,MAAM,QAAQ,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE;YAC3C,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,eAAe,CAAC,MAAM;SAC/B,CAAC,CAAmB,CAAC;QACtB,MAAM,IAAI,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;gBACjC,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;aAC5B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC;YACH,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;YACjC,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;YACrD,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY;SACxD,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,KAAK,IAAwB,EAAE;QACzC,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,gBAAgB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;YAEvE,IAAI,kBAAkB,GAAG,CAAC,CAAC;YAC3B,gEAAgE;YAChE,wDAAwD;YACxD,4DAA4D;YAC5D,iEAAiE;YACjE,2DAA2D;YAC3D,IAAI,oBAAoB,GAAkB,IAAI,CAAC;YAC/C,+DAA+D;YAC/D,2DAA2D;YAC3D,4DAA4D;YAC5D,6CAA6C;YAC7C,iEAAiE;YACjE,6DAA6D;YAC7D,IAAI,qBAAqB,GAAG,CAAC,CAAC,CAAC;YAE/B,0CAA0C;YAC1C,yDAAyD;YACzD,kDAAkD;YAClD,mEAAmE;YACnE,sEAAsE;YACtE,6DAA6D;YAC7D,iDAAiD;YACjD,OAAO,IAAI,EAAE,CAAC;gBACZ,yBAAyB;gBACzB,MAAM,kBAAkB,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;gBACjE,MAAM,cAAc,GAAG,sBAAsB,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;gBAE7E,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;oBAC5B,gBAAgB,CAAC,cAAc,EAAE;wBAC/B,QAAQ,EAAE,mBAAmB;wBAC7B,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK;wBAClC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;wBACxC,WAAW,EAAE,kBAAkB;wBAC/B,SAAS;wBACT,eAAe,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM;qBAC9C,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,cAAc,KAAK,eAAe,EAAE,CAAC;oBACvC,2DAA2D;oBAC3D,8DAA8D;oBAC9D,wDAAwD;oBACxD,wDAAwD;oBACxD,2CAA2C;oBAC3C,IAAI,CAAC;wBACH,IAAI,EAAE,WAAW;wBACjB,aAAa,EAAE,wBAAwB;wBACvC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;wBACxC,kBAAkB,EAAE,CAAC;qBACtB,CAAC,CAAC;oBACH,MAAM,QAAQ,GAAG,uBAAuB,CACtC,aAAa,EACb,UAAU,EACV,OAAO,EACP,MAAM,CAAC,cAAc,EACrB,SAAS,CACV,CAAC;oBACF,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;oBAChD,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBAED,iEAAiE;gBACjE,+DAA+D;gBAC/D,8DAA8D;gBAC9D,gEAAgE;gBAChE,8DAA8D;gBAC9D,0DAA0D;gBAC1D,+DAA+D;gBAC/D,kCAAkC;gBAClC,IAAI,cAAc,KAAK,SAAS,IAAI,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;oBAC/E,MAAM,OAAO,GAAG,wBAAwB,CAAC;wBACvC,WAAW,EAAE,kBAAkB;wBAC/B,SAAS;qBACV,CAAC,CAAC;oBACH,IAAI,CAAC;wBACH,IAAI,EAAE,WAAW;wBACjB,aAAa,EAAE,kBAAkB;wBACjC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;wBACxC,kBAAkB,EAAE,OAAO,CAAC,MAAM;qBACnC,CAAC,CAAC;oBACH,qBAAqB,GAAG,kBAAkB,CAAC;oBAC3C,aAAa,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClF,CAAC;gBAED,2BAA2B;gBAC3B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;gBACpE,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBAEhD,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;oBACrB,MAAM,EAAE,GAAG,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;oBAClF,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC1C,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,+DAA+D;gBAC/D,gEAAgE;gBAChE,IAAI,oBAAoB,KAAK,IAAI,IAAI,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,CAAC;oBAAE,MAAM;gBACjG,oBAAoB,GAAG,QAAQ,CAAC;gBAChC,kBAAkB,EAAE,CAAC;gBACrB,IAAI,kBAAkB,IAAI,uBAAuB;oBAAE,MAAM;gBAEzD,yCAAyC;gBACzC,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;gBAC3C,IAAI,CAAC;oBACH,IAAI,EAAE,WAAW;oBACjB,aAAa,EAAE,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC;oBAChD,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;oBACxC,kBAAkB,EAAE,QAAQ,CAAC,MAAM;iBACpC,CAAC,CAAC;gBACH,+DAA+D;gBAC/D,0DAA0D;gBAC1D,aAAa,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEjF,gCAAgC;gBAChC,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACtD,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,2BAA2B,KAAK,CAAC,EAAE,CAAC;oBACrE,MAAM,QAAQ,GAAG,uBAAuB,CAAC;wBACvC,qBAAqB,EAAE,MAAM;wBAC7B,WAAW,EAAE,UAAU;wBACvB,QAAQ;wBACR,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM;wBAC7C,cAAc,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM;qBAC1C,CAAC,CAAC;oBACH,IAAI,CAAC;wBACH,IAAI,EAAE,WAAW;wBACjB,aAAa,EAAE,UAAU;wBACzB,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;wBACxC,kBAAkB,EAAE,QAAQ,CAAC,MAAM;qBACpC,CAAC,CAAC;oBACH,aAAa,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC;YAED,wEAAwE;YACxE,wEAAwE;YACxE,kCAAkC;YAClC,MAAM,SAAS,GAAG,+BAA+B,CAC/C,aAAa,EACb,UAAU,EACV,OAAO,EACP,MAAM,CAAC,cAAc,CACtB,CAAC;YACF,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;YACjD,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;gBACzC,sEAAsE;gBACtE,6DAA6D;gBAC7D,kEAAkE;gBAClE,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC5C,MAAM,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACzC,OAAO;oBACL,MAAM,EAAE,UAAU;wBAChB,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE;wBACrB,CAAC,CAAC,6BAA6B,QAAQ,IAAI;oBAC7C,MAAM,EAAE,WAAW;oBACnB,KAAK,EAAE,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,cAAc,CAAC;oBACzD,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ;oBACtD,SAAS;oBACT,YAAY;oBACZ,SAAS;oBACT,kBAAkB,EAAE,CAAC,UAAU;oBAC/B,aAAa,EAAE,EAAE;iBAClB,CAAC;YACJ,CAAC;YACD,kEAAkE;YAClE,qEAAqE;YACrE,iEAAiE;YACjE,gEAAgE;YAChE,oEAAoE;YACpE,kCAAkC;YAClC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/B,MAAM,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACzC,OAAO;gBACL,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,oBAAoB,GAAG,EAAE;gBACpE,MAAM;gBACN,KAAK,EAAE,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,cAAc,CAAC;gBACzD,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC;gBAC/C,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE;gBAC7B,YAAY,EAAE,OAAO,CAAC,SAAS,EAAE;gBACjC,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE;gBACjC,kBAAkB,EAAE,CAAC,UAAU;gBAC/B,aAAa,EAAE,EAAE;gBACjB,KAAK,EAAE,GAAG,IAAI,MAAM;aACrB,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,WAAW,CAChB,GAAG,EAAE,EACL,SAAS,EACT,GAAG,EAAE;QACH,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACzC,OAAO;YACL,MAAM,EAAE,UAAU;gBAChB,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE;gBACrB,CAAC,CAAC,yBAAyB,SAAS,KAAK;YAC3C,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE;YAC7B,YAAY,EAAE,OAAO,CAAC,SAAS,EAAE;YACjC,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE;YACjC,kEAAkE;YAClE,qDAAqD;YACrD,KAAK,EAAE,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,cAAc,CAAC;YACzD,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ;YACtD,kBAAkB,EAAE,CAAC,UAAU;YAC/B,aAAa,EAAE,EAAE;SAClB,CAAC;IACJ,CAAC,EACD,eAAe,CAChB,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,SAAS,aAAa,CACpB,MAAc,EACd,aAA6B,EAC7B,OAAoB,EACpB,cAA8B;IAE9B,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;IACxC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACtF,OAAO;QACL,MAAM;QACN,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE;YACL,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO;SACR;QACD,KAAK,EAAE,KAAK,CAAC,QAAQ;QACrB,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE;QAC7B,YAAY,EAAE,OAAO,CAAC,SAAS,EAAE;QACjC,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE;QACjC,gEAAgE;QAChE,kBAAkB,EAAE,KAAK;QACzB,aAAa,EAAE,EAAE;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CACtC,aAA6B,EAC7B,UAA0B,EAC1B,OAAoB,EACpB,cAA8B;IAE9B,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACtF,MAAM,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,UAAU;YAChB,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE;YACrB,CAAC,CAAC,yBAAyB,CAAC;gBACxB,aAAa,EAAE,mBAAmB;gBAClC,KAAK,EAAE,KAAK,CAAC,QAAQ;gBACrB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,SAAS;gBACT,YAAY;aACb,CAAC;QACN,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE;YACL,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO;SACR;QACD,KAAK,EAAE,KAAK,CAAC,QAAQ;QACrB,SAAS;QACT,YAAY;QACZ,SAAS;QACT,kBAAkB,EAAE,CAAC,UAAU;QAC/B,aAAa,EAAE,EAAE;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,aAA6B,EAC7B,UAA0B,EAC1B,OAAoB,EACpB,cAA8B,EAC9B,SAAiB;IAEjB,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACtF,MAAM,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,UAAU;YAChB,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE;YACrB,CAAC,CAAC,uDAAuD,KAAK,CAAC,WAAW,6BAA6B,SAAS,kCAAkC;QACpJ,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE;YACL,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO;SACR;QACD,KAAK,EAAE,KAAK,CAAC,QAAQ;QACrB,SAAS;QACT,YAAY;QACZ,SAAS;QACT,kBAAkB,EAAE,CAAC,UAAU;QAC/B,aAAa,EAAE,EAAE;KAClB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,yBAAyB,CAAC,IAOlC;IACC,MAAM,KAAK,GAAG;QACZ,IAAI,IAAI,CAAC,aAAa,yDAAyD;QAC/E,EAAE;QACF,kFAAkF;YAChF,4BAA4B;QAC9B,4DAA4D;QAC5D,4EAA4E;QAC5E,4EAA4E;QAC5E,EAAE;QACF,kBAAkB,IAAI,CAAC,KAAK,EAAE;QAC9B,kBAAkB,IAAI,CAAC,WAAW,EAAE;QACpC,kBAAkB,IAAI,CAAC,YAAY,EAAE;QACrC,kBAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACnH,kBAAkB,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5H,EAAE;QACF,6GAA6G;KAC9G,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,KAAe;IACrC,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,MAAM,GAAG,SAAS,OAAO,CAAC;AACvF,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CACnB,MAAkC,EAClC,cAA8B;IAE9B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5E,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;IACjC,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC;KAC/E,CAAC;AACJ,CAAC"}
|