alchemylab 2.0.2 → 2.1.0

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.
@@ -2,76 +2,25 @@
2
2
  function e(t){var r=s[t]
3
3
  if(void 0!==r)return r.exports
4
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
- if(0===t.exit){const e=/^oom_kill (\d+)/m.exec(t.stdout)
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
- if(0===o.exit){const e=/^oom_kill (\d+)/m.exec(o.stdout)
9
- if(e)return Number(e[1])}return null},exports.probeBox=async function(e){const t=`cat /sys/fs/cgroup/memory.events 2>/dev/null || cat /sys/fs/cgroup/memory/memory.oom_control 2>/dev/null; if [ -s ${exports.LIVE_FRAME_PATH} ]; then echo __ALCHEMY_LIVE_FRAME__; fi`,o=await(0,r.docker)(["exec",e,"/bin/sh","-c",t],n),s=/^oom_kill (\d+)/m.exec(o.stdout)
10
- return{oomKills:s?Number(s[1]):null,liveFrame:o.stdout.includes("__ALCHEMY_LIVE_FRAME__")}},exports.oomNote=function(e,t){return`[AlchemyLab] Out of memory: the kernel killed ${1===e?"a process":`${e} processes`} in this box during this command (the box's memory cap is ${t}). Exit code 137 means killed. Make the case smaller, or raise the environment's memory (resources.memory).`}
11
- const r=t(6175),n=5e3
12
- exports.LIVE_FRAME_PATH="/tmp/.alchemy_live.png"},6175:(e,exports,t)=>{function r(){return{...c?{"alchemy.project":c}:{},...l.getStore()??{}}}function n(e){if("create"!==e[0]&&"run"!==e[0])return e
13
- const t=new Set
14
- e.forEach(((r,n)=>{"--label"===e[n-1]&&t.add(r.split("=")[0])}))
15
- const n=Object.entries(r()).filter((([e])=>!t.has(e))).flatMap((([e,t])=>["--label",`${e}=${t.replace(/[\r\n]/g," ").slice(0,200)}`]))
16
- return n.length?[e[0],...n,...e.slice(1)]:e}function o(e,t){return new Promise((r=>{(0,s.execFile)("docker",n(e),{timeout:t,killSignal:"SIGKILL",maxBuffer:33554432,windowsHide:!0},((e,t,n)=>{if(!e)return void r({exit:0,stdout:t,stderr:n,timedOut:!1})
17
- const o=e
18
- if("ENOENT"===o.code)return void r({exit:-1,stdout:t??"",stderr:n??"",timedOut:!1,spawnError:"docker CLI not found on PATH"})
19
- const s=!0===o.killed||"SIGKILL"===o.signal,a="number"==typeof o.code?o.code:-1
20
- r({exit:a,stdout:t??"",stderr:n??"",timedOut:s})}))}))}Object.defineProperty(exports,"__esModule",{value:!0}),exports.PULL_TIMEOUT_MS=exports.DOCKER_OP_TIMEOUT_MS=void 0,exports.setContainerProject=function(e){c=e||void 0},exports.withContainerLabels=function(e,t){const r=Object.fromEntries(Object.entries(e).filter((([,e])=>"string"==typeof e&&e.length>0)))
21
- return l.run({...l.getStore()??{},...r},t)},exports.containerLabels=r,exports.withScopeLabels=n,exports.docker=o,exports.volumeExists=async function(e){return 0===(await o(["volume","inspect",e],exports.DOCKER_OP_TIMEOUT_MS)).exit},exports.ensureImage=async function(e){const t=(0,i.localRecipeFor)(e)
22
- if(t)return(0,i.ensureLocalImage)(t)
23
- const r=await o(["image","inspect",e],exports.DOCKER_OP_TIMEOUT_MS)
24
- if(r.spawnError)return r.spawnError
25
- if(0===r.exit)return
26
- const n=await o(["pull",e],exports.PULL_TIMEOUT_MS)
27
- return 0!==n.exit?`docker pull ${e} failed: ${(n.stderr||String(n.exit)).trim()}`:void 0}
28
- const s=t(31421),a=t(16698),i=t(69968)
29
- let c
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.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
- if(!e)return r
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, 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
- 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",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"})
40
- if(!n.ok)throw new Error(n.error)
41
- return n.bytes}async function r(e){const r=(0,u.documentKindFor)(e)
42
- if(!r)return`(AlchemyLab: no text form for ${e.split(".").pop()} files)\n`
43
- try{const n=await(0,u.extractDocumentText)(new Uint8Array(await(0,i.readFile)(e)),r,{convert:t})
44
- return n.text.endsWith("\n")?n.text:`${n.text}\n`}catch(e){return`(AlchemyLab: could not read this ${r.toUpperCase()} version: ${e instanceof Error?e.message:String(e)})\n`}}module=e.nmd(module)
45
- var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
46
- var o=Object.getOwnPropertyDescriptor(t,r)
47
- o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[]
48
- for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
49
- return t},n(e)},function(e){if(e&&e.__esModule)return e
50
- var t={}
51
- if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
52
- return s(t,e),t})
53
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.textconv=r
54
- const i=e(91943),c=a(e(70857)),l=a(e(16928)),u=e(98335),d=e(24716)
55
- if(e.c[e.s]===module){const e=process.argv[2]
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()
5
+ return o[t].call(module.exports,module,module.exports,e),module.loaded=!0,module.exports}var t,r,n,o={2203:module=>{module.exports=require("stream")},2566:(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
6
  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()
7
+ var r=t(44600)
8
+ 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}})},3517:function(e,exports,t){function r(e,t){const r=d.extname(e).slice(1).toLowerCase()
60
9
  return b[t].includes(r)}function n(e,t){const r=e=>`'${e.replace(/'/g,"'\\''")}'`,n=`/work/in/${e}`,o=e.replace(/\.[^.]+$/,"")
61
10
  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)
62
11
  var o=Object.getOwnPropertyDescriptor(t,r)
63
- o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||(o=function(e){return o=Object.getOwnPropertyNames||function(e){var t=[]
12
+ o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(o=function(e){return o=Object.getOwnPropertyNames||function(e){var t=[]
64
13
  for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
65
14
  return t},o(e)},function(e){if(e&&e.__esModule)return e
66
15
  var t={}
67
16
  if(null!=e)for(var r=o(e),n=0;n<r.length;n++)"default"!==r[n]&&s(t,e,r[n])
68
- return a(t,e),t})
17
+ return i(t,e),t})
69
18
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.RENDER_MIME=exports.MAX_RENDER_INPUT_BYTES=void 0,exports.canRender=r,exports.renderDocument=async function(e,t){const o=(s=e.filename,d.basename(s).replace(/[^A-Za-z0-9._-]+/g,"_").replace(/^\.+/,"")||"document")
70
19
  var s
71
20
  if(!r(o,e.to))return{ok:!1,error:`${d.extname(o)||"this file"} cannot be turned into ${e.to.toUpperCase()}`}
72
21
  if(e.bytes.length>exports.MAX_RENDER_INPUT_BYTES)return{ok:!1,error:`file is over ${exports.MAX_RENDER_INPUT_BYTES/1048576} MB`}
73
- const a=(0,c.createHash)("sha256").update(m.OFFICE_BOX_RECIPE_HASH).update("\0").update(e.to).update("\0").update(d.extname(o).toLowerCase()).update("\0").update(e.bytes).digest("hex"),i=d.join(t.cacheDir,`${a}.${e.to}`)
74
- try{return{ok:!0,bytes:await l.promises.readFile(i),cached:!0}}catch{}const b=t.image??"wait"
22
+ const i=(0,c.createHash)("sha256").update(m.OFFICE_BOX_RECIPE_HASH).update("\0").update(e.to).update("\0").update(d.extname(o).toLowerCase()).update("\0").update(e.bytes).digest("hex"),a=d.join(t.cacheDir,`${i}.${e.to}`)
23
+ try{return{ok:!0,bytes:await l.promises.readFile(a),cached:!0}}catch{}const b=t.image??"wait"
75
24
  if("wait"!==b){const e=(0,f.localRecipeFor)(m.OFFICE_BOX_IMAGE),t=await(0,f.localImageState)(e)
76
25
  if("no-docker"===t.state)return{ok:!1,error:t.error,unavailable:!0}
77
26
  if("building"===t.state)return{ok:!1,error:g,preparing:!0,since:t.since}
@@ -82,111 +31,90 @@ return{ok:!1,error:g,preparing:!0,since:t}}}const x=await l.promises.mkdtemp(d.j
82
31
  try{await l.promises.mkdir(d.join(x,"in")),await l.promises.mkdir(d.join(x,"out")),await l.promises.chmod(x,493),await l.promises.chmod(d.join(x,"in"),493),await l.promises.chmod(d.join(x,"out"),511),await l.promises.writeFile(d.join(x,"in",o),e.bytes,{mode:420})
83
32
  const r=new p.ContainerRunner({image:m.OFFICE_BOX_IMAGE,stepTimeoutMs:h,resources:{memory:"3g",shmSizeMb:256}}),s=await r.run({worktreePath:x,image:m.OFFICE_BOX_IMAGE,env:{HOME:"/scratch"},steps:[{run:n(o,e.to)}]})
84
33
  if(!s.ok){const e=s.steps[0]
85
- return{ok:!1,error:(s.error??`${(e?.stderr||e?.stdout||"").trim().split("\n").slice(-4).join(" ")}`)||"rendering failed",unavailable:!!s.error&&/docker|daemon|not found on PATH|Cannot connect/i.test(s.error)}}const a=(await l.promises.readdir(d.join(x,"out"))).find((t=>t.toLowerCase().endsWith(`.${e.to}`)))
86
- if(!a)return{ok:!1,error:`no ${e.to.toUpperCase()} was produced`}
87
- const c=await l.promises.readFile(d.join(x,"out",a))
88
- return await l.promises.mkdir(t.cacheDir,{recursive:!0}),await l.promises.writeFile(i,c),{ok:!0,bytes:c,cached:!1}}finally{await l.promises.rm(x,{recursive:!0,force:!0})}}
89
- const c=t(76982),l=t(79896),u=i(t(70857)),d=i(t(16928)),p=t(64936),f=t(69968),m=t(7740)
34
+ return{ok:!1,error:(s.error??`${(e?.stderr||e?.stdout||"").trim().split("\n").slice(-4).join(" ")}`)||"rendering failed",unavailable:!!s.error&&/docker|daemon|not found on PATH|Cannot connect/i.test(s.error)}}const i=(await l.promises.readdir(d.join(x,"out"))).find((t=>t.toLowerCase().endsWith(`.${e.to}`)))
35
+ if(!i)return{ok:!1,error:`no ${e.to.toUpperCase()} was produced`}
36
+ const c=await l.promises.readFile(d.join(x,"out",i))
37
+ return await l.promises.mkdir(t.cacheDir,{recursive:!0}),await l.promises.writeFile(a,c),{ok:!0,bytes:c,cached:!1}}finally{await l.promises.rm(x,{recursive:!0,force:!0})}}
38
+ const c=t(76982),l=t(79896),u=a(t(70857)),d=a(t(16928)),p=t(52429),f=t(83129),m=t(44853)
90
39
  exports.MAX_RENDER_INPUT_BYTES=52428800
91
40
  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"]}
