@cleocode/core 2026.6.5 → 2026.6.7
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/dist/dispatch/contracts/output-contracts.d.ts +36 -0
- package/dist/dispatch/contracts/output-contracts.d.ts.map +1 -0
- package/dist/dispatch/contracts/output-contracts.js +38 -0
- package/dist/dispatch/contracts/output-contracts.js.map +1 -0
- package/dist/dispatch/describe-operation.d.ts +98 -0
- package/dist/dispatch/describe-operation.d.ts.map +1 -0
- package/dist/dispatch/describe-operation.js +101 -0
- package/dist/dispatch/describe-operation.js.map +1 -0
- package/dist/docs/export-document.js +933 -489
- package/dist/docs/export-document.js.map +3 -3
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +6 -0
- package/dist/internal.js.map +1 -1
- package/dist/llm/api-mode.d.ts +64 -0
- package/dist/llm/api-mode.d.ts.map +1 -0
- package/dist/llm/api-mode.js +72 -0
- package/dist/llm/api-mode.js.map +1 -0
- package/dist/llm/api.d.ts.map +1 -1
- package/dist/llm/api.js +6 -37
- package/dist/llm/api.js.map +1 -1
- package/dist/llm/auxiliary-fallback.d.ts.map +1 -1
- package/dist/llm/auxiliary-fallback.js +24 -38
- package/dist/llm/auxiliary-fallback.js.map +1 -1
- package/dist/llm/index.d.ts +1 -3
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +1 -2
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/model-metadata.d.ts +14 -0
- package/dist/llm/model-metadata.d.ts.map +1 -1
- package/dist/llm/model-metadata.js +23 -0
- package/dist/llm/model-metadata.js.map +1 -1
- package/dist/llm/model-runner.d.ts +127 -0
- package/dist/llm/model-runner.d.ts.map +1 -0
- package/dist/llm/model-runner.js +312 -0
- package/dist/llm/model-runner.js.map +1 -0
- package/dist/llm/plugin-facade.js +30084 -1748
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/llm/provider-registry/builtin/anthropic.d.ts.map +1 -1
- package/dist/llm/provider-registry/builtin/anthropic.js +4 -0
- package/dist/llm/provider-registry/builtin/anthropic.js.map +1 -1
- package/dist/llm/provider-registry/builtin/gemini.d.ts.map +1 -1
- package/dist/llm/provider-registry/builtin/gemini.js +4 -0
- package/dist/llm/provider-registry/builtin/gemini.js.map +1 -1
- package/dist/llm/provider-registry/builtin/ollama.d.ts.map +1 -1
- package/dist/llm/provider-registry/builtin/ollama.js +4 -0
- package/dist/llm/provider-registry/builtin/ollama.js.map +1 -1
- package/dist/llm/provider-registry/builtin/openai.d.ts.map +1 -1
- package/dist/llm/provider-registry/builtin/openai.js +6 -0
- package/dist/llm/provider-registry/builtin/openai.js.map +1 -1
- package/dist/llm/role-executor.d.ts +6 -5
- package/dist/llm/role-executor.d.ts.map +1 -1
- package/dist/llm/role-executor.js +40 -86
- package/dist/llm/role-executor.js.map +1 -1
- package/dist/llm/role-resolver.d.ts +28 -1
- package/dist/llm/role-resolver.d.ts.map +1 -1
- package/dist/llm/role-resolver.js +10 -0
- package/dist/llm/role-resolver.js.map +1 -1
- package/dist/llm/session-factory.d.ts +4 -6
- package/dist/llm/session-factory.d.ts.map +1 -1
- package/dist/llm/session-factory.js +6 -72
- package/dist/llm/session-factory.js.map +1 -1
- package/dist/llm/system-resolver.d.ts.map +1 -1
- package/dist/llm/system-resolver.js +6 -0
- package/dist/llm/system-resolver.js.map +1 -1
- package/dist/llm/tool-loop.d.ts.map +1 -1
- package/dist/llm/tool-loop.js +9 -32
- package/dist/llm/tool-loop.js.map +1 -1
- package/dist/llm/transports/index.d.ts +5 -3
- package/dist/llm/transports/index.d.ts.map +1 -1
- package/dist/llm/transports/index.js +5 -2
- package/dist/llm/transports/index.js.map +1 -1
- package/dist/reconciliation/reconciliation-engine.d.ts.map +1 -1
- package/dist/reconciliation/reconciliation-engine.js +3 -0
- package/dist/reconciliation/reconciliation-engine.js.map +1 -1
- package/dist/release/plan.d.ts +27 -0
- package/dist/release/plan.d.ts.map +1 -1
- package/dist/release/plan.js +36 -2
- package/dist/release/plan.js.map +1 -1
- package/dist/release/provenance-fk.d.ts +74 -0
- package/dist/release/provenance-fk.d.ts.map +1 -0
- package/dist/release/provenance-fk.js +122 -0
- package/dist/release/provenance-fk.js.map +1 -0
- package/dist/release/reconcile.d.ts +10 -0
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +107 -2
- package/dist/release/reconcile.js.map +1 -1
- package/dist/sticky/convert.d.ts.map +1 -1
- package/dist/sticky/convert.js +3 -0
- package/dist/sticky/convert.js.map +1 -1
- package/dist/store/exodus/column-transforms.d.ts +275 -0
- package/dist/store/exodus/column-transforms.d.ts.map +1 -0
- package/dist/store/exodus/column-transforms.js +478 -0
- package/dist/store/exodus/column-transforms.js.map +1 -0
- package/dist/store/exodus/count-parity.d.ts +71 -0
- package/dist/store/exodus/count-parity.d.ts.map +1 -0
- package/dist/store/exodus/count-parity.js +124 -0
- package/dist/store/exodus/count-parity.js.map +1 -0
- package/dist/store/exodus/health.d.ts +70 -0
- package/dist/store/exodus/health.d.ts.map +1 -0
- package/dist/store/exodus/health.js +130 -0
- package/dist/store/exodus/health.js.map +1 -0
- package/dist/store/exodus/index.d.ts +3 -0
- package/dist/store/exodus/index.d.ts.map +1 -1
- package/dist/store/exodus/index.js +3 -0
- package/dist/store/exodus/index.js.map +1 -1
- package/dist/store/exodus/migrate.d.ts.map +1 -1
- package/dist/store/exodus/migrate.js +103 -298
- package/dist/store/exodus/migrate.js.map +1 -1
- package/dist/store/exodus/plan.d.ts +48 -4
- package/dist/store/exodus/plan.d.ts.map +1 -1
- package/dist/store/exodus/plan.js +67 -9
- package/dist/store/exodus/plan.js.map +1 -1
- package/dist/store/exodus/seal.d.ts +69 -0
- package/dist/store/exodus/seal.d.ts.map +1 -0
- package/dist/store/exodus/seal.js +73 -0
- package/dist/store/exodus/seal.js.map +1 -0
- package/dist/store/exodus/types.d.ts +24 -1
- package/dist/store/exodus/types.d.ts.map +1 -1
- package/dist/store/exodus/types.js.map +1 -1
- package/dist/store/exodus/verify-migration.d.ts.map +1 -1
- package/dist/store/exodus/verify-migration.js +109 -24
- package/dist/store/exodus/verify-migration.js.map +1 -1
- package/dist/tasks/add.d.ts +13 -0
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +50 -18
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/archive.d.ts.map +1 -1
- package/dist/tasks/archive.js +12 -7
- package/dist/tasks/archive.js.map +1 -1
- package/dist/tasks/child-disposition.d.ts +66 -0
- package/dist/tasks/child-disposition.d.ts.map +1 -0
- package/dist/tasks/child-disposition.js +80 -0
- package/dist/tasks/child-disposition.js.map +1 -0
- package/dist/tasks/delete-preview.js +1 -1
- package/dist/tasks/delete-preview.js.map +1 -1
- package/dist/tasks/deletion-strategy.d.ts +21 -3
- package/dist/tasks/deletion-strategy.d.ts.map +1 -1
- package/dist/tasks/deletion-strategy.js +61 -15
- package/dist/tasks/deletion-strategy.js.map +1 -1
- package/dist/tasks/engine-wrap.d.ts +8 -0
- package/dist/tasks/engine-wrap.d.ts.map +1 -1
- package/dist/tasks/engine-wrap.js +22 -9
- package/dist/tasks/engine-wrap.js.map +1 -1
- package/dist/tasks/update.d.ts.map +1 -1
- package/dist/tasks/update.js +12 -0
- package/dist/tasks/update.js.map +1 -1
- package/package.json +12 -12
- package/dist/llm/transports/openai.d.ts +0 -181
- package/dist/llm/transports/openai.d.ts.map +0 -1
- package/dist/llm/transports/openai.js +0 -645
- package/dist/llm/transports/openai.js.map +0 -1
|
@@ -1,645 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenAI LLM transport — real implementation.
|
|
3
|
-
*
|
|
4
|
-
* Migrated from {@link OpenAIBackend} (`backends/openai.ts`), adapted to the
|
|
5
|
-
* provider-neutral {@link LlmTransport} interface. Behavior is preserved
|
|
6
|
-
* verbatim; only the constructor signature and I/O types change to match the
|
|
7
|
-
* Phase-4 transport contract.
|
|
8
|
-
*
|
|
9
|
-
* Key behavioral invariants (each enforced with `@invariant` TSDoc at the
|
|
10
|
-
* enforcement site):
|
|
11
|
-
*
|
|
12
|
-
* 1. `usesMaxCompletionTokens` o-series branching — `gpt-5*`, `o1*`, `o3*`,
|
|
13
|
-
* `o4*` use `max_completion_tokens`; all others use `max_tokens`.
|
|
14
|
-
* 2. `extractReasoningContent` intentional try/catch swallow — NEVER re-throws.
|
|
15
|
-
* Returns null on any parse error.
|
|
16
|
-
* 3. `parse()` vs `json_schema` streaming split — `complete()` may use `.parse()`
|
|
17
|
-
* for non-streaming structured output; `stream()` NEVER uses `.parse()`,
|
|
18
|
-
* always `json_schema` response_format.
|
|
19
|
-
*
|
|
20
|
-
* @module llm/transports/openai
|
|
21
|
-
* @task T9284 (W1b)
|
|
22
|
-
* @epic T-LLM-CRED-CENTRALIZATION
|
|
23
|
-
* @see ADR-072 §LlmTransport — pure wire level
|
|
24
|
-
*/
|
|
25
|
-
import { OpenAI as OpenAIClient } from 'openai';
|
|
26
|
-
import { z } from 'zod';
|
|
27
|
-
import { validateImagesForProvider } from '../image-routing.js';
|
|
28
|
-
import { repairResponseModelJson } from '../structured-output.js';
|
|
29
|
-
import { StreamingThinkScrubber } from '../think-scrubber.js';
|
|
30
|
-
// ---------------------------------------------------------------------------
|
|
31
|
-
// usesMaxCompletionTokens
|
|
32
|
-
// ---------------------------------------------------------------------------
|
|
33
|
-
/**
|
|
34
|
-
* Determine if the model requires `max_completion_tokens` instead of `max_tokens`.
|
|
35
|
-
*
|
|
36
|
-
* @invariant usesMaxCompletionTokens o-series branching — `gpt-5`, `gpt-5-*`,
|
|
37
|
-
* `gpt-5.*`, `o1*`, `o3*`, `o4*` use `max_completion_tokens`; all others use
|
|
38
|
-
* `max_tokens`. Exported with the SAME name and signature as the old backend
|
|
39
|
-
* so all callers via `index.ts` continue to work without change.
|
|
40
|
-
*
|
|
41
|
-
* @param model - Provider model identifier to test.
|
|
42
|
-
* @returns `true` when the model family requires `max_completion_tokens`.
|
|
43
|
-
*/
|
|
44
|
-
export function usesMaxCompletionTokens(model) {
|
|
45
|
-
const m = model.toLowerCase();
|
|
46
|
-
if (m === 'gpt-5' || m.startsWith('gpt-5-') || m.startsWith('gpt-5.'))
|
|
47
|
-
return true;
|
|
48
|
-
for (const prefix of ['o1', 'o3', 'o4']) {
|
|
49
|
-
if (m === prefix || m.startsWith(`${prefix}-`))
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Type guard: value (object OR function) has the named string-keyed property.
|
|
56
|
-
*
|
|
57
|
-
* Accepts functions because OpenAI structured-output `responseFormat` is often
|
|
58
|
-
* a class constructor (callable) with a static `.schema` field — both objects
|
|
59
|
-
* and functions admit `key in value`.
|
|
60
|
-
*/
|
|
61
|
-
function hasProp(value, key) {
|
|
62
|
-
if (value === null || value === undefined)
|
|
63
|
-
return false;
|
|
64
|
-
const t = typeof value;
|
|
65
|
-
if (t !== 'object' && t !== 'function')
|
|
66
|
-
return false;
|
|
67
|
-
return key in value;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Centralised conversion at the bag → SDK boundary.
|
|
71
|
-
*
|
|
72
|
-
* The bag we construct is provably a `ChatCompletionCreateParams` at runtime
|
|
73
|
-
* (every field name + value matches the SDK contract; the SDK accepts what
|
|
74
|
-
* we send unchanged). The TypeScript compiler cannot verify this because
|
|
75
|
-
* `ChatCompletionMessageParam` is a closed discriminated union and our
|
|
76
|
-
* `messagesToRaw()` produces plain dicts. The bag's messages are coerced
|
|
77
|
-
* field-by-field through `Object.assign` onto a freshly-typed SDK request,
|
|
78
|
-
* keeping the assertion narrow and inline (no module-wide `as unknown as`
|
|
79
|
-
* chain — see T9767 cleanup brief).
|
|
80
|
-
*
|
|
81
|
-
* @task T9767
|
|
82
|
-
*/
|
|
83
|
-
function toOpenAIRequest(bag) {
|
|
84
|
-
// Use `Object.assign` to coerce the structural bag onto the SDK's union
|
|
85
|
-
// type. `Object.assign` returns the typed target (here: an empty object
|
|
86
|
-
// we declare as `OpenAIChatRequest`), TypeScript narrows to the SDK type,
|
|
87
|
-
// and the runtime semantics are identical to a spread (all enumerable
|
|
88
|
-
// own keys flow through). This sidesteps the strict discriminated-union
|
|
89
|
-
// check on `messages` without an explicit assertion.
|
|
90
|
-
const sdkReq = Object.assign(Object.create(null), bag);
|
|
91
|
-
return sdkReq;
|
|
92
|
-
}
|
|
93
|
-
// ---------------------------------------------------------------------------
|
|
94
|
-
// Private helpers (module-level, not exported)
|
|
95
|
-
// ---------------------------------------------------------------------------
|
|
96
|
-
/**
|
|
97
|
-
* Extract the reasoning / chain-of-thought content from a non-streaming
|
|
98
|
-
* OpenAI response.
|
|
99
|
-
*
|
|
100
|
-
* @invariant extractReasoningContent intentional try/catch swallow — this
|
|
101
|
-
* function MUST never re-throw. If any property access or type coercion
|
|
102
|
-
* fails, return null. Lints that flag the bare `catch {}` block are
|
|
103
|
-
* suppressed with a biome-ignore directive.
|
|
104
|
-
*
|
|
105
|
-
* @param response - Raw OpenAI.ChatCompletion from the SDK.
|
|
106
|
-
* @returns Reasoning text or null when absent / unreadable.
|
|
107
|
-
*/
|
|
108
|
-
function extractReasoningContent(response) {
|
|
109
|
-
try {
|
|
110
|
-
const message = response.choices[0]?.message;
|
|
111
|
-
if (!message)
|
|
112
|
-
return null;
|
|
113
|
-
const extended = message;
|
|
114
|
-
if (Array.isArray(extended.reasoning_details) && extended.reasoning_details.length > 0) {
|
|
115
|
-
const parts = [];
|
|
116
|
-
for (const detail of extended.reasoning_details) {
|
|
117
|
-
if (hasProp(detail, 'content') && typeof detail.content === 'string' && detail.content) {
|
|
118
|
-
parts.push(detail.content);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
if (parts.length > 0)
|
|
122
|
-
return parts.join('\n');
|
|
123
|
-
}
|
|
124
|
-
if (typeof extended.reasoning_content === 'string' && extended.reasoning_content) {
|
|
125
|
-
return extended.reasoning_content;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
catch {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
function extractReasoningDetails(response) {
|
|
134
|
-
try {
|
|
135
|
-
const message = response.choices[0]?.message;
|
|
136
|
-
if (!message)
|
|
137
|
-
return [];
|
|
138
|
-
const extended = message;
|
|
139
|
-
const rd = extended.reasoning_details;
|
|
140
|
-
if (!Array.isArray(rd))
|
|
141
|
-
return [];
|
|
142
|
-
const details = [];
|
|
143
|
-
for (const detail of rd) {
|
|
144
|
-
if (typeof detail === 'object' && detail !== null) {
|
|
145
|
-
details.push(detail);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return details;
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
return [];
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
function extractCacheTokens(usage) {
|
|
155
|
-
if (!usage)
|
|
156
|
-
return { cacheCreation: 0, cacheRead: 0 };
|
|
157
|
-
let cacheRead = 0;
|
|
158
|
-
const extended = usage;
|
|
159
|
-
const promptDetails = extended.prompt_tokens_details;
|
|
160
|
-
if (promptDetails?.cached_tokens) {
|
|
161
|
-
cacheRead = Number(promptDetails.cached_tokens);
|
|
162
|
-
}
|
|
163
|
-
if (cacheRead === 0 && extended.cache_read_input_tokens) {
|
|
164
|
-
cacheRead = Number(extended.cache_read_input_tokens);
|
|
165
|
-
}
|
|
166
|
-
else if (cacheRead === 0 && extended.cached_tokens) {
|
|
167
|
-
cacheRead = Number(extended.cached_tokens);
|
|
168
|
-
}
|
|
169
|
-
const cacheCreation = extended.cache_creation_input_tokens
|
|
170
|
-
? Number(extended.cache_creation_input_tokens)
|
|
171
|
-
: 0;
|
|
172
|
-
return { cacheCreation, cacheRead };
|
|
173
|
-
}
|
|
174
|
-
// ---------------------------------------------------------------------------
|
|
175
|
-
// OpenAITransport
|
|
176
|
-
// ---------------------------------------------------------------------------
|
|
177
|
-
/**
|
|
178
|
-
* Real OpenAI transport.
|
|
179
|
-
*
|
|
180
|
-
* Wraps the `openai` SDK and normalizes requests/responses to/from the
|
|
181
|
-
* provider-neutral {@link LlmTransport} interface. Supports o-series models
|
|
182
|
-
* (via `max_completion_tokens` branching), structured output (via `json_schema`
|
|
183
|
-
* response_format or Zod `.parse()`), streaming, and reasoning content
|
|
184
|
-
* extraction.
|
|
185
|
-
*
|
|
186
|
-
* @example
|
|
187
|
-
* ```ts
|
|
188
|
-
* const transport = new OpenAITransport({ apiKey: process.env.OPENAI_API_KEY! });
|
|
189
|
-
* const response = await transport.complete({
|
|
190
|
-
* model: 'gpt-4o',
|
|
191
|
-
* messages: [{ role: 'user', content: 'Hello' }],
|
|
192
|
-
* maxTokens: 1024,
|
|
193
|
-
* });
|
|
194
|
-
* ```
|
|
195
|
-
*/
|
|
196
|
-
export class OpenAITransport {
|
|
197
|
-
/** Provider identifier — always `'openai'`. */
|
|
198
|
-
provider = 'openai';
|
|
199
|
-
/**
|
|
200
|
-
* Wire protocol spoken by this transport — always `'chat_completions'`.
|
|
201
|
-
*
|
|
202
|
-
* @see ADR-072 §Type lock-in
|
|
203
|
-
*/
|
|
204
|
-
apiMode = 'chat_completions';
|
|
205
|
-
_client;
|
|
206
|
-
/**
|
|
207
|
-
* Create an `OpenAITransport`.
|
|
208
|
-
*
|
|
209
|
-
* @param options - API key, optional base URL, and optional extra headers.
|
|
210
|
-
*/
|
|
211
|
-
constructor(options) {
|
|
212
|
-
this._client = new OpenAIClient({
|
|
213
|
-
apiKey: options.apiKey,
|
|
214
|
-
baseURL: options.baseUrl,
|
|
215
|
-
defaultHeaders: options.defaultHeaders,
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Execute a single completion call against the OpenAI chat completions API.
|
|
220
|
-
*
|
|
221
|
-
* Maps provider-neutral {@link TransportRequest} to the `openai` SDK
|
|
222
|
-
* `chat.completions.create` call, then normalizes the response to
|
|
223
|
-
* {@link NormalizedResponse}.
|
|
224
|
-
*
|
|
225
|
-
* When `request` carries a Zod-schema `responseFormat`, uses `.parse()` for
|
|
226
|
-
* non-streaming structured output (the only path where `.parse()` is safe).
|
|
227
|
-
*
|
|
228
|
-
* @invariant parse() vs json_schema streaming split — `complete()` is the ONLY
|
|
229
|
-
* path that may use `.parse()` for structured output. `stream()` MUST NOT use
|
|
230
|
-
* `.parse()` — it always uses `json_schema` response_format instead.
|
|
231
|
-
*
|
|
232
|
-
* @param request - Provider-neutral request parameters.
|
|
233
|
-
* @param _ctx - Transport context (unused by this transport).
|
|
234
|
-
* @returns Normalized response including content, tool calls, usage, and raw SDK object.
|
|
235
|
-
*/
|
|
236
|
-
async complete(request, _ctx) {
|
|
237
|
-
// @invariant T9296 W4d — validate image constraints before any SDK call.
|
|
238
|
-
validateImagesForProvider(request, this.provider);
|
|
239
|
-
const { model, messages, maxTokens, system, tools, temperature, extraParams, thinkingEffort, responseFormat, } = request;
|
|
240
|
-
const thinkingBudgetTokens = request.thinkingBudgetTokens;
|
|
241
|
-
if (thinkingBudgetTokens !== null && thinkingBudgetTokens !== undefined) {
|
|
242
|
-
throw new Error('OpenAI transport does not support thinkingBudgetTokens; use thinkingEffort instead');
|
|
243
|
-
}
|
|
244
|
-
const maxOutputTokens = request
|
|
245
|
-
.maxOutputTokens;
|
|
246
|
-
const rawMessages = messagesToRaw(messages, system);
|
|
247
|
-
const reqParams = this._buildParams({
|
|
248
|
-
model,
|
|
249
|
-
messages: rawMessages,
|
|
250
|
-
maxTokens: maxOutputTokens ?? maxTokens,
|
|
251
|
-
temperature,
|
|
252
|
-
stop: request.stop,
|
|
253
|
-
tools: tools,
|
|
254
|
-
toolChoice: request.toolChoice,
|
|
255
|
-
thinkingEffort: thinkingEffort ?? null,
|
|
256
|
-
extraParams: extraParams ?? null,
|
|
257
|
-
});
|
|
258
|
-
// Structured output path
|
|
259
|
-
if (responseFormat !== null &&
|
|
260
|
-
responseFormat !== undefined &&
|
|
261
|
-
typeof responseFormat === 'function') {
|
|
262
|
-
const zodSchema = this._zodSchemaFrom(responseFormat);
|
|
263
|
-
if (zodSchema) {
|
|
264
|
-
reqParams['response_format'] = {
|
|
265
|
-
type: 'json_schema',
|
|
266
|
-
json_schema: {
|
|
267
|
-
name: responseFormat.name ?? 'response',
|
|
268
|
-
schema: this._zodToJsonSchema(zodSchema),
|
|
269
|
-
},
|
|
270
|
-
};
|
|
271
|
-
const response = (await this._client.chat.completions.create(toOpenAIRequest(reqParams)));
|
|
272
|
-
const rawContent = response.choices[0]?.message.content ?? '';
|
|
273
|
-
let parsedContent = rawContent;
|
|
274
|
-
try {
|
|
275
|
-
const parsed = JSON.parse(rawContent);
|
|
276
|
-
parsedContent = zodSchema.parse(parsed);
|
|
277
|
-
}
|
|
278
|
-
catch {
|
|
279
|
-
try {
|
|
280
|
-
parsedContent = repairResponseModelJson(rawContent, zodSchema, model);
|
|
281
|
-
}
|
|
282
|
-
catch {
|
|
283
|
-
parsedContent = rawContent;
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
return this._normalizeResponse(response, model, parsedContent);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
if (responseFormat !== null &&
|
|
290
|
-
responseFormat !== undefined &&
|
|
291
|
-
typeof responseFormat === 'object') {
|
|
292
|
-
reqParams['response_format'] = responseFormat;
|
|
293
|
-
}
|
|
294
|
-
if (extraParams?.['json_mode']) {
|
|
295
|
-
reqParams['response_format'] = { type: 'json_object' };
|
|
296
|
-
}
|
|
297
|
-
const response = (await this._client.chat.completions.create(toOpenAIRequest(reqParams)));
|
|
298
|
-
return this._normalizeResponse(response, model);
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Stream a completion against the OpenAI chat completions API.
|
|
302
|
-
*
|
|
303
|
-
* Yields {@link NormalizedDelta} chunks including incremental text deltas and
|
|
304
|
-
* tool-call argument deltas. The final delta carries `stopReason` and `usage`.
|
|
305
|
-
*
|
|
306
|
-
* Tool-call streaming sequence per tool index:
|
|
307
|
-
* 1. First chunk for index `i` (`tool_calls[i].function.name` present) → yields
|
|
308
|
-
* `toolCallDelta` with `{ index, name, argumentsChunk }` (start marker).
|
|
309
|
-
* 2. Subsequent chunks (name absent) → yields `toolCallDelta` with
|
|
310
|
-
* `{ index, argumentsChunk }` (incremental JSON fragment).
|
|
311
|
-
*
|
|
312
|
-
* @invariant T9316 tool-call streaming parity — emits same toolCallDelta shape
|
|
313
|
-
* as AnthropicTransport and ChatCompletionsTransport.
|
|
314
|
-
*
|
|
315
|
-
* @invariant parse() vs json_schema streaming split — `stream()` MUST NOT use
|
|
316
|
-
* `.parse()` for structured output. When a `responseFormat` schema is present,
|
|
317
|
-
* only `json_schema` response_format is used. `.parse()` would block the
|
|
318
|
-
* stream since the full JSON must be assembled first — use `complete()` instead.
|
|
319
|
-
*
|
|
320
|
-
* @param request - Provider-neutral request parameters.
|
|
321
|
-
* @param _ctx - Transport context (unused by this transport).
|
|
322
|
-
* @returns An async iterable of normalized delta chunks.
|
|
323
|
-
*/
|
|
324
|
-
async *stream(request, _ctx) {
|
|
325
|
-
const { model, messages, maxTokens, system, tools, temperature, extraParams, thinkingEffort, responseFormat, } = request;
|
|
326
|
-
const thinkingBudgetTokens = request.thinkingBudgetTokens;
|
|
327
|
-
if (thinkingBudgetTokens !== null && thinkingBudgetTokens !== undefined) {
|
|
328
|
-
throw new Error('OpenAI transport does not support thinkingBudgetTokens; use thinkingEffort instead');
|
|
329
|
-
}
|
|
330
|
-
const maxOutputTokens = request
|
|
331
|
-
.maxOutputTokens;
|
|
332
|
-
const rawMessages = messagesToRaw(messages, system);
|
|
333
|
-
const reqParams = this._buildParams({
|
|
334
|
-
model,
|
|
335
|
-
messages: rawMessages,
|
|
336
|
-
maxTokens: maxOutputTokens ?? maxTokens,
|
|
337
|
-
temperature,
|
|
338
|
-
stop: request.stop,
|
|
339
|
-
tools: tools,
|
|
340
|
-
toolChoice: request.toolChoice,
|
|
341
|
-
thinkingEffort: thinkingEffort ?? null,
|
|
342
|
-
extraParams: extraParams ?? null,
|
|
343
|
-
});
|
|
344
|
-
reqParams['stream'] = true;
|
|
345
|
-
reqParams['stream_options'] = { include_usage: true };
|
|
346
|
-
// @invariant parse() vs json_schema streaming split — ONLY json_schema here, never .parse()
|
|
347
|
-
if (responseFormat !== null &&
|
|
348
|
-
responseFormat !== undefined &&
|
|
349
|
-
typeof responseFormat === 'function') {
|
|
350
|
-
const zodSchema = this._zodSchemaFrom(responseFormat);
|
|
351
|
-
if (zodSchema) {
|
|
352
|
-
reqParams['response_format'] = {
|
|
353
|
-
type: 'json_schema',
|
|
354
|
-
json_schema: {
|
|
355
|
-
name: responseFormat.name ?? 'response',
|
|
356
|
-
schema: this._zodToJsonSchema(zodSchema),
|
|
357
|
-
},
|
|
358
|
-
};
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
else if (responseFormat !== null &&
|
|
362
|
-
responseFormat !== undefined &&
|
|
363
|
-
typeof responseFormat === 'object') {
|
|
364
|
-
reqParams['response_format'] = responseFormat;
|
|
365
|
-
}
|
|
366
|
-
else if (extraParams?.['json_mode']) {
|
|
367
|
-
reqParams['response_format'] = { type: 'json_object' };
|
|
368
|
-
}
|
|
369
|
-
const responseStream = (await this._client.chat.completions.create(toOpenAIRequest(reqParams)));
|
|
370
|
-
let finishReason = null;
|
|
371
|
-
let usageChunkReceived = false;
|
|
372
|
-
// @invariant T9295 W4c — scrub <think>...</think> blocks from OpenAI o1-series streams.
|
|
373
|
-
const scrubber = new StreamingThinkScrubber();
|
|
374
|
-
// Tracks which tool-call indices have already received a start delta (with name).
|
|
375
|
-
// @invariant T9316 tool-call streaming parity — OpenAI transport emits toolCallDelta
|
|
376
|
-
// entries matching the pattern of AnthropicTransport and ChatCompletionsTransport:
|
|
377
|
-
// first delta for index i carries name; subsequent deltas carry argumentsChunk only.
|
|
378
|
-
const seenToolCallIndices = new Set();
|
|
379
|
-
for await (const chunk of responseStream) {
|
|
380
|
-
const delta = chunk.choices[0]?.delta;
|
|
381
|
-
if (delta?.content) {
|
|
382
|
-
const raw = delta.content;
|
|
383
|
-
const visible = scrubber.feed(raw);
|
|
384
|
-
if (visible) {
|
|
385
|
-
yield { text: visible, reasoning: '', stopReason: null, usage: null };
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
// @invariant T9316 tool-call streaming — emit incremental tool-call deltas so
|
|
389
|
-
// consumers can accumulate partial argument JSON without waiting for the final message.
|
|
390
|
-
if (delta?.tool_calls && delta.tool_calls.length > 0) {
|
|
391
|
-
for (const tc of delta.tool_calls) {
|
|
392
|
-
const index = tc.index ?? 0;
|
|
393
|
-
const argumentsChunk = tc.function?.arguments ?? '';
|
|
394
|
-
const name = tc.function?.name;
|
|
395
|
-
if (!seenToolCallIndices.has(index)) {
|
|
396
|
-
// First delta for this index — emit start marker with name.
|
|
397
|
-
seenToolCallIndices.add(index);
|
|
398
|
-
yield {
|
|
399
|
-
text: '',
|
|
400
|
-
reasoning: '',
|
|
401
|
-
stopReason: null,
|
|
402
|
-
usage: null,
|
|
403
|
-
toolCallDelta: { index, name: name ?? '', argumentsChunk },
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
else if (argumentsChunk) {
|
|
407
|
-
// Subsequent chunks — emit incremental arguments fragment.
|
|
408
|
-
yield {
|
|
409
|
-
text: '',
|
|
410
|
-
reasoning: '',
|
|
411
|
-
stopReason: null,
|
|
412
|
-
usage: null,
|
|
413
|
-
toolCallDelta: { index, argumentsChunk },
|
|
414
|
-
};
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
if (chunk.choices[0]?.finish_reason) {
|
|
419
|
-
finishReason = chunk.choices[0].finish_reason;
|
|
420
|
-
}
|
|
421
|
-
const extendedChunk = chunk;
|
|
422
|
-
if (extendedChunk.usage) {
|
|
423
|
-
const usage = extendedChunk.usage;
|
|
424
|
-
const normalizedUsage = {
|
|
425
|
-
inputTokens: Number(usage.prompt_tokens) || 0,
|
|
426
|
-
outputTokens: Number(usage.completion_tokens) || 0,
|
|
427
|
-
};
|
|
428
|
-
// Flush any held-back partial-tag buffer before the final usage event.
|
|
429
|
-
const tail = scrubber.flush();
|
|
430
|
-
if (tail) {
|
|
431
|
-
yield { text: tail, reasoning: '', stopReason: null, usage: null };
|
|
432
|
-
}
|
|
433
|
-
yield {
|
|
434
|
-
text: '',
|
|
435
|
-
reasoning: '',
|
|
436
|
-
stopReason: finishReason ?? 'stop',
|
|
437
|
-
usage: normalizedUsage,
|
|
438
|
-
};
|
|
439
|
-
usageChunkReceived = true;
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
if (!usageChunkReceived && finishReason) {
|
|
443
|
-
const tail = scrubber.flush();
|
|
444
|
-
if (tail) {
|
|
445
|
-
yield { text: tail, reasoning: '', stopReason: null, usage: null };
|
|
446
|
-
}
|
|
447
|
-
yield { text: '', reasoning: '', stopReason: finishReason, usage: null };
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
/**
|
|
451
|
-
* Returns true when the error signals a credential rotation should be attempted.
|
|
452
|
-
*
|
|
453
|
-
* @param err - The error thrown by the provider SDK.
|
|
454
|
-
* @returns Whether a credential rotation should be attempted.
|
|
455
|
-
*/
|
|
456
|
-
shouldRotateCredential(err) {
|
|
457
|
-
if (err instanceof Error) {
|
|
458
|
-
const msg = err.message.toLowerCase();
|
|
459
|
-
return msg.includes('401') || msg.includes('429') || msg.includes('api key');
|
|
460
|
-
}
|
|
461
|
-
return false;
|
|
462
|
-
}
|
|
463
|
-
// ---------------------------------------------------------------------------
|
|
464
|
-
// Private helpers
|
|
465
|
-
// ---------------------------------------------------------------------------
|
|
466
|
-
/**
|
|
467
|
-
* Build the OpenAI API request params from normalized request fields.
|
|
468
|
-
*
|
|
469
|
-
* @invariant usesMaxCompletionTokens o-series branching — sets
|
|
470
|
-
* `max_completion_tokens` for gpt-5* / o1* / o3* / o4* models;
|
|
471
|
-
* `max_tokens` for all others.
|
|
472
|
-
*/
|
|
473
|
-
_buildParams(params) {
|
|
474
|
-
const { model, messages, maxTokens, temperature, stop, tools, toolChoice, thinkingEffort, extraParams, } = params;
|
|
475
|
-
const reqParams = { model, messages };
|
|
476
|
-
// @invariant usesMaxCompletionTokens o-series branching
|
|
477
|
-
if (usesMaxCompletionTokens(model)) {
|
|
478
|
-
reqParams.max_completion_tokens = maxTokens;
|
|
479
|
-
if (extraParams?.['verbosity'])
|
|
480
|
-
reqParams.verbosity = extraParams['verbosity'];
|
|
481
|
-
}
|
|
482
|
-
else {
|
|
483
|
-
reqParams.max_tokens = maxTokens;
|
|
484
|
-
}
|
|
485
|
-
if (temperature !== null && temperature !== undefined)
|
|
486
|
-
reqParams.temperature = temperature;
|
|
487
|
-
if (thinkingEffort)
|
|
488
|
-
reqParams.reasoning_effort = thinkingEffort;
|
|
489
|
-
if (stop && stop.length > 0)
|
|
490
|
-
reqParams.stop = stop;
|
|
491
|
-
if (tools && tools.length > 0) {
|
|
492
|
-
reqParams.tools = this._convertTools(tools);
|
|
493
|
-
if (toolChoice !== null && toolChoice !== undefined)
|
|
494
|
-
reqParams.tool_choice = toolChoice;
|
|
495
|
-
}
|
|
496
|
-
if (extraParams) {
|
|
497
|
-
for (const key of ['top_p', 'frequency_penalty', 'presence_penalty', 'seed']) {
|
|
498
|
-
if (key in extraParams)
|
|
499
|
-
reqParams[key] = extraParams[key];
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
return reqParams;
|
|
503
|
-
}
|
|
504
|
-
/**
|
|
505
|
-
* Normalize a raw OpenAI SDK response into {@link NormalizedResponse}.
|
|
506
|
-
*
|
|
507
|
-
* @param response - Raw `OpenAI.ChatCompletion` from the SDK.
|
|
508
|
-
* @param modelName - Model identifier (carried into the response envelope).
|
|
509
|
-
* @param contentOverride - When set, replaces the message content (used for structured output).
|
|
510
|
-
*/
|
|
511
|
-
_normalizeResponse(response, modelName, contentOverride) {
|
|
512
|
-
const usage = response.usage ?? null;
|
|
513
|
-
const finishReason = response.choices[0]?.finish_reason ?? 'stop';
|
|
514
|
-
const message = response.choices[0]?.message;
|
|
515
|
-
const toolCalls = [];
|
|
516
|
-
if (message && 'tool_calls' in message && Array.isArray(message.tool_calls)) {
|
|
517
|
-
for (const tc of message.tool_calls) {
|
|
518
|
-
if (tc.type !== 'function')
|
|
519
|
-
continue;
|
|
520
|
-
let toolInput = {};
|
|
521
|
-
if (tc.function.arguments) {
|
|
522
|
-
try {
|
|
523
|
-
toolInput = JSON.parse(tc.function.arguments);
|
|
524
|
-
}
|
|
525
|
-
catch {
|
|
526
|
-
// Malformed tool arguments — use empty object
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
toolCalls.push({
|
|
530
|
-
id: tc.id,
|
|
531
|
-
name: tc.function.name,
|
|
532
|
-
arguments: tc.function.arguments ?? JSON.stringify(toolInput),
|
|
533
|
-
});
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
const { cacheCreation, cacheRead } = extractCacheTokens(usage);
|
|
537
|
-
const normalizedUsage = {
|
|
538
|
-
inputTokens: usage?.prompt_tokens ?? 0,
|
|
539
|
-
outputTokens: usage?.completion_tokens ?? 0,
|
|
540
|
-
...(cacheRead > 0 ? { cachedTokens: cacheRead } : {}),
|
|
541
|
-
};
|
|
542
|
-
const reasoning = extractReasoningContent(response);
|
|
543
|
-
const reasoningDetails = extractReasoningDetails(response);
|
|
544
|
-
const rawContent = contentOverride !== undefined ? contentOverride : (message?.content ?? '');
|
|
545
|
-
const content = typeof rawContent === 'string' ? rawContent : JSON.stringify(rawContent);
|
|
546
|
-
return {
|
|
547
|
-
id: response.id,
|
|
548
|
-
model: modelName,
|
|
549
|
-
content: content || null,
|
|
550
|
-
toolCalls: toolCalls.length > 0 ? toolCalls : null,
|
|
551
|
-
stopReason: finishReason,
|
|
552
|
-
usage: normalizedUsage,
|
|
553
|
-
...(reasoning ? { reasoning } : {}),
|
|
554
|
-
...(reasoningDetails.length > 0 || cacheCreation > 0
|
|
555
|
-
? {
|
|
556
|
-
providerData: {
|
|
557
|
-
...(reasoningDetails.length > 0 ? { reasoningDetails } : {}),
|
|
558
|
-
...(cacheCreation > 0 ? { cacheCreationInputTokens: cacheCreation } : {}),
|
|
559
|
-
},
|
|
560
|
-
}
|
|
561
|
-
: {}),
|
|
562
|
-
raw: response,
|
|
563
|
-
};
|
|
564
|
-
}
|
|
565
|
-
/**
|
|
566
|
-
* Convert provider-neutral tools to OpenAI `function` tool format.
|
|
567
|
-
*
|
|
568
|
-
* Already-converted inputs (first element has `type: 'function'`) are passed
|
|
569
|
-
* through unchanged.
|
|
570
|
-
*/
|
|
571
|
-
_convertTools(tools) {
|
|
572
|
-
if (!tools.length || tools[0]?.['type'] === 'function')
|
|
573
|
-
return tools;
|
|
574
|
-
return tools.map((tool) => ({
|
|
575
|
-
type: 'function',
|
|
576
|
-
function: {
|
|
577
|
-
name: tool['name'],
|
|
578
|
-
description: tool['description'],
|
|
579
|
-
parameters: tool['input_schema'] ?? tool['inputSchema'],
|
|
580
|
-
},
|
|
581
|
-
}));
|
|
582
|
-
}
|
|
583
|
-
/**
|
|
584
|
-
* Extract a Zod schema from a class or constructor that carries a `.schema`
|
|
585
|
-
* property or IS a ZodType.
|
|
586
|
-
*
|
|
587
|
-
* Accepts `unknown` because at runtime the value can be a constructor with a
|
|
588
|
-
* static `.schema`, a Zod type instance, or neither — narrowed via type
|
|
589
|
-
* guards rather than `as unknown as` chains (T9767).
|
|
590
|
-
*/
|
|
591
|
-
_zodSchemaFrom(responseFormat) {
|
|
592
|
-
if (hasProp(responseFormat, 'schema') && responseFormat.schema instanceof z.ZodType) {
|
|
593
|
-
return responseFormat.schema;
|
|
594
|
-
}
|
|
595
|
-
if (responseFormat instanceof z.ZodType)
|
|
596
|
-
return responseFormat;
|
|
597
|
-
return null;
|
|
598
|
-
}
|
|
599
|
-
/**
|
|
600
|
-
* Convert a Zod schema to a minimal JSON Schema object for the
|
|
601
|
-
* `json_schema` response_format.
|
|
602
|
-
*
|
|
603
|
-
* Uses `.shape` for `ZodObject`; returns `{}` for other Zod types.
|
|
604
|
-
* Full support would require `zod-to-json-schema` — this covers the common case.
|
|
605
|
-
*/
|
|
606
|
-
_zodToJsonSchema(schema) {
|
|
607
|
-
if ('shape' in schema) {
|
|
608
|
-
const shape = schema.shape;
|
|
609
|
-
const properties = {};
|
|
610
|
-
const required = [];
|
|
611
|
-
for (const [key, field] of Object.entries(shape)) {
|
|
612
|
-
properties[key] = { type: 'string' };
|
|
613
|
-
if (!(field instanceof z.ZodOptional))
|
|
614
|
-
required.push(key);
|
|
615
|
-
}
|
|
616
|
-
return { type: 'object', properties, required, additionalProperties: false };
|
|
617
|
-
}
|
|
618
|
-
return {};
|
|
619
|
-
}
|
|
620
|
-
}
|
|
621
|
-
// ---------------------------------------------------------------------------
|
|
622
|
-
// Internal: convert TransportMessage[] to raw OpenAI message format
|
|
623
|
-
// ---------------------------------------------------------------------------
|
|
624
|
-
/**
|
|
625
|
-
* Map provider-neutral {@link import('@cleocode/contracts/llm/normalized-response.js').TransportMessage}[]
|
|
626
|
-
* to raw OpenAI message dicts.
|
|
627
|
-
*
|
|
628
|
-
* System is injected as the first message with `role: 'system'`.
|
|
629
|
-
*/
|
|
630
|
-
function messagesToRaw(messages, system) {
|
|
631
|
-
const raw = [];
|
|
632
|
-
if (system) {
|
|
633
|
-
raw.push({ role: 'system', content: system });
|
|
634
|
-
}
|
|
635
|
-
for (const msg of messages) {
|
|
636
|
-
if (typeof msg.content === 'string') {
|
|
637
|
-
raw.push({ role: msg.role, content: msg.content });
|
|
638
|
-
}
|
|
639
|
-
else {
|
|
640
|
-
raw.push({ role: msg.role, content: msg.content });
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
return raw;
|
|
644
|
-
}
|
|
645
|
-
//# sourceMappingURL=openai.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/llm/transports/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAYH,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAqB9D,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACnF,KAAK,MAAM,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAoDD;;;;;;GAMG;AACH,SAAS,OAAO,CAAmB,KAAc,EAAE,GAAM;IACvD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC;IACvB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,GAAG,IAAK,KAAgB,CAAC;AAClC,CAAC;AAyCD;;;;;;;;;;;;;GAaG;AACH,SAAS,eAAe,CAAC,GAAqB;IAC5C,wEAAwE;IACxE,wEAAwE;IACxE,0EAA0E;IAC1E,sEAAsE;IACtE,wEAAwE;IACxE,qDAAqD;IACrD,MAAM,MAAM,GAAsB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAsB,EAAE,GAAG,CAAC,CAAC;IAC/F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,SAAS,uBAAuB,CAAC,QAA+B;IAC9D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QAC7C,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,QAAQ,GAAwB,OAAO,CAAC;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvF,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBAChD,IAAI,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACvF,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,QAAQ,CAAC,iBAAiB,KAAK,QAAQ,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YACjF,OAAO,QAAQ,CAAC,iBAAiB,CAAC;QACpC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,QAA+B;IAC9D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QAC7C,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAwB,OAAO,CAAC;QAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,iBAAiB,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,OAAO,GAAmC,EAAE,CAAC;QACnD,KAAK,MAAM,MAAM,IAAI,EAAE,EAAE,CAAC;YACxB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,MAAiC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAgD;IAI1E,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACtD,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,QAAQ,GAAkB,KAAK,CAAC;IACtC,MAAM,aAAa,GAAG,QAAQ,CAAC,qBAAqB,CAAC;IACrD,IAAI,aAAa,EAAE,aAAa,EAAE,CAAC;QACjC,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,SAAS,KAAK,CAAC,IAAI,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QACxD,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IACvD,CAAC;SAAM,IAAI,SAAS,KAAK,CAAC,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;QACrD,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,aAAa,GAAG,QAAQ,CAAC,2BAA2B;QACxD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC9C,CAAC,CAAC,CAAC,CAAC;IACN,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;AACtC,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,eAAe;IAC1B,+CAA+C;IACtC,QAAQ,GAAG,QAAiB,CAAC;IAEtC;;;;OAIG;IACM,OAAO,GAAY,kBAA2B,CAAC;IAEvC,OAAO,CAAe;IAEvC;;;;OAIG;IACH,YAAY,OAA+B;QACzC,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAyB,EAAE,IAAuB;QAC/D,yEAAyE;QACzE,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElD,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,SAAS,EACT,MAAM,EACN,KAAK,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,cAAc,GACf,GAAG,OAMH,CAAC;QAEF,MAAM,oBAAoB,GACxB,OACD,CAAC,oBAAoB,CAAC;QAEvB,IAAI,oBAAoB,KAAK,IAAI,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAI,OAAkE;aACxF,eAAe,CAAC;QAEnB,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;YAClC,KAAK;YACL,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,eAAe,IAAI,SAAS;YACvC,WAAW;YACX,IAAI,EAAG,OAAyD,CAAC,IAAI;YACrE,KAAK,EAAE,KAA0D;YACjE,UAAU,EACR,OACD,CAAC,UAAU;YACZ,cAAc,EAAE,cAAc,IAAI,IAAI;YACtC,WAAW,EAAE,WAAW,IAAI,IAAI;SACjC,CAAC,CAAC;QAEH,yBAAyB;QACzB,IACE,cAAc,KAAK,IAAI;YACvB,cAAc,KAAK,SAAS;YAC5B,OAAO,cAAc,KAAK,UAAU,EACpC,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YACtD,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,iBAAiB,CAAC,GAAG;oBAC7B,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE;wBACX,IAAI,EAAG,cAAoC,CAAC,IAAI,IAAI,UAAU;wBAC9D,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;qBACzC;iBACF,CAAC;gBACF,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAC1D,eAAe,CAAC,SAAS,CAAC,CAC3B,CAA0B,CAAC;gBAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC9D,IAAI,aAAa,GAAY,UAAU,CAAC;gBACxC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBACtC,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1C,CAAC;gBAAC,MAAM,CAAC;oBACP,IAAI,CAAC;wBACH,aAAa,GAAG,uBAAuB,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;oBACxE,CAAC;oBAAC,MAAM,CAAC;wBACP,aAAa,GAAG,UAAU,CAAC;oBAC7B,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,IACE,cAAc,KAAK,IAAI;YACvB,cAAc,KAAK,SAAS;YAC5B,OAAO,cAAc,KAAK,QAAQ,EAClC,CAAC;YACD,SAAS,CAAC,iBAAiB,CAAC,GAAG,cAAc,CAAC;QAChD,CAAC;QAED,IAAI,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;QACzD,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAC1D,eAAe,CAAC,SAAS,CAAC,CAC3B,CAA0B,CAAC;QAC5B,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,KAAK,CAAC,CAAC,MAAM,CAAC,OAAyB,EAAE,IAAsB;QAC7D,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,SAAS,EACT,MAAM,EACN,KAAK,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,cAAc,GACf,GAAG,OAMH,CAAC;QAEF,MAAM,oBAAoB,GACxB,OACD,CAAC,oBAAoB,CAAC;QAEvB,IAAI,oBAAoB,KAAK,IAAI,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAI,OAAkE;aACxF,eAAe,CAAC;QAEnB,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;YAClC,KAAK;YACL,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,eAAe,IAAI,SAAS;YACvC,WAAW;YACX,IAAI,EAAG,OAAyD,CAAC,IAAI;YACrE,KAAK,EAAE,KAA0D;YACjE,UAAU,EACR,OACD,CAAC,UAAU;YACZ,cAAc,EAAE,cAAc,IAAI,IAAI;YACtC,WAAW,EAAE,WAAW,IAAI,IAAI;SACjC,CAAC,CAAC;QACH,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QAC3B,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAEtD,4FAA4F;QAC5F,IACE,cAAc,KAAK,IAAI;YACvB,cAAc,KAAK,SAAS;YAC5B,OAAO,cAAc,KAAK,UAAU,EACpC,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YACtD,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,iBAAiB,CAAC,GAAG;oBAC7B,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE;wBACX,IAAI,EAAG,cAAoC,CAAC,IAAI,IAAI,UAAU;wBAC9D,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;qBACzC;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IACL,cAAc,KAAK,IAAI;YACvB,cAAc,KAAK,SAAS;YAC5B,OAAO,cAAc,KAAK,QAAQ,EAClC,CAAC;YACD,SAAS,CAAC,iBAAiB,CAAC,GAAG,cAAc,CAAC;QAChD,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;YACtC,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;QACzD,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAChE,eAAe,CAAC,SAAS,CAAC,CAC3B,CAA8C,CAAC;QAEhD,IAAI,YAAY,GAAkB,IAAI,CAAC;QACvC,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,wFAAwF;QACxF,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC9C,kFAAkF;QAClF,qFAAqF;QACrF,qFAAqF;QACrF,uFAAuF;QACvF,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE9C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;YACtC,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBACxE,CAAC;YACH,CAAC;YAED,8EAA8E;YAC9E,0FAA0F;YAC1F,IAAI,KAAK,EAAE,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBAClC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;oBAC5B,MAAM,cAAc,GAAG,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC;oBACpD,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC;oBAC/B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBACpC,4DAA4D;wBAC5D,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,MAAM;4BACJ,IAAI,EAAE,EAAE;4BACR,SAAS,EAAE,EAAE;4BACb,UAAU,EAAE,IAAI;4BAChB,KAAK,EAAE,IAAI;4BACX,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,cAAc,EAAE;yBAC3D,CAAC;oBACJ,CAAC;yBAAM,IAAI,cAAc,EAAE,CAAC;wBAC1B,2DAA2D;wBAC3D,MAAM;4BACJ,IAAI,EAAE,EAAE;4BACR,SAAS,EAAE,EAAE;4BACb,UAAU,EAAE,IAAI;4BAChB,KAAK,EAAE,IAAI;4BACX,aAAa,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;yBACzC,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC;gBACpC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAChD,CAAC;YACD,MAAM,aAAa,GAAgC,KAAK,CAAC;YACzD,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;gBAClC,MAAM,eAAe,GAAoB;oBACvC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;oBAC7C,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC;iBACnD,CAAC;gBACF,uEAAuE;gBACvE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBACrE,CAAC;gBACD,MAAM;oBACJ,IAAI,EAAE,EAAE;oBACR,SAAS,EAAE,EAAE;oBACb,UAAU,EAAE,YAAY,IAAI,MAAM;oBAClC,KAAK,EAAE,eAAe;iBACvB,CAAC;gBACF,kBAAkB,GAAG,IAAI,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,kBAAkB,IAAI,YAAY,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACrE,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC3E,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,sBAAsB,CAAC,GAAY;QACjC,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACtC,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E;;;;;;OAMG;IACK,YAAY,CAAC,MAUpB;QACC,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,SAAS,EACT,WAAW,EACX,IAAI,EACJ,KAAK,EACL,UAAU,EACV,cAAc,EACd,WAAW,GACZ,GAAG,MAAM,CAAC;QACX,MAAM,SAAS,GAAqB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAExD,wDAAwD;QACxD,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,SAAS,CAAC,qBAAqB,GAAG,SAAS,CAAC;YAC5C,IAAI,WAAW,EAAE,CAAC,WAAW,CAAC;gBAAE,SAAS,CAAC,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC;QACnC,CAAC;QAED,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS;YAAE,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;QAC3F,IAAI,cAAc;YAAE,SAAS,CAAC,gBAAgB,GAAG,cAAc,CAAC;QAChE,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;QAEnD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS;gBAAE,SAAS,CAAC,WAAW,GAAG,UAAU,CAAC;QAC1F,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC7E,IAAI,GAAG,IAAI,WAAW;oBAAE,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;OAMG;IACK,kBAAkB,CACxB,QAA+B,EAC/B,SAAiB,EACjB,eAAyB;QAEzB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC;QACrC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,IAAI,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QAC7C,MAAM,SAAS,GAAyB,EAAE,CAAC;QAE3C,IAAI,OAAO,IAAI,YAAY,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5E,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACpC,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU;oBAAE,SAAS;gBACrC,IAAI,SAAS,GAA4B,EAAE,CAAC;gBAC5C,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;oBAC1B,IAAI,CAAC;wBACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAA4B,CAAC;oBAC3E,CAAC;oBAAC,MAAM,CAAC;wBACP,8CAA8C;oBAChD,CAAC;gBACH,CAAC;gBACD,SAAS,CAAC,IAAI,CAAC;oBACb,EAAE,EAAE,EAAE,CAAC,EAAE;oBACT,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;oBACtB,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAE/D,MAAM,eAAe,GAAoB;YACvC,WAAW,EAAE,KAAK,EAAE,aAAa,IAAI,CAAC;YACtC,YAAY,EAAE,KAAK,EAAE,iBAAiB,IAAI,CAAC;YAC3C,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC;QAEF,MAAM,SAAS,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE3D,MAAM,UAAU,GAAG,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QAC9F,MAAM,OAAO,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAEzF,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,OAAO,IAAI,IAAI;YACxB,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YAClD,UAAU,EAAE,YAAY;YACxB,KAAK,EAAE,eAAe;YACtB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC;gBAClD,CAAC,CAAC;oBACE,YAAY,EAAE;wBACZ,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC5D,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC1E;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,EAAE,QAAQ;SACd,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,aAAa,CAAC,KAAqC;QACzD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC;QACrE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;gBAClB,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;gBAChC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC;aACxD;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;;;;OAOG;IACK,cAAc,CAAC,cAAuB;QAC5C,IAAI,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,cAAc,CAAC,MAAM,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;YACpF,OAAO,cAAc,CAAC,MAAM,CAAC;QAC/B,CAAC;QACD,IAAI,cAAc,YAAY,CAAC,CAAC,OAAO;YAAE,OAAO,cAAc,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACK,gBAAgB,CAAC,MAAoB;QAC3C,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,MAAM,KAAK,GAAI,MAAqC,CAAC,KAAK,CAAC;YAC3D,MAAM,UAAU,GAA4B,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,WAAW,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC;QAC/E,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED,8EAA8E;AAC9E,oEAAoE;AACpE,8EAA8E;AAE9E;;;;;GAKG;AACH,SAAS,aAAa,CACpB,QAAqF,EACrF,MAAe;IAEf,MAAM,GAAG,GAAmC,EAAE,CAAC;IAE/C,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACpC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|