alchemylab 2.0.2 → 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 +14 -0
- package/dist/24.js +37 -0
- package/dist/293.js +58 -0
- package/dist/{491.js → 356.js} +11 -11
- package/dist/414.js +18 -0
- package/dist/478.js +89 -0
- package/dist/{636.js → 579.js} +7 -7
- package/dist/{565.js → 60.js} +8 -8
- package/dist/729.js +46 -88
- package/dist/{129.js → 776.js} +2 -2
- package/dist/{237.js → 800.js} +3 -3
- package/dist/816.js +3 -0
- package/dist/939.js +17 -0
- package/dist/{554.js → 991.js} +12 -12
- package/dist/{301.js → 994.js} +23 -23
- package/dist/cli.js +7423 -7151
- package/dist/document-textconv.js +307 -265
- package/dist/http-server.js +7530 -7524
- package/dist/index.js +7642 -7636
- package/dist/mcp-direct.js +7527 -7521
- package/dist/plugins/hooks/plugin.js +1 -1
- package/dist/plugins/system-logger.js +1 -1
- package/package.json +5 -2
- package/dist/19.js +0 -244
- package/dist/380.js +0 -17
- package/dist/403.js +0 -4
- package/dist/540.js +0 -56
- package/dist/603.js +0 -18
- package/dist/674.js +0 -15
- package/dist/796.js +0 -47
|
@@ -1,48 +1,97 @@
|
|
|
1
1
|
(()=>{"use strict"
|
|
2
|
-
function e(
|
|
3
|
-
if(void 0!==
|
|
4
|
-
|
|
5
|
-
return
|
|
6
|
-
|
|
7
|
-
if(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
13
64
|
const t=new Set
|
|
14
|
-
e.forEach((
|
|
15
|
-
const
|
|
16
|
-
return
|
|
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})
|
|
17
68
|
const o=e
|
|
18
|
-
if("ENOENT"===o.code)return void
|
|
69
|
+
if("ENOENT"===o.code)return void n({exit:-1,stdout:t??"",stderr:r??"",timedOut:!1,spawnError:"docker CLI not found on PATH"})
|
|
19
70
|
const s=!0===o.killed||"SIGKILL"===o.signal,a="number"==typeof o.code?o.code:-1
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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)
|
|
24
79
|
if(r.spawnError)return r.spawnError
|
|
25
80
|
if(0===r.exit)return
|
|
26
|
-
const
|
|
27
|
-
return 0!==
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
return
|
|
40
|
-
if(!n.ok)throw new Error(n.error)
|
|
41
|
-
return n.bytes}async function r(e){const r=(0,u.documentKindFor)(e)
|
|
42
|
-
if(!r)return`(AlchemyLab: no text form for ${e.split(".").pop()} files)\n`
|
|
43
|
-
try{const n=await(0,u.extractDocumentText)(new Uint8Array(await(0,i.readFile)(e)),r,{convert:t})
|
|
44
|
-
return n.text.endsWith("\n")?n.text:`${n.text}\n`}catch(e){return`(AlchemyLab: could not read this ${r.toUpperCase()} version: ${e instanceof Error?e.message:String(e)})\n`}}module=e.nmd(module)
|
|
45
|
-
var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
|
|
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)
|
|
46
95
|
var o=Object.getOwnPropertyDescriptor(t,r)
|
|
47
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=[]
|
|
48
97
|
for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
|
|
@@ -50,14 +99,38 @@ return t},n(e)},function(e){if(e&&e.__esModule)return e
|
|
|
50
99
|
var t={}
|
|
51
100
|
if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
|
|
52
101
|
return s(t,e),t})
|
|
53
|
-
Object.defineProperty(exports,"__esModule",{value:!0}),exports.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return
|
|
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}
|
|
124
|
+
var r=t(44600)
|
|
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(/\.[^.]+$/,"")
|
|
61
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)
|
|
62
135
|
var o=Object.getOwnPropertyDescriptor(t,r)
|
|
63
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=[]
|
|
@@ -71,26 +144,26 @@ var s
|
|
|
71
144
|
if(!r(o,e.to))return{ok:!1,error:`${d.extname(o)||"this file"} cannot be turned into ${e.to.toUpperCase()}`}
|
|
72
145
|
if(e.bytes.length>exports.MAX_RENDER_INPUT_BYTES)return{ok:!1,error:`file is over ${exports.MAX_RENDER_INPUT_BYTES/1048576} MB`}
|
|
73
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}`)
|
|
74
|
-
try{return{ok:!0,bytes:await l.promises.readFile(i),cached:!0}}catch{}const
|
|
75
|
-
if("wait"!==
|
|
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)
|
|
76
149
|
if("no-docker"===t.state)return{ok:!1,error:t.error,unavailable:!0}
|
|
77
|
-
if("building"===t.state)return{ok:!1,error:
|
|
78
|
-
if("failed"===t.state&&Date.now()-t.at<
|
|
79
|
-
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}
|
|
80
153
|
const{since:t}=(0,f.startLocalImageBuild)(e)
|
|
81
|
-
return{ok:!1,error:
|
|
82
|
-
try{await l.promises.mkdir(d.join(
|
|
83
|
-
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)}]})
|
|
84
157
|
if(!s.ok){const e=s.steps[0]
|
|
85
|
-
return{ok:!1,error:(s.error??`${(e?.stderr||e?.stdout||"").trim().split("\n").slice(-4).join(" ")}`)||"rendering failed",unavailable:!!s.error&&/docker|daemon|not found on PATH|Cannot connect/i.test(s.error)}}const a=(await l.promises.readdir(d.join(
|
|
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}`))
|
|
86
159
|
if(!a)return{ok:!1,error:`no ${e.to.toUpperCase()} was produced`}
|
|
87
|
-
const c=await l.promises.readFile(d.join(
|
|
88
|
-
return await l.promises.mkdir(t.cacheDir,{recursive:!0}),await l.promises.writeFile(i,c),{ok:!0,bytes:c,cached:!1}}finally{await l.promises.rm(
|
|
89
|
-
const c=t(76982),l=t(79896),u=i(t(70857)),d=i(t(16928)),p=t(
|
|
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)
|
|
90
163
|
exports.MAX_RENDER_INPUT_BYTES=52428800
|
|
91
|
-
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"]}
|
|
92
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"}
|
|
93
|
-
const w=
|
|
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")
|
|
94
167
|
if(!/^\s*\{\s*\\rtf/i.test(o))throw new Error("not an RTF file (it does not start with {\\rtf)")
|
|
95
168
|
const s=[],a=[{skip:!1,skipChars:0}],i=()=>a[a.length-1],c=e=>{i().skip||s.push(e)}
|
|
96
169
|
for(let e=0;e<o.length;e++){const s=o[e]
|
|
@@ -99,102 +172,32 @@ continue}if("}"===s){a.length>1&&a.pop()
|
|
|
99
172
|
continue}if("\r"===s||"\n"===s)continue
|
|
100
173
|
if("\\"!==s){if(i().skipChars>0){i().skipChars--
|
|
101
174
|
continue}c(s)
|
|
102
|
-
continue}const
|
|
103
|
-
if(!
|
|
104
|
-
if("*"===s){const
|
|
105
|
-
r
|
|
106
|
-
continue}if("'"===s){const
|
|
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)
|
|
107
180
|
if(e+=3,i().skipChars>0){i().skipChars--
|
|
108
|
-
continue}c((
|
|
109
|
-
continue}if(void 0!==s&&void 0!==
|
|
181
|
+
continue}c(t(parseInt(r,16)||0))
|
|
182
|
+
continue}if(void 0!==s&&void 0!==n[s]){c(n[s]),e+=1
|
|
110
183
|
continue}e+=1
|
|
111
|
-
continue}const[d,p
|
|
112
|
-
e+=
|
|
113
|
-
const
|
|
114
|
-
if(
|
|
115
|
-
else
|
|
116
|
-
|
|
117
|
-
i().
|
|
118
|
-
return
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return new Promise((t=>{const o="win32"===process.platform,s=o?n(e,{cwd:r.cwd??process.cwd(),env:r.env,shell:"cmd.exe",stdio:["pipe","pipe","pipe"],detached:!1}):n("/bin/sh",["-c",exports.RUN_FROM_ENV],{cwd:r.cwd??process.cwd(),env:{...r.env??process.env,[exports.RUN_ENV_VAR]:e},stdio:["pipe","pipe","pipe"],detached:!0}),a=[],i=[]
|
|
122
|
-
let c=!1,l=!1
|
|
123
|
-
const u=e=>{if(s.pid)try{o?s.kill(e):process.kill(-s.pid,e)}catch{}}
|
|
124
|
-
let d,p
|
|
125
|
-
r.onKillReady?.(((e="SIGTERM")=>{u(e),"SIGKILL"!==e&&setTimeout((()=>{l||u("SIGKILL")}),2e3)})),r.timeoutMs&&r.timeoutMs>0&&(p=setTimeout((()=>{c=!0,u("SIGTERM"),d=setTimeout((()=>{l||u("SIGKILL")}),2e3)}),r.timeoutMs)),s.stdout?.on("data",(e=>{a.push(e),r.onChunk?.("stdout",e)})),s.stderr?.on("data",(e=>{i.push(e),r.onChunk?.("stderr",e)}))
|
|
126
|
-
const f=e=>{l||(l=!0,p&&clearTimeout(p),d&&clearTimeout(d),t({stdout:Buffer.concat(a).toString("utf-8"),stderr:Buffer.concat(i).toString("utf-8"),exitCode:e,timedOut:c}))}
|
|
127
|
-
s.on("close",(e=>f(e??(c?124:1)))),s.on("error",(()=>f(1)))}))}Object.defineProperty(exports,"__esModule",{value:!0}),exports.RUN_ENV_VAR=exports.RUN_FROM_ENV=exports.RUN_PARSE_FAILED_EXIT=void 0,exports.exitMeansCouldNotRun=function(e){return e===exports.RUN_PARSE_FAILED_EXIT||127===e},exports.execAsync=async function(e,t={}){return new Promise(((r,o)=>{const[s,...a]=e.split(" "),i=(0,n.spawn)(s,a,{cwd:t.cwd||process.cwd(),stdio:["pipe","pipe","pipe"]})
|
|
128
|
-
let c="",l=""
|
|
129
|
-
i.stdout?.on("data",(e=>{c+=e.toString()})),i.stderr?.on("data",(e=>{l+=e.toString()})),i.on("close",(e=>{r({stdout:c,stderr:l,exitCode:e||0})})),i.on("error",(t=>{o(new Error(`Command failed: ${e}\nError: ${t.message}`))})),t.timeout&&setTimeout((()=>{i.kill(),o(new Error(`Command timed out: ${e}`))}),t.timeout)}))},exports.runShellCommand=r,exports.runTrackedShellCommand=async function(e,n,o){const{getActionServerBaseUrl:s}=await t.e(603).then(t.bind(t,53603)),a=s(),i=(new Date).toISOString(),c=n.cwd??process.cwd()
|
|
130
|
-
let l
|
|
131
|
-
fetch(`${a}/api/commands/start`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:o.id,name:o.name,command:e,cwd:c,sessionId:o.sessionId,startedAt:i,logPath:o.logPath,timeoutMs:n.timeoutMs}),signal:AbortSignal.timeout(2e3)}).catch((()=>{}))
|
|
132
|
-
try{l=await r(e,n)}catch(e){throw fetch(`${a}/api/commands/end`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:o.id,exitCode:1,timedOut:!1,finishedAt:(new Date).toISOString()}),signal:AbortSignal.timeout(2e3)}).catch((()=>{})),e}return fetch(`${a}/api/commands/end`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:o.id,exitCode:l.exitCode,timedOut:l.timedOut,finishedAt:(new Date).toISOString()}),signal:AbortSignal.timeout(2e3)}).catch((()=>{})),l}
|
|
133
|
-
const n=t(35317)
|
|
134
|
-
exports.RUN_PARSE_FAILED_EXIT=125,exports.RUN_FROM_ENV=["c=$ALCHEMY_RUN_CMD; unset ALCHEMY_RUN_CMD",`if (set -o pipefail) 2>/dev/null; then set -o pipefail; sh -n -c "$c" || exit ${exports.RUN_PARSE_FAILED_EXIT}; eval "$c"`,`elif command -v bash >/dev/null 2>&1; then ALCHEMY_RUN_CMD=$c; export ALCHEMY_RUN_CMD; exec bash -o pipefail -c 'c=$ALCHEMY_RUN_CMD; unset ALCHEMY_RUN_CMD; bash -n -c "$c" || exit ${exports.RUN_PARSE_FAILED_EXIT}; eval "$c"'`,`else sh -n -c "$c" || exit ${exports.RUN_PARSE_FAILED_EXIT}; eval "$c"; fi`].join("\n"),exports.RUN_ENV_VAR="ALCHEMY_RUN_CMD"},53157:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.hardenedCreateArgs=function(e){return["--network",e.network,"--user",e.user,"--cap-drop","ALL",...(e.capAdds??[]).flatMap((e=>["--cap-add",e])),...Object.entries(e.sysctls??{}).flatMap((([e,t])=>["--sysctl",`${e}=${t}`])),"--security-opt","no-new-privileges","--read-only","--tmpfs","/tmp:rw,nosuid,nodev,exec,size=256m",...(e.extraTmpfs??[]).flatMap((e=>["--tmpfs",e])),"--ipc","none","--tmpfs",`/dev/shm:rw,nosuid,nodev,size=${e.shmSizeMb??64}m`,"--memory",e.memory,"--memory-swap",e.memory,"--cpus",String(e.cpus),"--pids-limit",String(e.pidsLimit),"-e","HOME=/tmp"]}},64264:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.SCRATCH_VOLUME_ARGS=void 0,exports.scratchTmpfsArg=function(e){return`/scratch:rw,nosuid,nodev,exec,size=${e}m`},exports.claimScratch=async function(e,t,n){const o=await(0,r.docker)(["run","--rm","--network","none","--user","0:0","--volumes-from",e,"--entrypoint","chown",t,n,"/scratch"],r.DOCKER_OP_TIMEOUT_MS)
|
|
135
|
-
return 0===o.exit?null:o.spawnError??((o.stderr||"").trim()||`chown exited ${o.exit}`)}
|
|
136
|
-
const r=t(6175)
|
|
137
|
-
exports.SCRATCH_VOLUME_ARGS=["--mount","type=volume,dst=/scratch"]},64936:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.ContainerRunner=void 0
|
|
138
|
-
const r=t(6175),n=t(53157),o=t(16603),s=t(64264),a=t(4703)
|
|
139
|
-
exports.ContainerRunner=class{constructor(e={}){this.image=e.image??"node:20-alpine",this.stepTimeoutMs=e.stepTimeoutMs??12e4,this.network=e.network??"none",this.resources=e.resources??{}}async run(e){if(!e.worktreePath)return{steps:[],ok:!1,error:"worktreePath is required"}
|
|
140
|
-
const t=e.image??this.image,n={}
|
|
141
|
-
let i=Date.now()
|
|
142
|
-
const c=e=>{const t=Date.now()
|
|
143
|
-
n[e]=(n[e]??0)+(t-i),i=t},l=await(0,r.ensureImage)(t)
|
|
144
|
-
if(c("image"),l)return{steps:[],ok:!1,error:l}
|
|
145
|
-
let u=await(0,r.docker)(this.createArgs(e,t,!0),r.DOCKER_OP_TIMEOUT_MS)
|
|
146
|
-
if(0!==u.exit)return{steps:[],ok:!1,error:u.spawnError??`docker create failed: ${(u.stderr||String(u.exit)).trim()}`}
|
|
147
|
-
let d=u.stdout.trim()
|
|
148
|
-
if(c("create"),await(0,s.claimScratch)(d,t,"1000:1000")){if(await(0,r.docker)(["rm","-f","-v",d],r.DOCKER_OP_TIMEOUT_MS),u=await(0,r.docker)(this.createArgs(e,t,!1),r.DOCKER_OP_TIMEOUT_MS),0!==u.exit)return{steps:[],ok:!1,error:u.spawnError??`docker create failed: ${(u.stderr||String(u.exit)).trim()}`}
|
|
149
|
-
d=u.stdout.trim()}c("scratch")
|
|
150
|
-
try{const t=await(0,r.docker)(["start",d],r.DOCKER_OP_TIMEOUT_MS)
|
|
151
|
-
if(c("start"),0!==t.exit)return{steps:[],ok:!1,error:`docker start failed: ${(t.stderr||String(t.exit)).trim()}`}
|
|
152
|
-
const s=[]
|
|
153
|
-
let i=await(0,a.readOomKills)(d)??0
|
|
154
|
-
for(const t of e.steps){const n=Date.now(),c=await(0,r.docker)(["exec","-e",`${o.RUN_ENV_VAR}=${(0,o.withShellInit)(e.shellInit,t.run)}`,d,"/bin/sh","-c",o.RUN_FROM_ENV],t.timeoutMs??this.stepTimeoutMs),l=Date.now()-n,u=await(0,a.readOomKills)(d),p=null!=u?Math.max(0,u-i):0
|
|
155
|
-
null!=u&&(i=u)
|
|
156
|
-
const f=p>0?`${c.stderr}${c.stderr&&!c.stderr.endsWith("\n")?"\n":""}${(0,a.oomNote)(p,this.resources.memory??"1g")}\n`:c.stderr
|
|
157
|
-
s.push({run:t.run,exit:c.exit,stdout:c.stdout,stderr:f,ms:l,timedOut:c.timedOut})}return c("commands"),{steps:s,ok:s.every((e=>0===e.exit)),phaseMs:n}}finally{const e=Date.now()
|
|
158
|
-
await(0,r.docker)(["rm","-f","-v",d],r.DOCKER_OP_TIMEOUT_MS),n.remove=Date.now()-e}}createArgs(e,t,r){const o=Object.entries(e.env??{}).flatMap((([e,t])=>["-e",`${e}=${t}`])),a=e.depsVolume?["-v",`${e.depsVolume}:/work/node_modules`]:[],i=(e.mounts??[]).flatMap((e=>["-v",`${e.volume}:${e.target}`])),c=(e.readOnlyBinds??[]).flatMap((e=>["-v",`${e.host}:${e.target}:ro`]))
|
|
159
|
-
return["create","--label","alchemy.sandbox=rung1",...(0,n.hardenedCreateArgs)({network:this.network,user:"1000:1000",...r?{}:{extraTmpfs:[(0,s.scratchTmpfsArg)(512)]},shmSizeMb:this.resources.shmSizeMb,memory:this.resources.memory??"1g",cpus:this.resources.cpus??2,pidsLimit:this.resources.pidsLimit??512}),...r?s.SCRATCH_VOLUME_ARGS:[],...o,"-v",`${e.worktreePath}:/work:rw`,...a,...i,...c,"-w","/work",t,"tail","-f","/dev/null"]}}},69968:function(e,exports,t){function r(e){const t=m.get(e.image)
|
|
160
|
-
if(t)return t.work
|
|
161
|
-
const r=(async()=>{const t=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
|
|
162
|
-
if(t.spawnError)return t.spawnError
|
|
163
|
-
if(0===t.exit&&t.stdout.trim()===e.recipeHash)return
|
|
164
|
-
const r=i.mkdtempSync(l.join(c.tmpdir(),"alchemylab-image-"))
|
|
165
|
-
try{i.writeFileSync(l.join(r,"Dockerfile"),e.dockerfile)
|
|
166
|
-
const t=await(0,u.docker)(["build","--label",`${p}=${e.recipeHash}`,"-t",e.image,r],exports.BUILD_TIMEOUT_MS)
|
|
167
|
-
if(0!==t.exit){const r=(t.stderr||t.stdout||"").trim().split("\n").slice(-12).join("\n")
|
|
168
|
-
return`building ${e.image} failed${t.timedOut?" (timed out)":""}: ${r}`}return}finally{i.rmSync(r,{recursive:!0,force:!0})}})()
|
|
169
|
-
return m.set(e.image,{work:r,since:Date.now()}),r.then((t=>{t?h.set(e.image,{error:t,at:Date.now()}):h.delete(e.image)}),(t=>{h.set(e.image,{error:t instanceof Error?t.message:String(t),at:Date.now()})})).finally((()=>m.delete(e.image))),r}var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
|
|
170
|
-
var o=Object.getOwnPropertyDescriptor(t,r)
|
|
171
|
-
o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[]
|
|
172
|
-
for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
|
|
173
|
-
return t},n(e)},function(e){if(e&&e.__esModule)return e
|
|
174
|
-
var t={}
|
|
175
|
-
if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
|
|
176
|
-
return s(t,e),t})
|
|
177
|
-
Object.defineProperty(exports,"__esModule",{value:!0}),exports.BUILD_TIMEOUT_MS=void 0,exports.localRecipeFor=function(e){return f.find((t=>t.image===e))},exports.ensureLocalImage=r,exports.localImageState=async function(e){const t=m.get(e.image)
|
|
178
|
-
if(t)return{state:"building",since:t.since}
|
|
179
|
-
const r=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
|
|
180
|
-
if(r.spawnError)return{state:"no-docker",error:"Docker is not installed on this machine (no docker command)"}
|
|
181
|
-
if(0===r.exit&&r.stdout.trim()===e.recipeHash)return{state:"ready"}
|
|
182
|
-
if(/cannot connect to the docker daemon|is the docker daemon running|error during connect/i.test(r.stderr))return{state:"no-docker",error:"Docker is not running on this machine"}
|
|
183
|
-
const n=h.get(e.image)
|
|
184
|
-
return n?{state:"failed",...n}:{state:"missing"}},exports.startLocalImageBuild=function(e){return h.delete(e.image),r(e).catch((()=>{})),{since:m.get(e.image)?.since??Date.now()}}
|
|
185
|
-
const i=a(t(73024)),c=a(t(48161)),l=a(t(76760)),u=t(6175),d=t(7740),p="dev.alchemylab.recipe"
|
|
186
|
-
exports.BUILD_TIMEOUT_MS=15e5
|
|
187
|
-
const f=[{image:d.OFFICE_BOX_IMAGE,dockerfile:d.OFFICE_BOX_DOCKERFILE,recipeHash:d.OFFICE_BOX_RECIPE_HASH}],m=new Map,h=new Map},70610:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.DOCUMENT_FORMATS=void 0,exports.formatOfKind=function(e){return exports.DOCUMENT_FORMATS.find((t=>t.kind===e))},exports.formatFor=function(e){const r=/\.([a-z0-9]+)$/i.exec(e)
|
|
188
|
-
return r?t.get(r[1].toLowerCase()):void 0},exports.DOCUMENT_FORMATS=[{kind:"pdf",extensions:["pdf"],mime:"application/pdf",modelInput:"pdf",text:!0},{kind:"docx",extensions:["docx"],mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",text:!0,render:"office"},{kind:"xlsx",extensions:["xlsx","xlsm"],mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",text:!0,render:"office"},{kind:"pptx",extensions:["pptx"],mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation",text:!0,render:"office"},{kind:"odt",extensions:["odt"],mime:"application/vnd.oasis.opendocument.text",text:!0,render:"office"},{kind:"ods",extensions:["ods"],mime:"application/vnd.oasis.opendocument.spreadsheet",text:!0,render:"office"},{kind:"odp",extensions:["odp"],mime:"application/vnd.oasis.opendocument.presentation",text:!0,render:"office"},{kind:"doc",extensions:["doc"],mime:"application/msword",text:!0,textVia:"docx",render:"office"},{kind:"rtf",extensions:["rtf"],mime:"application/rtf",text:!0,render:"office"},{kind:"xls",extensions:["xls"],mime:"application/vnd.ms-excel",text:!0,textVia:"xlsx",render:"office"},{kind:"ppt",extensions:["ppt"],mime:"application/vnd.ms-powerpoint",text:!0,textVia:"pptx",render:"office"}]
|
|
189
|
-
const t=new Map(exports.DOCUMENT_FORMATS.flatMap((e=>e.extensions.map((t=>[t,e])))))},70857:module=>{module.exports=require("os")},73024:module=>{module.exports=require("node:fs")},76760:module=>{module.exports=require("node:path")},76982:module=>{module.exports=require("crypto")},79896:module=>{module.exports=require("fs")},88194:module=>{module.exports=require("jszip")},88891:module=>{module.exports=require("unpdf")},91943:module=>{module.exports=require("fs/promises")},98335:(e,exports,t)=>{async function r(e){return(await Promise.resolve().then(t.t.bind(t,88194,23))).default.loadAsync(e)}async function n(e,t){const r=e.file(t)
|
|
190
|
-
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()
|
|
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()
|
|
191
194
|
if("amp"===r)return"&"
|
|
192
195
|
if("lt"===r)return"<"
|
|
193
196
|
if("gt"===r)return">"
|
|
194
197
|
if("quot"===r)return'"'
|
|
195
198
|
if("apos"===r)return"'"
|
|
196
199
|
const n=r.startsWith("#x")?parseInt(r.slice(2),16):parseInt(r.slice(1),10)
|
|
197
|
-
return Number.isFinite(n)?String.fromCodePoint(n):e})
|
|
200
|
+
return Number.isFinite(n)?String.fromCodePoint(n):e})}function s(e,t){const r=new RegExp(`(?:^|\\s)${t.replace(":","\\:")}="([^"]*)"`).exec(e)
|
|
198
201
|
return r?o(r[1]):void 0}function a(e,t){const r=new Map
|
|
199
202
|
if(!e)return r
|
|
200
203
|
for(const n of e.matchAll(/<Relationship\b([^>]*)\/?>/g)){const e=s(n[1],"Id"),o=s(n[1],"Target")
|
|
@@ -205,19 +208,19 @@ return{path:`${t}/_rels/${e.slice(e.lastIndexOf("/")+1)}.rels`,dir:t}}function l
|
|
|
205
208
|
return r?`[image: ${r}]`:"[image]"}async function u(e,t){const r=new Map
|
|
206
209
|
for(const[o,s]of t){if(!/charts\/chart[^/]*\.xml$/.test(s))continue
|
|
207
210
|
const t=await n(e,s)
|
|
208
|
-
t&&r.set(o,d(t))}return r}function d(e){const t=p(e),r=[...new Set([...t.matchAll(/<(\w+Chart)\b/g)].map(
|
|
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))]
|
|
209
212
|
"bar"===r[0]&&/<barDir val="col"/.test(t)&&(r[0]="column")
|
|
210
|
-
const n=t.split("<plotArea")[0],s=/<title>([\s\S]*?)<\/title>/.exec(n)?.[1],a=s?[...s.matchAll(/<t>([\s\S]*?)<\/t>/g)].map(
|
|
211
|
-
const t=/<f>([\s\S]*?)<\/f>/.exec(e)?.[1],r=[...e.matchAll(/<v>([\s\S]*?)<\/v>/g)].map(
|
|
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]))
|
|
212
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])
|
|
213
|
-
return`${n||"series"}${a?`: ${a}`:""}${i?` by ${i}`:""}`})
|
|
216
|
+
return`${n||"series"}${a?`: ${a}`:""}${i?` by ${i}`:""}`})
|
|
214
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=[]
|
|
215
218
|
let a=null,i="",c=!1,u=!1,d=null,p=0
|
|
216
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
|
|
217
|
-
for(const m of e.matchAll(f)){const[,e,f,h,b
|
|
218
|
-
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)
|
|
219
222
|
continue}if(p>0)continue
|
|
220
|
-
if(void 0!==
|
|
223
|
+
if(void 0!==b){u&&a&&a.push(o(b))
|
|
221
224
|
continue}const g=n[n.length-1]
|
|
222
225
|
if(e)switch(f){case"w:drawing":{if(!d)break
|
|
223
226
|
const e=d.chart??l(d.descr,d.name)
|
|
@@ -235,9 +238,9 @@ case"w:tr":g?.row&&(g.rows.push(g.row),g.row=null)
|
|
|
235
238
|
break
|
|
236
239
|
case"w:tbl":{const e=n.pop()
|
|
237
240
|
if(!e)break
|
|
238
|
-
const t=e.rows.map(
|
|
241
|
+
const t=e.rows.map(e=>`| ${e.map(e=>e.replace(/\|/g,"\\|")).join(" | ")} |`),o=n[n.length-1]
|
|
239
242
|
o?.cell?o.cell.push(t.join(" ")):r.push(...t,"")
|
|
240
|
-
break}}else switch(f){case"w:drawing":
|
|
243
|
+
break}}else switch(f){case"w:drawing":w||(d={})
|
|
241
244
|
break
|
|
242
245
|
case"wp:docPr":d&&(d.name=s(h,"name"),d.descr=s(h,"descr"))
|
|
243
246
|
break
|
|
@@ -251,7 +254,7 @@ case"w:pStyle":i=s(h,"w:val")??""
|
|
|
251
254
|
break
|
|
252
255
|
case"w:numPr":c=!0
|
|
253
256
|
break
|
|
254
|
-
case"w:t":
|
|
257
|
+
case"w:t":w||(u=!0)
|
|
255
258
|
break
|
|
256
259
|
case"w:tab":a?.push("\t")
|
|
257
260
|
break
|
|
@@ -269,32 +272,28 @@ const i=p(o),d=c(t),f=await u(e,a(await n(e,d.path),d.dir))
|
|
|
269
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}`:""
|
|
270
273
|
if(n){r.push(`${(f.get(n)??"[chart]").replace(/\]$/,`${a}]`)}`)
|
|
271
274
|
continue}const i=/<pic>[\s\S]*?<cNvPr\b([^>]*)\/?>/.exec(t)
|
|
272
|
-
i&&r.push(l(s(i[1],"descr"),s(i[1],"name")).replace(/\]$/,`${a}]`))}}return r}function h(e){
|
|
273
|
-
const t=[]
|
|
274
|
-
for(const r of e.matchAll(/<si\b[^>]*>([\s\S]*?)<\/si>/g)){const e=[]
|
|
275
|
-
for(const t of r[1].matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g))e.push(o(t[1]))
|
|
276
|
-
t.push(e.join(""))}return t}function b(e){const t=/^[A-Z]+/i.exec(e)?.[0].toUpperCase()??"A"
|
|
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"
|
|
277
276
|
let r=0
|
|
278
277
|
for(const e of t)r=26*r+(e.charCodeAt(0)-64)
|
|
279
278
|
return r-1}function w(e){let t=""
|
|
280
279
|
for(let r=e+1;r>0;r=Math.floor((r-1)/26))t=String.fromCharCode(65+(r-1)%26)+t
|
|
281
|
-
return t}function
|
|
280
|
+
return t}function b(e,t){const r=[]
|
|
282
281
|
let n=0,a=!1
|
|
283
|
-
for(const i of e.matchAll(/<row\b([^>]*?)(?:\/>|>([\s\S]*?)<\/row>)/g)){if(r.length>=
|
|
282
|
+
for(const i of e.matchAll(/<row\b([^>]*?)(?:\/>|>([\s\S]*?)<\/row>)/g)){if(r.length>=S){a=!0
|
|
284
283
|
break}const e=i[2]??"",c=[]
|
|
285
284
|
let l=0
|
|
286
|
-
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
|
|
287
286
|
l=n+1
|
|
288
287
|
const a=s(r[1],"t"),i=r[2]??"",u=/<f\b[^>]*>([\s\S]*?)<\/f>/.exec(i)?.[1]
|
|
289
288
|
let d=""
|
|
290
|
-
if("inlineStr"===a)d=[...i.matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g)].map(
|
|
289
|
+
if("inlineStr"===a)d=[...i.matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g)].map(e=>o(e[1])).join("")
|
|
291
290
|
else{const e=/<v\b[^>]*>([\s\S]*?)<\/v>/.exec(i)?.[1]
|
|
292
|
-
void 0!==e&&(d="s"===a?t[Number(e)]??"":"b"===a?"1"===e?"TRUE":"FALSE":o(e))}u&&(d=`${d}${""===d?"":" "}(=${o(u)})`),""!==d&&(c[n]=d.replace(/[\t\r\n]+/g," "))}c.length&&(n=Math.max(n,c.length),r.push({n:Number(s(i[1],"r"))||r.length+1,cells:c}))}return{text:
|
|
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)
|
|
293
292
|
for(const e of n.matchAll(/<pic\b[^>]*>[\s\S]*?<\/pic>|<graphicFrame\b[^>]*>[\s\S]*?<\/graphicFrame>/g)){const n=e[0]
|
|
294
293
|
if(/^<pic\b/.test(n)){const e=/<cNvPr\b([^>]*)\/?>/.exec(n)?.[1]??""
|
|
295
294
|
r.push(l(s(e,"descr"),s(e,"name")))
|
|
296
295
|
continue}const o=/<chart\b[^>]*r:id="([^"]+)"/.exec(n)?.[1]
|
|
297
|
-
o&&r.push(t.get(o)??"[chart]")}return r}function
|
|
296
|
+
o&&r.push(t.get(o)??"[chart]")}return r}function _(e){const t=[]
|
|
298
297
|
for(const r of e.matchAll(/<a:p\b[^>]*>([\s\S]*?)<\/a:p>/g)){const e=[]
|
|
299
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")
|
|
300
299
|
const n=e.join("").trim()
|
|
@@ -304,61 +303,60 @@ const c=new Map
|
|
|
304
303
|
for(const e of Object.keys(s.files)){const t=/^(.+)\/content\.xml$/.exec(e)?.[1]
|
|
305
304
|
if(!t)continue
|
|
306
305
|
const r=await n(s,e)
|
|
307
|
-
r&&/<chart:chart\b/.test(r)&&c.set(t
|
|
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]
|
|
308
307
|
if(a)for(const e of a.matchAll(/<table:table-row\b[^>]*>([\s\S]*?)<\/table:table-row>/g)){const t=[]
|
|
309
|
-
for(const r of e[1].matchAll(/<table:(?:table-cell|covered-table-cell)\b([^>]*?)(?:\/>|>([\s\S]*?)<\/table:(?:table-cell|covered-table-cell)>)/g)){const e=o([...(r[2]??"").matchAll(/<text:p\b[^>]*>([\s\S]*?)<\/text:p>/g)].map(
|
|
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)
|
|
310
309
|
for(let r=0;r<n;r++)t.push(e)}n.push(t)}const i=e=>{const t=/^\$?([A-Z]+)\$?(\d+)$/.exec(e)
|
|
311
|
-
return t?{col:
|
|
312
|
-
const t=e.split(":").map(
|
|
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)}))
|
|
313
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
|
|
314
313
|
if(!e||!r)return""
|
|
315
314
|
const o=[]
|
|
316
315
|
for(let t=e.row;t<=r.row;t++)for(let s=e.col;s<=r.col;s++)o.push(n[t]?.[s]??"")
|
|
317
|
-
return`${o.slice(0,8).join(", ")}${o.length>8?`, ... (${o.length})`:""}`}const r=t.map(
|
|
318
|
-
return`${t[0].table?`${t[0].table}!`:""}${2===r.length&&r[0]===r[1]?r[0]:r.join(":")}`},l=c(/<chart:categories\b[^>]*table:cell-range-address="([^"]+)"/.exec(e)?.[1]),u=[...e.matchAll(/<chart:series\b([^>]*)>/g)].map(
|
|
319
|
-
return`${c(s(e[1],"chart:label-cell-address"))||"series"}${t?`: ${t}`:""}${l?` by ${l}`:""}`})
|
|
320
|
-
return`[chart: ${
|
|
321
|
-
return r?`${r}!${n}`:n})).join(":")))}function y(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
|
|
322
320
|
case"text:line-break":return r.push("\n"),!0
|
|
323
321
|
case"text:s":return r.push(" ".repeat(Math.min(100,Number(s(t,"text:c")??1)||1))),!0
|
|
324
|
-
default:return!1}}function
|
|
322
|
+
default:return!1}}function E(e,t=new Map){const r=[],n=[],a=new R
|
|
325
323
|
let i=0,c=0,l=null,u=null
|
|
326
|
-
for(const d of e.matchAll(
|
|
324
|
+
for(const d of e.matchAll(T)){const[,e,p,f,m,h]=d
|
|
327
325
|
if(void 0!==h){if(c)continue
|
|
328
326
|
u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))
|
|
329
|
-
continue}if(
|
|
327
|
+
continue}if(A.has(p)){m||(c+=e?-1:1)
|
|
330
328
|
continue}if(c)continue
|
|
331
|
-
const
|
|
329
|
+
const w=n[n.length-1]
|
|
332
330
|
if(e)switch(p){case"svg:title":case"svg:desc":u=null
|
|
333
331
|
break
|
|
334
332
|
case"draw:frame":{const e=l?v(l,t):null
|
|
335
333
|
if(l=null,!e)break
|
|
336
|
-
a.current?a.pushSpaced(e):
|
|
334
|
+
a.current?a.pushSpaced(e):w?.cell?w.cell.push(e):r.push(e)
|
|
337
335
|
break}case"text:p":case"text:h":{const e=a.close()
|
|
338
336
|
if(!e)break
|
|
339
|
-
if(
|
|
337
|
+
if(w?.cell){e.plain&&w.cell.push(e.plain)
|
|
340
338
|
break}if(!e.line){r.length&&""!==r[r.length-1]&&r.push("")
|
|
341
339
|
break}r.push(e.line)
|
|
342
340
|
break}case"text:list-item":i=Math.max(0,i-1)
|
|
343
341
|
break
|
|
344
|
-
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)
|
|
345
343
|
break
|
|
346
|
-
case"table:table-row":
|
|
344
|
+
case"table:table-row":w?.row&&(w.rows.push(w.row),w.row=null)
|
|
347
345
|
break
|
|
348
346
|
case"table:table":{const e=n.pop()
|
|
349
347
|
if(!e)break
|
|
350
|
-
const t=e.rows.map(
|
|
348
|
+
const t=e.rows.map(e=>`| ${e.map(e=>e.replace(/\|/g,"\\|")).join(" | ")} |`),o=n[n.length-1]
|
|
351
349
|
o?.cell?o.cell.push(t.join(" ")):r.push(...t,"")
|
|
352
350
|
break}}else{if(y(p,f,a))continue
|
|
353
|
-
switch(p){case"text:p":case"text:h":m?!
|
|
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)
|
|
354
352
|
break
|
|
355
353
|
case"text:list-item":m||i++
|
|
356
354
|
break
|
|
357
355
|
case"table:table":m||n.push({rows:[],row:null,cell:null})
|
|
358
356
|
break
|
|
359
|
-
case"table:table-row":
|
|
357
|
+
case"table:table-row":w&&!m&&(w.row=[])
|
|
360
358
|
break
|
|
361
|
-
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=[])
|
|
362
360
|
break
|
|
363
361
|
case"draw:frame":m||(l={name:s(f,"draw:name")})
|
|
364
362
|
break
|
|
@@ -366,16 +364,57 @@ case"draw:image":l&&(l.image=!0)
|
|
|
366
364
|
break
|
|
367
365
|
case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
|
|
368
366
|
break
|
|
369
|
-
case"svg:title":case"svg:desc":!m&&l&&(u="svg:title"===p?"title":"desc")}}}return r.join("\n").replace(/\n{3,}/g,"\n\n").trim()}function
|
|
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=[]
|
|
370
407
|
let n=!1,a=null,i=null,c=null,l=null,u=null,d=0,p=!1
|
|
371
|
-
for(const f of e.matchAll(
|
|
372
|
-
if(void 0!==
|
|
373
|
-
u&&l?l[u]=(l[u]??"")+o(
|
|
374
|
-
continue}if(
|
|
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)
|
|
375
412
|
continue}if(d)continue
|
|
376
|
-
const
|
|
413
|
+
const x=()=>{if(!c||!i)return
|
|
377
414
|
let e=c.parts.join("").trim()||c.value||""
|
|
378
|
-
if(c.formula&&(e=`${e}${e?" ":""}(=${
|
|
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
|
|
379
418
|
i.col+=c.repeat,c=null}
|
|
380
419
|
if(e)switch(m){case"svg:title":case"svg:desc":u=null
|
|
381
420
|
break
|
|
@@ -383,36 +422,38 @@ case"draw:frame":{const e=l?v(l,t):null
|
|
|
383
422
|
l=null,e&&a&&a.figures.push(e)
|
|
384
423
|
break}case"text:p":p=!1
|
|
385
424
|
break
|
|
386
|
-
case"table:table-cell":case"table:covered-table-cell":
|
|
425
|
+
case"table:table-cell":case"table:covered-table-cell":x()
|
|
387
426
|
break
|
|
388
427
|
case"table:table-row":if(!i||!a)break
|
|
389
|
-
if(i.cells.some(
|
|
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
|
|
390
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
|
|
391
430
|
break
|
|
392
431
|
case"table:table":if(!a)break
|
|
393
|
-
r.push({name:a.name,text:
|
|
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})
|
|
394
433
|
break
|
|
395
434
|
case"table:table-row":{const e=Math.max(1,Number(s(h,"table:number-rows-repeated")??1)||1)
|
|
396
|
-
|
|
435
|
+
w?a&&(a.rowIndex+=e):i={cells:[],col:0,repeat:e}
|
|
397
436
|
break}case"table:table-cell":case"table:covered-table-cell":if(!i)break
|
|
398
|
-
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")},
|
|
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()
|
|
399
438
|
break
|
|
400
|
-
case"text:p":c&&!
|
|
439
|
+
case"text:p":c&&!w&&(c.parts.length&&c.parts.push(" "),p=!0)
|
|
401
440
|
break
|
|
402
441
|
case"text:s":case"text:tab":case"text:line-break":c&&p&&c.parts.push(" ")
|
|
403
442
|
break
|
|
404
|
-
case"draw:frame":
|
|
443
|
+
case"draw:frame":w||(l={name:s(h,"draw:name")})
|
|
405
444
|
break
|
|
406
445
|
case"draw:image":l&&(l.image=!0)
|
|
407
446
|
break
|
|
408
447
|
case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(h,"xlink:href"))
|
|
409
448
|
break
|
|
410
|
-
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=[]
|
|
411
452
|
let n=null
|
|
412
|
-
const a=new
|
|
453
|
+
const a=new R
|
|
413
454
|
let i=0,c=0,l=null,u=null
|
|
414
|
-
for(const d of e.matchAll(
|
|
415
|
-
if(void 0===h){if(
|
|
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)
|
|
416
457
|
else if(!c)if(e)switch(p){case"svg:title":case"svg:desc":u=null
|
|
417
458
|
break
|
|
418
459
|
case"text:p":case"text:h":{const e=a.close()
|
|
@@ -438,67 +479,68 @@ break
|
|
|
438
479
|
case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
|
|
439
480
|
break
|
|
440
481
|
case"svg:title":case"svg:desc":!m&&l&&(u="svg:title"===p?"title":"desc")}}}else{if(c)continue
|
|
441
|
-
u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))}}return r}
|
|
442
|
-
return
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
const t
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
case"docx":return async function(e){const t=await r(e),o=await n(t,"word/document.xml")
|
|
450
|
-
if(!o)throw new Error("not a Word document (word/document.xml is missing)")
|
|
451
|
-
return{kind:"docx",text:f(o,await u(t,a(await n(t,"word/_rels/document.xml.rels"),"word"))),note:"Text, headings, lists and tables; pictures show as [image: alt text] and charts as a one-line summary; formatting is dropped. To see the pages, view_asset this path."}}(o)
|
|
452
|
-
case"xlsx":return async function(e){const t=await r(e),o=await n(t,"xl/workbook.xml")
|
|
453
|
-
if(!o)throw new Error("not an Excel workbook (xl/workbook.xml is missing)")
|
|
454
|
-
const i=a(await n(t,"xl/_rels/workbook.xml.rels"),"xl"),c=h(await n(t,"xl/sharedStrings.xml")),l=[]
|
|
455
|
-
let u=!1,d=0
|
|
456
|
-
for(const e of o.matchAll(/<sheet\b([^>]*)\/?>/g)){const r=s(e[1],"name")??`Sheet ${d+1}`,o=s(e[1],"r:id"),a=o?i.get(o):void 0,p=a?await n(t,a):void 0
|
|
457
|
-
if(d++,!p){l.push(`## Sheet: ${r}\n(empty)`)
|
|
458
|
-
continue}const{text:f,truncated:h}=g(p,c)
|
|
459
|
-
u=u||h
|
|
460
|
-
const b=await m(t,a)
|
|
461
|
-
l.push(`## Sheet: ${r}\n${f||"(empty)"}${b.length?`\n\n${b.join("\n")}`:""}`)}return{kind:"xlsx",text:l.join("\n\n"),units:d,note:"Cell values as tab-separated rows (column letters in the header); a formula shows as its last computed value followed by (=formula). Charts and pictures are listed under their sheet. Dates show as numbers."+(u?` Sheets over ${T} rows are cut off.`:"")}}(o)
|
|
462
|
-
case"pptx":return async function(e){const t=await r(e),o=await n(t,"ppt/presentation.xml")
|
|
463
|
-
if(!o)throw new Error("not a PowerPoint deck (ppt/presentation.xml is missing)")
|
|
464
|
-
const i=a(await n(t,"ppt/_rels/presentation.xml.rels"),"ppt")
|
|
465
|
-
let c=[...o.matchAll(/<p:sldId\b([^>]*)\/?>/g)].map((e=>{const t=s(e[1],"r:id")
|
|
466
|
-
return t?i.get(t):void 0})).filter((e=>!!e))
|
|
467
|
-
c.length||(c=Object.keys(t.files).filter((e=>/^ppt\/slides\/slide\d+\.xml$/.test(e))).sort(((e,t)=>Number(/(\d+)\.xml$/.exec(e)[1])-Number(/(\d+)\.xml$/.exec(t)[1]))))
|
|
468
|
-
const l=[]
|
|
469
|
-
for(let e=0;e<c.length;e++){const r=c[e],o=await n(t,r),s=o?E(o):[],i=r.slice(0,r.lastIndexOf("/")),d=r.slice(r.lastIndexOf("/")+1),p=a(await n(t,`${i}/_rels/${d}.rels`),i)
|
|
470
|
-
o&&s.push(..._(o,await u(t,p)))
|
|
471
|
-
const f=[...p.values()].find((e=>/notesSlide\d*\.xml$/.test(e))),m=f?await n(t,f):void 0,h=m?E(m).filter((e=>!/^(\d+|<number>)$/.test(e))):[]
|
|
472
|
-
let b=`## Slide ${e+1}\n${s.join("\n")||"(no text)"}`
|
|
473
|
-
h.length&&(b+=`\n\nNotes:\n${h.join("\n")}`),l.push(b)}return{kind:"pptx",text:l.join("\n\n"),units:c.length,note:"Slide text and speaker notes; pictures show as [image: alt text] and charts as a one-line summary; layout is dropped. To see a slide, view_asset this path."}}(o)
|
|
474
|
-
case"odt":return async function(e){const{xml:t,objects:r}=await k(e,"application/vnd.oasis.opendocument.text","text document")
|
|
475
|
-
return{kind:"odt",text:M(t,r),note:"Text, headings, lists and tables; pictures show as [image: alt text] and charts as a one-line summary; notes, comments and formatting are dropped. To see the pages, view_asset this path."}}(o)
|
|
476
|
-
case"ods":return async function(e){const{xml:t,objects:r}=await k(e,"application/vnd.oasis.opendocument.spreadsheet","spreadsheet"),{sheets:n,truncated:o}=S(t,r)
|
|
477
|
-
return{kind:"ods",text:n.map((e=>`## Sheet: ${e.name}\n${e.text||"(empty)"}${e.figures.length?`\n\n${e.figures.join("\n")}`:""}`)).join("\n\n"),units:n.length,note:"Cell values as tab-separated rows (column letters in the header); a formula shows as its value followed by (=formula). Charts and pictures are listed under their sheet."+(o?` Sheets over ${T} rows are cut off.`:"")}}(o)
|
|
478
|
-
case"odp":return async function(e){const{xml:t,objects:r}=await k(e,"application/vnd.oasis.opendocument.presentation","presentation"),n=I(t,r)
|
|
479
|
-
return{kind:"odp",text:n.join("\n\n"),units:n.length,note:"Slide text and speaker notes; pictures show as [image: alt text] and charts as a one-line summary; layout is dropped. To see a slide, view_asset this path."}}(o)
|
|
480
|
-
case"rtf":return{kind:"rtf",text:(0,R.rtfToText)(o),note:"Text, paragraphs and table rows; styling, pictures and layout are dropped. To see the pages, view_asset this path."}
|
|
481
|
-
default:throw new Error(`no text form for .${i}`)}},exports.decodeXml=o,exports.figureMarker=l,exports.chartXmlSummary=d,exports.stripElementPrefixes=p,exports.docxXmlToText=f,exports.parseSharedStrings=h,exports.sheetXmlToText=g,exports.slideFigures=_,exports.drawingMlParagraphs=E,exports.odfChartSummary=O,exports.odfFormula=$,exports.odtXmlToText=M,exports.odsXmlToText=S,exports.odpXmlToText=I
|
|
482
|
-
const C=t(70610),R=t(50478)
|
|
483
|
-
exports.MAX_DOCUMENT_BYTES=52428800
|
|
484
|
-
const T=5e3,A={barChart:"bar",bar3DChart:"bar",lineChart:"line",line3DChart:"line",pieChart:"pie",pie3DChart:"pie",ofPieChart:"pie",doughnutChart:"doughnut",areaChart:"area",area3DChart:"area",scatterChart:"scatter",radarChart:"radar",bubbleChart:"bubble",stockChart:"stock",surfaceChart:"surface",surface3DChart:"surface"},j=/<(\/?)([A-Za-z][\w.-]*:[\w.-]+)\b([^>]*?)(\/?)>|([^<]+)/g,N=new Set(["text:note","office:annotation","text:tracked-changes","office:forms","text:sequence-decls"]),P=256,F=50,D={circle:"pie",ring:"doughnut"}
|
|
485
|
-
class L{constructor(){this.stack=[]}open(e,t){this.stack.push({parts:[],heading:e,listed:t})}get current(){return this.stack[this.stack.length-1]}push(e){this.current?.parts.push(e)}pushSpaced(e){const t=this.current?.parts
|
|
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
|
|
486
490
|
if(!t)return
|
|
487
491
|
const r=t[t.length-1]??""
|
|
488
492
|
t.push(`${!r||/\s$/.test(r)?"":" "}${e} `)}close(){const e=this.stack.pop()
|
|
489
493
|
if(!e)return null
|
|
490
494
|
const t=e.parts.join("").replace(/[ \t]+\n/g,"\n").trim()
|
|
491
|
-
return this.current?(t&&this.pushSpaced(t),null):{plain:t,line:t?e.heading?`${"#".repeat(Math.min(6,e.heading))} ${t}`:e.listed?`- ${t}`:t:""}}}}
|
|
492
|
-
|
|
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"})
|
|
496
|
+
if(!n.ok)throw new Error(n.error)
|
|
497
|
+
return n.bytes}async function r(e){const r=(0,u.documentKindFor)(e)
|
|
498
|
+
if(!r)return`(AlchemyLab: no text form for ${e.split(".").pop()} files)\n`
|
|
499
|
+
try{const n=await(0,u.extractDocumentText)(new Uint8Array(await(0,i.readFile)(e)),r,{convert:t})
|
|
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)
|
|
501
|
+
var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
|
|
502
|
+
var o=Object.getOwnPropertyDescriptor(t,r)
|
|
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=[]
|
|
504
|
+
for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
|
|
505
|
+
return t},n(e)},function(e){if(e&&e.__esModule)return e
|
|
506
|
+
var t={}
|
|
507
|
+
if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
|
|
508
|
+
return s(t,e),t})
|
|
509
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.textconv=r
|
|
510
|
+
const i=e(91943),c=a(e(70857)),l=a(e(16928)),u=e(36018),d=e(3517)
|
|
511
|
+
if(e.c[e.s]===module){const e=process.argv[2]
|
|
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
|
|
493
532
|
if("object"==typeof n&&n){if(4&o&&n.__esModule)return n
|
|
494
|
-
if(16&o&&"function"==typeof n.then)return n}
|
|
533
|
+
if(16&o&&"function"==typeof n.then)return n}const s=Object.create(null)
|
|
495
534
|
e.r(s)
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
for(var i=2&o&&n;"object"==typeof i&&!~
|
|
499
|
-
return a.default=()=>n,e.d(s,a),s},e.d=(exports,t)=>{for(var r in t)e.o(t,r)&&!e.o(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:t[r]})},e.f={},e.e=t=>
|
|
500
|
-
|
|
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])
|
|
501
543
|
s&&s(e)
|
|
502
|
-
for(var i=0;i<o.length;i++)
|
|
503
|
-
|
|
504
|
-
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})()
|