92
41
  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"}
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")
94
- if(!/^\s*\{\s*\\rtf/i.test(o))throw new Error("not an RTF file (it does not start with {\\rtf)")
95
- const s=[],a=[{skip:!1,skipChars:0}],i=()=>a[a.length-1],c=e=>{i().skip||s.push(e)}
96
- for(let e=0;e<o.length;e++){const s=o[e]
97
- if("{"===s){a.push({...i()})
98
- continue}if("}"===s){a.length>1&&a.pop()
99
- continue}if("\r"===s||"\n"===s)continue
100
- if("\\"!==s){if(i().skipChars>0){i().skipChars--
101
- continue}c(s)
102
- continue}const u=/^\\([a-zA-Z]+)(-?\d+)? ?/.exec(o.slice(e))
103
- if(!u){const s=o[e+1]
104
- if("*"===s){const r=/^\\\*\\([a-zA-Z]+)/.exec(o.slice(e))
105
- r&&!t.has(r[1])||(i().skip=!0),e+=1
106
- continue}if("'"===s){const t=o.slice(e+2,e+4)
107
- if(e+=3,i().skipChars>0){i().skipChars--
108
- continue}c((l=parseInt(t,16)||0)<128?String.fromCharCode(l):n[l-128]??"")
109
- continue}if(void 0!==s&&void 0!==r[s]){c(r[s]),e+=1
110
- continue}e+=1
111
- continue}const[d,p,f]=u
112
- e+=d.length-1
113
- const m=void 0===f?void 0:Number(f)
114
- if(t.has(p))i().skip=!0
115
- else if("u"!==p)"uc"!==p?"cell"!==p&&"nestcell"!==p?"row"!==p&&"nestrow"!==p?void 0===r[p]||c(r[p]):c("\n"):c(" | "):i().ucSkip=m??1
116
- else{const e=i().skipChars>0
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
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*$/,"")
119
- return e.includes(" | ")?`| ${t} |`:t})).join("\n").trim()}
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)
135
- return 0===o.exit?null:o.spawnError??((o.stderr||"").trim()||`chown exited ${o.exit}`)}
136
- const r=t(6175)
137
- exports.SCRATCH_VOLUME_ARGS=["--mount","type=volume,dst=/scratch"]},64936:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.ContainerRunner=void 0
138
- const r=t(6175),n=t(53157),o=t(16603),s=t(64264),a=t(4703)
139
- exports.ContainerRunner=class{constructor(e={}){this.image=e.image??"node:20-alpine",this.stepTimeoutMs=e.stepTimeoutMs??12e4,this.network=e.network??"none",this.resources=e.resources??{}}async run(e){if(!e.worktreePath)return{steps:[],ok:!1,error:"worktreePath is required"}
140
- const t=e.image??this.image,n={}
141
- let i=Date.now()
142
- const c=e=>{const t=Date.now()
143
- n[e]=(n[e]??0)+(t-i),i=t},l=await(0,r.ensureImage)(t)
144
- if(c("image"),l)return{steps:[],ok:!1,error:l}
145
- let u=await(0,r.docker)(this.createArgs(e,t,!0),r.DOCKER_OP_TIMEOUT_MS)
146
- if(0!==u.exit)return{steps:[],ok:!1,error:u.spawnError??`docker create failed: ${(u.stderr||String(u.exit)).trim()}`}
147
- let d=u.stdout.trim()
148
- if(c("create"),await(0,s.claimScratch)(d,t,"1000:1000")){if(await(0,r.docker)(["rm","-f","-v",d],r.DOCKER_OP_TIMEOUT_MS),u=await(0,r.docker)(this.createArgs(e,t,!1),r.DOCKER_OP_TIMEOUT_MS),0!==u.exit)return{steps:[],ok:!1,error:u.spawnError??`docker create failed: ${(u.stderr||String(u.exit)).trim()}`}
149
- d=u.stdout.trim()}c("scratch")
150
- try{const t=await(0,r.docker)(["start",d],r.DOCKER_OP_TIMEOUT_MS)
151
- if(c("start"),0!==t.exit)return{steps:[],ok:!1,error:`docker start failed: ${(t.stderr||String(t.exit)).trim()}`}
152
- const s=[]
153
- let i=await(0,a.readOomKills)(d)??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
155
- null!=u&&(i=u)
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
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()
158
- await(0,r.docker)(["rm","-f","-v",d],r.DOCKER_OP_TIMEOUT_MS),n.remove=Date.now()-e}}createArgs(e,t,r){const o=Object.entries(e.env??{}).flatMap((([e,t])=>["-e",`${e}=${t}`])),a=e.depsVolume?["-v",`${e.depsVolume}:/work/node_modules`]:[],i=(e.mounts??[]).flatMap((e=>["-v",`${e.volume}:${e.target}`])),c=(e.readOnlyBinds??[]).flatMap((e=>["-v",`${e.host}:${e.target}:ro`]))
159
- return["create","--label","alchemy.sandbox=rung1",...(0,n.hardenedCreateArgs)({network:this.network,user:"1000:1000",...r?{}:{extraTmpfs:[(0,s.scratchTmpfsArg)(512)]},shmSizeMb:this.resources.shmSizeMb,memory:this.resources.memory??"1g",cpus:this.resources.cpus??2,pidsLimit:this.resources.pidsLimit??512}),...r?s.SCRATCH_VOLUME_ARGS:[],...o,"-v",`${e.worktreePath}:/work:rw`,...a,...i,...c,"-w","/work",t,"tail","-f","/dev/null"]}}},69968:function(e,exports,t){function r(e){const t=m.get(e.image)
160
- if(t)return t.work
161
- const r=(async()=>{const t=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
162
- if(t.spawnError)return t.spawnError
163
- if(0===t.exit&&t.stdout.trim()===e.recipeHash)return
164
- const r=i.mkdtempSync(l.join(c.tmpdir(),"alchemylab-image-"))
165
- try{i.writeFileSync(l.join(r,"Dockerfile"),e.dockerfile)
166
- const t=await(0,u.docker)(["build","--label",`${p}=${e.recipeHash}`,"-t",e.image,r],exports.BUILD_TIMEOUT_MS)
167
- if(0!==t.exit){const r=(t.stderr||t.stdout||"").trim().split("\n").slice(-12).join("\n")
168
- return`building ${e.image} failed${t.timedOut?" (timed out)":""}: ${r}`}return}finally{i.rmSync(r,{recursive:!0,force:!0})}})()
169
- return m.set(e.image,{work:r,since:Date.now()}),r.then((t=>{t?h.set(e.image,{error:t,at:Date.now()}):h.delete(e.image)}),(t=>{h.set(e.image,{error:t instanceof Error?t.message:String(t),at:Date.now()})})).finally((()=>m.delete(e.image))),r}var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
170
- var o=Object.getOwnPropertyDescriptor(t,r)
171
- o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[]
172
- for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
173
- return t},n(e)},function(e){if(e&&e.__esModule)return e
174
- var t={}
175
- if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
176
- return s(t,e),t})
177
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.BUILD_TIMEOUT_MS=void 0,exports.localRecipeFor=function(e){return f.find((t=>t.image===e))},exports.ensureLocalImage=r,exports.localImageState=async function(e){const t=m.get(e.image)
178
- if(t)return{state:"building",since:t.since}
179
- const r=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
180
- if(r.spawnError)return{state:"no-docker",error:"Docker is not installed on this machine (no docker command)"}
181
- if(0===r.exit&&r.stdout.trim()===e.recipeHash)return{state:"ready"}
182
- if(/cannot connect to the docker daemon|is the docker daemon running|error during connect/i.test(r.stderr))return{state:"no-docker",error:"Docker is not running on this machine"}
183
- const n=h.get(e.image)
184
- return n?{state:"failed",...n}:{state:"missing"}},exports.startLocalImageBuild=function(e){return h.delete(e.image),r(e).catch((()=>{})),{since:m.get(e.image)?.since??Date.now()}}
185
- const i=a(t(73024)),c=a(t(48161)),l=a(t(76760)),u=t(6175),d=t(7740),p="dev.alchemylab.recipe"
186
- exports.BUILD_TIMEOUT_MS=15e5
187
- const f=[{image:d.OFFICE_BOX_IMAGE,dockerfile:d.OFFICE_BOX_DOCKERFILE,recipeHash:d.OFFICE_BOX_RECIPE_HASH}],m=new Map,h=new Map},70610:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.DOCUMENT_FORMATS=void 0,exports.formatOfKind=function(e){return exports.DOCUMENT_FORMATS.find((t=>t.kind===e))},exports.formatFor=function(e){const r=/\.([a-z0-9]+)$/i.exec(e)
42
+ const w=12e4,g="the office renderer is being built on this machine (first use only, usually a few minutes)"},9956:module=>{module.exports=require("undici")},11895:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.SandboxSession=exports.DEFAULT_CPUS=void 0
43
+ const r=t(81618),n=t(22604),o=t(26166),s=t(2566),i=t(90695),a=t(61260)
44
+ exports.DEFAULT_CPUS=4,exports.SandboxSession=class{constructor(e,t={}){this.spec=e,this.oomKillsSeen=0,this.network=t.network??"none",this.execTimeoutMs=t.execTimeoutMs??12e4,this.scratchMb=t.scratchSizeMb??512,this.memory=t.memory??"2g",this.cpus=t.cpus??exports.DEFAULT_CPUS,this.cpusRequested=t.cpus,this.size=t.size??"standard",this.pidsLimit=t.pidsLimit??512,this.shmSizeMb=t.shmSizeMb,this.addCaps=t.addCaps??[],this.sysctls=t.sysctls??{},this.runAsRoot=t.runAsRoot??!1,this.dockerSocket=t.dockerSocket??!1}get containerId(){return this.id}get running(){return void 0!==this.id}async start(){if(this.id)return{ok:!0}
45
+ if(!this.spec.worktreePath)return{ok:!1,error:"worktreePath is required"}
46
+ const e=this.spec.image??"node:20-alpine",t=await(0,r.ensureImage)(e)
47
+ if(t)return{ok:!1,error:t}
48
+ const o=await(0,n.withAdmission)(this.memory,"box",(()=>this.createAndStart(e)))
49
+ return"refused"in o?{ok:!1,error:o.refused}:o.value}async createAndStart(e){const t=await(0,n.pickCores)(this.cpusRequested,exports.DEFAULT_CPUS,this.size)
50
+ this.cpus=t.cpus,this.cpuset=t.cpuset
51
+ let o=await(0,r.docker)(this.createArgs(e,!0),r.DOCKER_OP_TIMEOUT_MS)
52
+ if(0!==o.exit)return{ok:!1,error:o.spawnError??`docker create failed: ${(o.stderr||String(o.exit)).trim()}`}
53
+ let s=o.stdout.trim()
54
+ if(await(0,i.claimScratch)(s,e,this.runAsRoot?"0:0":"1000:1000")){if(await(0,r.docker)(["rm","-f","-v",s],r.DOCKER_OP_TIMEOUT_MS),o=await(0,r.docker)(this.createArgs(e,!1),r.DOCKER_OP_TIMEOUT_MS),0!==o.exit)return{ok:!1,error:o.spawnError??`docker create failed: ${(o.stderr||String(o.exit)).trim()}`}
55
+ s=o.stdout.trim()}const c=await(0,r.docker)(["start",s],r.DOCKER_OP_TIMEOUT_MS)
56
+ return 0!==c.exit?(await(0,r.docker)(["rm","-f","-v",s],r.DOCKER_OP_TIMEOUT_MS),{ok:!1,error:`docker start failed: ${(c.stderr||String(c.exit)).trim()}`}):(this.id=s,this.oomKillsSeen=await(0,a.readOomKills)(s)??0,{ok:!0})}async exec(e,t={}){if(!this.id)return{exit:-1,stdout:"",stderr:"session not started",ms:0,timedOut:!1}
57
+ const n=Date.now(),o=t.execId??`lim-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,i=t.timeoutMs??this.execTimeoutMs,c=await(0,r.dockerKeepingEnds)(["exec","-e",`ALCHEMY_EXEC_ID=${o}`,"-e",`${s.RUN_ENV_VAR}=${(0,s.withShellInit)(this.spec.shellInit,e)}`,this.id,"/bin/sh","-c",s.RUN_FROM_ENV],i),l=Date.now()-n,u=[]
58
+ let d=c.exit
59
+ c.timedOut&&(await this.killExec(o),d=124,u.push(`[AlchemyLab] Time limit reached after ${Math.round(i/1e3)}s: the command was stopped and its processes in the box were ended. Anything it wrote is still in the box.`))
60
+ const p=this.id?await(0,a.probeBox)(this.id):{oomKills:null,liveFrame:!1},f=p.oomKills,m=null!=f?Math.max(0,f-this.oomKillsSeen):0
61
+ null!=f&&(this.oomKillsSeen=f),m>0&&u.push((0,a.oomNote)(m,this.memory))
62
+ const h=u.length?`${c.stderr}${c.stderr&&!c.stderr.endsWith("\n")?"\n":""}${u.join("\n")}\n`:c.stderr
63
+ return{exit:d,stdout:c.stdout,stderr:h,ms:l,timedOut:c.timedOut,...m>0?{oomKills:m}:{},...p.liveFrame?{liveFrame:!0}:{}}}async killExec(e){if(!this.id)return
64
+ const t=`for d in /proc/[0-9]*; do if grep -qa "ALCHEMY_EXEC_ID=${e.replace(/[^a-zA-Z0-9_-]/g,"")}" "$d/environ" 2>/dev/null; then kill -9 "\${d##*/}" 2>/dev/null || true; fi; done`
65
+ await(0,r.docker)(["exec",this.id,"/bin/sh","-c",t],r.DOCKER_OP_TIMEOUT_MS)}async readFile(e){if(!this.id)return null
66
+ const t=await(0,r.docker)(["exec",this.id,"base64",e],r.DOCKER_OP_TIMEOUT_MS)
67
+ if(0!==t.exit)return null
68
+ try{const e=Buffer.from(t.stdout.replace(/\s/g,""),"base64")
69
+ return e.length>0?e:null}catch{return null}}async insertFrom(e,n){if(!this.id)return{ok:!1,bytes:0,error:"session not started"}
70
+ if(!n.startsWith("/"))return{ok:!1,bytes:0,error:"boxPath must be absolute"}
71
+ const{spawn:o}=await Promise.resolve().then(t.t.bind(t,35317,23)),{Transform:s}=await Promise.resolve().then(t.t.bind(t,2203,23)),i=n.replace(/\/+$/,"").replace(/\/[^/]+$/,"")||"/",a=await(0,r.docker)(["exec",this.id,"mkdir","-p",i],r.DOCKER_OP_TIMEOUT_MS)
72
+ return 0!==a.exit?{ok:!1,bytes:0,error:`could not create ${i}: ${(a.stderr||"").trim()}`}:await new Promise((t=>{let r=0,i="",a=!1
73
+ const c=e=>{a||(a=!0,t(e))},l=o("docker",["exec","-i",this.id,"sh","-c",`cat > '${n.replace(/'/g,"'\\''")}'`],{stdio:["pipe","ignore","pipe"]}),u=new s({transform(e,t,n){r+=e.length,n(null,e)}})
74
+ e.on("error",(e=>c({ok:!1,bytes:r,error:e.message}))),l.stderr.on("data",(e=>{i+=e.toString().slice(0,500)})),l.on("error",(e=>c({ok:!1,bytes:r,error:e.message}))),l.on("close",(e=>{c(0===e?{ok:!0,bytes:r}:{ok:!1,bytes:r,error:i.trim()||`docker exec exited ${e}`})})),e.pipe(u).pipe(l.stdin)}))}async extractInto(e,r){if(!this.id)return{ok:!1,bytes:0,error:"session not started"}
75
+ const{spawn:n}=await Promise.resolve().then(t.t.bind(t,35317,23)),{Transform:o}=await Promise.resolve().then(t.t.bind(t,2203,23)),{mkdir:s}=await Promise.resolve().then(t.t.bind(t,91943,23))
76
+ await s(r,{recursive:!0})
77
+ const i=e.replace(/\/+$/,"").replace(/\/[^/]+$/,"")||"/",a=e.replace(/\/+$/,"").split("/").pop()||"."
78
+ return await new Promise((e=>{let t=0,s=""
79
+ const c=n("docker",["exec",this.id,"tar","-cf","-","-C",i,a],{stdio:["ignore","pipe","pipe"]}),l=n("tar",["-xf","-","-C",r],{stdio:["pipe","ignore","pipe"]}),u=new o({transform(e,r,n){t+=e.length,n(null,e)}})
80
+ c.stdout.pipe(u).pipe(l.stdin),c.stderr.on("data",(e=>{s+=e.toString().slice(0,500)})),l.stderr.on("data",(e=>{s+=e.toString().slice(0,500)})),c.on("error",(r=>e({ok:!1,bytes:t,error:r.message}))),l.on("error",(r=>e({ok:!1,bytes:t,error:r.message}))),l.on("close",(r=>{e(0===r?{ok:!0,bytes:t}:{ok:!1,bytes:t,error:s.trim()||`tar exited ${r}`})}))}))}async stop(){if(!this.id)return
81
+ const e=this.id
82
+ this.id=void 0,await(0,r.docker)(["rm","-f","-v",e],r.DOCKER_OP_TIMEOUT_MS)}createArgs(e,t){const r=Object.entries(this.spec.env??{}).flatMap((([e,t])=>["-e",`${e}=${t}`])),n=this.spec.depsVolume?["-v",`${this.spec.depsVolume}:/work/node_modules`]:[]
83
+ return["create","--label","alchemy.sandbox=experiment",...this.spec.projectId?["--label",`alchemy.experiment.project=${this.spec.projectId}`]:[],"--init",...(0,o.hardenedCreateArgs)({network:this.network,user:this.runAsRoot?"0:0":"1000:1000",capAdds:this.addCaps,sysctls:this.sysctls,...t?{}:{extraTmpfs:[(0,i.scratchTmpfsArg)(this.scratchMb)]},shmSizeMb:this.shmSizeMb,memory:this.memory,cpus:this.cpus,cpuset:this.cpuset,pidsLimit:this.pidsLimit}),...t?i.SCRATCH_VOLUME_ARGS:[],...r,"-v",`${this.spec.worktreePath}:/work:${this.spec.writableSource?"rw":"ro"}`,...n,...(this.spec.mounts??[]).flatMap((e=>["-v",`${e.volume}:${e.target}`])),...(this.spec.readOnlyBinds??[]).flatMap((e=>["-v",`${e.host}:${e.target}:ro`])),...this.dockerSocket?["-v","/var/run/docker.sock:/var/run/docker.sock"]:[],"-w","/work",e,"tail","-f","/dev/null"]}}},12661:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.DOCUMENT_FORMATS=void 0,exports.formatOfKind=function(e){return exports.DOCUMENT_FORMATS.find((t=>t.kind===e))},exports.formatFor=function(e){const r=/\.([a-z0-9]+)$/i.exec(e)
188
84
  return r?t.get(r[1].toLowerCase()):void 0},exports.DOCUMENT_FORMATS=[{kind:"pdf",extensions:["pdf"],mime:"application/pdf",modelInput:"pdf",text:!0},{kind:"docx",extensions:["docx"],mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",text:!0,render:"office"},{kind:"xlsx",extensions:["xlsx","xlsm"],mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",text:!0,render:"office"},{kind:"pptx",extensions:["pptx"],mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation",text:!0,render:"office"},{kind:"odt",extensions:["odt"],mime:"application/vnd.oasis.opendocument.text",text:!0,render:"office"},{kind:"ods",extensions:["ods"],mime:"application/vnd.oasis.opendocument.spreadsheet",text:!0,render:"office"},{kind:"odp",extensions:["odp"],mime:"application/vnd.oasis.opendocument.presentation",text:!0,render:"office"},{kind:"doc",extensions:["doc"],mime:"application/msword",text:!0,textVia:"docx",render:"office"},{kind:"rtf",extensions:["rtf"],mime:"application/rtf",text:!0,render:"office"},{kind:"xls",extensions:["xls"],mime:"application/vnd.ms-excel",text:!0,textVia:"xlsx",render:"office"},{kind:"ppt",extensions:["ppt"],mime:"application/vnd.ms-powerpoint",text:!0,textVia:"pptx",render:"office"}]
189
- const t=new Map(exports.DOCUMENT_FORMATS.flatMap((e=>e.extensions.map((t=>[t,e])))))},70857:module=>{module.exports=require("os")},73024:module=>{module.exports=require("node:fs")},76760:module=>{module.exports=require("node:path")},76982:module=>{module.exports=require("crypto")},79896:module=>{module.exports=require("fs")},88194:module=>{module.exports=require("jszip")},88891:module=>{module.exports=require("unpdf")},91943:module=>{module.exports=require("fs/promises")},98335:(e,exports,t)=>{async function r(e){return(await Promise.resolve().then(t.t.bind(t,88194,23))).default.loadAsync(e)}async function n(e,t){const r=e.file(t)
85
+ const t=new Map(exports.DOCUMENT_FORMATS.flatMap((e=>e.extensions.map((t=>[t,e])))))},16698:module=>{module.exports=require("node:async_hooks")},16928:module=>{module.exports=require("path")},22604:(e,exports,t)=>{function r(e){if("number"==typeof e)return e
86
+ const t=String(e??"").trim().toLowerCase().match(/^(\d+(?:\.\d+)?)\s*([bkmg]?)b?$/)
87
+ if(!t)return NaN
88
+ const r={"":1,b:1,k:1024,m:1048576,g:1024**3}[t[2]]
89
+ return Math.round(parseFloat(t[1])*r)}function n(e,t,r,n){return e>0&&r>0?t+r<=e?null:`Not started: this ${n} needs ${f(r)} of memory, and the boxes already running on this machine have ${f(t)} of the ${f(e)} Docker can give. Stop a box you no longer need (experiment_list shows yours) or try again when one ends.`:null}function o(e){if(!Number.isInteger(e)||e<=0)return!0
90
+ try{return process.kill(e,0),!0}catch(e){return"EPERM"===e?.code}}function s(e,t,r=o){return!(!e||!m.has(t)||r(Number(e)))}async function i(){const e=await(0,p.docker)(["ps","-a","--filter","label=alchemy.project","--filter","status=running","--filter","status=created","--format",'{{.ID}}\t{{.Label "alchemy.owner"}}\t{{.Label "alchemy.sandbox"}}'],p.DOCKER_OP_TIMEOUT_MS)
91
+ if(0!==e.exit)return 0
92
+ const t=[]
93
+ for(const r of e.stdout.split("\n").map((e=>e.trim())).filter(Boolean)){const[e,n="",o=""]=r.split("\t")
94
+ s(n,o)?await(0,p.docker)(["rm","-f","-v",e],p.DOCKER_OP_TIMEOUT_MS):t.push(e)}if(!t.length)return 0
95
+ const r=await(0,p.docker)(["inspect","--format","{{.HostConfig.Memory}}",...t],p.DOCKER_OP_TIMEOUT_MS)
96
+ return 0!==r.exit?0:r.stdout.split("\n").map((e=>Number(e.trim())||0)).reduce(((e,t)=>e+t),0)}async function a(e,t,o=12e4,s=5e3){try{const a=r(e),c=await async function(){const e=r(process.env.ALCHEMY_BOX_MEMORY_BUDGET)
97
+ if(e>0)return e
98
+ const t=await(0,p.docker)(["info","--format","{{.MemTotal}}"],p.DOCKER_OP_TIMEOUT_MS)
99
+ return 0===t.exit?Number(t.stdout.trim()):NaN}(),l=Date.now()+o
100
+ for(;;){const e=n(c,await i(),a,t)
101
+ if(!e||Date.now()>=l)return e
102
+ await new Promise((e=>setTimeout(e,s)))}}catch{return null}}function c(e){const t=[]
103
+ for(const r of String(e||"").split(",").map((e=>e.trim())).filter(Boolean)){const e=r.match(/^(\d+)(?:-(\d+))?$/)
104
+ if(!e)continue
105
+ const n=Number(e[1]),o=void 0!==e[2]?Number(e[2]):n
106
+ for(let e=n;e<=o&&e-n<1024;e++)t.push(e)}return t}function l(e,t,r){const n=new Array(e).fill(0)
107
+ for(const t of r)for(const r of c(t))r<e&&n[r]++
108
+ return[...n.keys()].sort(((e,t)=>n[e]-n[t]||e-t)).slice(0,t).sort(((e,t)=>e-t))}function u(e,t){const r=Math.max(2,Math.floor(e/2))
109
+ return Math.min(r,Math.max(2,Math.ceil(t/2)))}function d(e,t,r){return"light"===e?2:"heavy"===e?Math.max(2,Math.min(t-2,r-2)):u(t,r)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.BOX_SIZES=void 0,exports.memoryBytes=r,exports.admissionRefusal=n,exports.processAlive=o,exports.isOrphan=s,exports.waitForRoom=a,exports.withAdmission=function(e,t,r){const n=h.then((async()=>{const n=await a(e,t)
110
+ return n?{refused:n}:{value:await r()}}))
111
+ return h=n.catch((()=>{})),n},exports.cpusetCores=c,exports.leastUsedCores=l,exports.flexibleCores=u,exports.boxSize=function(e){return"string"==typeof e&&exports.BOX_SIZES.includes(e)?e:void 0},exports.coresForSize=d,exports.pickCores=async function(e,t,r="standard"){try{const n=await(0,p.docker)(["info","--format","{{.NCPU}}"],p.DOCKER_OP_TIMEOUT_MS),o=Number(n.stdout.trim())
112
+ if(!(o>0))return{cpus:e??t}
113
+ const s=await(0,p.docker)(["ps","-a","-q","--filter","label=alchemy.project","--filter","status=running","--filter","status=created"],p.DOCKER_OP_TIMEOUT_MS),i=0===s.exit?s.stdout.split("\n").map((e=>e.trim())).filter(Boolean):[],a=i.length?(await(0,p.docker)(["inspect","--format","{{.HostConfig.CpusetCpus}}",...i],p.DOCKER_OP_TIMEOUT_MS)).stdout.split("\n").map((e=>e.trim())).filter(Boolean):[],u=new Set(a.flatMap(c).filter((e=>e<o))),f=e??d(r,o,o-u.size),m=Math.max(1,Math.ceil(f))
114
+ return m>=o?{cpus:f}:{cpus:f,cpuset:l(o,m,a).join(",")}}catch{return{cpus:e??t}}}
115
+ const p=t(81618),f=e=>`${(e/1024**3).toFixed(1)} GB`,m=new Set(["experiment","rung1","deps","egress-proxy","service"])
116
+ let h=Promise.resolve()
117
+ exports.BOX_SIZES=["light","standard","heavy"]},26166:(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),...e.cpuset?["--cpuset-cpus",e.cpuset]:[],"--pids-limit",String(e.pidsLimit),"-e","HOME=/tmp","-e","XDG_CACHE_HOME=/tmp/.cache","-e","MYPY_CACHE_DIR=/tmp/.mypy_cache","-e","RUFF_CACHE_DIR=/tmp/.ruff_cache","-e","PYTHONPYCACHEPREFIX=/tmp/.pycache","-e","npm_config_cache=/tmp/.npm",..."none"===e.network?["-e","UV_OFFLINE=1","-e","PIP_NO_INDEX=1","-e","npm_config_offline=true"]:[]]}},31421:module=>{module.exports=require("node:child_process")},35317:module=>{module.exports=require("child_process")},36018:(e,exports,t)=>{async function r(e){return(await Promise.resolve().then(t.t.bind(t,88194,23))).default.loadAsync(e)}async function n(e,t){const r=e.file(t)
190
118
  return r?r.async("string"):void 0}function o(e){return e.replace(/&(#x[0-9a-f]+|#\d+|amp|lt|gt|quot|apos);/gi,((e,t)=>{const r=t.toLowerCase()
191
119
  if("amp"===r)return"&"
192
120
  if("lt"===r)return"<"
@@ -195,10 +123,10 @@ if("quot"===r)return'"'
195
123
  if("apos"===r)return"'"
196
124
  const n=r.startsWith("#x")?parseInt(r.slice(2),16):parseInt(r.slice(1),10)
197
125
  return Number.isFinite(n)?String.fromCodePoint(n):e}))}function s(e,t){const r=new RegExp(`(?:^|\\s)${t.replace(":","\\:")}="([^"]*)"`).exec(e)
198
- return r?o(r[1]):void 0}function a(e,t){const r=new Map
126
+ return r?o(r[1]):void 0}function i(e,t){const r=new Map
199
127
  if(!e)return r
200
128
  for(const n of e.matchAll(/<Relationship\b([^>]*)\/?>/g)){const e=s(n[1],"Id"),o=s(n[1],"Target")
201
- e&&o&&r.set(e,o.startsWith("/")?o.slice(1):i(`${t}/${o}`))}return r}function i(e){const t=[]
129
+ e&&o&&r.set(e,o.startsWith("/")?o.slice(1):a(`${t}/${o}`))}return r}function a(e){const t=[]
202
130
  for(const r of e.split("/"))r&&"."!==r&&(".."===r?t.pop():t.push(r))
203
131
  return t.join("/")}function c(e){const t=e.slice(0,e.lastIndexOf("/"))
204
132
  return{path:`${t}/_rels/${e.slice(e.lastIndexOf("/")+1)}.rels`,dir:t}}function l(e,t){const r=(e||t||"").replace(/\s+/g," ").trim().slice(0,200)
@@ -207,27 +135,27 @@ for(const[o,s]of t){if(!/charts\/chart[^/]*\.xml$/.test(s))continue
207
135
  const t=await n(e,s)
208
136
  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))]
