@poe-platform/safe-bash 0.1.543 → 0.1.545

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.
Files changed (112) hide show
  1. package/README.md +1 -0
  2. package/dist/safe-bash/chunks/{chunk-VNDFKT6F.js → chunk-25GUOTPE.js} +13 -9
  3. package/dist/safe-bash/chunks/{chunk-VNDFKT6F.js.map → chunk-25GUOTPE.js.map} +1 -1
  4. package/dist/safe-bash/chunks/{chunk-EZLQA6ON.js → chunk-2YHZYNLC.js} +9 -5
  5. package/dist/safe-bash/chunks/{chunk-EZLQA6ON.js.map → chunk-2YHZYNLC.js.map} +1 -1
  6. package/dist/safe-bash/chunks/chunk-6E3FCEJ5.js +355 -0
  7. package/dist/safe-bash/chunks/chunk-6E3FCEJ5.js.map +7 -0
  8. package/dist/safe-bash/chunks/{chunk-MVVKEMEG.js → chunk-ASCV3OWE.js} +17 -10
  9. package/dist/safe-bash/chunks/chunk-ASCV3OWE.js.map +7 -0
  10. package/dist/safe-bash/chunks/chunk-BZUQJTOZ.js +322 -0
  11. package/dist/safe-bash/chunks/chunk-BZUQJTOZ.js.map +7 -0
  12. package/dist/safe-bash/chunks/{chunk-PZMJ4EC3.js → chunk-C7Z2SSTY.js} +2 -2
  13. package/dist/safe-bash/chunks/{chunk-TPD45VUZ.js → chunk-CTE3HGYS.js} +22 -109
  14. package/dist/safe-bash/chunks/chunk-CTE3HGYS.js.map +7 -0
  15. package/dist/safe-bash/chunks/{chunk-R3QJL5HH.js → chunk-EGLBB57T.js} +12 -8
  16. package/dist/safe-bash/chunks/{chunk-R3QJL5HH.js.map → chunk-EGLBB57T.js.map} +1 -1
  17. package/dist/safe-bash/chunks/chunk-EUTSYRNM.js +111 -0
  18. package/dist/safe-bash/chunks/chunk-EUTSYRNM.js.map +7 -0
  19. package/dist/safe-bash/chunks/{chunk-WODV2DVM.js → chunk-FAA2WXKH.js} +11 -7
  20. package/dist/safe-bash/chunks/{chunk-WODV2DVM.js.map → chunk-FAA2WXKH.js.map} +1 -1
  21. package/dist/safe-bash/chunks/chunk-FDGESHPB.js +224 -0
  22. package/dist/safe-bash/chunks/chunk-FDGESHPB.js.map +7 -0
  23. package/dist/safe-bash/chunks/{chunk-YEJBZLE5.js → chunk-GA43CRT3.js} +12 -8
  24. package/dist/safe-bash/chunks/{chunk-YEJBZLE5.js.map → chunk-GA43CRT3.js.map} +1 -1
  25. package/dist/safe-bash/chunks/{chunk-WF4P7XKI.js → chunk-IVJ5JGXZ.js} +12 -8
  26. package/dist/safe-bash/chunks/{chunk-WF4P7XKI.js.map → chunk-IVJ5JGXZ.js.map} +1 -1
  27. package/dist/safe-bash/chunks/{chunk-A4UXQKWZ.js → chunk-K4RQ7ASH.js} +12 -8
  28. package/dist/safe-bash/chunks/{chunk-A4UXQKWZ.js.map → chunk-K4RQ7ASH.js.map} +1 -1
  29. package/dist/safe-bash/chunks/chunk-KYU6MXVK.js +58 -0
  30. package/dist/safe-bash/chunks/chunk-KYU6MXVK.js.map +7 -0
  31. package/dist/safe-bash/chunks/{chunk-T5BV7HPD.js → chunk-O7BRWSKX.js} +17 -60
  32. package/dist/safe-bash/chunks/chunk-O7BRWSKX.js.map +7 -0
  33. package/dist/safe-bash/chunks/{chunk-6PSMEBVP.js → chunk-PPFWG34Y.js} +2 -2
  34. package/dist/safe-bash/chunks/{chunk-AZNI263O.js → chunk-R4HP2LEO.js} +3 -3
  35. package/dist/safe-bash/chunks/chunk-TTTOMUAY.js +33 -0
  36. package/dist/safe-bash/chunks/chunk-TTTOMUAY.js.map +7 -0
  37. package/dist/safe-bash/chunks/{chunk-5VBLSPNM.js → chunk-UO33SQJU.js} +2 -239
  38. package/dist/safe-bash/chunks/chunk-UO33SQJU.js.map +7 -0
  39. package/dist/safe-bash/chunks/{chunk-HFEU5SBQ.js → chunk-WISNTI7E.js} +11 -7
  40. package/dist/safe-bash/chunks/{chunk-HFEU5SBQ.js.map → chunk-WISNTI7E.js.map} +1 -1
  41. package/dist/safe-bash/chunks/{chunk-66VSWIUC.js → chunk-XWCSJDGK.js} +10 -6
  42. package/dist/safe-bash/chunks/{chunk-66VSWIUC.js.map → chunk-XWCSJDGK.js.map} +1 -1
  43. package/dist/safe-bash/commands/csplit/index.browser.js +6 -4
  44. package/dist/safe-bash/commands/factor/index.browser.js +5 -3
  45. package/dist/safe-bash/commands/getopt/index.browser.js +5 -3
  46. package/dist/safe-bash/commands/hexdump/index.browser.js +5 -3
  47. package/dist/safe-bash/commands/iconv/index.browser.js +5 -3
  48. package/dist/safe-bash/commands/line-endings/index.browser.js +6 -4
  49. package/dist/safe-bash/commands/line-endings/stage.d.ts.map +1 -1
  50. package/dist/safe-bash/commands/line-endings/stage.js +4 -1
  51. package/dist/safe-bash/commands/line-endings/stage.js.map +1 -1
  52. package/dist/safe-bash/commands/llm/command.d.ts +4 -0
  53. package/dist/safe-bash/commands/llm/command.d.ts.map +1 -0
  54. package/dist/safe-bash/commands/llm/command.js +194 -0
  55. package/dist/safe-bash/commands/llm/command.js.map +1 -0
  56. package/dist/safe-bash/commands/llm/index.browser.js +14 -0
  57. package/dist/safe-bash/commands/llm/index.browser.js.map +7 -0
  58. package/dist/safe-bash/commands/llm/index.d.ts +6 -0
  59. package/dist/safe-bash/commands/llm/index.d.ts.map +1 -0
  60. package/dist/safe-bash/commands/llm/index.js +12 -0
  61. package/dist/safe-bash/commands/llm/index.js.map +1 -0
  62. package/dist/safe-bash/commands/llm/mime.d.ts +2 -0
  63. package/dist/safe-bash/commands/llm/mime.d.ts.map +1 -0
  64. package/dist/safe-bash/commands/llm/mime.js +33 -0
  65. package/dist/safe-bash/commands/llm/mime.js.map +1 -0
  66. package/dist/safe-bash/commands/llm/providers/elevenlabs.d.ts +16 -0
  67. package/dist/safe-bash/commands/llm/providers/elevenlabs.d.ts.map +1 -0
  68. package/dist/safe-bash/commands/llm/providers/elevenlabs.js +51 -0
  69. package/dist/safe-bash/commands/llm/providers/elevenlabs.js.map +1 -0
  70. package/dist/safe-bash/commands/llm/providers/index.browser.js +13 -0
  71. package/dist/safe-bash/commands/llm/providers/index.browser.js.map +7 -0
  72. package/dist/safe-bash/commands/llm/providers/index.d.ts +4 -0
  73. package/dist/safe-bash/commands/llm/providers/index.d.ts.map +1 -0
  74. package/dist/safe-bash/commands/llm/providers/index.js +3 -0
  75. package/dist/safe-bash/commands/llm/providers/index.js.map +1 -0
  76. package/dist/safe-bash/commands/llm/providers/openai.d.ts +15 -0
  77. package/dist/safe-bash/commands/llm/providers/openai.d.ts.map +1 -0
  78. package/dist/safe-bash/commands/llm/providers/openai.js +78 -0
  79. package/dist/safe-bash/commands/llm/providers/openai.js.map +1 -0
  80. package/dist/safe-bash/commands/llm/providers/shared.d.ts +34 -0
  81. package/dist/safe-bash/commands/llm/providers/shared.d.ts.map +1 -0
  82. package/dist/safe-bash/commands/llm/providers/shared.js +220 -0
  83. package/dist/safe-bash/commands/llm/providers/shared.js.map +1 -0
  84. package/dist/safe-bash/commands/llm/types.d.ts +28 -0
  85. package/dist/safe-bash/commands/llm/types.d.ts.map +1 -0
  86. package/dist/safe-bash/commands/llm/types.js +2 -0
  87. package/dist/safe-bash/commands/llm/types.js.map +1 -0
  88. package/dist/safe-bash/commands/network/index.browser.js +13 -8
  89. package/dist/safe-bash/commands/pr/index.browser.js +5 -3
  90. package/dist/safe-bash/commands/tsort/index.browser.js +5 -3
  91. package/dist/safe-bash/commands/xml/index.browser.js +7 -4
  92. package/dist/safe-bash/commands/yq/index.browser.js +8 -5
  93. package/dist/safe-bash/contracts/command.d.ts +4 -0
  94. package/dist/safe-bash/contracts/command.d.ts.map +1 -1
  95. package/dist/safe-bash/contracts/command.js.map +1 -1
  96. package/dist/safe-bash/core.browser.js +1093 -1160
  97. package/dist/safe-bash/core.browser.js.map +4 -4
  98. package/dist/safe-bash/core.d.ts +2 -0
  99. package/dist/safe-bash/core.d.ts.map +1 -1
  100. package/dist/safe-bash/core.js +2 -0
  101. package/dist/safe-bash/core.js.map +1 -1
  102. package/dist/safe-bash/shell/runtime.d.ts.map +1 -1
  103. package/dist/safe-bash/shell/runtime.js +10 -0
  104. package/dist/safe-bash/shell/runtime.js.map +1 -1
  105. package/package.json +14 -2
  106. package/dist/safe-bash/chunks/chunk-5VBLSPNM.js.map +0 -7
  107. package/dist/safe-bash/chunks/chunk-MVVKEMEG.js.map +0 -7
  108. package/dist/safe-bash/chunks/chunk-T5BV7HPD.js.map +0 -7
  109. package/dist/safe-bash/chunks/chunk-TPD45VUZ.js.map +0 -7
  110. /package/dist/safe-bash/chunks/{chunk-PZMJ4EC3.js.map → chunk-C7Z2SSTY.js.map} +0 -0
  111. /package/dist/safe-bash/chunks/{chunk-6PSMEBVP.js.map → chunk-PPFWG34Y.js.map} +0 -0
  112. /package/dist/safe-bash/chunks/{chunk-AZNI263O.js.map → chunk-R4HP2LEO.js.map} +0 -0
