alchemylab 3.0.6 → 3.0.8

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.
@@ -10,18 +10,18 @@ return Math.round(parseFloat(t[1])*r)}function n(e,t,r,n){return e>0&&r>0?t+r<=e
10
10
  if(e>0)return e
11
11
  const t=await(0,d.docker)(["info","--format","{{.MemTotal}}"],d.DOCKER_OP_TIMEOUT_MS)
12
12
  return 0===t.exit?Number(t.stdout.trim()):NaN}function s(e){if(!Number.isInteger(e)||e<=0)return!0
13
- try{return process.kill(e,0),!0}catch(e){return"EPERM"===e?.code}}function a(e,t,r=s){return!(!e||!f.has(t)||r(Number(e)))}async function i(){const e=await(0,d.docker)(["ps","-a","--filter","label=alchemy.project","--filter","status=running","--filter","status=created","--format",'{{.ID}}\t{{.Label "alchemy.owner"}}\t{{.Label "alchemy.sandbox"}}'],d.DOCKER_OP_TIMEOUT_MS)
13
+ try{return process.kill(e,0),!0}catch(e){return"EPERM"===e?.code}}function i(e,t,r=s){return!(!e||!f.has(t)||r(Number(e)))}async function a(){const e=await(0,d.docker)(["ps","-a","--filter","label=alchemy.project","--filter","status=running","--filter","status=created","--format",'{{.ID}}\t{{.Label "alchemy.owner"}}\t{{.Label "alchemy.sandbox"}}'],d.DOCKER_OP_TIMEOUT_MS)
14
14
  if(0!==e.exit)return 0
15
15
  const t=[]
16
16
  for(const r of e.stdout.split("\n").map(e=>e.trim()).filter(Boolean)){const[e,n="",o=""]=r.split("\t")
17
- a(n,o)?await(0,d.docker)(["rm","-f","-v",e],d.DOCKER_OP_TIMEOUT_MS):t.push(e)}if(!t.length)return 0
17
+ i(n,o)?await(0,d.docker)(["rm","-f","-v",e],d.DOCKER_OP_TIMEOUT_MS):t.push(e)}if(!t.length)return 0
18
18
  const r=await(0,d.docker)(["inspect","--format","{{.HostConfig.Memory}}",...t],d.DOCKER_OP_TIMEOUT_MS)
19
- return 0!==r.exit?0:r.stdout.split("\n").map(e=>Number(e.trim())||0).reduce((e,t)=>e+t,0)}async function c(e,t,s=exports.ROOM_WAIT_MS,a=5e3,c=i,l=o){try{const o=r(e),i=await l(),u=Date.now()+s
19
+ return 0!==r.exit?0:r.stdout.split("\n").map(e=>Number(e.trim())||0).reduce((e,t)=>e+t,0)}async function c(e,t,s=exports.ROOM_WAIT_MS,i=5e3,c=a,l=o){try{const o=r(e),a=await l(),u=Date.now()+s
20
20
  for(function(){const e=(0,d.containerLabels)()
21
- "check"===e["alchemy.purpose"]&&e["alchemy.request"]}();;){const e=n(i,await c(),o,t)
21
+ "check"===e["alchemy.purpose"]&&e["alchemy.request"]}();;){const e=n(a,await c(),o,t)
22
22
  if(!e)return null
23
23
  if(Date.now()>=u)return e
24
- await new Promise(e=>setTimeout(e,a))}}catch{return null}}function l(e){const t=[]
24
+ await new Promise(e=>setTimeout(e,i))}}catch{return null}}function l(e){const t=[]
25
25
  for(const r of String(e||"").split(",").map(e=>e.trim()).filter(Boolean)){const e=r.match(/^(\d+)(?:-(\d+))?$/)
26
26
  if(!e)continue
27
27
  const n=Number(e[1]),o=void 0!==e[2]?Number(e[2]):n
@@ -33,30 +33,30 @@ const o=await c(e,t)
33
33
  return o?{refused:o}:{value:await r()}})
34
34
  return m=o.catch(()=>{}),o.catch(()=>{}).then(()=>{h--}),o},exports.pickCores=async function(e,t,r="standard"){try{const n=await(0,d.docker)(["info","--format","{{.NCPU}}"],d.DOCKER_OP_TIMEOUT_MS),o=Number(n.stdout.trim())
35
35
  if(!(o>0))return{cpus:e??t}
36
- const s=await(0,d.docker)(["ps","-a","-q","--filter","label=alchemy.project","--filter","status=running","--filter","status=created"],d.DOCKER_OP_TIMEOUT_MS),a=0===s.exit?s.stdout.split("\n").map(e=>e.trim()).filter(Boolean):[],i=a.length?(await(0,d.docker)(["inspect","--format","{{.HostConfig.CpusetCpus}}",...a],d.DOCKER_OP_TIMEOUT_MS)).stdout.split("\n").map(e=>e.trim()).filter(Boolean):[],c=new Set(i.flatMap(l).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))
36
+ const s=await(0,d.docker)(["ps","-a","-q","--filter","label=alchemy.project","--filter","status=running","--filter","status=created"],d.DOCKER_OP_TIMEOUT_MS),i=0===s.exit?s.stdout.split("\n").map(e=>e.trim()).filter(Boolean):[],a=i.length?(await(0,d.docker)(["inspect","--format","{{.HostConfig.CpusetCpus}}",...i],d.DOCKER_OP_TIMEOUT_MS)).stdout.split("\n").map(e=>e.trim()).filter(Boolean):[],c=new Set(a.flatMap(l).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))
37
37
  return Math.min(r,Math.max(2,Math.ceil(t/2)))}(t,r)}(r,o,o-c.size),f=Math.max(1,Math.ceil(p))
38
- return f>=o?{cpus:p}:{cpus:p,cpuset:u(o,f,i).join(",")}}catch{return{cpus:e??t}}}
38
+ return f>=o?{cpus:p}:{cpus:p,cpuset:u(o,f,a).join(",")}}catch{return{cpus:e??t}}}
39
39
  const d=t(81618),p=e=>`${(e/1024**3).toFixed(1)} GB`,f=new Set(["experiment","rung1","deps","egress-proxy","service"])
40
40
  exports.IDLE_GRACE_MS=3e5,exports.kz=6e4,exports.Lt=3e4,exports.ROOM_WAIT_MS=12e4
41
41
  let m=Promise.resolve(),h=0
42
42
  exports.FY=exports.ROOM_WAIT_MS+6*d.DOCKER_OP_TIMEOUT_MS,exports.TS=["light","standard","heavy"]},52429(e,exports,t){exports.ContainerRunner=void 0
43
- const r=t(81618),n=t(83129),o=t(22604),s=t(11895),a=t(26166),i=t(2566),c=t(90695),l=t(61260),u=6e5
43
+ const r=t(81618),n=t(83129),o=t(22604),s=t(11895),i=t(26166),a=t(2566),c=t(90695),l=t(61260),u=6e5
44
44
  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??{},this.memory=(0,s.memoryForBox)(this.resources.memory,this.resources.size)}async run(e){if(!e.worktreePath)return{steps:[],ok:!1,error:"worktreePath is required"}
45
- const t=e.image??this.image,a={}
45
+ const t=e.image??this.image,i={}
46
46
  let d=Date.now()
47
47
  const p=e=>{const t=Date.now()
48
- a[e]=(a[e]??0)+(t-d),d=t},f=e.onStep??(()=>{})
48
+ i[e]=(i[e]??0)+(t-d),d=t},f=e.onStep??(()=>{})
49
49
  f("getting its image",r.DOCKER_OP_TIMEOUT_MS+((0,n.localRecipeFor)(t)?n.BUILD_TIMEOUT_MS:r.PULL_TIMEOUT_MS))
50
50
  const m=await(0,r.ensureImage)(t)
51
51
  if(p("image"),m)return{steps:[],ok:!1,error:m}
52
52
  if("background"===this.resources.priority){f("waiting for room to start its box",u+r.DOCKER_OP_TIMEOUT_MS)
53
53
  const e=await(0,o.waitForRoom)(this.memory,"check of main",u)
54
- if(p("room"),e)return{steps:[],ok:!1,error:e}}const h=await(0,o.withAdmission)(this.memory,"check",async()=>{const{cpus:n,cpuset:a}=await(0,o.pickCores)(this.resources.cpus,s.DEFAULT_CPUS,this.resources.size)
55
- let i=await(0,r.docker)(this.createArgs(e,t,!0,a,n),r.DOCKER_OP_TIMEOUT_MS)
56
- if(0!==i.exit)return{error:i.spawnError??`docker create failed: ${(i.stderr||String(i.exit)).trim()}`}
57
- let l=i.stdout.trim()
58
- if(p("create"),await(0,c.claimScratch)(l,t,"1000:1000")){if(await(0,r.docker)(["rm","-f","-v",l],r.DOCKER_OP_TIMEOUT_MS),i=await(0,r.docker)(this.createArgs(e,t,!1,a,n),r.DOCKER_OP_TIMEOUT_MS),0!==i.exit)return{error:i.spawnError??`docker create failed: ${(i.stderr||String(i.exit)).trim()}`}
59
- l=i.stdout.trim()}return p("scratch"),{id:l}},f)
54
+ if(p("room"),e)return{steps:[],ok:!1,error:e}}const h=await(0,o.withAdmission)(this.memory,"check",async()=>{const{cpus:n,cpuset:i}=await(0,o.pickCores)(this.resources.cpus,s.DEFAULT_CPUS,this.resources.size)
55
+ let a=await(0,r.docker)(this.createArgs(e,t,!0,i,n),r.DOCKER_OP_TIMEOUT_MS)
56
+ if(0!==a.exit)return{error:a.spawnError??`docker create failed: ${(a.stderr||String(a.exit)).trim()}`}
57
+ let l=a.stdout.trim()
58
+ if(p("create"),await(0,c.claimScratch)(l,t,"1000:1000")){if(await(0,r.docker)(["rm","-f","-v",l],r.DOCKER_OP_TIMEOUT_MS),a=await(0,r.docker)(this.createArgs(e,t,!1,i,n),r.DOCKER_OP_TIMEOUT_MS),0!==a.exit)return{error:a.spawnError??`docker create failed: ${(a.stderr||String(a.exit)).trim()}`}
59
+ l=a.stdout.trim()}return p("scratch"),{id:l}},f)
60
60
  if("refused"in h)return{steps:[],ok:!1,error:h.refused}