209
137
  "bar"===r[0]&&/<barDir val="col"/.test(t)&&(r[0]="column")
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""
138
+ const n=t.split("<plotArea")[0],s=/<title>([\s\S]*?)<\/title>/.exec(n)?.[1],i=s?[...s.matchAll(/<t>([\s\S]*?)<\/t>/g)].map((e=>o(e[1]))).join("").trim():"",a=[...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""
211
139
  const t=/<f>([\s\S]*?)<\/f>/.exec(e)?.[1],r=[...e.matchAll(/<v>([\s\S]*?)<\/v>/g)].map((e=>o(e[1])))
212
- return t&&/!/.test(t)?o(t):r.length?`${r.slice(0,8).join(", ")}${r.length>8?`, ... (${r.length})`:""}`:""},a=s(/<(?:val|yVal)>([\s\S]*?)<\/(?:val|yVal)>/.exec(t)?.[1]),i=s(/<(?:cat|xVal)>([\s\S]*?)<\/(?:cat|xVal)>/.exec(t)?.[1])
213
- return`${n||"series"}${a?`: ${a}`:""}${i?` by ${i}`:""}`}))
214
- return`[chart: ${r.join("/")||"chart"}${a?` "${a}"`:""}${i.length?`; ${i.join("; ")}`:""}]`}function p(e){return e.replace(/<(\/?)[A-Za-z][\w.-]*:/g,"<$1")}function f(e,t=new Map){const r=[],n=[]
215
- let a=null,i="",c=!1,u=!1,d=null,p=0
140
+ return t&&/!/.test(t)?o(t):r.length?`${r.slice(0,8).join(", ")}${r.length>8?`, ... (${r.length})`:""}`:""},i=s(/<(?:val|yVal)>([\s\S]*?)<\/(?:val|yVal)>/.exec(t)?.[1]),a=s(/<(?:cat|xVal)>([\s\S]*?)<\/(?:cat|xVal)>/.exec(t)?.[1])
141
+ return`${n||"series"}${i?`: ${i}`:""}${a?` by ${a}`:""}`}))
142
+ return`[chart: ${r.join("/")||"chart"}${i?` "${i}"`:""}${a.length?`; ${a.join("; ")}`:""}]`}function p(e){return e.replace(/<(\/?)[A-Za-z][\w.-]*:/g,"<$1")}function f(e,t=new Map){const r=[],n=[]
143
+ let i=null,a="",c=!1,u=!1,d=null,p=0
216
144
  const f=/<(\/?)(w:p|w:tbl|w:tr|w:tc|w:t|w:tab|w:br|w:cr|w:pStyle|w:numPr|w:drawing|wp:docPr|c:chart|v:imagedata|mc:Fallback)\b([^>]*?)(\/?)>|([^<]+)/g
217
145
  for(const m of e.matchAll(f)){const[,e,f,h,b,w]=m
218
146
  if("mc:Fallback"===f){b||(p+=e?-1:1)
219
147
  continue}if(p>0)continue
220
- if(void 0!==w){u&&a&&a.push(o(w))
148
+ if(void 0!==w){u&&i&&i.push(o(w))
221
149
  continue}const g=n[n.length-1]
222
150
  if(e)switch(f){case"w:drawing":{if(!d)break
223
151
  const e=d.chart??l(d.descr,d.name)
224
- d=null,a?a.push(` ${e} `):r.push(e)
152
+ d=null,i?i.push(` ${e} `):r.push(e)
225
153
  break}case"w:t":u=!1
226
154
  break
227
- case"w:p":{const e=(a??[]).join("").trim()
228
- if(a=null,g?.cell){e&&g.cell.push(e)
155
+ case"w:p":{const e=(i??[]).join("").trim()
156
+ if(i=null,g?.cell){e&&g.cell.push(e)
229
157
  break}if(!e){r.length&&""!==r[r.length-1]&&r.push("")
230
- break}const t=/^(?:heading|kop|\xfcberschrift|titre)\s*(\d)/i.exec(i)||(/^title$/i.test(i)?["","1"]:null)
158
+ break}const t=/^(?:heading|kop|\xfcberschrift|titre)\s*(\d)/i.exec(a)||(/^title$/i.test(a)?["","1"]:null)
231
159
  r.push(t?`${"#".repeat(Math.min(6,Number(t[1])))} ${e}`:c?`- ${e}`:e)
232
160
  break}case"w:tc":g?.cell&&g.row&&(g.row.push(g.cell.join(" ")),g.cell=null)
233
161
  break
@@ -244,32 +172,32 @@ break
244
172
  case"c:chart":d&&(d.chart=t.get(s(h,"r:id")??"")??"[chart]")
245
173
  break
246
174
  case"v:imagedata":{const e=l(s(h,"o:title"),void 0)
247
- a?a.push(e):r.push(e)
248
- break}case"w:p":a=[],i="",c=!1
175
+ i?i.push(e):r.push(e)
176
+ break}case"w:p":i=[],a="",c=!1
249
177
  break
250
- case"w:pStyle":i=s(h,"w:val")??""
178
+ case"w:pStyle":a=s(h,"w:val")??""
251
179
  break
252
180
  case"w:numPr":c=!0
253
181
  break
254
182
  case"w:t":b||(u=!0)
255
183
  break
256
- case"w:tab":a?.push("\t")
184
+ case"w:tab":i?.push("\t")
257
185
  break
258
- case"w:br":case"w:cr":a?.push("\n")
186
+ case"w:br":case"w:cr":i?.push("\n")
259
187
  break
260
188
  case"w:tbl":n.push({rows:[],row:null,cell:null})
261
189
  break
262
190
  case"w:tr":g&&(g.row=[])
263
191
  break
264
192
  case"w:tc":g&&(g.cell=[])}}return r.join("\n").replace(/\n{3,}/g,"\n\n").trim()}async function m(e,t){const r=[],o=c(t)
265
- for(const t of a(await n(e,o.path),o.dir).values()){if(!/drawings\/drawing[^/]*\.xml$/.test(t))continue
193
+ for(const t of i(await n(e,o.path),o.dir).values()){if(!/drawings\/drawing[^/]*\.xml$/.test(t))continue
266
194
  const o=await n(e,t)
267
195
  if(!o)continue
268
- const i=p(o),d=c(t),f=await u(e,a(await n(e,d.path),d.dir))
269
- for(const e of i.matchAll(/<(?:twoCellAnchor|oneCellAnchor|absoluteAnchor)\b[\s\S]*?<\/(?:twoCellAnchor|oneCellAnchor|absoluteAnchor)>/g)){const t=e[0],n=/<chart\b[^>]*r:id="([^"]+)"/.exec(t)?.[1],o=/<from>[\s\S]*?<col>(\d+)<\/col>[\s\S]*?<row>(\d+)<\/row>/.exec(t),a=o?` at ${w(Number(o[1]))}${Number(o[2])+1}`:""
270
- if(n){r.push(`${(f.get(n)??"[chart]").replace(/\]$/,`${a}]`)}`)
271
- continue}const i=/<pic>[\s\S]*?<cNvPr\b([^>]*)\/?>/.exec(t)
272
- i&&r.push(l(s(i[1],"descr"),s(i[1],"name")).replace(/\]$/,`${a}]`))}}return r}function h(e){if(!e)return[]
196
+ const a=p(o),d=c(t),f=await u(e,i(await n(e,d.path),d.dir))
197
+ for(const e of a.matchAll(/<(?:twoCellAnchor|oneCellAnchor|absoluteAnchor)\b[\s\S]*?<\/(?:twoCellAnchor|oneCellAnchor|absoluteAnchor)>/g)){const t=e[0],n=/<chart\b[^>]*r:id="([^"]+)"/.exec(t)?.[1],o=/<from>[\s\S]*?<col>(\d+)<\/col>[\s\S]*?<row>(\d+)<\/row>/.exec(t),i=o?` at ${w(Number(o[1]))}${Number(o[2])+1}`:""
198
+ if(n){r.push(`${(f.get(n)??"[chart]").replace(/\]$/,`${i}]`)}`)
199
+ continue}const a=/<pic>[\s\S]*?<cNvPr\b([^>]*)\/?>/.exec(t)
200
+ a&&r.push(l(s(a[1],"descr"),s(a[1],"name")).replace(/\]$/,`${i}]`))}}return r}function h(e){if(!e)return[]
273
201
  const t=[]
274
202
  for(const r of e.matchAll(/<si\b[^>]*>([\s\S]*?)<\/si>/g)){const e=[]
275
203
  for(const t of r[1].matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g))e.push(o(t[1]))
@@ -279,67 +207,67 @@ for(const e of t)r=26*r+(e.charCodeAt(0)-64)
279
207
  return r-1}function w(e){let t=""
280
208
  for(let r=e+1;r>0;r=Math.floor((r-1)/26))t=String.fromCharCode(65+(r-1)%26)+t
281
209
  return t}function g(e,t){const r=[]
282
- let n=0,a=!1
283
- for(const i of e.matchAll(/<row\b([^>]*?)(?:\/>|>([\s\S]*?)<\/row>)/g)){if(r.length>=T){a=!0
284
- break}const e=i[2]??"",c=[]
210
+ let n=0,i=!1
211
+ for(const a of e.matchAll(/<row\b([^>]*?)(?:\/>|>([\s\S]*?)<\/row>)/g)){if(r.length>=R){i=!0
212
+ break}const e=a[2]??"",c=[]
285
213
  let l=0
286
214
  for(const r of e.matchAll(/<c\b([^>]*?)(?:\/>|>([\s\S]*?)<\/c>)/g)){const e=s(r[1],"r"),n=e?b(e):l
287
215
  l=n+1
288
- const a=s(r[1],"t"),i=r[2]??"",u=/<f\b[^>]*>([\s\S]*?)<\/f>/.exec(i)?.[1]
216
+ const i=s(r[1],"t"),a=r[2]??"",u=/<f\b[^>]*>([\s\S]*?)<\/f>/.exec(a)?.[1]
289
217
  let d=""
290
- if("inlineStr"===a)d=[...i.matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g)].map((e=>o(e[1]))).join("")
291
- else{const e=/<v\b[^>]*>([\s\S]*?)<\/v>/.exec(i)?.[1]
292
- void 0!==e&&(d="s"===a?t[Number(e)]??"":"b"===a?"1"===e?"TRUE":"FALSE":o(e))}u&&(d=`${d}${""===d?"":" "}(=${o(u)})`),""!==d&&(c[n]=d.replace(/[\t\r\n]+/g," "))}c.length&&(n=Math.max(n,c.length),r.push({n:Number(s(i[1],"r"))||r.length+1,cells:c}))}return{text:x(r,n),truncated:a}}function x(e,t){return e.length?[["row",...Array.from({length:t},((e,t)=>w(t)))].join("\t"),...e.map((e=>[String(e.n),...Array.from({length:t},((t,r)=>e.cells[r]??""))].join("\t").replace(/\t+$/,"")))].join("\n"):""}function _(e,t){const r=[],n=p(e)
218
+ if("inlineStr"===i)d=[...a.matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g)].map((e=>o(e[1]))).join("")
219
+ else{const e=/<v\b[^>]*>([\s\S]*?)<\/v>/.exec(a)?.[1]
220
+ void 0!==e&&(d="s"===i?t[Number(e)]??"":"b"===i?"1"===e?"TRUE":"FALSE":o(e))}u&&(d=`${d}${""===d?"":" "}(=${o(u)})`),""!==d&&(c[n]=d.replace(/[\t\r\n]+/g," "))}c.length&&(n=Math.max(n,c.length),r.push({n:Number(s(a[1],"r"))||r.length+1,cells:c}))}return{text:x(r,n),truncated:i}}function x(e,t){return e.length?[["row",...Array.from({length:t},((e,t)=>w(t)))].join("\t"),...e.map((e=>[String(e.n),...Array.from({length:t},((t,r)=>e.cells[r]??""))].join("\t").replace(/\t+$/,"")))].join("\n"):""}function _(e,t){const r=[],n=p(e)
293
221
  for(const e of n.matchAll(/<pic\b[^>]*>[\s\S]*?<\/pic>|<graphicFrame\b[^>]*>[\s\S]*?<\/graphicFrame>/g)){const n=e[0]
294
222
  if(/^<pic\b/.test(n)){const e=/<cNvPr\b([^>]*)\/?>/.exec(n)?.[1]??""
295
223
  r.push(l(s(e,"descr"),s(e,"name")))
296
224
  continue}const o=/<chart\b[^>]*r:id="([^"]+)"/.exec(n)?.[1]
