@poe-platform/safe-bash 0.1.825 → 0.1.827

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 (155) hide show
  1. package/dist/image-ast/index.js +39 -18
  2. package/dist/pdf-ast/image.js +1 -1
  3. package/dist/pdf-ast/index.js +1 -1
  4. package/dist/pdf-ast/vendor/pdfjs-fonts.mjs +9 -3
  5. package/dist/safe-bash/chunks/{chunk-AGHV53VF.js → chunk-M6XFU6LQ.js} +3 -1
  6. package/dist/safe-bash/chunks/{chunk-363QOIDR.js → chunk-T6FHWSHM.js} +3 -1
  7. package/dist/safe-bash/command-chunks/{chunk-ZPBL7TYJ.js → chunk-2JRHCVMQ.js} +1 -1
  8. package/dist/safe-bash/command-chunks/{chunk-FMGNXOMV.js → chunk-2L3NMRLG.js} +7 -3
  9. package/dist/safe-bash/command-chunks/{chunk-DAQO64WC.js → chunk-2YKOJPIW.js} +1 -1
  10. package/dist/safe-bash/command-chunks/{chunk-EPYJSPOY.js → chunk-3QCW4VQF.js} +12 -8
  11. package/dist/safe-bash/command-chunks/{chunk-YRBFNT5B.js → chunk-3YL2TMLA.js} +10 -1
  12. package/dist/safe-bash/command-chunks/{chunk-5H7ZHP7F.js → chunk-43NDRBKY.js} +1 -1
  13. package/dist/safe-bash/command-chunks/{chunk-BBOYR6LV.js → chunk-46GA576V.js} +3 -3
  14. package/dist/safe-bash/command-chunks/{chunk-WPT2FCHH.js → chunk-4SLPM2WM.js} +1 -1
  15. package/dist/safe-bash/command-chunks/{chunk-7ZQVMPSB.js → chunk-5CAXR62E.js} +1 -1
  16. package/dist/safe-bash/command-chunks/{chunk-3DTHX5UU.js → chunk-66653AEZ.js} +40 -14
  17. package/dist/safe-bash/command-chunks/{chunk-ETFJ4L7F.js → chunk-6OLE6CLV.js} +1 -1
  18. package/dist/safe-bash/command-chunks/{chunk-ZIDESNHW.js → chunk-7M3M6FKC.js} +1 -1
  19. package/dist/safe-bash/command-chunks/{chunk-2KMNVJB7.js → chunk-A7PKUIJT.js} +1 -1
  20. package/dist/safe-bash/command-chunks/{chunk-AVSINNZ6.js → chunk-DEQ47SBQ.js} +5 -5
  21. package/dist/safe-bash/command-chunks/{chunk-EV7A5FNN.js → chunk-FFFRLPXU.js} +2 -2
  22. package/dist/safe-bash/command-chunks/{chunk-4MVQE6CT.js → chunk-FYTBEGSY.js} +1 -1
  23. package/dist/safe-bash/command-chunks/{chunk-LFTGMUAV.js → chunk-HQIZR6EU.js} +192 -489
  24. package/dist/safe-bash/command-chunks/chunk-HS2L7I4N.js +219 -0
  25. package/dist/safe-bash/command-chunks/{chunk-WKS2PAZL.js → chunk-HUGKO4ZE.js} +10 -1
  26. package/dist/safe-bash/command-chunks/chunk-IGXH5W5Z.js +111 -0
  27. package/dist/safe-bash/command-chunks/{chunk-CMJBRGU2.js → chunk-IHQZKUBS.js} +1 -1
  28. package/dist/safe-bash/command-chunks/chunk-JADJ4BMN.js +1519 -0
  29. package/dist/safe-bash/command-chunks/{chunk-5AQAWIYK.js → chunk-JEZC5V3B.js} +4 -0
  30. package/dist/safe-bash/command-chunks/{chunk-YB5TNDY6.js → chunk-K5VJ4NNL.js} +39 -5
  31. package/dist/safe-bash/command-chunks/{chunk-7RQGRFHJ.js → chunk-KHWDEAE4.js} +2 -2
  32. package/dist/safe-bash/command-chunks/chunk-L54KVUSY.js +604 -0
  33. package/dist/safe-bash/command-chunks/{chunk-3NJETNC2.js → chunk-MBXNG6C3.js} +2 -2
  34. package/dist/safe-bash/command-chunks/{chunk-HCPEYQKT.js → chunk-N4SH6QY5.js} +285 -302
  35. package/dist/safe-bash/command-chunks/{chunk-3DID6MQY.js → chunk-OWTQYLID.js} +2 -2
  36. package/dist/safe-bash/command-chunks/{chunk-4EA7WI3L.js → chunk-QOOQD6BD.js} +42 -33
  37. package/dist/safe-bash/command-chunks/{chunk-RQTFK7AV.js → chunk-QZYEI4N6.js} +1 -1
  38. package/dist/safe-bash/command-chunks/{chunk-R3SLT3ZX.js → chunk-R6GON4H3.js} +11 -1
  39. package/dist/safe-bash/command-chunks/{chunk-2GILUQJY.js → chunk-R7ZGDHME.js} +3 -3
  40. package/dist/safe-bash/command-chunks/{chunk-HNEWGADJ.js → chunk-RUXOFW5G.js} +7 -6
  41. package/dist/safe-bash/command-chunks/{chunk-LKAFLJ5L.js → chunk-RWQKX44L.js} +1 -1
  42. package/dist/safe-bash/command-chunks/{chunk-PKH57OIC.js → chunk-SG2KOOD4.js} +2 -2
  43. package/dist/safe-bash/command-chunks/chunk-T4TGJYFV.js +60 -0
  44. package/dist/safe-bash/command-chunks/chunk-TGSNVLFZ.js +105 -0
  45. package/dist/safe-bash/command-chunks/{chunk-NXCJNPL3.js → chunk-UCE77LYV.js} +2 -1
  46. package/dist/safe-bash/command-chunks/{chunk-EWECMOQ5.js → chunk-UIHPHIKI.js} +1 -1
  47. package/dist/safe-bash/command-chunks/{chunk-XSZNL3GV.js → chunk-UJPWPRVB.js} +191 -146
  48. package/dist/safe-bash/command-chunks/{chunk-E5CDHXFA.js → chunk-VOR6YDZC.js} +26 -1
  49. package/dist/safe-bash/command-chunks/chunk-VSNVYOK2.js +30 -0
  50. package/dist/safe-bash/command-chunks/{chunk-4XYGJB24.js → chunk-VTH4AORO.js} +3 -3
  51. package/dist/safe-bash/command-chunks/{chunk-W5LH7D23.js → chunk-WKKJJBJQ.js} +8 -8
  52. package/dist/safe-bash/command-chunks/{chunk-OLXMWQJ5.js → chunk-WRO3PB2M.js} +1 -1
  53. package/dist/safe-bash/command-chunks/{chunk-RUAGHZNF.js → chunk-X5ODTF3E.js} +7 -5
  54. package/dist/safe-bash/command-chunks/{chunk-LH4VBNF6.js → chunk-XGTSP2CP.js} +84 -16
  55. package/dist/safe-bash/command-chunks/{chunk-K576GZED.js → chunk-XTHKXCF2.js} +2 -2
  56. package/dist/safe-bash/command-chunks/{chunk-J3VS55K4.js → chunk-YHRESVJ7.js} +9 -3
  57. package/dist/safe-bash/command-chunks/{chunk-UWIDPTOB.js → chunk-YSCKOUQP.js} +1 -1
  58. package/dist/safe-bash/command-chunks/{chunk-UYNJF5QN.js → chunk-ZALAWNOE.js} +76 -122
  59. package/dist/safe-bash/command-chunks/{chunk-OT75C5YS.js → chunk-ZYXKW2K7.js} +1 -1
  60. package/dist/safe-bash/command-chunks/{pdf-renderer-346WYKSZ.js → pdf-renderer-5QWOVFA4.js} +1 -1
  61. package/dist/safe-bash/command-chunks/{prompt-tool-debug-3POFNRYP.js → prompt-tool-debug-G7ATE7D5.js} +6 -4
  62. package/dist/safe-bash/commands/llm/index.browser.js +5 -1
  63. package/dist/safe-bash/commands/llm/index.js +1 -1
  64. package/dist/safe-bash/commands/python/executor.browser.js +3 -1
  65. package/dist/safe-bash/commands/python/executor.js +1 -1
  66. package/dist/safe-bash/commands/python/index.browser.js +5 -1
  67. package/dist/safe-bash/commands/python/index.js +1 -1
  68. package/dist/safe-bash/core.browser.js +2 -2
  69. package/dist/safe-bash/full-core.browser.js +10 -2
  70. package/dist/safe-bash-command-awk/awk-runtime.js +2 -2
  71. package/dist/safe-bash-command-awk/awk-syntax.js +1 -1
  72. package/dist/safe-bash-command-awk/awk.js +3 -3
  73. package/dist/safe-bash-command-awk/index.js +3 -3
  74. package/dist/safe-bash-command-gpg/index.js +11 -3
  75. package/dist/safe-bash-command-imagemagick/index.js +2 -2
  76. package/dist/safe-bash-command-llm/collections.js +6 -4
  77. package/dist/safe-bash-command-llm/command.js +4 -4
  78. package/dist/safe-bash-command-llm/import-json-document.d.ts +9 -2
  79. package/dist/safe-bash-command-llm/index.d.ts +2 -1
  80. package/dist/safe-bash-command-llm/index.js +10 -4
  81. package/dist/safe-bash-command-llm/loader-provider.d.ts +5 -0
  82. package/dist/safe-bash-command-mcp/index.js +10 -13
  83. package/dist/safe-bash-command-pdftoppm/index.js +2 -2
  84. package/dist/safe-bash-command-playwright-cli/index.js +2 -2
  85. package/dist/safe-bash-command-playwright-cli/playwright/ability-execution.d.ts +1 -0
  86. package/dist/safe-bash-command-playwright-cli/playwright/ability-execution.js +1 -1
  87. package/dist/safe-bash-command-playwright-cli/playwright/controller.d.ts +2 -0
  88. package/dist/safe-bash-command-playwright-cli/playwright/controller.js +2 -2
  89. package/dist/safe-bash-command-playwright-cli/playwright/index.js +2 -2
  90. package/dist/safe-bash-command-python/build-backend.d.ts +2 -0
  91. package/dist/safe-bash-command-python/cache.d.ts +1 -1
  92. package/dist/safe-bash-command-python/executor.d.ts +5 -2
  93. package/dist/safe-bash-command-python/executor.js +11 -6
  94. package/dist/safe-bash-command-python/host-capabilities.js +1 -1
  95. package/dist/safe-bash-command-python/index.js +11 -6
  96. package/dist/safe-bash-command-python/jspi.js +5 -3
  97. package/dist/safe-bash-command-python/manifest-file.d.ts +44 -0
  98. package/dist/safe-bash-command-python/manifest.d.ts +45 -0
  99. package/dist/safe-bash-command-python/provisioning.d.ts +20 -1
  100. package/dist/safe-bash-command-python/provisioning.js +3 -2
  101. package/dist/safe-bash-command-python/reply.js +7 -11
  102. package/dist/safe-bash-command-python/source-archive.js +2 -2
  103. package/dist/safe-bash-command-python/source-zip.js +2 -2
  104. package/dist/safe-bash-command-python/worker.js +34 -21
  105. package/dist/safe-bash-command-sqlite3/engine.d.ts +4 -0
  106. package/dist/safe-bash-command-sqlite3/index.js +174 -18
  107. package/dist/safe-bash-command-svgo/index.js +1 -1
  108. package/dist/safe-bash-command-tar/create.js +3 -3
  109. package/dist/safe-bash-command-tar/extract.js +3 -3
  110. package/dist/safe-bash-command-tar/index.js +5 -5
  111. package/dist/safe-bash-command-tar/modes.js +5 -5
  112. package/dist/safe-bash-command-tar/options.d.ts +1 -1
  113. package/dist/safe-bash-command-tar/options.js +1 -1
  114. package/dist/safe-bash-command-tar/stream.js +1 -1
  115. package/dist/safe-bash-command-wkhtmltopdf/index.js +1 -1
  116. package/dist/safe-bash-command-xan/argv.js +1 -1
  117. package/dist/safe-bash-command-xan/commands.js +3 -3
  118. package/dist/safe-bash-command-xan/index.js +3 -3
  119. package/dist/safe-bash-command-xan/io.js +2 -2
  120. package/dist/safe-bash-compression-engine/bounded-codec.js +3 -3
  121. package/dist/safe-bash-compression-engine/codec-loader.js +2 -2
  122. package/dist/safe-bash-compression-engine/files.js +6 -6
  123. package/dist/safe-bash-compression-engine/index.js +5 -5
  124. package/dist/safe-bash-compression-engine/operand.js +6 -6
  125. package/dist/safe-bash-compression-engine/options.js +1 -1
  126. package/dist/safe-bash-compression-engine/stream.js +5 -5
  127. package/dist/safe-bash-compression-engine/zstd-decode.js +4 -4
  128. package/dist/safe-bash-contracts/filesystem-descriptor.js +1 -1
  129. package/dist/safe-bash-contracts/filesystem-output.js +1 -1
  130. package/dist/safe-bash-csv-engine/index.js +6 -6
  131. package/dist/safe-bash-csv-engine/python-codec-aliases.js +1 -1
  132. package/dist/safe-bash-csv-engine/python-codepages.js +3 -3
  133. package/dist/safe-bash-csv-engine/python-file-codepages.js +2 -2
  134. package/dist/safe-bash-csv-engine/python-utf16.js +4 -4
  135. package/dist/safe-bash-csv-engine/text-decoder.js +6 -6
  136. package/dist/safe-bash-graphviz-engine/index.js +1 -1
  137. package/dist/safe-bash-pager-engine/index.js +2 -2
  138. package/dist/safe-bash-query-engine/capture.js +3 -3
  139. package/dist/safe-bash-query-engine/delpaths.js +3 -3
  140. package/dist/safe-bash-query-engine/formats.js +2 -2
  141. package/dist/safe-bash-query-engine/index.js +10 -10
  142. package/dist/safe-bash-query-engine/indices.js +3 -3
  143. package/dist/safe-bash-query-engine/input.d.ts +3 -3
  144. package/dist/safe-bash-query-engine/input.js +1 -1
  145. package/dist/safe-bash-query-engine/interpreter.js +9 -9
  146. package/dist/safe-bash-query-engine/query-core.js +10 -10
  147. package/dist/safe-bash-query-engine/regex.js +4 -4
  148. package/dist/safe-bash-query-engine/splits.js +5 -5
  149. package/dist/safe-bash-query-engine/values.js +2 -2
  150. package/package.json +2 -2
  151. package/dist/safe-bash/command-chunks/chunk-OOYVZAWL.js +0 -90
  152. package/dist/safe-bash/command-chunks/chunk-RZOHZGEZ.js +0 -772
  153. package/dist/safe-bash/command-chunks/chunk-WIUEM7HP.js +0 -58
  154. package/dist/safe-bash/command-chunks/chunk-WY6THI6J.js +0 -673
  155. package/dist/safe-bash/command-chunks/chunk-ZERCTWUI.js +0 -467
