@inkeep/open-knowledge 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/assets/skills/discovery/SKILL.md +1 -1
  2. package/dist/assets/skills/project/SKILL.md +1 -1
  3. package/dist/cli.mjs +46 -45
  4. package/dist/constants-B3sAUrcT.mjs +2 -0
  5. package/dist/dist-D_gfC1Ni.mjs +1 -0
  6. package/dist/{dist-DUA-uDSk.mjs → dist-xB__nIDC.mjs} +9 -7
  7. package/dist/{gh-detect-DIxiI-Um.mjs → gh-detect-Bh4D_lOI.mjs} +2 -2
  8. package/dist/index.mjs +1 -1
  9. package/dist/{init-C-YMpYNY.mjs → init-BrjcA5Su.mjs} +8 -8
  10. package/dist/init-arEiTnAN.mjs +1 -0
  11. package/dist/loader-B2sL9y5o.mjs +1 -0
  12. package/dist/{loader-BS97KMJd.mjs → loader-DW_tBjup.mjs} +3 -3
  13. package/dist/{preview-v_FnHM1p.mjs → preview-C25q0Hgx.mjs} +2 -2
  14. package/dist/preview-cCQ9spTm.mjs +1 -0
  15. package/dist/public/assets/{index-DsiNPb9w.js → index-DC8kiUXp.js} +76 -76
  16. package/dist/public/assets/{index-CUIPiS16.css → index-gsG_gWb2.css} +1 -1
  17. package/dist/public/index.html +2 -2
  18. package/dist/{repair-launch-json-CgdePX8D.mjs → repair-launch-json-C9O8Oe9q.mjs} +2 -2
  19. package/dist/{repair-mcp-configs-BMbDnGra.mjs → repair-mcp-configs-jbwMX9Vb.mjs} +2 -2
  20. package/dist/repair-skills-DPnST7TD.mjs +1 -0
  21. package/dist/{repair-skills-B0MyM-S8.mjs → repair-skills-DoA5FfyG.mjs} +2 -2
  22. package/dist/{src-BomuiQtB.mjs → src-CTbD2ATc.mjs} +2 -2
  23. package/dist/{start-D2Uxztu5.mjs → start-DNVUQi1R.mjs} +2 -2
  24. package/dist/start-uN6JRhPK.mjs +1 -0
  25. package/dist/{write-project-skill-grQBEqMb.mjs → write-project-skill-tdvNPxGJ.mjs} +2 -2
  26. package/package.json +1 -1
  27. package/dist/constants-76Uvqjmy.mjs +0 -2
  28. package/dist/dist-CL9tjej4.mjs +0 -1
  29. package/dist/init-BXz-SZwQ.mjs +0 -1
  30. package/dist/loader-DuFZD8NM.mjs +0 -1
  31. package/dist/preview-C6QYNQW4.mjs +0 -1
  32. package/dist/repair-skills-B75azgiA.mjs +0 -1
  33. package/dist/start-BOBY1H-7.mjs +0 -1
@@ -1,4 +1,4 @@
1
- import{a as __toCommonJS,i as __require$2,n as __esmMin,o as __toESM$2,r as __exportAll,t as __commonJSMin$2}from"./chunk-FK9Q3tQk.mjs";import{a as metrics$1,c as SpanStatusCode,i as propagation,l as SpanKind,n as init_esm$2,o as diag,r as trace,s as context,t as esm_exports$2}from"./esm-s2X3YAg-.mjs";import{a as acquireProcessLock,c as isValidLockPid,f as readServerLock,h as updateProcessLockPort,m as releaseServerLock,n as RUNTIME_VERSION,o as acquireServerLock,p as releaseProcessLock,s as isProcessAlive,t as ProcessLockCollisionError,u as readProcessLock}from"./server-lock-BIY3RMaC-CfCHCMTe.mjs";import{a as require_src$15,i as simpleGit,n as withParentLock,r as esm_default,t as createGitInstance}from"./git-handle-uz8TUFSi-BRV63-ar.mjs";import{r as diffLines,t as createPatch}from"./libesm-B_qVEpZ1.mjs";import{n as mimes,t as build_default}from"./build-CHU3LuiR.mjs";import{t as require_yazl}from"./yazl-DjRp4wSy.mjs";import{t as b1}from"./chunk-YNYSPYQ5-DesxOVHh.mjs";import{a as c$1,c as h$2,d as m,f as p,h as x,i as b,l as i$1,m as v$1,n as C$1,o as d,p as u,r as a,s as f,t as $$2,u as l}from"./chunk-GFQRA5P5-DnjwTqP3.mjs";import{A as gt,B as wt,C as _i$1,D as da$1,E as bt,F as pe,H as zi$1,I as qi,L as us$1,M as ma$1,N as mt$1,O as di$1,P as pa$1,S as X$1,T as bl,V as xi$1,_ as Ti$1,a as Fi$1,b as W$1,c as M,d as P,f as Pt$1,g as T,h as Sl,i as En$1,j as he,k as ga$1,l as Nl,m as Se,n as Bi$1,o as Fs$1,p as R,r as Ci$1,s as G$1,t as Al,u as Oi$1,v as V,w as be,x as Wi$1,y as Vi$1,z as wl}from"./chunk-FEIOJCZD-C25Und0M.mjs";import{a as d$1,c as m$1,d as y,i as c$2,l as p$1,n as N,o as f$1,r as P$1,s as h$3,t as $$3,u as v$2}from"./chunk-XHM67O4N-akBjDPaR.mjs";import{n as l$1,r as o,t as h$4}from"./chunk-R6VWJ2ZL-FwG_Za20.mjs";import{r as o$1}from"./chunk-CWQS3NFK-Co4ALolT.mjs";import"./chunk-DXB73IDG-DIKSLkPq.mjs";import{n as d$2,t as _$1}from"./chunk-5QMZ5MUS-CAp625aG.mjs";import{n as u$1,t as b$1}from"./chunk-A5O5YHGN-DvJz5Cpw.mjs";import{n,r,t as c$3}from"./chunk-OJDRYQWQ-ikvLWpfV.mjs";import{r as x$1,t as a$1}from"./chunk-24IMIIXA-B6yIPkk2.mjs";import{n as n$1}from"./chunk-3THT3N7L-DztAF386.mjs";import{t as n$2}from"./chunk-44UOCSGV-CaFxJDHm.mjs";import{createRequire}from"node:module";import{execFile,spawn,spawnSync}from"node:child_process";import*as U from"node:path";import minpath,{basename,dirname,extname,isAbsolute,join,normalize,posix,relative,resolve,sep,win32}from"node:path";import*as I from"node:fs";import{appendFileSync,closeSync,cpSync,createReadStream,createWriteStream,existsSync,linkSync,lstatSync,mkdirSync,openSync,readFile,readFileSync,readSync,readdirSync,realpathSync,renameSync,rmSync,rmdirSync,statSync,unlinkSync,writeFileSync}from"node:fs";import minproc from"node:process";import{homedir,hostname,platform,tmpdir}from"node:os";import{URLSearchParams as URLSearchParams$1,fileURLToPath,fileURLToPath as urlToPath}from"node:url";import{AsyncLocalStorage}from"node:async_hooks";import{promisify}from"node:util";import{Readable}from"stream";import crypto$1,{createHash,randomUUID,webcrypto}from"node:crypto";import{Transform}from"node:stream";import crypto$2 from"crypto";import*as zlib$1 from"zlib";import{access,constants,mkdir,readFile as readFile$1,readdir,realpath,rename,stat as stat$1,unlink,writeFile}from"node:fs/promises";import{pipeline}from"node:stream/promises";import{setTimeout as setTimeout$1}from"node:timers/promises";import{Http2ServerRequest,constants as constants$1}from"http2";import{lookup}from"node:dns";import{createServer}from"node:http";var require_identity=__commonJSMin$2((e=>{let t=Symbol.for(`yaml.alias`),S=Symbol.for(`yaml.document`),w=Symbol.for(`yaml.map`),E=Symbol.for(`yaml.pair`),D=Symbol.for(`yaml.scalar`),O=Symbol.for(`yaml.seq`),k=Symbol.for(`yaml.node.type`),j=e=>!!e&&typeof e==`object`&&e[k]===t,F=e=>!!e&&typeof e==`object`&&e[k]===S,L=e=>!!e&&typeof e==`object`&&e[k]===w,B=e=>!!e&&typeof e==`object`&&e[k]===E,H=e=>!!e&&typeof e==`object`&&e[k]===D,q=e=>!!e&&typeof e==`object`&&e[k]===O;function J(e){if(e&&typeof e==`object`)switch(e[k]){case w:case O:return!0}return!1}function Y(e){if(e&&typeof e==`object`)switch(e[k]){case t:case w:case D:case O:return!0}return!1}e.ALIAS=t,e.DOC=S,e.MAP=w,e.NODE_TYPE=k,e.PAIR=E,e.SCALAR=D,e.SEQ=O,e.hasAnchor=e=>(H(e)||J(e))&&!!e.anchor,e.isAlias=j,e.isCollection=J,e.isDocument=F,e.isMap=L,e.isNode=Y,e.isPair=B,e.isScalar=H,e.isSeq=q})),require_visit=__commonJSMin$2((e=>{var t=require_identity();let S=Symbol(`break visit`),w=Symbol(`skip children`),E=Symbol(`remove node`);function D(e,S){let w=F(S);t.isDocument(e)?O(null,e.contents,w,Object.freeze([e]))===E&&(e.contents=null):O(null,e,w,Object.freeze([]))}D.BREAK=S,D.SKIP=w,D.REMOVE=E;function O(e,w,D,k){let j=L(e,w,D,k);if(t.isNode(j)||t.isPair(j))return B(e,k,j),O(e,j,D,k);if(typeof j!=`symbol`){if(t.isCollection(w)){k=Object.freeze(k.concat(w));for(let e=0;e<w.items.length;++e){let t=O(e,w.items[e],D,k);if(typeof t==`number`)e=t-1;else if(t===S)return S;else t===E&&(w.items.splice(e,1),--e)}}else if(t.isPair(w)){k=Object.freeze(k.concat(w));let e=O(`key`,w.key,D,k);if(e===S)return S;e===E&&(w.key=null);let t=O(`value`,w.value,D,k);if(t===S)return S;t===E&&(w.value=null)}}return j}async function k(e,S){let w=F(S);t.isDocument(e)?await j(null,e.contents,w,Object.freeze([e]))===E&&(e.contents=null):await j(null,e,w,Object.freeze([]))}k.BREAK=S,k.SKIP=w,k.REMOVE=E;async function j(e,w,D,O){let k=await L(e,w,D,O);if(t.isNode(k)||t.isPair(k))return B(e,O,k),j(e,k,D,O);if(typeof k!=`symbol`){if(t.isCollection(w)){O=Object.freeze(O.concat(w));for(let e=0;e<w.items.length;++e){let t=await j(e,w.items[e],D,O);if(typeof t==`number`)e=t-1;else if(t===S)return S;else t===E&&(w.items.splice(e,1),--e)}}else if(t.isPair(w)){O=Object.freeze(O.concat(w));let e=await j(`key`,w.key,D,O);if(e===S)return S;e===E&&(w.key=null);let t=await j(`value`,w.value,D,O);if(t===S)return S;t===E&&(w.value=null)}}return k}function F(e){return typeof e==`object`&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function L(e,S,w,E){if(typeof w==`function`)return w(e,S,E);if(t.isMap(S))return w.Map?.(e,S,E);if(t.isSeq(S))return w.Seq?.(e,S,E);if(t.isPair(S))return w.Pair?.(e,S,E);if(t.isScalar(S))return w.Scalar?.(e,S,E);if(t.isAlias(S))return w.Alias?.(e,S,E)}function B(e,S,w){let E=S[S.length-1];if(t.isCollection(E))E.items[e]=w;else if(t.isPair(E))e===`key`?E.key=w:E.value=w;else if(t.isDocument(E))E.contents=w;else{let e=t.isAlias(E)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}e.visit=D,e.visitAsync=k})),require_directives=__commonJSMin$2((e=>{var t=require_identity(),S=require_visit();let w={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},E=e=>e.replace(/[!,[\]{}]/g,e=>w[e]);var D=class e{constructor(t,S){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,S)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case`1.1`:this.atNextDocument=!0;break;case`1.2`:this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:`1.2`},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,S){this.atNextDocument&&=(this.yaml={explicit:e.defaultYaml.explicit,version:`1.1`},this.tags=Object.assign({},e.defaultTags),!1);let w=t.trim().split(/[ \t]+/),E=w.shift();switch(E){case`%TAG`:{if(w.length!==2&&(S(0,`%TAG directive should contain exactly two parts`),w.length<2))return!1;let[e,t]=w;return this.tags[e]=t,!0}case`%YAML`:{if(this.yaml.explicit=!0,w.length!==1)return S(0,`%YAML directive should contain exactly one part`),!1;let[e]=w;if(e===`1.1`||e===`1.2`)return this.yaml.version=e,!0;{let t=/^\d+\.\d+$/.test(e);return S(6,`Unsupported YAML version ${e}`,t),!1}}default:return S(0,`Unknown directive ${E}`,!0),!1}}tagName(e,t){if(e===`!`)return`!`;if(e[0]!==`!`)return t(`Not a valid tag: ${e}`),null;if(e[1]===`<`){let S=e.slice(2,-1);return S===`!`||S===`!!`?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==`>`&&t(`Verbatim tags must end with a >`),S)}let[,S,w]=e.match(/^(.*!)([^!]*)$/s);w||t(`The ${e} tag has no suffix`);let E=this.tags[S];if(E)try{return E+decodeURIComponent(w)}catch(e){return t(String(e)),null}return S===`!`?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,S]of Object.entries(this.tags))if(e.startsWith(S))return t+E(e.substring(S.length));return e[0]===`!`?e:`!<${e}>`}toString(e){let w=this.yaml.explicit?[`%YAML ${this.yaml.version||`1.2`}`]:[],E=Object.entries(this.tags),D;if(e&&E.length>0&&t.isNode(e.contents)){let w={};S.visit(e.contents,(e,S)=>{t.isNode(S)&&S.tag&&(w[S.tag]=!0)}),D=Object.keys(w)}else D=[];for(let[t,S]of E)t===`!!`&&S===`tag:yaml.org,2002:`||(!e||D.some(e=>e.startsWith(S)))&&w.push(`%TAG ${t} ${S}`);return w.join(`
1
+ import{a as __toCommonJS,i as __require$2,n as __esmMin,o as __toESM$2,r as __exportAll,t as __commonJSMin$2}from"./chunk-FK9Q3tQk.mjs";import{a as metrics$1,c as SpanStatusCode,i as propagation,l as SpanKind,n as init_esm$2,o as diag,r as trace,s as context,t as esm_exports$2}from"./esm-s2X3YAg-.mjs";import{a as acquireProcessLock,c as isValidLockPid,f as readServerLock,h as updateProcessLockPort,m as releaseServerLock,n as RUNTIME_VERSION,o as acquireServerLock,p as releaseProcessLock,s as isProcessAlive,t as ProcessLockCollisionError,u as readProcessLock}from"./server-lock-BIY3RMaC-CfCHCMTe.mjs";import{a as require_src$15,i as simpleGit,n as withParentLock,r as esm_default,t as createGitInstance}from"./git-handle-uz8TUFSi-BRV63-ar.mjs";import{r as diffLines,t as createPatch}from"./libesm-B_qVEpZ1.mjs";import{n as mimes,t as build_default}from"./build-CHU3LuiR.mjs";import{t as require_yazl}from"./yazl-DjRp4wSy.mjs";import{t as b1}from"./chunk-YNYSPYQ5-DesxOVHh.mjs";import{a as c$1,c as h$2,d as m,f as p,h as x,i as b,l as i$1,m as v$1,n as C$1,o as d,p as u,r as a,s as f,t as $$2,u as l}from"./chunk-GFQRA5P5-DnjwTqP3.mjs";import{A as gt,B as wt,C as _i$1,D as da$1,E as bt,F as pe,H as zi$1,I as qi,L as us$1,M as ma$1,N as mt$1,O as di$1,P as pa$1,S as X$1,T as bl,V as xi$1,_ as Ti$1,a as Fi$1,b as W$1,c as M,d as P,f as Pt$1,g as T,h as Sl,i as En$1,j as he,k as ga$1,l as Nl,m as Se,n as Bi$1,o as Fs$1,p as R,r as Ci$1,s as G$1,t as Al,u as Oi$1,v as V,w as be,x as Wi$1,y as Vi$1,z as wl}from"./chunk-FEIOJCZD-C25Und0M.mjs";import{a as d$1,c as m$1,d as y,i as c$2,l as p$1,n as N,o as f$1,r as P$1,s as h$3,t as $$3,u as v$2}from"./chunk-XHM67O4N-akBjDPaR.mjs";import{n as l$1,r as o,t as h$4}from"./chunk-R6VWJ2ZL-FwG_Za20.mjs";import{r as o$1}from"./chunk-CWQS3NFK-Co4ALolT.mjs";import"./chunk-DXB73IDG-DIKSLkPq.mjs";import{n as d$2,t as _$1}from"./chunk-5QMZ5MUS-CAp625aG.mjs";import{n as u$1,t as b$1}from"./chunk-A5O5YHGN-DvJz5Cpw.mjs";import{n,r,t as c$3}from"./chunk-OJDRYQWQ-ikvLWpfV.mjs";import{r as x$1,t as a$1}from"./chunk-24IMIIXA-B6yIPkk2.mjs";import{n as n$1}from"./chunk-3THT3N7L-DztAF386.mjs";import{t as n$2}from"./chunk-44UOCSGV-CaFxJDHm.mjs";import{createRequire}from"node:module";import{execFile,spawn,spawnSync}from"node:child_process";import*as U from"node:path";import minpath,{basename,dirname,extname,isAbsolute,join,normalize,posix,relative,resolve,sep,win32}from"node:path";import*as I from"node:fs";import{appendFileSync,closeSync,cpSync,createReadStream,createWriteStream,existsSync,linkSync,lstatSync,mkdirSync,openSync,readFile,readFileSync,readSync,readdirSync,realpathSync,renameSync,rmSync,rmdirSync,statSync,unlinkSync,writeFileSync}from"node:fs";import minproc from"node:process";import{homedir,hostname,platform,tmpdir}from"node:os";import{URLSearchParams as URLSearchParams$1,fileURLToPath,fileURLToPath as urlToPath}from"node:url";import{AsyncLocalStorage}from"node:async_hooks";import{promisify}from"node:util";import{Readable}from"stream";import crypto$1,{createHash,randomUUID,webcrypto}from"node:crypto";import{Transform}from"node:stream";import crypto$2 from"crypto";import*as zlib$1 from"zlib";import{access,constants as constants$1,mkdir,readFile as readFile$1,readdir,realpath,rename,stat as stat$1,unlink,writeFile}from"node:fs/promises";import{pipeline}from"node:stream/promises";import{setTimeout as setTimeout$1}from"node:timers/promises";import{Http2ServerRequest,constants as constants$2}from"http2";import{lookup}from"node:dns";import{createServer}from"node:http";var require_identity=__commonJSMin$2((e=>{let t=Symbol.for(`yaml.alias`),S=Symbol.for(`yaml.document`),w=Symbol.for(`yaml.map`),E=Symbol.for(`yaml.pair`),D=Symbol.for(`yaml.scalar`),O=Symbol.for(`yaml.seq`),k=Symbol.for(`yaml.node.type`),j=e=>!!e&&typeof e==`object`&&e[k]===t,F=e=>!!e&&typeof e==`object`&&e[k]===S,L=e=>!!e&&typeof e==`object`&&e[k]===w,B=e=>!!e&&typeof e==`object`&&e[k]===E,H=e=>!!e&&typeof e==`object`&&e[k]===D,q=e=>!!e&&typeof e==`object`&&e[k]===O;function J(e){if(e&&typeof e==`object`)switch(e[k]){case w:case O:return!0}return!1}function Y(e){if(e&&typeof e==`object`)switch(e[k]){case t:case w:case D:case O:return!0}return!1}e.ALIAS=t,e.DOC=S,e.MAP=w,e.NODE_TYPE=k,e.PAIR=E,e.SCALAR=D,e.SEQ=O,e.hasAnchor=e=>(H(e)||J(e))&&!!e.anchor,e.isAlias=j,e.isCollection=J,e.isDocument=F,e.isMap=L,e.isNode=Y,e.isPair=B,e.isScalar=H,e.isSeq=q})),require_visit=__commonJSMin$2((e=>{var t=require_identity();let S=Symbol(`break visit`),w=Symbol(`skip children`),E=Symbol(`remove node`);function D(e,S){let w=F(S);t.isDocument(e)?O(null,e.contents,w,Object.freeze([e]))===E&&(e.contents=null):O(null,e,w,Object.freeze([]))}D.BREAK=S,D.SKIP=w,D.REMOVE=E;function O(e,w,D,k){let j=L(e,w,D,k);if(t.isNode(j)||t.isPair(j))return B(e,k,j),O(e,j,D,k);if(typeof j!=`symbol`){if(t.isCollection(w)){k=Object.freeze(k.concat(w));for(let e=0;e<w.items.length;++e){let t=O(e,w.items[e],D,k);if(typeof t==`number`)e=t-1;else if(t===S)return S;else t===E&&(w.items.splice(e,1),--e)}}else if(t.isPair(w)){k=Object.freeze(k.concat(w));let e=O(`key`,w.key,D,k);if(e===S)return S;e===E&&(w.key=null);let t=O(`value`,w.value,D,k);if(t===S)return S;t===E&&(w.value=null)}}return j}async function k(e,S){let w=F(S);t.isDocument(e)?await j(null,e.contents,w,Object.freeze([e]))===E&&(e.contents=null):await j(null,e,w,Object.freeze([]))}k.BREAK=S,k.SKIP=w,k.REMOVE=E;async function j(e,w,D,O){let k=await L(e,w,D,O);if(t.isNode(k)||t.isPair(k))return B(e,O,k),j(e,k,D,O);if(typeof k!=`symbol`){if(t.isCollection(w)){O=Object.freeze(O.concat(w));for(let e=0;e<w.items.length;++e){let t=await j(e,w.items[e],D,O);if(typeof t==`number`)e=t-1;else if(t===S)return S;else t===E&&(w.items.splice(e,1),--e)}}else if(t.isPair(w)){O=Object.freeze(O.concat(w));let e=await j(`key`,w.key,D,O);if(e===S)return S;e===E&&(w.key=null);let t=await j(`value`,w.value,D,O);if(t===S)return S;t===E&&(w.value=null)}}return k}function F(e){return typeof e==`object`&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function L(e,S,w,E){if(typeof w==`function`)return w(e,S,E);if(t.isMap(S))return w.Map?.(e,S,E);if(t.isSeq(S))return w.Seq?.(e,S,E);if(t.isPair(S))return w.Pair?.(e,S,E);if(t.isScalar(S))return w.Scalar?.(e,S,E);if(t.isAlias(S))return w.Alias?.(e,S,E)}function B(e,S,w){let E=S[S.length-1];if(t.isCollection(E))E.items[e]=w;else if(t.isPair(E))e===`key`?E.key=w:E.value=w;else if(t.isDocument(E))E.contents=w;else{let e=t.isAlias(E)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}e.visit=D,e.visitAsync=k})),require_directives=__commonJSMin$2((e=>{var t=require_identity(),S=require_visit();let w={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},E=e=>e.replace(/[!,[\]{}]/g,e=>w[e]);var D=class e{constructor(t,S){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,S)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case`1.1`:this.atNextDocument=!0;break;case`1.2`:this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:`1.2`},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,S){this.atNextDocument&&=(this.yaml={explicit:e.defaultYaml.explicit,version:`1.1`},this.tags=Object.assign({},e.defaultTags),!1);let w=t.trim().split(/[ \t]+/),E=w.shift();switch(E){case`%TAG`:{if(w.length!==2&&(S(0,`%TAG directive should contain exactly two parts`),w.length<2))return!1;let[e,t]=w;return this.tags[e]=t,!0}case`%YAML`:{if(this.yaml.explicit=!0,w.length!==1)return S(0,`%YAML directive should contain exactly one part`),!1;let[e]=w;if(e===`1.1`||e===`1.2`)return this.yaml.version=e,!0;{let t=/^\d+\.\d+$/.test(e);return S(6,`Unsupported YAML version ${e}`,t),!1}}default:return S(0,`Unknown directive ${E}`,!0),!1}}tagName(e,t){if(e===`!`)return`!`;if(e[0]!==`!`)return t(`Not a valid tag: ${e}`),null;if(e[1]===`<`){let S=e.slice(2,-1);return S===`!`||S===`!!`?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==`>`&&t(`Verbatim tags must end with a >`),S)}let[,S,w]=e.match(/^(.*!)([^!]*)$/s);w||t(`The ${e} tag has no suffix`);let E=this.tags[S];if(E)try{return E+decodeURIComponent(w)}catch(e){return t(String(e)),null}return S===`!`?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,S]of Object.entries(this.tags))if(e.startsWith(S))return t+E(e.substring(S.length));return e[0]===`!`?e:`!<${e}>`}toString(e){let w=this.yaml.explicit?[`%YAML ${this.yaml.version||`1.2`}`]:[],E=Object.entries(this.tags),D;if(e&&E.length>0&&t.isNode(e.contents)){let w={};S.visit(e.contents,(e,S)=>{t.isNode(S)&&S.tag&&(w[S.tag]=!0)}),D=Object.keys(w)}else D=[];for(let[t,S]of E)t===`!!`&&S===`tag:yaml.org,2002:`||(!e||D.some(e=>e.startsWith(S)))&&w.push(`%TAG ${t} ${S}`);return w.join(`
2
2
  `)}};D.defaultYaml={explicit:!1,version:`1.2`},D.defaultTags={"!!":`tag:yaml.org,2002:`},e.Directives=D})),require_anchors=__commonJSMin$2((e=>{var t=require_identity(),S=require_visit();function w(e){if(/[\x00-\x19\s,[\]{}]/.test(e)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(e)}`;throw Error(t)}return!0}function E(e){let t=new Set;return S.visit(e,{Value(e,S){S.anchor&&t.add(S.anchor)}}),t}function D(e,t){for(let S=1;;++S){let w=`${e}${S}`;if(!t.has(w))return w}}function O(e,S){let w=[],O=new Map,k=null;return{onAnchor:t=>{w.push(t),k??=E(e);let O=D(S,k);return k.add(O),O},setAnchors:()=>{for(let e of w){let S=O.get(e);if(typeof S==`object`&&S.anchor&&(t.isScalar(S.node)||t.isCollection(S.node)))S.node.anchor=S.anchor;else{let t=Error(`Failed to resolve repeated object (this should not happen)`);throw t.source=e,t}}},sourceObjects:O}}e.anchorIsValid=w,e.anchorNames=E,e.createNodeAnchors=O,e.findNewAnchor=D})),require_applyReviver=__commonJSMin$2((e=>{function t(e,S,w,E){if(E&&typeof E==`object`)if(Array.isArray(E))for(let S=0,w=E.length;S<w;++S){let w=E[S],D=t(e,E,String(S),w);D===void 0?delete E[S]:D!==w&&(E[S]=D)}else if(E instanceof Map)for(let S of Array.from(E.keys())){let w=E.get(S),D=t(e,E,S,w);D===void 0?E.delete(S):D!==w&&E.set(S,D)}else if(E instanceof Set)for(let S of Array.from(E)){let w=t(e,E,S,S);w===void 0?E.delete(S):w!==S&&(E.delete(S),E.add(w))}else for(let[S,w]of Object.entries(E)){let D=t(e,E,S,w);D===void 0?delete E[S]:D!==w&&(E[S]=D)}return e.call(S,w,E)}e.applyReviver=t})),require_toJS=__commonJSMin$2((e=>{var t=require_identity();function S(e,w,E){if(Array.isArray(e))return e.map((e,t)=>S(e,String(t),E));if(e&&typeof e.toJSON==`function`){if(!E||!t.hasAnchor(e))return e.toJSON(w,E);let S={aliasCount:0,count:1,res:void 0};E.anchors.set(e,S),E.onCreate=e=>{S.res=e,delete E.onCreate};let D=e.toJSON(w,E);return E.onCreate&&E.onCreate(D),D}return typeof e==`bigint`&&!E?.keep?Number(e):e}e.toJS=S})),require_Node=__commonJSMin$2((e=>{var t=require_applyReviver(),S=require_identity(),w=require_toJS();e.NodeBase=class{constructor(e){Object.defineProperty(this,S.NODE_TYPE,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:E,maxAliasCount:D,onAnchor:O,reviver:k}={}){if(!S.isDocument(e))throw TypeError(`A document argument is required`);let j={anchors:new Map,doc:e,keep:!0,mapAsMap:E===!0,mapKeyWarned:!1,maxAliasCount:typeof D==`number`?D:100},F=w.toJS(this,``,j);if(typeof O==`function`)for(let{count:e,res:t}of j.anchors.values())O(t,e);return typeof k==`function`?t.applyReviver(k,{"":F},``,F):F}}})),require_Alias=__commonJSMin$2((e=>{var t=require_anchors(),S=require_visit(),w=require_identity(),E=require_Node(),D=require_toJS(),O=class extends E.NodeBase{constructor(e){super(w.ALIAS),this.source=e,Object.defineProperty(this,`tag`,{set(){throw Error(`Alias nodes cannot have tags`)}})}resolve(e,t){if(t?.maxAliasCount===0)throw ReferenceError(`Alias resolution is disabled`);let E;t?.aliasResolveCache?E=t.aliasResolveCache:(E=[],S.visit(e,{Node:(e,t)=>{(w.isAlias(t)||w.hasAnchor(t))&&E.push(t)}}),t&&(t.aliasResolveCache=E));let D;for(let e of E){if(e===this)break;e.anchor===this.source&&(D=e)}return D}toJSON(e,t){if(!t)return{source:this.source};let{anchors:S,doc:w,maxAliasCount:E}=t,O=this.resolve(w,t);if(!O){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(e)}let j=S.get(O);if(j||=(D.toJS(O,null,t),S.get(O)),j?.res===void 0)throw ReferenceError(`This should not happen: Alias anchor was not resolved?`);if(E>=0&&(j.count+=1,j.aliasCount===0&&(j.aliasCount=k(w,O,S)),j.count*j.aliasCount>E))throw ReferenceError(`Excessive alias count indicates a resource exhaustion attack`);return j.res}toString(e,S,w){let E=`*${this.source}`;if(e){if(t.anchorIsValid(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(e)}if(e.implicitKey)return`${E} `}return E}};function k(e,t,S){if(w.isAlias(t)){let w=t.resolve(e),E=S&&w&&S.get(w);return E?E.count*E.aliasCount:0}else if(w.isCollection(t)){let w=0;for(let E of t.items){let t=k(e,E,S);t>w&&(w=t)}return w}else if(w.isPair(t)){let w=k(e,t.key,S),E=k(e,t.value,S);return Math.max(w,E)}return 1}e.Alias=O})),require_Scalar=__commonJSMin$2((e=>{var t=require_identity(),S=require_Node(),w=require_toJS();let E=e=>!e||typeof e!=`function`&&typeof e!=`object`;var D=class extends S.NodeBase{constructor(e){super(t.SCALAR),this.value=e}toJSON(e,t){return t?.keep?this.value:w.toJS(this.value,e,t)}toString(){return String(this.value)}};D.BLOCK_FOLDED=`BLOCK_FOLDED`,D.BLOCK_LITERAL=`BLOCK_LITERAL`,D.PLAIN=`PLAIN`,D.QUOTE_DOUBLE=`QUOTE_DOUBLE`,D.QUOTE_SINGLE=`QUOTE_SINGLE`,e.Scalar=D,e.isScalarValue=E})),require_createNode=__commonJSMin$2((e=>{var t=require_Alias(),S=require_identity(),w=require_Scalar();let E=`tag:yaml.org,2002:`;function D(e,t,S){if(t){let e=S.filter(e=>e.tag===t),w=e.find(e=>!e.format)??e[0];if(!w)throw Error(`Tag ${t} not found`);return w}return S.find(t=>t.identify?.(e)&&!t.format)}function O(e,E,O){if(S.isDocument(e)&&(e=e.contents),S.isNode(e))return e;if(S.isPair(e)){let t=O.schema[S.MAP].createNode?.(O.schema,null,O);return t.items.push(e),t}(e instanceof String||e instanceof Number||e instanceof Boolean||typeof BigInt<`u`&&e instanceof BigInt)&&(e=e.valueOf());let{aliasDuplicateObjects:k,onAnchor:j,onTagObj:F,schema:L,sourceObjects:B}=O,H;if(k&&e&&typeof e==`object`){if(H=B.get(e),H)return H.anchor??=j(e),new t.Alias(H.anchor);H={anchor:null,node:null},B.set(e,H)}E?.startsWith(`!!`)&&(E=`tag:yaml.org,2002:`+E.slice(2));let q=D(e,E,L.tags);if(!q){if(e&&typeof e.toJSON==`function`&&(e=e.toJSON()),!e||typeof e!=`object`){let t=new w.Scalar(e);return H&&(H.node=t),t}q=e instanceof Map?L[S.MAP]:Symbol.iterator in Object(e)?L[S.SEQ]:L[S.MAP]}F&&(F(q),delete O.onTagObj);let J=q?.createNode?q.createNode(O.schema,e,O):typeof q?.nodeClass?.from==`function`?q.nodeClass.from(O.schema,e,O):new w.Scalar(e);return E?J.tag=E:q.default||(J.tag=q.tag),H&&(H.node=J),J}e.createNode=O})),require_Collection=__commonJSMin$2((e=>{var t=require_createNode(),S=require_identity(),w=require_Node();function E(e,S,w){let E=w;for(let e=S.length-1;e>=0;--e){let t=S[e];if(typeof t==`number`&&Number.isInteger(t)&&t>=0){let e=[];e[t]=E,E=e}else E=new Map([[t,E]])}return t.createNode(E,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error(`This should not happen, please report a bug.`)},schema:e,sourceObjects:new Map})}let D=e=>e==null||typeof e==`object`&&!!e[Symbol.iterator]().next().done;e.Collection=class extends w.NodeBase{constructor(e,t){super(e),Object.defineProperty(this,`schema`,{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(t=>S.isNode(t)||S.isPair(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(D(e))this.add(t);else{let[w,...D]=e,O=this.get(w,!0);if(S.isCollection(O))O.addIn(D,t);else if(O===void 0&&this.schema)this.set(w,E(this.schema,D,t));else throw Error(`Expected YAML collection at ${w}. Remaining path: ${D}`)}}deleteIn(e){let[t,...w]=e;if(w.length===0)return this.delete(t);let E=this.get(t,!0);if(S.isCollection(E))return E.deleteIn(w);throw Error(`Expected YAML collection at ${t}. Remaining path: ${w}`)}getIn(e,t){let[w,...E]=e,D=this.get(w,!0);return E.length===0?!t&&S.isScalar(D)?D.value:D:S.isCollection(D)?D.getIn(E,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!S.isPair(t))return!1;let w=t.value;return w==null||e&&S.isScalar(w)&&w.value==null&&!w.commentBefore&&!w.comment&&!w.tag})}hasIn(e){let[t,...w]=e;if(w.length===0)return this.has(t);let E=this.get(t,!0);return S.isCollection(E)?E.hasIn(w):!1}setIn(e,t){let[w,...D]=e;if(D.length===0)this.set(w,t);else{let e=this.get(w,!0);if(S.isCollection(e))e.setIn(D,t);else if(e===void 0&&this.schema)this.set(w,E(this.schema,D,t));else throw Error(`Expected YAML collection at ${w}. Remaining path: ${D}`)}}},e.collectionFromPath=E,e.isEmptyPath=D})),require_stringifyComment=__commonJSMin$2((e=>{let t=e=>e.replace(/^(?!$)(?: $)?/gm,`#`);function S(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}e.indentComment=S,e.lineComment=(e,t,w)=>e.endsWith(`
3
3
  `)?S(w,t):w.includes(`
4
4
  `)?`
@@ -471,7 +471,7 @@ To resolve the conflict:`,(0,w.getConflictResolutionRecipe)(E,e))),D=O):S.diag.w
471
471
  || ${k} === "boolean" || ${D} === null`).assign(j,(0,E._)`[${D}]`)}}}function q({gen:e,parentData:t,parentDataProperty:S},w){e.if((0,E._)`${t} !== undefined`,()=>e.assign((0,E._)`${t}[${S}]`,w))}function J(e,t,S,w=O.Correct){let D=w===O.Correct?E.operators.EQ:E.operators.NEQ,k;switch(e){case`null`:return(0,E._)`${t} ${D} null`;case`array`:k=(0,E._)`Array.isArray(${t})`;break;case`object`:k=(0,E._)`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case`integer`:k=j((0,E._)`!(${t} % 1) && !isNaN(${t})`);break;case`number`:k=j();break;default:return(0,E._)`typeof ${t} ${D} ${e}`}return w===O.Correct?k:(0,E.not)(k);function j(e=E.nil){return(0,E.and)((0,E._)`typeof ${t} == "number"`,e,S?(0,E._)`isFinite(${t})`:E.nil)}}e.checkDataType=J;function Y(e,t,S,w){if(e.length===1)return J(e[0],t,S,w);let O,k=(0,D.toHash)(e);if(k.array&&k.object){let e=(0,E._)`typeof ${t} != "object"`;O=k.null?e:(0,E._)`!${t} || ${e}`,delete k.null,delete k.array,delete k.object}else O=E.nil;k.number&&delete k.integer;for(let e in k)O=(0,E.and)(O,J(e,t,S,w));return O}e.checkDataTypes=Y;let ee={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>typeof e==`string`?(0,E._)`{type: ${e}}`:(0,E._)`{type: ${t}}`};function te(e){let t=ne(e);(0,w.reportError)(t,ee)}e.reportTypeError=te;function ne(e){let{gen:t,data:S,schema:w}=e,E=(0,D.schemaRefOrVal)(e,w,`type`);return{gen:t,keyword:`type`,data:S,schema:w.type,schemaCode:E,schemaValue:E,parentSchema:w,params:{},it:e}}})),require_defaults=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.assignDefaults=void 0;let t=require_codegen(),S=require_util();function w(e,t){let{properties:S,items:w}=e.schema;if(t===`object`&&S)for(let t in S)E(e,t,S[t].default);else t===`array`&&Array.isArray(w)&&w.forEach((t,S)=>E(e,S,t.default))}e.assignDefaults=w;function E(e,w,E){let{gen:D,compositeRule:O,data:k,opts:j}=e;if(E===void 0)return;let F=(0,t._)`${k}${(0,t.getProperty)(w)}`;if(O){(0,S.checkStrictMode)(e,`default is ignored for: ${F}`);return}let L=(0,t._)`${F} === undefined`;j.useDefaults===`empty`&&(L=(0,t._)`${L} || ${F} === null || ${F} === ""`),D.if(L,(0,t._)`${F} = ${(0,t.stringify)(E)}`)}})),require_code=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateUnion=e.validateArray=e.usePattern=e.callValidateCode=e.schemaProperties=e.allSchemaProperties=e.noPropertyInData=e.propertyInData=e.isOwnProperty=e.hasPropFunc=e.reportMissingProp=e.checkMissingProp=e.checkReportMissingProp=void 0;let t=require_codegen(),S=require_util(),w=require_names(),E=require_util();function D(e,S){let{gen:w,data:E,it:D}=e;w.if(B(w,E,S,D.opts.ownProperties),()=>{e.setParams({missingProperty:(0,t._)`${S}`},!0),e.error()})}e.checkReportMissingProp=D;function O({gen:e,data:S,it:{opts:w}},E,D){return(0,t.or)(...E.map(E=>(0,t.and)(B(e,S,E,w.ownProperties),(0,t._)`${D} = ${E}`)))}e.checkMissingProp=O;function k(e,t){e.setParams({missingProperty:t},!0),e.error()}e.reportMissingProp=k;function j(e){return e.scopeValue(`func`,{ref:Object.prototype.hasOwnProperty,code:(0,t._)`Object.prototype.hasOwnProperty`})}e.hasPropFunc=j;function F(e,S,w){return(0,t._)`${j(e)}.call(${S}, ${w})`}e.isOwnProperty=F;function L(e,S,w,E){let D=(0,t._)`${S}${(0,t.getProperty)(w)} !== undefined`;return E?(0,t._)`${D} && ${F(e,S,w)}`:D}e.propertyInData=L;function B(e,S,w,E){let D=(0,t._)`${S}${(0,t.getProperty)(w)} === undefined`;return E?(0,t.or)(D,(0,t.not)(F(e,S,w))):D}e.noPropertyInData=B;function H(e){return e?Object.keys(e).filter(e=>e!==`__proto__`):[]}e.allSchemaProperties=H;function q(e,t){return H(t).filter(w=>!(0,S.alwaysValidSchema)(e,t[w]))}e.schemaProperties=q;function J({schemaCode:e,data:S,it:{gen:E,topSchemaRef:D,schemaPath:O,errorPath:k},it:j},F,L,B){let H=B?(0,t._)`${e}, ${S}, ${D}${O}`:S,q=[[w.default.instancePath,(0,t.strConcat)(w.default.instancePath,k)],[w.default.parentData,j.parentData],[w.default.parentDataProperty,j.parentDataProperty],[w.default.rootData,w.default.rootData]];j.opts.dynamicRef&&q.push([w.default.dynamicAnchors,w.default.dynamicAnchors]);let J=(0,t._)`${H}, ${E.object(...q)}`;return L===t.nil?(0,t._)`${F}(${J})`:(0,t._)`${F}.call(${L}, ${J})`}e.callValidateCode=J;let Y=(0,t._)`new RegExp`;function ee({gen:e,it:{opts:S}},w){let D=S.unicodeRegExp?`u`:``,{regExp:O}=S.code,k=O(w,D);return e.scopeValue(`pattern`,{key:k.toString(),ref:k,code:(0,t._)`${O.code===`new RegExp`?Y:(0,E.useFunc)(e,O)}(${w}, ${D})`})}e.usePattern=ee;function te(e){let{gen:w,data:E,keyword:D,it:O}=e,k=w.name(`valid`);if(O.allErrors){let e=w.let(`valid`,!0);return j(()=>w.assign(e,!1)),e}return w.var(k,!0),j(()=>w.break()),k;function j(O){let j=w.const(`len`,(0,t._)`${E}.length`);w.forRange(`i`,0,j,E=>{e.subschema({keyword:D,dataProp:E,dataPropType:S.Type.Num},k),w.if((0,t.not)(k),O)})}}e.validateArray=te;function ne(e){let{gen:w,schema:E,keyword:D,it:O}=e;if(!Array.isArray(E))throw Error(`ajv implementation error`);if(E.some(e=>(0,S.alwaysValidSchema)(O,e))&&!O.opts.unevaluated)return;let k=w.let(`valid`,!1),j=w.name(`_valid`);w.block(()=>E.forEach((S,E)=>{let O=e.subschema({keyword:D,schemaProp:E,compositeRule:!0},j);w.assign(k,(0,t._)`${k} || ${j}`),e.mergeValidEvaluated(O,j)||w.if((0,t.not)(k))})),e.result(k,()=>e.reset(),()=>e.error(!0))}e.validateUnion=ne})),require_keyword=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateKeywordUsage=e.validSchemaType=e.funcKeywordCode=e.macroKeywordCode=void 0;let t=require_codegen(),S=require_names(),w=require_code(),E=require_errors();function D(e,S){let{gen:w,keyword:E,schema:D,parentSchema:O,it:k}=e,j=S.macro.call(k.self,D,O,k),F=L(w,E,j);k.opts.validateSchema!==!1&&k.self.validateSchema(j,!0);let B=w.name(`valid`);e.subschema({schema:j,schemaPath:t.nil,errSchemaPath:`${k.errSchemaPath}/${E}`,topSchemaRef:F,compositeRule:!0},B),e.pass(B,()=>e.error(!0))}e.macroKeywordCode=D;function O(e,E){var D;let{gen:O,keyword:B,schema:H,parentSchema:q,$data:J,it:Y}=e;F(Y,E);let ee=L(O,B,!J&&E.compile?E.compile.call(Y.self,H,q,Y):E.validate),te=O.let(`valid`);e.block$data(te,ne),e.ok(E.valid??te);function ne(){if(E.errors===!1)se(),E.modifying&&k(e),ce(()=>e.error());else{let t=E.async?ae():oe();E.modifying&&k(e),ce(()=>j(e,t))}}function ae(){let e=O.let(`ruleErrs`,null);return O.try(()=>se((0,t._)`await `),S=>O.assign(te,!1).if((0,t._)`${S} instanceof ${Y.ValidationError}`,()=>O.assign(e,(0,t._)`${S}.errors`),()=>O.throw(S))),e}function oe(){let e=(0,t._)`${ee}.errors`;return O.assign(e,null),se(t.nil),e}function se(D=E.async?(0,t._)`await `:t.nil){let k=Y.opts.passContext?S.default.this:S.default.self,j=!(`compile`in E&&!J||E.schema===!1);O.assign(te,(0,t._)`${D}${(0,w.callValidateCode)(e,ee,k,j)}`,E.modifying)}function ce(e){var S;O.if((0,t.not)(E.valid??te),e)}}e.funcKeywordCode=O;function k(e){let{gen:S,data:w,it:E}=e;S.if(E.parentData,()=>S.assign(w,(0,t._)`${E.parentData}[${E.parentDataProperty}]`))}function j(e,w){let{gen:D}=e;D.if((0,t._)`Array.isArray(${w})`,()=>{D.assign(S.default.vErrors,(0,t._)`${S.default.vErrors} === null ? ${w} : ${S.default.vErrors}.concat(${w})`).assign(S.default.errors,(0,t._)`${S.default.vErrors}.length`),(0,E.extendErrors)(e)},()=>e.error())}function F({schemaEnv:e},t){if(t.async&&!e.$async)throw Error(`async keyword in sync schema`)}function L(e,S,w){if(w===void 0)throw Error(`keyword "${S}" failed to compile`);return e.scopeValue(`keyword`,typeof w==`function`?{ref:w}:{ref:w,code:(0,t.stringify)(w)})}function B(e,t,S=!1){return!t.length||t.some(t=>t===`array`?Array.isArray(e):t===`object`?e&&typeof e==`object`&&!Array.isArray(e):typeof e==t||S&&e===void 0)}e.validSchemaType=B;function H({schema:e,opts:t,self:S,errSchemaPath:w},E,D){if(Array.isArray(E.keyword)?!E.keyword.includes(D):E.keyword!==D)throw Error(`ajv implementation error`);let O=E.dependencies;if(O?.some(t=>!Object.prototype.hasOwnProperty.call(e,t)))throw Error(`parent schema must have dependencies of ${D}: ${O.join(`,`)}`);if(E.validateSchema&&!E.validateSchema(e[D])){let e=`keyword "${D}" value is invalid at path "${w}": `+S.errorsText(E.validateSchema.errors);if(t.validateSchema===`log`)S.logger.error(e);else throw Error(e)}}e.validateKeywordUsage=H})),require_subschema=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.extendSubschemaMode=e.extendSubschemaData=e.getSubschema=void 0;let t=require_codegen(),S=require_util();function w(e,{keyword:w,schemaProp:E,schema:D,schemaPath:O,errSchemaPath:k,topSchemaRef:j}){if(w!==void 0&&D!==void 0)throw Error(`both "keyword" and "schema" passed, only one allowed`);if(w!==void 0){let D=e.schema[w];return E===void 0?{schema:D,schemaPath:(0,t._)`${e.schemaPath}${(0,t.getProperty)(w)}`,errSchemaPath:`${e.errSchemaPath}/${w}`}:{schema:D[E],schemaPath:(0,t._)`${e.schemaPath}${(0,t.getProperty)(w)}${(0,t.getProperty)(E)}`,errSchemaPath:`${e.errSchemaPath}/${w}/${(0,S.escapeFragment)(E)}`}}if(D!==void 0){if(O===void 0||k===void 0||j===void 0)throw Error(`"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"`);return{schema:D,schemaPath:O,topSchemaRef:j,errSchemaPath:k}}throw Error(`either "keyword" or "schema" must be passed`)}e.getSubschema=w;function E(e,w,{dataProp:E,dataPropType:D,data:O,dataTypes:k,propertyName:j}){if(O!==void 0&&E!==void 0)throw Error(`both "data" and "dataProp" passed, only one allowed`);let{gen:F}=w;if(E!==void 0){let{errorPath:O,dataPathArr:k,opts:j}=w;L(F.let(`data`,(0,t._)`${w.data}${(0,t.getProperty)(E)}`,!0)),e.errorPath=(0,t.str)`${O}${(0,S.getErrorPath)(E,D,j.jsPropertySyntax)}`,e.parentDataProperty=(0,t._)`${E}`,e.dataPathArr=[...k,e.parentDataProperty]}O!==void 0&&(L(O instanceof t.Name?O:F.let(`data`,O,!0)),j!==void 0&&(e.propertyName=j)),k&&(e.dataTypes=k);function L(t){e.data=t,e.dataLevel=w.dataLevel+1,e.dataTypes=[],w.definedProperties=new Set,e.parentData=w.data,e.dataNames=[...w.dataNames,t]}}e.extendSubschemaData=E;function D(e,{jtdDiscriminator:t,jtdMetadata:S,compositeRule:w,createErrors:E,allErrors:D}){w!==void 0&&(e.compositeRule=w),E!==void 0&&(e.createErrors=E),D!==void 0&&(e.allErrors=D),e.jtdDiscriminator=t,e.jtdMetadata=S}e.extendSubschemaMode=D})),require_fast_deep_equal=__commonJSMin$2(((e,t)=>{t.exports=function e(t,S){if(t===S)return!0;if(t&&S&&typeof t==`object`&&typeof S==`object`){if(t.constructor!==S.constructor)return!1;var w,E,D;if(Array.isArray(t)){if(w=t.length,w!=S.length)return!1;for(E=w;E--!==0;)if(!e(t[E],S[E]))return!1;return!0}if(t.constructor===RegExp)return t.source===S.source&&t.flags===S.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===S.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===S.toString();if(D=Object.keys(t),w=D.length,w!==Object.keys(S).length)return!1;for(E=w;E--!==0;)if(!Object.prototype.hasOwnProperty.call(S,D[E]))return!1;for(E=w;E--!==0;){var O=D[E];if(!e(t[O],S[O]))return!1}return!0}return t!==t&&S!==S}})),require_json_schema_traverse=__commonJSMin$2(((e,t)=>{var S=t.exports=function(e,t,S){typeof t==`function`&&(S=t,t={}),S=t.cb||S;var E=typeof S==`function`?S:S.pre||function(){},D=S.post||function(){};w(t,E,D,e,``,e)};S.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},S.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},S.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},S.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function w(e,t,D,O,k,j,F,L,B,H){if(O&&typeof O==`object`&&!Array.isArray(O)){for(var q in t(O,k,j,F,L,B,H),O){var J=O[q];if(Array.isArray(J)){if(q in S.arrayKeywords)for(var Y=0;Y<J.length;Y++)w(e,t,D,J[Y],k+`/`+q+`/`+Y,j,k,q,O,Y)}else if(q in S.propsKeywords){if(J&&typeof J==`object`)for(var ee in J)w(e,t,D,J[ee],k+`/`+q+`/`+E(ee),j,k,q,O,ee)}else (q in S.keywords||e.allKeys&&!(q in S.skipKeywords))&&w(e,t,D,J,k+`/`+q,j,k,q,O)}D(O,k,j,F,L,B,H)}}function E(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}})),require_resolve=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.getSchemaRefs=e.resolveUrl=e.normalizeId=e._getFullPath=e.getFullPath=e.inlineRef=void 0;let t=require_util(),S=require_fast_deep_equal(),w=require_json_schema_traverse(),E=new Set([`type`,`format`,`pattern`,`maxLength`,`minLength`,`maxProperties`,`minProperties`,`maxItems`,`minItems`,`maximum`,`minimum`,`uniqueItems`,`multipleOf`,`required`,`enum`,`const`]);function D(e,t=!0){return typeof e==`boolean`?!0:t===!0?!k(e):t?j(e)<=t:!1}e.inlineRef=D;let O=new Set([`$ref`,`$recursiveRef`,`$recursiveAnchor`,`$dynamicRef`,`$dynamicAnchor`]);function k(e){for(let t in e){if(O.has(t))return!0;let S=e[t];if(Array.isArray(S)&&S.some(k)||typeof S==`object`&&k(S))return!0}return!1}function j(e){let S=0;for(let w in e)if(w===`$ref`||(S++,!E.has(w)&&(typeof e[w]==`object`&&(0,t.eachItem)(e[w],e=>S+=j(e)),S===1/0)))return 1/0;return S}function F(e,t=``,S){return S!==!1&&(t=H(t)),L(e,e.parse(t))}e.getFullPath=F;function L(e,t){return e.serialize(t).split(`#`)[0]+`#`}e._getFullPath=L;let B=/#\/?$/;function H(e){return e?e.replace(B,``):``}e.normalizeId=H;function q(e,t,S){return S=H(S),e.resolve(t,S)}e.resolveUrl=q;let J=/^[a-z_][-a-z0-9._]*$/i;function Y(e,t){if(typeof e==`boolean`)return{};let{schemaId:E,uriResolver:D}=this.opts,O=H(e[E]||t),k={"":O},j=F(D,O,!1),L={},B=new Set;return w(e,{allKeys:!0},(e,t,S,w)=>{if(w===void 0)return;let D=j+t,O=k[w];typeof e[E]==`string`&&(O=F.call(this,e[E])),ee.call(this,e.$anchor),ee.call(this,e.$dynamicAnchor),k[t]=O;function F(t){let S=this.opts.uriResolver.resolve;if(t=H(O?S(O,t):t),B.has(t))throw Y(t);B.add(t);let w=this.refs[t];return typeof w==`string`&&(w=this.refs[w]),typeof w==`object`?q(e,w.schema,t):t!==H(D)&&(t[0]===`#`?(q(e,L[t],t),L[t]=e):this.refs[t]=D),t}function ee(e){if(typeof e==`string`){if(!J.test(e))throw Error(`invalid anchor "${e}"`);F.call(this,`#${e}`)}}}),L;function q(e,t,w){if(t!==void 0&&!S(e,t))throw Y(w)}function Y(e){return Error(`reference "${e}" resolves to more than one schema`)}}e.getSchemaRefs=Y})),require_validate=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.getData=e.KeywordCxt=e.validateFunctionCode=void 0;let t=require_boolSchema(),S=require_dataType(),w=require_applicability(),E=require_dataType(),D=require_defaults(),O=require_keyword(),k=require_subschema(),j=require_codegen(),F=require_names(),L=require_resolve(),B=require_util(),H=require_errors();function q(e){if(ce(e)&&(de(e),se(e))){te(e);return}J(e,()=>(0,t.topBoolOrEmptySchema)(e))}e.validateFunctionCode=q;function J({gen:e,validateName:t,schema:S,schemaEnv:w,opts:E},D){E.code.es5?e.func(t,(0,j._)`${F.default.data}, ${F.default.valCxt}`,w.$async,()=>{e.code((0,j._)`"use strict"; ${ae(S,E)}`),ee(e,E),e.code(D)}):e.func(t,(0,j._)`${F.default.data}, ${Y(E)}`,w.$async,()=>e.code(ae(S,E)).code(D))}function Y(e){return(0,j._)`{${F.default.instancePath}="", ${F.default.parentData}, ${F.default.parentDataProperty}, ${F.default.rootData}=${F.default.data}${e.dynamicRef?(0,j._)`, ${F.default.dynamicAnchors}={}`:j.nil}}={}`}function ee(e,t){e.if(F.default.valCxt,()=>{e.var(F.default.instancePath,(0,j._)`${F.default.valCxt}.${F.default.instancePath}`),e.var(F.default.parentData,(0,j._)`${F.default.valCxt}.${F.default.parentData}`),e.var(F.default.parentDataProperty,(0,j._)`${F.default.valCxt}.${F.default.parentDataProperty}`),e.var(F.default.rootData,(0,j._)`${F.default.valCxt}.${F.default.rootData}`),t.dynamicRef&&e.var(F.default.dynamicAnchors,(0,j._)`${F.default.valCxt}.${F.default.dynamicAnchors}`)},()=>{e.var(F.default.instancePath,(0,j._)`""`),e.var(F.default.parentData,(0,j._)`undefined`),e.var(F.default.parentDataProperty,(0,j._)`undefined`),e.var(F.default.rootData,F.default.data),t.dynamicRef&&e.var(F.default.dynamicAnchors,(0,j._)`{}`)})}function te(e){let{schema:t,opts:S,gen:w}=e;J(e,()=>{S.$comment&&t.$comment&&ye(e),ge(e),w.let(F.default.vErrors,null),w.let(F.default.errors,0),S.unevaluated&&ne(e),fe(e),Ce(e)})}function ne(e){let{gen:t,validateName:S}=e;e.evaluated=t.const(`evaluated`,(0,j._)`${S}.evaluated`),t.if((0,j._)`${e.evaluated}.dynamicProps`,()=>t.assign((0,j._)`${e.evaluated}.props`,(0,j._)`undefined`)),t.if((0,j._)`${e.evaluated}.dynamicItems`,()=>t.assign((0,j._)`${e.evaluated}.items`,(0,j._)`undefined`))}function ae(e,t){let S=typeof e==`object`&&e[t.schemaId];return S&&(t.code.source||t.code.process)?(0,j._)`/*# sourceURL=${S} */`:j.nil}function oe(e,S){if(ce(e)&&(de(e),se(e))){ue(e,S);return}(0,t.boolOrEmptySchema)(e,S)}function se({schema:e,self:t}){if(typeof e==`boolean`)return!e;for(let S in e)if(t.RULES.all[S])return!0;return!1}function ce(e){return typeof e.schema!=`boolean`}function ue(e,t){let{schema:S,gen:w,opts:E}=e;E.$comment&&S.$comment&&ye(e),_e(e),ve(e);let D=w.const(`_errs`,F.default.errors);fe(e,D),w.var(t,(0,j._)`${D} === ${F.default.errors}`)}function de(e){(0,B.checkUnknownRules)(e),me(e)}function fe(e,t){if(e.opts.jtd)return Te(e,[],!1,t);let w=(0,S.getSchemaTypes)(e.schema);Te(e,w,!(0,S.coerceAndCheckDataType)(e,w),t)}function me(e){let{schema:t,errSchemaPath:S,opts:w,self:E}=e;t.$ref&&w.ignoreKeywordsWithRef&&(0,B.schemaHasRulesButRef)(t,E.RULES)&&E.logger.warn(`$ref: keywords ignored in schema at path "${S}"`)}function ge(e){let{schema:t,opts:S}=e;t.default!==void 0&&S.useDefaults&&S.strictSchema&&(0,B.checkStrictMode)(e,`default is ignored in the schema root`)}function _e(e){let t=e.schema[e.opts.schemaId];t&&(e.baseId=(0,L.resolveUrl)(e.opts.uriResolver,e.baseId,t))}function ve(e){if(e.schema.$async&&!e.schemaEnv.$async)throw Error(`async schema in sync schema`)}function ye({gen:e,schemaEnv:t,schema:S,errSchemaPath:w,opts:E}){let D=S.$comment;if(E.$comment===!0)e.code((0,j._)`${F.default.self}.logger.log(${D})`);else if(typeof E.$comment==`function`){let S=(0,j.str)`${w}/$comment`,E=e.scopeValue(`root`,{ref:t.root});e.code((0,j._)`${F.default.self}.opts.$comment(${D}, ${S}, ${E}.schema)`)}}function Ce(e){let{gen:t,schemaEnv:S,validateName:w,ValidationError:E,opts:D}=e;S.$async?t.if((0,j._)`${F.default.errors} === 0`,()=>t.return(F.default.data),()=>t.throw((0,j._)`new ${E}(${F.default.vErrors})`)):(t.assign((0,j._)`${w}.errors`,F.default.vErrors),D.unevaluated&&we(e),t.return((0,j._)`${F.default.errors} === 0`))}function we({gen:e,evaluated:t,props:S,items:w}){S instanceof j.Name&&e.assign((0,j._)`${t}.props`,S),w instanceof j.Name&&e.assign((0,j._)`${t}.items`,w)}function Te(e,t,S,D){let{gen:O,schema:k,data:L,allErrors:H,opts:q,self:J}=e,{RULES:Y}=J;if(k.$ref&&(q.ignoreKeywordsWithRef||!(0,B.schemaHasRulesButRef)(k,Y))){O.block(()=>We(e,`$ref`,Y.all.$ref.definition));return}q.jtd||je(e,t),O.block(()=>{for(let e of Y.rules)ee(e);ee(Y.post)});function ee(B){(0,w.shouldUseGroup)(k,B)&&(B.type?(O.if((0,E.checkDataType)(B.type,L,q.strictNumbers)),De(e,B),t.length===1&&t[0]===B.type&&S&&(O.else(),(0,E.reportTypeError)(e)),O.endIf()):De(e,B),H||O.if((0,j._)`${F.default.errors} === ${D||0}`))}}function De(e,t){let{gen:S,schema:E,opts:{useDefaults:O}}=e;O&&(0,D.assignDefaults)(e,t.type),S.block(()=>{for(let S of t.rules)(0,w.shouldUseRule)(E,S)&&We(e,S.keyword,S.definition,t.type)})}function je(e,t){e.schemaEnv.meta||!e.opts.strictTypes||(Me(e,t),e.opts.allowUnionTypes||Pe(e,t),Ie(e,e.dataTypes))}function Me(e,t){if(t.length){if(!e.dataTypes.length){e.dataTypes=t;return}t.forEach(t=>{ze(e.dataTypes,t)||Ve(e,`type "${t}" not allowed by context "${e.dataTypes.join(`,`)}"`)}),Be(e,t)}}function Pe(e,t){t.length>1&&!(t.length===2&&t.includes(`null`))&&Ve(e,`use allowUnionTypes to allow union type keyword`)}function Ie(e,t){let S=e.self.RULES.all;for(let E in S){let D=S[E];if(typeof D==`object`&&(0,w.shouldUseRule)(e.schema,D)){let{type:S}=D.definition;S.length&&!S.some(e=>Re(t,e))&&Ve(e,`missing type "${S.join(`,`)}" for keyword "${E}"`)}}}function Re(e,t){return e.includes(t)||t===`number`&&e.includes(`integer`)}function ze(e,t){return e.includes(t)||t===`integer`&&e.includes(`number`)}function Be(e,t){let S=[];for(let w of e.dataTypes)ze(t,w)?S.push(w):t.includes(`integer`)&&w===`number`&&S.push(`integer`);e.dataTypes=S}function Ve(e,t){let S=e.schemaEnv.baseId+e.errSchemaPath;t+=` at "${S}" (strictTypes)`,(0,B.checkStrictMode)(e,t,e.opts.strictTypes)}var Ue=class{constructor(e,t,S){if((0,O.validateKeywordUsage)(e,t,S),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=S,this.data=e.data,this.schema=e.schema[S],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,B.schemaRefOrVal)(e,this.schema,S,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const(`vSchema`,Xe(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,O.validSchemaType)(this.schema,t.schemaType,t.allowUndefined))throw Error(`${S} value must be ${JSON.stringify(t.schemaType)}`);(`code`in t?t.trackErrors:t.errors!==!1)&&(this.errsCount=e.gen.const(`_errs`,F.default.errors))}result(e,t,S){this.failResult((0,j.not)(e),t,S)}failResult(e,t,S){this.gen.if(e),S?S():this.error(),t?(this.gen.else(),t(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,t){this.failResult((0,j.not)(e),void 0,t)}fail(e){if(e===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:t}=this;this.fail((0,j._)`${t} !== undefined && (${(0,j.or)(this.invalid$data(),e)})`)}error(e,t,S){if(t){this.setParams(t),this._error(e,S),this.setParams({});return}this._error(e,S)}_error(e,t){(e?H.reportExtraError:H.reportError)(this,this.def.error,t)}$dataError(){(0,H.reportError)(this,this.def.$dataError||H.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error(`add "trackErrors" to keyword definition`);(0,H.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,t){t?Object.assign(this.params,e):this.params=e}block$data(e,t,S=j.nil){this.gen.block(()=>{this.check$data(e,S),t()})}check$data(e=j.nil,t=j.nil){if(!this.$data)return;let{gen:S,schemaCode:w,schemaType:E,def:D}=this;S.if((0,j.or)((0,j._)`${w} === undefined`,t)),e!==j.nil&&S.assign(e,!0),(E.length||D.validateSchema)&&(S.elseIf(this.invalid$data()),this.$dataError(),e!==j.nil&&S.assign(e,!1)),S.else()}invalid$data(){let{gen:e,schemaCode:t,schemaType:S,def:w,it:D}=this;return(0,j.or)(O(),k());function O(){if(S.length){if(!(t instanceof j.Name))throw Error(`ajv implementation error`);let e=Array.isArray(S)?S:[S];return(0,j._)`${(0,E.checkDataTypes)(e,t,D.opts.strictNumbers,E.DataType.Wrong)}`}return j.nil}function k(){if(w.validateSchema){let S=e.scopeValue(`validate$data`,{ref:w.validateSchema});return(0,j._)`!${S}(${t})`}return j.nil}}subschema(e,t){let S=(0,k.getSubschema)(this.it,e);(0,k.extendSubschemaData)(S,this.it,e),(0,k.extendSubschemaMode)(S,e);let w={...this.it,...S,items:void 0,props:void 0};return oe(w,t),w}mergeEvaluated(e,t){let{it:S,gen:w}=this;S.opts.unevaluated&&(S.props!==!0&&e.props!==void 0&&(S.props=B.mergeEvaluated.props(w,e.props,S.props,t)),S.items!==!0&&e.items!==void 0&&(S.items=B.mergeEvaluated.items(w,e.items,S.items,t)))}mergeValidEvaluated(e,t){let{it:S,gen:w}=this;if(S.opts.unevaluated&&(S.props!==!0||S.items!==!0))return w.if(t,()=>this.mergeEvaluated(e,j.Name)),!0}};e.KeywordCxt=Ue;function We(e,t,S,w){let E=new Ue(e,S,t);`code`in S?S.code(E,w):E.$data&&S.validate?(0,O.funcKeywordCode)(E,S):`macro`in S?(0,O.macroKeywordCode)(E,S):(S.compile||S.validate)&&(0,O.funcKeywordCode)(E,S)}let Ge=/^\/(?:[^~]|~0|~1)*$/,Ke=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Xe(e,{dataLevel:t,dataNames:S,dataPathArr:w}){let E,D;if(e===``)return F.default.rootData;if(e[0]===`/`){if(!Ge.test(e))throw Error(`Invalid JSON-pointer: ${e}`);E=e,D=F.default.rootData}else{let O=Ke.exec(e);if(!O)throw Error(`Invalid JSON-pointer: ${e}`);let k=+O[1];if(E=O[2],E===`#`){if(k>=t)throw Error(L(`property/index`,k));return w[t-k]}if(k>t)throw Error(L(`data`,k));if(D=S[t-k],!E)return D}let O=D,k=E.split(`/`);for(let e of k)e&&(D=(0,j._)`${D}${(0,j.getProperty)((0,B.unescapeJsonPointer)(e))}`,O=(0,j._)`${O} && ${D}`);return O;function L(e,S){return`Cannot access ${e} ${S} levels up, current level is ${t}`}}e.getData=Xe})),require_validation_error=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=class extends Error{constructor(e){super(`validation failed`),this.errors=e,this.ajv=this.validation=!0}}})),require_ref_error=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_resolve();e.default=class extends Error{constructor(e,S,w,E){super(E||`can't resolve reference ${w} from id ${S}`),this.missingRef=(0,t.resolveUrl)(e,S,w),this.missingSchema=(0,t.normalizeId)((0,t.getFullPath)(e,this.missingRef))}}})),require_compile=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.resolveSchema=e.getCompilingSchema=e.resolveRef=e.compileSchema=e.SchemaEnv=void 0;let t=require_codegen(),S=require_validation_error(),w=require_names(),E=require_resolve(),D=require_util(),O=require_validate();var k=class{constructor(e){var t;this.refs={},this.dynamicAnchors={};let S;typeof e.schema==`object`&&(S=e.schema),this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=e.baseId??(0,E.normalizeId)(S?.[e.schemaId||`$id`]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=S?.$async,this.refs={}}};e.SchemaEnv=k;function j(e){let D=B.call(this,e);if(D)return D;let k=(0,E.getFullPath)(this.opts.uriResolver,e.root.baseId),{es5:j,lines:F}=this.opts.code,{ownProperties:L}=this.opts,H=new t.CodeGen(this.scope,{es5:j,lines:F,ownProperties:L}),q;e.$async&&(q=H.scopeValue(`Error`,{ref:S.default,code:(0,t._)`require("ajv/dist/runtime/validation_error").default`}));let J=H.scopeName(`validate`);e.validateName=J;let Y={gen:H,allErrors:this.opts.allErrors,data:w.default.data,parentData:w.default.parentData,parentDataProperty:w.default.parentDataProperty,dataNames:[w.default.data],dataPathArr:[t.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:H.scopeValue(`schema`,this.opts.code.source===!0?{ref:e.schema,code:(0,t.stringify)(e.schema)}:{ref:e.schema}),validateName:J,ValidationError:q,schema:e.schema,schemaEnv:e,rootId:k,baseId:e.baseId||k,schemaPath:t.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?``:`#`),errorPath:(0,t._)`""`,opts:this.opts,self:this},ee;try{this._compilations.add(e),(0,O.validateFunctionCode)(Y),H.optimize(this.opts.code.optimize);let S=H.toString();ee=`${H.scopeRefs(w.default.scope)}return ${S}`,this.opts.code.process&&(ee=this.opts.code.process(ee,e));let E=Function(`${w.default.self}`,`${w.default.scope}`,ee)(this,this.scope.get());if(this.scope.value(J,{ref:E}),E.errors=null,E.schema=e.schema,E.schemaEnv=e,e.$async&&(E.$async=!0),this.opts.code.source===!0&&(E.source={validateName:J,validateCode:S,scopeValues:H._values}),this.opts.unevaluated){let{props:e,items:S}=Y;E.evaluated={props:e instanceof t.Name?void 0:e,items:S instanceof t.Name?void 0:S,dynamicProps:e instanceof t.Name,dynamicItems:S instanceof t.Name},E.source&&(E.source.evaluated=(0,t.stringify)(E.evaluated))}return e.validate=E,e}catch(t){throw delete e.validate,delete e.validateName,ee&&this.logger.error(`Error compiling schema, function code:`,ee),t}finally{this._compilations.delete(e)}}e.compileSchema=j;function F(e,t,S){var w;S=(0,E.resolveUrl)(this.opts.uriResolver,t,S);let D=e.refs[S];if(D)return D;let O=q.call(this,e,S);if(O===void 0){let w=e.localRefs?.[S],{schemaId:E}=this.opts;w&&(O=new k({schema:w,schemaId:E,root:e,baseId:t}))}if(O!==void 0)return e.refs[S]=L.call(this,O)}e.resolveRef=F;function L(e){return(0,E.inlineRef)(e.schema,this.opts.inlineRefs)?e.schema:e.validate?e:j.call(this,e)}function B(e){for(let t of this._compilations)if(H(t,e))return t}e.getCompilingSchema=B;function H(e,t){return e.schema===t.schema&&e.root===t.root&&e.baseId===t.baseId}function q(e,t){let S;for(;typeof(S=this.refs[t])==`string`;)t=S;return S||this.schemas[t]||J.call(this,e,t)}function J(e,t){let S=this.opts.uriResolver.parse(t),w=(0,E._getFullPath)(this.opts.uriResolver,S),D=(0,E.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&w===D)return ee.call(this,S,e);let O=(0,E.normalizeId)(w),F=this.refs[O]||this.schemas[O];if(typeof F==`string`){let t=J.call(this,e,F);return typeof t?.schema==`object`?ee.call(this,S,t):void 0}if(typeof F?.schema==`object`){if(F.validate||j.call(this,F),O===(0,E.normalizeId)(t)){let{schema:t}=F,{schemaId:S}=this.opts,w=t[S];return w&&(D=(0,E.resolveUrl)(this.opts.uriResolver,D,w)),new k({schema:t,schemaId:S,root:e,baseId:D})}return ee.call(this,S,F)}}e.resolveSchema=J;let Y=new Set([`properties`,`patternProperties`,`enum`,`dependencies`,`definitions`]);function ee(e,{baseId:t,schema:S,root:w}){var O;if(e.fragment?.[0]!==`/`)return;for(let w of e.fragment.slice(1).split(`/`)){if(typeof S==`boolean`)return;let e=S[(0,D.unescapeFragment)(w)];if(e===void 0)return;S=e;let O=typeof S==`object`&&S[this.opts.schemaId];!Y.has(w)&&O&&(t=(0,E.resolveUrl)(this.opts.uriResolver,t,O))}let j;if(typeof S!=`boolean`&&S.$ref&&!(0,D.schemaHasRulesButRef)(S,this.RULES)){let e=(0,E.resolveUrl)(this.opts.uriResolver,t,S.$ref);j=J.call(this,w,e)}let{schemaId:F}=this.opts;if(j||=new k({schema:S,schemaId:F,root:w,baseId:t}),j.schema!==j.root.schema)return j}})),require_data=__commonJSMin$2(((e,t)=>{t.exports={$id:`https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#`,description:`Meta-schema for $data reference (JSON AnySchema extension proposal)`,type:`object`,required:[`$data`],properties:{$data:{type:`string`,anyOf:[{format:`relative-json-pointer`},{format:`json-pointer`}]}},additionalProperties:!1}})),require_utils$1=__commonJSMin$2(((e,t)=>{let S=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),w=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function E(e){let t=``,S=0,w=0;for(w=0;w<e.length;w++)if(S=e[w].charCodeAt(0),S!==48){if(!(S>=48&&S<=57||S>=65&&S<=70||S>=97&&S<=102))return``;t+=e[w];break}for(w+=1;w<e.length;w++){if(S=e[w].charCodeAt(0),!(S>=48&&S<=57||S>=65&&S<=70||S>=97&&S<=102))return``;t+=e[w]}return t}let D=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function O(e){return e.length=0,!0}function k(e,t,S){if(e.length){let w=E(e);if(w!==``)t.push(w);else return S.error=!0,!1;e.length=0}return!0}function j(e){let t=0,S={error:!1,address:``,zone:``},w=[],D=[],j=!1,F=!1,L=k;for(let E=0;E<e.length;E++){let k=e[E];if(!(k===`[`||k===`]`))if(k===`:`){if(j===!0&&(F=!0),!L(D,w,S))break;if(++t>7){S.error=!0;break}E>0&&e[E-1]===`:`&&(j=!0),w.push(`:`);continue}else if(k===`%`){if(!L(D,w,S))break;L=O}else{D.push(k);continue}}return D.length&&(L===O?S.zone=D.join(``):F?w.push(D.join(``)):w.push(E(D))),S.address=w.join(``),S}function F(e){if(L(e,`:`)<2)return{host:e,isIPV6:!1};let t=j(e);if(t.error)return{host:e,isIPV6:!1};{let e=t.address,S=t.address;return t.zone&&(e+=`%`+t.zone,S+=`%25`+t.zone),{host:e,isIPV6:!0,escapedHost:S}}}function L(e,t){let S=0;for(let w=0;w<e.length;w++)e[w]===t&&S++;return S}function B(e){let t=e,S=[],w=-1,E=0;for(;E=t.length;){if(E===1){if(t===`.`)break;if(t===`/`){S.push(`/`);break}else{S.push(t);break}}else if(E===2){if(t[0]===`.`){if(t[1]===`.`)break;if(t[1]===`/`){t=t.slice(2);continue}}else if(t[0]===`/`&&(t[1]===`.`||t[1]===`/`)){S.push(`/`);break}}else if(E===3&&t===`/..`){S.length!==0&&S.pop(),S.push(`/`);break}if(t[0]===`.`){if(t[1]===`.`){if(t[2]===`/`){t=t.slice(3);continue}}else if(t[1]===`/`){t=t.slice(2);continue}}else if(t[0]===`/`&&t[1]===`.`){if(t[2]===`/`){t=t.slice(2);continue}else if(t[2]===`.`&&t[3]===`/`){t=t.slice(3),S.length!==0&&S.pop();continue}}if((w=t.indexOf(`/`,1))===-1){S.push(t);break}else S.push(t.slice(0,w)),t=t.slice(w)}return S.join(``)}function H(e,t){let S=t===!0?unescape:escape;return e.scheme!==void 0&&(e.scheme=S(e.scheme)),e.userinfo!==void 0&&(e.userinfo=S(e.userinfo)),e.host!==void 0&&(e.host=S(e.host)),e.path!==void 0&&(e.path=S(e.path)),e.query!==void 0&&(e.query=S(e.query)),e.fragment!==void 0&&(e.fragment=S(e.fragment)),e}function q(e){let t=[];if(e.userinfo!==void 0&&(t.push(e.userinfo),t.push(`@`)),e.host!==void 0){let S=unescape(e.host);if(!w(S)){let t=F(S);S=t.isIPV6===!0?`[${t.escapedHost}]`:e.host}t.push(S)}return(typeof e.port==`number`||typeof e.port==`string`)&&(t.push(`:`),t.push(String(e.port))),t.length?t.join(``):void 0}t.exports={nonSimpleDomain:D,recomposeAuthority:q,normalizeComponentEncoding:H,removeDotSegments:B,isIPv4:w,isUUID:S,normalizeIPv6:F,stringArrayToHexStripped:E}})),require_schemes=__commonJSMin$2(((e,t)=>{let{isUUID:S}=require_utils$1(),w=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,E=[`http`,`https`,`ws`,`wss`,`urn`,`urn:uuid`];function D(e){return E.indexOf(e)!==-1}function O(e){return e.secure===!0?!0:e.secure===!1?!1:e.scheme?e.scheme.length===3&&(e.scheme[0]===`w`||e.scheme[0]===`W`)&&(e.scheme[1]===`s`||e.scheme[1]===`S`)&&(e.scheme[2]===`s`||e.scheme[2]===`S`):!1}function k(e){return e.host||(e.error=e.error||`HTTP URIs must have a host.`),e}function j(e){let t=String(e.scheme).toLowerCase()===`https`;return(e.port===(t?443:80)||e.port===``)&&(e.port=void 0),e.path||=`/`,e}function F(e){return e.secure=O(e),e.resourceName=(e.path||`/`)+(e.query?`?`+e.query:``),e.path=void 0,e.query=void 0,e}function L(e){if((e.port===(O(e)?443:80)||e.port===``)&&(e.port=void 0),typeof e.secure==`boolean`&&(e.scheme=e.secure?`wss`:`ws`,e.secure=void 0),e.resourceName){let[t,S]=e.resourceName.split(`?`);e.path=t&&t!==`/`?t:void 0,e.query=S,e.resourceName=void 0}return e.fragment=void 0,e}function B(e,t){if(!e.path)return e.error=`URN can not be parsed`,e;let S=e.path.match(w);if(S){let w=t.scheme||e.scheme||`urn`;e.nid=S[1].toLowerCase(),e.nss=S[2];let E=ce(`${w}:${t.nid||e.nid}`);e.path=void 0,E&&(e=E.parse(e,t))}else e.error=e.error||`URN can not be parsed.`;return e}function H(e,t){if(e.nid===void 0)throw Error(`URN without nid cannot be serialized`);let S=t.scheme||e.scheme||`urn`,w=e.nid.toLowerCase(),E=ce(`${S}:${t.nid||w}`);E&&(e=E.serialize(e,t));let D=e,O=e.nss;return D.path=`${w||t.nid}:${O}`,t.skipEscape=!0,D}function q(e,t){let w=e;return w.uuid=w.nss,w.nss=void 0,!t.tolerant&&(!w.uuid||!S(w.uuid))&&(w.error=w.error||`UUID is not valid.`),w}function J(e){let t=e;return t.nss=(e.uuid||``).toLowerCase(),t}let Y={scheme:`http`,domainHost:!0,parse:k,serialize:j},ee={scheme:`https`,domainHost:Y.domainHost,parse:k,serialize:j},te={scheme:`ws`,domainHost:!0,parse:F,serialize:L},ne={scheme:`wss`,domainHost:te.domainHost,parse:te.parse,serialize:te.serialize},ae={scheme:`urn`,parse:B,serialize:H,skipNormalize:!0},oe={scheme:`urn:uuid`,parse:q,serialize:J,skipNormalize:!0},se={http:Y,https:ee,ws:te,wss:ne,urn:ae,"urn:uuid":oe};Object.setPrototypeOf(se,null);function ce(e){return e&&(se[e]||se[e.toLowerCase()])||void 0}t.exports={wsIsSecure:O,SCHEMES:se,isValidSchemeName:D,getSchemeHandler:ce}})),require_fast_uri=__commonJSMin$2(((e,t)=>{let{normalizeIPv6:S,removeDotSegments:w,recomposeAuthority:E,normalizeComponentEncoding:D,isIPv4:O,nonSimpleDomain:k}=require_utils$1(),{SCHEMES:j,getSchemeHandler:F}=require_schemes();function L(e,t){return typeof e==`string`?e=J(ee(e,t),t):typeof e==`object`&&(e=ee(J(e,t),t)),e}function B(e,t,S){let w=S?Object.assign({scheme:`null`},S):{scheme:`null`},E=H(ee(e,w),ee(t,w),w,!0);return w.skipEscape=!0,J(E,w)}function H(e,t,S,E){let D={};return E||(e=ee(J(e,S),S),t=ee(J(t,S),S)),S||={},!S.tolerant&&t.scheme?(D.scheme=t.scheme,D.userinfo=t.userinfo,D.host=t.host,D.port=t.port,D.path=w(t.path||``),D.query=t.query):(t.userinfo!==void 0||t.host!==void 0||t.port!==void 0?(D.userinfo=t.userinfo,D.host=t.host,D.port=t.port,D.path=w(t.path||``),D.query=t.query):(t.path?(t.path[0]===`/`?D.path=w(t.path):((e.userinfo!==void 0||e.host!==void 0||e.port!==void 0)&&!e.path?D.path=`/`+t.path:e.path?D.path=e.path.slice(0,e.path.lastIndexOf(`/`)+1)+t.path:D.path=t.path,D.path=w(D.path)),D.query=t.query):(D.path=e.path,t.query===void 0?D.query=e.query:D.query=t.query),D.userinfo=e.userinfo,D.host=e.host,D.port=e.port),D.scheme=e.scheme),D.fragment=t.fragment,D}function q(e,t,S){return typeof e==`string`?(e=unescape(e),e=J(D(ee(e,S),!0),{...S,skipEscape:!0})):typeof e==`object`&&(e=J(D(e,!0),{...S,skipEscape:!0})),typeof t==`string`?(t=unescape(t),t=J(D(ee(t,S),!0),{...S,skipEscape:!0})):typeof t==`object`&&(t=J(D(t,!0),{...S,skipEscape:!0})),e.toLowerCase()===t.toLowerCase()}function J(e,t){let S={host:e.host,scheme:e.scheme,userinfo:e.userinfo,port:e.port,path:e.path,query:e.query,nid:e.nid,nss:e.nss,uuid:e.uuid,fragment:e.fragment,reference:e.reference,resourceName:e.resourceName,secure:e.secure,error:``},D=Object.assign({},t),O=[],k=F(D.scheme||S.scheme);k&&k.serialize&&k.serialize(S,D),S.path!==void 0&&(D.skipEscape?S.path=unescape(S.path):(S.path=escape(S.path),S.scheme!==void 0&&(S.path=S.path.split(`%3A`).join(`:`)))),D.reference!==`suffix`&&S.scheme&&O.push(S.scheme,`:`);let j=E(S);if(j!==void 0&&(D.reference!==`suffix`&&O.push(`//`),O.push(j),S.path&&S.path[0]!==`/`&&O.push(`/`)),S.path!==void 0){let e=S.path;!D.absolutePath&&(!k||!k.absolutePath)&&(e=w(e)),j===void 0&&e[0]===`/`&&e[1]===`/`&&(e=`/%2F`+e.slice(2)),O.push(e)}return S.query!==void 0&&O.push(`?`,S.query),S.fragment!==void 0&&O.push(`#`,S.fragment),O.join(``)}let Y=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function ee(e,t){let w=Object.assign({},t),E={scheme:void 0,userinfo:void 0,host:``,port:void 0,path:``,query:void 0,fragment:void 0},D=!1;w.reference===`suffix`&&(e=w.scheme?w.scheme+`:`+e:`//`+e);let j=e.match(Y);if(j){if(E.scheme=j[1],E.userinfo=j[3],E.host=j[4],E.port=parseInt(j[5],10),E.path=j[6]||``,E.query=j[7],E.fragment=j[8],isNaN(E.port)&&(E.port=j[5]),E.host)if(O(E.host)===!1){let e=S(E.host);E.host=e.host.toLowerCase(),D=e.isIPV6}else D=!0;E.scheme===void 0&&E.userinfo===void 0&&E.host===void 0&&E.port===void 0&&E.query===void 0&&!E.path?E.reference=`same-document`:E.scheme===void 0?E.reference=`relative`:E.fragment===void 0?E.reference=`absolute`:E.reference=`uri`,w.reference&&w.reference!==`suffix`&&w.reference!==E.reference&&(E.error=E.error||`URI is not a `+w.reference+` reference.`);let t=F(w.scheme||E.scheme);if(!w.unicodeSupport&&(!t||!t.unicodeSupport)&&E.host&&(w.domainHost||t&&t.domainHost)&&D===!1&&k(E.host))try{E.host=URL.domainToASCII(E.host.toLowerCase())}catch(e){E.error=E.error||`Host's domain name can not be converted to ASCII: `+e}(!t||t&&!t.skipNormalize)&&(e.indexOf(`%`)!==-1&&(E.scheme!==void 0&&(E.scheme=unescape(E.scheme)),E.host!==void 0&&(E.host=unescape(E.host))),E.path&&=escape(unescape(E.path)),E.fragment&&=encodeURI(decodeURIComponent(E.fragment))),t&&t.parse&&t.parse(E,w)}else E.error=E.error||`URI can not be parsed.`;return E}let te={SCHEMES:j,normalize:L,resolve:B,resolveComponent:H,equal:q,serialize:J,parse:ee};t.exports=te,t.exports.default=te,t.exports.fastUri=te})),require_uri=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_fast_uri();t.code=`require("ajv/dist/runtime/uri").default`,e.default=t})),require_core$1=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=void 0;var t=require_validate();Object.defineProperty(e,`KeywordCxt`,{enumerable:!0,get:function(){return t.KeywordCxt}});var S=require_codegen();Object.defineProperty(e,`_`,{enumerable:!0,get:function(){return S._}}),Object.defineProperty(e,`str`,{enumerable:!0,get:function(){return S.str}}),Object.defineProperty(e,`stringify`,{enumerable:!0,get:function(){return S.stringify}}),Object.defineProperty(e,`nil`,{enumerable:!0,get:function(){return S.nil}}),Object.defineProperty(e,`Name`,{enumerable:!0,get:function(){return S.Name}}),Object.defineProperty(e,`CodeGen`,{enumerable:!0,get:function(){return S.CodeGen}});let w=require_validation_error(),E=require_ref_error(),D=require_rules(),O=require_compile(),k=require_codegen(),j=require_resolve(),F=require_dataType(),L=require_util(),B=require_data(),H=require_uri(),q=(e,t)=>new RegExp(e,t);q.code=`new RegExp`;let J=[`removeAdditional`,`useDefaults`,`coerceTypes`],Y=new Set([`validate`,`serialize`,`parse`,`wrapper`,`root`,`schema`,`keyword`,`pattern`,`formats`,`validate$data`,`func`,`obj`,`Error`]),ee={errorDataPath:``,format:"`validateFormats: false` can be used instead.",nullable:`"nullable" keyword is supported by default.`,jsonPointers:`Deprecated jsPropertySyntax can be used instead.`,extendRefs:`Deprecated ignoreKeywordsWithRef can be used instead.`,missingRefs:`Pass empty schema with $id that should be ignored to ajv.addSchema.`,processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:`"uniqueItems" keyword is always validated.`,unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:`Map is used as cache, schema object as key.`,serialize:`Map is used as cache, schema object as key.`,ajvErrors:`It is default now.`},te={ignoreKeywordsWithRef:``,jsPropertySyntax:``,unicode:`"minLength"/"maxLength" account for unicode characters by default.`},ne=200;function ae(e){var t,S,w,E,D,O,k,j,F,L,B,J,Y,ee,te,ne,ae,oe,se,ce,ue,de,fe,me,ge;let _e=e.strict,ve=e.code?.optimize,ye=ve===!0||ve===void 0?1:ve||0,Ce=e.code?.regExp??q,we=e.uriResolver??H.default;return{strictSchema:e.strictSchema??_e??!0,strictNumbers:e.strictNumbers??_e??!0,strictTypes:e.strictTypes??_e??`log`,strictTuples:e.strictTuples??_e??`log`,strictRequired:e.strictRequired??_e??!1,code:e.code?{...e.code,optimize:ye,regExp:Ce}:{optimize:ye,regExp:Ce},loopRequired:e.loopRequired??200,loopEnum:e.loopEnum??200,meta:e.meta??!0,messages:e.messages??!0,inlineRefs:e.inlineRefs??!0,schemaId:e.schemaId??`$id`,addUsedSchema:e.addUsedSchema??!0,validateSchema:e.validateSchema??!0,validateFormats:e.validateFormats??!0,unicodeRegExp:e.unicodeRegExp??!0,int32range:e.int32range??!0,uriResolver:we}}var oe=class{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...ae(e)};let{es5:t,lines:S}=this.opts.code;this.scope=new k.ValueScope({scope:{},prefixes:Y,es5:t,lines:S}),this.logger=_e(e.logger);let w=e.validateFormats;e.validateFormats=!1,this.RULES=(0,D.getRules)(),se.call(this,ee,e,`NOT SUPPORTED`),se.call(this,te,e,`DEPRECATED`,`warn`),this._metaOpts=me.call(this),e.formats&&de.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords&&fe.call(this,e.keywords),typeof e.meta==`object`&&this.addMetaSchema(e.meta),ue.call(this),e.validateFormats=w}_addVocabularies(){this.addKeyword(`$async`)}_addDefaultMetaSchema(){let{$data:e,meta:t,schemaId:S}=this.opts,w=B;S===`id`&&(w={...B},w.id=w.$id,delete w.$id),t&&e&&this.addMetaSchema(w,w[S],!1)}defaultMeta(){let{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta=typeof e==`object`?e[t]||e:void 0}validate(e,t){let S;if(typeof e==`string`){if(S=this.getSchema(e),!S)throw Error(`no schema with key or ref "${e}"`)}else S=this.compile(e);let w=S(t);return`$async`in S||(this.errors=S.errors),w}compile(e,t){let S=this._addSchema(e,t);return S.validate||this._compileSchemaEnv(S)}compileAsync(e,t){if(typeof this.opts.loadSchema!=`function`)throw Error(`options.loadSchema should be a function`);let{loadSchema:S}=this.opts;return w.call(this,e,t);async function w(e,t){await D.call(this,e.$schema);let S=this._addSchema(e,t);return S.validate||O.call(this,S)}async function D(e){e&&!this.getSchema(e)&&await w.call(this,{$ref:e},!0)}async function O(e){try{return this._compileSchemaEnv(e)}catch(t){if(!(t instanceof E.default))throw t;return k.call(this,t),await j.call(this,t.missingSchema),O.call(this,e)}}function k({missingSchema:e,missingRef:t}){if(this.refs[e])throw Error(`AnySchema ${e} is loaded but ${t} cannot be resolved`)}async function j(e){let S=await F.call(this,e);this.refs[e]||await D.call(this,S.$schema),this.refs[e]||this.addSchema(S,e,t)}async function F(e){let t=this._loading[e];if(t)return t;try{return await(this._loading[e]=S(e))}finally{delete this._loading[e]}}}addSchema(e,t,S,w=this.opts.validateSchema){if(Array.isArray(e)){for(let t of e)this.addSchema(t,void 0,S,w);return this}let E;if(typeof e==`object`){let{schemaId:t}=this.opts;if(E=e[t],E!==void 0&&typeof E!=`string`)throw Error(`schema ${t} must be string`)}return t=(0,j.normalizeId)(t||E),this._checkUnique(t),this.schemas[t]=this._addSchema(e,S,t,w,!0),this}addMetaSchema(e,t,S=this.opts.validateSchema){return this.addSchema(e,t,!0,S),this}validateSchema(e,t){if(typeof e==`boolean`)return!0;let S;if(S=e.$schema,S!==void 0&&typeof S!=`string`)throw Error(`$schema must be a string`);if(S=S||this.opts.defaultMeta||this.defaultMeta(),!S)return this.logger.warn(`meta-schema not available`),this.errors=null,!0;let w=this.validate(S,e);if(!w&&t){let e=`schema is invalid: `+this.errorsText();if(this.opts.validateSchema===`log`)this.logger.error(e);else throw Error(e)}return w}getSchema(e){let t;for(;typeof(t=ce.call(this,e))==`string`;)e=t;if(t===void 0){let{schemaId:S}=this.opts,w=new O.SchemaEnv({schema:{},schemaId:S});if(t=O.resolveSchema.call(this,w,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case`undefined`:return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case`string`:{let t=ce.call(this,e);return typeof t==`object`&&this._cache.delete(t.schema),delete this.schemas[e],delete this.refs[e],this}case`object`:{let t=e;this._cache.delete(t);let S=e[this.opts.schemaId];return S&&(S=(0,j.normalizeId)(S),delete this.schemas[S],delete this.refs[S]),this}default:throw Error(`ajv.removeSchema: invalid parameter`)}}addVocabulary(e){for(let t of e)this.addKeyword(t);return this}addKeyword(e,t){let S;if(typeof e==`string`)S=e,typeof t==`object`&&(this.logger.warn(`these parameters are deprecated, see docs for addKeyword`),t.keyword=S);else if(typeof e==`object`&&t===void 0){if(t=e,S=t.keyword,Array.isArray(S)&&!S.length)throw Error(`addKeywords: keyword must be string or non-empty array`)}else throw Error(`invalid addKeywords parameters`);if(ye.call(this,S,t),!t)return(0,L.eachItem)(S,e=>Ce.call(this,e)),this;Te.call(this,t);let w={...t,type:(0,F.getJSONTypes)(t.type),schemaType:(0,F.getJSONTypes)(t.schemaType)};return(0,L.eachItem)(S,w.type.length===0?e=>Ce.call(this,e,w):e=>w.type.forEach(t=>Ce.call(this,e,w,t))),this}getKeyword(e){let t=this.RULES.all[e];return typeof t==`object`?t.definition:!!t}removeKeyword(e){let{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(let S of t.rules){let t=S.rules.findIndex(t=>t.keyword===e);t>=0&&S.rules.splice(t,1)}return this}addFormat(e,t){return typeof t==`string`&&(t=new RegExp(t)),this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=`, `,dataVar:S=`data`}={}){return!e||e.length===0?`No errors`:e.map(e=>`${S}${e.instancePath} ${e.message}`).reduce((e,S)=>e+t+S)}$dataMetaSchema(e,t){let S=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let w of t){let t=w.split(`/`).slice(1),E=e;for(let e of t)E=E[e];for(let e in S){let t=S[e];if(typeof t!=`object`)continue;let{$data:w}=t.definition,D=E[e];w&&D&&(E[e]=je(D))}}return e}_removeAllSchemas(e,t){for(let S in e){let w=e[S];(!t||t.test(S))&&(typeof w==`string`?delete e[S]:w&&!w.meta&&(this._cache.delete(w.schema),delete e[S]))}}_addSchema(e,t,S,w=this.opts.validateSchema,E=this.opts.addUsedSchema){let D,{schemaId:k}=this.opts;if(typeof e==`object`)D=e[k];else if(this.opts.jtd)throw Error(`schema must be object`);else if(typeof e!=`boolean`)throw Error(`schema must be object or boolean`);let F=this._cache.get(e);if(F!==void 0)return F;S=(0,j.normalizeId)(D||S);let L=j.getSchemaRefs.call(this,e,S);return F=new O.SchemaEnv({schema:e,schemaId:k,meta:t,baseId:S,localRefs:L}),this._cache.set(F.schema,F),E&&!S.startsWith(`#`)&&(S&&this._checkUnique(S),this.refs[S]=F),w&&this.validateSchema(e,!0),F}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta?this._compileMetaSchema(e):O.compileSchema.call(this,e),!e.validate)throw Error(`ajv implementation error`);return e.validate}_compileMetaSchema(e){let t=this.opts;this.opts=this._metaOpts;try{O.compileSchema.call(this,e)}finally{this.opts=t}}};oe.ValidationError=w.default,oe.MissingRefError=E.default,e.default=oe;function se(e,t,S,w=`error`){for(let E in e){let D=E;D in t&&this.logger[w](`${S}: option ${E}. ${e[D]}`)}}function ce(e){return e=(0,j.normalizeId)(e),this.schemas[e]||this.refs[e]}function ue(){let e=this.opts.schemas;if(e)if(Array.isArray(e))this.addSchema(e);else for(let t in e)this.addSchema(e[t],t)}function de(){for(let e in this.opts.formats){let t=this.opts.formats[e];t&&this.addFormat(e,t)}}function fe(e){if(Array.isArray(e)){this.addVocabulary(e);return}this.logger.warn(`keywords option as map is deprecated, pass array`);for(let t in e){let S=e[t];S.keyword||=t,this.addKeyword(S)}}function me(){let e={...this.opts};for(let t of J)delete e[t];return e}let ge={log(){},warn(){},error(){}};function _e(e){if(e===!1)return ge;if(e===void 0)return console;if(e.log&&e.warn&&e.error)return e;throw Error(`logger must implement log, warn and error methods`)}let ve=/^[a-z_$][a-z0-9_$:-]*$/i;function ye(e,t){let{RULES:S}=this;if((0,L.eachItem)(e,e=>{if(S.keywords[e])throw Error(`Keyword ${e} is already defined`);if(!ve.test(e))throw Error(`Keyword ${e} has invalid name`)}),t&&t.$data&&!(`code`in t||`validate`in t))throw Error(`$data keyword must have "code" or "validate" function`)}function Ce(e,t,S){var w;let E=t?.post;if(S&&E)throw Error(`keyword with "post" flag cannot have "type"`);let{RULES:D}=this,O=E?D.post:D.rules.find(({type:e})=>e===S);if(O||(O={type:S,rules:[]},D.rules.push(O)),D.keywords[e]=!0,!t)return;let k={keyword:e,definition:{...t,type:(0,F.getJSONTypes)(t.type),schemaType:(0,F.getJSONTypes)(t.schemaType)}};t.before?we.call(this,O,k,t.before):O.rules.push(k),D.all[e]=k,(w=t.implements)==null||w.forEach(e=>this.addKeyword(e))}function we(e,t,S){let w=e.rules.findIndex(e=>e.keyword===S);w>=0?e.rules.splice(w,0,t):(e.rules.push(t),this.logger.warn(`rule ${S} is not defined`))}function Te(e){let{metaSchema:t}=e;t!==void 0&&(e.$data&&this.opts.$data&&(t=je(t)),e.validateSchema=this.compile(t,!0))}let De={$ref:`https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#`};function je(e){return{anyOf:[e,De]}}})),require_id=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default={keyword:`id`,code(){throw Error(`NOT SUPPORTED: keyword "id", use "$id" for schema ID`)}}})),require_ref=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.callRef=e.getValidate=void 0;let t=require_ref_error(),S=require_code(),w=require_codegen(),E=require_names(),D=require_compile(),O=require_util(),k={keyword:`$ref`,schemaType:`string`,code(e){let{gen:S,schema:E,it:O}=e,{baseId:k,schemaEnv:L,validateName:B,opts:H,self:q}=O,{root:J}=L;if((E===`#`||E===`#/`)&&k===J.baseId)return ee();let Y=D.resolveRef.call(q,J,k,E);if(Y===void 0)throw new t.default(O.opts.uriResolver,k,E);if(Y instanceof D.SchemaEnv)return te(Y);return ne(Y);function ee(){if(L===J)return F(e,B,L,L.$async);let t=S.scopeValue(`root`,{ref:J});return F(e,(0,w._)`${t}.validate`,J,J.$async)}function te(t){F(e,j(e,t),t,t.$async)}function ne(t){let D=S.scopeValue(`schema`,H.code.source===!0?{ref:t,code:(0,w.stringify)(t)}:{ref:t}),O=S.name(`valid`),k=e.subschema({schema:t,dataTypes:[],schemaPath:w.nil,topSchemaRef:D,errSchemaPath:E},O);e.mergeEvaluated(k),e.ok(O)}}};function j(e,t){let{gen:S}=e;return t.validate?S.scopeValue(`validate`,{ref:t.validate}):(0,w._)`${S.scopeValue(`wrapper`,{ref:t})}.validate`}e.getValidate=j;function F(e,t,D,k){let{gen:j,it:F}=e,{allErrors:L,schemaEnv:B,opts:H}=F,q=H.passContext?E.default.this:w.nil;k?J():Y();function J(){if(!B.$async)throw Error(`async schema referenced by sync schema`);let E=j.let(`valid`);j.try(()=>{j.code((0,w._)`await ${(0,S.callValidateCode)(e,t,q)}`),te(t),L||j.assign(E,!0)},e=>{j.if((0,w._)`!(${e} instanceof ${F.ValidationError})`,()=>j.throw(e)),ee(e),L||j.assign(E,!1)}),e.ok(E)}function Y(){e.result((0,S.callValidateCode)(e,t,q),()=>te(t),()=>ee(t))}function ee(e){let t=(0,w._)`${e}.errors`;j.assign(E.default.vErrors,(0,w._)`${E.default.vErrors} === null ? ${t} : ${E.default.vErrors}.concat(${t})`),j.assign(E.default.errors,(0,w._)`${E.default.vErrors}.length`)}function te(e){var t;if(!F.opts.unevaluated)return;let S=D?.validate?.evaluated;if(F.props!==!0)if(S&&!S.dynamicProps)S.props!==void 0&&(F.props=O.mergeEvaluated.props(j,S.props,F.props));else{let t=j.var(`props`,(0,w._)`${e}.evaluated.props`);F.props=O.mergeEvaluated.props(j,t,F.props,w.Name)}if(F.items!==!0)if(S&&!S.dynamicItems)S.items!==void 0&&(F.items=O.mergeEvaluated.items(j,S.items,F.items));else{let t=j.var(`items`,(0,w._)`${e}.evaluated.items`);F.items=O.mergeEvaluated.items(j,t,F.items,w.Name)}}}e.callRef=F,e.default=k})),require_core=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_id(),S=require_ref();e.default=[`$schema`,`$id`,`$defs`,`$vocabulary`,{keyword:`$comment`},`definitions`,t.default,S.default]})),require_limitNumber=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=t.operators,w={maximum:{okStr:`<=`,ok:S.LTE,fail:S.GT},minimum:{okStr:`>=`,ok:S.GTE,fail:S.LT},exclusiveMaximum:{okStr:`<`,ok:S.LT,fail:S.GTE},exclusiveMinimum:{okStr:`>`,ok:S.GT,fail:S.LTE}};e.default={keyword:Object.keys(w),type:`number`,schemaType:`number`,$data:!0,error:{message:({keyword:e,schemaCode:S})=>(0,t.str)`must be ${w[e].okStr} ${S}`,params:({keyword:e,schemaCode:S})=>(0,t._)`{comparison: ${w[e].okStr}, limit: ${S}}`},code(e){let{keyword:S,data:E,schemaCode:D}=e;e.fail$data((0,t._)`${E} ${w[S].fail} ${D} || isNaN(${E})`)}}})),require_multipleOf=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen();e.default={keyword:`multipleOf`,type:`number`,schemaType:`number`,$data:!0,error:{message:({schemaCode:e})=>(0,t.str)`must be multiple of ${e}`,params:({schemaCode:e})=>(0,t._)`{multipleOf: ${e}}`},code(e){let{gen:S,data:w,schemaCode:E,it:D}=e,O=D.opts.multipleOfPrecision,k=S.let(`res`),j=O?(0,t._)`Math.abs(Math.round(${k}) - ${k}) > 1e-${O}`:(0,t._)`${k} !== parseInt(${k})`;e.fail$data((0,t._)`(${E} === 0 || (${k} = ${w}/${E}, ${j}))`)}}})),require_ucs2length=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});function t(e){let t=e.length,S=0,w=0,E;for(;w<t;)S++,E=e.charCodeAt(w++),E>=55296&&E<=56319&&w<t&&(E=e.charCodeAt(w),(E&64512)==56320&&w++);return S}e.default=t,t.code=`require("ajv/dist/runtime/ucs2length").default`})),require_limitLength=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_util(),w=require_ucs2length();e.default={keyword:[`maxLength`,`minLength`],type:`string`,schemaType:`number`,$data:!0,error:{message({keyword:e,schemaCode:S}){let w=e===`maxLength`?`more`:`fewer`;return(0,t.str)`must NOT have ${w} than ${S} characters`},params:({schemaCode:e})=>(0,t._)`{limit: ${e}}`},code(e){let{keyword:E,data:D,schemaCode:O,it:k}=e,j=E===`maxLength`?t.operators.GT:t.operators.LT,F=k.opts.unicode===!1?(0,t._)`${D}.length`:(0,t._)`${(0,S.useFunc)(e.gen,w.default)}(${D})`;e.fail$data((0,t._)`${F} ${j} ${O}`)}}})),require_pattern=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_code(),S=require_util(),w=require_codegen();e.default={keyword:`pattern`,type:`string`,schemaType:`string`,$data:!0,error:{message:({schemaCode:e})=>(0,w.str)`must match pattern "${e}"`,params:({schemaCode:e})=>(0,w._)`{pattern: ${e}}`},code(e){let{gen:E,data:D,$data:O,schema:k,schemaCode:j,it:F}=e,L=F.opts.unicodeRegExp?`u`:``;if(O){let{regExp:t}=F.opts.code,O=t.code===`new RegExp`?(0,w._)`new RegExp`:(0,S.useFunc)(E,t),k=E.let(`valid`);E.try(()=>E.assign(k,(0,w._)`${O}(${j}, ${L}).test(${D})`),()=>E.assign(k,!1)),e.fail$data((0,w._)`!${k}`)}else{let S=(0,t.usePattern)(e,k);e.fail$data((0,w._)`!${S}.test(${D})`)}}}})),require_limitProperties=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen();e.default={keyword:[`maxProperties`,`minProperties`],type:`object`,schemaType:`number`,$data:!0,error:{message({keyword:e,schemaCode:S}){let w=e===`maxProperties`?`more`:`fewer`;return(0,t.str)`must NOT have ${w} than ${S} properties`},params:({schemaCode:e})=>(0,t._)`{limit: ${e}}`},code(e){let{keyword:S,data:w,schemaCode:E}=e,D=S===`maxProperties`?t.operators.GT:t.operators.LT;e.fail$data((0,t._)`Object.keys(${w}).length ${D} ${E}`)}}})),require_required=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_code(),S=require_codegen(),w=require_util();e.default={keyword:`required`,type:`object`,schemaType:`array`,$data:!0,error:{message:({params:{missingProperty:e}})=>(0,S.str)`must have required property '${e}'`,params:({params:{missingProperty:e}})=>(0,S._)`{missingProperty: ${e}}`},code(e){let{gen:E,schema:D,schemaCode:O,data:k,$data:j,it:F}=e,{opts:L}=F;if(!j&&D.length===0)return;let B=D.length>=L.loopRequired;if(F.allErrors?H():q(),L.strictRequired){let t=e.parentSchema.properties,{definedProperties:S}=e.it;for(let e of D)if(t?.[e]===void 0&&!S.has(e)){let t=`required property "${e}" is not defined at "${F.schemaEnv.baseId+F.errSchemaPath}" (strictRequired)`;(0,w.checkStrictMode)(F,t,F.opts.strictRequired)}}function H(){if(B||j)e.block$data(S.nil,J);else for(let S of D)(0,t.checkReportMissingProp)(e,S)}function q(){let S=E.let(`missing`);if(B||j){let t=E.let(`valid`,!0);e.block$data(t,()=>Y(S,t)),e.ok(t)}else E.if((0,t.checkMissingProp)(e,D,S)),(0,t.reportMissingProp)(e,S),E.else()}function J(){E.forOf(`prop`,O,S=>{e.setParams({missingProperty:S}),E.if((0,t.noPropertyInData)(E,k,S,L.ownProperties),()=>e.error())})}function Y(w,D){e.setParams({missingProperty:w}),E.forOf(w,O,()=>{E.assign(D,(0,t.propertyInData)(E,k,w,L.ownProperties)),E.if((0,S.not)(D),()=>{e.error(),E.break()})},S.nil)}}}})),require_limitItems=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen();e.default={keyword:[`maxItems`,`minItems`],type:`array`,schemaType:`number`,$data:!0,error:{message({keyword:e,schemaCode:S}){let w=e===`maxItems`?`more`:`fewer`;return(0,t.str)`must NOT have ${w} than ${S} items`},params:({schemaCode:e})=>(0,t._)`{limit: ${e}}`},code(e){let{keyword:S,data:w,schemaCode:E}=e,D=S===`maxItems`?t.operators.GT:t.operators.LT;e.fail$data((0,t._)`${w}.length ${D} ${E}`)}}})),require_equal=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_fast_deep_equal();t.code=`require("ajv/dist/runtime/equal").default`,e.default=t})),require_uniqueItems=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_dataType(),S=require_codegen(),w=require_util(),E=require_equal();e.default={keyword:`uniqueItems`,type:`array`,schemaType:`boolean`,$data:!0,error:{message:({params:{i:e,j:t}})=>(0,S.str)`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>(0,S._)`{i: ${e}, j: ${t}}`},code(e){let{gen:D,data:O,$data:k,schema:j,parentSchema:F,schemaCode:L,it:B}=e;if(!k&&!j)return;let H=D.let(`valid`),q=F.items?(0,t.getSchemaTypes)(F.items):[];e.block$data(H,J,(0,S._)`${L} === false`),e.ok(H);function J(){let t=D.let(`i`,(0,S._)`${O}.length`),w=D.let(`j`);e.setParams({i:t,j:w}),D.assign(H,!0),D.if((0,S._)`${t} > 1`,()=>(Y()?ee:te)(t,w))}function Y(){return q.length>0&&!q.some(e=>e===`object`||e===`array`)}function ee(w,E){let k=D.name(`item`),j=(0,t.checkDataTypes)(q,k,B.opts.strictNumbers,t.DataType.Wrong),F=D.const(`indices`,(0,S._)`{}`);D.for((0,S._)`;${w}--;`,()=>{D.let(k,(0,S._)`${O}[${w}]`),D.if(j,(0,S._)`continue`),q.length>1&&D.if((0,S._)`typeof ${k} == "string"`,(0,S._)`${k} += "_"`),D.if((0,S._)`typeof ${F}[${k}] == "number"`,()=>{D.assign(E,(0,S._)`${F}[${k}]`),e.error(),D.assign(H,!1).break()}).code((0,S._)`${F}[${k}] = ${w}`)})}function te(t,k){let j=(0,w.useFunc)(D,E.default),F=D.name(`outer`);D.label(F).for((0,S._)`;${t}--;`,()=>D.for((0,S._)`${k} = ${t}; ${k}--;`,()=>D.if((0,S._)`${j}(${O}[${t}], ${O}[${k}])`,()=>{e.error(),D.assign(H,!1).break(F)})))}}}})),require_const=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_util(),w=require_equal();e.default={keyword:`const`,$data:!0,error:{message:`must be equal to constant`,params:({schemaCode:e})=>(0,t._)`{allowedValue: ${e}}`},code(e){let{gen:E,data:D,$data:O,schemaCode:k,schema:j}=e;O||j&&typeof j==`object`?e.fail$data((0,t._)`!${(0,S.useFunc)(E,w.default)}(${D}, ${k})`):e.fail((0,t._)`${j} !== ${D}`)}}})),require_enum=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_util(),w=require_equal();e.default={keyword:`enum`,schemaType:`array`,$data:!0,error:{message:`must be equal to one of the allowed values`,params:({schemaCode:e})=>(0,t._)`{allowedValues: ${e}}`},code(e){let{gen:E,data:D,$data:O,schema:k,schemaCode:j,it:F}=e;if(!O&&k.length===0)throw Error(`enum must have non-empty array`);let L=k.length>=F.opts.loopEnum,B,H=()=>B??=(0,S.useFunc)(E,w.default),q;if(L||O)q=E.let(`valid`),e.block$data(q,J);else{if(!Array.isArray(k))throw Error(`ajv implementation error`);let e=E.const(`vSchema`,j);q=(0,t.or)(...k.map((t,S)=>Y(e,S)))}e.pass(q);function J(){E.assign(q,!1),E.forOf(`v`,j,e=>E.if((0,t._)`${H()}(${D}, ${e})`,()=>E.assign(q,!0).break()))}function Y(e,S){let w=k[S];return typeof w==`object`&&w?(0,t._)`${H()}(${D}, ${e}[${S}])`:(0,t._)`${D} === ${w}`}}}})),require_validation$2=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_limitNumber(),S=require_multipleOf(),w=require_limitLength(),E=require_pattern(),D=require_limitProperties(),O=require_required(),k=require_limitItems(),j=require_uniqueItems(),F=require_const(),L=require_enum();e.default=[t.default,S.default,w.default,E.default,D.default,O.default,k.default,j.default,{keyword:`type`,schemaType:[`string`,`array`]},{keyword:`nullable`,schemaType:`boolean`},F.default,L.default]})),require_additionalItems=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateAdditionalItems=void 0;let t=require_codegen(),S=require_util(),w={keyword:`additionalItems`,type:`array`,schemaType:[`boolean`,`object`],before:`uniqueItems`,error:{message:({params:{len:e}})=>(0,t.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,t._)`{limit: ${e}}`},code(e){let{parentSchema:t,it:w}=e,{items:D}=t;if(!Array.isArray(D)){(0,S.checkStrictMode)(w,`"additionalItems" is ignored when "items" is not an array of schemas`);return}E(e,D)}};function E(e,w){let{gen:E,schema:D,data:O,keyword:k,it:j}=e;j.items=!0;let F=E.const(`len`,(0,t._)`${O}.length`);if(D===!1)e.setParams({len:w.length}),e.pass((0,t._)`${F} <= ${w.length}`);else if(typeof D==`object`&&!(0,S.alwaysValidSchema)(j,D)){let S=E.var(`valid`,(0,t._)`${F} <= ${w.length}`);E.if((0,t.not)(S),()=>L(S)),e.ok(S)}function L(D){E.forRange(`i`,w.length,F,w=>{e.subschema({keyword:k,dataProp:w,dataPropType:S.Type.Num},D),j.allErrors||E.if((0,t.not)(D),()=>E.break())})}}e.validateAdditionalItems=E,e.default=w})),require_items=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateTuple=void 0;let t=require_codegen(),S=require_util(),w=require_code(),E={keyword:`items`,type:`array`,schemaType:[`object`,`array`,`boolean`],before:`uniqueItems`,code(e){let{schema:t,it:E}=e;if(Array.isArray(t))return D(e,`additionalItems`,t);E.items=!0,!(0,S.alwaysValidSchema)(E,t)&&e.ok((0,w.validateArray)(e))}};function D(e,w,E=e.schema){let{gen:D,parentSchema:O,data:k,keyword:j,it:F}=e;H(O),F.opts.unevaluated&&E.length&&F.items!==!0&&(F.items=S.mergeEvaluated.items(D,E.length,F.items));let L=D.name(`valid`),B=D.const(`len`,(0,t._)`${k}.length`);E.forEach((w,E)=>{(0,S.alwaysValidSchema)(F,w)||(D.if((0,t._)`${B} > ${E}`,()=>e.subschema({keyword:j,schemaProp:E,dataProp:E},L)),e.ok(L))});function H(e){let{opts:t,errSchemaPath:D}=F,O=E.length,k=O===e.minItems&&(O===e.maxItems||e[w]===!1);if(t.strictTuples&&!k){let e=`"${j}" is ${O}-tuple, but minItems or maxItems/${w} are not specified or different at path "${D}"`;(0,S.checkStrictMode)(F,e,t.strictTuples)}}}e.validateTuple=D,e.default=E})),require_prefixItems=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_items();e.default={keyword:`prefixItems`,type:`array`,schemaType:[`array`],before:`uniqueItems`,code:e=>(0,t.validateTuple)(e,`items`)}})),require_items2020=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_util(),w=require_code(),E=require_additionalItems();e.default={keyword:`items`,type:`array`,schemaType:[`object`,`boolean`],before:`uniqueItems`,error:{message:({params:{len:e}})=>(0,t.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,t._)`{limit: ${e}}`},code(e){let{schema:t,parentSchema:D,it:O}=e,{prefixItems:k}=D;O.items=!0,!(0,S.alwaysValidSchema)(O,t)&&(k?(0,E.validateAdditionalItems)(e,k):e.ok((0,w.validateArray)(e)))}}})),require_contains=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_util();e.default={keyword:`contains`,type:`array`,schemaType:[`object`,`boolean`],before:`uniqueItems`,trackErrors:!0,error:{message:({params:{min:e,max:S}})=>S===void 0?(0,t.str)`must contain at least ${e} valid item(s)`:(0,t.str)`must contain at least ${e} and no more than ${S} valid item(s)`,params:({params:{min:e,max:S}})=>S===void 0?(0,t._)`{minContains: ${e}}`:(0,t._)`{minContains: ${e}, maxContains: ${S}}`},code(e){let{gen:w,schema:E,parentSchema:D,data:O,it:k}=e,j,F,{minContains:L,maxContains:B}=D;k.opts.next?(j=L===void 0?1:L,F=B):j=1;let H=w.const(`len`,(0,t._)`${O}.length`);if(e.setParams({min:j,max:F}),F===void 0&&j===0){(0,S.checkStrictMode)(k,`"minContains" == 0 without "maxContains": "contains" keyword ignored`);return}if(F!==void 0&&j>F){(0,S.checkStrictMode)(k,`"minContains" > "maxContains" is always invalid`),e.fail();return}if((0,S.alwaysValidSchema)(k,E)){let S=(0,t._)`${H} >= ${j}`;F!==void 0&&(S=(0,t._)`${S} && ${H} <= ${F}`),e.pass(S);return}k.items=!0;let q=w.name(`valid`);F===void 0&&j===1?Y(q,()=>w.if(q,()=>w.break())):j===0?(w.let(q,!0),F!==void 0&&w.if((0,t._)`${O}.length > 0`,J)):(w.let(q,!1),J()),e.result(q,()=>e.reset());function J(){let e=w.name(`_valid`),t=w.let(`count`,0);Y(e,()=>w.if(e,()=>ee(t)))}function Y(t,E){w.forRange(`i`,0,H,w=>{e.subschema({keyword:`contains`,dataProp:w,dataPropType:S.Type.Num,compositeRule:!0},t),E()})}function ee(e){w.code((0,t._)`${e}++`),F===void 0?w.if((0,t._)`${e} >= ${j}`,()=>w.assign(q,!0).break()):(w.if((0,t._)`${e} > ${F}`,()=>w.assign(q,!1).break()),j===1?w.assign(q,!0):w.if((0,t._)`${e} >= ${j}`,()=>w.assign(q,!0)))}}}})),require_dependencies=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateSchemaDeps=e.validatePropertyDeps=e.error=void 0;let t=require_codegen(),S=require_util(),w=require_code();e.error={message:({params:{property:e,depsCount:S,deps:w}})=>{let E=S===1?`property`:`properties`;return(0,t.str)`must have ${E} ${w} when property ${e} is present`},params:({params:{property:e,depsCount:S,deps:w,missingProperty:E}})=>(0,t._)`{property: ${e},
472
472
  missingProperty: ${E},
473
473
  depsCount: ${S},
474
- deps: ${w}}`};let E={keyword:`dependencies`,type:`object`,schemaType:`object`,error:e.error,code(e){let[t,S]=D(e);O(e,t),k(e,S)}};function D({schema:e}){let t={},S={};for(let w in e){if(w===`__proto__`)continue;let E=Array.isArray(e[w])?t:S;E[w]=e[w]}return[t,S]}function O(e,S=e.schema){let{gen:E,data:D,it:O}=e;if(Object.keys(S).length===0)return;let k=E.let(`missing`);for(let j in S){let F=S[j];if(F.length===0)continue;let L=(0,w.propertyInData)(E,D,j,O.opts.ownProperties);e.setParams({property:j,depsCount:F.length,deps:F.join(`, `)}),O.allErrors?E.if(L,()=>{for(let t of F)(0,w.checkReportMissingProp)(e,t)}):(E.if((0,t._)`${L} && (${(0,w.checkMissingProp)(e,F,k)})`),(0,w.reportMissingProp)(e,k),E.else())}}e.validatePropertyDeps=O;function k(e,t=e.schema){let{gen:E,data:D,keyword:O,it:k}=e,j=E.name(`valid`);for(let F in t)(0,S.alwaysValidSchema)(k,t[F])||(E.if((0,w.propertyInData)(E,D,F,k.opts.ownProperties),()=>{let t=e.subschema({keyword:O,schemaProp:F},j);e.mergeValidEvaluated(t,j)},()=>E.var(j,!0)),e.ok(j))}e.validateSchemaDeps=k,e.default=E})),require_propertyNames=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_util();e.default={keyword:`propertyNames`,type:`object`,schemaType:[`object`,`boolean`],error:{message:`property name must be valid`,params:({params:e})=>(0,t._)`{propertyName: ${e.propertyName}}`},code(e){let{gen:w,schema:E,data:D,it:O}=e;if((0,S.alwaysValidSchema)(O,E))return;let k=w.name(`valid`);w.forIn(`key`,D,S=>{e.setParams({propertyName:S}),e.subschema({keyword:`propertyNames`,data:S,dataTypes:[`string`],propertyName:S,compositeRule:!0},k),w.if((0,t.not)(k),()=>{e.error(!0),O.allErrors||w.break()})}),e.ok(k)}}})),require_additionalProperties=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_code(),S=require_codegen(),w=require_names(),E=require_util();e.default={keyword:`additionalProperties`,type:[`object`],schemaType:[`boolean`,`object`],allowUndefined:!0,trackErrors:!0,error:{message:`must NOT have additional properties`,params:({params:e})=>(0,S._)`{additionalProperty: ${e.additionalProperty}}`},code(e){let{gen:D,schema:O,parentSchema:k,data:j,errsCount:F,it:L}=e;if(!F)throw Error(`ajv implementation error`);let{allErrors:B,opts:H}=L;if(L.props=!0,H.removeAdditional!==`all`&&(0,E.alwaysValidSchema)(L,O))return;let q=(0,t.allSchemaProperties)(k.properties),J=(0,t.allSchemaProperties)(k.patternProperties);Y(),e.ok((0,S._)`${F} === ${w.default.errors}`);function Y(){D.forIn(`key`,j,e=>{!q.length&&!J.length?ne(e):D.if(ee(e),()=>ne(e))})}function ee(w){let O;if(q.length>8){let e=(0,E.schemaRefOrVal)(L,k.properties,`properties`);O=(0,t.isOwnProperty)(D,e,w)}else O=q.length?(0,S.or)(...q.map(e=>(0,S._)`${w} === ${e}`)):S.nil;return J.length&&(O=(0,S.or)(O,...J.map(E=>(0,S._)`${(0,t.usePattern)(e,E)}.test(${w})`))),(0,S.not)(O)}function te(e){D.code((0,S._)`delete ${j}[${e}]`)}function ne(t){if(H.removeAdditional===`all`||H.removeAdditional&&O===!1){te(t);return}if(O===!1){e.setParams({additionalProperty:t}),e.error(),B||D.break();return}if(typeof O==`object`&&!(0,E.alwaysValidSchema)(L,O)){let w=D.name(`valid`);H.removeAdditional===`failing`?(ae(t,w,!1),D.if((0,S.not)(w),()=>{e.reset(),te(t)})):(ae(t,w),B||D.if((0,S.not)(w),()=>D.break()))}}function ae(t,S,w){let D={keyword:`additionalProperties`,dataProp:t,dataPropType:E.Type.Str};w===!1&&Object.assign(D,{compositeRule:!0,createErrors:!1,allErrors:!1}),e.subschema(D,S)}}}})),require_properties=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_validate(),S=require_code(),w=require_util(),E=require_additionalProperties();e.default={keyword:`properties`,type:`object`,schemaType:`object`,code(e){let{gen:D,schema:O,parentSchema:k,data:j,it:F}=e;F.opts.removeAdditional===`all`&&k.additionalProperties===void 0&&E.default.code(new t.KeywordCxt(F,E.default,`additionalProperties`));let L=(0,S.allSchemaProperties)(O);for(let e of L)F.definedProperties.add(e);F.opts.unevaluated&&L.length&&F.props!==!0&&(F.props=w.mergeEvaluated.props(D,(0,w.toHash)(L),F.props));let B=L.filter(e=>!(0,w.alwaysValidSchema)(F,O[e]));if(B.length===0)return;let H=D.name(`valid`);for(let t of B)q(t)?J(t):(D.if((0,S.propertyInData)(D,j,t,F.opts.ownProperties)),J(t),F.allErrors||D.else().var(H,!0),D.endIf()),e.it.definedProperties.add(t),e.ok(H);function q(e){return F.opts.useDefaults&&!F.compositeRule&&O[e].default!==void 0}function J(t){e.subschema({keyword:`properties`,schemaProp:t,dataProp:t},H)}}}})),require_patternProperties=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_code(),S=require_codegen(),w=require_util(),E=require_util();e.default={keyword:`patternProperties`,type:`object`,schemaType:`object`,code(e){let{gen:D,schema:O,data:k,parentSchema:j,it:F}=e,{opts:L}=F,B=(0,t.allSchemaProperties)(O),H=B.filter(e=>(0,w.alwaysValidSchema)(F,O[e]));if(B.length===0||H.length===B.length&&(!F.opts.unevaluated||F.props===!0))return;let q=L.strictSchema&&!L.allowMatchingProperties&&j.properties,J=D.name(`valid`);F.props!==!0&&!(F.props instanceof S.Name)&&(F.props=(0,E.evaluatedPropsToName)(D,F.props));let{props:Y}=F;ee();function ee(){for(let e of B)q&&te(e),F.allErrors?ne(e):(D.var(J,!0),ne(e),D.if(J))}function te(e){for(let t in q)new RegExp(e).test(t)&&(0,w.checkStrictMode)(F,`property ${t} matches pattern ${e} (use allowMatchingProperties)`)}function ne(w){D.forIn(`key`,k,O=>{D.if((0,S._)`${(0,t.usePattern)(e,w)}.test(${O})`,()=>{let t=H.includes(w);t||e.subschema({keyword:`patternProperties`,schemaProp:w,dataProp:O,dataPropType:E.Type.Str},J),F.opts.unevaluated&&Y!==!0?D.assign((0,S._)`${Y}[${O}]`,!0):!t&&!F.allErrors&&D.if((0,S.not)(J),()=>D.break())})})}}}})),require_not=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_util();e.default={keyword:`not`,schemaType:[`object`,`boolean`],trackErrors:!0,code(e){let{gen:S,schema:w,it:E}=e;if((0,t.alwaysValidSchema)(E,w)){e.fail();return}let D=S.name(`valid`);e.subschema({keyword:`not`,compositeRule:!0,createErrors:!1,allErrors:!1},D),e.failResult(D,()=>e.reset(),()=>e.error())},error:{message:`must NOT be valid`}}})),require_anyOf=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default={keyword:`anyOf`,schemaType:`array`,trackErrors:!0,code:require_code().validateUnion,error:{message:`must match a schema in anyOf`}}})),require_oneOf=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_util();e.default={keyword:`oneOf`,schemaType:`array`,trackErrors:!0,error:{message:`must match exactly one schema in oneOf`,params:({params:e})=>(0,t._)`{passingSchemas: ${e.passing}}`},code(e){let{gen:w,schema:E,parentSchema:D,it:O}=e;if(!Array.isArray(E))throw Error(`ajv implementation error`);if(O.opts.discriminator&&D.discriminator)return;let k=E,j=w.let(`valid`,!1),F=w.let(`passing`,null),L=w.name(`_valid`);e.setParams({passing:F}),w.block(B),e.result(j,()=>e.reset(),()=>e.error(!0));function B(){k.forEach((E,D)=>{let k;(0,S.alwaysValidSchema)(O,E)?w.var(L,!0):k=e.subschema({keyword:`oneOf`,schemaProp:D,compositeRule:!0},L),D>0&&w.if((0,t._)`${L} && ${j}`).assign(j,!1).assign(F,(0,t._)`[${F}, ${D}]`).else(),w.if(L,()=>{w.assign(j,!0),w.assign(F,D),k&&e.mergeEvaluated(k,t.Name)})})}}}})),require_allOf=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_util();e.default={keyword:`allOf`,schemaType:`array`,code(e){let{gen:S,schema:w,it:E}=e;if(!Array.isArray(w))throw Error(`ajv implementation error`);let D=S.name(`valid`);w.forEach((S,w)=>{if((0,t.alwaysValidSchema)(E,S))return;let O=e.subschema({keyword:`allOf`,schemaProp:w},D);e.ok(D),e.mergeEvaluated(O)})}}})),require_if=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_util(),w={keyword:`if`,schemaType:[`object`,`boolean`],trackErrors:!0,error:{message:({params:e})=>(0,t.str)`must match "${e.ifClause}" schema`,params:({params:e})=>(0,t._)`{failingKeyword: ${e.ifClause}}`},code(e){let{gen:w,parentSchema:D,it:O}=e;D.then===void 0&&D.else===void 0&&(0,S.checkStrictMode)(O,`"if" without "then" and "else" is ignored`);let k=E(O,`then`),j=E(O,`else`);if(!k&&!j)return;let F=w.let(`valid`,!0),L=w.name(`_valid`);if(B(),e.reset(),k&&j){let t=w.let(`ifClause`);e.setParams({ifClause:t}),w.if(L,H(`then`,t),H(`else`,t))}else k?w.if(L,H(`then`)):w.if((0,t.not)(L),H(`else`));e.pass(F,()=>e.error(!0));function B(){let t=e.subschema({keyword:`if`,compositeRule:!0,createErrors:!1,allErrors:!1},L);e.mergeEvaluated(t)}function H(S,E){return()=>{let D=e.subschema({keyword:S},L);w.assign(F,L),e.mergeValidEvaluated(D,F),E?w.assign(E,(0,t._)`${S}`):e.setParams({ifClause:S})}}}};function E(e,t){let w=e.schema[t];return w!==void 0&&!(0,S.alwaysValidSchema)(e,w)}e.default=w})),require_thenElse=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_util();e.default={keyword:[`then`,`else`],schemaType:[`object`,`boolean`],code({keyword:e,parentSchema:S,it:w}){S.if===void 0&&(0,t.checkStrictMode)(w,`"${e}" without "if" is ignored`)}}})),require_applicator=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_additionalItems(),S=require_prefixItems(),w=require_items(),E=require_items2020(),D=require_contains(),O=require_dependencies(),k=require_propertyNames(),j=require_additionalProperties(),F=require_properties(),L=require_patternProperties(),B=require_not(),H=require_anyOf(),q=require_oneOf(),J=require_allOf(),Y=require_if(),ee=require_thenElse();function te(e=!1){let te=[B.default,H.default,q.default,J.default,Y.default,ee.default,k.default,j.default,O.default,F.default,L.default];return e?te.push(S.default,E.default):te.push(t.default,w.default),te.push(D.default),te}e.default=te})),require_format$1=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen();e.default={keyword:`format`,type:[`number`,`string`],schemaType:`string`,$data:!0,error:{message:({schemaCode:e})=>(0,t.str)`must match format "${e}"`,params:({schemaCode:e})=>(0,t._)`{format: ${e}}`},code(e,S){let{gen:w,data:E,$data:D,schema:O,schemaCode:k,it:j}=e,{opts:F,errSchemaPath:L,schemaEnv:B,self:H}=j;if(!F.validateFormats)return;D?q():J();function q(){let D=w.scopeValue(`formats`,{ref:H.formats,code:F.code.formats}),O=w.const(`fDef`,(0,t._)`${D}[${k}]`),j=w.let(`fType`),L=w.let(`format`);w.if((0,t._)`typeof ${O} == "object" && !(${O} instanceof RegExp)`,()=>w.assign(j,(0,t._)`${O}.type || "string"`).assign(L,(0,t._)`${O}.validate`),()=>w.assign(j,(0,t._)`"string"`).assign(L,O)),e.fail$data((0,t.or)(q(),J()));function q(){return F.strictSchema===!1?t.nil:(0,t._)`${k} && !${L}`}function J(){let e=B.$async?(0,t._)`(${O}.async ? await ${L}(${E}) : ${L}(${E}))`:(0,t._)`${L}(${E})`,w=(0,t._)`(typeof ${L} == "function" ? ${e} : ${L}.test(${E}))`;return(0,t._)`${L} && ${L} !== true && ${j} === ${S} && !${w}`}}function J(){let D=H.formats[O];if(!D){J();return}if(D===!0)return;let[k,j,q]=Y(D);k===S&&e.pass(ee());function J(){if(F.strictSchema===!1){H.logger.warn(e());return}throw Error(e());function e(){return`unknown format "${O}" ignored in schema at path "${L}"`}}function Y(e){let S=e instanceof RegExp?(0,t.regexpCode)(e):F.code.formats?(0,t._)`${F.code.formats}${(0,t.getProperty)(O)}`:void 0,E=w.scopeValue(`formats`,{key:O,ref:e,code:S});return typeof e==`object`&&!(e instanceof RegExp)?[e.type||`string`,e.validate,(0,t._)`${E}.validate`]:[`string`,e,E]}function ee(){if(typeof D==`object`&&!(D instanceof RegExp)&&D.async){if(!B.$async)throw Error(`async format in sync schema`);return(0,t._)`await ${q}(${E})`}return typeof j==`function`?(0,t._)`${q}(${E})`:(0,t._)`${q}.test(${E})`}}}}})),require_format=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=[require_format$1().default]})),require_metadata=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.contentVocabulary=e.metadataVocabulary=void 0,e.metadataVocabulary=[`title`,`description`,`default`,`deprecated`,`readOnly`,`writeOnly`,`examples`],e.contentVocabulary=[`contentMediaType`,`contentEncoding`,`contentSchema`]})),require_draft7=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_core(),S=require_validation$2(),w=require_applicator(),E=require_format(),D=require_metadata();e.default=[t.default,S.default,(0,w.default)(),E.default,D.metadataVocabulary,D.contentVocabulary]})),require_types=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.DiscrError=void 0;var t;(function(e){e.Tag=`tag`,e.Mapping=`mapping`})(t||(e.DiscrError=t={}))})),require_discriminator=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_types(),w=require_compile(),E=require_ref_error(),D=require_util();e.default={keyword:`discriminator`,type:`object`,schemaType:`object`,error:{message:({params:{discrError:e,tagName:t}})=>e===S.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:S,tagName:w}})=>(0,t._)`{error: ${e}, tag: ${w}, tagValue: ${S}}`},code(e){let{gen:O,data:k,schema:j,parentSchema:F,it:L}=e,{oneOf:B}=F;if(!L.opts.discriminator)throw Error(`discriminator: requires discriminator option`);let H=j.propertyName;if(typeof H!=`string`)throw Error(`discriminator: requires propertyName`);if(j.mapping)throw Error(`discriminator: mapping is not supported`);if(!B)throw Error(`discriminator: requires oneOf keyword`);let q=O.let(`valid`,!1),J=O.const(`tag`,(0,t._)`${k}${(0,t.getProperty)(H)}`);O.if((0,t._)`typeof ${J} == "string"`,()=>Y(),()=>e.error(!1,{discrError:S.DiscrError.Tag,tag:J,tagName:H})),e.ok(q);function Y(){let w=te();O.if(!1);for(let e in w)O.elseIf((0,t._)`${J} === ${e}`),O.assign(q,ee(w[e]));O.else(),e.error(!1,{discrError:S.DiscrError.Mapping,tag:J,tagName:H}),O.endIf()}function ee(S){let w=O.name(`valid`),E=e.subschema({keyword:`oneOf`,schemaProp:S},w);return e.mergeEvaluated(E,t.Name),w}function te(){var e;let t={},S=k(F),O=!0;for(let e=0;e<B.length;e++){let t=B[e];if(t?.$ref&&!(0,D.schemaHasRulesButRef)(t,L.self.RULES)){let e=t.$ref;if(t=w.resolveRef.call(L.self,L.schemaEnv.root,L.baseId,e),t instanceof w.SchemaEnv&&(t=t.schema),t===void 0)throw new E.default(L.opts.uriResolver,L.baseId,e)}let F=t?.properties?.[H];if(typeof F!=`object`)throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${H}"`);O&&=S||k(t),j(F,e)}if(!O)throw Error(`discriminator: "${H}" must be required`);return t;function k({required:e}){return Array.isArray(e)&&e.includes(H)}function j(e,t){if(e.const)q(e.const,t);else if(e.enum)for(let S of e.enum)q(S,t);else throw Error(`discriminator: "properties/${H}" must have "const" or "enum"`)}function q(e,S){if(typeof e!=`string`||e in t)throw Error(`discriminator: "${H}" values must be unique strings`);t[e]=S}}}}})),require_json_schema_draft_07=__commonJSMin$2(((e,t)=>{t.exports={$schema:`http://json-schema.org/draft-07/schema#`,$id:`http://json-schema.org/draft-07/schema#`,title:`Core schema meta-schema`,definitions:{schemaArray:{type:`array`,minItems:1,items:{$ref:`#`}},nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:`#/definitions/nonNegativeInteger`},{default:0}]},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}},type:[`object`,`boolean`],properties:{$id:{type:`string`,format:`uri-reference`},$schema:{type:`string`,format:`uri`},$ref:{type:`string`,format:`uri-reference`},$comment:{type:`string`},title:{type:`string`},description:{type:`string`},default:!0,readOnly:{type:`boolean`,default:!1},examples:{type:`array`,items:!0},multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/definitions/nonNegativeInteger`},minLength:{$ref:`#/definitions/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},additionalItems:{$ref:`#`},items:{anyOf:[{$ref:`#`},{$ref:`#/definitions/schemaArray`}],default:!0},maxItems:{$ref:`#/definitions/nonNegativeInteger`},minItems:{$ref:`#/definitions/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},contains:{$ref:`#`},maxProperties:{$ref:`#/definitions/nonNegativeInteger`},minProperties:{$ref:`#/definitions/nonNegativeIntegerDefault0`},required:{$ref:`#/definitions/stringArray`},additionalProperties:{$ref:`#`},definitions:{type:`object`,additionalProperties:{$ref:`#`},default:{}},properties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$ref:`#`},propertyNames:{format:`regex`},default:{}},dependencies:{type:`object`,additionalProperties:{anyOf:[{$ref:`#`},{$ref:`#/definitions/stringArray`}]}},propertyNames:{$ref:`#`},const:!0,enum:{type:`array`,items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:`#/definitions/simpleTypes`},{type:`array`,items:{$ref:`#/definitions/simpleTypes`},minItems:1,uniqueItems:!0}]},format:{type:`string`},contentMediaType:{type:`string`},contentEncoding:{type:`string`},if:{$ref:`#`},then:{$ref:`#`},else:{$ref:`#`},allOf:{$ref:`#/definitions/schemaArray`},anyOf:{$ref:`#/definitions/schemaArray`},oneOf:{$ref:`#/definitions/schemaArray`},not:{$ref:`#`}},default:!0}})),require_ajv=__commonJSMin$2(((e,t)=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.MissingRefError=e.ValidationError=e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=e.Ajv=void 0;let S=require_core$1(),w=require_draft7(),E=require_discriminator(),D=require_json_schema_draft_07(),O=[`/properties`],k=`http://json-schema.org/draft-07/schema`;var j=class extends S.default{_addVocabularies(){super._addVocabularies(),w.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(E.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(D,O):D;this.addMetaSchema(e,k,!1),this.refs[`http://json-schema.org/schema`]=k}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(k)?k:void 0)}};e.Ajv=j,t.exports=e=j,t.exports.Ajv=j,Object.defineProperty(e,`__esModule`,{value:!0}),e.default=j;var F=require_validate();Object.defineProperty(e,`KeywordCxt`,{enumerable:!0,get:function(){return F.KeywordCxt}});var L=require_codegen();Object.defineProperty(e,`_`,{enumerable:!0,get:function(){return L._}}),Object.defineProperty(e,`str`,{enumerable:!0,get:function(){return L.str}}),Object.defineProperty(e,`stringify`,{enumerable:!0,get:function(){return L.stringify}}),Object.defineProperty(e,`nil`,{enumerable:!0,get:function(){return L.nil}}),Object.defineProperty(e,`Name`,{enumerable:!0,get:function(){return L.Name}}),Object.defineProperty(e,`CodeGen`,{enumerable:!0,get:function(){return L.CodeGen}});var B=require_validation_error();Object.defineProperty(e,`ValidationError`,{enumerable:!0,get:function(){return B.default}});var H=require_ref_error();Object.defineProperty(e,`MissingRefError`,{enumerable:!0,get:function(){return H.default}})})),require_formats=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.formatNames=e.fastFormats=e.fullFormats=void 0;function t(e,t){return{validate:e,compare:t}}e.fullFormats={date:t(D,O),time:t(j(!0),F),"date-time":t(H(!0),q),"iso-time":t(j(),L),"iso-date-time":t(H(),J),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:te,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:me,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:ae,int32:{type:`number`,validate:ce},int64:{type:`number`,validate:ue},float:{type:`number`,validate:de},double:{type:`number`,validate:de},password:!0,binary:!0},e.fastFormats={...e.fullFormats,date:t(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,O),time:t(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,F),"date-time":t(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,q),"iso-time":t(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,L),"iso-date-time":t(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,J),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i},e.formatNames=Object.keys(e.fullFormats);function S(e){return e%4==0&&(e%100!=0||e%400==0)}let w=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,E=[0,31,28,31,30,31,30,31,31,30,31,30,31];function D(e){let t=w.exec(e);if(!t)return!1;let D=+t[1],O=+t[2],k=+t[3];return O>=1&&O<=12&&k>=1&&k<=(O===2&&S(D)?29:E[O])}function O(e,t){if(e&&t)return e>t?1:e<t?-1:0}let k=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function j(e){return function(t){let S=k.exec(t);if(!S)return!1;let w=+S[1],E=+S[2],D=+S[3],O=S[4],j=S[5]===`-`?-1:1,F=+(S[6]||0),L=+(S[7]||0);if(F>23||L>59||e&&!O)return!1;if(w<=23&&E<=59&&D<60)return!0;let B=E-L*j,H=w-F*j-(B<0?1:0);return(H===23||H===-1)&&(B===59||B===-1)&&D<61}}function F(e,t){if(!(e&&t))return;let S=new Date(`2020-01-01T`+e).valueOf(),w=new Date(`2020-01-01T`+t).valueOf();if(S&&w)return S-w}function L(e,t){if(!(e&&t))return;let S=k.exec(e),w=k.exec(t);if(S&&w)return e=S[1]+S[2]+S[3],t=w[1]+w[2]+w[3],e>t?1:e<t?-1:0}let B=/t|\s/i;function H(e){let t=j(e);return function(e){let S=e.split(B);return S.length===2&&D(S[0])&&t(S[1])}}function q(e,t){if(!(e&&t))return;let S=new Date(e).valueOf(),w=new Date(t).valueOf();if(S&&w)return S-w}function J(e,t){if(!(e&&t))return;let[S,w]=e.split(B),[E,D]=t.split(B),k=O(S,E);if(k!==void 0)return k||F(w,D)}let Y=/\/|:/,ee=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function te(e){return Y.test(e)&&ee.test(e)}let ne=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function ae(e){return ne.lastIndex=0,ne.test(e)}let oe=-(2**31),se=2**31-1;function ce(e){return Number.isInteger(e)&&e<=se&&e>=oe}function ue(e){return Number.isInteger(e)}function de(){return!0}let fe=/[^\\]\\Z/;function me(e){if(fe.test(e))return!1;try{return new RegExp(e),!0}catch{return!1}}})),require_limit=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.formatLimitDefinition=void 0;let t=require_ajv(),S=require_codegen(),w=S.operators,E={formatMaximum:{okStr:`<=`,ok:w.LTE,fail:w.GT},formatMinimum:{okStr:`>=`,ok:w.GTE,fail:w.LT},formatExclusiveMaximum:{okStr:`<`,ok:w.LT,fail:w.GTE},formatExclusiveMinimum:{okStr:`>`,ok:w.GT,fail:w.LTE}};e.formatLimitDefinition={keyword:Object.keys(E),type:`string`,schemaType:`string`,$data:!0,error:{message:({keyword:e,schemaCode:t})=>(0,S.str)`should be ${E[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>(0,S._)`{comparison: ${E[e].okStr}, limit: ${t}}`},code(e){let{gen:w,data:D,schemaCode:O,keyword:k,it:j}=e,{opts:F,self:L}=j;if(!F.validateFormats)return;let B=new t.KeywordCxt(j,L.RULES.all.format.definition,`format`);B.$data?H():q();function H(){let t=w.scopeValue(`formats`,{ref:L.formats,code:F.code.formats}),E=w.const(`fmt`,(0,S._)`${t}[${B.schemaCode}]`);e.fail$data((0,S.or)((0,S._)`typeof ${E} != "object"`,(0,S._)`${E} instanceof RegExp`,(0,S._)`typeof ${E}.compare != "function"`,J(E)))}function q(){let t=B.schema,E=L.formats[t];if(!E||E===!0)return;if(typeof E!=`object`||E instanceof RegExp||typeof E.compare!=`function`)throw Error(`"${k}": format "${t}" does not define "compare" function`);let D=w.scopeValue(`formats`,{key:t,ref:E,code:F.code.formats?(0,S._)`${F.code.formats}${(0,S.getProperty)(t)}`:void 0});e.fail$data(J(D))}function J(e){return(0,S._)`${e}.compare(${D}, ${O}) ${E[k].fail} 0`}},dependencies:[`format`]},e.default=t=>(t.addKeyword(e.formatLimitDefinition),t)})),require_dist=__commonJSMin$2(((e,t)=>{Object.defineProperty(e,`__esModule`,{value:!0});let S=require_formats(),w=require_limit(),E=require_codegen(),D=new E.Name(`fullFormats`),O=new E.Name(`fastFormats`),k=(e,t={keywords:!0})=>{if(Array.isArray(t))return j(e,t,S.fullFormats,D),e;let[E,k]=t.mode===`fast`?[S.fastFormats,O]:[S.fullFormats,D];return j(e,t.formats||S.formatNames,E,k),t.keywords&&(0,w.default)(e),e};k.get=(e,t=`full`)=>{let w=(t===`fast`?S.fastFormats:S.fullFormats)[e];if(!w)throw Error(`Unknown format "${e}"`);return w};function j(e,t,S,w){var D,O;(O=e.opts.code).formats??(O.formats=(0,E._)`require("ajv-formats/dist/formats").${w}`);for(let w of t)e.addFormat(w,S[w])}t.exports=e=k,Object.defineProperty(e,`__esModule`,{value:!0}),e.default=k})),import_ajv=__toESM$2(require_ajv(),1),import_dist=__toESM$2(require_dist(),1);function createDefaultAjvInstance(){let e=new import_ajv.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,import_dist.default)(e),e}var AjvJsonSchemaValidator=class{constructor(e){this._ajv=e??createDefaultAjvInstance()}getValidator(e){let t=`$id`in e&&typeof e.$id==`string`?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return e=>t(e)?{valid:!0,data:e,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(t.errors)}}},ExperimentalServerTasks=class{constructor(e){this._server=e}requestStream(e,t,S){return this._server.requestStream(e,t,S)}createMessageStream(e,t){let S=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!S?.sampling?.tools)throw Error(`Client does not support sampling tools capability.`);if(e.messages.length>0){let t=e.messages[e.messages.length-1],S=Array.isArray(t.content)?t.content:[t.content],w=S.some(e=>e.type===`tool_result`),E=e.messages.length>1?e.messages[e.messages.length-2]:void 0,D=E?Array.isArray(E.content)?E.content:[E.content]:[],O=D.some(e=>e.type===`tool_use`);if(w){if(S.some(e=>e.type!==`tool_result`))throw Error(`The last message must contain only tool_result content if any is present`);if(!O)throw Error(`tool_result blocks are not matching any tool_use from the previous message`)}if(O){let e=new Set(D.filter(e=>e.type===`tool_use`).map(e=>e.id)),t=new Set(S.filter(e=>e.type===`tool_result`).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error(`ids of tool_result blocks and tool_use blocks from previous message do not match`)}}return this.requestStream({method:`sampling/createMessage`,params:e},CreateMessageResultSchema,t)}elicitInputStream(e,t){let S=this._server.getClientCapabilities(),w=e.mode??`form`;switch(w){case`url`:if(!S?.elicitation?.url)throw Error(`Client does not support url elicitation.`);break;case`form`:if(!S?.elicitation?.form)throw Error(`Client does not support form elicitation.`);break}let E=w===`form`&&e.mode===void 0?{...e,mode:`form`}:e;return this.requestStream({method:`elicitation/create`,params:E},ElicitResultSchema,t)}async getTask(e,t){return this._server.getTask({taskId:e},t)}async getTaskResult(e,t,S){return this._server.getTaskResult({taskId:e},t,S)}async listTasks(e,t){return this._server.listTasks(e?{cursor:e}:void 0,t)}async cancelTask(e,t){return this._server.cancelTask({taskId:e},t)}};function assertToolsCallTaskCapability(e,t,S){if(!e)throw Error(`${S} does not support task creation (required for ${t})`);switch(t){case`tools/call`:if(!e.tools?.call)throw Error(`${S} does not support task creation for tools/call (required for ${t})`);break;default:break}}function assertClientRequestTaskCapability(e,t,S){if(!e)throw Error(`${S} does not support task creation (required for ${t})`);switch(t){case`sampling/createMessage`:if(!e.sampling?.createMessage)throw Error(`${S} does not support task creation for sampling/createMessage (required for ${t})`);break;case`elicitation/create`:if(!e.elicitation?.create)throw Error(`${S} does not support task creation for elicitation/create (required for ${t})`);break;default:break}}var Server=class extends Protocol{constructor(e,t){super(t),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(LoggingLevelSchema.options.map((e,t)=>[e,t])),this.isMessageIgnored=(e,t)=>{let S=this._loggingLevels.get(t);return S?this.LOG_LEVEL_SEVERITY.get(e)<this.LOG_LEVEL_SEVERITY.get(S):!1},this._capabilities=t?.capabilities??{},this._instructions=t?.instructions,this._jsonSchemaValidator=t?.jsonSchemaValidator??new AjvJsonSchemaValidator,this.setRequestHandler(InitializeRequestSchema,e=>this._oninitialize(e)),this.setNotificationHandler(InitializedNotificationSchema,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(SetLevelRequestSchema,async(e,t)=>{let S=t.sessionId||t.requestInfo?.headers[`mcp-session-id`]||void 0,{level:w}=e.params,E=LoggingLevelSchema.safeParse(w);return E.success&&this._loggingLevels.set(S,E.data),{}})}get experimental(){return this._experimental||={tasks:new ExperimentalServerTasks(this)},this._experimental}registerCapabilities(e){if(this.transport)throw Error(`Cannot register capabilities after connecting to transport`);this._capabilities=mergeCapabilities(this._capabilities,e)}setRequestHandler(e,t){let S=getObjectShape(e)?.method;if(!S)throw Error(`Schema is missing a method literal`);let w;if(isZ4Schema(S)){let e=S;w=e._zod?.def?.value??e.value}else{let e=S;w=e._def?.value??e.value}if(typeof w!=`string`)throw Error(`Schema method literal must be a string`);return w===`tools/call`?super.setRequestHandler(e,async(e,S)=>{let w=safeParse(CallToolRequestSchema,e);if(!w.success){let e=w.error instanceof Error?w.error.message:String(w.error);throw new McpError(ErrorCode.InvalidParams,`Invalid tools/call request: ${e}`)}let{params:E}=w.data,D=await Promise.resolve(t(e,S));if(E.task){let e=safeParse(CreateTaskResultSchema,D);if(!e.success){let t=e.error instanceof Error?e.error.message:String(e.error);throw new McpError(ErrorCode.InvalidParams,`Invalid task creation result: ${t}`)}return e.data}let O=safeParse(CallToolResultSchema,D);if(!O.success){let e=O.error instanceof Error?O.error.message:String(O.error);throw new McpError(ErrorCode.InvalidParams,`Invalid tools/call result: ${e}`)}return O.data}):super.setRequestHandler(e,t)}assertCapabilityForMethod(e){switch(e){case`sampling/createMessage`:if(!this._clientCapabilities?.sampling)throw Error(`Client does not support sampling (required for ${e})`);break;case`elicitation/create`:if(!this._clientCapabilities?.elicitation)throw Error(`Client does not support elicitation (required for ${e})`);break;case`roots/list`:if(!this._clientCapabilities?.roots)throw Error(`Client does not support listing roots (required for ${e})`);break;case`ping`:break}}assertNotificationCapability(e){switch(e){case`notifications/message`:if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case`notifications/resources/updated`:case`notifications/resources/list_changed`:if(!this._capabilities.resources)throw Error(`Server does not support notifying about resources (required for ${e})`);break;case`notifications/tools/list_changed`:if(!this._capabilities.tools)throw Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case`notifications/prompts/list_changed`:if(!this._capabilities.prompts)throw Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case`notifications/elicitation/complete`:if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for ${e})`);break;case`notifications/cancelled`:break;case`notifications/progress`:break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case`completion/complete`:if(!this._capabilities.completions)throw Error(`Server does not support completions (required for ${e})`);break;case`logging/setLevel`:if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case`prompts/get`:case`prompts/list`:if(!this._capabilities.prompts)throw Error(`Server does not support prompts (required for ${e})`);break;case`resources/list`:case`resources/templates/list`:case`resources/read`:if(!this._capabilities.resources)throw Error(`Server does not support resources (required for ${e})`);break;case`tools/call`:case`tools/list`:if(!this._capabilities.tools)throw Error(`Server does not support tools (required for ${e})`);break;case`tasks/get`:case`tasks/list`:case`tasks/result`:case`tasks/cancel`:if(!this._capabilities.tasks)throw Error(`Server does not support tasks capability (required for ${e})`);break;case`ping`:case`initialize`:break}}assertTaskCapability(e){assertClientRequestTaskCapability(this._clientCapabilities?.tasks?.requests,e,`Client`)}assertTaskHandlerCapability(e){this._capabilities&&assertToolsCallTaskCapability(this._capabilities.tasks?.requests,e,`Server`)}async _oninitialize(e){let t=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:SUPPORTED_PROTOCOL_VERSIONS.includes(t)?t:LATEST_PROTOCOL_VERSION,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:`ping`},EmptyResultSchema)}async createMessage(e,t){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw Error(`Client does not support sampling tools capability.`);if(e.messages.length>0){let t=e.messages[e.messages.length-1],S=Array.isArray(t.content)?t.content:[t.content],w=S.some(e=>e.type===`tool_result`),E=e.messages.length>1?e.messages[e.messages.length-2]:void 0,D=E?Array.isArray(E.content)?E.content:[E.content]:[],O=D.some(e=>e.type===`tool_use`);if(w){if(S.some(e=>e.type!==`tool_result`))throw Error(`The last message must contain only tool_result content if any is present`);if(!O)throw Error(`tool_result blocks are not matching any tool_use from the previous message`)}if(O){let e=new Set(D.filter(e=>e.type===`tool_use`).map(e=>e.id)),t=new Set(S.filter(e=>e.type===`tool_result`).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error(`ids of tool_result blocks and tool_use blocks from previous message do not match`)}}return e.tools?this.request({method:`sampling/createMessage`,params:e},CreateMessageResultWithToolsSchema,t):this.request({method:`sampling/createMessage`,params:e},CreateMessageResultSchema,t)}async elicitInput(e,t){switch(e.mode??`form`){case`url`:{if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support url elicitation.`);let S=e;return this.request({method:`elicitation/create`,params:S},ElicitResultSchema,t)}case`form`:{if(!this._clientCapabilities?.elicitation?.form)throw Error(`Client does not support form elicitation.`);let S=e.mode===`form`?e:{...e,mode:`form`},w=await this.request({method:`elicitation/create`,params:S},ElicitResultSchema,t);if(w.action===`accept`&&w.content&&S.requestedSchema)try{let e=this._jsonSchemaValidator.getValidator(S.requestedSchema)(w.content);if(!e.valid)throw new McpError(ErrorCode.InvalidParams,`Elicitation response content does not match requested schema: ${e.errorMessage}`)}catch(e){throw e instanceof McpError?e:new McpError(ErrorCode.InternalError,`Error validating elicitation response: ${e instanceof Error?e.message:String(e)}`)}return w}}}createElicitationCompletionNotifier(e,t){if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for notifications/elicitation/complete)`);return()=>this.notification({method:`notifications/elicitation/complete`,params:{elicitationId:e}},t)}async listRoots(e,t){return this.request({method:`roots/list`,params:e},ListRootsResultSchema,t)}async sendLoggingMessage(e,t){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,t))return this.notification({method:`notifications/message`,params:e})}async sendResourceUpdated(e){return this.notification({method:`notifications/resources/updated`,params:e})}async sendResourceListChanged(){return this.notification({method:`notifications/resources/list_changed`})}async sendToolListChanged(){return this.notification({method:`notifications/tools/list_changed`})}async sendPromptListChanged(){return this.notification({method:`notifications/prompts/list_changed`})}};const COMPLETABLE_SYMBOL=Symbol.for(`mcp.completable`);function isCompletable(e){return!!e&&typeof e==`object`&&COMPLETABLE_SYMBOL in e}function getCompleter(e){return e[COMPLETABLE_SYMBOL]?.complete}var McpZodTypeKind;(function(e){e.Completable=`McpCompletable`})(McpZodTypeKind||={});const TOOL_NAME_REGEX=/^[A-Za-z0-9._-]{1,128}$/;function validateToolName(e){let t=[];if(e.length===0)return{isValid:!1,warnings:[`Tool name cannot be empty`]};if(e.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${e.length})`]};if(e.includes(` `)&&t.push(`Tool name contains spaces, which may cause parsing issues`),e.includes(`,`)&&t.push(`Tool name contains commas, which may cause parsing issues`),(e.startsWith(`-`)||e.endsWith(`-`))&&t.push(`Tool name starts or ends with a dash, which may cause parsing issues in some contexts`),(e.startsWith(`.`)||e.endsWith(`.`))&&t.push(`Tool name starts or ends with a dot, which may cause parsing issues in some contexts`),!TOOL_NAME_REGEX.test(e)){let S=e.split(``).filter(e=>!/[A-Za-z0-9._-]/.test(e)).filter((e,t,S)=>S.indexOf(e)===t);return t.push(`Tool name contains invalid characters: ${S.map(e=>`"${e}"`).join(`, `)}`,`Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)`),{isValid:!1,warnings:t}}return{isValid:!0,warnings:t}}function issueToolNameWarning(e,t){if(t.length>0){console.warn(`Tool name validation warning for "${e}":`);for(let e of t)console.warn(` - ${e}`);console.warn(`Tool registration will proceed, but this may cause compatibility issues.`),console.warn(`Consider updating the tool name to conform to the MCP tool naming standard.`),console.warn(`See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.`)}}function validateAndWarnToolName(e){let t=validateToolName(e);return issueToolNameWarning(e,t.warnings),t.isValid}var ExperimentalMcpServerTasks=class{constructor(e){this._mcpServer=e}registerToolTask(e,t,S){let w={taskSupport:`required`,...t.execution};if(w.taskSupport===`forbidden`)throw Error(`Cannot register task-based tool '${e}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(e,t.title,t.description,t.inputSchema,t.outputSchema,t.annotations,w,t._meta,S)}},McpServer=class{constructor(e,t){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new Server(e,t)}get experimental(){return this._experimental||={tasks:new ExperimentalMcpServerTasks(this)},this._experimental}async connect(e){return await this.server.connect(e)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(ListToolsRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(CallToolRequestSchema)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(ListToolsRequestSchema,()=>({tools:Object.entries(this._registeredTools).filter(([,e])=>e.enabled).map(([e,t])=>{let S={name:e,title:t.title,description:t.description,inputSchema:(()=>{let e=normalizeObjectSchema(t.inputSchema);return e?toJsonSchemaCompat(e,{strictUnions:!0,pipeStrategy:`input`}):EMPTY_OBJECT_JSON_SCHEMA})(),annotations:t.annotations,execution:t.execution,_meta:t._meta};if(t.outputSchema){let e=normalizeObjectSchema(t.outputSchema);e&&(S.outputSchema=toJsonSchemaCompat(e,{strictUnions:!0,pipeStrategy:`output`}))}return S})})),this.server.setRequestHandler(CallToolRequestSchema,async(e,t)=>{try{let S=this._registeredTools[e.params.name];if(!S)throw new McpError(ErrorCode.InvalidParams,`Tool ${e.params.name} not found`);if(!S.enabled)throw new McpError(ErrorCode.InvalidParams,`Tool ${e.params.name} disabled`);let w=!!e.params.task,E=S.execution?.taskSupport,D=`createTask`in S.handler;if((E===`required`||E===`optional`)&&!D)throw new McpError(ErrorCode.InternalError,`Tool ${e.params.name} has taskSupport '${E}' but was not registered with registerToolTask`);if(E===`required`&&!w)throw new McpError(ErrorCode.MethodNotFound,`Tool ${e.params.name} requires task augmentation (taskSupport: 'required')`);if(E===`optional`&&!w&&D)return await this.handleAutomaticTaskPolling(S,e,t);let O=await this.validateToolInput(S,e.params.arguments,e.params.name),k=await this.executeToolHandler(S,O,t);return w||await this.validateToolOutput(S,k,e.params.name),k}catch(e){if(e instanceof McpError&&e.code===ErrorCode.UrlElicitationRequired)throw e;return this.createToolError(e instanceof Error?e.message:String(e))}}),!0)}createToolError(e){return{content:[{type:`text`,text:e}],isError:!0}}async validateToolInput(e,t,S){if(!e.inputSchema)return;let w=await safeParseAsync(normalizeObjectSchema(e.inputSchema)??e.inputSchema,t);if(!w.success){let e=getParseErrorMessage(`error`in w?w.error:`Unknown error`);throw new McpError(ErrorCode.InvalidParams,`Input validation error: Invalid arguments for tool ${S}: ${e}`)}return w.data}async validateToolOutput(e,t,S){if(!e.outputSchema||!(`content`in t)||t.isError)return;if(!t.structuredContent)throw new McpError(ErrorCode.InvalidParams,`Output validation error: Tool ${S} has an output schema but no structured content was provided`);let w=await safeParseAsync(normalizeObjectSchema(e.outputSchema),t.structuredContent);if(!w.success){let e=getParseErrorMessage(`error`in w?w.error:`Unknown error`);throw new McpError(ErrorCode.InvalidParams,`Output validation error: Invalid structured content for tool ${S}: ${e}`)}}async executeToolHandler(e,t,S){let w=e.handler;if(`createTask`in w){if(!S.taskStore)throw Error(`No task store provided.`);let E={...S,taskStore:S.taskStore};if(e.inputSchema){let e=w;return await Promise.resolve(e.createTask(t,E))}else{let e=w;return await Promise.resolve(e.createTask(E))}}if(e.inputSchema){let e=w;return await Promise.resolve(e(t,S))}else{let e=w;return await Promise.resolve(e(S))}}async handleAutomaticTaskPolling(e,t,S){if(!S.taskStore)throw Error(`No task store provided for task-capable tool.`);let w=await this.validateToolInput(e,t.params.arguments,t.params.name),E=e.handler,D={...S,taskStore:S.taskStore},O=w?await Promise.resolve(E.createTask(w,D)):await Promise.resolve(E.createTask(D)),k=O.task.taskId,j=O.task,F=j.pollInterval??5e3;for(;j.status!==`completed`&&j.status!==`failed`&&j.status!==`cancelled`;){await new Promise(e=>setTimeout(e,F));let e=await S.taskStore.getTask(k);if(!e)throw new McpError(ErrorCode.InternalError,`Task ${k} not found during polling`);j=e}return await S.taskStore.getTaskResult(k)}setCompletionRequestHandler(){this._completionHandlerInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(CompleteRequestSchema)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(CompleteRequestSchema,async e=>{switch(e.params.ref.type){case`ref/prompt`:return assertCompleteRequestPrompt(e),this.handlePromptCompletion(e,e.params.ref);case`ref/resource`:return assertCompleteRequestResourceTemplate(e),this.handleResourceCompletion(e,e.params.ref);default:throw new McpError(ErrorCode.InvalidParams,`Invalid completion reference: ${e.params.ref}`)}}),!0)}async handlePromptCompletion(e,t){let S=this._registeredPrompts[t.name];if(!S)throw new McpError(ErrorCode.InvalidParams,`Prompt ${t.name} not found`);if(!S.enabled)throw new McpError(ErrorCode.InvalidParams,`Prompt ${t.name} disabled`);if(!S.argsSchema)return EMPTY_COMPLETION_RESULT;let w=getObjectShape(S.argsSchema)?.[e.params.argument.name];if(!isCompletable(w))return EMPTY_COMPLETION_RESULT;let E=getCompleter(w);return E?createCompletionResult(await E(e.params.argument.value,e.params.context)):EMPTY_COMPLETION_RESULT}async handleResourceCompletion(e,t){let S=Object.values(this._registeredResourceTemplates).find(e=>e.resourceTemplate.uriTemplate.toString()===t.uri);if(!S){if(this._registeredResources[t.uri])return EMPTY_COMPLETION_RESULT;throw new McpError(ErrorCode.InvalidParams,`Resource template ${e.params.ref.uri} not found`)}let w=S.resourceTemplate.completeCallback(e.params.argument.name);return w?createCompletionResult(await w(e.params.argument.value,e.params.context)):EMPTY_COMPLETION_RESULT}setResourceRequestHandlers(){this._resourceHandlersInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(ListResourcesRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(ListResourceTemplatesRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(ReadResourceRequestSchema)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(ListResourcesRequestSchema,async(e,t)=>{let S=Object.entries(this._registeredResources).filter(([e,t])=>t.enabled).map(([e,t])=>({uri:e,name:t.name,...t.metadata})),w=[];for(let e of Object.values(this._registeredResourceTemplates)){if(!e.resourceTemplate.listCallback)continue;let S=await e.resourceTemplate.listCallback(t);for(let t of S.resources)w.push({...e.metadata,...t})}return{resources:[...S,...w]}}),this.server.setRequestHandler(ListResourceTemplatesRequestSchema,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([e,t])=>({name:e,uriTemplate:t.resourceTemplate.uriTemplate.toString(),...t.metadata}))})),this.server.setRequestHandler(ReadResourceRequestSchema,async(e,t)=>{let S=new URL(e.params.uri),w=this._registeredResources[S.toString()];if(w){if(!w.enabled)throw new McpError(ErrorCode.InvalidParams,`Resource ${S} disabled`);return w.readCallback(S,t)}for(let e of Object.values(this._registeredResourceTemplates)){let w=e.resourceTemplate.uriTemplate.match(S.toString());if(w)return e.readCallback(S,w,t)}throw new McpError(ErrorCode.InvalidParams,`Resource ${S} not found`)}),!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(ListPromptsRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(GetPromptRequestSchema)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(ListPromptsRequestSchema,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,e])=>e.enabled).map(([e,t])=>({name:e,title:t.title,description:t.description,arguments:t.argsSchema?promptArgumentsFromSchema(t.argsSchema):void 0}))})),this.server.setRequestHandler(GetPromptRequestSchema,async(e,t)=>{let S=this._registeredPrompts[e.params.name];if(!S)throw new McpError(ErrorCode.InvalidParams,`Prompt ${e.params.name} not found`);if(!S.enabled)throw new McpError(ErrorCode.InvalidParams,`Prompt ${e.params.name} disabled`);if(S.argsSchema){let w=await safeParseAsync(normalizeObjectSchema(S.argsSchema),e.params.arguments);if(!w.success){let t=getParseErrorMessage(`error`in w?w.error:`Unknown error`);throw new McpError(ErrorCode.InvalidParams,`Invalid arguments for prompt ${e.params.name}: ${t}`)}let E=w.data,D=S.callback;return await Promise.resolve(D(E,t))}else{let e=S.callback;return await Promise.resolve(e(t))}}),!0)}resource(e,t,...S){let w;typeof S[0]==`object`&&(w=S.shift());let E=S[0];if(typeof t==`string`){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let S=this._createRegisteredResource(e,void 0,t,w,E);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),S}else{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let S=this._createRegisteredResourceTemplate(e,void 0,t,w,E);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),S}}registerResource(e,t,S,w){if(typeof t==`string`){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let E=this._createRegisteredResource(e,S.title,t,S,w);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),E}else{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let E=this._createRegisteredResourceTemplate(e,S.title,t,S,w);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),E}}_createRegisteredResource(e,t,S,w,E){let D={name:e,title:t,metadata:w,readCallback:E,enabled:!0,disable:()=>D.update({enabled:!1}),enable:()=>D.update({enabled:!0}),remove:()=>D.update({uri:null}),update:e=>{e.uri!==void 0&&e.uri!==S&&(delete this._registeredResources[S],e.uri&&(this._registeredResources[e.uri]=D)),e.name!==void 0&&(D.name=e.name),e.title!==void 0&&(D.title=e.title),e.metadata!==void 0&&(D.metadata=e.metadata),e.callback!==void 0&&(D.readCallback=e.callback),e.enabled!==void 0&&(D.enabled=e.enabled),this.sendResourceListChanged()}};return this._registeredResources[S]=D,D}_createRegisteredResourceTemplate(e,t,S,w,E){let D={resourceTemplate:S,title:t,metadata:w,readCallback:E,enabled:!0,disable:()=>D.update({enabled:!1}),enable:()=>D.update({enabled:!0}),remove:()=>D.update({name:null}),update:t=>{t.name!==void 0&&t.name!==e&&(delete this._registeredResourceTemplates[e],t.name&&(this._registeredResourceTemplates[t.name]=D)),t.title!==void 0&&(D.title=t.title),t.template!==void 0&&(D.resourceTemplate=t.template),t.metadata!==void 0&&(D.metadata=t.metadata),t.callback!==void 0&&(D.readCallback=t.callback),t.enabled!==void 0&&(D.enabled=t.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[e]=D;let O=S.uriTemplate.variableNames;return Array.isArray(O)&&O.some(e=>!!S.completeCallback(e))&&this.setCompletionRequestHandler(),D}_createRegisteredPrompt(e,t,S,w,E){let D={title:t,description:S,argsSchema:w===void 0?void 0:objectFromShape(w),callback:E,enabled:!0,disable:()=>D.update({enabled:!1}),enable:()=>D.update({enabled:!0}),remove:()=>D.update({name:null}),update:t=>{t.name!==void 0&&t.name!==e&&(delete this._registeredPrompts[e],t.name&&(this._registeredPrompts[t.name]=D)),t.title!==void 0&&(D.title=t.title),t.description!==void 0&&(D.description=t.description),t.argsSchema!==void 0&&(D.argsSchema=objectFromShape(t.argsSchema)),t.callback!==void 0&&(D.callback=t.callback),t.enabled!==void 0&&(D.enabled=t.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[e]=D,w&&Object.values(w).some(e=>isCompletable(e instanceof ZodOptional$1?e._def?.innerType:e))&&this.setCompletionRequestHandler(),D}_createRegisteredTool(e,t,S,w,E,D,O,k,j){validateAndWarnToolName(e);let F={title:t,description:S,inputSchema:getZodSchemaObject(w),outputSchema:getZodSchemaObject(E),annotations:D,execution:O,_meta:k,handler:j,enabled:!0,disable:()=>F.update({enabled:!1}),enable:()=>F.update({enabled:!0}),remove:()=>F.update({name:null}),update:t=>{t.name!==void 0&&t.name!==e&&(typeof t.name==`string`&&validateAndWarnToolName(t.name),delete this._registeredTools[e],t.name&&(this._registeredTools[t.name]=F)),t.title!==void 0&&(F.title=t.title),t.description!==void 0&&(F.description=t.description),t.paramsSchema!==void 0&&(F.inputSchema=objectFromShape(t.paramsSchema)),t.outputSchema!==void 0&&(F.outputSchema=objectFromShape(t.outputSchema)),t.callback!==void 0&&(F.handler=t.callback),t.annotations!==void 0&&(F.annotations=t.annotations),t._meta!==void 0&&(F._meta=t._meta),t.enabled!==void 0&&(F.enabled=t.enabled),this.sendToolListChanged()}};return this._registeredTools[e]=F,this.setToolRequestHandlers(),this.sendToolListChanged(),F}tool(e,...t){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let S,w,E,D;if(typeof t[0]==`string`&&(S=t.shift()),t.length>1){let S=t[0];if(isZodRawShapeCompat(S))w=t.shift(),t.length>1&&typeof t[0]==`object`&&t[0]!==null&&!isZodRawShapeCompat(t[0])&&(D=t.shift());else if(typeof S==`object`&&S){if(Object.values(S).some(e=>typeof e==`object`&&!!e))throw Error(`Tool ${e} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);D=t.shift()}}let O=t[0];return this._createRegisteredTool(e,void 0,S,w,void 0,D,{taskSupport:`forbidden`},void 0,O)}registerTool(e,t,S){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let{title:w,description:E,inputSchema:D,outputSchema:O,annotations:k,_meta:j}=t;return this._createRegisteredTool(e,w,E,D,O,k,{taskSupport:`forbidden`},j,S)}prompt(e,...t){if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);let S;typeof t[0]==`string`&&(S=t.shift());let w;t.length>1&&(w=t.shift());let E=t[0],D=this._createRegisteredPrompt(e,void 0,S,w,E);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),D}registerPrompt(e,t,S){if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);let{title:w,description:E,argsSchema:D}=t,O=this._createRegisteredPrompt(e,w,E,D,S);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),O}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(e,t){return this.server.sendLoggingMessage(e,t)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}};const EMPTY_OBJECT_JSON_SCHEMA={type:`object`,properties:{}};function isZodTypeLike(e){return typeof e==`object`&&!!e&&`parse`in e&&typeof e.parse==`function`&&`safeParse`in e&&typeof e.safeParse==`function`}function isZodSchemaInstance(e){return`_def`in e||`_zod`in e||isZodTypeLike(e)}function isZodRawShapeCompat(e){return typeof e!=`object`||!e||isZodSchemaInstance(e)?!1:Object.keys(e).length===0?!0:Object.values(e).some(isZodTypeLike)}function getZodSchemaObject(e){if(e){if(isZodRawShapeCompat(e))return objectFromShape(e);if(!isZodSchemaInstance(e))throw Error(`inputSchema must be a Zod schema or raw shape, received an unrecognized object`);return e}}function promptArgumentsFromSchema(e){let t=getObjectShape(e);return t?Object.entries(t).map(([e,t])=>({name:e,description:getSchemaDescription(t),required:!isSchemaOptional(t)})):[]}function getMethodValue(e){let t=getObjectShape(e)?.method;if(!t)throw Error(`Schema is missing a method literal`);let S=getLiteralValue(t);if(typeof S==`string`)return S;throw Error(`Schema method literal must be a string`)}function createCompletionResult(e){return{completion:{values:e.slice(0,100),total:e.length,hasMore:e.length>100}}}const EMPTY_COMPLETION_RESULT={completion:{values:[],hasMore:!1}};var RequestError=class extends Error{constructor(e,t){super(e,t),this.name=`RequestError`}},toRequestError=e=>e instanceof RequestError?e:new RequestError(e.message,{cause:e}),GlobalRequest=global.Request,Request$1=class extends GlobalRequest{constructor(e,t){typeof e==`object`&&getRequestCache in e&&(e=e[getRequestCache]()),t?.body?.getReader!==void 0&&(t.duplex??=`half`),super(e,t)}},newHeadersFromIncoming=e=>{let t=[],S=e.rawHeaders;for(let e=0;e<S.length;e+=2){let{[e]:w,[e+1]:E}=S;w.charCodeAt(0)!==58&&t.push([w,E])}return new Headers(t)},wrapBodyStream=Symbol(`wrapBodyStream`),newRequestFromIncoming=(e,t,S,w,E)=>{let D={method:e,headers:S,signal:E.signal};if(e===`TRACE`){D.method=`GET`;let e=new Request$1(t,D);return Object.defineProperty(e,`method`,{get(){return`TRACE`}}),e}if(!(e===`GET`||e===`HEAD`))if(`rawBody`in w&&w.rawBody instanceof Buffer)D.body=new ReadableStream({start(e){e.enqueue(w.rawBody),e.close()}});else if(w[wrapBodyStream]){let e;D.body=new ReadableStream({async pull(t){try{e||=Readable.toWeb(w).getReader();let{done:S,value:E}=await e.read();S?t.close():t.enqueue(E)}catch(e){t.error(e)}}})}else D.body=Readable.toWeb(w);return new Request$1(t,D)},getRequestCache=Symbol(`getRequestCache`),requestCache=Symbol(`requestCache`),incomingKey=Symbol(`incomingKey`),urlKey=Symbol(`urlKey`),headersKey=Symbol(`headersKey`),abortControllerKey=Symbol(`abortControllerKey`),requestPrototype={get method(){return this[incomingKey].method||`GET`},get url(){return this[urlKey]},get headers(){return this[headersKey]||=newHeadersFromIncoming(this[incomingKey])},[Symbol(`getAbortController`)](){return this[getRequestCache](),this[abortControllerKey]},[getRequestCache](){return this[abortControllerKey]||=new AbortController,this[requestCache]||=newRequestFromIncoming(this.method,this[urlKey],this.headers,this[incomingKey],this[abortControllerKey])}};[`body`,`bodyUsed`,`cache`,`credentials`,`destination`,`integrity`,`mode`,`redirect`,`referrer`,`referrerPolicy`,`signal`,`keepalive`].forEach(e=>{Object.defineProperty(requestPrototype,e,{get(){return this[getRequestCache]()[e]}})}),[`arrayBuffer`,`blob`,`clone`,`formData`,`json`,`text`].forEach(e=>{Object.defineProperty(requestPrototype,e,{value:function(){return this[getRequestCache]()[e]()}})}),Object.setPrototypeOf(requestPrototype,Request$1.prototype);var newRequest=(e,t)=>{let S=Object.create(requestPrototype);S[incomingKey]=e;let w=e.url||``;if(w[0]!==`/`&&(w.startsWith(`http://`)||w.startsWith(`https://`))){if(e instanceof Http2ServerRequest)throw new RequestError(`Absolute URL for :path is not allowed in HTTP/2`);try{S[urlKey]=new URL(w).href}catch(e){throw new RequestError(`Invalid absolute URL`,{cause:e})}return S}let E=(e instanceof Http2ServerRequest?e.authority:e.headers.host)||t;if(!E)throw new RequestError(`Missing host header`);let D;if(e instanceof Http2ServerRequest){if(D=e.scheme,!(D===`http`||D===`https`))throw new RequestError(`Unsupported scheme`)}else D=e.socket&&e.socket.encrypted?`https`:`http`;let O=new URL(`${D}://${E}${w}`);if(O.hostname.length!==E.length&&O.hostname!==E.replace(/:\d+$/,``))throw new RequestError(`Invalid host header`);return S[urlKey]=O.href,S},responseCache=Symbol(`responseCache`),getResponseCache=Symbol(`getResponseCache`),cacheKey=Symbol(`cache`),GlobalResponse=global.Response,Response2=class e{#e;#t;[getResponseCache](){return delete this[cacheKey],this[responseCache]||=new GlobalResponse(this.#e,this.#t)}constructor(t,S){let w;if(this.#e=t,S instanceof e){let e=S[responseCache];if(e){this.#t=e,this[getResponseCache]();return}else this.#t=S.#t,w=new Headers(S.#t.headers)}else this.#t=S;(typeof t==`string`||t?.getReader!==void 0||t instanceof Blob||t instanceof Uint8Array)&&(this[cacheKey]=[S?.status||200,t,w||S?.headers])}get headers(){let e=this[cacheKey];return e?(e[2]instanceof Headers||(e[2]=new Headers(e[2]||{"content-type":`text/plain; charset=UTF-8`})),e[2]):this[getResponseCache]().headers}get status(){return this[cacheKey]?.[0]??this[getResponseCache]().status}get ok(){let e=this.status;return e>=200&&e<300}};[`body`,`bodyUsed`,`redirected`,`statusText`,`trailers`,`type`,`url`].forEach(e=>{Object.defineProperty(Response2.prototype,e,{get(){return this[getResponseCache]()[e]}})}),[`arrayBuffer`,`blob`,`clone`,`formData`,`json`,`text`].forEach(e=>{Object.defineProperty(Response2.prototype,e,{value:function(){return this[getResponseCache]()[e]()}})}),Object.setPrototypeOf(Response2,GlobalResponse),Object.setPrototypeOf(Response2.prototype,GlobalResponse.prototype);async function readWithoutBlocking(e){return Promise.race([e,Promise.resolve().then(()=>Promise.resolve(void 0))])}function writeFromReadableStreamDefaultReader(e,t,S){let w=t=>{e.cancel(t).catch(()=>{})};return t.on(`close`,w),t.on(`error`,w),(S??e.read()).then(O,E),e.closed.finally(()=>{t.off(`close`,w),t.off(`error`,w)});function E(e){e&&t.destroy(e)}function D(){e.read().then(O,E)}function O({done:S,value:w}){try{if(S)t.end();else if(!t.write(w))t.once(`drain`,D);else return e.read().then(O,E)}catch(e){E(e)}}}function writeFromReadableStream(e,t){if(e.locked)throw TypeError(`ReadableStream is locked.`);return t.destroyed?void 0:writeFromReadableStreamDefaultReader(e.getReader(),t)}var buildOutgoingHttpHeaders=e=>{let t={};e instanceof Headers||(e=new Headers(e??void 0));let S=[];for(let[w,E]of e)w===`set-cookie`?S.push(E):t[w]=E;return S.length>0&&(t[`set-cookie`]=S),t[`content-type`]??=`text/plain; charset=UTF-8`,t},X_ALREADY_SENT=`x-hono-already-sent`;global.crypto===void 0&&(global.crypto=crypto$2);var outgoingEnded=Symbol(`outgoingEnded`),incomingDraining=Symbol(`incomingDraining`),DRAIN_TIMEOUT_MS=500,MAX_DRAIN_BYTES=64*1024*1024,drainIncoming=e=>{let t=e;if(e.destroyed||t[incomingDraining])return;if(t[incomingDraining]=!0,e instanceof Http2ServerRequest){try{e.stream?.close?.(constants$1.NGHTTP2_NO_ERROR)}catch{}return}let S=0,w=()=>{clearTimeout(D),e.off(`data`,O),e.off(`end`,w),e.off(`error`,w)},E=()=>{w();let t=e.socket;t&&!t.destroyed&&t.destroySoon()},D=setTimeout(E,DRAIN_TIMEOUT_MS);D.unref?.();let O=e=>{S+=e.length,S>MAX_DRAIN_BYTES&&E()};e.on(`data`,O),e.on(`end`,w),e.on(`error`,w),e.resume()},handleRequestError=()=>new Response(null,{status:400}),handleFetchError=e=>new Response(null,{status:e instanceof Error&&(e.name===`TimeoutError`||e.constructor.name===`TimeoutError`)?504:500}),handleResponseError=(e,t)=>{let S=e instanceof Error?e:Error(`unknown error`,{cause:e});S.code===`ERR_STREAM_PREMATURE_CLOSE`?console.info(`The user aborted a request.`):(console.error(e),t.headersSent||t.writeHead(500,{"Content-Type":`text/plain`}),t.end(`Error: ${S.message}`),t.destroy(S))},flushHeaders=e=>{`flushHeaders`in e&&e.writable&&e.flushHeaders()},responseViaCache=async(e,t)=>{let[S,w,E]=e[cacheKey],D=!1;if(!E)E={"content-type":`text/plain; charset=UTF-8`};else if(E instanceof Headers)D=E.has(`content-length`),E=buildOutgoingHttpHeaders(E);else if(Array.isArray(E)){let e=new Headers(E);D=e.has(`content-length`),E=buildOutgoingHttpHeaders(e)}else for(let e in E)if(e.length===14&&e.toLowerCase()===`content-length`){D=!0;break}D||(typeof w==`string`?E[`Content-Length`]=Buffer.byteLength(w):w instanceof Uint8Array?E[`Content-Length`]=w.byteLength:w instanceof Blob&&(E[`Content-Length`]=w.size)),t.writeHead(S,E),typeof w==`string`||w instanceof Uint8Array?t.end(w):w instanceof Blob?t.end(new Uint8Array(await w.arrayBuffer())):(flushHeaders(t),await writeFromReadableStream(w,t)?.catch(e=>handleResponseError(e,t))),t[outgoingEnded]?.()},isPromise=e=>typeof e.then==`function`,responseViaResponseObject=async(e,t,S={})=>{if(isPromise(e))if(S.errorHandler)try{e=await e}catch(t){let w=await S.errorHandler(t);if(!w)return;e=w}else e=await e.catch(handleFetchError);if(cacheKey in e)return responseViaCache(e,t);let w=buildOutgoingHttpHeaders(e.headers);if(e.body){let S=e.body.getReader(),E=[],D=!1,O;if(w[`transfer-encoding`]!==`chunked`){let e=2;for(let t=0;t<e;t++){O||=S.read();let w=await readWithoutBlocking(O).catch(e=>{console.error(e),D=!0});if(!w){if(t===1){await new Promise(e=>setTimeout(e)),e=3;continue}break}if(O=void 0,w.value&&E.push(w.value),w.done){D=!0;break}}D&&!(`content-length`in w)&&(w[`content-length`]=E.reduce((e,t)=>e+t.length,0))}t.writeHead(e.status,w),E.forEach(e=>{t.write(e)}),D?t.end():(E.length===0&&flushHeaders(t),await writeFromReadableStreamDefaultReader(S,t,O))}else w[X_ALREADY_SENT]||(t.writeHead(e.status,w),t.end());t[outgoingEnded]?.()},getRequestListener=(e,t={})=>{let S=t.autoCleanupIncoming??!0;return t.overrideGlobalObjects!==!1&&global.Request!==Request$1&&(Object.defineProperty(global,`Request`,{value:Request$1}),Object.defineProperty(global,`Response`,{value:Response2})),async(w,E)=>{let D,O;try{O=newRequest(w,t.hostname);let k=!S||w.method===`GET`||w.method===`HEAD`;if(k||(w[wrapBodyStream]=!0,w.on(`end`,()=>{k=!0}),w instanceof Http2ServerRequest&&(E[outgoingEnded]=()=>{k||setTimeout(()=>{k||setTimeout(()=>{drainIncoming(w)})})}),E.on(`finish`,()=>{k||drainIncoming(w)})),E.on(`close`,()=>{O[abortControllerKey]&&(w.errored?O[abortControllerKey].abort(w.errored.toString()):E.writableFinished||O[abortControllerKey].abort(`Client connection prematurely closed.`)),k||setTimeout(()=>{k||setTimeout(()=>{drainIncoming(w)})})}),D=e(O,{incoming:w,outgoing:E}),cacheKey in D)return responseViaCache(D,E)}catch(e){if(D)return handleResponseError(e,E);if(t.errorHandler){if(D=await t.errorHandler(O?e:toRequestError(e)),!D)return}else D=O?handleFetchError(e):handleRequestError()}try{return await responseViaResponseObject(D,E,t)}catch(e){return handleResponseError(e,E)}}},WebStandardStreamableHTTPServerTransport=class{constructor(e={}){this._started=!1,this._hasHandledRequest=!1,this._streamMapping=new Map,this._requestToStreamMapping=new Map,this._requestResponseMap=new Map,this._initialized=!1,this._enableJsonResponse=!1,this._standaloneSseStreamId=`_GET_stream`,this.sessionIdGenerator=e.sessionIdGenerator,this._enableJsonResponse=e.enableJsonResponse??!1,this._eventStore=e.eventStore,this._onsessioninitialized=e.onsessioninitialized,this._onsessionclosed=e.onsessionclosed,this._allowedHosts=e.allowedHosts,this._allowedOrigins=e.allowedOrigins,this._enableDnsRebindingProtection=e.enableDnsRebindingProtection??!1,this._retryInterval=e.retryInterval}async start(){if(this._started)throw Error(`Transport already started`);this._started=!0}createJsonErrorResponse(e,t,S,w){let E={code:t,message:S};return w?.data!==void 0&&(E.data=w.data),new Response(JSON.stringify({jsonrpc:`2.0`,error:E,id:null}),{status:e,headers:{"Content-Type":`application/json`,...w?.headers}})}validateRequestHeaders(e){if(this._enableDnsRebindingProtection){if(this._allowedHosts&&this._allowedHosts.length>0){let t=e.headers.get(`host`);if(!t||!this._allowedHosts.includes(t)){let e=`Invalid Host header: ${t}`;return this.onerror?.(Error(e)),this.createJsonErrorResponse(403,-32e3,e)}}if(this._allowedOrigins&&this._allowedOrigins.length>0){let t=e.headers.get(`origin`);if(t&&!this._allowedOrigins.includes(t)){let e=`Invalid Origin header: ${t}`;return this.onerror?.(Error(e)),this.createJsonErrorResponse(403,-32e3,e)}}}}async handleRequest(e,t){if(!this.sessionIdGenerator&&this._hasHandledRequest)throw Error(`Stateless transport cannot be reused across requests. Create a new transport per request.`);this._hasHandledRequest=!0;let S=this.validateRequestHeaders(e);if(S)return S;switch(e.method){case`POST`:return this.handlePostRequest(e,t);case`GET`:return this.handleGetRequest(e);case`DELETE`:return this.handleDeleteRequest(e);default:return this.handleUnsupportedRequest()}}async writePrimingEvent(e,t,S,w){if(!this._eventStore||w<`2025-11-25`)return;let E=await this._eventStore.storeEvent(S,{}),D=`id: ${E}\ndata: \n\n`;this._retryInterval!==void 0&&(D=`id: ${E}\nretry: ${this._retryInterval}\ndata: \n\n`),e.enqueue(t.encode(D))}async handleGetRequest(e){if(!e.headers.get(`accept`)?.includes(`text/event-stream`))return this.onerror?.(Error(`Not Acceptable: Client must accept text/event-stream`)),this.createJsonErrorResponse(406,-32e3,`Not Acceptable: Client must accept text/event-stream`);let t=this.validateSession(e);if(t)return t;let S=this.validateProtocolVersion(e);if(S)return S;if(this._eventStore){let t=e.headers.get(`last-event-id`);if(t)return this.replayEvents(t)}if(this._streamMapping.get(this._standaloneSseStreamId)!==void 0)return this.onerror?.(Error(`Conflict: Only one SSE stream is allowed per session`)),this.createJsonErrorResponse(409,-32e3,`Conflict: Only one SSE stream is allowed per session`);let w=new TextEncoder,E,D=new ReadableStream({start:e=>{E=e},cancel:()=>{this._streamMapping.delete(this._standaloneSseStreamId)}}),O={"Content-Type":`text/event-stream`,"Cache-Control":`no-cache, no-transform`,Connection:`keep-alive`};return this.sessionId!==void 0&&(O[`mcp-session-id`]=this.sessionId),this._streamMapping.set(this._standaloneSseStreamId,{controller:E,encoder:w,cleanup:()=>{this._streamMapping.delete(this._standaloneSseStreamId);try{E.close()}catch{}}}),new Response(D,{headers:O})}async replayEvents(e){if(!this._eventStore)return this.onerror?.(Error(`Event store not configured`)),this.createJsonErrorResponse(400,-32e3,`Event store not configured`);try{let t;if(this._eventStore.getStreamIdForEventId){if(t=await this._eventStore.getStreamIdForEventId(e),!t)return this.onerror?.(Error(`Invalid event ID format`)),this.createJsonErrorResponse(400,-32e3,`Invalid event ID format`);if(this._streamMapping.get(t)!==void 0)return this.onerror?.(Error(`Conflict: Stream already has an active connection`)),this.createJsonErrorResponse(409,-32e3,`Conflict: Stream already has an active connection`)}let S={"Content-Type":`text/event-stream`,"Cache-Control":`no-cache, no-transform`,Connection:`keep-alive`};this.sessionId!==void 0&&(S[`mcp-session-id`]=this.sessionId);let w=new TextEncoder,E,D=new ReadableStream({start:e=>{E=e},cancel:()=>{}}),O=await this._eventStore.replayEventsAfter(e,{send:async(e,t)=>{if(!this.writeSSEEvent(E,w,t,e)){this.onerror?.(Error(`Failed replay events`));try{E.close()}catch{}}}});return this._streamMapping.set(O,{controller:E,encoder:w,cleanup:()=>{this._streamMapping.delete(O);try{E.close()}catch{}}}),new Response(D,{headers:S})}catch(e){return this.onerror?.(e),this.createJsonErrorResponse(500,-32e3,`Error replaying events`)}}writeSSEEvent(e,t,S,w){try{let E=`event: message
474
+ deps: ${w}}`};let E={keyword:`dependencies`,type:`object`,schemaType:`object`,error:e.error,code(e){let[t,S]=D(e);O(e,t),k(e,S)}};function D({schema:e}){let t={},S={};for(let w in e){if(w===`__proto__`)continue;let E=Array.isArray(e[w])?t:S;E[w]=e[w]}return[t,S]}function O(e,S=e.schema){let{gen:E,data:D,it:O}=e;if(Object.keys(S).length===0)return;let k=E.let(`missing`);for(let j in S){let F=S[j];if(F.length===0)continue;let L=(0,w.propertyInData)(E,D,j,O.opts.ownProperties);e.setParams({property:j,depsCount:F.length,deps:F.join(`, `)}),O.allErrors?E.if(L,()=>{for(let t of F)(0,w.checkReportMissingProp)(e,t)}):(E.if((0,t._)`${L} && (${(0,w.checkMissingProp)(e,F,k)})`),(0,w.reportMissingProp)(e,k),E.else())}}e.validatePropertyDeps=O;function k(e,t=e.schema){let{gen:E,data:D,keyword:O,it:k}=e,j=E.name(`valid`);for(let F in t)(0,S.alwaysValidSchema)(k,t[F])||(E.if((0,w.propertyInData)(E,D,F,k.opts.ownProperties),()=>{let t=e.subschema({keyword:O,schemaProp:F},j);e.mergeValidEvaluated(t,j)},()=>E.var(j,!0)),e.ok(j))}e.validateSchemaDeps=k,e.default=E})),require_propertyNames=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_util();e.default={keyword:`propertyNames`,type:`object`,schemaType:[`object`,`boolean`],error:{message:`property name must be valid`,params:({params:e})=>(0,t._)`{propertyName: ${e.propertyName}}`},code(e){let{gen:w,schema:E,data:D,it:O}=e;if((0,S.alwaysValidSchema)(O,E))return;let k=w.name(`valid`);w.forIn(`key`,D,S=>{e.setParams({propertyName:S}),e.subschema({keyword:`propertyNames`,data:S,dataTypes:[`string`],propertyName:S,compositeRule:!0},k),w.if((0,t.not)(k),()=>{e.error(!0),O.allErrors||w.break()})}),e.ok(k)}}})),require_additionalProperties=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_code(),S=require_codegen(),w=require_names(),E=require_util();e.default={keyword:`additionalProperties`,type:[`object`],schemaType:[`boolean`,`object`],allowUndefined:!0,trackErrors:!0,error:{message:`must NOT have additional properties`,params:({params:e})=>(0,S._)`{additionalProperty: ${e.additionalProperty}}`},code(e){let{gen:D,schema:O,parentSchema:k,data:j,errsCount:F,it:L}=e;if(!F)throw Error(`ajv implementation error`);let{allErrors:B,opts:H}=L;if(L.props=!0,H.removeAdditional!==`all`&&(0,E.alwaysValidSchema)(L,O))return;let q=(0,t.allSchemaProperties)(k.properties),J=(0,t.allSchemaProperties)(k.patternProperties);Y(),e.ok((0,S._)`${F} === ${w.default.errors}`);function Y(){D.forIn(`key`,j,e=>{!q.length&&!J.length?ne(e):D.if(ee(e),()=>ne(e))})}function ee(w){let O;if(q.length>8){let e=(0,E.schemaRefOrVal)(L,k.properties,`properties`);O=(0,t.isOwnProperty)(D,e,w)}else O=q.length?(0,S.or)(...q.map(e=>(0,S._)`${w} === ${e}`)):S.nil;return J.length&&(O=(0,S.or)(O,...J.map(E=>(0,S._)`${(0,t.usePattern)(e,E)}.test(${w})`))),(0,S.not)(O)}function te(e){D.code((0,S._)`delete ${j}[${e}]`)}function ne(t){if(H.removeAdditional===`all`||H.removeAdditional&&O===!1){te(t);return}if(O===!1){e.setParams({additionalProperty:t}),e.error(),B||D.break();return}if(typeof O==`object`&&!(0,E.alwaysValidSchema)(L,O)){let w=D.name(`valid`);H.removeAdditional===`failing`?(ae(t,w,!1),D.if((0,S.not)(w),()=>{e.reset(),te(t)})):(ae(t,w),B||D.if((0,S.not)(w),()=>D.break()))}}function ae(t,S,w){let D={keyword:`additionalProperties`,dataProp:t,dataPropType:E.Type.Str};w===!1&&Object.assign(D,{compositeRule:!0,createErrors:!1,allErrors:!1}),e.subschema(D,S)}}}})),require_properties=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_validate(),S=require_code(),w=require_util(),E=require_additionalProperties();e.default={keyword:`properties`,type:`object`,schemaType:`object`,code(e){let{gen:D,schema:O,parentSchema:k,data:j,it:F}=e;F.opts.removeAdditional===`all`&&k.additionalProperties===void 0&&E.default.code(new t.KeywordCxt(F,E.default,`additionalProperties`));let L=(0,S.allSchemaProperties)(O);for(let e of L)F.definedProperties.add(e);F.opts.unevaluated&&L.length&&F.props!==!0&&(F.props=w.mergeEvaluated.props(D,(0,w.toHash)(L),F.props));let B=L.filter(e=>!(0,w.alwaysValidSchema)(F,O[e]));if(B.length===0)return;let H=D.name(`valid`);for(let t of B)q(t)?J(t):(D.if((0,S.propertyInData)(D,j,t,F.opts.ownProperties)),J(t),F.allErrors||D.else().var(H,!0),D.endIf()),e.it.definedProperties.add(t),e.ok(H);function q(e){return F.opts.useDefaults&&!F.compositeRule&&O[e].default!==void 0}function J(t){e.subschema({keyword:`properties`,schemaProp:t,dataProp:t},H)}}}})),require_patternProperties=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_code(),S=require_codegen(),w=require_util(),E=require_util();e.default={keyword:`patternProperties`,type:`object`,schemaType:`object`,code(e){let{gen:D,schema:O,data:k,parentSchema:j,it:F}=e,{opts:L}=F,B=(0,t.allSchemaProperties)(O),H=B.filter(e=>(0,w.alwaysValidSchema)(F,O[e]));if(B.length===0||H.length===B.length&&(!F.opts.unevaluated||F.props===!0))return;let q=L.strictSchema&&!L.allowMatchingProperties&&j.properties,J=D.name(`valid`);F.props!==!0&&!(F.props instanceof S.Name)&&(F.props=(0,E.evaluatedPropsToName)(D,F.props));let{props:Y}=F;ee();function ee(){for(let e of B)q&&te(e),F.allErrors?ne(e):(D.var(J,!0),ne(e),D.if(J))}function te(e){for(let t in q)new RegExp(e).test(t)&&(0,w.checkStrictMode)(F,`property ${t} matches pattern ${e} (use allowMatchingProperties)`)}function ne(w){D.forIn(`key`,k,O=>{D.if((0,S._)`${(0,t.usePattern)(e,w)}.test(${O})`,()=>{let t=H.includes(w);t||e.subschema({keyword:`patternProperties`,schemaProp:w,dataProp:O,dataPropType:E.Type.Str},J),F.opts.unevaluated&&Y!==!0?D.assign((0,S._)`${Y}[${O}]`,!0):!t&&!F.allErrors&&D.if((0,S.not)(J),()=>D.break())})})}}}})),require_not=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_util();e.default={keyword:`not`,schemaType:[`object`,`boolean`],trackErrors:!0,code(e){let{gen:S,schema:w,it:E}=e;if((0,t.alwaysValidSchema)(E,w)){e.fail();return}let D=S.name(`valid`);e.subschema({keyword:`not`,compositeRule:!0,createErrors:!1,allErrors:!1},D),e.failResult(D,()=>e.reset(),()=>e.error())},error:{message:`must NOT be valid`}}})),require_anyOf=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default={keyword:`anyOf`,schemaType:`array`,trackErrors:!0,code:require_code().validateUnion,error:{message:`must match a schema in anyOf`}}})),require_oneOf=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_util();e.default={keyword:`oneOf`,schemaType:`array`,trackErrors:!0,error:{message:`must match exactly one schema in oneOf`,params:({params:e})=>(0,t._)`{passingSchemas: ${e.passing}}`},code(e){let{gen:w,schema:E,parentSchema:D,it:O}=e;if(!Array.isArray(E))throw Error(`ajv implementation error`);if(O.opts.discriminator&&D.discriminator)return;let k=E,j=w.let(`valid`,!1),F=w.let(`passing`,null),L=w.name(`_valid`);e.setParams({passing:F}),w.block(B),e.result(j,()=>e.reset(),()=>e.error(!0));function B(){k.forEach((E,D)=>{let k;(0,S.alwaysValidSchema)(O,E)?w.var(L,!0):k=e.subschema({keyword:`oneOf`,schemaProp:D,compositeRule:!0},L),D>0&&w.if((0,t._)`${L} && ${j}`).assign(j,!1).assign(F,(0,t._)`[${F}, ${D}]`).else(),w.if(L,()=>{w.assign(j,!0),w.assign(F,D),k&&e.mergeEvaluated(k,t.Name)})})}}}})),require_allOf=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_util();e.default={keyword:`allOf`,schemaType:`array`,code(e){let{gen:S,schema:w,it:E}=e;if(!Array.isArray(w))throw Error(`ajv implementation error`);let D=S.name(`valid`);w.forEach((S,w)=>{if((0,t.alwaysValidSchema)(E,S))return;let O=e.subschema({keyword:`allOf`,schemaProp:w},D);e.ok(D),e.mergeEvaluated(O)})}}})),require_if=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_util(),w={keyword:`if`,schemaType:[`object`,`boolean`],trackErrors:!0,error:{message:({params:e})=>(0,t.str)`must match "${e.ifClause}" schema`,params:({params:e})=>(0,t._)`{failingKeyword: ${e.ifClause}}`},code(e){let{gen:w,parentSchema:D,it:O}=e;D.then===void 0&&D.else===void 0&&(0,S.checkStrictMode)(O,`"if" without "then" and "else" is ignored`);let k=E(O,`then`),j=E(O,`else`);if(!k&&!j)return;let F=w.let(`valid`,!0),L=w.name(`_valid`);if(B(),e.reset(),k&&j){let t=w.let(`ifClause`);e.setParams({ifClause:t}),w.if(L,H(`then`,t),H(`else`,t))}else k?w.if(L,H(`then`)):w.if((0,t.not)(L),H(`else`));e.pass(F,()=>e.error(!0));function B(){let t=e.subschema({keyword:`if`,compositeRule:!0,createErrors:!1,allErrors:!1},L);e.mergeEvaluated(t)}function H(S,E){return()=>{let D=e.subschema({keyword:S},L);w.assign(F,L),e.mergeValidEvaluated(D,F),E?w.assign(E,(0,t._)`${S}`):e.setParams({ifClause:S})}}}};function E(e,t){let w=e.schema[t];return w!==void 0&&!(0,S.alwaysValidSchema)(e,w)}e.default=w})),require_thenElse=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_util();e.default={keyword:[`then`,`else`],schemaType:[`object`,`boolean`],code({keyword:e,parentSchema:S,it:w}){S.if===void 0&&(0,t.checkStrictMode)(w,`"${e}" without "if" is ignored`)}}})),require_applicator=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_additionalItems(),S=require_prefixItems(),w=require_items(),E=require_items2020(),D=require_contains(),O=require_dependencies(),k=require_propertyNames(),j=require_additionalProperties(),F=require_properties(),L=require_patternProperties(),B=require_not(),H=require_anyOf(),q=require_oneOf(),J=require_allOf(),Y=require_if(),ee=require_thenElse();function te(e=!1){let te=[B.default,H.default,q.default,J.default,Y.default,ee.default,k.default,j.default,O.default,F.default,L.default];return e?te.push(S.default,E.default):te.push(t.default,w.default),te.push(D.default),te}e.default=te})),require_format$1=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen();e.default={keyword:`format`,type:[`number`,`string`],schemaType:`string`,$data:!0,error:{message:({schemaCode:e})=>(0,t.str)`must match format "${e}"`,params:({schemaCode:e})=>(0,t._)`{format: ${e}}`},code(e,S){let{gen:w,data:E,$data:D,schema:O,schemaCode:k,it:j}=e,{opts:F,errSchemaPath:L,schemaEnv:B,self:H}=j;if(!F.validateFormats)return;D?q():J();function q(){let D=w.scopeValue(`formats`,{ref:H.formats,code:F.code.formats}),O=w.const(`fDef`,(0,t._)`${D}[${k}]`),j=w.let(`fType`),L=w.let(`format`);w.if((0,t._)`typeof ${O} == "object" && !(${O} instanceof RegExp)`,()=>w.assign(j,(0,t._)`${O}.type || "string"`).assign(L,(0,t._)`${O}.validate`),()=>w.assign(j,(0,t._)`"string"`).assign(L,O)),e.fail$data((0,t.or)(q(),J()));function q(){return F.strictSchema===!1?t.nil:(0,t._)`${k} && !${L}`}function J(){let e=B.$async?(0,t._)`(${O}.async ? await ${L}(${E}) : ${L}(${E}))`:(0,t._)`${L}(${E})`,w=(0,t._)`(typeof ${L} == "function" ? ${e} : ${L}.test(${E}))`;return(0,t._)`${L} && ${L} !== true && ${j} === ${S} && !${w}`}}function J(){let D=H.formats[O];if(!D){J();return}if(D===!0)return;let[k,j,q]=Y(D);k===S&&e.pass(ee());function J(){if(F.strictSchema===!1){H.logger.warn(e());return}throw Error(e());function e(){return`unknown format "${O}" ignored in schema at path "${L}"`}}function Y(e){let S=e instanceof RegExp?(0,t.regexpCode)(e):F.code.formats?(0,t._)`${F.code.formats}${(0,t.getProperty)(O)}`:void 0,E=w.scopeValue(`formats`,{key:O,ref:e,code:S});return typeof e==`object`&&!(e instanceof RegExp)?[e.type||`string`,e.validate,(0,t._)`${E}.validate`]:[`string`,e,E]}function ee(){if(typeof D==`object`&&!(D instanceof RegExp)&&D.async){if(!B.$async)throw Error(`async format in sync schema`);return(0,t._)`await ${q}(${E})`}return typeof j==`function`?(0,t._)`${q}(${E})`:(0,t._)`${q}.test(${E})`}}}}})),require_format=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=[require_format$1().default]})),require_metadata=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.contentVocabulary=e.metadataVocabulary=void 0,e.metadataVocabulary=[`title`,`description`,`default`,`deprecated`,`readOnly`,`writeOnly`,`examples`],e.contentVocabulary=[`contentMediaType`,`contentEncoding`,`contentSchema`]})),require_draft7=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_core(),S=require_validation$2(),w=require_applicator(),E=require_format(),D=require_metadata();e.default=[t.default,S.default,(0,w.default)(),E.default,D.metadataVocabulary,D.contentVocabulary]})),require_types=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.DiscrError=void 0;var t;(function(e){e.Tag=`tag`,e.Mapping=`mapping`})(t||(e.DiscrError=t={}))})),require_discriminator=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),S=require_types(),w=require_compile(),E=require_ref_error(),D=require_util();e.default={keyword:`discriminator`,type:`object`,schemaType:`object`,error:{message:({params:{discrError:e,tagName:t}})=>e===S.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:S,tagName:w}})=>(0,t._)`{error: ${e}, tag: ${w}, tagValue: ${S}}`},code(e){let{gen:O,data:k,schema:j,parentSchema:F,it:L}=e,{oneOf:B}=F;if(!L.opts.discriminator)throw Error(`discriminator: requires discriminator option`);let H=j.propertyName;if(typeof H!=`string`)throw Error(`discriminator: requires propertyName`);if(j.mapping)throw Error(`discriminator: mapping is not supported`);if(!B)throw Error(`discriminator: requires oneOf keyword`);let q=O.let(`valid`,!1),J=O.const(`tag`,(0,t._)`${k}${(0,t.getProperty)(H)}`);O.if((0,t._)`typeof ${J} == "string"`,()=>Y(),()=>e.error(!1,{discrError:S.DiscrError.Tag,tag:J,tagName:H})),e.ok(q);function Y(){let w=te();O.if(!1);for(let e in w)O.elseIf((0,t._)`${J} === ${e}`),O.assign(q,ee(w[e]));O.else(),e.error(!1,{discrError:S.DiscrError.Mapping,tag:J,tagName:H}),O.endIf()}function ee(S){let w=O.name(`valid`),E=e.subschema({keyword:`oneOf`,schemaProp:S},w);return e.mergeEvaluated(E,t.Name),w}function te(){var e;let t={},S=k(F),O=!0;for(let e=0;e<B.length;e++){let t=B[e];if(t?.$ref&&!(0,D.schemaHasRulesButRef)(t,L.self.RULES)){let e=t.$ref;if(t=w.resolveRef.call(L.self,L.schemaEnv.root,L.baseId,e),t instanceof w.SchemaEnv&&(t=t.schema),t===void 0)throw new E.default(L.opts.uriResolver,L.baseId,e)}let F=t?.properties?.[H];if(typeof F!=`object`)throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${H}"`);O&&=S||k(t),j(F,e)}if(!O)throw Error(`discriminator: "${H}" must be required`);return t;function k({required:e}){return Array.isArray(e)&&e.includes(H)}function j(e,t){if(e.const)q(e.const,t);else if(e.enum)for(let S of e.enum)q(S,t);else throw Error(`discriminator: "properties/${H}" must have "const" or "enum"`)}function q(e,S){if(typeof e!=`string`||e in t)throw Error(`discriminator: "${H}" values must be unique strings`);t[e]=S}}}}})),require_json_schema_draft_07=__commonJSMin$2(((e,t)=>{t.exports={$schema:`http://json-schema.org/draft-07/schema#`,$id:`http://json-schema.org/draft-07/schema#`,title:`Core schema meta-schema`,definitions:{schemaArray:{type:`array`,minItems:1,items:{$ref:`#`}},nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:`#/definitions/nonNegativeInteger`},{default:0}]},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}},type:[`object`,`boolean`],properties:{$id:{type:`string`,format:`uri-reference`},$schema:{type:`string`,format:`uri`},$ref:{type:`string`,format:`uri-reference`},$comment:{type:`string`},title:{type:`string`},description:{type:`string`},default:!0,readOnly:{type:`boolean`,default:!1},examples:{type:`array`,items:!0},multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/definitions/nonNegativeInteger`},minLength:{$ref:`#/definitions/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},additionalItems:{$ref:`#`},items:{anyOf:[{$ref:`#`},{$ref:`#/definitions/schemaArray`}],default:!0},maxItems:{$ref:`#/definitions/nonNegativeInteger`},minItems:{$ref:`#/definitions/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},contains:{$ref:`#`},maxProperties:{$ref:`#/definitions/nonNegativeInteger`},minProperties:{$ref:`#/definitions/nonNegativeIntegerDefault0`},required:{$ref:`#/definitions/stringArray`},additionalProperties:{$ref:`#`},definitions:{type:`object`,additionalProperties:{$ref:`#`},default:{}},properties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$ref:`#`},propertyNames:{format:`regex`},default:{}},dependencies:{type:`object`,additionalProperties:{anyOf:[{$ref:`#`},{$ref:`#/definitions/stringArray`}]}},propertyNames:{$ref:`#`},const:!0,enum:{type:`array`,items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:`#/definitions/simpleTypes`},{type:`array`,items:{$ref:`#/definitions/simpleTypes`},minItems:1,uniqueItems:!0}]},format:{type:`string`},contentMediaType:{type:`string`},contentEncoding:{type:`string`},if:{$ref:`#`},then:{$ref:`#`},else:{$ref:`#`},allOf:{$ref:`#/definitions/schemaArray`},anyOf:{$ref:`#/definitions/schemaArray`},oneOf:{$ref:`#/definitions/schemaArray`},not:{$ref:`#`}},default:!0}})),require_ajv=__commonJSMin$2(((e,t)=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.MissingRefError=e.ValidationError=e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=e.Ajv=void 0;let S=require_core$1(),w=require_draft7(),E=require_discriminator(),D=require_json_schema_draft_07(),O=[`/properties`],k=`http://json-schema.org/draft-07/schema`;var j=class extends S.default{_addVocabularies(){super._addVocabularies(),w.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(E.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(D,O):D;this.addMetaSchema(e,k,!1),this.refs[`http://json-schema.org/schema`]=k}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(k)?k:void 0)}};e.Ajv=j,t.exports=e=j,t.exports.Ajv=j,Object.defineProperty(e,`__esModule`,{value:!0}),e.default=j;var F=require_validate();Object.defineProperty(e,`KeywordCxt`,{enumerable:!0,get:function(){return F.KeywordCxt}});var L=require_codegen();Object.defineProperty(e,`_`,{enumerable:!0,get:function(){return L._}}),Object.defineProperty(e,`str`,{enumerable:!0,get:function(){return L.str}}),Object.defineProperty(e,`stringify`,{enumerable:!0,get:function(){return L.stringify}}),Object.defineProperty(e,`nil`,{enumerable:!0,get:function(){return L.nil}}),Object.defineProperty(e,`Name`,{enumerable:!0,get:function(){return L.Name}}),Object.defineProperty(e,`CodeGen`,{enumerable:!0,get:function(){return L.CodeGen}});var B=require_validation_error();Object.defineProperty(e,`ValidationError`,{enumerable:!0,get:function(){return B.default}});var H=require_ref_error();Object.defineProperty(e,`MissingRefError`,{enumerable:!0,get:function(){return H.default}})})),require_formats=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.formatNames=e.fastFormats=e.fullFormats=void 0;function t(e,t){return{validate:e,compare:t}}e.fullFormats={date:t(D,O),time:t(j(!0),F),"date-time":t(H(!0),q),"iso-time":t(j(),L),"iso-date-time":t(H(),J),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:te,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:me,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:ae,int32:{type:`number`,validate:ce},int64:{type:`number`,validate:ue},float:{type:`number`,validate:de},double:{type:`number`,validate:de},password:!0,binary:!0},e.fastFormats={...e.fullFormats,date:t(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,O),time:t(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,F),"date-time":t(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,q),"iso-time":t(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,L),"iso-date-time":t(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,J),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i},e.formatNames=Object.keys(e.fullFormats);function S(e){return e%4==0&&(e%100!=0||e%400==0)}let w=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,E=[0,31,28,31,30,31,30,31,31,30,31,30,31];function D(e){let t=w.exec(e);if(!t)return!1;let D=+t[1],O=+t[2],k=+t[3];return O>=1&&O<=12&&k>=1&&k<=(O===2&&S(D)?29:E[O])}function O(e,t){if(e&&t)return e>t?1:e<t?-1:0}let k=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function j(e){return function(t){let S=k.exec(t);if(!S)return!1;let w=+S[1],E=+S[2],D=+S[3],O=S[4],j=S[5]===`-`?-1:1,F=+(S[6]||0),L=+(S[7]||0);if(F>23||L>59||e&&!O)return!1;if(w<=23&&E<=59&&D<60)return!0;let B=E-L*j,H=w-F*j-(B<0?1:0);return(H===23||H===-1)&&(B===59||B===-1)&&D<61}}function F(e,t){if(!(e&&t))return;let S=new Date(`2020-01-01T`+e).valueOf(),w=new Date(`2020-01-01T`+t).valueOf();if(S&&w)return S-w}function L(e,t){if(!(e&&t))return;let S=k.exec(e),w=k.exec(t);if(S&&w)return e=S[1]+S[2]+S[3],t=w[1]+w[2]+w[3],e>t?1:e<t?-1:0}let B=/t|\s/i;function H(e){let t=j(e);return function(e){let S=e.split(B);return S.length===2&&D(S[0])&&t(S[1])}}function q(e,t){if(!(e&&t))return;let S=new Date(e).valueOf(),w=new Date(t).valueOf();if(S&&w)return S-w}function J(e,t){if(!(e&&t))return;let[S,w]=e.split(B),[E,D]=t.split(B),k=O(S,E);if(k!==void 0)return k||F(w,D)}let Y=/\/|:/,ee=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function te(e){return Y.test(e)&&ee.test(e)}let ne=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function ae(e){return ne.lastIndex=0,ne.test(e)}let oe=-(2**31),se=2**31-1;function ce(e){return Number.isInteger(e)&&e<=se&&e>=oe}function ue(e){return Number.isInteger(e)}function de(){return!0}let fe=/[^\\]\\Z/;function me(e){if(fe.test(e))return!1;try{return new RegExp(e),!0}catch{return!1}}})),require_limit=__commonJSMin$2((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.formatLimitDefinition=void 0;let t=require_ajv(),S=require_codegen(),w=S.operators,E={formatMaximum:{okStr:`<=`,ok:w.LTE,fail:w.GT},formatMinimum:{okStr:`>=`,ok:w.GTE,fail:w.LT},formatExclusiveMaximum:{okStr:`<`,ok:w.LT,fail:w.GTE},formatExclusiveMinimum:{okStr:`>`,ok:w.GT,fail:w.LTE}};e.formatLimitDefinition={keyword:Object.keys(E),type:`string`,schemaType:`string`,$data:!0,error:{message:({keyword:e,schemaCode:t})=>(0,S.str)`should be ${E[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>(0,S._)`{comparison: ${E[e].okStr}, limit: ${t}}`},code(e){let{gen:w,data:D,schemaCode:O,keyword:k,it:j}=e,{opts:F,self:L}=j;if(!F.validateFormats)return;let B=new t.KeywordCxt(j,L.RULES.all.format.definition,`format`);B.$data?H():q();function H(){let t=w.scopeValue(`formats`,{ref:L.formats,code:F.code.formats}),E=w.const(`fmt`,(0,S._)`${t}[${B.schemaCode}]`);e.fail$data((0,S.or)((0,S._)`typeof ${E} != "object"`,(0,S._)`${E} instanceof RegExp`,(0,S._)`typeof ${E}.compare != "function"`,J(E)))}function q(){let t=B.schema,E=L.formats[t];if(!E||E===!0)return;if(typeof E!=`object`||E instanceof RegExp||typeof E.compare!=`function`)throw Error(`"${k}": format "${t}" does not define "compare" function`);let D=w.scopeValue(`formats`,{key:t,ref:E,code:F.code.formats?(0,S._)`${F.code.formats}${(0,S.getProperty)(t)}`:void 0});e.fail$data(J(D))}function J(e){return(0,S._)`${e}.compare(${D}, ${O}) ${E[k].fail} 0`}},dependencies:[`format`]},e.default=t=>(t.addKeyword(e.formatLimitDefinition),t)})),require_dist=__commonJSMin$2(((e,t)=>{Object.defineProperty(e,`__esModule`,{value:!0});let S=require_formats(),w=require_limit(),E=require_codegen(),D=new E.Name(`fullFormats`),O=new E.Name(`fastFormats`),k=(e,t={keywords:!0})=>{if(Array.isArray(t))return j(e,t,S.fullFormats,D),e;let[E,k]=t.mode===`fast`?[S.fastFormats,O]:[S.fullFormats,D];return j(e,t.formats||S.formatNames,E,k),t.keywords&&(0,w.default)(e),e};k.get=(e,t=`full`)=>{let w=(t===`fast`?S.fastFormats:S.fullFormats)[e];if(!w)throw Error(`Unknown format "${e}"`);return w};function j(e,t,S,w){var D,O;(O=e.opts.code).formats??(O.formats=(0,E._)`require("ajv-formats/dist/formats").${w}`);for(let w of t)e.addFormat(w,S[w])}t.exports=e=k,Object.defineProperty(e,`__esModule`,{value:!0}),e.default=k})),import_ajv=__toESM$2(require_ajv(),1),import_dist=__toESM$2(require_dist(),1);function createDefaultAjvInstance(){let e=new import_ajv.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,import_dist.default)(e),e}var AjvJsonSchemaValidator=class{constructor(e){this._ajv=e??createDefaultAjvInstance()}getValidator(e){let t=`$id`in e&&typeof e.$id==`string`?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return e=>t(e)?{valid:!0,data:e,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(t.errors)}}},ExperimentalServerTasks=class{constructor(e){this._server=e}requestStream(e,t,S){return this._server.requestStream(e,t,S)}createMessageStream(e,t){let S=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!S?.sampling?.tools)throw Error(`Client does not support sampling tools capability.`);if(e.messages.length>0){let t=e.messages[e.messages.length-1],S=Array.isArray(t.content)?t.content:[t.content],w=S.some(e=>e.type===`tool_result`),E=e.messages.length>1?e.messages[e.messages.length-2]:void 0,D=E?Array.isArray(E.content)?E.content:[E.content]:[],O=D.some(e=>e.type===`tool_use`);if(w){if(S.some(e=>e.type!==`tool_result`))throw Error(`The last message must contain only tool_result content if any is present`);if(!O)throw Error(`tool_result blocks are not matching any tool_use from the previous message`)}if(O){let e=new Set(D.filter(e=>e.type===`tool_use`).map(e=>e.id)),t=new Set(S.filter(e=>e.type===`tool_result`).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error(`ids of tool_result blocks and tool_use blocks from previous message do not match`)}}return this.requestStream({method:`sampling/createMessage`,params:e},CreateMessageResultSchema,t)}elicitInputStream(e,t){let S=this._server.getClientCapabilities(),w=e.mode??`form`;switch(w){case`url`:if(!S?.elicitation?.url)throw Error(`Client does not support url elicitation.`);break;case`form`:if(!S?.elicitation?.form)throw Error(`Client does not support form elicitation.`);break}let E=w===`form`&&e.mode===void 0?{...e,mode:`form`}:e;return this.requestStream({method:`elicitation/create`,params:E},ElicitResultSchema,t)}async getTask(e,t){return this._server.getTask({taskId:e},t)}async getTaskResult(e,t,S){return this._server.getTaskResult({taskId:e},t,S)}async listTasks(e,t){return this._server.listTasks(e?{cursor:e}:void 0,t)}async cancelTask(e,t){return this._server.cancelTask({taskId:e},t)}};function assertToolsCallTaskCapability(e,t,S){if(!e)throw Error(`${S} does not support task creation (required for ${t})`);switch(t){case`tools/call`:if(!e.tools?.call)throw Error(`${S} does not support task creation for tools/call (required for ${t})`);break;default:break}}function assertClientRequestTaskCapability(e,t,S){if(!e)throw Error(`${S} does not support task creation (required for ${t})`);switch(t){case`sampling/createMessage`:if(!e.sampling?.createMessage)throw Error(`${S} does not support task creation for sampling/createMessage (required for ${t})`);break;case`elicitation/create`:if(!e.elicitation?.create)throw Error(`${S} does not support task creation for elicitation/create (required for ${t})`);break;default:break}}var Server=class extends Protocol{constructor(e,t){super(t),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(LoggingLevelSchema.options.map((e,t)=>[e,t])),this.isMessageIgnored=(e,t)=>{let S=this._loggingLevels.get(t);return S?this.LOG_LEVEL_SEVERITY.get(e)<this.LOG_LEVEL_SEVERITY.get(S):!1},this._capabilities=t?.capabilities??{},this._instructions=t?.instructions,this._jsonSchemaValidator=t?.jsonSchemaValidator??new AjvJsonSchemaValidator,this.setRequestHandler(InitializeRequestSchema,e=>this._oninitialize(e)),this.setNotificationHandler(InitializedNotificationSchema,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(SetLevelRequestSchema,async(e,t)=>{let S=t.sessionId||t.requestInfo?.headers[`mcp-session-id`]||void 0,{level:w}=e.params,E=LoggingLevelSchema.safeParse(w);return E.success&&this._loggingLevels.set(S,E.data),{}})}get experimental(){return this._experimental||={tasks:new ExperimentalServerTasks(this)},this._experimental}registerCapabilities(e){if(this.transport)throw Error(`Cannot register capabilities after connecting to transport`);this._capabilities=mergeCapabilities(this._capabilities,e)}setRequestHandler(e,t){let S=getObjectShape(e)?.method;if(!S)throw Error(`Schema is missing a method literal`);let w;if(isZ4Schema(S)){let e=S;w=e._zod?.def?.value??e.value}else{let e=S;w=e._def?.value??e.value}if(typeof w!=`string`)throw Error(`Schema method literal must be a string`);return w===`tools/call`?super.setRequestHandler(e,async(e,S)=>{let w=safeParse(CallToolRequestSchema,e);if(!w.success){let e=w.error instanceof Error?w.error.message:String(w.error);throw new McpError(ErrorCode.InvalidParams,`Invalid tools/call request: ${e}`)}let{params:E}=w.data,D=await Promise.resolve(t(e,S));if(E.task){let e=safeParse(CreateTaskResultSchema,D);if(!e.success){let t=e.error instanceof Error?e.error.message:String(e.error);throw new McpError(ErrorCode.InvalidParams,`Invalid task creation result: ${t}`)}return e.data}let O=safeParse(CallToolResultSchema,D);if(!O.success){let e=O.error instanceof Error?O.error.message:String(O.error);throw new McpError(ErrorCode.InvalidParams,`Invalid tools/call result: ${e}`)}return O.data}):super.setRequestHandler(e,t)}assertCapabilityForMethod(e){switch(e){case`sampling/createMessage`:if(!this._clientCapabilities?.sampling)throw Error(`Client does not support sampling (required for ${e})`);break;case`elicitation/create`:if(!this._clientCapabilities?.elicitation)throw Error(`Client does not support elicitation (required for ${e})`);break;case`roots/list`:if(!this._clientCapabilities?.roots)throw Error(`Client does not support listing roots (required for ${e})`);break;case`ping`:break}}assertNotificationCapability(e){switch(e){case`notifications/message`:if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case`notifications/resources/updated`:case`notifications/resources/list_changed`:if(!this._capabilities.resources)throw Error(`Server does not support notifying about resources (required for ${e})`);break;case`notifications/tools/list_changed`:if(!this._capabilities.tools)throw Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case`notifications/prompts/list_changed`:if(!this._capabilities.prompts)throw Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case`notifications/elicitation/complete`:if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for ${e})`);break;case`notifications/cancelled`:break;case`notifications/progress`:break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case`completion/complete`:if(!this._capabilities.completions)throw Error(`Server does not support completions (required for ${e})`);break;case`logging/setLevel`:if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case`prompts/get`:case`prompts/list`:if(!this._capabilities.prompts)throw Error(`Server does not support prompts (required for ${e})`);break;case`resources/list`:case`resources/templates/list`:case`resources/read`:if(!this._capabilities.resources)throw Error(`Server does not support resources (required for ${e})`);break;case`tools/call`:case`tools/list`:if(!this._capabilities.tools)throw Error(`Server does not support tools (required for ${e})`);break;case`tasks/get`:case`tasks/list`:case`tasks/result`:case`tasks/cancel`:if(!this._capabilities.tasks)throw Error(`Server does not support tasks capability (required for ${e})`);break;case`ping`:case`initialize`:break}}assertTaskCapability(e){assertClientRequestTaskCapability(this._clientCapabilities?.tasks?.requests,e,`Client`)}assertTaskHandlerCapability(e){this._capabilities&&assertToolsCallTaskCapability(this._capabilities.tasks?.requests,e,`Server`)}async _oninitialize(e){let t=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:SUPPORTED_PROTOCOL_VERSIONS.includes(t)?t:LATEST_PROTOCOL_VERSION,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:`ping`},EmptyResultSchema)}async createMessage(e,t){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw Error(`Client does not support sampling tools capability.`);if(e.messages.length>0){let t=e.messages[e.messages.length-1],S=Array.isArray(t.content)?t.content:[t.content],w=S.some(e=>e.type===`tool_result`),E=e.messages.length>1?e.messages[e.messages.length-2]:void 0,D=E?Array.isArray(E.content)?E.content:[E.content]:[],O=D.some(e=>e.type===`tool_use`);if(w){if(S.some(e=>e.type!==`tool_result`))throw Error(`The last message must contain only tool_result content if any is present`);if(!O)throw Error(`tool_result blocks are not matching any tool_use from the previous message`)}if(O){let e=new Set(D.filter(e=>e.type===`tool_use`).map(e=>e.id)),t=new Set(S.filter(e=>e.type===`tool_result`).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error(`ids of tool_result blocks and tool_use blocks from previous message do not match`)}}return e.tools?this.request({method:`sampling/createMessage`,params:e},CreateMessageResultWithToolsSchema,t):this.request({method:`sampling/createMessage`,params:e},CreateMessageResultSchema,t)}async elicitInput(e,t){switch(e.mode??`form`){case`url`:{if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support url elicitation.`);let S=e;return this.request({method:`elicitation/create`,params:S},ElicitResultSchema,t)}case`form`:{if(!this._clientCapabilities?.elicitation?.form)throw Error(`Client does not support form elicitation.`);let S=e.mode===`form`?e:{...e,mode:`form`},w=await this.request({method:`elicitation/create`,params:S},ElicitResultSchema,t);if(w.action===`accept`&&w.content&&S.requestedSchema)try{let e=this._jsonSchemaValidator.getValidator(S.requestedSchema)(w.content);if(!e.valid)throw new McpError(ErrorCode.InvalidParams,`Elicitation response content does not match requested schema: ${e.errorMessage}`)}catch(e){throw e instanceof McpError?e:new McpError(ErrorCode.InternalError,`Error validating elicitation response: ${e instanceof Error?e.message:String(e)}`)}return w}}}createElicitationCompletionNotifier(e,t){if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for notifications/elicitation/complete)`);return()=>this.notification({method:`notifications/elicitation/complete`,params:{elicitationId:e}},t)}async listRoots(e,t){return this.request({method:`roots/list`,params:e},ListRootsResultSchema,t)}async sendLoggingMessage(e,t){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,t))return this.notification({method:`notifications/message`,params:e})}async sendResourceUpdated(e){return this.notification({method:`notifications/resources/updated`,params:e})}async sendResourceListChanged(){return this.notification({method:`notifications/resources/list_changed`})}async sendToolListChanged(){return this.notification({method:`notifications/tools/list_changed`})}async sendPromptListChanged(){return this.notification({method:`notifications/prompts/list_changed`})}};const COMPLETABLE_SYMBOL=Symbol.for(`mcp.completable`);function isCompletable(e){return!!e&&typeof e==`object`&&COMPLETABLE_SYMBOL in e}function getCompleter(e){return e[COMPLETABLE_SYMBOL]?.complete}var McpZodTypeKind;(function(e){e.Completable=`McpCompletable`})(McpZodTypeKind||={});const TOOL_NAME_REGEX=/^[A-Za-z0-9._-]{1,128}$/;function validateToolName(e){let t=[];if(e.length===0)return{isValid:!1,warnings:[`Tool name cannot be empty`]};if(e.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${e.length})`]};if(e.includes(` `)&&t.push(`Tool name contains spaces, which may cause parsing issues`),e.includes(`,`)&&t.push(`Tool name contains commas, which may cause parsing issues`),(e.startsWith(`-`)||e.endsWith(`-`))&&t.push(`Tool name starts or ends with a dash, which may cause parsing issues in some contexts`),(e.startsWith(`.`)||e.endsWith(`.`))&&t.push(`Tool name starts or ends with a dot, which may cause parsing issues in some contexts`),!TOOL_NAME_REGEX.test(e)){let S=e.split(``).filter(e=>!/[A-Za-z0-9._-]/.test(e)).filter((e,t,S)=>S.indexOf(e)===t);return t.push(`Tool name contains invalid characters: ${S.map(e=>`"${e}"`).join(`, `)}`,`Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)`),{isValid:!1,warnings:t}}return{isValid:!0,warnings:t}}function issueToolNameWarning(e,t){if(t.length>0){console.warn(`Tool name validation warning for "${e}":`);for(let e of t)console.warn(` - ${e}`);console.warn(`Tool registration will proceed, but this may cause compatibility issues.`),console.warn(`Consider updating the tool name to conform to the MCP tool naming standard.`),console.warn(`See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.`)}}function validateAndWarnToolName(e){let t=validateToolName(e);return issueToolNameWarning(e,t.warnings),t.isValid}var ExperimentalMcpServerTasks=class{constructor(e){this._mcpServer=e}registerToolTask(e,t,S){let w={taskSupport:`required`,...t.execution};if(w.taskSupport===`forbidden`)throw Error(`Cannot register task-based tool '${e}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(e,t.title,t.description,t.inputSchema,t.outputSchema,t.annotations,w,t._meta,S)}},McpServer=class{constructor(e,t){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new Server(e,t)}get experimental(){return this._experimental||={tasks:new ExperimentalMcpServerTasks(this)},this._experimental}async connect(e){return await this.server.connect(e)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(ListToolsRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(CallToolRequestSchema)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(ListToolsRequestSchema,()=>({tools:Object.entries(this._registeredTools).filter(([,e])=>e.enabled).map(([e,t])=>{let S={name:e,title:t.title,description:t.description,inputSchema:(()=>{let e=normalizeObjectSchema(t.inputSchema);return e?toJsonSchemaCompat(e,{strictUnions:!0,pipeStrategy:`input`}):EMPTY_OBJECT_JSON_SCHEMA})(),annotations:t.annotations,execution:t.execution,_meta:t._meta};if(t.outputSchema){let e=normalizeObjectSchema(t.outputSchema);e&&(S.outputSchema=toJsonSchemaCompat(e,{strictUnions:!0,pipeStrategy:`output`}))}return S})})),this.server.setRequestHandler(CallToolRequestSchema,async(e,t)=>{try{let S=this._registeredTools[e.params.name];if(!S)throw new McpError(ErrorCode.InvalidParams,`Tool ${e.params.name} not found`);if(!S.enabled)throw new McpError(ErrorCode.InvalidParams,`Tool ${e.params.name} disabled`);let w=!!e.params.task,E=S.execution?.taskSupport,D=`createTask`in S.handler;if((E===`required`||E===`optional`)&&!D)throw new McpError(ErrorCode.InternalError,`Tool ${e.params.name} has taskSupport '${E}' but was not registered with registerToolTask`);if(E===`required`&&!w)throw new McpError(ErrorCode.MethodNotFound,`Tool ${e.params.name} requires task augmentation (taskSupport: 'required')`);if(E===`optional`&&!w&&D)return await this.handleAutomaticTaskPolling(S,e,t);let O=await this.validateToolInput(S,e.params.arguments,e.params.name),k=await this.executeToolHandler(S,O,t);return w||await this.validateToolOutput(S,k,e.params.name),k}catch(e){if(e instanceof McpError&&e.code===ErrorCode.UrlElicitationRequired)throw e;return this.createToolError(e instanceof Error?e.message:String(e))}}),!0)}createToolError(e){return{content:[{type:`text`,text:e}],isError:!0}}async validateToolInput(e,t,S){if(!e.inputSchema)return;let w=await safeParseAsync(normalizeObjectSchema(e.inputSchema)??e.inputSchema,t);if(!w.success){let e=getParseErrorMessage(`error`in w?w.error:`Unknown error`);throw new McpError(ErrorCode.InvalidParams,`Input validation error: Invalid arguments for tool ${S}: ${e}`)}return w.data}async validateToolOutput(e,t,S){if(!e.outputSchema||!(`content`in t)||t.isError)return;if(!t.structuredContent)throw new McpError(ErrorCode.InvalidParams,`Output validation error: Tool ${S} has an output schema but no structured content was provided`);let w=await safeParseAsync(normalizeObjectSchema(e.outputSchema),t.structuredContent);if(!w.success){let e=getParseErrorMessage(`error`in w?w.error:`Unknown error`);throw new McpError(ErrorCode.InvalidParams,`Output validation error: Invalid structured content for tool ${S}: ${e}`)}}async executeToolHandler(e,t,S){let w=e.handler;if(`createTask`in w){if(!S.taskStore)throw Error(`No task store provided.`);let E={...S,taskStore:S.taskStore};if(e.inputSchema){let e=w;return await Promise.resolve(e.createTask(t,E))}else{let e=w;return await Promise.resolve(e.createTask(E))}}if(e.inputSchema){let e=w;return await Promise.resolve(e(t,S))}else{let e=w;return await Promise.resolve(e(S))}}async handleAutomaticTaskPolling(e,t,S){if(!S.taskStore)throw Error(`No task store provided for task-capable tool.`);let w=await this.validateToolInput(e,t.params.arguments,t.params.name),E=e.handler,D={...S,taskStore:S.taskStore},O=w?await Promise.resolve(E.createTask(w,D)):await Promise.resolve(E.createTask(D)),k=O.task.taskId,j=O.task,F=j.pollInterval??5e3;for(;j.status!==`completed`&&j.status!==`failed`&&j.status!==`cancelled`;){await new Promise(e=>setTimeout(e,F));let e=await S.taskStore.getTask(k);if(!e)throw new McpError(ErrorCode.InternalError,`Task ${k} not found during polling`);j=e}return await S.taskStore.getTaskResult(k)}setCompletionRequestHandler(){this._completionHandlerInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(CompleteRequestSchema)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(CompleteRequestSchema,async e=>{switch(e.params.ref.type){case`ref/prompt`:return assertCompleteRequestPrompt(e),this.handlePromptCompletion(e,e.params.ref);case`ref/resource`:return assertCompleteRequestResourceTemplate(e),this.handleResourceCompletion(e,e.params.ref);default:throw new McpError(ErrorCode.InvalidParams,`Invalid completion reference: ${e.params.ref}`)}}),!0)}async handlePromptCompletion(e,t){let S=this._registeredPrompts[t.name];if(!S)throw new McpError(ErrorCode.InvalidParams,`Prompt ${t.name} not found`);if(!S.enabled)throw new McpError(ErrorCode.InvalidParams,`Prompt ${t.name} disabled`);if(!S.argsSchema)return EMPTY_COMPLETION_RESULT;let w=getObjectShape(S.argsSchema)?.[e.params.argument.name];if(!isCompletable(w))return EMPTY_COMPLETION_RESULT;let E=getCompleter(w);return E?createCompletionResult(await E(e.params.argument.value,e.params.context)):EMPTY_COMPLETION_RESULT}async handleResourceCompletion(e,t){let S=Object.values(this._registeredResourceTemplates).find(e=>e.resourceTemplate.uriTemplate.toString()===t.uri);if(!S){if(this._registeredResources[t.uri])return EMPTY_COMPLETION_RESULT;throw new McpError(ErrorCode.InvalidParams,`Resource template ${e.params.ref.uri} not found`)}let w=S.resourceTemplate.completeCallback(e.params.argument.name);return w?createCompletionResult(await w(e.params.argument.value,e.params.context)):EMPTY_COMPLETION_RESULT}setResourceRequestHandlers(){this._resourceHandlersInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(ListResourcesRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(ListResourceTemplatesRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(ReadResourceRequestSchema)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(ListResourcesRequestSchema,async(e,t)=>{let S=Object.entries(this._registeredResources).filter(([e,t])=>t.enabled).map(([e,t])=>({uri:e,name:t.name,...t.metadata})),w=[];for(let e of Object.values(this._registeredResourceTemplates)){if(!e.resourceTemplate.listCallback)continue;let S=await e.resourceTemplate.listCallback(t);for(let t of S.resources)w.push({...e.metadata,...t})}return{resources:[...S,...w]}}),this.server.setRequestHandler(ListResourceTemplatesRequestSchema,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([e,t])=>({name:e,uriTemplate:t.resourceTemplate.uriTemplate.toString(),...t.metadata}))})),this.server.setRequestHandler(ReadResourceRequestSchema,async(e,t)=>{let S=new URL(e.params.uri),w=this._registeredResources[S.toString()];if(w){if(!w.enabled)throw new McpError(ErrorCode.InvalidParams,`Resource ${S} disabled`);return w.readCallback(S,t)}for(let e of Object.values(this._registeredResourceTemplates)){let w=e.resourceTemplate.uriTemplate.match(S.toString());if(w)return e.readCallback(S,w,t)}throw new McpError(ErrorCode.InvalidParams,`Resource ${S} not found`)}),!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(ListPromptsRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(GetPromptRequestSchema)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(ListPromptsRequestSchema,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,e])=>e.enabled).map(([e,t])=>({name:e,title:t.title,description:t.description,arguments:t.argsSchema?promptArgumentsFromSchema(t.argsSchema):void 0}))})),this.server.setRequestHandler(GetPromptRequestSchema,async(e,t)=>{let S=this._registeredPrompts[e.params.name];if(!S)throw new McpError(ErrorCode.InvalidParams,`Prompt ${e.params.name} not found`);if(!S.enabled)throw new McpError(ErrorCode.InvalidParams,`Prompt ${e.params.name} disabled`);if(S.argsSchema){let w=await safeParseAsync(normalizeObjectSchema(S.argsSchema),e.params.arguments);if(!w.success){let t=getParseErrorMessage(`error`in w?w.error:`Unknown error`);throw new McpError(ErrorCode.InvalidParams,`Invalid arguments for prompt ${e.params.name}: ${t}`)}let E=w.data,D=S.callback;return await Promise.resolve(D(E,t))}else{let e=S.callback;return await Promise.resolve(e(t))}}),!0)}resource(e,t,...S){let w;typeof S[0]==`object`&&(w=S.shift());let E=S[0];if(typeof t==`string`){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let S=this._createRegisteredResource(e,void 0,t,w,E);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),S}else{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let S=this._createRegisteredResourceTemplate(e,void 0,t,w,E);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),S}}registerResource(e,t,S,w){if(typeof t==`string`){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let E=this._createRegisteredResource(e,S.title,t,S,w);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),E}else{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let E=this._createRegisteredResourceTemplate(e,S.title,t,S,w);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),E}}_createRegisteredResource(e,t,S,w,E){let D={name:e,title:t,metadata:w,readCallback:E,enabled:!0,disable:()=>D.update({enabled:!1}),enable:()=>D.update({enabled:!0}),remove:()=>D.update({uri:null}),update:e=>{e.uri!==void 0&&e.uri!==S&&(delete this._registeredResources[S],e.uri&&(this._registeredResources[e.uri]=D)),e.name!==void 0&&(D.name=e.name),e.title!==void 0&&(D.title=e.title),e.metadata!==void 0&&(D.metadata=e.metadata),e.callback!==void 0&&(D.readCallback=e.callback),e.enabled!==void 0&&(D.enabled=e.enabled),this.sendResourceListChanged()}};return this._registeredResources[S]=D,D}_createRegisteredResourceTemplate(e,t,S,w,E){let D={resourceTemplate:S,title:t,metadata:w,readCallback:E,enabled:!0,disable:()=>D.update({enabled:!1}),enable:()=>D.update({enabled:!0}),remove:()=>D.update({name:null}),update:t=>{t.name!==void 0&&t.name!==e&&(delete this._registeredResourceTemplates[e],t.name&&(this._registeredResourceTemplates[t.name]=D)),t.title!==void 0&&(D.title=t.title),t.template!==void 0&&(D.resourceTemplate=t.template),t.metadata!==void 0&&(D.metadata=t.metadata),t.callback!==void 0&&(D.readCallback=t.callback),t.enabled!==void 0&&(D.enabled=t.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[e]=D;let O=S.uriTemplate.variableNames;return Array.isArray(O)&&O.some(e=>!!S.completeCallback(e))&&this.setCompletionRequestHandler(),D}_createRegisteredPrompt(e,t,S,w,E){let D={title:t,description:S,argsSchema:w===void 0?void 0:objectFromShape(w),callback:E,enabled:!0,disable:()=>D.update({enabled:!1}),enable:()=>D.update({enabled:!0}),remove:()=>D.update({name:null}),update:t=>{t.name!==void 0&&t.name!==e&&(delete this._registeredPrompts[e],t.name&&(this._registeredPrompts[t.name]=D)),t.title!==void 0&&(D.title=t.title),t.description!==void 0&&(D.description=t.description),t.argsSchema!==void 0&&(D.argsSchema=objectFromShape(t.argsSchema)),t.callback!==void 0&&(D.callback=t.callback),t.enabled!==void 0&&(D.enabled=t.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[e]=D,w&&Object.values(w).some(e=>isCompletable(e instanceof ZodOptional$1?e._def?.innerType:e))&&this.setCompletionRequestHandler(),D}_createRegisteredTool(e,t,S,w,E,D,O,k,j){validateAndWarnToolName(e);let F={title:t,description:S,inputSchema:getZodSchemaObject(w),outputSchema:getZodSchemaObject(E),annotations:D,execution:O,_meta:k,handler:j,enabled:!0,disable:()=>F.update({enabled:!1}),enable:()=>F.update({enabled:!0}),remove:()=>F.update({name:null}),update:t=>{t.name!==void 0&&t.name!==e&&(typeof t.name==`string`&&validateAndWarnToolName(t.name),delete this._registeredTools[e],t.name&&(this._registeredTools[t.name]=F)),t.title!==void 0&&(F.title=t.title),t.description!==void 0&&(F.description=t.description),t.paramsSchema!==void 0&&(F.inputSchema=objectFromShape(t.paramsSchema)),t.outputSchema!==void 0&&(F.outputSchema=objectFromShape(t.outputSchema)),t.callback!==void 0&&(F.handler=t.callback),t.annotations!==void 0&&(F.annotations=t.annotations),t._meta!==void 0&&(F._meta=t._meta),t.enabled!==void 0&&(F.enabled=t.enabled),this.sendToolListChanged()}};return this._registeredTools[e]=F,this.setToolRequestHandlers(),this.sendToolListChanged(),F}tool(e,...t){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let S,w,E,D;if(typeof t[0]==`string`&&(S=t.shift()),t.length>1){let S=t[0];if(isZodRawShapeCompat(S))w=t.shift(),t.length>1&&typeof t[0]==`object`&&t[0]!==null&&!isZodRawShapeCompat(t[0])&&(D=t.shift());else if(typeof S==`object`&&S){if(Object.values(S).some(e=>typeof e==`object`&&!!e))throw Error(`Tool ${e} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);D=t.shift()}}let O=t[0];return this._createRegisteredTool(e,void 0,S,w,void 0,D,{taskSupport:`forbidden`},void 0,O)}registerTool(e,t,S){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let{title:w,description:E,inputSchema:D,outputSchema:O,annotations:k,_meta:j}=t;return this._createRegisteredTool(e,w,E,D,O,k,{taskSupport:`forbidden`},j,S)}prompt(e,...t){if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);let S;typeof t[0]==`string`&&(S=t.shift());let w;t.length>1&&(w=t.shift());let E=t[0],D=this._createRegisteredPrompt(e,void 0,S,w,E);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),D}registerPrompt(e,t,S){if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);let{title:w,description:E,argsSchema:D}=t,O=this._createRegisteredPrompt(e,w,E,D,S);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),O}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(e,t){return this.server.sendLoggingMessage(e,t)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}};const EMPTY_OBJECT_JSON_SCHEMA={type:`object`,properties:{}};function isZodTypeLike(e){return typeof e==`object`&&!!e&&`parse`in e&&typeof e.parse==`function`&&`safeParse`in e&&typeof e.safeParse==`function`}function isZodSchemaInstance(e){return`_def`in e||`_zod`in e||isZodTypeLike(e)}function isZodRawShapeCompat(e){return typeof e!=`object`||!e||isZodSchemaInstance(e)?!1:Object.keys(e).length===0?!0:Object.values(e).some(isZodTypeLike)}function getZodSchemaObject(e){if(e){if(isZodRawShapeCompat(e))return objectFromShape(e);if(!isZodSchemaInstance(e))throw Error(`inputSchema must be a Zod schema or raw shape, received an unrecognized object`);return e}}function promptArgumentsFromSchema(e){let t=getObjectShape(e);return t?Object.entries(t).map(([e,t])=>({name:e,description:getSchemaDescription(t),required:!isSchemaOptional(t)})):[]}function getMethodValue(e){let t=getObjectShape(e)?.method;if(!t)throw Error(`Schema is missing a method literal`);let S=getLiteralValue(t);if(typeof S==`string`)return S;throw Error(`Schema method literal must be a string`)}function createCompletionResult(e){return{completion:{values:e.slice(0,100),total:e.length,hasMore:e.length>100}}}const EMPTY_COMPLETION_RESULT={completion:{values:[],hasMore:!1}};var RequestError=class extends Error{constructor(e,t){super(e,t),this.name=`RequestError`}},toRequestError=e=>e instanceof RequestError?e:new RequestError(e.message,{cause:e}),GlobalRequest=global.Request,Request$1=class extends GlobalRequest{constructor(e,t){typeof e==`object`&&getRequestCache in e&&(e=e[getRequestCache]()),t?.body?.getReader!==void 0&&(t.duplex??=`half`),super(e,t)}},newHeadersFromIncoming=e=>{let t=[],S=e.rawHeaders;for(let e=0;e<S.length;e+=2){let{[e]:w,[e+1]:E}=S;w.charCodeAt(0)!==58&&t.push([w,E])}return new Headers(t)},wrapBodyStream=Symbol(`wrapBodyStream`),newRequestFromIncoming=(e,t,S,w,E)=>{let D={method:e,headers:S,signal:E.signal};if(e===`TRACE`){D.method=`GET`;let e=new Request$1(t,D);return Object.defineProperty(e,`method`,{get(){return`TRACE`}}),e}if(!(e===`GET`||e===`HEAD`))if(`rawBody`in w&&w.rawBody instanceof Buffer)D.body=new ReadableStream({start(e){e.enqueue(w.rawBody),e.close()}});else if(w[wrapBodyStream]){let e;D.body=new ReadableStream({async pull(t){try{e||=Readable.toWeb(w).getReader();let{done:S,value:E}=await e.read();S?t.close():t.enqueue(E)}catch(e){t.error(e)}}})}else D.body=Readable.toWeb(w);return new Request$1(t,D)},getRequestCache=Symbol(`getRequestCache`),requestCache=Symbol(`requestCache`),incomingKey=Symbol(`incomingKey`),urlKey=Symbol(`urlKey`),headersKey=Symbol(`headersKey`),abortControllerKey=Symbol(`abortControllerKey`),requestPrototype={get method(){return this[incomingKey].method||`GET`},get url(){return this[urlKey]},get headers(){return this[headersKey]||=newHeadersFromIncoming(this[incomingKey])},[Symbol(`getAbortController`)](){return this[getRequestCache](),this[abortControllerKey]},[getRequestCache](){return this[abortControllerKey]||=new AbortController,this[requestCache]||=newRequestFromIncoming(this.method,this[urlKey],this.headers,this[incomingKey],this[abortControllerKey])}};[`body`,`bodyUsed`,`cache`,`credentials`,`destination`,`integrity`,`mode`,`redirect`,`referrer`,`referrerPolicy`,`signal`,`keepalive`].forEach(e=>{Object.defineProperty(requestPrototype,e,{get(){return this[getRequestCache]()[e]}})}),[`arrayBuffer`,`blob`,`clone`,`formData`,`json`,`text`].forEach(e=>{Object.defineProperty(requestPrototype,e,{value:function(){return this[getRequestCache]()[e]()}})}),Object.setPrototypeOf(requestPrototype,Request$1.prototype);var newRequest=(e,t)=>{let S=Object.create(requestPrototype);S[incomingKey]=e;let w=e.url||``;if(w[0]!==`/`&&(w.startsWith(`http://`)||w.startsWith(`https://`))){if(e instanceof Http2ServerRequest)throw new RequestError(`Absolute URL for :path is not allowed in HTTP/2`);try{S[urlKey]=new URL(w).href}catch(e){throw new RequestError(`Invalid absolute URL`,{cause:e})}return S}let E=(e instanceof Http2ServerRequest?e.authority:e.headers.host)||t;if(!E)throw new RequestError(`Missing host header`);let D;if(e instanceof Http2ServerRequest){if(D=e.scheme,!(D===`http`||D===`https`))throw new RequestError(`Unsupported scheme`)}else D=e.socket&&e.socket.encrypted?`https`:`http`;let O=new URL(`${D}://${E}${w}`);if(O.hostname.length!==E.length&&O.hostname!==E.replace(/:\d+$/,``))throw new RequestError(`Invalid host header`);return S[urlKey]=O.href,S},responseCache=Symbol(`responseCache`),getResponseCache=Symbol(`getResponseCache`),cacheKey=Symbol(`cache`),GlobalResponse=global.Response,Response2=class e{#e;#t;[getResponseCache](){return delete this[cacheKey],this[responseCache]||=new GlobalResponse(this.#e,this.#t)}constructor(t,S){let w;if(this.#e=t,S instanceof e){let e=S[responseCache];if(e){this.#t=e,this[getResponseCache]();return}else this.#t=S.#t,w=new Headers(S.#t.headers)}else this.#t=S;(typeof t==`string`||t?.getReader!==void 0||t instanceof Blob||t instanceof Uint8Array)&&(this[cacheKey]=[S?.status||200,t,w||S?.headers])}get headers(){let e=this[cacheKey];return e?(e[2]instanceof Headers||(e[2]=new Headers(e[2]||{"content-type":`text/plain; charset=UTF-8`})),e[2]):this[getResponseCache]().headers}get status(){return this[cacheKey]?.[0]??this[getResponseCache]().status}get ok(){let e=this.status;return e>=200&&e<300}};[`body`,`bodyUsed`,`redirected`,`statusText`,`trailers`,`type`,`url`].forEach(e=>{Object.defineProperty(Response2.prototype,e,{get(){return this[getResponseCache]()[e]}})}),[`arrayBuffer`,`blob`,`clone`,`formData`,`json`,`text`].forEach(e=>{Object.defineProperty(Response2.prototype,e,{value:function(){return this[getResponseCache]()[e]()}})}),Object.setPrototypeOf(Response2,GlobalResponse),Object.setPrototypeOf(Response2.prototype,GlobalResponse.prototype);async function readWithoutBlocking(e){return Promise.race([e,Promise.resolve().then(()=>Promise.resolve(void 0))])}function writeFromReadableStreamDefaultReader(e,t,S){let w=t=>{e.cancel(t).catch(()=>{})};return t.on(`close`,w),t.on(`error`,w),(S??e.read()).then(O,E),e.closed.finally(()=>{t.off(`close`,w),t.off(`error`,w)});function E(e){e&&t.destroy(e)}function D(){e.read().then(O,E)}function O({done:S,value:w}){try{if(S)t.end();else if(!t.write(w))t.once(`drain`,D);else return e.read().then(O,E)}catch(e){E(e)}}}function writeFromReadableStream(e,t){if(e.locked)throw TypeError(`ReadableStream is locked.`);return t.destroyed?void 0:writeFromReadableStreamDefaultReader(e.getReader(),t)}var buildOutgoingHttpHeaders=e=>{let t={};e instanceof Headers||(e=new Headers(e??void 0));let S=[];for(let[w,E]of e)w===`set-cookie`?S.push(E):t[w]=E;return S.length>0&&(t[`set-cookie`]=S),t[`content-type`]??=`text/plain; charset=UTF-8`,t},X_ALREADY_SENT=`x-hono-already-sent`;global.crypto===void 0&&(global.crypto=crypto$2);var outgoingEnded=Symbol(`outgoingEnded`),incomingDraining=Symbol(`incomingDraining`),DRAIN_TIMEOUT_MS=500,MAX_DRAIN_BYTES=64*1024*1024,drainIncoming=e=>{let t=e;if(e.destroyed||t[incomingDraining])return;if(t[incomingDraining]=!0,e instanceof Http2ServerRequest){try{e.stream?.close?.(constants$2.NGHTTP2_NO_ERROR)}catch{}return}let S=0,w=()=>{clearTimeout(D),e.off(`data`,O),e.off(`end`,w),e.off(`error`,w)},E=()=>{w();let t=e.socket;t&&!t.destroyed&&t.destroySoon()},D=setTimeout(E,DRAIN_TIMEOUT_MS);D.unref?.();let O=e=>{S+=e.length,S>MAX_DRAIN_BYTES&&E()};e.on(`data`,O),e.on(`end`,w),e.on(`error`,w),e.resume()},handleRequestError=()=>new Response(null,{status:400}),handleFetchError=e=>new Response(null,{status:e instanceof Error&&(e.name===`TimeoutError`||e.constructor.name===`TimeoutError`)?504:500}),handleResponseError=(e,t)=>{let S=e instanceof Error?e:Error(`unknown error`,{cause:e});S.code===`ERR_STREAM_PREMATURE_CLOSE`?console.info(`The user aborted a request.`):(console.error(e),t.headersSent||t.writeHead(500,{"Content-Type":`text/plain`}),t.end(`Error: ${S.message}`),t.destroy(S))},flushHeaders=e=>{`flushHeaders`in e&&e.writable&&e.flushHeaders()},responseViaCache=async(e,t)=>{let[S,w,E]=e[cacheKey],D=!1;if(!E)E={"content-type":`text/plain; charset=UTF-8`};else if(E instanceof Headers)D=E.has(`content-length`),E=buildOutgoingHttpHeaders(E);else if(Array.isArray(E)){let e=new Headers(E);D=e.has(`content-length`),E=buildOutgoingHttpHeaders(e)}else for(let e in E)if(e.length===14&&e.toLowerCase()===`content-length`){D=!0;break}D||(typeof w==`string`?E[`Content-Length`]=Buffer.byteLength(w):w instanceof Uint8Array?E[`Content-Length`]=w.byteLength:w instanceof Blob&&(E[`Content-Length`]=w.size)),t.writeHead(S,E),typeof w==`string`||w instanceof Uint8Array?t.end(w):w instanceof Blob?t.end(new Uint8Array(await w.arrayBuffer())):(flushHeaders(t),await writeFromReadableStream(w,t)?.catch(e=>handleResponseError(e,t))),t[outgoingEnded]?.()},isPromise=e=>typeof e.then==`function`,responseViaResponseObject=async(e,t,S={})=>{if(isPromise(e))if(S.errorHandler)try{e=await e}catch(t){let w=await S.errorHandler(t);if(!w)return;e=w}else e=await e.catch(handleFetchError);if(cacheKey in e)return responseViaCache(e,t);let w=buildOutgoingHttpHeaders(e.headers);if(e.body){let S=e.body.getReader(),E=[],D=!1,O;if(w[`transfer-encoding`]!==`chunked`){let e=2;for(let t=0;t<e;t++){O||=S.read();let w=await readWithoutBlocking(O).catch(e=>{console.error(e),D=!0});if(!w){if(t===1){await new Promise(e=>setTimeout(e)),e=3;continue}break}if(O=void 0,w.value&&E.push(w.value),w.done){D=!0;break}}D&&!(`content-length`in w)&&(w[`content-length`]=E.reduce((e,t)=>e+t.length,0))}t.writeHead(e.status,w),E.forEach(e=>{t.write(e)}),D?t.end():(E.length===0&&flushHeaders(t),await writeFromReadableStreamDefaultReader(S,t,O))}else w[X_ALREADY_SENT]||(t.writeHead(e.status,w),t.end());t[outgoingEnded]?.()},getRequestListener=(e,t={})=>{let S=t.autoCleanupIncoming??!0;return t.overrideGlobalObjects!==!1&&global.Request!==Request$1&&(Object.defineProperty(global,`Request`,{value:Request$1}),Object.defineProperty(global,`Response`,{value:Response2})),async(w,E)=>{let D,O;try{O=newRequest(w,t.hostname);let k=!S||w.method===`GET`||w.method===`HEAD`;if(k||(w[wrapBodyStream]=!0,w.on(`end`,()=>{k=!0}),w instanceof Http2ServerRequest&&(E[outgoingEnded]=()=>{k||setTimeout(()=>{k||setTimeout(()=>{drainIncoming(w)})})}),E.on(`finish`,()=>{k||drainIncoming(w)})),E.on(`close`,()=>{O[abortControllerKey]&&(w.errored?O[abortControllerKey].abort(w.errored.toString()):E.writableFinished||O[abortControllerKey].abort(`Client connection prematurely closed.`)),k||setTimeout(()=>{k||setTimeout(()=>{drainIncoming(w)})})}),D=e(O,{incoming:w,outgoing:E}),cacheKey in D)return responseViaCache(D,E)}catch(e){if(D)return handleResponseError(e,E);if(t.errorHandler){if(D=await t.errorHandler(O?e:toRequestError(e)),!D)return}else D=O?handleFetchError(e):handleRequestError()}try{return await responseViaResponseObject(D,E,t)}catch(e){return handleResponseError(e,E)}}},WebStandardStreamableHTTPServerTransport=class{constructor(e={}){this._started=!1,this._hasHandledRequest=!1,this._streamMapping=new Map,this._requestToStreamMapping=new Map,this._requestResponseMap=new Map,this._initialized=!1,this._enableJsonResponse=!1,this._standaloneSseStreamId=`_GET_stream`,this.sessionIdGenerator=e.sessionIdGenerator,this._enableJsonResponse=e.enableJsonResponse??!1,this._eventStore=e.eventStore,this._onsessioninitialized=e.onsessioninitialized,this._onsessionclosed=e.onsessionclosed,this._allowedHosts=e.allowedHosts,this._allowedOrigins=e.allowedOrigins,this._enableDnsRebindingProtection=e.enableDnsRebindingProtection??!1,this._retryInterval=e.retryInterval}async start(){if(this._started)throw Error(`Transport already started`);this._started=!0}createJsonErrorResponse(e,t,S,w){let E={code:t,message:S};return w?.data!==void 0&&(E.data=w.data),new Response(JSON.stringify({jsonrpc:`2.0`,error:E,id:null}),{status:e,headers:{"Content-Type":`application/json`,...w?.headers}})}validateRequestHeaders(e){if(this._enableDnsRebindingProtection){if(this._allowedHosts&&this._allowedHosts.length>0){let t=e.headers.get(`host`);if(!t||!this._allowedHosts.includes(t)){let e=`Invalid Host header: ${t}`;return this.onerror?.(Error(e)),this.createJsonErrorResponse(403,-32e3,e)}}if(this._allowedOrigins&&this._allowedOrigins.length>0){let t=e.headers.get(`origin`);if(t&&!this._allowedOrigins.includes(t)){let e=`Invalid Origin header: ${t}`;return this.onerror?.(Error(e)),this.createJsonErrorResponse(403,-32e3,e)}}}}async handleRequest(e,t){if(!this.sessionIdGenerator&&this._hasHandledRequest)throw Error(`Stateless transport cannot be reused across requests. Create a new transport per request.`);this._hasHandledRequest=!0;let S=this.validateRequestHeaders(e);if(S)return S;switch(e.method){case`POST`:return this.handlePostRequest(e,t);case`GET`:return this.handleGetRequest(e);case`DELETE`:return this.handleDeleteRequest(e);default:return this.handleUnsupportedRequest()}}async writePrimingEvent(e,t,S,w){if(!this._eventStore||w<`2025-11-25`)return;let E=await this._eventStore.storeEvent(S,{}),D=`id: ${E}\ndata: \n\n`;this._retryInterval!==void 0&&(D=`id: ${E}\nretry: ${this._retryInterval}\ndata: \n\n`),e.enqueue(t.encode(D))}async handleGetRequest(e){if(!e.headers.get(`accept`)?.includes(`text/event-stream`))return this.onerror?.(Error(`Not Acceptable: Client must accept text/event-stream`)),this.createJsonErrorResponse(406,-32e3,`Not Acceptable: Client must accept text/event-stream`);let t=this.validateSession(e);if(t)return t;let S=this.validateProtocolVersion(e);if(S)return S;if(this._eventStore){let t=e.headers.get(`last-event-id`);if(t)return this.replayEvents(t)}if(this._streamMapping.get(this._standaloneSseStreamId)!==void 0)return this.onerror?.(Error(`Conflict: Only one SSE stream is allowed per session`)),this.createJsonErrorResponse(409,-32e3,`Conflict: Only one SSE stream is allowed per session`);let w=new TextEncoder,E,D=new ReadableStream({start:e=>{E=e},cancel:()=>{this._streamMapping.delete(this._standaloneSseStreamId)}}),O={"Content-Type":`text/event-stream`,"Cache-Control":`no-cache, no-transform`,Connection:`keep-alive`};return this.sessionId!==void 0&&(O[`mcp-session-id`]=this.sessionId),this._streamMapping.set(this._standaloneSseStreamId,{controller:E,encoder:w,cleanup:()=>{this._streamMapping.delete(this._standaloneSseStreamId);try{E.close()}catch{}}}),new Response(D,{headers:O})}async replayEvents(e){if(!this._eventStore)return this.onerror?.(Error(`Event store not configured`)),this.createJsonErrorResponse(400,-32e3,`Event store not configured`);try{let t;if(this._eventStore.getStreamIdForEventId){if(t=await this._eventStore.getStreamIdForEventId(e),!t)return this.onerror?.(Error(`Invalid event ID format`)),this.createJsonErrorResponse(400,-32e3,`Invalid event ID format`);if(this._streamMapping.get(t)!==void 0)return this.onerror?.(Error(`Conflict: Stream already has an active connection`)),this.createJsonErrorResponse(409,-32e3,`Conflict: Stream already has an active connection`)}let S={"Content-Type":`text/event-stream`,"Cache-Control":`no-cache, no-transform`,Connection:`keep-alive`};this.sessionId!==void 0&&(S[`mcp-session-id`]=this.sessionId);let w=new TextEncoder,E,D=new ReadableStream({start:e=>{E=e},cancel:()=>{}}),O=await this._eventStore.replayEventsAfter(e,{send:async(e,t)=>{if(!this.writeSSEEvent(E,w,t,e)){this.onerror?.(Error(`Failed replay events`));try{E.close()}catch{}}}});return this._streamMapping.set(O,{controller:E,encoder:w,cleanup:()=>{this._streamMapping.delete(O);try{E.close()}catch{}}}),new Response(D,{headers:S})}catch(e){return this.onerror?.(e),this.createJsonErrorResponse(500,-32e3,`Error replaying events`)}}writeSSEEvent(e,t,S,w){try{let E=`event: message
475
475
  `;return w&&(E+=`id: ${w}\n`),E+=`data: ${JSON.stringify(S)}\n\n`,e.enqueue(t.encode(E)),!0}catch(e){return this.onerror?.(e),!1}}handleUnsupportedRequest(){return this.onerror?.(Error(`Method not allowed.`)),new Response(JSON.stringify({jsonrpc:`2.0`,error:{code:-32e3,message:`Method not allowed.`},id:null}),{status:405,headers:{Allow:`GET, POST, DELETE`,"Content-Type":`application/json`}})}async handlePostRequest(e,t){try{let S=e.headers.get(`accept`);if(!S?.includes(`application/json`)||!S.includes(`text/event-stream`))return this.onerror?.(Error(`Not Acceptable: Client must accept both application/json and text/event-stream`)),this.createJsonErrorResponse(406,-32e3,`Not Acceptable: Client must accept both application/json and text/event-stream`);let w=e.headers.get(`content-type`);if(!w||!w.includes(`application/json`))return this.onerror?.(Error(`Unsupported Media Type: Content-Type must be application/json`)),this.createJsonErrorResponse(415,-32e3,`Unsupported Media Type: Content-Type must be application/json`);let E={headers:Object.fromEntries(e.headers.entries()),url:new URL(e.url)},D;if(t?.parsedBody!==void 0)D=t.parsedBody;else try{D=await e.json()}catch{return this.onerror?.(Error(`Parse error: Invalid JSON`)),this.createJsonErrorResponse(400,-32700,`Parse error: Invalid JSON`)}let O;try{O=Array.isArray(D)?D.map(e=>JSONRPCMessageSchema.parse(e)):[JSONRPCMessageSchema.parse(D)]}catch{return this.onerror?.(Error(`Parse error: Invalid JSON-RPC message`)),this.createJsonErrorResponse(400,-32700,`Parse error: Invalid JSON-RPC message`)}let k=O.some(isInitializeRequest);if(k){if(this._initialized&&this.sessionId!==void 0)return this.onerror?.(Error(`Invalid Request: Server already initialized`)),this.createJsonErrorResponse(400,-32600,`Invalid Request: Server already initialized`);if(O.length>1)return this.onerror?.(Error(`Invalid Request: Only one initialization request is allowed`)),this.createJsonErrorResponse(400,-32600,`Invalid Request: Only one initialization request is allowed`);this.sessionId=this.sessionIdGenerator?.(),this._initialized=!0,this.sessionId&&this._onsessioninitialized&&await Promise.resolve(this._onsessioninitialized(this.sessionId))}if(!k){let t=this.validateSession(e);if(t)return t;let S=this.validateProtocolVersion(e);if(S)return S}if(!O.some(isJSONRPCRequest)){for(let e of O)this.onmessage?.(e,{authInfo:t?.authInfo,requestInfo:E});return new Response(null,{status:202})}let j=crypto.randomUUID(),F=O.find(e=>isInitializeRequest(e)),L=F?F.params.protocolVersion:e.headers.get(`mcp-protocol-version`)??`2025-03-26`;if(this._enableJsonResponse)return new Promise(e=>{this._streamMapping.set(j,{resolveJson:e,cleanup:()=>{this._streamMapping.delete(j)}});for(let e of O)isJSONRPCRequest(e)&&this._requestToStreamMapping.set(e.id,j);for(let e of O)this.onmessage?.(e,{authInfo:t?.authInfo,requestInfo:E})});let B=new TextEncoder,H,q=new ReadableStream({start:e=>{H=e},cancel:()=>{this._streamMapping.delete(j)}}),J={"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`};this.sessionId!==void 0&&(J[`mcp-session-id`]=this.sessionId);for(let e of O)isJSONRPCRequest(e)&&(this._streamMapping.set(j,{controller:H,encoder:B,cleanup:()=>{this._streamMapping.delete(j);try{H.close()}catch{}}}),this._requestToStreamMapping.set(e.id,j));await this.writePrimingEvent(H,B,j,L);for(let e of O){let S,w;isJSONRPCRequest(e)&&this._eventStore&&L>=`2025-11-25`&&(S=()=>{this.closeSSEStream(e.id)},w=()=>{this.closeStandaloneSSEStream()}),this.onmessage?.(e,{authInfo:t?.authInfo,requestInfo:E,closeSSEStream:S,closeStandaloneSSEStream:w})}return new Response(q,{status:200,headers:J})}catch(e){return this.onerror?.(e),this.createJsonErrorResponse(400,-32700,`Parse error`,{data:String(e)})}}async handleDeleteRequest(e){return this.validateSession(e)||this.validateProtocolVersion(e)||(await Promise.resolve(this._onsessionclosed?.(this.sessionId)),await this.close(),new Response(null,{status:200}))}validateSession(e){if(this.sessionIdGenerator===void 0)return;if(!this._initialized)return this.onerror?.(Error(`Bad Request: Server not initialized`)),this.createJsonErrorResponse(400,-32e3,`Bad Request: Server not initialized`);let t=e.headers.get(`mcp-session-id`);if(!t)return this.onerror?.(Error(`Bad Request: Mcp-Session-Id header is required`)),this.createJsonErrorResponse(400,-32e3,`Bad Request: Mcp-Session-Id header is required`);if(t!==this.sessionId)return this.onerror?.(Error(`Session not found`)),this.createJsonErrorResponse(404,-32001,`Session not found`)}validateProtocolVersion(e){let t=e.headers.get(`mcp-protocol-version`);if(t!==null&&!SUPPORTED_PROTOCOL_VERSIONS.includes(t))return this.onerror?.(Error(`Bad Request: Unsupported protocol version: ${t} (supported versions: ${SUPPORTED_PROTOCOL_VERSIONS.join(`, `)})`)),this.createJsonErrorResponse(400,-32e3,`Bad Request: Unsupported protocol version: ${t} (supported versions: ${SUPPORTED_PROTOCOL_VERSIONS.join(`, `)})`)}async close(){this._streamMapping.forEach(({cleanup:e})=>{e()}),this._streamMapping.clear(),this._requestResponseMap.clear(),this.onclose?.()}closeSSEStream(e){let t=this._requestToStreamMapping.get(e);if(!t)return;let S=this._streamMapping.get(t);S&&S.cleanup()}closeStandaloneSSEStream(){let e=this._streamMapping.get(this._standaloneSseStreamId);e&&e.cleanup()}async send(e,t){let S=t?.relatedRequestId;if((isJSONRPCResultResponse(e)||isJSONRPCErrorResponse(e))&&(S=e.id),S===void 0){if(isJSONRPCResultResponse(e)||isJSONRPCErrorResponse(e))throw Error(`Cannot send a response on a standalone SSE stream unless resuming a previous client request`);let t;this._eventStore&&(t=await this._eventStore.storeEvent(this._standaloneSseStreamId,e));let S=this._streamMapping.get(this._standaloneSseStreamId);if(S===void 0)return;S.controller&&S.encoder&&this.writeSSEEvent(S.controller,S.encoder,e,t);return}let w=this._requestToStreamMapping.get(S);if(!w)throw Error(`No connection established for request ID: ${String(S)}`);let E=this._streamMapping.get(w);if(!this._enableJsonResponse&&E?.controller&&E?.encoder){let t;this._eventStore&&(t=await this._eventStore.storeEvent(w,e)),this.writeSSEEvent(E.controller,E.encoder,e,t)}if(isJSONRPCResultResponse(e)||isJSONRPCErrorResponse(e)){this._requestResponseMap.set(S,e);let t=Array.from(this._requestToStreamMapping.entries()).filter(([e,t])=>t===w).map(([e])=>e);if(t.every(e=>this._requestResponseMap.has(e))){if(!E)throw Error(`No connection established for request ID: ${String(S)}`);if(this._enableJsonResponse&&E.resolveJson){let e={"Content-Type":`application/json`};this.sessionId!==void 0&&(e[`mcp-session-id`]=this.sessionId);let S=t.map(e=>this._requestResponseMap.get(e));S.length===1?E.resolveJson(new Response(JSON.stringify(S[0]),{status:200,headers:e})):E.resolveJson(new Response(JSON.stringify(S),{status:200,headers:e}))}else E.cleanup();for(let e of t)this._requestResponseMap.delete(e),this._requestToStreamMapping.delete(e)}}}},StreamableHTTPServerTransport=class{constructor(e={}){this._requestContext=new WeakMap,this._webStandardTransport=new WebStandardStreamableHTTPServerTransport(e),this._requestListener=getRequestListener(async e=>{let t=this._requestContext.get(e);return this._webStandardTransport.handleRequest(e,{authInfo:t?.authInfo,parsedBody:t?.parsedBody})},{overrideGlobalObjects:!1})}get sessionId(){return this._webStandardTransport.sessionId}set onclose(e){this._webStandardTransport.onclose=e}get onclose(){return this._webStandardTransport.onclose}set onerror(e){this._webStandardTransport.onerror=e}get onerror(){return this._webStandardTransport.onerror}set onmessage(e){this._webStandardTransport.onmessage=e}get onmessage(){return this._webStandardTransport.onmessage}async start(){return this._webStandardTransport.start()}async close(){return this._webStandardTransport.close()}async send(e,t){return this._webStandardTransport.send(e,t)}async handleRequest(e,t,S){let w=e.auth;await getRequestListener(async e=>this._webStandardTransport.handleRequest(e,{authInfo:w,parsedBody:S}),{overrideGlobalObjects:!1})(e,t)}closeSSEStream(e){this._webStandardTransport.closeSSEStream(e)}closeStandaloneSSEStream(){this._webStandardTransport.closeStandaloneSSEStream()}},Ye=[{name:`echo`,load:async()=>(await import(`./echo-O45JWWI2-D2qFOnG-.mjs`)).echoCommand},{name:`cat`,load:async()=>(await import(`./cat-RDUMLXKC-BcPFfXNy.mjs`)).catCommand},{name:`printf`,load:async()=>(await import(`./printf-CX64KX2P-BRDA91sv.mjs`)).printfCommand},{name:`ls`,load:async()=>(await import(`./ls-KSXFZCWH-Cpvwn_RB.mjs`)).lsCommand},{name:`mkdir`,load:async()=>(await import(`./mkdir-TDEMSB6C-Doj-uc1V.mjs`)).mkdirCommand},{name:`rmdir`,load:async()=>(await import(`./rmdir-XTQXT7RK-CJJKrOdm.mjs`)).rmdirCommand},{name:`touch`,load:async()=>(await import(`./touch-DX2IJOQ4-C7eGjNGd.mjs`)).touchCommand},{name:`rm`,load:async()=>(await import(`./rm-RTZG23RL-DZt78fCD.mjs`)).rmCommand},{name:`cp`,load:async()=>(await import(`./cp-XOYR4ABJ-BoeqT96E.mjs`)).cpCommand},{name:`mv`,load:async()=>(await import(`./mv-Z6MORUFL-CB3JJwR7.mjs`)).mvCommand},{name:`ln`,load:async()=>(await import(`./ln-4TRFBYAT-D-c9GUlv.mjs`)).lnCommand},{name:`chmod`,load:async()=>(await import(`./chmod-SYMGL4JA-DNQ-_FB-.mjs`)).chmodCommand},{name:`pwd`,load:async()=>(await import(`./pwd-D4OZ7N27-DOBMwDAQ.mjs`)).pwdCommand},{name:`readlink`,load:async()=>(await import(`./readlink-MI4GCHJF-C7jxdmka.mjs`)).readlinkCommand},{name:`head`,load:async()=>(await import(`./head-HT2B6D2J-ahSJqSiq.mjs`)).headCommand},{name:`tail`,load:async()=>(await import(`./tail-S5ULNTJU-CxhswWhX.mjs`)).tailCommand},{name:`wc`,load:async()=>(await import(`./wc-TQB3VNOX-dwG38U4n.mjs`)).wcCommand},{name:`stat`,load:async()=>(await import(`./stat-BT5A227F-Di81wqB8.mjs`)).statCommand},{name:`grep`,load:async()=>(await import(`./grep-3AIAIJVR-Gk5ggptS.mjs`)).grepCommand},{name:`fgrep`,load:async()=>(await import(`./grep-3AIAIJVR-Gk5ggptS.mjs`)).fgrepCommand},{name:`egrep`,load:async()=>(await import(`./grep-3AIAIJVR-Gk5ggptS.mjs`)).egrepCommand},{name:`rg`,load:async()=>(await import(`./rg-FOQSCCX3-D0ctWk6O.mjs`)).rgCommand},{name:`sed`,load:async()=>(await import(`./sed-VFTTATXJ-Cv8KiT35.mjs`)).sedCommand},{name:`awk`,load:async()=>(await import(`./awk2-POPGKRAI-DjdS5H9u.mjs`)).awkCommand2},{name:`sort`,load:async()=>(await import(`./sort-DCNRDA7U-Bnmzizlk.mjs`)).sortCommand},{name:`uniq`,load:async()=>(await import(`./uniq-SUNANL47-Ce9L4IzE.mjs`)).uniqCommand},{name:`comm`,load:async()=>(await import(`./comm-5SLSESQG-D314YMTX.mjs`)).commCommand},{name:`cut`,load:async()=>(await import(`./cut-OPC3VAGB-BduNLBmG.mjs`)).cutCommand},{name:`paste`,load:async()=>(await import(`./paste-7N6AFSDS-CRLhW5JD.mjs`)).pasteCommand},{name:`tr`,load:async()=>(await import(`./tr-2HXZRDSW-DlafN6SW.mjs`)).trCommand},{name:`rev`,load:async()=>(await import(`./rev-XOSYPP45-BrzxRIO9.mjs`)).rev},{name:`nl`,load:async()=>(await import(`./nl-U5YJDM32-DNpHPr0D.mjs`)).nl},{name:`fold`,load:async()=>(await import(`./fold-LDSORVYE-BcrX-J9k.mjs`)).fold},{name:`expand`,load:async()=>(await import(`./expand-DTNXU4LQ-ByrWF7LC.mjs`)).expand},{name:`unexpand`,load:async()=>(await import(`./unexpand-RGTMIGZM-D6xZmTWp.mjs`)).unexpand},{name:`strings`,load:async()=>(await import(`./strings-7PLOGTPD-DKTG3t3M.mjs`)).strings},{name:`split`,load:async()=>(await import(`./split-SITCSYCZ-NsOC8k0n.mjs`)).split},{name:`column`,load:async()=>(await import(`./column-WLPMMSTS-D7ZdQMYX.mjs`)).column},{name:`join`,load:async()=>(await import(`./join-GG2LDHE5-DbbozPoG.mjs`)).join},{name:`tee`,load:async()=>(await import(`./tee-O7VXZDCO-DwJ0hUpW.mjs`)).teeCommand},{name:`find`,load:async()=>(await import(`./find-TPUOAIUQ-B-6hQsZ1.mjs`)).findCommand},{name:`basename`,load:async()=>(await import(`./basename-AA2KJYZQ-623KrTZh.mjs`)).basenameCommand},{name:`dirname`,load:async()=>(await import(`./dirname-LEMTZZFS-y-nYlas9.mjs`)).dirnameCommand},{name:`tree`,load:async()=>(await import(`./tree-LYXBS7DC-Ou8JkGQ1.mjs`)).treeCommand},{name:`du`,load:async()=>(await import(`./du-WO2ENHXQ-DxBFDhE9.mjs`)).duCommand},{name:`env`,load:async()=>(await import(`./env-5EPCWSXR-3enSMuUq.mjs`)).envCommand},{name:`printenv`,load:async()=>(await import(`./env-5EPCWSXR-3enSMuUq.mjs`)).printenvCommand},{name:`alias`,load:async()=>(await import(`./alias-JE7RI5QX-DvXqsNuT.mjs`)).aliasCommand},{name:`unalias`,load:async()=>(await import(`./alias-JE7RI5QX-DvXqsNuT.mjs`)).unaliasCommand},{name:`history`,load:async()=>(await import(`./history-J4QRNGRO-DF-FzAzf.mjs`)).historyCommand},{name:`xargs`,load:async()=>(await import(`./xargs-I6EZUCYF-CG6axhMW.mjs`)).xargsCommand},{name:`true`,load:async()=>(await import(`./true-WHJNXCHG-B4B4ZHqp.mjs`)).trueCommand},{name:`false`,load:async()=>(await import(`./true-WHJNXCHG-B4B4ZHqp.mjs`)).falseCommand},{name:`clear`,load:async()=>(await import(`./clear-5CZ5X4YR-DQDNPZFX.mjs`)).clearCommand},{name:`bash`,load:async()=>(await import(`./bash-IJWYRKFO-Czh-Vt61.mjs`)).bashCommand},{name:`sh`,load:async()=>(await import(`./bash-IJWYRKFO-Czh-Vt61.mjs`)).shCommand},{name:`jq`,load:async()=>(await import(`./jq-ODXZBPLY-DDNFO29H.mjs`)).jqCommand},{name:`base64`,load:async()=>(await import(`./base64-4YMZCVJ5-KM4zCU91.mjs`)).base64Command},{name:`diff`,load:async()=>(await import(`./diff-HJF2MPDN-BIBcfzYf.mjs`)).diffCommand},{name:`date`,load:async()=>(await import(`./date-DD7FVA2V-CXtS-UgC.mjs`)).dateCommand},{name:`sleep`,load:async()=>(await import(`./sleep-VZFPZFWA-gwZmptDS.mjs`)).sleepCommand},{name:`timeout`,load:async()=>(await import(`./timeout-VRKMCG72-wW3XOtt7.mjs`)).timeoutCommand},{name:`time`,load:async()=>(await import(`./time-DEUO3QV2-W5vzutuD.mjs`)).timeCommand},{name:`seq`,load:async()=>(await import(`./seq-RN5ZUASB-BD6p5vId.mjs`)).seqCommand},{name:`expr`,load:async()=>(await import(`./expr-5T3UU5KE-DslbMHGH.mjs`)).exprCommand},{name:`md5sum`,load:async()=>(await import(`./md5sum-INMIK4DX-ysJE_fRH.mjs`)).md5sumCommand},{name:`sha1sum`,load:async()=>(await import(`./sha1sum-VJPNLNU6-DukJfnER.mjs`)).sha1sumCommand},{name:`sha256sum`,load:async()=>(await import(`./sha256sum-PI32XWXY-QlLE_NGo.mjs`)).sha256sumCommand},{name:`file`,load:async()=>(await import(`./file-ZIGAJ4YS-5ydJB32I.mjs`)).fileCommand},{name:`html-to-markdown`,load:async()=>(await import(`./html-to-markdown-TFCECAGV-Dyh1D0fg.mjs`)).htmlToMarkdownCommand},{name:`help`,load:async()=>(await import(`./help-VVWX7SA5-DWuklTmV.mjs`)).helpCommand},{name:`which`,load:async()=>(await import(`./which-XZHEH76L-Cw9SQliE.mjs`)).whichCommand},{name:`tac`,load:async()=>(await import(`./tac-SJGXQ4T2-CMuGqDl5.mjs`)).tac},{name:`hostname`,load:async()=>(await import(`./hostname-BK6HG2DE-BduSSI6z.mjs`)).hostname},{name:`whoami`,load:async()=>(await import(`./whoami-DGKU3D2X-hzRI9gvz.mjs`)).whoami},{name:`od`,load:async()=>(await import(`./od-VJEF2UR5-CU4HUmLC.mjs`)).od},{name:`gzip`,load:async()=>(await import(`./gzip-AQXSGOVS-DVhom50G.mjs`)).gzipCommand},{name:`gunzip`,load:async()=>(await import(`./gzip-AQXSGOVS-DVhom50G.mjs`)).gunzipCommand},{name:`zcat`,load:async()=>(await import(`./gzip-AQXSGOVS-DVhom50G.mjs`)).zcatCommand}];(typeof __BROWSER__>`u`||!__BROWSER__)&&(Ye.push({name:`tar`,load:async()=>(await import(`./tar-ANUBEFJY-BajYpRKO.mjs`)).tarCommand}),Ye.push({name:`yq`,load:async()=>(await import(`./yq-MJMAR36V-CsEAtdgj.mjs`)).yqCommand}),Ye.push({name:`xan`,load:async()=>(await import(`./xan-BXDXYEIB-loWv9Mk3.mjs`)).xanCommand}),Ye.push({name:`sqlite3`,load:async()=>(await import(`./sqlite3-56UMWEY3-D2ymLPIL.mjs`)).sqlite3Command}));var Zt=[];(typeof __BROWSER__>`u`||!__BROWSER__)&&(Zt.push({name:`python3`,load:async()=>(await import(`./python3-AUFTPCU6-C02r6EXI.mjs`)).python3Command}),Zt.push({name:`python`,load:async()=>(await import(`./python3-AUFTPCU6-C02r6EXI.mjs`)).pythonCommand}));var qt=[];(typeof __BROWSER__>`u`||!__BROWSER__)&&(qt.push({name:`js-exec`,load:async()=>(await import(`./js-exec-M6UR76J5-Cw-W_H_2.mjs`)).jsExecCommand}),qt.push({name:`node`,load:async()=>(await import(`./js-exec-M6UR76J5-Cw-W_H_2.mjs`)).nodeStubCommand}));var sn=[{name:`curl`,load:async()=>(await import(`./curl-47BFPSFW-CseKVLFy.mjs`)).curlCommand}],tn=new Map;function Gt(e){return{name:e.name,async execute(t,S){let w=tn.get(e.name);if(w||(w=await _$1.runTrustedAsync(()=>e.load()),tn.set(e.name,w)),S.coverage&&(typeof __BROWSER__>`u`||!__BROWSER__)){let{emitFlagCoverage:w}=await import(`./flag-coverage-QT4N2Z44-BWjM15GF.mjs`);w(S.coverage,e.name,t)}return w.execute(t,S)}}}function rn(e){return(e?Ye.filter(t=>e.includes(t.name)):Ye).map(Gt)}function nn(){return sn.map(Gt)}function on(){return Zt.map(Gt)}function an(){return qt.map(Gt)}function ln(e){return`load`in e&&typeof e.load==`function`}function cn(e){let t=null;return{name:e.name,trusted:!0,async execute(S,w){return t||=await e.load(),t.execute(S,w)}}}var ot=new TextEncoder;function Qi(e){return typeof e==`object`&&!!e&&!(e instanceof Uint8Array)&&`content`in e}var Le=class{data=new Map;constructor(e){if(this.data.set(`/`,{type:`directory`,mode:493,mtime:new Date}),e)for(let[t,S]of Object.entries(e))typeof S==`function`?this.writeFileLazy(t,S):Qi(S)?this.writeFileSync(t,S.content,void 0,{mode:S.mode,mtime:S.mtime}):this.writeFileSync(t,S)}ensureParentDirs(e){let t=m$1(e);t!==`/`&&(this.data.has(t)||(this.ensureParentDirs(t),this.data.set(t,{type:`directory`,mode:493,mtime:new Date})))}writeFileSync(e,t,S,w){h$3(e,`write`);let E=c$2(e);this.ensureParentDirs(E);let D=o(t,l$1(S));this.data.set(E,{type:`file`,content:D,mode:w?.mode??420,mtime:w?.mtime??new Date})}writeFileLazy(e,t,S){h$3(e,`write`);let w=c$2(e);this.ensureParentDirs(w),this.data.set(w,{type:`file`,lazy:t,mode:S?.mode??420,mtime:S?.mtime??new Date})}async materializeLazy(e,t){let S=await t.lazy(),w={type:`file`,content:typeof S==`string`?ot.encode(S):S,mode:t.mode,mtime:t.mtime};return this.data.set(e,w),w}async readFile(e,t){return h$4(await this.readFileBuffer(e),l$1(t))}async readFileBuffer(e){h$3(e,`open`);let t=this.resolvePathWithSymlinks(e),S=this.data.get(t);if(!S)throw Error(`ENOENT: no such file or directory, open '${e}'`);if(S.type!==`file`)throw Error(`EISDIR: illegal operation on a directory, read '${e}'`);if(`lazy`in S){let e=await this.materializeLazy(t,S);return e.content instanceof Uint8Array?e.content:ot.encode(e.content)}return S.content instanceof Uint8Array?S.content:ot.encode(S.content)}async writeFile(e,t,S){this.writeFileSync(e,t,S)}async appendFile(e,t,S){h$3(e,`append`);let w=c$2(e),E=this.data.get(w);if(E&&E.type===`directory`)throw Error(`EISDIR: illegal operation on a directory, write '${e}'`);let D=o(t,l$1(S));if(E?.type===`file`){let e=E;`lazy`in e&&(e=await this.materializeLazy(w,e));let t=`content`in e&&e.content instanceof Uint8Array?e.content:ot.encode(`content`in e?e.content:``),S=new Uint8Array(t.length+D.length);S.set(t),S.set(D,t.length),this.data.set(w,{type:`file`,content:S,mode:e.mode,mtime:new Date})}else this.writeFileSync(e,t,S)}async exists(e){if(e.includes(`\0`))return!1;try{let t=this.resolvePathWithSymlinks(e);return this.data.has(t)}catch{return!1}}async stat(e){h$3(e,`stat`);let t=this.resolvePathWithSymlinks(e),S=this.data.get(t);if(!S)throw Error(`ENOENT: no such file or directory, stat '${e}'`);S.type===`file`&&`lazy`in S&&(S=await this.materializeLazy(t,S));let w=0;return S.type===`file`&&`content`in S&&S.content&&(w=S.content instanceof Uint8Array?S.content.length:ot.encode(S.content).length),{isFile:S.type===`file`,isDirectory:S.type===`directory`,isSymbolicLink:!1,mode:S.mode,size:w,mtime:S.mtime||new Date}}async lstat(e){h$3(e,`lstat`);let t=this.resolveIntermediateSymlinks(e),S=this.data.get(t);if(!S)throw Error(`ENOENT: no such file or directory, lstat '${e}'`);if(S.type===`symlink`)return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:S.mode,size:S.target.length,mtime:S.mtime||new Date};S.type===`file`&&`lazy`in S&&(S=await this.materializeLazy(t,S));let w=0;return S.type===`file`&&`content`in S&&S.content&&(w=S.content instanceof Uint8Array?S.content.length:ot.encode(S.content).length),{isFile:S.type===`file`,isDirectory:S.type===`directory`,isSymbolicLink:!1,mode:S.mode,size:w,mtime:S.mtime||new Date}}resolveIntermediateSymlinks(e){let t=c$2(e);if(t===`/`)return`/`;let S=t.slice(1).split(`/`);if(S.length<=1)return t;let w=``,E=new Set;for(let t=0;t<S.length-1;t++){let D=S[t];w=`${w}/${D}`;let O=this.data.get(w),k=0,j=40;for(;O&&O.type===`symlink`&&k<40;){if(E.has(w))throw Error(`ELOOP: too many levels of symbolic links, lstat '${e}'`);E.add(w),w=v$2(w,O.target),O=this.data.get(w),k++}if(k>=40)throw Error(`ELOOP: too many levels of symbolic links, lstat '${e}'`)}return`${w}/${S[S.length-1]}`}resolvePathWithSymlinks(e){let t=c$2(e);if(t===`/`)return`/`;let S=t.slice(1).split(`/`),w=``,E=new Set;for(let t of S){w=`${w}/${t}`;let S=this.data.get(w),D=0,O=40;for(;S&&S.type===`symlink`&&D<40;){if(E.has(w))throw Error(`ELOOP: too many levels of symbolic links, open '${e}'`);E.add(w),w=v$2(w,S.target),S=this.data.get(w),D++}if(D>=40)throw Error(`ELOOP: too many levels of symbolic links, open '${e}'`)}return w}async mkdir(e,t){this.mkdirSync(e,t)}mkdirSync(e,t){h$3(e,`mkdir`);let S=c$2(e);if(this.data.has(S)){if(this.data.get(S)?.type===`file`)throw Error(`EEXIST: file already exists, mkdir '${e}'`);if(!t?.recursive)throw Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let w=m$1(S);if(w!==`/`&&!this.data.has(w))if(t?.recursive)this.mkdirSync(w,{recursive:!0});else throw Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.data.set(S,{type:`directory`,mode:493,mtime:new Date})}async readdir(e){return(await this.readdirWithFileTypes(e)).map(e=>e.name)}async readdirWithFileTypes(e){h$3(e,`scandir`);let t=c$2(e),S=this.data.get(t);if(!S)throw Error(`ENOENT: no such file or directory, scandir '${e}'`);let w=new Set;for(;S&&S.type===`symlink`;){if(w.has(t))throw Error(`ELOOP: too many levels of symbolic links, scandir '${e}'`);w.add(t),t=v$2(t,S.target),S=this.data.get(t)}if(!S)throw Error(`ENOENT: no such file or directory, scandir '${e}'`);if(S.type!==`directory`)throw Error(`ENOTDIR: not a directory, scandir '${e}'`);let E=t===`/`?`/`:`${t}/`,D=new Map;for(let[e,S]of this.data.entries())if(e!==t&&e.startsWith(E)){let t=e.slice(E.length),w=t.split(`/`)[0];w&&!t.includes(`/`,w.length)&&!D.has(w)&&D.set(w,{name:w,isFile:S.type===`file`,isDirectory:S.type===`directory`,isSymbolicLink:S.type===`symlink`})}return Array.from(D.values()).sort((e,t)=>e.name<t.name?-1:e.name>t.name?1:0)}async rm(e,t){h$3(e,`rm`);let S=c$2(e),w=this.data.get(S);if(!w){if(t?.force)return;throw Error(`ENOENT: no such file or directory, rm '${e}'`)}if(w.type===`directory`){let w=await this.readdir(S);if(w.length>0){if(!t?.recursive)throw Error(`ENOTEMPTY: directory not empty, rm '${e}'`);for(let e of w){let w=p$1(S,e);await this.rm(w,t)}}}this.data.delete(S)}async cp(e,t,S){h$3(e,`cp`),h$3(t,`cp`);let w=c$2(e),E=c$2(t),D=this.data.get(w);if(!D)throw Error(`ENOENT: no such file or directory, cp '${e}'`);if(D.type===`file`)if(this.ensureParentDirs(E),`content`in D){let e=D.content instanceof Uint8Array?new Uint8Array(D.content):D.content;this.data.set(E,{...D,content:e})}else this.data.set(E,{...D});else if(D.type===`symlink`)this.ensureParentDirs(E),this.data.set(E,{...D});else if(D.type===`directory`){if(!S?.recursive)throw Error(`EISDIR: is a directory, cp '${e}'`);await this.mkdir(E,{recursive:!0});let t=await this.readdir(w);for(let e of t){let t=p$1(w,e),D=p$1(E,e);await this.cp(t,D,S)}}}async mv(e,t){await this.cp(e,t,{recursive:!0}),await this.rm(e,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(e,t){return y(e,t)}async chmod(e,t){h$3(e,`chmod`);let S=c$2(e),w=this.data.get(S);if(!w)throw Error(`ENOENT: no such file or directory, chmod '${e}'`);w.mode=t}async symlink(e,t){h$3(t,`symlink`);let S=c$2(t);if(this.data.has(S))throw Error(`EEXIST: file already exists, symlink '${t}'`);this.ensureParentDirs(S),this.data.set(S,{type:`symlink`,target:e,mode:511,mtime:new Date})}async link(e,t){h$3(e,`link`),h$3(t,`link`);let S=c$2(e),w=c$2(t),E=this.data.get(S);if(!E)throw Error(`ENOENT: no such file or directory, link '${e}'`);if(E.type!==`file`)throw Error(`EPERM: operation not permitted, link '${e}'`);if(this.data.has(w))throw Error(`EEXIST: file already exists, link '${t}'`);let D=E;`lazy`in D&&(D=await this.materializeLazy(S,D)),this.ensureParentDirs(w),this.data.set(w,{type:`file`,content:D.content,mode:D.mode,mtime:D.mtime})}async readlink(e){h$3(e,`readlink`);let t=c$2(e),S=this.data.get(t);if(!S)throw Error(`ENOENT: no such file or directory, readlink '${e}'`);if(S.type!==`symlink`)throw Error(`EINVAL: invalid argument, readlink '${e}'`);return S.target}async realpath(e){h$3(e,`realpath`);let t=this.resolvePathWithSymlinks(e);if(!this.data.has(t))throw Error(`ENOENT: no such file or directory, realpath '${e}'`);return t}async utimes(e,t,S){h$3(e,`utimes`);let w=c$2(e),E=this.resolvePathWithSymlinks(w),D=this.data.get(E);if(!D)throw Error(`ENOENT: no such file or directory, utimes '${e}'`);D.mtime=S}};function Ji(e){let t=e;return typeof t.mkdirSync==`function`&&typeof t.writeFileSync==`function`}function eo(e,t){e.mkdirSync(`/bin`,{recursive:!0}),e.mkdirSync(`/usr/bin`,{recursive:!0}),t&&(e.mkdirSync(`/home/user`,{recursive:!0}),e.mkdirSync(`/tmp`,{recursive:!0}))}function to(e){e.mkdirSync(`/dev`,{recursive:!0}),e.writeFileSync(`/dev/null`,``),e.writeFileSync(`/dev/zero`,new Uint8Array),e.writeFileSync(`/dev/stdin`,``),e.writeFileSync(`/dev/stdout`,``),e.writeFileSync(`/dev/stderr`,``)}function so(e,t){e.mkdirSync(`/proc/self/fd`,{recursive:!0}),e.writeFileSync(`/proc/version`,`${xi$1}
476
476
  `),e.writeFileSync(`/proc/self/exe`,`/bin/bash`),e.writeFileSync(`/proc/self/cmdline`,`bash\0`),e.writeFileSync(`/proc/self/comm`,`bash
477
477
  `),e.writeFileLazy?e.writeFileLazy(`/proc/self/status`,()=>_i$1(t)):e.writeFileSync(`/proc/self/status`,_i$1(t)),e.writeFileSync(`/proc/self/fd/0`,`/dev/stdin`),e.writeFileSync(`/proc/self/fd/1`,`/dev/stdout`),e.writeFileSync(`/proc/self/fd/2`,`/dev/stderr`)}function un(e,t,S={pid:1,ppid:0,uid:1e3,gid:1e3}){Ji(e)&&(eo(e,t),to(e),so(e,S))}var ro=[`allexport`,`errexit`,`noglob`,`noclobber`,`noexec`,`nounset`,`pipefail`,`posix`,`verbose`,`xtrace`],no=[`braceexpand`,`hashall`,`interactive-comments`];function Ls(e){let t=[],S=[...no.map(e=>({name:e,enabled:!0})),...ro.map(t=>({name:t,enabled:e[t]}))].sort((e,t)=>e.name.localeCompare(t.name));for(let e of S)e.enabled&&t.push(e.name);return t.join(`:`)}function lt(e){e.state.env.set(`SHELLOPTS`,Ls(e.state.options))}var io=[`dotglob`,`expand_aliases`,`extglob`,`failglob`,`globskipdots`,`globstar`,`lastpipe`,`nocaseglob`,`nocasematch`,`nullglob`,`xpg_echo`];function Fs(e){let t=[];for(let S of io)e[S]&&t.push(S);return t.join(`:`)}function Ms(e){e.state.env.set(`BASHOPTS`,Fs(e.state.shoptOptions))}var oo=`BASH_ALIAS_`;function fn(e){return e.parts.length===1?e.parts[0].type===`Literal`:!1}function dn(e){if(e.parts.length!==1)return null;let t=e.parts[0];return t.type===`Literal`?t.value:null}function hn(e,t){return e.env.get(`${oo}${t}`)}function Ws(e,t,S){if(!t.name||!fn(t.name))return t;let w=dn(t.name);if(!w)return t;let E=hn(e,w);if(!E||S.has(w))return t;try{S.add(w);let D=new V,O=E,k=E.endsWith(` `);if(!k)for(let e of t.args){let t=mn(e);O+=` ${t}`}let j;try{j=D.parse(O)}catch(e){if(e instanceof G$1)throw e;return t}if(j.statements.length!==1||j.statements[0].pipelines.length!==1||j.statements[0].pipelines[0].commands.length!==1)return pn(t,E);let F=j.statements[0].pipelines[0].commands[0];if(F.type!==`SimpleCommand`)return pn(t,E);let L={...F,assignments:[...t.assignments,...F.assignments],redirections:[...F.redirections,...t.redirections],line:t.line};if(k&&t.args.length>0&&(L={...L,args:[...L.args,...t.args]},L.args.length>0)){let t=L.args[0];if(fn(t)){let w=dn(t);if(w&&hn(e,w)){let w={type:`SimpleCommand`,name:t,args:L.args.slice(1),assignments:[],redirections:[]},E=Ws(e,w,S);E!==w&&(L={...L,name:E.name,args:[...E.args]})}}}return L}catch(e){throw S.delete(w),e}}function pn(e,t){let S=t;for(let t of e.args){let e=mn(t);S+=` ${e}`}let w=new V;return{type:`SimpleCommand`,name:w.parseWordFromString(`eval`,!1,!1),args:[w.parseWordFromString(`'${S.replace(/'/g,`'\\''`)}'`,!1,!1)],assignments:e.assignments,redirections:e.redirections,line:e.line}}function mn(e){let t=``;for(let S of e.parts)switch(S.type){case`Literal`:t+=S.value.replace(/([\s"'$`\\*?[\]{}()<>|&;#!])/g,`\\$1`);break;case`SingleQuoted`:t+=`'${S.value}'`;break;case`DoubleQuoted`:t+=`"${S.parts.map(e=>e.type===`Literal`?e.value:`$${e.type}`).join(``)}"`;break;case`ParameterExpansion`:t+=`\${${S.parameter}}`;break;case`CommandSubstitution`:t+=`$(...)`;break;case`ArithmeticExpansion`:t+=`$((${S.expression}))`;break;case`Glob`:t+=S.pattern;break;default:break}return t}async function yn(e,t){let S=t.parts.map(e=>e.type===`Literal`?e.value:`\0`).join(``),w=S.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);if(!w||!S.endsWith(`)`))return null;let E=w[1],D=[],O=!1,k=``,j=!1;for(let S of t.parts)if(S.type===`Literal`){let e=S.value;if(!O){let t=e.indexOf(`=(`);t!==-1&&(O=!0,e=e.slice(t+2))}if(O){e.endsWith(`)`)&&(e=e.slice(0,-1));let t=e.split(/(\s+)/);for(let e of t)/^\s+$/.test(e)?(k||j)&&(D.push(k),k=``,j=!1):e&&(k+=e)}}else if(O)if(S.type===`BraceExpansion`)if(/^\[.+\]=/.test(k))k+=En$1({type:`Word`,parts:[S]});else{(k||j)&&(D.push(k),k=``,j=!1);let t=await wl(e,{type:`Word`,parts:[S]});D.push(...t.values)}else{(S.type===`SingleQuoted`||S.type===`DoubleQuoted`||S.type===`Escaped`)&&(j=!0);let t=await Pt$1(e,{type:`Word`,parts:[S]});k+=t}return(k||j)&&D.push(k),`${E}=(${D.map(e=>/^\[.+\]=/.test(e)?e:e===``?`''`:/[\s"'\\$`!*?[\]{}|&;<>()]/.test(e)&&!e.startsWith(`'`)&&!e.startsWith(`"`)?`'${e.replace(/'/g,`'\\''`)}'`:e).join(` `)})`}async function gn(e,t){let S=-1,w=-1,E=!1;for(let e=0;e<t.parts.length;e++){let D=t.parts[e];if(D.type===`Literal`){let t=D.value.indexOf(`+=`);if(t!==-1){let O=D.value.slice(0,t);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(O)){S=e,w=t,E=!0;break}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(O)){S=e,w=t,E=!0;break}}let O=D.value.indexOf(`=`);if(O!==-1&&(O===0||D.value[O-1]!==`+`)){let t=D.value.slice(0,O);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)||/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(t)){S=e,w=O;break}}}}if(S===-1)return null;let D=t.parts.slice(0,S),O=t.parts[S];if(O.type!==`Literal`)return null;let k=E?2:1,j=O.value.slice(0,w),F=O.value.slice(w+k),L=t.parts.slice(S+1),B=``;for(let t of D)B+=await Pt$1(e,{type:`Word`,parts:[t]});B+=j;let H={type:`Word`,parts:F===``?L:[{type:`Literal`,value:F},...L]},q=H.parts.length>0?await Pt$1(e,H):``;return`${B}${E?`+=`:`=`}${q}`}var ao=[`tar`,`yq`,`xan`,`sqlite3`,`python3`,`python`];function wn(e){return ao.includes(e)}var W=Object.freeze({stdout:``,stderr:``,exitCode:0});function z(e=``){return{stdout:e,stderr:``,exitCode:0}}function A(e,t=1){return{stdout:``,stderr:e,exitCode:t}}function _(e,t,S){return{stdout:e,stderr:t,exitCode:S}}function Q(e){return{stdout:``,stderr:``,exitCode:e?0:1}}function Ne(e,t,S=``,w=``){throw new b(e,t,S,w)}function le(e){let t=e.state.fileDescriptors;if(t&&t.size>=e.limits.maxFileDescriptors)throw new b(`too many open file descriptors (max ${e.limits.maxFileDescriptors})`,`file_descriptors`)}function zs(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new f;return W}if(t.length>1)throw new d(1,``,`bash: break: too many arguments
@@ -1245,7 +1245,7 @@ Karpathy's insight: "The tedious part of maintaining a knowledge base is not the
1245
1245
 
1246
1246
  `}function buildWorkflowHandler(e,t,S,w){return async E=>{let D=typeof E.cwd==`string`?E.cwd:void 0,O=await resolveProjectConfigContext(t.resolveCwd,t.config,D);if(!O.ok)return textResult(`Error: ${O.error}`,!0);let k=E[S],j=typeof k==`string`?k:``;return textPlusStructured(`${buildWorkflowFrame(e)}${w(j,O.config.content.dir)}`,{previewUrl:null})}}async function resolveServerUrl(e,t){return typeof e==`function`?await e(t):e}async function resolveConfig(e,t){return typeof e==`function`?await e(t):e}async function resolveProjectConfigContext(e,t,S){let w;try{w=await e(S)}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}try{let e=await resolveConfig(t,w);return{ok:!0,cwd:w,config:e}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}async function resolveProjectServerContext(e,t,S,w){let E=await resolveProjectConfigContext(e,t,w);if(!E.ok)return E;let{cwd:D,config:O}=E;try{return{ok:!0,cwd:D,config:O,url:await resolveServerUrl(S,D)}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}function normalizeDocName(e){let t=e.toLowerCase();return t.endsWith(`.md`)?{ok:!0,docName:e.slice(0,-3)}:t.endsWith(`.mdx`)?{ok:!0,docName:e.slice(0,-4)}:t.endsWith(`.markdown`)?{ok:!1,error:`Error: docName "${e}" ends in ".markdown", which is not a supported extension. Use ".md" or ".mdx", or strip the extension to let the server auto-detect.`}:{ok:!0,docName:e}}function normalizeResponse(e,t){if(e.ok){if(typeof t!=`object`||!t||Array.isArray(t))return{ok:!0,data:t};let{ok:e,...S}=t;return{ok:!0,...S}}if(typeof t!=`object`||!t||Array.isArray(t))return{ok:!1,error:`Server returned HTTP ${e.status} with non-object body`};let S=t;if(typeof S.type==`string`&&typeof S.title==`string`){let{type:e,title:t,status:w,instance:E,detail:D,...O}=S;return{...O,ok:!1,error:t,type:e,...typeof w==`number`?{status:w}:{},...typeof E==`string`?{instance:E}:{},...typeof D==`string`?{detail:D}:{}}}let{ok:w,error:E,...D}=S,O=typeof E==`string`?E:typeof S.message==`string`?S.message:`Server returned HTTP ${e.status}`;return{...D,ok:!1,error:O}}async function httpGet(e,t){let S;try{S=await fetch(`${e}${t}`,{signal:AbortSignal.timeout(3e4)})}catch(e){return{ok:!1,error:`Server unreachable: ${e instanceof Error?e.message:e}`}}let w;try{w=await S.json()}catch(e){let t=e instanceof Error?e.message:String(e);return S.ok?{ok:!1,error:`Server returned 2xx response with non-JSON body: ${t}`}:{ok:!1,error:`Server returned HTTP ${S.status} with non-JSON body: ${t}`}}return normalizeResponse(S,w)}async function httpPost(e,t,S){let w;if(S!==void 0)try{w=JSON.stringify(S)}catch(e){return{ok:!1,error:`Request body is not JSON-serializable: ${e instanceof Error?e.message:String(e)}`}}let E;try{E=await fetch(`${e}${t}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:w,signal:AbortSignal.timeout(3e4)})}catch(e){return{ok:!1,error:`Server unreachable: ${e instanceof Error?e.message:e}`}}let D;try{D=await E.json()}catch(e){let t=e instanceof Error?e.message:String(e);return E.ok?{ok:!1,error:`Server returned 2xx response with non-JSON body: ${t}`}:{ok:!1,error:`Server returned HTTP ${E.status} with non-JSON body: ${t}`}}return normalizeResponse(E,D)}function parseRenameCollidingPairs(e){return Array.isArray(e)?e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{existing:t,incoming:S,to:w}=e;return typeof t==`string`&&typeof S==`string`&&typeof w==`string`?[{existing:t,incoming:S,to:w}]:[]}):[]}function mergeCascade(e,t){let S={...e},w=new Map;for(let[e,E]of Object.entries(t))if(E!==void 0)if(Array.isArray(E)){let t=Array.isArray(S[e])?[...S[e]]:[],D=w.get(e)??new Set(t.map(toDedupKey));w.set(e,D);for(let e of E){let S=toDedupKey(e);D.has(S)||(D.add(S),t.push(e))}S[e]=t}else S[e]=E;return S}function mergePatch(e,t){let S={...e};for(let[e,w]of Object.entries(t))if(w!==void 0){if(isEmpty$1(w)){delete S[e];continue}S[e]=w}return S}function mergeDeclarations(e,t){return{...e,...t}}function isEmpty$1(e){return isFrontmatterValueEmpty(e)}function toDedupKey(e){return typeof e==`string`?`s:${e}`:typeof e==`number`?`n:${e}`:typeof e==`boolean`?`b:${e}`:e===null?`null`:e===void 0?`undefined`:`j:${JSON.stringify(e)}`}function resolveNestedFrontmatterWithSources(e,t){let S=t.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``),w=S===``||S===`.`?[]:S.split(`/`).filter(e=>e.length>0),E={},D={},O={},k={},j=!1;for(let t=0;t<=w.length;t++){let S=t===0?``:w.slice(0,t).join(`/`),F=t===0?resolve(e,`.ok`):resolve(e,S,`.ok`),L=resolve(F,`frontmatter.yml`);if(existsSync(L)){let e=readFrontmatterYaml(L);if(e!=null){E=mergeCascade(E,e);for(let t of Object.keys(e))e[t]!==void 0&&(D[t]=S);j=!0}}let B=resolve(F,`schema.yml`);if(existsSync(B)){let e=readFolderSchemaYaml(B);if(e!=null&&Object.keys(e).length>0){O=mergeDeclarations(O,e);for(let t of Object.keys(e))k[t]=S;j=!0}}}return j?{merged:coerceWellKnown(E),sources:D,declarations:O,declarationSources:k}:{merged:{},sources:{},declarations:{},declarationSources:{}}}function coerceWellKnown(e){let t={};for(let[S,w]of Object.entries(e))t[S]=w;return typeof e.title==`string`?t.title=e.title:delete t.title,typeof e.description==`string`?t.description=e.description:delete t.description,Array.isArray(e.tags)?t.tags=e.tags.filter(e=>typeof e==`string`):delete t.tags,t}const warnedPaths=new Set;function readFolderSchemaYaml(e){let t;try{t=readFileSync(e,`utf-8`)}catch{return null}let S;try{S=(0,import_dist$1.parse)(t)}catch(t){if(!warnedPaths.has(e)){warnedPaths.add(e);let S=t instanceof Error?t.message:String(t);console.warn(`[ok-folder-schema] malformed YAML at ${e} — folder declarations skipped. Fix the file or delete it. Reason: ${S}`)}return null}if(S==null)return warnedPaths.delete(e),{};let w=FolderSchemaSchema.safeParse(S);return w.success?(warnedPaths.delete(e),w.data.declarations):(warnedPaths.has(e)||(warnedPaths.add(e),console.warn(`[ok-folder-schema] invalid shape at ${e} — folder declarations skipped. ${w.error.message}`)),null)}function readFrontmatterYaml(e){let t;try{t=readFileSync(e,`utf-8`)}catch{return null}let S;try{S=(0,import_dist$1.parse)(t)}catch(t){if(!warnedPaths.has(e)){warnedPaths.add(e);let S=t instanceof Error?t.message:String(t);console.warn(`[ok-folder-frontmatter] malformed YAML at ${e} — folder defaults skipped. Fix the file or delete it. Reason: ${S}`)}return null}return typeof S!=`object`||!S||Array.isArray(S)?null:(warnedPaths.delete(e),S)}function parentFolderOf(e){let t=e.lastIndexOf(`/`);return t===-1?``:e.slice(0,t)}const GIT_TIMEOUT_MS$2=5e3;function projectHasGitDir(e){try{return statSync(resolve(e,`.git`)).isDirectory()}catch{return!1}}function openProjectGit(e){return esm_default({baseDir:resolve(e),timeout:{block:GIT_TIMEOUT_MS$2}})}async function readProjectGitLog(e,t,S=5){if(!projectHasGitDir(e))return{commits:[],source:`git-absent`};let w=openProjectGit(e),E=``;try{E=await w.raw(`log`,`-${Math.max(1,S)}`,`--format=%H|%aI|%an|%s`,`--follow`,`--`,t)}catch{return{commits:[],source:`git`}}let D=[];for(let e of E.split(`
1247
1247
  `)){if(!e)continue;let t=e.indexOf(`|`);if(t<0)continue;let S=e.indexOf(`|`,t+1);if(S<0)continue;let w=e.indexOf(`|`,S+1);w<0||D.push({hash:e.slice(0,t),date:e.slice(t+1,S),authorName:e.slice(S+1,w),subject:e.slice(w+1)})}return{commits:D,source:`git`}}const GIT_TIMEOUT_MS$1=5e3;async function currentProjectBranch(e){try{let t=(await esm_default({baseDir:e,timeout:{block:GIT_TIMEOUT_MS$1}}).revparse([`--abbrev-ref`,`HEAD`])).trim();return t&&t!==`HEAD`?t:null}catch{return null}}function openShadowGit(e,t){return esm_default({baseDir:t,timeout:{block:GIT_TIMEOUT_MS$1}}).env({GIT_DIR:e,GIT_WORK_TREE:t})}function writerIdFromRef(e,t){let S=getWipRefPattern(t);return e.startsWith(S)?e.slice(S.length):e}async function logOnRef(e,t,S,w,E){let D=``;try{D=await e.raw(`log`,t,`-${Math.max(1,E*2)}`,`--format=%H%x00%aI%x00%an%x00%s%x00%B%x1e`,`--`,S)}catch{return[]}let O=writerIdFromRef(t,w),k=parseWriterId(O),j=[];for(let e of D.split(``)){let t=e.trimStart();if(!t)continue;let[S=``,E=``,D=``,F=``,L=``]=t.split(`\0`),B=S.trim();B.length===40&&j.push({hash:B,date:E,writerName:D,message:F,contributors:readContributors(L),writerId:O,isAgent:k.isAgent,writerClassification:k.classification,branch:w})}return j}async function readShadowLog(e,t,S=5){let w=getShadowRepoPath(e);if(!w)return{commits:[],source:`shadow-repo-absent`};let E=await currentProjectBranch(e);if(!E)return{commits:[],source:`shadow-repo`};let D=openShadowGit(w,resolve(e)),O=``;try{O=await D.raw(`for-each-ref`,getWipRefPattern(E),`--format=%(refname)`)}catch{return{commits:[],source:`shadow-repo`}}let k=O.split(`
1248
- `).map(e=>e.trim()).filter(Boolean);return k.length===0?{commits:[],source:`shadow-repo`}:{commits:(await Promise.all(k.map(e=>logOnRef(D,e,t,E,S)))).flat().sort((e,t)=>t.date.localeCompare(e.date)).slice(0,S),source:`shadow-repo`}}function resolveTemplatesAvailable(e,t,S={}){let w=normalizeFolderPath(t),E=w===``?[]:w.split(`/`),D=new Set,O=[];collectFromFolder(e,w,`local`,D,O);for(let t=E.length-1;t>=1;t--)collectFromFolder(e,E.slice(0,t).join(`/`),`inherited`,D,O);return E.length>0&&collectFromFolder(e,``,`inherited`,D,O),O}function collectFromFolder(e,t,S,w,E){let D=t?join(e,t,`.ok`,`templates`):join(e,`.ok`,`templates`);if(!existsSync(D))return;let O;try{O=readdirSync(D)}catch{return}for(let e of O){if(!e.endsWith(`.md`))continue;let O=e.slice(0,-3);if(w.has(O))continue;let k=join(D,e),j;try{j=statSync(k)}catch{continue}if(!j.isFile())continue;let F=readTemplateMeta(k),L={name:O,path:t?posix.join(t,`.ok`,`templates`,e):posix.join(`.ok`,`templates`,e),source_folder:t,scope:S};F.title!==void 0&&(L.title=F.title),F.description!==void 0&&(L.description=F.description),w.add(O),E.push(L)}}function normalizeFolderPath(e){return e.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``).replace(/^\.$/,``)}const templateMetaWarnedPaths=new Set;function readTemplateMeta(e){let t;try{t=readFileSync(e,`utf-8`)}catch(t){if(t?.code!==`ENOENT`&&!templateMetaWarnedPaths.has(e)){templateMetaWarnedPaths.add(e);let S=t instanceof Error?t.message:String(t);console.warn(`[ok-templates] failed to read template at ${e} — metadata skipped. Reason: ${S}`)}return{}}let S=extractFrontmatterYaml(t);if(S===null)return{};let w;try{w=(0,import_dist$1.parse)(S)}catch(t){if(!templateMetaWarnedPaths.has(e)){templateMetaWarnedPaths.add(e);let S=t instanceof Error?t.message:String(t);console.warn(`[ok-templates] malformed YAML frontmatter at ${e} — title/description unavailable. Reason: ${S}`)}return{}}if(typeof w!=`object`||!w)return{};let E=w,D={};return typeof E.title==`string`&&(D.title=E.title),typeof E.description==`string`&&(D.description=E.description),D}function extractFrontmatterYaml(e){let t=e.replace(/^/,``),S=/^[ \t]*---\r?\n([\s\S]*?)\r?\n[ \t]*---(\r?\n|$)/.exec(t);return S?S[1]??null:null}const FRONTMATTER_RE=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/;function parseFrontmatterRaw(e){let t=e.match(FRONTMATTER_RE);if(!t)return null;try{let e=(0,import_dist$1.parse)(t[1]);if(typeof e==`object`&&e&&!Array.isArray(e))return e}catch{}return null}const DIRECTORY_SCAN_CAP=1e3,DIR_SKIP=new Set([`.git`,`.ok`,`node_modules`,`.changeset`,`.claude`,`.agents`,`dist`,`build`]),WIKI_EXT_RE=/\.(md|mdx)$/i;function pathToDocName$1(e){return e.replace(/\.md$/,``).replace(/\.mdx$/,``)}const fmReadWarnedPaths=new Set;async function readFrontmatter(e){try{return parseFrontmatterRaw(await readFile$1(e,`utf-8`))??{}}catch(t){if(t?.code!==`ENOENT`&&!fmReadWarnedPaths.has(e)){fmReadWarnedPaths.add(e);let S=t instanceof Error?t.message:String(t);console.warn(`[ok-enrich] failed to read frontmatter at ${e} — enrichment degraded for this file. Reason: ${S}`)}return null}}async function fetchBacklinks(e,t){if(!e)return null;let S=await httpGet(e,`/api/backlinks?docName=${encodeURIComponent(t)}`);if(!S.ok)return null;let w=S.backlinks??S.results??S.links;if(!Array.isArray(w))return[];let E=[];for(let e of w){if(typeof e!=`object`||!e)continue;let t=e,S=typeof t.docName==`string`?t.docName:typeof t.source==`string`?t.source:typeof t.page==`string`?t.page:void 0;S&&E.push({source:S,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null})}return E}const BACKLINK_COUNT_CHUNK=100;async function fetchBacklinkCountsBatch(e,t){if(!e||t.length===0)return null;let S=[...new Set(t)],w=[];for(let e=0;e<S.length;e+=BACKLINK_COUNT_CHUNK)w.push(S.slice(e,e+BACKLINK_COUNT_CHUNK));let E=await Promise.all(w.map(async t=>{let S=await httpGet(e,`/api/backlink-counts?docNames=${encodeURIComponent(t.join(`,`))}`);return S.ok?S.counts??{}:null})),D=new Map,O=!1;for(let e of E)if(e){O=!0;for(let[t,S]of Object.entries(e))typeof S==`number`&&Number.isFinite(S)&&D.set(t,S)}return O?D:null}async function fetchForwardLinks(e,t){if(!e)return null;let S=await httpGet(e,`/api/forward-links?docName=${encodeURIComponent(t)}`);if(!S.ok)return null;let w=S.forwardLinks??S.links??S.results;if(!Array.isArray(w))return[];let E=[];for(let e of w){if(typeof e!=`object`||!e)continue;let t=e;if(t.kind===`external`&&typeof t.url==`string`){E.push({kind:`external`,url:t.url,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null});continue}let S=typeof t.docName==`string`?t.docName:void 0;S&&E.push({kind:`doc`,docName:S,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null})}return E}function mergeFileAndFolder(e,t,S){let w=S?resolveNestedFrontmatterWithSources(S,parentFolderOf(t)):{merged:{},sources:{},declarations:{},declarationSources:{}},E=w.merged,D=mergeCascade(E,e??{});return{title:typeof D.title==`string`?D.title:void 0,description:typeof D.description==`string`?D.description:void 0,tags:Array.isArray(D.tags)?D.tags.filter(e=>typeof e==`string`):[],frontmatter:D,schemaDeclarations:w.declarations}}async function enrichPath(e,t,S={}){let w=resolveWithinRoot(t.projectDir,e);if(!w.ok)throw Error(`enrichPath: ${w.reason}`);let E=w.rel,D=w.abs,O=t.historyDepth??5,k=S.includeRichFields===!0,j=readFrontmatter(D);if(!k){let e=mergeFileAndFolder(await j,E,t.projectDir);return{path:E,title:e.title,description:e.description,tags:e.tags,frontmatter:e.frontmatter,schema_declarations:Object.keys(e.schemaDeclarations).length>0?e.schemaDeclarations:void 0,backlinkCount:null,backlinks:null,forwardLinkCount:null,forwardLinks:null,history:null,historySource:null,projectHistory:null,projectHistorySource:null}}let[F,L,B,H,q]=await Promise.all([j,fetchBacklinks(t.serverUrl,pathToDocName$1(E)).catch(()=>null),fetchForwardLinks(t.serverUrl,pathToDocName$1(E)).catch(()=>null),readShadowLog(t.projectDir,E,O).catch(()=>({commits:[],source:`shadow-repo`})),readProjectGitLog(t.projectDir,E,O).catch(()=>({commits:[],source:`git`}))]),J=mergeFileAndFolder(F,E,t.projectDir);return{path:E,title:J.title,description:J.description,tags:J.tags,frontmatter:J.frontmatter,schema_declarations:Object.keys(J.schemaDeclarations).length>0?J.schemaDeclarations:void 0,backlinkCount:L?.length??null,backlinks:L,forwardLinkCount:B?.length??null,forwardLinks:B,history:H.commits,historySource:H.source,projectHistory:q.commits,projectHistorySource:q.source}}async function scanDirectory(e,t){let S={directMdCount:0,recursiveMdCount:0,childDirCount:0,mostRecent:null,truncated:!1},w=0,E=[{path:e,depth:0}];for(;E.length>0;){let e=E.shift();if(!e)break;if(w>=DIRECTORY_SCAN_CAP){S.truncated=!0;break}let D;try{D=await readdir(e.path,{withFileTypes:!0})}catch{continue}for(let O of D){if(w>=DIRECTORY_SCAN_CAP){S.truncated=!0;break}w++;let D=O.name;if(O.isDirectory()){if(DIR_SKIP.has(D)||D.startsWith(`.`))continue;e.depth===0&&S.childDirCount++,E.push({path:`${e.path}/${D}`,depth:e.depth+1})}else if(O.isFile()&&WIKI_EXT_RE.test(D)){S.recursiveMdCount++,e.depth===0&&S.directMdCount++;let w=`${e.path}/${D}`;try{let e=await stat$1(w);(!S.mostRecent||e.mtimeMs>S.mostRecent.mtimeMs)&&(S.mostRecent={absPath:w,relPath:relative(t,w).split(/[\\/]/).filter(Boolean).join(`/`),mtimeMs:e.mtimeMs})}catch{}}}}return S}async function enrichDirectory(e,t){let S=resolveWithinRoot(t.projectDir,e);if(!S.ok)throw Error(`enrichDirectory: ${S.reason}`);let w=S.rel,E=S.abs,D=await scanDirectory(E,t.projectDir),O;if(D.mostRecent){let e=await readFrontmatter(D.mostRecent.absPath),t=typeof e?.title==`string`?e.title:void 0;O={path:D.mostRecent.relPath,title:t??basename(D.mostRecent.relPath),updatedAt:new Date(D.mostRecent.mtimeMs).toISOString()}}let k={path:w,type:`directory`,directMdCount:D.directMdCount,recursiveMdCount:D.recursiveMdCount,childDirCount:D.childDirCount,mostRecentMd:O,truncated:D.truncated},j=resolveNestedFrontmatterWithSources(t.projectDir,w),F=j.merged,L=F.title,B=F.description,H=F.tags??[];L!==void 0&&(k.title=L),B!==void 0&&(k.description=B),H.length>0&&(k.tags=H),Object.keys(F).length>0&&(k.frontmatter_defaults=F),Object.keys(j.declarations).length>0&&(k.schema_declarations=j.declarations);let q=resolveTemplatesAvailable(t.projectDir,w);return q.length>0&&(k.templates_available=q),k}async function enrichDirectoryRecursive(e,t,S){let w=await enrichDirectory(e,S);if(t<=1)return w;let E=w.path,D=resolve(S.projectDir,E),O;try{O=await readdir(D,{withFileTypes:!0})}catch{return w}let k=[];for(let e of O){if(!e.isDirectory()||RECURSIVE_LISTING_SKIP_DIRS.has(e.name)||e.name.startsWith(`.`))continue;let w=await enrichDirectoryRecursive(E?`${E}/${e.name}`:e.name,t-1,S);k.push(w)}return k.length>0&&(w.subfolders=k),w}const RECURSIVE_LISTING_SKIP_DIRS=new Set([`.git`,`.ok`,`node_modules`,`.venv`,`venv`,`env`,`__pycache__`,`vendor`,`dist`,`build`,`out`,`output`,`.next`,`.nuxt`,`.svelte-kit`,`.astro`,`.turbo`,`.cache`,`.parcel-cache`,`coverage`]);function applyNestedFolderRulesUpsert(e){if(!isAbsolute(e.projectDir))return{ok:!1,error:{code:`BAD_PROJECT_DIR`,message:`projectDir must be absolute`}};let t=[];for(let S of e.rules){let w=resolveTargetFolderFromMatch(S.new_match??S.match);if(!w.ok)return{ok:!1,error:{code:`MULTI_FOLDER_GLOB`,message:w.message,rule:S.match}};let E=w.folder?resolve(e.projectDir,w.folder):e.projectDir,D=resolve(e.projectDir);if(!E.startsWith(D+sep)&&E!==D)return{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved target folder escapes projectDir: ${E}`,rule:S.match}};let O=null,k=null;if(S.new_match!==void 0&&S.new_match!==S.match){let t=resolveTargetFolderFromMatch(S.match);if(!t.ok)return{ok:!1,error:{code:`MULTI_FOLDER_GLOB`,message:t.message,rule:S.match}};if(O=t.folder,k=t.folder?resolve(e.projectDir,t.folder):e.projectDir,!k.startsWith(D+sep)&&k!==D)return{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved source folder escapes projectDir: ${k}`,rule:S.match}}}t.push({targetFolder:w.folder,targetAbs:E,sourceFolder:O,sourceAbs:k,rule:S})}let S=[];for(let w of t)try{if(w.sourceAbs&&w.sourceAbs!==w.targetAbs){let t=join(w.sourceAbs,`.ok`,`frontmatter.yml`);existsSync(t)&&(unlinkSync(t),autoCleanOkDir(join(w.sourceAbs,`.ok`)),S.push({match:w.rule.match,path:relPathOf$1(e.projectDir,t),action:`deleted`}))}let t=join(w.targetAbs,`.ok`),E=join(t,`frontmatter.yml`),D=readExistingFrontmatter(E),O=Object.keys(w.rule.frontmatter).length===0?{}:mergePatch(D,w.rule.frontmatter);if(Object.keys(O).length===0){existsSync(E)&&(unlinkSync(E),autoCleanOkDir(t),S.push({match:w.rule.new_match??w.rule.match,path:relPathOf$1(e.projectDir,E),action:`deleted`}));continue}mkdirSync(t,{recursive:!0});let k=(0,import_dist$1.stringify)(O),j=`${E}.tmp.${process.pid}.${Date.now()}`;writeFileSync(j,k,`utf-8`),renameSync(j,E),S.push({match:w.rule.new_match??w.rule.match,path:relPathOf$1(e.projectDir,E),action:`written`})}catch(e){return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to write nested frontmatter for ${w.rule.match}: ${e.message}`,rule:w.rule.match},...S.length>0?{partiallyApplied:S}:{}}}return{ok:!0,applied:S}}function resolveTargetFolderFromMatch(e){let t=e.split(`/`).filter(e=>e.length>0),S=[],w=!1;for(let E of t){let t=/[*?[\]{}]/.test(E);if(w&&!t)return{ok:!1,message:`Glob "${e}" matches multiple folders (literal segment "${E}" appears after a glob). Split it into one rule per folder, e.g. folder_config({ action: "set-rule", rules: [{ match: "specs/foo/${E}/**", ... }, ...] }).`};if(t){if(w=!0,E!==`**`&&E!==`*`)return{ok:!1,message:`Glob "${e}" uses an unsupported pattern segment "${E}". Only "*" and "**" are supported in nested folder rules.`};continue}S.push(E)}return{ok:!0,folder:S.join(`/`)}}function applyNestedFolderSchemaUpsert(e){if(!isAbsolute(e.projectDir))return{ok:!1,error:{code:`BAD_PROJECT_DIR`,message:`projectDir must be absolute`}};let t=[];for(let S of e.rules){let w=resolveTargetFolderFromMatch(S.match);if(!w.ok)return{ok:!1,error:{code:`MULTI_FOLDER_GLOB`,message:w.message,rule:S.match}};let E=w.folder?resolve(e.projectDir,w.folder):e.projectDir,D=resolve(e.projectDir);if(!E.startsWith(D+sep)&&E!==D)return{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved target folder escapes projectDir: ${E}`,rule:S.match}};t.push({targetFolder:w.folder,targetAbs:E,rule:S})}let S=[];for(let w of t)try{let t=join(w.targetAbs,`.ok`),E=join(t,`schema.yml`),D={...readExistingSchema(E)};for(let[e,t]of Object.entries(w.rule.declarations))t===null?delete D[e]:D[e]=t;if(Object.keys(D).length===0){existsSync(E)&&(unlinkSync(E),autoCleanOkDir(t),S.push({match:w.rule.match,path:relPathOf$1(e.projectDir,E),action:`deleted`}));continue}mkdirSync(t,{recursive:!0});let O=(0,import_dist$1.stringify)({declarations:D}),k=`${E}.tmp.${process.pid}.${Date.now()}`;writeFileSync(k,O,`utf-8`),renameSync(k,E),S.push({match:w.rule.match,path:relPathOf$1(e.projectDir,E),action:`written`})}catch(e){return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to write nested schema for ${w.rule.match}: ${e.message}`,rule:w.rule.match},...S.length>0?{partiallyApplied:S}:{}}}return{ok:!0,applied:S}}function readExistingSchema(e){if(!existsSync(e))return{};let t=(0,import_dist$1.parse)(readFileSync(e,`utf-8`));if(t==null)return{};let S=FolderSchemaSchema.safeParse(t);if(!S.success)throw Error(`Malformed schema.yml at ${e}: ${S.error.issues.map(e=>e.message).join(`, `)}`);return S.data.declarations}function readExistingFrontmatter(e){if(!existsSync(e))return{};let t=(0,import_dist$1.parse)(readFileSync(e,`utf-8`));return typeof t!=`object`||!t||Array.isArray(t)?{}:{...t}}function autoCleanOkDir(e){if(!existsSync(e))return;let t;try{t=readdirSync(e)}catch{return}if(t.length===0)try{rmdirSync(e)}catch{}}function relPathOf$1(e,t){let S=resolve(e);return t.startsWith(S+sep)?t.slice(S.length+1).split(sep).join(`/`):t}const SUBSTITUTION_ALLOWLIST=[`date`,`user`],TOKEN_PATTERN=/\{\{([^{}\n]+?)\}\}/g;function validateSubstitution(e){let t=[];for(let S of e.matchAll(TOKEN_PATTERN)){let e=(S[1]??``).trim();isAllowedToken(e)||t.push({token:e,offset:S.index??0})}return t}function applySubstitution(e,t){return e.replace(TOKEN_PATTERN,(e,S)=>{let w=S.trim();return isAllowedToken(w)?t[w]:e})}function isAllowedToken(e){return SUBSTITUTION_ALLOWLIST.includes(e)}function todayIsoUtc(e=new Date){return`${e.getUTCFullYear().toString().padStart(4,`0`)}-${(e.getUTCMonth()+1).toString().padStart(2,`0`)}-${e.getUTCDate().toString().padStart(2,`0`)}`}const NAME_RE=/^[A-Za-z0-9_-]+$/;function applyTemplateWrite(e){let t=validateInputs(e.projectDir,e.folder,e.name);if(!t.ok)return{ok:!1,error:t.error};let S=validateTitle(e.frontmatter.title);if(!S.ok)return{ok:!1,error:S.error};let w=validateSubstitutionAllowlist(e.body);if(!w.ok)return{ok:!1,error:w.error};let{templatesDir:E,filePath:D}=templatePaths(e.projectDir,t.folderRel,e.name),O=serializeFrontmatter(e.frontmatter),k=O?`---\n${O}---\n${e.body}`:e.body;try{mkdirSync(E,{recursive:!0})}catch(t){return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to create template directory at ${relPathOf(e.projectDir,E)}: ${t.message}`}}}let j=!existsSync(D),F=`${D}.tmp.${process.pid}.${Date.now()}`;try{writeFileSync(F,k,`utf-8`),renameSync(F,D)}catch(t){try{unlinkSync(F)}catch{}return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to write template at ${relPathOf(e.projectDir,D)}: ${t.message}`}}}let L=[];return(e.frontmatter.description===void 0||typeof e.frontmatter.description!=`string`||e.frontmatter.description.length===0)&&L.push("Template frontmatter.description is missing — `description` disambiguates between similarly-named templates in the menu. Recommended but not required."),{ok:!0,path:relPathOf(e.projectDir,D),created:j,warnings:L}}function applyTemplateDelete(e){let t=validateInputs(e.projectDir,e.folder,e.name);if(!t.ok)return{ok:!1,error:t.error};let{templatesDir:S,okDir:w,filePath:E}=templatePaths(e.projectDir,t.folderRel,e.name),D=existsSync(E);if(D)try{unlinkSync(E)}catch(t){return{ok:!1,error:{code:`UNLINK_FAILED`,message:`Failed to delete template at ${relPathOf(e.projectDir,E)}: ${t.message}`}}}let O=!1,k=!1;if(existsSync(S)&&isEmpty(S))try{rmdirSync(S),O=!0}catch{}if(existsSync(w)&&isEmpty(w))try{rmdirSync(w),k=!0}catch{}return{ok:!0,path:relPathOf(e.projectDir,E),existed:D,cleanedEmpty:{templatesDir:O,okDir:k}}}function validateInputs(e,t,S){if(!isAbsolute(e))return{ok:!1,error:{code:`BAD_PROJECT_DIR`,message:`projectDir must be absolute`}};if(!NAME_RE.test(S))return{ok:!1,error:{code:`BAD_NAME`,message:`Template name must match /^[A-Za-z0-9_-]+$/ (got: ${JSON.stringify(S)}). Use letters, digits, underscores, or hyphens — no slashes, dots, or spaces.`}};let w=t.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``).replace(/^\.$/,``);if(w.includes(`..`))return{ok:!1,error:{code:`PATH_TRAVERSAL`,message:`Folder path may not contain "..": ${JSON.stringify(t)}`}};let E=w?resolve(e,w):e,D=resolve(e);return!E.startsWith(D+sep)&&E!==D?{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved folder path escapes projectDir: ${E}`}}:{ok:!0,folderRel:w}}function validateTitle(e){return typeof e!=`string`||e.length===0?{ok:!1,error:{code:`TEMPLATE_TITLE_REQUIRED`,message:"Template frontmatter.title is required. `title` is the menu surface — agents pick templates by name+title; a title-less template is effectively invisible. Set a non-empty `title` and retry."}}:{ok:!0}}function validateSubstitutionAllowlist(e){let t=validateSubstitution(e);return t.length===0?{ok:!0}:{ok:!1,error:{code:`TEMPLATE_UNKNOWN_VARIABLE`,message:`Template body contains unknown substitution token(s): ${t.map(e=>`\`{{${e.token}}}\` at offset ${e.offset}`).join(`, `)}. v1 allowlist: \`{{date}}\`, \`{{user}}\`. Remove or rename the offending tokens and retry.`}}}function templatePaths(e,t,S){let w=t?join(e,t,`.ok`):join(e,`.ok`),E=join(w,`templates`);return{okDir:w,templatesDir:E,filePath:join(E,`${S}.md`)}}function relPathOf(e,t){return normalize(t.startsWith(e+sep)?t.slice(e.length+1):t).split(sep).join(`/`)}function serializeFrontmatter(e){let t={};return e.title!==void 0&&(t.title=e.title),e.description!==void 0&&(t.description=e.description),Array.isArray(e.tags)&&e.tags.length>0&&(t.tags=e.tags),Object.keys(t).length===0?``:(0,import_dist$1.stringify)(t)}function isEmpty(e){try{return readdirSync(e).length===0}catch{return!1}}const log$6=()=>getLogger(`http`);function successResponse(e,t,S,w,E={}){if(e.headersSent||e.writableEnded||e.destroyed){log$6().error({event:`api.success.double-write`,status:t,handler:E.handler},`successResponse called after headers already sent — suppressed`),apiErrorCounter().add(1,{type:`urn:ok:error:internal-server-error`,...E.handler?{handler:E.handler}:{}});return}let D=S.safeParse(w);if(!D.success){log$6().error({event:`api.success.malformed-body`,issues:D.error.issues,bodyKeys:typeof w==`object`&&w?Object.keys(w):null,handler:E.handler,originalStatus:t},`successResponse produced an invalid body for the supplied schema — emitting fallback`),errorResponse(e,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:E.handler});return}let O;try{O=JSON.stringify(D.data)}catch(S){log$6().error({event:`api.success.unserializable-body`,bodyKeys:typeof D.data==`object`&&D.data!==null?Object.keys(D.data):null,handler:E.handler,originalStatus:t,err:S},`successResponse parsed body is not JSON-serializable — emitting fallback`),errorResponse(e,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:E.handler});return}e.writeHead(t,{...E.extraHeaders,"Content-Type":`application/json`,"X-Content-Type-Options":`nosniff`}),e.end(O)}const INSTALLED_AGENTS_SCHEMES=[`claude`,`codex`,`cursor`],INSTALLED_AGENTS_PROBE_TIMEOUT_MS=2e3,MACOS_APP_NAMES={claude:[`Claude`],codex:[`Codex`,`OpenAI Codex`],cursor:[`Cursor`]};function createInstalledAgentsProbe(e){let t=new Map,S=e.now??Date.now,w=e.ttlMs??6e4;async function E(E){let D=t.get(E);if(D?.status===`resolved`&&D.expiresAt>S())return D.installed;if(D?.status===`inflight`)return D.promise;let O=(async()=>{try{let D=await e.probe(E);return t.set(E,{status:`resolved`,installed:D,expiresAt:S()+w}),D}catch{return t.set(E,{status:`resolved`,installed:!1,expiresAt:S()+w}),!1}})();return t.set(E,{status:`inflight`,promise:O}),O}async function D(){let e=await Promise.all(INSTALLED_AGENTS_SCHEMES.map(async e=>[e,await E(e)]));return Object.fromEntries(e)}return{probeAll:D,probeWithCache:E}}function isLocalWebHost(e){let t=e.headers.host;if(typeof t==`string`&&t.length>0)try{let{hostname:e}=new URL(`http://${t}/`);return isLoopbackHostname(e)}catch{}let S=e.headers.origin;if(typeof S==`string`&&S.length>0)try{return isLoopbackHostname(new URL(S).hostname)}catch{return!1}return!0}function isLoopbackHostname(e){return e===`localhost`||e===`127.0.0.1`||e===`[::1]`||e===`::1`}async function handleInstalledAgents(e,t,S){if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`installed-agents`,extraHeaders:{Allow:`GET`}});return}try{successResponse(t,200,InstalledAgentsSuccessSchema,isLocalWebHost(e)?await S():Object.fromEntries(INSTALLED_AGENTS_SCHEMES.map(e=>[e,!0])),{handler:`installed-agents`})}catch(e){console.error(`[installed-agents]`,e),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`installed-agents`,cause:e})}}function createOsProbe(e,t=execFile){return S=>e===`darwin`?probeMacOs(S,t):e===`win32`?probeWindows(S,t):probeLinux(S,t)}function probeMacOs(e,t){let S=MACOS_APP_NAMES[e];function w(e){return new Promise(S=>{t(`osascript`,[`-e`,`id of app "${e}"`],{timeout:INSTALLED_AGENTS_PROBE_TIMEOUT_MS,encoding:`utf-8`},(e,t)=>{if(e){S(!1);return}S(t.trim().length>0)})})}return(async()=>{for(let e of S)if(await w(e))return!0;return!1})()}function probeWindows(e,t){return new Promise(S=>{t(`reg`,[`query`,`HKCR\\${e}`,`/ve`],{timeout:INSTALLED_AGENTS_PROBE_TIMEOUT_MS,encoding:`utf-8`},e=>{S(!e)})})}function probeLinux(e,t){return new Promise(S=>{t(`xdg-mime`,[`query`,`default`,`x-scheme-handler/${e}`],{timeout:INSTALLED_AGENTS_PROBE_TIMEOUT_MS,encoding:`utf-8`},(e,t)=>{if(e){S(!1);return}S(t.trim().length>0)})})}const MAX_BODY_BYTES=1048576,REQUEST_BODY_TIMEOUT_MS=3e4;function readRequestBody(e){return readBoundedJsonBody(e,{maxBytes:MAX_BODY_BYTES,timeoutMs:REQUEST_BODY_TIMEOUT_MS})}async function readBoundedJsonBody(e,t){let S=[],w=0,E=AbortSignal.timeout(t.timeoutMs),D=()=>e.destroy(new RequestBodyTimeoutError(t.timeoutMs));E.addEventListener(`abort`,D,{once:!0});try{for await(let E of e){if(w+=E.length,w>t.maxBytes)throw new PayloadTooLargeError(t.maxBytes);S.push(E)}return Buffer.concat(S)}finally{E.removeEventListener(`abort`,D)}}var PayloadTooLargeError=class extends Error{maxBytes;constructor(e){super(e===void 0?`Request body exceeded cap`:`Request body exceeded ${formatBytes(e)} cap`),this.name=`PayloadTooLargeError`,this.maxBytes=e}},RequestBodyTimeoutError=class extends Error{timeoutMs;constructor(e){super(e===void 0?`Request body read exceeded timeout`:`Request body read exceeded ${e}ms timeout`),this.name=`RequestBodyTimeoutError`,this.timeoutMs=e}};function formatBytes(e){return e>=1048576?`${(e/1048576).toFixed(0)} MB`:e>=1024?`${(e/1024).toFixed(0)} KB`:`${e} B`}function validateBody(e,t,S,w={}){let E=e.safeParse(t);if(E.success)return{ok:!0,value:E.data};let D=E.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`; `);return errorResponse(S,400,`urn:ok:error:invalid-request`,`Request body is invalid.`,{handler:w.handler,detail:D}),{ok:!1}}function withValidation(e,t,S={}){return async(w,E)=>{if(S.method!==void 0&&w.method!==S.method){errorResponse(E,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:S.handler,extraHeaders:{Allow:S.method}});return}if(S.preBodyGate!==void 0&&!S.preBodyGate(w,E)){!E.headersSent&&!E.writableEnded&&!E.destroyed&&errorResponse(E,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:S.handler,cause:Error(`preBodyGate returned false without writing a response`)});return}if(S.skipBodyParse){let D=validateBody(e,{},E,S);if(!D.ok)return;await t(w,E,D.value);return}let D;try{D=await readRequestBody(w)}catch(e){if(e instanceof PayloadTooLargeError){errorResponse(E,413,`urn:ok:error:payload-too-large`,`Payload too large.`,{handler:S.handler,cause:e});return}if(e instanceof RequestBodyTimeoutError){errorResponse(E,408,`urn:ok:error:request-timeout`,`Request body read timed out.`,{handler:S.handler,cause:e});return}errorResponse(E,500,`urn:ok:error:internal-server-error`,`Failed to read request body.`,{handler:S.handler,cause:e});return}let O;try{O=D.length===0?{}:JSON.parse(D.toString(`utf8`))}catch(e){errorResponse(E,400,`urn:ok:error:invalid-request`,`Request body is not valid JSON.`,{handler:S.handler,cause:e});return}let k=validateBody(e,O,E,S);k.ok&&await t(w,E,k.value)}}function classifySpawnError(e){let t=e instanceof Error?e.message:String(e);return/ENOENT|EACCES|EPERM/.test(t)?{ok:!1,reason:`not-installed`}:{ok:!1,reason:`spawn-error`}}function spawnDetached(e,t,S){return new Promise(w=>{let E=!1,D=e=>{E||(E=!0,w(e))},O=setTimeout(()=>D({ok:!1,reason:`timeout`}),S);try{let S=spawn(e,[...t],{detached:!0,stdio:`ignore`,shell:!1});S.once(`error`,e=>{clearTimeout(O),D(classifySpawnError(e))}),S.once(`spawn`,()=>{if(!E){try{S.unref()}catch{}clearTimeout(O),D({ok:!0})}})}catch(e){console.warn(`[spawn-detached] synchronous spawn throw:`,e),clearTimeout(O),D(classifySpawnError(e))}})}const SPAWN_CURSOR_WHICH_TIMEOUT_MS=500,SPAWN_CURSOR_SPAWN_TIMEOUT_MS=2e3,SPAWN_CURSOR_MAX_BODY_BYTES=4*1024,SPAWN_CURSOR_BODY_READ_TIMEOUT_MS=5e3,HANDLER$1=`spawn-cursor`;function assertNeverSpawnReason(e){throw Error(`Unhandled spawn-cursor outcome.reason: ${String(e)}`)}async function handleSpawnCursor(e,t,S){if(e.method!==`POST`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:HANDLER$1,extraHeaders:{Allow:`POST`}});return}let w;try{w=await readBoundedJsonBody(e,{maxBytes:SPAWN_CURSOR_MAX_BODY_BYTES,timeoutMs:SPAWN_CURSOR_BODY_READ_TIMEOUT_MS})}catch(e){if(e instanceof PayloadTooLargeError){errorResponse(t,413,`urn:ok:error:payload-too-large`,`Payload too large.`,{handler:HANDLER$1,cause:e});return}if(e instanceof RequestBodyTimeoutError){errorResponse(t,408,`urn:ok:error:request-timeout`,`Request body read timed out.`,{handler:HANDLER$1,cause:e});return}errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read request body.`,{handler:HANDLER$1,cause:e});return}let E;try{E=JSON.parse(w.toString(`utf-8`))}catch(e){errorResponse(t,400,`urn:ok:error:invalid-request`,`Malformed JSON body.`,{handler:HANDLER$1,cause:e});return}let D=typeof E.path==`string`?E.path:``;if(!D){errorResponse(t,400,`urn:ok:error:invalid-request`,"Missing or empty `path` field.",{handler:HANDLER$1});return}if(!isPathWithinDir(D,S.contentDir,S.platform)){errorResponse(t,403,`urn:ok:error:path-escape`,`Path escapes the content directory.`,{handler:HANDLER$1});return}let O=await(S.resolveCursorBinary??resolveCursorBinaryDefault)(SPAWN_CURSOR_WHICH_TIMEOUT_MS);if(!O){errorResponse(t,422,`urn:ok:error:cursor-not-installed`,`Cursor CLI not found on this machine.`,{handler:HANDLER$1});return}let k=resolveCursorSpawnInvocation(O,D,S.platform),j=await(S.spawnDetached??spawnDetached)(k.exec,k.args,SPAWN_CURSOR_SPAWN_TIMEOUT_MS);if(j.ok){successResponse(t,200,SpawnCursorSuccessSchema,{},{handler:HANDLER$1});return}switch(j.reason){case`not-installed`:errorResponse(t,422,`urn:ok:error:cursor-not-installed`,`Cursor CLI not found on this machine.`,{handler:HANDLER$1});return;case`timeout`:errorResponse(t,504,`urn:ok:error:cursor-spawn-timeout`,`Cursor spawn exceeded the deadline.`,{handler:HANDLER$1});return;case`spawn-error`:errorResponse(t,502,`urn:ok:error:cursor-spawn-failed`,`Cursor spawn failed.`,{handler:HANDLER$1});return;case`invalid-path`:errorResponse(t,403,`urn:ok:error:path-escape`,`Path escapes the content directory.`,{handler:HANDLER$1});return;default:return assertNeverSpawnReason(j.reason)}}const CURSOR_BUNDLE_PATHS_BY_PLATFORM={darwin:[()=>`/Applications/Cursor.app/Contents/Resources/app/bin/cursor`,e=>`${e}/Applications/Cursor.app/Contents/Resources/app/bin/cursor`],win32:[e=>`${e}\\AppData\\Local\\Programs\\cursor\\resources\\app\\bin\\cursor.cmd`,()=>`C:\\Program Files\\Cursor\\resources\\app\\bin\\cursor.cmd`]};async function resolveCursorBinaryDefault(e){let t=CURSOR_BUNDLE_PATHS_BY_PLATFORM[process.platform];if(t&&t.length>0){let e=homedir();for(let S of t){let t=S(e);try{return await access(t,constants.X_OK),t}catch(e){let S=e?.code;S!==`ENOENT`&&S!==`EACCES`&&S!==`EPERM`&&console.warn(`[spawn-cursor] unexpected fs.access error on bundle probe:`,S,t)}}}return new Promise(t=>{execFile(process.platform===`win32`?`where`:`which`,[`cursor`],{timeout:e,encoding:`utf-8`},(e,S)=>{if(e){t(null);return}let w=S.split(/\r?\n/)[0]?.trim();t(w&&w.length>0?w:null)})})}function resolveCursorSpawnInvocation(e,t,S){return S===`darwin`&&/\.app\/?$/.test(e)?{exec:`/usr/bin/open`,args:[`-a`,e.replace(/\/$/,``),t]}:{exec:e,args:[t]}}function isPathWithinDir(e,t,S){if(!e||typeof e!=`string`||e.includes(`\0`)||!t||typeof t!=`string`)return!1;if(S===`win32`){if(!/^([a-zA-Z]:[\\/]|\\\\)/.test(e)||!/^([a-zA-Z]:[\\/]|\\\\)/.test(t))return!1}else if(!e.startsWith(`/`)||!t.startsWith(`/`))return!1;let w=S===`win32`?win32:posix;try{let E=w.resolve(e),D=w.resolve(t);if(S===`win32`){let e=w.parse(E).root.toLowerCase(),t=w.parse(D).root.toLowerCase();if(!e||!t||e!==t)return!1}if(E===D)return!0;let O=w.relative(D,E);return O===``||O===`.`?!0:!(O===`..`||O.startsWith(`..${w.sep}`)||S===`win32`&&(/^[a-zA-Z]:[\\/]/.test(O)||O.startsWith(`\\\\`))||S!==`win32`&&O.startsWith(`/`))}catch(e){return console.warn(`[spawn-cursor] unexpected path-resolution error:`,e),!1}}const HANDLER=`handoff`,HANDOFF_MAX_BODY_BYTES=4*1024,HANDOFF_BODY_READ_TIMEOUT_MS=5e3,SPAWN_TIMEOUT_MS=2e3,WHICH_TIMEOUT_MS=500,QUIT_SETTLE_MS=3e3,APP_BUNDLE_SETTLE_MS=5e3,CURSOR_SETTLE_MS=1500,RECIPES={"claude-cowork":{type:`app-bundle`,appName:`Claude`,urlScheme:`claude:`,quitFirst:!1},"claude-code":{type:`app-bundle`,appName:`Claude`,urlScheme:`claude:`,quitFirst:!1},codex:{type:`app-bundle`,appName:`Codex`,urlScheme:`codex:`,quitFirst:!0},cursor:{type:`cli-binary`,binaryName:`cursor`,urlScheme:`cursor:`}},TARGET_VALUES=Object.keys(RECIPES),HandoffRequestSchema=object$1({target:_enum(TARGET_VALUES),url:string$2().min(1).max(4096),workspacePath:string$2().optional()}),HandoffSuccessSchema=object$1({}).loose();function defaultSleep(e){return new Promise(t=>setTimeout(t,e))}async function handleHandoffDispatch(e,t,S){if(e.method!==`POST`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:HANDLER,extraHeaders:{Allow:`POST`}});return}if(S.platform!==`darwin`){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Handoff is currently macOS-only.`,{handler:HANDLER});return}let w;try{w=await readBoundedJsonBody(e,{maxBytes:HANDOFF_MAX_BODY_BYTES,timeoutMs:HANDOFF_BODY_READ_TIMEOUT_MS})}catch(e){if(e instanceof PayloadTooLargeError){errorResponse(t,413,`urn:ok:error:payload-too-large`,`Payload too large.`,{handler:HANDLER,cause:e});return}if(e instanceof RequestBodyTimeoutError){errorResponse(t,408,`urn:ok:error:request-timeout`,`Request body read timed out.`,{handler:HANDLER,cause:e});return}errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read request body.`,{handler:HANDLER,cause:e});return}let E;try{E=JSON.parse(w.toString(`utf-8`))}catch(e){errorResponse(t,400,`urn:ok:error:invalid-request`,`Malformed JSON body.`,{handler:HANDLER,cause:e});return}let D=HandoffRequestSchema.safeParse(E);if(!D.success){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid request body.`,{handler:HANDLER});return}let{target:O,url:k,workspacePath:j}=D.data,F=RECIPES[O];if(!k.startsWith(F.urlScheme)){errorResponse(t,400,`urn:ok:error:invalid-request`,`URL scheme must be ${F.urlScheme} for target ${O}.`,{handler:HANDLER});return}let L=S.sleep??defaultSleep,B=S.spawnDetached??spawnDetached;if(F.type===`app-bundle`){F.quitFirst&&(await B(`/usr/bin/osascript`,[`-e`,`tell application "${F.appName}" to quit`],SPAWN_TIMEOUT_MS).catch(()=>void 0),await L(QUIT_SETTLE_MS));let e=await B(`/usr/bin/open`,[`-a`,F.appName],SPAWN_TIMEOUT_MS);if(!e.ok){emitSpawnFailure(t,O,e.reason);return}await L(APP_BUNDLE_SETTLE_MS);let S=await B(`/usr/bin/open`,[k],SPAWN_TIMEOUT_MS);if(!S.ok){emitSpawnFailure(t,O,S.reason);return}successResponse(t,200,HandoffSuccessSchema,{},{handler:HANDLER});return}if(!j){errorResponse(t,400,`urn:ok:error:invalid-request`,`workspacePath is required for cursor handoff.`,{handler:HANDLER});return}if(!isPathWithinDir(j,S.contentDir,S.platform)){errorResponse(t,403,`urn:ok:error:path-escape`,`Path escapes the content directory.`,{handler:HANDLER});return}let H=await(S.resolveCursorBinary??resolveCursorBinaryDefault)(WHICH_TIMEOUT_MS);if(!H){errorResponse(t,422,`urn:ok:error:handoff-target-not-installed`,`Cursor CLI not found on this machine.`,{handler:HANDLER,extensions:{target:`cursor`}});return}let q=resolveCursorSpawnInvocation(H,j,S.platform),J=await B(q.exec,q.args,SPAWN_TIMEOUT_MS);if(!J.ok){emitSpawnFailure(t,O,J.reason);return}await L(CURSOR_SETTLE_MS);let Y=await B(`/usr/bin/open`,[k],SPAWN_TIMEOUT_MS);if(!Y.ok){emitSpawnFailure(t,O,Y.reason);return}successResponse(t,200,HandoffSuccessSchema,{},{handler:HANDLER})}function emitSpawnFailure(e,t,S){switch(S){case`not-installed`:errorResponse(e,422,`urn:ok:error:handoff-target-not-installed`,`Required binary or application not found.`,{handler:HANDLER,extensions:{target:t}});return;case`timeout`:errorResponse(e,504,`urn:ok:error:handoff-spawn-timeout`,`Handoff spawn exceeded the deadline.`,{handler:HANDLER,extensions:{target:t}});return;case`spawn-error`:errorResponse(e,502,`urn:ok:error:handoff-spawn-failed`,`Handoff spawn failed.`,{handler:HANDLER,extensions:{target:t}});return;default:assertNeverReason(S)}}function assertNeverReason(e){throw Error(`Unhandled spawn reason: ${String(e)}`)}const FIXED_HUB_BASENAMES=[`INDEX`,`README`,`REPORT`,`SPEC`],MAX_CANDIDATES=3;function findHubCandidates(e,t){let S=[],w=new Set,E=t=>{!t||w.has(t)||t!==e&&(w.add(t),S.push(t))},D=buildLowerDocNameIndex(t),O=parentFolder(e);for(;;){for(let e of FIXED_HUB_BASENAMES)if(E(lookup$1(t,D,joinDocName(O,e))),S.length>=MAX_CANDIDATES)return S;let e=O===``?null:basename$1(O);if(e&&(E(lookup$1(t,D,joinDocName(O,e))),S.length>=MAX_CANDIDATES))return S;if(O===``)break;O=parentFolder(O)}return S}function lookup$1(e,t,S){return e.has(S)?S:t.get(S.toLowerCase())??null}function buildLowerDocNameIndex(e){let t=new Map;for(let S of e.keys()){let e=S.toLowerCase();t.has(e)||t.set(e,S)}return t}function parentFolder(e){let t=e.lastIndexOf(`/`);return t<0?``:e.slice(0,t)}function basename$1(e){let t=e.lastIndexOf(`/`);return t<0?e:e.slice(t+1)}function joinDocName(e,t){return e===``?t:`${e}/${t}`}function splitFrontmatterLines(e){return e?e.replace(/^---\r?\n/,``).replace(/\r?\n---(?:\r?\n)?$/,``).split(/\r?\n/):[]}function normalizeFrontmatterScalar(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?t.slice(1,-1).trim():t}function extractFrontmatterScalar(e,t){let S=`${t}:`;for(let t of splitFrontmatterLines(e))if(t.startsWith(S))return normalizeFrontmatterScalar(t.slice(S.length))||null;return null}function parseInlineAliases(e){let t=[],S=``,w=null;for(let E of e){if(w){S+=E,E===w&&(w=null);continue}if(E===`"`||E===`'`){w=E,S+=E;continue}if(E===`,`){let e=normalizeFrontmatterScalar(S);e&&t.push(e),S=``;continue}S+=E}let E=normalizeFrontmatterScalar(S);return E&&t.push(E),t}function dedupeExact(e){let t=[],S=new Set;for(let w of e)!w||S.has(w)||(S.add(w),t.push(w));return t}function extractPageAliases(e){let{frontmatter:t}=stripFrontmatter(e);if(!t)return[];let S=splitFrontmatterLines(t);for(let e=0;e<S.length;e+=1){let t=S[e]?.match(/^aliases:\s*(.*)$/);if(!t)continue;let w=t[1]?.trim()??``;if(w){if(w.startsWith(`[`)&&w.endsWith(`]`))return dedupeExact(parseInlineAliases(w.slice(1,-1)));let e=normalizeFrontmatterScalar(w);return e?[e]:[]}let E=[];for(let t=e+1;t<S.length;t+=1){let e=S[t];if(e?.trim()){if(/^\s*-\s+/.test(e)){let t=normalizeFrontmatterScalar(e.replace(/^\s*-\s+/,``));t&&E.push(t);continue}if(/^[^\s][^:]*:\s*/.test(e))break;break}}return dedupeExact(E)}return[]}function extractPageTitle(e,t){let{frontmatter:S,body:w}=stripFrontmatter(e),E=extractFrontmatterScalar(S,`title`);if(E)return E;let D=w.match(/^# (.+)$/m);return D?D[1].trim():t}const ICON_VALUE_LENGTH_CAP=2048;function extractPageIcon(e){let{frontmatter:t}=stripFrontmatter(e),S=extractFrontmatterScalar(t,`icon`);if(!(!S||S.length>ICON_VALUE_LENGTH_CAP))return S}function parseFrontmatterMetadata(e){return e?.trim()?{cluster:extractFrontmatterScalar(e,`cluster`)??void 0,category:extractFrontmatterScalar(e,`category`)??void 0,tags:extractFrontmatterArray(e,`tags`)}:{cluster:void 0,category:void 0,tags:void 0}}function extractFrontmatterArray(e,t){let S=`${t}:`,w=splitFrontmatterLines(e);for(let e=0;e<w.length;e+=1){let t=w[e];if(!t?.startsWith(S))continue;let E=t.slice(S.length).trim();if(E){if(E.startsWith(`[`)&&E.endsWith(`]`)){let e=parseInlineAliases(E.slice(1,-1));return e.length>0?e:void 0}let e=normalizeFrontmatterScalar(E);return e?[e]:void 0}let D=[];for(let t=e+1;t<w.length;t+=1){let e=w[t];if(e?.trim()){if(/^\s*-\s+/.test(e)){let t=normalizeFrontmatterScalar(e.replace(/^\s*-\s+/,``));t&&D.push(t);continue}if(/^[^\s][^:]*:\s*/.test(e))break;break}}return D.length>0?D:void 0}}function extractPageIdentity(e,t){let S=extractPageTitle(e,t),w=extractPageAliases(e),E=dedupeExact([S,...w]),D=[],O=new Set;for(let e of E){let t=toWikiLinkSlug(e);!t||O.has(t)||(O.add(t),D.push(t))}return{docName:t,title:S,aliases:w,matchLabels:E,normalizedMatchLabels:D}}const SHARE_BASE_URL=`https://openknowledge.ai/d/`,SHARE_CONSTRUCT_URL_HANDLER_TAG=`share-construct-url`;function isValidShareDocPath(e){if(e.length===0||e.startsWith(`/`)||e.startsWith(`\\`))return!1;for(let t of e.split(/[/\\]/))if(t===`..`||t===`.git`||t.length===0)return!1;return!0}function buildGitHubBlobUrl(e,t,S,w){return`https://github.com/${e}/${t}/blob/${encodeURIComponent(S)}/${w.split(`/`).map(encodeURIComponent).join(`/`)}`}function emitShareConstructUrlLog(e,t){let S=t===void 0?``:` branch_exists=${t}`;console.log(`[share] action=construct-url result=${e}${S}`)}function resolveGitDir$1(e){let t=resolve(e,`.git`);if(!existsSync(t))return null;let S;try{S=statSync(t)}catch{return null}if(S.isDirectory())return t;if(S.isFile()){let S;try{S=readFileSync(t,`utf-8`)}catch{return null}let w=/^gitdir:\s*(.+)$/m.exec(S.trim());if(!w)return null;let E=w[1].trim(),D=isAbsolute(E)?E:resolve(e,E);return existsSync(D)?D:null}return null}function resolveCommonDir(e){let t=join(e,`commondir`);if(!existsSync(t))return e;let S;try{S=readFileSync(t,`utf-8`).trim()}catch{return e}return S.length===0?e:isAbsolute(S)?S:resolve(e,S)}function readGitHeadBranch(e){let t=resolveGitDir$1(e);if(!t)return null;let S=join(t,`HEAD`);if(!existsSync(S))return null;let w;try{w=readFileSync(S,`utf-8`)}catch{return null}let E=/^ref:\s*refs\/heads\/(.+)$/.exec(w.trim());return E?E[1]:null}function stripCommentAndTrim(e){let t=e.indexOf(`#`),S=e.indexOf(`;`),w=-1;return t>=0&&S>=0?w=Math.min(t,S):t>=0?w=t:S>=0&&(w=S),(w===-1?e:e.slice(0,w)).trim()}function extractOriginUrl(e){let t=!1;for(let S of e.split(/\r?\n/)){let e=stripCommentAndTrim(S);if(e.length===0)continue;if(e.startsWith(`[`)){t=/^\[\s*remote\s+["']origin["']\s*\]$/.test(e);continue}if(!t)continue;let w=/^url\s*=\s*(.+)$/.exec(e);if(!w)continue;let E=w[1].trim();if((E.startsWith(`"`)&&E.endsWith(`"`)||E.startsWith(`'`)&&E.endsWith(`'`))&&(E=E.slice(1,-1)),E.length>0)return E}return null}function parseGitHubOriginUrl(e){let t=e.trim();if(!t)return null;let S=/^https?:\/\/(?:www\.)?github\.com\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t);return S||(S=/^ssh:\/\/(?:[\w.-]+@)?github\.com(?::\d+)?\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t),S)||(S=/^[\w.-]+@github\.com:([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?$/.exec(t),S)||(S=/^git:\/\/github\.com\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t),S)?{owner:S[1],repo:S[2]}:null}function readParsedOrigin(e){let t=resolveGitDir$1(e);if(!t)return null;let S=join(resolveCommonDir(t),`config`);if(!existsSync(S))return null;let w;try{w=readFileSync(S,`utf-8`)}catch{return null}let E=extractOriginUrl(w);return E?{originUrl:E,github:parseGitHubOriginUrl(E)}:null}function readOriginGitHubRepo(e){let t=readParsedOrigin(e);return t?t.github?{kind:`ok`,owner:t.github.owner,repo:t.github.repo}:{kind:`non-github`}:{kind:`no-remote`}}function readSyncRemoteInfo(e){let t=readParsedOrigin(e);return t?t.github?{label:`${t.github.owner}/${t.github.repo}`,webUrl:`https://github.com/${t.github.owner}/${t.github.repo}`}:{label:labelFromNonGitHubUrl(t.originUrl),webUrl:null}:null}function labelFromNonGitHubUrl(e){let t=e.trim().replace(/\.git$/,``),S=/^[\w.-]+@([^:/]+):(.+)$/.exec(t);if(S)return`${S[1]}/${S[2]}`;let w=/^[a-z][a-z0-9+.-]*:\/\/(?:[^@/]+@)*(.+)$/i.exec(t);return w?w[1]:t}function branchExistsOnOrigin(e,t){let S=resolveGitDir$1(e);if(!S)return!1;let w=resolveCommonDir(S);if(existsSync(join(w,`refs`,`remotes`,`origin`,t)))return!0;let E=join(w,`packed-refs`);if(!existsSync(E))return!1;let D;try{D=readFileSync(E,`utf-8`)}catch{return!1}let O=`refs/remotes/origin/${t}`;for(let e of D.split(/\r?\n/)){let t=e.trim();if(t.length===0||t.startsWith(`#`)||t.startsWith(`^`))continue;let S=t.split(/\s+/);if(S.length===2&&S[1]===O)return!0}return!1}const SHARE_PUBLISH_OWNERS_HANDLER_TAG=`share-publish-owners`,SHARE_PUBLISH_NAME_CHECK_HANDLER_TAG=`share-publish-name-check`,SHARE_PUBLISH_HANDLER_TAG=`share-publish`,SHARE_PUBLISH_OWNERS_KEY=`/api/share/publish/owners`,SHARE_PUBLISH_NAME_CHECK_KEY=`/api/share/publish/name-check`,SHARE_PUBLISH_KEY=`/api/share/publish`,SHARE_PUBLISH_TIMEOUT_MS=3e4;function isValidShareRepoName(e){return e.length===0||e.length>100||e.startsWith(`.`)||e.startsWith(`-`)||/^-+$/.test(e)?!1:/^[A-Za-z0-9._-]+$/.test(e)}function isValidShareOwnerName(e){return e.length===0||e.length>39||e.startsWith(`-`)||e.endsWith(`-`)?!1:/^[A-Za-z0-9-]+$/.test(e)}function pickTerminalJsonLine(e){let t=e.split(`
1248
+ `).map(e=>e.trim()).filter(Boolean);return k.length===0?{commits:[],source:`shadow-repo`}:{commits:(await Promise.all(k.map(e=>logOnRef(D,e,t,E,S)))).flat().sort((e,t)=>t.date.localeCompare(e.date)).slice(0,S),source:`shadow-repo`}}function resolveTemplatesAvailable(e,t,S={}){let w=normalizeFolderPath(t),E=w===``?[]:w.split(`/`),D=new Set,O=[];collectFromFolder(e,w,`local`,D,O);for(let t=E.length-1;t>=1;t--)collectFromFolder(e,E.slice(0,t).join(`/`),`inherited`,D,O);return E.length>0&&collectFromFolder(e,``,`inherited`,D,O),O}function collectFromFolder(e,t,S,w,E){let D=t?join(e,t,`.ok`,`templates`):join(e,`.ok`,`templates`);if(!existsSync(D))return;let O;try{O=readdirSync(D)}catch{return}for(let e of O){if(!e.endsWith(`.md`))continue;let O=e.slice(0,-3);if(w.has(O))continue;let k=join(D,e),j;try{j=statSync(k)}catch{continue}if(!j.isFile())continue;let F=readTemplateMeta(k),L={name:O,path:t?posix.join(t,`.ok`,`templates`,e):posix.join(`.ok`,`templates`,e),source_folder:t,scope:S};F.title!==void 0&&(L.title=F.title),F.description!==void 0&&(L.description=F.description),w.add(O),E.push(L)}}function normalizeFolderPath(e){return e.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``).replace(/^\.$/,``)}const templateMetaWarnedPaths=new Set;function readTemplateMeta(e){let t;try{t=readFileSync(e,`utf-8`)}catch(t){if(t?.code!==`ENOENT`&&!templateMetaWarnedPaths.has(e)){templateMetaWarnedPaths.add(e);let S=t instanceof Error?t.message:String(t);console.warn(`[ok-templates] failed to read template at ${e} — metadata skipped. Reason: ${S}`)}return{}}let S=extractFrontmatterYaml(t);if(S===null)return{};let w;try{w=(0,import_dist$1.parse)(S)}catch(t){if(!templateMetaWarnedPaths.has(e)){templateMetaWarnedPaths.add(e);let S=t instanceof Error?t.message:String(t);console.warn(`[ok-templates] malformed YAML frontmatter at ${e} — title/description unavailable. Reason: ${S}`)}return{}}if(typeof w!=`object`||!w)return{};let E=w,D={};return typeof E.title==`string`&&(D.title=E.title),typeof E.description==`string`&&(D.description=E.description),D}function extractFrontmatterYaml(e){let t=e.replace(/^/,``),S=/^[ \t]*---\r?\n([\s\S]*?)\r?\n[ \t]*---(\r?\n|$)/.exec(t);return S?S[1]??null:null}const FRONTMATTER_RE=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/;function parseFrontmatterRaw(e){let t=e.match(FRONTMATTER_RE);if(!t)return null;try{let e=(0,import_dist$1.parse)(t[1]);if(typeof e==`object`&&e&&!Array.isArray(e))return e}catch{}return null}const DIRECTORY_SCAN_CAP=1e3,DIR_SKIP=new Set([`.git`,`.ok`,`node_modules`,`.changeset`,`.claude`,`.agents`,`dist`,`build`]),WIKI_EXT_RE=/\.(md|mdx)$/i;function pathToDocName$1(e){return e.replace(/\.md$/,``).replace(/\.mdx$/,``)}const fmReadWarnedPaths=new Set;async function readFrontmatter(e){try{return parseFrontmatterRaw(await readFile$1(e,`utf-8`))??{}}catch(t){if(t?.code!==`ENOENT`&&!fmReadWarnedPaths.has(e)){fmReadWarnedPaths.add(e);let S=t instanceof Error?t.message:String(t);console.warn(`[ok-enrich] failed to read frontmatter at ${e} — enrichment degraded for this file. Reason: ${S}`)}return null}}async function fetchBacklinks(e,t){if(!e)return null;let S=await httpGet(e,`/api/backlinks?docName=${encodeURIComponent(t)}`);if(!S.ok)return null;let w=S.backlinks??S.results??S.links;if(!Array.isArray(w))return[];let E=[];for(let e of w){if(typeof e!=`object`||!e)continue;let t=e,S=typeof t.docName==`string`?t.docName:typeof t.source==`string`?t.source:typeof t.page==`string`?t.page:void 0;S&&E.push({source:S,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null})}return E}const BACKLINK_COUNT_CHUNK=100;async function fetchBacklinkCountsBatch(e,t){if(!e||t.length===0)return null;let S=[...new Set(t)],w=[];for(let e=0;e<S.length;e+=BACKLINK_COUNT_CHUNK)w.push(S.slice(e,e+BACKLINK_COUNT_CHUNK));let E=await Promise.all(w.map(async t=>{let S=await httpGet(e,`/api/backlink-counts?docNames=${encodeURIComponent(t.join(`,`))}`);return S.ok?S.counts??{}:null})),D=new Map,O=!1;for(let e of E)if(e){O=!0;for(let[t,S]of Object.entries(e))typeof S==`number`&&Number.isFinite(S)&&D.set(t,S)}return O?D:null}async function fetchForwardLinks(e,t){if(!e)return null;let S=await httpGet(e,`/api/forward-links?docName=${encodeURIComponent(t)}`);if(!S.ok)return null;let w=S.forwardLinks??S.links??S.results;if(!Array.isArray(w))return[];let E=[];for(let e of w){if(typeof e!=`object`||!e)continue;let t=e;if(t.kind===`external`&&typeof t.url==`string`){E.push({kind:`external`,url:t.url,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null});continue}let S=typeof t.docName==`string`?t.docName:void 0;S&&E.push({kind:`doc`,docName:S,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null})}return E}function mergeFileAndFolder(e,t,S){let w=S?resolveNestedFrontmatterWithSources(S,parentFolderOf(t)):{merged:{},sources:{},declarations:{},declarationSources:{}},E=w.merged,D=mergeCascade(E,e??{});return{title:typeof D.title==`string`?D.title:void 0,description:typeof D.description==`string`?D.description:void 0,tags:Array.isArray(D.tags)?D.tags.filter(e=>typeof e==`string`):[],frontmatter:D,schemaDeclarations:w.declarations}}async function enrichPath(e,t,S={}){let w=resolveWithinRoot(t.projectDir,e);if(!w.ok)throw Error(`enrichPath: ${w.reason}`);let E=w.rel,D=w.abs,O=t.historyDepth??5,k=S.includeRichFields===!0,j=readFrontmatter(D);if(!k){let e=mergeFileAndFolder(await j,E,t.projectDir);return{path:E,title:e.title,description:e.description,tags:e.tags,frontmatter:e.frontmatter,schema_declarations:Object.keys(e.schemaDeclarations).length>0?e.schemaDeclarations:void 0,backlinkCount:null,backlinks:null,forwardLinkCount:null,forwardLinks:null,history:null,historySource:null,projectHistory:null,projectHistorySource:null}}let[F,L,B,H,q]=await Promise.all([j,fetchBacklinks(t.serverUrl,pathToDocName$1(E)).catch(()=>null),fetchForwardLinks(t.serverUrl,pathToDocName$1(E)).catch(()=>null),readShadowLog(t.projectDir,E,O).catch(()=>({commits:[],source:`shadow-repo`})),readProjectGitLog(t.projectDir,E,O).catch(()=>({commits:[],source:`git`}))]),J=mergeFileAndFolder(F,E,t.projectDir);return{path:E,title:J.title,description:J.description,tags:J.tags,frontmatter:J.frontmatter,schema_declarations:Object.keys(J.schemaDeclarations).length>0?J.schemaDeclarations:void 0,backlinkCount:L?.length??null,backlinks:L,forwardLinkCount:B?.length??null,forwardLinks:B,history:H.commits,historySource:H.source,projectHistory:q.commits,projectHistorySource:q.source}}async function scanDirectory(e,t){let S={directMdCount:0,recursiveMdCount:0,childDirCount:0,mostRecent:null,truncated:!1},w=0,E=[{path:e,depth:0}];for(;E.length>0;){let e=E.shift();if(!e)break;if(w>=DIRECTORY_SCAN_CAP){S.truncated=!0;break}let D;try{D=await readdir(e.path,{withFileTypes:!0})}catch{continue}for(let O of D){if(w>=DIRECTORY_SCAN_CAP){S.truncated=!0;break}w++;let D=O.name;if(O.isDirectory()){if(DIR_SKIP.has(D)||D.startsWith(`.`))continue;e.depth===0&&S.childDirCount++,E.push({path:`${e.path}/${D}`,depth:e.depth+1})}else if(O.isFile()&&WIKI_EXT_RE.test(D)){S.recursiveMdCount++,e.depth===0&&S.directMdCount++;let w=`${e.path}/${D}`;try{let e=await stat$1(w);(!S.mostRecent||e.mtimeMs>S.mostRecent.mtimeMs)&&(S.mostRecent={absPath:w,relPath:relative(t,w).split(/[\\/]/).filter(Boolean).join(`/`),mtimeMs:e.mtimeMs})}catch{}}}}return S}async function enrichDirectory(e,t){let S=resolveWithinRoot(t.projectDir,e);if(!S.ok)throw Error(`enrichDirectory: ${S.reason}`);let w=S.rel,E=S.abs,D=await scanDirectory(E,t.projectDir),O;if(D.mostRecent){let e=await readFrontmatter(D.mostRecent.absPath),t=typeof e?.title==`string`?e.title:void 0;O={path:D.mostRecent.relPath,title:t??basename(D.mostRecent.relPath),updatedAt:new Date(D.mostRecent.mtimeMs).toISOString()}}let k={path:w,type:`directory`,directMdCount:D.directMdCount,recursiveMdCount:D.recursiveMdCount,childDirCount:D.childDirCount,mostRecentMd:O,truncated:D.truncated},j=resolveNestedFrontmatterWithSources(t.projectDir,w),F=j.merged,L=F.title,B=F.description,H=F.tags??[];L!==void 0&&(k.title=L),B!==void 0&&(k.description=B),H.length>0&&(k.tags=H),Object.keys(F).length>0&&(k.frontmatter_defaults=F),Object.keys(j.declarations).length>0&&(k.schema_declarations=j.declarations);let q=resolveTemplatesAvailable(t.projectDir,w);return q.length>0&&(k.templates_available=q),k}async function enrichDirectoryRecursive(e,t,S){let w=await enrichDirectory(e,S);if(t<=1)return w;let E=w.path,D=resolve(S.projectDir,E),O;try{O=await readdir(D,{withFileTypes:!0})}catch{return w}let k=[];for(let e of O){if(!e.isDirectory()||RECURSIVE_LISTING_SKIP_DIRS.has(e.name)||e.name.startsWith(`.`))continue;let w=await enrichDirectoryRecursive(E?`${E}/${e.name}`:e.name,t-1,S);k.push(w)}return k.length>0&&(w.subfolders=k),w}const RECURSIVE_LISTING_SKIP_DIRS=new Set([`.git`,`.ok`,`node_modules`,`.venv`,`venv`,`env`,`__pycache__`,`vendor`,`dist`,`build`,`out`,`output`,`.next`,`.nuxt`,`.svelte-kit`,`.astro`,`.turbo`,`.cache`,`.parcel-cache`,`coverage`]);function applyNestedFolderRulesUpsert(e){if(!isAbsolute(e.projectDir))return{ok:!1,error:{code:`BAD_PROJECT_DIR`,message:`projectDir must be absolute`}};let t=[];for(let S of e.rules){let w=resolveTargetFolderFromMatch(S.new_match??S.match);if(!w.ok)return{ok:!1,error:{code:`MULTI_FOLDER_GLOB`,message:w.message,rule:S.match}};let E=w.folder?resolve(e.projectDir,w.folder):e.projectDir,D=resolve(e.projectDir);if(!E.startsWith(D+sep)&&E!==D)return{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved target folder escapes projectDir: ${E}`,rule:S.match}};let O=null,k=null;if(S.new_match!==void 0&&S.new_match!==S.match){let t=resolveTargetFolderFromMatch(S.match);if(!t.ok)return{ok:!1,error:{code:`MULTI_FOLDER_GLOB`,message:t.message,rule:S.match}};if(O=t.folder,k=t.folder?resolve(e.projectDir,t.folder):e.projectDir,!k.startsWith(D+sep)&&k!==D)return{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved source folder escapes projectDir: ${k}`,rule:S.match}}}t.push({targetFolder:w.folder,targetAbs:E,sourceFolder:O,sourceAbs:k,rule:S})}let S=[];for(let w of t)try{if(w.sourceAbs&&w.sourceAbs!==w.targetAbs){let t=join(w.sourceAbs,`.ok`,`frontmatter.yml`);existsSync(t)&&(unlinkSync(t),autoCleanOkDir(join(w.sourceAbs,`.ok`)),S.push({match:w.rule.match,path:relPathOf$1(e.projectDir,t),action:`deleted`}))}let t=join(w.targetAbs,`.ok`),E=join(t,`frontmatter.yml`),D=readExistingFrontmatter(E),O=Object.keys(w.rule.frontmatter).length===0?{}:mergePatch(D,w.rule.frontmatter);if(Object.keys(O).length===0){existsSync(E)&&(unlinkSync(E),autoCleanOkDir(t),S.push({match:w.rule.new_match??w.rule.match,path:relPathOf$1(e.projectDir,E),action:`deleted`}));continue}mkdirSync(t,{recursive:!0});let k=(0,import_dist$1.stringify)(O),j=`${E}.tmp.${process.pid}.${Date.now()}`;writeFileSync(j,k,`utf-8`),renameSync(j,E),S.push({match:w.rule.new_match??w.rule.match,path:relPathOf$1(e.projectDir,E),action:`written`})}catch(e){return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to write nested frontmatter for ${w.rule.match}: ${e.message}`,rule:w.rule.match},...S.length>0?{partiallyApplied:S}:{}}}return{ok:!0,applied:S}}function resolveTargetFolderFromMatch(e){let t=e.split(`/`).filter(e=>e.length>0),S=[],w=!1;for(let E of t){let t=/[*?[\]{}]/.test(E);if(w&&!t)return{ok:!1,message:`Glob "${e}" matches multiple folders (literal segment "${E}" appears after a glob). Split it into one rule per folder, e.g. folder_config({ action: "set-rule", rules: [{ match: "specs/foo/${E}/**", ... }, ...] }).`};if(t){if(w=!0,E!==`**`&&E!==`*`)return{ok:!1,message:`Glob "${e}" uses an unsupported pattern segment "${E}". Only "*" and "**" are supported in nested folder rules.`};continue}S.push(E)}return{ok:!0,folder:S.join(`/`)}}function applyNestedFolderSchemaUpsert(e){if(!isAbsolute(e.projectDir))return{ok:!1,error:{code:`BAD_PROJECT_DIR`,message:`projectDir must be absolute`}};let t=[];for(let S of e.rules){let w=resolveTargetFolderFromMatch(S.match);if(!w.ok)return{ok:!1,error:{code:`MULTI_FOLDER_GLOB`,message:w.message,rule:S.match}};let E=w.folder?resolve(e.projectDir,w.folder):e.projectDir,D=resolve(e.projectDir);if(!E.startsWith(D+sep)&&E!==D)return{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved target folder escapes projectDir: ${E}`,rule:S.match}};t.push({targetFolder:w.folder,targetAbs:E,rule:S})}let S=[];for(let w of t)try{let t=join(w.targetAbs,`.ok`),E=join(t,`schema.yml`),D={...readExistingSchema(E)};for(let[e,t]of Object.entries(w.rule.declarations))t===null?delete D[e]:D[e]=t;if(Object.keys(D).length===0){existsSync(E)&&(unlinkSync(E),autoCleanOkDir(t),S.push({match:w.rule.match,path:relPathOf$1(e.projectDir,E),action:`deleted`}));continue}mkdirSync(t,{recursive:!0});let O=(0,import_dist$1.stringify)({declarations:D}),k=`${E}.tmp.${process.pid}.${Date.now()}`;writeFileSync(k,O,`utf-8`),renameSync(k,E),S.push({match:w.rule.match,path:relPathOf$1(e.projectDir,E),action:`written`})}catch(e){return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to write nested schema for ${w.rule.match}: ${e.message}`,rule:w.rule.match},...S.length>0?{partiallyApplied:S}:{}}}return{ok:!0,applied:S}}function readExistingSchema(e){if(!existsSync(e))return{};let t=(0,import_dist$1.parse)(readFileSync(e,`utf-8`));if(t==null)return{};let S=FolderSchemaSchema.safeParse(t);if(!S.success)throw Error(`Malformed schema.yml at ${e}: ${S.error.issues.map(e=>e.message).join(`, `)}`);return S.data.declarations}function readExistingFrontmatter(e){if(!existsSync(e))return{};let t=(0,import_dist$1.parse)(readFileSync(e,`utf-8`));return typeof t!=`object`||!t||Array.isArray(t)?{}:{...t}}function autoCleanOkDir(e){if(!existsSync(e))return;let t;try{t=readdirSync(e)}catch{return}if(t.length===0)try{rmdirSync(e)}catch{}}function relPathOf$1(e,t){let S=resolve(e);return t.startsWith(S+sep)?t.slice(S.length+1).split(sep).join(`/`):t}const SUBSTITUTION_ALLOWLIST=[`date`,`user`],TOKEN_PATTERN=/\{\{([^{}\n]+?)\}\}/g;function validateSubstitution(e){let t=[];for(let S of e.matchAll(TOKEN_PATTERN)){let e=(S[1]??``).trim();isAllowedToken(e)||t.push({token:e,offset:S.index??0})}return t}function applySubstitution(e,t){return e.replace(TOKEN_PATTERN,(e,S)=>{let w=S.trim();return isAllowedToken(w)?t[w]:e})}function isAllowedToken(e){return SUBSTITUTION_ALLOWLIST.includes(e)}function todayIsoUtc(e=new Date){return`${e.getUTCFullYear().toString().padStart(4,`0`)}-${(e.getUTCMonth()+1).toString().padStart(2,`0`)}-${e.getUTCDate().toString().padStart(2,`0`)}`}const NAME_RE=/^[A-Za-z0-9_-]+$/;function applyTemplateWrite(e){let t=validateInputs(e.projectDir,e.folder,e.name);if(!t.ok)return{ok:!1,error:t.error};let S=validateTitle(e.frontmatter.title);if(!S.ok)return{ok:!1,error:S.error};let w=validateSubstitutionAllowlist(e.body);if(!w.ok)return{ok:!1,error:w.error};let{templatesDir:E,filePath:D}=templatePaths(e.projectDir,t.folderRel,e.name),O=serializeFrontmatter(e.frontmatter),k=O?`---\n${O}---\n${e.body}`:e.body;try{mkdirSync(E,{recursive:!0})}catch(t){return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to create template directory at ${relPathOf(e.projectDir,E)}: ${t.message}`}}}let j=!existsSync(D),F=`${D}.tmp.${process.pid}.${Date.now()}`;try{writeFileSync(F,k,`utf-8`),renameSync(F,D)}catch(t){try{unlinkSync(F)}catch{}return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to write template at ${relPathOf(e.projectDir,D)}: ${t.message}`}}}let L=[];return(e.frontmatter.description===void 0||typeof e.frontmatter.description!=`string`||e.frontmatter.description.length===0)&&L.push("Template frontmatter.description is missing — `description` disambiguates between similarly-named templates in the menu. Recommended but not required."),{ok:!0,path:relPathOf(e.projectDir,D),created:j,warnings:L}}function applyTemplateDelete(e){let t=validateInputs(e.projectDir,e.folder,e.name);if(!t.ok)return{ok:!1,error:t.error};let{templatesDir:S,okDir:w,filePath:E}=templatePaths(e.projectDir,t.folderRel,e.name),D=existsSync(E);if(D)try{unlinkSync(E)}catch(t){return{ok:!1,error:{code:`UNLINK_FAILED`,message:`Failed to delete template at ${relPathOf(e.projectDir,E)}: ${t.message}`}}}let O=!1,k=!1;if(existsSync(S)&&isEmpty(S))try{rmdirSync(S),O=!0}catch{}if(existsSync(w)&&isEmpty(w))try{rmdirSync(w),k=!0}catch{}return{ok:!0,path:relPathOf(e.projectDir,E),existed:D,cleanedEmpty:{templatesDir:O,okDir:k}}}function validateInputs(e,t,S){if(!isAbsolute(e))return{ok:!1,error:{code:`BAD_PROJECT_DIR`,message:`projectDir must be absolute`}};if(!NAME_RE.test(S))return{ok:!1,error:{code:`BAD_NAME`,message:`Template name must match /^[A-Za-z0-9_-]+$/ (got: ${JSON.stringify(S)}). Use letters, digits, underscores, or hyphens — no slashes, dots, or spaces.`}};let w=t.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``).replace(/^\.$/,``);if(w.includes(`..`))return{ok:!1,error:{code:`PATH_TRAVERSAL`,message:`Folder path may not contain "..": ${JSON.stringify(t)}`}};let E=w?resolve(e,w):e,D=resolve(e);return!E.startsWith(D+sep)&&E!==D?{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved folder path escapes projectDir: ${E}`}}:{ok:!0,folderRel:w}}function validateTitle(e){return typeof e!=`string`||e.length===0?{ok:!1,error:{code:`TEMPLATE_TITLE_REQUIRED`,message:"Template frontmatter.title is required. `title` is the menu surface — agents pick templates by name+title; a title-less template is effectively invisible. Set a non-empty `title` and retry."}}:{ok:!0}}function validateSubstitutionAllowlist(e){let t=validateSubstitution(e);return t.length===0?{ok:!0}:{ok:!1,error:{code:`TEMPLATE_UNKNOWN_VARIABLE`,message:`Template body contains unknown substitution token(s): ${t.map(e=>`\`{{${e.token}}}\` at offset ${e.offset}`).join(`, `)}. v1 allowlist: \`{{date}}\`, \`{{user}}\`. Remove or rename the offending tokens and retry.`}}}function templatePaths(e,t,S){let w=t?join(e,t,`.ok`):join(e,`.ok`),E=join(w,`templates`);return{okDir:w,templatesDir:E,filePath:join(E,`${S}.md`)}}function relPathOf(e,t){return normalize(t.startsWith(e+sep)?t.slice(e.length+1):t).split(sep).join(`/`)}function serializeFrontmatter(e){let t={};return e.title!==void 0&&(t.title=e.title),e.description!==void 0&&(t.description=e.description),Array.isArray(e.tags)&&e.tags.length>0&&(t.tags=e.tags),Object.keys(t).length===0?``:(0,import_dist$1.stringify)(t)}function isEmpty(e){try{return readdirSync(e).length===0}catch{return!1}}const log$6=()=>getLogger(`http`);function successResponse(e,t,S,w,E={}){if(e.headersSent||e.writableEnded||e.destroyed){log$6().error({event:`api.success.double-write`,status:t,handler:E.handler},`successResponse called after headers already sent — suppressed`),apiErrorCounter().add(1,{type:`urn:ok:error:internal-server-error`,...E.handler?{handler:E.handler}:{}});return}let D=S.safeParse(w);if(!D.success){log$6().error({event:`api.success.malformed-body`,issues:D.error.issues,bodyKeys:typeof w==`object`&&w?Object.keys(w):null,handler:E.handler,originalStatus:t},`successResponse produced an invalid body for the supplied schema — emitting fallback`),errorResponse(e,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:E.handler});return}let O;try{O=JSON.stringify(D.data)}catch(S){log$6().error({event:`api.success.unserializable-body`,bodyKeys:typeof D.data==`object`&&D.data!==null?Object.keys(D.data):null,handler:E.handler,originalStatus:t,err:S},`successResponse parsed body is not JSON-serializable — emitting fallback`),errorResponse(e,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:E.handler});return}e.writeHead(t,{...E.extraHeaders,"Content-Type":`application/json`,"X-Content-Type-Options":`nosniff`}),e.end(O)}const INSTALLED_AGENTS_SCHEMES=[`claude`,`codex`,`cursor`],INSTALLED_AGENTS_PROBE_TIMEOUT_MS=2e3,MACOS_APP_NAMES={claude:[`Claude`],codex:[`Codex`,`OpenAI Codex`],cursor:[`Cursor`]};function createInstalledAgentsProbe(e){let t=new Map,S=e.now??Date.now,w=e.ttlMs??6e4;async function E(E){let D=t.get(E);if(D?.status===`resolved`&&D.expiresAt>S())return D.installed;if(D?.status===`inflight`)return D.promise;let O=(async()=>{try{let D=await e.probe(E);return t.set(E,{status:`resolved`,installed:D,expiresAt:S()+w}),D}catch{return t.set(E,{status:`resolved`,installed:!1,expiresAt:S()+w}),!1}})();return t.set(E,{status:`inflight`,promise:O}),O}async function D(){let e=await Promise.all(INSTALLED_AGENTS_SCHEMES.map(async e=>[e,await E(e)]));return Object.fromEntries(e)}return{probeAll:D,probeWithCache:E}}function isLocalWebHost(e){let t=e.headers.host;if(typeof t==`string`&&t.length>0)try{let{hostname:e}=new URL(`http://${t}/`);return isLoopbackHostname(e)}catch{}let S=e.headers.origin;if(typeof S==`string`&&S.length>0)try{return isLoopbackHostname(new URL(S).hostname)}catch{return!1}return!0}function isLoopbackHostname(e){return e===`localhost`||e===`127.0.0.1`||e===`[::1]`||e===`::1`}async function handleInstalledAgents(e,t,S){if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`installed-agents`,extraHeaders:{Allow:`GET`}});return}try{successResponse(t,200,InstalledAgentsSuccessSchema,isLocalWebHost(e)?await S():Object.fromEntries(INSTALLED_AGENTS_SCHEMES.map(e=>[e,!0])),{handler:`installed-agents`})}catch(e){console.error(`[installed-agents]`,e),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`installed-agents`,cause:e})}}function createOsProbe(e,t=execFile){return S=>e===`darwin`?probeMacOs(S,t):e===`win32`?probeWindows(S,t):probeLinux(S,t)}function probeMacOs(e,t){let S=MACOS_APP_NAMES[e];function w(e){return new Promise(S=>{t(`osascript`,[`-e`,`id of app "${e}"`],{timeout:INSTALLED_AGENTS_PROBE_TIMEOUT_MS,encoding:`utf-8`},(e,t)=>{if(e){S(!1);return}S(t.trim().length>0)})})}return(async()=>{for(let e of S)if(await w(e))return!0;return!1})()}function probeWindows(e,t){return new Promise(S=>{t(`reg`,[`query`,`HKCR\\${e}`,`/ve`],{timeout:INSTALLED_AGENTS_PROBE_TIMEOUT_MS,encoding:`utf-8`},e=>{S(!e)})})}function probeLinux(e,t){return new Promise(S=>{t(`xdg-mime`,[`query`,`default`,`x-scheme-handler/${e}`],{timeout:INSTALLED_AGENTS_PROBE_TIMEOUT_MS,encoding:`utf-8`},(e,t)=>{if(e){S(!1);return}S(t.trim().length>0)})})}const MAX_BODY_BYTES=1048576,REQUEST_BODY_TIMEOUT_MS=3e4;function readRequestBody(e){return readBoundedJsonBody(e,{maxBytes:MAX_BODY_BYTES,timeoutMs:REQUEST_BODY_TIMEOUT_MS})}async function readBoundedJsonBody(e,t){let S=[],w=0,E=AbortSignal.timeout(t.timeoutMs),D=()=>e.destroy(new RequestBodyTimeoutError(t.timeoutMs));E.addEventListener(`abort`,D,{once:!0});try{for await(let E of e){if(w+=E.length,w>t.maxBytes)throw new PayloadTooLargeError(t.maxBytes);S.push(E)}return Buffer.concat(S)}finally{E.removeEventListener(`abort`,D)}}var PayloadTooLargeError=class extends Error{maxBytes;constructor(e){super(e===void 0?`Request body exceeded cap`:`Request body exceeded ${formatBytes(e)} cap`),this.name=`PayloadTooLargeError`,this.maxBytes=e}},RequestBodyTimeoutError=class extends Error{timeoutMs;constructor(e){super(e===void 0?`Request body read exceeded timeout`:`Request body read exceeded ${e}ms timeout`),this.name=`RequestBodyTimeoutError`,this.timeoutMs=e}};function formatBytes(e){return e>=1048576?`${(e/1048576).toFixed(0)} MB`:e>=1024?`${(e/1024).toFixed(0)} KB`:`${e} B`}function validateBody(e,t,S,w={}){let E=e.safeParse(t);if(E.success)return{ok:!0,value:E.data};let D=E.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`; `);return errorResponse(S,400,`urn:ok:error:invalid-request`,`Request body is invalid.`,{handler:w.handler,detail:D}),{ok:!1}}function withValidation(e,t,S={}){return async(w,E)=>{if(S.method!==void 0&&w.method!==S.method){errorResponse(E,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:S.handler,extraHeaders:{Allow:S.method}});return}if(S.preBodyGate!==void 0&&!S.preBodyGate(w,E)){!E.headersSent&&!E.writableEnded&&!E.destroyed&&errorResponse(E,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:S.handler,cause:Error(`preBodyGate returned false without writing a response`)});return}if(S.skipBodyParse){let D=validateBody(e,{},E,S);if(!D.ok)return;await t(w,E,D.value);return}let D;try{D=await readRequestBody(w)}catch(e){if(e instanceof PayloadTooLargeError){errorResponse(E,413,`urn:ok:error:payload-too-large`,`Payload too large.`,{handler:S.handler,cause:e});return}if(e instanceof RequestBodyTimeoutError){errorResponse(E,408,`urn:ok:error:request-timeout`,`Request body read timed out.`,{handler:S.handler,cause:e});return}errorResponse(E,500,`urn:ok:error:internal-server-error`,`Failed to read request body.`,{handler:S.handler,cause:e});return}let O;try{O=D.length===0?{}:JSON.parse(D.toString(`utf8`))}catch(e){errorResponse(E,400,`urn:ok:error:invalid-request`,`Request body is not valid JSON.`,{handler:S.handler,cause:e});return}let k=validateBody(e,O,E,S);k.ok&&await t(w,E,k.value)}}function classifySpawnError(e){let t=e instanceof Error?e.message:String(e);return/ENOENT|EACCES|EPERM/.test(t)?{ok:!1,reason:`not-installed`}:{ok:!1,reason:`spawn-error`}}function spawnDetached(e,t,S){return new Promise(w=>{let E=!1,D=e=>{E||(E=!0,w(e))},O=setTimeout(()=>D({ok:!1,reason:`timeout`}),S);try{let S=spawn(e,[...t],{detached:!0,stdio:`ignore`,shell:!1});S.once(`error`,e=>{clearTimeout(O),D(classifySpawnError(e))}),S.once(`spawn`,()=>{if(!E){try{S.unref()}catch{}clearTimeout(O),D({ok:!0})}})}catch(e){console.warn(`[spawn-detached] synchronous spawn throw:`,e),clearTimeout(O),D(classifySpawnError(e))}})}const SPAWN_CURSOR_WHICH_TIMEOUT_MS=500,SPAWN_CURSOR_SPAWN_TIMEOUT_MS=2e3,SPAWN_CURSOR_MAX_BODY_BYTES=4*1024,SPAWN_CURSOR_BODY_READ_TIMEOUT_MS=5e3,HANDLER$1=`spawn-cursor`;function assertNeverSpawnReason(e){throw Error(`Unhandled spawn-cursor outcome.reason: ${String(e)}`)}async function handleSpawnCursor(e,t,S){if(e.method!==`POST`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:HANDLER$1,extraHeaders:{Allow:`POST`}});return}let w;try{w=await readBoundedJsonBody(e,{maxBytes:SPAWN_CURSOR_MAX_BODY_BYTES,timeoutMs:SPAWN_CURSOR_BODY_READ_TIMEOUT_MS})}catch(e){if(e instanceof PayloadTooLargeError){errorResponse(t,413,`urn:ok:error:payload-too-large`,`Payload too large.`,{handler:HANDLER$1,cause:e});return}if(e instanceof RequestBodyTimeoutError){errorResponse(t,408,`urn:ok:error:request-timeout`,`Request body read timed out.`,{handler:HANDLER$1,cause:e});return}errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read request body.`,{handler:HANDLER$1,cause:e});return}let E;try{E=JSON.parse(w.toString(`utf-8`))}catch(e){errorResponse(t,400,`urn:ok:error:invalid-request`,`Malformed JSON body.`,{handler:HANDLER$1,cause:e});return}let D=typeof E.path==`string`?E.path:``;if(!D){errorResponse(t,400,`urn:ok:error:invalid-request`,"Missing or empty `path` field.",{handler:HANDLER$1});return}if(!isPathWithinDir(D,S.contentDir,S.platform)){errorResponse(t,403,`urn:ok:error:path-escape`,`Path escapes the content directory.`,{handler:HANDLER$1});return}let O=await(S.resolveCursorBinary??resolveCursorBinaryDefault)(SPAWN_CURSOR_WHICH_TIMEOUT_MS);if(!O){errorResponse(t,422,`urn:ok:error:cursor-not-installed`,`Cursor CLI not found on this machine.`,{handler:HANDLER$1});return}let k=resolveCursorSpawnInvocation(O,D,S.platform),j=await(S.spawnDetached??spawnDetached)(k.exec,k.args,SPAWN_CURSOR_SPAWN_TIMEOUT_MS);if(j.ok){successResponse(t,200,SpawnCursorSuccessSchema,{},{handler:HANDLER$1});return}switch(j.reason){case`not-installed`:errorResponse(t,422,`urn:ok:error:cursor-not-installed`,`Cursor CLI not found on this machine.`,{handler:HANDLER$1});return;case`timeout`:errorResponse(t,504,`urn:ok:error:cursor-spawn-timeout`,`Cursor spawn exceeded the deadline.`,{handler:HANDLER$1});return;case`spawn-error`:errorResponse(t,502,`urn:ok:error:cursor-spawn-failed`,`Cursor spawn failed.`,{handler:HANDLER$1});return;case`invalid-path`:errorResponse(t,403,`urn:ok:error:path-escape`,`Path escapes the content directory.`,{handler:HANDLER$1});return;default:return assertNeverSpawnReason(j.reason)}}const CURSOR_BUNDLE_PATHS_BY_PLATFORM={darwin:[()=>`/Applications/Cursor.app/Contents/Resources/app/bin/cursor`,e=>`${e}/Applications/Cursor.app/Contents/Resources/app/bin/cursor`],win32:[e=>`${e}\\AppData\\Local\\Programs\\cursor\\resources\\app\\bin\\cursor.cmd`,()=>`C:\\Program Files\\Cursor\\resources\\app\\bin\\cursor.cmd`]};async function resolveCursorBinaryDefault(e){let t=CURSOR_BUNDLE_PATHS_BY_PLATFORM[process.platform];if(t&&t.length>0){let e=homedir();for(let S of t){let t=S(e);try{return await access(t,constants$1.X_OK),t}catch(e){let S=e?.code;S!==`ENOENT`&&S!==`EACCES`&&S!==`EPERM`&&console.warn(`[spawn-cursor] unexpected fs.access error on bundle probe:`,S,t)}}}return new Promise(t=>{execFile(process.platform===`win32`?`where`:`which`,[`cursor`],{timeout:e,encoding:`utf-8`},(e,S)=>{if(e){t(null);return}let w=S.split(/\r?\n/)[0]?.trim();t(w&&w.length>0?w:null)})})}function resolveCursorSpawnInvocation(e,t,S){return S===`darwin`&&/\.app\/?$/.test(e)?{exec:`/usr/bin/open`,args:[`-a`,e.replace(/\/$/,``),t]}:{exec:e,args:[t]}}function isPathWithinDir(e,t,S){if(!e||typeof e!=`string`||e.includes(`\0`)||!t||typeof t!=`string`)return!1;if(S===`win32`){if(!/^([a-zA-Z]:[\\/]|\\\\)/.test(e)||!/^([a-zA-Z]:[\\/]|\\\\)/.test(t))return!1}else if(!e.startsWith(`/`)||!t.startsWith(`/`))return!1;let w=S===`win32`?win32:posix;try{let E=w.resolve(e),D=w.resolve(t);if(S===`win32`){let e=w.parse(E).root.toLowerCase(),t=w.parse(D).root.toLowerCase();if(!e||!t||e!==t)return!1}if(E===D)return!0;let O=w.relative(D,E);return O===``||O===`.`?!0:!(O===`..`||O.startsWith(`..${w.sep}`)||S===`win32`&&(/^[a-zA-Z]:[\\/]/.test(O)||O.startsWith(`\\\\`))||S!==`win32`&&O.startsWith(`/`))}catch(e){return console.warn(`[spawn-cursor] unexpected path-resolution error:`,e),!1}}const HANDLER=`handoff`,HANDOFF_MAX_BODY_BYTES=4*1024,HANDOFF_BODY_READ_TIMEOUT_MS=5e3,SPAWN_TIMEOUT_MS=2e3,WHICH_TIMEOUT_MS=500,QUIT_SETTLE_MS=3e3,APP_BUNDLE_SETTLE_MS=5e3,CURSOR_SETTLE_MS=1500,RECIPES={"claude-cowork":{type:`app-bundle`,appName:`Claude`,urlScheme:`claude:`,quitFirst:!1},"claude-code":{type:`app-bundle`,appName:`Claude`,urlScheme:`claude:`,quitFirst:!1},codex:{type:`app-bundle`,appName:`Codex`,urlScheme:`codex:`,quitFirst:!0},cursor:{type:`cli-binary`,binaryName:`cursor`,urlScheme:`cursor:`}},TARGET_VALUES=Object.keys(RECIPES),HandoffRequestSchema=object$1({target:_enum(TARGET_VALUES),url:string$2().min(1).max(4096),workspacePath:string$2().optional()}),HandoffSuccessSchema=object$1({}).loose();function defaultSleep(e){return new Promise(t=>setTimeout(t,e))}async function handleHandoffDispatch(e,t,S){if(e.method!==`POST`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:HANDLER,extraHeaders:{Allow:`POST`}});return}if(S.platform!==`darwin`){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Handoff is currently macOS-only.`,{handler:HANDLER});return}let w;try{w=await readBoundedJsonBody(e,{maxBytes:HANDOFF_MAX_BODY_BYTES,timeoutMs:HANDOFF_BODY_READ_TIMEOUT_MS})}catch(e){if(e instanceof PayloadTooLargeError){errorResponse(t,413,`urn:ok:error:payload-too-large`,`Payload too large.`,{handler:HANDLER,cause:e});return}if(e instanceof RequestBodyTimeoutError){errorResponse(t,408,`urn:ok:error:request-timeout`,`Request body read timed out.`,{handler:HANDLER,cause:e});return}errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read request body.`,{handler:HANDLER,cause:e});return}let E;try{E=JSON.parse(w.toString(`utf-8`))}catch(e){errorResponse(t,400,`urn:ok:error:invalid-request`,`Malformed JSON body.`,{handler:HANDLER,cause:e});return}let D=HandoffRequestSchema.safeParse(E);if(!D.success){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid request body.`,{handler:HANDLER});return}let{target:O,url:k,workspacePath:j}=D.data,F=RECIPES[O];if(!k.startsWith(F.urlScheme)){errorResponse(t,400,`urn:ok:error:invalid-request`,`URL scheme must be ${F.urlScheme} for target ${O}.`,{handler:HANDLER});return}let L=S.sleep??defaultSleep,B=S.spawnDetached??spawnDetached;if(F.type===`app-bundle`){F.quitFirst&&(await B(`/usr/bin/osascript`,[`-e`,`tell application "${F.appName}" to quit`],SPAWN_TIMEOUT_MS).catch(()=>void 0),await L(QUIT_SETTLE_MS));let e=await B(`/usr/bin/open`,[`-a`,F.appName],SPAWN_TIMEOUT_MS);if(!e.ok){emitSpawnFailure(t,O,e.reason);return}await L(APP_BUNDLE_SETTLE_MS);let S=await B(`/usr/bin/open`,[k],SPAWN_TIMEOUT_MS);if(!S.ok){emitSpawnFailure(t,O,S.reason);return}successResponse(t,200,HandoffSuccessSchema,{},{handler:HANDLER});return}if(!j){errorResponse(t,400,`urn:ok:error:invalid-request`,`workspacePath is required for cursor handoff.`,{handler:HANDLER});return}if(!isPathWithinDir(j,S.contentDir,S.platform)){errorResponse(t,403,`urn:ok:error:path-escape`,`Path escapes the content directory.`,{handler:HANDLER});return}let H=await(S.resolveCursorBinary??resolveCursorBinaryDefault)(WHICH_TIMEOUT_MS);if(!H){errorResponse(t,422,`urn:ok:error:handoff-target-not-installed`,`Cursor CLI not found on this machine.`,{handler:HANDLER,extensions:{target:`cursor`}});return}let q=resolveCursorSpawnInvocation(H,j,S.platform),J=await B(q.exec,q.args,SPAWN_TIMEOUT_MS);if(!J.ok){emitSpawnFailure(t,O,J.reason);return}await L(CURSOR_SETTLE_MS);let Y=await B(`/usr/bin/open`,[k],SPAWN_TIMEOUT_MS);if(!Y.ok){emitSpawnFailure(t,O,Y.reason);return}successResponse(t,200,HandoffSuccessSchema,{},{handler:HANDLER})}function emitSpawnFailure(e,t,S){switch(S){case`not-installed`:errorResponse(e,422,`urn:ok:error:handoff-target-not-installed`,`Required binary or application not found.`,{handler:HANDLER,extensions:{target:t}});return;case`timeout`:errorResponse(e,504,`urn:ok:error:handoff-spawn-timeout`,`Handoff spawn exceeded the deadline.`,{handler:HANDLER,extensions:{target:t}});return;case`spawn-error`:errorResponse(e,502,`urn:ok:error:handoff-spawn-failed`,`Handoff spawn failed.`,{handler:HANDLER,extensions:{target:t}});return;default:assertNeverReason(S)}}function assertNeverReason(e){throw Error(`Unhandled spawn reason: ${String(e)}`)}const FIXED_HUB_BASENAMES=[`INDEX`,`README`,`REPORT`,`SPEC`],MAX_CANDIDATES=3;function findHubCandidates(e,t){let S=[],w=new Set,E=t=>{!t||w.has(t)||t!==e&&(w.add(t),S.push(t))},D=buildLowerDocNameIndex(t),O=parentFolder(e);for(;;){for(let e of FIXED_HUB_BASENAMES)if(E(lookup$1(t,D,joinDocName(O,e))),S.length>=MAX_CANDIDATES)return S;let e=O===``?null:basename$1(O);if(e&&(E(lookup$1(t,D,joinDocName(O,e))),S.length>=MAX_CANDIDATES))return S;if(O===``)break;O=parentFolder(O)}return S}function lookup$1(e,t,S){return e.has(S)?S:t.get(S.toLowerCase())??null}function buildLowerDocNameIndex(e){let t=new Map;for(let S of e.keys()){let e=S.toLowerCase();t.has(e)||t.set(e,S)}return t}function parentFolder(e){let t=e.lastIndexOf(`/`);return t<0?``:e.slice(0,t)}function basename$1(e){let t=e.lastIndexOf(`/`);return t<0?e:e.slice(t+1)}function joinDocName(e,t){return e===``?t:`${e}/${t}`}function splitFrontmatterLines(e){return e?e.replace(/^---\r?\n/,``).replace(/\r?\n---(?:\r?\n)?$/,``).split(/\r?\n/):[]}function normalizeFrontmatterScalar(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?t.slice(1,-1).trim():t}function extractFrontmatterScalar(e,t){let S=`${t}:`;for(let t of splitFrontmatterLines(e))if(t.startsWith(S))return normalizeFrontmatterScalar(t.slice(S.length))||null;return null}function parseInlineAliases(e){let t=[],S=``,w=null;for(let E of e){if(w){S+=E,E===w&&(w=null);continue}if(E===`"`||E===`'`){w=E,S+=E;continue}if(E===`,`){let e=normalizeFrontmatterScalar(S);e&&t.push(e),S=``;continue}S+=E}let E=normalizeFrontmatterScalar(S);return E&&t.push(E),t}function dedupeExact(e){let t=[],S=new Set;for(let w of e)!w||S.has(w)||(S.add(w),t.push(w));return t}function extractPageAliases(e){let{frontmatter:t}=stripFrontmatter(e);if(!t)return[];let S=splitFrontmatterLines(t);for(let e=0;e<S.length;e+=1){let t=S[e]?.match(/^aliases:\s*(.*)$/);if(!t)continue;let w=t[1]?.trim()??``;if(w){if(w.startsWith(`[`)&&w.endsWith(`]`))return dedupeExact(parseInlineAliases(w.slice(1,-1)));let e=normalizeFrontmatterScalar(w);return e?[e]:[]}let E=[];for(let t=e+1;t<S.length;t+=1){let e=S[t];if(e?.trim()){if(/^\s*-\s+/.test(e)){let t=normalizeFrontmatterScalar(e.replace(/^\s*-\s+/,``));t&&E.push(t);continue}if(/^[^\s][^:]*:\s*/.test(e))break;break}}return dedupeExact(E)}return[]}function extractPageTitle(e,t){let{frontmatter:S,body:w}=stripFrontmatter(e),E=extractFrontmatterScalar(S,`title`);if(E)return E;let D=w.match(/^# (.+)$/m);return D?D[1].trim():t}const ICON_VALUE_LENGTH_CAP=2048;function extractPageIcon(e){let{frontmatter:t}=stripFrontmatter(e),S=extractFrontmatterScalar(t,`icon`);if(!(!S||S.length>ICON_VALUE_LENGTH_CAP))return S}function parseFrontmatterMetadata(e){return e?.trim()?{cluster:extractFrontmatterScalar(e,`cluster`)??void 0,category:extractFrontmatterScalar(e,`category`)??void 0,tags:extractFrontmatterArray(e,`tags`)}:{cluster:void 0,category:void 0,tags:void 0}}function extractFrontmatterArray(e,t){let S=`${t}:`,w=splitFrontmatterLines(e);for(let e=0;e<w.length;e+=1){let t=w[e];if(!t?.startsWith(S))continue;let E=t.slice(S.length).trim();if(E){if(E.startsWith(`[`)&&E.endsWith(`]`)){let e=parseInlineAliases(E.slice(1,-1));return e.length>0?e:void 0}let e=normalizeFrontmatterScalar(E);return e?[e]:void 0}let D=[];for(let t=e+1;t<w.length;t+=1){let e=w[t];if(e?.trim()){if(/^\s*-\s+/.test(e)){let t=normalizeFrontmatterScalar(e.replace(/^\s*-\s+/,``));t&&D.push(t);continue}if(/^[^\s][^:]*:\s*/.test(e))break;break}}return D.length>0?D:void 0}}function extractPageIdentity(e,t){let S=extractPageTitle(e,t),w=extractPageAliases(e),E=dedupeExact([S,...w]),D=[],O=new Set;for(let e of E){let t=toWikiLinkSlug(e);!t||O.has(t)||(O.add(t),D.push(t))}return{docName:t,title:S,aliases:w,matchLabels:E,normalizedMatchLabels:D}}const SHARE_BASE_URL=`https://openknowledge.ai/d/`,SHARE_CONSTRUCT_URL_HANDLER_TAG=`share-construct-url`;function isValidShareDocPath(e){if(e.length===0||e.startsWith(`/`)||e.startsWith(`\\`))return!1;for(let t of e.split(/[/\\]/))if(t===`..`||t===`.git`||t.length===0)return!1;return!0}function buildGitHubBlobUrl(e,t,S,w){return`https://github.com/${e}/${t}/blob/${encodeURIComponent(S)}/${w.split(`/`).map(encodeURIComponent).join(`/`)}`}function emitShareConstructUrlLog(e,t){let S=t===void 0?``:` branch_exists=${t}`;console.log(`[share] action=construct-url result=${e}${S}`)}function resolveGitDir$1(e){let t=resolve(e,`.git`);if(!existsSync(t))return null;let S;try{S=statSync(t)}catch{return null}if(S.isDirectory())return t;if(S.isFile()){let S;try{S=readFileSync(t,`utf-8`)}catch{return null}let w=/^gitdir:\s*(.+)$/m.exec(S.trim());if(!w)return null;let E=w[1].trim(),D=isAbsolute(E)?E:resolve(e,E);return existsSync(D)?D:null}return null}function resolveCommonDir(e){let t=join(e,`commondir`);if(!existsSync(t))return e;let S;try{S=readFileSync(t,`utf-8`).trim()}catch{return e}return S.length===0?e:isAbsolute(S)?S:resolve(e,S)}function readGitHeadBranch(e){let t=resolveGitDir$1(e);if(!t)return null;let S=join(t,`HEAD`);if(!existsSync(S))return null;let w;try{w=readFileSync(S,`utf-8`)}catch{return null}let E=/^ref:\s*refs\/heads\/(.+)$/.exec(w.trim());return E?E[1]:null}function stripCommentAndTrim(e){let t=e.indexOf(`#`),S=e.indexOf(`;`),w=-1;return t>=0&&S>=0?w=Math.min(t,S):t>=0?w=t:S>=0&&(w=S),(w===-1?e:e.slice(0,w)).trim()}function extractOriginUrl(e){let t=!1;for(let S of e.split(/\r?\n/)){let e=stripCommentAndTrim(S);if(e.length===0)continue;if(e.startsWith(`[`)){t=/^\[\s*remote\s+["']origin["']\s*\]$/.test(e);continue}if(!t)continue;let w=/^url\s*=\s*(.+)$/.exec(e);if(!w)continue;let E=w[1].trim();if((E.startsWith(`"`)&&E.endsWith(`"`)||E.startsWith(`'`)&&E.endsWith(`'`))&&(E=E.slice(1,-1)),E.length>0)return E}return null}function parseGitHubOriginUrl(e){let t=e.trim();if(!t)return null;let S=/^https?:\/\/(?:www\.)?github\.com\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t);return S||(S=/^ssh:\/\/(?:[\w.-]+@)?github\.com(?::\d+)?\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t),S)||(S=/^[\w.-]+@github\.com:([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?$/.exec(t),S)||(S=/^git:\/\/github\.com\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t),S)?{owner:S[1],repo:S[2]}:null}function readParsedOrigin(e){let t=resolveGitDir$1(e);if(!t)return null;let S=join(resolveCommonDir(t),`config`);if(!existsSync(S))return null;let w;try{w=readFileSync(S,`utf-8`)}catch{return null}let E=extractOriginUrl(w);return E?{originUrl:E,github:parseGitHubOriginUrl(E)}:null}function readOriginGitHubRepo(e){let t=readParsedOrigin(e);return t?t.github?{kind:`ok`,owner:t.github.owner,repo:t.github.repo}:{kind:`non-github`}:{kind:`no-remote`}}function readSyncRemoteInfo(e){let t=readParsedOrigin(e);return t?t.github?{label:`${t.github.owner}/${t.github.repo}`,webUrl:`https://github.com/${t.github.owner}/${t.github.repo}`}:{label:labelFromNonGitHubUrl(t.originUrl),webUrl:null}:null}function labelFromNonGitHubUrl(e){let t=e.trim().replace(/\.git$/,``),S=/^[\w.-]+@([^:/]+):(.+)$/.exec(t);if(S)return`${S[1]}/${S[2]}`;let w=/^[a-z][a-z0-9+.-]*:\/\/(?:[^@/]+@)*(.+)$/i.exec(t);return w?w[1]:t}function branchExistsOnOrigin(e,t){let S=resolveGitDir$1(e);if(!S)return!1;let w=resolveCommonDir(S);if(existsSync(join(w,`refs`,`remotes`,`origin`,t)))return!0;let E=join(w,`packed-refs`);if(!existsSync(E))return!1;let D;try{D=readFileSync(E,`utf-8`)}catch{return!1}let O=`refs/remotes/origin/${t}`;for(let e of D.split(/\r?\n/)){let t=e.trim();if(t.length===0||t.startsWith(`#`)||t.startsWith(`^`))continue;let S=t.split(/\s+/);if(S.length===2&&S[1]===O)return!0}return!1}const SHARE_PUBLISH_OWNERS_HANDLER_TAG=`share-publish-owners`,SHARE_PUBLISH_NAME_CHECK_HANDLER_TAG=`share-publish-name-check`,SHARE_PUBLISH_HANDLER_TAG=`share-publish`,SHARE_PUBLISH_OWNERS_KEY=`/api/share/publish/owners`,SHARE_PUBLISH_NAME_CHECK_KEY=`/api/share/publish/name-check`,SHARE_PUBLISH_KEY=`/api/share/publish`,SHARE_PUBLISH_TIMEOUT_MS=3e4;function isValidShareRepoName(e){return e.length===0||e.length>100||e.startsWith(`.`)||e.startsWith(`-`)||/^-+$/.test(e)?!1:/^[A-Za-z0-9._-]+$/.test(e)}function isValidShareOwnerName(e){return e.length===0||e.length>39||e.startsWith(`-`)||e.endsWith(`-`)?!1:/^[A-Za-z0-9-]+$/.test(e)}function pickTerminalJsonLine(e){let t=e.split(`
1249
1249
  `).map(e=>e.trim()).filter(Boolean);for(let e=t.length-1;e>=0;e--)try{let S=JSON.parse(t[e]);if(S&&typeof S==`object`&&!Array.isArray(S))return S}catch{}return null}function parseOwnersEvent(e){if(e===null)return{ok:!1,error:`network`};if(e.type===`owners`&&Array.isArray(e.owners)){let t=[];for(let S of e.owners){if(!S||typeof S!=`object`)continue;let e=S,w=typeof e.login==`string`?e.login:null,E=e.kind===`user`||e.kind===`org`?e.kind:null;if(w===null||E===null)continue;let D=typeof e.avatarUrl==`string`?e.avatarUrl:void 0;t.push({login:w,kind:E,...D?{avatarUrl:D}:{}})}return{ok:!0,owners:t}}return e.type===`error`?{ok:!1,error:isOwnersErrorCode(e.code)?e.code:`network`}:{ok:!1,error:`network`}}function isOwnersErrorCode(e){return e===`auth-required`||e===`network`}function parseNameCheckEvent(e){return e===null?{ok:!1,error:`network`}:e.type===`name-check`&&typeof e.available==`boolean`?{ok:!0,available:e.available}:e.type===`error`?{ok:!1,error:isOwnersErrorCode(e.code)?e.code:`network`}:{ok:!1,error:`network`}}const PUBLISH_ERROR_CODES=new Set([`name-conflict`,`saml-sso`,`auth-required`,`push-failed`,`init-failed`,`network`,`no-project`]);function isPublishErrorCode(e){return typeof e==`string`&&PUBLISH_ERROR_CODES.has(e)}function parsePublishEvent(e){if(e===null)return{ok:!1,error:`network`};if(e.type===`publish`){let t=typeof e.ownerLogin==`string`?e.ownerLogin:null,S=typeof e.repoName==`string`?e.repoName:null,w=typeof e.cloneUrl==`string`?e.cloneUrl:null,E=typeof e.defaultBranch==`string`?e.defaultBranch:null;return t!==null&&S!==null&&w!==null&&E!==null?{ok:!0,ownerLogin:t,repoName:S,cloneUrl:w,defaultBranch:E}:{ok:!1,error:`network`}}return e.type===`error`?{ok:!1,error:isPublishErrorCode(e.code)?e.code:`network`}:{ok:!1,error:`network`}}function emitSharePublishLog(e,t,S){let w=[`action=${e}`,`result=${t}`];S?.count!==void 0&&w.push(`count=${S.count}`),S?.available!==void 0&&w.push(`available=${S.available}`),console.log(`[share] ${w.join(` `)}`)}function redactShareSubprocessStderr(e){return e.replace(/(https?:\/\/)([^:@\s/]+):([^@\s/]+)@/g,`$1$2:***@`)}const MAX_ZIP_BYTES=102400,BUNDLE_SKILL_NAME={discovery:`open-knowledge-discovery`,project:`open-knowledge`},DESKTOP_SKILLS_REL=`Open Knowledge.app/Contents/Resources/cli/dist/assets/skills`;function resolveBundledSkillDir(e,t={}){let S=t.platform??process.platform,w=t.checkDesktop??!1,E=t.home??homedir(),D=[];w&&S===`darwin`&&(D.push(join(`/Applications`,DESKTOP_SKILLS_REL,e)),D.push(join(E,`Applications`,DESKTOP_SKILLS_REL,e))),D.push(fileURLToPath(new URL(`../dist/assets/skills/${e}`,import.meta.url))),D.push(fileURLToPath(new URL(`../assets/skills/${e}`,import.meta.url))),D.push(fileURLToPath(new URL(`./assets/skills/${e}`,import.meta.url)));for(let e of D)if(existsSync(e))return e;throw Error(`Bundled skill asset directory not found for bundle '${e}'. Tried: ${D.join(`, `)}. This usually means the CLI build did not copy packages/server/assets into dist/assets. Run \`cd packages/cli && bun run build\` before publishing.`)}async function*walkFiles(e,t=e){let S=await readdir(e,{withFileTypes:!0});for(let w of S){let S=join(e,w.name);w.isDirectory()?yield*walkFiles(S,t):w.isFile()&&(yield relative(t,S))}}function computeWrapperFolderName(e,t=basename){return t(e)||`open-knowledge`}function toPosixZipPath(e,t=sep){return t===`/`?e:e.split(t).join(`/`)}async function zipDirectory(e,t,S=computeWrapperFolderName(e)){let w=new import_yazl.ZipFile;w.addEmptyDirectory(`${S}/`);let E=[];for await(let t of walkFiles(e))E.push(t);E.sort();for(let t of E){let E=join(e,t),D=`${S}/${toPosixZipPath(t)}`;w.addFile(E,D)}w.end(),await new Promise((e,S)=>{let E=createWriteStream(t);w.outputStream.pipe(E),E.on(`close`,()=>e()),E.on(`error`,S),w.outputStream.on(`error`,S)})}async function sha256OfFile(e){return new Promise((t,S)=>{let w=createHash(`sha256`),E=createReadStream(e);E.on(`data`,e=>w.update(e)),E.on(`end`,()=>t(w.digest(`hex`))),E.on(`error`,S)})}function extractMetadataVersion(e){let t=e.indexOf(`
1250
1250
  ---`,4);if(!e.startsWith(`---
1251
1251
  `)||t<0)return;let S=e.slice(4,t),w=S.search(/^metadata:/m);if(w<0)return;let E=S.slice(w).split(`
@@ -2378,7 +2378,9 @@ description: When the agent does scheduled work: daily briefings, end-of-day dos
2378
2378
  `).map(e=>e.trim()).filter(Boolean),O=null;for(let e=D.length-1;e>=0;e--)try{O=JSON.parse(D[e]);break}catch{}O===null?successResponse(t,200,LocalOpAuthStatusSuccessSchema,{authenticated:!1},{handler:wc}):successResponse(t,200,LocalOpAuthStatusSuccessSchema,O,{handler:wc})}catch(e){errorResponse(t,500,`urn:ok:error:auth-failed`,`Auth status check failed.`,{handler:wc,cause:e})}finally{we.release(gc)}},{handler:wc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:wc})}),Ec=`local-op-auth-repos`,Dc=withValidation(LocalOpAuthHostRequestSchema,Oc,{handler:Ec,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:Ec})});async function Oc(e,t,S){let w=S.host??`github.com`;if(!we.tryAcquire(_c)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`An auth repos operation is already in progress.`,{handler:Ec,extraHeaders:{"Retry-After":`5`}});return}t.writeHead(200,{"Content-Type":`application/x-ndjson`,"Transfer-Encoding":`chunked`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-cache`});let E=createStreamingErrorWriter(t,Ec),[D,...O]=ue,k=[...O,`auth`,`repos`,`--json`,`--host`,w],j=!1,F=``,L=spawn(D,k,{stdio:[`ignore`,`pipe`,`pipe`],env:{...process.env}}),B=setTimeout(()=>{L.kill(`SIGTERM`)},ac);L.stdout.on(`data`,e=>{F+=e.toString(`utf-8`);let S=F.split(`
2379
2379
  `);F=S.pop()??``;for(let e of S){if(!e.trim())continue;let S=null;try{S=JSON.parse(e)}catch{}if(S&&S.type===`error`){E(500,`urn:ok:error:auth-failed`,`Auth repos subprocess reported an error.`,{detail:typeof S.message==`string`?S.message:void 0});continue}if(!t.writableEnded&&!t.destroyed)try{t.write(`${e}\n`)}catch{}}}),L.stderr.on(`data`,e=>{log$3.debug({msg:e.toString(`utf-8`).trim()},`[local-op/auth/repos] stderr`)}),L.on(`close`,e=>{clearTimeout(B),j||(j=!0,e!==0&&!t.writableEnded&&E(500,`urn:ok:error:auth-failed`,`Auth repos subprocess exited with code ${e}.`),t.end(),we.release(_c))}),L.on(`error`,e=>{clearTimeout(B),j||(j=!0,t.writableEnded||(E(500,`urn:ok:error:auth-failed`,`Failed to spawn the auth repos subprocess.`,{cause:e}),t.end()),we.release(_c))}),t.on(`close`,()=>{j||(j=!0,clearTimeout(B),L.kill(`SIGTERM`),we.release(_c))})}let kc=`local-op-auth-signout`,Ac=withValidation(LocalOpAuthHostRequestSchema,async(e,t,S)=>{let w=S.host??`github.com`;if(!we.tryAcquire(vc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`An auth signout operation is already in progress.`,{handler:kc,extraHeaders:{"Retry-After":`5`}});return}try{let[e,...S]=ue,E=[...S,`auth`,`signout`,`--host`,w];await new Promise((t,S)=>{let w=spawn(e,E,{stdio:`ignore`,env:{...process.env}}),D=setTimeout(()=>{w.kill(`SIGTERM`)},3e4);w.on(`close`,()=>{clearTimeout(D),t()}),w.on(`error`,e=>{clearTimeout(D),S(e)})}),successResponse(t,200,LocalOpAuthEmptySuccessSchema,{},{handler:kc})}catch(e){errorResponse(t,500,`urn:ok:error:auth-failed`,`Auth signout failed.`,{handler:kc,cause:e})}finally{we.release(vc)}},{handler:kc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:kc})}),jc=`local-op-auth-pat`,Mc=withValidation(LocalOpAuthPatRequestSchema,async(e,t,S)=>{let{pat:w,host:E}=S,D=E??`github.com`;if(!we.tryAcquire(yc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`An auth pat operation is already in progress.`,{handler:jc,extraHeaders:{"Retry-After":`5`}});return}try{let[e,...S]=ue,E=[...S,`auth`,`pat`,`--json`,`--host`,D],O=(await new Promise((t,S)=>{let D=spawn(e,E,{stdio:[`pipe`,`pipe`,`pipe`],env:{...process.env}}),O=setTimeout(()=>{D.kill(`SIGTERM`)},3e4);D.stdin.write(`${w}\n`),D.stdin.end();let k=[];D.stdout.on(`data`,e=>k.push(e)),D.on(`close`,e=>{clearTimeout(O),e===0?t(Buffer.concat(k).toString(`utf-8`)):S(Error(`auth pat exited with code ${e}`))}),D.on(`error`,e=>{clearTimeout(O),S(e)})})).split(`
2380
2380
  `).map(e=>e.trim()).filter(Boolean),k=null;for(let e=O.length-1;e>=0;e--)try{k=JSON.parse(O[e]);break}catch{}k===null?successResponse(t,200,LocalOpAuthPatSuccessSchema,{},{handler:jc}):successResponse(t,200,LocalOpAuthPatSuccessSchema,k,{handler:jc})}catch(e){errorResponse(t,500,`urn:ok:error:auth-failed`,`Auth pat failed.`,{handler:jc,cause:e})}finally{we.release(yc)}},{handler:jc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:jc})}),Nc=`local-op-auth-identity`;async function Pc(e,t){if(checkLocalOpSecurity(e,t,{handler:Nc})){if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:Nc,extraHeaders:{Allow:`GET`}});return}if(!de){errorResponse(t,503,`urn:ok:error:no-project-dir`,`No project directory configured.`,{handler:Nc});return}try{successResponse(t,200,LocalOpAuthIdentitySuccessSchema,{identity:await resolveGitIdentity(de)},{handler:Nc})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Identity resolution failed.`,{handler:Nc,cause:e})}}}let Fc=`/api/local-op/auth/set-identity`,Ic=`local-op-auth-set-identity`,Lc=withValidation(LocalOpAuthSetIdentityRequestSchema,async(e,t,S)=>{let w=S.name.trim(),E=S.email.trim();if(!de){errorResponse(t,503,`urn:ok:error:no-project-dir`,`No project directory configured.`,{handler:Ic});return}if(!we.tryAcquire(Fc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`A set-identity operation is already in progress.`,{handler:Ic,extraHeaders:{"Retry-After":`5`}});return}try{writeGitIdentity(de,w,E),ce?.()?.refreshIdentity().catch(()=>{}),successResponse(t,200,LocalOpAuthEmptySuccessSchema,{},{handler:Ic})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Set-identity failed.`,{handler:Ic,cause:e})}finally{we.release(Fc)}},{handler:Ic,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:Ic})});async function Rc(e,t){if(checkLocalOpSecurity(e,t,{handler:`sync-status`})){if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`sync-status`,extraHeaders:{Allow:`GET`}});return}try{let e=ce?.();if(!e){successResponse(t,200,SyncStatusSchema,{state:`dormant`,lastSyncUtc:null,lastFetchUtc:null,lastPushedSha:null,ahead:0,behind:0,consecutiveFailures:0,conflictCount:0,hasRemote:!1,syncEnabled:!1,identityUnresolved:!1,remote:null},{handler:`sync-status`});return}await e.refreshRemote(),successResponse(t,200,SyncStatusSchema,e.getStatus(),{handler:`sync-status`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`sync-status`,cause:e})}}}let zc=withValidation(SyncTriggerRequestSchema,async(e,t,S)=>{let w=ce?.();if(!w){errorResponse(t,503,`urn:ok:error:sync-not-active`,`Sync engine not active.`,{handler:`sync-trigger`});return}let E=S.op??`sync`;successResponse(t,202,SyncTriggerSuccessSchema,{op:E},{handler:`sync-trigger`}),w.trigger(E)},{handler:`sync-trigger`,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:`sync-trigger`})?ce?.()?!0:(errorResponse(t,503,`urn:ok:error:sync-not-active`,`Sync engine not active.`,{handler:`sync-trigger`}),!1):!1});async function Bc(e,t){if(checkLocalOpSecurity(e,t,{handler:`sync-conflicts`})){if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`sync-conflicts`,extraHeaders:{Allow:`GET`}});return}try{let e=ce?.();successResponse(t,200,SyncConflictsSuccessSchema,{conflicts:e?e.getConflicts():[]},{handler:`sync-conflicts`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`sync-conflicts`,cause:e})}}}let Vc=withValidation(SyncResolveConflictRequestSchema,async(e,t,S)=>{let w=ce?.();if(!w){errorResponse(t,503,`urn:ok:error:sync-not-active`,`Sync engine not active.`,{handler:`sync-resolve-conflict`});return}let{file:E,strategy:D,content:O}=S;try{await w.resolveConflict(E,D,O),successResponse(t,200,SyncResolveConflictSuccessSchema,{},{handler:`sync-resolve-conflict`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to resolve conflict.`,{handler:`sync-resolve-conflict`,cause:e,detail:e instanceof Error?e.message:void 0})}},{handler:`sync-resolve-conflict`,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:`sync-resolve-conflict`})?ce?.()?!0:(errorResponse(t,503,`urn:ok:error:sync-not-active`,`Sync engine not active.`,{handler:`sync-resolve-conflict`}),!1):!1});async function Hc(e,S){if(!checkLocalOpSecurity(e,S,{handler:`sync-conflict-content`}))return;if(e.method!==`GET`){errorResponse(S,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`sync-conflict-content`,extraHeaders:{Allow:`GET`}});return}if(!de){errorResponse(S,503,`urn:ok:error:project-repo-not-configured`,`Project repo not configured.`,{handler:`sync-conflict-content`});return}let w=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),E=w.searchParams.get(`file`);if(!E){errorResponse(S,400,`urn:ok:error:invalid-request`,`Missing required query param: file.`,{handler:`sync-conflict-content`});return}if(E.includes(`..`)||E.startsWith(`/`)){errorResponse(S,400,`urn:ok:error:invalid-request`,`Invalid file path.`,{handler:`sync-conflict-content`});return}let D=stripDocExtension(E),O=t.documents.get(D)?.getMap(`lifecycle`).get(`status`)===`conflict`,k=ce?.(),j=k?k.getConflicts().some(e=>e.file===E):!1;if(!O&&!j){errorResponse(S,404,`urn:ok:error:no-conflict-tracked`,`No conflict is tracked for this path.`,{handler:`sync-conflict-content`,extensions:{file:E}});return}let F=w.searchParams.get(`source`),L=esm_default({baseDir:de,timeout:{block:15e3}});async function B(e){try{return{present:!0,content:await L.raw([`show`,`:${e}:${E}`])}}catch(t){let S=t instanceof Error?t.message:String(t);if(!/pathspec|did not match|exists on disk, but not in|is in the index, but not at stage/i.test(S))throw console.warn(JSON.stringify({event:`showstage-unexpected-error`,stage:e,file:E,detail:S,handler:`sync-conflict-content`})),t;return{present:!1}}}try{let[e,w,D]=await Promise.all([B(1),B(2),B(3)]),O=e.present?e.content:``,k=D.present?D.content:``,j=w.present&&D.present?`both-modified`:!w.present&&D.present?`delete-modify`:w.present&&!D.present?`modify-delete`:`both-modified`,L=w.present?w.content:``,H=null;if(F===`ytext`){let e=stripDocExtension(E),S=t.documents.get(e);if(S){let t=S.getMap(`lifecycle`).get(`status`);if(H=typeof t==`string`&&t.length>0?t:null,j!==`delete-modify`){let t=Ce?Ce(e):null;t!==null&&!ytextHasConflictMarkers(t)?L=t:t!==null&&console.warn(JSON.stringify({event:`ytext-conflict-marker-detected`,"doc.name":e,handler:`sync-conflict-content`}))}}else console.warn(`[conflict-content] doc ${e} not loaded; lifecycleStatus unavailable`)}successResponse(S,200,SyncConflictContentSuccessSchema,{file:E,base:O,ours:L,theirs:k,kind:j,lifecycleStatus:H},{handler:`sync-conflict-content`})}catch(e){errorResponse(S,500,`urn:ok:error:internal-server-error`,`Failed to read conflict content.`,{handler:`sync-conflict-content`,cause:e})}}async function Uc(e,t){if(!checkLocalOpSecurity(e,t,{handler:`seed-plan`}))return;if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`seed-plan`,extraHeaders:{Allow:`GET`}});return}let S=new URL(e.url??`/`,`http://localhost`),E=S.searchParams.get(`rootDir`)??void 0,D=S.searchParams.get(`packId`),O=coercePackId(D);if(D!==null&&D!==``&&O===void 0){errorResponse(t,400,`urn:ok:error:invalid-request`,`Unknown packId.`,{handler:`seed-plan`,detail:`Pack id "${D}" is not registered.`});return}try{successResponse(t,200,SeedPlanSuccessSchema,{plan:await planSeed({projectDir:w,rootDir:E,packId:O})},{handler:`seed-plan`})}catch(e){if(e instanceof SeedPrerequisiteError){errorResponse(t,422,`urn:ok:error:seed-prerequisite-missing`,`Seed prerequisite missing.`,{handler:`seed-plan`,cause:e});return}if(e instanceof SeedRootDirError){errorResponse(t,400,`urn:ok:error:seed-invalid-root`,`Invalid seed root directory.`,{handler:`seed-plan`,detail:`The provided root directory is not within the workspace content directory.`,cause:e});return}errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`seed-plan`,cause:e})}}let Wc=withValidation(SeedApplyRequestSchema,async(e,t,S)=>{let E=S.plan;if(!E||typeof E!=`object`){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid plan payload.`,{handler:`seed-apply`});return}let D=E,O=S.packId,k=coercePackId(O);if(typeof O==`string`&&O.length>0&&k===void 0){errorResponse(t,400,`urn:ok:error:invalid-request`,`Unknown packId.`,{handler:`seed-apply`,detail:`Pack id "${O}" is not registered.`});return}try{successResponse(t,200,SeedApplySuccessSchema,{result:await applySeed(D,{projectDir:w,packId:k})},{handler:`seed-apply`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to apply seed plan.`,{handler:`seed-apply`,cause:e})}},{handler:`seed-apply`,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:`seed-apply`})});async function Gc(e,t){if(checkLocalOpSecurity(e,t,{handler:`seed-packs`})){if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`seed-packs`,extraHeaders:{Allow:`GET`}});return}successResponse(t,200,SeedListPacksSuccessSchema,{packs:listStarterPacks()},{handler:`seed-packs`})}}let Kc=withValidation(InstallSkillRequestSchema,async(e,t,S)=>{if(S.out!==void 0&&!isSafeLocalPath(S.out)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Output path must be within home directory.`,{handler:`install-skill`});return}try{successResponse(t,200,InstallSkillSuccessSchema,await buildAndOpenSkill({...S.noOpen===void 0?{}:{noOpen:S.noOpen},...S.out===void 0?{}:{out:S.out}}),{handler:`install-skill`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to install skill.`,{handler:`install-skill`,cause:e})}},{handler:`install-skill`,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:`install-skill`})});async function qc(e,t){if(checkLocalOpSecurity(e,t,{handler:`installed-agents`}))try{await handleInstalledAgents(e,t,ze.probeAll)}catch(e){t.headersSent||(log$3.error({err:e},`[installed-agents] route wrapper failed`),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`installed-agents`,cause:e}))}}async function Jc(e,t){if(!checkLocalOpSecurity(e,t,{handler:`sync-abort-merge`}))return;if(e.method!==`POST`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`sync-abort-merge`,extraHeaders:{Allow:`POST`}});return}let S=ce?.();if(!S){errorResponse(t,503,`urn:ok:error:sync-not-active`,`Sync engine not active.`,{handler:`sync-abort-merge`});return}try{await S.abortMerge(),successResponse(t,200,SyncAbortMergeSuccessSchema,{},{handler:`sync-abort-merge`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to abort merge.`,{handler:`sync-abort-merge`,cause:e})}}let Yc=withValidation(EmptyRequestSchema,async(e,t)=>{if(!te){errorResponse(t,503,`urn:ok:error:tag-index-not-configured`,`Tag index not configured.`,{handler:`tags-list`});return}try{successResponse(t,200,TagsListSuccessSchema,{tags:te.getAllTags()},{handler:`tags-list`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read tags.`,{handler:`tags-list`,cause:e})}},{handler:`tags-list`,method:`GET`,skipBodyParse:!0});async function Xc(e,t,S){if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`tags-for-name`,extraHeaders:{Allow:`GET`}});return}if(!te){errorResponse(t,503,`urn:ok:error:tag-index-not-configured`,`Tag index not configured.`,{handler:`tags-for-name`});return}let w;try{w=decodeURIComponent(S)}catch{errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid tag name encoding.`,{handler:`tags-for-name`});return}if(!w){errorResponse(t,400,`urn:ok:error:invalid-request`,`Missing tag name.`,{handler:`tags-for-name`});return}try{let e=te.getDocsForTagWithMatches(w).map(({docName:e,matchingTags:t})=>({docName:e,title:Ve(e),matchingTags:t,snippet:null}));successResponse(t,200,TagsForNameSuccessSchema,{name:w,docs:e},{handler:`tags-for-name`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read tag membership.`,{handler:`tags-for-name`,cause:e})}}function Zc(e,t,S=`path`,E=`folder-config`){let D=e.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``);if(D.split(`/`).some(e=>e===`..`)||e.startsWith(`/`))return errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid ${S}: must be project-root-relative.`,{handler:E}),null;let O=resolve(w),k=D===``?O:resolve(O,D);return k!==O&&!k.startsWith(`${O}${sep}`)?(errorResponse(t,400,`urn:ok:error:invalid-request`,`Path escapes content directory.`,{handler:E}),null):{folderRel:D,resolvedContentDir:O}}let Qc=/^[A-Za-z0-9_-]+$/;function $c(e,t,S=`template`){return!e||!Qc.test(e)?(errorResponse(t,400,`urn:ok:error:invalid-request`,"Invalid name: must be letters / digits / `_` / `-` only (no `.md` extension).",{handler:S}),!1):!0}function nl(e){let t={};if(!e||typeof e!=`object`||Array.isArray(e))return t;for(let[S,w]of Object.entries(e))w!==void 0&&(t[S]=w);return t}function il(e){let t={};if(!e||typeof e!=`object`||Array.isArray(e))return{patch:t,badField:null};for(let[S,w]of Object.entries(e)){if(w===void 0)continue;if(w===null){t[S]=null;continue}let e=DeclarationSchema.safeParse(w);if(!e.success)return{patch:null,badField:S};t[S]=e.data}return{patch:t,badField:null}}async function al(e,t){if(e.method===`GET`)return cl(e,t);if(e.method===`PUT`)return ll(e,t);errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`folder-config`,extraHeaders:{Allow:`GET, PUT`}})}let cl=withValidation(EmptyRequestSchema,async(e,t)=>{try{let S=Zc(new URL(e.url??``,`http://localhost`).searchParams.get(`path`)??``,t,`path`,`folder-config-get`);if(!S)return;let w=await enrichDirectory(S.folderRel,{projectDir:S.resolvedContentDir}),E=resolve(S.resolvedContentDir,S.folderRel,`.ok`),D=resolve(E,`frontmatter.yml`),O=null;if(existsSync(D))try{let e=(0,import_dist$1.parse)(await readFile$1(D,`utf-8`));O=e&&typeof e==`object`&&!Array.isArray(e)?e:{}}catch(e){let t=e instanceof Error?e.message:String(e);console.warn(`[folder-config:get] malformed YAML in ${D}: ${t}`),O=null}let k=resolveNestedFrontmatterWithSources(S.resolvedContentDir,S.folderRel),j=resolve(E,`schema.yml`),F=null;if(existsSync(j))try{let e=(0,import_dist$1.parse)(await readFile$1(j,`utf-8`)),t=FolderSchemaSchema.safeParse(e);t.success?F=t.data.declarations:(console.warn(`[ok-folder-schema] invalid shape at ${j}: ${t.error.message}`),F=null)}catch(e){let t=e instanceof Error?e.message:String(e);console.warn(`[ok-folder-schema] malformed YAML in ${j}: ${t}`),F=null}let L=Object.keys(k.declarations).length>0;successResponse(t,200,FolderConfigGetSuccessSchema,{folder:w,frontmatter_local:O,...Object.keys(k.sources).length>0?{frontmatter_sources:k.sources}:{},...L?{schema_declarations:k.declarations,schema_sources:k.declarationSources}:{},schema_local:F},{handler:`folder-config-get`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read folder config.`,{handler:`folder-config-get`,cause:e})}},{handler:`folder-config-get`,method:`GET`,skipBodyParse:!0}),ll=withValidation(FolderConfigPutRequestSchema,async(e,t,S)=>{try{let e=Zc(S.path,t,`path`,`folder-config-put`);if(!e)return;let w=e.folderRel===``?`**`:`${e.folderRel}/**`,E;if(S.declarations!==void 0){let e=il(S.declarations);if(e.patch===null){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid declaration for field "${e.badField}": must be { type: text|number|boolean|date|list } or null.`,{handler:`folder-config-put`,detail:`INVALID_DECLARATION`});return}E=e.patch}let D=[];if(S.frontmatter!==void 0){let E=applyNestedFolderRulesUpsert({projectDir:e.resolvedContentDir,rules:[{match:w,frontmatter:nl(S.frontmatter)}]});if(!E.ok){let e=E.error.code===`WRITE_ERROR`||E.error.code===`BAD_PROJECT_DIR`?500:400;errorResponse(t,e,e===500?`urn:ok:error:internal-server-error`:`urn:ok:error:invalid-request`,e===500?`Failed to write folder config.`:`Invalid folder config request.`,{handler:`folder-config-put`,detail:E.error.code,cause:Error(E.error.message)});return}D.push(...E.applied)}if(E!==void 0&&Object.keys(E).length>0){let S=applyNestedFolderSchemaUpsert({projectDir:e.resolvedContentDir,rules:[{match:w,declarations:E}]});if(!S.ok){let e=S.error.code===`WRITE_ERROR`||S.error.code===`BAD_PROJECT_DIR`?500:400,w=e===500?`urn:ok:error:internal-server-error`:`urn:ok:error:invalid-request`,E=e===500?`Failed to write folder schema.`:`Invalid folder schema request.`,O=D.length>0?{partiallyApplied:D}:void 0;errorResponse(t,e,w,E,{handler:`folder-config-put`,detail:S.error.code,cause:Error(S.error.message),...O?{extensions:O}:{}});return}D.push(...S.applied)}successResponse(t,200,FolderConfigPutSuccessSchema,{applied:D},{handler:`folder-config-put`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to write folder config.`,{handler:`folder-config-put`,cause:e})}},{handler:`folder-config-put`,method:`PUT`});function ul(e,S,w,E){if(!S)return!1;let D=e===``?`.ok/templates/${S}`:`${e.replace(/\/$/,``)}/.ok/templates/${S}`,O=t.documents.get(D);return O&&isDocInConflict(O)?(respondDocInConflict(E,new DocInConflictError({file:`${D}.md`}),w),!0):!1}async function dl(e,t){if(e.method===`GET`)return ml(e,t);if(e.method===`PUT`)return hl(e,t);if(e.method===`DELETE`)return gl(e,t);errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`template`,extraHeaders:{Allow:`GET, PUT, DELETE`}})}let fl=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/,pl=e=>{let t=e.match(fl),S={},w=e;if(t){try{let e=(0,import_dist$1.parse)(t[1]??``);e&&typeof e==`object`&&!Array.isArray(e)&&(S=e)}catch{}w=e.slice(t[0].length)}return{frontmatter:S,body:w}},ml=withValidation(EmptyRequestSchema,async(e,t)=>{try{let S=new URL(e.url??``,`http://localhost`),w=S.searchParams.get(`name`)??``;if(!$c(w,t,`template-get`))return;let E=Zc(S.searchParams.get(`folder`)??``,t,`folder`,`template-get`);if(!E)return;let{folderRel:D,resolvedContentDir:O}=E,k=D===``?[]:D.split(`/`),j=null,F=null,L=null;for(let e=k.length;e>=0;e--){let t=e===0?``:k.slice(0,e).join(`/`),S=t===``?O:resolve(O,t);if(S!==O&&!S.startsWith(`${O}${sep}`))continue;let E=resolve(S,`.ok`,`templates`,`${w}.md`);if(existsSync(E)){j=E,F=t,L=e===k.length?`local`:`inherited`;break}}if(!j||F===null||L===null){errorResponse(t,404,`urn:ok:error:template-not-found`,`Template not found.`,{handler:`template-get`,detail:`Template "${w}" not found for folder "${D||`.`}". Walked leaf → root.`});return}let{frontmatter:B,body:H}=pl(await readFile$1(j,`utf-8`)),q=relative(O,j).split(/[\\/]/).filter(Boolean).join(`/`);successResponse(t,200,TemplateGetSuccessSchema,{template:{name:w,folder:F,scope:L,path:q,frontmatter:B,body:H}},{handler:`template-get`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read template.`,{handler:`template-get`,cause:e})}},{handler:`template-get`,method:`GET`,skipBodyParse:!0}),hl=withValidation(TemplatePutRequestSchema,async(e,t,S)=>{try{let e=S.name;if(!$c(e,t,`template-put`))return;let w=Zc(S.folder,t,`folder`,`template-put`);if(!w||ul(w.folderRel,e,`template-put`,t))return;let E=applyTemplateWrite({projectDir:w.resolvedContentDir,folder:w.folderRel,name:e,body:typeof S.body==`string`?S.body:``,frontmatter:nl(S.frontmatter)});if(!E.ok){let e=E.error.code===`WRITE_ERROR`||E.error.code===`BAD_PROJECT_DIR`?500:400;errorResponse(t,e,e===500?`urn:ok:error:internal-server-error`:`urn:ok:error:invalid-request`,e===500?`Failed to write template.`:`Invalid template request.`,{handler:`template-put`,detail:E.error.code,cause:Error(E.error.message)});return}successResponse(t,200,TemplatePutSuccessSchema,{path:E.path,created:E.created,warnings:E.warnings},{handler:`template-put`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to write template.`,{handler:`template-put`,cause:e})}},{handler:`template-put`,method:`PUT`}),gl=withValidation(EmptyRequestSchema,async(e,t)=>{try{let S=new URL(e.url??``,`http://localhost`),w=S.searchParams.get(`name`)??``;if(!$c(w,t,`template-delete`))return;let E=Zc(S.searchParams.get(`folder`)??``,t,`folder`,`template-delete`);if(!E||ul(E.folderRel,w,`template-delete`,t))return;let D=applyTemplateDelete({projectDir:E.resolvedContentDir,folder:E.folderRel,name:w});if(!D.ok){let e=D.error.code===`WRITE_ERROR`||D.error.code===`UNLINK_FAILED`||D.error.code===`BAD_PROJECT_DIR`?500:400;errorResponse(t,e,e===500?`urn:ok:error:internal-server-error`:`urn:ok:error:invalid-request`,e===500?`Failed to delete template.`:`Invalid template request.`,{handler:`template-delete`,detail:D.error.code,cause:Error(D.error.message)});return}successResponse(t,200,TemplateDeleteSuccessSchema,{existed:D.existed,path:D.path},{handler:`template-delete`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to delete template.`,{handler:`template-delete`,cause:e})}},{handler:`template-delete`,method:`DELETE`,skipBodyParse:!0});function _l(e){let t=new Map;for(let S of e){let e=S.path.split(`/`).filter(Boolean);e.pop();for(let w=1;w<=e.length;w++){let E=e.slice(0,w).join(`/`);t.set(E,Math.max(t.get(E)??0,S.modifiedTs))}}return[...t.entries()].map(([e,t])=>createWorkspaceSearchDocument({kind:`folder`,path:e,modifiedTs:t}))}function vl(e,t){let S=t.trim().toLowerCase();if(!S||!e)return;let w=e.toLowerCase().indexOf(S);if(w<0)return;let E=Math.max(0,w-80),D=Math.min(e.length,w+S.length+120),O=E>0?`…`:``,k=D<e.length?`…`:``;return`${O}${e.slice(E,D).replace(/\s+/g,` `).trim()}${k}`}function yl(e){return e===`autocomplete`||e===`full_text`||e===`omnibar`?e:`omnibar`}function xl(e){let t=typeof e==`string`?e.split(`,`):Array.isArray(e)?e:void 0;if(!t)return;let S=t.filter(e=>e===`page`||e===`folder`||e===`content`);return S.length>0?S:void 0}async function Cl(){let e=[];for(let[t,S]of D()){if(isSystemDoc(t)||isConfigDoc(t))continue;let w=``,E=t;try{w=await readFile$1(S.canonicalPath,`utf-8`),E=extractPageTitle(w,t)}catch(e){console.warn(`[search] Failed to index ${t}:`,e)}e.push(createWorkspaceSearchDocument({kind:`page`,path:t,title:E,content:w,modifiedTs:Date.parse(S.modified)}))}return[...e,..._l(e)]}function Tl(){return[...D()].filter(([e])=>!isSystemDoc(e)&&!isConfigDoc(e)).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${e}${t.modified}${t.size}${t.canonicalPath}${t.inode}${t.aliases.join(`,`)}`).join(``)}async function El(){let e=`${w}${de??``}`,t=Tl(),S=workspaceSearchCaches.get(e);if(S?.fingerprint===t&&S.corpus)return S.corpus;if(S?.fingerprint===t&&S.pending)return S.pending;let E=Cl().then(e=>createWorkspaceSearchCorpus(e));workspaceSearchCaches.set(e,{fingerprint:t,pending:E});try{let S=await E;return workspaceSearchCaches.get(e)?.pending===E&&workspaceSearchCaches.set(e,{fingerprint:t,corpus:S}),S}catch(t){throw workspaceSearchCaches.get(e)?.pending===E&&workspaceSearchCaches.delete(e),t}}function Dl(){if(process.env.NODE_ENV!==`test`)for(let e of[0,1e3,3e3])setTimeout(()=>{El().catch(e=>{console.warn(`[search] Failed to prewarm workspace search cache:`,e)})},e)}Dl();async function Ol(e,t){if(e.method===`GET`)return kl(e,t);if(e.method===`POST`)return jl(e,t);errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`search`,extraHeaders:{Allow:`GET, POST`}})}let kl=withValidation(EmptyRequestSchema,async(e,t)=>{let S=new URL(e.url??``,`http://localhost`),w=S.searchParams.get(`limit`),E=S.searchParams.get(`query`)??``,D=yl(S.searchParams.get(`intent`)),O=xl(S.searchParams.get(`scope`)??S.searchParams.get(`scopes`)),k=w===null?void 0:Number(w);if(E.length>200){errorResponse(t,400,`urn:ok:error:invalid-request`,`Query is too long (max 200 chars).`,{handler:`search-get`});return}try{let e=performance.now();successResponse(t,200,SearchSuccessSchema,{query:E,intent:D,results:searchWorkspaceCorpus(await El(),E,{intent:D,scopes:O,limit:k}).map(e=>({kind:e.document.kind,path:e.document.path,title:e.document.title,score:e.score,signals:e.signals,snippet:e.document.kind===`page`?vl(e.document.content,E):void 0})),elapsedMs:Math.max(0,performance.now()-e)},{handler:`search-get`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to search workspace.`,{handler:`search-get`,cause:e})}},{handler:`search-get`,method:`GET`,skipBodyParse:!0}),jl=withValidation(SearchRequestSchema,async(e,t,S)=>{let w=typeof S.query==`string`?S.query:``,E=yl(S.intent),D=xl(S.scopes??S.scope),O=typeof S.limit==`number`?S.limit:void 0;if(w.length>200){errorResponse(t,400,`urn:ok:error:invalid-request`,`Query is too long (max 200 chars).`,{handler:`search-post`});return}try{let e=performance.now();successResponse(t,200,SearchSuccessSchema,{query:w,intent:E,results:searchWorkspaceCorpus(await El(),w,{intent:E,scopes:D,limit:O}).map(e=>({kind:e.document.kind,path:e.document.path,title:e.document.title,score:e.score,signals:e.signals,snippet:e.document.kind===`page`?vl(e.document.content,w):void 0})),elapsedMs:Math.max(0,performance.now()-e)},{handler:`search-post`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to search workspace.`,{handler:`search-post`,cause:e})}},{handler:`search-post`,method:`POST`}),Ml=withValidation(EmptyRequestSchema,async(e,t)=>{try{successResponse(t,200,SkillInstallStateSuccessSchema,{...await readSkillInstallStateSnapshot(homedir())},{handler:`skill-install-state`,extraHeaders:{"Cache-Control":`no-store`}})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read skill install state.`,{handler:`skill-install-state`,cause:e})}},{handler:`skill-install-state`,method:`GET`,skipBodyParse:!0,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:`skill-install-state`})});async function Pl(e,t){if(checkLocalOpSecurity(e,t,{handler:`handoff`}))try{await handleHandoffDispatch(e,t,{contentDir:w,platform:process.platform})}catch(e){t.headersSent||(log$3.error({err:e},`[handoff] route wrapper failed`),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`handoff`,cause:e}))}}async function Fl(e,t){if(checkLocalOpSecurity(e,t,{handler:`spawn-cursor`}))try{await handleSpawnCursor(e,t,{contentDir:w,platform:process.platform})}catch(e){t.headersSent||(log$3.error({err:e},`[spawn-cursor] route wrapper failed`),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`spawn-cursor`,cause:e}))}}let Il=withValidation(ShareConstructUrlRequestSchema,async(e,t,S)=>{try{if(!de){emitShareConstructUrlLog(`no-remote`),successResponse(t,200,ShareConstructUrlResponseSchema,{ok:!1,error:`no-remote`},{handler:SHARE_CONSTRUCT_URL_HANDLER_TAG});return}if(!isValidShareDocPath(S.docPath)){emitShareConstructUrlLog(`invalid-path`),successResponse(t,200,ShareConstructUrlResponseSchema,{ok:!1,error:`invalid-path`},{handler:SHARE_CONSTRUCT_URL_HANDLER_TAG});return}let e=readGitHeadBranch(de);if(e===null){if(readOriginGitHubRepo(de).kind===`no-remote`){emitShareConstructUrlLog(`no-remote`),successResponse(t,200,ShareConstructUrlResponseSchema,{ok:!1,error:`no-remote`},{handler:SHARE_CONSTRUCT_URL_HANDLER_TAG});return}emitShareConstructUrlLog(`detached-head`),successResponse(t,200,ShareConstructUrlResponseSchema,{ok:!1,error:`detached-head`},{handler:SHARE_CONSTRUCT_URL_HANDLER_TAG});return}let w=readOriginGitHubRepo(de);if(w.kind===`no-remote`){emitShareConstructUrlLog(`no-remote`),successResponse(t,200,ShareConstructUrlResponseSchema,{ok:!1,error:`no-remote`},{handler:SHARE_CONSTRUCT_URL_HANDLER_TAG});return}if(w.kind===`non-github`){emitShareConstructUrlLog(`non-github-remote`),successResponse(t,200,ShareConstructUrlResponseSchema,{ok:!1,error:`non-github-remote`},{handler:SHARE_CONSTRUCT_URL_HANDLER_TAG});return}if(!branchExistsOnOrigin(de,e)){emitShareConstructUrlLog(`branch-not-on-origin`,!1),successResponse(t,200,ShareConstructUrlResponseSchema,{ok:!1,error:`branch-not-on-origin`,branch:e},{handler:SHARE_CONSTRUCT_URL_HANDLER_TAG});return}let E=buildGitHubBlobUrl(w.owner,w.repo,e,S.docPath),D=`${SHARE_BASE_URL}${encodeShareUrl(E)}`;emitShareConstructUrlLog(`ok`,!0),successResponse(t,200,ShareConstructUrlResponseSchema,{ok:!0,shareUrl:D,blobUrl:E,branch:e},{handler:SHARE_CONSTRUCT_URL_HANDLER_TAG})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:SHARE_CONSTRUCT_URL_HANDLER_TAG,cause:e})}},{handler:SHARE_CONSTRUCT_URL_HANDLER_TAG,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:SHARE_CONSTRUCT_URL_HANDLER_TAG})}),Ll=withValidation(EmptyRequestSchema,async(e,t)=>{try{if(!de){errorResponse(t,500,`urn:ok:error:internal-server-error`,`projectDir is not configured for this server.`,{handler:BRANCH_INFO_HANDLER_TAG});return}let S=new URL(e.url??``,`http://localhost`),w=S.searchParams.get(`branch`),E=S.searchParams.get(`path`);if(!isValidBranchName(w)){errorResponse(t,400,`urn:ok:error:invalid-request`,`branch query param missing or malformed.`,{handler:BRANCH_INFO_HANDLER_TAG});return}if(!isValidBranchInfoDocPath(E)){errorResponse(t,400,`urn:ok:error:invalid-request`,`path query param missing or malformed.`,{handler:BRANCH_INFO_HANDLER_TAG});return}successResponse(t,200,BranchInfoResponseSchema,await computeBranchInfo(de,w,E),{handler:BRANCH_INFO_HANDLER_TAG})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:BRANCH_INFO_HANDLER_TAG,cause:e})}},{handler:BRANCH_INFO_HANDLER_TAG,method:`GET`,skipBodyParse:!0}),Rl=withValidation(CheckoutRequestSchema,async(e,t,S)=>{if(extractActorIdentity(S,fe).kind===`invalid-summary`){errorResponse(t,400,`urn:ok:error:invalid-request`,`Summary must be a string.`,{handler:CHECKOUT_HANDLER_TAG});return}if(!de){errorResponse(t,500,`urn:ok:error:internal-server-error`,`projectDir is not configured for this server.`,{handler:CHECKOUT_HANDLER_TAG});return}try{successResponse(t,200,CheckoutResponseSchema,await withParentLock(()=>runCheckoutFlow(de,S.branch)),{handler:CHECKOUT_HANDLER_TAG})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:CHECKOUT_HANDLER_TAG,cause:e})}},{handler:CHECKOUT_HANDLER_TAG,method:`POST`});async function zl(e){let[t,...S]=ue,w=[...S,...e];return await new Promise((e,S)=>{let E=spawn(t,w,{stdio:[`ignore`,`pipe`,`pipe`],env:{...process.env}}),D=!1,O=setTimeout(()=>{D=!0,E.kill(`SIGTERM`)},SHARE_PUBLISH_TIMEOUT_MS),k=[],j=[];E.stdout.on(`data`,e=>k.push(e)),E.stderr.on(`data`,e=>j.push(e)),E.on(`close`,t=>{if(clearTimeout(O),D){S(Error(`share subprocess timed out after ${SHARE_PUBLISH_TIMEOUT_MS}ms`));return}let w=Buffer.concat(k).toString(`utf-8`);if(t!==0){let e=redactShareSubprocessStderr(Buffer.concat(j).toString(`utf-8`)).slice(0,500);console.warn(`[share] subprocess exited code=${t} stderr=${e}`)}e({stdout:w,code:t})}),E.on(`error`,e=>{clearTimeout(O),S(e)})})}let Bl=withValidation(EmptyRequestSchema,async(e,t)=>{if(!we.tryAcquire(`/api/share/publish/owners`)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`A share owners operation is already in progress.`,{handler:SHARE_PUBLISH_OWNERS_HANDLER_TAG,extraHeaders:{"Retry-After":`5`}});return}try{let{stdout:e}=await zl([`share`,`owners`,`--json`]),S=parseOwnersEvent(pickTerminalJsonLine(e));emitSharePublishLog(`owners-list`,S.ok?`ok`:S.error,S.ok?{count:S.owners.length}:void 0),successResponse(t,200,SharePublishOwnersResponseSchema,S,{handler:SHARE_PUBLISH_OWNERS_HANDLER_TAG})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:SHARE_PUBLISH_OWNERS_HANDLER_TAG,cause:e})}finally{we.release(SHARE_PUBLISH_OWNERS_KEY)}},{handler:SHARE_PUBLISH_OWNERS_HANDLER_TAG,method:`GET`,skipBodyParse:!0,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:SHARE_PUBLISH_OWNERS_HANDLER_TAG})}),Vl=withValidation(EmptyRequestSchema,async(e,t)=>{let S=new URL(e.url??``,`http://localhost`),w=S.searchParams.get(`owner`)??``,E=S.searchParams.get(`name`)??``;if(!isValidShareOwnerName(w)||!isValidShareRepoName(E)){errorResponse(t,400,`urn:ok:error:invalid-request`,`owner and name query params must be valid GitHub identifiers.`,{handler:SHARE_PUBLISH_NAME_CHECK_HANDLER_TAG});return}if(!we.tryAcquire(`/api/share/publish/name-check`)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`A share name-check operation is already in progress.`,{handler:SHARE_PUBLISH_NAME_CHECK_HANDLER_TAG,extraHeaders:{"Retry-After":`5`}});return}try{let{stdout:e}=await zl([`share`,`name-check`,`--owner`,w,`--name`,E,`--json`]),S=parseNameCheckEvent(pickTerminalJsonLine(e));emitSharePublishLog(`name-check`,S.ok?`ok`:S.error,S.ok?{available:S.available}:void 0),successResponse(t,200,SharePublishNameCheckResponseSchema,S,{handler:SHARE_PUBLISH_NAME_CHECK_HANDLER_TAG})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:SHARE_PUBLISH_NAME_CHECK_HANDLER_TAG,cause:e})}finally{we.release(SHARE_PUBLISH_NAME_CHECK_KEY)}},{handler:SHARE_PUBLISH_NAME_CHECK_HANDLER_TAG,method:`GET`,skipBodyParse:!0,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:SHARE_PUBLISH_NAME_CHECK_HANDLER_TAG})}),Hl=withValidation(SharePublishRequestSchema,async(e,t,S)=>{if(!de){emitSharePublishLog(`publish-create`,`no-project`),successResponse(t,200,SharePublishResponseSchema,{ok:!1,error:`no-project`},{handler:SHARE_PUBLISH_HANDLER_TAG});return}if(!isValidShareOwnerName(S.owner)||!isValidShareRepoName(S.name)){errorResponse(t,400,`urn:ok:error:invalid-request`,`owner and name must be valid GitHub identifiers.`,{handler:SHARE_PUBLISH_HANDLER_TAG});return}if(!we.tryAcquire(`/api/share/publish`)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`A share publish operation is already in progress.`,{handler:SHARE_PUBLISH_HANDLER_TAG,extraHeaders:{"Retry-After":`5`}});return}try{let e=[`share`,`publish`,`--owner`,S.owner,`--name`,S.name,`--visibility`,S.visibility,`--project-dir`,de,`--json`];S.description!==void 0&&S.description.length>0&&e.push(`--description`,S.description);let{stdout:w}=await zl(e),E=parsePublishEvent(pickTerminalJsonLine(w));emitSharePublishLog(`publish-create`,E.ok?`ok`:E.error),successResponse(t,200,SharePublishResponseSchema,E,{handler:SHARE_PUBLISH_HANDLER_TAG})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:SHARE_PUBLISH_HANDLER_TAG,cause:e})}finally{we.release(SHARE_PUBLISH_KEY)}},{handler:SHARE_PUBLISH_HANDLER_TAG,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:SHARE_PUBLISH_HANDLER_TAG})}),Ul={"/api/asset":ka,"/api/asset-text":xs,"/api/document":jr,"/api/documents":Mr,"/api/backlinks":Fr,"/api/backlink-counts":Ir,"/api/forward-links":Lr,"/api/link-graph":zr,"/api/dead-links":Hr,"/api/orphans":Br,"/api/hubs":Vr,"/api/tags":Yc,"/api/pages":$s,"/api/folder-config":al,"/api/template":dl,"/api/search":Ol,"/api/suggest-links":ec,"/api/page-headings":Ns,"/api/create-page":Os,"/api/create-folder":ks,"/api/duplicate-path":As,"/api/rename-path":Ps,"/api/delete-path":Is,"/api/trash/cleanup":Rs,"/api/upload":tc,"/api/agent-write":Wt,"/api/agent-write-md":Kt,"/api/frontmatter-patch":$t,"/api/agent-patch":Ur,"/api/agent-undo":Wr,"/api/agent-activity":Gr,"/api/agent-burst-diff":Kr,"/api/save-version":Xr,"/api/history":Zr,"/api/diff":ji,"/api/rollback":Hi,"/api/metrics/reconciliation":Ui,"/api/metrics/parse-health":Gi,"/api/metrics/agent-presence":Xi,"/api/server-info":Ki,"/api/share/construct-url":Il,"/api/git/branch-info":Ll,"/api/git/checkout":Rl,"/api/share/publish/owners":Bl,"/api/share/publish/name-check":Vl,"/api/share/publish":Hl,"/api/principal":Yi,"/api/rescue":Ts,"/api/workspace":Zi,"/api/sync/status":Rc,"/api/sync/trigger":zc,"/api/sync/conflicts":Bc,"/api/sync/conflict-content":Hc,"/api/sync/resolve-conflict":Vc,"/api/sync/abort-merge":Jc,"/api/local-op/clone":cc,"/api/local-op/open":fc,"/api/local-op/ok-init":mc,"/api/local-op/auth/login":Sc,"/api/local-op/auth/status":Tc,"/api/local-op/auth/repos":Dc,"/api/local-op/auth/signout":Ac,"/api/local-op/auth/pat":Mc,"/api/local-op/auth/identity":Pc,"/api/local-op/auth/set-identity":Lc,"/api/installed-agents":qc,"/api/spawn-cursor":Fl,"/api/handoff":Pl,"/api/install-skill":Kc,"/api/skill/install-state":Ml,"/api/seed/plan":Uc,"/api/seed/apply":Wc,"/api/seed/packs":Gc};F&&(Ul[`/api/test-reset`]=qr,Ul[`/api/test-rescan-backlinks`]=Jr,Ul[`/api/test-rescan-files`]=Yr);let Wl=new Set([`/api/upload`,`/api/create-page`,`/api/create-folder`,`/api/duplicate-path`,`/api/rename-path`,`/api/delete-path`,`/api/trash/cleanup`,`/api/agent-write`,`/api/agent-write-md`,`/api/frontmatter-patch`,`/api/agent-patch`,`/api/agent-undo`,`/api/save-version`,`/api/rollback`,`/api/sync/trigger`,`/api/sync/resolve-conflict`,`/api/sync/abort-merge`,`/api/git/checkout`,`/api/test-reset`,`/api/test-rescan-backlinks`,`/api/test-rescan-files`,`/api/install-skill`,`/api/folder-config`,`/api/template`,`/api/seed/apply`]),Gl=[`/api/local-op/`];return{priority:100,async onRequest({request:e,response:t}){let S=e.url?.split(`?`)[0];if(!S)return;if(S.startsWith(`/api/`)){let S=e.headers.origin;if(S!==void 0&&!isAllowedApiOrigin(S)){errorResponse(t,403,`urn:ok:error:invalid-origin`,`Origin not allowed.`,{handler:`api-origin-gate`});return}if(typeof t.setHeader==`function`&&(S!==void 0&&(t.setHeader(`Access-Control-Allow-Origin`,S),t.setHeader(`Vary`,`Origin`)),t.setHeader(`Access-Control-Allow-Methods`,`GET, POST, PUT, DELETE, OPTIONS`),t.setHeader(`Access-Control-Allow-Headers`,`Content-Type, Authorization, traceparent, tracestate, baggage`)),e.method===`OPTIONS`){t.writeHead(204),t.end();return}}if(Wl.has(S)||Gl.some(e=>S.startsWith(e))){let S=e.socket?.remoteAddress;if(S!==void 0&&!isLoopbackAddress(S)){errorResponse(t,403,`urn:ok:error:loopback-required`,`Loopback required.`,{handler:`api-mutating-gate`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){errorResponse(t,403,`urn:ok:error:host-not-allowed`,`Host header not allowed.`,{handler:`api-mutating-gate`});return}}if(!S.startsWith(`/api/`))return;let w=propagation.extract(context.active(),e.headers),E=e.method??`GET`,D=S;S.startsWith(`/api/rescue/`)?D=`/api/rescue/:docName`:S.startsWith(`/api/history/`)?D=`/api/history/:sha`:S.startsWith(`/api/tags/`)?D=`/api/tags/:name`:Ul[S]||(D=`/api/*`);let O=getTracer(),k=Date.now();await context.with(w,()=>O.startActiveSpan(`HTTP ${E} ${D}`,{kind:SpanKind.SERVER,attributes:{[ATTR_HTTP_REQUEST_METHOD]:E,[ATTR_HTTP_ROUTE]:D,[ATTR_URL_PATH]:S,[ATTR_URL_SCHEME]:`http`,[ATTR_USER_AGENT_ORIGINAL]:e.headers[`user-agent`]??``}},async w=>{try{let D=Ul[S],O=!1;if(D)O=!0,await D(e,t);else if(S.startsWith(`/api/rescue/`)){let w=decodeURIComponent(S.slice(12));w&&(O=!0,await Ds(e,t,w))}else if(S.startsWith(`/api/history/`)){let w=decodeURIComponent(S.slice(13));w&&(O=!0,await Qr(e,t,w))}else if(S.startsWith(`/api/tags/`)){let w=S.slice(10);w&&(O=!0,await Xc(e,t,w))}O||errorResponse(t,404,`urn:ok:error:not-found`,`API endpoint not found.`,{handler:`api-dispatch`,detail:`No handler for ${E} ${S}`});let k=t.statusCode;w.setAttribute(ATTR_HTTP_RESPONSE_STATUS_CODE,k),k>=500&&w.setStatus({code:SpanStatusCode.ERROR,message:`status ${k}`})}catch(e){throw w.recordException(e),w.setStatus({code:SpanStatusCode.ERROR,message:e instanceof Error?e.message:String(e)}),!t.headersSent&&!t.writableEnded&&!t.destroyed&&errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:D,cause:e}),e}finally{w.end();let e=(Date.now()-k)/1e3;httpDurationHist().record(e,{[ATTR_HTTP_REQUEST_METHOD]:E,[ATTR_HTTP_ROUTE]:D,[ATTR_HTTP_RESPONSE_STATUS_CODE]:t.statusCode})}}))}}}function isWithinDir(e,t){return e===t?!0:e.startsWith(`${t}${sep}`)}function errnoCode(e){let t=e?.code;return typeof t==`string`?t:void 0}function seedBasenameIndex(e){let t=e.contentDir,S=new Set;function w(E){let D;try{D=readdirSync(E,{withFileTypes:!0})}catch(t){let S=errnoCode(t);S!==`ENOENT`&&e.onSkip?.(`read-failed`,S,E);return}for(let O of D){let D=join(E,O.name),k=relative(t,D);if(k.startsWith(`..`)||e.contentFilter?.isDirExcluded(k)&&O.isDirectory())continue;let j;try{j=lstatSync(D)}catch(t){let S=errnoCode(t);S!==`ENOENT`&&e.onSkip?.(`lstat-failed`,S,D);continue}if(j.isSymbolicLink()){let E;try{E=realpathSync(D)}catch(t){let S=errnoCode(t);S!==`ENOENT`&&e.onSkip?.(`realpath-failed`,S,D);continue}if(!isWithinDir(E,t)){e.onSkip?.(`symlink-escape`,void 0,D);continue}let O;try{O=statSync(E)}catch(t){let S=errnoCode(t);S!==`ENOENT`&&e.onSkip?.(`symlink-stat-failed`,S,E);continue}if(S.has(O.ino))continue;S.add(O.ino),O.isDirectory()?w(E):O.isFile()&&isSupportedAssetFile(D,ASSET_EXTENSIONS)&&!e.contentFilter?.isExcluded(k)&&e.basenameIndex.add(k);continue}if(j.isDirectory()){if(S.has(j.ino))continue;S.add(j.ino),w(D);continue}j.isFile()&&isSupportedAssetFile(D,ASSET_EXTENSIONS)&&!e.contentFilter?.isExcluded(k)&&e.basenameIndex.add(k)}}w(t)}const HocuspocusAuthTokenSchema=object$1({principalId:string$2().optional(),tabSessionId:string$2().optional(),expectedServerInstanceId:string$2().optional(),expectedBranch:string$2().optional()}).loose(),HOCUSPOCUS_AUTH_REJECTION_REASONS=[`server-instance-mismatch`,`branch-mismatch`,`rename-redirect`,`doc-deleted`];function isHocuspocusAuthRejectionReason(e){return HOCUSPOCUS_AUTH_REJECTION_REASONS.includes(e)}const WIRE_PAYLOAD_SEPARATOR=`:`;function formatAuthRejectionWire(e,t){return typeof t!=`string`||t.length===0?e:`${e}${WIRE_PAYLOAD_SEPARATOR}${t}`}function parseAuthRejectionWire(e){if(e.length===0)return{kind:null,payload:void 0};let t=e.indexOf(WIRE_PAYLOAD_SEPARATOR),S=t===-1?e:e.slice(0,t);if(!isHocuspocusAuthRejectionReason(S))return{kind:null,payload:void 0};if(t===-1)return{kind:S,payload:void 0};let w=e.slice(t+1);return{kind:S,payload:w.length>0?w:void 0}}var HocuspocusAuthRejection=class extends Error{kind;payload;reason;constructor(e,t,S){super(t),this.name=`HocuspocusAuthRejection`,this.kind=e,this.payload=typeof S==`string`&&S.length>0?S:void 0,this.reason=formatAuthRejectionWire(e,this.payload)}};function parseHocuspocusAuthToken(e){if(typeof e!=`string`||e.length===0)return;let t;try{t=JSON.parse(e)}catch{return}let S=HocuspocusAuthTokenSchema.safeParse(t);return S.success?S.data:void 0}const log$2=getLogger(`conflict-storage`);var ConflictStore=class{storePath;projectDir;branch;conflicts=[];constructor(e,t=`main`){this.storePath=join(getLocalDir(e),`conflicts.json`),this.projectDir=e,this.branch=t,this.load()}load(){if(!existsSync(this.storePath)){this.conflicts=[];return}try{let e=readFileSync(this.storePath,`utf-8`),t=JSON.parse(e);if(t.version!==1){log$2.warn({path:this.storePath},`[conflicts] unknown schema version — resetting`),this.conflicts=[];return}this.branch=t.branch??this.branch,this.conflicts=t.conflicts??[]}catch(e){log$2.warn({err:e},`[conflicts] failed to load conflicts.json — starting empty`),this.conflicts=[]}}save(){try{let e=dirname(this.storePath);existsSync(e)||mkdirSync(e,{recursive:!0});let t={version:1,branch:this.branch,conflicts:this.conflicts};writeFileSync(this.storePath,JSON.stringify(t,null,2),`utf-8`)}catch(e){log$2.warn({err:e},`[conflicts] failed to save conflicts.json`)}}addConflict(e){let t=this.conflicts.findIndex(t=>t.file===e.file);t===-1?this.conflicts.push(e):this.conflicts[t]=e,this.save()}removeConflict(e){this.conflicts=this.conflicts.filter(t=>t.file!==e),this.save()}clear(){this.conflicts=[],this.save()}count(){return this.conflicts.length}list(){return[...this.conflicts]}hasConflicts(){return this.conflicts.length>0}setBranch(e){this.branch=e}async resolveConflict(e,t,S,w=[]){if(!this.conflicts.find(t=>t.file===e))throw Error(`[conflicts] no conflict tracked for file: ${e}`);if(t===`content`&&S===void 0)throw Error(`[conflicts] strategy 'content' requires content parameter`);let{createGitInstance:E}=await import(`./git-handle-BJwB5EBp-D5YTDzvd.mjs`),D=E(this.projectDir,{credentialArgs:w});switch(t){case`mine`:await D.git.raw([`checkout`,`--ours`,`--`,e]),await D.git.raw([`add`,`--`,e]);break;case`theirs`:await D.git.raw([`checkout`,`--theirs`,`--`,e]),await D.git.raw([`add`,`--`,e]);break;case`content`:{if(S===void 0)throw Error(`[conflicts] strategy 'content' requires content parameter`);let t=resolve(this.projectDir),w=resolve(t,e);if(w!==t&&!w.startsWith(`${t}/`))throw Error(`[conflicts] file path escapes project directory: ${e}`);writeFileSync(w,S,`utf-8`),await D.git.raw([`add`,`--`,e]);break}case`delete`:await D.git.raw([`rm`,`--`,e]);break;default:throw Error(`[conflicts] unknown resolve strategy: ${t}`)}if(this.removeConflict(e),!this.hasConflicts())try{await D.git.raw([`commit`,`--no-edit`]),log$2.info({file:e},`[conflicts] all conflicts resolved — merge commit created`)}catch(t){let S=new Date().toISOString(),w=!1;try{let e=(await D.git.raw([`diff`,`--name-only`,`--diff-filter=U`])).split(`
2381
- `).map(e=>e.trim()).filter(Boolean);for(let t of e)this.addConflict({file:t,detectedAt:S});w=e.length>0}catch(e){log$2.warn({err:e},`[conflicts] commit failed and re-scan of unmerged files failed — falling back to single-file re-add`)}w||this.addConflict({file:e,detectedAt:S}),log$2.warn({err:t},`[conflicts] failed to commit merge after all conflicts resolved — unmerged files re-added`);let E=t instanceof Error?t.message:String(t);throw Error(`Merge commit failed after resolving ${e}; ${w?`unmerged files re-added`:`original file re-added`} — ${E}`,{cause:t})}}};const DEFAULT_WARN_BEFORE_MS=300*1e3;function attachIdleShutdown(e){let t=e.scheduler??defaultScheduler,S=e.warnBeforeMs??DEFAULT_WARN_BEFORE_MS,w=0,E=null,D=null,O=!1,k=!1;function j(){E!==null&&(t.clearTimeout(E),E=null),D!==null&&(t.clearTimeout(D),D=null)}function F(){j(),!(k||O)&&w===0&&(S>0&&S<e.thresholdMs&&(D=t.setTimeout(()=>{D=null,w===0&&!O&&e.log?.warn({msUntilShutdown:S,webSocketClientCount:0},`idle shutdown pending: no WebSocket clients`)},e.thresholdMs-S)),E=t.setTimeout(()=>{if(E=null,!(k||O)&&w===0){O=!0,e.log?.info({webSocketClientCount:0},`idle shutdown firing`);try{let t=e.onShutdown();t&&typeof t.then==`function`&&t.catch(t=>{e.log?.error({err:t},`idle shutdown handler rejected`)})}catch(t){e.log?.error({err:t},`idle shutdown handler threw`)}}},e.thresholdMs))}let L=(e,t)=>{e.url?.startsWith(`/collab`)&&(w++,j(),t.once(`close`,()=>{w--,w<0&&(w=0),w===0&&F()}))};return e.httpServer.on(`upgrade`,L),F(),{detach:()=>{k||(k=!0,e.httpServer.off(`upgrade`,L),j())}}}const MCP_SERVER_NAME=`open-knowledge`,MCP_CONNECTION_ID_HEADER=`x-ok-connection-id`;function sanitizeClientName(e,t){let S=Array.from(e??``).map(e=>{let t=e.charCodeAt(0);return t<=31||t===127?` `:e}).join(``).replace(/\s+/g,` `).trim();return S?S.slice(0,128):t}function buildInstructions(e){return'Open Knowledge is a markdown-CRDT knowledge base exposed via MCP.\n\n## STOP — native tools on in-scope `.md` / `.mdx`\n\nWhen this workspace has Open Knowledge MCP configured, do **not** use your host\'s native file tools on markdown paths inside the content directory. The ban covers every common rationalization:\n\n- **Native `Read` / `Grep` / `Glob` on in-scope `.md` / `.mdx`** — the original case.\n- **`Bash ls` / `Bash find` / `Bash cat` on dirs containing in-scope markdown** — use `exec("ls -A …")` / `exec("find … -name \'*.md\'")` / `exec("cat …")` instead. Native returns bare names; `exec` returns frontmatter, backlink counts, and recent activity per child. `-A` shows hidden entries (`.ok/`, `.okignore`) which OK projects carry; omit `.` and `..` rows that `-a` would add.\n- **Glob patterns that target markdown** (`**/*.md`, any dir known to be markdown-heavy like `specs/**`, `reports/**`, `docs/**`) — use `exec` with `find`, or `exec("ls -A <dir>")`.\n- **Dispatching the Explore / general-purpose subagent for markdown-heavy exploration** — subagents use native `Read` / `Grep` / `Glob` internally and bypass Open Knowledge entirely. Do markdown exploration yourself via `exec` / `search`. Subagents remain appropriate for **source-code** exploration.\n- **Native `Read` / `Grep` on any in-scope markdown inside `.ok/`** — the `.ok/` directory is in-scope; if it carries `.md` / `.mdx`, treat those the same as any other knowledge-base file.\n\nWhy: native tools skip frontmatter, backlinks, shadow-repo activity, and project git history that OK\'s tools return for every matched knowledge-base file. `exec` is the primary read surface; it runs read-only bash (`cat`, `ls`, `grep`, `find`, `head`, `tail`, `wc`, `sort`, `uniq`, `cut` — pipes OK) and returns raw stdout plus enriched metadata per file.\n\n**MCP tool visibility — not seeing `exec` is NOT the escape hatch.** MCP wiring varies by client. Claude Code, Cursor, Codex, Windsurf, VS Code — each surfaces MCP differently. Server labels are user-defined; tools may not appear as top-level symbols named `exec` in your specific UI. If Open Knowledge is registered as an MCP server in this workspace, route markdown reads through its `exec` / `search` via your client\'s documented MCP invocation (including any generic "call MCP tool" flow). Registration is the test, not top-level-symbol visibility.\n\n**Escape hatch.** Native `Read` / `Grep` / `Glob` on `.md` / `.mdx` is allowed **only** when no Open Knowledge MCP server is registered for this project, **or** immediately after you tried an MCP call and it failed — then begin a user-visible sentence with `Open Knowledge MCP unavailable:`. Never use the hatch because you skipped your client\'s MCP path, didn\'t see `exec` as a top-level tool, or rationalized the skill wasn\'t necessary.\n\n**Source code and non-markdown files** (`.ts`, `.py`, `package.json`, …): native `Read` / `Grep` / `Glob` always.\n\n## Reads — examples\n\n- Read a file: `exec("cat <path>.md")` — contents + full rich enrichment.\n- List a directory: `exec("ls -A <dir>")` — per-child frontmatter, recursive markdown counts, most-recently-updated doc per subdir, folder-level `frontmatter_defaults` + `templates_available`. Prefer `-A` over plain `ls` to surface dot-prefixed entries (`.ok/`, `.okignore`) without the noisy `.`/`..` rows that `-a` adds.\n- Literal search: `exec("grep -rn <term> <dir> | head -5")` — matches + enrichment on matched files.\n- Ranked search: `search({ query })` — cmd-K parity (title boost + body BM25 + recency); use when picking the best doc, not when listing every occurrence.\n\n## Preview — open the browser at session start\n\nThe user watches your edits land in a live browser preview. Open it once at session start, then keep working. Re-navigate only when the user asks to open a different doc, or to land them on a finished deliverable (see below) — not to re-check your own edits.\n\n**End a turn on the deliverable, not your scratch space.** Keep the preview steady *during* a multi-doc task — don\'t yank it around to re-check your own edits. But when a turn created or substantially changed user-facing docs, navigate the preview to the primary deliverable before you hand back: the hub / overview / index page when you created several docs, or the changed doc when you changed one. Don\'t step the user through every supporting source card — the user is watching, so leave them on the result.\n\n**`previewUrl` is a route, not a URL to open.** Every read response (per-doc, on `exec` / `search` / `links` rows) and every write response carries a `previewUrl` — a route fragment like `/#/specs/foo/SPEC`, with **no scheme, host, or port**. It identifies *which doc* to preview, not a URL to hand a browser by itself. Never construct or guess preview URLs.\n\n**Pick how to open the preview by tool capability — not by host name.** Look at the tools actually available to you this session. If a tool can navigate to a URL, it counts as an in-app browser — match on the capability, not on what your host is called.\n\n- **You have a `preview_*` tool** (e.g. `preview_start`) → call `preview_start("open-knowledge-ui")` and nothing else. The pane supplies its own origin; you never need a URL. Do NOT also call `get_preview_url`. Do NOT read, diagnose, or edit `.claude/launch.json` — that file is host-managed, and the OK lock-collision proxy handles the UI-already-running case automatically. If `preview_start` fails, report it to the user; do not try to "fix" `launch.json`.\n- **No `preview_*` tool, but you have an in-app / built-in browser tool** — including Codex\'s built-in browser, and any host tool whose contract is "navigate to a URL" (`browser`, `view_url`, `open_url`, `web.browse`, host-specific names, etc.) → call `get_preview_url` once to get the full browser URL (`{ url, baseUrl, running }`), then navigate your **in-app browser** to `url`. Pass a `docName` to `get_preview_url` to jump straight to a doc, or omit it for the UI root.\n- **Truly no browser-capable tool — if you have ANY tool that navigates to a URL, use the in-app branch above** (a pure stdio host with no URL-navigation tool at all) → call `get_preview_url`, then `open <url>` in the system browser as a last resort, and say so plainly to the user ("opening the preview in your system browser — this host has no in-app browser"). The system browser is the fallback, never the default.\n- **Honor `autoOpen`** (on `get_preview_url`, or on `warning` for write tools). If `false`, do not open or refresh any preview UI; surface the URL only if asked.\n\n**Opening or reading a file IS a preview navigation.** On any "open `<file>`" / "read `<file>`" request, navigate the browser to that doc\'s `previewUrl` route from the tool response — not a separate fetch, not a fresh system-browser launch.\n\n**Four signals to check if the preview is already attached** (read these from each write response):\n\n1. You opened/navigated earlier this session → don\'t reopen.\n2. Write response has `previewUrl` (non-null route) and NO `warning` → a browser is attached somewhere; do nothing.\n3. `warning: { action: "attach-preview-once", previewUrl, message }` → UI reachable, no browser attached; navigate one-shot (`preview_start`, or `get_preview_url` → in-app browser).\n4. `warning: { action: "start-ui", previewUrl: null, message }` → no UI running anywhere. Surface the message verbatim — recovery options are in the in-band copy. Don\'t loop on retries.\n\nWarnings fire at most once per session in the fresh-start case.\n\n**`previewUrl: null` only means "no UI reachable" on the three attach-warning tools: `write_document` / `edit_document` / `edit_frontmatter`.** Workflow tools return prose and don\'t carry `previewUrl`. `delete_document` / `rename` emit `previousPreviewUrl` (different field, for closing stale tabs) and don\'t fire attach warnings. `get_preview_url` reports `running: false` + `url: null` when no UI is running.\n\nIf you see `"Hocuspocus server is not running"`, run `ok start` and retry.\n\nOK Electron and `ok ui` share `ui.lock`; when a second UI binds a different port, the OK lock-collision proxy bridges it to the live server transparently. That is exactly why `previewUrl` is route-only — the port behind the proxy is not the agent\'s to use. **Do not nudge the user to quit OK Electron to free a port** — the proxy handles it, and quitting tears down a UI in active use.\n\n**The preview is read-only for the agent — it is the user\'s view, not a surface you read back.** You cannot click or type to drive edits — the CRDT flow is one-way (agent → MCP → CRDT → preview).\n\n**No screenshots to confirm edits, no generic verification loop.** Do NOT take `preview_screenshot` (host tool, not OK MCP) after a write, and do not run a generic snapshot/eval/screenshot verification loop — OK\'s preview is a read-only, one-way mirror, so the CRDT tool response *is* the confirmation that an edit landed. Screenshot only when debugging a visual rendering issue or when the user explicitly asks to see the preview — never to confirm an edit landed.\n\n## Scope recap\n\nOpen Knowledge looks for documents under the resolved `content.dir` (discoverable at runtime via `get_config({ path: [\'content\', \'dir\'] })`). `.gitignore` and `.okignore` (at the project root and at any folder depth) define exclusions. Folder defaults + templates live in nested `<folder>/.ok/frontmatter.yml` + `<folder>/.ok/templates/` files — NOT in `.ok/config.yml`.\n\nDefault mental model (no jargon): **every `.md` and `.mdx` under `content.dir`** not excluded by `.gitignore` or `.okignore` is an Open Knowledge document — including under `specs/`, `reports/`, `docs/`, etc. Read `.okignore` (and any nested `.okignore` files) once per turn to know what\'s excluded.\n\n**First session in this project?** If `frontmatter_defaults` and `templates_available` are empty for substantial folders, the project hasn\'t been onboarded yet — invoke `discover` (Workflow tools table) before writing. Once onboarded, the cascade carries the discipline.\n\n\nFull guidance lives in the bundled `open-knowledge` skill at `~/.ok/skills/open-knowledge/SKILL.md`.\n'}function installPrettyZodErrors(e){let t=e;if(t.__prettyZodErrorsInstalled===!0)return;let S=t.validateToolInput;if(typeof S!=`function`){console.warn(`[pretty-zod-errors] McpServer.validateToolInput not found — SDK internals may have changed. Falling back to default error formatting.`);return}t.validateToolInput=async function(e,t,w){if(!e.inputSchema||!isZodSchema(e.inputSchema))return S.call(this,e,t,w);let E=await e.inputSchema.safeParseAsync(t);if(E.success)return E.data;let D=prettifyError(E.error);throw new McpError(ErrorCode.InvalidParams,`Input validation error: Invalid arguments for tool ${w}:\n${D}`)},t.__prettyZodErrorsInstalled=!0}function isZodSchema(e){return typeof e!=`object`||!e?!1:typeof e.safeParseAsync==`function`}const loggerContext=new AsyncLocalStorage;var McpLogger=class e{sessionId;corrId;component;constructor(e=`mcp`,t){this.sessionId=t??randomUUID().slice(0,12),this.corrId=randomUUID().slice(0,8),this.component=e}info(e,t={}){this.emit(`info`,e,t)}warn(e,t={}){this.emit(`warn`,e,t)}error(e,t,S={}){let w=t?{error:t instanceof Error?t.message:String(t),...S}:S;this.emit(`error`,e,w)}debug(e,t={}){(process.env.MCP_DEBUG===`1`||process.env.DEBUG?.includes(`mcp`))&&this.emit(`debug`,e,t)}child(t){return new e(t??this.component,this.sessionId)}asCallback(){return e=>this.info(e)}emit(e,t,S){let w={ts:new Date().toISOString(),level:e,sessionId:this.sessionId,corrId:this.corrId,component:this.component,msg:t,...S},E=`${JSON.stringify(w)}\n`;process.stderr.write(E);let D=process.env.OK_LOG_FILE;if(D)try{appendFileSync(D,E)}catch(e){console.warn(`[mcp-logger] Failed to write to OK_LOG_FILE: ${e instanceof Error?e.message:e}`)}}};function runWithMcpLogger(e,t){return loggerContext.run(e,t)}function getCurrentMcpLogger(){return loggerContext.getStore()}const REDACTED_STRING_KEYS=new Set([`find`,`markdown`,`replace`]),COMMON_ARRAY_KEYS=[`backlinks`,`deadLinks`,`documents`,`enrichedPaths`,`entries`,`forwardLinks`,`hints`,`hubs`,`orphans`,`results`],COMMON_SCALAR_KEYS=[`checkpointRef`,`cwd`,`fileCount`,`matchCount`,`ok`,`query`,`stdoutTruncated`,`truncated`];function isPlainObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function isToolExtraLike(e){return isPlainObject(e)&&`requestId`in e}function summarizeStringForLog(e,t){if(REDACTED_STRING_KEYS.has(e))return{redacted:!0,type:`string`,length:t.length,lines:t.length===0?0:t.split(`
2381
+ `).map(e=>e.trim()).filter(Boolean);for(let t of e)this.addConflict({file:t,detectedAt:S});w=e.length>0}catch(e){log$2.warn({err:e},`[conflicts] commit failed and re-scan of unmerged files failed — falling back to single-file re-add`)}w||this.addConflict({file:e,detectedAt:S}),log$2.warn({err:t},`[conflicts] failed to commit merge after all conflicts resolved — unmerged files re-added`);let E=t instanceof Error?t.message:String(t);throw Error(`Merge commit failed after resolving ${e}; ${w?`unmerged files re-added`:`original file re-added`} — ${E}`,{cause:t})}}};const MIN_GIT_VERSION=`2.31.0`,PROBE_TIMEOUT_MS$1=5e3;var GitNotAvailableError=class extends Error{code=`GIT_NOT_AVAILABLE`;platform;guidance;constructor(e,t,S){super(buildMissingMessage(t),S),this.name=`GitNotAvailableError`,this.platform=e,this.guidance=t}},GitTooOldError=class extends Error{code=`GIT_TOO_OLD`;platform;detected;required;resolvedPath;guidance;constructor(e,t,S,w,E,D){super(buildTooOldMessage(t,S,w,E),D),this.name=`GitTooOldError`,this.platform=e,this.detected=t,this.required=S,this.resolvedPath=w,this.guidance=E}};function detectGit(){let e=probeGit(`git`);if(e.kind===`ok`)return{ok:!0,version:e.version,resolvedPath:e.resolvedPath,source:`PATH`};for(let e of fallbackPaths(process.platform)){if(!existsSync(e))continue;let t=probeGit(e);if(t.kind===`ok`)return{ok:!0,version:t.version,resolvedPath:e,source:`fallback`}}throw new GitNotAvailableError(process.platform,buildGuidance(process.platform))}function assertGitAvailable(){let e=detectGit();if(compareSemver(e.version,`2.31.0`)<0)throw new GitTooOldError(process.platform,e.version,MIN_GIT_VERSION,e.resolvedPath,buildGuidance(process.platform));return e}function probeGit(e){let t=spawnSync(e,[`--version`],{encoding:`utf-8`,timeout:PROBE_TIMEOUT_MS$1,env:{...process.env,LANG:`C`,LC_ALL:`C`}});if(t.error)return`signal`in t&&t.signal===`SIGTERM`?{kind:`fail`,reason:`timeout`}:{kind:`fail`,reason:`enoent`};if(t.status!==0)return{kind:`fail`,reason:`nonzero`};let S=parseGitVersion(typeof t.stdout==`string`?t.stdout:``);return S===null?{kind:`fail`,reason:`unparseable`}:{kind:`ok`,version:S,resolvedPath:e===`git`?resolveOnPath(`git`)??e:e}}function parseGitVersion(e){let t=e.match(/git version (\d+)\.(\d+)\.(\d+)/);return t?`${t[1]}.${t[2]}.${t[3]}`:null}const SAFE_COMMAND_NAME_RE=/^[a-zA-Z0-9_.-]+$/,resolveOnPathCache=new Map;function resolveOnPath(e){if(!SAFE_COMMAND_NAME_RE.test(e))return null;let t=resolveOnPathCache.get(e);if(t!==void 0)return t;let S;if(process.platform===`win32`){let t=spawnSync(`where`,[e],{encoding:`utf-8`,timeout:PROBE_TIMEOUT_MS$1});S=t.status===0&&(typeof t.stdout==`string`?t.stdout:``).trim().split(/\r?\n/)[0]||null}else{let t=spawnSync(`/bin/sh`,[`-c`,`command -v ${e}`],{encoding:`utf-8`,timeout:PROBE_TIMEOUT_MS$1});S=t.status===0&&(typeof t.stdout==`string`?t.stdout:``).trim().split(/\r?\n/)[0]||null}return S!==null&&resolveOnPathCache.set(e,S),S}function fallbackPaths(e){switch(e){case`darwin`:return[`/opt/homebrew/bin/git`,`/usr/local/bin/git`,`/Library/Developer/CommandLineTools/usr/bin/git`,`/usr/bin/git`];case`win32`:return[`C:\\Program Files\\Git\\cmd\\git.exe`,`C:\\Program Files (x86)\\Git\\cmd\\git.exe`,join(homedir(),`scoop`,`apps`,`git`,`current`,`cmd`,`git.exe`)];default:return[`/usr/bin/git`,`/usr/local/bin/git`,join(homedir(),`.local`,`bin`,`git`),`/snap/bin/git`]}}function buildGuidance(e){switch(e){case`darwin`:{let e=[];return hasBrew()&&e.push({label:`Install with Homebrew (recommended; no admin needed)`,command:`brew install git`,requiresAdmin:!1}),e.push({label:`Install Xcode Command Line Tools`,command:`xcode-select --install`,requiresAdmin:!0}),{product:`Git`,url:`https://git-scm.com/download/mac`,options:e}}case`win32`:{let e=[];return hasWinget()&&e.push({label:`Install with winget`,command:`winget install --id Git.Git -e --source winget`,requiresAdmin:!0}),hasScoop()&&e.push({label:`Install with Scoop (no admin)`,command:`scoop install git`,requiresAdmin:!1}),hasChoco()&&e.push({label:`Install with Chocolatey`,command:`choco install git -y`,requiresAdmin:!0}),e.push({label:`Download the official installer`,command:`Open https://gitforwindows.org/ in your browser`,requiresAdmin:!1}),{product:`Git for Windows`,url:`https://gitforwindows.org/`,options:e}}default:return{product:`Git`,url:`https://git-scm.com/download/linux`,options:linuxInstallOptions()}}}function linuxInstallOptions(){switch(detectLinuxFamily()){case`debian`:return[{label:`Install with apt`,command:`sudo apt install git`,requiresAdmin:!0}];case`fedora`:return[{label:`Install with dnf`,command:`sudo dnf install git`,requiresAdmin:!0}];case`arch`:return[{label:`Install with pacman`,command:`sudo pacman -S git`,requiresAdmin:!0}];case`opensuse`:return[{label:`Install with zypper`,command:`sudo zypper install git`,requiresAdmin:!0}];case`alpine`:return[{label:`Install with apk`,command:`sudo apk add git`,requiresAdmin:!0}];default:return[{label:`Use your distribution's package manager`,command:`apt / dnf / pacman / zypper / apk install git (one of these will fit your system)`,requiresAdmin:!0}]}}function detectLinuxFamily(e){let t=e;if(t===void 0)try{t=readFileSync(`/etc/os-release`,`utf-8`)}catch{return`unknown`}let S=[/^ID=(.+)$/m.exec(t)?.[1]?.replace(/["']/g,``),...(/^ID_LIKE=(.+)$/m.exec(t)?.[1]?.replace(/["']/g,``)??``).split(/\s+/)].filter(e=>!!e);return S.some(e=>/^(debian|ubuntu|mint|pop)$/i.test(e))?`debian`:S.some(e=>/^(fedora|rhel|centos|alma|rocky)$/i.test(e))?`fedora`:S.some(e=>/^(arch|manjaro|endeavouros)$/i.test(e))?`arch`:S.some(e=>/^opensuse/i.test(e))||S.includes(`suse`)?`opensuse`:S.some(e=>/^alpine$/i.test(e))?`alpine`:`unknown`}function hasCommand(e){return resolveOnPath(e)!==null}function hasBrew(){return hasCommand(`brew`)}function hasWinget(){return hasCommand(`winget`)}function hasScoop(){return hasCommand(`scoop`)}function hasChoco(){return hasCommand(`choco`)}function buildMissingMessage(e){let t=[];if(t.push(`Open Knowledge needs ${e.product} to track changes to your knowledge base, but it isn't installed (or isn't on PATH).`),t.push(``),e.options.length>0){t.push(`Install ${e.product}:`);for(let S of e.options){let e=S.requiresAdmin?` (admin required)`:``;t.push(` • ${S.label}${e}`),t.push(` ${S.command}`)}t.push(``)}return t.push(`Or download from: ${e.url}`),t.push(``),t.push(`After installing, re-run Open Knowledge.`),t.push("Run `ok diagnose health --check git` to verify your installation."),t.join(`
2382
+ `)}function buildTooOldMessage(e,t,S,w){let E=[];if(E.push(`Open Knowledge requires ${w.product} ${t} or newer (detected ${e} at ${S}).`),E.push(``),w.options.length>0){E.push(`Update ${w.product}:`);for(let e of w.options){let t=e.requiresAdmin?` (admin required)`:``;E.push(` • ${e.label}${t}`),E.push(` ${e.command}`)}E.push(``)}return E.push(`Or download from: ${w.url}`),E.push(``),E.push(`After updating, re-run Open Knowledge.`),E.push("Run `ok diagnose health --check git` to verify your installation."),E.join(`
2383
+ `)}function compareSemver(e,t){let S=e.split(`.`).map(e=>Number.parseInt(e,10)||0),w=t.split(`.`).map(e=>Number.parseInt(e,10)||0);for(let e=0;e<3;e++){let t=S[e]??0,E=w[e]??0;if(t!==E)return t-E}return 0}const GIT_PREFLIGHT_FAIL_SPAN_NAME=`ok.preflight.git.fail`;function emitPreflightFailureSpan(e){let t=e instanceof GitTooOldError?`too_old`:`not_available`,S=e instanceof GitTooOldError?e.detected:``;withSpanSync(GIT_PREFLIGHT_FAIL_SPAN_NAME,{attributes:{"ok.platform":e.platform,"ok.preflight.git.reason":t,"ok.preflight.git.detected_version":S}},()=>{})}const DEFAULT_WARN_BEFORE_MS=300*1e3;function attachIdleShutdown(e){let t=e.scheduler??defaultScheduler,S=e.warnBeforeMs??DEFAULT_WARN_BEFORE_MS,w=0,E=null,D=null,O=!1,k=!1;function j(){E!==null&&(t.clearTimeout(E),E=null),D!==null&&(t.clearTimeout(D),D=null)}function F(){j(),!(k||O)&&w===0&&(S>0&&S<e.thresholdMs&&(D=t.setTimeout(()=>{D=null,w===0&&!O&&e.log?.warn({msUntilShutdown:S,webSocketClientCount:0},`idle shutdown pending: no WebSocket clients`)},e.thresholdMs-S)),E=t.setTimeout(()=>{if(E=null,!(k||O)&&w===0){O=!0,e.log?.info({webSocketClientCount:0},`idle shutdown firing`);try{let t=e.onShutdown();t&&typeof t.then==`function`&&t.catch(t=>{e.log?.error({err:t},`idle shutdown handler rejected`)})}catch(t){e.log?.error({err:t},`idle shutdown handler threw`)}}},e.thresholdMs))}let L=(e,t)=>{e.url?.startsWith(`/collab`)&&(w++,j(),t.once(`close`,()=>{w--,w<0&&(w=0),w===0&&F()}))};return e.httpServer.on(`upgrade`,L),F(),{detach:()=>{k||(k=!0,e.httpServer.off(`upgrade`,L),j())}}}const MCP_SERVER_NAME=`open-knowledge`,MCP_CONNECTION_ID_HEADER=`x-ok-connection-id`;function sanitizeClientName(e,t){let S=Array.from(e??``).map(e=>{let t=e.charCodeAt(0);return t<=31||t===127?` `:e}).join(``).replace(/\s+/g,` `).trim();return S?S.slice(0,128):t}function buildInstructions(e){return'Open Knowledge is a markdown-CRDT knowledge base exposed via MCP.\n\n## STOP — native tools on in-scope `.md` / `.mdx`\n\nWhen this workspace has Open Knowledge MCP configured, do **not** use your host\'s native file tools on markdown paths inside the content directory. The ban covers every common rationalization:\n\n- **Native `Read` / `Grep` / `Glob` on in-scope `.md` / `.mdx`** — the original case.\n- **`Bash ls` / `Bash find` / `Bash cat` on dirs containing in-scope markdown** — use `exec("ls -A …")` / `exec("find … -name \'*.md\'")` / `exec("cat …")` instead. Native returns bare names; `exec` returns frontmatter, backlink counts, and recent activity per child. `-A` shows hidden entries (`.ok/`, `.okignore`) which OK projects carry; omit `.` and `..` rows that `-a` would add.\n- **Glob patterns that target markdown** (`**/*.md`, any dir known to be markdown-heavy like `specs/**`, `reports/**`, `docs/**`) — use `exec` with `find`, or `exec("ls -A <dir>")`.\n- **Dispatching the Explore / general-purpose subagent for markdown-heavy exploration** — subagents use native `Read` / `Grep` / `Glob` internally and bypass Open Knowledge entirely. Do markdown exploration yourself via `exec` / `search`. Subagents remain appropriate for **source-code** exploration.\n- **Native `Read` / `Grep` on any in-scope markdown inside `.ok/`** — the `.ok/` directory is in-scope; if it carries `.md` / `.mdx`, treat those the same as any other knowledge-base file.\n\nWhy: native tools skip frontmatter, backlinks, shadow-repo activity, and project git history that OK\'s tools return for every matched knowledge-base file. `exec` is the primary read surface; it runs read-only bash (`cat`, `ls`, `grep`, `find`, `head`, `tail`, `wc`, `sort`, `uniq`, `cut` — pipes OK) and returns raw stdout plus enriched metadata per file.\n\n**MCP tool visibility — not seeing `exec` is NOT the escape hatch.** MCP wiring varies by client. Claude Code, Cursor, Codex, Windsurf, VS Code — each surfaces MCP differently. Server labels are user-defined; tools may not appear as top-level symbols named `exec` in your specific UI. If Open Knowledge is registered as an MCP server in this workspace, route markdown reads through its `exec` / `search` via your client\'s documented MCP invocation (including any generic "call MCP tool" flow). Registration is the test, not top-level-symbol visibility.\n\n**Escape hatch.** Native `Read` / `Grep` / `Glob` on `.md` / `.mdx` is allowed **only** when no Open Knowledge MCP server is registered for this project, **or** immediately after you tried an MCP call and it failed — then begin a user-visible sentence with `Open Knowledge MCP unavailable:`. Never use the hatch because you skipped your client\'s MCP path, didn\'t see `exec` as a top-level tool, or rationalized the skill wasn\'t necessary.\n\n**Source code and non-markdown files** (`.ts`, `.py`, `package.json`, …): native `Read` / `Grep` / `Glob` always.\n\n## Reads — examples\n\n- Read a file: `exec("cat <path>.md")` — contents + full rich enrichment.\n- List a directory: `exec("ls -A <dir>")` — per-child frontmatter, recursive markdown counts, most-recently-updated doc per subdir, folder-level `frontmatter_defaults` + `templates_available`. Prefer `-A` over plain `ls` to surface dot-prefixed entries (`.ok/`, `.okignore`) without the noisy `.`/`..` rows that `-a` adds.\n- Literal search: `exec("grep -rn <term> <dir> | head -5")` — matches + enrichment on matched files.\n- Ranked search: `search({ query })` — cmd-K parity (title boost + body BM25 + recency); use when picking the best doc, not when listing every occurrence.\n\n## Preview — open the browser at session start\n\nThe user watches your edits land in a live browser preview. Open it once at session start, then keep working. Re-navigate only when the user asks to open a different doc, or to land them on a finished deliverable (see below) — not to re-check your own edits.\n\n**End a turn on the deliverable, not your scratch space.** Keep the preview steady *during* a multi-doc task — don\'t yank it around to re-check your own edits. But when a turn created or substantially changed user-facing docs, navigate the preview to the primary deliverable before you hand back: the hub / overview / index page when you created several docs, or the changed doc when you changed one. Don\'t step the user through every supporting source card — the user is watching, so leave them on the result.\n\n**`previewUrl` is a route, not a URL to open.** Every read response (per-doc, on `exec` / `search` / `links` rows) and every write response carries a `previewUrl` — a route fragment like `/#/specs/foo/SPEC`, with **no scheme, host, or port**. It identifies *which doc* to preview, not a URL to hand a browser by itself. Never construct or guess preview URLs.\n\n**Pick how to open the preview by tool capability — not by host name.** Look at the tools actually available to you this session. If a tool can navigate to a URL, it counts as an in-app browser — match on the capability, not on what your host is called.\n\n- **You have a `preview_*` tool** (e.g. `preview_start`) → call `preview_start("open-knowledge-ui")` and nothing else. The pane supplies its own origin; you never need a URL. Do NOT also call `get_preview_url`. Do NOT read, diagnose, or edit `.claude/launch.json` — that file is host-managed, and the OK lock-collision proxy handles the UI-already-running case automatically. If `preview_start` fails, report it to the user; do not try to "fix" `launch.json`.\n- **No `preview_*` tool, but you have an in-app / built-in browser tool** — including Codex\'s built-in browser, and any host tool whose contract is "navigate to a URL" (`browser`, `view_url`, `open_url`, `web.browse`, host-specific names, etc.) → call `get_preview_url` once to get the full browser URL (`{ url, baseUrl, running }`), then navigate your **in-app browser** to `url`. Pass a `docName` to `get_preview_url` to jump straight to a doc, or omit it for the UI root.\n- **Truly no browser-capable tool — if you have ANY tool that navigates to a URL, use the in-app branch above** (a pure stdio host with no URL-navigation tool at all) → call `get_preview_url`, then `open <url>` in the system browser as a last resort, and say so plainly to the user ("opening the preview in your system browser — this host has no in-app browser"). The system browser is the fallback, never the default.\n- **Honor `autoOpen`** (on `get_preview_url`, or on `warning` for write tools). If `false`, do not open or refresh any preview UI; surface the URL only if asked.\n\n**Opening or reading a file IS a preview navigation.** On any "open `<file>`" / "read `<file>`" request, navigate the browser to that doc\'s `previewUrl` route from the tool response — not a separate fetch, not a fresh system-browser launch.\n\n**Four signals to check if the preview is already attached** (read these from each write response):\n\n1. You opened/navigated earlier this session → don\'t reopen.\n2. Write response has `previewUrl` (non-null route) and NO `warning` → a browser is attached somewhere; do nothing.\n3. `warning: { action: "attach-preview-once", previewUrl, message }` → UI reachable, no browser attached; navigate one-shot (`preview_start`, or `get_preview_url` → in-app browser).\n4. `warning: { action: "start-ui", previewUrl: null, message }` → no UI running anywhere. Surface the message verbatim — recovery options are in the in-band copy. Don\'t loop on retries.\n\nWarnings fire at most once per session in the fresh-start case.\n\n**`previewUrl: null` only means "no UI reachable" on the three attach-warning tools: `write_document` / `edit_document` / `edit_frontmatter`.** Workflow tools return prose and don\'t carry `previewUrl`. `delete_document` / `rename` emit `previousPreviewUrl` (different field, for closing stale tabs) and don\'t fire attach warnings. `get_preview_url` reports `running: false` + `url: null` when no UI is running.\n\nIf you see `"Hocuspocus server is not running"`, run `ok start` and retry.\n\nOK Electron and `ok ui` share `ui.lock`; when a second UI binds a different port, the OK lock-collision proxy bridges it to the live server transparently. That is exactly why `previewUrl` is route-only — the port behind the proxy is not the agent\'s to use. **Do not nudge the user to quit OK Electron to free a port** — the proxy handles it, and quitting tears down a UI in active use.\n\n**The preview is read-only for the agent — it is the user\'s view, not a surface you read back.** You cannot click or type to drive edits — the CRDT flow is one-way (agent → MCP → CRDT → preview).\n\n**No screenshots to confirm edits, no generic verification loop.** Do NOT take `preview_screenshot` (host tool, not OK MCP) after a write, and do not run a generic snapshot/eval/screenshot verification loop — OK\'s preview is a read-only, one-way mirror, so the CRDT tool response *is* the confirmation that an edit landed. Screenshot only when debugging a visual rendering issue or when the user explicitly asks to see the preview — never to confirm an edit landed.\n\n## Scope recap\n\nOpen Knowledge looks for documents under the resolved `content.dir` (discoverable at runtime via `get_config({ path: [\'content\', \'dir\'] })`). `.gitignore` and `.okignore` (at the project root and at any folder depth) define exclusions. Folder defaults + templates live in nested `<folder>/.ok/frontmatter.yml` + `<folder>/.ok/templates/` files — NOT in `.ok/config.yml`.\n\nDefault mental model (no jargon): **every `.md` and `.mdx` under `content.dir`** not excluded by `.gitignore` or `.okignore` is an Open Knowledge document — including under `specs/`, `reports/`, `docs/`, etc. Read `.okignore` (and any nested `.okignore` files) once per turn to know what\'s excluded.\n\n**First session in this project?** If `frontmatter_defaults` and `templates_available` are empty for substantial folders, the project hasn\'t been onboarded yet — invoke `discover` (Workflow tools table) before writing. Once onboarded, the cascade carries the discipline.\n\n\nFull guidance lives in the bundled `open-knowledge` skill at `~/.ok/skills/open-knowledge/SKILL.md`.\n'}function installPrettyZodErrors(e){let t=e;if(t.__prettyZodErrorsInstalled===!0)return;let S=t.validateToolInput;if(typeof S!=`function`){console.warn(`[pretty-zod-errors] McpServer.validateToolInput not found — SDK internals may have changed. Falling back to default error formatting.`);return}t.validateToolInput=async function(e,t,w){if(!e.inputSchema||!isZodSchema(e.inputSchema))return S.call(this,e,t,w);let E=await e.inputSchema.safeParseAsync(t);if(E.success)return E.data;let D=prettifyError(E.error);throw new McpError(ErrorCode.InvalidParams,`Input validation error: Invalid arguments for tool ${w}:\n${D}`)},t.__prettyZodErrorsInstalled=!0}function isZodSchema(e){return typeof e!=`object`||!e?!1:typeof e.safeParseAsync==`function`}const loggerContext=new AsyncLocalStorage;var McpLogger=class e{sessionId;corrId;component;constructor(e=`mcp`,t){this.sessionId=t??randomUUID().slice(0,12),this.corrId=randomUUID().slice(0,8),this.component=e}info(e,t={}){this.emit(`info`,e,t)}warn(e,t={}){this.emit(`warn`,e,t)}error(e,t,S={}){let w=t?{error:t instanceof Error?t.message:String(t),...S}:S;this.emit(`error`,e,w)}debug(e,t={}){(process.env.MCP_DEBUG===`1`||process.env.DEBUG?.includes(`mcp`))&&this.emit(`debug`,e,t)}child(t){return new e(t??this.component,this.sessionId)}asCallback(){return e=>this.info(e)}emit(e,t,S){let w={ts:new Date().toISOString(),level:e,sessionId:this.sessionId,corrId:this.corrId,component:this.component,msg:t,...S},E=`${JSON.stringify(w)}\n`;process.stderr.write(E);let D=process.env.OK_LOG_FILE;if(D)try{appendFileSync(D,E)}catch(e){console.warn(`[mcp-logger] Failed to write to OK_LOG_FILE: ${e instanceof Error?e.message:e}`)}}};function runWithMcpLogger(e,t){return loggerContext.run(e,t)}function getCurrentMcpLogger(){return loggerContext.getStore()}const REDACTED_STRING_KEYS=new Set([`find`,`markdown`,`replace`]),COMMON_ARRAY_KEYS=[`backlinks`,`deadLinks`,`documents`,`enrichedPaths`,`entries`,`forwardLinks`,`hints`,`hubs`,`orphans`,`results`],COMMON_SCALAR_KEYS=[`checkpointRef`,`cwd`,`fileCount`,`matchCount`,`ok`,`query`,`stdoutTruncated`,`truncated`];function isPlainObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function isToolExtraLike(e){return isPlainObject(e)&&`requestId`in e}function summarizeStringForLog(e,t){if(REDACTED_STRING_KEYS.has(e))return{redacted:!0,type:`string`,length:t.length,lines:t.length===0?0:t.split(`
2382
2384
  `).length};let S=e===`command`?240:120;return t.length<=S?t:{type:`string`,length:t.length,preview:`${t.slice(0,S)}...`}}function summarizeArgValue(e,t){if(t===null)return null;if(typeof t==`string`)return summarizeStringForLog(e,t);if(typeof t==`number`||typeof t==`boolean`)return t;if(Array.isArray(t))return{type:`array`,length:t.length};if(isPlainObject(t)){let e=Object.keys(t).sort();return{type:`object`,keyCount:e.length,keys:e.slice(0,12)}}if(t!==void 0)return{type:typeof t}}function summarizeArgsForLog(e,t){return isPlainObject(t)?Object.fromEntries(Object.entries(t).map(([e,t])=>[e,summarizeArgValue(e,t)])):summarizeArgValue(e,t)}function summarizeStructuredContentForLog(e){let t={structuredKeys:Object.keys(e).sort()};for(let S of COMMON_SCALAR_KEYS)S in e&&(t[S]=e[S]);for(let S of COMMON_ARRAY_KEYS){let w=e[S];Array.isArray(w)&&(t[`${S}Count`]=w.length)}return`previewUrl`in e&&(t.previewUrl=e.previewUrl??null),`previewUrlSource`in e&&(t.previewUrlSource=e.previewUrlSource),typeof e.stdout==`string`&&(t.stdoutChars=e.stdout.length),Array.isArray(e.warnings)&&(t.warningsCount=e.warnings.length),isPlainObject(e.warning)&&(t.warning=!0,`previewUrl`in e.warning&&(t.warningPreviewUrl=e.warning.previewUrl??null)),t}function summarizeToolResultForLog(e){if(!isPlainObject(e))return{resultType:typeof e};let t={isError:e.isError===!0};return Array.isArray(e.content)&&(t.contentItems=e.content.length,t.contentTextChars=e.content.reduce((e,t)=>isPlainObject(t)&&typeof t.text==`string`?e+t.text.length:e,0)),isPlainObject(e.structuredContent)&&Object.assign(t,summarizeStructuredContentForLog(e.structuredContent)),t}function summarizeIdentityForLog(e){return{connectionId:e.connectionId.slice(0,8),displayName:e.displayName,...e.clientInfo?.name?{clientName:e.clientInfo.name}:{}}}function splitInvocationArgs(e){let t=e.at(-1);return isToolExtraLike(t)?{toolArgs:e.length>1?e[0]:void 0,extra:t}:{toolArgs:e[0],extra:void 0}}function wrapToolHandlerForLogging(e,t,S){let w=S.logger;return w?async(...E)=>{let D=w.child(),O=Date.now(),{toolArgs:k,extra:j}=splitInvocationArgs(E);D.info(`tool start`,{tool:e,...j?.requestId===void 0?{}:{requestId:j.requestId},...j?.sessionId?{transportSessionId:j.sessionId}:{},...S.identityRef?.current?{agent:summarizeIdentityForLog(S.identityRef.current)}:{},...k===void 0?{}:{args:summarizeArgsForLog(e,k)}});try{let S=await runWithMcpLogger(D,async()=>await t(...E));return D.info(`tool finish`,{tool:e,...j?.requestId===void 0?{}:{requestId:j.requestId},durationMs:Date.now()-O,result:summarizeToolResultForLog(S)}),S}catch(t){throw D.error(`tool error`,t,{tool:e,...j?.requestId===void 0?{}:{requestId:j.requestId},durationMs:Date.now()-O}),t}}:t}function createLoggedServer(e,t){if(!t.logger)return e;let S=e.tool.bind(e),w=e.registerTool,E=typeof w==`function`?w.bind(e):void 0,D=Object.create(e);return D.tool=((...e)=>{let w=String(e[0]),E=e.at(-1);if(typeof E!=`function`)return S(...e);let D=[...e];return D[D.length-1]=wrapToolHandlerForLogging(w,E,t),S(...D)}),E&&(D.registerTool=((e,S,w)=>typeof w==`function`?E(e,S,wrapToolHandlerForLogging(e,w,t)):E(e,S,w))),D}function buildBody$2(e,t){return`Promote existing research on this topic into a canonical article inside the project content directory. **Canonical, not provisional** — the output is the source of truth for future agents.
2383
2385
 
2384
2386
  Topic: ${e}
@@ -3502,6 +3504,6 @@ In headless mode, write the recap into the research article's "Further reading"
3502
3504
  `,`
3503
3505
  `).split(`
3504
3506
  `),S=[],w=!1,E=``;for(let e of t){let t=/^\s{0,3}([`~]{3,})/.exec(e);if(t){w?RegExp(`^\\s{0,3}${E[0]==="`"?"`":`~`}{${E.length},}\\s*$`).test(e)&&(w=!1,E=``):(w=!0,E=t[1]);continue}if(w)continue;let D=stripInlineCodeSpans(e);for(TAG_VALUE_RE.lastIndex=0;;){let e=TAG_VALUE_RE.exec(D);if(e===null)break;let t=e[2];t&&S.push(t)}}return S}var TagIndex=class{contentDir;contentFilter;state=createEmptyState();constructor(e){this.contentDir=e.contentDir,this.contentFilter=e.contentFilter}updateDocumentFromMarkdown(e,t){if(!(isSystemDoc(e)||isConfigDoc(e)))try{let{frontmatter:S,body:w}=stripFrontmatter(t),E=extractFrontmatterTags(S?unwrapFrontmatterFences(S):``),D=extractInlineTagsFromBody(w),O=new Set([...E,...D]),k=new Set;for(let e of O)for(let t of expandTagToHierarchy(e))k.add(t);this.applyDocSnapshot(e,O,k)}catch(t){console.warn(`[tag-index] Failed to scan ${e} for tag extraction:`,t),this.deleteDocument(e)}}deleteDocument(e){if(isSystemDoc(e)||isConfigDoc(e))return;let t=this.state.byDoc.get(e);if(t){for(let S of t){let t=this.state.byTag.get(S);t&&(t.delete(e),t.size===0&&this.state.byTag.delete(S))}this.state.byDoc.delete(e),this.state.byDocLiteral.delete(e)}}renameDocument(e,t,S){this.deleteDocument(e),this.updateDocumentFromMarkdown(t,S)}getDocsForTag(e){let t=this.state.byTag.get(e);return t?[...t].sort((e,t)=>e.localeCompare(t)):[]}getDocsForTagWithMatches(e){let t=this.state.byTag.get(e);if(!t)return[];let S=[];for(let w of t){let t=this.state.byDocLiteral.get(w);if(!t)continue;let E=tagsMatchingPrefix(t,e);S.push({docName:w,matchingTags:[...E].sort((e,t)=>e.localeCompare(t))})}return S.sort((e,t)=>e.docName.localeCompare(t.docName))}getAllTags(){let e=[...this.state.byTag.entries()],t=e.map(([e])=>e),S=new Set;for(let e of t){let t=e.indexOf(`/`);t>0&&S.add(e.slice(0,t));let w=t;for(;w>0;)S.add(e.slice(0,w)),w=e.indexOf(`/`,w+1)}return e.map(([e,t])=>({name:e,count:t.size,isLeaf:!S.has(e)})).sort((e,t)=>e.name.localeCompare(t.name))}init(){if(this.state=createEmptyState(),!existsSync(this.contentDir))return;let e=this.listDocsWithPaths();for(let{docName:t,filePath:S}of e)try{let e=readFileSync(S,`utf-8`);this.updateDocumentFromMarkdown(t,e)}catch(e){console.warn(`[tag-index] Failed to read ${t} during init:`,e)}}applyDocSnapshot(e,t,S){let w=this.state.byDoc.get(e)??new Set;for(let t of w){if(S.has(t))continue;let w=this.state.byTag.get(t);w&&(w.delete(e),w.size===0&&this.state.byTag.delete(t))}for(let t of S){let S=this.state.byTag.get(t);S||(S=new Set,this.state.byTag.set(t,S)),S.add(e)}S.size===0?(this.state.byDoc.delete(e),this.state.byDocLiteral.delete(e)):(this.state.byDoc.set(e,S),this.state.byDocLiteral.set(e,t))}listDocsWithPaths(){let e=[];this.walkContentDir(this.contentDir,e),e.sort((e,t)=>e.docName===t.docName?t.filePath.localeCompare(e.filePath):e.docName.localeCompare(t.docName));let t=new Set;return e.filter(({docName:e})=>t.has(e)?!1:(t.add(e),!0))}walkContentDir(e,t){let S;try{S=readdirSync(e,{withFileTypes:!0})}catch(t){console.warn(`[tag-index] Failed to read directory ${e}:`,t);return}for(let w of S){let S=join(e,w.name);if(w.isDirectory()){let e=relative(this.contentDir,S);if(this.contentFilter&&e&&this.contentFilter.isDirExcluded(e))continue;this.walkContentDir(S,t);continue}if(!w.isFile()||!isSupportedDocFile(w.name))continue;let E=relative(this.contentDir,S);this.contentFilter?.isExcluded(E)||t.push({docName:stripDocExtension(E),filePath:S})}}};const PARK_SNAPSHOT_ORIGIN=(()=>{let e=Object.freeze({origin:`park-snapshot`,paired:!0});return Object.freeze({source:`local`,skipStoreHooks:!1,context:e})})();function createServer$1(e){let{contentDir:t,projectDir:S=t,quiet:w=!0,debounce:E=2e3,maxDebounce:D=1e4,gitEnabled:O=!0,commitDebounceMs:k=3e4,wipRef:j=`refs/wip/main`,configHomedirOverride:F,enableTestRoutes:L=!1,shadowRepo:B,contentRoot:H,destroyTimeoutMs:q=1e4,localOpCliArgs:J,skipStateManifestCheck:Y=!1}=e,ee=getLogger(`server`);function te(){let e=readConfigSafely({absPath:resolveConfigPath(`project-local`,S),sideline:!1,warn:e=>ee.warn({message:e},`[config] could not read project-local config`)}),t=e.value.autoSync?.enabled;return t==null?(e.valid||ee.warn({},`[config] project-local autoSync.enabled unavailable (config invalid) — falling back to project config`),readConfigSafely({absPath:resolveConfigPath(`project`,S),sideline:!1,warn:e=>ee.warn({message:e},`[config] could not read project config`)}).value.autoSync?.enabled===!0):t===!0}initTelemetry();let ne=randomUUID(),ae=getLocalDir(S);if(acquireServerLock(ae,{port:e.port??0,worktreeRoot:S,kind:e.lockKind??`interactive`,capabilities:[`http`,`ws`]}),!Y)try{assertCompatibleStateManifest({lockDir:ae,shadowRepoDir:resolveShadowDir(S)})}catch(e){throw releaseServerLock(ae),e}let oe=createBasenameIndex(),se=(e,t)=>oe.resolveEmbed(e,t),ce=(e,S)=>{let w=oe.resolveEmbed(e,S);if(!w&&e.includes(`/`)&&(w=e.replace(/^\.?\//,``)),!w)return null;let E=resolve(t,w),D=resolve(t);if(E!==D&&!E.startsWith(`${D}/`))return null;try{let e=statSync(E);return e.isFile()?e.size:null}catch{return null}},ue,de,fe,me,ge,_e,ve,ye=null,Ce=null,we=null,Te=null,De=new Set,je=!1,Me,Pe,Ie,Re=new Promise((e,t)=>{Pe=e,Ie=t});function ze(e){ye?.signal(e)}let Be=2e3,Ve=null;function Ue(){Ve!==null&&clearTimeout(Ve),Ve=setTimeout(()=>{Ve=null,de.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist debounced cache:`,e)})},2e3)}let We=new RecentlyRemovedDocs(void 0,{onEviction:()=>incrementRecentlyRemovedDocsEviction(),onSizeChange:e=>setRecentlyRemovedDocsSize(e)}),Ge=(e,t)=>{isSystemDoc(e)||isConfigDoc(e)||We.setRenamed(e,t)},Ke=e=>{if(!(isSystemDoc(e)||isConfigDoc(e))){if(We.peek(e)?.kind===`renamed`){console.info(JSON.stringify({event:`recently-removed-docs-unpaired-delete-suppressed`,docName:e,source:`watcher-delete`}));return}We.setDeleted(e)}},Xe=e=>{isSystemDoc(e)||isConfigDoc(e)||We.delete(e)};try{ue=createContentFilter({projectDir:S,contentDir:t,onAfterRebuild:()=>{de.rebuildFromDisk(getActiveBranch()).catch(e=>{getLogger(`server-factory`).warn({err:e},`[content-filter] backlink-index rebuild failed after onAfterRebuild`)});try{fe.init()}catch(e){getLogger(`server-factory`).warn({err:e},`[content-filter] tag-index rebuild failed after onAfterRebuild`)}try{let{prunedFiles:e,prunedFolders:t}=reconcileFileIndexAfterFilterRebuild(Rt),S=e+t;S>0?getLogger(`server-factory`).info({pruned:S,prunedFiles:e,prunedFolders:t},`[content-filter] reconciled file indexes after onAfterRebuild`):getLogger(`server-factory`).debug({prunedFiles:e,prunedFolders:t},`[content-filter] file index reconcile completed after onAfterRebuild (no entries pruned; rescan may have added entries)`)}catch(e){getLogger(`server-factory`).warn({err:e},`[content-filter] file index reconcile failed after onAfterRebuild`)}}}),de=new BacklinkIndex({projectDir:S,contentDir:t,contentFilter:ue}),fe=new TagIndex({contentDir:t,contentFilter:ue});try{fe.init()}catch(e){console.warn(`[server-factory] tag-index init failed; continuing with empty index:`,e)}me={current:B},ge=createPersistenceExtension({contentDir:t,projectDir:S,gitEnabled:O,commitDebounceMs:k,wipRef:j,shadowRef:me,contentRoot:H,backlinkIndex:de,configHomedirOverride:F,getCurrentBranch:()=>zt?.getLastKnownBranch()??null,resolveEmbed:se,resolveSize:ce,getPrincipal:()=>Te,onAgentCommit:()=>ye?.signal(`session-activity`),onDiskFlush:(e,t)=>ye?.emitDiskAck(e,t),onConfigRejected:(e,t)=>ye?.emitConfigValidationRejected(e,t),mdManager:e.mdManager}),_e=new Hocuspocus({quiet:w,debounce:E,maxDebounce:D,extensions:[ge.extension]});let q=_e.shouldUnloadDocument.bind(_e);_e.shouldUnloadDocument=e=>{if(De.has(e)||je&&q(e))return!0;let t=e.name;return isSystemDoc(t)||isConfigDoc(t)||getReconciledBase(t)!==void 0||e.getXmlFragment(`default`).length!==0||e.getText(`source`).length!==0?!1:q(e)},Me=async e=>{De.add(e);try{await _e.unloadDocument(e)}finally{De.delete(e)}},ye=new CC1Broadcaster(_e),Ce=new AgentFocusBroadcaster(_e),we=new AgentPresenceBroadcaster(_e),ve=new AgentSessionManager(_e);let Y=createLiveDerivedIndexExtension({backlinkIndex:de,tagIndex:fe,signalChannel:ze});_e.configuration.extensions.push(Y),_e.configuration.extensions.push({__kind:`principal-auth`,async onAuthenticate(e){let t=e.token,S=parseHocuspocusAuthToken(t),w=S?.expectedServerInstanceId;if(typeof w==`string`&&w.length>0&&w!==ne)throw new HocuspocusAuthRejection(`server-instance-mismatch`,`server instance mismatch: client claimed ${w}, this server is ${ne}`);let E=S?.expectedBranch,D=getActiveBranch();if(typeof E==`string`&&E.length>0&&E!==D)throw new HocuspocusAuthRejection(`branch-mismatch`,`branch mismatch: client claimed ${E}, server is on ${D}`);if(!S)return;let O=e.context;typeof S.principalId==`string`&&(Te&&S.principalId===Te.id?O.principalId=Te.id:Te?console.warn(JSON.stringify({event:`principal-token-mismatch`,claimed:S.principalId,loaded:Te.id})):O.principalId=S.principalId),typeof S.tabSessionId==`string`&&(O.tabSessionId=S.tabSessionId),O.kind=`human`}}),_e.configuration.extensions.push({__kind:`config-doc-admission-guard`,async onAuthenticate(e){if(!isConfigDoc(e.documentName))return;let t=e.request,S=t.socket?.remoteAddress;if(S!==void 0&&!isLoopbackAddress(S))throw Error(`config-doc admission requires loopback peer (peer=${S}, doc=${e.documentName})`);let w=e.requestHeaders,E=(w&&typeof w.get==`function`?w.get(`host`):null)??t.headers?.host??void 0;if(!isAllowedWorkspaceHostHeader(E))throw Error(`config-doc admission requires loopback Host header (host=${E??`<absent>`}, doc=${e.documentName})`)}});let ee=resolve(t);function te(e){if(!isSafeDocName(e))return null;let t=resolve(ee,`${e}${getDocExtension(e)}`);return!t.startsWith(`${ee}/`)&&t!==ee?null:t}_e.configuration.extensions.push({__kind:`removal-redirect-guard`,async onAuthenticate(e){await runRemovalRedirectGuard(e.documentName,{recentlyRemovedDocs:We,resolveFilePath:te,fileExists:existsSync})}}),_e.configuration.extensions.push({__kind:`system-doc-broadcast-guard`,async beforeHandleMessage(e){if(e.documentName!==`__system__`)return;let t=new IncomingMessage(e.update);if(t.readVarString(),t.readVarUint()===MessageType.BroadcastStateless)throw Error(`inbound BroadcastStateless on ${SYSTEM_DOC_NAME} rejected — server-only channel`)}});let ae=createApiExtension({hocuspocus:_e,sessionManager:ve,contentDir:t,contentFilter:ue,serverInstanceId:ne,getFileIndex:()=>Rt?Rt.getFileIndex():new Map,getFolderIndex:()=>Rt?Rt.getFolderIndex():new Map,getAliasMap:()=>Rt?Rt.getAliasMap():new Map,rescanFiles:()=>Rt?.rescanFromDisk(),enableTestRoutes:L,shadowRef:me,flushGitCommit:()=>ge.flushPendingGitCommit(),flushContributors:()=>ge.flushContributors(),getCurrentBranch:()=>zt?.getLastKnownBranch()??null,getDiskAckSVs:()=>ye?.getLatestDiskAckSVsAsBase64()??{},contentRoot:H,backlinkIndex:de,tagIndex:fe,signalChannel:ze,agentFocusBroadcaster:Ce,agentPresenceBroadcaster:we,onAgentWrite:e.onAgentWrite,getSyncEngine:()=>Bt,localOpCliArgs:J,projectDir:S,resolveEmbed:se,getPrincipal:()=>Te,forceUnloadDocument:Me,ready:Re,recentlyRemovedDocs:We,serializeDoc:at});_e.configuration.extensions.push(ae),_e.configuration.extensions.push(createServerObserverExtension({mdManager,schema,shadowRef:me,contentRoot:H,getCurrentBranch:()=>zt?.getLastKnownBranch()??null,resolveEmbed:se,resolveSize:ce})),_e.configuration.extensions.push(createSyncHandshakeSpanExtension()),_e.configuration.extensions.push(createConflictLifecycleSeedExtension({getSyncEngine:()=>Bt,projectDir:S,contentDir:t}))}catch(e){throw releaseServerLock(ae),e}let $e=null,nt=new Map,rt=[];function it(e,t){let S=resolve(e,`rescue`),w=resolve(S,`${t}${getDocExtension(t)}`);return w.startsWith(`${S}/`)?w:null}function at(e){let t=_e.documents.get(e);if(!t)return null;let{frontmatter:S,body:w}=stripFrontmatter(t.getText(`source`).toString());return prependFrontmatter(S,w)}let st=(e,t)=>applyExternalChange(_e,e,t,se,ce);function vt(e){if(!isDocInConflict(e))return;let t=e.getMap(`lifecycle`);t.delete(`status`),t.delete(`reason`)}let Tt=e=>{if(!e)return;let t=`[[${e}]]`;for(let[S]of _e.documents){if(isSystemDoc(S)||isConfigDoc(S))continue;let w=_e.documents.get(S);if(!w)continue;let E=w.getText(`source`).toString();if(E.includes(t))try{w.transact(()=>{applyDiskContentToDoc(w,E,se,S)},FILE_WATCHER_ORIGIN)}catch(t){ee.error({err:t,docName:S,assetBasename:e},`[asset-event] failed to re-render ${S} for asset basename ${e}`)}}},Et=null,Dt=e=>{e&&(Et===null&&(Et=new Set,setImmediate(()=>{let e=Et;if(Et=null,e)try{for(let t of e)Tt(t)}catch(t){ee.error({err:t,basenames:[...e]},`[asset-event] dedup rerender pass crashed`)}})),Et.add(e))};function jt(e){switch(e.kind){case`rename`:return e.newDocName;case`asset-create`:case`asset-delete`:case`folder-create`:case`folder-delete`:return e.relativePath;case`create`:case`update`:case`delete`:case`conflict`:return e.docName;default:return assertNeverDiskEvent(e)}}async function Mt(e){try{switch(e.kind){case`create`:ee.info({docName:e.docName},`[reconcile] create: ${e.docName}`),de.updateDocumentFromMarkdown(e.docName,e.content),Ue(),fe.updateDocumentFromMarkdown(e.docName,e.content),ze(`files`),ze(`backlinks`),ze(`graph`),ze(`tags`),Xe(e.docName);break;case`update`:{let{docName:t,content:S}=e,w=_e.documents.get(t);if(!w){de.updateDocumentFromMarkdown(t,S),Ue(),fe.updateDocumentFromMarkdown(t,S),ze(`backlinks`),ze(`graph`),ze(`tags`);return}let E=getReconciledBase(t)??``,D=at(t)??E,O=reconcile({docName:t,base:E,ours:D,theirs:S}),k=contentHash(E).slice(0,6),j=contentHash(D).slice(0,6),F=contentHash(S).slice(0,6);switch(ee.info({docName:t,base:k,ours:j,theirs:F,result:O.kind},`[reconcile] ${t} base=${k} ours=${j} theirs=${F} result=${O.kind}`),O.kind){case`noop`:vt(w),de.updateDocumentFromMarkdown(t,S),Ue(),fe.updateDocumentFromMarkdown(t,S),ze(`backlinks`),ze(`graph`),ze(`tags`);break;case`clean`:try{st(t,O.newContent),setReconciledBase(t,O.newContent),incrementReconcile(),vt(w),de.updateDocumentFromMarkdown(t,S),Ue(),fe.updateDocumentFromMarkdown(t,S),ze(`backlinks`),ze(`graph`),ze(`tags`)}catch(e){ee.error({err:e,docName:t},`[reconcile] failed to apply clean content to Y.Doc for ${t}`),setReconciledBase(t,S),vt(w)}break;case`merged`:try{st(t,O.newContent),setReconciledBase(t,O.newContent),incrementReconcile(),vt(w),de.updateDocumentFromMarkdown(t,S),Ue(),fe.updateDocumentFromMarkdown(t,S),ze(`backlinks`),ze(`graph`),ze(`tags`)}catch(e){ee.error({err:e,docName:t},`[reconcile] failed to apply merged content to Y.Doc for ${t}`),setReconciledBase(t,S),vt(w)}break;case`conflicts`:try{st(t,O.newContent),setReconciledBase(t,O.newContent),incrementReconcile(),incrementConflict(),de.updateDocumentFromMarkdown(t,S),Ue(),fe.updateDocumentFromMarkdown(t,S),ze(`backlinks`),ze(`graph`),ze(`tags`)}catch(e){ee.error({err:e,docName:t},`[reconcile] failed to apply conflict content to Y.Doc for ${t}`),setReconciledBase(t,S)}{let e=w.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,`merged-with-markers`)}break;case`refused`:{incrementConflict();let e=w.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,O.reason);break}}break}case`delete`:{let{docName:t}=e,S=_e.documents.get(t);if(!S){de.deleteDocument(t),Ue(),fe.deleteDocument(t),ze(`files`),ze(`backlinks`),ze(`graph`),ze(`tags`),Ke(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));return}let w=getReconciledBase(t)??``,E=at(t)??``,D=E!==w;if(D&&me.current){let e=me.current,S=zt?.getLastKnownBranch()??`main`;queueMicrotask(()=>{saveInMemoryCheckpoint(e,H??``,{kind:`external-change-rescue`,docName:t,contents:E,label:`External change recovered @ ${new Date().toISOString()}`,branch:S,metadata:{incomingDiskSha:``}}).then(()=>{incrementRescueBuffer(),ee.info({docName:t},`[reconcile] rescue checkpoint saved (delete): ${t}`)}).catch(e=>{ee.error({docName:t,err:e},`[reconcile] rescue checkpoint write failed: ${t}`)})})}S.getMap(`lifecycle`).set(`status`,`deleted-upstream`),deleteReconciledBase(t),de.deleteDocument(t),Ue(),fe.deleteDocument(t),ee.info({docName:t,isDirty:D},`[reconcile] delete: ${t} (dirty=${D})`),_e.closeConnections(t),await Me(S),ze(`files`),ze(`backlinks`),ze(`graph`),ze(`tags`),Ke(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));break}case`rename`:{let{oldDocName:t,newDocName:S,content:w}=e,E=_e.documents.get(t);if(deleteReconciledBase(t),setReconciledBase(S,w),de.renameDocument(t,S,w),Ue(),fe.renameDocument(t,S,w),E){let e=E.getMap(`lifecycle`);e.set(`status`,`renamed`),e.set(`newPath`,S)}ee.info({oldDocName:t,newDocName:S},`[reconcile] rename: ${t} → ${S}`),ze(`files`),ze(`backlinks`),ze(`graph`),ze(`tags`),Ge(t,S),console.info(JSON.stringify({event:`recently-removed-docs-populate`,from:t,to:S,kind:`renamed`,source:`watcher-rename`}));break}case`conflict`:{let{docName:t}=e,S=_e.documents.get(t);if(!S)return;let w=at(t);w===null?ee.warn({docName:t},`[reconcile] case 'conflict': serializeDoc returned null for ${t}; reconciledBase snapshot skipped — post-resolution reconcile may degrade to 3-way merge`):setReconciledBase(t,w);let E=S.getMap(`lifecycle`);E.set(`status`,`conflict`),E.set(`reason`,`conflict-markers`),ee.info({docName:t},`[reconcile] conflict markers detected: ${t}`);break}case`asset-create`:oe.add(e.relativePath),ze(`files`),Dt(basename(e.relativePath));break;case`asset-delete`:oe.remove(e.relativePath),ze(`files`),Dt(basename(e.relativePath));break;case`folder-create`:case`folder-delete`:ze(`files`);break;default:assertNeverDiskEvent(e)}}catch(t){let S=jt(e);ee.error({err:t,kind:e.kind,label:S},`[reconcile] failed to handle ${e.kind} for ${S}`)}}let Ft=[];async function It(e){if(isBatchInProgress()){Ft.push(e);return}await Mt(e)}async function Lt(){let e=Ft.splice(0,Ft.length);for(let t of e)await Mt(t)}let Rt=null,zt=null,Bt=null,Vt=null;async function Ht(e){if(_e.documents.size===0)return;let t=!1,S=new Promise(e=>{_e.configuration.extensions.push({async afterUnloadDocument({instance:S}){!t&&S.getDocumentsCount()===0&&(t=!0,e())}})}),w=Array.from(_e.documents.keys());_e.closeConnections(),_e.flushPendingStores();for(let e of _e.documents.values())e.getConnectionsCount()===0&&_e.unloadDocument(e).catch(t=>{console.warn(JSON.stringify({event:`ok-shutdown-unload-document-failed`,docName:e.name,reason:t instanceof Error?t.message:String(t)}))});let E,D=new Promise((S,D)=>{E=setTimeout(()=>{t=!0;let S=Array.from(_e.documents.keys()),E=[],O=[];if(me.current){for(let e of S)if(!(isSystemDoc(e)||isConfigDoc(e)))try{let t=at(e);if(t===null){ee.warn({docName:e},`[rescue] skipping ${e} — document dropped from map mid-rescue`),O.push(e);continue}let S=it(me.current.gitDir,e);if(!S){ee.warn({docName:e,gitDir:me.current.gitDir},`[rescue] path-traversal guard rejected docName: ${e}`),O.push(e);continue}mkdirSync(dirname(S),{recursive:!0}),writeFileSync(S,t,`utf-8`),incrementRescueBuffer(),E.push(e),ee.info({docName:e},`[rescue] rescue buffer saved on flush timeout: ${e}`)}catch(t){O.push(e),ee.error({err:t,docName:e},`[rescue] failed to write rescue buffer for ${e}`)}}else ee.warn({stillLoadedCount:S.length},`[rescue] shadow repo unavailable at flush timeout — ${S.length} doc(s) will be lost: [${S.join(`, `)}]`),O.push(...S);let k=E.length>0||O.length>0?` — rescued [${E.join(`, `)}]${O.length>0?`, lost [${O.join(`, `)}]`:``}`:``;D(Error(`flushAllStoresAndWait timeout after ${e}ms — ${S.length}/${w.length} docs did not unload: [${S.join(`, `)}]${k}`))},e)});try{await Promise.race([S,D])}finally{E!==void 0&&clearTimeout(E)}}async function Ut(){return Vt||(Vt=(async()=>{let e=Date.now(),t=[];je=!0,Ve!==null&&(clearTimeout(Ve),Ve=null);let w,E=await Promise.race([Re.then(()=>`completed`,e=>(ee.debug({err:e},`[server] init incomplete during shutdown`),`failed`)),new Promise(e=>{w=setTimeout(()=>e(`timeout`),5e3)})]);w!==void 0&&clearTimeout(w),E===`timeout`&&ee.warn({},`[server] init did not complete within 5s during shutdown`);let D=_e.documents.size;try{try{try{zt&&=(await zt.unsubscribe(),null),Rt&&=(await Rt.unsubscribe(),null);for(let{docName:e,cleanup:t}of rt)try{await t()}catch(t){ee.warn({err:t,docName:e},`[server] failed to stop config-file-watcher for ${e}`)}rt.length=0}catch(e){t.push({phase:`watcher-unsubscribe`,error:e instanceof Error?e.message:String(e)}),ee.error({err:e},`[server] shutdown phase-1 watcher unsubscribe failed`)}try{ye?.destroy(),we?.destroy(),$e&&=(await $e.disconnect(),null);for(let[e,t]of nt)try{await t.disconnect()}catch(t){ee.warn({err:t,docName:e},`[server] failed to disconnect ${e} during shutdown`)}nt.clear()}catch(e){t.push({phase:`cc1-teardown`,error:e instanceof Error?e.message:String(e)}),ee.error({err:e},`[server] shutdown phase-1b CC1 teardown failed`)}try{await ve.closeAll()}catch(e){t.push({phase:`agent-session-drain`,error:e instanceof Error?e.message:String(e)}),ee.error({err:e},`[server] shutdown phase-2 agent session drain failed`)}try{await Ht(q)}catch(e){t.push({phase:`flush-all-stores`,error:e instanceof Error?e.message:String(e)}),ee.error({err:e},`[server] shutdown phase-3 flush failed`)}let e;try{await Promise.race([(async()=>{await ge.flushPendingGitCommit(),await ge.waitForPendingCommits()})(),new Promise((t,S)=>{e=setTimeout(()=>S(Error(`L2 git flush timeout`)),q)})])}catch(e){t.push({phase:`git-commit-flush`,error:e instanceof Error?e.message:String(e)}),ee.error({err:e},`[server] shutdown phase-4 git commit flush failed`)}finally{e!==void 0&&clearTimeout(e)}try{Bt&&=(await Bt.destroy(),null)}catch(e){t.push({phase:`sync-engine-stop`,error:e instanceof Error?e.message:String(e)}),ee.error({err:e},`[server] shutdown sync-engine-stop failed`)}}finally{if(me.current){try{let e=(await esm_default({baseDir:S,timeout:{block:5e3}}).revparse(`HEAD`)).trim();e&&writeFileSync(resolve(me.current.gitDir,`last-known-head`),e,`utf-8`)}catch{}try{destroyShadowRepo(me.current)}catch(e){t.push({phase:`shadow-repo-release`,error:e instanceof Error?e.message:String(e)}),ee.error({err:e},`[server] shutdown phase-5 destroyShadowRepo failed`)}}let w=Date.now()-e;t.length===0?ee.info({documentCount:D,durationMs:w},`[server] shutdown flushed ${D} documents in ${w}ms`):ee.warn({documentCount:D,durationMs:w,phaseErrors:t},`[server] shutdown flushed ${D} documents in ${w}ms with ${t.length} phase error(s)`)}}finally{try{releaseServerLock(ae)}catch(e){t.push({phase:`server-lock-release`,error:e instanceof Error?e.message:String(e)}),ee.error({err:e},`[server] shutdown phase-6 releaseServerLock failed`)}try{await shutdownTelemetry()}catch(e){t.push({phase:`telemetry-shutdown`,error:e instanceof Error?e.message:String(e)})}}})(),Vt)}let Wt=[];async function Kt(){try{Te=await loadPrincipal(S),ee.info({principalId:Te.id},`[server] principal loaded`)}catch(e){ee.warn({err:e},`[server] principal load failed — browser writes will use SERVICE_WRITER`)}if(!me.current)try{me.current=await initShadowRepo(S),ee.info({gitDir:me.current.gitDir},`[server] history repo initialized at ${me.current.gitDir}`)}catch(e){ee.error({err:e},`[server] history repo init failed`),Wt.push(`shadow-repo`)}if(me.current){let e=null;try{e=loadRenameLogIndex(me.current.gitDir),sweepLazyPopOrphans(me.current.gitDir,e),setRenameLogIndex(me.current.gitDir,e),ee.info({entries:e.byTo.size},`[server] rename log loaded (${e.byTo.size} entries)`)}catch(e){ee.warn({err:e},`[rename-log] boot-time load/sweep failed; rename history unavailable`)}if(e){let t=1e4;try{await Promise.race([gcRenameLog(me.current,e,{rebuild:!0}),new Promise((e,S)=>setTimeout(()=>S(Error(`boot-time GC exceeded ${t}ms`)),t))])}catch(e){ee.warn({err:e},`[rename-log] boot-time GC/rebuild failed; index loaded without GC`)}}}if(me.current)try{await shadowGit(me.current).raw(`rev-parse`,`--git-dir`)}catch(e){let t=e instanceof Error?e.message:String(e);if(t.includes(`not a git repository`)||t.includes(`invalid object`)){ee.warn({},`[server] history repo appears corrupted — reinitializing`);try{me.current=await initShadowRepo(S)}catch(e){ee.error({err:e},`[server] history repo reinit failed`),me.current=void 0,Wt.includes(`shadow-repo`)||Wt.push(`shadow-repo`)}}else ee.error({err:e},`[server] history repo check failed (transient?)`)}if(me.current)try{let e=resolve(me.current.gitDir,`last-known-head`),t=null;try{t=readFileSync(e,`utf-8`).trim()||null}catch{}let w=null;try{w=(await esm_default({baseDir:S,timeout:{block:1e4}}).revparse(`HEAD`)).trim()||null}catch{}if(w!==null){if(w!==t){let e=`main`;try{let t=(await esm_default({baseDir:S,timeout:{block:1e4}}).raw(`rev-parse`,`--abbrev-ref`,`HEAD`)).trim();t&&t!==`HEAD`&&(e=t)}catch{}ee.info({lastKnownHead:t,currentHead:w,branch:e},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${w}, action=import`);try{await commitUpstreamImport(me.current,H??``,t,w,e),incrementUpstreamImport()}catch(e){ee.warn({err:e},`[head-drift] commitUpstreamImport failed — continuing`)}}else ee.info({currentHead:w},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${w}, action=noop`);try{writeFileSync(e,w,`utf-8`)}catch(e){ee.warn({err:e},`[head-drift] failed to write last-known-head`)}}}catch(e){ee.warn({err:e},`[head-drift] check failed — continuing`)}try{let e=recoverPendingManagedRename(t,S);if(e.recovered&&e.journal){let t=e.journal.version===2?e.journal.fromPath:e.journal.sourceDocName,S=e.journal.version===2?e.journal.toPath:e.journal.destinationDocName;ee.warn({journalVersion:e.journal.version,fromPath:t,toPath:S,restoredDocNames:e.restoredDocNames},`[managed-rename] recovered pending rename ${t} -> ${S}`)}}catch(e){ee.error({err:e},`[server] managed rename recovery failed`),Wt.push(`managed-rename-recovery`)}try{let e=cleanupOrphanUploadTempfiles(S);(e.deleted>0||e.errors>0)&&ee.info({scanned:e.scanned,deleted:e.deleted,errors:e.errors},`[upload-tempfile-sweep] swept ${e.deleted} orphan tempfile(s)`)}catch(e){ee.error({err:e},`[server] upload-tempfile sweep failed`),Wt.push(`upload-tempfile-sweep`)}try{$e=await _e.openDirectConnection(SYSTEM_DOC_NAME),ye?.emitServerInfo(ne,getActiveBranch())}catch(e){ee.error({err:e},`[server] failed to open __system__ direct connection — CC1 push disabled`),Wt.push(`cc1-push`)}for(let e of CONFIG_DOC_NAMES)try{let t=await _e.openDirectConnection(e);nt.set(e,t)}catch(t){ee.error({err:t,docName:e},`[server] failed to open ${e} direct connection — config bind degraded`),Wt.push(`config-doc:${e}`)}let w=new Map([[CONFIG_DOC_NAME_PROJECT,resolveConfigPath(`project`,S)],[CONFIG_DOC_NAME_PROJECT_LOCAL,resolveConfigPath(`project-local`,S)],[CONFIG_DOC_NAME_USER,resolveConfigPath(`user`,S,F)]]);for(let e of CONFIG_DOC_NAMES){let t=w.get(e);if(t)try{ee.info({docName:e,path:t},`[config-file-watcher] starting`);let S=await startConfigFileWatcher(t,t=>{let S=_e.documents.get(e);ee.info({docName:e,hasDocument:S!==void 0,contentLength:t.length},`[config-file-watcher] file changed`);let w=applyExternalConfigChange(S??null,e,t,ge.configPersistenceCtx);if(ee.info({docName:e,outcome:w},`[config-file-watcher] applyExternalConfigChange outcome`),e===`__config__/project`||e===`__local__/project`){let e=te();Bt?.setEnabled(e).catch(t=>{ee.warn({err:t,enabled:e},`[sync] failed to apply autoSync.enabled from config`)})}});rt.push({docName:e,cleanup:S}),ee.info({docName:e,path:t},`[config-file-watcher] started`)}catch(S){ee.warn({err:S,docName:e,path:t},`[config-file-watcher] failed to start for ${e}`),Wt.push(`config-file-watcher:${e}`)}}try{let e=resolve(t,`.okignore`),w=resolve(S,`.gitignore`),E=null;try{let e=spawnSync(`git`,[`rev-parse`,`--git-common-dir`],{cwd:S,encoding:`utf-8`,timeout:5e3});if(e.status===0&&e.stdout){let t=join(resolve(S,e.stdout.trim()),`info`,`exclude`);existsSync(dirname(t))&&(E=t)}}catch{}let D=E?[e,w,E]:[e,w],O=ee;O.info({okignorePath:e,gitignorePath:w,gitInfoExcludePath:E},`[ignore-watcher] starting multi-path watcher for .okignore + .gitignore (+ .git/info/exclude when present)`);let k=await startMultiPathConfigFileWatcher(D,(t,w)=>{(async()=>{if(t===e)try{let e=applyExternalConfigChange(_e.documents.get(`__config__/okignore`)??null,CONFIG_DOC_NAME_OKIGNORE,w,ge.configPersistenceCtx);O.info({docName:CONFIG_DOC_NAME_OKIGNORE,outcome:e},`[ignore-watcher] applyExternalConfigChange outcome`)}catch(e){O.error({err:e,changedPath:relative(S,t)},`[ignore-watcher] applyExternalConfigChange failed; rebuild proceeds independently`)}let E=await ue.rebuildIgnorePatterns();if(E.ok)O.info({changedPath:relative(S,t),patternCount:E.patternCount,nestedFileCount:E.nestedFileCount,durationMs:E.durationMs},`[ignore-watcher] rebuild succeeded — broadcasting files channel`),ye?.signal(`files`);else{let e=relative(S,t)||`.`;O.warn({changedPath:e,error:E.error.message},`[ignore-watcher] rebuild failed — emitting config-ignore-nested-error`),ye?.emitConfigIgnoreNestedError(e,E.error.message)}})().catch(e=>{O.error({err:e,changedPath:relative(S,t)||`.`},`[ignore-watcher] handler threw`)})});rt.push({docName:`__ignore-files__`,cleanup:k}),O.info({okignorePath:e,gitignorePath:w},`[ignore-watcher] multi-path watcher started`)}catch(e){ee.warn({err:e,projectDir:S,contentDir:t},`[ignore-watcher] failed to start multi-path watcher`),Wt.push(`ignore-files-watcher`)}let E=resolveGitDir(S),D=E?readBranchFromHead(E)??`main`:`main`;switchReconciledBaseScope(D),de.switchBranch(D);try{{let e=getActiveBranch();try{if(await de.loadFromDisk(e)){let t=await de.reconcileWithDisk(e);(t.added>0||t.updated>0||t.deleted>0)&&ee.info(t,`[backlinks] startup reconcile: offline changes applied`)}else await de.rebuildFromDisk(e);de.saveToDisk().catch(t=>{console.warn(`[backlinks] Failed to persist startup cache for ${e}:`,t)})}catch(t){ee.error({err:t,branch:e},`[backlinks] startup init failed; index will populate incrementally via watcher`)}}Rt=await startWatcher(t,It,ue),fe.init();let e=0;try{seedBasenameIndex({contentDir:t,contentFilter:ue,basenameIndex:oe,onSkip:(t,S,w)=>{e++,ee.warn({reason:t,code:S,path:w},`[basename-index] skipped entry during seed (${t}${S?` ${S}`:``})`)}}),e>0&&(ee.warn({count:e},`[basename-index] startup seed completed with ${e} skipped entries — embeds under inaccessible subtrees will not resolve`),Wt.push(`basename-index-partial`))}catch(e){ee.error({err:e},`[basename-index] startup seed failed`),Wt.push(`basename-index`)}}catch(e){ee.error({err:e},`[server] disk bridge watcher failed to start`),Wt.push(`file-watcher`)}try{zt=await startHeadWatcher(S,async({trigger:e})=>{if(ee.info({trigger:e},`[batch] begin trigger=${e}`),incrementBatch(),_e.flushPendingStores(),await ge.flushPendingGitCommit(),setBatchInProgress(!0),me.current){let e=getActiveBranch(),t=resolveGitDir(S),w=t?readBranchFromHead(t)??e:e,E=[];for(let[e,t]of _e.documents){if(isSystemDoc(e)||isConfigDoc(e))continue;let S=null;if(t.transact(()=>{S=at(e)},PARK_SNAPSHOT_ORIGIN),S===null)continue;let w=getReconciledBase(e)??S;E.push({docName:e,markdown:S,diskSnapshot:w})}if(E.length>0)try{let t=await parkBranch(me.current,e,SERVICE_WRITER.id,E,w);t&&(incrementPark(),ee.info({count:E.length,branch:e,sha:t.slice(0,8)},`[history] parked ${E.length} docs on ${e} → ${t.slice(0,8)}`))}catch(e){ee.error({err:e},`[shadow] park failed`)}}},async e=>{let S=Ft.length,w=e.newBranch??`main`;if(ee.info({kind:e.batchKind,headMoved:e.headMoved,docs:S,timeout:!!e.timeout},`[batch] end kind=${e.batchKind} headMoved=${e.headMoved} docs=${S}${e.timeout?` timeout`:``}`),e.batchKind===`within-branch`){if(setBatchInProgress(!1),await Lt(),await ge.flushDeferredStores(`within-branch`),Bt!==null)try{await Bt.reconcileConflictsFromGit()}catch(e){ee.warn({err:e},`[head-watcher] sync engine conflict reconcile failed`)}}else{incrementBranchSwitch(),Ft.splice(0,Ft.length),switchReconciledBaseScope(w),Ve!==null&&(clearTimeout(Ve),Ve=null),de.switchBranch(w),ue.rebuildDirCount();try{let e=0;oe.clear(),seedBasenameIndex({contentDir:t,contentFilter:ue,basenameIndex:oe,onSkip:(t,S,E)=>{e++,ee.warn({reason:t,code:S,path:E,branch:w},`[basename-index] skipped entry during branch-switch reseed (${t}${S?` ${S}`:``})`)}}),e>0&&(ee.warn({count:e,branch:w},`[basename-index] branch-switch reseed completed with ${e} skipped entries — embeds under inaccessible subtrees will not resolve on this branch`),Wt.includes(`basename-index-partial`)||Wt.push(`basename-index-partial`))}catch(e){ee.error({err:e,branch:w},`[basename-index] branch-switch reseed failed`)}for(let[e,S]of _e.documents)if(!(isSystemDoc(e)||isConfigDoc(e)))try{let E=safeContentPath(e,t);if(!existsSync(E)){let t=getReconciledBase(e)??``,E=at(e)??``;if(E!==t&&me.current){let t=me.current;queueMicrotask(()=>{saveInMemoryCheckpoint(t,H??``,{kind:`external-change-rescue`,docName:e,contents:E,label:`External change recovered @ ${new Date().toISOString()}`,branch:w,metadata:{incomingDiskSha:``}}).then(()=>{incrementRescueBuffer(),ee.info({docName:e},`[reconcile] rescue checkpoint saved on branch switch: ${e}`)}).catch(t=>{ee.error({docName:e,err:t},`[reconcile] rescue checkpoint write failed: ${e}`)})})}S.getMap(`lifecycle`).set(`status`,`deleted-upstream`),ee.info({docName:e,branch:w},`[branch-switch] tombstone: ${e} (not on ${w})`);continue}let D=readFileSync(E,`utf-8`);st(e,D),setReconciledBase(e,D),ee.info({docName:e},`[branch-switch] reset: ${e}`)}catch(t){ee.error({err:t,docName:e},`[branch-switch] failed to reset ${e}`)}ee.info({branch:w,docCount:_e.documents.size},`[branch-switch] loaded branch ${w} (${_e.documents.size} docs)`);try{if(await de.loadFromDisk(w)){let e=await de.reconcileWithDisk(w);(e.added>0||e.updated>0||e.deleted>0)&&ee.info(e,`[backlinks] branch-switch reconcile for ${w}`)}else await de.rebuildFromDisk(w);de.saveToDisk(w).catch(e=>{console.warn(`[backlinks] Failed to persist branch cache for ${w}:`,e)})}catch(e){ee.error({err:e,branch:w},`[backlinks] branch-switch rebuild failed; backlinks may be stale`)}if(fe.init(),me.current&&e.batchKind===`cross-branch`){let e=0;for(let[t]of _e.documents)if(!(isSystemDoc(t)||isConfigDoc(t)))try{let S=await readParkedState(me.current,w,SERVICE_WRITER.id,t);if(!S||S.markdown===S.diskSnapshot)continue;let E=getReconciledBase(t);if(!E)continue;let D=reconcile({docName:t,base:S.diskSnapshot,ours:S.markdown,theirs:E});switch(D.kind){case`merged`:case`clean`:st(t,D.newContent),setReconciledBase(t,D.newContent),e++;break;case`conflicts`:st(t,D.newContent),setReconciledBase(t,D.newContent),incrementConflict(),e++;{let e=_e.documents.get(t);if(e){let t=e.getMap(`lifecycle`);t.set(`status`,`conflict`),t.set(`reason`,`merged-with-markers`)}}break;case`noop`:case`refused`:break}}catch(e){ee.error({err:e,docName:t},`[branch-switch] restore WIP failed for ${t}`)}e>0&&ee.info({count:e,branch:w},`[branch-switch] restored ${e} parked docs on ${w}`)}if(e.oldBranch?.startsWith(`detached-`)&&me.current)try{let t=shadowGit(me.current),S=(await t.raw(`for-each-ref`,`refs/wip/${e.oldBranch}/`,`--format=%(refname)`)).trim();if(S){for(let e of S.split(`
3505
- `))e&&await t.raw(`update-ref`,`-d`,e);ee.info({context:e.oldBranch},`[branch-switch] cleaned up detached context ${e.oldBranch}`)}}catch(e){ee.error({err:e},`[branch-switch] detached cleanup failed`)}setBatchInProgress(!1),await ge.flushDeferredStores(`discard-stale`),ye?.emitBranchSwitched(w)}if(e.headMoved&&e.newHead&&me.current&&S>0){let t=H??`.`;try{let S=await commitUpstreamImport(me.current,t,e.oldHead,e.newHead,w);incrementUpstreamImport(),ee.info({oldHead:e.oldHead?.slice(0,8)??`null`,newHead:e.newHead.slice(0,8),sha:S.slice(0,8)},`[history] upstream-import from ${e.oldHead?.slice(0,8)??`null`}..${e.newHead.slice(0,8)} → ${S.slice(0,8)}`)}catch(e){ee.error({err:e},`[shadow] upstream-import failed`)}}})}catch(e){ee.error({err:e},`[server] HEAD watcher failed to start`),Wt.push(`head-watcher`)}function O(e){for(let w of e)try{let e=relative(t,join(S,w));if(e.startsWith(`..`))continue;let E=stripDocExtension(e),D=_e.documents.get(E);if(!D)continue;let O=at(E);O===null?ee.warn({docName:E,file:w},`[sync] content conflict: serializeDoc returned null; reconciledBase snapshot skipped`):setReconciledBase(E,O);let k=D.getMap(`lifecycle`);k.set(`status`,`conflict`),k.set(`reason`,`sync-merge-conflict`),ee.info({docName:E,file:w},`[sync] marked loaded content conflict`)}catch(e){ee.warn({err:e,file:w},`[sync] failed to mark loaded content conflict`)}}let k=J?.[0]??`open-knowledge`,j=[`-c`,`credential.helper=!${J&&J.length>1?J.join(` `):k} auth git-credential`];try{Bt=new SyncEngine({projectDir:S,contentDir:t,contentFilter:ue,contentRoot:H,syncEnabled:te(),credentialArgs:j,cc1Broadcaster:ye,detectGh:e.detectGh,tokenStore:e.tokenStore,checkPushPermissionFn:e.checkPushPermissionFn,setBatchInProgress:e=>{setBatchInProgress(e),e||ge.flushDeferredStores(`within-branch`).catch(e=>{ee.error({err:e},`[persistence] deferred store drain failed after sync batch`)})},onStateChange:e=>{ee.info({state:e},`[sync] state → ${e}`)},onContentConflictsDetected:O,onAutoDisable:async e=>{ee.warn({reason:e},`[sync] auto-disabled — persisting to project-local config`);let t=await writeConfigPatch({cwd:S,scope:`project-local`,patch:{autoSync:{enabled:!1}}});t.ok||ee.error({result:t,reason:e,humanError:humanFormat(t.error),configPath:resolveConfigPath(`project-local`,S)},`[sync] failed to persist auto-disable — next restart WILL re-enable sync and re-trigger the same failure. Check permissions on the config path.`)}}),await Bt.start()}catch(e){ee.warn({err:e},`[server] SyncEngine failed to start — sync disabled`),Bt=null}ze(`files`),ze(`backlinks`),ze(`graph`),ze(`tags`)}return Kt().then(Pe,Ie),{hocuspocus:_e,sessionManager:ve,cc1Broadcaster:ye,agentFocusBroadcaster:Ce,agentPresenceBroadcaster:we,contentFilter:ue,basenameIndex:oe,serverInstanceId:ne,destroy:Ut,ready:Re,degraded:Wt,lockDir:ae,get syncEngine(){return Bt}}}const LEGACY_RUNTIME_FILENAMES=[`server.lock`,`ui.lock`,`state.json`,`principal.json`,`sync-state.json`,`conflicts.json`,`last-spawn-error.log`],LEGACY_RUNTIME_DIRNAMES=[`cache`,`tmp`];function findLegacyRuntimeFiles(e){let t=resolve(e,LOCAL_DIR);if(!(()=>{if(!existsSync(t))return!0;try{return readdirSync(t).length===0}catch{return!0}})())return[];let S=[];for(let t of LEGACY_RUNTIME_FILENAMES)existsSync(resolve(e,t))&&S.push(t);for(let t of LEGACY_RUNTIME_DIRNAMES){let w=resolve(e,t);try{existsSync(w)&&statSync(w).isDirectory()&&S.push(`${t}/`)}catch{}}return S}function computeWorktreeAttributes(e){let t=resolveGitDirDetailed(e);switch(t.kind){case`directory`:return{kind:`main`,gitdir:t.path};case`linked`:return{kind:`linked`,gitdir:t.path};case`malformed-pointer`:return{kind:`linked`,gitdir:null};case`inaccessible`:case`absent`:return{kind:`main`,gitdir:null}}}const DEFAULT_IDLE_THRESHOLD_MS=1800*1e3,DESTROY_STEP_TIMEOUT_MS=5e3;async function bootServer(e){initTelemetry();let{kind:t,gitdir:S}=computeWorktreeAttributes(e.projectDir??e.contentDir),w={"ok.worktree.kind":t};return S!==null&&(w[`ok.worktree.gitdir`]=normalizeFsPath(S)),withSpan(`ok.boot`,{attributes:w},async()=>bootServerInner(e))}async function bootServerInner(e){let t=e.skipAutoInit??!1,S=e.attachUiSibling??!0,w=e.idleShutdownMs,E=e.log??getLogger(`boot`),D=process.env.OK_LOCK_KIND===`mcp-spawned`||process.env.OK_LOCK_KIND===`interactive`?process.env.OK_LOCK_KIND:void 0,O=e.lockKind??D??`interactive`,{createServer:k}=await import(`node:http`),{updateServerLockPort:j}=await import(`./server-lock-v2ktHD7l-C-3wEnoU.mjs`),F=!1;if(!t&&e.autoInitFn)try{F=!!await e.autoInitFn()}catch(e){E.warn({err:e},`autoInitFn failed`)}let L=e.projectDir??e.contentDir,B=resolve(L,`.ok`);if(!existsSync(resolve(B,`config.yml`)))throw new MissingOkConfigError(existsSync(B)?`config`:`okdir`,L);existsSync(resolve(B,`.gitignore`))||console.warn("[boot] Note: .ok/.gitignore is missing — per-machine state files in .ok/ may show up as untracked changes. Run `ok init` to add the recommended ignore entries.");let H=findLegacyRuntimeFiles(B);H.length>0&&console.warn(`[boot] Found legacy runtime files at .ok/${H.join(`, `)}. Delete .ok/ and re-init — these files moved to .ok/${LOCAL_DIR}/.`);let q=createServer$1({contentDir:e.contentDir,projectDir:e.projectDir,contentRoot:e.contentRoot,port:e.port,host:e.host,quiet:e.quiet??!1,debounce:e.debounce,maxDebounce:e.maxDebounce,gitEnabled:e.gitEnabled,commitDebounceMs:e.commitDebounceMs,wipRef:e.wipRef,enableTestRoutes:e.enableTestRoutes,shadowRepo:e.shadowRepo,destroyTimeoutMs:e.destroyTimeoutMs,localOpCliArgs:e.localOpCliArgs,onAgentWrite:e.onAgentWrite,lockKind:O,skipStateManifestCheck:e.skipStateManifestCheck,detectGh:e.detectGh,tokenStore:e.tokenStore}),{hocuspocus:J,destroy:Y,ready:ee,degraded:te,lockDir:ne,sessionManager:ae,agentFocusBroadcaster:oe,agentPresenceBroadcaster:se}=q,ce=(()=>{let t=e.host??`localhost`;return t===`0.0.0.0`||t===`::`?`localhost`:t.includes(`:`)&&!t.startsWith(`[`)?`[${t}]`:t})(),ue=e.port??0,de=createMcpHttpHandler({contentDir:e.contentDir,projectDir:e.projectDir??e.contentDir,config:e.config,getServerUrl:()=>`http://${ce}:${ue}`,log:E}),fe=k();fe.headersTimeout=3e4,fe.requestTimeout=6e4;let me=e.serveContentAssets?createAssetServeMiddleware({contentFilter:q.contentFilter,contentSirv:build_default(e.contentDir,{dev:!0,dotfiles:!1}),inlineExtensions:INLINE_RENDERABLE_EXTENSIONS,assetExtensions:ASSET_EXTENSIONS,blocklistExtensions:EXECUTABLE_BLOCKLIST_EXTENSIONS}):void 0,ge=!1;if(e.reactShellDistDir)try{acquireUiLock(ne,{port:0,worktreeRoot:e.projectDir??e.contentDir}),ge=!0}catch(e){if(e instanceof UiLockCollisionError)E.info({event:`ui-lock-yielded-to-live-holder`,pid:process.pid,existingPid:e.existing.pid,existingPort:e.existing.port,lockDir:ne},`ui.lock already held by a live process — yielding (advertisement is fulfilled)`);else throw await Y().catch(()=>{}),e}let _e=e.reactShellDistDir?build_default(e.reactShellDistDir,{single:!0,gzip:!0,immutable:!0}):void 0,ve=mountMcpAndApi({httpServer:fe,hocuspocus:J,mcpHttpHandler:de,log:E,sessionManager:ae,agentFocusBroadcaster:oe,agentPresenceBroadcaster:se,keepaliveGraceMs:e.keepaliveGraceMs,contentAssetMiddleware:me,reactShellMiddleware:_e}),ye=async()=>{throw Error(`bootServer: destroy() invoked before initialization — boot did not complete`)},Ce=null;w!==null&&(Ce=attachIdleShutdown({httpServer:fe,thresholdMs:w??DEFAULT_IDLE_THRESHOLD_MS,log:E,onShutdown:(e.idleShutdownHandler??(e=>async()=>{await e()}))(async()=>{await ye()})})),await restoreLifecycleFromConflictsJson({hocuspocus:J,projectDir:e.projectDir??e.contentDir,log:E});try{await new Promise((t,S)=>{let w=e=>S(e);fe.once(`error`,w),fe.listen(e.port,e.host,()=>{fe.removeListener(`error`,w),t()})})}catch(e){if(ge)try{releaseUiLock(ne)}catch(e){E.warn({err:e},`releaseUiLock failed during listen-error cleanup`)}throw await Y().catch(()=>{}),e}let we=fe.address(),Te=typeof we==`object`&&we?we.port:e.port??0;if(ue=Te,j(ne,Te),ge&&updateUiLockPort(ne,Te),S&&e.spawnUiSiblingFn)try{await e.spawnUiSiblingFn({lockDir:ne,log:E})}catch(e){E.warn({err:e},`spawnUiSiblingFn failed`)}let De=!1,je=async(e,t)=>{let S;try{await Promise.race([t(),new Promise((t,w)=>{S=setTimeout(()=>{w(Error(`${e} timed out after ${DESTROY_STEP_TIMEOUT_MS}ms`))},DESTROY_STEP_TIMEOUT_MS),S.unref?.()})])}finally{S!==void 0&&clearTimeout(S)}};return ye=async()=>{if(De)return;De=!0;let e=[],t=async(t,S)=>{try{await je(t,S)}catch(S){e.push(S),E.warn({err:S,step:t},`bootServer destroy step failed`)}};try{Ce?.detach()}catch(t){e.push(t),E.warn({err:t,step:`idleHandle.detach`},`bootServer destroy step failed`)}if(await t(`mount.shutdown`,()=>ve.shutdown()),await t(`mcpHttpHandler.close`,()=>de.close()),await t(`mount.wss.close`,()=>new Promise((e,t)=>{ve.wss.close(S=>S?t(S):e())})),await t(`httpServer.closeAllConnections`,async()=>{fe.closeAllConnections?.()}),await t(`httpServer.close`,()=>new Promise((e,t)=>{fe.close(S=>S&&S.code!==`ERR_SERVER_NOT_RUNNING`?t(S):e())})),await t(`destroyHocuspocus`,()=>Y()),ge&&await t(`releaseUiLock`,async()=>releaseUiLock(ne)),await t(`shutdownTelemetry`,()=>shutdownTelemetry()),e.length>0)throw AggregateError(e,`bootServer destroy completed with errors`)},{httpServer:fe,destroy:ye,lockDir:ne,contentDir:e.contentDir,port:Te,ready:ee,degraded:te,didAutoInit:F,serverInstance:q}}async function restoreLifecycleFromConflictsJson(e){let{hocuspocus:t,projectDir:S,log:w}=e,E,D;try{E=new ConflictStore(S),D=E.list()}catch(e){w.warn({err:e,projectDir:S},`[boot] lifecycle restore: failed to read conflicts.json — skipping`);return}if(D.length===0)return;let O=null;try{let e=resolveGitDir(S),t=e?join(e,`MERGE_HEAD`):null;if(!t||!existsSync(t)){E.clear(),console.warn(JSON.stringify({event:`lifecycle-restore-cleared-stale-conflicts`,reason:`no-merge-head`,count:D.length}));return}let w=(await simpleGit({baseDir:S,timeout:{block:5e3}}).raw([`diff`,`--name-only`,`--diff-filter=U`])).trim();O=new Set(w?w.split(`
3506
- `).map(e=>e.trim()).filter(Boolean):[])}catch(e){w.warn({err:e,projectDir:S},`[boot] lifecycle restore: git unmerged probe failed — restoring all entries`)}if(O!==null){let e=0;for(let t of D)O.has(t.file)||(E.removeConflict(t.file),e++);if(e>0&&console.warn(JSON.stringify({event:`lifecycle-restore-pruned-resolved-entries`,pruned:e,remaining:D.length-e})),D=D.filter(e=>O?.has(e.file)),D.length===0)return}for(let e of D){let S=stripDocExtension(e.file),E=null,D=!1;try{E=await t.openDirectConnection(S);let e=E.document;if(!e)continue;let w=e.getMap(`lifecycle`);w.set(`status`,`conflict`),w.set(`reason`,`conflict-markers`),D=!0,console.warn(JSON.stringify({event:`lifecycle-restored-from-conflicts-json`,"doc.name":S}))}catch(e){w.warn({err:e,docName:S},`[boot] lifecycle restore: failed to set lifecycle for doc — skipping`)}finally{if(E)try{await E.disconnect()}catch(e){w.warn({err:e,docName:S,restored:D},`[boot] lifecycle restore: disconnect failed after lifecycle write`)}}}}const ConfigSchema=ConfigSchema$1;function detectClaudeDesktopPresence(e={}){let t=e.home??homedir(),S=e.platformName??process.platform,w=e.env??process.env;return S===`darwin`?existsSync(join(t,`Library`,`Application Support`,`Claude`)):S===`win32`?existsSync(join(w.APPDATA??join(t,`AppData`,`Roaming`),`Claude`)):!1}const OK_LOGS_DIR=join(homedir(),`.ok`,`logs`),MAX_ROTATED_FILES=2,MAX_AGE_DAYS=7,MAX_DIR_SIZE_BYTES=45*1024*1024,REDACT_PATHS=[`authorization`,`password`,`token`,`apiKey`,`secret`,`*.authorization`,`*.password`,`*.token`,`*.apiKey`,`*.secret`];function resolveLogLevel(){let e=process.env.OK_LOG_LEVEL??process.env.LOG_LEVEL;if(e){let t=[`fatal`,`error`,`warn`,`info`,`debug`],S=e.toLowerCase();if(t.includes(S))return S}return process.env.NODE_ENV===`test`?`silent`:`info`}function ensureDir(e){mkdirSync(e,{recursive:!0})}function todayDateString(){return new Date().toISOString().slice(0,10)}function rotateIfNeeded(e){try{if(statSync(e).size<5242880)return}catch{return}for(let t=MAX_ROTATED_FILES;t>=1;t--){let S=t===1?e:`${e}.${t-1}`,w=`${e}.${t}`;try{renameSync(S,w)}catch{}}try{unlinkSync(`${e}.${MAX_ROTATED_FILES+1}`)}catch{}}function pruneLogsDir(e){try{let t=Date.now(),S=MAX_AGE_DAYS*24*60*60*1e3,w=readdirSync(e).filter(e=>e.endsWith(`.log`)||/\.log\.\d+$/.test(e)).map(t=>{try{let S=statSync(join(e,t));return{name:t,mtime:S.mtimeMs,size:S.size}}catch{return null}}).filter(Boolean);for(let E of w)if(t-E.mtime>S)try{unlinkSync(join(e,E.name))}catch{}let E=w.filter(e=>t-e.mtime<=S).sort((e,t)=>e.mtime-t.mtime),D=E.reduce((e,t)=>e+t.size,0);for(let t of E){if(D<=MAX_DIR_SIZE_BYTES)break;try{unlinkSync(join(e,t.name)),D-=t.size}catch{}}}catch{}}function createFileLogger(e){ensureDir(OK_LOGS_DIR);let t=todayDateString(),S=e.filePath??join(OK_LOGS_DIR,`${e.name}.${t}.log`);rotateIfNeeded(S),setTimeout(()=>pruneLogsDir(OK_LOGS_DIR),5e3);let w=import_pino.default.destination({dest:S,append:!0,sync:!1});return(0,import_pino.default)({level:resolveLogLevel(),name:e.name,redact:{paths:REDACT_PATHS,censor:`[REDACTED]`},base:{pid:process.pid,hostname:void 0,runtime:`cli`,project:e.project??`<no-project>`},timestamp:import_pino.default.stdTimeFunctions.isoTime,...e.additionalOptions},w)}function getLogFilePath(e){return join(OK_LOGS_DIR,`${e}.${todayDateString()}.log`)}function getLogsDir(){return OK_LOGS_DIR}const ANCESTOR_WALK_DEPTH_LIMIT=30,GIT_MARKER=`.git`;function findEnclosingGitRoot(e){let t=resolve(e),S=0;for(;S<ANCESTOR_WALK_DEPTH_LIMIT;){let e=!1;try{e=existsSync(resolve(t,GIT_MARKER))}catch{e=!1}if(e)return{gitRoot:t,distance:S};let w=dirname(t);if(w===t)return null;t=w,S+=1}return null}const execFileAsync=promisify(execFile);var ProjectGitInitError=class extends Error{stderr;constructor(e,t=``,S){super(e,S),this.name=`ProjectGitInitError`,this.stderr=t}};async function isInsideExistingWorkTree(e){try{let{stdout:t}=await execFileAsync(`git`,[`rev-parse`,`--is-inside-work-tree`],{cwd:e});return t.trim()===`true`}catch{return!1}}async function ensureProjectGit(e){let t=resolve(e),S=resolve(t,`.git`),w=resolve(S,`HEAD`),E=!1;if(existsSync(S)){if(!statSync(S).isDirectory()||existsSync(w))return{didInit:!1};console.log(`[project-git] detected partial .git/ — running git init to repair`),E=!0}else if(await isInsideExistingWorkTree(t))return{didInit:!1};let D=``;try{D=(await execFileAsync(`git`,[`init`,`--initial-branch=main`,t])).stderr??``}catch(e){let S=typeof e==`object`&&e&&`stderr`in e?String(e.stderr??``):``;throw new ProjectGitInitError(`git init failed at ${t}: ${e instanceof Error?e.message:String(e)}`,S,{cause:e})}if(!existsSync(w))throw new ProjectGitInitError(`git init reported success but ${S}/HEAD is missing (partial init detected)`,D);return E?(console.log(`[project-git] backfilled missing .git/HEAD at ${t}`),{didInit:!0,repaired:!0}):(console.log(`[project-git] initialized .git/ at ${t} (branch: main)`),{didInit:!0})}async function resolvePackageVersion(e,t){let S;try{S=createRequire(t).resolve(e)}catch(e){if(e?.code===`MODULE_NOT_FOUND`)return;throw e}for(let t=dirname(S),w=0;w<32;w+=1){let S=join(t,`package.json`);if(existsSync(S))try{let t=JSON.parse(await readFile$1(S,`utf-8`));if(t.name===e&&typeof t.version==`string`)return t.version}catch{}let w=dirname(t);if(w===t)return;t=w}}const MAX_CAUSE_DEPTH=5,HOME_PATH_PATTERNS=[{regex:/\/Users\/[^/]+\//g,replacement:`~/`},{regex:/\/home\/[^/]+\//g,replacement:`~/`},{regex:/C:\\\\Users\\\\[^\\\\]+\\\\/g,replacement:`~\\`},{regex:/C:\\Users\\[^\\]+\\/g,replacement:`~\\`}];function scrubPaths(e){if(e===void 0)return;let t=e;for(let{regex:e,replacement:S}of HOME_PATH_PATTERNS)t=t.replace(e,S);return t}function serializeError(e,t=0,S=new WeakSet){if(t>=MAX_CAUSE_DEPTH)return{name:`SerializedError.CauseDepthExceeded`,message:`cause chain depth > ${MAX_CAUSE_DEPTH}; truncated`};if(typeof e==`object`&&e){if(S.has(e))return{name:`SerializedError.CauseCycle`,message:`cyclic cause; truncated`};S.add(e)}if(e instanceof Error)return{name:e.name,message:scrubPaths(e.message)??``,stack:scrubPaths(e.stack),code:e.code,cause:e.cause===void 0?void 0:serializeError(e.cause,t+1,S)};if(e==null)return{name:`UnknownError`,message:String(e)};if(typeof e==`string`)return{name:`StringError`,message:scrubPaths(e)??e};if(typeof e==`object`){let w=e;return{name:String(w.name??`ObjectError`),message:scrubPaths(String(w.message??``))??``,stack:scrubPaths(w.stack),code:w.code,cause:w.cause===void 0?void 0:serializeError(w.cause,t+1,S)}}return{name:`UnknownError`,message:String(e)}}export{applySeed as $,resolveCursorBinaryDefault as $n,LATEST_PROTOCOL_VERSION as $r,getMetrics as $t,McpLogger as A,OK_PROJECT_MARKER as Ai,parseAuthRejectionWire as An,tracedAppendFileSync as Ar,createPersistenceExtension as At,STARTER_FOLDER_FRONTMATTER_FILENAME as B,string$2 as Bi,readTargetRecordedAt as Bn,tracedWriteFileSync as Br,extractWikiLinksFromMarkdown as Bt,LIVE_DERIVED_INDEX_DEBOUNCE_MS as C,SYSTEM_DOC_NAME as Ci,listRescueCheckpoints as Cn,shutdownTelemetry as Cr,createContentFilter as Ct,MCP_CONNECTION_ID_HEADER as D,iconFromClientName as Di,mountMcpAndApi as Dn,streamingProblemEvent as Dr,createLiveDerivedIndexExtension as Dt,MAX_AGENT_SESSIONS as E,humanFormat as Ei,loggerFactory as En,startWatcher as Er,createFileLogger as Et,ProjectGitInitError as F,boolean$1 as Fi,readAllTargets as Fn,tracedRenameSync as Fr,detectClaudeDesktopPresence as Ft,SeedPrerequisiteError as G,recordSkillInstallEvent as Gn,validateSkillZip as Gr,formatContributorsFrom as Gt,STARTER_PACK_IDS as H,_coercedNumber as Hi,readUiLock as Hn,updateUiLockPort as Hr,findEnclosingProjectRoot as Ht,ROLLBACK_ORIGIN as I,literal as Ii,readBranchFromHead as In,tracedRmSync as Ir,detectProjectShape as It,TagIndex as J,releaseUiLock as Jn,writeStateManifest as Jr,getLocalDir as Jt,SeedRootDirError as K,registerAllTools as Kn,withSpan as Kr,gcCheckpointRefs as Kt,SERVICE_WRITER as L,looseObject as Li,readServerPackageVersion as Ln,tracedRmdirSync as Lr,ensureProjectGit as Lt,OBSERVER_SYNC_ORIGIN as M,ZodNumber$1 as Mi,parseKeepaliveConnectionId as Mn,tracedMkdir as Mr,createServerObserverExtension as Mt,OK_OKIGNORE_TEMPLATE as N,any$1 as Ni,pathToDocName as Nn,tracedMkdirSync as Nr,createStreamingErrorWriter as Nt,MCP_SERVER_NAME as O,isBranchNotFoundGitError as Oi,normalizeFsPath as On,swapContributors as Or,createMcpHttpHandler as Ot,PinoLogger as P,array as Pi,planSeed as Pn,tracedRename as Pr,createTestLogger as Pt,applyExternalChange as Q,resolveContentDir as Qn,JSONRPCMessageSchema as Qr,getMeter as Qt,SKILL_INSTALL_EVENTS_FILE_REL as R,number$1 as Ri,readSkillInstallStateSnapshot as Rn,tracedUnlinkSync as Rr,errorResponse as Rt,INSTALLED_AGENTS_SCHEMES as S,SPAWN_ERROR_LOG as Si,lastKnownHash as Sn,shadowGit as Sr,createAssetServeMiddleware as St,MANAGED_RENAME_ORIGIN as T,defaultScheduler as Ti,loadPrincipal as Tn,splitMarkdownBlocks as Tr,createExternalChangeHandler as Tt,STARTER_TEMPLATES as U,NEVER as Ui,reconcile as Un,validateAgentId as Ur,formatAuthRejectionWire as Ut,STARTER_PACKS as V,url as Vi,readTargetVersion as Vn,updateLastKnownHash as Vr,findEnclosingGitRoot as Vt,STATE_MANIFEST_FILENAME as W,require_dist$1 as Wi,recordContributor as Wn,validateCloneInputs as Wr,formatContributors as Wt,acquireUiLock as X,resetMetrics as Xn,writeTracker as Xr,getLogger as Xt,UiLockCollisionError as Y,removeLastKnownHash as Yn,writeTargetVersion as Yr,getLogFilePath as Yt,applyAgentMarkdownWrite as Z,resolveBundledSkillDir as Zn,McpServer as Zr,getLogsDir as Zt,FILE_WATCHER_ORIGIN as _,EXECUTABLE_BLOCKLIST_EXTENSIONS as _i,isPairedWriteOrigin as _n,saveInMemoryCheckpoint as _r,commitWipFromTree as _t,AgentPresenceBroadcaster as a,resolveConfigPath as ai,initContent as an,restoreLifecycleFromConflictsJson as ar,buildConfigYmlContent as at,HocuspocusAuthRejection as b,ProblemDetailsSchema as bi,isSelfWrite as bn,serializeError as br,contributorCount as bt,BacklinkIndex as c,GitDirAccessError as ci,installPrettyZodErrors as cn,runAuthReposSubprocess as cr,buildSkillZip as ct,CONFLICT_MARKER_RE as d,ASSET_EXTENSIONS as di,isAllowedApiOrigin as dn,runDeviceFlowSubprocess as dr,classifyEvents as dt,isInitializedNotification as ei,getTracer as en,resolveCursorSpawnInvocation as er,assertCompatibleStateManifest as et,CURSOR_BUNDLE_PATHS_BY_PLATFORM as f,CC1_CONTRACT_VERSION as fi,isAllowedWorkspaceHostHeader as fn,runWithMcpLogger as fr,classifyFsPath as ft,FILE_SYSTEM_WRITER as g,EDITOR_LABELS as gi,isLoopbackAddress as gn,sanitizeClientName as gr,commitWip as gt,DEFAULT_PACK_ID as h,DEFAULT_SIGTERM_GRACE_MS as hi,isKnownPackId as hn,safetyCheckpoint as hr,commitUpstreamImport as ht,AgentFocusBroadcaster as i,readConfigSafely as ii,incrementServerObserverFire as in,restoreContributors as ir,buildAndOpenSkill as it,MissingOkConfigError as j,locateIssue as ji,parseHocuspocusAuthToken as jn,tracedLinkSync as jr,createServer$1 as jt,MISSING_OK_CONFIG_MESSAGE as k,isOrphanMode as ki,packageVersionMajorMinor as kn,toBroadcasterKey as kr,createOsProbe as kt,CC1Broadcaster as l,MalformedGitPointerError as li,installTestLoggers as ln,runAuthStatusSubprocess as lr,buildStarterFolderFrontmatterYaml as lt,DEFAULT_CHECKPOINT_RETENTION as m,DEFAULT_SERVER_HOST as mi,isHocuspocusAuthRejectionReason as mn,safeSubdir as mr,coercePackId as mt,AGENT_ID_RE as n,isJSONRPCResultResponse as ni,handleSpawnCursor as nn,resolvePack as nr,attachIdleShutdown as nt,AgentSessionCapacityError as o,withFileLockSync as oi,initShadowRepo as on,rewriteMarkdownLinksForDocumentRename as or,buildExecResult as ot,ConfigSchema as p,DEFAULT_GITHUB_OAUTH_CLIENT_ID as pi,isConfigDoc as pn,safeContentPath as pr,clearContributors as pt,StateManifestError as q,registerWrite as qn,withSpanSync as qr,getCurrentMcpLogger as qt,AGENT_WRITE_ORIGIN as r,atomicWriteFileSync as ri,incrementCollabSocketFilteredError as rn,resolvePackageVersion as rr,bootServer as rt,AgentSessionManager as s,writeConfigPatch as si,initTelemetry as sn,rewriteWikiLinksForDocumentRename as sr,buildInstructions as st,AGENT_ID_MAX_LEN as t,isJSONRPCRequest as ti,handleCollabSocketError as tn,resolveLockDir as tr,assertNeverDiskEvent as tt,CONFIG_FILENAME as u,ALL_EDITOR_IDS as ui,installUserSkill as un,runCloneSubprocess as ur,buildWipTree as ut,GIT_UPSTREAM_WRITER as v,INLINE_RENDERABLE_EXTENSIONS as vi,isPathWithinDir as vn,saveVersion as vr,containsConflictMarkers as vt,LOG_MD_TEMPLATE as w,colorFromSeed as wi,listStarterPacks as wn,spawnDetached as wr,createContentFilterAsync as wt,HocuspocusAuthTokenSchema as x,SKILL_STATE_TARGETS as xi,isSystemDoc as xn,setActiveSpanAttributes as xr,createApiExtension as xt,HOCUSPOCUS_AUTH_REJECTION_REASONS as y,ORPHAN_MODES as yi,isProjectRoot as yn,seedBasenameIndex as yr,contentHash as yt,STARTER_FOLDERS as z,object$1 as zi,readStateManifest as zn,tracedWriteFile as zr,evictStaleTrackerEntries as zt};
3507
- //# sourceMappingURL=dist-DUA-uDSk.mjs.map
3507
+ `))e&&await t.raw(`update-ref`,`-d`,e);ee.info({context:e.oldBranch},`[branch-switch] cleaned up detached context ${e.oldBranch}`)}}catch(e){ee.error({err:e},`[branch-switch] detached cleanup failed`)}setBatchInProgress(!1),await ge.flushDeferredStores(`discard-stale`),ye?.emitBranchSwitched(w)}if(e.headMoved&&e.newHead&&me.current&&S>0){let t=H??`.`;try{let S=await commitUpstreamImport(me.current,t,e.oldHead,e.newHead,w);incrementUpstreamImport(),ee.info({oldHead:e.oldHead?.slice(0,8)??`null`,newHead:e.newHead.slice(0,8),sha:S.slice(0,8)},`[history] upstream-import from ${e.oldHead?.slice(0,8)??`null`}..${e.newHead.slice(0,8)} → ${S.slice(0,8)}`)}catch(e){ee.error({err:e},`[shadow] upstream-import failed`)}}})}catch(e){ee.error({err:e},`[server] HEAD watcher failed to start`),Wt.push(`head-watcher`)}function O(e){for(let w of e)try{let e=relative(t,join(S,w));if(e.startsWith(`..`))continue;let E=stripDocExtension(e),D=_e.documents.get(E);if(!D)continue;let O=at(E);O===null?ee.warn({docName:E,file:w},`[sync] content conflict: serializeDoc returned null; reconciledBase snapshot skipped`):setReconciledBase(E,O);let k=D.getMap(`lifecycle`);k.set(`status`,`conflict`),k.set(`reason`,`sync-merge-conflict`),ee.info({docName:E,file:w},`[sync] marked loaded content conflict`)}catch(e){ee.warn({err:e,file:w},`[sync] failed to mark loaded content conflict`)}}let k=J?.[0]??`open-knowledge`,j=[`-c`,`credential.helper=!${J&&J.length>1?J.join(` `):k} auth git-credential`];try{Bt=new SyncEngine({projectDir:S,contentDir:t,contentFilter:ue,contentRoot:H,syncEnabled:te(),credentialArgs:j,cc1Broadcaster:ye,detectGh:e.detectGh,tokenStore:e.tokenStore,checkPushPermissionFn:e.checkPushPermissionFn,setBatchInProgress:e=>{setBatchInProgress(e),e||ge.flushDeferredStores(`within-branch`).catch(e=>{ee.error({err:e},`[persistence] deferred store drain failed after sync batch`)})},onStateChange:e=>{ee.info({state:e},`[sync] state → ${e}`)},onContentConflictsDetected:O,onAutoDisable:async e=>{ee.warn({reason:e},`[sync] auto-disabled — persisting to project-local config`);let t=await writeConfigPatch({cwd:S,scope:`project-local`,patch:{autoSync:{enabled:!1}}});t.ok||ee.error({result:t,reason:e,humanError:humanFormat(t.error),configPath:resolveConfigPath(`project-local`,S)},`[sync] failed to persist auto-disable — next restart WILL re-enable sync and re-trigger the same failure. Check permissions on the config path.`)}}),await Bt.start()}catch(e){ee.warn({err:e},`[server] SyncEngine failed to start — sync disabled`),Bt=null}ze(`files`),ze(`backlinks`),ze(`graph`),ze(`tags`)}return Kt().then(Pe,Ie),{hocuspocus:_e,sessionManager:ve,cc1Broadcaster:ye,agentFocusBroadcaster:Ce,agentPresenceBroadcaster:we,contentFilter:ue,basenameIndex:oe,serverInstanceId:ne,destroy:Ut,ready:Re,degraded:Wt,lockDir:ae,get syncEngine(){return Bt}}}const LEGACY_RUNTIME_FILENAMES=[`server.lock`,`ui.lock`,`state.json`,`principal.json`,`sync-state.json`,`conflicts.json`,`last-spawn-error.log`],LEGACY_RUNTIME_DIRNAMES=[`cache`,`tmp`];function findLegacyRuntimeFiles(e){let t=resolve(e,LOCAL_DIR);if(!(()=>{if(!existsSync(t))return!0;try{return readdirSync(t).length===0}catch{return!0}})())return[];let S=[];for(let t of LEGACY_RUNTIME_FILENAMES)existsSync(resolve(e,t))&&S.push(t);for(let t of LEGACY_RUNTIME_DIRNAMES){let w=resolve(e,t);try{existsSync(w)&&statSync(w).isDirectory()&&S.push(`${t}/`)}catch{}}return S}function computeWorktreeAttributes(e){let t=resolveGitDirDetailed(e);switch(t.kind){case`directory`:return{kind:`main`,gitdir:t.path};case`linked`:return{kind:`linked`,gitdir:t.path};case`malformed-pointer`:return{kind:`linked`,gitdir:null};case`inaccessible`:case`absent`:return{kind:`main`,gitdir:null}}}const DEFAULT_IDLE_THRESHOLD_MS=1800*1e3,DESTROY_STEP_TIMEOUT_MS=5e3;async function bootServer(e){initTelemetry();let{kind:t,gitdir:S}=computeWorktreeAttributes(e.projectDir??e.contentDir),w={"ok.worktree.kind":t};return S!==null&&(w[`ok.worktree.gitdir`]=normalizeFsPath(S)),withSpan(`ok.boot`,{attributes:w},async()=>bootServerInner(e))}async function bootServerInner(e){let t=e.skipAutoInit??!1,S=e.attachUiSibling??!0,w=e.idleShutdownMs,E=e.log??getLogger(`boot`),D=process.env.OK_LOCK_KIND===`mcp-spawned`||process.env.OK_LOCK_KIND===`interactive`?process.env.OK_LOCK_KIND:void 0,O=e.lockKind??D??`interactive`,{createServer:k}=await import(`node:http`),{updateServerLockPort:j}=await import(`./server-lock-v2ktHD7l-C-3wEnoU.mjs`),F=!1;if(!t&&e.autoInitFn)try{F=!!await e.autoInitFn()}catch(e){E.warn({err:e},`autoInitFn failed`)}let L=e.projectDir??e.contentDir,B=resolve(L,`.ok`);if(!existsSync(resolve(B,`config.yml`)))throw new MissingOkConfigError(existsSync(B)?`config`:`okdir`,L);existsSync(resolve(B,`.gitignore`))||console.warn("[boot] Note: .ok/.gitignore is missing — per-machine state files in .ok/ may show up as untracked changes. Run `ok init` to add the recommended ignore entries.");let H=e.gitPreflight??assertGitAvailable;try{H()}catch(e){if(e instanceof GitNotAvailableError||e instanceof GitTooOldError){let t=e instanceof GitTooOldError?e.detected:``,S=e instanceof GitTooOldError?`too_old`:`not_available`;emitPreflightFailureSpan(e),E.warn({event:`git_preflight_fail`,platform:e.platform,reason:S,detectedVersion:t},S===`not_available`?`git binary not found`:`git binary too old`),process.stderr.write(`${e.message}\n`)}throw await shutdownTelemetry(),e}let q=findLegacyRuntimeFiles(B);q.length>0&&console.warn(`[boot] Found legacy runtime files at .ok/${q.join(`, `)}. Delete .ok/ and re-init — these files moved to .ok/${LOCAL_DIR}/.`);let J=createServer$1({contentDir:e.contentDir,projectDir:e.projectDir,contentRoot:e.contentRoot,port:e.port,host:e.host,quiet:e.quiet??!1,debounce:e.debounce,maxDebounce:e.maxDebounce,gitEnabled:e.gitEnabled,commitDebounceMs:e.commitDebounceMs,wipRef:e.wipRef,enableTestRoutes:e.enableTestRoutes,shadowRepo:e.shadowRepo,destroyTimeoutMs:e.destroyTimeoutMs,localOpCliArgs:e.localOpCliArgs,onAgentWrite:e.onAgentWrite,lockKind:O,skipStateManifestCheck:e.skipStateManifestCheck,detectGh:e.detectGh,tokenStore:e.tokenStore}),{hocuspocus:Y,destroy:ee,ready:te,degraded:ne,lockDir:ae,sessionManager:oe,agentFocusBroadcaster:se,agentPresenceBroadcaster:ce}=J,ue=(()=>{let t=e.host??`localhost`;return t===`0.0.0.0`||t===`::`?`localhost`:t.includes(`:`)&&!t.startsWith(`[`)?`[${t}]`:t})(),de=e.port??0,fe=createMcpHttpHandler({contentDir:e.contentDir,projectDir:e.projectDir??e.contentDir,config:e.config,getServerUrl:()=>`http://${ue}:${de}`,log:E}),me=k();me.headersTimeout=3e4,me.requestTimeout=6e4;let ge=e.serveContentAssets?createAssetServeMiddleware({contentFilter:J.contentFilter,contentSirv:build_default(e.contentDir,{dev:!0,dotfiles:!1}),inlineExtensions:INLINE_RENDERABLE_EXTENSIONS,assetExtensions:ASSET_EXTENSIONS,blocklistExtensions:EXECUTABLE_BLOCKLIST_EXTENSIONS}):void 0,_e=!1;if(e.reactShellDistDir)try{acquireUiLock(ae,{port:0,worktreeRoot:e.projectDir??e.contentDir}),_e=!0}catch(e){if(e instanceof UiLockCollisionError)E.info({event:`ui-lock-yielded-to-live-holder`,pid:process.pid,existingPid:e.existing.pid,existingPort:e.existing.port,lockDir:ae},`ui.lock already held by a live process — yielding (advertisement is fulfilled)`);else throw await ee().catch(()=>{}),e}let ve=e.reactShellDistDir?build_default(e.reactShellDistDir,{single:!0,gzip:!0,immutable:!0}):void 0,ye=mountMcpAndApi({httpServer:me,hocuspocus:Y,mcpHttpHandler:fe,log:E,sessionManager:oe,agentFocusBroadcaster:se,agentPresenceBroadcaster:ce,keepaliveGraceMs:e.keepaliveGraceMs,contentAssetMiddleware:ge,reactShellMiddleware:ve}),Ce=async()=>{throw Error(`bootServer: destroy() invoked before initialization — boot did not complete`)},we=null;w!==null&&(we=attachIdleShutdown({httpServer:me,thresholdMs:w??DEFAULT_IDLE_THRESHOLD_MS,log:E,onShutdown:(e.idleShutdownHandler??(e=>async()=>{await e()}))(async()=>{await Ce()})})),await restoreLifecycleFromConflictsJson({hocuspocus:Y,projectDir:e.projectDir??e.contentDir,log:E});try{await new Promise((t,S)=>{let w=e=>S(e);me.once(`error`,w),me.listen(e.port,e.host,()=>{me.removeListener(`error`,w),t()})})}catch(e){if(_e)try{releaseUiLock(ae)}catch(e){E.warn({err:e},`releaseUiLock failed during listen-error cleanup`)}throw await ee().catch(()=>{}),e}let Te=me.address(),De=typeof Te==`object`&&Te?Te.port:e.port??0;if(de=De,j(ae,De),_e&&updateUiLockPort(ae,De),S&&e.spawnUiSiblingFn)try{await e.spawnUiSiblingFn({lockDir:ae,log:E})}catch(e){E.warn({err:e},`spawnUiSiblingFn failed`)}let je=!1,Me=async(e,t)=>{let S;try{await Promise.race([t(),new Promise((t,w)=>{S=setTimeout(()=>{w(Error(`${e} timed out after ${DESTROY_STEP_TIMEOUT_MS}ms`))},DESTROY_STEP_TIMEOUT_MS),S.unref?.()})])}finally{S!==void 0&&clearTimeout(S)}};return Ce=async()=>{if(je)return;je=!0;let e=[],t=async(t,S)=>{try{await Me(t,S)}catch(S){e.push(S),E.warn({err:S,step:t},`bootServer destroy step failed`)}};try{we?.detach()}catch(t){e.push(t),E.warn({err:t,step:`idleHandle.detach`},`bootServer destroy step failed`)}if(await t(`mount.shutdown`,()=>ye.shutdown()),await t(`mcpHttpHandler.close`,()=>fe.close()),await t(`mount.wss.close`,()=>new Promise((e,t)=>{ye.wss.close(S=>S?t(S):e())})),await t(`httpServer.closeAllConnections`,async()=>{me.closeAllConnections?.()}),await t(`httpServer.close`,()=>new Promise((e,t)=>{me.close(S=>S&&S.code!==`ERR_SERVER_NOT_RUNNING`?t(S):e())})),await t(`destroyHocuspocus`,()=>ee()),_e&&await t(`releaseUiLock`,async()=>releaseUiLock(ae)),await t(`shutdownTelemetry`,()=>shutdownTelemetry()),e.length>0)throw AggregateError(e,`bootServer destroy completed with errors`)},{httpServer:me,destroy:Ce,lockDir:ae,contentDir:e.contentDir,port:De,ready:te,degraded:ne,didAutoInit:F,serverInstance:J}}async function restoreLifecycleFromConflictsJson(e){let{hocuspocus:t,projectDir:S,log:w}=e,E,D;try{E=new ConflictStore(S),D=E.list()}catch(e){w.warn({err:e,projectDir:S},`[boot] lifecycle restore: failed to read conflicts.json — skipping`);return}if(D.length===0)return;let O=null;try{let e=resolveGitDir(S),t=e?join(e,`MERGE_HEAD`):null;if(!t||!existsSync(t)){E.clear(),console.warn(JSON.stringify({event:`lifecycle-restore-cleared-stale-conflicts`,reason:`no-merge-head`,count:D.length}));return}let w=(await simpleGit({baseDir:S,timeout:{block:5e3}}).raw([`diff`,`--name-only`,`--diff-filter=U`])).trim();O=new Set(w?w.split(`
3508
+ `).map(e=>e.trim()).filter(Boolean):[])}catch(e){w.warn({err:e,projectDir:S},`[boot] lifecycle restore: git unmerged probe failed — restoring all entries`)}if(O!==null){let e=0;for(let t of D)O.has(t.file)||(E.removeConflict(t.file),e++);if(e>0&&console.warn(JSON.stringify({event:`lifecycle-restore-pruned-resolved-entries`,pruned:e,remaining:D.length-e})),D=D.filter(e=>O?.has(e.file)),D.length===0)return}for(let e of D){let S=stripDocExtension(e.file),E=null,D=!1;try{E=await t.openDirectConnection(S);let e=E.document;if(!e)continue;let w=e.getMap(`lifecycle`);w.set(`status`,`conflict`),w.set(`reason`,`conflict-markers`),D=!0,console.warn(JSON.stringify({event:`lifecycle-restored-from-conflicts-json`,"doc.name":S}))}catch(e){w.warn({err:e,docName:S},`[boot] lifecycle restore: failed to set lifecycle for doc — skipping`)}finally{if(E)try{await E.disconnect()}catch(e){w.warn({err:e,docName:S,restored:D},`[boot] lifecycle restore: disconnect failed after lifecycle write`)}}}}const ConfigSchema=ConfigSchema$1;function detectClaudeDesktopPresence(e={}){let t=e.home??homedir(),S=e.platformName??process.platform,w=e.env??process.env;return S===`darwin`?existsSync(join(t,`Library`,`Application Support`,`Claude`)):S===`win32`?existsSync(join(w.APPDATA??join(t,`AppData`,`Roaming`),`Claude`)):!1}const OK_LOGS_DIR=join(homedir(),`.ok`,`logs`),MAX_ROTATED_FILES=2,MAX_AGE_DAYS=7,MAX_DIR_SIZE_BYTES=45*1024*1024,REDACT_PATHS=[`authorization`,`password`,`token`,`apiKey`,`secret`,`*.authorization`,`*.password`,`*.token`,`*.apiKey`,`*.secret`];function resolveLogLevel(){let e=process.env.OK_LOG_LEVEL??process.env.LOG_LEVEL;if(e){let t=[`fatal`,`error`,`warn`,`info`,`debug`],S=e.toLowerCase();if(t.includes(S))return S}return process.env.NODE_ENV===`test`?`silent`:`info`}function ensureDir(e){mkdirSync(e,{recursive:!0})}function todayDateString(){return new Date().toISOString().slice(0,10)}function rotateIfNeeded(e){try{if(statSync(e).size<5242880)return}catch{return}for(let t=MAX_ROTATED_FILES;t>=1;t--){let S=t===1?e:`${e}.${t-1}`,w=`${e}.${t}`;try{renameSync(S,w)}catch{}}try{unlinkSync(`${e}.${MAX_ROTATED_FILES+1}`)}catch{}}function pruneLogsDir(e){try{let t=Date.now(),S=MAX_AGE_DAYS*24*60*60*1e3,w=readdirSync(e).filter(e=>e.endsWith(`.log`)||/\.log\.\d+$/.test(e)).map(t=>{try{let S=statSync(join(e,t));return{name:t,mtime:S.mtimeMs,size:S.size}}catch{return null}}).filter(Boolean);for(let E of w)if(t-E.mtime>S)try{unlinkSync(join(e,E.name))}catch{}let E=w.filter(e=>t-e.mtime<=S).sort((e,t)=>e.mtime-t.mtime),D=E.reduce((e,t)=>e+t.size,0);for(let t of E){if(D<=MAX_DIR_SIZE_BYTES)break;try{unlinkSync(join(e,t.name)),D-=t.size}catch{}}}catch{}}function createFileLogger(e){ensureDir(OK_LOGS_DIR);let t=todayDateString(),S=e.filePath??join(OK_LOGS_DIR,`${e.name}.${t}.log`);rotateIfNeeded(S),setTimeout(()=>pruneLogsDir(OK_LOGS_DIR),5e3);let w=import_pino.default.destination({dest:S,append:!0,sync:!1});return(0,import_pino.default)({level:resolveLogLevel(),name:e.name,redact:{paths:REDACT_PATHS,censor:`[REDACTED]`},base:{pid:process.pid,hostname:void 0,runtime:`cli`,project:e.project??`<no-project>`},timestamp:import_pino.default.stdTimeFunctions.isoTime,...e.additionalOptions},w)}function getLogFilePath(e){return join(OK_LOGS_DIR,`${e}.${todayDateString()}.log`)}function getLogsDir(){return OK_LOGS_DIR}const ANCESTOR_WALK_DEPTH_LIMIT=30,GIT_MARKER=`.git`;function findEnclosingGitRoot(e){let t=resolve(e),S=0;for(;S<ANCESTOR_WALK_DEPTH_LIMIT;){let e=!1;try{e=existsSync(resolve(t,GIT_MARKER))}catch{e=!1}if(e)return{gitRoot:t,distance:S};let w=dirname(t);if(w===t)return null;t=w,S+=1}return null}const execFileAsync=promisify(execFile);var ProjectGitInitError=class extends Error{stderr;constructor(e,t=``,S){super(e,S),this.name=`ProjectGitInitError`,this.stderr=t}};async function isInsideExistingWorkTree(e){try{let{stdout:t}=await execFileAsync(`git`,[`rev-parse`,`--is-inside-work-tree`],{cwd:e});return t.trim()===`true`}catch{return!1}}async function ensureProjectGit(e){let t=resolve(e),S=resolve(t,`.git`),w=resolve(S,`HEAD`),E=!1;if(existsSync(S)){if(!statSync(S).isDirectory()||existsSync(w))return{didInit:!1};console.log(`[project-git] detected partial .git/ — running git init to repair`),E=!0}else if(await isInsideExistingWorkTree(t))return{didInit:!1};let D=``;try{D=(await execFileAsync(`git`,[`init`,`--initial-branch=main`,t])).stderr??``}catch(e){let S=typeof e==`object`&&e&&`stderr`in e?String(e.stderr??``):``;throw new ProjectGitInitError(`git init failed at ${t}: ${e instanceof Error?e.message:String(e)}`,S,{cause:e})}if(!existsSync(w))throw new ProjectGitInitError(`git init reported success but ${S}/HEAD is missing (partial init detected)`,D);return E?(console.log(`[project-git] backfilled missing .git/HEAD at ${t}`),{didInit:!0,repaired:!0}):(console.log(`[project-git] initialized .git/ at ${t} (branch: main)`),{didInit:!0})}async function resolvePackageVersion(e,t){let S;try{S=createRequire(t).resolve(e)}catch(e){if(e?.code===`MODULE_NOT_FOUND`)return;throw e}for(let t=dirname(S),w=0;w<32;w+=1){let S=join(t,`package.json`);if(existsSync(S))try{let t=JSON.parse(await readFile$1(S,`utf-8`));if(t.name===e&&typeof t.version==`string`)return t.version}catch{}let w=dirname(t);if(w===t)return;t=w}}const MAX_CAUSE_DEPTH=5,HOME_PATH_PATTERNS=[{regex:/\/Users\/[^/]+\//g,replacement:`~/`},{regex:/\/home\/[^/]+\//g,replacement:`~/`},{regex:/C:\\\\Users\\\\[^\\\\]+\\\\/g,replacement:`~\\`},{regex:/C:\\Users\\[^\\]+\\/g,replacement:`~\\`}];function scrubPaths(e){if(e===void 0)return;let t=e;for(let{regex:e,replacement:S}of HOME_PATH_PATTERNS)t=t.replace(e,S);return t}function serializeError(e,t=0,S=new WeakSet){if(t>=MAX_CAUSE_DEPTH)return{name:`SerializedError.CauseDepthExceeded`,message:`cause chain depth > ${MAX_CAUSE_DEPTH}; truncated`};if(typeof e==`object`&&e){if(S.has(e))return{name:`SerializedError.CauseCycle`,message:`cyclic cause; truncated`};S.add(e)}if(e instanceof Error)return{name:e.name,message:scrubPaths(e.message)??``,stack:scrubPaths(e.stack),code:e.code,cause:e.cause===void 0?void 0:serializeError(e.cause,t+1,S)};if(e==null)return{name:`UnknownError`,message:String(e)};if(typeof e==`string`)return{name:`StringError`,message:scrubPaths(e)??e};if(typeof e==`object`){let w=e;return{name:String(w.name??`ObjectError`),message:scrubPaths(String(w.message??``))??``,stack:scrubPaths(w.stack),code:w.code,cause:w.cause===void 0?void 0:serializeError(w.cause,t+1,S)}}return{name:`UnknownError`,message:String(e)}}export{UiLockCollisionError as $,_coercedNumber as $i,reconcile as $n,validateAgentId as $r,formatContributors as $t,MCP_CONNECTION_ID_HEADER as A,ORPHAN_MODES as Ai,isSystemDoc as An,serializeError as Ar,createContentFilterAsync as At,ROLLBACK_ORIGIN as B,isOrphanMode as Bi,parseGitVersion as Bn,tracedAppendFileSync as Br,createTestLogger as Bt,HocuspocusAuthRejection as C,CC1_CONTRACT_VERSION as Ci,isHocuspocusAuthRejectionReason as Cn,safeContentPath as Cr,compareSemver as Ct,LOG_MD_TEMPLATE as D,EDITOR_LABELS as Di,isPathWithinDir as Dn,saveInMemoryCheckpoint as Dr,createApiExtension as Dt,LIVE_DERIVED_INDEX_DEBOUNCE_MS as E,DEFAULT_SIGTERM_GRACE_MS as Ei,isPairedWriteOrigin as En,sanitizeClientName as Er,contributorCount as Et,MissingOkConfigError as F,colorFromSeed as Fi,loggerFactory as Fn,splitMarkdownBlocks as Fr,createOsProbe as Ft,STARTER_PACKS as G,array as Gi,readAllTargets as Gn,tracedRenameSync as Gr,ensureProjectGit as Gt,SKILL_INSTALL_EVENTS_FILE_REL as H,locateIssue as Hi,parseKeepaliveConnectionId as Hn,tracedMkdir as Hr,detectGit as Ht,OBSERVER_SYNC_ORIGIN as I,defaultScheduler as Ii,mountMcpAndApi as In,startWatcher as Ir,createPersistenceExtension as It,STATE_MANIFEST_FILENAME as J,looseObject as Ji,readSkillInstallStateSnapshot as Jn,tracedUnlinkSync as Jr,extractWikiLinksFromMarkdown as Jt,STARTER_PACK_IDS as K,boolean$1 as Ki,readBranchFromHead as Kn,tracedRmSync as Kr,errorResponse as Kt,OK_OKIGNORE_TEMPLATE as L,humanFormat as Li,normalizeFsPath as Ln,streamingProblemEvent as Lr,createServer$1 as Lt,MIN_GIT_VERSION as M,SKILL_STATE_TARGETS as Mi,listRescueCheckpoints as Mn,shadowGit as Mr,createFileLogger as Mt,MISSING_OK_CONFIG_MESSAGE as N,SPAWN_ERROR_LOG as Ni,listStarterPacks as Nn,shutdownTelemetry as Nr,createLiveDerivedIndexExtension as Nt,MANAGED_RENAME_ORIGIN as O,EXECUTABLE_BLOCKLIST_EXTENSIONS as Oi,isProjectRoot as On,saveVersion as Or,createAssetServeMiddleware as Ot,McpLogger as P,SYSTEM_DOC_NAME as Pi,loadPrincipal as Pn,spawnDetached as Pr,createMcpHttpHandler as Pt,TagIndex as Q,url as Qi,readUiLock as Qn,updateUiLockPort as Qr,formatAuthRejectionWire as Qt,PinoLogger as R,iconFromClientName as Ri,packageVersionMajorMinor as Rn,swapContributors as Rr,createServerObserverExtension as Rt,HOCUSPOCUS_AUTH_REJECTION_REASONS as S,ASSET_EXTENSIONS as Si,isConfigDoc as Sn,runWithMcpLogger as Sr,commitWipFromTree as St,INSTALLED_AGENTS_SCHEMES as T,DEFAULT_SERVER_HOST as Ti,isLoopbackAddress as Tn,safetyCheckpoint as Tr,contentHash as Tt,STARTER_FOLDERS as U,ZodNumber$1 as Ui,pathToDocName as Un,tracedMkdirSync as Ur,detectProjectShape as Ut,SERVICE_WRITER as V,OK_PROJECT_MARKER as Vi,parseHocuspocusAuthToken as Vn,tracedLinkSync as Vr,detectClaudeDesktopPresence as Vt,STARTER_FOLDER_FRONTMATTER_FILENAME as W,any$1 as Wi,planSeed as Wn,tracedRename as Wr,emitPreflightFailureSpan as Wt,SeedRootDirError as X,object$1 as Xi,readTargetRecordedAt as Xn,tracedWriteFileSync as Xr,findEnclosingGitRoot as Xt,SeedPrerequisiteError as Y,number$1 as Yi,readStateManifest as Yn,tracedWriteFile as Yr,fallbackPaths as Yt,StateManifestError as Z,string$2 as Zi,readTargetVersion as Zn,updateLastKnownHash as Zr,findEnclosingProjectRoot as Zt,FILE_WATCHER_ORIGIN as _,writeConfigPatch as _i,installPrettyZodErrors as _n,rewriteWikiLinksForDocumentRename as _r,classifyFsPath as _t,AgentPresenceBroadcaster as a,writeTargetVersion as ai,getLogger as an,removeLastKnownHash as ar,assertGitAvailable as at,GitNotAvailableError as b,resolveShadowDir as bi,isAllowedApiOrigin as bn,runCloneSubprocess as br,commitUpstreamImport as bt,BacklinkIndex as c,JSONRPCMessageSchema as ci,getMetrics as cn,resolveContentDir as cr,bootServer as ct,CONFLICT_MARKER_RE as d,isJSONRPCRequest as di,handleSpawnCursor as dn,resolveLockDir as dr,buildExecResult as dt,NEVER as ea,validateCloneInputs as ei,formatContributorsFrom as en,recordContributor as er,acquireUiLock as et,CURSOR_BUNDLE_PATHS_BY_PLATFORM as f,isJSONRPCResultResponse as fi,incrementCollabSocketFilteredError as fn,resolvePack as fr,buildInstructions as ft,FILE_SYSTEM_WRITER as g,withFileLockSync as gi,initTelemetry as gn,rewriteMarkdownLinksForDocumentRename as gr,classifyEvents as gt,DEFAULT_PACK_ID as h,resolveConfigPath as hi,initShadowRepo as hn,restoreLifecycleFromConflictsJson as hr,buildWipTree as ht,AgentFocusBroadcaster as i,writeStateManifest as ii,getLogFilePath as in,releaseUiLock as ir,assertCompatibleStateManifest as it,MCP_SERVER_NAME as j,ProblemDetailsSchema as ji,lastKnownHash as jn,setActiveSpanAttributes as jr,createExternalChangeHandler as jt,MAX_AGENT_SESSIONS as k,INLINE_RENDERABLE_EXTENSIONS as ki,isSelfWrite as kn,seedBasenameIndex as kr,createContentFilter as kt,CC1Broadcaster as l,LATEST_PROTOCOL_VERSION as li,getTracer as ln,resolveCursorBinaryDefault as lr,buildAndOpenSkill as lt,DEFAULT_CHECKPOINT_RETENTION as m,readConfigSafely as mi,initContent as mn,restoreContributors as mr,buildStarterFolderFrontmatterYaml as mt,AGENT_ID_RE as n,withSpan as ni,getCurrentMcpLogger as nn,registerAllTools as nr,applyExternalChange as nt,AgentSessionCapacityError as o,writeTracker as oi,getLogsDir as on,resetMetrics as or,assertNeverDiskEvent as ot,ConfigSchema as p,atomicWriteFileSync as pi,incrementServerObserverFire as pn,resolvePackageVersion as pr,buildSkillZip as pt,STARTER_TEMPLATES as q,literal as qi,readServerPackageVersion as qn,tracedRmdirSync as qr,evictStaleTrackerEntries as qt,AGENT_WRITE_ORIGIN as r,withSpanSync as ri,getLocalDir as rn,registerWrite as rr,applySeed as rt,AgentSessionManager as s,McpServer as si,getMeter as sn,resolveBundledSkillDir as sr,attachIdleShutdown as st,AGENT_ID_MAX_LEN as t,require_dist$1 as ta,validateSkillZip as ti,gcCheckpointRefs as tn,recordSkillInstallEvent as tr,applyAgentMarkdownWrite as tt,CONFIG_FILENAME as u,isInitializedNotification as ui,handleCollabSocketError as un,resolveCursorSpawnInvocation as ur,buildConfigYmlContent as ut,GIT_PREFLIGHT_FAIL_SPAN_NAME as v,GitDirAccessError as vi,installTestLoggers as vn,runAuthReposSubprocess as vr,clearContributors as vt,HocuspocusAuthTokenSchema as w,DEFAULT_GITHUB_OAUTH_CLIENT_ID as wi,isKnownPackId as wn,safeSubdir as wr,containsConflictMarkers as wt,GitTooOldError as x,ALL_EDITOR_IDS as xi,isAllowedWorkspaceHostHeader as xn,runDeviceFlowSubprocess as xr,commitWip as xt,GIT_UPSTREAM_WRITER as y,MalformedGitPointerError as yi,installUserSkill as yn,runAuthStatusSubprocess as yr,coercePackId as yt,ProjectGitInitError as z,isBranchNotFoundGitError as zi,parseAuthRejectionWire as zn,toBroadcasterKey as zr,createStreamingErrorWriter as zt};
3509
+ //# sourceMappingURL=dist-xB__nIDC.mjs.map