61
61
  if("error"in h.value)return{steps:[],ok:!1,error:h.value.error}
62
62
  const w=h.value.id
@@ -65,53 +65,53 @@ const t=await(0,r.docker)(["start",w],r.DOCKER_OP_TIMEOUT_MS)
65
65
  if(p("start"),0!==t.exit)return{steps:[],ok:!1,error:`docker start failed: ${(t.stderr||String(t.exit)).trim()}`}
66
66
  const n=[]
67
67
  let o=await(0,l.readOomKills)(w)??0
68
- for(const t of e.steps){const s=Date.now(),a=void 0!==e.deadlineAt?e.deadlineAt-s:1/0
69
- if(a<=0){n.push({run:t.run,exit:-1,stdout:"",stderr:"",ms:0,timedOut:!0})
70
- continue}const c=Math.min(t.timeoutMs??this.stepTimeoutMs,a)
68
+ for(const t of e.steps){const s=Date.now(),i=void 0!==e.deadlineAt?e.deadlineAt-s:1/0
69
+ if(i<=0){n.push({run:t.run,exit:-1,stdout:"",stderr:"",ms:0,timedOut:!0})
70
+ continue}const c=Math.min(t.timeoutMs??this.stepTimeoutMs,i)
71
71
  f(`running \`${t.run.replace(/\s+/g," ").slice(0,80)}\``,c+1e4)
72
- const u=await(0,r.dockerKeepingEnds)(["exec","-e",`${i.RUN_ENV_VAR}=${(0,i.withShellInit)(e.shellInit,t.run)}`,w,"/bin/sh","-c",i.RUN_FROM_ENV],c),d=Date.now()-s,p=await(0,l.readOomKills)(w),m=null!=p?Math.max(0,p-o):0
72
+ const u=await(0,r.dockerKeepingEnds)(["exec","-e",`${a.RUN_ENV_VAR}=${(0,a.withShellInit)(e.shellInit,t.run)}`,w,"/bin/sh","-c",a.RUN_FROM_ENV],c),d=Date.now()-s,p=await(0,l.readOomKills)(w),m=null!=p?Math.max(0,p-o):0
73
73
  null!=p&&(o=p)
74
74
  const h=m>0?`${u.stderr}${u.stderr&&!u.stderr.endsWith("\n")?"\n":""}${(0,l.oomNote)(m,this.memory)}\n`:u.stderr
75
- if(n.push({run:t.run,exit:u.exit,stdout:u.stdout,stderr:h,ms:d,timedOut:u.timedOut,...m>0?{oomKills:m}:{}}),t.stopOnFail&&0!==u.exit)break}return p("commands"),{steps:n,ok:n.every(e=>0===e.exit),phaseMs:a}}finally{const e=Date.now()
76
- f("removing its box",r.DOCKER_OP_TIMEOUT_MS),await(0,r.docker)(["rm","-f","-v",w],r.DOCKER_OP_TIMEOUT_MS),a.remove=Date.now()-e}}createArgs(e,t,r,n,o){const i=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`])
77
- return["create","--label","alchemy.sandbox=rung1",...(0,a.hardenedCreateArgs)({network:this.network,user:"1000:1000",...r?{}:{extraTmpfs:[(0,c.scratchTmpfsArg)(512)]},shmSizeMb:this.resources.shmSizeMb,memory:this.memory,cpus:o??this.resources.cpus??s.DEFAULT_CPUS,cpuset:n,pidsLimit:this.resources.pidsLimit??512}),..."background"===this.resources.priority?["--cpu-shares",String(128)]:[],...r?c.SCRATCH_VOLUME_ARGS:[],...i,"-v",`${e.worktreePath}:/work:rw`,...l,...u,...d,"-w","/work",t,"tail","-f","/dev/null"]}}},81618(e,exports,t){function r(){return{"alchemy.owner":String(process.pid),...u.getStore()??{}}}function n(e){if("create"!==e[0]&&"run"!==e[0])return e
75
+ if(n.push({run:t.run,exit:u.exit,stdout:u.stdout,stderr:h,ms:d,timedOut:u.timedOut,...m>0?{oomKills:m}:{}}),t.stopOnFail&&0!==u.exit)break}return p("commands"),{steps:n,ok:n.every(e=>0===e.exit),phaseMs:i}}finally{const e=Date.now()
76
+ f("removing its box",r.DOCKER_OP_TIMEOUT_MS),await(0,r.docker)(["rm","-f","-v",w],r.DOCKER_OP_TIMEOUT_MS),i.remove=Date.now()-e}}createArgs(e,t,r,n,o){const a=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`])
77
+ return["create","--label","alchemy.sandbox=rung1",...(0,i.hardenedCreateArgs)({network:this.network,user:"1000:1000",...r?{}:{extraTmpfs:[(0,c.scratchTmpfsArg)(512)]},shmSizeMb:this.resources.shmSizeMb,memory:this.memory,cpus:o??this.resources.cpus??s.DEFAULT_CPUS,cpuset:n,pidsLimit:this.resources.pidsLimit??512}),..."background"===this.resources.priority?["--cpu-shares",String(128)]:[],...r?c.SCRATCH_VOLUME_ARGS:[],...a,"-v",`${e.worktreePath}:/work:rw`,...l,...u,...d,"-w","/work",t,"tail","-f","/dev/null"]}}},81618(e,exports,t){function r(){return{"alchemy.owner":String(process.pid),...u.getStore()??{}}}function n(e){if("create"!==e[0]&&"run"!==e[0])return e
78
78
  const t=new Set
79
79
  e.forEach((r,n)=>{"--label"===e[n-1]&&t.add(r.split("=")[0])})
80
80
  const n=Object.entries(r()).filter(([e])=>!t.has(e)).flatMap(([e,t])=>["--label",`${e}=${t.replace(/[\r\n]/g," ").slice(0,200)}`])
81
81
  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})
82
82
  const o=e
83
83
  if("ENOENT"===o.code)return void r({exit:-1,stdout:t??"",stderr:n??"",timedOut:!1,spawnError:"docker CLI not found on PATH"})
84
- const s=!0===o.killed||"SIGKILL"===o.signal,a="number"==typeof o.code?o.code:-1
85
- r({exit:a,stdout:t??"",stderr:n??"",timedOut:s})})})}exports.PULL_TIMEOUT_MS=exports.DOCKER_OP_TIMEOUT_MS=void 0,exports.containerLabels=r,exports.dockerKeepingEnds=function(e,t,r=524288){return new Promise(o=>{const a=new c.EndsKeeper(r),i=new c.EndsKeeper(r)
84
+ const s=!0===o.killed||"SIGKILL"===o.signal,i="number"==typeof o.code?o.code:-1
85
+ r({exit:i,stdout:t??"",stderr:n??"",timedOut:s})})})}exports.PULL_TIMEOUT_MS=exports.DOCKER_OP_TIMEOUT_MS=void 0,exports.containerLabels=r,exports.dockerKeepingEnds=function(e,t,r=524288){return new Promise(o=>{const i=new c.EndsKeeper(r),a=new c.EndsKeeper(r)
86
86
  let u=!1,d=!1
87
87
  const p=(0,s.spawn)("docker",n(e),{windowsHide:!0}),f=(0,l.awakeTimeout)(()=>{u=!0,p.kill("SIGKILL")},t)
88
- p.stdout.setEncoding("utf8").on("data",e=>a.push(e)),p.stderr.setEncoding("utf8").on("data",e=>i.push(e))
88
+ p.stdout.setEncoding("utf8").on("data",e=>i.push(e)),p.stderr.setEncoding("utf8").on("data",e=>a.push(e))
89
89
  const m=e=>{d||(d=!0,f.clear(),o(e))}
90
- p.on("error",e=>m({exit:-1,stdout:a.text(),stderr:i.text(),timedOut:!1,..."ENOENT"===e.code?{spawnError:"docker CLI not found on PATH"}:{spawnError:e.message}})),p.on("close",e=>m({exit:u?-1:e??-1,stdout:a.text(),stderr:i.text(),timedOut:u}))})},exports.docker=o,exports.ensureImage=async function(e){const t=(0,i.localRecipeFor)(e)
91
- if(t)return(0,i.ensureLocalImage)(t)
90
+ p.on("error",e=>m({exit:-1,stdout:i.text(),stderr:a.text(),timedOut:!1,..."ENOENT"===e.code?{spawnError:"docker CLI not found on PATH"}:{spawnError:e.message}})),p.on("close",e=>m({exit:u?-1:e??-1,stdout:i.text(),stderr:a.text(),timedOut:u}))})},exports.docker=o,exports.ensureImage=async function(e){const t=(0,a.localRecipeFor)(e)
91
+ if(t)return(0,a.ensureLocalImage)(t)
92
92
  const r=await o(["image","inspect",e],exports.DOCKER_OP_TIMEOUT_MS)
93
93
  if(r.spawnError)return r.spawnError
94
94
  if(0===r.exit)return
95
95
  const n=await o(["pull",e],exports.PULL_TIMEOUT_MS)
96
96
  return 0!==n.exit?`docker pull ${e} failed: ${(n.stderr||String(n.exit)).trim()}`:void 0}
