@rudderhq/agent-runtime-claude-local 0.1.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +14 -0
- package/dist/cli/format-event.d.ts +2 -0
- package/dist/cli/format-event.d.ts.map +1 -0
- package/dist/cli/format-event.js +94 -0
- package/dist/cli/format-event.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/quota-probe.d.ts +3 -0
- package/dist/cli/quota-probe.d.ts.map +1 -0
- package/dist/cli/quota-probe.js +106 -0
- package/dist/cli/quota-probe.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/server/execute.d.ts +18 -0
- package/dist/server/execute.d.ts.map +1 -0
- package/dist/server/execute.js +578 -0
- package/dist/server/execute.js.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +57 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/parse.d.ts +22 -0
- package/dist/server/parse.d.ts.map +1 -0
- package/dist/server/parse.js +158 -0
- package/dist/server/parse.js.map +1 -0
- package/dist/server/quota.d.ts +20 -0
- package/dist/server/quota.d.ts.map +1 -0
- package/dist/server/quota.js +477 -0
- package/dist/server/quota.js.map +1 -0
- package/dist/server/skills.d.ts +8 -0
- package/dist/server/skills.d.ts.map +1 -0
- package/dist/server/skills.js +102 -0
- package/dist/server/skills.js.map +1 -0
- package/dist/server/test.d.ts +3 -0
- package/dist/server/test.d.ts.map +1 -0
- package/dist/server/test.js +201 -0
- package/dist/server/test.js.map +1 -0
- package/dist/ui/build-config.d.ts +3 -0
- package/dist/ui/build-config.d.ts.map +1 -0
- package/dist/ui/build-config.js +115 -0
- package/dist/ui/build-config.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/parse-stdout.d.ts +3 -0
- package/dist/ui/parse-stdout.d.ts.map +1 -0
- package/dist/ui/parse-stdout.js +149 -0
- package/dist/ui/parse-stdout.js.map +1 -0
- package/package.json +63 -0
- package/skills/para-memory-files/SKILL.md +114 -0
- package/skills/para-memory-files/references/schemas.md +35 -0
- package/skills/rudder/SKILL.md +265 -0
- package/skills/rudder/references/api-reference.md +253 -0
- package/skills/rudder/references/cli-reference.md +67 -0
- package/skills/rudder/references/organization-skills.md +155 -0
- package/skills/rudder-create-agent/SKILL.md +166 -0
- package/skills/rudder-create-agent/references/api-reference.md +172 -0
- package/skills/rudder-create-agent/references/cli-reference.md +126 -0
- package/skills/rudder-create-plugin/SKILL.md +103 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export { execute, runClaudeLogin } from "./execute.js";
|
|
2
|
+
export { listClaudeSkills, syncClaudeSkills } from "./skills.js";
|
|
3
|
+
export { testEnvironment } from "./test.js";
|
|
4
|
+
export { parseClaudeStreamJson, describeClaudeFailure, isClaudeMaxTurnsResult, isClaudeUnknownSessionError, } from "./parse.js";
|
|
5
|
+
export { getQuotaWindows, readClaudeAuthStatus, readClaudeToken, fetchClaudeQuota, fetchClaudeCliQuota, captureClaudeCliUsageText, parseClaudeCliUsageText, toPercent, fetchWithTimeout, claudeConfigDir, } from "./quota.js";
|
|
6
|
+
function readNonEmptyString(value) {
|
|
7
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
8
|
+
}
|
|
9
|
+
export const sessionCodec = {
|
|
10
|
+
deserialize(raw) {
|
|
11
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw))
|
|
12
|
+
return null;
|
|
13
|
+
const record = raw;
|
|
14
|
+
const sessionId = readNonEmptyString(record.sessionId) ?? readNonEmptyString(record.session_id);
|
|
15
|
+
if (!sessionId)
|
|
16
|
+
return null;
|
|
17
|
+
const cwd = readNonEmptyString(record.cwd) ??
|
|
18
|
+
readNonEmptyString(record.workdir) ??
|
|
19
|
+
readNonEmptyString(record.folder);
|
|
20
|
+
const workspaceId = readNonEmptyString(record.workspaceId) ?? readNonEmptyString(record.workspace_id);
|
|
21
|
+
const repoUrl = readNonEmptyString(record.repoUrl) ?? readNonEmptyString(record.repo_url);
|
|
22
|
+
const repoRef = readNonEmptyString(record.repoRef) ?? readNonEmptyString(record.repo_ref);
|
|
23
|
+
return {
|
|
24
|
+
sessionId,
|
|
25
|
+
...(cwd ? { cwd } : {}),
|
|
26
|
+
...(workspaceId ? { workspaceId } : {}),
|
|
27
|
+
...(repoUrl ? { repoUrl } : {}),
|
|
28
|
+
...(repoRef ? { repoRef } : {}),
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
serialize(params) {
|
|
32
|
+
if (!params)
|
|
33
|
+
return null;
|
|
34
|
+
const sessionId = readNonEmptyString(params.sessionId) ?? readNonEmptyString(params.session_id);
|
|
35
|
+
if (!sessionId)
|
|
36
|
+
return null;
|
|
37
|
+
const cwd = readNonEmptyString(params.cwd) ??
|
|
38
|
+
readNonEmptyString(params.workdir) ??
|
|
39
|
+
readNonEmptyString(params.folder);
|
|
40
|
+
const workspaceId = readNonEmptyString(params.workspaceId) ?? readNonEmptyString(params.workspace_id);
|
|
41
|
+
const repoUrl = readNonEmptyString(params.repoUrl) ?? readNonEmptyString(params.repo_url);
|
|
42
|
+
const repoRef = readNonEmptyString(params.repoRef) ?? readNonEmptyString(params.repo_ref);
|
|
43
|
+
return {
|
|
44
|
+
sessionId,
|
|
45
|
+
...(cwd ? { cwd } : {}),
|
|
46
|
+
...(workspaceId ? { workspaceId } : {}),
|
|
47
|
+
...(repoUrl ? { repoUrl } : {}),
|
|
48
|
+
...(repoRef ? { repoRef } : {}),
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
getDisplayId(params) {
|
|
52
|
+
if (!params)
|
|
53
|
+
return null;
|
|
54
|
+
return readNonEmptyString(params.sessionId) ?? readNonEmptyString(params.session_id);
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { UsageSummary } from "@rudderhq/agent-runtime-utils";
|
|
2
|
+
export declare function parseClaudeStreamJson(stdout: string): {
|
|
3
|
+
sessionId: string | null;
|
|
4
|
+
model: string;
|
|
5
|
+
costUsd: number | null;
|
|
6
|
+
usage: UsageSummary | null;
|
|
7
|
+
summary: string;
|
|
8
|
+
resultJson: Record<string, unknown> | null;
|
|
9
|
+
};
|
|
10
|
+
export declare function extractClaudeLoginUrl(text: string): string | null;
|
|
11
|
+
export declare function detectClaudeLoginRequired(input: {
|
|
12
|
+
parsed: Record<string, unknown> | null;
|
|
13
|
+
stdout: string;
|
|
14
|
+
stderr: string;
|
|
15
|
+
}): {
|
|
16
|
+
requiresLogin: boolean;
|
|
17
|
+
loginUrl: string | null;
|
|
18
|
+
};
|
|
19
|
+
export declare function describeClaudeFailure(parsed: Record<string, unknown>): string | null;
|
|
20
|
+
export declare function isClaudeMaxTurnsResult(parsed: Record<string, unknown> | null | undefined): boolean;
|
|
21
|
+
export declare function isClaudeUnknownSessionError(parsed: Record<string, unknown>): boolean;
|
|
22
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAMlE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM;;;aA4C7B,MAAM,GAAG,IAAI;WACf,YAAY,GAAG,IAAI;;gBAEd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;EAsBvD;AAkCD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUjE;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAatD;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAcpF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAWlG;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CASpF"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { asString, asNumber, parseObject, parseJson } from "@rudderhq/agent-runtime-utils/server-utils";
|
|
2
|
+
const CLAUDE_AUTH_REQUIRED_RE = /(?:not\s+logged\s+in|please\s+log\s+in|please\s+run\s+`?claude\s+login`?|login\s+required|requires\s+login|unauthorized|authentication\s+required)/i;
|
|
3
|
+
const URL_RE = /(https?:\/\/[^\s'"`<>()[\]{};,!?]+[^\s'"`<>()[\]{};,!.?:]+)/gi;
|
|
4
|
+
export function parseClaudeStreamJson(stdout) {
|
|
5
|
+
let sessionId = null;
|
|
6
|
+
let model = "";
|
|
7
|
+
let finalResult = null;
|
|
8
|
+
const assistantTexts = [];
|
|
9
|
+
for (const rawLine of stdout.split(/\r?\n/)) {
|
|
10
|
+
const line = rawLine.trim();
|
|
11
|
+
if (!line)
|
|
12
|
+
continue;
|
|
13
|
+
const event = parseJson(line);
|
|
14
|
+
if (!event)
|
|
15
|
+
continue;
|
|
16
|
+
const type = asString(event.type, "");
|
|
17
|
+
if (type === "system" && asString(event.subtype, "") === "init") {
|
|
18
|
+
sessionId = asString(event.session_id, sessionId ?? "") || sessionId;
|
|
19
|
+
model = asString(event.model, model);
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
if (type === "assistant") {
|
|
23
|
+
sessionId = asString(event.session_id, sessionId ?? "") || sessionId;
|
|
24
|
+
const message = parseObject(event.message);
|
|
25
|
+
const content = Array.isArray(message.content) ? message.content : [];
|
|
26
|
+
for (const entry of content) {
|
|
27
|
+
if (typeof entry !== "object" || entry === null || Array.isArray(entry))
|
|
28
|
+
continue;
|
|
29
|
+
const block = entry;
|
|
30
|
+
if (asString(block.type, "") === "text") {
|
|
31
|
+
const text = asString(block.text, "");
|
|
32
|
+
if (text)
|
|
33
|
+
assistantTexts.push(text);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (type === "result") {
|
|
39
|
+
finalResult = event;
|
|
40
|
+
sessionId = asString(event.session_id, sessionId ?? "") || sessionId;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (!finalResult) {
|
|
44
|
+
return {
|
|
45
|
+
sessionId,
|
|
46
|
+
model,
|
|
47
|
+
costUsd: null,
|
|
48
|
+
usage: null,
|
|
49
|
+
summary: assistantTexts.join("\n\n").trim(),
|
|
50
|
+
resultJson: null,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const usageObj = parseObject(finalResult.usage);
|
|
54
|
+
const usage = {
|
|
55
|
+
inputTokens: asNumber(usageObj.input_tokens, 0),
|
|
56
|
+
cachedInputTokens: asNumber(usageObj.cache_read_input_tokens, 0),
|
|
57
|
+
outputTokens: asNumber(usageObj.output_tokens, 0),
|
|
58
|
+
};
|
|
59
|
+
const costRaw = finalResult.total_cost_usd;
|
|
60
|
+
const costUsd = typeof costRaw === "number" && Number.isFinite(costRaw) ? costRaw : null;
|
|
61
|
+
const summary = asString(finalResult.result, assistantTexts.join("\n\n")).trim();
|
|
62
|
+
return {
|
|
63
|
+
sessionId,
|
|
64
|
+
model,
|
|
65
|
+
costUsd,
|
|
66
|
+
usage,
|
|
67
|
+
summary,
|
|
68
|
+
resultJson: finalResult,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function extractClaudeErrorMessages(parsed) {
|
|
72
|
+
const raw = Array.isArray(parsed.errors) ? parsed.errors : [];
|
|
73
|
+
const messages = [];
|
|
74
|
+
for (const entry of raw) {
|
|
75
|
+
if (typeof entry === "string") {
|
|
76
|
+
const msg = entry.trim();
|
|
77
|
+
if (msg)
|
|
78
|
+
messages.push(msg);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const obj = entry;
|
|
85
|
+
const msg = asString(obj.message, "") || asString(obj.error, "") || asString(obj.code, "");
|
|
86
|
+
if (msg) {
|
|
87
|
+
messages.push(msg);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
messages.push(JSON.stringify(obj));
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// skip non-serializable entry
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return messages;
|
|
98
|
+
}
|
|
99
|
+
export function extractClaudeLoginUrl(text) {
|
|
100
|
+
const match = text.match(URL_RE);
|
|
101
|
+
if (!match || match.length === 0)
|
|
102
|
+
return null;
|
|
103
|
+
for (const rawUrl of match) {
|
|
104
|
+
const cleaned = rawUrl.replace(/[\])}.!,?;:'\"]+$/g, "");
|
|
105
|
+
if (cleaned.includes("claude") || cleaned.includes("anthropic") || cleaned.includes("auth")) {
|
|
106
|
+
return cleaned;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return match[0]?.replace(/[\])}.!,?;:'\"]+$/g, "") ?? null;
|
|
110
|
+
}
|
|
111
|
+
export function detectClaudeLoginRequired(input) {
|
|
112
|
+
const resultText = asString(input.parsed?.result, "").trim();
|
|
113
|
+
const messages = [resultText, ...extractClaudeErrorMessages(input.parsed ?? {}), input.stdout, input.stderr]
|
|
114
|
+
.join("\n")
|
|
115
|
+
.split(/\r?\n/)
|
|
116
|
+
.map((line) => line.trim())
|
|
117
|
+
.filter(Boolean);
|
|
118
|
+
const requiresLogin = messages.some((line) => CLAUDE_AUTH_REQUIRED_RE.test(line));
|
|
119
|
+
return {
|
|
120
|
+
requiresLogin,
|
|
121
|
+
loginUrl: extractClaudeLoginUrl([input.stdout, input.stderr].join("\n")),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export function describeClaudeFailure(parsed) {
|
|
125
|
+
const subtype = asString(parsed.subtype, "");
|
|
126
|
+
const resultText = asString(parsed.result, "").trim();
|
|
127
|
+
const errors = extractClaudeErrorMessages(parsed);
|
|
128
|
+
let detail = resultText;
|
|
129
|
+
if (!detail && errors.length > 0) {
|
|
130
|
+
detail = errors[0] ?? "";
|
|
131
|
+
}
|
|
132
|
+
const parts = ["Claude run failed"];
|
|
133
|
+
if (subtype)
|
|
134
|
+
parts.push(`subtype=${subtype}`);
|
|
135
|
+
if (detail)
|
|
136
|
+
parts.push(detail);
|
|
137
|
+
return parts.length > 1 ? parts.join(": ") : null;
|
|
138
|
+
}
|
|
139
|
+
export function isClaudeMaxTurnsResult(parsed) {
|
|
140
|
+
if (!parsed)
|
|
141
|
+
return false;
|
|
142
|
+
const subtype = asString(parsed.subtype, "").trim().toLowerCase();
|
|
143
|
+
if (subtype === "error_max_turns")
|
|
144
|
+
return true;
|
|
145
|
+
const stopReason = asString(parsed.stop_reason, "").trim().toLowerCase();
|
|
146
|
+
if (stopReason === "max_turns")
|
|
147
|
+
return true;
|
|
148
|
+
const resultText = asString(parsed.result, "").trim();
|
|
149
|
+
return /max(?:imum)?\s+turns?/i.test(resultText);
|
|
150
|
+
}
|
|
151
|
+
export function isClaudeUnknownSessionError(parsed) {
|
|
152
|
+
const resultText = asString(parsed.result, "").trim();
|
|
153
|
+
const allMessages = [resultText, ...extractClaudeErrorMessages(parsed)]
|
|
154
|
+
.map((msg) => msg.trim())
|
|
155
|
+
.filter(Boolean);
|
|
156
|
+
return allMessages.some((msg) => /no conversation found with session id|unknown session|session .* not found/i.test(msg));
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ProviderQuotaResult, QuotaWindow } from "@rudderhq/agent-runtime-utils";
|
|
2
|
+
export declare function claudeConfigDir(): string;
|
|
3
|
+
interface ClaudeAuthStatus {
|
|
4
|
+
loggedIn: boolean;
|
|
5
|
+
authMethod: string | null;
|
|
6
|
+
subscriptionType: string | null;
|
|
7
|
+
}
|
|
8
|
+
export declare function readClaudeAuthStatus(): Promise<ClaudeAuthStatus | null>;
|
|
9
|
+
export declare function readClaudeToken(): Promise<string | null>;
|
|
10
|
+
/** Convert a 0-1 utilization fraction to a 0-100 integer percent. Returns null for null/undefined input. */
|
|
11
|
+
export declare function toPercent(utilization: number | null | undefined): number | null;
|
|
12
|
+
/** fetch with an abort-based timeout so a hanging provider api doesn't block the response indefinitely */
|
|
13
|
+
export declare function fetchWithTimeout(url: string, init: RequestInit, ms?: number): Promise<Response>;
|
|
14
|
+
export declare function fetchClaudeQuota(token: string): Promise<QuotaWindow[]>;
|
|
15
|
+
export declare function parseClaudeCliUsageText(text: string): QuotaWindow[];
|
|
16
|
+
export declare function captureClaudeCliUsageText(timeoutMs?: number): Promise<string>;
|
|
17
|
+
export declare function fetchClaudeCliQuota(): Promise<QuotaWindow[]>;
|
|
18
|
+
export declare function getQuotaWindows(): Promise<ProviderQuotaResult>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=quota.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../../src/server/quota.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAOtF,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AA4FD,UAAU,gBAAgB;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAgB7E;AASD,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO9D;AA8CD,4GAA4G;AAC5G,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAG/E;AAED,0GAA0G;AAC1G,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,SAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQnG;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA+D5E;AAgHD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAsCnE;AAeD,wBAAsB,yBAAyB,CAAC,SAAS,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BnF;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAGlE;AAOD,wBAAsB,eAAe,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAoDpE"}
|