alchemylab 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  (()=>{"use strict"
2
- function e(t){var r=o[t]
2
+ function e(t){var r=s[t]
3
3
  if(void 0!==r)return r.exports
4
- var module=o[t]={id:t,loaded:!1,exports:{}}
5
- return n[t].call(module.exports,module,module.exports,e),module.loaded=!0,module.exports}var t,r,n={4703:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.LIVE_FRAME_PATH=void 0,exports.readOomKills=async function(e){const t=await(0,r.docker)(["exec",e,"cat","/sys/fs/cgroup/memory.events"],n)
4
+ var module=s[t]={id:t,loaded:!1,exports:{}}
5
+ return o[t].call(module.exports,module,module.exports,e),module.loaded=!0,module.exports}var t,r,n,o={4703:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.LIVE_FRAME_PATH=void 0,exports.readOomKills=async function(e){const t=await(0,r.docker)(["exec",e,"cat","/sys/fs/cgroup/memory.events"],n)
6
6
  if(0===t.exit){const e=/^oom_kill (\d+)/m.exec(t.stdout)
7
7
  if(e)return Number(e[1])}const o=await(0,r.docker)(["exec",e,"cat","/sys/fs/cgroup/memory/memory.oom_control"],n)
8
8
  if(0===o.exit){const e=/^oom_kill (\d+)/m.exec(o.stdout)
@@ -28,14 +28,15 @@ return 0!==n.exit?`docker pull ${e} failed: ${(n.stderr||String(n.exit)).trim()}
28
28
  const s=t(31421),a=t(16698),i=t(69968)
29
29
  let c
30
30
  const l=new a.AsyncLocalStorage
31
- exports.DOCKER_OP_TIMEOUT_MS=6e4,exports.PULL_TIMEOUT_MS=3e5},7740:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.ENVIRONMENT_PRESETS=exports.OFFICE_BOX_PRESET=exports.OFFICE_BOX_RECIPE_HASH=exports.OFFICE_BOX_DOCKERFILE=exports.OFFICE_RENDER_DIR=exports.OFFICE_BOX_IMAGE=exports.OFFICE_BOX_VERSION=void 0,exports.expandEnvironmentPreset=function(e,t){const r=t??{}
31
+ exports.DOCKER_OP_TIMEOUT_MS=6e4,exports.PULL_TIMEOUT_MS=3e5},7740:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.ENVIRONMENT_PRESETS=exports.OFFICE_BOX_PRESET=exports.OFFICE_BOX_RECIPE_HASH=exports.OFFICE_BOX_DOCKERFILE=exports.NOBREAK_DIGIT_HYPHEN_LUA=exports.OFFICE_RENDER_DIR=exports.OFFICE_BOX_IMAGE=exports.OFFICE_BOX_VERSION=void 0,exports.expandEnvironmentPreset=function(e,t){const r=t??{}
32
32
  if(!e)return r
33
33
  const n=exports.ENVIRONMENT_PRESETS[e].config
34
- return{...n,...r,resources:{...n.resources??{},...r.resources??{}}}},exports.presetsLine=function(e){if(!e.includes(exports.OFFICE_BOX_IMAGE))return'Presets: `office` (python-docx, openpyxl, python-pptx, pandoc, LibreOffice; `render-pdf FILE` turns Word, Excel, PowerPoint, Markdown or HTML into PDF). Set it up with environment_verify({ preset: "office" }) then environment_create({ name: "Office", preset: "office" }), or ask environment_setup for the office preset. Needs Docker; the image is built locally on first use (a few minutes, about 900 MB). To only look at an office file, view_asset renders it without a box.'}
34
+ return{...n,...r,resources:{...n.resources??{},...r.resources??{}}}},exports.presetsLine=function(e){if(!e.includes(exports.OFFICE_BOX_IMAGE))return'Presets: `office` (python-docx, openpyxl, python-pptx, pandoc, LibreOffice, segno and zbarimg for QR codes; `render-pdf FILE` turns Word, Excel, PowerPoint, Markdown or HTML into PDF). Set it up with environment_verify({ preset: "office" }) then environment_create({ name: "Office", preset: "office" }), or ask environment_setup for the office preset. Needs Docker; the image is built locally on first use (a few minutes, about 900 MB). To only look at an office file, view_asset renders it without a box.'}
35
35
  const r=t(76982)
36
- exports.OFFICE_BOX_VERSION=1,exports.OFFICE_BOX_IMAGE=`alchemylab-local/office-box:v${exports.OFFICE_BOX_VERSION}`,exports.OFFICE_RENDER_DIR="/scratch/render"
37
- const n=`#!/bin/sh\n# render-pdf FILE... : convert Word, Excel, PowerPoint, OpenDocument, Markdown or HTML to PDF.\n# Writes each PDF under \${RENDER_OUT:-${exports.OFFICE_RENDER_DIR}} and prints its path, one per line.\nset -e\nout="\${RENDER_OUT:-${exports.OFFICE_RENDER_DIR}}"\nmkdir -p "$out" /scratch/.render-work\nexport HOME="\${HOME:-/scratch}"\nif [ "$1" = "--self-test" ]; then\n cd /scratch/.render-work\n python3 -c "import docx; d = docx.Document(); d.add_heading('render-pdf self-test', 1); d.add_paragraph('ok'); d.save('self-test.docx')"\n set -- /scratch/.render-work/self-test.docx\nfi\n[ "$#" -gt 0 ] || { echo "usage: render-pdf FILE..." >&2; exit 2; }\nfor f in "$@"; do\n [ -f "$f" ] || { echo "render-pdf: no such file: $f" >&2; exit 1; }\n name=$(basename "$f"); stem="\${name%.*}"\n case "$name" in\n *.md|*.markdown) pandoc "$f" -o "/scratch/.render-work/$stem.docx"; src="/scratch/.render-work/$stem.docx" ;;\n *) src="$f" ;;\n esac\n soffice --headless --norestore -env:UserInstallation=file:///scratch/.render-profile --convert-to pdf --outdir "$out" "$src" >/scratch/.render-work/soffice.log 2>&1 \\\n || { echo "render-pdf: LibreOffice could not convert $f" >&2; tail -5 /scratch/.render-work/soffice.log >&2; exit 1; }\n [ -f "$out/$stem.pdf" ] || { echo "render-pdf: no PDF produced for $f" >&2; exit 1; }\n echo "$out/$stem.pdf"\ndone\n`
38
- exports.OFFICE_BOX_DOCKERFILE=["FROM python:3.12-slim","ENV DEBIAN_FRONTEND=noninteractive PIP_NO_CACHE_DIR=1 PYTHONDONTWRITEBYTECODE=1","RUN apt-get update \\"," && apt-get install -y --no-install-recommends \\"," libreoffice-writer-nogui libreoffice-calc-nogui libreoffice-impress-nogui \\"," pandoc fonts-liberation fonts-dejavu-core fonts-crosextra-carlito fonts-crosextra-caladea \\"," && rm -rf /var/lib/apt/lists/*","RUN pip install python-docx openpyxl python-pptx pypdf",`RUN echo ${Buffer.from(n).toString("base64")} | base64 -d > /usr/local/bin/render-pdf && chmod 755 /usr/local/bin/render-pdf`,""].join("\n"),exports.OFFICE_BOX_RECIPE_HASH=(0,r.createHash)("sha256").update(exports.OFFICE_BOX_DOCKERFILE).digest("hex").slice(0,16),exports.OFFICE_BOX_PRESET={name:"Office",description:"Make and render office files: python-docx, openpyxl, python-pptx, pandoc and LibreOffice in a sealed box. `render-pdf FILE` writes a PDF under /scratch/render. The worktree is read-only here: make files under /scratch, record them (results record, box), then view_asset({ result }) to look at a PDF and write_file({ path, fromResult }) to put a file in the repository.",smoke:"render-pdf --self-test",config:{image:exports.OFFICE_BOX_IMAGE,shellInit:"export HOME=/scratch",resources:{memory:"3g",scratchMb:1024,shmMb:256}}},exports.ENVIRONMENT_PRESETS={office:exports.OFFICE_BOX_PRESET}},15845:function(module,exports,e){async function t(e,t,r){const n=await(0,d.renderDocument)({bytes:Buffer.from(e),filename:`version.${t}`,to:r},{cacheDir:l.join(c.tmpdir(),"alchemylab-render-cache"),image:"present-only"})
36
+ exports.OFFICE_BOX_VERSION=1,exports.OFFICE_BOX_IMAGE=`alchemylab-local/office-box:v${exports.OFFICE_BOX_VERSION}`,exports.OFFICE_RENDER_DIR="/scratch/render",exports.NOBREAK_DIGIT_HYPHEN_LUA="local NBH = utf8.char(0x2011)\nfunction Str(el)\n local t = el.text\n for _ = 1, 2 do t = t:gsub('(%d)%-(%d)', '%1' .. NBH .. '%2') end\n if t ~= el.text then el.text = t end\n return el\nend\n"
37
+ const n="/usr/local/share/render-pdf/nobreak.lua",o=`#!/bin/sh\n# render-pdf FILE... : convert Word, Excel, PowerPoint, OpenDocument, Markdown or HTML to PDF.\n# Writes each PDF under \${RENDER_OUT:-${exports.OFFICE_RENDER_DIR}} and prints its path, one per line.\nset -e\nout="\${RENDER_OUT:-${exports.OFFICE_RENDER_DIR}}"\nmkdir -p "$out" /scratch/.render-work\nexport HOME="\${HOME:-/scratch}"\nif [ "$1" = "--self-test" ]; then\n cd /scratch/.render-work\n python3 -c "import docx; d = docx.Document(); d.add_heading('render-pdf self-test', 1); d.add_paragraph('ok'); d.save('self-test.docx')"\n set -- /scratch/.render-work/self-test.docx\nfi\n[ "$#" -gt 0 ] || { echo "usage: render-pdf FILE..." >&2; exit 2; }\nfor f in "$@"; do\n [ -f "$f" ] || { echo "render-pdf: no such file: $f" >&2; exit 1; }\n name=$(basename "$f"); stem="\${name%.*}"\n case "$name" in\n *.md|*.markdown) pandoc --lua-filter ${n} "$f" -o "/scratch/.render-work/$stem.docx"; src="/scratch/.render-work/$stem.docx" ;;\n *) src="$f" ;;\n esac\n soffice --headless --norestore -env:UserInstallation=file:///scratch/.render-profile --convert-to pdf --outdir "$out" "$src" >/scratch/.render-work/soffice.log 2>&1 \\\n || { echo "render-pdf: LibreOffice could not convert $f" >&2; tail -5 /scratch/.render-work/soffice.log >&2; exit 1; }\n [ -f "$out/$stem.pdf" ] || { echo "render-pdf: no PDF produced for $f" >&2; exit 1; }\n echo "$out/$stem.pdf"\ndone\n`
38
+ exports.OFFICE_BOX_DOCKERFILE=function(){const e=Buffer.from(o).toString("base64"),t=Buffer.from(exports.NOBREAK_DIGIT_HYPHEN_LUA).toString("base64")
39
+ return["FROM python:3.12-slim","ENV DEBIAN_FRONTEND=noninteractive PIP_NO_CACHE_DIR=1 PYTHONDONTWRITEBYTECODE=1","RUN apt-get update \\"," && apt-get install -y --no-install-recommends \\"," libreoffice-writer-nogui libreoffice-calc-nogui libreoffice-impress-nogui \\"," pandoc fonts-liberation fonts-dejavu-core fonts-crosextra-carlito fonts-crosextra-caladea \\"," zbar-tools poppler-utils \\"," && rm -rf /var/lib/apt/lists/*","RUN pip install python-docx openpyxl python-pptx pypdf segno",`RUN echo ${e} | base64 -d > /usr/local/bin/render-pdf && chmod 755 /usr/local/bin/render-pdf`,`RUN mkdir -p ${n.replace(/\/[^/]+$/,"")} && echo ${t} | base64 -d > ${n}`,""].join("\n")}(),exports.OFFICE_BOX_RECIPE_HASH=(0,r.createHash)("sha256").update(exports.OFFICE_BOX_DOCKERFILE).digest("hex").slice(0,16),exports.OFFICE_BOX_PRESET={name:"Office",description:'Make and render office files: python-docx, openpyxl, python-pptx, pandoc and LibreOffice in a sealed box. `render-pdf FILE` writes a PDF under /scratch/render. QR codes: `segno "URL" -o qr.png --scale 10`, read back with `zbarimg`; `pdftoppm -png` turns PDF pages into images. Word styling from Markdown: `pandoc --reference-doc`. The worktree is read-only here: make files under /scratch, record them (results record, box), then view_asset({ result }) to look at a PDF and write_file({ path, fromResult }) to put a file in the repository. Scripts you write to make a file stay in /scratch: the repository gets the finished files, and a note in the source saying how it was rendered.',smoke:"render-pdf --self-test",config:{image:exports.OFFICE_BOX_IMAGE,shellInit:"export HOME=/scratch",resources:{memory:"3g",scratchMb:1024,shmMb:256}}},exports.ENVIRONMENT_PRESETS={office:exports.OFFICE_BOX_PRESET}},9956:module=>{module.exports=require("undici")},15845:function(module,exports,e){async function t(e,t,r){const n=await(0,d.renderDocument)({bytes:Buffer.from(e),filename:`version.${t}`,to:r},{cacheDir:l.join(c.tmpdir(),"alchemylab-render-cache"),image:"present-only"})
39
40
  if(!n.ok)throw new Error(n.error)
40
41
  return n.bytes}async function r(e){const r=(0,u.documentKindFor)(e)
41
42
  if(!r)return`(AlchemyLab: no text form for ${e.split(".").pop()} files)\n`
@@ -52,8 +53,10 @@ return s(t,e),t})
52
53
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.textconv=r
53
54
  const i=e(91943),c=a(e(70857)),l=a(e(16928)),u=e(98335),d=e(24716)
54
55
  if(e.c[e.s]===module){const e=process.argv[2]
55
- e||(process.stderr.write("usage: textconv <file>\n"),process.exit(2)),r(e).then((e=>process.stdout.write(e)),(()=>process.stdout.write("(AlchemyLab: text conversion failed)\n")))}},16603:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.withShellInit=function(e,t){const r=(e??"").trim()
56
- return r?`${r} && ${t}`:t},exports.carriesOwnShellInit=function(e){return/(^|[;&|]\s*|\s-lc\s*['"]?\s*)(\.|source)\s+\S+\s*(&&|;)/.test(e)}},16698:module=>{module.exports=require("node:async_hooks")},16928:module=>{module.exports=require("path")},24716:function(e,exports,t){function r(e,t){const r=d.extname(e).slice(1).toLowerCase()
56
+ e||(process.stderr.write("usage: textconv <file>\n"),process.exit(2)),r(e).then((e=>process.stdout.write(e)),(()=>process.stdout.write("(AlchemyLab: text conversion failed)\n")))}},16603:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.RUN_ENV_VAR=exports.RUN_FROM_ENV=void 0,exports.withShellInit=function(e,t){const r=(e??"").trim()
57
+ return r?`${r} && ${t}`:t},exports.carriesOwnShellInit=function(e){return/(^|[;&|]\s*|\s-lc\s*['"]?\s*)(\.|source)\s+\S+\s*(&&|;)/.test(e)}
58
+ var r=t(52039)
59
+ Object.defineProperty(exports,"RUN_FROM_ENV",{enumerable:!0,get:function(){return r.RUN_FROM_ENV}}),Object.defineProperty(exports,"RUN_ENV_VAR",{enumerable:!0,get:function(){return r.RUN_ENV_VAR}})},16698:module=>{module.exports=require("node:async_hooks")},16928:module=>{module.exports=require("path")},24716:function(e,exports,t){function r(e,t){const r=d.extname(e).slice(1).toLowerCase()
57
60
  return b[t].includes(r)}function n(e,t){const r=e=>`'${e.replace(/'/g,"'\\''")}'`,n=`/work/in/${e}`,o=e.replace(/\.[^.]+$/,"")
58
61
  return"pdf"===t?`RENDER_OUT=/work/out render-pdf ${r(n)}`:"docx"===t&&/\.(md|markdown|html?)$/i.test(e)?`pandoc ${r(n)} -o ${r(`/work/out/${o}.docx`)}`:`soffice --headless --norestore -env:UserInstallation=file:///scratch/.render-profile --convert-to ${t} --outdir /work/out ${r(n)} >/dev/null`}var o,s=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
59
62
  var o=Object.getOwnPropertyDescriptor(t,r)
@@ -87,7 +90,7 @@ const c=t(76982),l=t(79896),u=i(t(70857)),d=i(t(16928)),p=t(64936),f=t(69968),m=
87
90
  exports.MAX_RENDER_INPUT_BYTES=52428800
88
91
  const h=18e4,b={pdf:["docx","doc","odt","rtf","xlsx","xlsm","xls","ods","csv","pptx","ppt","odp","md","markdown","html","htm"],docx:["md","markdown","html","htm","odt","rtf","doc"],xlsx:["xls","ods"],pptx:["ppt","odp"]}
89
92
  exports.RENDER_MIME={pdf:"application/pdf",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",pptx:"application/vnd.openxmlformats-officedocument.presentationml.presentation"}
90
- const w=12e4,g="the office renderer is being built on this machine (first use only, usually a few minutes)"},31421:module=>{module.exports=require("node:child_process")},48161:module=>{module.exports=require("node:os")},50478:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.rtfToText=function(e){const o="string"==typeof e?e:Buffer.from(e).toString("latin1")
93
+ const w=12e4,g="the office renderer is being built on this machine (first use only, usually a few minutes)"},31421:module=>{module.exports=require("node:child_process")},35317:module=>{module.exports=require("child_process")},48161:module=>{module.exports=require("node:os")},50478:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.rtfToText=function(e){const o="string"==typeof e?e:Buffer.from(e).toString("latin1")
91
94
  if(!/^\s*\{\s*\\rtf/i.test(o))throw new Error("not an RTF file (it does not start with {\\rtf)")
92
95
  const s=[],a=[{skip:!1,skipChars:0}],i=()=>a[a.length-1],c=e=>{i().skip||s.push(e)}
93
96
  for(let e=0;e<o.length;e++){const s=o[e]
@@ -114,7 +117,21 @@ else{const e=i().skipChars>0
114
117
  i().skipChars=Math.max(0,a[a.length-1].ucSkip??1),e||void 0===m||c(String.fromCodePoint(m<0?m+65536:m))}}var l
115
118
  return s.join("").replace(/[ \t]+\n/g,"\n").replace(/\n{3,}/g,"\n\n").split("\n").map((e=>{const t=e.replace(/\s+$/,"").replace(/^\s*\|\s*/,"").replace(/\s*\|\s*$/,"")
116
119
  return e.includes(" | ")?`| ${t} |`:t})).join("\n").trim()}
117
- const t=new Set(["fonttbl","colortbl","stylesheet","listtable","listoverridetable","revtbl","rsidtbl","generator","info","pict","object","themedata","colorschememapping","latentstyles","datastore","xmlnstbl","filetbl","upr","fldinst","nonshppict","shppict","panose"]),r={par:"\n",line:"\n",tab:"\t",sect:"\n\n",page:"\n\n",lquote:"\u2018",rquote:"\u2019",ldblquote:"\u201c",rdblquote:"\u201d",emdash:"\u2014",endash:"\u2013",bullet:"\u2022",emspace:" ",enspace:" ",qmspace:" ","~":"\xa0","-":"",_:"-","{":"{","}":"}","\\":"\\"},n="\u20ac\x81\u201a\u0192\u201e\u2026\u2020\u2021\u02c6\u2030\u0160\u2039\u0152\x8d\u017d\x8f\x90\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u02dc\u2122\u0161\u203a\u0153\x9d\u017e\u0178\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"},53157:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.hardenedCreateArgs=function(e){return["--network",e.network,"--user",e.user,"--cap-drop","ALL",...(e.capAdds??[]).flatMap((e=>["--cap-add",e])),...Object.entries(e.sysctls??{}).flatMap((([e,t])=>["--sysctl",`${e}=${t}`])),"--security-opt","no-new-privileges","--read-only","--tmpfs","/tmp:rw,nosuid,nodev,exec,size=256m",...(e.extraTmpfs??[]).flatMap((e=>["--tmpfs",e])),"--ipc","none","--tmpfs",`/dev/shm:rw,nosuid,nodev,size=${e.shmSizeMb??64}m`,"--memory",e.memory,"--memory-swap",e.memory,"--cpus",String(e.cpus),"--pids-limit",String(e.pidsLimit),"-e","HOME=/tmp"]}},64264:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.SCRATCH_VOLUME_ARGS=void 0,exports.scratchTmpfsArg=function(e){return`/scratch:rw,nosuid,nodev,exec,size=${e}m`},exports.claimScratch=async function(e,t,n){const o=await(0,r.docker)(["run","--rm","--network","none","--user","0:0","--volumes-from",e,"--entrypoint","chown",t,n,"/scratch"],r.DOCKER_OP_TIMEOUT_MS)
120
+ const t=new Set(["fonttbl","colortbl","stylesheet","listtable","listoverridetable","revtbl","rsidtbl","generator","info","pict","object","themedata","colorschememapping","latentstyles","datastore","xmlnstbl","filetbl","upr","fldinst","nonshppict","shppict","panose"]),r={par:"\n",line:"\n",tab:"\t",sect:"\n\n",page:"\n\n",lquote:"\u2018",rquote:"\u2019",ldblquote:"\u201c",rdblquote:"\u201d",emdash:"\u2014",endash:"\u2013",bullet:"\u2022",emspace:" ",enspace:" ",qmspace:" ","~":"\xa0","-":"",_:"-","{":"{","}":"}","\\":"\\"},n="\u20ac\x81\u201a\u0192\u201e\u2026\u2020\u2021\u02c6\u2030\u0160\u2039\u0152\x8d\u017d\x8f\x90\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u02dc\u2122\u0161\u203a\u0153\x9d\u017e\u0178\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"},52039:(e,exports,t)=>{async function r(e,r={}){const{spawn:n}=await Promise.resolve().then(t.t.bind(t,35317,23))
121
+ return new Promise((t=>{const o="win32"===process.platform,s=o?n(e,{cwd:r.cwd??process.cwd(),env:r.env,shell:"cmd.exe",stdio:["pipe","pipe","pipe"],detached:!1}):n("/bin/sh",["-c",exports.RUN_FROM_ENV],{cwd:r.cwd??process.cwd(),env:{...r.env??process.env,[exports.RUN_ENV_VAR]:e},stdio:["pipe","pipe","pipe"],detached:!0}),a=[],i=[]
122
+ let c=!1,l=!1
123
+ const u=e=>{if(s.pid)try{o?s.kill(e):process.kill(-s.pid,e)}catch{}}
124
+ let d,p
125
+ r.onKillReady?.(((e="SIGTERM")=>{u(e),"SIGKILL"!==e&&setTimeout((()=>{l||u("SIGKILL")}),2e3)})),r.timeoutMs&&r.timeoutMs>0&&(p=setTimeout((()=>{c=!0,u("SIGTERM"),d=setTimeout((()=>{l||u("SIGKILL")}),2e3)}),r.timeoutMs)),s.stdout?.on("data",(e=>{a.push(e),r.onChunk?.("stdout",e)})),s.stderr?.on("data",(e=>{i.push(e),r.onChunk?.("stderr",e)}))
126
+ const f=e=>{l||(l=!0,p&&clearTimeout(p),d&&clearTimeout(d),t({stdout:Buffer.concat(a).toString("utf-8"),stderr:Buffer.concat(i).toString("utf-8"),exitCode:e,timedOut:c}))}
127
+ s.on("close",(e=>f(e??(c?124:1)))),s.on("error",(()=>f(1)))}))}Object.defineProperty(exports,"__esModule",{value:!0}),exports.RUN_ENV_VAR=exports.RUN_FROM_ENV=exports.RUN_PARSE_FAILED_EXIT=void 0,exports.exitMeansCouldNotRun=function(e){return e===exports.RUN_PARSE_FAILED_EXIT||127===e},exports.execAsync=async function(e,t={}){return new Promise(((r,o)=>{const[s,...a]=e.split(" "),i=(0,n.spawn)(s,a,{cwd:t.cwd||process.cwd(),stdio:["pipe","pipe","pipe"]})
128
+ let c="",l=""
129
+ i.stdout?.on("data",(e=>{c+=e.toString()})),i.stderr?.on("data",(e=>{l+=e.toString()})),i.on("close",(e=>{r({stdout:c,stderr:l,exitCode:e||0})})),i.on("error",(t=>{o(new Error(`Command failed: ${e}\nError: ${t.message}`))})),t.timeout&&setTimeout((()=>{i.kill(),o(new Error(`Command timed out: ${e}`))}),t.timeout)}))},exports.runShellCommand=r,exports.runTrackedShellCommand=async function(e,n,o){const{getActionServerBaseUrl:s}=await t.e(603).then(t.bind(t,53603)),a=s(),i=(new Date).toISOString(),c=n.cwd??process.cwd()
130
+ let l
131
+ fetch(`${a}/api/commands/start`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:o.id,name:o.name,command:e,cwd:c,sessionId:o.sessionId,startedAt:i,logPath:o.logPath,timeoutMs:n.timeoutMs}),signal:AbortSignal.timeout(2e3)}).catch((()=>{}))
132
+ try{l=await r(e,n)}catch(e){throw fetch(`${a}/api/commands/end`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:o.id,exitCode:1,timedOut:!1,finishedAt:(new Date).toISOString()}),signal:AbortSignal.timeout(2e3)}).catch((()=>{})),e}return fetch(`${a}/api/commands/end`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:o.id,exitCode:l.exitCode,timedOut:l.timedOut,finishedAt:(new Date).toISOString()}),signal:AbortSignal.timeout(2e3)}).catch((()=>{})),l}
133
+ const n=t(35317)
134
+ exports.RUN_PARSE_FAILED_EXIT=125,exports.RUN_FROM_ENV=["c=$ALCHEMY_RUN_CMD; unset ALCHEMY_RUN_CMD",`if (set -o pipefail) 2>/dev/null; then set -o pipefail; sh -n -c "$c" || exit ${exports.RUN_PARSE_FAILED_EXIT}; eval "$c"`,`elif command -v bash >/dev/null 2>&1; then ALCHEMY_RUN_CMD=$c; export ALCHEMY_RUN_CMD; exec bash -o pipefail -c 'c=$ALCHEMY_RUN_CMD; unset ALCHEMY_RUN_CMD; bash -n -c "$c" || exit ${exports.RUN_PARSE_FAILED_EXIT}; eval "$c"'`,`else sh -n -c "$c" || exit ${exports.RUN_PARSE_FAILED_EXIT}; eval "$c"; fi`].join("\n"),exports.RUN_ENV_VAR="ALCHEMY_RUN_CMD"},53157:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.hardenedCreateArgs=function(e){return["--network",e.network,"--user",e.user,"--cap-drop","ALL",...(e.capAdds??[]).flatMap((e=>["--cap-add",e])),...Object.entries(e.sysctls??{}).flatMap((([e,t])=>["--sysctl",`${e}=${t}`])),"--security-opt","no-new-privileges","--read-only","--tmpfs","/tmp:rw,nosuid,nodev,exec,size=256m",...(e.extraTmpfs??[]).flatMap((e=>["--tmpfs",e])),"--ipc","none","--tmpfs",`/dev/shm:rw,nosuid,nodev,size=${e.shmSizeMb??64}m`,"--memory",e.memory,"--memory-swap",e.memory,"--cpus",String(e.cpus),"--pids-limit",String(e.pidsLimit),"-e","HOME=/tmp"]}},64264:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.SCRATCH_VOLUME_ARGS=void 0,exports.scratchTmpfsArg=function(e){return`/scratch:rw,nosuid,nodev,exec,size=${e}m`},exports.claimScratch=async function(e,t,n){const o=await(0,r.docker)(["run","--rm","--network","none","--user","0:0","--volumes-from",e,"--entrypoint","chown",t,n,"/scratch"],r.DOCKER_OP_TIMEOUT_MS)
118
135
  return 0===o.exit?null:o.spawnError??((o.stderr||"").trim()||`chown exited ${o.exit}`)}