97
- const s=t(31421),a=t(16698),i=t(83129),c=t(88196),l=t(4334),u=new a.AsyncLocalStorage
97
+ const s=t(31421),i=t(16698),a=t(83129),c=t(88196),l=t(4334),u=new i.AsyncLocalStorage
98
98
  exports.DOCKER_OP_TIMEOUT_MS=6e4,exports.PULL_TIMEOUT_MS=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)
99
99
  if(t)return t.work
100
100
  const r=(async()=>{const t=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
101
101
  if(t.spawnError)return t.spawnError
102
102
  if(0===t.exit&&t.stdout.trim()===e.recipeHash)return
103
- const r=i.mkdtempSync(l.join(c.tmpdir(),"alchemylab-image-"))
104
- try{i.writeFileSync(l.join(r,"Dockerfile"),e.dockerfile)
103
+ const r=a.mkdtempSync(l.join(c.tmpdir(),"alchemylab-image-"))
104
+ try{a.writeFileSync(l.join(r,"Dockerfile"),e.dockerfile)
105
105
  const t=await(0,u.docker)(["build","--label",`${p}=${e.recipeHash}`,"-t",e.image,r],exports.BUILD_TIMEOUT_MS)
106
106
  if(0!==t.exit){const r=(t.stderr||t.stdout||"").trim().split("\n").slice(-12).join("\n")
107
- return`building ${e.image} failed${t.timedOut?" (timed out)":""}: ${r}`}return}finally{i.rmSync(r,{recursive:!0,force:!0})}})()
107
+ return`building ${e.image} failed${t.timedOut?" (timed out)":""}: ${r}`}return}finally{a.rmSync(r,{recursive:!0,force:!0})}})()
108
108
  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)
109
109
  var o=Object.getOwnPropertyDescriptor(t,r)
110
- 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=[]
110
+ 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=[]
111
111
  for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
112
112
  return t},n(e)},function(e){if(e&&e.__esModule)return e
113
113
  var t={}
114
- if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
114
+ if(null!=e)for(var r=n(e),i=0;i<r.length;i++)"default"!==r[i]&&o(t,e,r[i])
115
115
  return s(t,e),t})
116
116
  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)
117
117
  if(t)return{state:"building",since:t.since}
@@ -121,7 +121,7 @@ if(0===r.exit&&r.stdout.trim()===e.recipeHash)return{state:"ready"}
121
121
  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"}
122
122
  const n=h.get(e.image)
123
123
  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()}}
124
- const i=a(t(73024)),c=a(t(48161)),l=a(t(76760)),u=t(81618),d=t(44853),p="dev.alchemylab.recipe"
124
+ const a=i(t(73024)),c=i(t(48161)),l=i(t(76760)),u=t(81618),d=t(44853),p="dev.alchemylab.recipe"
125
125
  exports.BUILD_TIMEOUT_MS=15e5
126
126
  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)
127
127
  if(0===t.exit){const e=/^oom_kill (\d+)/m.exec(t.stdout)
@@ -147,33 +147,33 @@ return["FROM python:3.12-slim","ENV DEBIAN_FRONTEND=noninteractive PIP_NO_CACHE_
147
147
  return w[t].includes(r)}function n(e,t){const r=e=>`'${e.replace(/'/g,"'\\''")}'`,n=`/work/in/${e}`,o=e.replace(/\.[^.]+$/,"")
148
148
  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`}async function o(e,t,r,o){const s=await u.promises.mkdtemp(p.join(d.tmpdir(),"alchemylab-render-"))
149
149
  try{await u.promises.mkdir(p.join(s,"in")),await u.promises.mkdir(p.join(s,"out")),await u.promises.chmod(s,493),await u.promises.chmod(p.join(s,"in"),493),await u.promises.chmod(p.join(s,"out"),511),await u.promises.writeFile(p.join(s,"in",e),t.bytes,{mode:420})
150
- const a=new f.ContainerRunner({image:h.OFFICE_BOX_IMAGE,stepTimeoutMs:18e4,resources:{memory:"3g",shmSizeMb:256}}),i=await a.run({worktreePath:s,image:h.OFFICE_BOX_IMAGE,env:{HOME:"/scratch"},steps:[{run:n(e,t.to)}]})
151
- if(!i.ok){const e=i.steps[0]
152
- return{ok:!1,error:(i.error??`${(e?.stderr||e?.stdout||"").trim().split("\n").slice(-4).join(" ")}`)||"rendering failed",unavailable:!!i.error&&/docker|daemon|not found on PATH|Cannot connect/i.test(i.error)}}const c=(await u.promises.readdir(p.join(s,"out"))).find(e=>e.toLowerCase().endsWith(`.${t.to}`))
150
+ const i=new f.ContainerRunner({image:h.OFFICE_BOX_IMAGE,stepTimeoutMs:18e4,resources:{memory:"3g",shmSizeMb:256}}),a=await i.run({worktreePath:s,image:h.OFFICE_BOX_IMAGE,env:{HOME:"/scratch"},steps:[{run:n(e,t.to)}]})
151
+ if(!a.ok){const e=a.steps[0]
152
+ return{ok:!1,error:(a.error??`${(e?.stderr||e?.stdout||"").trim().split("\n").slice(-4).join(" ")}`)||"rendering failed",unavailable:!!a.error&&/docker|daemon|not found on PATH|Cannot connect/i.test(a.error)}}const c=(await u.promises.readdir(p.join(s,"out"))).find(e=>e.toLowerCase().endsWith(`.${t.to}`))
153
153
  if(!c)return{ok:!1,error:`no ${t.to.toUpperCase()} was produced`}
154
154
  const l=await u.promises.readFile(p.join(s,"out",c))
155
- return await u.promises.mkdir(o,{recursive:!0}),await u.promises.writeFile(r,l),{ok:!0,bytes:l,cached:!1}}finally{await u.promises.rm(s,{recursive:!0,force:!0})}}var s,a=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
155
+ return await u.promises.mkdir(o,{recursive:!0}),await u.promises.writeFile(r,l),{ok:!0,bytes:l,cached:!1}}finally{await u.promises.rm(s,{recursive:!0,force:!0})}}var s,i=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
156
156
  var o=Object.getOwnPropertyDescriptor(t,r)
157
- o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),c=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[]
157
+ 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}),c=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[]
158
158
  for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
159
159
  return t},s(e)},function(e){if(e&&e.__esModule)return e
160
160
  var t={}
161
- if(null!=e)for(var r=s(e),n=0;n<r.length;n++)"default"!==r[n]&&a(t,e,r[n])
162
- return i(t,e),t})
161
+ if(null!=e)for(var r=s(e),n=0;n<r.length;n++)"default"!==r[n]&&i(t,e,r[n])
162
+ return a(t,e),t})
163
163
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.RENDER_MIME=exports.MAX_RENDER_INPUT_BYTES=void 0,exports.canRender=r,exports.rendersInFlight=function(){return g.size},exports.renderDocument=async function(e,t){const n=(s=e.filename,p.basename(s).replace(/[^A-Za-z0-9._-]+/g,"_").replace(/^\.+/,"")||"document")
164
164
  var s
165
165
  if(!r(n,e.to))return{ok:!1,error:`${p.extname(n)||"this file"} cannot be turned into ${e.to.toUpperCase()}`}
166
166
  if(e.bytes.length>exports.MAX_RENDER_INPUT_BYTES)return{ok:!1,error:`file is over ${exports.MAX_RENDER_INPUT_BYTES/1048576} MB`}
167
- const a=(0,l.createHash)("sha256").update(h.OFFICE_BOX_RECIPE_HASH).update("\0").update(e.to).update("\0").update(p.extname(n).toLowerCase()).update("\0").update(e.bytes).digest("hex"),i=p.join(t.cacheDir,`${a}.${e.to}`)
168
- try{return{ok:!0,bytes:await u.promises.readFile(i),cached:!0}}catch{}const c=t.image??"wait"
167
+ const i=(0,l.createHash)("sha256").update(h.OFFICE_BOX_RECIPE_HASH).update("\0").update(e.to).update("\0").update(p.extname(n).toLowerCase()).update("\0").update(e.bytes).digest("hex"),a=p.join(t.cacheDir,`${i}.${e.to}`)
168
+ try{return{ok:!0,bytes:await u.promises.readFile(a),cached:!0}}catch{}const c=t.image??"wait"
169
169
  if("wait"!==c){const e=(0,m.localRecipeFor)(h.OFFICE_BOX_IMAGE),t=await(0,m.localImageState)(e)
170
170
  if("no-docker"===t.state)return{ok:!1,error:t.error,unavailable:!0}
171
171
  if("building"===t.state)return{ok:!1,error:b,preparing:!0,since:t.since}
172
172
  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(" ")}`}
173
173
  if("ready"!==t.state){if("present-only"===c)return{ok:!1,error:"the office renderer is not built on this machine yet",unavailable:!0}
174
174
  const{since:t}=(0,m.startLocalImageBuild)(e)
175
- return{ok:!1,error:b,preparing:!0,since:t}}}let d=g.get(a)
176
- if(d||(d={since:Date.now(),done:(t.run??o)(n,e,i,t.cacheDir).catch(e=>({ok:!1,error:e instanceof Error?e.message:String(e)})).finally(()=>{g.delete(a)})},g.set(a,d)),!t.answerWithin||t.answerWithin<=0)return d.done
175
+ return{ok:!1,error:b,preparing:!0,since:t}}}let d=g.get(i)
176
+ if(d||(d={since:Date.now(),done:(t.run??o)(n,e,a,t.cacheDir).catch(e=>({ok:!1,error:e instanceof Error?e.message:String(e)})).finally(()=>{g.delete(i)})},g.set(i,d)),!t.answerWithin||t.answerWithin<=0)return d.done
177
177
  const{since:f,done:w}=d
