@poe-platform/safe-bash 0.1.544 → 0.1.546

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-66VSWIUC.js → chunk-4V3NGZAG.js} +10 -6
  3. package/dist/safe-bash/chunks/{chunk-66VSWIUC.js.map → chunk-4V3NGZAG.js.map} +1 -1
  4. package/dist/safe-bash/chunks/{chunk-ZYS7YCMY.js → chunk-AWP6Z3RR.js} +13 -9
  5. package/dist/safe-bash/chunks/{chunk-ZYS7YCMY.js.map → chunk-AWP6Z3RR.js.map} +1 -1
  6. package/dist/safe-bash/chunks/chunk-BZUQJTOZ.js +322 -0
  7. package/dist/safe-bash/chunks/chunk-BZUQJTOZ.js.map +7 -0
  8. package/dist/safe-bash/chunks/{chunk-EZLQA6ON.js → chunk-DKT746UJ.js} +9 -5
  9. package/dist/safe-bash/chunks/{chunk-EZLQA6ON.js.map → chunk-DKT746UJ.js.map} +1 -1
  10. package/dist/safe-bash/chunks/{chunk-PZMJ4EC3.js → chunk-EUNOVYVT.js} +17 -4
  11. package/dist/safe-bash/chunks/chunk-EUNOVYVT.js.map +7 -0
  12. package/dist/safe-bash/chunks/chunk-EUTSYRNM.js +111 -0
  13. package/dist/safe-bash/chunks/chunk-EUTSYRNM.js.map +7 -0
  14. package/dist/safe-bash/chunks/chunk-F5AOPLRZ.js +355 -0
  15. package/dist/safe-bash/chunks/chunk-F5AOPLRZ.js.map +7 -0
  16. package/dist/safe-bash/chunks/chunk-FDGESHPB.js +224 -0
  17. package/dist/safe-bash/chunks/chunk-FDGESHPB.js.map +7 -0
  18. package/dist/safe-bash/chunks/{chunk-YEJBZLE5.js → chunk-FIY2BMTU.js} +12 -8
  19. package/dist/safe-bash/chunks/{chunk-YEJBZLE5.js.map → chunk-FIY2BMTU.js.map} +1 -1
  20. package/dist/safe-bash/chunks/{chunk-R3QJL5HH.js → chunk-IDJQT32M.js} +12 -8
  21. package/dist/safe-bash/chunks/{chunk-R3QJL5HH.js.map → chunk-IDJQT32M.js.map} +1 -1
  22. package/dist/safe-bash/chunks/chunk-KYU6MXVK.js +58 -0
  23. package/dist/safe-bash/chunks/chunk-KYU6MXVK.js.map +7 -0
  24. package/dist/safe-bash/chunks/{chunk-T5BV7HPD.js → chunk-O7BRWSKX.js} +17 -60
  25. package/dist/safe-bash/chunks/chunk-O7BRWSKX.js.map +7 -0
  26. package/dist/safe-bash/chunks/{chunk-6PSMEBVP.js → chunk-PPFWG34Y.js} +2 -2
  27. package/dist/safe-bash/chunks/{chunk-VNDFKT6F.js → chunk-QX2X5EC5.js} +13 -9
  28. package/dist/safe-bash/chunks/{chunk-VNDFKT6F.js.map → chunk-QX2X5EC5.js.map} +1 -1
  29. package/dist/safe-bash/chunks/chunk-TTTOMUAY.js +33 -0
  30. package/dist/safe-bash/chunks/chunk-TTTOMUAY.js.map +7 -0
  31. package/dist/safe-bash/chunks/{chunk-5VBLSPNM.js → chunk-UO33SQJU.js} +2 -239
  32. package/dist/safe-bash/chunks/chunk-UO33SQJU.js.map +7 -0
  33. package/dist/safe-bash/chunks/{chunk-TPD45VUZ.js → chunk-VY5N6O6I.js} +22 -109
  34. package/dist/safe-bash/chunks/chunk-VY5N6O6I.js.map +7 -0
  35. package/dist/safe-bash/chunks/{chunk-HFEU5SBQ.js → chunk-WISNTI7E.js} +11 -7
  36. package/dist/safe-bash/chunks/{chunk-HFEU5SBQ.js.map → chunk-WISNTI7E.js.map} +1 -1
  37. package/dist/safe-bash/chunks/{chunk-A4UXQKWZ.js → chunk-WJWYJDQE.js} +12 -8
  38. package/dist/safe-bash/chunks/{chunk-A4UXQKWZ.js.map → chunk-WJWYJDQE.js.map} +1 -1
  39. package/dist/safe-bash/chunks/{chunk-AZNI263O.js → chunk-WXUZXY35.js} +3 -3
  40. package/dist/safe-bash/chunks/{chunk-WODV2DVM.js → chunk-X7C3PN2T.js} +11 -7
  41. package/dist/safe-bash/chunks/{chunk-WODV2DVM.js.map → chunk-X7C3PN2T.js.map} +1 -1
  42. package/dist/safe-bash/chunks/{chunk-WF4P7XKI.js → chunk-YFFFBLBC.js} +12 -8
  43. package/dist/safe-bash/chunks/{chunk-WF4P7XKI.js.map → chunk-YFFFBLBC.js.map} +1 -1
  44. package/dist/safe-bash/commands/csplit/index.browser.js +6 -4
  45. package/dist/safe-bash/commands/factor/index.browser.js +5 -3
  46. package/dist/safe-bash/commands/getopt/index.browser.js +5 -3
  47. package/dist/safe-bash/commands/hexdump/index.browser.js +5 -3
  48. package/dist/safe-bash/commands/iconv/index.browser.js +5 -3
  49. package/dist/safe-bash/commands/line-endings/index.browser.js +6 -4
  50. package/dist/safe-bash/commands/llm/command.d.ts +4 -0
  51. package/dist/safe-bash/commands/llm/command.d.ts.map +1 -0
  52. package/dist/safe-bash/commands/llm/command.js +194 -0
  53. package/dist/safe-bash/commands/llm/command.js.map +1 -0
  54. package/dist/safe-bash/commands/llm/index.browser.js +14 -0
  55. package/dist/safe-bash/commands/llm/index.browser.js.map +7 -0
  56. package/dist/safe-bash/commands/llm/index.d.ts +6 -0
  57. package/dist/safe-bash/commands/llm/index.d.ts.map +1 -0
  58. package/dist/safe-bash/commands/llm/index.js +12 -0
  59. package/dist/safe-bash/commands/llm/index.js.map +1 -0
  60. package/dist/safe-bash/commands/llm/mime.d.ts +2 -0
  61. package/dist/safe-bash/commands/llm/mime.d.ts.map +1 -0
  62. package/dist/safe-bash/commands/llm/mime.js +33 -0
  63. package/dist/safe-bash/commands/llm/mime.js.map +1 -0
  64. package/dist/safe-bash/commands/llm/providers/elevenlabs.d.ts +16 -0
  65. package/dist/safe-bash/commands/llm/providers/elevenlabs.d.ts.map +1 -0
  66. package/dist/safe-bash/commands/llm/providers/elevenlabs.js +51 -0
  67. package/dist/safe-bash/commands/llm/providers/elevenlabs.js.map +1 -0
  68. package/dist/safe-bash/commands/llm/providers/index.browser.js +13 -0
  69. package/dist/safe-bash/commands/llm/providers/index.browser.js.map +7 -0
  70. package/dist/safe-bash/commands/llm/providers/index.d.ts +4 -0
  71. package/dist/safe-bash/commands/llm/providers/index.d.ts.map +1 -0
  72. package/dist/safe-bash/commands/llm/providers/index.js +3 -0
  73. package/dist/safe-bash/commands/llm/providers/index.js.map +1 -0
  74. package/dist/safe-bash/commands/llm/providers/openai.d.ts +15 -0
  75. package/dist/safe-bash/commands/llm/providers/openai.d.ts.map +1 -0
  76. package/dist/safe-bash/commands/llm/providers/openai.js +78 -0
  77. package/dist/safe-bash/commands/llm/providers/openai.js.map +1 -0
  78. package/dist/safe-bash/commands/llm/providers/shared.d.ts +34 -0
  79. package/dist/safe-bash/commands/llm/providers/shared.d.ts.map +1 -0
  80. package/dist/safe-bash/commands/llm/providers/shared.js +220 -0
  81. package/dist/safe-bash/commands/llm/providers/shared.js.map +1 -0
  82. package/dist/safe-bash/commands/llm/types.d.ts +28 -0
  83. package/dist/safe-bash/commands/llm/types.d.ts.map +1 -0
  84. package/dist/safe-bash/commands/llm/types.js +2 -0
  85. package/dist/safe-bash/commands/llm/types.js.map +1 -0
  86. package/dist/safe-bash/commands/network/index.browser.js +13 -8
  87. package/dist/safe-bash/commands/pr/index.browser.js +5 -3
  88. package/dist/safe-bash/commands/tsort/index.browser.js +5 -3
  89. package/dist/safe-bash/commands/xml/index.browser.js +7 -4
  90. package/dist/safe-bash/commands/yq/index.browser.js +8 -5
  91. package/dist/safe-bash/contracts/command.d.ts +4 -0
  92. package/dist/safe-bash/contracts/command.d.ts.map +1 -1
  93. package/dist/safe-bash/contracts/command.js.map +1 -1
  94. package/dist/safe-bash/contracts/output.d.ts.map +1 -1
  95. package/dist/safe-bash/contracts/output.js +12 -2
  96. package/dist/safe-bash/contracts/output.js.map +1 -1
  97. package/dist/safe-bash/core.browser.js +1093 -1160
  98. package/dist/safe-bash/core.browser.js.map +4 -4
  99. package/dist/safe-bash/core.d.ts +2 -0
  100. package/dist/safe-bash/core.d.ts.map +1 -1
  101. package/dist/safe-bash/core.js +2 -0
  102. package/dist/safe-bash/core.js.map +1 -1
  103. package/dist/safe-bash/shell/runtime.d.ts.map +1 -1
  104. package/dist/safe-bash/shell/runtime.js +10 -0
  105. package/dist/safe-bash/shell/runtime.js.map +1 -1
  106. package/package.json +14 -2
  107. package/dist/safe-bash/chunks/chunk-5VBLSPNM.js.map +0 -7
  108. package/dist/safe-bash/chunks/chunk-PZMJ4EC3.js.map +0 -7
  109. package/dist/safe-bash/chunks/chunk-T5BV7HPD.js.map +0 -7
  110. package/dist/safe-bash/chunks/chunk-TPD45VUZ.js.map +0 -7
  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-WXUZXY35.js.map} +0 -0
