@mnbny/woof 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/README.md +472 -2
- package/cli/templates/add-draft.md +21 -0
- package/cli/templates/add-error.md +5 -0
- package/cli/templates/add-result.md +10 -0
- package/cli/templates/edit-draft.md +22 -0
- package/cli/templates/edit-error.md +3 -0
- package/cli/templates/edit-path.md +3 -0
- package/cli/templates/edit-result.md +7 -0
- package/cli/templates/edit-unchanged.md +3 -0
- package/cli/templates/editor.html +338 -0
- package/cli/templates/explain-ambiguous.md +5 -0
- package/cli/templates/explain-error.md +5 -0
- package/cli/templates/explain-result.md +5 -0
- package/cli/templates/export-error.md +3 -0
- package/cli/templates/export-result.md +6 -0
- package/cli/templates/get-ambiguous.md +5 -0
- package/cli/templates/get-cancelled.md +5 -0
- package/cli/templates/get-candidates.md +5 -0
- package/cli/templates/get-error.md +5 -0
- package/cli/templates/get-home-dependencies.md +1 -0
- package/cli/templates/get-no-match.md +3 -0
- package/cli/templates/get-search-empty.md +3 -0
- package/cli/templates/get-search.md +5 -0
- package/cli/templates/import-backup.md +7 -0
- package/cli/templates/import-choice-rejected.md +1 -0
- package/cli/templates/import-decision.md +16 -0
- package/cli/templates/import-error.md +3 -0
- package/cli/templates/import-finding-incomplete.md +1 -0
- package/cli/templates/import-finding-unreadable.md +1 -0
- package/cli/templates/import-findings-configuration.md +3 -0
- package/cli/templates/import-findings.md +3 -0
- package/cli/templates/import-imported.md +3 -0
- package/cli/templates/import-rechecked.md +1 -0
- package/cli/templates/import-rechecks.md +1 -0
- package/cli/templates/import-report.md +1 -0
- package/cli/templates/import-reusable.md +2 -0
- package/cli/templates/import-unchanged.md +1 -0
- package/cli/templates/import-validation-findings.md +1 -0
- package/cli/templates/init-error.md +3 -0
- package/cli/templates/init-home.md +7 -0
- package/cli/templates/init-location.md +7 -0
- package/cli/templates/init-registered.md +5 -0
- package/cli/templates/init-repository.md +5 -0
- package/cli/templates/init-target.md +11 -0
- package/cli/templates/invocation-error.md +5 -0
- package/cli/templates/migration-notice.md +1 -0
- package/cli/templates/projects-error.md +3 -0
- package/cli/templates/projects-result.md +3 -0
- package/cli/templates/readme-error.md +5 -0
- package/cli/templates/skill-missing.md +10 -0
- package/cli/templates/skill-outdated.md +7 -0
- package/cli/templates/validate-ambiguous.md +5 -0
- package/cli/templates/validate-error.md +5 -0
- package/cli/templates/validate-result.md +3 -0
- package/cli/woof.bundle.mjs +244 -0
- package/package.json +73 -4
- package/skills/woof-execution/SKILL.md +84 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{createRequire as __woofRequire}from'node:module';const require=__woofRequire(import.meta.url);
|
|
3
|
+
var Vp=Object.create;var Bs=Object.defineProperty;var qp=Object.getOwnPropertyDescriptor;var Kp=Object.getOwnPropertyNames;var Zp=Object.getPrototypeOf,Jp=Object.prototype.hasOwnProperty;var G=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var Lt=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(n){throw t=0,n}};var Xp=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Kp(t))!Jp.call(e,i)&&i!==n&&Bs(e,i,{get:()=>t[i],enumerable:!(r=qp(t,i))||r.enumerable});return e};var Sr=(e,t,n)=>(n=e!=null?Vp(Zp(e)):{},Xp(t||!e||!e.__esModule?Bs(n,"default",{value:e,enumerable:!0}):n,e));function fe(e=process.env){if(e.CLAUDECODE)return"Claude Code";if(e.CODEX_THREAD_ID||e.CODEX_CI||e.CODEX_SANDBOX||e.CODEX_SANDBOX_NETWORK_DISABLED)return"Codex";if(e.ANTIGRAVITY_AGENT||e.ANTIGRAVITY_CONVERSATION_ID)return"Antigravity CLI";if(e.GEMINI_CLI)return"Gemini CLI";if(e.CURSOR_AGENT)return"Cursor";if(e.COPILOT_CLI)return"GitHub Copilot CLI";if(e.OPENCODE||e.OPENCODE_CLIENT)return"OpenCode";if(e.CLINE_ACTIVE)return"Cline";if(e.PI_CODING_AGENT||e.PI_SESSION_ID)return"pi";if(e.ROO_ACTIVE||e.ROO_CLI_RUNTIME)return"Roo Code";if(e.AGENT_CONTEXT_OUT&&e.AGENT_DISPLAY_OUT)return"Kiro";if(/^devin_[^\s]+_agent$/.test(e.AI_AGENT??""))return"Devin CLI";if(e.AI_AGENT||e.AGENT)return"AI agent"}var Ve=G(()=>{"use strict"});function ef(e=""){if(!Yp.test(e))return e!==e.toLowerCase()}function Gs(e,t){let n=t??Qp,r=[];if(!e||typeof e!="string")return r;let i="",o,s;for(let a of e){let c=n.includes(a);if(c===!0){r.push(i),i="",o=void 0;continue}let u=ef(a);if(s===!1){if(o===!1&&u===!0){r.push(i),i=a,o=u;continue}if(o===!0&&u===!1&&i.length>1){let l=i.at(-1);r.push(i.slice(0,Math.max(0,i.length-1))),i=l+a,o=u;continue}}i+=a,o=u,s=c}return r.push(i),r}function tf(e){return e?e[0].toUpperCase()+e.slice(1):""}function nf(e){return e?e[0].toLowerCase()+e.slice(1):""}function rf(e,t){return e?(Array.isArray(e)?e:Gs(e)).map(n=>tf(t?.normalize?n.toLowerCase():n)).join(""):""}function Dn(e,t){return nf(rf(e||"",t))}function Tr(e,t){return e?(Array.isArray(e)?e:Gs(e)).map(n=>n.toLowerCase()).join(t??"-"):""}function Us(e){return Tr(e||"","_")}var Yp,Qp,Hs=G(()=>{Yp=/\d/,Qp=["-","_","/","."]});import{parseArgs as of}from"node:util";function Mn(e){return Array.isArray(e)?e:e===void 0?[]:[e]}function Li(e,t=""){let n=[];for(let r of e)for(let[i,o]of r.entries())n[i]=Math.max(n[i]||0,o.length);return e.map(r=>r.map((i,o)=>t+i[o===0?"padStart":"padEnd"](n[o])).join(" ")).join(`
|
|
4
|
+
`)}function Ce(e){return typeof e=="function"?e():e}function sf(e=[],t={}){let n=new Set(t.boolean||[]),r=new Set(t.string||[]),i=t.alias||{},o=t.default||{},s=new Map,a=new Map;for(let[y,v]of Object.entries(i)){let w=v;for(let A of w)s.set(y,A),a.has(A)||a.set(A,[]),a.get(A).push(y),s.set(A,y),a.has(y)||a.set(y,[]),a.get(y).push(A)}let c={};function u(y){if(n.has(y))return"boolean";let v=a.get(y)||[];for(let w of v)if(n.has(w))return"boolean";return"string"}function l(y){if(r.has(y))return!0;let v=a.get(y)||[];for(let w of v)if(r.has(w))return!0;return!1}let p=new Set([...n,...r,...Object.keys(i),...Object.values(i).flat(),...Object.keys(o)]);for(let y of p)c[y]||(c[y]={type:u(y),default:o[y]});for(let[y,v]of s.entries())y.length===1&&c[v]&&!c[v].short&&(c[v].short=y);let f=[],m={};for(let y=0;y<e.length;y++){let v=e[y];if(v==="--"){f.push(...e.slice(y));break}if(v.startsWith("--no-")){let w=v.slice(5);m[w]=!0;continue}f.push(v)}let d;try{d=of({args:f,options:Object.keys(c).length>0?c:void 0,allowPositionals:!0,strict:!1})}catch{d={values:{},positionals:f}}let h={_:[]};h._=d.positionals;for(let[y,v]of Object.entries(d.values)){let w=v;u(y)==="boolean"&&typeof v=="string"?w=v!=="false":l(y)&&typeof v=="boolean"&&(w=""),h[y]=w}for(let[y]of Object.entries(m)){h[y]=!1;let v=s.get(y);v&&(h[v]=!1);let w=a.get(y);if(w)for(let A of w)h[A]=!1}for(let[y,v]of s.entries())h[y]!==void 0&&h[v]===void 0&&(h[v]=h[y]),h[v]!==void 0&&h[y]===void 0&&(h[y]=h[v]),h[y]!==h[v]&&o[v]===h[v]&&(h[v]=h[y]);return h}function cf(e,t){let n={boolean:[],string:[],alias:{},default:{}},r=qs(t);for(let a of r){if(a.type==="positional")continue;a.type==="string"||a.type==="enum"?n.string.push(a.name):a.type==="boolean"&&n.boolean.push(a.name),a.default!==void 0&&(n.default[a.name]=a.default),a.alias&&(n.alias[a.name]=a.alias);let c=Dn(a.name),u=Tr(a.name);if(c!==a.name||u!==a.name){let l=Mn(n.alias[a.name]||[]);c!==a.name&&!l.includes(c)&&l.push(c),u!==a.name&&!l.includes(u)&&l.push(u),l.length>0&&(n.alias[a.name]=l)}}let i=sf(e,n),[...o]=i._,s=new Proxy(i,{get(a,c){return a[c]??a[Dn(c)]??a[Tr(c)]}});for(let[,a]of r.entries())if(a.type==="positional"){let c=o.shift();if(c!==void 0)s[a.name]=c;else{if(a.default===void 0&&a.required!==!1)throw new At(`Missing required positional argument: ${a.name.toUpperCase()}`,"EARG");s[a.name]=a.default}}else if(a.type==="enum"){let c=s[a.name],u=a.options||[];if(c!==void 0&&u.length>0&&!u.includes(c))throw new At(`Invalid value for argument: ${ut(`--${a.name}`)} (${ut(c)}). Expected one of: ${u.map(l=>ut(l)).join(", ")}.`,"EARG")}else if(a.required&&s[a.name]===void 0)throw new At(`Missing required argument: --${a.name}`,"EARG");return s}function qs(e){let t=[];for(let[n,r]of Object.entries(e||{}))t.push({...r,name:n,alias:Mn(r.alias)});return t}async function uf(e){return Promise.all(e.map(t=>Ce(t)))}async function Mi(e,t){let n=await Ce(e.args||{}),r=cf(t.rawArgs,n),i={rawArgs:t.rawArgs,args:r,data:t.data,cmd:e},o=await uf(e.plugins??[]),s,a;try{for(let l of o)await l.setup?.(i);typeof e.setup=="function"&&await e.setup(i);let u=await Ce(e.subCommands);if(u&&Object.keys(u).length>0){let l=Ks(t.rawArgs,n),p=t.rawArgs[l];if(p){let f=await zi(u,p);if(!f)throw new At(`Unknown command ${ut(p)}`,"E_UNKNOWN_COMMAND");await Mi(f,{rawArgs:t.rawArgs.slice(l+1)})}else{let f=await Ce(e.default);if(f){if(e.run)throw new At("Cannot specify both 'run' and 'default' on the same command.","E_DEFAULT_CONFLICT");let m=await zi(u,f);if(!m)throw new At(`Default sub command ${ut(f)} not found in subCommands.`,"E_UNKNOWN_COMMAND");await Mi(m,{rawArgs:t.rawArgs})}else if(!e.run)throw new At("No command specified.","E_NO_COMMAND")}}typeof e.run=="function"&&(s=await e.run(i))}catch(u){a=u}let c=[];if(typeof e.cleanup=="function")try{await e.cleanup(i)}catch(u){c.push(u)}for(let u of[...o].reverse())try{await u.cleanup?.(i)}catch(l){c.push(l)}if(a)throw a;if(c.length===1)throw c[0];if(c.length>1)throw new Error("Multiple cleanup errors",{cause:c});return{result:s}}async function Fi(e,t,n){let r=await Ce(e.subCommands);if(r&&Object.keys(r).length>0){let i=Ks(t,await Ce(e.args||{})),o=t[i],s=await zi(r,o);if(s)return Fi(s,t.slice(i+1),e)}return[e,n]}async function zi(e,t){if(t in e)return Ce(e[t]);for(let n of Object.values(e)){let r=await Ce(n),i=await Ce(r?.meta);if(i?.alias&&Mn(i.alias).includes(t))return r}}function Ks(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(r==="--")return-1;if(r.startsWith("-")){!r.includes("=")&&lf(r,t)&&n++;continue}return n}return-1}function lf(e,t){let n=e.replace(/^-{1,2}/,""),r=Dn(n);for(let[i,o]of Object.entries(t))if(!(o.type!=="string"&&o.type!=="enum")&&(r===Dn(i)||(Array.isArray(o.alias)?o.alias:o.alias?[o.alias]:[]).includes(n)))return!0;return!1}async function pf(e,t){try{console.log(await hf(e,t)+`
|
|
5
|
+
`)}catch(n){console.error(n)}}async function hf(e,t){let n=await Ce(e.meta||{}),r=qs(await Ce(e.args||{})),i=await Ce(t?.meta||{}),o=`${i.name?`${i.name} `:""}`+(n.name||process.argv[1]),s=[],a=[],c=[],u=[];for(let m of r)if(m.type==="positional"){let d=m.name.toUpperCase(),h=m.required!==!1&&m.default===void 0;a.push([ut(d+Di(m)),Ws(m,h)]),u.push(h?`<${d}>`:`[${d}]`)}else{let d=m.required===!0&&m.default===void 0,h=[...(m.alias||[]).map(y=>`-${y}`),`--${m.name}`].join(", ")+Di(m);if(s.push([ut(h),Ws(m,d)]),m.type==="boolean"&&(m.default===!0||m.negativeDescription)&&!ff.test(m.name)){let y=[...(m.alias||[]).map(v=>`--no-${v}`),`--no-${m.name}`].join(", ");s.push([ut(y),[m.negativeDescription,d?Rr("(Required)"):""].filter(Boolean).join(" ")])}d&&u.push(`--${m.name}`+Di(m))}if(e.subCommands){let m=[],d=await Ce(e.subCommands);for(let[h,y]of Object.entries(d)){let v=await Ce((await Ce(y))?.meta);if(v?.hidden)continue;let w=Mn(v?.alias),A=[h,...w].join(", ");c.push([ut(A),v?.description||""]),m.push(h,...w)}u.push(m.join("|"))}let l=[],p=n.version||i.version;l.push(Rr(`${n.description} (${o+(p?` v${p}`:"")})`),"");let f=s.length>0||a.length>0;return l.push(`${Ar(Cr("USAGE"))} ${ut(`${o}${f?" [OPTIONS]":""} ${u.join(" ")}`)}`,""),a.length>0&&(l.push(Ar(Cr("ARGUMENTS")),""),l.push(Li(a," ")),l.push("")),s.length>0&&(l.push(Ar(Cr("OPTIONS")),""),l.push(Li(s," ")),l.push("")),c.length>0&&(l.push(Ar(Cr("COMMANDS")),""),l.push(Li(c," ")),l.push("",`Use ${ut(`${o} <command> --help`)} for more information about a command.`)),l.filter(m=>typeof m=="string").join(`
|
|
6
|
+
`)}function Di(e){let t=e.valueHint?`=<${e.valueHint}>`:"",n=t||`=<${Us(e.name)}>`;return!e.type||e.type==="positional"||e.type==="boolean"?t:e.type==="enum"&&e.options?.length?`=<${e.options.join("|")}>`:n}function Ws(e,t){let n=t?Rr("(Required)"):"",r=e.default===void 0?"":Rr(`(Default: ${e.default})`);return[e.description,n,r].filter(Boolean).join(" ")}async function Zs(e,t={}){let n=t.rawArgs||process.argv.slice(2),r=t.showUsage||pf;try{let i=await df(e);if(i.help.length>0&&n.some(o=>i.help.includes(o)))await r(...await Fi(e,n)),process.exit(0);else if(n.length===1&&i.version.includes(n[0])){let o=typeof e.meta=="function"?await e.meta():await e.meta;if(!o?.version)throw new At("No version specified","E_NO_VERSION");console.log(o.version)}else await Mi(e,{rawArgs:n})}catch(i){i instanceof At?(await r(...await Fi(e,n)),console.error(i.message)):console.error(i,`
|
|
7
|
+
`),process.exit(1)}}async function df(e){let t=await Ce(e.args||{}),n=new Set,r=new Set;for(let[i,o]of Object.entries(t)){n.add(i);for(let s of Mn(o.alias))r.add(s)}return{help:Vs("help","h",n,r),version:Vs("version","v",n,r)}}function Vs(e,t,n,r){return n.has(e)||r.has(e)?[]:n.has(t)||r.has(t)?[`--${e}`]:[`--${e}`,`-${t}`]}var At,af,jr,Cr,ut,Rr,Ar,ff,Js=G(()=>{Hs();At=class extends Error{code;constructor(e,t){super(e),this.name="CLIError",this.code=t}};af=(()=>{let e=globalThis.process?.env??{};return e.NO_COLOR==="1"||e.TERM==="dumb"||e.TEST||e.CI})(),jr=(e,t=39)=>n=>af?n:`\x1B[${e}m${n}\x1B[${t}m`,Cr=jr(1,22),ut=jr(36),Rr=jr(90),Ar=jr(4,24);ff=/^no[-A-Z]/});var Fn,Bi=G(()=>{Fn={name:"@mnbny/woof",version:"0.1.0",description:"Local CLI for reusable instructions, prompts, and computed resources",homepage:"https://github.com/mnbny/woof#readme",bugs:{url:"https://github.com/mnbny/woof/issues"},repository:{type:"git",url:"git+https://github.com/mnbny/woof.git"},license:"MIT",type:"module",bin:{woof:"./cli/woof.bundle.mjs"},files:["cli/woof.bundle.mjs","cli/templates/*.md","cli/templates/editor.html","skills/woof-execution/SKILL.md"],scripts:{build:"tsx .tools/scripts/build.ts",prepack:"pnpm build","pack:check":"tsx .tools/scripts/pack-check.ts",test:"vitest run --config .tools/tests/vitest.config.ts",validate:"tsx .tools/scripts/scripty.ts --sequential && pnpm build","validate:format":"SCRIPTY=1 prettier --write . --ignore-unknown --cache --log-level=error","validate:lint":"SCRIPTY=2 eslint --fix --cache --format=pretty .","validate:typecheck":"SCRIPTY=3 tsc --noEmit"},devDependencies:{"@chatwoot/pico-search":"0.6.2","@clack/prompts":"1.8.1","@eslint/js":"10.0.1","@tsconfig/strictest":"2.0.8","@types/node":"26.6.6","@types/picomatch":"4.0.3",ansis:"4.4.0","change-case":"5.4.4",citty:"0.2.2",diff:"9.0.0",esbuild:"0.28.2",eslint:"10.13.0","eslint-config-prettier":"10.1.8","eslint-formatter-pretty":"7.1.0","eslint-plugin-import":"2.32.0","eslint-plugin-prettier":"5.5.7","eslint-plugin-simple-import-sort":"14.0.0",fflate:"0.8.3",globals:"17.13.0",marked:"18.1.2",picomatch:"4.0.3",playwright:"1.64.1",prettier:"3.9.10","prettier-plugin-packagejson":"3.0.3","prettier-plugin-sh":"0.20.2",sharp:"0.35.5",tsx:"4.23.15",typescript:"6.0.3","typescript-eslint":"8.72.1",valibot:"1.5.0",vitest:"5.0.5",yaml:"2.9.1"},packageManager:"pnpm@12.16.1",engines:{node:"^22.13.0 || ^24.0.0 || >=26.0.0"},publishConfig:{access:"public"}}});function Ys(e){return!e&&!Ir?gf:{lang:e?.lang??Ir?.lang,message:e?.message,abortEarly:e?.abortEarly??Ir?.abortEarly,abortPipeEarly:e?.abortPipeEarly??Ir?.abortPipeEarly}}function vf(e){return yf?.get(e)}function kf(e){return wf?.get(e)}function xf(e,t){return $f?.get(e)?.get(t)}function Qs(e){let t=typeof e;return t==="string"?`"${e}"`:t==="number"||t==="bigint"||t==="boolean"?`${e}`:t==="object"||t==="function"?(e&&Object.getPrototypeOf(e)?.constructor?.name)??"null":t}function qe(e,t,n,r,i){let o=i&&"input"in i?i.input:n.value,s=i?.expected??e.expects??null,a=i?.received??Qs(o),c={kind:e.kind,type:e.type,input:o,expected:s,received:a,message:`Invalid ${t}: ${s?`Expected ${s} but r`:"R"}eceived ${a}`,requirement:e.requirement,path:i?.path,issues:i?.issues,lang:r.lang,abortEarly:r.abortEarly,abortPipeEarly:r.abortPipeEarly},u=e.kind==="schema",l=i?.message??e.message??xf(e.reference,c.lang)??(u?kf(c.lang):null)??r.message??vf(c.lang);l!==void 0&&(c.message=typeof l=="function"?l(c):l),u&&(n.typed=!1),n.issues?n.issues.push(c):n.issues=[c]}function bf(e,t){return e===t||Number.isNaN(e)&&Number.isNaN(t)}function ea(e,t){return Object.prototype.hasOwnProperty.call(e,t)&&t!=="__proto__"&&t!=="prototype"&&t!=="constructor"}function Ef(e,t){let n=[...new Set(e)];return n.length>1?`(${n.join(` ${t} `)})`:n[0]??"never"}function yt(e){return e["~standard"]={version:1,vendor:"valibot",validate:t=>e["~run"]({value:t},Ys())},e}function Gi(e,t){return{kind:"validation",type:"min_length",reference:Gi,async:!1,expects:`>=${e}`,requirement:e,message:t,"~run"(n,r){return n.typed&&n.value.length<this.requirement&&qe(this,"length",n,r,{received:`${n.value.length}`}),n}}}function Ui(e,t){return{kind:"validation",type:"regex",reference:Ui,async:!1,expects:`${e}`,requirement:e,message:t,"~run"(n,r){return n.typed&&!this.requirement.test(n.value)&&qe(this,"format",n,r),n}}}function ta(e,t,n){return typeof e.fallback=="function"?e.fallback(t,n):e.fallback}function na(e,t,n){return typeof e.default=="function"?e.default(t,n):e.default}function ra(e,t){return!e["~run"]({value:t},Sf).issues}function tn(e,t){return yt({kind:"schema",type:"array",reference:tn,expects:"Array",async:!1,item:e,message:t,"~run"(n,r){let i=n.value;if(Array.isArray(i)){n.typed=!0,n.value=[];for(let o=0;o<i.length;o++){let s=i[o],a=this.item["~run"]({value:s},r);if(a.issues){let c={type:"array",origin:"value",input:i,key:o,value:s};for(let u of a.issues)u.path?u.path.unshift(c):u.path=[c],n.issues?.push(u);if(n.issues||(n.issues=a.issues),r.abortEarly){n.typed=!1;break}}a.typed||(n.typed=!1),n.value.push(a.value)}}else qe(this,"type",n,r);return n}})}function lt(e,t){return yt({kind:"schema",type:"exact_optional",reference:lt,expects:e.expects,async:!1,wrapped:e,default:t,"~run"(n,r){return this.wrapped["~run"](n,r)}})}function Hi(e){return yt({kind:"schema",type:"lazy",reference:Hi,expects:"unknown",async:!1,getter:e,"~run"(t,n){return this.getter(t.value)["~run"](t,n)}})}function Rt(e,t){return yt({kind:"schema",type:"literal",reference:Rt,expects:Qs(e),async:!1,literal:e,message:t,"~run"(n,r){return bf(n.value,this.literal)?n.typed=!0:qe(this,"type",n,r),n}})}function zn(e,t,n){return yt({kind:"schema",type:"object_with_rest",reference:zn,expects:"Object",async:!1,entries:e,rest:t,message:n,"~run"(r,i){let o=r.value;if(o&&typeof o=="object"){r.typed=!0,r.value={};for(let s in this.entries){let a=this.entries[s];if(s in o||(a.type==="exact_optional"||a.type==="optional"||a.type==="nullish")&&a.default!==void 0){let c=s in o?o[s]:na(a),u=a["~run"]({value:c},i);if(u.issues){let l={type:"object",origin:"value",input:o,key:s,value:c};for(let p of u.issues)p.path?p.path.unshift(l):p.path=[l],r.issues?.push(p);if(r.issues||(r.issues=u.issues),i.abortEarly){r.typed=!1;break}}u.typed||(r.typed=!1),r.value[s]=u.value}else if(a.fallback!==void 0)r.value[s]=ta(a);else if(a.type!=="exact_optional"&&a.type!=="optional"&&a.type!=="nullish"&&(qe(this,"key",r,i,{input:void 0,expected:`"${s}"`,path:[{type:"object",origin:"key",input:o,key:s,value:o[s]}]}),i.abortEarly))break}if(!r.issues||!i.abortEarly){for(let s in o)if(ea(o,s)&&!Object.prototype.hasOwnProperty.call(this.entries,s)){let a=this.rest["~run"]({value:o[s]},i);if(a.issues){let c={type:"object",origin:"value",input:o,key:s,value:o[s]};for(let u of a.issues)u.path?u.path.unshift(c):u.path=[c],r.issues?.push(u);if(r.issues||(r.issues=a.issues),i.abortEarly){r.typed=!1;break}}a.typed||(r.typed=!1),r.value[s]=a.value}}}else qe(this,"type",r,i);return r}})}function _r(e,t,n){return yt({kind:"schema",type:"record",reference:_r,expects:"Object",async:!1,key:e,value:t,message:n,"~run"(r,i){let o=r.value;if(o&&typeof o=="object"){r.typed=!0,r.value={};for(let s in o)if(ea(o,s)){let a=o[s],c=this.key["~run"]({value:s},i);if(c.issues){let l={type:"object",origin:"key",input:o,key:s,value:a};for(let p of c.issues)p.path=[l],r.issues?.push(p);if(r.issues||(r.issues=c.issues),i.abortEarly){r.typed=!1;break}}let u=this.value["~run"]({value:a},i);if(u.issues){let l={type:"object",origin:"value",input:o,key:s,value:a};for(let p of u.issues)p.path?p.path.unshift(l):p.path=[l],r.issues?.push(p);if(r.issues||(r.issues=u.issues),i.abortEarly){r.typed=!1;break}}(!c.typed||!u.typed)&&(r.typed=!1),c.typed&&(r.value[c.value]=u.value)}}else qe(this,"type",r,i);return r}})}function Bn(e,t){return yt({kind:"schema",type:"strict_object",reference:Bn,expects:"Object",async:!1,entries:e,message:t,"~run"(n,r){let i=n.value;if(i&&typeof i=="object"){n.typed=!0,n.value={};for(let o in this.entries){let s=this.entries[o];if(o in i||(s.type==="exact_optional"||s.type==="optional"||s.type==="nullish")&&s.default!==void 0){let a=o in i?i[o]:na(s),c=s["~run"]({value:a},r);if(c.issues){let u={type:"object",origin:"value",input:i,key:o,value:a};for(let l of c.issues)l.path?l.path.unshift(u):l.path=[u],n.issues?.push(l);if(n.issues||(n.issues=c.issues),r.abortEarly){n.typed=!1;break}}c.typed||(n.typed=!1),n.value[o]=c.value}else if(s.fallback!==void 0)n.value[o]=ta(s);else if(s.type!=="exact_optional"&&s.type!=="optional"&&s.type!=="nullish"&&(qe(this,"key",n,r,{input:void 0,expected:`"${o}"`,path:[{type:"object",origin:"key",input:i,key:o,value:i[o]}]}),r.abortEarly))break}if(!n.issues||!r.abortEarly){for(let o in i)if(!Object.prototype.hasOwnProperty.call(this.entries,o)){qe(this,"key",n,r,{input:o,expected:"never",path:[{type:"object",origin:"key",input:i,key:o,value:i[o]}]});break}}}else qe(this,"type",n,r);return n}})}function Fe(e){return yt({kind:"schema",type:"string",reference:Fe,expects:"string",async:!1,message:e,"~run"(t,n){return typeof t.value=="string"?t.typed=!0:qe(this,"type",t,n),t}})}function Xs(e){let t;if(e)for(let n of e)if(t)for(let r of n.issues)t.push(r);else t=n.issues;return t}function nn(e,t){return yt({kind:"schema",type:"union",reference:nn,expects:Ef(e.map(n=>n.expects),"|"),async:!1,options:e,message:t,"~run"(n,r){let i,o,s;for(let a of this.options){let c=a["~run"]({value:n.value},r);if(c.typed)if(c.issues)o?o.push(c):o=[c];else{i=c;break}else s?s.push(c):s=[c]}if(i)return i;if(o){if(o.length===1)return o[0];qe(this,"type",n,r,{issues:Xs(o)}),n.typed=!0}else{if(s?.length===1)return s[0];qe(this,"type",n,r,{issues:Xs(s)})}return n}})}function Wi(...e){return yt({...e[0],pipe:e,"~run"(t,n){for(let r of e)if(r.kind!=="metadata"){if(t.issues&&(r.kind==="schema"||r.kind==="transformation")){t.typed=!1;break}(!t.issues||!n.abortEarly&&!n.abortPipeEarly)&&(t=r["~run"](t,n))}return t}})}function Pr(e,t,n){let r=e["~run"]({value:t},Ys(n));return{typed:r.typed,success:!r.issues,output:r.value,issues:r.issues}}var Ir,gf,yf,wf,$f,Dv,Sf,Or=G(()=>{gf={lang:void 0,message:void 0,abortEarly:void 0,abortPipeEarly:void 0};Dv=new RegExp("^(?:[\\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_Modifier_Base}\\u{1F1E6}-\\u{1F1FF}])\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|(?![\\p{Emoji_Modifier_Base}\\u{1F1E6}-\\u{1F1FF}])\\p{Emoji_Presentation}))*)+$","u");Sf={abortEarly:!0}});var vn,Nr=G(()=>{vn={$schemaVersion:2}});var Ae,Gn,ia,Cf,Af,Rf,Lr,jf,If,oa,sa,Un=G(()=>{"use strict";Or();Nr();Ae=vn.$schemaVersion,Gn=Wi(Fe(),Ui(/^[A-Za-z0-9_-]+$/,"Token names contain only ASCII letters, digits, underscores and hyphens.")),ia=Bn({$basePaths:lt(tn(Fe())),$worktreePaths:lt(tn(Fe()))}),Cf=Bn({$type:Rt("prompt"),$exec:Fe(),$description:lt(Fe()),$tags:lt(tn(Fe()))}),Af=Bn({$type:nn([Rt("bash"),Rt("node"),Rt("tsx"),Rt("bun")]),$exec:nn([Fe(),Wi(tn(Fe()),Gi(1))]),$description:lt(Fe()),$tags:lt(tn(Fe()))}),Rf=nn([Cf,Af]),Lr=Hi(()=>nn([Fe(),Rf,jf])),jf=_r(Gn,Lr),If=zn({$metadata:lt(ia)},Lr),oa=zn({$schemaVersion:Rt(Ae),$metadata:lt(ia)},Lr),sa=zn({$schemaVersion:Rt(Ae),$projects:lt(_r(Gn,nn([Fe(),If])))},Lr)});import{randomUUID as _f}from"node:crypto";import{chmodSync as Pf,readFileSync as Of,renameSync as Nf,rmSync as Lf,statSync as Df,writeFileSync as Mf}from"node:fs";import{basename as Ff,dirname as zf,join as Bf}from"node:path";function wn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Zi(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Hn(e,t){return e?`${e}.${t}`:t}function Fr(e,t,n){if(Gf.has(e))throw new nt(n,`${t} uses a prototype-sensitive name, which is not supported.`);if(!/^[A-Za-z0-9_-]+$/.test(e))throw new nt(n,`${t} must contain only ASCII letters, digits, underscores and hyphens.`)}function Ji(e,t,n){if(wn(e)){if(Zi(e,"$type")||Zi(e,"$exec")){for(let r of Object.keys(e))if(!Uf.has(r))throw new nt(n,`${Hn(t,r)} is not a supported resource field.`);return}Wf(e,t,n)}}function Wf(e,t,n){for(let[r,i]of Object.entries(e)){let o=Hn(t,r);if(r.startsWith("$"))throw new nt(n,`${o} is an unknown reserved field.`);Fr(r,o,n),Ji(i,o,n)}}function aa(e,t,n){for(let r of Object.keys(e))if(!Hf.has(r))throw new nt(n,`${Hn(t,r)} is not a supported metadata field.`)}function Vf(e,t,n){for(let[r,i]of Object.entries(e)){let o=Hn(t,r);if(r==="$metadata"){wn(i)&&aa(i,o,n);continue}if(r.startsWith("$"))throw new nt(n,`${o} is not valid in an inline project.`);Fr(r,o,n),Ji(i,o,n)}}function qf(e,t,n){for(let[r,i]of Object.entries(e))if(r!=="$schemaVersion"){if(t==="root"&&r==="$projects"){if(wn(i))for(let[o,s]of Object.entries(i)){let a=Hn("$projects",o);if(Fr(o,a,n),typeof s=="string"&&!s.startsWith("<root>/"))throw new nt(n,`${a} must be inline or reference a <root>/ configuration file.`);wn(s)&&Vf(s,a,n)}continue}if(t==="project"&&r==="$metadata"){wn(i)&&aa(i,r,n);continue}if(t==="repository"&&r==="$metadata")throw new nt(n,"$metadata is not valid in repository configuration. The checkout selects it, so it takes no paths.");if(r.startsWith("$"))throw new nt(n,`${r} is not valid in ${t} configuration.`);Fr(r,r,n),Ji(i,r,n)}}function ze(e,t,n="<configuration>"){if(wn(e)){if(!Zi(e,"$schemaVersion"))throw new Dr(n,"missing");if(e.$schemaVersion!==Ae)throw new Dr(n,"mismatch",e.$schemaVersion);qf(e,t,n)}let r=Pr(t==="root"?sa:oa,e);if(!r.success){let i=r.issues.map(o=>{let s=o.path?.map(a=>String(a.key)).join(".");return s?`${s}: ${o.message}`:o.message}).join("; ");throw new nt(n,i)}return r.output}function Ke(e,t,n="<configuration>"){let r;try{r=JSON.parse(e)}catch(i){throw new qi(n,{cause:i})}return ze(r,t,n)}function Dt(e,t){let n;try{n=Of(e,"utf8")}catch(r){let i={cause:r};throw r.code==="ENOENT"?new Ki(e,i):new Mr(e,i)}return Ke(n,t,e)}function zr(e,t){let n=Bf(zf(e),`.${Ff(e)}.${_f()}.tmp`),{mode:r}=Df(e);try{Mf(n,t,{flag:"wx",mode:r}),Pf(n,r&4095),Nf(n,e)}finally{Lf(n,{force:!0})}}function Wn(e,t){zr(e,`${JSON.stringify(t,null,2)}
|
|
8
|
+
`)}var Dr,qi,nt,Mr,Ki,Gf,Uf,Hf,vt=G(()=>{"use strict";Or();Un();Dr=class extends Error{actual;reason;constructor(t,n,r){let i=n==="missing"?`Configuration at ${t} requires an explicit $schemaVersion of ${Ae}.`:`Configuration at ${t} uses unsupported $schemaVersion ${JSON.stringify(r)}; expected ${Ae}. Explicit migration is required.`;super(i),this.name="ConfigurationVersionError",this.actual=r,this.reason=n}},qi=class extends Error{constructor(t,n){super(`Could not parse configuration at ${t} as JSON.`,n),this.name="ConfigurationSyntaxError"}},nt=class extends Error{constructor(t,n){super(`Invalid configuration at ${t}: ${n}`),this.name="ConfigurationShapeError"}},Mr=class extends Error{file;constructor(t,n){let r=n.cause instanceof Error?n.cause.message:String(n.cause);super(`Could not read configuration at ${t}: ${r}`,n),this.name="ConfigurationReadError",this.file=t}},Ki=class extends Mr{constructor(t,n){super(t,n),this.name="ConfigurationNotFoundError"}},Gf=new Set(["__proto__","prototype","constructor"]),Uf=new Set(["$type","$exec","$description","$tags"]),Hf=new Set(["$basePaths","$worktreePaths"])});var da=Lt((Vv,ha)=>{var Xi,{defineProperty:Kf,getPrototypeOf:Zf,setPrototypeOf:fa,create:Jf,keys:Xf}=Object,rt="",{round:Br,max:Yf}=Math,Yi=e=>{let t=/([a-f\d]{3,6})/i.exec(e)?.[0],n=t?.length,r="0x"+(6^n?3^n?"0":t[0]+t[0]+t[1]+t[1]+t[2]+t[2]:t)|0;return[r>>16,r>>8&255,255&r]},ca=e=>{if(8>e)return 30+e;if(16>e)return 82+e;if(e>231)return e>243?37:30;let t=(e-=16)%36,n=e/36|0,r=t/6|0,i=t%6;return 30+(n>2|(r>2)<<1|(i>2)<<2)+(Yf(n,r,i)>4?60:0)},ua={open:rt,close:rt},la=(e,{open:t="",close:n="",f:r})=>{let i=(e.open||rt)+t,o=n+(e.close||rt),s=(a,...c)=>{if(!a){if(!n)return t;if((a??rt)===rt)return rt}let u,l=r?r(a,...c):a.raw?String.raw({raw:a},...c):rt+a,p=s;if(l.includes("\x1B"))for(;p=p.p;){let{t:f,o:m}=p,d=m.length,h=rt,y=0;if(d)for(;~(u=l.indexOf(m,y));y=u+d)h+=l.slice(y,u)+f;l=h+l.slice(y)}return i+(l.includes(`
|
|
9
|
+
`)?l.replace(/(\r?\n)/g,o+"$1"+i):l)+o};return fa(s,Zf(e)).p={t,o:n,p:e.p},s.open=i,s.close=o,s},pa=new function e(t=globalThis){let n=typeof t=="number"?t:(S=>{let g=S.process??{},E=g.argv??[],C=g.env??{},T=0;try{T=((k,b,N)=>(Xi=b.TERM,Xi==="dumb"?0:{"24bit":3,truecolor:3,ansi256:2,ansi:1}[b.COLORTERM]||(b.CI?/,GITHUB/.test(N)?3:1:k.stdout?.isTTY||b.PM2_HOME||/edge/.test(b.NEXT_RUNTIME)?k.platform==="win32"?3:/-256/.test(Xi)?2:1:0)))(g,C,","+Xf(C).join(","))}catch{C={}}let R,$=T||1,x="FORCE_COLOR",j={false:0,0:0,1:1,2:2,3:3}[C[x]]??$,P=-1;for(R of E)/^--color=?(true|always)?$/.test(R)&&(P=$),/^--(no-color|color=(false|never))$/.test(R)&&(P=0);return S.window?.chrome?3:x in C?j:~P?P:C.NO_COLOR?0:T})(t),r={},i={Ansis:e,level:n,isSupported:()=>c,strip:S=>S.replace(/][^]*|[][[()#;?]*(?:\d+(?:;\d*)*)?[\dA-ORZcf-nqry=><]/g,rt),extend(S){for(let g in S){let E=S[g];(typeof E)[0]==="s"&&(o(l(g),v(...Yi(E))),E=y(...Yi(E))),o(g,E)}return fa(i,Jf({},r))}},o=(S,g)=>{r[S]={get(){return Kf(this,S,{value:g.call?(...E)=>la(this,g(...E)):la(this,g)})[S]}}},s=1^n,a=n>2,c=n>0,u=(S,g)=>c?{open:`\x1B[${S}m`,close:g?`\x1B[${g}m`:rt}:ua,l=S=>"bg"+S[0].toUpperCase()+S.slice(1),p=S=>g=>S(...Yi(g)),f=(S,g)=>(E,C,T)=>u(`${S}8;2;${E};${C};${T}`,g),m=S=>(g,E,C)=>S(((T,R,$)=>T^R|R^$?16+36*Br(T/51)+6*Br(R/51)+Br($/51):8>T?16:T>248?231:Br(24*(T-8)/247)+232)(g,E,C)),d=S=>u(s?"38;5;"+S:ca(S),39),h=S=>u(s?"48;5;"+S:ca(S)+10,49),y=a?f(3,39):m(d),v=a?f(4,49):m(h),w={fg:d,bg:h,rgb:y,bgRgb:v,hex:p(y),bgHex:p(v),visible:ua,reset:u(0,rt),bold:u(1,22),dim:u(2,22),italic:u(3,23),underline:u(4,24),inverse:u(7,27),hidden:u(8,28),strikethrough:u(9,29),link:{f:(S,g=S)=>c?`\x1B]8;;${S}\x07${g}\x1B]8;;\x07`:g!=S?g+` (\u200B${S}\u200B)`:S}},A=(S,g)=>{w[S]=u(g,39),w[l(S)]=u(g+10,49)};return"gray,black,red,green,yellow,blue,magenta,cyan,white".split(",").map(((S,g)=>{g?A(S+"Bright",89+g):g=61,A(S,29+g)})),i.extend(w)};ha.exports=pa.default=pa});var Qi,Be,qv,Kv,Zv,Jv,Xv,Yv,Qv,ew,tw,nw,rw,iw,ow,sw,aw,cw,uw,lw,pw,fw,hw,dw,mw,gw,yw,vw,ww,kw,$w,xw,bw,Ew,Sw,Tw,Cw,Aw,Rw,jw,Iw,_w,Pw,Ow,Nw,Lw,Dw,Mw,Fw,zw,Bw,Gr=G(()=>{Qi=Sr(da(),1),Be=Qi.default,{Ansis:qv,fg:Kv,bg:Zv,rgb:Jv,bgRgb:Xv,hex:Yv,bgHex:Qv,reset:ew,inverse:tw,hidden:nw,visible:rw,link:iw,bold:ow,dim:sw,italic:aw,underline:cw,strikethrough:uw,black:lw,red:pw,green:fw,yellow:hw,blue:dw,magenta:mw,cyan:gw,white:yw,gray:vw,redBright:ww,greenBright:kw,yellowBright:$w,blueBright:xw,magentaBright:bw,cyanBright:Ew,whiteBright:Sw,bgBlack:Tw,bgRed:Cw,bgGreen:Aw,bgYellow:Rw,bgBlue:jw,bgMagenta:Iw,bgCyan:_w,bgWhite:Pw,bgGray:Ow,bgRedBright:Nw,bgGreenBright:Lw,bgYellowBright:Dw,bgBlueBright:Mw,bgMagentaBright:Fw,bgCyanBright:zw,bgWhiteBright:Bw}=Qi.default});function Pe(){return process.stdout.isTTY===!0}function ma(){return Be.level>0}var rn=G(()=>{"use strict";Gr()});import{AsyncLocalStorage as Qf}from"node:async_hooks";function Z(e){return`'${e.replaceAll("'","'\\''")}'`}function ga(e,{compact:t=!1}={}){if(!Pe()||!ma())return e;let n="\x1B[K",r=` ${e.replaceAll(`
|
|
10
|
+
`,`${n}
|
|
11
|
+
`)}${n}`;return Be.bgHex("#262626").hex("#eeeeee")(t?r:`${n}
|
|
12
|
+
${r}
|
|
13
|
+
${n}`)}function to(e){return eo.run(!0,e)}function kn(){return!!fe()||process.argv.includes("--agent")||eo.getStore()===!0}function I(e){return eo.getStore()?`\`${e}\``:kn()?e:Be.bgHex("#262626").hex("#eeeeee")(` ${e} `)}function Oe(e){return kn()?e:Be.dim(e)}function Ne(e){return Oe(`(${e})`)}function Re(e){if(kn())return e.map(([n,r])=>`${n}: ${r}`).join(`
|
|
14
|
+
`);let t=Math.max(...e.map(([n])=>n.length));return e.map(([n,r])=>`${`${n}:`.padEnd(t+2)}${Oe(r)}`).join(`
|
|
15
|
+
`)}function Vn(e,t){return kn()?`[${e}]`:Be.bgHex(t).black(` ${e} `)}function Le(e,t,n=`${e}s`){if(!t.length)return[];let r=t.length===1?e:n;return kn()?[`${r}: ${t.join(", ")}`]:[`${r}:`,...t.map(i=>` - ${Oe(i)}`)]}function $n(e){return e==="prompt"?"":Vn(e,"#ffd787")}function ya(e){return kn()?e:e.split(`
|
|
16
|
+
`).map(t=>t.startsWith("+")?Be.hex("#87d787")(t):t.startsWith("-")?Be.hex("#ff8787")(t):t.startsWith("@@")?Be.dim(t):t).join(`
|
|
17
|
+
`)}function Ur(){return Vn("inline","#dadada")}function xn(e){let t=e==="root"?"global":"project";return Vn(t,eh[t])}var eo,eh,Ge=G(()=>{"use strict";Gr();Ve();rn();eo=new Qf;eh={global:"#dadada",project:"#afd7ff"}});import{randomUUID as no}from"node:crypto";import{chmodSync as ro,readFileSync as oo,realpathSync as ka,renameSync as $a,rmSync as xa,statSync as th,writeFileSync as io}from"node:fs";import{mkdir as nh,rm as rh}from"node:fs/promises";import{basename as Hr,dirname as Wr,join as Vr}from"node:path";import{setTimeout as ih}from"node:timers/promises";function sh(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function va(e){let t=e.$schemaVersion;if(typeof t!="number"||!Number.isInteger(t)||t<1)throw new Error("$schemaVersion must be a positive integer; no source version was inferred for migration.");return t}function ah(e,t){return t>Ae?new it(e,`$schemaVersion:${t} is newer than this CLI supports. Install a compatible woof release; no downgrade or guessed migration was attempted.`):new it(e,`No migration is available from $schemaVersion:${t} to $schemaVersion:${Ae}. Use a compatible release or restore a supported configuration.`)}async function bn(e,t){let n=ka(e),r=Vr(Wr(n),`.${Hr(n)}.woof-migration.lock`),i=Date.now()+5e3;for(;;)try{await nh(r);break}catch(o){if(o.code!=="EEXIST")throw o;if(Date.now()>=i)throw new Error(`Configuration lock timed out: ${r}`,{cause:o});await ih(20)}try{return await t(n)}finally{await rh(r,{recursive:!0,force:!0})}}async function ba(e,t){let n=[...new Set(e)].sort(),[r,...i]=n;return r?bn(r,()=>ba(i,t)):t()}function ch({file:e,kind:t="root"}){try{let n=ka(e),r=oo(n,"utf8"),i;try{i=JSON.parse(r)}catch(u){throw new it(n,"Configuration is not valid JSON.",{cause:u})}if(!sh(i))throw new it(n,"Configuration must be an object.");let o=va(i),s=i,a=o;for(;a!==Ae;){let u=oh[a];if(!u)throw ah(n,a);s=u(s),a=va(s)}let c=ze(s,t,n);return{file:e,target:n,kind:t,source:r,mode:th(n).mode,from:`$schemaVersion:${o}`,changed:o!==Ae,migrated:c}}catch(n){if(n instanceof it)throw n;let r=n instanceof Error?n.message:String(n);throw new it(e,r,{cause:n})}}function so(e){let t=e.map(ch),n=new Set;for(let r of t){if(n.has(r.target))throw new it(r.file,"The same physical configuration was supplied more than once.");n.add(r.target)}return{documents:t}}function Ea(e){return`${JSON.stringify(e.migrated,null,2)}
|
|
18
|
+
`}function wa(e){if(oo(e.target,"utf8")!==e.source)throw new it(e.target,"Configuration changed during migration; retry without overwriting either version.")}function uh(e){let t=Vr(Wr(e.target),`.${Hr(e.target)}.${no()}.rollback.tmp`);try{if(oo(e.target,"utf8")!==Ea(e))throw new Error("The migrated destination changed again before rollback.");io(t,e.source,{flag:"wx",mode:e.mode}),ro(t,e.mode&4095),$a(t,e.target)}catch(n){let r=Vr(Wr(e.target),`.${Hr(e.target)}.${no()}.recovery.json`);try{io(r,e.source,{flag:"wx",mode:e.mode}),ro(r,e.mode&4095)}catch(i){throw new Error(`Could not restore ${e.target} or retain ${r}: ${String(i)}`,{cause:i})}throw new Error(`Could not restore ${e.target}; original bytes were retained at ${r}.`,{cause:n})}finally{xa(t,{force:!0})}}async function Sa(e){let t=e.documents.filter(n=>n.changed);return ba(e.documents.map(n=>n.target),()=>{for(let o of e.documents)wa(o);let n=t.map(o=>({...o,staging:Vr(Wr(o.target),`.${Hr(o.target)}.${no()}.migration.tmp`)})),r=()=>{for(let o of n)xa(o.staging,{force:!0})};try{for(let o of n)io(o.staging,Ea(o),{flag:"wx",mode:o.mode}),ro(o.staging,o.mode&4095);for(let o of e.documents)wa(o)}catch(o){r();let s=o instanceof Error?o.message:String(o);throw new it(t[0]?.file??"configuration set",`Migration staging failed; no configuration was replaced. ${s}`,{cause:o})}let i=[];try{for(let o of n)$a(o.staging,o.target),i.push(o)}catch(o){let s=[];for(let c of i.reverse())try{uh(c)}catch(u){s.push(u instanceof Error?u.message:String(u))}r();let a=o instanceof Error?o.message:String(o);throw new it(t[0]?.file??"configuration set",s.length?`Migration failed and recovery is incomplete. ${s.join("; ")}`:`Migration failed; every replaced configuration was restored. ${a}`,{cause:o})}finally{r()}return n.map(o=>({file:o.target,source:o.file,from:o.from,to:`$schemaVersion:${Ae}`}))})}var it,oh,qr=G(()=>{"use strict";vt();Un();it=class extends Error{constructor(t,n,r){super(`${t}: ${n}`,r),this.name="ConfigurationMigrationError"}},oh={}});import{readFileSync as lh}from"node:fs";import{homedir as ph}from"node:os";import{dirname as Ta,join as Kr}from"node:path";import{fileURLToPath as fh}from"node:url";function J(...e){return Kr(process.env.WOOF_HOME?.trim()||Kr(ph(),".woof"),...e)}function hh(){let e=Ta(fh(import.meta.url));for(;;){try{let{name:n}=JSON.parse(lh(Kr(e,"package.json"),"utf8"));if(n===Fn.name)return e}catch{}let t=Ta(e);if(t===e)throw new Error("woof could not find its package root above the running entry. Reinstall or relink woof.");e=t}}function Mt(...e){return Ca??=hh(),Kr(Ca,...e)}var Ca,je=G(()=>{"use strict";Bi()});var qn=Lt((lk,_a)=>{"use strict";var Aa="[^\\\\/]",dh="(?=.)",Ra="[^/]",ao="(?:\\/|$)",ja="(?:^|\\/)",co=`\\.{1,2}${ao}`,mh="(?!\\.)",gh=`(?!${ja}${co})`,yh=`(?!\\.{0,1}${ao})`,vh=`(?!${co})`,wh="[^.\\/]",kh=`${Ra}*?`,$h="/",Ia={DOT_LITERAL:"\\.",PLUS_LITERAL:"\\+",QMARK_LITERAL:"\\?",SLASH_LITERAL:"\\/",ONE_CHAR:dh,QMARK:Ra,END_ANCHOR:ao,DOTS_SLASH:co,NO_DOT:mh,NO_DOTS:gh,NO_DOT_SLASH:yh,NO_DOTS_SLASH:vh,QMARK_NO_DOT:wh,STAR:kh,START_ANCHOR:ja,SEP:$h},xh={...Ia,SLASH_LITERAL:"[\\\\/]",QMARK:Aa,STAR:`${Aa}*?`,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:"\\"},bh={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"};_a.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:bh,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?xh:Ia}}});var Kn=Lt(Ue=>{"use strict";var{REGEX_BACKSLASH:Eh,REGEX_REMOVE_BACKSLASH:Sh,REGEX_SPECIAL_CHARS:Th,REGEX_SPECIAL_CHARS_GLOBAL:Ch}=qn();Ue.isObject=e=>e!==null&&typeof e=="object"&&!Array.isArray(e);Ue.hasRegexChars=e=>Th.test(e);Ue.isRegexChar=e=>e.length===1&&Ue.hasRegexChars(e);Ue.escapeRegex=e=>e.replace(Ch,"\\$1");Ue.toPosixSlashes=e=>e.replace(Eh,"/");Ue.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};Ue.removeBackslashes=e=>e.replace(Sh,t=>t==="\\"?"":t);Ue.escapeLast=(e,t,n)=>{let r=e.lastIndexOf(t,n);return r===-1?e:e[r-1]==="\\"?Ue.escapeLast(e,t,r-1):`${e.slice(0,r)}\\${e.slice(r)}`};Ue.removePrefix=(e,t={})=>{let n=e;return n.startsWith("./")&&(n=n.slice(2),t.prefix="./"),n};Ue.wrapOutput=(e,t={},n={})=>{let r=n.contains?"":"^",i=n.contains?"":"$",o=`${r}(?:${e})${i}`;return t.negated===!0&&(o=`(?:^(?!${o}).*$)`),o};Ue.basename=(e,{windows:t}={})=>{let n=e.split(t?/[\\/]/:"/"),r=n[n.length-1];return r===""?n[n.length-2]:r}});var za=Lt((fk,Fa)=>{"use strict";var Pa=Kn(),{CHAR_ASTERISK:uo,CHAR_AT:Ah,CHAR_BACKWARD_SLASH:Zn,CHAR_COMMA:Rh,CHAR_DOT:lo,CHAR_EXCLAMATION_MARK:po,CHAR_FORWARD_SLASH:Ma,CHAR_LEFT_CURLY_BRACE:fo,CHAR_LEFT_PARENTHESES:ho,CHAR_LEFT_SQUARE_BRACKET:jh,CHAR_PLUS:Ih,CHAR_QUESTION_MARK:Oa,CHAR_RIGHT_CURLY_BRACE:_h,CHAR_RIGHT_PARENTHESES:Na,CHAR_RIGHT_SQUARE_BRACKET:Ph}=qn(),La=e=>e===Ma||e===Zn,Da=e=>{e.isPrefix!==!0&&(e.depth=e.isGlobstar?1/0:1)},Oh=(e,t)=>{let n=t||{},r=e.length-1,i=n.parts===!0||n.scanToEnd===!0,o=[],s=[],a=[],c=e,u=-1,l=0,p=0,f=!1,m=!1,d=!1,h=!1,y=!1,v=!1,w=!1,A=!1,S=!1,g=!1,E=0,C,T,R={value:"",depth:0,isGlob:!1},$=()=>u>=r,x=()=>c.charCodeAt(u+1),j=()=>(C=T,c.charCodeAt(++u));for(;u<r;){T=j();let _;if(T===Zn){w=R.backslashes=!0,T=j(),T===fo&&(v=!0);continue}if(v===!0||T===fo){for(E++;$()!==!0&&(T=j());){if(T===Zn){w=R.backslashes=!0,j();continue}if(T===fo){E++;continue}if(v!==!0&&T===lo&&(T=j())===lo){if(f=R.isBrace=!0,d=R.isGlob=!0,g=!0,i===!0)continue;break}if(v!==!0&&T===Rh){if(f=R.isBrace=!0,d=R.isGlob=!0,g=!0,i===!0)continue;break}if(T===_h&&(E--,E===0)){v=!1,f=R.isBrace=!0,g=!0;break}}if(i===!0)continue;break}if(T===Ma){if(o.push(u),s.push(R),R={value:"",depth:0,isGlob:!1},g===!0)continue;if(C===lo&&u===l+1){l+=2;continue}p=u+1;continue}if(n.noext!==!0&&(T===Ih||T===Ah||T===uo||T===Oa||T===po)===!0&&x()===ho){if(d=R.isGlob=!0,h=R.isExtglob=!0,g=!0,T===po&&u===l&&(S=!0),i===!0){for(;$()!==!0&&(T=j());){if(T===Zn){w=R.backslashes=!0,T=j();continue}if(T===Na){d=R.isGlob=!0,g=!0;break}}continue}break}if(T===uo){if(C===uo&&(y=R.isGlobstar=!0),d=R.isGlob=!0,g=!0,i===!0)continue;break}if(T===Oa){if(d=R.isGlob=!0,g=!0,i===!0)continue;break}if(T===jh){for(;$()!==!0&&(_=j());){if(_===Zn){w=R.backslashes=!0,j();continue}if(_===Ph){m=R.isBracket=!0,d=R.isGlob=!0,g=!0;break}}if(i===!0)continue;break}if(n.nonegate!==!0&&T===po&&u===l){A=R.negated=!0,l++;continue}if(n.noparen!==!0&&T===ho){if(d=R.isGlob=!0,i===!0){for(;$()!==!0&&(T=j());){if(T===ho){w=R.backslashes=!0,T=j();continue}if(T===Na){g=!0;break}}continue}break}if(d===!0){if(g=!0,i===!0)continue;break}}n.noext===!0&&(h=!1,d=!1);let P=c,k="",b="";l>0&&(k=c.slice(0,l),c=c.slice(l),p-=l),P&&d===!0&&p>0?(P=c.slice(0,p),b=c.slice(p)):d===!0?(P="",b=c):P=c,P&&P!==""&&P!=="/"&&P!==c&&La(P.charCodeAt(P.length-1))&&(P=P.slice(0,-1)),n.unescape===!0&&(b&&(b=Pa.removeBackslashes(b)),P&&w===!0&&(P=Pa.removeBackslashes(P)));let N={prefix:k,input:e,start:l,base:P,glob:b,isBrace:f,isBracket:m,isGlob:d,isExtglob:h,isGlobstar:y,negated:A,negatedExtglob:S};if(n.tokens===!0&&(N.maxDepth=0,La(T)||s.push(R),N.tokens=s),n.parts===!0||n.tokens===!0){let _;for(let O=0;O<o.length;O++){let z=_?_+1:l,B=o[O],W=e.slice(z,B);n.tokens&&(O===0&&l!==0?(s[O].isPrefix=!0,s[O].value=k):s[O].value=W,Da(s[O]),N.maxDepth+=s[O].depth),(O!==0||W!=="")&&a.push(W),_=B}if(_&&_+1<e.length){let O=e.slice(_+1);a.push(O),n.tokens&&(s[s.length-1].value=O,Da(s[s.length-1]),N.maxDepth+=s[s.length-1].depth)}N.slashes=o,N.parts=a}return N};Fa.exports=Oh});var Ua=Lt((hk,Ga)=>{"use strict";var Zr=qn(),wt=Kn(),{MAX_LENGTH:Jr,POSIX_REGEX_SOURCE:Nh,REGEX_NON_SPECIAL_CHARS:Lh,REGEX_SPECIAL_CHARS_BACKREF:Dh,REPLACEMENTS:Ba}=Zr,Mh=(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(i=>wt.escapeRegex(i)).join("..")}return n},En=(e,t)=>`Missing ${e}: "${t}" - use "\\\\${t}" to match literal characters`,mo=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a string");e=Ba[e]||e;let n={...t},r=typeof n.maxLength=="number"?Math.min(Jr,n.maxLength):Jr,i=e.length;if(i>r)throw new SyntaxError(`Input length: ${i}, exceeds maximum allowed length: ${r}`);let o={type:"bos",value:"",output:n.prepend||""},s=[o],a=n.capture?"":"?:",c=Zr.globChars(n.windows),u=Zr.extglobChars(c),{DOT_LITERAL:l,PLUS_LITERAL:p,SLASH_LITERAL:f,ONE_CHAR:m,DOTS_SLASH:d,NO_DOT:h,NO_DOT_SLASH:y,NO_DOTS_SLASH:v,QMARK:w,QMARK_NO_DOT:A,STAR:S,START_ANCHOR:g}=c,E=M=>`(${a}(?:(?!${g}${M.dot?d:l}).)*?)`,C=n.dot?"":h,T=n.dot?w:A,R=n.bash===!0?E(n):S;n.capture&&(R=`(${R})`),typeof n.noext=="boolean"&&(n.noextglob=n.noext);let $={input:e,index:-1,start:0,dot:n.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:s};e=wt.removePrefix(e,$),i=e.length;let x=[],j=[],P=[],k=o,b,N=()=>$.index===i-1,_=$.peek=(M=1)=>e[$.index+M],O=$.advance=()=>e[++$.index]||"",z=()=>e.slice($.index+1),B=(M="",Y=0)=>{$.consumed+=M,$.index+=Y},W=M=>{$.output+=M.output!=null?M.output:M.value,B(M.value)},q=()=>{let M=1;for(;_()==="!"&&(_(2)!=="("||_(3)==="?");)O(),$.start++,M++;return M%2===0?!1:($.negated=!0,$.start++,!0)},U=M=>{$[M]++,P.push(M)},H=M=>{$[M]--,P.pop()},F=M=>{if(k.type==="globstar"){let Y=$.braces>0&&(M.type==="comma"||M.type==="brace"),D=M.extglob===!0||x.length&&(M.type==="pipe"||M.type==="paren");M.type!=="slash"&&M.type!=="paren"&&!Y&&!D&&($.output=$.output.slice(0,-k.output.length),k.type="star",k.value="*",k.output=R,$.output+=k.output)}if(x.length&&M.type!=="paren"&&(x[x.length-1].inner+=M.value),(M.value||M.output)&&W(M),k&&k.type==="text"&&M.type==="text"){k.output=(k.output||k.value)+M.value,k.value+=M.value;return}M.prev=k,s.push(M),k=M},pe=(M,Y)=>{let D={...u[Y],conditions:1,inner:""};D.prev=k,D.parens=$.parens,D.output=$.output;let V=(n.capture?"(":"")+D.open;U("parens"),F({type:M,value:Y,output:$.output?"":m}),F({type:"paren",extglob:!0,value:O(),output:V}),x.push(D)},re=M=>{let Y=M.close+(n.capture?")":""),D;if(M.type==="negate"){let V=R;if(M.inner&&M.inner.length>1&&M.inner.includes("/")&&(V=E(n)),(V!==R||N()||/^\)+$/.test(z()))&&(Y=M.close=`)$))${V}`),M.inner.includes("*")&&(D=z())&&/^\.[^\\/.]+$/.test(D)){let Q=mo(D,{...t,fastpaths:!1}).output;Y=M.close=`)${Q})${V})`}M.prev.type==="bos"&&($.negatedExtglob=!0)}F({type:"paren",extglob:!0,value:b,output:Y}),H("parens")};if(n.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(e)){let M=!1,Y=e.replace(Dh,(D,V,Q,te,ie,Ni)=>te==="\\"?(M=!0,D):te==="?"?V?V+te+(ie?w.repeat(ie.length):""):Ni===0?T+(ie?w.repeat(ie.length):""):w.repeat(Q.length):te==="."?l.repeat(Q.length):te==="*"?V?V+te+(ie?R:""):R:V?D:`\\${D}`);return M===!0&&(n.unescape===!0?Y=Y.replace(/\\/g,""):Y=Y.replace(/\\+/g,D=>D.length%2===0?"\\\\":D?"\\":"")),Y===e&&n.contains===!0?($.output=e,$):($.output=wt.wrapOutput(Y,$,t),$)}for(;!N();){if(b=O(),b==="\0")continue;if(b==="\\"){let D=_();if(D==="/"&&n.bash!==!0||D==="."||D===";")continue;if(!D){b+="\\",F({type:"text",value:b});continue}let V=/^\\+/.exec(z()),Q=0;if(V&&V[0].length>2&&(Q=V[0].length,$.index+=Q,Q%2!==0&&(b+="\\")),n.unescape===!0?b=O():b+=O(),$.brackets===0){F({type:"text",value:b});continue}}if($.brackets>0&&(b!=="]"||k.value==="["||k.value==="[^")){if(n.posix!==!1&&b===":"){let D=k.value.slice(1);if(D.includes("[")&&(k.posix=!0,D.includes(":"))){let V=k.value.lastIndexOf("["),Q=k.value.slice(0,V),te=k.value.slice(V+2),ie=Nh[te];if(ie){k.value=Q+ie,$.backtrack=!0,O(),!o.output&&s.indexOf(k)===1&&(o.output=m);continue}}}(b==="["&&_()!==":"||b==="-"&&_()==="]")&&(b=`\\${b}`),b==="]"&&(k.value==="["||k.value==="[^")&&(b=`\\${b}`),n.posix===!0&&b==="!"&&k.value==="["&&(b="^"),k.value+=b,W({value:b});continue}if($.quotes===1&&b!=='"'){b=wt.escapeRegex(b),k.value+=b,W({value:b});continue}if(b==='"'){$.quotes=$.quotes===1?0:1,n.keepQuotes===!0&&F({type:"text",value:b});continue}if(b==="("){U("parens"),F({type:"paren",value:b});continue}if(b===")"){if($.parens===0&&n.strictBrackets===!0)throw new SyntaxError(En("opening","("));let D=x[x.length-1];if(D&&$.parens===D.parens+1){re(x.pop());continue}F({type:"paren",value:b,output:$.parens?")":"\\)"}),H("parens");continue}if(b==="["){if(n.nobracket===!0||!z().includes("]")){if(n.nobracket!==!0&&n.strictBrackets===!0)throw new SyntaxError(En("closing","]"));b=`\\${b}`}else U("brackets");F({type:"bracket",value:b});continue}if(b==="]"){if(n.nobracket===!0||k&&k.type==="bracket"&&k.value.length===1){F({type:"text",value:b,output:`\\${b}`});continue}if($.brackets===0){if(n.strictBrackets===!0)throw new SyntaxError(En("opening","["));F({type:"text",value:b,output:`\\${b}`});continue}H("brackets");let D=k.value.slice(1);if(k.posix!==!0&&D[0]==="^"&&!D.includes("/")&&(b=`/${b}`),k.value+=b,W({value:b}),n.literalBrackets===!1||wt.hasRegexChars(D))continue;let V=wt.escapeRegex(k.value);if($.output=$.output.slice(0,-k.value.length),n.literalBrackets===!0){$.output+=V,k.value=V;continue}k.value=`(${a}${V}|${k.value})`,$.output+=k.value;continue}if(b==="{"&&n.nobrace!==!0){U("braces");let D={type:"brace",value:b,output:"(",outputIndex:$.output.length,tokensIndex:$.tokens.length};j.push(D),F(D);continue}if(b==="}"){let D=j[j.length-1];if(n.nobrace===!0||!D){F({type:"text",value:b,output:b});continue}let V=")";if(D.dots===!0){let Q=s.slice(),te=[];for(let ie=Q.length-1;ie>=0&&(s.pop(),Q[ie].type!=="brace");ie--)Q[ie].type!=="dots"&&te.unshift(Q[ie].value);V=Mh(te,n),$.backtrack=!0}if(D.comma!==!0&&D.dots!==!0){let Q=$.output.slice(0,D.outputIndex),te=$.tokens.slice(D.tokensIndex);D.value=D.output="\\{",b=V="\\}",$.output=Q;for(let ie of te)$.output+=ie.output||ie.value}F({type:"brace",value:b,output:V}),H("braces"),j.pop();continue}if(b==="|"){x.length>0&&x[x.length-1].conditions++,F({type:"text",value:b});continue}if(b===","){let D=b,V=j[j.length-1];V&&P[P.length-1]==="braces"&&(V.comma=!0,D="|"),F({type:"comma",value:b,output:D});continue}if(b==="/"){if(k.type==="dot"&&$.index===$.start+1){$.start=$.index+1,$.consumed="",$.output="",s.pop(),k=o;continue}F({type:"slash",value:b,output:f});continue}if(b==="."){if($.braces>0&&k.type==="dot"){k.value==="."&&(k.output=l);let D=j[j.length-1];k.type="dots",k.output+=b,k.value+=b,D.dots=!0;continue}if($.braces+$.parens===0&&k.type!=="bos"&&k.type!=="slash"){F({type:"text",value:b,output:l});continue}F({type:"dot",value:b,output:l});continue}if(b==="?"){if(!(k&&k.value==="(")&&n.noextglob!==!0&&_()==="("&&_(2)!=="?"){pe("qmark",b);continue}if(k&&k.type==="paren"){let V=_(),Q=b;(k.value==="("&&!/[!=<:]/.test(V)||V==="<"&&!/<([!=]|\w+>)/.test(z()))&&(Q=`\\${b}`),F({type:"text",value:b,output:Q});continue}if(n.dot!==!0&&(k.type==="slash"||k.type==="bos")){F({type:"qmark",value:b,output:A});continue}F({type:"qmark",value:b,output:w});continue}if(b==="!"){if(n.noextglob!==!0&&_()==="("&&(_(2)!=="?"||!/[!=<:]/.test(_(3)))){pe("negate",b);continue}if(n.nonegate!==!0&&$.index===0){q();continue}}if(b==="+"){if(n.noextglob!==!0&&_()==="("&&_(2)!=="?"){pe("plus",b);continue}if(k&&k.value==="("||n.regex===!1){F({type:"plus",value:b,output:p});continue}if(k&&(k.type==="bracket"||k.type==="paren"||k.type==="brace")||$.parens>0){F({type:"plus",value:b});continue}F({type:"plus",value:p});continue}if(b==="@"){if(n.noextglob!==!0&&_()==="("&&_(2)!=="?"){F({type:"at",extglob:!0,value:b,output:""});continue}F({type:"text",value:b});continue}if(b!=="*"){(b==="$"||b==="^")&&(b=`\\${b}`);let D=Lh.exec(z());D&&(b+=D[0],$.index+=D[0].length),F({type:"text",value:b});continue}if(k&&(k.type==="globstar"||k.star===!0)){k.type="star",k.star=!0,k.value+=b,k.output=R,$.backtrack=!0,$.globstar=!0,B(b);continue}let M=z();if(n.noextglob!==!0&&/^\([^?]/.test(M)){pe("star",b);continue}if(k.type==="star"){if(n.noglobstar===!0){B(b);continue}let D=k.prev,V=D.prev,Q=D.type==="slash"||D.type==="bos",te=V&&(V.type==="star"||V.type==="globstar");if(n.bash===!0&&(!Q||M[0]&&M[0]!=="/")){F({type:"star",value:b,output:""});continue}let ie=$.braces>0&&(D.type==="comma"||D.type==="brace"),Ni=x.length&&(D.type==="pipe"||D.type==="paren");if(!Q&&D.type!=="paren"&&!ie&&!Ni){F({type:"star",value:b,output:""});continue}for(;M.slice(0,3)==="/**";){let Er=e[$.index+4];if(Er&&Er!=="/")break;M=M.slice(3),B("/**",3)}if(D.type==="bos"&&N()){k.type="globstar",k.value+=b,k.output=E(n),$.output=k.output,$.globstar=!0,B(b);continue}if(D.type==="slash"&&D.prev.type!=="bos"&&!te&&N()){$.output=$.output.slice(0,-(D.output+k.output).length),D.output=`(?:${D.output}`,k.type="globstar",k.output=E(n)+(n.strictSlashes?")":"|$)"),k.value+=b,$.globstar=!0,$.output+=D.output+k.output,B(b);continue}if(D.type==="slash"&&D.prev.type!=="bos"&&M[0]==="/"){let Er=M[1]!==void 0?"|$":"";$.output=$.output.slice(0,-(D.output+k.output).length),D.output=`(?:${D.output}`,k.type="globstar",k.output=`${E(n)}${f}|${f}${Er})`,k.value+=b,$.output+=D.output+k.output,$.globstar=!0,B(b+O()),F({type:"slash",value:"/",output:""});continue}if(D.type==="bos"&&M[0]==="/"){k.type="globstar",k.value+=b,k.output=`(?:^|${f}|${E(n)}${f})`,$.output=k.output,$.globstar=!0,B(b+O()),F({type:"slash",value:"/",output:""});continue}$.output=$.output.slice(0,-k.output.length),k.type="globstar",k.output=E(n),k.value+=b,$.output+=k.output,$.globstar=!0,B(b);continue}let Y={type:"star",value:b,output:R};if(n.bash===!0){Y.output=".*?",(k.type==="bos"||k.type==="slash")&&(Y.output=C+Y.output),F(Y);continue}if(k&&(k.type==="bracket"||k.type==="paren")&&n.regex===!0){Y.output=b,F(Y);continue}($.index===$.start||k.type==="slash"||k.type==="dot")&&(k.type==="dot"?($.output+=y,k.output+=y):n.dot===!0?($.output+=v,k.output+=v):($.output+=C,k.output+=C),_()!=="*"&&($.output+=m,k.output+=m)),F(Y)}for(;$.brackets>0;){if(n.strictBrackets===!0)throw new SyntaxError(En("closing","]"));$.output=wt.escapeLast($.output,"["),H("brackets")}for(;$.parens>0;){if(n.strictBrackets===!0)throw new SyntaxError(En("closing",")"));$.output=wt.escapeLast($.output,"("),H("parens")}for(;$.braces>0;){if(n.strictBrackets===!0)throw new SyntaxError(En("closing","}"));$.output=wt.escapeLast($.output,"{"),H("braces")}if(n.strictSlashes!==!0&&(k.type==="star"||k.type==="bracket")&&F({type:"maybe_slash",value:"",output:`${f}?`}),$.backtrack===!0){$.output="";for(let M of $.tokens)$.output+=M.output!=null?M.output:M.value,M.suffix&&($.output+=M.suffix)}return $};mo.fastpaths=(e,t)=>{let n={...t},r=typeof n.maxLength=="number"?Math.min(Jr,n.maxLength):Jr,i=e.length;if(i>r)throw new SyntaxError(`Input length: ${i}, exceeds maximum allowed length: ${r}`);e=Ba[e]||e;let{DOT_LITERAL:o,SLASH_LITERAL:s,ONE_CHAR:a,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:l,NO_DOTS_SLASH:p,STAR:f,START_ANCHOR:m}=Zr.globChars(n.windows),d=n.dot?l:u,h=n.dot?p:u,y=n.capture?"":"?:",v={negated:!1,prefix:""},w=n.bash===!0?".*?":f;n.capture&&(w=`(${w})`);let A=C=>C.noglobstar===!0?w:`(${y}(?:(?!${m}${C.dot?c:o}).)*?)`,S=C=>{switch(C){case"*":return`${d}${a}${w}`;case".*":return`${o}${a}${w}`;case"*.*":return`${d}${w}${o}${a}${w}`;case"*/*":return`${d}${w}${s}${a}${h}${w}`;case"**":return d+A(n);case"**/*":return`(?:${d}${A(n)}${s})?${h}${a}${w}`;case"**/*.*":return`(?:${d}${A(n)}${s})?${h}${w}${o}${a}${w}`;case"**/.*":return`(?:${d}${A(n)}${s})?${o}${a}${w}`;default:{let T=/^(.*?)\.(\w+)$/.exec(C);if(!T)return;let R=S(T[1]);return R?R+o+T[2]:void 0}}},g=wt.removePrefix(e,v),E=S(g);return E&&n.strictSlashes!==!0&&(E+=`${s}?`),E};Ga.exports=mo});var Va=Lt((dk,Wa)=>{"use strict";var Fh=za(),go=Ua(),Ha=Kn(),zh=qn(),Bh=e=>e&&typeof e=="object"&&!Array.isArray(e),ge=(e,t,n=!1)=>{if(Array.isArray(e)){let l=e.map(f=>ge(f,t,n));return f=>{for(let m of l){let d=m(f);if(d)return d}return!1}}let r=Bh(e)&&e.tokens&&e.input;if(e===""||typeof e!="string"&&!r)throw new TypeError("Expected pattern to be a non-empty string");let i=t||{},o=i.windows,s=r?ge.compileRe(e,t):ge.makeRe(e,t,!1,!0),a=s.state;delete s.state;let c=()=>!1;if(i.ignore){let l={...t,ignore:null,onMatch:null,onResult:null};c=ge(i.ignore,l,n)}let u=(l,p=!1)=>{let{isMatch:f,match:m,output:d}=ge.test(l,s,t,{glob:e,posix:o}),h={glob:e,state:a,regex:s,posix:o,input:l,output:d,match:m,isMatch:f};return typeof i.onResult=="function"&&i.onResult(h),f===!1?(h.isMatch=!1,p?h:!1):c(l)?(typeof i.onIgnore=="function"&&i.onIgnore(h),h.isMatch=!1,p?h:!1):(typeof i.onMatch=="function"&&i.onMatch(h),p?h:!0)};return n&&(u.state=a),u};ge.test=(e,t,n,{glob:r,posix:i}={})=>{if(typeof e!="string")throw new TypeError("Expected input to be a string");if(e==="")return{isMatch:!1,output:""};let o=n||{},s=o.format||(i?Ha.toPosixSlashes:null),a=e===r,c=a&&s?s(e):e;return a===!1&&(c=s?s(e):e,a=c===r),(a===!1||o.capture===!0)&&(o.matchBase===!0||o.basename===!0?a=ge.matchBase(e,t,n,i):a=t.exec(c)),{isMatch:!!a,match:a,output:c}};ge.matchBase=(e,t,n)=>(t instanceof RegExp?t:ge.makeRe(t,n)).test(Ha.basename(e));ge.isMatch=(e,t,n)=>ge(t,n)(e);ge.parse=(e,t)=>Array.isArray(e)?e.map(n=>ge.parse(n,t)):go(e,{...t,fastpaths:!1});ge.scan=(e,t)=>Fh(e,t);ge.compileRe=(e,t,n=!1,r=!1)=>{if(n===!0)return e.output;let i=t||{},o=i.contains?"":"^",s=i.contains?"":"$",a=`${o}(?:${e.output})${s}`;e&&e.negated===!0&&(a=`^(?!${a}).*$`);let c=ge.toRegex(a,t);return r===!0&&(c.state=e),c};ge.makeRe=(e,t={},n=!1,r=!1)=>{if(!e||typeof e!="string")throw new TypeError("Expected a non-empty string");let i={negated:!1,fastpaths:!0};return t.fastpaths!==!1&&(e[0]==="."||e[0]==="*")&&(i.output=go.fastpaths(e,t)),i.output||(i=go(e,t)),ge.compileRe(i,t,n,r)};ge.toRegex=(e,t)=>{try{let n=t||{};return new RegExp(e,n.flags||(n.nocase?"i":""))}catch(n){if(t&&t.debug===!0)throw n;return/$^/}};ge.constants=zh;Wa.exports=ge});var Ja=Lt((mk,Za)=>{"use strict";var qa=Va(),Gh=Kn();function Ka(e,t,n=!1){return t&&(t.windows===null||t.windows===void 0)&&(t={...t,windows:Gh.isWindows()}),qa(e,t,n)}Object.assign(Ka,qa);Za.exports=Ka});import{execFileSync as Uh}from"node:child_process";import{readFileSync as Xa,realpathSync as Jn,statSync as Ya}from"node:fs";import{isAbsolute as Qa,relative as Hh,resolve as ec,sep as yo,win32 as Wh}from"node:path";function tc(e){return e.code==="ENOENT"?"the file does not exist.":e instanceof Error?e.message:String(e)}function ve(e=process.cwd()){try{let t=Uh("git",["-C",e,"rev-parse","--show-toplevel"],{encoding:"utf8",env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:["ignore","pipe","ignore"]}).trim();return t?Jn(t):void 0}catch{return}}function ot(e){return e.startsWith("<root>/")||e.startsWith("<repo>/")}function Vh(e,t){let n=Hh(e,t);return n===""||!n.startsWith(`..${yo}`)&&n!==".."&&!Qa(n)}function qh(e,t,n){try{let r=Jn(e),i=Jn(t);if(!Vh(r,i))throw new xe(n,"the resolved path escapes its declared root.");if(!Ya(i).isFile())throw new xe(n,"the marked resource is not a regular file.");return{file:i,root:r}}catch(r){throw r instanceof xe?r:new xe(n,tc(r),{cause:r})}}function vo(e,t){let n=e.startsWith("<root>/")?"root":e.startsWith("<repo>/")?"repo":void 0;if(!n)throw new xe(e,"expected a path beginning with <root>/ or <repo>/.");if(n==="repo"&&!t)throw new xe(e,"no active checkout or worktree supplies <repo>; there is no filesystem fallback.");let r=n==="root"?J():t,i=e.slice(7);if(!i||yo==="\\"&&i.includes("\\")||i.includes("\0")||Qa(i)||yo==="\\"&&Wh.isAbsolute(i)||i.split("/").some(a=>!a||a==="."||a===".."))throw new xe(e,"the marked path contains an absolute, empty, backslash or traversal component.");let{file:o,root:s}=qh(r,ec(r,i),e);return{file:o,root:s,rootKind:n,markedPath:e}}function Kh(e,t,n){let r=t==="root"?J():n;if(!r)throw new xe(e,"no active checkout or worktree supplies the configuration root.");try{let i=Jn(r),o=Jn(ec(r,e));if(!Ya(o).isFile())throw new xe(e,"the configuration is not a regular file.");return{file:o,root:i,rootKind:t,markedPath:e}}catch(i){throw i instanceof xe?i:new xe(e,tc(i),{cause:i})}}function kt(e,t={}){return vo(e,t.repoRoot??ve(t.cwd))}function nc(e,t={}){let n=kt(e,t);return{content:Xa(n.file,"utf8"),provenance:n}}function se(e={}){let t=e.repoRoot??ve(e.cwd),n=new Map,r=[];function i(o,s,a){let c=a?Kh(o,a,t):vo(o,t);if(r.includes(c.file)||s!=="root"&&n.has(`root:${c.file}`))throw new xe(o,`configuration-reference cycle: ${[...r,c.file].join(" -> ")}`);let u=`${s}:${c.file}`,l=n.get(u);if(l)return l;r.push(c.file);try{let f={data:s==="root"?Dt(c.file,s):Dt(c.file,s),source:{...c,kind:s}};return n.set(u,f),f}finally{r.pop()}}return{repoRoot:t,loadRootConfiguration(o=J("woof.config.json")){return i(o,"root","root")},loadProjectConfiguration(o){return i(o,"project")},loadRepositoryConfiguration(o){if(!t)throw new xe(o,"no active checkout or worktree supplies <repo>.");return i(o,"repository","repo")},readResource(o){let s=vo(o,t);return{content:Xa(s.file,"utf8"),provenance:s}}}}var xe,be=G(()=>{"use strict";vt();je();xe=class extends Error{reference;detail;constructor(t,n,r){super(`Could not load ${t}: ${n}`,r),this.name="ResourceLoadError",this.reference=t,this.detail=n}}});import{existsSync as Zh,realpathSync as Ft,statSync as Jh}from"node:fs";import{homedir as rc}from"node:os";import{basename as ic,dirname as oc,isAbsolute as sc,normalize as Xh,relative as Yh,resolve as Xn,sep as Qh,win32 as ed}from"node:path";function cc(e,t){let n=Yh(e,t);return n===""||!n.startsWith(`..${Qh}`)&&n!==".."&&!sc(n)}function zt(e){try{return cc(Ft(J()),Ft(e))}catch{return!1}}function Bt(e){let t=[Xn(e,"woof.config.json"),Xn(e,".agents/woof.config.json"),Xn(e,".claude/woof.config.json")],n=new Map;for(let r of t)try{let i=Ft(r);if(!Jh(i).isFile())throw new on(`Repository configuration is not a file: ${I(r)}`);n.set(i,r)}catch(i){if(i.code==="ENOENT")continue;throw i}if(n.size>1)throw new on(`Multiple distinct repository configurations exist: ${[...n.values()].map(r=>I(r)).join(", ")}. Keep only one of ${I("woof.config.json")} at the checkout root, ${I(".agents/woof.config.json")} or ${I(".claude/woof.config.json")}.`);return n.keys().next().value}function uc(e,t,n){let r=e.data.$projects??{};if(!Object.prototype.hasOwnProperty.call(r,n))throw new on(`Project ${I(n)} is not registered. See the registered projects with ${I("woof projects")}.`);let i=r[n];if(typeof i=="string"){let o=t.loadProjectConfiguration(i);return{kind:"registered",name:n,data:o.data,source:o.source,inline:!1}}return{kind:"registered",name:n,data:i,source:e.source,inline:!0}}function $t(e,t){return Object.keys(e.data.$projects??{}).map(n=>uc(e,t,n))}function Yn(e,t){let n=e==="~"?rc():e.startsWith("~/")?Xn(rc(),e.slice(2)):e;if(!sc(n)&&!ed.isAbsolute(n))throw new on(`Project ${I(t)} metadata path must be absolute or begin with ${I("~/")}: ${I(e)}`);return Xh(n)}function td(e){try{return Ft(e)}catch{return e}}function nd(e){let t=[],n=e;for(;;)try{return Xn(Ft(n),...t)}catch{let r=oc(n);if(r===n)return e;t.unshift(ic(n)),n=r}}function rd(e,t){let n=td(e);return cc(n,t)}function id(e,t,n){try{let r=(0,ac.default)(e,{dot:!0}),i=t;for(;i;){if(r(i))return!0;let o=oc(i);i=o===i?void 0:o}return!1}catch(r){throw new on(`Project ${I(n)} has an invalid worktree glob: ${I(e)}`,{cause:r})}}function Sn(e){let t="project"in e?e.project:void 0;if(t)return t.kind==="repository"?`${ic(e.checkoutRoot)} (repo config)`:e.selection==="explicit"?`${t.name} (chosen for this command)`:`${t.name} (its paths match this directory)`}function Ie(e){return(e.data.$metadata?.$basePaths??[]).map(t=>Yn(t,e.name)).find(t=>Zh(t))}function Qn(e,t,n){if(wo(e,Ft(t)))return n;let r=Ie(e);return r?ve(r)??r:void 0}function lc(e,t){return wo(e,Ft(t))}function wo(e,t){let n=e.data.$metadata;if(!n)return!1;let r=(n.$basePaths??[]).map(o=>Yn(o,e.name)),i=(n.$worktreePaths??[]).map(o=>nd(Yn(o,e.name)));return r.some(o=>rd(o,t))||i.some(o=>id(o,t,e.name))}function ye(e={}){let t=e.cwd??process.cwd(),n=e.loader??se({cwd:t}),r=n.loadRootConfiguration(),i=ve(t);if(e.project){let a=uc(r,n,e.project);return{root:r,project:a,candidates:[],checkoutRoot:Qn(a,t,i),selection:"explicit"}}if(i&&!zt(t)){let a=Bt(i);if(a){let c=n.loadRepositoryConfiguration(a);return{root:r,project:{kind:"repository",name:void 0,data:c.data,source:c.source,inline:!1},candidates:[],checkoutRoot:i,selection:"repository"}}}let o=Ft(t),s=$t(r,n).filter(a=>wo(a,o));return s.length===1?{root:r,project:s[0],candidates:s,checkoutRoot:i,selection:"metadata"}:s.length>1?{root:r,candidates:s,checkoutRoot:i,selection:"ambiguous"}:{root:r,candidates:s,checkoutRoot:i,selection:"root"}}var ac,on,Ze=G(()=>{"use strict";ac=Sr(Ja(),1);Ge();je();be();on=class extends Error{constructor(t,n){super(t,n),this.name="ProjectSelectionError"}}});function od(e){return typeof e=="string"||!!e&&typeof e=="object"&&!Array.isArray(e)}function fc(e,t,n,r){let i=new Map,o=new Set;function s(a,c){for(let[u,l]of Object.entries(a)){if(r.has(u))continue;let p=c?`${c}.${u}`:u;od(l)&&(typeof l=="string"||"$type"in l||"$exec"in l)?i.set(p,{path:p,value:l,origin:n,source:t,overridden:void 0}):(o.add(p),s(l,p))}}return s(e,""),{tokens:i,namespaces:o}}function we(e){let t=fc(e.root.data,e.root.source,"root",new Set(["$schemaVersion","$projects"])),n=e.project?fc(e.project.data,e.project.source,"project",new Set(["$schemaVersion","$metadata"])):{tokens:new Map,namespaces:new Set};for(let[i,o]of n.tokens){if(t.namespaces.has(i))throw new Ee(`Project token ${I(i)} is a leaf but the shared definition is a namespace.`);let s=t.tokens.get(i);n.tokens.set(i,{...o,overridden:s})}for(let i of n.namespaces)if(t.tokens.has(i))throw new Ee(`Project namespace ${I(i)} conflicts with a shared leaf of the same name.`);let r=new Map(t.tokens);for(let[i,o]of n.tokens)r.set(i,o);return{context:e,tokens:r,rootTokens:t.tokens,rootNamespaces:t.namespaces,projectNamespaces:n.namespaces}}function er(e){let t=[];function n(i){if(!i)return;let o=t.at(-1);o?.kind==="literal"?o.text+=i:t.push({kind:"literal",text:i})}let r=0;for(;r<e.length;){if(e.startsWith("{{{{",r)){let i=e.indexOf("}}}}",r+4);if(i!==-1){let o=e.slice(r+4,i);if(tr.test(o)&&e[i+4]!=="}"){n(`{{${o}}}`),r=i+4;continue}}}if(e.startsWith("{{",r)){let i=e.indexOf("}}",r+2);if(i!==-1){let o=e.slice(r+2,i);if(tr.test(o)&&e[r-1]!=="$"&&e[r-1]!=="{"&&e[i+2]!=="}"){t.push({kind:"reference",path:o}),r=i+2;continue}}}n(e[r]),r+=1}return t}function Xr(e){return er(e).flatMap(t=>t.kind==="reference"?[t.path]:[])}function Yr(e,t){let n="",r=0;for(;r<e.length;){if(e.startsWith("{{{{",r)){let i=e.indexOf("}}}}",r+4);if(i!==-1){let o=e.slice(r+4,i);if(tr.test(o)&&e[i+4]!=="}"){n+=e.slice(r,i+4),r=i+4;continue}}}if(e.startsWith("{{",r)){let i=e.indexOf("}}",r+2);if(i!==-1){let o=e.slice(r+2,i);if(tr.test(o)&&e[r-1]!=="$"&&e[r-1]!=="{"&&e[i+2]!=="}"){n+=`{{${t.get(o)??o}}}`,r=i+2;continue}}}n+=e[r],r+=1}return n}function jt(e){if(!e.startsWith("$projects.")){if(!tr.test(e))throw new Ee(`Invalid token address: ${I(e)}`);return{path:e}}let[,t,...n]=e.split(".");if(!t||!pc.test(t)||!n.length||n.some(r=>!pc.test(r)))throw new Ee(`Invalid qualified project address: ${I(e)}`);return{project:t,path:n.join(".")}}function hc(e,t){let n=jt(t);if(n.project){let r=e.context.project;if(r?.kind!=="registered"||r.name!==n.project)throw new Ee(`Address ${I(t)} contradicts the selected project; select ${I(n.project)} explicitly instead of mixing scopes.`)}return n.path}function dc(e){return typeof e.value=="string"?{description:void 0,tags:void 0}:{description:e.value.$description,tags:e.value.$tags}}function ko(e){let t=er(e),n=t[0];return t.length===1&&n?.kind==="reference"?n.path:void 0}function mc(e){return[...e.tokens.values()].map(t=>{let n=typeof t.value=="string"?ko(t.value):void 0;return{path:t.path,kind:n?"alias":typeof t.value=="string"?"prompt":t.value.$type,target:n,...dc(t),origin:t.origin,source:t.source}})}function gc(e){let t=new Map,n=new Map,r=new Map;function i(p,f){if(f.origin==="root"&&p.startsWith("<repo>/"))throw new Ee(`Global token ${I(f.path)} cannot depend on repository resource ${I(p)}.`);let m=e.context.checkoutRoot,d=e.context.project;if(p.startsWith("<repo>/")&&!m)throw new Ee(`${I(f.path)} reads ${I(p)}, but ${d?.name?`project ${I(d.name)} has no base path on this machine`:"no checkout is available"}.`);return o(f,()=>kt(p,m?{repoRoot:m}:{}))}function o(p,f){try{return f()}catch(m){throw m instanceof xe?new Ee(`${I(p.path)} in ${I(p.source.file)} cannot load ${I(m.reference)}: ${m.detail}`):m}}function s(p){if(typeof p.value!="string"&&p.value.$type!=="prompt")throw new Ee(`Token ${I(p.path)} is not a prompt.`);let f=typeof p.value=="string"?p.value:p.value.$exec;if(!ot(f))return{content:f,parts:er(f),files:[]};let m=i(f,p),d=n.get(f);if(d)return{content:d.content,parts:er(d.content),files:[d.provenance]};let h=e.context.checkoutRoot,y=o(p,()=>nc(f,h?{repoRoot:h}:{})).content;return n.set(f,{content:y,provenance:m}),{content:y,parts:er(y),files:[m]}}function a(p,f,m){let d=f.at(-1),h=m?` in ${I(m.source.file)}`:"",y=d?` ${I(d)}${h} references it.`:"";throw e.rootNamespaces.has(p)||e.projectNamespaces.has(p)?new Ee(`${I(p)} is a namespace, not a token.${y}`):m?.origin==="root"&&e.context.project&&!e.rootTokens.has(p)?new Ee(`Shared token ${I(m.path)} depends on project-only token ${I(p)}.`):new Ee(`Token ${I(p)} does not exist.${y}`)}function c(p,f){if(f.includes(p))throw new Ee(`Circular token reference: ${I([...f,p].join(" -> "))}`);let m=e.tokens.get(p);if(!m)return a(p,f,f.length?e.tokens.get(f.at(-1)):void 0);if(t.has(p))return;let d=[],h=[];if(typeof m.value=="string"||m.value.$type==="prompt"){let y=s(m);h.push(...y.files);for(let v of y.parts)v.kind==="reference"&&(d.push(v.path),m.origin==="root"&&!e.rootTokens.has(v.path)&&a(v.path,[...f,p],m),c(v.path,[...f,p]))}else{let y=Array.isArray(m.value.$exec)?m.value.$exec:[m.value.$exec];for(let v of y)ot(v)&&h.push(i(v,m))}t.set(p,{path:p,origin:m.origin,source:m.source,...dc(m),references:d,files:h,overridden:m.overridden?{path:m.overridden.path,source:m.overridden.source}:void 0})}async function u(p){let f=r.get(p);if(f)return f;let m=(async()=>{let d=e.tokens.get(p);if(typeof d.value!="string"&&d.value.$type!=="prompt"){if(!l)throw new Ee(`Computed token ${I(p)} requires an evaluation hook.`);let v=d.value,A=(Array.isArray(v.$exec)?v.$exec:[v.$exec]).map(g=>ot(g)?i(g,d):void 0),S=await l({token:d,resource:v,locations:A});if(typeof S!="string")throw new Ee(`Computed token ${I(p)} returned non-text output.`);return S}let h=s(d),y="";for(let v of h.parts)v.kind==="literal"?y+=v.text:y+=await u(v.path);return y})();return r.set(p,m),m}let l;return{visit:c,evaluate:u,setEvaluator(p){l=p},traces(){return[...t.values()]}}}function yc(e,t,n){return{requested:t,selection:e.context.selection,project:e.context.project?{kind:e.context.project.kind,name:e.context.project.name,source:e.context.project.source}:void 0,tokens:n.traces()}}function Gt(e,t){let n=hc(e,t),r=gc(e);return r.visit(n,[]),yc(e,n,r)}function vc(e,t){return Gt(e,t)}async function $o(e,t,n,r){let i=hc(e,t),o=gc(e);return o.setEvaluator(n),o.visit(i,[]),r?.(yc(e,i,o)),o.evaluate(i)}function nr(e,t){return t?[Gt(e,t)]:[...e.tokens.keys()].map(n=>Gt(e,n))}var Ee,pc,tr,Je=G(()=>{"use strict";Ge();be();Ee=class extends Error{constructor(t,n){super(t,n),this.name="TokenResolutionError"}},pc=/^[A-Za-z0-9_-]+$/,tr=/^[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)*$/});import{createHash as sd}from"node:crypto";import{chmodSync as ad,constants as Ec,copyFileSync as Sc,existsSync as cd,mkdirSync as Tc,readFileSync as ir,realpathSync as Qr,rmSync as Cc,statSync as wc}from"node:fs";import{homedir as ud}from"node:os";import{basename as ld,dirname as xo,extname as Ac,isAbsolute as pd,join as sn,relative as ei,resolve as fd,sep as ti}from"node:path";import{isDeepStrictEqual as kc}from"node:util";function an(e){return e.kind==="shared"?"shared tokens (global)":e.kind==="repository"?"repo tokens (project)":`${e.name} tokens (project)`}function Rc(e,t){if(e.kind==="shared")return J("woof.config.json");if(e.kind==="repository")return ve(t);let n=se({cwd:t}),r=$t(n.loadRootConfiguration(),n).find(i=>i.name===e.name);return r&&Ie(r)}function $c(e,t){let n=ei(e,t);return n!==""&&!n.startsWith(`..${ti}`)&&n!==".."&&!pd(n)}function xc(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&!("$type"in e||"$exec"in e)}function sr(e,t){let n=J("woof.config.json");if(e.kind==="shared")return{file:n,kind:"root",base:[]};if(e.kind==="repository"){let s=ve(t),a=s&&!zt(t)?Bt(s):void 0;if(!a)throw new Error(`This checkout has no repository configuration. Create one with ${I("woof init --repo")}.`);return{file:a,kind:"repository",base:[]}}let r=se({cwd:t}),i=r.loadRootConfiguration().data.$projects??{};if(!Object.hasOwn(i,e.name))throw new Error(`Project ${I(e.name)} is not registered. See the registered projects with ${I("woof projects")}.`);let o=i[e.name];return typeof o=="string"?{file:r.loadProjectConfiguration(o).source.file,kind:"project",base:[]}:{file:n,kind:"root",base:["$projects",e.name]}}function So(e,t,n,r,i=!1){let o=structuredClone(e),s=t.reduce((c,u)=>c[u],o),a=n.split(".");for(let[c,u]of a.entries()){let l=a.slice(0,c+1).join("."),p=Object.hasOwn(s,u)?s[u]:void 0;if(c===a.length-1){if(i&&(p===void 0||xc(p)))throw new Error(`Token ${I(l)} does not exist in this configuration.`);if(!i&&p!==void 0)throw new Error(`Token ${I(l)} already exists in this configuration.`);s[u]=r}else if(p===void 0){if(i)throw new Error(`Token ${I(n)} does not exist in this configuration.`);s=s[u]={}}else if(xc(p))s=p;else throw new Error(`Token ${I(l)} already exists, so it cannot hold ${I(n)}.`)}return o}function bo(e,t,n,r){return e==="prompt"&&typeof t=="string"&&!n&&!r.length?t:{$type:e,$exec:t,...n?{$description:n}:{},...r.length?{$tags:r}:{}}}function Eo(e){return bo(e.type,e.content.exec,e.description,e.tags)}function md(e){if(!e.content.copy)return Eo(e);let t=e.type==="prompt"?ir(e.content.file,"utf8"):"";return Eo({...e,content:{exec:t}})}function To(e){if(!e.split(".").every(n=>hd.test(n)&&!dd.has(n)))throw new Error(`Token path ${I(e)} must be dot-separated names that contain only ASCII letters, digits, underscores and hyphens.`)}function Co(e,t){if(!e.trim())throw new Error("The token content is empty.");if(e.includes(`
|
|
19
|
+
`)||ot(e))return{exec:e};let n=e.startsWith("~/")?sn(ud(),e.slice(2)):fd(t.cwd,e),r;try{if(r=Qr(n),!wc(r).isFile())return{exec:e}}catch{return{exec:e}}let i=Qr(J());if($c(i,r))return{exec:`<root>/${ei(i,r).split(ti).join("/")}`,file:r};let o=ve(t.cwd);if(o&&t.target.kind!=="shared"&&$c(o,r))return{exec:`<repo>/${ei(o,r).split(ti).join("/")}`,file:r};let s=`resources/${t.path.replaceAll(".","/")}${Ac(r)}`;try{throw wc(sn(i,s)),new Error(`woof home already has a file at ${I(s)}. Move the file into woof home, or paste its content.`)}catch(a){if(a.code!=="ENOENT")throw a}return{exec:`<root>/${s}`,file:r,copy:s}}function ni(e,t){To(e.path);let n=sr(e.target,t),r=JSON.parse(ir(n.file,"utf8")),i=So(r,n.base,e.path,e.value,e.replace),o=ze(i,n.kind,n.file),s=se({cwd:t}),a=s.loadRootConfiguration(),c=n.kind==="root"?{...a,data:o}:a,u=s.repoRoot,l=w=>({root:c,project:w,candidates:[],checkoutRoot:w.kind==="registered"?Qn(w,t,u):u,selection:"explicit"}),p={root:c,candidates:[],checkoutRoot:u,selection:"root"},f=$t(c,s).map(w=>e.target.kind==="project"&&w.name===e.target.name&&!w.inline?{...w,data:o}:w),m=ve(t),d=m&&!zt(t)?Bt(m):void 0,h=d?{kind:"repository",name:void 0,data:e.target.kind==="repository"?o:s.loadRepositoryConfiguration(d).data,source:s.loadRepositoryConfiguration(d).source,inline:!1}:void 0,y=e.target.kind==="shared"?[p,...f.map(l),...h?[l(h)]:[]]:[e.target.kind==="repository"?l(h):l(f.find(w=>w.name===e.target.name))];for(let w of y)try{we(w)}catch(A){let S=w.project?w.project.name?`Project ${w.project.name}`:"Repository project":"Shared tokens";throw new Error(`${S}: ${A instanceof Error?A.message:String(A)}`,{cause:A})}let v=we(y[0]);return Gt(v,e.path),{document:r,base:n.base,next:i,overrides:e.target.kind!=="shared"&&v.rootTokens.has(e.path)}}function ri(e,t){return ni({target:e.target,path:e.path,value:md(e)},t)}async function jc(e,t){let{file:n}=sr(e.target,t);return bn(n,r=>{let i=ri(e,t),o=e.content.copy?So(i.document,i.base,e.path,Eo(e)):i.next,s;e.content.copy&&(s=sn(Qr(J()),e.content.copy),Tc(xo(s),{recursive:!0,mode:448}),Sc(e.content.file,s,Ec.COPYFILE_EXCL),ad(s,384));try{Wn(r,o)}catch(a){throw s&&Cc(s,{force:!0}),a}return{file:r,overrides:i.overrides}})}function gd(e){let t=sd("sha256");for(let n of e)t.update(ir(n));return t.digest("hex")}function bc(e){return e.kind==="repository"?{kind:"repository"}:{kind:"project",name:e.name}}function rr(e,t){let n=se({cwd:t.cwd}),r=ye({cwd:t.cwd,loader:n,...t.project?{project:t.project}:{}});if(r.selection==="ambiguous")throw new Error(`Several projects match this directory: ${r.candidates.map(d=>I(d.name)).join(", ")}. Retry with ${I("--project NAME")}.`);let i=we(r),o=i.tokens.get(e);if(!o)throw new Error(i.rootNamespaces.has(e)||i.projectNamespaces.has(e)?`${I(e)} is a namespace. Choose one token in it.`:`Token ${I(e)} does not exist. Find it with ${I("woof get --search")}.`);let s="project"in r?r.project:void 0,a=o.origin==="root"?{kind:"shared"}:bc(s),c=o.value,u=typeof c=="string"?"prompt":c.$type,l=typeof c=="string"?c:c.$exec,p=(Array.isArray(l)?l:[l]).filter(ot).map(d=>kt(d,r.checkoutRoot?{repoRoot:r.checkoutRoot}:{}).file),f=Array.isArray(l)||p.length&&u!=="prompt"?"fixed":p.length?"file":"inline",m=sr(a,t.cwd).file;return{path:e,value:c,type:u,exec:l,kind:f,files:p,content:f==="file"?ir(p[0],"utf8"):f==="inline"?l:void 0,description:typeof c=="string"?void 0:c.$description,tags:typeof c=="string"?[]:c.$tags??[],definition:a,override:o.origin==="root"&&s?bc(s):void 0,configuration:m,version:gd([m,...p])}}async function Ao(e,t,n){let r=rr(e,n),i=n.layer==="override"?r.override:r.definition;if(!i)throw new Error(`${I(e)} is not a shared token seen from a project, so it cannot get an override.`);return bn(sr(i,n.cwd).file,o=>{let s=rr(e,n);if(n.version&&s.version!==n.version)throw new Error(`${I(e)} changed after it was opened. Open it again to edit the current version.`);if(t.content!==void 0&&s.kind==="fixed")throw new Error(`The content of ${I(e)} is in ${s.files.map(h=>I(h)).join(", ")}. Edit the file directly.`);if(t.content!==void 0&&!t.content.trim())throw new Error("The token content is empty.");let a=t.description===void 0?s.description:t.description.trim()||void 0,c=t.tags??s.tags,u=t.content!==void 0&&t.content!==s.content,l=u&&s.kind==="file"&&n.layer==="definition",p=bo(s.type,u&&!l?t.content:t.exec??s.exec,a,c);if(n.layer==="definition"&&!l&&kc(p,s.value))return{file:o,contentFile:void 0,changed:!1};let f=ni({target:i,path:e,value:l?bo(s.type,t.content,a,c):p,replace:n.layer==="definition"},n.cwd);if(n.check)return{file:o,contentFile:void 0,changed:!0};let m=l?So(f.document,f.base,e,p,!0):f.next,d=l?ir(s.files[0]):void 0;l&&zr(s.files[0],t.content);try{(n.layer==="override"||!kc(p,s.value))&&Wn(o,m)}catch(h){throw d&&zr(s.files[0],d),h}return{file:o,contentFile:l?s.files[0]:void 0,changed:!0}})}function Ic(e,t){let n=rr(e,t),r=n.override;if(!r||r.kind==="shared"||n.kind!=="fixed")throw new Error(`${I(e)} has no script files to copy.`);let i=ve(t.cwd),o=Qr(J()),s=r.kind==="repository"?{directory:sn(xo(sr(r,t.cwd).file),"woof"),marker:"<repo>",root:i}:{directory:sn(o,"resources","projects",r.name),marker:"<root>",root:o},a=Array.isArray(n.exec)?n.exec:[n.exec],c=[...new Set(a.filter(ot))],u=e.split("."),l=new Map(c.map(m=>{let d=kt(m,i?{repoRoot:i}:{}).file,h=c.length===1?`${sn(s.directory,...u)}${Ac(d)}`:sn(s.directory,...u,ld(d));return[m,{source:d,file:h}]}));for(let{file:m}of l.values())if(cd(m))throw new Error(`${I(m)} already exists. Move it away, then retry.`);let p=()=>{for(let{file:m}of l.values())Cc(m,{force:!0})};try{for(let{source:m,file:d}of l.values())Tc(xo(d),{recursive:!0}),Sc(m,d,Ec.COPYFILE_EXCL)}catch(m){throw p(),m}let f=a.map(m=>{let d=l.get(m);return d?`${s.marker}/${ei(s.root,d.file).split(ti).join("/")}`:m});return{exec:Array.isArray(n.exec)?f:f[0],files:[...l.values()].map(m=>m.file),remove:p}}var or,hd,dd,Ro=G(()=>{"use strict";vt();Ge();qr();je();Ze();be();Je();or=["prompt","bash","node","tsx","bun"];hd=/^[A-Za-z0-9_-]+$/,dd=new Set(["__proto__","prototype","constructor"])});var _c,Pc,Oc,Nc=G(()=>{_c=(()=>{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}})(),Pc=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,Oc=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});var yd,vd,Lc,wd,Dc,kd,$d,xd,Mc,Fc,zc=G(()=>{Nc();yd=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,vd=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Lc=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,wd=/\t{1,1000}/y,Dc=new RegExp("[\\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?))*","yu"),kd=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,$d=new RegExp("\\p{M}+","gu"),xd={limit:1/0,ellipsis:""},Mc=(e,t={},n={})=>{let r=t.limit??1/0,i=t.ellipsis??"",o=t?.ellipsisWidth??(i?Mc(i,xd,n).width:0),s=0,a=n.controlWidth??0,c=n.tabWidth??8,u=n.emojiWidth??2,l=2,p=n.regularWidth??1,f=n.wideWidth??l,m=[[kd,p],[yd,s],[vd,a],[wd,c],[Dc,u],[Lc,f]],d=0,h=0,y=e.length,v=0,w=!1,A=y,S=Math.max(0,r-o),g=0,E=0,C=0,T=0;e:for(;;){if(E>g||h>=y&&h>d){let R=e.slice(g,E)||e.slice(d,h);v=0;for(let $ of R.replaceAll($d,"")){let x=$.codePointAt(0)||0;if(Pc(x)?T=l:Oc(x)?T=f:T=p,C+T>S&&(A=Math.min(A,Math.max(g,d)+v)),C+T>r){w=!0;break e}v+=$.length,C+=T}g=E=0}if(h>=y)break e;for(let R=0,$=m.length;R<$;R++){let[x,j]=m[R];if(x.lastIndex=h,x.test(e)){if(v=x===Lc?_c(e.slice(h,x.lastIndex)):x===Dc?1:x.lastIndex-h,T=v*j,C+T>S&&(A=Math.min(A,h+Math.floor((S-C)/j))),C+T>r){w=!0;break e}C+=T,g=d,E=h,h=d=x.lastIndex;continue e}}h+=1}return{width:w?S:C,index:w?A:y,truncated:w,ellipsed:w&&r>=o}},Fc=Mc});var bd,Ed,xt,jo=G(()=>{zc();bd={limit:1/0,ellipsis:"",ellipsisWidth:0},Ed=(e,t={})=>Fc(e,bd,t).width,xt=Ed});function Tn(e,t,n){return String(e).normalize().split(Rd).map(r=>Ad(r,t,n)).join(`
|
|
20
|
+
`)}var ii,Wc,Sd,_o,Vc,Td,qc,Po,Bc,Gc,Uc,Hc,Io,Cd,Ad,Rd,Oo=G(()=>{jo();ii="\x1B",Wc="\x9B",Sd=39,_o="\x07",Vc="[",Td="]",qc="m",Po=`${Td}8;;`,Bc=new RegExp(`(?:\\${Vc}(?<code>\\d+)m|\\${Po}(?<uri>.*)${_o})`,"y"),Gc=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},Uc=e=>`${ii}${Vc}${e}${qc}`,Hc=e=>`${ii}${Po}${e}${_o}`,Io=(e,t,n)=>{let r=t[Symbol.iterator](),i=!1,o=!1,s=e.at(-1),a=s===void 0?0:xt(s),c=r.next(),u=r.next(),l=0;for(;!c.done;){let p=c.value,f=xt(p);a+f<=n?e[e.length-1]+=p:(e.push(p),a=0),(p===ii||p===Wc)&&(i=!0,o=t.startsWith(Po,l+1)),i?o?p===_o&&(i=!1,o=!1):p===qc&&(i=!1):(a+=f,a===n&&!u.done&&(e.push(""),a=0)),c=u,u=r.next(),l+=p.length}s=e.at(-1),!a&&s!==void 0&&s.length&&e.length>1&&(e[e.length-2]+=e.pop())},Cd=e=>{let t=e.split(" "),n=t.length;for(;n&&!xt(t[n-1]);)n--;return n===t.length?e:t.slice(0,n).join(" ")+t.slice(n).join("")},Ad=(e,t,n={})=>{if(n.trim!==!1&&e.trim()==="")return"";let r="",i,o,s=e.split(" "),a=[""],c=0;for(let p=0;p<s.length;p++){let f=s[p];if(n.trim!==!1){let d=a.at(-1)??"",h=d.trimStart();d.length!==h.length&&(a[a.length-1]=h,c=xt(h))}p!==0&&(c>=t&&(n.wordWrap===!1||n.trim===!1)&&(a.push(""),c=0),(c||n.trim===!1)&&(a[a.length-1]+=" ",c++));let m=xt(f);if(n.hard&&m>t){let d=t-c,h=1+Math.floor((m-d-1)/t);Math.floor((m-1)/t)<h&&a.push(""),Io(a,f,t),c=xt(a.at(-1)??"");continue}if(c+m>t&&c&&m){if(n.wordWrap===!1&&c<t){Io(a,f,t),c=xt(a.at(-1)??"");continue}a.push(""),c=0}if(c+m>t&&n.wordWrap===!1){Io(a,f,t),c=xt(a.at(-1)??"");continue}a[a.length-1]+=f,c+=m}n.trim!==!1&&(a=a.map(p=>Cd(p)));let u=a.join(`
|
|
21
|
+
`),l=!1;for(let p=0;p<u.length;p++){let f=u[p];if(r+=f,l)l=!1;else if(l=f>="\uD800"&&f<="\uDBFF",l)continue;if(f===ii||f===Wc){Bc.lastIndex=p+1;let d=Bc.exec(u)?.groups;if(d?.code!==void 0){let h=Number.parseFloat(d.code);i=h===Sd?void 0:h}else d?.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}if(u[p+1]===`
|
|
22
|
+
`){o&&(r+=Hc(""));let m=i?Gc(i):void 0;i&&m&&(r+=Uc(m))}else f===`
|
|
23
|
+
`&&(i&&Gc(i)&&(r+=Uc(i)),o&&(r+=Hc(o)))}return r},Rd=/\r?\n/});var Lo=Lt((Yk,Kc)=>{"use strict";var No={to(e,t){return t?`\x1B[${t+1};${e+1}H`:`\x1B[${e+1}G`},move(e,t){let n="";return e<0?n+=`\x1B[${-e}D`:e>0&&(n+=`\x1B[${e}C`),t<0?n+=`\x1B[${-t}A`:t>0&&(n+=`\x1B[${t}B`),n},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},jd={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},Id={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let t="";for(let n=0;n<e;n++)t+=this.line+(n<e-1?No.up():"");return e&&(t+=No.left),t}};Kc.exports={cursor:No,scroll:jd,erase:Id,beep:"\x07"}});import{styleText as ai}from"node:util";import{stdout as Zc,stdin as _d}from"node:process";import Pd from"node:readline";function Cn(e,t,n){if(!n.some(s=>!s.disabled))return e;let r=e+t,i=Math.max(n.length-1,0),o=r<0?i:r>i?0:r;return n[o]?.disabled?Cn(o,t<0?-1:1,n):o}function oi(e,t,n,r){let i=r.split(`
|
|
24
|
+
`),o=0,s=e;for(let c of i){if(s<=c.length)break;s-=c.length+1,o++}for(o=Math.max(0,Math.min(i.length-1,o+n)),s=Math.min(s,i[o].length)+t;s<0&&o>0;)o--,s+=i[o].length+1;for(;s>i[o].length&&o<i.length-1;)s-=i[o].length+1,o++;s=Math.max(0,Math.min(i[o].length,s));let a=0;for(let c=0;c<o;c++)a+=i[c].length+1;return a+s}function Ld(e){if(e!==void 0)return e;if(Xe.accessible!==void 0)return Xe.accessible;let t=process.env.ACCESSIBLE;return t!==void 0&&t!==""&&t!=="0"&&t!=="false"}function Jc(e,t){if(typeof e=="string")return Xe.aliases.get(e)===t;for(let n of e)if(n!==void 0&&Jc(n,t))return!0;return!1}function Dd(e,t){if(e===t)return;let n=e.split(`
|
|
25
|
+
`),r=t.split(`
|
|
26
|
+
`),i=Math.max(n.length,r.length),o=[];for(let s=0;s<i;s++)n[s]!==r[s]&&o.push(s);return{lines:o,numLinesBefore:n.length,numLinesAfter:r.length,numLines:i}}function cn(e){return e===ci}function si(e,t){let n=e;n.isTTY&&n.setRawMode(t)}function Ut(e,t,n,r=n,i=n,o){let s=Do(e??Zc);return Tn(t,s-n.length,{hard:!0,trim:!1}).split(`
|
|
27
|
+
`).map((a,c,u)=>{let l=o?o(a,c):a;return c===0?`${r}${l}`:c===u.length-1?`${i}${l}`:`${n}${l}`}).join(`
|
|
28
|
+
`)}function Xc(e,t){if("~standard"in e){let n=e["~standard"].validate(t);return n instanceof Promise?n.then(r=>r.issues?.at(0)?.message):n.issues?.at(0)?.message}return e(t)}function Md(e,t){if(e===void 0||t.length===0)return 0;let n=t.findIndex(r=>r.value===e);return n!==-1?n:0}function Fd(e,t){return(t.label??String(t.value)).toLowerCase().includes(e.toLowerCase())}function zd(e,t){if(t)return e?t:t[0]}var st,Od,Nd,Xe,r0,ci,Do,Mo,An,Yc,Bd,ui,Qc,li,Fo=G(()=>{Oo();st=Sr(Lo(),1);Od=["up","down","left","right","space","enter","cancel"],Nd=["January","February","March","April","May","June","July","August","September","October","November","December"],Xe={actions:new Set(Od),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,accessible:void 0,date:{monthNames:[...Nd],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(e,t)=>`There are only ${e} days in ${t}`,afterMin:e=>`Date must be on or after ${e.toISOString().slice(0,10)}`,beforeMax:e=>`Date must be on or before ${e.toISOString().slice(0,10)}`}}};r0=globalThis.process.platform.startsWith("win"),ci=Symbol("clack:cancel");Do=e=>"columns"in e&&typeof e.columns=="number"?e.columns:80,Mo=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;An=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";get accessible(){return Ld(this.opts.accessible)}constructor(t,n=!0){let{input:r=_d,output:i=Zc,render:o,signal:s,...a}=t;this.opts=a,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=o.bind(this),this._track=n,this._abortSignal=s,this.input=r,this.output=i}unsubscribe(){this._subscribers.clear()}setSubscriber(t,n){let r=this._subscribers.get(t)??[];r.push(n),this._subscribers.set(t,r)}on(t,n){this.setSubscriber(t,{cb:n})}once(t,n){this.setSubscriber(t,{cb:n,once:!0})}emit(t,...n){let r=this._subscribers.get(t)??[],i=[];for(let o of r)o.cb(...n),o.once&&i.push(()=>r.splice(r.indexOf(o),1));for(let o of i)o()}prompt(){return new Promise(t=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),t(ci);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=Pd.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),si(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(st.cursor.show),this.output.off("resize",this.render),si(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(st.cursor.show),this.output.off("resize",this.render),si(this.input,!1),t(ci)})})}_isActionKey(t,n){return t===" "}_shouldSubmit(t,n){return!0}_setValue(t){this.value=t,this.emit("value",this.value)}_setUserInput(t,n){this.userInput=t??"",this.emit("userInput",this.userInput),n&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}async onKeypress(t,n){if(this.state!=="validating"){if(this._track&&n.name!=="return"&&(n.name&&this._isActionKey(t,n)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),n?.name&&(!this._track&&Xe.aliases.has(n.name)&&this.emit("cursor",Xe.aliases.get(n.name)),Xe.actions.has(n.name)&&this.emit("cursor",n.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),this.emit("key",t,n),n?.name==="return"&&this._shouldSubmit(t,n)){if(this.opts.validate){let r=Xc(this.opts.validate,this.value),i;r instanceof Promise?(this.state="validating",this.render(),i=await r):i=r,i&&(this.error=i instanceof Error?i.message:i,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}Jc([t,n?.name,n?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
|
|
29
|
+
`),si(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let t=Tn(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
|
|
30
|
+
`).length-1;this.output.write(st.cursor.move(-999,t*-1))}render(){let t=Tn(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(st.cursor.hide);else{let n=Dd(this._prevFrame,t),r=Mo(this.output);if(this.restoreCursor(),n){let i=Math.max(0,n.numLinesAfter-r),o=Math.max(0,n.numLinesBefore-r),s=n.lines.find(a=>a>=i);if(s===void 0){this._prevFrame=t;return}if(n.lines.length===1){this.output.write(st.cursor.move(0,s-o)),this.output.write(st.erase.lines(1));let a=t.split(`
|
|
31
|
+
`);this.output.write(a[s]),this._prevFrame=t,this.output.write(st.cursor.move(0,a.length-s-1));return}else if(n.lines.length>1){if(i<o)s=i;else{let c=s-o;c>0&&this.output.write(st.cursor.move(0,c))}this.output.write(st.erase.down());let a=t.split(`
|
|
32
|
+
`).slice(s);this.output.write(a.join(`
|
|
33
|
+
`)),this._prevFrame=t;return}}this.output.write(st.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}};Yc=class extends An{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#t="";#n;#r;#i;#o;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return ai(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let t=this.userInput.slice(0,this.cursor),n=this.userInput.slice(this.cursor,this.cursor+1),r=this.userInput.slice(this.cursor+1);return`${t}${ai("inverse",n)}${r}`}get options(){return typeof this.#r=="function"?this.#r():this.#r}constructor(t){super(t),this.#r=t.options,this.#i=t.placeholder,this.#o=t.completeOnTab===!0;let n=this.options;this.filteredOptions=[...n],this.multiple=t.multiple===!0,this.#n=typeof t.options=="function"?t.filter:t.filter??Fd;let r;if(t.initialValue&&Array.isArray(t.initialValue)?this.multiple?r=t.initialValue:r=t.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(r=[this.options[0]?.value]),r)for(let i of r){let o=n.findIndex(s=>s.value===i);o!==-1&&(this.toggleSelected(i),this.#e=o)}this.focusedValue=this.options[this.#e]?.value,this.on("key",(i,o)=>this.#s(i,o)),this.on("userInput",i=>this.#a(i))}_isActionKey(t,n){return t===" "||this.multiple&&this.isNavigating&&n.name==="space"&&t!==void 0&&t!==""}#s(t,n){let r=n.name==="up",i=n.name==="down",o=n.name==="return",s=this.userInput===""||this.userInput===" ",a=this.#i,c=this.options,u=a!==void 0&&a!==""&&c.some(l=>!l.disabled&&(this.#n?this.#n(a,l):!0));if(n.name==="tab"&&s&&u){this.userInput===" "&&this._clearUserInput(),this._setUserInput(a,!0),this.isNavigating=!1;return}if(n.name==="tab"&&this.#o&&!this.multiple&&this.focusedValue!==void 0){let l=String(this.focusedValue);this._clearUserInput(),this._setUserInput(l,!0),this.isNavigating=!1;return}r||i?(this.#e=Cn(this.#e,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#e]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):o?this.value=zd(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(n.name==="tab"||this.isNavigating&&n.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(t){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(t)?this.selectedValues=this.selectedValues.filter(n=>n!==t):this.selectedValues=[...this.selectedValues,t]:this.selectedValues=[t])}#a(t){if(t!==this.#t){this.#t=t;let n=this.options;t&&this.#n?this.filteredOptions=n.filter(o=>this.#n?.(t,o)):this.filteredOptions=[...n];let r=Md(this.focusedValue,this.filteredOptions);this.#e=Cn(r,0,this.filteredOptions);let i=this.filteredOptions[this.#e];i&&!i.disabled?this.focusedValue=i.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}},Bd=new Set(["up","down","left","right"]),ui=class extends An{#e=!1;#t;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${t}\u2588`;let n=t.slice(0,this.cursor),r=t.slice(this.cursor,this.cursor+1),i=t.slice(this.cursor+1);return r===`
|
|
34
|
+
`?`${n}\u2588
|
|
35
|
+
${i}`:`${n}${ai("inverse",r)}${i}`}get cursor(){return this._cursor}#n(t){if(this.userInput.length===0){this._setUserInput(t);return}this._setUserInput(this.userInput.slice(0,this.cursor)+t+this.userInput.slice(this.cursor))}#r(t){let n=this.value??"";switch(t){case"up":this._cursor=oi(this._cursor,0,-1,n);return;case"down":this._cursor=oi(this._cursor,0,1,n);return;case"left":this._cursor=oi(this._cursor,-1,0,n);return;case"right":this._cursor=oi(this._cursor,1,0,n);return}}_shouldSubmit(t,n){if(this.#t)return this.focused==="submit"?!0:(this.#n(`
|
|
36
|
+
`),this._cursor++,!1);let r=this.#e;return this.#e=!0,r&&this.cursor===this.userInput.length?(this.userInput[this.cursor-1]===`
|
|
37
|
+
`&&(this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--),!0):(this.#n(`
|
|
38
|
+
`),this._cursor++,!1)}constructor(t){let n=t.initialUserInput??t.initialValue;super({...t,initialUserInput:n},!1),n!==void 0&&(this._cursor=n.length),this.#t=t.showSubmit??!1,this.on("key",(r,i)=>{if(i?.name&&Bd.has(i.name)){this.#e=!1,this.#r(i.name);return}if(r===" "&&this.#t){this.focused=this.focused==="editor"?"submit":"editor";return}if(i?.name!=="return"){if(this.#e=!1,i?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(i?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}r&&(this.#t&&this.focused==="submit"&&(this.focused="editor"),this.#n(r??""),this._cursor++)}}),this.on("userInput",r=>{this._setValue(r)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}},Qc=class extends An{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){let t=this._selectedValue;this.value=t===void 0?void 0:t.value}constructor(t){super(t,!1),this.options=t.options;let n=this.options.findIndex(({value:i})=>i===t.initialValue),r=n===-1?0:n;this.cursor=this.options[r]?.disabled?Cn(r,1,this.options):r,this.changeValue(),this.on("cursor",i=>{switch(i){case"left":case"up":this.cursor=Cn(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=Cn(this.cursor,1,this.options);break}this.changeValue()})}},li=class extends An{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${this.userInput}\u2588`;let n=t.slice(0,this.cursor),r=t.slice(this.cursor,this.cursor+1),i=t.slice(this.cursor+1);return`${n}${ai("inverse",r)}${i}`}get cursor(){return this._cursor}constructor(t){super({...t,initialUserInput:t.initialUserInput??t.initialValue}),this.on("userInput",n=>{this._setValue(n)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}});import{styleText as L,stripVTControlCharacters as y0}from"node:util";import pt from"node:process";function Gd(){return pt.platform!=="win32"?pt.env.TERM!=="linux":!!pt.env.CI||!!pt.env.WT_SESSION||!!pt.env.TERMINUS_SUBLIME||pt.env.ConEmuTask==="{cmd::Cmder}"||pt.env.TERM_PROGRAM==="Terminus-Sublime"||pt.env.TERM_PROGRAM==="vscode"||pt.env.TERM==="xterm-256color"||pt.env.TERM==="alacritty"||pt.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}function Xd(e,t){let n=[`${t?`${L("cyan",ne)} `:""}${e.join(" \u2022 ")}`];return t&&n.push(L("cyan",Ht)),n}function nu(e){return e.label??String(e.value??"")}function Yd(e,t){if(!e)return!0;let n=(t.label??String(t.value??"")).toLowerCase(),r=(t.hint??"").toLowerCase(),i=String(t.value).toLowerCase(),o=e.toLowerCase();return n.includes(o)||r.includes(o)||i.includes(o)}function Qd(e,t){let n=[];for(let r of t)e.includes(r.value)&&n.push(r);return n}var ru,Ud,oe,eu,Hd,Wd,hi,$0,ne,Ht,x0,b0,iu,fi,E0,S0,T0,C0,A0,R0,j0,I0,_0,P0,Vd,qd,Kd,Zd,ar,Jd,tu,ou,su,O0,le,au,N0,em,pi,cu,L0,uu,lu=G(()=>{Fo();Fo();Oo();jo();ru=Sr(Lo(),1);Ud=Gd(),oe=(e,t)=>Ud?e:t,eu=oe("\u25C6","*"),Hd=oe("\u25A0","x"),Wd=oe("\u25B2","x"),hi=oe("\u25C7","o"),$0=oe("\u250C","T"),ne=oe("\u2502","|"),Ht=oe("\u2514","\u2014"),x0=oe("\u2510","T"),b0=oe("\u2518","\u2014"),iu=oe("\u25CF",">"),fi=oe("\u25CB"," "),E0=oe("\u25FB","[\u2022]"),S0=oe("\u25FC","[+]"),T0=oe("\u25FB","[ ]"),C0=oe("\u25AA","\u2022"),A0=oe("\u2500","-"),R0=oe("\u256E","+"),j0=oe("\u251C","+"),I0=oe("\u256F","+"),_0=oe("\u2570","+"),P0=oe("\u256D","+"),Vd=oe("\u25CF","\u2022"),qd=oe("\u25C6","*"),Kd=oe("\u25B2","!"),Zd=oe("\u25A0","x"),ar=e=>{switch(e){case"initial":case"active":return L("cyan",eu);case"cancel":return L("red",Hd);case"error":return L("yellow",Wd);case"submit":return L("green",hi);case"validating":return L("dim",eu)}},Jd=e=>{switch(e){case"initial":case"active":return L("cyan",ne);case"cancel":return L("red",ne);case"error":return L("yellow",ne);case"submit":return L("green",ne)}};tu=(e,t,n,r,i,o=!1)=>{let s=t,a=0;if(o)for(let c=r-1;c>=n;c--){let u=e[c];if(u&&(s-=u.length),a++,s<=i)break}else for(let c=n;c<r;c++){let u=e[c];if(u&&(s-=u.length),a++,s<=i)break}return{lineCount:s,removals:a}},ou=({cursor:e,options:t,style:n,output:r=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:s=4})=>{let a=Do(r)-o,c=Mo(r),u=L("dim","..."),l=Math.max(c-s,0),p=Math.max(Math.min(i,l),5),f=0;e>=p-3&&(f=Math.max(Math.min(e-p+3,t.length-p),0));let m=p<t.length&&f>0,d=p<t.length&&f+p<t.length,h=Math.min(f+p,t.length),y=[],v=0;m&&v++,d&&v++;let w=f+(m?1:0),A=h-(d?1:0);for(let g=w;g<A;g++){let E=t[g],C=E?n(E,g===e):"",T=Tn(C,a,{hard:!0,trim:!1}).split(`
|
|
39
|
+
`);y.push(T),v+=T.length}if(v>l){let g=0,E=0,C=v,T=e-w,R=l,$=()=>tu(y,C,0,T,R),x=()=>tu(y,C,T+1,y.length,R,!0);m?({lineCount:C,removals:g}=$(),C>R&&(d||(R-=1),{lineCount:C,removals:E}=x())):(d||(R-=1),{lineCount:C,removals:E}=x(),C>R&&(R-=1,{lineCount:C,removals:g}=$())),g>0&&(m=!0,y.splice(0,g)),E>0&&(d=!0,y.splice(y.length-E,E))}let S=[];m&&S.push(u);for(let g of y)for(let E of g)S.push(E);return d&&S.push(u),S};su=e=>new Yc({options:e.options,initialValue:e.initialValue?[e.initialValue]:void 0,initialUserInput:e.initialUserInput,placeholder:e.placeholder,completeOnTab:e.completeOnTab,filter:e.filter??((t,n)=>Yd(t,n)),signal:e.signal,input:e.input,output:e.output,validate:e.validate,render(){let t=e.withGuide??Xe.withGuide,n=t?[`${L("gray",ne)}`,`${ar(this.state)} ${e.message}`]:[`${ar(this.state)} ${e.message}`],r=this.userInput,i=this.options,o=e.placeholder,s=r===""&&o!==void 0,a=(c,u)=>{let l=nu(c),p=c.hint&&c.value===this.focusedValue?L("dim",` (${c.hint})`):"";switch(u){case"active":return`${L("green",iu)} ${l}${p}`;case"inactive":return`${L("dim",fi)} ${L("dim",l)}`;case"disabled":return`${L("gray",fi)} ${L(["strikethrough","gray"],l)}`}};switch(this.state){case"submit":{let c=Qd(this.selectedValues,i),u=c.length>0?` ${L("dim",c.map(nu).join(", "))}`:"",l=t?L("gray",ne):"";return`${n.join(`
|
|
40
|
+
`)}
|
|
41
|
+
${l}${u}`}case"cancel":{let c=r?` ${L(["strikethrough","dim"],r)}`:"",u=t?L("gray",ne):"";return`${n.join(`
|
|
42
|
+
`)}
|
|
43
|
+
${u}${c}`}default:{let c=this.state==="error"?"yellow":"cyan",u=t?`${L(c,ne)} `:"",l=t?L(c,Ht):"",p="";if(this.isNavigating||s){let w=s?o:r;p=w!==""?` ${L("dim",w)}`:""}else p=` ${this.userInputWithCursor}`;let f=this.filteredOptions.length!==i.length?L("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"",m=this.filteredOptions.length===0&&r?[`${u}${L("yellow","No matches found")}`]:[],d=this.state==="error"?[`${u}${L("yellow",this.error)}`]:[];t&&n.push(`${u.trimEnd()}`),n.push(`${u}${L("dim","Search:")}${p}${f}`,...m,...d);let h=[`${L("dim","\u2191/\u2193")} to select`,...e.completeOnTab?[`${L("dim","Tab:")} complete`]:[],`${L("dim","Enter:")} confirm`,`${L("dim","Type:")} to search`],y=[`${u}${h.join(" \u2022 ")}`,l],v=this.filteredOptions.length===0?[]:ou({cursor:this.cursor,options:this.filteredOptions,columnPadding:t?3:0,rowPadding:n.length+y.length,style:(w,A)=>a(w,w.disabled?"disabled":A?"active":"inactive"),maxItems:e.maxItems,output:e.output});return[...n,...v.map(w=>`${u}${w}`),...y].join(`
|
|
44
|
+
`)}}}}).prompt(),O0=[`${L("dim","\u2191/\u2193")} to navigate`,`${L("dim","Space:")} select`,`${L("dim","Enter:")} confirm`],le={message:(e=[],{symbol:t=L("gray",ne),secondarySymbol:n=L("gray",ne),output:r=process.stdout,spacing:i=1,withGuide:o}={})=>{let s=[],a=o??Xe.withGuide,c=a?n:"",u=a?`${t} `:"",l=a?`${n} `:"";for(let f=0;f<i;f++)s.push(c);let p=Array.isArray(e)?e:e.split(`
|
|
45
|
+
`);if(p.length>0){let[f,...m]=p;f.length>0?s.push(`${u}${f}`):s.push(a?t:"");for(let d of m)d.length>0?s.push(`${l}${d}`):s.push(a?n:"")}r.write(`${s.join(`
|
|
46
|
+
`)}
|
|
47
|
+
`)},info:(e,t)=>{le.message(e,{...t,symbol:L("blue",Vd)})},success:(e,t)=>{le.message(e,{...t,symbol:L("green",qd)})},step:(e,t)=>{le.message(e,{...t,symbol:L("green",hi)})},warn:(e,t)=>{le.message(e,{...t,symbol:L("yellow",Kd)})},warning:(e,t)=>{le.warn(e,t)},error:(e,t)=>{le.message(e,{...t,symbol:L("red",Zd)})}},au=e=>new ui({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,showSubmit:e.showSubmit,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??Xe.withGuide,n=`${`${t?`${L("gray",ne)}
|
|
48
|
+
`:""}${ar(this.state)} `}${e.message}
|
|
49
|
+
`,r=e.placeholder&&e.placeholder.length>0?L("inverse",e.placeholder[0])+L("dim",e.placeholder.slice(1)):L(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:r,o=this.value??"",s=e.showSubmit?`
|
|
50
|
+
${L(this.focused==="submit"?"cyan":"dim","[ submit ]")}`:"";switch(this.state){case"error":{let a=`${L("yellow",ne)} `,c=t?Ut(e.output,i,a,void 0):i,u=L("yellow",Ht);return`${n}${c}
|
|
51
|
+
${u} ${L("yellow",this.error)}${s}
|
|
52
|
+
`}case"submit":{let a=`${L("gray",ne)} `,c=t?Ut(e.output,o,a,void 0,void 0,u=>L("dim",u)):o?L("dim",o):"";return`${n}${c}`}case"cancel":{let a=`${L("gray",ne)} `,c=t?Ut(e.output,o,a,void 0,void 0,u=>L(["strikethrough","dim"],u)):o?L(["strikethrough","dim"],o):"";return`${n}${c}`}default:{let a=t?`${L("cyan",ne)} `:"",c=t?L("cyan",Ht):"",u=t?Ut(e.output,i,a):i;return`${n}${u}
|
|
53
|
+
${c}${s}
|
|
54
|
+
`}}}}).prompt(),N0={light:oe("\u2500","-"),heavy:oe("\u2501","="),block:oe("\u2588","#")},em=[`${L("dim","\u2191/\u2193")} to navigate`,`${L("dim","Enter:")} confirm`],pi=(e,t)=>e.includes(`
|
|
55
|
+
`)?e.split(`
|
|
56
|
+
`).map(n=>t(n)).join(`
|
|
57
|
+
`):t(e),cu=e=>{let t=(r,i)=>{if(r===void 0)return"";let o=r.label??String(r.value);switch(i){case"disabled":return`${L("gray",fi)} ${pi(o,s=>L("gray",s))}${r.hint?` ${L("dim",`(${r.hint??"disabled"})`)}`:""}`;case"selected":return`${pi(o,s=>L("dim",s))}`;case"active":return`${L("green",iu)} ${o}${r.hint?` ${L("dim",`(${r.hint})`)}`:""}`;case"cancelled":return`${pi(o,s=>L(["strikethrough","dim"],s))}`;default:return`${L("dim",fi)} ${pi(o,s=>L("dim",s))}`}},n=e.showInstructions??!0;return new Qc({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let r=e.withGuide??Xe.withGuide,i=`${ar(this.state)} `,o=`${Jd(this.state)} `,s=Ut(e.output,e.message,o,i),a=`${r?`${L("gray",ne)}
|
|
58
|
+
`:""}${s}
|
|
59
|
+
`;switch(this.state){case"submit":{let c=r?`${L("gray",ne)} `:"",u=Ut(e.output,t(this.options[this.cursor],"selected"),c);return`${a}${u}`}case"cancel":{let c=r?`${L("gray",ne)} `:"",u=Ut(e.output,t(this.options[this.cursor],"cancelled"),c);return`${a}${u}${r?`
|
|
60
|
+
${L("gray",ne)}`:""}`}default:{let c=r?`${L("cyan",ne)} `:"",u=a.split(`
|
|
61
|
+
`).length,l=n?Xd(em,r):r?[L("cyan",Ht)]:[],p=l.join(`
|
|
62
|
+
`),f=l.length+1;return`${a}${c}${ou({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:c.length,rowPadding:u+f,style:(m,d)=>t(m,m.disabled?"disabled":d?"active":"inactive")}).join(`
|
|
63
|
+
${c}`)}
|
|
64
|
+
${p}
|
|
65
|
+
`}}}}).prompt()},L0=`${L("gray",ne)} `,uu=e=>new li({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??Xe.withGuide,n=`${`${t?`${L("gray",ne)}
|
|
66
|
+
`:""}${ar(this.state)} `}${e.message}
|
|
67
|
+
`,r=e.placeholder&&e.placeholder.length>0?L("inverse",e.placeholder[0])+L("dim",e.placeholder.slice(1)):L(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:r,o=this.value??"";switch(this.state){case"validating":{let s=t?`${L("cyan",ne)} `:"",a=t?L("cyan",Ht):"",c=L("dim",i),u=L("dim","Validating...");return`${n}${s}${c}
|
|
68
|
+
${a} ${u}
|
|
69
|
+
`}case"error":{let s=this.error?` ${L("yellow",this.error)}`:"",a=t?`${L("yellow",ne)} `:"",c=t?L("yellow",Ht):"";return`${n.trim()}
|
|
70
|
+
${a}${i}
|
|
71
|
+
${c}${s}
|
|
72
|
+
`}case"submit":{let s=o?`${t?" ":""}${L("dim",o)}`:"",a=t?L("gray",ne):"";return`${n}${a}${s}`}case"cancel":{let s=o?` ${L(["strikethrough","dim"],o)}`:"",a=t?L("gray",ne):"";return`${n}${a}${s}${o.trim()?`
|
|
73
|
+
${a}`:""}`}default:{let s=t?`${L("cyan",ne)} `:"",a=t?L("cyan",Ht):"";return`${n}${s}${i}
|
|
74
|
+
${a}
|
|
75
|
+
`}}}}).prompt()});import{readFileSync as tm}from"node:fs";import{stripVTControlCharacters as nm}from"node:util";function zo(e,t){return e.replace(rm,(n,r)=>{let i=t[r];if(i===void 0)throw new Error(`The presentation template has no value for {{${r}}}.`);return String(i)})}function Ye(e,t={}){let n=tm(Mt("cli","templates",`${e}.md`),"utf8");return zo(n,t).replace(/\n$/,"")}function at(){return process.argv.includes("--agent")||!!fe()}function Rn(e){e&&process.stdout.write(`${Ye(e.template,e.values)}
|
|
76
|
+
`)}function Se({summary:e,details:t,recovery:n},r){if(at())return Rn(r);le.success(e),t&&le.message(t),n&&le.info(n)}function He({summary:e,details:t,recovery:n},r){if(at())return Rn(r);le.info(e),t&&le.message(t),n&&le.info(n)}function fu(e){le.message("",{spacing:0}),le.message(ga(e),{spacing:0,withGuide:!1})}function Wt({summary:e,details:t,recovery:n},r){if(at())return Rn(r);le.warn(e),t&&le.message(t),n&&le.info(n)}function ae(e){Wt({summary:e},null),process.exitCode=130}function Bo({summary:e,details:t,notes:n,recovery:r},i){if(at())return Rn(i);le.warn(e),t&&fu(t),n&&le.message(n),r&&le.info(r)}function he({summary:e,details:t,recovery:n},r){if(at())return Rn(r);le.error(e),t&&le.message(t),n&&le.info(n)}function un(e,t,n){if(at())return Rn(n);le.info(e),fu(t)}async function ke({message:e,options:t}){if(at()||!Pe())return;let n=await cu({message:e,options:t});return cn(n)?void 0:n}function ln(e,t={}){process.stderr.write(`${Ye(e,t)}
|
|
77
|
+
`)}async function hu(e){if(at()||!Pe())return;let t=await au({message:e,showSubmit:!0,validate:n=>n?.trim()?void 0:"Enter a value."});return cn(t)?void 0:(t??"").trimEnd()}function Go(e){process.stdout.write(e)}function di(e,t){let n=e;for(let r=new Set;n?.target&&!r.has(n.path);)r.add(n.path),n=t.find(i=>i.path===n.target);return{description:n?.description,tags:n?.tags}}async function Vt({message:e,tokens:t,query:n=""}){if(at()||!Pe())return;let r=Math.max(...t.map(a=>a.path.length)),i=new Map(t.map(a=>{let{description:c,tags:u}=di(a,t);return[a.path,[a.path,c,...u??[],a.target].join(" ").toLowerCase()]})),o=t.map(a=>{let c=a.target?"":$n(a.kind),u=`${a.path.padEnd(r)} ${xn(a.origin)}${c?` ${c}`:""}`,{description:l,tags:p}=di(a,t),f=[l,p?.length?`tags: ${p.join(", ")}`:void 0].filter(Boolean).join(" \xB7 "),m=(process.stdout.columns??80)-nm(u).length-im,d=m<20?"":f.length>m?`${f.slice(0,m-1)}\u2026`:f;return{value:a.path,label:u,...d?{hint:d}:{}}}),s=await su({message:e,options:o,initialUserInput:n,filter:(a,c)=>a.toLowerCase().split(/\s+/).filter(Boolean).every(u=>i.get(c.value).includes(u))});return cn(s)?void 0:s}async function Qe(e,t={}){if(at()||!Pe())return;let n=await uu({message:e,...t.initialValue?{initialValue:t.initialValue}:{},validate:r=>t.optional||r?.trim()?void 0:"Enter a value."});return cn(n)?void 0:(n??"").trim()}function du(e,t=3){let n=process.stdout,r=`Opening browser in ${t}s`,i=0,o=()=>n.write(`\r\x1B[2K${Be.magenta(pu[i])} ${r}`),s=()=>n.write("\x1B[?25h");n.write(`${Be.gray(ne)}
|
|
78
|
+
\x1B[?25l`),o(),process.once("exit",s);let a=setInterval(()=>{i=(i+1)%pu.length,o()},80),c=t,u=setInterval(()=>{if(c-=1,c>0){r=`Opening browser in ${c}s`;return}clearInterval(u),e(),r="Waiting for save in browser"},1e3);return l=>{clearInterval(a),clearInterval(u),process.off("exit",s),n.write(l?`\r\x1B[2K${Be.green(hi)} ${l}
|
|
79
|
+
`:"\r\x1B[2K\x1B[1A\r\x1B[2K"),s()}}var pu,rm,im,De=G(()=>{"use strict";lu();Gr();Ve();Ge();je();rn();pu=["\u25D2","\u25D0","\u25D3","\u25D1"],rm=/\{\{([A-Za-z][A-Za-z0-9-]*)\}\}/g;im=24});import{readFileSync as om}from"node:fs";import{parseArgs as sm}from"node:util";function mu(e){return e.kind==="project"?`project:${e.name}`:e.kind}function gu(e){return e.kind==="shared"?"--shared":e.kind==="repository"?"--repo":`--project ${Z(e.name)}`}function Uo(e,t){return{target:e,label:an(e),...t?{hint:t}:{}}}function yu(e){return Uo({kind:"project",name:e.name},Ie(e))}function cm(e){return e.split(",").map(t=>t.trim()).filter(Boolean)}function vu(e){return or.includes(e)}function cr(e){return e instanceof Error?e.message:String(e)}var am,wu,ku=G(()=>{"use strict";Ve();Ro();Ge();je();De();Ze();be();rn();Je();am={prompt:"instructions or other text",bash:"bash script",node:"Node.js script",tsx:"TypeScript script",bun:"Bun script"};wu={args:{agent:{description:"Use plain, noninteractive agent output",type:"boolean"},path:{description:"Dotted token path, such as conventions.commit.default",type:"positional",required:!1},type:{description:`Token type: ${or.join(", ")}`,type:"string"},content:{description:"Token content or a file path; - reads standard input",type:"string"},description:{description:"Description for discovery",type:"string"},tag:{description:"Tag for discovery (repeatable)",type:"string"},shared:{description:"Add the token to the shared tokens",type:"boolean"},repo:{description:"Add the token to the repository configuration",type:"boolean"},project:{description:"Add the token to this registered project",type:"string"}},meta:{description:"Add a token to shared or project configuration",name:"add"},async run({rawArgs:e}){try{let{values:n,positionals:r}=sm({args:e,allowPositionals:!0,options:{agent:{type:"boolean"},type:{type:"string"},content:{type:"string"},description:{type:"string"},tag:{type:"string",multiple:!0},shared:{type:"boolean"},repo:{type:"boolean"},project:{type:"string"}}}),i=n.agent===!0||!!fe(),o=!i&&Pe(),s=process.cwd();if([n.shared,n.repo,n.project!==void 0].filter(Boolean).length>1)throw new Error("Choose one of --shared, --repo or --project.");let a=se({cwd:s}),c=ye({cwd:s,loader:a}),u=[Uo({kind:"shared"},J("woof.config.json")),..."project"in c&&c.project?[c.project.kind==="repository"?Uo({kind:"repository"},c.checkoutRoot):yu(c.project)]:(c.selection==="ambiguous"?c.candidates:$t(c.root,a)).map(yu)],l=n.shared?{kind:"shared"}:n.repo?{kind:"repository"}:n.project!==void 0?{kind:"project",name:n.project}:u.length===1?{kind:"shared"}:void 0,p=r[0],f=n.type,m=n.content==="-"?om(0,"utf8").trimEnd():n.content,d=n.description?.trim()||void 0,h=n.tag??[];if(!o){let S=[...p===void 0?["path"]:[],...f===void 0?["type"]:[],...m===void 0?["content"]:[],...l===void 0?["target"]:[]];if(S.length){let C=we(c),T=[...new Set([...C.rootNamespaces,...C.projectNamespaces])].sort().join(`
|
|
80
|
+
`)||"none",R=u.map(x=>`${gu(x.target)} ${x.label}${x.hint?`: ${x.hint}`:""}`).join(`
|
|
81
|
+
`),$=["woof add",p===void 0?"PATH":Z(p),"--type",f??"TYPE",l?gu(l):"TARGET","--description",d===void 0?"DESCRIPTION":Z(d),...h.length?h.flatMap(x=>["--tag",Z(x)]):["--tag","TAG"],`--content -${i?" --agent":""} <<'WOOF'
|
|
82
|
+
CONTENT
|
|
83
|
+
WOOF`].join(" ");He({summary:`woof needs more input to add a token: ${S.join(", ")}.`,details:`${$}
|
|
84
|
+
|
|
85
|
+
Targets:
|
|
86
|
+
${R}
|
|
87
|
+
|
|
88
|
+
Existing namespaces:
|
|
89
|
+
${T}`,recovery:"Retry with the complete command."},{template:"add-draft",values:{missing:S.join(", "),namespaces:T,targets:R,command:$}}),process.exitCode=1;return}let g=[];vu(f)||g.push(`The type must be one of: ${or.join(", ")}.`);let E;try{To(p)}catch(C){g.push(cr(C))}try{E=Co(m,{cwd:s,target:l,path:p})}catch(C){g.push(cr(C))}if(!g.length)try{ri({target:l,path:p,type:f,content:E,description:d,tags:h},s)}catch(C){g.push(cr(C))}if(g.length)throw new Error(g.join(`
|
|
90
|
+
`));return await t({target:l,path:p,type:f,content:E,description:d,tags:h})}let y=()=>ae("Add cancelled. Nothing was changed."),v=S=>he({summary:cr(S)},null);if(!l){let S=await ke({message:"Where should the token live?",options:u.map(g=>({value:mu(g.target),label:g.label,...g.hint?{hint:g.hint}:{}}))});if(!S)return y();l=u.find(g=>mu(g.target)===S).target}for(;;){if(p===void 0&&(p=await Qe(`Token path ${Oe("(e.g.")} ${I("conventions.commit.default")}${Oe(")")}`),p===void 0))return y();try{ni({target:l,path:p,value:""},s);break}catch(S){v(S),p=void 0}}if(f===void 0||!vu(f)){let S=await ke({message:"Token type",options:or.map(g=>({value:g,label:g,hint:am[g]}))});if(!S)return y();f=S}let w=f,A;for(;;){if(m===void 0&&(m=await hu(`Content ${Ne("paste text or a file path")}`),m===void 0))return y();try{A=Co(m,{cwd:s,target:l,path:p}),ri({target:l,path:p,type:w,content:A,description:void 0,tags:[]},s);break}catch(S){v(S),m=void 0}}if(n.description===void 0){let S=await Qe(`Description ${Ne("optional")}`,{optional:!0});if(S===void 0)return y();d=S||void 0}if(!h.length){let S=await Qe(`Tags ${Ne("comma separated - optional")}`,{optional:!0});if(S===void 0)return y();h=cm(S)}await t({target:l,path:p,type:w,content:A,description:d,tags:h})}catch(n){let r=cr(n);he({summary:"woof could not add the token.",details:r},{template:"add-error",values:{details:r}}),process.exitCode=1}async function t(n){let{file:r,overrides:i}=await jc(n,process.cwd()),o=n.content.copy?`${n.content.exec} (copied from ${n.content.file})`:n.content.file?n.content.exec:"inline",s=n.description??"none",a=n.tags.join(", ")||"none",c=i?"yes":"no",u=n.type==="prompt"&&!n.content.file&&!n.description&&!n.tags.length?ko(n.content.exec):void 0,l=u?`alias of ${u}`:n.type,p=n.target.kind==="project"?` --project ${Z(n.target.name)}`:"",f=`woof get ${Z(n.path)}${p}`;Se({summary:`Added ${I(n.path)}.`,details:Re([["Configuration",r],["Type",l],["Content",o],["Description",s],["Tags",a],["Overrides a shared token",c]]),recovery:`Check it with ${I(f)}.`},{template:"add-result",values:{path:n.path,file:r,type:l,content:o,description:s,tags:a,override:c,command:`${f} --agent`}})}}}});function $u(e,t){if(t.length===0)return 1;if(e.length===0)return 0;let n=e.toLowerCase(),r=t.toLowerCase();if(n===r)return 1;let i=r.length,o=0,s=-1;for(let p=0;p<n.length;p++)if(n[p]===r[o]&&(o++,o===i)){s=p;break}if(s===-1)return 0;let a=s;for(o=i-1;o>=0;o--){for(;n[a]!==r[o];)a--;a--}a++;let c=0,u=0;o=0;for(let p=a;p<=s;p++)n[p]===r[o]?(u++,c+=u,p===0?c+=2:um(e,p)&&(c+=1.5),o++):u=0;let l=i*(i+1)/2+2;return Math.min(1,c/l)*(1-.1*(1-i/e.length))}function um(e,t){if(t===0)return!0;let n=e[t-1],r=e[t];return!!(" _-./".includes(n)||n===n.toLowerCase()&&r===r.toUpperCase()&&r!==r.toLowerCase())}function lm(e,t){let n=0,r=0;if(t&&e.length!==t.length)throw Error("The number of values must be equal to the number of weights");for(let i=0;i<e.length;i++){let o=t?t[i]:1;n+=e[i]*o,r+=o}return n/r}function xu(e,t,n,r){if(typeof t!="string")return e;let i=t.trim().toLowerCase();if(!i)return e;let o=[],s=r?.threshold??.3,a=i.split(/\s+/).filter(Boolean),c=n.map(u=>typeof u=="string"?{name:u,weight:1}:u);return e.forEach(u=>{let l=c.map(p=>{let f=u[p.name];return typeof f=="string"?f.trim():""});if(a.length<=1){let p=lm(l.map(f=>f?$u(f,a[0]):0),c.map(f=>f.weight));p>=s&&o.push({object:u,similarity:p})}else{let p=a.map(m=>{let d=0;for(let h=0;h<l.length;h++)if(l[h]){let y=$u(l[h],m);y>d&&(d=y)}return d}),f=Math.min(...p);f>=s&&o.push({object:u,similarity:f})}}),o.sort((u,l)=>l.similarity-u.similarity),o.map(u=>u.object)}var bu=G(()=>{});function bt(e,t=""){let n=mc(e),r=t.trim();if(!r)return n.sort((o,s)=>+(o.origin==="root")-+(s.origin==="root")||o.path.localeCompare(s.path));let i=n.map(o=>({token:o,path:o.path,description:o.description??"",tags:(o.tags??[]).join(" "),target:o.target??""}));return xu(i,r,["path","description","tags","target"],{threshold:.3}).map(o=>o.token)}var ur=G(()=>{"use strict";bu();Je()});function qo(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function Ou(e){mn=e}function pn(e){let t=[];return n=>{let r=Math.max(0,Math.min(3,n-1)),i=t[r];return i||(i=e(r),t[r]=i),i}}function K(e,t=""){let n=typeof e=="string"?e:e.source,r={replace:(i,o)=>{let s=typeof o=="string"?o:o.source;return s=s.replace($e.caret,"$1"),n=n.replace(i,s),r},getRegex:()=>new RegExp(n,t)};return r}function et(e,t){if(t){if($e.escapeTest.test(e))return e.replace($e.escapeReplace,Cu)}else if($e.escapeTestNoEncode.test(e))return e.replace($e.escapeReplaceNoEncode,Cu);return e}function ug(e){return $e.numericCharacterReference.test(e)?e.replace($e.numericCharacterReferenceOrAmpersand,(t,n,r)=>{if(n===void 0&&r===void 0)return"&";let i=n===void 0?Number.parseInt(r,16):Number.parseInt(n,10);return i===0||i>1114111||i>=55296&&i<=57343?"\uFFFD":i===38?"&":String.fromCodePoint(i)}):e}function Au(e){try{e=encodeURI(e).replace($e.percentDecode,"%")}catch{return null}return e}function Ru(e,t){let n=e.replace($e.findPipe,(o,s,a)=>{let c=!1,u=s;for(;--u>=0&&a[u]==="\\";)c=!c;return c?"|":" |"}),r=n.split($e.splitPipe),i=0;if(r[0].trim()||r.shift(),r.length>0&&!r.at(-1)?.trim()&&r.pop(),t)if(r.length>t)r.splice(t);else for(;r.length<t;)r.push("");for(;i<r.length;i++)r[i]=r[i].trim().replace($e.slashPipe,"|");return r}function qt(e,t,n){let r=e.length;if(r===0)return"";let i=0;for(;i<r;){let o=e.charAt(r-i-1);if(o===t&&!n)i++;else if(o!==t&&n)i++;else break}return e.slice(0,r-i)}function ju(e){let t=e.split(`
|
|
91
|
+
`),n=t.length-1;for(;n>=0&&$e.blankLine.test(t[n]);)n--;return t.length-n<=2?e:t.slice(0,n+1).join(`
|
|
92
|
+
`)}function vi(e){return e.trim().toLowerCase().toUpperCase().toLowerCase()}function Iu(e,t){if(e.indexOf(t[0])===-1&&e.indexOf(t[1])===-1)return-1;let n=0;for(let r=0;r<e.length;r++)if(e[r]==="\\")r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return n>0?-2:-1}function gi(e,t=0){let n=t,r="";for(let i of e)if(i===" "){let o=4-n%4;r+=" ".repeat(o),n+=o}else r+=i,n++;return r}function _u(e,t,n,r,i){let o=t.href,s=t.title||null,a=e[1].replace(i.other.outputLinkReplace,"$1"),c=e[0].charAt(0)==="!",u=r.state.inLink,l=r.state.linkEmitted,p=r.state.inRawBlock;r.state.inLink=!0,r.state.linkEmitted=!1;let f=r.inlineTokens(a),m=r.state.linkEmitted;if(r.state.linkEmitted=l,r.state.inLink=u,!c){if(m){r.state.inRawBlock=p;return}r.state.linkEmitted=!0}return{type:c?"image":"link",raw:n,href:o,title:s,text:a,tokens:f}}function lg(e,t,n){let r=e.match(n.other.indentCodeCompensation);if(r===null)return t;let i=r[1];return t.split(`
|
|
93
|
+
`).map(o=>{let s=o.match(n.other.beginningSpace);if(s===null)return o;let[a]=s;return o.slice(Math.min(a.length,i.length))}).join(`
|
|
94
|
+
`)}function Pu(e,t,n,r){if(!t.includes("<"))return!1;for(let i=0;i<t.length;i++){if(t[i]==="\\"){i++;continue}if(t[i]==="`"){let a=r.inline.code.exec(t.slice(i));if(a){i+=a[0].length-1;continue}}if(t[i]!=="<")continue;let o=e.slice(n+i),s=r.inline.tag.exec(o)||r.inline.autolink.exec(o);if(s){if(s[0].length>t.length-i)return!0;i+=s[0].length-1}}return!1}function fn(e,t){if(Array.isArray(t))for(let n=0;n<t.length;n++)e.push(t[n]);else e.push(t)}function ce(e,t){return dn.parse(e,t)}function pg(...e){return dn.use(...e),ce.defaults=dn.defaults,Ou(ce.defaults),ce}var mn,hn,pm,$e,fm,hm,dm,fr,mm,Ko,Nu,Lu,gm,Zo,ym,Jo,vm,wm,hr,Xo,km,Du,$m,xm,bm,Yo,Eu,Em,Sm,Tm,Cm,Mu,Am,Et,In,dr,Rm,jm,Fu,Im,_m,Pm,zu,Om,Nm,Lm,Dm,Bu,Mm,Fm,zm,Bm,Gm,Um,Hm,Wm,Vm,qm,Km,Zm,Jm,Xm,Ym,Gu,yi,Qm,eg,tg,Su,ng,rg,Tu,ig,og,Qo,sg,Ho,ag,mi,lr,cg,Cu,jn,ft,wi,es,ht,pr,ts,dn,l$,p$,f$,h$,d$,m$,Uu=G(()=>{mn=qo();hn={exec:()=>null};pm=((e="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+e)}catch{return!1}})(),$e={codeRemoveIndent:/^(?: {0,3}\t| {1,4})/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,endingSpaceTabChar:/[ \t]$/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,leadingSpaceTab:/^[ \t]+/,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,blockquoteMarkerWhitespace:/^( {0,3}>)([ \t]+)/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,numericCharacterReference:/&#(?:(\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));/,numericCharacterReferenceOrAmpersand:/&#(?:(\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:pn(e=>new RegExp(`^ {0,${e}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:pn(e=>new RegExp(`^ {0,${e}}((?:-[ ]*){3,}|(?:_[ ]*){3,}|(?:\\*[ ]*){3,})(?:\\n+|$)`)),fencesBeginRegex:pn(e=>new RegExp(`^ {0,${e}}(?:\`\`\`|~~~)`)),headingBeginRegex:pn(e=>new RegExp(`^ {0,${e}}#{1,6}(?:\\s|$)`)),pedanticHeadingBeginRegex:pn(e=>new RegExp(`^ {0,${e}}#`)),htmlBeginRegex:pn(e=>new RegExp(`^ {0,${e}}(?:</?(?:${hr})(?: +|$|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)`,"i")),blockquoteBeginRegex:pn(e=>new RegExp(`^ {0,${e}}>`))},fm=/^(?:[ \t]*(?:\n|$))+/,hm=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,dm=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,fr=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,mm=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Ko=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,Nu=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |fences|blockquote|heading|hr|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Lu=K(Nu).replace(/bull/g,Ko).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/hr/g,/ {0,3}(?:(?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),gm=K(Nu).replace(/bull/g,Ko).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/hr/g,/ {0,3}(?:(?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Zo=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/,ym=/^[^\n]+/,Jo=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,vm=K(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Jo).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),wm=K(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,Ko).getRegex(),hr="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Xo=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,km=K("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n*|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n*|$)|<![A-Z][\\s\\S]*?(?:>[^\\n]*\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>[^\\n]*\\n*|$)|</?(tag)(?:[ \\t]+|\\n|/?>|$)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!(?:script|pre|style|textarea)(?![a-z0-9-]))([a-z][a-z0-9-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</[a-z][a-z0-9-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",Xo).replace("tag",hr).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Du=e=>K(Zo).replace("hr",fr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list",e).replace("html"," {0,3}(?:</?(?:tag)(?: +|\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)").replace("tag",hr).getRegex(),$m=Du(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/),xm=Du(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/),bm=K(/^( {0,3}> ?(?:(?![ \t]*(?:\n|$))(paragraph)|[^\n]*)(?:\n|$))+/).replace("paragraph",xm).getRegex(),Yo={blockquote:bm,code:hm,def:vm,fences:dm,heading:mm,hr:fr,html:km,lheading:Lu,list:wm,newline:fm,paragraph:$m,table:hn,text:ym},Eu=K("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",fr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html"," {0,3}(?:</?(?:tag)(?: +|\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)").replace("tag",hr).getRegex(),Em={...Yo,lheading:gm,table:Eu,paragraph:K(Zo).replace("hr",fr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Eu).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html"," {0,3}(?:</?(?:tag)(?: +|\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)").replace("tag",hr).getRegex()},Sm={...Yo,html:K(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Xo).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:hn,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:K(Zo).replace("hr",fr).replace("heading",` *#{1,6} *[^
|
|
95
|
+
]`).replace("lheading",Lu).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Tm=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Cm=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Mu=/^( {2,}|\\)\n(?!\s*$)[ \t]*/,Am=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,Et=/[\p{P}\p{S}]/u,In=/[\s\p{P}\p{S}]/u,dr=/[^\s\p{P}\p{S}]/u,Rm=K(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,In).getRegex(),jm=/[\p{Pi}\p{Ps}"']/u,Fu=/(?!~)[\p{P}\p{S}]/u,Im=/(?!~)[\s\p{P}\p{S}]/u,_m=/(?:[^\s\p{P}\p{S}]|~)/u,Pm=K(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",pm?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),zu=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,Om=K(zu,"u").replace(/punct/g,Et).getRegex(),Nm=K(zu,"u").replace(/punct/g,Fu).getRegex(),Lm=/^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/,Dm=K(Lm,"u").replace(/openQuote/g,jm).replace(/punct/g,Et).getRegex(),Bu="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Mm=K(Bu,"gu").replace(/notPunctSpace/g,dr).replace(/punctSpace/g,In).replace(/punct/g,Et).getRegex(),Fm=K(Bu,"gu").replace(/notPunctSpace/g,_m).replace(/punctSpace/g,Im).replace(/punct/g,Fu).getRegex(),zm="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)",Bm=K(zm,"gu").replace(/notPunctSpace/g,dr).replace(/punctSpace/g,In).replace(/punct/g,Et).getRegex(),Gm=K("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,dr).replace(/punctSpace/g,In).replace(/punct/g,Et).getRegex(),Um="^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)",Hm=K(Um,"gu").replace(/notPunctSpace/g,dr).replace(/punctSpace/g,In).replace(/punct/g,Et).getRegex(),Wm=K(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,Et).getRegex(),Vm="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",qm=K(Vm,"gu").replace(/notPunctSpace/g,dr).replace(/punctSpace/g,In).replace(/punct/g,Et).getRegex(),Km=K(/\\(punct)/,"gu").replace(/punct/g,Et).getRegex(),Zm=K(/(`+)(?:[^`]|[^`][\s\S]*?[^`])\1(?!`)|`+|\\(punct)/,"gu").replace(/punct/g,Et).getRegex(),Jm=K(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Xm=K(Xo).replace("(?:-->|$)","-->").getRegex(),Ym=K("^comment|^</[a-zA-Z][a-zA-Z0-9-]*\\s*>|^<[a-zA-Z][a-zA-Z0-9-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",Xm).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Gu=/\[(?:\\[\s\S]|[^\[\]\\])*\]/,yi=K(/(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/).replace("brackets",Gu).getRegex(),Qm=K(/^!?\[(label)\]\([ \t\n]*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?[ \t\n]*\)/).replace("label",yi).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),eg=K(/^!?\[(label)\]\[(ref)\]/).replace("label",yi).replace("ref",Jo).getRegex(),tg=K(/^!?\[(ref)\](?:\[\])?/).replace("ref",Jo).getRegex(),Su=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\]){1,999}/,ng=K(/(?:[^\[\]\\`]*(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\]))){0,999}?[^\[\]\\`]*?/).replace("brackets",Gu).getRegex(),rg=K("reflink|nolink(?!\\()","g").replace("reflink",K(/^!?\[(label)\]\[(ref)\]/).replace("label",ng).replace("ref",Su).getRegex()).replace("nolink",K(/^!?\[(ref)\](?:\[\])?/).replace("ref",Su).getRegex()).getRegex(),Tu=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,ig=/[A-Za-z0-9._+-]+@[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/,og=K(/(?:mailto:email|xmpp:email(?:\/[A-Za-z0-9@.]+)?)/).replace(/email/g,ig).getRegex(),Qo={_backpedal:hn,anyPunctuation:Km,anyPunctuationOutsideCode:Zm,autolink:Jm,blockSkip:Pm,br:Mu,code:Cm,del:hn,delLDelim:hn,delRDelim:hn,emStrongLDelim:Om,emStrongRDelimAst:Mm,emStrongRDelimUnd:Gm,escape:Tm,link:Qm,nolink:tg,punctuation:Rm,reflink:eg,reflinkSearch:rg,tag:Ym,text:Am,url:hn},sg={...Qo,emStrongLDelim:Dm,emStrongRDelimAst:Bm,emStrongRDelimUnd:Hm,link:K(/^!?\[(label)\]\((.*?)\)/).replace("label",yi).getRegex(),reflink:K(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",yi).getRegex()},Ho={...Qo,emStrongRDelimAst:Fm,emStrongLDelim:Nm,delLDelim:Wm,delRDelim:qm,url:K(/^emailProtocol|^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("emailProtocol",og).replace("protocol",Tu).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:K(/^(?:[^a-zA-Z0-9](?=emailProtocol)|(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9](?=emailProtocol)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))))/).replace("protocol",Tu).replace(/emailProtocol/g,/(?:mailto|xmpp):/).getRegex()},ag={...Ho,br:K(Mu).replace("{2,}","*").getRegex(),text:K(Ho.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},mi={normal:Yo,gfm:Em,pedantic:Sm},lr={normal:Qo,gfm:Ho,breaks:ag,pedantic:sg},cg={"&":"&","<":"<",">":">",'"':""","'":"'"},Cu=e=>cg[e];jn=class{options;rules;lexer;constructor(e){this.options=e||mn}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=this.options.pedantic?t[0]:ju(t[0]),r=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:r}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=lg(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=qt(n,"#");(this.options.pedantic||!r||this.rules.other.endingSpaceTabChar.test(r))&&(n=r.trim())}return{type:"heading",raw:qt(t[0],`
|
|
96
|
+
`),depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:qt(t[0],`
|
|
97
|
+
`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=qt(t[0],`
|
|
98
|
+
`).split(`
|
|
99
|
+
`),r="",i="",o=[];for(;n.length>0;){let s=!1,a=[],c;for(c=0;c<n.length;c++)if(this.rules.other.blockquoteStart.test(n[c]))a.push(n[c]),s=!0;else if(!s)a.push(n[c]);else break;n=n.slice(c);let u=a.join(`
|
|
100
|
+
`),l=u.replace(this.rules.other.blockquoteMarkerWhitespace,(m,d,h)=>d+gi(h,d.length)).replace(this.rules.other.blockquoteSetextReplace,`
|
|
101
|
+
$1`).replace(this.rules.other.blockquoteSetextReplace2,"");r=r?`${r}
|
|
102
|
+
${u}`:u,i=i?`${i}
|
|
103
|
+
${l}`:l;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(l,o,!0),this.lexer.state.top=p,n.length===0)break;let f=o.at(-1);if(f?.type==="code"||f?.type==="heading"||f?.type==="hr"||f?.type==="html")break;if(f?.type==="blockquote"){let m=f,d=n.join(`
|
|
104
|
+
`),h=m.raw+`
|
|
105
|
+
`+d.replace(this.rules.other.blockquoteSetextReplace2,""),y=this.blockquote(h);o[o.length-1]=y;let v=h.substring(y.raw.length).replace(/^\n/,""),w=v?v.split(`
|
|
106
|
+
`).length:0,A=w?n.slice(0,-w):n;A.length>0&&(r=`${r}
|
|
107
|
+
${A.join(`
|
|
108
|
+
`)}`),i=i.substring(0,i.length-m.text.length)+y.text;break}else if(f?.type==="list"){let m=f,d=m.raw+`
|
|
109
|
+
`+n.join(`
|
|
110
|
+
`),h=this.list(d);o[o.length-1]=h;let y=h.raw.length>m.raw.length?d.slice(m.raw.length+1,h.raw.length).split(`
|
|
111
|
+
`).length:0;if(y>0){let v=n.slice(0,y).join(`
|
|
112
|
+
`);r=`${r}
|
|
113
|
+
${v}`,i=`${i}
|
|
114
|
+
${v}`}n=n.slice(y);continue}}return{type:"blockquote",raw:r,tokens:o,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=e,r=()=>n.length-e.length,i=t[1].trim(),o=i.length>1,s={type:"list",raw:"",ordered:o,start:o?+i.slice(0,-1):"",loose:!1,items:[]};i=o?`\\d{1,9}\\${i.slice(-1)}`:`\\${i}`,this.options.pedantic&&(i=o?i:"[*+-]");let a=this.rules.other.listItemRegex(i),c=!1;for(;e;){let l=!1,p="";if(!(t=a.exec(e))||this.rules.block.hr.test(e))break;let f=r();e=e.substring(t[0].length);let m=t[2].split(`
|
|
115
|
+
`,1)[0],d=t[1].length,h=this.options.pedantic?gi(m,d):m.replace(this.rules.other.leadingSpaceTab,S=>gi(S,d)),y=e.split(`
|
|
116
|
+
`,1)[0],v=!h.trim(),w=0;if(this.options.pedantic?(w=2,p=h.trimStart()):v?w=d+1:(w=h.search(this.rules.other.nonSpaceChar),w=w>4?1:w,p=h.slice(w),w+=d),v&&this.rules.other.blankLine.test(y)&&(e=e.substring(y.length+1),l=!0),!l){let S=this.rules.other.nextBulletRegex(w),g=this.rules.other.hrRegex(w),E=this.rules.other.fencesBeginRegex(w),C=this.options.pedantic?this.rules.other.pedanticHeadingBeginRegex(w):this.rules.other.headingBeginRegex(w),T=this.rules.other.htmlBeginRegex(w),R=this.rules.other.blockquoteBeginRegex(w);for(;e;){let $=e.split(`
|
|
117
|
+
`,1)[0],x;if(y=$,this.options.pedantic?(y=y.replace(this.rules.other.listReplaceNesting," "),x=y):x=y.replace(this.rules.other.leadingSpaceTab,j=>gi(j)),E.test(y)||C.test(y)||T.test(y)||R.test(y)||S.test(y)||g.test(y))break;if(x.search(this.rules.other.nonSpaceChar)>=w||!y.trim())p+=`
|
|
118
|
+
`+x.slice(w);else{if(v||h.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||E.test(h)||C.test(h)||g.test(h))break;let j=!this.options.pedantic&&/^ {0,3}(?:=+|-+) *$/.test(y)&&this.rules.block.lheading.test(`${h}
|
|
119
|
+
${y}`)?` ${x.replace(/^ {0,3}/,"")}`:y;p+=`
|
|
120
|
+
`+j}v=!y.trim(),e=e.substring($.length+1),h=x.slice(w)}}let A=n.slice(f,r());s.loose||(c?s.loose=!0:this.rules.other.doubleBlankLine.test(A)&&(c=!0)),s.items.push({type:"list_item",raw:A,task:!!this.options.gfm&&this.rules.other.listIsTask.test(p),loose:!1,text:p,tokens:[]})}let u=s.items.at(-1);if(u)u.raw=u.raw.trimEnd(),u.text=u.text.trimEnd();else return;s.raw=n.slice(0,r()).trimEnd();for(let l of s.items)if(this.lexer.state.top=!1,l.tokens=this.lexer.blockTokens(l.text,[]),!s.loose){let p=l.tokens.filter(m=>m.type==="space"),f=p.length>0&&p.some(m=>this.rules.other.anyLine.test(m.raw));s.loose=f}for(let l of s.items){let p=l.tokens[0];if(l.task&&(p?.type==="text"||p?.type==="paragraph")){l.text=l.text.replace(this.rules.other.listReplaceTask,""),p.raw=p.raw.replace(this.rules.other.listReplaceTask,""),p.text=p.text.replace(this.rules.other.listReplaceTask,"");for(let m=this.lexer.inlineQueue.length-1;m>=0;m--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[m].src)){this.lexer.inlineQueue[m].src=this.lexer.inlineQueue[m].src.replace(this.rules.other.listReplaceTask,"");break}let f=this.rules.other.listTaskCheckbox.exec(l.raw);if(f){let m={type:"checkbox",raw:f[0]+" ",checked:f[0]!=="[ ]"};l.checked=m.checked,s.loose?l.tokens[0]&&["paragraph","text"].includes(l.tokens[0].type)&&"tokens"in l.tokens[0]&&l.tokens[0].tokens?(l.tokens[0].raw=m.raw+l.tokens[0].raw,l.tokens[0].text=m.raw+l.tokens[0].text,l.tokens[0].tokens.unshift(m)):l.tokens.unshift({type:"paragraph",raw:m.raw,text:m.raw,tokens:[m]}):l.tokens.unshift(m)}}else l.task&&(l.task=!1)}if(s.loose)for(let l of s.items){l.loose=!0;for(let p of l.tokens)p.type==="text"&&(p.type="paragraph")}return s}}html(e){let t=this.rules.block.html.exec(e);if(t){let n=ju(t[0]);return{type:"html",block:!0,raw:n,pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:n}}}def(e){let t=this.rules.block.def.exec(e);if(t){if(!this.rules.other.startAngleBracket.test(t[2])&&Iu(t[2],"()")!==-1)return;let n=vi(t[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:n,raw:qt(t[0],`
|
|
121
|
+
`),href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=Ru(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split(`
|
|
122
|
+
`):[],o={type:"table",raw:qt(t[0],`
|
|
123
|
+
`),header:[],align:[],rows:[]};if(n.length===r.length){for(let s of r)this.rules.other.tableAlignRight.test(s)?o.align.push("right"):this.rules.other.tableAlignCenter.test(s)?o.align.push("center"):this.rules.other.tableAlignLeft.test(s)?o.align.push("left"):o.align.push(null);for(let s=0;s<n.length;s++)o.header.push({text:n[s],tokens:this.lexer.inline(n[s]),header:!0,align:o.align[s]});for(let s of i)o.rows.push(Ru(s,o.header.length).map((a,c)=>({text:a,tokens:this.lexer.inline(a),header:!1,align:o.align[c]})));return o}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let n=t[1].trim();return{type:"heading",raw:qt(t[0],`
|
|
124
|
+
`),depth:t[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`
|
|
125
|
+
`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){if(this.lexer.state.linkParenPossible===!1)return;let t=this.rules.inline.link.exec(e);if(t){let n=t[0].charAt(0)==="!"?2:1;if(!this.options.pedantic&&Pu(e,t[1],n,this.rules))return;let r=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(r)){if(!this.rules.other.endAngleBracket.test(r))return;let s=qt(r.slice(0,-1),"\\");if((r.length-s.length)%2===0)return}else{let s=Iu(t[2],"()");if(s===-2)return;if(s>-1){let a=(t[0].indexOf("!")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,a).trim(),t[3]=""}}let i=t[2],o="";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(i);s&&(i=s[1],o=s[3])}else o=t[3]?t[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(r)?i=i.slice(1):i=i.slice(1,-1)),_u(t,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:o&&o.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=n[0].charAt(0)==="!"?2:1;if(!this.options.pedantic&&Pu(e,n[1],r,this.rules))return;let i=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),o=t[vi(i)];if(!o){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return _u(n,o,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||!r[1]&&!r[2]&&!r[3]&&!r[4])return;let i=r[0][0],o=n===i,s=t.length-e.length,a=s;for(;!this.options.pedantic&&a>0&&t[a-1]===i;)a--;let c=[...t.slice(Math.max(0,a-2),a)].at(-1)??"",u=c==="*"||c==="_"||!!this.rules.inline.punctuation.exec(c);a<s&&(n=c);let l=a<s?u:!!this.rules.inline.punctuation.exec(n);if(r[4]&&n.match(this.rules.other.unicodeAlphaNumeric))return;let p=r[1]||r[3]||"";if(!p||!n||l){let f=[...r[0]].length-1,m,d,h=f,y=0,v=s-a+f,w=!this.options.pedantic&&!!c.trim()&&(!!p||i==="*"&&!u),A=i==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(A.lastIndex=0,t=t.slice(-1*e.length+f);(r=A.exec(t))!==null;){if(m=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!m)continue;if(d=[...m].length,r[3]||r[4]){h+=d;continue}else if(r[5]||r[6]||w){if(o&&(r[5]||r[6]))break;if(v%3&&!((v+d)%3)){y+=d;continue}}if(h-=d,h>0)continue;d=Math.min(d,d+h+y);let S=[...r[0]][0].length,g=e.slice(0,f+r.index+S+d);if(Math.min(f,d)%2){let C=g.slice(1,-1);return{type:"em",raw:g,text:C,tokens:this.lexer.inlineTokens(C)}}let E=g.slice(2,-2);return{type:"strong",raw:g,text:E,tokens:this.lexer.inlineTokens(E)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,n=""){let r=this.rules.inline.delLDelim.exec(e);if(r&&(!r[1]||!n||this.rules.inline.punctuation.exec(n))){let i=[...r[0]].length-1,o,s,a=i,c=this.rules.inline.delRDelim;for(c.lastIndex=0,t=t.slice(-1*e.length+i);(r=c.exec(t))!==null;){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o||(s=[...o].length,s!==i))continue;if(r[3]||r[4]){a+=s;continue}if(a-=s,a>0)continue;s=Math.min(s,s+a);let u=[...r[0]][0].length,l=e.slice(0,i+r.index+u+s),p=l.slice(i,-i);return{type:"del",raw:l,text:p,tokens:this.lexer.inlineTokens(p)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]==="@"?(n=t[1],r="mailto:"+n):(n=t[1],r=n),{type:"link",raw:t[0],text:n,href:r,autolink:!0,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]==="@")n=t[0],r="mailto:"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(i!==t[0]);n=t[0],t[1]==="www."?r="http://"+t[0]:r=t[0]}return{type:"link",raw:t[0],text:n,href:r,autolink:!0,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:n?t[0]:ug(t[0]),escaped:n}}}},ft=class Wo{tokens;options;state;inlineQueue;tokenizer;constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||mn,this.options.tokenizer=this.options.tokenizer||new jn,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,linkEmitted:!1,linkParenPossible:!0,top:!0};let n={other:$e,block:mi.normal,inline:lr.normal};this.options.pedantic?(n.block=mi.pedantic,n.inline=lr.pedantic):this.options.gfm&&(n.block=mi.gfm,this.options.breaks?n.inline=lr.breaks:n.inline=lr.gfm),this.tokenizer.rules=n}static get rules(){return{block:mi,inline:lr}}static lex(t,n){return new Wo(n).lex(t)}static lexInline(t,n){return new Wo(n).inlineTokens(t)}lex(t){t=t.replace($e.carriageReturn,`
|
|
126
|
+
`),this.blockTokens(t,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){let r=this.inlineQueue[n];this.state.inRawBlock=!1,this.inlineTokens(r.src,r.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(t,n=[],r=!1){this.tokenizer.lexer=this,this.options.pedantic&&(t=t.replace($e.tabCharGlobal," ").replace($e.spaceLine,""));let i=1/0;for(;t;){if(t.length<i)i=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}let o;if(this.options.extensions?.block?.some(a=>(o=a.call({lexer:this},t,n))?(t=t.substring(o.raw.length),n.push(o),!0):!1))continue;if(o=this.tokenizer.space(t)){t=t.substring(o.raw.length);let a=n.at(-1);o.raw.length===1&&a!==void 0?a.raw+=`
|
|
127
|
+
`:n.push(o);continue}if(o=this.tokenizer.code(t)){t=t.substring(o.raw.length);let a=n.at(-1);a?.type==="paragraph"||a?.type==="text"?(a.raw+=(a.raw.endsWith(`
|
|
128
|
+
`)?"":`
|
|
129
|
+
`)+o.raw,a.text+=`
|
|
130
|
+
`+o.text,this.inlineQueue.at(-1).src=a.text):n.push(o);continue}if(o=this.tokenizer.fences(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.heading(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.hr(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.blockquote(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.list(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.html(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.def(t)){t=t.substring(o.raw.length);let a=n.at(-1);a?.type==="paragraph"||a?.type==="text"?(a.raw+=(a.raw.endsWith(`
|
|
131
|
+
`)?"":`
|
|
132
|
+
`)+o.raw,a.text+=`
|
|
133
|
+
`+o.raw,this.inlineQueue.at(-1).src=a.text):(this.tokens.links[o.tag]||(this.tokens.links[o.tag]={href:o.href,title:o.title}),n.push(o));continue}if(o=this.tokenizer.table(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.lheading(t)){t=t.substring(o.raw.length),n.push(o);continue}let s=t;if(this.options.extensions?.startBlock){let a=1/0,c=t.slice(1),u;this.options.extensions.startBlock.forEach(l=>{u=l.call({lexer:this},c),typeof u=="number"&&u>=0&&(a=Math.min(a,u))}),a<1/0&&a>=0&&(s=t.substring(0,a+1))}if(this.state.top&&(o=this.tokenizer.paragraph(s))){let a=n.at(-1);r&&a?.type==="paragraph"?(a.raw+=(a.raw.endsWith(`
|
|
134
|
+
`)?"":`
|
|
135
|
+
`)+o.raw,a.text+=`
|
|
136
|
+
`+o.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):n.push(o),r=s.length!==t.length,t=t.substring(o.raw.length);continue}if(o=this.tokenizer.text(t)){t=t.substring(o.raw.length);let a=n.at(-1);a?.type==="text"?(a.raw+=(a.raw.endsWith(`
|
|
137
|
+
`)?"":`
|
|
138
|
+
`)+o.raw,a.text+=`
|
|
139
|
+
`+o.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):n.push(o);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}linkInText(t){if(!t.includes("["))return!1;let n=this.tokenizer.rules.inline.link;for(let r of t.matchAll(this.tokenizer.rules.inline.blockSkip))if(n.test(r[0])&&t.charAt(r.index-1)!=="!")return!0;for(let r of t.matchAll(this.tokenizer.rules.inline.reflinkSearch)){let i=r[0],o=i.lastIndexOf("[");if(!(i.charAt(0)==="!"||!Object.hasOwn(this.tokens.links,vi(i.slice(o+1,-1))))&&!(o>1&&this.linkInText(i.slice(1,o-1))))return!0}return!1}inlineTokens(t,n=[]){this.tokenizer.lexer=this;let r=this.state.linkParenPossible;this.state.linkParenPossible=r&&t.includes(")");try{return this.#e(t,n)}finally{this.state.linkParenPossible=r}}#e(t,n){let r=t.includes("*")||t.includes("_")||t.includes("~")||this.options.hooks?.emStrongMask||this.tokenizer.emStrong!==jn.prototype.emStrong||this.tokenizer.del!==jn.prototype.del?this.#t(t):t,i=!1,o="",s=1/0;for(;t;){if(t.length<s)s=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}i||(o=""),i=!1;let a;if(this.options.extensions?.inline?.some(u=>(a=u.call({lexer:this},t,n))?(t=t.substring(a.raw.length),n.push(a),!0):!1))continue;if(a=this.tokenizer.escape(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.tag(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.link(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(a.raw.length);let u=n.at(-1);a.type==="text"&&u?.type==="text"?(u.raw+=a.raw,u.text+=a.text):n.push(a);continue}if(a=this.tokenizer.emStrong(t,r,o)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.codespan(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.br(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.del(t,r,o)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.autolink(t)){t=t.substring(a.raw.length),n.push(a);continue}if(!this.state.inLink&&(a=this.tokenizer.url(t))){t=t.substring(a.raw.length),n.push(a);continue}let c=t;if(this.options.extensions?.startInline){let u=1/0,l=t.slice(1),p;this.options.extensions.startInline.forEach(f=>{p=f.call({lexer:this},l),typeof p=="number"&&p>=0&&(u=Math.min(u,p))}),u<1/0&&u>=0&&(c=t.substring(0,u+1))}if(a=this.tokenizer.inlineText(c)){t=t.substring(a.raw.length),a.raw.slice(-1)!=="_"&&(o=a.raw.slice(-1)),i=!0;let u=n.at(-1);u?.type==="text"?(u.raw+=a.raw,u.text+=a.text):n.push(a);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return n}#t(t){let n=t;if(this.tokens.links&&t.includes("[")){let r=this.tokenizer.rules.inline.reflinkSearch,i=o=>{let s=o.lastIndexOf("[");if(!Object.hasOwn(this.tokens.links,vi(o.slice(s+1,-1))))return o;if(s>1&&o.charAt(0)!=="!"){let a=o.slice(1,s-1);if(this.linkInText(a))return"["+a.replace(r,i)+"]["+"a".repeat(o.length-s-2)+"]"}return"["+"a".repeat(o.length-2)+"]"};n=n.replace(r,i)}return n=n.replace(this.tokenizer.rules.inline.anyPunctuationOutsideCode,(r,i,o)=>o?"+".repeat(r.length):i?i+r.slice(i.length,-i.length).replace(/`/g,"+")+i:r),n=n.replace(this.tokenizer.rules.inline.blockSkip,(r,i,o)=>{let s=o?o.length:0;return r.slice(0,s)+"["+"a".repeat(r.length-s-2)+"]"}),n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n,n}infiniteLoopError(t){let n="Infinite loop on byte: "+t;if(this.options.silent)console.error(n);else throw new Error(n)}},wi=class{options;parser;constructor(e){this.options=e||mn}space(e){return""}code({text:e,lang:t,escaped:n}){let r=(t||"").match($e.notSpaceStart)?.[0],i=e?e.replace($e.endingNewline,"")+`
|
|
140
|
+
`:"";return r?'<pre><code class="language-'+et(r)+'">'+(n?i:et(i,!0))+`</code></pre>
|
|
141
|
+
`:"<pre><code>"+(n?i:et(i,!0))+`</code></pre>
|
|
142
|
+
`}blockquote({tokens:e}){return`<blockquote>
|
|
143
|
+
${this.parser.parse(e)}</blockquote>
|
|
144
|
+
`}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>
|
|
145
|
+
`}hr(e){return`<hr>
|
|
146
|
+
`}list(e){let t=e.ordered,n=e.start,r="";for(let s=0;s<e.items.length;s++){let a=e.items[s];r+=this.listitem(a)}let i=t?"ol":"ul",o=t&&n!==1?' start="'+n+'"':"";return"<"+i+o+`>
|
|
147
|
+
`+r+"</"+i+`>
|
|
148
|
+
`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>
|
|
149
|
+
`}checkbox({checked:e}){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"> '}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
|
|
150
|
+
`}table(e){let t="",n="";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r="";for(let i=0;i<e.rows.length;i++){let o=e.rows[i];n="";for(let s=0;s<o.length;s++)n+=this.tablecell(o[s]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>
|
|
151
|
+
<thead>
|
|
152
|
+
`+t+`</thead>
|
|
153
|
+
`+r+`</table>
|
|
154
|
+
`}tablerow({text:e}){return`<tr>
|
|
155
|
+
${e}</tr>
|
|
156
|
+
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
|
|
157
|
+
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${et(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,text:n,tokens:r,autolink:i}){let o=i?et(n,!0):this.parser.parseInline(r),s=Au(e);if(s===null)return o;e=et(s,i);let a='<a href="'+e+'"';return t&&(a+=' title="'+et(t)+'"'),a+=">"+o+"</a>",a}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=Au(e);if(i===null)return et(n);e=i;let o=`<img src="${et(e)}" alt="${et(n)}"`;return t&&(o+=` title="${et(t)}"`),o+=">",o}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:et(e.text)}},es=class{parser;strong({text:e,tokens:t}){return t?this.parser.parseInline(t,this):e}em({text:e,tokens:t}){return t?this.parser.parseInline(t,this):e}codespan({text:e}){return e}del({text:e,tokens:t}){return t?this.parser.parseInline(t,this):e}html({text:e}){return e}text({text:e}){return e}link({text:e,tokens:t}){return t?this.parser.parseInline(t,this):e}image({text:e,tokens:t}){return t?this.parser.parseInline(t,this):e}br(){return""}checkbox({raw:e}){return e}},ht=class Vo{options;renderer;textRenderer;constructor(t){this.options=t||mn,this.options.renderer=this.options.renderer||new wi,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new es,this.textRenderer.parser=this}static parse(t,n){return new Vo(n).parse(t)}static parseInline(t,n){return new Vo(n).parseInline(t)}parse(t){this.renderer.parser=this;let n="";for(let r=0;r<t.length;r++){let i=t[r];if(this.options.extensions?.renderers?.[i.type]){let s=i,a=this.options.extensions.renderers[s.type].call({parser:this},s);if(a!==!1||!["space","hr","heading","code","table","blockquote","list","checkbox","html","def","paragraph","text"].includes(s.type)){n+=a||"";continue}}let o=i;switch(o.type){case"space":{n+=this.renderer.space(o);break}case"hr":{n+=this.renderer.hr(o);break}case"heading":{n+=this.renderer.heading(o);break}case"code":{n+=this.renderer.code(o);break}case"table":{n+=this.renderer.table(o);break}case"blockquote":{n+=this.renderer.blockquote(o);break}case"list":{n+=this.renderer.list(o);break}case"checkbox":{n+=this.renderer.checkbox(o);break}case"html":{n+=this.renderer.html(o);break}case"def":{n+=this.renderer.def(o);break}case"paragraph":{n+=this.renderer.paragraph(o);break}case"text":{n+=this.renderer.text(o);break}default:{let s='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(s),"";throw new Error(s)}}}return n}parseInline(t,n=this.renderer){this.renderer.parser=this;let r="";for(let i=0;i<t.length;i++){let o=t[i];if(this.options.extensions?.renderers?.[o.type]){let a=this.options.extensions.renderers[o.type].call({parser:this},o);if(a!==!1||!["escape","html","link","image","checkbox","strong","em","codespan","br","del","text"].includes(o.type)){r+=a||"";continue}}let s=o;switch(s.type){case"escape":{r+=n.text(s);break}case"html":{r+=n.html(s);break}case"link":{r+=n.link(s);break}case"image":{r+=n.image(s);break}case"checkbox":{r+=n.checkbox(s);break}case"strong":{r+=n.strong(s);break}case"em":{r+=n.em(s);break}case"codespan":{r+=n.codespan(s);break}case"br":{r+=n.br(s);break}case"del":{r+=n.del(s);break}case"text":{r+=n.text(s);break}default:{let a='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return r}},pr=class{options;block;constructor(e){this.options=e||mn}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?ft.lex:ft.lexInline}provideParser(e=this.block){return e?ht.parse:ht.parseInline}};ts=class{defaults=qo();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=ht;Renderer=wi;TextRenderer=es;Lexer=ft;Tokenizer=jn;Hooks=pr;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(fn(n,t.call(this,r)),r.type){case"table":{let i=r;for(let o of i.header)fn(n,this.walkTokens(o.tokens,t));for(let o of i.rows)for(let s of o)fn(n,this.walkTokens(s.tokens,t));break}case"list":{let i=r;fn(n,this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(o=>{let s=i[o].flat(1/0);fn(n,this.walkTokens(s,t))}):i.tokens&&fn(n,this.walkTokens(i.tokens,t))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let o=t.renderers[i.name];o?t.renderers[i.name]=function(...s){let a=i.renderer.apply(this,s);return a===!1&&(a=o.apply(this,s)),a}:t.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let o=t[i.level];o?o.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level==="block"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level==="inline"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new wi(this.defaults);for(let o in n.renderer){if(!(o in i))throw new Error(`renderer '${o}' does not exist`);if(["options","parser"].includes(o))continue;let s=o,a=n.renderer[s],c=i[s];i[s]=(...u)=>{let l=a.apply(i,u);return l===!1&&(l=c.apply(i,u)),l||""}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new jn(this.defaults);for(let o in n.tokenizer){if(!(o in i))throw new Error(`tokenizer '${o}' does not exist`);if(["options","rules","lexer"].includes(o))continue;let s=o,a=n.tokenizer[s],c=i[s];i[s]=(...u)=>{let l=a.apply(i,u);return l===!1&&(l=c.apply(i,u)),l}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new pr;for(let o in n.hooks){if(!(o in i))throw new Error(`hook '${o}' does not exist`);if(["options","block"].includes(o))continue;let s=o,a=n.hooks[s],c=i[s];pr.passThroughHooks.has(o)?i[s]=u=>{if(i.options.async&&pr.passThroughHooksRespectAsync.has(o))return(async()=>{let p=await a.call(i,u);return c.call(i,p)})();let l=a.call(i,u);return c.call(i,l)}:i[s]=(...u)=>{if(i.options.async)return(async()=>{let p=await a.apply(i,u);return p===!1&&(p=await c.apply(i,u)),p})();let l=a.apply(i,u);return l===!1&&(l=c.apply(i,u)),l}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,o=n.walkTokens;r.walkTokens=function(s){let a=[];return a.push(o.call(this,s)),i&&fn(a,i.call(this,s)),a}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return ft.lex(e,t??this.defaults)}parser(e,t){return ht.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},o=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let s=i.hooks?await i.hooks.preprocess(t):t,a=await(i.hooks?await i.hooks.provideLexer(e):e?ft.lex:ft.lexInline)(s,i),c=i.hooks?await i.hooks.processAllTokens(a):a;i.walkTokens&&await Promise.all(this.walkTokens(c,i.walkTokens));let u=await(i.hooks?await i.hooks.provideParser(e):e?ht.parse:ht.parseInline)(c,i);return i.hooks?await i.hooks.postprocess(u):u})().catch(o);try{i.hooks&&(t=i.hooks.preprocess(t));let s=(i.hooks?i.hooks.provideLexer(e):e?ft.lex:ft.lexInline)(t,i);i.hooks&&(s=i.hooks.processAllTokens(s)),i.walkTokens&&this.walkTokens(s,i.walkTokens);let a=(i.hooks?i.hooks.provideParser(e):e?ht.parse:ht.parseInline)(s,i);return i.hooks&&(a=i.hooks.postprocess(a)),a}catch(s){return o(s)}}}onError(e,t){return n=>{if(n.message+=`
|
|
158
|
+
Please report this to https://github.com/markedjs/marked.`,e){let r="<p>An error occurred:</p><pre>"+et(n.message+"",!0)+"</pre>";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}},dn=new ts;ce.options=ce.setOptions=function(e){return dn.setOptions(e),ce.defaults=dn.defaults,Ou(ce.defaults),ce};ce.getDefaults=qo;ce.defaults=mn;ce.use=pg;ce.walkTokens=function(e,t){return dn.walkTokens(e,t)};ce.parseInline=dn.parseInline;ce.Parser=ht;ce.parser=ht.parse;ce.Renderer=wi;ce.TextRenderer=es;ce.Lexer=ft;ce.lexer=ft.lex;ce.Tokenizer=jn;ce.Hooks=pr;ce.parse=ce;l$=ce.options,p$=ce.setOptions,f$=ce.walkTokens,h$=ce.parseInline,d$=ht.parse,m$=ft.lex});import{spawn as fg}from"node:child_process";import{randomBytes as Hu}from"node:crypto";import{readFileSync as hg}from"node:fs";import{createServer as dg}from"node:http";function vg(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function Vu(e,t){if(t==="prompt")return Wu.parse(e,{async:!1});let n="`".repeat(Math.max(3,...(e.match(/`+/g)??[]).map(i=>i.length+1))),r=t==="node"?"js":t==="tsx"||t==="bun"?"ts":"bash";return Wu.parse(`${n}${r}
|
|
159
|
+
${e}
|
|
160
|
+
${n}`,{async:!1})}function qu(e){try{let t=fg(process.platform==="darwin"?"open":"xdg-open",[e],{detached:!0,stdio:"ignore"});t.on("error",()=>{}),t.unref()}catch{}}function wg(e){return new Promise((t,n)=>{let r=0,i=[];e.on("data",o=>{r+=o.length,r>mg?(n(new Error("The request is too large.")),e.destroy()):i.push(o)}),e.on("end",()=>t(Buffer.concat(i).toString("utf8"))),e.on("error",n)})}function Ku(e,t){let n=Hu(24).toString("base64url"),r=Hu(16).toString("base64"),i=zo(hg(Mt("cli","templates","editor.html"),"utf8"),{nonce:r}),o={"cache-control":"no-store","content-security-policy":`default-src 'none'; script-src 'nonce-${r}'; style-src 'nonce-${r}' ${gg}; connect-src 'self'; img-src 'self' data:; base-uri 'none'; form-action 'none'; frame-ancestors 'none'`,"referrer-policy":"no-referrer","x-content-type-options":"nosniff"};return new Promise((s,a)=>{let c=0,u,l,p=v=>{clearTimeout(u),process.off("SIGINT",f),l?.(v.outcome),d.close(),d.closeAllConnections(),s(v)},f=()=>p({outcome:"cancelled"}),m=()=>{clearTimeout(u),u=setTimeout(()=>p({outcome:"expired"}),yg)},d=dg((v,w)=>{y(v,w).catch(A=>{w.headersSent||h(w,500,{error:A instanceof Error?A.message:String(A)})})});function h(v,w,A,S){let g=typeof A=="string";v.writeHead(w,{...o,"content-type":g?"text/html; charset=utf-8":"application/json; charset=utf-8"}),v.end(g?A:JSON.stringify(A),S)}async function y(v,w){let A=`http://127.0.0.1:${c}`,S=v.url?.startsWith(`/${n}/`)?v.url.slice(n.length+2):void 0;if(v.headers.host!==`127.0.0.1:${c}`||S===void 0)return h(w,404,{error:"Not found."});if(m(),v.method==="GET"&&S==="")return h(w,200,i);if(v.method!=="POST"||v.headers.origin!==A)return h(w,403,{error:"Forbidden."});let g=JSON.parse(await wg(v)||"{}");if(S==="state")return h(w,200,e.state());if(S==="preview")return h(w,200,{html:e.preview(String(g.content??""))});if(S==="cancel")return h(w,200,{},()=>p({outcome:"cancelled"}));if(S==="save"){let E=await e.save(g);return E.saved?h(w,200,E.result,()=>p({outcome:"saved",result:E.result})):h(w,422,{error:E.error})}return h(w,404,{error:"Not found."})}d.on("error",a),d.listen(0,"127.0.0.1",()=>{c=d.address().port;let v=`http://127.0.0.1:${c}/${n}/`;process.on("SIGINT",f),m(),l=t(v)})})}var mg,gg,yg,Wu,Zu=G(()=>{"use strict";Uu();je();De();mg=5*1024*1024,gg="https://cdn.jsdelivr.net/npm/daisyui@5.7.50/",yg=1800*1e3;Wu=new ts({renderer:{html:({text:e})=>vg(e)}})});import{readFileSync as kg}from"node:fs";import{parseArgs as $g}from"node:util";function Ju(e){return e instanceof Error?e.message:String(e)}var xg,Xu,Yu=G(()=>{"use strict";Ve();Ro();ur();Ge();Zu();De();Ze();be();rn();Je();xg=["code","cursor","zed","subl","webstorm","vim","nano","emacs"];Xu={args:{agent:{description:"Use plain, noninteractive agent output",type:"boolean"},path:{description:"Dotted path of the token to edit",type:"positional",required:!1},project:{description:"Select a registered project",type:"string"},content:{description:"New content; - reads standard input",type:"string"},description:{description:"New description; an empty value removes it",type:"string"},tag:{description:"New tag set (repeatable); an empty value removes all tags",type:"string"},shared:{description:"Change a shared token for every project",type:"boolean"},override:{description:"Override a shared token in the selected project",type:"boolean"}},meta:{description:"Edit the content, description, or tags of a token",name:"edit"},async run({rawArgs:e}){try{let{values:n,positionals:r}=$g({args:e,allowPositionals:!0,options:{agent:{type:"boolean"},project:{type:"string"},content:{type:"string"},description:{type:"string"},tag:{type:"string",multiple:!0},shared:{type:"boolean"},override:{type:"boolean"}}}),i=n.agent===!0||!!fe(),o=!i&&Pe(),s=i?" --agent":"",a=process.cwd(),c=n.project,u=c?` --project ${Z(c)}`:"";if(n.shared&&n.override)throw new Error(`Choose ${I("--shared")} or ${I("--override")}, not both.`);let l=r[0];if(o){let x=we(ye({cwd:a,loader:se({cwd:a}),...c?{project:c}:{}}));if((l===void 0||!x.tokens.has(l))&&(l=await Vt({message:"Token to edit",tokens:bt(x),query:l??""}),!l))return ae("Edit cancelled. Nothing was changed.")}if(l===void 0){He({summary:"Name the token to edit.",details:`Find it with woof get 'TERMS' --search${u}, then run woof edit 'PATH'${u}.`},{template:"edit-path",values:{project:u}}),process.exitCode=1;return}let p=rr(l,{cwd:a,project:c});if(n.override&&!p.override)throw new Error(p.definition.kind==="shared"?`${I(l)} is a shared token, but no project is selected to hold an override. Run edit in a project, or pass ${I("--project NAME")}.`:`${I(l)} is a project token. Only a shared token can get an override.`);let f={...n.content!==void 0?{content:n.content==="-"?kg(0,"utf8").trimEnd():n.content}:{},...n.description!==void 0?{description:n.description}:{},...n.tag?{tags:n.tag.map(x=>x.trim()).filter(Boolean)}:{}},m=Object.keys(f).length>0,d=p.override?[["definition","--shared","all projects (global)",{kind:"shared"}],["override","--override","this project only (override)",p.override]].map(([x,j,P,k])=>{let b=Rc(k,a);return{value:x,flag:j,label:P,...b?{hint:b}:{}}}):[],h=n.override?"override":n.shared||!p.override?"definition":void 0,y=!o&&h==="override"&&p.kind==="fixed";if(!o&&(!m&&!y||!h)){let x=p.kind==="inline"?"inline":p.kind==="file"?p.files[0]:`script files: ${p.files.join(", ")||"none"}`,j=p.override?d.map(_=>`${_.flag} ${_.label}${_.hint?`: ${_.hint}`:""}`).join(`
|
|
161
|
+
`):`none needed: the token is defined in ${an(p.definition)}`,P=p.content??`The content is in ${p.files.join(", ")}.`,k=`woof edit ${Z(l)}${u}${p.override&&!h?" LAYER":""} --description DESCRIPTION --tag TAG${p.kind==="fixed"?s:` --content -${s} <<'WOOF'
|
|
162
|
+
CONTENT
|
|
163
|
+
WOOF`}`,b=p.description??"none",N=p.tags.join(", ")||"none";He({summary:`Edit ${l}.`,details:`Type: ${p.type}
|
|
164
|
+
Defined in: ${an(p.definition)}
|
|
165
|
+
Content: ${x}
|
|
166
|
+
Description: ${b}
|
|
167
|
+
Tags: ${N}
|
|
168
|
+
|
|
169
|
+
${P}
|
|
170
|
+
|
|
171
|
+
Layers:
|
|
172
|
+
${j}
|
|
173
|
+
|
|
174
|
+
${k}`,recovery:"Pass only the fields that change."},{template:"edit-draft",values:{path:l,type:p.type,where:an(p.definition),configuration:p.configuration,location:x,description:b,tags:N,content:P,layers:j,command:k}}),process.exitCode=1;return}if(!h){let x=await ke({message:`Change ${I(l)} for`,options:d.map(({value:j,label:P,hint:k})=>({value:j,label:P,...k?{hint:k}:{}}))});if(!x)return ae("Edit cancelled. Nothing was changed.");h=x}let v=h==="override"?p.override:p.definition,w=d.find(x=>x.value===h)?.label??an(v),A=h==="override"&&p.kind==="fixed"?Ic(l,{cwd:a,project:c}):void 0,S=()=>{A?.remove(),ae("Edit cancelled. Nothing was changed.")},g=async x=>{try{let j=await Ao(l,{...x,...A?{exec:A.exec}:{}},{cwd:a,project:c,layer:h,version:p.version});t(l,v,A?{...j,contentFile:A.files.join(", ")}:j,w)}catch(j){throw A?.remove(),j}};if(m||y)return await g(f);let E=l,C=h,T;if(p.kind==="fixed")un(`Edit ${I(l)} in an editor ${Ne("the content is a script file")}`,(A?.files??p.files).flatMap(x=>xg.map(j=>`${j} ${Z(x)}`)).join(`
|
|
175
|
+
`),null);else{let x=await Ku({state:()=>({path:E,type:p.type,where:w,kind:p.kind,files:p.files,content:p.content??""}),preview:j=>Vu(j,p.type),save:async j=>{let P=String(j.content??"");try{return await to(()=>Ao(E,{content:P},{cwd:a,project:c,layer:C,version:p.version,check:!0})),{saved:!0,result:{content:P}}}catch(k){return{saved:!1,error:to(()=>Ju(k))}}}},j=>{un(`Editing ${I(E)} in browser ${Ne("If it does not open, visit this address. Press Ctrl+C to cancel.")}`,j,null);let P=du(()=>qu(j));return k=>P(k==="saved"?"Content saved in browser":void 0)});if(x.outcome!=="saved"){Wt({summary:x.outcome==="expired"?"The edit page closed after 30 minutes without activity. Nothing was changed.":"Edit cancelled. Nothing was changed."},null),process.exitCode=x.outcome==="expired"?1:130;return}T=x.result.content}let R=await Qe(`Description ${Ne("optional")}`,{...p.description?{initialValue:p.description}:{},optional:!0});if(R===void 0)return S();let $=await Qe(`Tags ${Ne("comma separated - optional")}`,{...p.tags.length?{initialValue:p.tags.join(", ")}:{},optional:!0});if($===void 0)return S();await g({...T!==void 0?{content:T}:{},description:R,tags:$.split(",").map(x=>x.trim()).filter(Boolean)})}catch(n){let r=Ju(n);he({summary:"woof could not edit the token.",details:r},{template:"edit-error",values:{details:r}}),process.exitCode=1}function t(n,r,i,o){if(!i.changed)return Wt({summary:`No changes to ${I(n)}.`,details:"The new values match the current token. Nothing was written."},{template:"edit-unchanged",values:{path:n}});let s=r.kind==="project"?` --project ${Z(r.name)}`:"",a=`woof get ${Z(n)}${s}`,c=i.contentFile??"none";Se({summary:`Edited ${I(n)}.`,details:Re([["Configuration",i.file],["Content file",c],["Changed in",o]]),recovery:`Check it with ${I(a)}.`},{template:"edit-result",values:{path:n,file:i.file,contentFile:c,where:o,command:`${a} --agent`}})}}}});import{parseArgs as bg}from"node:util";var Qu,el=G(()=>{"use strict";Ve();ur();Ge();De();Ze();be();Je();Qu={args:{agent:{description:"Use plain, noninteractive agent output",type:"boolean"},project:{description:"Select a registered project",type:"string"},token:{description:"Token address to explain",type:"positional",required:!1}},meta:{description:"Explain a token resolution without executing it",name:"explain"},async run({rawArgs:e}){try{let{values:t,positionals:n}=bg({args:e,allowPositionals:!0,options:{agent:{type:"boolean"},project:{type:"string"}}});if(n.length>1)throw new Error("Explain accepts one token address.");let r=n[0]??"",i=r.startsWith("$projects.")?jt(r):void 0;if(i?.project&&t.project&&i.project!==t.project)throw new Error(`Qualified address selects ${I(i.project)}, which contradicts ${I(`--project ${t.project}`)}.`);let o=i?.project??t.project,s=t.agent===!0||!!fe(),a=ye({...o?{project:o}:{},loader:se({cwd:process.cwd()})});if(a.selection==="ambiguous"){let h=a.candidates;if(!s&&process.stdout.isTTY){let y=await ke({message:"Project to use",options:h.map(v=>{let w=Ie(v);return{value:v.name,label:v.name,...w?{hint:w}:{}}})});if(!y)return ae("Explanation cancelled.");a=ye({project:y,loader:se({cwd:process.cwd()})})}else{let y=h.map(w=>{let A=Ie(w),S=`${s?"- ":""}${w.name}`;return A?`${S} ${Oe(A)}`:S}).join(`
|
|
176
|
+
`),v=`woof explain ${Z(r)} --project NAME${s?" --agent":""}`;He({summary:"Several projects match this directory.",details:y,recovery:`Retry with ${I(v)}, with NAME replaced by the project name.`},{template:"explain-ambiguous",values:{projects:y,command:v}}),process.exitCode=1;return}}let c=we(a);if(!s&&process.stdout.isTTY&&!c.tokens.has(i?.path??r)){let h=await Vt({message:"Token to explain",tokens:bt(c),query:r});if(!h)return ae("Explanation cancelled.");r=h}if(!r)throw new Error(`Name the token to explain. Find it with ${I("woof get 'TERMS' --search")}.`);let u=vc(c,r),l=Sn(a)??"none (shared tokens only)",p=new Map(u.tokens.map(h=>[h.path,h])),f=[],m=h=>{let y=p.get(h);!y||f.includes(y)||(f.push(y),y.references.forEach(m))};m(u.requested);let d=f.map(h=>{let y=c.tokens.get(h.path).value,v=$n(typeof y=="string"?"prompt":y.$type),w=[["Source",h.source.file]];return h.overridden&&w.push(["Overrides",h.overridden.source.file]),h.description!==void 0&&w.push(["Description",h.description]),h.tags!==void 0&&w.push(["Tags",h.tags.join(", ")]),[`${I(h.path)} ${xn(h.origin)}${v?` ${v}`:""}`,...[...Re(w).split(`
|
|
177
|
+
`),...Le("Reference",[...new Set(h.references)]),...Le("Resource",h.files.map(A=>`${A.markedPath} -> ${A.file}`))].map(A=>` ${A}`)].join(`
|
|
178
|
+
`)}).join(`
|
|
179
|
+
|
|
180
|
+
${s?"\u2193":" \u2193"}
|
|
181
|
+
|
|
182
|
+
`);Se({summary:`Resolution for ${I(u.requested)}`,details:`${Re([["Project",l]])}
|
|
183
|
+
|
|
184
|
+
${d}`},{template:"explain-result",values:{requested:u.requested,project:l,tokens:d}})}catch(t){let n=t instanceof Error?t.message:String(t);he({summary:"woof could not explain the resolution.",details:n,recovery:`Search the tokens with ${I("woof get")}.`},{template:"explain-error",values:{details:n}}),process.exitCode=1}}}});import{createRequire as Eg}from"module";function Fg(e,t){return Mg(e,t||{},0,0)}function Bg(e,t){return ul(e,{i:2},t&&t.out,t&&t.dictionary)}function ki(e,t){if(t){for(var n=new ue(e.length),r=0;r<e.length;++r)n[r]=e.charCodeAt(r);return n}if(il)return il.encode(e);for(var i=e.length,o=new ue(e.length+(e.length>>1)),s=0,a=function(l){o[s++]=l},r=0;r<i;++r){if(s+5>o.length){var c=new ue(s+8+(i-r<<1));c.set(o),o=c}var u=e.charCodeAt(r);u<128||t?a(u):u<2048?(a(192|u>>6),a(128|u&63)):u>55295&&u<57344?(u=65536+(u&1047552)|e.charCodeAt(++r)&1023,a(240|u>>18),a(128|u>>12&63),a(128|u>>6&63),a(128|u&63)):(a(224|u>>12),a(128|u>>6&63),a(128|u&63))}return Kt(o,0,s)}function hl(e,t){if(t){for(var n="",r=0;r<e.length;r+=16384)n+=String.fromCharCode.apply(null,e.subarray(r,r+16384));return n}else{if(ls)return ls.decode(e);var i=Ug(e),o=i.s,n=i.r;return n.length&&de(8),o}}function ds(e,t){t||(t={});var n={},r=[];fl(e,"",n,t);var i=0,o=0;for(var s in n){var a=n[s],c=a[0],u=a[1],l=u.level==0?0:8,p=ki(s),f=p.length,m=u.comment,d=m&&ki(m),h=d&&d.length,y=ps(u.extra);f>65535&&de(11);var v=l?Fg(c,u):c,w=v.length,A=Dg();A.p(c),r.push(pl(u,{size:c.length,crc:A.d(),c:v,f:p,m:d,u:f!=s.length||d&&m.length!=h,o:i,compression:l})),i+=30+f+y+w,o+=76+2*(f+y)+(h||0)+w}for(var S=new ue(o+22),g=i,E=o-i,C=0;C<r.length;++C){var p=r[C];ol(S,p.o,p,p.f,p.u,p.c.length);var T=30+p.f.length+ps(p.extra);S.set(p.c,p.o+T),ol(S,i,p,p.f,p.u,p.c.length,p.o,p.m),i+=16+T+(p.m?p.m.length:0)}return Vg(S,i,r.length,E,g),S}function yl(e,t){for(var n={},r=e.length-22;_e(e,r)!=101010256;--r)(!r||e.length-r>65558)&&de(13);var i=We(e,r+8);if(!i)return{};var o=_e(e,r+16),s=_e(e,r-20)==117853008;if(s){var a=_e(e,r-12);s=_e(e,a)==101075792,s&&(i=_e(e,a+32),o=_e(e,a+48))}for(var c=t&&t.filter,u=0;u<i;++u){var l=Wg(e,o,s),p=l[0],f=l[1],m=l[2],d=l[3],h=l[4],y=l[5],v=Hg(e,y);o=h,(!c||c({name:d,size:f,originalSize:m,compression:p}))&&(p?p==8?n[d]=Bg(e.subarray(v,v+f),{out:new ue(m)}):de(14,"unknown compression type "+p):n[d]=Kt(e,v,v+f))}return n}var Sg,Pn,Tg,Cg,ue,tt,fs,$i,xi,ss,sl,Pn,al,as,cl,Ag,tl,cs,It,ee,St,Zt,ee,ee,ee,ee,yr,ee,Rg,jg,Ig,_g,ns,dt,rs,hs,Kt,Pg,de,ul,_t,mr,is,us,nl,gr,ll,rl,Og,_n,Ng,Lg,Dg,Mg,pl,We,_e,os,Te,zg,fl,il,ls,Gg,Ug,Hg,Wg,dl,ps,ol,Vg,qg,ml,gl,vl=G(()=>{Sg=Eg("/");try{Pn=Sg("worker_threads"),Tg=Pn.Worker,Cg=Pn.isMarkedAsUntransferable}catch{}ue=Uint8Array,tt=Uint16Array,fs=Int32Array,$i=new ue([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),xi=new ue([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),ss=new ue([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),sl=function(e,t){for(var n=new tt(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var i=new fs(n[30]),r=1;r<30;++r)for(var o=n[r];o<n[r+1];++o)i[o]=o-n[r]<<5|r;return{b:n,r:i}},Pn=sl($i,2),al=Pn.b,as=Pn.r;al[28]=258,as[258]=28;cl=sl(xi,0),Ag=cl.b,tl=cl.r,cs=new tt(32768);for(ee=0;ee<32768;++ee)It=(ee&43690)>>1|(ee&21845)<<1,It=(It&52428)>>2|(It&13107)<<2,It=(It&61680)>>4|(It&3855)<<4,cs[ee]=((It&65280)>>8|(It&255)<<8)>>1;St=(function(e,t,n){for(var r=e.length,i=0,o=new tt(t);i<r;++i)e[i]&&++o[e[i]-1];var s=new tt(t);for(i=1;i<t;++i)s[i]=s[i-1]+o[i-1]<<1;var a;if(n){a=new tt(1<<t);var c=15-t;for(i=0;i<r;++i)if(e[i])for(var u=i<<4|e[i],l=t-e[i],p=s[e[i]-1]++<<l,f=p|(1<<l)-1;p<=f;++p)a[cs[p]>>c]=u}else for(a=new tt(r),i=0;i<r;++i)e[i]&&(a[i]=cs[s[e[i]-1]++]>>15-e[i]);return a}),Zt=new ue(288);for(ee=0;ee<144;++ee)Zt[ee]=8;for(ee=144;ee<256;++ee)Zt[ee]=9;for(ee=256;ee<280;++ee)Zt[ee]=7;for(ee=280;ee<288;++ee)Zt[ee]=8;yr=new ue(32);for(ee=0;ee<32;++ee)yr[ee]=5;Rg=St(Zt,9,0),jg=St(Zt,9,1),Ig=St(yr,5,0),_g=St(yr,5,1),ns=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},dt=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},rs=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},hs=function(e){return(e+7)/8|0},Kt=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new ue(e.subarray(t,n))},Pg=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],de=function(e,t,n){var r=new Error(t||Pg[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,de),!n)throw r;return r},ul=function(e,t,n,r){var i=e.length,o=r?r.length:0;if(!i||t.f&&!t.l)return n||new ue(0);var s=!n,a=s||t.i!=2,c=t.i;s&&(n=new ue(i*3));var u=function(V){var Q=n.length;if(V>Q){var te=new ue(Math.max(Q*2,V));te.set(n),n=te}},l=t.f||0,p=t.p||0,f=t.b||0,m=t.l,d=t.d,h=t.m,y=t.n,v=i*8;do{if(!m){l=dt(e,p,1);var w=dt(e,p+1,3);if(p+=3,w)if(w==1)m=jg,d=_g,h=9,y=5;else if(w==2){var E=dt(e,p,31)+257,C=dt(e,p+10,15)+4,T=E+dt(e,p+5,31)+1;p+=14;for(var R=new ue(T),$=new ue(19),x=0;x<C;++x)$[ss[x]]=dt(e,p+x*3,7);p+=C*3;for(var j=ns($),P=(1<<j)-1,k=St($,j,1),x=0;x<T;){var b=k[dt(e,p,P)];p+=b&15;var A=b>>4;if(A<16)R[x++]=A;else{var N=0,_=0;for(A==16?(_=3+dt(e,p,3),p+=2,N=R[x-1]):A==17?(_=3+dt(e,p,7),p+=3):A==18&&(_=11+dt(e,p,127),p+=7);_--;)R[x++]=N}}var O=R.subarray(0,E),z=R.subarray(E);h=ns(O),y=ns(z),m=St(O,h,1),d=St(z,y,1)}else de(1);else{var A=hs(p)+4,S=e[A-4]|e[A-3]<<8,g=A+S;if(g>i){c&&de(0);break}a&&u(f+S),n.set(e.subarray(A,g),f),t.b=f+=S,t.p=p=g*8,t.f=l;continue}if(p>v){c&&de(0);break}}a&&u(f+131072);for(var B=(1<<h)-1,W=(1<<y)-1,q=p;;q=p){var N=m[rs(e,p)&B],U=N>>4;if(p+=N&15,p>v){c&&de(0);break}if(N||de(2),U<256)n[f++]=U;else if(U==256){q=p,m=null;break}else{var H=U-254;if(U>264){var x=U-257,F=$i[x];H=dt(e,p,(1<<F)-1)+al[x],p+=F}var pe=d[rs(e,p)&W],re=pe>>4;pe||de(3),p+=pe&15;var z=Ag[re];if(re>3){var F=xi[re];z+=rs(e,p)&(1<<F)-1,p+=F}if(p>v){c&&de(0);break}a&&u(f+131072);var M=f+H;if(f<z){var Y=o-z,D=Math.min(z,M);for(Y+f<0&&de(3);f<D;++f)n[f]=r[Y+f]}for(;f<M;++f)n[f]=n[f-z]}}t.l=m,t.p=q,t.b=f,t.f=l,m&&(l=1,t.m=h,t.d=d,t.n=y)}while(!l);return f!=n.length&&s?Kt(n,0,f):n.subarray(0,f)},_t=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},mr=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8,e[r+2]|=n>>16},is=function(e,t){for(var n=[],r=0;r<e.length;++r)e[r]&&n.push({s:r,f:e[r]});var i=n.length,o=n.slice();if(!i)return{t:_n,l:0};if(i==1){var s=new ue(n[0].s+1);return s[n[0].s]=1,{t:s,l:1}}n.sort(function(g,E){return g.f-E.f}),n.push({s:-1,f:25001});var a=n[0],c=n[1],u=0,l=1,p=2;for(n[0]={s:-1,f:a.f+c.f,l:a,r:c};l!=i-1;)a=n[n[u].f<n[p].f?u++:p++],c=n[u!=l&&n[u].f<n[p].f?u++:p++],n[l++]={s:-1,f:a.f+c.f,l:a,r:c};for(var f=o[0].s,r=1;r<i;++r)o[r].s>f&&(f=o[r].s);var m=new tt(f+1),d=us(n[l-1],m,0);if(d>t){var r=0,h=0,y=d-t,v=1<<y;for(o.sort(function(E,C){return m[C.s]-m[E.s]||E.f-C.f});r<i;++r){var w=o[r].s;if(m[w]>t)h+=v-(1<<d-m[w]),m[w]=t;else break}for(h>>=y;h>0;){var A=o[r].s;m[A]<t?h-=1<<t-m[A]++-1:++r}for(;r>=0&&h;--r){var S=o[r].s;m[S]==t&&(--m[S],++h)}d=t}return{t:new ue(m),l:d}},us=function(e,t,n){return e.s==-1?Math.max(us(e.l,t,n+1),us(e.r,t,n+1)):t[e.s]=n},nl=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new tt(++t),r=0,i=e[0],o=1,s=function(c){n[r++]=c},a=1;a<=t;++a)if(e[a]==i&&a!=t)++o;else{if(!i&&o>2){for(;o>138;o-=138)s(32754);o>2&&(s(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(s(i),--o;o>6;o-=6)s(8304);o>2&&(s(o-3<<5|8208),o=0)}for(;o--;)s(i);o=1,i=e[a]}return{c:n.subarray(0,r),n:t}},gr=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},ll=function(e,t,n){var r=n.length,i=hs(t+2);e[i]=r&255,e[i+1]=r>>8,e[i+2]=e[i]^255,e[i+3]=e[i+1]^255;for(var o=0;o<r;++o)e[i+o+4]=n[o];return(i+4+r)*8},rl=function(e,t,n,r,i,o,s,a,c,u,l){_t(t,l++,n),++i[256];for(var p=is(i,15),f=p.t,m=p.l,d=is(o,15),h=d.t,y=d.l,v=nl(f),w=v.c,A=v.n,S=nl(h),g=S.c,E=S.n,C=new tt(19),T=0;T<w.length;++T)++C[w[T]&31];for(var T=0;T<g.length;++T)++C[g[T]&31];for(var R=is(C,7),$=R.t,x=R.l,j=19;j>4&&!$[ss[j-1]];--j);var P=u+5<<3,k=gr(i,Zt)+gr(o,yr)+s,b=gr(i,f)+gr(o,h)+s+14+3*j+gr(C,$)+2*C[16]+3*C[17]+7*C[18];if(c>=0&&P<=k&&P<=b)return ll(t,l,e.subarray(c,c+u));var N,_,O,z;if(_t(t,l,1+(b<k)),l+=2,b<k){N=St(f,m,0),_=f,O=St(h,y,0),z=h;var B=St($,x,0);_t(t,l,A-257),_t(t,l+5,E-1),_t(t,l+10,j-4),l+=14;for(var T=0;T<j;++T)_t(t,l+3*T,$[ss[T]]);l+=3*j;for(var W=[w,g],q=0;q<2;++q)for(var U=W[q],T=0;T<U.length;++T){var H=U[T]&31;_t(t,l,B[H]),l+=$[H],H>15&&(_t(t,l,U[T]>>5&127),l+=U[T]>>12)}}else N=Rg,_=Zt,O=Ig,z=yr;for(var T=0;T<a;++T){var F=r[T];if(F>255){var H=F>>18&31;mr(t,l,N[H+257]),l+=_[H+257],H>7&&(_t(t,l,F>>23&31),l+=$i[H]);var pe=F&31;mr(t,l,O[pe]),l+=z[pe],pe>3&&(mr(t,l,F>>5&8191),l+=xi[pe])}else mr(t,l,N[F]),l+=_[F]}return mr(t,l,N[256]),l+_[256]},Og=new fs([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),_n=new ue(0),Ng=function(e,t,n,r,i,o){var s=o.z||e.length,a=new ue(r+s+5*(1+Math.ceil(s/7e3))+i),c=a.subarray(r,a.length-i),u=o.l,l=(o.r||0)&7;if(t){l&&(c[0]=o.r>>3);for(var p=Og[t-1],f=p>>13,m=p&8191,d=(1<<n)-1,h=o.p||new tt(32768),y=o.h||new tt(d+1),v=Math.ceil(n/3),w=2*v,A=function(ie){return(e[ie]^e[ie+1]<<v^e[ie+2]<<w)&d},S=new fs(25e3),g=new tt(288),E=new tt(32),C=0,T=0,R=o.i||0,$=0,x=o.w||0,j=0;R+2<s;++R){var P=A(R),k=R&32767,b=y[P];if(h[k]=b,y[P]=k,x<=R){var N=s-R;if((C>7e3||$>24576)&&(N>423||!u)){l=rl(e,c,0,S,g,E,T,$,j,R-j,l),$=C=T=0,j=R;for(var _=0;_<286;++_)g[_]=0;for(var _=0;_<30;++_)E[_]=0}var O=2,z=0,B=m,W=k-b&32767;if(N>2&&P==A(R-W))for(var q=Math.min(f,N)-1,U=Math.min(32767,R),H=Math.min(258,N);W<=U&&--B&&k!=b;){if(e[R+O]==e[R+O-W]){for(var F=0;F<H&&e[R+F]==e[R+F-W];++F);if(F>O){if(O=F,z=W,F>q)break;for(var pe=Math.min(W,F-2),re=0,_=0;_<pe;++_){var M=R-W+_&32767,Y=h[M],D=M-Y&32767;D>re&&(re=D,b=M)}}}k=b,b=h[k],W+=k-b&32767}if(z){S[$++]=268435456|as[O]<<18|tl[z];var V=as[O]&31,Q=tl[z]&31;T+=$i[V]+xi[Q],++g[257+V],++E[Q],x=R+O,++C}else S[$++]=e[R],++g[e[R]]}}for(R=Math.max(R,x);R<s;++R)S[$++]=e[R],++g[e[R]];l=rl(e,c,u,S,g,E,T,$,j,R-j,l),u||(o.r=l&7|c[l/8|0]<<3,l-=7,o.h=y,o.p=h,o.i=R,o.w=x)}else{for(var R=o.w||0;R<s+u;R+=65535){var te=R+65535;te>=s&&(c[l/8|0]=u,te=s),l=ll(c,l+1,e.subarray(R,te))}o.i=s}return Kt(a,0,r+hs(l)+i)},Lg=(function(){for(var e=new Int32Array(256),t=0;t<256;++t){for(var n=t,r=9;--r;)n=(n&1&&-306674912)^n>>>1;e[t]=n}return e})(),Dg=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=Lg[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},Mg=function(e,t,n,r,i){if(!i&&(i={l:1},t.dictionary)){var o=t.dictionary.subarray(-32768),s=new ue(o.length+e.length);s.set(o),s.set(e,o.length),e=s,i.w=o.length}return Ng(e,t.level==null?6:t.level,t.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,n,r,i)},pl=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n},We=function(e,t){return e[t]|e[t+1]<<8},_e=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},os=function(e,t){return _e(e,t)+_e(e,t+4)*4294967296},Te=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8};zg=(function(){function e(t,n){typeof t=="function"&&(n=t,t={}),this.ondata=n;var r=t&&t.dictionary&&t.dictionary.subarray(-32768);this.s={i:0,b:r?r.length:0},this.o=new ue(32768),this.p=new ue(0),r&&this.o.set(r)}return e.prototype.e=function(t){if(this.ondata||de(5),this.d&&de(4),!this.p.length)this.p=t;else if(t.length){var n=new ue(this.p.length+t.length);n.set(this.p),n.set(t,this.p.length),this.p=n}},e.prototype.c=function(t){this.s.i=+(this.d=t||!1);var n=this.s.b,r=ul(this.p,this.s,this.o);this.ondata(Kt(r,n,this.s.b),this.d),this.o=Kt(r,this.s.b-32768),this.s.b=this.o.length,this.p=Kt(this.p,this.s.p/8|0),this.s.p&=7},e.prototype.push=function(t,n){this.e(t),this.c(n)},e})();fl=function(e,t,n,r){for(var i in e){var o=e[i],s=t+i,a=r;Array.isArray(o)&&(a=pl(r,o[1]),o=o[0]),ArrayBuffer.isView(o)?n[s]=[o,a]:(n[s+="/"]=[new ue(0),a],fl(o,s,n,r))}},il=typeof TextEncoder<"u"&&new TextEncoder,ls=typeof TextDecoder<"u"&&new TextDecoder,Gg=0;try{ls.decode(_n,{stream:!0}),Gg=1}catch{}Ug=function(e){for(var t="",n=0;;){var r=e[n++],i=(r>127)+(r>223)+(r>239);if(n+i>e.length)return{s:t,r:Kt(e,n-1)};i?i==3?(r=((r&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,t+=String.fromCharCode(55296|r>>10,56320|r&1023)):i&1?t+=String.fromCharCode((r&31)<<6|e[n++]&63):t+=String.fromCharCode((r&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCharCode(r)}};Hg=function(e,t){return t+30+We(e,t+26)+We(e,t+28)},Wg=function(e,t,n){var r=We(e,t+28),i=We(e,t+30),o=hl(e.subarray(t+46,t+46+r),!(We(e,t+8)&2048)),s=t+46+r,a=dl(e,s,i,n,_e(e,t+20),_e(e,t+24),_e(e,t+42)),c=a[0],u=a[1],l=a[2];return[We(e,t+10),c,u,o,s+i+We(e,t+32),l]},dl=function(e,t,n,r,i,o,s){var a=i==4294967295,c=o==4294967295,u=s==4294967295,l=t+n,p=a+c+u;if(r&&p){for(;t+4<l;t+=4+We(e,t+2))if(We(e,t)==1)return[a?os(e,t+4+8*c):i,c?os(e,t+4):o,u?os(e,t+4+8*(c+a)):s,1];r<2&&de(13)}return[i,o,s,0]},ps=function(e){var t=0;if(e)for(var n in e){var r=e[n].length;r>65535&&de(9),t+=r+4}return t},ol=function(e,t,n,r,i,o,s,a){var c=r.length,u=n.extra,l=a&&a.length,p=ps(u);Te(e,t,s!=null?33639248:67324752),t+=4,s!=null&&(e[t++]=20,e[t++]=n.os),e[t]=20,t+=2,e[t++]=n.flag<<1|(o<0&&8),e[t++]=i&&8,e[t++]=n.compression&255,e[t++]=n.compression>>8;var f=new Date(n.mtime==null?Date.now():n.mtime),m=f.getFullYear()-1980;if((m<0||m>119)&&de(10),Te(e,t,m<<25|f.getMonth()+1<<21|f.getDate()<<16|f.getHours()<<11|f.getMinutes()<<5|f.getSeconds()>>1),t+=4,o!=-1&&(Te(e,t,n.crc),Te(e,t+4,o<0?-o-2:o),Te(e,t+8,n.size)),Te(e,t+12,c),Te(e,t+14,p),t+=16,s!=null&&(Te(e,t,l),Te(e,t+6,n.attrs),Te(e,t+10,s),t+=14),e.set(r,t),t+=c,p)for(var d in u){var h=u[d],y=h.length;Te(e,t,+d),Te(e,t+2,y),e.set(h,t+4),t+=4+y}return l&&(e.set(a,t),t+=l),t},Vg=function(e,t,n,r,i){Te(e,t,101010256),Te(e,t+8,n),Te(e,t+10,n),Te(e,t+12,r),Te(e,t+16,i)};qg=(function(){function e(){}return e.prototype.push=function(t,n){this.ondata(null,t,n)},e.compression=0,e})(),ml=(function(){function e(){var t=this;this.i=new zg(function(n,r){t.ondata(null,n,r)})}return e.prototype.push=function(t,n){try{this.i.push(t,n)}catch(r){this.ondata(r,null,n)}},e.compression=8,e})(),gl=(function(){function e(t){this.onfile=t,this.k=[],this.o={0:qg},this.p=_n}return e.prototype.push=function(t,n){var r=this;if(this.onfile||de(5),this.p||de(4),this.c>0){var i=Math.min(this.c,t.length),o=t.subarray(0,i);if(this.c-=i,this.d?this.d.push(o,!this.c):this.k[0].push(o),t=t.subarray(i),t.length)return this.push(t,n)}else{var s=0,a=0,c=void 0,u=void 0;this.p.length?t.length?(u=new ue(this.p.length+t.length),u.set(this.p),u.set(t,this.p.length)):u=this.p:u=t;for(var l=u.length,p=this.c,f=p&&this.d,m=function(){var v=_e(u,a);if(v==67324752){s=1,c=a,d.d=null,d.c=0;var w=We(u,a+6),A=We(u,a+8),S=w&2048,g=w&8,E=We(u,a+26),C=We(u,a+28);if(l>a+30+E+C){var T=[];d.k.unshift(T),s=2;var R=_e(u,a+18),$=_e(u,a+22),x=hl(u.subarray(a+30,a+=30+E),!S),j=dl(u,a,C,2,R,$,0),P=j[0],k=j[1],b=j[3];g&&(P=-1-b),a+=C,d.c=P;var N,_={name:x,compression:A,start:function(){if(_.ondata||de(5),!P)_.ondata(null,_n,!0);else{var O=r.o[A];O||_.ondata(de(14,"unknown compression type "+A,1),null,!1),N=P<0?new O(x):new O(x,P,k),N.ondata=function(q,U,H){_.ondata(q,U,H)};for(var z=0,B=T;z<B.length;z++){var W=B[z];N.push(W,!1)}r.k[0]==T&&r.c?r.d=N:N.push(_n,!0)}},terminate:function(){N&&N.terminate&&N.terminate()}};P>=0&&(_.size=P,_.originalSize=k),d.onfile(_)}return"break"}else if(p){if(v==134695760)return c=a+=12+(p==-2&&8),s=3,d.c=0,"break";if(v==33639248)return c=a-=4,s=3,d.c=0,"break"}},d=this;a<l-4;++a){var h=m();if(h==="break")break}if(this.p=_n,p<0){var y=s?u.subarray(0,c-12-(p==-2&&8)-(_e(u,c-16)==134695760&&4)):u.subarray(0,a);f?f.push(y,!!s):this.k[+(s==2)].push(y)}if(s&2)return this.push(u.subarray(a),n);this.p=u.subarray(a)}n&&(this.c&&de(13),this.p=null)},e.prototype.register=function(t){this.o[t.compression]=t},e})()});import{isAbsolute as Kg}from"node:path";import{crc32 as Zg}from"node:zlib";function bi(e){if(!e||e.includes("\0")||Kg(e)||e.split("/").some(t=>!t||t==="."||t===".."))throw new X(`entry ${JSON.stringify(e)} is not a safe root-relative path.`);return e}function gs(e){let t=new Map;for(let n of e){let r=bi(n.path);if(t.has(r))throw new X(`multiple entries use the destination ${JSON.stringify(r)}.`);t.set(r,n.data)}return t}function wl(e){if(!e.startsWith("<repo>/")){if(!e.startsWith("<root>/"))throw new X(`resource reference ${JSON.stringify(e)} must begin with <root>/ or <repo>/.`);return bi(e.slice(7))}}function ms(e,t,n){function r(i){if(n&&i.startsWith("<repo>/"))throw new X("shared root definitions cannot depend on repository resources.");t.add(i)}if(typeof e=="string"){ot(e)&&r(e);return}if("$type"in e||"$exec"in e){let i=e;if(i.$type==="prompt")ot(i.$exec)&&r(i.$exec);else for(let o of Array.isArray(i.$exec)?i.$exec:[i.$exec])ot(o)&&r(o);return}for(let i of Object.values(e))ms(i,t,n)}function ys(e,...t){let n=new Set;for(let[r,i]of Object.entries(e))r!=="$schemaVersion"&&r!=="$projects"&&ms(i,n,!0);for(let r of t)for(let[i,o]of Object.entries(r))i!=="$schemaVersion"&&i!=="$metadata"&&ms(o,n,!1);return n}function kl(e,t){try{return new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch(n){throw new X(`configuration ${t} is not valid UTF-8.`,{cause:n})}}function $l(e){let t=e.get("woof.config.json");if(!t)throw new X("the root woof.config.json is missing.");let n=Ke(kl(t,"woof.config.json"),"root","bundle woof.config.json"),r=Object.entries(n.$projects??{});if(r.length!==1)throw new X(`the root configuration must select exactly one project; found ${r.length}.`);let[i,o]=r[0],s,a,c;if(typeof o=="string"){if(a=o,c=wl(o),!c)throw new X("a selected project configuration cannot be checkout-relative.");if(c==="woof.config.json")throw new X("the selected project configuration cannot alias the root configuration.");let p=e.get(c);if(!p)throw new X(`selected project configuration ${c} is missing.`);s=Ke(kl(p,c),"project",`bundle ${c}`)}else s=o;let u=new Set;c&&u.add(c);for(let p of ys(n,s)){let f=wl(p);if(f){if(f==="woof.config.json")throw new X("a payload cannot replace the root configuration.");u.add(f)}}let l=new Map([...e].filter(([p])=>p==="woof.config.json"||u.has(p)));return{configuration:n,projectName:i,project:s,projectReference:a,files:l}}function xl(e){throw e instanceof X?e:new X(`could not decode the ZIP archive: ${e instanceof Error?e.message:String(e)}`,{cause:e})}function Jg(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=-1;for(let c=e.byteLength-22;c>=Math.max(0,e.byteLength-65557);c-=1){if(t.getUint32(c,!0)!==101010256)continue;let u=t.getUint16(c+20,!0);if(c+22+u===e.byteLength){n=c;break}}if(n<0)throw new X("the central-directory end record is missing or truncated.");if(t.getUint16(n+4,!0)!==0||t.getUint16(n+6,!0)!==0||t.getUint16(n+8,!0)!==t.getUint16(n+10,!0))throw new X("multi-disk archives are not supported.");let r=t.getUint16(n+10,!0),i=t.getUint32(n+12,!0),o=t.getUint32(n+16,!0);if(r===65535||i===4294967295||o===4294967295)throw new X("ZIP64 directory metadata is not supported.");if(o+i!==n)throw new X("the central-directory range is inconsistent.");let s=[],a=o;for(let c=0;c<r;c+=1){if(a+46>n||t.getUint32(a,!0)!==33639248)throw new X(`central-directory entry ${c+1} is missing or malformed.`);let l=t.getUint32(a+38,!0)>>>16&61440,p=t.getUint32(a+42,!0);if(p===4294967295||p>=o)throw new X(`central-directory entry ${c+1} has an invalid local offset.`);if(s.push({compression:t.getUint16(a+10,!0),compressedSize:t.getUint32(a+20,!0),crc:t.getUint32(a+16,!0),size:t.getUint32(a+24,!0),special:l!==0&&l!==32768&&l!==16384}),s.at(-1).compressedSize===4294967295||s.at(-1).size===4294967295)throw new X("ZIP64 entry sizes are not supported.");a+=46+t.getUint16(a+28,!0)+t.getUint16(a+30,!0)+t.getUint16(a+32,!0)}if(a!==n)throw new X("the central-directory entries do not fill the declared range.");return s}function Xg(e){let t=new Set;try{let n=Jg(e),r=[];if(yl(e,{filter(i){let o=n[r.length];if(!o||o.size!==i.originalSize||o.compressedSize!==i.size||o.compression!==i.compression)throw new X(`central-directory metadata is inconsistent for ${i.name}.`);bi(i.name.endsWith("/")?i.name.slice(0,-1):i.name);let s=i.name;if(t.has(s))throw new X(`multiple entries resolve to the destination ${JSON.stringify(i.name)}.`);return t.add(s),r.push({...o,name:i.name}),!1}}),r.length!==n.length)throw new X("the central-directory entry count is inconsistent.");return r}catch(n){xl(n)}}function Yg(e){if(!e.byteLength)throw new X("the archive is empty.");let t=Xg(e),n=[],r=new Set,i=new Set,o,s=new gl(a=>{try{let c=t[n.length];if(!c)throw new X(`local entry ${a.name} is absent from the central directory.`);if(a.name!==c.name||a.compression!==c.compression||a.originalSize!==void 0&&a.originalSize!==c.size||a.size!==void 0&&a.size!==c.compressedSize)throw new X(`local and central-directory metadata disagree for ${a.name}.`);bi(a.name.endsWith("/")?a.name.slice(0,-1):a.name);let u=a.name;if(i.has(u))throw new X(`multiple entries resolve to the destination ${JSON.stringify(a.name)}.`);i.add(u),c.special&&r.add(a.name);let l=[],p=0;a.ondata=(f,m,d)=>{if(!o){if(f){o=f;return}if(p+=m.byteLength,l.push(m.slice()),d){if(p!==c.size){o=new X(`entry ${a.name} has ${p} bytes; expected ${c.size}.`);return}let h=new Uint8Array(p),y=0;for(let v of l)h.set(v,y),y+=v.byteLength;if(Zg(h)>>>0!==c.crc){o=new X(`entry ${a.name} failed CRC-32 verification.`);return}n.push({path:a.name,data:h})}}},a.start()}catch(c){o=c}});s.register(ml);try{for(let a=0;a<e.byteLength;a+=16384)s.push(e.subarray(a,a+16384),a+16384>=e.byteLength)}catch(a){o=a}if(o&&xl(o),n.length!==t.length)throw new X(`decoded ${n.length} entries; the central directory declares ${t.length}.`);return{files:n.filter(a=>!a.path.endsWith("/")),special:r}}function bl(e){let t=Yg(e),n=$l(gs(t.files));for(let r of n.files.keys())if(t.special.has(r))throw new X(`required entry ${r} is not a regular file.`);return n}function El(e,t){let n=gs([{path:"woof.config.json",data:ki(`${JSON.stringify(e,null,2)}
|
|
185
|
+
`)},...t]);return $l(n),ds(Object.fromEntries(n),{level:6})}function Sl(e){return ds(Object.fromEntries(gs(e)),{level:6})}var X,Ei=G(()=>{"use strict";vl();vt();be();X=class extends Error{constructor(t,n){super(`Invalid woof bundle: ${t}`,n),this.name="BundleError"}}});import{mkdirSync as Qg,readFileSync as Tl,rmSync as ey,writeFileSync as ty}from"node:fs";import{parseArgs as ny}from"node:util";function ry(e,t){let n=J("exports");Qg(n,{recursive:!0,mode:448});for(let r=1;;r+=1){let i=r===1?"":`-${r}`,o=J("exports",`${e}${i}.woof.zip`);try{return ty(o,t,{flag:"wx",mode:384}),o}catch(s){if(s.code==="EEXIST")continue;throw ey(o,{force:!0}),s}}}var Cl,Al=G(()=>{"use strict";Ve();Ei();vt();Ge();je();De();Ze();be();Je();Cl={args:{agent:{description:"Use plain, noninteractive agent output",type:"boolean"},project:{description:"Registered project to export",type:"string"}},meta:{description:"Export a registered project and required resources",name:"export"},async run({rawArgs:e}){try{let h=function(g,E){let C=d.get(g);if(C&&!Buffer.from(C.data).equals(Buffer.from(E)))throw new Error(`Export resources collide at ${I(g)}. Choose distinct source paths.`);d.set(g,{path:g,data:E})},y=function(g){if(typeof g=="string")return g.startsWith("<repo>/")?`<root>/${s}-repo-export/${g.slice(7)}`:g;if("$type"in g||"$exec"in g){let E=g,C=T=>T.startsWith("<repo>/")?`<root>/${s}-repo-export/${T.slice(7)}`:T;return{...E,$exec:Array.isArray(E.$exec)?E.$exec.map(C):C(E.$exec)}}return Object.fromEntries(Object.entries(g).map(([E,C])=>[E,y(C)]))};var t=h,n=y;let{values:r,positionals:i}=ny({args:e,allowPositionals:!0,options:{agent:{type:"boolean"},project:{type:"string"}}});if(i.length)throw new Error(`Export accepts no positional arguments; use ${I("--project NAME")}.`);let o=r.agent===!0||!!fe(),s=r.project;if(!s&&!o&&process.stdout.isTTY){let g=se({cwd:process.cwd()}),E=$t(g.loadRootConfiguration(),g);if(!E.length)throw new Error(`No project is registered. Register one with ${I("woof init")}.`);if(s=await ke({message:"Project to export",options:E.map(C=>{let T=Ie(C);return{value:C.name,label:C.name,...T?{hint:T}:{}}})}),!s)return ae("Export cancelled. Nothing was written.")}if(!s)throw new Error(`Name the project with ${I("--project NAME")}. See the registered projects with ${I("woof projects")}. A repository project cannot be exported.`);let a=ye({project:s,loader:se({cwd:process.cwd()})}),c=a.project;if(!c||c.kind!=="registered")throw new Error("Repository-defined projects cannot be exported; select a registered home project explicitly.");let u=a.root.data.$projects?.[s];if(!u)throw new Error(`Registered project ${I(s)} has no exportable definition.`);let l=ze({...a.root.data,$projects:{[s]:u}},"root","export payload"),p={...a,root:{...a.root,data:l}},f={root:p.root,candidates:[],checkoutRoot:p.checkoutRoot,selection:"root"},m=[...nr(we(f)),...nr(we(p))],d=new Map;for(let g of m)for(let E of g.tokens)for(let C of E.files){let T=C.markedPath.startsWith("<root>/")?C.markedPath.slice(7):`${s}-repo-export/${C.markedPath.slice(7)}`;h(T,Tl(C.file))}let v=Object.fromEntries(Object.entries(c.data).map(([g,E])=>[g,g.startsWith("$")?E:y(E)])),w=ze({...a.root.data,$projects:{[s]:typeof u=="string"?u:v}},"root","export payload");if(!c.inline&&typeof u=="string"){let g=u.slice(7),E=JSON.stringify(v)===JSON.stringify(c.data)?Tl(c.source.file):Buffer.from(`${JSON.stringify(v,null,2)}
|
|
186
|
+
`);h(g,E)}let A=El(w,d.values()),S=ry(s,A);Se({summary:`Exported ${I(s)}.`,details:Re([["Archive",S],["Files",String(d.size)]])},{template:"export-result",values:{project:s,archive:S,files:d.size,archiveArgument:Z(S)}}),un("Import it with",`woof import ${Z(S)}`,null)}catch(r){let i=r instanceof Error?r.message:String(r);he({summary:"woof could not export the project.",details:i},{template:"export-error",values:{details:i}}),process.exitCode=1}}}});import{spawn as iy}from"node:child_process";import{realpathSync as oy}from"node:fs";import{setTimeout as sy}from"node:timers/promises";function uy(e,t,n){return e==="bash"?{command:"bash",args:n?[n.file]:["-c",t]}:e==="node"?{command:process.execPath,args:n?[n.file]:["-e",t]}:e==="tsx"?{command:"npx",args:["--yes","--package",`tsx@${ay}`,"tsx",...n?[n.file]:["-e",t]]}:{command:"npx",args:["--yes","--package",`bun@${cy}`,"bun",...n?["run",n.file]:["-e",t]]}}async function jl(e){try{return process.kill(-e,0),!1}catch(t){if(t.code==="ESRCH")return!0;if(t.code==="EPERM")return!1;throw t}}async function Il(e){let t=Date.now()+200;for(;Date.now()<t;){if(await jl(e))return!0;await sy(10)}return jl(e)}async function ly(e){let t=e.pid;if(!t)return;if(process.platform==="win32"){e.kill("SIGTERM");return}let n=r=>{try{process.kill(-t,r)}catch(i){if(i.code!=="ESRCH")throw i}};if(n("SIGTERM"),!await Il(t)&&(n("SIGKILL"),!await Il(t)))throw new Error(`Process group ${t} did not exit after bounded cleanup.`)}function py(e,t,n,r){let{command:i,args:o}=uy(e,t,n),s=`${i} ${o.join(" ")}`;return new Promise((a,c)=>{if(r.signal?.aborted){c(new Pt(`Cancelled before starting ${s}; no script effects were attempted.`,{cancelled:!0}));return}let u=iy(i,o,{cwd:r.cwd,detached:process.platform!=="win32",env:{...r.env,CI:"1",npm_config_audit:"false",npm_config_fund:"false",npm_config_progress:"false",npm_config_update_notifier:"false",npm_config_yes:"true"},stdio:["ignore","pipe","pipe"]}),l=[],p=0,f=!1,m=!1;function d(v,w){f||(f=!0,r.signal?.removeEventListener("abort",y),v?c(v):a(w))}function h(v){m||(m=!0,ly(u).then(()=>d(v)).catch(w=>{d(new Pt(`${v.message} Process cleanup was incomplete.`,{cancelled:v.cancelled,status:v.status,cause:w}))}))}function y(){h(new Pt(`Cancelled ${s}. Prior script effects are not rolled back.`,{cancelled:!0}))}u.stdout.on("data",v=>{if(p+=v.length,p>Rl){h(new Pt(`${s} exceeded the ${Rl}-byte output limit.`));return}l.push(v)}),u.stderr.on("data",v=>process.stderr.write(v)),u.on("error",v=>{d(new Pt(`Could not start ${s}: ${v.message}`,{cause:v}))}),u.on("close",(v,w)=>{if(!m){if(r.signal?.aborted){y();return}if(v!==0){d(new Pt(`${s} failed with ${v===null?`signal ${w}`:`exit ${v}`}. Prior script effects are not rolled back.`,{status:v}));return}d(void 0,Buffer.concat(l).toString("utf8"))}}),r.signal?.addEventListener("abort",y,{once:!0}),r.signal?.aborted&&y()})}function vs(e={}){let t=e.cwd??process.cwd(),n=oy(e.checkoutRoot??ve(t)??t),r=e.env??process.env;return async({resource:i,locations:o})=>{let s=Array.isArray(i.$exec)?i.$exec:[i.$exec],a="";for(let[c,u]of s.entries()){if(e.signal?.aborted)throw new Pt("Cancellation stopped the script array. Prior script effects are not rolled back.",{cancelled:!0});a+=await py(i.$type,u,o[c],{cwd:n,env:r,signal:e.signal})}return a}}var ay,cy,Rl,Pt,_l=G(()=>{"use strict";be();ay="4.23.15",cy="1.4.4",Rl=256*1024*1024,Pt=class extends Error{cancelled;status;constructor(t,n={}){super(t,n.cause===void 0?{}:{cause:n.cause}),this.name="ScriptExecutionError",this.cancelled=n.cancelled===!0,this.status=n.status??null}}});import{parseArgs as fy}from"node:util";function Pl(e){if(e.project?.kind!=="repository"||!e.tokens.some(n=>n.origin==="project"))return;e.tokens.some(n=>n.origin==="root"||n.origin==="project"&&n.files.some(r=>r.markedPath.startsWith("<root>/")))&&ln("get-home-dependencies")}function hy(e,t,n){let r=n?0:Math.max(...t.map(o=>o.path.length)),i=bt(e);return t.map(o=>{let{description:s,tags:a}=n?o:di(o,i),c=[o.target&&n?`alias of ${o.target}`:void 0,s,a?.length?`tags: ${a.join(", ")}`:void 0].filter(Boolean).join(" "),u=o.target?"":$n(o.kind),l=`${xn(o.origin)}${u?` ${u}`:""}`;return`${n?"- ":""}${o.path.padEnd(r)} ${l}${c?` ${Oe(c)}`:""}`}).join(`
|
|
187
|
+
`)}var Ol,Nl=G(()=>{"use strict";Ve();ur();Ge();De();Ze();be();_l();Je();Ol={args:{agent:{description:"Use plain, noninteractive agent output",type:"boolean"},project:{description:"Select a registered project",type:"string"},query:{description:"Exact token address or discovery terms",type:"positional",required:!1},search:{description:"Discover metadata without executing a match",type:"boolean"}},meta:{description:"Resolve an exact token or discover resources",name:"get"},async run({rawArgs:e}){let t=new AbortController,n=()=>t.abort();try{let{values:r,positionals:i}=fy({args:e,allowPositionals:!0,options:{agent:{type:"boolean"},project:{type:"string"},search:{type:"boolean"}}}),o=r.agent===!0||!!fe(),s=i.join(" "),a=i.length===1&&s.startsWith("$projects.")?jt(s):void 0;if(a?.project&&r.project&&a.project!==r.project)throw new Error(`Qualified address selects ${I(a.project)}, which contradicts ${I(`--project ${r.project}`)}.`);let c=a?.project??r.project,u=r.search===!0;process.on("SIGINT",n),process.on("SIGTERM",n);let l=ye({...c?{project:c}:{},loader:se({cwd:process.cwd()})});if(l.selection==="ambiguous"){let g=l.candidates;if(!o&&process.stdout.isTTY){let E=await ke({message:"Project to use",options:g.map(C=>{let T=Ie(C);return{value:C.name,label:C.name,...T?{hint:T}:{}}})});if(!E)return ae("Lookup cancelled.");l=ye({project:E,loader:se({cwd:process.cwd()})})}else{let E=g.map(T=>{let R=Ie(T),$=`${o?"- ":""}${T.name}`;return R?`${$} ${Oe(R)}`:$}).join(`
|
|
188
|
+
`),C=`woof get${s?` ${Z(s)}`:""}${u?" --search":""} --project NAME${o?" --agent":""}`;He({summary:"Several projects match this directory.",details:E,recovery:`Retry with ${I(C)}, with NAME replaced by the project name.`},{template:"get-ambiguous",values:{projects:E,command:C}}),process.exitCode=1;return}}let p=we(l),f=a?.path??s;if(!!s&&!u&&p.tokens.has(f)){let g=await $o(p,s,vs({checkoutRoot:l.checkoutRoot,signal:t.signal}),Pl);Go(g);return}if(!o&&process.stdout.isTTY&&p.tokens.size){let g=await Vt({message:"Token to get",tokens:bt(p),query:f});if(!g)return ae("Lookup cancelled.");Go(await $o(p,g,vs({checkoutRoot:l.checkoutRoot,signal:t.signal}),Pl));return}let d=bt(p,f),h=l.project?.kind==="registered"?l.project:void 0,y=hy(p,d,o),v=h?` --project ${Z(h.name)}`:"",w=`woof get 'PATH'${v}${o?" --agent":""}`,A=`woof get 'TERMS' --search${v}${o?" --agent":""}`,S=u?d.length?"get-search":"get-search-empty":d.length?"get-candidates":"get-no-match";He({summary:d.length?u?"Matching resources":"No token has this exact address. These resources match:":"No resources matched this lookup.",details:y,recovery:d.length?`Get a token with ${I(w)}.`:`Search with other terms: ${I(A)}.`},{template:S,values:{candidates:y,command:w,search:A}}),!u&&s&&(process.exitCode=1)}catch(r){let i=r instanceof Error?r.message:String(r);t.signal.aborted?(Wt({summary:"woof lookup was cancelled.",details:i,recovery:"Earlier completed effects are not rolled back."},{template:"get-cancelled",values:{details:i}}),process.exitCode=130):(he({summary:"woof could not complete the lookup.",details:i,recovery:`Search the tokens with ${I("woof get")}.`},{template:"get-error",values:{details:i}}),process.exitCode=1)}finally{process.removeListener("SIGINT",n),process.removeListener("SIGTERM",n)}}}});var vr,Ll=G(()=>{vr=class{diff(t,n,r={}){let i;typeof r=="function"?(i=r,r={}):"callback"in r&&(i=r.callback);let o=this.castInput(t,r),s=this.castInput(n,r),a=this.removeEmpty(this.tokenize(o,r)),c=this.removeEmpty(this.tokenize(s,r));return this.diffWithOptionsObj(a,c,r,i)}diffWithOptionsObj(t,n,r,i){var o;let s=w=>{if(w=this.postProcess(w,r),i){setTimeout(function(){i(w)},0);return}else return w},a=n.length,c=t.length,u=1,l=a+c;r.maxEditLength!=null&&(l=Math.min(l,r.maxEditLength));let p=(o=r.timeout)!==null&&o!==void 0?o:1/0,f=Date.now()+p,m=[{oldPos:-1,lastComponent:void 0}],d=this.extractCommon(m[0],n,t,0,r);if(m[0].oldPos+1>=c&&d+1>=a)return s(this.buildValues(m[0].lastComponent,n,t));let h=-1/0,y=1/0,v=()=>{for(let w=Math.max(h,-u);w<=Math.min(y,u);w+=2){let A,S=m[w-1],g=m[w+1];S&&(m[w-1]=void 0);let E=!1;if(g){let T=g.oldPos-w;E=g&&0<=T&&T<a}let C=S&&S.oldPos+1<c;if(!E&&!C){m[w]=void 0;continue}if(!C||E&&S.oldPos<g.oldPos?A=this.addToPath(g,!0,!1,0,r):A=this.addToPath(S,!1,!0,1,r),d=this.extractCommon(A,n,t,w,r),A.oldPos+1>=c&&d+1>=a)return s(this.buildValues(A.lastComponent,n,t))||!0;m[w]=A,A.oldPos+1>=c&&(y=Math.min(y,w-1)),d+1>=a&&(h=Math.max(h,w+1))}u++};if(i)(function w(){setTimeout(function(){if(u>l||Date.now()>f)return i(void 0);v()||w()},0)})();else for(;u<=l&&Date.now()<=f;){let w=v();if(w)return w}}addToPath(t,n,r,i,o){let s=t.lastComponent;return s&&!o.oneChangePerToken&&s.added===n&&s.removed===r?{oldPos:t.oldPos+i,lastComponent:{count:s.count+1,added:n,removed:r,previousComponent:s.previousComponent}}:{oldPos:t.oldPos+i,lastComponent:{count:1,added:n,removed:r,previousComponent:s}}}extractCommon(t,n,r,i,o){let s=n.length,a=r.length,c=t.oldPos,u=c-i,l=0;for(;u+1<s&&c+1<a&&this.equals(r[c+1],n[u+1],o);)u++,c++,l++,o.oneChangePerToken&&(t.lastComponent={count:1,previousComponent:t.lastComponent,added:!1,removed:!1});return l&&!o.oneChangePerToken&&(t.lastComponent={count:l,previousComponent:t.lastComponent,added:!1,removed:!1}),t.oldPos=c,u}equals(t,n,r){return r.comparator?r.comparator(t,n):t===n||!!r.ignoreCase&&t.toLowerCase()===n.toLowerCase()}removeEmpty(t){let n=[];for(let r=0;r<t.length;r++)t[r]&&n.push(t[r]);return n}castInput(t,n){return t}tokenize(t,n){return Array.from(t)}join(t){return t.join("")}postProcess(t,n){return t}get useLongestToken(){return!1}buildValues(t,n,r){let i=[],o;for(;t;)i.push(t),o=t.previousComponent,delete t.previousComponent,t=o;i.reverse();let s=i.length,a=0,c=0,u=0;for(;a<s;a++){let l=i[a];if(l.removed)l.value=this.join(r.slice(u,u+l.count)),u+=l.count;else{if(!l.added&&this.useLongestToken){let p=n.slice(c,c+l.count);p=p.map(function(f,m){let d=r[u+m];return d.length>f.length?d:f}),l.value=this.join(p)}else l.value=this.join(n.slice(c,c+l.count));c+=l.count,l.added||(u+=l.count)}}return i}}});function ks(e,t,n){return dy.diff(e,t,n)}function my(e,t){t.stripTrailingCr&&(e=e.replace(/\r\n/g,`
|
|
189
|
+
`));let n=[],r=e.split(/(\n|\r\n)/);r[r.length-1]||r.pop();for(let i=0;i<r.length;i++){let o=r[i];i%2&&!t.newlineIsToken?n[n.length-1]+=o:n.push(o)}return n}var ws,dy,Dl=G(()=>{Ll();ws=class extends vr{constructor(){super(...arguments),this.tokenize=my}equals(t,n,r){return r.ignoreWhitespace?((!r.newlineIsToken||!t.includes(`
|
|
190
|
+
`))&&(t=t.trim()),(!r.newlineIsToken||!n.includes(`
|
|
191
|
+
`))&&(n=n.trim())):r.ignoreNewlineAtEof&&!r.newlineIsToken&&(t.endsWith(`
|
|
192
|
+
`)&&(t=t.slice(0,-1)),n.endsWith(`
|
|
193
|
+
`)&&(n=n.slice(0,-1))),super.equals(t,n,r)}},dy=new ws});function gy(e){for(let t=0;t<e.length;t++)if(e[t]<" "||e[t]>"~"||e[t]==='"'||e[t]==="\\")return!0;return!1}function Jt(e){if(!gy(e))return e;let t='"',n=new TextEncoder().encode(e),r=0;for(;r<n.length;){let i=n[r];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===34?t+='\\"':i===92?t+="\\\\":i>=32&&i<=126?t+=String.fromCharCode(i):t+="\\"+i.toString(8).padStart(3,"0"),r++}return t+='"',t}function xs(e,t,n,r,i,o,s){let a;s?typeof s=="function"?a={callback:s}:a=s:a={},typeof a.context>"u"&&(a.context=4);let c=a.context;if(a.newlineIsToken)throw new Error("newlineIsToken may not be used with patch-generation functions, only with diffing functions");if(a.callback){let{callback:l}=a;ks(n,r,Object.assign(Object.assign({},a),{callback:p=>{let f=u(p);l(f)}}))}else return u(ks(n,r,a));function u(l){if(!l)return;l.push({value:"",lines:[]});function p(w){return w.map(function(A){return" "+A})}let f=[],m=0,d=0,h=[],y=1,v=1;for(let w=0;w<l.length;w++){let A=l[w],S=A.lines||yy(A.value);if(A.lines=S,A.added||A.removed){if(!m){let g=l[w-1];m=y,d=v,g&&(h=c>0?p(g.lines.slice(-c)):[],m-=h.length,d-=h.length)}for(let g of S)h.push((A.added?"+":"-")+g);A.added?v+=S.length:y+=S.length}else{if(m)if(S.length<=c*2&&w<l.length-2)for(let g of p(S))h.push(g);else{let g=Math.min(S.length,c);for(let C of p(S.slice(0,g)))h.push(C);let E={oldStart:m,oldLines:y-m+g,newStart:d,newLines:v-d+g,lines:h};f.push(E),m=0,d=0,h=[]}y+=S.length,v+=S.length}}for(let w of f)for(let A=0;A<w.lines.length;A++)w.lines[A].endsWith(`
|
|
194
|
+
`)?w.lines[A]=w.lines[A].slice(0,-1):(w.lines.splice(A+1,0,"\"),A++);return{oldFileName:e,newFileName:t,oldHeader:i,newHeader:o,hunks:f}}}function Si(e,t){var n,r,i,o,s,a;if(t||(t=$s),Array.isArray(e)){if(e.length>1&&!t.includeFileHeaders&&!e.every(l=>l.isGit))throw new Error("Cannot omit file headers on a multi-file patch. (The result would be unparseable; how would a tool trying to apply the patch know which changes are to which file?)");return e.map(l=>Si(l,t)).join(`
|
|
195
|
+
`)}let c=[];if(e.isGit){if(t=$s,!e.oldFileName)throw new Error("oldFileName must be specified for Git patches");if(!e.newFileName)throw new Error("newFileName must be specified for Git patches");let l=e.oldFileName,p=e.newFileName;e.isCreate&&l==="/dev/null"?l=p.replace(/^b\//,"a/"):e.isDelete&&p==="/dev/null"&&(p=l.replace(/^a\//,"b/")),c.push("diff --git "+Jt(l)+" "+Jt(p)),e.isDelete&&c.push("deleted file mode "+((n=e.oldMode)!==null&&n!==void 0?n:"100644")),e.isCreate&&c.push("new file mode "+((r=e.newMode)!==null&&r!==void 0?r:"100644")),e.oldMode&&e.newMode&&!e.isDelete&&!e.isCreate&&(c.push("old mode "+e.oldMode),c.push("new mode "+e.newMode)),e.isRename&&(c.push("rename from "+Jt(((i=e.oldFileName)!==null&&i!==void 0?i:"").replace(/^a\//,""))),c.push("rename to "+Jt(((o=e.newFileName)!==null&&o!==void 0?o:"").replace(/^b\//,"")))),e.isCopy&&(c.push("copy from "+Jt(((s=e.oldFileName)!==null&&s!==void 0?s:"").replace(/^a\//,""))),c.push("copy to "+Jt(((a=e.newFileName)!==null&&a!==void 0?a:"").replace(/^b\//,""))))}else t.includeIndex&&e.oldFileName==e.newFileName&&e.oldFileName!==void 0&&c.push("Index: "+e.oldFileName),t.includeUnderline&&c.push("===================================================================");let u=e.hunks.length>0;t.includeFileHeaders&&e.oldFileName!==void 0&&e.newFileName!==void 0&&(!e.isGit||u)&&(c.push("--- "+Jt(e.oldFileName)+(e.oldHeader?" "+e.oldHeader:"")),c.push("+++ "+Jt(e.newFileName)+(e.newHeader?" "+e.newHeader:"")));for(let l=0;l<e.hunks.length;l++){let p=e.hunks[l],f=p.oldLines===0?p.oldStart-1:p.oldStart,m=p.newLines===0?p.newStart-1:p.newStart;c.push("@@ -"+f+","+p.oldLines+" +"+m+","+p.newLines+" @@");for(let d of p.lines)c.push(d)}return c.join(`
|
|
196
|
+
`)+`
|
|
197
|
+
`}function Ml(e,t,n,r,i,o,s){if(typeof s=="function"&&(s={callback:s}),s?.callback){let{callback:a}=s;xs(e,t,n,r,i,o,Object.assign(Object.assign({},s),{callback:c=>{a(c?Si(c,s.headerOptions):void 0)}}))}else{let a=xs(e,t,n,r,i,o,s);return a?Si(a,s?.headerOptions):void 0}}function bs(e,t,n,r,i,o){return Ml(e,e,t,n,r,i,o)}function yy(e){let t=e.endsWith(`
|
|
198
|
+
`),n=e.split(`
|
|
199
|
+
`).map(r=>r+`
|
|
200
|
+
`);return t?n.pop():n.push(n.pop().slice(0,-1)),n}var $s,Fl=G(()=>{Dl();$s={includeIndex:!0,includeUnderline:!0,includeFileHeaders:!0}});var zl=G(()=>{Fl()});import{createHash as vy,randomUUID as wy}from"node:crypto";import{chmodSync as ky,lstatSync as $y,mkdirSync as ql,readFileSync as Ss,realpathSync as $r,renameSync as Bl,rmdirSync as xy,rmSync as Rs,statSync as Ai,writeFileSync as by}from"node:fs";import{basename as Ey,dirname as Ts,isAbsolute as Kl,join as Ri,relative as Sy,resolve as ji,sep as Cs,win32 as Ty}from"node:path";import{isDeepStrictEqual as Gl}from"node:util";function Ti(e){return vy("sha256").update(e).digest("hex")}function Ci(e,t){return e.byteLength===t.byteLength&&e.every((n,r)=>n===t[r])}function Zl(e){if(!e||Cs==="\\"&&e.includes("\\")||e.includes("\0")||Kl(e)||Cs==="\\"&&Ty.isAbsolute(e)||e.split("/").some(t=>!t||t==="."||t===".."))throw new Error(`Unsafe import destination: ${e}`)}function kr(e,t){let n=Sy(e,t);return n===""||!n.startsWith(`..${Cs}`)&&n!==".."&&!Kl(n)}function Ii(e,t){Zl(t);let n=ji(e,t);try{if(t!=="woof.config.json"&&!kr($r(e),$r(n)))throw new Error(`Import destination escapes the woof home: ${t}`);if(!Ai(n).isFile())throw new Error(`Import destination is not a regular file: ${t}`);return Ss(n)}catch(r){if(r.code==="ENOENT")return;throw r}}function Ul(e,t){let n=Ii(e,t.path),r=n?Ti(n):null,i=Xt(e,t.path).target;if(r!==t.digest||i!==t.physical)throw new Error(`Import destination ${t.path} changed after review; stale decisions were not applied.`);return n}function Xt(e,t){Zl(t);let n=$r(e),r=ji(n,t),i=n,o=t.split("/");for(let s=0;s<o.length;s+=1){i=Ri(i,o[s]);try{if($y(i).isSymbolicLink()){try{i=$r(i)}catch(u){throw new Error(`Import destination has an unresolved symbolic link: ${i}`,{cause:u})}if(!(t==="woof.config.json"&&s===o.length-1)&&!kr(n,i))throw new Error(`Import destination escapes the woof home: ${t}`)}let c=Ai(i);if(s===o.length-1&&!c.isFile())throw new Error(`Import destination is not a regular file: ${t}`);if(s<o.length-1&&!c.isDirectory())throw new Error(`Import destination parent is not a directory: ${t}`)}catch(a){if(a.code!=="ENOENT")throw a;let c=ji(i,...o.slice(s+1));if(!kr(n,c))throw new Error(`Import destination escapes the woof home: ${t}`,{cause:a});return{target:c,mode:384}}}if(t!=="woof.config.json"&&!kr(n,i))throw new Error(`Import destination escapes the woof home: ${t}`);return{target:i,mode:Ai(r).mode&4095}}function Hl(e){return new TextEncoder().encode(`${JSON.stringify(e,null,2)}
|
|
201
|
+
`)}function Cy(e,t){let n=[];for(let[i,o]of[...e.files].sort(([s],[a])=>s.localeCompare(a))){let s=e.sources.find(u=>u.path===i);if(!s)throw new Error(`Reviewed source state is missing for ${i}.`);let a=t.get(i);if(a&&Ci(a,o))continue;let c=Xt(e.home,i);n.push({path:i,data:o,original:a,originalDigest:s.digest,mode:c.mode,target:c.target,kind:"resource"})}if(e.projectFile){let{path:i,data:o}=e.projectFile,s=t.get(i),a=Hl(o);if(!(e.initialProject?.path===i&&Gl(e.initialProject.data,o)||s&&Ci(s,a))){let u=e.sources.find(p=>p.path===i);if(!u)throw new Error(`Reviewed project source state is missing for ${i}.`);let l=Xt(e.home,i);n.push({path:i,data:a,original:s,originalDigest:u.digest,mode:l.mode,target:l.target,kind:"project"})}}if(!Gl(e.local,e.configuration)){let i="woof.config.json",o=e.sources.find(c=>c.path===i);if(!o)throw new Error("Reviewed root source state is missing.");let s=t.get(i),a=Xt(e.home,i);n.push({path:i,data:Hl(e.configuration),original:s,originalDigest:o.digest,mode:a.mode,target:a.target,kind:"registry"})}let r=new Map;for(let i of n){let o=r.get(i.target);if(o&&!Ci(o.data,i.data))throw new Error(`Import paths ${o.path} and ${i.path} require conflicting writes to the same file.`);o||r.set(i.target,i)}return[...r.values()]}function Ay(e,t){let n=$r(e),r=ji(n,t),i=Ts(r),o=[],s=i;for(;s!==n;){if(!kr(n,s))throw new Error(`Import parent escapes the woof home: ${t}`);try{if(!Ai(s).isDirectory())throw new Error(`Import parent is not a directory: ${s}`);break}catch(a){if(a.code!=="ENOENT")throw a;o.unshift(s),s=Ts(s)}}return o}function As(e,t,n){by(e,t,{flag:"wx",mode:n}),ky(e,n)}function Es(e){let t=[];for(let n of e)try{Rs(n,{force:!0})}catch(r){t.push(`Could not remove temporary artifact ${n}: ${r instanceof Error?r.message:String(r)}`)}return t}function Wl(e){let t=[];for(let n of e.sort((r,i)=>i.length-r.length))try{xy(n)}catch(r){let i=r.code;if(i==="ENOTEMPTY"||i==="EEXIST"||i==="ENOENT")continue;t.push(`Could not remove empty import directory ${n}: ${r instanceof Error?r.message:String(r)}`)}return t}function Vl(e,t){return Ri(Ts(e),`.${Ey(e)}.woof-import-${t}-${wy()}.tmp`)}function wr(e,t,n,r=[],i=[],o){return{completed:e,restored:t,pending:n,recovery:r,warnings:i,...o?{backup:o}:{}}}function Ry(e,t){let n=new Map,r=c=>{if(n.has(c))return;let u=Ii(e.home,c);u&&n.set(c,u)};r("woof.config.json");let i=[];for(let c of Object.values(e.local.$projects??{})){if(typeof c!="string"){i.push(c);continue}let u=c.slice(7);r(u);let l=n.get(u);l&&i.push(Ke(new TextDecoder().decode(l),"project",u))}for(let c of ys(e.local,...i))c.startsWith("<root>/")&&r(c.slice(7));for(let c of t)c.original&&n.set(c.path,c.original);let o=Sl([...n].sort(([c],[u])=>c.localeCompare(u)).map(([c,u])=>({path:c,data:u}))),s=Ri(e.home,".backups");ql(s,{recursive:!0,mode:448});let a=new Date().toISOString().replaceAll(":","-");for(let c=1;;c+=1){let u=Ri(s,`import-${a}${c===1?"":`-${c}`}.zip`);try{return As(u,o,384),u}catch(l){if(l.code==="EEXIST")continue;throw Rs(u,{force:!0}),l}}}function Jl(e){let t=new Map;for(let c of e.sources)t.set(c.path,Ul(e.home,c));for(let c of e.externalSources)if(Ti(Ss(c.path))!==c.digest)throw new Error(`Reuse source ${c.path} changed after review.`);let n=Cy(e,t);if(!n.length)return wr([],[],[]);let r;try{r=Ry(e,n)}catch(c){throw new Tt(`Import backup failed before any change: ${c instanceof Error?c.message:String(c)}`,wr([],[],n.map(u=>u.path)),{cause:c})}let i=[],o=[];try{for(let c of n){for(let p of Ay(e.home,c.path))ql(p),i.push(p);let u=Vl(c.target,"stage"),l={...c,staging:u,backup:void 0};if(o.push(l),As(u,c.data,c.mode),c.original){let p=Vl(c.target,"backup");l.backup=p,As(p,c.original,c.mode)}}for(let c of e.sources)Ul(e.home,c);for(let c of e.externalSources)if(Ti(Ss(c.path))!==c.digest)throw new Error(`Reuse source ${c.path} changed after review.`)}catch(c){let u=[...Es(o.flatMap(l=>[l.staging,...l.backup?[l.backup]:[]])),...Wl(i)];throw new Tt(`Import staging failed before any live replacement: ${c instanceof Error?c.message:String(c)}`,wr([],[],n.map(l=>l.path),[],u,r),{cause:c})}let s=[];try{for(let c of o){let u=Ii(e.home,c.path);if((u?Ti(u):null)!==c.originalDigest)throw new Error(`Import destination ${c.path} changed before replacement; stale decisions were not applied.`);if(Xt(e.home,c.path).target!==c.target)throw new Error(`Import destination ${c.path} changed location before replacement.`);Bl(c.staging,c.target),s.push(c)}}catch(c){let u=[],l=[],p=[];for(let y of[...s].reverse())try{let v=y.target;if(Xt(e.home,y.path).target!==v)throw new Error(`Import destination ${y.path} changed location before rollback.`,{cause:c});let w=Ii(e.home,y.path);if(!w||!Ci(w,y.data)){y.backup&&l.push(y.backup),p.push(`${y.path} changed after replacement and was not overwritten during rollback.`);continue}y.original?Bl(y.backup,v):Rs(v),u.push(y.path)}catch(v){y.backup&&l.push(y.backup),p.push(`${y.path} could not be restored: ${v instanceof Error?v.message:String(v)}`)}let f=new Set(s.map(y=>y.backup).filter(Boolean)),m=o.filter(y=>!f.has(y.backup)&&y.backup).map(y=>y.backup),d=[...Es([...o.map(y=>y.staging),...m]),...Wl(i)],h=o.filter(y=>!s.includes(y)).map(y=>y.path);throw new Tt(`Import failed: ${c instanceof Error?c.message:String(c)}. ${p.join(" ")}`,wr(s.map(y=>y.path),u,h,[...new Set(l)],[...d,...p],r),{cause:c})}let a=Es(o.flatMap(c=>[c.staging,...c.backup?[c.backup]:[]]));return wr(s.map(c=>c.path),[],[],o.filter(c=>c.backup&&a.some(u=>u.includes(c.backup))).map(c=>c.backup),a,r)}var Tt,js=G(()=>{"use strict";Ei();vt();Tt=class extends Error{report;constructor(t,n,r){super(t,r),this.name="ImportApplyError",this.report=n}}});import{createHash as jy}from"node:crypto";function Ct(e){let t=new Map;function n(r,i){for(let[o,s]of Object.entries(r)){if(o.startsWith("$"))continue;let a=i?`${i}.${o}`:o;typeof s=="string"||s&&typeof s=="object"&&("$type"in s||"$exec"in s)?t.set(a,s):s&&typeof s=="object"&&n(s,a)}}return n(e,""),t}function mt(e,t){let n=e;for(let r of t.split(".")){if(!n||typeof n!="object"||Array.isArray(n)||!Object.hasOwn(n,r))return;n=n[r]}return n}function _i(e,t,n){let r=t.split("."),i=e;for(let o of r.slice(0,-1)){let s=i[o];if(s===void 0)i[o]={};else if(!s||typeof s!="object"||Array.isArray(s)||"$type"in s||"$exec"in s)throw new Error(`Token address ${t} conflicts with the existing token ${o}.`);i=i[o]}i[r.at(-1)]=structuredClone(n)}function Pi(e){if(!/^[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)*$/.test(e)||e.split(".").some(t=>["__proto__","prototype","constructor"].includes(t)))throw new Error(`Invalid token address: ${e}`)}function Xl(e,t){return typeof e=="string"?e.startsWith("<root>/")||e.startsWith("<repo>/")?e:Yr(e,t):e.$type==="prompt"&&!e.$exec.startsWith("<root>/")&&!e.$exec.startsWith("<repo>/")?{...e,$exec:Yr(e.$exec,t)}:e}function Yt(e){return(typeof e=="string"?[e]:Array.isArray(e.$exec)?e.$exec:[e.$exec]).filter(n=>n.startsWith("<root>/")||n.startsWith("<repo>/"))}function Yl(e,t){if(typeof e=="string")return t.get(e)??e;let n=r=>t.get(r)??r;return{...e,$exec:Array.isArray(e.$exec)?e.$exec.map(n):n(e.$exec)}}function Is(e,t){let n=Buffer.from(e).toString("latin1"),r=Yr(n,t);return r===n?e:Buffer.from(r,"latin1")}function gt(e,t,n=new Map){let r=typeof e=="string"||e.$type==="prompt",i=typeof e=="string"?"prompt":e.$type,o=typeof e=="string"?[e]:Array.isArray(e.$exec)?e.$exec:[e.$exec],s=[];for(let a of o){let c=a.startsWith("<root>/")||a.startsWith("<repo>/"),u=c?t(a):new TextEncoder().encode(a);if(!u)return;let l=r?Is(u,n):u,p=jy("sha256").update(l).digest("hex");s.push(`${r?"":c?"file:":"inline:"}${p}`)}return JSON.stringify({type:i,array:!r&&typeof e!="string"&&Array.isArray(e.$exec),parts:s})}function Ot(e){return typeof e=="string"||!!(e&&typeof e=="object"&&("$type"in e||"$exec"in e))}var Ql=G(()=>{"use strict";Je()});import{createHash as Iy}from"node:crypto";import{readFileSync as Ns,realpathSync as Ln,statSync as _y}from"node:fs";import{isAbsolute as tp,relative as Py,resolve as On,sep as Ps,win32 as Oy}from"node:path";import{isDeepStrictEqual as gn}from"node:util";function Nt(e){return Iy("sha256").update(e).digest("hex")}function ep(e){return e instanceof Uint8Array?Nt(e):Nt(JSON.stringify(e)??"undefined")}function ct(e,t,n,r){let i=ep(n),o=ep(r);return{id:Nt(`${e}\0${t}`).slice(0,32),kind:e,path:t,existing:n,incoming:r,existingDigest:i,incomingDigest:o}}function _s(e,t){return Object.fromEntries(Object.entries(e).filter(([n])=>n!=="$schemaVersion"&&n!=="$projects"&&(!t||n!=="$metadata")))}function xr(e){if(!e||Ps==="\\"&&e.includes("\\")||e.includes("\0")||tp(e)||Ps==="\\"&&Oy.isAbsolute(e)||e.split("/").some(t=>!t||t==="."||t===".."))throw new Error(`Unsafe home resource destination: ${e}`);return e}function Os(e,t){let n=Py(e,t);return n===""||!n.startsWith(`..${Ps}`)&&n!==".."&&!tp(n)}function Me(e,t){return e.byteLength===t.byteLength&&e.every((n,r)=>n===t[r])}function Ny(e,t){xr(t);let n=On(e,t);try{if(t!=="woof.config.json"&&!Os(Ln(e),Ln(n)))throw new Error(`Import destination escapes the woof home: ${t}`);if(!_y(n).isFile())throw new Error(`Import destination is not a regular file: ${t}`);return Ns(n)}catch(r){if(r.code==="ENOENT")return;throw r}}function Ls(e,t){let n=Ny(e,t);return{path:t,digest:n?Nt(n):null,physical:Xt(e,t).target,...n?{data:n}:{}}}function Ly(e,t,n){let r=e.$projects?.[t.projectName];if(r===void 0)return{definition:r,data:void 0,file:void 0,source:void 0};if(typeof r=="string"){let i=r.slice(7),o=Ls(n,i);if(!o.data)throw new Error(`Local selected project configuration is missing: ${i}`);let s=Ke(new TextDecoder().decode(o.data),"project",i);return{definition:r,data:s,file:{path:i,data:s},source:o}}return{definition:r,data:r,file:void 0,source:void 0}}function me(e,t){let n=e.snapshots.get(t);return n||(n=Ls(e.home,t),e.snapshots.set(t,n)),n}function Qt(e,t){if(t.startsWith("<root>/"))try{return me(e,t.slice(7)).data}catch{return}if(!(!t.startsWith("<repo>/")||!e.checkout))try{let n=kt(t,{repoRoot:e.checkout}).file,r=Ns(n),i=Nt(r),o=e.external.get(n);if(o&&o!==i)throw new Error(`Reuse source changed during review: ${n}`);return e.external.set(n,i),r}catch(n){if(n.code==="ENOENT")return;if(n instanceof Error&&n.message.startsWith("Reuse source changed"))throw n;return}}function yn(e,t){return t.startsWith("<root>/")?e.bundle.files.get(t.slice(7)):void 0}function np(e){return Object.entries(e.local.$projects??{}).flatMap(([t,n])=>{if(typeof n!="string")return[[t,n]];let r=Qt(e,n);if(!r)return[];try{return[[t,Ke(new TextDecoder().decode(r),"project",n.slice(7))]]}catch{return[]}})}function Dy(e,t){let n=new Set,r=[["",e.local],...np(e)];for(let[i,o]of r)for(let[s,a]of Ct(o))Yt(a).includes(t)&&n.add(`${i}\0${s}`);return n}function My(e,t){let n=Ct(e.local),r=i=>typeof i!="string"&&i.$type!=="prompt"?[]:(typeof i=="string"?[i]:Array.isArray(i.$exec)?i.$exec:[i.$exec]).flatMap(s=>{if(s.startsWith("<repo>/"))return[];let a=s.startsWith("<root>/")?Qt(e,s):void 0;return s.startsWith("<root>/")&&!a?[]:Xr(a?new TextDecoder().decode(a):s)});return np(e).flatMap(([i,o])=>{let s=Ct(o);if(s.has(t))return[];let a=new Set,c=u=>{if(u===t)return!0;if(a.has(u))return!1;a.add(u);let l=s.get(u)??n.get(u);return l?r(l).some(c):!1};return[...s.values()].some(u=>r(u).some(c))?[i]:[]})}function Fy(e,t,n){if(!Ot(t)||!Ot(n))return t;let r=`<root>/${e.bundle.projectName}-repo-export/`,i=Yt(n),o=a=>{let c=`<repo>/${a.slice(r.length)}`;return a.startsWith(r)&&i.includes(c)?c:a},s=t;return typeof s=="string"?o(s):{...s,$exec:Array.isArray(s.$exec)?s.$exec.map(o):o(s.$exec)}}function Nn(e){return typeof e=="string"?e:e?.action}function zy(e){for(let[t,n]of Object.entries(e))if(!(n==="keep"||n==="take")&&(!n||typeof n!="object"||!["add","reuse"].includes(n.action)||typeof n.address!="string"))throw new Error(`Import decision ${t} must be keep, take, or an add/reuse choice with an address.`)}function By(e,t,n,r,i,o,s,a){let c=Xl(o,s),u=ct(t,n,i,c),l=gt(o,f=>yn(e,f),s);u.incomingDigest=Nt(`${u.incomingDigest}\0${l??"missing content"}`),u.existingDigest=Nt(`${u.existingDigest}\0${Ot(i)?gt(i,f=>Qt(e,f))??"missing content":""}`),u.candidates=[...a.entries()].filter(([f,m])=>f!==n&&l!==void 0&>(m,d=>Qt(e,d))===l).map(([f])=>f).sort(),u.candidateDetails=u.candidates.map(f=>{let m=a.get(f);return typeof m=="string"?{address:f}:{address:f,...m.$description!==void 0?{description:m.$description}:{},...m.$tags!==void 0?{tags:m.$tags}:{}}});let p=Ot(i)?Yt(i):[];if(u.files=Yt(o).flatMap((f,m)=>{let d=p.includes(f)?f:p[m],h=d?Qt(e,d):void 0,y=yn(e,f);return!h&&!y||h&&y&&Me(h,y)?[]:[{reference:f,...h?{existing:h}:{},...y?{incoming:y}:{}}]}),t==="token"&&i!==void 0){let f=My(e,n);f.length&&(u.notice=`Taking this shared token affects the projects that use it: ${f.join(", ")}.`)}return l===void 0&&(u.notice=`${u.notice?`${u.notice} `:""}Incoming file content is unavailable; it cannot be matched for reuse.`),r!==n&&(u.notice=`${u.notice?`${u.notice} `:""}Imported address maps to ${r}.`),u}function rp(e,t={}){let n=t.cwd??process.cwd(),r=Ln(t.home??J()),i=bl(e),o=Ls(r,"woof.config.json");if(!o.data)throw new Error("The local root configuration is missing; initialize woof before import planning.");let s=Ke(new TextDecoder().decode(o.data),"root",J("woof.config.json")),a=Ly(s,i,r),c=a.data?Qn({name:i.projectName,data:a.data},n,ve(n)):void 0,u={archiveDigest:Nt(e),bundle:i,checkout:c,cwd:n,home:r,local:s,selected:a,snapshots:new Map([[o.path,o]]),external:new Map,conflicts:[]};a.source&&u.snapshots.set(a.source.path,a.source);let l=i.projectReference?.slice(7);l&&me(u,l);for(let f of i.files.keys())f!=="woof.config.json"&&me(u,f);for(let f of Object.values(s.$projects??{}))typeof f=="string"&&me(u,f.slice(7));let p=ip(u,{});return u.conflicts=p.issues,u}function ip(e,t){zy(t);let n=Ct(e.bundle.configuration),r=Ct(e.bundle.project),i=Ct(e.local),o=Ct(e.selected.data??{}),s=new Map;for(let x of n.keys()){let j=t[ct("token",x,void 0,void 0).id];j&&typeof j=="object"&&(Pi(j.address),s.set(x,j.address))}for(let x of r.keys()){let j=t[ct("project-token",x,void 0,void 0).id];j&&typeof j=="object"&&!n.has(x)&&(Pi(j.address),s.set(x,j.address))}let a=[],c=[],u=[],l=[],p=new Set,f=structuredClone(_s(e.local,!1)),m=structuredClone(_s(e.selected.data??{},!0)),d=new Map([...i,...o]),h=(x,j,P)=>{let k=x==="root"?"token":"project-token",b=ct(k,j,void 0,void 0).id,N=t[b],_=Nn(N),O=s.get(j)??j,z=x==="root"&&N&&typeof N=="object"?N.address:O,B=x==="root"?e.local:e.selected.data??{},W=mt(B,x==="root"?j:z),q=By(e,k,j,z,W,P,s,x==="root"?i:d);x==="project"&&n.has(j)&&(q.notice=`${q.notice?`${q.notice} `:""}A reused token at another address is connected through a project alias at ${O}.`);let U=z===j&&gn(W,Fy(e,q.incoming,W))&&Ot(W)&>(W,re=>Qt(e,re))!==void 0&>(W,re=>Qt(e,re))===gt(P,re=>yn(e,re),s);if((!U||N)&&(a.push(q),l.push({item:q,origin:x,value:P,candidates:x==="root"?i:d})),U&&!N||!_||_==="keep")return;if(_==="reuse"){if(!N||typeof N=="string"||!q.candidates?.includes(N.address)){q.invalid=!0,q.notice=`Reuse for ${j} is no longer compatible; review this choice again.`;return}let re=(x==="root"?i:d).get(N.address),M={item:q,origin:x,value:P,address:N.address,original:re};if(u.push(M),x==="project"&&n.has(j)&&O!==N.address){let Y=typeof re=="string"?{}:{...re.$description!==void 0?{$description:re.$description}:{},...re.$tags!==void 0?{$tags:re.$tags}:{}},D=Object.keys(Y).length?{$type:"prompt",$exec:`{{${N.address}}}`,...Y}:`{{${N.address}}}`,V=mt(e.selected.data??{},O);if(V!==void 0&&!gn(V,D)){let te=ct("project-token",`${j}\0binding`,V,D);te.path=O,te.keepTakeOnly=!0,te.notice=`The reused token needs a project alias at ${O}. Taking replaces the existing project override; keeping it reopens this reuse choice.`,a.push(te);let ie=t[te.id];if(ie&&typeof ie=="object"){te.invalid=!0,te.notice+=" Choose Keep existing or Take incoming.";return}if(ie==="keep"){q.invalid=!0,q.notice=`Keeping the project override at ${O} is incompatible with this reuse; review the reuse choice again.`;return}if(ie!=="take")return}let Q=`project\0${O}`;if(p.has(Q)){q.invalid=!0,q.notice=`Multiple imported tokens target ${O}; choose distinct addresses.`;return}p.add(Q),_i(m,O,D),M.binding=O,M.sourcePath=j,c.push({origin:"project",path:O,value:D,added:!1,item:q})}return}let H=_==="add"&&N&&typeof N=="object"?N.address:z;if(_==="add"){if(x==="project"&&n.has(j)&&s.get(j)&&H!==s.get(j))throw new Error(`Project override ${j} must remain bound to ${s.get(j)}.`);if(Pi(H),H!==j&&(x==="root"?n:r).has(H)){q.invalid=!0,q.notice=`The new address ${H} is already used by another incoming token.`;return}if(mt(e.local,H)!==void 0||mt(e.selected.data??{},H)!==void 0){q.invalid=!0,q.notice=`The new token address ${H} is occupied; choose another address.`;return}x==="project"&&s.set(j,H)}let F=`${x}\0${H}`;if(p.has(F)){q.invalid=!0,q.notice=`Multiple imported tokens target ${H}; choose distinct addresses.`;return}p.add(F);let pe=x==="root"?f:m;try{_i(pe,H,q.incoming)}catch(re){p.delete(F),q.invalid=!0,q.notice=re instanceof Error?re.message:String(re);return}c.push({origin:x,path:H,value:q.incoming,added:_==="add",item:q})};for(let[x,j]of n)h("root",x,j);let y=e.selected.definition,v=e.bundle.configuration.$projects[e.bundle.projectName],w=y!==void 0&&(typeof y=="object"&&typeof v=="object"||y===v),A=ct("project",`$projects.${e.bundle.projectName}`,y,v),S={..._s(e.bundle.project,!0),...e.bundle.project.$metadata?{$metadata:e.bundle.project.$metadata}:{},$schemaVersion:Ae},g=new TextEncoder().encode(`${JSON.stringify(S,null,2)}
|
|
202
|
+
`);A.candidates=[...e.snapshots.values()].filter(x=>x.path!=="woof.config.json"&&x.data&&Me(x.data,g)).map(x=>x.path);let E=t[A.id];w||a.push(A);let C=y!==void 0||Nn(E)!=="keep";if(C)for(let[x,j]of r)h("project",x,j);let T=e.selected.data?.$metadata,R=e.bundle.project.$metadata,$=T;if(C&&R!==void 0&&!gn(T,R)){let x=ct("project-token","$metadata",T,R);a.push(x),t[x.id]&&typeof t[x.id]=="object"?(x.invalid=!0,x.notice="Project metadata supports Keep existing or Take incoming."):Nn(t[x.id])==="take"&&($=R)}return{issues:a,mappings:s,root:f,project:m,metadata:$,projectChoice:E,includeProject:C,selectedTokens:c,reuses:u,tokenChecks:l}}function en(e,t){let n=ip(e,t),r=[...n.issues],i=()=>r.filter(g=>!t[g.id]||g.invalid),o,s=new Map,a=new Map,c=new Map,u=new Map,l=new Map;for(let g of n.selectedTokens){let E=typeof g.value=="string"||g.value.$type==="prompt",C=`${g.origin==="root"?"":e.bundle.projectName}\0${g.path}`;for(let T of Yt(g.value)){let R=`${T}\0${E?"prompt":"script"}`,$=l.get(R);l.set(R,{reference:T,prompt:E,added:g.added||!!$?.added,users:new Set([...$?.users??[],C])})}}for(let[g,E]of l){let C=E.reference,T=C.startsWith("<root>/")?C.slice(7):C,$=yn(e,C),x=!1;if($&&E.prompt){let U=Is($,n.mappings);U!==$&&($=U,x=!0)}let j=C.startsWith("<root>/")?me(e,T).data:void 0,P=E.added||!!($&&x);if($&&j&&Me($,j)&&!P){u.set(g,C);continue}let k=ct("file",`${T}\0${E.prompt?"prompt":"script"}`,j,$);if(k.path=T,k.requiredNewPath=P,$?P&&(k.notice="Choose a distinct destination for the imported file."):k.notice=`Incoming file ${C} is unavailable; ${P?"choose a distinct destination":"keeping the reference"} will produce a validation finding.`,j&&(k.notice=`${k.notice?`${k.notice} `:""}Taking replaces this file for every existing token that uses it.`),j&&C.startsWith("<root>/")){let U=Ln(On(e.home,T)),H=Object.entries(e.local.$projects??{}).filter(([,pe])=>{if(typeof pe!="string")return!1;let re=me(e,pe.slice(7));return re.data&&Ln(On(e.home,re.path))===U}).map(([pe])=>pe);H.length&&(k.notice=`This file is registered as configuration for ${H.join(", ")}. Taking raw bytes may prevent woof from starting. ${k.notice??""}`);let F=Dy(e,C);!H.length&&F.size&&[...F].every(pe=>E.users.has(pe))&&(k.derived=!0)}let b=C.startsWith("<root>/")?me(e,T).physical:null;k.candidates=$&&!E.added?[...e.snapshots.values()].filter(U=>U.data&&Me(U.data,$)&&(!P||U.path!==T&&(!b||U.physical!==b))).map(U=>U.path):[],r.push(k);let N=t[k.id],_=Nn(N);if(!_)continue;if(_==="keep"){if(P)throw new Error(`File ${T} requires a distinct destination; choose Add as new.`);if(C.startsWith("<root>/")){let U=me(e,T),H=U.physical??On(e.home,T),F=c.get(H);if(F&&F.action!=="keep"&&(!U.data||!F.data||!Me(U.data,F.data))){k.invalid=!0,k.notice=`Keeping ${T} conflicts with an earlier choice to replace the same file.`;continue}c.set(H,{action:"keep",item:k,...U.data?{data:U.data}:{}})}u.set(g,C);continue}if(!$){if(P&&N&&typeof N=="object"&&N.action==="add"){let U=xr(N.address.replace(/^<root>\//,"")),H=me(e,U);if(U===T||H.physical===b||H.data)throw new Error(`Choose a distinct unused file destination instead of ${U}.`);let F=H.physical;if(c.has(F)){k.invalid=!0,k.notice="This destination is already claimed by another import decision.";continue}c.set(F,{action:"reserve",item:k}),u.set(g,`<root>/${U}`);continue}throw new Error(`File ${C} is unavailable and cannot be taken or reused.`)}let O=T;if(N&&typeof N=="object"){O=xr(N.address.startsWith("<root>/")?N.address.slice(7):N.address);let U=me(e,O).data;if(N.action==="add"&&(U||P&&O===T))throw new Error(`Choose a distinct unused file destination instead of ${O}.`);if(N.action==="reuse"&&(!U||!Me(U,$)))throw new Error(`File ${O} is no longer identical; review reuse again.`);if(N.action==="reuse"){if(P&&(E.added||O===T||b&&me(e,O).physical===b))throw new Error("This file needs a distinct destination.");u.set(g,`<root>/${O}`);continue}}else if(P)throw new Error(`File ${T} requires a distinct destination; choose Add as new.`);if(O==="woof.config.json")throw new Error("A raw payload cannot replace the root registry.");let B=me(e,O).physical??On(e.home,O),W=c.get(B);if(W&&(W.action==="reserve"||W.added||N&&typeof N=="object"&&N.action==="add"||!W.data||!Me(W.data,$))){k.invalid=!0,k.notice="This choice conflicts with an earlier decision for the same file; select a different destination.";continue}c.set(B,{action:"write",data:$,item:k,added:typeof N=="object"&&N.action==="add"});let q=s.get(O);if(q&&!Me(q,$))throw new Error(`Multiple imported files require incompatible bytes at ${O}.`);s.set(O,$),a.set(O,k),u.set(g,`<root>/${O}`)}function p(g){let E=new Map(s);g&&E.set(g.path,new TextEncoder().encode(`${JSON.stringify(g.data,null,2)}
|
|
203
|
+
`));let C=x=>{if(!x.startsWith("<root>/"))return Qt(e,x);let j=x.slice(7),P=me(e,j);for(let[k,b]of E){let N=me(e,k);if(k===j||P.physical&&N.physical===P.physical)return b}return P.data},T=Ct(e.bundle.configuration),R=Ct(e.bundle.project),$=x=>{let j=new Set,P=k=>{if(k===x&&j.size)return!0;if(j.has(k))return!1;j.add(k);let b=R.get(k)??T.get(k);if(!b||typeof b!="string"&&b.$type!=="prompt")return!1;let N=typeof b=="string"?b:b.$exec,_=N.startsWith("<root>/")||N.startsWith("<repo>/"),O=_?yn(e,N):void 0;return _&&!O?!1:Xr(O?new TextDecoder().decode(O):N).some(P)};return P(x)};for(let x of n.tokenChecks){let j=gt(x.value,P=>yn(e,P),n.mappings);x.item.candidates=[...x.candidates.entries()].filter(([P,k])=>{if(P===x.item.path)return!1;let b=(x.origin==="project"?mt(n.project,P):void 0)??mt(n.root,P);return j!==void 0&&gn(b,k)&&Ot(b)&>(b,C)===j}).map(([P])=>P).sort(),x.item.candidateDetails=x.item.candidates.map(P=>{let k=x.candidates.get(P);return typeof k=="string"?{address:P}:{address:P,...k.$description!==void 0?{description:k.$description}:{},...k.$tags!==void 0?{tags:k.$tags}:{}}})}for(let x of n.reuses){if(x.binding&&x.sourcePath&&x.binding!==x.sourcePath){let b=new Set,N=_=>{if(_===x.binding)return!0;if(b.has(_))return!1;b.add(_);let O=mt(n.project,_)??mt(n.root,_);if(!Ot(O))return!1;let z=O;if(typeof z!="string"&&z.$type!=="prompt")return!1;let B=typeof z=="string"?z:z.$exec,W=B.startsWith("<root>/")||B.startsWith("<repo>/")?C(B):void 0;if((B.startsWith("<root>/")||B.startsWith("<repo>/"))&&!W)return!1;let q=W?new TextDecoder().decode(W):B;return Xr(q).some(N)};if(N(x.address)&&!$(x.sourcePath)){x.item.invalid=!0,x.item.notice=`Reuse would make the project binding ${x.binding} reference itself; choose a different mapping.`;let _=r.find(O=>O.id===ct("token",x.sourcePath,void 0,void 0).id);_&&t[_.id]&&typeof t[_.id]=="object"&&(_.invalid=!0,_.notice="This mapping makes the reused project override circular; choose a different address.");continue}}let j=(x.origin==="project"?mt(n.project,x.address):void 0)??mt(n.root,x.address),P=gt(x.value,b=>yn(e,b),n.mappings),k=Ot(j)?gt(j,C):void 0;if(!gn(j,x.original)||!P||k!==P){if(x.item.invalid=!0,x.item.notice=`The reused token ${x.address} changes under another choice; review this reuse again.`,x.item.candidates=(x.item.candidates??[]).filter(b=>b!==x.address),!gn(j,x.original))for(let b of n.selectedTokens)b.path===x.address&&(x.origin==="project"||b.origin==="root")&&(b.item.invalid=!0,b.item.notice=`This token change conflicts with reuse of ${x.address}; review both choices.`);for(let b of Yt(x.original)){if(!b.startsWith("<root>/"))continue;let N=b.slice(7),_=me(e,N);for(let[O,z]of a){let B=me(e,O);(O===N||_.physical&&_.physical===B.physical)&&(z.invalid=!0,z.notice=`This file change conflicts with reuse of ${x.address}; review both choices.`)}}}}}if(p(),o=i(),o.length)return{status:"incomplete",next:o[0],remaining:o.length,issues:r};for(let g of n.selectedTokens){let E=typeof g.value=="string"||g.value.$type==="prompt",C=new Map;for(let R of Yt(g.value)){let $=u.get(`${R}\0${E?"prompt":"script"}`);$&&C.set(R,$)}let T=Yl(g.value,C);_i(g.origin==="root"?n.root:n.project,g.path,T)}let f=e.selected.definition,m=e.bundle.configuration.$projects[e.bundle.projectName],h=Nn(n.projectChoice)==="keep"?f:m;if(n.projectChoice&&typeof n.projectChoice=="object"){let g=xr(n.projectChoice.address.replace(/^<root>\//,"")),E=me(e,g).data;if(n.projectChoice.action==="add"&&E){let C=r.find(T=>T.id===ct("project",`$projects.${e.bundle.projectName}`,void 0,void 0).id);return C.invalid=!0,C.notice=`Project storage ${g} is occupied; choose another path.`,{status:"incomplete",next:C,remaining:1,issues:r}}h=`<root>/${g}`}let y={...n.project,...n.metadata?{$metadata:n.metadata}:{}},v;if(n.includeProject&&typeof h=="string"){let g=h.slice(7),E=ze({...y,$schemaVersion:Ae},"project",h),C=new TextEncoder().encode(`${JSON.stringify(E,null,2)}
|
|
204
|
+
`),T=me(e,g).data;if(n.projectChoice&&typeof n.projectChoice=="object"&&n.projectChoice.action==="reuse"&&(!T||!Me(T,C))){let $=r.find(x=>x.id===ct("project",`$projects.${e.bundle.projectName}`,void 0,void 0).id);return $.invalid=!0,$.notice=`Project storage ${g} is no longer identical; review reuse again.`,{status:"incomplete",next:$,remaining:1,issues:r}}if(!(e.selected.file?.path===g&&gn(e.selected.file.data,E))&&(!T||!Me(T,C))){let $=ct("file",`${g}\0project configuration`,T,C);$.path=g,$.candidates=[...e.snapshots.values()].filter(B=>B.data&&Me(B.data,C)).map(B=>B.path);let x=me(e,g).physical,j=Object.entries(e.local.$projects??{}).filter(([,B])=>{if(typeof B!="string")return!1;let W=me(e,B.slice(7));return W.path===g||!!(x&&W.physical===x)}).map(([B])=>B);j.every(B=>B===e.bundle.projectName)?$.derived=!0:$.notice=`This configuration is used by ${j.join(", ")}; taking changes affects those projects.`,r.push($);let P=t[$.id],k=Nn(P),b=g;P&&typeof P=="object"&&(b=xr(P.address.replace(/^<root>\//,"")));let N=me(e,b);if(P&&typeof P=="object"&&P.action==="add"&&N.data)throw new Error(`Project storage ${b} is occupied.`);if(P&&typeof P=="object"&&P.action==="reuse"&&(!N.data||!Me(N.data,C)))throw new Error(`Project storage ${b} is not identical.`);let _=N.physical??On(e.home,b),O=c.get(_),z=k==="keep"?N.data:C;k&&O&&(O.action==="reserve"||O.added||P&&typeof P=="object"&&P.action==="add"||!O.data||!z||!Me(O.data,z))?($.invalid=!0,$.notice="This decision conflicts with another choice for the same physical file."):k==="take"?(v={path:g,data:E},a.set(g,$)):P&&typeof P=="object"&&(h=`<root>/${b}`,P.action==="add"&&(v={path:b,data:E},a.set(b,$)))}else v={path:g,data:E}}if(v){let g=me(e,v.path),E=c.get(g.physical),C=new TextEncoder().encode(`${JSON.stringify(v.data,null,2)}
|
|
205
|
+
`);E&&(!E.data||!Me(E.data,C))&&(E.item.invalid=!0,E.item.notice="This destination conflicts with the imported project configuration.")}if(p(v),o=i(),o.length)return{status:"incomplete",next:o[0],remaining:o.length,issues:r};let w={...e.local.$projects};n.includeProject&&(w[e.bundle.projectName]=typeof h=="string"?h:y);let A=ze({...n.root,$schemaVersion:Ae,$projects:w},"root","import candidate");if(v&&s.has(v.path)){let g=new TextEncoder().encode(`${JSON.stringify(v.data,null,2)}
|
|
206
|
+
`);if(!Me(s.get(v.path),g))throw new Error(`Project configuration and raw payload require incompatible writes to ${v.path}.`)}let S=[...e.snapshots.values()].map(({path:g,digest:E,physical:C})=>({path:g,digest:E,physical:C}));return{status:"ready",issues:r,candidate:{configuration:A,files:s,home:e.home,local:e.local,projectFile:v,projectName:e.bundle.projectName,initialProject:e.selected.file,sources:S,externalSources:[...e.external].map(([g,E])=>({path:g,digest:E}))}}}function op(e){return{home:[...e.snapshots.values()].map(({path:t,digest:n,physical:r})=>({path:t,digest:n,physical:r})),external:[...e.external].map(([t,n])=>({path:t,digest:n}))}}function sp(e,t){if(!t||!Array.isArray(t.home)||!Array.isArray(t.external))throw new Error("Decisions are missing reviewed source snapshots.");for(let r of t.home){if(!r||typeof r.path!="string"||typeof r.digest!="string"&&r.digest!==null||typeof r.physical!="string"&&r.physical!==null)throw new Error("Decisions contain invalid source snapshots.");let i=me(e,r.path);if(i.digest!==r.digest||i.physical!==r.physical)throw new Error(`Import destination ${r.path} changed after review; review it again.`)}let n=e.checkout;for(let r of t.external){if(!r||typeof r.path!="string"||typeof r.digest!="string"||!n||!Os(n,r.path))throw new Error("Decisions contain an invalid checkout source.");let i=Ln(r.path);if(!Os(n,i)||Nt(Ns(i))!==r.digest)throw new Error(`Reuse source ${r.path} changed after review.`);e.external.set(i,r.digest)}}var ap=G(()=>{"use strict";Ei();vt();js();Ql();je();Ze();be();Un();Je()});import{createHash as Gy}from"node:crypto";import{readFileSync as mp}from"node:fs";import{resolve as cp}from"node:path";import{parseArgs as Uy}from"node:util";function gp(e){return typeof e=="string"?e:`${JSON.stringify(e,null,2)}
|
|
207
|
+
`}function Hy(e){return`Binary content: ${e.byteLength} bytes, SHA-256 ${Gy("sha256").update(e).digest("hex")}
|
|
208
|
+
`}function Oi(e){return e===void 0?"":e instanceof Uint8Array?Hy(e):gp(e)}function Ds(e,t){return bs("",e,t,"","",{context:3}).split(`
|
|
209
|
+
`).slice(4).filter(n=>!n.startsWith("\\ No newline")).join(`
|
|
210
|
+
`).trimEnd()}function lp(e){return e.candidateDetails??(e.candidates??[]).map(t=>({address:t}))}function pp(e,t){let n=new TextDecoder("utf-8",{fatal:!0});try{return Ds(e===void 0?"":n.decode(e),t===void 0?"":n.decode(t))}catch{return[Oi(e),Oi(t)].filter(Boolean).join(`
|
|
211
|
+
`)}}function fp(e){if(e===void 0)return"";if(typeof e=="string")return`${e}
|
|
212
|
+
`;if(!e||typeof e!="object"||!("$exec"in e))return gp(e);let t=e;return`${[...t.$type?[`Type: ${t.$type}`]:[],...t.$description!==void 0?[`Description: ${t.$description}`]:[],...t.$tags?.length?[`Tags: ${t.$tags.join(", ")}`]:[],"",...Array.isArray(t.$exec)?t.$exec:[t.$exec]].join(`
|
|
213
|
+
`)}
|
|
214
|
+
`}function Wy(e){return e.kind==="file"?pp(e.existing,e.incoming):e.kind==="project"?Ds(Oi(e.existing),Oi(e.incoming)):[Ds(fp(e.existing),fp(e.incoming)),...(e.files??[]).map(t=>`${t.reference}
|
|
215
|
+
${pp(t.existing,t.incoming)}`)].filter(Boolean).join(`
|
|
216
|
+
|
|
217
|
+
`)}function Vy(e,t,n,r,i=[]){let o=s=>({id:s.id,kind:s.kind,path:s.path,existingDigest:s.existingDigest,incomingDigest:s.incomingDigest,...s.notice?{notice:s.notice}:{},...s.candidates?.length?{candidates:s.candidates,candidateDetails:s.candidateDetails}:{},...s.requiredNewPath?{requiredNewPath:!0}:{},...s.keepTakeOnly?{keepTakeOnly:!0}:{}});return{archive:e.archiveDigest,sources:op(e),choices:{...t},next:r?o(r):void 0,conflicts:n.map(o),...i.length?{invalidated:i}:{}}}function qy(e,t){let n=JSON.parse(mp(e,"utf8"));if(!n||typeof n!="object"||Array.isArray(n))throw new Error("Decisions must be a JSON object.");let r=n;if(r.archive!==t.archiveDigest)throw new Error("Decisions belong to a different archive; review this archive again.");if(!Array.isArray(r.conflicts)||!r.choices||typeof r.choices!="object"||Array.isArray(r.choices))throw new Error("Decisions require reviewed conflicts and a choices object.");sp(t,r.sources);let i=new Set(r.conflicts.map(o=>o.id));for(let o of Object.keys(r.choices))if(!i.has(o))throw new Error(`Decision ${o} was not in the reviewed conflict list.`);return r}function Ky(e){let t=[],n=se({cwd:e}),r;try{r=n.loadRootConfiguration()}catch(o){return[Ye("import-finding-unreadable",{file:J("woof.config.json"),details:String(o)})]}let i=o=>{let s=o?`project ${o}`:"shared tokens";try{let a=o?ye({project:o,cwd:e,loader:n}):{root:r,candidates:[],checkoutRoot:n.repoRoot,selection:"root"},c=we(a);for(let u of c.tokens.keys())try{nr(c,u)}catch(l){t.push(`${s}, ${u}: ${l instanceof Error?l.message:String(l)}`)}}catch(a){t.push(`${s}: ${a instanceof Error?a.message:String(a)}`)}};i();for(let o of Object.keys(r.data.$projects??{}))i(o);return t}function Ms(e){return[...Le("Completed",e.completed,"Completed"),...Le("Restored",e.restored,"Restored"),...Le("Pending",e.pending,"Pending"),...Le("Recovery",e.recovery,"Recovery"),...Le("Warning",e.warnings)].join(`
|
|
218
|
+
`)}function hp(e){return Ye("import-report",{fields:Ms(e)})}function dp(e){e&&un("Backup of woof home before this import",e,{template:"import-backup",values:{backup:e,backupArgument:Z(e),homeArgument:Z(J())}})}var up,yp,vp=G(()=>{"use strict";zl();Ve();Ge();js();ap();je();De();Ze();be();rn();Je();up={token:"shared token","project-token":"project token",file:"file",project:"project"};yp={args:{agent:{description:"Use plain, noninteractive agent output",type:"boolean"},archive:{description:"Project ZIP archive to import",type:"positional",required:!0},decisions:{description:"Reviewed import choices JSON",type:"string"}},meta:{description:"Review and import a portable project archive",name:"import"},async run({rawArgs:e}){try{let{values:t,positionals:n}=Uy({args:e,allowPositionals:!0,options:{agent:{type:"boolean"},decisions:{type:"string"}}});if(n.length!==1)throw new Error("Import requires exactly one ARCHIVE path.");let r=process.cwd(),i=cp(r,n[0]),o=t.decisions?cp(r,t.decisions):void 0,s=t.agent===!0||!!fe(),a=mp(i),c=rp(a,{cwd:r}),u=o?qy(o,c):void 0,l={...u?.choices??{}},p=u?.conflicts??[],f=[],m=new Set,d;try{d=en(c,l)}catch(g){let E=u?.next?.id;if(!E||!l[E])throw g;delete l[E],m.add(E),f.push(`${p.find(C=>C.id===E)?.path??E}: ${g instanceof Error?g.message:String(g)}`),d=en(c,l)}let h=u?.next?.id;for(;;){let g=Object.keys(l).filter(E=>{let C=p.find(R=>R.id===E),T=d.issues.find(R=>R.id===E);return T?.invalid?!0:E===h?!1:!C||!T||C.path!==T.path||C.existingDigest!==T.existingDigest||C.incomingDigest!==T.incomingDigest});if(!g.length)break;for(let E of g)f.push(p.find(C=>C.id===E)?.path??E),m.add(E),delete l[E];d=en(c,l),h=void 0}for(;d.status!=="ready";){let g=d.next;if((g.existing===void 0&&g.incoming!==void 0&&!g.candidates?.length||g.derived)&&!g.requiredNewPath&&!m.has(g.id)&&!g.invalid){l[g.id]="take",d=en(c,l);continue}let C=Wy(g),T=g.notice?`
|
|
219
|
+
${g.notice}`:"",R=g.candidates?.length?`
|
|
220
|
+
${Ye("import-reusable",{candidates:lp(g).map(({address:_,description:O})=>s?`- ${_}${O?`: ${O}`:""}`:`- ${I(_)}${O?` ${Oe(O)}`:""}`).join(`
|
|
221
|
+
`)})}`:"",$=f.length?`
|
|
222
|
+
${Ye("import-rechecks",{items:f.join(", ")})}`:"";if(Bo({summary:`Review ${up[g.kind]} ${I(g.path)}`,details:ya(C),notes:`${T}${R}${$}`.trim()},null),s||!Pe()){let _=o??`${i}.decisions.json`,O=JSON.stringify(Vy(c,l,d.issues,g,f),null,2);Bo({summary:"Import requires an explicit decision for the next item.",details:O,recovery:`Set choices[next.id] to "keep", "take", {"action":"add","address":"..."}, or {"action":"reuse","address":"..."} as applicable. Save the file and run woof import ${Z(i)} --decisions ${Z(_)}${s?" --agent":""}.`},{template:"import-decision",values:{kind:up[g.kind],path:g.path,diff:C,notice:T,reusable:R,rechecks:$,document:O,archive:Z(i),decisions:Z(_)}}),process.exitCode=1;return}let x=g.existing!==void 0,j=g.kind==="file"||g.kind==="project",P=[...!g.requiredNewPath&&g.incoming!==void 0?[{value:"take",label:"Take incoming",hint:x?"replace yours with the archive's version":"import the archive's version"}]:[],...g.requiredNewPath?[]:[{value:"keep",label:"Keep existing",hint:x?"keep yours and skip the archive's version":"do not import it"}],...(g.incoming!==void 0||g.requiredNewPath)&&g.path!=="$metadata"&&!g.keepTakeOnly?[{value:"add",label:"Add as new",hint:`import it at a new ${j?"path":"address"}${x?" and keep yours":""}`}]:[],...g.candidates?.length&&!g.keepTakeOnly?[{value:"reuse",label:"Reuse existing",hint:`use your identical ${j?"file":"token"} instead of importing it`}]:[]],k=await ke({message:`${I(g.path)}: choose an action`,options:P});if(!k)return ae("Import cancelled. Nothing was changed.");let b;if(k==="keep"||k==="take")b=k;else if(k==="add"){let _=await Qe(g.kind==="token"||g.kind==="project-token"&&g.path!=="$metadata"?`Token address ${Ne("unused")}`:`Path under woof home ${Ne("unused")}`);if(!_)return ae("Import cancelled. Nothing was changed.");b={action:"add",address:_}}else if(k==="reuse"){let _=await ke({message:g.kind==="file"?"File to reuse":"Token to reuse",options:lp(g).map(({address:O,description:z})=>({value:O,label:O,...z?{hint:z}:{}}))});if(!_)return ae("Import cancelled. Nothing was changed.");b={action:"reuse",address:_}}else throw new Error(`Unsupported import choice: ${k}`);p=d.issues,l[g.id]=b;try{d=en(c,l)}catch(_){delete l[g.id],ln("import-choice-rejected",{details:_ instanceof Error?_.message:String(_)}),d=en(c,l);continue}let N=g.id;for(;;){let _=Object.keys(l).filter(O=>{let z=p.find(W=>W.id===O),B=d.issues.find(W=>W.id===O);return B?.invalid?!0:O===N?!1:!z||!B||z.path!==B.path||z.existingDigest!==B.existingDigest||z.incomingDigest!==B.incomingDigest});if(!_.length)break;for(let O of _)f.push(p.find(z=>z.id===O)?.path??O),m.add(O),delete l[O];d=en(c,l),N=void 0}}let y=Jl(d.candidate),v;try{v=Ky(r)}catch(g){v=[Ye("import-finding-incomplete",{details:g instanceof Error?g.message:String(g)})]}let w=hp(y),A=f.length?`
|
|
223
|
+
${Ye("import-rechecked",{items:f.join(", ")})}`:"",S=v.length?Ye("import-validation-findings"):"";if(y.completed.length?Se({summary:`Imported ${I(c.bundle.projectName)}.`,details:`${Ms(y)}${A}`,...S?{recovery:S}:{}},{template:"import-imported",values:{project:c.bundle.projectName,report:w,rechecked:A,validation:S?`
|
|
224
|
+
|
|
225
|
+
${S}`:""}}):Wt({summary:"Nothing was imported. Each item already matched or was kept.",details:A.trim()},{template:"import-unchanged",values:{rechecked:A}}),dp(y.backup),v.length){let g=v.some(E=>/Could not parse configuration|Invalid configuration|Could not read configuration|requires an explicit \$schemaVersion|unsupported \$schemaVersion/.test(E));ln(g?"import-findings-configuration":"import-findings",{findings:v.join(`
|
|
226
|
+
`),project:Z(c.bundle.projectName)})}}catch(t){let n=t instanceof Error?t.message:String(t),r=t instanceof Tt?`
|
|
227
|
+
${hp(t.report)}`:"";he({summary:"woof could not complete the import.",details:t instanceof Tt?`${n}
|
|
228
|
+
${Ms(t.report)}`:n,...t instanceof Tt?{recovery:"The report above lists what changed."}:{}},{template:"import-error",values:{details:n,report:r}}),t instanceof Tt&&dp(t.report.backup),process.exitCode=1}}}});import{mkdirSync as Zy,readFileSync as Jy,writeFileSync as Xy}from"node:fs";import{homedir as Yy}from"node:os";import{basename as Qy,dirname as ev,join as tv,sep as nv}from"node:path";import{parseArgs as rv}from"node:util";function ov(e){let t=Yy();return e.startsWith(`${t}${nv}`)?`~/${e.slice(t.length+1)}`:e}function wp(e){return e.split(",").map(t=>t.trim()).filter(Boolean)}function sv(e,t){let n=Bt(e);if(n)throw new Error(`This checkout already has a repository configuration: ${I(n)}`);let r=tv(e,t);return Zy(ev(r),{recursive:!0}),Xy(r,`${JSON.stringify(vn,null,2)}
|
|
229
|
+
`,{flag:"wx"}),r}function av(e,t){return bn(J("woof.config.json"),n=>{let r=Jy(n,"utf8"),i=Ke(r,"root",n);if(Object.hasOwn(i.$projects??{},e))throw new Error(`Registered project ${I(e)} already exists in ${I(n)}.`);let o=JSON.parse(r),s=o.$projects,a={...o,$projects:{...s,[e]:Object.keys(t).length?{$metadata:t}:{}}};return ze(a,"root",n),Wn(n,a),n})}function Fs(e,t,n,r){He({summary:e,details:t,recovery:"Retry with one exact command."},{template:n,values:r}),process.exitCode=1}var br,iv,kp,$p=G(()=>{"use strict";Or();Nr();Ve();vt();Ge();qr();je();De();Ze();be();Un();rn();br=["woof.config.json",".agents/woof.config.json",".claude/woof.config.json"],iv={"woof.config.json":"at the checkout root",".agents/woof.config.json":"in the .agents folder",".claude/woof.config.json":"in the .claude folder"};kp={args:{agent:{description:"Use plain, noninteractive agent output",type:"boolean"},repo:{description:"Create a repository configuration in this checkout",type:"boolean"},location:{description:"Repository configuration file in the checkout",type:"positional",required:!1},name:{description:"Register a project in woof home under this name",type:"string"},"base-path":{description:"Base path of the registered project (repeatable)",type:"string"},"worktree-path":{description:"Worktree path of the registered project (repeatable)",type:"string"}},meta:{description:"Create a project configuration",name:"init"},async run({rawArgs:e}){try{let{values:t,positionals:n}=rv({args:e,allowPositionals:!0,options:{agent:{type:"boolean"},repo:{type:"boolean"},name:{type:"string"},"base-path":{type:"string",multiple:!0},"worktree-path":{type:"string",multiple:!0}}}),r=t.agent===!0||!!fe(),i=!r&&Pe(),o=r?" --agent":"",s=n[0],a=t.name,c=t["base-path"]??[],u=t["worktree-path"]??[],l=c.length>0||u.length>0;if(t.repo&&(a!==void 0||l))throw new Error(`${I("--repo")} cannot be combined with ${I("--name")}, ${I("--base-path")} or ${I("--worktree-path")}.`);if(a===void 0&&l)throw new Error(`${I("--base-path")} and ${I("--worktree-path")} require ${I("--name")}.`);if(s!==void 0&&!br.includes(s))throw new Error(`The repository location must be one of: ${br.map(S=>I(S)).join(", ")}.`);let p=process.cwd(),f=ve(p),m=ov(f??p),d=`woof init --name NAME --base-path ${Z(m)}${o}`,h=t.repo?"repo":a!==void 0||!f?"home":void 0;if(!h){if(!i){let g=`woof init --repo LOCATION${o}
|
|
230
|
+
Locations: ${br.join(", ")}`;return Fs("Choose where to create the project configuration.",`In this repo (shared with the team): ${f}
|
|
231
|
+
${g}
|
|
232
|
+
|
|
233
|
+
In woof home (only you): ${J("woof.config.json")}
|
|
234
|
+
${d}`,"init-target",{checkout:f,repository:g,home:d,rootFile:J("woof.config.json")})}let S=await ke({message:"Where should the project configuration live?",options:[{value:"repo",label:"in this repo (shared with the team)",hint:f},{value:"home",label:"in woof home (only you)",hint:J("woof.config.json")}]});if(!S)return ae("Init cancelled. Nothing was changed.");h=S}if(h==="repo"){if(zt(p))throw new Error("woof ignores repository configuration inside woof home. Run init from a project checkout.");if(!f)throw new Error(`${I("init --repo")} needs a Git checkout. Register a woof home project with ${I("--name")} instead.`);if(s===void 0){if(!i){let E=`woof init --repo LOCATION${o}
|
|
235
|
+
Locations: ${br.join(", ")}`;return Fs(`Choose the location of the repository configuration in ${f}.`,E,"init-location",{checkout:f,commands:E})}let g=await ke({message:"Which file should hold the repository configuration?",options:br.map(E=>({value:E,label:E,hint:iv[E]}))});if(!g)return ae("Init cancelled. Nothing was changed.");s=g}let S=sv(f,s);Se({summary:"Created a repository configuration.",details:Re([["File",S]]),recovery:`To add a token, run ${I(`woof add --repo${o}`)}.`},{template:"init-repository",values:{file:S,add:`woof add --repo${o}`}});return}if(a===void 0){if(!i)return Fs("Choose a name for the registered project.",d,"init-home",{command:d});let S=Qy(f??p);if(a=await Qe("Project name",ra(Gn,S)?{initialValue:S}:{}),a===void 0)return ae("Init cancelled. Nothing was changed.")}let y=Pr(Gn,a);if(!y.success)throw new Error(`Project name ${I(a)}: ${y.issues[0].message}`);if(i&&!l){let S=await Qe(`Base paths ${Ne("comma separated - optional")}`,{initialValue:m,optional:!0});if(S===void 0)return ae("Init cancelled. Nothing was changed.");let g=await Qe(`Worktree paths ${Ne("comma separated - optional")}`,{optional:!0});if(g===void 0)return ae("Init cancelled. Nothing was changed.");c=wp(S),u=wp(g)}for(let S of[...c,...u])Yn(S,a);let v=await av(a,{...c.length?{$basePaths:c}:{},...u.length?{$worktreePaths:u}:{}}),w=[`${Re([["Configuration",v]])} ${Ur()}`,...Le("Base path",c),...Le("Worktree path",u)].join(`
|
|
236
|
+
`),A=`woof add --project ${Z(a)}${o}`;Se({summary:`Registered project ${I(a)}.`,details:w,recovery:`To add a token, run ${I(A)}.`},{template:"init-registered",values:{name:a,fields:w,add:A}})}catch(t){let n=t instanceof Error?t.message:String(t);he({summary:"woof could not create the project configuration.",details:n},{template:"init-error",values:{details:n}}),process.exitCode=1}}}});import{homedir as xp}from"node:os";import{basename as cv,resolve as uv}from"node:path";import{parseArgs as lv}from"node:util";function bp(e){return(e??[]).map(t=>t==="~"?xp():t.startsWith("~/")?uv(xp(),t.slice(2)):t)}var pv,fv,Ep,Sp=G(()=>{"use strict";Ve();Ge();De();Ze();be();pv="#afd7ff",fv="#dadada";Ep={args:{agent:{description:"Use plain, noninteractive agent output",type:"boolean"}},meta:{description:"List the detected project and the registered projects",name:"projects"},async run({rawArgs:e}){try{let{values:t,positionals:n}=lv({args:e,allowPositionals:!0,options:{agent:{type:"boolean"}}});if(n.length)throw new Error("Projects does not accept positional arguments.");let r=t.agent===!0||!!fe(),i=process.cwd(),o=se({cwd:i}),s=o.loadRootConfiguration(),a=$t(s,o),c=ye({cwd:i,loader:o}),u="project"in c?c.project:void 0,l=new Set(a.filter(h=>lc(h,i)).map(h=>h.name)),p=Sn(c),f=p?`Current project: ${p}`:c.selection==="ambiguous"?`Several projects match this directory. Pick one with ${I("--project NAME")}.`:"No project detected. Only shared tokens apply.",m=[...u?.kind==="repository"?[{name:cv(c.checkoutRoot),kind:"repo",badge:"current",config:u.source.file,inline:!1,basePaths:[],worktreePaths:[]}]:[],...[...a].sort((h,y)=>+(y.name===u?.name)-+(h.name===u?.name)||Number(l.has(y.name))-Number(l.has(h.name))).map(h=>{let y=h.name===u?.name?"current":l.has(h.name)?u?"also matches":"matches":void 0;return{name:h.name,kind:"registered",...y?{badge:y}:{},config:h.source.file,inline:h.inline,basePaths:bp(h.data.$metadata?.$basePaths),worktreePaths:bp(h.data.$metadata?.$worktreePaths)}})],d=m.length?m.map(h=>{let y=h.badge?` ${Vn(h.badge,h.badge==="current"?pv:fv)}`:"",v=r?`- ${h.name} (${[h.kind,h.badge].filter(Boolean).join(", ")})`:`${h.name}${y}`,w=h.inline?` ${Ur()}`:"";return[v,` ${Re([["Configuration",h.config]])}${w}`,...[...Le("Base path",h.basePaths),...Le("Worktree path",h.worktreePaths)].map(A=>` ${A}`)].join(`
|
|
237
|
+
`)}).join(`
|
|
238
|
+
`):`No projects. To create one, run ${I(`woof init${r?" --agent":""}`)}.`;Se({summary:f,details:d},{template:"projects-result",values:{summary:f,list:d}})}catch(t){let n=t instanceof Error?t.message:String(t);he({summary:"woof could not list projects.",details:n},{template:"projects-error",values:{details:n}}),process.exitCode=1}}}});import{readFileSync as hv}from"node:fs";import{parseArgs as dv}from"node:util";var Tp,Cp=G(()=>{"use strict";je();De();Tp={args:{agent:{description:"Use plain, noninteractive agent output",type:"boolean"}},meta:{description:"Print the user guide. Agents: run this first to learn what woof can do",name:"readme"},run({rawArgs:e}){try{let{positionals:t}=dv({args:e,allowPositionals:!0,options:{agent:{type:"boolean"}}});if(t.length)throw new Error("Readme does not accept positional arguments.");process.stdout.write(hv(Mt("README.md"),"utf8"))}catch(t){let n=t instanceof Error?t.message:String(t);he({summary:"woof could not print its user guide.",details:n,recovery:"Run woof from its checkout or an installed package; a standalone bundle copied elsewhere has no guide."},{template:"readme-error",values:{details:n}}),process.exitCode=1}}}});import{parseArgs as mv}from"node:util";var Ap,Rp=G(()=>{"use strict";Ve();ur();Ge();De();Ze();be();Je();Ap={args:{agent:{description:"Use plain, noninteractive agent output",type:"boolean"},project:{description:"Select a registered project",type:"string"},token:{description:"Optional token graph to validate",type:"positional",required:!1}},meta:{description:"Validate token catalogs without executing scripts",name:"validate"},async run({rawArgs:e}){try{let{values:r,positionals:i}=mv({args:e,allowPositionals:!0,options:{agent:{type:"boolean"},project:{type:"string"}}});if(i.length>1)throw new Error("Validate accepts at most one token address.");let o=i[0]??"",s=o.startsWith("$projects.")?jt(o):void 0;if(s?.project&&r.project&&s.project!==r.project)throw new Error(`Qualified address selects ${I(s.project)}, which contradicts ${I(`--project ${r.project}`)}.`);let a=s?.project??r.project,c=r.agent===!0||!!fe(),u=ye({...a?{project:a}:{},loader:se({cwd:process.cwd()})});if(u.selection==="ambiguous"){let d=u.candidates;if(!c&&process.stdout.isTTY){let h=await ke({message:"Project to use",options:d.map(y=>{let v=Ie(y);return{value:y.name,label:y.name,...v?{hint:v}:{}}})});if(!h)return ae("Validation cancelled.");u=ye({project:h,loader:se({cwd:process.cwd()})})}else{let h=d.map(v=>{let w=Ie(v),A=`${c?"- ":""}${v.name}`;return w?`${A} ${Oe(w)}`:A}).join(`
|
|
239
|
+
`),y=`woof validate${o?` ${Z(o)}`:""} --project NAME${c?" --agent":""}`;He({summary:"Several projects match this directory.",details:h,recovery:`Retry with ${I(y)}, with NAME replaced by the project name.`},{template:"validate-ambiguous",values:{projects:h,command:y}}),process.exitCode=1;return}}let l=we(u);if(o&&!c&&process.stdout.isTTY&&!l.tokens.has(s?.path??o)){let d=await Vt({message:"Token to validate",tokens:bt(l),query:o});if(!d)return ae("Validation cancelled.");o=d}let p=Sn(u)??"none (shared tokens only)";if(o){let d;try{d=Gt(l,o)}catch(w){if(!l.tokens.has(s?.path??o))throw w;return n("woof found 1 problem.",w instanceof Error?w.message:String(w),"it")}let h=d.requested,y=d.tokens.length-1,v=y===1?"1 referenced token":`${y} referenced tokens`;return t(`${I(h)} is valid${y?`, with ${v}`:""}.`,p)}let f=new Set;for(let d of l.tokens.keys())try{Gt(l,d)}catch(h){f.add(h instanceof Error?h.message:String(h))}if(f.size){let d=f.size===1?"1 problem":`${f.size} problems`,h=f.size===1?[...f][0]:[...f].map(y=>`- ${y}`).join(`
|
|
240
|
+
`);return n(`woof found ${d}.`,h,f.size===1?"it":"them")}let m=l.tokens.size;t(m===0?"There are no tokens to validate.":m===1?"1 token is valid.":`All ${m} tokens are valid.`,p)}catch(r){n("woof validation failed.",r instanceof Error?r.message:String(r),"it")}function t(r,i){Se({summary:r,details:Re([["Project",i]])},{template:"validate-result",values:{summary:r,project:i}})}function n(r,i,o){he({summary:r,details:i,recovery:`Fix ${o}, then run ${I("woof validate")} again.`},{template:"validate-error",values:{summary:r,details:i,fix:o}}),process.exitCode=1}}}});import{parseArgs as jp}from"node:util";function _p(e){let t=e.indexOf("--"),n=t<0?e:e.slice(0,t),r=t<0?[]:e.slice(t),i=n.includes("--migrate"),o=[...n.filter(d=>d!=="--migrate"),...r],s=n.findIndex(d=>!d.startsWith("-")),a=s<0?void 0:n[s];if(a&&!Object.hasOwn(Ip,a))throw new Error(`Unknown command: ${a}`);let c=s<0?[...n,...r]:n.slice(0,s),u=s<0?[]:[...n.slice(s+1),...r],l={migrate:{type:"boolean"},agent:{type:"boolean"},help:{type:"boolean",short:"h"},version:{type:"boolean",short:"v"}},p=jp({args:c,options:l,allowPositionals:!1}),f=jp({args:u,options:{...l,...a?Ip[a]:{}},allowPositionals:!0}),m=!a||p.values.help===!0||p.values.version===!0||f.values.help===!0||f.values.version===!0;if(a&&!m){let d=f.positionals.length;if(a==="import"&&d!==1)throw new Error("import requires exactly one argument.");if(a==="explain"&&d>1)throw new Error("explain accepts one token address.");if((a==="projects"||a==="export"||a==="readme")&&d!==0)throw new Error(`${a} accepts no positional arguments.`);if(a==="validate"&&d>1)throw new Error("validate accepts at most one token address.");if((a==="add"||a==="edit")&&d>1)throw new Error(`${a} accepts at most one token path.`);if(a==="init"&&d>(f.values.repo?1:0))throw new Error("init accepts one location, and only with --repo.");if(["get","explain","validate"].includes(a)&&d===1&&f.positionals[0].startsWith("$projects.")){let h=jt(f.positionals[0]),y=f.values.project;if(y&&h.project!==y)throw new Error(`Qualified address selects ${h.project}, which contradicts --project ${String(y)}.`)}}return{migrate:i,passive:m,command:a,args:o}}var Ip,Pp=G(()=>{"use strict";Je();Ip={add:{type:{type:"string"},content:{type:"string"},description:{type:"string"},tag:{type:"string",multiple:!0},shared:{type:"boolean"},repo:{type:"boolean"},project:{type:"string"}},get:{project:{type:"string"},search:{type:"boolean"}},edit:{project:{type:"string"},content:{type:"string"},description:{type:"string"},tag:{type:"string",multiple:!0},shared:{type:"boolean"},override:{type:"boolean"}},explain:{project:{type:"string"}},validate:{project:{type:"string"}},projects:{},export:{project:{type:"string"}},import:{decisions:{type:"string"}},init:{repo:{type:"boolean"},name:{type:"string"},"base-path":{type:"string",multiple:!0},"worktree-path":{type:"string",multiple:!0}},readme:{}}});import{readFileSync as gv,writeSync as yv}from"node:fs";import{homedir as vv}from"node:os";import{join as zs}from"node:path";function Np(e){try{return Number(/^\s+version:\s*(\d+)\s*$/m.exec(gv(e,"utf8"))?.[1]??0)}catch{return}}function Lp(){let e=Mt("skills",Op),t=Np(zs(e,"SKILL.md"))??0,n=[".claude",".agents"].map(s=>{let a=zs(vv(),s,"skills",Op);return{location:a,version:Np(zs(a,"SKILL.md"))}}),r=n.filter(s=>s.version!==void 0),i=r.filter(s=>s.version<t),o;r.length?i.length&&(o=Ye("skill-outdated",{source:e,bundled:t,copies:i.map(s=>`- ${s.location} (version ${s.version})`).join(`
|
|
241
|
+
`)})):o=Ye("skill-missing",{source:e,claude:n[0].location,agents:n[1].location}),o&&yv(2,`
|
|
242
|
+
${o}
|
|
243
|
+
`)}var Op,Dp=G(()=>{"use strict";je();De();Op="woof-execution"});import{randomUUID as wv}from"node:crypto";import{link as kv,mkdir as $v,rm as xv,writeFile as bv}from"node:fs/promises";import{dirname as Mp,join as Ev}from"node:path";async function Fp(e=J("woof.config.json")){let t=Ev(Mp(e),`.woof.config.${process.pid}.${wv()}.tmp`);try{return await $v(Mp(e),{recursive:!0}),await bv(t,`${JSON.stringify(vn,null,2)}
|
|
244
|
+
`,{flag:"wx",mode:384}),await kv(t,e),{file:e,created:!0}}catch(n){if(n.code==="EEXIST")return{file:e,created:!1};throw new Error(`Could not initialize personal configuration at ${e}.`,{cause:n})}finally{await xv(t,{force:!0})}}var zp=G(()=>{"use strict";Nr();je()});import{lstatSync as Sv,realpathSync as Bp}from"node:fs";function Gp(e){try{return Sv(e),!0}catch(t){if(t.code==="ENOENT")return!1;throw t}}async function Up(e){let t=J("woof.config.json");Gp(t)||(!e.passive||e.migrate)&&await Fp();let n=Gp(t),r=n&&e.migrate?so([{file:t,kind:"root"}]):void 0,i=n?r?.documents[0].migrated??Dt(t,"root"):void 0,o=ve(e.cwd),s=n?[{file:t,kind:"root"}]:[],a=new Map(n?[[Bp(t),"root"]]:[]),c=(u,l)=>{let p=Bp(u),f=a.get(p);if(f==="root")throw new Error(`Configuration has conflicting root and project roles: ${u}`);f||(a.set(p,l),s.push({file:u,kind:l}))};if(i&&"$projects"in i&&i.$projects)for(let u of Object.values(i.$projects))typeof u=="string"&&c(kt(u,o?{repoRoot:o}:{}).file,"project");if(o&&!zt(e.cwd)){let u=Bt(o);u&&c(u,"repository")}if(e.migrate){let u=so(s);if(r&&(u.documents[0]?.source!==r.documents[0]?.source||u.documents[0]?.target!==r.documents[0]?.target))throw new Error("Root configuration changed while identifying migration documents; retry.");if(u.documents.some(l=>l.changed)){let l=await Sa(u);for(let p of l)ln("migration-notice",{file:p.file,from:p.from,to:p.to});for(let p of s)p.kind==="root"?Dt(p.file,"root"):Dt(p.file,p.kind)}}else for(let u of s)u.kind!=="root"&&Dt(u.file,u.kind)}var Hp=G(()=>{"use strict";zp();vt();qr();je();De();Ze();be()});var Av={};var Tv,Cv,Wp=G(async()=>{"use strict";Js();Bi();ku();Yu();el();Al();Nl();vp();$p();Sp();Cp();Rp();Pp();je();De();Dp();Hp();process.stdout.on("error",e=>{if(e.code!=="EPIPE")throw e});process.once("exit",()=>{at()&&Lp()});Tv={add:wu,edit:Xu,explain:Qu,export:Cl,get:Ol,import:yp,init:kp,projects:Ep,readme:Tp,validate:Ap},Cv={args:{agent:{description:"Use plain, noninteractive agent output",type:"boolean"},migrate:{description:"Migrate configuration to the current schema",type:"boolean"}},meta:{name:"woof",version:Fn.version,description:Fn.description},subCommands:Tv};try{let e=_p(process.argv.slice(2));(e.command!=="readme"||e.migrate)&&await Up({migrate:e.migrate,passive:e.passive,cwd:process.cwd()});let n=e.args.some(r=>r==="--version"||r==="-v")&&e.args.every(r=>["--agent","--version","-v"].includes(r))?["--version"]:e.args.every(r=>r==="--agent")?[...e.args,"--help"]:e.args;await Zs(Cv,{rawArgs:n})}catch(e){let t=e instanceof Error?e.message:String(e),n=J("woof.config.json");he({summary:"woof could not prepare the invocation.",details:t,recovery:`Review the arguments and ${n}. If woof reports a pending migration, retry with --migrate.`},{template:"invocation-error",values:{details:t,configuration:n}}),process.exitCode=1}});Ve();(process.argv.includes("--agent")||fe())&&(process.env.NO_COLOR="1",delete process.env.FORCE_COLOR);await Wp().then(()=>Av);
|