alchemylab 1.4.14 → 2.0.1

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.
@@ -0,0 +1,484 @@
1
+ (()=>{"use strict"
2
+ function e(t){var r=o[t]
3
+ if(void 0!==r)return r.exports
4
+ var module=o[t]={id:t,loaded:!1,exports:{}}
5
+ return n[t].call(module.exports,module,module.exports,e),module.loaded=!0,module.exports}var t,r,n={4703:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.LIVE_FRAME_PATH=void 0,exports.readOomKills=async function(e){const t=await(0,r.docker)(["exec",e,"cat","/sys/fs/cgroup/memory.events"],n)
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.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; `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"
37
+ const n=`#!/bin/sh\n# render-pdf FILE... : convert Word, Excel, PowerPoint, OpenDocument, Markdown or HTML to PDF.\n# Writes each PDF under \${RENDER_OUT:-${exports.OFFICE_RENDER_DIR}} and prints its path, one per line.\nset -e\nout="\${RENDER_OUT:-${exports.OFFICE_RENDER_DIR}}"\nmkdir -p "$out" /scratch/.render-work\nexport HOME="\${HOME:-/scratch}"\nif [ "$1" = "--self-test" ]; then\n cd /scratch/.render-work\n python3 -c "import docx; d = docx.Document(); d.add_heading('render-pdf self-test', 1); d.add_paragraph('ok'); d.save('self-test.docx')"\n set -- /scratch/.render-work/self-test.docx\nfi\n[ "$#" -gt 0 ] || { echo "usage: render-pdf FILE..." >&2; exit 2; }\nfor f in "$@"; do\n [ -f "$f" ] || { echo "render-pdf: no such file: $f" >&2; exit 1; }\n name=$(basename "$f"); stem="\${name%.*}"\n case "$name" in\n *.md|*.markdown) pandoc "$f" -o "/scratch/.render-work/$stem.docx"; src="/scratch/.render-work/$stem.docx" ;;\n *) src="$f" ;;\n esac\n soffice --headless --norestore -env:UserInstallation=file:///scratch/.render-profile --convert-to pdf --outdir "$out" "$src" >/scratch/.render-work/soffice.log 2>&1 \\\n || { echo "render-pdf: LibreOffice could not convert $f" >&2; tail -5 /scratch/.render-work/soffice.log >&2; exit 1; }\n [ -f "$out/$stem.pdf" ] || { echo "render-pdf: no PDF produced for $f" >&2; exit 1; }\n echo "$out/$stem.pdf"\ndone\n`
38
+ exports.OFFICE_BOX_DOCKERFILE=["FROM python:3.12-slim","ENV DEBIAN_FRONTEND=noninteractive PIP_NO_CACHE_DIR=1 PYTHONDONTWRITEBYTECODE=1","RUN apt-get update \\"," && apt-get install -y --no-install-recommends \\"," libreoffice-writer-nogui libreoffice-calc-nogui libreoffice-impress-nogui \\"," pandoc fonts-liberation fonts-dejavu-core fonts-crosextra-carlito fonts-crosextra-caladea \\"," && rm -rf /var/lib/apt/lists/*","RUN pip install python-docx openpyxl python-pptx pypdf",`RUN echo ${Buffer.from(n).toString("base64")} | base64 -d > /usr/local/bin/render-pdf && chmod 755 /usr/local/bin/render-pdf`,""].join("\n"),exports.OFFICE_BOX_RECIPE_HASH=(0,r.createHash)("sha256").update(exports.OFFICE_BOX_DOCKERFILE).digest("hex").slice(0,16),exports.OFFICE_BOX_PRESET={name:"Office",description:"Make and render office files: python-docx, openpyxl, python-pptx, pandoc and LibreOffice in a sealed box. `render-pdf FILE` writes a PDF under /scratch/render. The worktree is read-only here: make files under /scratch, record them (results record, box), then view_asset({ result }) to look at a PDF and write_file({ path, fromResult }) to put a file in the repository.",smoke:"render-pdf --self-test",config:{image:exports.OFFICE_BOX_IMAGE,shellInit:"export HOME=/scratch",resources:{memory:"3g",scratchMb:1024,shmMb:256}}},exports.ENVIRONMENT_PRESETS={office:exports.OFFICE_BOX_PRESET}},15845:function(module,exports,e){async function t(e,t,r){const n=await(0,d.renderDocument)({bytes:Buffer.from(e),filename:`version.${t}`,to:r},{cacheDir:l.join(c.tmpdir(),"alchemylab-render-cache"),image:"present-only"})
39
+ if(!n.ok)throw new Error(n.error)
40
+ return n.bytes}async function r(e){const r=(0,u.documentKindFor)(e)
41
+ if(!r)return`(AlchemyLab: no text form for ${e.split(".").pop()} files)\n`
42
+ try{const n=await(0,u.extractDocumentText)(new Uint8Array(await(0,i.readFile)(e)),r,{convert:t})
43
+ 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)
44
+ var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
45
+ var o=Object.getOwnPropertyDescriptor(t,r)
46
+ 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=[]
47
+ for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
48
+ return t},n(e)},function(e){if(e&&e.__esModule)return e
49
+ var t={}
50
+ if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
51
+ return s(t,e),t})
52
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.textconv=r
53
+ const i=e(91943),c=a(e(70857)),l=a(e(16928)),u=e(98335),d=e(24716)
54
+ if(e.c[e.s]===module){const e=process.argv[2]
55
+ e||(process.stderr.write("usage: textconv <file>\n"),process.exit(2)),r(e).then((e=>process.stdout.write(e)),(()=>process.stdout.write("(AlchemyLab: text conversion failed)\n")))}},16603:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.withShellInit=function(e,t){const r=(e??"").trim()
56
+ return r?`${r} && ${t}`:t},exports.carriesOwnShellInit=function(e){return/(^|[;&|]\s*|\s-lc\s*['"]?\s*)(\.|source)\s+\S+\s*(&&|;)/.test(e)}},16698:module=>{module.exports=require("node:async_hooks")},16928:module=>{module.exports=require("path")},24716:function(e,exports,t){function r(e,t){const r=d.extname(e).slice(1).toLowerCase()
57
+ return b[t].includes(r)}function n(e,t){const r=e=>`'${e.replace(/'/g,"'\\''")}'`,n=`/work/in/${e}`,o=e.replace(/\.[^.]+$/,"")
58
+ return"pdf"===t?`RENDER_OUT=/work/out render-pdf ${r(n)}`:"docx"===t&&/\.(md|markdown|html?)$/i.test(e)?`pandoc ${r(n)} -o ${r(`/work/out/${o}.docx`)}`:`soffice --headless --norestore -env:UserInstallation=file:///scratch/.render-profile --convert-to ${t} --outdir /work/out ${r(n)} >/dev/null`}var o,s=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
59
+ var o=Object.getOwnPropertyDescriptor(t,r)
60
+ 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=[]
61
+ for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
62
+ return t},o(e)},function(e){if(e&&e.__esModule)return e
63
+ var t={}
64
+ if(null!=e)for(var r=o(e),n=0;n<r.length;n++)"default"!==r[n]&&s(t,e,r[n])
65
+ return a(t,e),t})
66
+ 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")
67
+ var s
68
+ if(!r(o,e.to))return{ok:!1,error:`${d.extname(o)||"this file"} cannot be turned into ${e.to.toUpperCase()}`}
69
+ if(e.bytes.length>exports.MAX_RENDER_INPUT_BYTES)return{ok:!1,error:`file is over ${exports.MAX_RENDER_INPUT_BYTES/1048576} MB`}
70
+ 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}`)
71
+ try{return{ok:!0,bytes:await l.promises.readFile(i),cached:!0}}catch{}const b=t.image??"wait"
72
+ if("wait"!==b){const e=(0,f.localRecipeFor)(m.OFFICE_BOX_IMAGE),t=await(0,f.localImageState)(e)
73
+ if("no-docker"===t.state)return{ok:!1,error:t.error,unavailable:!0}
74
+ if("building"===t.state)return{ok:!1,error:g,preparing:!0,since:t.since}
75
+ if("failed"===t.state&&Date.now()-t.at<w)return{ok:!1,error:`building the office renderer failed: ${t.error.split("\n").slice(-3).join(" ")}`}
76
+ if("ready"!==t.state){if("present-only"===b)return{ok:!1,error:"the office renderer is not built on this machine yet",unavailable:!0}
77
+ const{since:t}=(0,f.startLocalImageBuild)(e)
78
+ return{ok:!1,error:g,preparing:!0,since:t}}}const x=await l.promises.mkdtemp(d.join(u.tmpdir(),"alchemylab-render-"))
79
+ 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})
80
+ 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)}]})
81
+ if(!s.ok){const e=s.steps[0]
82
+ 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}`)))
83
+ if(!a)return{ok:!1,error:`no ${e.to.toUpperCase()} was produced`}
84
+ const c=await l.promises.readFile(d.join(x,"out",a))
85
+ 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})}}
86
+ const c=t(76982),l=t(79896),u=i(t(70857)),d=i(t(16928)),p=t(64936),f=t(69968),m=t(7740)
87
+ exports.MAX_RENDER_INPUT_BYTES=52428800
88
+ const h=18e4,b={pdf:["docx","doc","odt","rtf","xlsx","xlsm","xls","ods","csv","pptx","ppt","odp","md","markdown","html","htm"],docx:["md","markdown","html","htm","odt","rtf","doc"],xlsx:["xls","ods"],pptx:["ppt","odp"]}
89
+ exports.RENDER_MIME={pdf:"application/pdf",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",pptx:"application/vnd.openxmlformats-officedocument.presentationml.presentation"}
90
+ const w=12e4,g="the office renderer is being built on this machine (first use only, usually a few minutes)"},31421:module=>{module.exports=require("node:child_process")},48161:module=>{module.exports=require("node:os")},50478:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.rtfToText=function(e){const o="string"==typeof e?e:Buffer.from(e).toString("latin1")
91
+ if(!/^\s*\{\s*\\rtf/i.test(o))throw new Error("not an RTF file (it does not start with {\\rtf)")
92
+ const s=[],a=[{skip:!1,skipChars:0}],i=()=>a[a.length-1],c=e=>{i().skip||s.push(e)}
93
+ for(let e=0;e<o.length;e++){const s=o[e]
94
+ if("{"===s){a.push({...i()})
95
+ continue}if("}"===s){a.length>1&&a.pop()
96
+ continue}if("\r"===s||"\n"===s)continue
97
+ if("\\"!==s){if(i().skipChars>0){i().skipChars--
98
+ continue}c(s)
99
+ continue}const u=/^\\([a-zA-Z]+)(-?\d+)? ?/.exec(o.slice(e))
100
+ if(!u){const s=o[e+1]
101
+ if("*"===s){const r=/^\\\*\\([a-zA-Z]+)/.exec(o.slice(e))
102
+ r&&!t.has(r[1])||(i().skip=!0),e+=1
103
+ continue}if("'"===s){const t=o.slice(e+2,e+4)
104
+ if(e+=3,i().skipChars>0){i().skipChars--
105
+ continue}c((l=parseInt(t,16)||0)<128?String.fromCharCode(l):n[l-128]??"")
106
+ continue}if(void 0!==s&&void 0!==r[s]){c(r[s]),e+=1
107
+ continue}e+=1
108
+ continue}const[d,p,f]=u
109
+ e+=d.length-1
110
+ const m=void 0===f?void 0:Number(f)
111
+ if(t.has(p))i().skip=!0
112
+ 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
113
+ else{const e=i().skipChars>0
114
+ i().skipChars=Math.max(0,a[a.length-1].ucSkip??1),e||void 0===m||c(String.fromCodePoint(m<0?m+65536:m))}}var l
115
+ return s.join("").replace(/[ \t]+\n/g,"\n").replace(/\n{3,}/g,"\n\n").split("\n").map((e=>{const t=e.replace(/\s+$/,"").replace(/^\s*\|\s*/,"").replace(/\s*\|\s*$/,"")
116
+ return e.includes(" | ")?`| ${t} |`:t})).join("\n").trim()}
117
+ const t=new Set(["fonttbl","colortbl","stylesheet","listtable","listoverridetable","revtbl","rsidtbl","generator","info","pict","object","themedata","colorschememapping","latentstyles","datastore","xmlnstbl","filetbl","upr","fldinst","nonshppict","shppict","panose"]),r={par:"\n",line:"\n",tab:"\t",sect:"\n\n",page:"\n\n",lquote:"\u2018",rquote:"\u2019",ldblquote:"\u201c",rdblquote:"\u201d",emdash:"\u2014",endash:"\u2013",bullet:"\u2022",emspace:" ",enspace:" ",qmspace:" ","~":"\xa0","-":"",_:"-","{":"{","}":"}","\\":"\\"},n="\u20ac\x81\u201a\u0192\u201e\u2026\u2020\u2021\u02c6\u2030\u0160\u2039\u0152\x8d\u017d\x8f\x90\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u02dc\u2122\u0161\u203a\u0153\x9d\u017e\u0178\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"},53157:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.hardenedCreateArgs=function(e){return["--network",e.network,"--user",e.user,"--cap-drop","ALL",...(e.capAdds??[]).flatMap((e=>["--cap-add",e])),...Object.entries(e.sysctls??{}).flatMap((([e,t])=>["--sysctl",`${e}=${t}`])),"--security-opt","no-new-privileges","--read-only","--tmpfs","/tmp:rw,nosuid,nodev,exec,size=256m",...(e.extraTmpfs??[]).flatMap((e=>["--tmpfs",e])),"--ipc","none","--tmpfs",`/dev/shm:rw,nosuid,nodev,size=${e.shmSizeMb??64}m`,"--memory",e.memory,"--memory-swap",e.memory,"--cpus",String(e.cpus),"--pids-limit",String(e.pidsLimit),"-e","HOME=/tmp"]}},64264:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.SCRATCH_VOLUME_ARGS=void 0,exports.scratchTmpfsArg=function(e){return`/scratch:rw,nosuid,nodev,exec,size=${e}m`},exports.claimScratch=async function(e,t,n){const o=await(0,r.docker)(["run","--rm","--network","none","--user","0:0","--volumes-from",e,"--entrypoint","chown",t,n,"/scratch"],r.DOCKER_OP_TIMEOUT_MS)
118
+ return 0===o.exit?null:o.spawnError??((o.stderr||"").trim()||`chown exited ${o.exit}`)}
119
+ const r=t(6175)
120
+ exports.SCRATCH_VOLUME_ARGS=["--mount","type=volume,dst=/scratch"]},64936:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.ContainerRunner=void 0
121
+ const r=t(6175),n=t(53157),o=t(16603),s=t(64264),a=t(4703)
122
+ 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"}
123
+ const t=e.image??this.image,n={}
124
+ let i=Date.now()
125
+ const c=e=>{const t=Date.now()
126
+ n[e]=(n[e]??0)+(t-i),i=t},l=await(0,r.ensureImage)(t)
127
+ if(c("image"),l)return{steps:[],ok:!1,error:l}
128
+ let u=await(0,r.docker)(this.createArgs(e,t,!0),r.DOCKER_OP_TIMEOUT_MS)
129
+ if(0!==u.exit)return{steps:[],ok:!1,error:u.spawnError??`docker create failed: ${(u.stderr||String(u.exit)).trim()}`}
130
+ let d=u.stdout.trim()
131
+ 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()}`}
132
+ d=u.stdout.trim()}c("scratch")
133
+ try{const t=await(0,r.docker)(["start",d],r.DOCKER_OP_TIMEOUT_MS)
134
+ if(c("start"),0!==t.exit)return{steps:[],ok:!1,error:`docker start failed: ${(t.stderr||String(t.exit)).trim()}`}
135
+ const s=[]
136
+ let i=await(0,a.readOomKills)(d)??0
137
+ for(const t of e.steps){const n=Date.now(),c=await(0,r.docker)(["exec",d,"/bin/sh","-c",(0,o.withShellInit)(e.shellInit,t.run)],t.timeoutMs??this.stepTimeoutMs),l=Date.now()-n,u=await(0,a.readOomKills)(d),p=null!=u?Math.max(0,u-i):0
138
+ null!=u&&(i=u)
139
+ const f=p>0?`${c.stderr}${c.stderr&&!c.stderr.endsWith("\n")?"\n":""}${(0,a.oomNote)(p,this.resources.memory??"1g")}\n`:c.stderr
140
+ 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()
141
+ 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`]))
142
+ 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)
143
+ if(t)return t.work
144
+ const r=(async()=>{const t=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
145
+ if(t.spawnError)return t.spawnError
146
+ if(0===t.exit&&t.stdout.trim()===e.recipeHash)return
147
+ const r=i.mkdtempSync(l.join(c.tmpdir(),"alchemylab-image-"))
148
+ try{i.writeFileSync(l.join(r,"Dockerfile"),e.dockerfile)
149
+ const t=await(0,u.docker)(["build","--label",`${p}=${e.recipeHash}`,"-t",e.image,r],exports.BUILD_TIMEOUT_MS)
150
+ if(0!==t.exit){const r=(t.stderr||t.stdout||"").trim().split("\n").slice(-12).join("\n")
151
+ return`building ${e.image} failed${t.timedOut?" (timed out)":""}: ${r}`}return}finally{i.rmSync(r,{recursive:!0,force:!0})}})()
152
+ 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)
153
+ var o=Object.getOwnPropertyDescriptor(t,r)
154
+ 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=[]
155
+ for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
156
+ return t},n(e)},function(e){if(e&&e.__esModule)return e
157
+ var t={}
158
+ if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
159
+ return s(t,e),t})
160
+ 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)
161
+ if(t)return{state:"building",since:t.since}
162
+ const r=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
163
+ if(r.spawnError)return{state:"no-docker",error:"Docker is not installed on this machine (no docker command)"}
164
+ if(0===r.exit&&r.stdout.trim()===e.recipeHash)return{state:"ready"}
165
+ 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"}
166
+ const n=h.get(e.image)
167
+ 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()}}
168
+ const i=a(t(73024)),c=a(t(48161)),l=a(t(76760)),u=t(6175),d=t(7740),p="dev.alchemylab.recipe"
169
+ exports.BUILD_TIMEOUT_MS=15e5
170
+ 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)
171
+ 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"}]
172
+ 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)
173
+ 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()
174
+ if("amp"===r)return"&"
175
+ if("lt"===r)return"<"
176
+ if("gt"===r)return">"
177
+ if("quot"===r)return'"'
178
+ if("apos"===r)return"'"
179
+ const n=r.startsWith("#x")?parseInt(r.slice(2),16):parseInt(r.slice(1),10)
180
+ return Number.isFinite(n)?String.fromCodePoint(n):e}))}function s(e,t){const r=new RegExp(`(?:^|\\s)${t.replace(":","\\:")}="([^"]*)"`).exec(e)
181
+ return r?o(r[1]):void 0}function a(e,t){const r=new Map
182
+ if(!e)return r
183
+ for(const n of e.matchAll(/<Relationship\b([^>]*)\/?>/g)){const e=s(n[1],"Id"),o=s(n[1],"Target")
184
+ e&&o&&r.set(e,o.startsWith("/")?o.slice(1):i(`${t}/${o}`))}return r}function i(e){const t=[]
185
+ for(const r of e.split("/"))r&&"."!==r&&(".."===r?t.pop():t.push(r))
186
+ return t.join("/")}function c(e){const t=e.slice(0,e.lastIndexOf("/"))
187
+ 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)
188
+ return r?`[image: ${r}]`:"[image]"}async function u(e,t){const r=new Map
189
+ for(const[o,s]of t){if(!/charts\/chart[^/]*\.xml$/.test(s))continue
190
+ const t=await n(e,s)
191
+ t&&r.set(o,d(t))}return r}function d(e){const t=p(e),r=[...new Set([...t.matchAll(/<(\w+Chart)\b/g)].map((e=>P[e[1]])).filter(Boolean))]
192
+ "bar"===r[0]&&/<barDir val="col"/.test(t)&&(r[0]="column")
193
+ const n=t.split("<plotArea")[0],s=/<title>([\s\S]*?)<\/title>/.exec(n)?.[1],a=s?[...s.matchAll(/<t>([\s\S]*?)<\/t>/g)].map((e=>o(e[1]))).join("").trim():"",i=[...t.matchAll(/<ser>([\s\S]*?)<\/ser>/g)].map((e=>{const t=e[1],r=/<tx>([\s\S]*?)<\/tx>/.exec(t)?.[1]??"",n=o(/<v>([\s\S]*?)<\/v>/.exec(r)?.[1]??/<f>([\s\S]*?)<\/f>/.exec(r)?.[1]??"").trim(),s=e=>{if(!e)return""
194
+ const t=/<f>([\s\S]*?)<\/f>/.exec(e)?.[1],r=[...e.matchAll(/<v>([\s\S]*?)<\/v>/g)].map((e=>o(e[1])))
195
+ 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])
196
+ return`${n||"series"}${a?`: ${a}`:""}${i?` by ${i}`:""}`}))
197
+ 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=[]
198
+ let a=null,i="",c=!1,u=!1,d=null,p=0
199
+ 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
200
+ for(const m of e.matchAll(f)){const[,e,f,h,b,w]=m
201
+ if("mc:Fallback"===f){b||(p+=e?-1:1)
202
+ continue}if(p>0)continue
203
+ if(void 0!==w){u&&a&&a.push(o(w))
204
+ continue}const g=n[n.length-1]
205
+ if(e)switch(f){case"w:drawing":{if(!d)break
206
+ const e=d.chart??l(d.descr,d.name)
207
+ d=null,a?a.push(` ${e} `):r.push(e)
208
+ break}case"w:t":u=!1
209
+ break
210
+ case"w:p":{const e=(a??[]).join("").trim()
211
+ if(a=null,g?.cell){e&&g.cell.push(e)
212
+ break}if(!e){r.length&&""!==r[r.length-1]&&r.push("")
213
+ break}const t=/^(?:heading|kop|\xfcberschrift|titre)\s*(\d)/i.exec(i)||(/^title$/i.test(i)?["","1"]:null)
214
+ r.push(t?`${"#".repeat(Math.min(6,Number(t[1])))} ${e}`:c?`- ${e}`:e)
215
+ break}case"w:tc":g?.cell&&g.row&&(g.row.push(g.cell.join(" ")),g.cell=null)
216
+ break
217
+ case"w:tr":g?.row&&(g.rows.push(g.row),g.row=null)
218
+ break
219
+ case"w:tbl":{const e=n.pop()
220
+ if(!e)break
221
+ const t=e.rows.map((e=>`| ${e.map((e=>e.replace(/\|/g,"\\|"))).join(" | ")} |`)),o=n[n.length-1]
222
+ o?.cell?o.cell.push(t.join(" ")):r.push(...t,"")
223
+ break}}else switch(f){case"w:drawing":b||(d={})
224
+ break
225
+ case"wp:docPr":d&&(d.name=s(h,"name"),d.descr=s(h,"descr"))
226
+ break
227
+ case"c:chart":d&&(d.chart=t.get(s(h,"r:id")??"")??"[chart]")
228
+ break
229
+ case"v:imagedata":{const e=l(s(h,"o:title"),void 0)
230
+ a?a.push(e):r.push(e)
231
+ break}case"w:p":a=[],i="",c=!1
232
+ break
233
+ case"w:pStyle":i=s(h,"w:val")??""
234
+ break
235
+ case"w:numPr":c=!0
236
+ break
237
+ case"w:t":b||(u=!0)
238
+ break
239
+ case"w:tab":a?.push("\t")
240
+ break
241
+ case"w:br":case"w:cr":a?.push("\n")
242
+ break
243
+ case"w:tbl":n.push({rows:[],row:null,cell:null})
244
+ break
245
+ case"w:tr":g&&(g.row=[])
246
+ break
247
+ 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)
248
+ for(const t of a(await n(e,o.path),o.dir).values()){if(!/drawings\/drawing[^/]*\.xml$/.test(t))continue
249
+ const o=await n(e,t)
250
+ if(!o)continue
251
+ const i=p(o),d=c(t),f=await u(e,a(await n(e,d.path),d.dir))
252
+ 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}`:""
253
+ if(n){r.push(`${(f.get(n)??"[chart]").replace(/\]$/,`${a}]`)}`)
254
+ continue}const i=/<pic>[\s\S]*?<cNvPr\b([^>]*)\/?>/.exec(t)
255
+ i&&r.push(l(s(i[1],"descr"),s(i[1],"name")).replace(/\]$/,`${a}]`))}}return r}function h(e){if(!e)return[]
256
+ const t=[]
257
+ for(const r of e.matchAll(/<si\b[^>]*>([\s\S]*?)<\/si>/g)){const e=[]
258
+ for(const t of r[1].matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g))e.push(o(t[1]))
259
+ t.push(e.join(""))}return t}function b(e){const t=/^[A-Z]+/i.exec(e)?.[0].toUpperCase()??"A"
260
+ let r=0
261
+ for(const e of t)r=26*r+(e.charCodeAt(0)-64)
262
+ return r-1}function w(e){let t=""
263
+ for(let r=e+1;r>0;r=Math.floor((r-1)/26))t=String.fromCharCode(65+(r-1)%26)+t
264
+ return t}function g(e,t){const r=[]
265
+ let n=0,a=!1
266
+ for(const i of e.matchAll(/<row\b([^>]*?)(?:\/>|>([\s\S]*?)<\/row>)/g)){if(r.length>=C){a=!0
267
+ break}const e=i[2]??"",c=[]
268
+ let l=0
269
+ for(const r of e.matchAll(/<c\b([^>]*?)(?:\/>|>([\s\S]*?)<\/c>)/g)){const e=s(r[1],"r"),n=e?b(e):l
270
+ l=n+1
271
+ const a=s(r[1],"t"),i=r[2]??"",u=/<f\b[^>]*>([\s\S]*?)<\/f>/.exec(i)?.[1]
272
+ let d=""
273
+ if("inlineStr"===a)d=[...i.matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g)].map((e=>o(e[1]))).join("")
274
+ else{const e=/<v\b[^>]*>([\s\S]*?)<\/v>/.exec(i)?.[1]
275
+ 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)
276
+ for(const e of n.matchAll(/<pic\b[^>]*>[\s\S]*?<\/pic>|<graphicFrame\b[^>]*>[\s\S]*?<\/graphicFrame>/g)){const n=e[0]
277
+ if(/^<pic\b/.test(n)){const e=/<cNvPr\b([^>]*)\/?>/.exec(n)?.[1]??""
278
+ r.push(l(s(e,"descr"),s(e,"name")))
279
+ continue}const o=/<chart\b[^>]*r:id="([^"]+)"/.exec(n)?.[1]
280
+ o&&r.push(t.get(o)??"[chart]")}return r}function k(e){const t=[]
281
+ for(const r of e.matchAll(/<a:p\b[^>]*>([\s\S]*?)<\/a:p>/g)){const e=[]
282
+ for(const t of r[1].matchAll(/<a:t\b[^>]*>([\s\S]*?)<\/a:t>|<a:br\b[^>]*\/>/g))e.push(void 0!==t[1]?o(t[1]):"\n")
283
+ const n=e.join("").trim()
284
+ n&&t.push(n)}return t}async function v(e,t,o){const s=await r(e),a=(await n(s,"mimetype"))?.trim(),i=await n(s,"content.xml")
285
+ if(!i||a&&a!==t)throw new Error(`not an OpenDocument ${o} (${i?`its mimetype is ${a}`:"content.xml is missing"})`)
286
+ const c=new Map
287
+ for(const e of Object.keys(s.files)){const t=/^(.+)\/content\.xml$/.exec(e)?.[1]
288
+ if(!t)continue
289
+ const r=await n(s,e)
290
+ r&&/<chart:chart\b/.test(r)&&c.set(t,E(r))}return{xml:i.split(/<office:body\b/)[1]??i,objects:c}}function O(e,t){return e.object?t.get((e.href??"").replace(/^\.\//,""))??`[embedded object: ${(e.desc||e.title||e.name||"unnamed").trim()}]`:e.image?l(e.desc||e.title,e.name):null}function E(e){const t=/chart:class="chart:(\w+)"/.exec(e)?.[1]??"chart",r=[...(/<chart:title\b[^>]*>([\s\S]*?)<\/chart:title>/.exec(e)?.[1]??"").matchAll(/<text:p\b[^>]*>([\s\S]*?)<\/text:p>/g)].map((e=>o(e[1].replace(/<[^>]+>/g,"")))).join(" ").trim(),n=[],a=/<table:table\b[^>]*table:name="local-table"[^>]*>([\s\S]*?)<\/table:table>/.exec(e)?.[1]
291
+ if(a)for(const e of a.matchAll(/<table:table-row\b[^>]*>([\s\S]*?)<\/table:table-row>/g)){const t=[]
292
+ for(const r of e[1].matchAll(/<table:(?:table-cell|covered-table-cell)\b([^>]*?)(?:\/>|>([\s\S]*?)<\/table:(?:table-cell|covered-table-cell)>)/g)){const e=o([...(r[2]??"").matchAll(/<text:p\b[^>]*>([\s\S]*?)<\/text:p>/g)].map((e=>e[1].replace(/<[^>]+>/g,""))).join(" ")).trim()||s(r[1],"office:value")||"",n=Math.min(Math.max(1,Number(s(r[1],"table:number-columns-repeated")??1)||1),R)
293
+ for(let r=0;r<n;r++)t.push(e)}n.push(t)}const i=e=>{const t=/^\$?([A-Z]+)\$?(\d+)$/.exec(e)
294
+ return t?{col:b(t[1]),row:Number(t[2])-1}:null},c=e=>{if(!e)return""
295
+ const t=e.split(":").map((e=>({table:e.slice(0,e.lastIndexOf(".")).replace(/^'(.*)'$/,"$1"),ref:e.slice(e.lastIndexOf(".")+1)})))
296
+ 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
297
+ if(!e||!r)return""
298
+ const o=[]
299
+ for(let t=e.row;t<=r.row;t++)for(let s=e.col;s<=r.col;s++)o.push(n[t]?.[s]??"")
300
+ return`${o.slice(0,8).join(", ")}${o.length>8?`, ... (${o.length})`:""}`}const r=t.map((e=>e.ref.replace(/\$/g,"")))
301
+ return`${t[0].table?`${t[0].table}!`:""}${2===r.length&&r[0]===r[1]?r[0]:r.join(":")}`},l=c(/<chart:categories\b[^>]*table:cell-range-address="([^"]+)"/.exec(e)?.[1]),u=[...e.matchAll(/<chart:series\b([^>]*)>/g)].map((e=>{const t=c(s(e[1],"chart:values-cell-range-address"))
302
+ return`${c(s(e[1],"chart:label-cell-address"))||"series"}${t?`: ${t}`:""}${l?` by ${l}`:""}`}))
303
+ return`[chart: ${N[t]??t}${r?` "${r}"`:""}${u.length?`; ${u.join("; ")}`:""}]`}function $(e){return e.replace(/^[a-z]+:/i,"").replace(/^=/,"").replace(/\[([^\]]*)\]/g,((e,t)=>t.split(":").map((e=>{const t=e.lastIndexOf("."),r=e.slice(0,t).replace(/^\$/,"").replace(/^'(.*)'$/,"$1"),n=e.slice(t+1).replace(/\$/g,"")
304
+ return r?`${r}!${n}`:n})).join(":")))}function y(e,t,r){switch(e){case"text:tab":return r.push("\t"),!0
305
+ case"text:line-break":return r.push("\n"),!0
306
+ case"text:s":return r.push(" ".repeat(Math.min(100,Number(s(t,"text:c")??1)||1))),!0
307
+ default:return!1}}function M(e,t=new Map){const r=[],n=[],a=new L
308
+ let i=0,c=0,l=null,u=null
309
+ for(const d of e.matchAll(A)){const[,e,p,f,m,h]=d
310
+ if(void 0!==h){if(c)continue
311
+ u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))
312
+ continue}if(F.has(p)){m||(c+=e?-1:1)
313
+ continue}if(c)continue
314
+ const b=n[n.length-1]
315
+ if(e)switch(p){case"svg:title":case"svg:desc":u=null
316
+ break
317
+ case"draw:frame":{const e=l?O(l,t):null
318
+ if(l=null,!e)break
319
+ a.current?a.pushSpaced(e):b?.cell?b.cell.push(e):r.push(e)
320
+ break}case"text:p":case"text:h":{const e=a.close()
321
+ if(!e)break
322
+ if(b?.cell){e.plain&&b.cell.push(e.plain)
323
+ break}if(!e.line){r.length&&""!==r[r.length-1]&&r.push("")
324
+ break}r.push(e.line)
325
+ break}case"text:list-item":i=Math.max(0,i-1)
326
+ break
327
+ case"table:table-cell":case"table:covered-table-cell":b?.cell&&b.row&&(b.row.push(b.cell.join(" ")),b.cell=null)
328
+ break
329
+ case"table:table-row":b?.row&&(b.rows.push(b.row),b.row=null)
330
+ break
331
+ case"table:table":{const e=n.pop()
332
+ if(!e)break
333
+ const t=e.rows.map((e=>`| ${e.map((e=>e.replace(/\|/g,"\\|"))).join(" | ")} |`)),o=n[n.length-1]
334
+ o?.cell?o.cell.push(t.join(" ")):r.push(...t,"")
335
+ break}}else{if(y(p,f,a))continue
336
+ 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)
337
+ break
338
+ case"text:list-item":m||i++
339
+ break
340
+ case"table:table":m||n.push({rows:[],row:null,cell:null})
341
+ break
342
+ case"table:table-row":b&&!m&&(b.row=[])
343
+ break
344
+ case"table:table-cell":case"table:covered-table-cell":b&&(m?b.row?.push(""):b.cell=[])
345
+ break
346
+ case"draw:frame":m||(l={name:s(f,"draw:name")})
347
+ break
348
+ case"draw:image":l&&(l.image=!0)
349
+ break
350
+ case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
351
+ break
352
+ case"svg:title":case"svg:desc":!m&&l&&(u="svg:title"===p?"title":"desc")}}}return r.join("\n").replace(/\n{3,}/g,"\n\n").trim()}function S(e,t=new Map){const r=[]
353
+ let n=!1,a=null,i=null,c=null,l=null,u=null,d=0,p=!1
354
+ for(const f of e.matchAll(A)){const[,e,m,h,b,w]=f
355
+ if(void 0!==w){if(d)continue
356
+ u&&l?l[u]=(l[u]??"")+o(w):c&&p&&c.parts.push(o(w))
357
+ continue}if(F.has(m)){b||(d+=e?-1:1)
358
+ continue}if(d)continue
359
+ const g=()=>{if(!c||!i)return
360
+ let e=c.parts.join("").trim()||c.value||""
361
+ if(c.formula&&(e=`${e}${e?" ":""}(=${$(c.formula)})`),e)for(let t=0;t<Math.min(c.repeat,R);t++)i.cells[i.col+t]=e.replace(/[\t\r\n]+/g," ")
362
+ i.col+=c.repeat,c=null}
363
+ if(e)switch(m){case"svg:title":case"svg:desc":u=null
364
+ break
365
+ case"draw:frame":{const e=l?O(l,t):null
366
+ l=null,e&&a&&a.figures.push(e)
367
+ break}case"text:p":p=!1
368
+ break
369
+ case"table:table-cell":case"table:covered-table-cell":g()
370
+ break
371
+ case"table:table-row":if(!i||!a)break
372
+ if(i.cells.some((e=>void 0!==e))){for(let e=0;e<Math.min(i.repeat,D);e++){if(a.rows.length>=C){n=!0
373
+ break}a.rows.push({n:a.rowIndex+e+1,cells:i.cells})}a.width=Math.max(a.width,i.cells.length)}a.rowIndex+=i.repeat,i=null
374
+ break
375
+ case"table:table":if(!a)break
376
+ 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})
377
+ break
378
+ case"table:table-row":{const e=Math.max(1,Number(s(h,"table:number-rows-repeated")??1)||1)
379
+ b?a&&(a.rowIndex+=e):i={cells:[],col:0,repeat:e}
380
+ break}case"table:table-cell":case"table:covered-table-cell":if(!i)break
381
+ 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()
382
+ break
383
+ case"text:p":c&&!b&&(c.parts.length&&c.parts.push(" "),p=!0)
384
+ break
385
+ case"text:s":case"text:tab":case"text:line-break":c&&p&&c.parts.push(" ")
386
+ break
387
+ case"draw:frame":b||(l={name:s(h,"draw:name")})
388
+ break
389
+ case"draw:image":l&&(l.image=!0)
390
+ break
391
+ case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(h,"xlink:href"))
392
+ break
393
+ case"svg:title":case"svg:desc":!b&&l&&(u="svg:title"===m?"title":"desc")}}return{sheets:r,truncated:n}}function T(e,t=new Map){const r=[]
394
+ let n=null
395
+ const a=new L
396
+ let i=0,c=0,l=null,u=null
397
+ for(const d of e.matchAll(A)){const[,e,p,f,m,h]=d
398
+ if(void 0===h){if(F.has(p))m||(c+=e?-1:1)
399
+ else if(!c)if(e)switch(p){case"svg:title":case"svg:desc":u=null
400
+ break
401
+ case"text:p":case"text:h":{const e=a.close()
402
+ !e?.plain||!n||i&&/^<number>$/.test(e.plain)||(i?n.notes:n.lines).push(e.plain)
403
+ break}case"draw:frame":{const e=l?O(l,t):null
404
+ l=null,e&&n&&n.lines.push(e)
405
+ break}case"presentation:notes":i=Math.max(0,i-1)
406
+ break
407
+ case"draw:page":{if(!n)break
408
+ let e=`## Slide ${r.length+1}\n${n.lines.join("\n")||"(no text)"}`
409
+ n.notes.length&&(e+=`\n\nNotes:\n${n.notes.join("\n")}`),r.push(e),n=null
410
+ break}}else{if(y(p,f,a))continue
411
+ switch(p){case"draw:page":m||(n={lines:[],notes:[]})
412
+ break
413
+ case"presentation:notes":m||i++
414
+ break
415
+ case"text:p":case"text:h":m||a.open(0,!1)
416
+ break
417
+ case"draw:frame":m||i||(l={name:s(f,"draw:name")})
418
+ break
419
+ case"draw:image":l&&(l.image=!0)
420
+ break
421
+ case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
422
+ break
423
+ case"svg:title":case"svg:desc":!m&&l&&(u="svg:title"===p?"title":"desc")}}}else{if(c)continue
424
+ u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))}}return r}Object.defineProperty(exports,"__esModule",{value:!0}),exports.MAX_DOCUMENT_BYTES=void 0,exports.documentKindFor=function(e){const t=(0,I.formatFor)(e)
425
+ return t?.text?t.kind:void 0},exports.extractDocumentText=async function e(o,i,c={}){if(o.byteLength>exports.MAX_DOCUMENT_BYTES)throw new Error(`file is ${(o.byteLength/1048576).toFixed(1)} MB; text extraction stops at ${exports.MAX_DOCUMENT_BYTES/1048576} MB`)
426
+ const l=(0,I.formatOfKind)(i).textVia
427
+ if(l){if(!c.convert)throw new Error(`.${i} files are read by converting them in the office box, which is not reachable from here`)
428
+ const t=await e(await c.convert(o,i,l),l)
429
+ 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})
430
+ 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()))
431
+ 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)
432
+ case"docx":return async function(e){const t=await r(e),o=await n(t,"word/document.xml")
433
+ if(!o)throw new Error("not a Word document (word/document.xml is missing)")
434
+ 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)
435
+ case"xlsx":return async function(e){const t=await r(e),o=await n(t,"xl/workbook.xml")
436
+ if(!o)throw new Error("not an Excel workbook (xl/workbook.xml is missing)")
437
+ const i=a(await n(t,"xl/_rels/workbook.xml.rels"),"xl"),c=h(await n(t,"xl/sharedStrings.xml")),l=[]
438
+ let u=!1,d=0
439
+ 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
440
+ if(d++,!p){l.push(`## Sheet: ${r}\n(empty)`)
441
+ continue}const{text:f,truncated:h}=g(p,c)
442
+ u=u||h
443
+ const b=await m(t,a)
444
+ l.push(`## Sheet: ${r}\n${f||"(empty)"}${b.length?`\n\n${b.join("\n")}`:""}`)}return{kind:"xlsx",text:l.join("\n\n"),units:d,note:"Cell values as tab-separated rows (column letters in the header); a formula shows as its last computed value followed by (=formula). Charts and pictures are listed under their sheet. Dates show as numbers."+(u?` Sheets over ${C} rows are cut off.`:"")}}(o)
445
+ case"pptx":return async function(e){const t=await r(e),o=await n(t,"ppt/presentation.xml")
446
+ if(!o)throw new Error("not a PowerPoint deck (ppt/presentation.xml is missing)")
447
+ const i=a(await n(t,"ppt/_rels/presentation.xml.rels"),"ppt")
448
+ let c=[...o.matchAll(/<p:sldId\b([^>]*)\/?>/g)].map((e=>{const t=s(e[1],"r:id")
449
+ return t?i.get(t):void 0})).filter((e=>!!e))
450
+ c.length||(c=Object.keys(t.files).filter((e=>/^ppt\/slides\/slide\d+\.xml$/.test(e))).sort(((e,t)=>Number(/(\d+)\.xml$/.exec(e)[1])-Number(/(\d+)\.xml$/.exec(t)[1]))))
451
+ const l=[]
452
+ for(let e=0;e<c.length;e++){const r=c[e],o=await n(t,r),s=o?k(o):[],i=r.slice(0,r.lastIndexOf("/")),d=r.slice(r.lastIndexOf("/")+1),p=a(await n(t,`${i}/_rels/${d}.rels`),i)
453
+ o&&s.push(..._(o,await u(t,p)))
454
+ const f=[...p.values()].find((e=>/notesSlide\d*\.xml$/.test(e))),m=f?await n(t,f):void 0,h=m?k(m).filter((e=>!/^(\d+|<number>)$/.test(e))):[]
455
+ let b=`## Slide ${e+1}\n${s.join("\n")||"(no text)"}`
456
+ h.length&&(b+=`\n\nNotes:\n${h.join("\n")}`),l.push(b)}return{kind:"pptx",text:l.join("\n\n"),units:c.length,note:"Slide text and speaker notes; pictures show as [image: alt text] and charts as a one-line summary; layout is dropped. To see a slide, view_asset this path."}}(o)
457
+ case"odt":return async function(e){const{xml:t,objects:r}=await v(e,"application/vnd.oasis.opendocument.text","text document")
458
+ return{kind:"odt",text:M(t,r),note:"Text, headings, lists and tables; pictures show as [image: alt text] and charts as a one-line summary; notes, comments and formatting are dropped. To see the pages, view_asset this path."}}(o)
459
+ case"ods":return async function(e){const{xml:t,objects:r}=await v(e,"application/vnd.oasis.opendocument.spreadsheet","spreadsheet"),{sheets:n,truncated:o}=S(t,r)
460
+ return{kind:"ods",text:n.map((e=>`## Sheet: ${e.name}\n${e.text||"(empty)"}${e.figures.length?`\n\n${e.figures.join("\n")}`:""}`)).join("\n\n"),units:n.length,note:"Cell values as tab-separated rows (column letters in the header); a formula shows as its value followed by (=formula). Charts and pictures are listed under their sheet."+(o?` Sheets over ${C} rows are cut off.`:"")}}(o)
461
+ case"odp":return async function(e){const{xml:t,objects:r}=await v(e,"application/vnd.oasis.opendocument.presentation","presentation"),n=T(t,r)
462
+ return{kind:"odp",text:n.join("\n\n"),units:n.length,note:"Slide text and speaker notes; pictures show as [image: alt text] and charts as a one-line summary; layout is dropped. To see a slide, view_asset this path."}}(o)
463
+ case"rtf":return{kind:"rtf",text:(0,j.rtfToText)(o),note:"Text, paragraphs and table rows; styling, pictures and layout are dropped. To see the pages, view_asset this path."}
464
+ default:throw new Error(`no text form for .${i}`)}},exports.decodeXml=o,exports.figureMarker=l,exports.chartXmlSummary=d,exports.stripElementPrefixes=p,exports.docxXmlToText=f,exports.parseSharedStrings=h,exports.sheetXmlToText=g,exports.slideFigures=_,exports.drawingMlParagraphs=k,exports.odfChartSummary=E,exports.odfFormula=$,exports.odtXmlToText=M,exports.odsXmlToText=S,exports.odpXmlToText=T
465
+ const I=t(70610),j=t(50478)
466
+ exports.MAX_DOCUMENT_BYTES=52428800
467
+ const C=5e3,P={barChart:"bar",bar3DChart:"bar",lineChart:"line",line3DChart:"line",pieChart:"pie",pie3DChart:"pie",ofPieChart:"pie",doughnutChart:"doughnut",areaChart:"area",area3DChart:"area",scatterChart:"scatter",radarChart:"radar",bubbleChart:"bubble",stockChart:"stock",surfaceChart:"surface",surface3DChart:"surface"},A=/<(\/?)([A-Za-z][\w.-]*:[\w.-]+)\b([^>]*?)(\/?)>|([^<]+)/g,F=new Set(["text:note","office:annotation","text:tracked-changes","office:forms","text:sequence-decls"]),R=256,D=50,N={circle:"pie",ring:"doughnut"}
468
+ class L{constructor(){this.stack=[]}open(e,t){this.stack.push({parts:[],heading:e,listed:t})}get current(){return this.stack[this.stack.length-1]}push(e){this.current?.parts.push(e)}pushSpaced(e){const t=this.current?.parts
469
+ if(!t)return
470
+ const r=t[t.length-1]??""
471
+ t.push(`${!r||/\s$/.test(r)?"":" "}${e} `)}close(){const e=this.stack.pop()
472
+ if(!e)return null
473
+ const t=e.parts.join("").replace(/[ \t]+\n/g,"\n").trim()
474
+ return this.current?(t&&this.pushSpaced(t),null):{plain:t,line:t?e.heading?`${"#".repeat(Math.min(6,e.heading))} ${t}`:e.listed?`- ${t}`:t:""}}}}},o={}
475
+ e.c=o,r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,e.t=function(n,o){if(1&o&&(n=this(n)),8&o)return n
476
+ if("object"==typeof n&&n){if(4&o&&n.__esModule)return n
477
+ if(16&o&&"function"==typeof n.then)return n}var s=Object.create(null)
478
+ e.r(s)
479
+ var a={}
480
+ t=t||[null,r({}),r([]),r(r)]
481
+ for(var i=2&o&&n;"object"==typeof i&&!~t.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach((e=>a[e]=()=>n[e]))
482
+ return a.default=()=>n,e.d(s,a),s},e.d=(exports,t)=>{for(var r in t)e.o(t,r)&&!e.o(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:t[r]})},e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=exports=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},e.nmd=module=>(module.paths=[],module.children||(module.children=[]),module)
483
+ var s=e(e.s=15845)
484
+ module.exports=s})()