178
178
  let x
179
179
  const _=new Promise(e=>{x=setTimeout(()=>e({ok:!1,rendering:!0,since:f,error:"the exact copy is still rendering"}),t.answerWithin)})
@@ -184,31 +184,31 @@ const w={pdf:["docx","doc","odt","rtf","xlsx","xlsm","xls","ods","csv","pptx","p
184
184
  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"}
185
185
  const b="the office renderer is being built on this machine (first use only, usually a few minutes)",g=new Map},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")
186
186
  if(!/^\s*\{\s*\\rtf/i.test(o))throw new Error("not an RTF file (it does not start with {\\rtf)")
187
- const s=[],a=[{skip:!1,skipChars:0}],i=()=>a[a.length-1],c=e=>{i().skip||s.push(e)}
187
+ const s=[],i=[{skip:!1,skipChars:0}],a=()=>i[i.length-1],c=e=>{a().skip||s.push(e)}
188
188
  for(let e=0;e<o.length;e++){const s=o[e]
189
- if("{"===s){a.push({...i()})
190
- continue}if("}"===s){a.length>1&&a.pop()
189
+ if("{"===s){i.push({...a()})
190
+ continue}if("}"===s){i.length>1&&i.pop()
191
191
  continue}if("\r"===s||"\n"===s)continue
192
- if("\\"!==s){if(i().skipChars>0){i().skipChars--
192
+ if("\\"!==s){if(a().skipChars>0){a().skipChars--
193
193
  continue}c(s)
194
194
  continue}const l=/^\\([a-zA-Z]+)(-?\d+)? ?/.exec(o.slice(e))
195
195
  if(!l){const s=o[e+1]
196
196
  if("*"===s){const t=/^\\\*\\([a-zA-Z]+)/.exec(o.slice(e))
197
- t&&!r.has(t[1])||(i().skip=!0),e+=1
197
+ t&&!r.has(t[1])||(a().skip=!0),e+=1
198
198
  continue}if("'"===s){const r=o.slice(e+2,e+4)
199
- if(e+=3,i().skipChars>0){i().skipChars--
199
+ if(e+=3,a().skipChars>0){a().skipChars--
200
200
  continue}c(t(parseInt(r,16)||0))
201
201
  continue}if(void 0!==s&&void 0!==n[s]){c(n[s]),e+=1
202
202
  continue}e+=1
203
203
  continue}const[u,d,p]=l
204
204
  e+=u.length-1
205
205
  const f=void 0===p?void 0:Number(p)
206
- if(r.has(d))i().skip=!0
207
- else{if("u"===d){const e=i().skipChars>0
208
- i().skipChars=Math.max(0,a[a.length-1].ucSkip??1),e||void 0===f||c(String.fromCodePoint(f<0?f+65536:f))
209
- 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*$/,"")
206
+ if(r.has(d))a().skip=!0
207
+ else{if("u"===d){const e=a().skipChars>0
208
+ a().skipChars=Math.max(0,i[i.length-1].ucSkip??1),e||void 0===f||c(String.fromCodePoint(f<0?f+65536:f))
209
+ continue}"uc"!==d?"cell"!==d&&"nestcell"!==d?"row"!==d&&"nestrow"!==d?void 0===n[d]||c(n[d]):c("\n"):c(" | "):a().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*$/,"")
210
210
  return e.includes(" | ")?`| ${t} |`:t}).join("\n").trim()}
211
- 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)
211
+ 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 t.e(833).then(()=>t.t(58833,23))).default.loadAsync(e)}async function n(e,t){const r=e.file(t)
212
212
  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()
213
213
  if("amp"===r)return"&"
214
214
  if("lt"===r)return"<"
@@ -217,10 +217,10 @@ if("quot"===r)return'"'
217
217
  if("apos"===r)return"'"
218
218
  const n=r.startsWith("#x")?parseInt(r.slice(2),16):parseInt(r.slice(1),10)
219
219
  return Number.isFinite(n)?String.fromCodePoint(n):e})}function s(e,t){const r=new RegExp(`(?:^|\\s)${t.replace(":","\\:")}="([^"]*)"`).exec(e)
220
- return r?o(r[1]):void 0}function a(e,t){const r=new Map
220
+ return r?o(r[1]):void 0}function i(e,t){const r=new Map
221
221
  if(!e)return r
222
222
  for(const n of e.matchAll(/<Relationship\b([^>]*)\/?>/g)){const e=s(n[1],"Id"),o=s(n[1],"Target")
223
- e&&o&&r.set(e,o.startsWith("/")?o.slice(1):i(`${t}/${o}`))}return r}function i(e){const t=[]
223
+ e&&o&&r.set(e,o.startsWith("/")?o.slice(1):a(`${t}/${o}`))}return r}function a(e){const t=[]
224
224
  for(const r of e.split("/"))r&&"."!==r&&(".."===r?t.pop():t.push(r))
225
225
  return t.join("/")}function c(e){const t=e.slice(0,e.lastIndexOf("/"))
226
226
  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)
@@ -229,27 +229,27 @@ for(const[o,s]of t){if(!/charts\/chart[^/]*\.xml$/.test(s))continue
229
229
  const t=await n(e,s)
230
230
  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))]
231
231
  "bar"===r[0]&&/<barDir val="col"/.test(t)&&(r[0]="column")