297
- o&&r.push(t.get(o)??"[chart]")}return r}function E(e){const t=[]
225
+ o&&r.push(t.get(o)??"[chart]")}return r}function k(e){const t=[]
298
226
  for(const r of e.matchAll(/<a:p\b[^>]*>([\s\S]*?)<\/a:p>/g)){const e=[]
299
227
  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")
300
228
  const n=e.join("").trim()
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")
302
- if(!i||a&&a!==t)throw new Error(`not an OpenDocument ${o} (${i?`its mimetype is ${a}`:"content.xml is missing"})`)
229
+ n&&t.push(n)}return t}async function E(e,t,o){const s=await r(e),i=(await n(s,"mimetype"))?.trim(),a=await n(s,"content.xml")
230
+ if(!a||i&&i!==t)throw new Error(`not an OpenDocument ${o} (${a?`its mimetype is ${i}`:"content.xml is missing"})`)
303
231
  const c=new Map
304
232
  for(const e of Object.keys(s.files)){const t=/^(.+)\/content\.xml$/.exec(e)?.[1]
305
233
  if(!t)continue
306
234
  const r=await n(s,e)
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]
308
- if(a)for(const e of a.matchAll(/<table:table-row\b[^>]*>([\s\S]*?)<\/table:table-row>/g)){const t=[]
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)
310
- for(let r=0;r<n;r++)t.push(e)}n.push(t)}const i=e=>{const t=/^\$?([A-Z]+)\$?(\d+)$/.exec(e)
235
+ r&&/<chart:chart\b/.test(r)&&c.set(t,y(r))}return{xml:a.split(/<office:body\b/)[1]??a,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 y(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=[],i=/<table:table\b[^>]*table:name="local-table"[^>]*>([\s\S]*?)<\/table:table>/.exec(e)?.[1]
236
+ if(i)for(const e of i.matchAll(/<table:table-row\b[^>]*>([\s\S]*?)<\/table:table-row>/g)){const t=[]
237
+ 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),D)
238
+ for(let r=0;r<n;r++)t.push(e)}n.push(t)}const a=e=>{const t=/^\$?([A-Z]+)\$?(\d+)$/.exec(e)
311
239
  return t?{col:b(t[1]),row:Number(t[2])-1}:null},c=e=>{if(!e)return""
312
240
  const t=e.split(":").map((e=>({table:e.slice(0,e.lastIndexOf(".")).replace(/^'(.*)'$/,"$1"),ref:e.slice(e.lastIndexOf(".")+1)})))
313
- if("local-table"===t[0].table||""===t[0].table&&n.length){const e=i(t[0].ref),r=i(t[t.length-1].ref)??e
241
+ if("local-table"===t[0].table||""===t[0].table&&n.length){const e=a(t[0].ref),r=a(t[t.length-1].ref)??e
314
242
  if(!e||!r)return""
315
243
  const o=[]
316
244
  for(let t=e.row;t<=r.row;t++)for(let s=e.col;s<=r.col;s++)o.push(n[t]?.[s]??"")
317
245
  return`${o.slice(0,8).join(", ")}${o.length>8?`, ... (${o.length})`:""}`}const r=t.map((e=>e.ref.replace(/\$/g,"")))
318
246
  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"))
319
247
  return`${c(s(e[1],"chart:label-cell-address"))||"series"}${t?`: ${t}`:""}${l?` by ${l}`:""}`}))
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,"")
321
- return r?`${r}!${n}`:n})).join(":")))}function y(e,t,r){switch(e){case"text:tab":return r.push("\t"),!0
248
+ return`[chart: ${F[t]??t}${r?` "${r}"`:""}${u.length?`; ${u.join("; ")}`:""}]`}function v(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,"")
249
+ return r?`${r}!${n}`:n})).join(":")))}function $(e,t,r){switch(e){case"text:tab":return r.push("\t"),!0
322
250
  case"text:line-break":return r.push("\n"),!0
323
251
  case"text:s":return r.push(" ".repeat(Math.min(100,Number(s(t,"text:c")??1)||1))),!0
324
- default:return!1}}function M(e,t=new Map){const r=[],n=[],a=new L
325
- let i=0,c=0,l=null,u=null
326
- for(const d of e.matchAll(j)){const[,e,p,f,m,h]=d
252
+ default:return!1}}function M(e,t=new Map){const r=[],n=[],i=new U
253
+ let a=0,c=0,l=null,u=null
254
+ for(const d of e.matchAll(P)){const[,e,p,f,m,h]=d
327
255
  if(void 0!==h){if(c)continue
328
- u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))
256
+ u&&l?l[u]=(l[u]??"")+o(h):i.push(o(h))
329
257
  continue}if(N.has(p)){m||(c+=e?-1:1)
330
258
  continue}if(c)continue