@@ -0,0 +1,194 @@
1
+ import { createOutputOperation, getCommandArguments, readBytes, resolvePath, writeBytes } from "../../contracts/index.js";
2
+ import { yieldTurn } from "../../contracts/yield.js";
3
+ import { attachmentMime } from "./mime.js";
4
+ const maxBytes = 64 * 1024 * 1024;
5
+ export function createCommand(options) {
6
+ const models = new Map();
7
+ const declarations = [];
8
+ for (const provider of options.providers) {
9
+ if (!provider.name || typeof provider.complete !== "function")
10
+ throw new TypeError("Invalid LLM provider");
11
+ for (const source of provider.models) {
12
+ const model = { ...source, ...(source.aliases ? { aliases: [...source.aliases] } : {}), ...(source.attachmentTypes ? { attachmentTypes: [...source.attachmentTypes] } : {}) };
13
+ const entry = { provider, model };
14
+ for (const name of [model.id, ...(model.aliases ?? [])]) {
15
+ if (!name)
16
+ throw new TypeError("Model names must be nonempty");
17
+ if (models.has(name))
18
+ throw new Error(`Duplicate model: ${name}`);
19
+ models.set(name, entry);
20
+ }
21
+ declarations.push(entry);
22
+ }
23
+ }
24
+ return { name: "llm", description: "Query explicitly injected language and media models", async execute(context) {
25
+ const output = createOutputOperation(context, context.stdout);
26
+ const signal = output.signal;
27
+ let iterator;
28
+ let closed = false;
29
+ let ended = false;
30
+ output.registerCleanup(() => {
31
+ if (closed)
32
+ return;
33
+ closed = true;
34
+ if (!ended && iterator?.return) {
35
+ const returned = Promise.resolve().then(() => iterator.return());
36
+ void returned.catch(() => { });
37
+ }
38
+ });
39
+ const wait = (pending) => new Promise((resolve, reject) => {
40
+ const abort = () => reject(signal.reason);
41
+ signal.addEventListener("abort", abort, { once: true });
42
+ if (signal.aborted)
43
+ abort();
44
+ Promise.resolve(pending).then(value => {
45
+ signal.removeEventListener("abort", abort);
46
+ resolve(value);
47
+ }, error => { signal.removeEventListener("abort", abort); reject(error); });
48
+ });
49
+ let inputBytes = 0;
50
+ let argumentBytes = 0;
51
+ let work = 0;
52
+ const step = async () => {
53
+ signal.throwIfAborted();
54
+ if (closed)
55
+ throw new Error("LLM invocation is closed");
56
+ if (++work > 1_000_000)
57
+ throw new Error("LLM work limit exceeded");
58
+ if (work % 256 === 0)
59
+ await yieldTurn(signal);
60
+ };
61
+ const admit = (bytes) => {
62
+ context.inputBudget?.check(inputBytes + bytes);
63
+ if (bytes > maxBytes - inputBytes)
64
+ throw new Error("LLM input byte limit exceeded");
65
+ inputBytes += bytes;
66
+ };
67
+ const emitText = async (text) => {
68
+ for (let offset = 0; offset < text.length;) {
69
+ await step();
70
+ let end = Math.min(text.length, offset + 16_384);
71
+ if (end < text.length && text.charCodeAt(end - 1) >= 0xd800 && text.charCodeAt(end - 1) <= 0xdbff)
72
+ end--;
73
+ await output.output.write(new TextEncoder().encode(text.slice(offset, end)));
74
+ offset = end;
75
+ }
76
+ };
77
+ try {
78
+ const args = getCommandArguments(context);
79
+ const text = (index) => {
80
+ const bytes = args.bytes(index);
81
+ if (!bytes)
82
+ throw new Error("Missing option argument");
83
+ if (bytes.length > maxBytes - argumentBytes)
84
+ throw new Error("LLM argument byte limit exceeded");
85
+ argumentBytes += bytes.length;
86
+ return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
87
+ };
88
+ const positional = [];
89
+ const files = [];
90
+ const settings = Object.create(null);
91
+ let modelName = options.defaultModel;
92
+ let system;
93
+ let operands = false;
94
+ for (let index = 0; index < args.args.length; index++) {
95
+ await step();
96
+ const arg = text(index);
97
+ if (!operands && arg === "--") {
98
+ operands = true;
99
+ continue;
100
+ }
101
+ if (!operands && ["-m", "--model"].includes(arg))
102
+ modelName = text(++index);
103
+ else if (!operands && ["-s", "--system"].includes(arg))
104
+ system = text(++index);
105
+ else if (!operands && ["-o", "--option"].includes(arg)) {
106
+ const key = text(++index);
107
+ settings[key] = text(++index);
108
+ }
109
+ else if (!operands && ["-a", "--attachment", "--at"].includes(arg)) {
110
+ const path = text(++index);
111
+ files.push(arg === "--at" ? { path, mime: text(++index) } : { path });
112
+ }
113
+ else if (!operands && arg.startsWith("-"))
114
+ throw new Error(`Unknown option: ${arg}`);
115
+ else
116
+ positional.push(arg);
117
+ }
118
+ if (args.args[0] === "models" && positional.length === 1 && !files.length) {
119
+ for (const { provider, model } of declarations) {
120
+ await step();
121
+ await emitText(`${provider.name}/${model.id}\taliases: ${(model.aliases ?? []).join(", ")}\tattachments: ${(model.attachmentTypes ?? []).join(", ")}\toutput: ${model.outputType ?? "text/plain"}\n`);
122
+ }
123
+ return { exitCode: 0 };
124
+ }
125
+ const selected = modelName === undefined ? undefined : models.get(modelName);
126
+ if (!selected)
127
+ throw new Error(`Unknown model: ${modelName ?? "(no default model)"}`);
128
+ const chunks = [];
129
+ let stdinBytes = 0;
130
+ for await (const bytes of readBytes(context.stdin, signal)) {
131
+ await step();
132
+ admit(bytes.length);
133
+ stdinBytes += bytes.length;
134
+ chunks.push(new Uint8Array(bytes));
135
+ }
136
+ const stdin = new Uint8Array(stdinBytes);
137
+ let offset = 0;
138
+ for (const bytes of chunks) {
139
+ stdin.set(bytes, offset);
140
+ offset += bytes.length;
141
+ }
142
+ const content = new TextDecoder("utf-8", { fatal: true }).decode(stdin);
143
+ const instruction = positional.join(" ");
144
+ const attachments = [];
145
+ for (const file of files) {
146
+ await step();
147
+ const path = resolvePath(context.cwd, file.path);
148
+ const stat = await wait(context.fs.stat(path, { signal }));
149
+ context.inputBudget?.check(inputBytes + stat.size);
150
+ if (stat.size > maxBytes - inputBytes)
151
+ throw new Error("LLM input byte limit exceeded");
152
+ const bytes = await wait(context.fs.readFile(path, { signal, maxBytes: Math.min(maxBytes, context.inputBudget?.maxBytes ?? maxBytes) - inputBytes }));
153
+ signal.throwIfAborted();
154
+ admit(bytes.length);
155
+ const mimeType = file.mime ?? attachmentMime(bytes, file.path);
156
+ if (!selected.model.attachmentTypes?.some(type => type === mimeType || (type.endsWith("/*") && mimeType.startsWith(type.slice(0, -1)))))
157
+ throw new Error(`Model ${selected.model.id} does not accept ${mimeType}`);
158
+ attachments.push({ mimeType, bytes: new Uint8Array(bytes) });
159
+ }
160
+ const request = { model: selected.model.id, prompt: content && instruction ? `${content}\n\n${instruction}` : content || instruction, attachments, options: settings, signal, ...(system === undefined ? {} : { system }) };
161
+ signal.throwIfAborted();
162
+ iterator = selected.provider.complete(request)[Symbol.asyncIterator]();
163
+ const binary = !(selected.model.outputType ?? "text/plain").startsWith("text/");
164
+ while (true) {
165
+ await step();
166
+ const next = await wait(iterator.next());
167
+ signal.throwIfAborted();
168
+ if (next.done) {
169
+ ended = true;
170
+ break;
171
+ }
172
+ if (binary ? !(next.value instanceof Uint8Array) : typeof next.value !== "string")
173
+ throw new Error("Invalid provider response: mixed text and binary chunks or wrong output type");
174
+ if (typeof next.value === "string")
175
+ await emitText(next.value);
176
+ else
177
+ await output.output.write(next.value);
178
+ }
179
+ if (!binary)
180
+ await output.output.write(new Uint8Array([10]));
181
+ return { exitCode: 0 };
182
+ }
183
+ catch (error) {
184
+ context.signal.throwIfAborted();
185
+ signal.throwIfAborted();
186
+ await writeBytes(context.stderr, new TextEncoder().encode(`llm: ${error instanceof Error ? error.message.slice(0, 4096) : "Provider failed"}\n`), context.signal);
187
+ return { exitCode: 1 };
188
+ }
189
+ finally {
190
+ await output.close();
191
+ }
192
+ } };
193
+ }
194
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/llm/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import {
2
+ createLlmCommands,
3
+ llmCommands
4
+ } from "../../chunks/chunk-6E3FCEJ5.js";
5
+ import "../../chunks/chunk-C7Z2SSTY.js";
6
+ import "../../chunks/chunk-DPJWEGIX.js";
7
+ import "../../chunks/chunk-UO33SQJU.js";
8
+ import "../../chunks/chunk-FDGESHPB.js";
9
+ import "../../chunks/chunk-2KL6W6NB.js";
10
+ export {
11
+ createLlmCommands,
12
+ llmCommands
13
+ };
14
+ //# sourceMappingURL=index.browser.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,6 @@
1
+ import type { CommandDefinition, VirtualShellPlugin } from "../../contracts/index.js";
2
+ import type { LlmCommandsOptions } from "./types.js";
3
+ export type { LlmProvider, LlmModel, LlmRequest, LlmCommandsOptions } from "./types.js";
4
+ export declare function createLlmCommands(options: LlmCommandsOptions): readonly CommandDefinition[];
5
+ export declare function llmCommands(options: LlmCommandsOptions): VirtualShellPlugin;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,iBAAiB,EAAE,CAE3F;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAK3E"}
@@ -0,0 +1,12 @@
1
+ import { createCommand } from "./command.js";
2
+ export function createLlmCommands(options) {
3
+ return [createCommand(options)];
4
+ }
5
+ export function llmCommands(options) {
6
+ const commands = createLlmCommands(options);
7
+ return { name: "llm-commands", setup(host) {
8
+ for (const command of commands)
9
+ host.commands.register(command, { replace: options.replace ?? false });
10
+ } };
11
+ }
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/llm/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,IAAI;YACvC,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;QACzG,CAAC,EAAE,CAAC;AACN,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function attachmentMime(bytes: Uint8Array, path: string): string;
2
+ //# sourceMappingURL=mime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../../src/commands/llm/mime.ts"],"names":[],"mappings":"AASA,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBtE"}
@@ -0,0 +1,33 @@
1
+ import { classify } from "../file/classify.js";
2
+ const extensions = {
3
+ png: "image/png", jpg: "image/jpeg", jpeg: "image/jpeg", gif: "image/gif", webp: "image/webp", svg: "image/svg+xml",
4
+ mp3: "audio/mpeg", wav: "audio/wav", ogg: "audio/ogg", flac: "audio/flac", m4a: "audio/mp4", aac: "audio/aac",
5
+ mp4: "video/mp4", mov: "video/quicktime", webm: "video/webm", mkv: "video/x-matroska", avi: "video/x-msvideo",
6
+ pdf: "application/pdf", txt: "text/plain", json: "application/json", csv: "text/csv",
7
+ };
8
+ export function attachmentMime(bytes, path) {
9
+ const prefix = bytes.subarray(0, 512);
10
+ const ascii = (offset, length) => String.fromCharCode(...prefix.subarray(offset, offset + length));
11
+ if (prefix.length >= 7 && prefix[0] === 255 && (prefix[1] & 246) === 240)
12
+ return "audio/aac";
13
+ if (ascii(0, 3) === "ID3" || (prefix[0] === 255 && (prefix[1] & 224) === 224 && (prefix[1] & 6) !== 0))
14
+ return "audio/mpeg";
15
+ if (ascii(0, 4) === "fLaC")
16
+ return "audio/flac";
17
+ if (ascii(0, 4) === "OggS")
18
+ return "audio/ogg";
19
+ if (ascii(0, 4) === "RIFF") {
20
+ if (ascii(8, 4) === "WAVE")
21
+ return "audio/wav";
22
+ if (ascii(8, 4) === "AVI ")
23
+ return "video/x-msvideo";
24
+ }
25
+ if (ascii(4, 4) === "ftyp")
26
+ return ascii(8, 4) === "M4A " ? "audio/mp4" : ascii(8, 4) === "qt " ? "video/quicktime" : "video/mp4";
27
+ const classified = classify(prefix, bytes.length <= prefix.length).mime;
28
+ if (!["application/octet-stream", "text/plain", "inode/x-empty"].includes(classified))
29
+ return classified;
30
+ const extension = path.slice(path.lastIndexOf(".") + 1).toLowerCase();
31
+ return Object.hasOwn(extensions, extension) ? extensions[extension] : classified === "inode/x-empty" ? "application/octet-stream" : classified;
32
+ }
33
+ //# sourceMappingURL=mime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mime.js","sourceRoot":"","sources":["../../../src/commands/llm/mime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { LlmModel, LlmProvider } from "../types.js";
2
+ import type { HttpTransport } from "../../network/types.js";
3
+ import { type LlmProviderLimits } from "./shared.js";
4
+ export interface ElevenLabsModel extends LlmModel {
5
+ readonly endpoint: "tts" | "music";
6
+ readonly defaultVoiceId?: string;
7
+ }
8
+ export interface ElevenLabsProviderOptions {
9
+ readonly transport: HttpTransport;
10
+ readonly apiKey: string;
11
+ readonly baseUrl?: string;
12
+ readonly models: readonly ElevenLabsModel[];
13
+ readonly limits?: Partial<LlmProviderLimits>;
14
+ }
15
+ export declare function createElevenLabsProvider(options: ElevenLabsProviderOptions): LlmProvider;
16
+ //# sourceMappingURL=elevenlabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elevenlabs.d.ts","sourceRoot":"","sources":["../../../../src/commands/llm/providers/elevenlabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAwE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAI3H,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC9C;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,WAAW,CAqCxF"}
@@ -0,0 +1,51 @@
1
+ import { baseUrl, credential, providerLimits, fields, jsonBody, responseBytes } from "./shared.js";
2
+ const audioFormats = { "audio/mpeg": "mp3_44100_128", "audio/wav": "wav_44100", "audio/pcm": "pcm_44100", "audio/ogg": "opus_48000_128", "audio/basic": "ulaw_8000" };
3
+ export function createElevenLabsProvider(options) {
4
+ const origin = baseUrl(options.baseUrl ?? "https://api.elevenlabs.io");
5
+ const headers = [["xi-api-key", credential(options.apiKey)]];
6
+ const transport = options.transport;
7
+ const limits = providerLimits(options.limits);
8
+ const models = options.models.map(model => Object.freeze({ ...model, ...(model.aliases ? { aliases: Object.freeze([...model.aliases]) } : {}), ...(model.attachmentTypes ? { attachmentTypes: Object.freeze([...model.attachmentTypes]) } : {}) }));
9
+ if (typeof transport !== "function")
10
+ throw new TypeError("Provider transport is required");
11
+ for (const model of models) {
12
+ if (!["tts", "music"].includes(model.endpoint))
13
+ throw new TypeError("Invalid ElevenLabs endpoint");
14
+ if (!Object.hasOwn(audioFormats, model.outputType ?? "") || (model.endpoint === "music" && model.outputType === "audio/wav"))
15
+ throw new TypeError("Unsupported ElevenLabs model outputType");
16
+ }
17
+ return {
18
+ name: "elevenlabs", models: Object.freeze(models),
19
+ async *complete(request) {
20
+ request.signal.throwIfAborted();
21
+ const model = models.find(candidate => candidate.id === request.model);
22
+ if (!model)
23
+ throw new Error(`Unknown model: ${request.model}`);
24
+ if (request.attachments.length)
25
+ throw new TypeError("ElevenLabs reference endpoints do not accept attachments");
26
+ if (request.system !== undefined)
27
+ throw new TypeError("ElevenLabs reference endpoints do not accept system prompts");
28
+ const format = audioFormats[model.outputType];
29
+ const { output_format: requestedFormat, ...requestOptions } = request.options;
30
+ if (requestedFormat !== undefined && requestedFormat !== format)
31
+ throw new TypeError("output_format conflicts with model outputType");
32
+ let path, body;
33
+ if (model.endpoint === "tts") {
34
+ const { voice_id: selectedVoice, ...settings } = requestOptions;
35
+ const voice = selectedVoice ?? model.defaultVoiceId;
36
+ if (!voice)
37
+ throw new TypeError("ElevenLabs TTS requires voice_id or defaultVoiceId");
38
+ path = `/v1/text-to-speech/${encodeURIComponent(voice)}`;
39
+ body = { text: request.prompt, model_id: model.id, voice_settings: fields(settings, ["stability", "similarity_boost", "style", "speed"], ["use_speaker_boost"]) };
40
+ }
41
+ else {
42
+ path = "/v1/music";
43
+ body = { ...fields(requestOptions, ["music_length_ms", "seed"], ["force_instrumental", "respect_sections_durations"]), prompt: request.prompt, model_id: model.id };
44
+ if (body.music_length_ms !== undefined && !Number.isInteger(body.music_length_ms))
45
+ throw new TypeError("Invalid music_length_ms: expected integer");
46
+ }
47
+ yield* responseBytes(transport, `${origin}${path}?output_format=${format}`, headers, request.signal, limits.maxResponseBytes, jsonBody(body, limits.maxRequestBytes));
48
+ },
49
+ };
50
+ }
51
+ //# sourceMappingURL=elevenlabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elevenlabs.js","sourceRoot":"","sources":["../../../../src/commands/llm/providers/elevenlabs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import {
2
+ createElevenLabsProvider,
3
+ createOpenAiProvider
4
+ } from "../../../chunks/chunk-BZUQJTOZ.js";
5
+ import "../../../chunks/chunk-EUTSYRNM.js";
6
+ import "../../../chunks/chunk-KYU6MXVK.js";
7
+ import "../../../chunks/chunk-FDGESHPB.js";
8
+ import "../../../chunks/chunk-2KL6W6NB.js";
9
+ export {
10
+ createElevenLabsProvider,
11
+ createOpenAiProvider
12
+ };
13
+ //# sourceMappingURL=index.browser.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,4 @@
1
+ export { createOpenAiProvider, type OpenAiProviderOptions, type OpenAiModel } from "./openai.js";
2
+ export { createElevenLabsProvider, type ElevenLabsProviderOptions, type ElevenLabsModel } from "./elevenlabs.js";
3
+ export type { LlmProviderLimits } from "./shared.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/llm/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACjH,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { createOpenAiProvider } from "./openai.js";
2
+ export { createElevenLabsProvider } from "./elevenlabs.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/llm/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAgD,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,wBAAwB,EAAwD,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { LlmModel, LlmProvider } from "../types.js";
2
+ import type { HttpTransport } from "../../network/types.js";
3
+ import { type LlmProviderLimits } from "./shared.js";
4
+ export interface OpenAiModel extends LlmModel {
5
+ readonly endpoint: "chat" | "images" | "videos";
6
+ }
7
+ export interface OpenAiProviderOptions {
8
+ readonly transport: HttpTransport;
9
+ readonly apiKey: string;
10
+ readonly baseUrl?: string;
11
+ readonly models: readonly OpenAiModel[];
12
+ readonly limits?: Partial<LlmProviderLimits>;
13
+ }
14
+ export declare function createOpenAiProvider(options: OpenAiProviderOptions): LlmProvider;
15
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../../src/commands/llm/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAmI,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEtL,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACjD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC9C;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,WAAW,CAyDhF"}
@@ -0,0 +1,78 @@
1
+ import { delay } from "../../network/shared.js";
2
+ import { baseUrl, credential, providerLimits, fields, jsonBody, multipart, toBase64, fromBase64, responseBytes, responseJson, chatEvents } from "./shared.js";
3
+ export function createOpenAiProvider(options) {
4
+ const origin = baseUrl(options.baseUrl ?? "https://api.openai.com/v1");
5
+ const headers = [["Authorization", `Bearer ${credential(options.apiKey)}`]];
6
+ const transport = options.transport;
7
+ const limits = providerLimits(options.limits);
8
+ const models = options.models.map(model => Object.freeze({ ...model, ...(model.aliases ? { aliases: Object.freeze([...model.aliases]) } : {}), ...(model.attachmentTypes ? { attachmentTypes: Object.freeze([...model.attachmentTypes]) } : {}) }));
9
+ if (typeof transport !== "function")
10
+ throw new TypeError("Provider transport is required");
11
+ for (const model of models) {
12
+ if (!["chat", "images", "videos"].includes(model.endpoint))
13
+ throw new TypeError("Invalid OpenAI endpoint");
14
+ if (model.endpoint === "images" && !["image/png", "image/jpeg", "image/webp"].includes(model.outputType ?? ""))
15
+ throw new TypeError("Image models require outputType image/png, image/jpeg or image/webp");
16
+ if (model.endpoint === "videos" && model.outputType !== "video/mp4")
17
+ throw new TypeError("Video models require outputType video/mp4");
18
+ if (model.endpoint === "chat" && model.outputType !== undefined && !model.outputType.startsWith("text/"))
19
+ throw new TypeError("Chat models require a text outputType");
20
+ }
21
+ return {
22
+ name: "openai", models: Object.freeze(models),
23
+ async *complete(request) {
24
+ request.signal.throwIfAborted();
25
+ const model = models.find(candidate => candidate.id === request.model);
26
+ if (!model)
27
+ throw new Error(`Unknown model: ${request.model}`);
28
+ if (request.attachments.some(attachment => !attachment.mimeType.startsWith("image/")))
29
+ throw new TypeError("OpenAI reference endpoints accept only image attachments");
30
+ if (request.attachments.reduce((size, file) => size + file.bytes.length, 0) > limits.maxRequestBytes)
31
+ throw new RangeError("Provider request byte limit exceeded");
32
+ const send = (path, payload) => responseBytes(transport, `${origin}${path}`, headers, request.signal, limits.maxResponseBytes, payload);
33
+ if (model.endpoint === "chat") {
34
+ const content = request.attachments.length ? [{ type: "text", text: request.prompt }, ...request.attachments.map(attachment => ({ type: "image_url", image_url: { url: `data:${attachment.mimeType};base64,${toBase64(attachment.bytes, limits.maxRequestBytes)}` } }))] : request.prompt;
35
+ const messages = [...(request.system === undefined ? [] : [{ role: "system", content: request.system }]), { role: "user", content }];
36
+ const body = jsonBody({ ...fields(request.options, ["temperature", "top_p", "max_tokens", "max_completion_tokens", "frequency_penalty", "presence_penalty", "seed", "n", "top_logprobs"], ["store", "parallel_tool_calls", "logprobs"]), model: model.id, messages, stream: true }, limits.maxRequestBytes);
37
+ yield* chatEvents(send("/chat/completions", body), limits.maxEventBytes, request.signal);
38
+ return;
39
+ }
40
+ if (request.system !== undefined)
41
+ throw new TypeError("System prompts are supported only by chat models");
42
+ if (model.endpoint === "images") {
43
+ const outputFormat = model.outputType === "image/jpeg" ? "jpeg" : model.outputType === "image/webp" ? "webp" : "png";
44
+ if (request.options.output_format !== undefined && request.options.output_format !== outputFormat)
45
+ throw new TypeError("output_format conflicts with model outputType");
46
+ const values = { ...fields(request.options, ["n", "output_compression", "partial_images"], ["stream"]), output_format: outputFormat, model: model.id, prompt: request.prompt };
47
+ if (values.stream === true)
48
+ throw new TypeError("Image event streaming is not supported by this reference provider");
49
+ const payload = request.attachments.length ? multipart(values, request.attachments.map(file => ({ ...file, field: "image[]" })), limits.maxRequestBytes) : jsonBody(values, limits.maxRequestBytes);
50
+ const result = await responseJson(send(request.attachments.length ? "/images/edits" : "/images/generations", payload), limits.maxResponseBytes, request.signal);
51
+ if (!Array.isArray(result.data) || result.data.length !== 1)
52
+ throw new TypeError("Expected one generated image");
53
+ yield fromBase64(result.data[0]?.b64_json, limits.maxResponseBytes);
54
+ return;
55
+ }
56
+ if (request.attachments.length > 1)
57
+ throw new TypeError("Videos accept one input_reference attachment");
58
+ const payload = multipart({ ...request.options, model: model.id, prompt: request.prompt }, request.attachments.map(file => ({ ...file, field: "input_reference" })), limits.maxRequestBytes);
59
+ let job = await responseJson(send("/videos", payload), limits.maxResponseBytes, request.signal);
60
+ if (typeof job.id !== "string" || !job.id)
61
+ throw new TypeError("Invalid video job id");
62
+ const path = `/videos/${encodeURIComponent(job.id)}`;
63
+ let polls = 0;
64
+ while (job.status !== "completed") {
65
+ if (job.status === "failed")
66
+ throw new Error("Provider video generation failed");
67
+ if (job.status !== "queued" && job.status !== "in_progress")
68
+ throw new TypeError("Invalid video job status");
69
+ if (polls++ >= limits.maxPolls)
70
+ throw new RangeError("Provider video polling limit exceeded");
71
+ await delay(limits.pollIntervalMs, request.signal);
72
+ job = await responseJson(send(path), limits.maxResponseBytes, request.signal);
73
+ }
74
+ yield* send(`${path}/content`);
75
+ },
76
+ };
77
+ }
78
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../src/commands/llm/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type ByteSource } from "../../../contracts/io.js";
2
+ import type { HttpHeaders, HttpTransport } from "../../network/types.js";
3
+ export interface LlmProviderLimits {
4
+ readonly maxRequestBytes: number;
5
+ readonly maxResponseBytes: number;
6
+ readonly maxEventBytes: number;
7
+ readonly maxPolls: number;
8
+ readonly pollIntervalMs: number;
9
+ }
10
+ export declare function providerLimits(input?: Partial<LlmProviderLimits>): LlmProviderLimits;
11
+ export declare function baseUrl(value: string): string;
12
+ export declare function credential(value: string): string;
13
+ export declare function fields(options: Readonly<Record<string, string>>, numbers: readonly string[], booleans: readonly string[]): Record<string, unknown>;
14
+ export declare function jsonBody(value: unknown, limit: number): {
15
+ body: ByteSource;
16
+ contentType: string;
17
+ };
18
+ export declare function toBase64(bytes: Uint8Array, limit: number): string;
19
+ export declare function fromBase64(value: unknown, limit: number): Uint8Array;
20
+ export declare function multipart(options: Record<string, unknown>, files: readonly {
21
+ field: string;
22
+ mimeType: string;
23
+ bytes: Uint8Array;
24
+ }[], limit: number): {
25
+ body: ByteSource;
26
+ contentType: string;
27
+ };
28
+ export declare function responseBytes(transport: HttpTransport, url: string, headers: HttpHeaders, signal: AbortSignal, limit: number, payload?: {
29
+ body: ByteSource;
30
+ contentType: string;
31
+ }): AsyncGenerator<Uint8Array>;
32
+ export declare function responseJson(source: ByteSource, limit: number, signal: AbortSignal): Promise<Record<string, unknown>>;
33
+ export declare function chatEvents(source: ByteSource, limit: number, signal: AbortSignal): AsyncGenerator<string>;
34
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/commands/llm/providers/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAgB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,KAAK,GAAE,OAAO,CAAC,iBAAiB,CAAM,GAAG,iBAAiB,CAMxF;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAclJ;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAMjG;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAKpE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAkC9L;AAED,wBAAuB,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAAC,UAAU,CAAC,CAkCrN;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAK3H;AAED,wBAAuB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAmChH"}