232
- 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""
232
+ const n=t.split("<plotArea")[0],s=/<title>([\s\S]*?)<\/title>/.exec(n)?.[1],i=s?[...s.matchAll(/<t>([\s\S]*?)<\/t>/g)].map(e=>o(e[1])).join("").trim():"",a=[...t.matchAll(/<ser>([\s\S]*?)<\/ser>/g)].map(e=>{const t=e[1],r=/<tx>([\s\S]*?)<\/tx>/.exec(t)?.[1]??"",n=o(/<v>([\s\S]*?)<\/v>/.exec(r)?.[1]??/<f>([\s\S]*?)<\/f>/.exec(r)?.[1]??"").trim(),s=e=>{if(!e)return""
233
233
  const t=/<f>([\s\S]*?)<\/f>/.exec(e)?.[1],r=[...e.matchAll(/<v>([\s\S]*?)<\/v>/g)].map(e=>o(e[1]))
234
- 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])
235
- return`${n||"series"}${a?`: ${a}`:""}${i?` by ${i}`:""}`})
236
- 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=[]
237
- let a=null,i="",c=!1,u=!1,d=null,p=0
234
+ return t&&/!/.test(t)?o(t):r.length?`${r.slice(0,8).join(", ")}${r.length>8?`, ... (${r.length})`:""}`:""},i=s(/<(?:val|yVal)>([\s\S]*?)<\/(?:val|yVal)>/.exec(t)?.[1]),a=s(/<(?:cat|xVal)>([\s\S]*?)<\/(?:cat|xVal)>/.exec(t)?.[1])
235
+ return`${n||"series"}${i?`: ${i}`:""}${a?` by ${a}`:""}`})
236
+ return`[chart: ${r.join("/")||"chart"}${i?` "${i}"`:""}${a.length?`; ${a.join("; ")}`:""}]`}function p(e){return e.replace(/<(\/?)[A-Za-z][\w.-]*:/g,"<$1")}function f(e,t=new Map){const r=[],n=[]
237
+ let i=null,a="",c=!1,u=!1,d=null,p=0
238
238
  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
239
239
  for(const m of e.matchAll(f)){const[,e,f,h,w,b]=m
240
240
  if("mc:Fallback"===f){w||(p+=e?-1:1)
241
241
  continue}if(p>0)continue
242
- if(void 0!==b){u&&a&&a.push(o(b))
242
+ if(void 0!==b){u&&i&&i.push(o(b))
243
243
  continue}const g=n[n.length-1]
244
244
  if(e)switch(f){case"w:drawing":{if(!d)break
245
245
  const e=d.chart??l(d.descr,d.name)
246
- d=null,a?a.push(` ${e} `):r.push(e)
246
+ d=null,i?i.push(` ${e} `):r.push(e)
247
247
  break}case"w:t":u=!1
248
248
  break
249
- case"w:p":{const e=(a??[]).join("").trim()
250
- if(a=null,g?.cell){e&&g.cell.push(e)
249
+ case"w:p":{const e=(i??[]).join("").trim()
250
+ if(i=null,g?.cell){e&&g.cell.push(e)
251
251
  break}if(!e){r.length&&""!==r[r.length-1]&&r.push("")
252
- break}const t=/^(?:heading|kop|\xfcberschrift|titre)\s*(\d)/i.exec(i)||(/^title$/i.test(i)?["","1"]:null)
252
+ break}const t=/^(?:heading|kop|\xfcberschrift|titre)\s*(\d)/i.exec(a)||(/^title$/i.test(a)?["","1"]:null)
253
253
  r.push(t?`${"#".repeat(Math.min(6,Number(t[1])))} ${e}`:c?`- ${e}`:e)
254
254
  break}case"w:tc":g?.cell&&g.row&&(g.row.push(g.cell.join(" ")),g.cell=null)
255
255
  break
@@ -266,48 +266,48 @@ break
266
266
  case"c:chart":d&&(d.chart=t.get(s(h,"r:id")??"")??"[chart]")
267
267
  break
268
268
  case"v:imagedata":{const e=l(s(h,"o:title"),void 0)
269
- a?a.push(e):r.push(e)
270
- break}case"w:p":a=[],i="",c=!1
269
+ i?i.push(e):r.push(e)
270
+ break}case"w:p":i=[],a="",c=!1
271
271
  break
272
- case"w:pStyle":i=s(h,"w:val")??""
272
+ case"w:pStyle":a=s(h,"w:val")??""
273
273
  break
274
274
  case"w:numPr":c=!0
275
275
  break
276
276
  case"w:t":w||(u=!0)
277
277
  break
278
- case"w:tab":a?.push("\t")
278
+ case"w:tab":i?.push("\t")
279
279
  break
280
- case"w:br":case"w:cr":a?.push("\n")
280
+ case"w:br":case"w:cr":i?.push("\n")
281
281
  break
282
282
  case"w:tbl":n.push({rows:[],row:null,cell:null})
283
283
  break
284
284
  case"w:tr":g&&(g.row=[])
285
285
  break
286
286
  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)
287
- for(const t of a(await n(e,o.path),o.dir).values()){if(!/drawings\/drawing[^/]*\.xml$/.test(t))continue
287
+ for(const t of i(await n(e,o.path),o.dir).values()){if(!/drawings\/drawing[^/]*\.xml$/.test(t))continue
288
288
  const o=await n(e,t)
289
289
  if(!o)continue
290
- const i=p(o),d=c(t),f=await u(e,a(await n(e,d.path),d.dir))
291
- 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}`:""
292
- if(n){r.push(`${(f.get(n)??"[chart]").replace(/\]$/,`${a}]`)}`)
293
- continue}const i=/<pic>[\s\S]*?<cNvPr\b([^>]*)\/?>/.exec(t)
294
- 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"
290
+ const a=p(o),d=c(t),f=await u(e,i(await n(e,d.path),d.dir))
291
+ for(const e of a.matchAll(/<(?:twoCellAnchor|oneCellAnchor|absoluteAnchor)\b[\s\S]*?<\/(?:twoCellAnchor|oneCellAnchor|absoluteAnchor)>/g)){const t=e[0],n=/<chart\b[^>]*r:id="([^"]+)"/.exec(t)?.[1],o=/<from>[\s\S]*?<col>(\d+)<\/col>[\s\S]*?<row>(\d+)<\/row>/.exec(t),i=o?` at ${w(Number(o[1]))}${Number(o[2])+1}`:""
292
+ if(n){r.push(`${(f.get(n)??"[chart]").replace(/\]$/,`${i}]`)}`)
293
+ continue}const a=/<pic>[\s\S]*?<cNvPr\b([^>]*)\/?>/.exec(t)
294
+ a&&r.push(l(s(a[1],"descr"),s(a[1],"name")).replace(/\]$/,`${i}]`))}}return r}function h(e){const t=/^[A-Z]+/i.exec(e)?.[0].toUpperCase()??"A"
295
295
  let r=0
296
296
  for(const e of t)r=26*r+(e.charCodeAt(0)-64)
297
297
  return r-1}function w(e){let t=""
298
298
  for(let r=e+1;r>0;r=Math.floor((r-1)/26))t=String.fromCharCode(65+(r-1)%26)+t
299
299
  return t}function b(e,t){const r=[]
300
- let n=0,a=!1
301
- for(const i of e.matchAll(/<row\b([^>]*?)(?:\/>|>([\s\S]*?)<\/row>)/g)){if(r.length>=S){a=!0
302
- break}const e=i[2]??"",c=[]
300
+ let n=0,i=!1
301
+ for(const a of e.matchAll(/<row\b([^>]*?)(?:\/>|>([\s\S]*?)<\/row>)/g)){if(r.length>=S){i=!0
302
+ break}const e=a[2]??"",c=[]
303
303
  let l=0
304
304
  for(const r of e.matchAll(/<c\b([^>]*?)(?:\/>|>([\s\S]*?)<\/c>)/g)){const e=s(r[1],"r"),n=e?h(e):l
305
305
  l=n+1
306
- const a=s(r[1],"t"),i=r[2]??"",u=/<f\b[^>]*>([\s\S]*?)<\/f>/.exec(i)?.[1]
306
+ const i=s(r[1],"t"),a=r[2]??"",u=/<f\b[^>]*>([\s\S]*?)<\/f>/.exec(a)?.[1]
307
307
  let d=""
308
- if("inlineStr"===a)d=[...i.matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g)].map(e=>o(e[1])).join("")
309
- else{const e=/<v\b[^>]*>([\s\S]*?)<\/v>/.exec(i)?.[1]
310
- 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)
308
+ if("inlineStr"===i)d=[...a.matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g)].map(e=>o(e[1])).join("")
309
+ else{const e=/<v\b[^>]*>([\s\S]*?)<\/v>/.exec(a)?.[1]
310
+ void 0!==e&&(d="s"===i?t[Number(e)]??"":"b"===i?"1"===e?"TRUE":"FALSE":o(e))}u&&(d=`${d}${""===d?"":" "}(=${o(u)})`),""!==d&&(c[n]=d.replace(/[\t\r\n]+/g," "))}c.length&&(n=Math.max(n,c.length),r.push({n:Number(s(a[1],"r"))||r.length+1,cells:c}))}return{text:g(r,n),truncated:i}}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)
311
311
  for(const e of n.matchAll(/<pic\b[^>]*>[\s\S]*?<\/pic>|<graphicFrame\b[^>]*>[\s\S]*?<\/graphicFrame>/g)){const n=e[0]
312
312
  if(/^<pic\b/.test(n)){const e=/<cNvPr\b([^>]*)\/?>/.exec(n)?.[1]??""
313
313
  r.push(l(s(e,"descr"),s(e,"name")))
@@ -316,19 +316,19 @@ o&&r.push(t.get(o)??"[chart]")}return r}function _(e){const t=[]
316
316
  for(const r of e.matchAll(/<a:p\b[^>]*>([\s\S]*?)<\/a:p>/g)){const e=[]
317
317
  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")
318
318
  const n=e.join("").trim()
319
- 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")
320
- if(!i||a&&a!==t)throw new Error(`not an OpenDocument ${o} (${i?`its mimetype is ${a}`:"content.xml is missing"})`)
319
+ n&&t.push(n)}return t}async function k(e,t,o){const s=await r(e),i=(await n(s,"mimetype"))?.trim(),a=await n(s,"content.xml")
320
+ if(!a||i&&i!==t)throw new Error(`not an OpenDocument ${o} (${a?`its mimetype is ${i}`:"content.xml is missing"})`)
321
321
  const c=new Map
322
322
  for(const e of Object.keys(s.files)){const t=/^(.+)\/content\.xml$/.exec(e)?.[1]
323
323
  if(!t)continue
324
324
  const r=await n(s,e)
325
- r&&/<chart:chart\b/.test(r)&&c.set(t,O(r))}return{xml:i.split(/<office:body\b/)[1]??i,objects:c}}function y(e,t){return e.object?t.get((e.href??"").replace(/^\.\//,""))??`[embedded object: ${(e.desc||e.title||e.name||"unnamed").trim()}]`:e.image?l(e.desc||e.title,e.name):null}function O(e){const t=/chart:class="chart:(\w+)"/.exec(e)?.[1]??"chart",r=[...(/<chart:title\b[^>]*>([\s\S]*?)<\/chart:title>/.exec(e)?.[1]??"").matchAll(/<text:p\b[^>]*>([\s\S]*?)<\/text:p>/g)].map(e=>o(e[1].replace(/<[^>]+>/g,""))).join(" ").trim(),n=[],a=/<table:table\b[^>]*table:name="local-table"[^>]*>([\s\S]*?)<\/table:table>/.exec(e)?.[1]
326
- if(a)for(const e of a.matchAll(/<table:table-row\b[^>]*>([\s\S]*?)<\/table:table-row>/g)){const t=[]
325
+ r&&/<chart:chart\b/.test(r)&&c.set(t,O(r))}return{xml:a.split(/<office:body\b/)[1]??a,objects:c}}function y(e,t){return e.object?t.get((e.href??"").replace(/^\.\//,""))??`[embedded object: ${(e.desc||e.title||e.name||"unnamed").trim()}]`:e.image?l(e.desc||e.title,e.name):null}function O(e){const t=/chart:class="chart:(\w+)"/.exec(e)?.[1]??"chart",r=[...(/<chart:title\b[^>]*>([\s\S]*?)<\/chart:title>/.exec(e)?.[1]??"").matchAll(/<text:p\b[^>]*>([\s\S]*?)<\/text:p>/g)].map(e=>o(e[1].replace(/<[^>]+>/g,""))).join(" ").trim(),n=[],i=/<table:table\b[^>]*table:name="local-table"[^>]*>([\s\S]*?)<\/table:table>/.exec(e)?.[1]
326
+ if(i)for(const e of i.matchAll(/<table:table-row\b[^>]*>([\s\S]*?)<\/table:table-row>/g)){const t=[]
327
327
  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)
328
- for(let r=0;r<n;r++)t.push(e)}n.push(t)}const i=e=>{const t=/^\$?([A-Z]+)\$?(\d+)$/.exec(e)
328
+ for(let r=0;r<n;r++)t.push(e)}n.push(t)}const a=e=>{const t=/^\$?([A-Z]+)\$?(\d+)$/.exec(e)
329
329
  return t?{col:h(t[1]),row:Number(t[2])-1}:null},c=e=>{if(!e)return""
330
330
  const t=e.split(":").map(e=>({table:e.slice(0,e.lastIndexOf(".")).replace(/^'(.*)'$/,"$1"),ref:e.slice(e.lastIndexOf(".")+1)}))
331
- 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
331
+ if("local-table"===t[0].table||""===t[0].table&&n.length){const e=a(t[0].ref),r=a(t[t.length-1].ref)??e
332
332
  if(!e||!r)return""
333
333
  const o=[]
334
334
  for(let t=e.row;t<=r.row;t++)for(let s=e.col;s<=r.col;s++)o.push(n[t]?.[s]??"")
@@ -338,11 +338,11 @@ return`${c(s(e[1],"chart:label-cell-address"))||"series"}${t?`: ${t}`:""}${l?` b
338
338
  return`[chart: ${R[t]??t}${r?` "${r}"`:""}${u.length?`; ${u.join("; ")}`:""}]`}function E(e,t,r){switch(e){case"text:tab":return r.push("\t"),!0
339
339
  case"text:line-break":return r.push("\n"),!0
340
340
  case"text:s":return r.push(" ".repeat(Math.min(100,Number(s(t,"text:c")??1)||1))),!0
341
- default:return!1}}function v(e,t=new Map){const r=[],n=[],a=new I
342
- let i=0,c=0,l=null,u=null
341
+ default:return!1}}function v(e,t=new Map){const r=[],n=[],i=new I
342
+ let a=0,c=0,l=null,u=null
343
343
  for(const d of e.matchAll(T)){const[,e,p,f,m,h]=d
344
344
  if(void 0!==h){if(c)continue
345
- u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))
345
+ u&&l?l[u]=(l[u]??"")+o(h):i.push(o(h))
346
346
  continue}if(A.has(p)){m||(c+=e?-1:1)
347
347
  continue}if(c)continue
348
348
  const w=n[n.length-1]
@@ -350,13 +350,13 @@ if(e)switch(p){case"svg:title":case"svg:desc":u=null
350
350
  break
351
351
  case"draw:frame":{const e=l?y(l,t):null
352
352
  if(l=null,!e)break
353
- a.current?a.pushSpaced(e):w?.cell?w.cell.push(e):r.push(e)
354
- break}case"text:p":case"text:h":{const e=a.close()
353
+ i.current?i.pushSpaced(e):w?.cell?w.cell.push(e):r.push(e)
354
+ break}case"text:p":case"text:h":{const e=i.close()
355
355
  if(!e)break
356
356
  if(w?.cell){e.plain&&w.cell.push(e.plain)
357
357
  break}if(!e.line){r.length&&""!==r[r.length-1]&&r.push("")
358
358
  break}r.push(e.line)
359
- break}case"text:list-item":i=Math.max(0,i-1)
359
+ break}case"text:list-item":a=Math.max(0,a-1)
360
360
  break
361
361
  case"table:table-cell":case"table:covered-table-cell":w?.cell&&w.row&&(w.row.push(w.cell.join(" ")),w.cell=null)
362
362
  break
@@ -366,10 +366,10 @@ case"table:table":{const e=n.pop()
366
366
  if(!e)break
367
367
  const t=e.rows.map(e=>`| ${e.map(e=>e.replace(/\|/g,"\\|")).join(" | ")} |`),o=n[n.length-1]
368
368
  o?.cell?o.cell.push(t.join(" ")):r.push(...t,"")
369
- break}}else{if(E(p,f,a))continue
370
- 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)
369
+ break}}else{if(E(p,f,i))continue
370
+ switch(p){case"text:p":case"text:h":m?!w?.cell&&r.length&&""!==r[r.length-1]&&r.push(""):i.open("text:h"===p?Number(s(f,"text:outline-level")??1)||1:0,a>0)
371
371
  break
372
- case"text:list-item":m||i++
372
+ case"text:list-item":m||a++
373
373
  break
374
374
  case"table:table":m||n.push({rows:[],row:null,cell:null})
375
375
  break
@@ -384,75 +384,75 @@ break
384
384
  case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
385
385
  break
386
386
  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,$.formatFor)(e)
387
- 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`)
387
+ return t?.text?t.kind:void 0},exports.extractDocumentText=async function e(a,c,l={}){if(a.byteLength>exports.bi)throw new Error(`file is ${(a.byteLength/1048576).toFixed(1)} MB; text extraction stops at ${exports.bi/1048576} MB`)
388
388
  const d=(0,$.formatOfKind)(c).textVia
389
389
  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`)
390
- const t=await e(await l.convert(i,c,d),d)
390
+ const t=await e(await l.convert(a,c,d),d)
391
391
  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})
392
- 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())
393
- 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)
392
+ try{const{totalPages:e,text:t}=await o(s,{mergePages:!1}),r=Array.isArray(t)?t:[t],n=r.map((t,r)=>`--- page ${r+1} of ${e} ---\n${String(t).trim()}`).join("\n\n"),i=r.every(e=>!String(e).trim())
393
+ return{kind:"pdf",text:n,units:e,note:i?"No text layer (probably a scan). Use view_asset with this path to look at the pages.":"Text only. For tables, figures or layout, use view_asset with this path and the page numbers."}}finally{await(s.loadingTask?.destroy?.().catch?.(()=>{}))}}(a)
394
394
  case"docx":return async function(e){const t=await r(e),o=await n(t,"word/document.xml")
395
395
  if(!o)throw new Error("not a Word document (word/document.xml is missing)")
396
- 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)
397
- case"xlsx":return async function(e){const t=await r(e),i=await n(t,"xl/workbook.xml")
398
- if(!i)throw new Error("not an Excel workbook (xl/workbook.xml is missing)")
399
- const c=a(await n(t,"xl/_rels/workbook.xml.rels"),"xl"),l=function(e){if(!e)return[]
396
+ 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."}}(a)
397
+ case"xlsx":return async function(e){const t=await r(e),a=await n(t,"xl/workbook.xml")
398
+ if(!a)throw new Error("not an Excel workbook (xl/workbook.xml is missing)")
399
+ const c=i(await n(t,"xl/_rels/workbook.xml.rels"),"xl"),l=function(e){if(!e)return[]
400
400
  const t=[]
401
401
  for(const r of e.matchAll(/<si\b[^>]*>([\s\S]*?)<\/si>/g)){const e=[]
402
402
  for(const t of r[1].matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g))e.push(o(t[1]))
403
403
  t.push(e.join(""))}return t}(await n(t,"xl/sharedStrings.xml")),u=[]
404
404
  let d=!1,p=0
405
- 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
406
- if(p++,!i){u.push(`## Sheet: ${r}\n(empty)`)
407
- continue}const{text:f,truncated:h}=b(i,l)
405
+ for(const e of a.matchAll(/<sheet\b([^>]*)\/?>/g)){const r=s(e[1],"name")??`Sheet ${p+1}`,o=s(e[1],"r:id"),i=o?c.get(o):void 0,a=i?await n(t,i):void 0
406
+ if(p++,!a){u.push(`## Sheet: ${r}\n(empty)`)
407
+ continue}const{text:f,truncated:h}=b(a,l)
408
408
  d=d||h
409
- const w=await m(t,a)
410
- 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)
409
+ const w=await m(t,i)
410
+ 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.":"")}}(a)
411
411
  case"pptx":return async function(e){const t=await r(e),o=await n(t,"ppt/presentation.xml")
412
412
  if(!o)throw new Error("not a PowerPoint deck (ppt/presentation.xml is missing)")
413
- const i=a(await n(t,"ppt/_rels/presentation.xml.rels"),"ppt")
413
+ const a=i(await n(t,"ppt/_rels/presentation.xml.rels"),"ppt")
414
414
  let c=[...o.matchAll(/<p:sldId\b([^>]*)\/?>/g)].map(e=>{const t=s(e[1],"r:id")
415
- return t?i.get(t):void 0}).filter(e=>!!e)
415
+ return t?a.get(t):void 0}).filter(e=>!!e)
416
416
  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])))