@@ -0,0 +1,322 @@
1
+ import {
2
+ delay,
3
+ withSignal
4
+ } from "./chunk-EUTSYRNM.js";
5
+ import {
6
+ collectBytes,
7
+ readBytes
8
+ } from "./chunk-FDGESHPB.js";
9
+ import {
10
+ init_platform
11
+ } from "./chunk-2KL6W6NB.js";
12
+
13
+ // packages/safe-bash/src/commands/llm/providers/index.ts
14
+ init_platform();
15
+
16
+ // packages/safe-bash/src/commands/llm/providers/openai.ts
17
+ init_platform();
18
+
19
+ // packages/safe-bash/src/commands/llm/providers/shared.ts
20
+ init_platform();
21
+ function providerLimits(input = {}) {
22
+ const limits = { maxRequestBytes: 64 * 1024 * 1024, maxResponseBytes: 64 * 1024 * 1024, maxEventBytes: 1024 * 1024, maxPolls: 120, pollIntervalMs: 1e3, ...input };
23
+ for (const [name, value] of Object.entries(limits)) {
24
+ if (!Number.isSafeInteger(value) || value < (name === "maxPolls" || name === "pollIntervalMs" ? 0 : 1)) throw new RangeError(`Invalid provider limit: ${name}`);
25
+ }
26
+ return Object.freeze(limits);
27
+ }
28
+ function baseUrl(value) {
29
+ const url = new URL(value);
30
+ if (!["https:", "http:"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new TypeError("Invalid provider baseUrl");
31
+ return url.href.endsWith("/") ? url.href.slice(0, -1) : url.href;
32
+ }
33
+ function credential(value) {
34
+ if (typeof value !== "string" || value.length === 0 || [...value].some((char) => char.charCodeAt(0) < 32 || char.charCodeAt(0) === 127)) throw new TypeError("Invalid provider apiKey");
35
+ return value;
36
+ }
37
+ function fields(options, numbers, booleans) {
38
+ const result = /* @__PURE__ */ Object.create(null);
39
+ for (const [key, value] of Object.entries(options)) {
40
+ if (numbers.includes(key)) {
41
+ let numeric;
42
+ try {
43
+ numeric = JSON.parse(value);
44
+ } catch {
45
+ throw new TypeError(`Invalid numeric option: ${key}`);
46
+ }
47
+ if (typeof numeric !== "number" || !Number.isFinite(numeric)) throw new TypeError(`Invalid numeric option: ${key}`);
48
+ result[key] = numeric;
49
+ } else if (booleans.includes(key)) {
50
+ if (value !== "true" && value !== "false") throw new TypeError(`Invalid boolean option: ${key}`);
51
+ result[key] = value === "true";
52
+ } else result[key] = value;
53
+ }
54
+ return result;
55
+ }
56
+ function jsonBody(value, limit) {
57
+ const text = JSON.stringify(value);
58
+ if (text.length > limit) throw new RangeError("Provider request byte limit exceeded");
59
+ const bytes = new TextEncoder().encode(text);
60
+ if (bytes.length > limit) throw new RangeError("Provider request byte limit exceeded");
61
+ return { body: (async function* () {
62
+ yield bytes;
63
+ })(), contentType: "application/json" };
64
+ }
65
+ function toBase64(bytes, limit) {
66
+ if (Math.ceil(bytes.length / 3) * 4 > limit) throw new RangeError("Provider request byte limit exceeded");
67
+ let text = "";
68
+ for (let index = 0; index < bytes.length; index += 8192) text += String.fromCharCode(...bytes.subarray(index, index + 8192));
69
+ return btoa(text);
70
+ }
71
+ function fromBase64(value, limit) {
72
+ if (typeof value !== "string" || value.length % 4 !== 0 || value.length > Math.ceil(limit / 3) * 4) throw new TypeError("Invalid bounded image base64 response");
73
+ const text = atob(value);
74
+ if (btoa(text) !== value || text.length > limit) throw new TypeError("Invalid bounded image base64 response");
75
+ return Uint8Array.from(text, (char) => char.charCodeAt(0));
76
+ }
77
+ function multipart(options, files, limit) {
78
+ const encoder = new TextEncoder();
79
+ const parts = [];
80
+ const entries = Object.entries(options).map(([name, value]) => {
81
+ if (![...name].every((char) => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-".includes(char))) throw new TypeError("Invalid multipart option name");
82
+ return [name, String(value)];
83
+ });
84
+ let size = files.reduce((sum, file) => sum + file.bytes.length, 0);
85
+ for (const [, value] of entries) {
86
+ if (value.length > limit) throw new RangeError("Provider request byte limit exceeded");
87
+ size += encoder.encode(value).length;
88
+ }
89
+ if (size > limit) throw new RangeError("Provider request byte limit exceeded");
90
+ let boundary = "safe-bash-llm-boundary";
91
+ const contains = (bytes, needle) => {
92
+ outer: for (let start = 0; start <= bytes.length - needle.length; start++) {
93
+ for (let index = 0; index < needle.length; index++) if (bytes[start + index] !== needle[index]) continue outer;
94
+ return true;
95
+ }
96
+ return false;
97
+ };
98
+ let attempts = 0;
99
+ while (entries.some(([, value]) => value.includes(boundary)) || files.some((file) => contains(file.bytes, encoder.encode(boundary)))) {
100
+ if (attempts++ === 32) throw new RangeError("Provider multipart boundary collision limit exceeded");
101
+ boundary += "x";
102
+ }
103
+ for (const [name, value] of entries) parts.push(encoder.encode(`--${boundary}\r
104
+ Content-Disposition: form-data; name="${name}"\r
105
+ \r
106
+ ${value}\r
107
+ `));
108
+ for (const [index, file] of files.entries()) {
109
+ if ([...file.mimeType].some((char) => char.charCodeAt(0) < 32 || char.charCodeAt(0) > 126)) throw new TypeError("Invalid attachment MIME type");
110
+ parts.push(encoder.encode(`--${boundary}\r
111
+ Content-Disposition: form-data; name="${file.field}"; filename="attachment-${index}"\r
112
+ Content-Type: ${file.mimeType}\r
113
+ \r
114
+ `), file.bytes, encoder.encode("\r\n"));
115
+ }
116
+ parts.push(encoder.encode(`--${boundary}--\r
117
+ `));
118
+ if (parts.reduce((sum, part) => sum + part.length, 0) > limit) throw new RangeError("Provider request byte limit exceeded");
119
+ return { body: (async function* () {
120
+ yield* parts;
121
+ })(), contentType: `multipart/form-data; boundary=${boundary}` };
122
+ }
123
+ async function* responseBytes(transport, url, headers, signal, limit, payload) {
124
+ signal.throwIfAborted();
125
+ let response;
126
+ let abandoned = false;
127
+ let disposal;
128
+ const dispose = () => {
129
+ disposal ??= Promise.resolve().then(() => response.dispose());
130
+ void disposal.catch(() => {
131
+ });
132
+ return disposal;
133
+ };
134
+ const acquiring = Promise.resolve().then(() => {
135
+ signal.throwIfAborted();
136
+ return transport({ url, method: payload ? "POST" : "GET", headers: payload ? [...headers, ["Content-Type", payload.contentType]] : headers, signal, ...payload ? { body: payload.body } : {} });
137
+ }).then((value) => {
138
+ response = value;
139
+ if (abandoned) {
140
+ void dispose();
141
+ throw signal.reason;
142
+ }
143
+ return value;
144
+ });
145
+ try {
146
+ response = await withSignal(() => acquiring, signal);
147
+ if (response.status < 200 || response.status >= 300) throw new Error(`Provider HTTP ${response.status}`);
148
+ let size = 0;
149
+ for await (const chunk of readBytes(response.body, signal)) {
150
+ size += chunk.length;
151
+ if (size > limit) throw new RangeError("Provider response byte limit exceeded");
152
+ yield chunk;
153
+ }
154
+ } finally {
155
+ abandoned = true;
156
+ if (response) {
157
+ const disposing = dispose();
158
+ if (!signal.aborted) await withSignal(() => disposing, signal);
159
+ }
160
+ }
161
+ }
162
+ async function responseJson(source, limit, signal) {
163
+ const bytes = await collectBytes(source, { maxBytes: limit, signal });
164
+ const value = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
165
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw new TypeError("Invalid provider JSON response");
166
+ return value;
167
+ }
168
+ async function* chatEvents(source, limit, signal) {
169
+ const decoder = new TextDecoder("utf-8", { fatal: true });
170
+ let line = "", data = [], size = 0, afterCR = false, done = false;
171
+ const processLine = () => {
172
+ const value = line;
173
+ line = "";
174
+ if (value === "") {
175
+ const event = data.join("\n");
176
+ data = [];
177
+ size = 0;
178
+ if (!event) return;
179
+ if (event === "[DONE]") {
180
+ done = true;
181
+ return;
182
+ }
183
+ const parsed = JSON.parse(event);
184
+ if (parsed.error) throw new Error("Provider chat error");
185
+ if (!Array.isArray(parsed.choices)) throw new TypeError("Invalid chat event");
186
+ const content = parsed.choices[0]?.delta?.content;
187
+ if (content !== void 0 && content !== null && typeof content !== "string") throw new TypeError("Invalid chat content");
188
+ return typeof content === "string" ? content : void 0;
189
+ }
190
+ if (value.startsWith("data:")) data.push(value.slice(value[5] === " " ? 6 : 5));
191
+ };
192
+ for await (const chunk of readBytes(source, signal)) {
193
+ const text = decoder.decode(chunk, { stream: true });
194
+ for (const char of text) {
195
+ if (afterCR && char === "\n") {
196
+ afterCR = false;
197
+ continue;
198
+ }
199
+ afterCR = char === "\r";
200
+ const codePoint = char.codePointAt(0);
201
+ size += codePoint < 128 ? 1 : codePoint < 2048 ? 2 : codePoint < 65536 ? 3 : 4;
202
+ if (size > limit) throw new RangeError("Provider SSE event byte limit exceeded");
203
+ if (char === "\r" || char === "\n") {
204
+ const output = processLine();
205
+ if (output !== void 0) yield output;
206
+ if (done) return;
207
+ } else line += char;
208
+ }
209
+ }
210
+ decoder.decode();
211
+ throw new Error("Truncated provider chat stream");
212
+ }
213
+
214
+ // packages/safe-bash/src/commands/llm/providers/openai.ts
215
+ function createOpenAiProvider(options) {
216
+ const origin = baseUrl(options.baseUrl ?? "https://api.openai.com/v1");
217
+ const headers = [["Authorization", `Bearer ${credential(options.apiKey)}`]];
218
+ const transport = options.transport;
219
+ const limits = providerLimits(options.limits);
220
+ const models = options.models.map((model) => Object.freeze({ ...model, ...model.aliases ? { aliases: Object.freeze([...model.aliases]) } : {}, ...model.attachmentTypes ? { attachmentTypes: Object.freeze([...model.attachmentTypes]) } : {} }));
221
+ if (typeof transport !== "function") throw new TypeError("Provider transport is required");
222
+ for (const model of models) {
223
+ if (!["chat", "images", "videos"].includes(model.endpoint)) throw new TypeError("Invalid OpenAI endpoint");
224
+ if (model.endpoint === "images" && !["image/png", "image/jpeg", "image/webp"].includes(model.outputType ?? "")) throw new TypeError("Image models require outputType image/png, image/jpeg or image/webp");
225
+ if (model.endpoint === "videos" && model.outputType !== "video/mp4") throw new TypeError("Video models require outputType video/mp4");
226
+ if (model.endpoint === "chat" && model.outputType !== void 0 && !model.outputType.startsWith("text/")) throw new TypeError("Chat models require a text outputType");
227
+ }
228
+ return {
229
+ name: "openai",
230
+ models: Object.freeze(models),
231
+ async *complete(request) {
232
+ request.signal.throwIfAborted();
233
+ const model = models.find((candidate) => candidate.id === request.model);
234
+ if (!model) throw new Error(`Unknown model: ${request.model}`);
235
+ if (request.attachments.some((attachment) => !attachment.mimeType.startsWith("image/"))) throw new TypeError("OpenAI reference endpoints accept only image attachments");
236
+ if (request.attachments.reduce((size, file) => size + file.bytes.length, 0) > limits.maxRequestBytes) throw new RangeError("Provider request byte limit exceeded");
237
+ const send = (path2, payload2) => responseBytes(transport, `${origin}${path2}`, headers, request.signal, limits.maxResponseBytes, payload2);
238
+ if (model.endpoint === "chat") {
239
+ 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;
240
+ const messages = [...request.system === void 0 ? [] : [{ role: "system", content: request.system }], { role: "user", content }];
241
+ 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);
242
+ yield* chatEvents(send("/chat/completions", body), limits.maxEventBytes, request.signal);
243
+ return;
244
+ }
245
+ if (request.system !== void 0) throw new TypeError("System prompts are supported only by chat models");
246
+ if (model.endpoint === "images") {
247
+ const outputFormat = model.outputType === "image/jpeg" ? "jpeg" : model.outputType === "image/webp" ? "webp" : "png";
248
+ if (request.options.output_format !== void 0 && request.options.output_format !== outputFormat) throw new TypeError("output_format conflicts with model outputType");
249
+ const values = { ...fields(request.options, ["n", "output_compression", "partial_images"], ["stream"]), output_format: outputFormat, model: model.id, prompt: request.prompt };
250
+ if (values.stream === true) throw new TypeError("Image event streaming is not supported by this reference provider");
251
+ const payload2 = request.attachments.length ? multipart(values, request.attachments.map((file) => ({ ...file, field: "image[]" })), limits.maxRequestBytes) : jsonBody(values, limits.maxRequestBytes);
252
+ const result = await responseJson(send(request.attachments.length ? "/images/edits" : "/images/generations", payload2), limits.maxResponseBytes, request.signal);
253
+ if (!Array.isArray(result.data) || result.data.length !== 1) throw new TypeError("Expected one generated image");
254
+ yield fromBase64(result.data[0]?.b64_json, limits.maxResponseBytes);
255
+ return;
256
+ }
257
+ if (request.attachments.length > 1) throw new TypeError("Videos accept one input_reference attachment");
258
+ const payload = multipart({ ...request.options, model: model.id, prompt: request.prompt }, request.attachments.map((file) => ({ ...file, field: "input_reference" })), limits.maxRequestBytes);
259
+ let job = await responseJson(send("/videos", payload), limits.maxResponseBytes, request.signal);
260
+ if (typeof job.id !== "string" || !job.id) throw new TypeError("Invalid video job id");
261
+ const path = `/videos/${encodeURIComponent(job.id)}`;
262
+ let polls = 0;
263
+ while (job.status !== "completed") {
264
+ if (job.status === "failed") throw new Error("Provider video generation failed");
265
+ if (job.status !== "queued" && job.status !== "in_progress") throw new TypeError("Invalid video job status");
266
+ if (polls++ >= limits.maxPolls) throw new RangeError("Provider video polling limit exceeded");
267
+ await delay(limits.pollIntervalMs, request.signal);
268
+ job = await responseJson(send(path), limits.maxResponseBytes, request.signal);
269
+ }
270
+ yield* send(`${path}/content`);
271
+ }
272
+ };
273
+ }
274
+
275
+ // packages/safe-bash/src/commands/llm/providers/elevenlabs.ts
276
+ init_platform();
277
+ var audioFormats = { "audio/mpeg": "mp3_44100_128", "audio/wav": "wav_44100", "audio/pcm": "pcm_44100", "audio/ogg": "opus_48000_128", "audio/basic": "ulaw_8000" };
278
+ function createElevenLabsProvider(options) {
279
+ const origin = baseUrl(options.baseUrl ?? "https://api.elevenlabs.io");
280
+ const headers = [["xi-api-key", credential(options.apiKey)]];
281
+ const transport = options.transport;
282
+ const limits = providerLimits(options.limits);
283
+ const models = options.models.map((model) => Object.freeze({ ...model, ...model.aliases ? { aliases: Object.freeze([...model.aliases]) } : {}, ...model.attachmentTypes ? { attachmentTypes: Object.freeze([...model.attachmentTypes]) } : {} }));
284
+ if (typeof transport !== "function") throw new TypeError("Provider transport is required");
285
+ for (const model of models) {
286
+ if (!["tts", "music"].includes(model.endpoint)) throw new TypeError("Invalid ElevenLabs endpoint");
287
+ if (!Object.hasOwn(audioFormats, model.outputType ?? "") || model.endpoint === "music" && model.outputType === "audio/wav") throw new TypeError("Unsupported ElevenLabs model outputType");
288
+ }
289
+ return {
290
+ name: "elevenlabs",
291
+ models: Object.freeze(models),
292
+ async *complete(request) {
293
+ request.signal.throwIfAborted();
294
+ const model = models.find((candidate) => candidate.id === request.model);
295
+ if (!model) throw new Error(`Unknown model: ${request.model}`);
296
+ if (request.attachments.length) throw new TypeError("ElevenLabs reference endpoints do not accept attachments");
297
+ if (request.system !== void 0) throw new TypeError("ElevenLabs reference endpoints do not accept system prompts");
298
+ const format = audioFormats[model.outputType];
299
+ const { output_format: requestedFormat, ...requestOptions } = request.options;
300
+ if (requestedFormat !== void 0 && requestedFormat !== format) throw new TypeError("output_format conflicts with model outputType");
301
+ let path, body;
302
+ if (model.endpoint === "tts") {
303
+ const { voice_id: selectedVoice, ...settings } = requestOptions;
304
+ const voice = selectedVoice ?? model.defaultVoiceId;
305
+ if (!voice) throw new TypeError("ElevenLabs TTS requires voice_id or defaultVoiceId");
306
+ path = `/v1/text-to-speech/${encodeURIComponent(voice)}`;
307
+ body = { text: request.prompt, model_id: model.id, voice_settings: fields(settings, ["stability", "similarity_boost", "style", "speed"], ["use_speaker_boost"]) };
308
+ } else {
309
+ path = "/v1/music";
310
+ body = { ...fields(requestOptions, ["music_length_ms", "seed"], ["force_instrumental", "respect_sections_durations"]), prompt: request.prompt, model_id: model.id };
311
+ if (body.music_length_ms !== void 0 && !Number.isInteger(body.music_length_ms)) throw new TypeError("Invalid music_length_ms: expected integer");
312
+ }
313
+ yield* responseBytes(transport, `${origin}${path}?output_format=${format}`, headers, request.signal, limits.maxResponseBytes, jsonBody(body, limits.maxRequestBytes));
314
+ }
315
+ };
316
+ }
317
+
318
+ export {
319
+ createOpenAiProvider,
320
+ createElevenLabsProvider
321
+ };
322
+ //# sourceMappingURL=chunk-BZUQJTOZ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/commands/llm/providers/index.ts", "../../src/commands/llm/providers/openai.ts", "../../src/commands/llm/providers/shared.ts", "../../src/commands/llm/providers/elevenlabs.ts"],
4
+ "sourcesContent": ["export { createOpenAiProvider, type OpenAiProviderOptions, type OpenAiModel } from \"./openai.js\";\nexport { createElevenLabsProvider, type ElevenLabsProviderOptions, type ElevenLabsModel } from \"./elevenlabs.js\";\nexport type { LlmProviderLimits } from \"./shared.js\";\n", "import type { LlmModel, LlmProvider, LlmRequest } from \"../types.js\";\nimport type { HttpTransport } from \"../../network/types.js\";\nimport { delay } from \"../../network/shared.js\";\nimport { baseUrl, credential, providerLimits, fields, jsonBody, multipart, toBase64, fromBase64, responseBytes, responseJson, chatEvents, type LlmProviderLimits } from \"./shared.js\";\n\nexport interface OpenAiModel extends LlmModel {\n readonly endpoint: \"chat\" | \"images\" | \"videos\";\n}\n\nexport interface OpenAiProviderOptions {\n readonly transport: HttpTransport;\n readonly apiKey: string;\n readonly baseUrl?: string;\n readonly models: readonly OpenAiModel[];\n readonly limits?: Partial<LlmProviderLimits>;\n}\n\nexport function createOpenAiProvider(options: OpenAiProviderOptions): LlmProvider {\n const origin = baseUrl(options.baseUrl ?? \"https://api.openai.com/v1\");\n const headers = [[\"Authorization\", `Bearer ${credential(options.apiKey)}`]] as const;\n const transport = options.transport;\n const limits = providerLimits(options.limits);\n const models = options.models.map(model => Object.freeze({ ...model, ...(model.aliases ? { aliases: Object.freeze([...model.aliases]) } : {}), ...(model.attachmentTypes ? { attachmentTypes: Object.freeze([...model.attachmentTypes]) } : {}) }));\n if (typeof transport !== \"function\") throw new TypeError(\"Provider transport is required\");\n for (const model of models) {\n if (![\"chat\", \"images\", \"videos\"].includes(model.endpoint)) throw new TypeError(\"Invalid OpenAI endpoint\");\n if (model.endpoint === \"images\" && ![\"image/png\", \"image/jpeg\", \"image/webp\"].includes(model.outputType ?? \"\")) throw new TypeError(\"Image models require outputType image/png, image/jpeg or image/webp\");\n if (model.endpoint === \"videos\" && model.outputType !== \"video/mp4\") throw new TypeError(\"Video models require outputType video/mp4\");\n if (model.endpoint === \"chat\" && model.outputType !== undefined && !model.outputType.startsWith(\"text/\")) throw new TypeError(\"Chat models require a text outputType\");\n }\n return {\n name: \"openai\", models: Object.freeze(models),\n async *complete(request: LlmRequest) {\n request.signal.throwIfAborted();\n const model = models.find(candidate => candidate.id === request.model);\n if (!model) throw new Error(`Unknown model: ${request.model}`);\n if (request.attachments.some(attachment => !attachment.mimeType.startsWith(\"image/\"))) throw new TypeError(\"OpenAI reference endpoints accept only image attachments\");\n if (request.attachments.reduce((size, file) => size + file.bytes.length, 0) > limits.maxRequestBytes) throw new RangeError(\"Provider request byte limit exceeded\");\n const send = (path: string, payload?: { body: import(\"../../../contracts/io.js\").ByteSource; contentType: string }) => responseBytes(transport, `${origin}${path}`, headers, request.signal, limits.maxResponseBytes, payload);\n if (model.endpoint === \"chat\") {\n 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;\n const messages = [...(request.system === undefined ? [] : [{ role: \"system\", content: request.system }]), { role: \"user\", content }];\n 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);\n yield* chatEvents(send(\"/chat/completions\", body), limits.maxEventBytes, request.signal);\n return;\n }\n if (request.system !== undefined) throw new TypeError(\"System prompts are supported only by chat models\");\n if (model.endpoint === \"images\") {\n const outputFormat = model.outputType === \"image/jpeg\" ? \"jpeg\" : model.outputType === \"image/webp\" ? \"webp\" : \"png\";\n if (request.options.output_format !== undefined && request.options.output_format !== outputFormat) throw new TypeError(\"output_format conflicts with model outputType\");\n const values: Record<string, unknown> = { ...fields(request.options, [\"n\", \"output_compression\", \"partial_images\"], [\"stream\"]), output_format: outputFormat, model: model.id, prompt: request.prompt };\n if (values.stream === true) throw new TypeError(\"Image event streaming is not supported by this reference provider\");\n const payload = request.attachments.length ? multipart(values, request.attachments.map(file => ({ ...file, field: \"image[]\" })), limits.maxRequestBytes) : jsonBody(values, limits.maxRequestBytes);\n const result = await responseJson(send(request.attachments.length ? \"/images/edits\" : \"/images/generations\", payload), limits.maxResponseBytes, request.signal);\n if (!Array.isArray(result.data) || result.data.length !== 1) throw new TypeError(\"Expected one generated image\");\n yield fromBase64((result.data[0] as { b64_json?: unknown })?.b64_json, limits.maxResponseBytes);\n return;\n }\n if (request.attachments.length > 1) throw new TypeError(\"Videos accept one input_reference attachment\");\n const payload = multipart({ ...request.options, model: model.id, prompt: request.prompt }, request.attachments.map(file => ({ ...file, field: \"input_reference\" })), limits.maxRequestBytes);\n let job = await responseJson(send(\"/videos\", payload), limits.maxResponseBytes, request.signal);\n if (typeof job.id !== \"string\" || !job.id) throw new TypeError(\"Invalid video job id\");\n const path = `/videos/${encodeURIComponent(job.id)}`;\n let polls = 0;\n while (job.status !== \"completed\") {\n if (job.status === \"failed\") throw new Error(\"Provider video generation failed\");\n if (job.status !== \"queued\" && job.status !== \"in_progress\") throw new TypeError(\"Invalid video job status\");\n if (polls++ >= limits.maxPolls) throw new RangeError(\"Provider video polling limit exceeded\");\n await delay(limits.pollIntervalMs, request.signal);\n job = await responseJson(send(path), limits.maxResponseBytes, request.signal);\n }\n yield* send(`${path}/content`);\n },\n };\n}\n", "import { collectBytes, readBytes, type ByteSource } from \"../../../contracts/io.js\";\nimport type { HttpHeaders, HttpResponse, HttpTransport } from \"../../network/types.js\";\nimport { withSignal } from \"../../network/shared.js\";\n\nexport interface LlmProviderLimits {\n readonly maxRequestBytes: number;\n readonly maxResponseBytes: number;\n readonly maxEventBytes: number;\n readonly maxPolls: number;\n readonly pollIntervalMs: number;\n}\n\nexport function providerLimits(input: Partial<LlmProviderLimits> = {}): LlmProviderLimits {\n const limits = { maxRequestBytes: 64 * 1024 * 1024, maxResponseBytes: 64 * 1024 * 1024, maxEventBytes: 1024 * 1024, maxPolls: 120, pollIntervalMs: 1000, ...input };\n for (const [name, value] of Object.entries(limits)) {\n if (!Number.isSafeInteger(value) || value < (name === \"maxPolls\" || name === \"pollIntervalMs\" ? 0 : 1)) throw new RangeError(`Invalid provider limit: ${name}`);\n }\n return Object.freeze(limits);\n}\n\nexport function baseUrl(value: string): string {\n const url = new URL(value);\n if (![\"https:\", \"http:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new TypeError(\"Invalid provider baseUrl\");\n return url.href.endsWith(\"/\") ? url.href.slice(0, -1) : url.href;\n}\n\nexport function credential(value: string): string {\n if (typeof value !== \"string\" || value.length === 0 || [...value].some(char => char.charCodeAt(0) < 32 || char.charCodeAt(0) === 127)) throw new TypeError(\"Invalid provider apiKey\");\n return value;\n}\n\nexport function fields(options: Readonly<Record<string, string>>, numbers: readonly string[], booleans: readonly string[]): Record<string, unknown> {\n const result: Record<string, unknown> = Object.create(null) as Record<string, unknown>;\n for (const [key, value] of Object.entries(options)) {\n if (numbers.includes(key)) {\n let numeric: unknown;\n try { numeric = JSON.parse(value); } catch { throw new TypeError(`Invalid numeric option: ${key}`); }\n if (typeof numeric !== \"number\" || !Number.isFinite(numeric)) throw new TypeError(`Invalid numeric option: ${key}`);\n result[key] = numeric;\n } else if (booleans.includes(key)) {\n if (value !== \"true\" && value !== \"false\") throw new TypeError(`Invalid boolean option: ${key}`);\n result[key] = value === \"true\";\n } else result[key] = value;\n }\n return result;\n}\n\nexport function jsonBody(value: unknown, limit: number): { body: ByteSource; contentType: string } {\n const text = JSON.stringify(value);\n if (text.length > limit) throw new RangeError(\"Provider request byte limit exceeded\");\n const bytes = new TextEncoder().encode(text);\n if (bytes.length > limit) throw new RangeError(\"Provider request byte limit exceeded\");\n return { body: (async function* () { yield bytes; })(), contentType: \"application/json\" };\n}\n\nexport function toBase64(bytes: Uint8Array, limit: number): string {\n if (Math.ceil(bytes.length / 3) * 4 > limit) throw new RangeError(\"Provider request byte limit exceeded\");\n let text = \"\";\n for (let index = 0; index < bytes.length; index += 8192) text += String.fromCharCode(...bytes.subarray(index, index + 8192));\n return btoa(text);\n}\n\nexport function fromBase64(value: unknown, limit: number): Uint8Array {\n if (typeof value !== \"string\" || value.length % 4 !== 0 || value.length > Math.ceil(limit / 3) * 4) throw new TypeError(\"Invalid bounded image base64 response\");\n const text = atob(value);\n if (btoa(text) !== value || text.length > limit) throw new TypeError(\"Invalid bounded image base64 response\");\n return Uint8Array.from(text, char => char.charCodeAt(0));\n}\n\nexport function multipart(options: Record<string, unknown>, files: readonly { field: string; mimeType: string; bytes: Uint8Array }[], limit: number): { body: ByteSource; contentType: string } {\n const encoder = new TextEncoder();\n const parts: Uint8Array[] = [];\n const entries = Object.entries(options).map(([name, value]) => {\n if (![...name].every(char => \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-\".includes(char))) throw new TypeError(\"Invalid multipart option name\");\n return [name, String(value)] as const;\n });\n let size = files.reduce((sum, file) => sum + file.bytes.length, 0);\n for (const [, value] of entries) {\n if (value.length > limit) throw new RangeError(\"Provider request byte limit exceeded\");\n size += encoder.encode(value).length;\n }\n if (size > limit) throw new RangeError(\"Provider request byte limit exceeded\");\n let boundary = \"safe-bash-llm-boundary\";\n const contains = (bytes: Uint8Array, needle: Uint8Array): boolean => {\n outer: for (let start = 0; start <= bytes.length - needle.length; start++) {\n for (let index = 0; index < needle.length; index++) if (bytes[start + index] !== needle[index]) continue outer;\n return true;\n }\n return false;\n };\n let attempts = 0;\n while (entries.some(([, value]) => value.includes(boundary)) || files.some(file => contains(file.bytes, encoder.encode(boundary)))) {\n if (attempts++ === 32) throw new RangeError(\"Provider multipart boundary collision limit exceeded\");\n boundary += \"x\";\n }\n for (const [name, value] of entries) parts.push(encoder.encode(`--${boundary}\\r\\nContent-Disposition: form-data; name=\"${name}\"\\r\\n\\r\\n${value}\\r\\n`));\n for (const [index, file] of files.entries()) {\n if ([...file.mimeType].some(char => char.charCodeAt(0) < 32 || char.charCodeAt(0) > 126)) throw new TypeError(\"Invalid attachment MIME type\");\n parts.push(encoder.encode(`--${boundary}\\r\\nContent-Disposition: form-data; name=\"${file.field}\"; filename=\"attachment-${index}\"\\r\\nContent-Type: ${file.mimeType}\\r\\n\\r\\n`), file.bytes, encoder.encode(\"\\r\\n\"));\n }\n parts.push(encoder.encode(`--${boundary}--\\r\\n`));\n if (parts.reduce((sum, part) => sum + part.length, 0) > limit) throw new RangeError(\"Provider request byte limit exceeded\");\n return { body: (async function* () { yield* parts; })(), contentType: `multipart/form-data; boundary=${boundary}` };\n}\n\nexport async function* responseBytes(transport: HttpTransport, url: string, headers: HttpHeaders, signal: AbortSignal, limit: number, payload?: { body: ByteSource; contentType: string }): AsyncGenerator<Uint8Array> {\n signal.throwIfAborted();\n let response: HttpResponse | undefined;\n let abandoned = false;\n let disposal: Promise<void> | undefined;\n const dispose = (): Promise<void> => {\n disposal ??= Promise.resolve().then(() => response!.dispose());\n void disposal.catch(() => {});\n return disposal;\n };\n const acquiring = Promise.resolve().then(() => {\n signal.throwIfAborted();\n return transport({ url, method: payload ? \"POST\" : \"GET\", headers: payload ? [...headers, [\"Content-Type\", payload.contentType]] : headers, signal, ...(payload ? { body: payload.body } : {}) });\n }).then(value => {\n response = value;\n if (abandoned) { void dispose(); throw signal.reason; }\n return value;\n });\n try {\n response = await withSignal(() => acquiring, signal);\n if (response.status < 200 || response.status >= 300) throw new Error(`Provider HTTP ${response.status}`);\n let size = 0;\n for await (const chunk of readBytes(response.body, signal)) {\n size += chunk.length;\n if (size > limit) throw new RangeError(\"Provider response byte limit exceeded\");\n yield chunk;\n }\n } finally {\n abandoned = true;\n if (response) {\n const disposing = dispose();\n if (!signal.aborted) await withSignal(() => disposing, signal);\n }\n }\n}\n\nexport async function responseJson(source: ByteSource, limit: number, signal: AbortSignal): Promise<Record<string, unknown>> {\n const bytes = await collectBytes(source, { maxBytes: limit, signal });\n const value: unknown = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes));\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new TypeError(\"Invalid provider JSON response\");\n return value as Record<string, unknown>;\n}\n\nexport async function* chatEvents(source: ByteSource, limit: number, signal: AbortSignal): AsyncGenerator<string> {\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n let line = \"\", data: string[] = [], size = 0, afterCR = false, done = false;\n const processLine = (): string | undefined => {\n const value = line; line = \"\";\n if (value === \"\") {\n const event = data.join(\"\\n\"); data = []; size = 0;\n if (!event) return;\n if (event === \"[DONE]\") { done = true; return; }\n const parsed = JSON.parse(event) as { error?: unknown; choices?: { delta?: { content?: unknown } }[] };\n if (parsed.error) throw new Error(\"Provider chat error\");\n if (!Array.isArray(parsed.choices)) throw new TypeError(\"Invalid chat event\");\n const content = parsed.choices[0]?.delta?.content;\n if (content !== undefined && content !== null && typeof content !== \"string\") throw new TypeError(\"Invalid chat content\");\n return typeof content === \"string\" ? content : undefined;\n }\n if (value.startsWith(\"data:\")) data.push(value.slice(value[5] === \" \" ? 6 : 5));\n };\n for await (const chunk of readBytes(source, signal)) {\n const text = decoder.decode(chunk, { stream: true });\n for (const char of text) {\n if (afterCR && char === \"\\n\") { afterCR = false; continue; }\n afterCR = char === \"\\r\";\n const codePoint = char.codePointAt(0)!;\n size += codePoint < 0x80 ? 1 : codePoint < 0x800 ? 2 : codePoint < 0x10000 ? 3 : 4;\n if (size > limit) throw new RangeError(\"Provider SSE event byte limit exceeded\");\n if (char === \"\\r\" || char === \"\\n\") {\n const output = processLine();\n if (output !== undefined) yield output;\n if (done) return;\n } else line += char;\n }\n }\n decoder.decode();\n throw new Error(\"Truncated provider chat stream\");\n}\n", "import type { LlmModel, LlmProvider, LlmRequest } from \"../types.js\";\nimport type { HttpTransport } from \"../../network/types.js\";\nimport { baseUrl, credential, providerLimits, fields, jsonBody, responseBytes, type LlmProviderLimits } from \"./shared.js\";\n\nconst audioFormats: Readonly<Record<string, string>> = { \"audio/mpeg\": \"mp3_44100_128\", \"audio/wav\": \"wav_44100\", \"audio/pcm\": \"pcm_44100\", \"audio/ogg\": \"opus_48000_128\", \"audio/basic\": \"ulaw_8000\" };\n\nexport interface ElevenLabsModel extends LlmModel {\n readonly endpoint: \"tts\" | \"music\";\n readonly defaultVoiceId?: string;\n}\n\nexport interface ElevenLabsProviderOptions {\n readonly transport: HttpTransport;\n readonly apiKey: string;\n readonly baseUrl?: string;\n readonly models: readonly ElevenLabsModel[];\n readonly limits?: Partial<LlmProviderLimits>;\n}\n\nexport function createElevenLabsProvider(options: ElevenLabsProviderOptions): LlmProvider {\n const origin = baseUrl(options.baseUrl ?? \"https://api.elevenlabs.io\");\n const headers = [[\"xi-api-key\", credential(options.apiKey)]] as const;\n const transport = options.transport;\n const limits = providerLimits(options.limits);\n const models = options.models.map(model => Object.freeze({ ...model, ...(model.aliases ? { aliases: Object.freeze([...model.aliases]) } : {}), ...(model.attachmentTypes ? { attachmentTypes: Object.freeze([...model.attachmentTypes]) } : {}) }));\n if (typeof transport !== \"function\") throw new TypeError(\"Provider transport is required\");\n for (const model of models) {\n if (![\"tts\", \"music\"].includes(model.endpoint)) throw new TypeError(\"Invalid ElevenLabs endpoint\");\n if (!Object.hasOwn(audioFormats, model.outputType ?? \"\") || (model.endpoint === \"music\" && model.outputType === \"audio/wav\")) throw new TypeError(\"Unsupported ElevenLabs model outputType\");\n }\n return {\n name: \"elevenlabs\", models: Object.freeze(models),\n async *complete(request: LlmRequest) {\n request.signal.throwIfAborted();\n const model = models.find(candidate => candidate.id === request.model);\n if (!model) throw new Error(`Unknown model: ${request.model}`);\n if (request.attachments.length) throw new TypeError(\"ElevenLabs reference endpoints do not accept attachments\");\n if (request.system !== undefined) throw new TypeError(\"ElevenLabs reference endpoints do not accept system prompts\");\n const format = audioFormats[model.outputType!]!;\n const { output_format: requestedFormat, ...requestOptions } = request.options;\n if (requestedFormat !== undefined && requestedFormat !== format) throw new TypeError(\"output_format conflicts with model outputType\");\n let path: string, body: Record<string, unknown>;\n if (model.endpoint === \"tts\") {\n const { voice_id: selectedVoice, ...settings } = requestOptions;\n const voice = selectedVoice ?? model.defaultVoiceId;\n if (!voice) throw new TypeError(\"ElevenLabs TTS requires voice_id or defaultVoiceId\");\n path = `/v1/text-to-speech/${encodeURIComponent(voice)}`;\n body = { text: request.prompt, model_id: model.id, voice_settings: fields(settings, [\"stability\", \"similarity_boost\", \"style\", \"speed\"], [\"use_speaker_boost\"]) };\n } else {\n path = \"/v1/music\";\n body = { ...fields(requestOptions, [\"music_length_ms\", \"seed\"], [\"force_instrumental\", \"respect_sections_durations\"]), prompt: request.prompt, model_id: model.id };\n if (body.music_length_ms !== undefined && !Number.isInteger(body.music_length_ms)) throw new TypeError(\"Invalid music_length_ms: expected integer\");\n }\n yield* responseBytes(transport, `${origin}${path}?output_format=${format}`, headers, request.signal, limits.maxResponseBytes, jsonBody(body, limits.maxRequestBytes));\n },\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["path", "payload"]
7
+ }
@@ -1,13 +1,17 @@
1
1
  import {
2
2
  createOutputOperation
3
- } from "./chunk-PZMJ4EC3.js";
3
+ } from "./chunk-EUNOVYVT.js";
4
+ import {
5
+ PublicDiagnostic
6
+ } from "./chunk-TTTOMUAY.js";
4
7
  import {
5
- PublicDiagnostic,
6
8
  getCommandArguments,
7
9
  shellValueByteLength,
8
- shellValueBytes,
10
+ shellValueBytes
11
+ } from "./chunk-UO33SQJU.js";
12
+ import {
9
13
  yieldTurn
10
- } from "./chunk-5VBLSPNM.js";
14
+ } from "./chunk-FDGESHPB.js";
11
15
  import {
12
16
  init_platform
13
17
  } from "./chunk-2KL6W6NB.js";
@@ -620,4 +624,4 @@ export {
620
624
  createGetoptCommands,
621
625
  getoptCommands
622
626
  };
623
- //# sourceMappingURL=chunk-EZLQA6ON.js.map
627
+ //# sourceMappingURL=chunk-DKT746UJ.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/commands/getopt/index.ts", "../../src/commands/getopt/command.ts", "../../src/commands/getopt/internal.ts", "../../src/commands/getopt/io.ts", "../../src/commands/getopt/parser.ts"],
4
4
  "sourcesContent": ["import type { CommandDefinition, VirtualShellPlugin } from \"../../contracts/index.js\";\nimport { createGetoptCommand } from \"./command.js\";\nimport type { GetoptCommandsOptions } from \"./internal.js\";\n\nexport { createGetoptCommand } from \"./command.js\";\nexport type { GetoptCommandsOptions, GetoptLimits } from \"./internal.js\";\n\nexport function createGetoptCommands(options: GetoptCommandsOptions = {}): readonly CommandDefinition[] {\n return [createGetoptCommand(options)];\n}\n\nexport function getoptCommands(options: GetoptCommandsOptions = {}): VirtualShellPlugin {\n const commands = createGetoptCommands(options);\n return { name: \"getopt-commands\", setup(host) {\n for (const command of commands) host.commands.register(command, { replace: options.replace ?? false });\n } };\n}\n", "import type { CommandDefinition } from \"../../contracts/index.js\";\nimport { createOutputOperation } from \"../../contracts/output.js\";\nimport { Budget, GetoptError, settings, type GetoptCommandsOptions } from \"./internal.js\";\nimport { Writer } from \"./io.js\";\nimport { Parser, addLongOptions, findShort, type LongOption } from \"./parser.js\";\n\nconst wrapperOptions: readonly LongOption[] = [\n { name: \"options\", argument: 1, code: \"o\" }, { name: \"longoptions\", argument: 1, code: \"l\" },\n { name: \"quiet\", argument: 0, code: \"q\" }, { name: \"quiet-output\", argument: 0, code: \"Q\" },\n { name: \"shell\", argument: 1, code: \"s\" }, { name: \"test\", argument: 0, code: \"T\" },\n { name: \"unquoted\", argument: 0, code: \"u\" }, { name: \"help\", argument: 0, code: \"h\" },\n { name: \"alternative\", argument: 0, code: \"a\" }, { name: \"name\", argument: 1, code: \"n\" },\n { name: \"version\", argument: 0, code: \"V\" },\n];\n\nexport function createGetoptCommand(options: GetoptCommandsOptions = {}): CommandDefinition {\n const limits = settings(options);\n return { name: \"getopt\", description: \"Parse short and long options and emit shell-quoted arguments\", async execute(context) {\n const output = createOutputOperation(context, context.stdout);\n const budget = new Budget(context, limits, output.signal);\n let writer: Writer | undefined;\n let failure: { reason: unknown } | undefined;\n let primary: { reason: unknown } | undefined;\n let exitCode = 0;\n try {\n writer = new Writer(budget, output);\n const args = await budget.arguments();\n const compatible = context.env.GETOPT_COMPATIBLE !== undefined;\n const posix = context.env.POSIXLY_CORRECT !== undefined;\n let specification: string | undefined;\n let parameters = args;\n const longOptions: LongOption[] = [];\n let quote = true, tcsh = false, quiet = false, quietOutput = false, alternative = false;\n let name = \"getopt\";\n let complete = false;\n if (!args.length) {\n if (!compatible) throw new GetoptError(\"missing optstring argument\", 2, true);\n await writer.send([\" --\\n\"]);\n complete = true;\n } else if (compatible || args[0]![0] !== \"-\") {\n let start = 0;\n while (args[0]![start] === \"+\" || args[0]![start] === \"-\") { await budget.step(); start++; }\n specification = args[0]!.slice(start);\n budget.schema(specification.length);\n parameters = args.slice(1);\n quote = false;\n } else {\n const wrapper = new Parser(args, \"+ao:l:n:qQs:TuhV\", wrapperOptions, false, posix, false, \"getopt\", budget, writer);\n for (;;) {\n const parsed = await wrapper.next();\n if (!parsed) break;\n if (parsed.kind === \"error\") { await writer.send([\"Try 'getopt --help' for more information.\\n\"], true); exitCode = 2; complete = true; break; }\n if (parsed.kind === \"operand\") throw new GetoptError(\"unexpected wrapper operand\");\n const option = parsed.kind === \"long\" ? parsed.option.code : parsed.option;\n switch (option) {\n case \"o\": specification = parsed.argument!; budget.schema(specification.length); break;\n case \"l\": await addLongOptions(parsed.argument!, longOptions, budget); break;\n case \"n\": name = parsed.argument!; break;\n case \"a\": alternative = true; break;\n case \"q\": quiet = true; break;\n case \"Q\": quietOutput = true; break;\n case \"u\": quote = false; break;\n case \"s\":\n if (parsed.argument === \"bash\" || parsed.argument === \"sh\") tcsh = false;\n else if (parsed.argument === \"tcsh\" || parsed.argument === \"csh\") tcsh = true;\n else throw new GetoptError(\"unknown shell after -s or --shell argument\", 2, true);\n break;\n case \"T\": exitCode = 4; complete = true; break;\n case \"V\": await writer.send([\"getopt (virtual-bash)\\n\"]); complete = true; break;\n case \"h\":\n await writer.send([\"Usage: getopt [OPTIONS] -o OPTSTRING [--] PARAMETERS...\\nParse short and long options and emit shell-quoted arguments.\\nOptions: -a, --alternative; -l, --longoptions; -n, --name; -o, --options;\\n -q, --quiet; -Q, --quiet-output; -s, --shell; -T, --test;\\n -u, --unquoted; -h, --help; -V, --version\\n\"]);\n complete = true; break;\n }\n if (complete) break;\n }\n if (!complete) {\n if (specification === undefined) {\n if (wrapper.index === args.length) throw new GetoptError(\"missing optstring argument\", 2, true);\n specification = args[wrapper.index++]!;\n budget.schema(specification.length);\n }\n parameters = args.slice(wrapper.index);\n }\n }\n if (!complete) {\n const parser = new Parser(parameters, specification!, longOptions, alternative, posix, quiet, name, budget, writer);\n for (;;) {\n const parsed = await parser.next();\n if (!parsed) break;\n if (parsed.kind === \"error\") { exitCode = 1; continue; }\n if (quietOutput) continue;\n if (parsed.kind === \"operand\") await writer.normalized(parsed.argument ?? \"\", quote, tcsh);\n else if (parsed.kind === \"long\") {\n await writer.send([\" --\", parsed.option.name]);\n if (parsed.option.argument) await writer.normalized(parsed.argument ?? \"\", quote, tcsh);\n } else {\n await writer.send([\" -\", parsed.option]);\n const offset = await findShort(specification!, parsed.option, 0, budget);\n if (offset >= 0 && specification![offset + 1] === \":\") await writer.normalized(parsed.argument ?? \"\", quote, tcsh);\n }\n }\n if (!quietOutput) {\n await writer.send([\" --\"]);\n for (const operand of parser.operands) await writer.normalized(operand, quote, tcsh);\n for (let index = parser.index; index < parameters.length; index++) await writer.normalized(parameters[index]!, quote, tcsh);\n await writer.send([\"\\n\"]);\n }\n }\n } catch (error) {\n primary = { reason: error };\n if (error instanceof GetoptError && !output.signal.aborted && writer) {\n exitCode = error.status;\n try { await writer.send([\"getopt: \", error.message, \"\\n\", error.usage ? \"Try 'getopt --help' for more information.\\n\" : \"\"], true); }\n catch (reporting) { failure = { reason: new AggregateError([error, reporting], \"getopt failure reporting failed\") }; }\n } else failure = { reason: error };\n }\n try { await output.close(); }\n catch (cleanup) {\n const previous = failure ?? primary;\n failure = { reason: previous ? new AggregateError([previous.reason, cleanup], \"getopt execution and cleanup failed\") : cleanup };\n }\n context.signal.throwIfAborted();\n output.signal.throwIfAborted();\n if (failure) throw failure.reason;\n return { exitCode };\n } };\n}\n", "import { getCommandArguments, type CommandContext } from \"../../contracts/index.js\";\nimport { shellValueByteLength, shellValueBytes } from \"../../contracts/value.js\";\nimport { yieldTurn } from \"../../contracts/yield.js\";\nimport { PublicDiagnostic } from \"../../diagnostics.js\";\n\nexport interface GetoptLimits {\n readonly maxArguments: number;\n readonly maxArgumentBytes: number;\n readonly maxInputBytes: number;\n readonly maxSchemaBytes: number;\n readonly maxLongOptions: number;\n readonly maxBufferedBytes: number;\n readonly maxOutputBytes: number;\n readonly maxDiagnosticBytes: number;\n readonly maxWork: number;\n}\n\nexport interface GetoptCommandsOptions {\n readonly replace?: boolean;\n readonly limits?: Partial<GetoptLimits>;\n}\n\nexport function settings(options: GetoptCommandsOptions): GetoptLimits {\n const limits: GetoptLimits = {\n maxArguments: 4096, maxArgumentBytes: 65_536, maxInputBytes: 1_048_576,\n maxSchemaBytes: 65_536, maxLongOptions: 4096, maxBufferedBytes: 4_194_304,\n maxOutputBytes: 8_388_608, maxDiagnosticBytes: 65_536, maxWork: 8_388_608,\n ...options.limits,\n };\n for (const [name, value] of Object.entries(limits)) {\n if (!Number.isSafeInteger(value) || value < 1) throw new RangeError(`Invalid getopt limit: ${name}`);\n }\n return Object.freeze(limits);\n}\n\nexport class GetoptError extends PublicDiagnostic {\n constructor(message: string, readonly status = 3, readonly usage = false) { super(message); }\n}\n\nexport class Budget {\n private work = 0;\n private quantum = 0;\n private retained = 0;\n private diagnosticRetained = 0;\n private schemaBytes = 0;\n private output = 0;\n private diagnostics = 0;\n constructor(readonly context: CommandContext, readonly limits: GetoptLimits, readonly signal: AbortSignal) {}\n check(value: number, maximum: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0 || value > maximum) throw new GetoptError(`${label} limit exceeded`);\n }\n async step(amount = 1, diagnostic = false): Promise<void> {\n this.signal.throwIfAborted();\n if (!diagnostic) { this.check(this.work + amount, this.limits.maxWork, \"work\"); this.work += amount; }\n this.quantum += amount;\n if (this.quantum >= 1024) { this.quantum = 0; await yieldTurn(this.signal); }\n }\n retain(amount: number, diagnostic = false): void {\n if (diagnostic) {\n this.check(this.diagnosticRetained + amount, this.limits.maxDiagnosticBytes, \"diagnostic buffered bytes\");\n this.diagnosticRetained += amount;\n } else {\n this.check(this.retained + amount, this.limits.maxBufferedBytes, \"buffered bytes\");\n this.retained += amount;\n }\n }\n schema(amount: number): void {\n this.check(this.schemaBytes + amount, this.limits.maxSchemaBytes, \"schema bytes\");\n this.schemaBytes += amount;\n }\n room(amount: number, diagnostic = false): void {\n this.check((diagnostic ? this.diagnostics : this.output) + amount,\n diagnostic ? this.limits.maxDiagnosticBytes : this.limits.maxOutputBytes, diagnostic ? \"diagnostic bytes\" : \"output bytes\");\n }\n emitted(amount: number, diagnostic: boolean): void {\n this.room(amount, diagnostic);\n if (diagnostic) this.diagnostics += amount;\n else this.output += amount;\n }\n async arguments(): Promise<string[]> {\n const args = this.context.args;\n this.signal.throwIfAborted();\n this.check(args.length, this.limits.maxArguments, \"argument count\");\n let total = 0;\n for (const argument of args) {\n this.check(argument.length, this.limits.maxArgumentBytes, \"argument bytes\");\n total += argument.length;\n this.check(total, this.limits.maxInputBytes, \"input bytes\");\n for (let offset = 0; offset < argument.length; offset++) {\n await this.step();\n const unit = argument.charCodeAt(offset);\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const next = argument.charCodeAt(++offset);\n if (!(next >= 0xdc00 && next <= 0xdfff)) throw new GetoptError(\"arguments must contain well-formed Unicode\", 2);\n } else if (unit >= 0xdc00 && unit <= 0xdfff) throw new GetoptError(\"arguments must contain well-formed Unicode\", 2);\n }\n }\n const values = this.context.argumentValues === undefined ? args : getCommandArguments(this.context).values;\n total = 0;\n for (const argument of values) {\n await this.step();\n const size = shellValueByteLength(argument);\n this.check(size, this.limits.maxArgumentBytes, \"argument bytes\");\n total += size;\n this.check(total, this.limits.maxInputBytes, \"input bytes\");\n }\n this.retain(total * 8 + args.length * 64 + 256);\n this.signal.throwIfAborted();\n const owned = getCommandArguments(this.context).values;\n const result: string[] = [];\n for (const argument of owned) {\n await this.step();\n const value = shellValueBytes(argument);\n let text = \"\";\n for (let offset = 0; offset < value.length; offset += 256) {\n const end = Math.min(offset + 256, value.length);\n for (let index = offset; index < end; index++) {\n await this.step();\n if (value[index] === 0) throw new GetoptError(\"NUL is not supported in arguments\", 2);\n }\n text += String.fromCharCode(...value.subarray(offset, end));\n }\n result.push(text);\n }\n return result;\n }\n}\n", "import type { OutputOperation } from \"../../contracts/output.js\";\nimport { Budget, GetoptError } from \"./internal.js\";\n\nexport class Writer {\n private readonly pending = new Set<Promise<unknown>>();\n private closing: Promise<void> | undefined;\n constructor(readonly budget: Budget, output: OutputOperation) { output.registerCleanup(() => this.close()); }\n assertOpen(): void {\n this.budget.signal.throwIfAborted();\n if (this.closing) throw new GetoptError(\"command is closed\");\n }\n close(): Promise<void> {\n return this.closing ??= Promise.resolve().then(async () => {\n while (this.pending.size) await Promise.allSettled([...this.pending]);\n });\n }\n private async publish(length: number, diagnostic: boolean, fill: (buffer: Uint8Array) => Promise<void>): Promise<void> {\n this.assertOpen();\n this.budget.emitted(length, diagnostic);\n this.budget.retain(length, diagnostic);\n const pending = Promise.resolve().then(async () => {\n this.assertOpen();\n const buffer = new Uint8Array(length);\n await fill(buffer);\n this.assertOpen();\n const sink = diagnostic ? this.budget.context.stderr : this.budget.context.stdout;\n this.assertOpen();\n const destination = sink.ownedOutput ?? sink;\n this.assertOpen();\n const write = destination.write;\n this.assertOpen();\n await Reflect.apply(write, destination, [buffer]);\n });\n this.pending.add(pending);\n try { await pending; this.assertOpen(); }\n finally { this.pending.delete(pending); this.budget.retain(-length, diagnostic); }\n }\n async send(parts: readonly string[], diagnostic = false): Promise<void> {\n let length = 0;\n for (const part of parts) { await this.budget.step(1, diagnostic); length += part.length; this.budget.room(length, diagnostic); }\n await this.publish(length, diagnostic, async buffer => {\n let offset = 0;\n for (const part of parts) for (let index = 0; index < part.length; index++) {\n await this.budget.step(1, diagnostic);\n buffer[offset++] = part.charCodeAt(index);\n }\n });\n }\n async normalized(value: string, quote: boolean, tcsh: boolean): Promise<void> {\n if (!quote) { await this.send([\" \", value]); return; }\n let length = 3;\n for (let offset = 0; offset < value.length; offset++) {\n await this.budget.step();\n const code = value.charCodeAt(offset);\n length += code === 39 || (tcsh && (code === 33 || code === 9 || code === 11 || code === 12 || code === 13 || code === 32)) ? 4\n : tcsh && (code === 92 || code === 10) ? 2 : 1;\n this.budget.room(length);\n }\n await this.publish(length, false, async buffer => {\n let offset = 0;\n buffer[offset++] = 32;\n buffer[offset++] = 39;\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index);\n await this.budget.step();\n if (code === 39 || (tcsh && (code === 33 || code === 9 || code === 11 || code === 12 || code === 13 || code === 32))) {\n buffer[offset++] = 39; buffer[offset++] = 92; buffer[offset++] = code; buffer[offset++] = 39;\n } else if (tcsh && (code === 92 || code === 10)) {\n buffer[offset++] = 92; buffer[offset++] = code === 10 ? 110 : 92;\n } else buffer[offset++] = code;\n }\n buffer[offset] = 39;\n });\n }\n}\n", "import { Budget, GetoptError } from \"./internal.js\";\nimport type { Writer } from \"./io.js\";\n\nexport interface LongOption { readonly name: string; readonly argument: 0 | 1 | 2; readonly code?: string; }\nexport type ParsedOption =\n | { readonly kind: \"short\"; readonly option: string; readonly argument: string | undefined }\n | { readonly kind: \"long\"; readonly option: LongOption; readonly argument: string | undefined }\n | { readonly kind: \"operand\"; readonly argument: string | undefined }\n | { readonly kind: \"error\" };\n\nexport async function findShort(specification: string, option: string, start: number, budget: Budget): Promise<number> {\n for (let offset = start; offset < specification.length; offset++) {\n await budget.step();\n if (specification[offset] === option) return offset;\n }\n return -1;\n}\n\nexport async function addLongOptions(value: string, options: LongOption[], budget: Budget): Promise<void> {\n budget.schema(value.length);\n let start = 0;\n for (let offset = 0; offset <= value.length; offset++) {\n await budget.step();\n const code = value.charCodeAt(offset);\n if (offset !== value.length && code !== 44 && code !== 32 && code !== 9 && code !== 10) continue;\n if (offset > start) {\n let end = offset;\n let argument: 0 | 1 | 2 = 0;\n if (value[end - 1] === \":\") { argument = 1; end--; if (end > start && value[end - 1] === \":\") { argument = 2; end--; } }\n if (end === start) throw new GetoptError(\"empty long option after -l or --long argument\", 2, true);\n budget.check(options.length + 1, budget.limits.maxLongOptions, \"long option count\");\n budget.retain((end - start) * 2 + 64);\n options.push({ name: value.slice(start, end), argument });\n }\n start = offset + 1;\n }\n}\n\nexport class Parser {\n index = 0;\n private offset = 0;\n private ended = false;\n readonly operands: string[] = [];\n private readonly start: number;\n private readonly order: \"require\" | \"return\" | \"permute\";\n private readonly silent: boolean;\n constructor(readonly args: readonly string[], readonly specification: string, readonly options: readonly LongOption[],\n readonly alternative: boolean, posix: boolean, quiet: boolean, readonly name: string, readonly budget: Budget,\n readonly writer: Writer) {\n this.start = specification[0] === \"+\" || specification[0] === \"-\" ? 1 : 0;\n this.order = specification[0] === \"-\" ? \"return\" : specification[0] === \"+\" || posix ? \"require\" : \"permute\";\n this.silent = quiet || specification[this.start] === \":\";\n }\n private async error(parts: readonly string[]): Promise<ParsedOption> {\n if (!this.silent) await this.writer.send([this.name, ...parts], true);\n return { kind: \"error\" };\n }\n private async long(value: string, prefix: string, fallback: boolean): Promise<ParsedOption | null> {\n let end = 0;\n while (end < value.length && value[end] !== \"=\") { await this.budget.step(); end++; }\n const lease = this.options.length * 64 + 128;\n this.budget.retain(lease);\n try {\n const matches: LongOption[] = [];\n let exact: LongOption | undefined;\n for (const option of this.options) {\n await this.budget.step();\n let matched = option.name.length >= end;\n for (let offset = 0; matched && offset < end; offset++) {\n await this.budget.step();\n if (option.name[offset] !== value[offset]) matched = false;\n }\n if (!matched) continue;\n if (option.name.length === end) { exact = option; break; }\n matches.push(option);\n }\n if (!exact && matches.length > 1) {\n this.index++; this.offset = 0;\n if (!this.silent) {\n const parts = [this.name, \": option '\", prefix, value, \"' is ambiguous; possibilities:\"];\n for (const option of matches) parts.push(\" '\", prefix, option.name, \"'\");\n parts.push(\"\\n\");\n await this.writer.send(parts, true);\n }\n return { kind: \"error\" };\n }\n const option = exact ?? matches[0];\n if (!option) {\n if (fallback && await findShort(this.specification, value[0] ?? \"\", this.start, this.budget) >= 0) return null;\n this.index++; this.offset = 0;\n return await this.error([\": unrecognized option '\", prefix, value, \"'\\n\"]);\n }\n this.index++; this.offset = 0;\n let argument: string | undefined;\n if (end < value.length) {\n if (!option.argument) return await this.error([\": option '\", prefix, option.name, \"' doesn't allow an argument\\n\"]);\n argument = value.slice(end + 1);\n } else if (option.argument === 1) {\n if (this.index === this.args.length) return await this.error([\": option '\", prefix, option.name, \"' requires an argument\\n\"]);\n argument = this.args[this.index++];\n }\n return { kind: \"long\", option, argument };\n } finally { this.budget.retain(-lease); }\n }\n async next(): Promise<ParsedOption | undefined> {\n await this.budget.step();\n if (this.ended) return undefined;\n if (!this.offset) {\n while (this.index < this.args.length) {\n await this.budget.step();\n const argument = this.args[this.index]!;\n if (argument === \"--\") { this.index++; this.ended = true; return undefined; }\n if (argument.length > 1 && argument[0] === \"-\") break;\n if (this.order === \"require\") { this.ended = true; return undefined; }\n this.index++;\n if (this.order === \"return\") return { kind: \"operand\", argument };\n this.budget.retain(8);\n this.operands.push(argument);\n }\n if (this.index === this.args.length) { this.ended = true; return undefined; }\n const argument = this.args[this.index]!;\n if (argument[1] === \"-\") return (await this.long(argument.slice(2), \"--\", false))!;\n if (this.alternative && (argument.length > 2 || await findShort(this.specification, argument[1]!, this.start, this.budget) < 0)) {\n const result = await this.long(argument.slice(1), \"-\", true);\n if (result) return result;\n }\n this.offset = 1;\n }\n const current = this.args[this.index]!;\n const option = current[this.offset++]!;\n if (this.offset === current.length) { this.offset = 0; this.index++; }\n const found = await findShort(this.specification, option, this.start, this.budget);\n if (found < 0 || option === \":\" || option === \";\") return this.error([\": invalid option -- '\", option, \"'\\n\"]);\n if (option === \"W\" && this.specification[found + 1] === \";\") {\n if (!this.offset && this.index === this.args.length) return this.error([\": option requires an argument -- 'W'\\n\"]);\n const value = this.offset ? current.slice(this.offset) : this.args[this.index]!;\n return (await this.long(value, \"-W \", false))!;\n }\n let argument: string | undefined;\n if (this.specification[found + 1] === \":\") {\n if (this.offset) { argument = current.slice(this.offset); this.index++; }\n else if (this.specification[found + 2] !== \":\") {\n if (this.index === this.args.length) return this.error([\": option requires an argument -- '\", option, \"'\\n\"]);\n argument = this.args[this.index++];\n }\n this.offset = 0;\n }\n if (option === \"?\") return { kind: \"error\" };\n if (option === \"\\x01\") return { kind: \"operand\", argument };\n if (option === \"\\xff\") {\n this.budget.retain(-this.operands.length * 8);\n this.operands.length = 0;\n this.ended = true;\n return undefined;\n }\n return { kind: \"short\", option, argument };\n }\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["option", "argument"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  outputFailure,
3
3
  writeBytes
4
- } from "./chunk-5VBLSPNM.js";
4
+ } from "./chunk-FDGESHPB.js";
5
5
  import {
6
6
  init_platform
7
7
  } from "./chunk-2KL6W6NB.js";
