alchemylab 2.1.0 → 2.1.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.
- package/dist/111.js +11 -12
- package/dist/24.js +34 -232
- package/dist/293.js +52 -50
- package/dist/356.js +11 -11
- package/dist/414.js +16 -16
- package/dist/478.js +33 -33
- package/dist/579.js +7 -7
- package/dist/60.js +8 -8
- package/dist/729.js +17 -17
- package/dist/776.js +1 -1
- package/dist/800.js +2 -2
- package/dist/816.js +2 -3
- package/dist/939.js +15 -15
- package/dist/991.js +12 -12
- package/dist/994.js +22 -22
- package/dist/cli.js +7309 -7656
- package/dist/document-textconv.js +372 -413
- package/dist/http-server.js +7618 -7708
- package/dist/index.js +7664 -7754
- package/dist/mcp-direct.js +7462 -7552
- package/dist/plugins/hooks/plugin.js +1 -1
- package/dist/plugins/system-logger.js +1 -1
- package/package.json +2 -2
|
@@ -1,161 +1,236 @@
|
|
|
1
1
|
(()=>{"use strict"
|
|
2
|
-
function e(
|
|
3
|
-
if(void 0!==
|
|
4
|
-
|
|
5
|
-
return
|
|
6
|
-
|
|
2
|
+
function e(n){const o=r[n]
|
|
3
|
+
if(void 0!==o)return o.exports
|
|
4
|
+
const module=r[n]={id:n,loaded:!1,exports:{}}
|
|
5
|
+
return t[n].call(module.exports,module,module.exports,e),module.loaded=!0,module.exports}var t={22604(e,exports,t){function r(e){if("number"==typeof e)return e
|
|
6
|
+
const t=String(e??"").trim().toLowerCase().match(/^(\d+(?:\.\d+)?)\s*([bkmg]?)b?$/)
|
|
7
|
+
if(!t)return NaN
|
|
8
|
+
const r={"":1,b:1,k:1024,m:1048576,g:1024**3}[t[2]]
|
|
9
|
+
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 ${u(r)} of memory, and the boxes already running on this machine have ${u(t)} of the ${u(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
|
|
10
|
+
try{return process.kill(e,0),!0}catch(e){return"EPERM"===e?.code}}function s(e,t,r=o){return!(!e||!d.has(t)||r(Number(e)))}async function a(){const e=await(0,l.docker)(["ps","-a","--filter","label=alchemy.project","--filter","status=running","--filter","status=created","--format",'{{.ID}}\t{{.Label "alchemy.owner"}}\t{{.Label "alchemy.sandbox"}}'],l.DOCKER_OP_TIMEOUT_MS)
|
|
11
|
+
if(0!==e.exit)return 0
|
|
12
|
+
const t=[]
|
|
13
|
+
for(const r of e.stdout.split("\n").map(e=>e.trim()).filter(Boolean)){const[e,n="",o=""]=r.split("\t")
|
|
14
|
+
s(n,o)?await(0,l.docker)(["rm","-f","-v",e],l.DOCKER_OP_TIMEOUT_MS):t.push(e)}if(!t.length)return 0
|
|
15
|
+
const r=await(0,l.docker)(["inspect","--format","{{.HostConfig.Memory}}",...t],l.DOCKER_OP_TIMEOUT_MS)
|
|
16
|
+
return 0!==r.exit?0:r.stdout.split("\n").map(e=>Number(e.trim())||0).reduce((e,t)=>e+t,0)}function i(e){const t=[]
|
|
17
|
+
for(const r of String(e||"").split(",").map(e=>e.trim()).filter(Boolean)){const e=r.match(/^(\d+)(?:-(\d+))?$/)
|
|
18
|
+
if(!e)continue
|
|
19
|
+
const n=Number(e[1]),o=void 0!==e[2]?Number(e[2]):n
|
|
20
|
+
for(let e=n;e<=o&&e-n<1024;e++)t.push(e)}return t}function c(e,t,r){const n=new Array(e).fill(0)
|
|
21
|
+
for(const t of r)for(const r of i(t))r<e&&n[r]++
|
|
22
|
+
return[...n.keys()].sort((e,t)=>n[e]-n[t]||e-t).slice(0,t).sort((e,t)=>e-t)}exports.TS=void 0,exports.withAdmission=function(e,t,o){const s=p.then(async()=>{const s=await async function(e,t,o=12e4,s=5e3){try{const i=r(e),c=await async function(){const e=r(process.env.ALCHEMY_BOX_MEMORY_BUDGET)
|
|
23
|
+
if(e>0)return e
|
|
24
|
+
const t=await(0,l.docker)(["info","--format","{{.MemTotal}}"],l.DOCKER_OP_TIMEOUT_MS)
|
|
25
|
+
return 0===t.exit?Number(t.stdout.trim()):NaN}(),u=Date.now()+o
|
|
26
|
+
for(;;){const e=n(c,await a(),i,t)
|
|
27
|
+
if(!e||Date.now()>=u)return e
|
|
28
|
+
await new Promise(e=>setTimeout(e,s))}}catch{return null}}(e,t)
|
|
29
|
+
return s?{refused:s}:{value:await o()}})
|
|
30
|
+
return p=s.catch(()=>{}),s},exports.pickCores=async function(e,t,r="standard"){try{const n=await(0,l.docker)(["info","--format","{{.NCPU}}"],l.DOCKER_OP_TIMEOUT_MS),o=Number(n.stdout.trim())
|
|
31
|
+
if(!(o>0))return{cpus:e??t}
|
|
32
|
+
const s=await(0,l.docker)(["ps","-a","-q","--filter","label=alchemy.project","--filter","status=running","--filter","status=created"],l.DOCKER_OP_TIMEOUT_MS),a=0===s.exit?s.stdout.split("\n").map(e=>e.trim()).filter(Boolean):[],u=a.length?(await(0,l.docker)(["inspect","--format","{{.HostConfig.CpusetCpus}}",...a],l.DOCKER_OP_TIMEOUT_MS)).stdout.split("\n").map(e=>e.trim()).filter(Boolean):[],d=new Set(u.flatMap(i).filter(e=>e<o)),p=e??function(e,t,r){return"light"===e?2:"heavy"===e?Math.max(2,Math.min(t-2,r-2)):function(e,t){const r=Math.max(2,Math.floor(e/2))
|
|
33
|
+
return Math.min(r,Math.max(2,Math.ceil(t/2)))}(t,r)}(r,o,o-d.size),f=Math.max(1,Math.ceil(p))
|
|
34
|
+
return f>=o?{cpus:p}:{cpus:p,cpuset:c(o,f,u).join(",")}}catch{return{cpus:e??t}}}
|
|
35
|
+
const l=t(81618),u=e=>`${(e/1024**3).toFixed(1)} GB`,d=new Set(["experiment","rung1","deps","egress-proxy","service"])
|
|
36
|
+
let p=Promise.resolve()
|
|
37
|
+
exports.TS=["light","standard","heavy"]},52429(e,exports,t){exports.ContainerRunner=void 0
|
|
38
|
+
const r=t(81618),n=t(22604),o=t(11895),s=t(26166),a=t(2566),i=t(90695),c=t(61260)
|
|
39
|
+
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"}
|
|
40
|
+
const t=e.image??this.image,s={}
|
|
41
|
+
let l=Date.now()
|
|
42
|
+
const u=e=>{const t=Date.now()
|
|
43
|
+
s[e]=(s[e]??0)+(t-l),l=t},d=await(0,r.ensureImage)(t)
|
|
44
|
+
if(u("image"),d)return{steps:[],ok:!1,error:d}
|
|
45
|
+
const p=await(0,n.withAdmission)(this.resources.memory??"1g","check",async()=>{const{cpus:s,cpuset:a}=await(0,n.pickCores)(this.resources.cpus,o.DEFAULT_CPUS,this.resources.size)
|
|
46
|
+
let c=await(0,r.docker)(this.createArgs(e,t,!0,a,s),r.DOCKER_OP_TIMEOUT_MS)
|
|
47
|
+
if(0!==c.exit)return{error:c.spawnError??`docker create failed: ${(c.stderr||String(c.exit)).trim()}`}
|
|
48
|
+
let l=c.stdout.trim()
|
|
49
|
+
if(u("create"),await(0,i.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,a,s),r.DOCKER_OP_TIMEOUT_MS),0!==c.exit)return{error:c.spawnError??`docker create failed: ${(c.stderr||String(c.exit)).trim()}`}
|
|
50
|
+
l=c.stdout.trim()}return u("scratch"),{id:l}})
|
|
51
|
+
if("refused"in p)return{steps:[],ok:!1,error:p.refused}
|
|
52
|
+
if("error"in p.value)return{steps:[],ok:!1,error:p.value.error}
|
|
53
|
+
const f=p.value.id
|
|
54
|
+
try{const t=await(0,r.docker)(["start",f],r.DOCKER_OP_TIMEOUT_MS)
|
|
55
|
+
if(u("start"),0!==t.exit)return{steps:[],ok:!1,error:`docker start failed: ${(t.stderr||String(t.exit)).trim()}`}
|
|
56
|
+
const n=[]
|
|
57
|
+
let o=await(0,c.readOomKills)(f)??0
|
|
58
|
+
for(const t of e.steps){const s=Date.now(),i=await(0,r.dockerKeepingEnds)(["exec","-e",`${a.RUN_ENV_VAR}=${(0,a.withShellInit)(e.shellInit,t.run)}`,f,"/bin/sh","-c",a.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
|
|
59
|
+
null!=u&&(o=u)
|
|
60
|
+
const p=d>0?`${i.stderr}${i.stderr&&!i.stderr.endsWith("\n")?"\n":""}${(0,c.oomNote)(d,this.resources.memory??"1g")}\n`:i.stderr
|
|
61
|
+
n.push({run:t.run,exit:i.exit,stdout:i.stdout,stderr:p,ms:l,timedOut:i.timedOut})}return u("commands"),{steps:n,ok:n.every(e=>0===e.exit),phaseMs:s}}finally{const e=Date.now()
|
|
62
|
+
await(0,r.docker)(["rm","-f","-v",f],r.DOCKER_OP_TIMEOUT_MS),s.remove=Date.now()-e}}createArgs(e,t,r,n,a){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`])
|
|
63
|
+
return["create","--label","alchemy.sandbox=rung1",...(0,s.hardenedCreateArgs)({network:this.network,user:"1000:1000",...r?{}:{extraTmpfs:[(0,i.scratchTmpfsArg)(512)]},shmSizeMb:this.resources.shmSizeMb,memory:this.resources.memory??"1g",cpus:a??this.resources.cpus??o.DEFAULT_CPUS,cpuset:n,pidsLimit:this.resources.pidsLimit??512}),...r?i.SCRATCH_VOLUME_ARGS:[],...c,"-v",`${e.worktreePath}:/work:rw`,...l,...u,...d,"-w","/work",t,"tail","-f","/dev/null"]}}},81618(e,exports,t){function r(e){if("create"!==e[0]&&"run"!==e[0])return e
|
|
64
|
+
const t=new Set
|
|
65
|
+
e.forEach((r,n)=>{"--label"===e[n-1]&&t.add(r.split("=")[0])})
|
|
66
|
+
const r=Object.entries({"alchemy.owner":String(process.pid),...c.getStore()??{}}).filter(([e])=>!t.has(e)).flatMap(([e,t])=>["--label",`${e}=${t.replace(/[\r\n]/g," ").slice(0,200)}`])
|
|
67
|
+
return r.length?[e[0],...r,...e.slice(1)]:e}function n(e,t){return new Promise(n=>{(0,o.execFile)("docker",r(e),{timeout:t,killSignal:"SIGKILL",maxBuffer:33554432,windowsHide:!0},(e,t,r)=>{if(!e)return void n({exit:0,stdout:t,stderr:r,timedOut:!1})
|
|
68
|
+
const o=e
|
|
69
|
+
if("ENOENT"===o.code)return void n({exit:-1,stdout:t??"",stderr:r??"",timedOut:!1,spawnError:"docker CLI not found on PATH"})
|
|
70
|
+
const s=!0===o.killed||"SIGKILL"===o.signal,a="number"==typeof o.code?o.code:-1
|
|
71
|
+
n({exit:a,stdout:t??"",stderr:r??"",timedOut:s})})})}exports.P=exports.DOCKER_OP_TIMEOUT_MS=void 0,exports.dockerKeepingEnds=function(e,t,n=524288){return new Promise(s=>{const a=new i.EndsKeeper(n),c=new i.EndsKeeper(n)
|
|
72
|
+
let l=!1,u=!1
|
|
73
|
+
const d=(0,o.spawn)("docker",r(e),{windowsHide:!0}),p=setTimeout(()=>{l=!0,d.kill("SIGKILL")},t)
|
|
74
|
+
d.stdout.setEncoding("utf8").on("data",e=>a.push(e)),d.stderr.setEncoding("utf8").on("data",e=>c.push(e))
|
|
75
|
+
const f=e=>{u||(u=!0,clearTimeout(p),s(e))}
|
|
76
|
+
d.on("error",e=>f({exit:-1,stdout:a.text(),stderr:c.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:a.text(),stderr:c.text(),timedOut:l}))})},exports.docker=n,exports.ensureImage=async function(e){const t=(0,a.localRecipeFor)(e)
|
|
77
|
+
if(t)return(0,a.ensureLocalImage)(t)
|
|
78
|
+
const r=await n(["image","inspect",e],exports.DOCKER_OP_TIMEOUT_MS)
|
|
79
|
+
if(r.spawnError)return r.spawnError
|
|
80
|
+
if(0===r.exit)return
|
|
81
|
+
const o=await n(["pull",e],exports.P)
|
|
82
|
+
return 0!==o.exit?`docker pull ${e} failed: ${(o.stderr||String(o.exit)).trim()}`:void 0}
|
|
83
|
+
const o=t(31421),s=t(16698),a=t(83129),i=t(88196),c=new s.AsyncLocalStorage
|
|
84
|
+
exports.DOCKER_OP_TIMEOUT_MS=6e4,exports.P=3e5},26166(e,exports){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"]:[]]}},83129(e,exports,t){function r(e){const t=m.get(e.image)
|
|
85
|
+
if(t)return t.work
|
|
86
|
+
const r=(async()=>{const t=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
|
|
87
|
+
if(t.spawnError)return t.spawnError
|
|
88
|
+
if(0===t.exit&&t.stdout.trim()===e.recipeHash)return
|
|
89
|
+
const r=i.mkdtempSync(l.join(c.tmpdir(),"alchemylab-image-"))
|
|
90
|
+
try{i.writeFileSync(l.join(r,"Dockerfile"),e.dockerfile)
|
|
91
|
+
const t=await(0,u.docker)(["build","--label",`${p}=${e.recipeHash}`,"-t",e.image,r],exports.BUILD_TIMEOUT_MS)
|
|
92
|
+
if(0!==t.exit){const r=(t.stderr||t.stdout||"").trim().split("\n").slice(-12).join("\n")
|
|
93
|
+
return`building ${e.image} failed${t.timedOut?" (timed out)":""}: ${r}`}return}finally{i.rmSync(r,{recursive:!0,force:!0})}})()
|
|
94
|
+
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)
|
|
95
|
+
var o=Object.getOwnPropertyDescriptor(t,r)
|
|
96
|
+
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=[]
|
|
97
|
+
for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
|
|
98
|
+
return t},n(e)},function(e){if(e&&e.__esModule)return e
|
|
99
|
+
var t={}
|
|
100
|
+
if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
|
|
101
|
+
return s(t,e),t})
|
|
102
|
+
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)
|
|
103
|
+
if(t)return{state:"building",since:t.since}
|
|
104
|
+
const r=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
|
|
105
|
+
if(r.spawnError)return{state:"no-docker",error:"Docker is not installed on this machine (no docker command)"}
|
|
106
|
+
if(0===r.exit&&r.stdout.trim()===e.recipeHash)return{state:"ready"}
|
|
107
|
+
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"}
|
|
108
|
+
const n=h.get(e.image)
|
|
109
|
+
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()}}
|
|
110
|
+
const i=a(t(73024)),c=a(t(48161)),l=a(t(76760)),u=t(81618),d=t(44853),p="dev.alchemylab.recipe"
|
|
111
|
+
exports.BUILD_TIMEOUT_MS=15e5
|
|
112
|
+
const f=[{image:d.OFFICE_BOX_IMAGE,dockerfile:d.OFFICE_BOX_DOCKERFILE,recipeHash:d.OFFICE_BOX_RECIPE_HASH}],m=new Map,h=new Map},61260(e,exports,t){exports.H=void 0,exports.readOomKills=async function(e){const t=await(0,r.docker)(["exec",e,"cat","/sys/fs/cgroup/memory.events"],n)
|
|
113
|
+
if(0===t.exit){const e=/^oom_kill (\d+)/m.exec(t.stdout)
|
|
114
|
+
if(e)return Number(e[1])}const o=await(0,r.docker)(["exec",e,"cat","/sys/fs/cgroup/memory/memory.oom_control"],n)
|
|
115
|
+
if(0===o.exit){const e=/^oom_kill (\d+)/m.exec(o.stdout)
|
|
116
|
+
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.H} ]; 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)
|
|
117
|
+
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).`}
|
|
118
|
+
const r=t(81618),n=5e3
|
|
119
|
+
exports.H="/tmp/.alchemy_live.png"},11895(e,exports,t){exports.DEFAULT_CPUS=void 0,t(81618),t(22604),t(26166),t(2566),t(90695),t(61260),exports.DEFAULT_CPUS=4},90695(e,exports,t){exports.SCRATCH_VOLUME_ARGS=void 0,exports.scratchTmpfsArg=function(e){return`/scratch:rw,nosuid,nodev,exec,size=${e}m`},exports.claimScratch=async function(e,t,n){const o=await(0,r.docker)(["run","--rm","--network","none","--user","0:0","--volumes-from",e,"--entrypoint","chown",t,n,"/scratch"],r.DOCKER_OP_TIMEOUT_MS)
|
|
120
|
+
return 0===o.exit?null:o.spawnError??((o.stderr||"").trim()||`chown exited ${o.exit}`)}
|
|
121
|
+
const r=t(81618)
|
|
122
|
+
exports.SCRATCH_VOLUME_ARGS=["--mount","type=volume,dst=/scratch"]},2566(e,exports,t){exports.RUN_ENV_VAR=exports.RUN_FROM_ENV=void 0,exports.withShellInit=function(e,t){const r=(e??"").trim()
|
|
123
|
+
return r?`${r} && ${t}`:t}
|
|
7
124
|
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}})},
|
|
9
|
-
return
|
|
125
|
+
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}})},12661(e,exports){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)
|
|
126
|
+
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"}]
|
|
127
|
+
const t=new Map(exports.DOCUMENT_FORMATS.flatMap(e=>e.extensions.map(t=>[t,e])))},44853(e,exports,t){exports.ENVIRONMENT_PRESETS=exports.VP=exports.OFFICE_BOX_RECIPE_HASH=exports.OFFICE_BOX_DOCKERFILE=exports.dw=exports.OT=exports.OFFICE_BOX_IMAGE=exports.m4=void 0
|
|
128
|
+
const r=t(76982)
|
|
129
|
+
exports.m4=1,exports.OFFICE_BOX_IMAGE=`alchemylab-local/office-box:v${exports.m4}`,exports.OT="/scratch/render",exports.dw="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"
|
|
130
|
+
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.OT}} and prints its path, one per line.\nset -e\nout="\${RENDER_OUT:-${exports.OT}}"\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`
|
|
131
|
+
exports.OFFICE_BOX_DOCKERFILE=function(){const e=Buffer.from(o).toString("base64"),t=Buffer.from(exports.dw).toString("base64")
|
|
132
|
+
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.VP={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.VP}},3517(e,exports,t){function r(e,t){const r=d.extname(e).slice(1).toLowerCase()
|
|
133
|
+
return h[t].includes(r)}function n(e,t){const r=e=>`'${e.replace(/'/g,"'\\''")}'`,n=`/work/in/${e}`,o=e.replace(/\.[^.]+$/,"")
|
|
10
134
|
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)
|
|
11
135
|
var o=Object.getOwnPropertyDescriptor(t,r)
|
|
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]}),
|
|
136
|
+
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=[]
|
|
13
137
|
for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
|
|
14
138
|
return t},o(e)},function(e){if(e&&e.__esModule)return e
|
|
15
139
|
var t={}
|
|
16
140
|
if(null!=e)for(var r=o(e),n=0;n<r.length;n++)"default"!==r[n]&&s(t,e,r[n])
|
|
17
|
-
return
|
|
141
|
+
return a(t,e),t})
|
|
18
142
|
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")
|
|
19
143
|
var s
|
|
20
144
|
if(!r(o,e.to))return{ok:!1,error:`${d.extname(o)||"this file"} cannot be turned into ${e.to.toUpperCase()}`}
|
|
21
145
|
if(e.bytes.length>exports.MAX_RENDER_INPUT_BYTES)return{ok:!1,error:`file is over ${exports.MAX_RENDER_INPUT_BYTES/1048576} MB`}
|
|
22
|
-
const
|
|
23
|
-
try{return{ok:!0,bytes:await l.promises.readFile(
|
|
24
|
-
if("wait"!==
|
|
146
|
+
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}`)
|
|
147
|
+
try{return{ok:!0,bytes:await l.promises.readFile(i),cached:!0}}catch{}const h=t.image??"wait"
|
|
148
|
+
if("wait"!==h){const e=(0,f.localRecipeFor)(m.OFFICE_BOX_IMAGE),t=await(0,f.localImageState)(e)
|
|
25
149
|
if("no-docker"===t.state)return{ok:!1,error:t.error,unavailable:!0}
|
|
26
|
-
if("building"===t.state)return{ok:!1,error:
|
|
27
|
-
if("failed"===t.state&&Date.now()-t.at<
|
|
28
|
-
if("ready"!==t.state){if("present-only"===
|
|
150
|
+
if("building"===t.state)return{ok:!1,error:w,preparing:!0,since:t.since}
|
|
151
|
+
if("failed"===t.state&&Date.now()-t.at<12e4)return{ok:!1,error:`building the office renderer failed: ${t.error.split("\n").slice(-3).join(" ")}`}
|
|
152
|
+
if("ready"!==t.state){if("present-only"===h)return{ok:!1,error:"the office renderer is not built on this machine yet",unavailable:!0}
|
|
29
153
|
const{since:t}=(0,f.startLocalImageBuild)(e)
|
|
30
|
-
return{ok:!1,error:
|
|
31
|
-
try{await l.promises.mkdir(d.join(
|
|
32
|
-
const r=new p.ContainerRunner({image:m.OFFICE_BOX_IMAGE,stepTimeoutMs:
|
|
154
|
+
return{ok:!1,error:w,preparing:!0,since:t}}}const b=await l.promises.mkdtemp(d.join(u.tmpdir(),"alchemylab-render-"))
|
|
155
|
+
try{await l.promises.mkdir(d.join(b,"in")),await l.promises.mkdir(d.join(b,"out")),await l.promises.chmod(b,493),await l.promises.chmod(d.join(b,"in"),493),await l.promises.chmod(d.join(b,"out"),511),await l.promises.writeFile(d.join(b,"in",o),e.bytes,{mode:420})
|
|
156
|
+
const r=new p.ContainerRunner({image:m.OFFICE_BOX_IMAGE,stepTimeoutMs:18e4,resources:{memory:"3g",shmSizeMb:256}}),s=await r.run({worktreePath:b,image:m.OFFICE_BOX_IMAGE,env:{HOME:"/scratch"},steps:[{run:n(o,e.to)}]})
|
|
33
157
|
if(!s.ok){const e=s.steps[0]
|
|
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
|
|
35
|
-
if(!
|
|
36
|
-
const c=await l.promises.readFile(d.join(
|
|
37
|
-
return await l.promises.mkdir(t.cacheDir,{recursive:!0}),await l.promises.writeFile(
|
|
38
|
-
const c=t(76982),l=t(79896),u=
|
|
158
|
+
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(b,"out"))).find(t=>t.toLowerCase().endsWith(`.${e.to}`))
|
|
159
|
+
if(!a)return{ok:!1,error:`no ${e.to.toUpperCase()} was produced`}
|
|
160
|
+
const c=await l.promises.readFile(d.join(b,"out",a))
|
|
161
|
+
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(b,{recursive:!0,force:!0})}}
|
|
162
|
+
const c=t(76982),l=t(79896),u=i(t(70857)),d=i(t(16928)),p=t(52429),f=t(83129),m=t(44853)
|
|
39
163
|
exports.MAX_RENDER_INPUT_BYTES=52428800
|
|
40
|
-
const h=
|
|
164
|
+
const h={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"]}
|
|
41
165
|
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"}
|
|
42
|
-
const w=
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
if(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
s
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
return
|
|
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)
|
|
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"}]
|
|
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)
|
|
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()
|
|
166
|
+
const w="the office renderer is being built on this machine (first use only, usually a few minutes)"},43701(e,exports){function t(e){return e<128?String.fromCharCode(e):"\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"[e-128]??""}exports.rtfToText=function(e){const o="string"==typeof e?e:Buffer.from(e).toString("latin1")
|
|
167
|
+
if(!/^\s*\{\s*\\rtf/i.test(o))throw new Error("not an RTF file (it does not start with {\\rtf)")
|
|
168
|
+
const s=[],a=[{skip:!1,skipChars:0}],i=()=>a[a.length-1],c=e=>{i().skip||s.push(e)}
|
|
169
|
+
for(let e=0;e<o.length;e++){const s=o[e]
|
|
170
|
+
if("{"===s){a.push({...i()})
|
|
171
|
+
continue}if("}"===s){a.length>1&&a.pop()
|
|
172
|
+
continue}if("\r"===s||"\n"===s)continue
|
|
173
|
+
if("\\"!==s){if(i().skipChars>0){i().skipChars--
|
|
174
|
+
continue}c(s)
|
|
175
|
+
continue}const l=/^\\([a-zA-Z]+)(-?\d+)? ?/.exec(o.slice(e))
|
|
176
|
+
if(!l){const s=o[e+1]
|
|
177
|
+
if("*"===s){const t=/^\\\*\\([a-zA-Z]+)/.exec(o.slice(e))
|
|
178
|
+
t&&!r.has(t[1])||(i().skip=!0),e+=1
|
|
179
|
+
continue}if("'"===s){const r=o.slice(e+2,e+4)
|
|
180
|
+
if(e+=3,i().skipChars>0){i().skipChars--
|
|
181
|
+
continue}c(t(parseInt(r,16)||0))
|
|
182
|
+
continue}if(void 0!==s&&void 0!==n[s]){c(n[s]),e+=1
|
|
183
|
+
continue}e+=1
|
|
184
|
+
continue}const[u,d,p]=l
|
|
185
|
+
e+=u.length-1
|
|
186
|
+
const f=void 0===p?void 0:Number(p)
|
|
187
|
+
if(r.has(d))i().skip=!0
|
|
188
|
+
else{if("u"===d){const e=i().skipChars>0
|
|
189
|
+
i().skipChars=Math.max(0,a[a.length-1].ucSkip??1),e||void 0===f||c(String.fromCodePoint(f<0?f+65536:f))
|
|
190
|
+
continue}"uc"!==d?"cell"!==d&&"nestcell"!==d?"row"!==d&&"nestrow"!==d?void 0===n[d]||c(n[d]):c("\n"):c(" | "):i().ucSkip=f??1}}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*$/,"")
|
|
191
|
+
return e.includes(" | ")?`| ${t} |`:t}).join("\n").trim()}
|
|
192
|
+
const r=new Set(["fonttbl","colortbl","stylesheet","listtable","listoverridetable","revtbl","rsidtbl","generator","info","pict","object","themedata","colorschememapping","latentstyles","datastore","xmlnstbl","filetbl","upr","fldinst","nonshppict","shppict","panose"]),n={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","-":"",_:"-","{":"{","}":"}","\\":"\\"}},36018(e,exports,t){async function r(e){return(await Promise.resolve().then(()=>t.t(88194,23))).default.loadAsync(e)}async function n(e,t){const r=e.file(t)
|
|
193
|
+
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()
|
|
119
194
|
if("amp"===r)return"&"
|
|
120
195
|
if("lt"===r)return"<"
|
|
121
196
|
if("gt"===r)return">"
|
|
122
197
|
if("quot"===r)return'"'
|
|
123
198
|
if("apos"===r)return"'"
|
|
124
199
|
const n=r.startsWith("#x")?parseInt(r.slice(2),16):parseInt(r.slice(1),10)
|
|
125
|
-
return Number.isFinite(n)?String.fromCodePoint(n):e})
|
|
126
|
-
return r?o(r[1]):void 0}function
|
|
200
|
+
return Number.isFinite(n)?String.fromCodePoint(n):e})}function s(e,t){const r=new RegExp(`(?:^|\\s)${t.replace(":","\\:")}="([^"]*)"`).exec(e)
|
|
201
|
+
return r?o(r[1]):void 0}function a(e,t){const r=new Map
|
|
127
202
|
if(!e)return r
|
|
128
203
|
for(const n of e.matchAll(/<Relationship\b([^>]*)\/?>/g)){const e=s(n[1],"Id"),o=s(n[1],"Target")
|
|
129
|
-
e&&o&&r.set(e,o.startsWith("/")?o.slice(1):
|
|
204
|
+
e&&o&&r.set(e,o.startsWith("/")?o.slice(1):i(`${t}/${o}`))}return r}function i(e){const t=[]
|
|
130
205
|
for(const r of e.split("/"))r&&"."!==r&&(".."===r?t.pop():t.push(r))
|
|
131
206
|
return t.join("/")}function c(e){const t=e.slice(0,e.lastIndexOf("/"))
|
|
132
207
|
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)
|
|
133
208
|
return r?`[image: ${r}]`:"[image]"}async function u(e,t){const r=new Map
|
|
134
209
|
for(const[o,s]of t){if(!/charts\/chart[^/]*\.xml$/.test(s))continue
|
|
135
210
|
const t=await n(e,s)
|
|
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(
|
|
211
|
+
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=>C[e[1]]).filter(Boolean))]
|
|
137
212
|
"bar"===r[0]&&/<barDir val="col"/.test(t)&&(r[0]="column")
|
|
138
|
-
const n=t.split("<plotArea")[0],s=/<title>([\s\S]*?)<\/title>/.exec(n)?.[1],
|
|
139
|
-
const t=/<f>([\s\S]*?)<\/f>/.exec(e)?.[1],r=[...e.matchAll(/<v>([\s\S]*?)<\/v>/g)].map(
|
|
140
|
-
return t&&/!/.test(t)?o(t):r.length?`${r.slice(0,8).join(", ")}${r.length>8?`, ... (${r.length})`:""}`:""},
|
|
141
|
-
return`${n||"series"}${
|
|
142
|
-
return`[chart: ${r.join("/")||"chart"}${
|
|
143
|
-
let
|
|
213
|
+
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""
|
|
214
|
+
const t=/<f>([\s\S]*?)<\/f>/.exec(e)?.[1],r=[...e.matchAll(/<v>([\s\S]*?)<\/v>/g)].map(e=>o(e[1]))
|
|
215
|
+
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])
|
|
216
|
+
return`${n||"series"}${a?`: ${a}`:""}${i?` by ${i}`:""}`})
|
|
217
|
+
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=[]
|
|
218
|
+
let a=null,i="",c=!1,u=!1,d=null,p=0
|
|
144
219
|
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
|
|
145
|
-
for(const m of e.matchAll(f)){const[,e,f,h,b
|
|
146
|
-
if("mc:Fallback"===f){
|
|
220
|
+
for(const m of e.matchAll(f)){const[,e,f,h,w,b]=m
|
|
221
|
+
if("mc:Fallback"===f){w||(p+=e?-1:1)
|
|
147
222
|
continue}if(p>0)continue
|
|
148
|
-
if(void 0!==
|
|
223
|
+
if(void 0!==b){u&&a&&a.push(o(b))
|
|
149
224
|
continue}const g=n[n.length-1]
|
|
150
225
|
if(e)switch(f){case"w:drawing":{if(!d)break
|
|
151
226
|
const e=d.chart??l(d.descr,d.name)
|
|
152
|
-
d=null,
|
|
227
|
+
d=null,a?a.push(` ${e} `):r.push(e)
|
|
153
228
|
break}case"w:t":u=!1
|
|
154
229
|
break
|
|
155
|
-
case"w:p":{const e=(
|
|
156
|
-
if(
|
|
230
|
+
case"w:p":{const e=(a??[]).join("").trim()
|
|
231
|
+
if(a=null,g?.cell){e&&g.cell.push(e)
|
|
157
232
|
break}if(!e){r.length&&""!==r[r.length-1]&&r.push("")
|
|
158
|
-
break}const t=/^(?:heading|kop|\xfcberschrift|titre)\s*(\d)/i.exec(
|
|
233
|
+
break}const t=/^(?:heading|kop|\xfcberschrift|titre)\s*(\d)/i.exec(i)||(/^title$/i.test(i)?["","1"]:null)
|
|
159
234
|
r.push(t?`${"#".repeat(Math.min(6,Number(t[1])))} ${e}`:c?`- ${e}`:e)
|
|
160
235
|
break}case"w:tc":g?.cell&&g.row&&(g.row.push(g.cell.join(" ")),g.cell=null)
|
|
161
236
|
break
|
|
@@ -163,130 +238,125 @@ case"w:tr":g?.row&&(g.rows.push(g.row),g.row=null)
|
|
|
163
238
|
break
|
|
164
239
|
case"w:tbl":{const e=n.pop()
|
|
165
240
|
if(!e)break
|
|
166
|
-
const t=e.rows.map(
|
|
241
|
+
const t=e.rows.map(e=>`| ${e.map(e=>e.replace(/\|/g,"\\|")).join(" | ")} |`),o=n[n.length-1]
|
|
167
242
|
o?.cell?o.cell.push(t.join(" ")):r.push(...t,"")
|
|
168
|
-
break}}else switch(f){case"w:drawing":
|
|
243
|
+
break}}else switch(f){case"w:drawing":w||(d={})
|
|
169
244
|
break
|
|
170
245
|
case"wp:docPr":d&&(d.name=s(h,"name"),d.descr=s(h,"descr"))
|
|
171
246
|
break
|
|
172
247
|
case"c:chart":d&&(d.chart=t.get(s(h,"r:id")??"")??"[chart]")
|
|
173
248
|
break
|
|
174
249
|
case"v:imagedata":{const e=l(s(h,"o:title"),void 0)
|
|
175
|
-
|
|
176
|
-
break}case"w:p":
|
|
250
|
+
a?a.push(e):r.push(e)
|
|
251
|
+
break}case"w:p":a=[],i="",c=!1
|
|
177
252
|
break
|
|
178
|
-
case"w:pStyle":
|
|
253
|
+
case"w:pStyle":i=s(h,"w:val")??""
|
|
179
254
|
break
|
|
180
255
|
case"w:numPr":c=!0
|
|
181
256
|
break
|
|
182
|
-
case"w:t":
|
|
257
|
+
case"w:t":w||(u=!0)
|
|
183
258
|
break
|
|
184
|
-
case"w:tab":
|
|
259
|
+
case"w:tab":a?.push("\t")
|
|
185
260
|
break
|
|
186
|
-
case"w:br":case"w:cr":
|
|
261
|
+
case"w:br":case"w:cr":a?.push("\n")
|
|
187
262
|
break
|
|
188
263
|
case"w:tbl":n.push({rows:[],row:null,cell:null})
|
|
189
264
|
break
|
|
190
265
|
case"w:tr":g&&(g.row=[])
|
|
191
266
|
break
|
|
192
267
|
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)
|
|
193
|
-
for(const t of
|
|
268
|
+
for(const t of a(await n(e,o.path),o.dir).values()){if(!/drawings\/drawing[^/]*\.xml$/.test(t))continue
|
|
194
269
|
const o=await n(e,t)
|
|
195
270
|
if(!o)continue
|
|
196
|
-
const
|
|
197
|
-
for(const e of
|
|
198
|
-
if(n){r.push(`${(f.get(n)??"[chart]").replace(/\]$/,`${
|
|
199
|
-
continue}const
|
|
200
|
-
|
|
201
|
-
const t=[]
|
|
202
|
-
for(const r of e.matchAll(/<si\b[^>]*>([\s\S]*?)<\/si>/g)){const e=[]
|
|
203
|
-
for(const t of r[1].matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g))e.push(o(t[1]))
|
|
204
|
-
t.push(e.join(""))}return t}function b(e){const t=/^[A-Z]+/i.exec(e)?.[0].toUpperCase()??"A"
|
|
271
|
+
const i=p(o),d=c(t),f=await u(e,a(await n(e,d.path),d.dir))
|
|
272
|
+
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}`:""
|
|
273
|
+
if(n){r.push(`${(f.get(n)??"[chart]").replace(/\]$/,`${a}]`)}`)
|
|
274
|
+
continue}const i=/<pic>[\s\S]*?<cNvPr\b([^>]*)\/?>/.exec(t)
|
|
275
|
+
i&&r.push(l(s(i[1],"descr"),s(i[1],"name")).replace(/\]$/,`${a}]`))}}return r}function h(e){const t=/^[A-Z]+/i.exec(e)?.[0].toUpperCase()??"A"
|
|
205
276
|
let r=0
|
|
206
277
|
for(const e of t)r=26*r+(e.charCodeAt(0)-64)
|
|
207
278
|
return r-1}function w(e){let t=""
|
|
208
279
|
for(let r=e+1;r>0;r=Math.floor((r-1)/26))t=String.fromCharCode(65+(r-1)%26)+t
|
|
209
|
-
return t}function
|
|
210
|
-
let n=0,
|
|
211
|
-
for(const
|
|
212
|
-
break}const e=
|
|
280
|
+
return t}function b(e,t){const r=[]
|
|
281
|
+
let n=0,a=!1
|
|
282
|
+
for(const i of e.matchAll(/<row\b([^>]*?)(?:\/>|>([\s\S]*?)<\/row>)/g)){if(r.length>=S){a=!0
|
|
283
|
+
break}const e=i[2]??"",c=[]
|
|
213
284
|
let l=0
|
|
214
|
-
for(const r of e.matchAll(/<c\b([^>]*?)(?:\/>|>([\s\S]*?)<\/c>)/g)){const e=s(r[1],"r"),n=e?
|
|
285
|
+
for(const r of e.matchAll(/<c\b([^>]*?)(?:\/>|>([\s\S]*?)<\/c>)/g)){const e=s(r[1],"r"),n=e?h(e):l
|
|
215
286
|
l=n+1
|
|
216
|
-
const
|
|
287
|
+
const a=s(r[1],"t"),i=r[2]??"",u=/<f\b[^>]*>([\s\S]*?)<\/f>/.exec(i)?.[1]
|
|
217
288
|
let d=""
|
|
218
|
-
if("inlineStr"===
|
|
219
|
-
else{const e=/<v\b[^>]*>([\s\S]*?)<\/v>/.exec(
|
|
220
|
-
void 0!==e&&(d="s"===
|
|
289
|
+
if("inlineStr"===a)d=[...i.matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g)].map(e=>o(e[1])).join("")
|
|
290
|
+
else{const e=/<v\b[^>]*>([\s\S]*?)<\/v>/.exec(i)?.[1]
|
|
291
|
+
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:g(r,n),truncated:a}}function g(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 x(e,t){const r=[],n=p(e)
|
|
221
292
|
for(const e of n.matchAll(/<pic\b[^>]*>[\s\S]*?<\/pic>|<graphicFrame\b[^>]*>[\s\S]*?<\/graphicFrame>/g)){const n=e[0]
|
|
222
293
|
if(/^<pic\b/.test(n)){const e=/<cNvPr\b([^>]*)\/?>/.exec(n)?.[1]??""
|
|
223
294
|
r.push(l(s(e,"descr"),s(e,"name")))
|
|
224
295
|
continue}const o=/<chart\b[^>]*r:id="([^"]+)"/.exec(n)?.[1]
|
|
225
|
-
o&&r.push(t.get(o)??"[chart]")}return r}function
|
|
296
|
+
o&&r.push(t.get(o)??"[chart]")}return r}function _(e){const t=[]
|
|
226
297
|
for(const r of e.matchAll(/<a:p\b[^>]*>([\s\S]*?)<\/a:p>/g)){const e=[]
|
|
227
298
|
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")
|
|
228
299
|
const n=e.join("").trim()
|
|
229
|
-
n&&t.push(n)}return t}async function
|
|
230
|
-
if(!a
|
|
300
|
+
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")
|
|
301
|
+
if(!i||a&&a!==t)throw new Error(`not an OpenDocument ${o} (${i?`its mimetype is ${a}`:"content.xml is missing"})`)
|
|
231
302
|
const c=new Map
|
|
232
303
|
for(const e of Object.keys(s.files)){const t=/^(.+)\/content\.xml$/.exec(e)?.[1]
|
|
233
304
|
if(!t)continue
|
|
234
305
|
const r=await n(s,e)
|
|
235
|
-
r&&/<chart:chart\b/.test(r)&&c.set(t
|
|
236
|
-
if(
|
|
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(
|
|
238
|
-
for(let r=0;r<n;r++)t.push(e)}n.push(t)}const
|
|
239
|
-
return t?{col:
|
|
240
|
-
const t=e.split(":").map(
|
|
241
|
-
if("local-table"===t[0].table||""===t[0].table&&n.length){const e=
|
|
306
|
+
r&&/<chart:chart\b/.test(r)&&c.set(t,$(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 $(e){const t=/chart:class="chart:(\w+)"/.exec(e)?.[1]??"chart",r=[...(/<chart:title\b[^>]*>([\s\S]*?)<\/chart:title>/.exec(e)?.[1]??"").matchAll(/<text:p\b[^>]*>([\s\S]*?)<\/text:p>/g)].map(e=>o(e[1].replace(/<[^>]+>/g,""))).join(" ").trim(),n=[],a=/<table:table\b[^>]*table:name="local-table"[^>]*>([\s\S]*?)<\/table:table>/.exec(e)?.[1]
|
|
307
|
+
if(a)for(const e of a.matchAll(/<table:table-row\b[^>]*>([\s\S]*?)<\/table:table-row>/g)){const t=[]
|
|
308
|
+
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),256)
|
|
309
|
+
for(let r=0;r<n;r++)t.push(e)}n.push(t)}const i=e=>{const t=/^\$?([A-Z]+)\$?(\d+)$/.exec(e)
|
|
310
|
+
return t?{col:h(t[1]),row:Number(t[2])-1}:null},c=e=>{if(!e)return""
|
|
311
|
+
const t=e.split(":").map(e=>({table:e.slice(0,e.lastIndexOf(".")).replace(/^'(.*)'$/,"$1"),ref:e.slice(e.lastIndexOf(".")+1)}))
|
|
312
|
+
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
|
|
242
313
|
if(!e||!r)return""
|
|
243
314
|
const o=[]
|
|
244
315
|
for(let t=e.row;t<=r.row;t++)for(let s=e.col;s<=r.col;s++)o.push(n[t]?.[s]??"")
|
|
245
|
-
return`${o.slice(0,8).join(", ")}${o.length>8?`, ... (${o.length})`:""}`}const r=t.map(
|
|
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(
|
|
247
|
-
return`${c(s(e[1],"chart:label-cell-address"))||"series"}${t?`: ${t}`:""}${l?` by ${l}`:""}`})
|
|
248
|
-
return`[chart: ${
|
|
249
|
-
return r?`${r}!${n}`:n})).join(":")))}function $(e,t,r){switch(e){case"text:tab":return r.push("\t"),!0
|
|
316
|
+
return`${o.slice(0,8).join(", ")}${o.length>8?`, ... (${o.length})`:""}`}const r=t.map(e=>e.ref.replace(/\$/g,""))
|
|
317
|
+
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"))
|
|
318
|
+
return`${c(s(e[1],"chart:label-cell-address"))||"series"}${t?`: ${t}`:""}${l?` by ${l}`:""}`})
|
|
319
|
+
return`[chart: ${I[t]??t}${r?` "${r}"`:""}${u.length?`; ${u.join("; ")}`:""}]`}function y(e,t,r){switch(e){case"text:tab":return r.push("\t"),!0
|
|
250
320
|
case"text:line-break":return r.push("\n"),!0
|
|
251
321
|
case"text:s":return r.push(" ".repeat(Math.min(100,Number(s(t,"text:c")??1)||1))),!0
|
|
252
|
-
default:return!1}}function
|
|
253
|
-
let
|
|
254
|
-
for(const d of e.matchAll(
|
|
322
|
+
default:return!1}}function E(e,t=new Map){const r=[],n=[],a=new R
|
|
323
|
+
let i=0,c=0,l=null,u=null
|
|
324
|
+
for(const d of e.matchAll(T)){const[,e,p,f,m,h]=d
|
|
255
325
|
if(void 0!==h){if(c)continue
|
|
256
|
-
u&&l?l[u]=(l[u]??"")+o(h):
|
|
257
|
-
continue}if(
|
|
326
|
+
u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))
|
|
327
|
+
continue}if(A.has(p)){m||(c+=e?-1:1)
|
|
258
328
|
continue}if(c)continue
|
|
259
|
-
const
|
|
329
|
+
const w=n[n.length-1]
|
|
260
330
|
if(e)switch(p){case"svg:title":case"svg:desc":u=null
|
|
261
331
|
break
|
|
262
|
-
case"draw:frame":{const e=l?
|
|
332
|
+
case"draw:frame":{const e=l?v(l,t):null
|
|
263
333
|
if(l=null,!e)break
|
|
264
|
-
|
|
265
|
-
break}case"text:p":case"text:h":{const e=
|
|
334
|
+
a.current?a.pushSpaced(e):w?.cell?w.cell.push(e):r.push(e)
|
|
335
|
+
break}case"text:p":case"text:h":{const e=a.close()
|
|
266
336
|
if(!e)break
|
|
267
|
-
if(
|
|
337
|
+
if(w?.cell){e.plain&&w.cell.push(e.plain)
|
|
268
338
|
break}if(!e.line){r.length&&""!==r[r.length-1]&&r.push("")
|
|
269
339
|
break}r.push(e.line)
|
|
270
|
-
break}case"text:list-item":
|
|
340
|
+
break}case"text:list-item":i=Math.max(0,i-1)
|
|
271
341
|
break
|
|
272
|
-
case"table:table-cell":case"table:covered-table-cell":
|
|
342
|
+
case"table:table-cell":case"table:covered-table-cell":w?.cell&&w.row&&(w.row.push(w.cell.join(" ")),w.cell=null)
|
|
273
343
|
break
|
|
274
|
-
case"table:table-row":
|
|
344
|
+
case"table:table-row":w?.row&&(w.rows.push(w.row),w.row=null)
|
|
275
345
|
break
|
|
276
346
|
case"table:table":{const e=n.pop()
|
|
277
347
|
if(!e)break
|
|
278
|
-
const t=e.rows.map(
|
|
348
|
+
const t=e.rows.map(e=>`| ${e.map(e=>e.replace(/\|/g,"\\|")).join(" | ")} |`),o=n[n.length-1]
|
|
279
349
|
o?.cell?o.cell.push(t.join(" ")):r.push(...t,"")
|
|
280
|
-
break}}else{if(
|
|
281
|
-
switch(p){case"text:p":case"text:h":m?!
|
|
350
|
+
break}}else{if(y(p,f,a))continue
|
|
351
|
+
switch(p){case"text:p":case"text:h":m?!w?.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)
|
|
282
352
|
break
|
|
283
|
-
case"text:list-item":m||
|
|
353
|
+
case"text:list-item":m||i++
|
|
284
354
|
break
|
|
285
355
|
case"table:table":m||n.push({rows:[],row:null,cell:null})
|
|
286
356
|
break
|
|
287
|
-
case"table:table-row":
|
|
357
|
+
case"table:table-row":w&&!m&&(w.row=[])
|
|
288
358
|
break
|
|
289
|
-
case"table:table-cell":case"table:covered-table-cell":
|
|
359
|
+
case"table:table-cell":case"table:covered-table-cell":w&&(m?w.row?.push(""):w.cell=[])
|
|
290
360
|
break
|
|
291
361
|
case"draw:frame":m||(l={name:s(f,"draw:name")})
|
|
292
362
|
break
|
|
@@ -294,294 +364,183 @@ case"draw:image":l&&(l.image=!0)
|
|
|
294
364
|
break
|
|
295
365
|
case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
|
|
296
366
|
break
|
|
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
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
if(
|
|
301
|
-
|
|
302
|
-
|
|
367
|
+
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()}exports.bi=void 0,exports.documentKindFor=function(e){const t=(0,O.formatFor)(e)
|
|
368
|
+
return t?.text?t.kind:void 0},exports.extractDocumentText=async function e(i,c,l={}){if(i.byteLength>exports.bi)throw new Error(`file is ${(i.byteLength/1048576).toFixed(1)} MB; text extraction stops at ${exports.bi/1048576} MB`)
|
|
369
|
+
const d=(0,O.formatOfKind)(c).textVia
|
|
370
|
+
if(d){if(!l.convert)throw new Error(`.${c} files are read by converting them in the office box, which is not reachable from here`)
|
|
371
|
+
const t=await e(await l.convert(i,c,d),d)
|
|
372
|
+
return{...t,kind:c,note:`Converted from .${c} to .${d} in the office box first. ${t.note??""}`.trim()}}switch(c){case"pdf":return async function(e){const r=await Promise.resolve().then(()=>t.t(88891,23)),{getDocumentProxy:n,extractText:o}=r?.default??r,s=await n(new Uint8Array(e),{isEvalSupported:!1})
|
|
373
|
+
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())
|
|
374
|
+
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?.(()=>{}))}}(i)
|
|
375
|
+
case"docx":return async function(e){const t=await r(e),o=await n(t,"word/document.xml")
|
|
376
|
+
if(!o)throw new Error("not a Word document (word/document.xml is missing)")
|
|
377
|
+
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."}}(i)
|
|
378
|
+
case"xlsx":return async function(e){const t=await r(e),i=await n(t,"xl/workbook.xml")
|
|
379
|
+
if(!i)throw new Error("not an Excel workbook (xl/workbook.xml is missing)")
|
|
380
|
+
const c=a(await n(t,"xl/_rels/workbook.xml.rels"),"xl"),l=function(e){if(!e)return[]
|
|
381
|
+
const t=[]
|
|
382
|
+
for(const r of e.matchAll(/<si\b[^>]*>([\s\S]*?)<\/si>/g)){const e=[]
|
|
383
|
+
for(const t of r[1].matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g))e.push(o(t[1]))
|
|
384
|
+
t.push(e.join(""))}return t}(await n(t,"xl/sharedStrings.xml")),u=[]
|
|
385
|
+
let d=!1,p=0
|
|
386
|
+
for(const e of i.matchAll(/<sheet\b([^>]*)\/?>/g)){const r=s(e[1],"name")??`Sheet ${p+1}`,o=s(e[1],"r:id"),a=o?c.get(o):void 0,i=a?await n(t,a):void 0
|
|
387
|
+
if(p++,!i){u.push(`## Sheet: ${r}\n(empty)`)
|
|
388
|
+
continue}const{text:f,truncated:h}=b(i,l)
|
|
389
|
+
d=d||h
|
|
390
|
+
const w=await m(t,a)
|
|
391
|
+
u.push(`## Sheet: ${r}\n${f||"(empty)"}${w.length?`\n\n${w.join("\n")}`:""}`)}return{kind:"xlsx",text:u.join("\n\n"),units:p,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."+(d?" Sheets over 5000 rows are cut off.":"")}}(i)
|
|
392
|
+
case"pptx":return async function(e){const t=await r(e),o=await n(t,"ppt/presentation.xml")
|
|
393
|
+
if(!o)throw new Error("not a PowerPoint deck (ppt/presentation.xml is missing)")
|
|
394
|
+
const i=a(await n(t,"ppt/_rels/presentation.xml.rels"),"ppt")
|
|
395
|
+
let c=[...o.matchAll(/<p:sldId\b([^>]*)\/?>/g)].map(e=>{const t=s(e[1],"r:id")
|
|
396
|
+
return t?i.get(t):void 0}).filter(e=>!!e)
|
|
397
|
+
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])))
|
|
398
|
+
const l=[]
|
|
399
|
+
for(let e=0;e<c.length;e++){const r=c[e],o=await n(t,r),s=o?_(o):[],i=r.slice(0,r.lastIndexOf("/")),d=r.slice(r.lastIndexOf("/")+1),p=a(await n(t,`${i}/_rels/${d}.rels`),i)
|
|
400
|
+
o&&s.push(...x(o,await u(t,p)))
|
|
401
|
+
const f=[...p.values()].find(e=>/notesSlide\d*\.xml$/.test(e)),m=f?await n(t,f):void 0,h=m?_(m).filter(e=>!/^(\d+|<number>)$/.test(e)):[]
|
|
402
|
+
let w=`## Slide ${e+1}\n${s.join("\n")||"(no text)"}`
|
|
403
|
+
h.length&&(w+=`\n\nNotes:\n${h.join("\n")}`),l.push(w)}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."}}(i)
|
|
404
|
+
case"odt":return async function(e){const{xml:t,objects:r}=await k(e,"application/vnd.oasis.opendocument.text","text document")
|
|
405
|
+
return{kind:"odt",text:E(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."}}(i)
|
|
406
|
+
case"ods":return async function(e){const{xml:t,objects:r}=await k(e,"application/vnd.oasis.opendocument.spreadsheet","spreadsheet"),{sheets:n,truncated:a}=function(e,t=new Map){const r=[]
|
|
407
|
+
let n=!1,a=null,i=null,c=null,l=null,u=null,d=0,p=!1
|
|
408
|
+
for(const f of e.matchAll(T)){const[,e,m,h,w,b]=f
|
|
409
|
+
if(void 0!==b){if(d)continue
|
|
410
|
+
u&&l?l[u]=(l[u]??"")+o(b):c&&p&&c.parts.push(o(b))
|
|
411
|
+
continue}if(A.has(m)){w||(d+=e?-1:1)
|
|
303
412
|
continue}if(d)continue
|
|
304
|
-
const
|
|
413
|
+
const x=()=>{if(!c||!i)return
|
|
305
414
|
let e=c.parts.join("").trim()||c.value||""
|
|
306
|
-
if(c.formula&&(e=`${e}${e?" ":""}(=${
|
|
307
|
-
|
|
415
|
+
if(c.formula&&(e=`${e}${e?" ":""}(=${t=c.formula,t.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,"")
|
|
416
|
+
return r?`${r}!${n}`:n}).join(":"))})`),e)for(let t=0;t<Math.min(c.repeat,256);t++)i.cells[i.col+t]=e.replace(/[\t\r\n]+/g," ")
|
|
417
|
+
var t
|
|
418
|
+
i.col+=c.repeat,c=null}
|
|
308
419
|
if(e)switch(m){case"svg:title":case"svg:desc":u=null
|
|
309
420
|
break
|
|
310
|
-
case"draw:frame":{const e=l?
|
|
311
|
-
l=null,e&&
|
|
421
|
+
case"draw:frame":{const e=l?v(l,t):null
|
|
422
|
+
l=null,e&&a&&a.figures.push(e)
|
|
312
423
|
break}case"text:p":p=!1
|
|
313
424
|
break
|
|
314
|
-
case"table:table-cell":case"table:covered-table-cell":
|
|
425
|
+
case"table:table-cell":case"table:covered-table-cell":x()
|
|
315
426
|
break
|
|
316
|
-
case"table:table-row":if(!a
|
|
317
|
-
if(
|
|
318
|
-
break}
|
|
427
|
+
case"table:table-row":if(!i||!a)break
|
|
428
|
+
if(i.cells.some(e=>void 0!==e)){for(let e=0;e<Math.min(i.repeat,50);e++){if(a.rows.length>=S){n=!0
|
|
429
|
+
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
|
|
319
430
|
break
|
|
320
|
-
case"table:table":if(!
|
|
321
|
-
r.push({name:
|
|
431
|
+
case"table:table":if(!a)break
|
|
432
|
+
r.push({name:a.name,text:g(a.rows,a.width),figures:a.figures}),a=null}else switch(m){case"table:table":w||(a={name:s(h,"table:name")??`Sheet ${r.length+1}`,rows:[],width:0,figures:[],rowIndex:0})
|
|
322
433
|
break
|
|
323
434
|
case"table:table-row":{const e=Math.max(1,Number(s(h,"table:number-rows-repeated")??1)||1)
|
|
324
|
-
|
|
325
|
-
break}case"table:table-cell":case"table:covered-table-cell":if(!
|
|
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")},
|
|
435
|
+
w?a&&(a.rowIndex+=e):i={cells:[],col:0,repeat:e}
|
|
436
|
+
break}case"table:table-cell":case"table:covered-table-cell":if(!i)break
|
|
437
|
+
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")},w&&x()
|
|
327
438
|
break
|
|
328
|
-
case"text:p":c&&!
|
|
439
|
+
case"text:p":c&&!w&&(c.parts.length&&c.parts.push(" "),p=!0)
|
|
329
440
|
break
|
|
330
441
|
case"text:s":case"text:tab":case"text:line-break":c&&p&&c.parts.push(" ")
|
|
331
442
|
break
|
|
332
|
-
case"draw:frame":
|
|
443
|
+
case"draw:frame":w||(l={name:s(h,"draw:name")})
|
|
333
444
|
break
|
|
334
445
|
case"draw:image":l&&(l.image=!0)
|
|
335
446
|
break
|
|
336
447
|
case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(h,"xlink:href"))
|
|
337
448
|
break
|
|
338
|
-
case"svg:title":case"svg:desc":!
|
|
449
|
+
case"svg:title":case"svg:desc":!w&&l&&(u="svg:title"===m?"title":"desc")}}return{sheets:r,truncated:n}}(t,r)
|
|
450
|
+
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."+(a?" Sheets over 5000 rows are cut off.":"")}}(i)
|
|
451
|
+
case"odp":return async function(e){const{xml:t,objects:r}=await k(e,"application/vnd.oasis.opendocument.presentation","presentation"),n=function(e,t=new Map){const r=[]
|
|
339
452
|
let n=null
|
|
340
|
-
const
|
|
341
|
-
let
|
|
342
|
-
for(const d of e.matchAll(
|
|
343
|
-
if(void 0===h){if(
|
|
453
|
+
const a=new R
|
|
454
|
+
let i=0,c=0,l=null,u=null
|
|
455
|
+
for(const d of e.matchAll(T)){const[,e,p,f,m,h]=d
|
|
456
|
+
if(void 0===h){if(A.has(p))m||(c+=e?-1:1)
|
|
344
457
|
else if(!c)if(e)switch(p){case"svg:title":case"svg:desc":u=null
|
|
345
458
|
break
|
|
346
|
-
case"text:p":case"text:h":{const e=
|
|
347
|
-
!e?.plain||!n||
|
|
348
|
-
break}case"draw:frame":{const e=l?
|
|
459
|
+
case"text:p":case"text:h":{const e=a.close()
|
|
460
|
+
!e?.plain||!n||i&&/^<number>$/.test(e.plain)||(i?n.notes:n.lines).push(e.plain)
|
|
461
|
+
break}case"draw:frame":{const e=l?v(l,t):null
|
|
349
462
|
l=null,e&&n&&n.lines.push(e)
|
|
350
|
-
break}case"presentation:notes":
|
|
463
|
+
break}case"presentation:notes":i=Math.max(0,i-1)
|
|
351
464
|
break
|
|
352
465
|
case"draw:page":{if(!n)break
|
|
353
466
|
let e=`## Slide ${r.length+1}\n${n.lines.join("\n")||"(no text)"}`
|
|
354
467
|
n.notes.length&&(e+=`\n\nNotes:\n${n.notes.join("\n")}`),r.push(e),n=null
|
|
355
|
-
break}}else{if(
|
|
468
|
+
break}}else{if(y(p,f,a))continue
|
|
356
469
|
switch(p){case"draw:page":m||(n={lines:[],notes:[]})
|
|
357
470
|
break
|
|
358
|
-
case"presentation:notes":m||
|
|
471
|
+
case"presentation:notes":m||i++
|
|
359
472
|
break
|
|
360
|
-
case"text:p":case"text:h":m||
|
|
473
|
+
case"text:p":case"text:h":m||a.open(0,!1)
|
|
361
474
|
break
|
|
362
|
-
case"draw:frame":m||
|
|
475
|
+
case"draw:frame":m||i||(l={name:s(f,"draw:name")})
|
|
363
476
|
break
|
|
364
477
|
case"draw:image":l&&(l.image=!0)
|
|
365
478
|
break
|
|
366
479
|
case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
|
|
367
480
|
break
|
|
368
481
|
case"svg:title":case"svg:desc":!m&&l&&(u="svg:title"===p?"title":"desc")}}}else{if(c)continue
|
|
369
|
-
u&&l?l[u]=(l[u]??"")+o(h):
|
|
370
|
-
return
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
const t
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
case"docx":return async function(e){const t=await r(e),o=await n(t,"word/document.xml")
|
|
378
|
-
if(!o)throw new Error("not a Word document (word/document.xml is missing)")
|
|
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)
|
|
380
|
-
case"xlsx":return async function(e){const t=await r(e),o=await n(t,"xl/workbook.xml")
|
|
381
|
-
if(!o)throw new Error("not an Excel workbook (xl/workbook.xml is missing)")
|
|
382
|
-
const a=i(await n(t,"xl/_rels/workbook.xml.rels"),"xl"),c=h(await n(t,"xl/sharedStrings.xml")),l=[]
|
|
383
|
-
let u=!1,d=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
|
|
385
|
-
if(d++,!p){l.push(`## Sheet: ${r}\n(empty)`)
|
|
386
|
-
continue}const{text:f,truncated:h}=g(p,c)
|
|
387
|
-
u=u||h
|
|
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)
|
|
390
|
-
case"pptx":return async function(e){const t=await r(e),o=await n(t,"ppt/presentation.xml")
|
|
391
|
-
if(!o)throw new Error("not a PowerPoint deck (ppt/presentation.xml is missing)")
|
|
392
|
-
const a=i(await n(t,"ppt/_rels/presentation.xml.rels"),"ppt")
|
|
393
|
-
let c=[...o.matchAll(/<p:sldId\b([^>]*)\/?>/g)].map((e=>{const t=s(e[1],"r:id")
|
|
394
|
-
return t?a.get(t):void 0})).filter((e=>!!e))
|
|
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]))))
|
|
396
|
-
const l=[]
|
|
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)
|
|
398
|
-
o&&s.push(..._(o,await u(t,p)))
|
|
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))):[]
|
|
400
|
-
let b=`## Slide ${e+1}\n${s.join("\n")||"(no text)"}`
|
|
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)
|
|
402
|
-
case"odt":return async function(e){const{xml:t,objects:r}=await E(e,"application/vnd.oasis.opendocument.text","text document")
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
411
|
-
exports.MAX_DOCUMENT_BYTES=52428800
|
|
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
|
|
482
|
+
u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))}}return r}(t,r)
|
|
483
|
+
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."}}(i)
|
|
484
|
+
case"rtf":return{kind:"rtf",text:(0,M.rtfToText)(i),note:"Text, paragraphs and table rows; styling, pictures and layout are dropped. To see the pages, view_asset this path."}
|
|
485
|
+
default:throw new Error(`no text form for .${c}`)}}
|
|
486
|
+
const O=t(12661),M=t(43701)
|
|
487
|
+
exports.bi=52428800
|
|
488
|
+
const S=5e3,C={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"},T=/<(\/?)([A-Za-z][\w.-]*:[\w.-]+)\b([^>]*?)(\/?)>|([^<]+)/g,A=new Set(["text:note","office:annotation","text:tracked-changes","office:forms","text:sequence-decls"]),I={circle:"pie",ring:"doughnut"}
|
|
489
|
+
class R{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
|
|
414
490
|
if(!t)return
|
|
415
491
|
const r=t[t.length-1]??""
|
|
416
492
|
t.push(`${!r||/\s$/.test(r)?"":" "}${e} `)}close(){const e=this.stack.pop()
|
|
417
493
|
if(!e)return null
|
|
418
494
|
const t=e.parts.join("").replace(/[ \t]+\n/g,"\n").trim()
|
|
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:""}}}},
|
|
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"})
|
|
495
|
+
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:""}}}},95900(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
496
|
if(!n.ok)throw new Error(n.error)
|
|
559
497
|
return n.bytes}async function r(e){const r=(0,u.documentKindFor)(e)
|
|
560
498
|
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,
|
|
499
|
+
try{const n=await(0,u.extractDocumentText)(new Uint8Array(await(0,i.readFile)(e)),r,{convert:t})
|
|
562
500
|
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
501
|
var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
|
|
564
502
|
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}),
|
|
503
|
+
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=[]
|
|
566
504
|
for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
|
|
567
505
|
return t},n(e)},function(e){if(e&&e.__esModule)return e
|
|
568
506
|
var t={}
|
|
569
|
-
if(null!=e)for(var r=n(e),
|
|
507
|
+
if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
|
|
570
508
|
return s(t,e),t})
|
|
571
509
|
Object.defineProperty(exports,"__esModule",{value:!0}),exports.textconv=r
|
|
572
|
-
const
|
|
510
|
+
const i=e(91943),c=a(e(70857)),l=a(e(16928)),u=e(36018),d=e(3517)
|
|
573
511
|
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(
|
|
575
|
-
e.
|
|
512
|
+
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"))}},88196(e,exports){exports.EndsKeeper=void 0,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
|
|
513
|
+
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}}},44600(e,exports,t){async function r(e,r={}){const{spawn:n}=await Promise.resolve().then(()=>t.t(35317,23))
|
|
514
|
+
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=[]
|
|
515
|
+
let c=!1,l=!1
|
|
516
|
+
const u=e=>{if(s.pid)try{o?s.kill(e):process.kill(-s.pid,e)}catch{}}
|
|
517
|
+
let d,p
|
|
518
|
+
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)})
|
|
519
|
+
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}))}
|
|
520
|
+
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"]})
|
|
521
|
+
let c="",l=""
|
|
522
|
+
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(414).then(()=>t(79414)),a=s(),i=(new Date).toISOString(),c=n.cwd??process.cwd()
|
|
523
|
+
let l
|
|
524
|
+
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(()=>{})
|
|
525
|
+
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}
|
|
526
|
+
const n=t(35317)
|
|
527
|
+
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"},88194(module){module.exports=require("jszip")},9956(module){module.exports=require("undici")},88891(module){module.exports=require("unpdf")},35317(module){module.exports=require("child_process")},76982(module){module.exports=require("crypto")},79896(module){module.exports=require("fs")},91943(module){module.exports=require("fs/promises")},16698(module){module.exports=require("node:async_hooks")},31421(module){module.exports=require("node:child_process")},73024(module){module.exports=require("node:fs")},48161(module){module.exports=require("node:os")},76760(module){module.exports=require("node:path")},70857(module){module.exports=require("os")},16928(module){module.exports=require("path")},2203(module){module.exports=require("stream")}}
|
|
528
|
+
const r={}
|
|
529
|
+
e.m=t,e.c=r,(()=>{const t=Object.getPrototypeOf
|
|
530
|
+
let r
|
|
531
|
+
e.t=function(n,o){if(1&o&&(n=this(n)),8&o)return n
|
|
576
532
|
if("object"==typeof n&&n){if(4&o&&n.__esModule)return n
|
|
577
|
-
if(16&o&&"function"==typeof n.then)return n}
|
|
533
|
+
if(16&o&&"function"==typeof n.then)return n}const s=Object.create(null)
|
|
578
534
|
e.r(s)
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
for(var
|
|
582
|
-
return
|
|
583
|
-
|
|
535
|
+
const a={}
|
|
536
|
+
r=r||[null,t({}),t([]),t(t)]
|
|
537
|
+
for(var i=2&o&&n;("object"==typeof i||"function"==typeof i)&&!~r.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach(e=>a[e]=()=>n[e])
|
|
538
|
+
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=>{const r=[]
|
|
539
|
+
return e.f.require(t,r),Promise.all(r)},e.u=e=>e+".js",e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=exports=>{Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},e.nmd=module=>(module.paths=[],module.children||(module.children=[]),module),(()=>{const t={830:1}
|
|
540
|
+
e.f.require=r=>{if(!t[r]){const n=require("./"+e.u(r))
|
|
541
|
+
t[r]||(r=>{const n=r.modules,o=r.ids,s=r.runtime
|
|
542
|
+
for(var a in n)e.o(n,a)&&(e.m[a]=n[a])
|
|
584
543
|
s&&s(e)
|
|
585
|
-
for(var
|
|
586
|
-
|
|
587
|
-
module.exports=
|
|
544
|
+
for(var i=0;i<o.length;i++)t[o[i]]=1})(n)}}})()
|
|
545
|
+
let n=e(e.s=95900)
|
|
546
|
+
module.exports=n})()
|