417
417
  const l=[]
418
- 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)
418
+ for(let e=0;e<c.length;e++){const r=c[e],o=await n(t,r),s=o?_(o):[],a=r.slice(0,r.lastIndexOf("/")),d=r.slice(r.lastIndexOf("/")+1),p=i(await n(t,`${a}/_rels/${d}.rels`),a)
419
419
  o&&s.push(...x(o,await u(t,p)))
420
420
  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)):[]
421
421
  let w=`## Slide ${e+1}\n${s.join("\n")||"(no text)"}`
422
- 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)
422
+ 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."}}(a)
423
423
  case"odt":return async function(e){const{xml:t,objects:r}=await k(e,"application/vnd.oasis.opendocument.text","text document")
424
- return{kind:"odt",text:v(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)
425
- 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=[]
426
- let n=!1,a=null,i=null,c=null,l=null,u=null,d=0,p=!1
424
+ return{kind:"odt",text:v(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."}}(a)
425
+ case"ods":return async function(e){const{xml:t,objects:r}=await k(e,"application/vnd.oasis.opendocument.spreadsheet","spreadsheet"),{sheets:n,truncated:i}=function(e,t=new Map){const r=[]
426
+ let n=!1,i=null,a=null,c=null,l=null,u=null,d=0,p=!1
427
427
  for(const f of e.matchAll(T)){const[,e,m,h,w,b]=f
428
428
  if(void 0!==b){if(d)continue
429
429
  u&&l?l[u]=(l[u]??"")+o(b):c&&p&&c.parts.push(o(b))
430
430
  continue}if(A.has(m)){w||(d+=e?-1:1)
431
431
  continue}if(d)continue
432
- const x=()=>{if(!c||!i)return
432
+ const x=()=>{if(!c||!a)return
433
433
  let e=c.parts.join("").trim()||c.value||""
434
434
  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,"")
435
- 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," ")
435
+ return r?`${r}!${n}`:n}).join(":"))})`),e)for(let t=0;t<Math.min(c.repeat,256);t++)a.cells[a.col+t]=e.replace(/[\t\r\n]+/g," ")
436
436
  var t
437
- i.col+=c.repeat,c=null}
437
+ a.col+=c.repeat,c=null}
438
438
  if(e)switch(m){case"svg:title":case"svg:desc":u=null
439
439
  break
440
440
  case"draw:frame":{const e=l?y(l,t):null
441
- l=null,e&&a&&a.figures.push(e)
441
+ l=null,e&&i&&i.figures.push(e)
442
442
  break}case"text:p":p=!1
443
443
  break
444
444
  case"table:table-cell":case"table:covered-table-cell":x()
445
445
  break
446
- case"table:table-row":if(!i||!a)break
447
- 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
448
- 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
446
+ case"table:table-row":if(!a||!i)break
447
+ if(a.cells.some(e=>void 0!==e)){for(let e=0;e<Math.min(a.repeat,50);e++){if(i.rows.length>=S){n=!0
448
+ break}i.rows.push({n:i.rowIndex+e+1,cells:a.cells})}i.width=Math.max(i.width,a.cells.length)}i.rowIndex+=a.repeat,a=null
449
449
  break
450
- case"table:table":if(!a)break
451
- 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})
450
+ case"table:table":if(!i)break
451
+ r.push({name:i.name,text:g(i.rows,i.width),figures:i.figures}),i=null}else switch(m){case"table:table":w||(i={name:s(h,"table:name")??`Sheet ${r.length+1}`,rows:[],width:0,figures:[],rowIndex:0})
452
452
  break
453
453
  case"table:table-row":{const e=Math.max(1,Number(s(h,"table:number-rows-repeated")??1)||1)
454
- w?a&&(a.rowIndex+=e):i={cells:[],col:0,repeat:e}
455
- break}case"table:table-cell":case"table:covered-table-cell":if(!i)break
454
+ w?i&&(i.rowIndex+=e):a={cells:[],col:0,repeat:e}
455
+ break}case"table:table-cell":case"table:covered-table-cell":if(!a)break
456
456
  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()
457
457
  break
458
458
  case"text:p":c&&!w&&(c.parts.length&&c.parts.push(" "),p=!0)
@@ -466,41 +466,41 @@ break
466
466
  case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(h,"xlink:href"))
467
467
  break
468
468
  case"svg:title":case"svg:desc":!w&&l&&(u="svg:title"===m?"title":"desc")}}return{sheets:r,truncated:n}}(t,r)
469
- 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)
469
+ 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."+(i?" Sheets over 5000 rows are cut off.":"")}}(a)
470
470
  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=[]
471
471
  let n=null
472
- const a=new I
473
- let i=0,c=0,l=null,u=null
472
+ const i=new I
473
+ let a=0,c=0,l=null,u=null
474
474
  for(const d of e.matchAll(T)){const[,e,p,f,m,h]=d
475
475
  if(void 0===h){if(A.has(p))m||(c+=e?-1:1)
476
476
  else if(!c)if(e)switch(p){case"svg:title":case"svg:desc":u=null
477
477
  break
478
- case"text:p":case"text:h":{const e=a.close()
479
- !e?.plain||!n||i&&/^<number>$/.test(e.plain)||(i?n.notes:n.lines).push(e.plain)
478
+ case"text:p":case"text:h":{const e=i.close()
479
+ !e?.plain||!n||a&&/^<number>$/.test(e.plain)||(a?n.notes:n.lines).push(e.plain)
480
480
  break}case"draw:frame":{const e=l?y(l,t):null
481
481
  l=null,e&&n&&n.lines.push(e)
482
- break}case"presentation:notes":i=Math.max(0,i-1)
482
+ break}case"presentation:notes":a=Math.max(0,a-1)
483
483
  break
484
484
  case"draw:page":{if(!n)break
485
485
  let e=`## Slide ${r.length+1}\n${n.lines.join("\n")||"(no text)"}`
486
486
  n.notes.length&&(e+=`\n\nNotes:\n${n.notes.join("\n")}`),r.push(e),n=null
487
- break}}else{if(E(p,f,a))continue
487
+ break}}else{if(E(p,f,i))continue
488
488
  switch(p){case"draw:page":m||(n={lines:[],notes:[]})
489
489
  break
490
- case"presentation:notes":m||i++
490
+ case"presentation:notes":m||a++
491
491
  break
492
- case"text:p":case"text:h":m||a.open(0,!1)
492
+ case"text:p":case"text:h":m||i.open(0,!1)
493
493
  break
494
- case"draw:frame":m||i||(l={name:s(f,"draw:name")})
494
+ case"draw:frame":m||a||(l={name:s(f,"draw:name")})
495
495
  break
496
496
  case"draw:image":l&&(l.image=!0)
497
497
  break
498
498
  case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
499
499
  break
500
500
  case"svg:title":case"svg:desc":!m&&l&&(u="svg:title"===p?"title":"desc")}}}else{if(c)continue
501
- u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))}}return r}(t,r)
502
- 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)
503
- 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."}
501
+ u&&l?l[u]=(l[u]??"")+o(h):i.push(o(h))}}return r}(t,r)
502
+ 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."}}(a)
503
+ case"rtf":return{kind:"rtf",text:(0,M.rtfToText)(a),note:"Text, paragraphs and table rows; styling, pictures and layout are dropped. To see the pages, view_asset this path."}
504
504
  default:throw new Error(`no text form for .${c}`)}}