331
259
  const b=n[n.length-1]
332
260
  if(e)switch(p){case"svg:title":case"svg:desc":u=null
333
261
  break
334
- case"draw:frame":{const e=l?v(l,t):null
262
+ case"draw:frame":{const e=l?O(l,t):null
335
263
  if(l=null,!e)break
336
- a.current?a.pushSpaced(e):b?.cell?b.cell.push(e):r.push(e)
337
- break}case"text:p":case"text:h":{const e=a.close()
264
+ i.current?i.pushSpaced(e):b?.cell?b.cell.push(e):r.push(e)
265
+ break}case"text:p":case"text:h":{const e=i.close()
338
266
  if(!e)break
339
267
  if(b?.cell){e.plain&&b.cell.push(e.plain)
340
268
  break}if(!e.line){r.length&&""!==r[r.length-1]&&r.push("")
341
269
  break}r.push(e.line)
342
- break}case"text:list-item":i=Math.max(0,i-1)
270
+ break}case"text:list-item":a=Math.max(0,a-1)
343
271
  break
344
272
  case"table:table-cell":case"table:covered-table-cell":b?.cell&&b.row&&(b.row.push(b.cell.join(" ")),b.cell=null)
345
273
  break
@@ -349,10 +277,10 @@ case"table:table":{const e=n.pop()
349
277
  if(!e)break
350
278
  const t=e.rows.map((e=>`| ${e.map((e=>e.replace(/\|/g,"\\|"))).join(" | ")} |`)),o=n[n.length-1]
351
279
  o?.cell?o.cell.push(t.join(" ")):r.push(...t,"")
352
- break}}else{if(y(p,f,a))continue
353
- switch(p){case"text:p":case"text:h":m?!b?.cell&&r.length&&""!==r[r.length-1]&&r.push(""):a.open("text:h"===p?Number(s(f,"text:outline-level")??1)||1:0,i>0)
280
+ break}}else{if($(p,f,i))continue
281
+ switch(p){case"text:p":case"text:h":m?!b?.cell&&r.length&&""!==r[r.length-1]&&r.push(""):i.open("text:h"===p?Number(s(f,"text:outline-level")??1)||1:0,a>0)
354
282
  break
355
- case"text:list-item":m||i++
283
+ case"text:list-item":m||a++
356
284
  break
357
285
  case"table:table":m||n.push({rows:[],row:null,cell:null})
358
286
  break
@@ -367,34 +295,34 @@ break
367
295
  case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
368
296
  break
369
297
  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=[]
370
- let n=!1,a=null,i=null,c=null,l=null,u=null,d=0,p=!1
371
- for(const f of e.matchAll(j)){const[,e,m,h,b,w]=f
298
+ let n=!1,i=null,a=null,c=null,l=null,u=null,d=0,p=!1
299
+ for(const f of e.matchAll(P)){const[,e,m,h,b,w]=f
372
300
  if(void 0!==w){if(d)continue
373
301
  u&&l?l[u]=(l[u]??"")+o(w):c&&p&&c.parts.push(o(w))
374
302
  continue}if(N.has(m)){b||(d+=e?-1:1)
375
303
  continue}if(d)continue
376
- const g=()=>{if(!c||!i)return
304
+ const g=()=>{if(!c||!a)return
377
305
  let e=c.parts.join("").trim()||c.value||""
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," ")
379
- i.col+=c.repeat,c=null}
306
+ if(c.formula&&(e=`${e}${e?" ":""}(=${v(c.formula)})`),e)for(let t=0;t<Math.min(c.repeat,D);t++)a.cells[a.col+t]=e.replace(/[\t\r\n]+/g," ")
307
+ a.col+=c.repeat,c=null}
380
308
  if(e)switch(m){case"svg:title":case"svg:desc":u=null
381
309
  break
382
- case"draw:frame":{const e=l?v(l,t):null
383
- l=null,e&&a&&a.figures.push(e)
310
+ case"draw:frame":{const e=l?O(l,t):null
311
+ l=null,e&&i&&i.figures.push(e)
384
312
  break}case"text:p":p=!1
385
313
  break
386
314
  case"table:table-cell":case"table:covered-table-cell":g()
387
315
  break
388
- case"table:table-row":if(!i||!a)break
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
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
316
+ case"table:table-row":if(!a||!i)break
317
+ if(a.cells.some((e=>void 0!==e))){for(let e=0;e<Math.min(a.repeat,j);e++){if(i.rows.length>=R){n=!0
318
+ break}i.rows.push({n:i.rowIndex+e+1,cells:a.cells})}i.width=Math.max(i.width,a.cells.length)}i.rowIndex+=a.repeat,a=null
391
319
  break
392
- case"table:table":if(!a)break
393
- r.push({name:a.name,text:x(a.rows,a.width),figures:a.figures}),a=null}else switch(m){case"table:table":b||(a={name:s(h,"table:name")??`Sheet ${r.length+1}`,rows:[],width:0,figures:[],rowIndex:0})
320
+ case"table:table":if(!i)break
321
+ r.push({name:i.name,text:x(i.rows,i.width),figures:i.figures}),i=null}else switch(m){case"table:table":b||(i={name:s(h,"table:name")??`Sheet ${r.length+1}`,rows:[],width:0,figures:[],rowIndex:0})
394
322
  break
395
323
  case"table:table-row":{const e=Math.max(1,Number(s(h,"table:number-rows-repeated")??1)||1)
396
- b?a&&(a.rowIndex+=e):i={cells:[],col:0,repeat:e}
397
- break}case"table:table-cell":case"table:covered-table-cell":if(!i)break
324
+ b?i&&(i.rowIndex+=e):a={cells:[],col:0,repeat:e}
325
+ break}case"table:table-cell":case"table:covered-table-cell":if(!a)break
398
326
  c={parts:[],repeat:Math.max(1,Number(s(h,"table:number-columns-repeated")??1)||1),value:s(h,"office:value")??s(h,"office:date-value")??s(h,"office:time-value")??s(h,"office:boolean-value")??s(h,"office:string-value"),formula:s(h,"table:formula")},b&&g()
399
327
  break
400
328
  case"text:p":c&&!b&&(c.parts.length&&c.parts.push(" "),p=!0)
@@ -407,98 +335,253 @@ case"draw:image":l&&(l.image=!0)
407
335
  break
408
336
  case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(h,"xlink:href"))
409
337
  break
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=[]
338
+ case"svg:title":case"svg:desc":!b&&l&&(u="svg:title"===m?"title":"desc")}}return{sheets:r,truncated:n}}function C(e,t=new Map){const r=[]
411
339
  let n=null
412
- const a=new L
413
- let i=0,c=0,l=null,u=null
414
- for(const d of e.matchAll(j)){const[,e,p,f,m,h]=d
340
+ const i=new U
341
+ let a=0,c=0,l=null,u=null
342
+ for(const d of e.matchAll(P)){const[,e,p,f,m,h]=d
415
343
  if(void 0===h){if(N.has(p))m||(c+=e?-1:1)
416
344
  else if(!c)if(e)switch(p){case"svg:title":case"svg:desc":u=null
417
345
  break
418
- case"text:p":case"text:h":{const e=a.close()
419
- !e?.plain||!n||i&&/^<number>$/.test(e.plain)||(i?n.notes:n.lines).push(e.plain)
420
- break}case"draw:frame":{const e=l?v(l,t):null
346
+ case"text:p":case"text:h":{const e=i.close()
347
+ !e?.plain||!n||a&&/^<number>$/.test(e.plain)||(a?n.notes:n.lines).push(e.plain)
348
+ break}case"draw:frame":{const e=l?O(l,t):null
421
349
  l=null,e&&n&&n.lines.push(e)
422
- break}case"presentation:notes":i=Math.max(0,i-1)
350
+ break}case"presentation:notes":a=Math.max(0,a-1)
423
351
  break
424
352
  case"draw:page":{if(!n)break
425
353
  let e=`## Slide ${r.length+1}\n${n.lines.join("\n")||"(no text)"}`
426
354
  n.notes.length&&(e+=`\n\nNotes:\n${n.notes.join("\n")}`),r.push(e),n=null
427
- break}}else{if(y(p,f,a))continue
355
+ break}}else{if($(p,f,i))continue
428
356
  switch(p){case"draw:page":m||(n={lines:[],notes:[]})
429
357
  break
430
- case"presentation:notes":m||i++
358
+ case"presentation:notes":m||a++
431
359
  break
432
- case"text:p":case"text:h":m||a.open(0,!1)
360
+ case"text:p":case"text:h":m||i.open(0,!1)
433
361
  break
434
- case"draw:frame":m||i||(l={name:s(f,"draw:name")})
362
+ case"draw:frame":m||a||(l={name:s(f,"draw:name")})
435
363
  break
436
364
  case"draw:image":l&&(l.image=!0)
437
365
  break
438
366
  case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
439
367
  break
440
368
  case"svg:title":case"svg:desc":!m&&l&&(u="svg:title"===p?"title":"desc")}}}else{if(c)continue
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)
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`)
443
- const l=(0,C.formatOfKind)(i).textVia
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`)
445
- const t=await e(await c.convert(o,i,l),l)
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})
447
- try{const{totalPages:e,text:t}=await o(s,{mergePages:!1}),r=Array.isArray(t)?t:[t],n=r.map(((t,r)=>`--- page ${r+1} of ${e} ---\n${String(t).trim()}`)).join("\n\n"),a=r.every((e=>!String(e).trim()))
448
- return{kind:"pdf",text:n,units:e,note:a?"No text layer (probably a scan). Use view_asset with this path to look at the pages.":"Text only. For tables, figures or layout, use view_asset with this path and the page numbers."}}finally{await(s.loadingTask?.destroy?.().catch?.((()=>{})))}}(o)
369
+ u&&l?l[u]=(l[u]??"")+o(h):i.push(o(h))}}return r}Object.defineProperty(exports,"__esModule",{value:!0}),exports.MAX_DOCUMENT_BYTES=void 0,exports.documentKindFor=function(e){const t=(0,T.formatFor)(e)
370
+ return t?.text?t.kind:void 0},exports.extractDocumentText=async function e(o,a,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`)
371
+ const l=(0,T.formatOfKind)(a).textVia
372
+ if(l){if(!c.convert)throw new Error(`.${a} files are read by converting them in the office box, which is not reachable from here`)
373
+ const t=await e(await c.convert(o,a,l),l)
374
+ return{...t,kind:a,note:`Converted from .${a} to .${l} in the office box first. ${t.note??""}`.trim()}}switch(a){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})
375
+ try{const{totalPages:e,text:t}=await o(s,{mergePages:!1}),r=Array.isArray(t)?t:[t],n=r.map(((t,r)=>`--- page ${r+1} of ${e} ---\n${String(t).trim()}`)).join("\n\n"),i=r.every((e=>!String(e).trim()))
376
+ return{kind:"pdf",text:n,units:e,note:i?"No text layer (probably a scan). Use view_asset with this path to look at the pages.":"Text only. For tables, figures or layout, use view_asset with this path and the page numbers."}}finally{await(s.loadingTask?.destroy?.().catch?.((()=>{})))}}(o)
449
377
  case"docx":return async function(e){const t=await r(e),o=await n(t,"word/document.xml")
450
378
  if(!o)throw new Error("not a Word document (word/document.xml is missing)")
451
- return{kind:"docx",text:f(o,await u(t,a(await n(t,"word/_rels/document.xml.rels"),"word"))),note:"Text, headings, lists and tables; pictures show as [image: alt text] and charts as a one-line summary; formatting is dropped. To see the pages, view_asset this path."}}(o)
379
+ return{kind:"docx",text:f(o,await u(t,i(await n(t,"word/_rels/document.xml.rels"),"word"))),note:"Text, headings, lists and tables; pictures show as [image: alt text] and charts as a one-line summary; formatting is dropped. To see the pages, view_asset this path."}}(o)
452
380
  case"xlsx":return async function(e){const t=await r(e),o=await n(t,"xl/workbook.xml")
453
381
  if(!o)throw new Error("not an Excel workbook (xl/workbook.xml is missing)")
454
- const i=a(await n(t,"xl/_rels/workbook.xml.rels"),"xl"),c=h(await n(t,"xl/sharedStrings.xml")),l=[]
382
+ const a=i(await n(t,"xl/_rels/workbook.xml.rels"),"xl"),c=h(await n(t,"xl/sharedStrings.xml")),l=[]
455
383
  let u=!1,d=0
456
- for(const e of o.matchAll(/<sheet\b([^>]*)\/?>/g)){const r=s(e[1],"name")??`Sheet ${d+1}`,o=s(e[1],"r:id"),a=o?i.get(o):void 0,p=a?await n(t,a):void 0
384
+ for(const e of o.matchAll(/<sheet\b([^>]*)\/?>/g)){const r=s(e[1],"name")??`Sheet ${d+1}`,o=s(e[1],"r:id"),i=o?a.get(o):void 0,p=i?await n(t,i):void 0
457
385
  if(d++,!p){l.push(`## Sheet: ${r}\n(empty)`)
458
386
  continue}const{text:f,truncated:h}=g(p,c)