@@ -3791,6 +3791,21 @@ var EntropyWindow = class {
3791
3791
  let page = await this.cache.page(this, offset);
3792
3792
  page.bytes[offset % 4096] = value, page.dirty = !0;
3793
3793
  }
3794
+ /** Own bounded spans; never retain a borrowed backing page across cache I/O. */
3795
+ async read(offset, length) {
3796
+ let bytes = new Uint8Array(Number.isInteger(offset) && offset >= 0 ? Math.max(0, Math.min(length, this.length - offset)) : 0);
3797
+ for (let used = 0; used < bytes.length; ) {
3798
+ let page = await this.cache.page(this, offset + used), local = (offset + used) % 4096, count = Math.min(bytes.length - used, page.bytes.length - local);
3799
+ bytes.set(page.bytes.subarray(local, local + count), used), used += count;
3800
+ }
3801
+ return bytes;
3802
+ }
3803
+ async write(offset, bytes) {
3804
+ for (let used = 0; used < bytes.length; ) {
3805
+ let page = await this.cache.page(this, offset + used), local = (offset + used) % 4096, count = Math.min(bytes.length - used, page.bytes.length - local);
3806
+ page.bytes.set(bytes.subarray(used, used + count), local), page.dirty = !0, used += count;
3807
+ }
3808
+ }
3794
3809
  async coefficients(offset) {
3795
3810
  let block = new Int16Array(Math.max(0, Math.min(64, (this.length - offset) / 2)));
3796
3811
  for (let i = 0; i < block.length; i++)
@@ -3942,8 +3957,7 @@ async function decodeJpegToStorage(source, storage, signal, options) {
3942
3957
  let stride = comp.blocksX * blockStep, dst = useStripDecode ? comp.stripPixels : comp.pixels, baseRow = (useStripDecode ? stripVy : by) * blockStep, baseCol = bx * blockStep;
3943
3958
  for (let y = 0; y < blockStep; y++) {
3944
3959
  let dstOff = (baseRow + y) * stride + baseCol, srcOff = y * blockStep;
3945
- for (let x = 0; x < blockStep; x++)
3946
- await dst.set(dstOff + x, blockOut[srcOff + x]);
3960
+ await dst.write(dstOff, blockOut.subarray(srcOff, srcOff + blockStep));
3947
3961
  }
3948
3962
  }, mcuCounter = 0, restartCounter = 0, consumeRestart = async () => {
3949
3963
  let scanPos = scan.position;
@@ -3988,24 +4002,31 @@ async function decodeJpegToStorage(source, storage, signal, options) {
3988
4002
  mcuCounter++;
3989
4003
  }
3990
4004
  if (useStripDecode && outRgba) {
3991
- let yStart = my * mcuRowH, yEnd = Math.min(outHeight, yStart + mcuRowH), c0 = components[0], s0 = c0.blocksX * blockStep;
3992
- if (components.length === 1) {
3993
- let p0 = c0.stripPixels;
3994
- for (let y = yStart; y < yEnd; y++) {
3995
- let rowIn = (y - yStart) * s0, outIdx = y * outWidth * 4;
3996
- for (let x = 0; x < outWidth; x++) {
3997
- let g = await p0.at(rowIn + x);
3998
- await outRgba.set(outIdx, g), await outRgba.set(outIdx + 1, g), await outRgba.set(outIdx + 2, g), await outRgba.set(outIdx + 3, 255), outIdx += 4;
4005
+ let yStart = my * mcuRowH, yEnd = Math.min(outHeight, yStart + mcuRowH), row = new Uint8Array(4096), count = components.length === 1 ? 1 : components.length === 4 ? 4 : components.length >= 3 ? 3 : 0, work = 0;
4006
+ for (let y = yStart; y < yEnd; y++) {
4007
+ let ly = y - yStart;
4008
+ for (let xStart = 0; xStart < outWidth; xStart += 1024) {
4009
+ let xEnd = Math.min(outWidth, xStart + 1024), planes = [];
4010
+ for (let plane = 0; plane < count; plane++) {
4011
+ let comp = components[plane], start = comp.h === maxH ? xStart : Math.floor(xStart * comp.h / maxH), end = comp.h === maxH ? xEnd - 1 : Math.floor((xEnd - 1) * comp.h / maxH), rowIndex = comp.v === maxV ? ly : Math.floor(ly * comp.v / maxV);
4012
+ planes.push({ bytes: await comp.stripPixels.read(rowIndex * comp.blocksX * blockStep + start, end - start + 1), start, h: comp.h });
3999
4013
  }
4000
- }
4001
- } else if (components.length >= 3) {
4002
- let c1 = components[1], c2 = components[2], pY = c0.stripPixels, pCb = c1.stripPixels, pCr = c2.stripPixels, sY = s0, sCb = c1.blocksX * blockStep, sCr = c2.blocksX * blockStep, hY = c0.h, vY = c0.v, hCb = c1.h, vCb = c1.v, hCr = c2.h, vCr = c2.v, hasK = components.length === 4, c3 = hasK ? components[3] : void 0, pK = c3?.stripPixels, sK = c3 ? c3.blocksX * blockStep : 0;
4003
- for (let y = yStart; y < yEnd; y++) {
4004
- let ly = y - yStart, yRow = (vY === maxV ? ly : Math.floor(ly * vY / maxV)) * sY, cbRow = (vCb === maxV ? ly : Math.floor(ly * vCb / maxV)) * sCb, crRow = (vCr === maxV ? ly : Math.floor(ly * vCr / maxV)) * sCr, kRow = c3 ? (c3.v === maxV ? ly : Math.floor(ly * c3.v / maxV)) * sK : 0, outIdx = y * outWidth * 4;
4005
- for (let x = 0; x < outWidth; x++) {
4006
- let yVal = await pY.at(yRow + (hY === maxH ? x : Math.floor(x * hY / maxH))), cbVal = await pCb.at(cbRow + (hCb === maxH ? x : Math.floor(x * hCb / maxH))) - 128, crVal = await pCr.at(crRow + (hCr === maxH ? x : Math.floor(x * hCr / maxH))) - 128, kVal = hasK && pK && c3 ? await pK.at(kRow + (c3.h === maxH ? x : Math.floor(x * c3.h / maxH))) : void 0, rgb = jpegColor(yVal, cbVal, crVal, kVal, !0);
4007
- await outRgba.set(outIdx, rgb & 255), await outRgba.set(outIdx + 1, rgb >>> 8 & 255), await outRgba.set(outIdx + 2, rgb >>> 16), await outRgba.set(outIdx + 3, 255), outIdx += 4;
4014
+ let sample = (plane, x) => {
4015
+ let entry = planes[plane];
4016
+ return entry.bytes[(entry.h === maxH ? x : Math.floor(x * entry.h / maxH)) - entry.start] ?? NaN;
4017
+ };
4018
+ for (let x = xStart; x < xEnd; x++) {
4019
+ let at = (x - xStart) * 4;
4020
+ if (components.length === 1) {
4021
+ let g = sample(0, x);
4022
+ row[at] = g, row[at + 1] = g, row[at + 2] = g;
4023
+ } else if (components.length >= 3) {
4024
+ let rgb = jpegColor(sample(0, x), sample(1, x) - 128, sample(2, x) - 128, components.length === 4 ? sample(3, x) : void 0, !0);
4025
+ row[at] = rgb & 255, row[at + 1] = rgb >>> 8 & 255, row[at + 2] = rgb >>> 16;
4026
+ }
4027
+ row[at + 3] = 255;
4008
4028
  }
4029
+ (components.length === 1 || components.length >= 3) && await outRgba.write((y * outWidth + xStart) * 4, row.subarray(0, (xEnd - xStart) * 4)), work += xEnd - xStart, work >= 16384 && (await defaultRuntime.yieldTurn(signal), work = 0);
4009
4030
  }
4010
4031
  }
4011
4032
  }
@@ -5,7 +5,7 @@ import {
5
5
  PdfRetainedReader,
6
6
  renderPdfPageToPng,
7
7
  renderRetainedPagePixels
8
- } from "../safe-bash/command-chunks/chunk-J3VS55K4.js";
8
+ } from "../safe-bash/command-chunks/chunk-YHRESVJ7.js";
9
9
  import "../safe-bash/command-chunks/chunk-E6SK3OU2.js";
10
10
  import "../safe-bash/command-chunks/chunk-NUGQQDGE.js";
11
11
  import "../safe-bash/command-chunks/chunk-65DS4IOB.js";
@@ -257,7 +257,7 @@ import {
257
257
  transformNodeStringsAndStreamsSteps,
258
258
  transformPathSegment,
259
259
  transformPoint
260
- } from "../safe-bash/command-chunks/chunk-J3VS55K4.js";
260
+ } from "../safe-bash/command-chunks/chunk-YHRESVJ7.js";
261
261
  import "../safe-bash/command-chunks/chunk-E6SK3OU2.js";
262
262
  import "../safe-bash/command-chunks/chunk-NUGQQDGE.js";
263
263
  import "../safe-bash/command-chunks/chunk-65DS4IOB.js";
@@ -10733,11 +10733,13 @@ var Commands = class {
10733
10733
  this.onAllocation = onAllocation;
10734
10734
  }
10735
10735
  cmds = [];
10736
+ hasPoints = false;
10736
10737
  transformStack = [];
10737
10738
  currentTransform = [1, 0, 0, 1, 0, 0];
10738
10739
  add(cmd, args) {
10739
10740
  this.onAllocation?.(64 + (args?.length ?? 0) * 16);
10740
10741
  if (args) {
10742
+ this.hasPoints = true;
10741
10743
  const { currentTransform } = this;
10742
10744
  for (let i = 0, ii = args.length; i < ii; i += 2) {
10743
10745
  Util.applyTransform(args, currentTransform, i);
@@ -10822,7 +10824,9 @@ var CompiledFont = class _CompiledFont {
10822
10824
  const cmds = new Commands(onAllocation);
10823
10825
  cmds.transform(fontMatrix.slice());
10824
10826
  this.compileGlyphImpl(code, cmds, glyphId);
10825
- cmds.add(DrawOPS.closePath);
10827
+ if (cmds.hasPoints) {
10828
+ cmds.add(DrawOPS.closePath);
10829
+ }
10826
10830
  return cmds.getPath();
10827
10831
  }
10828
10832
  compileGlyphImpl() {
@@ -10862,8 +10866,10 @@ var Type2Compiled = class extends CompiledFont {
10862
10866
  cmds.onFrameAllocation = onAllocation;
10863
10867
  cmds.transform(matrix.slice());
10864
10868
  yield* compileCharString(code, cmds, this, glyphId);
10865
- cmds.add(DrawOPS.closePath);
10866
- yield cmds.getPath();
10869
+ if (cmds.hasPoints) {
10870
+ cmds.add(DrawOPS.closePath);
10871
+ yield cmds.getPath();
10872
+ }
10867
10873
  }
10868
10874
  compileGlyphImpl(code, cmds, glyphId) {
10869
10875
  for (const ignored of compileCharString(code, cmds, this, glyphId)) { /* synchronous collector */ }
@@ -1,5 +1,5 @@
1
1
  // packages/safe-bash/src/commands/python/index.ts
2
- import { PythonFailure, PythonPackageConflictError, createPythonBuildBackend, createPythonBuildDependencies, createPythonBuildEnvironment, createPythonCommands, createPythonExecutorCommands, createPythonExecutorPool, createPythonHostBridge, createPythonJspiAssets, createPythonJspiExecutor, createPythonJspiNativeCall, createPythonJspiStatResult, createPythonJspiTrampoline, createPythonLlmCapability, createPythonLlmFragmentLoader, createPythonLlmLoaderDiscovery, createPythonLlmLoaderProvider, createPythonLlmPackageManager, createPythonLlmTemplateLoader, createPythonLlmToolLoader, createPythonPackageCache, createPythonPackageEnvironment, createPythonPackageManifestStore, createPythonShellCapability, createPythonSourcePackageEnvironment, createPythonSourceSnapshot, inspectPythonCapabilities, installPythonLlmDependencies, installPythonLlmPackages, publishPythonBuildWheel, pythonCommands, pythonDocumentPackages, pythonExecutorCommands, pythonHostFailureCode, pythonLlmDependencies, pythonLlmPackages } from "../../safe-bash-command-python/index.js";
2
+ import { PythonFailure, PythonPackageConflictError, createPythonBuildBackend, createPythonBuildDependencies, createPythonBuildEnvironment, createPythonCommands, createPythonExecutorCommands, createPythonExecutorPool, createPythonHostBridge, createPythonJspiAssets, createPythonJspiExecutor, createPythonJspiNativeCall, createPythonJspiStatResult, createPythonJspiTrampoline, createPythonLlmCapability, createPythonLlmFragmentLoader, createPythonLlmLoaderDiscovery, createPythonLlmLoaderProvider, createPythonLlmPackageManager, createPythonLlmTemplateLoader, createPythonLlmToolLoader, createPythonPackageCache, createPythonPackageEnvironment, createPythonPackageFileManifestStore, createPythonPackageManifestStore, createPythonPackageStreamingManifestStore, createPythonShellCapability, createPythonSourcePackageEnvironment, createPythonSourceSnapshot, inspectPythonCapabilities, installPythonLlmDependencies, installPythonLlmPackages, publishPythonBuildWheel, pythonCommands, pythonDocumentPackages, pythonExecutorCommands, pythonHostFailureCode, pythonLlmDependencies, pythonLlmPackages } from "../../safe-bash-command-python/index.js";
3
3
 
4
4
  export {
5
5
  PythonFailure,
@@ -25,7 +25,9 @@ export {
25
25
  createPythonLlmToolLoader,
26
26
  createPythonPackageCache,
27
27
  createPythonPackageEnvironment,
28
+ createPythonPackageFileManifestStore,
28
29
  createPythonPackageManifestStore,
30
+ createPythonPackageStreamingManifestStore,
29
31
  createPythonShellCapability,
30
32
  createPythonSourcePackageEnvironment,
31
33
  createPythonSourceSnapshot,
@@ -1,9 +1,10 @@
1
1
  // packages/safe-bash/src/commands/llm/index.ts
2
- import { LlmCancelToolCall, LlmLoaderLookupError, createElevenLabsProvider, createLlmCommand, createLlmCommands, createLlmConfiguration, createLlmFragmentLoaders, createLlmFragmentSource, createLlmInputBudget, createLlmService, createLlmSpool, createLlmTemplateStore, createLlmToolRegistry, createLlmUrlFragmentSource, createLlmUrlSource, createOpenAiProvider, encodeLlmBase64, evaluateLlmTemplate, executeLlmToolCalls, findExtractedRange, getLlmAttachmentUrlId, getLlmFragmentPrefix, getLlmModelAliases, llmCommands, llmReferenceVersion, llmTemplateUsesInput, loadLlmPluginFragments, openAiChatOptions, parseLlmSchemaDsl, resolveLlmSchemaInput, resolveLlmUrlAttachment, selectLlmModelByQuery, selectLlmTools, serializeLlmJsonString, serializeLlmJsonValue, serializeLlmTokenUsage, serializeOpenAiChatRequest, streamLlmToolChain, templateYaml, validateLlmTemplateParameters, validateModelOptions } from "../../safe-bash-command-llm/index.js";
2
+ import { LlmCancelToolCall, LlmLoaderLookupError, LlmPluginExit, createElevenLabsProvider, createLlmCommand, createLlmCommands, createLlmConfiguration, createLlmFragmentLoaders, createLlmFragmentSource, createLlmInputBudget, createLlmService, createLlmSpool, createLlmTemplateStore, createLlmToolRegistry, createLlmUrlFragmentSource, createLlmUrlSource, createOpenAiProvider, encodeLlmBase64, evaluateLlmTemplate, executeLlmToolCalls, findExtractedRange, getLlmAttachmentUrlId, getLlmFragmentPrefix, getLlmModelAliases, llmCommands, llmReferenceVersion, llmTemplateUsesInput, loadLlmPluginFragments, openAiChatOptions, openLlmJsonDocument, parseLlmSchemaDsl, resolveLlmSchemaInput, resolveLlmUrlAttachment, selectLlmModelByQuery, selectLlmTools, serializeLlmJsonString, serializeLlmJsonValue, serializeLlmTokenUsage, serializeOpenAiChatRequest, streamLlmToolChain, templateYaml, validateLlmTemplateParameters, validateModelOptions } from "../../safe-bash-command-llm/index.js";
3
3
 
4
4
  export {
5
5
  LlmCancelToolCall,
6
6
  LlmLoaderLookupError,
7
+ LlmPluginExit,
7
8
  createElevenLabsProvider,
8
9
  createLlmCommand,
9
10
  createLlmCommands,
@@ -30,6 +31,7 @@ export {
30
31
  llmTemplateUsesInput,
31
32
  loadLlmPluginFragments,
32
33
  openAiChatOptions,
34
+ openLlmJsonDocument,
33
35
  parseLlmSchemaDsl,
34
36
  resolveLlmSchemaInput,
35
37
  resolveLlmUrlAttachment,
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-DZY7V74W.js";
4
4
  import {
5
5
  Interpreter
6
- } from "./chunk-W5LH7D23.js";
6
+ } from "./chunk-WKKJJBJQ.js";
7
7
  import {
8
8
  Budget,
9
9
  JqLimitError,
@@ -117,8 +117,9 @@ var builtinArities = {
117
117
  length: [0, 1],
118
118
  substr: [2, 3],
119
119
  index: [2, 2],
120
- split: [2, 3],
121
- match: [2, 2],
120
+ split: [2, 4],
121
+ match: [2, 3],
122
+ strtonum: [1, 1],
122
123
  sub: [2, 3],
123
124
  gsub: [2, 3],
124
125
  sprintf: [1, Infinity],
@@ -271,7 +272,8 @@ var AwkParser = class {
271
272
  const arity = Object.hasOwn(this.arities, call.expression.name) ? this.arities[call.expression.name] : definition ? [0, definition.parameters.length] : void 0;
272
273
  if (!arity) throw new ProgramError(`unsupported function '${call.expression.name}'`);
273
274
  if (call.expression.args.length < arity[0] || call.expression.args.length > arity[1]) throw new ProgramError(`invalid argument count for '${call.expression.name}'`);
274
- if (call.expression.name === "split" && call.expression.args[1]?.kind !== "variable") throw new ProgramError("split requires an array variable as its second argument");
275
+ if (call.expression.name === "split" && (call.expression.args[1]?.kind !== "variable" || call.expression.args[3] && call.expression.args[3].kind !== "variable")) throw new ProgramError("split requires an array variable as its second argument");
276
+ if (call.expression.name === "match" && call.expression.args[2] && call.expression.args[2].kind !== "variable") throw new ProgramError("match requires an array variable as its third argument");
275
277
  if ((call.expression.name === "asort" || call.expression.name === "asorti") && call.expression.args.some((arg) => arg.kind !== "variable")) throw new ProgramError("asort/asorti requires array variables");
276
278
  if ((call.expression.name === "sub" || call.expression.name === "gsub") && call.expression.args[2] && !isLvalue(call.expression.args[2])) throw new ProgramError("sub/gsub target must be assignable");
277
279
  if (call.expression.name === "sprintf" && call.expression.args[0]?.kind === "string") validateFormat(call.expression.args[0].value);
@@ -514,6 +516,8 @@ var AwkParser = class {
514
516
  const expression = { kind: "call", name, args };
515
517
  this.calls.push({ expression, owner: this.currentFunction });
516
518
  if (name === "split" && args[1]?.kind === "variable") this.arrays.add(args[1].name);
519
+ if (name === "split" && args[3]?.kind === "variable") this.arrays.add(args[3].name);
520
+ if (name === "match" && args[2]?.kind === "variable") this.arrays.add(args[2].name);
517
521
  if (name === "asort" || name === "asorti") {
518
522
  for (const arg of args) if (arg.kind === "variable") this.arrays.add(arg.name);
519
523
  }
@@ -235,7 +235,7 @@ function serializeDot(graph) {
235
235
  return reference(statement.node) + attributes(statement.attributes) + ";\n";
236
236
  if (statement.kind === "edge")
237
237
  return statement.endpoints.map((endpoint) => "kind" in endpoint ? sub(endpoint) : reference(endpoint)).join(graph.directed ? " -> " : " -- ") + attributes(statement.attributes) + ";\n";
238
- return statement.target + attributes(statement.attributes) + ";\n";
238
+ return Object.keys(statement.attributes).length ? statement.target + attributes(statement.attributes) + ";\n" : "";
239
239
  }).join("");
240
240
  return (graph.strict ? "strict " : "") + (graph.directed ? "digraph" : "graph") + (graph.id !== void 0 ? " " + quote(graph.id) : "") + " {\n" + body(graph.statements) + "}\n";
241
241
  }
@@ -13,6 +13,9 @@ function createPythonHostBridge(capabilities, options) {
13
13
  for (const limit of [maxMessageBytes, maxMessageDepth, maxConcurrentCalls, maxStreams, maxStreamBytes]) {
14
14
  if (limit !== Infinity && (!Number.isSafeInteger(limit) || limit < 1)) throw new RangeError("Invalid Python host capability limit");
15
15
  }
16
+ const checkMessageLimit = (size, maximum = maxMessageBytes) => {
17
+ if (size > maximum) throw new RangeError("Python host message limit exceeded");
18
+ };
16
19
  const registry = new Map(Object.entries(capabilities));
17
20
  const controller = new AbortController();
18
21
  const signal = AbortSignal.any([options.signal, controller.signal]);
@@ -31,20 +34,21 @@ function createPythonHostBridge(capabilities, options) {
31
34
  let nodes = 0;
32
35
  let estimatedBytes = 0;
33
36
  const inspect = (item, depth) => {
34
- if (++nodes > maxMessageBytes || depth > maxMessageDepth) throw new RangeError("Python host message limit exceeded");
37
+ checkMessageLimit(++nodes);
38
+ checkMessageLimit(depth, maxMessageDepth);
35
39
  if (item === null || typeof item === "boolean" || typeof item === "number" && Number.isFinite(item)) {
36
40
  estimatedBytes += JSON.stringify(item).length;
37
- if (estimatedBytes > maxMessageBytes) throw new RangeError("Python host message limit exceeded");
41
+ checkMessageLimit(estimatedBytes);
38
42
  return;
39
43
  }
40
44
  if (typeof item === "string") {
41
- if (item.length > maxMessageBytes) throw new RangeError("Python host message limit exceeded");
45
+ checkMessageLimit(item.length);
42
46
  estimatedBytes += new TextEncoder().encode(JSON.stringify(item)).length;
43
- if (estimatedBytes > maxMessageBytes) throw new RangeError("Python host message limit exceeded");
47
+ checkMessageLimit(estimatedBytes);
44
48
  return;
45
49
  }
46
50
  if (typeof item !== "object" || item === null || !Array.isArray(item) && Object.getPrototypeOf(item) !== Object.prototype && Object.getPrototypeOf(item) !== null) throw new TypeError("Python host messages must contain data only");
47
- if (Array.isArray(item) && item.length > maxMessageBytes) throw new RangeError("Python host message limit exceeded");
51
+ if (Array.isArray(item)) checkMessageLimit(item.length);
48
52
  if (ancestors.has(item)) throw new TypeError("Python host messages must not contain cycles");
49
53
  ancestors.add(item);
50
54
  estimatedBytes += 2;
@@ -52,7 +56,7 @@ function createPythonHostBridge(capabilities, options) {
52
56
  for (const key in item) {
53
57
  if (!Object.hasOwn(item, key)) continue;
54
58
  estimatedBytes += 2;
55
- if (estimatedBytes > maxMessageBytes) throw new RangeError("Python host message limit exceeded");
59
+ checkMessageLimit(estimatedBytes);
56
60
  if (Array.isArray(item) && key === "length") continue;
57
61
  if (typeof key !== "string") throw new TypeError("Python host messages must contain data only");
58
62
  const descriptor = Object.getOwnPropertyDescriptor(item, key);
@@ -64,7 +68,7 @@ function createPythonHostBridge(capabilities, options) {
64
68
  };
65
69
  inspect(value, 0);
66
70
  const encoded = JSON.stringify(value);
67
- if (new TextEncoder().encode(encoded).length > maxMessageBytes) throw new RangeError("Python host message limit exceeded");
71
+ checkMessageLimit(new TextEncoder().encode(encoded).length);
68
72
  return JSON.parse(encoded);
69
73
  };
70
74
  const assertLive = () => {
@@ -101,7 +105,7 @@ function createPythonHostBridge(capabilities, options) {
101
105
  if (chunkBytes > maxStreamBytes - stream.bytes) throw new RangeError("Python host stream byte limit exceeded");
102
106
  stream.bytes += chunkBytes;
103
107
  const value = result.value instanceof Uint8Array ? (() => {
104
- if (result.value.length > maxMessageBytes / 4) throw new RangeError("Python host message limit exceeded");
108
+ checkMessageLimit(result.value.length, maxMessageBytes / 4);
105
109
  return { type: "bytes", bytes: Array.from(result.value) };
106
110
  })() : typeof result.value === "string" ? { type: "text", text: result.value } : { type: "data", value: result.value };
107
111
  return data({ done: false, value });
@@ -91,6 +91,7 @@ async function openCommandFile(context, path, options) {
91
91
  signal?.throwIfAborted();
92
92
  };
93
93
  let defaultFsOptions;
94
+ const callerOptions = /* @__PURE__ */ new WeakMap();
94
95
  const run = (syscall, forwarded, action) => {
95
96
  const signal = forwarded.signal;
96
97
  try {
@@ -101,7 +102,15 @@ async function openCommandFile(context, path, options) {
101
102
  }
102
103
  const operation = work.then(async () => {
103
104
  check(signal);
104
- const supplied = signal ? { signal: AbortSignal.any([scope, signal]) } : defaultFsOptions;
105
+ let supplied = defaultFsOptions;
106
+ if (signal && signal !== scope) {
107
+ const cached = callerOptions.get(signal);
108
+ if (cached) supplied = cached;
109
+ else {
110
+ supplied = { signal: AbortSignal.any([scope, signal]) };
111
+ callerOptions.set(signal, supplied);
112
+ }
113
+ }
105
114
  try {
106
115
  const result = await action(descriptor, supplied);
107
116
  if (syscall !== "write" || !context.preserveWriteReceipt) check(signal);
@@ -60,7 +60,7 @@ async function* autodetected(source, signal, limits) {
60
60
  if (next.value.length) yield next.value;
61
61
  }
62
62
  })();
63
- const format = size >= 2 && prefix[0] === 31 && prefix[1] === 139 ? "gzip" : size >= 3 && prefix[0] === 66 && prefix[1] === 90 && prefix[2] === 104 ? "bzip2" : size === 6 && [253, 55, 122, 88, 90, 0].every((byte, index) => prefix[index] === byte) ? "xz" : void 0;
63
+ const format = size >= 2 && prefix[0] === 31 && prefix[1] === 139 ? "gzip" : size >= 3 && prefix[0] === 66 && prefix[1] === 90 && prefix[2] === 104 ? "bzip2" : size >= 4 && prefix[0] === 40 && prefix[1] === 181 && prefix[2] === 47 && prefix[3] === 253 ? "zstd" : size === 6 && [253, 55, 122, 88, 90, 0].every((byte, index) => prefix[index] === byte) ? "xz" : void 0;
64
64
  yield* format ? compressed(replay, true, signal, limits, format) : replay;
65
65
  } finally {
66
66
  if (iterator.return) await iterator.return(void 0);
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createArchive,
3
3
  manifest
4
- } from "./chunk-3NJETNC2.js";
4
+ } from "./chunk-MBXNG6C3.js";
5
5
  import {
6
6
  readArchive
7
- } from "./chunk-PKH57OIC.js";
7
+ } from "./chunk-SG2KOOD4.js";
8
8
  import {
9
9
  quoteName
10
10
  } from "./chunk-PYIG32ZI.js";
@@ -13,7 +13,7 @@ import {
13
13
  autodetected,
14
14
  compressed,
15
15
  recordPadding
16
- } from "./chunk-5H7ZHP7F.js";
16
+ } from "./chunk-43NDRBKY.js";
17
17
 
18
18
  // packages/safe-bash-command-tar/src/modes.ts
19
19
  import { dirname, retainFileSystemCleanup } from "@poe-platform/safe-fs/core";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-DSX7SPN5.js";
4
4
  import {
5
5
  inferDelimiter
6
- } from "./chunk-R3SLT3ZX.js";
6
+ } from "./chunk-R6GON4H3.js";
7
7
  import {
8
8
  Bytes,
9
9
  XanError
@@ -2,7 +2,7 @@ import {
2
2
  createLlmSpool,
3
3
  fileSource,
4
4
  serializeLlmEmbedding
5
- } from "./chunk-E5CDHXFA.js";
5
+ } from "./chunk-VOR6YDZC.js";
6
6
  import {
7
7
  sourceBytes
8
8
  } from "./chunk-36FV6BAG.js";
@@ -3,7 +3,7 @@ import {
3
3
  outputOperation,
4
4
  preflight,
5
5
  publish
6
- } from "./chunk-WPT2FCHH.js";
6
+ } from "./chunk-4SLPM2WM.js";
7
7
  import {
8
8
  Scanner
9
9
  } from "./chunk-DSX7SPN5.js";
@@ -18,7 +18,7 @@ import {
18
18
  checkedAdd,
19
19
  inferDelimiter,
20
20
  unsigned
21
- } from "./chunk-R3SLT3ZX.js";
21
+ } from "./chunk-R6GON4H3.js";
22
22
  import {
23
23
  boundedSort
24
24
  } from "./chunk-6ZMUR3LT.js";
@@ -142,7 +142,7 @@ async function aggregates(text, header, args, budget) {
142
142
  const begin = at;
143
143
  while (at < text.length && text[at] !== "(") at++;
144
144
  const name = text.slice(begin, at).trim().toLowerCase();
145
- if (!["count", "sum", "mean", "avg", "min", "max", "first", "last"].includes(name) || at === text.length) throw new XanError("expected an aggregate call");
145
+ if (!["count", "sum", "mean", "avg", "min", "max", "median", "first", "last"].includes(name) || at === text.length) throw new XanError("expected an aggregate call");
146
146
  const start = ++at;
147
147
  let quote = "";
148
148
  while (at < text.length) {
@@ -262,7 +262,7 @@ async function* extendedRows(args, scope, budget, writer) {
262
262
  const bytes = row.cells[index].decoded.view();
263
263
  budget.hold(bytes.length);
264
264
  return bytes.slice();
265
- }), states: specs.map(() => ({ count: 0, sum: 0, min: Infinity, max: -Infinity })) };
265
+ }), states: specs.map(() => ({ count: 0, sum: 0, min: Infinity, max: -Infinity, values: [] })) };
266
266
  };
267
267
  if (args.command === "agg") groups.set("", make());
268
268
  yield* textRow([...selected.map((index) => args.noHeaders ? String(index) : header.cells[index].decoded.view()), ...specs.map((spec) => spec.label)], writer, budget);
@@ -303,6 +303,10 @@ async function* extendedRows(args, scope, budget, writer) {
303
303
  state.sum += value;
304
304
  state.min = Math.min(state.min, value);
305
305
  state.max = Math.max(state.max, value);
306
+ if (spec.name === "median") {
307
+ budget.hold(8);
308
+ state.values.push(value);
309
+ }
306
310
  }
307
311
  }
308
312
  } finally {
@@ -316,6 +320,11 @@ async function* extendedRows(args, scope, budget, writer) {
316
320
  if (spec.name === "count") return String(state.count);
317
321
  if (spec.name === "sum") return String(state.sum);
318
322
  if (!state.count) return "";
323
+ if (spec.name === "median") {
324
+ const sorted = [...state.values].sort((a, b) => a - b);
325
+ const mid = Math.floor(sorted.length / 2);
326
+ return String(sorted.length % 2 === 1 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2);
327
+ }
319
328
  return String(spec.name === "min" ? state.min : spec.name === "max" ? state.max : state.sum / state.count);
320
329
  })], writer, budget);
321
330
  return;
@@ -571,16 +580,30 @@ async function expressions(text, header, noHeaders, budget) {
571
580
  } else {
572
581
  const name = identifier();
573
582
  if (!name) throw new XanError("expected expression");
574
- let column = -1;
575
- if (!noHeaders) for (let i = 0; i < (header?.width ?? 0); i++) {
576
- budget.work();
577
- if (cellText(header.cells[i].decoded.view(), budget) === name) {
578
- column = i;
579
- break;
583
+ space();
584
+ if (text[offset] === "(") {
585
+ offset++;
586
+ const inner = parse(0, depth + 1);
587
+ space();
588
+ if (text[offset++] !== ")") throw new XanError("expected closing parenthesis");
589
+ const fnName = name.toLowerCase();
590
+ if (fnName === "upper") left = (row) => String(inner(row)).toUpperCase();
591
+ else if (fnName === "lower") left = (row) => String(inner(row)).toLowerCase();
592
+ else if (fnName === "trim") left = (row) => String(inner(row)).trim();
593
+ else if (fnName === "len") left = (row) => String(inner(row)).length;
594
+ else throw new XanError(`unknown expression column: ${name}`);
595
+ } else {
596
+ let column = -1;
597
+ if (!noHeaders) for (let i = 0; i < (header?.width ?? 0); i++) {
598
+ budget.work();
599
+ if (cellText(header.cells[i].decoded.view(), budget) === name) {
600
+ column = i;
601
+ break;
602
+ }
580
603
  }
604
+ if (column < 0) throw new XanError(`unknown expression column: ${name}`);
605
+ left = (row) => cellText(row.cells[column].decoded.view(), budget);
581
606
  }
582
- if (column < 0) throw new XanError(`unknown expression column: ${name}`);
583
- left = (row) => cellText(row.cells[column].decoded.view(), budget);
584
607
  }
585
608
  let chainDepth = depth;
586
609
  while (true) {
@@ -634,7 +657,7 @@ async function presentationRows(args, scope, budget, writer) {
634
657
  const table = args.command === "table";
635
658
  const source = args.command === "map" ? args.operand : args.evaluateFile ? await scope.expression(args.selection) : args.selection;
636
659
  const projections = table ? [] : await expressions(source, first, args.noHeaders, budget);
637
- if (args.command === "map" && projections.length !== 1) throw new XanError("map requires one expression");
660
+ if (args.command === "map" && args.rightSelection !== "__INLINE_MULTI__" && projections.length !== 1) throw new XanError("map requires one expression");
638
661
  budget.hold((first?.width ?? 0) * 32);
639
662
  const selected = table ? await resolveSelection(await parseSelection(args.selection, budget), first?.cells.map((cell) => cell.decoded.view()) ?? [], args.noHeaders, budget) : [];
640
663
  const lines = [], widths = selected.map(() => 0);
@@ -647,7 +670,10 @@ async function presentationRows(args, scope, budget, writer) {
647
670
  return (async function* () {
648
671
  try {
649
672
  if (!table && !args.noHeaders) {
650
- yield* textRow(args.command === "map" ? [...first?.cells.map((cell) => cell.decoded.view()) ?? [], args.rightSelection] : projections.map((projection) => projection.name), writer, budget);
673
+ yield* textRow(args.command === "map" ? [
674
+ ...first?.cells.map((cell) => cell.decoded.view()) ?? [],
675
+ ...args.rightSelection === "__INLINE_MULTI__" ? projections.map((p) => p.name) : [args.rightSelection]
676
+ ] : projections.map((projection) => projection.name), writer, budget);
651
677
  first?.free();
652
678
  row = await scanner.next();
653
679
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  formats
3
- } from "./chunk-5AQAWIYK.js";
3
+ } from "./chunk-JEZC5V3B.js";
4
4
  import {
5
5
  CompressedDataError
6
6
  } from "./chunk-V7IP2PFT.js";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  jsonFragments,
6
6
  renderJsonFragment
7
- } from "./chunk-HCPEYQKT.js";
7
+ } from "./chunk-N4SH6QY5.js";
8
8
  import {
9
9
  JqError,
10
10
  JqLimitError,
@@ -166,7 +166,7 @@ async function executePlaywrightAbility(ability, parsed, invocation, context) {
166
166
  if (bytes.byteLength > context.maxArtifactBytes) throw new PlaywrightResourceLimitError("Artifact byte limit exceeded");
167
167
  if (filename !== void 0) filenameCheck(filename);
168
168
  if (!invocation.writeArtifact) throw new Error("Artifact byte destination unsupported");
169
- budget.admit(bytes.byteLength);
169
+ (context.artifactBudget ?? budget).admit(bytes.byteLength);
170
170
  const owned = new Uint8Array(bytes);
171
171
  return track(async () => {
172
172
  context.check();
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  PythonTextEncodingError,
3
3
  PythonUtf16Decoder
4
- } from "./chunk-OLXMWQJ5.js";
4
+ } from "./chunk-WRO3PB2M.js";
5
5
  import {
6
6
  PythonTextDecodeError,
7
7
  decodePythonSingleByte,
8
8
  pythonSingleByteCodepages
9
- } from "./chunk-OOYVZAWL.js";
9
+ } from "./chunk-IGXH5W5Z.js";
10
10
  import {
11
11
  normalizeEncoding,
12
12
  pythonCodecAliases
13
- } from "./chunk-ZERCTWUI.js";
13
+ } from "./chunk-VSNVYOK2.js";
14
14
  import {
15
15
  pythonFileCodepages
16
- } from "./chunk-WIUEM7HP.js";
16
+ } from "./chunk-TGSNVLFZ.js";
17
17
  import {
18
18
  decodeBase64Latin1,
19
19
  encodeBase64Latin1
20
- } from "./chunk-HNEWGADJ.js";
20
+ } from "./chunk-RUXOFW5G.js";
21
21
 
22
22
  // packages/safe-bash-csv-engine/src/python-utf7.ts
23
23
  var PythonUtf7EncodingError = class extends TypeError {
@@ -2,10 +2,10 @@ import {
2
2
  chunkBytes,
3
3
  stagingLimit,
4
4
  transform
5
- } from "./chunk-7RQGRFHJ.js";
5
+ } from "./chunk-KHWDEAE4.js";
6
6
  import {
7
7
  formats
8
- } from "./chunk-5AQAWIYK.js";
8
+ } from "./chunk-JEZC5V3B.js";
9
9
  import {
10
10
  codeOf,
11
11
  pathOf
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-52DDLGBS.js";
4
4
  import {
5
5
  boundedCodec
6
- } from "./chunk-CMJBRGU2.js";
6
+ } from "./chunk-IHQZKUBS.js";
7
7
 
8
8
  // packages/safe-bash-compression-engine/src/zstd-decode.ts
9
9
  import { PublicDiagnostic } from "../../safe-bash-contracts/diagnostics.js";