505
505
  const $=t(12661),M=t(43701)
506
506
  exports.bi=52428800
@@ -515,18 +515,18 @@ return this.current?(t&&this.pushSpaced(t),null):{plain:t,line:t?e.heading?`${"#
515
515
  if(!n.ok)throw new Error(n.error)
516
516
  return n.bytes}async function r(e){const r=(0,u.documentKindFor)(e)
517
517
  if(!r)return`(AlchemyLab: no text form for ${e.split(".").pop()} files)\n`
518
- try{const n=await(0,u.extractDocumentText)(new Uint8Array(await(0,i.readFile)(e)),r,{convert:t})
518
+ try{const n=await(0,u.extractDocumentText)(new Uint8Array(await(0,a.readFile)(e)),r,{convert:t})
519
519
  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)
520
520
  var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
521
521
  var o=Object.getOwnPropertyDescriptor(t,r)
522
- 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=[]
522
+ 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=[]
523
523
  for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
524
524
  return t},n(e)},function(e){if(e&&e.__esModule)return e
525
525
  var t={}
526
- if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
526
+ if(null!=e)for(var r=n(e),i=0;i<r.length;i++)"default"!==r[i]&&o(t,e,r[i])
527
527
  return s(t,e),t})
528
528
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.textconv=r
529
- const i=e(91943),c=a(e(70857)),l=a(e(16928)),u=e(36018),d=e(3517)
529
+ const a=e(91943),c=i(e(70857)),l=i(e(16928)),u=e(36018),d=e(3517)
530
530
  if(e.c[e.s]===module){const e=process.argv[2]
531
531
  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"))}},4334(e,exports,t){function r(e=Date.now()){const t=Number(process.hrtime.bigint()/1000000n)
532
532
  if(!w)return m=e,h=t,function(e){if(x)try{const t=JSON.parse(d.readFileSync(x,"utf8"))
@@ -543,21 +543,21 @@ for(const r of b){const o=Math.max(r.from,e),s=Math.min(r.to,t)
543
543
  s>o&&(n+=s-o)}return n}function o(e,t=Date.now()){return Math.max(0,t-e-n(e,t))}function s(e){const t=Math.max(1,Math.round(e/6e4))
544
544
  if(t<60)return`${t} min`
545
545
  const r=Math.floor(t/60),n=t%60
546
- return n?`${r} h ${n} min`:`${r} h`}var a,i=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
546
+ return n?`${r} h ${n} min`:`${r} h`}var i,a=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
547
547
  var o=Object.getOwnPropertyDescriptor(t,r)
548
- 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]}),c=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),l=this&&this.__importStar||(a=function(e){return a=Object.getOwnPropertyNames||function(e){var t=[]
548
+ 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]}),c=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),l=this&&this.__importStar||(i=function(e){return i=Object.getOwnPropertyNames||function(e){var t=[]
549
549
  for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
550
- return t},a(e)},function(e){if(e&&e.__esModule)return e
550
+ return t},i(e)},function(e){if(e&&e.__esModule)return e
551
551
  var t={}
552
- if(null!=e)for(var r=a(e),n=0;n<r.length;n++)"default"!==r[n]&&i(t,e,r[n])
552
+ if(null!=e)for(var r=i(e),n=0;n<r.length;n++)"default"!==r[n]&&a(t,e,r[n])
553
553
  return c(t,e),t})
554
554
  Object.defineProperty(exports,"__esModule",{value:!0}),exports.systemSleepCheck=void 0,exports.sampleAwakeClock=r,exports.sleptBetween=n,exports.awakeSince=o,exports.sleepWords=s,exports.awakeTimeout=function(e,t){const s=Date.now()
555
555
  r(s)
556
- let a=null
557
- const i=e=>{a=setTimeout(c,Math.max(0,e))},c=()=>{a=null
556
+ let i=null
557
+ const a=e=>{i=setTimeout(c,Math.max(0,e))},c=()=>{i=null
558
558
  const r=t-o(s)
559
- r>0?i(r):e()}
560
- return i(t),{clear:()=>{a&&clearTimeout(a),a=null},slept:()=>n(s)}},exports.sleptDuringRunNote=function(e){return`[AlchemyLab] The computer slept for ${s(e)} while this command ran. Nothing ran during that time (the box sleeps with the computer), and that time did not count toward the command's time limit.`},exports.sleptBetweenRunsNote=function(e){return`[AlchemyLab] The computer slept for ${s(e)} since the last command in this box ended. Nothing in the box ran during that time, background processes included; they went on when it woke.`},exports.resetAwakeClockForTests=function(e={}){w&&clearInterval(w),w=null,m=0,h=0,b.length=0,g=e.check??(()=>!0),x=e.store??null}
559
+ r>0?a(r):e()}
560
+ return a(t),{clear:()=>{i&&clearTimeout(i),i=null},slept:()=>n(s)}},exports.sleptDuringRunNote=function(e){return`[AlchemyLab] The computer slept for ${s(e)} while this command ran. Nothing ran during that time (the box sleeps with the computer), and that time did not count toward the command's time limit.`},exports.sleptBetweenRunsNote=function(e){return`[AlchemyLab] The computer slept for ${s(e)} since the last command in this box ended. Nothing in the box ran during that time, background processes included; they went on when it woke.`},exports.resetAwakeClockForTests=function(e={}){w&&clearInterval(w),w=null,m=0,h=0,b.length=0,g=e.check??(()=>!0),x=e.store??null}
561
561
  const u=t(35317),d=l(t(79896)),p=l(t(70857)),f=l(t(16928))