119
136
  const r=t(6175)
120
137
  exports.SCRATCH_VOLUME_ARGS=["--mount","type=volume,dst=/scratch"]},64936:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.ContainerRunner=void 0
@@ -134,7 +151,7 @@ try{const t=await(0,r.docker)(["start",d],r.DOCKER_OP_TIMEOUT_MS)
134
151
  if(c("start"),0!==t.exit)return{steps:[],ok:!1,error:`docker start failed: ${(t.stderr||String(t.exit)).trim()}`}
135
152
  const s=[]
136
153
  let i=await(0,a.readOomKills)(d)??0
137
- for(const t of e.steps){const n=Date.now(),c=await(0,r.docker)(["exec",d,"/bin/sh","-c",(0,o.withShellInit)(e.shellInit,t.run)],t.timeoutMs??this.stepTimeoutMs),l=Date.now()-n,u=await(0,a.readOomKills)(d),p=null!=u?Math.max(0,u-i):0
154
+ for(const t of e.steps){const n=Date.now(),c=await(0,r.docker)(["exec","-e",`${o.RUN_ENV_VAR}=${(0,o.withShellInit)(e.shellInit,t.run)}`,d,"/bin/sh","-c",o.RUN_FROM_ENV],t.timeoutMs??this.stepTimeoutMs),l=Date.now()-n,u=await(0,a.readOomKills)(d),p=null!=u?Math.max(0,u-i):0
138
155
  null!=u&&(i=u)
139
156
  const f=p>0?`${c.stderr}${c.stderr&&!c.stderr.endsWith("\n")?"\n":""}${(0,a.oomNote)(p,this.resources.memory??"1g")}\n`:c.stderr
140
157
  s.push({run:t.run,exit:c.exit,stdout:c.stdout,stderr:f,ms:l,timedOut:c.timedOut})}return c("commands"),{steps:s,ok:s.every((e=>0===e.exit)),phaseMs:n}}finally{const e=Date.now()
@@ -188,7 +205,7 @@ return{path:`${t}/_rels/${e.slice(e.lastIndexOf("/")+1)}.rels`,dir:t}}function l
188
205
  return r?`[image: ${r}]`:"[image]"}async function u(e,t){const r=new Map
189
206
  for(const[o,s]of t){if(!/charts\/chart[^/]*\.xml$/.test(s))continue
190
207
  const t=await n(e,s)
191
- t&&r.set(o,d(t))}return r}function d(e){const t=p(e),r=[...new Set([...t.matchAll(/<(\w+Chart)\b/g)].map((e=>P[e[1]])).filter(Boolean))]
208
+ t&&r.set(o,d(t))}return r}function d(e){const t=p(e),r=[...new Set([...t.matchAll(/<(\w+Chart)\b/g)].map((e=>A[e[1]])).filter(Boolean))]
192
209
  "bar"===r[0]&&/<barDir val="col"/.test(t)&&(r[0]="column")
193
210
  const n=t.split("<plotArea")[0],s=/<title>([\s\S]*?)<\/title>/.exec(n)?.[1],a=s?[...s.matchAll(/<t>([\s\S]*?)<\/t>/g)].map((e=>o(e[1]))).join("").trim():"",i=[...t.matchAll(/<ser>([\s\S]*?)<\/ser>/g)].map((e=>{const t=e[1],r=/<tx>([\s\S]*?)<\/tx>/.exec(t)?.[1]??"",n=o(/<v>([\s\S]*?)<\/v>/.exec(r)?.[1]??/<f>([\s\S]*?)<\/f>/.exec(r)?.[1]??"").trim(),s=e=>{if(!e)return""
194
211
  const t=/<f>([\s\S]*?)<\/f>/.exec(e)?.[1],r=[...e.matchAll(/<v>([\s\S]*?)<\/v>/g)].map((e=>o(e[1])))
@@ -263,7 +280,7 @@ return r-1}function w(e){let t=""
263
280
  for(let r=e+1;r>0;r=Math.floor((r-1)/26))t=String.fromCharCode(65+(r-1)%26)+t
264
281
  return t}function g(e,t){const r=[]
265
282
  let n=0,a=!1
266
- for(const i of e.matchAll(/<row\b([^>]*?)(?:\/>|>([\s\S]*?)<\/row>)/g)){if(r.length>=C){a=!0
283
+ for(const i of e.matchAll(/<row\b([^>]*?)(?:\/>|>([\s\S]*?)<\/row>)/g)){if(r.length>=T){a=!0
267
284
  break}const e=i[2]??"",c=[]
268
285
  let l=0
269
286
  for(const r of e.matchAll(/<c\b([^>]*?)(?:\/>|>([\s\S]*?)<\/c>)/g)){const e=s(r[1],"r"),n=e?b(e):l
@@ -277,19 +294,19 @@ for(const e of n.matchAll(/<pic\b[^>]*>[\s\S]*?<\/pic>|<graphicFrame\b[^>]*>[\s\
277
294
  if(/^<pic\b/.test(n)){const e=/<cNvPr\b([^>]*)\/?>/.exec(n)?.[1]??""
278
295
  r.push(l(s(e,"descr"),s(e,"name")))
279
296
  continue}const o=/<chart\b[^>]*r:id="([^"]+)"/.exec(n)?.[1]
280
- o&&r.push(t.get(o)??"[chart]")}return r}function k(e){const t=[]
297
+ o&&r.push(t.get(o)??"[chart]")}return r}function E(e){const t=[]
281
298
  for(const r of e.matchAll(/<a:p\b[^>]*>([\s\S]*?)<\/a:p>/g)){const e=[]
282
299
  for(const t of r[1].matchAll(/<a:t\b[^>]*>([\s\S]*?)<\/a:t>|<a:br\b[^>]*\/>/g))e.push(void 0!==t[1]?o(t[1]):"\n")
283
300
  const n=e.join("").trim()
284
- n&&t.push(n)}return t}async function v(e,t,o){const s=await r(e),a=(await n(s,"mimetype"))?.trim(),i=await n(s,"content.xml")
301
+ n&&t.push(n)}return t}async function k(e,t,o){const s=await r(e),a=(await n(s,"mimetype"))?.trim(),i=await n(s,"content.xml")
285
302
  if(!i||a&&a!==t)throw new Error(`not an OpenDocument ${o} (${i?`its mimetype is ${a}`:"content.xml is missing"})`)
286
303
  const c=new Map
287
304
  for(const e of Object.keys(s.files)){const t=/^(.+)\/content\.xml$/.exec(e)?.[1]
288
305
  if(!t)continue
289
306
  const r=await n(s,e)
290
- r&&/<chart:chart\b/.test(r)&&c.set(t,E(r))}return{xml:i.split(/<office:body\b/)[1]??i,objects:c}}function O(e,t){return e.object?t.get((e.href??"").replace(/^\.\//,""))??`[embedded object: ${(e.desc||e.title||e.name||"unnamed").trim()}]`:e.image?l(e.desc||e.title,e.name):null}function E(e){const t=/chart:class="chart:(\w+)"/.exec(e)?.[1]??"chart",r=[...(/<chart:title\b[^>]*>([\s\S]*?)<\/chart:title>/.exec(e)?.[1]??"").matchAll(/<text:p\b[^>]*>([\s\S]*?)<\/text:p>/g)].map((e=>o(e[1].replace(/<[^>]+>/g,"")))).join(" ").trim(),n=[],a=/<table:table\b[^>]*table:name="local-table"[^>]*>([\s\S]*?)<\/table:table>/.exec(e)?.[1]
307
+ r&&/<chart:chart\b/.test(r)&&c.set(t,O(r))}return{xml:i.split(/<office:body\b/)[1]??i,objects:c}}function v(e,t){return e.object?t.get((e.href??"").replace(/^\.\//,""))??`[embedded object: ${(e.desc||e.title||e.name||"unnamed").trim()}]`:e.image?l(e.desc||e.title,e.name):null}function O(e){const t=/chart:class="chart:(\w+)"/.exec(e)?.[1]??"chart",r=[...(/<chart:title\b[^>]*>([\s\S]*?)<\/chart:title>/.exec(e)?.[1]??"").matchAll(/<text:p\b[^>]*>([\s\S]*?)<\/text:p>/g)].map((e=>o(e[1].replace(/<[^>]+>/g,"")))).join(" ").trim(),n=[],a=/<table:table\b[^>]*table:name="local-table"[^>]*>([\s\S]*?)<\/table:table>/.exec(e)?.[1]
291
308
  if(a)for(const e of a.matchAll(/<table:table-row\b[^>]*>([\s\S]*?)<\/table:table-row>/g)){const t=[]
292
- for(const r of e[1].matchAll(/<table:(?:table-cell|covered-table-cell)\b([^>]*?)(?:\/>|>([\s\S]*?)<\/table:(?:table-cell|covered-table-cell)>)/g)){const e=o([...(r[2]??"").matchAll(/<text:p\b[^>]*>([\s\S]*?)<\/text:p>/g)].map((e=>e[1].replace(/<[^>]+>/g,""))).join(" ")).trim()||s(r[1],"office:value")||"",n=Math.min(Math.max(1,Number(s(r[1],"table:number-columns-repeated")??1)||1),R)
309
+ for(const r of e[1].matchAll(/<table:(?:table-cell|covered-table-cell)\b([^>]*?)(?:\/>|>([\s\S]*?)<\/table:(?:table-cell|covered-table-cell)>)/g)){const e=o([...(r[2]??"").matchAll(/<text:p\b[^>]*>([\s\S]*?)<\/text:p>/g)].map((e=>e[1].replace(/<[^>]+>/g,""))).join(" ")).trim()||s(r[1],"office:value")||"",n=Math.min(Math.max(1,Number(s(r[1],"table:number-columns-repeated")??1)||1),P)
293
310
  for(let r=0;r<n;r++)t.push(e)}n.push(t)}const i=e=>{const t=/^\$?([A-Z]+)\$?(\d+)$/.exec(e)
294
311
  return t?{col:b(t[1]),row:Number(t[2])-1}:null},c=e=>{if(!e)return""
295
312
  const t=e.split(":").map((e=>({table:e.slice(0,e.lastIndexOf(".")).replace(/^'(.*)'$/,"$1"),ref:e.slice(e.lastIndexOf(".")+1)})))
@@ -300,21 +317,21 @@ for(let t=e.row;t<=r.row;t++)for(let s=e.col;s<=r.col;s++)o.push(n[t]?.[s]??"")
300
317
  return`${o.slice(0,8).join(", ")}${o.length>8?`, ... (${o.length})`:""}`}const r=t.map((e=>e.ref.replace(/\$/g,"")))
301
318
  return`${t[0].table?`${t[0].table}!`:""}${2===r.length&&r[0]===r[1]?r[0]:r.join(":")}`},l=c(/<chart:categories\b[^>]*table:cell-range-address="([^"]+)"/.exec(e)?.[1]),u=[...e.matchAll(/<chart:series\b([^>]*)>/g)].map((e=>{const t=c(s(e[1],"chart:values-cell-range-address"))
302
319
  return`${c(s(e[1],"chart:label-cell-address"))||"series"}${t?`: ${t}`:""}${l?` by ${l}`:""}`}))
303
- return`[chart: ${N[t]??t}${r?` "${r}"`:""}${u.length?`; ${u.join("; ")}`:""}]`}function $(e){return e.replace(/^[a-z]+:/i,"").replace(/^=/,"").replace(/\[([^\]]*)\]/g,((e,t)=>t.split(":").map((e=>{const t=e.lastIndexOf("."),r=e.slice(0,t).replace(/^\$/,"").replace(/^'(.*)'$/,"$1"),n=e.slice(t+1).replace(/\$/g,"")
320
+ return`[chart: ${D[t]??t}${r?` "${r}"`:""}${u.length?`; ${u.join("; ")}`:""}]`}function $(e){return e.replace(/^[a-z]+:/i,"").replace(/^=/,"").replace(/\[([^\]]*)\]/g,((e,t)=>t.split(":").map((e=>{const t=e.lastIndexOf("."),r=e.slice(0,t).replace(/^\$/,"").replace(/^'(.*)'$/,"$1"),n=e.slice(t+1).replace(/\$/g,"")
304
321
  return r?`${r}!${n}`:n})).join(":")))}function y(e,t,r){switch(e){case"text:tab":return r.push("\t"),!0
305
322
  case"text:line-break":return r.push("\n"),!0
306
323
  case"text:s":return r.push(" ".repeat(Math.min(100,Number(s(t,"text:c")??1)||1))),!0
307
324
  default:return!1}}function M(e,t=new Map){const r=[],n=[],a=new L
308
325
  let i=0,c=0,l=null,u=null
309
- for(const d of e.matchAll(A)){const[,e,p,f,m,h]=d
326
+ for(const d of e.matchAll(j)){const[,e,p,f,m,h]=d
310
327
  if(void 0!==h){if(c)continue
311
328
  u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))
312
- continue}if(F.has(p)){m||(c+=e?-1:1)
329
+ continue}if(N.has(p)){m||(c+=e?-1:1)
313
330
  continue}if(c)continue
314
331
  const b=n[n.length-1]
315
332
  if(e)switch(p){case"svg:title":case"svg:desc":u=null
316
333
  break
317
- case"draw:frame":{const e=l?O(l,t):null
334
+ case"draw:frame":{const e=l?v(l,t):null
318
335
  if(l=null,!e)break
319
336
  a.current?a.pushSpaced(e):b?.cell?b.cell.push(e):r.push(e)
320
337
  break}case"text:p":case"text:h":{const e=a.close()
@@ -351,25 +368,25 @@ case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href")
351
368
  break
352
369
  case"svg:title":case"svg:desc":!m&&l&&(u="svg:title"===p?"title":"desc")}}}return r.join("\n").replace(/\n{3,}/g,"\n\n").trim()}function S(e,t=new Map){const r=[]
353
370
  let n=!1,a=null,i=null,c=null,l=null,u=null,d=0,p=!1
354
- for(const f of e.matchAll(A)){const[,e,m,h,b,w]=f
371
+ for(const f of e.matchAll(j)){const[,e,m,h,b,w]=f
355
372
  if(void 0!==w){if(d)continue
356
373
  u&&l?l[u]=(l[u]??"")+o(w):c&&p&&c.parts.push(o(w))
357
- continue}if(F.has(m)){b||(d+=e?-1:1)
374
+ continue}if(N.has(m)){b||(d+=e?-1:1)
358
375
  continue}if(d)continue
359
376
  const g=()=>{if(!c||!i)return
360
377
  let e=c.parts.join("").trim()||c.value||""
361
- if(c.formula&&(e=`${e}${e?" ":""}(=${$(c.formula)})`),e)for(let t=0;t<Math.min(c.repeat,R);t++)i.cells[i.col+t]=e.replace(/[\t\r\n]+/g," ")
378
+ if(c.formula&&(e=`${e}${e?" ":""}(=${$(c.formula)})`),e)for(let t=0;t<Math.min(c.repeat,P);t++)i.cells[i.col+t]=e.replace(/[\t\r\n]+/g," ")
362
379
  i.col+=c.repeat,c=null}
363
380
  if(e)switch(m){case"svg:title":case"svg:desc":u=null
364
381
  break
365
- case"draw:frame":{const e=l?O(l,t):null
382
+ case"draw:frame":{const e=l?v(l,t):null
366
383
  l=null,e&&a&&a.figures.push(e)
367
384
  break}case"text:p":p=!1
368
385
  break
369
386
  case"table:table-cell":case"table:covered-table-cell":g()
370
387
  break
371
388
  case"table:table-row":if(!i||!a)break
372
- if(i.cells.some((e=>void 0!==e))){for(let e=0;e<Math.min(i.repeat,D);e++){if(a.rows.length>=C){n=!0
389
+ if(i.cells.some((e=>void 0!==e))){for(let e=0;e<Math.min(i.repeat,F);e++){if(a.rows.length>=T){n=!0
373
390
  break}a.rows.push({n:a.rowIndex+e+1,cells:i.cells})}a.width=Math.max(a.width,i.cells.length)}a.rowIndex+=i.repeat,i=null
374
391
  break
375
392
  case"table:table":if(!a)break
@@ -390,17 +407,17 @@ case"draw:image":l&&(l.image=!0)
390
407
  break
391
408
  case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(h,"xlink:href"))
392
409
  break
393
- case"svg:title":case"svg:desc":!b&&l&&(u="svg:title"===m?"title":"desc")}}return{sheets:r,truncated:n}}function T(e,t=new Map){const r=[]
410
+ case"svg:title":case"svg:desc":!b&&l&&(u="svg:title"===m?"title":"desc")}}return{sheets:r,truncated:n}}function I(e,t=new Map){const r=[]
394
411
  let n=null
395
412
  const a=new L
396
413
  let i=0,c=0,l=null,u=null
397
- for(const d of e.matchAll(A)){const[,e,p,f,m,h]=d
398
- if(void 0===h){if(F.has(p))m||(c+=e?-1:1)
414
+ for(const d of e.matchAll(j)){const[,e,p,f,m,h]=d
415
+ if(void 0===h){if(N.has(p))m||(c+=e?-1:1)
399
416
  else if(!c)if(e)switch(p){case"svg:title":case"svg:desc":u=null
400
417
  break
401
418
  case"text:p":case"text:h":{const e=a.close()
402
419
  !e?.plain||!n||i&&/^<number>$/.test(e.plain)||(i?n.notes:n.lines).push(e.plain)
403
- break}case"draw:frame":{const e=l?O(l,t):null
420
+ break}case"draw:frame":{const e=l?v(l,t):null
404
421
  l=null,e&&n&&n.lines.push(e)
405
422
  break}case"presentation:notes":i=Math.max(0,i-1)
406
423
  break
@@ -421,9 +438,9 @@ break
421
438
  case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
422
439
  break
423
440
  case"svg:title":case"svg:desc":!m&&l&&(u="svg:title"===p?"title":"desc")}}}else{if(c)continue
424
- u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))}}return r}Object.defineProperty(exports,"__esModule",{value:!0}),exports.MAX_DOCUMENT_BYTES=void 0,exports.documentKindFor=function(e){const t=(0,I.formatFor)(e)
441
+ u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))}}return r}Object.defineProperty(exports,"__esModule",{value:!0}),exports.MAX_DOCUMENT_BYTES=void 0,exports.documentKindFor=function(e){const t=(0,C.formatFor)(e)
425
442
  return t?.text?t.kind:void 0},exports.extractDocumentText=async function e(o,i,c={}){if(o.byteLength>exports.MAX_DOCUMENT_BYTES)throw new Error(`file is ${(o.byteLength/1048576).toFixed(1)} MB; text extraction stops at ${exports.MAX_DOCUMENT_BYTES/1048576} MB`)
426
- const l=(0,I.formatOfKind)(i).textVia
443
+ const l=(0,C.formatOfKind)(i).textVia
427
444
  if(l){if(!c.convert)throw new Error(`.${i} files are read by converting them in the office box, which is not reachable from here`)
428
445
  const t=await e(await c.convert(o,i,l),l)
429
446
  return{...t,kind:i,note:`Converted from .${i} to .${l} in the office box first. ${t.note??""}`.trim()}}switch(i){case"pdf":return async function(e){const r=await Promise.resolve().then(t.t.bind(t,88891,23)),{getDocumentProxy:n,extractText:o}=r?.default??r,s=await n(new Uint8Array(e),{isEvalSupported:!1})
@@ -441,7 +458,7 @@ if(d++,!p){l.push(`## Sheet: ${r}\n(empty)`)
441
458
  continue}const{text:f,truncated:h}=g(p,c)
442
459
  u=u||h
443
460
  const b=await m(t,a)
444
- l.push(`## Sheet: ${r}\n${f||"(empty)"}${b.length?`\n\n${b.join("\n")}`:""}`)}return{kind:"xlsx",text:l.join("\n\n"),units:d,note:"Cell values as tab-separated rows (column letters in the header); a formula shows as its last computed value followed by (=formula). Charts and pictures are listed under their sheet. Dates show as numbers."+(u?` Sheets over ${C} rows are cut off.`:"")}}(o)
461
+ l.push(`## Sheet: ${r}\n${f||"(empty)"}${b.length?`\n\n${b.join("\n")}`:""}`)}return{kind:"xlsx",text:l.join("\n\n"),units:d,note:"Cell values as tab-separated rows (column letters in the header); a formula shows as its last computed value followed by (=formula). Charts and pictures are listed under their sheet. Dates show as numbers."+(u?` Sheets over ${T} rows are cut off.`:"")}}(o)
445
462
  case"pptx":return async function(e){const t=await r(e),o=await n(t,"ppt/presentation.xml")
446
463
  if(!o)throw new Error("not a PowerPoint deck (ppt/presentation.xml is missing)")
447
464
  const i=a(await n(t,"ppt/_rels/presentation.xml.rels"),"ppt")
@@ -449,36 +466,39 @@ let c=[...o.matchAll(/<p:sldId\b([^>]*)\/?>/g)].map((e=>{const t=s(e[1],"r:id")
449
466
  return t?i.get(t):void 0})).filter((e=>!!e))
450
467
  c.length||(c=Object.keys(t.files).filter((e=>/^ppt\/slides\/slide\d+\.xml$/.test(e))).sort(((e,t)=>Number(/(\d+)\.xml$/.exec(e)[1])-Number(/(\d+)\.xml$/.exec(t)[1]))))
451
468
  const l=[]
452
- for(let e=0;e<c.length;e++){const r=c[e],o=await n(t,r),s=o?k(o):[],i=r.slice(0,r.lastIndexOf("/")),d=r.slice(r.lastIndexOf("/")+1),p=a(await n(t,`${i}/_rels/${d}.rels`),i)
469
+ for(let e=0;e<c.length;e++){const r=c[e],o=await n(t,r),s=o?E(o):[],i=r.slice(0,r.lastIndexOf("/")),d=r.slice(r.lastIndexOf("/")+1),p=a(await n(t,`${i}/_rels/${d}.rels`),i)
453
470
  o&&s.push(..._(o,await u(t,p)))
454
- const f=[...p.values()].find((e=>/notesSlide\d*\.xml$/.test(e))),m=f?await n(t,f):void 0,h=m?k(m).filter((e=>!/^(\d+|<number>)$/.test(e))):[]
471
+ const f=[...p.values()].find((e=>/notesSlide\d*\.xml$/.test(e))),m=f?await n(t,f):void 0,h=m?E(m).filter((e=>!/^(\d+|<number>)$/.test(e))):[]
455
472
  let b=`## Slide ${e+1}\n${s.join("\n")||"(no text)"}`
456
473
  h.length&&(b+=`\n\nNotes:\n${h.join("\n")}`),l.push(b)}return{kind:"pptx",text:l.join("\n\n"),units:c.length,note:"Slide text and speaker notes; pictures show as [image: alt text] and charts as a one-line summary; layout is dropped. To see a slide, view_asset this path."}}(o)
457
- case"odt":return async function(e){const{xml:t,objects:r}=await v(e,"application/vnd.oasis.opendocument.text","text document")
474
+ case"odt":return async function(e){const{xml:t,objects:r}=await k(e,"application/vnd.oasis.opendocument.text","text document")
458
475
  return{kind:"odt",text:M(t,r),note:"Text, headings, lists and tables; pictures show as [image: alt text] and charts as a one-line summary; notes, comments and formatting are dropped. To see the pages, view_asset this path."}}(o)
459
- case"ods":return async function(e){const{xml:t,objects:r}=await v(e,"application/vnd.oasis.opendocument.spreadsheet","spreadsheet"),{sheets:n,truncated:o}=S(t,r)
460
- return{kind:"ods",text:n.map((e=>`## Sheet: ${e.name}\n${e.text||"(empty)"}${e.figures.length?`\n\n${e.figures.join("\n")}`:""}`)).join("\n\n"),units:n.length,note:"Cell values as tab-separated rows (column letters in the header); a formula shows as its value followed by (=formula). Charts and pictures are listed under their sheet."+(o?` Sheets over ${C} rows are cut off.`:"")}}(o)
461
- case"odp":return async function(e){const{xml:t,objects:r}=await v(e,"application/vnd.oasis.opendocument.presentation","presentation"),n=T(t,r)
476
+ case"ods":return async function(e){const{xml:t,objects:r}=await k(e,"application/vnd.oasis.opendocument.spreadsheet","spreadsheet"),{sheets:n,truncated:o}=S(t,r)
477
+ return{kind:"ods",text:n.map((e=>`## Sheet: ${e.name}\n${e.text||"(empty)"}${e.figures.length?`\n\n${e.figures.join("\n")}`:""}`)).join("\n\n"),units:n.length,note:"Cell values as tab-separated rows (column letters in the header); a formula shows as its value followed by (=formula). Charts and pictures are listed under their sheet."+(o?` Sheets over ${T} rows are cut off.`:"")}}(o)
478
+ case"odp":return async function(e){const{xml:t,objects:r}=await k(e,"application/vnd.oasis.opendocument.presentation","presentation"),n=I(t,r)
462
479
  return{kind:"odp",text:n.join("\n\n"),units:n.length,note:"Slide text and speaker notes; pictures show as [image: alt text] and charts as a one-line summary; layout is dropped. To see a slide, view_asset this path."}}(o)
463
- case"rtf":return{kind:"rtf",text:(0,j.rtfToText)(o),note:"Text, paragraphs and table rows; styling, pictures and layout are dropped. To see the pages, view_asset this path."}
464
- default:throw new Error(`no text form for .${i}`)}},exports.decodeXml=o,exports.figureMarker=l,exports.chartXmlSummary=d,exports.stripElementPrefixes=p,exports.docxXmlToText=f,exports.parseSharedStrings=h,exports.sheetXmlToText=g,exports.slideFigures=_,exports.drawingMlParagraphs=k,exports.odfChartSummary=E,exports.odfFormula=$,exports.odtXmlToText=M,exports.odsXmlToText=S,exports.odpXmlToText=T
465
- const I=t(70610),j=t(50478)
480
+ case"rtf":return{kind:"rtf",text:(0,R.rtfToText)(o),note:"Text, paragraphs and table rows; styling, pictures and layout are dropped. To see the pages, view_asset this path."}
481
+ default:throw new Error(`no text form for .${i}`)}},exports.decodeXml=o,exports.figureMarker=l,exports.chartXmlSummary=d,exports.stripElementPrefixes=p,exports.docxXmlToText=f,exports.parseSharedStrings=h,exports.sheetXmlToText=g,exports.slideFigures=_,exports.drawingMlParagraphs=E,exports.odfChartSummary=O,exports.odfFormula=$,exports.odtXmlToText=M,exports.odsXmlToText=S,exports.odpXmlToText=I
482
+ const C=t(70610),R=t(50478)
466
483
  exports.MAX_DOCUMENT_BYTES=52428800
467
- const C=5e3,P={barChart:"bar",bar3DChart:"bar",lineChart:"line",line3DChart:"line",pieChart:"pie",pie3DChart:"pie",ofPieChart:"pie",doughnutChart:"doughnut",areaChart:"area",area3DChart:"area",scatterChart:"scatter",radarChart:"radar",bubbleChart:"bubble",stockChart:"stock",surfaceChart:"surface",surface3DChart:"surface"},A=/<(\/?)([A-Za-z][\w.-]*:[\w.-]+)\b([^>]*?)(\/?)>|([^<]+)/g,F=new Set(["text:note","office:annotation","text:tracked-changes","office:forms","text:sequence-decls"]),R=256,D=50,N={circle:"pie",ring:"doughnut"}
484
+ const T=5e3,A={barChart:"bar",bar3DChart:"bar",lineChart:"line",line3DChart:"line",pieChart:"pie",pie3DChart:"pie",ofPieChart:"pie",doughnutChart:"doughnut",areaChart:"area",area3DChart:"area",scatterChart:"scatter",radarChart:"radar",bubbleChart:"bubble",stockChart:"stock",surfaceChart:"surface",surface3DChart:"surface"},j=/<(\/?)([A-Za-z][\w.-]*:[\w.-]+)\b([^>]*?)(\/?)>|([^<]+)/g,N=new Set(["text:note","office:annotation","text:tracked-changes","office:forms","text:sequence-decls"]),P=256,F=50,D={circle:"pie",ring:"doughnut"}
468
485
  class L{constructor(){this.stack=[]}open(e,t){this.stack.push({parts:[],heading:e,listed:t})}get current(){return this.stack[this.stack.length-1]}push(e){this.current?.parts.push(e)}pushSpaced(e){const t=this.current?.parts
469
486
  if(!t)return
470
487
  const r=t[t.length-1]??""
471
488
  t.push(`${!r||/\s$/.test(r)?"":" "}${e} `)}close(){const e=this.stack.pop()
472
489
  if(!e)return null
473
490
  const t=e.parts.join("").replace(/[ \t]+\n/g,"\n").trim()
474
- return this.current?(t&&this.pushSpaced(t),null):{plain:t,line:t?e.heading?`${"#".repeat(Math.min(6,e.heading))} ${t}`:e.listed?`- ${t}`:t:""}}}}},o={}
475
- e.c=o,r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,e.t=function(n,o){if(1&o&&(n=this(n)),8&o)return n
491
+ return this.current?(t&&this.pushSpaced(t),null):{plain:t,line:t?e.heading?`${"#".repeat(Math.min(6,e.heading))} ${t}`:e.listed?`- ${t}`:t:""}}}}},s={}
492
+ e.m=o,e.c=s,r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,e.t=function(n,o){if(1&o&&(n=this(n)),8&o)return n
476
493
  if("object"==typeof n&&n){if(4&o&&n.__esModule)return n
477
494
  if(16&o&&"function"==typeof n.then)return n}var s=Object.create(null)
478
495
  e.r(s)
479
496
  var a={}
480
497
  t=t||[null,r({}),r([]),r(r)]
481
498
  for(var i=2&o&&n;"object"==typeof i&&!~t.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach((e=>a[e]=()=>n[e]))
482
- return a.default=()=>n,e.d(s,a),s},e.d=(exports,t)=>{for(var r in t)e.o(t,r)&&!e.o(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:t[r]})},e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=exports=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},e.nmd=module=>(module.paths=[],module.children||(module.children=[]),module)
483
- var s=e(e.s=15845)
484
- module.exports=s})()
499
+ return a.default=()=>n,e.d(s,a),s},e.d=(exports,t)=>{for(var r in t)e.o(t,r)&&!e.o(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:t[r]})},e.f={},e.e=t=>Promise.all(Object.keys(e.f).reduce(((r,n)=>(e.f[n](t,r),r)),[])),e.u=e=>e+".js",e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=exports=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},e.nmd=module=>(module.paths=[],module.children||(module.children=[]),module),n={830:1},e.f.require=t=>{n[t]||(t=>{var r=t.modules,o=t.ids,s=t.runtime
500
+ for(var a in r)e.o(r,a)&&(e.m[a]=r[a])
501
+ s&&s(e)
502
+ for(var i=0;i<o.length;i++)n[o[i]]=1})(require("./"+e.u(t)))}
503
+ var a=e(e.s=15845)
504
+ module.exports=a})()