@kenkaiiii/gg-agent 4.2.2 → 4.2.3

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.
@@ -1,312 +0,0 @@
1
- import { stream, EventStream, } from "@kenkaiiii/gg-ai";
2
- const DEFAULT_MAX_TURNS = 100;
3
- /**
4
- * Detect context window overflow errors from LLM providers.
5
- * Anthropic: "prompt is too long: N tokens > M maximum"
6
- * OpenAI: "context_length_exceeded" / "maximum context length"
7
- */
8
- export function isContextOverflow(err) {
9
- if (!(err instanceof Error))
10
- return false;
11
- const msg = err.message.toLowerCase();
12
- return (msg.includes("prompt is too long") ||
13
- msg.includes("context_length_exceeded") ||
14
- msg.includes("maximum context length") ||
15
- (msg.includes("token") && msg.includes("exceed")));
16
- }
17
- /**
18
- * Detect overloaded/rate-limit errors from LLM providers.
19
- * HTTP 429 (rate limit) or 529/503 (overloaded).
20
- */
21
- export function isOverloaded(err) {
22
- if (!(err instanceof Error))
23
- return false;
24
- const msg = err.message.toLowerCase();
25
- return (msg.includes("overloaded") ||
26
- msg.includes("rate limit") ||
27
- msg.includes("too many requests") ||
28
- msg.includes("429") ||
29
- msg.includes("529"));
30
- }
31
- export async function* agentLoop(messages, options) {
32
- const maxTurns = options.maxTurns ?? DEFAULT_MAX_TURNS;
33
- const maxContinuations = options.maxContinuations ?? 5;
34
- const toolMap = new Map((options.tools ?? []).map((t) => [t.name, t]));
35
- const totalUsage = { inputTokens: 0, outputTokens: 0 };
36
- let turn = 0;
37
- let consecutivePauses = 0;
38
- let overflowRetries = 0;
39
- let overloadRetries = 0;
40
- const MAX_OVERFLOW_RETRIES = 3;
41
- const MAX_OVERLOAD_RETRIES = 3;
42
- const OVERLOAD_RETRY_DELAY_MS = 3_000;
43
- while (turn < maxTurns) {
44
- options.signal?.throwIfAborted();
45
- turn++;
46
- // ── Mid-loop context transform (compaction / truncation) ──
47
- if (options.transformContext) {
48
- const transformed = await options.transformContext(messages);
49
- if (transformed !== messages) {
50
- messages.length = 0;
51
- messages.push(...transformed);
52
- }
53
- }
54
- // ── Call LLM with overflow recovery ──
55
- let response;
56
- try {
57
- const result = stream({
58
- provider: options.provider,
59
- model: options.model,
60
- messages,
61
- tools: options.tools,
62
- serverTools: options.serverTools,
63
- webSearch: options.webSearch,
64
- maxTokens: options.maxTokens,
65
- temperature: options.temperature,
66
- thinking: options.thinking,
67
- apiKey: options.apiKey,
68
- baseUrl: options.baseUrl,
69
- signal: options.signal,
70
- accountId: options.accountId,
71
- cacheRetention: options.cacheRetention,
72
- compaction: options.compaction,
73
- });
74
- // Suppress unhandled rejection if the iterator path throws first
75
- result.response.catch(() => { });
76
- // Forward streaming deltas
77
- for await (const event of result) {
78
- if (event.type === "text_delta") {
79
- yield { type: "text_delta", text: event.text };
80
- }
81
- else if (event.type === "thinking_delta") {
82
- yield { type: "thinking_delta", text: event.text };
83
- }
84
- else if (event.type === "server_toolcall") {
85
- yield {
86
- type: "server_tool_call",
87
- id: event.id,
88
- name: event.name,
89
- input: event.input,
90
- };
91
- }
92
- else if (event.type === "server_toolresult") {
93
- yield {
94
- type: "server_tool_result",
95
- toolUseId: event.toolUseId,
96
- resultType: event.resultType,
97
- data: event.data,
98
- };
99
- }
100
- }
101
- response = await result.response;
102
- }
103
- catch (err) {
104
- // Context overflow: force-compact via transformContext and retry (up to 3 times)
105
- if (overflowRetries < MAX_OVERFLOW_RETRIES &&
106
- isContextOverflow(err) &&
107
- options.transformContext) {
108
- overflowRetries++;
109
- const transformed = await options.transformContext(messages, { force: true });
110
- if (transformed !== messages) {
111
- messages.length = 0;
112
- messages.push(...transformed);
113
- }
114
- turn--; // Don't count the failed turn
115
- continue;
116
- }
117
- // Overloaded / rate-limited: wait 3s and retry (up to 3 times)
118
- if (overloadRetries < MAX_OVERLOAD_RETRIES && isOverloaded(err)) {
119
- overloadRetries++;
120
- await new Promise((r) => setTimeout(r, OVERLOAD_RETRY_DELAY_MS));
121
- turn--; // Don't count the failed turn
122
- continue;
123
- }
124
- throw err;
125
- }
126
- // Reset retry counters after successful call
127
- overflowRetries = 0;
128
- overloadRetries = 0;
129
- // Accumulate usage
130
- totalUsage.inputTokens += response.usage.inputTokens;
131
- totalUsage.outputTokens += response.usage.outputTokens;
132
- if (response.usage.cacheRead) {
133
- totalUsage.cacheRead = (totalUsage.cacheRead ?? 0) + response.usage.cacheRead;
134
- }
135
- if (response.usage.cacheWrite) {
136
- totalUsage.cacheWrite = (totalUsage.cacheWrite ?? 0) + response.usage.cacheWrite;
137
- }
138
- // Append assistant message to conversation
139
- messages.push(response.message);
140
- yield {
141
- type: "turn_end",
142
- turn,
143
- stopReason: response.stopReason,
144
- usage: response.usage,
145
- };
146
- // Server-side tool hit iteration limit — re-send to continue.
147
- // Do NOT add an extra user message; the API detects the trailing
148
- // server_tool_use block and resumes automatically.
149
- if (response.stopReason === "pause_turn") {
150
- consecutivePauses++;
151
- if (consecutivePauses >= maxContinuations) {
152
- break; // Safety limit — fall through to agent_done below
153
- }
154
- continue;
155
- }
156
- consecutivePauses = 0;
157
- // If not tool_use, we're done
158
- if (response.stopReason !== "tool_use") {
159
- yield {
160
- type: "agent_done",
161
- totalTurns: turn,
162
- totalUsage: { ...totalUsage },
163
- };
164
- return {
165
- message: response.message,
166
- totalTurns: turn,
167
- totalUsage: { ...totalUsage },
168
- };
169
- }
170
- // Extract tool calls — separate client-executed from provider built-in (e.g. Moonshot $web_search)
171
- const allToolCalls = extractToolCalls(response.message.content);
172
- const toolCalls = [];
173
- const toolResults = [];
174
- for (const tc of allToolCalls) {
175
- if (tc.name.startsWith("$")) {
176
- // Provider built-in tool (e.g. Moonshot $web_search) — not locally executed.
177
- // Still needs a tool_result for the message history round-trip.
178
- toolResults.push({
179
- type: "tool_result",
180
- toolCallId: tc.id,
181
- content: JSON.stringify(tc.args),
182
- });
183
- }
184
- else {
185
- toolCalls.push(tc);
186
- }
187
- }
188
- const eventStream = new EventStream();
189
- // Launch all tool calls in parallel
190
- const executions = toolCalls.map(async (toolCall) => {
191
- const startTime = Date.now();
192
- eventStream.push({
193
- type: "tool_call_start",
194
- toolCallId: toolCall.id,
195
- name: toolCall.name,
196
- args: toolCall.args,
197
- });
198
- let resultContent;
199
- let details;
200
- let isError = false;
201
- const tool = toolMap.get(toolCall.name);
202
- if (!tool) {
203
- resultContent = `Unknown tool: ${toolCall.name}`;
204
- isError = true;
205
- }
206
- else {
207
- try {
208
- const parsed = tool.parameters.parse(toolCall.args);
209
- const ctx = {
210
- signal: options.signal ?? AbortSignal.timeout(300_000),
211
- toolCallId: toolCall.id,
212
- onUpdate: (update) => {
213
- eventStream.push({
214
- type: "tool_call_update",
215
- toolCallId: toolCall.id,
216
- update,
217
- });
218
- },
219
- };
220
- const raw = await tool.execute(parsed, ctx);
221
- const normalized = normalizeToolResult(raw);
222
- resultContent = normalized.content;
223
- details = normalized.details;
224
- }
225
- catch (err) {
226
- isError = true;
227
- resultContent = err instanceof Error ? err.message : String(err);
228
- }
229
- }
230
- const durationMs = Date.now() - startTime;
231
- eventStream.push({
232
- type: "tool_call_end",
233
- toolCallId: toolCall.id,
234
- result: resultContent,
235
- details,
236
- isError,
237
- durationMs,
238
- });
239
- return { toolCallId: toolCall.id, content: resultContent, isError };
240
- });
241
- // Abort the tool event stream when the signal fires so Ctrl+C
242
- // doesn't hang waiting for long-running tools to finish.
243
- const abortHandler = () => eventStream.abort(new Error("aborted"));
244
- options.signal?.addEventListener("abort", abortHandler, { once: true });
245
- // Close event stream when all tools complete
246
- Promise.all(executions)
247
- .then((results) => {
248
- for (const tc of toolCalls) {
249
- const r = results.find((x) => x.toolCallId === tc.id);
250
- toolResults.push({
251
- type: "tool_result",
252
- toolCallId: tc.id,
253
- content: r.content,
254
- isError: r.isError || undefined,
255
- });
256
- }
257
- eventStream.close();
258
- })
259
- .catch((err) => eventStream.abort(err instanceof Error ? err : new Error(String(err))));
260
- // Yield events as they arrive from parallel tools
261
- try {
262
- for await (const event of eventStream) {
263
- yield event;
264
- }
265
- }
266
- finally {
267
- options.signal?.removeEventListener("abort", abortHandler);
268
- // Ensure every tool_use has a matching tool_result, even on abort.
269
- // Without this, an aborted turn leaves an orphaned tool_use in the
270
- // message history which causes Anthropic API 400 errors on the next
271
- // request.
272
- for (const tc of toolCalls) {
273
- if (!toolResults.some((r) => r.toolCallId === tc.id)) {
274
- toolResults.push({
275
- type: "tool_result",
276
- toolCallId: tc.id,
277
- content: "Tool execution was aborted.",
278
- isError: true,
279
- });
280
- }
281
- }
282
- messages.push({ role: "tool", content: toolResults });
283
- }
284
- }
285
- // Exceeded max turns — return last assistant message
286
- let lastAssistant;
287
- for (let i = messages.length - 1; i >= 0; i--) {
288
- if (messages[i].role === "assistant") {
289
- lastAssistant = messages[i];
290
- break;
291
- }
292
- }
293
- yield {
294
- type: "agent_done",
295
- totalTurns: turn,
296
- totalUsage: { ...totalUsage },
297
- };
298
- return {
299
- message: lastAssistant ?? { role: "assistant", content: [] },
300
- totalTurns: turn,
301
- totalUsage: { ...totalUsage },
302
- };
303
- }
304
- function normalizeToolResult(raw) {
305
- return typeof raw === "string" ? { content: raw } : raw;
306
- }
307
- function extractToolCalls(content) {
308
- if (typeof content === "string")
309
- return [];
310
- return content.filter((part) => part.type === "tool_call");
311
- }
312
- //# sourceMappingURL=agent-loop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=agent-loop.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-loop.test.d.ts","sourceRoot":"","sources":["../src/agent-loop.test.ts"],"names":[],"mappings":""}
@@ -1,229 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from "vitest";
2
- import { isContextOverflow, agentLoop } from "./agent-loop.js";
3
- // ── Mock stream ────────────────────────────────────────────
4
- vi.mock("@kenkaiiii/gg-ai", async (importOriginal) => {
5
- // eslint-disable-next-line @typescript-eslint/consistent-type-imports
6
- const mod = await importOriginal();
7
- return { ...mod, stream: vi.fn() };
8
- });
9
- import { stream } from "@kenkaiiii/gg-ai";
10
- const mockStream = vi.mocked(stream);
11
- function makeResponse(text, stopReason = "end_turn") {
12
- return {
13
- message: {
14
- role: "assistant",
15
- content: text ? [{ type: "text", text }] : "",
16
- },
17
- stopReason,
18
- usage: { inputTokens: 100, outputTokens: 50 },
19
- };
20
- }
21
- function mockOkResult(text) {
22
- const resp = makeResponse(text);
23
- const events = text ? [{ type: "text_delta", text }] : [];
24
- return {
25
- [Symbol.asyncIterator]: async function* () {
26
- for (const e of events)
27
- yield e;
28
- },
29
- response: Promise.resolve(resp),
30
- };
31
- }
32
- function mockErrorResult(error) {
33
- const p = Promise.reject(error);
34
- p.catch(() => { }); // prevent unhandled rejection
35
- return {
36
- [Symbol.asyncIterator]: async function* () {
37
- yield* []; // satisfy require-yield
38
- throw error;
39
- },
40
- response: p,
41
- };
42
- }
43
- async function collectLoop(messages, opts) {
44
- const gen = agentLoop(messages, opts);
45
- const events = [];
46
- let result;
47
- while (true) {
48
- const next = await gen.next();
49
- if (next.done) {
50
- result = next.value;
51
- break;
52
- }
53
- events.push(next.value);
54
- }
55
- return { events, result: result };
56
- }
57
- // ── Tests ──────────────────────────────────────────────────
58
- describe("isContextOverflow", () => {
59
- it("detects Anthropic overflow error", () => {
60
- const err = new Error("[anthropic] prompt is too long: 203456 tokens > 200000 maximum");
61
- expect(isContextOverflow(err)).toBe(true);
62
- });
63
- it("detects OpenAI overflow error", () => {
64
- const err = new Error("[openai] This model's maximum context length is 128000 tokens. " +
65
- "However, your messages resulted in 130000 tokens.");
66
- expect(isContextOverflow(err)).toBe(true);
67
- });
68
- it("detects context_length_exceeded code", () => {
69
- const err = new Error("context_length_exceeded");
70
- expect(isContextOverflow(err)).toBe(true);
71
- });
72
- it("detects token exceed pattern", () => {
73
- const err = new Error("Request token count exceeds the limit");
74
- expect(isContextOverflow(err)).toBe(true);
75
- });
76
- it("returns false for unrelated errors", () => {
77
- expect(isContextOverflow(new Error("network timeout"))).toBe(false);
78
- expect(isContextOverflow(new Error("authentication failed"))).toBe(false);
79
- expect(isContextOverflow(new Error("rate limit exceeded"))).toBe(false);
80
- });
81
- it("returns false for non-Error values", () => {
82
- expect(isContextOverflow("some string")).toBe(false);
83
- expect(isContextOverflow(null)).toBe(false);
84
- expect(isContextOverflow(undefined)).toBe(false);
85
- });
86
- });
87
- describe("agentLoop", () => {
88
- beforeEach(() => {
89
- vi.resetAllMocks();
90
- });
91
- it("yields text_delta, turn_end, and agent_done for a simple response", async () => {
92
- mockStream.mockReturnValueOnce(mockOkResult("Hello!"));
93
- const messages = [
94
- { role: "system", content: "You are helpful." },
95
- { role: "user", content: "Hi" },
96
- ];
97
- const { events, result } = await collectLoop(messages, {
98
- provider: "anthropic",
99
- model: "test",
100
- });
101
- const types = events.map((e) => e.type);
102
- expect(types).toContain("text_delta");
103
- expect(types).toContain("turn_end");
104
- expect(types).toContain("agent_done");
105
- expect(result.totalTurns).toBe(1);
106
- expect(result.totalUsage.inputTokens).toBe(100);
107
- expect(result.totalUsage.outputTokens).toBe(50);
108
- });
109
- it("calls transformContext before each LLM call", async () => {
110
- mockStream.mockReturnValueOnce(mockOkResult("Done"));
111
- const messages = [
112
- { role: "system", content: "sys" },
113
- { role: "user", content: "test" },
114
- ];
115
- const transformContext = vi.fn().mockImplementation((msgs) => msgs);
116
- await collectLoop(messages, {
117
- provider: "anthropic",
118
- model: "test",
119
- transformContext,
120
- });
121
- expect(transformContext).toHaveBeenCalledTimes(1);
122
- expect(transformContext).toHaveBeenCalledWith(messages);
123
- });
124
- it("replaces messages when transformContext returns a new array", async () => {
125
- mockStream.mockReturnValueOnce(mockOkResult("Ok"));
126
- const original = [
127
- { role: "system", content: "sys" },
128
- { role: "user", content: "lots of old context" },
129
- { role: "assistant", content: "old reply" },
130
- { role: "user", content: "new question" },
131
- ];
132
- const compacted = [
133
- { role: "system", content: "sys" },
134
- { role: "user", content: "new question" },
135
- ];
136
- const transformContext = vi.fn().mockReturnValueOnce(compacted);
137
- await collectLoop(original, {
138
- provider: "anthropic",
139
- model: "test",
140
- transformContext,
141
- });
142
- // Original array should have been replaced in-place
143
- expect(original.length).toBe(compacted.length + 1); // +1 for pushed assistant message
144
- expect(original[0]).toEqual(compacted[0]);
145
- expect(original[1]).toEqual(compacted[1]);
146
- });
147
- it("retries once on context overflow when transformContext is provided", async () => {
148
- const overflowErr = new Error("prompt is too long: 250000 tokens > 200000 maximum");
149
- mockStream
150
- .mockReturnValueOnce(mockErrorResult(overflowErr))
151
- .mockReturnValueOnce(mockOkResult("Recovered"));
152
- const messages = [
153
- { role: "system", content: "sys" },
154
- { role: "user", content: "test" },
155
- ];
156
- const compacted = [
157
- { role: "system", content: "sys" },
158
- { role: "user", content: "test" },
159
- ];
160
- const transformContext = vi.fn().mockImplementation(() => compacted);
161
- const { events, result } = await collectLoop(messages, {
162
- provider: "anthropic",
163
- model: "test",
164
- transformContext,
165
- });
166
- // transformContext called 3 times: pre-call, on overflow, pre-retry
167
- expect(transformContext).toHaveBeenCalledTimes(3);
168
- expect(mockStream).toHaveBeenCalledTimes(2);
169
- expect(result.totalTurns).toBe(1);
170
- const textEvents = events.filter((e) => e.type === "text_delta");
171
- expect(textEvents).toHaveLength(1);
172
- });
173
- it("throws on context overflow when no transformContext is provided", async () => {
174
- const overflowErr = new Error("prompt is too long: 250000 tokens > 200000 maximum");
175
- mockStream.mockReturnValueOnce(mockErrorResult(overflowErr));
176
- const messages = [
177
- { role: "system", content: "sys" },
178
- { role: "user", content: "test" },
179
- ];
180
- await expect(collectLoop(messages, { provider: "anthropic", model: "test" })).rejects.toThrow("prompt is too long");
181
- });
182
- it("throws on non-overflow errors even with transformContext", async () => {
183
- const otherErr = new Error("authentication failed");
184
- mockStream.mockReturnValueOnce(mockErrorResult(otherErr));
185
- const messages = [
186
- { role: "system", content: "sys" },
187
- { role: "user", content: "test" },
188
- ];
189
- const transformContext = vi.fn().mockImplementation((msgs) => msgs);
190
- await expect(collectLoop(messages, { provider: "anthropic", model: "test", transformContext })).rejects.toThrow("authentication failed");
191
- });
192
- it("respects maxTurns", async () => {
193
- // Return tool_use to force looping, but cap at 2 turns
194
- const toolResponse = {
195
- message: {
196
- role: "assistant",
197
- content: [{ type: "tool_call", id: "t1", name: "test_tool", args: {} }],
198
- },
199
- stopReason: "tool_use",
200
- usage: { inputTokens: 50, outputTokens: 25 },
201
- };
202
- // Keep returning tool_use — loop should stop at maxTurns
203
- mockStream.mockReturnValue({
204
- [Symbol.asyncIterator]: async function* () {
205
- // no text events
206
- },
207
- response: Promise.resolve(toolResponse),
208
- });
209
- const messages = [
210
- { role: "system", content: "sys" },
211
- { role: "user", content: "test" },
212
- ];
213
- const { result } = await collectLoop(messages, {
214
- provider: "anthropic",
215
- model: "test",
216
- maxTurns: 2,
217
- tools: [
218
- {
219
- name: "test_tool",
220
- description: "test",
221
- parameters: { parse: () => ({}) },
222
- execute: () => "result",
223
- },
224
- ],
225
- });
226
- expect(result.totalTurns).toBe(2);
227
- });
228
- });
229
- //# sourceMappingURL=agent-loop.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-loop.test.js","sourceRoot":"","sources":["../src/agent-loop.test.ts"],"names":[],"mappings":"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"}
package/dist/agent.d.ts DELETED
@@ -1,34 +0,0 @@
1
- import type { AgentEvent, AgentOptions, AgentResult } from "./types.js";
2
- /**
3
- * Dual-nature result: async iterable for streaming events,
4
- * thenable for awaiting the final AgentResult.
5
- *
6
- * ```ts
7
- * // Stream events
8
- * for await (const event of agent.prompt("hello")) { ... }
9
- *
10
- * // Or just await the result
11
- * const result = await agent.prompt("hello");
12
- * ```
13
- */
14
- export declare class AgentStream implements AsyncIterable<AgentEvent> {
15
- private events;
16
- private resultPromise;
17
- private resolveResult;
18
- private rejectResult;
19
- private hasConsumer;
20
- constructor(generator: AsyncGenerator<AgentEvent, AgentResult>, onDone: () => void);
21
- private pump;
22
- [Symbol.asyncIterator](): AsyncIterator<AgentEvent>;
23
- then<TResult1 = AgentResult, TResult2 = never>(onfulfilled?: ((value: AgentResult) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
24
- private drainEvents;
25
- }
26
- export declare class Agent {
27
- private messages;
28
- private _running;
29
- private options;
30
- constructor(options: AgentOptions);
31
- get running(): boolean;
32
- prompt(content: string): AgentStream;
33
- }
34
- //# sourceMappingURL=agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIxE;;;;;;;;;;;GAWG;AACH,qBAAa,WAAY,YAAW,aAAa,CAAC,UAAU,CAAC;IAC3D,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,WAAW,CAAS;gBAEhB,SAAS,EAAE,cAAc,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,IAAI;YASpE,IAAI;IAqBlB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC;IAKnD,IAAI,CAAC,QAAQ,GAAG,WAAW,EAAE,QAAQ,GAAG,KAAK,EAC3C,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,EAC/E,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GAC1E,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAKjB,WAAW;CAO1B;AAID,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,YAAY;IAOjC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;CAarC"}