@@ -14,6 +14,7 @@ function createOutputOperation(context, destination) {
14
14
  const capability = destination.ownedOutput;
15
15
  const callbacks = [];
16
16
  const children = [];
17
+ const writes = /* @__PURE__ */ new Set();
17
18
  const closedReason = new Error("Output operation is closed");
18
19
  let accepting = true;
19
20
  let drain;
@@ -27,7 +28,7 @@ function createOutputOperation(context, destination) {
27
28
  accepting = false;
28
29
  drain = Promise.resolve().then(async () => {
29
30
  try {
30
- const results = await Promise.allSettled(callbacks.map(async (cleanup) => cleanup()));
31
+ const results = await Promise.allSettled([...writes, ...callbacks.map(async (cleanup) => cleanup())]);
31
32
  const failures = results.filter((result) => result.status === "rejected").map((result) => result.reason);
32
33
  if (failures.length === 1) throw failures[0];
33
34
  if (failures.length) throw new AggregateError(failures, "Output operation cleanup failed");
@@ -79,7 +80,19 @@ function createOutputOperation(context, destination) {
79
80
  ...destination[outputFailure] ? { [outputFailure]: destination[outputFailure] } : {},
80
81
  async write(chunk) {
81
82
  assertOpen();
82
- await writeBytes(capability ?? destination, chunk, signal);
83
+ if (!capability) return writeBytes(destination, chunk, signal);
84
+ let settled;
85
+ const admitted = new Promise((resolve) => {
86
+ settled = resolve;
87
+ });
88
+ writes.add(admitted);
89
+ const pending = writeBytes(capability, chunk);
90
+ const finish = () => {
91
+ writes.delete(admitted);
92
+ settled();
93
+ };
94
+ void pending.then(finish, finish);
95
+ await wait(pending);
83
96
  }
84
97
  },
85
98
  registerCleanup,
@@ -135,4 +148,4 @@ function createOutputOperation(context, destination) {
135
148
  export {
136
149
  createOutputOperation
137
150
  };
138
- //# sourceMappingURL=chunk-PZMJ4EC3.js.map
151
+ //# sourceMappingURL=chunk-EUNOVYVT.js.map