qwen-agent-server 0.11.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // Graceful shutdown for the MCP server.
4
+ //
5
+ // Design: exported setupShutdown() wires SIGTERM/SIGINT handlers and
6
+ // returns { handleSignal, isShuttingDown } so tests can invoke handlers
7
+ // directly without sending real signals to the test process.
8
+ //
9
+ // Shutdown sequence:
10
+ // 1. Set shutting_down flag (qwen_spawn returns error after this)
11
+ // 2. Close MCP server transport
12
+ // 3. For each live session: call stop() with a 5s per-session timeout
13
+ // 4. If any stop() exceeds 5s → exit code 1 (force kill path)
14
+ // Otherwise → exit code 0
15
+ //
16
+ // The reaper interval handle is NOT cleared here — it should be
17
+ // unref()d so it doesn't block process exit (done in server.ts).
18
+ import { createLogger } from "./log.js";
19
+ const log = createLogger("qwen-shutdown");
20
+ const STOP_TIMEOUT_MS = 5_000;
21
+ // ─────────────────────────────────────────────────────────────────
22
+ // setupShutdown
23
+ export function setupShutdown(server, pool, exit = process.exit) {
24
+ let shuttingDown = false;
25
+ let shutdownStarted = false;
26
+ const isShuttingDown = () => shuttingDown;
27
+ const handleSignal = async (signal) => {
28
+ if (shutdownStarted)
29
+ return;
30
+ shutdownStarted = true;
31
+ shuttingDown = true;
32
+ log.info({ signal, event_type: "shutdown" }, "shutdown signal received");
33
+ // Close MCP transport — stops accepting new connections
34
+ try {
35
+ await server.close();
36
+ }
37
+ catch (err) {
38
+ log.error({ err }, "error closing MCP server");
39
+ }
40
+ // Stop all live sessions with a per-session timeout
41
+ const sessions = [...pool.sessions.values()];
42
+ log.info({ count: sessions.length, event_type: "shutdown" }, "stopping sessions");
43
+ let forcedKill = false;
44
+ await Promise.allSettled(sessions.map(async (session) => {
45
+ const raceResult = await Promise.race([
46
+ Promise.resolve().then(() => session.stop()),
47
+ new Promise((resolve) => setTimeout(() => resolve("timeout"), STOP_TIMEOUT_MS)),
48
+ ]);
49
+ if (raceResult === "timeout") {
50
+ forcedKill = true;
51
+ log.error({ task_id: session.task_id, event_type: "force_kill" }, "session stop() timed out after 5s — force kill");
52
+ }
53
+ else {
54
+ log.info({ task_id: session.task_id, event_type: "stopped", state: session.state }, "session stopped");
55
+ }
56
+ }));
57
+ if (forcedKill) {
58
+ log.error({ event_type: "shutdown" }, "forced exit with code 1");
59
+ exit(1);
60
+ }
61
+ else {
62
+ log.info({ event_type: "shutdown" }, "clean exit with code 0");
63
+ exit(0);
64
+ }
65
+ };
66
+ return { handleSignal, isShuttingDown };
67
+ }
68
+ //# sourceMappingURL=shutdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,wCAAwC;AACxC,EAAE;AACF,qEAAqE;AACrE,wEAAwE;AACxE,6DAA6D;AAC7D,EAAE;AACF,qBAAqB;AACrB,oEAAoE;AACpE,kCAAkC;AAClC,wEAAwE;AACxE,gEAAgE;AAChE,8CAA8C;AAC9C,EAAE;AACF,gEAAgE;AAChE,iEAAiE;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAE1C,MAAM,eAAe,GAAG,KAAK,CAAC;AAS9B,oEAAoE;AACpE,gBAAgB;AAEhB,MAAM,UAAU,aAAa,CAC3B,MAAuB,EACvB,IAAiB,EACjB,OAA+B,OAAO,CAAC,IAAI;IAK3C,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC;IAE1C,MAAM,YAAY,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;QAC3D,IAAI,eAAe;YAAE,OAAO;QAC5B,eAAe,GAAG,IAAI,CAAC;QACvB,YAAY,GAAG,IAAI,CAAC;QAEpB,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,0BAA0B,CAAC,CAAC;QAEzE,wDAAwD;QACxD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,0BAA0B,CAAC,CAAC;QACjD,CAAC;QAED,oDAAoD;QACpD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAElF,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,MAAM,OAAO,CAAC,UAAU,CACtB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC7B,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBACpC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,EAAE,CACjC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC,CACtD;aACF,CAAC,CAAC;YAEH,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,UAAU,GAAG,IAAI,CAAC;gBAClB,GAAG,CAAC,KAAK,CACP,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,EACtD,gDAAgD,CACjD,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CACN,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EACzE,iBAAiB,CAClB,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,IAAI,UAAU,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,yBAAyB,CAAC,CAAC;YACjE,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,wBAAwB,CAAC,CAAC;YAC/D,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,218 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // threads.ts — in-memory conversation threading for stateless oneshot tools.
4
+ //
5
+ // `qwen_oneshot` and `qwen_oneshot_vision` are stateless by contract:
6
+ // each call spawns / connects to a backend, runs one round-trip, and
7
+ // returns. Pool sessions handle multi-turn within a single conversation,
8
+ // but they cost a process per session and don't cross tool boundaries.
9
+ //
10
+ // This module is the lightweight alternative: a process-local Map of
11
+ // thread_id → ordered turns. Callers pass `continuation_id` on the next
12
+ // call; the supervisor prepends prior turns into the prompt (oneshot)
13
+ // or the messages array (vision) and returns the same id so the caller
14
+ // can chain.
15
+ //
16
+ // What this is NOT:
17
+ // - Cross-process. Threads live in this process only; restart wipes
18
+ // them. Operator-owned local supervisor; "I want durable threads"
19
+ // is a separate feature (and v1 doesn't ship it).
20
+ // - A session pool. No backend pinning, no budget tracking, no LRU
21
+ // eviction. Threads just remember text.
22
+ // - Image-aware in v1. Vision turns lose their image attachments in
23
+ // the prelude — a `[image attached]` placeholder is emitted instead.
24
+ import { randomUUID } from "node:crypto";
25
+ const DEFAULT_TTL_MS = 3 * 60 * 60 * 1000;
26
+ const DEFAULT_MAX_TURNS = 20;
27
+ const DEFAULT_REAP_INTERVAL_MS = 10 * 60 * 1000;
28
+ export class ThreadStore {
29
+ threads = new Map();
30
+ ttl_ms;
31
+ max_turns;
32
+ reaper = null;
33
+ constructor(opts = {}) {
34
+ this.ttl_ms = opts.ttl_ms ?? DEFAULT_TTL_MS;
35
+ this.max_turns = opts.max_turns ?? DEFAULT_MAX_TURNS;
36
+ const interval = opts.reap_interval_ms ?? DEFAULT_REAP_INTERVAL_MS;
37
+ // Don't start the reaper in tests (set interval to 0 to disable).
38
+ if (interval > 0) {
39
+ this.reaper = setInterval(() => this.reap(), interval);
40
+ // unref() so the interval doesn't keep the process alive on exit.
41
+ this.reaper.unref();
42
+ }
43
+ }
44
+ /**
45
+ * Get or create the thread for `id`. When `id` is undefined or
46
+ * unknown, a fresh thread is created; when known, its expiry is
47
+ * refreshed.
48
+ *
49
+ * Returns the canonical id (caller-supplied or newly minted) plus
50
+ * the current turns in chronological order.
51
+ */
52
+ resolve(id) {
53
+ if (id !== undefined && id !== "") {
54
+ const existing = this.threads.get(id);
55
+ if (existing !== undefined && existing.expires_at > Date.now()) {
56
+ existing.expires_at = Date.now() + this.ttl_ms;
57
+ return { id, turns: [...existing.turns] };
58
+ }
59
+ // Honour caller-supplied id even if unknown — they may be
60
+ // restarting a thread after a process bounce. v1 starts a fresh
61
+ // thread under the supplied id rather than rejecting; this is
62
+ // the more useful default.
63
+ const fresh = {
64
+ id,
65
+ turns: [],
66
+ expires_at: Date.now() + this.ttl_ms,
67
+ };
68
+ this.threads.set(id, fresh);
69
+ return { id, turns: [] };
70
+ }
71
+ const newId = randomUUID();
72
+ const fresh = {
73
+ id: newId,
74
+ turns: [],
75
+ expires_at: Date.now() + this.ttl_ms,
76
+ };
77
+ this.threads.set(newId, fresh);
78
+ return { id: newId, turns: [] };
79
+ }
80
+ /**
81
+ * Append a turn to thread `id`. Enforces the per-thread turn cap by
82
+ * dropping the oldest turn when full. Idempotent for unknown ids:
83
+ * creates the thread under the supplied id.
84
+ */
85
+ append(id, turn) {
86
+ const now = Date.now();
87
+ let thread = this.threads.get(id);
88
+ if (thread === undefined) {
89
+ thread = { id, turns: [], expires_at: now + this.ttl_ms };
90
+ this.threads.set(id, thread);
91
+ }
92
+ thread.turns.push({ ...turn, ts: now });
93
+ if (thread.turns.length > this.max_turns) {
94
+ // Drop oldest. This is a simple cap; callers wanting precise
95
+ // token budgeting should also use formatTextPrelude's
96
+ // max_chars knob to cap *serialized* length.
97
+ thread.turns.splice(0, thread.turns.length - this.max_turns);
98
+ }
99
+ thread.expires_at = now + this.ttl_ms;
100
+ }
101
+ /** Number of currently-stored threads (test surface). */
102
+ size() {
103
+ return this.threads.size;
104
+ }
105
+ /** True if `id` has any stored turns (test surface). */
106
+ has(id) {
107
+ return this.threads.has(id);
108
+ }
109
+ /** Get the turn list for `id`, or [] if unknown. Test surface. */
110
+ turns(id) {
111
+ return [...(this.threads.get(id)?.turns ?? [])];
112
+ }
113
+ /**
114
+ * Remove expired threads. Called automatically on a timer; exposed
115
+ * for tests that want to drive expiry deterministically without
116
+ * waiting on real time.
117
+ */
118
+ reap(now = Date.now()) {
119
+ let removed = 0;
120
+ for (const [id, t] of this.threads) {
121
+ if (t.expires_at <= now) {
122
+ this.threads.delete(id);
123
+ removed++;
124
+ }
125
+ }
126
+ return removed;
127
+ }
128
+ /** Stop the reap interval. Test cleanup. */
129
+ shutdown() {
130
+ if (this.reaper !== null) {
131
+ clearInterval(this.reaper);
132
+ this.reaper = null;
133
+ }
134
+ }
135
+ }
136
+ /**
137
+ * Format a list of prior turns as a text prelude prepended to the
138
+ * current task on `qwen_oneshot` calls (the SDK / Qwen-CLI dispatch
139
+ * path doesn't accept a messages array — only a single prompt string).
140
+ *
141
+ * Drops oldest turns until the serialised prelude fits within
142
+ * `max_chars`. Returns the prelude as a plain string (empty when no
143
+ * turns), suitable for concatenation with the current task.
144
+ */
145
+ export function formatTextPrelude(turns, opts = {}) {
146
+ const max = opts.max_chars ?? 50_000;
147
+ if (turns.length === 0)
148
+ return "";
149
+ // Build newest-first, dropping when over budget. Then reverse for
150
+ // chronological presentation to the model.
151
+ const kept = [];
152
+ let total = 0;
153
+ const header = "Prior conversation:\n";
154
+ const footer = "\n\nCurrent task:\n";
155
+ // Char budget reserved for the actual prior-turn content, excluding
156
+ // the header and footer scaffold. Truncation marker accounts for the
157
+ // "…[truncated]" tail we append when shortening the single newest
158
+ // turn so the overall prelude still respects the cap.
159
+ const TRUNCATION_MARKER = "…[truncated]";
160
+ const contentBudget = Math.max(0, max - header.length - footer.length);
161
+ for (let i = turns.length - 1; i >= 0; i--) {
162
+ const turn = turns[i];
163
+ const tag = turn.role === "user" ? "[user]" : "[assistant]";
164
+ const attach = turn.had_images ? " [image attached]" : "";
165
+ const block = `${tag}${attach}: ${turn.content}\n`;
166
+ if (total + block.length > contentBudget) {
167
+ if (kept.length === 0) {
168
+ // The newest turn alone exceeds the cap. Keep continuity by
169
+ // truncating it rather than emitting it whole — emitting whole
170
+ // would silently inflate the next prompt by potentially many
171
+ // multiples of `max`, and the operator-visible cap would be
172
+ // a lie. (Round-2 critique bead 1m4.)
173
+ const prefix = `${tag}${attach}: `;
174
+ const room = Math.max(0, contentBudget - prefix.length - TRUNCATION_MARKER.length - 1);
175
+ const truncatedBlock = `${prefix}${turn.content.slice(0, room)}${TRUNCATION_MARKER}\n`;
176
+ kept.push(truncatedBlock);
177
+ total += truncatedBlock.length;
178
+ }
179
+ // Either we just truncated the newest turn, or we already had at
180
+ // least one turn kept — stop including older turns in both cases.
181
+ break;
182
+ }
183
+ kept.push(block);
184
+ total += block.length;
185
+ }
186
+ if (kept.length === 0)
187
+ return "";
188
+ // Reverse to chronological order (oldest first).
189
+ kept.reverse();
190
+ return header + kept.join("") + footer;
191
+ }
192
+ /**
193
+ * Format prior turns as an array of OpenAI-style chat messages for
194
+ * `qwen_oneshot_vision`'s direct-HTTP path. Drops oldest turns until
195
+ * serialised JSON length is under `max_chars`. Images from prior turns
196
+ * are NOT carried forward in v1 — `had_images` turns get a marker
197
+ * appended to their content.
198
+ */
199
+ export function formatChatPrelude(turns, opts = {}) {
200
+ const max = opts.max_chars ?? 50_000;
201
+ if (turns.length === 0)
202
+ return [];
203
+ const out = [];
204
+ let total = 0;
205
+ for (let i = turns.length - 1; i >= 0; i--) {
206
+ const turn = turns[i];
207
+ const content = turn.had_images
208
+ ? `${turn.content}\n[image attached in prior turn — not carried forward]`
209
+ : turn.content;
210
+ const entrySize = content.length + 32; // rough overhead for JSON shape
211
+ if (total + entrySize > max && out.length > 0)
212
+ break;
213
+ out.unshift({ role: turn.role, content });
214
+ total += entrySize;
215
+ }
216
+ return out;
217
+ }
218
+ //# sourceMappingURL=threads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../src/threads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // tokenize.ts — direct-HTTP dispatch for `qwen_tokenize`.
4
+ //
5
+ // llama-server exposes /tokenize (NOT /v1/tokenize — sits outside the
6
+ // OpenAI-compat namespace). Returns the model's exact token IDs and
7
+ // count. Useful for budget arithmetic, chunk sizing, and pre-flight
8
+ // context-window math.
9
+ //
10
+ // The tokenizer is colocated with whatever model is loaded — any
11
+ // text or multimodal backend can serve this call. No new modality.
12
+ import { createLogger } from "./log.js";
13
+ import { dispatchOpenAIPost } from "./openai-compat.js";
14
+ const log = createLogger("qwen-tokenize");
15
+ const DEFAULT_TIMEOUT_MS = 30_000;
16
+ export async function dispatchTokenize(backend, content, opts = {}) {
17
+ const timeout_ms = opts.timeout_ms ?? DEFAULT_TIMEOUT_MS;
18
+ const body = { content };
19
+ if (opts.add_special !== undefined)
20
+ body.add_special = opts.add_special;
21
+ if (opts.with_pieces !== undefined)
22
+ body.with_pieces = opts.with_pieces;
23
+ // `/tokenize` sits at server root, not under /v1. The shared
24
+ // buildRequestUrl helper strips `/v1` from backend.url when the
25
+ // endpoint is non-/v1 root-relative.
26
+ const outcome = await dispatchOpenAIPost(backend, "/tokenize", body, {
27
+ timeout_ms,
28
+ });
29
+ if (!outcome.ok) {
30
+ if (outcome.status !== undefined) {
31
+ log.warn({
32
+ backend_id: backend.id,
33
+ status: outcome.status,
34
+ body_excerpt: outcome.body_text?.slice(0, 200),
35
+ }, "tokenize dispatch HTTP failure");
36
+ }
37
+ return {
38
+ ok: false,
39
+ elapsed_ms: outcome.elapsed_ms,
40
+ backend_id: backend.id,
41
+ error: outcome.error,
42
+ };
43
+ }
44
+ let parsed;
45
+ try {
46
+ parsed = JSON.parse(outcome.body_text);
47
+ }
48
+ catch (err) {
49
+ return {
50
+ ok: false,
51
+ elapsed_ms: outcome.elapsed_ms,
52
+ backend_id: backend.id,
53
+ error: {
54
+ code: "backend_error",
55
+ message: `non-JSON response: ${err.message}`,
56
+ },
57
+ };
58
+ }
59
+ if (!Array.isArray(parsed.tokens)) {
60
+ return {
61
+ ok: false,
62
+ elapsed_ms: outcome.elapsed_ms,
63
+ backend_id: backend.id,
64
+ error: { code: "no_tokens", message: "backend returned no tokens field" },
65
+ };
66
+ }
67
+ // With with_pieces=true, llama-server emits [{id, piece}, …]; without,
68
+ // it emits a flat number[]. Normalize both shapes.
69
+ const ids = [];
70
+ const pieces = [];
71
+ for (const t of parsed.tokens) {
72
+ if (typeof t === "number") {
73
+ ids.push(t);
74
+ }
75
+ else if (t && typeof t === "object" && typeof t.id === "number") {
76
+ ids.push(t.id);
77
+ if (typeof t.piece === "string")
78
+ pieces.push(t.piece);
79
+ }
80
+ }
81
+ return {
82
+ ok: true,
83
+ tokens: ids,
84
+ count: ids.length,
85
+ ...(pieces.length > 0 ? { pieces } : {}),
86
+ elapsed_ms: outcome.elapsed_ms,
87
+ backend_id: backend.id,
88
+ };
89
+ }
90
+ //# sourceMappingURL=tokenize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../src/tokenize.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // Shared type surface for the qwen-agent-server supervisor.
4
+ // See docs/rdr/RDR-001 for rationale; types here are the implementation
5
+ // contract. Changes here ripple through session.ts / backends.ts /
6
+ // permissions.ts / server.ts.
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,4DAA4D;AAC5D,wEAAwE;AACxE,mEAAmE;AACnE,8BAA8B"}
@@ -0,0 +1,13 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // Single source of truth for the supervisor binary's externally-visible
4
+ // version string. Reported via MCP ServerInfo.version on the wire and
5
+ // asserted in tests against the plugin and marketplace manifests so a
6
+ // release bump that misses any one surface fails CI rather than ships
7
+ // silently stale (see bead qwen-coprocessor-stack-djv).
8
+ //
9
+ // Bump this in lockstep with .claude-plugin/plugin.json and
10
+ // .claude-plugin/marketplace.json (metadata.version and plugins[0].version).
11
+ // The version_consistency test enforces equality across all four sites.
12
+ export const SUPERVISOR_VERSION = "0.11.1";
13
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,wEAAwE;AACxE,sEAAsE;AACtE,sEAAsE;AACtE,sEAAsE;AACtE,wDAAwD;AACxD,EAAE;AACF,4DAA4D;AAC5D,6EAA6E;AAC7E,wEAAwE;AAExE,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC"}