459
387
  u=u||h
460
- const b=await m(t,a)
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)
388
+ const b=await m(t,i)
389
+ 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 ${R} rows are cut off.`:"")}}(o)
462
390
  case"pptx":return async function(e){const t=await r(e),o=await n(t,"ppt/presentation.xml")
463
391
  if(!o)throw new Error("not a PowerPoint deck (ppt/presentation.xml is missing)")
464
- const i=a(await n(t,"ppt/_rels/presentation.xml.rels"),"ppt")
392
+ const a=i(await n(t,"ppt/_rels/presentation.xml.rels"),"ppt")
465
393
  let c=[...o.matchAll(/<p:sldId\b([^>]*)\/?>/g)].map((e=>{const t=s(e[1],"r:id")
466
- return t?i.get(t):void 0})).filter((e=>!!e))
394
+ return t?a.get(t):void 0})).filter((e=>!!e))
467
395
  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]))))
468
396
  const l=[]
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)
397
+ for(let e=0;e<c.length;e++){const r=c[e],o=await n(t,r),s=o?k(o):[],a=r.slice(0,r.lastIndexOf("/")),d=r.slice(r.lastIndexOf("/")+1),p=i(await n(t,`${a}/_rels/${d}.rels`),a)
470
398
  o&&s.push(..._(o,await u(t,p)))
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))):[]
399
+ 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))):[]
472
400
  let b=`## Slide ${e+1}\n${s.join("\n")||"(no text)"}`
