@inkeep/open-knowledge 0.0.0-dev-20260501170533 → 0.0.0-dev-20260501185457
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/assets/skills/open-knowledge/SKILL.md +4 -1
- package/dist/cli.mjs +236 -235
- package/dist/config-schema.json +25 -0
- package/dist/config.project.schema.json +25 -0
- package/dist/config.user.schema.json +25 -0
- package/dist/constants-CF6iNHwq.mjs +2 -0
- package/dist/{dist-oDoSs1Bl.mjs → dist-BmX1Ns7C.mjs} +2 -2
- package/dist/{dist-BVnVlgjQ.mjs → dist-C5mH5cvM.mjs} +1 -1
- package/dist/{dist-CDuTCUx1.mjs → dist-CQ3cd3s_.mjs} +2 -2
- package/dist/index.d.mts +9 -0
- package/dist/index.mjs +1 -1
- package/dist/{init-Bf7LOYAr.mjs → init-BjnqDY7M.mjs} +2 -2
- package/dist/init-C2brR-RE.mjs +1 -0
- package/dist/{init-CPq6B11A.mjs → init-CYf2zVql.mjs} +3 -3
- package/dist/init-DmOplVN_.mjs +1 -0
- package/dist/{loader-C79dNoU-.mjs → loader-B6SJHrZ7.mjs} +2 -2
- package/dist/loader-DHJ2Zglf.mjs +1 -0
- package/dist/paths-CpBfVnXM.mjs +2 -0
- package/dist/paths-RkNXbnlJ.mjs +1 -0
- package/dist/preview-BlsnSdAb.mjs +1 -0
- package/dist/{preview-AXEdeZ4w.mjs → preview-Cwn5dVfT.mjs} +2 -2
- package/dist/public/assets/{ActivityModeContent-CCJOMAyp.js → ActivityModeContent-Cdl0frU2.js} +1 -1
- package/dist/public/assets/{DocumentContext-BHFNw5NZ.js → DocumentContext-BRyrYElZ.js} +1 -1
- package/dist/public/assets/{GraphPanel-BuZEMdl-.js → GraphPanel-BH5vs7kB.js} +1 -1
- package/dist/public/assets/{OutlinePanel-CnKUM65X.js → OutlinePanel-BcdH74Qw.js} +1 -1
- package/dist/public/assets/{SettingsPane-B3rEEyMP.js → SettingsPane-rdUN7cCp.js} +1 -1
- package/dist/public/assets/{SourceEditor-CE_X9auW.js → SourceEditor-Df4RyC-2.js} +1 -1
- package/dist/public/assets/{config-validation-events-DqfR4UtM.js → config-validation-events-CWaXc07D.js} +1 -1
- package/dist/public/assets/{index-NVu982rh.js → index-DN_1M53F.js} +70 -70
- package/dist/public/assets/{target-navigation-intent-1238Z_HW.js → target-navigation-intent-CIITpiPs.js} +1 -1
- package/dist/public/assets/{toggle-group-C5MXNna8.js → toggle-group-1sl8rMnA.js} +1 -1
- package/dist/public/assets/{tooltip-BMlqVI54.js → tooltip-CFeKxs4p.js} +1 -1
- package/dist/public/index.html +7 -7
- package/dist/schemas/v0/config.project.schema.json +25 -0
- package/dist/schemas/v0/config.user.schema.json +25 -0
- package/dist/{server-Cb1yd7Zc.mjs → server-CJdOKLcU.mjs} +2 -2
- package/dist/src-DTzzYACv.mjs +1 -0
- package/dist/{start-Dl1pApAn.mjs → start-DUNgfb6B.mjs} +2 -2
- package/dist/start-LHb22tU5.mjs +1 -0
- package/package.json +1 -1
- package/dist/constants-B8HpPaWG.mjs +0 -2
- package/dist/init-BhfL8UL0.mjs +0 -1
- package/dist/init-DkzHwyzJ.mjs +0 -1
- package/dist/loader-5abUX3Eq.mjs +0 -1
- package/dist/paths-BIsyTDX6.mjs +0 -1
- package/dist/paths-Drz5vBVF.mjs +0 -2
- package/dist/preview-DUYE2XxR.mjs +0 -1
- package/dist/src-CPe0c6hz.mjs +0 -1
- package/dist/start-COO3npTl.mjs +0 -1
package/dist/cli.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{i as e,o as t,t as n}from"./chunk-FK9Q3tQk.mjs";import{t as r}from"./esm-wByiX8MO.mjs";import{A as i,At as a,Ct as o,Dt as s,F as c,Ft as l,It as u,Lt as d,M as f,Mt as p,Nt as m,Ot as h,Pt as g,Q as _,St as v,_t as y,at as b,bt as x,ct as S,dt as C,ft as w,g as ee,gt as T,ht as E,jt as te,kt as ne,lt as D,mt as re,n as ie,ot as O,pt as k,st as ae,ut as oe,v as A,vt as se,wt as ce,x as le,xt as j,y as M,yt as N}from"./dist-
|
|
2
|
+
import{i as e,o as t,t as n}from"./chunk-FK9Q3tQk.mjs";import{t as r}from"./esm-wByiX8MO.mjs";import{A as i,At as a,Ct as o,Dt as s,F as c,Ft as l,It as u,Lt as d,M as f,Mt as p,Nt as m,Ot as h,Pt as g,Q as _,St as v,_t as y,at as b,bt as x,ct as S,dt as C,ft as w,g as ee,gt as T,ht as E,jt as te,kt as ne,lt as D,mt as re,n as ie,ot as O,pt as k,st as ae,ut as oe,v as A,vt as se,wt as ce,x as le,xt as j,y as M,yt as N}from"./dist-BmX1Ns7C.mjs";import{n as ue,r as de,t as fe}from"./dist-bundle-BSdjl7Rj.mjs";import{i as pe,r as me}from"./constants-CF6iNHwq.mjs";import{n as he,t as ge}from"./paths-CpBfVnXM.mjs";import{l as _e,o as P,s as ve}from"./server-lock-BAi_a4NX-CRPhQdIH.mjs";import{i as ye}from"./git-handle-BhGnmvTB-BMB_49Sb.mjs";import{A as be,C as xe,Dt as Se,F as Ce,an as we,cn as Te,on as Ee,q as De,sn as Oe,wt as ke}from"./dist-CQ3cd3s_.mjs";import{a as Ae,i as je,n as Me,t as Ne}from"./server-CJdOKLcU.mjs";import{t as Pe}from"./is-object-CEU0BgQ5.mjs";import{i as Fe,n as Ie,r as Le,t as Re}from"./loader-B6SJHrZ7.mjs";import{r as ze}from"./init-CYf2zVql.mjs";import{i as Be,n as Ve,o as He,r as Ue,s as We,t as Ge}from"./colors-BdAXRiXe.mjs";import{t as Ke}from"./chunk-YNYSPYQ5-CzQORSqg.mjs";import{a as qe,c as Je,d as Ye,f as Xe,h as Ze,i as Qe,l as $e,m as et,n as tt,o as nt,p as rt,r as it,s as at,t as ot,u as st}from"./chunk-GFQRA5P5-BHvTMkvm.mjs";import{A as ct,B as lt,C as ut,D as dt,E as ft,F as pt,H as mt,I as ht,L as gt,M as _t,N as vt,O as yt,P as bt,S as xt,T as St,V as Ct,_ as wt,a as Tt,b as Et,c as Dt,d as Ot,f as F,g as kt,h as At,i as jt,j as Mt,k as Nt,l as Pt,m as Ft,n as It,o as Lt,p as Rt,r as zt,s as Bt,t as Vt,u as Ht,v as Ut,w as Wt,x as Gt,y as Kt,z as qt}from"./chunk-FEIOJCZD-BWy7d-Eh.mjs";import{a as Jt,c as Yt,d as Xt,i as Zt,l as Qt,n as $t,o as en,r as tn,s as I,t as nn,u as rn}from"./chunk-XHM67O4N-CAZ8iQv5.mjs";import{n as an,r as on,t as sn}from"./chunk-R6VWJ2ZL-Bz4BqhV-.mjs";import{r as cn}from"./chunk-CWQS3NFK-7eq8cfme.mjs";import"./chunk-DXB73IDG-B5N_TdmL.mjs";import{n as ln,t as un}from"./chunk-5QMZ5MUS-O2hLndhl.mjs";import{n as dn,t as fn}from"./chunk-A5O5YHGN-Bb__rfH8.mjs";import{n as pn,r as mn,t as hn}from"./chunk-OJDRYQWQ-D39lhrQA.mjs";import{r as gn,t as _n}from"./chunk-24IMIIXA-B3GEYoJz.mjs";import{n as vn}from"./chunk-3THT3N7L-DTzOHNvT.mjs";import{t as yn}from"./chunk-44UOCSGV-D5MNKiyC.mjs";import{o as bn,s as xn}from"./start-DUNgfb6B.mjs";import"./src-DTzzYACv.mjs";import{execFileSync as Sn,spawn as Cn}from"node:child_process";import*as wn from"node:path";import Tn,{basename as En,dirname as Dn,isAbsolute as On,join as kn,relative as An,resolve as jn}from"node:path";import*as L from"node:fs";import{appendFileSync as Mn,closeSync as Nn,existsSync as Pn,mkdirSync as Fn,openSync as In,readFileSync as Ln,readdirSync as Rn,realpathSync as zn,statSync as Bn,unlinkSync as Vn,writeFileSync as Hn}from"node:fs";import Un from"node:process";import{homedir as Wn,hostname as Gn}from"node:os";import{AsyncLocalStorage as Kn,AsyncResource as qn}from"node:async_hooks";import{stripVTControlCharacters as Jn,styleText as Yn}from"node:util";import*as Xn from"node:readline";import{fileURLToPath as Zn}from"node:url";import{randomUUID as Qn}from"node:crypto";import{readFile as $n,readdir as er,stat as tr}from"node:fs/promises";import{setTimeout as nr}from"node:timers/promises";import{createServer as rr,request as ir}from"node:http";import{lookup as ar}from"node:dns";import{createInterface as or}from"node:readline/promises";var sr=d();const cr=`open-knowledge`;var lr=class{backend=`keyring`;async get(e){let{Entry:t}=await import(`@napi-rs/keyring`);try{let n=new t(cr,e).getPassword();return n==null?null:JSON.parse(n)}catch{return null}}async set(e,t,n,r){let{Entry:i}=await import(`@napi-rs/keyring`),a=new i(cr,e),o={login:t,token:n,...r};a.setPassword(JSON.stringify(o))}async clear(e){let{Entry:t}=await import(`@napi-rs/keyring`);try{new t(cr,e).deletePassword()}catch{}}},ur=class{backend=`file`;authFile;constructor(e){this.authFile=e??kn(Wn(),`.ok`,`auth.yml`)}read(){if(!Pn(this.authFile))return{};try{return(0,sr.parse)(Ln(this.authFile,`utf-8`))??{}}catch(e){let t=e instanceof Error?e.message:`unknown error`;return process.stderr.write(`[auth] Failed to parse ${this.authFile}: ${t}. Starting with empty credentials.\n`),{}}}write(e){let t=Dn(this.authFile);Pn(t)||Fn(t,{recursive:!0,mode:448}),Hn(this.authFile,(0,sr.stringify)(e),{mode:384})}async get(e){return this.read()[e]??null}async set(e,t,n,r){let i=this.read();i[e]={login:t,token:n,...r},this.write(i)}async clear(e){let t=this.read();delete t[e],this.write(t)}};async function dr(e){try{let{Entry:e}=await import(`@napi-rs/keyring`);return new e(cr,`__probe__`),process.stderr.write(`[auth] token storage: OS keychain
|
|
3
3
|
`),new lr}catch{return process.stderr.write(`[auth] token storage: file (~/.ok/auth.yml)
|
|
4
4
|
`),new ur(e)}}async function fr(e,t,n){let r=pr(await mr(e)).host??``;if(!r)return 1;let i=await n.get(r);if(i==null)return 1;let a=e=>e.replace(/[\r\n]/g,``);return t.write(`username=${a(i.login)}\npassword=${a(i.token)}\n`),0}function pr(e){let t={};for(let n of e.split(`
|
|
5
5
|
`)){let e=n.trim();if(e===``)continue;let r=e.indexOf(`=`);r!==-1&&(t[e.slice(0,r)]=e.slice(r+1))}return t}function mr(e){return new Promise((t,n)=>{let r=[];e.on(`data`,e=>r.push(e)),e.on(`end`,()=>t(Buffer.concat(r).toString(`utf-8`))),e.on(`error`,n)})}function hr(e){let t=new r(`git-credential`);return t.description(`Git credential helper (git credential-helper protocol)`),t.command(`get`).description(`Lookup credentials from TokenStore (called by git)`).action(async()=>{let t=await e(),n=await fr(process.stdin,process.stdout,t);process.exit(n)}),t}function gr(e){let t=e.endpoint.DEFAULTS;return/^https:\/\/(api\.)?github\.com$/.test(t.baseUrl)?`https://github.com`:t.baseUrl.replace(`/api/v3`,``)}async function _r(e,t,n){let r={baseUrl:gr(e),headers:{accept:`application/json`},...n},i=await e(t,r);if(`error`in i.data){let n=new ue(`${i.data.error_description} (${i.data.error}, ${i.data.error_uri})`,400,{request:e.endpoint.merge(t,r)});throw n.response=i,n}return i}async function vr(e){let t=e.request||fe,n={client_id:e.clientId};return`scopes`in e&&Array.isArray(e.scopes)&&(n.scope=e.scopes.join(` `)),_r(t,`POST /login/device/code`,n)}async function yr(e){let t=await _r(e.request||fe,`POST /login/oauth/access_token`,{client_id:e.clientId,device_code:e.code,grant_type:`urn:ietf:params:oauth:grant-type:device_code`}),n={clientType:e.clientType,clientId:e.clientId,token:t.data.access_token,scopes:t.data.scope.split(/\s+/).filter(Boolean)};if(`clientSecret`in e&&(n.clientSecret=e.clientSecret),e.clientType===`github-app`){if(`refresh_token`in t.data){let e=new Date(t.headers.date).getTime();n.refreshToken=t.data.refresh_token,n.expiresAt=br(e,t.data.expires_in),n.refreshTokenExpiresAt=br(e,t.data.refresh_token_expires_in)}delete n.scopes}return{...t,authentication:n}}function br(e,t){return new Date(e+t*1e3).toISOString()}async function xr(e,t){let n=Sr(e,t.auth);if(n)return n;let{data:r}=await vr({clientType:e.clientType,clientId:e.clientId,request:t.request||e.request,scopes:t.auth.scopes||e.scopes});await e.onVerification(r);let i=await wr(t.request||e.request,e.clientId,e.clientType,r);return e.authentication=i,i}function Sr(e,t){if(t.refresh===!0||!e.authentication)return!1;if(e.clientType===`github-app`)return e.authentication;let n=e.authentication;return(`scopes`in t&&t.scopes||e.scopes).join(` `)===n.scopes.join(` `)?n:!1}async function Cr(e){await new Promise(t=>setTimeout(t,e*1e3))}async function wr(e,t,n,r){try{let i={clientId:t,request:e,code:r.device_code},{authentication:a}=n===`oauth-app`?await yr({...i,clientType:`oauth-app`}):await yr({...i,clientType:`github-app`});return{type:`token`,tokenType:`oauth`,...a}}catch(i){if(!i.response)throw i;let a=i.response.data.error;if(a===`authorization_pending`)return await Cr(r.interval),wr(e,t,n,r);if(a===`slow_down`)return await Cr(r.interval+7),wr(e,t,n,r);throw i}}async function Tr(e,t){return xr(e,{auth:t})}async function Er(e,t,n,r){let i=t.endpoint.merge(n,r);if(/\/login\/(oauth\/access_token|device\/code)$/.test(i.url))return t(i);let{token:a}=await xr(e,{request:t,auth:{type:`oauth`}});return i.headers.authorization=`token ${a}`,t(i)}var Dr=`0.0.0-development`;function Or(e){let t=e.request||fe.defaults({headers:{"user-agent":`octokit-auth-oauth-device.js/${Dr} ${de()}`}}),{request:n=t,...r}=e,i=e.clientType===`github-app`?{...r,clientType:`github-app`,request:n}:{...r,clientType:`oauth-app`,request:n,scopes:e.scopes||[]};if(!e.clientId)throw Error(`[@octokit/auth-oauth-device] "clientId" option must be set (https://github.com/octokit/auth-oauth-device.js#usage)`);if(!e.onVerification)throw Error(`[@octokit/auth-oauth-device] "onVerification" option must be a function (https://github.com/octokit/auth-oauth-device.js#usage)`);return Object.assign(Tr.bind(null,i),{hook:Er.bind(null,i)})}async function kr(e){let{clientId:t,scopes:n=[`repo`,`read:user`,`user:email`],onVerification:r,host:i}=e,a=i&&i!==`github.com`?`https://${i}/api/v3`:`https://api.github.com`,o=Or({clientType:`oauth-app`,clientId:t,scopes:n,onVerification:async e=>{await r({verificationUri:e.verification_uri,userCode:e.user_code,expiresIn:e.expires_in,interval:e.interval})},request:a===`https://api.github.com`?void 0:(await import(`./dist-bundle-BmF5_Mcp.mjs`)).request.defaults({baseUrl:a})}),s;try{s=await o({type:`oauth`})}catch(e){if(e instanceof Error){let t=e.message.toLowerCase();throw t.includes(`access_denied`)?Error(`Device-flow authorization was denied.`):t.includes(`expired_token`)||t.includes(`timeout`)||t.includes(`timed out`)?Error(`Device-flow code expired before authorization — please try again.`):Error(`GitHub sign-in failed: ${e.message}`)}throw e}return{token:s.token,tokenType:s.tokenType,scopes:s.scopes??[]}}function Ar(e){return process.env.OPEN_KNOWLEDGE_GITHUB_CLIENT_ID??e?.github?.oauthAppClientId??`Ov23liqlSd0V1MwR6rhI`}const jr=new Set([`gitlab.com`,`bitbucket.org`,`codeberg.org`,`gitea.com`,`sr.ht`,`sourcehut.org`]);function Mr(e){let t=e.toLowerCase().replace(/:\d+$/,``);jr.has(t)&&(process.stderr.write(`Error: ${e} is not a GitHub host. Only GitHub and GitHub Enterprise Server are supported.\n`),process.exit(1))}function Nr(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function Pr(e,t,n,r=kr){let i=Ar(n),{host:a,json:o}=e;Mr(a),o||process.stderr.write(`Logging in to ${a}…\n`);let s=await r({clientId:i,host:a===`github.com`?void 0:a,onVerification:e=>{e.userCode,e.verificationUri,o?Nr(!0,{type:`verification`,user_code:e.userCode,verification_uri:e.verificationUri,expires_in:e.expiresIn}):process.stderr.write(`Open: ${e.verificationUri}\nEnter code: ${e.userCode}\n`)}}),c=`unknown`,l,u;try{let e=a===`github.com`?`https://api.github.com`:`https://${a}/api/v3`,t=await fetch(`${e}/user`,{headers:{Authorization:`Bearer ${s.token}`,"User-Agent":`open-knowledge-cli`,Accept:`application/vnd.github+json`}});if(t.ok){let e=await t.json();c=e.login??c,l=e.name??void 0,u=e.email??void 0}}catch{}await t.set(a,c,s.token,{gitProtocol:`https`,name:l,email:u}),o?Nr(!0,{type:`complete`,host:a,login:c}):process.stderr.write(`✓ Logged in as ${c} on ${a}\n`)}function Fr(e,t){return new r(`login`).description(`Authenticate with GitHub via Device Flow`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSONL progress events`,!1).action(async n=>{await Pr(n,await t(),e())})}const Ir=e=>e.name===`enter`||e.name===`return`;var Lr=class extends Error{name=`AbortPromptError`;message=`Prompt was aborted`;constructor(e){super(),this.cause=e?.cause}},Rr=class extends Error{name=`CancelPromptError`;message=`Prompt was canceled`},zr=class extends Error{name=`ExitPromptError`},Br=class extends Error{name=`HookError`},Vr=class extends Error{name=`ValidationError`};const Hr=new Kn;function Ur(e){return{rl:e,hooks:[],hooksCleanup:[],hooksEffect:[],index:0,handleChange(){}}}function Wr(e,t){let n=Ur(e);return Hr.run(n,()=>{function e(e){n.handleChange=()=>{n.index=0,e()},n.handleChange()}return t(e)})}function Gr(){let e=Hr.getStore();if(!e)throw new Br(`[Inquirer] Hook functions can only be called from within a prompt`);return e}function Kr(){return Gr().rl}function qr(e){return qn.bind((...t)=>{let n=Gr(),r=!1,i=n.handleChange;n.handleChange=()=>{r=!0};let a=e(...t);return r&&i(),n.handleChange=i,a})}function Jr(e){let t=Gr(),{index:n}=t,r=e({get(){return t.hooks[n]},set(e){t.hooks[n]=e},initialized:n in t.hooks});return t.index++,r}function Yr(){Gr().handleChange()}const Xr={queue(e){let t=Gr(),{index:n}=t;t.hooksEffect.push(()=>{t.hooksCleanup[n]?.();let r=e(Kr());if(r!=null&&typeof r!=`function`)throw new Vr(`useEffect return value must be a cleanup function or nothing.`);t.hooksCleanup[n]=r})},run(){let e=Gr();qr(()=>{e.hooksEffect.forEach(e=>{e()}),e.hooksEffect.length=0})()},clearAll(){let e=Gr();e.hooksCleanup.forEach(e=>{e?.()}),e.hooksEffect.length=0,e.hooksCleanup.length=0}};function Zr(e){return typeof e==`function`}function Qr(e){return Jr(t=>{let n=qn.bind(function(e){t.get()!==e&&(t.set(e),Yr())});if(t.initialized)return[t.get(),n];let r=Zr(e)?e():e;return t.set(r),[r,n]})}function $r(e,t){Jr(n=>{let r=n.get();(!Array.isArray(r)||t.some((e,t)=>!Object.is(e,r[t])))&&Xr.queue(e),n.set(t)})}function ei(){return Un.platform.startsWith(`win`)?!!Un.env.CI||!!Un.env.WT_SESSION||!!Un.env.TERMINUS_SUBLIME||Un.env.ConEmuTask===`{cmd::Cmder}`||Un.env.TERM_PROGRAM===`Terminus-Sublime`||Un.env.TERM_PROGRAM===`vscode`||Un.env.TERM===`xterm-256color`||Un.env.TERM===`alacritty`||Un.env.TERMINAL_EMULATOR===`JetBrains-JediTerm`:Un.env.TERM!==`linux`}const ti={circleQuestionMark:`(?)`,questionMarkPrefix:`(?)`,square:`█`,squareDarkShade:`▓`,squareMediumShade:`▒`,squareLightShade:`░`,squareTop:`▀`,squareBottom:`▄`,squareLeft:`▌`,squareRight:`▐`,squareCenter:`■`,bullet:`●`,dot:`․`,ellipsis:`…`,pointerSmall:`›`,triangleUp:`▲`,triangleUpSmall:`▴`,triangleDown:`▼`,triangleDownSmall:`▾`,triangleLeftSmall:`◂`,triangleRightSmall:`▸`,home:`⌂`,heart:`♥`,musicNote:`♪`,musicNoteBeamed:`♫`,arrowUp:`↑`,arrowDown:`↓`,arrowLeft:`←`,arrowRight:`→`,arrowLeftRight:`↔`,arrowUpDown:`↕`,almostEqual:`≈`,notEqual:`≠`,lessOrEqual:`≤`,greaterOrEqual:`≥`,identical:`≡`,infinity:`∞`,subscriptZero:`₀`,subscriptOne:`₁`,subscriptTwo:`₂`,subscriptThree:`₃`,subscriptFour:`₄`,subscriptFive:`₅`,subscriptSix:`₆`,subscriptSeven:`₇`,subscriptEight:`₈`,subscriptNine:`₉`,oneHalf:`½`,oneThird:`⅓`,oneQuarter:`¼`,oneFifth:`⅕`,oneSixth:`⅙`,oneEighth:`⅛`,twoThirds:`⅔`,twoFifths:`⅖`,threeQuarters:`¾`,threeFifths:`⅗`,threeEighths:`⅜`,fourFifths:`⅘`,fiveSixths:`⅚`,fiveEighths:`⅝`,sevenEighths:`⅞`,line:`─`,lineBold:`━`,lineDouble:`═`,lineDashed0:`┄`,lineDashed1:`┅`,lineDashed2:`┈`,lineDashed3:`┉`,lineDashed4:`╌`,lineDashed5:`╍`,lineDashed6:`╴`,lineDashed7:`╶`,lineDashed8:`╸`,lineDashed9:`╺`,lineDashed10:`╼`,lineDashed11:`╾`,lineDashed12:`−`,lineDashed13:`–`,lineDashed14:`‐`,lineDashed15:`⁃`,lineVertical:`│`,lineVerticalBold:`┃`,lineVerticalDouble:`║`,lineVerticalDashed0:`┆`,lineVerticalDashed1:`┇`,lineVerticalDashed2:`┊`,lineVerticalDashed3:`┋`,lineVerticalDashed4:`╎`,lineVerticalDashed5:`╏`,lineVerticalDashed6:`╵`,lineVerticalDashed7:`╷`,lineVerticalDashed8:`╹`,lineVerticalDashed9:`╻`,lineVerticalDashed10:`╽`,lineVerticalDashed11:`╿`,lineDownLeft:`┐`,lineDownLeftArc:`╮`,lineDownBoldLeftBold:`┓`,lineDownBoldLeft:`┒`,lineDownLeftBold:`┑`,lineDownDoubleLeftDouble:`╗`,lineDownDoubleLeft:`╖`,lineDownLeftDouble:`╕`,lineDownRight:`┌`,lineDownRightArc:`╭`,lineDownBoldRightBold:`┏`,lineDownBoldRight:`┎`,lineDownRightBold:`┍`,lineDownDoubleRightDouble:`╔`,lineDownDoubleRight:`╓`,lineDownRightDouble:`╒`,lineUpLeft:`┘`,lineUpLeftArc:`╯`,lineUpBoldLeftBold:`┛`,lineUpBoldLeft:`┚`,lineUpLeftBold:`┙`,lineUpDoubleLeftDouble:`╝`,lineUpDoubleLeft:`╜`,lineUpLeftDouble:`╛`,lineUpRight:`└`,lineUpRightArc:`╰`,lineUpBoldRightBold:`┗`,lineUpBoldRight:`┖`,lineUpRightBold:`┕`,lineUpDoubleRightDouble:`╚`,lineUpDoubleRight:`╙`,lineUpRightDouble:`╘`,lineUpDownLeft:`┤`,lineUpBoldDownBoldLeftBold:`┫`,lineUpBoldDownBoldLeft:`┨`,lineUpDownLeftBold:`┥`,lineUpBoldDownLeftBold:`┩`,lineUpDownBoldLeftBold:`┪`,lineUpDownBoldLeft:`┧`,lineUpBoldDownLeft:`┦`,lineUpDoubleDownDoubleLeftDouble:`╣`,lineUpDoubleDownDoubleLeft:`╢`,lineUpDownLeftDouble:`╡`,lineUpDownRight:`├`,lineUpBoldDownBoldRightBold:`┣`,lineUpBoldDownBoldRight:`┠`,lineUpDownRightBold:`┝`,lineUpBoldDownRightBold:`┡`,lineUpDownBoldRightBold:`┢`,lineUpDownBoldRight:`┟`,lineUpBoldDownRight:`┞`,lineUpDoubleDownDoubleRightDouble:`╠`,lineUpDoubleDownDoubleRight:`╟`,lineUpDownRightDouble:`╞`,lineDownLeftRight:`┬`,lineDownBoldLeftBoldRightBold:`┳`,lineDownLeftBoldRightBold:`┯`,lineDownBoldLeftRight:`┰`,lineDownBoldLeftBoldRight:`┱`,lineDownBoldLeftRightBold:`┲`,lineDownLeftRightBold:`┮`,lineDownLeftBoldRight:`┭`,lineDownDoubleLeftDoubleRightDouble:`╦`,lineDownDoubleLeftRight:`╥`,lineDownLeftDoubleRightDouble:`╤`,lineUpLeftRight:`┴`,lineUpBoldLeftBoldRightBold:`┻`,lineUpLeftBoldRightBold:`┷`,lineUpBoldLeftRight:`┸`,lineUpBoldLeftBoldRight:`┹`,lineUpBoldLeftRightBold:`┺`,lineUpLeftRightBold:`┶`,lineUpLeftBoldRight:`┵`,lineUpDoubleLeftDoubleRightDouble:`╩`,lineUpDoubleLeftRight:`╨`,lineUpLeftDoubleRightDouble:`╧`,lineUpDownLeftRight:`┼`,lineUpBoldDownBoldLeftBoldRightBold:`╋`,lineUpDownBoldLeftBoldRightBold:`╈`,lineUpBoldDownLeftBoldRightBold:`╇`,lineUpBoldDownBoldLeftRightBold:`╊`,lineUpBoldDownBoldLeftBoldRight:`╉`,lineUpBoldDownLeftRight:`╀`,lineUpDownBoldLeftRight:`╁`,lineUpDownLeftBoldRight:`┽`,lineUpDownLeftRightBold:`┾`,lineUpBoldDownBoldLeftRight:`╂`,lineUpDownLeftBoldRightBold:`┿`,lineUpBoldDownLeftBoldRight:`╃`,lineUpBoldDownLeftRightBold:`╄`,lineUpDownBoldLeftBoldRight:`╅`,lineUpDownBoldLeftRightBold:`╆`,lineUpDoubleDownDoubleLeftDoubleRightDouble:`╬`,lineUpDoubleDownDoubleLeftRight:`╫`,lineUpDownLeftDoubleRightDouble:`╪`,lineCross:`╳`,lineBackslash:`╲`,lineSlash:`╱`},ni={tick:`✔`,info:`ℹ`,warning:`⚠`,cross:`✘`,squareSmall:`◻`,squareSmallFilled:`◼`,circle:`◯`,circleFilled:`◉`,circleDotted:`◌`,circleDouble:`◎`,circleCircle:`ⓞ`,circleCross:`ⓧ`,circlePipe:`Ⓘ`,radioOn:`◉`,radioOff:`◯`,checkboxOn:`☒`,checkboxOff:`☐`,checkboxCircleOn:`ⓧ`,checkboxCircleOff:`Ⓘ`,pointer:`❯`,triangleUpOutline:`△`,triangleLeft:`◀`,triangleRight:`▶`,lozenge:`◆`,lozengeOutline:`◇`,hamburger:`☰`,smiley:`㋡`,mustache:`෴`,star:`★`,play:`▶`,nodejs:`⬢`,oneSeventh:`⅐`,oneNinth:`⅑`,oneTenth:`⅒`},ri={tick:`√`,info:`i`,warning:`‼`,cross:`×`,squareSmall:`□`,squareSmallFilled:`■`,circle:`( )`,circleFilled:`(*)`,circleDotted:`( )`,circleDouble:`( )`,circleCircle:`(○)`,circleCross:`(×)`,circlePipe:`(│)`,radioOn:`(*)`,radioOff:`( )`,checkboxOn:`[×]`,checkboxOff:`[ ]`,checkboxCircleOn:`(×)`,checkboxCircleOff:`( )`,pointer:`>`,triangleUpOutline:`∆`,triangleLeft:`◄`,triangleRight:`►`,lozenge:`♦`,lozengeOutline:`◊`,hamburger:`≡`,smiley:`☺`,mustache:`┌─┐`,star:`✶`,play:`►`,nodejs:`♦`,oneSeventh:`1/7`,oneNinth:`1/9`,oneTenth:`1/10`},ii={...ti,...ni},ai={...ti,...ri},oi=ei()?ii:ai;Object.entries(ni);const si={prefix:{idle:Yn(`blue`,`?`),done:Yn(`green`,oi.tick)},spinner:{interval:80,frames:[`⠋`,`⠙`,`⠹`,`⠸`,`⠼`,`⠴`,`⠦`,`⠧`,`⠇`,`⠏`].map(e=>Yn(`yellow`,e))},style:{answer:e=>Yn(`cyan`,e),message:e=>Yn(`bold`,e),error:e=>Yn(`red`,`> ${e}`),defaultAnswer:e=>Yn(`dim`,`(${e})`),help:e=>Yn(`dim`,e),highlight:e=>Yn(`cyan`,e),key:e=>Yn(`cyan`,Yn(`bold`,`<${e}>`))}};function ci(e){if(typeof e!=`object`||!e)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function li(...e){let t={};for(let n of e)for(let[e,r]of Object.entries(n)){let n=t[e];t[e]=ci(n)&&ci(r)?li(n,r):r}return t}function ui(...e){return li(si,...e.filter(e=>e!=null))}function di({status:e=`idle`,theme:t}){let[n,r]=Qr(!1),[i,a]=Qr(0),{prefix:o,spinner:s}=ui(t);return $r(()=>{if(e===`loading`){let e,t=-1,n=setTimeout(()=>{r(!0),e=setInterval(()=>{t+=1,a(t%s.frames.length)},s.interval)},300);return()=>{clearTimeout(n),clearInterval(e)}}else r(!1)},[e]),n?s.frames[i]:typeof o==`string`?o:o[e===`loading`?`idle`:e]??o.idle}function fi(e){return Qr({current:e})[0]}function pi(e){let t=fi(e);t.current=e,$r(e=>{let n=!1,r=qr((r,i)=>{n||t.current(i,e)});return e.input.on(`keypress`,r),()=>{n=!0,e.input.removeListener(`keypress`,r)}},[])}var mi=n(((t,n)=>{n.exports=i;function r(t){let n={defaultWidth:0,output:process.stdout,tty:e(`tty`)};return t?(Object.keys(n).forEach(function(e){t[e]||(t[e]=n[e])}),t):n}function i(e){let t=r(e);if(t.output.getWindowSize)return t.output.getWindowSize()[0]||t.defaultWidth;if(t.tty.getWindowSize)return t.tty.getWindowSize()[1]||t.defaultWidth;if(t.output.columns)return t.output.columns;if(process.env.CLI_WIDTH){let e=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(e)&&e!==0)return e}return t.defaultWidth}}));const hi=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return t=>{let n=0;for(e.lastIndex=0;e.test(t);)n+=1;return t.length-n}})(),gi=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,_i=e=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141,vi=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,yi=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,bi=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/uy,xi=/\t{1,1000}/y,Si=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/uy,Ci=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,wi=/\p{M}+/gu,Ti={limit:1/0,ellipsis:``},Ei=(e,t={},n={})=>{let r=t.limit??1/0,i=t.ellipsis??``,a=t?.ellipsisWidth??(i?Ei(i,Ti,n).width:0),o=n.controlWidth??0,s=n.tabWidth??8,c=n.emojiWidth??2,l=n.regularWidth??1,u=n.wideWidth??2,d=[[Ci,l],[vi,0],[yi,o],[xi,s],[Si,c],[bi,u]],f=0,p=0,m=e.length,h=0,g=!1,_=m,v=Math.max(0,r-a),y=0,b=0,x=0,S=0;outer:for(;;){if(b>y||p>=m&&p>f){let t=e.slice(y,b)||e.slice(f,p);h=0;for(let e of t.replaceAll(wi,``)){let t=e.codePointAt(0)||0;if(S=gi(t)?2:_i(t)?u:l,x+S>v&&(_=Math.min(_,Math.max(y,f)+h)),x+S>r){g=!0;break outer}h+=e.length,x+=S}y=b=0}if(p>=m)break outer;for(let t=0,n=d.length;t<n;t++){let[n,i]=d[t];if(n.lastIndex=p,n.test(e)){if(h=n===bi?hi(e.slice(p,n.lastIndex)):n===Si?1:n.lastIndex-p,S=h*i,x+S>v&&(_=Math.min(_,p+Math.floor((v-x)/i))),x+S>r){g=!0;break outer}x+=S,y=f,b=p,p=f=n.lastIndex;continue outer}}p+=1}return{width:g?v:x,index:g?_:m,truncated:g,ellipsed:g&&r>=a}},Di={limit:1/0,ellipsis:``,ellipsisWidth:0},Oi=(e,t={})=>Ei(e,Di,t).width,ki=`]8;;`,Ai=RegExp(`(?:\\[(?<code>\\d+)m|\\${ki}(?<uri>.*))`,`y`),ji=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},Mi=e=>`[${e}m`,Ni=e=>`${ki}${e}`,Pi=(e,t,n)=>{let r=t[Symbol.iterator](),i=!1,a=!1,o=e.at(-1),s=o===void 0?0:Oi(o),c=r.next(),l=r.next(),u=0;for(;!c.done;){let o=c.value,d=Oi(o);s+d<=n?e[e.length-1]+=o:(e.push(o),s=0),(o===`\x1B`||o===``)&&(i=!0,a=t.startsWith(ki,u+1)),i?a?o===`\x07`&&(i=!1,a=!1):o===`m`&&(i=!1):(s+=d,s===n&&!l.done&&(e.push(``),s=0)),c=l,l=r.next(),u+=o.length}o=e.at(-1),!s&&o!==void 0&&o.length&&e.length>1&&(e[e.length-2]+=e.pop())},Fi=e=>{let t=e.split(` `),n=t.length;for(;n&&!Oi(t[n-1]);)n--;return n===t.length?e:t.slice(0,n).join(` `)+t.slice(n).join(``)},Ii=(e,t,n={})=>{if(n.trim!==!1&&e.trim()===``)return``;let r=``,i,a,o=e.split(` `),s=[``],c=0;for(let e=0;e<o.length;e++){let r=o[e];if(n.trim!==!1){let e=s.at(-1)??``,t=e.trimStart();e.length!==t.length&&(s[s.length-1]=t,c=Oi(t))}e!==0&&(c>=t&&(n.wordWrap===!1||n.trim===!1)&&(s.push(``),c=0),(c||n.trim===!1)&&(s[s.length-1]+=` `,c++));let i=Oi(r);if(n.hard&&i>t){let e=t-c,n=1+Math.floor((i-e-1)/t);Math.floor((i-1)/t)<n&&s.push(``),Pi(s,r,t),c=Oi(s.at(-1)??``);continue}if(c+i>t&&c&&i){if(n.wordWrap===!1&&c<t){Pi(s,r,t),c=Oi(s.at(-1)??``);continue}s.push(``),c=0}if(c+i>t&&n.wordWrap===!1){Pi(s,r,t),c=Oi(s.at(-1)??``);continue}s[s.length-1]+=r,c+=i}n.trim!==!1&&(s=s.map(e=>Fi(e)));let l=s.join(`
|
|
@@ -21,10 +21,10 @@ import{i as e,o as t,t as n}from"./chunk-FK9Q3tQk.mjs";import{t as r}from"./esm-
|
|
|
21
21
|
`),process.exit(1)}await t.set(r,c,a,{gitProtocol:`https`,name:l,email:u}),i?process.stdout.write(`${JSON.stringify({type:`complete`,host:r,login:c})}\n`):process.stderr.write(`✓ PAT stored for ${c} on ${r}\n`)}function ho(e){return new r(`pat`).description(`Store a Personal Access Token`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSON`,!1).action(async t=>{await mo(t,await e())})}async function go(e,t){let{host:n,json:r}=e;Mr(n);let i=await t.get(n);i??(process.stderr.write(`Not logged in to ${n}\n`),process.exit(1));let a=n===`github.com`?void 0:`https://${n}/api/v3`,o=new po({auth:i.token,...a?{baseUrl:a}:{}}),s=[];for await(let e of o.paginate.iterator(o.repos.listForAuthenticatedUser,{per_page:100,sort:`updated`}))for(let t of e.data)s.push({full_name:t.full_name,clone_url:t.clone_url,private:t.private});if(r)process.stdout.write(`${JSON.stringify({type:`repos`,host:n,repos:s})}\n`);else for(let e of s)process.stdout.write(`${e.full_name} ${e.clone_url}\n`)}function _o(e){return new r(`repos`).description(`List accessible repositories`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSON`,!1).action(async t=>{await go(t,await e())})}async function vo(e,t){let{host:n}=e;await t.clear(n),process.stderr.write(`✓ Signed out from ${n}\n`)}function yo(e){return new r(`signout`).description(`Remove stored credentials`).option(`--host <host>`,`GitHub hostname`,`github.com`).action(async t=>{await vo(t,await e())})}async function bo(e,t){let{host:n,json:r}=e;Mr(n);let i=await t.get(n);i??(r?process.stdout.write(`${JSON.stringify({type:`status`,host:n,authenticated:!1})}\n`):process.stderr.write(`Not logged in to ${n}\n`),process.exit(1));let a=n===`github.com`?void 0:`https://${n}/api/v3`,o=new po({auth:i.token,...a?{baseUrl:a}:{}});try{let{data:e}=await o.users.getAuthenticated();r?process.stdout.write(`${JSON.stringify({type:`status`,host:n,authenticated:!0,login:e.login,name:e.name,email:e.email})}\n`):process.stderr.write(`✓ Logged in as ${e.login} on ${n}\n`)}catch{r?process.stdout.write(JSON.stringify({type:`status`,host:n,authenticated:!1,error:`token invalid`})+`
|
|
22
22
|
`):process.stderr.write(`✗ Token invalid for ${n}\n`),process.exit(1)}}function xo(e){return new r(`status`).description(`Show authentication status`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSON`,!1).action(async t=>{await bo(t,await e())})}function So(e){let t=new r(`auth`);t.description(`GitHub authentication management`);let n=()=>dr(),i=e??(()=>({}));return t.addCommand(Fr(i,n)),t.addCommand(xo(n)),t.addCommand(_o(n)),t.addCommand(yo(n)),t.addCommand(ho(n)),t.addCommand(hr(n)),t}function Co(e,t,n={}){let r=ve(e,t);if(!Pn(r))return{status:`missing`,lockPath:r};let i;try{i=JSON.parse(Ln(r,`utf-8`))}catch{return{status:`corrupt`,lockPath:r}}if(!i||typeof i!=`object`||typeof i.pid!=`number`)return{status:`corrupt`,lockPath:r};let a=i,o=n.host??Gn();return a.hostname===o?(n.isAlive??P)(a.pid)?{status:`alive`,lockPath:r,lock:a}:{status:`dead-pid`,lockPath:r,lock:a}:{status:`foreign-host`,lockPath:r,lock:a}}function wo(e,t){let n=[];for(let[r,i]of[[`server`,e],[`ui`,t]])(i.status===`dead-pid`||i.status===`corrupt`)&&n.push({name:r,lockPath:i.lockPath,reason:i.status});return{prune:n}}function To(e){let t=e.inspect??(t=>Co(e.lockDir,t)),n=e.unlink??(e=>Vn(e)),r=e.log??(e=>console.log(e)),i=e.error??(e=>console.error(e)),a=wo(t(`server`),t(`ui`));if(a.prune.length===0)return r(`No stale locks.`),{pruned:[],failed:[]};let o=[],s=[];for(let e of a.prune)try{n(e.lockPath),o.push(e)}catch(t){s.push({target:e,error:t instanceof Error?t.message:String(t)})}if(o.length>0){let e=o.map(e=>`${e.name} (${e.reason})`).join(`, `);r(`Pruned ${o.length} stale lock${o.length===1?``:`s`}: ${e}`)}return s.length>0&&i(`Failed to prune: ${s.map(({target:e,error:t})=>`${e.name} (${e.lockPath}): ${t}`).join(`; `)}`),{pruned:o,failed:s}}function Eo(e){return new r(`clean`).description(`Prune stale / corrupt open-knowledge lock files (never touches live locks)`).action(()=>{To({lockDir:he(ge(e(),process.cwd()))}).failed.length>0&&(process.exitCode=1)})}function Do(){try{let e=Sn(`gh`,[`auth`,`token`],{encoding:`utf-8`,stdio:[`ignore`,`pipe`,`pipe`],timeout:5e3}).trim();return e.length===0?{available:!1}:{available:!0,token:e}}catch{return{available:!1}}}async function Oo(e,t,n={},r=Do){if(!n.skipGhDetect&&r().available)return{tier:`A`,credentialArgs:[`-c`,`credential.helper=!gh auth git-credential`]};let i=await t.get(e);return i==null?{tier:`none`,credentialArgs:[]}:{tier:i.gitProtocol===`ssh`?`C`:`B`,credentialArgs:[`-c`,`credential.helper=!open-knowledge auth git-credential`]}}function ko(e){return e.replace(/:\d+$/,``)}function Ao(e){let t=e.trim();if(!t)return null;{let e=/^https?:\/\/([^/?#]+)\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t);if(e)return{protocol:`https`,hostname:ko(e[1]),owner:e[2],name:e[3]}}{let e=/^ssh:\/\/(?:[\w.-]+@)?([^/?#]+)\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t);if(e)return{protocol:`ssh`,hostname:ko(e[1]),owner:e[2],name:e[3]}}{let e=/^git:\/\/([^/?#]+)\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t);if(e)return{protocol:`git`,hostname:ko(e[1]),owner:e[2],name:e[3]}}{let e=/^(?:[\w.-]+@)?([\w.-]+):([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?$/.exec(t);if(e?.[1].includes(`.`)||e&&t.startsWith(`git@`))return{protocol:`ssh`,hostname:e[1],owner:e[2],name:e[3]}}{let e=/^git:([\w.-]+)\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t);if(e)return{protocol:`git`,hostname:e[1],owner:e[2],name:e[3]}}if(!t.includes(`://`)&&!t.includes(`@`)&&!t.startsWith(`/`)){let e=/^([\w.-]+)\/([\w.\-~%]+?)(?:\.git)?$/.exec(t);if(e)return{protocol:`https`,hostname:`github.com`,owner:e[1],name:e[2]}}return null}const jo=[[`count`,0,10],[`compress`,10,20],[`receiv`,20,60],[`resolv`,60,100]];function Mo(e){let t=/^([\w ]+):\s+(\d+)%/.exec(e.trim());if(!t)return null;let n=t[1].toLowerCase(),r=Number(t[2]);for(let[e,i,a]of jo)if(n.includes(e))return{stage:t[1],pct:Math.round(i+r/100*(a-i))};return null}function No(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function Po(e,t,n,r=process.cwd()){let i=Ao(e);if(!i)throw Error(`Invalid git URL: ${e}`);let a=t.dir?jn(r,t.dir):jn(r,i.name);if(Pn(a)&&Rn(a).length>0)throw Error(`Target directory is not empty: ${a}`);let o=await dr(),s=await Oo(i.hostname,o,{}),c=ye({baseDir:r,config:s.credentialArgs.length>=2?[s.credentialArgs[1]]:[],unsafe:{allowUnsafeCredentialHelper:!0}}).env({GIT_TERMINAL_PROMPT:`0`}),l=-1;c.outputHandler((e,n,r)=>{r.on(`data`,e=>{let n=e.toString(`utf-8`);for(let e of n.split(`
|
|
23
23
|
`)){let n=Mo(e);n&&n.pct!==l&&(l=n.pct,No(t.json,{type:`progress`,pct:n.pct,stage:n.stage}),t.json||process.stderr.write(`\r Cloning… ${n.pct}%`))}})}),await c.clone(e,a,[`--progress`]),t.json||process.stderr.write(`
|
|
24
|
-
`);try{let{runInit:e}=await import(`./init-
|
|
24
|
+
`);try{let{runInit:e}=await import(`./init-C2brR-RE.mjs`),n=await e({cwd:a,mcp:!1});if(n.contentUpdated.length>0){let e=`auto-init: updated ${n.contentUpdated.join(`, `)}`;t.json?No(!0,{type:`warning`,message:e}):process.stderr.write(` ${e}\n`)}}catch(e){let n=e instanceof Error?e.message:String(e);t.json?No(!0,{type:`warning`,message:`auto-init: ${n}`}):process.stderr.write(` auto-init: ${n}\n`)}try{Fo(a)}catch(e){let n=e instanceof Error?e.message:String(e);t.json?No(!0,{type:`warning`,message:`git-exclude: ${n}`}):process.stderr.write(` git-exclude: ${n}\n`)}return a}function Fo(e){let t=kn(e,`.git`,`info`,`exclude`);if(!Pn(t))return`no-exclude`;let n=Ln(t,`utf-8`),r=new Set([`.ok`,`.ok/`,`/.ok`,`/.ok/`]);return n.split(`
|
|
25
25
|
`).map(e=>e.trim()).some(e=>r.has(e))?`already-present`:(Hn(t,`${n}${n.length===0||n.endsWith(`
|
|
26
26
|
`)?``:`
|
|
27
|
-
`}.ok/\n`,`utf-8`),`appended`)}function Io(e){return new r(`clone`).description(`Clone a git repository and open it`).argument(`<url>`,`Repository URL or owner/repo shorthand`).argument(`[dir]`,`Target directory (default: ./<repo-name>)`).option(`--json`,`Output JSONL progress events`,!1).action(async(t,n,r)=>{let i=e();try{let a=await Po(t,{json:r.json,dir:n},i);if(r.json)No(!0,{type:`complete`,dir:a});else{process.stderr.write(`✓ Cloned to ${a}\n`),process.chdir(a);let{startCommand:t}=await import(`./start-
|
|
27
|
+
`}.ok/\n`,`utf-8`),`appended`)}function Io(e){return new r(`clone`).description(`Clone a git repository and open it`).argument(`<url>`,`Repository URL or owner/repo shorthand`).argument(`[dir]`,`Target directory (default: ./<repo-name>)`).option(`--json`,`Output JSONL progress events`,!1).action(async(t,n,r)=>{let i=e();try{let a=await Po(t,{json:r.json,dir:n},i);if(r.json)No(!0,{type:`complete`,dir:a});else{process.stderr.write(`✓ Cloned to ${a}\n`),process.chdir(a);let{startCommand:t}=await import(`./start-LHb22tU5.mjs`);await t(e).parseAsync([],{from:`user`})}}catch(e){let t=e instanceof Error?e.message:String(e);r.json?No(!0,{type:`error`,message:t}):process.stderr.write(`✗ ${t}\n`),process.exitCode=1}})}const Lo=[[`sync`],[`persistence`,`debounceMs`],[`persistence`,`maxDebounceMs`],[`server`,`port`],[`content`,`include`],[`content`,`exclude`]];function Ro(e={}){let t=e.log??(e=>console.error(e)),n=e.error??(e=>console.error(e)),r=e.loadConfigFn??Ie;try{let{sources:n}=r(e.cwd);return t(`✓ Configuration valid (sources: ${n.length===0?`defaults only`:n.join(`, `)})`),{ok:!0}}catch(e){return n(e instanceof Error?e.message:String(e)),{ok:!1}}}function zo(e){let t=(0,sr.parseDocument)(Ln(e,`utf-8`));if(t.errors.length>0)throw Error(`Could not parse ${e}: ${t.errors.map(e=>e.message).join(`; `)}`);let n=[];for(let e of Lo)t.hasIn(e)&&n.push(e.join(`.`));return n}function Bo(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Vo(e){let t={};for(let n of e){let e=t;for(let t=0;t<n.length-1;t++){let r=n[t],i=e[r],a=Bo(i)?i:{};e[r]=a,e=a}e[n[n.length-1]]=null}return t}async function Ho(e={}){let t=e.log??(e=>console.log(e)),n=e.error??(e=>console.error(e)),r=e.scope??`both`,i=e.dryRun??!1,a=e.cwd??process.cwd(),o=e.writeConfigPatchFn??Ae,s=[];(r===`project`||r===`both`)&&s.push({scope:`project`,absPath:je(`project`,a,e.homedirOverride)}),(r===`user`||r===`both`)&&s.push({scope:`user`,absPath:je(`user`,a,e.homedirOverride)});let l=[],u=!0;for(let{scope:t,absPath:n}of s){if(!Pn(n)){l.push({path:n,scope:t,found:[],removed:[]});continue}let r;try{r=zo(n)}catch(e){let r=e instanceof Error?e.message:String(e);l.push({path:n,scope:t,found:[],removed:[],error:r}),u=!1;continue}if(r.length===0||i){l.push({path:n,scope:t,found:r,removed:[]});continue}let s=await o({cwd:a,scope:t,patch:Vo(Lo.filter(e=>r.includes(e.join(`.`)))),homedirOverride:e.homedirOverride});if(!s.ok){l.push({path:n,scope:t,found:r,removed:[],error:c(s.error)}),u=!1;continue}l.push({path:n,scope:t,found:r,removed:r})}for(let e of l)e.error&&n(`✗ ${e.path}: ${e.error}`);let d=l.some(e=>e.error!==void 0),f=l.reduce((e,t)=>e+t.found.length,0);if(f===0&&!d)t(`No deprecated fields found.`);else if(f>0)for(let e of l)e.error||(e.found.length===0?t(` ${e.path}: no deprecated fields`):t(i?`[dry-run] ${e.path}: would remove ${e.found.length} field(s): ${e.found.join(`, `)}`:`✓ ${e.path}: removed ${e.removed.length} field(s): ${e.removed.join(`, `)}`));return{outcomes:l,ok:u}}function Uo(){let e=new r(`config`).description(`Inspect and maintain Open Knowledge configuration files`);return e.command(`validate`).description(`Validate the merged config (defaults → user → project)`).action(()=>{Ro({}).ok||(process.exitCode=1)}),e.command(`migrate`).description(`Remove deprecated config fields (sync.*, persistence.{debounceMs,maxDebounceMs}, server.port, content.{include,exclude}) idempotently`).option(`--scope <scope>`,`Which scope to migrate: project | user | both`,`both`).option(`--dry-run`,`Preview without writing`,!1).action(async e=>{let t=e.scope;if(t!==`project`&&t!==`user`&&t!==`both`){console.error(`Invalid --scope: ${t}. Expected: project | user | both`),process.exitCode=2;return}(await Ho({scope:t,dryRun:e.dryRun})).ok||(process.exitCode=1)}),e}const Wo=[` 1. ${Ge(`Customize`)} (sidebar) → ${Ge(`Skills`)}`,` 2. Click the ${Ge(`+`)} button`,` 3. Click ${Ge(`Create skill`)}`,` 4. Click ${Ge(`Upload skill`)}`,` 5. Pick ${Ge(`openknowledge.skill`)} from Downloads`],Go=Be(` Open the Claude Desktop App, then: ${Ge(`Customize → Skills → + → Create skill → Upload skill`)} → pick the file.`);function Ko(e){let t=[He(`Built ${e.outputPath}`),Ve(` ${e.size} bytes • sha256 ${e.sha256?.slice(0,12)}…`)];return e.handoffError&&t.push(We(` Handoff failed: ${e.handoffError.message}`)),t.push(Go),t.join(`
|
|
28
28
|
`)}function qo(e){return[He(`Built ${e.outputPath}`),Ve(` ${e.size} bytes • sha256 ${e.sha256?.slice(0,12)}… • CLI v${e.cliVersion}`),Be(` Claude Desktop App opened. Now upload the file manually:`),...Wo,Ve(` If Claude Desktop didn't open, open it and start at step 1. The file is at ${e.outputPath}`)].join(`
|
|
29
29
|
`)}function Jo(e){return`${Ue(`Error:`)} ${e.buildError??`unknown build failure`}`}async function Yo(e={}){let t=await Ce(e);return t.status===`failed`?{...t,message:Jo(t),exitCode:1}:t.status===`installed`?{...t,message:qo(t),exitCode:0}:{...t,message:Ko(t),exitCode:0}}function Xo(){return new r(`install-skill`).description("Build openknowledge.skill and open the Claude Desktop App so you can upload it for Claude Chat & Cowork. Not needed for Claude Code — `ok init` covers that separately.").option(`--out <path>`,`Custom output path (default: ~/Downloads/openknowledge.skill)`).option(`--no-open`,`Build the file but skip the OS file-association handoff`).action(async e=>{let t=await Yo({out:e.out,noOpen:!e.open});process.stdout.write(`${t.message}\n`),t.exitCode!==0&&process.exit(t.exitCode)})}var R;(function(e){e.assertEqual=e=>{};function t(e){}e.assertIs=t;function n(e){throw Error()}e.assertNever=n,e.arrayToEnum=e=>{let t={};for(let n of e)t[n]=n;return t},e.getValidEnumValues=t=>{let n=e.objectKeys(t).filter(e=>typeof t[t[e]]!=`number`),r={};for(let e of n)r[e]=t[e];return e.objectValues(r)},e.objectValues=t=>e.objectKeys(t).map(function(e){return t[e]}),e.objectKeys=typeof Object.keys==`function`?e=>Object.keys(e):e=>{let t=[];for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t},e.find=(e,t)=>{for(let n of e)if(t(n))return n},e.isInteger=typeof Number.isInteger==`function`?e=>Number.isInteger(e):e=>typeof e==`number`&&Number.isFinite(e)&&Math.floor(e)===e;function r(e,t=` | `){return e.map(e=>typeof e==`string`?`'${e}'`:e).join(t)}e.joinValues=r,e.jsonStringifyReplacer=(e,t)=>typeof t==`bigint`?t.toString():t})(R||={});var Zo;(function(e){e.mergeShapes=(e,t)=>({...e,...t})})(Zo||={});const z=R.arrayToEnum([`string`,`nan`,`number`,`integer`,`float`,`boolean`,`date`,`bigint`,`symbol`,`function`,`undefined`,`null`,`array`,`object`,`unknown`,`promise`,`void`,`never`,`map`,`set`]),Qo=e=>{switch(typeof e){case`undefined`:return z.undefined;case`string`:return z.string;case`number`:return Number.isNaN(e)?z.nan:z.number;case`boolean`:return z.boolean;case`function`:return z.function;case`bigint`:return z.bigint;case`symbol`:return z.symbol;case`object`:return Array.isArray(e)?z.array:e===null?z.null:e.then&&typeof e.then==`function`&&e.catch&&typeof e.catch==`function`?z.promise:typeof Map<`u`&&e instanceof Map?z.map:typeof Set<`u`&&e instanceof Set?z.set:typeof Date<`u`&&e instanceof Date?z.date:z.object;default:return z.unknown}},B=R.arrayToEnum([`invalid_type`,`invalid_literal`,`custom`,`invalid_union`,`invalid_union_discriminator`,`invalid_enum_value`,`unrecognized_keys`,`invalid_arguments`,`invalid_return_type`,`invalid_date`,`invalid_string`,`too_small`,`too_big`,`invalid_intersection_types`,`not_multiple_of`,`not_finite`]);var $o=class e extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name=`ZodError`,this.issues=e}format(e){let t=e||function(e){return e.message},n={_errors:[]},r=e=>{for(let i of e.issues)if(i.code===`invalid_union`)i.unionErrors.map(r);else if(i.code===`invalid_return_type`)r(i.returnTypeError);else if(i.code===`invalid_arguments`)r(i.argumentsError);else if(i.path.length===0)n._errors.push(t(i));else{let e=n,r=0;for(;r<i.path.length;){let n=i.path[r];r===i.path.length-1?(e[n]=e[n]||{_errors:[]},e[n]._errors.push(t(i))):e[n]=e[n]||{_errors:[]},e=e[n],r++}}};return r(this),n}static assert(t){if(!(t instanceof e))throw Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,R.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=e=>e.message){let t=Object.create(null),n=[];for(let r of this.issues)if(r.path.length>0){let n=r.path[0];t[n]=t[n]||[],t[n].push(e(r))}else n.push(e(r));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};$o.create=e=>new $o(e);const es=(e,t)=>{let n;switch(e.code){case B.invalid_type:n=e.received===z.undefined?`Required`:`Expected ${e.expected}, received ${e.received}`;break;case B.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,R.jsonStringifyReplacer)}`;break;case B.unrecognized_keys:n=`Unrecognized key(s) in object: ${R.joinValues(e.keys,`, `)}`;break;case B.invalid_union:n=`Invalid input`;break;case B.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${R.joinValues(e.options)}`;break;case B.invalid_enum_value:n=`Invalid enum value. Expected ${R.joinValues(e.options)}, received '${e.received}'`;break;case B.invalid_arguments:n=`Invalid function arguments`;break;case B.invalid_return_type:n=`Invalid function return type`;break;case B.invalid_date:n=`Invalid date`;break;case B.invalid_string:typeof e.validation==`object`?`includes`in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position==`number`&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):`startsWith`in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:`endsWith`in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:R.assertNever(e.validation):n=e.validation===`regex`?`Invalid`:`Invalid ${e.validation}`;break;case B.too_small:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at least`:`more than`} ${e.minimum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at least`:`over`} ${e.minimum} character(s)`:e.type===`number`||e.type===`bigint`?`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`:e.type===`date`?`Date must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${new Date(Number(e.minimum))}`:`Invalid input`;break;case B.too_big:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at most`:`less than`} ${e.maximum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at most`:`under`} ${e.maximum} character(s)`:e.type===`number`?`Number must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`bigint`?`BigInt must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`date`?`Date must be ${e.exact?`exactly`:e.inclusive?`smaller than or equal to`:`smaller than`} ${new Date(Number(e.maximum))}`:`Invalid input`;break;case B.custom:n=`Invalid input`;break;case B.invalid_intersection_types:n=`Intersection results could not be merged`;break;case B.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case B.not_finite:n=`Number must be finite`;break;default:n=t.defaultError,R.assertNever(e)}return{message:n}};let ts=es;function ns(){return ts}const rs=e=>{let{data:t,path:n,errorMaps:r,issueData:i}=e,a=[...n,...i.path||[]],o={...i,path:a};if(i.message!==void 0)return{...i,path:a,message:i.message};let s=``,c=r.filter(e=>!!e).slice().reverse();for(let e of c)s=e(o,{data:t,defaultError:s}).message;return{...i,path:a,message:s}};function V(e,t){let n=ns(),r=rs({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===es?void 0:es].filter(e=>!!e)});e.common.issues.push(r)}var is=class e{constructor(){this.value=`valid`}dirty(){this.value===`valid`&&(this.value=`dirty`)}abort(){this.value!==`aborted`&&(this.value=`aborted`)}static mergeArray(e,t){let n=[];for(let r of t){if(r.status===`aborted`)return H;r.status===`dirty`&&e.dirty(),n.push(r.value)}return{status:e.value,value:n}}static async mergeObjectAsync(t,n){let r=[];for(let e of n){let t=await e.key,n=await e.value;r.push({key:t,value:n})}return e.mergeObjectSync(t,r)}static mergeObjectSync(e,t){let n={};for(let r of t){let{key:t,value:i}=r;if(t.status===`aborted`||i.status===`aborted`)return H;t.status===`dirty`&&e.dirty(),i.status===`dirty`&&e.dirty(),t.value!==`__proto__`&&(i.value!==void 0||r.alwaysSet)&&(n[t.value]=i.value)}return{status:e.value,value:n}}};const H=Object.freeze({status:`aborted`}),as=e=>({status:`dirty`,value:e}),os=e=>({status:`valid`,value:e}),ss=e=>e.status===`aborted`,cs=e=>e.status===`dirty`,ls=e=>e.status===`valid`,us=e=>typeof Promise<`u`&&e instanceof Promise;var U;(function(e){e.errToObj=e=>typeof e==`string`?{message:e}:e||{},e.toString=e=>typeof e==`string`?e:e?.message})(U||={});var ds=class{constructor(e,t,n,r){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}};const fs=(e,t)=>{if(ls(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error(`Validation failed but no issues detected.`);return{success:!1,get error(){return this._error||=new $o(e.common.issues),this._error}}};function W(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(t,i)=>{let{message:a}=e;return t.code===`invalid_enum_value`?{message:a??i.defaultError}:i.data===void 0?{message:a??r??i.defaultError}:t.code===`invalid_type`?{message:a??n??i.defaultError}:{message:i.defaultError}},description:i}}var G=class{get description(){return this._def.description}_getType(e){return Qo(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:Qo(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new is,ctx:{common:e.parent.common,data:e.data,parsedType:Qo(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(us(t))throw Error(`Synchronous parse encountered promise.`);return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qo(e)};return fs(n,this._parseSync({data:e,path:n.path,parent:n}))}"~validate"(e){let t={common:{issues:[],async:!!this[`~standard`].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qo(e)};if(!this[`~standard`].async)try{let n=this._parseSync({data:e,path:[],parent:t});return ls(n)?{value:n.value}:{issues:t.common.issues}}catch(e){e?.message?.toLowerCase()?.includes(`encountered`)&&(this[`~standard`].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(e=>ls(e)?{value:e.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qo(e)},r=this._parse({data:e,path:n.path,parent:n});return fs(n,await(us(r)?r:Promise.resolve(r)))}refine(e,t){let n=e=>typeof t==`string`||t===void 0?{message:t}:typeof t==`function`?t(e):t;return this._refinement((t,r)=>{let i=e(t),a=()=>r.addIssue({code:B.custom,...n(t)});return typeof Promise<`u`&&i instanceof Promise?i.then(e=>e?!0:(a(),!1)):i?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,r)=>e(n)?!0:(r.addIssue(typeof t==`function`?t(n,r):t),!1))}_refinement(e){return new mc({schema:this,typeName:K.ZodEffects,effect:{type:`refinement`,refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this[`~standard`]={version:1,vendor:`zod`,validate:e=>this[`~validate`](e)}}optional(){return hc.create(this,this._def)}nullable(){return gc.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Ys.create(this)}promise(){return pc.create(this,this._def)}or(e){return Qs.create([this,e],this._def)}and(e){return nc.create(this,e,this._def)}transform(e){return new mc({...W(this._def),schema:this,typeName:K.ZodEffects,effect:{type:`transform`,transform:e}})}default(e){let t=typeof e==`function`?e:()=>e;return new _c({...W(this._def),innerType:this,defaultValue:t,typeName:K.ZodDefault})}brand(){return new bc({typeName:K.ZodBranded,type:this,...W(this._def)})}catch(e){let t=typeof e==`function`?e:()=>e;return new vc({...W(this._def),innerType:this,catchValue:t,typeName:K.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return xc.create(this,e)}readonly(){return Sc.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}};const ps=/^c[^\s-]{8,}$/i,ms=/^[0-9a-z]+$/,hs=/^[0-9A-HJKMNP-TV-Z]{26}$/i,gs=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,_s=/^[a-z0-9_-]{21}$/i,vs=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,ys=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,bs=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i;let xs;const Ss=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Cs=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ws=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Ts=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Es=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Ds=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Os=`((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`,ks=RegExp(`^${Os}$`);function As(e){let t=`[0-5]\\d`;e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision??(t=`${t}(\\.\\d+)?`);let n=e.precision?`+`:`?`;return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function js(e){return RegExp(`^${As(e)}$`)}function Ms(e){let t=`${Os}T${As(e)}`,n=[];return n.push(e.local?`Z?`:`Z`),e.offset&&n.push(`([+-]\\d{2}:?\\d{2})`),t=`${t}(${n.join(`|`)})`,RegExp(`^${t}$`)}function Ns(e,t){return!!((t===`v4`||!t)&&Ss.test(e)||(t===`v6`||!t)&&ws.test(e))}function Ps(e,t){if(!vs.test(e))return!1;try{let[n]=e.split(`.`);if(!n)return!1;let r=n.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(n.length+(4-n.length%4)%4,`=`),i=JSON.parse(atob(r));return!(typeof i!=`object`||!i||`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&i.alg!==t)}catch{return!1}}function Fs(e,t){return!!((t===`v4`||!t)&&Cs.test(e)||(t===`v6`||!t)&&Ts.test(e))}var Is=class e extends G{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==z.string){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.string,received:t.parsedType}),H}let t=new is,n;for(let r of this._def.checks)if(r.kind===`min`)e.data.length<r.value&&(n=this._getOrReturnCtx(e,n),V(n,{code:B.too_small,minimum:r.value,type:`string`,inclusive:!0,exact:!1,message:r.message}),t.dirty());else if(r.kind===`max`)e.data.length>r.value&&(n=this._getOrReturnCtx(e,n),V(n,{code:B.too_big,maximum:r.value,type:`string`,inclusive:!0,exact:!1,message:r.message}),t.dirty());else if(r.kind===`length`){let i=e.data.length>r.value,a=e.data.length<r.value;(i||a)&&(n=this._getOrReturnCtx(e,n),i?V(n,{code:B.too_big,maximum:r.value,type:`string`,inclusive:!0,exact:!0,message:r.message}):a&&V(n,{code:B.too_small,minimum:r.value,type:`string`,inclusive:!0,exact:!0,message:r.message}),t.dirty())}else if(r.kind===`email`)bs.test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`email`,code:B.invalid_string,message:r.message}),t.dirty());else if(r.kind===`emoji`)xs||=RegExp(`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,`u`),xs.test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`emoji`,code:B.invalid_string,message:r.message}),t.dirty());else if(r.kind===`uuid`)gs.test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`uuid`,code:B.invalid_string,message:r.message}),t.dirty());else if(r.kind===`nanoid`)_s.test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`nanoid`,code:B.invalid_string,message:r.message}),t.dirty());else if(r.kind===`cuid`)ps.test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`cuid`,code:B.invalid_string,message:r.message}),t.dirty());else if(r.kind===`cuid2`)ms.test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`cuid2`,code:B.invalid_string,message:r.message}),t.dirty());else if(r.kind===`ulid`)hs.test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`ulid`,code:B.invalid_string,message:r.message}),t.dirty());else if(r.kind===`url`)try{new URL(e.data)}catch{n=this._getOrReturnCtx(e,n),V(n,{validation:`url`,code:B.invalid_string,message:r.message}),t.dirty()}else r.kind===`regex`?(r.regex.lastIndex=0,r.regex.test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`regex`,code:B.invalid_string,message:r.message}),t.dirty())):r.kind===`trim`?e.data=e.data.trim():r.kind===`includes`?e.data.includes(r.value,r.position)||(n=this._getOrReturnCtx(e,n),V(n,{code:B.invalid_string,validation:{includes:r.value,position:r.position},message:r.message}),t.dirty()):r.kind===`toLowerCase`?e.data=e.data.toLowerCase():r.kind===`toUpperCase`?e.data=e.data.toUpperCase():r.kind===`startsWith`?e.data.startsWith(r.value)||(n=this._getOrReturnCtx(e,n),V(n,{code:B.invalid_string,validation:{startsWith:r.value},message:r.message}),t.dirty()):r.kind===`endsWith`?e.data.endsWith(r.value)||(n=this._getOrReturnCtx(e,n),V(n,{code:B.invalid_string,validation:{endsWith:r.value},message:r.message}),t.dirty()):r.kind===`datetime`?Ms(r).test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{code:B.invalid_string,validation:`datetime`,message:r.message}),t.dirty()):r.kind===`date`?ks.test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{code:B.invalid_string,validation:`date`,message:r.message}),t.dirty()):r.kind===`time`?js(r).test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{code:B.invalid_string,validation:`time`,message:r.message}),t.dirty()):r.kind===`duration`?ys.test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`duration`,code:B.invalid_string,message:r.message}),t.dirty()):r.kind===`ip`?Ns(e.data,r.version)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`ip`,code:B.invalid_string,message:r.message}),t.dirty()):r.kind===`jwt`?Ps(e.data,r.alg)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`jwt`,code:B.invalid_string,message:r.message}),t.dirty()):r.kind===`cidr`?Fs(e.data,r.version)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`cidr`,code:B.invalid_string,message:r.message}),t.dirty()):r.kind===`base64`?Es.test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`base64`,code:B.invalid_string,message:r.message}),t.dirty()):r.kind===`base64url`?Ds.test(e.data)||(n=this._getOrReturnCtx(e,n),V(n,{validation:`base64url`,code:B.invalid_string,message:r.message}),t.dirty()):R.assertNever(r);return{status:t.value,value:e.data}}_regex(e,t,n){return this.refinement(t=>e.test(t),{validation:t,code:B.invalid_string,...U.errToObj(n)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(e){return this._addCheck({kind:`email`,...U.errToObj(e)})}url(e){return this._addCheck({kind:`url`,...U.errToObj(e)})}emoji(e){return this._addCheck({kind:`emoji`,...U.errToObj(e)})}uuid(e){return this._addCheck({kind:`uuid`,...U.errToObj(e)})}nanoid(e){return this._addCheck({kind:`nanoid`,...U.errToObj(e)})}cuid(e){return this._addCheck({kind:`cuid`,...U.errToObj(e)})}cuid2(e){return this._addCheck({kind:`cuid2`,...U.errToObj(e)})}ulid(e){return this._addCheck({kind:`ulid`,...U.errToObj(e)})}base64(e){return this._addCheck({kind:`base64`,...U.errToObj(e)})}base64url(e){return this._addCheck({kind:`base64url`,...U.errToObj(e)})}jwt(e){return this._addCheck({kind:`jwt`,...U.errToObj(e)})}ip(e){return this._addCheck({kind:`ip`,...U.errToObj(e)})}cidr(e){return this._addCheck({kind:`cidr`,...U.errToObj(e)})}datetime(e){return typeof e==`string`?this._addCheck({kind:`datetime`,precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:`datetime`,precision:e?.precision===void 0?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...U.errToObj(e?.message)})}date(e){return this._addCheck({kind:`date`,message:e})}time(e){return typeof e==`string`?this._addCheck({kind:`time`,precision:null,message:e}):this._addCheck({kind:`time`,precision:e?.precision===void 0?null:e?.precision,...U.errToObj(e?.message)})}duration(e){return this._addCheck({kind:`duration`,...U.errToObj(e)})}regex(e,t){return this._addCheck({kind:`regex`,regex:e,...U.errToObj(t)})}includes(e,t){return this._addCheck({kind:`includes`,value:e,position:t?.position,...U.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:`startsWith`,value:e,...U.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:`endsWith`,value:e,...U.errToObj(t)})}min(e,t){return this._addCheck({kind:`min`,value:e,...U.errToObj(t)})}max(e,t){return this._addCheck({kind:`max`,value:e,...U.errToObj(t)})}length(e,t){return this._addCheck({kind:`length`,value:e,...U.errToObj(t)})}nonempty(e){return this.min(1,U.errToObj(e))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:`trim`}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toLowerCase`}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toUpperCase`}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind===`datetime`)}get isDate(){return!!this._def.checks.find(e=>e.kind===`date`)}get isTime(){return!!this._def.checks.find(e=>e.kind===`time`)}get isDuration(){return!!this._def.checks.find(e=>e.kind===`duration`)}get isEmail(){return!!this._def.checks.find(e=>e.kind===`email`)}get isURL(){return!!this._def.checks.find(e=>e.kind===`url`)}get isEmoji(){return!!this._def.checks.find(e=>e.kind===`emoji`)}get isUUID(){return!!this._def.checks.find(e=>e.kind===`uuid`)}get isNANOID(){return!!this._def.checks.find(e=>e.kind===`nanoid`)}get isCUID(){return!!this._def.checks.find(e=>e.kind===`cuid`)}get isCUID2(){return!!this._def.checks.find(e=>e.kind===`cuid2`)}get isULID(){return!!this._def.checks.find(e=>e.kind===`ulid`)}get isIP(){return!!this._def.checks.find(e=>e.kind===`ip`)}get isCIDR(){return!!this._def.checks.find(e=>e.kind===`cidr`)}get isBase64(){return!!this._def.checks.find(e=>e.kind===`base64`)}get isBase64url(){return!!this._def.checks.find(e=>e.kind===`base64url`)}get minLength(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}};Is.create=e=>new Is({checks:[],typeName:K.ZodString,coerce:e?.coerce??!1,...W(e)});function Ls(e,t){let n=(e.toString().split(`.`)[1]||``).length,r=(t.toString().split(`.`)[1]||``).length,i=n>r?n:r;return Number.parseInt(e.toFixed(i).replace(`.`,``))%Number.parseInt(t.toFixed(i).replace(`.`,``))/10**i}var Rs=class e extends G{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==z.number){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.number,received:t.parsedType}),H}let t,n=new is;for(let r of this._def.checks)r.kind===`int`?R.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),V(t,{code:B.invalid_type,expected:`integer`,received:`float`,message:r.message}),n.dirty()):r.kind===`min`?(r.inclusive?e.data<r.value:e.data<=r.value)&&(t=this._getOrReturnCtx(e,t),V(t,{code:B.too_small,minimum:r.value,type:`number`,inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):r.kind===`max`?(r.inclusive?e.data>r.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),V(t,{code:B.too_big,maximum:r.value,type:`number`,inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):r.kind===`multipleOf`?Ls(e.data,r.value)!==0&&(t=this._getOrReturnCtx(e,t),V(t,{code:B.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):r.kind===`finite`?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),V(t,{code:B.not_finite,message:r.message}),n.dirty()):R.assertNever(r);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit(`min`,e,!0,U.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,U.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,U.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,U.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:U.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(e){return this._addCheck({kind:`int`,message:U.toString(e)})}positive(e){return this._addCheck({kind:`min`,value:0,inclusive:!1,message:U.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:0,inclusive:!1,message:U.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:0,inclusive:!0,message:U.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:0,inclusive:!0,message:U.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:U.toString(t)})}finite(e){return this._addCheck({kind:`finite`,message:U.toString(e)})}safe(e){return this._addCheck({kind:`min`,inclusive:!0,value:-(2**53-1),message:U.toString(e)})._addCheck({kind:`max`,inclusive:!0,value:2**53-1,message:U.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind===`int`||e.kind===`multipleOf`&&R.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks)if(n.kind===`finite`||n.kind===`int`||n.kind===`multipleOf`)return!0;else n.kind===`min`?(t===null||n.value>t)&&(t=n.value):n.kind===`max`&&(e===null||n.value<e)&&(e=n.value);return Number.isFinite(t)&&Number.isFinite(e)}};Rs.create=e=>new Rs({checks:[],typeName:K.ZodNumber,coerce:e?.coerce||!1,...W(e)});var zs=class e extends G{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==z.bigint)return this._getInvalidInput(e);let t,n=new is;for(let r of this._def.checks)r.kind===`min`?(r.inclusive?e.data<r.value:e.data<=r.value)&&(t=this._getOrReturnCtx(e,t),V(t,{code:B.too_small,type:`bigint`,minimum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):r.kind===`max`?(r.inclusive?e.data>r.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),V(t,{code:B.too_big,type:`bigint`,maximum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):r.kind===`multipleOf`?e.data%r.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),V(t,{code:B.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):R.assertNever(r);return{status:n.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.bigint,received:t.parsedType}),H}gte(e,t){return this.setLimit(`min`,e,!0,U.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,U.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,U.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,U.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:U.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!1,message:U.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!1,message:U.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!0,message:U.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!0,message:U.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:U.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}};zs.create=e=>new zs({checks:[],typeName:K.ZodBigInt,coerce:e?.coerce??!1,...W(e)});var Bs=class extends G{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==z.boolean){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.boolean,received:t.parsedType}),H}return os(e.data)}};Bs.create=e=>new Bs({typeName:K.ZodBoolean,coerce:e?.coerce||!1,...W(e)});var Vs=class e extends G{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==z.date){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.date,received:t.parsedType}),H}if(Number.isNaN(e.data.getTime()))return V(this._getOrReturnCtx(e),{code:B.invalid_date}),H;let t=new is,n;for(let r of this._def.checks)r.kind===`min`?e.data.getTime()<r.value&&(n=this._getOrReturnCtx(e,n),V(n,{code:B.too_small,message:r.message,inclusive:!0,exact:!1,minimum:r.value,type:`date`}),t.dirty()):r.kind===`max`?e.data.getTime()>r.value&&(n=this._getOrReturnCtx(e,n),V(n,{code:B.too_big,message:r.message,inclusive:!0,exact:!1,maximum:r.value,type:`date`}),t.dirty()):R.assertNever(r);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(e,t){return this._addCheck({kind:`min`,value:e.getTime(),message:U.toString(t)})}max(e,t){return this._addCheck({kind:`max`,value:e.getTime(),message:U.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e==null?null:new Date(e)}get maxDate(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e==null?null:new Date(e)}};Vs.create=e=>new Vs({checks:[],coerce:e?.coerce||!1,typeName:K.ZodDate,...W(e)});var Hs=class extends G{_parse(e){if(this._getType(e)!==z.symbol){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.symbol,received:t.parsedType}),H}return os(e.data)}};Hs.create=e=>new Hs({typeName:K.ZodSymbol,...W(e)});var Us=class extends G{_parse(e){if(this._getType(e)!==z.undefined){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.undefined,received:t.parsedType}),H}return os(e.data)}};Us.create=e=>new Us({typeName:K.ZodUndefined,...W(e)});var Ws=class extends G{_parse(e){if(this._getType(e)!==z.null){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.null,received:t.parsedType}),H}return os(e.data)}};Ws.create=e=>new Ws({typeName:K.ZodNull,...W(e)});var Gs=class extends G{constructor(){super(...arguments),this._any=!0}_parse(e){return os(e.data)}};Gs.create=e=>new Gs({typeName:K.ZodAny,...W(e)});var Ks=class extends G{constructor(){super(...arguments),this._unknown=!0}_parse(e){return os(e.data)}};Ks.create=e=>new Ks({typeName:K.ZodUnknown,...W(e)});var qs=class extends G{_parse(e){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.never,received:t.parsedType}),H}};qs.create=e=>new qs({typeName:K.ZodNever,...W(e)});var Js=class extends G{_parse(e){if(this._getType(e)!==z.undefined){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.void,received:t.parsedType}),H}return os(e.data)}};Js.create=e=>new Js({typeName:K.ZodVoid,...W(e)});var Ys=class e extends G{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),r=this._def;if(t.parsedType!==z.array)return V(t,{code:B.invalid_type,expected:z.array,received:t.parsedType}),H;if(r.exactLength!==null){let e=t.data.length>r.exactLength.value,i=t.data.length<r.exactLength.value;(e||i)&&(V(t,{code:e?B.too_big:B.too_small,minimum:i?r.exactLength.value:void 0,maximum:e?r.exactLength.value:void 0,type:`array`,inclusive:!0,exact:!0,message:r.exactLength.message}),n.dirty())}if(r.minLength!==null&&t.data.length<r.minLength.value&&(V(t,{code:B.too_small,minimum:r.minLength.value,type:`array`,inclusive:!0,exact:!1,message:r.minLength.message}),n.dirty()),r.maxLength!==null&&t.data.length>r.maxLength.value&&(V(t,{code:B.too_big,maximum:r.maxLength.value,type:`array`,inclusive:!0,exact:!1,message:r.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((e,n)=>r.type._parseAsync(new ds(t,e,t.path,n)))).then(e=>is.mergeArray(n,e));let i=[...t.data].map((e,n)=>r.type._parseSync(new ds(t,e,t.path,n)));return is.mergeArray(n,i)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:U.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:U.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:U.toString(n)}})}nonempty(e){return this.min(1,e)}};Ys.create=(e,t)=>new Ys({type:e,minLength:null,maxLength:null,exactLength:null,typeName:K.ZodArray,...W(t)});function Xs(e){if(e instanceof Zs){let t={};for(let n in e.shape){let r=e.shape[n];t[n]=hc.create(Xs(r))}return new Zs({...e._def,shape:()=>t})}else if(e instanceof Ys)return new Ys({...e._def,type:Xs(e.element)});else if(e instanceof hc)return hc.create(Xs(e.unwrap()));else if(e instanceof gc)return gc.create(Xs(e.unwrap()));else if(e instanceof rc)return rc.create(e.items.map(e=>Xs(e)));else return e}var Zs=class e extends G{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape();return this._cached={shape:e,keys:R.objectKeys(e)},this._cached}_parse(e){if(this._getType(e)!==z.object){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.object,received:t.parsedType}),H}let{status:t,ctx:n}=this._processInputParams(e),{shape:r,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof qs&&this._def.unknownKeys===`strip`))for(let e in n.data)i.includes(e)||a.push(e);let o=[];for(let e of i){let t=r[e],i=n.data[e];o.push({key:{status:`valid`,value:e},value:t._parse(new ds(n,i,n.path,e)),alwaysSet:e in n.data})}if(this._def.catchall instanceof qs){let e=this._def.unknownKeys;if(e===`passthrough`)for(let e of a)o.push({key:{status:`valid`,value:e},value:{status:`valid`,value:n.data[e]}});else if(e===`strict`)a.length>0&&(V(n,{code:B.unrecognized_keys,keys:a}),t.dirty());else if(e!==`strip`)throw Error(`Internal ZodObject error: invalid unknownKeys value.`)}else{let e=this._def.catchall;for(let t of a){let r=n.data[t];o.push({key:{status:`valid`,value:t},value:e._parse(new ds(n,r,n.path,t)),alwaysSet:t in n.data})}}return n.common.async?Promise.resolve().then(async()=>{let e=[];for(let t of o){let n=await t.key,r=await t.value;e.push({key:n,value:r,alwaysSet:t.alwaysSet})}return e}).then(e=>is.mergeObjectSync(t,e)):is.mergeObjectSync(t,o)}get shape(){return this._def.shape()}strict(t){return U.errToObj,new e({...this._def,unknownKeys:`strict`,...t===void 0?{}:{errorMap:(e,n)=>{let r=this._def.errorMap?.(e,n).message??n.defaultError;return e.code===`unrecognized_keys`?{message:U.errToObj(t).message??r}:{message:r}}}})}strip(){return new e({...this._def,unknownKeys:`strip`})}passthrough(){return new e({...this._def,unknownKeys:`passthrough`})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:K.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};for(let e of R.objectKeys(t))t[e]&&this.shape[e]&&(n[e]=this.shape[e]);return new e({...this._def,shape:()=>n})}omit(t){let n={};for(let e of R.objectKeys(this.shape))t[e]||(n[e]=this.shape[e]);return new e({...this._def,shape:()=>n})}deepPartial(){return Xs(this)}partial(t){let n={};for(let e of R.objectKeys(this.shape)){let r=this.shape[e];t&&!t[e]?n[e]=r:n[e]=r.optional()}return new e({...this._def,shape:()=>n})}required(t){let n={};for(let e of R.objectKeys(this.shape))if(t&&!t[e])n[e]=this.shape[e];else{let t=this.shape[e];for(;t instanceof hc;)t=t._def.innerType;n[e]=t}return new e({...this._def,shape:()=>n})}keyof(){return uc(R.objectKeys(this.shape))}};Zs.create=(e,t)=>new Zs({shape:()=>e,unknownKeys:`strip`,catchall:qs.create(),typeName:K.ZodObject,...W(t)}),Zs.strictCreate=(e,t)=>new Zs({shape:()=>e,unknownKeys:`strict`,catchall:qs.create(),typeName:K.ZodObject,...W(t)}),Zs.lazycreate=(e,t)=>new Zs({shape:e,unknownKeys:`strip`,catchall:qs.create(),typeName:K.ZodObject,...W(t)});var Qs=class extends G{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function r(e){for(let t of e)if(t.result.status===`valid`)return t.result;for(let n of e)if(n.result.status===`dirty`)return t.common.issues.push(...n.ctx.common.issues),n.result;let n=e.map(e=>new $o(e.ctx.common.issues));return V(t,{code:B.invalid_union,unionErrors:n}),H}if(t.common.async)return Promise.all(n.map(async e=>{let n={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:n}),ctx:n}})).then(r);{let e,r=[];for(let i of n){let n={...t,common:{...t.common,issues:[]},parent:null},a=i._parseSync({data:t.data,path:t.path,parent:n});if(a.status===`valid`)return a;a.status===`dirty`&&!e&&(e={result:a,ctx:n}),n.common.issues.length&&r.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;let i=r.map(e=>new $o(e));return V(t,{code:B.invalid_union,unionErrors:i}),H}}get options(){return this._def.options}};Qs.create=(e,t)=>new Qs({options:e,typeName:K.ZodUnion,...W(t)});const $s=e=>e instanceof cc?$s(e.schema):e instanceof mc?$s(e.innerType()):e instanceof lc?[e.value]:e instanceof dc?e.options:e instanceof fc?R.objectValues(e.enum):e instanceof _c?$s(e._def.innerType):e instanceof Us?[void 0]:e instanceof Ws?[null]:e instanceof hc?[void 0,...$s(e.unwrap())]:e instanceof gc?[null,...$s(e.unwrap())]:e instanceof bc||e instanceof Sc?$s(e.unwrap()):e instanceof vc?$s(e._def.innerType):[];var ec=class e extends G{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==z.object)return V(t,{code:B.invalid_type,expected:z.object,received:t.parsedType}),H;let n=this.discriminator,r=t.data[n],i=this.optionsMap.get(r);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(V(t,{code:B.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),H)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){let i=new Map;for(let e of n){let n=$s(e.shape[t]);if(!n.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let r of n){if(i.has(r))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(r)}`);i.set(r,e)}}return new e({typeName:K.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...W(r)})}};function tc(e,t){let n=Qo(e),r=Qo(t);if(e===t)return{valid:!0,data:e};if(n===z.object&&r===z.object){let n=R.objectKeys(t),r=R.objectKeys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=tc(e[n],t[n]);if(!r.valid)return{valid:!1};i[n]=r.data}return{valid:!0,data:i}}else if(n===z.array&&r===z.array){if(e.length!==t.length)return{valid:!1};let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=t[r],o=tc(i,a);if(!o.valid)return{valid:!1};n.push(o.data)}return{valid:!0,data:n}}else if(n===z.date&&r===z.date&&+e==+t)return{valid:!0,data:e};else return{valid:!1}}var nc=class extends G{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=(e,r)=>{if(ss(e)||ss(r))return H;let i=tc(e.value,r.value);return i.valid?((cs(e)||cs(r))&&t.dirty(),{status:t.value,value:i.data}):(V(n,{code:B.invalid_intersection_types}),H)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([e,t])=>r(e,t)):r(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};nc.create=(e,t,n)=>new nc({left:e,right:t,typeName:K.ZodIntersection,...W(n)});var rc=class e extends G{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==z.array)return V(n,{code:B.invalid_type,expected:z.array,received:n.parsedType}),H;if(n.data.length<this._def.items.length)return V(n,{code:B.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),H;!this._def.rest&&n.data.length>this._def.items.length&&(V(n,{code:B.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),t.dirty());let r=[...n.data].map((e,t)=>{let r=this._def.items[t]||this._def.rest;return r?r._parse(new ds(n,e,n.path,t)):null}).filter(e=>!!e);return n.common.async?Promise.all(r).then(e=>is.mergeArray(t,e)):is.mergeArray(t,r)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};rc.create=(e,t)=>{if(!Array.isArray(e))throw Error(`You must pass an array of schemas to z.tuple([ ... ])`);return new rc({items:e,typeName:K.ZodTuple,rest:null,...W(t)})};var ic=class e extends G{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==z.object)return V(n,{code:B.invalid_type,expected:z.object,received:n.parsedType}),H;let r=[],i=this._def.keyType,a=this._def.valueType;for(let e in n.data)r.push({key:i._parse(new ds(n,e,n.path,e)),value:a._parse(new ds(n,n.data[e],n.path,e)),alwaysSet:e in n.data});return n.common.async?is.mergeObjectAsync(t,r):is.mergeObjectSync(t,r)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof G?new e({keyType:t,valueType:n,typeName:K.ZodRecord,...W(r)}):new e({keyType:Is.create(),valueType:t,typeName:K.ZodRecord,...W(n)})}},ac=class extends G{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==z.map)return V(n,{code:B.invalid_type,expected:z.map,received:n.parsedType}),H;let r=this._def.keyType,i=this._def.valueType,a=[...n.data.entries()].map(([e,t],a)=>({key:r._parse(new ds(n,e,n.path,[a,`key`])),value:i._parse(new ds(n,t,n.path,[a,`value`]))}));if(n.common.async){let e=new Map;return Promise.resolve().then(async()=>{for(let n of a){let r=await n.key,i=await n.value;if(r.status===`aborted`||i.status===`aborted`)return H;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}})}else{let e=new Map;for(let n of a){let r=n.key,i=n.value;if(r.status===`aborted`||i.status===`aborted`)return H;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}}}};ac.create=(e,t,n)=>new ac({valueType:t,keyType:e,typeName:K.ZodMap,...W(n)});var oc=class e extends G{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==z.set)return V(n,{code:B.invalid_type,expected:z.set,received:n.parsedType}),H;let r=this._def;r.minSize!==null&&n.data.size<r.minSize.value&&(V(n,{code:B.too_small,minimum:r.minSize.value,type:`set`,inclusive:!0,exact:!1,message:r.minSize.message}),t.dirty()),r.maxSize!==null&&n.data.size>r.maxSize.value&&(V(n,{code:B.too_big,maximum:r.maxSize.value,type:`set`,inclusive:!0,exact:!1,message:r.maxSize.message}),t.dirty());let i=this._def.valueType;function a(e){let n=new Set;for(let r of e){if(r.status===`aborted`)return H;r.status===`dirty`&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}let o=[...n.data.values()].map((e,t)=>i._parse(new ds(n,e,n.path,t)));return n.common.async?Promise.all(o).then(e=>a(e)):a(o)}min(t,n){return new e({...this._def,minSize:{value:t,message:U.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:U.toString(n)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};oc.create=(e,t)=>new oc({valueType:e,minSize:null,maxSize:null,typeName:K.ZodSet,...W(t)});var sc=class e extends G{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==z.function)return V(t,{code:B.invalid_type,expected:z.function,received:t.parsedType}),H;function n(e,n){return rs({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,ns(),es].filter(e=>!!e),issueData:{code:B.invalid_arguments,argumentsError:n}})}function r(e,n){return rs({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,ns(),es].filter(e=>!!e),issueData:{code:B.invalid_return_type,returnTypeError:n}})}let i={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof pc){let e=this;return os(async function(...t){let o=new $o([]),s=await e._def.args.parseAsync(t,i).catch(e=>{throw o.addIssue(n(t,e)),o}),c=await Reflect.apply(a,this,s);return await e._def.returns._def.type.parseAsync(c,i).catch(e=>{throw o.addIssue(r(c,e)),o})})}else{let e=this;return os(function(...t){let o=e._def.args.safeParse(t,i);if(!o.success)throw new $o([n(t,o.error)]);let s=Reflect.apply(a,this,o.data),c=e._def.returns.safeParse(s,i);if(!c.success)throw new $o([r(s,c.error)]);return c.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:rc.create(t).rest(Ks.create())})}returns(t){return new e({...this._def,returns:t})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(t,n,r){return new e({args:t||rc.create([]).rest(Ks.create()),returns:n||Ks.create(),typeName:K.ZodFunction,...W(r)})}},cc=class extends G{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};cc.create=(e,t)=>new cc({getter:e,typeName:K.ZodLazy,...W(t)});var lc=class extends G{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return V(t,{received:t.data,code:B.invalid_literal,expected:this._def.value}),H}return{status:`valid`,value:e.data}}get value(){return this._def.value}};lc.create=(e,t)=>new lc({value:e,typeName:K.ZodLiteral,...W(t)});function uc(e,t){return new dc({values:e,typeName:K.ZodEnum,...W(t)})}var dc=class e extends G{_parse(e){if(typeof e.data!=`string`){let t=this._getOrReturnCtx(e),n=this._def.values;return V(t,{expected:R.joinValues(n),received:t.parsedType,code:B.invalid_type}),H}if(this._cache||=new Set(this._def.values),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return V(t,{received:t.data,code:B.invalid_enum_value,options:n}),H}return os(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter(e=>!t.includes(e)),{...this._def,...n})}};dc.create=uc;var fc=class extends G{_parse(e){let t=R.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==z.string&&n.parsedType!==z.number){let e=R.objectValues(t);return V(n,{expected:R.joinValues(e),received:n.parsedType,code:B.invalid_type}),H}if(this._cache||=new Set(R.getValidEnumValues(this._def.values)),!this._cache.has(e.data)){let e=R.objectValues(t);return V(n,{received:n.data,code:B.invalid_enum_value,options:e}),H}return os(e.data)}get enum(){return this._def.values}};fc.create=(e,t)=>new fc({values:e,typeName:K.ZodNativeEnum,...W(t)});var pc=class extends G{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);return t.parsedType!==z.promise&&t.common.async===!1?(V(t,{code:B.invalid_type,expected:z.promise,received:t.parsedType}),H):os((t.parsedType===z.promise?t.data:Promise.resolve(t.data)).then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}};pc.create=(e,t)=>new pc({type:e,typeName:K.ZodPromise,...W(t)});var mc=class extends G{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===K.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=this._def.effect||null,i={addIssue:e=>{V(n,e),e.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),r.type===`preprocess`){let e=r.transform(n.data,i);if(n.common.async)return Promise.resolve(e).then(async e=>{if(t.value===`aborted`)return H;let r=await this._def.schema._parseAsync({data:e,path:n.path,parent:n});return r.status===`aborted`?H:r.status===`dirty`||t.value===`dirty`?as(r.value):r});{if(t.value===`aborted`)return H;let r=this._def.schema._parseSync({data:e,path:n.path,parent:n});return r.status===`aborted`?H:r.status===`dirty`||t.value===`dirty`?as(r.value):r}}if(r.type===`refinement`){let e=e=>{let t=r.refinement(e,i);if(n.common.async)return Promise.resolve(t);if(t instanceof Promise)throw Error(`Async refinement encountered during synchronous parse operation. Use .parseAsync instead.`);return e};if(n.common.async===!1){let r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return r.status===`aborted`?H:(r.status===`dirty`&&t.dirty(),e(r.value),{status:t.value,value:r.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(n=>n.status===`aborted`?H:(n.status===`dirty`&&t.dirty(),e(n.value).then(()=>({status:t.value,value:n.value}))))}if(r.type===`transform`)if(n.common.async===!1){let e=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!ls(e))return H;let a=r.transform(e.value,i);if(a instanceof Promise)throw Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(e=>ls(e)?Promise.resolve(r.transform(e.value,i)).then(e=>({status:t.value,value:e})):H);R.assertNever(r)}};mc.create=(e,t,n)=>new mc({schema:e,typeName:K.ZodEffects,effect:t,...W(n)}),mc.createWithPreprocess=(e,t,n)=>new mc({schema:t,effect:{type:`preprocess`,transform:e},typeName:K.ZodEffects,...W(n)});var hc=class extends G{_parse(e){return this._getType(e)===z.undefined?os(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};hc.create=(e,t)=>new hc({innerType:e,typeName:K.ZodOptional,...W(t)});var gc=class extends G{_parse(e){return this._getType(e)===z.null?os(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};gc.create=(e,t)=>new gc({innerType:e,typeName:K.ZodNullable,...W(t)});var _c=class extends G{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===z.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};_c.create=(e,t)=>new _c({innerType:e,typeName:K.ZodDefault,defaultValue:typeof t.default==`function`?t.default:()=>t.default,...W(t)});var vc=class extends G{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},r=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return us(r)?r.then(e=>({status:`valid`,value:e.status===`valid`?e.value:this._def.catchValue({get error(){return new $o(n.common.issues)},input:n.data})})):{status:`valid`,value:r.status===`valid`?r.value:this._def.catchValue({get error(){return new $o(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};vc.create=(e,t)=>new vc({innerType:e,typeName:K.ZodCatch,catchValue:typeof t.catch==`function`?t.catch:()=>t.catch,...W(t)});var yc=class extends G{_parse(e){if(this._getType(e)!==z.nan){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.nan,received:t.parsedType}),H}return{status:`valid`,value:e.data}}};yc.create=e=>new yc({typeName:K.ZodNaN,...W(e)});var bc=class extends G{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},xc=class e extends G{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let e=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?H:e.status===`dirty`?(t.dirty(),as(e.value)):this._def.out._parseAsync({data:e.value,path:n.path,parent:n})})();{let e=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?H:e.status===`dirty`?(t.dirty(),{status:`dirty`,value:e.value}):this._def.out._parseSync({data:e.value,path:n.path,parent:n})}}static create(t,n){return new e({in:t,out:n,typeName:K.ZodPipeline})}},Sc=class extends G{_parse(e){let t=this._def.innerType._parse(e),n=e=>(ls(e)&&(e.value=Object.freeze(e.value)),e);return us(t)?t.then(e=>n(e)):n(t)}unwrap(){return this._def.innerType}};Sc.create=(e,t)=>new Sc({innerType:e,typeName:K.ZodReadonly,...W(t)}),Zs.lazycreate;var K;(function(e){e.ZodString=`ZodString`,e.ZodNumber=`ZodNumber`,e.ZodNaN=`ZodNaN`,e.ZodBigInt=`ZodBigInt`,e.ZodBoolean=`ZodBoolean`,e.ZodDate=`ZodDate`,e.ZodSymbol=`ZodSymbol`,e.ZodUndefined=`ZodUndefined`,e.ZodNull=`ZodNull`,e.ZodAny=`ZodAny`,e.ZodUnknown=`ZodUnknown`,e.ZodNever=`ZodNever`,e.ZodVoid=`ZodVoid`,e.ZodArray=`ZodArray`,e.ZodObject=`ZodObject`,e.ZodUnion=`ZodUnion`,e.ZodDiscriminatedUnion=`ZodDiscriminatedUnion`,e.ZodIntersection=`ZodIntersection`,e.ZodTuple=`ZodTuple`,e.ZodRecord=`ZodRecord`,e.ZodMap=`ZodMap`,e.ZodSet=`ZodSet`,e.ZodFunction=`ZodFunction`,e.ZodLazy=`ZodLazy`,e.ZodLiteral=`ZodLiteral`,e.ZodEnum=`ZodEnum`,e.ZodEffects=`ZodEffects`,e.ZodNativeEnum=`ZodNativeEnum`,e.ZodOptional=`ZodOptional`,e.ZodNullable=`ZodNullable`,e.ZodDefault=`ZodDefault`,e.ZodCatch=`ZodCatch`,e.ZodPromise=`ZodPromise`,e.ZodBranded=`ZodBranded`,e.ZodPipeline=`ZodPipeline`,e.ZodReadonly=`ZodReadonly`})(K||={}),Is.create,Rs.create,yc.create,zs.create,Bs.create,Vs.create,Hs.create,Us.create,Ws.create,Gs.create,Ks.create,qs.create,Js.create,Ys.create;const Cc=Zs.create;Zs.strictCreate,Qs.create,ec.create,nc.create,rc.create,ic.create,ac.create,oc.create,sc.create,cc.create,lc.create,dc.create,fc.create,pc.create,mc.create,hc.create,gc.create,mc.createWithPreprocess,xc.create;const wc=u(`ZodMiniType`,(e,t)=>{if(!e._zod)throw Error(`Uninitialized schema in ZodMiniType.`);h.init(e,t),e.def=t,e.type=t.type,e.parse=(t,n)=>ne(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>te(e,t,n),e.parseAsync=async(t,n)=>a(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>p(e,t,n),e.check=(...n)=>e.clone({...t,checks:[...t.checks??[],...n.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]},{parent:!0}),e.with=e.check,e.clone=(t,n)=>m(e,t,n),e.brand=()=>e,e.register=((t,n)=>(t.add(e,n),e)),e.apply=t=>t(e)}),Tc=u(`ZodMiniObject`,(e,t)=>{s.init(e,t),wc.init(e,t),g(e,`shape`,()=>t.shape)});function Ec(e,t){return new Tc({type:`object`,shape:e??{},...l(t)})}function Dc(e){return!!e._zod}function Oc(e){let t=Object.values(e);if(t.length===0)return Ec({});let n=t.every(Dc),r=t.every(e=>!Dc(e));if(n)return Ec(e);if(r)return Cc(e);throw Error(`Mixed Zod versions detected in object shape.`)}function kc(e,t){return Dc(e)?te(e,t):e.safeParse(t)}async function Ac(e,t){return Dc(e)?await p(e,t):await e.safeParseAsync(t)}function jc(e){if(!e)return;let t;if(t=Dc(e)?e._zod?.def?.shape:e.shape,t){if(typeof t==`function`)try{return t()}catch{return}return t}}function Mc(e){if(e){if(typeof e==`object`){let t=e,n=e;if(!t._def&&!n._zod){let t=Object.values(e);if(t.length>0&&t.every(e=>typeof e==`object`&&!!e&&(e._def!==void 0||e._zod!==void 0||typeof e.parse==`function`)))return Oc(e)}}if(Dc(e)){let t=e._zod?.def;if(t&&(t.type===`object`||t.shape!==void 0))return e}else if(e.shape!==void 0)return e}}function Nc(e){if(e&&typeof e==`object`){if(`message`in e&&typeof e.message==`string`)return e.message;if(`issues`in e&&Array.isArray(e.issues)&&e.issues.length>0){let t=e.issues[0];if(t&&typeof t==`object`&&`message`in t)return String(t.message)}try{return JSON.stringify(e)}catch{return String(e)}}return String(e)}function Pc(e){return e.description}function Fc(e){if(Dc(e))return e._zod?.def?.type===`optional`;let t=e;return typeof e.isOptional==`function`?e.isOptional():t._def?.typeName===`ZodOptional`}function Ic(e){if(Dc(e)){let t=e._zod?.def;if(t){if(t.value!==void 0)return t.value;if(Array.isArray(t.values)&&t.values.length>0)return t.values[0]}}let t=e._def;if(t){if(t.value!==void 0)return t.value;if(Array.isArray(t.values)&&t.values.length>0)return t.values[0]}let n=e.value;if(n!==void 0)return n}const Lc=`2025-11-25`,Rc=[Lc,`2025-06-18`,`2025-03-26`,`2024-11-05`,`2024-10-07`],zc=`io.modelcontextprotocol/related-task`,Bc=oe(e=>e!==null&&(typeof e==`object`||typeof e==`function`)),Vc=j([x(),E().int()]),Hc=x();re({ttl:E().optional(),pollInterval:E().optional()});const Uc=T({ttl:E().optional()}),Wc=T({taskId:x()}),Gc=re({progressToken:Vc.optional(),[zc]:Wc.optional()}),Kc=T({_meta:Gc.optional()}),qc=Kc.extend({task:Uc.optional()}),Jc=e=>qc.safeParse(e).success,Yc=T({method:x(),params:Kc.loose().optional()}),Xc=T({_meta:Gc.optional()}),Zc=T({method:x(),params:Xc.loose().optional()}),Qc=re({_meta:Gc.optional()}),$c=j([x(),E().int()]),el=T({jsonrpc:k(`2.0`),id:$c,...Yc.shape}).strict(),tl=e=>el.safeParse(e).success,nl=T({jsonrpc:k(`2.0`),...Zc.shape}).strict(),rl=e=>nl.safeParse(e).success,il=T({jsonrpc:k(`2.0`),id:$c,result:Qc}).strict(),al=e=>il.safeParse(e).success;var q;(function(e){e[e.ConnectionClosed=-32e3]=`ConnectionClosed`,e[e.RequestTimeout=-32001]=`RequestTimeout`,e[e.ParseError=-32700]=`ParseError`,e[e.InvalidRequest=-32600]=`InvalidRequest`,e[e.MethodNotFound=-32601]=`MethodNotFound`,e[e.InvalidParams=-32602]=`InvalidParams`,e[e.InternalError=-32603]=`InternalError`,e[e.UrlElicitationRequired=-32042]=`UrlElicitationRequired`})(q||={});const ol=T({jsonrpc:k(`2.0`),id:$c.optional(),error:T({code:E().int(),message:x(),data:v().optional()})}).strict(),sl=e=>ol.safeParse(e).success,cl=j([el,nl,il,ol]);j([il,ol]);const ll=Qc.strict(),ul=Xc.extend({requestId:$c.optional(),reason:x().optional()}),dl=Zc.extend({method:k(`notifications/cancelled`),params:ul}),fl=T({icons:S(T({src:x(),mimeType:x().optional(),sizes:S(x()).optional(),theme:O([`light`,`dark`]).optional()})).optional()}),pl=T({name:x(),title:x().optional()}),ml=pl.extend({...pl.shape,...fl.shape,version:x(),websiteUrl:x().optional(),description:x().optional()}),hl=se(e=>e&&typeof e==`object`&&!Array.isArray(e)&&Object.keys(e).length===0?{form:{}}:e,w(T({form:w(T({applyDefaults:D().optional()}),N(x(),v())).optional(),url:Bc.optional()}),N(x(),v()).optional())),gl=re({list:Bc.optional(),cancel:Bc.optional(),requests:re({sampling:re({createMessage:Bc.optional()}).optional(),elicitation:re({create:Bc.optional()}).optional()}).optional()}),_l=re({list:Bc.optional(),cancel:Bc.optional(),requests:re({tools:re({call:Bc.optional()}).optional()}).optional()}),vl=T({experimental:N(x(),Bc).optional(),sampling:T({context:Bc.optional(),tools:Bc.optional()}).optional(),elicitation:hl.optional(),roots:T({listChanged:D().optional()}).optional(),tasks:gl.optional(),extensions:N(x(),Bc).optional()}),yl=Kc.extend({protocolVersion:x(),capabilities:vl,clientInfo:ml}),bl=Yc.extend({method:k(`initialize`),params:yl}),xl=T({experimental:N(x(),Bc).optional(),logging:Bc.optional(),completions:Bc.optional(),prompts:T({listChanged:D().optional()}).optional(),resources:T({subscribe:D().optional(),listChanged:D().optional()}).optional(),tools:T({listChanged:D().optional()}).optional(),tasks:_l.optional(),extensions:N(x(),Bc).optional()}),Sl=Qc.extend({protocolVersion:x(),capabilities:xl,serverInfo:ml,instructions:x().optional()}),Cl=Zc.extend({method:k(`notifications/initialized`),params:Xc.optional()}),wl=Yc.extend({method:k(`ping`),params:Kc.optional()}),Tl=T({progress:E(),total:y(E()),message:y(x())}),El=T({...Xc.shape,...Tl.shape,progressToken:Vc}),Dl=Zc.extend({method:k(`notifications/progress`),params:El}),Ol=Kc.extend({cursor:Hc.optional()}),kl=Yc.extend({params:Ol.optional()}),Al=Qc.extend({nextCursor:Hc.optional()}),jl=O([`working`,`input_required`,`completed`,`failed`,`cancelled`]),Ml=T({taskId:x(),status:jl,ttl:j([E(),ae()]),createdAt:x(),lastUpdatedAt:x(),pollInterval:y(E()),statusMessage:y(x())}),Nl=Qc.extend({task:Ml}),Pl=Xc.merge(Ml),Fl=Zc.extend({method:k(`notifications/tasks/status`),params:Pl}),Il=Yc.extend({method:k(`tasks/get`),params:Kc.extend({taskId:x()})}),Ll=Qc.merge(Ml),Rl=Yc.extend({method:k(`tasks/result`),params:Kc.extend({taskId:x()})});Qc.loose();const zl=kl.extend({method:k(`tasks/list`)}),Bl=Al.extend({tasks:S(Ml)}),Vl=Yc.extend({method:k(`tasks/cancel`),params:Kc.extend({taskId:x()})}),Hl=Qc.merge(Ml),Ul=T({uri:x(),mimeType:y(x()),_meta:N(x(),v()).optional()}),Wl=Ul.extend({text:x()}),Gl=x().refine(e=>{try{return atob(e),!0}catch{return!1}},{message:`Invalid Base64 string`}),Kl=Ul.extend({blob:Gl}),ql=O([`user`,`assistant`]),Jl=T({audience:S(ql).optional(),priority:E().min(0).max(1).optional(),lastModified:o({offset:!0}).optional()}),Yl=T({...pl.shape,...fl.shape,uri:x(),description:y(x()),mimeType:y(x()),size:y(E()),annotations:Jl.optional(),_meta:y(re({}))}),Xl=T({...pl.shape,...fl.shape,uriTemplate:x(),description:y(x()),mimeType:y(x()),annotations:Jl.optional(),_meta:y(re({}))}),Zl=kl.extend({method:k(`resources/list`)}),Ql=Al.extend({resources:S(Yl)}),$l=kl.extend({method:k(`resources/templates/list`)}),eu=Al.extend({resourceTemplates:S(Xl)}),tu=Kc.extend({uri:x()}),nu=tu,ru=Yc.extend({method:k(`resources/read`),params:nu}),iu=Qc.extend({contents:S(j([Wl,Kl]))}),au=Zc.extend({method:k(`notifications/resources/list_changed`),params:Xc.optional()}),ou=tu,su=Yc.extend({method:k(`resources/subscribe`),params:ou}),cu=tu,lu=Yc.extend({method:k(`resources/unsubscribe`),params:cu}),uu=Xc.extend({uri:x()}),du=Zc.extend({method:k(`notifications/resources/updated`),params:uu}),fu=T({name:x(),description:y(x()),required:y(D())}),pu=T({...pl.shape,...fl.shape,description:y(x()),arguments:y(S(fu)),_meta:y(re({}))}),mu=kl.extend({method:k(`prompts/list`)}),hu=Al.extend({prompts:S(pu)}),gu=Kc.extend({name:x(),arguments:N(x(),x()).optional()}),_u=Yc.extend({method:k(`prompts/get`),params:gu}),vu=T({type:k(`text`),text:x(),annotations:Jl.optional(),_meta:N(x(),v()).optional()}),yu=T({type:k(`image`),data:Gl,mimeType:x(),annotations:Jl.optional(),_meta:N(x(),v()).optional()}),bu=T({type:k(`audio`),data:Gl,mimeType:x(),annotations:Jl.optional(),_meta:N(x(),v()).optional()}),xu=T({type:k(`tool_use`),name:x(),id:x(),input:N(x(),v()),_meta:N(x(),v()).optional()}),Su=T({type:k(`resource`),resource:j([Wl,Kl]),annotations:Jl.optional(),_meta:N(x(),v()).optional()}),Cu=j([vu,yu,bu,Yl.extend({type:k(`resource_link`)}),Su]),wu=T({role:ql,content:Cu}),Tu=Qc.extend({description:x().optional(),messages:S(wu)}),Eu=Zc.extend({method:k(`notifications/prompts/list_changed`),params:Xc.optional()}),Du=T({title:x().optional(),readOnlyHint:D().optional(),destructiveHint:D().optional(),idempotentHint:D().optional(),openWorldHint:D().optional()}),Ou=T({taskSupport:O([`required`,`optional`,`forbidden`]).optional()}),ku=T({...pl.shape,...fl.shape,description:x().optional(),inputSchema:T({type:k(`object`),properties:N(x(),Bc).optional(),required:S(x()).optional()}).catchall(v()),outputSchema:T({type:k(`object`),properties:N(x(),Bc).optional(),required:S(x()).optional()}).catchall(v()).optional(),annotations:Du.optional(),execution:Ou.optional(),_meta:N(x(),v()).optional()}),Au=kl.extend({method:k(`tools/list`)}),ju=Al.extend({tools:S(ku)}),Mu=Qc.extend({content:S(Cu).default([]),structuredContent:N(x(),v()).optional(),isError:D().optional()});Mu.or(Qc.extend({toolResult:v()}));const Nu=qc.extend({name:x(),arguments:N(x(),v()).optional()}),Pu=Yc.extend({method:k(`tools/call`),params:Nu}),Fu=Zc.extend({method:k(`notifications/tools/list_changed`),params:Xc.optional()});T({autoRefresh:D().default(!0),debounceMs:E().int().nonnegative().default(300)});const Iu=O([`debug`,`info`,`notice`,`warning`,`error`,`critical`,`alert`,`emergency`]),Lu=Kc.extend({level:Iu}),Ru=Yc.extend({method:k(`logging/setLevel`),params:Lu}),zu=Xc.extend({level:Iu,logger:x().optional(),data:v()}),Bu=Zc.extend({method:k(`notifications/message`),params:zu}),Vu=T({hints:S(T({name:x().optional()})).optional(),costPriority:E().min(0).max(1).optional(),speedPriority:E().min(0).max(1).optional(),intelligencePriority:E().min(0).max(1).optional()}),Hu=T({mode:O([`auto`,`required`,`none`]).optional()}),Uu=T({type:k(`tool_result`),toolUseId:x().describe(`The unique identifier for the corresponding tool call.`),content:S(Cu).default([]),structuredContent:T({}).loose().optional(),isError:D().optional(),_meta:N(x(),v()).optional()}),Wu=C(`type`,[vu,yu,bu]),Gu=C(`type`,[vu,yu,bu,xu,Uu]),Ku=T({role:ql,content:j([Gu,S(Gu)]),_meta:N(x(),v()).optional()}),qu=qc.extend({messages:S(Ku),modelPreferences:Vu.optional(),systemPrompt:x().optional(),includeContext:O([`none`,`thisServer`,`allServers`]).optional(),temperature:E().optional(),maxTokens:E().int(),stopSequences:S(x()).optional(),metadata:Bc.optional(),tools:S(ku).optional(),toolChoice:Hu.optional()}),Ju=Yc.extend({method:k(`sampling/createMessage`),params:qu}),Yu=Qc.extend({model:x(),stopReason:y(O([`endTurn`,`stopSequence`,`maxTokens`]).or(x())),role:ql,content:Wu}),Xu=Qc.extend({model:x(),stopReason:y(O([`endTurn`,`stopSequence`,`maxTokens`,`toolUse`]).or(x())),role:ql,content:j([Gu,S(Gu)])}),Zu=T({type:k(`boolean`),title:x().optional(),description:x().optional(),default:D().optional()}),Qu=T({type:k(`string`),title:x().optional(),description:x().optional(),minLength:E().optional(),maxLength:E().optional(),format:O([`email`,`uri`,`date`,`date-time`]).optional(),default:x().optional()}),$u=T({type:O([`number`,`integer`]),title:x().optional(),description:x().optional(),minimum:E().optional(),maximum:E().optional(),default:E().optional()}),ed=T({type:k(`string`),title:x().optional(),description:x().optional(),enum:S(x()),default:x().optional()}),td=T({type:k(`string`),title:x().optional(),description:x().optional(),oneOf:S(T({const:x(),title:x()})),default:x().optional()}),nd=j([j([T({type:k(`string`),title:x().optional(),description:x().optional(),enum:S(x()),enumNames:S(x()).optional(),default:x().optional()}),j([ed,td]),j([T({type:k(`array`),title:x().optional(),description:x().optional(),minItems:E().optional(),maxItems:E().optional(),items:T({type:k(`string`),enum:S(x())}),default:S(x()).optional()}),T({type:k(`array`),title:x().optional(),description:x().optional(),minItems:E().optional(),maxItems:E().optional(),items:T({anyOf:S(T({const:x(),title:x()}))}),default:S(x()).optional()})])]),Zu,Qu,$u]),rd=j([qc.extend({mode:k(`form`).optional(),message:x(),requestedSchema:T({type:k(`object`),properties:N(x(),nd),required:S(x()).optional()})}),qc.extend({mode:k(`url`),message:x(),elicitationId:x(),url:x().url()})]),id=Yc.extend({method:k(`elicitation/create`),params:rd}),ad=Xc.extend({elicitationId:x()}),od=Zc.extend({method:k(`notifications/elicitation/complete`),params:ad}),sd=Qc.extend({action:O([`accept`,`decline`,`cancel`]),content:se(e=>e===null?void 0:e,N(x(),j([x(),E(),D(),S(x())])).optional())}),cd=T({type:k(`ref/resource`),uri:x()}),ld=T({type:k(`ref/prompt`),name:x()}),ud=Kc.extend({ref:j([ld,cd]),argument:T({name:x(),value:x()}),context:T({arguments:N(x(),x()).optional()}).optional()}),dd=Yc.extend({method:k(`completion/complete`),params:ud});function fd(e){if(e.params.ref.type!==`ref/prompt`)throw TypeError(`Expected CompleteRequestPrompt, but got ${e.params.ref.type}`)}function pd(e){if(e.params.ref.type!==`ref/resource`)throw TypeError(`Expected CompleteRequestResourceTemplate, but got ${e.params.ref.type}`)}const md=Qc.extend({completion:re({values:S(x()).max(100),total:y(E().int()),hasMore:y(D())})}),hd=T({uri:x().startsWith(`file://`),name:x().optional(),_meta:N(x(),v()).optional()}),gd=Yc.extend({method:k(`roots/list`),params:Kc.optional()}),_d=Qc.extend({roots:S(hd)}),vd=Zc.extend({method:k(`notifications/roots/list_changed`),params:Xc.optional()});j([wl,bl,dd,Ru,_u,mu,Zl,$l,ru,su,lu,Pu,Au,Il,Rl,zl,Vl]),j([dl,Dl,Cl,vd,Fl]),j([ll,Yu,Xu,sd,_d,Ll,Bl,Nl]),j([wl,Ju,id,gd,Il,Rl,zl,Vl]),j([dl,Dl,Bu,du,au,Fu,Eu,Fl,od]),j([ll,Sl,md,Tu,hu,Ql,eu,iu,Mu,ju,Ll,Bl,Nl]);var J=class e extends Error{constructor(e,t,n){super(`MCP error ${e}: ${t}`),this.code=e,this.data=n,this.name=`McpError`}static fromError(t,n,r){if(t===q.UrlElicitationRequired&&r){let e=r;if(e.elicitations)return new yd(e.elicitations,n)}return new e(t,n,r)}},yd=class extends J{constructor(e,t=`URL elicitation${e.length>1?`s`:``} required`){super(q.UrlElicitationRequired,t,{elicitations:e})}get elicitations(){return this.data?.elicitations??[]}};function bd(e){return e===`completed`||e===`failed`||e===`cancelled`}const xd=Symbol(`Let zodToJsonSchema decide on which parser to use`),Sd={name:void 0,$refStrategy:`root`,basePath:[`#`],effectStrategy:`input`,pipeStrategy:`all`,dateStrategy:`format:date-time`,mapStrategy:`entries`,removeAdditionalStrategy:`passthrough`,allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:`definitions`,target:`jsonSchema7`,strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:`escape`,applyRegexFlags:!1,emailStrategy:`format:email`,base64Strategy:`contentEncoding:base64`,nameStrategy:`ref`,openAiAnyTypeName:`OpenAiAnyType`},Cd=e=>typeof e==`string`?{...Sd,name:e}:{...Sd,...e},wd=e=>{let t=Cd(e),n=t.name===void 0?t.basePath:[...t.basePath,t.definitionPath,t.name];return{...t,flags:{hasReferencedOpenAiAnyType:!1},currentPath:n,propertyPath:void 0,seen:new Map(Object.entries(t.definitions).map(([e,n])=>[n._def,{def:n._def,path:[...t.basePath,t.definitionPath,e],jsonSchema:void 0}]))}};function Td(e,t,n,r){r?.errorMessages&&n&&(e.errorMessage={...e.errorMessage,[t]:n})}function Ed(e,t,n,r,i){e[t]=n,Td(e,t,r,i)}const Dd=(e,t)=>{let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];n++);return[(e.length-n).toString(),...t.slice(n)].join(`/`)};function Od(e){if(e.target!==`openAi`)return{};let t=[...e.basePath,e.definitionPath,e.openAiAnyTypeName];return e.flags.hasReferencedOpenAiAnyType=!0,{$ref:e.$refStrategy===`relative`?Dd(t,e.currentPath):t.join(`/`)}}function kd(e,t){let n={type:`array`};return e.type?._def&&e.type?._def?.typeName!==K.ZodAny&&(n.items=bf(e.type._def,{...t,currentPath:[...t.currentPath,`items`]})),e.minLength&&Ed(n,`minItems`,e.minLength.value,e.minLength.message,t),e.maxLength&&Ed(n,`maxItems`,e.maxLength.value,e.maxLength.message,t),e.exactLength&&(Ed(n,`minItems`,e.exactLength.value,e.exactLength.message,t),Ed(n,`maxItems`,e.exactLength.value,e.exactLength.message,t)),n}function Ad(e,t){let n={type:`integer`,format:`int64`};if(!e.checks)return n;for(let r of e.checks)switch(r.kind){case`min`:t.target===`jsonSchema7`?r.inclusive?Ed(n,`minimum`,r.value,r.message,t):Ed(n,`exclusiveMinimum`,r.value,r.message,t):(r.inclusive||(n.exclusiveMinimum=!0),Ed(n,`minimum`,r.value,r.message,t));break;case`max`:t.target===`jsonSchema7`?r.inclusive?Ed(n,`maximum`,r.value,r.message,t):Ed(n,`exclusiveMaximum`,r.value,r.message,t):(r.inclusive||(n.exclusiveMaximum=!0),Ed(n,`maximum`,r.value,r.message,t));break;case`multipleOf`:Ed(n,`multipleOf`,r.value,r.message,t);break}return n}function jd(){return{type:`boolean`}}function Md(e,t){return bf(e.type._def,t)}const Nd=(e,t)=>bf(e.innerType._def,t);function Pd(e,t,n){let r=n??t.dateStrategy;if(Array.isArray(r))return{anyOf:r.map((n,r)=>Pd(e,t,n))};switch(r){case`string`:case`format:date-time`:return{type:`string`,format:`date-time`};case`format:date`:return{type:`string`,format:`date`};case`integer`:return Fd(e,t)}}const Fd=(e,t)=>{let n={type:`integer`,format:`unix-time`};if(t.target===`openApi3`)return n;for(let r of e.checks)switch(r.kind){case`min`:Ed(n,`minimum`,r.value,r.message,t);break;case`max`:Ed(n,`maximum`,r.value,r.message,t);break}return n};function Id(e,t){return{...bf(e.innerType._def,t),default:e.defaultValue()}}function Ld(e,t){return t.effectStrategy===`input`?bf(e.schema._def,t):Od(t)}function Rd(e){return{type:`string`,enum:Array.from(e.values)}}const zd=e=>`type`in e&&e.type===`string`?!1:`allOf`in e;function Bd(e,t){let n=[bf(e.left._def,{...t,currentPath:[...t.currentPath,`allOf`,`0`]}),bf(e.right._def,{...t,currentPath:[...t.currentPath,`allOf`,`1`]})].filter(e=>!!e),r=t.target===`jsonSchema2019-09`?{unevaluatedProperties:!1}:void 0,i=[];return n.forEach(e=>{if(zd(e))i.push(...e.allOf),e.unevaluatedProperties===void 0&&(r=void 0);else{let t=e;if(`additionalProperties`in e&&e.additionalProperties===!1){let{additionalProperties:n,...r}=e;t=r}else r=void 0;i.push(t)}}),i.length?{allOf:i,...r}:void 0}function Vd(e,t){let n=typeof e.value;return n!==`bigint`&&n!==`number`&&n!==`boolean`&&n!==`string`?{type:Array.isArray(e.value)?`array`:`object`}:t.target===`openApi3`?{type:n===`bigint`?`integer`:n,enum:[e.value]}:{type:n===`bigint`?`integer`:n,const:e.value}}let Hd;const Ud={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>(Hd===void 0&&(Hd=RegExp(`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,`u`)),Hd),uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function Wd(e,t){let n={type:`string`};if(e.checks)for(let r of e.checks)switch(r.kind){case`min`:Ed(n,`minLength`,typeof n.minLength==`number`?Math.max(n.minLength,r.value):r.value,r.message,t);break;case`max`:Ed(n,`maxLength`,typeof n.maxLength==`number`?Math.min(n.maxLength,r.value):r.value,r.message,t);break;case`email`:switch(t.emailStrategy){case`format:email`:Jd(n,`email`,r.message,t);break;case`format:idn-email`:Jd(n,`idn-email`,r.message,t);break;case`pattern:zod`:Yd(n,Ud.email,r.message,t);break}break;case`url`:Jd(n,`uri`,r.message,t);break;case`uuid`:Jd(n,`uuid`,r.message,t);break;case`regex`:Yd(n,r.regex,r.message,t);break;case`cuid`:Yd(n,Ud.cuid,r.message,t);break;case`cuid2`:Yd(n,Ud.cuid2,r.message,t);break;case`startsWith`:Yd(n,RegExp(`^${Gd(r.value,t)}`),r.message,t);break;case`endsWith`:Yd(n,RegExp(`${Gd(r.value,t)}$`),r.message,t);break;case`datetime`:Jd(n,`date-time`,r.message,t);break;case`date`:Jd(n,`date`,r.message,t);break;case`time`:Jd(n,`time`,r.message,t);break;case`duration`:Jd(n,`duration`,r.message,t);break;case`length`:Ed(n,`minLength`,typeof n.minLength==`number`?Math.max(n.minLength,r.value):r.value,r.message,t),Ed(n,`maxLength`,typeof n.maxLength==`number`?Math.min(n.maxLength,r.value):r.value,r.message,t);break;case`includes`:Yd(n,RegExp(Gd(r.value,t)),r.message,t);break;case`ip`:r.version!==`v6`&&Jd(n,`ipv4`,r.message,t),r.version!==`v4`&&Jd(n,`ipv6`,r.message,t);break;case`base64url`:Yd(n,Ud.base64url,r.message,t);break;case`jwt`:Yd(n,Ud.jwt,r.message,t);break;case`cidr`:r.version!==`v6`&&Yd(n,Ud.ipv4Cidr,r.message,t),r.version!==`v4`&&Yd(n,Ud.ipv6Cidr,r.message,t);break;case`emoji`:Yd(n,Ud.emoji(),r.message,t);break;case`ulid`:Yd(n,Ud.ulid,r.message,t);break;case`base64`:switch(t.base64Strategy){case`format:binary`:Jd(n,`binary`,r.message,t);break;case`contentEncoding:base64`:Ed(n,`contentEncoding`,`base64`,r.message,t);break;case`pattern:zod`:Yd(n,Ud.base64,r.message,t);break}break;case`nanoid`:Yd(n,Ud.nanoid,r.message,t);case`toLowerCase`:case`toUpperCase`:case`trim`:break;default:(e=>{})(r)}return n}function Gd(e,t){return t.patternStrategy===`escape`?qd(e):e}const Kd=new Set(`ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789`);function qd(e){let t=``;for(let n=0;n<e.length;n++)Kd.has(e[n])||(t+=`\\`),t+=e[n];return t}function Jd(e,t,n,r){e.format||e.anyOf?.some(e=>e.format)?(e.anyOf||=[],e.format&&(e.anyOf.push({format:e.format,...e.errorMessage&&r.errorMessages&&{errorMessage:{format:e.errorMessage.format}}}),delete e.format,e.errorMessage&&(delete e.errorMessage.format,Object.keys(e.errorMessage).length===0&&delete e.errorMessage)),e.anyOf.push({format:t,...n&&r.errorMessages&&{errorMessage:{format:n}}})):Ed(e,`format`,t,n,r)}function Yd(e,t,n,r){e.pattern||e.allOf?.some(e=>e.pattern)?(e.allOf||=[],e.pattern&&(e.allOf.push({pattern:e.pattern,...e.errorMessage&&r.errorMessages&&{errorMessage:{pattern:e.errorMessage.pattern}}}),delete e.pattern,e.errorMessage&&(delete e.errorMessage.pattern,Object.keys(e.errorMessage).length===0&&delete e.errorMessage)),e.allOf.push({pattern:Xd(t,r),...n&&r.errorMessages&&{errorMessage:{pattern:n}}})):Ed(e,`pattern`,Xd(t,r),n,r)}function Xd(e,t){if(!t.applyRegexFlags||!e.flags)return e.source;let n={i:e.flags.includes(`i`),m:e.flags.includes(`m`),s:e.flags.includes(`s`)},r=n.i?e.source.toLowerCase():e.source,i=``,a=!1,o=!1,s=!1;for(let e=0;e<r.length;e++){if(a){i+=r[e],a=!1;continue}if(n.i){if(o){if(r[e].match(/[a-z]/)){s?(i+=r[e],i+=`${r[e-2]}-${r[e]}`.toUpperCase(),s=!1):r[e+1]===`-`&&r[e+2]?.match(/[a-z]/)?(i+=r[e],s=!0):i+=`${r[e]}${r[e].toUpperCase()}`;continue}}else if(r[e].match(/[a-z]/)){i+=`[${r[e]}${r[e].toUpperCase()}]`;continue}}if(n.m){if(r[e]===`^`){i+=`(^|(?<=[\r
|
|
30
30
|
]))`;continue}else if(r[e]===`$`){i+=`($|(?=[\r
|
|
@@ -203,47 +203,48 @@ superseded_by: <path-to-new-canonical-article>.md
|
|
|
203
203
|
- **Don't rewrite research prose verbatim** — canonical articles have a different voice (direct, decided) than research (exploratory, provisional)
|
|
204
204
|
- **Don't skip the supersedes / superseded_by links** — the audit trail matters for future readers
|
|
205
205
|
`}const ah=[`Promote research into a canonical article inside the project content directory. Canonical, not provisional — the output is the source of truth for future agents.`,``,`**Use when:**`,`- A team has made a decision after research and wants the outcome committed as canonical knowledge`,`- Compacting several provisional research notes into one authoritative article`,`- A developer asks to "consolidate" or "finalize" knowledge on a topic`,``,`**Triggers on:**`,`- "consolidate", "finalize", "promote to canonical", "make this official"`,`- User says the team has decided and wants the outcome written as canonical`,`- Research has stabilized and a destination article is needed`].join(`
|
|
206
|
-
`);function oh(e,t){e.tool(`consolidate`,ah,{topic:x().describe(`The topic to consolidate into a canonical article`),cwd:x().optional().describe(Hm)},async e=>{let n=await Qm(t.resolveCwd,t.config,e.cwd);return n.ok?Wm(ih(e.topic,n.config.content.dir),{previewUrl:null}):Z(`Error: ${n.error}`,!0)})}function sh(e){return e.split(`/`).map(encodeURIComponent).join(`/`)}function ch(e){return e.endsWith(`/`)?e.slice(0,-1):e}function lh(e){try{return new URL(e),!0}catch{return!1}}async function uh(e,t,n){let r=n??await t.resolveCwd(),i=await Zm(t.config,r),a=ge(i,r);return mh(e,{config:i,lockDir:he(a),contentDir:a})}function dh(e){try{let t=Se(e.lockDir);if(t&&t.port>0)return{baseUrl:`http://localhost:${t.port}`,port:t.port}}catch(t){process.stderr.write(`[preview-url] readUiLock failed at ${e.lockDir} while building ui block: ${t instanceof Error?t.message:String(t)}\n`)}return{baseUrl:null,port:null}}async function fh(e,t){let n=t??await e.resolveCwd(),r=await Zm(e.config,n),i=ge(r,n),a={config:r,lockDir:he(i),contentDir:i};return{resolve:e=>mh(e,a),ui:dh(a)}}function ph(e){let t=e.toLowerCase();return t.endsWith(`.md`)?e.slice(0,-3):t.endsWith(`.mdx`)?e.slice(0,-4):e}function mh(e,t){let n=`/#/${sh(e)}`;if(process.env.OK_ELECTRON_PROTOCOL_HOST===`1`&&t.contentDir)try{let n=zn(t.contentDir);return{url:`openknowledge://open?project=${encodeURIComponent(n)}&doc=${encodeURIComponent(e)}`,source:`electron-protocol`}}catch(e){process.stderr.write(`[preview-url] realpathSync failed for ${t.contentDir}, falling through to http sources: ${e instanceof Error?e.message:String(e)}\n`)}let r=process.env.OPEN_KNOWLEDGE_PREVIEW_BASE_URL;if(r&&lh(r))return{url:`${ch(r)}${n}`,source:`env`};try{let e=Se(t.lockDir);if(e&&e.port>0)return{url:`http://localhost:${e.port}${n}`,source:`lock`}}catch(e){process.stderr.write(`[preview-url] readUiLock failed at ${t.lockDir}, falling through to config: ${e instanceof Error?e.message:String(e)}\n`)}let i=t.config.preview?.baseUrl;return i&&lh(i)?{url:`${ch(i)}${n}`,source:`config`}:null}const hh=[
|
|
207
|
-
`);function gh(e
|
|
208
|
-
`);
|
|
209
|
-
`))
|
|
210
|
-
`)){
|
|
211
|
-
`)){let e=bh(n);e&&yh(e)&&t.push(e)}return t}function Dh(e){return Sh(xh(e)).filter(yh)}function Oh(e){return Sh(xh(e)).length>0}function kh(e){let t=[],n=e.matchAll(vh);for(let e of n)t.push(bh(e[0]));return t}function Ah(e,t){let n=null;for(let e=t.length-1;e>=0;e--){let r=t[e];if(_h.has(r.command)){n=r;break}if((r.command===`head`||r.command===`tail`)&&Oh(r)){n=r;break}}let r;if(!n)r=kh(e);else{switch(n.command){case`cat`:r=Ch(n);break;case`ls`:r=wh(e,n);break;case`grep`:r=Th(e);break;case`find`:r=Eh(e);break;case`head`:case`tail`:r=Dh(n);break;default:r=kh(e)}r.length===0&&(r=kh(e))}let i=new Set,a=[];for(let e of r){let t=bh(e);!t||i.has(t)||(i.add(t),a.push(t))}return a}var jh=[{name:`echo`,load:async()=>(await import(`./echo-O45JWWI2-CX34tpdA.mjs`)).echoCommand},{name:`cat`,load:async()=>(await import(`./cat-RDUMLXKC-BBkiYZHY.mjs`)).catCommand},{name:`printf`,load:async()=>(await import(`./printf-CX64KX2P-CqRH1fcx.mjs`)).printfCommand},{name:`ls`,load:async()=>(await import(`./ls-KSXFZCWH-DqDgh03N.mjs`)).lsCommand},{name:`mkdir`,load:async()=>(await import(`./mkdir-TDEMSB6C-BJEISkIZ.mjs`)).mkdirCommand},{name:`rmdir`,load:async()=>(await import(`./rmdir-XTQXT7RK-qEC715ec.mjs`)).rmdirCommand},{name:`touch`,load:async()=>(await import(`./touch-DX2IJOQ4-lH1eyelO.mjs`)).touchCommand},{name:`rm`,load:async()=>(await import(`./rm-RTZG23RL-DlEnXUAF.mjs`)).rmCommand},{name:`cp`,load:async()=>(await import(`./cp-XOYR4ABJ-bKEUBRiq.mjs`)).cpCommand},{name:`mv`,load:async()=>(await import(`./mv-Z6MORUFL-BmfrJjSs.mjs`)).mvCommand},{name:`ln`,load:async()=>(await import(`./ln-4TRFBYAT-CVLYmUk7.mjs`)).lnCommand},{name:`chmod`,load:async()=>(await import(`./chmod-SYMGL4JA-CrZnOwHN.mjs`)).chmodCommand},{name:`pwd`,load:async()=>(await import(`./pwd-D4OZ7N27-CKM9OA6o.mjs`)).pwdCommand},{name:`readlink`,load:async()=>(await import(`./readlink-MI4GCHJF-Ck2tsjqo.mjs`)).readlinkCommand},{name:`head`,load:async()=>(await import(`./head-HT2B6D2J-BbfykFhC.mjs`)).headCommand},{name:`tail`,load:async()=>(await import(`./tail-S5ULNTJU-BWlMoVaY.mjs`)).tailCommand},{name:`wc`,load:async()=>(await import(`./wc-TQB3VNOX-DJ8k4PUj.mjs`)).wcCommand},{name:`stat`,load:async()=>(await import(`./stat-BT5A227F-DpCEGAGw.mjs`)).statCommand},{name:`grep`,load:async()=>(await import(`./grep-3AIAIJVR-fpYA0UVG.mjs`)).grepCommand},{name:`fgrep`,load:async()=>(await import(`./grep-3AIAIJVR-fpYA0UVG.mjs`)).fgrepCommand},{name:`egrep`,load:async()=>(await import(`./grep-3AIAIJVR-fpYA0UVG.mjs`)).egrepCommand},{name:`rg`,load:async()=>(await import(`./rg-FOQSCCX3-B6b10f2I.mjs`)).rgCommand},{name:`sed`,load:async()=>(await import(`./sed-VFTTATXJ-SJAhm12K.mjs`)).sedCommand},{name:`awk`,load:async()=>(await import(`./awk2-POPGKRAI-Cc3gWubt.mjs`)).awkCommand2},{name:`sort`,load:async()=>(await import(`./sort-DCNRDA7U-B9r9vaz_.mjs`)).sortCommand},{name:`uniq`,load:async()=>(await import(`./uniq-SUNANL47-DQSg6ulH.mjs`)).uniqCommand},{name:`comm`,load:async()=>(await import(`./comm-5SLSESQG-PpE3c4ZK.mjs`)).commCommand},{name:`cut`,load:async()=>(await import(`./cut-OPC3VAGB-DFILWBLt.mjs`)).cutCommand},{name:`paste`,load:async()=>(await import(`./paste-7N6AFSDS-DZ1UxLP-.mjs`)).pasteCommand},{name:`tr`,load:async()=>(await import(`./tr-2HXZRDSW-WTWP1Y3I.mjs`)).trCommand},{name:`rev`,load:async()=>(await import(`./rev-XOSYPP45-dyxz7TNM.mjs`)).rev},{name:`nl`,load:async()=>(await import(`./nl-U5YJDM32-CwKzmNae.mjs`)).nl},{name:`fold`,load:async()=>(await import(`./fold-LDSORVYE-DhorwB1M.mjs`)).fold},{name:`expand`,load:async()=>(await import(`./expand-DTNXU4LQ-Def0IjrD.mjs`)).expand},{name:`unexpand`,load:async()=>(await import(`./unexpand-RGTMIGZM-CvVeOYsA.mjs`)).unexpand},{name:`strings`,load:async()=>(await import(`./strings-7PLOGTPD-Bc3LcdUK.mjs`)).strings},{name:`split`,load:async()=>(await import(`./split-SITCSYCZ-CVEBVG_b.mjs`)).split},{name:`column`,load:async()=>(await import(`./column-WLPMMSTS-B7r8iBQX.mjs`)).column},{name:`join`,load:async()=>(await import(`./join-GG2LDHE5-C6rITFRb.mjs`)).join},{name:`tee`,load:async()=>(await import(`./tee-O7VXZDCO-BZ-Wtr3X.mjs`)).teeCommand},{name:`find`,load:async()=>(await import(`./find-TPUOAIUQ-C0CUhYWB.mjs`)).findCommand},{name:`basename`,load:async()=>(await import(`./basename-AA2KJYZQ-DpGE_2LJ.mjs`)).basenameCommand},{name:`dirname`,load:async()=>(await import(`./dirname-LEMTZZFS-DM2ha26y.mjs`)).dirnameCommand},{name:`tree`,load:async()=>(await import(`./tree-LYXBS7DC-B0XAnWvf.mjs`)).treeCommand},{name:`du`,load:async()=>(await import(`./du-WO2ENHXQ-DK5I7PKg.mjs`)).duCommand},{name:`env`,load:async()=>(await import(`./env-5EPCWSXR-C0C0-iCD.mjs`)).envCommand},{name:`printenv`,load:async()=>(await import(`./env-5EPCWSXR-C0C0-iCD.mjs`)).printenvCommand},{name:`alias`,load:async()=>(await import(`./alias-JE7RI5QX-B6svpkRM.mjs`)).aliasCommand},{name:`unalias`,load:async()=>(await import(`./alias-JE7RI5QX-B6svpkRM.mjs`)).unaliasCommand},{name:`history`,load:async()=>(await import(`./history-J4QRNGRO-CxkOfNgO.mjs`)).historyCommand},{name:`xargs`,load:async()=>(await import(`./xargs-I6EZUCYF-BTL0Cz6j.mjs`)).xargsCommand},{name:`true`,load:async()=>(await import(`./true-WHJNXCHG-CfyqCtO-.mjs`)).trueCommand},{name:`false`,load:async()=>(await import(`./true-WHJNXCHG-CfyqCtO-.mjs`)).falseCommand},{name:`clear`,load:async()=>(await import(`./clear-5CZ5X4YR-CQ9G2b6A.mjs`)).clearCommand},{name:`bash`,load:async()=>(await import(`./bash-IJWYRKFO-zBASRHFa.mjs`)).bashCommand},{name:`sh`,load:async()=>(await import(`./bash-IJWYRKFO-zBASRHFa.mjs`)).shCommand},{name:`jq`,load:async()=>(await import(`./jq-ODXZBPLY-DwKW_5e4.mjs`)).jqCommand},{name:`base64`,load:async()=>(await import(`./base64-4YMZCVJ5-BYz2VU1K.mjs`)).base64Command},{name:`diff`,load:async()=>(await import(`./diff-HJF2MPDN-BRsHJrES.mjs`)).diffCommand},{name:`date`,load:async()=>(await import(`./date-DD7FVA2V-B1vw27vz.mjs`)).dateCommand},{name:`sleep`,load:async()=>(await import(`./sleep-VZFPZFWA-2i5JaN6o.mjs`)).sleepCommand},{name:`timeout`,load:async()=>(await import(`./timeout-VRKMCG72-CGi8Ki9F.mjs`)).timeoutCommand},{name:`time`,load:async()=>(await import(`./time-DEUO3QV2-DGu9Jt8t.mjs`)).timeCommand},{name:`seq`,load:async()=>(await import(`./seq-RN5ZUASB-BH9pwR7X.mjs`)).seqCommand},{name:`expr`,load:async()=>(await import(`./expr-5T3UU5KE-CpNcSEhS.mjs`)).exprCommand},{name:`md5sum`,load:async()=>(await import(`./md5sum-INMIK4DX-3q3X2_Bl.mjs`)).md5sumCommand},{name:`sha1sum`,load:async()=>(await import(`./sha1sum-VJPNLNU6-7wFUSeyx.mjs`)).sha1sumCommand},{name:`sha256sum`,load:async()=>(await import(`./sha256sum-PI32XWXY-RLxkSiqX.mjs`)).sha256sumCommand},{name:`file`,load:async()=>(await import(`./file-ZIGAJ4YS-C1Mgh9Dx.mjs`)).fileCommand},{name:`html-to-markdown`,load:async()=>(await import(`./html-to-markdown-TFCECAGV-DYB58Aq3.mjs`)).htmlToMarkdownCommand},{name:`help`,load:async()=>(await import(`./help-VVWX7SA5-rfn2xlDJ.mjs`)).helpCommand},{name:`which`,load:async()=>(await import(`./which-XZHEH76L-CLG5qPgv.mjs`)).whichCommand},{name:`tac`,load:async()=>(await import(`./tac-SJGXQ4T2-Cp7URH3w.mjs`)).tac},{name:`hostname`,load:async()=>(await import(`./hostname-BK6HG2DE-C1nZ6rEU.mjs`)).hostname},{name:`whoami`,load:async()=>(await import(`./whoami-DGKU3D2X-DO5vmoPX.mjs`)).whoami},{name:`od`,load:async()=>(await import(`./od-VJEF2UR5-CIYaWeFb.mjs`)).od},{name:`gzip`,load:async()=>(await import(`./gzip-AQXSGOVS-ZJPD6VJq.mjs`)).gzipCommand},{name:`gunzip`,load:async()=>(await import(`./gzip-AQXSGOVS-ZJPD6VJq.mjs`)).gunzipCommand},{name:`zcat`,load:async()=>(await import(`./gzip-AQXSGOVS-ZJPD6VJq.mjs`)).zcatCommand}];(typeof __BROWSER__>`u`||!__BROWSER__)&&(jh.push({name:`tar`,load:async()=>(await import(`./tar-ANUBEFJY-_2-XJ8OD.mjs`)).tarCommand}),jh.push({name:`yq`,load:async()=>(await import(`./yq-MJMAR36V-CPQTwsxW.mjs`)).yqCommand}),jh.push({name:`xan`,load:async()=>(await import(`./xan-BXDXYEIB-BUzA9fZa.mjs`)).xanCommand}),jh.push({name:`sqlite3`,load:async()=>(await import(`./sqlite3-56UMWEY3-htZnl7uZ.mjs`)).sqlite3Command}));var Mh=[];(typeof __BROWSER__>`u`||!__BROWSER__)&&(Mh.push({name:`python3`,load:async()=>(await import(`./python3-AUFTPCU6-BS26F1oD.mjs`)).python3Command}),Mh.push({name:`python`,load:async()=>(await import(`./python3-AUFTPCU6-BS26F1oD.mjs`)).pythonCommand}));var Nh=[];(typeof __BROWSER__>`u`||!__BROWSER__)&&(Nh.push({name:`js-exec`,load:async()=>(await import(`./js-exec-M6UR76J5-C3ExU6nu.mjs`)).jsExecCommand}),Nh.push({name:`node`,load:async()=>(await import(`./js-exec-M6UR76J5-C3ExU6nu.mjs`)).nodeStubCommand}));var Ph=[{name:`curl`,load:async()=>(await import(`./curl-47BFPSFW-KKVaDuOB.mjs`)).curlCommand}],Fh=new Map;function Ih(e){return{name:e.name,async execute(t,n){let r=Fh.get(e.name);if(r||(r=await un.runTrustedAsync(()=>e.load()),Fh.set(e.name,r)),n.coverage&&(typeof __BROWSER__>`u`||!__BROWSER__)){let{emitFlagCoverage:r}=await import(`./flag-coverage-QT4N2Z44-CirEjvTd.mjs`);r(n.coverage,e.name,t)}return r.execute(t,n)}}}function Lh(e){return(e?jh.filter(t=>e.includes(t.name)):jh).map(Ih)}function Rh(){return Ph.map(Ih)}function zh(){return Mh.map(Ih)}function Bh(){return Nh.map(Ih)}function Vh(e){return`load`in e&&typeof e.load==`function`}function Hh(e){let t=null;return{name:e.name,trusted:!0,async execute(n,r){return t||=await e.load(),t.execute(n,r)}}}var Uh=new TextEncoder;function Wh(e){return typeof e==`object`&&!!e&&!(e instanceof Uint8Array)&&`content`in e}var Gh=class{data=new Map;constructor(e){if(this.data.set(`/`,{type:`directory`,mode:493,mtime:new Date}),e)for(let[t,n]of Object.entries(e))typeof n==`function`?this.writeFileLazy(t,n):Wh(n)?this.writeFileSync(t,n.content,void 0,{mode:n.mode,mtime:n.mtime}):this.writeFileSync(t,n)}ensureParentDirs(e){let t=Yt(e);t!==`/`&&(this.data.has(t)||(this.ensureParentDirs(t),this.data.set(t,{type:`directory`,mode:493,mtime:new Date})))}writeFileSync(e,t,n,r){I(e,`write`);let i=Zt(e);this.ensureParentDirs(i);let a=on(t,an(n));this.data.set(i,{type:`file`,content:a,mode:r?.mode??420,mtime:r?.mtime??new Date})}writeFileLazy(e,t,n){I(e,`write`);let r=Zt(e);this.ensureParentDirs(r),this.data.set(r,{type:`file`,lazy:t,mode:n?.mode??420,mtime:n?.mtime??new Date})}async materializeLazy(e,t){let n=await t.lazy(),r={type:`file`,content:typeof n==`string`?Uh.encode(n):n,mode:t.mode,mtime:t.mtime};return this.data.set(e,r),r}async readFile(e,t){return sn(await this.readFileBuffer(e),an(t))}async readFileBuffer(e){I(e,`open`);let t=this.resolvePathWithSymlinks(e),n=this.data.get(t);if(!n)throw Error(`ENOENT: no such file or directory, open '${e}'`);if(n.type!==`file`)throw Error(`EISDIR: illegal operation on a directory, read '${e}'`);if(`lazy`in n){let e=await this.materializeLazy(t,n);return e.content instanceof Uint8Array?e.content:Uh.encode(e.content)}return n.content instanceof Uint8Array?n.content:Uh.encode(n.content)}async writeFile(e,t,n){this.writeFileSync(e,t,n)}async appendFile(e,t,n){I(e,`append`);let r=Zt(e),i=this.data.get(r);if(i&&i.type===`directory`)throw Error(`EISDIR: illegal operation on a directory, write '${e}'`);let a=on(t,an(n));if(i?.type===`file`){let e=i;`lazy`in e&&(e=await this.materializeLazy(r,e));let t=`content`in e&&e.content instanceof Uint8Array?e.content:Uh.encode(`content`in e?e.content:``),n=new Uint8Array(t.length+a.length);n.set(t),n.set(a,t.length),this.data.set(r,{type:`file`,content:n,mode:e.mode,mtime:new Date})}else this.writeFileSync(e,t,n)}async exists(e){if(e.includes(`\0`))return!1;try{let t=this.resolvePathWithSymlinks(e);return this.data.has(t)}catch{return!1}}async stat(e){I(e,`stat`);let t=this.resolvePathWithSymlinks(e),n=this.data.get(t);if(!n)throw Error(`ENOENT: no such file or directory, stat '${e}'`);n.type===`file`&&`lazy`in n&&(n=await this.materializeLazy(t,n));let r=0;return n.type===`file`&&`content`in n&&n.content&&(r=n.content instanceof Uint8Array?n.content.length:Uh.encode(n.content).length),{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:!1,mode:n.mode,size:r,mtime:n.mtime||new Date}}async lstat(e){I(e,`lstat`);let t=this.resolveIntermediateSymlinks(e),n=this.data.get(t);if(!n)throw Error(`ENOENT: no such file or directory, lstat '${e}'`);if(n.type===`symlink`)return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:n.mode,size:n.target.length,mtime:n.mtime||new Date};n.type===`file`&&`lazy`in n&&(n=await this.materializeLazy(t,n));let r=0;return n.type===`file`&&`content`in n&&n.content&&(r=n.content instanceof Uint8Array?n.content.length:Uh.encode(n.content).length),{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:!1,mode:n.mode,size:r,mtime:n.mtime||new Date}}resolveIntermediateSymlinks(e){let t=Zt(e);if(t===`/`)return`/`;let n=t.slice(1).split(`/`);if(n.length<=1)return t;let r=``,i=new Set;for(let t=0;t<n.length-1;t++){let a=n[t];r=`${r}/${a}`;let o=this.data.get(r),s=0;for(;o&&o.type===`symlink`&&s<40;){if(i.has(r))throw Error(`ELOOP: too many levels of symbolic links, lstat '${e}'`);i.add(r),r=rn(r,o.target),o=this.data.get(r),s++}if(s>=40)throw Error(`ELOOP: too many levels of symbolic links, lstat '${e}'`)}return`${r}/${n[n.length-1]}`}resolvePathWithSymlinks(e){let t=Zt(e);if(t===`/`)return`/`;let n=t.slice(1).split(`/`),r=``,i=new Set;for(let t of n){r=`${r}/${t}`;let n=this.data.get(r),a=0;for(;n&&n.type===`symlink`&&a<40;){if(i.has(r))throw Error(`ELOOP: too many levels of symbolic links, open '${e}'`);i.add(r),r=rn(r,n.target),n=this.data.get(r),a++}if(a>=40)throw Error(`ELOOP: too many levels of symbolic links, open '${e}'`)}return r}async mkdir(e,t){this.mkdirSync(e,t)}mkdirSync(e,t){I(e,`mkdir`);let n=Zt(e);if(this.data.has(n)){if(this.data.get(n)?.type===`file`)throw Error(`EEXIST: file already exists, mkdir '${e}'`);if(!t?.recursive)throw Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let r=Yt(n);if(r!==`/`&&!this.data.has(r))if(t?.recursive)this.mkdirSync(r,{recursive:!0});else throw Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.data.set(n,{type:`directory`,mode:493,mtime:new Date})}async readdir(e){return(await this.readdirWithFileTypes(e)).map(e=>e.name)}async readdirWithFileTypes(e){I(e,`scandir`);let t=Zt(e),n=this.data.get(t);if(!n)throw Error(`ENOENT: no such file or directory, scandir '${e}'`);let r=new Set;for(;n&&n.type===`symlink`;){if(r.has(t))throw Error(`ELOOP: too many levels of symbolic links, scandir '${e}'`);r.add(t),t=rn(t,n.target),n=this.data.get(t)}if(!n)throw Error(`ENOENT: no such file or directory, scandir '${e}'`);if(n.type!==`directory`)throw Error(`ENOTDIR: not a directory, scandir '${e}'`);let i=t===`/`?`/`:`${t}/`,a=new Map;for(let[e,n]of this.data.entries())if(e!==t&&e.startsWith(i)){let t=e.slice(i.length),r=t.split(`/`)[0];r&&!t.includes(`/`,r.length)&&!a.has(r)&&a.set(r,{name:r,isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:n.type===`symlink`})}return Array.from(a.values()).sort((e,t)=>e.name<t.name?-1:e.name>t.name?1:0)}async rm(e,t){I(e,`rm`);let n=Zt(e),r=this.data.get(n);if(!r){if(t?.force)return;throw Error(`ENOENT: no such file or directory, rm '${e}'`)}if(r.type===`directory`){let r=await this.readdir(n);if(r.length>0){if(!t?.recursive)throw Error(`ENOTEMPTY: directory not empty, rm '${e}'`);for(let e of r){let r=Qt(n,e);await this.rm(r,t)}}}this.data.delete(n)}async cp(e,t,n){I(e,`cp`),I(t,`cp`);let r=Zt(e),i=Zt(t),a=this.data.get(r);if(!a)throw Error(`ENOENT: no such file or directory, cp '${e}'`);if(a.type===`file`)if(this.ensureParentDirs(i),`content`in a){let e=a.content instanceof Uint8Array?new Uint8Array(a.content):a.content;this.data.set(i,{...a,content:e})}else this.data.set(i,{...a});else if(a.type===`symlink`)this.ensureParentDirs(i),this.data.set(i,{...a});else if(a.type===`directory`){if(!n?.recursive)throw Error(`EISDIR: is a directory, cp '${e}'`);await this.mkdir(i,{recursive:!0});let t=await this.readdir(r);for(let e of t){let t=Qt(r,e),a=Qt(i,e);await this.cp(t,a,n)}}}async mv(e,t){await this.cp(e,t,{recursive:!0}),await this.rm(e,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(e,t){return Xt(e,t)}async chmod(e,t){I(e,`chmod`);let n=Zt(e),r=this.data.get(n);if(!r)throw Error(`ENOENT: no such file or directory, chmod '${e}'`);r.mode=t}async symlink(e,t){I(t,`symlink`);let n=Zt(t);if(this.data.has(n))throw Error(`EEXIST: file already exists, symlink '${t}'`);this.ensureParentDirs(n),this.data.set(n,{type:`symlink`,target:e,mode:511,mtime:new Date})}async link(e,t){I(e,`link`),I(t,`link`);let n=Zt(e),r=Zt(t),i=this.data.get(n);if(!i)throw Error(`ENOENT: no such file or directory, link '${e}'`);if(i.type!==`file`)throw Error(`EPERM: operation not permitted, link '${e}'`);if(this.data.has(r))throw Error(`EEXIST: file already exists, link '${t}'`);let a=i;`lazy`in a&&(a=await this.materializeLazy(n,a)),this.ensureParentDirs(r),this.data.set(r,{type:`file`,content:a.content,mode:a.mode,mtime:a.mtime})}async readlink(e){I(e,`readlink`);let t=Zt(e),n=this.data.get(t);if(!n)throw Error(`ENOENT: no such file or directory, readlink '${e}'`);if(n.type!==`symlink`)throw Error(`EINVAL: invalid argument, readlink '${e}'`);return n.target}async realpath(e){I(e,`realpath`);let t=this.resolvePathWithSymlinks(e);if(!this.data.has(t))throw Error(`ENOENT: no such file or directory, realpath '${e}'`);return t}async utimes(e,t,n){I(e,`utimes`);let r=Zt(e),i=this.resolvePathWithSymlinks(r),a=this.data.get(i);if(!a)throw Error(`ENOENT: no such file or directory, utimes '${e}'`);a.mtime=n}};function Kh(e){let t=e;return typeof t.mkdirSync==`function`&&typeof t.writeFileSync==`function`}function qh(e,t){e.mkdirSync(`/bin`,{recursive:!0}),e.mkdirSync(`/usr/bin`,{recursive:!0}),t&&(e.mkdirSync(`/home/user`,{recursive:!0}),e.mkdirSync(`/tmp`,{recursive:!0}))}function Jh(e){e.mkdirSync(`/dev`,{recursive:!0}),e.writeFileSync(`/dev/null`,``),e.writeFileSync(`/dev/zero`,new Uint8Array),e.writeFileSync(`/dev/stdin`,``),e.writeFileSync(`/dev/stdout`,``),e.writeFileSync(`/dev/stderr`,``)}function Yh(e,t){e.mkdirSync(`/proc/self/fd`,{recursive:!0}),e.writeFileSync(`/proc/version`,`${Ct}
|
|
206
|
+
`);function oh(e,t){e.tool(`consolidate`,ah,{topic:x().describe(`The topic to consolidate into a canonical article`),cwd:x().optional().describe(Hm)},async e=>{let n=await Qm(t.resolveCwd,t.config,e.cwd);return n.ok?Wm(ih(e.topic,n.config.content.dir),{previewUrl:null}):Z(`Error: ${n.error}`,!0)})}function sh(e){return e.split(`/`).map(encodeURIComponent).join(`/`)}function ch(e){return e.endsWith(`/`)?e.slice(0,-1):e}function lh(e){try{return new URL(e),!0}catch{return!1}}async function uh(e,t,n){let r=n??await t.resolveCwd(),i=await Zm(t.config,r),a=ge(i,r);return mh(e,{config:i,lockDir:he(a),contentDir:a})}function dh(e){try{let t=Se(e.lockDir);if(t&&t.port>0)return{baseUrl:`http://localhost:${t.port}`,port:t.port}}catch(t){process.stderr.write(`[preview-url] readUiLock failed at ${e.lockDir} while building ui block: ${t instanceof Error?t.message:String(t)}\n`)}return{baseUrl:null,port:null}}async function fh(e,t){let n=t??await e.resolveCwd(),r=await Zm(e.config,n),i=ge(r,n),a={config:r,lockDir:he(i),contentDir:i};return{resolve:e=>mh(e,a),ui:dh(a)}}function ph(e){let t=e.toLowerCase();return t.endsWith(`.md`)?e.slice(0,-3):t.endsWith(`.mdx`)?e.slice(0,-4):e}function mh(e,t){let n=`/#/${sh(e)}`;if(process.env.OK_ELECTRON_PROTOCOL_HOST===`1`&&t.contentDir)try{let n=zn(t.contentDir);return{url:`openknowledge://open?project=${encodeURIComponent(n)}&doc=${encodeURIComponent(e)}`,source:`electron-protocol`}}catch(e){process.stderr.write(`[preview-url] realpathSync failed for ${t.contentDir}, falling through to http sources: ${e instanceof Error?e.message:String(e)}\n`)}let r=process.env.OPEN_KNOWLEDGE_PREVIEW_BASE_URL;if(r&&lh(r))return{url:`${ch(r)}${n}`,source:`env`};try{let e=Se(t.lockDir);if(e&&e.port>0)return{url:`http://localhost:${e.port}${n}`,source:`lock`}}catch(e){process.stderr.write(`[preview-url] readUiLock failed at ${t.lockDir}, falling through to config: ${e instanceof Error?e.message:String(e)}\n`)}let i=t.config.preview?.baseUrl;return i&&lh(i)?{url:`${ch(i)}${n}`,source:`config`}:null}const hh=["[Requires: Hocuspocus server] Delete a document through the managed delete flow at `POST /api/delete-path` (kind: file).",`Closes all open agent sessions for the doc, unloads it from Hocuspocus, and removes the file from disk.`,``,`**Parameters:**`,"- `docName` — Document name, typically without extension. A trailing `.md` or `.mdx` is stripped automatically.",``,`**Notes:**`,'- Inbound wiki-links to the deleted doc become dead links (redlinks) — they are NOT rewritten. Call `get_backlinks({ docName: "your-doc" })` BEFORE deleting to see which docs link here, then update or remove those references first.',"- Deletion is irreversible from this tool. Use `save_version` beforehand if you may need to roll back.","- The structured response includes `previousPreviewUrl` (when a preview source resolves) so agents can close any stale preview tab pointing at the deleted doc.",``,`**Errors:**`,"- 400 — `docName` is not a valid relative content path.",`- 404 — document does not exist.`].join(`
|
|
207
|
+
`);function gh(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function _h(e,t){e.tool(`delete_document`,hh,{docName:x().describe(`Document name to delete`),cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,url:i}=n;if(!i)return Z(Gm,!0);let a=eh(e.docName);if(!a.ok)return Z(a.error,!0);let o=t.identityRef?.current,s=await nh(i,`/api/delete-path`,{kind:`file`,path:a.docName,...o?{agentId:o.connectionId,agentName:o.displayName,clientName:o.clientInfo?.name,colorSeed:o.colorSeed}:{}});if(!s.ok){let e=typeof s.error==`string`?s.error:`Delete failed`,t={ok:!1,error:e};return Wm(`Error: ${e}`,t,!0)}let c=gh(s.deletedDocNames),l=await uh(a.docName,{config:t.config,resolveCwd:t.resolveCwd},r),u={ok:!0,deletedDocNames:c.length>0?c:[a.docName],...l?{previousPreviewUrl:l.url}:{}};return Wm(u.deletedDocNames.length===1?`Deleted ${u.deletedDocNames[0]}.`:`Deleted ${u.deletedDocNames.length} documents: ${u.deletedDocNames.join(`, `)}.`,u)})}const vh=[`[Requires: Hocuspocus server] Find-and-replace on a live document via the CRDT layer.`,`The patch is applied through Hocuspocus and propagated to all connected editors in real-time.`,"Use `offset` when you need to patch an exact occurrence; omit it to preserve first-match behavior.",``,'**Body-only.** Frontmatter-intersecting find/replace calls are rejected with HTTP 400. Frontmatter editing via MCP is currently unavailable — to change frontmatter, use `write_document` with `position: "replace"` and a payload that includes the new YAML block.',``,"**When rewriting prose, add `[[wiki-links]]` aggressively.** If the replacement mentions other documents or entities that should have their own page, link them as `[[Page Name]]`. Over-linking is the goal; underlinked documents lose their value in backlink-driven navigation.",``,`**Parameters:**`,"- `docName` — Document name, typically without extension. A trailing `.md` or `.mdx` is stripped automatically.","- `find` — Text to find (exact match)","- `replace` — Replacement text","- `offset` (optional) — Exact occurrence to patch, as a JavaScript string offset in the current markdown. If the document changed and the text no longer matches there, the server returns a stale-target error; re-run `suggest_links` to get fresh offsets.",'- `summary` — Optional one-line user-outcome description of this edit (≤80 chars). Appears as a bullet in the document timeline so readers can scan intent without opening every diff. Prefer outcome phrasing ("Fixed token-refresh race") over structural ("Changed 1 line"). Avoid including secrets or PII — summaries are persisted to git history.'].join(`
|
|
208
|
+
`);function yh(e,t){e.tool(`edit_document`,vh,{docName:x().describe(`Document name to edit`),find:x().describe(`Text to find (exact match)`),replace:x().describe(`Replacement text`),offset:E().int().min(0).optional().describe(`Exact occurrence to patch, as a JavaScript string offset in the current markdown`),summary:Um,cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,config:i,url:a}=n;if(!a)return Z(Gm,!0);let o=eh(e.docName);if(!o.ok)return Z(o.error,!0);let s=t.identityRef?.current,c=await nh(a,`/api/agent-patch`,{docName:o.docName,find:e.find,replace:e.replace,offset:e.offset,...e.summary===void 0?{}:{summary:e.summary},...s?{agentId:s.connectionId,agentName:s.displayName,clientName:s.clientInfo?.name,colorSeed:s.colorSeed}:{}});if(!c.ok)return Z(`Error: ${c.error}`,!0);let l=he(ge(i,r)),u=mh(o.docName,{config:i,lockDir:l}),d=typeof c.subscriberCount==`number`?c.subscriberCount:void 0,f=(typeof c.systemSubscriberCount==`number`?c.systemSubscriberCount:void 0)===0,p=d===0,m=c.summary&&typeof c.summary==`object`?c.summary:void 0,h=typeof m?.hint==`string`?m.hint:void 0,g=[`Edit applied successfully.`];u&&g.push(`Preview: ${u.url}`),f&&g.push(u?`Open ${u.url} in your preview browser.`:`No preview attached. Start the UI.`),h&&g.push(h);let _=g.join(`
|
|
209
|
+
`);if(!u&&!f&&!p&&!m)return Z(_);let v={};return u&&(v.previewUrl=u.url,v.previewUrlSource=u.source),f&&(v.warning={message:`Open the previewUrl in your preview browser.`,action:`attach-preview-once`,previewUrl:u?.url??null}),m&&(v.summary=m),Wm(_,v)})}const bh=new Set([`cat`,`ls`,`grep`,`find`]),xh=/\b[\w./-]+\.(md|mdx)\b/g;function Sh(e){return/\.(md|mdx)$/.test(e)}function Ch(e){let t=e.trim();return t?(t=t.replace(/\/+/g,`/`),t.startsWith(`./`)&&(t=t.slice(2)),t.endsWith(`/`)&&(t=t.slice(0,-1)),t):``}function wh(e){return e.args.slice(1)}function Th(e){return e.filter(e=>!e.startsWith(`-`))}function Eh(e){return Th(wh(e)).filter(Sh)}function Dh(e,t){let n=Th(wh(t)),r=n.length>0?n[n.length-1]:``,i=r&&r!==`.`?Ch(r):``,a=[];i&&a.push(i);for(let t of e.split(`
|
|
210
|
+
`)){let e=t.trim();if(!e||/\.[a-z0-9]+$/i.test(e)&&!Sh(e))continue;let n=i?`${i}/${e}`:e;a.push(n)}return a}function Oh(e){let t=[];for(let n of e.split(`
|
|
211
|
+
`)){if(!n)continue;let e=n.indexOf(`:`);if(e<0)continue;let r=Ch(n.slice(0,e));Sh(r)&&t.push(r)}return t}function kh(e){let t=[];for(let n of e.split(`
|
|
212
|
+
`)){let e=Ch(n);e&&Sh(e)&&t.push(e)}return t}function Ah(e){return Th(wh(e)).filter(Sh)}function jh(e){return Th(wh(e)).length>0}function Mh(e){let t=[],n=e.matchAll(xh);for(let e of n)t.push(Ch(e[0]));return t}function Nh(e,t){let n=null;for(let e=t.length-1;e>=0;e--){let r=t[e];if(bh.has(r.command)){n=r;break}if((r.command===`head`||r.command===`tail`)&&jh(r)){n=r;break}}let r;if(!n)r=Mh(e);else{switch(n.command){case`cat`:r=Eh(n);break;case`ls`:r=Dh(e,n);break;case`grep`:r=Oh(e);break;case`find`:r=kh(e);break;case`head`:case`tail`:r=Ah(n);break;default:r=Mh(e)}r.length===0&&(r=Mh(e))}let i=new Set,a=[];for(let e of r){let t=Ch(e);!t||i.has(t)||(i.add(t),a.push(t))}return a}var Ph=[{name:`echo`,load:async()=>(await import(`./echo-O45JWWI2-CX34tpdA.mjs`)).echoCommand},{name:`cat`,load:async()=>(await import(`./cat-RDUMLXKC-BBkiYZHY.mjs`)).catCommand},{name:`printf`,load:async()=>(await import(`./printf-CX64KX2P-CqRH1fcx.mjs`)).printfCommand},{name:`ls`,load:async()=>(await import(`./ls-KSXFZCWH-DqDgh03N.mjs`)).lsCommand},{name:`mkdir`,load:async()=>(await import(`./mkdir-TDEMSB6C-BJEISkIZ.mjs`)).mkdirCommand},{name:`rmdir`,load:async()=>(await import(`./rmdir-XTQXT7RK-qEC715ec.mjs`)).rmdirCommand},{name:`touch`,load:async()=>(await import(`./touch-DX2IJOQ4-lH1eyelO.mjs`)).touchCommand},{name:`rm`,load:async()=>(await import(`./rm-RTZG23RL-DlEnXUAF.mjs`)).rmCommand},{name:`cp`,load:async()=>(await import(`./cp-XOYR4ABJ-bKEUBRiq.mjs`)).cpCommand},{name:`mv`,load:async()=>(await import(`./mv-Z6MORUFL-BmfrJjSs.mjs`)).mvCommand},{name:`ln`,load:async()=>(await import(`./ln-4TRFBYAT-CVLYmUk7.mjs`)).lnCommand},{name:`chmod`,load:async()=>(await import(`./chmod-SYMGL4JA-CrZnOwHN.mjs`)).chmodCommand},{name:`pwd`,load:async()=>(await import(`./pwd-D4OZ7N27-CKM9OA6o.mjs`)).pwdCommand},{name:`readlink`,load:async()=>(await import(`./readlink-MI4GCHJF-Ck2tsjqo.mjs`)).readlinkCommand},{name:`head`,load:async()=>(await import(`./head-HT2B6D2J-BbfykFhC.mjs`)).headCommand},{name:`tail`,load:async()=>(await import(`./tail-S5ULNTJU-BWlMoVaY.mjs`)).tailCommand},{name:`wc`,load:async()=>(await import(`./wc-TQB3VNOX-DJ8k4PUj.mjs`)).wcCommand},{name:`stat`,load:async()=>(await import(`./stat-BT5A227F-DpCEGAGw.mjs`)).statCommand},{name:`grep`,load:async()=>(await import(`./grep-3AIAIJVR-fpYA0UVG.mjs`)).grepCommand},{name:`fgrep`,load:async()=>(await import(`./grep-3AIAIJVR-fpYA0UVG.mjs`)).fgrepCommand},{name:`egrep`,load:async()=>(await import(`./grep-3AIAIJVR-fpYA0UVG.mjs`)).egrepCommand},{name:`rg`,load:async()=>(await import(`./rg-FOQSCCX3-B6b10f2I.mjs`)).rgCommand},{name:`sed`,load:async()=>(await import(`./sed-VFTTATXJ-SJAhm12K.mjs`)).sedCommand},{name:`awk`,load:async()=>(await import(`./awk2-POPGKRAI-Cc3gWubt.mjs`)).awkCommand2},{name:`sort`,load:async()=>(await import(`./sort-DCNRDA7U-B9r9vaz_.mjs`)).sortCommand},{name:`uniq`,load:async()=>(await import(`./uniq-SUNANL47-DQSg6ulH.mjs`)).uniqCommand},{name:`comm`,load:async()=>(await import(`./comm-5SLSESQG-PpE3c4ZK.mjs`)).commCommand},{name:`cut`,load:async()=>(await import(`./cut-OPC3VAGB-DFILWBLt.mjs`)).cutCommand},{name:`paste`,load:async()=>(await import(`./paste-7N6AFSDS-DZ1UxLP-.mjs`)).pasteCommand},{name:`tr`,load:async()=>(await import(`./tr-2HXZRDSW-WTWP1Y3I.mjs`)).trCommand},{name:`rev`,load:async()=>(await import(`./rev-XOSYPP45-dyxz7TNM.mjs`)).rev},{name:`nl`,load:async()=>(await import(`./nl-U5YJDM32-CwKzmNae.mjs`)).nl},{name:`fold`,load:async()=>(await import(`./fold-LDSORVYE-DhorwB1M.mjs`)).fold},{name:`expand`,load:async()=>(await import(`./expand-DTNXU4LQ-Def0IjrD.mjs`)).expand},{name:`unexpand`,load:async()=>(await import(`./unexpand-RGTMIGZM-CvVeOYsA.mjs`)).unexpand},{name:`strings`,load:async()=>(await import(`./strings-7PLOGTPD-Bc3LcdUK.mjs`)).strings},{name:`split`,load:async()=>(await import(`./split-SITCSYCZ-CVEBVG_b.mjs`)).split},{name:`column`,load:async()=>(await import(`./column-WLPMMSTS-B7r8iBQX.mjs`)).column},{name:`join`,load:async()=>(await import(`./join-GG2LDHE5-C6rITFRb.mjs`)).join},{name:`tee`,load:async()=>(await import(`./tee-O7VXZDCO-BZ-Wtr3X.mjs`)).teeCommand},{name:`find`,load:async()=>(await import(`./find-TPUOAIUQ-C0CUhYWB.mjs`)).findCommand},{name:`basename`,load:async()=>(await import(`./basename-AA2KJYZQ-DpGE_2LJ.mjs`)).basenameCommand},{name:`dirname`,load:async()=>(await import(`./dirname-LEMTZZFS-DM2ha26y.mjs`)).dirnameCommand},{name:`tree`,load:async()=>(await import(`./tree-LYXBS7DC-B0XAnWvf.mjs`)).treeCommand},{name:`du`,load:async()=>(await import(`./du-WO2ENHXQ-DK5I7PKg.mjs`)).duCommand},{name:`env`,load:async()=>(await import(`./env-5EPCWSXR-C0C0-iCD.mjs`)).envCommand},{name:`printenv`,load:async()=>(await import(`./env-5EPCWSXR-C0C0-iCD.mjs`)).printenvCommand},{name:`alias`,load:async()=>(await import(`./alias-JE7RI5QX-B6svpkRM.mjs`)).aliasCommand},{name:`unalias`,load:async()=>(await import(`./alias-JE7RI5QX-B6svpkRM.mjs`)).unaliasCommand},{name:`history`,load:async()=>(await import(`./history-J4QRNGRO-CxkOfNgO.mjs`)).historyCommand},{name:`xargs`,load:async()=>(await import(`./xargs-I6EZUCYF-BTL0Cz6j.mjs`)).xargsCommand},{name:`true`,load:async()=>(await import(`./true-WHJNXCHG-CfyqCtO-.mjs`)).trueCommand},{name:`false`,load:async()=>(await import(`./true-WHJNXCHG-CfyqCtO-.mjs`)).falseCommand},{name:`clear`,load:async()=>(await import(`./clear-5CZ5X4YR-CQ9G2b6A.mjs`)).clearCommand},{name:`bash`,load:async()=>(await import(`./bash-IJWYRKFO-zBASRHFa.mjs`)).bashCommand},{name:`sh`,load:async()=>(await import(`./bash-IJWYRKFO-zBASRHFa.mjs`)).shCommand},{name:`jq`,load:async()=>(await import(`./jq-ODXZBPLY-DwKW_5e4.mjs`)).jqCommand},{name:`base64`,load:async()=>(await import(`./base64-4YMZCVJ5-BYz2VU1K.mjs`)).base64Command},{name:`diff`,load:async()=>(await import(`./diff-HJF2MPDN-BRsHJrES.mjs`)).diffCommand},{name:`date`,load:async()=>(await import(`./date-DD7FVA2V-B1vw27vz.mjs`)).dateCommand},{name:`sleep`,load:async()=>(await import(`./sleep-VZFPZFWA-2i5JaN6o.mjs`)).sleepCommand},{name:`timeout`,load:async()=>(await import(`./timeout-VRKMCG72-CGi8Ki9F.mjs`)).timeoutCommand},{name:`time`,load:async()=>(await import(`./time-DEUO3QV2-DGu9Jt8t.mjs`)).timeCommand},{name:`seq`,load:async()=>(await import(`./seq-RN5ZUASB-BH9pwR7X.mjs`)).seqCommand},{name:`expr`,load:async()=>(await import(`./expr-5T3UU5KE-CpNcSEhS.mjs`)).exprCommand},{name:`md5sum`,load:async()=>(await import(`./md5sum-INMIK4DX-3q3X2_Bl.mjs`)).md5sumCommand},{name:`sha1sum`,load:async()=>(await import(`./sha1sum-VJPNLNU6-7wFUSeyx.mjs`)).sha1sumCommand},{name:`sha256sum`,load:async()=>(await import(`./sha256sum-PI32XWXY-RLxkSiqX.mjs`)).sha256sumCommand},{name:`file`,load:async()=>(await import(`./file-ZIGAJ4YS-C1Mgh9Dx.mjs`)).fileCommand},{name:`html-to-markdown`,load:async()=>(await import(`./html-to-markdown-TFCECAGV-DYB58Aq3.mjs`)).htmlToMarkdownCommand},{name:`help`,load:async()=>(await import(`./help-VVWX7SA5-rfn2xlDJ.mjs`)).helpCommand},{name:`which`,load:async()=>(await import(`./which-XZHEH76L-CLG5qPgv.mjs`)).whichCommand},{name:`tac`,load:async()=>(await import(`./tac-SJGXQ4T2-Cp7URH3w.mjs`)).tac},{name:`hostname`,load:async()=>(await import(`./hostname-BK6HG2DE-C1nZ6rEU.mjs`)).hostname},{name:`whoami`,load:async()=>(await import(`./whoami-DGKU3D2X-DO5vmoPX.mjs`)).whoami},{name:`od`,load:async()=>(await import(`./od-VJEF2UR5-CIYaWeFb.mjs`)).od},{name:`gzip`,load:async()=>(await import(`./gzip-AQXSGOVS-ZJPD6VJq.mjs`)).gzipCommand},{name:`gunzip`,load:async()=>(await import(`./gzip-AQXSGOVS-ZJPD6VJq.mjs`)).gunzipCommand},{name:`zcat`,load:async()=>(await import(`./gzip-AQXSGOVS-ZJPD6VJq.mjs`)).zcatCommand}];(typeof __BROWSER__>`u`||!__BROWSER__)&&(Ph.push({name:`tar`,load:async()=>(await import(`./tar-ANUBEFJY-_2-XJ8OD.mjs`)).tarCommand}),Ph.push({name:`yq`,load:async()=>(await import(`./yq-MJMAR36V-CPQTwsxW.mjs`)).yqCommand}),Ph.push({name:`xan`,load:async()=>(await import(`./xan-BXDXYEIB-BUzA9fZa.mjs`)).xanCommand}),Ph.push({name:`sqlite3`,load:async()=>(await import(`./sqlite3-56UMWEY3-htZnl7uZ.mjs`)).sqlite3Command}));var Fh=[];(typeof __BROWSER__>`u`||!__BROWSER__)&&(Fh.push({name:`python3`,load:async()=>(await import(`./python3-AUFTPCU6-BS26F1oD.mjs`)).python3Command}),Fh.push({name:`python`,load:async()=>(await import(`./python3-AUFTPCU6-BS26F1oD.mjs`)).pythonCommand}));var Ih=[];(typeof __BROWSER__>`u`||!__BROWSER__)&&(Ih.push({name:`js-exec`,load:async()=>(await import(`./js-exec-M6UR76J5-C3ExU6nu.mjs`)).jsExecCommand}),Ih.push({name:`node`,load:async()=>(await import(`./js-exec-M6UR76J5-C3ExU6nu.mjs`)).nodeStubCommand}));var Lh=[{name:`curl`,load:async()=>(await import(`./curl-47BFPSFW-KKVaDuOB.mjs`)).curlCommand}],Rh=new Map;function zh(e){return{name:e.name,async execute(t,n){let r=Rh.get(e.name);if(r||(r=await un.runTrustedAsync(()=>e.load()),Rh.set(e.name,r)),n.coverage&&(typeof __BROWSER__>`u`||!__BROWSER__)){let{emitFlagCoverage:r}=await import(`./flag-coverage-QT4N2Z44-CirEjvTd.mjs`);r(n.coverage,e.name,t)}return r.execute(t,n)}}}function Bh(e){return(e?Ph.filter(t=>e.includes(t.name)):Ph).map(zh)}function Vh(){return Lh.map(zh)}function Hh(){return Fh.map(zh)}function Uh(){return Ih.map(zh)}function Wh(e){return`load`in e&&typeof e.load==`function`}function Gh(e){let t=null;return{name:e.name,trusted:!0,async execute(n,r){return t||=await e.load(),t.execute(n,r)}}}var Kh=new TextEncoder;function qh(e){return typeof e==`object`&&!!e&&!(e instanceof Uint8Array)&&`content`in e}var Jh=class{data=new Map;constructor(e){if(this.data.set(`/`,{type:`directory`,mode:493,mtime:new Date}),e)for(let[t,n]of Object.entries(e))typeof n==`function`?this.writeFileLazy(t,n):qh(n)?this.writeFileSync(t,n.content,void 0,{mode:n.mode,mtime:n.mtime}):this.writeFileSync(t,n)}ensureParentDirs(e){let t=Yt(e);t!==`/`&&(this.data.has(t)||(this.ensureParentDirs(t),this.data.set(t,{type:`directory`,mode:493,mtime:new Date})))}writeFileSync(e,t,n,r){I(e,`write`);let i=Zt(e);this.ensureParentDirs(i);let a=on(t,an(n));this.data.set(i,{type:`file`,content:a,mode:r?.mode??420,mtime:r?.mtime??new Date})}writeFileLazy(e,t,n){I(e,`write`);let r=Zt(e);this.ensureParentDirs(r),this.data.set(r,{type:`file`,lazy:t,mode:n?.mode??420,mtime:n?.mtime??new Date})}async materializeLazy(e,t){let n=await t.lazy(),r={type:`file`,content:typeof n==`string`?Kh.encode(n):n,mode:t.mode,mtime:t.mtime};return this.data.set(e,r),r}async readFile(e,t){return sn(await this.readFileBuffer(e),an(t))}async readFileBuffer(e){I(e,`open`);let t=this.resolvePathWithSymlinks(e),n=this.data.get(t);if(!n)throw Error(`ENOENT: no such file or directory, open '${e}'`);if(n.type!==`file`)throw Error(`EISDIR: illegal operation on a directory, read '${e}'`);if(`lazy`in n){let e=await this.materializeLazy(t,n);return e.content instanceof Uint8Array?e.content:Kh.encode(e.content)}return n.content instanceof Uint8Array?n.content:Kh.encode(n.content)}async writeFile(e,t,n){this.writeFileSync(e,t,n)}async appendFile(e,t,n){I(e,`append`);let r=Zt(e),i=this.data.get(r);if(i&&i.type===`directory`)throw Error(`EISDIR: illegal operation on a directory, write '${e}'`);let a=on(t,an(n));if(i?.type===`file`){let e=i;`lazy`in e&&(e=await this.materializeLazy(r,e));let t=`content`in e&&e.content instanceof Uint8Array?e.content:Kh.encode(`content`in e?e.content:``),n=new Uint8Array(t.length+a.length);n.set(t),n.set(a,t.length),this.data.set(r,{type:`file`,content:n,mode:e.mode,mtime:new Date})}else this.writeFileSync(e,t,n)}async exists(e){if(e.includes(`\0`))return!1;try{let t=this.resolvePathWithSymlinks(e);return this.data.has(t)}catch{return!1}}async stat(e){I(e,`stat`);let t=this.resolvePathWithSymlinks(e),n=this.data.get(t);if(!n)throw Error(`ENOENT: no such file or directory, stat '${e}'`);n.type===`file`&&`lazy`in n&&(n=await this.materializeLazy(t,n));let r=0;return n.type===`file`&&`content`in n&&n.content&&(r=n.content instanceof Uint8Array?n.content.length:Kh.encode(n.content).length),{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:!1,mode:n.mode,size:r,mtime:n.mtime||new Date}}async lstat(e){I(e,`lstat`);let t=this.resolveIntermediateSymlinks(e),n=this.data.get(t);if(!n)throw Error(`ENOENT: no such file or directory, lstat '${e}'`);if(n.type===`symlink`)return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:n.mode,size:n.target.length,mtime:n.mtime||new Date};n.type===`file`&&`lazy`in n&&(n=await this.materializeLazy(t,n));let r=0;return n.type===`file`&&`content`in n&&n.content&&(r=n.content instanceof Uint8Array?n.content.length:Kh.encode(n.content).length),{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:!1,mode:n.mode,size:r,mtime:n.mtime||new Date}}resolveIntermediateSymlinks(e){let t=Zt(e);if(t===`/`)return`/`;let n=t.slice(1).split(`/`);if(n.length<=1)return t;let r=``,i=new Set;for(let t=0;t<n.length-1;t++){let a=n[t];r=`${r}/${a}`;let o=this.data.get(r),s=0;for(;o&&o.type===`symlink`&&s<40;){if(i.has(r))throw Error(`ELOOP: too many levels of symbolic links, lstat '${e}'`);i.add(r),r=rn(r,o.target),o=this.data.get(r),s++}if(s>=40)throw Error(`ELOOP: too many levels of symbolic links, lstat '${e}'`)}return`${r}/${n[n.length-1]}`}resolvePathWithSymlinks(e){let t=Zt(e);if(t===`/`)return`/`;let n=t.slice(1).split(`/`),r=``,i=new Set;for(let t of n){r=`${r}/${t}`;let n=this.data.get(r),a=0;for(;n&&n.type===`symlink`&&a<40;){if(i.has(r))throw Error(`ELOOP: too many levels of symbolic links, open '${e}'`);i.add(r),r=rn(r,n.target),n=this.data.get(r),a++}if(a>=40)throw Error(`ELOOP: too many levels of symbolic links, open '${e}'`)}return r}async mkdir(e,t){this.mkdirSync(e,t)}mkdirSync(e,t){I(e,`mkdir`);let n=Zt(e);if(this.data.has(n)){if(this.data.get(n)?.type===`file`)throw Error(`EEXIST: file already exists, mkdir '${e}'`);if(!t?.recursive)throw Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let r=Yt(n);if(r!==`/`&&!this.data.has(r))if(t?.recursive)this.mkdirSync(r,{recursive:!0});else throw Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.data.set(n,{type:`directory`,mode:493,mtime:new Date})}async readdir(e){return(await this.readdirWithFileTypes(e)).map(e=>e.name)}async readdirWithFileTypes(e){I(e,`scandir`);let t=Zt(e),n=this.data.get(t);if(!n)throw Error(`ENOENT: no such file or directory, scandir '${e}'`);let r=new Set;for(;n&&n.type===`symlink`;){if(r.has(t))throw Error(`ELOOP: too many levels of symbolic links, scandir '${e}'`);r.add(t),t=rn(t,n.target),n=this.data.get(t)}if(!n)throw Error(`ENOENT: no such file or directory, scandir '${e}'`);if(n.type!==`directory`)throw Error(`ENOTDIR: not a directory, scandir '${e}'`);let i=t===`/`?`/`:`${t}/`,a=new Map;for(let[e,n]of this.data.entries())if(e!==t&&e.startsWith(i)){let t=e.slice(i.length),r=t.split(`/`)[0];r&&!t.includes(`/`,r.length)&&!a.has(r)&&a.set(r,{name:r,isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:n.type===`symlink`})}return Array.from(a.values()).sort((e,t)=>e.name<t.name?-1:e.name>t.name?1:0)}async rm(e,t){I(e,`rm`);let n=Zt(e),r=this.data.get(n);if(!r){if(t?.force)return;throw Error(`ENOENT: no such file or directory, rm '${e}'`)}if(r.type===`directory`){let r=await this.readdir(n);if(r.length>0){if(!t?.recursive)throw Error(`ENOTEMPTY: directory not empty, rm '${e}'`);for(let e of r){let r=Qt(n,e);await this.rm(r,t)}}}this.data.delete(n)}async cp(e,t,n){I(e,`cp`),I(t,`cp`);let r=Zt(e),i=Zt(t),a=this.data.get(r);if(!a)throw Error(`ENOENT: no such file or directory, cp '${e}'`);if(a.type===`file`)if(this.ensureParentDirs(i),`content`in a){let e=a.content instanceof Uint8Array?new Uint8Array(a.content):a.content;this.data.set(i,{...a,content:e})}else this.data.set(i,{...a});else if(a.type===`symlink`)this.ensureParentDirs(i),this.data.set(i,{...a});else if(a.type===`directory`){if(!n?.recursive)throw Error(`EISDIR: is a directory, cp '${e}'`);await this.mkdir(i,{recursive:!0});let t=await this.readdir(r);for(let e of t){let t=Qt(r,e),a=Qt(i,e);await this.cp(t,a,n)}}}async mv(e,t){await this.cp(e,t,{recursive:!0}),await this.rm(e,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(e,t){return Xt(e,t)}async chmod(e,t){I(e,`chmod`);let n=Zt(e),r=this.data.get(n);if(!r)throw Error(`ENOENT: no such file or directory, chmod '${e}'`);r.mode=t}async symlink(e,t){I(t,`symlink`);let n=Zt(t);if(this.data.has(n))throw Error(`EEXIST: file already exists, symlink '${t}'`);this.ensureParentDirs(n),this.data.set(n,{type:`symlink`,target:e,mode:511,mtime:new Date})}async link(e,t){I(e,`link`),I(t,`link`);let n=Zt(e),r=Zt(t),i=this.data.get(n);if(!i)throw Error(`ENOENT: no such file or directory, link '${e}'`);if(i.type!==`file`)throw Error(`EPERM: operation not permitted, link '${e}'`);if(this.data.has(r))throw Error(`EEXIST: file already exists, link '${t}'`);let a=i;`lazy`in a&&(a=await this.materializeLazy(n,a)),this.ensureParentDirs(r),this.data.set(r,{type:`file`,content:a.content,mode:a.mode,mtime:a.mtime})}async readlink(e){I(e,`readlink`);let t=Zt(e),n=this.data.get(t);if(!n)throw Error(`ENOENT: no such file or directory, readlink '${e}'`);if(n.type!==`symlink`)throw Error(`EINVAL: invalid argument, readlink '${e}'`);return n.target}async realpath(e){I(e,`realpath`);let t=this.resolvePathWithSymlinks(e);if(!this.data.has(t))throw Error(`ENOENT: no such file or directory, realpath '${e}'`);return t}async utimes(e,t,n){I(e,`utimes`);let r=Zt(e),i=this.resolvePathWithSymlinks(r),a=this.data.get(i);if(!a)throw Error(`ENOENT: no such file or directory, utimes '${e}'`);a.mtime=n}};function Yh(e){let t=e;return typeof t.mkdirSync==`function`&&typeof t.writeFileSync==`function`}function Xh(e,t){e.mkdirSync(`/bin`,{recursive:!0}),e.mkdirSync(`/usr/bin`,{recursive:!0}),t&&(e.mkdirSync(`/home/user`,{recursive:!0}),e.mkdirSync(`/tmp`,{recursive:!0}))}function Zh(e){e.mkdirSync(`/dev`,{recursive:!0}),e.writeFileSync(`/dev/null`,``),e.writeFileSync(`/dev/zero`,new Uint8Array),e.writeFileSync(`/dev/stdin`,``),e.writeFileSync(`/dev/stdout`,``),e.writeFileSync(`/dev/stderr`,``)}function Qh(e,t){e.mkdirSync(`/proc/self/fd`,{recursive:!0}),e.writeFileSync(`/proc/version`,`${Ct}
|
|
212
213
|
`),e.writeFileSync(`/proc/self/exe`,`/bin/bash`),e.writeFileSync(`/proc/self/cmdline`,`bash\0`),e.writeFileSync(`/proc/self/comm`,`bash
|
|
213
|
-
`),e.writeFileLazy?e.writeFileLazy(`/proc/self/status`,()=>ut(t)):e.writeFileSync(`/proc/self/status`,ut(t)),e.writeFileSync(`/proc/self/fd/0`,`/dev/stdin`),e.writeFileSync(`/proc/self/fd/1`,`/dev/stdout`),e.writeFileSync(`/proc/self/fd/2`,`/dev/stderr`)}function
|
|
214
|
+
`),e.writeFileLazy?e.writeFileLazy(`/proc/self/status`,()=>ut(t)):e.writeFileSync(`/proc/self/status`,ut(t)),e.writeFileSync(`/proc/self/fd/0`,`/dev/stdin`),e.writeFileSync(`/proc/self/fd/1`,`/dev/stdout`),e.writeFileSync(`/proc/self/fd/2`,`/dev/stderr`)}function $h(e,t,n={pid:1,ppid:0,uid:1e3,gid:1e3}){Yh(e)&&(Xh(e,t),Zh(e),Qh(e,n))}var eg=[`allexport`,`errexit`,`noglob`,`noclobber`,`noexec`,`nounset`,`pipefail`,`posix`,`verbose`,`xtrace`],tg=[`braceexpand`,`hashall`,`interactive-comments`];function ng(e){let t=[],n=[...tg.map(e=>({name:e,enabled:!0})),...eg.map(t=>({name:t,enabled:e[t]}))].sort((e,t)=>e.name.localeCompare(t.name));for(let e of n)e.enabled&&t.push(e.name);return t.join(`:`)}function rg(e){e.state.env.set(`SHELLOPTS`,ng(e.state.options))}var ig=[`dotglob`,`expand_aliases`,`extglob`,`failglob`,`globskipdots`,`globstar`,`lastpipe`,`nocaseglob`,`nocasematch`,`nullglob`,`xpg_echo`];function ag(e){let t=[];for(let n of ig)e[n]&&t.push(n);return t.join(`:`)}function og(e){e.state.env.set(`BASHOPTS`,ag(e.state.shoptOptions))}var sg=`BASH_ALIAS_`;function cg(e){return e.parts.length===1?e.parts[0].type===`Literal`:!1}function lg(e){if(e.parts.length!==1)return null;let t=e.parts[0];return t.type===`Literal`?t.value:null}function ug(e,t){return e.env.get(`${sg}${t}`)}function dg(e,t,n){if(!t.name||!cg(t.name))return t;let r=lg(t.name);if(!r)return t;let i=ug(e,r);if(!i||n.has(r))return t;try{n.add(r);let a=new Ut,o=i,s=i.endsWith(` `);if(!s)for(let e of t.args){let t=pg(e);o+=` ${t}`}let c;try{c=a.parse(o)}catch(e){if(e instanceof Bt)throw e;return t}if(c.statements.length!==1||c.statements[0].pipelines.length!==1||c.statements[0].pipelines[0].commands.length!==1)return fg(t,i);let l=c.statements[0].pipelines[0].commands[0];if(l.type!==`SimpleCommand`)return fg(t,i);let u={...l,assignments:[...t.assignments,...l.assignments],redirections:[...l.redirections,...t.redirections],line:t.line};if(s&&t.args.length>0&&(u={...u,args:[...u.args,...t.args]},u.args.length>0)){let t=u.args[0];if(cg(t)){let r=lg(t);if(r&&ug(e,r)){let r={type:`SimpleCommand`,name:t,args:u.args.slice(1),assignments:[],redirections:[]},i=dg(e,r,n);i!==r&&(u={...u,name:i.name,args:[...i.args]})}}}return u}catch(e){throw n.delete(r),e}}function fg(e,t){let n=t;for(let t of e.args){let e=pg(t);n+=` ${e}`}let r=new Ut;return{type:`SimpleCommand`,name:r.parseWordFromString(`eval`,!1,!1),args:[r.parseWordFromString(`'${n.replace(/'/g,`'\\''`)}'`,!1,!1)],assignments:e.assignments,redirections:e.redirections,line:e.line}}function pg(e){let t=``;for(let n of e.parts)switch(n.type){case`Literal`:t+=n.value.replace(/([\s"'$`\\*?[\]{}()<>|&;#!])/g,`\\$1`);break;case`SingleQuoted`:t+=`'${n.value}'`;break;case`DoubleQuoted`:t+=`"${n.parts.map(e=>e.type===`Literal`?e.value:`$${e.type}`).join(``)}"`;break;case`ParameterExpansion`:t+=`\${${n.parameter}}`;break;case`CommandSubstitution`:t+=`$(...)`;break;case`ArithmeticExpansion`:t+=`$((${n.expression}))`;break;case`Glob`:t+=n.pattern;break;default:break}return t}async function mg(e,t){let n=t.parts.map(e=>e.type===`Literal`?e.value:`\0`).join(``),r=n.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);if(!r||!n.endsWith(`)`))return null;let i=r[1],a=[],o=!1,s=``,c=!1;for(let n of t.parts)if(n.type===`Literal`){let e=n.value;if(!o){let t=e.indexOf(`=(`);t!==-1&&(o=!0,e=e.slice(t+2))}if(o){e.endsWith(`)`)&&(e=e.slice(0,-1));let t=e.split(/(\s+)/);for(let e of t)/^\s+$/.test(e)?(s||c)&&(a.push(s),s=``,c=!1):e&&(s+=e)}}else if(o)if(n.type===`BraceExpansion`)if(/^\[.+\]=/.test(s))s+=jt({type:`Word`,parts:[n]});else{(s||c)&&(a.push(s),s=``,c=!1);let t=await qt(e,{type:`Word`,parts:[n]});a.push(...t.values)}else{(n.type===`SingleQuoted`||n.type===`DoubleQuoted`||n.type===`Escaped`)&&(c=!0);let t=await F(e,{type:`Word`,parts:[n]});s+=t}return(s||c)&&a.push(s),`${i}=(${a.map(e=>/^\[.+\]=/.test(e)?e:e===``?`''`:/[\s"'\\$`!*?[\]{}|&;<>()]/.test(e)&&!e.startsWith(`'`)&&!e.startsWith(`"`)?`'${e.replace(/'/g,`'\\''`)}'`:e).join(` `)})`}async function hg(e,t){let n=-1,r=-1,i=!1;for(let e=0;e<t.parts.length;e++){let a=t.parts[e];if(a.type===`Literal`){let t=a.value.indexOf(`+=`);if(t!==-1){let o=a.value.slice(0,t);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(o)){n=e,r=t,i=!0;break}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(o)){n=e,r=t,i=!0;break}}let o=a.value.indexOf(`=`);if(o!==-1&&(o===0||a.value[o-1]!==`+`)){let t=a.value.slice(0,o);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)||/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(t)){n=e,r=o;break}}}}if(n===-1)return null;let a=t.parts.slice(0,n),o=t.parts[n];if(o.type!==`Literal`)return null;let s=i?2:1,c=o.value.slice(0,r),l=o.value.slice(r+s),u=t.parts.slice(n+1),d=``;for(let t of a)d+=await F(e,{type:`Word`,parts:[t]});d+=c;let f={type:`Word`,parts:l===``?u:[{type:`Literal`,value:l},...u]},p=f.parts.length>0?await F(e,f):``;return`${d}${i?`+=`:`=`}${p}`}var gg=[`tar`,`yq`,`xan`,`sqlite3`,`python3`,`python`];function _g(e){return gg.includes(e)}var vg=Object.freeze({stdout:``,stderr:``,exitCode:0});function yg(e=``){return{stdout:e,stderr:``,exitCode:0}}function Q(e,t=1){return{stdout:``,stderr:e,exitCode:t}}function $(e,t,n){return{stdout:e,stderr:t,exitCode:n}}function bg(e){return{stdout:``,stderr:``,exitCode:e?0:1}}function xg(e,t,n=``,r=``){throw new Qe(e,t,n,r)}function Sg(e){let t=e.state.fileDescriptors;if(t&&t.size>=e.limits.maxFileDescriptors)throw new Qe(`too many open file descriptors (max ${e.limits.maxFileDescriptors})`,`file_descriptors`)}function Cg(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new at;return vg}if(t.length>1)throw new nt(1,``,`bash: break: too many arguments
|
|
214
215
|
`);let n=1;if(t.length>0){let e=Number.parseInt(t[0],10);if(Number.isNaN(e)||e<1)throw new nt(128,``,`bash: break: ${t[0]}: numeric argument required
|
|
215
|
-
`);n=e}throw new qe(n)}async function
|
|
216
|
+
`);n=e}throw new qe(n)}async function wg(e,t){let n,r=!1,i=!1,a=0;for(;a<t.length;)if(t[a]===`--`){a++;break}else if(t[a]===`-L`)i=!1,a++;else if(t[a]===`-P`)i=!0,a++;else if(t[a].startsWith(`-`)&&t[a]!==`-`)a++;else break;let o=t.slice(a);if(o.length===0||o[0]===`~`?n=e.state.env.get(`HOME`)||`/`:o[0]===`-`?(n=e.state.previousDir,r=!0):n=o[0],!n.startsWith(`/`)&&!n.startsWith(`./`)&&!n.startsWith(`../`)&&n!==`.`&&n!==`..`){let t=e.state.env.get(`CDPATH`);if(t){let i=t.split(`:`).filter(e=>e);for(let t of i){let i=t.startsWith(`/`)?`${t}/${n}`:`${e.state.cwd}/${t}/${n}`;try{if((await e.fs.stat(i)).isDirectory){n=i,r=!0;break}}catch{}}}}let s=(n.startsWith(`/`)?n:`${e.state.cwd}/${n}`).split(`/`).filter(e=>e&&e!==`.`),c=``;for(let t of s)if(t===`..`)c=c.split(`/`).slice(0,-1).join(`/`)||`/`;else{c=c?`${c}/${t}`:`/${t}`;try{if(!(await e.fs.stat(c)).isDirectory)return Q(`bash: cd: ${n}: Not a directory
|
|
216
217
|
`)}catch{return Q(`bash: cd: ${n}: No such file or directory
|
|
217
|
-
`)}}let l=c||`/`;if(i)try{l=await e.fs.realpath(l)}catch{}return e.state.previousDir=e.state.cwd,e.state.cwd=l,e.state.env.set(`PWD`,e.state.cwd),e.state.env.set(`OLDPWD`,e.state.previousDir),
|
|
218
|
-
`:``)}function
|
|
219
|
-
`,!1}return e.state.env.has(`${t}_${i}`)}return e.state.env.has(t)?!0:e.state.associativeArrays?.has(t)?ct(e,t).length>0:vt(e,t).length>0}async function
|
|
220
|
-
`,2):
|
|
221
|
-
`,2):$(``,``,1)}if(t.length===3){let n=t[0],r=t[1],i=t[2];if(
|
|
222
|
-
`,2):
|
|
223
|
-
`)&&!r&&!i){o&&=(t.push(n),n=``,!1);continue}n+=s,o=!0}return o&&t.push(n),t}function
|
|
218
|
+
`)}}let l=c||`/`;if(i)try{l=await e.fs.realpath(l)}catch{}return e.state.previousDir=e.state.cwd,e.state.cwd=l,e.state.env.set(`PWD`,e.state.cwd),e.state.env.set(`OLDPWD`,e.state.previousDir),yg(r?`${l}
|
|
219
|
+
`:``)}function Tg(e,t){return e.fs.resolvePath(e.state.cwd,t)}var Eg=[`-e`,`-a`,`-f`,`-d`,`-r`,`-w`,`-x`,`-s`,`-L`,`-h`,`-k`,`-g`,`-u`,`-G`,`-O`,`-b`,`-c`,`-p`,`-S`,`-t`,`-N`];function Dg(e){return Eg.includes(e)}async function Og(e,t,n){let r=Tg(e,n);switch(t){case`-e`:case`-a`:return e.fs.exists(r);case`-f`:return await e.fs.exists(r)?(await e.fs.stat(r)).isFile:!1;case`-d`:return await e.fs.exists(r)?(await e.fs.stat(r)).isDirectory:!1;case`-r`:return await e.fs.exists(r)?((await e.fs.stat(r)).mode&256)!=0:!1;case`-w`:return await e.fs.exists(r)?((await e.fs.stat(r)).mode&128)!=0:!1;case`-x`:return await e.fs.exists(r)?((await e.fs.stat(r)).mode&64)!=0:!1;case`-s`:return await e.fs.exists(r)?(await e.fs.stat(r)).size>0:!1;case`-L`:case`-h`:try{return(await e.fs.lstat(r)).isSymbolicLink}catch{return!1}case`-k`:return await e.fs.exists(r)?((await e.fs.stat(r)).mode&512)!=0:!1;case`-g`:return await e.fs.exists(r)?((await e.fs.stat(r)).mode&1024)!=0:!1;case`-u`:return await e.fs.exists(r)?((await e.fs.stat(r)).mode&2048)!=0:!1;case`-G`:case`-O`:return e.fs.exists(r);case`-b`:return!1;case`-c`:return[`/dev/null`,`/dev/zero`,`/dev/random`,`/dev/urandom`,`/dev/tty`,`/dev/stdin`,`/dev/stdout`,`/dev/stderr`].includes(r);case`-p`:return!1;case`-S`:return!1;case`-t`:return!1;case`-N`:return e.fs.exists(r);default:return!1}}var kg=[`-nt`,`-ot`,`-ef`];function Ag(e){return kg.includes(e)}async function jg(e,t,n,r){let i=Tg(e,n),a=Tg(e,r);switch(t){case`-nt`:try{let t=await e.fs.stat(i),n=await e.fs.stat(a);return t.mtime>n.mtime}catch{return!1}case`-ot`:try{let t=await e.fs.stat(i),n=await e.fs.stat(a);return t.mtime<n.mtime}catch{return!1}case`-ef`:try{return!await e.fs.exists(i)||!await e.fs.exists(a)?!1:e.fs.resolvePath(e.state.cwd,i)===e.fs.resolvePath(e.state.cwd,a)}catch{return!1}default:return!1}}var Mg=new Set([`-eq`,`-ne`,`-lt`,`-le`,`-gt`,`-ge`]);function Ng(e){return Mg.has(e)}function Pg(e,t,n){switch(e){case`-eq`:return t===n;case`-ne`:return t!==n;case`-lt`:return t<n;case`-le`:return t<=n;case`-gt`:return t>n;case`-ge`:return t>=n}}function Fg(e){return e===`=`||e===`==`||e===`!=`}function Ig(e,t,n,r=!1,i=!1,a=!1){if(r){let r=Jg(t,n,i,a);return e===`!=`?!r:r}if(i){let r=t.toLowerCase()===n.toLowerCase();return e===`!=`?!r:r}let o=t===n;return e===`!=`?!o:o}var Lg=new Set([`-z`,`-n`]);function Rg(e){return Lg.has(e)}function zg(e,t){switch(e){case`-z`:return t===``;case`-n`:return t!==``}}async function Bg(e,t){let n=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(n){let t=n[1],r=n[2];if(e.state.associativeArrays?.has(t)){let n=r;return(n.startsWith(`'`)&&n.endsWith(`'`)||n.startsWith(`"`)&&n.endsWith(`"`))&&(n=n.slice(1,-1)),n=n.replace(/\$([a-zA-Z_][a-zA-Z0-9_]*)/g,(t,n)=>e.state.env.get(n)||``),e.state.env.has(`${t}_${n}`)}let i;try{i=await Rt(e,Dt(new Ut,r).expression)}catch{if(/^-?\d+$/.test(r))i=Number.parseInt(r,10);else{let t=e.state.env.get(r);i=t?Number.parseInt(t,10):0}}if(i<0){let n=vt(e,t),r=e.state.currentLine;if(n.length===0||(i=Math.max(...n)+1+i,i<0))return e.state.expansionStderr=(e.state.expansionStderr||``)+`bash: line ${r}: ${t}: bad array subscript
|
|
220
|
+
`,!1}return e.state.env.has(`${t}_${i}`)}return e.state.env.has(t)?!0:e.state.associativeArrays?.has(t)?ct(e,t).length>0:vt(e,t).length>0}async function Vg(e,t){switch(t.type){case`CondBinary`:{let n=await F(e,t.left),r=t.right.parts.length>0&&t.right.parts.every(e=>e.type===`SingleQuoted`||e.type===`DoubleQuoted`||e.type===`Escaped`&&t.operator!==`=~`),i;if(i=t.operator===`=~`?r?ft(await F(e,t.right)):await At(e,t.right):Fg(t.operator)&&!r?await St(e,t.right):await F(e,t.right),Fg(t.operator)){let a=e.state.shoptOptions.nocasematch;return Ig(t.operator,n,i,!r,a,!0)}if(Ng(t.operator))return Pg(t.operator,await e_(e,n),await e_(e,i));if(Ag(t.operator))return jg(e,t.operator,n,i);switch(t.operator){case`=~`:try{let t=e.state.shoptOptions.nocasematch,r=Ke(i_(i),t?`i`:``).match(n);if(zt(e,`BASH_REMATCH`),r)for(let t=0;t<r.length;t++)e.state.env.set(`BASH_REMATCH_${t}`,r[t]||``);return r!==null}catch{throw Error(`syntax error in regular expression`)}case`<`:return n<i;case`>`:return n>i;default:return!1}}case`CondUnary`:{let n=await F(e,t.operand);return Dg(t.operator)?Og(e,t.operator,n):Rg(t.operator)?zg(t.operator,n):t.operator===`-v`?await Bg(e,n):t.operator===`-o`?$g(e,n):!1}case`CondNot`:return e.state.shoptOptions.extglob&&t.operand.type===`CondGroup`&&t.operand.expression.type===`CondWord`?`!(${await F(e,t.operand.expression.word)})`!=``:!await Vg(e,t.operand);case`CondAnd`:return await Vg(e,t.left)?await Vg(e,t.right):!1;case`CondOr`:return await Vg(e,t.left)?!0:await Vg(e,t.right);case`CondGroup`:return await Vg(e,t.expression);case`CondWord`:return await F(e,t.word)!==``;default:return!1}}async function Hg(e,t){if(t.length===0)return $(``,``,1);if(t.length===1)return bg(!!t[0]);if(t.length===2){let n=t[0],r=t[1];return n===`(`?Q(`test: '(' without matching ')'
|
|
221
|
+
`,2):Dg(n)?bg(await Og(e,n,r)):Rg(n)?bg(zg(n,r)):n===`!`?bg(!r):n===`-v`?bg(await Bg(e,r)):n===`-o`?bg($g(e,r)):n===`=`||n===`==`||n===`!=`||n===`<`||n===`>`||n===`-eq`||n===`-ne`||n===`-lt`||n===`-le`||n===`-gt`||n===`-ge`||n===`-nt`||n===`-ot`||n===`-ef`?Q(`test: ${n}: unary operator expected
|
|
222
|
+
`,2):$(``,``,1)}if(t.length===3){let n=t[0],r=t[1],i=t[2];if(Fg(r))return bg(Ig(r,n,i));if(Ng(r)){let e=r_(n),t=r_(i);return!e.valid||!t.valid?$(``,``,2):bg(Pg(r,e.value,t.value))}if(Ag(r))return bg(await jg(e,r,n,i));switch(r){case`-a`:return bg(n!==``&&i!==``);case`-o`:return bg(n!==``||i!==``);case`>`:return bg(n>i);case`<`:return bg(n<i)}if(n===`!`){let t=await Hg(e,[r,i]);return $(``,t.stderr,t.exitCode===0?1:t.exitCode===1?0:t.exitCode)}if(n===`(`&&i===`)`)return bg(r!==``)}if(t.length===4){if(t[0]===`!`){let n=await Hg(e,t.slice(1));return $(``,n.stderr,n.exitCode===0?1:n.exitCode===1?0:n.exitCode)}if(t[0]===`(`&&t[3]===`)`)return Hg(e,[t[1],t[2]])}let n=await Ug(e,t,0);return n.pos<t.length?Q(`test: too many arguments
|
|
223
|
+
`,2):bg(n.value)}async function Ug(e,t,n){return Wg(e,t,n)}async function Wg(e,t,n){let{value:r,pos:i}=await Gg(e,t,n);for(;t[i]===`-o`;){let n=await Gg(e,t,i+1);r||=n.value,i=n.pos}return{value:r,pos:i}}async function Gg(e,t,n){let{value:r,pos:i}=await Kg(e,t,n);for(;t[i]===`-a`;){let n=await Kg(e,t,i+1);r&&=n.value,i=n.pos}return{value:r,pos:i}}async function Kg(e,t,n){if(t[n]===`!`){let{value:r,pos:i}=await Kg(e,t,n+1);return{value:!r,pos:i}}return qg(e,t,n)}async function qg(e,t,n){let r=t[n];if(r===`(`){let{value:r,pos:i}=await Ug(e,t,n+1);return{value:r,pos:t[i]===`)`?i+1:i}}let i=t[n+1];if(Fg(i))return{value:Ig(i,r,t[n+2]??``),pos:n+3};if(Ng(i)){let e=r_(r),a=r_(t[n+2]??`0`);return!e.valid||!a.valid?{value:!1,pos:n+3}:{value:Pg(i,e.value,a.value),pos:n+3}}return Ag(i)?{value:await jg(e,i,r,t[n+2]??``),pos:n+3}:Dg(r)?{value:await Og(e,r,t[n+1]??``),pos:n+2}:Rg(r)?{value:zg(r,t[n+1]??``),pos:n+2}:r===`-v`?{value:await Bg(e,t[n+1]??``),pos:n+2}:r===`-o`?{value:$g(e,t[n+1]??``),pos:n+2}:{value:r!==void 0&&r!==``,pos:n+1}}function Jg(e,t,n=!1,r=!1){return Ke(`^${Yg(t,r)}$`,n?`is`:`s`).test(e)}function Yg(e,t){let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(t&&(i===`@`||i===`*`||i===`+`||i===`?`||i===`!`)&&r+1<e.length&&e[r+1]===`(`){let a=Xg(e,r+1);if(a!==-1){let o=Zg(e.slice(r+2,a)),s=o.map(e=>Yg(e,t)),c=s.length>0?s.join(`|`):`(?:)`;if(i===`@`)n+=`(?:${c})`;else if(i===`*`)n+=`(?:${c})*`;else if(i===`+`)n+=`(?:${c})+`;else if(i===`?`)n+=`(?:${c})?`;else if(i===`!`)if(a<e.length-1){let e=o.map(e=>Qg(e,t));if(e.every(e=>e!==null)&&e.every(t=>t===e[0])&&e[0]!==null){let t=e[0];if(t===0)n+=`(?:.+)`;else{let e=[];t>0&&e.push(`.{0,${t-1}}`),e.push(`.{${t+1},}`),e.push(`(?!(?:${c})).{${t}}`),n+=`(?:${e.join(`|`)})`}}else n+=`(?:(?!(?:${c})).)*?`}else n+=`(?!(?:${c})$).*`;r=a;continue}}if(i===`\\`)if(r+1<e.length){let t=e[r+1];/[\\^$.|+(){}[\]*?]/.test(t)?n+=`\\${t}`:n+=t,r++}else n+=`\\\\`;else if(i===`*`)n+=`.*`;else if(i===`?`)n+=`.`;else if(i===`[`){let t=e.indexOf(`]`,r+1);t===-1?n+=`\\[`:(n+=e.slice(r,t+1),r=t)}else /[\\^$.|+(){}]/.test(i)?n+=`\\${i}`:n+=i}return n}function Xg(e,t){let n=1,r=t+1;for(;r<e.length&&n>0;){let t=e[r];if(t===`\\`){r+=2;continue}if(t===`(`)n++;else if(t===`)`&&(n--,n===0))return r;r++}return-1}function Zg(e){let t=[],n=``,r=0,i=0;for(;i<e.length;){let a=e[i];if(a===`\\`){n+=a,i+1<e.length?(n+=e[i+1],i+=2):i++;continue}a===`(`?(r++,n+=a):a===`)`?(r--,n+=a):a===`|`&&r===0?(t.push(n),n=``):n+=a,i++}return t.push(n),t}function Qg(e,t){let n=0,r=0;for(;r<e.length;){let i=e[r];if(t&&(i===`@`||i===`*`||i===`+`||i===`?`||i===`!`)&&r+1<e.length&&e[r+1]===`(`){let a=Xg(e,r+1);if(a!==-1){if(i===`@`){let i=Zg(e.slice(r+2,a)).map(e=>Qg(e,t));if(i.every(e=>e!==null)&&i.every(e=>e===i[0])){n+=i[0],r=a+1;continue}return null}return null}}if(i===`*`)return null;if(i===`?`){n+=1,r++;continue}if(i===`[`){let t=e.indexOf(`]`,r+1);if(t!==-1){n+=1,r=t+1;continue}n+=1,r++;continue}if(i===`\\`){n+=1,r+=2;continue}n+=1,r++}return n}function $g(e,t){let n=new Map([[`errexit`,()=>e.state.options.errexit===!0],[`nounset`,()=>e.state.options.nounset===!0],[`pipefail`,()=>e.state.options.pipefail===!0],[`xtrace`,()=>e.state.options.xtrace===!0],[`e`,()=>e.state.options.errexit===!0],[`u`,()=>e.state.options.nounset===!0],[`x`,()=>e.state.options.xtrace===!0]]).get(t);return n?n():!1}async function e_(e,t){if(t=t.trim(),t===``)return 0;if(/^[+-]?(\d+#[a-zA-Z0-9@_]+|0[xX][0-9a-fA-F]+|0[0-7]+|\d+)$/.test(t))return n_(t);try{return await Rt(e,Dt(new Ut,t).expression)}catch{return n_(t)}}function t_(e,t){let n=0;for(let r of e){let e;if(r>=`0`&&r<=`9`)e=r.charCodeAt(0)-48;else if(r>=`a`&&r<=`z`)e=r.charCodeAt(0)-97+10;else if(r>=`A`&&r<=`Z`)e=r.charCodeAt(0)-65+36;else if(r===`@`)e=62;else if(r===`_`)e=63;else return NaN;if(e>=t)return NaN;n=n*t+e}return n}function n_(e){if(e=e.trim(),e===``)return 0;let t=!1;e.startsWith(`-`)?(t=!0,e=e.slice(1)):e.startsWith(`+`)&&(e=e.slice(1));let n,r=e.match(/^(\d+)#([a-zA-Z0-9@_]+)$/);if(r){let e=Number.parseInt(r[1],10);n=e>=2&&e<=64?t_(r[2],e):0}else n=/^0[xX][0-9a-fA-F]+$/.test(e)?Number.parseInt(e,16):/^0[0-7]+$/.test(e)?Number.parseInt(e,8):Number.parseInt(e,10);return Number.isNaN(n)&&(n=0),t?-n:n}function r_(e){if(e=e.trim(),e===``)return{value:0,valid:!0};let t=!1;if(e.startsWith(`-`)?(t=!0,e=e.slice(1)):e.startsWith(`+`)&&(e=e.slice(1)),!/^\d+$/.test(e))return{value:0,valid:!1};let n=Number.parseInt(e,10);return Number.isNaN(n)?{value:0,valid:!1}:{value:t?-n:n,valid:!0}}function i_(e){let t=``,n=0;for(;n<e.length;)if(e[n]===`\\`&&n+1<e.length)t+=e[n]+e[n+1],n+=2;else if(e[n]===`[`){let r=a_(e,n);t+=r.converted,n=r.endIndex}else t+=e[n],n++;return t}function a_(e,t){let n=t+1,r=`[`;n<e.length&&(e[n]===`^`||e[n]===`!`)&&(r+=`^`,n++);let i=!1;n<e.length&&e[n]===`]`&&(i=!0,n++);let a=!1;n<e.length&&e[n]===`[`&&n+1<e.length&&e[n+1]!==`:`&&(a=!0,n++);let o=``,s=!1;for(;n<e.length;){let t=e[n];if(t===`]`){s=!0,n++;break}if(t===`[`&&n+1<e.length&&e[n+1]===`:`){let t=e.indexOf(`:]`,n+2);if(t!==-1){let r=e.slice(n+2,t);o+=o_(r),n=t+2;continue}}if(t===`[`&&n+1<e.length){let t=e[n+1];if(t===`.`||t===`=`){let r=`${t}]`,i=e.indexOf(r,n+2);if(i!==-1){let t=e.slice(n+2,i);o+=t,n=i+2;continue}}}if(t===`\\`&&n+1<e.length){o+=t+e[n+1],n+=2;continue}o+=t,n++}return s?(i&&(r+=`\\]`),a&&(r+=`\\[`),r+=o,r+=`]`,{converted:r,endIndex:n}):{converted:`\\[`,endIndex:t+1}}function o_(e){return new Map([[`alnum`,`a-zA-Z0-9`],[`alpha`,`a-zA-Z`],[`ascii`,`\\x00-\\x7F`],[`blank`,` \\t`],[`cntrl`,`\\x00-\\x1F\\x7F`],[`digit`,`0-9`],[`graph`,`!-~`],[`lower`,`a-z`],[`print`,` -~`],[`punct`,"!-/:-@\\[-`{-~"],[`space`,` \\t\\n\\r\\f\\v`],[`upper`,`A-Z`],[`word`,`a-zA-Z0-9_`],[`xdigit`,`0-9A-Fa-f`]]).get(e)??``}function s_(e){let t=[],n=``,r=!1,i=!1,a=!1,o=!1;for(let s of e){if(a){n+=s,a=!1,o=!0;continue}if(s===`\\`){a=!0;continue}if(s===`'`&&!i){r||(o=!0),r=!r;continue}if(s===`"`&&!r){i||(o=!0),i=!i;continue}if((s===` `||s===` `||s===`
|
|
224
|
+
`)&&!r&&!i){o&&=(t.push(n),n=``,!1);continue}n+=s,o=!0}return o&&t.push(n),t}function c_(e){let t=[],n=0;for(;n<e.length;){for(;n<e.length&&/\s/.test(e[n]);)n++;if(n>=e.length)break;if(e[n]!==`[`){n++;continue}n++;let r=``;if(e[n]===`'`||e[n]===`"`){let t=e[n];for(n++;n<e.length&&e[n]!==t;)r+=e[n],n++;e[n]===t&&n++}else for(;n<e.length&&e[n]!==`]`&&e[n]!==`=`;)r+=e[n],n++;for(;n<e.length&&e[n]!==`]`;)n++;if(e[n]===`]`&&n++,e[n]!==`=`)continue;n++;let i=``;if(e[n]===`'`||e[n]===`"`){let t=e[n];for(n++;n<e.length&&e[n]!==t;)e[n]===`\\`&&n+1<e.length&&n++,i+=e[n],n++;e[n]===t&&n++}else for(;n<e.length&&!/\s/.test(e[n]);)i+=e[n],n++;t.push([r,i])}return t}function l_(e){let t=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(t)return{name:t[1],isArray:!0,arrayElements:s_(t[2])};let n=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([^\]]+)\]=(.*)$/s);if(n)return{name:n[1],isArray:!1,arrayIndex:n[2],value:n[3]};if(e.includes(`=`)){let t=e.indexOf(`=`);return{name:e.slice(0,t),isArray:!1,value:e.slice(t+1)}}return{name:e,isArray:!1}}async function u_(e,t){try{return await Rt(e,Dt(new Ut,t).expression)}catch{let e=parseInt(t,10);return Number.isNaN(e)?0:e}}async function d_(e,t,n={}){let{name:r,isArray:i,arrayElements:a,value:o,arrayIndex:s}=t,{makeReadonly:c=!1,checkReadonly:l=!0}=n;if(l){let t=dt(e,r);if(t)return t}if(i&&a){for(let t=0;t<a.length;t++)e.state.env.set(`${r}_${t}`,a[t]);e.state.env.set(`${r}__length`,String(a.length))}else if(s!==void 0&&o!==void 0){let t=await u_(e,s);e.state.env.set(`${r}_${t}`,o),t>=parseInt(e.state.env.get(`${r}__length`)??`0`,10)&&e.state.env.set(`${r}__length`,String(t+1))}else o!==void 0&&e.state.env.set(r,o);return c&&bt(e,r),null}function f_(e,t){e.state.localVarDepth=e.state.localVarDepth||new Map,e.state.localVarDepth.set(t,e.state.callDepth)}function p_(e,t){return e.state.localVarDepth?.get(t)}function m_(e,t){e.state.localVarDepth?.delete(t)}function h_(e,t,n){e.state.localVarStack=e.state.localVarStack||new Map;let r=e.state.localVarStack.get(t)||[];r.push({value:n,scopeIndex:e.state.localScopes.length-1}),e.state.localVarStack.set(t,r)}function g_(e,t){let n=e.state.localVarStack?.get(t);if(!(!n||n.length===0))return n.pop()}function __(e,t){if(e.state.localVarStack)for(let[n,r]of e.state.localVarStack.entries()){for(;r.length>0&&r[r.length-1].scopeIndex===t;)r.pop();r.length===0&&e.state.localVarStack.delete(n)}}var v_=new Set([`:`,`.`,`break`,`continue`,`eval`,`exec`,`exit`,`export`,`readonly`,`return`,`set`,`shift`,`trap`,`unset`]);function y_(e){return v_.has(e)}var b_=new Set([`if`,`then`,`else`,`elif`,`fi`,`case`,`esac`,`for`,`select`,`while`,`until`,`do`,`done`,`in`,`function`,`{`,`}`,`time`,`[[`,`]]`,`!`]),x_=new Set(`:,true,false,cd,export,unset,exit,local,set,break,continue,return,eval,shift,getopts,compgen,complete,compopt,pushd,popd,dirs,source,.,read,mapfile,readarray,declare,typeset,readonly,let,command,shopt,exec,test,[,echo,printf,pwd,alias,unalias,type,hash,ulimit,umask,trap,times,wait,kill,jobs,fg,bg,disown,suspend,fc,history,help,enable,builtin,caller`.split(`,`));async function S_(e,t,n,r){try{if((await e.fs.stat(t)).isDirectory)return`bash: ${n}: Is a directory
|
|
224
225
|
`;if(r.checkNoclobber&&e.state.options.noclobber&&!r.isClobber&&n!==`/dev/null`)return`bash: ${n}: cannot overwrite existing file
|
|
225
|
-
`}catch{}return null}function
|
|
226
|
-
`};n.set(r,await F(e,i.target))}else{let t=await Pt(e,i.target);if(`error`in t)return{targets:n,error:t.error};n.set(r,t.target)}}return{targets:n}}function
|
|
227
|
-
`);else if(n.operator===`<`||n.operator===`<>`)try{let n=e.fs.resolvePath(e.state.cwd,r),i=await e.fs.readFile(n);
|
|
228
|
-
`,1)}}}return null}async function
|
|
226
|
+
`}catch{}return null}function C_(e){let t=Math.min(e.length,8192);for(let n=0;n<t;n++)if(e.charCodeAt(n)>127)return`utf8`;return`binary`}function w_(e){if(!e.startsWith(`__rw__:`))return null;let t=e.slice(7),n=t.indexOf(`:`);if(n===-1)return null;let r=Number.parseInt(t.slice(0,n),10);if(Number.isNaN(r)||r<0)return null;let i=n+1,a=t.slice(i,i+r),o=i+r+1,s=t.slice(o),c=s.indexOf(`:`);if(c===-1)return null;let l=Number.parseInt(s.slice(0,c),10);return Number.isNaN(l)||l<0?null:{path:a,position:l,content:s.slice(c+1)}}async function T_(e,t){let n=new Map;for(let r=0;r<t.length;r++){let i=t[r];if(i.target.type!==`HereDoc`)if(i.operator===`>&`||i.operator===`<&`){if(Lt(e,i.target))return{targets:n,error:`bash: $@: ambiguous redirect
|
|
227
|
+
`};n.set(r,await F(e,i.target))}else{let t=await Pt(e,i.target);if(`error`in t)return{targets:n,error:t.error};n.set(r,t.target)}}return{targets:n}}function E_(e){e.state.nextFd===void 0&&(e.state.nextFd=10);let t=e.state.nextFd,n=e.limits.maxFileDescriptors;if(t>=n)throw Error(`bash: cannot allocate file descriptor: too many open files (max ${n})`);return e.state.nextFd++,t}async function D_(e,t){for(let n of t){if(!n.fdVariable)continue;if(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),(n.operator===`>&`||n.operator===`<&`)&&n.target.type===`Word`&&await F(e,n.target)===`-`){let t=e.state.env.get(n.fdVariable);if(t!==void 0){let n=Number.parseInt(t,10);Number.isNaN(n)||e.state.fileDescriptors.delete(n)}continue}let t=E_(e);if(e.state.env.set(n.fdVariable,String(t)),n.target.type===`Word`){let r=await F(e,n.target);if(n.operator===`>&`||n.operator===`<&`){let n=Number.parseInt(r,10);if(!Number.isNaN(n)){let r=e.state.fileDescriptors.get(n);r!==void 0&&(Sg(e),e.state.fileDescriptors.set(t,r));continue}}if(n.operator===`>`||n.operator===`>>`||n.operator===`>|`||n.operator===`&>`||n.operator===`&>>`){let i=e.fs.resolvePath(e.state.cwd,r);(n.operator===`>`||n.operator===`>|`||n.operator===`&>`)&&await e.fs.writeFile(i,``,`binary`),Sg(e),e.state.fileDescriptors.set(t,`__file__:${i}`)}else if(n.operator===`<<<`)Sg(e),e.state.fileDescriptors.set(t,`${r}
|
|
228
|
+
`);else if(n.operator===`<`||n.operator===`<>`)try{let n=e.fs.resolvePath(e.state.cwd,r),i=await e.fs.readFile(n);Sg(e),e.state.fileDescriptors.set(t,i)}catch{return $(``,`bash: ${r}: No such file or directory
|
|
229
|
+
`,1)}}}return null}async function O_(e,t){for(let n of t){if(n.target.type===`HereDoc`)continue;let t=n.operator===`>&`;if(n.operator!==`>`&&n.operator!==`>|`&&n.operator!==`&>`&&!t)continue;let r;if(t){if(r=await F(e,n.target),r===`-`||!Number.isNaN(Number.parseInt(r,10))||n.fd!=null)continue}else{let t=await Pt(e,n.target);if(`error`in t)return $(``,t.error,1);r=t.target}let i=e.fs.resolvePath(e.state.cwd,r),a=n.operator===`>|`;if(i.includes(`\0`))return $(``,`bash: ${r}: No such file or directory
|
|
229
230
|
`,1);try{let t=await e.fs.stat(i);if(t.isDirectory)return $(``,`bash: ${r}: Is a directory
|
|
230
231
|
`,1);if(e.state.options.noclobber&&!a&&!t.isDirectory&&r!==`/dev/null`)return $(``,`bash: ${r}: cannot overwrite existing file
|
|
231
232
|
`,1)}catch{}if(r!==`/dev/null`&&r!==`/dev/stdout`&&r!==`/dev/stderr`&&r!==`/dev/full`&&await e.fs.writeFile(i,``,`binary`),r===`/dev/full`)return $(``,`bash: /dev/full: No space left on device
|
|
232
|
-
`,1)}return null}async function
|
|
233
|
+
`,1)}return null}async function k_(e,t,n,r){let{stdout:i,stderr:a,exitCode:o}=t,s=t.stdoutEncoding===`binary`?()=>`binary`:e=>C_(e);for(let t=0;t<n.length;t++){let c=n[t];if(c.target.type===`HereDoc`)continue;let l,u=r?.get(t);if(u!==void 0)l=u;else if(c.operator===`>&`||c.operator===`<&`){if(Lt(e,c.target)){a+=`bash: $@: ambiguous redirect
|
|
233
234
|
`,o=1,i=``;continue}l=await F(e,c.target)}else{let t=await Pt(e,c.target);if(`error`in t){a+=t.error,o=1,i=``;continue}l=t.target}if(!c.fdVariable){if(l.includes(`\0`)){a+=`bash: ${l.replace(/\0/g,``)}: No such file or directory
|
|
234
235
|
`,o=1,i=``;continue}switch(c.operator){case`>`:case`>|`:{let t=c.fd??1,n=c.operator===`>|`;if(t===1){if(l===`/dev/stdout`)break;if(l===`/dev/stderr`){a+=i,i=``;break}if(l===`/dev/full`){a+=`bash: echo: write error: No space left on device
|
|
235
|
-
`,o=1,i=``;break}let t=e.fs.resolvePath(e.state.cwd,l),r=await
|
|
236
|
-
`,o=1;break}if(l===`/dev/null`)a=``;else{let t=e.fs.resolvePath(e.state.cwd,l),r=await
|
|
237
|
-
`,o=1,i=``;break}let t=e.fs.resolvePath(e.state.cwd,l),n=await
|
|
238
|
-
`,o=1;break}let t=e.fs.resolvePath(e.state.cwd,l),n=await
|
|
239
|
-
`,o=1):(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(t,n),r>=3&&e.state.fileDescriptors?.delete(r))}break}if(l===`2`||l===`&2`)t===1&&(a+=i,i=``);else if(l===`1`||l===`&1`)i+=a,a=``;else{let n=Number.parseInt(l,10);if(Number.isNaN(n)){if(c.operator===`>&`){let n=e.fs.resolvePath(e.state.cwd,l),r=await
|
|
236
|
+
`,o=1,i=``;break}let t=e.fs.resolvePath(e.state.cwd,l),r=await S_(e,t,l,{checkNoclobber:!0,isClobber:n});if(r){a+=r,o=1,i=``;break}await e.fs.writeFile(t,i,s(i)),i=``}else if(t===2){if(l===`/dev/stderr`)break;if(l===`/dev/stdout`){i+=a,a=``;break}if(l===`/dev/full`){a+=`bash: echo: write error: No space left on device
|
|
237
|
+
`,o=1;break}if(l===`/dev/null`)a=``;else{let t=e.fs.resolvePath(e.state.cwd,l),r=await S_(e,t,l,{checkNoclobber:!0,isClobber:n});if(r){a+=r,o=1;break}await e.fs.writeFile(t,a,C_(a)),a=``}}break}case`>>`:{let t=c.fd??1;if(t===1){if(l===`/dev/stdout`)break;if(l===`/dev/stderr`){a+=i,i=``;break}if(l===`/dev/full`){a+=`bash: echo: write error: No space left on device
|
|
238
|
+
`,o=1,i=``;break}let t=e.fs.resolvePath(e.state.cwd,l),n=await S_(e,t,l,{});if(n){a+=n,o=1,i=``;break}await e.fs.appendFile(t,i,s(i)),i=``}else if(t===2){if(l===`/dev/stderr`)break;if(l===`/dev/stdout`){i+=a,a=``;break}if(l===`/dev/full`){a+=`bash: echo: write error: No space left on device
|
|
239
|
+
`,o=1;break}let t=e.fs.resolvePath(e.state.cwd,l),n=await S_(e,t,l,{});if(n){a+=n,o=1;break}await e.fs.appendFile(t,a,C_(a)),a=``}break}case`>&`:case`<&`:{let t=c.fd??1;if(l===`-`)break;if(l.endsWith(`-`)){let n=l.slice(0,-1),r=Number.parseInt(n,10);if(!Number.isNaN(r)){let n=e.state.fileDescriptors?.get(r);n===void 0?r===1||r===2?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(t,`__dupout__:${r}`)):r===0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(t,`__dupin__:${r}`)):r>=3&&(a+=`bash: ${r}: Bad file descriptor
|
|
240
|
+
`,o=1):(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(t,n),r>=3&&e.state.fileDescriptors?.delete(r))}break}if(l===`2`||l===`&2`)t===1&&(a+=i,i=``);else if(l===`1`||l===`&1`)i+=a,a=``;else{let n=Number.parseInt(l,10);if(Number.isNaN(n)){if(c.operator===`>&`){let n=e.fs.resolvePath(e.state.cwd,l),r=await S_(e,n,l,{checkNoclobber:!0});if(r){a=r,o=1,i=``;break}if(c.fd==null){let t=i+a;await e.fs.writeFile(n,t,s(t)),i=``,a=``}else t===1?(await e.fs.writeFile(n,i,s(i)),i=``):t===2&&(await e.fs.writeFile(n,a,C_(a)),a=``)}}else{let r=e.state.fileDescriptors?.get(n);if(r?.startsWith(`__file__:`)){let n=r.slice(9);t===1?(await e.fs.appendFile(n,i,s(i)),i=``):t===2&&(await e.fs.appendFile(n,a,C_(a)),a=``)}else if(r?.startsWith(`__rw__:`)){let n=w_(r);n&&(t===1?(await e.fs.appendFile(n.path,i,s(i)),i=``):t===2&&(await e.fs.appendFile(n.path,a,C_(a)),a=``))}else if(r?.startsWith(`__dupout__:`)){let n=Number.parseInt(r.slice(11),10);if(n!==1)if(n===2)t===1&&(a+=i,i=``);else{let r=e.state.fileDescriptors?.get(n);if(r?.startsWith(`__file__:`)){let n=r.slice(9);t===1?(await e.fs.appendFile(n,i,s(i)),i=``):t===2&&(await e.fs.appendFile(n,a,C_(a)),a=``)}}}else (r?.startsWith(`__dupin__:`)||n>=3)&&(a+=`bash: ${n}: Bad file descriptor
|
|
240
241
|
`,o=1,i=``)}}break}case`&>`:{if(l===`/dev/full`){a=`bash: echo: write error: No space left on device
|
|
241
|
-
`,o=1,i=``;break}let t=e.fs.resolvePath(e.state.cwd,l),n=await
|
|
242
|
-
`,o=1,i=``;break}let t=e.fs.resolvePath(e.state.cwd,l),n=await
|
|
243
|
-
`);let n={...t,sourceFile:t.sourceFile??e.state.currentSource??`main`};return e.state.functions.set(t.name,n),
|
|
242
|
+
`,o=1,i=``;break}let t=e.fs.resolvePath(e.state.cwd,l),n=await S_(e,t,l,{checkNoclobber:!0});if(n){a=n,o=1,i=``;break}let r=i+a;await e.fs.writeFile(t,r,s(r)),i=``,a=``;break}case`&>>`:{if(l===`/dev/full`){a=`bash: echo: write error: No space left on device
|
|
243
|
+
`,o=1,i=``;break}let t=e.fs.resolvePath(e.state.cwd,l),n=await S_(e,t,l,{});if(n){a=n,o=1,i=``;break}let r=i+a;await e.fs.appendFile(t,r,s(r)),i=``,a=``;break}}}}let c=e.state.fileDescriptors?.get(1);if(c){if(c===`__dupout__:2`)a+=i,i=``;else if(c.startsWith(`__file__:`)){let t=c.slice(9);await e.fs.appendFile(t,i,s(i)),i=``}else if(c.startsWith(`__file_append__:`)){let t=c.slice(16);await e.fs.appendFile(t,i,s(i)),i=``}}let l=e.state.fileDescriptors?.get(2);if(l){if(l===`__dupout__:1`)i+=a,a=``;else if(l.startsWith(`__file__:`)){let t=l.slice(9);await e.fs.appendFile(t,a,C_(a)),a=``}else if(l.startsWith(`__file_append__:`)){let t=l.slice(16);await e.fs.appendFile(t,a,C_(a)),a=``}}return $(i,a,o)}function A_(e,t){if(e.state.options.posix&&v_.has(t.name))throw new nt(2,``,`bash: line ${e.state.currentLine}: \`${t.name}': is a special builtin
|
|
244
|
+
`);let n={...t,sourceFile:t.sourceFile??e.state.currentSource??`main`};return e.state.functions.set(t.name,n),vg}async function j_(e,t){let n=``;for(let r of t)if((r.operator===`<<`||r.operator===`<<-`)&&r.target.type===`HereDoc`){let t=r.target,i=await F(e,t.content);t.stripTabs&&(i=i.split(`
|
|
244
245
|
`).map(e=>e.replace(/^\t+/,``)).join(`
|
|
245
246
|
`)),(r.fd??0)===0&&(n=i)}else if(r.operator===`<<<`&&r.target.type===`Word`)n=`${await F(e,r.target)}
|
|
246
|
-
`;else if(r.operator===`<`&&r.target.type===`Word`){let t=await F(e,r.target),i=e.fs.resolvePath(e.state.cwd,t);try{n=await e.fs.readFile(i)}catch{}}return n}async function
|
|
247
|
+
`;else if(r.operator===`<`&&r.target.type===`Word`){let t=await F(e,r.target),i=e.fs.resolvePath(e.state.cwd,t);try{n=await e.fs.readFile(i)}catch{}}return n}async function M_(e,t,n,r=``,i){e.state.callDepth++,e.state.callDepth>e.limits.maxCallDepth&&(e.state.callDepth--,xg(`${t.name}: maximum recursion depth (${e.limits.maxCallDepth}) exceeded, increase executionLimits.maxCallDepth`,`recursion`)),e.state.funcNameStack||(e.state.funcNameStack=[]),e.state.callLineStack||(e.state.callLineStack=[]),e.state.sourceStack||(e.state.sourceStack=[]),e.state.funcNameStack.unshift(t.name),e.state.callLineStack.unshift(i??e.state.currentLine),e.state.sourceStack.unshift(t.sourceFile??`main`),e.state.localScopes.push(new Map),e.state.localExportedVars||(e.state.localExportedVars=[]),e.state.localExportedVars.push(new Set);let a=new Map;for(let t=0;t<n.length;t++)a.set(String(t+1),e.state.env.get(String(t+1))),e.state.env.set(String(t+1),n[t]);a.set(`@`,e.state.env.get(`@`)),a.set(`#`,e.state.env.get(`#`)),e.state.env.set(`@`,n.join(` `)),e.state.env.set(`#`,String(n.length));let o=()=>{let t=e.state.localScopes.length-1,n=e.state.localScopes.pop();if(n)for(let[t,r]of n)r===void 0?e.state.env.delete(t):e.state.env.set(t,r);if(__(e,t),e.state.fullyUnsetLocals)for(let[n,r]of e.state.fullyUnsetLocals.entries())r===t&&e.state.fullyUnsetLocals.delete(n);if(e.state.localExportedVars&&e.state.localExportedVars.length>0){let t=e.state.localExportedVars.pop();if(t)for(let n of t)e.state.exportedVars?.delete(n)}for(let[t,n]of a)n===void 0?e.state.env.delete(t):e.state.env.set(t,n);e.state.funcNameStack?.shift(),e.state.callLineStack?.shift(),e.state.sourceStack?.shift(),e.state.callDepth--},{targets:s,error:c}=await T_(e,t.redirections);if(c)return o(),$(``,c,1);try{let n=await j_(e,t.redirections),i=r||n,a=await e.executeCommand(t.body,i);return o(),k_(e,a,t.redirections,s)}catch(n){if(o(),n instanceof $e)return k_(e,$(n.stdout,n.stderr,n.exitCode),t.redirections,s);throw n}}var N_=[`!`,`[[`,`]]`,`case`,`do`,`done`,`elif`,`else`,`esac`,`fi`,`for`,`function`,`if`,`in`,`then`,`time`,`until`,`while`,`{`,`}`],P_=`.,:,[,alias,bg,bind,break,builtin,caller,cd,command,compgen,complete,compopt,continue,declare,dirs,disown,echo,enable,eval,exec,exit,export,false,fc,fg,getopts,hash,help,history,jobs,kill,let,local,logout,mapfile,popd,printf,pushd,pwd,read,readarray,readonly,return,set,shift,shopt,source,suspend,test,times,trap,true,type,typeset,ulimit,umask,unalias,unset,wait`.split(`,`),F_=`autocd.assoc_expand_once.cdable_vars.cdspell.checkhash.checkjobs.checkwinsize.cmdhist.compat31.compat32.compat40.compat41.compat42.compat43.compat44.complete_fullquote.direxpand.dirspell.dotglob.execfail.expand_aliases.extdebug.extglob.extquote.failglob.force_fignore.globasciiranges.globstar.gnu_errfmt.histappend.histreedit.histverify.hostcomplete.huponexit.inherit_errexit.interactive_comments.lastpipe.lithist.localvar_inherit.localvar_unset.login_shell.mailwarn.no_empty_cmd_completion.nocaseglob.nocasematch.nullglob.progcomp.progcomp_alias.promptvars.restricted_shell.shift_verbose.sourcepath.xpg_echo`.split(`.`),I_=P_;async function L_(e,t){let n=[],r=null,i=``,a=``,o=null,s=!1,c=!1,l=!1,u=null,d=null,f=null,p=[],m=[`alias`,`arrayvar`,`binding`,`builtin`,`command`,`directory`,`disabled`,`enabled`,`export`,`file`,`function`,`group`,`helptopic`,`hostname`,`job`,`keyword`,`running`,`service`,`setopt`,`shopt`,`signal`,`stopped`,`user`,`variable`];for(let e=0;e<t.length;e++){let o=t[e];if(o===`-v`)n.push(`variable`);else if(o===`-e`)n.push(`export`);else if(o===`-f`)n.push(`file`);else if(o===`-d`)n.push(`directory`);else if(o===`-k`)n.push(`keyword`);else if(o===`-A`){if(e++,e>=t.length)return Q(`compgen: -A: option requires an argument
|
|
247
248
|
`,2);let r=t[e];if(!m.includes(r))return Q(`compgen: ${r}: invalid action name
|
|
248
249
|
`,2);n.push(r)}else if(o===`-W`){if(e++,e>=t.length)return Q(`compgen: -W: option requires an argument
|
|
249
250
|
`,2);r=t[e]}else if(o===`-P`){if(e++,e>=t.length)return Q(`compgen: -P: option requires an argument
|
|
@@ -254,112 +255,112 @@ superseded_by: <path-to-new-canonical-article>.md
|
|
|
254
255
|
`,2);d=t[e]}else if(o===`-C`){if(e++,e>=t.length)return Q(`compgen: -C: option requires an argument
|
|
255
256
|
`,2);f=t[e]}else if(o===`-X`){if(e++,e>=t.length)return Q(`compgen: -X: option requires an argument
|
|
256
257
|
`,2);u=t[e]}else if(o===`-G`){if(e++,e>=t.length)return Q(`compgen: -G: option requires an argument
|
|
257
|
-
`,2)}else if(o===`--`){p.push(...t.slice(e+1));break}else o.startsWith(`-`)||p.push(o)}o=p[0]??null;let h=[];if(c){let t=await
|
|
258
|
+
`,2)}else if(o===`--`){p.push(...t.slice(e+1));break}else o.startsWith(`-`)||p.push(o)}o=p[0]??null;let h=[];if(c){let t=await K_(e,o);h.push(...t)}if(l){let t=await q_(e,o);h.push(...t)}for(let t of n)if(t===`variable`){let t=R_(e,o);h.push(...t)}else if(t===`export`){let t=z_(e,o);h.push(...t)}else if(t===`function`){let t=B_(e,o);h.push(...t)}else if(t===`builtin`){let e=V_(o);h.push(...e)}else if(t===`keyword`){let e=H_(o);h.push(...e)}else if(t===`alias`){let t=U_(e,o);h.push(...t)}else if(t===`shopt`){let e=W_(o);h.push(...e)}else if(t===`helptopic`){let e=G_(o);h.push(...e)}else if(t===`directory`){let t=await K_(e,o);h.push(...t)}else if(t===`file`){let t=await q_(e,o);h.push(...t)}else if(t===`user`){let e=J_(o);h.push(...e)}else if(t===`command`){let t=await Y_(e,o);h.push(...t)}if(r!==null)try{let t=Z_(e,await X_(e,r));for(let e of t)(o===null||e.startsWith(o))&&h.push(e)}catch{return $(``,``,1)}if(s){let t=await K_(e,o);for(let e of t)h.includes(e)||h.push(e)}let g=``;if(d!==null){let t=e.state.functions.get(d);if(t){let n=new Map;n.set(`COMP_WORDS__length`,e.state.env.get(`COMP_WORDS__length`)),e.state.env.set(`COMP_WORDS__length`,`0`),n.set(`COMP_CWORD`,e.state.env.get(`COMP_CWORD`)),e.state.env.set(`COMP_CWORD`,`-1`),n.set(`COMP_LINE`,e.state.env.get(`COMP_LINE`)),e.state.env.set(`COMP_LINE`,``),n.set(`COMP_POINT`,e.state.env.get(`COMP_POINT`)),e.state.env.set(`COMP_POINT`,`0`);let r=new Map;for(let t of e.state.env.keys())(t===`COMPREPLY`||t.startsWith(`COMPREPLY_`)||t===`COMPREPLY__length`)&&(r.set(t,e.state.env.get(t)),e.state.env.delete(t));let i=[`compgen`,p[0]??``,``];try{let a=await M_(e,t,i,``);if(a.exitCode!==0)return Q_(e,n),Q_(e,r),$(``,a.stderr,1);g=a.stdout;let o=$_(e);h.push(...o)}catch{return Q_(e,n),Q_(e,r),$(``,``,1)}Q_(e,n),Q_(e,r)}}if(f!==null)try{let t=yt(f),n=await e.executeScript(t);if(n.exitCode!==0)return $(``,n.stderr,n.exitCode);if(n.stdout){let e=n.stdout.split(`
|
|
258
259
|
`);for(let t of e)t.length>0&&h.push(t)}}catch(e){if(e.name===`ParseException`)return Q(`compgen: -C: ${e.message}
|
|
259
|
-
`,2);throw e}let _=h;if(u!==null){let e=u.startsWith(`!`),t=e?u.slice(1):u;_=h.filter(n=>{let r=
|
|
260
|
-
`);return
|
|
261
|
-
`:``))}function
|
|
262
|
-
`;if(n.length===0)return[t];let r=new Set(n.split(``)),i=[],a=``,o=0;for(;o<t.length;){let e=t[o];if(e===`\\`&&o+1<t.length){let e=t[o+1];a+=e,o+=2}else r.has(e)?(a.length>0&&(i.push(a),a=``),o++):(a+=e,o++)}return a.length>0&&i.push(a),i}function
|
|
260
|
+
`,2);throw e}let _=h;if(u!==null){let e=u.startsWith(`!`),t=e?u.slice(1):u;_=h.filter(n=>{let r=Jg(n,t,!1,!0);return e?r:!r})}if(_.length===0&&o!==null)return $(g,``,1);let v=_.map(e=>`${i}${e}${a}`).join(`
|
|
261
|
+
`);return yg(g+(v?`${v}
|
|
262
|
+
`:``))}function R_(e,t){let n=new Set;for(let t of e.state.env.keys()){if(t.includes(`_`)&&/^[a-zA-Z_][a-zA-Z0-9_]*_\d+$/.test(t)||t.endsWith(`__length`))continue;let r=t.split(`_`)[0];/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)?n.add(t):r&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)&&e.state.env.has(`${r}__length`)&&n.add(r)}let r=Array.from(n);return t!==null&&(r=r.filter(e=>e.startsWith(t))),r.sort()}function z_(e,t){let n=e.state.exportedVars??new Set,r=Array.from(n);return t!==null&&(r=r.filter(e=>e.startsWith(t))),r=r.filter(t=>t.includes(`_`)&&/^[a-zA-Z_][a-zA-Z0-9_]*_\d+$/.test(t)||t.endsWith(`__length`)?!1:e.state.env.has(t)),r.sort()}function B_(e,t){let n=Array.from(e.state.functions.keys());return t!==null&&(n=n.filter(e=>e.startsWith(t))),n.sort()}function V_(e){let t=[...P_];return e!==null&&(t=t.filter(t=>t.startsWith(e))),t.sort()}function H_(e){let t=[...N_];return e!==null&&(t=t.filter(t=>t.startsWith(e))),t.sort()}function U_(e,t){let n=[];for(let t of e.state.env.keys())if(t.startsWith(`BASH_ALIAS_`)){let e=t.slice(11);n.push(e)}let r=n;return t!==null&&(r=r.filter(e=>e.startsWith(t))),r.sort()}function W_(e){let t=[...F_];return e!==null&&(t=t.filter(t=>t.startsWith(e))),t.sort()}function G_(e){let t=[...I_];return e!==null&&(t=t.filter(t=>t.startsWith(e))),t.sort()}async function K_(e,t){let n=[];try{let r=e.state.cwd,i=t??``;if(t){let n=t.lastIndexOf(`/`);if(n!==-1){let a=t.slice(0,n)||`/`;i=t.slice(n+1),r=a.startsWith(`/`)?a:`${e.state.cwd}/${a}`}}let a=await e.fs.readdir(r);for(let o of a){let a=`${r}/${o}`;try{if((await e.fs.stat(a)).isDirectory&&(!i||o.startsWith(i)))if(t?.includes(`/`)){let e=t.lastIndexOf(`/`),r=t.slice(0,e+1);n.push(r+o)}else n.push(o)}catch{}}}catch{}return n.sort()}async function q_(e,t){let n=[];try{let r=e.state.cwd,i=t??``;if(t){let n=t.lastIndexOf(`/`);if(n!==-1){let a=t.slice(0,n)||`/`;i=t.slice(n+1),r=a.startsWith(`/`)?a:`${e.state.cwd}/${a}`}}let a=await e.fs.readdir(r);for(let e of a)if(!i||e.startsWith(i))if(t?.includes(`/`)){let r=t.lastIndexOf(`/`),i=t.slice(0,r+1);n.push(i+e)}else n.push(e)}catch{}return n.sort()}function J_(e){return[`root`,`nobody`]}async function Y_(e,t){let n=new Set;for(let e of P_)n.add(e);for(let t of e.state.functions.keys())n.add(t);for(let t of e.state.env.keys())t.startsWith(`BASH_ALIAS_`)&&n.add(t.slice(11));for(let e of N_)n.add(e);let r=e.state.env.get(`PATH`)??`/usr/bin:/bin`;for(let t of r.split(`:`))if(t)try{let r=await e.fs.readdir(t);for(let e of r)n.add(e)}catch{}let i=Array.from(n);return t!==null&&(i=i.filter(e=>e.startsWith(t))),i.sort()}async function X_(e,t){return await F(e,new Ut().parseWordFromString(t,!1,!1))}function Z_(e,t){let n=e.state.env.get(`IFS`)??`
|
|
263
|
+
`;if(n.length===0)return[t];let r=new Set(n.split(``)),i=[],a=``,o=0;for(;o<t.length;){let e=t[o];if(e===`\\`&&o+1<t.length){let e=t[o+1];a+=e,o+=2}else r.has(e)?(a.length>0&&(i.push(a),a=``),o++):(a+=e,o++)}return a.length>0&&i.push(a),i}function Q_(e,t){for(let[n,r]of t)r===void 0?e.state.env.delete(n):e.state.env.set(n,r)}function $_(e){let t=[];if(e.state.env.get(`COMPREPLY__length`)!==void 0){let n=Ot(e,`COMPREPLY`);for(let[,e]of n)t.push(e)}else{let n=e.state.env.get(`COMPREPLY`);n!==void 0&&t.push(n)}return t}var ev=[`bashdefault`,`default`,`dirnames`,`filenames`,`noquote`,`nosort`,`nospace`,`plusdirs`];function tv(e,t){e.state.completionSpecs||(e.state.completionSpecs=new Map);let n=!1,r=!1,i=!1,a,o,s,c=[],l=[],u=[];for(let e=0;e<t.length;e++){let d=t[e];if(d===`-p`)n=!0;else if(d===`-r`)r=!0;else if(d===`-D`)i=!0;else if(d===`-W`){if(e++,e>=t.length)return Q(`complete: -W: option requires an argument
|
|
263
264
|
`,2);a=t[e]}else if(d===`-F`){if(e++,e>=t.length)return Q(`complete: -F: option requires an argument
|
|
264
265
|
`,2);o=t[e]}else if(d===`-o`){if(e++,e>=t.length)return Q(`complete: -o: option requires an argument
|
|
265
|
-
`,2);let n=t[e];if(!
|
|
266
|
+
`,2);let n=t[e];if(!ev.includes(n))return Q(`complete: ${n}: invalid option name
|
|
266
267
|
`,2);c.push(n)}else if(d===`-A`){if(e++,e>=t.length)return Q(`complete: -A: option requires an argument
|
|
267
268
|
`,2);l.push(t[e])}else if(d===`-C`){if(e++,e>=t.length)return Q(`complete: -C: option requires an argument
|
|
268
269
|
`,2);s=t[e]}else if(d===`-G`){if(e++,e>=t.length)return Q(`complete: -G: option requires an argument
|
|
269
270
|
`,2)}else if(d===`-P`){if(e++,e>=t.length)return Q(`complete: -P: option requires an argument
|
|
270
271
|
`,2)}else if(d===`-S`){if(e++,e>=t.length)return Q(`complete: -S: option requires an argument
|
|
271
272
|
`,2)}else if(d===`-X`){if(e++,e>=t.length)return Q(`complete: -X: option requires an argument
|
|
272
|
-
`,2)}else if(d===`--`){u.push(...t.slice(e+1));break}else d.startsWith(`-`)||u.push(d)}if(r){if(u.length===0)return e.state.completionSpecs.clear(),
|
|
273
|
-
`,2);if(i){let t={isDefault:!0};return a!==void 0&&(t.wordlist=a),o!==void 0&&(t.function=o),s!==void 0&&(t.command=s),c.length>0&&(t.options=c),l.length>0&&(t.actions=l),e.state.completionSpecs.set(`__default__`,t),
|
|
274
|
-
`;return $(``,e,1)}return
|
|
273
|
+
`,2)}else if(d===`--`){u.push(...t.slice(e+1));break}else d.startsWith(`-`)||u.push(d)}if(r){if(u.length===0)return e.state.completionSpecs.clear(),yg(``);for(let t of u)e.state.completionSpecs.delete(t);return yg(``)}if(n)return u.length===0?nv(e):nv(e,u);if(t.length===0||u.length===0&&!a&&!o&&!s&&c.length===0&&l.length===0&&!i)return nv(e);if(o&&u.length===0&&!i)return Q(`complete: -F: option requires a command name
|
|
274
|
+
`,2);if(i){let t={isDefault:!0};return a!==void 0&&(t.wordlist=a),o!==void 0&&(t.function=o),s!==void 0&&(t.command=s),c.length>0&&(t.options=c),l.length>0&&(t.actions=l),e.state.completionSpecs.set(`__default__`,t),yg(``)}for(let t of u){let n=Object.create(null);a!==void 0&&(n.wordlist=a),o!==void 0&&(n.function=o),s!==void 0&&(n.command=s),c.length>0&&(n.options=c),l.length>0&&(n.actions=l),e.state.completionSpecs.set(t,n)}return yg(``)}function nv(e,t){let n=e.state.completionSpecs;if(!n||n.size===0){if(t&&t.length>0){let e=``;for(let n of t)e+=`complete: ${n}: no completion specification
|
|
275
|
+
`;return $(``,e,1)}return yg(``)}let r=[],i=t||Array.from(n.keys());for(let e of i){if(e===`__default__`)continue;let i=n.get(e);if(!i){if(t)return $(r.join(`
|
|
275
276
|
`)+(r.length>0?`
|
|
276
277
|
`:``),`complete: ${e}: no completion specification
|
|
277
|
-
`,1);continue}let a=`complete`;if(i.options)for(let e of i.options)a+=` -o ${e}`;if(i.actions)for(let e of i.actions)a+=` -A ${e}`;i.wordlist!==void 0&&(i.wordlist.includes(` `)||i.wordlist.includes(`'`)?a+=` -W '${i.wordlist}'`:a+=` -W ${i.wordlist}`),i.function!==void 0&&(a+=` -F ${i.function}`),i.isDefault&&(a+=` -D`),a+=` ${e}`,r.push(a)}return r.length===0?
|
|
278
|
+
`,1);continue}let a=`complete`;if(i.options)for(let e of i.options)a+=` -o ${e}`;if(i.actions)for(let e of i.actions)a+=` -A ${e}`;i.wordlist!==void 0&&(i.wordlist.includes(` `)||i.wordlist.includes(`'`)?a+=` -W '${i.wordlist}'`:a+=` -W ${i.wordlist}`),i.function!==void 0&&(a+=` -F ${i.function}`),i.isDefault&&(a+=` -D`),a+=` ${e}`,r.push(a)}return r.length===0?yg(``):yg(`${r.join(`
|
|
278
279
|
`)}
|
|
279
|
-
`)}var
|
|
280
|
-
`,2);let n=t[e];if(!
|
|
280
|
+
`)}var rv=[`bashdefault`,`default`,`dirnames`,`filenames`,`noquote`,`nosort`,`nospace`,`plusdirs`];function iv(e,t){e.state.completionSpecs||(e.state.completionSpecs=new Map);let n=!1,r=!1,i=[],a=[],o=[];for(let e=0;e<t.length;e++){let s=t[e];if(s===`-D`)n=!0;else if(s===`-E`)r=!0;else if(s===`-o`){if(e++,e>=t.length)return Q(`compopt: -o: option requires an argument
|
|
281
|
+
`,2);let n=t[e];if(!rv.includes(n))return Q(`compopt: ${n}: invalid option name
|
|
281
282
|
`,2);i.push(n)}else if(s===`+o`){if(e++,e>=t.length)return Q(`compopt: +o: option requires an argument
|
|
282
|
-
`,2);let n=t[e];if(!
|
|
283
|
-
`,2);a.push(n)}else if(s===`--`){o.push(...t.slice(e+1));break}else !s.startsWith(`-`)&&!s.startsWith(`+`)&&o.push(s)}if(n){let t=e.state.completionSpecs.get(`__default__`)??{isDefault:!0},n=new Set(t.options??[]);for(let e of i)n.add(e);for(let e of a)n.delete(e);return t.options=n.size>0?Array.from(n):void 0,e.state.completionSpecs.set(`__default__`,t),
|
|
284
|
-
`,1)}function
|
|
283
|
+
`,2);let n=t[e];if(!rv.includes(n))return Q(`compopt: ${n}: invalid option name
|
|
284
|
+
`,2);a.push(n)}else if(s===`--`){o.push(...t.slice(e+1));break}else !s.startsWith(`-`)&&!s.startsWith(`+`)&&o.push(s)}if(n){let t=e.state.completionSpecs.get(`__default__`)??{isDefault:!0},n=new Set(t.options??[]);for(let e of i)n.add(e);for(let e of a)n.delete(e);return t.options=n.size>0?Array.from(n):void 0,e.state.completionSpecs.set(`__default__`,t),yg(``)}if(r){let t=e.state.completionSpecs.get(`__empty__`)??{},n=new Set(t.options??[]);for(let e of i)n.add(e);for(let e of a)n.delete(e);return t.options=n.size>0?Array.from(n):void 0,e.state.completionSpecs.set(`__empty__`,t),yg(``)}if(o.length>0){for(let t of o){let n=e.state.completionSpecs.get(t)??{},r=new Set(n.options??[]);for(let e of i)r.add(e);for(let e of a)r.delete(e);n.options=r.size>0?Array.from(r):void 0,e.state.completionSpecs.set(t,n)}return yg(``)}return Q(`compopt: not currently executing completion function
|
|
285
|
+
`,1)}function av(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new at;return vg}if(t.length>1)throw new nt(1,``,`bash: continue: too many arguments
|
|
285
286
|
`);let n=1;if(t.length>0){let e=Number.parseInt(t[0],10);if(Number.isNaN(e)||e<1)throw new nt(1,``,`bash: continue: ${t[0]}: numeric argument required
|
|
286
|
-
`);n=e}throw new it(n)}function
|
|
287
|
-
`;else{let r=t.map(t=>`['${t}']=${
|
|
288
|
-
`}continue}let o=vt(e,a);if(o.length>0){let t=o.map(t=>`[${t}]=${
|
|
287
|
+
`);n=e}throw new it(n)}function ov(e,t){let n=e.state.env.get(`HOME`)||`/home/user`;return t.split(`:`).map(e=>e===`~`?n:e===`~root`?`/root`:e.startsWith(`~/`)?n+e.slice(1):e.startsWith(`~root/`)?`/root${e.slice(5)}`:e).join(`:`)}function sv(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<32||n===127)return!0}return!1}function cv(e){let t=`$'`;for(let n=0;n<e.length;n++){let r=e[n],i=e.charCodeAt(n);i===7?t+=`\\a`:i===8?t+=`\\b`:i===9?t+=`\\t`:i===10?t+=`\\n`:i===11?t+=`\\v`:i===12?t+=`\\f`:i===13?t+=`\\r`:i===27?t+=`\\e`:i===39?t+=`\\'`:i===92?t+=`\\\\`:i<32||i===127?t+=`\\${i.toString(8).padStart(3,`0`)}`:t+=r}return t+=`'`,t}function lv(e){return sv(e)?cv(e):/^[a-zA-Z0-9_/.:\-@%+,=]*$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function uv(e){return sv(e)?cv(e):`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function dv(e){return sv(e)?cv(e):`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function fv(e,t){let n=``;return e.state.integerVars?.has(t)&&(n+=`i`),e.state.lowercaseVars?.has(t)&&(n+=`l`),Et(e,t)&&(n+=`n`),e.state.readonlyVars?.has(t)&&(n+=`r`),e.state.uppercaseVars?.has(t)&&(n+=`u`),e.state.exportedVars?.has(t)&&(n+=`x`),n===``?`--`:`-${n}`}function pv(e){return e===``?`''`:/[\s'\\]/.test(e)?`'${e.replace(/'/g,`'\\''`)}'`:e}function mv(e,t){let n=``,r=``,i=!1;for(let a of t){let t=fv(e,a);if(e.state.associativeArrays?.has(a)){let t=ct(e,a);if(t.length===0)n+=`declare -A ${a}=()
|
|
288
|
+
`;else{let r=t.map(t=>`['${t}']=${pv(e.state.env.get(`${a}_${t}`)??``)}`);n+=`declare -A ${a}=(${r.join(` `)})
|
|
289
|
+
`}continue}let o=vt(e,a);if(o.length>0){let t=o.map(t=>`[${t}]=${uv(e.state.env.get(`${a}_${t}`)??``)}`);n+=`declare -a ${a}=(${t.join(` `)})
|
|
289
290
|
`;continue}if(e.state.env.has(`${a}__length`)){n+=`declare -a ${a}=()
|
|
290
|
-
`;continue}let s=e.state.env.get(a);if(s!==void 0)n+=`declare ${t} ${a}=${
|
|
291
|
+
`;continue}let s=e.state.env.get(a);if(s!==void 0)n+=`declare ${t} ${a}=${dv(s)}
|
|
291
292
|
`;else{let o=e.state.declaredVars?.has(a),s=e.state.localVarDepth?.has(a);o||s?n+=`declare ${t} ${a}
|
|
292
293
|
`:(r+=`bash: declare: ${a}: not found
|
|
293
|
-
`,i=!0)}}return $(n,r,i?1:0)}function
|
|
294
|
-
`;else{let r=n.map(n=>`['${n}']=${
|
|
295
|
-
`}continue}if(d.length>0){let n=d.map(n=>`[${n}]=${
|
|
294
|
+
`,i=!0)}}return $(n,r,i?1:0)}function hv(e,t){let{filterExport:n,filterReadonly:r,filterNameref:i,filterIndexedArray:a,filterAssocArray:o}=t,s=n||r||i||a||o,c=``,l=new Set;for(let t of e.state.env.keys()){if(t.startsWith(`BASH_`))continue;if(t.endsWith(`__length`)){let e=t.slice(0,-8);l.add(e);continue}let n=t.lastIndexOf(`_`);if(n>0){let r=t.slice(0,n),i=t.slice(n+1);if(/^\d+$/.test(i)||e.state.associativeArrays?.has(r)){l.add(r);continue}}l.add(t)}if(e.state.localVarDepth)for(let t of e.state.localVarDepth.keys())l.add(t);if(e.state.associativeArrays)for(let t of e.state.associativeArrays)l.add(t);let u=Array.from(l).sort();for(let t of u){let l=fv(e,t),u=e.state.associativeArrays?.has(t),d=vt(e,t),f=!u&&(d.length>0||e.state.env.has(`${t}__length`));if(s&&(o&&!u||a&&!f||n&&!e.state.exportedVars?.has(t)||r&&!e.state.readonlyVars?.has(t)||i&&!Et(e,t)))continue;if(u){let n=ct(e,t);if(n.length===0)c+=`declare -A ${t}=()
|
|
295
|
+
`;else{let r=n.map(n=>`['${n}']=${pv(e.state.env.get(`${t}_${n}`)??``)}`);c+=`declare -A ${t}=(${r.join(` `)})
|
|
296
|
+
`}continue}if(d.length>0){let n=d.map(n=>`[${n}]=${uv(e.state.env.get(`${t}_${n}`)??``)}`);c+=`declare -a ${t}=(${n.join(` `)})
|
|
296
297
|
`;continue}if(e.state.env.has(`${t}__length`)){c+=`declare -a ${t}=()
|
|
297
|
-
`;continue}let p=e.state.env.get(t);p!==void 0&&(c+=`declare ${l} ${t}=${
|
|
298
|
-
`)}return
|
|
299
|
-
`;else{let i=n.map(t=>`['${t}']=${
|
|
300
|
-
`}}return
|
|
301
|
-
`;else{let i=r.map(t=>`[${t}]=${
|
|
302
|
-
`}}return
|
|
303
|
-
`)}return
|
|
298
|
+
`;continue}let p=e.state.env.get(t);p!==void 0&&(c+=`declare ${l} ${t}=${dv(p)}
|
|
299
|
+
`)}return yg(c)}function gv(e){let t=``,n=Array.from(e.state.associativeArrays??[]).sort();for(let r of n){let n=ct(e,r);if(n.length===0)t+=`declare -A ${r}=()
|
|
300
|
+
`;else{let i=n.map(t=>`['${t}']=${pv(e.state.env.get(`${r}_${t}`)??``)}`);t+=`declare -A ${r}=(${i.join(` `)})
|
|
301
|
+
`}}return yg(t)}function _v(e){let t=``,n=new Set;for(let t of e.state.env.keys()){if(t.startsWith(`BASH_`))continue;if(t.endsWith(`__length`)){let r=t.slice(0,-8);e.state.associativeArrays?.has(r)||n.add(r);continue}let r=t.lastIndexOf(`_`);if(r>0){let i=t.slice(0,r),a=t.slice(r+1);/^\d+$/.test(a)&&(e.state.associativeArrays?.has(i)||n.add(i))}}let r=Array.from(n).sort();for(let n of r){let r=vt(e,n);if(r.length===0)t+=`declare -a ${n}=()
|
|
302
|
+
`;else{let i=r.map(t=>`[${t}]=${uv(e.state.env.get(`${n}_${t}`)??``)}`);t+=`declare -a ${n}=(${i.join(` `)})
|
|
303
|
+
`}}return yg(t)}function vv(e){let t=``,n=new Set;for(let t of e.state.env.keys()){if(t.startsWith(`BASH_`))continue;if(t.endsWith(`__length`)){let e=t.slice(0,-8);n.add(e);continue}let r=t.lastIndexOf(`_`);if(r>0){let i=t.slice(0,r),a=t.slice(r+1);if(/^\d+$/.test(a)||e.state.associativeArrays?.has(i)){n.add(i);continue}}n.add(t)}let r=Array.from(n).sort();for(let n of r){if(e.state.associativeArrays?.has(n)||vt(e,n).length>0||e.state.env.has(`${n}__length`))continue;let r=e.state.env.get(n);r!==void 0&&(t+=`${n}=${lv(r)}
|
|
304
|
+
`)}return yg(t)}function yv(e,t){e.state.integerVars??=new Set,e.state.integerVars.add(t)}function bv(e,t){return e.state.integerVars?.has(t)??!1}function xv(e,t){e.state.lowercaseVars??=new Set,e.state.lowercaseVars.add(t),e.state.uppercaseVars?.delete(t)}function Sv(e,t){return e.state.lowercaseVars?.has(t)??!1}function Cv(e,t){e.state.uppercaseVars??=new Set,e.state.uppercaseVars.add(t),e.state.lowercaseVars?.delete(t)}function wv(e,t){return e.state.uppercaseVars?.has(t)??!1}function Tv(e,t,n){return Sv(e,t)?n.toLowerCase():wv(e,t)?n.toUpperCase():n}async function Ev(e,t){try{let n=await Rt(e,Dt(new Ut,t).expression);return String(n)}catch{return`0`}}function Dv(e){let t=e.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);if(!t)return null;let n=t[0],r=n.length;if(e[r]!==`[`)return null;let i=0,a=r+1;for(;r<e.length;r++)if(e[r]===`[`)i++;else if(e[r]===`]`&&(i--,i===0))break;if(i!==0)return null;let o=e.slice(a,r);return r++,e[r]===`=`?(r++,{name:n,indexExpr:o,value:e.slice(r)}):null}async function Ov(e,t){let n=!1,r=!1,i=!1,a=!1,o=!1,s=!1,c=!1,l=!1,u=!1,d=!1,f=!1,p=!1,m=!1,h=!1,g=!1,_=[];for(let e=0;e<t.length;e++){let v=t[e];if(v===`-a`)n=!0;else if(v===`-A`)r=!0;else if(v===`-r`)i=!0;else if(v===`-x`)a=!0;else if(v===`-p`)o=!0;else if(v===`-n`)s=!0;else if(v===`+n`)c=!0;else if(v===`+a`)l=!0;else if(v===`+x`)u=!0;else if(v===`--`){_.push(...t.slice(e+1));break}else if(v.startsWith(`+`)){for(let e of v.slice(1))if(e===`n`)c=!0;else if(e===`a`)l=!0;else if(e===`x`)u=!0;else if(e!==`r`&&e!==`i`&&!(e===`f`||e===`F`))return $(``,`bash: typeset: +${e}: invalid option
|
|
304
305
|
`,2)}else if(v===`-i`)d=!0;else if(v===`-l`)f=!0;else if(v===`-u`)p=!0;else if(v===`-f`)m=!0;else if(v===`-F`)h=!0;else if(v===`-g`)g=!0;else if(v.startsWith(`-`))for(let e of v.slice(1))if(e===`a`)n=!0;else if(e===`A`)r=!0;else if(e===`r`)i=!0;else if(e===`x`)a=!0;else if(e===`p`)o=!0;else if(e===`n`)s=!0;else if(e===`i`)d=!0;else if(e===`l`)f=!0;else if(e===`u`)p=!0;else if(e===`f`)m=!0;else if(e===`F`)h=!0;else if(e===`g`)g=!0;else return $(``,`bash: typeset: -${e}: invalid option
|
|
305
|
-
`,2);else _.push(v)}let v=e.state.localScopes.length>0&&!g,y=t=>{if(!v)return;let n=e.state.localScopes[e.state.localScopes.length-1];n.has(t)||n.set(t,e.state.env.get(t))},b=t=>{if(!v)return;let n=e.state.localScopes[e.state.localScopes.length-1];n.has(t)||n.set(t,e.state.env.get(t));let r=`${t}_`;for(let t of e.state.env.keys())t.startsWith(r)&&!t.includes(`__`)&&(n.has(t)||n.set(t,e.state.env.get(t)));let i=`${t}__length`;e.state.env.has(i)&&!n.has(i)&&n.set(i,e.state.env.get(i))},x=t=>{v&&
|
|
306
|
-
`;return
|
|
306
|
+
`,2);else _.push(v)}let v=e.state.localScopes.length>0&&!g,y=t=>{if(!v)return;let n=e.state.localScopes[e.state.localScopes.length-1];n.has(t)||n.set(t,e.state.env.get(t))},b=t=>{if(!v)return;let n=e.state.localScopes[e.state.localScopes.length-1];n.has(t)||n.set(t,e.state.env.get(t));let r=`${t}_`;for(let t of e.state.env.keys())t.startsWith(r)&&!t.includes(`__`)&&(n.has(t)||n.set(t,e.state.env.get(t)));let i=`${t}__length`;e.state.env.has(i)&&!n.has(i)&&n.set(i,e.state.env.get(i))},x=t=>{v&&f_(e,t)};if(h){if(_.length===0){let t=Array.from(e.state.functions.keys()).sort(),n=``;for(let e of t)n+=`declare -f ${e}
|
|
307
|
+
`;return yg(n)}let t=!0,n=``;for(let r of _)e.state.functions.has(r)?n+=`${r}
|
|
307
308
|
`:t=!1;return $(n,``,t?0:1)}if(m){if(_.length===0){let t=``,n=Array.from(e.state.functions.keys()).sort();for(let e of n)t+=`${e} ()
|
|
308
309
|
{
|
|
309
310
|
# function body
|
|
310
311
|
}
|
|
311
|
-
`;return
|
|
312
|
+
`;return yg(t)}let t=!0;for(let n of _)e.state.functions.has(n)||(t=!1);return $(``,``,t?0:1)}if(o&&_.length>0)return mv(e,_);if(o&&_.length===0)return hv(e,{filterExport:a,filterReadonly:i,filterNameref:s,filterIndexedArray:n,filterAssocArray:r});if(_.length===0&&r&&!o)return gv(e);if(_.length===0&&n&&!o)return _v(e);if(_.length===0&&!o)return vv(e);let S=``,C=0;for(let t of _){let o=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(o&&!l){let t=o[1],s=o[2];if(r&&vt(e,t).length>0){S+=`bash: declare: ${t}: cannot convert indexed to associative array
|
|
312
313
|
`,C=1;continue}if((n||!r&&!n)&&e.state.associativeArrays?.has(t)){S+=`bash: declare: ${t}: cannot convert associative to indexed array
|
|
313
|
-
`,C=1;continue}if(b(t),r&&(e.state.associativeArrays??=new Set,e.state.associativeArrays.add(t)),zt(e,t),e.state.env.delete(t),e.state.env.delete(`${t}__length`),r&&s.includes(`[`)){let n=
|
|
314
|
+
`,C=1;continue}if(b(t),r&&(e.state.associativeArrays??=new Set,e.state.associativeArrays.add(t)),zt(e,t),e.state.env.delete(t),e.state.env.delete(`${t}__length`),r&&s.includes(`[`)){let n=c_(s);for(let[r,i]of n){let n=ov(e,i);e.state.env.set(`${t}_${r}`,n)}}else if(r){let n=s_(s);for(let r=0;r<n.length;r+=2){let i=n[r],a=r+1<n.length?ov(e,n[r+1]):``;e.state.env.set(`${t}_${i}`,a)}}else{let n=s_(s);if(n.some(e=>/^\[[^\]]+\]=/.test(e))){let r=0;for(let i of n){let n=i.match(/^\[([^\]]+)\]=(.*)$/);if(n){let i=n[1],a=n[2],o=ov(e,a),s;if(/^-?\d+$/.test(i))s=Number.parseInt(i,10);else try{s=await Rt(e,Dt(new Ut,i).expression)}catch{s=0}e.state.env.set(`${t}_${s}`,o),r=s+1}else{let n=ov(e,i);e.state.env.set(`${t}_${r}`,n),r++}}}else{for(let r=0;r<n.length;r++)e.state.env.set(`${t}_${r}`,n[r]);e.state.env.set(`${t}__length`,String(n.length))}}x(t),i&&bt(e,t),a&&_t(e,t);continue}if(c&&(ht(e,t.includes(`=`)?t.slice(0,t.indexOf(`=`)):t),!t.includes(`=`))||u&&(Nt(e,t.includes(`=`)?t.slice(0,t.indexOf(`=`)):t),!t.includes(`=`)))continue;let m=Dv(t);if(m){let{name:t,indexExpr:n,value:r}=m,o=dt(e,t);if(o)return o;b(t);let s;try{s=await Rt(e,Dt(new Ut,n).expression)}catch{let e=parseInt(n,10);s=Number.isNaN(e)?0:e}e.state.env.set(`${t}_${s}`,r);let c=parseInt(e.state.env.get(`${t}__length`)??`0`,10);s>=c&&e.state.env.set(`${t}__length`,String(s+1)),x(t),i&&bt(e,t),a&&_t(e,t);continue}let h=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(h&&!l){let t=h[1],n=h[2],r=dt(e,t);if(r)return r;b(t);let o=s_(n);if(e.state.associativeArrays?.has(t)){let r=c_(n);for(let[n,i]of r){let r=ov(e,i);e.state.env.set(`${t}_${n}`,r)}}else{let n=vt(e,t),r=0,i=e.state.env.get(t);n.length===0&&i!==void 0?(e.state.env.set(`${t}_0`,i),e.state.env.delete(t),r=1):n.length>0&&(r=Math.max(...n)+1);for(let n=0;n<o.length;n++)e.state.env.set(`${t}_${r+n}`,ov(e,o[n]));let a=r+o.length;e.state.env.set(`${t}__length`,String(a))}x(t),i&&bt(e,t),a&&_t(e,t);continue}let g=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(g){let t=g[1],n=ov(e,g[2]),r=dt(e,t);if(r)return r;y(t),d&&yv(e,t),f&&xv(e,t),p&&Cv(e,t);let o=vt(e,t).length>0||e.state.associativeArrays?.has(t);if(bv(e,t)){let r=e.state.env.get(t)??`0`,i=parseInt(r,10)||0,a=parseInt(await Ev(e,n),10)||0;n=String(i+a),e.state.env.set(t,n)}else if(o){n=Tv(e,t,n);let r=`${t}_0`,i=e.state.env.get(r)??``;e.state.env.set(r,i+n)}else{n=Tv(e,t,n);let r=e.state.env.get(t)??``;e.state.env.set(t,r+n)}x(t),i&&bt(e,t),a&&_t(e,t),e.state.options.allexport&&!u&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(t));continue}if(t.includes(`=`)){let n=t.indexOf(`=`),r=t.slice(0,n),o=t.slice(n+1);if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)){S+=`bash: typeset: \`${r}': not a valid identifier
|
|
314
315
|
`,C=1;continue}let c=dt(e,r);if(c)return c;if(y(r),s){if(o!==``&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(o)){S+=`bash: declare: \`${o}': invalid variable name for name reference
|
|
315
|
-
`,C=1;continue}e.state.env.set(r,o),Kt(e,r),o!==``&>(e,o)&&Tt(e,r),x(r),i&&bt(e,r),a&&_t(e,r);continue}if(d&&
|
|
316
|
-
`,C=1;continue}if(n||r?b(o):y(o),s){Kt(e,o);let t=e.state.env.get(o);t!==void 0&&t!==``&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(t)?It(e,o):t&>(e,t)&&Tt(e,o),x(o),i&&bt(e,o),a&&_t(e,o);continue}if(d&&
|
|
317
|
-
`,C=1;continue}e.state.associativeArrays??=new Set,e.state.associativeArrays.add(o)}let c=Array.from(e.state.env.keys()).some(e=>e.startsWith(`${o}_`)&&!e.startsWith(`${o}__length`));!e.state.env.has(o)&&!c&&(n||r?e.state.env.set(`${o}__length`,`0`):(e.state.declaredVars??=new Set,e.state.declaredVars.add(o))),x(o),i&&bt(e,o),a&&_t(e,o)}}return $(``,S,C)}async function
|
|
318
|
-
`}}return
|
|
316
|
+
`,C=1;continue}e.state.env.set(r,o),Kt(e,r),o!==``&>(e,o)&&Tt(e,r),x(r),i&&bt(e,r),a&&_t(e,r);continue}if(d&&yv(e,r),f&&xv(e,r),p&&Cv(e,r),bv(e,r)&&(o=await Ev(e,o)),o=Tv(e,r,o),Et(e,r)){let t=Mt(e,r);t&&t!==r?e.state.env.set(t,o):e.state.env.set(r,o)}else e.state.env.set(r,o);x(r),i&&bt(e,r),a&&_t(e,r),e.state.options.allexport&&!u&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(r))}else{let o=t;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(o)){S+=`bash: typeset: \`${o}': not a valid identifier
|
|
317
|
+
`,C=1;continue}if(n||r?b(o):y(o),s){Kt(e,o);let t=e.state.env.get(o);t!==void 0&&t!==``&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(t)?It(e,o):t&>(e,t)&&Tt(e,o),x(o),i&&bt(e,o),a&&_t(e,o);continue}if(d&&yv(e,o),f&&xv(e,o),p&&Cv(e,o),r){if(vt(e,o).length>0){S+=`bash: declare: ${o}: cannot convert indexed to associative array
|
|
318
|
+
`,C=1;continue}e.state.associativeArrays??=new Set,e.state.associativeArrays.add(o)}let c=Array.from(e.state.env.keys()).some(e=>e.startsWith(`${o}_`)&&!e.startsWith(`${o}__length`));!e.state.env.has(o)&&!c&&(n||r?e.state.env.set(`${o}__length`,`0`):(e.state.declaredVars??=new Set,e.state.declaredVars.add(o))),x(o),i&&bt(e,o),a&&_t(e,o)}}return $(``,S,C)}async function kv(e,t){let n=[];for(let e=0;e<t.length;e++){let r=t[e];if(r!==`-a`&&r!==`-A`&&r!==`-p`)if(r===`--`){n.push(...t.slice(e+1));break}else r.startsWith(`-`)||n.push(r)}if(n.length===0){let t=``,n=Array.from(e.state.readonlyVars||[]).sort();for(let r of n){let n=e.state.env.get(r);if(n!==void 0){let e=n.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`);t+=`declare -r ${r}="${e}"
|
|
319
|
+
`}}return yg(t)}for(let t of n){let n=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(n){let t=n[1],r=n[2],i=dt(e,t);if(i)return i;let a=s_(r);if(e.state.associativeArrays?.has(t)){let n=c_(r);for(let[r,i]of n){let n=ov(e,i);e.state.env.set(`${t}_${r}`,n)}}else{let n=vt(e,t),r=0,i=e.state.env.get(t);n.length===0&&i!==void 0?(e.state.env.set(`${t}_0`,i),e.state.env.delete(t),r=1):n.length>0&&(r=Math.max(...n)+1);for(let n=0;n<a.length;n++)e.state.env.set(`${t}_${r+n}`,ov(e,a[n]));let o=r+a.length;e.state.env.set(`${t}__length`,String(o))}bt(e,t);continue}let r=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(r){let t=r[1],n=ov(e,r[2]),i=dt(e,t);if(i)return i;let a=e.state.env.get(t)??``;e.state.env.set(t,a+n),bt(e,t);continue}let i=l_(t);if(i.value===void 0&&!i.isArray){bt(e,i.name);continue}let a=await d_(e,i,{makeReadonly:!0});if(a)return a}return vg}function Av(e){return e.state.directoryStack??=[],e.state.directoryStack}function jv(e,t){return t&&e===t?`~`:t&&e.startsWith(`${t}/`)?`~${e.slice(t.length)}`:e}function Mv(e){let t=e.split(`/`).filter(e=>e&&e!==`.`),n=[];for(let e of t)e===`..`?n.pop():n.push(e);return`/${n.join(`/`)}`}async function Nv(e,t){let n=Av(e),r;for(let e=0;e<t.length;e++){let n=t[e];if(n===`--`){if(e+1<t.length){if(r!==void 0)return Q(`bash: pushd: too many arguments
|
|
319
320
|
`,2);r=t[e+1],e++}}else{if(n.startsWith(`-`)&&n!==`-`)return Q(`bash: pushd: ${n}: invalid option
|
|
320
321
|
`,2);if(r!==void 0)return Q(`bash: pushd: too many arguments
|
|
321
322
|
`,2);r=n}}if(r===void 0){if(n.length<2)return Q(`bash: pushd: no other directory
|
|
322
|
-
`,1);let e=n[0];n[0]=n[1],n[1]=e,r=n[0]}let i;if(r.startsWith(`/`))i=r;else if(r===`..`){let t=e.state.cwd.split(`/`).filter(e=>e);t.pop(),i=`/${t.join(`/`)}`}else i=r===`.`?e.state.cwd:r.startsWith(`~`)?(e.state.env.get(`HOME`)||`/`)+r.slice(1):`${e.state.cwd}/${r}`;i=
|
|
323
|
+
`,1);let e=n[0];n[0]=n[1],n[1]=e,r=n[0]}let i;if(r.startsWith(`/`))i=r;else if(r===`..`){let t=e.state.cwd.split(`/`).filter(e=>e);t.pop(),i=`/${t.join(`/`)}`}else i=r===`.`?e.state.cwd:r.startsWith(`~`)?(e.state.env.get(`HOME`)||`/`)+r.slice(1):`${e.state.cwd}/${r}`;i=Mv(i);try{if(!(await e.fs.stat(i)).isDirectory)return Q(`bash: pushd: ${r}: Not a directory
|
|
323
324
|
`,1)}catch{return Q(`bash: pushd: ${r}: No such file or directory
|
|
324
|
-
`,1)}n.unshift(e.state.cwd),e.state.previousDir=e.state.cwd,e.state.cwd=i,e.state.env.set(`PWD`,i),e.state.env.set(`OLDPWD`,e.state.previousDir);let a=e.state.env.get(`HOME`)||``;return
|
|
325
|
-
`)}function
|
|
325
|
+
`,1)}n.unshift(e.state.cwd),e.state.previousDir=e.state.cwd,e.state.cwd=i,e.state.env.set(`PWD`,i),e.state.env.set(`OLDPWD`,e.state.previousDir);let a=e.state.env.get(`HOME`)||``;return yg(`${[i,...n].map(e=>jv(e,a)).join(` `)}
|
|
326
|
+
`)}function Pv(e,t){let n=Av(e);for(let e of t)if(e!==`--`)return e.startsWith(`-`)&&e!==`-`?Q(`bash: popd: ${e}: invalid option
|
|
326
327
|
`,2):Q(`bash: popd: too many arguments
|
|
327
328
|
`,2);if(n.length===0)return Q(`bash: popd: directory stack empty
|
|
328
329
|
`,1);let r=n.shift();if(!r)return Q(`bash: popd: directory stack empty
|
|
329
|
-
`,1);e.state.previousDir=e.state.cwd,e.state.cwd=r,e.state.env.set(`PWD`,r),e.state.env.set(`OLDPWD`,e.state.previousDir);let i=e.state.env.get(`HOME`)||``;return
|
|
330
|
-
`)}function
|
|
330
|
+
`,1);e.state.previousDir=e.state.cwd,e.state.cwd=r,e.state.env.set(`PWD`,r),e.state.env.set(`OLDPWD`,e.state.previousDir);let i=e.state.env.get(`HOME`)||``;return yg(`${[r,...n].map(e=>jv(e,i)).join(` `)}
|
|
331
|
+
`)}function Fv(e,t){let n=Av(e),r=!1,i=!1,a=!1,o=!1;for(let e of t)if(e!==`--`)if(e.startsWith(`-`))for(let t of e.slice(1))if(t===`c`)r=!0;else if(t===`l`)i=!0;else if(t===`p`)a=!0;else if(t===`v`)a=!0,o=!0;else return Q(`bash: dirs: -${t}: invalid option
|
|
331
332
|
`,2);else return Q(`bash: dirs: too many arguments
|
|
332
|
-
`,1);if(r)return e.state.directoryStack=[],
|
|
333
|
+
`,1);if(r)return e.state.directoryStack=[],vg;let s=[e.state.cwd,...n],c=e.state.env.get(`HOME`)||``,l;return o?(l=s.map((e,t)=>` ${t} ${i?e:jv(e,c)}`).join(`
|
|
333
334
|
`),l+=`
|
|
334
|
-
`):l=a?s.map(e=>i?e:
|
|
335
|
+
`):l=a?s.map(e=>i?e:jv(e,c)).join(`
|
|
335
336
|
`)+`
|
|
336
|
-
`:s.map(e=>i?e:
|
|
337
|
-
`,
|
|
337
|
+
`:s.map(e=>i?e:jv(e,c)).join(` `)+`
|
|
338
|
+
`,yg(l)}async function Iv(e,t,n){let r=t;if(r.length>0){let e=r[0];if(e===`--`)r=r.slice(1);else if(e.startsWith(`-`)&&e!==`-`&&e.length>1)return Q(`bash: eval: ${e}: invalid option
|
|
338
339
|
eval: usage: eval [arg ...]
|
|
339
|
-
`,2)}if(r.length===0)return
|
|
340
|
-
`);throw e}finally{e.state.groupStdin=a}}function
|
|
341
|
-
`,n=2):n=(i%256+256)%256}throw new nt(n,``,r)}function
|
|
342
|
-
`}}return
|
|
343
|
-
`,a=1;continue}if(r!==void 0)if(o){let t=e.state.env.get(n)??``;e.state.env.set(n,t+r)}else e.state.env.set(n,r);else e.state.env.has(n)||e.state.env.set(n,``);_t(e,n)}return $(``,i,a)}function
|
|
344
|
-
`);let n=t[0],r=t[1],i=!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r),a=n.startsWith(`:`),o=a?n.slice(1):n,s;if(t.length>2)s=t.slice(2);else{let t=Number.parseInt(e.state.env.get(`#`)||`0`,10);s=[];for(let n=1;n<=t;n++)s.push(e.state.env.get(String(n))||``)}let c=Number.parseInt(e.state.env.get(`OPTIND`)||`1`,10);c<1&&(c=1);let l=Number.parseInt(e.state.env.get(`__GETOPTS_CHARINDEX`)||`0`,10);if(e.state.env.set(`OPTARG`,``),c>s.length)return i||e.state.env.set(r,`?`),e.state.env.set(`OPTIND`,String(s.length+1)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`),{exitCode:i?2:1,stdout:``,stderr:``};let u=s[c-1];if(!u||u===`-`||!u.startsWith(`-`))return i||e.state.env.set(r,`?`),{exitCode:i?2:1,stdout:``,stderr:``};if(u===`--`)return e.state.env.set(`OPTIND`,String(c+1)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`),i||e.state.env.set(r,`?`),{exitCode:i?2:1,stdout:``,stderr:``};let d=l===0?1:l,f=u[d];if(!f)return e.state.env.set(`OPTIND`,String(c+1)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`),
|
|
340
|
+
`,2)}if(r.length===0)return vg;let i=r.join(` `);if(i.trim()===``)return vg;let a=e.state.groupStdin,o=n??e.state.groupStdin;o!==void 0&&(e.state.groupStdin=o);try{let t=yt(i);return await e.executeScript(t)}catch(e){if(e instanceof qe||e instanceof it||e instanceof $e||e instanceof nt)throw e;if(e.name===`ParseException`)return Q(`bash: eval: ${e.message}
|
|
341
|
+
`);throw e}finally{e.state.groupStdin=a}}function Lv(e,t){let n,r=``;if(t.length===0)n=e.state.lastExitCode;else{let e=t[0],i=Number.parseInt(e,10);e===``||Number.isNaN(i)||!/^-?\d+$/.test(e)?(r=`bash: exit: ${e}: numeric argument required
|
|
342
|
+
`,n=2):n=(i%256+256)%256}throw new nt(n,``,r)}function Rv(e,t){let n=!1,r=[];for(let e of t)e===`-n`?n=!0:e===`-p`||e===`--`||r.push(e);if(r.length===0&&!n){let t=``,n=e.state.exportedVars??new Set,r=Array.from(n).sort();for(let n of r){let r=e.state.env.get(n);if(r!==void 0){let e=r.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`);t+=`declare -x ${n}="${e}"
|
|
343
|
+
`}}return yg(t)}if(n){for(let t of r){let n,r;if(t.includes(`=`)){let i=t.indexOf(`=`);n=t.slice(0,i),r=ov(e,t.slice(i+1)),e.state.env.set(n,r)}else n=t;Nt(e,n)}return vg}let i=``,a=0;for(let t of r){let n,r,o=!1,s=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(s)n=s[1],r=ov(e,s[2]),o=!0;else if(t.includes(`=`)){let i=t.indexOf(`=`);n=t.slice(0,i),r=ov(e,t.slice(i+1))}else n=t;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(n)){i+=`bash: export: \`${t}': not a valid identifier
|
|
344
|
+
`,a=1;continue}if(r!==void 0)if(o){let t=e.state.env.get(n)??``;e.state.env.set(n,t+r)}else e.state.env.set(n,r);else e.state.env.has(n)||e.state.env.set(n,``);_t(e,n)}return $(``,i,a)}function zv(e,t){if(t.length<2)return Q(`bash: getopts: usage: getopts optstring name [arg ...]
|
|
345
|
+
`);let n=t[0],r=t[1],i=!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r),a=n.startsWith(`:`),o=a?n.slice(1):n,s;if(t.length>2)s=t.slice(2);else{let t=Number.parseInt(e.state.env.get(`#`)||`0`,10);s=[];for(let n=1;n<=t;n++)s.push(e.state.env.get(String(n))||``)}let c=Number.parseInt(e.state.env.get(`OPTIND`)||`1`,10);c<1&&(c=1);let l=Number.parseInt(e.state.env.get(`__GETOPTS_CHARINDEX`)||`0`,10);if(e.state.env.set(`OPTARG`,``),c>s.length)return i||e.state.env.set(r,`?`),e.state.env.set(`OPTIND`,String(s.length+1)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`),{exitCode:i?2:1,stdout:``,stderr:``};let u=s[c-1];if(!u||u===`-`||!u.startsWith(`-`))return i||e.state.env.set(r,`?`),{exitCode:i?2:1,stdout:``,stderr:``};if(u===`--`)return e.state.env.set(`OPTIND`,String(c+1)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`),i||e.state.env.set(r,`?`),{exitCode:i?2:1,stdout:``,stderr:``};let d=l===0?1:l,f=u[d];if(!f)return e.state.env.set(`OPTIND`,String(c+1)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`),zv(e,t);let p=o.indexOf(f);if(p===-1){let t=``;return a?e.state.env.set(`OPTARG`,f):t=`bash: illegal option -- ${f}
|
|
345
346
|
`,i||e.state.env.set(r,`?`),d+1<u.length?(e.state.env.set(`__GETOPTS_CHARINDEX`,String(d+1)),e.state.env.set(`OPTIND`,String(c))):(e.state.env.set(`OPTIND`,String(c+1)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`)),{exitCode:i?2:0,stdout:``,stderr:t}}if(p+1<o.length&&o[p+1]===`:`)if(d+1<u.length)e.state.env.set(`OPTARG`,u.slice(d+1)),e.state.env.set(`OPTIND`,String(c+1)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`);else{if(c>=s.length){let t=``;return a?(e.state.env.set(`OPTARG`,f),i||e.state.env.set(r,`:`)):(t=`bash: option requires an argument -- ${f}
|
|
346
|
-
`,i||e.state.env.set(r,`?`)),e.state.env.set(`OPTIND`,String(c+1)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`),{exitCode:i?2:0,stdout:``,stderr:t}}e.state.env.set(`OPTARG`,s[c]),e.state.env.set(`OPTIND`,String(c+2)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`)}else d+1<u.length?(e.state.env.set(`__GETOPTS_CHARINDEX`,String(d+1)),e.state.env.set(`OPTIND`,String(c))):(e.state.env.set(`OPTIND`,String(c+1)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`));return i||e.state.env.set(r,f),{exitCode:i?2:0,stdout:``,stderr:``}}async function
|
|
347
|
+
`,i||e.state.env.set(r,`?`)),e.state.env.set(`OPTIND`,String(c+1)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`),{exitCode:i?2:0,stdout:``,stderr:t}}e.state.env.set(`OPTARG`,s[c]),e.state.env.set(`OPTIND`,String(c+2)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`)}else d+1<u.length?(e.state.env.set(`__GETOPTS_CHARINDEX`,String(d+1)),e.state.env.set(`OPTIND`,String(c))):(e.state.env.set(`OPTIND`,String(c+1)),e.state.env.set(`__GETOPTS_CHARINDEX`,`0`));return i||e.state.env.set(r,f),{exitCode:i?2:0,stdout:``,stderr:``}}async function Bv(e,t){e.state.hashTable||(e.state.hashTable=new Map);let n=!1,r=!1,i=!1,a=!1,o=!1,s=``,c=[],l=0;for(;l<t.length;){let e=t[l];if(e===`--`){l++,c.push(...t.slice(l));break}if(e===`-r`)n=!0,l++;else if(e===`-d`)r=!0,l++;else if(e===`-l`)i=!0,l++;else if(e===`-t`)o=!0,l++;else if(e===`-p`){if(a=!0,l++,l>=t.length)return Q(`bash: hash: -p: option requires an argument
|
|
347
348
|
`,1);s=t[l],l++}else if(e.startsWith(`-`)&&e.length>1){for(let t of e.slice(1))if(t===`r`)n=!0;else if(t===`d`)r=!0;else if(t===`l`)i=!0;else if(t===`t`)o=!0;else return Q(t===`p`?`bash: hash: -p: option requires an argument
|
|
348
349
|
`:`bash: hash: -${t}: invalid option
|
|
349
|
-
`,1);l++}else c.push(e),l++}if(n)return e.state.hashTable.clear(),
|
|
350
|
+
`,1);l++}else c.push(e),l++}if(n)return e.state.hashTable.clear(),vg;if(r){if(c.length===0)return Q(`bash: hash: -d: option requires an argument
|
|
350
351
|
`,1);let t=!1,n=``;for(let r of c)e.state.hashTable.has(r)?e.state.hashTable.delete(r):(n+=`bash: hash: ${r}: not found
|
|
351
|
-
`,t=!0);return t?Q(n,1):
|
|
352
|
+
`,t=!0);return t?Q(n,1):vg}if(o){if(c.length===0)return Q(`bash: hash: -t: option requires an argument
|
|
352
353
|
`,1);let t=``,n=!1,r=``;for(let i of c){let a=e.state.hashTable.get(i);a?c.length>1?t+=`${i} ${a}
|
|
353
354
|
`:t+=`${a}
|
|
354
355
|
`:(r+=`bash: hash: ${i}: not found
|
|
355
|
-
`,n=!0)}return n?{exitCode:1,stdout:t,stderr:r}:
|
|
356
|
-
`,1);let t=c[0];return e.state.hashTable.set(t,s),
|
|
356
|
+
`,n=!0)}return n?{exitCode:1,stdout:t,stderr:r}:yg(t)}if(a){if(c.length===0)return Q(`bash: hash: usage: hash [-lr] [-p pathname] [-dt] [name ...]
|
|
357
|
+
`,1);let t=c[0];return e.state.hashTable.set(t,s),vg}if(c.length===0){if(e.state.hashTable.size===0)return yg(`hash: hash table empty
|
|
357
358
|
`);let t=``;if(i)for(let[n,r]of e.state.hashTable)t+=`builtin hash -p ${r} ${n}
|
|
358
359
|
`;else{t=`hits command
|
|
359
360
|
`;for(let[,n]of e.state.hashTable)t+=` 1 ${n}
|
|
360
|
-
`}return
|
|
361
|
+
`}return yg(t)}let u=!1,d=``,f=(e.state.env.get(`PATH`)||`/usr/bin:/bin`).split(`:`);for(let t of c){if(t.includes(`/`)){d+=`bash: hash: ${t}: cannot use / in name
|
|
361
362
|
`,u=!0;continue}let n=!1;for(let r of f){if(!r)continue;let i=`${r}/${t}`;if(await e.fs.exists(i)){e.state.hashTable.set(t,i),n=!0;break}}n||(d+=`bash: hash: ${t}: not found
|
|
362
|
-
`,u=!0)}return u?Q(d,1):
|
|
363
|
+
`,u=!0)}return u?Q(d,1):vg}var Vv=new Map([[`:`,[`: [arguments]`,`Null command.
|
|
363
364
|
No effect; the command does nothing.
|
|
364
365
|
Exit Status:
|
|
365
366
|
Always succeeds.`]],[`.`,[`. filename [arguments]`,`Execute commands from a file in the current shell.
|
|
@@ -706,33 +707,33 @@ eval: usage: eval [arg ...]
|
|
|
706
707
|
job specification, and reports its termination status.
|
|
707
708
|
Exit Status:
|
|
708
709
|
Returns the status of the last ID; fails if ID is invalid or an invalid
|
|
709
|
-
option is given.`]]]),
|
|
710
|
-
`,2)}i++}else r.push(e),i++}if(r.length===0)return
|
|
711
|
-
`,o=!0;continue}for(let e of t){let t=
|
|
710
|
+
option is given.`]]]),Hv=[...Vv.keys()].sort();function Uv(e,t){let n=!1,r=[],i=0;for(;i<t.length;){let e=t[i];if(e===`--`){for(i++;i<t.length;)r.push(t[i]),i++;break}if(e.startsWith(`-`)&&e.length>1){for(let t=1;t<e.length;t++){let r=e[t];if(r===`s`)n=!0;else return Q(`bash: help: -${r}: invalid option
|
|
711
|
+
`,2)}i++}else r.push(e),i++}if(r.length===0)return Gv();let a=``,o=!1,s=``;for(let e of r){let t=Wv(e);if(t.length===0){s+=`bash: help: no help topics match \`${e}'. Try \`help help' or \`man -k ${e}' or \`info ${e}'.
|
|
712
|
+
`,o=!0;continue}for(let e of t){let t=Vv.get(e);if(!t)continue;let[r,i]=t;n?a+=`${e}: ${r}
|
|
712
713
|
`:a+=`${e}: ${r}
|
|
713
714
|
${i}
|
|
714
|
-
`}}return{exitCode:o?1:0,stdout:a,stderr:s}}function
|
|
715
|
+
`}}return{exitCode:o?1:0,stdout:a,stderr:s}}function Wv(e){let t=Ke(`^${e.replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*/g,`.*`).replace(/\?/g,`.`)}$`);return Hv.filter(e=>t.test(e))}function Gv(){let e=[];e.push(`just-bash shell builtins`),e.push("These shell commands are defined internally. Type `help' to see this list."),e.push("Type `help name' to find out more about the function `name'."),e.push(``);let t=Hv.slice(),n=Math.ceil(t.length/2);for(let r=0;r<n;r++){let i=t[r]||``,a=t[r+n]||``,o=i.padEnd(36);e.push(a?`${o}${a}`:i)}return yg(`${e.join(`
|
|
715
716
|
`)}
|
|
716
|
-
`)}function
|
|
717
|
-
`);let n=
|
|
718
|
-
`)}return $(``,``,r===0?1:0)}async function
|
|
717
|
+
`)}function Kv(e){let t=[],n=``,r=0;for(let i of e){for(let e of i)e===`(`?r++:e===`)`&&r--;n?n+=` ${i}`:n=i,r===0&&(t.push(n),n=``)}return n&&t.push(n),t}async function qv(e,t){if(t.length===0)return Q(`bash: let: expression expected
|
|
718
|
+
`);let n=Kv(t),r=0;for(let t of n)try{let n=yt(`(( ${t} ))`).statements[0];if(n&&n.pipelines.length>0&&n.pipelines[0].commands.length>0){let t=n.pipelines[0].commands[0];t.type===`ArithmeticCommand`&&(r=await Rt(e,t.expression.expression))}}catch(e){return Q(`bash: let: ${t}: ${e.message}
|
|
719
|
+
`)}return $(``,``,r===0?1:0)}async function Jv(e,t){if(e.state.localScopes.length===0)return Q(`bash: local: can only be used in a function
|
|
719
720
|
`);let n=e.state.localScopes[e.state.localScopes.length-1],r=``,i=0,a=!1,o=!1,s=[];for(let e of t)if(e===`-n`)a=!0;else if(e===`-a`)o=!0;else if(e!==`-p`)if(e.startsWith(`-`)&&!e.includes(`=`))for(let t of e.slice(1))t===`n`?a=!0:t===`a`&&(o=!0);else s.push(e);if(s.length===0){let t=``,r=Array.from(n.keys()).filter(e=>!e.includes(`_`)||!e.match(/_\d+$/)).filter(e=>!e.includes(`__length`)).sort();for(let n of r){let r=e.state.env.get(n);r!==void 0&&(t+=`${n}=${r}
|
|
720
721
|
`)}return $(t,``,0)}for(let t of s){let s,c,l=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(l){s=l[1];let o=l[2];if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(s)){r+=`bash: local: \`${t}': not a valid identifier
|
|
721
|
-
`,i=1;continue}if(dt(e,s,`bash`),!n.has(s)){n.set(s,e.state.env.get(s));let t=`${s}_`;for(let r of e.state.env.keys())r.startsWith(t)&&!r.includes(`__`)&&(n.has(r)||n.set(r,e.state.env.get(r)))}let c=`${s}_`;for(let t of e.state.env.keys())t.startsWith(c)&&!t.includes(`__`)&&e.state.env.delete(t);let u=
|
|
722
|
-
`,i=1;continue}let p=n.has(s);if(c!==void 0){let t=e.state.env.get(s);if(e.state.tempEnvBindings){let n=e.state.accessedTempEnvVars?.has(s),r=e.state.mutatedTempEnvVars?.has(s);if(!n&&!r)for(let n=e.state.tempEnvBindings.length-1;n>=0;n--){let r=e.state.tempEnvBindings[n];if(r.has(s)){t=r.get(s);break}}}
|
|
723
|
-
`,i=1;continue}e.state.env.set(s,c),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(s))}else{let t=e.state.tempEnvBindings?.some(e=>e.has(s));!p&&!t&&e.state.env.delete(s)}
|
|
722
|
+
`,i=1;continue}if(dt(e,s,`bash`),!n.has(s)){n.set(s,e.state.env.get(s));let t=`${s}_`;for(let r of e.state.env.keys())r.startsWith(t)&&!r.includes(`__`)&&(n.has(r)||n.set(r,e.state.env.get(r)))}let c=`${s}_`;for(let t of e.state.env.keys())t.startsWith(c)&&!t.includes(`__`)&&e.state.env.delete(t);let u=s_(o);for(let t=0;t<u.length;t++)e.state.env.set(`${s}_${t}`,u[t]);e.state.env.set(`${s}__length`,String(u.length)),f_(e,s),a&&Kt(e,s);continue}let u=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(u){s=u[1];let t=u[2];if(dt(e,s,`bash`),!n.has(s)){n.set(s,e.state.env.get(s));let t=`${s}_`;for(let r of e.state.env.keys())r.startsWith(t)&&!r.includes(`__`)&&(n.has(r)||n.set(r,e.state.env.get(r)));let r=`${s}__length`;e.state.env.has(r)&&!n.has(r)&&n.set(r,e.state.env.get(r))}let r=s_(t),i=vt(e,s),o=0,c=e.state.env.get(s);i.length===0&&c!==void 0?(e.state.env.set(`${s}_0`,c),e.state.env.delete(s),o=1):i.length>0&&(o=Math.max(...i)+1);for(let t=0;t<r.length;t++)e.state.env.set(`${s}_${o+t}`,ov(e,r[t]));let l=o+r.length;e.state.env.set(`${s}__length`,String(l)),f_(e,s),a&&Kt(e,s);continue}let d=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(d){s=d[1];let t=ov(e,d[2]);dt(e,s,`bash`),n.has(s)||n.set(s,e.state.env.get(s));let r=e.state.env.get(s)??``;e.state.env.set(s,r+t),f_(e,s),a&&Kt(e,s);continue}let f=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([^\]]+)\]=(.*)$/s);if(f){s=f[1];let t=f[2],r=ov(e,f[3]);if(dt(e,s,`bash`),!n.has(s)){n.set(s,e.state.env.get(s));let t=`${s}_`;for(let r of e.state.env.keys())r.startsWith(t)&&!r.includes(`__`)&&(n.has(r)||n.set(r,e.state.env.get(r)));let r=`${s}__length`;e.state.env.has(r)&&!n.has(r)&&n.set(r,e.state.env.get(r))}let i;try{i=await Rt(e,Dt(new Ut,t).expression)}catch{let e=parseInt(t,10);i=Number.isNaN(e)?0:e}e.state.env.set(`${s}_${i}`,r);let o=parseInt(e.state.env.get(`${s}__length`)??`0`,10);i>=o&&e.state.env.set(`${s}__length`,String(i+1)),f_(e,s),a&&Kt(e,s);continue}if(t.includes(`=`)){let n=t.indexOf(`=`);s=t.slice(0,n),c=ov(e,t.slice(n+1))}else s=t;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(s)){r+=`bash: local: \`${t}': not a valid identifier
|
|
723
|
+
`,i=1;continue}let p=n.has(s);if(c!==void 0){let t=e.state.env.get(s);if(e.state.tempEnvBindings){let n=e.state.accessedTempEnvVars?.has(s),r=e.state.mutatedTempEnvVars?.has(s);if(!n&&!r)for(let n=e.state.tempEnvBindings.length-1;n>=0;n--){let r=e.state.tempEnvBindings[n];if(r.has(s)){t=r.get(s);break}}}h_(e,s,t)}if(!p){let t=e.state.env.get(s);if(e.state.tempEnvBindings)for(let n=e.state.tempEnvBindings.length-1;n>=0;n--){let r=e.state.tempEnvBindings[n];if(r.has(s)){t=r.get(s);break}}if(n.set(s,t),o){let t=`${s}_`;for(let r of e.state.env.keys())r.startsWith(t)&&!r.includes(`__`)&&(n.has(r)||n.set(r,e.state.env.get(r)));let r=`${s}__length`;e.state.env.has(r)&&!n.has(r)&&n.set(r,e.state.env.get(r))}}if(o&&c===void 0){let t=`${s}_`;for(let n of e.state.env.keys())n.startsWith(t)&&!n.includes(`__`)&&e.state.env.delete(n);e.state.env.set(`${s}__length`,`0`)}else if(c!==void 0){if(dt(e,s,`bash`),a&&c!==``&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(c)){r+=`bash: local: \`${c}': invalid variable name for name reference
|
|
724
|
+
`,i=1;continue}e.state.env.set(s,c),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(s))}else{let t=e.state.tempEnvBindings?.some(e=>e.has(s));!p&&!t&&e.state.env.delete(s)}f_(e,s),a&&Kt(e,s)}return $(``,r,i)}function Yv(e,t,n){let r=`
|
|
724
725
|
`,i=0,a=0,o=0,s=!1,c=`MAPFILE`,l=0;for(;l<t.length;){let e=t[l];e===`-d`&&l+1<t.length?(r=t[l+1]===``?`\0`:t[l+1]||`
|
|
725
726
|
`,l+=2):e===`-n`&&l+1<t.length?(i=Number.parseInt(t[l+1],10)||0,l+=2):e===`-O`&&l+1<t.length?(a=Number.parseInt(t[l+1],10)||0,l+=2):e===`-s`&&l+1<t.length?(o=Number.parseInt(t[l+1],10)||0,l+=2):e===`-t`?(s=!0,l++):e===`-u`||e===`-C`||e===`-c`?l+=2:(e.startsWith(`-`)||(c=e),l++)}let u=n;!u&&e.state.groupStdin!==void 0&&(u=e.state.groupStdin);let d=[],f=u,p=0,m=0,h=e.limits?.maxArrayElements??1e5;for(;f.length>0;){let e=f.indexOf(r);if(e===-1){if(f.length>0){if(m<o)m++;else if(i===0||p<i){if(a+p>=h)return $(``,`mapfile: array element limit exceeded (${h})
|
|
726
727
|
`,1);let e=f,t=e.indexOf(`\0`);t!==-1&&(e=e.substring(0,t)),d.push(e),p++}}break}let t=f.substring(0,e),n=t.indexOf(`\0`);if(n!==-1&&(t=t.substring(0,n)),!s&&r!==`\0`&&(t+=r),f=f.substring(e+r.length),m<o){m++;continue}if(i>0&&p>=i)break;if(a+p>=h)return $(``,`mapfile: array element limit exceeded (${h})
|
|
727
|
-
`,1);d.push(t),p++}a===0&&zt(e,c);for(let t=0;t<d.length;t++)e.state.env.set(`${c}_${a+t}`,d[t]);let g=parseInt(e.state.env.get(`${c}__length`)||`0`,10),_=a+d.length;return e.state.env.set(`${c}__length`,String(Math.max(g,_))),e.state.groupStdin!==void 0&&!n&&(e.state.groupStdin=``),$(``,``,0)}function
|
|
728
|
-
`,o=-1,s=-1,c=null,l=-1,u=-1,d=[],f=0,p=!1,m=(e,n)=>{let r=1;for(;r<e.length;){let d=e[r];if(d===`r`)i=!0,r++;else if(d===`s`)r++;else{if(d===`d`)return r+1<e.length?(a=e.substring(r+1),{nextArgIndex:n+1}):n+1<t.length?(a=t[n+1],{nextArgIndex:n+2}):{nextArgIndex:n+1};if(d===`n`){if(r+1<e.length){let t=e.substring(r+1);return o=Number.parseInt(t,10),(Number.isNaN(o)||o<0)&&(p=!0,o=0),{nextArgIndex:n+1}}else if(n+1<t.length)return o=Number.parseInt(t[n+1],10),(Number.isNaN(o)||o<0)&&(p=!0,o=0),{nextArgIndex:n+2};return{nextArgIndex:n+1}}else if(d===`N`){if(r+1<e.length){let t=e.substring(r+1);return s=Number.parseInt(t,10),(Number.isNaN(s)||s<0)&&(p=!0,s=0),{nextArgIndex:n+1}}else if(n+1<t.length)return s=Number.parseInt(t[n+1],10),(Number.isNaN(s)||s<0)&&(p=!0,s=0),{nextArgIndex:n+2};return{nextArgIndex:n+1}}else{if(d===`a`)return r+1<e.length?(c=e.substring(r+1),{nextArgIndex:n+1}):n+1<t.length?(c=t[n+1],{nextArgIndex:n+2}):{nextArgIndex:n+1};if(d===`p`)return r+1<e.length?(e.substring(r+1),{nextArgIndex:n+1}):n+1<t.length?(t[n+1],{nextArgIndex:n+2}):{nextArgIndex:n+1};if(d===`u`){if(r+1<e.length){let t=e.substring(r+1);return l=Number.parseInt(t,10),Number.isNaN(l)||l<0?{nextArgIndex:-2}:{nextArgIndex:n+1}}else if(n+1<t.length)return l=Number.parseInt(t[n+1],10),Number.isNaN(l)||l<0?{nextArgIndex:-2}:{nextArgIndex:n+2};return{nextArgIndex:n+1}}else if(d===`t`){if(r+1<e.length){let t=e.substring(r+1);return u=Number.parseFloat(t),Number.isNaN(u)&&(u=0),{nextArgIndex:n+1}}else if(n+1<t.length)return u=Number.parseFloat(t[n+1]),Number.isNaN(u)&&(u=0),{nextArgIndex:n+2};return{nextArgIndex:n+1}}else if(d===`e`||d===`i`||d===`P`){if(d===`i`&&n+1<t.length)return{nextArgIndex:n+2};r++}else r++}}}return{nextArgIndex:n+1}};for(;f<t.length;){let e=t[f];if(e.startsWith(`-`)&&e.length>1&&e!==`--`){let t=m(e,f);if(t.nextArgIndex===-1)return{stdout:``,stderr:``,exitCode:2};if(t.nextArgIndex===-2)return{stdout:``,stderr:``,exitCode:1};f=t.nextArgIndex}else if(e===`--`)for(f++;f<t.length;)d.push(t[f]),f++;else d.push(e),f++}if(p)return $(``,``,1);if(d.length===0&&c===null&&d.push(`REPLY`),u===0){if(c)zt(e,c);else{for(let t of d)e.state.env.set(t,``);d.length===0&&e.state.env.set(`REPLY`,``)}return $(``,``,0)}if(u<0&&u!==-1)return $(``,``,1);let h=n;l>=0?h=e.state.fileDescriptors&&e.state.fileDescriptors.get(l)||``:!h&&e.state.groupStdin!==void 0&&(h=e.state.groupStdin);let g=a===``?`\0`:a,_=``,v=0,y=!0,b=t=>{if(l>=0&&e.state.fileDescriptors)e.state.fileDescriptors.set(l,h.substring(t));else if(r>=0&&e.state.fileDescriptors){let n=e.state.fileDescriptors.get(r);if(n?.startsWith(`__rw__:`)){let i=
|
|
728
|
+
`,1);d.push(t),p++}a===0&&zt(e,c);for(let t=0;t<d.length;t++)e.state.env.set(`${c}_${a+t}`,d[t]);let g=parseInt(e.state.env.get(`${c}__length`)||`0`,10),_=a+d.length;return e.state.env.set(`${c}__length`,String(Math.max(g,_))),e.state.groupStdin!==void 0&&!n&&(e.state.groupStdin=``),$(``,``,0)}function Xv(e){if(!e.startsWith(`__rw__:`))return null;let t=e.slice(7),n=t.indexOf(`:`);if(n===-1)return null;let r=Number.parseInt(t.slice(0,n),10);if(Number.isNaN(r)||r<0)return null;let i=n+1,a=t.slice(i,i+r),o=i+r+1,s=t.slice(o),c=s.indexOf(`:`);if(c===-1)return null;let l=Number.parseInt(s.slice(0,c),10);return Number.isNaN(l)||l<0?null:{path:a,position:l,content:s.slice(c+1)}}function Zv(e,t,n){return`__rw__:${e.length}:${e}:${t}:${n}`}function Qv(e,t,n,r=-1){let i=!1,a=`
|
|
729
|
+
`,o=-1,s=-1,c=null,l=-1,u=-1,d=[],f=0,p=!1,m=(e,n)=>{let r=1;for(;r<e.length;){let d=e[r];if(d===`r`)i=!0,r++;else if(d===`s`)r++;else{if(d===`d`)return r+1<e.length?(a=e.substring(r+1),{nextArgIndex:n+1}):n+1<t.length?(a=t[n+1],{nextArgIndex:n+2}):{nextArgIndex:n+1};if(d===`n`){if(r+1<e.length){let t=e.substring(r+1);return o=Number.parseInt(t,10),(Number.isNaN(o)||o<0)&&(p=!0,o=0),{nextArgIndex:n+1}}else if(n+1<t.length)return o=Number.parseInt(t[n+1],10),(Number.isNaN(o)||o<0)&&(p=!0,o=0),{nextArgIndex:n+2};return{nextArgIndex:n+1}}else if(d===`N`){if(r+1<e.length){let t=e.substring(r+1);return s=Number.parseInt(t,10),(Number.isNaN(s)||s<0)&&(p=!0,s=0),{nextArgIndex:n+1}}else if(n+1<t.length)return s=Number.parseInt(t[n+1],10),(Number.isNaN(s)||s<0)&&(p=!0,s=0),{nextArgIndex:n+2};return{nextArgIndex:n+1}}else{if(d===`a`)return r+1<e.length?(c=e.substring(r+1),{nextArgIndex:n+1}):n+1<t.length?(c=t[n+1],{nextArgIndex:n+2}):{nextArgIndex:n+1};if(d===`p`)return r+1<e.length?(e.substring(r+1),{nextArgIndex:n+1}):n+1<t.length?(t[n+1],{nextArgIndex:n+2}):{nextArgIndex:n+1};if(d===`u`){if(r+1<e.length){let t=e.substring(r+1);return l=Number.parseInt(t,10),Number.isNaN(l)||l<0?{nextArgIndex:-2}:{nextArgIndex:n+1}}else if(n+1<t.length)return l=Number.parseInt(t[n+1],10),Number.isNaN(l)||l<0?{nextArgIndex:-2}:{nextArgIndex:n+2};return{nextArgIndex:n+1}}else if(d===`t`){if(r+1<e.length){let t=e.substring(r+1);return u=Number.parseFloat(t),Number.isNaN(u)&&(u=0),{nextArgIndex:n+1}}else if(n+1<t.length)return u=Number.parseFloat(t[n+1]),Number.isNaN(u)&&(u=0),{nextArgIndex:n+2};return{nextArgIndex:n+1}}else if(d===`e`||d===`i`||d===`P`){if(d===`i`&&n+1<t.length)return{nextArgIndex:n+2};r++}else r++}}}return{nextArgIndex:n+1}};for(;f<t.length;){let e=t[f];if(e.startsWith(`-`)&&e.length>1&&e!==`--`){let t=m(e,f);if(t.nextArgIndex===-1)return{stdout:``,stderr:``,exitCode:2};if(t.nextArgIndex===-2)return{stdout:``,stderr:``,exitCode:1};f=t.nextArgIndex}else if(e===`--`)for(f++;f<t.length;)d.push(t[f]),f++;else d.push(e),f++}if(p)return $(``,``,1);if(d.length===0&&c===null&&d.push(`REPLY`),u===0){if(c)zt(e,c);else{for(let t of d)e.state.env.set(t,``);d.length===0&&e.state.env.set(`REPLY`,``)}return $(``,``,0)}if(u<0&&u!==-1)return $(``,``,1);let h=n;l>=0?h=e.state.fileDescriptors&&e.state.fileDescriptors.get(l)||``:!h&&e.state.groupStdin!==void 0&&(h=e.state.groupStdin);let g=a===``?`\0`:a,_=``,v=0,y=!0,b=t=>{if(l>=0&&e.state.fileDescriptors)e.state.fileDescriptors.set(l,h.substring(t));else if(r>=0&&e.state.fileDescriptors){let n=e.state.fileDescriptors.get(r);if(n?.startsWith(`__rw__:`)){let i=Xv(n);if(i){let n=i.position+t;e.state.fileDescriptors.set(r,Zv(i.path,n,i.content))}}}else e.state.groupStdin!==void 0&&!n&&(e.state.groupStdin=h.substring(t))};if(s>=0){let t=Math.min(s,h.length);_=h.substring(0,t),v=t,y=t>=s,b(v);let n=d[0]||`REPLY`;e.state.env.set(n,_);for(let t=1;t<d.length;t++)e.state.env.set(d[t],``);return $(``,``,y?0:1)}else if(o>=0){let e=0,t=0,n=!1;for(;t<h.length&&e<o;){let r=h[t];if(r===g){v=t+1,n=!0;break}if(!i&&r===`\\`&&t+1<h.length){let n=h[t+1];if(n===g&&g===`
|
|
729
730
|
`){t+=2,v=t;continue}if(n===g){t+=2,e++,_+=n,v=t;continue}_+=n,t+=2,e++,v=t}else _+=r,t++,e++,v=t}y=e>=o||n,b(v)}else{v=0;let t=0;for(;t<h.length;){let e=h[t];if(e===g){v=t+g.length,y=!0;break}if(!i&&e===`\\`&&t+1<h.length){let n=h[t+1];if(n===`
|
|
730
731
|
`){t+=2;continue}if(n===g){_+=n,t+=2;continue}_+=e,_+=n,t+=2;continue}_+=e,t++}if(t>=h.length&&(y=!1,v=t,_.length===0&&h.length===0)){for(let t of d)e.state.env.set(t,``);return c&&zt(e,c),$(``,``,1)}b(v)}g===`
|
|
731
732
|
`&&_.endsWith(`
|
|
732
733
|
`)&&(_=_.slice(0,-1));let x=e=>i?e:e.replace(/\\(.)/g,`$1`);if(d.length===1&&d[0]===`REPLY`)return e.state.env.set(`REPLY`,x(_)),$(``,``,y?0:1);let S=kt(e.state.env);if(c){let{words:t}=Gt(_,S,void 0,i),n=e.limits?.maxArrayElements??1e5;if(t.length>n)return $(``,`read: array element limit exceeded (${n})
|
|
733
|
-
`,1);zt(e,c);for(let n=0;n<t.length;n++)e.state.env.set(`${c}_${n}`,x(t[n]));return $(``,``,y?0:1)}let C=d.length,{words:w,wordStarts:ee}=Gt(_,S,C,i);for(let t=0;t<d.length;t++){let n=d[t];if(t<d.length-1)e.state.env.set(n,x(w[t]??``));else if(t<ee.length){let r=_.substring(ee[t]);r=wt(r,S,i),r=x(r),e.state.env.set(n,r)}else e.state.env.set(n,``)}return $(``,``,y?0:1)}function
|
|
734
|
+
`,1);zt(e,c);for(let n=0;n<t.length;n++)e.state.env.set(`${c}_${n}`,x(t[n]));return $(``,``,y?0:1)}let C=d.length,{words:w,wordStarts:ee}=Gt(_,S,C,i);for(let t=0;t<d.length;t++){let n=d[t];if(t<d.length-1)e.state.env.set(n,x(w[t]??``));else if(t<ee.length){let r=_.substring(ee[t]);r=wt(r,S,i),r=x(r),e.state.env.set(n,r)}else e.state.env.set(n,``)}return $(``,``,y?0:1)}function $v(e,t){if(e.state.callDepth===0&&e.state.sourceDepth===0)return Q(`bash: return: can only \`return' from a function or sourced script
|
|
734
735
|
`);let n=e.state.lastExitCode;if(t.length>0){let e=t[0],r=Number.parseInt(e,10);if(e===``||Number.isNaN(r)||!/^-?\d+$/.test(e))return Q(`bash: return: ${e}: numeric argument required
|
|
735
|
-
`,2);n=(r%256+256)%256}throw new $e(n)}var
|
|
736
|
+
`,2);n=(r%256+256)%256}throw new $e(n)}var ey=`set: usage: set [-eux] [+eux] [-o option] [+o option]
|
|
736
737
|
Options:
|
|
737
738
|
-e Exit immediately if a command exits with non-zero status
|
|
738
739
|
+e Disable -e
|
|
@@ -748,57 +749,57 @@ Options:
|
|
|
748
749
|
+o pipefail Disable pipefail
|
|
749
750
|
-o xtrace Same as -x
|
|
750
751
|
+o xtrace Disable xtrace
|
|
751
|
-
`,
|
|
752
|
+
`,ty=new Map([[`e`,`errexit`],[`u`,`nounset`],[`x`,`xtrace`],[`v`,`verbose`],[`f`,`noglob`],[`C`,`noclobber`],[`a`,`allexport`],[`n`,`noexec`],[`h`,null],[`b`,null],[`m`,null],[`B`,null],[`H`,null],[`P`,null],[`T`,null],[`E`,null],[`p`,null]]),ny=new Map([[`errexit`,`errexit`],[`pipefail`,`pipefail`],[`nounset`,`nounset`],[`xtrace`,`xtrace`],[`verbose`,`verbose`],[`noclobber`,`noclobber`],[`noglob`,`noglob`],[`allexport`,`allexport`],[`noexec`,`noexec`],[`posix`,`posix`],[`vi`,`vi`],[`emacs`,`emacs`],[`notify`,null],[`monitor`,null],[`braceexpand`,null],[`histexpand`,null],[`physical`,null],[`functrace`,null],[`errtrace`,null],[`privileged`,null],[`hashall`,null],[`ignoreeof`,null],[`interactive-comments`,null],[`keyword`,null],[`onecmd`,null]]),ry=[`errexit`,`nounset`,`pipefail`,`verbose`,`xtrace`,`posix`,`allexport`,`noclobber`,`noglob`,`noexec`,`vi`,`emacs`],iy=[`braceexpand`,`errtrace`,`functrace`,`hashall`,`histexpand`,`history`,`ignoreeof`,`interactive-comments`,`keyword`,`monitor`,`nolog`,`notify`,`onecmd`,`physical`,`privileged`];function ay(e,t,n){t!==null&&(n&&(t===`vi`?e.state.options.emacs=!1:t===`emacs`&&(e.state.options.vi=!1)),e.state.options[t]=n,rg(e))}function oy(e,t){return t+1<e.length&&!e[t+1].startsWith(`-`)&&!e[t+1].startsWith(`+`)}function sy(e,t){let n=vt(e,t);return n.length===0?`${t}=()`:`${t}=(${n.map(n=>`[${n}]=${uv(e.state.env.get(`${t}_${n}`)??``)}`).join(` `)})`}function cy(e){return/^[a-zA-Z0-9_]+$/.test(e)?e:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function ly(e,t){let n=ct(e,t);return n.length===0?`${t}=()`:`${t}=(${n.map(n=>{let r=e.state.env.get(`${t}_${n}`)??``;return`[${cy(n)}]=${uv(r)}`}).join(` `)} )`}function uy(e){let t=new Set,n=e.state.associativeArrays??new Set;for(let r of e.state.env.keys()){let e=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)_(\d+)$/);if(e){let r=e[1];n.has(r)||t.add(r)}}return t}function dy(e){return e.state.associativeArrays??new Set}function fy(e,t){if(t.includes(`--help`))return yg(ey);if(t.length===0){let t=uy(e),n=dy(e),r=e=>{for(let t of n){let n=`${t}_`;if(e!==`${t}__length`&&e.startsWith(n)){if(e.slice(n.length).startsWith(`_length`))continue;return!0}}return!1},i=[];for(let[a,o]of e.state.env){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(a)||t.has(a)||n.has(a))continue;let e=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)_(\d+)$/);if(e&&t.has(e[1]))continue;let s=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)__length$/);s&&t.has(s[1])||r(a)||s&&n.has(s[1])||i.push([a,o])}let a=[];for(let[e,t]of i.sort(([e],[t])=>e<t?-1:e>t?1:0))a.push(`${e}=${lv(t)}`);for(let n of[...t].sort((e,t)=>e<t?-1:e>t?1:0))a.push(sy(e,n));for(let t of[...n].sort((e,t)=>e<t?-1:e>t?1:0))a.push(ly(e,t));return a.sort((e,t)=>{let n=e.split(`=`)[0],r=t.split(`=`)[0];return n<r?-1:n>r?1:0}),yg(a.length>0?`${a.join(`
|
|
752
753
|
`)}
|
|
753
|
-
`:``)}let n=0;for(;n<t.length;){let r=t[n];if((r===`-o`||r===`+o`)&&
|
|
754
|
-
${
|
|
754
|
+
`:``)}let n=0;for(;n<t.length;){let r=t[n];if((r===`-o`||r===`+o`)&&oy(t,n)){let i=t[n+1];if(!ny.has(i)){let t=`bash: set: ${i}: invalid option name
|
|
755
|
+
${ey}`;if(e.state.options.posix)throw new tt(1,``,t);return Q(t)}ay(e,ny.get(i)??null,r===`-o`),n+=2;continue}if(r===`-o`){let t=ry.map(t=>`${t.padEnd(16)}${e.state.options[t]?`on`:`off`}`),n=iy.map(e=>`${e.padEnd(16)}off`);return yg(`${[...t,...n].sort().join(`
|
|
755
756
|
`)}
|
|
756
|
-
`)}if(r===`+o`){let t=
|
|
757
|
+
`)}if(r===`+o`){let t=ry.map(t=>`set ${e.state.options[t]?`-o`:`+o`} ${t}`),n=iy.map(e=>`set +o ${e}`);return yg(`${[...t,...n].sort().join(`
|
|
757
758
|
`)}
|
|
758
|
-
`)}if(r.length>1&&(r[0]===`-`||r[0]===`+`)&&r[1]!==`-`){let t=r[0]===`-`;for(let n=1;n<r.length;n++){let i=r[n];if(!
|
|
759
|
-
${
|
|
760
|
-
${
|
|
759
|
+
`)}if(r.length>1&&(r[0]===`-`||r[0]===`+`)&&r[1]!==`-`){let t=r[0]===`-`;for(let n=1;n<r.length;n++){let i=r[n];if(!ty.has(i)){let t=`bash: set: ${r[0]}${i}: invalid option
|
|
760
|
+
${ey}`;if(e.state.options.posix)throw new tt(1,``,t);return Q(t)}ay(e,ty.get(i)??null,t)}n++;continue}if(r===`--`)return py(e,t.slice(n+1)),vg;if(r===`-`){if(e.state.options.xtrace=!1,e.state.options.verbose=!1,rg(e),n+1<t.length)return py(e,t.slice(n+1)),vg;n++;continue}if(r===`+`){n++;continue}if(r.startsWith(`-`)||r.startsWith(`+`)){let t=`bash: set: ${r}: invalid option
|
|
761
|
+
${ey}`;if(e.state.options.posix)throw new tt(1,``,t);return Q(t)}return py(e,t.slice(n)),vg}return vg}function py(e,t){let n=1;for(;e.state.env.has(String(n));)e.state.env.delete(String(n)),n++;for(let n=0;n<t.length;n++)e.state.env.set(String(n+1),t[n]);e.state.env.set(`#`,String(t.length)),e.state.env.set(`@`,t.join(` `)),e.state.env.set(`*`,t.join(` `))}function my(e,t){let n=1;if(t.length>0){let r=Number.parseInt(t[0],10);if(Number.isNaN(r)||r<0){let n=`bash: shift: ${t[0]}: numeric argument required
|
|
761
762
|
`;if(e.state.options.posix)throw new tt(1,``,n);return Q(n)}n=r}let r=Number.parseInt(e.state.env.get(`#`)||`0`,10);if(n>r){let t=`bash: shift: shift count out of range
|
|
762
|
-
`;if(e.state.options.posix)throw new tt(1,``,t);return Q(t)}if(n===0)return
|
|
763
|
+
`;if(e.state.options.posix)throw new tt(1,``,t);return Q(t)}if(n===0)return vg;let i=[];for(let t=1;t<=r;t++)i.push(e.state.env.get(String(t))||``);let a=i.slice(n);for(let t=1;t<=r;t++)e.state.env.delete(String(t));for(let t=0;t<a.length;t++)e.state.env.set(String(t+1),a[t]);return e.state.env.set(`#`,String(a.length)),e.state.env.set(`@`,a.join(` `)),vg}async function hy(e,t){let n=t;if(n.length>0&&n[0]===`--`&&(n=n.slice(1)),n.length===0)return $(``,`bash: source: filename argument required
|
|
763
764
|
`,2);let r=n[0],i=null;if(r.includes(`/`)){let t=e.fs.resolvePath(e.state.cwd,r);try{i=await e.fs.readFile(t)}catch{}}else{let t=(e.state.env.get(`PATH`)||``).split(`:`).filter(e=>e);for(let n of t){let t=e.fs.resolvePath(e.state.cwd,`${n}/${r}`);try{if((await e.fs.stat(t)).isDirectory)continue;i=await e.fs.readFile(t);break}catch{}}if(i===null){let t=e.fs.resolvePath(e.state.cwd,r);try{i=await e.fs.readFile(t)}catch{}}}if(i===null)return Q(`bash: ${r}: No such file or directory
|
|
764
765
|
`);let a=new Map;if(n.length>1){for(let t=1;t<=9;t++)a.set(String(t),e.state.env.get(String(t)));a.set(`#`,e.state.env.get(`#`)),a.set(`@`,e.state.env.get(`@`));let t=n.slice(1);e.state.env.set(`#`,String(t.length)),e.state.env.set(`@`,t.join(` `));for(let n=0;n<t.length&&n<9;n++)e.state.env.set(String(n+1),t[n]);for(let n=t.length+1;n<=9;n++)e.state.env.delete(String(n))}let o=e.state.currentSource,s=()=>{if(e.state.sourceDepth--,e.state.currentSource=o,n.length>1)for(let[t,n]of a)n===void 0?e.state.env.delete(t):e.state.env.set(t,n)};if(e.state.sourceDepth++,e.state.sourceDepth>e.limits.maxSourceDepth)throw e.state.sourceDepth--,new Qe(`source: maximum nesting depth (${e.limits.maxSourceDepth}) exceeded, increase executionLimits.maxSourceDepth`,`recursion`);e.state.currentSource=r;try{let t=yt(i),n=await e.executeScript(t);return s(),n}catch(e){if(s(),e instanceof nt)throw e;if(e instanceof $e)return $(e.stdout,e.stderr,e.exitCode);if(e.name===`ParseException`)return Q(`bash: ${r}: ${e.message}
|
|
765
|
-
`);throw e}}function
|
|
766
|
-
`,i=1;continue}let l=await
|
|
766
|
+
`);throw e}}function gy(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function _y(e){return e.startsWith(`'`)&&e.endsWith(`'`)||e.startsWith(`"`)&&e.endsWith(`"`)}async function vy(e,t){if(_y(t))return null;try{return await Rt(e,Dt(new Ut,t).expression)}catch{let e=parseInt(t,10);return Number.isNaN(e)?0:e}}function yy(e,t){if(e.state.localVarStack?.has(t)){let n=g_(e,t);if(n){n.value===void 0?e.state.env.delete(t):e.state.env.set(t,n.value);let r=e.state.localVarStack?.get(t);if(!r||r.length===0)m_(e,t),e.state.localVarStack?.delete(t),e.state.fullyUnsetLocals=e.state.fullyUnsetLocals||new Map,e.state.fullyUnsetLocals.set(t,n.scopeIndex),by(e,t);else{let n=r[r.length-1];e.state.localVarDepth=e.state.localVarDepth||new Map,e.state.localVarDepth.set(t,n.scopeIndex+1)}return!0}return e.state.env.delete(t),m_(e,t),e.state.localVarStack?.delete(t),e.state.fullyUnsetLocals=e.state.fullyUnsetLocals||new Map,e.state.fullyUnsetLocals.set(t,0),!0}for(let n=e.state.localScopes.length-1;n>=0;n--){let r=e.state.localScopes[n];if(r.has(t)){let i=r.get(t);i===void 0?e.state.env.delete(t):e.state.env.set(t,i),r.delete(t);let a=!1;for(let r=n-1;r>=0;r--)if(e.state.localScopes[r].has(t)){e.state.localVarDepth&&e.state.localVarDepth.set(t,r+1),a=!0;break}return a||m_(e,t),!0}}return!1}function by(e,t){if(!e.state.tempEnvBindings||e.state.tempEnvBindings.length===0)return!1;for(let n=e.state.tempEnvBindings.length-1;n>=0;n--){let r=e.state.tempEnvBindings[n];if(r.has(t)){let n=r.get(t);return n===void 0?e.state.env.delete(t):e.state.env.set(t,n),r.delete(t),!0}}return!1}async function xy(e,t){if(t.startsWith(`'`)&&t.endsWith(`'`))return t.slice(1,-1);if(t.startsWith(`"`)&&t.endsWith(`"`)){let n=t.slice(1,-1);return F(e,new Ut().parseWordFromString(n,!0,!1))}return t.includes(`$`)?F(e,new Ut().parseWordFromString(t,!1,!1)):t}async function Sy(e,t){let n=`both`,r=``,i=0;for(let a of t){if(a===`-v`){n=`variable`;continue}if(a===`-f`){n=`function`;continue}if(n===`function`){e.state.functions.delete(a);continue}if(n===`variable`){let t=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(t){let n=t[1],a=t[2];if(a===`@`||a===`*`){let t=Ot(e,n);for(let[r]of t)e.state.env.delete(`${n}_${r}`);e.state.env.delete(n);continue}let o=e.state.associativeArrays?.has(n);if(o){let t=await xy(e,a);e.state.env.delete(`${n}_${t}`);continue}let s=Wt(e,n),c=e.state.declaredVars?.has(n);if((e.state.env.has(n)||c)&&!s&&!o){r+=`bash: unset: ${n}: not an array variable
|
|
767
|
+
`,i=1;continue}let l=await vy(e,a);if(l===null&&s){r+=`bash: unset: ${a}: not a valid identifier
|
|
767
768
|
`,i=1;continue}if(l===null)continue;if(l<0){let t=Ot(e,n),a=t.length,o=e.state.currentLine;if(a===0){r+=`bash: line ${o}: unset: [${l}]: bad array subscript
|
|
768
769
|
`,i=1;continue}let s=a+l;if(s<0){r+=`bash: line ${o}: unset: [${l}]: bad array subscript
|
|
769
|
-
`,i=1;continue}let c=t[s][0];e.state.env.delete(`${n}_${c}`);continue}e.state.env.delete(`${n}_${l}`);continue}if(!
|
|
770
|
+
`,i=1;continue}let c=t[s][0];e.state.env.delete(`${n}_${c}`);continue}e.state.env.delete(`${n}_${l}`);continue}if(!gy(a)){r+=`bash: unset: \`${a}': not a valid identifier
|
|
770
771
|
`,i=1;continue}let n=a;if(Et(e,a)){let t=Mt(e,a);t&&t!==a&&(n=t)}if(lt(e,n)){r+=`bash: unset: ${n}: cannot unset: readonly variable
|
|
771
|
-
`,i=1;continue}let o=
|
|
772
|
-
`,i=1;continue}let c=await
|
|
772
|
+
`,i=1;continue}let o=p_(e,n);if(o!==void 0&&o!==e.state.callDepth)yy(e,n);else if(e.state.fullyUnsetLocals?.has(n))e.state.env.delete(n);else if(o!==void 0){let t=e.state.accessedTempEnvVars?.has(n),r=e.state.mutatedTempEnvVars?.has(n);if((t||r)&&e.state.localVarStack?.has(n)){let t=g_(e,n);t?t.value===void 0?e.state.env.delete(n):e.state.env.set(n,t.value):e.state.env.delete(n)}else e.state.env.delete(n)}else by(e,n)||e.state.env.delete(n);e.state.exportedVars?.delete(n);continue}let t=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(t){let n=t[1],a=t[2];if(a===`@`||a===`*`){let t=Ot(e,n);for(let[r]of t)e.state.env.delete(`${n}_${r}`);e.state.env.delete(n);continue}let o=e.state.associativeArrays?.has(n);if(o){let t=await xy(e,a);e.state.env.delete(`${n}_${t}`);continue}let s=Wt(e,n);if(e.state.env.has(n)&&!s&&!o){r+=`bash: unset: ${n}: not an array variable
|
|
773
|
+
`,i=1;continue}let c=await vy(e,a);if(c===null&&s){r+=`bash: unset: ${a}: not a valid identifier
|
|
773
774
|
`,i=1;continue}if(c===null)continue;if(c<0){let t=Ot(e,n),a=t.length,o=e.state.currentLine;if(a===0){r+=`bash: line ${o}: unset: [${c}]: bad array subscript
|
|
774
775
|
`,i=1;continue}let s=a+c;if(s<0){r+=`bash: line ${o}: unset: [${c}]: bad array subscript
|
|
775
|
-
`,i=1;continue}let l=t[s][0];e.state.env.delete(`${n}_${l}`);continue}e.state.env.delete(`${n}_${c}`);continue}if(!
|
|
776
|
+
`,i=1;continue}let l=t[s][0];e.state.env.delete(`${n}_${l}`);continue}e.state.env.delete(`${n}_${c}`);continue}if(!gy(a)){r+=`bash: unset: \`${a}': not a valid identifier
|
|
776
777
|
`,i=1;continue}let o=a;if(Et(e,a)){let t=Mt(e,a);t&&t!==a&&(o=t)}if(lt(e,o)){r+=`bash: unset: ${o}: cannot unset: readonly variable
|
|
777
|
-
`,i=1;continue}let s=
|
|
778
|
-
`}}}c++}else break}for(;c<t.length;)s.push(t[c]),c++;if(o)return
|
|
779
|
-
`};if(s.length===0){if(n||r){let t=[];for(let a of
|
|
778
|
+
`,i=1;continue}let s=p_(e,o);if(s!==void 0&&s!==e.state.callDepth)yy(e,o);else if(e.state.fullyUnsetLocals?.has(o))e.state.env.delete(o);else if(s!==void 0){let t=e.state.accessedTempEnvVars?.has(o),n=e.state.mutatedTempEnvVars?.has(o);if((t||n)&&e.state.localVarStack?.has(o)){let t=g_(e,o);t?t.value===void 0?e.state.env.delete(o):e.state.env.set(o,t.value):e.state.env.delete(o)}else e.state.env.delete(o)}else by(e,o)||e.state.env.delete(o);e.state.exportedVars?.delete(o),e.state.functions.delete(a)}return $(``,r,i)}var Cy=[`extglob`,`dotglob`,`nullglob`,`failglob`,`globstar`,`globskipdots`,`nocaseglob`,`nocasematch`,`expand_aliases`,`lastpipe`,`xpg_echo`],wy=`autocd.cdable_vars.cdspell.checkhash.checkjobs.checkwinsize.cmdhist.compat31.compat32.compat40.compat41.compat42.compat43.compat44.complete_fullquote.direxpand.dirspell.execfail.extdebug.extquote.force_fignore.globasciiranges.gnu_errfmt.histappend.histreedit.histverify.hostcomplete.huponexit.inherit_errexit.interactive_comments.lithist.localvar_inherit.localvar_unset.login_shell.mailwarn.no_empty_cmd_completion.progcomp.progcomp_alias.promptvars.restricted_shell.shift_verbose.sourcepath`.split(`.`);function Ty(e){return Cy.includes(e)}function Ey(e){return wy.includes(e)}function Dy(e,t){let n=!1,r=!1,i=!1,a=!1,o=!1,s=[],c=0;for(;c<t.length;){let e=t[c];if(e===`--`){c++;break}if(e.startsWith(`-`)&&e.length>1){for(let t=1;t<e.length;t++){let s=e[t];switch(s){case`s`:n=!0;break;case`u`:r=!0;break;case`p`:i=!0;break;case`q`:a=!0;break;case`o`:o=!0;break;default:return{exitCode:2,stdout:``,stderr:`shopt: -${s}: invalid option
|
|
779
|
+
`}}}c++}else break}for(;c<t.length;)s.push(t[c]),c++;if(o)return Oy(e,s,n,r,i,a);if(n&&r)return{exitCode:1,stdout:``,stderr:`shopt: cannot set and unset shell options simultaneously
|
|
780
|
+
`};if(s.length===0){if(n||r){let t=[];for(let a of Cy){let o=e.state.shoptOptions[a];n&&o?t.push(i?`shopt -s ${a}`:`${a} on`):r&&!o&&t.push(i?`shopt -u ${a}`:`${a} off`)}return{exitCode:0,stdout:t.length>0?`${t.join(`
|
|
780
781
|
`)}
|
|
781
|
-
`:``,stderr:``}}let t=[];for(let n of
|
|
782
|
+
`:``,stderr:``}}let t=[];for(let n of Cy){let r=e.state.shoptOptions[n];t.push(i?`shopt ${r?`-s`:`-u`} ${n}`:`${n} ${r?`on`:`off`}`)}return{exitCode:0,stdout:`${t.join(`
|
|
782
783
|
`)}
|
|
783
|
-
`,stderr:``}}let l=!1,u=``,d=[];for(let t of s){if(!
|
|
784
|
-
`,l=!0;continue}if(n)
|
|
784
|
+
`,stderr:``}}let l=!1,u=``,d=[];for(let t of s){if(!Ty(t)&&!Ey(t)){u+=`shopt: ${t}: invalid shell option name
|
|
785
|
+
`,l=!0;continue}if(n)Ty(t)&&(e.state.shoptOptions[t]=!0,og(e));else if(r)Ty(t)&&(e.state.shoptOptions[t]=!1,og(e));else if(Ty(t)){let n=e.state.shoptOptions[t];a?n||(l=!0):i?(d.push(`shopt ${n?`-s`:`-u`} ${t}`),n||(l=!0)):(d.push(`${t} ${n?`on`:`off`}`),n||(l=!0))}else a?l=!0:i?(d.push(`shopt -u ${t}`),l=!0):(d.push(`${t} off`),l=!0)}return{exitCode:l?1:0,stdout:d.length>0?`${d.join(`
|
|
785
786
|
`)}
|
|
786
|
-
`:``,stderr:u}}function
|
|
787
|
+
`:``,stderr:u}}function Oy(e,t,n,r,i,a){let o=new Map([[`errexit`,`errexit`],[`pipefail`,`pipefail`],[`nounset`,`nounset`],[`xtrace`,`xtrace`],[`verbose`,`verbose`],[`posix`,`posix`],[`allexport`,`allexport`],[`noclobber`,`noclobber`],[`noglob`,`noglob`],[`noexec`,`noexec`],[`vi`,`vi`],[`emacs`,`emacs`]]),s=[`braceexpand`,`errtrace`,`functrace`,`hashall`,`histexpand`,`history`,`ignoreeof`,`interactive-comments`,`keyword`,`monitor`,`nolog`,`notify`,`onecmd`,`physical`,`privileged`],c=[...o.keys(),...s].sort();if(t.length===0){let t=[];for(let a of c){let c=s.includes(a),l=o.get(a),u=c||!l?!1:e.state.options[l];n&&!u||r&&u||t.push(i?`set ${u?`-o`:`+o`} ${a}`:`${a} ${u?`on`:`off`}`)}return{exitCode:0,stdout:t.length>0?`${t.join(`
|
|
787
788
|
`)}
|
|
788
789
|
`:``,stderr:``}}let l=!1,u=``,d=[];for(let c of t){let t=o.has(c),f=s.includes(c);if(!t&&!f){u+=`shopt: ${c}: invalid option name
|
|
789
|
-
`,l=!0;continue}if(f){n||r||(a?l=!0:i?(d.push(`set +o ${c}`),l=!0):(d.push(`${c} off`),l=!0));continue}let p=o.get(c);if(p)if(n)p===`vi`?e.state.options.emacs=!1:p===`emacs`&&(e.state.options.vi=!1),e.state.options[p]=!0,
|
|
790
|
+
`,l=!0;continue}if(f){n||r||(a?l=!0:i?(d.push(`set +o ${c}`),l=!0):(d.push(`${c} off`),l=!0));continue}let p=o.get(c);if(p)if(n)p===`vi`?e.state.options.emacs=!1:p===`emacs`&&(e.state.options.vi=!1),e.state.options[p]=!0,rg(e);else if(r)e.state.options[p]=!1,rg(e);else{let t=e.state.options[p];a?t||(l=!0):i?(d.push(`set ${t?`-o`:`+o`} ${c}`),t||(l=!0)):(d.push(`${c} ${t?`on`:`off`}`),t||(l=!0))}}return{exitCode:l?1:0,stdout:d.length>0?`${d.join(`
|
|
790
791
|
`)}
|
|
791
|
-
`:``,stderr:u}}async function
|
|
792
|
+
`:``,stderr:u}}async function ky(e,t,n){if(t.includes(`/`)){let n=e.fs.resolvePath(e.state.cwd,t);if(!await e.fs.exists(n))return{error:`not_found`,path:n};let r=n.split(`/`).pop()||t,i=e.commands.get(r);try{let t=await e.fs.stat(n);return t.isDirectory?{error:`permission_denied`,path:n}:i?{cmd:i,path:n}:t.mode&73?{script:!0,path:n}:{error:`permission_denied`,path:n}}catch{return{error:`not_found`,path:n}}}if(!n&&e.state.hashTable){let n=e.state.hashTable.get(t);if(n)if(await e.fs.exists(n)){let r=e.commands.get(t);if(r)return{cmd:r,path:n};try{let t=await e.fs.stat(n);if(!t.isDirectory&&t.mode&73)return{script:!0,path:n}}catch{}}else e.state.hashTable.delete(t)}let r=(n??e.state.env.get(`PATH`)??`/usr/bin:/bin`).split(`:`);for(let n of r){if(!n)continue;let r=`${n.startsWith(`/`)?n:e.fs.resolvePath(e.state.cwd,n)}/${t}`;if(await e.fs.exists(r))try{let i=await e.fs.stat(r);if(i.isDirectory)continue;let a=(i.mode&73)!=0,o=e.commands.get(t),s=n===`/bin`||n===`/usr/bin`;if(o&&s)return{cmd:o,path:r};if(a&&(o&&!s||!o))return{script:!0,path:r}}catch{}}if(!await e.fs.exists(`/usr/bin`)){let n=e.commands.get(t);if(n)return{cmd:n,path:`/usr/bin/${t}`}}return null}async function Ay(e,t){let n=[];if(t.includes(`/`)){let r=e.fs.resolvePath(e.state.cwd,t);if(await e.fs.exists(r))try{let i=await e.fs.stat(r);i.isDirectory||i.mode&73&&n.push(t)}catch{}return n}let r=(e.state.env.get(`PATH`)||`/usr/bin:/bin`).split(`:`);for(let i of r){if(!i)continue;let r=`${i.startsWith(`/`)?i:e.fs.resolvePath(e.state.cwd,i)}/${t}`;if(await e.fs.exists(r)){try{if((await e.fs.stat(r)).isDirectory)continue}catch{continue}n.push(i.startsWith(`/`)?r:`${i}/${t}`)}}return n}function jy(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function My(e,t,n,r){return((...i)=>{_n(t,n,`${r} call`);let a=e(...i);return jy(a)?a.then(e=>(_n(t,n,`${r} post-await`),e),e=>{throw _n(t,n,`${r} post-await`),e}):(_n(t,n,`${r} return`),a)})}function Ny(e,t,n){let r={readFile:My(e.readFile.bind(e),t,n,`fs.readFile`),readFileBuffer:My(e.readFileBuffer.bind(e),t,n,`fs.readFileBuffer`),writeFile:My(e.writeFile.bind(e),t,n,`fs.writeFile`),appendFile:My(e.appendFile.bind(e),t,n,`fs.appendFile`),exists:My(e.exists.bind(e),t,n,`fs.exists`),stat:My(e.stat.bind(e),t,n,`fs.stat`),mkdir:My(e.mkdir.bind(e),t,n,`fs.mkdir`),readdir:My(e.readdir.bind(e),t,n,`fs.readdir`),rm:My(e.rm.bind(e),t,n,`fs.rm`),cp:My(e.cp.bind(e),t,n,`fs.cp`),mv:My(e.mv.bind(e),t,n,`fs.mv`),resolvePath:My(e.resolvePath.bind(e),t,n,`fs.resolvePath`),getAllPaths:My(e.getAllPaths.bind(e),t,n,`fs.getAllPaths`),chmod:My(e.chmod.bind(e),t,n,`fs.chmod`),symlink:My(e.symlink.bind(e),t,n,`fs.symlink`),link:My(e.link.bind(e),t,n,`fs.link`),readlink:My(e.readlink.bind(e),t,n,`fs.readlink`),lstat:My(e.lstat.bind(e),t,n,`fs.lstat`),realpath:My(e.realpath.bind(e),t,n,`fs.realpath`),utimes:My(e.utimes.bind(e),t,n,`fs.utimes`)};return e.readdirWithFileTypes&&(r.readdirWithFileTypes=My(e.readdirWithFileTypes.bind(e),t,n,`fs.readdirWithFileTypes`)),r}function Py(e,t){if(!e.requireDefenseContext)return e;let n=`command:${t}`,r={...e,fs:Ny(e.fs,e.requireDefenseContext,n)};return e.exec&&(r.exec=My(e.exec,e.requireDefenseContext,n,`exec`)),e.fetch&&(r.fetch=My(e.fetch,e.requireDefenseContext,n,`fetch`)),e.sleep&&(r.sleep=My(e.sleep,e.requireDefenseContext,n,`sleep`)),e.getRegisteredCommands&&(r.getRegisteredCommands=My(e.getRegisteredCommands,e.requireDefenseContext,n,`getRegisteredCommands`)),r}async function Fy(e,t,n,r){let i=!1,a=!1,o=!1,s=!1,c=!1,l=[];for(let e of t)if(e.startsWith(`-`)&&e.length>1)for(let t of e.slice(1))t===`t`?i=!0:t===`p`?a=!0:t===`P`?o=!0:t===`a`?s=!0:t===`f`&&(c=!0);else l.push(e);let u=``,d=``,f=0,p=!1,m=!1;for(let t of l){let l=!1;if(o){if(s){let e=await r(t);if(e.length>0){for(let t of e)u+=`${t}
|
|
792
793
|
`;p=!0,l=!0}}else{let e=await n(t);e&&(u+=`${e}
|
|
793
794
|
`,p=!0,l=!0)}l||(m=!0);continue}let f=!c&&e.state.functions.has(t);if(s&&f){if(!a)if(i)u+=`function
|
|
794
|
-
`;else{let n=e.state.functions.get(t),r=n?
|
|
795
|
+
`;else{let n=e.state.functions.get(t),r=n?Iy(t,n):`${t} is a function
|
|
795
796
|
`;u+=r}l=!0}let h=e.state.env.get(`BASH_ALIAS_${t}`);if(!(h!==void 0&&(s||!l)&&(a||(i?u+=`alias
|
|
796
797
|
`:u+=`${t} is aliased to \`${h}'
|
|
797
|
-
`),l=!0,!s)||
|
|
798
|
+
`),l=!0,!s)||b_.has(t)&&(s||!l)&&(a||(i?u+=`keyword
|
|
798
799
|
`:u+=`${t} is a shell keyword
|
|
799
800
|
`),l=!0,!s))){if(!s&&f&&!l){if(!a)if(i)u+=`function
|
|
800
|
-
`;else{let n=e.state.functions.get(t),r=n?
|
|
801
|
-
`;u+=r}l=!0;continue}if(!(
|
|
801
|
+
`;else{let n=e.state.functions.get(t),r=n?Iy(t,n):`${t} is a function
|
|
802
|
+
`;u+=r}l=!0;continue}if(!(x_.has(t)&&(s||!l)&&(a||(i?u+=`builtin
|
|
802
803
|
`:u+=`${t} is a shell builtin
|
|
803
804
|
`),l=!0,!s))){if(s){let e=await r(t);for(let n of e)a?u+=`${n}
|
|
804
805
|
`:i?u+=`file
|
|
@@ -807,16 +808,16 @@ ${Zv}`;if(e.state.options.posix)throw new tt(1,``,t);return Q(t)}return uy(e,t.s
|
|
|
807
808
|
`:i?u+=`file
|
|
808
809
|
`:u+=`${t} is ${e}
|
|
809
810
|
`,p=!0,l=!0)}if(!l&&(m=!0,!i&&!a)){let n=!0;if(t.includes(`/`)){let r=e.fs.resolvePath(e.state.cwd,t);await e.fs.exists(r)&&(n=!1)}n&&(d+=`bash: type: ${t}: not found
|
|
810
|
-
`)}}}}return f=a?m&&!p?1:0:m?1:0,$(u,d,f)}function
|
|
811
|
+
`)}}}}return f=a?m&&!p?1:0:m?1:0,$(u,d,f)}function Iy(e,t){let n;return n=t.body.type===`Group`?t.body.body.map(e=>Ly(e)).join(`; `):Ly(t.body),`${e} is a function
|
|
811
812
|
${e} ()
|
|
812
813
|
{
|
|
813
814
|
${n}
|
|
814
815
|
}
|
|
815
|
-
`}function
|
|
816
|
+
`}function Ly(e){if(Array.isArray(e))return e.map(e=>Ly(e)).join(`; `);if(e.type===`Statement`){let t=[];for(let n=0;n<e.pipelines.length;n++){let r=e.pipelines[n];t.push(Ry(r)),e.operators[n]&&t.push(e.operators[n])}return t.join(` `)}if(e.type===`SimpleCommand`){let t=e,n=[];t.name&&n.push(zy(t.name));for(let e of t.args)n.push(zy(e));return n.join(` `)}return e.type===`Group`?`{ ${e.body.map(e=>Ly(e)).join(`; `)}; }`:`...`}function Ry(e){let t=e.commands.map(e=>Ly(e));return(e.negated?`! `:``)+t.join(` | `)}function zy(e){let t=``;for(let n of e.parts)n.type===`Literal`?t+=n.value:n.type===`DoubleQuoted`?t+=`"${n.parts.map(e=>By(e)).join(``)}"`:n.type===`SingleQuoted`?t+=`'${n.value}'`:t+=By(n);return t}function By(e){let t=e;return t.type===`Literal`?t.value??``:t.type===`Variable`?`$${t.name}`:``}async function Vy(e,t,n,r){let i=``,a=``,o=0;for(let n of t){if(!n){o=1;continue}let t=e.state.env.get(`BASH_ALIAS_${n}`);if(t!==void 0)r?i+=`${n} is an alias for "${t}"
|
|
816
817
|
`:i+=`alias ${n}='${t}'
|
|
817
|
-
`;else if(
|
|
818
|
+
`;else if(b_.has(n))r?i+=`${n} is a shell keyword
|
|
818
819
|
`:i+=`${n}
|
|
819
|
-
`;else if(
|
|
820
|
+
`;else if(x_.has(n))r?i+=`${n} is a shell builtin
|
|
820
821
|
`:i+=`${n}
|
|
821
822
|
`;else if(e.state.functions.has(n))r?i+=`${n} is a function
|
|
822
823
|
`:i+=`${n}
|
|
@@ -826,111 +827,111 @@ ${e} ()
|
|
|
826
827
|
`),o=1)}else if(e.commands.has(n)){let t=(e.state.env.get(`PATH`)??`/usr/bin:/bin`).split(`:`),a=null;for(let r of t){if(!r)continue;let t=`${r}/${n}`;try{let n=await e.fs.stat(t);if(!n.isDirectory&&n.mode&73){a=t;break}}catch{}}a||=`/usr/bin/${n}`,r?i+=`${n} is ${a}
|
|
827
828
|
`:i+=`${a}
|
|
828
829
|
`}else r&&(a+=`${n}: not found
|
|
829
|
-
`),o=1}return $(i,a,o)}async function
|
|
830
|
-
`,2);e=n.slice(0,-1)}return
|
|
831
|
-
`);let[,...o]=i;return r(a,o,[],n,!0,!1,-1)}async function
|
|
830
|
+
`),o=1}return $(i,a,o)}async function Hy(e,t){if(t.includes(`/`)){let n=e.fs.resolvePath(e.state.cwd,t);if(await e.fs.exists(n)){try{let t=await e.fs.stat(n);if(t.isDirectory||!(t.mode&73))return null}catch{return null}return t}return null}let n=(e.state.env.get(`PATH`)??`/usr/bin:/bin`).split(`:`);for(let r of n){if(!r)continue;let n=`${r.startsWith(`/`)?r:e.fs.resolvePath(e.state.cwd,r)}/${t}`;if(await e.fs.exists(n)){try{if((await e.fs.stat(n)).isDirectory)continue}catch{continue}return`${r}/${t}`}}if(e.commands.has(t)){for(let e of n)if(e===`/usr/bin`||e===`/bin`)return`${e}/${t}`;return`/usr/bin/${t}`}return null}async function Uy(e,t,n,r,i,a,o,s){let{ctx:c,runCommand:l}=e;if(c.coverage&&x_.has(t)&&c.coverage.hit(`bash:builtin:${t}`),t===`export`)return Rv(c,n);if(t===`unset`)return Sy(c,n);if(t===`exit`)return Lv(c,n);if(t===`local`)return Jv(c,n);if(t===`set`)return fy(c,n);if(t===`break`)return Cg(c,n);if(t===`continue`)return av(c,n);if(t===`return`)return $v(c,n);if(t===`eval`&&c.state.options.posix)return Iv(c,n,i);if(t===`shift`)return my(c,n);if(t===`getopts`)return zv(c,n);if(t===`compgen`)return L_(c,n);if(t===`complete`)return tv(c,n);if(t===`compopt`)return iv(c,n);if(t===`pushd`)return await Nv(c,n);if(t===`popd`)return Pv(c,n);if(t===`dirs`)return Fv(c,n);if(t===`source`||t===`.`)return hy(c,n);if(t===`read`)return Qv(c,n,i,s);if(t===`mapfile`||t===`readarray`)return Yv(c,n,i);if(t===`declare`||t===`typeset`)return Ov(c,n);if(t===`readonly`)return kv(c,n);if(!a){let e=c.state.functions.get(t);if(e)return M_(c,e,n,i)}if(t===`eval`)return Iv(c,n,i);if(t===`cd`)return await wg(c,n);if(t===`:`||t===`true`)return vg;if(t===`false`)return bg(!1);if(t===`let`)return qv(c,n);if(t===`command`)return Wy(e,n,i);if(t===`builtin`)return Gy(e,n,i);if(t===`shopt`)return Dy(c,n);if(t===`exec`){if(n.length===0)return vg;let[e,...t]=n;return l(e,t,[],i,!1,!1,-1)}if(t===`wait`)return vg;if(t===`type`)return await Fy(c,n,e=>Hy(c,e),e=>Ay(c,e));if(t===`hash`)return Bv(c,n);if(t===`help`)return Uv(c,n);if(t===`[`||t===`test`){let e=n;if(t===`[`){if(n[n.length-1]!==`]`)return Q(`[: missing \`]'
|
|
831
|
+
`,2);e=n.slice(0,-1)}return Hg(c,e)}return null}async function Wy(e,t,n){let{ctx:r,runCommand:i}=e;if(t.length===0)return vg;let a=!1,o=!1,s=!1,c=t;for(;c.length>0&&c[0].startsWith(`-`);){let e=c[0];if(e===`--`){c=c.slice(1);break}for(let t of e.slice(1))t===`p`?a=!0:t===`V`?o=!0:t===`v`&&(s=!0);c=c.slice(1)}if(c.length===0)return vg;if(s||o)return await Vy(r,c,s,o);let[l,...u]=c;return i(l,u,[],n,!0,a,-1)}async function Gy(e,t,n){let{runCommand:r}=e;if(t.length===0)return vg;let i=t;if(i[0]===`--`&&(i=i.slice(1),i.length===0))return vg;let a=i[0];if(!x_.has(a))return Q(`bash: builtin: ${a}: not a shell builtin
|
|
832
|
+
`);let[,...o]=i;return r(a,o,[],n,!0,!1,-1)}async function Ky(e,t,n,r,i){let{ctx:a,buildExportedEnv:o,executeUserScript:s}=e,c=await ky(a,t,i?`/usr/bin:/bin`:void 0);if(!c)return _g(t)?Q(`bash: ${t}: command not available in browser environments. Exclude '${t}' from your commands or use the Node.js bundle.
|
|
832
833
|
`,127):Q(`bash: ${t}: command not found
|
|
833
834
|
`,127);if(`error`in c)return c.error===`permission_denied`?Q(`bash: ${t}: Permission denied
|
|
834
835
|
`,126):Q(`bash: ${t}: No such file or directory
|
|
835
|
-
`,127);if(`script`in c)return t.includes(`/`)||(a.state.hashTable||(a.state.hashTable=new Map),a.state.hashTable.set(t,c.path)),await s(c.path,n,r);let{cmd:l,path:u}=c;t.includes(`/`)||(a.state.hashTable||(a.state.hashTable=new Map),a.state.hashTable.set(t,u));let d=r||a.state.groupStdin||``,f=o(),p=
|
|
836
|
-
`)}}async function
|
|
837
|
-
`,exitCode:1}}async function
|
|
838
|
-
`,exitCode:1}}return{stdout:i,stderr:a,exitCode:o}}async function
|
|
839
|
-
`);let s=[];if(t.words===null)s=(e.state.env.get(`@`)||``).split(` `).filter(Boolean);else if(t.words.length===0)s=[];else try{for(let n of t.words){let t=await qt(e,n);s.push(...t.values)}}catch(e){if(e instanceof Je)return{stdout:``,stderr:e.stderr,exitCode:1};throw e}e.state.loopDepth++;try{for(let n of s){o++,o>e.limits.maxLoopIterations&&
|
|
836
|
+
`,127);if(`script`in c)return t.includes(`/`)||(a.state.hashTable||(a.state.hashTable=new Map),a.state.hashTable.set(t,c.path)),await s(c.path,n,r);let{cmd:l,path:u}=c;t.includes(`/`)||(a.state.hashTable||(a.state.hashTable=new Map),a.state.hashTable.set(t,u));let d=r||a.state.groupStdin||``,f=o(),p=Py({fs:a.fs,cwd:a.state.cwd,env:a.state.env,exportedEnv:f,stdin:d,limits:a.limits,exec:a.execFn,fetch:a.fetch,getRegisteredCommands:()=>Array.from(a.commands.keys()),sleep:a.sleep,trace:a.trace,fileDescriptors:a.state.fileDescriptors,xpgEcho:a.state.shoptOptions.xpg_echo,coverage:a.coverage,signal:a.state.signal,requireDefenseContext:a.requireDefenseContext,jsBootstrapCode:a.jsBootstrapCode},t);try{let e=()=>gn(a.requireDefenseContext,`command`,`${t} execution`,()=>l.execute(n,p));return l.trusted?await un.runTrustedAsync(()=>e()):await e()}catch(e){if(e instanceof Qe||e instanceof ln)throw e;return Q(`${t}: ${vn(yn(e))}
|
|
837
|
+
`)}}async function qy(e,t){let n=e.state.inCondition;e.state.inCondition=!0;let r=``,i=``,a=0;try{for(let n of t){let t=await e.executeStatement(n);r+=t.stdout,i+=t.stderr,a=t.exitCode}}finally{e.state.inCondition=n}return{stdout:r,stderr:i,exitCode:a}}function Jy(e,t,n,r){if(e instanceof qe)return t+=e.stdout,n+=e.stderr,e.levels>1&&r>1?(e.levels--,e.stdout=t,e.stderr=n,{action:`rethrow`,stdout:t,stderr:n,error:e}):{action:`break`,stdout:t,stderr:n};if(e instanceof it)return t+=e.stdout,n+=e.stderr,e.levels>1&&r>1?(e.levels--,e.stdout=t,e.stderr=n,{action:`rethrow`,stdout:t,stderr:n,error:e}):{action:`continue`,stdout:t,stderr:n};if(e instanceof $e||e instanceof rt||e instanceof nt||e instanceof Qe)return e.prependOutput(t,n),{action:`rethrow`,stdout:t,stderr:n,error:e};let i=yn(e);return{action:`error`,stdout:t,stderr:`${n}${i}
|
|
838
|
+
`,exitCode:1}}async function Yy(e,t,n=``,r=``){let i=n,a=r,o=0;try{for(let n of t){let t=await e.executeStatement(n);i+=t.stdout,a+=t.stderr,o=t.exitCode}}catch(e){if(et(e)||e instanceof rt||e instanceof nt||e instanceof Qe||e instanceof at)throw e.prependOutput(i,a),e;return{stdout:i,stderr:`${a}${yn(e)}
|
|
839
|
+
`,exitCode:1}}return{stdout:i,stderr:a,exitCode:o}}async function Xy(e,t){let n=``,r=``;for(let i of t.clauses){let t=await qy(e,i.condition);if(n+=t.stdout,r+=t.stderr,t.exitCode===0)return Yy(e,i.body,n,r)}return t.elseBody?Yy(e,t.elseBody,n,r):$(n,r,0)}async function Zy(e,t){let n=await O_(e,t.redirections);if(n)return n;let r=``,i=``,a=0,o=0;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t.variable))return Q(`bash: \`${t.variable}': not a valid identifier
|
|
840
|
+
`);let s=[];if(t.words===null)s=(e.state.env.get(`@`)||``).split(` `).filter(Boolean);else if(t.words.length===0)s=[];else try{for(let n of t.words){let t=await qt(e,n);s.push(...t.values)}}catch(e){if(e instanceof Je)return{stdout:``,stderr:e.stderr,exitCode:1};throw e}e.state.loopDepth++;try{for(let n of s){o++,o>e.limits.maxLoopIterations&&xg(`for loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,`iterations`,r,i),e.state.env.set(t.variable,n);try{for(let n of t.body){let t=await e.executeStatement(n);r+=t.stdout,i+=t.stderr,a=t.exitCode}}catch(n){let a=Jy(n,r,i,e.state.loopDepth);if(r=a.stdout,i=a.stderr,a.action===`break`)break;if(a.action===`continue`)continue;if(a.action===`error`)return k_(e,$(r,i,a.exitCode??1),t.redirections);throw a.error}}}finally{e.state.loopDepth--}return k_(e,$(r,i,a),t.redirections)}async function Qy(e,t){let n=await O_(e,t.redirections);if(n)return n;let r=t.line;r!==void 0&&(e.state.currentLine=r);let i=``,a=``,o=0,s=0;t.init&&await Rt(e,t.init.expression),e.state.loopDepth++;try{for(;s++,s>e.limits.maxLoopIterations&&xg(`for loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,`iterations`,i,a),!(t.condition&&(r!==void 0&&(e.state.currentLine=r),await Rt(e,t.condition.expression)===0));){try{for(let n of t.body){let t=await e.executeStatement(n);i+=t.stdout,a+=t.stderr,o=t.exitCode}}catch(n){let r=Jy(n,i,a,e.state.loopDepth);if(i=r.stdout,a=r.stderr,r.action===`break`)break;if(r.action===`continue`){t.update&&await Rt(e,t.update.expression);continue}if(r.action===`error`)return k_(e,$(i,a,r.exitCode??1),t.redirections);throw r.error}t.update&&await Rt(e,t.update.expression)}}finally{e.state.loopDepth--}return k_(e,$(i,a,o),t.redirections)}async function $y(e,t,n=``){let r=``,i=``,a=0,o=0,s=n;for(let n of t.redirections)if((n.operator===`<<`||n.operator===`<<-`)&&n.target.type===`HereDoc`){let t=n.target,r=await F(e,t.content);t.stripTabs&&(r=r.split(`
|
|
840
841
|
`).map(e=>e.replace(/^\t+/,``)).join(`
|
|
841
842
|
`)),s=r}else if(n.operator===`<<<`&&n.target.type===`Word`)s=`${await F(e,n.target)}
|
|
842
843
|
`;else if(n.operator===`<`&&n.target.type===`Word`)try{let t=await F(e,n.target),r=e.fs.resolvePath(e.state.cwd,t);s=await e.fs.readFile(r)}catch{return Q(`bash: ${await F(e,n.target)}: No such file or directory
|
|
843
|
-
`)}let c=e.state.groupStdin;s&&(e.state.groupStdin=s),e.state.loopDepth++;try{for(;;){o++,o>e.limits.maxLoopIterations&&
|
|
844
|
-
`,t||
|
|
844
|
+
`)}let c=e.state.groupStdin;s&&(e.state.groupStdin=s),e.state.loopDepth++;try{for(;;){o++,o>e.limits.maxLoopIterations&&xg(`while loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,`iterations`,r,i);let n=0,s=!1,c=!1,l=e.state.inCondition;e.state.inCondition=!0;try{for(let a of t.condition){let t=await e.executeStatement(a);r+=t.stdout,i+=t.stderr,n=t.exitCode}}catch(t){if(t instanceof qe){if(r+=t.stdout,i+=t.stderr,t.levels>1&&e.state.loopDepth>1)throw t.levels--,t.stdout=r,t.stderr=i,e.state.inCondition=l,t;s=!0}else if(t instanceof it){if(r+=t.stdout,i+=t.stderr,t.levels>1&&e.state.loopDepth>1)throw t.levels--,t.stdout=r,t.stderr=i,e.state.inCondition=l,t;c=!0}else throw e.state.inCondition=l,t}finally{e.state.inCondition=l}if(s)break;if(!c){if(n!==0)break;try{for(let n of t.body){let t=await e.executeStatement(n);r+=t.stdout,i+=t.stderr,a=t.exitCode}}catch(t){let n=Jy(t,r,i,e.state.loopDepth);if(r=n.stdout,i=n.stderr,n.action===`break`)break;if(n.action===`continue`)continue;if(n.action===`error`)return $(r,i,n.exitCode??1);throw n.error}}}}finally{e.state.loopDepth--,e.state.groupStdin=c}return $(r,i,a)}async function eb(e,t){let n=``,r=``,i=0,a=0;e.state.loopDepth++;try{for(;;){a++,a>e.limits.maxLoopIterations&&xg(`until loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,`iterations`,n,r);let o=await qy(e,t.condition);if(n+=o.stdout,r+=o.stderr,o.exitCode===0)break;try{for(let a of t.body){let t=await e.executeStatement(a);n+=t.stdout,r+=t.stderr,i=t.exitCode}}catch(t){let i=Jy(t,n,r,e.state.loopDepth);if(n=i.stdout,r=i.stderr,i.action===`break`)break;if(i.action===`continue`)continue;if(i.action===`error`)return $(n,r,i.exitCode??1);throw i.error}}}finally{e.state.loopDepth--}return $(n,r,i)}async function tb(e,t){let n=await O_(e,t.redirections);if(n)return n;let r=``,i=``,a=0,o=await F(e,t.word),s=!1;for(let n=0;n<t.items.length;n++){let c=t.items[n],l=s;if(!s)for(let t of c.patterns){let n=await F(e,t);Vt(t)&&(n=xt(n));let r=e.state.shoptOptions.nocasematch,i=e.state.shoptOptions.extglob;if(Jg(o,n,r,i)){l=!0;break}}if(l){let t=await Yy(e,c.body,r,i);if(r=t.stdout,i=t.stderr,a=t.exitCode,c.terminator===`;;`)break;s=c.terminator===`;&`}else s=!1}return k_(e,$(r,i,a),t.redirections)}function nb(e,t){if(e.parts.length!==1)return!1;let n=e.parts[0];return n.type===`Literal`?t.includes(n.value):!1}function rb(e){if(!e.startsWith(`__rw__:`))return null;let t=e.slice(7),n=t.indexOf(`:`);if(n===-1)return null;let r=Number.parseInt(t.slice(0,n),10);if(Number.isNaN(r)||r<0)return null;let i=n+1,a=t.slice(i,i+r),o=i+r+1,s=t.slice(o),c=s.indexOf(`:`);if(c===-1)return null;let l=Number.parseInt(s.slice(0,c),10);return Number.isNaN(l)||l<0?null:{path:a,position:l,content:s.slice(c+1)}}var ib=`+ `;async function ab(e){let t=e.state.env.get(`PS4`);if(t===void 0)return ib;if(t===``)return``;try{return await F(e,new Ut().parseWordFromString(t,!1,!1))}catch{return e.state.expansionStderr=`${e.state.expansionStderr||``}bash: ${t}: bad substitution
|
|
845
|
+
`,t||ib}}function ob(e){return e.map(e=>sb(e)).join(` `)}function sb(e){if(e===``)return`''`;if(!/[\s'"\\$`!*?[\]{}|&;<>()~#\n\t]/.test(e))return e;let t=/[\x00-\x1f\x7f]/.test(e),n=e.includes(`
|
|
845
846
|
`),r=e.includes(` `),i=e.includes(`\\`),a=e.includes(`'`);if(t||n||r||i){let t=``;for(let n of e){let e=n.charCodeAt(0);n===`
|
|
846
|
-
`?t+=`\\n`:n===` `?t+=`\\t`:n===`\\`?t+=`\\\\`:n===`'`?t+=`'`:n===`"`?t+=`"`:e<32||e===127?e<256?t+=`\\x${e.toString(16).padStart(2,`0`)}`:t+=`\\u${e.toString(16).padStart(4,`0`)}`:t+=n}return`$'${t}'`}return a?`"${e.replace(/([\\$`"])/g,`\\$1`)}"`:`'${e}'`}async function
|
|
847
|
-
`:``}async function
|
|
848
|
-
`:``}async function
|
|
847
|
+
`?t+=`\\n`:n===` `?t+=`\\t`:n===`\\`?t+=`\\\\`:n===`'`?t+=`'`:n===`"`?t+=`"`:e<32||e===127?e<256?t+=`\\x${e.toString(16).padStart(2,`0`)}`:t+=`\\u${e.toString(16).padStart(4,`0`)}`:t+=n}return`$'${t}'`}return a?`"${e.replace(/([\\$`"])/g,`\\$1`)}"`:`'${e}'`}async function cb(e,t,n){return e.state.options.xtrace?`${await ab(e)}${ob([t,...n])}
|
|
848
|
+
`:``}async function lb(e,t,n){return e.state.options.xtrace?`${await ab(e)}${t}=${n}
|
|
849
|
+
`:``}async function ub(e,t,n){let r=t.timed?cn():0,i=``,a=vg,o=0,s=[],c=``,l=t.commands.length>1,u=e.state.lastArg;for(let r=0;r<t.commands.length;r++){let u=t.commands[r],d=r===t.commands.length-1,f=r===0;l&&(e.state.lastArg=``,f||(e.state.groupStdin=void 0));let p=l&&(!d||!e.state.shoptOptions.lastpipe)?new Map(e.state.env):null,m;try{m=await n(u,i)}catch(n){if(n instanceof st)m={stdout:n.stdout,stderr:n.stderr,exitCode:1};else if(n instanceof nt&&t.commands.length>1)m={stdout:n.stdout,stderr:n.stderr,exitCode:n.exitCode};else if(n instanceof rt&&t.commands.length>1)m={stdout:n.stdout,stderr:n.stderr,exitCode:n.exitCode};else throw p&&(e.state.env=p),n}p&&(e.state.env=p),s.push(m.exitCode),m.exitCode!==0&&(o=m.exitCode),d?a=m:(t.pipeStderr?.[r]??!1?i=m.stderr+m.stdout:(i=m.stdout,c+=m.stderr),a={stdout:``,stderr:``,exitCode:m.exitCode})}if(c&&(a={...a,stderr:c+a.stderr}),t.commands.length>1||t.commands.length===1&&t.commands[0].type===`SimpleCommand`){for(let t of e.state.env.keys())t.startsWith(`PIPESTATUS_`)&&e.state.env.delete(t);for(let t=0;t<s.length;t++)e.state.env.set(`PIPESTATUS_${t}`,String(s[t]));e.state.env.set(`PIPESTATUS__length`,String(s.length))}if(e.state.options.pipefail&&o!==0&&(a={...a,exitCode:o}),t.negated&&(a={...a,exitCode:a.exitCode===0?1:0}),t.timed){let e=(cn()-r)/1e3,n=Math.floor(e/60),i=e%60,o;o=t.timePosix?`real ${e.toFixed(2)}
|
|
849
850
|
user 0.00
|
|
850
851
|
sys 0.00
|
|
851
852
|
`:`
|
|
852
853
|
real ${`${n}m${i.toFixed(3)}s`}
|
|
853
854
|
user 0m0.000s
|
|
854
855
|
sys 0m0.000s
|
|
855
|
-
`,a={...a,stderr:a.stderr+o}}return l&&!e.state.shoptOptions.lastpipe&&(e.state.lastArg=u),a}async function
|
|
856
|
-
`,1)};let s=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(s){let a=await
|
|
856
|
+
`,a={...a,stderr:a.stderr+o}}return l&&!e.state.shoptOptions.lastpipe&&(e.state.lastArg=u),a}async function db(e,t){let n=new Map,r=``;for(let i of t.assignments){let a=i.name;if(i.array){let o=await fb(e,t,a,i.array,i.append,n);if(o.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:n,error:o.error};if(r+=o.xtraceOutput,o.continueToNext)continue}let o=i.value?await F(e,i.value):``;if(a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[\]$/))return{continueToNext:!1,xtraceOutput:r,tempAssignments:n,error:$(``,`bash: ${a}: bad array subscript
|
|
857
|
+
`,1)};let s=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(s){let a=await _b(e,t,s[1],s[2],o,i.append,n);if(a.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:n,error:a.error};if(a.continueToNext)continue}let c=await bb(e,t,a,o,i.append,n);if(c.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:n,error:c.error};r+=c.xtraceOutput,c.continueToNext}return{continueToNext:!1,xtraceOutput:r,tempAssignments:n}}async function fb(e,t,n,r,i,a){let o=``;if(/\[.+\]$/.test(n))return{continueToNext:!1,xtraceOutput:``,error:$(``,`bash: ${n}: cannot assign list to array member
|
|
857
858
|
`,1)};if(Et(e,n)){let t=Ft(e,n);if(t===void 0||t===``)throw new nt(1,``,``);let r=Mt(e,n);if(r&&/^[a-zA-Z_][a-zA-Z0-9_]*\[@\]$/.test(r))return{continueToNext:!1,xtraceOutput:``,error:$(``,`bash: ${n}: cannot assign list to array member
|
|
858
859
|
`,1)}}if(lt(e,n)){if(t.name)return o+=`bash: ${n}: readonly variable
|
|
859
|
-
`,{continueToNext:!0,xtraceOutput:o};let r=dt(e,n);if(r)return{continueToNext:!1,xtraceOutput:``,error:r}}let s=e.state.associativeArrays?.has(n),c=
|
|
860
|
-
`)}async function
|
|
861
|
-
`,1)};s=t}}if(lt(e,s)){if(t.name)return{continueToNext:!0,xtraceOutput:``};let n=dt(e,s);if(n)return{continueToNext:!1,xtraceOutput:``,error:n}}let c=e.state.associativeArrays?.has(s),l;if(c)l=await
|
|
860
|
+
`,{continueToNext:!0,xtraceOutput:o};let r=dt(e,n);if(r)return{continueToNext:!1,xtraceOutput:``,error:r}}let s=e.state.associativeArrays?.has(n),c=pb(r),l=()=>{let t=`${n}_`;for(let n of e.state.env.keys())n.startsWith(t)&&!n.includes(`__`)&&e.state.env.delete(n);e.state.env.delete(n)};if(s&&c?await mb(e,t,n,r,i,l,e=>{o+=e}):c?await hb(e,n,r,i,l):await gb(e,n,r,i,l),t.name){a.set(n,e.state.env.get(n));let t=`(${r.map(e=>jt(e)).join(` `)})`;e.state.env.set(n,t)}return{continueToNext:!0,xtraceOutput:o}}function pb(e){return e.some(e=>{if(e.parts.length>=2){let t=e.parts[0],n=e.parts[1];if(t.type!==`Glob`||!t.pattern.startsWith(`[`))return!1;if(t.pattern===`[`&&(n.type===`DoubleQuoted`||n.type===`SingleQuoted`)){if(e.parts.length<3)return!1;let t=e.parts[2];return t.type===`Literal`?t.value.startsWith(`]=`)||t.value.startsWith(`]+=`):!1}return n.type===`Literal`?n.value.startsWith(`]`)?n.value.startsWith(`]=`)||n.value.startsWith(`]+=`):t.pattern.endsWith(`]`)?n.value.startsWith(`=`)||n.value.startsWith(`+=`):!1:!1}return!1})}async function mb(e,t,n,r,i,a,o){let s=[];for(let t of r){let n=Ht(t);if(n){let{key:t,valueParts:r,append:i}=n,a;a=r.length>0?await F(e,{type:`Word`,parts:r}):``,a=ov(e,a),s.push({type:`keyed`,key:t,value:a,append:i})}else{let n=await F(e,t);s.push({type:`invalid`,expandedValue:n})}}i||a();for(let r of s)if(r.type===`keyed`)if(r.append){let t=e.state.env.get(`${n}_${r.key}`)??``;e.state.env.set(`${n}_${r.key}`,t+r.value)}else e.state.env.set(`${n}_${r.key}`,r.value);else o(`bash: line ${t.line??e.state.currentLine??1}: ${n}: ${r.expandedValue}: must use subscript when assigning associative array
|
|
861
|
+
`)}async function hb(e,t,n,r,i){let a=[];for(let t of n){let n=Ht(t);if(n){let{key:t,valueParts:r,append:i}=n,o;o=r.length>0?await F(e,{type:`Word`,parts:r}):``,o=ov(e,o),a.push({type:`keyed`,indexExpr:t,value:o,append:i})}else{let n=await qt(e,t);a.push({type:`non-keyed`,values:n.values})}}r||i();let o=0;for(let n of a)if(n.type===`keyed`){let r;try{r=await Rt(e,Dt(new Ut,n.indexExpr).expression,!1)}catch{if(/^-?\d+$/.test(n.indexExpr))r=Number.parseInt(n.indexExpr,10);else{let t=e.state.env.get(n.indexExpr);r=t?Number.parseInt(t,10):0,Number.isNaN(r)&&(r=0)}}if(n.append){let i=e.state.env.get(`${t}_${r}`)??``;e.state.env.set(`${t}_${r}`,i+n.value)}else e.state.env.set(`${t}_${r}`,n.value);o=r+1}else for(let r of n.values)e.state.env.set(`${t}_${o++}`,r)}async function gb(e,t,n,r,i){let a=[];for(let t of n){let n=await qt(e,t);a.push(...n.values)}let o=0;if(r){let n=Ot(e,t);if(n.length>0)o=Math.max(...n.map(([e])=>typeof e==`number`?e:0))+1;else{let n=e.state.env.get(t);n!==void 0&&(e.state.env.set(`${t}_0`,n),e.state.env.delete(t),o=1)}}else i();for(let n=0;n<a.length;n++)e.state.env.set(`${t}_${o+n}`,a[n]);r||e.state.env.set(`${t}__length`,String(a.length))}async function _b(e,t,n,r,i,a,o){let s=n;if(Et(e,n)){let t=Mt(e,n);if(t&&t!==n){if(t.includes(`[`))return{continueToNext:!1,xtraceOutput:``,error:$(``,`bash: \`${t}': not a valid identifier
|
|
862
|
+
`,1)};s=t}}if(lt(e,s)){if(t.name)return{continueToNext:!0,xtraceOutput:``};let n=dt(e,s);if(n)return{continueToNext:!1,xtraceOutput:``,error:n}}let c=e.state.associativeArrays?.has(s),l;if(c)l=await vb(e,s,r);else{let t=await yb(e,s,r);if(t.error)return{continueToNext:!1,xtraceOutput:``,error:t.error};l=`${s}_${t.index}`}let u=a?(e.state.env.get(l)||``)+i:i;if(t.name)o.set(l,e.state.env.get(l)),e.state.env.set(l,u);else{let t=p_(e,s);if(t!==void 0&&t===e.state.callDepth&&e.state.localScopes.length>0){let t=e.state.localScopes[e.state.localScopes.length-1];t.has(l)||t.set(l,e.state.env.get(l))}e.state.env.set(l,u)}return{continueToNext:!0,xtraceOutput:``}}async function vb(e,t,n){let r;if(n.startsWith(`'`)&&n.endsWith(`'`))r=n.slice(1,-1);else if(n.startsWith(`"`)&&n.endsWith(`"`)){let t=n.slice(1,-1);r=await F(e,new Ut().parseWordFromString(t,!0,!1))}else r=n.includes(`$`)?await F(e,new Ut().parseWordFromString(n,!1,!1)):n;return`${t}_${r}`}async function yb(e,t,n){let r=n;n.startsWith(`"`)&&n.endsWith(`"`)&&n.length>=2&&(r=n.slice(1,-1));let i;if(/^-?\d+$/.test(r))i=Number.parseInt(r,10);else{try{i=await Rt(e,Dt(new Ut,r).expression,!1)}catch(t){if(t instanceof Xe){let r=`bash: line ${e.state.currentLine}: ${n}: ${t.message}
|
|
862
863
|
`;if(t.fatal)throw new nt(1,``,r);return{index:0,error:$(``,r,1)}}let r=e.state.env.get(n);i=r?Number.parseInt(r,10):0}Number.isNaN(i)&&(i=0)}if(i<0){let r=Ot(e,t);if(r.length===0){let r=e.state.currentLine;return{index:0,error:$(``,`bash: line ${r}: ${t}[${n}]: bad array subscript
|
|
863
864
|
`,1)}}if(i=Math.max(...r.map(([e])=>typeof e==`number`?e:0))+1+i,i<0){let r=e.state.currentLine;return{index:0,error:$(``,`bash: line ${r}: ${t}[${n}]: bad array subscript
|
|
864
|
-
`,1)}}}return{index:i}}async function
|
|
865
|
+
`,1)}}}return{index:i}}async function bb(e,t,n,r,i,a){let o=``,s=n,c=null;if(Et(e,n)){let t=mt(e,n,r);if(t===void 0)return{continueToNext:!1,xtraceOutput:``,error:$(``,`bash: ${n}: circular name reference
|
|
865
866
|
`,1)};if(t===null)return{continueToNext:!0,xtraceOutput:``};s=t;let i=s.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);i&&(c={arrayName:i[1],subscriptExpr:i[2]},s=i[1])}if(lt(e,s)){if(t.name)return o+=`bash: ${s}: readonly variable
|
|
866
|
-
`,{continueToNext:!0,xtraceOutput:o};let n=dt(e,s);if(n)return{continueToNext:!1,xtraceOutput:``,error:n}}let l;if(
|
|
867
|
-
`,1),t.redirections)}return x(),
|
|
867
|
+
`,{continueToNext:!0,xtraceOutput:o};let n=dt(e,s);if(n)return{continueToNext:!1,xtraceOutput:``,error:n}}let l;if(bv(e,s))try{let t=new Ut;if(i){let n=Dt(t,`(${e.state.env.get(s)||`0`}) + (${r})`);l=String(await Rt(e,n.expression))}else{let n=Dt(t,r);l=String(await Rt(e,n.expression))}}catch{l=`0`}else{let{isArray:t}=await import(`./expansion-ENLSRCXJ-CE4BVBhZ.mjs`),n=t(e,s)?`${s}_0`:s;l=i?(e.state.env.get(n)||``)+r:r}l=Tv(e,s,l),o+=await lb(e,s,l);let u=s;if(c)u=await xb(e,c);else{let{isArray:t}=await import(`./expansion-ENLSRCXJ-CE4BVBhZ.mjs`);t(e,s)&&(u=`${s}_0`)}return t.name?(a.set(u,e.state.env.get(u)),e.state.env.set(u,l)):(e.state.env.set(u,l),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(s)),e.state.tempEnvBindings?.some(e=>e.has(s))&&(e.state.mutatedTempEnvVars=e.state.mutatedTempEnvVars||new Set,e.state.mutatedTempEnvVars.add(s))),{continueToNext:!1,xtraceOutput:o}}async function xb(e,t){let{arrayName:n,subscriptExpr:r}=t;if(e.state.associativeArrays?.has(n))return vb(e,n,r);let i;if(/^-?\d+$/.test(r))i=Number.parseInt(r,10);else{try{i=await Rt(e,Dt(new Ut,r).expression,!1)}catch{let t=e.state.env.get(r);i=t?Number.parseInt(t,10):0}Number.isNaN(i)&&(i=0)}if(i<0){let t=Ot(e,n);t.length>0&&(i=Math.max(...t.map(e=>e[0]))+1+i)}return`${n}_${i}`}async function Sb(e,t,n,r){let i=await O_(e,t.redirections);if(i)return i;let a=new Map(e.state.env),o=e.state.cwd,s={...e.state.options},c=new Map(e.state.functions),l=e.state.localScopes,u=e.state.localVarStack,d=e.state.localVarDepth,f=e.state.fullyUnsetLocals;if(e.state.localScopes=l.map(e=>new Map(e)),u){e.state.localVarStack=new Map;for(let[t,n]of u.entries())e.state.localVarStack.set(t,n.map(e=>({...e})))}d&&(e.state.localVarDepth=new Map(d)),f&&(e.state.fullyUnsetLocals=new Map(f));let p=e.state.loopDepth,m=e.state.parentHasLoopContext;e.state.parentHasLoopContext=p>0,e.state.loopDepth=0;let h=e.state.lastArg,g=e.state.bashPid;e.state.bashPid=e.state.nextVirtualPid++;let _=e.state.groupStdin;n&&(e.state.groupStdin=n);let v=``,y=``,b=0,x=()=>{e.state.env=a,e.state.cwd=o,e.state.options=s,e.state.functions=c,e.state.localScopes=l,e.state.localVarStack=u,e.state.localVarDepth=d,e.state.fullyUnsetLocals=f,e.state.loopDepth=p,e.state.parentHasLoopContext=m,e.state.groupStdin=_,e.state.bashPid=g,e.state.lastArg=h};try{for(let e of t.body){let t=await r(e);v+=t.stdout,y+=t.stderr,b=t.exitCode}}catch(n){if(x(),n instanceof Qe)throw n;return n instanceof at||n instanceof qe||n instanceof it?(v+=n.stdout,y+=n.stderr,k_(e,$(v,y,0),t.redirections)):n instanceof nt||n instanceof $e?(v+=n.stdout,y+=n.stderr,k_(e,$(v,y,n.exitCode),t.redirections)):n instanceof rt?k_(e,$(v+n.stdout,y+n.stderr,n.exitCode),t.redirections):k_(e,$(v,`${y}${yn(n)}
|
|
868
|
+
`,1),t.redirections)}return x(),k_(e,$(v,y,b),t.redirections)}async function Cb(e,t,n,r){let i=``,a=``,o=0,s=await D_(e,t.redirections);if(s)return s;let c=n;for(let n of t.redirections)if((n.operator===`<<`||n.operator===`<<-`)&&n.target.type===`HereDoc`){let t=n.target,r=await F(e,t.content);t.stripTabs&&(r=r.split(`
|
|
868
869
|
`).map(e=>e.replace(/^\t+/,``)).join(`
|
|
869
|
-
`));let i=n.fd??0;i===0?c=r:(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),
|
|
870
|
+
`));let i=n.fd??0;i===0?c=r:(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),Sg(e),e.state.fileDescriptors.set(i,r))}else if(n.operator===`<<<`&&n.target.type===`Word`)c=`${await F(e,n.target)}
|
|
870
871
|
`;else if(n.operator===`<`&&n.target.type===`Word`)try{let t=await F(e,n.target),r=e.fs.resolvePath(e.state.cwd,t);c=await e.fs.readFile(r)}catch{return $(``,`bash: ${await F(e,n.target)}: No such file or directory
|
|
871
872
|
`,1)}let l=e.state.groupStdin;c&&(e.state.groupStdin=c);try{for(let e of t.body){let t=await r(e);i+=t.stdout,a+=t.stderr,o=t.exitCode}}catch(t){if(e.state.groupStdin=l,t instanceof Qe)throw t;if(et(t)||t instanceof rt||t instanceof nt)throw t.prependOutput(i,a),t;return $(i,`${a}${yn(t)}
|
|
872
|
-
`,1)}return e.state.groupStdin=l,
|
|
873
|
+
`,1)}return e.state.groupStdin=l,k_(e,$(i,a,o),t.redirections)}async function wb(e,t,n,r,i){let a;try{a=await e.fs.readFile(t)}catch{return Q(`bash: ${t}: No such file or directory
|
|
873
874
|
`,127)}if(a.startsWith(`#!`)){let e=a.indexOf(`
|
|
874
875
|
`);e!==-1&&(a=a.slice(e+1))}let o=new Map(e.state.env),s=e.state.cwd,c={...e.state.options},l=e.state.loopDepth,u=e.state.parentHasLoopContext,d=e.state.lastArg,f=e.state.bashPid,p=e.state.groupStdin,m=e.state.currentSource;e.state.parentHasLoopContext=l>0,e.state.loopDepth=0,e.state.bashPid=e.state.nextVirtualPid++,r&&(e.state.groupStdin=r),e.state.currentSource=t,e.state.env.set(`0`,t),e.state.env.set(`#`,String(n.length)),e.state.env.set(`@`,n.join(` `)),e.state.env.set(`*`,n.join(` `));for(let t=0;t<n.length&&t<9;t++)e.state.env.set(String(t+1),n[t]);for(let t=n.length+1;t<=9;t++)e.state.env.delete(String(t));let h=()=>{e.state.env=o,e.state.cwd=s,e.state.options=c,e.state.loopDepth=l,e.state.parentHasLoopContext=u,e.state.lastArg=d,e.state.bashPid=f,e.state.groupStdin=p,e.state.currentSource=m};try{let e=await i(new Ut().parse(a));return h(),e}catch(e){if(h(),e instanceof nt||e instanceof Qe)throw e;if(e.name===`ParseException`)return Q(`bash: ${t}: ${e.message}
|
|
875
|
-
`);throw e}}var
|
|
876
|
-
`);let r=0,i=-1,a=!1;for(let o=0;o<e.pipelines.length;o++){let s=e.pipelines[o],c=o>0?e.operators[o-1]:null;if(c===`&&`&&r!==0||c===`||`&&r===0)continue;let l=await this.executePipeline(s);t+=l.stdout,n+=l.stderr,r=l.exitCode,i=o,a=s.negated,this.ctx.state.lastExitCode=r,this.ctx.state.env.set(`?`,String(r))}let o=i<e.pipelines.length-1,s=this.ctx.state.errexitSafe;if(this.ctx.state.errexitSafe=o||a||s,this.ctx.state.options.errexit&&r!==0&&i===e.pipelines.length-1&&!a&&!this.ctx.state.inCondition&&!s)throw new rt(r,t,n);return $(t,n,r)}async executePipeline(e){return
|
|
876
|
+
`);throw e}}var Tb=class{ctx;constructor(e,t){this.ctx={state:t,fs:e.fs,commands:e.commands,limits:e.limits,execFn:e.exec,executeScript:this.executeScript.bind(this),executeStatement:this.executeStatement.bind(this),executeCommand:this.executeCommand.bind(this),fetch:e.fetch,sleep:e.sleep,trace:e.trace,coverage:e.coverage,requireDefenseContext:e.requireDefenseContext??!1,jsBootstrapCode:e.jsBootstrapCode}}assertDefenseContext(e){if(!this.ctx.requireDefenseContext||un.isInSandboxedContext())return;let t=`interpreter ${e} attempted outside defense context`;throw new ln(t,{timestamp:Date.now(),type:`missing_defense_context`,message:t,path:`DefenseInDepthBox.context`,stack:Error().stack,executionId:un.getCurrentExecutionId()})}buildExportedEnv(){let e=this.ctx.state.exportedVars,t=this.ctx.state.tempExportedVars,n=new Set;if(e)for(let t of e)n.add(t);if(t)for(let e of t)n.add(e);if(n.size===0)return Object.create(null);let r=Object.create(null);for(let e of n){let t=this.ctx.state.env.get(e);t!==void 0&&(r[e]=t)}return r}async executeScript(e){this.assertDefenseContext(`execution`);let t=``,n=``,r=0,i=this.ctx.limits.maxOutputSize,a=(e,r)=>{t.length+n.length+e.length+r.length>i&&xg(`total output size exceeded (>${i} bytes), increase executionLimits.maxOutputSize`,`output_size`),t+=e,n+=r};for(let i of e.statements)try{let e=await this.executeStatement(i);a(e.stdout,e.stderr),r=e.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env.set(`?`,String(r))}catch(e){if(e instanceof nt)throw e.prependOutput(t,n),e;if(e instanceof tt)return a(e.stdout,e.stderr),r=e.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env.set(`?`,String(r)),{stdout:t,stderr:n,exitCode:r,env:mn(this.ctx.state.env)};if(e instanceof Qe)throw e;if(e instanceof rt)return a(e.stdout,e.stderr),r=e.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env.set(`?`,String(r)),{stdout:t,stderr:n,exitCode:r,env:mn(this.ctx.state.env)};if(e instanceof Ze||e instanceof st)return a(e.stdout,e.stderr),r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env.set(`?`,String(r)),{stdout:t,stderr:n,exitCode:r,env:mn(this.ctx.state.env)};if(e instanceof Xe){a(e.stdout,e.stderr),r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env.set(`?`,String(r));continue}if(e instanceof Ye){a(e.stdout,e.stderr),r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env.set(`?`,String(r));continue}if(e instanceof qe||e instanceof it){if(this.ctx.state.loopDepth>0)throw e.prependOutput(t,n),e;a(e.stdout,e.stderr);continue}throw e instanceof $e&&e.prependOutput(t,n),e}return{stdout:t,stderr:n,exitCode:r,env:mn(this.ctx.state.env)}}async executeUserScript(e,t,n=``){return wb(this.ctx,e,t,n,e=>this.executeScript(e))}async executeStatement(e){if(this.assertDefenseContext(`statement`),this.ctx.state.signal?.aborted)throw new ot;if(this.ctx.state.commandCount++,this.ctx.state.commandCount>this.ctx.limits.maxCommandCount&&xg(`too many commands executed (>${this.ctx.limits.maxCommandCount}), increase executionLimits.maxCommandCount`,`commands`),e.deferredError)throw new Bt(e.deferredError.message,e.line??1,1);if(this.ctx.state.options.noexec)return vg;this.ctx.state.errexitSafe=!1;let t=``,n=``;this.ctx.state.options.verbose&&!this.ctx.state.suppressVerbose&&e.sourceText&&(n+=`${e.sourceText}
|
|
877
|
+
`);let r=0,i=-1,a=!1;for(let o=0;o<e.pipelines.length;o++){let s=e.pipelines[o],c=o>0?e.operators[o-1]:null;if(c===`&&`&&r!==0||c===`||`&&r===0)continue;let l=await this.executePipeline(s);t+=l.stdout,n+=l.stderr,r=l.exitCode,i=o,a=s.negated,this.ctx.state.lastExitCode=r,this.ctx.state.env.set(`?`,String(r))}let o=i<e.pipelines.length-1,s=this.ctx.state.errexitSafe;if(this.ctx.state.errexitSafe=o||a||s,this.ctx.state.options.errexit&&r!==0&&i===e.pipelines.length-1&&!a&&!this.ctx.state.inCondition&&!s)throw new rt(r,t,n);return $(t,n,r)}async executePipeline(e){return ub(this.ctx,e,(e,t)=>this.executeCommand(e,t))}async executeCommand(e,t){switch(this.assertDefenseContext(`command`),this.ctx.coverage?.hit(`bash:cmd:${e.type}`),e.type){case`SimpleCommand`:return this.executeSimpleCommand(e,t);case`If`:return Xy(this.ctx,e);case`For`:return Zy(this.ctx,e);case`CStyleFor`:return Qy(this.ctx,e);case`While`:return $y(this.ctx,e,t);case`Until`:return eb(this.ctx,e);case`Case`:return tb(this.ctx,e);case`Subshell`:return this.executeSubshell(e,t);case`Group`:return this.executeGroup(e,t);case`FunctionDef`:return A_(this.ctx,e);case`ArithmeticCommand`:return this.executeArithmeticCommand(e);case`ConditionalCommand`:return this.executeConditionalCommand(e);default:return vg}}async executeSimpleCommand(e,t){try{return await this.executeSimpleCommandInner(e,t)}catch(e){if(e instanceof Je)return Q(e.stderr);throw e}}async executeSimpleCommandInner(e,t){if(e.line!==void 0&&(this.ctx.state.currentLine=e.line),this.ctx.state.shoptOptions.expand_aliases&&e.name){let t=e,n=100;for(;n>0;){let e=this.expandAlias(t);if(e===t)break;t=e,n--}this.aliasExpansionStack.clear(),t!==e&&(e=t)}this.ctx.state.expansionStderr=``;let n=await db(this.ctx,e);if(n.error)return n.error;let r=n.tempAssignments,i=n.xtraceOutput;if(!e.name){if(e.redirections.length>0){let t=await O_(this.ctx,e.redirections);if(t)return t;let n=$(``,i,0);return k_(this.ctx,n,e.redirections)}this.ctx.state.lastArg=``;let t=(this.ctx.state.expansionStderr||``)+i;return this.ctx.state.expansionStderr=``,$(``,t,this.ctx.state.lastExitCode)}let a=e.name&&nb(e.name,[`local`,`declare`,`typeset`,`export`,`readonly`]),o=Array.from(r.keys());if(o.length>0&&!a){this.ctx.state.tempExportedVars=this.ctx.state.tempExportedVars||new Set;for(let e of o)this.ctx.state.tempExportedVars.add(e)}let s=await D_(this.ctx,e.redirections);if(s){for(let[e,t]of r)t===void 0?this.ctx.state.env.delete(e):this.ctx.state.env.set(e,t);return s}let c=-1;for(let n of e.redirections){if((n.operator===`<<`||n.operator===`<<-`)&&n.target.type===`HereDoc`){let e=n.target,r=await F(this.ctx,e.content);e.stripTabs&&(r=r.split(`
|
|
877
878
|
`).map(e=>e.replace(/^\t+/,``)).join(`
|
|
878
|
-
`));let i=n.fd??0;i===0?t=r:(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),
|
|
879
|
+
`));let i=n.fd??0;i===0?t=r:(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),Sg(this.ctx),this.ctx.state.fileDescriptors.set(i,r));continue}if(n.operator===`<<<`&&n.target.type===`Word`){t=`${await F(this.ctx,n.target)}
|
|
879
880
|
`;continue}if(n.operator===`<`&&n.target.type===`Word`)try{let e=await F(this.ctx,n.target),r=this.ctx.fs.resolvePath(this.ctx.state.cwd,e);t=await this.ctx.fs.readFile(r)}catch{let e=await F(this.ctx,n.target);for(let[e,t]of r)t===void 0?this.ctx.state.env.delete(e):this.ctx.state.env.set(e,t);return Q(`bash: ${e}: No such file or directory
|
|
880
|
-
`)}if(n.operator===`<&`&&n.target.type===`Word`){let e=await F(this.ctx,n.target),r=Number.parseInt(e,10);if(!Number.isNaN(r)&&this.ctx.state.fileDescriptors){let e=this.ctx.state.fileDescriptors.get(r);if(e!==void 0)if(e.startsWith(`__rw__:`)){let n=
|
|
881
|
-
`,127)}if(l===`exec`&&(u.length===0||u[0]===`--`)){for(let t of e.redirections){if(t.target.type===`HereDoc`||t.fdVariable)continue;let e=await F(this.ctx,t.target),n=t.fd??(t.operator===`<`||t.operator===`<>`?0:1);switch(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),t.operator){case`>`:case`>|`:{let t=this.ctx.fs.resolvePath(this.ctx.state.cwd,e);await this.ctx.fs.writeFile(t,``,`utf8`),
|
|
882
|
-
`)}break}case`<>`:{let t=this.ctx.fs.resolvePath(this.ctx.state.cwd,e);try{let e=await this.ctx.fs.readFile(t);
|
|
883
|
-
`);return
|
|
884
|
-
`,n);return
|
|
881
|
+
`)}if(n.operator===`<&`&&n.target.type===`Word`){let e=await F(this.ctx,n.target),r=Number.parseInt(e,10);if(!Number.isNaN(r)&&this.ctx.state.fileDescriptors){let e=this.ctx.state.fileDescriptors.get(r);if(e!==void 0)if(e.startsWith(`__rw__:`)){let n=rb(e);n&&(t=n.content.slice(n.position),c=r)}else e.startsWith(`__file__:`)||e.startsWith(`__file_append__:`)||(t=e)}}}let l=await F(this.ctx,e.name),u=[],d=[];if(nb(e.name,[`local`,`declare`,`typeset`,`export`,`readonly`])&&(l===`local`||l===`declare`||l===`typeset`||l===`export`||l===`readonly`))for(let t of e.args){let e=await mg(this.ctx,t);if(e)u.push(e),d.push(!0);else{let e=await hg(this.ctx,t);if(e!==null)u.push(e),d.push(!0);else{let e=await qt(this.ctx,t);for(let t of e.values)u.push(t),d.push(e.quoted)}}}else for(let t of e.args){let e=await qt(this.ctx,t);for(let t of e.values)u.push(t),d.push(e.quoted)}if(!l){if(e.name.parts.every(e=>e.type===`CommandSubstitution`||e.type===`ParameterExpansion`||e.type===`ArithmeticExpansion`)){if(u.length>0){let e=u.shift();return d.shift(),await this.runCommand(e,u,d,t,!1,!1,c)}return $(``,``,this.ctx.state.lastExitCode)}return Q(`bash: : command not found
|
|
882
|
+
`,127)}if(l===`exec`&&(u.length===0||u[0]===`--`)){for(let t of e.redirections){if(t.target.type===`HereDoc`||t.fdVariable)continue;let e=await F(this.ctx,t.target),n=t.fd??(t.operator===`<`||t.operator===`<>`?0:1);switch(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),t.operator){case`>`:case`>|`:{let t=this.ctx.fs.resolvePath(this.ctx.state.cwd,e);await this.ctx.fs.writeFile(t,``,`utf8`),Sg(this.ctx),this.ctx.state.fileDescriptors.set(n,`__file__:${t}`);break}case`>>`:{let t=this.ctx.fs.resolvePath(this.ctx.state.cwd,e);Sg(this.ctx),this.ctx.state.fileDescriptors.set(n,`__file_append__:${t}`);break}case`<`:{let t=this.ctx.fs.resolvePath(this.ctx.state.cwd,e);try{let e=await this.ctx.fs.readFile(t);Sg(this.ctx),this.ctx.state.fileDescriptors.set(n,e)}catch{return Q(`bash: ${e}: No such file or directory
|
|
883
|
+
`)}break}case`<>`:{let t=this.ctx.fs.resolvePath(this.ctx.state.cwd,e);try{let e=await this.ctx.fs.readFile(t);Sg(this.ctx),this.ctx.state.fileDescriptors.set(n,`__rw__:${t.length}:${t}:0:${e}`)}catch{await this.ctx.fs.writeFile(t,``,`utf8`),Sg(this.ctx),this.ctx.state.fileDescriptors.set(n,`__rw__:${t.length}:${t}:0:`)}break}case`>&`:if(e===`-`)this.ctx.state.fileDescriptors.delete(n);else if(e.endsWith(`-`)){let t=e.slice(0,-1),r=Number.parseInt(t,10);if(!Number.isNaN(r)){let e=this.ctx.state.fileDescriptors.get(r);e===void 0?this.ctx.state.fileDescriptors.set(n,`__dupout__:${r}`):this.ctx.state.fileDescriptors.set(n,e),this.ctx.state.fileDescriptors.delete(r)}}else{let t=Number.parseInt(e,10);Number.isNaN(t)||(Sg(this.ctx),this.ctx.state.fileDescriptors.set(n,`__dupout__:${t}`))}break;case`<&`:if(e===`-`)this.ctx.state.fileDescriptors.delete(n);else if(e.endsWith(`-`)){let t=e.slice(0,-1),r=Number.parseInt(t,10);if(!Number.isNaN(r)){let e=this.ctx.state.fileDescriptors.get(r);e===void 0?this.ctx.state.fileDescriptors.set(n,`__dupin__:${r}`):this.ctx.state.fileDescriptors.set(n,e),this.ctx.state.fileDescriptors.delete(r)}}else{let t=Number.parseInt(e,10);Number.isNaN(t)||(Sg(this.ctx),this.ctx.state.fileDescriptors.set(n,`__dupin__:${t}`))}break}}for(let[e,t]of r)t===void 0?this.ctx.state.env.delete(e):this.ctx.state.env.set(e,t);if(this.ctx.state.tempExportedVars)for(let e of r.keys())this.ctx.state.tempExportedVars.delete(e);return vg}if(this.ctx.state.extraArgs){u.push(...this.ctx.state.extraArgs);for(let e=0;e<this.ctx.state.extraArgs.length;e++)d.push(!0);this.ctx.state.extraArgs=void 0}let f=await cb(this.ctx,l,u);r.size>0&&(this.ctx.state.tempEnvBindings=this.ctx.state.tempEnvBindings||[],this.ctx.state.tempEnvBindings.push(new Map(r)));let p,m=null;try{p=await this.runCommand(l,u,d,t,!1,!1,c)}catch(e){if(e instanceof qe||e instanceof it)m=e,p=vg;else throw e}let h=i+f;if(h&&(p={...p,stderr:h+p.stderr}),p=await k_(this.ctx,p,e.redirections),m)throw m;if(u.length>0){let e=u[u.length-1];if((l===`declare`||l===`local`||l===`typeset`)&&/^[a-zA-Z_][a-zA-Z0-9_]*=\(/.test(e)){let t=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);t&&(e=t[1])}this.ctx.state.lastArg=e}else this.ctx.state.lastArg=l;let g=y_(l)&&l!==`unset`&&l!==`eval`;if(!this.ctx.state.options.posix||!g)for(let[e,t]of r)this.ctx.state.fullyUnsetLocals?.has(e)||(t===void 0?this.ctx.state.env.delete(e):this.ctx.state.env.set(e,t));if(this.ctx.state.tempExportedVars)for(let e of r.keys())this.ctx.state.tempExportedVars.delete(e);return r.size>0&&this.ctx.state.tempEnvBindings&&this.ctx.state.tempEnvBindings.pop(),this.ctx.state.expansionStderr&&(p={...p,stderr:this.ctx.state.expansionStderr+p.stderr},this.ctx.state.expansionStderr=``),p}async runCommand(e,t,n,r,i=!1,a=!1,o=-1){let s={ctx:this.ctx,runCommand:(e,t,n,r,i,a,o)=>this.runCommand(e,t,n,r,i,a,o),buildExportedEnv:()=>this.buildExportedEnv(),executeUserScript:(e,t,n)=>this.executeUserScript(e,t,n)},c=await Uy(s,e,t,n,r,i,a,o);return c===null?Ky(s,e,t,r,a):c}aliasExpansionStack=new Set;expandAlias(e){return dg(this.ctx.state,e,this.aliasExpansionStack)}async findCommandInPath(e){return Ay(this.ctx,e)}async executeSubshell(e,t=``){return Sb(this.ctx,e,t,e=>this.executeStatement(e))}async executeGroup(e,t=``){return Cb(this.ctx,e,t,e=>this.executeStatement(e))}async executeArithmeticCommand(e){e.line!==void 0&&(this.ctx.state.currentLine=e.line);let t=await O_(this.ctx,e.redirections);if(t)return t;try{let t=bg(await Rt(this.ctx,e.expression.expression)!==0);return this.ctx.state.expansionStderr&&(t={...t,stderr:this.ctx.state.expansionStderr+t.stderr},this.ctx.state.expansionStderr=``),k_(this.ctx,t,e.redirections)}catch(t){let n=Q(`bash: arithmetic expression: ${t.message}
|
|
884
|
+
`);return k_(this.ctx,n,e.redirections)}}async executeConditionalCommand(e){e.line!==void 0&&(this.ctx.state.currentLine=e.line);let t=await O_(this.ctx,e.redirections);if(t)return t;try{let t=bg(await Vg(this.ctx,e.expression));return this.ctx.state.expansionStderr&&(t={...t,stderr:this.ctx.state.expansionStderr+t.stderr},this.ctx.state.expansionStderr=``),k_(this.ctx,t,e.redirections)}catch(t){let n=t instanceof Xe?1:2,r=Q(`bash: conditional expression: ${t.message}
|
|
885
|
+
`,n);return k_(this.ctx,r,e.redirections)}}},Eb={maxCallDepth:100,maxCommandCount:1e4,maxLoopIterations:1e4,maxAwkIterations:1e4,maxSedIterations:1e4,maxJqIterations:1e4,maxSqliteTimeoutMs:5e3,maxPythonTimeoutMs:1e4,maxJsTimeoutMs:1e4,maxGlobOperations:1e5,maxStringLength:10485760,maxArrayElements:1e5,maxHeredocSize:10485760,maxSubstitutionDepth:50,maxBraceExpansionResults:1e4,maxOutputSize:10485760,maxFileDescriptors:1024,maxSourceDepth:100};function Db(e){return e?{maxCallDepth:e.maxCallDepth??Eb.maxCallDepth,maxCommandCount:e.maxCommandCount??Eb.maxCommandCount,maxLoopIterations:e.maxLoopIterations??Eb.maxLoopIterations,maxAwkIterations:e.maxAwkIterations??Eb.maxAwkIterations,maxSedIterations:e.maxSedIterations??Eb.maxSedIterations,maxJqIterations:e.maxJqIterations??Eb.maxJqIterations,maxSqliteTimeoutMs:e.maxSqliteTimeoutMs??Eb.maxSqliteTimeoutMs,maxPythonTimeoutMs:e.maxPythonTimeoutMs??Eb.maxPythonTimeoutMs,maxJsTimeoutMs:e.maxJsTimeoutMs??Eb.maxJsTimeoutMs,maxGlobOperations:e.maxGlobOperations??Eb.maxGlobOperations,maxStringLength:e.maxStringLength??Eb.maxStringLength,maxArrayElements:e.maxArrayElements??Eb.maxArrayElements,maxHeredocSize:e.maxHeredocSize??Eb.maxHeredocSize,maxSubstitutionDepth:e.maxSubstitutionDepth??Eb.maxSubstitutionDepth,maxBraceExpansionResults:e.maxBraceExpansionResults??Eb.maxBraceExpansionResults,maxOutputSize:e.maxOutputSize??Eb.maxOutputSize,maxFileDescriptors:e.maxFileDescriptors??Eb.maxFileDescriptors,maxSourceDepth:e.maxSourceDepth??Eb.maxSourceDepth}:{...Eb}}function Ob(e){try{let t=new URL(e);return{origin:t.origin,pathname:t.pathname,href:t.href}}catch{return null}}function kb(e){let t=Ob(e);return t?{origin:t.origin,pathPrefix:t.pathname}:null}function Ab(e){if(e.includes(`\\`))return!0;let t=e.toLowerCase();return t.includes(`%2f`)||t.includes(`%5c`)}function jb(e,t){return t===`/`||t===``?!0:t.endsWith(`/`)?e.startsWith(t):e===t||e.startsWith(`${t}/`)}function Mb(e,t){let n=Ob(e);if(!n)return!1;let r=kb(t);return!r||n.origin!==r.origin||r.pathPrefix!==`/`&&r.pathPrefix!==``&&Ab(n.pathname)?!1:jb(n.pathname,r.pathPrefix)}function Nb(e){return typeof e==`string`?e:e.url}function Pb(e,t){return!t||t.length===0?!1:t.some(t=>Mb(e,Nb(t)))}function Fb(e){let t=Ib(e);if(t===`localhost`||t.endsWith(`.localhost`))return!0;let n=Rb(t);if(n)return Bb(n);let r=zb(t);return r?Vb(r):!1}function Ib(e){let t=e.trim().toLowerCase();return t.startsWith(`[`)&&t.endsWith(`]`)?t.slice(1,-1):t}function Lb(e){if(!e)return null;let t=10,n=e;if(n.startsWith(`0x`)||n.startsWith(`0X`)?(t=16,n=n.slice(2)):n.length>1&&n.startsWith(`0`)&&(t=8),!n||t===16&&!/^[0-9a-fA-F]+$/.test(n)||t===10&&!/^\d+$/.test(n)||t===8&&!/^[0-7]+$/.test(n))return null;let r=Number.parseInt(n,t);return!Number.isFinite(r)||r<0?null:r}function Rb(e){let t=e.split(`.`);if(t.length===0||t.length>4)return null;let n=t.map(e=>Lb(e));if(n.some(e=>e===null))return null;let r=n;if(t.length===1){let e=r[0];return e>4294967295?null:[e>>>24&255,e>>>16&255,e>>>8&255,e&255]}if(t.length===2){let[e,t]=r;return e>255||t>16777215?null:[e,t>>>16&255,t>>>8&255,t&255]}if(t.length===3){let[e,t,n]=r;return e>255||t>255||n>65535?null:[e,t,n>>>8&255,n&255]}let[i,a,o,s]=r;return i>255||a>255||o>255||s>255?null:[i,a,o,s]}function zb(e){let t=e,n=null;if(t.includes(`.`)){let e=t.lastIndexOf(`:`);if(e<0)return null;let r=Rb(t.slice(e+1));if(!r)return null;n=r,t=t.slice(0,e)}let r=t.includes(`::`)?t.split(`::`).length-1:0;if(r>1)return null;let[i,a]=t.split(`::`),o=i?i.split(`:`).filter(Boolean):[],s=a?a.split(`:`).filter(Boolean):[],c=e=>/^[0-9a-f]{1,4}$/i.test(e)?Number.parseInt(e,16):null,l=o.map(c),u=s.map(c);if(l.some(e=>e===null)||u.some(e=>e===null))return null;let d=n?2:0,f=l.length+u.length+d,p=0;if(r===1){if(p=8-f,p<0)return null}else if(f!==8)return null;let m=[...l,...Array(p).fill(0),...u];return n&&(m.push(n[0]<<8|n[1]),m.push(n[2]<<8|n[3])),m.length===8?m:null}function Bb(e){let[t,n]=e;return t===127||t===10||t===172&&n>=16&&n<=31||t===192&&n===168||t===169&&n===254||t===0||t===100&&n>=64&&n<=127||t===198&&(n===18||n===19)||t===192&&n===0&&e[2]===0||t===192&&n===0&&e[2]===2||t===198&&n===51&&e[2]===100||t===203&&n===0&&e[2]===113||t>=240}function Vb(e){return e.every(e=>e===0)||e.slice(0,7).every(e=>e===0)&&e[7]===1||(e[0]&65472)==65152||(e[0]&65024)==64512?!0:e[0]===0&&e[1]===0&&e[2]===0&&e[3]===0&&e[4]===0&&e[5]===65535?Bb([e[6]>>>8&255,e[6]&255,e[7]>>>8&255,e[7]&255]):e[0]===8193&&e[1]===3512?!0:e[0]===100&&e[1]===65435&&e[2]===0&&e[3]===0&&e[4]===0&&e[5]===0?Bb([e[6]>>>8&255,e[6]&255,e[7]>>>8&255,e[7]&255]):e[0]===100&&e[1]===65435&&e[2]===1?!0:e[0]===8194?Bb([e[1]>>>8&255,e[1]&255,e[2]>>>8&255,e[2]&255]):!1}function Hb(e){let t=[];for(let n of e){if(typeof n!=`string`&&(typeof n!=`object`||!n||!(`url`in n)||typeof n.url!=`string`)){t.push(`Invalid allow-list entry: must be a string URL or an object with a "url" string property`);continue}let e=Nb(n);if(!Ob(e)){t.push(`Invalid URL in allow-list: "${e}" - must be a valid URL with scheme and host (e.g., "https://example.com")`);continue}let r=new URL(e);if(r.protocol!==`http:`&&r.protocol!==`https:`){t.push(`Only http and https URLs are allowed in allow-list: "${e}"`);continue}if(!r.hostname){t.push(`Allow-list entry must include a hostname: "${e}"`);continue}if(r.pathname!==`/`&&r.pathname!==``&&Ab(r.pathname)){t.push(`Allow-list entry contains ambiguous path separators: "${e}"`);continue}(r.search||r.hash)&&t.push(`Query strings and fragments are ignored in allow-list entries: "${e}"`)}return t}var Ub=class extends Error{constructor(e,t){super(`Network access denied: ${t??`URL not in allow-list`}: ${e}`),this.name=`NetworkAccessDeniedError`}},Wb=class extends Error{constructor(e){super(`Too many redirects (max: ${e})`),this.name=`TooManyRedirectsError`}},Gb=class extends Error{constructor(e){super(`Redirect target not in allow-list: ${e}`),this.name=`RedirectNotAllowedError`}},Kb=class extends Error{constructor(e,t){super(`HTTP method '${e}' not allowed. Allowed methods: ${t.join(`, `)}`),this.name=`MethodNotAllowedError`}},qb=class extends Error{constructor(e){super(`Response body too large (max: ${e} bytes)`),this.name=`ResponseTooLargeError`}};function Jb(e){return new Promise((t,n)=>{ar(e,{all:!0},(e,r)=>{e?n(e):t(r)})})}var Yb=20,Xb=3e4,Zb=10485760,Qb=[`GET`,`HEAD`],$b=new Set([`GET`,`HEAD`,`OPTIONS`]),ex=new Set([301,302,303,307,308]);function tx(e){let t=e.allowedUrlPrefixes??[];if(!e.dangerouslyAllowFullInternetAccess){let e=Hb(t);if(e.length>0)throw Error(`Invalid network allow-list:
|
|
885
886
|
${e.join(`
|
|
886
|
-
`)}`)}let n=[];for(let e of t)typeof e==`object`&&e.transform&&e.transform.length>0&&n.push(e);function r(e){if(n.length===0)return null;let t=null;for(let r of n)if(
|
|
887
|
-
`)}function
|
|
888
|
-
${i}${n.delimiter}`}return e.operator===`<<<`?`${t}<<< ${
|
|
889
|
-
`)}function
|
|
890
|
-
${
|
|
891
|
-
${
|
|
887
|
+
`)}`)}let n=[];for(let e of t)typeof e==`object`&&e.transform&&e.transform.length>0&&n.push(e);function r(e){if(n.length===0)return null;let t=null;for(let r of n)if(Mb(e,r.url)&&r.transform){t||=new Headers;for(let e of r.transform)for(let[n,r]of Object.entries(e.headers))t.set(n,r)}return t}let i=e.maxRedirects??Yb,a=e.timeoutMs??Xb,o=e.maxResponseSize??Zb,s=e.dangerouslyAllowFullInternetAccess?[`GET`,`HEAD`,`POST`,`PUT`,`DELETE`,`PATCH`,`OPTIONS`]:e.allowedMethods??Qb,c=e.denyPrivateRanges??(typeof process<`u`&&process.env?.NODE_ENV===`production`),l=e._dnsResolve??Jb;async function u(n){if(!e.dangerouslyAllowFullInternetAccess&&!Pb(n,t))throw new Ub(n);if(c)try{let e=new URL(n);if(Fb(e.hostname))throw new Ub(n,`private/loopback IP address blocked`);let t=e.hostname;if(/[a-zA-Z]/.test(t))try{let e=await l(t);for(let{address:t}of e)if(Fb(t))throw new Ub(n,`hostname resolves to private/loopback IP address`)}catch(e){if(e instanceof Ub)throw e;let t=e?.code;if(!(t===`ENOTFOUND`||t===`ENODATA`))throw new Ub(n,`DNS resolution failed for private IP check`)}}catch(e){if(e instanceof Ub)throw e}}function d(t){if(e.dangerouslyAllowFullInternetAccess)return;let n=t.toUpperCase();if(!s.includes(n))throw new Kb(n,s)}async function f(e,t={}){let n=t.method?.toUpperCase()??`GET`;await u(e),d(n);let s=e,c=0,l=t.followRedirects??!0,f=t.timeoutMs===void 0?a:Math.min(t.timeoutMs,a);for(;;){let e=new AbortController,a=fn(()=>e.abort(),f);try{let a=await un.runTrustedAsync(()=>{let i=r(s),a={method:n,headers:nx(t.headers,i),signal:e.signal,redirect:`manual`};return t.body&&!$b.has(n)&&(a.body=t.body),fetch(s,a)});if(ex.has(a.status)&&l){let e=a.headers.get(`location`);if(!e)return await rx(a,s,o);let t=new URL(e,s).href;try{await u(t)}catch{throw new Gb(t)}if(c++,c>i)throw new Wb(i);s=t;continue}return await rx(a,s,o)}finally{dn(a)}}}return f}function nx(e,t){if(!e&&!t)return;if(!t)return e;let n=(e instanceof Headers,new Headers(e));for(let[e,r]of t)n.set(e,r);return n}async function rx(e,t,n){let r=Object.create(null);if(e.headers.forEach((e,t)=>{r[t.toLowerCase()]=e}),n>0){let t=e.headers.get(`content-length`);if(t){let e=parseInt(t,10);if(!Number.isNaN(e)&&e>n)throw new qb(n)}}let i;if(n>0&&e.body){let t=e.body.getReader(),r=[],a=0;for(;;){let{done:e,value:i}=await t.read();if(e)break;if(i){if(a+=i.byteLength,a>n)throw t.cancel(),new qb(n);r.push(i)}}i=new Uint8Array(a);let o=0;for(let e of r)i.set(e,o),o+=e.byteLength}else{let t=await e.arrayBuffer();if(n>0&&t.byteLength>n)throw new qb(n);i=new Uint8Array(t)}return{status:e.status,statusText:e.statusText,headers:r,body:i,url:t}}function ix(e){return ax(e)}function ax(e){return e.statements.map(ox).join(`
|
|
888
|
+
`)}function ox(e){let t=[];for(let n=0;n<e.pipelines.length;n++)t.push(sx(e.pipelines[n])),n<e.operators.length&&t.push(e.operators[n]);let n=t.join(` `);return e.background&&(n+=` &`),n}function sx(e){let t=[];e.timed&&t.push(e.timePosix?`time -p`:`time`),e.negated&&t.push(`!`);let n=[];for(let t=0;t<e.commands.length;t++)if(n.push(cx(e.commands[t])),t<e.commands.length-1){let r=e.pipeStderr?.[t];n.push(r?`|&`:`|`)}return(t.length>0?`${t.join(` `)} `:``)+n.join(` `)}function cx(e){switch(e.type){case`SimpleCommand`:return lx(e);case`If`:return Ex(e);case`For`:return Dx(e);case`CStyleFor`:return Ox(e);case`While`:return kx(e);case`Until`:return Ax(e);case`Case`:return jx(e);case`Subshell`:return Nx(e);case`Group`:return Px(e);case`ArithmeticCommand`:return Fx(e);case`ConditionalCommand`:return Ix(e);case`FunctionDef`:return Lx(e);default:throw Error(`Unsupported command type: ${e.type}`)}}function lx(e){let t=[];for(let n of e.assignments)t.push(ux(n));e.name&&t.push(dx(e.name));for(let n of e.args)t.push(dx(n));for(let n of e.redirections)t.push(Cx(n));return t.join(` `)}function ux(e){let t=e.append?`+=`:`=`;if(e.array){let n=e.array.map(dx).join(` `);return`${e.name}${t}(${n})`}return e.value?`${e.name}${t}${dx(e.value)}`:`${e.name}${t}`}function dx(e){return e.parts.map(e=>px(e,!1)).join(``)}function fx(e){return e.parts.map(e=>px(e,!0)).join(``)}function px(e,t){switch(e.type){case`Literal`:return t?hx(e.value):mx(e.value);case`SingleQuoted`:return`'${e.value}'`;case`DoubleQuoted`:return`"${e.parts.map(e=>px(e,!0)).join(``)}"`;case`Escaped`:return`\\${e.value}`;case`ParameterExpansion`:return vx(e);case`CommandSubstitution`:return e.legacy?`\`${ax(e.body)}\``:`$(${ax(e.body)})`;case`ArithmeticExpansion`:return`$((${Rx(e.expression.expression)}))`;case`ProcessSubstitution`:return e.direction===`input`?`<(${ax(e.body)})`:`>(${ax(e.body)})`;case`BraceExpansion`:return xx(e);case`TildeExpansion`:return e.user===null?`~`:`~${e.user}`;case`Glob`:return e.pattern;default:throw Error(`Unsupported word part type: ${e.type}`)}}function mx(e){return e.replace(/[\s\\'"`!|&;()<>{}[\]*?~#]/g,`\\$&`)}function hx(e){return e.replace(/[$`"\\]/g,`\\$&`)}function gx(e,t){return e.parts.map(e=>_x(e,t)).join(``)}function _x(e,t){switch(e.type){case`Literal`:return t?e.value:e.value.replace(/[$`]/g,`\\$&`);case`Escaped`:return`\\${e.value}`;case`ParameterExpansion`:return vx(e);case`CommandSubstitution`:return e.legacy?`\`${ax(e.body)}\``:`$(${ax(e.body)})`;case`ArithmeticExpansion`:return`$((${Rx(e.expression.expression)}))`;default:return px(e,!1)}}function vx(e){return e.operation?`\${${bx(e.parameter,e.operation)}}`:yx(e.parameter)?`\${${e.parameter}}`:`$${e.parameter}`}function yx(e){return!(/^[?#@*$!\-0-9]$/.test(e)||/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))}function bx(e,t){switch(t.type){case`Length`:return`#${e}`;case`LengthSliceError`:return`#${e}:`;case`BadSubstitution`:return t.text;case`DefaultValue`:return`${e}${t.checkEmpty?`:`:``}-${fx(t.word)}`;case`AssignDefault`:return`${e}${t.checkEmpty?`:`:``}=${fx(t.word)}`;case`ErrorIfUnset`:return`${e}${t.checkEmpty?`:`:``}?${t.word?fx(t.word):``}`;case`UseAlternative`:return`${e}${t.checkEmpty?`:`:``}+${fx(t.word)}`;case`Substring`:{let n=Rx(t.offset.expression);return t.length?`${e}:${n}:${Rx(t.length.expression)}`:`${e}:${n}`}case`PatternRemoval`:{let n=t.side===`prefix`?`#`:`%`;return`${e}${t.greedy?`${n}${n}`:n}${fx(t.pattern)}`}case`PatternReplacement`:{let n=`/`;t.all?n=`//`:t.anchor===`start`?n=`/#`:t.anchor===`end`&&(n=`/%`);let r=t.replacement?`/${fx(t.replacement)}`:``;return`${e}${n}${fx(t.pattern)}${r}`}case`CaseModification`:{let n=t.direction===`upper`?`^`:`,`;return`${e}${t.all?`${n}${n}`:n}${t.pattern?fx(t.pattern):``}`}case`Transform`:return`${e}@${t.operator}`;case`Indirection`:return t.innerOp?`!${bx(e,t.innerOp)}`:`!${e}`;case`ArrayKeys`:return`!${t.array}[${t.star?`*`:`@`}]`;case`VarNamePrefix`:return`!${t.prefix}${t.star?`*`:`@`}`;default:throw Error(`Unsupported parameter operation type: ${t.type}`)}}function xx(e){return`{${e.items.map(Sx).join(`,`)}}`}function Sx(e){if(e.type===`Word`)return dx(e.word);let t=e.startStr??String(e.start),n=e.endStr??String(e.end);return e.step===void 0?`${t}..${n}`:`${t}..${n}..${e.step}`}function Cx(e){let t=e.fdVariable?`{${e.fdVariable}}`:e.fd===null?``:String(e.fd);if(e.operator===`<<`||e.operator===`<<-`){let n=e.target,r=n.quoted?`'${n.delimiter}'`:n.delimiter,i=gx(n.content,n.quoted);return`${t}${e.operator}${r}
|
|
889
|
+
${i}${n.delimiter}`}return e.operator===`<<<`?`${t}<<< ${dx(e.target)}`:e.operator===`&>`||e.operator===`&>>`?`${e.operator} ${dx(e.target)}`:`${t}${e.operator} ${dx(e.target)}`}function wx(e){return e.length===0?``:` ${e.map(Cx).join(` `)}`}function Tx(e){return e.map(ox).join(`
|
|
890
|
+
`)}function Ex(e){let t=[];for(let n=0;n<e.clauses.length;n++){let r=e.clauses[n],i=n===0?`if`:`elif`;t.push(`${i} ${Tx(r.condition)}; then
|
|
891
|
+
${Tx(r.body)}`)}return e.elseBody&&t.push(`else
|
|
892
|
+
${Tx(e.elseBody)}`),`${t.join(`
|
|
892
893
|
`)}
|
|
893
|
-
fi${
|
|
894
|
-
${
|
|
895
|
-
done${
|
|
896
|
-
${
|
|
897
|
-
done${
|
|
898
|
-
${
|
|
899
|
-
done${
|
|
900
|
-
${
|
|
901
|
-
done${
|
|
902
|
-
`);return`case ${
|
|
894
|
+
fi${wx(e.redirections)}`}function Dx(e){let t;if(e.words===null)t=`for ${e.variable}`;else{let n=e.words.map(dx).join(` `);t=`for ${e.variable} in ${n}`}return`${t}; do
|
|
895
|
+
${Tx(e.body)}
|
|
896
|
+
done${wx(e.redirections)}`}function Ox(e){return`for ((${e.init?Rx(e.init.expression):``}; ${e.condition?Rx(e.condition.expression):``}; ${e.update?Rx(e.update.expression):``})); do
|
|
897
|
+
${Tx(e.body)}
|
|
898
|
+
done${wx(e.redirections)}`}function kx(e){return`while ${Tx(e.condition)}; do
|
|
899
|
+
${Tx(e.body)}
|
|
900
|
+
done${wx(e.redirections)}`}function Ax(e){return`until ${Tx(e.condition)}; do
|
|
901
|
+
${Tx(e.body)}
|
|
902
|
+
done${wx(e.redirections)}`}function jx(e){let t=e.items.map(Mx).join(`
|
|
903
|
+
`);return`case ${dx(e.word)} in
|
|
903
904
|
${t}
|
|
904
|
-
esac${
|
|
905
|
+
esac${wx(e.redirections)}`}function Mx(e){let t=e.patterns.map(dx).join(` | `),n=Tx(e.body);return n?`${t})
|
|
905
906
|
${n}
|
|
906
907
|
${e.terminator}`:`${t})
|
|
907
|
-
${e.terminator}`}function
|
|
908
|
-
`],[`OSTYPE`,`linux-gnu`],[`MACHTYPE`,`x86_64-pc-linux-gnu`],[`HOSTTYPE`,`x86_64`],[`HOSTNAME`,`localhost`],[`PWD`,n],[`OLDPWD`,n],[`OPTIND`,`1`],...Object.entries(e.env??{})]);if(this.limits=
|
|
908
|
+
${e.terminator}`}function Nx(e){return`(${Tx(e.body)})${wx(e.redirections)}`}function Px(e){return`{ ${Tx(e.body)}; }${wx(e.redirections)}`}function Fx(e){return`((${Rx(e.expression.expression)}))${wx(e.redirections)}`}function Ix(e){return`[[ ${zx(e.expression)} ]]${wx(e.redirections)}`}function Lx(e){let t=cx(e.body);return`${e.name}() ${t}${wx(e.redirections)}`}function Rx(e){switch(e.type){case`ArithNumber`:return String(e.value);case`ArithVariable`:return e.hasDollarPrefix?`$${e.name}`:e.name;case`ArithSpecialVar`:return`$${e.name}`;case`ArithBinary`:return`${Rx(e.left)} ${e.operator} ${Rx(e.right)}`;case`ArithUnary`:return e.prefix?`${e.operator}${Rx(e.operand)}`:`${Rx(e.operand)}${e.operator}`;case`ArithTernary`:return`${Rx(e.condition)} ? ${Rx(e.consequent)} : ${Rx(e.alternate)}`;case`ArithAssignment`:return`${e.subscript?`${e.variable}[${Rx(e.subscript)}]`:e.stringKey===void 0?e.variable:`${e.variable}[${e.stringKey}]`} ${e.operator} ${Rx(e.value)}`;case`ArithDynamicAssignment`:return`${e.subscript?`${Rx(e.target)}[${Rx(e.subscript)}]`:Rx(e.target)} ${e.operator} ${Rx(e.value)}`;case`ArithDynamicElement`:return`${Rx(e.nameExpr)}[${Rx(e.subscript)}]`;case`ArithGroup`:return`(${Rx(e.expression)})`;case`ArithNested`:return`$((${Rx(e.expression)}))`;case`ArithCommandSubst`:return`$(${e.command})`;case`ArithBracedExpansion`:return`\${${e.content}}`;case`ArithArrayElement`:return e.stringKey===void 0?e.index?`${e.array}[${Rx(e.index)}]`:e.array:`${e.array}[${e.stringKey}]`;case`ArithDynamicBase`:return`\${${e.baseExpr}}#${e.value}`;case`ArithDynamicNumber`:return`\${${e.prefix}}${e.suffix}`;case`ArithConcat`:return e.parts.map(Rx).join(``);case`ArithDoubleSubscript`:return`${e.array}[${Rx(e.index)}]`;case`ArithNumberSubscript`:return`${e.number}[${e.errorToken}]`;case`ArithSyntaxError`:return e.errorToken;case`ArithSingleQuote`:return`'${e.content}'`;default:throw Error(`Unsupported arithmetic expression type: ${e.type}`)}}function zx(e){switch(e.type){case`CondBinary`:return`${dx(e.left)} ${e.operator} ${dx(e.right)}`;case`CondUnary`:return`${e.operator} ${dx(e.operand)}`;case`CondNot`:return`! ${zx(e.operand)}`;case`CondAnd`:return`${zx(e.left)} && ${zx(e.right)}`;case`CondOr`:return`${zx(e.left)} || ${zx(e.right)}`;case`CondGroup`:return`( ${zx(e.expression)} )`;case`CondWord`:return dx(e.word);default:throw Error(`Unsupported conditional expression type: ${e.type}`)}}var Bx=class{fs;commands=new Map;useDefaultLayout=!1;limits;secureFetch;sleepFn;traceFn;logger;defenseInDepthConfig;coverageWriter;jsBootstrapCode;transformPlugins=[];state;constructor(e={}){let t=e.fs??new Jh(e.files);this.fs=t,this.useDefaultLayout=!e.cwd&&!e.files;let n=e.cwd||(this.useDefaultLayout?`/home/user`:`/`),r=new Map([[`HOME`,this.useDefaultLayout?`/home/user`:`/`],[`PATH`,`/usr/bin:/bin`],[`IFS`,`
|
|
909
|
+
`],[`OSTYPE`,`linux-gnu`],[`MACHTYPE`,`x86_64-pc-linux-gnu`],[`HOSTTYPE`,`x86_64`],[`HOSTNAME`,`localhost`],[`PWD`,n],[`OLDPWD`,n],[`OPTIND`,`1`],...Object.entries(e.env??{})]);if(this.limits=Db({...e.executionLimits,...e.maxCallDepth!==void 0&&{maxCallDepth:e.maxCallDepth},...e.maxCommandCount!==void 0&&{maxCommandCount:e.maxCommandCount},...e.maxLoopIterations!==void 0&&{maxLoopIterations:e.maxLoopIterations}}),e.fetch?this.secureFetch=e.fetch:e.network&&(this.secureFetch=tx(e.network)),this.sleepFn=e.sleep,this.traceFn=e.trace,this.logger=e.logger,this.defenseInDepthConfig=e.defenseInDepth??!0,this.coverageWriter=e.coverage,this.state={env:r,cwd:n,previousDir:`/home/user`,functions:new Map,localScopes:[],callDepth:0,sourceDepth:0,commandCount:0,lastExitCode:0,lastArg:``,startTime:Date.now(),lastBackgroundPid:0,virtualPid:e.processInfo?.pid??1,virtualPpid:e.processInfo?.ppid??0,virtualUid:e.processInfo?.uid??1e3,virtualGid:e.processInfo?.gid??1e3,bashPid:e.processInfo?.pid??1,nextVirtualPid:(e.processInfo?.pid??1)+1,currentLine:1,options:{errexit:!1,pipefail:!1,nounset:!1,xtrace:!1,verbose:!1,posix:!1,allexport:!1,noclobber:!1,noglob:!1,noexec:!1,vi:!1,emacs:!1},shoptOptions:{extglob:!1,dotglob:!1,nullglob:!1,failglob:!1,globstar:!1,globskipdots:!0,nocaseglob:!1,nocasematch:!1,expand_aliases:!1,lastpipe:!1,xpg_echo:!1},inCondition:!1,loopDepth:0,exportedVars:new Set([`HOME`,`PATH`,`PWD`,`OLDPWD`,...Object.keys(e.env||{})]),readonlyVars:new Set([`SHELLOPTS`,`BASHOPTS`]),hashTable:new Map},this.state.env.set(`SHELLOPTS`,ng(this.state.options)),this.state.env.set(`BASHOPTS`,ag(this.state.shoptOptions)),$h(t,this.useDefaultLayout,{pid:this.state.virtualPid,ppid:this.state.virtualPpid,uid:this.state.virtualUid,gid:this.state.virtualGid}),n!==`/`&&t instanceof Jh)try{t.mkdirSync(n,{recursive:!0})}catch{}for(let t of Bh(e.commands))this.registerCommand(t);if(e.fetch||e.network)for(let e of Vh())this.registerCommand(e);if(e.python)for(let e of Hh())this.registerCommand(e);if(e.javascript){for(let e of Uh())this.registerCommand(e);let t=typeof e.javascript==`object`?e.javascript:Object.create(null);t.bootstrap&&(this.jsBootstrapCode=t.bootstrap)}if(e.customCommands)for(let t of e.customCommands)Wh(t)?this.registerCommand(Gh(t)):this.registerCommand({...t,trusted:t.trusted??!0})}registerCommand(e){this.commands.set(e.name,e);let t=this.fs;if(typeof t.writeFileSync==`function`){let n=`#!/bin/bash
|
|
909
910
|
# Built-in command: ${e.name}
|
|
910
|
-
`;try{t.writeFileSync(`/bin/${e.name}`,n)}catch{}try{t.writeFileSync(`/usr/bin/${e.name}`,n)}catch{}}}logResult(e){return this.logger&&(e.stdout&&this.logger.debug(`stdout`,{output:e.stdout}),e.stderr&&this.logger.info(`stderr`,{output:e.stderr}),this.logger.info(`exit`,{exitCode:e.exitCode})),e.stdout=
|
|
911
|
-
`,exitCode:1,env:pn(this.state.env,t?.env)};if(!e.trim())return{stdout:``,stderr:``,exitCode:0,env:pn(this.state.env,t?.env)};this.logger?.info(`exec`,{command:e});let n=t?.cwd??this.state.cwd,r,i=n;if(t?.cwd)if(t.env&&`PWD`in t.env)r=t.env.PWD;else if(t?.env&&!(`PWD`in t.env))try{r=await this.fs.realpath(n),i=r}catch{r=n}else r=n;let a=t?.replaceEnv?new Map:new Map(this.state.env);if(t?.env)for(let[e,n]of Object.entries(t.env))a.set(e,n);r!==void 0&&a.set(`PWD`,r);let o={...this.state,env:a,cwd:i,functions:new Map(this.state.functions),localScopes:[...this.state.localScopes],options:{...this.state.options},hashTable:this.state.hashTable,groupStdin:t?.stdin,signal:t?.signal,extraArgs:t?.args},s=e;t?.rawScript||(s=
|
|
911
|
+
`;try{t.writeFileSync(`/bin/${e.name}`,n)}catch{}try{t.writeFileSync(`/usr/bin/${e.name}`,n)}catch{}}}logResult(e){return this.logger&&(e.stdout&&this.logger.debug(`stdout`,{output:e.stdout}),e.stderr&&this.logger.info(`stderr`,{output:e.stderr}),this.logger.info(`exit`,{exitCode:e.exitCode})),e.stdout=Ux(e.stdout),e.stderr=Ux(e.stderr),e}async exec(e,t){if(this.state.callDepth===0&&(this.state.commandCount=0),this.state.commandCount++,this.state.commandCount>this.limits.maxCommandCount)return{stdout:``,stderr:`bash: maximum command count (${this.limits.maxCommandCount}) exceeded (possible infinite loop). Increase with executionLimits.maxCommandCount option.
|
|
912
|
+
`,exitCode:1,env:pn(this.state.env,t?.env)};if(!e.trim())return{stdout:``,stderr:``,exitCode:0,env:pn(this.state.env,t?.env)};this.logger?.info(`exec`,{command:e});let n=t?.cwd??this.state.cwd,r,i=n;if(t?.cwd)if(t.env&&`PWD`in t.env)r=t.env.PWD;else if(t?.env&&!(`PWD`in t.env))try{r=await this.fs.realpath(n),i=r}catch{r=n}else r=n;let a=t?.replaceEnv?new Map:new Map(this.state.env);if(t?.env)for(let[e,n]of Object.entries(t.env))a.set(e,n);r!==void 0&&a.set(`PWD`,r);let o={...this.state,env:a,cwd:i,functions:new Map(this.state.functions),localScopes:[...this.state.localScopes],options:{...this.state.options},hashTable:this.state.hashTable,groupStdin:t?.stdin,signal:t?.signal,extraArgs:t?.args},s=e;t?.rawScript||(s=Vx(e));let c=this.defenseInDepthConfig?un.getInstance(this.defenseInDepthConfig):null,l=c?.activate();try{let e=async()=>{let e=yt(s,{maxHeredocSize:this.limits.maxHeredocSize}),t;if(this.transformPlugins.length>0){let n=Object.create(null);for(let t of this.transformPlugins){let r=t.transform({ast:e,metadata:n});e=r.ast,r.metadata&&(n=hn(n,r.metadata))}t=n}let n=await new Tb({fs:this.fs,commands:this.commands,limits:this.limits,exec:this.exec.bind(this),fetch:this.secureFetch,sleep:this.sleepFn,trace:this.traceFn,coverage:this.coverageWriter,requireDefenseContext:c?.isEnabled()===!0,jsBootstrapCode:this.jsBootstrapCode},o).executeScript(e);return t&&(n.metadata=t),this.logResult(n)};return l?await l.run(e):await e()}catch(e){if(e instanceof nt||e instanceof tt)return this.logResult({stdout:e.stdout,stderr:e.stderr,exitCode:e.exitCode,env:pn(this.state.env,t?.env)});if(e instanceof Xe)return this.logResult({stdout:e.stdout,stderr:e.stderr,exitCode:1,env:pn(this.state.env,t?.env)});if(e instanceof ot)return this.logResult({stdout:e.stdout,stderr:e.stderr,exitCode:124,env:pn(this.state.env,t?.env)});if(e instanceof Qe)return this.logResult({stdout:e.stdout,stderr:vn(e.stderr),exitCode:Qe.EXIT_CODE,env:pn(this.state.env,t?.env)});if(e instanceof ln)return this.logResult({stdout:``,stderr:`bash: security violation: ${vn(e.message)}
|
|
912
913
|
`,exitCode:1,env:pn(this.state.env,t?.env)});if(e.name===`ParseException`)return this.logResult({stdout:``,stderr:`bash: syntax error: ${vn(e.message)}
|
|
913
914
|
`,exitCode:2,env:pn(this.state.env,t?.env)});if(e instanceof pt)return this.logResult({stdout:``,stderr:`bash: ${vn(e.message)}
|
|
914
915
|
`,exitCode:2,env:pn(this.state.env,t?.env)});if(e instanceof RangeError)return this.logResult({stdout:``,stderr:`bash: ${vn(e.message)}
|
|
915
|
-
`,exitCode:1,env:pn(this.state.env,t?.env)});throw e}finally{l?.deactivate()}}async readFile(e){return this.fs.readFile(this.fs.resolvePath(this.state.cwd,e))}async writeFile(e,t){return this.fs.writeFile(this.fs.resolvePath(this.state.cwd,e),t)}getCwd(){return this.state.cwd}getEnv(){return mn(this.state.env)}registerTransformPlugin(e){this.transformPlugins.push(e)}transform(e){let t=yt(
|
|
916
|
+
`,exitCode:1,env:pn(this.state.env,t?.env)});throw e}finally{l?.deactivate()}}async readFile(e){return this.fs.readFile(this.fs.resolvePath(this.state.cwd,e))}async writeFile(e,t){return this.fs.writeFile(this.fs.resolvePath(this.state.cwd,e),t)}getCwd(){return this.state.cwd}getEnv(){return mn(this.state.env)}registerTransformPlugin(e){this.transformPlugins.push(e)}transform(e){let t=yt(Vx(e),{maxHeredocSize:this.limits.maxHeredocSize}),n=Object.create(null);for(let e of this.transformPlugins){let r=e.transform({ast:t,metadata:n});t=r.ast,r.metadata&&(n=hn(n,r.metadata))}return{script:ix(t),ast:t,metadata:n}}};function Vx(e){let t=e.split(`
|
|
916
917
|
`),n=[],r=[];for(let e=0;e<t.length;e++){let i=t[e];if(r.length>0){let e=r[r.length-1];if((e.stripTabs?i.replace(/^\t+/,``):i)===e.delimiter){n.push(i.trimStart()),r.pop();continue}n.push(i);continue}let a=i.trimStart();n.push(a);for(let e of a.matchAll(/<<(-?)\s*(['"]?)([\w-]+)\2/g)){let t=e[1]===`-`,n=e[3];r.push({delimiter:n,stripTabs:t})}}return n.join(`
|
|
917
|
-
`)}var zx=new TextDecoder(`utf-8`,{fatal:!0});function Bx(e){if(!e)return e;let t=!1;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);if(r>255)return e;r>127&&(t=!0)}if(!t)return e;let n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);try{return zx.decode(n)}catch{return e}}var Vx=[`EACCES`,`escaping sandbox`,`EFBIG`],Hx=class{root;canonicalRoot;maxFileReadSize;allowSymlinks;constructor(e){this.root=wn.resolve(e.root),this.maxFileReadSize=e.maxFileReadSize??10485760,this.allowSymlinks=e.allowSymlinks??!1,nn(this.root,`ReadWriteFs`),this.canonicalRoot=L.realpathSync(this.root)}resolveAndValidate(e,t){let n=this.allowSymlinks?en(e,this.canonicalRoot):tn(e,this.root,this.canonicalRoot);if(n===null)throw Error(`EACCES: permission denied, '${t}' resolves outside sandbox`);return n}validateParent(e,t){let n=wn.dirname(e),r=this.resolveAndValidate(n,t);return wn.join(r,wn.basename(e))}toRealPath(e){let t=Zt(e),n=wn.join(this.root,t);return wn.resolve(n)}async readFile(e,t){return sn(await this.readFileBuffer(e),an(t))}async readFileBuffer(e){I(e,`open`);let t=this.toRealPath(e),n=this.resolveAndValidate(t,e);try{let t=this.allowSymlinks?L.constants.O_RDONLY:L.constants.O_RDONLY|L.constants.O_NOFOLLOW,r=await L.promises.open(n,t);try{if(this.maxFileReadSize>0){let t=await r.stat();if(t.size>this.maxFileReadSize)throw Error(`EFBIG: file too large, read '${e}' (${t.size} bytes, max ${this.maxFileReadSize})`)}let t=await r.readFile();return new Uint8Array(t)}finally{await r.close()}}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, open '${e}'`);if(n.code===`EISDIR`)throw Error(`EISDIR: illegal operation on a directory, read '${e}'`);if(n.code===`ELOOP`)throw Error(`EACCES: permission denied, '${e}' is a symlink`);this.sanitizeError(t,e,`open`)}}async writeFile(e,t,n){I(e,`write`);let r=this.toRealPath(e),i=this.resolveAndValidate(r,e),a=on(t,an(n)),o=wn.dirname(i);try{await L.promises.mkdir(o,{recursive:!0}),i=this.resolveAndValidate(r,e);let t=this.allowSymlinks?0:L.constants.O_NOFOLLOW,n=L.constants.O_WRONLY|L.constants.O_CREAT|L.constants.O_TRUNC|t,s=await L.promises.open(i,n,438);try{await s.writeFile(a)}finally{await s.close()}}catch(t){if(t.code===`ELOOP`)throw Error(`EACCES: permission denied, '${e}' is a symlink`);this.sanitizeError(t,e,`write`)}}async appendFile(e,t,n){I(e,`append`);let r=this.toRealPath(e),i=this.resolveAndValidate(r,e),a=on(t,an(n)),o=wn.dirname(i);try{await L.promises.mkdir(o,{recursive:!0}),i=this.resolveAndValidate(r,e);let t=this.allowSymlinks?0:L.constants.O_NOFOLLOW,n=L.constants.O_WRONLY|L.constants.O_CREAT|L.constants.O_APPEND|t,s=await L.promises.open(i,n,438);try{await s.writeFile(a)}finally{await s.close()}}catch(t){if(t.code===`ELOOP`)throw Error(`EACCES: permission denied, '${e}' is a symlink`);this.sanitizeError(t,e,`append`)}}async exists(e){if(e.includes(`\0`))return!1;let t=this.toRealPath(e);try{let n=this.resolveAndValidate(t,e);return await L.promises.access(n),!0}catch{return!1}}async stat(e){I(e,`stat`);let t=this.toRealPath(e),n=this.resolveAndValidate(t,e);try{let t=await L.promises.lstat(n);if(!this.allowSymlinks&&t.isSymbolicLink())throw Error(`EACCES: permission denied, '${e}' is a symlink`);return{isFile:t.isFile(),isDirectory:t.isDirectory(),isSymbolicLink:t.isSymbolicLink(),mode:t.mode,size:t.size,mtime:t.mtime}}catch(t){if(t.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, stat '${e}'`);this.sanitizeError(t,e,`stat`)}}async lstat(e){I(e,`lstat`);let t=this.toRealPath(e),n=this.validateParent(t,e);try{let e=await L.promises.lstat(n);return{isFile:e.isFile(),isDirectory:e.isDirectory(),isSymbolicLink:e.isSymbolicLink(),mode:e.mode,size:e.size,mtime:e.mtime}}catch(t){if(t.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, lstat '${e}'`);this.sanitizeError(t,e,`lstat`)}}async mkdir(e,t){I(e,`mkdir`);let n=this.toRealPath(e),r=this.resolveAndValidate(n,e);try{await L.promises.mkdir(r,{recursive:t?.recursive})}catch(t){let n=t;if(n.code===`EEXIST`)throw Error(`EEXIST: file already exists, mkdir '${e}'`);if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.sanitizeError(t,e,`mkdir`)}}async readdir(e){return(await this.readdirWithFileTypes(e)).map(e=>e.name)}async readdirWithFileTypes(e){I(e,`scandir`);let t=this.toRealPath(e),n=this.resolveAndValidate(t,e);try{if(!this.allowSymlinks&&(await L.promises.lstat(n)).isSymbolicLink())throw Error(`EACCES: permission denied, '${e}' is a symlink`);return(await L.promises.readdir(n,{withFileTypes:!0})).map(e=>({name:e.name,isFile:e.isFile(),isDirectory:e.isDirectory(),isSymbolicLink:e.isSymbolicLink()})).sort((e,t)=>e.name<t.name?-1:e.name>t.name?1:0)}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, scandir '${e}'`);if(n.code===`ENOTDIR`)throw Error(`ENOTDIR: not a directory, scandir '${e}'`);this.sanitizeError(t,e,`scandir`)}}async rm(e,t){I(e,`rm`);let n=this.toRealPath(e),r=this.resolveAndValidate(n,e);try{await L.promises.rm(r,{recursive:t?.recursive??!1,force:t?.force??!1})}catch(n){let r=n;if(r.code===`ENOENT`&&!t?.force)throw Error(`ENOENT: no such file or directory, rm '${e}'`);if(r.code===`ENOTEMPTY`)throw Error(`ENOTEMPTY: directory not empty, rm '${e}'`);this.sanitizeError(n,e,`rm`)}}async cp(e,t,n){I(e,`cp`),I(t,`cp`);let r=this.toRealPath(e),i=this.toRealPath(t),a=this.resolveAndValidate(r,e),o=this.resolveAndValidate(i,t);try{await L.promises.cp(a,o,{recursive:n?.recursive??!1,filter:async e=>{try{if(L.lstatSync(e).isSymbolicLink()){let t=await L.promises.realpath(e).catch(()=>null);return t===null?!1:Jt(t,this.canonicalRoot)}return!0}catch(e){return e.code===`ENOENT`}}})}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, cp '${e}'`);if(n.code===`EISDIR`)throw Error(`EISDIR: is a directory, cp '${e}'`);this.sanitizeError(t,e,`cp`)}}async mv(e,t){I(e,`mv`),I(t,`mv`);let n=this.toRealPath(e),r=this.toRealPath(t),i=this.validateParent(n,e),a=this.validateParent(r,t);try{if((await L.promises.lstat(i)).isSymbolicLink()){let n=await L.promises.readlink(i),r=wn.resolve(wn.dirname(a),n);if(!Jt(await L.promises.realpath(r).catch(()=>r),this.canonicalRoot))throw Error(`EACCES: permission denied, mv '${e}' -> '${t}' would create symlink escaping sandbox`)}}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, mv '${e}'`);if(n.message?.includes(`EACCES`)||n.message?.includes(`escaping sandbox`))throw t}let o=wn.dirname(a);try{await L.promises.mkdir(o,{recursive:!0})}catch(e){this.sanitizeError(e,t,`mv`)}try{await L.promises.rename(i,a)}catch(n){let r=n;if(r.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, mv '${e}'`);if(r.code===`EXDEV`){await this.cp(e,t,{recursive:!0}),await this.rm(e,{recursive:!0});return}this.sanitizeError(n,e,`mv`)}try{if(L.lstatSync(a).isDirectory()&&this.findEscapingSymlinks(a).length>0)throw await L.promises.rename(a,i),Error(`EACCES: permission denied, mv '${e}' -> '${t}' would create symlinks escaping sandbox`)}catch(e){if(e.message?.includes(`EACCES`)||e.message?.includes(`escaping sandbox`))throw e}}resolvePath(e,t){return Xt(e,t)}getAllPaths(){let e=[];return this.scanDir(`/`,e),e}sanitizeError(e,t,n){$t(e,t,n,Vx)}findEscapingSymlinks(e){let t=[];try{let n=L.readdirSync(e);for(let r of n){let n=wn.join(e,r);try{let r=L.lstatSync(n);if(r.isSymbolicLink()){let r=L.readlinkSync(n),i=wn.resolve(e,r),a;try{a=L.realpathSync(i)}catch{a=i}Jt(a,this.canonicalRoot)||t.push(n)}else r.isDirectory()&&t.push(...this.findEscapingSymlinks(n))}catch{}}}catch{}return t}scanDir(e,t){let n=this.toRealPath(e),r;try{r=this.resolveAndValidate(n,e)}catch{return}try{let n=L.readdirSync(r);for(let i of n){let n=e===`/`?`/${i}`:`${e}/${i}`;t.push(n);let a=wn.join(r,i);L.lstatSync(a).isDirectory()&&this.scanDir(n,t)}}catch{}}async chmod(e,t){I(e,`chmod`);let n=this.toRealPath(e),r=this.resolveAndValidate(n,e);try{let e=this.allowSymlinks?L.constants.O_RDONLY:L.constants.O_RDONLY|L.constants.O_NOFOLLOW,n=await L.promises.open(r,e);try{await n.chmod(t)}finally{await n.close()}}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, chmod '${e}'`);if(n.code===`ELOOP`)throw Error(`EACCES: permission denied, '${e}' is a symlink`);this.sanitizeError(t,e,`chmod`)}}async symlink(e,t){if(!this.allowSymlinks)throw Error(`EPERM: operation not permitted, symlink '${t}'`);I(t,`symlink`);let n=this.toRealPath(t),r=this.validateParent(n,t),i=Zt(t),a=Zt(wn.dirname(i)),o=e.startsWith(`/`)?Zt(e):Zt(a===`/`?`/${e}`:`${a}/${e}`),s=wn.join(this.canonicalRoot,o),c=wn.dirname(r),l=e.startsWith(`/`)?s:wn.relative(c,s)||`.`;try{await L.promises.symlink(l,r)}catch(e){if(e.code===`EEXIST`)throw Error(`EEXIST: file already exists, symlink '${t}'`);this.sanitizeError(e,t,`symlink`)}}async link(e,t){I(e,`link`),I(t,`link`);let n=this.toRealPath(e),r=this.toRealPath(t),i=this.resolveAndValidate(n,e),a=this.resolveAndValidate(r,t);try{await L.promises.link(i,a)}catch(n){let r=n;if(r.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, link '${e}'`);if(r.code===`EEXIST`)throw Error(`EEXIST: file already exists, link '${t}'`);if(r.code===`EPERM`)throw Error(`EPERM: operation not permitted, link '${e}'`);this.sanitizeError(n,e,`link`)}}async readlink(e){I(e,`readlink`);let t=this.toRealPath(e),n=this.validateParent(t,e);try{let t=await L.promises.readlink(n),r=Zt(e),i=wn.dirname(r),a=wn.isAbsolute(t)?t:wn.resolve(wn.dirname(n),t),o=await L.promises.realpath(a).catch(()=>a);if(Jt(o,this.canonicalRoot)){let e=o.slice(this.canonicalRoot.length)||`/`;return i===`/`?e.startsWith(`/`)?e.slice(1)||`.`:e:wn.relative(i,e)}return wn.basename(t)}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, readlink '${e}'`);if(n.code===`EINVAL`)throw Error(`EINVAL: invalid argument, readlink '${e}'`);this.sanitizeError(t,e,`readlink`)}}async realpath(e){I(e,`realpath`);let t=this.toRealPath(e);try{this.resolveAndValidate(t,e)}catch{throw Error(`ENOENT: no such file or directory, realpath '${e}'`)}let n;try{n=await L.promises.realpath(t)}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, realpath '${e}'`);if(n.code===`ELOOP`)throw Error(`ELOOP: too many levels of symbolic links, realpath '${e}'`);this.sanitizeError(t,e,`realpath`)}if(Jt(n,this.canonicalRoot))return n.slice(this.canonicalRoot.length)||`/`;throw Error(`ENOENT: no such file or directory, realpath '${e}'`)}async utimes(e,t,n){I(e,`utimes`);let r=this.toRealPath(e),i=this.resolveAndValidate(r,e);try{let e=this.allowSymlinks?L.constants.O_RDONLY:L.constants.O_RDONLY|L.constants.O_NOFOLLOW,r=await L.promises.open(i,e);try{await r.utimes(t,n)}finally{await r.close()}}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, utimes '${e}'`);if(n.code===`ELOOP`)throw Error(`EACCES: permission denied, '${e}' is a symlink`);this.sanitizeError(t,e,`utimes`)}}};function Ux(e){return e===``?`''`:/^[\w.\-/]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}const Wx=16*1024*1024;var Gx=class extends Error{limitBytes;actualBytes;partial;constructor(e,t,n){super(`Output exceeded ${e} byte buffer (got ${t}); narrow the command`),this.name=`StdoutOverflowError`,this.limitBytes=e,this.actualBytes=t,this.partial=n}};function Kx(e){if(!On(e))throw Error(`createBashInstance: cwd must be absolute (got: ${e})`);return new Lx({cwd:`/`,fs:new Hx({root:jn(e),allowSymlinks:!1})})}async function qx(e,t){let n=await e.exec(t);if(n.stdout.length>Wx)throw new Gx(Wx,n.stdout.length,{stdout:n.stdout.slice(0,Wx),stderr:n.stderr,exitCode:n.exitCode});return{stdout:n.stdout,stderr:n.stderr,exitCode:n.exitCode}}function Jx(e){return e.startsWith(`**/`)?e.slice(3):e}async function Yx(e,t,n={}){let r=Kx(t),i=[`-rn`,`-F`];(n.caseInsensitive??!0)&&i.push(`-i`);for(let e of n.include??[])i.push(`--include=${Ux(Jx(e))}`);for(let e of n.exclude??[])i.push(`--exclude=${Ux(Jx(e))}`),i.push(`--exclude-dir=${Ux(Jx(e))}`);let a=n.paths?.length?n.paths.map(Ux):[`.`],o=`grep ${i.join(` `)} ${Ux(e)} ${a.join(` `)}`,s;try{s=await qx(r,o)}catch(e){if(e instanceof Gx)s=e.partial;else throw e}if(s.exitCode===1&&!s.stdout)return[];if(s.exitCode!==0&&s.exitCode!==1&&!s.stdout)throw Error(`grep exited ${s.exitCode}: ${s.stderr}`);let c=[],l=n.maxResults??1/0;for(let e of s.stdout.split(`
|
|
918
|
-
`)){if(!e)continue;if(c.length>=l)break;let t=e.indexOf(`:`);if(t===-1)continue;let n=e.indexOf(`:`,t+1);if(n===-1)continue;let r=e.slice(0,t),i=e.slice(t+1,n),a=e.slice(n+1),o=Number.parseInt(i,10);Number.isFinite(o)&&c.push({path:r,line:o,text:a})}return c}const Xx=new Set([`.git`,`.ok`,`node_modules`,`.changeset`,`.claude`,`.agents`,`dist`,`build`]);async function Zx(e){let t=jn(e),n=new Map,r=0,i=!1;async function a(e){if(i)return;let o;try{o=await er(e,{withFileTypes:!0})}catch{return}for(let s of o){if(i)return;if(s.isDirectory()&&Xx.has(s.name))continue;let o=jn(e,s.name);if(s.isDirectory()){await a(o);continue}if(s.isFile()){if(r>=1e3){i=!0;return}try{let e=await tr(o);n.set(An(t,o),e.mtimeMs),r++}catch{}}}}return await a(t),{snapshot:n,truncated:i}}function Qx(e,t){let n=[];for(let[r,i]of t){let t=e.get(r);(t===void 0||t!==i)&&n.push(r)}for(let[r]of e)t.has(r)||n.push(r);return{changed:n}}var $x=n(((e,t)=>{t.exports=function(e){return e.map(function(e){return e===``?`''`:e&&typeof e==`object`?e.op.replace(/(.)/g,`\\$1`):/["\s\\]/.test(e)&&!/'/.test(e)?`'`+e.replace(/(['])/g,`\\$1`)+`'`:/["'\s]/.test(e)?`"`+e.replace(/(["\\$`!])/g,`\\$1`)+`"`:String(e).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g,`$1\\$2`)}).join(` `)}})),eS=n(((e,t)=>{for(var n=`(?:`+[`\\|\\|`,`\\&\\&`,`;;`,`\\|\\&`,`\\<\\(`,`\\<\\<\\<`,`>>`,`>\\&`,`<\\&`,`[&;()|<>]`].join(`|`)+`)`,r=RegExp(`^`+n+`$`),i=`|&;()<> \\t`,a=`"((\\\\"|[^"])*?)"`,o=`'((\\\\'|[^'])*?)'`,s=/^#$/,c=`'`,l=`"`,u=`$`,d=``,f=4294967296,p=0;p<4;p++)d+=(f*Math.random()).toString(16);var m=RegExp(`^`+d);function h(e,t){for(var n=t.lastIndex,r=[],i;i=t.exec(e);)r.push(i),t.lastIndex===i.index&&(t.lastIndex+=1);return t.lastIndex=n,r}function g(e,t,n){var r=typeof e==`function`?e(n):e[n];return r===void 0&&n!=``?r=``:r===void 0&&(r=`$`),typeof r==`object`?t+d+JSON.stringify(r)+d:t+r}function _(e,t,d){d||={};var f=d.escape||`\\`,p=`(\\`+f+`['"`+i+`]|[^\\s'"`+i+`])+`,m=h(e,new RegExp([`(`+n+`)`,`(`+p+`|`+a+`|`+o+`)+`].join(`|`),`g`));if(m.length===0)return[];t||={};var _=!1;return m.map(function(n){var i=n[0];if(!i||_)return;if(r.test(i))return{op:i};var a=!1,o=!1,d=``,p=!1,m;function h(){m+=1;var e,n,r=i.charAt(m);if(r===`{`){if(m+=1,i.charAt(m)===`}`)throw Error(`Bad substitution: `+i.slice(m-2,m+1));if(e=i.indexOf(`}`,m),e<0)throw Error(`Bad substitution: `+i.slice(m));n=i.slice(m,e),m=e}else if(/[*@#?$!_-]/.test(r))n=r,m+=1;else{var a=i.slice(m);e=a.match(/[^\w\d_]/),e?(n=a.slice(0,e.index),m+=e.index-1):(n=a,m=i.length)}return g(t,``,n)}for(m=0;m<i.length;m++){var v=i.charAt(m);if(p||=!a&&(v===`*`||v===`?`),o)d+=v,o=!1;else if(a)v===a?a=!1:a==c?d+=v:v===f?(m+=1,v=i.charAt(m),v===l||v===f||v===u?d+=v:d+=f+v):v===u?d+=h():d+=v;else if(v===l||v===c)a=v;else if(r.test(v))return{op:i};else if(s.test(v)){_=!0;var y={comment:e.slice(n.index+m+1)};return d.length?[d,y]:[y]}else v===f?o=!0:v===u?d+=h():d+=v}return p?{op:`glob`,pattern:d}:d}).reduce(function(e,t){return t===void 0?e:e.concat(t)},[])}t.exports=function(e,t,n){var r=_(e,t,n);return typeof t==`function`?r.reduce(function(e,t){if(typeof t==`object`)return e.concat(t);var n=t.split(RegExp(`(`+d+`.*?`+d+`)`,`g`));return n.length===1?e.concat(n[0]):e.concat(n.filter(Boolean).map(function(e){return m.test(e)?JSON.parse(e.split(d)[1]):e}))},[]):r}})),tS=t(n((e=>{e.quote=$x(),e.parse=eS()}))(),1);const nS=[`node_modules`,`.git`,`dist`,`build`,`.next`,`.turbo`,`.nuxt`,`coverage`,`.cache`,`.parcel-cache`,`.vercel`,`.ok`,`.claude`];function rS(e){return e===`--recursive`||e===`--dereference-recursive`?!0:e.startsWith(`--`)||!e.startsWith(`-`)?!1:/[rR]/.test(e.slice(1))}const iS=[{command:`grep`,applies:e=>e.slice(1).some(rS),hasUserExcludes:e=>e.some(e=>e===`--exclude-dir`||e.startsWith(`--exclude-dir=`)),buildExcludeArgs:e=>e.map(e=>`--exclude-dir=${e}`),insertionIndex:()=>1},{command:`find`,applies:()=>!0,hasUserExcludes:e=>e.slice(1).some(e=>e===`-not`||e===`!`||e===`-prune`),buildExcludeArgs:e=>{let t=[];for(let n of e)t.push(`-not`,`-path`,`*/${n}/*`);return t},insertionIndex:e=>{for(let t=1;t<e.length;t++)if(e[t].startsWith(`-`))return t;return e.length}}];function aS(e){return e.map(e=>{let t=iS.find(t=>t.command===e.command);if(!t||!t.applies(e.args)||t.hasUserExcludes(e.args))return e;let n=t.buildExcludeArgs(nS),r=t.insertionIndex(e.args);return{command:e.command,args:[...e.args.slice(0,r),...n,...e.args.slice(r)]}})}function oS(e){return e.map(e=>e.args.map(Ux).join(` `)).join(` | `)}const sS=new Set([`cat`,`ls`,`grep`,`find`,`head`,`tail`,`wc`,`sort`,`uniq`,`cut`]),cS=new Set([`>`,`>>`,`<`,`>&`,`<&`,`|&`]),lS=new Set([`&`,`;`,`;;`,`&&`,`||`,`(`,`)`,`<(`,`>(`,`<<`,`<<-`]),uS=new Set([`-o`,`--output-file`,`--output`]),dS=[`-o=`,`--output-file=`,`--output=`],fS=new Set([`-exec`,`-execdir`,`-delete`,`-fprint`,`-fprintf`,`-fprint0`,`-ok`,`-okdir`]),pS=/[`]|\$\(|\$\{|\$'/;function mS(e){return typeof e==`object`&&!!e&&`op`in e}function hS(e){let t=typeof e.op==`string`?e.op:`(unknown)`;return cS.has(t)?{category:`write_blocked`,message:`Write operation blocked: '${t}'. exec is read-only. For document changes, use write_document or edit_document.`}:lS.has(t)?{category:`shell_construct_blocked`,message:`Shell construct '${t}' is not supported. Only pipes (|) are allowed between allowlisted stages.`}:{category:`shell_construct_blocked`,message:`Operator '${t}' is not supported.`}}function gS(e){let t=[];for(let n of e){if(typeof n==`string`){if(pS.test(n))return{error:{category:`shell_construct_blocked`,message:`Argument '${n}' contains a shell-injection pattern (backtick, $(), or \${}); not supported.`}};t.push(n);continue}if(!mS(n))return{error:{category:`shell_construct_blocked`,message:`Unrecognized token shape.`}};if(n.op===`glob`&&typeof n.pattern==`string`){t.push(n.pattern);continue}return typeof n.comment==`string`?{error:{category:`shell_construct_blocked`,message:`Comments are not allowed in exec commands.`}}:{error:hS(n)}}return{args:t}}function _S(e){if(!sS.has(e.command))return{category:`unknown_command`,message:`Command '${e.command}' is not in the allowlist. For pattern matching try 'grep'; for file listing try 'ls' or 'find'. Allowlist: cat, ls, grep, find, head, tail, wc, sort, uniq, cut.`};for(let t of e.args.slice(1)){if(uS.has(t)||dS.some(e=>t.startsWith(e)))return{category:`write_blocked`,message:`Write operation blocked: '${t}'. exec is read-only. For document changes, use write_document or edit_document.`};if(e.command===`find`&&fS.has(t))return{category:`write_blocked`,message:`find flag '${t}' is blocked (executes commands or deletes files). Use exec for read-only discovery; chain with another allowlisted tool via '|' if you need to transform output.`}}return null}function vS(e){let t=e.trim();if(!t)return{error:{category:`unknown_command`,message:`Empty command.`}};let n;try{n=tS.parse(t)}catch{return{error:{category:`shell_construct_blocked`,message:`Failed to parse command — likely malformed quoting or an unsupported construct.`}}}let r=[],i=[];for(let e of n){if(mS(e)&&e.op===`|`){r.push(i),i=[];continue}i.push(e)}r.push(i);let a=[];for(let e of r){let t=gS(e);if(`error`in t)return t;if(t.args.length===0)return{error:{category:`shell_construct_blocked`,message:`Empty pipeline stage (trailing pipe or leading pipe).`}};let n={command:t.args[0],args:t.args},r=_S(n);if(r)return{error:r};a.push(n)}return{stages:a}}const yS=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/;function bS(e,t){let n=e.match(yS);if(!n)return null;try{let e=(0,sr.parse)(n[1]);if(Pe(e)){if(t){let n=t.safeParse(e);return n.success?n.data:null}return e}}catch{}return null}var xS=n(((e,t)=>{let n=`[^\\\\/]`,r=`[^/]`,i=`(?:\\/|$)`,a=`(?:^|\\/)`,o=`\\.{1,2}${i}`,s={DOT_LITERAL:`\\.`,PLUS_LITERAL:`\\+`,QMARK_LITERAL:`\\?`,SLASH_LITERAL:`\\/`,ONE_CHAR:`(?=.)`,QMARK:r,END_ANCHOR:i,DOTS_SLASH:o,NO_DOT:`(?!\\.)`,NO_DOTS:`(?!${a}${o})`,NO_DOT_SLASH:`(?!\\.{0,1}${i})`,NO_DOTS_SLASH:`(?!${o})`,QMARK_NO_DOT:`[^.\\/]`,STAR:`${r}*?`,START_ANCHOR:a,SEP:`/`},c={...s,SLASH_LITERAL:`[\\\\/]`,QMARK:n,STAR:`${n}*?`,DOTS_SLASH:`\\.{1,2}(?:[\\\\/]|$)`,NO_DOT:`(?!\\.)`,NO_DOTS:`(?!(?:^|[\\\\/])\\.{1,2}(?:[\\\\/]|$))`,NO_DOT_SLASH:`(?!\\.{0,1}(?:[\\\\/]|$))`,NO_DOTS_SLASH:`(?!\\.{1,2}(?:[\\\\/]|$))`,QMARK_NO_DOT:`[^.\\\\/]`,START_ANCHOR:`(?:^|[\\\\/])`,END_ANCHOR:`(?:[\\\\/]|$)`,SEP:`\\`};t.exports={DEFAULT_MAX_EXTGLOB_RECURSION:0,MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:{__proto__:null,alnum:`a-zA-Z0-9`,alpha:`a-zA-Z`,ascii:`\\x00-\\x7F`,blank:` \\t`,cntrl:`\\x00-\\x1F\\x7F`,digit:`0-9`,graph:`\\x21-\\x7E`,lower:`a-z`,print:`\\x20-\\x7E `,punct:`\\-!"#$%&'()\\*+,./:;<=>?@[\\]^_\`{|}~`,space:` \\t\\r\\n\\v\\f`,upper:`A-Z`,word:`A-Za-z0-9_`,xdigit:`A-Fa-f0-9`},REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{__proto__:null,"***":`*`,"**/**":`**`,"**/**/**":`**`},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,extglobChars(e){return{"!":{type:`negate`,open:`(?:(?!(?:`,close:`))${e.STAR})`},"?":{type:`qmark`,open:`(?:`,close:`)?`},"+":{type:`plus`,open:`(?:`,close:`)+`},"*":{type:`star`,open:`(?:`,close:`)*`},"@":{type:`at`,open:`(?:`,close:`)`}}},globChars(e){return e===!0?c:s}}})),SS=n((e=>{let{REGEX_BACKSLASH:t,REGEX_REMOVE_BACKSLASH:n,REGEX_SPECIAL_CHARS:r,REGEX_SPECIAL_CHARS_GLOBAL:i}=xS();e.isObject=e=>typeof e==`object`&&!!e&&!Array.isArray(e),e.hasRegexChars=e=>r.test(e),e.isRegexChar=t=>t.length===1&&e.hasRegexChars(t),e.escapeRegex=e=>e.replace(i,`\\$1`),e.toPosixSlashes=e=>e.replace(t,`/`),e.isWindows=()=>{if(typeof navigator<`u`&&navigator.platform){let e=navigator.platform.toLowerCase();return e===`win32`||e===`windows`}return typeof process<`u`&&process.platform?process.platform===`win32`:!1},e.removeBackslashes=e=>e.replace(n,e=>e===`\\`?``:e),e.escapeLast=(t,n,r)=>{let i=t.lastIndexOf(n,r);return i===-1?t:t[i-1]===`\\`?e.escapeLast(t,n,i-1):`${t.slice(0,i)}\\${t.slice(i)}`},e.removePrefix=(e,t={})=>{let n=e;return n.startsWith(`./`)&&(n=n.slice(2),t.prefix=`./`),n},e.wrapOutput=(e,t={},n={})=>{let r=`${n.contains?``:`^`}(?:${e})${n.contains?``:`$`}`;return t.negated===!0&&(r=`(?:^(?!${r}).*$)`),r},e.basename=(e,{windows:t}={})=>{let n=e.split(t?/[\\/]/:`/`),r=n[n.length-1];return r===``?n[n.length-2]:r}})),CS=n(((e,t)=>{let n=SS(),{CHAR_ASTERISK:r,CHAR_AT:i,CHAR_BACKWARD_SLASH:a,CHAR_COMMA:o,CHAR_DOT:s,CHAR_EXCLAMATION_MARK:c,CHAR_FORWARD_SLASH:l,CHAR_LEFT_CURLY_BRACE:u,CHAR_LEFT_PARENTHESES:d,CHAR_LEFT_SQUARE_BRACKET:f,CHAR_PLUS:p,CHAR_QUESTION_MARK:m,CHAR_RIGHT_CURLY_BRACE:h,CHAR_RIGHT_PARENTHESES:g,CHAR_RIGHT_SQUARE_BRACKET:_}=xS(),v=e=>e===l||e===a,y=e=>{e.isPrefix!==!0&&(e.depth=e.isGlobstar?1/0:1)};t.exports=(e,t)=>{let b=t||{},x=e.length-1,S=b.parts===!0||b.scanToEnd===!0,C=[],w=[],ee=[],T=e,E=-1,te=0,ne=0,D=!1,re=!1,ie=!1,O=!1,k=!1,ae=!1,oe=!1,A=!1,se=!1,ce=!1,le=0,j,M,N={value:``,depth:0,isGlob:!1},ue=()=>E>=x,de=()=>T.charCodeAt(E+1),fe=()=>(j=M,T.charCodeAt(++E));for(;E<x;){M=fe();let e;if(M===a){oe=N.backslashes=!0,M=fe(),M===u&&(ae=!0);continue}if(ae===!0||M===u){for(le++;ue()!==!0&&(M=fe());){if(M===a){oe=N.backslashes=!0,fe();continue}if(M===u){le++;continue}if(ae!==!0&&M===s&&(M=fe())===s){if(D=N.isBrace=!0,ie=N.isGlob=!0,ce=!0,S===!0)continue;break}if(ae!==!0&&M===o){if(D=N.isBrace=!0,ie=N.isGlob=!0,ce=!0,S===!0)continue;break}if(M===h&&(le--,le===0)){ae=!1,D=N.isBrace=!0,ce=!0;break}}if(S===!0)continue;break}if(M===l){if(C.push(E),w.push(N),N={value:``,depth:0,isGlob:!1},ce===!0)continue;if(j===s&&E===te+1){te+=2;continue}ne=E+1;continue}if(b.noext!==!0&&(M===p||M===i||M===r||M===m||M===c)&&de()===d){if(ie=N.isGlob=!0,O=N.isExtglob=!0,ce=!0,M===c&&E===te&&(se=!0),S===!0){for(;ue()!==!0&&(M=fe());){if(M===a){oe=N.backslashes=!0,M=fe();continue}if(M===g){ie=N.isGlob=!0,ce=!0;break}}continue}break}if(M===r){if(j===r&&(k=N.isGlobstar=!0),ie=N.isGlob=!0,ce=!0,S===!0)continue;break}if(M===m){if(ie=N.isGlob=!0,ce=!0,S===!0)continue;break}if(M===f){for(;ue()!==!0&&(e=fe());){if(e===a){oe=N.backslashes=!0,fe();continue}if(e===_){re=N.isBracket=!0,ie=N.isGlob=!0,ce=!0;break}}if(S===!0)continue;break}if(b.nonegate!==!0&&M===c&&E===te){A=N.negated=!0,te++;continue}if(b.noparen!==!0&&M===d){if(ie=N.isGlob=!0,S===!0){for(;ue()!==!0&&(M=fe());){if(M===d){oe=N.backslashes=!0,M=fe();continue}if(M===g){ce=!0;break}}continue}break}if(ie===!0){if(ce=!0,S===!0)continue;break}}b.noext===!0&&(O=!1,ie=!1);let pe=T,me=``,he=``;te>0&&(me=T.slice(0,te),T=T.slice(te),ne-=te),pe&&ie===!0&&ne>0?(pe=T.slice(0,ne),he=T.slice(ne)):ie===!0?(pe=``,he=T):pe=T,pe&&pe!==``&&pe!==`/`&&pe!==T&&v(pe.charCodeAt(pe.length-1))&&(pe=pe.slice(0,-1)),b.unescape===!0&&(he&&=n.removeBackslashes(he),pe&&oe===!0&&(pe=n.removeBackslashes(pe)));let ge={prefix:me,input:e,start:te,base:pe,glob:he,isBrace:D,isBracket:re,isGlob:ie,isExtglob:O,isGlobstar:k,negated:A,negatedExtglob:se};if(b.tokens===!0&&(ge.maxDepth=0,v(M)||w.push(N),ge.tokens=w),b.parts===!0||b.tokens===!0){let t;for(let n=0;n<C.length;n++){let r=t?t+1:te,i=C[n],a=e.slice(r,i);b.tokens&&(n===0&&te!==0?(w[n].isPrefix=!0,w[n].value=me):w[n].value=a,y(w[n]),ge.maxDepth+=w[n].depth),(n!==0||a!==``)&&ee.push(a),t=i}if(t&&t+1<e.length){let n=e.slice(t+1);ee.push(n),b.tokens&&(w[w.length-1].value=n,y(w[w.length-1]),ge.maxDepth+=w[w.length-1].depth)}ge.slashes=C,ge.parts=ee}return ge}})),wS=n(((e,t)=>{let n=xS(),r=SS(),{MAX_LENGTH:i,POSIX_REGEX_SOURCE:a,REGEX_NON_SPECIAL_CHARS:o,REGEX_SPECIAL_CHARS_BACKREF:s,REPLACEMENTS:c}=n,l=(e,t)=>{if(typeof t.expandRange==`function`)return t.expandRange(...e,t);e.sort();let n=`[${e.join(`-`)}]`;try{new RegExp(n)}catch{return e.map(e=>r.escapeRegex(e)).join(`..`)}return n},u=(e,t)=>`Missing ${e}: "${t}" - use "\\\\${t}" to match literal characters`,d=e=>{let t=[],n=0,r=0,i=0,a=``,o=!1;for(let s of e){if(o===!0){a+=s,o=!1;continue}if(s===`\\`){a+=s,o=!0;continue}if(s===`"`){i=i===1?0:1,a+=s;continue}if(i===0){if(s===`[`)n++;else if(s===`]`&&n>0)n--;else if(n===0){if(s===`(`)r++;else if(s===`)`&&r>0)r--;else if(s===`|`&&r===0){t.push(a),a=``;continue}}}a+=s}return t.push(a),t},f=e=>{let t=!1;for(let n of e){if(t===!0){t=!1;continue}if(n===`\\`){t=!0;continue}if(/[?*+@!()[\]{}]/.test(n))return!1}return!0},p=e=>{let t=e.trim(),n=!0;for(;n===!0;)n=!1,/^@\([^\\()[\]{}|]+\)$/.test(t)&&(t=t.slice(2,-1),n=!0);if(f(t))return t.replace(/\\(.)/g,`$1`)},m=e=>{let t=e.map(p).filter(Boolean);for(let e=0;e<t.length;e++)for(let n=e+1;n<t.length;n++){let r=t[e],i=t[n],a=r[0];if(!(!a||r!==a.repeat(r.length)||i!==a.repeat(i.length))&&(r===i||r.startsWith(i)||i.startsWith(r)))return!0}return!1},h=(e,t=!0)=>{if(e[0]!==`+`&&e[0]!==`*`||e[1]!==`(`)return;let n=0,r=0,i=0,a=!1;for(let o=1;o<e.length;o++){let s=e[o];if(a===!0){a=!1;continue}if(s===`\\`){a=!0;continue}if(s===`"`){i=i===1?0:1;continue}if(i!==1){if(s===`[`){n++;continue}if(s===`]`&&n>0){n--;continue}if(!(n>0)){if(s===`(`){r++;continue}if(s===`)`&&(r--,r===0))return t===!0&&o!==e.length-1?void 0:{type:e[0],body:e.slice(2,o),end:o}}}}},g=e=>{let t=0,n=[];for(;t<e.length;){let r=h(e.slice(t),!1);if(!r||r.type!==`*`)return;let i=d(r.body).map(e=>e.trim());if(i.length!==1)return;let a=p(i[0]);if(!a||a.length!==1)return;n.push(a),t+=r.end+1}if(!(n.length<1))return`${n.length===1?r.escapeRegex(n[0]):`[${n.map(e=>r.escapeRegex(e)).join(``)}]`}*`},_=e=>{let t=0,n=e.trim(),r=h(n);for(;r;)t++,n=r.body.trim(),r=h(n);return t},v=(e,t)=>{if(t.maxExtglobRecursion===!1)return{risky:!1};let r=typeof t.maxExtglobRecursion==`number`?t.maxExtglobRecursion:n.DEFAULT_MAX_EXTGLOB_RECURSION,i=d(e).map(e=>e.trim());if(i.length>1&&(i.some(e=>e===``)||i.some(e=>/^[*?]+$/.test(e))||m(i)))return{risky:!0};for(let e of i){let t=g(e);if(t)return{risky:!0,safeOutput:t};if(_(e)>r)return{risky:!0}}return{risky:!1}},y=(e,t)=>{if(typeof e!=`string`)throw TypeError(`Expected a string`);e=c[e]||e;let d={...t},f=typeof d.maxLength==`number`?Math.min(i,d.maxLength):i,p=e.length;if(p>f)throw SyntaxError(`Input length: ${p}, exceeds maximum allowed length: ${f}`);let m={type:`bos`,value:``,output:d.prepend||``},h=[m],g=d.capture?``:`?:`,_=n.globChars(d.windows),b=n.extglobChars(_),{DOT_LITERAL:x,PLUS_LITERAL:S,SLASH_LITERAL:C,ONE_CHAR:w,DOTS_SLASH:ee,NO_DOT:T,NO_DOT_SLASH:E,NO_DOTS_SLASH:te,QMARK:ne,QMARK_NO_DOT:D,STAR:re,START_ANCHOR:ie}=_,O=e=>`(${g}(?:(?!${ie}${e.dot?ee:x}).)*?)`,k=d.dot?``:T,ae=d.dot?ne:D,oe=d.bash===!0?O(d):re;d.capture&&(oe=`(${oe})`),typeof d.noext==`boolean`&&(d.noextglob=d.noext);let A={input:e,index:-1,start:0,dot:d.dot===!0,consumed:``,output:``,prefix:``,backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:h};e=r.removePrefix(e,A),p=e.length;let se=[],ce=[],le=[],j=m,M,N=()=>A.index===p-1,ue=A.peek=(t=1)=>e[A.index+t],de=A.advance=()=>e[++A.index]||``,fe=()=>e.slice(A.index+1),pe=(e=``,t=0)=>{A.consumed+=e,A.index+=t},me=e=>{A.output+=e.output==null?e.value:e.output,pe(e.value)},he=()=>{let e=1;for(;ue()===`!`&&(ue(2)!==`(`||ue(3)===`?`);)de(),A.start++,e++;return e%2==0?!1:(A.negated=!0,A.start++,!0)},ge=e=>{A[e]++,le.push(e)},_e=e=>{A[e]--,le.pop()},P=e=>{if(j.type===`globstar`){let t=A.braces>0&&(e.type===`comma`||e.type===`brace`),n=e.extglob===!0||se.length&&(e.type===`pipe`||e.type===`paren`);e.type!==`slash`&&e.type!==`paren`&&!t&&!n&&(A.output=A.output.slice(0,-j.output.length),j.type=`star`,j.value=`*`,j.output=oe,A.output+=j.output)}if(se.length&&e.type!==`paren`&&(se[se.length-1].inner+=e.value),(e.value||e.output)&&me(e),j&&j.type===`text`&&e.type===`text`){j.output=(j.output||j.value)+e.value,j.value+=e.value;return}e.prev=j,h.push(e),j=e},ve=(e,t)=>{let n={...b[t],conditions:1,inner:``};n.prev=j,n.parens=A.parens,n.output=A.output,n.startIndex=A.index,n.tokensIndex=h.length;let r=(d.capture?`(`:``)+n.open;ge(`parens`),P({type:e,value:t,output:A.output?``:w}),P({type:`paren`,extglob:!0,value:de(),output:r}),se.push(n)},ye=n=>{let i=e.slice(n.startIndex,A.index+1),a=v(e.slice(n.startIndex+2,A.index),d);if((n.type===`plus`||n.type===`star`)&&a.risky){let e=a.safeOutput?(n.output?``:w)+(d.capture?`(${a.safeOutput})`:a.safeOutput):void 0,t=h[n.tokensIndex];t.type=`text`,t.value=i,t.output=e||r.escapeRegex(i);for(let e=n.tokensIndex+1;e<h.length;e++)h[e].value=``,h[e].output=``,delete h[e].suffix;A.output=n.output+t.output,A.backtrack=!0,P({type:`paren`,extglob:!0,value:M,output:``}),_e(`parens`);return}let o=n.close+(d.capture?`)`:``),s;if(n.type===`negate`){let e=oe;n.inner&&n.inner.length>1&&n.inner.includes(`/`)&&(e=O(d)),(e!==oe||N()||/^\)+$/.test(fe()))&&(o=n.close=`)$))${e}`),n.inner.includes(`*`)&&(s=fe())&&/^\.[^\\/.]+$/.test(s)&&(o=n.close=`)${y(s,{...t,fastpaths:!1}).output})${e})`),n.prev.type===`bos`&&(A.negatedExtglob=!0)}P({type:`paren`,extglob:!0,value:M,output:o}),_e(`parens`)};if(d.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(e)){let n=!1,i=e.replace(s,(e,t,r,i,a,o)=>i===`\\`?(n=!0,e):i===`?`?t?t+i+(a?ne.repeat(a.length):``):o===0?ae+(a?ne.repeat(a.length):``):ne.repeat(r.length):i===`.`?x.repeat(r.length):i===`*`?t?t+i+(a?oe:``):oe:t?e:`\\${e}`);return n===!0&&(i=d.unescape===!0?i.replace(/\\/g,``):i.replace(/\\+/g,e=>e.length%2==0?`\\\\`:e?`\\`:``)),i===e&&d.contains===!0?(A.output=e,A):(A.output=r.wrapOutput(i,A,t),A)}for(;!N();){if(M=de(),M===`\0`)continue;if(M===`\\`){let e=ue();if(e===`/`&&d.bash!==!0||e===`.`||e===`;`)continue;if(!e){M+=`\\`,P({type:`text`,value:M});continue}let t=/^\\+/.exec(fe()),n=0;if(t&&t[0].length>2&&(n=t[0].length,A.index+=n,n%2!=0&&(M+=`\\`)),d.unescape===!0?M=de():M+=de(),A.brackets===0){P({type:`text`,value:M});continue}}if(A.brackets>0&&(M!==`]`||j.value===`[`||j.value===`[^`)){if(d.posix!==!1&&M===`:`){let e=j.value.slice(1);if(e.includes(`[`)&&(j.posix=!0,e.includes(`:`))){let e=j.value.lastIndexOf(`[`),t=j.value.slice(0,e),n=a[j.value.slice(e+2)];if(n){j.value=t+n,A.backtrack=!0,de(),!m.output&&h.indexOf(j)===1&&(m.output=w);continue}}}(M===`[`&&ue()!==`:`||M===`-`&&ue()===`]`)&&(M=`\\${M}`),M===`]`&&(j.value===`[`||j.value===`[^`)&&(M=`\\${M}`),d.posix===!0&&M===`!`&&j.value===`[`&&(M=`^`),j.value+=M,me({value:M});continue}if(A.quotes===1&&M!==`"`){M=r.escapeRegex(M),j.value+=M,me({value:M});continue}if(M===`"`){A.quotes=A.quotes===1?0:1,d.keepQuotes===!0&&P({type:`text`,value:M});continue}if(M===`(`){ge(`parens`),P({type:`paren`,value:M});continue}if(M===`)`){if(A.parens===0&&d.strictBrackets===!0)throw SyntaxError(u(`opening`,`(`));let e=se[se.length-1];if(e&&A.parens===e.parens+1){ye(se.pop());continue}P({type:`paren`,value:M,output:A.parens?`)`:`\\)`}),_e(`parens`);continue}if(M===`[`){if(d.nobracket===!0||!fe().includes(`]`)){if(d.nobracket!==!0&&d.strictBrackets===!0)throw SyntaxError(u(`closing`,`]`));M=`\\${M}`}else ge(`brackets`);P({type:`bracket`,value:M});continue}if(M===`]`){if(d.nobracket===!0||j&&j.type===`bracket`&&j.value.length===1){P({type:`text`,value:M,output:`\\${M}`});continue}if(A.brackets===0){if(d.strictBrackets===!0)throw SyntaxError(u(`opening`,`[`));P({type:`text`,value:M,output:`\\${M}`});continue}_e(`brackets`);let e=j.value.slice(1);if(j.posix!==!0&&e[0]===`^`&&!e.includes(`/`)&&(M=`/${M}`),j.value+=M,me({value:M}),d.literalBrackets===!1||r.hasRegexChars(e))continue;let t=r.escapeRegex(j.value);if(A.output=A.output.slice(0,-j.value.length),d.literalBrackets===!0){A.output+=t,j.value=t;continue}j.value=`(${g}${t}|${j.value})`,A.output+=j.value;continue}if(M===`{`&&d.nobrace!==!0){ge(`braces`);let e={type:`brace`,value:M,output:`(`,outputIndex:A.output.length,tokensIndex:A.tokens.length};ce.push(e),P(e);continue}if(M===`}`){let e=ce[ce.length-1];if(d.nobrace===!0||!e){P({type:`text`,value:M,output:M});continue}let t=`)`;if(e.dots===!0){let e=h.slice(),n=[];for(let t=e.length-1;t>=0&&(h.pop(),e[t].type!==`brace`);t--)e[t].type!==`dots`&&n.unshift(e[t].value);t=l(n,d),A.backtrack=!0}if(e.comma!==!0&&e.dots!==!0){let n=A.output.slice(0,e.outputIndex),r=A.tokens.slice(e.tokensIndex);e.value=e.output=`\\{`,M=t=`\\}`,A.output=n;for(let e of r)A.output+=e.output||e.value}P({type:`brace`,value:M,output:t}),_e(`braces`),ce.pop();continue}if(M===`|`){se.length>0&&se[se.length-1].conditions++,P({type:`text`,value:M});continue}if(M===`,`){let e=M,t=ce[ce.length-1];t&&le[le.length-1]===`braces`&&(t.comma=!0,e=`|`),P({type:`comma`,value:M,output:e});continue}if(M===`/`){if(j.type===`dot`&&A.index===A.start+1){A.start=A.index+1,A.consumed=``,A.output=``,h.pop(),j=m;continue}P({type:`slash`,value:M,output:C});continue}if(M===`.`){if(A.braces>0&&j.type===`dot`){j.value===`.`&&(j.output=x);let e=ce[ce.length-1];j.type=`dots`,j.output+=M,j.value+=M,e.dots=!0;continue}if(A.braces+A.parens===0&&j.type!==`bos`&&j.type!==`slash`){P({type:`text`,value:M,output:x});continue}P({type:`dot`,value:M,output:x});continue}if(M===`?`){if(!(j&&j.value===`(`)&&d.noextglob!==!0&&ue()===`(`&&ue(2)!==`?`){ve(`qmark`,M);continue}if(j&&j.type===`paren`){let e=ue(),t=M;(j.value===`(`&&!/[!=<:]/.test(e)||e===`<`&&!/<([!=]|\w+>)/.test(fe()))&&(t=`\\${M}`),P({type:`text`,value:M,output:t});continue}if(d.dot!==!0&&(j.type===`slash`||j.type===`bos`)){P({type:`qmark`,value:M,output:D});continue}P({type:`qmark`,value:M,output:ne});continue}if(M===`!`){if(d.noextglob!==!0&&ue()===`(`&&(ue(2)!==`?`||!/[!=<:]/.test(ue(3)))){ve(`negate`,M);continue}if(d.nonegate!==!0&&A.index===0){he();continue}}if(M===`+`){if(d.noextglob!==!0&&ue()===`(`&&ue(2)!==`?`){ve(`plus`,M);continue}if(j&&j.value===`(`||d.regex===!1){P({type:`plus`,value:M,output:S});continue}if(j&&(j.type===`bracket`||j.type===`paren`||j.type===`brace`)||A.parens>0){P({type:`plus`,value:M});continue}P({type:`plus`,value:S});continue}if(M===`@`){if(d.noextglob!==!0&&ue()===`(`&&ue(2)!==`?`){P({type:`at`,extglob:!0,value:M,output:``});continue}P({type:`text`,value:M});continue}if(M!==`*`){(M===`$`||M===`^`)&&(M=`\\${M}`);let e=o.exec(fe());e&&(M+=e[0],A.index+=e[0].length),P({type:`text`,value:M});continue}if(j&&(j.type===`globstar`||j.star===!0)){j.type=`star`,j.star=!0,j.value+=M,j.output=oe,A.backtrack=!0,A.globstar=!0,pe(M);continue}let t=fe();if(d.noextglob!==!0&&/^\([^?]/.test(t)){ve(`star`,M);continue}if(j.type===`star`){if(d.noglobstar===!0){pe(M);continue}let n=j.prev,r=n.prev,i=n.type===`slash`||n.type===`bos`,a=r&&(r.type===`star`||r.type===`globstar`);if(d.bash===!0&&(!i||t[0]&&t[0]!==`/`)){P({type:`star`,value:M,output:``});continue}let o=A.braces>0&&(n.type===`comma`||n.type===`brace`),s=se.length&&(n.type===`pipe`||n.type===`paren`);if(!i&&n.type!==`paren`&&!o&&!s){P({type:`star`,value:M,output:``});continue}for(;t.slice(0,3)===`/**`;){let n=e[A.index+4];if(n&&n!==`/`)break;t=t.slice(3),pe(`/**`,3)}if(n.type===`bos`&&N()){j.type=`globstar`,j.value+=M,j.output=O(d),A.output=j.output,A.globstar=!0,pe(M);continue}if(n.type===`slash`&&n.prev.type!==`bos`&&!a&&N()){A.output=A.output.slice(0,-(n.output+j.output).length),n.output=`(?:${n.output}`,j.type=`globstar`,j.output=O(d)+(d.strictSlashes?`)`:`|$)`),j.value+=M,A.globstar=!0,A.output+=n.output+j.output,pe(M);continue}if(n.type===`slash`&&n.prev.type!==`bos`&&t[0]===`/`){let e=t[1]===void 0?``:`|$`;A.output=A.output.slice(0,-(n.output+j.output).length),n.output=`(?:${n.output}`,j.type=`globstar`,j.output=`${O(d)}${C}|${C}${e})`,j.value+=M,A.output+=n.output+j.output,A.globstar=!0,pe(M+de()),P({type:`slash`,value:`/`,output:``});continue}if(n.type===`bos`&&t[0]===`/`){j.type=`globstar`,j.value+=M,j.output=`(?:^|${C}|${O(d)}${C})`,A.output=j.output,A.globstar=!0,pe(M+de()),P({type:`slash`,value:`/`,output:``});continue}A.output=A.output.slice(0,-j.output.length),j.type=`globstar`,j.output=O(d),j.value+=M,A.output+=j.output,A.globstar=!0,pe(M);continue}let n={type:`star`,value:M,output:oe};if(d.bash===!0){n.output=`.*?`,(j.type===`bos`||j.type===`slash`)&&(n.output=k+n.output),P(n);continue}if(j&&(j.type===`bracket`||j.type===`paren`)&&d.regex===!0){n.output=M,P(n);continue}(A.index===A.start||j.type===`slash`||j.type===`dot`)&&(j.type===`dot`?(A.output+=E,j.output+=E):d.dot===!0?(A.output+=te,j.output+=te):(A.output+=k,j.output+=k),ue()!==`*`&&(A.output+=w,j.output+=w)),P(n)}for(;A.brackets>0;){if(d.strictBrackets===!0)throw SyntaxError(u(`closing`,`]`));A.output=r.escapeLast(A.output,`[`),_e(`brackets`)}for(;A.parens>0;){if(d.strictBrackets===!0)throw SyntaxError(u(`closing`,`)`));A.output=r.escapeLast(A.output,`(`),_e(`parens`)}for(;A.braces>0;){if(d.strictBrackets===!0)throw SyntaxError(u(`closing`,`}`));A.output=r.escapeLast(A.output,`{`),_e(`braces`)}if(d.strictSlashes!==!0&&(j.type===`star`||j.type===`bracket`)&&P({type:`maybe_slash`,value:``,output:`${C}?`}),A.backtrack===!0){A.output=``;for(let e of A.tokens)A.output+=e.output==null?e.value:e.output,e.suffix&&(A.output+=e.suffix)}return A};y.fastpaths=(e,t)=>{let a={...t},o=typeof a.maxLength==`number`?Math.min(i,a.maxLength):i,s=e.length;if(s>o)throw SyntaxError(`Input length: ${s}, exceeds maximum allowed length: ${o}`);e=c[e]||e;let{DOT_LITERAL:l,SLASH_LITERAL:u,ONE_CHAR:d,DOTS_SLASH:f,NO_DOT:p,NO_DOTS:m,NO_DOTS_SLASH:h,STAR:g,START_ANCHOR:_}=n.globChars(a.windows),v=a.dot?m:p,y=a.dot?h:p,b=a.capture?``:`?:`,x={negated:!1,prefix:``},S=a.bash===!0?`.*?`:g;a.capture&&(S=`(${S})`);let C=e=>e.noglobstar===!0?S:`(${b}(?:(?!${_}${e.dot?f:l}).)*?)`,w=e=>{switch(e){case`*`:return`${v}${d}${S}`;case`.*`:return`${l}${d}${S}`;case`*.*`:return`${v}${S}${l}${d}${S}`;case`*/*`:return`${v}${S}${u}${d}${y}${S}`;case`**`:return v+C(a);case`**/*`:return`(?:${v}${C(a)}${u})?${y}${d}${S}`;case`**/*.*`:return`(?:${v}${C(a)}${u})?${y}${S}${l}${d}${S}`;case`**/.*`:return`(?:${v}${C(a)}${u})?${l}${d}${S}`;default:{let t=/^(.*?)\.(\w+)$/.exec(e);if(!t)return;let n=w(t[1]);return n?n+l+t[2]:void 0}}},ee=w(r.removePrefix(e,x));return ee&&a.strictSlashes!==!0&&(ee+=`${u}?`),ee},t.exports=y})),TS=n(((e,t)=>{let n=CS(),r=wS(),i=SS(),a=xS(),o=e=>e&&typeof e==`object`&&!Array.isArray(e),s=(e,t,n=!1)=>{if(Array.isArray(e)){let r=e.map(e=>s(e,t,n));return e=>{for(let t of r){let n=t(e);if(n)return n}return!1}}let r=o(e)&&e.tokens&&e.input;if(e===``||typeof e!=`string`&&!r)throw TypeError(`Expected pattern to be a non-empty string`);let i=t||{},a=i.windows,c=r?s.compileRe(e,t):s.makeRe(e,t,!1,!0),l=c.state;delete c.state;let u=()=>!1;if(i.ignore){let e={...t,ignore:null,onMatch:null,onResult:null};u=s(i.ignore,e,n)}let d=(n,r=!1)=>{let{isMatch:o,match:d,output:f}=s.test(n,c,t,{glob:e,posix:a}),p={glob:e,state:l,regex:c,posix:a,input:n,output:f,match:d,isMatch:o};return typeof i.onResult==`function`&&i.onResult(p),o===!1?(p.isMatch=!1,r?p:!1):u(n)?(typeof i.onIgnore==`function`&&i.onIgnore(p),p.isMatch=!1,r?p:!1):(typeof i.onMatch==`function`&&i.onMatch(p),r?p:!0)};return n&&(d.state=l),d};s.test=(e,t,n,{glob:r,posix:a}={})=>{if(typeof e!=`string`)throw TypeError(`Expected input to be a string`);if(e===``)return{isMatch:!1,output:``};let o=n||{},c=o.format||(a?i.toPosixSlashes:null),l=e===r,u=l&&c?c(e):e;return l===!1&&(u=c?c(e):e,l=u===r),(l===!1||o.capture===!0)&&(l=o.matchBase===!0||o.basename===!0?s.matchBase(e,t,n,a):t.exec(u)),{isMatch:!!l,match:l,output:u}},s.matchBase=(e,t,n)=>(t instanceof RegExp?t:s.makeRe(t,n)).test(i.basename(e)),s.isMatch=(e,t,n)=>s(t,n)(e),s.parse=(e,t)=>Array.isArray(e)?e.map(e=>s.parse(e,t)):r(e,{...t,fastpaths:!1}),s.scan=(e,t)=>n(e,t),s.compileRe=(e,t,n=!1,r=!1)=>{if(n===!0)return e.output;let i=t||{},a=i.contains?``:`^`,o=i.contains?``:`$`,c=`${a}(?:${e.output})${o}`;e&&e.negated===!0&&(c=`^(?!${c}).*$`);let l=s.toRegex(c,t);return r===!0&&(l.state=e),l},s.makeRe=(e,t={},n=!1,i=!1)=>{if(!e||typeof e!=`string`)throw TypeError(`Expected a non-empty string`);let a={negated:!1,fastpaths:!0};return t.fastpaths!==!1&&(e[0]===`.`||e[0]===`*`)&&(a.output=r.fastpaths(e,t)),a.output||(a=r(e,t)),s.compileRe(a,t,n,i)},s.toRegex=(e,t)=>{try{let n=t||{};return new RegExp(e,n.flags||(n.nocase?`i`:``))}catch(e){if(t&&t.debug===!0)throw e;return/$^/}},s.constants=a,t.exports=s})),ES=t(n(((e,t)=>{let n=TS(),r=SS();function i(e,t,i=!1){return t&&(t.windows===null||t.windows===void 0)&&(t={...t,windows:r.isWindows()}),n(e,t,i)}Object.assign(i,n),t.exports=i}))(),1);const DS=new WeakMap;function OS(e){let t=DS.get(e);if(t)return t;let n=e.map(e=>(0,ES.default)(e.match,{dot:!0}));return DS.set(e,n),n}function kS(e,t){if(e.length===0)return{};let n=OS(e),r={},i=[],a=!1;for(let o=0;o<e.length;o++){if(!n[o](t))continue;a=!0;let s=e[o].frontmatter;if(s.title!==void 0&&(r.title=s.title),s.description!==void 0&&(r.description=s.description),s.tags!==void 0)for(let e of s.tags)i.includes(e)||i.push(e)}return a?(i.length>0&&(r.tags=i),r):{}}function AS(e){try{return Bn(jn(e,`.git`)).isDirectory()}catch{return!1}}function jS(e){return ye({baseDir:jn(e),timeout:{block:5e3}})}async function MS(e,t,n=5){if(!AS(e))return{commits:[],source:`git-absent`};let r=jS(e),i=``;try{i=await r.raw(`log`,`-${Math.max(1,n)}`,`--format=%H|%aI|%an|%s`,`--follow`,`--`,t)}catch{return{commits:[],source:`git`}}let a=[];for(let e of i.split(`
|
|
919
|
-
`)){if(!e)continue;let t=e.indexOf(`|`);if(t<0)continue;let n=e.indexOf(`|`,t+1);if(n<0)continue;let r=e.indexOf(`|`,n+1);r<0||a.push({hash:e.slice(0,t),date:e.slice(t+1,n),authorName:e.slice(n+1,r),subject:e.slice(r+1)})}return{commits:a,source:`git`}}const
|
|
920
|
-
`).map(e=>e.trim()).filter(Boolean);return s.length===0?{commits:[],source:`shadow-repo`}:{commits:(await Promise.all(s.map(e=>
|
|
921
|
-
`);function
|
|
922
|
-
`),n=t[t.length-1]===``?t.length-1:t.length;if(n<=500&&e.length<=
|
|
923
|
-
`),s=n-a;return{text:`${o}\n<truncated: ${s} more lines — re-run with a more-specific query>`,truncated:!0,omittedLines:s}}function
|
|
924
|
-
`),a=i[i.length-1]===``?i.length-1:i.length;if(a<r)return null;let o=i.slice(0,a),s=new Set(o.map(e=>{let t=e.indexOf(`:`);return t>0?e.slice(0,t):e})).size,c=e.slice(0,-1).map(e=>e.command).join(` | `);return{banner:`Output hit \`${n.command} -${r}\` cap (${a} lines, ${s} unique file${s===1?``:`s`}). The \`${c}\` stage may have had more matches that never reached stdout. For existence checks across many files, prefer \`grep -rl PATTERN <dir>\` (list files only, no head). For enumeration, drop the \`| ${n.command}\` or widen the cap.`}}function
|
|
925
|
-
`)}async function
|
|
926
|
-
`)}\n\n`:``,D=
|
|
927
|
-
`);function
|
|
928
|
-
`),
|
|
929
|
-
`);function
|
|
930
|
-
`);function
|
|
931
|
-
`);function
|
|
932
|
-
`);function
|
|
933
|
-
`);function
|
|
918
|
+
`)}var Hx=new TextDecoder(`utf-8`,{fatal:!0});function Ux(e){if(!e)return e;let t=!1;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);if(r>255)return e;r>127&&(t=!0)}if(!t)return e;let n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);try{return Hx.decode(n)}catch{return e}}var Wx=[`EACCES`,`escaping sandbox`,`EFBIG`],Gx=class{root;canonicalRoot;maxFileReadSize;allowSymlinks;constructor(e){this.root=wn.resolve(e.root),this.maxFileReadSize=e.maxFileReadSize??10485760,this.allowSymlinks=e.allowSymlinks??!1,nn(this.root,`ReadWriteFs`),this.canonicalRoot=L.realpathSync(this.root)}resolveAndValidate(e,t){let n=this.allowSymlinks?en(e,this.canonicalRoot):tn(e,this.root,this.canonicalRoot);if(n===null)throw Error(`EACCES: permission denied, '${t}' resolves outside sandbox`);return n}validateParent(e,t){let n=wn.dirname(e),r=this.resolveAndValidate(n,t);return wn.join(r,wn.basename(e))}toRealPath(e){let t=Zt(e),n=wn.join(this.root,t);return wn.resolve(n)}async readFile(e,t){return sn(await this.readFileBuffer(e),an(t))}async readFileBuffer(e){I(e,`open`);let t=this.toRealPath(e),n=this.resolveAndValidate(t,e);try{let t=this.allowSymlinks?L.constants.O_RDONLY:L.constants.O_RDONLY|L.constants.O_NOFOLLOW,r=await L.promises.open(n,t);try{if(this.maxFileReadSize>0){let t=await r.stat();if(t.size>this.maxFileReadSize)throw Error(`EFBIG: file too large, read '${e}' (${t.size} bytes, max ${this.maxFileReadSize})`)}let t=await r.readFile();return new Uint8Array(t)}finally{await r.close()}}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, open '${e}'`);if(n.code===`EISDIR`)throw Error(`EISDIR: illegal operation on a directory, read '${e}'`);if(n.code===`ELOOP`)throw Error(`EACCES: permission denied, '${e}' is a symlink`);this.sanitizeError(t,e,`open`)}}async writeFile(e,t,n){I(e,`write`);let r=this.toRealPath(e),i=this.resolveAndValidate(r,e),a=on(t,an(n)),o=wn.dirname(i);try{await L.promises.mkdir(o,{recursive:!0}),i=this.resolveAndValidate(r,e);let t=this.allowSymlinks?0:L.constants.O_NOFOLLOW,n=L.constants.O_WRONLY|L.constants.O_CREAT|L.constants.O_TRUNC|t,s=await L.promises.open(i,n,438);try{await s.writeFile(a)}finally{await s.close()}}catch(t){if(t.code===`ELOOP`)throw Error(`EACCES: permission denied, '${e}' is a symlink`);this.sanitizeError(t,e,`write`)}}async appendFile(e,t,n){I(e,`append`);let r=this.toRealPath(e),i=this.resolveAndValidate(r,e),a=on(t,an(n)),o=wn.dirname(i);try{await L.promises.mkdir(o,{recursive:!0}),i=this.resolveAndValidate(r,e);let t=this.allowSymlinks?0:L.constants.O_NOFOLLOW,n=L.constants.O_WRONLY|L.constants.O_CREAT|L.constants.O_APPEND|t,s=await L.promises.open(i,n,438);try{await s.writeFile(a)}finally{await s.close()}}catch(t){if(t.code===`ELOOP`)throw Error(`EACCES: permission denied, '${e}' is a symlink`);this.sanitizeError(t,e,`append`)}}async exists(e){if(e.includes(`\0`))return!1;let t=this.toRealPath(e);try{let n=this.resolveAndValidate(t,e);return await L.promises.access(n),!0}catch{return!1}}async stat(e){I(e,`stat`);let t=this.toRealPath(e),n=this.resolveAndValidate(t,e);try{let t=await L.promises.lstat(n);if(!this.allowSymlinks&&t.isSymbolicLink())throw Error(`EACCES: permission denied, '${e}' is a symlink`);return{isFile:t.isFile(),isDirectory:t.isDirectory(),isSymbolicLink:t.isSymbolicLink(),mode:t.mode,size:t.size,mtime:t.mtime}}catch(t){if(t.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, stat '${e}'`);this.sanitizeError(t,e,`stat`)}}async lstat(e){I(e,`lstat`);let t=this.toRealPath(e),n=this.validateParent(t,e);try{let e=await L.promises.lstat(n);return{isFile:e.isFile(),isDirectory:e.isDirectory(),isSymbolicLink:e.isSymbolicLink(),mode:e.mode,size:e.size,mtime:e.mtime}}catch(t){if(t.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, lstat '${e}'`);this.sanitizeError(t,e,`lstat`)}}async mkdir(e,t){I(e,`mkdir`);let n=this.toRealPath(e),r=this.resolveAndValidate(n,e);try{await L.promises.mkdir(r,{recursive:t?.recursive})}catch(t){let n=t;if(n.code===`EEXIST`)throw Error(`EEXIST: file already exists, mkdir '${e}'`);if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.sanitizeError(t,e,`mkdir`)}}async readdir(e){return(await this.readdirWithFileTypes(e)).map(e=>e.name)}async readdirWithFileTypes(e){I(e,`scandir`);let t=this.toRealPath(e),n=this.resolveAndValidate(t,e);try{if(!this.allowSymlinks&&(await L.promises.lstat(n)).isSymbolicLink())throw Error(`EACCES: permission denied, '${e}' is a symlink`);return(await L.promises.readdir(n,{withFileTypes:!0})).map(e=>({name:e.name,isFile:e.isFile(),isDirectory:e.isDirectory(),isSymbolicLink:e.isSymbolicLink()})).sort((e,t)=>e.name<t.name?-1:e.name>t.name?1:0)}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, scandir '${e}'`);if(n.code===`ENOTDIR`)throw Error(`ENOTDIR: not a directory, scandir '${e}'`);this.sanitizeError(t,e,`scandir`)}}async rm(e,t){I(e,`rm`);let n=this.toRealPath(e),r=this.resolveAndValidate(n,e);try{await L.promises.rm(r,{recursive:t?.recursive??!1,force:t?.force??!1})}catch(n){let r=n;if(r.code===`ENOENT`&&!t?.force)throw Error(`ENOENT: no such file or directory, rm '${e}'`);if(r.code===`ENOTEMPTY`)throw Error(`ENOTEMPTY: directory not empty, rm '${e}'`);this.sanitizeError(n,e,`rm`)}}async cp(e,t,n){I(e,`cp`),I(t,`cp`);let r=this.toRealPath(e),i=this.toRealPath(t),a=this.resolveAndValidate(r,e),o=this.resolveAndValidate(i,t);try{await L.promises.cp(a,o,{recursive:n?.recursive??!1,filter:async e=>{try{if(L.lstatSync(e).isSymbolicLink()){let t=await L.promises.realpath(e).catch(()=>null);return t===null?!1:Jt(t,this.canonicalRoot)}return!0}catch(e){return e.code===`ENOENT`}}})}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, cp '${e}'`);if(n.code===`EISDIR`)throw Error(`EISDIR: is a directory, cp '${e}'`);this.sanitizeError(t,e,`cp`)}}async mv(e,t){I(e,`mv`),I(t,`mv`);let n=this.toRealPath(e),r=this.toRealPath(t),i=this.validateParent(n,e),a=this.validateParent(r,t);try{if((await L.promises.lstat(i)).isSymbolicLink()){let n=await L.promises.readlink(i),r=wn.resolve(wn.dirname(a),n);if(!Jt(await L.promises.realpath(r).catch(()=>r),this.canonicalRoot))throw Error(`EACCES: permission denied, mv '${e}' -> '${t}' would create symlink escaping sandbox`)}}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, mv '${e}'`);if(n.message?.includes(`EACCES`)||n.message?.includes(`escaping sandbox`))throw t}let o=wn.dirname(a);try{await L.promises.mkdir(o,{recursive:!0})}catch(e){this.sanitizeError(e,t,`mv`)}try{await L.promises.rename(i,a)}catch(n){let r=n;if(r.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, mv '${e}'`);if(r.code===`EXDEV`){await this.cp(e,t,{recursive:!0}),await this.rm(e,{recursive:!0});return}this.sanitizeError(n,e,`mv`)}try{if(L.lstatSync(a).isDirectory()&&this.findEscapingSymlinks(a).length>0)throw await L.promises.rename(a,i),Error(`EACCES: permission denied, mv '${e}' -> '${t}' would create symlinks escaping sandbox`)}catch(e){if(e.message?.includes(`EACCES`)||e.message?.includes(`escaping sandbox`))throw e}}resolvePath(e,t){return Xt(e,t)}getAllPaths(){let e=[];return this.scanDir(`/`,e),e}sanitizeError(e,t,n){$t(e,t,n,Wx)}findEscapingSymlinks(e){let t=[];try{let n=L.readdirSync(e);for(let r of n){let n=wn.join(e,r);try{let r=L.lstatSync(n);if(r.isSymbolicLink()){let r=L.readlinkSync(n),i=wn.resolve(e,r),a;try{a=L.realpathSync(i)}catch{a=i}Jt(a,this.canonicalRoot)||t.push(n)}else r.isDirectory()&&t.push(...this.findEscapingSymlinks(n))}catch{}}}catch{}return t}scanDir(e,t){let n=this.toRealPath(e),r;try{r=this.resolveAndValidate(n,e)}catch{return}try{let n=L.readdirSync(r);for(let i of n){let n=e===`/`?`/${i}`:`${e}/${i}`;t.push(n);let a=wn.join(r,i);L.lstatSync(a).isDirectory()&&this.scanDir(n,t)}}catch{}}async chmod(e,t){I(e,`chmod`);let n=this.toRealPath(e),r=this.resolveAndValidate(n,e);try{let e=this.allowSymlinks?L.constants.O_RDONLY:L.constants.O_RDONLY|L.constants.O_NOFOLLOW,n=await L.promises.open(r,e);try{await n.chmod(t)}finally{await n.close()}}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, chmod '${e}'`);if(n.code===`ELOOP`)throw Error(`EACCES: permission denied, '${e}' is a symlink`);this.sanitizeError(t,e,`chmod`)}}async symlink(e,t){if(!this.allowSymlinks)throw Error(`EPERM: operation not permitted, symlink '${t}'`);I(t,`symlink`);let n=this.toRealPath(t),r=this.validateParent(n,t),i=Zt(t),a=Zt(wn.dirname(i)),o=e.startsWith(`/`)?Zt(e):Zt(a===`/`?`/${e}`:`${a}/${e}`),s=wn.join(this.canonicalRoot,o),c=wn.dirname(r),l=e.startsWith(`/`)?s:wn.relative(c,s)||`.`;try{await L.promises.symlink(l,r)}catch(e){if(e.code===`EEXIST`)throw Error(`EEXIST: file already exists, symlink '${t}'`);this.sanitizeError(e,t,`symlink`)}}async link(e,t){I(e,`link`),I(t,`link`);let n=this.toRealPath(e),r=this.toRealPath(t),i=this.resolveAndValidate(n,e),a=this.resolveAndValidate(r,t);try{await L.promises.link(i,a)}catch(n){let r=n;if(r.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, link '${e}'`);if(r.code===`EEXIST`)throw Error(`EEXIST: file already exists, link '${t}'`);if(r.code===`EPERM`)throw Error(`EPERM: operation not permitted, link '${e}'`);this.sanitizeError(n,e,`link`)}}async readlink(e){I(e,`readlink`);let t=this.toRealPath(e),n=this.validateParent(t,e);try{let t=await L.promises.readlink(n),r=Zt(e),i=wn.dirname(r),a=wn.isAbsolute(t)?t:wn.resolve(wn.dirname(n),t),o=await L.promises.realpath(a).catch(()=>a);if(Jt(o,this.canonicalRoot)){let e=o.slice(this.canonicalRoot.length)||`/`;return i===`/`?e.startsWith(`/`)?e.slice(1)||`.`:e:wn.relative(i,e)}return wn.basename(t)}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, readlink '${e}'`);if(n.code===`EINVAL`)throw Error(`EINVAL: invalid argument, readlink '${e}'`);this.sanitizeError(t,e,`readlink`)}}async realpath(e){I(e,`realpath`);let t=this.toRealPath(e);try{this.resolveAndValidate(t,e)}catch{throw Error(`ENOENT: no such file or directory, realpath '${e}'`)}let n;try{n=await L.promises.realpath(t)}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, realpath '${e}'`);if(n.code===`ELOOP`)throw Error(`ELOOP: too many levels of symbolic links, realpath '${e}'`);this.sanitizeError(t,e,`realpath`)}if(Jt(n,this.canonicalRoot))return n.slice(this.canonicalRoot.length)||`/`;throw Error(`ENOENT: no such file or directory, realpath '${e}'`)}async utimes(e,t,n){I(e,`utimes`);let r=this.toRealPath(e),i=this.resolveAndValidate(r,e);try{let e=this.allowSymlinks?L.constants.O_RDONLY:L.constants.O_RDONLY|L.constants.O_NOFOLLOW,r=await L.promises.open(i,e);try{await r.utimes(t,n)}finally{await r.close()}}catch(t){let n=t;if(n.code===`ENOENT`)throw Error(`ENOENT: no such file or directory, utimes '${e}'`);if(n.code===`ELOOP`)throw Error(`EACCES: permission denied, '${e}' is a symlink`);this.sanitizeError(t,e,`utimes`)}}};function Kx(e){return e===``?`''`:/^[\w.\-/]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}const qx=16*1024*1024;var Jx=class extends Error{limitBytes;actualBytes;partial;constructor(e,t,n){super(`Output exceeded ${e} byte buffer (got ${t}); narrow the command`),this.name=`StdoutOverflowError`,this.limitBytes=e,this.actualBytes=t,this.partial=n}};function Yx(e){if(!On(e))throw Error(`createBashInstance: cwd must be absolute (got: ${e})`);return new Bx({cwd:`/`,fs:new Gx({root:jn(e),allowSymlinks:!1})})}async function Xx(e,t){let n=await e.exec(t);if(n.stdout.length>qx)throw new Jx(qx,n.stdout.length,{stdout:n.stdout.slice(0,qx),stderr:n.stderr,exitCode:n.exitCode});return{stdout:n.stdout,stderr:n.stderr,exitCode:n.exitCode}}function Zx(e){return e.startsWith(`**/`)?e.slice(3):e}async function Qx(e,t,n={}){let r=Yx(t),i=[`-rn`,`-F`];(n.caseInsensitive??!0)&&i.push(`-i`);for(let e of n.include??[])i.push(`--include=${Kx(Zx(e))}`);for(let e of n.exclude??[])i.push(`--exclude=${Kx(Zx(e))}`),i.push(`--exclude-dir=${Kx(Zx(e))}`);let a=n.paths?.length?n.paths.map(Kx):[`.`],o=`grep ${i.join(` `)} ${Kx(e)} ${a.join(` `)}`,s;try{s=await Xx(r,o)}catch(e){if(e instanceof Jx)s=e.partial;else throw e}if(s.exitCode===1&&!s.stdout)return[];if(s.exitCode!==0&&s.exitCode!==1&&!s.stdout)throw Error(`grep exited ${s.exitCode}: ${s.stderr}`);let c=[],l=n.maxResults??1/0;for(let e of s.stdout.split(`
|
|
919
|
+
`)){if(!e)continue;if(c.length>=l)break;let t=e.indexOf(`:`);if(t===-1)continue;let n=e.indexOf(`:`,t+1);if(n===-1)continue;let r=e.slice(0,t),i=e.slice(t+1,n),a=e.slice(n+1),o=Number.parseInt(i,10);Number.isFinite(o)&&c.push({path:r,line:o,text:a})}return c}const $x=new Set([`.git`,`.ok`,`node_modules`,`.changeset`,`.claude`,`.agents`,`dist`,`build`]);async function eS(e){let t=jn(e),n=new Map,r=0,i=!1;async function a(e){if(i)return;let o;try{o=await er(e,{withFileTypes:!0})}catch{return}for(let s of o){if(i)return;if(s.isDirectory()&&$x.has(s.name))continue;let o=jn(e,s.name);if(s.isDirectory()){await a(o);continue}if(s.isFile()){if(r>=1e3){i=!0;return}try{let e=await tr(o);n.set(An(t,o),e.mtimeMs),r++}catch{}}}}return await a(t),{snapshot:n,truncated:i}}function tS(e,t){let n=[];for(let[r,i]of t){let t=e.get(r);(t===void 0||t!==i)&&n.push(r)}for(let[r]of e)t.has(r)||n.push(r);return{changed:n}}var nS=n(((e,t)=>{t.exports=function(e){return e.map(function(e){return e===``?`''`:e&&typeof e==`object`?e.op.replace(/(.)/g,`\\$1`):/["\s\\]/.test(e)&&!/'/.test(e)?`'`+e.replace(/(['])/g,`\\$1`)+`'`:/["'\s]/.test(e)?`"`+e.replace(/(["\\$`!])/g,`\\$1`)+`"`:String(e).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g,`$1\\$2`)}).join(` `)}})),rS=n(((e,t)=>{for(var n=`(?:`+[`\\|\\|`,`\\&\\&`,`;;`,`\\|\\&`,`\\<\\(`,`\\<\\<\\<`,`>>`,`>\\&`,`<\\&`,`[&;()|<>]`].join(`|`)+`)`,r=RegExp(`^`+n+`$`),i=`|&;()<> \\t`,a=`"((\\\\"|[^"])*?)"`,o=`'((\\\\'|[^'])*?)'`,s=/^#$/,c=`'`,l=`"`,u=`$`,d=``,f=4294967296,p=0;p<4;p++)d+=(f*Math.random()).toString(16);var m=RegExp(`^`+d);function h(e,t){for(var n=t.lastIndex,r=[],i;i=t.exec(e);)r.push(i),t.lastIndex===i.index&&(t.lastIndex+=1);return t.lastIndex=n,r}function g(e,t,n){var r=typeof e==`function`?e(n):e[n];return r===void 0&&n!=``?r=``:r===void 0&&(r=`$`),typeof r==`object`?t+d+JSON.stringify(r)+d:t+r}function _(e,t,d){d||={};var f=d.escape||`\\`,p=`(\\`+f+`['"`+i+`]|[^\\s'"`+i+`])+`,m=h(e,new RegExp([`(`+n+`)`,`(`+p+`|`+a+`|`+o+`)+`].join(`|`),`g`));if(m.length===0)return[];t||={};var _=!1;return m.map(function(n){var i=n[0];if(!i||_)return;if(r.test(i))return{op:i};var a=!1,o=!1,d=``,p=!1,m;function h(){m+=1;var e,n,r=i.charAt(m);if(r===`{`){if(m+=1,i.charAt(m)===`}`)throw Error(`Bad substitution: `+i.slice(m-2,m+1));if(e=i.indexOf(`}`,m),e<0)throw Error(`Bad substitution: `+i.slice(m));n=i.slice(m,e),m=e}else if(/[*@#?$!_-]/.test(r))n=r,m+=1;else{var a=i.slice(m);e=a.match(/[^\w\d_]/),e?(n=a.slice(0,e.index),m+=e.index-1):(n=a,m=i.length)}return g(t,``,n)}for(m=0;m<i.length;m++){var v=i.charAt(m);if(p||=!a&&(v===`*`||v===`?`),o)d+=v,o=!1;else if(a)v===a?a=!1:a==c?d+=v:v===f?(m+=1,v=i.charAt(m),v===l||v===f||v===u?d+=v:d+=f+v):v===u?d+=h():d+=v;else if(v===l||v===c)a=v;else if(r.test(v))return{op:i};else if(s.test(v)){_=!0;var y={comment:e.slice(n.index+m+1)};return d.length?[d,y]:[y]}else v===f?o=!0:v===u?d+=h():d+=v}return p?{op:`glob`,pattern:d}:d}).reduce(function(e,t){return t===void 0?e:e.concat(t)},[])}t.exports=function(e,t,n){var r=_(e,t,n);return typeof t==`function`?r.reduce(function(e,t){if(typeof t==`object`)return e.concat(t);var n=t.split(RegExp(`(`+d+`.*?`+d+`)`,`g`));return n.length===1?e.concat(n[0]):e.concat(n.filter(Boolean).map(function(e){return m.test(e)?JSON.parse(e.split(d)[1]):e}))},[]):r}})),iS=t(n((e=>{e.quote=nS(),e.parse=rS()}))(),1);const aS=[`node_modules`,`.git`,`dist`,`build`,`.next`,`.turbo`,`.nuxt`,`coverage`,`.cache`,`.parcel-cache`,`.vercel`,`.ok`,`.claude`];function oS(e){return e===`--recursive`||e===`--dereference-recursive`?!0:e.startsWith(`--`)||!e.startsWith(`-`)?!1:/[rR]/.test(e.slice(1))}const sS=[{command:`grep`,applies:e=>e.slice(1).some(oS),hasUserExcludes:e=>e.some(e=>e===`--exclude-dir`||e.startsWith(`--exclude-dir=`)),buildExcludeArgs:e=>e.map(e=>`--exclude-dir=${e}`),insertionIndex:()=>1},{command:`find`,applies:()=>!0,hasUserExcludes:e=>e.slice(1).some(e=>e===`-not`||e===`!`||e===`-prune`),buildExcludeArgs:e=>{let t=[];for(let n of e)t.push(`-not`,`-path`,`*/${n}/*`);return t},insertionIndex:e=>{for(let t=1;t<e.length;t++)if(e[t].startsWith(`-`))return t;return e.length}}];function cS(e){return e.map(e=>{let t=sS.find(t=>t.command===e.command);if(!t||!t.applies(e.args)||t.hasUserExcludes(e.args))return e;let n=t.buildExcludeArgs(aS),r=t.insertionIndex(e.args);return{command:e.command,args:[...e.args.slice(0,r),...n,...e.args.slice(r)]}})}function lS(e){return e.map(e=>e.args.map(Kx).join(` `)).join(` | `)}const uS=new Set([`cat`,`ls`,`grep`,`find`,`head`,`tail`,`wc`,`sort`,`uniq`,`cut`]),dS=new Set([`>`,`>>`,`<`,`>&`,`<&`,`|&`]),fS=new Set([`&`,`;`,`;;`,`&&`,`||`,`(`,`)`,`<(`,`>(`,`<<`,`<<-`]),pS=new Set([`-o`,`--output-file`,`--output`]),mS=[`-o=`,`--output-file=`,`--output=`],hS=new Set([`-exec`,`-execdir`,`-delete`,`-fprint`,`-fprintf`,`-fprint0`,`-ok`,`-okdir`]),gS=/[`]|\$\(|\$\{|\$'/;function _S(e){return typeof e==`object`&&!!e&&`op`in e}function vS(e){let t=typeof e.op==`string`?e.op:`(unknown)`;return dS.has(t)?{category:`write_blocked`,message:`Write operation blocked: '${t}'. exec is read-only. For document changes, use write_document or edit_document.`}:fS.has(t)?{category:`shell_construct_blocked`,message:`Shell construct '${t}' is not supported. Only pipes (|) are allowed between allowlisted stages.`}:{category:`shell_construct_blocked`,message:`Operator '${t}' is not supported.`}}function yS(e){let t=[];for(let n of e){if(typeof n==`string`){if(gS.test(n))return{error:{category:`shell_construct_blocked`,message:`Argument '${n}' contains a shell-injection pattern (backtick, $(), or \${}); not supported.`}};t.push(n);continue}if(!_S(n))return{error:{category:`shell_construct_blocked`,message:`Unrecognized token shape.`}};if(n.op===`glob`&&typeof n.pattern==`string`){t.push(n.pattern);continue}return typeof n.comment==`string`?{error:{category:`shell_construct_blocked`,message:`Comments are not allowed in exec commands.`}}:{error:vS(n)}}return{args:t}}function bS(e){if(!uS.has(e.command))return{category:`unknown_command`,message:`Command '${e.command}' is not in the allowlist. For pattern matching try 'grep'; for file listing try 'ls' or 'find'. Allowlist: cat, ls, grep, find, head, tail, wc, sort, uniq, cut.`};for(let t of e.args.slice(1)){if(pS.has(t)||mS.some(e=>t.startsWith(e)))return{category:`write_blocked`,message:`Write operation blocked: '${t}'. exec is read-only. For document changes, use write_document or edit_document.`};if(e.command===`find`&&hS.has(t))return{category:`write_blocked`,message:`find flag '${t}' is blocked (executes commands or deletes files). Use exec for read-only discovery; chain with another allowlisted tool via '|' if you need to transform output.`}}return null}function xS(e){let t=e.trim();if(!t)return{error:{category:`unknown_command`,message:`Empty command.`}};let n;try{n=iS.parse(t)}catch{return{error:{category:`shell_construct_blocked`,message:`Failed to parse command — likely malformed quoting or an unsupported construct.`}}}let r=[],i=[];for(let e of n){if(_S(e)&&e.op===`|`){r.push(i),i=[];continue}i.push(e)}r.push(i);let a=[];for(let e of r){let t=yS(e);if(`error`in t)return t;if(t.args.length===0)return{error:{category:`shell_construct_blocked`,message:`Empty pipeline stage (trailing pipe or leading pipe).`}};let n={command:t.args[0],args:t.args},r=bS(n);if(r)return{error:r};a.push(n)}return{stages:a}}const SS=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/;function CS(e,t){let n=e.match(SS);if(!n)return null;try{let e=(0,sr.parse)(n[1]);if(Pe(e)){if(t){let n=t.safeParse(e);return n.success?n.data:null}return e}}catch{}return null}var wS=n(((e,t)=>{let n=`[^\\\\/]`,r=`[^/]`,i=`(?:\\/|$)`,a=`(?:^|\\/)`,o=`\\.{1,2}${i}`,s={DOT_LITERAL:`\\.`,PLUS_LITERAL:`\\+`,QMARK_LITERAL:`\\?`,SLASH_LITERAL:`\\/`,ONE_CHAR:`(?=.)`,QMARK:r,END_ANCHOR:i,DOTS_SLASH:o,NO_DOT:`(?!\\.)`,NO_DOTS:`(?!${a}${o})`,NO_DOT_SLASH:`(?!\\.{0,1}${i})`,NO_DOTS_SLASH:`(?!${o})`,QMARK_NO_DOT:`[^.\\/]`,STAR:`${r}*?`,START_ANCHOR:a,SEP:`/`},c={...s,SLASH_LITERAL:`[\\\\/]`,QMARK:n,STAR:`${n}*?`,DOTS_SLASH:`\\.{1,2}(?:[\\\\/]|$)`,NO_DOT:`(?!\\.)`,NO_DOTS:`(?!(?:^|[\\\\/])\\.{1,2}(?:[\\\\/]|$))`,NO_DOT_SLASH:`(?!\\.{0,1}(?:[\\\\/]|$))`,NO_DOTS_SLASH:`(?!\\.{1,2}(?:[\\\\/]|$))`,QMARK_NO_DOT:`[^.\\\\/]`,START_ANCHOR:`(?:^|[\\\\/])`,END_ANCHOR:`(?:[\\\\/]|$)`,SEP:`\\`};t.exports={DEFAULT_MAX_EXTGLOB_RECURSION:0,MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:{__proto__:null,alnum:`a-zA-Z0-9`,alpha:`a-zA-Z`,ascii:`\\x00-\\x7F`,blank:` \\t`,cntrl:`\\x00-\\x1F\\x7F`,digit:`0-9`,graph:`\\x21-\\x7E`,lower:`a-z`,print:`\\x20-\\x7E `,punct:`\\-!"#$%&'()\\*+,./:;<=>?@[\\]^_\`{|}~`,space:` \\t\\r\\n\\v\\f`,upper:`A-Z`,word:`A-Za-z0-9_`,xdigit:`A-Fa-f0-9`},REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{__proto__:null,"***":`*`,"**/**":`**`,"**/**/**":`**`},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,extglobChars(e){return{"!":{type:`negate`,open:`(?:(?!(?:`,close:`))${e.STAR})`},"?":{type:`qmark`,open:`(?:`,close:`)?`},"+":{type:`plus`,open:`(?:`,close:`)+`},"*":{type:`star`,open:`(?:`,close:`)*`},"@":{type:`at`,open:`(?:`,close:`)`}}},globChars(e){return e===!0?c:s}}})),TS=n((e=>{let{REGEX_BACKSLASH:t,REGEX_REMOVE_BACKSLASH:n,REGEX_SPECIAL_CHARS:r,REGEX_SPECIAL_CHARS_GLOBAL:i}=wS();e.isObject=e=>typeof e==`object`&&!!e&&!Array.isArray(e),e.hasRegexChars=e=>r.test(e),e.isRegexChar=t=>t.length===1&&e.hasRegexChars(t),e.escapeRegex=e=>e.replace(i,`\\$1`),e.toPosixSlashes=e=>e.replace(t,`/`),e.isWindows=()=>{if(typeof navigator<`u`&&navigator.platform){let e=navigator.platform.toLowerCase();return e===`win32`||e===`windows`}return typeof process<`u`&&process.platform?process.platform===`win32`:!1},e.removeBackslashes=e=>e.replace(n,e=>e===`\\`?``:e),e.escapeLast=(t,n,r)=>{let i=t.lastIndexOf(n,r);return i===-1?t:t[i-1]===`\\`?e.escapeLast(t,n,i-1):`${t.slice(0,i)}\\${t.slice(i)}`},e.removePrefix=(e,t={})=>{let n=e;return n.startsWith(`./`)&&(n=n.slice(2),t.prefix=`./`),n},e.wrapOutput=(e,t={},n={})=>{let r=`${n.contains?``:`^`}(?:${e})${n.contains?``:`$`}`;return t.negated===!0&&(r=`(?:^(?!${r}).*$)`),r},e.basename=(e,{windows:t}={})=>{let n=e.split(t?/[\\/]/:`/`),r=n[n.length-1];return r===``?n[n.length-2]:r}})),ES=n(((e,t)=>{let n=TS(),{CHAR_ASTERISK:r,CHAR_AT:i,CHAR_BACKWARD_SLASH:a,CHAR_COMMA:o,CHAR_DOT:s,CHAR_EXCLAMATION_MARK:c,CHAR_FORWARD_SLASH:l,CHAR_LEFT_CURLY_BRACE:u,CHAR_LEFT_PARENTHESES:d,CHAR_LEFT_SQUARE_BRACKET:f,CHAR_PLUS:p,CHAR_QUESTION_MARK:m,CHAR_RIGHT_CURLY_BRACE:h,CHAR_RIGHT_PARENTHESES:g,CHAR_RIGHT_SQUARE_BRACKET:_}=wS(),v=e=>e===l||e===a,y=e=>{e.isPrefix!==!0&&(e.depth=e.isGlobstar?1/0:1)};t.exports=(e,t)=>{let b=t||{},x=e.length-1,S=b.parts===!0||b.scanToEnd===!0,C=[],w=[],ee=[],T=e,E=-1,te=0,ne=0,D=!1,re=!1,ie=!1,O=!1,k=!1,ae=!1,oe=!1,A=!1,se=!1,ce=!1,le=0,j,M,N={value:``,depth:0,isGlob:!1},ue=()=>E>=x,de=()=>T.charCodeAt(E+1),fe=()=>(j=M,T.charCodeAt(++E));for(;E<x;){M=fe();let e;if(M===a){oe=N.backslashes=!0,M=fe(),M===u&&(ae=!0);continue}if(ae===!0||M===u){for(le++;ue()!==!0&&(M=fe());){if(M===a){oe=N.backslashes=!0,fe();continue}if(M===u){le++;continue}if(ae!==!0&&M===s&&(M=fe())===s){if(D=N.isBrace=!0,ie=N.isGlob=!0,ce=!0,S===!0)continue;break}if(ae!==!0&&M===o){if(D=N.isBrace=!0,ie=N.isGlob=!0,ce=!0,S===!0)continue;break}if(M===h&&(le--,le===0)){ae=!1,D=N.isBrace=!0,ce=!0;break}}if(S===!0)continue;break}if(M===l){if(C.push(E),w.push(N),N={value:``,depth:0,isGlob:!1},ce===!0)continue;if(j===s&&E===te+1){te+=2;continue}ne=E+1;continue}if(b.noext!==!0&&(M===p||M===i||M===r||M===m||M===c)&&de()===d){if(ie=N.isGlob=!0,O=N.isExtglob=!0,ce=!0,M===c&&E===te&&(se=!0),S===!0){for(;ue()!==!0&&(M=fe());){if(M===a){oe=N.backslashes=!0,M=fe();continue}if(M===g){ie=N.isGlob=!0,ce=!0;break}}continue}break}if(M===r){if(j===r&&(k=N.isGlobstar=!0),ie=N.isGlob=!0,ce=!0,S===!0)continue;break}if(M===m){if(ie=N.isGlob=!0,ce=!0,S===!0)continue;break}if(M===f){for(;ue()!==!0&&(e=fe());){if(e===a){oe=N.backslashes=!0,fe();continue}if(e===_){re=N.isBracket=!0,ie=N.isGlob=!0,ce=!0;break}}if(S===!0)continue;break}if(b.nonegate!==!0&&M===c&&E===te){A=N.negated=!0,te++;continue}if(b.noparen!==!0&&M===d){if(ie=N.isGlob=!0,S===!0){for(;ue()!==!0&&(M=fe());){if(M===d){oe=N.backslashes=!0,M=fe();continue}if(M===g){ce=!0;break}}continue}break}if(ie===!0){if(ce=!0,S===!0)continue;break}}b.noext===!0&&(O=!1,ie=!1);let pe=T,me=``,he=``;te>0&&(me=T.slice(0,te),T=T.slice(te),ne-=te),pe&&ie===!0&&ne>0?(pe=T.slice(0,ne),he=T.slice(ne)):ie===!0?(pe=``,he=T):pe=T,pe&&pe!==``&&pe!==`/`&&pe!==T&&v(pe.charCodeAt(pe.length-1))&&(pe=pe.slice(0,-1)),b.unescape===!0&&(he&&=n.removeBackslashes(he),pe&&oe===!0&&(pe=n.removeBackslashes(pe)));let ge={prefix:me,input:e,start:te,base:pe,glob:he,isBrace:D,isBracket:re,isGlob:ie,isExtglob:O,isGlobstar:k,negated:A,negatedExtglob:se};if(b.tokens===!0&&(ge.maxDepth=0,v(M)||w.push(N),ge.tokens=w),b.parts===!0||b.tokens===!0){let t;for(let n=0;n<C.length;n++){let r=t?t+1:te,i=C[n],a=e.slice(r,i);b.tokens&&(n===0&&te!==0?(w[n].isPrefix=!0,w[n].value=me):w[n].value=a,y(w[n]),ge.maxDepth+=w[n].depth),(n!==0||a!==``)&&ee.push(a),t=i}if(t&&t+1<e.length){let n=e.slice(t+1);ee.push(n),b.tokens&&(w[w.length-1].value=n,y(w[w.length-1]),ge.maxDepth+=w[w.length-1].depth)}ge.slashes=C,ge.parts=ee}return ge}})),DS=n(((e,t)=>{let n=wS(),r=TS(),{MAX_LENGTH:i,POSIX_REGEX_SOURCE:a,REGEX_NON_SPECIAL_CHARS:o,REGEX_SPECIAL_CHARS_BACKREF:s,REPLACEMENTS:c}=n,l=(e,t)=>{if(typeof t.expandRange==`function`)return t.expandRange(...e,t);e.sort();let n=`[${e.join(`-`)}]`;try{new RegExp(n)}catch{return e.map(e=>r.escapeRegex(e)).join(`..`)}return n},u=(e,t)=>`Missing ${e}: "${t}" - use "\\\\${t}" to match literal characters`,d=e=>{let t=[],n=0,r=0,i=0,a=``,o=!1;for(let s of e){if(o===!0){a+=s,o=!1;continue}if(s===`\\`){a+=s,o=!0;continue}if(s===`"`){i=i===1?0:1,a+=s;continue}if(i===0){if(s===`[`)n++;else if(s===`]`&&n>0)n--;else if(n===0){if(s===`(`)r++;else if(s===`)`&&r>0)r--;else if(s===`|`&&r===0){t.push(a),a=``;continue}}}a+=s}return t.push(a),t},f=e=>{let t=!1;for(let n of e){if(t===!0){t=!1;continue}if(n===`\\`){t=!0;continue}if(/[?*+@!()[\]{}]/.test(n))return!1}return!0},p=e=>{let t=e.trim(),n=!0;for(;n===!0;)n=!1,/^@\([^\\()[\]{}|]+\)$/.test(t)&&(t=t.slice(2,-1),n=!0);if(f(t))return t.replace(/\\(.)/g,`$1`)},m=e=>{let t=e.map(p).filter(Boolean);for(let e=0;e<t.length;e++)for(let n=e+1;n<t.length;n++){let r=t[e],i=t[n],a=r[0];if(!(!a||r!==a.repeat(r.length)||i!==a.repeat(i.length))&&(r===i||r.startsWith(i)||i.startsWith(r)))return!0}return!1},h=(e,t=!0)=>{if(e[0]!==`+`&&e[0]!==`*`||e[1]!==`(`)return;let n=0,r=0,i=0,a=!1;for(let o=1;o<e.length;o++){let s=e[o];if(a===!0){a=!1;continue}if(s===`\\`){a=!0;continue}if(s===`"`){i=i===1?0:1;continue}if(i!==1){if(s===`[`){n++;continue}if(s===`]`&&n>0){n--;continue}if(!(n>0)){if(s===`(`){r++;continue}if(s===`)`&&(r--,r===0))return t===!0&&o!==e.length-1?void 0:{type:e[0],body:e.slice(2,o),end:o}}}}},g=e=>{let t=0,n=[];for(;t<e.length;){let r=h(e.slice(t),!1);if(!r||r.type!==`*`)return;let i=d(r.body).map(e=>e.trim());if(i.length!==1)return;let a=p(i[0]);if(!a||a.length!==1)return;n.push(a),t+=r.end+1}if(!(n.length<1))return`${n.length===1?r.escapeRegex(n[0]):`[${n.map(e=>r.escapeRegex(e)).join(``)}]`}*`},_=e=>{let t=0,n=e.trim(),r=h(n);for(;r;)t++,n=r.body.trim(),r=h(n);return t},v=(e,t)=>{if(t.maxExtglobRecursion===!1)return{risky:!1};let r=typeof t.maxExtglobRecursion==`number`?t.maxExtglobRecursion:n.DEFAULT_MAX_EXTGLOB_RECURSION,i=d(e).map(e=>e.trim());if(i.length>1&&(i.some(e=>e===``)||i.some(e=>/^[*?]+$/.test(e))||m(i)))return{risky:!0};for(let e of i){let t=g(e);if(t)return{risky:!0,safeOutput:t};if(_(e)>r)return{risky:!0}}return{risky:!1}},y=(e,t)=>{if(typeof e!=`string`)throw TypeError(`Expected a string`);e=c[e]||e;let d={...t},f=typeof d.maxLength==`number`?Math.min(i,d.maxLength):i,p=e.length;if(p>f)throw SyntaxError(`Input length: ${p}, exceeds maximum allowed length: ${f}`);let m={type:`bos`,value:``,output:d.prepend||``},h=[m],g=d.capture?``:`?:`,_=n.globChars(d.windows),b=n.extglobChars(_),{DOT_LITERAL:x,PLUS_LITERAL:S,SLASH_LITERAL:C,ONE_CHAR:w,DOTS_SLASH:ee,NO_DOT:T,NO_DOT_SLASH:E,NO_DOTS_SLASH:te,QMARK:ne,QMARK_NO_DOT:D,STAR:re,START_ANCHOR:ie}=_,O=e=>`(${g}(?:(?!${ie}${e.dot?ee:x}).)*?)`,k=d.dot?``:T,ae=d.dot?ne:D,oe=d.bash===!0?O(d):re;d.capture&&(oe=`(${oe})`),typeof d.noext==`boolean`&&(d.noextglob=d.noext);let A={input:e,index:-1,start:0,dot:d.dot===!0,consumed:``,output:``,prefix:``,backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:h};e=r.removePrefix(e,A),p=e.length;let se=[],ce=[],le=[],j=m,M,N=()=>A.index===p-1,ue=A.peek=(t=1)=>e[A.index+t],de=A.advance=()=>e[++A.index]||``,fe=()=>e.slice(A.index+1),pe=(e=``,t=0)=>{A.consumed+=e,A.index+=t},me=e=>{A.output+=e.output==null?e.value:e.output,pe(e.value)},he=()=>{let e=1;for(;ue()===`!`&&(ue(2)!==`(`||ue(3)===`?`);)de(),A.start++,e++;return e%2==0?!1:(A.negated=!0,A.start++,!0)},ge=e=>{A[e]++,le.push(e)},_e=e=>{A[e]--,le.pop()},P=e=>{if(j.type===`globstar`){let t=A.braces>0&&(e.type===`comma`||e.type===`brace`),n=e.extglob===!0||se.length&&(e.type===`pipe`||e.type===`paren`);e.type!==`slash`&&e.type!==`paren`&&!t&&!n&&(A.output=A.output.slice(0,-j.output.length),j.type=`star`,j.value=`*`,j.output=oe,A.output+=j.output)}if(se.length&&e.type!==`paren`&&(se[se.length-1].inner+=e.value),(e.value||e.output)&&me(e),j&&j.type===`text`&&e.type===`text`){j.output=(j.output||j.value)+e.value,j.value+=e.value;return}e.prev=j,h.push(e),j=e},ve=(e,t)=>{let n={...b[t],conditions:1,inner:``};n.prev=j,n.parens=A.parens,n.output=A.output,n.startIndex=A.index,n.tokensIndex=h.length;let r=(d.capture?`(`:``)+n.open;ge(`parens`),P({type:e,value:t,output:A.output?``:w}),P({type:`paren`,extglob:!0,value:de(),output:r}),se.push(n)},ye=n=>{let i=e.slice(n.startIndex,A.index+1),a=v(e.slice(n.startIndex+2,A.index),d);if((n.type===`plus`||n.type===`star`)&&a.risky){let e=a.safeOutput?(n.output?``:w)+(d.capture?`(${a.safeOutput})`:a.safeOutput):void 0,t=h[n.tokensIndex];t.type=`text`,t.value=i,t.output=e||r.escapeRegex(i);for(let e=n.tokensIndex+1;e<h.length;e++)h[e].value=``,h[e].output=``,delete h[e].suffix;A.output=n.output+t.output,A.backtrack=!0,P({type:`paren`,extglob:!0,value:M,output:``}),_e(`parens`);return}let o=n.close+(d.capture?`)`:``),s;if(n.type===`negate`){let e=oe;n.inner&&n.inner.length>1&&n.inner.includes(`/`)&&(e=O(d)),(e!==oe||N()||/^\)+$/.test(fe()))&&(o=n.close=`)$))${e}`),n.inner.includes(`*`)&&(s=fe())&&/^\.[^\\/.]+$/.test(s)&&(o=n.close=`)${y(s,{...t,fastpaths:!1}).output})${e})`),n.prev.type===`bos`&&(A.negatedExtglob=!0)}P({type:`paren`,extglob:!0,value:M,output:o}),_e(`parens`)};if(d.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(e)){let n=!1,i=e.replace(s,(e,t,r,i,a,o)=>i===`\\`?(n=!0,e):i===`?`?t?t+i+(a?ne.repeat(a.length):``):o===0?ae+(a?ne.repeat(a.length):``):ne.repeat(r.length):i===`.`?x.repeat(r.length):i===`*`?t?t+i+(a?oe:``):oe:t?e:`\\${e}`);return n===!0&&(i=d.unescape===!0?i.replace(/\\/g,``):i.replace(/\\+/g,e=>e.length%2==0?`\\\\`:e?`\\`:``)),i===e&&d.contains===!0?(A.output=e,A):(A.output=r.wrapOutput(i,A,t),A)}for(;!N();){if(M=de(),M===`\0`)continue;if(M===`\\`){let e=ue();if(e===`/`&&d.bash!==!0||e===`.`||e===`;`)continue;if(!e){M+=`\\`,P({type:`text`,value:M});continue}let t=/^\\+/.exec(fe()),n=0;if(t&&t[0].length>2&&(n=t[0].length,A.index+=n,n%2!=0&&(M+=`\\`)),d.unescape===!0?M=de():M+=de(),A.brackets===0){P({type:`text`,value:M});continue}}if(A.brackets>0&&(M!==`]`||j.value===`[`||j.value===`[^`)){if(d.posix!==!1&&M===`:`){let e=j.value.slice(1);if(e.includes(`[`)&&(j.posix=!0,e.includes(`:`))){let e=j.value.lastIndexOf(`[`),t=j.value.slice(0,e),n=a[j.value.slice(e+2)];if(n){j.value=t+n,A.backtrack=!0,de(),!m.output&&h.indexOf(j)===1&&(m.output=w);continue}}}(M===`[`&&ue()!==`:`||M===`-`&&ue()===`]`)&&(M=`\\${M}`),M===`]`&&(j.value===`[`||j.value===`[^`)&&(M=`\\${M}`),d.posix===!0&&M===`!`&&j.value===`[`&&(M=`^`),j.value+=M,me({value:M});continue}if(A.quotes===1&&M!==`"`){M=r.escapeRegex(M),j.value+=M,me({value:M});continue}if(M===`"`){A.quotes=A.quotes===1?0:1,d.keepQuotes===!0&&P({type:`text`,value:M});continue}if(M===`(`){ge(`parens`),P({type:`paren`,value:M});continue}if(M===`)`){if(A.parens===0&&d.strictBrackets===!0)throw SyntaxError(u(`opening`,`(`));let e=se[se.length-1];if(e&&A.parens===e.parens+1){ye(se.pop());continue}P({type:`paren`,value:M,output:A.parens?`)`:`\\)`}),_e(`parens`);continue}if(M===`[`){if(d.nobracket===!0||!fe().includes(`]`)){if(d.nobracket!==!0&&d.strictBrackets===!0)throw SyntaxError(u(`closing`,`]`));M=`\\${M}`}else ge(`brackets`);P({type:`bracket`,value:M});continue}if(M===`]`){if(d.nobracket===!0||j&&j.type===`bracket`&&j.value.length===1){P({type:`text`,value:M,output:`\\${M}`});continue}if(A.brackets===0){if(d.strictBrackets===!0)throw SyntaxError(u(`opening`,`[`));P({type:`text`,value:M,output:`\\${M}`});continue}_e(`brackets`);let e=j.value.slice(1);if(j.posix!==!0&&e[0]===`^`&&!e.includes(`/`)&&(M=`/${M}`),j.value+=M,me({value:M}),d.literalBrackets===!1||r.hasRegexChars(e))continue;let t=r.escapeRegex(j.value);if(A.output=A.output.slice(0,-j.value.length),d.literalBrackets===!0){A.output+=t,j.value=t;continue}j.value=`(${g}${t}|${j.value})`,A.output+=j.value;continue}if(M===`{`&&d.nobrace!==!0){ge(`braces`);let e={type:`brace`,value:M,output:`(`,outputIndex:A.output.length,tokensIndex:A.tokens.length};ce.push(e),P(e);continue}if(M===`}`){let e=ce[ce.length-1];if(d.nobrace===!0||!e){P({type:`text`,value:M,output:M});continue}let t=`)`;if(e.dots===!0){let e=h.slice(),n=[];for(let t=e.length-1;t>=0&&(h.pop(),e[t].type!==`brace`);t--)e[t].type!==`dots`&&n.unshift(e[t].value);t=l(n,d),A.backtrack=!0}if(e.comma!==!0&&e.dots!==!0){let n=A.output.slice(0,e.outputIndex),r=A.tokens.slice(e.tokensIndex);e.value=e.output=`\\{`,M=t=`\\}`,A.output=n;for(let e of r)A.output+=e.output||e.value}P({type:`brace`,value:M,output:t}),_e(`braces`),ce.pop();continue}if(M===`|`){se.length>0&&se[se.length-1].conditions++,P({type:`text`,value:M});continue}if(M===`,`){let e=M,t=ce[ce.length-1];t&&le[le.length-1]===`braces`&&(t.comma=!0,e=`|`),P({type:`comma`,value:M,output:e});continue}if(M===`/`){if(j.type===`dot`&&A.index===A.start+1){A.start=A.index+1,A.consumed=``,A.output=``,h.pop(),j=m;continue}P({type:`slash`,value:M,output:C});continue}if(M===`.`){if(A.braces>0&&j.type===`dot`){j.value===`.`&&(j.output=x);let e=ce[ce.length-1];j.type=`dots`,j.output+=M,j.value+=M,e.dots=!0;continue}if(A.braces+A.parens===0&&j.type!==`bos`&&j.type!==`slash`){P({type:`text`,value:M,output:x});continue}P({type:`dot`,value:M,output:x});continue}if(M===`?`){if(!(j&&j.value===`(`)&&d.noextglob!==!0&&ue()===`(`&&ue(2)!==`?`){ve(`qmark`,M);continue}if(j&&j.type===`paren`){let e=ue(),t=M;(j.value===`(`&&!/[!=<:]/.test(e)||e===`<`&&!/<([!=]|\w+>)/.test(fe()))&&(t=`\\${M}`),P({type:`text`,value:M,output:t});continue}if(d.dot!==!0&&(j.type===`slash`||j.type===`bos`)){P({type:`qmark`,value:M,output:D});continue}P({type:`qmark`,value:M,output:ne});continue}if(M===`!`){if(d.noextglob!==!0&&ue()===`(`&&(ue(2)!==`?`||!/[!=<:]/.test(ue(3)))){ve(`negate`,M);continue}if(d.nonegate!==!0&&A.index===0){he();continue}}if(M===`+`){if(d.noextglob!==!0&&ue()===`(`&&ue(2)!==`?`){ve(`plus`,M);continue}if(j&&j.value===`(`||d.regex===!1){P({type:`plus`,value:M,output:S});continue}if(j&&(j.type===`bracket`||j.type===`paren`||j.type===`brace`)||A.parens>0){P({type:`plus`,value:M});continue}P({type:`plus`,value:S});continue}if(M===`@`){if(d.noextglob!==!0&&ue()===`(`&&ue(2)!==`?`){P({type:`at`,extglob:!0,value:M,output:``});continue}P({type:`text`,value:M});continue}if(M!==`*`){(M===`$`||M===`^`)&&(M=`\\${M}`);let e=o.exec(fe());e&&(M+=e[0],A.index+=e[0].length),P({type:`text`,value:M});continue}if(j&&(j.type===`globstar`||j.star===!0)){j.type=`star`,j.star=!0,j.value+=M,j.output=oe,A.backtrack=!0,A.globstar=!0,pe(M);continue}let t=fe();if(d.noextglob!==!0&&/^\([^?]/.test(t)){ve(`star`,M);continue}if(j.type===`star`){if(d.noglobstar===!0){pe(M);continue}let n=j.prev,r=n.prev,i=n.type===`slash`||n.type===`bos`,a=r&&(r.type===`star`||r.type===`globstar`);if(d.bash===!0&&(!i||t[0]&&t[0]!==`/`)){P({type:`star`,value:M,output:``});continue}let o=A.braces>0&&(n.type===`comma`||n.type===`brace`),s=se.length&&(n.type===`pipe`||n.type===`paren`);if(!i&&n.type!==`paren`&&!o&&!s){P({type:`star`,value:M,output:``});continue}for(;t.slice(0,3)===`/**`;){let n=e[A.index+4];if(n&&n!==`/`)break;t=t.slice(3),pe(`/**`,3)}if(n.type===`bos`&&N()){j.type=`globstar`,j.value+=M,j.output=O(d),A.output=j.output,A.globstar=!0,pe(M);continue}if(n.type===`slash`&&n.prev.type!==`bos`&&!a&&N()){A.output=A.output.slice(0,-(n.output+j.output).length),n.output=`(?:${n.output}`,j.type=`globstar`,j.output=O(d)+(d.strictSlashes?`)`:`|$)`),j.value+=M,A.globstar=!0,A.output+=n.output+j.output,pe(M);continue}if(n.type===`slash`&&n.prev.type!==`bos`&&t[0]===`/`){let e=t[1]===void 0?``:`|$`;A.output=A.output.slice(0,-(n.output+j.output).length),n.output=`(?:${n.output}`,j.type=`globstar`,j.output=`${O(d)}${C}|${C}${e})`,j.value+=M,A.output+=n.output+j.output,A.globstar=!0,pe(M+de()),P({type:`slash`,value:`/`,output:``});continue}if(n.type===`bos`&&t[0]===`/`){j.type=`globstar`,j.value+=M,j.output=`(?:^|${C}|${O(d)}${C})`,A.output=j.output,A.globstar=!0,pe(M+de()),P({type:`slash`,value:`/`,output:``});continue}A.output=A.output.slice(0,-j.output.length),j.type=`globstar`,j.output=O(d),j.value+=M,A.output+=j.output,A.globstar=!0,pe(M);continue}let n={type:`star`,value:M,output:oe};if(d.bash===!0){n.output=`.*?`,(j.type===`bos`||j.type===`slash`)&&(n.output=k+n.output),P(n);continue}if(j&&(j.type===`bracket`||j.type===`paren`)&&d.regex===!0){n.output=M,P(n);continue}(A.index===A.start||j.type===`slash`||j.type===`dot`)&&(j.type===`dot`?(A.output+=E,j.output+=E):d.dot===!0?(A.output+=te,j.output+=te):(A.output+=k,j.output+=k),ue()!==`*`&&(A.output+=w,j.output+=w)),P(n)}for(;A.brackets>0;){if(d.strictBrackets===!0)throw SyntaxError(u(`closing`,`]`));A.output=r.escapeLast(A.output,`[`),_e(`brackets`)}for(;A.parens>0;){if(d.strictBrackets===!0)throw SyntaxError(u(`closing`,`)`));A.output=r.escapeLast(A.output,`(`),_e(`parens`)}for(;A.braces>0;){if(d.strictBrackets===!0)throw SyntaxError(u(`closing`,`}`));A.output=r.escapeLast(A.output,`{`),_e(`braces`)}if(d.strictSlashes!==!0&&(j.type===`star`||j.type===`bracket`)&&P({type:`maybe_slash`,value:``,output:`${C}?`}),A.backtrack===!0){A.output=``;for(let e of A.tokens)A.output+=e.output==null?e.value:e.output,e.suffix&&(A.output+=e.suffix)}return A};y.fastpaths=(e,t)=>{let a={...t},o=typeof a.maxLength==`number`?Math.min(i,a.maxLength):i,s=e.length;if(s>o)throw SyntaxError(`Input length: ${s}, exceeds maximum allowed length: ${o}`);e=c[e]||e;let{DOT_LITERAL:l,SLASH_LITERAL:u,ONE_CHAR:d,DOTS_SLASH:f,NO_DOT:p,NO_DOTS:m,NO_DOTS_SLASH:h,STAR:g,START_ANCHOR:_}=n.globChars(a.windows),v=a.dot?m:p,y=a.dot?h:p,b=a.capture?``:`?:`,x={negated:!1,prefix:``},S=a.bash===!0?`.*?`:g;a.capture&&(S=`(${S})`);let C=e=>e.noglobstar===!0?S:`(${b}(?:(?!${_}${e.dot?f:l}).)*?)`,w=e=>{switch(e){case`*`:return`${v}${d}${S}`;case`.*`:return`${l}${d}${S}`;case`*.*`:return`${v}${S}${l}${d}${S}`;case`*/*`:return`${v}${S}${u}${d}${y}${S}`;case`**`:return v+C(a);case`**/*`:return`(?:${v}${C(a)}${u})?${y}${d}${S}`;case`**/*.*`:return`(?:${v}${C(a)}${u})?${y}${S}${l}${d}${S}`;case`**/.*`:return`(?:${v}${C(a)}${u})?${l}${d}${S}`;default:{let t=/^(.*?)\.(\w+)$/.exec(e);if(!t)return;let n=w(t[1]);return n?n+l+t[2]:void 0}}},ee=w(r.removePrefix(e,x));return ee&&a.strictSlashes!==!0&&(ee+=`${u}?`),ee},t.exports=y})),OS=n(((e,t)=>{let n=ES(),r=DS(),i=TS(),a=wS(),o=e=>e&&typeof e==`object`&&!Array.isArray(e),s=(e,t,n=!1)=>{if(Array.isArray(e)){let r=e.map(e=>s(e,t,n));return e=>{for(let t of r){let n=t(e);if(n)return n}return!1}}let r=o(e)&&e.tokens&&e.input;if(e===``||typeof e!=`string`&&!r)throw TypeError(`Expected pattern to be a non-empty string`);let i=t||{},a=i.windows,c=r?s.compileRe(e,t):s.makeRe(e,t,!1,!0),l=c.state;delete c.state;let u=()=>!1;if(i.ignore){let e={...t,ignore:null,onMatch:null,onResult:null};u=s(i.ignore,e,n)}let d=(n,r=!1)=>{let{isMatch:o,match:d,output:f}=s.test(n,c,t,{glob:e,posix:a}),p={glob:e,state:l,regex:c,posix:a,input:n,output:f,match:d,isMatch:o};return typeof i.onResult==`function`&&i.onResult(p),o===!1?(p.isMatch=!1,r?p:!1):u(n)?(typeof i.onIgnore==`function`&&i.onIgnore(p),p.isMatch=!1,r?p:!1):(typeof i.onMatch==`function`&&i.onMatch(p),r?p:!0)};return n&&(d.state=l),d};s.test=(e,t,n,{glob:r,posix:a}={})=>{if(typeof e!=`string`)throw TypeError(`Expected input to be a string`);if(e===``)return{isMatch:!1,output:``};let o=n||{},c=o.format||(a?i.toPosixSlashes:null),l=e===r,u=l&&c?c(e):e;return l===!1&&(u=c?c(e):e,l=u===r),(l===!1||o.capture===!0)&&(l=o.matchBase===!0||o.basename===!0?s.matchBase(e,t,n,a):t.exec(u)),{isMatch:!!l,match:l,output:u}},s.matchBase=(e,t,n)=>(t instanceof RegExp?t:s.makeRe(t,n)).test(i.basename(e)),s.isMatch=(e,t,n)=>s(t,n)(e),s.parse=(e,t)=>Array.isArray(e)?e.map(e=>s.parse(e,t)):r(e,{...t,fastpaths:!1}),s.scan=(e,t)=>n(e,t),s.compileRe=(e,t,n=!1,r=!1)=>{if(n===!0)return e.output;let i=t||{},a=i.contains?``:`^`,o=i.contains?``:`$`,c=`${a}(?:${e.output})${o}`;e&&e.negated===!0&&(c=`^(?!${c}).*$`);let l=s.toRegex(c,t);return r===!0&&(l.state=e),l},s.makeRe=(e,t={},n=!1,i=!1)=>{if(!e||typeof e!=`string`)throw TypeError(`Expected a non-empty string`);let a={negated:!1,fastpaths:!0};return t.fastpaths!==!1&&(e[0]===`.`||e[0]===`*`)&&(a.output=r.fastpaths(e,t)),a.output||(a=r(e,t)),s.compileRe(a,t,n,i)},s.toRegex=(e,t)=>{try{let n=t||{};return new RegExp(e,n.flags||(n.nocase?`i`:``))}catch(e){if(t&&t.debug===!0)throw e;return/$^/}},s.constants=a,t.exports=s})),kS=t(n(((e,t)=>{let n=OS(),r=TS();function i(e,t,i=!1){return t&&(t.windows===null||t.windows===void 0)&&(t={...t,windows:r.isWindows()}),n(e,t,i)}Object.assign(i,n),t.exports=i}))(),1);const AS=new WeakMap;function jS(e){let t=AS.get(e);if(t)return t;let n=e.map(e=>(0,kS.default)(e.match,{dot:!0}));return AS.set(e,n),n}function MS(e,t){if(e.length===0)return{};let n=jS(e),r={},i=[],a=!1;for(let o=0;o<e.length;o++){if(!n[o](t))continue;a=!0;let s=e[o].frontmatter;if(s.title!==void 0&&(r.title=s.title),s.description!==void 0&&(r.description=s.description),s.tags!==void 0)for(let e of s.tags)i.includes(e)||i.push(e)}return a?(i.length>0&&(r.tags=i),r):{}}function NS(e){try{return Bn(jn(e,`.git`)).isDirectory()}catch{return!1}}function PS(e){return ye({baseDir:jn(e),timeout:{block:5e3}})}async function FS(e,t,n=5){if(!NS(e))return{commits:[],source:`git-absent`};let r=PS(e),i=``;try{i=await r.raw(`log`,`-${Math.max(1,n)}`,`--format=%H|%aI|%an|%s`,`--follow`,`--`,t)}catch{return{commits:[],source:`git`}}let a=[];for(let e of i.split(`
|
|
920
|
+
`)){if(!e)continue;let t=e.indexOf(`|`);if(t<0)continue;let n=e.indexOf(`|`,t+1);if(n<0)continue;let r=e.indexOf(`|`,n+1);r<0||a.push({hash:e.slice(0,t),date:e.slice(t+1,n),authorName:e.slice(n+1,r),subject:e.slice(r+1)})}return{commits:a,source:`git`}}const IS=5e3;async function LS(e){try{let t=(await ye({baseDir:e,timeout:{block:IS}}).revparse([`--abbrev-ref`,`HEAD`])).trim();return t&&t!==`HEAD`?t:null}catch{return null}}function RS(e,t){return ye({baseDir:t,timeout:{block:IS}}).env({GIT_DIR:e,GIT_WORK_TREE:t})}function zS(e,t){let n=Ee(t);return e.startsWith(n)?e.slice(n.length):e}async function BS(e,t,n,r,i){let a=``;try{a=await e.raw(`log`,t,`-${Math.max(1,i*2)}`,`--format=%H%x00%aI%x00%an%x00%s%x00%B%x1e`,`--`,n)}catch{return[]}let o=zS(t,r),s=Oe(o),c=[];for(let e of a.split(``)){let t=e.trimStart();if(!t)continue;let[n=``,i=``,a=``,l=``,u=``]=t.split(`\0`),d=n.trim();d.length===40&&c.push({hash:d,date:i,writerName:a,message:l,contributors:Te(u),writerId:o,isAgent:s.isAgent,writerClassification:s.classification,branch:r})}return c}async function VS(e,t,n=5){let r=we(e);if(!r)return{commits:[],source:`shadow-repo-absent`};let i=await LS(e);if(!i)return{commits:[],source:`shadow-repo`};let a=RS(r,jn(e)),o=``;try{o=await a.raw(`for-each-ref`,Ee(i),`--format=%(refname)`)}catch{return{commits:[],source:`shadow-repo`}}let s=o.split(`
|
|
921
|
+
`).map(e=>e.trim()).filter(Boolean);return s.length===0?{commits:[],source:`shadow-repo`}:{commits:(await Promise.all(s.map(e=>BS(a,e,t,i,n)))).flat().sort((e,t)=>t.date.localeCompare(e.date)).slice(0,n),source:`shadow-repo`}}const HS=1e3,US=new Set([`.git`,`.ok`,`node_modules`,`.changeset`,`.claude`,`.agents`,`dist`,`build`]),WS=/\.(md|mdx)$/i,GS=T({title:x().optional(),description:x().optional(),tags:S(x()).default([])});function KS(e){return e.replace(/\.md$/,``).replace(/\.mdx$/,``)}async function qS(e){try{let t=CS(await $n(e,`utf-8`),GS);return t?{title:t.title,description:t.description,tags:t.tags??[]}:{tags:[]}}catch{return null}}async function JS(e,t){if(!e)return null;let n=await th(e,`/api/backlinks?docName=${encodeURIComponent(t)}`);if(!n.ok)return null;let r=n.backlinks??n.results??n.links;if(!Array.isArray(r))return[];let i=[];for(let e of r){if(typeof e!=`object`||!e)continue;let t=e,n=typeof t.docName==`string`?t.docName:typeof t.source==`string`?t.source:typeof t.page==`string`?t.page:void 0;n&&i.push({source:n,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null})}return i}async function YS(e,t){if(!e||t.length===0)return null;let n=[...new Set(t)],r=[];for(let e=0;e<n.length;e+=100)r.push(n.slice(e,e+100));let i=await Promise.all(r.map(async t=>{let n=await th(e,`/api/backlink-counts?docNames=${encodeURIComponent(t.join(`,`))}`);return n.ok?n.counts??{}:null})),a=new Map,o=!1;for(let e of i)if(e){o=!0;for(let[t,n]of Object.entries(e))typeof n==`number`&&Number.isFinite(n)&&a.set(t,n)}return o?a:null}async function XS(e,t){if(!e)return null;let n=await th(e,`/api/forward-links?docName=${encodeURIComponent(t)}`);if(!n.ok)return null;let r=n.forwardLinks??n.links??n.results;if(!Array.isArray(r))return[];let i=[];for(let e of r){if(typeof e!=`object`||!e)continue;let t=e;if(t.kind===`external`&&typeof t.url==`string`){i.push({kind:`external`,url:t.url,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null});continue}let n=typeof t.docName==`string`?t.docName:void 0;n&&i.push({kind:`doc`,docName:n,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null})}return i}function ZS(e,t,n){let r=t??[],i=r.length===0?{}:MS(r,n),a=e?.title??i.title,o=e?.description??i.description,s=e?.tags??[],c=i.tags??[],l;if(c.length===0)l=s;else{let e=new Set;l=[];for(let t of c)e.has(t)||(e.add(t),l.push(t));for(let t of s)e.has(t)||(e.add(t),l.push(t))}return{title:a,description:o,tags:l}}async function QS(e,t,n={}){let r=e.replace(/^\.\//,``).replace(/^\/+/,``),i=jn(t.projectDir,r),a=t.historyDepth??5,o=n.includeRichFields===!0,s=qS(i);if(!o){let e=ZS(await s,t.folderRules,r);return{path:r,title:e.title,description:e.description,tags:e.tags,backlinkCount:null,backlinks:null,forwardLinkCount:null,forwardLinks:null,history:null,historySource:null,projectHistory:null,projectHistorySource:null}}let[c,l,u,d,f]=await Promise.all([s,JS(t.serverUrl,KS(r)).catch(()=>null),XS(t.serverUrl,KS(r)).catch(()=>null),VS(t.projectDir,r,a).catch(()=>({commits:[],source:`shadow-repo`})),FS(t.projectDir,r,a).catch(()=>({commits:[],source:`git`}))]),p=ZS(c,t.folderRules,r);return{path:r,title:p.title,description:p.description,tags:p.tags,backlinkCount:l?.length??null,backlinks:l,forwardLinkCount:u?.length??null,forwardLinks:u,history:d.commits,historySource:d.source,projectHistory:f.commits,projectHistorySource:f.source}}async function $S(e,t){let n={directMdCount:0,recursiveMdCount:0,childDirCount:0,mostRecent:null,truncated:!1},r=0,i=[{path:e,depth:0}];for(;i.length>0;){let e=i.shift();if(!e)break;if(r>=HS){n.truncated=!0;break}let a;try{a=await er(e.path,{withFileTypes:!0})}catch{continue}for(let o of a){if(r>=HS){n.truncated=!0;break}r++;let a=o.name;if(o.isDirectory()){if(US.has(a)||a.startsWith(`.`))continue;e.depth===0&&n.childDirCount++,i.push({path:`${e.path}/${a}`,depth:e.depth+1})}else if(o.isFile()&&WS.test(a)){n.recursiveMdCount++,e.depth===0&&n.directMdCount++;let r=`${e.path}/${a}`;try{let e=await tr(r);(!n.mostRecent||e.mtimeMs>n.mostRecent.mtimeMs)&&(n.mostRecent={absPath:r,relPath:An(t,r).split(/[\\/]/).filter(Boolean).join(`/`),mtimeMs:e.mtimeMs})}catch{}}}}return n}async function eC(e,t){let n=e.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``),r=await $S(jn(t.projectDir,n),t.projectDir),i;if(r.mostRecent){let e=await qS(r.mostRecent.absPath);i={path:r.mostRecent.relPath,title:e?.title??En(r.mostRecent.relPath),updatedAt:new Date(r.mostRecent.mtimeMs).toISOString()}}let a={path:n,type:`directory`,directMdCount:r.directMdCount,recursiveMdCount:r.recursiveMdCount,childDirCount:r.childDirCount,mostRecentMd:i,truncated:r.truncated},o=t.folderRules??[];if(o.length>0){let e=MS(o,n);e.title!==void 0&&(a.title=e.title),e.description!==void 0&&(a.description=e.description),e.tags!==void 0&&e.tags.length>0&&(a.tags=e.tags)}return a}const tC=50*1024,nC=/\.(png|jpe?g|gif|webp|svg|pdf|zip|tar|gz|tgz|mp4|mov|mp3|wav|ico|bmp)$/i,rC=["**STOP — native tools on in-scope markdown (when project has `.ok/`).** When the active project contains `.ok/`, do NOT use your host's native `Read`, `Grep`, or `Glob` on `.md` / `.mdx` paths inside OK's content directory — use `exec` (this tool) instead. Native file tools skip frontmatter, backlinks, shadow-repo activity, and project git history that `exec` returns for every matched wiki file. Reserve native `Read`/`Grep`/`Glob` for source code, non-markdown paths, and projects without `.ok/`.",``,`Run a read-only bash-like command against the project content directory. Returns raw stdout plus enriched metadata for every wiki file referenced (frontmatter, backlink/forward-link counts, shadow-repo activity with agent/human attribution).`,``,`Allowlist: cat, ls, grep, find, head, tail, wc, sort, uniq, cut. Pipes (|) work between stages. Redirections, subshells, and writes are rejected.`,``,"cwd: the command runs in the explicit absolute `cwd` you pass, or in the MCP client's only advertised root when there is exactly one. If the client has zero or multiple roots, pass `cwd` explicitly. Paths inside the command resolve relative to that cwd; traversal above it is rejected.",``,"Stdout provenance headers (GNU-style): `ls <dir>/` prepends `<dir>/:`, single-file `cat`/`head`/`tail` prepends `==> <path> <==`, so the subject of the command is visible in raw output. Multi-file `cat a b` emits no header — the `enrichedPaths` array still lists every file. `head`/`tail` used as pipe trimmers (no file arg) defer to the upstream producer.",``,`Examples:`,'- `exec({ command: "cat articles/auth.md" })` — file contents + full enrichment','- `exec({ command: "ls articles/" })` — listing + per-file enrichment (slim)','- `exec({ command: "grep -rn oauth articles/ | head -5" })` — pipe with enrichment on matched files','- `exec({ command: "ls", cwd: "/abs/path/to/other-repo" })` — run in a different project'].join(`
|
|
922
|
+
`);function iC(e){let t=e.split(`
|
|
923
|
+
`),n=t[t.length-1]===``?t.length-1:t.length;if(n<=500&&e.length<=tC)return{text:e,truncated:!1,omittedLines:0};let r=Math.min(n,500),i=0,a=0;for(let e=0;e<r;e++){let n=t[e];if(i+=n.length+1,i>tC)break;a++}let o=t.slice(0,a).join(`
|
|
924
|
+
`),s=n-a;return{text:`${o}\n<truncated: ${s} more lines — re-run with a more-specific query>`,truncated:!0,omittedLines:s}}function aC(e){let t=[];for(let n of e)if(n.command===`cat`)for(let e of n.args.slice(1))e.startsWith(`-`)||nC.test(e)&&t.push(e);return t}function oC(e){for(let t=1;t<e.length;t++){let n=e[t],r=n.match(/^--lines=(\d+)$/);if(r)return Number(r[1]);if(n===`--lines`&&t+1<e.length){let n=Number(e[t+1]);if(Number.isFinite(n))return n}if(n===`-n`&&t+1<e.length){let n=Number(e[t+1]);if(Number.isFinite(n))return n}let i=n.match(/^-n(\d+)$/);if(i)return Number(i[1]);let a=n.match(/^-(\d+)$/);if(a)return Number(a[1])}return 10}function sC(e,t){if(e.length<2)return null;let n=e[e.length-1];if(n.command!==`head`&&n.command!==`tail`)return null;let r=oC(n.args),i=t.split(`
|
|
925
|
+
`),a=i[i.length-1]===``?i.length-1:i.length;if(a<r)return null;let o=i.slice(0,a),s=new Set(o.map(e=>{let t=e.indexOf(`:`);return t>0?e.slice(0,t):e})).size,c=e.slice(0,-1).map(e=>e.command).join(` | `);return{banner:`Output hit \`${n.command} -${r}\` cap (${a} lines, ${s} unique file${s===1?``:`s`}). The \`${c}\` stage may have had more matches that never reached stdout. For existence checks across many files, prefer \`grep -rl PATTERN <dir>\` (list files only, no head). For enumeration, drop the \`| ${n.command}\` or widen the cap.`}}function cC(e){return e.type===`directory`}function lC(e){let t=[e.title?`**${e.title}** (${e.path}/)`:`**${e.path}/** (directory)`];e.description&&t.push(e.description),e.tags&&e.tags.length>0&&t.push(`tags: ${e.tags.join(`, `)}`);let n=[];return n.push(`${e.recursiveMdCount} md file${e.recursiveMdCount===1?``:`s`}`),e.childDirCount>0&&n.push(`${e.childDirCount} subdir${e.childDirCount===1?``:`s`}`),t.push(n.join(`, `)),e.mostRecentMd&&t.push(`most recent: ${e.mostRecentMd.title??e.mostRecentMd.path} (${e.mostRecentMd.path})`),e.truncated&&t.push(`scan truncated`),`- ${t.join(` — `)}`}function uC(e){let t=[`**${e.title??e.path}** (${e.path})`];if(e.description&&t.push(e.description),e.tags.length>0&&t.push(`tags: ${e.tags.join(`, `)}`),e.backlinkCount!==null&&t.push(`backlinks: ${e.backlinkCount}`),e.forwardLinkCount!==null&&t.push(`forward links: ${e.forwardLinkCount}`),e.history&&e.history.length>0){let n=e.history.map(e=>{let t=e.writerClassification===`agent`?`agent: ${e.writerName}`:e.writerClassification===`principal`?`human: ${e.writerName}`:`${e.writerClassification}: ${e.writerName}`;return`${e.hash.slice(0,7)} [${t}] ${e.message}`});t.push(`OK edits: ${n.join(` · `)}`)}if(e.projectHistory&&e.projectHistory.length>0){let n=e.projectHistory.map(e=>`${e.hash.slice(0,7)} ${e.authorName}: ${e.subject}`);t.push(`commits: ${n.join(` · `)}`)}return`- ${t.join(` — `)}`}function dC(e,t,n){let r=null;for(let t=e.length-1;t>=0;t--){let n=e[t],i=n.command;if(i===`ls`||i===`cat`){r=n;break}if((i===`head`||i===`tail`)&&Th(wh(n)).length>0){r=n;break}}if(!r)return``;let i=Th(wh(r));if(r.command===`ls`){let e=i[i.length-1];if(!e||e===`.`)return``;let n=e.replace(/\/+/g,`/`);return n.startsWith(`./`)&&(n=n.slice(2)),n.endsWith(`/`)&&(n=n.slice(0,-1)),!n||!t.has(n)?``:`${n}/:\n`}let a=i.filter(e=>/\.(md|mdx)$/.test(e)&&n.has(e));return a.length===1?`==> ${a[0]} <==\n`:``}function fC(e){if(e.length===0)return``;let t=[``,`### Referenced files`,``];for(let n of e)t.push(cC(n)?lC(n):uC(n));return t.join(`
|
|
926
|
+
`)}async function pC(e,t){let n=[],r=[];return await Promise.all(t.map(async t=>{try{let i=await tr(jn(e,t));i.isDirectory()?r.push(t):i.isFile()&&n.push(t)}catch{/\.(md|mdx)$/i.test(t)&&n.push(t)}})),{files:n,dirs:r}}function mC(e,t){return Wm(t,{enrichedPaths:[],error:{category:e,message:t}},!0)}function hC(e,t){return e.map(e=>{let n=t(ph(e.path));return{...e,previewUrl:n?.url??null,...n?{previewUrlSource:n.source}:{}}})}async function gC(e,t){let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return mC(`shell_construct_blocked`,`exec failed: ${n.error}`);let{cwd:r,config:i,url:a}=n,o=xS(e.command);if(`error`in o)return mC(o.error.category,o.error.message);let s=cS(o.stages),c=lS(s),l=await eS(r),u=Yx(r),d=``,f=``;try{let e=await Xx(u,c);d=e.stdout,f=e.stderr}catch(e){return e instanceof Jx?mC(`output_overflow`,`Output exceeded 16 MB buffer. Narrow the command (e.g., add a more specific grep pattern, use head, restrict the path).`):mC(`shell_construct_blocked`,`exec failed: ${e instanceof Error?e.message:String(e)}`)}let p=await eS(r),m=tS(l.snapshot,p.snapshot);if(m.changed.length>0)return mC(`security_invariant_violation`,`Security invariant violated: file(s) in the content directory were modified during a read-only exec call: ${m.changed.join(`, `)}. This indicates a parser bug; the command has been logged.`);let h=iC(d),g=Nh(d,s),{files:_,dirs:v}=await pC(r,g),y=s.length===1&&s[0].command===`cat`&&_.length===1,b=i.folders,x=await Promise.all(_.map(e=>QS(e,{projectDir:r,serverUrl:a,folderRules:b},{includeRichFields:y}).catch(()=>({path:e,tags:[],backlinkCount:null,backlinks:null,forwardLinkCount:null,forwardLinks:null,history:null,historySource:null,projectHistory:null,projectHistorySource:null})))),S=await Promise.all(v.map(e=>eC(e,{projectDir:r,folderRules:b}).catch(()=>({path:e,type:`directory`,directMdCount:0,recursiveMdCount:0,childDirCount:0,truncated:!1}))));if(!y&&a&&x.length>0){let e=await YS(a,x.map(e=>KS(e.path))).catch(()=>null);if(e)for(let t of x){let n=e.get(KS(t.path));typeof n==`number`&&(t.backlinkCount=n)}}let C=new Map(x.map(e=>[e.path,e])),w=new Map(S.map(e=>[e.path,e])),ee=[];for(let e of g){let t=C.get(e);if(t){ee.push(t);continue}let n=w.get(e);n&&ee.push(n)}let T=aC(s),E=[];T.length>0&&E.push(`File${T.length>1?`s`:``} ${T.join(`, `)} appear${T.length===1?`s`:``} to be binary (image/PDF/etc.) — exec returns text only (NG8). For binary retrieval, use native Read.`);let te=sC(s,d);te&&E.push(te.banner),f&&E.push(`stderr: ${f.trim()}`);let ne=E.length>0?`${E.join(`
|
|
927
|
+
`)}\n\n`:``,D=dC(s,w,C)+h.text,re=`${ne}${D}${fC(ee)}`,{resolve:ie,ui:O}=await fh({config:i,resolveCwd:async()=>r}),k=hC(ee,ie),ae=O;return Wm(re,{enrichedPaths:k,stdout:D,stdoutTruncated:h.truncated,cwd:r,...ae?{ui:ae}:{},...E.length>0?{warnings:E}:{}})}function _C(e,t){e.tool(`exec`,rC,{command:x().describe(`Read-only bash command (allowlist: cat, ls, grep, find, head, tail, wc, sort, uniq, cut; pipes OK)`),cwd:x().optional().describe("Absolute host path to run the command from. Defaults only when the MCP client advertises exactly one root; otherwise pass `cwd` explicitly.")},async e=>{try{return await gC(e,t)}catch(e){return mC(`shell_construct_blocked`,`exec handler error: ${e instanceof Error?e.message:String(e)}`)}})}const vC=[`[Requires: Hocuspocus server] Find all pages that link to a given page.`,`Returns source page names, resolved titles, and context snippets as JSON.`,``,`**Parameters:**`,'- `docName` — Target page docName, typically without extension (for example, "articles/project-alpha"). A trailing `.md` or `.mdx` is stripped automatically.'].join(`
|
|
928
|
+
`);function yC(e,t){e.tool(`get_backlinks`,vC,{docName:x().describe(`Target page docName`),cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,url:i}=n;if(!i)return Z(Gm,!0);let a=eh(e.docName);if(!a.ok)return Z(a.error,!0);let o=await th(i,`/api/backlinks?docName=${encodeURIComponent(a.docName)}`);if(!o.ok)return Z(`Error: ${o.error}`,!0);let{ok:s,...c}=o,l=c,{resolve:u,ui:d}=await fh(t,r),f=(l.backlinks??[]).map(e=>{let t=typeof e.source==`string`?e.source:null,n=t?u(t):null;return{...e,previewUrl:n?.url??null,...n?{previewUrlSource:n.source}:{}}}),p={...l,backlinks:f,ui:d,cwd:r};return Wm(JSON.stringify(p,null,2),p)})}const bC=[`[Operates on disk; no running OK server required] Read the effective merged Open Knowledge config (defaults → user → project).`,``,"Use this when you need to inspect the config mid-session — e.g., after a write that may have changed disk state, or to re-confirm the value of a field before composing a `set_config` patch.",``,"Read returns the FULL merged config or a sub-tree when `path` is provided. There is no allowlist on reads — every field is readable.",``,`**Parameters:**`,'- `path` (optional) — Dotted-segments array. `["folders"]` returns the folders array; `["mcp", "tools"]` returns the mcp.tools sub-tree. Omit for full config.',"- `cwd` (optional) — Project root (see `cwd` description below)."].join(`
|
|
929
|
+
`),xC={path:S(x()).optional().describe(`Dotted path as array of segments (e.g. ["mcp","tools","search"]). Omit to return the full merged config.`),cwd:x().optional().describe(Hm)},SC={value:v().describe(`Resolved config value at the requested path (or full config).`),exists:D().optional().describe('Whether the requested path resolved to a value. `false` distinguishes "path absent" from "path explicitly set to null"; absent on full-config reads.'),path:S(x()).optional().describe(`Echo of the requested dotted path (empty when reading the full config).`)};function CC(e,t){let n=e;for(let e of t){if(typeof n!=`object`||!n)return;n=n[e]}return n}function wC(e,t){e.registerTool(`get_config`,{description:bC,inputSchema:xC,outputSchema:SC,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{let n=await Qm(t.resolveCwd,t.config,e.cwd);if(!n.ok)return{isError:!0,content:[{type:`text`,text:`Error: ${n.error}`}]};let r=e.path??[],i=r.length>0?CC(n.config,r):n.config;return r.length>0&&i===void 0?Wm(`(no value at ${r.join(`.`)})`,{value:null,exists:!1,path:r}):Wm(JSON.stringify(i,null,2),{value:i,exists:!0,path:r})})}const TC=[`[Requires: Hocuspocus server] Find missing internal page targets across the corpus.`,`Returns grouped dead links keyed by missing target with source-doc rows as JSON.`,``,`**Parameters:**`,"- `sourceDocNames` (optional) — Referring source docs to narrow the audit with OR semantics"].join(`
|
|
930
|
+
`);function EC(e,t){e.tool(`get_dead_links`,TC,{sourceDocNames:S(x()).optional().describe(`Referring source docs to narrow the audit with OR semantics`),cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,url:i}=n;if(!i)return Z(Gm,!0);let a=new URLSearchParams;for(let t of e.sourceDocNames??[]){let e=eh(t);if(!e.ok)return Z(e.error,!0);a.append(`sourceDocName`,e.docName)}let o=a.toString(),s=await th(i,`/api/dead-links${o?`?${o}`:``}`);if(!s.ok)return Z(`Error: ${s.error}`,!0);let{ok:c,...l}=s,u=l,{resolve:d,ui:f}=await fh(t,r),p=(u.deadLinks??[]).map(e=>{let t=typeof e.target==`string`?e.target:null,n=t?d(t):null,r=(e.sources??[]).map(e=>{let t=typeof e.source==`string`?e.source:null,n=t?d(t):null;return{...e,previewUrl:n?.url??null,...n?{previewUrlSource:n.source}:{}}});return{...e,sources:r,previewUrl:n?.url??null,...n?{previewUrlSource:n.source}:{}}}),m={...u,deadLinks:p,ui:f,cwd:r};return Wm(JSON.stringify(m,null,2),m)})}const DC=[`[Requires: Hocuspocus server] Find all pages that a given page links to.`,`Returns forward links as JSON.`,``,`**Parameters:**`,"- `docName` — Source page docName, typically without extension. A trailing `.md` or `.mdx` is stripped automatically."].join(`
|
|
931
|
+
`);function OC(e,t){e.tool(`get_forward_links`,DC,{docName:x().describe(`Source page docName`),cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,url:i}=n;if(!i)return Z(Gm,!0);let a=eh(e.docName);if(!a.ok)return Z(a.error,!0);let o=await th(i,`/api/forward-links?docName=${encodeURIComponent(a.docName)}`);if(!o.ok)return Z(`Error: ${o.error}`,!0);let{ok:s,...c}=o,l=c,{resolve:u,ui:d}=await fh(t,r),f=(l.forwardLinks??[]).map(e=>{let t=e.kind===`doc`&&typeof e.docName==`string`?e.docName:null,n=t?u(t):null;return{...e,previewUrl:n?.url??null,...n?{previewUrlSource:n.source}:{}}}),p={...l,forwardLinks:f,ui:d,cwd:r};return Wm(JSON.stringify(p,null,2),p)})}const kC=[`[Requires: Hocuspocus server] List version history for a document.`,`Returns timeline entries from the shadow repo, sorted by timestamp descending.`,"Each entry includes a commit SHA that can be passed to `rollback_to_version`.",``,`**Parameters:**`,"- `docName` — Document name to query history for, typically without extension. A trailing `.md` or `.mdx` is stripped automatically.","- `branch` (optional) — Branch name (default: current branch)","- `limit` (optional) — Maximum entries to return (default 50, max 200)","- `offset` (optional) — Number of entries to skip for pagination (default 0)",'- `type` (optional) — Filter by entry type: "checkpoint", "upstream", or "wip"',"- `author` (optional) — Filter to entries by this author name or email","- `excludeAuthor` (optional) — Exclude entries by this author name or email"].join(`
|
|
932
|
+
`);function AC(e,t){e.tool(`get_history`,kC,{docName:x().describe(`Document name to query history for`),branch:x().optional().describe(`Branch name (default: current branch)`),limit:E().int().min(1).max(200).optional().describe(`Maximum entries to return (default 50, max 200)`),offset:E().int().min(0).optional().describe(`Number of entries to skip for pagination (default 0)`),type:O([`checkpoint`,`upstream`,`wip`]).optional().describe(`Filter by entry type`),author:x().optional().describe(`Filter to entries by this author name or email`),excludeAuthor:x().optional().describe(`Exclude entries by this author name or email`),cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,url:i}=n;if(!i)return Z(Gm,!0);let a=eh(e.docName);if(!a.ok)return Z(a.error,!0);let o=new URLSearchParams;o.set(`docName`,a.docName),e.branch&&o.set(`branch`,e.branch),e.limit!=null&&o.set(`limit`,String(e.limit)),e.offset!=null&&o.set(`offset`,String(e.offset)),e.type&&o.set(`type`,e.type),e.author&&o.set(`author`,e.author),e.excludeAuthor&&o.set(`excludeAuthor`,e.excludeAuthor);let s=await th(i,`/api/history?${o.toString()}`);if(!s.ok)return Z(`Error: ${s.error}`,!0);let{ok:c,...l}=s,u=await uh(a.docName,{config:t.config,resolveCwd:t.resolveCwd},r);return Wm(JSON.stringify(l,null,2),{...l,previewUrl:u?.url??null,...u?{previewUrlSource:u.source}:{}})})}const jC=[`[Requires: Hocuspocus server] Find the most-linked pages in the knowledge graph.`,`Returns hub pages ordered by inbound link count as JSON.`,``,`**Parameters:**`,"- `limit` (optional) — Maximum number of hubs to return (default 20)"].join(`
|
|
933
|
+
`);function MC(e,t){e.tool(`get_hubs`,jC,{limit:E().int().positive().optional().describe(`Maximum number of hubs to return`),cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,url:i}=n;if(!i)return Z(Gm,!0);let a=await th(i,`/api/hubs${e.limit?`?limit=${encodeURIComponent(String(e.limit))}`:``}`);if(!a.ok)return Z(`Error: ${a.error}`,!0);let{ok:o,...s}=a,c=s,{resolve:l,ui:u}=await fh(t,r),d=(c.hubs??[]).map(e=>{let t=typeof e.docName==`string`?e.docName:null,n=t?l(t):null;return{...e,previewUrl:n?.url??null,...n?{previewUrlSource:n.source}:{}}}),f={...c,hubs:d,ui:u,cwd:r};return Wm(JSON.stringify(f,null,2),f)})}const NC=[`[Requires: Hocuspocus server] Find disconnected pages in the knowledge graph.`,`Returns orphaned pages as JSON.`,``,`**Parameters:**`,"- `mode` (optional) — Orphan lens: `incoming`, `outgoing`, or `both` (default `both`)"].join(`
|
|
934
|
+
`);function PC(e,t){e.tool(`get_orphans`,NC,{mode:O(le).optional().describe(`Filter which type of graph disconnection to surface`),cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,url:i}=n;if(!i)return Z(Gm,!0);let a=await th(i,`/api/orphans${e.mode?`?mode=${encodeURIComponent(e.mode)}`:``}`);if(!a.ok)return Z(`Error: ${a.error}`,!0);let{ok:o,...s}=a,c=s,{resolve:l,ui:u}=await fh(t,r),d=(c.orphans??[]).map(e=>{let t=typeof e.docName==`string`?e.docName:null,n=t?l(t):null;return{...e,previewUrl:n?.url??null,...n?{previewUrlSource:n.source}:{}}}),f={...c,orphans:d,ui:u,cwd:r};return Wm(JSON.stringify(f,null,2),f)})}function FC(e,t){return`${Ym(`ingest`)}Capture this external source into the project knowledge base as raw reference material. The KB is **closed-loop**: external sources are pulled INTO the knowledge base here so downstream docs cite local paths, never bare web URLs. This applies whether a user shared the source OR you fetched it yourself to ground a knowledge-base claim — agent-initiated fetches are not exempt. **Raw preservation only** — no summary, no analysis, no interpretation. Summarizing is the job of the \`research\` tool later.
|
|
934
935
|
|
|
935
936
|
Source: ${e}
|
|
936
937
|
|
|
@@ -1011,19 +1012,19 @@ If the source is directly relevant to an existing article or research doc, updat
|
|
|
1011
1012
|
- **No promotion to a canonical article** — that's the \`consolidate\` tool's job, later
|
|
1012
1013
|
- **No silent chaining into research** — ingest completes on its own; the user explicitly opts into \`research\`
|
|
1013
1014
|
- **No synthesis inside the raw file** — the takeaways live in chat or a separate summary doc, never mixed into the preserved source
|
|
1014
|
-
`}const
|
|
1015
|
-
`);function
|
|
1016
|
-
`);function
|
|
1017
|
-
`);function
|
|
1018
|
-
`)}function
|
|
1019
|
-
`)}function
|
|
1020
|
-
`)}function
|
|
1021
|
-
`)}function
|
|
1022
|
-
`)}function
|
|
1023
|
-
`);function
|
|
1024
|
-
`),v)})}const
|
|
1025
|
-
`);function
|
|
1026
|
-
`),m)})}function
|
|
1015
|
+
`}const IC=[`Fetch an external source (URL or local file) and save raw content as reference material in the project content directory.`,`Raw preservation only — no analysis or interpretation.`,`The knowledge base is closed-loop: web sources cited by KB docs MUST resolve to a local doc captured here, not bare URLs.`,``,`**Use when:**`,`- Capturing reference material for the project knowledge base`,`- Saving a URL or document for later research`,`- Archiving an external source alongside the codebase`,`- The user shares a URL or document they want preserved`,"- **You yourself fetched a URL (`WebFetch` / `WebSearch` / equivalent) to ground a claim that is about to land in a knowledge-base doc** — agent-initiated fetches are not exempt from the closed-loop rule",``,`**Triggers on:**`,`- "ingest", "save this source", "capture this URL", "add to external sources"`,`- User shares a URL, article, or document to preserve in the knowledge base`,`- Agent fetches a URL via WebFetch/WebSearch to support a knowledge-base claim — preserve the source before citing it`,`- Research workflow needs raw sources before analysis`].join(`
|
|
1016
|
+
`);function LC(e,t){e.tool(`ingest`,IC,{source:x().describe(`URL, file path, or identifier of the source to ingest`),cwd:x().optional().describe(Hm)},async e=>{let n=await Qm(t.resolveCwd,t.config,e.cwd);return n.ok?Wm(FC(e.source,n.config.content.dir),{previewUrl:null}):Z(`Error: ${n.error}`,!0)})}const RC=[`[Requires: Hocuspocus server] List available documents from the Hocuspocus server.`,`Returns document names, optionally filtered by directory.`,``,`**Parameters:**`,"- `dir` (optional) — Filter to documents in this directory"].join(`
|
|
1017
|
+
`);function zC(e,t){e.tool(`list_documents`,RC,{dir:x().optional().describe(`Optional directory to filter documents`),cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,url:i}=n;if(!i)return Z(Gm,!0);let a=await th(i,`/api/documents${e.dir?`?dir=${encodeURIComponent(e.dir)}`:``}`);if(!a.ok)return Z(`Error: ${a.error}`,!0);let{ok:o,...s}=a,c=s,{resolve:l,ui:u}=await fh(t,r),d=(c.documents??[]).map(e=>{let t=typeof e.docName==`string`?e.docName:null,n=t?l(t):null;return{...e,previewUrl:n?.url??null,...n?{previewUrlSource:n.source}:{}}}),f={...c,documents:d,ui:u,cwd:r};return Wm(JSON.stringify(f,null,2),f)})}const BC=[`Read a wiki file with enriched context: contents + frontmatter metadata + recent shadow-repo activity (agent vs human attribution) + backlink/forward-link context.`,``,`**Use when:**`,`- Loading an article for context`,`- Understanding who changed a file recently and whether it was an agent or human`,`- Seeing how this page links out and what links back to it`,``,"**When the project has `.ok/`**, strongly prefer this over your native `Read` for wiki files — one call returns what otherwise takes 3-4. In projects without `.ok/`, use native `Read` as usual.",``,`**Parameters:**`,"- `path` — Project-root-relative path to the file, including extension (e.g. `articles/auth/sso.md`). To pass this document to `edit_document` / `write_document` / `get_backlinks`, strip the extension (they take extension-less `docName`).","- `since` (reserved) — Reserved for shadow-log since-filter; currently unused."].join(`
|
|
1018
|
+
`);function VC(e){if(!e||e.length===0)return``;let t=[``,`### Recent activity (OK edits)`,``];for(let n of e){let e=n.writerClassification===`agent`?`agent: ${n.writerName}`:n.writerClassification===`principal`?`human: ${n.writerName}`:`${n.writerClassification}: ${n.writerName}`,r=n.hash.slice(0,7);t.push(`- ${r} ${n.date} [${e}] ${n.message}`)}return t.join(`
|
|
1019
|
+
`)}function HC(e){if(!e||e.length===0)return``;let t=[``,`### Commit history (project git)`,``];for(let n of e){let e=n.hash.slice(0,7);t.push(`- ${e} ${n.date} ${n.authorName} — ${n.subject}`)}return t.join(`
|
|
1020
|
+
`)}function UC(e){if(!e||e.length===0)return``;let t=[``,`### Backlinks (${e.length})`,``];for(let n of e){let e=n.title?` — "${n.title}"`:``,r=n.snippet?` — "${n.snippet}"`:``;t.push(`- ${n.source}${e}${r}`)}return t.join(`
|
|
1021
|
+
`)}function WC(e){if(!e||e.length===0)return``;let t=[``,`### Forward links (${e.length})`,``];for(let n of e){if(n.kind===`external`){let e=n.title?` — "${n.title}"`:``,r=n.snippet?` — "${n.snippet}"`:``;t.push(`- ${n.url}${e}${r}`);continue}let e=n.title?` — "${n.title}"`:``,r=n.snippet?` — "${n.snippet}"`:``;t.push(`- ${n.docName}${e}${r}`)}return t.join(`
|
|
1022
|
+
`)}function GC(e){return e.replace(/^\.\//,``).replace(/^\/+/,``)}function KC(e){return e.replace(/\.(md|mdx)$/i,``)}async function qC(e,t){let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)throw Error(n.error);let{cwd:r,config:i,url:a}=n,o=GC(e.path),s=jn(r,o),c=i.mcp.tools.read_document.historyDepth,[l,u]=await Promise.all([$n(s,`utf-8`),QS(o,{projectDir:r,serverUrl:a,historyDepth:c,folderRules:i.folders},{includeRichFields:!0})]),d=o.split(`/`).pop()?.replace(/\.md$/,``).replace(/\.mdx$/,``)??o,f=u.title??d,p=u.description??``,m=u.tags,h=[];h.push(`## ${f}`),p&&h.push(`**Description:** ${p}`),m.length>0&&h.push(`**Tags:** ${m.join(`, `)}`),h.push(`**Path:** ${o}`);let g=VC(u.history);g&&h.push(g);let _=HC(u.projectHistory);_&&h.push(_);let v=UC(u.backlinks);v&&h.push(v);let y=WC(u.forwardLinks);return y&&h.push(y),h.push(``,`### Content`,``,l),h.join(`
|
|
1023
|
+
`)}function JC(e,t){e.tool(`read_document`,BC,{path:x().describe(`Project-root-relative path to the file`),since:x().optional().describe(`Reserved; currently unused (§15 Future Work)`),cwd:x().optional().describe("Absolute host path to resolve `path` against. Defaults only when the MCP client advertises exactly one root; otherwise pass `cwd` explicitly.")},async e=>{try{let n=await qC(e,t),r=await uh(KC(GC(e.path)),{config:t.config,resolveCwd:t.resolveCwd},await t.resolveCwd(e.cwd));return r?Wm(n,{previewUrl:r.url,previewUrlSource:r.source}):Wm(n,{previewUrl:null})}catch(e){return Z(`Error: ${e instanceof Error?e.message:String(e)}`,!0)}})}const YC=["[Requires: Hocuspocus server] Rename a document through the managed rename flow at `POST /api/rename-path` (kind: file).",`Renames the target document and rewrites inbound wiki-links plus supported internal inline Markdown links in affected docs.`,``,`**Parameters:**`,"- `docName` — Current document name, typically without extension. A trailing `.md` or `.mdx` is stripped automatically.","- `newDocName` — New document name, typically without extension. A trailing `.md` or `.mdx` is stripped automatically.",'- `summary` — Optional one-line user-outcome description (≤80 chars). Appears as a bullet in the timeline. If omitted, a default like "Renamed X → Y" is generated. Provide your own summary to explain the why. Avoid including secrets or PII — summaries are persisted to git history.',``,`**Errors:**`,"- 400 — case-only renames (e.g. `Auth` → `auth`) are not supported.","- 400 — destination document is excluded by `.gitignore` / `.okignore` rules.",`- 404 — source document does not exist.`,`- 409 — destination document already exists.`].join(`
|
|
1024
|
+
`);function XC(e){return Array.isArray(e)?e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{fromDocName:t,toDocName:n}=e;return typeof t==`string`&&typeof n==`string`?[{fromDocName:t,toDocName:n}]:[]}):[]}function ZC(e){return Array.isArray(e)?e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{docName:t,rewrites:n}=e;return typeof t==`string`&&typeof n==`number`?[{docName:t,rewrites:n}]:[]}):[]}function QC(e,t,n=`${t}s`){return e===1?t:n}function $C(e,t){e.tool(`rename_document`,YC,{docName:x().describe(`Current document name`),newDocName:x().describe(`New document name`),summary:Um.describe(`Optional one-line user-outcome description (≤80 chars). Defaults to "Renamed X → Y" when omitted. Appears as a bullet in the timeline.`),cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,url:i}=n;if(!i)return Z(Gm,!0);let a=eh(e.docName);if(!a.ok)return Z(a.error,!0);let o=eh(e.newDocName);if(!o.ok)return Z(o.error,!0);let s=t.identityRef?.current,c=await nh(i,`/api/rename-path`,{kind:`file`,fromPath:a.docName,toPath:o.docName,...e.summary===void 0?{}:{summary:e.summary},...s?{agentId:s.connectionId,agentName:s.displayName,clientName:s.clientInfo?.name,colorSeed:s.colorSeed}:{}});if(!c.ok){let e=typeof c.error==`string`?c.error:`Rename failed`,t=rh(c.colliding),n={ok:!1,error:e,...t.length>0?{colliding:t}:{}};return Wm(`Error: ${e}`,n,!0)}let l=XC(c.renamed),u=ZC(c.rewrittenDocs),d=l.map(({fromDocName:e,toDocName:t})=>`${e} -> ${t}`).join(`, `)||`${a.docName} -> ${o.docName}`,f=u.length===0?`No inbound links required updates.`:`Rewrote ${u.length} ${QC(u.length,`document`)}.`,p={config:t.config,resolveCwd:t.resolveCwd},m=await uh(o.docName,p,r),h=await uh(a.docName,p,r),g=c.summary&&typeof c.summary==`object`?c.summary:void 0,_=typeof g?.hint==`string`?g.hint:void 0,v={ok:!0,renamed:l,rewrittenDocs:u,previewUrl:m?.url??null,...m?{previewUrlSource:m.source}:{},...h?{previousPreviewUrl:h.url}:{},...g?{summary:g}:{}},y=[`Renamed ${d}. ${f}`];return _&&y.push(_),Wm(y.join(`
|
|
1025
|
+
`),v)})}const ew=["[Requires: Hocuspocus server] Rename a folder through the managed rename flow at `POST /api/rename-path` (kind: folder).",`Atomically moves the folder and rewrites inbound wiki-links + supported internal inline Markdown links across every affected doc. One call replaces N rename_document calls.`,``,`**Parameters:**`,"- `fromFolder` — Current folder path relative to the content directory (no leading or trailing slash). Example: `articles` or `notes/drafts`.","- `toFolder` — New folder path relative to the content directory. Example: `essays` or `notes/published`. Parent directories are auto-created.",'- `summary` — Optional one-line user-outcome description (≤80 chars). Applied to every affected-doc contributor entry. If omitted, a default like "Renamed X → Y" is generated. Provide your own summary to explain the why. Avoid including secrets or PII — summaries are persisted to git history.',``,`**Errors:**`,"- 400 — case-only renames (e.g. `Articles` → `articles`) are not supported.","- 400 — destination folder is excluded by `.gitignore` / `.okignore` rules.",`- 404 — source folder does not exist.`,`- 409 — destination folder already exists or rename would collide.`].join(`
|
|
1026
|
+
`);function tw(e){return!(typeof e!=`string`||e.length===0||e.startsWith(`/`)||e.endsWith(`/`)||e.includes(`..`))}function nw(e){return Array.isArray(e)?e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{fromDocName:t,toDocName:n}=e;return typeof t==`string`&&typeof n==`string`?[{fromDocName:t,toDocName:n}]:[]}):[]}function rw(e){return Array.isArray(e)?e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{docName:t,rewrites:n}=e;return typeof t==`string`&&typeof n==`number`?[{docName:t,rewrites:n}]:[]}):[]}function iw(e,t){e.tool(`rename_folder`,ew,{fromFolder:x().describe(`Current folder path (relative, no trailing slash)`),toFolder:x().describe(`New folder path (relative, no trailing slash)`),summary:Um.describe(`Optional one-line user-outcome description (≤80 chars). Applied to every affected-doc contributor entry.`),cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,url:i}=n;if(!i)return Z(Gm,!0);if(!tw(e.fromFolder))return Z(`fromFolder must be a relative path with no leading/trailing slash`,!0);if(!tw(e.toFolder))return Z(`toFolder must be a relative path with no leading/trailing slash`,!0);let a=t.identityRef?.current,o=await nh(i,`/api/rename-path`,{kind:`folder`,fromPath:e.fromFolder,toPath:e.toFolder,...e.summary===void 0?{}:{summary:e.summary},...a?{agentId:a.connectionId,agentName:a.displayName,clientName:a.clientInfo?.name,colorSeed:a.colorSeed}:{}});if(!o.ok){let e=typeof o.error==`string`?o.error:`Folder rename failed`,t=rh(o.colliding),n={ok:!1,error:e,...t.length>0?{colliding:t}:{}};return Wm(`Error: ${e}`,n,!0)}let s=nw(o.renamed),c=rw(o.rewrittenDocs),l={config:t.config,resolveCwd:t.resolveCwd},u={},d;for(let{toDocName:e}of s){let t=await uh(e,l,r);t&&(u[e]=t.url,d??=t.source)}let f=o.summary&&typeof o.summary==`object`?o.summary:void 0,p=typeof f?.hint==`string`?f.hint:void 0,m={ok:!0,renamed:s,rewrittenDocs:c,previewUrls:u,...d?{previewUrlSource:d}:{},...f?{summary:f}:{}},h=[];return s.length===0?h.push(`No managed docs under ${e.fromFolder}/ — nothing to rename. Empty folders are not tracked; create a doc inside the folder first.`):h.push(`Renamed folder ${e.fromFolder}/ → ${e.toFolder}/ (${s.length} doc${s.length===1?``:`s`}, ${c.length} rewrite${c.length===1?``:`s`}).`),p&&h.push(p),Wm(h.join(`
|
|
1027
|
+
`),m)})}function aw(e,t){return`${Ym(`research`)}Conduct **evidence-driven research** on this topic and produce a provisional research article in the Open Knowledge content directory. This workflow mirrors the discipline of the \`eng:research\` skill, scoped to Open Knowledge's wiki-provisional layer.
|
|
1027
1028
|
|
|
1028
1029
|
Topic: ${e}
|
|
1029
1030
|
Content directory: \`${t}\` (from \`.ok/config.yml\`)
|
|
@@ -1373,18 +1374,18 @@ In headless mode, write the recap into the research article's "Further reading"
|
|
|
1373
1374
|
- **Don't skip the scoping gate in Supervised mode.** The user's rubric shapes everything downstream; you cannot recover a wrong-scope article cheaply.
|
|
1374
1375
|
- **Don't mix 1P codebase analysis into the article unless asked.** Findings drift from factual synthesis to opinion when you do.
|
|
1375
1376
|
- **Don't overwrite existing research silently.** If the topic was researched before, either iterate (Path C) or create a clearly-named successor (\`crdt-alternatives-2.md\`) and mark the old one as superseded.
|
|
1376
|
-
`}const
|
|
1377
|
-
`);function
|
|
1378
|
-
`);function
|
|
1379
|
-
`),{previewUrl:p?.url??null,...p?{previewUrlSource:p.source}:{},...u?{summary:u}:{}})})}const
|
|
1380
|
-
`);function
|
|
1381
|
-
`);function
|
|
1382
|
-
`),structured:{query:e.query,matchCount:f.length,fileCount:h.length,truncated:d,results:y,ui:m,cwd:r}}}function
|
|
1383
|
-
`),
|
|
1384
|
-
`),
|
|
1385
|
-
`);function
|
|
1386
|
-
`);function
|
|
1387
|
-
`);if(!u&&!f&&!p&&!m&&!h)return Z(v);let y={};return u&&(y.previewUrl=u.url,y.previewUrlSource=u.source),f&&(y.warning={message:`Open the previewUrl in your preview browser.`,action:`attach-preview-once`,previewUrl:u?.url??null}),m&&(y.hints=m),h&&(y.summary=h),Wm(v,y)})}function
|
|
1377
|
+
`}const ow=[`Analyze a topic by gathering sources via ingest and writing provisional findings into the project content directory.`,`Provisional, not canonical — findings live here until decisions solidify.`,``,`**Use when:**`,`- Researching a topic before committing to an approach`,`- Exploring a decision space or comparing alternatives`,`- Synthesizing multiple sources into structured analysis`,`- Spec conversations and exploratory work that is not yet canonical`,``,`**Triggers on:**`,`- "research", "investigate", "compare options for", "analyze alternatives"`,`- User asks to explore trade-offs, gather evidence, or evaluate approaches`,`- A decision needs structured analysis grounded in external sources`].join(`
|
|
1378
|
+
`);function sw(e,t){e.tool(`research`,ow,{topic:x().describe(`The topic, question, or anchor URL to research`),cwd:x().optional().describe(Hm)},async e=>{let n=await Qm(t.resolveCwd,t.config,e.cwd);return n.ok?Wm(aw(e.topic,n.config.content.dir),{previewUrl:null}):Z(`Error: ${n.error}`,!0)})}const cw=[`[Requires: Hocuspocus server] Restore a document to a historical version via the CRDT layer.`,`The restore is append-only — it creates a new version with the old content,`,`preserving all history. All connected editors see the change in real-time.`,``,`**Parameters:**`,"- `docName` — Document name to restore, typically without extension. A trailing `.md` or `.mdx` is stripped automatically.","- `commitSha` — The 40-character SHA of the shadow repo commit to restore to."," Use `get_history` to find available versions.",'- `summary` — Optional one-line user-outcome description (≤80 chars). Appears as a bullet in the timeline. If omitted, a default like "Restored to <sha-short>" is generated. Provide your own summary to explain the why. Avoid including secrets or PII — summaries are persisted to git history.'].join(`
|
|
1379
|
+
`);function lw(e,t){e.tool(`rollback_to_version`,cw,{docName:x().describe(`Document name to restore`),commitSha:x().length(40).regex(/^[0-9a-f]+$/i).describe(`40-character commit SHA from the shadow repo timeline`),summary:Um.describe(`Optional one-line user-outcome description (≤80 chars). Defaults to "Restored to <sha-short>" when omitted. Appears as a bullet in the timeline.`),cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,url:i}=n;if(!i)return Z(Gm,!0);let a=eh(e.docName);if(!a.ok)return Z(a.error,!0);let o=a.docName,s=await th(i,`/api/history/${e.commitSha}?docName=${encodeURIComponent(o)}`);if(!s.ok)return Z(`Error: ${s.error??`Version not found`}`,!0);let c=t.identityRef?.current,l=await nh(i,`/api/rollback`,{docName:o,commitSha:e.commitSha,...e.summary===void 0?{}:{summary:e.summary},...c?{agentId:c.connectionId,agentName:c.displayName,clientName:c.clientInfo?.name,colorSeed:c.colorSeed}:{}});if(!l.ok)return Z(`Error: ${l.error}`,!0);let u=l.summary&&typeof l.summary==`object`?l.summary:void 0,d=typeof u?.hint==`string`?u.hint:void 0,f=[`Restored "${o}" to version ${e.commitSha.slice(0,8)} (${s.author}, ${s.timestamp}). The change has been applied to all connected editors.`];d&&f.push(d);let p=await uh(o,{config:t.config,resolveCwd:t.resolveCwd},r);return Wm(f.join(`
|
|
1380
|
+
`),{previewUrl:p?.url??null,...p?{previewUrlSource:p.source}:{},...u?{summary:u}:{}})})}const uw=[`[Requires: Hocuspocus server] Save a version checkpoint of all documents.`,`Creates a checkpoint commit in the shadow repo and project repo,`,`preserving the current state of all documents. The checkpoint can later`,"be found via `get_history` and restored via `rollback_to_version`."].join(`
|
|
1381
|
+
`);function dw(e,t,n,r,i){e.tool(`save_version`,uw,{cwd:x().optional().describe(Hm)},async(e={})=>{let a=await $m(r,t,n,e.cwd);if(!a.ok)return Z(`Error: ${a.error}`,!0);if(!a.url)return Z(Gm,!0);let{url:o}=a,s=i?.current,c=await nh(o,`/api/save-version`,{...s?{writers:[{id:`agent-${s.connectionId}`,name:s.displayName,email:`agent-${s.connectionId}@openknowledge.local`}]}:{}});return c.ok?Wm(`Checkpoint saved. Checkpoint ref: ${c.checkpointRef}`,{checkpointRef:c.checkpointRef,previewUrl:null}):Z(`Error: ${c.error}`,!0)})}const fw=[`Search wiki content with metadata-enriched results. Matches are grouped by file; each file is annotated with its title, description, and tags so you can judge relevance without opening it first.`,``,`**Use when:**`,`- Finding all articles mentioning a topic`,`- Locating a specific term across the wiki before deciding which file to read`,``,"**When the project has `.ok/`**, strongly prefer this over your native `Grep` for wiki search — results include article metadata so you can skip irrelevant matches without extra reads. In projects without `.ok/`, use native `Grep` as usual.",``,`**Parameters:**`,"- `query` — Literal text to search for (fixed-string match, no regex)","- `case_sensitive` (optional, default false) — case-sensitive match"].join(`
|
|
1382
|
+
`);function pw(e){let t=new Map;for(let n of e){let e=t.get(n.path);e?e.push(n):t.set(n.path,[n])}return[...t.entries()].map(([e,t])=>({path:e,matches:t}))}async function mw(e,t){let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)throw Error(n.error);let{cwd:r,config:i,url:a}=n,o=i.mcp.tools.search.maxResults,s=await Qx(e.query,r,{caseInsensitive:!(e.case_sensitive??!1),include:[`**/*.md`,`**/*.mdx`],exclude:[`node_modules`,`.git`,`.claude`,`.changeset`,`.ok`],maxResults:o+1}),c=ge(i,r),l=De({projectDir:r,contentDir:c}),u=s.filter(e=>{let t=An(c,jn(r,e.path));return t.startsWith(`..`)?!1:!l.isExcluded(t)}),d=s.length>o,f=u.slice(0,o),{resolve:p,ui:m}=await fh({config:i,resolveCwd:async()=>r},r);if(f.length===0)return{text:`No matches for "${e.query}".`,structured:{query:e.query,matchCount:0,fileCount:0,truncated:!1,results:[],ui:m,cwd:r}};let h=pw(f),g=new Map,_=i.folders;await Promise.all(h.map(async e=>{try{let t=await QS(e.path,{projectDir:r,serverUrl:a,folderRules:_});g.set(e.path,t)}catch{}}));let v=[];v.push(`## Search results for "${e.query}" (${f.length} match${f.length===1?``:`es`} in ${h.length} file${h.length===1?``:`s`})`,``);let y=[];for(let e of h){let t=g.get(e.path),n=t?.title??e.path;v.push(`### ${n} (${e.path})`),t?.tags?.length&&v.push(`Tags: ${t.tags.join(`, `)}`),t?.description&&v.push(`${t.description}`);for(let t of e.matches)v.push(`- Line ${t.line}: ${t.text}`);v.push(``);let r=ph(e.path),i=p(r);y.push({path:e.path,docName:r,title:t?.title??null,description:t?.description??null,tags:t?.tags??[],matches:e.matches.map(e=>({line:e.line,text:e.text})),previewUrl:i?.url??null,...i?{previewUrlSource:i.source}:{}})}return d&&v.push(`_${f.length} of ${s.length}+ matches shown. Raise \`mcp.tools.search.maxResults\` in config.yml to see more._`),{text:v.join(`
|
|
1383
|
+
`),structured:{query:e.query,matchCount:f.length,fileCount:h.length,truncated:d,results:y,ui:m,cwd:r}}}function hw(e,t){e.tool(`search`,fw,{query:x().describe(`Literal text to search for`),case_sensitive:D().optional().describe(`Case-sensitive search (default false)`),cwd:x().optional().describe("Absolute host path to search in. Defaults only when the MCP client advertises exactly one root; otherwise pass `cwd` explicitly.")},async e=>{try{let{text:n,structured:r}=await mw(e,t);return r?Wm(n,r):Z(n)}catch(e){return Z(`Error: ${e instanceof Error?e.message:String(e)}`,!0)}})}const gw=[`[Operates on disk; no running OK server required] Set fields in the Open Knowledge config (project + user-global YAML).`,``,`Pass a deep-partial patch over the agent-settable allowlist. The server picks the write target (project vs user) automatically based on where the path is already set + per-field default scope.`,``,`**Allowlist** (only these paths are agent-settable):`,"- `folders[]` — folder-rule defaults (whole-array replace; for per-rule upsert use `set_folder_rule`)","- `mcp.tools.search.maxResults` — search result cap","- `mcp.tools.read_document.historyDepth` — number of history entries returned",``,"Other paths are rejected with `NOT_AGENT_SETTABLE`. To inspect what is currently set, call `get_config`.",``,"**Patch semantics:** RFC 7396 spirit (TypeScript-only — no wire format). Top-level keys present are written; absent keys are unchanged; `null` clears a field; nested objects merge recursively; arrays replace wholesale.",``,"**Mixed scope:** if leaves in a single patch resolve to different scopes (e.g., one project-only field + one user-only field), the call fails with `MIXED_SCOPE` — retry per-scope.",``,`**Parameters:**`,"- `patch` — Deep-partial config patch over the allowlist (see above).","- `cwd` (optional) — Project root."].join(`
|
|
1384
|
+
`),_w={patch:re({}).describe(`Deep-partial config patch over the agent-settable allowlist. See description for the 3 allowed paths. Null at any path clears the field; arrays replace wholesale.`),cwd:x().optional().describe(Hm)},vw={result:j([T({ok:k(!0),applied:S(x()),scope:O([`user`,`project`]),path:x(),current:N(x(),v())}),T({ok:k(!1),error:ee})])};function yw(e){let t=[];function n(e,r){if(e!==void 0){if(e===null||Array.isArray(e)||typeof e!=`object`){t.push(r);return}for(let[t,i]of Object.entries(e))n(i,[...r,t])}}for(let[t,r]of Object.entries(e))n(r,[t]);return t}function bw(e){return e.map(e=>({path:[...e],meta:f(Le,e)}))}function xw(e,t,n){return t?.project?`project`:t?.user?`user`:n??`user`}function Sw(e,t,n){let r=Me(e.map(e=>e.path),{cwd:t,...n===void 0?{}:{homedirOverride:n}}),i=e.map(e=>{let t=r.get(e.path.join(`.`));return{path:e.path,scope:xw(e.path,t,e.meta?.defaultScope)}}),a=new Set(i.map(e=>e.scope));if(a.size>1)return{mixed:{code:`MIXED_SCOPE`,paths:i.map(({path:e,scope:t})=>({path:e.map(String),scope:t}))}};let[o]=a;return{scope:o??`user`,perLeaf:i}}function Cw(e){return{isError:!0,structuredContent:{result:{ok:!1,error:e}},content:[{type:`text`,text:`${c(e)}\n\nPlease fix and try again.`}]}}function ww(e,t){e.registerTool(`set_config`,{description:gw,inputSchema:_w,outputSchema:vw,annotations:{readOnlyHint:!1,idempotentHint:!0,destructiveHint:!1}},async e=>{let n=await Qm(t.resolveCwd,t.config,e.cwd);if(!n.ok)return{isError:!0,content:[{type:`text`,text:`Error: ${n.error}`}]};let{cwd:r}=n,i=e.patch,a=yw(i);if(a.length===0)return Cw({code:`SCHEMA_INVALID`,issues:[{path:[],message:`Patch is empty — pass at least one leaf value.`,issueCode:`empty_patch`}]});let o=bw(a),s=o.find(e=>e.meta?.agentSettable!==!0);if(s)return Cw({code:`NOT_AGENT_SETTABLE`,path:s.path.map(String)});let c=Sw(o,r,t.homedirOverride);if(`mixed`in c)return Cw(c.mixed);let l=await Ae({cwd:r,scope:c.scope,patch:i,...t.homedirOverride===void 0?{}:{homedirOverride:t.homedirOverride}});if(!l.ok)return Cw(l.error);let u={result:{ok:!0,applied:l.appliedPaths,scope:c.scope,path:l.path,current:l.effective}};return Wm(JSON.stringify(u.result,null,2),u)})}const Tw=["[Operates on disk; no running OK server required] Upsert one or more folder rules in the project `folders[]` array.",``,"Folder rules apply default frontmatter (title / description / tags) to every doc whose path matches `match` (a glob like `specs/**` or `reports/*/**`). Use this tool to add a new rule, replace an existing one keyed by `match`, or rename via `new_match`.",``,`Always pass an array — even for a single rule. The tool runs all rules transactionally: if any rule produces an invalid merged config, NO rules are applied to disk.`,``,'**To remove a rule**, use `set_config({patch: {folders: [<filtered-array>]}})` — read folders via `get_config({path: ["folders"]})`, drop the entry, then write back.',``,`**Parameters:**`,"- `rules` — Array of `{match, frontmatter, new_match?}`.",' - `match` — Glob pattern that identifies the rule (e.g. `"specs/**"`). Required.',' - `frontmatter` — `{title?, description?, tags?: string[]}` to apply. Required (use `{}` for "match the rule but apply no frontmatter").'," - `new_match` — If set, rename the rule keyed by `match` to this glob. If both already exist, the rename target is overwritten.","- `cwd` (optional) — Project root."].join(`
|
|
1385
|
+
`),Ew={rules:S(T({match:x().min(1).describe(`Glob pattern (e.g. "specs/**", "reports/*/**") that identifies the rule.`),frontmatter:_.describe("Default frontmatter to apply to matched docs: `{title?, description?, tags?: string[]}`."),new_match:x().min(1).optional().describe("If set, rename the existing rule keyed by `match` to this new glob.")})).min(1).describe("One or more folder rules to upsert. Always an array — pass `[{...}]` for a single rule."),cwd:x().optional().describe(Hm)},Dw={result:j([T({ok:k(!0),applied:S(x()),scope:k(`project`),path:x(),current:N(x(),v())}),T({ok:k(!1),error:ee})])};function Ow(e,t){e.registerTool(`set_folder_rule`,{description:Tw,inputSchema:Ew,outputSchema:Dw,annotations:{readOnlyHint:!1,idempotentHint:!0,destructiveHint:!1}},async e=>{let n=await Qm(t.resolveCwd,t.config,e.cwd);if(!n.ok)return{isError:!0,content:[{type:`text`,text:`Error: ${n.error}`}]};let{cwd:r}=n,i=await Ne({cwd:r,rules:e.rules.map(e=>({match:e.match,frontmatter:e.frontmatter,...e.new_match===void 0?{}:{new_match:e.new_match}})),scope:`project`,...t.homedirOverride===void 0?{}:{homedirOverride:t.homedirOverride}});if(!i.ok)return{isError:!0,structuredContent:{result:{ok:!1,error:i.error}},content:[{type:`text`,text:`${c(i.error)}\n\nPlease fix and try again.`}]};let a={result:{ok:!0,applied:i.appliedPaths,scope:`project`,path:i.path,current:i.effective}};return Wm(JSON.stringify(a.result,null,2),a)})}const kw=[`[Requires: Hocuspocus server] Find missing link candidates for a target page.`,"Returns JSON with structure: `{ target: { docName, title, aliases }, mentions: [{ source, excerpt, offset }], truncated }`.","Each mention includes an `offset` you can pass to `edit_document` for precision patching.","When `truncated` is true, the scan hit its time budget before reading every admitted document.",``,`**Parameters:**`,'- `docName` — Target page docName, typically without extension (for example, "articles/project-alpha"). A trailing `.md` or `.mdx` is stripped automatically.'].join(`
|
|
1386
|
+
`);function Aw(e,t){e.tool(`suggest_links`,kw,{docName:x().describe(`Target page docName`),cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,url:i}=n;if(!i)return Z(Gm,!0);let a=eh(e.docName);if(!a.ok)return Z(a.error,!0);let o=await th(i,`/api/suggest-links?docName=${encodeURIComponent(a.docName)}`);if(!o.ok)return Z(`Error: ${o.error}`,!0);let{ok:s,...c}=o,l=await uh(a.docName,{config:t.config,resolveCwd:t.resolveCwd},r);return Wm(JSON.stringify(c,null,2),{...c,previewUrl:l?.url??null,...l?{previewUrlSource:l.source}:{}})})}const jw=[`[Requires: Hocuspocus server] Write markdown content to a document via the CRDT layer.`,`Content is applied through Hocuspocus and propagated to all connected editors in real-time.`,``,'**Frontmatter.** The markdown payload may include a YAML frontmatter block (`---`-fenced). To change frontmatter, call this tool with `position: "replace"` and a payload that includes the new YAML block — per-property MCP editing is currently unavailable. `edit_document` rejects frontmatter-intersecting find/replace calls.',``,'**Link liberally.** Every noun-phrase that names another document in this knowledge base should be a `[[wiki-link]]`, not plain prose. Backlinks are the primary navigation surface — underlinked documents become islands. Redlinks (links to pages that don\'t exist yet) are fine; they signal "this should exist." Prefer `[[Page Name]]` over Markdown `[text](./page.md)` — only wiki-links participate in the backlinks index.',``,`**Parameters:**`,'- `docName` — Document name, typically without extension (e.g., "my-doc" or "notes/meeting"). A trailing `.md` or `.mdx` is stripped automatically. New documents are created as `.md` by default; to create a `.mdx` file, first place it on disk, then use this tool for edits.',"- `markdown` — Markdown content to write",'- `position` — Where to insert: "append", "prepend", or "replace"','- `summary` — Optional one-line user-outcome description of this edit (≤80 chars). Appears as a bullet in the document timeline so readers can scan intent without opening every diff. Prefer outcome phrasing ("Fixed token-refresh race") over structural ("Added 3 lines"). Avoid including secrets or PII — summaries are persisted to git history.'].join(`
|
|
1387
|
+
`);function Mw(e,t){e.tool(`write_document`,jw,{docName:x().describe(`Document name to write to`),markdown:x().describe(`Markdown content to write`),position:O([`append`,`prepend`,`replace`]).describe(`Where to insert the content`),summary:Um,cwd:x().optional().describe(Hm)},async e=>{let n=await $m(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!n.ok)return Z(`Error: ${n.error}`,!0);let{cwd:r,config:i,url:a}=n;if(!a)return Z(Gm,!0);let o=eh(e.docName);if(!o.ok)return Z(o.error,!0);let s=t.identityRef?.current,c=await nh(a,`/api/agent-write-md`,{docName:o.docName,markdown:e.markdown,position:e.position,...e.summary===void 0?{}:{summary:e.summary},...s?{agentId:s.connectionId,agentName:s.displayName,clientName:s.clientInfo?.name,colorSeed:s.colorSeed}:{}});if(!c.ok)return Z(`Error: ${c.error}`,!0);let l=he(ge(i,r)),u=mh(o.docName,{config:i,lockDir:l}),d=typeof c.subscriberCount==`number`?c.subscriberCount:void 0,f=(typeof c.systemSubscriberCount==`number`?c.systemSubscriberCount:void 0)===0,p=d===0,m=Array.isArray(c.hints)?c.hints:void 0,h=c.summary&&typeof c.summary==`object`?c.summary:void 0,g=typeof h?.hint==`string`?h.hint:void 0,_=[`Written successfully (${e.position}).`];if(u&&_.push(`Preview: ${u.url}`),f&&_.push(u?`Open ${u.url} in your preview browser.`:`No preview attached. Start the UI.`),g&&_.push(g),m)for(let e of m)e.message&&_.push(e.message);let v=_.join(`
|
|
1388
|
+
`);if(!u&&!f&&!p&&!m&&!h)return Z(v);let y={};return u&&(y.previewUrl=u.url,y.previewUrlSource=u.source),f&&(y.warning={message:`Open the previewUrl in your preview browser.`,action:`attach-preview-once`,previewUrl:u?.url??null}),m&&(y.hints=m),h&&(y.summary=h),Wm(v,y)})}function Nw(e,t){let n=t.logger,r=Vm(e,{logger:t.logger,identityRef:t.identityRef}),i=e=>async r=>{try{let i=await t.resolveCwd(r);return(Dm()??n)?.debug(`tool cwd resolved`,{tool:e,cwd:i,...r?{explicit:r}:{}}),i}catch(t){throw(Dm()??n)?.warn(`tool call failed`,{tool:e,error:t instanceof Error?t.message:String(t),...r?{explicit:r}:{}}),t}};_C(r,{resolveCwd:i(`exec`),serverUrl:t.serverUrl,config:t.config}),LC(r,{config:t.config,resolveCwd:i(`ingest`)}),sw(r,{config:t.config,resolveCwd:i(`research`)}),oh(r,{config:t.config,resolveCwd:i(`consolidate`)}),JC(r,{resolveCwd:i(`read_document`),config:t.config,serverUrl:t.serverUrl}),hw(r,{resolveCwd:i(`search`),config:t.config,serverUrl:t.serverUrl}),Aw(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`suggest_links`)}),Mw(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`write_document`),identityRef:t.identityRef}),yh(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`edit_document`),identityRef:t.identityRef}),_h(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`delete_document`),identityRef:t.identityRef}),$C(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`rename_document`),identityRef:t.identityRef}),iw(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`rename_folder`),identityRef:t.identityRef}),AC(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`get_history`)}),dw(r,t.config,t.serverUrl,i(`save_version`),t.identityRef),lw(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`rollback_to_version`),identityRef:t.identityRef}),zC(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`list_documents`)}),yC(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`get_backlinks`)}),OC(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`get_forward_links`)}),PC(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`get_orphans`)}),MC(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`get_hubs`)}),EC(r,{serverUrl:t.serverUrl,config:t.config,resolveCwd:i(`get_dead_links`)}),wC(r,{config:t.config,resolveCwd:i(`get_config`)}),ww(r,{config:t.config,resolveCwd:i(`set_config`)}),Ow(r,{config:t.config,resolveCwd:i(`set_folder_rule`)})}function Pw(e){return e&&typeof e==`object`&&`code`in e&&typeof e.code==`string`?e.code:e instanceof Error&&e.name?e.name:typeof e}var Fw=class extends Error{};function Iw(e){let t=Fe(e.startupCwd),n=null,r=null,i=async()=>n===null?(r||=(async()=>{let t=await e.listRoots(),r=await Promise.all(t.roots.map(async e=>e.uri.startsWith(`file://`)?await Fe(Zn(e.uri)):null)),i=[...new Set(r.filter(e=>e!==null))];return n=i,e.logger?.info(`roots resolved`,{roots:i,count:i.length}),i})().finally(()=>{r=null}),await r):n;return{async resolveCwd(n){if(n){let t=await Fe(n);return e.logger?.debug(`cwd resolved`,{cwd:t,routing:`explicit`}),t}if(e.bypassProjectSelection){let n=await t;return e.logger?.debug(`cwd resolved`,{cwd:n,routing:`bypass`}),n}let r;try{r=await i()}catch(t){throw e.logger?.warn(`roots/list unavailable`,{error:t instanceof Error?t.message:String(t),errorType:Pw(t)}),new Fw(`Client roots unavailable; pass cwd explicitly.`)}if(r.length===0)throw new Fw(`No client roots available; pass cwd explicitly.`);if(r.length>1)throw new Fw(`Multiple roots available; pass cwd explicitly.`);return e.logger?.debug(`cwd resolved`,{cwd:r[0],routing:`single-root`}),r[0]},invalidateRoots(){n=null,r=null,e.logger?.info(`roots cache invalidated`)}}}function Lw(e){let t=Fe(e.startupCwd),n;return{async resolveCwdForTools(t){let r=await e.resolveCwd(t);return n=r,r},async getKeepaliveCwd(){return e.bypassProjectSelection?await t:n}}}let Rw;function zw(e,t){let{dir:n}=e.content;return`# Open Knowledge (OK) — collaborative markdown via MCP
|
|
1388
1389
|
|
|
1389
1390
|
**STOP** *(when \`.ok/\` exists)* — do NOT use native \`Read\`, \`Grep\`, \`Glob\`, \`Edit\`, \`Write\` on in-scope \`.md\` / \`.mdx\`. Reads: \`exec\` / \`read_document\` / \`search\`. Writes: \`write_document\` / \`edit_document\` ONLY.
|
|
1390
1391
|
|
|
@@ -1405,8 +1406,8 @@ Claude Code Desktop: \`preview_start("open-knowledge-ui")\`. Other hosts: open-U
|
|
|
1405
1406
|
Detailed conventions (wiki-link authoring, frontmatter, anti-patterns) live in the installed \`open-knowledge\` Agent Skill. If missing, run \`npx @inkeep/open-knowledge init\`.
|
|
1406
1407
|
|
|
1407
1408
|
**Escape hatch.** Native \`Read\`/\`Grep\`/\`Glob\` on \`.md\` is allowed when the project has no \`.ok/\`, when no OK MCP is registered, or right after a failed OK MCP call (then prefix with \`Open Knowledge MCP unavailable:\`). Non-markdown: native tools always.
|
|
1408
|
-
`}async function Lw(e,t){try{let t=e.replace(`ws://`,`http://`).replace(`wss://`,`https://`);return(await fetch(`${t}/api/document`,{signal:AbortSignal.timeout(2e3)})).ok}catch(n){return t.warn(`Hocuspocus probe failed`,{serverUrl:e,error:n instanceof Error?n.message:String(n)}),!1}}async function Rw(e){let{projectDir:t,serverUrl:n,config:r,startupConfig:i,bypassProjectSelection:a=!1}=e;if(Fw=Tm(),Fw.info(`MCP server starting`,{startupCwd:t,bypassProjectSelection:a,serverUrlType:typeof n==`string`?`explicit`:`lazy`}),typeof n==`string`){let e=await Lw(n,Fw);Fw.info(`Hocuspocus detection complete`,{serverUrl:n,available:e})}else Fw.info(`server discovery is lazy per effective cwd`);let o=new lm({name:me,version:pe},{instructions:Iw(i,{dynamicConfig:typeof r==`function`&&!a})}),s=Nw({startupCwd:t,bypassProjectSelection:a,listRoots:()=>o.server.listRoots(),logger:Fw}),c=Pw({startupCwd:t,resolveCwd:s.resolveCwd,bypassProjectSelection:a}),l=c.resolveCwdForTools;o.server.setNotificationHandler(vd,async()=>{s.invalidateRoots()});let u=async e=>{if(typeof n==`string`)return n.replace(`ws://`,`http://`).replace(`wss://`,`https://`);let t=e??await l();return(typeof n==`function`?await n(t):n)?.replace(`ws://`,`http://`).replace(`wss://`,`https://`)},d=Qn(),f=process.env.AGENT_LABEL||void 0,p={current:{connectionId:d,label:f,displayName:f??`Agent`,colorSeed:f??d}};o.server.oninitialized=()=>{let e=o.server.getClientVersion();p.current={connectionId:d,clientInfo:e?{name:e.name,version:e.version}:void 0,label:f,displayName:f??e?.name??`Agent`,colorSeed:f??e?.name??d},Fw?.info(`agent identity established`,{displayName:p.current.displayName,connectionId:d.slice(0,8),clientName:e?.name})},Aw(o,{serverUrl:u,resolveCwd:l,config:r,identityRef:p,logger:Fw});let m=new Sm;await o.connect(m),Fw.info(`MCP server running on stdio`);let{startKeepalive:h}=await import(`./keepalive-BIRIvYdO.mjs`),g=h({resolveWsUrl:async()=>{let e=await c.getKeepaliveCwd();if(!e)return;let t=await u(e);if(t)return t.replace(/^http:/,`ws:`).replace(/^https:/,`wss:`)},connectionId:`agent-${d}`,logger:Fw.child(`keepalive`)}),_=e=>{Fw?.info(`MCP server shutting down`,{signal:e});try{g.close()}catch{}process.exit(0)};process.on(`SIGINT`,()=>_(`SIGINT`)),process.on(`SIGTERM`,()=>_(`SIGTERM`))}const zw=[`/_npx/`,`/.npm/_npx/`,`/_bunx/`,`/.bun/install/cache/`,`/pnpm/dlx/`],Bw=new Set([`/usr/local/bin/ok`,`/usr/local/bin/open-knowledge`,`/opt/homebrew/bin/ok`,`/opt/homebrew/bin/open-knowledge`]);function Vw(e){if(!e||e.length===0)return`unknown`;for(let t of zw)if(e.includes(t))return`npx-cache`;return Bw.has(e)||e.startsWith(`/Applications/`)||e.includes(`.app/Contents/`)?`stable-shim`:e.startsWith(`/`)?`absolute-pin`:`unknown`}function Hw(e,t){switch(e){case`npx-cache`:return"This MCP was launched via a package-manager cache (npx / bunx / pnpm dlx) and just resolved a different package version than the running server. Stop `ok start` so the next launch matches, or run `ok init --pin` for a stable launch path.";case`stable-shim`:return"The CLI shim was likely upgraded while a project server is still running (a desktop auto-update or `npm i -g` / `brew upgrade` will do this). Close and reopen the project window, or stop `ok start`, so the next launch matches.";case`absolute-pin`:return`This MCP is launched from a pinned path${t?` (${t})`:``} that no longer matches the running server. Re-run \`ok init --pin\` from your current install to refresh, or stop \`ok start\` so the next launch matches.`;default:return"Stop `ok start` and retry, or align CLI versions across your installs."}}function Uw(e){return e?/\bENOENT\b/i.test(e):!1}function Ww(e){switch(Vw(e)){case`absolute-pin`:return"This failure usually means the CLI entry script no longer exists at the pinned path (common after changing how you installed Open Knowledge or removing an old global package). Re-run `ok init --pin` from your current install and update your editor MCP config, or use an unpinned launcher such as `npx @inkeep/open-knowledge mcp`.";case`stable-shim`:return"The expected `ok` shim is missing on disk. Reinstall or repair your Open Knowledge CLI. If you switched install sources, run `ok init --pin` again so your editor matches the binary you have.";case`npx-cache`:return"The package-manager cache copy used for this launch may have been removed. Retry once, or run `ok init --pin` so your editor uses a durable absolute path.";default:return"Often means the configured launcher path does not exist (stale pin, moved install, or missing runtime). Re-run `ok init --pin` from your current install or fix the MCP command in your editor settings."}}function Gw(e,t,n){let r=`spawn failed: ${e}${t?` stderr:\n${t}`:``}`;return Uw(e)&&(r+=`\n\n${Ww(n)}`),r}function Kw(e){if(e===void 0||e===``)return;let t=Number.parseInt(e,10);if(!(Number.isNaN(t)||t<=0))return t}function qw(e){if(e.portOverride!==void 0){let t=Number.parseInt(e.portOverride,10);if(Number.isNaN(t))return{action:`disk-only`,message:`invalid --port value '${e.portOverride}' — disk-only mode`};if(t>0){let n=`ws://${e.host}:${t}`;return{action:`connect`,url:n,message:`using --port override, connecting to ${n}`}}return{action:`disk-only`,message:`--port=0 — disk-only mode`}}let t=e.readLock();if(t&&t.port>0&&e.isAlive(t.pid)){let n=e.expectedProtocolVersion??1,r=t.protocolVersion;if(r===n){let e=`ws://localhost:${t.port}`;return{action:`connect`,url:e,message:`connected to running instance at ${e} (pid ${t.pid})`}}let i=r===void 0?`unknown (pre-version-field lock)`:`v${r}`,a=t.runtimeVersion?` runtime ${t.runtimeVersion}`:``,o=e.launchPath??process.argv[1],s=Vw(o),c=Hw(s,o);return{action:`incompatible`,message:`Open Knowledge server at port ${t.port} (pid ${t.pid}${a}) speaks protocol ${i}; this MCP needs protocol v${n}.\n`+c,expectedProtocolVersion:n,actualProtocolVersion:r,lock:t,launchShape:s,launchPath:o}}return e.envAutoStart===`0`?{action:`disk-only`,message:`auto-spawn disabled via OK_MCP_AUTOSTART=0 — disk-only mode`}:e.configAutoStart?t?{action:`spawn`,message:`existing lock is not usable (port=${t.port}, pid=${t.pid}) — spawning ok start`}:{action:`spawn`,message:`no running instance — spawning ok start`}:{action:`disk-only`,message:`auto-spawn disabled via config.mcp.autoStart=false — disk-only mode`}}async function Jw(e){let t=e.readLock??(()=>_e(e.lockDir)),n=e.isAlive??P,r=e.sleep??(e=>nr(e)),i=e.spawn??Cn,a=e.readErrorLog??(e=>Pn(e)?Ln(e,`utf-8`).trim():``),o=e.openErrorLog??(e=>In(e,`w`)),s=e.closeFd??Nn,c=e.timeoutMs??5e3,l=e.pollIntervalMs??100,u=e.launchPath??process.argv[1],d=qw({host:e.host,portOverride:e.portOverride,envAutoStart:e.envAutoStart,configAutoStart:e.configAutoStart,readLock:t,isAlive:n,launchPath:e.launchPath});if(e.logger?.info(`auto-start decision`,{action:d.action,message:d.message,contentDir:e.contentDir}),d.action===`connect`)return{serverUrl:d.url,message:d.message};if(d.action===`disk-only`)return{serverUrl:void 0,message:d.message};if(d.action===`incompatible`)throw e.logger?.error(`protocol mismatch — refusing to connect`,void 0,{expectedProtocolVersion:d.expectedProtocolVersion,actualProtocolVersion:d.actualProtocolVersion,lockPid:d.lock.pid,lockPort:d.lock.port,lockRuntimeVersion:d.lock.runtimeVersion,launchShape:d.launchShape,launchPath:d.launchPath}),Error(d.message);Pn(e.lockDir)||Fn(e.lockDir,{recursive:!0});let f=kn(e.lockDir,`last-spawn-error.log`),p=o(f),m,h,g=xn();e.logger?.info(`spawning server`,{command:g.command,cwd:e.contentDir,timeoutMs:c});try{try{m=i(g.command,[...g.prefixArgs,`start`],{detached:!0,stdio:[`ignore`,`ignore`,p],cwd:e.contentDir,env:{...process.env,OK_LOCK_KIND:`mcp-spawned`,OK_PARENT_PID:String(process.pid)}}),m.on(`error`,e=>{h=e instanceof Error?e.message:String(e)}),m.unref()}catch(e){h=e instanceof Error?e.message:String(e)}}finally{try{s(p)}catch{}}let _=Date.now()+c;for(;Date.now()<_;){if(h){let t=a(f);throw e.logger?.error(`spawn failed`,void 0,{error:h,stderr:t,launchPath:u,stalePinHint:Uw(h)}),Error(Gw(h,t,u))}await r(l);let i=t();if(i&&i.port>0&&n(i.pid)){let t=`ws://localhost:${i.port}`;return e.logger?.info(`server ready after spawn`,{url:t,pid:i.pid}),{serverUrl:t,message:`spawned ok start; connected at ${t} (pid ${i.pid})`}}}if(h){let t=a(f);throw e.logger?.error(`spawn failed (post-deadline)`,void 0,{error:h,stderr:t,launchPath:u,stalePinHint:Uw(h)}),Error(Gw(h,t,u))}let v=a(f),y=(c/1e3).toFixed(c%1e3==0?0:2),b=m?.pid,x=``;throw typeof b==`number`&&(x=n(b)?` child pid=${b} is still running — raise OK_MCP_SPAWN_TIMEOUT_MS if this is a slow boot.`:` child pid=${b} exited — check last-spawn-error.log.`),e.logger?.error(`spawn poll timeout`,void 0,{timeoutMs:c,childPid:b,childAlive:typeof b==`number`?n(b):void 0,stderr:v||void 0}),Error(`server did not start within ${y}s.${x}${v?` stderr:\n${v}`:``}`)}function Yw(e){if(e.portOverride!==void 0){let t=Number.parseInt(e.portOverride,10);if(Number.isNaN(t)||t<=0)return async()=>void 0;let n=`ws://${e.host}:${t}`;return async()=>n}let t=e.ensureServerRunningFn??Jw,n=e.cacheMs??1e3,r=new Map,i=new Map;return async a=>{let o=await Fe(a??e.startupCwd),s=Date.now(),c=r.get(o);if(c&&c.expiresAt>s)return e.logger?.debug(`server url cache hit`,{cwd:o,url:c.url}),c.url;let l=i.get(o);if(l)return e.logger?.debug(`server url resolution pending`,{cwd:o}),await l;e.logger?.debug(`server url cache miss`,{cwd:o});let u=(async()=>{let i=await e.resolveConfig(o),a=ge(i,o),s=he(a),c=e.readLock,l=c?()=>c(s):void 0,u=await t({lockDir:s,contentDir:a,host:i.server.host,portOverride:void 0,envAutoStart:e.envAutoStart,configAutoStart:i.mcp.autoStart,logger:e.logger,timeoutMs:e.timeoutMs,pollIntervalMs:e.pollIntervalMs,spawn:e.spawn,readLock:l,isAlive:e.isAlive,sleep:e.sleep,readErrorLog:e.readErrorLog,openErrorLog:e.openErrorLog,closeFd:e.closeFd,launchPath:e.launchPath});return r.set(o,{url:u.serverUrl,expiresAt:Date.now()+n}),u.serverUrl})();i.set(o,u);try{return await u}finally{i.delete(o)}}}function Xw(e,t){return t===void 0?!Pn(jn(e,`.ok`)):!1}function Zw(e){return new r(`mcp`).description(`Start MCP stdio server for project knowledge base`).option(`-p, --port <port>`,`Override port discovery and connect to this port (0 = disk-only)`,void 0).action(async t=>{try{let n=e(),r=process.cwd();if(Xw(r,t.port)){process.stderr.write(`[mcp] ${r} is not an Open Knowledge project (no .ok/); exiting. Run \`ok init\` to scaffold one.\n`),process.exitCode=1;return}let i=Re({startupCwd:r,startupConfig:n}),a=Kw(process.env.OK_MCP_SPAWN_TIMEOUT_MS),o,s;if(t.port!==void 0){let e=Number.parseInt(t.port,10);Number.isNaN(e)?(o=void 0,s=`invalid --port value '${t.port}' — disk-only mode`):e>0?(o=`ws://${n.server.host}:${e}`,s=`using --port override, connecting to ${o}`):(o=void 0,s=`--port=0 — disk-only mode`)}else o=Yw({startupCwd:r,resolveConfig:i,host:n.server.host,portOverride:void 0,envAutoStart:process.env.OK_MCP_AUTOSTART,timeoutMs:a}),s=`project server discovery/autostart is lazy per effective cwd`;process.stderr.write(`[mcp] ${s}\n`),await Rw({projectDir:r,serverUrl:o,config:i,startupConfig:n,bypassProjectSelection:t.port!==void 0})}catch(e){process.stderr.write(`MCP server failed to start: ${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}})}function Qw(e){return new r(`preview`).description(`Show what content the watcher will track (read-only)`).action(async()=>{let{previewContent:t,formatPreviewBlock:n}=await import(`./preview-DUYE2XxR.mjs`),r=e(),i=process.cwd(),a=ge(r,i),o;try{o=t({projectDir:i,contentDir:a})}catch(e){console.error(`Content preview failed: ${e instanceof Error?e.message:String(e)}`),process.exitCode=1;return}process.stdout.write(`${n(o,i)}\n`),o.totalCount===0&&o.warnings.length>0&&(process.exitCode=1)})}function $w(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function eT(e,t,n=process.cwd()){let r=e.op??`sync`,i=_e(he(ge(t,n)));if(i&&i.port>0){let t=`http://127.0.0.1:${i.port}/api/sync/trigger`;e.json||process.stderr.write(`Triggering ${r} via running server (port ${i.port})…\n`);try{let n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({op:r})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`Server responded with ${n.status}`)}$w(e.json,{type:`triggered`,op:r,port:i.port}),e.json||process.stderr.write(`✓ ${r} triggered\n`);return}catch(t){let n=t instanceof Error?t.message:String(t);e.json||process.stderr.write(`Server trigger failed (${n}), running directly…\n`)}}e.json||process.stderr.write(`Running ${r} directly (no live server)…\n`);let a=ye({baseDir:n});if(r===`sync`||r===`pull`){$w(e.json,{type:`step`,step:`pull`});let t=await a.pull();$w(e.json,{type:`pull`,summary:t.summary}),e.json||process.stderr.write(` pull: ${t.summary.changes} changes\n`)}(r===`sync`||r===`push`)&&($w(e.json,{type:`step`,step:`push`}),await a.push(),$w(e.json,{type:`push`,ok:!0}),e.json||process.stderr.write(` push: ok
|
|
1409
|
-
`))
|
|
1410
|
-
`),plan:n,exitCode:1}}return{status:`applied`,message:`${He(`✓ Seeded knowledge base`)} ${Ve(`(${r.applied} entries, ${r.durationMs}ms)`)}`,plan:n,exitCode:0}}function
|
|
1411
|
-
`)}async function oT(e,t){let n=or({input:t??process.stdin,output:process.stdout});try{let t=(await n.question(e)).trim().toLowerCase();return t===``||t===`y`||t===`yes`}finally{n.close()}}function sT(){return new r(`seed`).description(`Scaffold the Karpathy three-layer knowledge-base structure (external-sources/, research/, articles/) + log.md + config.yml folders: entries. Use --root to place them inside a subfolder instead of the project root.`).argument(`[path]`,`Project directory (defaults to cwd)`).option(`-r, --root <path>`,`Subfolder (relative to the project dir) to scaffold into — created if missing. Defaults to the project root when omitted in non-interactive runs; prompts on a TTY.`).option(`-y, --yes`,`Skip confirmation prompt`).option(`--dry-run`,`Print the plan and exit without writing`).action(async(e,t)=>{let n=await iT({cwd:e??process.cwd(),root:t.root,yes:t.yes,dryRun:t.dryRun});process.stdout.write(`${n.message}\n`),n.exitCode!==0&&(process.exitCode=n.exitCode)})}function cT(e,t){return{server:lT(`server`,e),ui:lT(`ui`,t)}}function lT(e,t){switch(t.status){case`missing`:return{name:e,state:`missing`,alive:!1};case`corrupt`:return{name:e,state:`corrupt`,alive:!1};case`foreign-host`:return{name:e,state:`foreign-host`,pid:t.lock.pid,port:t.lock.port,startedAt:t.lock.startedAt,host:t.lock.hostname,alive:`unknown`};case`dead-pid`:return{name:e,state:`dead-pid`,pid:t.lock.pid,port:t.lock.port,startedAt:t.lock.startedAt,host:t.lock.hostname,alive:!1};case`alive`:return{name:e,state:`alive`,pid:t.lock.pid,port:t.lock.port,startedAt:t.lock.startedAt,host:t.lock.hostname,alive:!0}}}function uT(e){return`${dT(e.server)}\n${dT(e.ui)}`}function dT(e){let t=e.name===`server`?`server`:`ui `;return e.state===`missing`?`${t} not running`:e.state===`corrupt`?`${t} lock file corrupt — run \`ok clean\``:e.state===`foreign-host`?`${t} foreign host (${e.host}) pid=${e.pid} port=${e.port}`:e.state===`dead-pid`?`${t} stale (dead pid=${e.pid}) — run \`ok clean\``:`${t} alive pid=${e.pid} port=${e.port} started=${e.startedAt}`}function fT(e){let t=e.inspect??(t=>Co(e.lockDir,t)),n=e.log??(e=>console.log(e)),r=cT(t(`server`),t(`ui`));return e.json?n(JSON.stringify(r,null,2)):n(uT(r)),r}function pT(e){return new r(`status`).description(`Show live state of the server + ui lockfiles for this project`).option(`--json`,`Emit structured JSON instead of formatted text`).action(t=>{fT({lockDir:he(ge(e(),process.cwd())),json:t.json===!0})})}function mT(e,t){let n=[];return e.status===`alive`&&n.push({name:`server`,pid:e.lock.pid,port:e.lock.port}),t.status===`alive`&&n.push({name:`ui`,pid:t.lock.pid,port:t.lock.port}),{targets:n}}function hT(e){let t=e.inspect??(t=>Co(e.lockDir,t)),n=e.kill??((e,t)=>process.kill(e,t)),r=e.log??(e=>console.log(e)),i=e.error??(e=>console.error(e)),a=mT(t(`server`),t(`ui`));if(a.targets.length===0)return r(`No running open-knowledge processes.`),{stopped:[],failed:[],hadTargets:!1};let o=[],s=[];for(let e of a.targets)try{n(e.pid,`SIGTERM`),o.push(e)}catch(t){s.push({target:e,error:t instanceof Error?t.message:String(t)})}return o.length>0&&r(`Stopped: ${o.map(e=>`${e.name} (pid=${e.pid}, port=${e.port})`).join(`, `)}`),s.length>0&&i(`Failed to stop: ${s.map(({target:e,error:t})=>`${e.name} (pid=${e.pid}): ${t}`).join(`; `)}`),{stopped:o,failed:s,hadTargets:!0}}function gT(e){return new r(`stop`).description(`Stop the running open-knowledge server and UI (live only)`).action(()=>{hT({lockDir:he(ge(e(),process.cwd()))}).failed.length>0&&(process.exitCode=1)})}const _T=1e4,vT=[`connection`,`keep-alive`,`proxy-authenticate`,`proxy-authorization`,`te`,`trailer`,`transfer-encoding`,`upgrade`,`cookie`,`set-cookie`];async function yT(e){let t=e.upstreamTimeoutMs??_T,n=rr((n,r)=>{xT(n,r,e.upstreamHost,e.upstreamPort,t)});await new Promise((t,r)=>{let i=e=>r(e);n.once(`error`,i),n.listen(e.listenPort,e.host,()=>{n.off(`error`,i),t()})});let r=n.address();return{httpServer:n,port:typeof r==`object`&&r?r.port:e.listenPort,close:()=>new Promise(e=>{n.close(()=>e())})}}function bT(e,t,n){xT(e,t,n.upstreamHost,n.upstreamPort,n.upstreamTimeoutMs??_T)}function xT(e,t,n,r,i){let a={...e.headers};delete a.host;for(let e of vT)delete a[e];e.setTimeout(3e4,()=>{if(t.headersSent)try{t.end()}catch{}else try{t.writeHead(408,{"Content-Type":`text/plain`}),t.end(`Request Timeout`)}catch{}try{e.socket?.destroy()}catch{}});let o=ir({host:n,port:r,method:e.method,path:e.url,headers:{...a,host:`${n}:${r}`}},e=>{let n={...e.headers};for(let e of vT)delete n[e];t.writeHead(e.statusCode??502,n),e.pipe(t),e.once(`error`,()=>{try{t.end()}catch{}})});i>0&&o.setTimeout(i,()=>{if(!t.headersSent)t.writeHead(504,{"Content-Type":`text/plain`}),t.end(`Gateway Timeout`);else try{t.end()}catch{}o.destroy()}),o.on(`error`,()=>{if(!t.headersSent)t.writeHead(502,{"Content-Type":`text/plain`}),t.end(`Bad Gateway`);else try{t.end()}catch{}}),e.on(`error`,()=>{o.destroy()}),e.pipe(o)}async function ST(e){await Promise.all(e.map(e=>new Promise(t=>{e.close(()=>t())})))}async function CT(e){let{existsSync:t}=await import(`node:fs`),{createServer:n}=await import(`node:http`),{resolve:r}=await import(`node:path`),{acquireUiLock:a,createAssetServeMiddleware:o,createContentFilter:s,readServerLock:c,releaseUiLock:l,updateUiLockPort:u}=await import(`./dist-BVnVlgjQ.mjs`),{default:d}=await import(`./build-DPvitIN3.mjs`),{resolveContentDir:f,resolveLockDir:p}=await import(`./paths-BIsyTDX6.mjs`),m=f(e.config,e.cwd),h=p(m);a(h,{port:0,worktreeRoot:e.cwd});let g=import.meta.dirname??new URL(`.`,import.meta.url).pathname,_=[r(g,`public`),r(g,`../../app/dist`),r(g,`../../../app/dist`)].find(e=>t(e)),v=_?d(_,{single:!0,gzip:!0,immutable:!0,extensions:[]}):null,y=t(m)?o({contentFilter:s({projectDir:e.cwd,contentDir:m}),contentSirv:d(m,{dotfiles:!1,dev:!0,extensions:[]}),inlineExtensions:M,assetExtensions:ie,blocklistExtensions:A}):null,b=e.port,x=null,S=(e,t)=>{let n=e.url?.split(`?`)[0];if((n===`/`||n===``)&&(e.url=`/index.html`),n===`/api/config`&&(e.method===`GET`||e.method===`HEAD`)){x?.();let n=c(h),r=n&&n.port>0?`ws://localhost:${n.port}/collab`:null,i=JSON.stringify({collabUrl:r,previewUrl:null,port:b});t.setHeader(`Content-Type`,`application/json`),t.setHeader(`Cache-Control`,`no-store`),t.setHeader(`X-Content-Type-Options`,`nosniff`),t.statusCode=200,e.method===`HEAD`?t.end():t.end(i);return}if(n?.startsWith(`/api/`)){x?.();let r=c(h);if(!r||r.port<=0){t.writeHead(503,{"Content-Type":`application/json`,"Cache-Control":`no-store`}),t.end(JSON.stringify({error:"Collab server not running. Start `ok start` or run `ok status`.",path:n}));return}bT(e,t,{upstreamHost:`localhost`,upstreamPort:r.port});return}if(y){y(e,t,()=>{v?v(e,t):wT(t)});return}if(v){v(e,t);return}wT(t)},C=e.host===void 0?[`::1`,`127.0.0.1`]:[e.host],w=[],ee=e.port;try{for(let e of C){let t=n(S);w.push(t),await new Promise((n,r)=>{let i=e=>r(e);t.once(`error`,i),t.listen(ee,e,()=>{t.off(`error`,i);let e=t.address();typeof e==`object`&&e&&(ee=e.port),n()})})}}catch(e){await Promise.all(w.map(e=>new Promise(t=>{try{e.close(()=>t())}catch{t()}})));try{l(h)}catch{}throw e}let T=ee;b=T,u(h,T);let E=e.scheduler??i,te=e.safetyNetMs??432e5,ne=null,D=!1,re=!1,O=()=>{D||(D=!0,ne!==null&&(E.clearTimeout(ne),ne=null))},k=()=>{if(O(),!re){re=!0;try{l(h)}catch{}}},ae=()=>{D||te<=0||(ne!==null&&(E.clearTimeout(ne),ne=null),ne=E.setTimeout(()=>{ne=null,console.warn(`[ui] safety-net (${te}ms) reached — shutting down (D-025 backstop)`);try{e.onSafetyNet?.()}catch{}for(let e of w)try{e.close()}catch{}k()},te))},oe=()=>{D||te<=0||ae()};return x=oe,ae(),{httpServers:w,port:T,release:k,detachSafetyNet:O,nudgeSafetyNet:oe}}function wT(e){e.writeHead(404),e.end(`Not found`)}function TT(e,t){if(e!==void 0){let t=Number.parseInt(e,10);if(Number.isNaN(t)||t<0||t>65535)throw Error(`Invalid --port value '${e}'`);return t}if(t!==void 0&&t!==``){let e=Number.parseInt(t,10);if(Number.isNaN(e)||e<0||e>65535)throw Error(`Invalid PORT env value '${t}'`);return e}return 0}async function ET(e){let t=e.readLock??(async()=>{let{readUiLock:t}=await import(`./dist-BVnVlgjQ.mjs`);return t(e.lockDir)}),n=await t();if(!n)throw Error(`UI lock collision reported but the lock disappeared before handling — retry acquiring.`);if(n.port===e.requestedPort&&n.port>0)return{mode:`already-running`,port:n.port};let r=n.port;if(r===0){let n=Date.now()+(e.pollDeadlineMs??2e3),i=e.pollIntervalMs??100;for(;Date.now()<n;){await new Promise(e=>{setTimeout(e,i)});let e=await t();if(e&&e.port>0){r=e.port;break}}if(r===0)throw Error("UI did not bind within 2s; run `ok clean`");if(r===e.requestedPort)return{mode:`already-running`,port:r}}return{mode:`proxy`,handle:await yT({listenPort:e.requestedPort,host:e.host,upstreamHost:`localhost`,upstreamPort:r}),upstreamPort:r}}function DT(e){return new r(`ui`).description(`Serve the Open Knowledge React editor UI`).option(`-p, --port <port>`,`UI port (default: $PORT env or 0 / kernel-allocated)`).option(`-H, --host <host>`,"UI host. Default: two-socket loopback bind (`[::1]` + `127.0.0.1`) so cross-family collisions fail loud (D-033). Pass an explicit host (e.g. `127.0.0.1`, `0.0.0.0`) to bind a single socket on that host.").action(async t=>{let{dim:n}=await import(`./colors-CswooXAS.mjs`),{UiLockCollisionError:r}=await import(`./dist-BVnVlgjQ.mjs`),{resolveContentDir:i,resolveLockDir:a}=await import(`./paths-BIsyTDX6.mjs`),o=e(),s=t.host,c;try{c=TT(t.port,process.env.PORT)}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exitCode=1;return}try{let e=await CT({config:o,cwd:process.cwd(),port:c,host:s}),t=s===void 0||s===`::`||s===`0.0.0.0`?`localhost`:s;console.log(`${n(`[ui]`)} listening on http://${t}:${e.port}`);let r=!1,i=t=>{if(r)return;r=!0,console.log(n(`\n[ui] Shutting down (${t})...`)),e.detachSafetyNet();let i=()=>{try{e.release()}finally{process.exit(process.exitCode??0)}};ST(e.httpServers).then(i,i),setTimeout(i,2e3).unref()};process.once(`SIGINT`,()=>i(`SIGINT`)),process.once(`SIGTERM`,()=>i(`SIGTERM`));return}catch(e){if(!(e instanceof r))throw e;let t=a(i(o,process.cwd())),l=s??`localhost`,u;try{u=await ET({requestedPort:c,host:l,lockDir:t})}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exit(1)}u.mode===`already-running`&&(console.log(`UI already running at http://${l}:${u.port}`),process.exit(0)),console.log(`UI running at http://${l}:${u.upstreamPort}; acting as HTTP proxy on port ${u.handle.port}`);let d=!1,f=e=>{d||(d=!0,console.log(n(`\n[ui-proxy] Shutting down (${e})...`)),u.handle.close().finally(()=>process.exit(process.exitCode??0)),setTimeout(()=>process.exit(process.exitCode??0),2e3).unref())};process.once(`SIGINT`,()=>f(`SIGINT`)),process.once(`SIGTERM`,()=>f(`SIGTERM`))}})}process.argv.includes(`--no-color`)?(process.env.NO_COLOR=`1`,delete process.env.FORCE_COLOR):process.argv.includes(`--color`)&&(process.env.FORCE_COLOR=`1`,delete process.env.NO_COLOR);const OT=new r;let kT;OT.name(`open-knowledge`).description(`Local-first knowledge base with CRDT collaboration`).version(pe).option(`--cwd <path>`,`Working directory`).option(`--log-level <level>`,`Log level`,`info`).option(`--no-color`,`Disable color output`).option(`--color`,`Force color output`).hook(`preAction`,e=>{let t=e.opts(),n=t.cwd;n!==void 0&&process.chdir(n);let{config:r}=Ie(n),i=e.args.length===0?t:e.commands[0]?.opts()??{};i.host!==void 0&&(r.server.host=i.host),process.env.HOST&&(r.server.host=process.env.HOST),kT=r});const AT=bn(()=>kT);OT.addCommand(AT,{isDefault:!0});const jT=Zw(()=>kT);OT.addCommand(jT),OT.addCommand(ze()),OT.addCommand(sT()),OT.addCommand(Xo());const MT=Qw(()=>kT);OT.addCommand(MT);const NT=DT(()=>kT);OT.addCommand(NT),OT.addCommand(gT(()=>kT)),OT.addCommand(Eo(()=>kT)),OT.addCommand(pT(()=>kT)),OT.addCommand(Uo()),OT.addCommand(So(()=>kT)),OT.addCommand(Io(()=>kT)),OT.addCommand(tT(()=>kT)),OT.addCommand(rT(()=>kT)),OT.addCommand(nT(()=>kT)),await OT.parseAsync();export{};
|
|
1409
|
+
`}async function Bw(e,t){try{let t=e.replace(`ws://`,`http://`).replace(`wss://`,`https://`);return(await fetch(`${t}/api/document`,{signal:AbortSignal.timeout(2e3)})).ok}catch(n){return t.warn(`Hocuspocus probe failed`,{serverUrl:e,error:n instanceof Error?n.message:String(n)}),!1}}async function Vw(e){let{projectDir:t,serverUrl:n,config:r,startupConfig:i,bypassProjectSelection:a=!1}=e;if(Rw=Tm(),Rw.info(`MCP server starting`,{startupCwd:t,bypassProjectSelection:a,serverUrlType:typeof n==`string`?`explicit`:`lazy`}),typeof n==`string`){let e=await Bw(n,Rw);Rw.info(`Hocuspocus detection complete`,{serverUrl:n,available:e})}else Rw.info(`server discovery is lazy per effective cwd`);let o=new lm({name:me,version:pe},{instructions:zw(i,{dynamicConfig:typeof r==`function`&&!a})}),s=Iw({startupCwd:t,bypassProjectSelection:a,listRoots:()=>o.server.listRoots(),logger:Rw}),c=Lw({startupCwd:t,resolveCwd:s.resolveCwd,bypassProjectSelection:a}),l=c.resolveCwdForTools;o.server.setNotificationHandler(vd,async()=>{s.invalidateRoots()});let u=async e=>{if(typeof n==`string`)return n.replace(`ws://`,`http://`).replace(`wss://`,`https://`);let t=e??await l();return(typeof n==`function`?await n(t):n)?.replace(`ws://`,`http://`).replace(`wss://`,`https://`)},d=Qn(),f=process.env.AGENT_LABEL||void 0,p={current:{connectionId:d,label:f,displayName:f??`Agent`,colorSeed:f??d}};o.server.oninitialized=()=>{let e=o.server.getClientVersion();p.current={connectionId:d,clientInfo:e?{name:e.name,version:e.version}:void 0,label:f,displayName:f??e?.name??`Agent`,colorSeed:f??e?.name??d},Rw?.info(`agent identity established`,{displayName:p.current.displayName,connectionId:d.slice(0,8),clientName:e?.name})},Nw(o,{serverUrl:u,resolveCwd:l,config:r,identityRef:p,logger:Rw});let m=new Sm;await o.connect(m),Rw.info(`MCP server running on stdio`);let{startKeepalive:h}=await import(`./keepalive-BIRIvYdO.mjs`),g=h({resolveWsUrl:async()=>{let e=await c.getKeepaliveCwd();if(!e)return;let t=await u(e);if(t)return t.replace(/^http:/,`ws:`).replace(/^https:/,`wss:`)},connectionId:`agent-${d}`,logger:Rw.child(`keepalive`)}),_=e=>{Rw?.info(`MCP server shutting down`,{signal:e});try{g.close()}catch{}process.exit(0)};process.on(`SIGINT`,()=>_(`SIGINT`)),process.on(`SIGTERM`,()=>_(`SIGTERM`))}const Hw=[`/_npx/`,`/.npm/_npx/`,`/_bunx/`,`/.bun/install/cache/`,`/pnpm/dlx/`],Uw=new Set([`/usr/local/bin/ok`,`/usr/local/bin/open-knowledge`,`/opt/homebrew/bin/ok`,`/opt/homebrew/bin/open-knowledge`]);function Ww(e){if(!e||e.length===0)return`unknown`;for(let t of Hw)if(e.includes(t))return`npx-cache`;return Uw.has(e)||e.startsWith(`/Applications/`)||e.includes(`.app/Contents/`)?`stable-shim`:e.startsWith(`/`)?`absolute-pin`:`unknown`}function Gw(e,t){switch(e){case`npx-cache`:return"This MCP was launched via a package-manager cache (npx / bunx / pnpm dlx) and just resolved a different package version than the running server. Stop `ok start` so the next launch matches, or run `ok init --pin` for a stable launch path.";case`stable-shim`:return"The CLI shim was likely upgraded while a project server is still running (a desktop auto-update or `npm i -g` / `brew upgrade` will do this). Close and reopen the project window, or stop `ok start`, so the next launch matches.";case`absolute-pin`:return`This MCP is launched from a pinned path${t?` (${t})`:``} that no longer matches the running server. Re-run \`ok init --pin\` from your current install to refresh, or stop \`ok start\` so the next launch matches.`;default:return"Stop `ok start` and retry, or align CLI versions across your installs."}}function Kw(e){return e?/\bENOENT\b/i.test(e):!1}function qw(e){switch(Ww(e)){case`absolute-pin`:return"This failure usually means the CLI entry script no longer exists at the pinned path (common after changing how you installed Open Knowledge or removing an old global package). Re-run `ok init --pin` from your current install and update your editor MCP config, or use an unpinned launcher such as `npx @inkeep/open-knowledge mcp`.";case`stable-shim`:return"The expected `ok` shim is missing on disk. Reinstall or repair your Open Knowledge CLI. If you switched install sources, run `ok init --pin` again so your editor matches the binary you have.";case`npx-cache`:return"The package-manager cache copy used for this launch may have been removed. Retry once, or run `ok init --pin` so your editor uses a durable absolute path.";default:return"Often means the configured launcher path does not exist (stale pin, moved install, or missing runtime). Re-run `ok init --pin` from your current install or fix the MCP command in your editor settings."}}function Jw(e,t,n){let r=`spawn failed: ${e}${t?` stderr:\n${t}`:``}`;return Kw(e)&&(r+=`\n\n${qw(n)}`),r}function Yw(e){if(e===void 0||e===``)return;let t=Number.parseInt(e,10);if(!(Number.isNaN(t)||t<=0))return t}function Xw(e){if(e.portOverride!==void 0){let t=Number.parseInt(e.portOverride,10);if(Number.isNaN(t))return{action:`disk-only`,message:`invalid --port value '${e.portOverride}' — disk-only mode`};if(t>0){let n=`ws://${e.host}:${t}`;return{action:`connect`,url:n,message:`using --port override, connecting to ${n}`}}return{action:`disk-only`,message:`--port=0 — disk-only mode`}}let t=e.readLock();if(t&&t.port>0&&e.isAlive(t.pid)){let n=e.expectedProtocolVersion??1,r=t.protocolVersion;if(r===n){let e=`ws://localhost:${t.port}`;return{action:`connect`,url:e,message:`connected to running instance at ${e} (pid ${t.pid})`}}let i=r===void 0?`unknown (pre-version-field lock)`:`v${r}`,a=t.runtimeVersion?` runtime ${t.runtimeVersion}`:``,o=e.launchPath??process.argv[1],s=Ww(o),c=Gw(s,o);return{action:`incompatible`,message:`Open Knowledge server at port ${t.port} (pid ${t.pid}${a}) speaks protocol ${i}; this MCP needs protocol v${n}.\n`+c,expectedProtocolVersion:n,actualProtocolVersion:r,lock:t,launchShape:s,launchPath:o}}return e.envAutoStart===`0`?{action:`disk-only`,message:`auto-spawn disabled via OK_MCP_AUTOSTART=0 — disk-only mode`}:e.configAutoStart?t?{action:`spawn`,message:`existing lock is not usable (port=${t.port}, pid=${t.pid}) — spawning ok start`}:{action:`spawn`,message:`no running instance — spawning ok start`}:{action:`disk-only`,message:`auto-spawn disabled via config.mcp.autoStart=false — disk-only mode`}}async function Zw(e){let t=e.readLock??(()=>_e(e.lockDir)),n=e.isAlive??P,r=e.sleep??(e=>nr(e)),i=e.spawn??Cn,a=e.readErrorLog??(e=>Pn(e)?Ln(e,`utf-8`).trim():``),o=e.openErrorLog??(e=>In(e,`w`)),s=e.closeFd??Nn,c=e.timeoutMs??5e3,l=e.pollIntervalMs??100,u=e.launchPath??process.argv[1],d=Xw({host:e.host,portOverride:e.portOverride,envAutoStart:e.envAutoStart,configAutoStart:e.configAutoStart,readLock:t,isAlive:n,launchPath:e.launchPath});if(e.logger?.info(`auto-start decision`,{action:d.action,message:d.message,contentDir:e.contentDir}),d.action===`connect`)return{serverUrl:d.url,message:d.message};if(d.action===`disk-only`)return{serverUrl:void 0,message:d.message};if(d.action===`incompatible`)throw e.logger?.error(`protocol mismatch — refusing to connect`,void 0,{expectedProtocolVersion:d.expectedProtocolVersion,actualProtocolVersion:d.actualProtocolVersion,lockPid:d.lock.pid,lockPort:d.lock.port,lockRuntimeVersion:d.lock.runtimeVersion,launchShape:d.launchShape,launchPath:d.launchPath}),Error(d.message);Pn(e.lockDir)||Fn(e.lockDir,{recursive:!0});let f=kn(e.lockDir,`last-spawn-error.log`),p=o(f),m,h,g=xn();e.logger?.info(`spawning server`,{command:g.command,cwd:e.contentDir,timeoutMs:c});try{try{m=i(g.command,[...g.prefixArgs,`start`],{detached:!0,stdio:[`ignore`,`ignore`,p],cwd:e.contentDir,env:{...process.env,OK_LOCK_KIND:`mcp-spawned`,OK_PARENT_PID:String(process.pid)}}),m.on(`error`,e=>{h=e instanceof Error?e.message:String(e)}),m.unref()}catch(e){h=e instanceof Error?e.message:String(e)}}finally{try{s(p)}catch{}}let _=Date.now()+c;for(;Date.now()<_;){if(h){let t=a(f);throw e.logger?.error(`spawn failed`,void 0,{error:h,stderr:t,launchPath:u,stalePinHint:Kw(h)}),Error(Jw(h,t,u))}await r(l);let i=t();if(i&&i.port>0&&n(i.pid)){let t=`ws://localhost:${i.port}`;return e.logger?.info(`server ready after spawn`,{url:t,pid:i.pid}),{serverUrl:t,message:`spawned ok start; connected at ${t} (pid ${i.pid})`}}}if(h){let t=a(f);throw e.logger?.error(`spawn failed (post-deadline)`,void 0,{error:h,stderr:t,launchPath:u,stalePinHint:Kw(h)}),Error(Jw(h,t,u))}let v=a(f),y=(c/1e3).toFixed(c%1e3==0?0:2),b=m?.pid,x=``;throw typeof b==`number`&&(x=n(b)?` child pid=${b} is still running — raise OK_MCP_SPAWN_TIMEOUT_MS if this is a slow boot.`:` child pid=${b} exited — check last-spawn-error.log.`),e.logger?.error(`spawn poll timeout`,void 0,{timeoutMs:c,childPid:b,childAlive:typeof b==`number`?n(b):void 0,stderr:v||void 0}),Error(`server did not start within ${y}s.${x}${v?` stderr:\n${v}`:``}`)}function Qw(e){if(e.portOverride!==void 0){let t=Number.parseInt(e.portOverride,10);if(Number.isNaN(t)||t<=0)return async()=>void 0;let n=`ws://${e.host}:${t}`;return async()=>n}let t=e.ensureServerRunningFn??Zw,n=e.cacheMs??1e3,r=new Map,i=new Map;return async a=>{let o=await Fe(a??e.startupCwd),s=Date.now(),c=r.get(o);if(c&&c.expiresAt>s)return e.logger?.debug(`server url cache hit`,{cwd:o,url:c.url}),c.url;let l=i.get(o);if(l)return e.logger?.debug(`server url resolution pending`,{cwd:o}),await l;e.logger?.debug(`server url cache miss`,{cwd:o});let u=(async()=>{let i=await e.resolveConfig(o),a=ge(i,o),s=he(a),c=e.readLock,l=c?()=>c(s):void 0,u=await t({lockDir:s,contentDir:a,host:i.server.host,portOverride:void 0,envAutoStart:e.envAutoStart,configAutoStart:i.mcp.autoStart,logger:e.logger,timeoutMs:e.timeoutMs,pollIntervalMs:e.pollIntervalMs,spawn:e.spawn,readLock:l,isAlive:e.isAlive,sleep:e.sleep,readErrorLog:e.readErrorLog,openErrorLog:e.openErrorLog,closeFd:e.closeFd,launchPath:e.launchPath});return r.set(o,{url:u.serverUrl,expiresAt:Date.now()+n}),u.serverUrl})();i.set(o,u);try{return await u}finally{i.delete(o)}}}function $w(e,t){return t===void 0?!Pn(jn(e,`.ok`)):!1}function eT(e){return new r(`mcp`).description(`Start MCP stdio server for project knowledge base`).option(`-p, --port <port>`,`Override port discovery and connect to this port (0 = disk-only)`,void 0).action(async t=>{try{let n=e(),r=process.cwd();if($w(r,t.port)){process.stderr.write(`[mcp] ${r} is not an Open Knowledge project (no .ok/); exiting. Run \`ok init\` to scaffold one.\n`),process.exitCode=1;return}let i=Re({startupCwd:r,startupConfig:n}),a=Yw(process.env.OK_MCP_SPAWN_TIMEOUT_MS),o,s;if(t.port!==void 0){let e=Number.parseInt(t.port,10);Number.isNaN(e)?(o=void 0,s=`invalid --port value '${t.port}' — disk-only mode`):e>0?(o=`ws://${n.server.host}:${e}`,s=`using --port override, connecting to ${o}`):(o=void 0,s=`--port=0 — disk-only mode`)}else o=Qw({startupCwd:r,resolveConfig:i,host:n.server.host,portOverride:void 0,envAutoStart:process.env.OK_MCP_AUTOSTART,timeoutMs:a}),s=`project server discovery/autostart is lazy per effective cwd`;process.stderr.write(`[mcp] ${s}\n`),await Vw({projectDir:r,serverUrl:o,config:i,startupConfig:n,bypassProjectSelection:t.port!==void 0})}catch(e){process.stderr.write(`MCP server failed to start: ${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}})}function tT(e){return new r(`preview`).description(`Show what content the watcher will track (read-only)`).action(async()=>{let{previewContent:t,formatPreviewBlock:n}=await import(`./preview-BlsnSdAb.mjs`),r=e(),i=process.cwd(),a=ge(r,i),o;try{o=t({projectDir:i,contentDir:a})}catch(e){console.error(`Content preview failed: ${e instanceof Error?e.message:String(e)}`),process.exitCode=1;return}process.stdout.write(`${n(o,i)}\n`),o.totalCount===0&&o.warnings.length>0&&(process.exitCode=1)})}function nT(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function rT(e,t,n=process.cwd()){let r=e.op??`sync`,i=_e(he(ge(t,n)));if(i&&i.port>0){let t=`http://127.0.0.1:${i.port}/api/sync/trigger`;e.json||process.stderr.write(`Triggering ${r} via running server (port ${i.port})…\n`);try{let n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({op:r})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`Server responded with ${n.status}`)}nT(e.json,{type:`triggered`,op:r,port:i.port}),e.json||process.stderr.write(`✓ ${r} triggered\n`);return}catch(t){let n=t instanceof Error?t.message:String(t);e.json||process.stderr.write(`Server trigger failed (${n}), running directly…\n`)}}e.json||process.stderr.write(`Running ${r} directly (no live server)…\n`);let a=ye({baseDir:n});if(r===`sync`||r===`pull`){nT(e.json,{type:`step`,step:`pull`});let t=await a.pull();nT(e.json,{type:`pull`,summary:t.summary}),e.json||process.stderr.write(` pull: ${t.summary.changes} changes\n`)}(r===`sync`||r===`push`)&&(nT(e.json,{type:`step`,step:`push`}),await a.push(),nT(e.json,{type:`push`,ok:!0}),e.json||process.stderr.write(` push: ok
|
|
1410
|
+
`)),nT(e.json,{type:`complete`,op:r}),e.json||process.stderr.write(`✓ ${r} complete\n`)}function iT(e){return new r(`sync`).description(`Commit, pull, and push to the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await rT({json:t.json,op:`sync`},e())}catch(e){let n=e instanceof Error?e.message:String(e);t.json?process.stdout.write(`${JSON.stringify({type:`error`,message:n})}\n`):process.stderr.write(`✗ sync failed: ${n}\n`),process.exit(1)}})}function aT(e){return new r(`pull`).description(`Pull changes from the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await rT({json:t.json,op:`pull`},e())}catch(e){let n=e instanceof Error?e.message:String(e);t.json?process.stdout.write(`${JSON.stringify({type:`error`,message:n})}\n`):process.stderr.write(`✗ pull failed: ${n}\n`),process.exit(1)}})}function oT(e){return new r(`push`).description(`Push commits to the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await rT({json:t.json,op:`push`},e())}catch(e){let n=e instanceof Error?e.message:String(e);t.json?process.stdout.write(`${JSON.stringify({type:`error`,message:n})}\n`):process.stderr.write(`✗ push failed: ${n}\n`),process.exit(1)}})}async function sT(e={}){let t=jn(e.cwd??process.cwd()),n;try{n=await ke({projectDir:t,rootDir:e.root})}catch(e){return e instanceof xe?{status:`prerequisite-missing`,message:`${Ue(`Error:`)} ${e.message}`,exitCode:1}:{status:`failed`,message:`${Ue(`Error:`)} ${e instanceof Error?e.message:String(e)}`,exitCode:1}}if(n.created.length===0&&n.configEdits.length===0)return{status:`no-op`,message:`${He(`Your knowledge base is already seeded.`)}\n${Ve(`Nothing to do.`)}`,plan:n,exitCode:0};if(e.dryRun)return{status:`dry-run`,message:`${Ge(`Plan (dry-run — no changes made):`)}\n\n${cT(n,t)}`,plan:n,exitCode:0};if(!e.yes&&!await lT(`${Ge(`Plan:`)}\n\n${cT(n,t)}\n\n${Ge(`Apply?`)} ${Ve(`[Y/n] `)}`,e.confirmStream))return{status:`cancelled`,message:Ve(`Cancelled.`),plan:n,exitCode:0};let r=await be(n,{projectDir:t});if(r.errors.length>0){let e=r.errors.map(e=>` ${Ue(`✗`)} ${e.path}: ${e.error}`);return{status:`failed`,message:[`${We(`Applied`)} ${r.applied} entries, ${We(String(r.errors.length))} error(s):`,...e].join(`
|
|
1411
|
+
`),plan:n,exitCode:1}}return{status:`applied`,message:`${He(`✓ Seeded knowledge base`)} ${Ve(`(${r.applied} entries, ${r.durationMs}ms)`)}`,plan:n,exitCode:0}}function cT(e,t){let n=[],r=e.created.filter(e=>e.kind===`folder`),i=e.created.filter(e=>e.kind===`file`);if(r.length>0){n.push(Ge(`Folders to create:`));for(let e of r)n.push(` ${He(`+`)} ${Be(An(t,jn(t,e.path))||e.path)}${Ve(`/`)}`)}if(i.length>0){n.length>0&&n.push(``),n.push(Ge(`Files to create:`));for(let e of i)n.push(` ${He(`+`)} ${Be(An(t,jn(t,e.path))||e.path)}`)}if(e.configEdits.length>0){n.length>0&&n.push(``),n.push(Ge(`config.yml folders: entries to add:`));for(let t of e.configEdits)n.push(` ${He(`+`)} ${Be(t.folderMatch)} ${Ve(`—`)} ${t.entry.frontmatter.title??``}`)}if(e.skipped.length>0){n.length>0&&n.push(``),n.push(Ve(`Already present (skipped):`));for(let t of e.skipped)n.push(` ${Ve(`· ${t.path} (${t.reason})`)}`)}if(e.warnings.length>0){n.length>0&&n.push(``),n.push(We(`Warnings:`));for(let t of e.warnings)n.push(` ${We(`!`)} ${t}`)}return n.join(`
|
|
1412
|
+
`)}async function lT(e,t){let n=or({input:t??process.stdin,output:process.stdout});try{let t=(await n.question(e)).trim().toLowerCase();return t===``||t===`y`||t===`yes`}finally{n.close()}}function uT(){return new r(`seed`).description(`Scaffold the Karpathy three-layer knowledge-base structure (external-sources/, research/, articles/) + log.md + config.yml folders: entries. Use --root to place them inside a subfolder instead of the project root.`).argument(`[path]`,`Project directory (defaults to cwd)`).option(`-r, --root <path>`,`Subfolder (relative to the project dir) to scaffold into — created if missing. Defaults to the project root when omitted in non-interactive runs; prompts on a TTY.`).option(`-y, --yes`,`Skip confirmation prompt`).option(`--dry-run`,`Print the plan and exit without writing`).action(async(e,t)=>{let n=await sT({cwd:e??process.cwd(),root:t.root,yes:t.yes,dryRun:t.dryRun});process.stdout.write(`${n.message}\n`),n.exitCode!==0&&(process.exitCode=n.exitCode)})}function dT(e,t){return{server:fT(`server`,e),ui:fT(`ui`,t)}}function fT(e,t){switch(t.status){case`missing`:return{name:e,state:`missing`,alive:!1};case`corrupt`:return{name:e,state:`corrupt`,alive:!1};case`foreign-host`:return{name:e,state:`foreign-host`,pid:t.lock.pid,port:t.lock.port,startedAt:t.lock.startedAt,host:t.lock.hostname,alive:`unknown`};case`dead-pid`:return{name:e,state:`dead-pid`,pid:t.lock.pid,port:t.lock.port,startedAt:t.lock.startedAt,host:t.lock.hostname,alive:!1};case`alive`:return{name:e,state:`alive`,pid:t.lock.pid,port:t.lock.port,startedAt:t.lock.startedAt,host:t.lock.hostname,alive:!0}}}function pT(e){return`${mT(e.server)}\n${mT(e.ui)}`}function mT(e){let t=e.name===`server`?`server`:`ui `;return e.state===`missing`?`${t} not running`:e.state===`corrupt`?`${t} lock file corrupt — run \`ok clean\``:e.state===`foreign-host`?`${t} foreign host (${e.host}) pid=${e.pid} port=${e.port}`:e.state===`dead-pid`?`${t} stale (dead pid=${e.pid}) — run \`ok clean\``:`${t} alive pid=${e.pid} port=${e.port} started=${e.startedAt}`}function hT(e){let t=e.inspect??(t=>Co(e.lockDir,t)),n=e.log??(e=>console.log(e)),r=dT(t(`server`),t(`ui`));return e.json?n(JSON.stringify(r,null,2)):n(pT(r)),r}function gT(e){return new r(`status`).description(`Show live state of the server + ui lockfiles for this project`).option(`--json`,`Emit structured JSON instead of formatted text`).action(t=>{hT({lockDir:he(ge(e(),process.cwd())),json:t.json===!0})})}function _T(e,t){let n=[];return e.status===`alive`&&n.push({name:`server`,pid:e.lock.pid,port:e.lock.port}),t.status===`alive`&&n.push({name:`ui`,pid:t.lock.pid,port:t.lock.port}),{targets:n}}function vT(e){let t=e.inspect??(t=>Co(e.lockDir,t)),n=e.kill??((e,t)=>process.kill(e,t)),r=e.log??(e=>console.log(e)),i=e.error??(e=>console.error(e)),a=_T(t(`server`),t(`ui`));if(a.targets.length===0)return r(`No running open-knowledge processes.`),{stopped:[],failed:[],hadTargets:!1};let o=[],s=[];for(let e of a.targets)try{n(e.pid,`SIGTERM`),o.push(e)}catch(t){s.push({target:e,error:t instanceof Error?t.message:String(t)})}return o.length>0&&r(`Stopped: ${o.map(e=>`${e.name} (pid=${e.pid}, port=${e.port})`).join(`, `)}`),s.length>0&&i(`Failed to stop: ${s.map(({target:e,error:t})=>`${e.name} (pid=${e.pid}): ${t}`).join(`; `)}`),{stopped:o,failed:s,hadTargets:!0}}function yT(e){return new r(`stop`).description(`Stop the running open-knowledge server and UI (live only)`).action(()=>{vT({lockDir:he(ge(e(),process.cwd()))}).failed.length>0&&(process.exitCode=1)})}const bT=1e4,xT=[`connection`,`keep-alive`,`proxy-authenticate`,`proxy-authorization`,`te`,`trailer`,`transfer-encoding`,`upgrade`,`cookie`,`set-cookie`];async function ST(e){let t=e.upstreamTimeoutMs??bT,n=rr((n,r)=>{wT(n,r,e.upstreamHost,e.upstreamPort,t)});await new Promise((t,r)=>{let i=e=>r(e);n.once(`error`,i),n.listen(e.listenPort,e.host,()=>{n.off(`error`,i),t()})});let r=n.address();return{httpServer:n,port:typeof r==`object`&&r?r.port:e.listenPort,close:()=>new Promise(e=>{n.close(()=>e())})}}function CT(e,t,n){wT(e,t,n.upstreamHost,n.upstreamPort,n.upstreamTimeoutMs??bT)}function wT(e,t,n,r,i){let a={...e.headers};delete a.host;for(let e of xT)delete a[e];e.setTimeout(3e4,()=>{if(t.headersSent)try{t.end()}catch{}else try{t.writeHead(408,{"Content-Type":`text/plain`}),t.end(`Request Timeout`)}catch{}try{e.socket?.destroy()}catch{}});let o=ir({host:n,port:r,method:e.method,path:e.url,headers:{...a,host:`${n}:${r}`}},e=>{let n={...e.headers};for(let e of xT)delete n[e];t.writeHead(e.statusCode??502,n),e.pipe(t),e.once(`error`,()=>{try{t.end()}catch{}})});i>0&&o.setTimeout(i,()=>{if(!t.headersSent)t.writeHead(504,{"Content-Type":`text/plain`}),t.end(`Gateway Timeout`);else try{t.end()}catch{}o.destroy()}),o.on(`error`,()=>{if(!t.headersSent)t.writeHead(502,{"Content-Type":`text/plain`}),t.end(`Bad Gateway`);else try{t.end()}catch{}}),e.on(`error`,()=>{o.destroy()}),e.pipe(o)}async function TT(e){await Promise.all(e.map(e=>new Promise(t=>{e.close(()=>t())})))}async function ET(e){let{existsSync:t}=await import(`node:fs`),{createServer:n}=await import(`node:http`),{resolve:r}=await import(`node:path`),{acquireUiLock:a,createAssetServeMiddleware:o,createContentFilter:s,readServerLock:c,releaseUiLock:l,updateUiLockPort:u}=await import(`./dist-C5mH5cvM.mjs`),{default:d}=await import(`./build-DPvitIN3.mjs`),{resolveContentDir:f,resolveLockDir:p}=await import(`./paths-RkNXbnlJ.mjs`),m=f(e.config,e.cwd),h=p(m);a(h,{port:0,worktreeRoot:e.cwd});let g=import.meta.dirname??new URL(`.`,import.meta.url).pathname,_=[r(g,`public`),r(g,`../../app/dist`),r(g,`../../../app/dist`)].find(e=>t(e)),v=_?d(_,{single:!0,gzip:!0,immutable:!0,extensions:[]}):null,y=t(m)?o({contentFilter:s({projectDir:e.cwd,contentDir:m}),contentSirv:d(m,{dotfiles:!1,dev:!0,extensions:[]}),inlineExtensions:M,assetExtensions:ie,blocklistExtensions:A}):null,b=e.port,x=null,S=(e,t)=>{let n=e.url?.split(`?`)[0];if((n===`/`||n===``)&&(e.url=`/index.html`),n===`/api/config`&&(e.method===`GET`||e.method===`HEAD`)){x?.();let n=c(h),r=n&&n.port>0?`ws://localhost:${n.port}/collab`:null,i=JSON.stringify({collabUrl:r,previewUrl:null,port:b});t.setHeader(`Content-Type`,`application/json`),t.setHeader(`Cache-Control`,`no-store`),t.setHeader(`X-Content-Type-Options`,`nosniff`),t.statusCode=200,e.method===`HEAD`?t.end():t.end(i);return}if(n?.startsWith(`/api/`)){x?.();let r=c(h);if(!r||r.port<=0){t.writeHead(503,{"Content-Type":`application/json`,"Cache-Control":`no-store`}),t.end(JSON.stringify({error:"Collab server not running. Start `ok start` or run `ok status`.",path:n}));return}CT(e,t,{upstreamHost:`localhost`,upstreamPort:r.port});return}if(y){y(e,t,()=>{v?v(e,t):DT(t)});return}if(v){v(e,t);return}DT(t)},C=e.host===void 0?[`::1`,`127.0.0.1`]:[e.host],w=[],ee=e.port;try{for(let e of C){let t=n(S);w.push(t),await new Promise((n,r)=>{let i=e=>r(e);t.once(`error`,i),t.listen(ee,e,()=>{t.off(`error`,i);let e=t.address();typeof e==`object`&&e&&(ee=e.port),n()})})}}catch(e){await Promise.all(w.map(e=>new Promise(t=>{try{e.close(()=>t())}catch{t()}})));try{l(h)}catch{}throw e}let T=ee;b=T,u(h,T);let E=e.scheduler??i,te=e.safetyNetMs??432e5,ne=null,D=!1,re=!1,O=()=>{D||(D=!0,ne!==null&&(E.clearTimeout(ne),ne=null))},k=()=>{if(O(),!re){re=!0;try{l(h)}catch{}}},ae=()=>{D||te<=0||(ne!==null&&(E.clearTimeout(ne),ne=null),ne=E.setTimeout(()=>{ne=null,console.warn(`[ui] safety-net (${te}ms) reached — shutting down (D-025 backstop)`);try{e.onSafetyNet?.()}catch{}for(let e of w)try{e.close()}catch{}k()},te))},oe=()=>{D||te<=0||ae()};return x=oe,ae(),{httpServers:w,port:T,release:k,detachSafetyNet:O,nudgeSafetyNet:oe}}function DT(e){e.writeHead(404),e.end(`Not found`)}function OT(e,t){if(e!==void 0){let t=Number.parseInt(e,10);if(Number.isNaN(t)||t<0||t>65535)throw Error(`Invalid --port value '${e}'`);return t}if(t!==void 0&&t!==``){let e=Number.parseInt(t,10);if(Number.isNaN(e)||e<0||e>65535)throw Error(`Invalid PORT env value '${t}'`);return e}return 0}async function kT(e){let t=e.readLock??(async()=>{let{readUiLock:t}=await import(`./dist-C5mH5cvM.mjs`);return t(e.lockDir)}),n=await t();if(!n)throw Error(`UI lock collision reported but the lock disappeared before handling — retry acquiring.`);if(n.port===e.requestedPort&&n.port>0)return{mode:`already-running`,port:n.port};let r=n.port;if(r===0){let n=Date.now()+(e.pollDeadlineMs??2e3),i=e.pollIntervalMs??100;for(;Date.now()<n;){await new Promise(e=>{setTimeout(e,i)});let e=await t();if(e&&e.port>0){r=e.port;break}}if(r===0)throw Error("UI did not bind within 2s; run `ok clean`");if(r===e.requestedPort)return{mode:`already-running`,port:r}}return{mode:`proxy`,handle:await ST({listenPort:e.requestedPort,host:e.host,upstreamHost:`localhost`,upstreamPort:r}),upstreamPort:r}}function AT(e){return new r(`ui`).description(`Serve the Open Knowledge React editor UI`).option(`-p, --port <port>`,`UI port (default: $PORT env or 0 / kernel-allocated)`).option(`-H, --host <host>`,"UI host. Default: two-socket loopback bind (`[::1]` + `127.0.0.1`) so cross-family collisions fail loud (D-033). Pass an explicit host (e.g. `127.0.0.1`, `0.0.0.0`) to bind a single socket on that host.").action(async t=>{let{dim:n}=await import(`./colors-CswooXAS.mjs`),{UiLockCollisionError:r}=await import(`./dist-C5mH5cvM.mjs`),{resolveContentDir:i,resolveLockDir:a}=await import(`./paths-RkNXbnlJ.mjs`),o=e(),s=t.host,c;try{c=OT(t.port,process.env.PORT)}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exitCode=1;return}try{let e=await ET({config:o,cwd:process.cwd(),port:c,host:s}),t=s===void 0||s===`::`||s===`0.0.0.0`?`localhost`:s;console.log(`${n(`[ui]`)} listening on http://${t}:${e.port}`);let r=!1,i=t=>{if(r)return;r=!0,console.log(n(`\n[ui] Shutting down (${t})...`)),e.detachSafetyNet();let i=()=>{try{e.release()}finally{process.exit(process.exitCode??0)}};TT(e.httpServers).then(i,i),setTimeout(i,2e3).unref()};process.once(`SIGINT`,()=>i(`SIGINT`)),process.once(`SIGTERM`,()=>i(`SIGTERM`));return}catch(e){if(!(e instanceof r))throw e;let t=a(i(o,process.cwd())),l=s??`localhost`,u;try{u=await kT({requestedPort:c,host:l,lockDir:t})}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exit(1)}u.mode===`already-running`&&(console.log(`UI already running at http://${l}:${u.port}`),process.exit(0)),console.log(`UI running at http://${l}:${u.upstreamPort}; acting as HTTP proxy on port ${u.handle.port}`);let d=!1,f=e=>{d||(d=!0,console.log(n(`\n[ui-proxy] Shutting down (${e})...`)),u.handle.close().finally(()=>process.exit(process.exitCode??0)),setTimeout(()=>process.exit(process.exitCode??0),2e3).unref())};process.once(`SIGINT`,()=>f(`SIGINT`)),process.once(`SIGTERM`,()=>f(`SIGTERM`))}})}process.argv.includes(`--no-color`)?(process.env.NO_COLOR=`1`,delete process.env.FORCE_COLOR):process.argv.includes(`--color`)&&(process.env.FORCE_COLOR=`1`,delete process.env.NO_COLOR);const jT=new r;let MT;jT.name(`open-knowledge`).description(`Local-first knowledge base with CRDT collaboration`).version(pe).option(`--cwd <path>`,`Working directory`).option(`--log-level <level>`,`Log level`,`info`).option(`--no-color`,`Disable color output`).option(`--color`,`Force color output`).hook(`preAction`,e=>{let t=e.opts(),n=t.cwd;n!==void 0&&process.chdir(n);let{config:r}=Ie(n),i=e.args.length===0?t:e.commands[0]?.opts()??{};i.host!==void 0&&(r.server.host=i.host),process.env.HOST&&(r.server.host=process.env.HOST),MT=r});const NT=bn(()=>MT);jT.addCommand(NT,{isDefault:!0});const PT=eT(()=>MT);jT.addCommand(PT),jT.addCommand(ze()),jT.addCommand(uT()),jT.addCommand(Xo());const FT=tT(()=>MT);jT.addCommand(FT);const IT=AT(()=>MT);jT.addCommand(IT),jT.addCommand(yT(()=>MT)),jT.addCommand(Eo(()=>MT)),jT.addCommand(gT(()=>MT)),jT.addCommand(Uo()),jT.addCommand(So(()=>MT)),jT.addCommand(Io(()=>MT)),jT.addCommand(iT(()=>MT)),jT.addCommand(oT(()=>MT)),jT.addCommand(aT(()=>MT)),await jT.parseAsync();export{};
|
|
1412
1413
|
//# sourceMappingURL=cli.mjs.map
|