@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,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/commands/line-endings/index.ts", "../../src/commands/line-endings/command.ts", "../../src/commands/line-endings/internal.ts", "../../src/commands/line-endings/io.ts", "../../src/commands/line-endings/stage.ts", "../../src/commands/line-endings/convert.ts"],
4
+ "sourcesContent": ["import type { CommandDefinition, VirtualShellPlugin } from \"../../contracts/index.js\";\nimport { createDos2unixCommand, createUnix2dosCommand } from \"./command.js\";\nimport type { LineEndingCommandsOptions } from \"./internal.js\";\nexport { createDos2unixCommand, createUnix2dosCommand } from \"./command.js\";\nexport type { LineEndingCommandsOptions, LineEndingLimits } from \"./internal.js\";\nexport function createLineEndingCommands(options: LineEndingCommandsOptions = {}): readonly CommandDefinition[] { return [createDos2unixCommand(options), createUnix2dosCommand(options)]; }\nexport function lineEndingCommands(options: LineEndingCommandsOptions = {}): VirtualShellPlugin {\n const commands = createLineEndingCommands(options);\n return { name: \"line-ending-commands\", setup(host) { for (const command of commands) host.commands.register(command, { replace: options.replace ?? false }); } };\n}\n", "import { FsError, outputFailure, type ByteSink, type CommandDefinition } from \"../../contracts/index.js\";\nimport { createOutputOperation } from \"../../contracts/output.js\";\nimport { Budget, LineEndingError, sameIdentity, settings, type ConversionOptions, type Direction, type LineEndingCommandsOptions } from \"./internal.js\";\nimport { Lifecycle, Reader, Writer } from \"./io.js\";\nimport { Files, Stage } from \"./stage.js\";\nimport { convert } from \"./convert.js\";\n\nfunction definition(direction: Direction, options: LineEndingCommandsOptions): CommandDefinition {\n const limits = settings(options);\n return { name: direction, description: \"Convert DOS and Unix line endings in bounded VFS files or streams\", async execute(context) {\n let life: Lifecycle | undefined;\n const caller = context.signal;\n caller.throwIfAborted();\n const stdout = context.stdout;\n caller.throwIfAborted();\n const capability = stdout.ownedOutput;\n caller.throwIfAborted();\n const consumer = capability?.consumerClosed;\n caller.throwIfAborted();\n consumer?.throwIfAborted();\n const failureHandler = stdout[outputFailure];\n caller.throwIfAborted();\n consumer?.throwIfAborted();\n const registerCleanup = context.registerCleanup;\n caller.throwIfAborted();\n consumer?.throwIfAborted();\n const admission = { closed: false };\n const destination = capability ?? stdout;\n const write = async (bytes: Uint8Array): Promise<void> => {\n life!.assertOpen();\n const method = destination.write;\n life!.assertOpen();\n await Reflect.apply(method, destination, [bytes]);\n };\n const captured: ByteSink = {\n write,\n ...(capability ? { ownedOutput: { consumerClosed: consumer!, write } } : {}),\n ...(failureHandler ? { [outputFailure]: failureHandler } : {}),\n };\n const output = createOutputOperation({ signal: caller, ...(registerCleanup ? { registerCleanup(cleanup) {\n caller.throwIfAborted();\n Reflect.apply(registerCleanup, context, [() => { admission.closed = true; return cleanup(); }]);\n } } : {}) }, captured);\n const budget = new Budget(context, limits, output.signal, caller, admission);\n let failure: { reason: unknown } | undefined;\n let primary: { reason: unknown } | undefined;\n let status = 0;\n try {\n life = new Lifecycle(budget, output, captured, caller, admission);\n const active = life;\n const files = new Files(active);\n const args = await budget.arguments();\n const flags: ConversionOptions = { keepBom: direction === \"unix2dos\", addBom: false, keepUtf16: false, assume: \"bytes\", force: false, quiet: false, newline: false, sevenBit: false, keepDate: false, newFile: false };\n const state = { high: 1 };\n const diagnostic = async (text: string) => { await active.diagnostic(`${direction}: ${text}\\n`); };\n const file = async (name: string, destination: string) => {\n budget.file();\n const inputPath = files.path(name);\n const outputPath = files.path(destination);\n const expected = await files.stat(outputPath);\n if (expected?.type === \"symlink\") {\n if (!flags.quiet) await diagnostic(flags.newFile ? `Skipping ${name}, output file ${destination} is a symbolic link.` : `Skipping symbolic link ${name}.`);\n return;\n }\n let input = await files.stat(inputPath);\n if (!input || input.type !== \"file\" && input.type !== \"symlink\") {\n if (!flags.quiet) {\n if (!input) { status = 2; await diagnostic(`${name}: No such file or directory`); }\n await diagnostic(`Skipping ${name}, not a regular file.`);\n }\n return;\n }\n let path = inputPath;\n if (input.type === \"symlink\") {\n path = await files.call(fs => fs.realpath, [path, { signal: budget.signal }]);\n path = files.path(path);\n input = await files.stat(path);\n if (!input || input.type !== \"file\") {\n if (!flags.quiet) await diagnostic(`Skipping symbolic link ${name}, target is not a regular file.`);\n return;\n }\n }\n if (!sameIdentity(input, input) || expected && (expected.type !== \"file\" || !sameIdentity(expected, expected))) throw new LineEndingError(\"file conversion requires stable regular-file identities\");\n const reader = new Reader(active);\n const stage = new Stage(files, outputPath, expected);\n const writer = new Writer(active, bytes => stage.append(bytes));\n let result: Awaited<ReturnType<typeof convert>> | undefined;\n let failed: { reason: unknown } | undefined;\n try {\n await reader.open(path, input);\n let opened = false;\n try { await stage.open(); opened = true; }\n catch (error) {\n if (error instanceof FsError && error.code === \"ENOENT\") {\n if (!flags.quiet) { status = 2; await diagnostic(\"Failed to open temporary output file: No such file or directory\"); await diagnostic(`problems converting file ${name}${flags.newFile ? ` to file ${destination}` : \"\"}`); }\n } else throw error;\n }\n if (opened && await files.stat(outputPath) !== undefined && expected === undefined) throw new LineEndingError(\"destination appeared during acquisition\");\n if (opened) result = await convert(direction, reader, writer, active, flags, state, name, false);\n await reader.close();\n if (result?.kind === \"ok\") {\n await stage.publish(input, flags);\n if (!flags.quiet) {\n const locale = context.env.LC_ALL || context.env.LC_CTYPE || context.env.LANG || \"C\";\n const outFormat = flags.keepUtf16 ? result.encoding : locale === \"C\" || locale === \"POSIX\" ? \"ANSI_X3.4-1968\" : \"UTF-8\";\n const encoding = result.encoding ? `${result.encoding} ` : \"\";\n const target = result.encoding ? `${outFormat} ` : \"\";\n await diagnostic(`converting ${encoding}file ${name} to ${flags.newFile ? `${target}file ${destination} in ` : target}${direction === \"dos2unix\" ? \"Unix\" : \"DOS\"} format...`);\n }\n } else if (result?.kind === \"unicode\") status ||= 1;\n else if (result?.kind === \"bom-error\" && !flags.quiet) await diagnostic(`problems converting file ${name}${flags.newFile ? ` to file ${destination}` : \"\"}`);\n } catch (error) { failed = { reason: error }; }\n try { await reader.close(); await stage.cleanup(); }\n catch (error) { throw failed ? new AggregateError([failed.reason, error], \"line-ending conversion and cleanup failed\") : error; }\n finally { writer.release(); }\n if (failed) throw failed.reason;\n };\n let paired = true, processOptions = true, sawFile = false, stop = false;\n let index = 0;\n for (; index < args.length && !stop; index++) {\n const argument = args[index]!;\n if (processOptions && argument.startsWith(\"-\")) {\n switch (argument) {\n case \"--\": processOptions = false; break;\n case \"-b\": case \"--keep-bom\": flags.keepBom = true; break;\n case \"-r\": case \"--remove-bom\": flags.keepBom = false; flags.addBom = false; break;\n case \"-m\": case \"--add-bom\": flags.addBom = true; break;\n case \"-f\": case \"--force\": flags.force = true; break;\n case \"-s\": case \"--safe\": flags.force = false; break;\n case \"-q\": case \"--quiet\": flags.quiet = true; break;\n case \"-l\": case \"--newline\": flags.newline = true; break;\n case \"-k\": case \"--keepdate\": flags.keepDate = true; break;\n case \"-u\": case \"--keep-utf16\": flags.keepUtf16 = true; break;\n case \"-ul\": case \"--assume-utf16le\": flags.assume = \"le\"; break;\n case \"-ub\": case \"--assume-utf16be\": flags.assume = \"be\"; break;\n case \"-7\": flags.sevenBit = true; flags.assume = \"bytes\"; break;\n case \"-ascii\": flags.assume = \"bytes\"; flags.sevenBit = false; flags.keepUtf16 = false; break;\n case \"-S\": case \"--skip-symlink\": break;\n case \"-o\": case \"--oldfile\": case \"-n\": case \"--newfile\":\n if (!paired) { await diagnostic(`target of file ${args[index - 1]} not specified in new-file mode`); status = 1; sawFile = true; stop = true; }\n flags.newFile = argument === \"-n\" || argument === \"--newfile\";\n break;\n case \"-c\": case \"--convmode\": {\n const mode = args[++index];\n if (mode === undefined) { await diagnostic(`option '${argument}' requires an argument`); status = 1; sawFile = true; stop = true; }\n else if (mode.toLowerCase() === \"ascii\") { flags.sevenBit = false; flags.assume = \"bytes\"; flags.keepUtf16 = false; }\n else if (mode.toLowerCase() === \"7bit\") { flags.sevenBit = true; flags.assume = \"bytes\"; }\n else { await diagnostic(`invalid ${mode} conversion mode specified`); status = 1; sawFile = true; stop = true; }\n break;\n }\n case \"-h\": case \"--help\": {\n const bytes = new TextEncoder().encode(`Usage: ${direction} [options] [file ...] [-n infile outfile ...]\\nVirtual byte/UTF-16 profile: -o -n -b -r -m -f -s -q -k -l -u -ul -ub -7 -ascii --\\n`);\n budget.emitted(bytes.length); await active.stdout(bytes); stop = true; sawFile = true; break;\n }\n default: throw new LineEndingError(`unsupported option in virtual profile: ${argument}`);\n }\n } else {\n sawFile = true;\n if (!flags.newFile) await file(argument, argument);\n else if (paired) paired = false;\n else { await file(args[index - 1]!, argument); paired = true; }\n }\n }\n if (!sawFile) {\n const reader = new Reader(active);\n const writer = new Writer(active, bytes => active.stdout(bytes));\n await reader.open();\n const result = await convert(direction, reader, writer, active, flags, state, \"stdin\", true);\n if (result.kind === \"binary\" && !flags.quiet) status ||= 1;\n }\n if (!paired) { await diagnostic(`target of file ${args[Math.min(index - 1, args.length - 1)]} not specified in new-file mode`); status = 1; }\n } catch (error) {\n primary = { reason: error };\n if (error instanceof LineEndingError && life && !output.signal.aborted) {\n status = error.status;\n try { await life.diagnostic(`${direction}: ${error.message}\\n`); }\n catch (reporting) { failure = { reason: new AggregateError([error, reporting], \"line-ending failure reporting failed\") }; }\n } else failure = { reason: error };\n }\n try { await output.close(); }\n catch (cleanup) { const previous = failure ?? primary; failure = { reason: previous ? new AggregateError([previous.reason, cleanup], \"line-ending execution and cleanup failed\") : cleanup }; }\n caller.throwIfAborted(); output.signal.throwIfAborted();\n if (life?.diagnosticCancellation) throw life.diagnosticCancellation.reason;\n if (failure) throw failure.reason;\n return { exitCode: status };\n } };\n}\nexport function createDos2unixCommand(options: LineEndingCommandsOptions = {}): CommandDefinition { return definition(\"dos2unix\", options); }\nexport function createUnix2dosCommand(options: LineEndingCommandsOptions = {}): CommandDefinition { return definition(\"unix2dos\", options); }\n", "import { getCommandArguments, type CommandContext, type FileStat } 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 LineEndingLimits {\n readonly maxArguments: number;\n readonly maxArgumentBytes: number;\n readonly maxInputBytes: number;\n readonly maxOutputBytes: number;\n readonly maxBufferedBytes: number;\n readonly maxDiagnosticBytes: number;\n readonly maxFiles: number;\n readonly maxWork: number;\n readonly maxEmptyChunks: number;\n readonly maxPathBytes: number;\n readonly maxDepth: number;\n readonly maxTempAttempts: number;\n readonly chunkSize: number;\n}\nexport interface LineEndingCommandsOptions { readonly replace?: boolean; readonly limits?: Partial<LineEndingLimits> }\nexport type Direction = \"dos2unix\" | \"unix2dos\";\nexport interface ConversionOptions {\n keepBom: boolean;\n addBom: boolean;\n keepUtf16: boolean;\n assume: \"bytes\" | \"le\" | \"be\";\n force: boolean;\n quiet: boolean;\n newline: boolean;\n sevenBit: boolean;\n keepDate: boolean;\n newFile: boolean;\n}\nexport function settings(options: LineEndingCommandsOptions): LineEndingLimits {\n const limits: LineEndingLimits = {\n maxArguments: 1024, maxArgumentBytes: 262_144, maxInputBytes: 16_777_216, maxOutputBytes: 33_554_432,\n maxBufferedBytes: 2_097_152, maxDiagnosticBytes: 65_536, maxFiles: 128, maxWork: 134_217_728,\n maxEmptyChunks: 1024, maxPathBytes: 4096, maxDepth: 64, maxTempAttempts: 128, chunkSize: 16_384,\n ...options.limits,\n };\n for (const [name, value] of Object.entries(limits)) if (!Number.isSafeInteger(value) || value < 1) throw new RangeError(`Invalid line-ending limit: ${name}`);\n return Object.freeze(limits);\n}\nexport class LineEndingError extends PublicDiagnostic {\n constructor(message: string, readonly status = 1) { super(message); }\n}\nexport class Budget {\n private work = 0;\n private quantum = 0;\n private memory = 0;\n private input = 0;\n private output = 0;\n private diagnostics = 0;\n private files = 0;\n constructor(readonly context: CommandContext, readonly limits: LineEndingLimits, readonly signal: AbortSignal, private readonly caller: AbortSignal, private readonly admission: { closed: boolean }) {}\n private assertOpen(): void {\n this.signal.throwIfAborted();\n if (this.admission.closed) throw new LineEndingError(\"command is closed\");\n }\n check(value: number, maximum: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0 || value > maximum) throw new LineEndingError(`${label} limit exceeded`);\n }\n retain(amount: number): void { this.check(this.memory + amount, this.limits.maxBufferedBytes, \"buffered bytes\"); this.memory += amount; }\n incoming(amount: number): void { this.check(this.input + amount, this.limits.maxInputBytes, \"input bytes\"); this.input += amount; }\n emitted(amount: number, diagnostic = false): void {\n if (diagnostic) { this.check(this.diagnostics + amount, this.limits.maxDiagnosticBytes, \"diagnostic bytes\"); this.diagnostics += amount; }\n else { this.check(this.output + amount, this.limits.maxOutputBytes, \"output bytes\"); this.output += amount; }\n }\n file(): void { this.check(++this.files, this.limits.maxFiles, \"file count\"); }\n async step(amount = 1): Promise<void> {\n this.assertOpen();\n 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.caller); this.assertOpen(); }\n }\n async arguments(): Promise<string[]> {\n const args = this.context.args;\n this.assertOpen();\n const count = args.length;\n this.assertOpen();\n this.check(count, this.limits.maxArguments, \"argument count\");\n const argumentValues = this.context.argumentValues;\n this.assertOpen();\n const carrier = argumentValues === undefined ? undefined : getCommandArguments({ args, argumentValues });\n const snapshot: string[] = [];\n this.retain(count * 64);\n let total = 0;\n for (let index = 0; index < count; index++) {\n const argument = args[index]!;\n this.assertOpen();\n if (typeof argument !== \"string\") throw new LineEndingError(\"arguments must be strings\");\n this.check(argument.length, this.limits.maxPathBytes, \"argument bytes\");\n total += argument.length;\n this.check(total, this.limits.maxArgumentBytes, \"argument bytes\");\n this.retain(argument.length * 12);\n snapshot.push(argument);\n }\n for (const argument of snapshot) {\n for (let index = 0; index < argument.length; index++) {\n await this.step();\n const unit = argument.charCodeAt(index);\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const next = argument.charCodeAt(++index);\n if (!(next >= 0xdc00 && next <= 0xdfff)) throw new LineEndingError(\"arguments must be valid UTF-8 paths\");\n } else if (unit >= 0xdc00 && unit <= 0xdfff) throw new LineEndingError(\"arguments must be valid UTF-8 paths\");\n }\n }\n const values = (carrier ?? getCommandArguments({ args: snapshot })).values;\n total = 0;\n for (const value of values) {\n const length = shellValueByteLength(value);\n this.check(length, this.limits.maxPathBytes, \"argument bytes\");\n total += length; this.check(total, this.limits.maxArgumentBytes, \"argument bytes\");\n }\n const result: string[] = [];\n for (const value of values) {\n await this.step(shellValueByteLength(value));\n let text: string;\n try { text = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(shellValueBytes(value)); }\n catch { throw new LineEndingError(\"arguments must be valid UTF-8 paths\"); }\n if (text.includes(\"\\0\")) throw new LineEndingError(\"NUL is not supported in paths\");\n result.push(text);\n }\n return result;\n }\n}\nexport function sameIdentity(first: FileStat, second: FileStat): boolean {\n return ((typeof first.identityScope === \"object\" && first.identityScope !== null) || typeof first.identityScope === \"symbol\")\n && first.identityScope === second.identityScope && Number.isSafeInteger(first.dev) && Number.isSafeInteger(first.ino)\n && first.dev! >= 0 && first.ino! >= 0 && first.dev === second.dev && first.ino === second.ino;\n}\nexport function missing(error: unknown): boolean { return typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\"; }\n", "import type { ByteSink, ByteSource, FileStat } from \"../../contracts/index.js\";\nimport type { OutputOperation } from \"../../contracts/output.js\";\nimport { Budget, LineEndingError } from \"./internal.js\";\n\nconst typedArrayPrototype = Object.getPrototypeOf(Uint8Array.prototype) as object;\nconst viewBuffer = Object.getOwnPropertyDescriptor(typedArrayPrototype, \"buffer\")!.get!;\nconst viewOffset = Object.getOwnPropertyDescriptor(typedArrayPrototype, \"byteOffset\")!.get!;\nconst viewLength = Object.getOwnPropertyDescriptor(typedArrayPrototype, \"byteLength\")!.get!;\n\nexport class Lifecycle {\n private readonly pending = new Set<Promise<unknown>>();\n private readonly cleanups: (() => Promise<void>)[] = [];\n private closing: Promise<void> | undefined;\n private diagnosticDestination: { destination: ByteSink; consumer: AbortSignal | undefined } | undefined;\n diagnosticCancellation: { reason: unknown } | undefined;\n constructor(readonly budget: Budget, output: OutputOperation, private readonly captured: ByteSink, private readonly caller: AbortSignal, readonly admission: { closed: boolean }) { output.registerCleanup(() => this.close()); }\n assertOpen(): void { this.budget.signal.throwIfAborted(); if (this.closing || this.admission.closed) throw new LineEndingError(\"command is closed\"); }\n private assertDiagnosticOpen(): void {\n this.caller.throwIfAborted();\n const consumer = this.diagnosticDestination?.consumer;\n if (consumer?.aborted) {\n this.diagnosticCancellation = { reason: consumer.reason };\n consumer.throwIfAborted();\n }\n }\n cleanup(action: () => Promise<void>): void { this.assertOpen(); this.cleanups.push(action); }\n async operation<Value>(action: () => Value | Promise<Value>): Promise<Value> {\n this.assertOpen();\n const pending = Promise.resolve().then(async () => { await this.budget.step(); this.assertOpen(); return action(); });\n this.pending.add(pending);\n try { const value = await pending; this.assertOpen(); return value; }\n finally { this.pending.delete(pending); }\n }\n close(): Promise<void> {\n return this.closing ??= Promise.resolve().then(async () => {\n while (this.pending.size) await Promise.allSettled([...this.pending]);\n const failures: unknown[] = [];\n for (const close of this.cleanups) { try { await close(); } catch (error) { failures.push(error); } }\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures, \"line-ending cleanup failed\");\n });\n }\n async stdout(bytes: Uint8Array): Promise<void> {\n await this.operation(async () => {\n const write = this.captured.write;\n this.assertOpen();\n await Reflect.apply(write, this.captured, [bytes]);\n });\n }\n async diagnostic(text: string): Promise<void> {\n this.assertDiagnosticOpen();\n if (this.closing || this.admission.closed) throw new LineEndingError(\"command is closed\");\n this.budget.check(text.length * 3, this.budget.limits.maxDiagnosticBytes, \"diagnostic buffer bytes\");\n const bytes = new TextEncoder().encode(text);\n this.budget.emitted(bytes.length, true);\n const pending = Promise.resolve().then(async () => {\n this.assertDiagnosticOpen();\n if (!this.diagnosticDestination) {\n const sink = this.budget.context.stderr;\n this.assertDiagnosticOpen();\n const capability = sink.ownedOutput;\n this.assertDiagnosticOpen();\n const consumer = capability?.consumerClosed;\n this.diagnosticDestination = { destination: capability ?? sink, consumer };\n }\n this.assertDiagnosticOpen();\n const destination = this.diagnosticDestination.destination;\n const write = destination.write;\n this.assertDiagnosticOpen();\n await Reflect.apply(write, destination, [bytes]);\n });\n this.pending.add(pending);\n try { await pending; this.assertDiagnosticOpen(); } finally { this.pending.delete(pending); }\n }\n}\n\nexport class Reader {\n private iterator: AsyncIterator<Uint8Array> | undefined;\n private chunk: Uint8Array = new Uint8Array();\n private offset = 0;\n private ended = false;\n private empties = 0;\n private snapshotBytes = 0;\n private closing: Promise<void> | undefined;\n constructor(readonly life: Lifecycle) { life.cleanup(() => this.close()); }\n close(): Promise<void> {\n return this.closing ??= (async () => {\n try {\n if (!this.ended && this.iterator) {\n const iterator = this.iterator;\n const close = iterator.return;\n if (close) await Reflect.apply(close, iterator, []);\n }\n } finally {\n this.iterator = undefined;\n this.life.budget.retain(-this.chunk.length - this.snapshotBytes);\n this.chunk = new Uint8Array(); this.snapshotBytes = 0;\n }\n })();\n }\n async open(path?: string, stat?: FileStat): Promise<void> {\n const { context, signal, limits } = this.life.budget;\n await this.life.operation(async () => {\n let source: ByteSource;\n let acquisitionAborted = false;\n if (path === undefined) source = context.stdin;\n else {\n const fs = context.fs;\n const capabilitiesFor = fs.capabilitiesFor;\n this.life.assertOpen();\n const selected = capabilitiesFor ? await Reflect.apply(capabilitiesFor, fs, [path, { signal }]) : undefined;\n this.life.assertOpen();\n const capabilities = selected ?? fs.capabilities;\n this.life.assertOpen();\n const readStream = fs.readStream;\n this.life.assertOpen();\n const streaming = capabilities.streamingRead !== false;\n this.life.assertOpen();\n if (readStream && streaming) {\n source = Reflect.apply(readStream, fs, [path, { signal, chunkSize: limits.chunkSize }]);\n acquisitionAborted = signal.aborted || this.life.admission.closed;\n } else {\n const maximum = Math.min(limits.maxInputBytes, Math.floor(limits.maxBufferedBytes / 3));\n const size = stat!.size;\n this.life.assertOpen();\n this.life.budget.check(size, maximum, \"buffered input bytes\");\n this.life.budget.retain(maximum);\n this.snapshotBytes = maximum;\n const readFile = fs.readFile;\n this.life.assertOpen();\n const bytes = await Reflect.apply(readFile, fs, [path, { signal, maxBytes: maximum }]);\n this.life.assertOpen();\n if (!(bytes instanceof Uint8Array)) throw new TypeError(\"line-ending input requires bytes\");\n this.life.budget.check(viewLength.call(bytes) as number, maximum, \"buffered input bytes\");\n source = { [Symbol.asyncIterator]: (async function* (this: Reader) { try { yield bytes; } finally { this.life.budget.retain(-this.snapshotBytes); this.snapshotBytes = 0; } }).bind(this) };\n }\n }\n if (!acquisitionAborted) this.life.assertOpen();\n const factory = source[Symbol.asyncIterator];\n if (!acquisitionAborted) this.life.assertOpen();\n this.iterator = Reflect.apply(factory, source, []);\n });\n }\n async get(): Promise<number> {\n await this.life.budget.step();\n this.life.assertOpen();\n while (this.offset === this.chunk.length) {\n if (this.ended) return -1;\n const next = await this.life.operation(() => {\n const iterator = this.iterator!;\n const advance = iterator.next;\n this.life.assertOpen();\n return Reflect.apply(advance, iterator, []);\n });\n this.life.budget.retain(-this.chunk.length); this.chunk = new Uint8Array(); this.offset = 0;\n const done = next.done;\n this.life.assertOpen();\n if (done) { this.ended = true; this.iterator = undefined; return -1; }\n const value = next.value;\n this.life.assertOpen();\n if (!(value instanceof Uint8Array)) throw new TypeError(\"line-ending input requires bytes\");\n const buffer = viewBuffer.call(value) as ArrayBuffer;\n const offset = viewOffset.call(value) as number;\n const length = viewLength.call(value) as number;\n this.life.budget.incoming(length);\n this.life.budget.retain(length);\n try {\n if (viewOffset.call(value) !== offset || viewLength.call(value) < length) throw new TypeError(\"line-ending input extent changed during admission\");\n this.chunk = new Uint8Array(new Uint8Array(buffer, offset, length));\n } catch (error) { this.life.budget.retain(-length); throw error; }\n if (!this.chunk.length) this.life.budget.check(++this.empties, this.life.budget.limits.maxEmptyChunks, \"empty input chunks\");\n }\n return this.chunk[this.offset++]!;\n }\n}\n\nexport class Writer {\n private buffer: Uint8Array;\n private used = 0;\n constructor(readonly life: Lifecycle, readonly publish: (bytes: Uint8Array) => Promise<void>) {\n const size = Math.min(life.budget.limits.chunkSize, life.budget.limits.maxBufferedBytes);\n life.budget.retain(size);\n this.buffer = new Uint8Array(size);\n life.cleanup(async () => { this.release(); });\n }\n release(): void { this.life.budget.retain(-this.buffer.length); this.buffer = new Uint8Array(); this.used = 0; }\n async put(byte: number): Promise<void> {\n await this.life.budget.step();\n this.life.assertOpen();\n this.life.budget.emitted(1);\n this.buffer[this.used++] = byte;\n if (this.used === this.buffer.length) await this.flush();\n }\n async flush(): Promise<void> {\n this.life.assertOpen();\n if (this.used) { await this.publish(this.buffer.subarray(0, this.used)); this.used = 0; }\n }\n}\n", "import { FsError, dirname, resolvePath, type FileStat, type FileSystem } from \"../../contracts/index.js\";\nimport { writeFileOutput } from \"../../contracts/filesystem-output.js\";\nimport { retainFileSystemCleanup } from \"poe-code/safe-fs/core\";\nimport { LineEndingError, missing, sameIdentity, type ConversionOptions } from \"./internal.js\";\nimport { Lifecycle } from \"./io.js\";\n\nexport class Files {\n constructor(readonly life: Lifecycle) {}\n async call<Arguments extends unknown[], Value>(select: (fs: FileSystem) => (...args: Arguments) => Value, args: Arguments): Promise<Awaited<Value>> {\n return await this.life.operation(async () => {\n const fs = this.life.budget.context.fs;\n this.life.assertOpen();\n const method = select(fs);\n this.life.assertOpen();\n return await (Reflect.apply(method, fs, args) as Value);\n });\n }\n async stat(path: string): Promise<FileStat | undefined> {\n try { return await this.call(fs => fs.lstat, [path, { signal: this.life.budget.signal }]); }\n catch (error) { this.life.assertOpen(); if (missing(error)) return undefined; throw error; }\n }\n path(name: string): string {\n const path = resolvePath(this.life.budget.context.cwd, name);\n this.life.budget.check(path.length * 3, this.life.budget.limits.maxPathBytes, \"path bytes\");\n this.life.budget.check(path.split(\"/\").length - 1, this.life.budget.limits.maxDepth, \"path depth\");\n return path;\n }\n async parents(path: string): Promise<{ path: string; stat: FileStat }[]> {\n const parents: { path: string; stat: FileStat }[] = [];\n let current = \"/\";\n for (const component of [\"\", ...dirname(path).split(\"/\").filter(Boolean)]) {\n if (component) current = resolvePath(current, component);\n const stat = await this.stat(current);\n if (!stat) throw new FsError(\"ENOENT\", { path: current });\n if (stat.type !== \"directory\" || !sameIdentity(stat, stat)) throw new LineEndingError(\"output requires stable non-symlink directory identities\");\n parents.push({ path: current, stat });\n }\n return parents;\n }\n}\n\nexport class Stage {\n private temporary = \"\";\n private identity: FileStat | undefined;\n private created = false;\n private parents: { path: string; stat: FileStat }[] = [];\n readonly cleanup: () => Promise<void>;\n constructor(readonly files: Files, readonly path: string, readonly expected: FileStat | undefined) {\n const { life } = files;\n life.assertOpen();\n this.cleanup = retainFileSystemCleanup(life.budget.context.fs, async view => {\n if (!this.created || !this.identity) return;\n try {\n for (const parent of this.parents) {\n const stat = await view.lstat(parent.path);\n if (stat.type !== \"directory\" || !sameIdentity(stat, parent.stat)) return;\n }\n const stat = await view.lstat(this.temporary);\n if (stat.type === \"file\" && sameIdentity(stat, this.identity)) await view.rm(this.temporary);\n } catch (error) { if (!missing(error)) throw error; }\n }, { maxOperations: Math.min(4096, life.budget.limits.maxDepth + 4) });\n life.cleanup(this.cleanup);\n }\n async open(): Promise<void> {\n const { life } = this.files;\n const { signal, limits } = life.budget;\n const capabilities = await life.operation(async () => {\n const fs = life.budget.context.fs;\n const query = fs.capabilitiesFor;\n life.assertOpen();\n const result = query ? await Reflect.apply(query, fs, [this.path, { signal, create: true }]) : fs.capabilities;\n life.assertOpen();\n return result;\n });\n if (capabilities.atomicRename !== true || capabilities.exclusiveCreate !== true || capabilities.permissions !== true || capabilities.append === false || capabilities.remove === false) {\n throw new LineEndingError(\"file conversion requires atomic rename, exclusive create, permissions, append and cleanup capabilities\");\n }\n if (this.expected === undefined && capabilities.atomicRenameNoReplace !== true) {\n throw new LineEndingError(\"new destination requires atomic no-replace rename capability\");\n }\n this.parents = await this.files.parents(this.path);\n for (let attempt = 0; attempt < limits.maxTempAttempts; attempt++) {\n this.temporary = resolvePath(dirname(this.path), `.line-ending-${attempt + 1}`);\n this.files.path(this.temporary);\n if (this.temporary === this.path || await this.files.stat(this.temporary)) continue;\n try {\n await this.files.call(fs => fs.writeFile, [this.temporary, new Uint8Array(), { signal, flag: \"wx\", mode: 0o600 }]);\n } catch (error) {\n life.assertOpen();\n if (typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"EEXIST\") continue;\n throw error;\n }\n this.created = true;\n this.identity = await this.files.stat(this.temporary);\n if (!this.identity || this.identity.type !== \"file\" || !sameIdentity(this.identity, this.identity)) throw new LineEndingError(\"temporary file identity unavailable; unowned path is not removed\");\n return;\n }\n throw new LineEndingError(\"temporary file attempts limit exceeded\");\n }\n private async checked(): Promise<void> {\n for (const parent of this.parents) {\n const stat = await this.files.stat(parent.path);\n if (!stat || stat.type !== \"directory\" || !sameIdentity(stat, parent.stat)) throw new LineEndingError(\"output parent changed before mutation\");\n }\n const stat = await this.files.stat(this.temporary);\n if (!this.identity || !stat || stat.type !== \"file\" || !sameIdentity(stat, this.identity)) throw new LineEndingError(\"temporary file changed before mutation\");\n }\n async append(bytes: Uint8Array): Promise<void> {\n await this.checked();\n const { context, signal } = this.files.life.budget;\n await this.files.life.operation(() => writeFileOutput({ signal, ...(context.registerCleanup ? { registerCleanup: context.registerCleanup } : {}) }, bytes,\n async chunk => { await this.files.call(fs => fs.appendFile, [this.temporary, chunk, { signal }]); }));\n }\n async publish(input: FileStat, options: ConversionOptions): Promise<void> {\n const { signal } = this.files.life.budget;\n await this.checked();\n if (!options.newFile && ((input.uid !== undefined && input.uid !== this.identity!.uid) || (input.gid !== undefined && input.gid !== this.identity!.gid))) {\n throw new LineEndingError(\"filesystem cannot preserve input user/group ownership\");\n }\n await this.files.call(fs => fs.chmod!, [this.temporary, (input.mode & 0o777) & (options.newFile ? ~0o022 : 0o777), { signal }]);\n if (options.keepDate) {\n await this.checked();\n await this.files.call(fs => fs.utimes!, [this.temporary, Math.floor(input.atimeMs / 1000) * 1000, Math.floor(input.mtimeMs / 1000) * 1000, { signal }]);\n }\n await this.checked();\n const current = await this.files.stat(this.path);\n if (current ? !this.expected || current.type !== \"file\" || !sameIdentity(current, this.expected) : this.expected !== undefined) throw new LineEndingError(\"destination changed before publication\");\n await this.files.call(fs => fs.rename, [this.temporary, this.path, { signal, noReplace: this.expected === undefined }]);\n this.created = false;\n }\n}\n", "import type { ConversionOptions, Direction } from \"./internal.js\";\nimport { LineEndingError } from \"./internal.js\";\nimport { Lifecycle, Reader, Writer } from \"./io.js\";\n\nexport interface UnicodeState { high: number }\nexport interface ConversionResult { readonly kind: \"ok\" | \"binary\" | \"unicode\" | \"bom-error\"; readonly encoding: string }\n\nexport async function convert(direction: Direction, reader: Reader, writer: Writer, life: Lifecycle, options: ConversionOptions, state: UnicodeState, name: string, stdio: boolean): Promise<ConversionResult> {\n const prefix: number[] = [];\n let bom: \"bytes\" | \"le\" | \"be\" | \"utf8\" | \"gb\" = \"bytes\";\n const diagnostic = async (message: string) => { await life.diagnostic(`${direction}: ${message}\\n`); };\n const first = await reader.get();\n let bomError = false;\n if (first !== -1) {\n if (first !== 0xff && first !== 0xfe && first !== 0xef && first !== 0x84) prefix.push(first);\n else {\n const second = await reader.get();\n if (second === -1) bomError = true;\n else if (first === 0xff && second === 0xfe) bom = \"le\";\n else if (first === 0xfe && second === 0xff) bom = \"be\";\n else {\n const third = await reader.get();\n if (third === -1) bomError = true;\n else if (first === 0xef && second === 0xbb && third === 0xbf) bom = \"utf8\";\n else {\n prefix.push(first, second, third);\n if (first === 0x84 && second === 0x31 && third === 0x95) {\n const fourth = await reader.get();\n if (fourth === -1) bomError = true;\n else if (fourth === 0x33) { bom = \"gb\"; prefix.length = 0; }\n else prefix.push(fourth);\n }\n }\n }\n }\n }\n if (bomError) {\n if (!options.quiet) await diagnostic(\"can not read from input file: Success\");\n return { kind: \"bom-error\", encoding: \"\" };\n }\n if (bom === \"bytes\") bom = options.assume;\n const wide = bom === \"le\" || bom === \"be\";\n const encoding = wide ? bom === \"le\" ? \"UTF-16LE\" : \"UTF-16BE\" : \"\";\n const env = life.budget.context.env;\n const locale = env.LC_ALL || env.LC_CTYPE || env.LANG || \"C\";\n const utf8 = locale === \"C.UTF-8\" || locale === \"C.utf8\";\n if (wide && !options.keepUtf16 && !utf8 && locale !== \"C\" && locale !== \"POSIX\") throw new LineEndingError(\"UTF-16 conversion supports only C/POSIX and C.UTF-8 locales\");\n if (options.addBom || options.keepBom && bom !== \"bytes\") {\n const bytes = options.keepUtf16 && wide ? bom === \"le\" ? [0xff, 0xfe] : [0xfe, 0xff] : bom === \"gb\" ? [0x84, 0x31, 0x95, 0x33] : [0xef, 0xbb, 0xbf];\n for (const byte of bytes) await writer.put(byte);\n }\n let prefixOffset = 0;\n const byte = async () => prefixOffset < prefix.length ? prefix[prefixOffset++]! : await reader.get();\n let pushed = -1;\n const unit = async (): Promise<number> => {\n if (pushed !== -1) { const value = pushed; pushed = -1; return value; }\n const lead = await byte();\n if (lead === -1 || !wide) return lead;\n const trail = await byte();\n return trail === -1 ? -1 : bom === \"le\" ? lead + trail * 256 : lead * 256 + trail;\n };\n let line = 1;\n const result: { kind: ConversionResult[\"kind\"] } = { kind: \"ok\" };\n const put = async (value: number): Promise<boolean> => {\n if (!wide) { await writer.put(options.sevenBit && bom === \"bytes\" && value >= 128 ? 32 : value); return true; }\n if (options.keepUtf16) {\n await writer.put(bom === \"le\" ? value & 255 : value >> 8);\n await writer.put(bom === \"le\" ? value >> 8 : value & 255);\n return true;\n }\n if (state.high >= 0xd800 && state.high < 0xdc00 && (value < 0xdc00 || value >= 0xe000)) {\n await diagnostic(\"error: Invalid surrogate pair. Missing low surrogate.\"); result.kind = \"unicode\"; return false;\n }\n if (value >= 0xd800 && value < 0xdc00) { state.high = value; return true; }\n if (value >= 0xdc00 && value < 0xe000) {\n if (!(state.high >= 0xd800 && state.high < 0xdc00)) {\n await diagnostic(\"error: Invalid surrogate pair. Missing high surrogate.\"); result.kind = \"unicode\"; return false;\n }\n value = 0x10000 + (state.high & 1023) * 1024 + (value & 1023); state.high = 1;\n }\n if (!utf8 && value > 127) {\n if (!options.quiet) await diagnostic(\"Invalid or incomplete multibyte or wide character\");\n result.kind = \"unicode\"; return false;\n }\n if (value < 128) await writer.put(value);\n else if (value < 2048) { await writer.put(0xc0 | value >> 6); await writer.put(0x80 | value & 63); }\n else if (value < 65536) { await writer.put(0xe0 | value >> 12); await writer.put(0x80 | value >> 6 & 63); await writer.put(0x80 | value & 63); }\n else { await writer.put(0xf0 | value >> 18); await writer.put(0x80 | value >> 12 & 63); await writer.put(0x80 | value >> 6 & 63); await writer.put(0x80 | value & 63); }\n return true;\n };\n let previous = 0;\n for (;;) {\n let current = await unit();\n if (current === -1) break;\n if (!options.force && current < 32 && current !== 9 && current !== 10 && current !== 12 && current !== 13) {\n result.kind = \"binary\";\n if (!options.quiet) await diagnostic(`Binary symbol 0x${current.toString(16).toUpperCase().padStart(wide ? 4 : 2, \"0\")} found at line ${line}`);\n break;\n }\n if (direction === \"dos2unix\") {\n if (current === 13) {\n pushed = await unit();\n if (pushed !== 10) { if (!await put(13)) break; }\n else if (options.newline && !await put(10)) break;\n } else {\n if (current === 10) line++;\n if (!await put(current)) break;\n }\n } else {\n if (current === 10) { if (!await put(13)) break; }\n else if (current === 13) {\n current = await unit();\n if (current === -1) current = 13;\n else { if (!await put(13)) break; previous = 13; }\n }\n if (current === 10) line++;\n if (!await put(current)) break;\n if (options.newline && current === 10 && previous !== 13) {\n if (!await put(13) || !await put(10)) break;\n }\n previous = current;\n }\n }\n if (stdio || result.kind === \"ok\") await writer.flush();\n if (!options.quiet) {\n if (result.kind === \"binary\") await diagnostic(`Skipping binary file ${name}`);\n if (result.kind === \"unicode\") await diagnostic(`Skipping UTF-16 file ${name}, an UTF-16 conversion error occurred on line ${line}.`);\n }\n return { kind: result.kind, encoding };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["stat", "byte", "destination"]
7
+ }
@@ -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,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";
@@ -135,4 +135,4 @@ function createOutputOperation(context, destination) {
135
135
  export {
136
136
  createOutputOperation
137
137
  };
138
- //# sourceMappingURL=chunk-PZMJ4EC3.js.map
138
+ //# sourceMappingURL=chunk-C7Z2SSTY.js.map