@nodetool-ai/cli-workflow 0.0.0-stage → 0.8.9-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -2
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/api-client.d.ts +580 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +34 -0
- package/dist/api-client.js.map +1 -0
- package/dist/commands/collections.d.ts +10 -0
- package/dist/commands/collections.d.ts.map +1 -0
- package/dist/commands/collections.js +257 -0
- package/dist/commands/collections.js.map +1 -0
- package/dist/commands/costs.d.ts +15 -0
- package/dist/commands/costs.d.ts.map +1 -0
- package/dist/commands/costs.js +201 -0
- package/dist/commands/costs.js.map +1 -0
- package/dist/commands/debug.d.ts +13 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +149 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/errors.d.ts +11 -0
- package/dist/commands/errors.d.ts.map +1 -0
- package/dist/commands/errors.js +177 -0
- package/dist/commands/errors.js.map +1 -0
- package/dist/commands/generate.d.ts +17 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +326 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/generations.d.ts +17 -0
- package/dist/commands/generations.d.ts.map +1 -0
- package/dist/commands/generations.js +408 -0
- package/dist/commands/generations.js.map +1 -0
- package/dist/commands/install-missing-packs.d.ts +21 -0
- package/dist/commands/install-missing-packs.d.ts.map +1 -0
- package/dist/commands/install-missing-packs.js +48 -0
- package/dist/commands/install-missing-packs.js.map +1 -0
- package/dist/commands/node.d.ts +10 -0
- package/dist/commands/node.d.ts.map +1 -0
- package/dist/commands/node.js +130 -0
- package/dist/commands/node.js.map +1 -0
- package/dist/commands/projects.d.ts +11 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +145 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/resource-read.d.ts +28 -0
- package/dist/commands/resource-read.d.ts.map +1 -0
- package/dist/commands/resource-read.js +314 -0
- package/dist/commands/resource-read.js.map +1 -0
- package/dist/commands/runs.d.ts +7 -0
- package/dist/commands/runs.d.ts.map +1 -0
- package/dist/commands/runs.js +302 -0
- package/dist/commands/runs.js.map +1 -0
- package/dist/commands/validate.d.ts +24 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +132 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1034 -0
- package/dist/index.js.map +1 -0
- package/dist/nodetool.d.ts +3 -0
- package/dist/nodetool.d.ts.map +1 -0
- package/dist/nodetool.js +4 -0
- package/dist/nodetool.js.map +1 -0
- package/dist/packs/command-service.d.ts +3 -0
- package/dist/packs/command-service.d.ts.map +1 -0
- package/dist/packs/command-service.js +9 -0
- package/dist/packs/command-service.js.map +1 -0
- package/dist/workflow-packs.d.ts +7 -0
- package/dist/workflow-packs.d.ts.map +1 -0
- package/dist/workflow-packs.js +31 -0
- package/dist/workflow-packs.js.map +1 -0
- package/package.json +73 -4
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/** Hyphen/space spellings agents are likely to type for an underscored id. */
|
|
2
|
+
const PROVIDER_ALIASES = {
|
|
3
|
+
fal: "fal_ai",
|
|
4
|
+
"fal-ai": "fal_ai",
|
|
5
|
+
falai: "fal_ai",
|
|
6
|
+
"eleven-labs": "elevenlabs",
|
|
7
|
+
"claude-agent-sdk": "claude_agent_sdk",
|
|
8
|
+
"llama-cpp": "llama_cpp"
|
|
9
|
+
};
|
|
10
|
+
const normKey = (s) => s.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
11
|
+
function pickExtension(bytes) {
|
|
12
|
+
if (bytes.length >= 2 && bytes[0] === 0x89 && bytes[1] === 0x50)
|
|
13
|
+
return "png";
|
|
14
|
+
if (bytes.length >= 2 && bytes[0] === 0xff && bytes[1] === 0xd8)
|
|
15
|
+
return "jpg";
|
|
16
|
+
if (bytes.length >= 6 && bytes[0] === 0x47 && bytes[1] === 0x49)
|
|
17
|
+
return "gif";
|
|
18
|
+
if (bytes.length >= 12 &&
|
|
19
|
+
bytes[8] === 0x57 &&
|
|
20
|
+
bytes[9] === 0x45 &&
|
|
21
|
+
bytes[10] === 0x42 &&
|
|
22
|
+
bytes[11] === 0x50)
|
|
23
|
+
return "webp";
|
|
24
|
+
return "png";
|
|
25
|
+
}
|
|
26
|
+
/** Resolve a user-typed provider name to a registered runtime provider id. */
|
|
27
|
+
function resolveProviderId(input, registered) {
|
|
28
|
+
const lower = input.toLowerCase();
|
|
29
|
+
const underscore = lower.replace(/[-\s]+/g, "_");
|
|
30
|
+
for (const candidate of [lower, underscore]) {
|
|
31
|
+
if (registered.includes(candidate))
|
|
32
|
+
return candidate;
|
|
33
|
+
if (PROVIDER_ALIASES[candidate] &&
|
|
34
|
+
registered.includes(PROVIDER_ALIASES[candidate]))
|
|
35
|
+
return PROVIDER_ALIASES[candidate];
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
/** Match a loose model name ("flux-schnell") to a real image model. */
|
|
40
|
+
function resolveImageModel(models, input, provider) {
|
|
41
|
+
if (models.length === 0) {
|
|
42
|
+
// No manifest available — trust the raw id (works for FAL endpoint ids).
|
|
43
|
+
return {
|
|
44
|
+
id: input,
|
|
45
|
+
name: input,
|
|
46
|
+
provider: provider
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const want = normKey(input);
|
|
50
|
+
const exact = models.find((m) => m.id === input);
|
|
51
|
+
if (exact)
|
|
52
|
+
return exact;
|
|
53
|
+
const norm = models.find((m) => normKey(m.id) === want || normKey(m.name) === want);
|
|
54
|
+
if (norm)
|
|
55
|
+
return norm;
|
|
56
|
+
const suffix = models.find((m) => m.id.endsWith(input) || normKey(m.id).endsWith(want));
|
|
57
|
+
if (suffix)
|
|
58
|
+
return suffix;
|
|
59
|
+
const partial = models.filter((m) => normKey(m.id).includes(want) || normKey(m.name).includes(want));
|
|
60
|
+
if (partial.length === 1)
|
|
61
|
+
return partial[0];
|
|
62
|
+
if (partial.length > 1) {
|
|
63
|
+
const list = partial
|
|
64
|
+
.slice(0, 10)
|
|
65
|
+
.map((m) => ` ${m.id}`)
|
|
66
|
+
.join("\n");
|
|
67
|
+
throw new Error(`Model "${input}" is ambiguous for ${provider}. Candidates:\n${list}\n` +
|
|
68
|
+
`Pass a full model id.`);
|
|
69
|
+
}
|
|
70
|
+
if (input.includes("/")) {
|
|
71
|
+
return {
|
|
72
|
+
id: input,
|
|
73
|
+
name: input,
|
|
74
|
+
provider: provider
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
throw new Error(`Model "${input}" not found for ${provider}. ` +
|
|
78
|
+
`Run \`nodetool generate ${provider} --list-models\` to see image model ids. ` +
|
|
79
|
+
"For video, use nodetool tools list video and nodetool skills read storyboard-core.");
|
|
80
|
+
}
|
|
81
|
+
/** Init the secret DB so encrypted keys resolve; env-only keys work regardless. */
|
|
82
|
+
async function initSecretStore() {
|
|
83
|
+
try {
|
|
84
|
+
const { initDb } = await import("@nodetool-ai/models");
|
|
85
|
+
const { initMasterKey } = await import("@nodetool-ai/security");
|
|
86
|
+
const { getDefaultDbPath } = await import("@nodetool-ai/config");
|
|
87
|
+
initDb(getDefaultDbPath());
|
|
88
|
+
try {
|
|
89
|
+
await initMasterKey();
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Decryption is best-effort; env-var keys still resolve via the registry.
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// No DB available — rely on process.env for the provider key.
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export function registerGenerateCommand(program) {
|
|
100
|
+
program
|
|
101
|
+
.command("generate [provider] [model] [prompt...]")
|
|
102
|
+
.description('Generate an image from any provider (e.g. `generate fal-ai flux-schnell "a fox"`)')
|
|
103
|
+
.addHelpText("after", "\nThis command generates images. For video and stories:\n nodetool tools list video\n nodetool skills read storyboard-core\n")
|
|
104
|
+
.option("-o, --output <path>", "Output file or directory")
|
|
105
|
+
.option("--width <n>", "Image width in pixels")
|
|
106
|
+
.option("--height <n>", "Image height in pixels")
|
|
107
|
+
.option("--aspect-ratio <ratio>", "Aspect ratio, e.g. 16:9, 1:1, 9:16")
|
|
108
|
+
.option("--negative-prompt <text>", "What to avoid in the image")
|
|
109
|
+
.option("--seed <n>", "Random seed for reproducible output")
|
|
110
|
+
.option("-n, --num-images <n>", "Number of images to generate", "1")
|
|
111
|
+
.option("--steps <n>", "Inference steps")
|
|
112
|
+
.option("--guidance <n>", "Guidance scale")
|
|
113
|
+
.option("--strength <n>", "Image-to-image strength (with --image)")
|
|
114
|
+
.option("--image <path...>", "Input image(s) — switches to image-to-image")
|
|
115
|
+
.option("--list-models", "List the provider's image models and exit")
|
|
116
|
+
.option("--json", "Print the result as JSON")
|
|
117
|
+
.action(async (providerArg, modelArg, promptParts, opts) => {
|
|
118
|
+
try {
|
|
119
|
+
await run(providerArg, modelArg, promptParts ?? [], opts);
|
|
120
|
+
}
|
|
121
|
+
catch (e) {
|
|
122
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
123
|
+
if (opts.json) {
|
|
124
|
+
console.log(JSON.stringify({ ok: false, error: msg }, null, 2));
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
console.error(`\n❌ ${msg}`);
|
|
128
|
+
}
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async function run(providerArg, modelArg, promptParts, opts) {
|
|
134
|
+
if (!providerArg) {
|
|
135
|
+
throw new Error("Provider is required. Usage: nodetool generate <provider> <model> <prompt>");
|
|
136
|
+
}
|
|
137
|
+
const { listRegisteredProviderIds } = await import("@nodetool-ai/runtime");
|
|
138
|
+
const { createProvider, providerSecretKey } = await import("@nodetool-ai/cli-providers");
|
|
139
|
+
await initSecretStore();
|
|
140
|
+
const registered = listRegisteredProviderIds();
|
|
141
|
+
const providerId = resolveProviderId(providerArg, registered);
|
|
142
|
+
if (!providerId) {
|
|
143
|
+
throw new Error(`Unknown provider "${providerArg}". Image providers include: ` +
|
|
144
|
+
`fal-ai, openai, gemini, replicate, kie. ` +
|
|
145
|
+
`Registered ids: ${registered.join(", ")}`);
|
|
146
|
+
}
|
|
147
|
+
let provider;
|
|
148
|
+
try {
|
|
149
|
+
provider = await createProvider(providerId);
|
|
150
|
+
}
|
|
151
|
+
catch (e) {
|
|
152
|
+
const key = providerSecretKey(providerId);
|
|
153
|
+
const hint = key
|
|
154
|
+
? ` Set ${key} (env var or \`nodetool secrets store ${key}\`).`
|
|
155
|
+
: "";
|
|
156
|
+
throw new Error(`Could not initialize provider "${providerId}": ${e instanceof Error ? e.message : String(e)}.${hint}`);
|
|
157
|
+
}
|
|
158
|
+
const models = await provider
|
|
159
|
+
.getAvailableImageModels()
|
|
160
|
+
.catch(() => []);
|
|
161
|
+
if (opts.listModels) {
|
|
162
|
+
if (opts.json) {
|
|
163
|
+
console.log(JSON.stringify({ provider: providerId, models }, null, 2));
|
|
164
|
+
}
|
|
165
|
+
else if (models.length === 0) {
|
|
166
|
+
console.log(`No image models listed for ${providerId}.`);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
console.log(`\nImage models for ${providerId} (${models.length}):\n`);
|
|
170
|
+
for (const m of models)
|
|
171
|
+
console.log(` ${m.id}${m.name && m.name !== m.id ? ` — ${m.name}` : ""}`);
|
|
172
|
+
}
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (!modelArg)
|
|
176
|
+
throw new Error("Model is required. Run with --list-models to see options.");
|
|
177
|
+
const prompt = promptParts.join(" ").trim();
|
|
178
|
+
if (!prompt)
|
|
179
|
+
throw new Error("Prompt is required.");
|
|
180
|
+
const model = resolveImageModel(models, modelArg, providerId);
|
|
181
|
+
const numImages = Math.max(1, parseInt(opts.numImages ?? "1", 10) || 1);
|
|
182
|
+
const params = {
|
|
183
|
+
model,
|
|
184
|
+
prompt,
|
|
185
|
+
negativePrompt: opts.negativePrompt ?? null,
|
|
186
|
+
aspectRatio: opts.aspectRatio ?? null
|
|
187
|
+
};
|
|
188
|
+
if (opts.width) {
|
|
189
|
+
params.width = parseInt(opts.width, 10);
|
|
190
|
+
}
|
|
191
|
+
if (opts.height) {
|
|
192
|
+
params.height = parseInt(opts.height, 10);
|
|
193
|
+
}
|
|
194
|
+
if (opts.seed) {
|
|
195
|
+
params.seed = parseInt(opts.seed, 10);
|
|
196
|
+
}
|
|
197
|
+
if (opts.steps) {
|
|
198
|
+
params.numInferenceSteps = parseInt(opts.steps, 10);
|
|
199
|
+
}
|
|
200
|
+
if (opts.guidance) {
|
|
201
|
+
params.guidanceScale = parseFloat(opts.guidance);
|
|
202
|
+
}
|
|
203
|
+
if (!opts.json) {
|
|
204
|
+
console.error(`\nGenerating ${numImages > 1 ? `${numImages} images` : "image"} with ${providerId} / ${model.id} …`);
|
|
205
|
+
}
|
|
206
|
+
// The call runs inside the generation seam (docs/media-generation-tracking-
|
|
207
|
+
// design.md § 8, S6): the row `nodetool costs` and `nodetool generations`
|
|
208
|
+
// read is opened before the call and closed with its outcome, and the
|
|
209
|
+
// images become assets when a database is open. The file on disk is still
|
|
210
|
+
// written either way.
|
|
211
|
+
const { ProcessingContext } = await import("@nodetool-ai/runtime");
|
|
212
|
+
const { attachRunCostLedger } = await import("@nodetool-ai/execution");
|
|
213
|
+
const { LOCAL_USER_ID } = await import("@nodetool-ai/cli-local/local-db");
|
|
214
|
+
const { randomUUID } = await import("node:crypto");
|
|
215
|
+
const context = new ProcessingContext({
|
|
216
|
+
jobId: randomUUID(),
|
|
217
|
+
userId: LOCAL_USER_ID
|
|
218
|
+
});
|
|
219
|
+
context.registerProvider(providerId, provider);
|
|
220
|
+
try {
|
|
221
|
+
const { localModelInterfaces } = await import("@nodetool-ai/cli-execution/local-model-interfaces");
|
|
222
|
+
context.setModelInterfaces(await localModelInterfaces());
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// No database: the row cannot be written and the asset cannot be saved;
|
|
226
|
+
// the file on disk is the handle.
|
|
227
|
+
}
|
|
228
|
+
const ledger = attachRunCostLedger(context, {
|
|
229
|
+
userId: LOCAL_USER_ID,
|
|
230
|
+
workflowId: null
|
|
231
|
+
});
|
|
232
|
+
const capability = opts.image?.length ? "image_to_image" : "text_to_image";
|
|
233
|
+
const generation = await context.runGenerationWith({
|
|
234
|
+
provider: providerId,
|
|
235
|
+
capability,
|
|
236
|
+
model: model.id,
|
|
237
|
+
params: {
|
|
238
|
+
prompt,
|
|
239
|
+
negative_prompt: params.negativePrompt,
|
|
240
|
+
aspect_ratio: params.aspectRatio,
|
|
241
|
+
width: params.width,
|
|
242
|
+
height: params.height,
|
|
243
|
+
seed: params.seed,
|
|
244
|
+
num_images: numImages,
|
|
245
|
+
input_images: opts.image ?? []
|
|
246
|
+
},
|
|
247
|
+
origin: { surface: "cli" },
|
|
248
|
+
persist: {}
|
|
249
|
+
}, async (_provider, signal) => {
|
|
250
|
+
if (opts.image && opts.image.length > 0) {
|
|
251
|
+
const { readFile } = await import("node:fs/promises");
|
|
252
|
+
const inputs = await Promise.all(opts.image.map(async (p) => new Uint8Array(await readFile(p))));
|
|
253
|
+
const i2iParams = { ...params, signal };
|
|
254
|
+
if (opts.strength) {
|
|
255
|
+
i2iParams.strength = parseFloat(opts.strength);
|
|
256
|
+
}
|
|
257
|
+
return numImages > 1
|
|
258
|
+
? provider.imageToImages(inputs, i2iParams, numImages)
|
|
259
|
+
: [await provider.imageToImage(inputs, i2iParams)];
|
|
260
|
+
}
|
|
261
|
+
return numImages > 1
|
|
262
|
+
? provider.textToImages({ ...params, signal }, numImages)
|
|
263
|
+
: [await provider.textToImage({ ...params, signal })];
|
|
264
|
+
});
|
|
265
|
+
// The process exits right after printing; let the row land first.
|
|
266
|
+
await ledger.settled();
|
|
267
|
+
const images = generation.output;
|
|
268
|
+
const assetIds = generation.assets
|
|
269
|
+
.map((asset) => asset.asset_id)
|
|
270
|
+
.filter((id) => typeof id === "string");
|
|
271
|
+
const paths = await writeImages(images, model, opts.output);
|
|
272
|
+
if (opts.json) {
|
|
273
|
+
console.log(JSON.stringify({
|
|
274
|
+
ok: true,
|
|
275
|
+
provider: providerId,
|
|
276
|
+
model: model.id,
|
|
277
|
+
prompt,
|
|
278
|
+
generation_id: generation.id,
|
|
279
|
+
asset_ids: assetIds,
|
|
280
|
+
images: paths.map((path, i) => ({ path, bytes: images[i].length }))
|
|
281
|
+
}, null, 2));
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
console.log(`\n✅ Wrote ${paths.length} image(s):`);
|
|
285
|
+
for (const p of paths)
|
|
286
|
+
console.log(` ${p}`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/** Write image bytes to disk, returning absolute paths. */
|
|
290
|
+
async function writeImages(images, model, output) {
|
|
291
|
+
const { writeFile, mkdir, stat } = await import("node:fs/promises");
|
|
292
|
+
const path = await import("node:path");
|
|
293
|
+
const slug = normKey(model.id).slice(0, 32) || "image";
|
|
294
|
+
const stamp = `${Date.now()}`;
|
|
295
|
+
// Decide directory + base name from --output.
|
|
296
|
+
let dir = process.cwd();
|
|
297
|
+
let base = null;
|
|
298
|
+
if (output) {
|
|
299
|
+
const isDir = output.endsWith("/") ||
|
|
300
|
+
output.endsWith(path.sep) ||
|
|
301
|
+
(await stat(output)
|
|
302
|
+
.then((s) => s.isDirectory())
|
|
303
|
+
.catch(() => false));
|
|
304
|
+
if (isDir) {
|
|
305
|
+
dir = output;
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
dir = path.dirname(output);
|
|
309
|
+
base = path.basename(output).replace(/\.[^.]+$/, "");
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
await mkdir(dir, { recursive: true });
|
|
313
|
+
const paths = [];
|
|
314
|
+
for (let i = 0; i < images.length; i++) {
|
|
315
|
+
const ext = pickExtension(images[i]);
|
|
316
|
+
const suffix = images.length > 1 ? `-${i + 1}` : "";
|
|
317
|
+
const name = base
|
|
318
|
+
? `${base}${suffix}.${ext}`
|
|
319
|
+
: `nodetool-${slug}-${stamp}${suffix}.${ext}`;
|
|
320
|
+
const full = path.resolve(dir, name);
|
|
321
|
+
await writeFile(full, images[i]);
|
|
322
|
+
paths.push(full);
|
|
323
|
+
}
|
|
324
|
+
return paths;
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool generations` — the record of every media generation, from the
|
|
3
|
+
* local DB, no server needed.
|
|
4
|
+
*
|
|
5
|
+
* One row per provider media call, opened before the call and closed with
|
|
6
|
+
* its outcome (docs/media-generation-tracking-design.md). `list` and `get`
|
|
7
|
+
* read the rows, `await` waits for one to settle, `cancel` closes a running
|
|
8
|
+
* one, `reconcile` asks the provider what it billed, and `sweep` runs the
|
|
9
|
+
* startup sweep plus one drain of the reconcile queue by hand.
|
|
10
|
+
*
|
|
11
|
+
* `provider-list` and `provider-get` ask the *provider* instead: its own
|
|
12
|
+
* record of what this account ran, from any machine, at the price it billed.
|
|
13
|
+
* The seven actions are the `generations` agent capabilities.
|
|
14
|
+
*/
|
|
15
|
+
import type { Command } from "commander";
|
|
16
|
+
export declare function registerGenerationsCommands(program: Command): void;
|
|
17
|
+
//# sourceMappingURL=generations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generations.d.ts","sourceRoot":"","sources":["../../src/commands/generations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8KzC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyRlE"}
|