473
401
  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)
474
- case"odt":return async function(e){const{xml:t,objects:r}=await k(e,"application/vnd.oasis.opendocument.text","text document")
402
+ case"odt":return async function(e){const{xml:t,objects:r}=await E(e,"application/vnd.oasis.opendocument.text","text document")
475
403
  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)
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)
404
+ case"ods":return async function(e){const{xml:t,objects:r}=await E(e,"application/vnd.oasis.opendocument.spreadsheet","spreadsheet"),{sheets:n,truncated:o}=S(t,r)
405
+ 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 ${R} rows are cut off.`:"")}}(o)
406
+ case"odp":return async function(e){const{xml:t,objects:r}=await E(e,"application/vnd.oasis.opendocument.presentation","presentation"),n=C(t,r)
479
407
  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)
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)
408
+ case"rtf":return{kind:"rtf",text:(0,I.rtfToText)(o),note:"Text, paragraphs and table rows; styling, pictures and layout are dropped. To see the pages, view_asset this path."}
409
+ default:throw new Error(`no text form for .${a}`)}},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=y,exports.odfFormula=v,exports.odtXmlToText=M,exports.odsXmlToText=S,exports.odpXmlToText=C
410
+ const T=t(12661),I=t(43701)
483
411
  exports.MAX_DOCUMENT_BYTES=52428800
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"}
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
412
+ const R=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"},P=/<(\/?)([A-Za-z][\w.-]*:[\w.-]+)\b([^>]*?)(\/?)>|([^<]+)/g,N=new Set(["text:note","office:annotation","text:tracked-changes","office:forms","text:sequence-decls"]),D=256,j=50,F={circle:"pie",ring:"doughnut"}
413
+ class U{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
486
414
  if(!t)return
487
415
  const r=t[t.length-1]??""
488
416
  t.push(`${!r||/\s$/.test(r)?"":" "}${e} `)}close(){const e=this.stack.pop()
489
417
  if(!e)return null
490
418
  const t=e.parts.join("").replace(/[ \t]+\n/g,"\n").trim()
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={}
419
+ 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:""}}}},43701:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.rtfToText=function(e){const o="string"==typeof e?e:Buffer.from(e).toString("latin1")
420
+ if(!/^\s*\{\s*\\rtf/i.test(o))throw new Error("not an RTF file (it does not start with {\\rtf)")
421
+ const s=[],i=[{skip:!1,skipChars:0}],a=()=>i[i.length-1],c=e=>{a().skip||s.push(e)}
422
+ for(let e=0;e<o.length;e++){const s=o[e]
423
+ if("{"===s){i.push({...a()})
424
+ continue}if("}"===s){i.length>1&&i.pop()
425
+ continue}if("\r"===s||"\n"===s)continue
426
+ if("\\"!==s){if(a().skipChars>0){a().skipChars--
427
+ continue}c(s)
428
+ continue}const u=/^\\([a-zA-Z]+)(-?\d+)? ?/.exec(o.slice(e))
429
+ if(!u){const s=o[e+1]
430
+ if("*"===s){const r=/^\\\*\\([a-zA-Z]+)/.exec(o.slice(e))
431
+ r&&!t.has(r[1])||(a().skip=!0),e+=1
432
+ continue}if("'"===s){const t=o.slice(e+2,e+4)
433
+ if(e+=3,a().skipChars>0){a().skipChars--
434
+ continue}c((l=parseInt(t,16)||0)<128?String.fromCharCode(l):n[l-128]??"")
435
+ continue}if(void 0!==s&&void 0!==r[s]){c(r[s]),e+=1
436
+ continue}e+=1
437
+ continue}const[d,p,f]=u
438
+ e+=d.length-1
439
+ const m=void 0===f?void 0:Number(f)
440
+ if(t.has(p))a().skip=!0
441
+ else if("u"!==p)"uc"!==p?"cell"!==p&&"nestcell"!==p?"row"!==p&&"nestrow"!==p?void 0===r[p]||c(r[p]):c("\n"):c(" | "):a().ucSkip=m??1
442
+ else{const e=a().skipChars>0
443
+ a().skipChars=Math.max(0,i[i.length-1].ucSkip??1),e||void 0===m||c(String.fromCodePoint(m<0?m+65536:m))}}var l
444
+ 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*$/,"")
445
+ return e.includes(" | ")?`| ${t} |`:t})).join("\n").trim()}
446
+ 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"},44600:(e,exports,t)=>{async function r(e,r={}){const{spawn:n}=await Promise.resolve().then(t.t.bind(t,35317,23))
447
+ 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}),i=[],a=[]
448
+ let c=!1,l=!1
449
+ const u=e=>{if(s.pid)try{o?s.kill(e):process.kill(-s.pid,e)}catch{}}
450
+ let d,p
451
+ 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=>{i.push(e),r.onChunk?.("stdout",e)})),s.stderr?.on("data",(e=>{a.push(e),r.onChunk?.("stderr",e)}))
452
+ const f=e=>{l||(l=!0,p&&clearTimeout(p),d&&clearTimeout(d),t({stdout:Buffer.concat(i).toString("utf-8"),stderr:Buffer.concat(a).toString("utf-8"),exitCode:e,timedOut:c}))}
453
+ 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,...i]=e.split(" "),a=(0,n.spawn)(s,i,{cwd:t.cwd||process.cwd(),stdio:["pipe","pipe","pipe"]})
454
+ let c="",l=""
455
+ a.stdout?.on("data",(e=>{c+=e.toString()})),a.stderr?.on("data",(e=>{l+=e.toString()})),a.on("close",(e=>{r({stdout:c,stderr:l,exitCode:e||0})})),a.on("error",(t=>{o(new Error(`Command failed: ${e}\nError: ${t.message}`))})),t.timeout&&setTimeout((()=>{a.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(414).then(t.bind(t,79414)),i=s(),a=(new Date).toISOString(),c=n.cwd??process.cwd()
456
+ let l
457
+ fetch(`${i}/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:a,logPath:o.logPath,timeoutMs:n.timeoutMs}),signal:AbortSignal.timeout(2e3)}).catch((()=>{}))
458
+ try{l=await r(e,n)}catch(e){throw fetch(`${i}/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(`${i}/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}
459
+ const n=t(35317)
460
+ 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"},44853:(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??{}
461
+ if(!e)return r
462
+ const n=exports.ENVIRONMENT_PRESETS[e].config
463
+ 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.'}
464
+ const r=t(76982)
465
+ 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"
466
+ 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`
467
+ exports.OFFICE_BOX_DOCKERFILE=function(){const e=Buffer.from(o).toString("base64"),t=Buffer.from(exports.NOBREAK_DIGIT_HYPHEN_LUA).toString("base64")
468
+ 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}},48161:module=>{module.exports=require("node:os")},52429:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.ContainerRunner=void 0
469
+ const r=t(81618),n=t(22604),o=t(11895),s=t(26166),i=t(2566),a=t(90695),c=t(61260)
470
+ exports.ContainerRunner=class{constructor(e={}){this.image=e.image??"node:20-alpine",this.stepTimeoutMs=e.stepTimeoutMs??12e4,this.network=e.network??"none",this.resources=e.resources??{}}async run(e){if(!e.worktreePath)return{steps:[],ok:!1,error:"worktreePath is required"}
471
+ const t=e.image??this.image,s={}
472
+ let l=Date.now()
473
+ const u=e=>{const t=Date.now()
474
+ s[e]=(s[e]??0)+(t-l),l=t},d=await(0,r.ensureImage)(t)
475
+ if(u("image"),d)return{steps:[],ok:!1,error:d}
476
+ const p=await(0,n.withAdmission)(this.resources.memory??"1g","check",(async()=>{const{cpus:s,cpuset:i}=await(0,n.pickCores)(this.resources.cpus,o.DEFAULT_CPUS,this.resources.size)
477
+ let c=await(0,r.docker)(this.createArgs(e,t,!0,i,s),r.DOCKER_OP_TIMEOUT_MS)
478
+ if(0!==c.exit)return{error:c.spawnError??`docker create failed: ${(c.stderr||String(c.exit)).trim()}`}
479
+ let l=c.stdout.trim()
480
+ if(u("create"),await(0,a.claimScratch)(l,t,"1000:1000")){if(await(0,r.docker)(["rm","-f","-v",l],r.DOCKER_OP_TIMEOUT_MS),c=await(0,r.docker)(this.createArgs(e,t,!1,i,s),r.DOCKER_OP_TIMEOUT_MS),0!==c.exit)return{error:c.spawnError??`docker create failed: ${(c.stderr||String(c.exit)).trim()}`}
481
+ l=c.stdout.trim()}return u("scratch"),{id:l}}))
482
+ if("refused"in p)return{steps:[],ok:!1,error:p.refused}
483
+ if("error"in p.value)return{steps:[],ok:!1,error:p.value.error}
484
+ const f=p.value.id
485
+ try{const t=await(0,r.docker)(["start",f],r.DOCKER_OP_TIMEOUT_MS)
486
+ if(u("start"),0!==t.exit)return{steps:[],ok:!1,error:`docker start failed: ${(t.stderr||String(t.exit)).trim()}`}
487
+ const n=[]
488
+ let o=await(0,c.readOomKills)(f)??0
489
+ for(const t of e.steps){const s=Date.now(),a=await(0,r.dockerKeepingEnds)(["exec","-e",`${i.RUN_ENV_VAR}=${(0,i.withShellInit)(e.shellInit,t.run)}`,f,"/bin/sh","-c",i.RUN_FROM_ENV],t.timeoutMs??this.stepTimeoutMs),l=Date.now()-s,u=await(0,c.readOomKills)(f),d=null!=u?Math.max(0,u-o):0
490
+ null!=u&&(o=u)
491
+ const p=d>0?`${a.stderr}${a.stderr&&!a.stderr.endsWith("\n")?"\n":""}${(0,c.oomNote)(d,this.resources.memory??"1g")}\n`:a.stderr
492
+ n.push({run:t.run,exit:a.exit,stdout:a.stdout,stderr:p,ms:l,timedOut:a.timedOut})}return u("commands"),{steps:n,ok:n.every((e=>0===e.exit)),phaseMs:s}}finally{const e=Date.now()
493
+ await(0,r.docker)(["rm","-f","-v",f],r.DOCKER_OP_TIMEOUT_MS),s.remove=Date.now()-e}}createArgs(e,t,r,n,i){const c=Object.entries(e.env??{}).flatMap((([e,t])=>["-e",`${e}=${t}`])),l=e.depsVolume?["-v",`${e.depsVolume}:/work/node_modules`]:[],u=(e.mounts??[]).flatMap((e=>["-v",`${e.volume}:${e.target}`])),d=(e.readOnlyBinds??[]).flatMap((e=>["-v",`${e.host}:${e.target}:ro`]))
494
+ return["create","--label","alchemy.sandbox=rung1",...(0,s.hardenedCreateArgs)({network:this.network,user:"1000:1000",...r?{}:{extraTmpfs:[(0,a.scratchTmpfsArg)(512)]},shmSizeMb:this.resources.shmSizeMb,memory:this.resources.memory??"1g",cpus:i??this.resources.cpus??o.DEFAULT_CPUS,cpuset:n,pidsLimit:this.resources.pidsLimit??512}),...r?a.SCRATCH_VOLUME_ARGS:[],...c,"-v",`${e.worktreePath}:/work:rw`,...l,...u,...d,"-w","/work",t,"tail","-f","/dev/null"]}}},61260:(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)
495
+ if(0===t.exit){const e=/^oom_kill (\d+)/m.exec(t.stdout)
496
+ if(e)return Number(e[1])}const o=await(0,r.docker)(["exec",e,"cat","/sys/fs/cgroup/memory/memory.oom_control"],n)
497
+ if(0===o.exit){const e=/^oom_kill (\d+)/m.exec(o.stdout)
498
+ if(e)return Number(e[1])}return null},exports.probeBox=async function(e){const t=`cat /sys/fs/cgroup/memory.events 2>/dev/null || cat /sys/fs/cgroup/memory/memory.oom_control 2>/dev/null; if [ -s ${exports.LIVE_FRAME_PATH} ]; then echo __ALCHEMY_LIVE_FRAME__; fi`,o=await(0,r.docker)(["exec",e,"/bin/sh","-c",t],n),s=/^oom_kill (\d+)/m.exec(o.stdout)
499
+ return{oomKills:s?Number(s[1]):null,liveFrame:o.stdout.includes("__ALCHEMY_LIVE_FRAME__")}},exports.oomNote=function(e,t){return`[AlchemyLab] Out of memory: the kernel killed ${1===e?"a process":`${e} processes`} in this box during this command (the box's memory cap is ${t}). Exit code 137 means killed. Make the case smaller, or raise the environment's memory (resources.memory).`}
500
+ const r=t(81618),n=5e3
501
+ exports.LIVE_FRAME_PATH="/tmp/.alchemy_live.png"},70857:module=>{module.exports=require("os")},73024:module=>{module.exports=require("node:fs")},76760:module=>{module.exports=require("node:path")},76982:module=>{module.exports=require("crypto")},79896:module=>{module.exports=require("fs")},81618:(e,exports,t)=>{function r(){return{...l?{"alchemy.project":l}:{},"alchemy.owner":String(process.pid),...u.getStore()??{}}}function n(e){if("create"!==e[0]&&"run"!==e[0])return e
502
+ const t=new Set
503
+ e.forEach(((r,n)=>{"--label"===e[n-1]&&t.add(r.split("=")[0])}))
504
+ const n=Object.entries(r()).filter((([e])=>!t.has(e))).flatMap((([e,t])=>["--label",`${e}=${t.replace(/[\r\n]/g," ").slice(0,200)}`]))
505
+ return n.length?[e[0],...n,...e.slice(1)]:e}function o(e,t){return new Promise((r=>{(0,s.execFile)("docker",n(e),{timeout:t,killSignal:"SIGKILL",maxBuffer:33554432,windowsHide:!0},((e,t,n)=>{if(!e)return void r({exit:0,stdout:t,stderr:n,timedOut:!1})
506
+ const o=e
507
+ if("ENOENT"===o.code)return void r({exit:-1,stdout:t??"",stderr:n??"",timedOut:!1,spawnError:"docker CLI not found on PATH"})
508
+ const s=!0===o.killed||"SIGKILL"===o.signal,i="number"==typeof o.code?o.code:-1
509
+ r({exit:i,stdout:t??"",stderr:n??"",timedOut:s})}))}))}Object.defineProperty(exports,"__esModule",{value:!0}),exports.PULL_TIMEOUT_MS=exports.DOCKER_OP_TIMEOUT_MS=void 0,exports.setContainerProject=function(e){l=e||void 0},exports.withContainerLabels=function(e,t){const r=Object.fromEntries(Object.entries(e).filter((([,e])=>"string"==typeof e&&e.length>0)))
510
+ return u.run({...u.getStore()??{},...r},t)},exports.containerLabels=r,exports.withScopeLabels=n,exports.dockerKeepingEnds=function(e,t,r=524288){return new Promise((o=>{const i=new c.EndsKeeper(r),a=new c.EndsKeeper(r)
511
+ let l=!1,u=!1
512
+ const d=(0,s.spawn)("docker",n(e),{windowsHide:!0}),p=setTimeout((()=>{l=!0,d.kill("SIGKILL")}),t)
513
+ d.stdout.setEncoding("utf8").on("data",(e=>i.push(e))),d.stderr.setEncoding("utf8").on("data",(e=>a.push(e)))
514
+ const f=e=>{u||(u=!0,clearTimeout(p),o(e))}
515
+ d.on("error",(e=>f({exit:-1,stdout:i.text(),stderr:a.text(),timedOut:!1,..."ENOENT"===e.code?{spawnError:"docker CLI not found on PATH"}:{spawnError:e.message}}))),d.on("close",(e=>f({exit:l?-1:e??-1,stdout:i.text(),stderr:a.text(),timedOut:l})))}))},exports.docker=o,exports.volumeExists=async function(e){return 0===(await o(["volume","inspect",e],exports.DOCKER_OP_TIMEOUT_MS)).exit},exports.ensureImage=async function(e){const t=(0,a.localRecipeFor)(e)
516
+ if(t)return(0,a.ensureLocalImage)(t)
517
+ const r=await o(["image","inspect",e],exports.DOCKER_OP_TIMEOUT_MS)
518
+ if(r.spawnError)return r.spawnError
519
+ if(0===r.exit)return
520
+ const n=await o(["pull",e],exports.PULL_TIMEOUT_MS)
521
+ return 0!==n.exit?`docker pull ${e} failed: ${(n.stderr||String(n.exit)).trim()}`:void 0}
522
+ const s=t(31421),i=t(16698),a=t(83129),c=t(88196)
523
+ let l
524
+ const u=new i.AsyncLocalStorage
525
+ exports.DOCKER_OP_TIMEOUT_MS=6e4,exports.PULL_TIMEOUT_MS=3e5},83129:function(e,exports,t){function r(e){const t=m.get(e.image)
526
+ if(t)return t.work
527
+ const r=(async()=>{const t=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
528
+ if(t.spawnError)return t.spawnError
529
+ if(0===t.exit&&t.stdout.trim()===e.recipeHash)return
530
+ const r=a.mkdtempSync(l.join(c.tmpdir(),"alchemylab-image-"))
531
+ try{a.writeFileSync(l.join(r,"Dockerfile"),e.dockerfile)
532
+ const t=await(0,u.docker)(["build","--label",`${p}=${e.recipeHash}`,"-t",e.image,r],exports.BUILD_TIMEOUT_MS)
533
+ if(0!==t.exit){const r=(t.stderr||t.stdout||"").trim().split("\n").slice(-12).join("\n")
534
+ return`building ${e.image} failed${t.timedOut?" (timed out)":""}: ${r}`}return}finally{a.rmSync(r,{recursive:!0,force:!0})}})()
535
+ return m.set(e.image,{work:r,since:Date.now()}),r.then((t=>{t?h.set(e.image,{error:t,at:Date.now()}):h.delete(e.image)}),(t=>{h.set(e.image,{error:t instanceof Error?t.message:String(t),at:Date.now()})})).finally((()=>m.delete(e.image))),r}var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
536
+ var o=Object.getOwnPropertyDescriptor(t,r)
537
+ o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[]
538
+ for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
539
+ return t},n(e)},function(e){if(e&&e.__esModule)return e
540
+ var t={}
541
+ if(null!=e)for(var r=n(e),i=0;i<r.length;i++)"default"!==r[i]&&o(t,e,r[i])
542
+ return s(t,e),t})
543
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.BUILD_TIMEOUT_MS=void 0,exports.localRecipeFor=function(e){return f.find((t=>t.image===e))},exports.ensureLocalImage=r,exports.localImageState=async function(e){const t=m.get(e.image)
544
+ if(t)return{state:"building",since:t.since}
545
+ const r=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
546
+ if(r.spawnError)return{state:"no-docker",error:"Docker is not installed on this machine (no docker command)"}
547
+ if(0===r.exit&&r.stdout.trim()===e.recipeHash)return{state:"ready"}
548
+ if(/cannot connect to the docker daemon|is the docker daemon running|error during connect/i.test(r.stderr))return{state:"no-docker",error:"Docker is not running on this machine"}
549
+ const n=h.get(e.image)
550
+ return n?{state:"failed",...n}:{state:"missing"}},exports.startLocalImageBuild=function(e){return h.delete(e.image),r(e).catch((()=>{})),{since:m.get(e.image)?.since??Date.now()}}
551
+ const a=i(t(73024)),c=i(t(48161)),l=i(t(76760)),u=t(81618),d=t(44853),p="dev.alchemylab.recipe"
552
+ exports.BUILD_TIMEOUT_MS=15e5
553
+ const f=[{image:d.OFFICE_BOX_IMAGE,dockerfile:d.OFFICE_BOX_DOCKERFILE,recipeHash:d.OFFICE_BOX_RECIPE_HASH}],m=new Map,h=new Map},88194:module=>{module.exports=require("jszip")},88196:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.EndsKeeper=void 0,exports.keepEnds=function(e,t,r){return e.length<=t+r?e:`${e.slice(0,t)}\n[AlchemyLab] ${e.length-t-r} characters cut here; the start and the end are kept.\n${e.slice(-r)}`},exports.EndsKeeper=class{constructor(e){this.half=e,this.head="",this.tail="",this.cut=0}push(e){if(this.head.length<this.half){const t=this.half-this.head.length
554
+ if(this.head+=e.slice(0,t),!(e=e.slice(t)))return}this.tail+=e,this.tail.length>this.half&&(this.cut+=this.tail.length-this.half,this.tail=this.tail.slice(-this.half))}text(){return this.cut>0?`${this.head}\n[AlchemyLab] ${this.cut} characters of output cut here; the start and the end are kept.\n${this.tail}`:this.head+this.tail}}},88891:module=>{module.exports=require("unpdf")},90695:(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)
555
+ return 0===o.exit?null:o.spawnError??((o.stderr||"").trim()||`chown exited ${o.exit}`)}
556
+ const r=t(81618)
557
+ exports.SCRATCH_VOLUME_ARGS=["--mount","type=volume,dst=/scratch"]},91943:module=>{module.exports=require("fs/promises")},95900: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"})
558
+ if(!n.ok)throw new Error(n.error)
559
+ return n.bytes}async function r(e){const r=(0,u.documentKindFor)(e)
560
+ if(!r)return`(AlchemyLab: no text form for ${e.split(".").pop()} files)\n`
561
+ try{const n=await(0,u.extractDocumentText)(new Uint8Array(await(0,a.readFile)(e)),r,{convert:t})
562
+ return n.text.endsWith("\n")?n.text:`${n.text}\n`}catch(e){return`(AlchemyLab: could not read this ${r.toUpperCase()} version: ${e instanceof Error?e.message:String(e)})\n`}}module=e.nmd(module)
563
+ var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
564
+ var o=Object.getOwnPropertyDescriptor(t,r)
565
+ o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[]
566
+ for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
567
+ return t},n(e)},function(e){if(e&&e.__esModule)return e
568
+ var t={}
569
+ if(null!=e)for(var r=n(e),i=0;i<r.length;i++)"default"!==r[i]&&o(t,e,r[i])
570
+ return s(t,e),t})
571
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.textconv=r
572
+ const a=e(91943),c=i(e(70857)),l=i(e(16928)),u=e(36018),d=e(3517)
573
+ if(e.c[e.s]===module){const e=process.argv[2]
574
+ 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")))}}},s={}
492
575
  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
493
576
  if("object"==typeof n&&n){if(4&o&&n.__esModule)return n
494
577
  if(16&o&&"function"==typeof n.then)return n}var s=Object.create(null)
495
578
  e.r(s)
496
- var a={}
579
+ var i={}
497
580
  t=t||[null,r({}),r([]),r(r)]
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]))
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])
581
+ for(var a=2&o&&n;"object"==typeof a&&!~t.indexOf(a);a=r(a))Object.getOwnPropertyNames(a).forEach((e=>i[e]=()=>n[e]))
582
+ return i.default=()=>n,e.d(s,i),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
583
+ for(var i in r)e.o(r,i)&&(e.m[i]=r[i])
501
584
  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})()
585
+ for(var a=0;a<o.length;a++)n[o[a]]=1})(require("./"+e.u(t)))}
586
+ var i=e(e.s=95900)
587
+ module.exports=i})()