562
562
  exports.systemSleepCheck=(e,t)=>{if("linux"===process.platform)return e.to-e.from-t>1e4
563
563
  if("darwin"!==process.platform)return null
@@ -570,20 +570,20 @@ const b=[]
570
570
  let g=exports.systemSleepCheck,x=f.join(p.homedir(),".alchemy_lab","sleep-gaps.json")
571
571
  r()},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
572
572
  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))
573
- return new Promise(t=>{const s="win32"===process.platform,a=s?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=[],c=[]
573
+ return new Promise(t=>{const s="win32"===process.platform,i=s?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=[],c=[]
574
574
  let l=!1,u=!1
575
- const d=e=>{if(a.pid)try{s?a.kill(e):process.kill(-a.pid,e)}catch{}}
575
+ const d=e=>{if(i.pid)try{s?i.kill(e):process.kill(-i.pid,e)}catch{}}
576
576
  let p,f
577
- r.onKillReady?.((e="SIGTERM")=>{d(e),"SIGKILL"!==e&&setTimeout(()=>{u||d("SIGKILL")},2e3)}),r.timeoutMs&&r.timeoutMs>0&&(f=(0,o.awakeTimeout)(()=>{l=!0,d("SIGTERM"),p=setTimeout(()=>{u||d("SIGKILL")},2e3)},r.timeoutMs)),a.stdout?.on("data",e=>{i.push(e),r.onChunk?.("stdout",e)}),a.stderr?.on("data",e=>{c.push(e),r.onChunk?.("stderr",e)})
578
- const m=e=>{u||(u=!0,f?.clear(),p&&clearTimeout(p),t({stdout:Buffer.concat(i).toString("utf-8"),stderr:Buffer.concat(c).toString("utf-8"),exitCode:e,timedOut:l}))}
579
- a.on("close",e=>m(e??(l?124:1))),a.on("error",()=>m(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"]})
577
+ r.onKillReady?.((e="SIGTERM")=>{d(e),"SIGKILL"!==e&&setTimeout(()=>{u||d("SIGKILL")},2e3)}),r.timeoutMs&&r.timeoutMs>0&&(f=(0,o.awakeTimeout)(()=>{l=!0,d("SIGTERM"),p=setTimeout(()=>{u||d("SIGKILL")},2e3)},r.timeoutMs)),i.stdout?.on("data",e=>{a.push(e),r.onChunk?.("stdout",e)}),i.stderr?.on("data",e=>{c.push(e),r.onChunk?.("stderr",e)})
578
+ const m=e=>{u||(u=!0,f?.clear(),p&&clearTimeout(p),t({stdout:Buffer.concat(a).toString("utf-8"),stderr:Buffer.concat(c).toString("utf-8"),exitCode:e,timedOut:l}))}
579
+ i.on("close",e=>m(e??(l?124:1))),i.on("error",()=>m(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"]})
580
580
  let c="",l=""
581
- 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()
581
+ 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(79414)),i=s(),a=(new Date).toISOString(),c=n.cwd??process.cwd()
582
582
  let l
583
- 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(()=>{})
584
- 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}
583
+ 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(()=>{})
584
+ 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}
585
585
  const n=t(35317),o=t(4334)
586
- exports.RUN_PARSE_FAILED_EXIT=125,exports.RUN_FROM_ENV=["c=$ALCHEMY_RUN_CMD; unset ALCHEMY_RUN_CMD",`case "$c" in *ALCHEMY_PROJECT_ROOT*) if [ -z "\${ALCHEMY_PROJECT_ROOT:-}" ]; then echo "Not run: ALCHEMY_PROJECT_ROOT (the project's folder) is not set here." >&2; exit ${exports.RUN_PARSE_FAILED_EXIT}; fi;; esac`,`if 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"'`,`elif (set -o pipefail) 2>/dev/null; then set -o pipefail; sh -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")}}
586
+ exports.RUN_PARSE_FAILED_EXIT=125,exports.RUN_FROM_ENV=["c=$ALCHEMY_RUN_CMD; unset ALCHEMY_RUN_CMD",`case "$c" in *ALCHEMY_PROJECT_ROOT*) if [ -z "\${ALCHEMY_PROJECT_ROOT:-}" ]; then echo "Not run: ALCHEMY_PROJECT_ROOT (the project's folder) is not set here." >&2; exit ${exports.RUN_PARSE_FAILED_EXIT}; fi;; esac`,`if 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"'`,`elif (set -o pipefail) 2>/dev/null; then set -o pipefail; sh -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"},88891(module){module.exports=require("unpdf")},20181(module){module.exports=require("buffer")},35317(module){module.exports=require("child_process")},76982(module){module.exports=require("crypto")},24434(module){module.exports=require("events")},79896(module){module.exports=require("fs")},91943(module){module.exports=require("fs/promises")},34589(module){module.exports=require("node:assert")},16698(module){module.exports=require("node:async_hooks")},4573(module){module.exports=require("node:buffer")},31421(module){module.exports=require("node:child_process")},37540(module){module.exports=require("node:console")},77598(module){module.exports=require("node:crypto")},53053(module){module.exports=require("node:diagnostics_channel")},40610(module){module.exports=require("node:dns")},78474(module){module.exports=require("node:events")},73024(module){module.exports=require("node:fs")},51455(module){module.exports=require("node:fs/promises")},37067(module){module.exports=require("node:http")},32467(module){module.exports=require("node:http2")},77030(module){module.exports=require("node:net")},48161(module){module.exports=require("node:os")},76760(module){module.exports=require("node:path")},643(module){module.exports=require("node:perf_hooks")},41792(module){module.exports=require("node:querystring")},80099(module){module.exports=require("node:sqlite")},57075(module){module.exports=require("node:stream")},87997(module){module.exports=require("node:timers")},41692(module){module.exports=require("node:tls")},73136(module){module.exports=require("node:url")},57975(module){module.exports=require("node:util")},73429(module){module.exports=require("node:util/types")},75919(module){module.exports=require("node:worker_threads")},38522(module){module.exports=require("node:zlib")},70857(module){module.exports=require("os")},16928(module){module.exports=require("path")},2203(module){module.exports=require("stream")},39023(module){module.exports=require("util")}}
587
587
  const r={}
588
588
  e.m=t,e.c=r,(()=>{const t=Object.getPrototypeOf
589
589
  let r
@@ -591,15 +591,15 @@ e.t=function(n,o){if(1&o&&(n=this(n)),8&o)return n
591
591
  if("object"==typeof n&&n){if(4&o&&n.__esModule)return n
592
592
  if(16&o&&"function"==typeof n.then)return n}const s=Object.create(null)
593
593
  e.r(s)
594
- const a={}
594
+ const i={}
595
595
  r=r||[null,t({}),t([]),t(t)]
596
- 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])
597
- 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=[]
596
+ for(var a=2&o&&n;("object"==typeof a||"function"==typeof a)&&!~r.indexOf(a);a=t(a))Object.getOwnPropertyNames(a).forEach(e=>i[e]=()=>n[e])
597
+ return i.default=()=>n,e.d(s,i),s}})(),e.d=(exports,t)=>{for(var r in t)e.o(t,r)&&!e.o(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:t[r]})},e.f={},e.e=t=>{const r=[]
598
598
  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}
599
599
  e.f.require=r=>{if(!t[r]){const n=require("./"+e.u(r))
600
600
  t[r]||(r=>{const n=r.modules,o=r.ids,s=r.runtime
601
- for(var a in n)e.o(n,a)&&(e.m[a]=n[a])
601
+ for(var i in n)e.o(n,i)&&(e.m[i]=n[i])
602
602
  s&&s(e)
603
- for(var i=0;i<o.length;i++)t[o[i]]=1})(n)}}})()
603
+ for(var a=0;a<o.length;a++)t[o[a]]=1})(n)}}})()
604
604
  let n=e(e.s=95900)
605
605
  module.exports=n})()