@inkeep/open-knowledge 0.7.0-beta.1 → 0.7.0-beta.11

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 (48) hide show
  1. package/dist/assets/skills/discovery/SKILL.md +1 -1
  2. package/dist/assets/skills/project/SKILL.md +3 -3
  3. package/dist/cli.mjs +34 -34
  4. package/dist/constants-CM_cx2Zy.mjs +2 -0
  5. package/dist/dist-B21BxVot.mjs +1 -0
  6. package/dist/{dist-Di8PRueX.mjs → dist-B9kyHZC-.mjs} +119 -53
  7. package/dist/index.mjs +1 -1
  8. package/dist/init-CM18xiLB.mjs +409 -0
  9. package/dist/init-DfSBVmmm.mjs +1 -0
  10. package/dist/{loader-D-OC1qlW.mjs → loader-BNEOapNa.mjs} +3 -3
  11. package/dist/loader-Ds0Qn_CI.mjs +1 -0
  12. package/dist/preview-DpnpiFJd.mjs +1 -0
  13. package/dist/{preview-D0bxM-7z.mjs → preview-ynOCMSCg.mjs} +2 -2
  14. package/dist/public/assets/ActivityModeContent-oe_KmZ6Y.js +2 -0
  15. package/dist/public/assets/DocumentContext-DbnbvMHR.js +58 -0
  16. package/dist/public/assets/GraphPanel-D7AmXBQV.js +46 -0
  17. package/dist/public/assets/SettingsDialogBody-BpLMuvP2.js +7 -0
  18. package/dist/public/assets/SourceEditor-BEQlTn2N.js +2 -0
  19. package/dist/public/assets/config-validation-events-COByjXe4.js +12 -0
  20. package/dist/public/assets/index-BA5hvX-L.css +1 -0
  21. package/dist/public/assets/index-Boa7vp1g.js +1914 -0
  22. package/dist/public/assets/{prop-types-CshEEa52.js → prop-types-Cy-YM1RJ.js} +138 -138
  23. package/dist/public/assets/target-navigation-intent-Bi7iq3EI.js +1 -0
  24. package/dist/public/assets/{toggle-group-DPMvPSnm.js → toggle-group-CaNMUr-8.js} +1 -1
  25. package/dist/public/assets/{typing-burst-detector-OVZBfkMr.js → typing-burst-detector-Cik-Z5me.js} +2 -2
  26. package/dist/public/index.html +8 -8
  27. package/dist/{repair-launch-json-DillBce5.mjs → repair-launch-json-BmZTdG93.mjs} +2 -2
  28. package/dist/{repair-mcp-configs-DrhxV28s.mjs → repair-mcp-configs-urHfrBJl.mjs} +2 -2
  29. package/dist/{src-CKm1rGW4.mjs → src-fNnA8_VN.mjs} +2 -2
  30. package/dist/{start-B2hXGRd8.mjs → start-4S4Tw5XJ.mjs} +2 -2
  31. package/dist/start-DKsJKDcU.mjs +1 -0
  32. package/package.json +1 -1
  33. package/dist/constants-CflqTJEV.mjs +0 -2
  34. package/dist/dist-CnCjIzK3.mjs +0 -1
  35. package/dist/init-BJckqR1i.mjs +0 -1
  36. package/dist/init-CIud-WTI.mjs +0 -409
  37. package/dist/loader-S7TTlgup.mjs +0 -1
  38. package/dist/preview-BD-NXRMe.mjs +0 -1
  39. package/dist/public/assets/ActivityModeContent-cxebDRrV.js +0 -2
  40. package/dist/public/assets/DocumentContext-B5BGj6vR.js +0 -58
  41. package/dist/public/assets/GraphPanel-DDRNPZvZ.js +0 -46
  42. package/dist/public/assets/SettingsDialogBody-DEFwKiJB.js +0 -7
  43. package/dist/public/assets/SourceEditor-ZzF4LdYG.js +0 -2
  44. package/dist/public/assets/config-validation-events-B5h7RDNY.js +0 -12
  45. package/dist/public/assets/index-BuIw4oeG.css +0 -1
  46. package/dist/public/assets/index-DinBQ-eY.js +0 -1914
  47. package/dist/public/assets/target-navigation-intent-BDpwJe-x.js +0 -1
  48. package/dist/start-Cx17jyxZ.mjs +0 -1
@@ -1,4 +1,4 @@
1
- import{a as __toCommonJS,i as __require$1,n as __esmMin,o as __toESM$1,r as __exportAll,t as __commonJSMin$1}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-BbkJd7ro.mjs";import{a as acquireProcessLock,c as isValidLockPid,f as readServerLock,g 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-BniQ3qki-CadPGoZN.mjs";import{a as simpleGit,i as esm_default,o as require_src$15,r as withParentLock,t as createGitInstance}from"./git-handle-CjyGVy33-CK0dYQ8y.mjs";import{r as diffLines,t as createPatch}from"./libesm-Cfo1LhlX.mjs";import{n as mimes,t as build_default}from"./build-BZeImWox.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{Transform}from"node:stream";import crypto$1,{createHash,randomUUID,webcrypto}from"node:crypto";import crypto$2 from"crypto";import*as zlib$2 from"zlib";import{access,constants,mkdir,readFile as readFile$1,readdir,realpath,rename,stat as stat$1,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$1((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$1((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$1((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$1,n as __esmMin,o as __toESM$1,r as __exportAll,t as __commonJSMin$1}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-BbkJd7ro.mjs";import{a as acquireProcessLock,c as isValidLockPid,f as readServerLock,g 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-BniQ3qki-CadPGoZN.mjs";import{a as simpleGit,i as esm_default,o as require_src$15,r as withParentLock,t as createGitInstance}from"./git-handle-CjyGVy33-CK0dYQ8y.mjs";import{r as diffLines,t as createPatch}from"./libesm-Cfo1LhlX.mjs";import{n as mimes,t as build_default}from"./build-BZeImWox.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{Transform}from"node:stream";import crypto$1,{createHash,randomUUID,webcrypto}from"node:crypto";import crypto$2 from"crypto";import*as zlib$2 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$1((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$1((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$1((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$1((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$1((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$1((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$1((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$1((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$1((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$1((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$1((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$1((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
  `)?`
@@ -205,24 +205,24 @@ ${S}`}}),k}function updateMarkViewAttributes(e,t,S={}){let{state:w}=t,{doc:E,tr:
205
205
  `);return!D||!O?!1:e.chain().command(({tr:e})=>(e.delete(w.pos-2,w.pos),!0)).exitCode().run()},ArrowDown:({editor:e})=>{if(!this.options.exitOnArrowDown)return!1;let{state:t}=e,{selection:S,doc:w}=t,{$from:E,empty:D}=S;if(!D||E.parent.type!==this.type||E.parentOffset!==E.parent.nodeSize-2)return!1;let O=E.after();return O===void 0?!1:w.nodeAt(O)?e.commands.command(({tr:e})=>(e.setSelection(Selection$1.near(w.resolve(O))),!0)):e.commands.exitCode()}}},addInputRules(){return[textblockTypeInputRule({find:backtickInputRegex,type:this.type,getAttributes:e=>({language:e[1]})}),textblockTypeInputRule({find:tildeInputRegex,type:this.type,getAttributes:e=>({language:e[1]})})]},addProseMirrorPlugins(){return[new Plugin({key:new PluginKey(`codeBlockVSCodeHandler`),props:{handlePaste:(e,t)=>{if(!t.clipboardData||this.editor.isActive(this.type.name))return!1;let S=t.clipboardData.getData(`text/plain`),w=t.clipboardData.getData(`vscode-editor-data`),E=(w?JSON.parse(w):void 0)?.mode;if(!S||!E)return!1;let{tr:D,schema:O}=e.state,k=O.text(S.replace(/\r\n?/g,`
206
206
  `));return D.replaceSelectionWith(this.type.create({language:E},k)),D.selection.$from.parent.type!==this.type&&D.setSelection(TextSelection.near(D.doc.resolve(Math.max(0,D.selection.from-2)))),D.setMeta(`paste`,!0),e.dispatch(D),!0}}})]}}),index_default$11=CodeBlock,h$1=(e,t)=>{if(e===`slot`)return 0;if(e instanceof Function)return e(t);let{children:S,...w}=t??{};if(e===`svg`)throw Error(`SVG elements are not supported in the JSX syntax, use the array syntax instead`);return[e,w,S]},starInputRegex$1=/(?:^|\s)(\*\*(?!\s+\*\*)((?:[^*]+))\*\*(?!\s+\*\*))$/,starPasteRegex$1=/(?:^|\s)(\*\*(?!\s+\*\*)((?:[^*]+))\*\*(?!\s+\*\*))/g,underscoreInputRegex$1=/(?:^|\s)(__(?!\s+__)((?:[^_]+))__(?!\s+__))$/,underscorePasteRegex$1=/(?:^|\s)(__(?!\s+__)((?:[^_]+))__(?!\s+__))/g,Bold=Mark.create({name:`bold`,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`strong`},{tag:`b`,getAttrs:e=>e.style.fontWeight!==`normal`&&null},{style:`font-weight=400`,clearMark:e=>e.type.name===this.name},{style:`font-weight`,getAttrs:e=>/^(bold(er)?|[5-9]\d{2,})$/.test(e)&&null}]},renderHTML({HTMLAttributes:e}){return h$1(`strong`,{...mergeAttributes(this.options.HTMLAttributes,e),children:h$1(`slot`,{})})},markdownTokenName:`strong`,parseMarkdown:(e,t)=>t.applyMark(`bold`,t.parseInline(e.tokens||[])),markdownOptions:{htmlReopen:{open:`<strong>`,close:`</strong>`}},renderMarkdown:(e,t)=>`**${t.renderChildren(e)}**`,addCommands(){return{setBold:()=>({commands:e})=>e.setMark(this.name),toggleBold:()=>({commands:e})=>e.toggleMark(this.name),unsetBold:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-b":()=>this.editor.commands.toggleBold(),"Mod-B":()=>this.editor.commands.toggleBold()}},addInputRules(){return[markInputRule({find:starInputRegex$1,type:this.type}),markInputRule({find:underscoreInputRegex$1,type:this.type})]},addPasteRules(){return[markPasteRule({find:starPasteRegex$1,type:this.type}),markPasteRule({find:underscorePasteRegex$1,type:this.type})]}}),index_default$10=Bold,starInputRegex=/(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))$/,starPasteRegex=/(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))/g,underscoreInputRegex=/(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))$/,underscorePasteRegex=/(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))/g,Italic=Mark.create({name:`italic`,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`em`},{tag:`i`,getAttrs:e=>e.style.fontStyle!==`normal`&&null},{style:`font-style=normal`,clearMark:e=>e.type.name===this.name},{style:`font-style=italic`}]},renderHTML({HTMLAttributes:e}){return[`em`,mergeAttributes(this.options.HTMLAttributes,e),0]},addCommands(){return{setItalic:()=>({commands:e})=>e.setMark(this.name),toggleItalic:()=>({commands:e})=>e.toggleMark(this.name),unsetItalic:()=>({commands:e})=>e.unsetMark(this.name)}},markdownTokenName:`em`,parseMarkdown:(e,t)=>t.applyMark(`italic`,t.parseInline(e.tokens||[])),markdownOptions:{htmlReopen:{open:`<em>`,close:`</em>`}},renderMarkdown:(e,t)=>`*${t.renderChildren(e)}*`,addKeyboardShortcuts(){return{"Mod-i":()=>this.editor.commands.toggleItalic(),"Mod-I":()=>this.editor.commands.toggleItalic()}},addInputRules(){return[markInputRule({find:starInputRegex,type:this.type}),markInputRule({find:underscoreInputRegex,type:this.type})]},addPasteRules(){return[markPasteRule({find:starPasteRegex,type:this.type}),markPasteRule({find:underscorePasteRegex,type:this.type})]}}),index_default$9=Italic,HardBreak=Node3.create({name:`hardBreak`,markdownTokenName:`br`,addOptions(){return{keepMarks:!0,HTMLAttributes:{}}},inline:!0,group:`inline`,selectable:!1,linebreakReplacement:!0,parseHTML(){return[{tag:`br`}]},renderHTML({HTMLAttributes:e}){return[`br`,mergeAttributes(this.options.HTMLAttributes,e)]},renderText(){return`
207
207
  `},renderMarkdown:()=>`
208
- `,parseMarkdown:()=>({type:`hardBreak`}),addCommands(){return{setHardBreak:()=>({commands:e,chain:t,state:S,editor:w})=>e.first([()=>e.exitCode(),()=>e.command(()=>{let{selection:e,storedMarks:E}=S;if(e.$from.parent.type.spec.isolating)return!1;let{keepMarks:D}=this.options,{splittableMarks:O}=w.extensionManager,k=E||e.$to.parentOffset&&e.$from.marks();return t().insertContent({type:this.name}).command(({tr:e,dispatch:t})=>{if(t&&k&&D){let t=k.filter(e=>O.includes(e.type.name));e.ensureMarks(t)}return!0}).run()})])}},addKeyboardShortcuts(){return{"Mod-Enter":()=>this.editor.commands.setHardBreak(),"Shift-Enter":()=>this.editor.commands.setHardBreak()}}}),index_default$8=HardBreak,Heading=Node3.create({name:`heading`,addOptions(){return{levels:[1,2,3,4,5,6],HTMLAttributes:{}}},content:`inline*`,group:`block`,defining:!0,addAttributes(){return{level:{default:1,rendered:!1}}},parseHTML(){return this.options.levels.map(e=>({tag:`h${e}`,attrs:{level:e}}))},renderHTML({node:e,HTMLAttributes:t}){return[`h${this.options.levels.includes(e.attrs.level)?e.attrs.level:this.options.levels[0]}`,mergeAttributes(this.options.HTMLAttributes,t),0]},parseMarkdown:(e,t)=>t.createNode(`heading`,{level:e.depth||1},t.parseInline(e.tokens||[])),renderMarkdown:(e,t)=>{var S;let w=e.attrs?.level?parseInt(e.attrs.level,10):1,E=`#`.repeat(w);return e.content?`${E} ${t.renderChildren(e.content)}`:``},addCommands(){return{setHeading:e=>({commands:t})=>this.options.levels.includes(e.level)?t.setNode(this.name,e):!1,toggleHeading:e=>({commands:t})=>this.options.levels.includes(e.level)?t.toggleNode(this.name,`paragraph`,e):!1}},addKeyboardShortcuts(){return this.options.levels.reduce((e,t)=>({...e,[`Mod-Alt-${t}`]:()=>this.editor.commands.toggleHeading({level:t})}),{})},addInputRules(){return this.options.levels.map(e=>textblockTypeInputRule({find:RegExp(`^(#{${Math.min(...this.options.levels)},${e}})\\s$`),type:this.type,getAttributes:{level:e}}))}}),index_default$7=Heading,require_linkify=__commonJSMin$1((e=>{let t=`aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2`,S=`ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2`,w=`numeric`,E=`ascii`,D=`alpha`,O=`asciinumeric`,k=`alphanumeric`,j=`domain`,F=`emoji`,L=`scheme`,B=`slashscheme`,H=`whitespace`;function q(e,t){return e in t||(t[e]=[]),t[e]}function J(e,t,S){t[w]&&(t[O]=!0,t[k]=!0),t[E]&&(t[O]=!0,t[D]=!0),t[O]&&(t[k]=!0),t[D]&&(t[k]=!0),t[k]&&(t[j]=!0),t[F]&&(t[j]=!0);for(let w in t){let t=q(w,S);t.indexOf(e)<0&&t.push(e)}}function Y(e,t){let S={};for(let w in t)t[w].indexOf(e)>=0&&(S[w]=!0);return S}function ee(e=null){this.j={},this.jr=[],this.jd=null,this.t=e}ee.groups={},ee.prototype={accepts(){return!!this.t},go(e){let t=this,S=t.j[e];if(S)return S;for(let S=0;S<t.jr.length;S++){let w=t.jr[S][0],E=t.jr[S][1];if(E&&w.test(e))return E}return t.jd},has(e,t=!1){return t?e in this.j:!!this.go(e)},ta(e,t,S,w){for(let E=0;E<e.length;E++)this.tt(e[E],t,S,w)},tr(e,t,S,w){w||=ee.groups;let E;return t&&t.j?E=t:(E=new ee(t),S&&w&&J(t,S,w)),this.jr.push([e,E]),E},ts(e,t,S,w){let E=this,D=e.length;if(!D)return E;for(let t=0;t<D-1;t++)E=E.tt(e[t]);return E.tt(e[D-1],t,S,w)},tt(e,t,S,w){w||=ee.groups;let E=this;if(t&&t.j)return E.j[e]=t,t;let D=t,O,k=E.go(e);return k?(O=new ee,Object.assign(O.j,k.j),O.jr.push.apply(O.jr,k.jr),O.jd=k.jd,O.t=k.t):O=new ee,D&&(w&&(O.t&&typeof O.t==`string`?J(D,Object.assign(Y(O.t,w),S),w):S&&J(D,S,w)),O.t=D),E.j[e]=O,O}};let te=(e,t,S,w,E)=>e.ta(t,S,w,E),ne=(e,t,S,w,E)=>e.tr(t,S,w,E),ae=(e,t,S,w,E)=>e.ts(t,S,w,E),oe=(e,t,S,w,E)=>e.tt(t,S,w,E),se=`WORD`,ce=`UWORD`,ue=`ASCIINUMERICAL`,de=`ALPHANUMERICAL`,fe=`LOCALHOST`,me=`TLD`,ge=`UTLD`,_e=`SCHEME`,ve=`SLASH_SCHEME`,ye=`NUM`,Ce=`WS`,we=`NL`,Te=`OPENBRACE`,De=`CLOSEBRACE`,je=`OPENBRACKET`,Me=`CLOSEBRACKET`,Pe=`OPENPAREN`,Ie=`CLOSEPAREN`,Re=`OPENANGLEBRACKET`,ze=`CLOSEANGLEBRACKET`,Be=`FULLWIDTHLEFTPAREN`,Ve=`FULLWIDTHRIGHTPAREN`,Ue=`LEFTCORNERBRACKET`,We=`RIGHTCORNERBRACKET`,Ge=`LEFTWHITECORNERBRACKET`,Ke=`RIGHTWHITECORNERBRACKET`,Xe=`FULLWIDTHLESSTHAN`,$e=`FULLWIDTHGREATERTHAN`,nt=`AMPERSAND`,rt=`APOSTROPHE`,it=`ASTERISK`,at=`AT`,st=`BACKSLASH`,vt=`BACKTICK`,Tt=`CARET`,Et=`COLON`,Dt=`COMMA`,jt=`DOLLAR`,Mt=`DOT`,Ft=`EQUALS`,It=`EXCLAMATION`,Lt=`HYPHEN`,Rt=`PERCENT`,zt=`PIPE`,Bt=`PLUS`,Vt=`POUND`,Ht=`QUERY`,Ut=`QUOTE`,Wt=`FULLWIDTHMIDDLEDOT`,Kt=`SEMI`,$t=`SLASH`,en=`TILDE`,jr=`UNDERSCORE`,Mr=`EMOJI`,Fr=`SYM`;var Ir=Object.freeze({__proto__:null,ALPHANUMERICAL:de,AMPERSAND:nt,APOSTROPHE:rt,ASCIINUMERICAL:ue,ASTERISK:it,AT:`AT`,BACKSLASH:st,BACKTICK:vt,CARET:Tt,CLOSEANGLEBRACKET:ze,CLOSEBRACE:De,CLOSEBRACKET:Me,CLOSEPAREN:Ie,COLON:Et,COMMA:Dt,DOLLAR:jt,DOT:`DOT`,EMOJI:Mr,EQUALS:Ft,EXCLAMATION:It,FULLWIDTHGREATERTHAN:$e,FULLWIDTHLEFTPAREN:Be,FULLWIDTHLESSTHAN:Xe,FULLWIDTHMIDDLEDOT:Wt,FULLWIDTHRIGHTPAREN:Ve,HYPHEN:Lt,LEFTCORNERBRACKET:Ue,LEFTWHITECORNERBRACKET:Ge,LOCALHOST:fe,NL:`NL`,NUM:`NUM`,OPENANGLEBRACKET:Re,OPENBRACE:Te,OPENBRACKET:je,OPENPAREN:Pe,PERCENT:Rt,PIPE:zt,PLUS:Bt,POUND:Vt,QUERY:Ht,QUOTE:Ut,RIGHTCORNERBRACKET:We,RIGHTWHITECORNERBRACKET:Ke,SCHEME:_e,SEMI:Kt,SLASH:$t,SLASH_SCHEME:ve,SYM:`SYM`,TILDE:en,TLD:`TLD`,UNDERSCORE:jr,UTLD:ge,UWORD:ce,WORD:se,WS:`WS`});let Lr=/[a-z]/,zr=/\p{L}/u,Br=/\p{Emoji}/u,Vr=/\d/,Hr=/\s/,Ur=`\r`,Wr=`
208
+ `,parseMarkdown:()=>({type:`hardBreak`}),addCommands(){return{setHardBreak:()=>({commands:e,chain:t,state:S,editor:w})=>e.first([()=>e.exitCode(),()=>e.command(()=>{let{selection:e,storedMarks:E}=S;if(e.$from.parent.type.spec.isolating)return!1;let{keepMarks:D}=this.options,{splittableMarks:O}=w.extensionManager,k=E||e.$to.parentOffset&&e.$from.marks();return t().insertContent({type:this.name}).command(({tr:e,dispatch:t})=>{if(t&&k&&D){let t=k.filter(e=>O.includes(e.type.name));e.ensureMarks(t)}return!0}).run()})])}},addKeyboardShortcuts(){return{"Mod-Enter":()=>this.editor.commands.setHardBreak(),"Shift-Enter":()=>this.editor.commands.setHardBreak()}}}),index_default$8=HardBreak,Heading=Node3.create({name:`heading`,addOptions(){return{levels:[1,2,3,4,5,6],HTMLAttributes:{}}},content:`inline*`,group:`block`,defining:!0,addAttributes(){return{level:{default:1,rendered:!1}}},parseHTML(){return this.options.levels.map(e=>({tag:`h${e}`,attrs:{level:e}}))},renderHTML({node:e,HTMLAttributes:t}){return[`h${this.options.levels.includes(e.attrs.level)?e.attrs.level:this.options.levels[0]}`,mergeAttributes(this.options.HTMLAttributes,t),0]},parseMarkdown:(e,t)=>t.createNode(`heading`,{level:e.depth||1},t.parseInline(e.tokens||[])),renderMarkdown:(e,t)=>{var S;let w=e.attrs?.level?parseInt(e.attrs.level,10):1,E=`#`.repeat(w);return e.content?`${E} ${t.renderChildren(e.content)}`:``},addCommands(){return{setHeading:e=>({commands:t})=>this.options.levels.includes(e.level)?t.setNode(this.name,e):!1,toggleHeading:e=>({commands:t})=>this.options.levels.includes(e.level)?t.toggleNode(this.name,`paragraph`,e):!1}},addKeyboardShortcuts(){return this.options.levels.reduce((e,t)=>({...e,[`Mod-Alt-${t}`]:()=>this.editor.commands.toggleHeading({level:t})}),{})},addInputRules(){return this.options.levels.map(e=>textblockTypeInputRule({find:RegExp(`^(#{${Math.min(...this.options.levels)},${e}})\\s$`),type:this.type,getAttributes:{level:e}}))}}),index_default$7=Heading,inputRegex$5=/(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/,Image=Node3.create({name:`image`,addOptions(){return{inline:!1,allowBase64:!1,HTMLAttributes:{},resize:!1}},inline(){return this.options.inline},group(){return this.options.inline?`inline`:`block`},draggable:!0,addAttributes(){return{src:{default:null},alt:{default:null},title:{default:null},width:{default:null},height:{default:null}}},parseHTML(){return[{tag:this.options.allowBase64?`img[src]`:`img[src]:not([src^="data:"])`}]},renderHTML({HTMLAttributes:e}){return[`img`,mergeAttributes(this.options.HTMLAttributes,e)]},parseMarkdown:(e,t)=>t.createNode(`image`,{src:e.href,title:e.title,alt:e.text}),renderMarkdown:e=>{var t,S,w,E,D,O;let k=e.attrs?.src??``,j=e.attrs?.alt??``,F=e.attrs?.title??``;return F?`![${j}](${k} "${F}")`:`![${j}](${k})`},addNodeView(){if(!this.options.resize||!this.options.resize.enabled||typeof document>`u`)return null;let{directions:e,minWidth:t,minHeight:S,alwaysPreserveAspectRatio:w}=this.options.resize;return({node:E,getPos:D,HTMLAttributes:O,editor:k})=>{let j=document.createElement(`img`);Object.entries(O).forEach(([e,t])=>{if(t!=null)switch(e){case`width`:case`height`:break;default:j.setAttribute(e,t);break}}),j.src=O.src;let F=new ResizableNodeView({element:j,editor:k,node:E,getPos:D,onResize:(e,t)=>{j.style.width=`${e}px`,j.style.height=`${t}px`},onCommit:(e,t)=>{let S=D();S!==void 0&&this.editor.chain().setNodeSelection(S).updateAttributes(this.name,{width:e,height:t}).run()},onUpdate:(e,t,S)=>e.type===E.type,options:{directions:e,min:{width:t,height:S},preserveAspectRatio:w===!0}}),L=F.dom;return L.style.visibility=`hidden`,L.style.pointerEvents=`none`,j.onload=()=>{L.style.visibility=``,L.style.pointerEvents=``},F}},addCommands(){return{setImage:e=>({commands:t})=>t.insertContent({type:this.name,attrs:e})}},addInputRules(){return[nodeInputRule({find:inputRegex$5,type:this.type,getAttributes:e=>{let[,,t,S,w]=e;return{src:S,alt:t,title:w}}})]}}),index_default$6=Image,require_linkify=__commonJSMin$1((e=>{let t=`aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2`,S=`ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2`,w=`numeric`,E=`ascii`,D=`alpha`,O=`asciinumeric`,k=`alphanumeric`,j=`domain`,F=`emoji`,L=`scheme`,B=`slashscheme`,H=`whitespace`;function q(e,t){return e in t||(t[e]=[]),t[e]}function J(e,t,S){t[w]&&(t[O]=!0,t[k]=!0),t[E]&&(t[O]=!0,t[D]=!0),t[O]&&(t[k]=!0),t[D]&&(t[k]=!0),t[k]&&(t[j]=!0),t[F]&&(t[j]=!0);for(let w in t){let t=q(w,S);t.indexOf(e)<0&&t.push(e)}}function Y(e,t){let S={};for(let w in t)t[w].indexOf(e)>=0&&(S[w]=!0);return S}function ee(e=null){this.j={},this.jr=[],this.jd=null,this.t=e}ee.groups={},ee.prototype={accepts(){return!!this.t},go(e){let t=this,S=t.j[e];if(S)return S;for(let S=0;S<t.jr.length;S++){let w=t.jr[S][0],E=t.jr[S][1];if(E&&w.test(e))return E}return t.jd},has(e,t=!1){return t?e in this.j:!!this.go(e)},ta(e,t,S,w){for(let E=0;E<e.length;E++)this.tt(e[E],t,S,w)},tr(e,t,S,w){w||=ee.groups;let E;return t&&t.j?E=t:(E=new ee(t),S&&w&&J(t,S,w)),this.jr.push([e,E]),E},ts(e,t,S,w){let E=this,D=e.length;if(!D)return E;for(let t=0;t<D-1;t++)E=E.tt(e[t]);return E.tt(e[D-1],t,S,w)},tt(e,t,S,w){w||=ee.groups;let E=this;if(t&&t.j)return E.j[e]=t,t;let D=t,O,k=E.go(e);return k?(O=new ee,Object.assign(O.j,k.j),O.jr.push.apply(O.jr,k.jr),O.jd=k.jd,O.t=k.t):O=new ee,D&&(w&&(O.t&&typeof O.t==`string`?J(D,Object.assign(Y(O.t,w),S),w):S&&J(D,S,w)),O.t=D),E.j[e]=O,O}};let te=(e,t,S,w,E)=>e.ta(t,S,w,E),ne=(e,t,S,w,E)=>e.tr(t,S,w,E),ae=(e,t,S,w,E)=>e.ts(t,S,w,E),oe=(e,t,S,w,E)=>e.tt(t,S,w,E),se=`WORD`,ce=`UWORD`,ue=`ASCIINUMERICAL`,de=`ALPHANUMERICAL`,fe=`LOCALHOST`,me=`TLD`,ge=`UTLD`,_e=`SCHEME`,ve=`SLASH_SCHEME`,ye=`NUM`,Ce=`WS`,we=`NL`,Te=`OPENBRACE`,De=`CLOSEBRACE`,je=`OPENBRACKET`,Me=`CLOSEBRACKET`,Pe=`OPENPAREN`,Ie=`CLOSEPAREN`,Re=`OPENANGLEBRACKET`,ze=`CLOSEANGLEBRACKET`,Be=`FULLWIDTHLEFTPAREN`,Ve=`FULLWIDTHRIGHTPAREN`,Ue=`LEFTCORNERBRACKET`,We=`RIGHTCORNERBRACKET`,Ge=`LEFTWHITECORNERBRACKET`,Ke=`RIGHTWHITECORNERBRACKET`,Xe=`FULLWIDTHLESSTHAN`,$e=`FULLWIDTHGREATERTHAN`,nt=`AMPERSAND`,rt=`APOSTROPHE`,it=`ASTERISK`,at=`AT`,st=`BACKSLASH`,vt=`BACKTICK`,Tt=`CARET`,Et=`COLON`,Dt=`COMMA`,jt=`DOLLAR`,Mt=`DOT`,Ft=`EQUALS`,It=`EXCLAMATION`,Lt=`HYPHEN`,Rt=`PERCENT`,zt=`PIPE`,Bt=`PLUS`,Vt=`POUND`,Ht=`QUERY`,Ut=`QUOTE`,Wt=`FULLWIDTHMIDDLEDOT`,Kt=`SEMI`,$t=`SLASH`,en=`TILDE`,jr=`UNDERSCORE`,Mr=`EMOJI`,Fr=`SYM`;var Ir=Object.freeze({__proto__:null,ALPHANUMERICAL:de,AMPERSAND:nt,APOSTROPHE:rt,ASCIINUMERICAL:ue,ASTERISK:it,AT:`AT`,BACKSLASH:st,BACKTICK:vt,CARET:Tt,CLOSEANGLEBRACKET:ze,CLOSEBRACE:De,CLOSEBRACKET:Me,CLOSEPAREN:Ie,COLON:Et,COMMA:Dt,DOLLAR:jt,DOT:`DOT`,EMOJI:Mr,EQUALS:Ft,EXCLAMATION:It,FULLWIDTHGREATERTHAN:$e,FULLWIDTHLEFTPAREN:Be,FULLWIDTHLESSTHAN:Xe,FULLWIDTHMIDDLEDOT:Wt,FULLWIDTHRIGHTPAREN:Ve,HYPHEN:Lt,LEFTCORNERBRACKET:Ue,LEFTWHITECORNERBRACKET:Ge,LOCALHOST:fe,NL:`NL`,NUM:`NUM`,OPENANGLEBRACKET:Re,OPENBRACE:Te,OPENBRACKET:je,OPENPAREN:Pe,PERCENT:Rt,PIPE:zt,PLUS:Bt,POUND:Vt,QUERY:Ht,QUOTE:Ut,RIGHTCORNERBRACKET:We,RIGHTWHITECORNERBRACKET:Ke,SCHEME:_e,SEMI:Kt,SLASH:$t,SLASH_SCHEME:ve,SYM:`SYM`,TILDE:en,TLD:`TLD`,UNDERSCORE:jr,UTLD:ge,UWORD:ce,WORD:se,WS:`WS`});let Lr=/[a-z]/,zr=/\p{L}/u,Br=/\p{Emoji}/u,Vr=/\d/,Hr=/\s/,Ur=`\r`,Wr=`
209
209
  `,Gr=`️`,Kr=`‍`,qr=``,Jr=null,Yr=null;function Xr(e=[]){let t={};ee.groups=t;let S=new ee;Jr??=Hi(`aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2`),Yr??=Hi(`ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2`),oe(S,`'`,rt),oe(S,`{`,Te),oe(S,`}`,De),oe(S,`[`,je),oe(S,`]`,Me),oe(S,`(`,Pe),oe(S,`)`,Ie),oe(S,`<`,Re),oe(S,`>`,ze),oe(S,`(`,Be),oe(S,`)`,Ve),oe(S,`「`,Ue),oe(S,`」`,We),oe(S,`『`,Ge),oe(S,`』`,Ke),oe(S,`<`,Xe),oe(S,`>`,$e),oe(S,`&`,nt),oe(S,`*`,it),oe(S,`@`,`AT`),oe(S,"`",vt),oe(S,`^`,Tt),oe(S,`:`,Et),oe(S,`,`,Dt),oe(S,`$`,jt),oe(S,`.`,`DOT`),oe(S,`=`,Ft),oe(S,`!`,It),oe(S,`-`,Lt),oe(S,`%`,Rt),oe(S,`|`,zt),oe(S,`+`,Bt),oe(S,`#`,Vt),oe(S,`?`,Ht),oe(S,`"`,Ut),oe(S,`/`,$t),oe(S,`;`,Kt),oe(S,`~`,en),oe(S,`_`,jr),oe(S,`\\`,st),oe(S,`・`,Wt);let L=ne(S,Vr,`NUM`,{[w]:!0});ne(L,Vr,L);let B=ne(L,Lr,ue,{[O]:!0}),q=ne(L,zr,de,{[k]:!0}),Y=ne(S,Lr,se,{[E]:!0});ne(Y,Vr,B),ne(Y,Lr,Y),ne(B,Vr,B),ne(B,Lr,B);let te=ne(S,zr,ce,{[D]:!0});ne(te,Lr),ne(te,Vr,q),ne(te,zr,te),ne(q,Vr,q),ne(q,Lr),ne(q,zr,q);let me=oe(S,`
210
210
  `,`NL`,{[H]:!0}),ye=oe(S,`\r`,`WS`,{[H]:!0}),Ce=ne(S,Hr,`WS`,{[H]:!0});oe(S,``,Ce),oe(ye,`
211
211
  `,me),oe(ye,``,Ce),ne(ye,Hr,Ce),oe(Ce,`\r`),oe(Ce,`
212
212
  `),ne(Ce,Hr,Ce),oe(Ce,``,Ce);let we=ne(S,Br,Mr,{[F]:!0});oe(we,`#`),ne(we,Br,we),oe(we,`️`,we);let at=oe(we,`‍`);oe(at,`#`),ne(at,Br,we);let Mt=[[Lr,Y],[Vr,B]],Fr=[[Lr,null],[zr,te],[Vr,q]];for(let e=0;e<Jr.length;e++)ji(S,Jr[e],`TLD`,se,Mt);for(let e=0;e<Yr.length;e++)ji(S,Yr[e],ge,ce,Fr);J(`TLD`,{tld:!0,ascii:!0},t),J(ge,{utld:!0,alpha:!0},t),ji(S,`file`,_e,se,Mt),ji(S,`mailto`,_e,se,Mt),ji(S,`http`,ve,se,Mt),ji(S,`https`,ve,se,Mt),ji(S,`ftp`,ve,se,Mt),ji(S,`ftps`,ve,se,Mt),J(_e,{scheme:!0,ascii:!0},t),J(ve,{slashscheme:!0,ascii:!0},t),e=e.sort((e,t)=>e[0]>t[0]?1:-1);for(let t=0;t<e.length;t++){let D=e[t][0],k=e[t][1]?{scheme:!0}:{slashscheme:!0};D.indexOf(`-`)>=0?k[j]=!0:Lr.test(D)?Vr.test(D)?k[O]=!0:k[E]=!0:k[w]=!0,ae(S,D,D,k)}return ae(S,`localhost`,fe,{ascii:!0}),S.jd=new ee(`SYM`),{start:S,tokens:Object.assign({groups:t},Ir)}}function Zr(e,t){let S=Qr(t.replace(/[A-Z]/g,e=>e.toLowerCase())),w=S.length,E=[],D=0,O=0;for(;O<w;){let k=e,j=null,F=0,L=null,B=-1,H=-1;for(;O<w&&(j=k.go(S[O]));)k=j,k.accepts()?(B=0,H=0,L=k):B>=0&&(B+=S[O].length,H++),F+=S[O].length,D+=S[O].length,O++;D-=B,O-=H,F-=B,E.push({t:L.t,v:t.slice(D-F,D),s:D-F,e:D})}return E}function Qr(e){let t=[],S=e.length,w=0;for(;w<S;){let E=e.charCodeAt(w),D,O=E<55296||E>56319||w+1===S||(D=e.charCodeAt(w+1))<56320||D>57343?e[w]:e.slice(w,w+2);t.push(O),w+=O.length}return t}function ji(e,t,S,w,E){let D,O=t.length;for(let S=0;S<O-1;S++){let O=t[S];e.j[O]?D=e.j[O]:(D=new ee(w),D.jr=E.slice(),e.j[O]=D),e=D}return D=new ee(S),D.jr=E.slice(),e.j[t[O-1]]=D,D}function Hi(e){let t=[],S=[],w=0,E=`0123456789`;for(;w<e.length;){let E=0;for(;`0123456789`.indexOf(e[w+E])>=0;)E++;if(E>0){t.push(S.join(``));for(let t=parseInt(e.substring(w,w+E),10);t>0;t--)S.pop();w+=E}else S.push(e[w]),w++}return t}let Ui={defaultProtocol:`http`,events:null,format:Ki,formatHref:Ki,nl2br:!1,tagName:`a`,target:null,rel:null,validate:!0,truncate:1/0,className:null,attributes:null,ignoreTags:[],render:null};function Gi(e,t=null){let S=Object.assign({},Ui);e&&(S=Object.assign(S,e instanceof Gi?e.o:e));let w=S.ignoreTags,E=[];for(let e=0;e<w.length;e++)E.push(w[e].toUpperCase());this.o=S,t&&(this.defaultRender=t),this.ignoreTags=E}Gi.prototype={o:Ui,ignoreTags:[],defaultRender(e){return e},check(e){return this.get(`validate`,e.toString(),e)},get(e,t,S){let w=t!=null,E=this.o[e];return E&&(typeof E==`object`?(E=S.t in E?E[S.t]:Ui[e],typeof E==`function`&&w&&(E=E(t,S))):typeof E==`function`&&w&&(E=E(t,S.t,S)),E)},getObj(e,t,S){let w=this.o[e];return typeof w==`function`&&t!=null&&(w=w(t,S.t,S)),w},render(e){let t=e.render(this);return(this.get(`render`,null,e)||this.defaultRender)(t,e.t,e)}};function Ki(e){return e}function Yi(e,t){this.t=`token`,this.v=e,this.tk=t}Yi.prototype={isLink:!1,toString(){return this.v},toHref(e){return this.toString()},toFormattedString(e){let t=this.toString(),S=e.get(`truncate`,t,this),w=e.get(`format`,t,this);return S&&w.length>S?w.substring(0,S)+`…`:w},toFormattedHref(e){return e.get(`formatHref`,this.toHref(e.get(`defaultProtocol`)),this)},startIndex(){return this.tk[0].s},endIndex(){return this.tk[this.tk.length-1].e},toObject(e=Ui.defaultProtocol){return{type:this.t,value:this.toString(),isLink:this.isLink,href:this.toHref(e),start:this.startIndex(),end:this.endIndex()}},toFormattedObject(e){return{type:this.t,value:this.toFormattedString(e),isLink:this.isLink,href:this.toFormattedHref(e),start:this.startIndex(),end:this.endIndex()}},validate(e){return e.get(`validate`,this.toString(),this)},render(e){let t=this,S=this.toHref(e.get(`defaultProtocol`)),w=e.get(`formatHref`,S,this),E=e.get(`tagName`,S,t),D=this.toFormattedString(e),O={},k=e.get(`className`,S,t),j=e.get(`target`,S,t),F=e.get(`rel`,S,t),L=e.getObj(`attributes`,S,t),B=e.getObj(`events`,S,t);return O.href=w,k&&(O.class=k),j&&(O.target=j),F&&(O.rel=F),L&&Object.assign(O,L),{tagName:E,attributes:O,content:D,eventListeners:B}}};function Xi(e,t){class S extends Yi{constructor(t,S){super(t,S),this.t=e}}for(let e in t)S.prototype[e]=t[e];return S.t=e,S}let Zi=Xi(`email`,{isLink:!0,toHref(){return`mailto:`+this.toString()}}),ka=Xi(`text`),_s=Xi(`nl`),xs=Xi(`url`,{isLink:!0,toHref(e=Ui.defaultProtocol){return this.hasProtocol()?this.v:`${e}://${this.v}`},hasProtocol(){let e=this.tk;return e.length>=2&&e[0].t!==fe&&e[1].t===Et}}),Cs=e=>new ee(e);function Ts({groups:e}){let t=e.domain.concat([nt,it,`AT`,st,vt,Tt,jt,Ft,Lt,`NUM`,Rt,zt,Bt,Vt,$t,`SYM`,en,jr]),S=[rt,Et,Dt,`DOT`,It,Rt,Ht,Ut,Kt,Re,ze,Te,De,Me,je,Pe,Ie,Be,Ve,Ue,We,Ge,Ke,Xe,$e],w=[nt,rt,it,st,vt,Tt,jt,Ft,Lt,Te,De,Rt,zt,Bt,Vt,Ht,$t,`SYM`,en,jr],E=Cs(),D=oe(E,en);te(D,w,D),te(D,e.domain,D);let O=Cs(),k=Cs(),j=Cs();te(E,e.domain,O),te(E,e.scheme,k),te(E,e.slashscheme,j),te(O,w,D),te(O,e.domain,O);let F=oe(O,`AT`);oe(D,`AT`,F),oe(k,`AT`,F),oe(j,`AT`,F);let L=oe(D,`DOT`);te(L,w,D),te(L,e.domain,D);let B=Cs();te(F,e.domain,B),te(B,e.domain,B);let H=oe(B,`DOT`);te(H,e.domain,B);let q=Cs(Zi);te(H,e.tld,q),te(H,e.utld,q),oe(F,fe,q);let J=oe(B,Lt);oe(J,Lt,J),te(J,e.domain,B),te(q,e.domain,B),oe(q,`DOT`,H),oe(q,Lt,J),te(oe(q,Et),e.numeric,Zi);let Y=oe(O,Lt),ee=oe(O,`DOT`);oe(Y,Lt,Y),te(Y,e.domain,O),te(ee,w,D),te(ee,e.domain,O);let ne=Cs(xs);te(ee,e.tld,ne),te(ee,e.utld,ne),te(ne,e.domain,O),te(ne,w,D),oe(ne,`DOT`,ee),oe(ne,Lt,Y),oe(ne,`AT`,F);let ae=oe(ne,Et),se=Cs(xs);te(ae,e.numeric,se);let ce=Cs(xs),ue=Cs();te(ce,t,ce),te(ce,S,ue),te(ue,t,ce),te(ue,S,ue),oe(ne,$t,ce),oe(se,$t,ce);let de=oe(k,Et),me=oe(oe(oe(j,Et),$t),$t);te(k,e.domain,O),oe(k,`DOT`,ee),oe(k,Lt,Y),te(j,e.domain,O),oe(j,`DOT`,ee),oe(j,Lt,Y),te(de,e.domain,ce),oe(de,$t,ce),oe(de,Ht,ce),te(me,e.domain,ce),te(me,t,ce),oe(me,$t,ce);let ge=[[Te,De],[je,Me],[Pe,Ie],[Re,ze],[Be,Ve],[Ue,We],[Ge,Ke],[Xe,$e]];for(let e=0;e<ge.length;e++){let[w,E]=ge[e],D=oe(ce,w);oe(ue,w,D),oe(D,E,ce);let O=Cs(xs);te(D,t,O);let k=Cs();te(D,S),te(O,t,O),te(O,S,k),te(k,t,O),te(k,S,k),oe(O,E,ce),oe(k,E,ce)}return oe(E,fe,ne),oe(E,`NL`,_s),{start:E,tokens:Ir}}function Ds(e,t,S){let w=S.length,E=0,D=[],O=[];for(;E<w;){let k=e,j=null,F=null,L=0,B=null,H=-1;for(;E<w&&!(j=k.go(S[E].t));)O.push(S[E++]);for(;E<w&&(F=j||k.go(S[E].t));)j=null,k=F,k.accepts()?(H=0,B=k):H>=0&&H++,E++,L++;if(H<0)E-=L,E<w&&(O.push(S[E]),E++);else{O.length>0&&(D.push(Os(ka,t,O)),O=[]),E-=H,L-=H;let e=B.t,w=S.slice(E-L,E);D.push(Os(e,t,w))}}return O.length>0&&D.push(Os(ka,t,O)),D}function Os(e,t,S){let w=S[0].s,E=S[S.length-1].e;return new e(t.slice(w,E),S)}let ks=typeof console<`u`&&console&&console.warn||(()=>{}),As=`until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.`,Ns={scanner:null,parser:null,tokenQueue:[],pluginQueue:[],customSchemes:[],initialized:!1};function Ps(){return ee.groups={},Ns.scanner=null,Ns.parser=null,Ns.tokenQueue=[],Ns.pluginQueue=[],Ns.customSchemes=[],Ns.initialized=!1,Ns}function Is(e,t=!1){if(Ns.initialized&&ks(`linkifyjs: already initialized - will not register custom scheme "${e}" until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.`),!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(e))throw Error(`linkifyjs: incorrect scheme format.
213
213
  1. Must only contain digits, lowercase ASCII letters or "-"
214
214
  2. Cannot start or end with "-"
215
- 3. "-" cannot repeat`);Ns.customSchemes.push([e,t])}function Rs(){Ns.scanner=Xr(Ns.customSchemes);for(let e=0;e<Ns.tokenQueue.length;e++)Ns.tokenQueue[e][1]({scanner:Ns.scanner});Ns.parser=Ts(Ns.scanner.tokens);for(let e=0;e<Ns.pluginQueue.length;e++)Ns.pluginQueue[e][1]({scanner:Ns.scanner,parser:Ns.parser});return Ns.initialized=!0,Ns}function $s(e){return Ns.initialized||Rs(),Ds(Ns.parser.start,e,Zr(Ns.scanner.start,e))}$s.scan=Zr;function ec(e,t=null,S=null){if(t&&typeof t==`object`){if(S)throw Error(`linkifyjs: Invalid link type ${t}; must be a string`);S=t,t=null}let w=new Gi(S),E=$s(e),D=[];for(let e=0;e<E.length;e++){let S=E[e];S.isLink&&(!t||S.t===t)&&w.check(S)&&D.push(S.toFormattedObject(w))}return D}e.find=ec,e.registerCustomProtocol=Is,e.reset=Ps,e.tokenize=$s})),import_linkify=require_linkify(),UNICODE_WHITESPACE_PATTERN=`[\0- \xA0 ᠎ -\u2029  ]`,UNICODE_WHITESPACE_REGEX=new RegExp(UNICODE_WHITESPACE_PATTERN),UNICODE_WHITESPACE_REGEX_END=RegExp(`${UNICODE_WHITESPACE_PATTERN}$`),UNICODE_WHITESPACE_REGEX_GLOBAL=new RegExp(UNICODE_WHITESPACE_PATTERN,`g`);function isValidLinkStructure(e){return e.length===1?e[0].isLink:e.length===3&&e[1].isLink?[`()`,`[]`].includes(e[0].value+e[2].value):!1}function autolink$1(e){return new Plugin({key:new PluginKey(`autolink`),appendTransaction:(t,S,w)=>{let E=t.some(e=>e.docChanged)&&!S.doc.eq(w.doc),D=t.some(e=>e.getMeta(`preventAutolink`));if(!E||D)return;let{tr:O}=w;if(getChangedRanges(combineTransactionSteps(S.doc,[...t])).forEach(({newRange:t})=>{let S=findChildrenInRange(w.doc,t,e=>e.isTextblock),E,D;if(S.length>1)E=S[0],D=w.doc.textBetween(E.pos,E.pos+E.node.nodeSize,void 0,` `);else if(S.length){let e=w.doc.textBetween(t.from,t.to,` `,` `);if(!UNICODE_WHITESPACE_REGEX_END.test(e))return;E=S[0],D=w.doc.textBetween(E.pos,t.to,void 0,` `)}if(E&&D){let t=D.split(UNICODE_WHITESPACE_REGEX).filter(Boolean);if(t.length<=0)return!1;let S=t[t.length-1],k=E.pos+D.lastIndexOf(S);if(!S)return!1;let j=(0,import_linkify.tokenize)(S).map(t=>t.toObject(e.defaultProtocol));if(!isValidLinkStructure(j))return!1;j.filter(e=>e.isLink).map(e=>({...e,from:k+e.start+1,to:k+e.end+1})).filter(e=>w.schema.marks.code?!w.doc.rangeHasMark(e.from,e.to,w.schema.marks.code):!0).filter(t=>e.validate(t.value)).filter(t=>e.shouldAutoLink(t.value)).forEach(t=>{getMarksBetween(t.from,t.to,w.doc).some(t=>t.mark.type===e.type)||O.addMark(t.from,t.to,e.type.create({href:t.href}))})}}),O.steps.length)return O}})}function clickHandler(e){return new Plugin({key:new PluginKey(`handleClickLink`),props:{handleClick:(t,S,w)=>{var E,D;if(w.button!==0||!t.editable)return!1;let O=null;if(w.target instanceof HTMLAnchorElement)O=w.target;else{let t=w.target;if(!t)return!1;let S=e.editor.view.dom;O=t.closest(`a`),O&&!S.contains(O)&&(O=null)}if(!O)return!1;let k=!1;if(e.enableClickSelection&&(k=e.editor.commands.extendMarkRange(e.type.name)),e.openOnClick){let S=getAttributes(t.state,e.type.name),w=O.href??S.href,E=O.target??S.target;w&&(window.open(w,E),k=!0)}return k}}})}function pasteHandler(e){return new Plugin({key:new PluginKey(`handlePasteLink`),props:{handlePaste:(t,S,w)=>{let{shouldAutoLink:E}=e,{state:D}=t,{selection:O}=D,{empty:k}=O;if(k)return!1;let j=``;w.content.forEach(e=>{j+=e.textContent});let F=(0,import_linkify.find)(j,{defaultProtocol:e.defaultProtocol}).find(e=>e.isLink&&e.value===j);return!j||!F||E!==void 0&&!E(F.value)?!1:e.editor.commands.setMark(e.type,{href:F.href})}}})}function isAllowedUri(e,t){let S=[`http`,`https`,`ftp`,`ftps`,`mailto`,`tel`,`callto`,`sms`,`cid`,`xmpp`];return t&&t.forEach(e=>{let t=typeof e==`string`?e:e.scheme;t&&S.push(t)}),!e||e.replace(UNICODE_WHITESPACE_REGEX_GLOBAL,``).match(RegExp(`^(?:(?:${S.join(`|`)}):|[^a-z]|[a-z0-9+.-]+(?:[^a-z+.-:]|$))`,`i`))}var Link=Mark.create({name:`link`,priority:1e3,keepOnSplit:!1,exitable:!0,onCreate(){this.options.validate&&!this.options.shouldAutoLink&&(this.options.shouldAutoLink=this.options.validate,console.warn("The `validate` option is deprecated. Rename to the `shouldAutoLink` option instead.")),this.options.protocols.forEach(e=>{if(typeof e==`string`){(0,import_linkify.registerCustomProtocol)(e);return}(0,import_linkify.registerCustomProtocol)(e.scheme,e.optionalSlashes)})},onDestroy(){(0,import_linkify.reset)()},inclusive(){return this.options.autolink},addOptions(){return{openOnClick:!0,enableClickSelection:!1,linkOnPaste:!0,autolink:!0,protocols:[],defaultProtocol:`http`,HTMLAttributes:{target:`_blank`,rel:`noopener noreferrer nofollow`,class:null},isAllowedUri:(e,t)=>!!isAllowedUri(e,t.protocols),validate:e=>!!e,shouldAutoLink:e=>{let t=/^[a-z][a-z0-9+.-]*:\/\//i.test(e),S=/^[a-z][a-z0-9+.-]*:/i.test(e);if(t||S&&!e.includes(`@`))return!0;let w=(e.includes(`@`)?e.split(`@`).pop():e).split(/[/?#:]/)[0];return!(/^\d{1,3}(\.\d{1,3}){3}$/.test(w)||!/\./.test(w))}}},addAttributes(){return{href:{default:null,parseHTML(e){return e.getAttribute(`href`)}},target:{default:this.options.HTMLAttributes.target},rel:{default:this.options.HTMLAttributes.rel},class:{default:this.options.HTMLAttributes.class},title:{default:null}}},parseHTML(){return[{tag:`a[href]`,getAttrs:e=>{let t=e.getAttribute(`href`);return!t||!this.options.isAllowedUri(t,{defaultValidate:e=>!!isAllowedUri(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?!1:null}}]},renderHTML({HTMLAttributes:e}){return this.options.isAllowedUri(e.href,{defaultValidate:e=>!!isAllowedUri(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?[`a`,mergeAttributes(this.options.HTMLAttributes,e),0]:[`a`,mergeAttributes(this.options.HTMLAttributes,{...e,href:``}),0]},markdownTokenName:`link`,parseMarkdown:(e,t)=>t.applyMark(`link`,t.parseInline(e.tokens||[]),{href:e.href,title:e.title||null}),renderMarkdown:(e,t)=>{var S,w,E,D;let O=e.attrs?.href??``,k=e.attrs?.title??``,j=t.renderChildren(e);return k?`[${j}](${O} "${k}")`:`[${j}](${O})`},addCommands(){return{setLink:e=>({chain:t})=>{let{href:S}=e;return this.options.isAllowedUri(S,{defaultValidate:e=>!!isAllowedUri(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?t().setMark(this.name,e).setMeta(`preventAutolink`,!0).run():!1},toggleLink:e=>({chain:t})=>{let{href:S}=e||{};return S&&!this.options.isAllowedUri(S,{defaultValidate:e=>!!isAllowedUri(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?!1:t().toggleMark(this.name,e,{extendEmptyMarkRange:!0}).setMeta(`preventAutolink`,!0).run()},unsetLink:()=>({chain:e})=>e().unsetMark(this.name,{extendEmptyMarkRange:!0}).setMeta(`preventAutolink`,!0).run()}},addPasteRules(){return[markPasteRule({find:e=>{let t=[];if(e){let{protocols:S,defaultProtocol:w}=this.options,E=(0,import_linkify.find)(e).filter(e=>e.isLink&&this.options.isAllowedUri(e.value,{defaultValidate:e=>!!isAllowedUri(e,S),protocols:S,defaultProtocol:w}));E.length&&E.forEach(e=>{this.options.shouldAutoLink(e.value)&&t.push({text:e.value,data:{href:e.href},index:e.start})})}return t},type:this.type,getAttributes:e=>{var t;return{href:e.data?.href}}})]},addProseMirrorPlugins(){let e=[],{protocols:t,defaultProtocol:S}=this.options;return this.options.autolink&&e.push(autolink$1({type:this.type,defaultProtocol:this.options.defaultProtocol,validate:e=>this.options.isAllowedUri(e,{defaultValidate:e=>!!isAllowedUri(e,t),protocols:t,defaultProtocol:S}),shouldAutoLink:this.options.shouldAutoLink})),e.push(clickHandler({type:this.type,editor:this.editor,openOnClick:this.options.openOnClick===`whenNotEditable`?!0:this.options.openOnClick,enableClickSelection:this.options.enableClickSelection})),this.options.linkOnPaste&&e.push(pasteHandler({editor:this.editor,defaultProtocol:this.options.defaultProtocol,type:this.type,shouldAutoLink:this.options.shouldAutoLink})),e}}),index_default$6=Link,inputRegex$5=/(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))$/,pasteRegex$2=/(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))/g,Highlight=Mark.create({name:`highlight`,addOptions(){return{multicolor:!1,HTMLAttributes:{}}},addAttributes(){return this.options.multicolor?{color:{default:null,parseHTML:e=>e.getAttribute(`data-color`)||e.style.backgroundColor,renderHTML:e=>e.color?{"data-color":e.color,style:`background-color: ${e.color}; color: inherit`}:{}}}:{}},parseHTML(){return[{tag:`mark`}]},renderHTML({HTMLAttributes:e}){return[`mark`,mergeAttributes(this.options.HTMLAttributes,e),0]},renderMarkdown:(e,t)=>`==${t.renderChildren(e)}==`,parseMarkdown:(e,t)=>t.applyMark(`highlight`,t.parseInline(e.tokens||[])),markdownTokenizer:{name:`highlight`,level:`inline`,start:e=>e.indexOf(`==`),tokenize(e,t,S){let w=/^(==)([^=]+)(==)/.exec(e);if(w){let e=w[2].trim(),t=S.inlineTokens(e);return{type:`highlight`,raw:w[0],text:e,tokens:t}}}},addCommands(){return{setHighlight:e=>({commands:t})=>t.setMark(this.name,e),toggleHighlight:e=>({commands:t})=>t.toggleMark(this.name,e),unsetHighlight:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-h":()=>this.editor.commands.toggleHighlight()}},addInputRules(){return[markInputRule({find:inputRegex$5,type:this.type})]},addPasteRules(){return[markPasteRule({find:pasteRegex$2,type:this.type})]}}),index_default$5=Highlight;let readFromCache,addToCache;if(typeof WeakMap<`u`){let e=new WeakMap;readFromCache=t=>e.get(t),addToCache=(t,S)=>(e.set(t,S),S)}else{let e=[],t=10,S=0;readFromCache=t=>{for(let S=0;S<e.length;S+=2)if(e[S]==t)return e[S+1]},addToCache=(t,w)=>(S==10&&(S=0),e[S++]=t,e[S++]=w)}var TableMap=class{constructor(e,t,S,w){this.width=e,this.height=t,this.map=S,this.problems=w}findCell(e){for(let t=0;t<this.map.length;t++){let S=this.map[t];if(S!=e)continue;let w=t%this.width,E=t/this.width|0,D=w+1,O=E+1;for(let e=1;D<this.width&&this.map[t+e]==S;e++)D++;for(let e=1;O<this.height&&this.map[t+this.width*e]==S;e++)O++;return{left:w,top:E,right:D,bottom:O}}throw RangeError(`No cell with offset ${e} found`)}colCount(e){for(let t=0;t<this.map.length;t++)if(this.map[t]==e)return t%this.width;throw RangeError(`No cell with offset ${e} found`)}nextCell(e,t,S){let{left:w,right:E,top:D,bottom:O}=this.findCell(e);return t==`horiz`?(S<0?w==0:E==this.width)?null:this.map[D*this.width+(S<0?w-1:E)]:(S<0?D==0:O==this.height)?null:this.map[w+this.width*(S<0?D-1:O)]}rectBetween(e,t){let{left:S,right:w,top:E,bottom:D}=this.findCell(e),{left:O,right:k,top:j,bottom:F}=this.findCell(t);return{left:Math.min(S,O),top:Math.min(E,j),right:Math.max(w,k),bottom:Math.max(D,F)}}cellsInRect(e){let t=[],S={};for(let w=e.top;w<e.bottom;w++)for(let E=e.left;E<e.right;E++){let D=w*this.width+E,O=this.map[D];S[O]||(S[O]=!0,!(E==e.left&&E&&this.map[D-1]==O||w==e.top&&w&&this.map[D-this.width]==O)&&t.push(O))}return t}positionAt(e,t,S){for(let w=0,E=0;;w++){let D=E+S.child(w).nodeSize;if(w==e){let S=t+e*this.width,w=(e+1)*this.width;for(;S<w&&this.map[S]<E;)S++;return S==w?D-1:this.map[S]}E=D}}static get(e){return readFromCache(e)||addToCache(e,computeMap(e))}};function computeMap(e){if(e.type.spec.tableRole!=`table`)throw RangeError(`Not a table node: `+e.type.name);let t=findWidth(e),S=e.childCount,w=[],E=0,D=null,O=[];for(let e=0,E=t*S;e<E;e++)w[e]=0;for(let k=0,j=0;k<S;k++){let F=e.child(k);j++;for(let e=0;;e++){for(;E<w.length&&w[E]!=0;)E++;if(e==F.childCount)break;let L=F.child(e),{colspan:B,rowspan:H,colwidth:q}=L.attrs;for(let e=0;e<H;e++){if(e+k>=S){(D||=[]).push({type:`overlong_rowspan`,pos:j,n:H-e});break}let F=E+e*t;for(let e=0;e<B;e++){w[F+e]==0?w[F+e]=j:(D||=[]).push({type:`collision`,row:k,pos:j,n:B-e});let S=q&&q[e];if(S){let w=(F+e)%t*2,E=O[w];E==null||E!=S&&O[w+1]==1?(O[w]=S,O[w+1]=1):E==S&&O[w+1]++}}}E+=B,j+=L.nodeSize}let L=(k+1)*t,B=0;for(;E<L;)w[E++]==0&&B++;B&&(D||=[]).push({type:`missing`,row:k,n:B}),j++}(t===0||S===0)&&(D||=[]).push({type:`zero_sized`});let k=new TableMap(t,S,w,D),j=!1;for(let e=0;!j&&e<O.length;e+=2)O[e]!=null&&O[e+1]<S&&(j=!0);return j&&findBadColWidths(k,O,e),k}function findWidth(e){let t=-1,S=!1;for(let w=0;w<e.childCount;w++){let E=e.child(w),D=0;if(S)for(let t=0;t<w;t++){let S=e.child(t);for(let e=0;e<S.childCount;e++){let E=S.child(e);t+E.attrs.rowspan>w&&(D+=E.attrs.colspan)}}for(let e=0;e<E.childCount;e++){let t=E.child(e);D+=t.attrs.colspan,t.attrs.rowspan>1&&(S=!0)}t==-1?t=D:t!=D&&(t=Math.max(t,D))}return t}function findBadColWidths(e,t,S){e.problems||=[];let w={};for(let E=0;E<e.map.length;E++){let D=e.map[E];if(w[D])continue;w[D]=!0;let O=S.nodeAt(D);if(!O)throw RangeError(`No cell with offset ${D} found`);let k=null,j=O.attrs;for(let S=0;S<j.colspan;S++){let w=t[(E+S)%e.width*2];w!=null&&(!j.colwidth||j.colwidth[S]!=w)&&((k||=freshColWidth(j))[S]=w)}k&&e.problems.unshift({type:`colwidth mismatch`,pos:D,colwidth:k})}}function freshColWidth(e){if(e.colwidth)return e.colwidth.slice();let t=[];for(let S=0;S<e.colspan;S++)t.push(0);return t}function tableNodeTypes(e){let t=e.cached.tableNodeTypes;if(!t){t=e.cached.tableNodeTypes={};for(let S in e.nodes){let w=e.nodes[S],E=w.spec.tableRole;E&&(t[E]=w)}}return t}const tableEditingKey=new PluginKey(`selectingCells`);function cellAround(e){for(let t=e.depth-1;t>0;t--)if(e.node(t).type.spec.tableRole==`row`)return e.node(0).resolve(e.before(t+1));return null}function cellWrapping(e){for(let t=e.depth;t>0;t--){let S=e.node(t).type.spec.tableRole;if(S===`cell`||S===`header_cell`)return e.node(t)}return null}function isInTable(e){let t=e.selection.$head;for(let e=t.depth;e>0;e--)if(t.node(e).type.spec.tableRole==`row`)return!0;return!1}function selectionCell(e){let t=e.selection;if(`$anchorCell`in t&&t.$anchorCell)return t.$anchorCell.pos>t.$headCell.pos?t.$anchorCell:t.$headCell;if(`node`in t&&t.node&&t.node.type.spec.tableRole==`cell`)return t.$anchor;let S=cellAround(t.$head)||cellNear(t.$head);if(S)return S;throw RangeError(`No cell found around position ${t.head}`)}function cellNear(e){for(let t=e.nodeAfter,S=e.pos;t;t=t.firstChild,S++){let w=t.type.spec.tableRole;if(w==`cell`||w==`header_cell`)return e.doc.resolve(S)}for(let t=e.nodeBefore,S=e.pos;t;t=t.lastChild,S--){let w=t.type.spec.tableRole;if(w==`cell`||w==`header_cell`)return e.doc.resolve(S-t.nodeSize)}}function pointsAtCell(e){return e.parent.type.spec.tableRole==`row`&&!!e.nodeAfter}function moveCellForward(e){return e.node(0).resolve(e.pos+e.nodeAfter.nodeSize)}function inSameTable(e,t){return e.depth==t.depth&&e.pos>=t.start(-1)&&e.pos<=t.end(-1)}function nextCell(e,t,S){let w=e.node(-1),E=TableMap.get(w),D=e.start(-1),O=E.nextCell(e.pos-D,t,S);return O==null?null:e.node(0).resolve(D+O)}function removeColSpan(e,t,S=1){let w={...e,colspan:e.colspan-S};return w.colwidth&&(w.colwidth=w.colwidth.slice(),w.colwidth.splice(t,S),w.colwidth.some(e=>e>0)||(w.colwidth=null)),w}function addColSpan(e,t,S=1){let w={...e,colspan:e.colspan+S};if(w.colwidth){w.colwidth=w.colwidth.slice();for(let e=0;e<S;e++)w.colwidth.splice(t,0,0)}return w}function columnIsHeader(e,t,S){let w=tableNodeTypes(t.type.schema).header_cell;for(let E=0;E<e.height;E++)if(t.nodeAt(e.map[S+E*e.width]).type!=w)return!1;return!0}var CellSelection=class e extends Selection$1{constructor(e,t=e){let S=e.node(-1),w=TableMap.get(S),E=e.start(-1),D=w.rectBetween(e.pos-E,t.pos-E),O=e.node(0),k=w.cellsInRect(D).filter(e=>e!=t.pos-E);k.unshift(t.pos-E);let j=k.map(e=>{let t=S.nodeAt(e);if(!t)throw RangeError(`No cell with offset ${e} found`);let w=E+e+1;return new SelectionRange(O.resolve(w),O.resolve(w+t.content.size))});super(j[0].$from,j[0].$to,j),this.$anchorCell=e,this.$headCell=t}map(t,S){let w=t.resolve(S.map(this.$anchorCell.pos)),E=t.resolve(S.map(this.$headCell.pos));if(pointsAtCell(w)&&pointsAtCell(E)&&inSameTable(w,E)){let t=this.$anchorCell.node(-1)!=w.node(-1);return t&&this.isRowSelection()?e.rowSelection(w,E):t&&this.isColSelection()?e.colSelection(w,E):new e(w,E)}return TextSelection.between(w,E)}content(){let e=this.$anchorCell.node(-1),t=TableMap.get(e),S=this.$anchorCell.start(-1),w=t.rectBetween(this.$anchorCell.pos-S,this.$headCell.pos-S),E={},D=[];for(let S=w.top;S<w.bottom;S++){let O=[];for(let D=S*t.width+w.left,k=w.left;k<w.right;k++,D++){let S=t.map[D];if(E[S])continue;E[S]=!0;let k=t.findCell(S),j=e.nodeAt(S);if(!j)throw RangeError(`No cell with offset ${S} found`);let F=w.left-k.left,L=k.right-w.right;if(F>0||L>0){let e=j.attrs;if(F>0&&(e=removeColSpan(e,0,F)),L>0&&(e=removeColSpan(e,e.colspan-L,L)),k.left<w.left){if(j=j.type.createAndFill(e),!j)throw RangeError(`Could not create cell with attrs ${JSON.stringify(e)}`)}else j=j.type.create(e,j.content)}if(k.top<w.top||k.bottom>w.bottom){let e={...j.attrs,rowspan:Math.min(k.bottom,w.bottom)-Math.max(k.top,w.top)};j=k.top<w.top?j.type.createAndFill(e):j.type.create(e,j.content)}O.push(j)}D.push(e.child(S).copy(Fragment.from(O)))}let O=this.isColSelection()&&this.isRowSelection()?e:D;return new Slice(Fragment.from(O),1,1)}replace(e,t=Slice.empty){let S=e.steps.length,w=this.ranges;for(let E=0;E<w.length;E++){let{$from:D,$to:O}=w[E],k=e.mapping.slice(S);e.replace(k.map(D.pos),k.map(O.pos),E?Slice.empty:t)}let E=Selection$1.findFrom(e.doc.resolve(e.mapping.slice(S).map(this.to)),-1);E&&e.setSelection(E)}replaceWith(e,t){this.replace(e,new Slice(Fragment.from(t),0,0))}forEachCell(e){let t=this.$anchorCell.node(-1),S=TableMap.get(t),w=this.$anchorCell.start(-1),E=S.cellsInRect(S.rectBetween(this.$anchorCell.pos-w,this.$headCell.pos-w));for(let S=0;S<E.length;S++)e(t.nodeAt(E[S]),w+E[S])}isColSelection(){let e=this.$anchorCell.index(-1),t=this.$headCell.index(-1);if(Math.min(e,t)>0)return!1;let S=e+this.$anchorCell.nodeAfter.attrs.rowspan,w=t+this.$headCell.nodeAfter.attrs.rowspan;return Math.max(S,w)==this.$headCell.node(-1).childCount}static colSelection(t,S=t){let w=t.node(-1),E=TableMap.get(w),D=t.start(-1),O=E.findCell(t.pos-D),k=E.findCell(S.pos-D),j=t.node(0);return O.top<=k.top?(O.top>0&&(t=j.resolve(D+E.map[O.left])),k.bottom<E.height&&(S=j.resolve(D+E.map[E.width*(E.height-1)+k.right-1]))):(k.top>0&&(S=j.resolve(D+E.map[k.left])),O.bottom<E.height&&(t=j.resolve(D+E.map[E.width*(E.height-1)+O.right-1]))),new e(t,S)}isRowSelection(){let e=this.$anchorCell.node(-1),t=TableMap.get(e),S=this.$anchorCell.start(-1),w=t.colCount(this.$anchorCell.pos-S),E=t.colCount(this.$headCell.pos-S);if(Math.min(w,E)>0)return!1;let D=w+this.$anchorCell.nodeAfter.attrs.colspan,O=E+this.$headCell.nodeAfter.attrs.colspan;return Math.max(D,O)==t.width}eq(t){return t instanceof e&&t.$anchorCell.pos==this.$anchorCell.pos&&t.$headCell.pos==this.$headCell.pos}static rowSelection(t,S=t){let w=t.node(-1),E=TableMap.get(w),D=t.start(-1),O=E.findCell(t.pos-D),k=E.findCell(S.pos-D),j=t.node(0);return O.left<=k.left?(O.left>0&&(t=j.resolve(D+E.map[O.top*E.width])),k.right<E.width&&(S=j.resolve(D+E.map[E.width*(k.top+1)-1]))):(k.left>0&&(S=j.resolve(D+E.map[k.top*E.width])),O.right<E.width&&(t=j.resolve(D+E.map[E.width*(O.top+1)-1]))),new e(t,S)}toJSON(){return{type:`cell`,anchor:this.$anchorCell.pos,head:this.$headCell.pos}}static fromJSON(t,S){return new e(t.resolve(S.anchor),t.resolve(S.head))}static create(t,S,w=S){return new e(t.resolve(S),t.resolve(w))}getBookmark(){return new CellBookmark(this.$anchorCell.pos,this.$headCell.pos)}};CellSelection.prototype.visible=!1,Selection$1.jsonID(`cell`,CellSelection);var CellBookmark=class e{constructor(e,t){this.anchor=e,this.head=t}map(t){return new e(t.map(this.anchor),t.map(this.head))}resolve(e){let t=e.resolve(this.anchor),S=e.resolve(this.head);return t.parent.type.spec.tableRole==`row`&&S.parent.type.spec.tableRole==`row`&&t.index()<t.parent.childCount&&S.index()<S.parent.childCount&&inSameTable(t,S)?new CellSelection(t,S):Selection$1.near(S,1)}};function drawCellSelection(e){if(!(e.selection instanceof CellSelection))return null;let t=[];return e.selection.forEachCell((e,S)=>{t.push(Decoration.node(S,S+e.nodeSize,{class:`selectedCell`}))}),DecorationSet.create(e.doc,t)}function isCellBoundarySelection({$from:e,$to:t}){if(e.pos==t.pos||e.pos<t.pos-6)return!1;let S=e.pos,w=t.pos,E=e.depth;for(;E>=0&&!(e.after(E+1)<e.end(E));E--,S++);for(let e=t.depth;e>=0&&!(t.before(e+1)>t.start(e));e--,w--);return S==w&&/row|table/.test(e.node(E).type.spec.tableRole)}function isTextSelectionAcrossCells({$from:e,$to:t}){let S,w;for(let t=e.depth;t>0;t--){let w=e.node(t);if(w.type.spec.tableRole===`cell`||w.type.spec.tableRole===`header_cell`){S=w;break}}for(let e=t.depth;e>0;e--){let S=t.node(e);if(S.type.spec.tableRole===`cell`||S.type.spec.tableRole===`header_cell`){w=S;break}}return S!==w&&t.parentOffset===0}function normalizeSelection(e,t,S){let w=(t||e).selection,E=(t||e).doc,D,O;if(w instanceof NodeSelection&&(O=w.node.type.spec.tableRole)){if(O==`cell`||O==`header_cell`)D=CellSelection.create(E,w.from);else if(O==`row`){let e=E.resolve(w.from+1);D=CellSelection.rowSelection(e,e)}else if(!S){let e=TableMap.get(w.node),t=w.from+1,S=t+e.map[e.width*e.height-1];D=CellSelection.create(E,t+1,S)}}else w instanceof TextSelection&&isCellBoundarySelection(w)?D=TextSelection.create(E,w.from):w instanceof TextSelection&&isTextSelectionAcrossCells(w)&&(D=TextSelection.create(E,w.$from.start(),w.$from.end()));return D&&(t||=e.tr).setSelection(D),t}const fixTablesKey=new PluginKey(`fix-tables`);function changedDescendants(e,t,S,w){let E=e.childCount,D=t.childCount;outer:for(let O=0,k=0;O<D;O++){let D=t.child(O);for(let t=k,w=Math.min(E,O+3);t<w;t++)if(e.child(t)==D){k=t+1,S+=D.nodeSize;continue outer}w(D,S),k<E&&e.child(k).sameMarkup(D)?changedDescendants(e.child(k),D,S+1,w):D.nodesBetween(0,D.content.size,w,S+1),S+=D.nodeSize}}function fixTables(e,t){let S,w=(t,w)=>{t.type.spec.tableRole==`table`&&(S=fixTable(e,t,w,S))};return t?t.doc!=e.doc&&changedDescendants(t.doc,e.doc,0,w):e.doc.descendants(w),S}function fixTable(e,t,S,w){let E=TableMap.get(t);if(!E.problems)return w;w||=e.tr;let D=[];for(let e=0;e<E.height;e++)D.push(0);for(let e=0;e<E.problems.length;e++){let O=E.problems[e];if(O.type==`collision`){let e=t.nodeAt(O.pos);if(!e)continue;let E=e.attrs;for(let e=0;e<E.rowspan;e++)D[O.row+e]+=O.n;w.setNodeMarkup(w.mapping.map(S+1+O.pos),null,removeColSpan(E,E.colspan-O.n,O.n))}else if(O.type==`missing`)D[O.row]+=O.n;else if(O.type==`overlong_rowspan`){let e=t.nodeAt(O.pos);if(!e)continue;w.setNodeMarkup(w.mapping.map(S+1+O.pos),null,{...e.attrs,rowspan:e.attrs.rowspan-O.n})}else if(O.type==`colwidth mismatch`){let e=t.nodeAt(O.pos);if(!e)continue;w.setNodeMarkup(w.mapping.map(S+1+O.pos),null,{...e.attrs,colwidth:O.colwidth})}else if(O.type==`zero_sized`){let e=w.mapping.map(S);w.delete(e,e+t.nodeSize)}}let O,k;for(let e=0;e<D.length;e++)D[e]&&(O??=e,k=e);for(let j=0,F=S+1;j<E.height;j++){let S=t.child(j),E=F+S.nodeSize,L=D[j];if(L>0){let t=`cell`;S.firstChild&&(t=S.firstChild.type.spec.tableRole);let D=[];for(let S=0;S<L;S++){let S=tableNodeTypes(e.schema)[t].createAndFill();S&&D.push(S)}let B=(j==0||O==j-1)&&k==j?F+1:E-1;w.insert(w.mapping.map(B),D)}F=E}return w.setMeta(fixTablesKey,{fixTables:!0})}function selectedRect(e){let t=e.selection,S=selectionCell(e),w=S.node(-1),E=S.start(-1),D=TableMap.get(w);return{...t instanceof CellSelection?D.rectBetween(t.$anchorCell.pos-E,t.$headCell.pos-E):D.findCell(S.pos-E),tableStart:E,map:D,table:w}}function addColumn(e,{map:t,tableStart:S,table:w},E){let D=E>0?-1:0;columnIsHeader(t,w,E+D)&&(D=E==0||E==t.width?null:0);for(let O=0;O<t.height;O++){let k=O*t.width+E;if(E>0&&E<t.width&&t.map[k-1]==t.map[k]){let D=t.map[k],j=w.nodeAt(D);e.setNodeMarkup(e.mapping.map(S+D),null,addColSpan(j.attrs,E-t.colCount(D))),O+=j.attrs.rowspan-1}else{let j=D==null?tableNodeTypes(w.type.schema).cell:w.nodeAt(t.map[k+D]).type,F=t.positionAt(O,E,w);e.insert(e.mapping.map(S+F),j.createAndFill())}}return e}function addColumnBefore(e,t){if(!isInTable(e))return!1;if(t){let S=selectedRect(e);t(addColumn(e.tr,S,S.left))}return!0}function addColumnAfter(e,t){if(!isInTable(e))return!1;if(t){let S=selectedRect(e);t(addColumn(e.tr,S,S.right))}return!0}function removeColumn(e,{map:t,table:S,tableStart:w},E){let D=e.mapping.maps.length;for(let O=0;O<t.height;){let k=O*t.width+E,j=t.map[k],F=S.nodeAt(j),L=F.attrs;if(E>0&&t.map[k-1]==j||E<t.width-1&&t.map[k+1]==j)e.setNodeMarkup(e.mapping.slice(D).map(w+j),null,removeColSpan(L,E-t.colCount(j)));else{let t=e.mapping.slice(D).map(w+j);e.delete(t,t+F.nodeSize)}O+=L.rowspan}}function deleteColumn(e,t){if(!isInTable(e))return!1;if(t){let S=selectedRect(e),w=e.tr;if(S.left==0&&S.right==S.map.width)return!1;for(let e=S.right-1;removeColumn(w,S,e),e!=S.left;e--){let e=S.tableStart?w.doc.nodeAt(S.tableStart-1):w.doc;if(!e)throw RangeError(`No table found`);S.table=e,S.map=TableMap.get(e)}t(w)}return!0}function rowIsHeader(e,t,S){var w;let E=tableNodeTypes(t.type.schema).header_cell;for(let w=0;w<e.width;w++)if(t.nodeAt(e.map[w+S*e.width])?.type!=E)return!1;return!0}function addRow(e,{map:t,tableStart:S,table:w},E){let D=S;for(let e=0;e<E;e++)D+=w.child(e).nodeSize;let O=[],k=E>0?-1:0;rowIsHeader(t,w,E+k)&&(k=E==0||E==t.height?null:0);for(let D=0,F=t.width*E;D<t.width;D++,F++)if(E>0&&E<t.height&&t.map[F]==t.map[F-t.width]){let E=t.map[F],O=w.nodeAt(E).attrs;e.setNodeMarkup(S+E,null,{...O,rowspan:O.rowspan+1}),D+=O.colspan-1}else{var j;let e=(k==null?tableNodeTypes(w.type.schema).cell:w.nodeAt(t.map[F+k*t.width])?.type)?.createAndFill();e&&O.push(e)}return e.insert(D,tableNodeTypes(w.type.schema).row.create(null,O)),e}function addRowBefore(e,t){if(!isInTable(e))return!1;if(t){let S=selectedRect(e);t(addRow(e.tr,S,S.top))}return!0}function addRowAfter(e,t){if(!isInTable(e))return!1;if(t){let S=selectedRect(e);t(addRow(e.tr,S,S.bottom))}return!0}function removeRow(e,{map:t,table:S,tableStart:w},E){let D=0;for(let e=0;e<E;e++)D+=S.child(e).nodeSize;let O=D+S.child(E).nodeSize,k=e.mapping.maps.length;e.delete(D+w,O+w);let j=new Set;for(let D=0,O=E*t.width;D<t.width;D++,O++){let F=t.map[O];if(!j.has(F)){if(j.add(F),E>0&&F==t.map[O-t.width]){let t=S.nodeAt(F).attrs;e.setNodeMarkup(e.mapping.slice(k).map(F+w),null,{...t,rowspan:t.rowspan-1}),D+=t.colspan-1}else if(E<t.height&&F==t.map[O+t.width]){let O=S.nodeAt(F),j=O.attrs,L=O.type.create({...j,rowspan:O.attrs.rowspan-1},O.content),B=t.positionAt(E+1,D,S);e.insert(e.mapping.slice(k).map(w+B),L),D+=j.colspan-1}}}}function deleteRow(e,t){if(!isInTable(e))return!1;if(t){let S=selectedRect(e),w=e.tr;if(S.top==0&&S.bottom==S.map.height)return!1;for(let e=S.bottom-1;removeRow(w,S,e),e!=S.top;e--){let e=S.tableStart?w.doc.nodeAt(S.tableStart-1):w.doc;if(!e)throw RangeError(`No table found`);S.table=e,S.map=TableMap.get(S.table)}t(w)}return!0}function isEmpty$3(e){let t=e.content;return t.childCount==1&&t.child(0).isTextblock&&t.child(0).childCount==0}function cellsOverlapRectangle({width:e,height:t,map:S},w){let E=w.top*e+w.left,D=E,O=(w.bottom-1)*e+w.left,k=E+(w.right-w.left-1);for(let t=w.top;t<w.bottom;t++){if(w.left>0&&S[D]==S[D-1]||w.right<e&&S[k]==S[k+1])return!0;D+=e,k+=e}for(let D=w.left;D<w.right;D++){if(w.top>0&&S[E]==S[E-e]||w.bottom<t&&S[O]==S[O+e])return!0;E++,O++}return!1}function mergeCells(e,t){let S=e.selection;if(!(S instanceof CellSelection)||S.$anchorCell.pos==S.$headCell.pos)return!1;let w=selectedRect(e),{map:E}=w;if(cellsOverlapRectangle(E,w))return!1;if(t){let S=e.tr,D={},O=Fragment.empty,k,j;for(let e=w.top;e<w.bottom;e++)for(let t=w.left;t<w.right;t++){let F=E.map[e*E.width+t],L=w.table.nodeAt(F);if(!(D[F]||!L))if(D[F]=!0,k==null)k=F,j=L;else{isEmpty$3(L)||(O=O.append(L.content));let e=S.mapping.map(F+w.tableStart);S.delete(e,e+L.nodeSize)}}if(k==null||j==null)return!0;if(S.setNodeMarkup(k+w.tableStart,null,{...addColSpan(j.attrs,j.attrs.colspan,w.right-w.left-j.attrs.colspan),rowspan:w.bottom-w.top}),O.size>0){let e=k+1+j.content.size,t=isEmpty$3(j)?k+1:e;S.replaceWith(t+w.tableStart,e+w.tableStart,O)}S.setSelection(new CellSelection(S.doc.resolve(k+w.tableStart))),t(S)}return!0}function splitCell(e,t){let S=tableNodeTypes(e.schema);return splitCellWithType(({node:e})=>S[e.type.spec.tableRole])(e,t)}function splitCellWithType(e){return(t,S)=>{let w=t.selection,E,D;if(w instanceof CellSelection){if(w.$anchorCell.pos!=w.$headCell.pos)return!1;E=w.$anchorCell.nodeAfter,D=w.$anchorCell.pos}else{var O;if(E=cellWrapping(w.$from),!E)return!1;D=cellAround(w.$from)?.pos}if(E==null||D==null||E.attrs.colspan==1&&E.attrs.rowspan==1)return!1;if(S){let O=E.attrs,k=[],j=O.colwidth;O.rowspan>1&&(O={...O,rowspan:1}),O.colspan>1&&(O={...O,colspan:1});let F=selectedRect(t),L=t.tr;for(let e=0;e<F.right-F.left;e++)k.push(j?{...O,colwidth:j&&j[e]?[j[e]]:null}:O);let B;for(let t=F.top;t<F.bottom;t++){let S=F.map.positionAt(t,F.left,F.table);t==F.top&&(S+=E.nodeSize);for(let w=F.left,D=0;w<F.right;w++,D++)w==F.left&&t==F.top||L.insert(B=L.mapping.map(S+F.tableStart,1),e({node:E,row:t,col:w}).createAndFill(k[D]))}L.setNodeMarkup(D,e({node:E,row:F.top,col:F.left}),k[0]),w instanceof CellSelection&&L.setSelection(new CellSelection(L.doc.resolve(w.$anchorCell.pos),B?L.doc.resolve(B):void 0)),S(L)}return!0}}function setCellAttr(e,t){return function(S,w){if(!isInTable(S))return!1;let E=selectionCell(S);if(E.nodeAfter.attrs[e]===t)return!1;if(w){let D=S.tr;S.selection instanceof CellSelection?S.selection.forEachCell((S,w)=>{S.attrs[e]!==t&&D.setNodeMarkup(w,null,{...S.attrs,[e]:t})}):D.setNodeMarkup(E.pos,null,{...E.nodeAfter.attrs,[e]:t}),w(D)}return!0}}function deprecated_toggleHeader(e){return function(t,S){if(!isInTable(t))return!1;if(S){let w=tableNodeTypes(t.schema),E=selectedRect(t),D=t.tr,O=E.map.cellsInRect(e==`column`?{left:E.left,top:0,right:E.right,bottom:E.map.height}:e==`row`?{left:0,top:E.top,right:E.map.width,bottom:E.bottom}:E),k=O.map(e=>E.table.nodeAt(e));for(let e=0;e<O.length;e++)k[e].type==w.header_cell&&D.setNodeMarkup(E.tableStart+O[e],w.cell,k[e].attrs);if(D.steps.length===0)for(let e=0;e<O.length;e++)D.setNodeMarkup(E.tableStart+O[e],w.header_cell,k[e].attrs);S(D)}return!0}}function isHeaderEnabledByType(e,t,S){let w=t.map.cellsInRect({left:0,top:0,right:e==`row`?t.map.width:1,bottom:e==`column`?t.map.height:1});for(let e=0;e<w.length;e++){let E=t.table.nodeAt(w[e]);if(E&&E.type!==S.header_cell)return!1}return!0}function toggleHeader(e,t){return t||={useDeprecatedLogic:!1},t.useDeprecatedLogic?deprecated_toggleHeader(e):function(t,S){if(!isInTable(t))return!1;if(S){let w=tableNodeTypes(t.schema),E=selectedRect(t),D=t.tr,O=isHeaderEnabledByType(`row`,E,w),k=isHeaderEnabledByType(`column`,E,w),j=(e===`column`?O:e===`row`&&k)?1:0,F=e==`column`?{left:0,top:j,right:1,bottom:E.map.height}:e==`row`?{left:j,top:0,right:E.map.width,bottom:1}:E,L=e==`column`?k?w.cell:w.header_cell:e==`row`?O?w.cell:w.header_cell:w.cell;E.map.cellsInRect(F).forEach(e=>{let t=e+E.tableStart,S=D.doc.nodeAt(t);S&&D.setNodeMarkup(t,L,S.attrs)}),S(D)}return!0}}const toggleHeaderRow=toggleHeader(`row`,{useDeprecatedLogic:!0}),toggleHeaderColumn=toggleHeader(`column`,{useDeprecatedLogic:!0}),toggleHeaderCell=toggleHeader(`cell`,{useDeprecatedLogic:!0});function findNextCell(e,t){if(t<0){let t=e.nodeBefore;if(t)return e.pos-t.nodeSize;for(let t=e.index(-1)-1,S=e.before();t>=0;t--){let w=e.node(-1).child(t),E=w.lastChild;if(E)return S-1-E.nodeSize;S-=w.nodeSize}}else{if(e.index()<e.parent.childCount-1)return e.pos+e.nodeAfter.nodeSize;let t=e.node(-1);for(let S=e.indexAfter(-1),w=e.after();S<t.childCount;S++){let e=t.child(S);if(e.childCount)return w+1;w+=e.nodeSize}}return null}function goToNextCell(e){return function(t,S){if(!isInTable(t))return!1;let w=findNextCell(selectionCell(t),e);if(w==null)return!1;if(S){let e=t.doc.resolve(w);S(t.tr.setSelection(TextSelection.between(e,moveCellForward(e))).scrollIntoView())}return!0}}function deleteTable(e,t){let S=e.selection.$anchor;for(let w=S.depth;w>0;w--)if(S.node(w).type.spec.tableRole==`table`)return t&&t(e.tr.delete(S.before(w),S.after(w)).scrollIntoView()),!0;return!1}function deleteCellSelection(e,t){let S=e.selection;if(!(S instanceof CellSelection))return!1;if(t){let w=e.tr,E=tableNodeTypes(e.schema).cell.createAndFill().content;S.forEachCell((e,t)=>{e.content.eq(E)||w.replace(w.mapping.map(t+1),w.mapping.map(t+e.nodeSize-1),new Slice(E,0,0))}),w.docChanged&&t(w)}return!0}function pastedCells(e){if(e.size===0)return null;let{content:t,openStart:S,openEnd:w}=e;for(;t.childCount==1&&(S>0&&w>0||t.child(0).type.spec.tableRole==`table`);)S--,w--,t=t.child(0).content;let E=t.child(0),D=E.type.spec.tableRole,O=E.type.schema,k=[];if(D==`row`)for(let e=0;e<t.childCount;e++){let E=t.child(e).content,D=e?0:Math.max(0,S-1),j=e<t.childCount-1?0:Math.max(0,w-1);(D||j)&&(E=fitSlice(tableNodeTypes(O).row,new Slice(E,D,j)).content),k.push(E)}else if(D==`cell`||D==`header_cell`)k.push(S||w?fitSlice(tableNodeTypes(O).row,new Slice(t,S,w)).content:t);else return null;return ensureRectangular(O,k)}function ensureRectangular(e,t){let S=[];for(let e=0;e<t.length;e++){let w=t[e];for(let t=w.childCount-1;t>=0;t--){let{rowspan:E,colspan:D}=w.child(t).attrs;for(let t=e;t<e+E;t++)S[t]=(S[t]||0)+D}}let w=0;for(let e=0;e<S.length;e++)w=Math.max(w,S[e]);for(let E=0;E<S.length;E++)if(E>=t.length&&t.push(Fragment.empty),S[E]<w){let D=tableNodeTypes(e).cell.createAndFill(),O=[];for(let e=S[E];e<w;e++)O.push(D);t[E]=t[E].append(Fragment.from(O))}return{height:t.length,width:w,rows:t}}function fitSlice(e,t){let S=e.createAndFill();return new Transform$4(S).replace(0,S.content.size,t).doc}function clipCells({width:e,height:t,rows:S},w,E){if(e!=w){let t=[],E=[];for(let e=0;e<S.length;e++){let D=S[e],O=[];for(let S=t[e]||0,E=0;S<w;E++){let k=D.child(E%D.childCount);S+k.attrs.colspan>w&&(k=k.type.createChecked(removeColSpan(k.attrs,k.attrs.colspan,S+k.attrs.colspan-w),k.content)),O.push(k),S+=k.attrs.colspan;for(let S=1;S<k.attrs.rowspan;S++)t[e+S]=(t[e+S]||0)+k.attrs.colspan}E.push(Fragment.from(O))}S=E,e=w}if(t!=E){let e=[];for(let w=0,D=0;w<E;w++,D++){let O=[],k=S[D%t];for(let e=0;e<k.childCount;e++){let t=k.child(e);w+t.attrs.rowspan>E&&(t=t.type.create({...t.attrs,rowspan:Math.max(1,E-t.attrs.rowspan)},t.content)),O.push(t)}e.push(Fragment.from(O))}S=e,t=E}return{width:e,height:t,rows:S}}function growTable(e,t,S,w,E,D,O){let k=e.doc.type.schema,j=tableNodeTypes(k),F,L;if(E>t.width)for(let D=0,k=0;D<t.height;D++){let B=S.child(D);k+=B.nodeSize;let H=[],q;q=B.lastChild==null||B.lastChild.type==j.cell?F||=j.cell.createAndFill():L||=j.header_cell.createAndFill();for(let e=t.width;e<E;e++)H.push(q);e.insert(e.mapping.slice(O).map(k-1+w),H)}if(D>t.height){let k=[];for(let e=0,w=(t.height-1)*t.width;e<Math.max(t.width,E);e++){let E=e>=t.width?!1:S.nodeAt(t.map[w+e]).type==j.header_cell;k.push(E?L||=j.header_cell.createAndFill():F||=j.cell.createAndFill())}let B=j.row.create(null,Fragment.from(k)),H=[];for(let e=t.height;e<D;e++)H.push(B);e.insert(e.mapping.slice(O).map(w+S.nodeSize-2),H)}return!!(F||L)}function isolateHorizontal(e,t,S,w,E,D,O,k){if(O==0||O==t.height)return!1;let j=!1;for(let F=E;F<D;F++){let E=O*t.width+F,D=t.map[E];if(t.map[E-t.width]==D){j=!0;let E=S.nodeAt(D),{top:L,left:B}=t.findCell(D);e.setNodeMarkup(e.mapping.slice(k).map(D+w),null,{...E.attrs,rowspan:O-L}),e.insert(e.mapping.slice(k).map(t.positionAt(O,B,S)),E.type.createAndFill({...E.attrs,rowspan:L+E.attrs.rowspan-O})),F+=E.attrs.colspan-1}}return j}function isolateVertical(e,t,S,w,E,D,O,k){if(O==0||O==t.width)return!1;let j=!1;for(let F=E;F<D;F++){let E=F*t.width+O,D=t.map[E];if(t.map[E-1]==D){j=!0;let E=S.nodeAt(D),L=t.colCount(D),B=e.mapping.slice(k).map(D+w);e.setNodeMarkup(B,null,removeColSpan(E.attrs,O-L,E.attrs.colspan-(O-L))),e.insert(B+E.nodeSize,E.type.createAndFill(removeColSpan(E.attrs,0,O-L))),F+=E.attrs.rowspan-1}}return j}function insertCells(e,t,S,w,E){let D=S?e.doc.nodeAt(S-1):e.doc;if(!D)throw Error(`No table found`);let O=TableMap.get(D),{top:k,left:j}=w,F=j+E.width,L=k+E.height,B=e.tr,H=0;function q(){if(D=S?B.doc.nodeAt(S-1):B.doc,!D)throw Error(`No table found`);O=TableMap.get(D),H=B.mapping.maps.length}growTable(B,O,D,S,F,L,H)&&q(),isolateHorizontal(B,O,D,S,j,F,k,H)&&q(),isolateHorizontal(B,O,D,S,j,F,L,H)&&q(),isolateVertical(B,O,D,S,k,L,j,H)&&q(),isolateVertical(B,O,D,S,k,L,F,H)&&q();for(let e=k;e<L;e++){let t=O.positionAt(e,j,D),w=O.positionAt(e,F,D);B.replace(B.mapping.slice(H).map(t+S),B.mapping.slice(H).map(w+S),new Slice(E.rows[e-k],0,0))}q(),B.setSelection(new CellSelection(B.doc.resolve(S+O.positionAt(k,j,D)),B.doc.resolve(S+O.positionAt(L-1,F-1,D)))),t(B)}const handleKeyDown$1=keydownHandler({ArrowLeft:arrow$1(`horiz`,-1),ArrowRight:arrow$1(`horiz`,1),ArrowUp:arrow$1(`vert`,-1),ArrowDown:arrow$1(`vert`,1),"Shift-ArrowLeft":shiftArrow(`horiz`,-1),"Shift-ArrowRight":shiftArrow(`horiz`,1),"Shift-ArrowUp":shiftArrow(`vert`,-1),"Shift-ArrowDown":shiftArrow(`vert`,1),Backspace:deleteCellSelection,"Mod-Backspace":deleteCellSelection,Delete:deleteCellSelection,"Mod-Delete":deleteCellSelection});function maybeSetSelection(e,t,S){return S.eq(e.selection)?!1:(t&&t(e.tr.setSelection(S).scrollIntoView()),!0)}function arrow$1(e,t){return(S,w,E)=>{if(!E)return!1;let D=S.selection;if(D instanceof CellSelection)return maybeSetSelection(S,w,Selection$1.near(D.$headCell,t));if(e!=`horiz`&&!D.empty)return!1;let O=atEndOfCell(E,e,t);if(O==null)return!1;if(e==`horiz`)return maybeSetSelection(S,w,Selection$1.near(S.doc.resolve(D.head+t),t));{let E=S.doc.resolve(O),D=nextCell(E,e,t),k;return k=D?Selection$1.near(D,1):t<0?Selection$1.near(S.doc.resolve(E.before(-1)),-1):Selection$1.near(S.doc.resolve(E.after(-1)),1),maybeSetSelection(S,w,k)}}}function shiftArrow(e,t){return(S,w,E)=>{if(!E)return!1;let D=S.selection,O;if(D instanceof CellSelection)O=D;else{let w=atEndOfCell(E,e,t);if(w==null)return!1;O=new CellSelection(S.doc.resolve(w))}let k=nextCell(O.$headCell,e,t);return k?maybeSetSelection(S,w,new CellSelection(O.$anchorCell,k)):!1}}function handleTripleClick(e,t){let S=e.state.doc,w=cellAround(S.resolve(t));return w?(e.dispatch(e.state.tr.setSelection(new CellSelection(w))),!0):!1}function handlePaste(e,t,S){if(!isInTable(e.state))return!1;let w=pastedCells(S),E=e.state.selection;if(E instanceof CellSelection){w||={width:1,height:1,rows:[Fragment.from(fitSlice(tableNodeTypes(e.state.schema).cell,S))]};let t=E.$anchorCell.node(-1),D=E.$anchorCell.start(-1),O=TableMap.get(t).rectBetween(E.$anchorCell.pos-D,E.$headCell.pos-D);return w=clipCells(w,O.right-O.left,O.bottom-O.top),insertCells(e.state,e.dispatch,D,O,w),!0}else if(w){let t=selectionCell(e.state),S=t.start(-1);return insertCells(e.state,e.dispatch,S,TableMap.get(t.node(-1)).findCell(t.pos-S),w),!0}else return!1}function handleMouseDown$1(e,t){var S;if(t.button!=0||t.ctrlKey||t.metaKey)return;let w=domInCell(e,t.target),E;if(t.shiftKey&&e.state.selection instanceof CellSelection)D(e.state.selection.$anchorCell,t),t.preventDefault();else if(t.shiftKey&&w&&(E=cellAround(e.state.selection.$anchor))!=null&&cellUnderMouse(e,t)?.pos!=E.pos)D(E,t),t.preventDefault();else if(!w)return;function D(t,S){let w=cellUnderMouse(e,S),E=tableEditingKey.getState(e.state)==null;if(!w||!inSameTable(t,w))if(E)w=t;else return;let D=new CellSelection(t,w);if(E||!e.state.selection.eq(D)){let S=e.state.tr.setSelection(D);E&&S.setMeta(tableEditingKey,t.pos),e.dispatch(S)}}function O(){e.root.removeEventListener(`mouseup`,O),e.root.removeEventListener(`dragstart`,O),e.root.removeEventListener(`mousemove`,k),tableEditingKey.getState(e.state)!=null&&e.dispatch(e.state.tr.setMeta(tableEditingKey,-1))}function k(S){let E=S,k=tableEditingKey.getState(e.state),j;if(k!=null)j=e.state.doc.resolve(k);else if(domInCell(e,E.target)!=w&&(j=cellUnderMouse(e,t),!j))return O();j&&D(j,E)}e.root.addEventListener(`mouseup`,O),e.root.addEventListener(`dragstart`,O),e.root.addEventListener(`mousemove`,k)}function atEndOfCell(e,t,S){if(!(e.state.selection instanceof TextSelection))return null;let{$head:w}=e.state.selection;for(let E=w.depth-1;E>=0;E--){let D=w.node(E);if((S<0?w.index(E):w.indexAfter(E))!=(S<0?0:D.childCount))return null;if(D.type.spec.tableRole==`cell`||D.type.spec.tableRole==`header_cell`){let D=w.before(E),O=t==`vert`?S>0?`down`:`up`:S>0?`right`:`left`;return e.endOfTextblock(O)?D:null}}return null}function domInCell(e,t){for(;t&&t!=e.dom;t=t.parentNode)if(t.nodeName==`TD`||t.nodeName==`TH`)return t;return null}function cellUnderMouse(e,t){let S=e.posAtCoords({left:t.clientX,top:t.clientY});if(!S)return null;let{inside:w,pos:E}=S;return w>=0&&cellAround(e.state.doc.resolve(w))||cellAround(e.state.doc.resolve(E))}var TableView$1=class{constructor(e,t){this.node=e,this.defaultCellMinWidth=t,this.dom=document.createElement(`div`),this.dom.className=`tableWrapper`,this.table=this.dom.appendChild(document.createElement(`table`)),this.table.style.setProperty(`--default-cell-min-width`,`${t}px`),this.colgroup=this.table.appendChild(document.createElement(`colgroup`)),updateColumnsOnResize(e,this.colgroup,this.table,t),this.contentDOM=this.table.appendChild(document.createElement(`tbody`))}update(e){return e.type==this.node.type?(this.node=e,updateColumnsOnResize(e,this.colgroup,this.table,this.defaultCellMinWidth),!0):!1}ignoreMutation(e){return e.type==`attributes`&&(e.target==this.table||this.colgroup.contains(e.target))}};function updateColumnsOnResize(e,t,S,w,E,D){let O=0,k=!0,j=t.firstChild,F=e.firstChild;if(F){for(let e=0,S=0;e<F.childCount;e++){let{colspan:L,colwidth:B}=F.child(e).attrs;for(let e=0;e<L;e++,S++){let F=E==S?D:B&&B[e],L=F?F+`px`:``;if(O+=F||w,F||(k=!1),j)j.style.width!=L&&(j.style.width=L),j=j.nextSibling;else{let e=document.createElement(`col`);e.style.width=L,t.appendChild(e)}}}for(;j;){var L;let e=j.nextSibling;(L=j.parentNode)==null||L.removeChild(j),j=e}k?(S.style.width=O+`px`,S.style.minWidth=``):(S.style.width=``,S.style.minWidth=O+`px`)}}const columnResizingPluginKey=new PluginKey(`tableColumnResizing`);function columnResizing({handleWidth:e=5,cellMinWidth:t=25,defaultCellMinWidth:S=100,View:w=TableView$1,lastColumnResizable:E=!0}={}){let D=new Plugin({key:columnResizingPluginKey,state:{init(e,t){var E;let O=(E=D.spec)==null||(E=E.props)==null?void 0:E.nodeViews,k=tableNodeTypes(t.schema).table.name;return w&&O&&(O[k]=(e,t)=>new w(e,S,t)),new ResizeState(-1,!1)},apply(e,t){return t.apply(e)}},props:{attributes:e=>{let t=columnResizingPluginKey.getState(e);return t&&t.activeHandle>-1?{class:`resize-cursor`}:{}},handleDOMEvents:{mousemove:(t,S)=>{handleMouseMove(t,S,e,E)},mouseleave:e=>{handleMouseLeave(e)},mousedown:(e,w)=>{handleMouseDown(e,w,t,S)}},decorations:e=>{let t=columnResizingPluginKey.getState(e);if(t&&t.activeHandle>-1)return handleDecorations(e,t.activeHandle)},nodeViews:{}}});return D}var ResizeState=class e{constructor(e,t){this.activeHandle=e,this.dragging=t}apply(t){let S=this,w=t.getMeta(columnResizingPluginKey);if(w&&w.setHandle!=null)return new e(w.setHandle,!1);if(w&&w.setDragging!==void 0)return new e(S.activeHandle,w.setDragging);if(S.activeHandle>-1&&t.docChanged){let w=t.mapping.map(S.activeHandle,-1);return pointsAtCell(t.doc.resolve(w))||(w=-1),new e(w,S.dragging)}return S}};function handleMouseMove(e,t,S,w){if(!e.editable)return;let E=columnResizingPluginKey.getState(e.state);if(E&&!E.dragging){let D=domCellAround(t.target),O=-1;if(D){let{left:w,right:E}=D.getBoundingClientRect();t.clientX-w<=S?O=edgeCell(e,t,`left`,S):E-t.clientX<=S&&(O=edgeCell(e,t,`right`,S))}if(O!=E.activeHandle){if(!w&&O!==-1){let t=e.state.doc.resolve(O),S=t.node(-1),w=TableMap.get(S),E=t.start(-1);if(w.colCount(t.pos-E)+t.nodeAfter.attrs.colspan-1==w.width-1)return}updateHandle(e,O)}}}function handleMouseLeave(e){if(!e.editable)return;let t=columnResizingPluginKey.getState(e.state);t&&t.activeHandle>-1&&!t.dragging&&updateHandle(e,-1)}function handleMouseDown(e,t,S,w){var E;if(!e.editable)return!1;let D=e.dom.ownerDocument.defaultView??window,O=columnResizingPluginKey.getState(e.state);if(!O||O.activeHandle==-1||O.dragging)return!1;let k=e.state.doc.nodeAt(O.activeHandle),j=currentColWidth(e,O.activeHandle,k.attrs);e.dispatch(e.state.tr.setMeta(columnResizingPluginKey,{setDragging:{startX:t.clientX,startWidth:j}}));function F(t){D.removeEventListener(`mouseup`,F),D.removeEventListener(`mousemove`,L);let w=columnResizingPluginKey.getState(e.state);w?.dragging&&(updateColumnWidth(e,w.activeHandle,draggedWidth(w.dragging,t,S)),e.dispatch(e.state.tr.setMeta(columnResizingPluginKey,{setDragging:null})))}function L(t){if(!t.which)return F(t);let E=columnResizingPluginKey.getState(e.state);if(E&&E.dragging){let D=draggedWidth(E.dragging,t,S);displayColumnWidth(e,E.activeHandle,D,w)}}return displayColumnWidth(e,O.activeHandle,j,w),D.addEventListener(`mouseup`,F),D.addEventListener(`mousemove`,L),t.preventDefault(),!0}function currentColWidth(e,t,{colspan:S,colwidth:w}){let E=w&&w[w.length-1];if(E)return E;let D=e.domAtPos(t),O=D.node.childNodes[D.offset].offsetWidth,k=S;if(w)for(let e=0;e<S;e++)w[e]&&(O-=w[e],k--);return O/k}function domCellAround(e){for(;e&&e.nodeName!=`TD`&&e.nodeName!=`TH`;)e=e.classList&&e.classList.contains(`ProseMirror`)?null:e.parentNode;return e}function edgeCell(e,t,S,w){let E=S==`right`?-w:w,D=e.posAtCoords({left:t.clientX+E,top:t.clientY});if(!D)return-1;let{pos:O}=D,k=cellAround(e.state.doc.resolve(O));if(!k)return-1;if(S==`right`)return k.pos;let j=TableMap.get(k.node(-1)),F=k.start(-1),L=j.map.indexOf(k.pos-F);return L%j.width==0?-1:F+j.map[L-1]}function draggedWidth(e,t,S){let w=t.clientX-e.startX;return Math.max(S,e.startWidth+w)}function updateHandle(e,t){e.dispatch(e.state.tr.setMeta(columnResizingPluginKey,{setHandle:t}))}function updateColumnWidth(e,t,S){let w=e.state.doc.resolve(t),E=w.node(-1),D=TableMap.get(E),O=w.start(-1),k=D.colCount(w.pos-O)+w.nodeAfter.attrs.colspan-1,j=e.state.tr;for(let e=0;e<D.height;e++){let t=e*D.width+k;if(e&&D.map[t]==D.map[t-D.width])continue;let w=D.map[t],F=E.nodeAt(w).attrs,L=F.colspan==1?0:k-D.colCount(w);if(F.colwidth&&F.colwidth[L]==S)continue;let B=F.colwidth?F.colwidth.slice():zeroes(F.colspan);B[L]=S,j.setNodeMarkup(O+w,null,{...F,colwidth:B})}j.docChanged&&e.dispatch(j)}function displayColumnWidth(e,t,S,w){let E=e.state.doc.resolve(t),D=E.node(-1),O=E.start(-1),k=TableMap.get(D).colCount(E.pos-O)+E.nodeAfter.attrs.colspan-1,j=e.domAtPos(E.start(-1)).node;for(;j&&j.nodeName!=`TABLE`;)j=j.parentNode;j&&updateColumnsOnResize(D,j.firstChild,j,w,k,S)}function zeroes(e){return Array(e).fill(0)}function handleDecorations(e,t){let S=[],w=e.doc.resolve(t),E=w.node(-1);if(!E)return DecorationSet.empty;let D=TableMap.get(E),O=w.start(-1),k=D.colCount(w.pos-O)+w.nodeAfter.attrs.colspan-1;for(let t=0;t<D.height;t++){let w=k+t*D.width;if((k==D.width-1||D.map[w]!=D.map[w+1])&&(t==0||D.map[w]!=D.map[w-D.width])){var j;let t=D.map[w],k=O+t+E.nodeAt(t).nodeSize-1,F=document.createElement(`div`);F.className=`column-resize-handle`,columnResizingPluginKey.getState(e)?.dragging&&S.push(Decoration.node(O+t,O+t+E.nodeAt(t).nodeSize,{class:`column-resize-dragging`})),S.push(Decoration.widget(k,F))}}return DecorationSet.create(e.doc,S)}function tableEditing({allowTableNodeSelection:e=!1}={}){return new Plugin({key:tableEditingKey,state:{init(){return null},apply(e,t){let S=e.getMeta(tableEditingKey);if(S!=null)return S==-1?null:S;if(t==null||!e.docChanged)return t;let{deleted:w,pos:E}=e.mapping.mapResult(t);return w?null:E}},props:{decorations:drawCellSelection,handleDOMEvents:{mousedown:handleMouseDown$1},createSelectionBetween(e){return tableEditingKey.getState(e.state)==null?null:e.state.selection},handleTripleClick,handleKeyDown:handleKeyDown$1,handlePaste},appendTransaction(t,S,w){return normalizeSelection(w,fixTables(w,S),e)}})}function normalizeTableCellAlign(e){return e===`left`||e===`right`||e===`center`?e:null}function parseAlign(e){let t=(e.style.textAlign||``).trim().toLowerCase(),S=(e.getAttribute(`align`)||``).trim().toLowerCase();return normalizeTableCellAlign(t||S)}function normalizeTableCellAlignFromAttributes(e){return normalizeTableCellAlign(e?.align)}function createAlignAttribute(){return{default:null,parseHTML:e=>parseAlign(e),renderHTML:e=>e.align?{style:`text-align: ${e.align}`}:{}}}var TableCell=Node3.create({name:`tableCell`,addOptions(){return{HTMLAttributes:{}}},content:`block+`,addAttributes(){return{colspan:{default:1},rowspan:{default:1},colwidth:{default:null,parseHTML:e=>{var t,S;let w=e.getAttribute(`colwidth`),E=w?w.split(`,`).map(e=>parseInt(e,10)):null;if(!E){let t=e.closest(`table`)?.querySelectorAll(`colgroup > col`),S=Array.from(e.parentElement?.children||[]).indexOf(e);if(S&&S>-1&&t&&t[S]){let e=t[S].getAttribute(`width`);return e?[parseInt(e,10)]:null}}return E}},align:createAlignAttribute()}},tableRole:`cell`,isolating:!0,parseHTML(){return[{tag:`td`}]},renderHTML({HTMLAttributes:e}){return[`td`,mergeAttributes(this.options.HTMLAttributes,e),0]}}),TableHeader=Node3.create({name:`tableHeader`,addOptions(){return{HTMLAttributes:{}}},content:`block+`,addAttributes(){return{colspan:{default:1},rowspan:{default:1},colwidth:{default:null,parseHTML:e=>{let t=e.getAttribute(`colwidth`);return t?t.split(`,`).map(e=>parseInt(e,10)):null}},align:createAlignAttribute()}},tableRole:`header_cell`,isolating:!0,parseHTML(){return[{tag:`th`}]},renderHTML({HTMLAttributes:e}){return[`th`,mergeAttributes(this.options.HTMLAttributes,e),0]}}),TableRow=Node3.create({name:`tableRow`,addOptions(){return{HTMLAttributes:{}}},content:`(tableCell | tableHeader)*`,tableRole:`row`,parseHTML(){return[{tag:`tr`}]},renderHTML({HTMLAttributes:e}){return[`tr`,mergeAttributes(this.options.HTMLAttributes,e),0]}});function getColStyleDeclaration(e,t){return t?[`width`,`${Math.max(t,e)}px`]:[`min-width`,`${e}px`]}function updateColumns(e,t,S,w,E,D){var O;let k=0,j=!0,F=t.firstChild,L=e.firstChild;if(L!==null)for(let e=0,S=0;e<L.childCount;e+=1){let{colspan:O,colwidth:B}=L.child(e).attrs;for(let e=0;e<O;e+=1,S+=1){let O=E===S?D:B&&B[e],L=O?`${O}px`:``;if(k+=O||w,O||(j=!1),F){if(F.style.width!==L){let[e,t]=getColStyleDeclaration(w,O);F.style.setProperty(e,t)}F=F.nextSibling}else{let e=document.createElement(`col`),[S,E]=getColStyleDeclaration(w,O);e.style.setProperty(S,E),t.appendChild(e)}}}for(;F;){let e=F.nextSibling;(O=F.parentNode)==null||O.removeChild(F),F=e}let B=e.attrs.style&&typeof e.attrs.style==`string`&&/\bwidth\s*:/i.test(e.attrs.style);j&&!B?(S.style.width=`${k}px`,S.style.minWidth=``):(S.style.width=``,S.style.minWidth=`${k}px`)}var TableView=class{constructor(e,t){this.node=e,this.cellMinWidth=t,this.dom=document.createElement(`div`),this.dom.className=`tableWrapper`,this.table=this.dom.appendChild(document.createElement(`table`)),e.attrs.style&&(this.table.style.cssText=e.attrs.style),this.colgroup=this.table.appendChild(document.createElement(`colgroup`)),updateColumns(e,this.colgroup,this.table,t),this.contentDOM=this.table.appendChild(document.createElement(`tbody`))}update(e){return e.type===this.node.type?(this.node=e,updateColumns(e,this.colgroup,this.table,this.cellMinWidth),!0):!1}ignoreMutation(e){let t=e.target,S=this.dom.contains(t),w=this.contentDOM.contains(t);return!!(S&&!w&&(e.type===`attributes`||e.type===`childList`||e.type===`characterData`))}};function createColGroup(e,t,S,w){let E=0,D=!0,O=[],k=e.firstChild;if(!k)return{};for(let e=0,j=0;e<k.childCount;e+=1){let{colspan:F,colwidth:L}=k.child(e).attrs;for(let e=0;e<F;e+=1,j+=1){let k=S===j?w:L&&L[e];E+=k||t,k||(D=!1);let[F,B]=getColStyleDeclaration(t,k);O.push([`col`,{style:`${F}: ${B}`}])}}let j=D?`${E}px`:``,F=D?``:`${E}px`;return{colgroup:[`colgroup`,{},...O],tableWidth:j,tableMinWidth:F}}function createCell(e,t){return t?e.createChecked(null,t):e.createAndFill()}function getTableNodeTypes(e){if(e.cached.tableNodeTypes)return e.cached.tableNodeTypes;let t={};return Object.keys(e.nodes).forEach(S=>{let w=e.nodes[S];w.spec.tableRole&&(t[w.spec.tableRole]=w)}),e.cached.tableNodeTypes=t,t}function createTable(e,t,S,w,E){let D=getTableNodeTypes(e),O=[],k=[];for(let e=0;e<S;e+=1){let e=createCell(D.cell,E);if(e&&k.push(e),w){let e=createCell(D.header_cell,E);e&&O.push(e)}}let j=[];for(let e=0;e<t;e+=1)j.push(D.row.createChecked(null,w&&e===0?O:k));return D.table.createChecked(null,j)}function isCellSelection(e){return e instanceof CellSelection}var deleteTableWhenAllCellsSelected=({editor:e})=>{let{selection:t}=e.state;if(!isCellSelection(t))return!1;let S=0;return findParentNodeClosestToPos(t.ranges[0].$from,e=>e.type.name===`table`)?.node.descendants(e=>{if(e.type.name===`table`)return!1;[`tableCell`,`tableHeader`].includes(e.type.name)&&(S+=1)}),S===t.ranges.length?(e.commands.deleteTable(),!0):!1},DEFAULT_CELL_LINE_SEPARATOR=``;function collapseWhitespace(e){return(e||``).replace(/\s+/g,` `).trim()}function renderTableToMarkdown(e,t,S={}){var w;let E=S.cellLineSeparator??``;if(!e||!e.content||e.content.length===0)return``;let D=[];e.content.forEach(e=>{let S=[];e.content&&e.content.forEach(e=>{let w=``;w=e.content&&Array.isArray(e.content)&&e.content.length>1?e.content.map(e=>t.renderChildren(e)).join(E):e.content?t.renderChildren(e.content):``;let D=collapseWhitespace(w),O=e.type===`tableHeader`,k=normalizeTableCellAlignFromAttributes(e.attrs);S.push({text:D,isHeader:O,align:k})}),D.push(S)});let O=D.reduce((e,t)=>Math.max(e,t.length),0);if(O===0)return``;let k=Array(O).fill(0);D.forEach(e=>{var t;for(let t=0;t<O;t+=1){let S=(e[t]?.text||``).length;S>k[t]&&(k[t]=S),k[t]<3&&(k[t]=3)}});let j=(e,t)=>e+` `.repeat(Math.max(0,t-e.length)),F=D[0],L=F.some(e=>e.isHeader),B=Array(O).fill(null);D.forEach(e=>{var t;for(let t=0;t<O;t+=1)!B[t]&&e[t]?.align&&(B[t]=e[t].align)});let H=`
215
+ 3. "-" cannot repeat`);Ns.customSchemes.push([e,t])}function Rs(){Ns.scanner=Xr(Ns.customSchemes);for(let e=0;e<Ns.tokenQueue.length;e++)Ns.tokenQueue[e][1]({scanner:Ns.scanner});Ns.parser=Ts(Ns.scanner.tokens);for(let e=0;e<Ns.pluginQueue.length;e++)Ns.pluginQueue[e][1]({scanner:Ns.scanner,parser:Ns.parser});return Ns.initialized=!0,Ns}function $s(e){return Ns.initialized||Rs(),Ds(Ns.parser.start,e,Zr(Ns.scanner.start,e))}$s.scan=Zr;function ec(e,t=null,S=null){if(t&&typeof t==`object`){if(S)throw Error(`linkifyjs: Invalid link type ${t}; must be a string`);S=t,t=null}let w=new Gi(S),E=$s(e),D=[];for(let e=0;e<E.length;e++){let S=E[e];S.isLink&&(!t||S.t===t)&&w.check(S)&&D.push(S.toFormattedObject(w))}return D}e.find=ec,e.registerCustomProtocol=Is,e.reset=Ps,e.tokenize=$s})),import_linkify=require_linkify(),UNICODE_WHITESPACE_PATTERN=`[\0- \xA0 ᠎ -\u2029  ]`,UNICODE_WHITESPACE_REGEX=new RegExp(UNICODE_WHITESPACE_PATTERN),UNICODE_WHITESPACE_REGEX_END=RegExp(`${UNICODE_WHITESPACE_PATTERN}$`),UNICODE_WHITESPACE_REGEX_GLOBAL=new RegExp(UNICODE_WHITESPACE_PATTERN,`g`);function isValidLinkStructure(e){return e.length===1?e[0].isLink:e.length===3&&e[1].isLink?[`()`,`[]`].includes(e[0].value+e[2].value):!1}function autolink$1(e){return new Plugin({key:new PluginKey(`autolink`),appendTransaction:(t,S,w)=>{let E=t.some(e=>e.docChanged)&&!S.doc.eq(w.doc),D=t.some(e=>e.getMeta(`preventAutolink`));if(!E||D)return;let{tr:O}=w;if(getChangedRanges(combineTransactionSteps(S.doc,[...t])).forEach(({newRange:t})=>{let S=findChildrenInRange(w.doc,t,e=>e.isTextblock),E,D;if(S.length>1)E=S[0],D=w.doc.textBetween(E.pos,E.pos+E.node.nodeSize,void 0,` `);else if(S.length){let e=w.doc.textBetween(t.from,t.to,` `,` `);if(!UNICODE_WHITESPACE_REGEX_END.test(e))return;E=S[0],D=w.doc.textBetween(E.pos,t.to,void 0,` `)}if(E&&D){let t=D.split(UNICODE_WHITESPACE_REGEX).filter(Boolean);if(t.length<=0)return!1;let S=t[t.length-1],k=E.pos+D.lastIndexOf(S);if(!S)return!1;let j=(0,import_linkify.tokenize)(S).map(t=>t.toObject(e.defaultProtocol));if(!isValidLinkStructure(j))return!1;j.filter(e=>e.isLink).map(e=>({...e,from:k+e.start+1,to:k+e.end+1})).filter(e=>w.schema.marks.code?!w.doc.rangeHasMark(e.from,e.to,w.schema.marks.code):!0).filter(t=>e.validate(t.value)).filter(t=>e.shouldAutoLink(t.value)).forEach(t=>{getMarksBetween(t.from,t.to,w.doc).some(t=>t.mark.type===e.type)||O.addMark(t.from,t.to,e.type.create({href:t.href}))})}}),O.steps.length)return O}})}function clickHandler(e){return new Plugin({key:new PluginKey(`handleClickLink`),props:{handleClick:(t,S,w)=>{var E,D;if(w.button!==0||!t.editable)return!1;let O=null;if(w.target instanceof HTMLAnchorElement)O=w.target;else{let t=w.target;if(!t)return!1;let S=e.editor.view.dom;O=t.closest(`a`),O&&!S.contains(O)&&(O=null)}if(!O)return!1;let k=!1;if(e.enableClickSelection&&(k=e.editor.commands.extendMarkRange(e.type.name)),e.openOnClick){let S=getAttributes(t.state,e.type.name),w=O.href??S.href,E=O.target??S.target;w&&(window.open(w,E),k=!0)}return k}}})}function pasteHandler(e){return new Plugin({key:new PluginKey(`handlePasteLink`),props:{handlePaste:(t,S,w)=>{let{shouldAutoLink:E}=e,{state:D}=t,{selection:O}=D,{empty:k}=O;if(k)return!1;let j=``;w.content.forEach(e=>{j+=e.textContent});let F=(0,import_linkify.find)(j,{defaultProtocol:e.defaultProtocol}).find(e=>e.isLink&&e.value===j);return!j||!F||E!==void 0&&!E(F.value)?!1:e.editor.commands.setMark(e.type,{href:F.href})}}})}function isAllowedUri(e,t){let S=[`http`,`https`,`ftp`,`ftps`,`mailto`,`tel`,`callto`,`sms`,`cid`,`xmpp`];return t&&t.forEach(e=>{let t=typeof e==`string`?e:e.scheme;t&&S.push(t)}),!e||e.replace(UNICODE_WHITESPACE_REGEX_GLOBAL,``).match(RegExp(`^(?:(?:${S.join(`|`)}):|[^a-z]|[a-z0-9+.-]+(?:[^a-z+.-:]|$))`,`i`))}var Link=Mark.create({name:`link`,priority:1e3,keepOnSplit:!1,exitable:!0,onCreate(){this.options.validate&&!this.options.shouldAutoLink&&(this.options.shouldAutoLink=this.options.validate,console.warn("The `validate` option is deprecated. Rename to the `shouldAutoLink` option instead.")),this.options.protocols.forEach(e=>{if(typeof e==`string`){(0,import_linkify.registerCustomProtocol)(e);return}(0,import_linkify.registerCustomProtocol)(e.scheme,e.optionalSlashes)})},onDestroy(){(0,import_linkify.reset)()},inclusive(){return this.options.autolink},addOptions(){return{openOnClick:!0,enableClickSelection:!1,linkOnPaste:!0,autolink:!0,protocols:[],defaultProtocol:`http`,HTMLAttributes:{target:`_blank`,rel:`noopener noreferrer nofollow`,class:null},isAllowedUri:(e,t)=>!!isAllowedUri(e,t.protocols),validate:e=>!!e,shouldAutoLink:e=>{let t=/^[a-z][a-z0-9+.-]*:\/\//i.test(e),S=/^[a-z][a-z0-9+.-]*:/i.test(e);if(t||S&&!e.includes(`@`))return!0;let w=(e.includes(`@`)?e.split(`@`).pop():e).split(/[/?#:]/)[0];return!(/^\d{1,3}(\.\d{1,3}){3}$/.test(w)||!/\./.test(w))}}},addAttributes(){return{href:{default:null,parseHTML(e){return e.getAttribute(`href`)}},target:{default:this.options.HTMLAttributes.target},rel:{default:this.options.HTMLAttributes.rel},class:{default:this.options.HTMLAttributes.class},title:{default:null}}},parseHTML(){return[{tag:`a[href]`,getAttrs:e=>{let t=e.getAttribute(`href`);return!t||!this.options.isAllowedUri(t,{defaultValidate:e=>!!isAllowedUri(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?!1:null}}]},renderHTML({HTMLAttributes:e}){return this.options.isAllowedUri(e.href,{defaultValidate:e=>!!isAllowedUri(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?[`a`,mergeAttributes(this.options.HTMLAttributes,e),0]:[`a`,mergeAttributes(this.options.HTMLAttributes,{...e,href:``}),0]},markdownTokenName:`link`,parseMarkdown:(e,t)=>t.applyMark(`link`,t.parseInline(e.tokens||[]),{href:e.href,title:e.title||null}),renderMarkdown:(e,t)=>{var S,w,E,D;let O=e.attrs?.href??``,k=e.attrs?.title??``,j=t.renderChildren(e);return k?`[${j}](${O} "${k}")`:`[${j}](${O})`},addCommands(){return{setLink:e=>({chain:t})=>{let{href:S}=e;return this.options.isAllowedUri(S,{defaultValidate:e=>!!isAllowedUri(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?t().setMark(this.name,e).setMeta(`preventAutolink`,!0).run():!1},toggleLink:e=>({chain:t})=>{let{href:S}=e||{};return S&&!this.options.isAllowedUri(S,{defaultValidate:e=>!!isAllowedUri(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?!1:t().toggleMark(this.name,e,{extendEmptyMarkRange:!0}).setMeta(`preventAutolink`,!0).run()},unsetLink:()=>({chain:e})=>e().unsetMark(this.name,{extendEmptyMarkRange:!0}).setMeta(`preventAutolink`,!0).run()}},addPasteRules(){return[markPasteRule({find:e=>{let t=[];if(e){let{protocols:S,defaultProtocol:w}=this.options,E=(0,import_linkify.find)(e).filter(e=>e.isLink&&this.options.isAllowedUri(e.value,{defaultValidate:e=>!!isAllowedUri(e,S),protocols:S,defaultProtocol:w}));E.length&&E.forEach(e=>{this.options.shouldAutoLink(e.value)&&t.push({text:e.value,data:{href:e.href},index:e.start})})}return t},type:this.type,getAttributes:e=>{var t;return{href:e.data?.href}}})]},addProseMirrorPlugins(){let e=[],{protocols:t,defaultProtocol:S}=this.options;return this.options.autolink&&e.push(autolink$1({type:this.type,defaultProtocol:this.options.defaultProtocol,validate:e=>this.options.isAllowedUri(e,{defaultValidate:e=>!!isAllowedUri(e,t),protocols:t,defaultProtocol:S}),shouldAutoLink:this.options.shouldAutoLink})),e.push(clickHandler({type:this.type,editor:this.editor,openOnClick:this.options.openOnClick===`whenNotEditable`?!0:this.options.openOnClick,enableClickSelection:this.options.enableClickSelection})),this.options.linkOnPaste&&e.push(pasteHandler({editor:this.editor,defaultProtocol:this.options.defaultProtocol,type:this.type,shouldAutoLink:this.options.shouldAutoLink})),e}}),index_default$5=Link,inputRegex$4=/(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))$/,pasteRegex$2=/(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))/g,Highlight=Mark.create({name:`highlight`,addOptions(){return{multicolor:!1,HTMLAttributes:{}}},addAttributes(){return this.options.multicolor?{color:{default:null,parseHTML:e=>e.getAttribute(`data-color`)||e.style.backgroundColor,renderHTML:e=>e.color?{"data-color":e.color,style:`background-color: ${e.color}; color: inherit`}:{}}}:{}},parseHTML(){return[{tag:`mark`}]},renderHTML({HTMLAttributes:e}){return[`mark`,mergeAttributes(this.options.HTMLAttributes,e),0]},renderMarkdown:(e,t)=>`==${t.renderChildren(e)}==`,parseMarkdown:(e,t)=>t.applyMark(`highlight`,t.parseInline(e.tokens||[])),markdownTokenizer:{name:`highlight`,level:`inline`,start:e=>e.indexOf(`==`),tokenize(e,t,S){let w=/^(==)([^=]+)(==)/.exec(e);if(w){let e=w[2].trim(),t=S.inlineTokens(e);return{type:`highlight`,raw:w[0],text:e,tokens:t}}}},addCommands(){return{setHighlight:e=>({commands:t})=>t.setMark(this.name,e),toggleHighlight:e=>({commands:t})=>t.toggleMark(this.name,e),unsetHighlight:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-h":()=>this.editor.commands.toggleHighlight()}},addInputRules(){return[markInputRule({find:inputRegex$4,type:this.type})]},addPasteRules(){return[markPasteRule({find:pasteRegex$2,type:this.type})]}}),index_default$4=Highlight;let readFromCache,addToCache;if(typeof WeakMap<`u`){let e=new WeakMap;readFromCache=t=>e.get(t),addToCache=(t,S)=>(e.set(t,S),S)}else{let e=[],t=10,S=0;readFromCache=t=>{for(let S=0;S<e.length;S+=2)if(e[S]==t)return e[S+1]},addToCache=(t,w)=>(S==10&&(S=0),e[S++]=t,e[S++]=w)}var TableMap=class{constructor(e,t,S,w){this.width=e,this.height=t,this.map=S,this.problems=w}findCell(e){for(let t=0;t<this.map.length;t++){let S=this.map[t];if(S!=e)continue;let w=t%this.width,E=t/this.width|0,D=w+1,O=E+1;for(let e=1;D<this.width&&this.map[t+e]==S;e++)D++;for(let e=1;O<this.height&&this.map[t+this.width*e]==S;e++)O++;return{left:w,top:E,right:D,bottom:O}}throw RangeError(`No cell with offset ${e} found`)}colCount(e){for(let t=0;t<this.map.length;t++)if(this.map[t]==e)return t%this.width;throw RangeError(`No cell with offset ${e} found`)}nextCell(e,t,S){let{left:w,right:E,top:D,bottom:O}=this.findCell(e);return t==`horiz`?(S<0?w==0:E==this.width)?null:this.map[D*this.width+(S<0?w-1:E)]:(S<0?D==0:O==this.height)?null:this.map[w+this.width*(S<0?D-1:O)]}rectBetween(e,t){let{left:S,right:w,top:E,bottom:D}=this.findCell(e),{left:O,right:k,top:j,bottom:F}=this.findCell(t);return{left:Math.min(S,O),top:Math.min(E,j),right:Math.max(w,k),bottom:Math.max(D,F)}}cellsInRect(e){let t=[],S={};for(let w=e.top;w<e.bottom;w++)for(let E=e.left;E<e.right;E++){let D=w*this.width+E,O=this.map[D];S[O]||(S[O]=!0,!(E==e.left&&E&&this.map[D-1]==O||w==e.top&&w&&this.map[D-this.width]==O)&&t.push(O))}return t}positionAt(e,t,S){for(let w=0,E=0;;w++){let D=E+S.child(w).nodeSize;if(w==e){let S=t+e*this.width,w=(e+1)*this.width;for(;S<w&&this.map[S]<E;)S++;return S==w?D-1:this.map[S]}E=D}}static get(e){return readFromCache(e)||addToCache(e,computeMap(e))}};function computeMap(e){if(e.type.spec.tableRole!=`table`)throw RangeError(`Not a table node: `+e.type.name);let t=findWidth(e),S=e.childCount,w=[],E=0,D=null,O=[];for(let e=0,E=t*S;e<E;e++)w[e]=0;for(let k=0,j=0;k<S;k++){let F=e.child(k);j++;for(let e=0;;e++){for(;E<w.length&&w[E]!=0;)E++;if(e==F.childCount)break;let L=F.child(e),{colspan:B,rowspan:H,colwidth:q}=L.attrs;for(let e=0;e<H;e++){if(e+k>=S){(D||=[]).push({type:`overlong_rowspan`,pos:j,n:H-e});break}let F=E+e*t;for(let e=0;e<B;e++){w[F+e]==0?w[F+e]=j:(D||=[]).push({type:`collision`,row:k,pos:j,n:B-e});let S=q&&q[e];if(S){let w=(F+e)%t*2,E=O[w];E==null||E!=S&&O[w+1]==1?(O[w]=S,O[w+1]=1):E==S&&O[w+1]++}}}E+=B,j+=L.nodeSize}let L=(k+1)*t,B=0;for(;E<L;)w[E++]==0&&B++;B&&(D||=[]).push({type:`missing`,row:k,n:B}),j++}(t===0||S===0)&&(D||=[]).push({type:`zero_sized`});let k=new TableMap(t,S,w,D),j=!1;for(let e=0;!j&&e<O.length;e+=2)O[e]!=null&&O[e+1]<S&&(j=!0);return j&&findBadColWidths(k,O,e),k}function findWidth(e){let t=-1,S=!1;for(let w=0;w<e.childCount;w++){let E=e.child(w),D=0;if(S)for(let t=0;t<w;t++){let S=e.child(t);for(let e=0;e<S.childCount;e++){let E=S.child(e);t+E.attrs.rowspan>w&&(D+=E.attrs.colspan)}}for(let e=0;e<E.childCount;e++){let t=E.child(e);D+=t.attrs.colspan,t.attrs.rowspan>1&&(S=!0)}t==-1?t=D:t!=D&&(t=Math.max(t,D))}return t}function findBadColWidths(e,t,S){e.problems||=[];let w={};for(let E=0;E<e.map.length;E++){let D=e.map[E];if(w[D])continue;w[D]=!0;let O=S.nodeAt(D);if(!O)throw RangeError(`No cell with offset ${D} found`);let k=null,j=O.attrs;for(let S=0;S<j.colspan;S++){let w=t[(E+S)%e.width*2];w!=null&&(!j.colwidth||j.colwidth[S]!=w)&&((k||=freshColWidth(j))[S]=w)}k&&e.problems.unshift({type:`colwidth mismatch`,pos:D,colwidth:k})}}function freshColWidth(e){if(e.colwidth)return e.colwidth.slice();let t=[];for(let S=0;S<e.colspan;S++)t.push(0);return t}function tableNodeTypes(e){let t=e.cached.tableNodeTypes;if(!t){t=e.cached.tableNodeTypes={};for(let S in e.nodes){let w=e.nodes[S],E=w.spec.tableRole;E&&(t[E]=w)}}return t}const tableEditingKey=new PluginKey(`selectingCells`);function cellAround(e){for(let t=e.depth-1;t>0;t--)if(e.node(t).type.spec.tableRole==`row`)return e.node(0).resolve(e.before(t+1));return null}function cellWrapping(e){for(let t=e.depth;t>0;t--){let S=e.node(t).type.spec.tableRole;if(S===`cell`||S===`header_cell`)return e.node(t)}return null}function isInTable(e){let t=e.selection.$head;for(let e=t.depth;e>0;e--)if(t.node(e).type.spec.tableRole==`row`)return!0;return!1}function selectionCell(e){let t=e.selection;if(`$anchorCell`in t&&t.$anchorCell)return t.$anchorCell.pos>t.$headCell.pos?t.$anchorCell:t.$headCell;if(`node`in t&&t.node&&t.node.type.spec.tableRole==`cell`)return t.$anchor;let S=cellAround(t.$head)||cellNear(t.$head);if(S)return S;throw RangeError(`No cell found around position ${t.head}`)}function cellNear(e){for(let t=e.nodeAfter,S=e.pos;t;t=t.firstChild,S++){let w=t.type.spec.tableRole;if(w==`cell`||w==`header_cell`)return e.doc.resolve(S)}for(let t=e.nodeBefore,S=e.pos;t;t=t.lastChild,S--){let w=t.type.spec.tableRole;if(w==`cell`||w==`header_cell`)return e.doc.resolve(S-t.nodeSize)}}function pointsAtCell(e){return e.parent.type.spec.tableRole==`row`&&!!e.nodeAfter}function moveCellForward(e){return e.node(0).resolve(e.pos+e.nodeAfter.nodeSize)}function inSameTable(e,t){return e.depth==t.depth&&e.pos>=t.start(-1)&&e.pos<=t.end(-1)}function nextCell(e,t,S){let w=e.node(-1),E=TableMap.get(w),D=e.start(-1),O=E.nextCell(e.pos-D,t,S);return O==null?null:e.node(0).resolve(D+O)}function removeColSpan(e,t,S=1){let w={...e,colspan:e.colspan-S};return w.colwidth&&(w.colwidth=w.colwidth.slice(),w.colwidth.splice(t,S),w.colwidth.some(e=>e>0)||(w.colwidth=null)),w}function addColSpan(e,t,S=1){let w={...e,colspan:e.colspan+S};if(w.colwidth){w.colwidth=w.colwidth.slice();for(let e=0;e<S;e++)w.colwidth.splice(t,0,0)}return w}function columnIsHeader(e,t,S){let w=tableNodeTypes(t.type.schema).header_cell;for(let E=0;E<e.height;E++)if(t.nodeAt(e.map[S+E*e.width]).type!=w)return!1;return!0}var CellSelection=class e extends Selection$1{constructor(e,t=e){let S=e.node(-1),w=TableMap.get(S),E=e.start(-1),D=w.rectBetween(e.pos-E,t.pos-E),O=e.node(0),k=w.cellsInRect(D).filter(e=>e!=t.pos-E);k.unshift(t.pos-E);let j=k.map(e=>{let t=S.nodeAt(e);if(!t)throw RangeError(`No cell with offset ${e} found`);let w=E+e+1;return new SelectionRange(O.resolve(w),O.resolve(w+t.content.size))});super(j[0].$from,j[0].$to,j),this.$anchorCell=e,this.$headCell=t}map(t,S){let w=t.resolve(S.map(this.$anchorCell.pos)),E=t.resolve(S.map(this.$headCell.pos));if(pointsAtCell(w)&&pointsAtCell(E)&&inSameTable(w,E)){let t=this.$anchorCell.node(-1)!=w.node(-1);return t&&this.isRowSelection()?e.rowSelection(w,E):t&&this.isColSelection()?e.colSelection(w,E):new e(w,E)}return TextSelection.between(w,E)}content(){let e=this.$anchorCell.node(-1),t=TableMap.get(e),S=this.$anchorCell.start(-1),w=t.rectBetween(this.$anchorCell.pos-S,this.$headCell.pos-S),E={},D=[];for(let S=w.top;S<w.bottom;S++){let O=[];for(let D=S*t.width+w.left,k=w.left;k<w.right;k++,D++){let S=t.map[D];if(E[S])continue;E[S]=!0;let k=t.findCell(S),j=e.nodeAt(S);if(!j)throw RangeError(`No cell with offset ${S} found`);let F=w.left-k.left,L=k.right-w.right;if(F>0||L>0){let e=j.attrs;if(F>0&&(e=removeColSpan(e,0,F)),L>0&&(e=removeColSpan(e,e.colspan-L,L)),k.left<w.left){if(j=j.type.createAndFill(e),!j)throw RangeError(`Could not create cell with attrs ${JSON.stringify(e)}`)}else j=j.type.create(e,j.content)}if(k.top<w.top||k.bottom>w.bottom){let e={...j.attrs,rowspan:Math.min(k.bottom,w.bottom)-Math.max(k.top,w.top)};j=k.top<w.top?j.type.createAndFill(e):j.type.create(e,j.content)}O.push(j)}D.push(e.child(S).copy(Fragment.from(O)))}let O=this.isColSelection()&&this.isRowSelection()?e:D;return new Slice(Fragment.from(O),1,1)}replace(e,t=Slice.empty){let S=e.steps.length,w=this.ranges;for(let E=0;E<w.length;E++){let{$from:D,$to:O}=w[E],k=e.mapping.slice(S);e.replace(k.map(D.pos),k.map(O.pos),E?Slice.empty:t)}let E=Selection$1.findFrom(e.doc.resolve(e.mapping.slice(S).map(this.to)),-1);E&&e.setSelection(E)}replaceWith(e,t){this.replace(e,new Slice(Fragment.from(t),0,0))}forEachCell(e){let t=this.$anchorCell.node(-1),S=TableMap.get(t),w=this.$anchorCell.start(-1),E=S.cellsInRect(S.rectBetween(this.$anchorCell.pos-w,this.$headCell.pos-w));for(let S=0;S<E.length;S++)e(t.nodeAt(E[S]),w+E[S])}isColSelection(){let e=this.$anchorCell.index(-1),t=this.$headCell.index(-1);if(Math.min(e,t)>0)return!1;let S=e+this.$anchorCell.nodeAfter.attrs.rowspan,w=t+this.$headCell.nodeAfter.attrs.rowspan;return Math.max(S,w)==this.$headCell.node(-1).childCount}static colSelection(t,S=t){let w=t.node(-1),E=TableMap.get(w),D=t.start(-1),O=E.findCell(t.pos-D),k=E.findCell(S.pos-D),j=t.node(0);return O.top<=k.top?(O.top>0&&(t=j.resolve(D+E.map[O.left])),k.bottom<E.height&&(S=j.resolve(D+E.map[E.width*(E.height-1)+k.right-1]))):(k.top>0&&(S=j.resolve(D+E.map[k.left])),O.bottom<E.height&&(t=j.resolve(D+E.map[E.width*(E.height-1)+O.right-1]))),new e(t,S)}isRowSelection(){let e=this.$anchorCell.node(-1),t=TableMap.get(e),S=this.$anchorCell.start(-1),w=t.colCount(this.$anchorCell.pos-S),E=t.colCount(this.$headCell.pos-S);if(Math.min(w,E)>0)return!1;let D=w+this.$anchorCell.nodeAfter.attrs.colspan,O=E+this.$headCell.nodeAfter.attrs.colspan;return Math.max(D,O)==t.width}eq(t){return t instanceof e&&t.$anchorCell.pos==this.$anchorCell.pos&&t.$headCell.pos==this.$headCell.pos}static rowSelection(t,S=t){let w=t.node(-1),E=TableMap.get(w),D=t.start(-1),O=E.findCell(t.pos-D),k=E.findCell(S.pos-D),j=t.node(0);return O.left<=k.left?(O.left>0&&(t=j.resolve(D+E.map[O.top*E.width])),k.right<E.width&&(S=j.resolve(D+E.map[E.width*(k.top+1)-1]))):(k.left>0&&(S=j.resolve(D+E.map[k.top*E.width])),O.right<E.width&&(t=j.resolve(D+E.map[E.width*(O.top+1)-1]))),new e(t,S)}toJSON(){return{type:`cell`,anchor:this.$anchorCell.pos,head:this.$headCell.pos}}static fromJSON(t,S){return new e(t.resolve(S.anchor),t.resolve(S.head))}static create(t,S,w=S){return new e(t.resolve(S),t.resolve(w))}getBookmark(){return new CellBookmark(this.$anchorCell.pos,this.$headCell.pos)}};CellSelection.prototype.visible=!1,Selection$1.jsonID(`cell`,CellSelection);var CellBookmark=class e{constructor(e,t){this.anchor=e,this.head=t}map(t){return new e(t.map(this.anchor),t.map(this.head))}resolve(e){let t=e.resolve(this.anchor),S=e.resolve(this.head);return t.parent.type.spec.tableRole==`row`&&S.parent.type.spec.tableRole==`row`&&t.index()<t.parent.childCount&&S.index()<S.parent.childCount&&inSameTable(t,S)?new CellSelection(t,S):Selection$1.near(S,1)}};function drawCellSelection(e){if(!(e.selection instanceof CellSelection))return null;let t=[];return e.selection.forEachCell((e,S)=>{t.push(Decoration.node(S,S+e.nodeSize,{class:`selectedCell`}))}),DecorationSet.create(e.doc,t)}function isCellBoundarySelection({$from:e,$to:t}){if(e.pos==t.pos||e.pos<t.pos-6)return!1;let S=e.pos,w=t.pos,E=e.depth;for(;E>=0&&!(e.after(E+1)<e.end(E));E--,S++);for(let e=t.depth;e>=0&&!(t.before(e+1)>t.start(e));e--,w--);return S==w&&/row|table/.test(e.node(E).type.spec.tableRole)}function isTextSelectionAcrossCells({$from:e,$to:t}){let S,w;for(let t=e.depth;t>0;t--){let w=e.node(t);if(w.type.spec.tableRole===`cell`||w.type.spec.tableRole===`header_cell`){S=w;break}}for(let e=t.depth;e>0;e--){let S=t.node(e);if(S.type.spec.tableRole===`cell`||S.type.spec.tableRole===`header_cell`){w=S;break}}return S!==w&&t.parentOffset===0}function normalizeSelection(e,t,S){let w=(t||e).selection,E=(t||e).doc,D,O;if(w instanceof NodeSelection&&(O=w.node.type.spec.tableRole)){if(O==`cell`||O==`header_cell`)D=CellSelection.create(E,w.from);else if(O==`row`){let e=E.resolve(w.from+1);D=CellSelection.rowSelection(e,e)}else if(!S){let e=TableMap.get(w.node),t=w.from+1,S=t+e.map[e.width*e.height-1];D=CellSelection.create(E,t+1,S)}}else w instanceof TextSelection&&isCellBoundarySelection(w)?D=TextSelection.create(E,w.from):w instanceof TextSelection&&isTextSelectionAcrossCells(w)&&(D=TextSelection.create(E,w.$from.start(),w.$from.end()));return D&&(t||=e.tr).setSelection(D),t}const fixTablesKey=new PluginKey(`fix-tables`);function changedDescendants(e,t,S,w){let E=e.childCount,D=t.childCount;outer:for(let O=0,k=0;O<D;O++){let D=t.child(O);for(let t=k,w=Math.min(E,O+3);t<w;t++)if(e.child(t)==D){k=t+1,S+=D.nodeSize;continue outer}w(D,S),k<E&&e.child(k).sameMarkup(D)?changedDescendants(e.child(k),D,S+1,w):D.nodesBetween(0,D.content.size,w,S+1),S+=D.nodeSize}}function fixTables(e,t){let S,w=(t,w)=>{t.type.spec.tableRole==`table`&&(S=fixTable(e,t,w,S))};return t?t.doc!=e.doc&&changedDescendants(t.doc,e.doc,0,w):e.doc.descendants(w),S}function fixTable(e,t,S,w){let E=TableMap.get(t);if(!E.problems)return w;w||=e.tr;let D=[];for(let e=0;e<E.height;e++)D.push(0);for(let e=0;e<E.problems.length;e++){let O=E.problems[e];if(O.type==`collision`){let e=t.nodeAt(O.pos);if(!e)continue;let E=e.attrs;for(let e=0;e<E.rowspan;e++)D[O.row+e]+=O.n;w.setNodeMarkup(w.mapping.map(S+1+O.pos),null,removeColSpan(E,E.colspan-O.n,O.n))}else if(O.type==`missing`)D[O.row]+=O.n;else if(O.type==`overlong_rowspan`){let e=t.nodeAt(O.pos);if(!e)continue;w.setNodeMarkup(w.mapping.map(S+1+O.pos),null,{...e.attrs,rowspan:e.attrs.rowspan-O.n})}else if(O.type==`colwidth mismatch`){let e=t.nodeAt(O.pos);if(!e)continue;w.setNodeMarkup(w.mapping.map(S+1+O.pos),null,{...e.attrs,colwidth:O.colwidth})}else if(O.type==`zero_sized`){let e=w.mapping.map(S);w.delete(e,e+t.nodeSize)}}let O,k;for(let e=0;e<D.length;e++)D[e]&&(O??=e,k=e);for(let j=0,F=S+1;j<E.height;j++){let S=t.child(j),E=F+S.nodeSize,L=D[j];if(L>0){let t=`cell`;S.firstChild&&(t=S.firstChild.type.spec.tableRole);let D=[];for(let S=0;S<L;S++){let S=tableNodeTypes(e.schema)[t].createAndFill();S&&D.push(S)}let B=(j==0||O==j-1)&&k==j?F+1:E-1;w.insert(w.mapping.map(B),D)}F=E}return w.setMeta(fixTablesKey,{fixTables:!0})}function selectedRect(e){let t=e.selection,S=selectionCell(e),w=S.node(-1),E=S.start(-1),D=TableMap.get(w);return{...t instanceof CellSelection?D.rectBetween(t.$anchorCell.pos-E,t.$headCell.pos-E):D.findCell(S.pos-E),tableStart:E,map:D,table:w}}function addColumn(e,{map:t,tableStart:S,table:w},E){let D=E>0?-1:0;columnIsHeader(t,w,E+D)&&(D=E==0||E==t.width?null:0);for(let O=0;O<t.height;O++){let k=O*t.width+E;if(E>0&&E<t.width&&t.map[k-1]==t.map[k]){let D=t.map[k],j=w.nodeAt(D);e.setNodeMarkup(e.mapping.map(S+D),null,addColSpan(j.attrs,E-t.colCount(D))),O+=j.attrs.rowspan-1}else{let j=D==null?tableNodeTypes(w.type.schema).cell:w.nodeAt(t.map[k+D]).type,F=t.positionAt(O,E,w);e.insert(e.mapping.map(S+F),j.createAndFill())}}return e}function addColumnBefore(e,t){if(!isInTable(e))return!1;if(t){let S=selectedRect(e);t(addColumn(e.tr,S,S.left))}return!0}function addColumnAfter(e,t){if(!isInTable(e))return!1;if(t){let S=selectedRect(e);t(addColumn(e.tr,S,S.right))}return!0}function removeColumn(e,{map:t,table:S,tableStart:w},E){let D=e.mapping.maps.length;for(let O=0;O<t.height;){let k=O*t.width+E,j=t.map[k],F=S.nodeAt(j),L=F.attrs;if(E>0&&t.map[k-1]==j||E<t.width-1&&t.map[k+1]==j)e.setNodeMarkup(e.mapping.slice(D).map(w+j),null,removeColSpan(L,E-t.colCount(j)));else{let t=e.mapping.slice(D).map(w+j);e.delete(t,t+F.nodeSize)}O+=L.rowspan}}function deleteColumn(e,t){if(!isInTable(e))return!1;if(t){let S=selectedRect(e),w=e.tr;if(S.left==0&&S.right==S.map.width)return!1;for(let e=S.right-1;removeColumn(w,S,e),e!=S.left;e--){let e=S.tableStart?w.doc.nodeAt(S.tableStart-1):w.doc;if(!e)throw RangeError(`No table found`);S.table=e,S.map=TableMap.get(e)}t(w)}return!0}function rowIsHeader(e,t,S){var w;let E=tableNodeTypes(t.type.schema).header_cell;for(let w=0;w<e.width;w++)if(t.nodeAt(e.map[w+S*e.width])?.type!=E)return!1;return!0}function addRow(e,{map:t,tableStart:S,table:w},E){let D=S;for(let e=0;e<E;e++)D+=w.child(e).nodeSize;let O=[],k=E>0?-1:0;rowIsHeader(t,w,E+k)&&(k=E==0||E==t.height?null:0);for(let D=0,F=t.width*E;D<t.width;D++,F++)if(E>0&&E<t.height&&t.map[F]==t.map[F-t.width]){let E=t.map[F],O=w.nodeAt(E).attrs;e.setNodeMarkup(S+E,null,{...O,rowspan:O.rowspan+1}),D+=O.colspan-1}else{var j;let e=(k==null?tableNodeTypes(w.type.schema).cell:w.nodeAt(t.map[F+k*t.width])?.type)?.createAndFill();e&&O.push(e)}return e.insert(D,tableNodeTypes(w.type.schema).row.create(null,O)),e}function addRowBefore(e,t){if(!isInTable(e))return!1;if(t){let S=selectedRect(e);t(addRow(e.tr,S,S.top))}return!0}function addRowAfter(e,t){if(!isInTable(e))return!1;if(t){let S=selectedRect(e);t(addRow(e.tr,S,S.bottom))}return!0}function removeRow(e,{map:t,table:S,tableStart:w},E){let D=0;for(let e=0;e<E;e++)D+=S.child(e).nodeSize;let O=D+S.child(E).nodeSize,k=e.mapping.maps.length;e.delete(D+w,O+w);let j=new Set;for(let D=0,O=E*t.width;D<t.width;D++,O++){let F=t.map[O];if(!j.has(F)){if(j.add(F),E>0&&F==t.map[O-t.width]){let t=S.nodeAt(F).attrs;e.setNodeMarkup(e.mapping.slice(k).map(F+w),null,{...t,rowspan:t.rowspan-1}),D+=t.colspan-1}else if(E<t.height&&F==t.map[O+t.width]){let O=S.nodeAt(F),j=O.attrs,L=O.type.create({...j,rowspan:O.attrs.rowspan-1},O.content),B=t.positionAt(E+1,D,S);e.insert(e.mapping.slice(k).map(w+B),L),D+=j.colspan-1}}}}function deleteRow(e,t){if(!isInTable(e))return!1;if(t){let S=selectedRect(e),w=e.tr;if(S.top==0&&S.bottom==S.map.height)return!1;for(let e=S.bottom-1;removeRow(w,S,e),e!=S.top;e--){let e=S.tableStart?w.doc.nodeAt(S.tableStart-1):w.doc;if(!e)throw RangeError(`No table found`);S.table=e,S.map=TableMap.get(S.table)}t(w)}return!0}function isEmpty$3(e){let t=e.content;return t.childCount==1&&t.child(0).isTextblock&&t.child(0).childCount==0}function cellsOverlapRectangle({width:e,height:t,map:S},w){let E=w.top*e+w.left,D=E,O=(w.bottom-1)*e+w.left,k=E+(w.right-w.left-1);for(let t=w.top;t<w.bottom;t++){if(w.left>0&&S[D]==S[D-1]||w.right<e&&S[k]==S[k+1])return!0;D+=e,k+=e}for(let D=w.left;D<w.right;D++){if(w.top>0&&S[E]==S[E-e]||w.bottom<t&&S[O]==S[O+e])return!0;E++,O++}return!1}function mergeCells(e,t){let S=e.selection;if(!(S instanceof CellSelection)||S.$anchorCell.pos==S.$headCell.pos)return!1;let w=selectedRect(e),{map:E}=w;if(cellsOverlapRectangle(E,w))return!1;if(t){let S=e.tr,D={},O=Fragment.empty,k,j;for(let e=w.top;e<w.bottom;e++)for(let t=w.left;t<w.right;t++){let F=E.map[e*E.width+t],L=w.table.nodeAt(F);if(!(D[F]||!L))if(D[F]=!0,k==null)k=F,j=L;else{isEmpty$3(L)||(O=O.append(L.content));let e=S.mapping.map(F+w.tableStart);S.delete(e,e+L.nodeSize)}}if(k==null||j==null)return!0;if(S.setNodeMarkup(k+w.tableStart,null,{...addColSpan(j.attrs,j.attrs.colspan,w.right-w.left-j.attrs.colspan),rowspan:w.bottom-w.top}),O.size>0){let e=k+1+j.content.size,t=isEmpty$3(j)?k+1:e;S.replaceWith(t+w.tableStart,e+w.tableStart,O)}S.setSelection(new CellSelection(S.doc.resolve(k+w.tableStart))),t(S)}return!0}function splitCell(e,t){let S=tableNodeTypes(e.schema);return splitCellWithType(({node:e})=>S[e.type.spec.tableRole])(e,t)}function splitCellWithType(e){return(t,S)=>{let w=t.selection,E,D;if(w instanceof CellSelection){if(w.$anchorCell.pos!=w.$headCell.pos)return!1;E=w.$anchorCell.nodeAfter,D=w.$anchorCell.pos}else{var O;if(E=cellWrapping(w.$from),!E)return!1;D=cellAround(w.$from)?.pos}if(E==null||D==null||E.attrs.colspan==1&&E.attrs.rowspan==1)return!1;if(S){let O=E.attrs,k=[],j=O.colwidth;O.rowspan>1&&(O={...O,rowspan:1}),O.colspan>1&&(O={...O,colspan:1});let F=selectedRect(t),L=t.tr;for(let e=0;e<F.right-F.left;e++)k.push(j?{...O,colwidth:j&&j[e]?[j[e]]:null}:O);let B;for(let t=F.top;t<F.bottom;t++){let S=F.map.positionAt(t,F.left,F.table);t==F.top&&(S+=E.nodeSize);for(let w=F.left,D=0;w<F.right;w++,D++)w==F.left&&t==F.top||L.insert(B=L.mapping.map(S+F.tableStart,1),e({node:E,row:t,col:w}).createAndFill(k[D]))}L.setNodeMarkup(D,e({node:E,row:F.top,col:F.left}),k[0]),w instanceof CellSelection&&L.setSelection(new CellSelection(L.doc.resolve(w.$anchorCell.pos),B?L.doc.resolve(B):void 0)),S(L)}return!0}}function setCellAttr(e,t){return function(S,w){if(!isInTable(S))return!1;let E=selectionCell(S);if(E.nodeAfter.attrs[e]===t)return!1;if(w){let D=S.tr;S.selection instanceof CellSelection?S.selection.forEachCell((S,w)=>{S.attrs[e]!==t&&D.setNodeMarkup(w,null,{...S.attrs,[e]:t})}):D.setNodeMarkup(E.pos,null,{...E.nodeAfter.attrs,[e]:t}),w(D)}return!0}}function deprecated_toggleHeader(e){return function(t,S){if(!isInTable(t))return!1;if(S){let w=tableNodeTypes(t.schema),E=selectedRect(t),D=t.tr,O=E.map.cellsInRect(e==`column`?{left:E.left,top:0,right:E.right,bottom:E.map.height}:e==`row`?{left:0,top:E.top,right:E.map.width,bottom:E.bottom}:E),k=O.map(e=>E.table.nodeAt(e));for(let e=0;e<O.length;e++)k[e].type==w.header_cell&&D.setNodeMarkup(E.tableStart+O[e],w.cell,k[e].attrs);if(D.steps.length===0)for(let e=0;e<O.length;e++)D.setNodeMarkup(E.tableStart+O[e],w.header_cell,k[e].attrs);S(D)}return!0}}function isHeaderEnabledByType(e,t,S){let w=t.map.cellsInRect({left:0,top:0,right:e==`row`?t.map.width:1,bottom:e==`column`?t.map.height:1});for(let e=0;e<w.length;e++){let E=t.table.nodeAt(w[e]);if(E&&E.type!==S.header_cell)return!1}return!0}function toggleHeader(e,t){return t||={useDeprecatedLogic:!1},t.useDeprecatedLogic?deprecated_toggleHeader(e):function(t,S){if(!isInTable(t))return!1;if(S){let w=tableNodeTypes(t.schema),E=selectedRect(t),D=t.tr,O=isHeaderEnabledByType(`row`,E,w),k=isHeaderEnabledByType(`column`,E,w),j=(e===`column`?O:e===`row`&&k)?1:0,F=e==`column`?{left:0,top:j,right:1,bottom:E.map.height}:e==`row`?{left:j,top:0,right:E.map.width,bottom:1}:E,L=e==`column`?k?w.cell:w.header_cell:e==`row`?O?w.cell:w.header_cell:w.cell;E.map.cellsInRect(F).forEach(e=>{let t=e+E.tableStart,S=D.doc.nodeAt(t);S&&D.setNodeMarkup(t,L,S.attrs)}),S(D)}return!0}}const toggleHeaderRow=toggleHeader(`row`,{useDeprecatedLogic:!0}),toggleHeaderColumn=toggleHeader(`column`,{useDeprecatedLogic:!0}),toggleHeaderCell=toggleHeader(`cell`,{useDeprecatedLogic:!0});function findNextCell(e,t){if(t<0){let t=e.nodeBefore;if(t)return e.pos-t.nodeSize;for(let t=e.index(-1)-1,S=e.before();t>=0;t--){let w=e.node(-1).child(t),E=w.lastChild;if(E)return S-1-E.nodeSize;S-=w.nodeSize}}else{if(e.index()<e.parent.childCount-1)return e.pos+e.nodeAfter.nodeSize;let t=e.node(-1);for(let S=e.indexAfter(-1),w=e.after();S<t.childCount;S++){let e=t.child(S);if(e.childCount)return w+1;w+=e.nodeSize}}return null}function goToNextCell(e){return function(t,S){if(!isInTable(t))return!1;let w=findNextCell(selectionCell(t),e);if(w==null)return!1;if(S){let e=t.doc.resolve(w);S(t.tr.setSelection(TextSelection.between(e,moveCellForward(e))).scrollIntoView())}return!0}}function deleteTable(e,t){let S=e.selection.$anchor;for(let w=S.depth;w>0;w--)if(S.node(w).type.spec.tableRole==`table`)return t&&t(e.tr.delete(S.before(w),S.after(w)).scrollIntoView()),!0;return!1}function deleteCellSelection(e,t){let S=e.selection;if(!(S instanceof CellSelection))return!1;if(t){let w=e.tr,E=tableNodeTypes(e.schema).cell.createAndFill().content;S.forEachCell((e,t)=>{e.content.eq(E)||w.replace(w.mapping.map(t+1),w.mapping.map(t+e.nodeSize-1),new Slice(E,0,0))}),w.docChanged&&t(w)}return!0}function pastedCells(e){if(e.size===0)return null;let{content:t,openStart:S,openEnd:w}=e;for(;t.childCount==1&&(S>0&&w>0||t.child(0).type.spec.tableRole==`table`);)S--,w--,t=t.child(0).content;let E=t.child(0),D=E.type.spec.tableRole,O=E.type.schema,k=[];if(D==`row`)for(let e=0;e<t.childCount;e++){let E=t.child(e).content,D=e?0:Math.max(0,S-1),j=e<t.childCount-1?0:Math.max(0,w-1);(D||j)&&(E=fitSlice(tableNodeTypes(O).row,new Slice(E,D,j)).content),k.push(E)}else if(D==`cell`||D==`header_cell`)k.push(S||w?fitSlice(tableNodeTypes(O).row,new Slice(t,S,w)).content:t);else return null;return ensureRectangular(O,k)}function ensureRectangular(e,t){let S=[];for(let e=0;e<t.length;e++){let w=t[e];for(let t=w.childCount-1;t>=0;t--){let{rowspan:E,colspan:D}=w.child(t).attrs;for(let t=e;t<e+E;t++)S[t]=(S[t]||0)+D}}let w=0;for(let e=0;e<S.length;e++)w=Math.max(w,S[e]);for(let E=0;E<S.length;E++)if(E>=t.length&&t.push(Fragment.empty),S[E]<w){let D=tableNodeTypes(e).cell.createAndFill(),O=[];for(let e=S[E];e<w;e++)O.push(D);t[E]=t[E].append(Fragment.from(O))}return{height:t.length,width:w,rows:t}}function fitSlice(e,t){let S=e.createAndFill();return new Transform$4(S).replace(0,S.content.size,t).doc}function clipCells({width:e,height:t,rows:S},w,E){if(e!=w){let t=[],E=[];for(let e=0;e<S.length;e++){let D=S[e],O=[];for(let S=t[e]||0,E=0;S<w;E++){let k=D.child(E%D.childCount);S+k.attrs.colspan>w&&(k=k.type.createChecked(removeColSpan(k.attrs,k.attrs.colspan,S+k.attrs.colspan-w),k.content)),O.push(k),S+=k.attrs.colspan;for(let S=1;S<k.attrs.rowspan;S++)t[e+S]=(t[e+S]||0)+k.attrs.colspan}E.push(Fragment.from(O))}S=E,e=w}if(t!=E){let e=[];for(let w=0,D=0;w<E;w++,D++){let O=[],k=S[D%t];for(let e=0;e<k.childCount;e++){let t=k.child(e);w+t.attrs.rowspan>E&&(t=t.type.create({...t.attrs,rowspan:Math.max(1,E-t.attrs.rowspan)},t.content)),O.push(t)}e.push(Fragment.from(O))}S=e,t=E}return{width:e,height:t,rows:S}}function growTable(e,t,S,w,E,D,O){let k=e.doc.type.schema,j=tableNodeTypes(k),F,L;if(E>t.width)for(let D=0,k=0;D<t.height;D++){let B=S.child(D);k+=B.nodeSize;let H=[],q;q=B.lastChild==null||B.lastChild.type==j.cell?F||=j.cell.createAndFill():L||=j.header_cell.createAndFill();for(let e=t.width;e<E;e++)H.push(q);e.insert(e.mapping.slice(O).map(k-1+w),H)}if(D>t.height){let k=[];for(let e=0,w=(t.height-1)*t.width;e<Math.max(t.width,E);e++){let E=e>=t.width?!1:S.nodeAt(t.map[w+e]).type==j.header_cell;k.push(E?L||=j.header_cell.createAndFill():F||=j.cell.createAndFill())}let B=j.row.create(null,Fragment.from(k)),H=[];for(let e=t.height;e<D;e++)H.push(B);e.insert(e.mapping.slice(O).map(w+S.nodeSize-2),H)}return!!(F||L)}function isolateHorizontal(e,t,S,w,E,D,O,k){if(O==0||O==t.height)return!1;let j=!1;for(let F=E;F<D;F++){let E=O*t.width+F,D=t.map[E];if(t.map[E-t.width]==D){j=!0;let E=S.nodeAt(D),{top:L,left:B}=t.findCell(D);e.setNodeMarkup(e.mapping.slice(k).map(D+w),null,{...E.attrs,rowspan:O-L}),e.insert(e.mapping.slice(k).map(t.positionAt(O,B,S)),E.type.createAndFill({...E.attrs,rowspan:L+E.attrs.rowspan-O})),F+=E.attrs.colspan-1}}return j}function isolateVertical(e,t,S,w,E,D,O,k){if(O==0||O==t.width)return!1;let j=!1;for(let F=E;F<D;F++){let E=F*t.width+O,D=t.map[E];if(t.map[E-1]==D){j=!0;let E=S.nodeAt(D),L=t.colCount(D),B=e.mapping.slice(k).map(D+w);e.setNodeMarkup(B,null,removeColSpan(E.attrs,O-L,E.attrs.colspan-(O-L))),e.insert(B+E.nodeSize,E.type.createAndFill(removeColSpan(E.attrs,0,O-L))),F+=E.attrs.rowspan-1}}return j}function insertCells(e,t,S,w,E){let D=S?e.doc.nodeAt(S-1):e.doc;if(!D)throw Error(`No table found`);let O=TableMap.get(D),{top:k,left:j}=w,F=j+E.width,L=k+E.height,B=e.tr,H=0;function q(){if(D=S?B.doc.nodeAt(S-1):B.doc,!D)throw Error(`No table found`);O=TableMap.get(D),H=B.mapping.maps.length}growTable(B,O,D,S,F,L,H)&&q(),isolateHorizontal(B,O,D,S,j,F,k,H)&&q(),isolateHorizontal(B,O,D,S,j,F,L,H)&&q(),isolateVertical(B,O,D,S,k,L,j,H)&&q(),isolateVertical(B,O,D,S,k,L,F,H)&&q();for(let e=k;e<L;e++){let t=O.positionAt(e,j,D),w=O.positionAt(e,F,D);B.replace(B.mapping.slice(H).map(t+S),B.mapping.slice(H).map(w+S),new Slice(E.rows[e-k],0,0))}q(),B.setSelection(new CellSelection(B.doc.resolve(S+O.positionAt(k,j,D)),B.doc.resolve(S+O.positionAt(L-1,F-1,D)))),t(B)}const handleKeyDown$1=keydownHandler({ArrowLeft:arrow$1(`horiz`,-1),ArrowRight:arrow$1(`horiz`,1),ArrowUp:arrow$1(`vert`,-1),ArrowDown:arrow$1(`vert`,1),"Shift-ArrowLeft":shiftArrow(`horiz`,-1),"Shift-ArrowRight":shiftArrow(`horiz`,1),"Shift-ArrowUp":shiftArrow(`vert`,-1),"Shift-ArrowDown":shiftArrow(`vert`,1),Backspace:deleteCellSelection,"Mod-Backspace":deleteCellSelection,Delete:deleteCellSelection,"Mod-Delete":deleteCellSelection});function maybeSetSelection(e,t,S){return S.eq(e.selection)?!1:(t&&t(e.tr.setSelection(S).scrollIntoView()),!0)}function arrow$1(e,t){return(S,w,E)=>{if(!E)return!1;let D=S.selection;if(D instanceof CellSelection)return maybeSetSelection(S,w,Selection$1.near(D.$headCell,t));if(e!=`horiz`&&!D.empty)return!1;let O=atEndOfCell(E,e,t);if(O==null)return!1;if(e==`horiz`)return maybeSetSelection(S,w,Selection$1.near(S.doc.resolve(D.head+t),t));{let E=S.doc.resolve(O),D=nextCell(E,e,t),k;return k=D?Selection$1.near(D,1):t<0?Selection$1.near(S.doc.resolve(E.before(-1)),-1):Selection$1.near(S.doc.resolve(E.after(-1)),1),maybeSetSelection(S,w,k)}}}function shiftArrow(e,t){return(S,w,E)=>{if(!E)return!1;let D=S.selection,O;if(D instanceof CellSelection)O=D;else{let w=atEndOfCell(E,e,t);if(w==null)return!1;O=new CellSelection(S.doc.resolve(w))}let k=nextCell(O.$headCell,e,t);return k?maybeSetSelection(S,w,new CellSelection(O.$anchorCell,k)):!1}}function handleTripleClick(e,t){let S=e.state.doc,w=cellAround(S.resolve(t));return w?(e.dispatch(e.state.tr.setSelection(new CellSelection(w))),!0):!1}function handlePaste(e,t,S){if(!isInTable(e.state))return!1;let w=pastedCells(S),E=e.state.selection;if(E instanceof CellSelection){w||={width:1,height:1,rows:[Fragment.from(fitSlice(tableNodeTypes(e.state.schema).cell,S))]};let t=E.$anchorCell.node(-1),D=E.$anchorCell.start(-1),O=TableMap.get(t).rectBetween(E.$anchorCell.pos-D,E.$headCell.pos-D);return w=clipCells(w,O.right-O.left,O.bottom-O.top),insertCells(e.state,e.dispatch,D,O,w),!0}else if(w){let t=selectionCell(e.state),S=t.start(-1);return insertCells(e.state,e.dispatch,S,TableMap.get(t.node(-1)).findCell(t.pos-S),w),!0}else return!1}function handleMouseDown$1(e,t){var S;if(t.button!=0||t.ctrlKey||t.metaKey)return;let w=domInCell(e,t.target),E;if(t.shiftKey&&e.state.selection instanceof CellSelection)D(e.state.selection.$anchorCell,t),t.preventDefault();else if(t.shiftKey&&w&&(E=cellAround(e.state.selection.$anchor))!=null&&cellUnderMouse(e,t)?.pos!=E.pos)D(E,t),t.preventDefault();else if(!w)return;function D(t,S){let w=cellUnderMouse(e,S),E=tableEditingKey.getState(e.state)==null;if(!w||!inSameTable(t,w))if(E)w=t;else return;let D=new CellSelection(t,w);if(E||!e.state.selection.eq(D)){let S=e.state.tr.setSelection(D);E&&S.setMeta(tableEditingKey,t.pos),e.dispatch(S)}}function O(){e.root.removeEventListener(`mouseup`,O),e.root.removeEventListener(`dragstart`,O),e.root.removeEventListener(`mousemove`,k),tableEditingKey.getState(e.state)!=null&&e.dispatch(e.state.tr.setMeta(tableEditingKey,-1))}function k(S){let E=S,k=tableEditingKey.getState(e.state),j;if(k!=null)j=e.state.doc.resolve(k);else if(domInCell(e,E.target)!=w&&(j=cellUnderMouse(e,t),!j))return O();j&&D(j,E)}e.root.addEventListener(`mouseup`,O),e.root.addEventListener(`dragstart`,O),e.root.addEventListener(`mousemove`,k)}function atEndOfCell(e,t,S){if(!(e.state.selection instanceof TextSelection))return null;let{$head:w}=e.state.selection;for(let E=w.depth-1;E>=0;E--){let D=w.node(E);if((S<0?w.index(E):w.indexAfter(E))!=(S<0?0:D.childCount))return null;if(D.type.spec.tableRole==`cell`||D.type.spec.tableRole==`header_cell`){let D=w.before(E),O=t==`vert`?S>0?`down`:`up`:S>0?`right`:`left`;return e.endOfTextblock(O)?D:null}}return null}function domInCell(e,t){for(;t&&t!=e.dom;t=t.parentNode)if(t.nodeName==`TD`||t.nodeName==`TH`)return t;return null}function cellUnderMouse(e,t){let S=e.posAtCoords({left:t.clientX,top:t.clientY});if(!S)return null;let{inside:w,pos:E}=S;return w>=0&&cellAround(e.state.doc.resolve(w))||cellAround(e.state.doc.resolve(E))}var TableView$1=class{constructor(e,t){this.node=e,this.defaultCellMinWidth=t,this.dom=document.createElement(`div`),this.dom.className=`tableWrapper`,this.table=this.dom.appendChild(document.createElement(`table`)),this.table.style.setProperty(`--default-cell-min-width`,`${t}px`),this.colgroup=this.table.appendChild(document.createElement(`colgroup`)),updateColumnsOnResize(e,this.colgroup,this.table,t),this.contentDOM=this.table.appendChild(document.createElement(`tbody`))}update(e){return e.type==this.node.type?(this.node=e,updateColumnsOnResize(e,this.colgroup,this.table,this.defaultCellMinWidth),!0):!1}ignoreMutation(e){return e.type==`attributes`&&(e.target==this.table||this.colgroup.contains(e.target))}};function updateColumnsOnResize(e,t,S,w,E,D){let O=0,k=!0,j=t.firstChild,F=e.firstChild;if(F){for(let e=0,S=0;e<F.childCount;e++){let{colspan:L,colwidth:B}=F.child(e).attrs;for(let e=0;e<L;e++,S++){let F=E==S?D:B&&B[e],L=F?F+`px`:``;if(O+=F||w,F||(k=!1),j)j.style.width!=L&&(j.style.width=L),j=j.nextSibling;else{let e=document.createElement(`col`);e.style.width=L,t.appendChild(e)}}}for(;j;){var L;let e=j.nextSibling;(L=j.parentNode)==null||L.removeChild(j),j=e}k?(S.style.width=O+`px`,S.style.minWidth=``):(S.style.width=``,S.style.minWidth=O+`px`)}}const columnResizingPluginKey=new PluginKey(`tableColumnResizing`);function columnResizing({handleWidth:e=5,cellMinWidth:t=25,defaultCellMinWidth:S=100,View:w=TableView$1,lastColumnResizable:E=!0}={}){let D=new Plugin({key:columnResizingPluginKey,state:{init(e,t){var E;let O=(E=D.spec)==null||(E=E.props)==null?void 0:E.nodeViews,k=tableNodeTypes(t.schema).table.name;return w&&O&&(O[k]=(e,t)=>new w(e,S,t)),new ResizeState(-1,!1)},apply(e,t){return t.apply(e)}},props:{attributes:e=>{let t=columnResizingPluginKey.getState(e);return t&&t.activeHandle>-1?{class:`resize-cursor`}:{}},handleDOMEvents:{mousemove:(t,S)=>{handleMouseMove(t,S,e,E)},mouseleave:e=>{handleMouseLeave(e)},mousedown:(e,w)=>{handleMouseDown(e,w,t,S)}},decorations:e=>{let t=columnResizingPluginKey.getState(e);if(t&&t.activeHandle>-1)return handleDecorations(e,t.activeHandle)},nodeViews:{}}});return D}var ResizeState=class e{constructor(e,t){this.activeHandle=e,this.dragging=t}apply(t){let S=this,w=t.getMeta(columnResizingPluginKey);if(w&&w.setHandle!=null)return new e(w.setHandle,!1);if(w&&w.setDragging!==void 0)return new e(S.activeHandle,w.setDragging);if(S.activeHandle>-1&&t.docChanged){let w=t.mapping.map(S.activeHandle,-1);return pointsAtCell(t.doc.resolve(w))||(w=-1),new e(w,S.dragging)}return S}};function handleMouseMove(e,t,S,w){if(!e.editable)return;let E=columnResizingPluginKey.getState(e.state);if(E&&!E.dragging){let D=domCellAround(t.target),O=-1;if(D){let{left:w,right:E}=D.getBoundingClientRect();t.clientX-w<=S?O=edgeCell(e,t,`left`,S):E-t.clientX<=S&&(O=edgeCell(e,t,`right`,S))}if(O!=E.activeHandle){if(!w&&O!==-1){let t=e.state.doc.resolve(O),S=t.node(-1),w=TableMap.get(S),E=t.start(-1);if(w.colCount(t.pos-E)+t.nodeAfter.attrs.colspan-1==w.width-1)return}updateHandle(e,O)}}}function handleMouseLeave(e){if(!e.editable)return;let t=columnResizingPluginKey.getState(e.state);t&&t.activeHandle>-1&&!t.dragging&&updateHandle(e,-1)}function handleMouseDown(e,t,S,w){var E;if(!e.editable)return!1;let D=e.dom.ownerDocument.defaultView??window,O=columnResizingPluginKey.getState(e.state);if(!O||O.activeHandle==-1||O.dragging)return!1;let k=e.state.doc.nodeAt(O.activeHandle),j=currentColWidth(e,O.activeHandle,k.attrs);e.dispatch(e.state.tr.setMeta(columnResizingPluginKey,{setDragging:{startX:t.clientX,startWidth:j}}));function F(t){D.removeEventListener(`mouseup`,F),D.removeEventListener(`mousemove`,L);let w=columnResizingPluginKey.getState(e.state);w?.dragging&&(updateColumnWidth(e,w.activeHandle,draggedWidth(w.dragging,t,S)),e.dispatch(e.state.tr.setMeta(columnResizingPluginKey,{setDragging:null})))}function L(t){if(!t.which)return F(t);let E=columnResizingPluginKey.getState(e.state);if(E&&E.dragging){let D=draggedWidth(E.dragging,t,S);displayColumnWidth(e,E.activeHandle,D,w)}}return displayColumnWidth(e,O.activeHandle,j,w),D.addEventListener(`mouseup`,F),D.addEventListener(`mousemove`,L),t.preventDefault(),!0}function currentColWidth(e,t,{colspan:S,colwidth:w}){let E=w&&w[w.length-1];if(E)return E;let D=e.domAtPos(t),O=D.node.childNodes[D.offset].offsetWidth,k=S;if(w)for(let e=0;e<S;e++)w[e]&&(O-=w[e],k--);return O/k}function domCellAround(e){for(;e&&e.nodeName!=`TD`&&e.nodeName!=`TH`;)e=e.classList&&e.classList.contains(`ProseMirror`)?null:e.parentNode;return e}function edgeCell(e,t,S,w){let E=S==`right`?-w:w,D=e.posAtCoords({left:t.clientX+E,top:t.clientY});if(!D)return-1;let{pos:O}=D,k=cellAround(e.state.doc.resolve(O));if(!k)return-1;if(S==`right`)return k.pos;let j=TableMap.get(k.node(-1)),F=k.start(-1),L=j.map.indexOf(k.pos-F);return L%j.width==0?-1:F+j.map[L-1]}function draggedWidth(e,t,S){let w=t.clientX-e.startX;return Math.max(S,e.startWidth+w)}function updateHandle(e,t){e.dispatch(e.state.tr.setMeta(columnResizingPluginKey,{setHandle:t}))}function updateColumnWidth(e,t,S){let w=e.state.doc.resolve(t),E=w.node(-1),D=TableMap.get(E),O=w.start(-1),k=D.colCount(w.pos-O)+w.nodeAfter.attrs.colspan-1,j=e.state.tr;for(let e=0;e<D.height;e++){let t=e*D.width+k;if(e&&D.map[t]==D.map[t-D.width])continue;let w=D.map[t],F=E.nodeAt(w).attrs,L=F.colspan==1?0:k-D.colCount(w);if(F.colwidth&&F.colwidth[L]==S)continue;let B=F.colwidth?F.colwidth.slice():zeroes(F.colspan);B[L]=S,j.setNodeMarkup(O+w,null,{...F,colwidth:B})}j.docChanged&&e.dispatch(j)}function displayColumnWidth(e,t,S,w){let E=e.state.doc.resolve(t),D=E.node(-1),O=E.start(-1),k=TableMap.get(D).colCount(E.pos-O)+E.nodeAfter.attrs.colspan-1,j=e.domAtPos(E.start(-1)).node;for(;j&&j.nodeName!=`TABLE`;)j=j.parentNode;j&&updateColumnsOnResize(D,j.firstChild,j,w,k,S)}function zeroes(e){return Array(e).fill(0)}function handleDecorations(e,t){let S=[],w=e.doc.resolve(t),E=w.node(-1);if(!E)return DecorationSet.empty;let D=TableMap.get(E),O=w.start(-1),k=D.colCount(w.pos-O)+w.nodeAfter.attrs.colspan-1;for(let t=0;t<D.height;t++){let w=k+t*D.width;if((k==D.width-1||D.map[w]!=D.map[w+1])&&(t==0||D.map[w]!=D.map[w-D.width])){var j;let t=D.map[w],k=O+t+E.nodeAt(t).nodeSize-1,F=document.createElement(`div`);F.className=`column-resize-handle`,columnResizingPluginKey.getState(e)?.dragging&&S.push(Decoration.node(O+t,O+t+E.nodeAt(t).nodeSize,{class:`column-resize-dragging`})),S.push(Decoration.widget(k,F))}}return DecorationSet.create(e.doc,S)}function tableEditing({allowTableNodeSelection:e=!1}={}){return new Plugin({key:tableEditingKey,state:{init(){return null},apply(e,t){let S=e.getMeta(tableEditingKey);if(S!=null)return S==-1?null:S;if(t==null||!e.docChanged)return t;let{deleted:w,pos:E}=e.mapping.mapResult(t);return w?null:E}},props:{decorations:drawCellSelection,handleDOMEvents:{mousedown:handleMouseDown$1},createSelectionBetween(e){return tableEditingKey.getState(e.state)==null?null:e.state.selection},handleTripleClick,handleKeyDown:handleKeyDown$1,handlePaste},appendTransaction(t,S,w){return normalizeSelection(w,fixTables(w,S),e)}})}function normalizeTableCellAlign(e){return e===`left`||e===`right`||e===`center`?e:null}function parseAlign(e){let t=(e.style.textAlign||``).trim().toLowerCase(),S=(e.getAttribute(`align`)||``).trim().toLowerCase();return normalizeTableCellAlign(t||S)}function normalizeTableCellAlignFromAttributes(e){return normalizeTableCellAlign(e?.align)}function createAlignAttribute(){return{default:null,parseHTML:e=>parseAlign(e),renderHTML:e=>e.align?{style:`text-align: ${e.align}`}:{}}}var TableCell=Node3.create({name:`tableCell`,addOptions(){return{HTMLAttributes:{}}},content:`block+`,addAttributes(){return{colspan:{default:1},rowspan:{default:1},colwidth:{default:null,parseHTML:e=>{var t,S;let w=e.getAttribute(`colwidth`),E=w?w.split(`,`).map(e=>parseInt(e,10)):null;if(!E){let t=e.closest(`table`)?.querySelectorAll(`colgroup > col`),S=Array.from(e.parentElement?.children||[]).indexOf(e);if(S&&S>-1&&t&&t[S]){let e=t[S].getAttribute(`width`);return e?[parseInt(e,10)]:null}}return E}},align:createAlignAttribute()}},tableRole:`cell`,isolating:!0,parseHTML(){return[{tag:`td`}]},renderHTML({HTMLAttributes:e}){return[`td`,mergeAttributes(this.options.HTMLAttributes,e),0]}}),TableHeader=Node3.create({name:`tableHeader`,addOptions(){return{HTMLAttributes:{}}},content:`block+`,addAttributes(){return{colspan:{default:1},rowspan:{default:1},colwidth:{default:null,parseHTML:e=>{let t=e.getAttribute(`colwidth`);return t?t.split(`,`).map(e=>parseInt(e,10)):null}},align:createAlignAttribute()}},tableRole:`header_cell`,isolating:!0,parseHTML(){return[{tag:`th`}]},renderHTML({HTMLAttributes:e}){return[`th`,mergeAttributes(this.options.HTMLAttributes,e),0]}}),TableRow=Node3.create({name:`tableRow`,addOptions(){return{HTMLAttributes:{}}},content:`(tableCell | tableHeader)*`,tableRole:`row`,parseHTML(){return[{tag:`tr`}]},renderHTML({HTMLAttributes:e}){return[`tr`,mergeAttributes(this.options.HTMLAttributes,e),0]}});function getColStyleDeclaration(e,t){return t?[`width`,`${Math.max(t,e)}px`]:[`min-width`,`${e}px`]}function updateColumns(e,t,S,w,E,D){var O;let k=0,j=!0,F=t.firstChild,L=e.firstChild;if(L!==null)for(let e=0,S=0;e<L.childCount;e+=1){let{colspan:O,colwidth:B}=L.child(e).attrs;for(let e=0;e<O;e+=1,S+=1){let O=E===S?D:B&&B[e],L=O?`${O}px`:``;if(k+=O||w,O||(j=!1),F){if(F.style.width!==L){let[e,t]=getColStyleDeclaration(w,O);F.style.setProperty(e,t)}F=F.nextSibling}else{let e=document.createElement(`col`),[S,E]=getColStyleDeclaration(w,O);e.style.setProperty(S,E),t.appendChild(e)}}}for(;F;){let e=F.nextSibling;(O=F.parentNode)==null||O.removeChild(F),F=e}let B=e.attrs.style&&typeof e.attrs.style==`string`&&/\bwidth\s*:/i.test(e.attrs.style);j&&!B?(S.style.width=`${k}px`,S.style.minWidth=``):(S.style.width=``,S.style.minWidth=`${k}px`)}var TableView=class{constructor(e,t){this.node=e,this.cellMinWidth=t,this.dom=document.createElement(`div`),this.dom.className=`tableWrapper`,this.table=this.dom.appendChild(document.createElement(`table`)),e.attrs.style&&(this.table.style.cssText=e.attrs.style),this.colgroup=this.table.appendChild(document.createElement(`colgroup`)),updateColumns(e,this.colgroup,this.table,t),this.contentDOM=this.table.appendChild(document.createElement(`tbody`))}update(e){return e.type===this.node.type?(this.node=e,updateColumns(e,this.colgroup,this.table,this.cellMinWidth),!0):!1}ignoreMutation(e){let t=e.target,S=this.dom.contains(t),w=this.contentDOM.contains(t);return!!(S&&!w&&(e.type===`attributes`||e.type===`childList`||e.type===`characterData`))}};function createColGroup(e,t,S,w){let E=0,D=!0,O=[],k=e.firstChild;if(!k)return{};for(let e=0,j=0;e<k.childCount;e+=1){let{colspan:F,colwidth:L}=k.child(e).attrs;for(let e=0;e<F;e+=1,j+=1){let k=S===j?w:L&&L[e];E+=k||t,k||(D=!1);let[F,B]=getColStyleDeclaration(t,k);O.push([`col`,{style:`${F}: ${B}`}])}}let j=D?`${E}px`:``,F=D?``:`${E}px`;return{colgroup:[`colgroup`,{},...O],tableWidth:j,tableMinWidth:F}}function createCell(e,t){return t?e.createChecked(null,t):e.createAndFill()}function getTableNodeTypes(e){if(e.cached.tableNodeTypes)return e.cached.tableNodeTypes;let t={};return Object.keys(e.nodes).forEach(S=>{let w=e.nodes[S];w.spec.tableRole&&(t[w.spec.tableRole]=w)}),e.cached.tableNodeTypes=t,t}function createTable(e,t,S,w,E){let D=getTableNodeTypes(e),O=[],k=[];for(let e=0;e<S;e+=1){let e=createCell(D.cell,E);if(e&&k.push(e),w){let e=createCell(D.header_cell,E);e&&O.push(e)}}let j=[];for(let e=0;e<t;e+=1)j.push(D.row.createChecked(null,w&&e===0?O:k));return D.table.createChecked(null,j)}function isCellSelection(e){return e instanceof CellSelection}var deleteTableWhenAllCellsSelected=({editor:e})=>{let{selection:t}=e.state;if(!isCellSelection(t))return!1;let S=0;return findParentNodeClosestToPos(t.ranges[0].$from,e=>e.type.name===`table`)?.node.descendants(e=>{if(e.type.name===`table`)return!1;[`tableCell`,`tableHeader`].includes(e.type.name)&&(S+=1)}),S===t.ranges.length?(e.commands.deleteTable(),!0):!1},DEFAULT_CELL_LINE_SEPARATOR=``;function collapseWhitespace(e){return(e||``).replace(/\s+/g,` `).trim()}function renderTableToMarkdown(e,t,S={}){var w;let E=S.cellLineSeparator??``;if(!e||!e.content||e.content.length===0)return``;let D=[];e.content.forEach(e=>{let S=[];e.content&&e.content.forEach(e=>{let w=``;w=e.content&&Array.isArray(e.content)&&e.content.length>1?e.content.map(e=>t.renderChildren(e)).join(E):e.content?t.renderChildren(e.content):``;let D=collapseWhitespace(w),O=e.type===`tableHeader`,k=normalizeTableCellAlignFromAttributes(e.attrs);S.push({text:D,isHeader:O,align:k})}),D.push(S)});let O=D.reduce((e,t)=>Math.max(e,t.length),0);if(O===0)return``;let k=Array(O).fill(0);D.forEach(e=>{var t;for(let t=0;t<O;t+=1){let S=(e[t]?.text||``).length;S>k[t]&&(k[t]=S),k[t]<3&&(k[t]=3)}});let j=(e,t)=>e+` `.repeat(Math.max(0,t-e.length)),F=D[0],L=F.some(e=>e.isHeader),B=Array(O).fill(null);D.forEach(e=>{var t;for(let t=0;t<O;t+=1)!B[t]&&e[t]?.align&&(B[t]=e[t].align)});let H=`
216
216
  `,q=Array(O).fill(0).map((e,t)=>L&&F[t]&&F[t].text||``);return H+=`| ${q.map((e,t)=>j(e,k[t])).join(` | `)} |
217
217
  `,H+=`| ${k.map((e,t)=>{let S=Math.max(3,e),w=B[t];return w===`left`?`:${`-`.repeat(S)}`:w===`right`?`${`-`.repeat(S)}:`:w===`center`?`:${`-`.repeat(S)}:`:`-`.repeat(S)}).join(` | `)} |
218
218
  `,(L?D.slice(1):D).forEach(e=>{H+=`| ${Array(O).fill(0).map((t,S)=>j(e[S]&&e[S].text||``,k[S])).join(` | `)} |
219
- `}),H}var markdown_default=renderTableToMarkdown,Table=Node3.create({name:`table`,addOptions(){return{HTMLAttributes:{},resizable:!1,renderWrapper:!1,handleWidth:5,cellMinWidth:25,View:TableView,lastColumnResizable:!0,allowTableNodeSelection:!1}},content:`tableRow+`,tableRole:`table`,isolating:!0,group:`block`,parseHTML(){return[{tag:`table`}]},renderHTML({node:e,HTMLAttributes:t}){let{colgroup:S,tableWidth:w,tableMinWidth:E}=createColGroup(e,this.options.cellMinWidth),D=t.style;function O(){return D||(w?`width: ${w}`:`min-width: ${E}`)}let k=[`table`,mergeAttributes(this.options.HTMLAttributes,t,{style:O()}),S,[`tbody`,0]];return this.options.renderWrapper?[`div`,{class:`tableWrapper`},k]:k},parseMarkdown:(e,t)=>{let S=[],w=Array.isArray(e.align)?e.align:[];if(e.header){let E=[];e.header.forEach((e,S)=>{var D;let O=normalizeTableCellAlign(w[S]??e.align),k=O?{align:O}:{};E.push(t.createNode(`tableHeader`,k,[{type:`paragraph`,content:t.parseInline(e.tokens)}]))}),S.push(t.createNode(`tableRow`,{},E))}return e.rows&&e.rows.forEach(e=>{let E=[];e.forEach((e,S)=>{var D;let O=normalizeTableCellAlign(w[S]??e.align),k=O?{align:O}:{};E.push(t.createNode(`tableCell`,k,[{type:`paragraph`,content:t.parseInline(e.tokens)}]))}),S.push(t.createNode(`tableRow`,{},E))}),t.createNode(`table`,void 0,S)},renderMarkdown:(e,t)=>markdown_default(e,t),addCommands(){return{insertTable:({rows:e=3,cols:t=3,withHeaderRow:S=!0}={})=>({tr:w,dispatch:E,editor:D})=>{let O=createTable(D.schema,e,t,S);if(E){let e=w.selection.from+1;w.replaceSelectionWith(O).scrollIntoView().setSelection(TextSelection.near(w.doc.resolve(e)))}return!0},addColumnBefore:()=>({state:e,dispatch:t})=>addColumnBefore(e,t),addColumnAfter:()=>({state:e,dispatch:t})=>addColumnAfter(e,t),deleteColumn:()=>({state:e,dispatch:t})=>deleteColumn(e,t),addRowBefore:()=>({state:e,dispatch:t})=>addRowBefore(e,t),addRowAfter:()=>({state:e,dispatch:t})=>addRowAfter(e,t),deleteRow:()=>({state:e,dispatch:t})=>deleteRow(e,t),deleteTable:()=>({state:e,dispatch:t})=>deleteTable(e,t),mergeCells:()=>({state:e,dispatch:t})=>mergeCells(e,t),splitCell:()=>({state:e,dispatch:t})=>splitCell(e,t),toggleHeaderColumn:()=>({state:e,dispatch:t})=>toggleHeader(`column`)(e,t),toggleHeaderRow:()=>({state:e,dispatch:t})=>toggleHeader(`row`)(e,t),toggleHeaderCell:()=>({state:e,dispatch:t})=>toggleHeaderCell(e,t),mergeOrSplit:()=>({state:e,dispatch:t})=>mergeCells(e,t)?!0:splitCell(e,t),setCellAttribute:(e,t)=>({state:S,dispatch:w})=>setCellAttr(e,t)(S,w),goToNextCell:()=>({state:e,dispatch:t})=>goToNextCell(1)(e,t),goToPreviousCell:()=>({state:e,dispatch:t})=>goToNextCell(-1)(e,t),fixTables:()=>({state:e,dispatch:t})=>(t&&fixTables(e),!0),setCellSelection:e=>({tr:t,dispatch:S})=>{if(S){let S=CellSelection.create(t.doc,e.anchorCell,e.headCell);t.setSelection(S)}return!0}}},addKeyboardShortcuts(){return{Tab:()=>this.editor.commands.goToNextCell()?!0:this.editor.can().addRowAfter()?this.editor.chain().addRowAfter().goToNextCell().run():!1,"Shift-Tab":()=>this.editor.commands.goToPreviousCell(),Backspace:deleteTableWhenAllCellsSelected,"Mod-Backspace":deleteTableWhenAllCellsSelected,Delete:deleteTableWhenAllCellsSelected,"Mod-Delete":deleteTableWhenAllCellsSelected}},addProseMirrorPlugins(){return[...this.options.resizable&&this.editor.isEditable?[columnResizing({handleWidth:this.options.handleWidth,cellMinWidth:this.options.cellMinWidth,defaultCellMinWidth:this.options.cellMinWidth,View:this.options.View,lastColumnResizable:this.options.lastColumnResizable})]:[],tableEditing({allowTableNodeSelection:this.options.allowTableNodeSelection})]},extendNodeSchema(e){return{tableRole:callOrReturn(getExtensionField(e,`tableRole`,{name:e.name,options:e.options,storage:e.storage}))}}}),TableKit=Extension.create({name:`tableKit`,addExtensions(){let e=[];return this.options.table!==!1&&e.push(Table.configure(this.options.table)),this.options.tableCell!==!1&&e.push(TableCell.configure(this.options.tableCell)),this.options.tableHeader!==!1&&e.push(TableHeader.configure(this.options.tableHeader)),this.options.tableRow!==!1&&e.push(TableRow.configure(this.options.tableRow)),e}}),inputRegex$4=/^\s*>\s$/,Blockquote=Node3.create({name:`blockquote`,addOptions(){return{HTMLAttributes:{}}},content:`block+`,group:`block`,defining:!0,parseHTML(){return[{tag:`blockquote`}]},renderHTML({HTMLAttributes:e}){return h$1(`blockquote`,{...mergeAttributes(this.options.HTMLAttributes,e),children:h$1(`slot`,{})})},parseMarkdown:(e,t)=>{var S;let w=t.parseBlockChildren??t.parseChildren;return t.createNode(`blockquote`,void 0,w(e.tokens||[]))},renderMarkdown:(e,t)=>{if(!e.content)return``;let S=`>`,w=[];return e.content.forEach((e,S)=>{var E,D;let O=(t.renderChild?.call(t,e,S)??t.renderChildren([e])).split(`
219
+ `}),H}var markdown_default=renderTableToMarkdown,Table=Node3.create({name:`table`,addOptions(){return{HTMLAttributes:{},resizable:!1,renderWrapper:!1,handleWidth:5,cellMinWidth:25,View:TableView,lastColumnResizable:!0,allowTableNodeSelection:!1}},content:`tableRow+`,tableRole:`table`,isolating:!0,group:`block`,parseHTML(){return[{tag:`table`}]},renderHTML({node:e,HTMLAttributes:t}){let{colgroup:S,tableWidth:w,tableMinWidth:E}=createColGroup(e,this.options.cellMinWidth),D=t.style;function O(){return D||(w?`width: ${w}`:`min-width: ${E}`)}let k=[`table`,mergeAttributes(this.options.HTMLAttributes,t,{style:O()}),S,[`tbody`,0]];return this.options.renderWrapper?[`div`,{class:`tableWrapper`},k]:k},parseMarkdown:(e,t)=>{let S=[],w=Array.isArray(e.align)?e.align:[];if(e.header){let E=[];e.header.forEach((e,S)=>{var D;let O=normalizeTableCellAlign(w[S]??e.align),k=O?{align:O}:{};E.push(t.createNode(`tableHeader`,k,[{type:`paragraph`,content:t.parseInline(e.tokens)}]))}),S.push(t.createNode(`tableRow`,{},E))}return e.rows&&e.rows.forEach(e=>{let E=[];e.forEach((e,S)=>{var D;let O=normalizeTableCellAlign(w[S]??e.align),k=O?{align:O}:{};E.push(t.createNode(`tableCell`,k,[{type:`paragraph`,content:t.parseInline(e.tokens)}]))}),S.push(t.createNode(`tableRow`,{},E))}),t.createNode(`table`,void 0,S)},renderMarkdown:(e,t)=>markdown_default(e,t),addCommands(){return{insertTable:({rows:e=3,cols:t=3,withHeaderRow:S=!0}={})=>({tr:w,dispatch:E,editor:D})=>{let O=createTable(D.schema,e,t,S);if(E){let e=w.selection.from+1;w.replaceSelectionWith(O).scrollIntoView().setSelection(TextSelection.near(w.doc.resolve(e)))}return!0},addColumnBefore:()=>({state:e,dispatch:t})=>addColumnBefore(e,t),addColumnAfter:()=>({state:e,dispatch:t})=>addColumnAfter(e,t),deleteColumn:()=>({state:e,dispatch:t})=>deleteColumn(e,t),addRowBefore:()=>({state:e,dispatch:t})=>addRowBefore(e,t),addRowAfter:()=>({state:e,dispatch:t})=>addRowAfter(e,t),deleteRow:()=>({state:e,dispatch:t})=>deleteRow(e,t),deleteTable:()=>({state:e,dispatch:t})=>deleteTable(e,t),mergeCells:()=>({state:e,dispatch:t})=>mergeCells(e,t),splitCell:()=>({state:e,dispatch:t})=>splitCell(e,t),toggleHeaderColumn:()=>({state:e,dispatch:t})=>toggleHeader(`column`)(e,t),toggleHeaderRow:()=>({state:e,dispatch:t})=>toggleHeader(`row`)(e,t),toggleHeaderCell:()=>({state:e,dispatch:t})=>toggleHeaderCell(e,t),mergeOrSplit:()=>({state:e,dispatch:t})=>mergeCells(e,t)?!0:splitCell(e,t),setCellAttribute:(e,t)=>({state:S,dispatch:w})=>setCellAttr(e,t)(S,w),goToNextCell:()=>({state:e,dispatch:t})=>goToNextCell(1)(e,t),goToPreviousCell:()=>({state:e,dispatch:t})=>goToNextCell(-1)(e,t),fixTables:()=>({state:e,dispatch:t})=>(t&&fixTables(e),!0),setCellSelection:e=>({tr:t,dispatch:S})=>{if(S){let S=CellSelection.create(t.doc,e.anchorCell,e.headCell);t.setSelection(S)}return!0}}},addKeyboardShortcuts(){return{Tab:()=>this.editor.commands.goToNextCell()?!0:this.editor.can().addRowAfter()?this.editor.chain().addRowAfter().goToNextCell().run():!1,"Shift-Tab":()=>this.editor.commands.goToPreviousCell(),Backspace:deleteTableWhenAllCellsSelected,"Mod-Backspace":deleteTableWhenAllCellsSelected,Delete:deleteTableWhenAllCellsSelected,"Mod-Delete":deleteTableWhenAllCellsSelected}},addProseMirrorPlugins(){return[...this.options.resizable&&this.editor.isEditable?[columnResizing({handleWidth:this.options.handleWidth,cellMinWidth:this.options.cellMinWidth,defaultCellMinWidth:this.options.cellMinWidth,View:this.options.View,lastColumnResizable:this.options.lastColumnResizable})]:[],tableEditing({allowTableNodeSelection:this.options.allowTableNodeSelection})]},extendNodeSchema(e){return{tableRole:callOrReturn(getExtensionField(e,`tableRole`,{name:e.name,options:e.options,storage:e.storage}))}}}),TableKit=Extension.create({name:`tableKit`,addExtensions(){let e=[];return this.options.table!==!1&&e.push(Table.configure(this.options.table)),this.options.tableCell!==!1&&e.push(TableCell.configure(this.options.tableCell)),this.options.tableHeader!==!1&&e.push(TableHeader.configure(this.options.tableHeader)),this.options.tableRow!==!1&&e.push(TableRow.configure(this.options.tableRow)),e}}),inputRegex$3=/^\s*>\s$/,Blockquote=Node3.create({name:`blockquote`,addOptions(){return{HTMLAttributes:{}}},content:`block+`,group:`block`,defining:!0,parseHTML(){return[{tag:`blockquote`}]},renderHTML({HTMLAttributes:e}){return h$1(`blockquote`,{...mergeAttributes(this.options.HTMLAttributes,e),children:h$1(`slot`,{})})},parseMarkdown:(e,t)=>{var S;let w=t.parseBlockChildren??t.parseChildren;return t.createNode(`blockquote`,void 0,w(e.tokens||[]))},renderMarkdown:(e,t)=>{if(!e.content)return``;let S=`>`,w=[];return e.content.forEach((e,S)=>{var E,D;let O=(t.renderChild?.call(t,e,S)??t.renderChildren([e])).split(`
220
220
  `).map(e=>e.trim()===``?`>`:`> ${e}`);w.push(O.join(`
221
221
  `))}),w.join(`
222
222
  >
223
- `)},addCommands(){return{setBlockquote:()=>({commands:e})=>e.wrapIn(this.name),toggleBlockquote:()=>({commands:e})=>e.toggleWrap(this.name),unsetBlockquote:()=>({commands:e})=>e.lift(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-b":()=>this.editor.commands.toggleBlockquote()}},addInputRules(){return[wrappingInputRule({find:inputRegex$4,type:this.type})]}}),index_default$4=Blockquote,inputRegex$3=/(^|[^`])`([^`]+)`(?!`)$/,pasteRegex$1=/(^|[^`])`([^`]+)`(?!`)/g,Code=Mark.create({name:`code`,addOptions(){return{HTMLAttributes:{}}},excludes:`_`,code:!0,exitable:!0,parseHTML(){return[{tag:`code`}]},renderHTML({HTMLAttributes:e}){return[`code`,mergeAttributes(this.options.HTMLAttributes,e),0]},markdownTokenName:`codespan`,parseMarkdown:(e,t)=>t.applyMark(`code`,[{type:`text`,text:e.text||``}]),renderMarkdown:(e,t)=>e.content?`\`${t.renderChildren(e.content)}\``:``,addCommands(){return{setCode:()=>({commands:e})=>e.setMark(this.name),toggleCode:()=>({commands:e})=>e.toggleMark(this.name),unsetCode:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-e":()=>this.editor.commands.toggleCode()}},addInputRules(){return[markInputRule({find:inputRegex$3,type:this.type})]},addPasteRules(){return[markPasteRule({find:pasteRegex$1,type:this.type})]}}),index_default$3=Code,Document$2=Node3.create({name:`doc`,topNode:!0,content:`block+`,renderMarkdown:(e,t)=>e.content?t.renderChildren(e.content,`
223
+ `)},addCommands(){return{setBlockquote:()=>({commands:e})=>e.wrapIn(this.name),toggleBlockquote:()=>({commands:e})=>e.toggleWrap(this.name),unsetBlockquote:()=>({commands:e})=>e.lift(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-b":()=>this.editor.commands.toggleBlockquote()}},addInputRules(){return[wrappingInputRule({find:inputRegex$3,type:this.type})]}}),index_default$3=Blockquote,inputRegex$2=/(^|[^`])`([^`]+)`(?!`)$/,pasteRegex$1=/(^|[^`])`([^`]+)`(?!`)/g,Code=Mark.create({name:`code`,addOptions(){return{HTMLAttributes:{}}},excludes:`_`,code:!0,exitable:!0,parseHTML(){return[{tag:`code`}]},renderHTML({HTMLAttributes:e}){return[`code`,mergeAttributes(this.options.HTMLAttributes,e),0]},markdownTokenName:`codespan`,parseMarkdown:(e,t)=>t.applyMark(`code`,[{type:`text`,text:e.text||``}]),renderMarkdown:(e,t)=>e.content?`\`${t.renderChildren(e.content)}\``:``,addCommands(){return{setCode:()=>({commands:e})=>e.setMark(this.name),toggleCode:()=>({commands:e})=>e.toggleMark(this.name),unsetCode:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-e":()=>this.editor.commands.toggleCode()}},addInputRules(){return[markInputRule({find:inputRegex$2,type:this.type})]},addPasteRules(){return[markPasteRule({find:pasteRegex$1,type:this.type})]}}),index_default$2=Code,Document$2=Node3.create({name:`doc`,topNode:!0,content:`block+`,renderMarkdown:(e,t)=>e.content?t.renderChildren(e.content,`
224
224
 
225
- `):``}),HorizontalRule=Node3.create({name:`horizontalRule`,addOptions(){return{HTMLAttributes:{},nextNodeType:`paragraph`}},group:`block`,parseHTML(){return[{tag:`hr`}]},renderHTML({HTMLAttributes:e}){return[`hr`,mergeAttributes(this.options.HTMLAttributes,e)]},markdownTokenName:`hr`,parseMarkdown:(e,t)=>t.createNode(`horizontalRule`),renderMarkdown:()=>`---`,addCommands(){return{setHorizontalRule:()=>({chain:e,state:t})=>{if(!canInsertNode(t,t.schema.nodes[this.name]))return!1;let{selection:S}=t,{$to:w}=S,E=e();return isNodeSelection(S)?E.insertContentAt(w.pos,{type:this.name}):E.insertContent({type:this.name}),E.command(({state:e,tr:t,dispatch:S})=>{if(S){let{$to:S}=t.selection,w=S.end();if(S.nodeAfter)S.nodeAfter.isTextblock?t.setSelection(TextSelection.create(t.doc,S.pos+1)):S.nodeAfter.isBlock?t.setSelection(NodeSelection.create(t.doc,S.pos)):t.setSelection(TextSelection.create(t.doc,S.pos));else{let E=(e.schema.nodes[this.options.nextNodeType]||S.parent.type.contentMatch.defaultType)?.create();E&&(t.insert(w,E),t.setSelection(TextSelection.create(t.doc,w+1)))}t.scrollIntoView()}return!0}).run()}}},addInputRules(){return[nodeInputRule({find:/^(?:---|—-|___\s|\*\*\*\s)$/,type:this.type})]}}),index_default$2=HorizontalRule,__defProp$1=Object.defineProperty,__export=(e,t)=>{for(var S in t)__defProp$1(e,S,{get:t[S],enumerable:!0})},ListItemName=`listItem`,TextStyleName=`textStyle`,bulletListInputRegex=/^\s*([-+*])\s$/,BulletList=Node3.create({name:`bulletList`,addOptions(){return{itemTypeName:`listItem`,HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:`block list`,content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:`ul`}]},renderHTML({HTMLAttributes:e}){return[`ul`,mergeAttributes(this.options.HTMLAttributes,e),0]},markdownTokenName:`list`,parseMarkdown:(e,t)=>e.type!==`list`||e.ordered?[]:{type:`bulletList`,content:e.items?t.parseChildren(e.items):[]},renderMarkdown:(e,t)=>e.content?t.renderChildren(e.content,`
225
+ `):``}),HorizontalRule=Node3.create({name:`horizontalRule`,addOptions(){return{HTMLAttributes:{},nextNodeType:`paragraph`}},group:`block`,parseHTML(){return[{tag:`hr`}]},renderHTML({HTMLAttributes:e}){return[`hr`,mergeAttributes(this.options.HTMLAttributes,e)]},markdownTokenName:`hr`,parseMarkdown:(e,t)=>t.createNode(`horizontalRule`),renderMarkdown:()=>`---`,addCommands(){return{setHorizontalRule:()=>({chain:e,state:t})=>{if(!canInsertNode(t,t.schema.nodes[this.name]))return!1;let{selection:S}=t,{$to:w}=S,E=e();return isNodeSelection(S)?E.insertContentAt(w.pos,{type:this.name}):E.insertContent({type:this.name}),E.command(({state:e,tr:t,dispatch:S})=>{if(S){let{$to:S}=t.selection,w=S.end();if(S.nodeAfter)S.nodeAfter.isTextblock?t.setSelection(TextSelection.create(t.doc,S.pos+1)):S.nodeAfter.isBlock?t.setSelection(NodeSelection.create(t.doc,S.pos)):t.setSelection(TextSelection.create(t.doc,S.pos));else{let E=(e.schema.nodes[this.options.nextNodeType]||S.parent.type.contentMatch.defaultType)?.create();E&&(t.insert(w,E),t.setSelection(TextSelection.create(t.doc,w+1)))}t.scrollIntoView()}return!0}).run()}}},addInputRules(){return[nodeInputRule({find:/^(?:---|—-|___\s|\*\*\*\s)$/,type:this.type})]}}),index_default$1=HorizontalRule,__defProp$1=Object.defineProperty,__export=(e,t)=>{for(var S in t)__defProp$1(e,S,{get:t[S],enumerable:!0})},ListItemName=`listItem`,TextStyleName=`textStyle`,bulletListInputRegex=/^\s*([-+*])\s$/,BulletList=Node3.create({name:`bulletList`,addOptions(){return{itemTypeName:`listItem`,HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:`block list`,content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:`ul`}]},renderHTML({HTMLAttributes:e}){return[`ul`,mergeAttributes(this.options.HTMLAttributes,e),0]},markdownTokenName:`list`,parseMarkdown:(e,t)=>e.type!==`list`||e.ordered?[]:{type:`bulletList`,content:e.items?t.parseChildren(e.items):[]},renderMarkdown:(e,t)=>e.content?t.renderChildren(e.content,`
226
226
  `):``,markdownOptions:{indentsContent:!0},addCommands(){return{toggleBulletList:()=>({commands:e,chain:t})=>this.options.keepAttributes?t().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(ListItemName,this.editor.getAttributes(TextStyleName)).run():e.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{"Mod-Shift-8":()=>this.editor.commands.toggleBulletList()}},addInputRules(){let e=wrappingInputRule({find:bulletListInputRegex,type:this.type});return(this.options.keepMarks||this.options.keepAttributes)&&(e=wrappingInputRule({find:bulletListInputRegex,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:()=>this.editor.getAttributes(TextStyleName),editor:this.editor})),[e]}}),ListItem$1=Node3.create({name:`listItem`,addOptions(){return{HTMLAttributes:{},bulletListTypeName:`bulletList`,orderedListTypeName:`orderedList`}},content:`paragraph block*`,defining:!0,parseHTML(){return[{tag:`li`}]},renderHTML({HTMLAttributes:e}){return[`li`,mergeAttributes(this.options.HTMLAttributes,e),0]},markdownTokenName:`list_item`,parseMarkdown:(e,t)=>{var S;if(e.type!==`list_item`)return[];let w=t.parseBlockChildren??t.parseChildren,E=[];if(e.tokens&&e.tokens.length>0)if(e.tokens.some(e=>e.type===`paragraph`))E=w(e.tokens);else{let S=e.tokens[0];if(S&&S.type===`text`&&S.tokens&&S.tokens.length>0){if(E=[{type:`paragraph`,content:t.parseInline(S.tokens)}],e.tokens.length>1){let t=w(e.tokens.slice(1));E.push(...t)}}else E=w(e.tokens)}return E.length===0&&(E=[{type:`paragraph`,content:[]}]),{type:`listItem`,content:E}},renderMarkdown:(e,t,S)=>renderNestedMarkdownContent(e,t,e=>{var t,S;return e.parentType===`bulletList`?`- `:e.parentType===`orderedList`?`${(e.meta?.parentAttrs?.start||1)+e.index}. `:`- `},S),addKeyboardShortcuts(){return{Enter:()=>this.editor.commands.splitListItem(this.name),Tab:()=>this.editor.commands.sinkListItem(this.name),"Shift-Tab":()=>this.editor.commands.liftListItem(this.name)}}}),listHelpers_exports={};__export(listHelpers_exports,{findListItemPos:()=>findListItemPos,getNextListDepth:()=>getNextListDepth,handleBackspace:()=>handleBackspace,handleDelete:()=>handleDelete$1,hasListBefore:()=>hasListBefore,hasListItemAfter:()=>hasListItemAfter,hasListItemBefore:()=>hasListItemBefore,listItemHasSubList:()=>listItemHasSubList,nextListIsDeeper:()=>nextListIsDeeper,nextListIsHigher:()=>nextListIsHigher});var findListItemPos=(e,t)=>{let{$from:S}=t.selection,w=getNodeType(e,t.schema),E=null,D=S.depth,O=S.pos,k=null;for(;D>0&&k===null;)E=S.node(D),E.type===w?k=D:(--D,--O);return k===null?null:{$pos:t.doc.resolve(O),depth:k}},getNextListDepth=(e,t)=>{let S=findListItemPos(e,t);if(!S)return!1;let[,w]=getNodeAtPosition(t,e,S.$pos.pos+4);return w},hasListBefore=(e,t,S)=>{let{$anchor:w}=e.selection,E=Math.max(0,w.pos-2),D=e.doc.resolve(E).node();return!(!D||!S.includes(D.type.name))},hasListItemBefore=(e,t)=>{var S;let{$anchor:w}=t.selection,E=t.doc.resolve(w.pos-2);return!(E.index()===0||E.nodeBefore?.type.name!==e)},listItemHasSubList=(e,t,S)=>{if(!S)return!1;let w=getNodeType(e,t.schema),E=!1;return S.descendants(e=>{e.type===w&&(E=!0)}),E},handleBackspace=(e,t,S)=>{if(e.commands.undoInputRule())return!0;if(e.state.selection.from!==e.state.selection.to)return!1;if(!isNodeActive(e.state,t)&&hasListBefore(e.state,t,S)){let{$anchor:S}=e.state.selection,w=e.state.doc.resolve(S.before()-1),E=[];w.node().descendants((e,S)=>{e.type.name===t&&E.push({node:e,pos:S})});let D=E.at(-1);if(!D)return!1;let O=e.state.doc.resolve(w.start()+D.pos+1);return e.chain().cut({from:S.start()-1,to:S.end()+1},O.end()).joinForward().run()}if(!isNodeActive(e.state,t)||!isAtStartOfNode(e.state))return!1;let w=findListItemPos(t,e.state);if(!w)return!1;let E=e.state.doc.resolve(w.$pos.pos-2).node(w.depth),D=listItemHasSubList(t,e.state,E);return hasListItemBefore(t,e.state)&&!D?e.commands.joinItemBackward():e.chain().liftListItem(t).run()},nextListIsDeeper=(e,t)=>{let S=getNextListDepth(e,t),w=findListItemPos(e,t);return!w||!S?!1:S>w.depth},nextListIsHigher=(e,t)=>{let S=getNextListDepth(e,t),w=findListItemPos(e,t);return!w||!S?!1:S<w.depth},handleDelete$1=(e,t)=>{if(!isNodeActive(e.state,t)||!isAtEndOfNode(e.state,t))return!1;let{selection:S}=e.state,{$from:w,$to:E}=S;return!S.empty&&w.sameParent(E)?!1:nextListIsDeeper(t,e.state)?e.chain().focus(e.state.selection.from+4).lift(t).joinBackward().run():nextListIsHigher(t,e.state)?e.chain().joinForward().joinBackward().run():e.commands.joinItemForward()},hasListItemAfter=(e,t)=>{var S;let{$anchor:w}=t.selection,E=t.doc.resolve(w.pos-w.parentOffset-2);return!(E.index()===E.parent.childCount-1||E.nodeAfter?.type.name!==e)},ListKeymap=Extension.create({name:`listKeymap`,addOptions(){return{listTypes:[{itemName:`listItem`,wrapperNames:[`bulletList`,`orderedList`]},{itemName:`taskItem`,wrapperNames:[`taskList`]}]}},addKeyboardShortcuts(){return{Delete:({editor:e})=>{let t=!1;return this.options.listTypes.forEach(({itemName:S})=>{e.state.schema.nodes[S]!==void 0&&handleDelete$1(e,S)&&(t=!0)}),t},"Mod-Delete":({editor:e})=>{let t=!1;return this.options.listTypes.forEach(({itemName:S})=>{e.state.schema.nodes[S]!==void 0&&handleDelete$1(e,S)&&(t=!0)}),t},Backspace:({editor:e})=>{let t=!1;return this.options.listTypes.forEach(({itemName:S,wrapperNames:w})=>{e.state.schema.nodes[S]!==void 0&&handleBackspace(e,S,w)&&(t=!0)}),t},"Mod-Backspace":({editor:e})=>{let t=!1;return this.options.listTypes.forEach(({itemName:S,wrapperNames:w})=>{e.state.schema.nodes[S]!==void 0&&handleBackspace(e,S,w)&&(t=!0)}),t}}}}),ORDERED_LIST_ITEM_REGEX=/^(\s*)(\d+)\.\s+(.*)$/,INDENTED_LINE_REGEX=/^\s/;function collectOrderedListItems(e){let t=[],S=0,w=0;for(;S<e.length;){let E=e[S],D=E.match(ORDERED_LIST_ITEM_REGEX);if(!D)break;let[,O,k,j]=D,F=O.length,L=j,B=S+1,H=[E];for(;B<e.length;){let t=e[B];if(t.match(ORDERED_LIST_ITEM_REGEX))break;if(t.trim()===``)H.push(t),L+=`
227
227
  `,B+=1;else if(t.match(INDENTED_LINE_REGEX))H.push(t),L+=`
228
228
  ${t.slice(F+2)}`,B+=1;else break}t.push({indent:F,number:parseInt(k,10),content:L.trim(),raw:H.join(`
@@ -232,8 +232,8 @@ ${t.slice(F+2)}`,B+=1;else break}t.push({indent:F,number:parseInt(k,10),content:
232
232
  `)})}E.push({type:`list_item`,raw:w.raw,tokens:j}),D=L}else D+=1}return E}function parseListItems(e,t){return e.map(e=>{if(e.type!==`list_item`)return t.parseChildren([e])[0];let S=[];return e.tokens&&e.tokens.length>0&&e.tokens.forEach(e=>{if(e.type===`paragraph`||e.type===`list`||e.type===`blockquote`||e.type===`code`)S.push(...t.parseChildren([e]));else if(e.type===`text`&&e.tokens){let w=t.parseChildren([e]);S.push({type:`paragraph`,content:w})}else{let w=t.parseChildren([e]);w.length>0&&S.push(...w)}}),{type:`listItem`,content:S}})}var ListItemName2=`listItem`,TextStyleName2=`textStyle`,orderedListInputRegex=/^(\d+)\.\s$/,OrderedList=Node3.create({name:`orderedList`,addOptions(){return{itemTypeName:`listItem`,HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:`block list`,content(){return`${this.options.itemTypeName}+`},addAttributes(){return{start:{default:1,parseHTML:e=>e.hasAttribute(`start`)?parseInt(e.getAttribute(`start`)||``,10):1},type:{default:null,parseHTML:e=>e.getAttribute(`type`)}}},parseHTML(){return[{tag:`ol`}]},renderHTML({HTMLAttributes:e}){let{start:t,...S}=e;return t===1?[`ol`,mergeAttributes(this.options.HTMLAttributes,S),0]:[`ol`,mergeAttributes(this.options.HTMLAttributes,e),0]},markdownTokenName:`list`,parseMarkdown:(e,t)=>{if(e.type!==`list`||!e.ordered)return[];let S=e.start||1,w=e.items?parseListItems(e.items,t):[];return S===1?{type:`orderedList`,content:w}:{type:`orderedList`,attrs:{start:S},content:w}},renderMarkdown:(e,t)=>e.content?t.renderChildren(e.content,`
233
233
  `):``,markdownTokenizer:{name:`orderedList`,level:`block`,start:e=>{let t=e.match(/^(\s*)(\d+)\.\s+/)?.index;return t===void 0?-1:t},tokenize:(e,t,S)=>{var w;let E=e.split(`
234
234
  `),[D,O]=collectOrderedListItems(E);if(D.length===0)return;let k=buildNestedStructure(D,0,S);if(k.length!==0)return{type:`list`,ordered:!0,start:D[0]?.number||1,items:k,raw:E.slice(0,O).join(`
235
- `)}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleOrderedList:()=>({commands:e,chain:t})=>this.options.keepAttributes?t().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(ListItemName2,this.editor.getAttributes(TextStyleName2)).run():e.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{"Mod-Shift-7":()=>this.editor.commands.toggleOrderedList()}},addInputRules(){let e=wrappingInputRule({find:orderedListInputRegex,type:this.type,getAttributes:e=>({start:+e[1]}),joinPredicate:(e,t)=>t.childCount+t.attrs.start===+e[1]});return(this.options.keepMarks||this.options.keepAttributes)&&(e=wrappingInputRule({find:orderedListInputRegex,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:e=>({start:+e[1],...this.editor.getAttributes(TextStyleName2)}),joinPredicate:(e,t)=>t.childCount+t.attrs.start===+e[1],editor:this.editor})),[e]}}),inputRegex$2=/^\s*(\[([( |x])?\])\s$/,TaskItem=Node3.create({name:`taskItem`,addOptions(){return{nested:!1,HTMLAttributes:{},taskListTypeName:`taskList`,a11y:void 0}},content(){return this.options.nested?`paragraph block*`:`paragraph+`},defining:!0,addAttributes(){return{checked:{default:!1,keepOnSplit:!1,parseHTML:e=>{let t=e.getAttribute(`data-checked`);return t===``||t===`true`},renderHTML:e=>({"data-checked":e.checked})}}},parseHTML(){return[{tag:`li[data-type="${this.name}"]`,priority:51}]},renderHTML({node:e,HTMLAttributes:t}){return[`li`,mergeAttributes(this.options.HTMLAttributes,t,{"data-type":this.name}),[`label`,[`input`,{type:`checkbox`,checked:e.attrs.checked?`checked`:null}],[`span`]],[`div`,0]]},parseMarkdown:(e,t)=>{let S=[];if(e.tokens&&e.tokens.length>0?S.push(t.createNode(`paragraph`,{},t.parseInline(e.tokens))):e.text?S.push(t.createNode(`paragraph`,{},[t.createNode(`text`,{text:e.text})])):S.push(t.createNode(`paragraph`,{},[])),e.nestedTokens&&e.nestedTokens.length>0){let w=t.parseChildren(e.nestedTokens);S.push(...w)}return t.createNode(`taskItem`,{checked:e.checked||!1},S)},renderMarkdown:(e,t)=>{var S;return renderNestedMarkdownContent(e,t,`- [${e.attrs?.checked?`x`:` `}] `)},addKeyboardShortcuts(){let e={Enter:()=>this.editor.commands.splitListItem(this.name),"Shift-Tab":()=>this.editor.commands.liftListItem(this.name)};return this.options.nested?{...e,Tab:()=>this.editor.commands.sinkListItem(this.name)}:e},addNodeView(){return({node:e,HTMLAttributes:t,getPos:S,editor:w})=>{let E=document.createElement(`li`),D=document.createElement(`label`),O=document.createElement(`span`),k=document.createElement(`input`),j=document.createElement(`div`),F=e=>{var t,S;k.ariaLabel=((t=this.options.a11y)?.checkboxLabel)?.call(t,e,k.checked)||`Task item checkbox for ${e.textContent||`empty task item`}`};F(e),D.contentEditable=`false`,k.type=`checkbox`,k.addEventListener(`mousedown`,e=>e.preventDefault()),k.addEventListener(`change`,t=>{if(!w.isEditable&&!this.options.onReadOnlyChecked){k.checked=!k.checked;return}let{checked:E}=t.target;w.isEditable&&typeof S==`function`&&w.chain().focus(void 0,{scrollIntoView:!1}).command(({tr:e})=>{let t=S();if(typeof t!=`number`)return!1;let w=e.doc.nodeAt(t);return e.setNodeMarkup(t,void 0,{...w?.attrs,checked:E}),!0}).run(),!w.isEditable&&this.options.onReadOnlyChecked&&(this.options.onReadOnlyChecked(e,E)||(k.checked=!k.checked))}),Object.entries(this.options.HTMLAttributes).forEach(([e,t])=>{E.setAttribute(e,t)}),E.dataset.checked=e.attrs.checked,k.checked=e.attrs.checked,D.append(k,O),E.append(D,j),Object.entries(t).forEach(([e,t])=>{E.setAttribute(e,t)});let L=new Set(Object.keys(t));return{dom:E,contentDOM:j,update:e=>{if(e.type!==this.type)return!1;E.dataset.checked=e.attrs.checked,k.checked=e.attrs.checked,F(e);let t=w.extensionManager.attributes,S=getRenderedAttributes(e,t),D=new Set(Object.keys(S)),O=this.options.HTMLAttributes;return L.forEach(e=>{D.has(e)||(e in O?E.setAttribute(e,O[e]):E.removeAttribute(e))}),Object.entries(S).forEach(([e,t])=>{t==null?e in O?E.setAttribute(e,O[e]):E.removeAttribute(e):E.setAttribute(e,t)}),L=D,!0}}}},addInputRules(){return[wrappingInputRule({find:inputRegex$2,type:this.type,getAttributes:e=>({checked:e[e.length-1]===`x`})})]}}),TaskList=Node3.create({name:`taskList`,addOptions(){return{itemTypeName:`taskItem`,HTMLAttributes:{}}},group:`block list`,content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:`ul[data-type="${this.name}"]`,priority:51}]},renderHTML({HTMLAttributes:e}){return[`ul`,mergeAttributes(this.options.HTMLAttributes,e,{"data-type":this.name}),0]},parseMarkdown:(e,t)=>t.createNode(`taskList`,{},t.parseChildren(e.items||[])),renderMarkdown:(e,t)=>e.content?t.renderChildren(e.content,`
236
- `):``,markdownTokenizer:{name:`taskList`,level:`block`,start(e){var t;let S=e.match(/^\s*[-+*]\s+\[([ xX])\]\s+/)?.index;return S===void 0?-1:S},tokenize(e,t,S){let w=e=>{let t=parseIndentedBlocks(e,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:e=>({indentLevel:e[1].length,mainContent:e[4],checked:e[3].toLowerCase()===`x`}),createToken:(e,t)=>({type:`taskItem`,raw:``,mainContent:e.mainContent,indentLevel:e.indentLevel,checked:e.checked,text:e.mainContent,tokens:S.inlineTokens(e.mainContent),nestedTokens:t}),customNestedParser:w},S);return t?[{type:`taskList`,raw:t.raw,items:t.items}]:S.blockTokens(e)},E=parseIndentedBlocks(e,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:e=>({indentLevel:e[1].length,mainContent:e[4],checked:e[3].toLowerCase()===`x`}),createToken:(e,t)=>({type:`taskItem`,raw:``,mainContent:e.mainContent,indentLevel:e.indentLevel,checked:e.checked,text:e.mainContent,tokens:S.inlineTokens(e.mainContent),nestedTokens:t}),customNestedParser:w},S);if(E)return{type:`taskList`,raw:E.raw,items:E.items}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleTaskList:()=>({commands:e})=>e.toggleList(this.name,this.options.itemTypeName)}},addKeyboardShortcuts(){return{"Mod-Shift-9":()=>this.editor.commands.toggleTaskList()}}}),ListKit=Extension.create({name:`listKit`,addExtensions(){let e=[];return this.options.bulletList!==!1&&e.push(BulletList.configure(this.options.bulletList)),this.options.listItem!==!1&&e.push(ListItem$1.configure(this.options.listItem)),this.options.listKeymap!==!1&&e.push(ListKeymap.configure(this.options.listKeymap)),this.options.orderedList!==!1&&e.push(OrderedList.configure(this.options.orderedList)),this.options.taskItem!==!1&&e.push(TaskItem.configure(this.options.taskItem)),this.options.taskList!==!1&&e.push(TaskList.configure(this.options.taskList)),e}}),EMPTY_PARAGRAPH_MARKDOWN=`&nbsp;`,NBSP_CHAR=`\xA0`,Paragraph=Node3.create({name:`paragraph`,priority:1e3,addOptions(){return{HTMLAttributes:{}}},group:`block`,content:`inline*`,parseHTML(){return[{tag:`p`}]},renderHTML({HTMLAttributes:e}){return[`p`,mergeAttributes(this.options.HTMLAttributes,e),0]},parseMarkdown:(e,t)=>{let S=e.tokens||[];if(S.length===1&&S[0].type===`image`)return t.parseChildren([S[0]]);let w=t.parseInline(S);return S.length===1&&S[0].type===`text`&&(S[0].raw===EMPTY_PARAGRAPH_MARKDOWN||S[0].text===EMPTY_PARAGRAPH_MARKDOWN||S[0].raw===NBSP_CHAR||S[0].text===NBSP_CHAR)&&w.length===1&&w[0].type===`text`&&(w[0].text===EMPTY_PARAGRAPH_MARKDOWN||w[0].text===NBSP_CHAR)?t.createNode(`paragraph`,void 0,[]):t.createNode(`paragraph`,void 0,w)},renderMarkdown:(e,t,S)=>{var w,E;if(!e)return``;let D=Array.isArray(e.content)?e.content:[];if(D.length===0){let e=Array.isArray(S?.previousNode?.content)?S.previousNode.content:[];return S?.previousNode?.type===`paragraph`&&e.length===0?EMPTY_PARAGRAPH_MARKDOWN:``}return t.renderChildren(D)},addCommands(){return{setParagraph:()=>({commands:e})=>e.setNode(this.name)}},addKeyboardShortcuts(){return{"Mod-Alt-0":()=>this.editor.commands.setParagraph()}}}),inputRegex$1=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))$/,pasteRegex=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))/g,Strike=Mark.create({name:`strike`,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`s`},{tag:`del`},{tag:`strike`},{style:`text-decoration`,consuming:!1,getAttrs:e=>e.includes(`line-through`)?{}:!1}]},renderHTML({HTMLAttributes:e}){return[`s`,mergeAttributes(this.options.HTMLAttributes,e),0]},markdownTokenName:`del`,parseMarkdown:(e,t)=>t.applyMark(`strike`,t.parseInline(e.tokens||[])),renderMarkdown:(e,t)=>`~~${t.renderChildren(e)}~~`,addCommands(){return{setStrike:()=>({commands:e})=>e.setMark(this.name),toggleStrike:()=>({commands:e})=>e.toggleMark(this.name),unsetStrike:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-s":()=>this.editor.commands.toggleStrike()}},addInputRules(){return[markInputRule({find:inputRegex$1,type:this.type})]},addPasteRules(){return[markPasteRule({find:pasteRegex,type:this.type})]}}),Text=Node3.create({name:`text`,group:`inline`,parseMarkdown:e=>({type:`text`,text:e.text||``}),renderMarkdown:e=>e.text||``}),Underline=Mark.create({name:`underline`,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`u`},{style:`text-decoration`,consuming:!1,getAttrs:e=>e.includes(`underline`)?{}:!1}]},renderHTML({HTMLAttributes:e}){return[`u`,mergeAttributes(this.options.HTMLAttributes,e),0]},parseMarkdown(e,t){return t.applyMark(this.name||`underline`,t.parseInline(e.tokens||[]))},renderMarkdown(e,t){return`++${t.renderChildren(e)}++`},markdownTokenizer:{name:`underline`,level:`inline`,start(e){return e.indexOf(`++`)},tokenize(e,t,S){let w=/^(\+\+)([\s\S]+?)(\+\+)/.exec(e);if(!w)return;let E=w[2].trim();return{type:`underline`,raw:w[0],text:E,tokens:S.inlineTokens(E)}}},addCommands(){return{setUnderline:()=>({commands:e})=>e.setMark(this.name),toggleUnderline:()=>({commands:e})=>e.toggleMark(this.name),unsetUnderline:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-u":()=>this.editor.commands.toggleUnderline(),"Mod-U":()=>this.editor.commands.toggleUnderline()}}});function dropCursor(e={}){return new Plugin({view(t){return new DropCursorView(t,e)}})}var DropCursorView=class{constructor(e,t){var S;this.editorView=e,this.cursorPos=null,this.element=null,this.timeout=-1,this.width=t.width??1,this.color=t.color===!1?void 0:t.color||`black`,this.class=t.class,this.handlers=[`dragover`,`dragend`,`drop`,`dragleave`].map(t=>{let S=e=>{this[t](e)};return e.dom.addEventListener(t,S),{name:t,handler:S}})}destroy(){this.handlers.forEach(({name:e,handler:t})=>this.editorView.dom.removeEventListener(e,t))}update(e,t){this.cursorPos!=null&&t.doc!=e.state.doc&&(this.cursorPos>e.state.doc.content.size?this.setCursor(null):this.updateOverlay())}setCursor(e){e!=this.cursorPos&&(this.cursorPos=e,e==null?(this.element.parentNode.removeChild(this.element),this.element=null):this.updateOverlay())}updateOverlay(){let e=this.editorView.state.doc.resolve(this.cursorPos),t=!e.parent.inlineContent,S,w=this.editorView.dom,E=w.getBoundingClientRect(),D=E.width/w.offsetWidth,O=E.height/w.offsetHeight;if(t){let t=e.nodeBefore,w=e.nodeAfter;if(t||w){let e=this.editorView.nodeDOM(this.cursorPos-(t?t.nodeSize:0));if(e){let E=e.getBoundingClientRect(),D=t?E.bottom:E.top;t&&w&&(D=(D+this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top)/2);let k=this.width/2*O;S={left:E.left,right:E.right,top:D-k,bottom:D+k}}}}if(!S){let e=this.editorView.coordsAtPos(this.cursorPos),t=this.width/2*D;S={left:e.left-t,right:e.left+t,top:e.top,bottom:e.bottom}}let k=this.editorView.dom.offsetParent;this.element||(this.element=k.appendChild(document.createElement(`div`)),this.class&&(this.element.className=this.class),this.element.style.cssText=`position: absolute; z-index: 50; pointer-events: none;`,this.color&&(this.element.style.backgroundColor=this.color)),this.element.classList.toggle(`prosemirror-dropcursor-block`,t),this.element.classList.toggle(`prosemirror-dropcursor-inline`,!t);let j,F;if(!k||k==document.body&&getComputedStyle(k).position==`static`)j=-pageXOffset,F=-pageYOffset;else{let e=k.getBoundingClientRect(),t=e.width/k.offsetWidth,S=e.height/k.offsetHeight;j=e.left-k.scrollLeft*t,F=e.top-k.scrollTop*S}this.element.style.left=(S.left-j)/D+`px`,this.element.style.top=(S.top-F)/O+`px`,this.element.style.width=(S.right-S.left)/D+`px`,this.element.style.height=(S.bottom-S.top)/O+`px`}scheduleRemoval(e){clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.setCursor(null),e)}dragover(e){if(!this.editorView.editable)return;let t=this.editorView.posAtCoords({left:e.clientX,top:e.clientY}),S=t&&t.inside>=0&&this.editorView.state.doc.nodeAt(t.inside),w=S&&S.type.spec.disableDropCursor,E=typeof w==`function`?w(this.editorView,t,e):w;if(t&&!E){let e=t.pos;if(this.editorView.dragging&&this.editorView.dragging.slice){let t=dropPoint(this.editorView.state.doc,e,this.editorView.dragging.slice);t!=null&&(e=t)}this.setCursor(e),this.scheduleRemoval(5e3)}}dragend(){this.scheduleRemoval(20)}drop(){this.scheduleRemoval(20)}dragleave(e){this.editorView.dom.contains(e.relatedTarget)||this.setCursor(null)}},GapCursor=class e extends Selection$1{constructor(e){super(e,e)}map(t,S){let w=t.resolve(S.map(this.head));return e.valid(w)?new e(w):Selection$1.near(w)}content(){return Slice.empty}eq(t){return t instanceof e&&t.head==this.head}toJSON(){return{type:`gapcursor`,pos:this.head}}static fromJSON(t,S){if(typeof S.pos!=`number`)throw RangeError(`Invalid input for GapCursor.fromJSON`);return new e(t.resolve(S.pos))}getBookmark(){return new GapBookmark(this.anchor)}static valid(e){let t=e.parent;if(t.inlineContent||!closedBefore(e)||!closedAfter(e))return!1;let S=t.type.spec.allowGapCursor;if(S!=null)return S;let w=t.contentMatchAt(e.index()).defaultType;return w&&w.isTextblock}static findGapCursorFrom(t,S,w=!1){search:for(;;){if(!w&&e.valid(t))return t;let E=t.pos,D=null;for(let w=t.depth;;w--){let O=t.node(w);if(S>0?t.indexAfter(w)<O.childCount:t.index(w)>0){D=O.child(S>0?t.indexAfter(w):t.index(w)-1);break}else if(w==0)return null;E+=S;let k=t.doc.resolve(E);if(e.valid(k))return k}for(;;){let O=S>0?D.firstChild:D.lastChild;if(!O){if(D.isAtom&&!D.isText&&!NodeSelection.isSelectable(D)){t=t.doc.resolve(E+D.nodeSize*S),w=!1;continue search}break}D=O,E+=S;let k=t.doc.resolve(E);if(e.valid(k))return k}return null}}};GapCursor.prototype.visible=!1,GapCursor.findFrom=GapCursor.findGapCursorFrom,Selection$1.jsonID(`gapcursor`,GapCursor);var GapBookmark=class e{constructor(e){this.pos=e}map(t){return new e(t.map(this.pos))}resolve(e){let t=e.resolve(this.pos);return GapCursor.valid(t)?new GapCursor(t):Selection$1.near(t)}};function needsGap(e){return e.isAtom||e.spec.isolating||e.spec.createGapCursor}function closedBefore(e){for(let t=e.depth;t>=0;t--){let S=e.index(t),w=e.node(t);if(S==0){if(w.type.spec.isolating)return!0;continue}for(let e=w.child(S-1);;e=e.lastChild){if(e.childCount==0&&!e.inlineContent||needsGap(e.type))return!0;if(e.inlineContent)return!1}}return!0}function closedAfter(e){for(let t=e.depth;t>=0;t--){let S=e.indexAfter(t),w=e.node(t);if(S==w.childCount){if(w.type.spec.isolating)return!0;continue}for(let e=w.child(S);;e=e.firstChild){if(e.childCount==0&&!e.inlineContent||needsGap(e.type))return!0;if(e.inlineContent)return!1}}return!0}function gapCursor(){return new Plugin({props:{decorations:drawGapCursor,createSelectionBetween(e,t,S){return t.pos==S.pos&&GapCursor.valid(S)?new GapCursor(S):null},handleClick,handleKeyDown,handleDOMEvents:{beforeinput}}})}const handleKeyDown=keydownHandler({ArrowLeft:arrow(`horiz`,-1),ArrowRight:arrow(`horiz`,1),ArrowUp:arrow(`vert`,-1),ArrowDown:arrow(`vert`,1)});function arrow(e,t){let S=e==`vert`?t>0?`down`:`up`:t>0?`right`:`left`;return function(e,w,E){let D=e.selection,O=t>0?D.$to:D.$from,k=D.empty;if(D instanceof TextSelection){if(!E.endOfTextblock(S)||O.depth==0)return!1;k=!1,O=e.doc.resolve(t>0?O.after():O.before())}let j=GapCursor.findGapCursorFrom(O,t,k);return j?(w&&w(e.tr.setSelection(new GapCursor(j))),!0):!1}}function handleClick(e,t,S){if(!e||!e.editable)return!1;let w=e.state.doc.resolve(t);if(!GapCursor.valid(w))return!1;let E=e.posAtCoords({left:S.clientX,top:S.clientY});return E&&E.inside>-1&&NodeSelection.isSelectable(e.state.doc.nodeAt(E.inside))?!1:(e.dispatch(e.state.tr.setSelection(new GapCursor(w))),!0)}function beforeinput(e,t){if(t.inputType!=`insertCompositionText`||!(e.state.selection instanceof GapCursor))return!1;let{$from:S}=e.state.selection,w=S.parent.contentMatchAt(S.index()).findWrapping(e.state.schema.nodes.text);if(!w)return!1;let E=Fragment.empty;for(let e=w.length-1;e>=0;e--)E=Fragment.from(w[e].createAndFill(null,E));let D=e.state.tr.replace(S.pos,S.pos,new Slice(E,0,0));return D.setSelection(TextSelection.near(D.doc.resolve(S.pos+1))),e.dispatch(D),!1}function drawGapCursor(e){if(!(e.selection instanceof GapCursor))return null;let t=document.createElement(`div`);return t.className=`ProseMirror-gapcursor`,DecorationSet.create(e.doc,[Decoration.widget(e.selection.head,t,{key:`gapcursor`})])}var GOOD_LEAF_SIZE=200,RopeSequence=function(){};RopeSequence.prototype.append=function(e){return e.length?(e=RopeSequence.from(e),!this.length&&e||e.length<GOOD_LEAF_SIZE&&this.leafAppend(e)||this.length<GOOD_LEAF_SIZE&&e.leafPrepend(this)||this.appendInner(e)):this},RopeSequence.prototype.prepend=function(e){return e.length?RopeSequence.from(e).append(this):this},RopeSequence.prototype.appendInner=function(e){return new Append(this,e)},RopeSequence.prototype.slice=function(e,t){return e===void 0&&(e=0),t===void 0&&(t=this.length),e>=t?RopeSequence.empty:this.sliceInner(Math.max(0,e),Math.min(this.length,t))},RopeSequence.prototype.get=function(e){if(!(e<0||e>=this.length))return this.getInner(e)},RopeSequence.prototype.forEach=function(e,t,S){t===void 0&&(t=0),S===void 0&&(S=this.length),t<=S?this.forEachInner(e,t,S,0):this.forEachInvertedInner(e,t,S,0)},RopeSequence.prototype.map=function(e,t,S){t===void 0&&(t=0),S===void 0&&(S=this.length);var w=[];return this.forEach(function(t,S){return w.push(e(t,S))},t,S),w},RopeSequence.from=function(e){return e instanceof RopeSequence?e:e&&e.length?new Leaf(e):RopeSequence.empty};var Leaf=function(e){function t(t){e.call(this),this.values=t}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var S={length:{configurable:!0},depth:{configurable:!0}};return t.prototype.flatten=function(){return this.values},t.prototype.sliceInner=function(e,S){return e==0&&S==this.length?this:new t(this.values.slice(e,S))},t.prototype.getInner=function(e){return this.values[e]},t.prototype.forEachInner=function(e,t,S,w){for(var E=t;E<S;E++)if(e(this.values[E],w+E)===!1)return!1},t.prototype.forEachInvertedInner=function(e,t,S,w){for(var E=t-1;E>=S;E--)if(e(this.values[E],w+E)===!1)return!1},t.prototype.leafAppend=function(e){if(this.length+e.length<=GOOD_LEAF_SIZE)return new t(this.values.concat(e.flatten()))},t.prototype.leafPrepend=function(e){if(this.length+e.length<=GOOD_LEAF_SIZE)return new t(e.flatten().concat(this.values))},S.length.get=function(){return this.values.length},S.depth.get=function(){return 0},Object.defineProperties(t.prototype,S),t}(RopeSequence);RopeSequence.empty=new Leaf([]);var Append=function(e){function t(t,S){e.call(this),this.left=t,this.right=S,this.length=t.length+S.length,this.depth=Math.max(t.depth,S.depth)+1}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.flatten=function(){return this.left.flatten().concat(this.right.flatten())},t.prototype.getInner=function(e){return e<this.left.length?this.left.get(e):this.right.get(e-this.left.length)},t.prototype.forEachInner=function(e,t,S,w){var E=this.left.length;if(t<E&&this.left.forEachInner(e,t,Math.min(S,E),w)===!1||S>E&&this.right.forEachInner(e,Math.max(t-E,0),Math.min(this.length,S)-E,w+E)===!1)return!1},t.prototype.forEachInvertedInner=function(e,t,S,w){var E=this.left.length;if(t>E&&this.right.forEachInvertedInner(e,t-E,Math.max(S,E)-E,w+E)===!1||S<E&&this.left.forEachInvertedInner(e,Math.min(t,E),S,w)===!1)return!1},t.prototype.sliceInner=function(e,t){if(e==0&&t==this.length)return this;var S=this.left.length;return t<=S?this.left.slice(e,t):e>=S?this.right.slice(e-S,t-S):this.left.slice(e,S).append(this.right.slice(0,t-S))},t.prototype.leafAppend=function(e){var S=this.right.leafAppend(e);if(S)return new t(this.left,S)},t.prototype.leafPrepend=function(e){var S=this.left.leafPrepend(e);if(S)return new t(S,this.right)},t.prototype.appendInner=function(e){return this.left.depth>=Math.max(this.right.depth,e.depth)+1?new t(this.left,new t(this.right,e)):new t(this,e)},t}(RopeSequence);const max_empty_items=500;var Branch=class e{constructor(e,t){this.items=e,this.eventCount=t}popEvent(t,S){if(this.eventCount==0)return null;let w=this.items.length;for(;;w--)if(this.items.get(w-1).selection){--w;break}let E,D;S&&(E=this.remapping(w,this.items.length),D=E.maps.length);let O=t.tr,k,j,F=[],L=[];return this.items.forEach((t,S)=>{if(!t.step){E||(E=this.remapping(w,S+1),D=E.maps.length),D--,L.push(t);return}if(E){L.push(new Item$1(t.map));let e=t.step.map(E.slice(D)),S;e&&O.maybeStep(e).doc&&(S=O.mapping.maps[O.mapping.maps.length-1],F.push(new Item$1(S,void 0,void 0,F.length+L.length))),D--,S&&E.appendMap(S,D)}else O.maybeStep(t.step);if(t.selection)return k=E?t.selection.map(E.slice(D)):t.selection,j=new e(this.items.slice(0,w).append(L.reverse().concat(F)),this.eventCount-1),!1},this.items.length,0),{remaining:j,transform:O,selection:k}}addTransform(t,S,w,E){let D=[],O=this.eventCount,k=this.items,j=!E&&k.length?k.get(k.length-1):null;for(let e=0;e<t.steps.length;e++){let w=t.steps[e].invert(t.docs[e]),F=new Item$1(t.mapping.maps[e],w,S),L;(L=j&&j.merge(F))&&(F=L,e?D.pop():k=k.slice(0,k.length-1)),D.push(F),S&&=(O++,void 0),E||(j=F)}let F=O-w.depth;return F>DEPTH_OVERFLOW&&(k=cutOffEvents(k,F),O-=F),new e(k.append(D),O)}remapping(e,t){let S=new Mapping;return this.items.forEach((t,w)=>{let E=t.mirrorOffset!=null&&w-t.mirrorOffset>=e?S.maps.length-t.mirrorOffset:void 0;S.appendMap(t.map,E)},e,t),S}addMaps(t){return this.eventCount==0?this:new e(this.items.append(t.map(e=>new Item$1(e))),this.eventCount)}rebased(t,S){if(!this.eventCount)return this;let w=[],E=Math.max(0,this.items.length-S),D=t.mapping,O=t.steps.length,k=this.eventCount;this.items.forEach(e=>{e.selection&&k--},E);let j=S;this.items.forEach(e=>{let S=D.getMirror(--j);if(S==null)return;O=Math.min(O,S);let E=D.maps[S];if(e.step){let O=t.steps[S].invert(t.docs[S]),F=e.selection&&e.selection.map(D.slice(j+1,S));F&&k++,w.push(new Item$1(E,O,F))}else w.push(new Item$1(E))},E);let F=[];for(let e=S;e<O;e++)F.push(new Item$1(D.maps[e]));let L=new e(this.items.slice(0,E).append(F).append(w),k);return L.emptyItemCount()>max_empty_items&&(L=L.compress(this.items.length-w.length)),L}emptyItemCount(){let e=0;return this.items.forEach(t=>{t.step||e++}),e}compress(t=this.items.length){let S=this.remapping(0,t),w=S.maps.length,E=[],D=0;return this.items.forEach((e,O)=>{if(O>=t)E.push(e),e.selection&&D++;else if(e.step){let t=e.step.map(S.slice(w)),O=t&&t.getMap();if(w--,O&&S.appendMap(O,w),t){let k=e.selection&&e.selection.map(S.slice(w));k&&D++;let j=new Item$1(O.invert(),t,k),F,L=E.length-1;(F=E.length&&E[L].merge(j))?E[L]=F:E.push(j)}}else e.map&&w--},this.items.length,0),new e(RopeSequence.from(E.reverse()),D)}};Branch.empty=new Branch(RopeSequence.empty,0);function cutOffEvents(e,t){let S;return e.forEach((e,w)=>{if(e.selection&&t--==0)return S=w,!1}),e.slice(S)}var Item$1=class e{constructor(e,t,S,w){this.map=e,this.step=t,this.selection=S,this.mirrorOffset=w}merge(t){if(this.step&&t.step&&!t.selection){let S=t.step.merge(this.step);if(S)return new e(S.getMap().invert(),S,this.selection)}}},HistoryState=class{constructor(e,t,S,w,E){this.done=e,this.undone=t,this.prevRanges=S,this.prevTime=w,this.prevComposition=E}};const DEPTH_OVERFLOW=20;function applyTransaction(e,t,S,w){let E=S.getMeta(historyKey),D;if(E)return E.historyState;S.getMeta(closeHistoryKey)&&(e=new HistoryState(e.done,e.undone,null,0,-1));let O=S.getMeta(`appendedTransaction`);if(S.steps.length==0)return e;if(O&&O.getMeta(historyKey))return O.getMeta(historyKey).redo?new HistoryState(e.done.addTransform(S,void 0,w,mustPreserveItems(t)),e.undone,rangesFor(S.mapping.maps),e.prevTime,e.prevComposition):new HistoryState(e.done,e.undone.addTransform(S,void 0,w,mustPreserveItems(t)),null,e.prevTime,e.prevComposition);if(S.getMeta(`addToHistory`)!==!1&&!(O&&O.getMeta(`addToHistory`)===!1)){let E=S.getMeta(`composition`),D=e.prevTime==0||!O&&e.prevComposition!=E&&(e.prevTime<(S.time||0)-w.newGroupDelay||!isAdjacentTo(S,e.prevRanges)),k=O?mapRanges(e.prevRanges,S.mapping):rangesFor(S.mapping.maps);return new HistoryState(e.done.addTransform(S,D?t.selection.getBookmark():void 0,w,mustPreserveItems(t)),Branch.empty,k,S.time,E??e.prevComposition)}else if(D=S.getMeta(`rebased`))return new HistoryState(e.done.rebased(S,D),e.undone.rebased(S,D),mapRanges(e.prevRanges,S.mapping),e.prevTime,e.prevComposition);else return new HistoryState(e.done.addMaps(S.mapping.maps),e.undone.addMaps(S.mapping.maps),mapRanges(e.prevRanges,S.mapping),e.prevTime,e.prevComposition)}function isAdjacentTo(e,t){if(!t)return!1;if(!e.docChanged)return!0;let S=!1;return e.mapping.maps[0].forEach((e,w)=>{for(let E=0;E<t.length;E+=2)e<=t[E+1]&&w>=t[E]&&(S=!0)}),S}function rangesFor(e){let t=[];for(let S=e.length-1;S>=0&&t.length==0;S--)e[S].forEach((e,S,w,E)=>t.push(w,E));return t}function mapRanges(e,t){if(!e)return null;let S=[];for(let w=0;w<e.length;w+=2){let E=t.map(e[w],1),D=t.map(e[w+1],-1);E<=D&&S.push(E,D)}return S}function histTransaction(e,t,S){let w=mustPreserveItems(t),E=historyKey.get(t).spec.config,D=(S?e.undone:e.done).popEvent(t,w);if(!D)return null;let O=D.selection.resolve(D.transform.doc),k=(S?e.done:e.undone).addTransform(D.transform,t.selection.getBookmark(),E,w),j=new HistoryState(S?k:D.remaining,S?D.remaining:k,null,0,-1);return D.transform.setSelection(O).setMeta(historyKey,{redo:S,historyState:j})}let cachedPreserveItems=!1,cachedPreserveItemsPlugins=null;function mustPreserveItems(e){let t=e.plugins;if(cachedPreserveItemsPlugins!=t){cachedPreserveItems=!1,cachedPreserveItemsPlugins=t;for(let e=0;e<t.length;e++)if(t[e].spec.historyPreserveItems){cachedPreserveItems=!0;break}}return cachedPreserveItems}const historyKey=new PluginKey(`history`),closeHistoryKey=new PluginKey(`closeHistory`);function history(e={}){return e={depth:e.depth||100,newGroupDelay:e.newGroupDelay||500},new Plugin({key:historyKey,state:{init(){return new HistoryState(Branch.empty,Branch.empty,null,0,-1)},apply(t,S,w){return applyTransaction(S,w,t,e)}},config:e,props:{handleDOMEvents:{beforeinput(e,t){let S=t.inputType,w=S==`historyUndo`?undo:S==`historyRedo`?redo:null;return!w||!e.editable?!1:(t.preventDefault(),w(e.state,e.dispatch))}}}})}function buildCommand(e,t){return(S,w)=>{let E=historyKey.getState(S);if(!E||(e?E.undone:E.done).eventCount==0)return!1;if(w){let D=histTransaction(E,S,e);D&&w(t?D.scrollIntoView():D)}return!0}}const undo=buildCommand(!1,!0),redo=buildCommand(!0,!0),undoNoScroll=buildCommand(!1,!1),redoNoScroll=buildCommand(!0,!1);var CharacterCount=Extension.create({name:`characterCount`,addOptions(){return{limit:null,mode:`textSize`,textCounter:e=>e.length,wordCounter:e=>e.split(` `).filter(e=>e!==``).length}},addStorage(){return{characters:()=>0,words:()=>0}},onBeforeCreate(){this.storage.characters=e=>{let t=e?.node||this.editor.state.doc;if((e?.mode||this.options.mode)===`textSize`){let e=t.textBetween(0,t.content.size,void 0,` `);return this.options.textCounter(e)}return t.nodeSize},this.storage.words=e=>{let t=e?.node||this.editor.state.doc,S=t.textBetween(0,t.content.size,` `,` `);return this.options.wordCounter(S)}},addProseMirrorPlugins(){let e=!1;return[new Plugin({key:new PluginKey(`characterCount`),appendTransaction:(t,S,w)=>{if(e)return;let E=this.options.limit;if(E==null||E===0){e=!0;return}let D=this.storage.characters({node:w.doc});if(D>E){let t=D-E,S=0,O=t;console.warn(`[CharacterCount] Initial content exceeded limit of ${E} characters. Content was automatically trimmed.`);let k=w.tr.deleteRange(0,O);return e=!0,k}e=!0},filterTransaction:(e,t)=>{let S=this.options.limit;if(!e.docChanged||S===0||S==null)return!0;let w=this.storage.characters({node:t.doc}),E=this.storage.characters({node:e.doc});if(E<=S||w>S&&E>S&&E<=w)return!0;if(w>S&&E>S&&E>w||!e.getMeta(`paste`))return!1;let D=e.selection.$head.pos,O=D-(E-S),k=D;return e.deleteRange(O,k),!(this.storage.characters({node:e.doc})>S)}})]}}),Dropcursor=Extension.create({name:`dropCursor`,addOptions(){return{color:`currentColor`,width:1,class:void 0}},addProseMirrorPlugins(){return[dropCursor(this.options)]}}),Focus=Extension.create({name:`focus`,addOptions(){return{className:`has-focus`,mode:`all`}},addProseMirrorPlugins(){return[new Plugin({key:new PluginKey(`focus`),props:{decorations:({doc:e,selection:t})=>{let{isEditable:S,isFocused:w}=this.editor,{anchor:E}=t,D=[];if(!S||!w)return DecorationSet.create(e,[]);let O=0;this.options.mode===`deepest`&&e.descendants((e,t)=>{if(!e.isText){if(!(E>=t&&E<=t+e.nodeSize-1))return!1;O+=1}});let k=0;return e.descendants((e,t)=>{if(e.isText||!(E>=t&&E<=t+e.nodeSize-1))return!1;if(k+=1,this.options.mode===`deepest`&&O-k>0||this.options.mode===`shallowest`&&k>1)return this.options.mode===`deepest`;D.push(Decoration.node(t,t+e.nodeSize,{class:this.options.className}))}),DecorationSet.create(e,D)}}})]}}),Gapcursor=Extension.create({name:`gapCursor`,addProseMirrorPlugins(){return[gapCursor()]},extendNodeSchema(e){var t;return{allowGapCursor:callOrReturn(getExtensionField(e,`allowGapCursor`,{name:e.name,options:e.options,storage:e.storage}))??null}}}),DEFAULT_DATA_ATTRIBUTE=`placeholder`;function preparePlaceholderAttribute(e){return e.replace(/\s+/g,`-`).replace(/[^a-zA-Z0-9-]/g,``).replace(/^[0-9-]+/,``).replace(/^-+/,``).toLowerCase()}var Placeholder=Extension.create({name:`placeholder`,addOptions(){return{emptyEditorClass:`is-editor-empty`,emptyNodeClass:`is-empty`,dataAttribute:DEFAULT_DATA_ATTRIBUTE,placeholder:`Write something …`,showOnlyWhenEditable:!0,showOnlyCurrent:!0,includeChildren:!1}},addProseMirrorPlugins(){let e=this.options.dataAttribute?`data-${preparePlaceholderAttribute(this.options.dataAttribute)}`:`data-${DEFAULT_DATA_ATTRIBUTE}`;return[new Plugin({key:new PluginKey(`placeholder`),props:{decorations:({doc:t,selection:S})=>{let w=this.editor.isEditable||!this.options.showOnlyWhenEditable,{anchor:E}=S,D=[];if(!w)return null;let O=this.editor.isEmpty;return t.descendants((t,S)=>{let w=E>=S&&E<=S+t.nodeSize,k=!t.isLeaf&&isNodeEmpty(t);if(!t.type.isTextblock)return this.options.includeChildren;if((w||!this.options.showOnlyCurrent)&&k){let E=[this.options.emptyNodeClass];O&&E.push(this.options.emptyEditorClass);let k=Decoration.node(S,S+t.nodeSize,{class:E.join(` `),[e]:typeof this.options.placeholder==`function`?this.options.placeholder({editor:this.editor,node:t,pos:S,hasAnchor:w}):this.options.placeholder});D.push(k)}return this.options.includeChildren}),DecorationSet.create(t,D)}}})]}}),Selection=Extension.create({name:`selection`,addOptions(){return{className:`selection`}},addProseMirrorPlugins(){let{editor:e,options:t}=this;return[new Plugin({key:new PluginKey(`selection`),props:{decorations(S){return S.selection.empty||e.isFocused||!e.isEditable||isNodeSelection(S.selection)||e.view.dragging?null:DecorationSet.create(S.doc,[Decoration.inline(S.selection.from,S.selection.to,{class:t.className})])}}})]}}),skipTrailingNodeMeta=`skipTrailingNode`;function nodeEqualsType({types:e,node:t}){return t&&Array.isArray(e)&&e.includes(t.type)||t?.type===e}var TrailingNode=Extension.create({name:`trailingNode`,addOptions(){return{node:void 0,notAfter:[]}},addProseMirrorPlugins(){var e;let t=new PluginKey(this.name),S=this.options.node||this.editor.schema.topNodeType.contentMatch.defaultType?.name||`paragraph`,w=Object.entries(this.editor.schema.nodes).map(([,e])=>e).filter(e=>(this.options.notAfter||[]).concat(S).includes(e.name));return[new Plugin({key:t,appendTransaction:(e,w,E)=>{let{doc:D,tr:O,schema:k}=E,j=t.getState(E),F=D.content.size,L=k.nodes[S];if(!e.some(e=>e.getMeta(`skipTrailingNode`))&&j)return O.insert(F,L.create())},state:{init:(e,t)=>{let S=t.tr.doc.lastChild;return!nodeEqualsType({node:S,types:w})},apply:(e,t)=>{if(!e.docChanged||e.getMeta(`__uniqueIDTransaction`))return t;let S=e.doc.lastChild;return!nodeEqualsType({node:S,types:w})}}})]}}),UndoRedo=Extension.create({name:`undoRedo`,addOptions(){return{depth:100,newGroupDelay:500}},addCommands(){return{undo:()=>({state:e,dispatch:t})=>undo(e,t),redo:()=>({state:e,dispatch:t})=>redo(e,t)}},addProseMirrorPlugins(){return[history(this.options)]},addKeyboardShortcuts(){return{"Mod-z":()=>this.editor.commands.undo(),"Shift-Mod-z":()=>this.editor.commands.redo(),"Mod-y":()=>this.editor.commands.redo(),"Mod-я":()=>this.editor.commands.undo(),"Shift-Mod-я":()=>this.editor.commands.redo()}}}),StarterKit=Extension.create({name:`starterKit`,addExtensions(){var e,t,S,w;let E=[];return this.options.bold!==!1&&E.push(Bold.configure(this.options.bold)),this.options.blockquote!==!1&&E.push(Blockquote.configure(this.options.blockquote)),this.options.bulletList!==!1&&E.push(BulletList.configure(this.options.bulletList)),this.options.code!==!1&&E.push(Code.configure(this.options.code)),this.options.codeBlock!==!1&&E.push(CodeBlock.configure(this.options.codeBlock)),this.options.document!==!1&&E.push(Document$2.configure(this.options.document)),this.options.dropcursor!==!1&&E.push(Dropcursor.configure(this.options.dropcursor)),this.options.gapcursor!==!1&&E.push(Gapcursor.configure(this.options.gapcursor)),this.options.hardBreak!==!1&&E.push(HardBreak.configure(this.options.hardBreak)),this.options.heading!==!1&&E.push(Heading.configure(this.options.heading)),this.options.undoRedo!==!1&&E.push(UndoRedo.configure(this.options.undoRedo)),this.options.horizontalRule!==!1&&E.push(HorizontalRule.configure(this.options.horizontalRule)),this.options.italic!==!1&&E.push(Italic.configure(this.options.italic)),this.options.listItem!==!1&&E.push(ListItem$1.configure(this.options.listItem)),this.options.listKeymap!==!1&&E.push(ListKeymap.configure(this.options?.listKeymap)),this.options.link!==!1&&E.push(Link.configure(this.options?.link)),this.options.orderedList!==!1&&E.push(OrderedList.configure(this.options.orderedList)),this.options.paragraph!==!1&&E.push(Paragraph.configure(this.options.paragraph)),this.options.strike!==!1&&E.push(Strike.configure(this.options.strike)),this.options.text!==!1&&E.push(Text.configure(this.options.text)),this.options.underline!==!1&&E.push(Underline.configure(this.options?.underline)),this.options.trailingNode!==!1&&E.push(TrailingNode.configure(this.options?.trailingNode)),E}}),index_default$1=StarterKit,inputRegex=/(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/,Image=Node3.create({name:`image`,addOptions(){return{inline:!1,allowBase64:!1,HTMLAttributes:{},resize:!1}},inline(){return this.options.inline},group(){return this.options.inline?`inline`:`block`},draggable:!0,addAttributes(){return{src:{default:null},alt:{default:null},title:{default:null},width:{default:null},height:{default:null}}},parseHTML(){return[{tag:this.options.allowBase64?`img[src]`:`img[src]:not([src^="data:"])`}]},renderHTML({HTMLAttributes:e}){return[`img`,mergeAttributes(this.options.HTMLAttributes,e)]},parseMarkdown:(e,t)=>t.createNode(`image`,{src:e.href,title:e.title,alt:e.text}),renderMarkdown:e=>{var t,S,w,E,D,O;let k=e.attrs?.src??``,j=e.attrs?.alt??``,F=e.attrs?.title??``;return F?`![${j}](${k} "${F}")`:`![${j}](${k})`},addNodeView(){if(!this.options.resize||!this.options.resize.enabled||typeof document>`u`)return null;let{directions:e,minWidth:t,minHeight:S,alwaysPreserveAspectRatio:w}=this.options.resize;return({node:E,getPos:D,HTMLAttributes:O,editor:k})=>{let j=document.createElement(`img`);Object.entries(O).forEach(([e,t])=>{if(t!=null)switch(e){case`width`:case`height`:break;default:j.setAttribute(e,t);break}}),j.src=O.src;let F=new ResizableNodeView({element:j,editor:k,node:E,getPos:D,onResize:(e,t)=>{j.style.width=`${e}px`,j.style.height=`${t}px`},onCommit:(e,t)=>{let S=D();S!==void 0&&this.editor.chain().setNodeSelection(S).updateAttributes(this.name,{width:e,height:t}).run()},onUpdate:(e,t,S)=>e.type===E.type,options:{directions:e,min:{width:t,height:S},preserveAspectRatio:w===!0}}),L=F.dom;return L.style.visibility=`hidden`,L.style.pointerEvents=`none`,j.onload=()=>{L.style.visibility=``,L.style.pointerEvents=``},F}},addCommands(){return{setImage:e=>({commands:t})=>t.insertContent({type:this.name,attrs:e})}},addInputRules(){return[nodeInputRule({find:inputRegex,type:this.type,getAttributes:e=>{let[,,t,S,w]=e;return{src:S,alt:t,title:w}}})]}}),index_default=Image;function ok$2(){}var Schema=class{constructor(e,t,S){this.normal=t,this.property=e,S&&(this.space=S)}};Schema.prototype.normal={},Schema.prototype.property={},Schema.prototype.space=void 0;function merge(e,t){let S={},w={};for(let t of e)Object.assign(S,t.property),Object.assign(w,t.normal);return new Schema(S,w,t)}function normalize$3(e){return e.toLowerCase()}var Info=class{constructor(e,t){this.attribute=t,this.property=e}};Info.prototype.attribute=``,Info.prototype.booleanish=!1,Info.prototype.boolean=!1,Info.prototype.commaOrSpaceSeparated=!1,Info.prototype.commaSeparated=!1,Info.prototype.defined=!1,Info.prototype.mustUseProperty=!1,Info.prototype.number=!1,Info.prototype.overloadedBoolean=!1,Info.prototype.property=``,Info.prototype.spaceSeparated=!1,Info.prototype.space=void 0;var types_exports=__exportAll({boolean:()=>boolean,booleanish:()=>booleanish,commaOrSpaceSeparated:()=>commaOrSpaceSeparated,commaSeparated:()=>commaSeparated,number:()=>number,overloadedBoolean:()=>overloadedBoolean,spaceSeparated:()=>spaceSeparated});let powers=0;const boolean=increment(),booleanish=increment(),overloadedBoolean=increment(),number=increment(),spaceSeparated=increment(),commaSeparated=increment(),commaOrSpaceSeparated=increment();function increment(){return 2**++powers}const checks=Object.keys(types_exports);var DefinedInfo=class extends Info{constructor(e,t,S,w){let E=-1;if(super(e,t),mark(this,`space`,w),typeof S==`number`)for(;++E<checks.length;){let e=checks[E];mark(this,checks[E],(S&types_exports[e])===types_exports[e])}}};DefinedInfo.prototype.defined=!0;function mark(e,t,S){S&&(e[t]=S)}function create$15(e){let t={},S={};for(let[w,E]of Object.entries(e.properties)){let D=new DefinedInfo(w,e.transform(e.attributes||{},w),E,e.space);e.mustUseProperty&&e.mustUseProperty.includes(w)&&(D.mustUseProperty=!0),t[w]=D,S[normalize$3(w)]=w,S[normalize$3(D.attribute)]=w}return new Schema(t,S,e.space)}const aria=create$15({properties:{ariaActiveDescendant:null,ariaAtomic:booleanish,ariaAutoComplete:null,ariaBusy:booleanish,ariaChecked:booleanish,ariaColCount:number,ariaColIndex:number,ariaColSpan:number,ariaControls:spaceSeparated,ariaCurrent:null,ariaDescribedBy:spaceSeparated,ariaDetails:null,ariaDisabled:booleanish,ariaDropEffect:spaceSeparated,ariaErrorMessage:null,ariaExpanded:booleanish,ariaFlowTo:spaceSeparated,ariaGrabbed:booleanish,ariaHasPopup:null,ariaHidden:booleanish,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:spaceSeparated,ariaLevel:number,ariaLive:null,ariaModal:booleanish,ariaMultiLine:booleanish,ariaMultiSelectable:booleanish,ariaOrientation:null,ariaOwns:spaceSeparated,ariaPlaceholder:null,ariaPosInSet:number,ariaPressed:booleanish,ariaReadOnly:booleanish,ariaRelevant:null,ariaRequired:booleanish,ariaRoleDescription:spaceSeparated,ariaRowCount:number,ariaRowIndex:number,ariaRowSpan:number,ariaSelected:booleanish,ariaSetSize:number,ariaSort:null,ariaValueMax:number,ariaValueMin:number,ariaValueNow:number,ariaValueText:null,role:null},transform(e,t){return t===`role`?t:`aria-`+t.slice(4).toLowerCase()}});function caseSensitiveTransform(e,t){return t in e?e[t]:t}function caseInsensitiveTransform(e,t){return caseSensitiveTransform(e,t.toLowerCase())}const html$2=create$15({attributes:{acceptcharset:`accept-charset`,classname:`class`,htmlfor:`for`,httpequiv:`http-equiv`},mustUseProperty:[`checked`,`multiple`,`muted`,`selected`],properties:{abbr:null,accept:commaSeparated,acceptCharset:spaceSeparated,accessKey:spaceSeparated,action:null,allow:null,allowFullScreen:boolean,allowPaymentRequest:boolean,allowUserMedia:boolean,alt:null,as:null,async:boolean,autoCapitalize:null,autoComplete:spaceSeparated,autoFocus:boolean,autoPlay:boolean,blocking:spaceSeparated,capture:null,charSet:null,checked:boolean,cite:null,className:spaceSeparated,cols:number,colSpan:null,content:null,contentEditable:booleanish,controls:boolean,controlsList:spaceSeparated,coords:number|commaSeparated,crossOrigin:null,data:null,dateTime:null,decoding:null,default:boolean,defer:boolean,dir:null,dirName:null,disabled:boolean,download:overloadedBoolean,draggable:booleanish,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:boolean,formTarget:null,headers:spaceSeparated,height:number,hidden:overloadedBoolean,high:number,href:null,hrefLang:null,htmlFor:spaceSeparated,httpEquiv:spaceSeparated,id:null,imageSizes:null,imageSrcSet:null,inert:boolean,inputMode:null,integrity:null,is:null,isMap:boolean,itemId:null,itemProp:spaceSeparated,itemRef:spaceSeparated,itemScope:boolean,itemType:spaceSeparated,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:boolean,low:number,manifest:null,max:null,maxLength:number,media:null,method:null,min:null,minLength:number,multiple:boolean,muted:boolean,name:null,nonce:null,noModule:boolean,noValidate:boolean,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:boolean,optimum:number,pattern:null,ping:spaceSeparated,placeholder:null,playsInline:boolean,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:boolean,referrerPolicy:null,rel:spaceSeparated,required:boolean,reversed:boolean,rows:number,rowSpan:number,sandbox:spaceSeparated,scope:null,scoped:boolean,seamless:boolean,selected:boolean,shadowRootClonable:boolean,shadowRootDelegatesFocus:boolean,shadowRootMode:null,shape:null,size:number,sizes:null,slot:null,span:number,spellCheck:booleanish,src:null,srcDoc:null,srcLang:null,srcSet:null,start:number,step:null,style:null,tabIndex:number,target:null,title:null,translate:null,type:null,typeMustMatch:boolean,useMap:null,value:booleanish,width:number,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:spaceSeparated,axis:null,background:null,bgColor:null,border:number,borderColor:null,bottomMargin:number,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:boolean,declare:boolean,event:null,face:null,frame:null,frameBorder:null,hSpace:number,leftMargin:number,link:null,longDesc:null,lowSrc:null,marginHeight:number,marginWidth:number,noResize:boolean,noHref:boolean,noShade:boolean,noWrap:boolean,object:null,profile:null,prompt:null,rev:null,rightMargin:number,rules:null,scheme:null,scrolling:booleanish,standby:null,summary:null,text:null,topMargin:number,valueType:null,version:null,vAlign:null,vLink:null,vSpace:number,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:boolean,disableRemotePlayback:boolean,prefix:null,property:null,results:number,security:null,unselectable:null},space:`html`,transform:caseInsensitiveTransform}),svg$1=create$15({attributes:{accentHeight:`accent-height`,alignmentBaseline:`alignment-baseline`,arabicForm:`arabic-form`,baselineShift:`baseline-shift`,capHeight:`cap-height`,className:`class`,clipPath:`clip-path`,clipRule:`clip-rule`,colorInterpolation:`color-interpolation`,colorInterpolationFilters:`color-interpolation-filters`,colorProfile:`color-profile`,colorRendering:`color-rendering`,crossOrigin:`crossorigin`,dataType:`datatype`,dominantBaseline:`dominant-baseline`,enableBackground:`enable-background`,fillOpacity:`fill-opacity`,fillRule:`fill-rule`,floodColor:`flood-color`,floodOpacity:`flood-opacity`,fontFamily:`font-family`,fontSize:`font-size`,fontSizeAdjust:`font-size-adjust`,fontStretch:`font-stretch`,fontStyle:`font-style`,fontVariant:`font-variant`,fontWeight:`font-weight`,glyphName:`glyph-name`,glyphOrientationHorizontal:`glyph-orientation-horizontal`,glyphOrientationVertical:`glyph-orientation-vertical`,hrefLang:`hreflang`,horizAdvX:`horiz-adv-x`,horizOriginX:`horiz-origin-x`,horizOriginY:`horiz-origin-y`,imageRendering:`image-rendering`,letterSpacing:`letter-spacing`,lightingColor:`lighting-color`,markerEnd:`marker-end`,markerMid:`marker-mid`,markerStart:`marker-start`,navDown:`nav-down`,navDownLeft:`nav-down-left`,navDownRight:`nav-down-right`,navLeft:`nav-left`,navNext:`nav-next`,navPrev:`nav-prev`,navRight:`nav-right`,navUp:`nav-up`,navUpLeft:`nav-up-left`,navUpRight:`nav-up-right`,onAbort:`onabort`,onActivate:`onactivate`,onAfterPrint:`onafterprint`,onBeforePrint:`onbeforeprint`,onBegin:`onbegin`,onCancel:`oncancel`,onCanPlay:`oncanplay`,onCanPlayThrough:`oncanplaythrough`,onChange:`onchange`,onClick:`onclick`,onClose:`onclose`,onCopy:`oncopy`,onCueChange:`oncuechange`,onCut:`oncut`,onDblClick:`ondblclick`,onDrag:`ondrag`,onDragEnd:`ondragend`,onDragEnter:`ondragenter`,onDragExit:`ondragexit`,onDragLeave:`ondragleave`,onDragOver:`ondragover`,onDragStart:`ondragstart`,onDrop:`ondrop`,onDurationChange:`ondurationchange`,onEmptied:`onemptied`,onEnd:`onend`,onEnded:`onended`,onError:`onerror`,onFocus:`onfocus`,onFocusIn:`onfocusin`,onFocusOut:`onfocusout`,onHashChange:`onhashchange`,onInput:`oninput`,onInvalid:`oninvalid`,onKeyDown:`onkeydown`,onKeyPress:`onkeypress`,onKeyUp:`onkeyup`,onLoad:`onload`,onLoadedData:`onloadeddata`,onLoadedMetadata:`onloadedmetadata`,onLoadStart:`onloadstart`,onMessage:`onmessage`,onMouseDown:`onmousedown`,onMouseEnter:`onmouseenter`,onMouseLeave:`onmouseleave`,onMouseMove:`onmousemove`,onMouseOut:`onmouseout`,onMouseOver:`onmouseover`,onMouseUp:`onmouseup`,onMouseWheel:`onmousewheel`,onOffline:`onoffline`,onOnline:`ononline`,onPageHide:`onpagehide`,onPageShow:`onpageshow`,onPaste:`onpaste`,onPause:`onpause`,onPlay:`onplay`,onPlaying:`onplaying`,onPopState:`onpopstate`,onProgress:`onprogress`,onRateChange:`onratechange`,onRepeat:`onrepeat`,onReset:`onreset`,onResize:`onresize`,onScroll:`onscroll`,onSeeked:`onseeked`,onSeeking:`onseeking`,onSelect:`onselect`,onShow:`onshow`,onStalled:`onstalled`,onStorage:`onstorage`,onSubmit:`onsubmit`,onSuspend:`onsuspend`,onTimeUpdate:`ontimeupdate`,onToggle:`ontoggle`,onUnload:`onunload`,onVolumeChange:`onvolumechange`,onWaiting:`onwaiting`,onZoom:`onzoom`,overlinePosition:`overline-position`,overlineThickness:`overline-thickness`,paintOrder:`paint-order`,panose1:`panose-1`,pointerEvents:`pointer-events`,referrerPolicy:`referrerpolicy`,renderingIntent:`rendering-intent`,shapeRendering:`shape-rendering`,stopColor:`stop-color`,stopOpacity:`stop-opacity`,strikethroughPosition:`strikethrough-position`,strikethroughThickness:`strikethrough-thickness`,strokeDashArray:`stroke-dasharray`,strokeDashOffset:`stroke-dashoffset`,strokeLineCap:`stroke-linecap`,strokeLineJoin:`stroke-linejoin`,strokeMiterLimit:`stroke-miterlimit`,strokeOpacity:`stroke-opacity`,strokeWidth:`stroke-width`,tabIndex:`tabindex`,textAnchor:`text-anchor`,textDecoration:`text-decoration`,textRendering:`text-rendering`,transformOrigin:`transform-origin`,typeOf:`typeof`,underlinePosition:`underline-position`,underlineThickness:`underline-thickness`,unicodeBidi:`unicode-bidi`,unicodeRange:`unicode-range`,unitsPerEm:`units-per-em`,vAlphabetic:`v-alphabetic`,vHanging:`v-hanging`,vIdeographic:`v-ideographic`,vMathematical:`v-mathematical`,vectorEffect:`vector-effect`,vertAdvY:`vert-adv-y`,vertOriginX:`vert-origin-x`,vertOriginY:`vert-origin-y`,wordSpacing:`word-spacing`,writingMode:`writing-mode`,xHeight:`x-height`,playbackOrder:`playbackorder`,timelineBegin:`timelinebegin`},properties:{about:commaOrSpaceSeparated,accentHeight:number,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:number,amplitude:number,arabicForm:null,ascent:number,attributeName:null,attributeType:null,azimuth:number,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:number,by:null,calcMode:null,capHeight:number,className:spaceSeparated,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:number,diffuseConstant:number,direction:null,display:null,dur:null,divisor:number,dominantBaseline:null,download:boolean,dx:null,dy:null,edgeMode:null,editable:null,elevation:number,enableBackground:null,end:null,event:null,exponent:number,externalResourcesRequired:null,fill:null,fillOpacity:number,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:commaSeparated,g2:commaSeparated,glyphName:commaSeparated,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:number,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:number,horizOriginX:number,horizOriginY:number,id:null,ideographic:number,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:number,k:number,k1:number,k2:number,k3:number,k4:number,kernelMatrix:commaOrSpaceSeparated,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:number,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:number,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:number,overlineThickness:number,paintOrder:null,panose1:null,path:null,pathLength:number,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:spaceSeparated,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:number,pointsAtY:number,pointsAtZ:number,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:commaOrSpaceSeparated,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:commaOrSpaceSeparated,rev:commaOrSpaceSeparated,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:commaOrSpaceSeparated,requiredFeatures:commaOrSpaceSeparated,requiredFonts:commaOrSpaceSeparated,requiredFormats:commaOrSpaceSeparated,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:number,specularExponent:number,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:number,strikethroughThickness:number,string:null,stroke:null,strokeDashArray:commaOrSpaceSeparated,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:number,strokeOpacity:number,strokeWidth:null,style:null,surfaceScale:number,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:commaOrSpaceSeparated,tabIndex:number,tableValues:null,target:null,targetX:number,targetY:number,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:commaOrSpaceSeparated,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:number,underlineThickness:number,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:number,values:null,vAlphabetic:number,vMathematical:number,vectorEffect:null,vHanging:number,vIdeographic:number,version:null,vertAdvY:number,vertOriginX:number,vertOriginY:number,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:number,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:`svg`,transform:caseSensitiveTransform}),xlink=create$15({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:`xlink`,transform(e,t){return`xlink:`+t.slice(5).toLowerCase()}}),xmlns=create$15({attributes:{xmlnsxlink:`xmlns:xlink`},properties:{xmlnsXLink:null,xmlns:null},space:`xmlns`,transform:caseInsensitiveTransform}),xml=create$15({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:`xml`,transform(e,t){return`xml:`+t.slice(3).toLowerCase()}}),cap=/[A-Z]/g,dash=/-[a-z]/g,valid=/^data[-\w.:]+$/i;function find$1(e,t){let S=normalize$3(t),w=t,E=Info;if(S in e.normal)return e.property[e.normal[S]];if(S.length>4&&S.slice(0,4)===`data`&&valid.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(dash,camelcase$1);w=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!dash.test(e)){let S=e.replace(cap,kebab);S.charAt(0)!==`-`&&(S=`-`+S),t=`data`+S}}E=DefinedInfo}return new E(w,t)}function kebab(e){return`-`+e.toLowerCase()}function camelcase$1(e){return e.charAt(1).toUpperCase()}const html$1=merge([aria,html$2,xlink,xmlns,xml],`html`),svg=merge([aria,svg$1,xlink,xmlns,xml],`svg`);function parse$4(e){let t=[],S=String(e||``),w=S.indexOf(`,`),E=0,D=!1;for(;!D;){w===-1&&(w=S.length,D=!0);let e=S.slice(E,w).trim();(e||!D)&&t.push(e),E=w+1,w=S.indexOf(`,`,E)}return t}const search$3=/[#.]/g;function parseSelector(e,t){let S=e||``,w={},E=0,D,O;for(;E<S.length;){search$3.lastIndex=E;let e=search$3.exec(S),t=S.slice(E,e?e.index:S.length);t&&(D?D===`#`?w.id=t:Array.isArray(w.className)?w.className.push(t):w.className=[t]:O=t,E+=t.length),e&&(D=e[0],E++)}return{type:`element`,tagName:O||t||`div`,properties:w,children:[]}}function parse$3(e){let t=String(e||``).trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function createH(e,t,S){let w=S?createAdjustMap(S):void 0;function E(S,E,...D){let O;if(S==null){O={type:`root`,children:[]};let e=E;D.unshift(e)}else{O=parseSelector(S,t);let k=O.tagName.toLowerCase(),j=w?w.get(k):void 0;if(O.tagName=j||k,isChild(E))D.unshift(E);else for(let[t,S]of Object.entries(E))addProperty(e,O.properties,t,S)}for(let e of D)addChild(O.children,e);return O.type===`element`&&O.tagName===`template`&&(O.content={type:`root`,children:O.children},O.children=[]),O}return E}function isChild(e){if(typeof e!=`object`||!e||Array.isArray(e))return!0;if(typeof e.type!=`string`)return!1;let t=e,S=Object.keys(e);for(let e of S){let S=t[e];if(S&&typeof S==`object`){if(!Array.isArray(S))return!0;let e=S;for(let t of e)if(typeof t!=`number`&&typeof t!=`string`)return!0}}return!!(`children`in e&&Array.isArray(e.children))}function addProperty(e,t,S,w){let E=find$1(e,S),D;if(w!=null){if(typeof w==`number`){if(Number.isNaN(w))return;D=w}else D=typeof w==`boolean`?w:typeof w==`string`?E.spaceSeparated?parse$3(w):E.commaSeparated?parse$4(w):E.commaOrSpaceSeparated?parse$3(parse$4(w).join(` `)):parsePrimitive(E,E.property,w):Array.isArray(w)?[...w]:E.property===`style`?style(w):String(w);if(Array.isArray(D)){let e=[];for(let t of D)e.push(parsePrimitive(E,E.property,t));D=e}E.property===`className`&&Array.isArray(t.className)&&(D=t.className.concat(D)),t[E.property]=D}}function addChild(e,t){if(t!=null)if(typeof t==`number`||typeof t==`string`)e.push({type:`text`,value:String(t)});else if(Array.isArray(t))for(let S of t)addChild(e,S);else if(typeof t==`object`&&`type`in t)t.type===`root`?addChild(e,t.children):e.push(t);else throw Error("Expected node, nodes, or string, got `"+t+"`")}function parsePrimitive(e,t,S){if(typeof S==`string`){if(e.number&&S&&!Number.isNaN(Number(S)))return Number(S);if((e.boolean||e.overloadedBoolean)&&(S===``||normalize$3(S)===normalize$3(t)))return!0}return S}function style(e){let t=[];for(let[S,w]of Object.entries(e))t.push([S,w].join(`: `));return t.join(`; `)}function createAdjustMap(e){let t=new Map;for(let S of e)t.set(S.toLowerCase(),S);return t}const svgCaseSensitiveTagNames=`altGlyph.altGlyphDef.altGlyphItem.animateColor.animateMotion.animateTransform.clipPath.feBlend.feColorMatrix.feComponentTransfer.feComposite.feConvolveMatrix.feDiffuseLighting.feDisplacementMap.feDistantLight.feDropShadow.feFlood.feFuncA.feFuncB.feFuncG.feFuncR.feGaussianBlur.feImage.feMerge.feMergeNode.feMorphology.feOffset.fePointLight.feSpecularLighting.feSpotLight.feTile.feTurbulence.foreignObject.glyphRef.linearGradient.radialGradient.solidColor.textArea.textPath`.split(`.`),h=createH(html$1,`div`),s=createH(svg,`g`,svgCaseSensitiveTagNames);function location$1(e){let t=String(e),S=[];return{toOffset:E,toPoint:w};function w(e){if(typeof e==`number`&&e>-1&&e<=t.length){let w=0;for(;;){let E=S[w];if(E===void 0){let e=next(t,S[w-1]);E=e===-1?t.length+1:e+1,S[w]=E}if(E>e)return{line:w+1,column:e-(w>0?S[w-1]:0)+1,offset:e};w++}}}function E(e){if(e&&typeof e.line==`number`&&typeof e.column==`number`&&!Number.isNaN(e.line)&&!Number.isNaN(e.column)){for(;S.length<e.line;){let e=S[S.length-1],w=next(t,e),E=w===-1?t.length+1:w+1;if(e===E)break;S.push(E)}let w=(e.line>1?S[e.line-2]:0)+e.column-1;if(w<S[e.line-1])return w}}}function next(e,t){let S=e.indexOf(`\r`,t),w=e.indexOf(`
235
+ `)}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleOrderedList:()=>({commands:e,chain:t})=>this.options.keepAttributes?t().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(ListItemName2,this.editor.getAttributes(TextStyleName2)).run():e.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{"Mod-Shift-7":()=>this.editor.commands.toggleOrderedList()}},addInputRules(){let e=wrappingInputRule({find:orderedListInputRegex,type:this.type,getAttributes:e=>({start:+e[1]}),joinPredicate:(e,t)=>t.childCount+t.attrs.start===+e[1]});return(this.options.keepMarks||this.options.keepAttributes)&&(e=wrappingInputRule({find:orderedListInputRegex,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:e=>({start:+e[1],...this.editor.getAttributes(TextStyleName2)}),joinPredicate:(e,t)=>t.childCount+t.attrs.start===+e[1],editor:this.editor})),[e]}}),inputRegex$1=/^\s*(\[([( |x])?\])\s$/,TaskItem=Node3.create({name:`taskItem`,addOptions(){return{nested:!1,HTMLAttributes:{},taskListTypeName:`taskList`,a11y:void 0}},content(){return this.options.nested?`paragraph block*`:`paragraph+`},defining:!0,addAttributes(){return{checked:{default:!1,keepOnSplit:!1,parseHTML:e=>{let t=e.getAttribute(`data-checked`);return t===``||t===`true`},renderHTML:e=>({"data-checked":e.checked})}}},parseHTML(){return[{tag:`li[data-type="${this.name}"]`,priority:51}]},renderHTML({node:e,HTMLAttributes:t}){return[`li`,mergeAttributes(this.options.HTMLAttributes,t,{"data-type":this.name}),[`label`,[`input`,{type:`checkbox`,checked:e.attrs.checked?`checked`:null}],[`span`]],[`div`,0]]},parseMarkdown:(e,t)=>{let S=[];if(e.tokens&&e.tokens.length>0?S.push(t.createNode(`paragraph`,{},t.parseInline(e.tokens))):e.text?S.push(t.createNode(`paragraph`,{},[t.createNode(`text`,{text:e.text})])):S.push(t.createNode(`paragraph`,{},[])),e.nestedTokens&&e.nestedTokens.length>0){let w=t.parseChildren(e.nestedTokens);S.push(...w)}return t.createNode(`taskItem`,{checked:e.checked||!1},S)},renderMarkdown:(e,t)=>{var S;return renderNestedMarkdownContent(e,t,`- [${e.attrs?.checked?`x`:` `}] `)},addKeyboardShortcuts(){let e={Enter:()=>this.editor.commands.splitListItem(this.name),"Shift-Tab":()=>this.editor.commands.liftListItem(this.name)};return this.options.nested?{...e,Tab:()=>this.editor.commands.sinkListItem(this.name)}:e},addNodeView(){return({node:e,HTMLAttributes:t,getPos:S,editor:w})=>{let E=document.createElement(`li`),D=document.createElement(`label`),O=document.createElement(`span`),k=document.createElement(`input`),j=document.createElement(`div`),F=e=>{var t,S;k.ariaLabel=((t=this.options.a11y)?.checkboxLabel)?.call(t,e,k.checked)||`Task item checkbox for ${e.textContent||`empty task item`}`};F(e),D.contentEditable=`false`,k.type=`checkbox`,k.addEventListener(`mousedown`,e=>e.preventDefault()),k.addEventListener(`change`,t=>{if(!w.isEditable&&!this.options.onReadOnlyChecked){k.checked=!k.checked;return}let{checked:E}=t.target;w.isEditable&&typeof S==`function`&&w.chain().focus(void 0,{scrollIntoView:!1}).command(({tr:e})=>{let t=S();if(typeof t!=`number`)return!1;let w=e.doc.nodeAt(t);return e.setNodeMarkup(t,void 0,{...w?.attrs,checked:E}),!0}).run(),!w.isEditable&&this.options.onReadOnlyChecked&&(this.options.onReadOnlyChecked(e,E)||(k.checked=!k.checked))}),Object.entries(this.options.HTMLAttributes).forEach(([e,t])=>{E.setAttribute(e,t)}),E.dataset.checked=e.attrs.checked,k.checked=e.attrs.checked,D.append(k,O),E.append(D,j),Object.entries(t).forEach(([e,t])=>{E.setAttribute(e,t)});let L=new Set(Object.keys(t));return{dom:E,contentDOM:j,update:e=>{if(e.type!==this.type)return!1;E.dataset.checked=e.attrs.checked,k.checked=e.attrs.checked,F(e);let t=w.extensionManager.attributes,S=getRenderedAttributes(e,t),D=new Set(Object.keys(S)),O=this.options.HTMLAttributes;return L.forEach(e=>{D.has(e)||(e in O?E.setAttribute(e,O[e]):E.removeAttribute(e))}),Object.entries(S).forEach(([e,t])=>{t==null?e in O?E.setAttribute(e,O[e]):E.removeAttribute(e):E.setAttribute(e,t)}),L=D,!0}}}},addInputRules(){return[wrappingInputRule({find:inputRegex$1,type:this.type,getAttributes:e=>({checked:e[e.length-1]===`x`})})]}}),TaskList=Node3.create({name:`taskList`,addOptions(){return{itemTypeName:`taskItem`,HTMLAttributes:{}}},group:`block list`,content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:`ul[data-type="${this.name}"]`,priority:51}]},renderHTML({HTMLAttributes:e}){return[`ul`,mergeAttributes(this.options.HTMLAttributes,e,{"data-type":this.name}),0]},parseMarkdown:(e,t)=>t.createNode(`taskList`,{},t.parseChildren(e.items||[])),renderMarkdown:(e,t)=>e.content?t.renderChildren(e.content,`
236
+ `):``,markdownTokenizer:{name:`taskList`,level:`block`,start(e){var t;let S=e.match(/^\s*[-+*]\s+\[([ xX])\]\s+/)?.index;return S===void 0?-1:S},tokenize(e,t,S){let w=e=>{let t=parseIndentedBlocks(e,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:e=>({indentLevel:e[1].length,mainContent:e[4],checked:e[3].toLowerCase()===`x`}),createToken:(e,t)=>({type:`taskItem`,raw:``,mainContent:e.mainContent,indentLevel:e.indentLevel,checked:e.checked,text:e.mainContent,tokens:S.inlineTokens(e.mainContent),nestedTokens:t}),customNestedParser:w},S);return t?[{type:`taskList`,raw:t.raw,items:t.items}]:S.blockTokens(e)},E=parseIndentedBlocks(e,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:e=>({indentLevel:e[1].length,mainContent:e[4],checked:e[3].toLowerCase()===`x`}),createToken:(e,t)=>({type:`taskItem`,raw:``,mainContent:e.mainContent,indentLevel:e.indentLevel,checked:e.checked,text:e.mainContent,tokens:S.inlineTokens(e.mainContent),nestedTokens:t}),customNestedParser:w},S);if(E)return{type:`taskList`,raw:E.raw,items:E.items}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleTaskList:()=>({commands:e})=>e.toggleList(this.name,this.options.itemTypeName)}},addKeyboardShortcuts(){return{"Mod-Shift-9":()=>this.editor.commands.toggleTaskList()}}}),ListKit=Extension.create({name:`listKit`,addExtensions(){let e=[];return this.options.bulletList!==!1&&e.push(BulletList.configure(this.options.bulletList)),this.options.listItem!==!1&&e.push(ListItem$1.configure(this.options.listItem)),this.options.listKeymap!==!1&&e.push(ListKeymap.configure(this.options.listKeymap)),this.options.orderedList!==!1&&e.push(OrderedList.configure(this.options.orderedList)),this.options.taskItem!==!1&&e.push(TaskItem.configure(this.options.taskItem)),this.options.taskList!==!1&&e.push(TaskList.configure(this.options.taskList)),e}}),EMPTY_PARAGRAPH_MARKDOWN=`&nbsp;`,NBSP_CHAR=`\xA0`,Paragraph=Node3.create({name:`paragraph`,priority:1e3,addOptions(){return{HTMLAttributes:{}}},group:`block`,content:`inline*`,parseHTML(){return[{tag:`p`}]},renderHTML({HTMLAttributes:e}){return[`p`,mergeAttributes(this.options.HTMLAttributes,e),0]},parseMarkdown:(e,t)=>{let S=e.tokens||[];if(S.length===1&&S[0].type===`image`)return t.parseChildren([S[0]]);let w=t.parseInline(S);return S.length===1&&S[0].type===`text`&&(S[0].raw===EMPTY_PARAGRAPH_MARKDOWN||S[0].text===EMPTY_PARAGRAPH_MARKDOWN||S[0].raw===NBSP_CHAR||S[0].text===NBSP_CHAR)&&w.length===1&&w[0].type===`text`&&(w[0].text===EMPTY_PARAGRAPH_MARKDOWN||w[0].text===NBSP_CHAR)?t.createNode(`paragraph`,void 0,[]):t.createNode(`paragraph`,void 0,w)},renderMarkdown:(e,t,S)=>{var w,E;if(!e)return``;let D=Array.isArray(e.content)?e.content:[];if(D.length===0){let e=Array.isArray(S?.previousNode?.content)?S.previousNode.content:[];return S?.previousNode?.type===`paragraph`&&e.length===0?EMPTY_PARAGRAPH_MARKDOWN:``}return t.renderChildren(D)},addCommands(){return{setParagraph:()=>({commands:e})=>e.setNode(this.name)}},addKeyboardShortcuts(){return{"Mod-Alt-0":()=>this.editor.commands.setParagraph()}}}),inputRegex=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))$/,pasteRegex=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))/g,Strike=Mark.create({name:`strike`,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`s`},{tag:`del`},{tag:`strike`},{style:`text-decoration`,consuming:!1,getAttrs:e=>e.includes(`line-through`)?{}:!1}]},renderHTML({HTMLAttributes:e}){return[`s`,mergeAttributes(this.options.HTMLAttributes,e),0]},markdownTokenName:`del`,parseMarkdown:(e,t)=>t.applyMark(`strike`,t.parseInline(e.tokens||[])),renderMarkdown:(e,t)=>`~~${t.renderChildren(e)}~~`,addCommands(){return{setStrike:()=>({commands:e})=>e.setMark(this.name),toggleStrike:()=>({commands:e})=>e.toggleMark(this.name),unsetStrike:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-s":()=>this.editor.commands.toggleStrike()}},addInputRules(){return[markInputRule({find:inputRegex,type:this.type})]},addPasteRules(){return[markPasteRule({find:pasteRegex,type:this.type})]}}),Text=Node3.create({name:`text`,group:`inline`,parseMarkdown:e=>({type:`text`,text:e.text||``}),renderMarkdown:e=>e.text||``}),Underline=Mark.create({name:`underline`,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`u`},{style:`text-decoration`,consuming:!1,getAttrs:e=>e.includes(`underline`)?{}:!1}]},renderHTML({HTMLAttributes:e}){return[`u`,mergeAttributes(this.options.HTMLAttributes,e),0]},parseMarkdown(e,t){return t.applyMark(this.name||`underline`,t.parseInline(e.tokens||[]))},renderMarkdown(e,t){return`++${t.renderChildren(e)}++`},markdownTokenizer:{name:`underline`,level:`inline`,start(e){return e.indexOf(`++`)},tokenize(e,t,S){let w=/^(\+\+)([\s\S]+?)(\+\+)/.exec(e);if(!w)return;let E=w[2].trim();return{type:`underline`,raw:w[0],text:E,tokens:S.inlineTokens(E)}}},addCommands(){return{setUnderline:()=>({commands:e})=>e.setMark(this.name),toggleUnderline:()=>({commands:e})=>e.toggleMark(this.name),unsetUnderline:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-u":()=>this.editor.commands.toggleUnderline(),"Mod-U":()=>this.editor.commands.toggleUnderline()}}});function dropCursor(e={}){return new Plugin({view(t){return new DropCursorView(t,e)}})}var DropCursorView=class{constructor(e,t){var S;this.editorView=e,this.cursorPos=null,this.element=null,this.timeout=-1,this.width=t.width??1,this.color=t.color===!1?void 0:t.color||`black`,this.class=t.class,this.handlers=[`dragover`,`dragend`,`drop`,`dragleave`].map(t=>{let S=e=>{this[t](e)};return e.dom.addEventListener(t,S),{name:t,handler:S}})}destroy(){this.handlers.forEach(({name:e,handler:t})=>this.editorView.dom.removeEventListener(e,t))}update(e,t){this.cursorPos!=null&&t.doc!=e.state.doc&&(this.cursorPos>e.state.doc.content.size?this.setCursor(null):this.updateOverlay())}setCursor(e){e!=this.cursorPos&&(this.cursorPos=e,e==null?(this.element.parentNode.removeChild(this.element),this.element=null):this.updateOverlay())}updateOverlay(){let e=this.editorView.state.doc.resolve(this.cursorPos),t=!e.parent.inlineContent,S,w=this.editorView.dom,E=w.getBoundingClientRect(),D=E.width/w.offsetWidth,O=E.height/w.offsetHeight;if(t){let t=e.nodeBefore,w=e.nodeAfter;if(t||w){let e=this.editorView.nodeDOM(this.cursorPos-(t?t.nodeSize:0));if(e){let E=e.getBoundingClientRect(),D=t?E.bottom:E.top;t&&w&&(D=(D+this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top)/2);let k=this.width/2*O;S={left:E.left,right:E.right,top:D-k,bottom:D+k}}}}if(!S){let e=this.editorView.coordsAtPos(this.cursorPos),t=this.width/2*D;S={left:e.left-t,right:e.left+t,top:e.top,bottom:e.bottom}}let k=this.editorView.dom.offsetParent;this.element||(this.element=k.appendChild(document.createElement(`div`)),this.class&&(this.element.className=this.class),this.element.style.cssText=`position: absolute; z-index: 50; pointer-events: none;`,this.color&&(this.element.style.backgroundColor=this.color)),this.element.classList.toggle(`prosemirror-dropcursor-block`,t),this.element.classList.toggle(`prosemirror-dropcursor-inline`,!t);let j,F;if(!k||k==document.body&&getComputedStyle(k).position==`static`)j=-pageXOffset,F=-pageYOffset;else{let e=k.getBoundingClientRect(),t=e.width/k.offsetWidth,S=e.height/k.offsetHeight;j=e.left-k.scrollLeft*t,F=e.top-k.scrollTop*S}this.element.style.left=(S.left-j)/D+`px`,this.element.style.top=(S.top-F)/O+`px`,this.element.style.width=(S.right-S.left)/D+`px`,this.element.style.height=(S.bottom-S.top)/O+`px`}scheduleRemoval(e){clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.setCursor(null),e)}dragover(e){if(!this.editorView.editable)return;let t=this.editorView.posAtCoords({left:e.clientX,top:e.clientY}),S=t&&t.inside>=0&&this.editorView.state.doc.nodeAt(t.inside),w=S&&S.type.spec.disableDropCursor,E=typeof w==`function`?w(this.editorView,t,e):w;if(t&&!E){let e=t.pos;if(this.editorView.dragging&&this.editorView.dragging.slice){let t=dropPoint(this.editorView.state.doc,e,this.editorView.dragging.slice);t!=null&&(e=t)}this.setCursor(e),this.scheduleRemoval(5e3)}}dragend(){this.scheduleRemoval(20)}drop(){this.scheduleRemoval(20)}dragleave(e){this.editorView.dom.contains(e.relatedTarget)||this.setCursor(null)}},GapCursor=class e extends Selection$1{constructor(e){super(e,e)}map(t,S){let w=t.resolve(S.map(this.head));return e.valid(w)?new e(w):Selection$1.near(w)}content(){return Slice.empty}eq(t){return t instanceof e&&t.head==this.head}toJSON(){return{type:`gapcursor`,pos:this.head}}static fromJSON(t,S){if(typeof S.pos!=`number`)throw RangeError(`Invalid input for GapCursor.fromJSON`);return new e(t.resolve(S.pos))}getBookmark(){return new GapBookmark(this.anchor)}static valid(e){let t=e.parent;if(t.inlineContent||!closedBefore(e)||!closedAfter(e))return!1;let S=t.type.spec.allowGapCursor;if(S!=null)return S;let w=t.contentMatchAt(e.index()).defaultType;return w&&w.isTextblock}static findGapCursorFrom(t,S,w=!1){search:for(;;){if(!w&&e.valid(t))return t;let E=t.pos,D=null;for(let w=t.depth;;w--){let O=t.node(w);if(S>0?t.indexAfter(w)<O.childCount:t.index(w)>0){D=O.child(S>0?t.indexAfter(w):t.index(w)-1);break}else if(w==0)return null;E+=S;let k=t.doc.resolve(E);if(e.valid(k))return k}for(;;){let O=S>0?D.firstChild:D.lastChild;if(!O){if(D.isAtom&&!D.isText&&!NodeSelection.isSelectable(D)){t=t.doc.resolve(E+D.nodeSize*S),w=!1;continue search}break}D=O,E+=S;let k=t.doc.resolve(E);if(e.valid(k))return k}return null}}};GapCursor.prototype.visible=!1,GapCursor.findFrom=GapCursor.findGapCursorFrom,Selection$1.jsonID(`gapcursor`,GapCursor);var GapBookmark=class e{constructor(e){this.pos=e}map(t){return new e(t.map(this.pos))}resolve(e){let t=e.resolve(this.pos);return GapCursor.valid(t)?new GapCursor(t):Selection$1.near(t)}};function needsGap(e){return e.isAtom||e.spec.isolating||e.spec.createGapCursor}function closedBefore(e){for(let t=e.depth;t>=0;t--){let S=e.index(t),w=e.node(t);if(S==0){if(w.type.spec.isolating)return!0;continue}for(let e=w.child(S-1);;e=e.lastChild){if(e.childCount==0&&!e.inlineContent||needsGap(e.type))return!0;if(e.inlineContent)return!1}}return!0}function closedAfter(e){for(let t=e.depth;t>=0;t--){let S=e.indexAfter(t),w=e.node(t);if(S==w.childCount){if(w.type.spec.isolating)return!0;continue}for(let e=w.child(S);;e=e.firstChild){if(e.childCount==0&&!e.inlineContent||needsGap(e.type))return!0;if(e.inlineContent)return!1}}return!0}function gapCursor(){return new Plugin({props:{decorations:drawGapCursor,createSelectionBetween(e,t,S){return t.pos==S.pos&&GapCursor.valid(S)?new GapCursor(S):null},handleClick,handleKeyDown,handleDOMEvents:{beforeinput}}})}const handleKeyDown=keydownHandler({ArrowLeft:arrow(`horiz`,-1),ArrowRight:arrow(`horiz`,1),ArrowUp:arrow(`vert`,-1),ArrowDown:arrow(`vert`,1)});function arrow(e,t){let S=e==`vert`?t>0?`down`:`up`:t>0?`right`:`left`;return function(e,w,E){let D=e.selection,O=t>0?D.$to:D.$from,k=D.empty;if(D instanceof TextSelection){if(!E.endOfTextblock(S)||O.depth==0)return!1;k=!1,O=e.doc.resolve(t>0?O.after():O.before())}let j=GapCursor.findGapCursorFrom(O,t,k);return j?(w&&w(e.tr.setSelection(new GapCursor(j))),!0):!1}}function handleClick(e,t,S){if(!e||!e.editable)return!1;let w=e.state.doc.resolve(t);if(!GapCursor.valid(w))return!1;let E=e.posAtCoords({left:S.clientX,top:S.clientY});return E&&E.inside>-1&&NodeSelection.isSelectable(e.state.doc.nodeAt(E.inside))?!1:(e.dispatch(e.state.tr.setSelection(new GapCursor(w))),!0)}function beforeinput(e,t){if(t.inputType!=`insertCompositionText`||!(e.state.selection instanceof GapCursor))return!1;let{$from:S}=e.state.selection,w=S.parent.contentMatchAt(S.index()).findWrapping(e.state.schema.nodes.text);if(!w)return!1;let E=Fragment.empty;for(let e=w.length-1;e>=0;e--)E=Fragment.from(w[e].createAndFill(null,E));let D=e.state.tr.replace(S.pos,S.pos,new Slice(E,0,0));return D.setSelection(TextSelection.near(D.doc.resolve(S.pos+1))),e.dispatch(D),!1}function drawGapCursor(e){if(!(e.selection instanceof GapCursor))return null;let t=document.createElement(`div`);return t.className=`ProseMirror-gapcursor`,DecorationSet.create(e.doc,[Decoration.widget(e.selection.head,t,{key:`gapcursor`})])}var GOOD_LEAF_SIZE=200,RopeSequence=function(){};RopeSequence.prototype.append=function(e){return e.length?(e=RopeSequence.from(e),!this.length&&e||e.length<GOOD_LEAF_SIZE&&this.leafAppend(e)||this.length<GOOD_LEAF_SIZE&&e.leafPrepend(this)||this.appendInner(e)):this},RopeSequence.prototype.prepend=function(e){return e.length?RopeSequence.from(e).append(this):this},RopeSequence.prototype.appendInner=function(e){return new Append(this,e)},RopeSequence.prototype.slice=function(e,t){return e===void 0&&(e=0),t===void 0&&(t=this.length),e>=t?RopeSequence.empty:this.sliceInner(Math.max(0,e),Math.min(this.length,t))},RopeSequence.prototype.get=function(e){if(!(e<0||e>=this.length))return this.getInner(e)},RopeSequence.prototype.forEach=function(e,t,S){t===void 0&&(t=0),S===void 0&&(S=this.length),t<=S?this.forEachInner(e,t,S,0):this.forEachInvertedInner(e,t,S,0)},RopeSequence.prototype.map=function(e,t,S){t===void 0&&(t=0),S===void 0&&(S=this.length);var w=[];return this.forEach(function(t,S){return w.push(e(t,S))},t,S),w},RopeSequence.from=function(e){return e instanceof RopeSequence?e:e&&e.length?new Leaf(e):RopeSequence.empty};var Leaf=function(e){function t(t){e.call(this),this.values=t}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var S={length:{configurable:!0},depth:{configurable:!0}};return t.prototype.flatten=function(){return this.values},t.prototype.sliceInner=function(e,S){return e==0&&S==this.length?this:new t(this.values.slice(e,S))},t.prototype.getInner=function(e){return this.values[e]},t.prototype.forEachInner=function(e,t,S,w){for(var E=t;E<S;E++)if(e(this.values[E],w+E)===!1)return!1},t.prototype.forEachInvertedInner=function(e,t,S,w){for(var E=t-1;E>=S;E--)if(e(this.values[E],w+E)===!1)return!1},t.prototype.leafAppend=function(e){if(this.length+e.length<=GOOD_LEAF_SIZE)return new t(this.values.concat(e.flatten()))},t.prototype.leafPrepend=function(e){if(this.length+e.length<=GOOD_LEAF_SIZE)return new t(e.flatten().concat(this.values))},S.length.get=function(){return this.values.length},S.depth.get=function(){return 0},Object.defineProperties(t.prototype,S),t}(RopeSequence);RopeSequence.empty=new Leaf([]);var Append=function(e){function t(t,S){e.call(this),this.left=t,this.right=S,this.length=t.length+S.length,this.depth=Math.max(t.depth,S.depth)+1}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.flatten=function(){return this.left.flatten().concat(this.right.flatten())},t.prototype.getInner=function(e){return e<this.left.length?this.left.get(e):this.right.get(e-this.left.length)},t.prototype.forEachInner=function(e,t,S,w){var E=this.left.length;if(t<E&&this.left.forEachInner(e,t,Math.min(S,E),w)===!1||S>E&&this.right.forEachInner(e,Math.max(t-E,0),Math.min(this.length,S)-E,w+E)===!1)return!1},t.prototype.forEachInvertedInner=function(e,t,S,w){var E=this.left.length;if(t>E&&this.right.forEachInvertedInner(e,t-E,Math.max(S,E)-E,w+E)===!1||S<E&&this.left.forEachInvertedInner(e,Math.min(t,E),S,w)===!1)return!1},t.prototype.sliceInner=function(e,t){if(e==0&&t==this.length)return this;var S=this.left.length;return t<=S?this.left.slice(e,t):e>=S?this.right.slice(e-S,t-S):this.left.slice(e,S).append(this.right.slice(0,t-S))},t.prototype.leafAppend=function(e){var S=this.right.leafAppend(e);if(S)return new t(this.left,S)},t.prototype.leafPrepend=function(e){var S=this.left.leafPrepend(e);if(S)return new t(S,this.right)},t.prototype.appendInner=function(e){return this.left.depth>=Math.max(this.right.depth,e.depth)+1?new t(this.left,new t(this.right,e)):new t(this,e)},t}(RopeSequence);const max_empty_items=500;var Branch=class e{constructor(e,t){this.items=e,this.eventCount=t}popEvent(t,S){if(this.eventCount==0)return null;let w=this.items.length;for(;;w--)if(this.items.get(w-1).selection){--w;break}let E,D;S&&(E=this.remapping(w,this.items.length),D=E.maps.length);let O=t.tr,k,j,F=[],L=[];return this.items.forEach((t,S)=>{if(!t.step){E||(E=this.remapping(w,S+1),D=E.maps.length),D--,L.push(t);return}if(E){L.push(new Item$1(t.map));let e=t.step.map(E.slice(D)),S;e&&O.maybeStep(e).doc&&(S=O.mapping.maps[O.mapping.maps.length-1],F.push(new Item$1(S,void 0,void 0,F.length+L.length))),D--,S&&E.appendMap(S,D)}else O.maybeStep(t.step);if(t.selection)return k=E?t.selection.map(E.slice(D)):t.selection,j=new e(this.items.slice(0,w).append(L.reverse().concat(F)),this.eventCount-1),!1},this.items.length,0),{remaining:j,transform:O,selection:k}}addTransform(t,S,w,E){let D=[],O=this.eventCount,k=this.items,j=!E&&k.length?k.get(k.length-1):null;for(let e=0;e<t.steps.length;e++){let w=t.steps[e].invert(t.docs[e]),F=new Item$1(t.mapping.maps[e],w,S),L;(L=j&&j.merge(F))&&(F=L,e?D.pop():k=k.slice(0,k.length-1)),D.push(F),S&&=(O++,void 0),E||(j=F)}let F=O-w.depth;return F>DEPTH_OVERFLOW&&(k=cutOffEvents(k,F),O-=F),new e(k.append(D),O)}remapping(e,t){let S=new Mapping;return this.items.forEach((t,w)=>{let E=t.mirrorOffset!=null&&w-t.mirrorOffset>=e?S.maps.length-t.mirrorOffset:void 0;S.appendMap(t.map,E)},e,t),S}addMaps(t){return this.eventCount==0?this:new e(this.items.append(t.map(e=>new Item$1(e))),this.eventCount)}rebased(t,S){if(!this.eventCount)return this;let w=[],E=Math.max(0,this.items.length-S),D=t.mapping,O=t.steps.length,k=this.eventCount;this.items.forEach(e=>{e.selection&&k--},E);let j=S;this.items.forEach(e=>{let S=D.getMirror(--j);if(S==null)return;O=Math.min(O,S);let E=D.maps[S];if(e.step){let O=t.steps[S].invert(t.docs[S]),F=e.selection&&e.selection.map(D.slice(j+1,S));F&&k++,w.push(new Item$1(E,O,F))}else w.push(new Item$1(E))},E);let F=[];for(let e=S;e<O;e++)F.push(new Item$1(D.maps[e]));let L=new e(this.items.slice(0,E).append(F).append(w),k);return L.emptyItemCount()>max_empty_items&&(L=L.compress(this.items.length-w.length)),L}emptyItemCount(){let e=0;return this.items.forEach(t=>{t.step||e++}),e}compress(t=this.items.length){let S=this.remapping(0,t),w=S.maps.length,E=[],D=0;return this.items.forEach((e,O)=>{if(O>=t)E.push(e),e.selection&&D++;else if(e.step){let t=e.step.map(S.slice(w)),O=t&&t.getMap();if(w--,O&&S.appendMap(O,w),t){let k=e.selection&&e.selection.map(S.slice(w));k&&D++;let j=new Item$1(O.invert(),t,k),F,L=E.length-1;(F=E.length&&E[L].merge(j))?E[L]=F:E.push(j)}}else e.map&&w--},this.items.length,0),new e(RopeSequence.from(E.reverse()),D)}};Branch.empty=new Branch(RopeSequence.empty,0);function cutOffEvents(e,t){let S;return e.forEach((e,w)=>{if(e.selection&&t--==0)return S=w,!1}),e.slice(S)}var Item$1=class e{constructor(e,t,S,w){this.map=e,this.step=t,this.selection=S,this.mirrorOffset=w}merge(t){if(this.step&&t.step&&!t.selection){let S=t.step.merge(this.step);if(S)return new e(S.getMap().invert(),S,this.selection)}}},HistoryState=class{constructor(e,t,S,w,E){this.done=e,this.undone=t,this.prevRanges=S,this.prevTime=w,this.prevComposition=E}};const DEPTH_OVERFLOW=20;function applyTransaction(e,t,S,w){let E=S.getMeta(historyKey),D;if(E)return E.historyState;S.getMeta(closeHistoryKey)&&(e=new HistoryState(e.done,e.undone,null,0,-1));let O=S.getMeta(`appendedTransaction`);if(S.steps.length==0)return e;if(O&&O.getMeta(historyKey))return O.getMeta(historyKey).redo?new HistoryState(e.done.addTransform(S,void 0,w,mustPreserveItems(t)),e.undone,rangesFor(S.mapping.maps),e.prevTime,e.prevComposition):new HistoryState(e.done,e.undone.addTransform(S,void 0,w,mustPreserveItems(t)),null,e.prevTime,e.prevComposition);if(S.getMeta(`addToHistory`)!==!1&&!(O&&O.getMeta(`addToHistory`)===!1)){let E=S.getMeta(`composition`),D=e.prevTime==0||!O&&e.prevComposition!=E&&(e.prevTime<(S.time||0)-w.newGroupDelay||!isAdjacentTo(S,e.prevRanges)),k=O?mapRanges(e.prevRanges,S.mapping):rangesFor(S.mapping.maps);return new HistoryState(e.done.addTransform(S,D?t.selection.getBookmark():void 0,w,mustPreserveItems(t)),Branch.empty,k,S.time,E??e.prevComposition)}else if(D=S.getMeta(`rebased`))return new HistoryState(e.done.rebased(S,D),e.undone.rebased(S,D),mapRanges(e.prevRanges,S.mapping),e.prevTime,e.prevComposition);else return new HistoryState(e.done.addMaps(S.mapping.maps),e.undone.addMaps(S.mapping.maps),mapRanges(e.prevRanges,S.mapping),e.prevTime,e.prevComposition)}function isAdjacentTo(e,t){if(!t)return!1;if(!e.docChanged)return!0;let S=!1;return e.mapping.maps[0].forEach((e,w)=>{for(let E=0;E<t.length;E+=2)e<=t[E+1]&&w>=t[E]&&(S=!0)}),S}function rangesFor(e){let t=[];for(let S=e.length-1;S>=0&&t.length==0;S--)e[S].forEach((e,S,w,E)=>t.push(w,E));return t}function mapRanges(e,t){if(!e)return null;let S=[];for(let w=0;w<e.length;w+=2){let E=t.map(e[w],1),D=t.map(e[w+1],-1);E<=D&&S.push(E,D)}return S}function histTransaction(e,t,S){let w=mustPreserveItems(t),E=historyKey.get(t).spec.config,D=(S?e.undone:e.done).popEvent(t,w);if(!D)return null;let O=D.selection.resolve(D.transform.doc),k=(S?e.done:e.undone).addTransform(D.transform,t.selection.getBookmark(),E,w),j=new HistoryState(S?k:D.remaining,S?D.remaining:k,null,0,-1);return D.transform.setSelection(O).setMeta(historyKey,{redo:S,historyState:j})}let cachedPreserveItems=!1,cachedPreserveItemsPlugins=null;function mustPreserveItems(e){let t=e.plugins;if(cachedPreserveItemsPlugins!=t){cachedPreserveItems=!1,cachedPreserveItemsPlugins=t;for(let e=0;e<t.length;e++)if(t[e].spec.historyPreserveItems){cachedPreserveItems=!0;break}}return cachedPreserveItems}const historyKey=new PluginKey(`history`),closeHistoryKey=new PluginKey(`closeHistory`);function history(e={}){return e={depth:e.depth||100,newGroupDelay:e.newGroupDelay||500},new Plugin({key:historyKey,state:{init(){return new HistoryState(Branch.empty,Branch.empty,null,0,-1)},apply(t,S,w){return applyTransaction(S,w,t,e)}},config:e,props:{handleDOMEvents:{beforeinput(e,t){let S=t.inputType,w=S==`historyUndo`?undo:S==`historyRedo`?redo:null;return!w||!e.editable?!1:(t.preventDefault(),w(e.state,e.dispatch))}}}})}function buildCommand(e,t){return(S,w)=>{let E=historyKey.getState(S);if(!E||(e?E.undone:E.done).eventCount==0)return!1;if(w){let D=histTransaction(E,S,e);D&&w(t?D.scrollIntoView():D)}return!0}}const undo=buildCommand(!1,!0),redo=buildCommand(!0,!0),undoNoScroll=buildCommand(!1,!1),redoNoScroll=buildCommand(!0,!1);var CharacterCount=Extension.create({name:`characterCount`,addOptions(){return{limit:null,mode:`textSize`,textCounter:e=>e.length,wordCounter:e=>e.split(` `).filter(e=>e!==``).length}},addStorage(){return{characters:()=>0,words:()=>0}},onBeforeCreate(){this.storage.characters=e=>{let t=e?.node||this.editor.state.doc;if((e?.mode||this.options.mode)===`textSize`){let e=t.textBetween(0,t.content.size,void 0,` `);return this.options.textCounter(e)}return t.nodeSize},this.storage.words=e=>{let t=e?.node||this.editor.state.doc,S=t.textBetween(0,t.content.size,` `,` `);return this.options.wordCounter(S)}},addProseMirrorPlugins(){let e=!1;return[new Plugin({key:new PluginKey(`characterCount`),appendTransaction:(t,S,w)=>{if(e)return;let E=this.options.limit;if(E==null||E===0){e=!0;return}let D=this.storage.characters({node:w.doc});if(D>E){let t=D-E,S=0,O=t;console.warn(`[CharacterCount] Initial content exceeded limit of ${E} characters. Content was automatically trimmed.`);let k=w.tr.deleteRange(0,O);return e=!0,k}e=!0},filterTransaction:(e,t)=>{let S=this.options.limit;if(!e.docChanged||S===0||S==null)return!0;let w=this.storage.characters({node:t.doc}),E=this.storage.characters({node:e.doc});if(E<=S||w>S&&E>S&&E<=w)return!0;if(w>S&&E>S&&E>w||!e.getMeta(`paste`))return!1;let D=e.selection.$head.pos,O=D-(E-S),k=D;return e.deleteRange(O,k),!(this.storage.characters({node:e.doc})>S)}})]}}),Dropcursor=Extension.create({name:`dropCursor`,addOptions(){return{color:`currentColor`,width:1,class:void 0}},addProseMirrorPlugins(){return[dropCursor(this.options)]}}),Focus=Extension.create({name:`focus`,addOptions(){return{className:`has-focus`,mode:`all`}},addProseMirrorPlugins(){return[new Plugin({key:new PluginKey(`focus`),props:{decorations:({doc:e,selection:t})=>{let{isEditable:S,isFocused:w}=this.editor,{anchor:E}=t,D=[];if(!S||!w)return DecorationSet.create(e,[]);let O=0;this.options.mode===`deepest`&&e.descendants((e,t)=>{if(!e.isText){if(!(E>=t&&E<=t+e.nodeSize-1))return!1;O+=1}});let k=0;return e.descendants((e,t)=>{if(e.isText||!(E>=t&&E<=t+e.nodeSize-1))return!1;if(k+=1,this.options.mode===`deepest`&&O-k>0||this.options.mode===`shallowest`&&k>1)return this.options.mode===`deepest`;D.push(Decoration.node(t,t+e.nodeSize,{class:this.options.className}))}),DecorationSet.create(e,D)}}})]}}),Gapcursor=Extension.create({name:`gapCursor`,addProseMirrorPlugins(){return[gapCursor()]},extendNodeSchema(e){var t;return{allowGapCursor:callOrReturn(getExtensionField(e,`allowGapCursor`,{name:e.name,options:e.options,storage:e.storage}))??null}}}),DEFAULT_DATA_ATTRIBUTE=`placeholder`;function preparePlaceholderAttribute(e){return e.replace(/\s+/g,`-`).replace(/[^a-zA-Z0-9-]/g,``).replace(/^[0-9-]+/,``).replace(/^-+/,``).toLowerCase()}var Placeholder=Extension.create({name:`placeholder`,addOptions(){return{emptyEditorClass:`is-editor-empty`,emptyNodeClass:`is-empty`,dataAttribute:DEFAULT_DATA_ATTRIBUTE,placeholder:`Write something …`,showOnlyWhenEditable:!0,showOnlyCurrent:!0,includeChildren:!1}},addProseMirrorPlugins(){let e=this.options.dataAttribute?`data-${preparePlaceholderAttribute(this.options.dataAttribute)}`:`data-${DEFAULT_DATA_ATTRIBUTE}`;return[new Plugin({key:new PluginKey(`placeholder`),props:{decorations:({doc:t,selection:S})=>{let w=this.editor.isEditable||!this.options.showOnlyWhenEditable,{anchor:E}=S,D=[];if(!w)return null;let O=this.editor.isEmpty;return t.descendants((t,S)=>{let w=E>=S&&E<=S+t.nodeSize,k=!t.isLeaf&&isNodeEmpty(t);if(!t.type.isTextblock)return this.options.includeChildren;if((w||!this.options.showOnlyCurrent)&&k){let E=[this.options.emptyNodeClass];O&&E.push(this.options.emptyEditorClass);let k=Decoration.node(S,S+t.nodeSize,{class:E.join(` `),[e]:typeof this.options.placeholder==`function`?this.options.placeholder({editor:this.editor,node:t,pos:S,hasAnchor:w}):this.options.placeholder});D.push(k)}return this.options.includeChildren}),DecorationSet.create(t,D)}}})]}}),Selection=Extension.create({name:`selection`,addOptions(){return{className:`selection`}},addProseMirrorPlugins(){let{editor:e,options:t}=this;return[new Plugin({key:new PluginKey(`selection`),props:{decorations(S){return S.selection.empty||e.isFocused||!e.isEditable||isNodeSelection(S.selection)||e.view.dragging?null:DecorationSet.create(S.doc,[Decoration.inline(S.selection.from,S.selection.to,{class:t.className})])}}})]}}),skipTrailingNodeMeta=`skipTrailingNode`;function nodeEqualsType({types:e,node:t}){return t&&Array.isArray(e)&&e.includes(t.type)||t?.type===e}var TrailingNode=Extension.create({name:`trailingNode`,addOptions(){return{node:void 0,notAfter:[]}},addProseMirrorPlugins(){var e;let t=new PluginKey(this.name),S=this.options.node||this.editor.schema.topNodeType.contentMatch.defaultType?.name||`paragraph`,w=Object.entries(this.editor.schema.nodes).map(([,e])=>e).filter(e=>(this.options.notAfter||[]).concat(S).includes(e.name));return[new Plugin({key:t,appendTransaction:(e,w,E)=>{let{doc:D,tr:O,schema:k}=E,j=t.getState(E),F=D.content.size,L=k.nodes[S];if(!e.some(e=>e.getMeta(`skipTrailingNode`))&&j)return O.insert(F,L.create())},state:{init:(e,t)=>{let S=t.tr.doc.lastChild;return!nodeEqualsType({node:S,types:w})},apply:(e,t)=>{if(!e.docChanged||e.getMeta(`__uniqueIDTransaction`))return t;let S=e.doc.lastChild;return!nodeEqualsType({node:S,types:w})}}})]}}),UndoRedo=Extension.create({name:`undoRedo`,addOptions(){return{depth:100,newGroupDelay:500}},addCommands(){return{undo:()=>({state:e,dispatch:t})=>undo(e,t),redo:()=>({state:e,dispatch:t})=>redo(e,t)}},addProseMirrorPlugins(){return[history(this.options)]},addKeyboardShortcuts(){return{"Mod-z":()=>this.editor.commands.undo(),"Shift-Mod-z":()=>this.editor.commands.redo(),"Mod-y":()=>this.editor.commands.redo(),"Mod-я":()=>this.editor.commands.undo(),"Shift-Mod-я":()=>this.editor.commands.redo()}}}),StarterKit=Extension.create({name:`starterKit`,addExtensions(){var e,t,S,w;let E=[];return this.options.bold!==!1&&E.push(Bold.configure(this.options.bold)),this.options.blockquote!==!1&&E.push(Blockquote.configure(this.options.blockquote)),this.options.bulletList!==!1&&E.push(BulletList.configure(this.options.bulletList)),this.options.code!==!1&&E.push(Code.configure(this.options.code)),this.options.codeBlock!==!1&&E.push(CodeBlock.configure(this.options.codeBlock)),this.options.document!==!1&&E.push(Document$2.configure(this.options.document)),this.options.dropcursor!==!1&&E.push(Dropcursor.configure(this.options.dropcursor)),this.options.gapcursor!==!1&&E.push(Gapcursor.configure(this.options.gapcursor)),this.options.hardBreak!==!1&&E.push(HardBreak.configure(this.options.hardBreak)),this.options.heading!==!1&&E.push(Heading.configure(this.options.heading)),this.options.undoRedo!==!1&&E.push(UndoRedo.configure(this.options.undoRedo)),this.options.horizontalRule!==!1&&E.push(HorizontalRule.configure(this.options.horizontalRule)),this.options.italic!==!1&&E.push(Italic.configure(this.options.italic)),this.options.listItem!==!1&&E.push(ListItem$1.configure(this.options.listItem)),this.options.listKeymap!==!1&&E.push(ListKeymap.configure(this.options?.listKeymap)),this.options.link!==!1&&E.push(Link.configure(this.options?.link)),this.options.orderedList!==!1&&E.push(OrderedList.configure(this.options.orderedList)),this.options.paragraph!==!1&&E.push(Paragraph.configure(this.options.paragraph)),this.options.strike!==!1&&E.push(Strike.configure(this.options.strike)),this.options.text!==!1&&E.push(Text.configure(this.options.text)),this.options.underline!==!1&&E.push(Underline.configure(this.options?.underline)),this.options.trailingNode!==!1&&E.push(TrailingNode.configure(this.options?.trailingNode)),E}}),index_default=StarterKit;function ok$2(){}var Schema=class{constructor(e,t,S){this.normal=t,this.property=e,S&&(this.space=S)}};Schema.prototype.normal={},Schema.prototype.property={},Schema.prototype.space=void 0;function merge(e,t){let S={},w={};for(let t of e)Object.assign(S,t.property),Object.assign(w,t.normal);return new Schema(S,w,t)}function normalize$3(e){return e.toLowerCase()}var Info=class{constructor(e,t){this.attribute=t,this.property=e}};Info.prototype.attribute=``,Info.prototype.booleanish=!1,Info.prototype.boolean=!1,Info.prototype.commaOrSpaceSeparated=!1,Info.prototype.commaSeparated=!1,Info.prototype.defined=!1,Info.prototype.mustUseProperty=!1,Info.prototype.number=!1,Info.prototype.overloadedBoolean=!1,Info.prototype.property=``,Info.prototype.spaceSeparated=!1,Info.prototype.space=void 0;var types_exports=__exportAll({boolean:()=>boolean,booleanish:()=>booleanish,commaOrSpaceSeparated:()=>commaOrSpaceSeparated,commaSeparated:()=>commaSeparated,number:()=>number,overloadedBoolean:()=>overloadedBoolean,spaceSeparated:()=>spaceSeparated});let powers=0;const boolean=increment(),booleanish=increment(),overloadedBoolean=increment(),number=increment(),spaceSeparated=increment(),commaSeparated=increment(),commaOrSpaceSeparated=increment();function increment(){return 2**++powers}const checks=Object.keys(types_exports);var DefinedInfo=class extends Info{constructor(e,t,S,w){let E=-1;if(super(e,t),mark(this,`space`,w),typeof S==`number`)for(;++E<checks.length;){let e=checks[E];mark(this,checks[E],(S&types_exports[e])===types_exports[e])}}};DefinedInfo.prototype.defined=!0;function mark(e,t,S){S&&(e[t]=S)}function create$15(e){let t={},S={};for(let[w,E]of Object.entries(e.properties)){let D=new DefinedInfo(w,e.transform(e.attributes||{},w),E,e.space);e.mustUseProperty&&e.mustUseProperty.includes(w)&&(D.mustUseProperty=!0),t[w]=D,S[normalize$3(w)]=w,S[normalize$3(D.attribute)]=w}return new Schema(t,S,e.space)}const aria=create$15({properties:{ariaActiveDescendant:null,ariaAtomic:booleanish,ariaAutoComplete:null,ariaBusy:booleanish,ariaChecked:booleanish,ariaColCount:number,ariaColIndex:number,ariaColSpan:number,ariaControls:spaceSeparated,ariaCurrent:null,ariaDescribedBy:spaceSeparated,ariaDetails:null,ariaDisabled:booleanish,ariaDropEffect:spaceSeparated,ariaErrorMessage:null,ariaExpanded:booleanish,ariaFlowTo:spaceSeparated,ariaGrabbed:booleanish,ariaHasPopup:null,ariaHidden:booleanish,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:spaceSeparated,ariaLevel:number,ariaLive:null,ariaModal:booleanish,ariaMultiLine:booleanish,ariaMultiSelectable:booleanish,ariaOrientation:null,ariaOwns:spaceSeparated,ariaPlaceholder:null,ariaPosInSet:number,ariaPressed:booleanish,ariaReadOnly:booleanish,ariaRelevant:null,ariaRequired:booleanish,ariaRoleDescription:spaceSeparated,ariaRowCount:number,ariaRowIndex:number,ariaRowSpan:number,ariaSelected:booleanish,ariaSetSize:number,ariaSort:null,ariaValueMax:number,ariaValueMin:number,ariaValueNow:number,ariaValueText:null,role:null},transform(e,t){return t===`role`?t:`aria-`+t.slice(4).toLowerCase()}});function caseSensitiveTransform(e,t){return t in e?e[t]:t}function caseInsensitiveTransform(e,t){return caseSensitiveTransform(e,t.toLowerCase())}const html$2=create$15({attributes:{acceptcharset:`accept-charset`,classname:`class`,htmlfor:`for`,httpequiv:`http-equiv`},mustUseProperty:[`checked`,`multiple`,`muted`,`selected`],properties:{abbr:null,accept:commaSeparated,acceptCharset:spaceSeparated,accessKey:spaceSeparated,action:null,allow:null,allowFullScreen:boolean,allowPaymentRequest:boolean,allowUserMedia:boolean,alt:null,as:null,async:boolean,autoCapitalize:null,autoComplete:spaceSeparated,autoFocus:boolean,autoPlay:boolean,blocking:spaceSeparated,capture:null,charSet:null,checked:boolean,cite:null,className:spaceSeparated,cols:number,colSpan:null,content:null,contentEditable:booleanish,controls:boolean,controlsList:spaceSeparated,coords:number|commaSeparated,crossOrigin:null,data:null,dateTime:null,decoding:null,default:boolean,defer:boolean,dir:null,dirName:null,disabled:boolean,download:overloadedBoolean,draggable:booleanish,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:boolean,formTarget:null,headers:spaceSeparated,height:number,hidden:overloadedBoolean,high:number,href:null,hrefLang:null,htmlFor:spaceSeparated,httpEquiv:spaceSeparated,id:null,imageSizes:null,imageSrcSet:null,inert:boolean,inputMode:null,integrity:null,is:null,isMap:boolean,itemId:null,itemProp:spaceSeparated,itemRef:spaceSeparated,itemScope:boolean,itemType:spaceSeparated,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:boolean,low:number,manifest:null,max:null,maxLength:number,media:null,method:null,min:null,minLength:number,multiple:boolean,muted:boolean,name:null,nonce:null,noModule:boolean,noValidate:boolean,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:boolean,optimum:number,pattern:null,ping:spaceSeparated,placeholder:null,playsInline:boolean,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:boolean,referrerPolicy:null,rel:spaceSeparated,required:boolean,reversed:boolean,rows:number,rowSpan:number,sandbox:spaceSeparated,scope:null,scoped:boolean,seamless:boolean,selected:boolean,shadowRootClonable:boolean,shadowRootDelegatesFocus:boolean,shadowRootMode:null,shape:null,size:number,sizes:null,slot:null,span:number,spellCheck:booleanish,src:null,srcDoc:null,srcLang:null,srcSet:null,start:number,step:null,style:null,tabIndex:number,target:null,title:null,translate:null,type:null,typeMustMatch:boolean,useMap:null,value:booleanish,width:number,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:spaceSeparated,axis:null,background:null,bgColor:null,border:number,borderColor:null,bottomMargin:number,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:boolean,declare:boolean,event:null,face:null,frame:null,frameBorder:null,hSpace:number,leftMargin:number,link:null,longDesc:null,lowSrc:null,marginHeight:number,marginWidth:number,noResize:boolean,noHref:boolean,noShade:boolean,noWrap:boolean,object:null,profile:null,prompt:null,rev:null,rightMargin:number,rules:null,scheme:null,scrolling:booleanish,standby:null,summary:null,text:null,topMargin:number,valueType:null,version:null,vAlign:null,vLink:null,vSpace:number,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:boolean,disableRemotePlayback:boolean,prefix:null,property:null,results:number,security:null,unselectable:null},space:`html`,transform:caseInsensitiveTransform}),svg$1=create$15({attributes:{accentHeight:`accent-height`,alignmentBaseline:`alignment-baseline`,arabicForm:`arabic-form`,baselineShift:`baseline-shift`,capHeight:`cap-height`,className:`class`,clipPath:`clip-path`,clipRule:`clip-rule`,colorInterpolation:`color-interpolation`,colorInterpolationFilters:`color-interpolation-filters`,colorProfile:`color-profile`,colorRendering:`color-rendering`,crossOrigin:`crossorigin`,dataType:`datatype`,dominantBaseline:`dominant-baseline`,enableBackground:`enable-background`,fillOpacity:`fill-opacity`,fillRule:`fill-rule`,floodColor:`flood-color`,floodOpacity:`flood-opacity`,fontFamily:`font-family`,fontSize:`font-size`,fontSizeAdjust:`font-size-adjust`,fontStretch:`font-stretch`,fontStyle:`font-style`,fontVariant:`font-variant`,fontWeight:`font-weight`,glyphName:`glyph-name`,glyphOrientationHorizontal:`glyph-orientation-horizontal`,glyphOrientationVertical:`glyph-orientation-vertical`,hrefLang:`hreflang`,horizAdvX:`horiz-adv-x`,horizOriginX:`horiz-origin-x`,horizOriginY:`horiz-origin-y`,imageRendering:`image-rendering`,letterSpacing:`letter-spacing`,lightingColor:`lighting-color`,markerEnd:`marker-end`,markerMid:`marker-mid`,markerStart:`marker-start`,navDown:`nav-down`,navDownLeft:`nav-down-left`,navDownRight:`nav-down-right`,navLeft:`nav-left`,navNext:`nav-next`,navPrev:`nav-prev`,navRight:`nav-right`,navUp:`nav-up`,navUpLeft:`nav-up-left`,navUpRight:`nav-up-right`,onAbort:`onabort`,onActivate:`onactivate`,onAfterPrint:`onafterprint`,onBeforePrint:`onbeforeprint`,onBegin:`onbegin`,onCancel:`oncancel`,onCanPlay:`oncanplay`,onCanPlayThrough:`oncanplaythrough`,onChange:`onchange`,onClick:`onclick`,onClose:`onclose`,onCopy:`oncopy`,onCueChange:`oncuechange`,onCut:`oncut`,onDblClick:`ondblclick`,onDrag:`ondrag`,onDragEnd:`ondragend`,onDragEnter:`ondragenter`,onDragExit:`ondragexit`,onDragLeave:`ondragleave`,onDragOver:`ondragover`,onDragStart:`ondragstart`,onDrop:`ondrop`,onDurationChange:`ondurationchange`,onEmptied:`onemptied`,onEnd:`onend`,onEnded:`onended`,onError:`onerror`,onFocus:`onfocus`,onFocusIn:`onfocusin`,onFocusOut:`onfocusout`,onHashChange:`onhashchange`,onInput:`oninput`,onInvalid:`oninvalid`,onKeyDown:`onkeydown`,onKeyPress:`onkeypress`,onKeyUp:`onkeyup`,onLoad:`onload`,onLoadedData:`onloadeddata`,onLoadedMetadata:`onloadedmetadata`,onLoadStart:`onloadstart`,onMessage:`onmessage`,onMouseDown:`onmousedown`,onMouseEnter:`onmouseenter`,onMouseLeave:`onmouseleave`,onMouseMove:`onmousemove`,onMouseOut:`onmouseout`,onMouseOver:`onmouseover`,onMouseUp:`onmouseup`,onMouseWheel:`onmousewheel`,onOffline:`onoffline`,onOnline:`ononline`,onPageHide:`onpagehide`,onPageShow:`onpageshow`,onPaste:`onpaste`,onPause:`onpause`,onPlay:`onplay`,onPlaying:`onplaying`,onPopState:`onpopstate`,onProgress:`onprogress`,onRateChange:`onratechange`,onRepeat:`onrepeat`,onReset:`onreset`,onResize:`onresize`,onScroll:`onscroll`,onSeeked:`onseeked`,onSeeking:`onseeking`,onSelect:`onselect`,onShow:`onshow`,onStalled:`onstalled`,onStorage:`onstorage`,onSubmit:`onsubmit`,onSuspend:`onsuspend`,onTimeUpdate:`ontimeupdate`,onToggle:`ontoggle`,onUnload:`onunload`,onVolumeChange:`onvolumechange`,onWaiting:`onwaiting`,onZoom:`onzoom`,overlinePosition:`overline-position`,overlineThickness:`overline-thickness`,paintOrder:`paint-order`,panose1:`panose-1`,pointerEvents:`pointer-events`,referrerPolicy:`referrerpolicy`,renderingIntent:`rendering-intent`,shapeRendering:`shape-rendering`,stopColor:`stop-color`,stopOpacity:`stop-opacity`,strikethroughPosition:`strikethrough-position`,strikethroughThickness:`strikethrough-thickness`,strokeDashArray:`stroke-dasharray`,strokeDashOffset:`stroke-dashoffset`,strokeLineCap:`stroke-linecap`,strokeLineJoin:`stroke-linejoin`,strokeMiterLimit:`stroke-miterlimit`,strokeOpacity:`stroke-opacity`,strokeWidth:`stroke-width`,tabIndex:`tabindex`,textAnchor:`text-anchor`,textDecoration:`text-decoration`,textRendering:`text-rendering`,transformOrigin:`transform-origin`,typeOf:`typeof`,underlinePosition:`underline-position`,underlineThickness:`underline-thickness`,unicodeBidi:`unicode-bidi`,unicodeRange:`unicode-range`,unitsPerEm:`units-per-em`,vAlphabetic:`v-alphabetic`,vHanging:`v-hanging`,vIdeographic:`v-ideographic`,vMathematical:`v-mathematical`,vectorEffect:`vector-effect`,vertAdvY:`vert-adv-y`,vertOriginX:`vert-origin-x`,vertOriginY:`vert-origin-y`,wordSpacing:`word-spacing`,writingMode:`writing-mode`,xHeight:`x-height`,playbackOrder:`playbackorder`,timelineBegin:`timelinebegin`},properties:{about:commaOrSpaceSeparated,accentHeight:number,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:number,amplitude:number,arabicForm:null,ascent:number,attributeName:null,attributeType:null,azimuth:number,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:number,by:null,calcMode:null,capHeight:number,className:spaceSeparated,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:number,diffuseConstant:number,direction:null,display:null,dur:null,divisor:number,dominantBaseline:null,download:boolean,dx:null,dy:null,edgeMode:null,editable:null,elevation:number,enableBackground:null,end:null,event:null,exponent:number,externalResourcesRequired:null,fill:null,fillOpacity:number,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:commaSeparated,g2:commaSeparated,glyphName:commaSeparated,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:number,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:number,horizOriginX:number,horizOriginY:number,id:null,ideographic:number,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:number,k:number,k1:number,k2:number,k3:number,k4:number,kernelMatrix:commaOrSpaceSeparated,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:number,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:number,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:number,overlineThickness:number,paintOrder:null,panose1:null,path:null,pathLength:number,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:spaceSeparated,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:number,pointsAtY:number,pointsAtZ:number,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:commaOrSpaceSeparated,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:commaOrSpaceSeparated,rev:commaOrSpaceSeparated,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:commaOrSpaceSeparated,requiredFeatures:commaOrSpaceSeparated,requiredFonts:commaOrSpaceSeparated,requiredFormats:commaOrSpaceSeparated,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:number,specularExponent:number,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:number,strikethroughThickness:number,string:null,stroke:null,strokeDashArray:commaOrSpaceSeparated,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:number,strokeOpacity:number,strokeWidth:null,style:null,surfaceScale:number,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:commaOrSpaceSeparated,tabIndex:number,tableValues:null,target:null,targetX:number,targetY:number,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:commaOrSpaceSeparated,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:number,underlineThickness:number,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:number,values:null,vAlphabetic:number,vMathematical:number,vectorEffect:null,vHanging:number,vIdeographic:number,version:null,vertAdvY:number,vertOriginX:number,vertOriginY:number,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:number,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:`svg`,transform:caseSensitiveTransform}),xlink=create$15({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:`xlink`,transform(e,t){return`xlink:`+t.slice(5).toLowerCase()}}),xmlns=create$15({attributes:{xmlnsxlink:`xmlns:xlink`},properties:{xmlnsXLink:null,xmlns:null},space:`xmlns`,transform:caseInsensitiveTransform}),xml=create$15({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:`xml`,transform(e,t){return`xml:`+t.slice(3).toLowerCase()}}),cap=/[A-Z]/g,dash=/-[a-z]/g,valid=/^data[-\w.:]+$/i;function find$1(e,t){let S=normalize$3(t),w=t,E=Info;if(S in e.normal)return e.property[e.normal[S]];if(S.length>4&&S.slice(0,4)===`data`&&valid.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(dash,camelcase$1);w=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!dash.test(e)){let S=e.replace(cap,kebab);S.charAt(0)!==`-`&&(S=`-`+S),t=`data`+S}}E=DefinedInfo}return new E(w,t)}function kebab(e){return`-`+e.toLowerCase()}function camelcase$1(e){return e.charAt(1).toUpperCase()}const html$1=merge([aria,html$2,xlink,xmlns,xml],`html`),svg=merge([aria,svg$1,xlink,xmlns,xml],`svg`);function parse$4(e){let t=[],S=String(e||``),w=S.indexOf(`,`),E=0,D=!1;for(;!D;){w===-1&&(w=S.length,D=!0);let e=S.slice(E,w).trim();(e||!D)&&t.push(e),E=w+1,w=S.indexOf(`,`,E)}return t}const search$3=/[#.]/g;function parseSelector(e,t){let S=e||``,w={},E=0,D,O;for(;E<S.length;){search$3.lastIndex=E;let e=search$3.exec(S),t=S.slice(E,e?e.index:S.length);t&&(D?D===`#`?w.id=t:Array.isArray(w.className)?w.className.push(t):w.className=[t]:O=t,E+=t.length),e&&(D=e[0],E++)}return{type:`element`,tagName:O||t||`div`,properties:w,children:[]}}function parse$3(e){let t=String(e||``).trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function createH(e,t,S){let w=S?createAdjustMap(S):void 0;function E(S,E,...D){let O;if(S==null){O={type:`root`,children:[]};let e=E;D.unshift(e)}else{O=parseSelector(S,t);let k=O.tagName.toLowerCase(),j=w?w.get(k):void 0;if(O.tagName=j||k,isChild(E))D.unshift(E);else for(let[t,S]of Object.entries(E))addProperty(e,O.properties,t,S)}for(let e of D)addChild(O.children,e);return O.type===`element`&&O.tagName===`template`&&(O.content={type:`root`,children:O.children},O.children=[]),O}return E}function isChild(e){if(typeof e!=`object`||!e||Array.isArray(e))return!0;if(typeof e.type!=`string`)return!1;let t=e,S=Object.keys(e);for(let e of S){let S=t[e];if(S&&typeof S==`object`){if(!Array.isArray(S))return!0;let e=S;for(let t of e)if(typeof t!=`number`&&typeof t!=`string`)return!0}}return!!(`children`in e&&Array.isArray(e.children))}function addProperty(e,t,S,w){let E=find$1(e,S),D;if(w!=null){if(typeof w==`number`){if(Number.isNaN(w))return;D=w}else D=typeof w==`boolean`?w:typeof w==`string`?E.spaceSeparated?parse$3(w):E.commaSeparated?parse$4(w):E.commaOrSpaceSeparated?parse$3(parse$4(w).join(` `)):parsePrimitive(E,E.property,w):Array.isArray(w)?[...w]:E.property===`style`?style(w):String(w);if(Array.isArray(D)){let e=[];for(let t of D)e.push(parsePrimitive(E,E.property,t));D=e}E.property===`className`&&Array.isArray(t.className)&&(D=t.className.concat(D)),t[E.property]=D}}function addChild(e,t){if(t!=null)if(typeof t==`number`||typeof t==`string`)e.push({type:`text`,value:String(t)});else if(Array.isArray(t))for(let S of t)addChild(e,S);else if(typeof t==`object`&&`type`in t)t.type===`root`?addChild(e,t.children):e.push(t);else throw Error("Expected node, nodes, or string, got `"+t+"`")}function parsePrimitive(e,t,S){if(typeof S==`string`){if(e.number&&S&&!Number.isNaN(Number(S)))return Number(S);if((e.boolean||e.overloadedBoolean)&&(S===``||normalize$3(S)===normalize$3(t)))return!0}return S}function style(e){let t=[];for(let[S,w]of Object.entries(e))t.push([S,w].join(`: `));return t.join(`; `)}function createAdjustMap(e){let t=new Map;for(let S of e)t.set(S.toLowerCase(),S);return t}const svgCaseSensitiveTagNames=`altGlyph.altGlyphDef.altGlyphItem.animateColor.animateMotion.animateTransform.clipPath.feBlend.feColorMatrix.feComponentTransfer.feComposite.feConvolveMatrix.feDiffuseLighting.feDisplacementMap.feDistantLight.feDropShadow.feFlood.feFuncA.feFuncB.feFuncG.feFuncR.feGaussianBlur.feImage.feMerge.feMergeNode.feMorphology.feOffset.fePointLight.feSpecularLighting.feSpotLight.feTile.feTurbulence.foreignObject.glyphRef.linearGradient.radialGradient.solidColor.textArea.textPath`.split(`.`),h=createH(html$1,`div`),s=createH(svg,`g`,svgCaseSensitiveTagNames);function location$1(e){let t=String(e),S=[];return{toOffset:E,toPoint:w};function w(e){if(typeof e==`number`&&e>-1&&e<=t.length){let w=0;for(;;){let E=S[w];if(E===void 0){let e=next(t,S[w-1]);E=e===-1?t.length+1:e+1,S[w]=E}if(E>e)return{line:w+1,column:e-(w>0?S[w-1]:0)+1,offset:e};w++}}}function E(e){if(e&&typeof e.line==`number`&&typeof e.column==`number`&&!Number.isNaN(e.line)&&!Number.isNaN(e.column)){for(;S.length<e.line;){let e=S[S.length-1],w=next(t,e),E=w===-1?t.length+1:w+1;if(e===E)break;S.push(E)}let w=(e.line>1?S[e.line-2]:0)+e.column-1;if(w<S[e.line-1])return w}}}function next(e,t){let S=e.indexOf(`\r`,t),w=e.indexOf(`
237
237
  `,t);return w===-1?S:S===-1||S+1===w?w:S<w?S:w}const webNamespaces={html:`http://www.w3.org/1999/xhtml`,mathml:`http://www.w3.org/1998/Math/MathML`,svg:`http://www.w3.org/2000/svg`,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`},own$7={}.hasOwnProperty,proto=Object.prototype;function fromParse5(e,t){let S=t||{};return one$1({file:S.file||void 0,location:!1,schema:S.space===`svg`?svg:html$1,verbose:S.verbose||!1},e)}function one$1(e,t){let S;switch(t.nodeName){case`#comment`:{let w=t;return S={type:`comment`,value:w.data},patch(e,w,S),S}case`#document`:case`#document-fragment`:{let w=t,E=`mode`in w?w.mode===`quirks`||w.mode===`limited-quirks`:!1;if(S={type:`root`,children:all$2(e,t.childNodes),data:{quirksMode:E}},e.file&&e.location){let t=String(e.file),w=location$1(t),E=w.toPoint(0),D=w.toPoint(t.length);S.position={start:E,end:D}}return S}case`#documentType`:{let w=t;return S={type:`doctype`},patch(e,w,S),S}case`#text`:{let w=t;return S={type:`text`,value:w.value},patch(e,w,S),S}default:return S=element(e,t),S}}function all$2(e,t){let S=-1,w=[];for(;++S<t.length;){let E=one$1(e,t[S]);w.push(E)}return w}function element(e,t){let S=e.schema;e.schema=t.namespaceURI===webNamespaces.svg?svg:html$1;let w=-1,E={};for(;++w<t.attrs.length;){let e=t.attrs[w],S=(e.prefix?e.prefix+`:`:``)+e.name;own$7.call(proto,S)||(E[S]=e.value)}let D=(e.schema.space===`svg`?s:h)(t.tagName,E,all$2(e,t.childNodes));if(patch(e,t,D),D.tagName===`template`){let S=t,w=S.sourceCodeLocation,E=w&&w.startTag&&position(w.startTag),O=w&&w.endTag&&position(w.endTag),k=one$1(e,S.content);E&&O&&e.file&&(k.position={start:E.end,end:O.start}),D.content=k}return e.schema=S,D}function patch(e,t,S){if(`sourceCodeLocation`in t&&t.sourceCodeLocation&&e.file){let w=createLocation(e,S,t.sourceCodeLocation);w&&(e.location=!0,S.position=w)}}function createLocation(e,t,S){let w=position(S);if(t.type===`element`){let E=t.children[t.children.length-1];if(w&&!S.endTag&&E&&E.position&&E.position.end&&(w.end=Object.assign({},E.position.end)),e.verbose){let w={},E;if(S.attrs)for(E in S.attrs)own$7.call(S.attrs,E)&&(w[find$1(e.schema,E).property]=position(S.attrs[E]));S.startTag;let D=position(S.startTag),O=S.endTag?position(S.endTag):void 0,k={opening:D};O&&(k.closing=O),k.properties=w,t.data={position:k}}}return w}function position(e){let t=point$1({line:e.startLine,column:e.startCol,offset:e.startOffset}),S=point$1({line:e.endLine,column:e.endCol,offset:e.endOffset});return t||S?{start:t,end:S}:void 0}function point$1(e){return e.line&&e.column?e:void 0}const UNDEFINED_CODE_POINTS=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),REPLACEMENT_CHARACTER=`�`;var CODE_POINTS;(function(e){e[e.EOF=-1]=`EOF`,e[e.NULL=0]=`NULL`,e[e.TABULATION=9]=`TABULATION`,e[e.CARRIAGE_RETURN=13]=`CARRIAGE_RETURN`,e[e.LINE_FEED=10]=`LINE_FEED`,e[e.FORM_FEED=12]=`FORM_FEED`,e[e.SPACE=32]=`SPACE`,e[e.EXCLAMATION_MARK=33]=`EXCLAMATION_MARK`,e[e.QUOTATION_MARK=34]=`QUOTATION_MARK`,e[e.AMPERSAND=38]=`AMPERSAND`,e[e.APOSTROPHE=39]=`APOSTROPHE`,e[e.HYPHEN_MINUS=45]=`HYPHEN_MINUS`,e[e.SOLIDUS=47]=`SOLIDUS`,e[e.DIGIT_0=48]=`DIGIT_0`,e[e.DIGIT_9=57]=`DIGIT_9`,e[e.SEMICOLON=59]=`SEMICOLON`,e[e.LESS_THAN_SIGN=60]=`LESS_THAN_SIGN`,e[e.EQUALS_SIGN=61]=`EQUALS_SIGN`,e[e.GREATER_THAN_SIGN=62]=`GREATER_THAN_SIGN`,e[e.QUESTION_MARK=63]=`QUESTION_MARK`,e[e.LATIN_CAPITAL_A=65]=`LATIN_CAPITAL_A`,e[e.LATIN_CAPITAL_Z=90]=`LATIN_CAPITAL_Z`,e[e.RIGHT_SQUARE_BRACKET=93]=`RIGHT_SQUARE_BRACKET`,e[e.GRAVE_ACCENT=96]=`GRAVE_ACCENT`,e[e.LATIN_SMALL_A=97]=`LATIN_SMALL_A`,e[e.LATIN_SMALL_Z=122]=`LATIN_SMALL_Z`})(CODE_POINTS||={});const SEQUENCES={DASH_DASH:`--`,CDATA_START:`[CDATA[`,DOCTYPE:`doctype`,SCRIPT:`script`,PUBLIC:`public`,SYSTEM:`system`};function isSurrogate(e){return e>=55296&&e<=57343}function isSurrogatePair(e){return e>=56320&&e<=57343}function getSurrogatePairCodePoint(e,t){return(e-55296)*1024+9216+t}function isControlCodePoint(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function isUndefinedCodePoint(e){return e>=64976&&e<=65007||UNDEFINED_CODE_POINTS.has(e)}var ERR;(function(e){e.controlCharacterInInputStream=`control-character-in-input-stream`,e.noncharacterInInputStream=`noncharacter-in-input-stream`,e.surrogateInInputStream=`surrogate-in-input-stream`,e.nonVoidHtmlElementStartTagWithTrailingSolidus=`non-void-html-element-start-tag-with-trailing-solidus`,e.endTagWithAttributes=`end-tag-with-attributes`,e.endTagWithTrailingSolidus=`end-tag-with-trailing-solidus`,e.unexpectedSolidusInTag=`unexpected-solidus-in-tag`,e.unexpectedNullCharacter=`unexpected-null-character`,e.unexpectedQuestionMarkInsteadOfTagName=`unexpected-question-mark-instead-of-tag-name`,e.invalidFirstCharacterOfTagName=`invalid-first-character-of-tag-name`,e.unexpectedEqualsSignBeforeAttributeName=`unexpected-equals-sign-before-attribute-name`,e.missingEndTagName=`missing-end-tag-name`,e.unexpectedCharacterInAttributeName=`unexpected-character-in-attribute-name`,e.unknownNamedCharacterReference=`unknown-named-character-reference`,e.missingSemicolonAfterCharacterReference=`missing-semicolon-after-character-reference`,e.unexpectedCharacterAfterDoctypeSystemIdentifier=`unexpected-character-after-doctype-system-identifier`,e.unexpectedCharacterInUnquotedAttributeValue=`unexpected-character-in-unquoted-attribute-value`,e.eofBeforeTagName=`eof-before-tag-name`,e.eofInTag=`eof-in-tag`,e.missingAttributeValue=`missing-attribute-value`,e.missingWhitespaceBetweenAttributes=`missing-whitespace-between-attributes`,e.missingWhitespaceAfterDoctypePublicKeyword=`missing-whitespace-after-doctype-public-keyword`,e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers=`missing-whitespace-between-doctype-public-and-system-identifiers`,e.missingWhitespaceAfterDoctypeSystemKeyword=`missing-whitespace-after-doctype-system-keyword`,e.missingQuoteBeforeDoctypePublicIdentifier=`missing-quote-before-doctype-public-identifier`,e.missingQuoteBeforeDoctypeSystemIdentifier=`missing-quote-before-doctype-system-identifier`,e.missingDoctypePublicIdentifier=`missing-doctype-public-identifier`,e.missingDoctypeSystemIdentifier=`missing-doctype-system-identifier`,e.abruptDoctypePublicIdentifier=`abrupt-doctype-public-identifier`,e.abruptDoctypeSystemIdentifier=`abrupt-doctype-system-identifier`,e.cdataInHtmlContent=`cdata-in-html-content`,e.incorrectlyOpenedComment=`incorrectly-opened-comment`,e.eofInScriptHtmlCommentLikeText=`eof-in-script-html-comment-like-text`,e.eofInDoctype=`eof-in-doctype`,e.nestedComment=`nested-comment`,e.abruptClosingOfEmptyComment=`abrupt-closing-of-empty-comment`,e.eofInComment=`eof-in-comment`,e.incorrectlyClosedComment=`incorrectly-closed-comment`,e.eofInCdata=`eof-in-cdata`,e.absenceOfDigitsInNumericCharacterReference=`absence-of-digits-in-numeric-character-reference`,e.nullCharacterReference=`null-character-reference`,e.surrogateCharacterReference=`surrogate-character-reference`,e.characterReferenceOutsideUnicodeRange=`character-reference-outside-unicode-range`,e.controlCharacterReference=`control-character-reference`,e.noncharacterCharacterReference=`noncharacter-character-reference`,e.missingWhitespaceBeforeDoctypeName=`missing-whitespace-before-doctype-name`,e.missingDoctypeName=`missing-doctype-name`,e.invalidCharacterSequenceAfterDoctypeName=`invalid-character-sequence-after-doctype-name`,e.duplicateAttribute=`duplicate-attribute`,e.nonConformingDoctype=`non-conforming-doctype`,e.missingDoctype=`missing-doctype`,e.misplacedDoctype=`misplaced-doctype`,e.endTagWithoutMatchingOpenElement=`end-tag-without-matching-open-element`,e.closingOfElementWithOpenChildElements=`closing-of-element-with-open-child-elements`,e.disallowedContentInNoscriptInHead=`disallowed-content-in-noscript-in-head`,e.openElementsLeftAfterEof=`open-elements-left-after-eof`,e.abandonedHeadElementChild=`abandoned-head-element-child`,e.misplacedStartTagForHeadElement=`misplaced-start-tag-for-head-element`,e.nestedNoscriptInHead=`nested-noscript-in-head`,e.eofInElementThatCanContainOnlyText=`eof-in-element-that-can-contain-only-text`})(ERR||={});const DEFAULT_BUFFER_WATERLINE=65536;var Preprocessor=class{constructor(e){this.handler=e,this.html=``,this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=DEFAULT_BUFFER_WATERLINE,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+Number(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(e,t){let{line:S,col:w,offset:E}=this,D=w+t,O=E+t;return{code:e,startLine:S,endLine:S,startCol:D,endCol:D,startOffset:O,endOffset:O}}_err(e){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(e,0)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.html.length-1){let t=this.html.charCodeAt(this.pos+1);if(isSurrogatePair(t))return this.pos++,this._addGap(),getSurrogatePairCodePoint(e,t)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,CODE_POINTS.EOF;return this._err(ERR.surrogateInInputStream),e}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(e,t){this.html.length>0?this.html+=e:this.html=e,this.endOfChunkHit=!1,this.lastChunkWritten=t}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(e,t){if(this.pos+e.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(t)return this.html.startsWith(e,this.pos);for(let t=0;t<e.length;t++)if((this.html.charCodeAt(this.pos+t)|32)!==e.charCodeAt(t))return!1;return!0}peek(e){let t=this.pos+e;if(t>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,CODE_POINTS.EOF;let S=this.html.charCodeAt(t);return S===CODE_POINTS.CARRIAGE_RETURN?CODE_POINTS.LINE_FEED:S}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,CODE_POINTS.EOF;let e=this.html.charCodeAt(this.pos);return e===CODE_POINTS.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,CODE_POINTS.LINE_FEED):e===CODE_POINTS.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,isSurrogate(e)&&(e=this._processSurrogate(e)),this.handler.onParseError===null||e>31&&e<127||e===CODE_POINTS.LINE_FEED||e===CODE_POINTS.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e),e)}_checkForProblematicCharacters(e){isControlCodePoint(e)?this._err(ERR.controlCharacterInInputStream):isUndefinedCodePoint(e)&&this._err(ERR.noncharacterInInputStream)}retreat(e){for(this.pos-=e;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=!1}},TokenType;(function(e){e[e.CHARACTER=0]=`CHARACTER`,e[e.NULL_CHARACTER=1]=`NULL_CHARACTER`,e[e.WHITESPACE_CHARACTER=2]=`WHITESPACE_CHARACTER`,e[e.START_TAG=3]=`START_TAG`,e[e.END_TAG=4]=`END_TAG`,e[e.COMMENT=5]=`COMMENT`,e[e.DOCTYPE=6]=`DOCTYPE`,e[e.EOF=7]=`EOF`,e[e.HIBERNATION=8]=`HIBERNATION`})(TokenType||={});function getTokenAttr(e,t){for(let S=e.attrs.length-1;S>=0;S--)if(e.attrs[S].name===t)return e.attrs[S].value;return null}const htmlDecodeTree=new Uint16Array(`ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻\xA0ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌`.split(``).map(e=>e.charCodeAt(0)));var _a$1;const decodeMap=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),fromCodePoint$1=(_a$1=String.fromCodePoint)??function(e){let t=``;return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|e&1023),t+=String.fromCharCode(e),t};function replaceCodePoint(e){var t;return e>=55296&&e<=57343||e>1114111?65533:decodeMap.get(e)??e}var CharCodes;(function(e){e[e.NUM=35]=`NUM`,e[e.SEMI=59]=`SEMI`,e[e.EQUALS=61]=`EQUALS`,e[e.ZERO=48]=`ZERO`,e[e.NINE=57]=`NINE`,e[e.LOWER_A=97]=`LOWER_A`,e[e.LOWER_F=102]=`LOWER_F`,e[e.LOWER_X=120]=`LOWER_X`,e[e.LOWER_Z=122]=`LOWER_Z`,e[e.UPPER_A=65]=`UPPER_A`,e[e.UPPER_F=70]=`UPPER_F`,e[e.UPPER_Z=90]=`UPPER_Z`})(CharCodes||={});const TO_LOWER_BIT=32;var BinTrieFlags;(function(e){e[e.VALUE_LENGTH=49152]=`VALUE_LENGTH`,e[e.BRANCH_LENGTH=16256]=`BRANCH_LENGTH`,e[e.JUMP_TABLE=127]=`JUMP_TABLE`})(BinTrieFlags||={});function isNumber(e){return e>=CharCodes.ZERO&&e<=CharCodes.NINE}function isHexadecimalCharacter(e){return e>=CharCodes.UPPER_A&&e<=CharCodes.UPPER_F||e>=CharCodes.LOWER_A&&e<=CharCodes.LOWER_F}function isAsciiAlphaNumeric$1(e){return e>=CharCodes.UPPER_A&&e<=CharCodes.UPPER_Z||e>=CharCodes.LOWER_A&&e<=CharCodes.LOWER_Z||isNumber(e)}function isEntityInAttributeInvalidEnd(e){return e===CharCodes.EQUALS||isAsciiAlphaNumeric$1(e)}var EntityDecoderState;(function(e){e[e.EntityStart=0]=`EntityStart`,e[e.NumericStart=1]=`NumericStart`,e[e.NumericDecimal=2]=`NumericDecimal`,e[e.NumericHex=3]=`NumericHex`,e[e.NamedEntity=4]=`NamedEntity`})(EntityDecoderState||={});var DecodingMode;(function(e){e[e.Legacy=0]=`Legacy`,e[e.Strict=1]=`Strict`,e[e.Attribute=2]=`Attribute`})(DecodingMode||={});var EntityDecoder=class{constructor(e,t,S){this.decodeTree=e,this.emitCodePoint=t,this.errors=S,this.state=EntityDecoderState.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=DecodingMode.Strict}startEntity(e){this.decodeMode=e,this.state=EntityDecoderState.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(e,t){switch(this.state){case EntityDecoderState.EntityStart:return e.charCodeAt(t)===CharCodes.NUM?(this.state=EntityDecoderState.NumericStart,this.consumed+=1,this.stateNumericStart(e,t+1)):(this.state=EntityDecoderState.NamedEntity,this.stateNamedEntity(e,t));case EntityDecoderState.NumericStart:return this.stateNumericStart(e,t);case EntityDecoderState.NumericDecimal:return this.stateNumericDecimal(e,t);case EntityDecoderState.NumericHex:return this.stateNumericHex(e,t);case EntityDecoderState.NamedEntity:return this.stateNamedEntity(e,t)}}stateNumericStart(e,t){return t>=e.length?-1:(e.charCodeAt(t)|TO_LOWER_BIT)===CharCodes.LOWER_X?(this.state=EntityDecoderState.NumericHex,this.consumed+=1,this.stateNumericHex(e,t+1)):(this.state=EntityDecoderState.NumericDecimal,this.stateNumericDecimal(e,t))}addToNumericResult(e,t,S,w){if(t!==S){let E=S-t;this.result=this.result*w**+E+Number.parseInt(e.substr(t,E),w),this.consumed+=E}}stateNumericHex(e,t){let S=t;for(;t<e.length;){let w=e.charCodeAt(t);if(isNumber(w)||isHexadecimalCharacter(w))t+=1;else return this.addToNumericResult(e,S,t,16),this.emitNumericEntity(w,3)}return this.addToNumericResult(e,S,t,16),-1}stateNumericDecimal(e,t){let S=t;for(;t<e.length;){let w=e.charCodeAt(t);if(isNumber(w))t+=1;else return this.addToNumericResult(e,S,t,10),this.emitNumericEntity(w,2)}return this.addToNumericResult(e,S,t,10),-1}emitNumericEntity(e,t){var S;if(this.consumed<=t)return(S=this.errors)==null||S.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(e===CharCodes.SEMI)this.consumed+=1;else if(this.decodeMode===DecodingMode.Strict)return 0;return this.emitCodePoint(replaceCodePoint(this.result),this.consumed),this.errors&&(e!==CharCodes.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(e,t){let{decodeTree:S}=this,w=S[this.treeIndex],E=(w&BinTrieFlags.VALUE_LENGTH)>>14;for(;t<e.length;t++,this.excess++){let D=e.charCodeAt(t);if(this.treeIndex=determineBranch(S,w,this.treeIndex+Math.max(1,E),D),this.treeIndex<0)return this.result===0||this.decodeMode===DecodingMode.Attribute&&(E===0||isEntityInAttributeInvalidEnd(D))?0:this.emitNotTerminatedNamedEntity();if(w=S[this.treeIndex],E=(w&BinTrieFlags.VALUE_LENGTH)>>14,E!==0){if(D===CharCodes.SEMI)return this.emitNamedEntityData(this.treeIndex,E,this.consumed+this.excess);this.decodeMode!==DecodingMode.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var e;let{result:t,decodeTree:S}=this,w=(S[t]&BinTrieFlags.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,w,this.consumed),(e=this.errors)==null||e.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(e,t,S){let{decodeTree:w}=this;return this.emitCodePoint(t===1?w[e]&~BinTrieFlags.VALUE_LENGTH:w[e+1],S),t===3&&this.emitCodePoint(w[e+2],S),S}end(){var e;switch(this.state){case EntityDecoderState.NamedEntity:return this.result!==0&&(this.decodeMode!==DecodingMode.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case EntityDecoderState.NumericDecimal:return this.emitNumericEntity(0,2);case EntityDecoderState.NumericHex:return this.emitNumericEntity(0,3);case EntityDecoderState.NumericStart:return(e=this.errors)==null||e.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case EntityDecoderState.EntityStart:return 0}}};function determineBranch(e,t,S,w){let E=(t&BinTrieFlags.BRANCH_LENGTH)>>7,D=t&BinTrieFlags.JUMP_TABLE;if(E===0)return D!==0&&w===D?S:-1;if(D){let t=w-D;return t<0||t>=E?-1:e[S+t]-1}let O=S,k=O+E-1;for(;O<=k;){let t=O+k>>>1,S=e[t];if(S<w)O=t+1;else if(S>w)k=t-1;else return e[t+E]}return-1}var NS;(function(e){e.HTML=`http://www.w3.org/1999/xhtml`,e.MATHML=`http://www.w3.org/1998/Math/MathML`,e.SVG=`http://www.w3.org/2000/svg`,e.XLINK=`http://www.w3.org/1999/xlink`,e.XML=`http://www.w3.org/XML/1998/namespace`,e.XMLNS=`http://www.w3.org/2000/xmlns/`})(NS||={});var ATTRS;(function(e){e.TYPE=`type`,e.ACTION=`action`,e.ENCODING=`encoding`,e.PROMPT=`prompt`,e.NAME=`name`,e.COLOR=`color`,e.FACE=`face`,e.SIZE=`size`})(ATTRS||={});var DOCUMENT_MODE;(function(e){e.NO_QUIRKS=`no-quirks`,e.QUIRKS=`quirks`,e.LIMITED_QUIRKS=`limited-quirks`})(DOCUMENT_MODE||={});var TAG_NAMES;(function(e){e.A=`a`,e.ADDRESS=`address`,e.ANNOTATION_XML=`annotation-xml`,e.APPLET=`applet`,e.AREA=`area`,e.ARTICLE=`article`,e.ASIDE=`aside`,e.B=`b`,e.BASE=`base`,e.BASEFONT=`basefont`,e.BGSOUND=`bgsound`,e.BIG=`big`,e.BLOCKQUOTE=`blockquote`,e.BODY=`body`,e.BR=`br`,e.BUTTON=`button`,e.CAPTION=`caption`,e.CENTER=`center`,e.CODE=`code`,e.COL=`col`,e.COLGROUP=`colgroup`,e.DD=`dd`,e.DESC=`desc`,e.DETAILS=`details`,e.DIALOG=`dialog`,e.DIR=`dir`,e.DIV=`div`,e.DL=`dl`,e.DT=`dt`,e.EM=`em`,e.EMBED=`embed`,e.FIELDSET=`fieldset`,e.FIGCAPTION=`figcaption`,e.FIGURE=`figure`,e.FONT=`font`,e.FOOTER=`footer`,e.FOREIGN_OBJECT=`foreignObject`,e.FORM=`form`,e.FRAME=`frame`,e.FRAMESET=`frameset`,e.H1=`h1`,e.H2=`h2`,e.H3=`h3`,e.H4=`h4`,e.H5=`h5`,e.H6=`h6`,e.HEAD=`head`,e.HEADER=`header`,e.HGROUP=`hgroup`,e.HR=`hr`,e.HTML=`html`,e.I=`i`,e.IMG=`img`,e.IMAGE=`image`,e.INPUT=`input`,e.IFRAME=`iframe`,e.KEYGEN=`keygen`,e.LABEL=`label`,e.LI=`li`,e.LINK=`link`,e.LISTING=`listing`,e.MAIN=`main`,e.MALIGNMARK=`malignmark`,e.MARQUEE=`marquee`,e.MATH=`math`,e.MENU=`menu`,e.META=`meta`,e.MGLYPH=`mglyph`,e.MI=`mi`,e.MO=`mo`,e.MN=`mn`,e.MS=`ms`,e.MTEXT=`mtext`,e.NAV=`nav`,e.NOBR=`nobr`,e.NOFRAMES=`noframes`,e.NOEMBED=`noembed`,e.NOSCRIPT=`noscript`,e.OBJECT=`object`,e.OL=`ol`,e.OPTGROUP=`optgroup`,e.OPTION=`option`,e.P=`p`,e.PARAM=`param`,e.PLAINTEXT=`plaintext`,e.PRE=`pre`,e.RB=`rb`,e.RP=`rp`,e.RT=`rt`,e.RTC=`rtc`,e.RUBY=`ruby`,e.S=`s`,e.SCRIPT=`script`,e.SEARCH=`search`,e.SECTION=`section`,e.SELECT=`select`,e.SOURCE=`source`,e.SMALL=`small`,e.SPAN=`span`,e.STRIKE=`strike`,e.STRONG=`strong`,e.STYLE=`style`,e.SUB=`sub`,e.SUMMARY=`summary`,e.SUP=`sup`,e.TABLE=`table`,e.TBODY=`tbody`,e.TEMPLATE=`template`,e.TEXTAREA=`textarea`,e.TFOOT=`tfoot`,e.TD=`td`,e.TH=`th`,e.THEAD=`thead`,e.TITLE=`title`,e.TR=`tr`,e.TRACK=`track`,e.TT=`tt`,e.U=`u`,e.UL=`ul`,e.SVG=`svg`,e.VAR=`var`,e.WBR=`wbr`,e.XMP=`xmp`})(TAG_NAMES||={});var TAG_ID;(function(e){e[e.UNKNOWN=0]=`UNKNOWN`,e[e.A=1]=`A`,e[e.ADDRESS=2]=`ADDRESS`,e[e.ANNOTATION_XML=3]=`ANNOTATION_XML`,e[e.APPLET=4]=`APPLET`,e[e.AREA=5]=`AREA`,e[e.ARTICLE=6]=`ARTICLE`,e[e.ASIDE=7]=`ASIDE`,e[e.B=8]=`B`,e[e.BASE=9]=`BASE`,e[e.BASEFONT=10]=`BASEFONT`,e[e.BGSOUND=11]=`BGSOUND`,e[e.BIG=12]=`BIG`,e[e.BLOCKQUOTE=13]=`BLOCKQUOTE`,e[e.BODY=14]=`BODY`,e[e.BR=15]=`BR`,e[e.BUTTON=16]=`BUTTON`,e[e.CAPTION=17]=`CAPTION`,e[e.CENTER=18]=`CENTER`,e[e.CODE=19]=`CODE`,e[e.COL=20]=`COL`,e[e.COLGROUP=21]=`COLGROUP`,e[e.DD=22]=`DD`,e[e.DESC=23]=`DESC`,e[e.DETAILS=24]=`DETAILS`,e[e.DIALOG=25]=`DIALOG`,e[e.DIR=26]=`DIR`,e[e.DIV=27]=`DIV`,e[e.DL=28]=`DL`,e[e.DT=29]=`DT`,e[e.EM=30]=`EM`,e[e.EMBED=31]=`EMBED`,e[e.FIELDSET=32]=`FIELDSET`,e[e.FIGCAPTION=33]=`FIGCAPTION`,e[e.FIGURE=34]=`FIGURE`,e[e.FONT=35]=`FONT`,e[e.FOOTER=36]=`FOOTER`,e[e.FOREIGN_OBJECT=37]=`FOREIGN_OBJECT`,e[e.FORM=38]=`FORM`,e[e.FRAME=39]=`FRAME`,e[e.FRAMESET=40]=`FRAMESET`,e[e.H1=41]=`H1`,e[e.H2=42]=`H2`,e[e.H3=43]=`H3`,e[e.H4=44]=`H4`,e[e.H5=45]=`H5`,e[e.H6=46]=`H6`,e[e.HEAD=47]=`HEAD`,e[e.HEADER=48]=`HEADER`,e[e.HGROUP=49]=`HGROUP`,e[e.HR=50]=`HR`,e[e.HTML=51]=`HTML`,e[e.I=52]=`I`,e[e.IMG=53]=`IMG`,e[e.IMAGE=54]=`IMAGE`,e[e.INPUT=55]=`INPUT`,e[e.IFRAME=56]=`IFRAME`,e[e.KEYGEN=57]=`KEYGEN`,e[e.LABEL=58]=`LABEL`,e[e.LI=59]=`LI`,e[e.LINK=60]=`LINK`,e[e.LISTING=61]=`LISTING`,e[e.MAIN=62]=`MAIN`,e[e.MALIGNMARK=63]=`MALIGNMARK`,e[e.MARQUEE=64]=`MARQUEE`,e[e.MATH=65]=`MATH`,e[e.MENU=66]=`MENU`,e[e.META=67]=`META`,e[e.MGLYPH=68]=`MGLYPH`,e[e.MI=69]=`MI`,e[e.MO=70]=`MO`,e[e.MN=71]=`MN`,e[e.MS=72]=`MS`,e[e.MTEXT=73]=`MTEXT`,e[e.NAV=74]=`NAV`,e[e.NOBR=75]=`NOBR`,e[e.NOFRAMES=76]=`NOFRAMES`,e[e.NOEMBED=77]=`NOEMBED`,e[e.NOSCRIPT=78]=`NOSCRIPT`,e[e.OBJECT=79]=`OBJECT`,e[e.OL=80]=`OL`,e[e.OPTGROUP=81]=`OPTGROUP`,e[e.OPTION=82]=`OPTION`,e[e.P=83]=`P`,e[e.PARAM=84]=`PARAM`,e[e.PLAINTEXT=85]=`PLAINTEXT`,e[e.PRE=86]=`PRE`,e[e.RB=87]=`RB`,e[e.RP=88]=`RP`,e[e.RT=89]=`RT`,e[e.RTC=90]=`RTC`,e[e.RUBY=91]=`RUBY`,e[e.S=92]=`S`,e[e.SCRIPT=93]=`SCRIPT`,e[e.SEARCH=94]=`SEARCH`,e[e.SECTION=95]=`SECTION`,e[e.SELECT=96]=`SELECT`,e[e.SOURCE=97]=`SOURCE`,e[e.SMALL=98]=`SMALL`,e[e.SPAN=99]=`SPAN`,e[e.STRIKE=100]=`STRIKE`,e[e.STRONG=101]=`STRONG`,e[e.STYLE=102]=`STYLE`,e[e.SUB=103]=`SUB`,e[e.SUMMARY=104]=`SUMMARY`,e[e.SUP=105]=`SUP`,e[e.TABLE=106]=`TABLE`,e[e.TBODY=107]=`TBODY`,e[e.TEMPLATE=108]=`TEMPLATE`,e[e.TEXTAREA=109]=`TEXTAREA`,e[e.TFOOT=110]=`TFOOT`,e[e.TD=111]=`TD`,e[e.TH=112]=`TH`,e[e.THEAD=113]=`THEAD`,e[e.TITLE=114]=`TITLE`,e[e.TR=115]=`TR`,e[e.TRACK=116]=`TRACK`,e[e.TT=117]=`TT`,e[e.U=118]=`U`,e[e.UL=119]=`UL`,e[e.SVG=120]=`SVG`,e[e.VAR=121]=`VAR`,e[e.WBR=122]=`WBR`,e[e.XMP=123]=`XMP`})(TAG_ID||={});const TAG_NAME_TO_ID=new Map([[TAG_NAMES.A,TAG_ID.A],[TAG_NAMES.ADDRESS,TAG_ID.ADDRESS],[TAG_NAMES.ANNOTATION_XML,TAG_ID.ANNOTATION_XML],[TAG_NAMES.APPLET,TAG_ID.APPLET],[TAG_NAMES.AREA,TAG_ID.AREA],[TAG_NAMES.ARTICLE,TAG_ID.ARTICLE],[TAG_NAMES.ASIDE,TAG_ID.ASIDE],[TAG_NAMES.B,TAG_ID.B],[TAG_NAMES.BASE,TAG_ID.BASE],[TAG_NAMES.BASEFONT,TAG_ID.BASEFONT],[TAG_NAMES.BGSOUND,TAG_ID.BGSOUND],[TAG_NAMES.BIG,TAG_ID.BIG],[TAG_NAMES.BLOCKQUOTE,TAG_ID.BLOCKQUOTE],[TAG_NAMES.BODY,TAG_ID.BODY],[TAG_NAMES.BR,TAG_ID.BR],[TAG_NAMES.BUTTON,TAG_ID.BUTTON],[TAG_NAMES.CAPTION,TAG_ID.CAPTION],[TAG_NAMES.CENTER,TAG_ID.CENTER],[TAG_NAMES.CODE,TAG_ID.CODE],[TAG_NAMES.COL,TAG_ID.COL],[TAG_NAMES.COLGROUP,TAG_ID.COLGROUP],[TAG_NAMES.DD,TAG_ID.DD],[TAG_NAMES.DESC,TAG_ID.DESC],[TAG_NAMES.DETAILS,TAG_ID.DETAILS],[TAG_NAMES.DIALOG,TAG_ID.DIALOG],[TAG_NAMES.DIR,TAG_ID.DIR],[TAG_NAMES.DIV,TAG_ID.DIV],[TAG_NAMES.DL,TAG_ID.DL],[TAG_NAMES.DT,TAG_ID.DT],[TAG_NAMES.EM,TAG_ID.EM],[TAG_NAMES.EMBED,TAG_ID.EMBED],[TAG_NAMES.FIELDSET,TAG_ID.FIELDSET],[TAG_NAMES.FIGCAPTION,TAG_ID.FIGCAPTION],[TAG_NAMES.FIGURE,TAG_ID.FIGURE],[TAG_NAMES.FONT,TAG_ID.FONT],[TAG_NAMES.FOOTER,TAG_ID.FOOTER],[TAG_NAMES.FOREIGN_OBJECT,TAG_ID.FOREIGN_OBJECT],[TAG_NAMES.FORM,TAG_ID.FORM],[TAG_NAMES.FRAME,TAG_ID.FRAME],[TAG_NAMES.FRAMESET,TAG_ID.FRAMESET],[TAG_NAMES.H1,TAG_ID.H1],[TAG_NAMES.H2,TAG_ID.H2],[TAG_NAMES.H3,TAG_ID.H3],[TAG_NAMES.H4,TAG_ID.H4],[TAG_NAMES.H5,TAG_ID.H5],[TAG_NAMES.H6,TAG_ID.H6],[TAG_NAMES.HEAD,TAG_ID.HEAD],[TAG_NAMES.HEADER,TAG_ID.HEADER],[TAG_NAMES.HGROUP,TAG_ID.HGROUP],[TAG_NAMES.HR,TAG_ID.HR],[TAG_NAMES.HTML,TAG_ID.HTML],[TAG_NAMES.I,TAG_ID.I],[TAG_NAMES.IMG,TAG_ID.IMG],[TAG_NAMES.IMAGE,TAG_ID.IMAGE],[TAG_NAMES.INPUT,TAG_ID.INPUT],[TAG_NAMES.IFRAME,TAG_ID.IFRAME],[TAG_NAMES.KEYGEN,TAG_ID.KEYGEN],[TAG_NAMES.LABEL,TAG_ID.LABEL],[TAG_NAMES.LI,TAG_ID.LI],[TAG_NAMES.LINK,TAG_ID.LINK],[TAG_NAMES.LISTING,TAG_ID.LISTING],[TAG_NAMES.MAIN,TAG_ID.MAIN],[TAG_NAMES.MALIGNMARK,TAG_ID.MALIGNMARK],[TAG_NAMES.MARQUEE,TAG_ID.MARQUEE],[TAG_NAMES.MATH,TAG_ID.MATH],[TAG_NAMES.MENU,TAG_ID.MENU],[TAG_NAMES.META,TAG_ID.META],[TAG_NAMES.MGLYPH,TAG_ID.MGLYPH],[TAG_NAMES.MI,TAG_ID.MI],[TAG_NAMES.MO,TAG_ID.MO],[TAG_NAMES.MN,TAG_ID.MN],[TAG_NAMES.MS,TAG_ID.MS],[TAG_NAMES.MTEXT,TAG_ID.MTEXT],[TAG_NAMES.NAV,TAG_ID.NAV],[TAG_NAMES.NOBR,TAG_ID.NOBR],[TAG_NAMES.NOFRAMES,TAG_ID.NOFRAMES],[TAG_NAMES.NOEMBED,TAG_ID.NOEMBED],[TAG_NAMES.NOSCRIPT,TAG_ID.NOSCRIPT],[TAG_NAMES.OBJECT,TAG_ID.OBJECT],[TAG_NAMES.OL,TAG_ID.OL],[TAG_NAMES.OPTGROUP,TAG_ID.OPTGROUP],[TAG_NAMES.OPTION,TAG_ID.OPTION],[TAG_NAMES.P,TAG_ID.P],[TAG_NAMES.PARAM,TAG_ID.PARAM],[TAG_NAMES.PLAINTEXT,TAG_ID.PLAINTEXT],[TAG_NAMES.PRE,TAG_ID.PRE],[TAG_NAMES.RB,TAG_ID.RB],[TAG_NAMES.RP,TAG_ID.RP],[TAG_NAMES.RT,TAG_ID.RT],[TAG_NAMES.RTC,TAG_ID.RTC],[TAG_NAMES.RUBY,TAG_ID.RUBY],[TAG_NAMES.S,TAG_ID.S],[TAG_NAMES.SCRIPT,TAG_ID.SCRIPT],[TAG_NAMES.SEARCH,TAG_ID.SEARCH],[TAG_NAMES.SECTION,TAG_ID.SECTION],[TAG_NAMES.SELECT,TAG_ID.SELECT],[TAG_NAMES.SOURCE,TAG_ID.SOURCE],[TAG_NAMES.SMALL,TAG_ID.SMALL],[TAG_NAMES.SPAN,TAG_ID.SPAN],[TAG_NAMES.STRIKE,TAG_ID.STRIKE],[TAG_NAMES.STRONG,TAG_ID.STRONG],[TAG_NAMES.STYLE,TAG_ID.STYLE],[TAG_NAMES.SUB,TAG_ID.SUB],[TAG_NAMES.SUMMARY,TAG_ID.SUMMARY],[TAG_NAMES.SUP,TAG_ID.SUP],[TAG_NAMES.TABLE,TAG_ID.TABLE],[TAG_NAMES.TBODY,TAG_ID.TBODY],[TAG_NAMES.TEMPLATE,TAG_ID.TEMPLATE],[TAG_NAMES.TEXTAREA,TAG_ID.TEXTAREA],[TAG_NAMES.TFOOT,TAG_ID.TFOOT],[TAG_NAMES.TD,TAG_ID.TD],[TAG_NAMES.TH,TAG_ID.TH],[TAG_NAMES.THEAD,TAG_ID.THEAD],[TAG_NAMES.TITLE,TAG_ID.TITLE],[TAG_NAMES.TR,TAG_ID.TR],[TAG_NAMES.TRACK,TAG_ID.TRACK],[TAG_NAMES.TT,TAG_ID.TT],[TAG_NAMES.U,TAG_ID.U],[TAG_NAMES.UL,TAG_ID.UL],[TAG_NAMES.SVG,TAG_ID.SVG],[TAG_NAMES.VAR,TAG_ID.VAR],[TAG_NAMES.WBR,TAG_ID.WBR],[TAG_NAMES.XMP,TAG_ID.XMP]]);function getTagID(e){var t;return TAG_NAME_TO_ID.get(e)??TAG_ID.UNKNOWN}const $$1=TAG_ID,SPECIAL_ELEMENTS={[NS.HTML]:new Set([$$1.ADDRESS,$$1.APPLET,$$1.AREA,$$1.ARTICLE,$$1.ASIDE,$$1.BASE,$$1.BASEFONT,$$1.BGSOUND,$$1.BLOCKQUOTE,$$1.BODY,$$1.BR,$$1.BUTTON,$$1.CAPTION,$$1.CENTER,$$1.COL,$$1.COLGROUP,$$1.DD,$$1.DETAILS,$$1.DIR,$$1.DIV,$$1.DL,$$1.DT,$$1.EMBED,$$1.FIELDSET,$$1.FIGCAPTION,$$1.FIGURE,$$1.FOOTER,$$1.FORM,$$1.FRAME,$$1.FRAMESET,$$1.H1,$$1.H2,$$1.H3,$$1.H4,$$1.H5,$$1.H6,$$1.HEAD,$$1.HEADER,$$1.HGROUP,$$1.HR,$$1.HTML,$$1.IFRAME,$$1.IMG,$$1.INPUT,$$1.LI,$$1.LINK,$$1.LISTING,$$1.MAIN,$$1.MARQUEE,$$1.MENU,$$1.META,$$1.NAV,$$1.NOEMBED,$$1.NOFRAMES,$$1.NOSCRIPT,$$1.OBJECT,$$1.OL,$$1.P,$$1.PARAM,$$1.PLAINTEXT,$$1.PRE,$$1.SCRIPT,$$1.SECTION,$$1.SELECT,$$1.SOURCE,$$1.STYLE,$$1.SUMMARY,$$1.TABLE,$$1.TBODY,$$1.TD,$$1.TEMPLATE,$$1.TEXTAREA,$$1.TFOOT,$$1.TH,$$1.THEAD,$$1.TITLE,$$1.TR,$$1.TRACK,$$1.UL,$$1.WBR,$$1.XMP]),[NS.MATHML]:new Set([$$1.MI,$$1.MO,$$1.MN,$$1.MS,$$1.MTEXT,$$1.ANNOTATION_XML]),[NS.SVG]:new Set([$$1.TITLE,$$1.FOREIGN_OBJECT,$$1.DESC]),[NS.XLINK]:new Set,[NS.XML]:new Set,[NS.XMLNS]:new Set},NUMBERED_HEADERS=new Set([$$1.H1,$$1.H2,$$1.H3,$$1.H4,$$1.H5,$$1.H6]),UNESCAPED_TEXT=new Set([TAG_NAMES.STYLE,TAG_NAMES.SCRIPT,TAG_NAMES.XMP,TAG_NAMES.IFRAME,TAG_NAMES.NOEMBED,TAG_NAMES.NOFRAMES,TAG_NAMES.PLAINTEXT]);var State;(function(e){e[e.DATA=0]=`DATA`,e[e.RCDATA=1]=`RCDATA`,e[e.RAWTEXT=2]=`RAWTEXT`,e[e.SCRIPT_DATA=3]=`SCRIPT_DATA`,e[e.PLAINTEXT=4]=`PLAINTEXT`,e[e.TAG_OPEN=5]=`TAG_OPEN`,e[e.END_TAG_OPEN=6]=`END_TAG_OPEN`,e[e.TAG_NAME=7]=`TAG_NAME`,e[e.RCDATA_LESS_THAN_SIGN=8]=`RCDATA_LESS_THAN_SIGN`,e[e.RCDATA_END_TAG_OPEN=9]=`RCDATA_END_TAG_OPEN`,e[e.RCDATA_END_TAG_NAME=10]=`RCDATA_END_TAG_NAME`,e[e.RAWTEXT_LESS_THAN_SIGN=11]=`RAWTEXT_LESS_THAN_SIGN`,e[e.RAWTEXT_END_TAG_OPEN=12]=`RAWTEXT_END_TAG_OPEN`,e[e.RAWTEXT_END_TAG_NAME=13]=`RAWTEXT_END_TAG_NAME`,e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]=`SCRIPT_DATA_LESS_THAN_SIGN`,e[e.SCRIPT_DATA_END_TAG_OPEN=15]=`SCRIPT_DATA_END_TAG_OPEN`,e[e.SCRIPT_DATA_END_TAG_NAME=16]=`SCRIPT_DATA_END_TAG_NAME`,e[e.SCRIPT_DATA_ESCAPE_START=17]=`SCRIPT_DATA_ESCAPE_START`,e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]=`SCRIPT_DATA_ESCAPE_START_DASH`,e[e.SCRIPT_DATA_ESCAPED=19]=`SCRIPT_DATA_ESCAPED`,e[e.SCRIPT_DATA_ESCAPED_DASH=20]=`SCRIPT_DATA_ESCAPED_DASH`,e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]=`SCRIPT_DATA_ESCAPED_DASH_DASH`,e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]=`SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN`,e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]=`SCRIPT_DATA_ESCAPED_END_TAG_OPEN`,e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]=`SCRIPT_DATA_ESCAPED_END_TAG_NAME`,e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]=`SCRIPT_DATA_DOUBLE_ESCAPE_START`,e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]=`SCRIPT_DATA_DOUBLE_ESCAPED`,e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]=`SCRIPT_DATA_DOUBLE_ESCAPED_DASH`,e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]=`SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH`,e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]=`SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN`,e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]=`SCRIPT_DATA_DOUBLE_ESCAPE_END`,e[e.BEFORE_ATTRIBUTE_NAME=31]=`BEFORE_ATTRIBUTE_NAME`,e[e.ATTRIBUTE_NAME=32]=`ATTRIBUTE_NAME`,e[e.AFTER_ATTRIBUTE_NAME=33]=`AFTER_ATTRIBUTE_NAME`,e[e.BEFORE_ATTRIBUTE_VALUE=34]=`BEFORE_ATTRIBUTE_VALUE`,e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]=`ATTRIBUTE_VALUE_DOUBLE_QUOTED`,e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]=`ATTRIBUTE_VALUE_SINGLE_QUOTED`,e[e.ATTRIBUTE_VALUE_UNQUOTED=37]=`ATTRIBUTE_VALUE_UNQUOTED`,e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]=`AFTER_ATTRIBUTE_VALUE_QUOTED`,e[e.SELF_CLOSING_START_TAG=39]=`SELF_CLOSING_START_TAG`,e[e.BOGUS_COMMENT=40]=`BOGUS_COMMENT`,e[e.MARKUP_DECLARATION_OPEN=41]=`MARKUP_DECLARATION_OPEN`,e[e.COMMENT_START=42]=`COMMENT_START`,e[e.COMMENT_START_DASH=43]=`COMMENT_START_DASH`,e[e.COMMENT=44]=`COMMENT`,e[e.COMMENT_LESS_THAN_SIGN=45]=`COMMENT_LESS_THAN_SIGN`,e[e.COMMENT_LESS_THAN_SIGN_BANG=46]=`COMMENT_LESS_THAN_SIGN_BANG`,e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]=`COMMENT_LESS_THAN_SIGN_BANG_DASH`,e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]=`COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH`,e[e.COMMENT_END_DASH=49]=`COMMENT_END_DASH`,e[e.COMMENT_END=50]=`COMMENT_END`,e[e.COMMENT_END_BANG=51]=`COMMENT_END_BANG`,e[e.DOCTYPE=52]=`DOCTYPE`,e[e.BEFORE_DOCTYPE_NAME=53]=`BEFORE_DOCTYPE_NAME`,e[e.DOCTYPE_NAME=54]=`DOCTYPE_NAME`,e[e.AFTER_DOCTYPE_NAME=55]=`AFTER_DOCTYPE_NAME`,e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]=`AFTER_DOCTYPE_PUBLIC_KEYWORD`,e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]=`BEFORE_DOCTYPE_PUBLIC_IDENTIFIER`,e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]=`DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED`,e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]=`DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED`,e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]=`AFTER_DOCTYPE_PUBLIC_IDENTIFIER`,e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]=`BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS`,e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]=`AFTER_DOCTYPE_SYSTEM_KEYWORD`,e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]=`BEFORE_DOCTYPE_SYSTEM_IDENTIFIER`,e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]=`DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED`,e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]=`DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED`,e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]=`AFTER_DOCTYPE_SYSTEM_IDENTIFIER`,e[e.BOGUS_DOCTYPE=67]=`BOGUS_DOCTYPE`,e[e.CDATA_SECTION=68]=`CDATA_SECTION`,e[e.CDATA_SECTION_BRACKET=69]=`CDATA_SECTION_BRACKET`,e[e.CDATA_SECTION_END=70]=`CDATA_SECTION_END`,e[e.CHARACTER_REFERENCE=71]=`CHARACTER_REFERENCE`,e[e.AMBIGUOUS_AMPERSAND=72]=`AMBIGUOUS_AMPERSAND`})(State||={});const TokenizerMode={DATA:State.DATA,RCDATA:State.RCDATA,RAWTEXT:State.RAWTEXT,SCRIPT_DATA:State.SCRIPT_DATA,PLAINTEXT:State.PLAINTEXT,CDATA_SECTION:State.CDATA_SECTION};function isAsciiDigit(e){return e>=CODE_POINTS.DIGIT_0&&e<=CODE_POINTS.DIGIT_9}function isAsciiUpper(e){return e>=CODE_POINTS.LATIN_CAPITAL_A&&e<=CODE_POINTS.LATIN_CAPITAL_Z}function isAsciiLower(e){return e>=CODE_POINTS.LATIN_SMALL_A&&e<=CODE_POINTS.LATIN_SMALL_Z}function isAsciiLetter(e){return isAsciiLower(e)||isAsciiUpper(e)}function isAsciiAlphaNumeric(e){return isAsciiLetter(e)||isAsciiDigit(e)}function toAsciiLower(e){return e+32}function isWhitespace$1(e){return e===CODE_POINTS.SPACE||e===CODE_POINTS.LINE_FEED||e===CODE_POINTS.TABULATION||e===CODE_POINTS.FORM_FEED}function isScriptDataDoubleEscapeSequenceEnd(e){return isWhitespace$1(e)||e===CODE_POINTS.SOLIDUS||e===CODE_POINTS.GREATER_THAN_SIGN}function getErrorForNumericCharacterReference(e){return e===CODE_POINTS.NULL?ERR.nullCharacterReference:e>1114111?ERR.characterReferenceOutsideUnicodeRange:isSurrogate(e)?ERR.surrogateCharacterReference:isUndefinedCodePoint(e)?ERR.noncharacterCharacterReference:isControlCodePoint(e)||e===CODE_POINTS.CARRIAGE_RETURN?ERR.controlCharacterReference:null}var Tokenizer=class{constructor(e,t){this.options=e,this.handler=t,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName=``,this.active=!1,this.state=State.DATA,this.returnState=State.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:``,value:``},this.preprocessor=new Preprocessor(t),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new EntityDecoder(htmlDecodeTree,(e,t)=>{this.preprocessor.pos=this.entityStartPos+t-1,this._flushCodePointConsumedAsCharacterReference(e)},t.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(ERR.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:e=>{this._err(ERR.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+e)},validateNumericCharacterReference:e=>{let t=getErrorForNumericCharacterReference(e);t&&this._err(t,1)}}:void 0)}_err(e,t=0){var S,w;(w=(S=this.handler).onParseError)==null||w.call(S,this.preprocessor.getError(e,t))}getCurrentLocation(e){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-e,startOffset:this.preprocessor.offset-e,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;let e=this._consume();this._ensureHibernation()||this._callState(e)}this.inLoop=!1}}pause(){this.paused=!0}resume(e){if(!this.paused)throw Error(`Parser was already resumed`);this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||e?.())}write(e,t,S){this.active=!0,this.preprocessor.write(e,t),this._runParsingLoop(),this.paused||S?.()}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e),this._runParsingLoop()}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0):!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(e){this.consumedAfterSnapshot+=e;for(let t=0;t<e;t++)this.preprocessor.advance()}_consumeSequenceIfMatch(e,t){return this.preprocessor.startsWith(e,t)?(this._advanceBy(e.length-1),!0):!1}_createStartTagToken(){this.currentToken={type:TokenType.START_TAG,tagName:``,tagID:TAG_ID.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(1)}}_createEndTagToken(){this.currentToken={type:TokenType.END_TAG,tagName:``,tagID:TAG_ID.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(2)}}_createCommentToken(e){this.currentToken={type:TokenType.COMMENT,data:``,location:this.getCurrentLocation(e)}}_createDoctypeToken(e){this.currentToken={type:TokenType.DOCTYPE,name:e,forceQuirks:!1,publicId:null,systemId:null,location:this.currentLocation}}_createCharacterToken(e,t){this.currentCharacterToken={type:e,chars:t,location:this.currentLocation}}_createAttr(e){this.currentAttr={name:e,value:``},this.currentLocation=this.getCurrentLocation(0)}_leaveAttrName(){var e,t;let S=this.currentToken;if(getTokenAttr(S,this.currentAttr.name)===null){if(S.attrs.push(this.currentAttr),S.location&&this.currentLocation){let e=(t=S.location).attrs??(t.attrs=Object.create(null));e[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue()}}else this._err(ERR.duplicateAttribute)}_leaveAttrValue(){this.currentLocation&&(this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset)}prepareToken(e){this._emitCurrentCharacterToken(e.location),this.currentToken=null,e.location&&(e.location.endLine=this.preprocessor.line,e.location.endCol=this.preprocessor.col+1,e.location.endOffset=this.preprocessor.offset+1),this.currentLocation=this.getCurrentLocation(-1)}emitCurrentTagToken(){let e=this.currentToken;this.prepareToken(e),e.tagID=getTagID(e.tagName),e.type===TokenType.START_TAG?(this.lastStartTagName=e.tagName,this.handler.onStartTag(e)):(e.attrs.length>0&&this._err(ERR.endTagWithAttributes),e.selfClosing&&this._err(ERR.endTagWithTrailingSolidus),this.handler.onEndTag(e)),this.preprocessor.dropParsedChunk()}emitCurrentComment(e){this.prepareToken(e),this.handler.onComment(e),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(e){this.prepareToken(e),this.handler.onDoctype(e),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(e){if(this.currentCharacterToken){switch(e&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=e.startLine,this.currentCharacterToken.location.endCol=e.startCol,this.currentCharacterToken.location.endOffset=e.startOffset),this.currentCharacterToken.type){case TokenType.CHARACTER:this.handler.onCharacter(this.currentCharacterToken);break;case TokenType.NULL_CHARACTER:this.handler.onNullCharacter(this.currentCharacterToken);break;case TokenType.WHITESPACE_CHARACTER:this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}this.currentCharacterToken=null}}_emitEOFToken(){let e=this.getCurrentLocation(0);e&&(e.endLine=e.startLine,e.endCol=e.startCol,e.endOffset=e.startOffset),this._emitCurrentCharacterToken(e),this.handler.onEof({type:TokenType.EOF,location:e}),this.active=!1}_appendCharToCurrentCharacterToken(e,t){if(this.currentCharacterToken)if(this.currentCharacterToken.type===e){this.currentCharacterToken.chars+=t;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(e,t)}_emitCodePoint(e){let t=isWhitespace$1(e)?TokenType.WHITESPACE_CHARACTER:e===CODE_POINTS.NULL?TokenType.NULL_CHARACTER:TokenType.CHARACTER;this._appendCharToCurrentCharacterToken(t,String.fromCodePoint(e))}_emitChars(e){this._appendCharToCurrentCharacterToken(TokenType.CHARACTER,e)}_startCharacterReference(){this.returnState=this.state,this.state=State.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?DecodingMode.Attribute:DecodingMode.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===State.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===State.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===State.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(e){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(e):this._emitCodePoint(e)}_callState(e){switch(this.state){case State.DATA:this._stateData(e);break;case State.RCDATA:this._stateRcdata(e);break;case State.RAWTEXT:this._stateRawtext(e);break;case State.SCRIPT_DATA:this._stateScriptData(e);break;case State.PLAINTEXT:this._statePlaintext(e);break;case State.TAG_OPEN:this._stateTagOpen(e);break;case State.END_TAG_OPEN:this._stateEndTagOpen(e);break;case State.TAG_NAME:this._stateTagName(e);break;case State.RCDATA_LESS_THAN_SIGN:this._stateRcdataLessThanSign(e);break;case State.RCDATA_END_TAG_OPEN:this._stateRcdataEndTagOpen(e);break;case State.RCDATA_END_TAG_NAME:this._stateRcdataEndTagName(e);break;case State.RAWTEXT_LESS_THAN_SIGN:this._stateRawtextLessThanSign(e);break;case State.RAWTEXT_END_TAG_OPEN:this._stateRawtextEndTagOpen(e);break;case State.RAWTEXT_END_TAG_NAME:this._stateRawtextEndTagName(e);break;case State.SCRIPT_DATA_LESS_THAN_SIGN:this._stateScriptDataLessThanSign(e);break;case State.SCRIPT_DATA_END_TAG_OPEN:this._stateScriptDataEndTagOpen(e);break;case State.SCRIPT_DATA_END_TAG_NAME:this._stateScriptDataEndTagName(e);break;case State.SCRIPT_DATA_ESCAPE_START:this._stateScriptDataEscapeStart(e);break;case State.SCRIPT_DATA_ESCAPE_START_DASH:this._stateScriptDataEscapeStartDash(e);break;case State.SCRIPT_DATA_ESCAPED:this._stateScriptDataEscaped(e);break;case State.SCRIPT_DATA_ESCAPED_DASH:this._stateScriptDataEscapedDash(e);break;case State.SCRIPT_DATA_ESCAPED_DASH_DASH:this._stateScriptDataEscapedDashDash(e);break;case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataEscapedLessThanSign(e);break;case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:this._stateScriptDataEscapedEndTagOpen(e);break;case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME:this._stateScriptDataEscapedEndTagName(e);break;case State.SCRIPT_DATA_DOUBLE_ESCAPE_START:this._stateScriptDataDoubleEscapeStart(e);break;case State.SCRIPT_DATA_DOUBLE_ESCAPED:this._stateScriptDataDoubleEscaped(e);break;case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:this._stateScriptDataDoubleEscapedDash(e);break;case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:this._stateScriptDataDoubleEscapedDashDash(e);break;case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataDoubleEscapedLessThanSign(e);break;case State.SCRIPT_DATA_DOUBLE_ESCAPE_END:this._stateScriptDataDoubleEscapeEnd(e);break;case State.BEFORE_ATTRIBUTE_NAME:this._stateBeforeAttributeName(e);break;case State.ATTRIBUTE_NAME:this._stateAttributeName(e);break;case State.AFTER_ATTRIBUTE_NAME:this._stateAfterAttributeName(e);break;case State.BEFORE_ATTRIBUTE_VALUE:this._stateBeforeAttributeValue(e);break;case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED:this._stateAttributeValueDoubleQuoted(e);break;case State.ATTRIBUTE_VALUE_SINGLE_QUOTED:this._stateAttributeValueSingleQuoted(e);break;case State.ATTRIBUTE_VALUE_UNQUOTED:this._stateAttributeValueUnquoted(e);break;case State.AFTER_ATTRIBUTE_VALUE_QUOTED:this._stateAfterAttributeValueQuoted(e);break;case State.SELF_CLOSING_START_TAG:this._stateSelfClosingStartTag(e);break;case State.BOGUS_COMMENT:this._stateBogusComment(e);break;case State.MARKUP_DECLARATION_OPEN:this._stateMarkupDeclarationOpen(e);break;case State.COMMENT_START:this._stateCommentStart(e);break;case State.COMMENT_START_DASH:this._stateCommentStartDash(e);break;case State.COMMENT:this._stateComment(e);break;case State.COMMENT_LESS_THAN_SIGN:this._stateCommentLessThanSign(e);break;case State.COMMENT_LESS_THAN_SIGN_BANG:this._stateCommentLessThanSignBang(e);break;case State.COMMENT_LESS_THAN_SIGN_BANG_DASH:this._stateCommentLessThanSignBangDash(e);break;case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:this._stateCommentLessThanSignBangDashDash(e);break;case State.COMMENT_END_DASH:this._stateCommentEndDash(e);break;case State.COMMENT_END:this._stateCommentEnd(e);break;case State.COMMENT_END_BANG:this._stateCommentEndBang(e);break;case State.DOCTYPE:this._stateDoctype(e);break;case State.BEFORE_DOCTYPE_NAME:this._stateBeforeDoctypeName(e);break;case State.DOCTYPE_NAME:this._stateDoctypeName(e);break;case State.AFTER_DOCTYPE_NAME:this._stateAfterDoctypeName(e);break;case State.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._stateAfterDoctypePublicKeyword(e);break;case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:this._stateBeforeDoctypePublicIdentifier(e);break;case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypePublicIdentifierDoubleQuoted(e);break;case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypePublicIdentifierSingleQuoted(e);break;case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:this._stateAfterDoctypePublicIdentifier(e);break;case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:this._stateBetweenDoctypePublicAndSystemIdentifiers(e);break;case State.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._stateAfterDoctypeSystemKeyword(e);break;case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:this._stateBeforeDoctypeSystemIdentifier(e);break;case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypeSystemIdentifierDoubleQuoted(e);break;case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypeSystemIdentifierSingleQuoted(e);break;case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:this._stateAfterDoctypeSystemIdentifier(e);break;case State.BOGUS_DOCTYPE:this._stateBogusDoctype(e);break;case State.CDATA_SECTION:this._stateCdataSection(e);break;case State.CDATA_SECTION_BRACKET:this._stateCdataSectionBracket(e);break;case State.CDATA_SECTION_END:this._stateCdataSectionEnd(e);break;case State.CHARACTER_REFERENCE:this._stateCharacterReference();break;case State.AMBIGUOUS_AMPERSAND:this._stateAmbiguousAmpersand(e);break;default:throw Error(`Unknown state`)}}_stateData(e){switch(e){case CODE_POINTS.LESS_THAN_SIGN:this.state=State.TAG_OPEN;break;case CODE_POINTS.AMPERSAND:this._startCharacterReference();break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this._emitCodePoint(e);break;case CODE_POINTS.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRcdata(e){switch(e){case CODE_POINTS.AMPERSAND:this._startCharacterReference();break;case CODE_POINTS.LESS_THAN_SIGN:this.state=State.RCDATA_LESS_THAN_SIGN;break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this._emitChars(`�`);break;case CODE_POINTS.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRawtext(e){switch(e){case CODE_POINTS.LESS_THAN_SIGN:this.state=State.RAWTEXT_LESS_THAN_SIGN;break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this._emitChars(`�`);break;case CODE_POINTS.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateScriptData(e){switch(e){case CODE_POINTS.LESS_THAN_SIGN:this.state=State.SCRIPT_DATA_LESS_THAN_SIGN;break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this._emitChars(`�`);break;case CODE_POINTS.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_statePlaintext(e){switch(e){case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this._emitChars(`�`);break;case CODE_POINTS.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateTagOpen(e){if(isAsciiLetter(e))this._createStartTagToken(),this.state=State.TAG_NAME,this._stateTagName(e);else switch(e){case CODE_POINTS.EXCLAMATION_MARK:this.state=State.MARKUP_DECLARATION_OPEN;break;case CODE_POINTS.SOLIDUS:this.state=State.END_TAG_OPEN;break;case CODE_POINTS.QUESTION_MARK:this._err(ERR.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=State.BOGUS_COMMENT,this._stateBogusComment(e);break;case CODE_POINTS.EOF:this._err(ERR.eofBeforeTagName),this._emitChars(`<`),this._emitEOFToken();break;default:this._err(ERR.invalidFirstCharacterOfTagName),this._emitChars(`<`),this.state=State.DATA,this._stateData(e)}}_stateEndTagOpen(e){if(isAsciiLetter(e))this._createEndTagToken(),this.state=State.TAG_NAME,this._stateTagName(e);else switch(e){case CODE_POINTS.GREATER_THAN_SIGN:this._err(ERR.missingEndTagName),this.state=State.DATA;break;case CODE_POINTS.EOF:this._err(ERR.eofBeforeTagName),this._emitChars(`</`),this._emitEOFToken();break;default:this._err(ERR.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=State.BOGUS_COMMENT,this._stateBogusComment(e)}}_stateTagName(e){let t=this.currentToken;switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:this.state=State.BEFORE_ATTRIBUTE_NAME;break;case CODE_POINTS.SOLIDUS:this.state=State.SELF_CLOSING_START_TAG;break;case CODE_POINTS.GREATER_THAN_SIGN:this.state=State.DATA,this.emitCurrentTagToken();break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),t.tagName+=`�`;break;case CODE_POINTS.EOF:this._err(ERR.eofInTag),this._emitEOFToken();break;default:t.tagName+=String.fromCodePoint(isAsciiUpper(e)?toAsciiLower(e):e)}}_stateRcdataLessThanSign(e){e===CODE_POINTS.SOLIDUS?this.state=State.RCDATA_END_TAG_OPEN:(this._emitChars(`<`),this.state=State.RCDATA,this._stateRcdata(e))}_stateRcdataEndTagOpen(e){isAsciiLetter(e)?(this.state=State.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(e)):(this._emitChars(`</`),this.state=State.RCDATA,this._stateRcdata(e))}handleSpecialEndTag(e){if(!this.preprocessor.startsWith(this.lastStartTagName,!1))return!this._ensureHibernation();this._createEndTagToken();let t=this.currentToken;switch(t.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=State.BEFORE_ATTRIBUTE_NAME,!1;case CODE_POINTS.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=State.SELF_CLOSING_START_TAG,!1;case CODE_POINTS.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=State.DATA,!1;default:return!this._ensureHibernation()}}_stateRcdataEndTagName(e){this.handleSpecialEndTag(e)&&(this._emitChars(`</`),this.state=State.RCDATA,this._stateRcdata(e))}_stateRawtextLessThanSign(e){e===CODE_POINTS.SOLIDUS?this.state=State.RAWTEXT_END_TAG_OPEN:(this._emitChars(`<`),this.state=State.RAWTEXT,this._stateRawtext(e))}_stateRawtextEndTagOpen(e){isAsciiLetter(e)?(this.state=State.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(e)):(this._emitChars(`</`),this.state=State.RAWTEXT,this._stateRawtext(e))}_stateRawtextEndTagName(e){this.handleSpecialEndTag(e)&&(this._emitChars(`</`),this.state=State.RAWTEXT,this._stateRawtext(e))}_stateScriptDataLessThanSign(e){switch(e){case CODE_POINTS.SOLIDUS:this.state=State.SCRIPT_DATA_END_TAG_OPEN;break;case CODE_POINTS.EXCLAMATION_MARK:this.state=State.SCRIPT_DATA_ESCAPE_START,this._emitChars(`<!`);break;default:this._emitChars(`<`),this.state=State.SCRIPT_DATA,this._stateScriptData(e)}}_stateScriptDataEndTagOpen(e){isAsciiLetter(e)?(this.state=State.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(e)):(this._emitChars(`</`),this.state=State.SCRIPT_DATA,this._stateScriptData(e))}_stateScriptDataEndTagName(e){this.handleSpecialEndTag(e)&&(this._emitChars(`</`),this.state=State.SCRIPT_DATA,this._stateScriptData(e))}_stateScriptDataEscapeStart(e){e===CODE_POINTS.HYPHEN_MINUS?(this.state=State.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars(`-`)):(this.state=State.SCRIPT_DATA,this._stateScriptData(e))}_stateScriptDataEscapeStartDash(e){e===CODE_POINTS.HYPHEN_MINUS?(this.state=State.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars(`-`)):(this.state=State.SCRIPT_DATA,this._stateScriptData(e))}_stateScriptDataEscaped(e){switch(e){case CODE_POINTS.HYPHEN_MINUS:this.state=State.SCRIPT_DATA_ESCAPED_DASH,this._emitChars(`-`);break;case CODE_POINTS.LESS_THAN_SIGN:this.state=State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this._emitChars(`�`);break;case CODE_POINTS.EOF:this._err(ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateScriptDataEscapedDash(e){switch(e){case CODE_POINTS.HYPHEN_MINUS:this.state=State.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars(`-`);break;case CODE_POINTS.LESS_THAN_SIGN:this.state=State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this.state=State.SCRIPT_DATA_ESCAPED,this._emitChars(`�`);break;case CODE_POINTS.EOF:this._err(ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=State.SCRIPT_DATA_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataEscapedDashDash(e){switch(e){case CODE_POINTS.HYPHEN_MINUS:this._emitChars(`-`);break;case CODE_POINTS.LESS_THAN_SIGN:this.state=State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break;case CODE_POINTS.GREATER_THAN_SIGN:this.state=State.SCRIPT_DATA,this._emitChars(`>`);break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this.state=State.SCRIPT_DATA_ESCAPED,this._emitChars(`�`);break;case CODE_POINTS.EOF:this._err(ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=State.SCRIPT_DATA_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataEscapedLessThanSign(e){e===CODE_POINTS.SOLIDUS?this.state=State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:isAsciiLetter(e)?(this._emitChars(`<`),this.state=State.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(e)):(this._emitChars(`<`),this.state=State.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataEscapedEndTagOpen(e){isAsciiLetter(e)?(this.state=State.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(e)):(this._emitChars(`</`),this.state=State.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataEscapedEndTagName(e){this.handleSpecialEndTag(e)&&(this._emitChars(`</`),this.state=State.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataDoubleEscapeStart(e){if(this.preprocessor.startsWith(SEQUENCES.SCRIPT,!1)&&isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek(SEQUENCES.SCRIPT.length))){this._emitCodePoint(e);for(let e=0;e<SEQUENCES.SCRIPT.length;e++)this._emitCodePoint(this._consume());this.state=State.SCRIPT_DATA_DOUBLE_ESCAPED}else this._ensureHibernation()||(this.state=State.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataDoubleEscaped(e){switch(e){case CODE_POINTS.HYPHEN_MINUS:this.state=State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars(`-`);break;case CODE_POINTS.LESS_THAN_SIGN:this.state=State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars(`<`);break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this._emitChars(`�`);break;case CODE_POINTS.EOF:this._err(ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedDash(e){switch(e){case CODE_POINTS.HYPHEN_MINUS:this.state=State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars(`-`);break;case CODE_POINTS.LESS_THAN_SIGN:this.state=State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars(`<`);break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this.state=State.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(`�`);break;case CODE_POINTS.EOF:this._err(ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=State.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedDashDash(e){switch(e){case CODE_POINTS.HYPHEN_MINUS:this._emitChars(`-`);break;case CODE_POINTS.LESS_THAN_SIGN:this.state=State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars(`<`);break;case CODE_POINTS.GREATER_THAN_SIGN:this.state=State.SCRIPT_DATA,this._emitChars(`>`);break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this.state=State.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(`�`);break;case CODE_POINTS.EOF:this._err(ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=State.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedLessThanSign(e){e===CODE_POINTS.SOLIDUS?(this.state=State.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars(`/`)):(this.state=State.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(e))}_stateScriptDataDoubleEscapeEnd(e){if(this.preprocessor.startsWith(SEQUENCES.SCRIPT,!1)&&isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek(SEQUENCES.SCRIPT.length))){this._emitCodePoint(e);for(let e=0;e<SEQUENCES.SCRIPT.length;e++)this._emitCodePoint(this._consume());this.state=State.SCRIPT_DATA_ESCAPED}else this._ensureHibernation()||(this.state=State.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(e))}_stateBeforeAttributeName(e){switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:break;case CODE_POINTS.SOLIDUS:case CODE_POINTS.GREATER_THAN_SIGN:case CODE_POINTS.EOF:this.state=State.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(e);break;case CODE_POINTS.EQUALS_SIGN:this._err(ERR.unexpectedEqualsSignBeforeAttributeName),this._createAttr(`=`),this.state=State.ATTRIBUTE_NAME;break;default:this._createAttr(``),this.state=State.ATTRIBUTE_NAME,this._stateAttributeName(e)}}_stateAttributeName(e){switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:case CODE_POINTS.SOLIDUS:case CODE_POINTS.GREATER_THAN_SIGN:case CODE_POINTS.EOF:this._leaveAttrName(),this.state=State.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(e);break;case CODE_POINTS.EQUALS_SIGN:this._leaveAttrName(),this.state=State.BEFORE_ATTRIBUTE_VALUE;break;case CODE_POINTS.QUOTATION_MARK:case CODE_POINTS.APOSTROPHE:case CODE_POINTS.LESS_THAN_SIGN:this._err(ERR.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(e);break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this.currentAttr.name+=`�`;break;default:this.currentAttr.name+=String.fromCodePoint(isAsciiUpper(e)?toAsciiLower(e):e)}}_stateAfterAttributeName(e){switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:break;case CODE_POINTS.SOLIDUS:this.state=State.SELF_CLOSING_START_TAG;break;case CODE_POINTS.EQUALS_SIGN:this.state=State.BEFORE_ATTRIBUTE_VALUE;break;case CODE_POINTS.GREATER_THAN_SIGN:this.state=State.DATA,this.emitCurrentTagToken();break;case CODE_POINTS.EOF:this._err(ERR.eofInTag),this._emitEOFToken();break;default:this._createAttr(``),this.state=State.ATTRIBUTE_NAME,this._stateAttributeName(e)}}_stateBeforeAttributeValue(e){switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:break;case CODE_POINTS.QUOTATION_MARK:this.state=State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break;case CODE_POINTS.APOSTROPHE:this.state=State.ATTRIBUTE_VALUE_SINGLE_QUOTED;break;case CODE_POINTS.GREATER_THAN_SIGN:this._err(ERR.missingAttributeValue),this.state=State.DATA,this.emitCurrentTagToken();break;default:this.state=State.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(e)}}_stateAttributeValueDoubleQuoted(e){switch(e){case CODE_POINTS.QUOTATION_MARK:this.state=State.AFTER_ATTRIBUTE_VALUE_QUOTED;break;case CODE_POINTS.AMPERSAND:this._startCharacterReference();break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this.currentAttr.value+=`�`;break;case CODE_POINTS.EOF:this._err(ERR.eofInTag),this._emitEOFToken();break;default:this.currentAttr.value+=String.fromCodePoint(e)}}_stateAttributeValueSingleQuoted(e){switch(e){case CODE_POINTS.APOSTROPHE:this.state=State.AFTER_ATTRIBUTE_VALUE_QUOTED;break;case CODE_POINTS.AMPERSAND:this._startCharacterReference();break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this.currentAttr.value+=`�`;break;case CODE_POINTS.EOF:this._err(ERR.eofInTag),this._emitEOFToken();break;default:this.currentAttr.value+=String.fromCodePoint(e)}}_stateAttributeValueUnquoted(e){switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:this._leaveAttrValue(),this.state=State.BEFORE_ATTRIBUTE_NAME;break;case CODE_POINTS.AMPERSAND:this._startCharacterReference();break;case CODE_POINTS.GREATER_THAN_SIGN:this._leaveAttrValue(),this.state=State.DATA,this.emitCurrentTagToken();break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this.currentAttr.value+=`�`;break;case CODE_POINTS.QUOTATION_MARK:case CODE_POINTS.APOSTROPHE:case CODE_POINTS.LESS_THAN_SIGN:case CODE_POINTS.EQUALS_SIGN:case CODE_POINTS.GRAVE_ACCENT:this._err(ERR.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(e);break;case CODE_POINTS.EOF:this._err(ERR.eofInTag),this._emitEOFToken();break;default:this.currentAttr.value+=String.fromCodePoint(e)}}_stateAfterAttributeValueQuoted(e){switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:this._leaveAttrValue(),this.state=State.BEFORE_ATTRIBUTE_NAME;break;case CODE_POINTS.SOLIDUS:this._leaveAttrValue(),this.state=State.SELF_CLOSING_START_TAG;break;case CODE_POINTS.GREATER_THAN_SIGN:this._leaveAttrValue(),this.state=State.DATA,this.emitCurrentTagToken();break;case CODE_POINTS.EOF:this._err(ERR.eofInTag),this._emitEOFToken();break;default:this._err(ERR.missingWhitespaceBetweenAttributes),this.state=State.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(e)}}_stateSelfClosingStartTag(e){switch(e){case CODE_POINTS.GREATER_THAN_SIGN:{let e=this.currentToken;e.selfClosing=!0,this.state=State.DATA,this.emitCurrentTagToken();break}case CODE_POINTS.EOF:this._err(ERR.eofInTag),this._emitEOFToken();break;default:this._err(ERR.unexpectedSolidusInTag),this.state=State.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(e)}}_stateBogusComment(e){let t=this.currentToken;switch(e){case CODE_POINTS.GREATER_THAN_SIGN:this.state=State.DATA,this.emitCurrentComment(t);break;case CODE_POINTS.EOF:this.emitCurrentComment(t),this._emitEOFToken();break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),t.data+=`�`;break;default:t.data+=String.fromCodePoint(e)}}_stateMarkupDeclarationOpen(e){this._consumeSequenceIfMatch(SEQUENCES.DASH_DASH,!0)?(this._createCommentToken(SEQUENCES.DASH_DASH.length+1),this.state=State.COMMENT_START):this._consumeSequenceIfMatch(SEQUENCES.DOCTYPE,!1)?(this.currentLocation=this.getCurrentLocation(SEQUENCES.DOCTYPE.length+1),this.state=State.DOCTYPE):this._consumeSequenceIfMatch(SEQUENCES.CDATA_START,!0)?this.inForeignNode?this.state=State.CDATA_SECTION:(this._err(ERR.cdataInHtmlContent),this._createCommentToken(SEQUENCES.CDATA_START.length+1),this.currentToken.data=`[CDATA[`,this.state=State.BOGUS_COMMENT):this._ensureHibernation()||(this._err(ERR.incorrectlyOpenedComment),this._createCommentToken(2),this.state=State.BOGUS_COMMENT,this._stateBogusComment(e))}_stateCommentStart(e){switch(e){case CODE_POINTS.HYPHEN_MINUS:this.state=State.COMMENT_START_DASH;break;case CODE_POINTS.GREATER_THAN_SIGN:{this._err(ERR.abruptClosingOfEmptyComment),this.state=State.DATA;let e=this.currentToken;this.emitCurrentComment(e);break}default:this.state=State.COMMENT,this._stateComment(e)}}_stateCommentStartDash(e){let t=this.currentToken;switch(e){case CODE_POINTS.HYPHEN_MINUS:this.state=State.COMMENT_END;break;case CODE_POINTS.GREATER_THAN_SIGN:this._err(ERR.abruptClosingOfEmptyComment),this.state=State.DATA,this.emitCurrentComment(t);break;case CODE_POINTS.EOF:this._err(ERR.eofInComment),this.emitCurrentComment(t),this._emitEOFToken();break;default:t.data+=`-`,this.state=State.COMMENT,this._stateComment(e)}}_stateComment(e){let t=this.currentToken;switch(e){case CODE_POINTS.HYPHEN_MINUS:this.state=State.COMMENT_END_DASH;break;case CODE_POINTS.LESS_THAN_SIGN:t.data+=`<`,this.state=State.COMMENT_LESS_THAN_SIGN;break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),t.data+=`�`;break;case CODE_POINTS.EOF:this._err(ERR.eofInComment),this.emitCurrentComment(t),this._emitEOFToken();break;default:t.data+=String.fromCodePoint(e)}}_stateCommentLessThanSign(e){let t=this.currentToken;switch(e){case CODE_POINTS.EXCLAMATION_MARK:t.data+=`!`,this.state=State.COMMENT_LESS_THAN_SIGN_BANG;break;case CODE_POINTS.LESS_THAN_SIGN:t.data+=`<`;break;default:this.state=State.COMMENT,this._stateComment(e)}}_stateCommentLessThanSignBang(e){e===CODE_POINTS.HYPHEN_MINUS?this.state=State.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=State.COMMENT,this._stateComment(e))}_stateCommentLessThanSignBangDash(e){e===CODE_POINTS.HYPHEN_MINUS?this.state=State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=State.COMMENT_END_DASH,this._stateCommentEndDash(e))}_stateCommentLessThanSignBangDashDash(e){e!==CODE_POINTS.GREATER_THAN_SIGN&&e!==CODE_POINTS.EOF&&this._err(ERR.nestedComment),this.state=State.COMMENT_END,this._stateCommentEnd(e)}_stateCommentEndDash(e){let t=this.currentToken;switch(e){case CODE_POINTS.HYPHEN_MINUS:this.state=State.COMMENT_END;break;case CODE_POINTS.EOF:this._err(ERR.eofInComment),this.emitCurrentComment(t),this._emitEOFToken();break;default:t.data+=`-`,this.state=State.COMMENT,this._stateComment(e)}}_stateCommentEnd(e){let t=this.currentToken;switch(e){case CODE_POINTS.GREATER_THAN_SIGN:this.state=State.DATA,this.emitCurrentComment(t);break;case CODE_POINTS.EXCLAMATION_MARK:this.state=State.COMMENT_END_BANG;break;case CODE_POINTS.HYPHEN_MINUS:t.data+=`-`;break;case CODE_POINTS.EOF:this._err(ERR.eofInComment),this.emitCurrentComment(t),this._emitEOFToken();break;default:t.data+=`--`,this.state=State.COMMENT,this._stateComment(e)}}_stateCommentEndBang(e){let t=this.currentToken;switch(e){case CODE_POINTS.HYPHEN_MINUS:t.data+=`--!`,this.state=State.COMMENT_END_DASH;break;case CODE_POINTS.GREATER_THAN_SIGN:this._err(ERR.incorrectlyClosedComment),this.state=State.DATA,this.emitCurrentComment(t);break;case CODE_POINTS.EOF:this._err(ERR.eofInComment),this.emitCurrentComment(t),this._emitEOFToken();break;default:t.data+=`--!`,this.state=State.COMMENT,this._stateComment(e)}}_stateDoctype(e){switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:this.state=State.BEFORE_DOCTYPE_NAME;break;case CODE_POINTS.GREATER_THAN_SIGN:this.state=State.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(e);break;case CODE_POINTS.EOF:{this._err(ERR.eofInDoctype),this._createDoctypeToken(null);let e=this.currentToken;e.forceQuirks=!0,this.emitCurrentDoctype(e),this._emitEOFToken();break}default:this._err(ERR.missingWhitespaceBeforeDoctypeName),this.state=State.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(e)}}_stateBeforeDoctypeName(e){if(isAsciiUpper(e))this._createDoctypeToken(String.fromCharCode(toAsciiLower(e))),this.state=State.DOCTYPE_NAME;else switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),this._createDoctypeToken(`�`),this.state=State.DOCTYPE_NAME;break;case CODE_POINTS.GREATER_THAN_SIGN:{this._err(ERR.missingDoctypeName),this._createDoctypeToken(null);let e=this.currentToken;e.forceQuirks=!0,this.emitCurrentDoctype(e),this.state=State.DATA;break}case CODE_POINTS.EOF:{this._err(ERR.eofInDoctype),this._createDoctypeToken(null);let e=this.currentToken;e.forceQuirks=!0,this.emitCurrentDoctype(e),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(e)),this.state=State.DOCTYPE_NAME}}_stateDoctypeName(e){let t=this.currentToken;switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:this.state=State.AFTER_DOCTYPE_NAME;break;case CODE_POINTS.GREATER_THAN_SIGN:this.state=State.DATA,this.emitCurrentDoctype(t);break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),t.name+=`�`;break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:t.name+=String.fromCodePoint(isAsciiUpper(e)?toAsciiLower(e):e)}}_stateAfterDoctypeName(e){let t=this.currentToken;switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:break;case CODE_POINTS.GREATER_THAN_SIGN:this.state=State.DATA,this.emitCurrentDoctype(t);break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._consumeSequenceIfMatch(SEQUENCES.PUBLIC,!1)?this.state=State.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(SEQUENCES.SYSTEM,!1)?this.state=State.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(ERR.invalidCharacterSequenceAfterDoctypeName),t.forceQuirks=!0,this.state=State.BOGUS_DOCTYPE,this._stateBogusDoctype(e))}}_stateAfterDoctypePublicKeyword(e){let t=this.currentToken;switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:this.state=State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break;case CODE_POINTS.QUOTATION_MARK:this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword),t.publicId=``,this.state=State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break;case CODE_POINTS.APOSTROPHE:this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword),t.publicId=``,this.state=State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break;case CODE_POINTS.GREATER_THAN_SIGN:this._err(ERR.missingDoctypePublicIdentifier),t.forceQuirks=!0,this.state=State.DATA,this.emitCurrentDoctype(t);break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier),t.forceQuirks=!0,this.state=State.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateBeforeDoctypePublicIdentifier(e){let t=this.currentToken;switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:break;case CODE_POINTS.QUOTATION_MARK:t.publicId=``,this.state=State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break;case CODE_POINTS.APOSTROPHE:t.publicId=``,this.state=State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break;case CODE_POINTS.GREATER_THAN_SIGN:this._err(ERR.missingDoctypePublicIdentifier),t.forceQuirks=!0,this.state=State.DATA,this.emitCurrentDoctype(t);break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier),t.forceQuirks=!0,this.state=State.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateDoctypePublicIdentifierDoubleQuoted(e){let t=this.currentToken;switch(e){case CODE_POINTS.QUOTATION_MARK:this.state=State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),t.publicId+=`�`;break;case CODE_POINTS.GREATER_THAN_SIGN:this._err(ERR.abruptDoctypePublicIdentifier),t.forceQuirks=!0,this.emitCurrentDoctype(t),this.state=State.DATA;break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:t.publicId+=String.fromCodePoint(e)}}_stateDoctypePublicIdentifierSingleQuoted(e){let t=this.currentToken;switch(e){case CODE_POINTS.APOSTROPHE:this.state=State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),t.publicId+=`�`;break;case CODE_POINTS.GREATER_THAN_SIGN:this._err(ERR.abruptDoctypePublicIdentifier),t.forceQuirks=!0,this.emitCurrentDoctype(t),this.state=State.DATA;break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:t.publicId+=String.fromCodePoint(e)}}_stateAfterDoctypePublicIdentifier(e){let t=this.currentToken;switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:this.state=State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break;case CODE_POINTS.GREATER_THAN_SIGN:this.state=State.DATA,this.emitCurrentDoctype(t);break;case CODE_POINTS.QUOTATION_MARK:this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),t.systemId=``,this.state=State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break;case CODE_POINTS.APOSTROPHE:this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),t.systemId=``,this.state=State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier),t.forceQuirks=!0,this.state=State.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateBetweenDoctypePublicAndSystemIdentifiers(e){let t=this.currentToken;switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:break;case CODE_POINTS.GREATER_THAN_SIGN:this.emitCurrentDoctype(t),this.state=State.DATA;break;case CODE_POINTS.QUOTATION_MARK:t.systemId=``,this.state=State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break;case CODE_POINTS.APOSTROPHE:t.systemId=``,this.state=State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier),t.forceQuirks=!0,this.state=State.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateAfterDoctypeSystemKeyword(e){let t=this.currentToken;switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:this.state=State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break;case CODE_POINTS.QUOTATION_MARK:this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword),t.systemId=``,this.state=State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break;case CODE_POINTS.APOSTROPHE:this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword),t.systemId=``,this.state=State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break;case CODE_POINTS.GREATER_THAN_SIGN:this._err(ERR.missingDoctypeSystemIdentifier),t.forceQuirks=!0,this.state=State.DATA,this.emitCurrentDoctype(t);break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier),t.forceQuirks=!0,this.state=State.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateBeforeDoctypeSystemIdentifier(e){let t=this.currentToken;switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:break;case CODE_POINTS.QUOTATION_MARK:t.systemId=``,this.state=State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break;case CODE_POINTS.APOSTROPHE:t.systemId=``,this.state=State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break;case CODE_POINTS.GREATER_THAN_SIGN:this._err(ERR.missingDoctypeSystemIdentifier),t.forceQuirks=!0,this.state=State.DATA,this.emitCurrentDoctype(t);break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier),t.forceQuirks=!0,this.state=State.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateDoctypeSystemIdentifierDoubleQuoted(e){let t=this.currentToken;switch(e){case CODE_POINTS.QUOTATION_MARK:this.state=State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),t.systemId+=`�`;break;case CODE_POINTS.GREATER_THAN_SIGN:this._err(ERR.abruptDoctypeSystemIdentifier),t.forceQuirks=!0,this.emitCurrentDoctype(t),this.state=State.DATA;break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:t.systemId+=String.fromCodePoint(e)}}_stateDoctypeSystemIdentifierSingleQuoted(e){let t=this.currentToken;switch(e){case CODE_POINTS.APOSTROPHE:this.state=State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter),t.systemId+=`�`;break;case CODE_POINTS.GREATER_THAN_SIGN:this._err(ERR.abruptDoctypeSystemIdentifier),t.forceQuirks=!0,this.emitCurrentDoctype(t),this.state=State.DATA;break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:t.systemId+=String.fromCodePoint(e)}}_stateAfterDoctypeSystemIdentifier(e){let t=this.currentToken;switch(e){case CODE_POINTS.SPACE:case CODE_POINTS.LINE_FEED:case CODE_POINTS.TABULATION:case CODE_POINTS.FORM_FEED:break;case CODE_POINTS.GREATER_THAN_SIGN:this.emitCurrentDoctype(t),this.state=State.DATA;break;case CODE_POINTS.EOF:this._err(ERR.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=State.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateBogusDoctype(e){let t=this.currentToken;switch(e){case CODE_POINTS.GREATER_THAN_SIGN:this.emitCurrentDoctype(t),this.state=State.DATA;break;case CODE_POINTS.NULL:this._err(ERR.unexpectedNullCharacter);break;case CODE_POINTS.EOF:this.emitCurrentDoctype(t),this._emitEOFToken();break;default:}}_stateCdataSection(e){switch(e){case CODE_POINTS.RIGHT_SQUARE_BRACKET:this.state=State.CDATA_SECTION_BRACKET;break;case CODE_POINTS.EOF:this._err(ERR.eofInCdata),this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateCdataSectionBracket(e){e===CODE_POINTS.RIGHT_SQUARE_BRACKET?this.state=State.CDATA_SECTION_END:(this._emitChars(`]`),this.state=State.CDATA_SECTION,this._stateCdataSection(e))}_stateCdataSectionEnd(e){switch(e){case CODE_POINTS.GREATER_THAN_SIGN:this.state=State.DATA;break;case CODE_POINTS.RIGHT_SQUARE_BRACKET:this._emitChars(`]`);break;default:this._emitChars(`]]`),this.state=State.CDATA_SECTION,this._stateCdataSection(e)}}_stateCharacterReference(){let e=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(e<0)if(this.preprocessor.lastChunkWritten)e=this.entityDecoder.end();else{this.active=!1,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=!0;return}e===0?(this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&isAsciiAlphaNumeric(this.preprocessor.peek(1))?State.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState}_stateAmbiguousAmpersand(e){isAsciiAlphaNumeric(e)?this._flushCodePointConsumedAsCharacterReference(e):(e===CODE_POINTS.SEMICOLON&&this._err(ERR.unknownNamedCharacterReference),this.state=this.returnState,this._callState(e))}};const IMPLICIT_END_TAG_REQUIRED=new Set([TAG_ID.DD,TAG_ID.DT,TAG_ID.LI,TAG_ID.OPTGROUP,TAG_ID.OPTION,TAG_ID.P,TAG_ID.RB,TAG_ID.RP,TAG_ID.RT,TAG_ID.RTC]),IMPLICIT_END_TAG_REQUIRED_THOROUGHLY=new Set([...IMPLICIT_END_TAG_REQUIRED,TAG_ID.CAPTION,TAG_ID.COLGROUP,TAG_ID.TBODY,TAG_ID.TD,TAG_ID.TFOOT,TAG_ID.TH,TAG_ID.THEAD,TAG_ID.TR]),SCOPING_ELEMENTS_HTML=new Set([TAG_ID.APPLET,TAG_ID.CAPTION,TAG_ID.HTML,TAG_ID.MARQUEE,TAG_ID.OBJECT,TAG_ID.TABLE,TAG_ID.TD,TAG_ID.TEMPLATE,TAG_ID.TH]),SCOPING_ELEMENTS_HTML_LIST=new Set([...SCOPING_ELEMENTS_HTML,TAG_ID.OL,TAG_ID.UL]),SCOPING_ELEMENTS_HTML_BUTTON=new Set([...SCOPING_ELEMENTS_HTML,TAG_ID.BUTTON]),SCOPING_ELEMENTS_MATHML=new Set([TAG_ID.ANNOTATION_XML,TAG_ID.MI,TAG_ID.MN,TAG_ID.MO,TAG_ID.MS,TAG_ID.MTEXT]),SCOPING_ELEMENTS_SVG=new Set([TAG_ID.DESC,TAG_ID.FOREIGN_OBJECT,TAG_ID.TITLE]),TABLE_ROW_CONTEXT=new Set([TAG_ID.TR,TAG_ID.TEMPLATE,TAG_ID.HTML]),TABLE_BODY_CONTEXT=new Set([TAG_ID.TBODY,TAG_ID.TFOOT,TAG_ID.THEAD,TAG_ID.TEMPLATE,TAG_ID.HTML]),TABLE_CONTEXT=new Set([TAG_ID.TABLE,TAG_ID.TEMPLATE,TAG_ID.HTML]),TABLE_CELLS=new Set([TAG_ID.TD,TAG_ID.TH]);var OpenElementStack=class{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(e,t,S){this.treeAdapter=t,this.handler=S,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=TAG_ID.UNKNOWN,this.current=e}_indexOf(e){return this.items.lastIndexOf(e,this.stackTop)}_isInTemplate(){return this.currentTagId===TAG_ID.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===NS.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(e,t){this.stackTop++,this.items[this.stackTop]=e,this.current=e,this.tagIDs[this.stackTop]=t,this.currentTagId=t,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(e,t,!0)}pop(){let e=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!0)}replace(e,t){let S=this._indexOf(e);this.items[S]=t,S===this.stackTop&&(this.current=t)}insertAfter(e,t,S){let w=this._indexOf(e)+1;this.items.splice(w,0,t),this.tagIDs.splice(w,0,S),this.stackTop++,w===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,w===this.stackTop)}popUntilTagNamePopped(e){let t=this.stackTop+1;do t=this.tagIDs.lastIndexOf(e,t-1);while(t>0&&this.treeAdapter.getNamespaceURI(this.items[t])!==NS.HTML);this.shortenToLength(Math.max(t,0))}shortenToLength(e){for(;this.stackTop>=e;){let t=this.current;this.tmplCount>0&&this._isInTemplate()&&--this.tmplCount,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,this.stackTop<e)}}popUntilElementPopped(e){let t=this._indexOf(e);this.shortenToLength(Math.max(t,0))}popUntilPopped(e,t){let S=this._indexOfTagNames(e,t);this.shortenToLength(Math.max(S,0))}popUntilNumberedHeaderPopped(){this.popUntilPopped(NUMBERED_HEADERS,NS.HTML)}popUntilTableCellPopped(){this.popUntilPopped(TABLE_CELLS,NS.HTML)}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1)}_indexOfTagNames(e,t){for(let S=this.stackTop;S>=0;S--)if(e.has(this.tagIDs[S])&&this.treeAdapter.getNamespaceURI(this.items[S])===t)return S;return-1}clearBackTo(e,t){let S=this._indexOfTagNames(e,t);this.shortenToLength(S+1)}clearBackToTableContext(){this.clearBackTo(TABLE_CONTEXT,NS.HTML)}clearBackToTableBodyContext(){this.clearBackTo(TABLE_BODY_CONTEXT,NS.HTML)}clearBackToTableRowContext(){this.clearBackTo(TABLE_ROW_CONTEXT,NS.HTML)}remove(e){let t=this._indexOf(e);t>=0&&(t===this.stackTop?this.pop():(this.items.splice(t,1),this.tagIDs.splice(t,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===TAG_ID.BODY?this.items[1]:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){let t=this._indexOf(e)-1;return t>=0?this.items[t]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===TAG_ID.HTML}hasInDynamicScope(e,t){for(let S=this.stackTop;S>=0;S--){let w=this.tagIDs[S];switch(this.treeAdapter.getNamespaceURI(this.items[S])){case NS.HTML:if(w===e)return!0;if(t.has(w))return!1;break;case NS.SVG:if(SCOPING_ELEMENTS_SVG.has(w))return!1;break;case NS.MATHML:if(SCOPING_ELEMENTS_MATHML.has(w))return!1;break}}return!0}hasInScope(e){return this.hasInDynamicScope(e,SCOPING_ELEMENTS_HTML)}hasInListItemScope(e){return this.hasInDynamicScope(e,SCOPING_ELEMENTS_HTML_LIST)}hasInButtonScope(e){return this.hasInDynamicScope(e,SCOPING_ELEMENTS_HTML_BUTTON)}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){let t=this.tagIDs[e];switch(this.treeAdapter.getNamespaceURI(this.items[e])){case NS.HTML:if(NUMBERED_HEADERS.has(t))return!0;if(SCOPING_ELEMENTS_HTML.has(t))return!1;break;case NS.SVG:if(SCOPING_ELEMENTS_SVG.has(t))return!1;break;case NS.MATHML:if(SCOPING_ELEMENTS_MATHML.has(t))return!1;break}}return!0}hasInTableScope(e){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===NS.HTML)switch(this.tagIDs[t]){case e:return!0;case TAG_ID.TABLE:case TAG_ID.HTML:return!1}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--)if(this.treeAdapter.getNamespaceURI(this.items[e])===NS.HTML)switch(this.tagIDs[e]){case TAG_ID.TBODY:case TAG_ID.THEAD:case TAG_ID.TFOOT:return!0;case TAG_ID.TABLE:case TAG_ID.HTML:return!1}return!0}hasInSelectScope(e){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===NS.HTML)switch(this.tagIDs[t]){case e:return!0;case TAG_ID.OPTION:case TAG_ID.OPTGROUP:break;default:return!1}return!0}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;this.currentTagId!==void 0&&this.currentTagId!==e&&IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId);)this.pop()}};const NOAH_ARK_CAPACITY=3;var EntryType;(function(e){e[e.Marker=0]=`Marker`,e[e.Element=1]=`Element`})(EntryType||={});const MARKER={type:EntryType.Marker};var FormattingElementList=class{constructor(e){this.treeAdapter=e,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(e,t){let S=[],w=t.length,E=this.treeAdapter.getTagName(e),D=this.treeAdapter.getNamespaceURI(e);for(let e=0;e<this.entries.length;e++){let t=this.entries[e];if(t.type===EntryType.Marker)break;let{element:O}=t;if(this.treeAdapter.getTagName(O)===E&&this.treeAdapter.getNamespaceURI(O)===D){let t=this.treeAdapter.getAttrList(O);t.length===w&&S.push({idx:e,attrs:t})}}return S}_ensureNoahArkCondition(e){if(this.entries.length<NOAH_ARK_CAPACITY)return;let t=this.treeAdapter.getAttrList(e),S=this._getNoahArkConditionCandidates(e,t);if(S.length<NOAH_ARK_CAPACITY)return;let w=new Map(t.map(e=>[e.name,e.value])),E=0;for(let e=0;e<S.length;e++){let t=S[e];t.attrs.every(e=>w.get(e.name)===e.value)&&(E+=1,E>=NOAH_ARK_CAPACITY&&this.entries.splice(t.idx,1))}}insertMarker(){this.entries.unshift(MARKER)}pushElement(e,t){this._ensureNoahArkCondition(e),this.entries.unshift({type:EntryType.Element,element:e,token:t})}insertElementAfterBookmark(e,t){let S=this.entries.indexOf(this.bookmark);this.entries.splice(S,0,{type:EntryType.Element,element:e,token:t})}removeEntry(e){let t=this.entries.indexOf(e);t!==-1&&this.entries.splice(t,1)}clearToLastMarker(){let e=this.entries.indexOf(MARKER);e===-1?this.entries.length=0:this.entries.splice(0,e+1)}getElementEntryInScopeWithTagName(e){let t=this.entries.find(t=>t.type===EntryType.Marker||this.treeAdapter.getTagName(t.element)===e);return t&&t.type===EntryType.Element?t:null}getElementEntry(e){return this.entries.find(t=>t.type===EntryType.Element&&t.element===e)}};const defaultTreeAdapter={createDocument(){return{nodeName:`#document`,mode:DOCUMENT_MODE.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:`#document-fragment`,childNodes:[]}},createElement(e,t,S){return{nodeName:e,tagName:e,attrs:S,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return{nodeName:`#comment`,data:e,parentNode:null}},createTextNode(e){return{nodeName:`#text`,value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,S){let w=e.childNodes.indexOf(S);e.childNodes.splice(w,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent(e){return e.content},setDocumentType(e,t,S,w){let E=e.childNodes.find(e=>e.nodeName===`#documentType`);if(E)E.name=t,E.publicId=S,E.systemId=w;else{let E={nodeName:`#documentType`,name:t,publicId:S,systemId:w,parentNode:null};defaultTreeAdapter.appendChild(e,E)}},setDocumentMode(e,t){e.mode=t},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){let t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){let S=e.childNodes[e.childNodes.length-1];if(defaultTreeAdapter.isTextNode(S)){S.value+=t;return}}defaultTreeAdapter.appendChild(e,defaultTreeAdapter.createTextNode(t))},insertTextBefore(e,t,S){let w=e.childNodes[e.childNodes.indexOf(S)-1];w&&defaultTreeAdapter.isTextNode(w)?w.value+=t:defaultTreeAdapter.insertBefore(e,defaultTreeAdapter.createTextNode(t),S)},adoptAttributes(e,t){let S=new Set(e.attrs.map(e=>e.name));for(let w=0;w<t.length;w++)S.has(t[w].name)||e.attrs.push(t[w])},getFirstChild(e){return e.childNodes[0]},getChildNodes(e){return e.childNodes},getParentNode(e){return e.parentNode},getAttrList(e){return e.attrs},getTagName(e){return e.tagName},getNamespaceURI(e){return e.namespaceURI},getTextNodeContent(e){return e.value},getCommentNodeContent(e){return e.data},getDocumentTypeNodeName(e){return e.name},getDocumentTypeNodePublicId(e){return e.publicId},getDocumentTypeNodeSystemId(e){return e.systemId},isTextNode(e){return e.nodeName===`#text`},isCommentNode(e){return e.nodeName===`#comment`},isDocumentTypeNode(e){return e.nodeName===`#documentType`},isElementNode(e){return Object.prototype.hasOwnProperty.call(e,`tagName`)},setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t},getNodeSourceCodeLocation(e){return e.sourceCodeLocation},updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation,...t}}},VALID_DOCTYPE_NAME=`html`,VALID_SYSTEM_ID=`about:legacy-compat`,QUIRKS_MODE_SYSTEM_ID=`http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd`,QUIRKS_MODE_PUBLIC_ID_PREFIXES=`+//silmaril//dtd html pro v0r11 19970101//,-//as//dtd html 3.0 aswedit + extensions//,-//advasoft ltd//dtd html 3.0 aswedit + extensions//,-//ietf//dtd html 2.0 level 1//,-//ietf//dtd html 2.0 level 2//,-//ietf//dtd html 2.0 strict level 1//,-//ietf//dtd html 2.0 strict level 2//,-//ietf//dtd html 2.0 strict//,-//ietf//dtd html 2.0//,-//ietf//dtd html 2.1e//,-//ietf//dtd html 3.0//,-//ietf//dtd html 3.2 final//,-//ietf//dtd html 3.2//,-//ietf//dtd html 3//,-//ietf//dtd html level 0//,-//ietf//dtd html level 1//,-//ietf//dtd html level 2//,-//ietf//dtd html level 3//,-//ietf//dtd html strict level 0//,-//ietf//dtd html strict level 1//,-//ietf//dtd html strict level 2//,-//ietf//dtd html strict level 3//,-//ietf//dtd html strict//,-//ietf//dtd html//,-//metrius//dtd metrius presentational//,-//microsoft//dtd internet explorer 2.0 html strict//,-//microsoft//dtd internet explorer 2.0 html//,-//microsoft//dtd internet explorer 2.0 tables//,-//microsoft//dtd internet explorer 3.0 html strict//,-//microsoft//dtd internet explorer 3.0 html//,-//microsoft//dtd internet explorer 3.0 tables//,-//netscape comm. corp.//dtd html//,-//netscape comm. corp.//dtd strict html//,-//o'reilly and associates//dtd html 2.0//,-//o'reilly and associates//dtd html extended 1.0//,-//o'reilly and associates//dtd html extended relaxed 1.0//,-//sq//dtd html 2.0 hotmetal + extensions//,-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//,-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//,-//spyglass//dtd html 2.0 extended//,-//sun microsystems corp.//dtd hotjava html//,-//sun microsystems corp.//dtd hotjava strict html//,-//w3c//dtd html 3 1995-03-24//,-//w3c//dtd html 3.2 draft//,-//w3c//dtd html 3.2 final//,-//w3c//dtd html 3.2//,-//w3c//dtd html 3.2s draft//,-//w3c//dtd html 4.0 frameset//,-//w3c//dtd html 4.0 transitional//,-//w3c//dtd html experimental 19960712//,-//w3c//dtd html experimental 970421//,-//w3c//dtd w3 html//,-//w3o//dtd w3 html 3.0//,-//webtechs//dtd mozilla html 2.0//,-//webtechs//dtd mozilla html//`.split(`,`),QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES=[...QUIRKS_MODE_PUBLIC_ID_PREFIXES,`-//w3c//dtd html 4.01 frameset//`,`-//w3c//dtd html 4.01 transitional//`],QUIRKS_MODE_PUBLIC_IDS=new Set([`-//w3o//dtd w3 html strict 3.0//en//`,`-/w3c/dtd html 4.0 transitional/en`,`html`]),LIMITED_QUIRKS_PUBLIC_ID_PREFIXES=[`-//w3c//dtd xhtml 1.0 frameset//`,`-//w3c//dtd xhtml 1.0 transitional//`],LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES=[...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,`-//w3c//dtd html 4.01 frameset//`,`-//w3c//dtd html 4.01 transitional//`];function hasPrefix(e,t){return t.some(t=>e.startsWith(t))}function isConforming(e){return e.name===VALID_DOCTYPE_NAME&&e.publicId===null&&(e.systemId===null||e.systemId===VALID_SYSTEM_ID)}function getDocumentMode(e){if(e.name!==VALID_DOCTYPE_NAME)return DOCUMENT_MODE.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===QUIRKS_MODE_SYSTEM_ID)return DOCUMENT_MODE.QUIRKS;let{publicId:S}=e;if(S!==null){if(S=S.toLowerCase(),QUIRKS_MODE_PUBLIC_IDS.has(S))return DOCUMENT_MODE.QUIRKS;let e=t===null?QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES:QUIRKS_MODE_PUBLIC_ID_PREFIXES;if(hasPrefix(S,e))return DOCUMENT_MODE.QUIRKS;if(e=t===null?LIMITED_QUIRKS_PUBLIC_ID_PREFIXES:LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES,hasPrefix(S,e))return DOCUMENT_MODE.LIMITED_QUIRKS}return DOCUMENT_MODE.NO_QUIRKS}const MIME_TYPES={TEXT_HTML:`text/html`,APPLICATION_XML:`application/xhtml+xml`},DEFINITION_URL_ATTR=`definitionurl`,ADJUSTED_DEFINITION_URL_ATTR=`definitionURL`,SVG_ATTRS_ADJUSTMENT_MAP=new Map(`attributeName.attributeType.baseFrequency.baseProfile.calcMode.clipPathUnits.diffuseConstant.edgeMode.filterUnits.glyphRef.gradientTransform.gradientUnits.kernelMatrix.kernelUnitLength.keyPoints.keySplines.keyTimes.lengthAdjust.limitingConeAngle.markerHeight.markerUnits.markerWidth.maskContentUnits.maskUnits.numOctaves.pathLength.patternContentUnits.patternTransform.patternUnits.pointsAtX.pointsAtY.pointsAtZ.preserveAlpha.preserveAspectRatio.primitiveUnits.refX.refY.repeatCount.repeatDur.requiredExtensions.requiredFeatures.specularConstant.specularExponent.spreadMethod.startOffset.stdDeviation.stitchTiles.surfaceScale.systemLanguage.tableValues.targetX.targetY.textLength.viewBox.viewTarget.xChannelSelector.yChannelSelector.zoomAndPan`.split(`.`).map(e=>[e.toLowerCase(),e])),XML_ATTRS_ADJUSTMENT_MAP=new Map([[`xlink:actuate`,{prefix:`xlink`,name:`actuate`,namespace:NS.XLINK}],[`xlink:arcrole`,{prefix:`xlink`,name:`arcrole`,namespace:NS.XLINK}],[`xlink:href`,{prefix:`xlink`,name:`href`,namespace:NS.XLINK}],[`xlink:role`,{prefix:`xlink`,name:`role`,namespace:NS.XLINK}],[`xlink:show`,{prefix:`xlink`,name:`show`,namespace:NS.XLINK}],[`xlink:title`,{prefix:`xlink`,name:`title`,namespace:NS.XLINK}],[`xlink:type`,{prefix:`xlink`,name:`type`,namespace:NS.XLINK}],[`xml:lang`,{prefix:`xml`,name:`lang`,namespace:NS.XML}],[`xml:space`,{prefix:`xml`,name:`space`,namespace:NS.XML}],[`xmlns`,{prefix:``,name:`xmlns`,namespace:NS.XMLNS}],[`xmlns:xlink`,{prefix:`xmlns`,name:`xlink`,namespace:NS.XMLNS}]]),SVG_TAG_NAMES_ADJUSTMENT_MAP=new Map(`altGlyph.altGlyphDef.altGlyphItem.animateColor.animateMotion.animateTransform.clipPath.feBlend.feColorMatrix.feComponentTransfer.feComposite.feConvolveMatrix.feDiffuseLighting.feDisplacementMap.feDistantLight.feFlood.feFuncA.feFuncB.feFuncG.feFuncR.feGaussianBlur.feImage.feMerge.feMergeNode.feMorphology.feOffset.fePointLight.feSpecularLighting.feSpotLight.feTile.feTurbulence.foreignObject.glyphRef.linearGradient.radialGradient.textPath`.split(`.`).map(e=>[e.toLowerCase(),e])),EXITS_FOREIGN_CONTENT=new Set([TAG_ID.B,TAG_ID.BIG,TAG_ID.BLOCKQUOTE,TAG_ID.BODY,TAG_ID.BR,TAG_ID.CENTER,TAG_ID.CODE,TAG_ID.DD,TAG_ID.DIV,TAG_ID.DL,TAG_ID.DT,TAG_ID.EM,TAG_ID.EMBED,TAG_ID.H1,TAG_ID.H2,TAG_ID.H3,TAG_ID.H4,TAG_ID.H5,TAG_ID.H6,TAG_ID.HEAD,TAG_ID.HR,TAG_ID.I,TAG_ID.IMG,TAG_ID.LI,TAG_ID.LISTING,TAG_ID.MENU,TAG_ID.META,TAG_ID.NOBR,TAG_ID.OL,TAG_ID.P,TAG_ID.PRE,TAG_ID.RUBY,TAG_ID.S,TAG_ID.SMALL,TAG_ID.SPAN,TAG_ID.STRONG,TAG_ID.STRIKE,TAG_ID.SUB,TAG_ID.SUP,TAG_ID.TABLE,TAG_ID.TT,TAG_ID.U,TAG_ID.UL,TAG_ID.VAR]);function causesExit(e){let t=e.tagID;return t===TAG_ID.FONT&&e.attrs.some(({name:e})=>e===ATTRS.COLOR||e===ATTRS.SIZE||e===ATTRS.FACE)||EXITS_FOREIGN_CONTENT.has(t)}function adjustTokenMathMLAttrs(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===DEFINITION_URL_ATTR){e.attrs[t].name=ADJUSTED_DEFINITION_URL_ATTR;break}}function adjustTokenSVGAttrs(e){for(let t=0;t<e.attrs.length;t++){let S=SVG_ATTRS_ADJUSTMENT_MAP.get(e.attrs[t].name);S!=null&&(e.attrs[t].name=S)}}function adjustTokenXMLAttrs(e){for(let t=0;t<e.attrs.length;t++){let S=XML_ATTRS_ADJUSTMENT_MAP.get(e.attrs[t].name);S&&(e.attrs[t].prefix=S.prefix,e.attrs[t].name=S.name,e.attrs[t].namespace=S.namespace)}}function adjustTokenSVGTagName(e){let t=SVG_TAG_NAMES_ADJUSTMENT_MAP.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=getTagID(e.tagName))}function isMathMLTextIntegrationPoint(e,t){return t===NS.MATHML&&(e===TAG_ID.MI||e===TAG_ID.MO||e===TAG_ID.MN||e===TAG_ID.MS||e===TAG_ID.MTEXT)}function isHtmlIntegrationPoint(e,t,S){if(t===NS.MATHML&&e===TAG_ID.ANNOTATION_XML){for(let e=0;e<S.length;e++)if(S[e].name===ATTRS.ENCODING){let t=S[e].value.toLowerCase();return t===MIME_TYPES.TEXT_HTML||t===MIME_TYPES.APPLICATION_XML}}return t===NS.SVG&&(e===TAG_ID.FOREIGN_OBJECT||e===TAG_ID.DESC||e===TAG_ID.TITLE)}function isIntegrationPoint(e,t,S,w){return(!w||w===NS.HTML)&&isHtmlIntegrationPoint(e,t,S)||(!w||w===NS.MATHML)&&isMathMLTextIntegrationPoint(e,t)}const HIDDEN_INPUT_TYPE=`hidden`,AA_OUTER_LOOP_ITER=8,AA_INNER_LOOP_ITER=3;var InsertionMode;(function(e){e[e.INITIAL=0]=`INITIAL`,e[e.BEFORE_HTML=1]=`BEFORE_HTML`,e[e.BEFORE_HEAD=2]=`BEFORE_HEAD`,e[e.IN_HEAD=3]=`IN_HEAD`,e[e.IN_HEAD_NO_SCRIPT=4]=`IN_HEAD_NO_SCRIPT`,e[e.AFTER_HEAD=5]=`AFTER_HEAD`,e[e.IN_BODY=6]=`IN_BODY`,e[e.TEXT=7]=`TEXT`,e[e.IN_TABLE=8]=`IN_TABLE`,e[e.IN_TABLE_TEXT=9]=`IN_TABLE_TEXT`,e[e.IN_CAPTION=10]=`IN_CAPTION`,e[e.IN_COLUMN_GROUP=11]=`IN_COLUMN_GROUP`,e[e.IN_TABLE_BODY=12]=`IN_TABLE_BODY`,e[e.IN_ROW=13]=`IN_ROW`,e[e.IN_CELL=14]=`IN_CELL`,e[e.IN_SELECT=15]=`IN_SELECT`,e[e.IN_SELECT_IN_TABLE=16]=`IN_SELECT_IN_TABLE`,e[e.IN_TEMPLATE=17]=`IN_TEMPLATE`,e[e.AFTER_BODY=18]=`AFTER_BODY`,e[e.IN_FRAMESET=19]=`IN_FRAMESET`,e[e.AFTER_FRAMESET=20]=`AFTER_FRAMESET`,e[e.AFTER_AFTER_BODY=21]=`AFTER_AFTER_BODY`,e[e.AFTER_AFTER_FRAMESET=22]=`AFTER_AFTER_FRAMESET`})(InsertionMode||={});const BASE_LOC={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},TABLE_STRUCTURE_TAGS=new Set([TAG_ID.TABLE,TAG_ID.TBODY,TAG_ID.TFOOT,TAG_ID.THEAD,TAG_ID.TR]),defaultParserOptions={scriptingEnabled:!0,sourceCodeLocationInfo:!1,treeAdapter:defaultTreeAdapter,onParseError:null};var Parser=class{constructor(e,t,S=null,w=null){this.fragmentContext=S,this.scriptHandler=w,this.currentToken=null,this.stopped=!1,this.insertionMode=InsertionMode.INITIAL,this.originalInsertionMode=InsertionMode.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=!1,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1,this.options={...defaultParserOptions,...e},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError&&(this.options.sourceCodeLocationInfo=!0),this.document=t??this.treeAdapter.createDocument(),this.tokenizer=new Tokenizer(this.options,this),this.activeFormattingElements=new FormattingElementList(this.treeAdapter),this.fragmentContextID=S?getTagID(this.treeAdapter.getTagName(S)):TAG_ID.UNKNOWN,this._setContextModes(S??this.document,this.fragmentContextID),this.openElements=new OpenElementStack(this.document,this.treeAdapter,this)}static parse(e,t){let S=new this(t);return S.tokenizer.write(e,!0),S.document}static getFragmentParser(e,t){let S={...defaultParserOptions,...t};e??=S.treeAdapter.createElement(TAG_NAMES.TEMPLATE,NS.HTML,[]);let w=S.treeAdapter.createElement(`documentmock`,NS.HTML,[]),E=new this(S,w,e);return E.fragmentContextID===TAG_ID.TEMPLATE&&E.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE),E._initTokenizerForFragmentParsing(),E._insertFakeRootElement(),E._resetInsertionMode(),E._findFormInFragmentContext(),E}getFragment(){let e=this.treeAdapter.getFirstChild(this.document),t=this.treeAdapter.createDocumentFragment();return this._adoptNodes(e,t),t}_err(e,t,S){var w;if(!this.onParseError)return;let E=e.location??BASE_LOC,D={code:t,startLine:E.startLine,startCol:E.startCol,startOffset:E.startOffset,endLine:S?E.startLine:E.endLine,endCol:S?E.startCol:E.endCol,endOffset:S?E.startOffset:E.endOffset};this.onParseError(D)}onItemPush(e,t,S){var w,E;(E=(w=this.treeAdapter).onItemPush)==null||E.call(w,e),S&&this.openElements.stackTop>0&&this._setContextModes(e,t)}onItemPop(e,t){var S,w;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(e,this.currentToken),(w=(S=this.treeAdapter).onItemPop)==null||w.call(S,e,this.openElements.current),t){let e,t;this.openElements.stackTop===0&&this.fragmentContext?(e=this.fragmentContext,t=this.fragmentContextID):{current:e,currentTagId:t}=this.openElements,this._setContextModes(e,t)}}_setContextModes(e,t){let S=e===this.document||e&&this.treeAdapter.getNamespaceURI(e)===NS.HTML;this.currentNotInHTML=!S,this.tokenizer.inForeignNode=!S&&e!==void 0&&t!==void 0&&!this._isIntegrationPoint(t,e)}_switchToTextParsing(e,t){this._insertElement(e,NS.HTML),this.tokenizer.state=t,this.originalInsertionMode=this.insertionMode,this.insertionMode=InsertionMode.TEXT}switchToPlaintextParsing(){this.insertionMode=InsertionMode.TEXT,this.originalInsertionMode=InsertionMode.IN_BODY,this.tokenizer.state=TokenizerMode.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;for(;e;){if(this.treeAdapter.getTagName(e)===TAG_NAMES.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==NS.HTML))switch(this.fragmentContextID){case TAG_ID.TITLE:case TAG_ID.TEXTAREA:this.tokenizer.state=TokenizerMode.RCDATA;break;case TAG_ID.STYLE:case TAG_ID.XMP:case TAG_ID.IFRAME:case TAG_ID.NOEMBED:case TAG_ID.NOFRAMES:case TAG_ID.NOSCRIPT:this.tokenizer.state=TokenizerMode.RAWTEXT;break;case TAG_ID.SCRIPT:this.tokenizer.state=TokenizerMode.SCRIPT_DATA;break;case TAG_ID.PLAINTEXT:this.tokenizer.state=TokenizerMode.PLAINTEXT;break;default:}}_setDocumentType(e){let t=e.name||``,S=e.publicId||``,w=e.systemId||``;if(this.treeAdapter.setDocumentType(this.document,t,S,w),e.location){let t=this.treeAdapter.getChildNodes(this.document).find(e=>this.treeAdapter.isDocumentTypeNode(e));t&&this.treeAdapter.setNodeSourceCodeLocation(t,e.location)}}_attachElementToTree(e,t){if(this.options.sourceCodeLocationInfo){let S=t&&{...t,startTag:t};this.treeAdapter.setNodeSourceCodeLocation(e,S)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{let t=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(t??this.document,e)}}_appendElement(e,t){let S=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(S,e.location)}_insertElement(e,t){let S=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(S,e.location),this.openElements.push(S,e.tagID)}_insertFakeElement(e,t){let S=this.treeAdapter.createElement(e,NS.HTML,[]);this._attachElementToTree(S,null),this.openElements.push(S,t)}_insertTemplate(e){let t=this.treeAdapter.createElement(e.tagName,NS.HTML,e.attrs),S=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(t,S),this._attachElementToTree(t,e.location),this.openElements.push(t,e.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(S,null)}_insertFakeRootElement(){let e=this.treeAdapter.createElement(TAG_NAMES.HTML,NS.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(e,null),this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e,TAG_ID.HTML)}_appendCommentNode(e,t){let S=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(t,S),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(S,e.location)}_insertCharacters(e){let t,S;if(this._shouldFosterParentOnInsertion()?({parent:t,beforeElement:S}=this._findFosterParentingLocation(),S?this.treeAdapter.insertTextBefore(t,e.chars,S):this.treeAdapter.insertText(t,e.chars)):(t=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(t,e.chars)),!e.location)return;let w=this.treeAdapter.getChildNodes(t),E=w[(S?w.lastIndexOf(S):w.length)-1];if(this.treeAdapter.getNodeSourceCodeLocation(E)){let{endLine:t,endCol:S,endOffset:w}=e.location;this.treeAdapter.updateNodeSourceCodeLocation(E,{endLine:t,endCol:S,endOffset:w})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(E,e.location)}_adoptNodes(e,t){for(let S=this.treeAdapter.getFirstChild(e);S;S=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(S),this.treeAdapter.appendChild(t,S)}_setEndLocation(e,t){if(this.treeAdapter.getNodeSourceCodeLocation(e)&&t.location){let S=t.location,w=this.treeAdapter.getTagName(e),E=t.type===TokenType.END_TAG&&w===t.tagName?{endTag:{...S},endLine:S.endLine,endCol:S.endCol,endOffset:S.endOffset}:{endLine:S.startLine,endCol:S.startCol,endOffset:S.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(e,E)}}shouldProcessStartTagTokenInForeignContent(e){if(!this.currentNotInHTML)return!1;let t,S;return this.openElements.stackTop===0&&this.fragmentContext?(t=this.fragmentContext,S=this.fragmentContextID):{current:t,currentTagId:S}=this.openElements,e.tagID===TAG_ID.SVG&&this.treeAdapter.getTagName(t)===TAG_NAMES.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(t)===NS.MATHML?!1:this.tokenizer.inForeignNode||(e.tagID===TAG_ID.MGLYPH||e.tagID===TAG_ID.MALIGNMARK)&&S!==void 0&&!this._isIntegrationPoint(S,t,NS.HTML)}_processToken(e){switch(e.type){case TokenType.CHARACTER:this.onCharacter(e);break;case TokenType.NULL_CHARACTER:this.onNullCharacter(e);break;case TokenType.COMMENT:this.onComment(e);break;case TokenType.DOCTYPE:this.onDoctype(e);break;case TokenType.START_TAG:this._processStartTag(e);break;case TokenType.END_TAG:this.onEndTag(e);break;case TokenType.EOF:this.onEof(e);break;case TokenType.WHITESPACE_CHARACTER:this.onWhitespaceCharacter(e);break}}_isIntegrationPoint(e,t,S){return isIntegrationPoint(e,this.treeAdapter.getNamespaceURI(t),this.treeAdapter.getAttrList(t),S)}_reconstructActiveFormattingElements(){let e=this.activeFormattingElements.entries.length;if(e){let t=this.activeFormattingElements.entries.findIndex(e=>e.type===EntryType.Marker||this.openElements.contains(e.element)),S=t===-1?e-1:t-1;for(let e=S;e>=0;e--){let t=this.activeFormattingElements.entries[e];this._insertElement(t.token,this.treeAdapter.getNamespaceURI(t.element)),t.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=InsertionMode.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(TAG_ID.P),this.openElements.popUntilTagNamePopped(TAG_ID.P)}_resetInsertionMode(){for(let e=this.openElements.stackTop;e>=0;e--)switch(e===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[e]){case TAG_ID.TR:this.insertionMode=InsertionMode.IN_ROW;return;case TAG_ID.TBODY:case TAG_ID.THEAD:case TAG_ID.TFOOT:this.insertionMode=InsertionMode.IN_TABLE_BODY;return;case TAG_ID.CAPTION:this.insertionMode=InsertionMode.IN_CAPTION;return;case TAG_ID.COLGROUP:this.insertionMode=InsertionMode.IN_COLUMN_GROUP;return;case TAG_ID.TABLE:this.insertionMode=InsertionMode.IN_TABLE;return;case TAG_ID.BODY:this.insertionMode=InsertionMode.IN_BODY;return;case TAG_ID.FRAMESET:this.insertionMode=InsertionMode.IN_FRAMESET;return;case TAG_ID.SELECT:this._resetInsertionModeForSelect(e);return;case TAG_ID.TEMPLATE:this.insertionMode=this.tmplInsertionModeStack[0];return;case TAG_ID.HTML:this.insertionMode=this.headElement?InsertionMode.AFTER_HEAD:InsertionMode.BEFORE_HEAD;return;case TAG_ID.TD:case TAG_ID.TH:if(e>0){this.insertionMode=InsertionMode.IN_CELL;return}break;case TAG_ID.HEAD:if(e>0){this.insertionMode=InsertionMode.IN_HEAD;return}break}this.insertionMode=InsertionMode.IN_BODY}_resetInsertionModeForSelect(e){if(e>0)for(let t=e-1;t>0;t--){let e=this.openElements.tagIDs[t];if(e===TAG_ID.TEMPLATE)break;if(e===TAG_ID.TABLE){this.insertionMode=InsertionMode.IN_SELECT_IN_TABLE;return}}this.insertionMode=InsertionMode.IN_SELECT}_isElementCausesFosterParenting(e){return TABLE_STRUCTURE_TAGS.has(e)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let e=this.openElements.stackTop;e>=0;e--){let t=this.openElements.items[e];switch(this.openElements.tagIDs[e]){case TAG_ID.TEMPLATE:if(this.treeAdapter.getNamespaceURI(t)===NS.HTML)return{parent:this.treeAdapter.getTemplateContent(t),beforeElement:null};break;case TAG_ID.TABLE:{let S=this.treeAdapter.getParentNode(t);return S?{parent:S,beforeElement:t}:{parent:this.openElements.items[e-1],beforeElement:null}}default:}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(e){let t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertBefore(t.parent,e,t.beforeElement):this.treeAdapter.appendChild(t.parent,e)}_isSpecialElement(e,t){return SPECIAL_ELEMENTS[this.treeAdapter.getNamespaceURI(e)].has(t)}onCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){characterInForeignContent(this,e);return}switch(this.insertionMode){case InsertionMode.INITIAL:tokenInInitialMode(this,e);break;case InsertionMode.BEFORE_HTML:tokenBeforeHtml(this,e);break;case InsertionMode.BEFORE_HEAD:tokenBeforeHead(this,e);break;case InsertionMode.IN_HEAD:tokenInHead(this,e);break;case InsertionMode.IN_HEAD_NO_SCRIPT:tokenInHeadNoScript(this,e);break;case InsertionMode.AFTER_HEAD:tokenAfterHead(this,e);break;case InsertionMode.IN_BODY:case InsertionMode.IN_CAPTION:case InsertionMode.IN_CELL:case InsertionMode.IN_TEMPLATE:characterInBody(this,e);break;case InsertionMode.TEXT:case InsertionMode.IN_SELECT:case InsertionMode.IN_SELECT_IN_TABLE:this._insertCharacters(e);break;case InsertionMode.IN_TABLE:case InsertionMode.IN_TABLE_BODY:case InsertionMode.IN_ROW:characterInTable(this,e);break;case InsertionMode.IN_TABLE_TEXT:characterInTableText(this,e);break;case InsertionMode.IN_COLUMN_GROUP:tokenInColumnGroup(this,e);break;case InsertionMode.AFTER_BODY:tokenAfterBody(this,e);break;case InsertionMode.AFTER_AFTER_BODY:tokenAfterAfterBody(this,e);break;default:}}onNullCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){nullCharacterInForeignContent(this,e);return}switch(this.insertionMode){case InsertionMode.INITIAL:tokenInInitialMode(this,e);break;case InsertionMode.BEFORE_HTML:tokenBeforeHtml(this,e);break;case InsertionMode.BEFORE_HEAD:tokenBeforeHead(this,e);break;case InsertionMode.IN_HEAD:tokenInHead(this,e);break;case InsertionMode.IN_HEAD_NO_SCRIPT:tokenInHeadNoScript(this,e);break;case InsertionMode.AFTER_HEAD:tokenAfterHead(this,e);break;case InsertionMode.TEXT:this._insertCharacters(e);break;case InsertionMode.IN_TABLE:case InsertionMode.IN_TABLE_BODY:case InsertionMode.IN_ROW:characterInTable(this,e);break;case InsertionMode.IN_COLUMN_GROUP:tokenInColumnGroup(this,e);break;case InsertionMode.AFTER_BODY:tokenAfterBody(this,e);break;case InsertionMode.AFTER_AFTER_BODY:tokenAfterAfterBody(this,e);break;default:}}onComment(e){if(this.skipNextNewLine=!1,this.currentNotInHTML){appendComment(this,e);return}switch(this.insertionMode){case InsertionMode.INITIAL:case InsertionMode.BEFORE_HTML:case InsertionMode.BEFORE_HEAD:case InsertionMode.IN_HEAD:case InsertionMode.IN_HEAD_NO_SCRIPT:case InsertionMode.AFTER_HEAD:case InsertionMode.IN_BODY:case InsertionMode.IN_TABLE:case InsertionMode.IN_CAPTION:case InsertionMode.IN_COLUMN_GROUP:case InsertionMode.IN_TABLE_BODY:case InsertionMode.IN_ROW:case InsertionMode.IN_CELL:case InsertionMode.IN_SELECT:case InsertionMode.IN_SELECT_IN_TABLE:case InsertionMode.IN_TEMPLATE:case InsertionMode.IN_FRAMESET:case InsertionMode.AFTER_FRAMESET:appendComment(this,e);break;case InsertionMode.IN_TABLE_TEXT:tokenInTableText(this,e);break;case InsertionMode.AFTER_BODY:appendCommentToRootHtmlElement(this,e);break;case InsertionMode.AFTER_AFTER_BODY:case InsertionMode.AFTER_AFTER_FRAMESET:appendCommentToDocument(this,e);break;default:}}onDoctype(e){switch(this.skipNextNewLine=!1,this.insertionMode){case InsertionMode.INITIAL:doctypeInInitialMode(this,e);break;case InsertionMode.BEFORE_HEAD:case InsertionMode.IN_HEAD:case InsertionMode.IN_HEAD_NO_SCRIPT:case InsertionMode.AFTER_HEAD:this._err(e,ERR.misplacedDoctype);break;case InsertionMode.IN_TABLE_TEXT:tokenInTableText(this,e);break;default:}}onStartTag(e){this.skipNextNewLine=!1,this.currentToken=e,this._processStartTag(e),e.selfClosing&&!e.ackSelfClosing&&this._err(e,ERR.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(e){this.shouldProcessStartTagTokenInForeignContent(e)?startTagInForeignContent(this,e):this._startTagOutsideForeignContent(e)}_startTagOutsideForeignContent(e){switch(this.insertionMode){case InsertionMode.INITIAL:tokenInInitialMode(this,e);break;case InsertionMode.BEFORE_HTML:startTagBeforeHtml(this,e);break;case InsertionMode.BEFORE_HEAD:startTagBeforeHead(this,e);break;case InsertionMode.IN_HEAD:startTagInHead(this,e);break;case InsertionMode.IN_HEAD_NO_SCRIPT:startTagInHeadNoScript(this,e);break;case InsertionMode.AFTER_HEAD:startTagAfterHead(this,e);break;case InsertionMode.IN_BODY:startTagInBody(this,e);break;case InsertionMode.IN_TABLE:startTagInTable(this,e);break;case InsertionMode.IN_TABLE_TEXT:tokenInTableText(this,e);break;case InsertionMode.IN_CAPTION:startTagInCaption(this,e);break;case InsertionMode.IN_COLUMN_GROUP:startTagInColumnGroup(this,e);break;case InsertionMode.IN_TABLE_BODY:startTagInTableBody(this,e);break;case InsertionMode.IN_ROW:startTagInRow(this,e);break;case InsertionMode.IN_CELL:startTagInCell(this,e);break;case InsertionMode.IN_SELECT:startTagInSelect(this,e);break;case InsertionMode.IN_SELECT_IN_TABLE:startTagInSelectInTable(this,e);break;case InsertionMode.IN_TEMPLATE:startTagInTemplate(this,e);break;case InsertionMode.AFTER_BODY:startTagAfterBody(this,e);break;case InsertionMode.IN_FRAMESET:startTagInFrameset(this,e);break;case InsertionMode.AFTER_FRAMESET:startTagAfterFrameset(this,e);break;case InsertionMode.AFTER_AFTER_BODY:startTagAfterAfterBody(this,e);break;case InsertionMode.AFTER_AFTER_FRAMESET:startTagAfterAfterFrameset(this,e);break;default:}}onEndTag(e){this.skipNextNewLine=!1,this.currentToken=e,this.currentNotInHTML?endTagInForeignContent(this,e):this._endTagOutsideForeignContent(e)}_endTagOutsideForeignContent(e){switch(this.insertionMode){case InsertionMode.INITIAL:tokenInInitialMode(this,e);break;case InsertionMode.BEFORE_HTML:endTagBeforeHtml(this,e);break;case InsertionMode.BEFORE_HEAD:endTagBeforeHead(this,e);break;case InsertionMode.IN_HEAD:endTagInHead(this,e);break;case InsertionMode.IN_HEAD_NO_SCRIPT:endTagInHeadNoScript(this,e);break;case InsertionMode.AFTER_HEAD:endTagAfterHead(this,e);break;case InsertionMode.IN_BODY:endTagInBody(this,e);break;case InsertionMode.TEXT:endTagInText(this,e);break;case InsertionMode.IN_TABLE:endTagInTable(this,e);break;case InsertionMode.IN_TABLE_TEXT:tokenInTableText(this,e);break;case InsertionMode.IN_CAPTION:endTagInCaption(this,e);break;case InsertionMode.IN_COLUMN_GROUP:endTagInColumnGroup(this,e);break;case InsertionMode.IN_TABLE_BODY:endTagInTableBody(this,e);break;case InsertionMode.IN_ROW:endTagInRow(this,e);break;case InsertionMode.IN_CELL:endTagInCell(this,e);break;case InsertionMode.IN_SELECT:endTagInSelect(this,e);break;case InsertionMode.IN_SELECT_IN_TABLE:endTagInSelectInTable(this,e);break;case InsertionMode.IN_TEMPLATE:endTagInTemplate(this,e);break;case InsertionMode.AFTER_BODY:endTagAfterBody(this,e);break;case InsertionMode.IN_FRAMESET:endTagInFrameset(this,e);break;case InsertionMode.AFTER_FRAMESET:endTagAfterFrameset(this,e);break;case InsertionMode.AFTER_AFTER_BODY:tokenAfterAfterBody(this,e);break;default:}}onEof(e){switch(this.insertionMode){case InsertionMode.INITIAL:tokenInInitialMode(this,e);break;case InsertionMode.BEFORE_HTML:tokenBeforeHtml(this,e);break;case InsertionMode.BEFORE_HEAD:tokenBeforeHead(this,e);break;case InsertionMode.IN_HEAD:tokenInHead(this,e);break;case InsertionMode.IN_HEAD_NO_SCRIPT:tokenInHeadNoScript(this,e);break;case InsertionMode.AFTER_HEAD:tokenAfterHead(this,e);break;case InsertionMode.IN_BODY:case InsertionMode.IN_TABLE:case InsertionMode.IN_CAPTION:case InsertionMode.IN_COLUMN_GROUP:case InsertionMode.IN_TABLE_BODY:case InsertionMode.IN_ROW:case InsertionMode.IN_CELL:case InsertionMode.IN_SELECT:case InsertionMode.IN_SELECT_IN_TABLE:eofInBody(this,e);break;case InsertionMode.TEXT:eofInText(this,e);break;case InsertionMode.IN_TABLE_TEXT:tokenInTableText(this,e);break;case InsertionMode.IN_TEMPLATE:eofInTemplate(this,e);break;case InsertionMode.AFTER_BODY:case InsertionMode.IN_FRAMESET:case InsertionMode.AFTER_FRAMESET:case InsertionMode.AFTER_AFTER_BODY:case InsertionMode.AFTER_AFTER_FRAMESET:stopParsing(this,e);break;default:}}onWhitespaceCharacter(e){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,e.chars.charCodeAt(0)===CODE_POINTS.LINE_FEED)){if(e.chars.length===1)return;e.chars=e.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(e);return}switch(this.insertionMode){case InsertionMode.IN_HEAD:case InsertionMode.IN_HEAD_NO_SCRIPT:case InsertionMode.AFTER_HEAD:case InsertionMode.TEXT:case InsertionMode.IN_COLUMN_GROUP:case InsertionMode.IN_SELECT:case InsertionMode.IN_SELECT_IN_TABLE:case InsertionMode.IN_FRAMESET:case InsertionMode.AFTER_FRAMESET:this._insertCharacters(e);break;case InsertionMode.IN_BODY:case InsertionMode.IN_CAPTION:case InsertionMode.IN_CELL:case InsertionMode.IN_TEMPLATE:case InsertionMode.AFTER_BODY:case InsertionMode.AFTER_AFTER_BODY:case InsertionMode.AFTER_AFTER_FRAMESET:whitespaceCharacterInBody(this,e);break;case InsertionMode.IN_TABLE:case InsertionMode.IN_TABLE_BODY:case InsertionMode.IN_ROW:characterInTable(this,e);break;case InsertionMode.IN_TABLE_TEXT:whitespaceCharacterInTableText(this,e);break;default:}}};function aaObtainFormattingElementEntry(e,t){let S=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return S?e.openElements.contains(S.element)?e.openElements.hasInScope(t.tagID)||(S=null):(e.activeFormattingElements.removeEntry(S),S=null):genericEndTagInBody(e,t),S}function aaObtainFurthestBlock(e,t){let S=null,w=e.openElements.stackTop;for(;w>=0;w--){let E=e.openElements.items[w];if(E===t.element)break;e._isSpecialElement(E,e.openElements.tagIDs[w])&&(S=E)}return S||(e.openElements.shortenToLength(Math.max(w,0)),e.activeFormattingElements.removeEntry(t)),S}function aaInnerLoop(e,t,S){let w=t,E=e.openElements.getCommonAncestor(t);for(let D=0,O=E;O!==S;D++,O=E){E=e.openElements.getCommonAncestor(O);let S=e.activeFormattingElements.getElementEntry(O),k=S&&D>=AA_INNER_LOOP_ITER;!S||k?(k&&e.activeFormattingElements.removeEntry(S),e.openElements.remove(O)):(O=aaRecreateElementFromEntry(e,S),w===t&&(e.activeFormattingElements.bookmark=S),e.treeAdapter.detachNode(w),e.treeAdapter.appendChild(O,w),w=O)}return w}function aaRecreateElementFromEntry(e,t){let S=e.treeAdapter.getNamespaceURI(t.element),w=e.treeAdapter.createElement(t.token.tagName,S,t.token.attrs);return e.openElements.replace(t.element,w),t.element=w,w}function aaInsertLastNodeInCommonAncestor(e,t,S){let w=getTagID(e.treeAdapter.getTagName(t));if(e._isElementCausesFosterParenting(w))e._fosterParentElement(S);else{let E=e.treeAdapter.getNamespaceURI(t);w===TAG_ID.TEMPLATE&&E===NS.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,S)}}function aaReplaceFormattingElement(e,t,S){let w=e.treeAdapter.getNamespaceURI(S.element),{token:E}=S,D=e.treeAdapter.createElement(E.tagName,w,E.attrs);e._adoptNodes(t,D),e.treeAdapter.appendChild(t,D),e.activeFormattingElements.insertElementAfterBookmark(D,E),e.activeFormattingElements.removeEntry(S),e.openElements.remove(S.element),e.openElements.insertAfter(t,D,E.tagID)}function callAdoptionAgency(e,t){for(let S=0;S<AA_OUTER_LOOP_ITER;S++){let S=aaObtainFormattingElementEntry(e,t);if(!S)break;let w=aaObtainFurthestBlock(e,S);if(!w)break;e.activeFormattingElements.bookmark=S;let E=aaInnerLoop(e,w,S.element),D=e.openElements.getCommonAncestor(S.element);e.treeAdapter.detachNode(E),D&&aaInsertLastNodeInCommonAncestor(e,D,E),aaReplaceFormattingElement(e,w,S)}}function appendComment(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode)}function appendCommentToRootHtmlElement(e,t){e._appendCommentNode(t,e.openElements.items[0])}function appendCommentToDocument(e,t){e._appendCommentNode(t,e.document)}function stopParsing(e,t){if(e.stopped=!0,t.location){let S=e.fragmentContext?0:2;for(let w=e.openElements.stackTop;w>=S;w--)e._setEndLocation(e.openElements.items[w],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){let S=e.openElements.items[0],w=e.treeAdapter.getNodeSourceCodeLocation(S);if(w&&!w.endTag&&(e._setEndLocation(S,t),e.openElements.stackTop>=1)){let S=e.openElements.items[1],w=e.treeAdapter.getNodeSourceCodeLocation(S);w&&!w.endTag&&e._setEndLocation(S,t)}}}}function doctypeInInitialMode(e,t){e._setDocumentType(t);let S=t.forceQuirks?DOCUMENT_MODE.QUIRKS:getDocumentMode(t);isConforming(t)||e._err(t,ERR.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,S),e.insertionMode=InsertionMode.BEFORE_HTML}function tokenInInitialMode(e,t){e._err(t,ERR.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,DOCUMENT_MODE.QUIRKS),e.insertionMode=InsertionMode.BEFORE_HTML,e._processToken(t)}function startTagBeforeHtml(e,t){t.tagID===TAG_ID.HTML?(e._insertElement(t,NS.HTML),e.insertionMode=InsertionMode.BEFORE_HEAD):tokenBeforeHtml(e,t)}function endTagBeforeHtml(e,t){let S=t.tagID;(S===TAG_ID.HTML||S===TAG_ID.HEAD||S===TAG_ID.BODY||S===TAG_ID.BR)&&tokenBeforeHtml(e,t)}function tokenBeforeHtml(e,t){e._insertFakeRootElement(),e.insertionMode=InsertionMode.BEFORE_HEAD,e._processToken(t)}function startTagBeforeHead(e,t){switch(t.tagID){case TAG_ID.HTML:startTagInBody(e,t);break;case TAG_ID.HEAD:e._insertElement(t,NS.HTML),e.headElement=e.openElements.current,e.insertionMode=InsertionMode.IN_HEAD;break;default:tokenBeforeHead(e,t)}}function endTagBeforeHead(e,t){let S=t.tagID;S===TAG_ID.HEAD||S===TAG_ID.BODY||S===TAG_ID.HTML||S===TAG_ID.BR?tokenBeforeHead(e,t):e._err(t,ERR.endTagWithoutMatchingOpenElement)}function tokenBeforeHead(e,t){e._insertFakeElement(TAG_NAMES.HEAD,TAG_ID.HEAD),e.headElement=e.openElements.current,e.insertionMode=InsertionMode.IN_HEAD,e._processToken(t)}function startTagInHead(e,t){switch(t.tagID){case TAG_ID.HTML:startTagInBody(e,t);break;case TAG_ID.BASE:case TAG_ID.BASEFONT:case TAG_ID.BGSOUND:case TAG_ID.LINK:case TAG_ID.META:e._appendElement(t,NS.HTML),t.ackSelfClosing=!0;break;case TAG_ID.TITLE:e._switchToTextParsing(t,TokenizerMode.RCDATA);break;case TAG_ID.NOSCRIPT:e.options.scriptingEnabled?e._switchToTextParsing(t,TokenizerMode.RAWTEXT):(e._insertElement(t,NS.HTML),e.insertionMode=InsertionMode.IN_HEAD_NO_SCRIPT);break;case TAG_ID.NOFRAMES:case TAG_ID.STYLE:e._switchToTextParsing(t,TokenizerMode.RAWTEXT);break;case TAG_ID.SCRIPT:e._switchToTextParsing(t,TokenizerMode.SCRIPT_DATA);break;case TAG_ID.TEMPLATE:e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=InsertionMode.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);break;case TAG_ID.HEAD:e._err(t,ERR.misplacedStartTagForHeadElement);break;default:tokenInHead(e,t)}}function endTagInHead(e,t){switch(t.tagID){case TAG_ID.HEAD:e.openElements.pop(),e.insertionMode=InsertionMode.AFTER_HEAD;break;case TAG_ID.BODY:case TAG_ID.BR:case TAG_ID.HTML:tokenInHead(e,t);break;case TAG_ID.TEMPLATE:templateEndTagInHead(e,t);break;default:e._err(t,ERR.endTagWithoutMatchingOpenElement)}}function templateEndTagInHead(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==TAG_ID.TEMPLATE&&e._err(t,ERR.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(TAG_ID.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,ERR.endTagWithoutMatchingOpenElement)}function tokenInHead(e,t){e.openElements.pop(),e.insertionMode=InsertionMode.AFTER_HEAD,e._processToken(t)}function startTagInHeadNoScript(e,t){switch(t.tagID){case TAG_ID.HTML:startTagInBody(e,t);break;case TAG_ID.BASEFONT:case TAG_ID.BGSOUND:case TAG_ID.HEAD:case TAG_ID.LINK:case TAG_ID.META:case TAG_ID.NOFRAMES:case TAG_ID.STYLE:startTagInHead(e,t);break;case TAG_ID.NOSCRIPT:e._err(t,ERR.nestedNoscriptInHead);break;default:tokenInHeadNoScript(e,t)}}function endTagInHeadNoScript(e,t){switch(t.tagID){case TAG_ID.NOSCRIPT:e.openElements.pop(),e.insertionMode=InsertionMode.IN_HEAD;break;case TAG_ID.BR:tokenInHeadNoScript(e,t);break;default:e._err(t,ERR.endTagWithoutMatchingOpenElement)}}function tokenInHeadNoScript(e,t){let S=t.type===TokenType.EOF?ERR.openElementsLeftAfterEof:ERR.disallowedContentInNoscriptInHead;e._err(t,S),e.openElements.pop(),e.insertionMode=InsertionMode.IN_HEAD,e._processToken(t)}function startTagAfterHead(e,t){switch(t.tagID){case TAG_ID.HTML:startTagInBody(e,t);break;case TAG_ID.BODY:e._insertElement(t,NS.HTML),e.framesetOk=!1,e.insertionMode=InsertionMode.IN_BODY;break;case TAG_ID.FRAMESET:e._insertElement(t,NS.HTML),e.insertionMode=InsertionMode.IN_FRAMESET;break;case TAG_ID.BASE:case TAG_ID.BASEFONT:case TAG_ID.BGSOUND:case TAG_ID.LINK:case TAG_ID.META:case TAG_ID.NOFRAMES:case TAG_ID.SCRIPT:case TAG_ID.STYLE:case TAG_ID.TEMPLATE:case TAG_ID.TITLE:e._err(t,ERR.abandonedHeadElementChild),e.openElements.push(e.headElement,TAG_ID.HEAD),startTagInHead(e,t),e.openElements.remove(e.headElement);break;case TAG_ID.HEAD:e._err(t,ERR.misplacedStartTagForHeadElement);break;default:tokenAfterHead(e,t)}}function endTagAfterHead(e,t){switch(t.tagID){case TAG_ID.BODY:case TAG_ID.HTML:case TAG_ID.BR:tokenAfterHead(e,t);break;case TAG_ID.TEMPLATE:templateEndTagInHead(e,t);break;default:e._err(t,ERR.endTagWithoutMatchingOpenElement)}}function tokenAfterHead(e,t){e._insertFakeElement(TAG_NAMES.BODY,TAG_ID.BODY),e.insertionMode=InsertionMode.IN_BODY,modeInBody(e,t)}function modeInBody(e,t){switch(t.type){case TokenType.CHARACTER:characterInBody(e,t);break;case TokenType.WHITESPACE_CHARACTER:whitespaceCharacterInBody(e,t);break;case TokenType.COMMENT:appendComment(e,t);break;case TokenType.START_TAG:startTagInBody(e,t);break;case TokenType.END_TAG:endTagInBody(e,t);break;case TokenType.EOF:eofInBody(e,t);break;default:}}function whitespaceCharacterInBody(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function characterInBody(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function htmlStartTagInBody(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}function bodyStartTagInBody(e,t){let S=e.openElements.tryPeekProperlyNestedBodyElement();S&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(S,t.attrs))}function framesetStartTagInBody(e,t){let S=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&S&&(e.treeAdapter.detachNode(S),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,NS.HTML),e.insertionMode=InsertionMode.IN_FRAMESET)}function addressStartTagInBody(e,t){e.openElements.hasInButtonScope(TAG_ID.P)&&e._closePElement(),e._insertElement(t,NS.HTML)}function numberedHeaderStartTagInBody(e,t){e.openElements.hasInButtonScope(TAG_ID.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&NUMBERED_HEADERS.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,NS.HTML)}function preStartTagInBody(e,t){e.openElements.hasInButtonScope(TAG_ID.P)&&e._closePElement(),e._insertElement(t,NS.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function formStartTagInBody(e,t){let S=e.openElements.tmplCount>0;(!e.formElement||S)&&(e.openElements.hasInButtonScope(TAG_ID.P)&&e._closePElement(),e._insertElement(t,NS.HTML),S||(e.formElement=e.openElements.current))}function listItemStartTagInBody(e,t){e.framesetOk=!1;let S=t.tagID;for(let t=e.openElements.stackTop;t>=0;t--){let w=e.openElements.tagIDs[t];if(S===TAG_ID.LI&&w===TAG_ID.LI||(S===TAG_ID.DD||S===TAG_ID.DT)&&(w===TAG_ID.DD||w===TAG_ID.DT)){e.openElements.generateImpliedEndTagsWithExclusion(w),e.openElements.popUntilTagNamePopped(w);break}if(w!==TAG_ID.ADDRESS&&w!==TAG_ID.DIV&&w!==TAG_ID.P&&e._isSpecialElement(e.openElements.items[t],w))break}e.openElements.hasInButtonScope(TAG_ID.P)&&e._closePElement(),e._insertElement(t,NS.HTML)}function plaintextStartTagInBody(e,t){e.openElements.hasInButtonScope(TAG_ID.P)&&e._closePElement(),e._insertElement(t,NS.HTML),e.tokenizer.state=TokenizerMode.PLAINTEXT}function buttonStartTagInBody(e,t){e.openElements.hasInScope(TAG_ID.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(TAG_ID.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,NS.HTML),e.framesetOk=!1}function aStartTagInBody(e,t){let S=e.activeFormattingElements.getElementEntryInScopeWithTagName(TAG_NAMES.A);S&&(callAdoptionAgency(e,t),e.openElements.remove(S.element),e.activeFormattingElements.removeEntry(S)),e._reconstructActiveFormattingElements(),e._insertElement(t,NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function bStartTagInBody(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function nobrStartTagInBody(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(TAG_ID.NOBR)&&(callAdoptionAgency(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function appletStartTagInBody(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,NS.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function tableStartTagInBody(e,t){e.treeAdapter.getDocumentMode(e.document)!==DOCUMENT_MODE.QUIRKS&&e.openElements.hasInButtonScope(TAG_ID.P)&&e._closePElement(),e._insertElement(t,NS.HTML),e.framesetOk=!1,e.insertionMode=InsertionMode.IN_TABLE}function areaStartTagInBody(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,NS.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function isHiddenInput(e){let t=getTokenAttr(e,ATTRS.TYPE);return t!=null&&t.toLowerCase()===HIDDEN_INPUT_TYPE}function inputStartTagInBody(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,NS.HTML),isHiddenInput(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}function paramStartTagInBody(e,t){e._appendElement(t,NS.HTML),t.ackSelfClosing=!0}function hrStartTagInBody(e,t){e.openElements.hasInButtonScope(TAG_ID.P)&&e._closePElement(),e._appendElement(t,NS.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function imageStartTagInBody(e,t){t.tagName=TAG_NAMES.IMG,t.tagID=TAG_ID.IMG,areaStartTagInBody(e,t)}function textareaStartTagInBody(e,t){e._insertElement(t,NS.HTML),e.skipNextNewLine=!0,e.tokenizer.state=TokenizerMode.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=InsertionMode.TEXT}function xmpStartTagInBody(e,t){e.openElements.hasInButtonScope(TAG_ID.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,TokenizerMode.RAWTEXT)}function iframeStartTagInBody(e,t){e.framesetOk=!1,e._switchToTextParsing(t,TokenizerMode.RAWTEXT)}function rawTextStartTagInBody(e,t){e._switchToTextParsing(t,TokenizerMode.RAWTEXT)}function selectStartTagInBody(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,NS.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===InsertionMode.IN_TABLE||e.insertionMode===InsertionMode.IN_CAPTION||e.insertionMode===InsertionMode.IN_TABLE_BODY||e.insertionMode===InsertionMode.IN_ROW||e.insertionMode===InsertionMode.IN_CELL?InsertionMode.IN_SELECT_IN_TABLE:InsertionMode.IN_SELECT}function optgroupStartTagInBody(e,t){e.openElements.currentTagId===TAG_ID.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,NS.HTML)}function rbStartTagInBody(e,t){e.openElements.hasInScope(TAG_ID.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,NS.HTML)}function rtStartTagInBody(e,t){e.openElements.hasInScope(TAG_ID.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(TAG_ID.RTC),e._insertElement(t,NS.HTML)}function mathStartTagInBody(e,t){e._reconstructActiveFormattingElements(),adjustTokenMathMLAttrs(t),adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,NS.MATHML):e._insertElement(t,NS.MATHML),t.ackSelfClosing=!0}function svgStartTagInBody(e,t){e._reconstructActiveFormattingElements(),adjustTokenSVGAttrs(t),adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,NS.SVG):e._insertElement(t,NS.SVG),t.ackSelfClosing=!0}function genericStartTagInBody(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,NS.HTML)}function startTagInBody(e,t){switch(t.tagID){case TAG_ID.I:case TAG_ID.S:case TAG_ID.B:case TAG_ID.U:case TAG_ID.EM:case TAG_ID.TT:case TAG_ID.BIG:case TAG_ID.CODE:case TAG_ID.FONT:case TAG_ID.SMALL:case TAG_ID.STRIKE:case TAG_ID.STRONG:bStartTagInBody(e,t);break;case TAG_ID.A:aStartTagInBody(e,t);break;case TAG_ID.H1:case TAG_ID.H2:case TAG_ID.H3:case TAG_ID.H4:case TAG_ID.H5:case TAG_ID.H6:numberedHeaderStartTagInBody(e,t);break;case TAG_ID.P:case TAG_ID.DL:case TAG_ID.OL:case TAG_ID.UL:case TAG_ID.DIV:case TAG_ID.DIR:case TAG_ID.NAV:case TAG_ID.MAIN:case TAG_ID.MENU:case TAG_ID.ASIDE:case TAG_ID.CENTER:case TAG_ID.FIGURE:case TAG_ID.FOOTER:case TAG_ID.HEADER:case TAG_ID.HGROUP:case TAG_ID.DIALOG:case TAG_ID.DETAILS:case TAG_ID.ADDRESS:case TAG_ID.ARTICLE:case TAG_ID.SEARCH:case TAG_ID.SECTION:case TAG_ID.SUMMARY:case TAG_ID.FIELDSET:case TAG_ID.BLOCKQUOTE:case TAG_ID.FIGCAPTION:addressStartTagInBody(e,t);break;case TAG_ID.LI:case TAG_ID.DD:case TAG_ID.DT:listItemStartTagInBody(e,t);break;case TAG_ID.BR:case TAG_ID.IMG:case TAG_ID.WBR:case TAG_ID.AREA:case TAG_ID.EMBED:case TAG_ID.KEYGEN:areaStartTagInBody(e,t);break;case TAG_ID.HR:hrStartTagInBody(e,t);break;case TAG_ID.RB:case TAG_ID.RTC:rbStartTagInBody(e,t);break;case TAG_ID.RT:case TAG_ID.RP:rtStartTagInBody(e,t);break;case TAG_ID.PRE:case TAG_ID.LISTING:preStartTagInBody(e,t);break;case TAG_ID.XMP:xmpStartTagInBody(e,t);break;case TAG_ID.SVG:svgStartTagInBody(e,t);break;case TAG_ID.HTML:htmlStartTagInBody(e,t);break;case TAG_ID.BASE:case TAG_ID.LINK:case TAG_ID.META:case TAG_ID.STYLE:case TAG_ID.TITLE:case TAG_ID.SCRIPT:case TAG_ID.BGSOUND:case TAG_ID.BASEFONT:case TAG_ID.TEMPLATE:startTagInHead(e,t);break;case TAG_ID.BODY:bodyStartTagInBody(e,t);break;case TAG_ID.FORM:formStartTagInBody(e,t);break;case TAG_ID.NOBR:nobrStartTagInBody(e,t);break;case TAG_ID.MATH:mathStartTagInBody(e,t);break;case TAG_ID.TABLE:tableStartTagInBody(e,t);break;case TAG_ID.INPUT:inputStartTagInBody(e,t);break;case TAG_ID.PARAM:case TAG_ID.TRACK:case TAG_ID.SOURCE:paramStartTagInBody(e,t);break;case TAG_ID.IMAGE:imageStartTagInBody(e,t);break;case TAG_ID.BUTTON:buttonStartTagInBody(e,t);break;case TAG_ID.APPLET:case TAG_ID.OBJECT:case TAG_ID.MARQUEE:appletStartTagInBody(e,t);break;case TAG_ID.IFRAME:iframeStartTagInBody(e,t);break;case TAG_ID.SELECT:selectStartTagInBody(e,t);break;case TAG_ID.OPTION:case TAG_ID.OPTGROUP:optgroupStartTagInBody(e,t);break;case TAG_ID.NOEMBED:case TAG_ID.NOFRAMES:rawTextStartTagInBody(e,t);break;case TAG_ID.FRAMESET:framesetStartTagInBody(e,t);break;case TAG_ID.TEXTAREA:textareaStartTagInBody(e,t);break;case TAG_ID.NOSCRIPT:e.options.scriptingEnabled?rawTextStartTagInBody(e,t):genericStartTagInBody(e,t);break;case TAG_ID.PLAINTEXT:plaintextStartTagInBody(e,t);break;case TAG_ID.COL:case TAG_ID.TH:case TAG_ID.TD:case TAG_ID.TR:case TAG_ID.HEAD:case TAG_ID.FRAME:case TAG_ID.TBODY:case TAG_ID.TFOOT:case TAG_ID.THEAD:case TAG_ID.CAPTION:case TAG_ID.COLGROUP:break;default:genericStartTagInBody(e,t)}}function bodyEndTagInBody(e,t){if(e.openElements.hasInScope(TAG_ID.BODY)&&(e.insertionMode=InsertionMode.AFTER_BODY,e.options.sourceCodeLocationInfo)){let S=e.openElements.tryPeekProperlyNestedBodyElement();S&&e._setEndLocation(S,t)}}function htmlEndTagInBody(e,t){e.openElements.hasInScope(TAG_ID.BODY)&&(e.insertionMode=InsertionMode.AFTER_BODY,endTagAfterBody(e,t))}function addressEndTagInBody(e,t){let S=t.tagID;e.openElements.hasInScope(S)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(S))}function formEndTagInBody(e){let t=e.openElements.tmplCount>0,{formElement:S}=e;t||(e.formElement=null),(S||t)&&e.openElements.hasInScope(TAG_ID.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(TAG_ID.FORM):S&&e.openElements.remove(S))}function pEndTagInBody(e){e.openElements.hasInButtonScope(TAG_ID.P)||e._insertFakeElement(TAG_NAMES.P,TAG_ID.P),e._closePElement()}function liEndTagInBody(e){e.openElements.hasInListItemScope(TAG_ID.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(TAG_ID.LI),e.openElements.popUntilTagNamePopped(TAG_ID.LI))}function ddEndTagInBody(e,t){let S=t.tagID;e.openElements.hasInScope(S)&&(e.openElements.generateImpliedEndTagsWithExclusion(S),e.openElements.popUntilTagNamePopped(S))}function numberedHeaderEndTagInBody(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function appletEndTagInBody(e,t){let S=t.tagID;e.openElements.hasInScope(S)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(S),e.activeFormattingElements.clearToLastMarker())}function brEndTagInBody(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(TAG_NAMES.BR,TAG_ID.BR),e.openElements.pop(),e.framesetOk=!1}function genericEndTagInBody(e,t){let S=t.tagName,w=t.tagID;for(let t=e.openElements.stackTop;t>0;t--){let E=e.openElements.items[t],D=e.openElements.tagIDs[t];if(w===D&&(w!==TAG_ID.UNKNOWN||e.treeAdapter.getTagName(E)===S)){e.openElements.generateImpliedEndTagsWithExclusion(w),e.openElements.stackTop>=t&&e.openElements.shortenToLength(t);break}if(e._isSpecialElement(E,D))break}}function endTagInBody(e,t){switch(t.tagID){case TAG_ID.A:case TAG_ID.B:case TAG_ID.I:case TAG_ID.S:case TAG_ID.U:case TAG_ID.EM:case TAG_ID.TT:case TAG_ID.BIG:case TAG_ID.CODE:case TAG_ID.FONT:case TAG_ID.NOBR:case TAG_ID.SMALL:case TAG_ID.STRIKE:case TAG_ID.STRONG:callAdoptionAgency(e,t);break;case TAG_ID.P:pEndTagInBody(e);break;case TAG_ID.DL:case TAG_ID.UL:case TAG_ID.OL:case TAG_ID.DIR:case TAG_ID.DIV:case TAG_ID.NAV:case TAG_ID.PRE:case TAG_ID.MAIN:case TAG_ID.MENU:case TAG_ID.ASIDE:case TAG_ID.BUTTON:case TAG_ID.CENTER:case TAG_ID.FIGURE:case TAG_ID.FOOTER:case TAG_ID.HEADER:case TAG_ID.HGROUP:case TAG_ID.DIALOG:case TAG_ID.ADDRESS:case TAG_ID.ARTICLE:case TAG_ID.DETAILS:case TAG_ID.SEARCH:case TAG_ID.SECTION:case TAG_ID.SUMMARY:case TAG_ID.LISTING:case TAG_ID.FIELDSET:case TAG_ID.BLOCKQUOTE:case TAG_ID.FIGCAPTION:addressEndTagInBody(e,t);break;case TAG_ID.LI:liEndTagInBody(e);break;case TAG_ID.DD:case TAG_ID.DT:ddEndTagInBody(e,t);break;case TAG_ID.H1:case TAG_ID.H2:case TAG_ID.H3:case TAG_ID.H4:case TAG_ID.H5:case TAG_ID.H6:numberedHeaderEndTagInBody(e);break;case TAG_ID.BR:brEndTagInBody(e);break;case TAG_ID.BODY:bodyEndTagInBody(e,t);break;case TAG_ID.HTML:htmlEndTagInBody(e,t);break;case TAG_ID.FORM:formEndTagInBody(e);break;case TAG_ID.APPLET:case TAG_ID.OBJECT:case TAG_ID.MARQUEE:appletEndTagInBody(e,t);break;case TAG_ID.TEMPLATE:templateEndTagInHead(e,t);break;default:genericEndTagInBody(e,t)}}function eofInBody(e,t){e.tmplInsertionModeStack.length>0?eofInTemplate(e,t):stopParsing(e,t)}function endTagInText(e,t){var S;t.tagID===TAG_ID.SCRIPT&&((S=e.scriptHandler)==null||S.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function eofInText(e,t){e._err(t,ERR.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}function characterInTable(e,t){if(e.openElements.currentTagId!==void 0&&TABLE_STRUCTURE_TAGS.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=InsertionMode.IN_TABLE_TEXT,t.type){case TokenType.CHARACTER:characterInTableText(e,t);break;case TokenType.WHITESPACE_CHARACTER:whitespaceCharacterInTableText(e,t);break}else tokenInTable(e,t)}function captionStartTagInTable(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,NS.HTML),e.insertionMode=InsertionMode.IN_CAPTION}function colgroupStartTagInTable(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,NS.HTML),e.insertionMode=InsertionMode.IN_COLUMN_GROUP}function colStartTagInTable(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(TAG_NAMES.COLGROUP,TAG_ID.COLGROUP),e.insertionMode=InsertionMode.IN_COLUMN_GROUP,startTagInColumnGroup(e,t)}function tbodyStartTagInTable(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,NS.HTML),e.insertionMode=InsertionMode.IN_TABLE_BODY}function tdStartTagInTable(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(TAG_NAMES.TBODY,TAG_ID.TBODY),e.insertionMode=InsertionMode.IN_TABLE_BODY,startTagInTableBody(e,t)}function tableStartTagInTable(e,t){e.openElements.hasInTableScope(TAG_ID.TABLE)&&(e.openElements.popUntilTagNamePopped(TAG_ID.TABLE),e._resetInsertionMode(),e._processStartTag(t))}function inputStartTagInTable(e,t){isHiddenInput(t)?e._appendElement(t,NS.HTML):tokenInTable(e,t),t.ackSelfClosing=!0}function formStartTagInTable(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,NS.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function startTagInTable(e,t){switch(t.tagID){case TAG_ID.TD:case TAG_ID.TH:case TAG_ID.TR:tdStartTagInTable(e,t);break;case TAG_ID.STYLE:case TAG_ID.SCRIPT:case TAG_ID.TEMPLATE:startTagInHead(e,t);break;case TAG_ID.COL:colStartTagInTable(e,t);break;case TAG_ID.FORM:formStartTagInTable(e,t);break;case TAG_ID.TABLE:tableStartTagInTable(e,t);break;case TAG_ID.TBODY:case TAG_ID.TFOOT:case TAG_ID.THEAD:tbodyStartTagInTable(e,t);break;case TAG_ID.INPUT:inputStartTagInTable(e,t);break;case TAG_ID.CAPTION:captionStartTagInTable(e,t);break;case TAG_ID.COLGROUP:colgroupStartTagInTable(e,t);break;default:tokenInTable(e,t)}}function endTagInTable(e,t){switch(t.tagID){case TAG_ID.TABLE:e.openElements.hasInTableScope(TAG_ID.TABLE)&&(e.openElements.popUntilTagNamePopped(TAG_ID.TABLE),e._resetInsertionMode());break;case TAG_ID.TEMPLATE:templateEndTagInHead(e,t);break;case TAG_ID.BODY:case TAG_ID.CAPTION:case TAG_ID.COL:case TAG_ID.COLGROUP:case TAG_ID.HTML:case TAG_ID.TBODY:case TAG_ID.TD:case TAG_ID.TFOOT:case TAG_ID.TH:case TAG_ID.THEAD:case TAG_ID.TR:break;default:tokenInTable(e,t)}}function tokenInTable(e,t){let S=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,modeInBody(e,t),e.fosterParentingEnabled=S}function whitespaceCharacterInTableText(e,t){e.pendingCharacterTokens.push(t)}function characterInTableText(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function tokenInTableText(e,t){let S=0;if(e.hasNonWhitespacePendingCharacterToken)for(;S<e.pendingCharacterTokens.length;S++)tokenInTable(e,e.pendingCharacterTokens[S]);else for(;S<e.pendingCharacterTokens.length;S++)e._insertCharacters(e.pendingCharacterTokens[S]);e.insertionMode=e.originalInsertionMode,e._processToken(t)}const TABLE_VOID_ELEMENTS=new Set([TAG_ID.CAPTION,TAG_ID.COL,TAG_ID.COLGROUP,TAG_ID.TBODY,TAG_ID.TD,TAG_ID.TFOOT,TAG_ID.TH,TAG_ID.THEAD,TAG_ID.TR]);function startTagInCaption(e,t){let S=t.tagID;TABLE_VOID_ELEMENTS.has(S)?e.openElements.hasInTableScope(TAG_ID.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(TAG_ID.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=InsertionMode.IN_TABLE,startTagInTable(e,t)):startTagInBody(e,t)}function endTagInCaption(e,t){let S=t.tagID;switch(S){case TAG_ID.CAPTION:case TAG_ID.TABLE:e.openElements.hasInTableScope(TAG_ID.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(TAG_ID.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=InsertionMode.IN_TABLE,S===TAG_ID.TABLE&&endTagInTable(e,t));break;case TAG_ID.BODY:case TAG_ID.COL:case TAG_ID.COLGROUP:case TAG_ID.HTML:case TAG_ID.TBODY:case TAG_ID.TD:case TAG_ID.TFOOT:case TAG_ID.TH:case TAG_ID.THEAD:case TAG_ID.TR:break;default:endTagInBody(e,t)}}function startTagInColumnGroup(e,t){switch(t.tagID){case TAG_ID.HTML:startTagInBody(e,t);break;case TAG_ID.COL:e._appendElement(t,NS.HTML),t.ackSelfClosing=!0;break;case TAG_ID.TEMPLATE:startTagInHead(e,t);break;default:tokenInColumnGroup(e,t)}}function endTagInColumnGroup(e,t){switch(t.tagID){case TAG_ID.COLGROUP:e.openElements.currentTagId===TAG_ID.COLGROUP&&(e.openElements.pop(),e.insertionMode=InsertionMode.IN_TABLE);break;case TAG_ID.TEMPLATE:templateEndTagInHead(e,t);break;case TAG_ID.COL:break;default:tokenInColumnGroup(e,t)}}function tokenInColumnGroup(e,t){e.openElements.currentTagId===TAG_ID.COLGROUP&&(e.openElements.pop(),e.insertionMode=InsertionMode.IN_TABLE,e._processToken(t))}function startTagInTableBody(e,t){switch(t.tagID){case TAG_ID.TR:e.openElements.clearBackToTableBodyContext(),e._insertElement(t,NS.HTML),e.insertionMode=InsertionMode.IN_ROW;break;case TAG_ID.TH:case TAG_ID.TD:e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(TAG_NAMES.TR,TAG_ID.TR),e.insertionMode=InsertionMode.IN_ROW,startTagInRow(e,t);break;case TAG_ID.CAPTION:case TAG_ID.COL:case TAG_ID.COLGROUP:case TAG_ID.TBODY:case TAG_ID.TFOOT:case TAG_ID.THEAD:e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=InsertionMode.IN_TABLE,startTagInTable(e,t));break;default:startTagInTable(e,t)}}function endTagInTableBody(e,t){let S=t.tagID;switch(t.tagID){case TAG_ID.TBODY:case TAG_ID.TFOOT:case TAG_ID.THEAD:e.openElements.hasInTableScope(S)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=InsertionMode.IN_TABLE);break;case TAG_ID.TABLE:e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=InsertionMode.IN_TABLE,endTagInTable(e,t));break;case TAG_ID.BODY:case TAG_ID.CAPTION:case TAG_ID.COL:case TAG_ID.COLGROUP:case TAG_ID.HTML:case TAG_ID.TD:case TAG_ID.TH:case TAG_ID.TR:break;default:endTagInTable(e,t)}}function startTagInRow(e,t){switch(t.tagID){case TAG_ID.TH:case TAG_ID.TD:e.openElements.clearBackToTableRowContext(),e._insertElement(t,NS.HTML),e.insertionMode=InsertionMode.IN_CELL,e.activeFormattingElements.insertMarker();break;case TAG_ID.CAPTION:case TAG_ID.COL:case TAG_ID.COLGROUP:case TAG_ID.TBODY:case TAG_ID.TFOOT:case TAG_ID.THEAD:case TAG_ID.TR:e.openElements.hasInTableScope(TAG_ID.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=InsertionMode.IN_TABLE_BODY,startTagInTableBody(e,t));break;default:startTagInTable(e,t)}}function endTagInRow(e,t){switch(t.tagID){case TAG_ID.TR:e.openElements.hasInTableScope(TAG_ID.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=InsertionMode.IN_TABLE_BODY);break;case TAG_ID.TABLE:e.openElements.hasInTableScope(TAG_ID.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=InsertionMode.IN_TABLE_BODY,endTagInTableBody(e,t));break;case TAG_ID.TBODY:case TAG_ID.TFOOT:case TAG_ID.THEAD:(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(TAG_ID.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=InsertionMode.IN_TABLE_BODY,endTagInTableBody(e,t));break;case TAG_ID.BODY:case TAG_ID.CAPTION:case TAG_ID.COL:case TAG_ID.COLGROUP:case TAG_ID.HTML:case TAG_ID.TD:case TAG_ID.TH:break;default:endTagInTable(e,t)}}function startTagInCell(e,t){let S=t.tagID;TABLE_VOID_ELEMENTS.has(S)?(e.openElements.hasInTableScope(TAG_ID.TD)||e.openElements.hasInTableScope(TAG_ID.TH))&&(e._closeTableCell(),startTagInRow(e,t)):startTagInBody(e,t)}function endTagInCell(e,t){let S=t.tagID;switch(S){case TAG_ID.TD:case TAG_ID.TH:e.openElements.hasInTableScope(S)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(S),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=InsertionMode.IN_ROW);break;case TAG_ID.TABLE:case TAG_ID.TBODY:case TAG_ID.TFOOT:case TAG_ID.THEAD:case TAG_ID.TR:e.openElements.hasInTableScope(S)&&(e._closeTableCell(),endTagInRow(e,t));break;case TAG_ID.BODY:case TAG_ID.CAPTION:case TAG_ID.COL:case TAG_ID.COLGROUP:case TAG_ID.HTML:break;default:endTagInBody(e,t)}}function startTagInSelect(e,t){switch(t.tagID){case TAG_ID.HTML:startTagInBody(e,t);break;case TAG_ID.OPTION:e.openElements.currentTagId===TAG_ID.OPTION&&e.openElements.pop(),e._insertElement(t,NS.HTML);break;case TAG_ID.OPTGROUP:e.openElements.currentTagId===TAG_ID.OPTION&&e.openElements.pop(),e.openElements.currentTagId===TAG_ID.OPTGROUP&&e.openElements.pop(),e._insertElement(t,NS.HTML);break;case TAG_ID.HR:e.openElements.currentTagId===TAG_ID.OPTION&&e.openElements.pop(),e.openElements.currentTagId===TAG_ID.OPTGROUP&&e.openElements.pop(),e._appendElement(t,NS.HTML),t.ackSelfClosing=!0;break;case TAG_ID.INPUT:case TAG_ID.KEYGEN:case TAG_ID.TEXTAREA:case TAG_ID.SELECT:e.openElements.hasInSelectScope(TAG_ID.SELECT)&&(e.openElements.popUntilTagNamePopped(TAG_ID.SELECT),e._resetInsertionMode(),t.tagID!==TAG_ID.SELECT&&e._processStartTag(t));break;case TAG_ID.SCRIPT:case TAG_ID.TEMPLATE:startTagInHead(e,t);break;default:}}function endTagInSelect(e,t){switch(t.tagID){case TAG_ID.OPTGROUP:e.openElements.stackTop>0&&e.openElements.currentTagId===TAG_ID.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===TAG_ID.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===TAG_ID.OPTGROUP&&e.openElements.pop();break;case TAG_ID.OPTION:e.openElements.currentTagId===TAG_ID.OPTION&&e.openElements.pop();break;case TAG_ID.SELECT:e.openElements.hasInSelectScope(TAG_ID.SELECT)&&(e.openElements.popUntilTagNamePopped(TAG_ID.SELECT),e._resetInsertionMode());break;case TAG_ID.TEMPLATE:templateEndTagInHead(e,t);break;default:}}function startTagInSelectInTable(e,t){let S=t.tagID;S===TAG_ID.CAPTION||S===TAG_ID.TABLE||S===TAG_ID.TBODY||S===TAG_ID.TFOOT||S===TAG_ID.THEAD||S===TAG_ID.TR||S===TAG_ID.TD||S===TAG_ID.TH?(e.openElements.popUntilTagNamePopped(TAG_ID.SELECT),e._resetInsertionMode(),e._processStartTag(t)):startTagInSelect(e,t)}function endTagInSelectInTable(e,t){let S=t.tagID;S===TAG_ID.CAPTION||S===TAG_ID.TABLE||S===TAG_ID.TBODY||S===TAG_ID.TFOOT||S===TAG_ID.THEAD||S===TAG_ID.TR||S===TAG_ID.TD||S===TAG_ID.TH?e.openElements.hasInTableScope(S)&&(e.openElements.popUntilTagNamePopped(TAG_ID.SELECT),e._resetInsertionMode(),e.onEndTag(t)):endTagInSelect(e,t)}function startTagInTemplate(e,t){switch(t.tagID){case TAG_ID.BASE:case TAG_ID.BASEFONT:case TAG_ID.BGSOUND:case TAG_ID.LINK:case TAG_ID.META:case TAG_ID.NOFRAMES:case TAG_ID.SCRIPT:case TAG_ID.STYLE:case TAG_ID.TEMPLATE:case TAG_ID.TITLE:startTagInHead(e,t);break;case TAG_ID.CAPTION:case TAG_ID.COLGROUP:case TAG_ID.TBODY:case TAG_ID.TFOOT:case TAG_ID.THEAD:e.tmplInsertionModeStack[0]=InsertionMode.IN_TABLE,e.insertionMode=InsertionMode.IN_TABLE,startTagInTable(e,t);break;case TAG_ID.COL:e.tmplInsertionModeStack[0]=InsertionMode.IN_COLUMN_GROUP,e.insertionMode=InsertionMode.IN_COLUMN_GROUP,startTagInColumnGroup(e,t);break;case TAG_ID.TR:e.tmplInsertionModeStack[0]=InsertionMode.IN_TABLE_BODY,e.insertionMode=InsertionMode.IN_TABLE_BODY,startTagInTableBody(e,t);break;case TAG_ID.TD:case TAG_ID.TH:e.tmplInsertionModeStack[0]=InsertionMode.IN_ROW,e.insertionMode=InsertionMode.IN_ROW,startTagInRow(e,t);break;default:e.tmplInsertionModeStack[0]=InsertionMode.IN_BODY,e.insertionMode=InsertionMode.IN_BODY,startTagInBody(e,t)}}function endTagInTemplate(e,t){t.tagID===TAG_ID.TEMPLATE&&templateEndTagInHead(e,t)}function eofInTemplate(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(TAG_ID.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):stopParsing(e,t)}function startTagAfterBody(e,t){t.tagID===TAG_ID.HTML?startTagInBody(e,t):tokenAfterBody(e,t)}function endTagAfterBody(e,t){var S;if(t.tagID===TAG_ID.HTML){if(e.fragmentContext||(e.insertionMode=InsertionMode.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===TAG_ID.HTML){e._setEndLocation(e.openElements.items[0],t);let S=e.openElements.items[1];S&&!e.treeAdapter.getNodeSourceCodeLocation(S)?.endTag&&e._setEndLocation(S,t)}}else tokenAfterBody(e,t)}function tokenAfterBody(e,t){e.insertionMode=InsertionMode.IN_BODY,modeInBody(e,t)}function startTagInFrameset(e,t){switch(t.tagID){case TAG_ID.HTML:startTagInBody(e,t);break;case TAG_ID.FRAMESET:e._insertElement(t,NS.HTML);break;case TAG_ID.FRAME:e._appendElement(t,NS.HTML),t.ackSelfClosing=!0;break;case TAG_ID.NOFRAMES:startTagInHead(e,t);break;default:}}function endTagInFrameset(e,t){t.tagID===TAG_ID.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==TAG_ID.FRAMESET&&(e.insertionMode=InsertionMode.AFTER_FRAMESET))}function startTagAfterFrameset(e,t){switch(t.tagID){case TAG_ID.HTML:startTagInBody(e,t);break;case TAG_ID.NOFRAMES:startTagInHead(e,t);break;default:}}function endTagAfterFrameset(e,t){t.tagID===TAG_ID.HTML&&(e.insertionMode=InsertionMode.AFTER_AFTER_FRAMESET)}function startTagAfterAfterBody(e,t){t.tagID===TAG_ID.HTML?startTagInBody(e,t):tokenAfterAfterBody(e,t)}function tokenAfterAfterBody(e,t){e.insertionMode=InsertionMode.IN_BODY,modeInBody(e,t)}function startTagAfterAfterFrameset(e,t){switch(t.tagID){case TAG_ID.HTML:startTagInBody(e,t);break;case TAG_ID.NOFRAMES:startTagInHead(e,t);break;default:}}function nullCharacterInForeignContent(e,t){t.chars=`�`,e._insertCharacters(t)}function characterInForeignContent(e,t){e._insertCharacters(t),e.framesetOk=!1}function popUntilHtmlOrIntegrationPoint(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==NS.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function startTagInForeignContent(e,t){if(causesExit(t))popUntilHtmlOrIntegrationPoint(e),e._startTagOutsideForeignContent(t);else{let S=e._getAdjustedCurrentElement(),w=e.treeAdapter.getNamespaceURI(S);w===NS.MATHML?adjustTokenMathMLAttrs(t):w===NS.SVG&&(adjustTokenSVGTagName(t),adjustTokenSVGAttrs(t)),adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,w):e._insertElement(t,w),t.ackSelfClosing=!0}}function endTagInForeignContent(e,t){if(t.tagID===TAG_ID.P||t.tagID===TAG_ID.BR){popUntilHtmlOrIntegrationPoint(e),e._endTagOutsideForeignContent(t);return}for(let S=e.openElements.stackTop;S>0;S--){let w=e.openElements.items[S];if(e.treeAdapter.getNamespaceURI(w)===NS.HTML){e._endTagOutsideForeignContent(t);break}let E=e.treeAdapter.getTagName(w);if(E.toLowerCase()===t.tagName){t.tagName=E,e.openElements.shortenToLength(S);break}}}const VOID_ELEMENTS=new Set([TAG_NAMES.AREA,TAG_NAMES.BASE,TAG_NAMES.BASEFONT,TAG_NAMES.BGSOUND,TAG_NAMES.BR,TAG_NAMES.COL,TAG_NAMES.EMBED,TAG_NAMES.FRAME,TAG_NAMES.HR,TAG_NAMES.IMG,TAG_NAMES.INPUT,TAG_NAMES.KEYGEN,TAG_NAMES.LINK,TAG_NAMES.META,TAG_NAMES.PARAM,TAG_NAMES.SOURCE,TAG_NAMES.TRACK,TAG_NAMES.WBR]);function parse$2(e,t){return Parser.parse(e,t)}function parseFragment(e,t,S){typeof e==`string`&&(S=t,t=e,e=null);let w=Parser.getFragmentParser(e,S);return w.tokenizer.write(t,!0),w.getFragment()}function isUrl(e){return!!(typeof e==`object`&&e&&`href`in e&&e.href&&`protocol`in e&&e.protocol&&e.auth===void 0)}const order=[`history`,`path`,`basename`,`stem`,`extname`,`dirname`];var VFile=class{constructor(e){let t;t=e?isUrl(e)?{path:e}:typeof e==`string`||isUint8Array$2(e)?{value:e}:e:{},this.cwd=`cwd`in t?``:minproc.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let S=-1;for(;++S<order.length;){let e=order[S];e in t&&t[e]!==void 0&&t[e]!==null&&(this[e]=e===`history`?[...t[e]]:t[e])}let w;for(w in t)order.includes(w)||(this[w]=t[w])}get basename(){return typeof this.path==`string`?minpath.basename(this.path):void 0}set basename(e){assertNonEmpty(e,`basename`),assertPart(e,`basename`),this.path=minpath.join(this.dirname||``,e)}get dirname(){return typeof this.path==`string`?minpath.dirname(this.path):void 0}set dirname(e){assertPath(this.basename,`dirname`),this.path=minpath.join(e||``,this.basename)}get extname(){return typeof this.path==`string`?minpath.extname(this.path):void 0}set extname(e){if(assertPart(e,`extname`),assertPath(this.dirname,`extname`),e){if(e.codePointAt(0)!==46)throw Error("`extname` must start with `.`");if(e.includes(`.`,1))throw Error("`extname` cannot contain multiple dots")}this.path=minpath.join(this.dirname,this.stem+(e||``))}get path(){return this.history[this.history.length-1]}set path(e){isUrl(e)&&(e=urlToPath(e)),assertNonEmpty(e,`path`),this.path!==e&&this.history.push(e)}get stem(){return typeof this.path==`string`?minpath.basename(this.path,this.extname):void 0}set stem(e){assertNonEmpty(e,`stem`),assertPart(e,`stem`),this.path=minpath.join(this.dirname||``,e+(this.extname||``))}fail(e,t,S){let w=this.message(e,t,S);throw w.fatal=!0,w}info(e,t,S){let w=this.message(e,t,S);return w.fatal=void 0,w}message(e,t,S){let w=new VFileMessage(e,t,S);return this.path&&(w.name=this.path+`:`+w.name,w.file=this.path),w.fatal=!1,this.messages.push(w),w}toString(e){return this.value===void 0?``:typeof this.value==`string`?this.value:new TextDecoder(e||void 0).decode(this.value)}};function assertPart(e,t){if(e&&e.includes(minpath.sep))throw Error("`"+t+"` cannot be a path: did not expect `"+minpath.sep+"`")}function assertNonEmpty(e,t){if(!e)throw Error("`"+t+"` cannot be empty")}function assertPath(e,t){if(!e)throw Error("Setting `"+t+"` requires `path` to be set too")}function isUint8Array$2(e){return!!(e&&typeof e==`object`&&`byteLength`in e&&`byteOffset`in e)}const errors$1={abandonedHeadElementChild:{reason:`Unexpected metadata element after head`,description:"Unexpected element after head. Expected the element before `</head>`",url:!1},abruptClosingOfEmptyComment:{reason:`Unexpected abruptly closed empty comment`,description:"Unexpected `>` or `->`. Expected `-->` to close comments"},abruptDoctypePublicIdentifier:{reason:`Unexpected abruptly closed public identifier`,description:"Unexpected `>`. Expected a closing `\"` or `'` after the public identifier"},abruptDoctypeSystemIdentifier:{reason:`Unexpected abruptly closed system identifier`,description:"Unexpected `>`. Expected a closing `\"` or `'` after the identifier identifier"},absenceOfDigitsInNumericCharacterReference:{reason:`Unexpected non-digit at start of numeric character reference`,description:"Unexpected `%c`. Expected `[0-9]` for decimal references or `[0-9a-fA-F]` for hexadecimal references"},cdataInHtmlContent:{reason:`Unexpected CDATA section in HTML`,description:"Unexpected `<![CDATA[` in HTML. Remove it, use a comment, or encode special characters instead"},characterReferenceOutsideUnicodeRange:{reason:`Unexpected too big numeric character reference`,description:`Unexpectedly high character reference. Expected character references to be at most hexadecimal 10ffff (or decimal 1114111)`},closingOfElementWithOpenChildElements:{reason:`Unexpected closing tag with open child elements`,description:`Unexpectedly closing tag. Expected other tags to be closed first`,url:!1},controlCharacterInInputStream:{reason:`Unexpected control character`,description:"Unexpected control character `%x`. Expected a non-control code point, 0x00, or ASCII whitespace"},controlCharacterReference:{reason:`Unexpected control character reference`,description:`Unexpectedly control character in reference. Expected a non-control code point, 0x00, or ASCII whitespace`},disallowedContentInNoscriptInHead:{reason:"Disallowed content inside `<noscript>` in `<head>`",description:"Unexpected text character `%c`. Only use text in `<noscript>`s in `<body>`",url:!1},duplicateAttribute:{reason:`Unexpected duplicate attribute`,description:`Unexpectedly double attribute. Expected attributes to occur only once`},endTagWithAttributes:{reason:`Unexpected attribute on closing tag`,description:"Unexpected attribute. Expected `>` instead"},endTagWithTrailingSolidus:{reason:`Unexpected slash at end of closing tag`,description:"Unexpected `%c-1`. Expected `>` instead"},endTagWithoutMatchingOpenElement:{reason:`Unexpected unopened end tag`,description:`Unexpected end tag. Expected no end tag or another end tag`,url:!1},eofBeforeTagName:{reason:`Unexpected end of file`,description:`Unexpected end of file. Expected tag name instead`},eofInCdata:{reason:`Unexpected end of file in CDATA`,description:"Unexpected end of file. Expected `]]>` to close the CDATA"},eofInComment:{reason:`Unexpected end of file in comment`,description:"Unexpected end of file. Expected `-->` to close the comment"},eofInDoctype:{reason:`Unexpected end of file in doctype`,description:"Unexpected end of file. Expected a valid doctype (such as `<!doctype html>`)"},eofInElementThatCanContainOnlyText:{reason:`Unexpected end of file in element that can only contain text`,description:`Unexpected end of file. Expected text or a closing tag`,url:!1},eofInScriptHtmlCommentLikeText:{reason:`Unexpected end of file in comment inside script`,description:"Unexpected end of file. Expected `-->` to close the comment"},eofInTag:{reason:`Unexpected end of file in tag`,description:"Unexpected end of file. Expected `>` to close the tag"},incorrectlyClosedComment:{reason:`Incorrectly closed comment`,description:"Unexpected `%c-1`. Expected `-->` to close the comment"},incorrectlyOpenedComment:{reason:`Incorrectly opened comment`,description:"Unexpected `%c`. Expected `<!--` to open the comment"},invalidCharacterSequenceAfterDoctypeName:{reason:`Invalid sequence after doctype name`,description:"Unexpected sequence at `%c`. Expected `public` or `system`"},invalidFirstCharacterOfTagName:{reason:`Invalid first character in tag name`,description:"Unexpected `%c`. Expected an ASCII letter instead"},misplacedDoctype:{reason:`Misplaced doctype`,description:`Unexpected doctype. Expected doctype before head`,url:!1},misplacedStartTagForHeadElement:{reason:"Misplaced `<head>` start tag",description:"Unexpected start tag `<head>`. Expected `<head>` directly after doctype",url:!1},missingAttributeValue:{reason:`Missing attribute value`,description:"Unexpected `%c-1`. Expected an attribute value or no `%c-1` instead"},missingDoctype:{reason:`Missing doctype before other content`,description:"Expected a `<!doctype html>` before anything else",url:!1},missingDoctypeName:{reason:`Missing doctype name`,description:"Unexpected doctype end at `%c`. Expected `html` instead"},missingDoctypePublicIdentifier:{reason:`Missing public identifier in doctype`,description:"Unexpected `%c`. Expected identifier for `public` instead"},missingDoctypeSystemIdentifier:{reason:`Missing system identifier in doctype`,description:'Unexpected `%c`. Expected identifier for `system` instead (suggested: `"about:legacy-compat"`)'},missingEndTagName:{reason:`Missing name in end tag`,description:"Unexpected `%c`. Expected an ASCII letter instead"},missingQuoteBeforeDoctypePublicIdentifier:{reason:`Missing quote before public identifier in doctype`,description:"Unexpected `%c`. Expected `\"` or `'` instead"},missingQuoteBeforeDoctypeSystemIdentifier:{reason:`Missing quote before system identifier in doctype`,description:"Unexpected `%c`. Expected `\"` or `'` instead"},missingSemicolonAfterCharacterReference:{reason:`Missing semicolon after character reference`,description:"Unexpected `%c`. Expected `;` instead"},missingWhitespaceAfterDoctypePublicKeyword:{reason:`Missing whitespace after public identifier in doctype`,description:"Unexpected `%c`. Expected ASCII whitespace instead"},missingWhitespaceAfterDoctypeSystemKeyword:{reason:`Missing whitespace after system identifier in doctype`,description:"Unexpected `%c`. Expected ASCII whitespace instead"},missingWhitespaceBeforeDoctypeName:{reason:`Missing whitespace before doctype name`,description:"Unexpected `%c`. Expected ASCII whitespace instead"},missingWhitespaceBetweenAttributes:{reason:`Missing whitespace between attributes`,description:"Unexpected `%c`. Expected ASCII whitespace instead"},missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers:{reason:`Missing whitespace between public and system identifiers in doctype`,description:"Unexpected `%c`. Expected ASCII whitespace instead"},nestedComment:{reason:`Unexpected nested comment`,description:"Unexpected `<!--`. Expected `-->`"},nestedNoscriptInHead:{reason:"Unexpected nested `<noscript>` in `<head>`",description:"Unexpected `<noscript>`. Expected a closing tag or a meta element",url:!1},nonConformingDoctype:{reason:`Unexpected non-conforming doctype declaration`,description:'Expected `<!doctype html>` or `<!doctype html system "about:legacy-compat">`',url:!1},nonVoidHtmlElementStartTagWithTrailingSolidus:{reason:`Unexpected trailing slash on start tag of non-void element`,description:"Unexpected `/`. Expected `>` instead"},noncharacterCharacterReference:{reason:`Unexpected noncharacter code point referenced by character reference`,description:`Unexpected code point. Do not use noncharacters in HTML`},noncharacterInInputStream:{reason:`Unexpected noncharacter character`,description:"Unexpected code point `%x`. Do not use noncharacters in HTML"},nullCharacterReference:{reason:`Unexpected NULL character referenced by character reference`,description:`Unexpected code point. Do not use NULL characters in HTML`},openElementsLeftAfterEof:{reason:`Unexpected end of file`,description:`Unexpected end of file. Expected closing tag instead`,url:!1},surrogateCharacterReference:{reason:`Unexpected surrogate character referenced by character reference`,description:`Unexpected code point. Do not use lone surrogate characters in HTML`},surrogateInInputStream:{reason:`Unexpected surrogate character`,description:"Unexpected code point `%x`. Do not use lone surrogate characters in HTML"},unexpectedCharacterAfterDoctypeSystemIdentifier:{reason:`Invalid character after system identifier in doctype`,description:"Unexpected character at `%c`. Expected `>`"},unexpectedCharacterInAttributeName:{reason:`Unexpected character in attribute name`,description:"Unexpected `%c`. Expected whitespace, `/`, `>`, `=`, or probably an ASCII letter"},unexpectedCharacterInUnquotedAttributeValue:{reason:`Unexpected character in unquoted attribute value`,description:"Unexpected `%c`. Quote the attribute value to include it"},unexpectedEqualsSignBeforeAttributeName:{reason:`Unexpected equals sign before attribute name`,description:"Unexpected `%c`. Add an attribute name before it"},unexpectedNullCharacter:{reason:`Unexpected NULL character`,description:"Unexpected code point `%x`. Do not use NULL characters in HTML"},unexpectedQuestionMarkInsteadOfTagName:{reason:`Unexpected question mark instead of tag name`,description:"Unexpected `%c`. Expected an ASCII letter instead"},unexpectedSolidusInTag:{reason:`Unexpected slash in tag`,description:"Unexpected `%c-1`. Expected it followed by `>` or in a quoted attribute value"},unknownNamedCharacterReference:{reason:`Unexpected unknown named character reference`,description:`Unexpected character reference. Expected known named character references`}},base=`https://html.spec.whatwg.org/multipage/parsing.html#parse-error-`,dashToCamelRe=/-[a-z]/g,formatCRe=/%c(?:([-+])(\d+))?/g,formatXRe=/%x/g,fatalities={2:!0,1:!1,0:null},emptyOptions$5={};function fromHtml(e,t){let S=t||emptyOptions$5,w=S.onerror,E=e instanceof VFile?e:new VFile(e),D=S.fragment?parseFragment:parse$2,O=String(E);return fromParse5(D(O,{sourceCodeLocationInfo:!0,onParseError:S.onerror?k:null,scriptingEnabled:!1}),{file:E,space:S.space,verbose:S.verbose});function k(e){let t=e.code,D=camelcase(t),k=S[D]??!0,j=typeof k==`number`?k:k?1:0;if(j){let S=errors$1[D],O=new VFileMessage(F(S.reason),{place:{start:{line:e.startLine,column:e.startCol,offset:e.startOffset},end:{line:e.endLine,column:e.endCol,offset:e.endOffset}},ruleId:t,source:`hast-util-from-html`});E.path&&(O.file=E.path,O.name=E.path+`:`+O.name),O.fatal=fatalities[j],O.note=F(S.description),O.url=S.url===!1?void 0:base+t,w(O)}function F(t){return t.replace(formatCRe,S).replace(formatXRe,w);function S(t,S,w){let E=(w?Number.parseInt(w,10):0)*(S===`-`?-1:1);return visualizeCharacter(O.charAt(e.startOffset+E))}function w(){return visualizeCharacterCode(O.charCodeAt(e.startOffset))}}}}function camelcase(e){return e.replace(dashToCamelRe,dashToCamel)}function dashToCamel(e){return e.charAt(1).toUpperCase()}function visualizeCharacter(e){return e==="`"?"` ` `":e}function visualizeCharacterCode(e){return`0x`+e.toString(16).toUpperCase()}const is$1=(function(e,t,S,w,E){let D=convert(t);if(S!=null&&(typeof S!=`number`||S<0||S===1/0))throw Error(`Expected positive finite index`);if(w!=null&&(!is$1(w)||!w.children))throw Error(`Expected parent node`);if(w==null!=(S==null))throw Error(`Expected both parent and index`);return looksLikeANode(e)?D.call(E,e,S,w):!1}),convert=(function(e){if(e==null)return ok$1;if(typeof e==`function`)return castFactory(e);if(typeof e==`object`)return Array.isArray(e)?anyFactory(e):propertiesFactory(e);if(typeof e==`string`)return typeFactory(e);throw Error(`Expected function, string, or object as test`)});function anyFactory(e){let t=[],S=-1;for(;++S<e.length;)t[S]=convert(e[S]);return castFactory(w);function w(...e){let S=-1;for(;++S<t.length;)if(t[S].apply(this,e))return!0;return!1}}function propertiesFactory(e){let t=e;return castFactory(S);function S(S){let w=S,E;for(E in e)if(w[E]!==t[E])return!1;return!0}}function typeFactory(e){return castFactory(t);function t(t){return t&&t.type===e}}function castFactory(e){return t;function t(t,S,w){return!!(looksLikeANode(t)&&e.call(this,t,typeof S==`number`?S:void 0,w||void 0))}}function ok$1(){return!0}function looksLikeANode(e){return typeof e==`object`&&!!e&&`type`in e}function color$1(e){return`\x1B[33m`+e+`\x1B[39m`}const empty$1=[],CONTINUE$1=!0,EXIT$1=!1,SKIP$1=`skip`;function visitParents(e,t,S,w){let E;typeof t==`function`&&typeof S!=`function`?(w=S,S=t):E=t;let D=convert(E),O=w?-1:1;k(e,void 0,[])();function k(e,E,j){let F=e&&typeof e==`object`?e:{};if(typeof F.type==`string`){let t=typeof F.tagName==`string`?F.tagName:typeof F.name==`string`?F.name:void 0;Object.defineProperty(L,`name`,{value:`node (`+color$1(e.type+(t?`<`+t+`>`:``))+`)`})}return L;function L(){let F=empty$1,L,B,H;if((!t||D(e,E,j[j.length-1]||void 0))&&(F=toResult$1(S(e,j)),F[0]===!1))return F;if(`children`in e&&e.children){let t=e;if(t.children&&F[0]!==`skip`)for(B=(w?t.children.length:-1)+O,H=j.concat(t);B>-1&&B<t.children.length;){let e=t.children[B];if(L=k(e,B,H)(),L[0]===!1)return L;B=typeof L[1]==`number`?L[1]:B+O}}return F}}}function toResult$1(e){return Array.isArray(e)?e:typeof e==`number`?[!0,e]:e==null?empty$1:[e]}function visit$1(e,t,S,w){let E,D,O;typeof t==`function`&&typeof S!=`function`?(D=void 0,O=t,E=S):(D=t,O=S,E=w),visitParents(e,D,k,E);function k(e,t){let S=t[t.length-1],w=S?S.children.indexOf(e):void 0;return O(e,w,S)}}const emptyOptions$4={};function toString(e,t){let S=t||emptyOptions$4;return one(e,typeof S.includeImageAlt==`boolean`?S.includeImageAlt:!0,typeof S.includeHtml==`boolean`?S.includeHtml:!0)}function one(e,t,S){if(node(e)){if(`value`in e)return e.type===`html`&&!S?``:e.value;if(t&&`alt`in e&&e.alt)return e.alt;if(`children`in e)return all$1(e.children,t,S)}return Array.isArray(e)?all$1(e,t,S):``}function all$1(e,t,S){let w=[],E=-1;for(;++E<e.length;)w[E]=one(e[E],t,S);return w.join(``)}function node(e){return!!(e&&typeof e==`object`)}const phrasing=convert([`break`,`delete`,`emphasis`,`footnote`,`footnoteReference`,`image`,`imageReference`,`inlineCode`,`inlineMath`,`link`,`linkReference`,`mdxJsxTextElement`,`mdxTextExpression`,`strong`,`text`,`textDirective`]);function ccount(e,t){let S=String(e);if(typeof t!=`string`)throw TypeError(`Expected character`);let w=0,E=S.indexOf(t);for(;E!==-1;)w++,E=S.indexOf(t,E+t.length);return w}const asciiAlpha=regexCheck(/[A-Za-z]/),asciiAlphanumeric=regexCheck(/[\dA-Za-z]/),asciiAtext=regexCheck(/[#-'*+\--9=?A-Z^-~]/);function asciiControl(e){return e!==null&&(e<32||e===127)}const asciiDigit=regexCheck(/\d/),asciiHexDigit=regexCheck(/[\dA-Fa-f]/),asciiPunctuation=regexCheck(/[!-/:-@[-`{-~]/);function markdownLineEnding(e){return e!==null&&e<-2}function markdownLineEndingOrSpace(e){return e!==null&&(e<0||e===32)}function markdownSpace(e){return e===-2||e===-1||e===32}const unicodePunctuation=regexCheck(/\p{P}|\p{S}/u),unicodeWhitespace=regexCheck(/\s/);function regexCheck(e){return t;function t(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}function escapeStringRegexp(e){if(typeof e!=`string`)throw TypeError(`Expected a string`);return e.replace(/[|\\{}()[\]^$+*?.]/g,`\\$&`).replace(/-/g,`\\x2d`)}function findAndReplace(e,t,S){let w=convert((S||{}).ignore||[]),E=toPairs(t),D=-1;for(;++D<E.length;)visitParents(e,`text`,O);function O(e,t){let S=-1,E;for(;++S<t.length;){let e=t[S],D=E?E.children:void 0;if(w(e,D?D.indexOf(e):void 0,E))return;E=e}if(E)return k(e,t)}function k(e,t){let S=t[t.length-1],w=E[D][0],O=E[D][1],k=0,j=S.children.indexOf(e),F=!1,L=[];w.lastIndex=0;let B=w.exec(e.value);for(;B;){let S=B.index,E={index:B.index,input:B.input,stack:[...t,e]},D=O(...B,E);if(typeof D==`string`&&(D=D.length>0?{type:`text`,value:D}:void 0),D===!1?w.lastIndex=S+1:(k!==S&&L.push({type:`text`,value:e.value.slice(k,S)}),Array.isArray(D)?L.push(...D):D&&L.push(D),k=S+B[0].length,F=!0),!w.global)break;B=w.exec(e.value)}return F?(k<e.value.length&&L.push({type:`text`,value:e.value.slice(k)}),S.children.splice(j,1,...L)):L=[e],j+L.length}}function toPairs(e){let t=[];if(!Array.isArray(e))throw TypeError(`Expected find and replace tuple or list of tuples`);let S=!e[0]||Array.isArray(e[0])?e:[e],w=-1;for(;++w<S.length;){let e=S[w];t.push([toExpression(e[0]),toFunction(e[1])])}return t}function toExpression(e){return typeof e==`string`?new RegExp(escapeStringRegexp(e),`g`):e}function toFunction(e){return typeof e==`function`?e:function(){return e}}const inConstruct=`phrasing`,notInConstruct=[`autolink`,`link`,`image`,`label`];function gfmAutolinkLiteralFromMarkdown(){return{transforms:[transformGfmAutolinkLiterals],enter:{literalAutolink:enterLiteralAutolink,literalAutolinkEmail:enterLiteralAutolinkValue,literalAutolinkHttp:enterLiteralAutolinkValue,literalAutolinkWww:enterLiteralAutolinkValue},exit:{literalAutolink:exitLiteralAutolink,literalAutolinkEmail:exitLiteralAutolinkEmail,literalAutolinkHttp:exitLiteralAutolinkHttp,literalAutolinkWww:exitLiteralAutolinkWww}}}function gfmAutolinkLiteralToMarkdown(){return{unsafe:[{character:`@`,before:`[+\\-.\\w]`,after:`[\\-.\\w]`,inConstruct,notInConstruct},{character:`.`,before:`[Ww]`,after:`[\\-.\\w]`,inConstruct,notInConstruct},{character:`:`,before:`[ps]`,after:`\\/`,inConstruct,notInConstruct}]}}function enterLiteralAutolink(e){this.enter({type:`link`,title:null,url:``,children:[]},e)}function enterLiteralAutolinkValue(e){this.config.enter.autolinkProtocol.call(this,e)}function exitLiteralAutolinkHttp(e){this.config.exit.autolinkProtocol.call(this,e)}function exitLiteralAutolinkWww(e){this.config.exit.data.call(this,e);let t=this.stack[this.stack.length-1];t.type,t.url=`http://`+this.sliceSerialize(e)}function exitLiteralAutolinkEmail(e){this.config.exit.autolinkEmail.call(this,e)}function exitLiteralAutolink(e){this.exit(e)}function transformGfmAutolinkLiterals(e){findAndReplace(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi,findUrl],[/(?<=^|\s|\p{P}|\p{S})([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/gu,findEmail]],{ignore:[`link`,`linkReference`]})}function findUrl(e,t,S,w,E){let D=``;if(!previous$2(E)||(/^w/i.test(t)&&(S=t+S,t=``,D=`http://`),!isCorrectDomain(S)))return!1;let O=splitUrl(S+w);if(!O[0])return!1;let k={type:`link`,title:null,url:D+t+O[0],children:[{type:`text`,value:t+O[0]}]};return O[1]?[k,{type:`text`,value:O[1]}]:k}function findEmail(e,t,S,w){return!previous$2(w,!0)||/[-\d_]$/.test(S)?!1:{type:`link`,title:null,url:`mailto:`+t+`@`+S,children:[{type:`text`,value:t+`@`+S}]}}function isCorrectDomain(e){let t=e.split(`.`);return!(t.length<2||t[t.length-1]&&(/_/.test(t[t.length-1])||!/[a-zA-Z\d]/.test(t[t.length-1]))||t[t.length-2]&&(/_/.test(t[t.length-2])||!/[a-zA-Z\d]/.test(t[t.length-2])))}function splitUrl(e){let t=/[!"&'),.:;<>?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let S=t[0],w=S.indexOf(`)`),E=ccount(e,`(`),D=ccount(e,`)`);for(;w!==-1&&E>D;)e+=S.slice(0,w+1),S=S.slice(w+1),w=S.indexOf(`)`),D++;return[e,S]}function previous$2(e,t){let S=e.input.charCodeAt(e.index-1);return(e.index===0||unicodeWhitespace(S)||unicodePunctuation(S))&&(!t||S!==47)}function normalizeIdentifier(e){return e.replace(/[\t\n\r ]+/g,` `).replace(/^ | $/g,``).toLowerCase().toUpperCase()}footnoteReference.peek=footnoteReferencePeek;function enterFootnoteCallString(){this.buffer()}function enterFootnoteCall(e){this.enter({type:`footnoteReference`,identifier:``,label:``},e)}function enterFootnoteDefinitionLabelString(){this.buffer()}function enterFootnoteDefinition(e){this.enter({type:`footnoteDefinition`,identifier:``,label:``,children:[]},e)}function exitFootnoteCallString(e){let t=this.resume(),S=this.stack[this.stack.length-1];S.type,S.identifier=normalizeIdentifier(this.sliceSerialize(e)).toLowerCase(),S.label=t}function exitFootnoteCall(e){this.exit(e)}function exitFootnoteDefinitionLabelString(e){let t=this.resume(),S=this.stack[this.stack.length-1];S.type,S.identifier=normalizeIdentifier(this.sliceSerialize(e)).toLowerCase(),S.label=t}function exitFootnoteDefinition(e){this.exit(e)}function footnoteReferencePeek(){return`[`}function footnoteReference(e,t,S,w){let E=S.createTracker(w),D=E.move(`[^`),O=S.enter(`footnoteReference`),k=S.enter(`reference`);return D+=E.move(S.safe(S.associationId(e),{after:`]`,before:D})),k(),O(),D+=E.move(`]`),D}function gfmFootnoteFromMarkdown(){return{enter:{gfmFootnoteCallString:enterFootnoteCallString,gfmFootnoteCall:enterFootnoteCall,gfmFootnoteDefinitionLabelString:enterFootnoteDefinitionLabelString,gfmFootnoteDefinition:enterFootnoteDefinition},exit:{gfmFootnoteCallString:exitFootnoteCallString,gfmFootnoteCall:exitFootnoteCall,gfmFootnoteDefinitionLabelString:exitFootnoteDefinitionLabelString,gfmFootnoteDefinition:exitFootnoteDefinition}}}function gfmFootnoteToMarkdown(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:S,footnoteReference},unsafe:[{character:`[`,inConstruct:[`label`,`phrasing`,`reference`]}]};function S(e,S,w,E){let D=w.createTracker(E),O=D.move(`[^`),k=w.enter(`footnoteDefinition`),j=w.enter(`label`);return O+=D.move(w.safe(w.associationId(e),{before:O,after:`]`})),j(),O+=D.move(`]:`),e.children&&e.children.length>0&&(D.shift(4),O+=D.move((t?`
238
238
  `:` `)+w.indentLines(w.containerFlow(e,D.current()),t?mapAll:mapExceptFirst))),k(),O}}function mapExceptFirst(e,t,S){return t===0?e:mapAll(e,t,S)}function mapAll(e,t,S){return(S?``:` `)+e}const constructsWithoutStrikethrough=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`];handleDelete.peek=peekDelete;function gfmStrikethroughFromMarkdown(){return{canContainEols:[`delete`],enter:{strikethrough:enterStrikethrough},exit:{strikethrough:exitStrikethrough}}}function gfmStrikethroughToMarkdown(){return{unsafe:[{character:`~`,inConstruct:`phrasing`,notInConstruct:constructsWithoutStrikethrough}],handlers:{delete:handleDelete}}}function enterStrikethrough(e){this.enter({type:`delete`,children:[]},e)}function exitStrikethrough(e){this.exit(e)}function handleDelete(e,t,S,w){let E=S.createTracker(w),D=S.enter(`strikethrough`),O=E.move(`~~`);return O+=S.containerPhrasing(e,{...E.current(),before:O,after:`~`}),O+=E.move(`~~`),D(),O}function peekDelete(){return`~`}function defaultStringLength(e){return e.length}function markdownTable(e,t){let S=t||{},w=(S.align||[]).concat(),E=S.stringLength||defaultStringLength,D=[],O=[],k=[],j=[],F=0,L=-1;for(;++L<e.length;){let t=[],w=[],D=-1;for(e[L].length>F&&(F=e[L].length);++D<e[L].length;){let O=serialize(e[L][D]);if(S.alignDelimiters!==!1){let e=E(O);w[D]=e,(j[D]===void 0||e>j[D])&&(j[D]=e)}t.push(O)}O[L]=t,k[L]=w}let B=-1;if(typeof w==`object`&&`length`in w)for(;++B<F;)D[B]=toAlignment(w[B]);else{let e=toAlignment(w);for(;++B<F;)D[B]=e}B=-1;let H=[],q=[];for(;++B<F;){let e=D[B],t=``,w=``;e===99?(t=`:`,w=`:`):e===108?t=`:`:e===114&&(w=`:`);let E=S.alignDelimiters===!1?1:Math.max(1,j[B]-t.length-w.length),O=t+`-`.repeat(E)+w;S.alignDelimiters!==!1&&(E=t.length+E+w.length,E>j[B]&&(j[B]=E),q[B]=E),H[B]=O}O.splice(1,0,H),k.splice(1,0,q),L=-1;let J=[];for(;++L<O.length;){let e=O[L],t=k[L];B=-1;let w=[];for(;++B<F;){let E=e[B]||``,O=``,k=``;if(S.alignDelimiters!==!1){let e=j[B]-(t[B]||0),S=D[B];S===114?O=` `.repeat(e):S===99?e%2?(O=` `.repeat(e/2+.5),k=` `.repeat(e/2-.5)):(O=` `.repeat(e/2),k=O):k=` `.repeat(e)}S.delimiterStart!==!1&&!B&&w.push(`|`),S.padding!==!1&&!(S.alignDelimiters===!1&&E===``)&&(S.delimiterStart!==!1||B)&&w.push(` `),S.alignDelimiters!==!1&&w.push(O),w.push(E),S.alignDelimiters!==!1&&w.push(k),S.padding!==!1&&w.push(` `),(S.delimiterEnd!==!1||B!==F-1)&&w.push(`|`)}J.push(S.delimiterEnd===!1?w.join(``).replace(/ +$/,``):w.join(``))}return J.join(`
239
239
  `)}function serialize(e){return e==null?``:String(e)}function toAlignment(e){let t=typeof e==`string`?e.codePointAt(0):0;return t===67||t===99?99:t===76||t===108?108:t===82||t===114?114:0}const own$6={}.hasOwnProperty;function zwitch(e,t){let S=t||{};function w(t,...S){let E=w.invalid,D=w.handlers;if(t&&own$6.call(t,e)){let S=String(t[e]);E=own$6.call(D,S)?D[S]:w.unknown}if(E)return E.call(this,t,...S)}return w.handlers=S.handlers||{},w.invalid=S.invalid,w.unknown=S.unknown,w}const own$5={}.hasOwnProperty;function configure$1(e,t){let S=-1,w;if(t.extensions)for(;++S<t.extensions.length;)configure$1(e,t.extensions[S]);for(w in t)if(own$5.call(t,w))switch(w){case`extensions`:break;case`unsafe`:list$2(e[w],t[w]);break;case`join`:list$2(e[w],t[w]);break;case`handlers`:map$2(e[w],t[w]);break;default:e.options[w]=t[w]}return e}function list$2(e,t){t&&e.push(...t)}function map$2(e,t){t&&Object.assign(e,t)}function blockquote(e,t,S,w){let E=S.enter(`blockquote`),D=S.createTracker(w);D.move(`> `),D.shift(2);let O=S.indentLines(S.containerFlow(e,D.current()),map$1);return E(),O}function map$1(e,t,S){return`>`+(S?``:` `)+e}function patternInScope(e,t){return listInScope(e,t.inConstruct,!0)&&!listInScope(e,t.notInConstruct,!1)}function listInScope(e,t,S){if(typeof t==`string`&&(t=[t]),!t||t.length===0)return S;let w=-1;for(;++w<t.length;)if(e.includes(t[w]))return!0;return!1}function hardBreak(e,t,S,w){let E=-1;for(;++E<S.unsafe.length;)if(S.unsafe[E].character===`
@@ -324,7 +324,7 @@ $2`).split(`
324
324
  `)].join(`
325
325
  `);case`REMOVED_KEY`:{let t=e.path.join(`.`),S=[`${e.source?`Removed key at ${e.source.file}:${e.source.line}:${e.source.column}`:`Removed key in configuration`}: ${t}`,e.redirect];if(e.source?.snippet&&e.source.snippet.length>0)for(let t of e.source.snippet.split(`
326
326
  `))S.push(` ${t}`);return S.join(`
327
- `)}case`WRITE_ERROR`:return`Failed to write config file: ${e.detail}`;case`OKIGNORE_INVALID`:return e.lineNumber===void 0?`.okignore: ${e.detail}`:`.okignore line ${e.lineNumber}: ${e.detail}`;case`UNKNOWN`:return e.message??`Unknown error.`}}const SYSTEM_DOC_NAME=`__system__`,CC1_CONTRACT_VERSION=1,CONFIG_DOC_NAME_PROJECT=`__config__/project`,CONFIG_DOC_NAME_USER=`__user__/config.yml`,CONFIG_DOC_NAME_PROJECT_LOCAL=`__local__/project`,CONFIG_DOC_NAME_OKIGNORE=`__config__/okignore`,CONFIG_DOC_NAMES=Object.freeze([CONFIG_DOC_NAME_PROJECT,CONFIG_DOC_NAME_PROJECT_LOCAL,CONFIG_DOC_NAME_USER,CONFIG_DOC_NAME_OKIGNORE]),ALL_EDITOR_IDS=[`claude`,`claude-desktop`,`cursor`,`codex`],EDITOR_LABELS={claude:`Claude`,"claude-desktop":`Claude Desktop`,cursor:`Cursor`,codex:`Codex`},DEFAULT_GITHUB_OAUTH_CLIENT_ID=`Ov23liqlSd0V1MwR6rhI`,ORPHAN_MODES=[`incoming`,`outgoing`,`both`];function isOrphanMode(e){return ORPHAN_MODES.includes(e)}const DEFAULT_SIGTERM_GRACE_MS=1e4,SPAWN_ERROR_LOG=`last-spawn-error.log`,PREVIEW_EMBED_STARTERS=[{id:`chart`,title:`Chart`,description:`A bar chart whose series colors track the OK chart palette.`,html:`<div style="font-family:system-ui,sans-serif;padding:20px;color:var(--foreground)">
327
+ `)}case`WRITE_ERROR`:return`Failed to write config file: ${e.detail}`;case`OKIGNORE_INVALID`:return e.lineNumber===void 0?`.okignore: ${e.detail}`:`.okignore line ${e.lineNumber}: ${e.detail}`;case`UNKNOWN`:return e.message??`Unknown error.`}}const SYSTEM_DOC_NAME=`__system__`,CC1_CONTRACT_VERSION=1,CONFIG_DOC_NAME_PROJECT=`__config__/project`,CONFIG_DOC_NAME_USER=`__user__/config.yml`,CONFIG_DOC_NAME_PROJECT_LOCAL=`__local__/project`,CONFIG_DOC_NAME_OKIGNORE=`__config__/okignore`,CONFIG_DOC_NAMES=Object.freeze([CONFIG_DOC_NAME_PROJECT,CONFIG_DOC_NAME_PROJECT_LOCAL,CONFIG_DOC_NAME_USER,CONFIG_DOC_NAME_OKIGNORE]),DOCUMENT_OPEN_BYTE_LIMIT=512*1024,ALL_EDITOR_IDS=[`claude`,`claude-desktop`,`cursor`,`codex`],EDITOR_LABELS={claude:`Claude`,"claude-desktop":`Claude Desktop`,cursor:`Cursor`,codex:`Codex`},DEFAULT_GITHUB_OAUTH_CLIENT_ID=`Ov23liqlSd0V1MwR6rhI`,ORPHAN_MODES=[`incoming`,`outgoing`,`both`];function isOrphanMode(e){return ORPHAN_MODES.includes(e)}const DEFAULT_SIGTERM_GRACE_MS=1e4,SPAWN_ERROR_LOG=`last-spawn-error.log`,PREVIEW_EMBED_STARTERS=[{id:`chart`,title:`Chart`,description:`A bar chart whose series colors track the OK chart palette.`,html:`<div style="font-family:system-ui,sans-serif;padding:20px;color:var(--foreground)">
328
328
  <h3 style="margin:0 0 14px;font-size:15px;font-weight:600">Revenue by region</h3>
329
329
  <div id="bars" style="display:flex;align-items:flex-end;gap:14px;height:170px"></div>
330
330
  <script>
@@ -387,7 +387,7 @@ $2`).split(`
387
387
  });
388
388
  <\/script>
389
389
  </div>`}];function previewEmbedFence(e){return["```html preview",e.html,"```"].join(`
390
- `)}const PREVIEW_THEME_TOKENS=[{name:`--chart-1`,light:`oklch(0.62 0.19 259)`,dark:`oklch(0.72 0.14 259)`},{name:`--chart-2`,light:`oklch(0.58 0.14 145)`,dark:`oklch(0.73 0.13 145)`},{name:`--chart-3`,light:`oklch(0.62 0.15 70)`,dark:`oklch(0.77 0.14 70)`},{name:`--chart-4`,light:`oklch(0.55 0.18 290)`,dark:`oklch(0.72 0.16 290)`},{name:`--chart-5`,light:`oklch(0.58 0.21 25)`,dark:`oklch(0.72 0.2 25)`},{name:`--primary`,light:`oklch(0.6321 0.1983 259.59)`,dark:`#69a3ff`},{name:`--primary-foreground`,light:`oklch(0.985 0 0)`,dark:`oklch(0.205 0 0)`},{name:`--foreground`,light:`oklch(0.145 0 0)`,dark:`oklch(0.985 0 0)`},{name:`--background`,light:`oklch(1 0 0)`,dark:`oklch(0.145 0 0)`},{name:`--card`,light:`oklch(1 0 0)`,dark:`oklch(0.205 0 0)`},{name:`--card-foreground`,light:`oklch(0.145 0 0)`,dark:`oklch(0.985 0 0)`},{name:`--muted-foreground`,light:`oklch(0.556 0 0)`,dark:`oklch(0.708 0 0)`},{name:`--border`,light:`oklch(0.922 0 0)`,dark:`oklch(1 0 0 / 10%)`},{name:`--destructive`,light:`oklch(0.577 0.245 27.325)`,dark:`oklch(0.704 0.191 22.216)`},{name:`--radius`,light:`0.625rem`,dark:`0.625rem`}],DEFAULT_SERVER_HOST=`localhost`,ALLOWED_IMAGE_MIME_TYPES=[`image/jpeg`,`image/png`,`image/gif`,`image/webp`,`image/svg+xml`],ALLOWED_VIDEO_MIME_TYPES=[`video/mp4`,`video/webm`,`video/ogg`],ALLOWED_AUDIO_MIME_TYPES=[`audio/mpeg`,`audio/wav`,`audio/ogg`],ALLOWED_PDF_MIME_TYPES=[`application/pdf`],IMAGE_EXTENSIONS=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`avif`,`svg`]),VIDEO_EXTENSIONS=new Set([`mp4`,`webm`,`mov`,`m4v`,`mkv`]),PDF_EXTENSIONS=new Set([`pdf`]),AUDIO_EXTENSIONS=new Set([`mp3`,`wav`,`ogg`,`m4a`,`flac`,`aac`,`opus`]),FILE_ATTACHMENT_EXTENSIONS=new Set(`pdf.docx.xlsx.pptx.doc.xls.ppt.zip.7z.tar.gz.rar.csv.tsv.rtf.json.yaml.yml.xml.txt.pages.numbers.key.odt.ods.odp.epub.mobi`.split(`.`)),EXECUTABLE_BLOCKLIST_EXTENSIONS=new Set(`exe.bat.cmd.ps1.com.msi.vbs.js.jse.wsf.wsh.hta.sh.command.csh.ksh.bash.zsh.fish.desktop.action.workflow.html.htm.svg.xml.mhtml.svgz.dmg.pkg.mpkg.scpt.applescript.terminal.prefpane.webloc.inetloc.fileloc.jar.appimage.deb.rpm.msix.appx.ipa.apk.pif.scr.lnk.url`.split(`.`)),ASSET_EXTENSIONS=new Set(`png.jpg.jpeg.gif.webp.avif.svg.apng.heic.heif.tiff.bmp.ico.pdf.mp4.webm.mov.m4v.mkv.avi.flv.wmv.mpeg.mpg.mp3.wav.ogg.m4a.flac.aac.opus.zip.woff.woff2.ttf.otf.eot.docx.xlsx.pptx.csv.txt.rtf.json.toml`.split(`.`)),INLINE_RENDERABLE_EXTENSIONS=new Set(`png.jpg.jpeg.gif.webp.avif.apng.heic.heif.tiff.bmp.ico.svg.pdf.mp4.webm.mov.m4v.mkv.mp3.wav.ogg.m4a.flac.aac.opus.json.toml`.split(`.`)),DEFAULT_DEDUP_MODE=`same-dir`,WIKI_EMBED_EXTENSIONS=new Set(`png.jpg.jpeg.gif.webp.avif.svg.pdf.mp4.webm.mov.m4v.mkv.mp3.wav.ogg.m4a.flac.aac.opus.docx.xlsx.pptx.doc.xls.ppt.zip.7z.tar.gz.rar.csv.tsv.rtf.json.yaml.yml.xml.txt.pages.numbers.key.odt.ods.odp.epub.mobi`.split(`.`)),SIDEBAR_IMAGE_EXTENSIONS=[`png`,`jpg`,`jpeg`,`gif`,`webp`,`avif`],SIDEBAR_VIDEO_EXTENSIONS=[`mp4`,`webm`,`mov`,`m4v`],SIDEBAR_AUDIO_EXTENSIONS=[`mp3`,`wav`,`ogg`,`m4a`,`flac`,`aac`,`opus`],SIDEBAR_PDF_EXTENSIONS=[`pdf`],SIDEBAR_TEXT_EXTENSIONS=[`json`,`toml`];function assertSubset(e,t,S){for(let w of t)if(!S.has(w))throw Error(`${e}: ${w} is not present in canonical upload constants`)}assertSubset(`SIDEBAR_IMAGE_ASSET_EXTENSIONS`,SIDEBAR_IMAGE_EXTENSIONS,IMAGE_EXTENSIONS),assertSubset(`SIDEBAR_VIDEO_ASSET_EXTENSIONS`,SIDEBAR_VIDEO_EXTENSIONS,VIDEO_EXTENSIONS),assertSubset(`SIDEBAR_AUDIO_ASSET_EXTENSIONS`,SIDEBAR_AUDIO_EXTENSIONS,AUDIO_EXTENSIONS),assertSubset(`SIDEBAR_PDF_ASSET_EXTENSIONS`,SIDEBAR_PDF_EXTENSIONS,PDF_EXTENSIONS),assertSubset(`FILE_ATTACHMENT_EXTENSIONS`,[...FILE_ATTACHMENT_EXTENSIONS],WIKI_EMBED_EXTENSIONS);const SIDEBAR_IMAGE_ASSET_EXTENSIONS=new Set(SIDEBAR_IMAGE_EXTENSIONS),SIDEBAR_VIDEO_ASSET_EXTENSIONS=new Set(SIDEBAR_VIDEO_EXTENSIONS),SIDEBAR_AUDIO_ASSET_EXTENSIONS=new Set(SIDEBAR_AUDIO_EXTENSIONS),SIDEBAR_PDF_ASSET_EXTENSIONS=new Set(SIDEBAR_PDF_EXTENSIONS),SIDEBAR_TEXT_ASSET_EXTENSIONS=new Set(SIDEBAR_TEXT_EXTENSIONS),SIDEBAR_RENDERABLE_ASSET_EXTENSIONS=new Set([...SIDEBAR_IMAGE_EXTENSIONS,...SIDEBAR_VIDEO_EXTENSIONS,...SIDEBAR_AUDIO_EXTENSIONS,...SIDEBAR_PDF_EXTENSIONS,...SIDEBAR_TEXT_EXTENSIONS]);assertSubset(`SIDEBAR_RENDERABLE_ASSET_EXTENSIONS`,[...SIDEBAR_RENDERABLE_ASSET_EXTENSIONS],INLINE_RENDERABLE_EXTENSIONS);function mediaKindForSidebarAssetExtension(e){let t=e.toLowerCase().replace(/^\./,``);return SIDEBAR_IMAGE_ASSET_EXTENSIONS.has(t)?`image`:SIDEBAR_VIDEO_ASSET_EXTENSIONS.has(t)?`video`:SIDEBAR_AUDIO_ASSET_EXTENSIONS.has(t)?`audio`:SIDEBAR_PDF_ASSET_EXTENSIONS.has(t)?`pdf`:SIDEBAR_TEXT_ASSET_EXTENSIONS.has(t)?`text`:null}const CodeBlockFidelity=index_default$11.extend({priority:60,addAttributes(){return{...this.parent?.(),fenceDelimiter:{default:"`"},fenceLength:{default:3},meta:{default:null},sourceStyle:{default:`fenced`}}}}),EmphasisFidelity=index_default$9.extend({name:`emphasis`,priority:60,addAttributes(){return{...this.parent?.(),sourceDelimiter:{default:`*`}}},addInputRules(){return[markInputRule({find:starInputRegex,type:this.type,getAttributes:{sourceDelimiter:`*`}}),markInputRule({find:underscoreInputRegex,type:this.type,getAttributes:{sourceDelimiter:`_`}})]}}),StrongFidelity=index_default$10.extend({name:`strong`,priority:60,addAttributes(){return{...this.parent?.(),sourceDelimiter:{default:`**`}}},addInputRules(){return[markInputRule({find:starInputRegex$1,type:this.type,getAttributes:{sourceDelimiter:`**`}}),markInputRule({find:underscoreInputRegex$1,type:this.type,getAttributes:{sourceDelimiter:`__`}})]}}),EscapeMark=Mark.create({name:`escapeMark`,priority:10,excludes:``,inclusive:!1,parseHTML(){return[{tag:`span[data-escape-mark]`}]},renderHTML(){return[`span`,{"data-escape-mark":``},0]}}),HardBreakFidelity=index_default$8.extend({priority:60,addAttributes(){return{...this.parent?.(),hardBreakStyle:{default:`backslash`}}}}),HeadingFidelity=index_default$7.extend({priority:60,addAttributes(){return{...this.parent?.(),headingStyle:{default:`atx`},sourceTrailingHashes:{default:null},sourceUnderlineLength:{default:null},sourceContiguousNext:{default:!1}}}}),HtmlBlockFidelity=Node3.create({name:`htmlBlock`,group:`block`,atom:!0,priority:60,addAttributes(){return{content:{default:``}}},parseHTML(){return[{tag:`div[data-html-block]`}]},renderHTML({node:e}){return[`div`,{"data-html-block":``,class:`html-block`},e.attrs.content]}}),JsxComponent=Node3.create({name:`jsxComponent`,group:`block`,atom:!1,content:`block*`,isolating:!0,selectable:!0,defining:!0,priority:60,addAttributes(){return{componentName:{default:``},kind:{default:`element`},attributes:{default:[]},sourceRaw:{default:``},sourceDirty:{default:!1},props:{default:{}}}},parseHTML(){return[{tag:`div[data-jsx-component]`,getAttrs:e=>typeof e==`string`?!1:{componentName:e.getAttribute(`data-component-name`)||``,sourceRaw:e.getAttribute(`data-source-raw`)||``}}]},renderHTML({HTMLAttributes:e}){return[`div`,{"data-jsx-component":``,"data-component-name":e.componentName,"data-source-raw":e.sourceRaw},0]},addCommands(){return{insertJsxComponent:e=>({commands:t})=>t.insertContent({type:this.name,attrs:{sourceRaw:e}})}}}),JsxInline=Node3.create({name:`jsxInline`,group:`inline`,inline:!0,atom:!1,content:`text*`,isolating:!1,selectable:!0,priority:60,addAttributes(){return{}},parseHTML(){return[{tag:`span[data-jsx-inline]`}]},renderHTML(){return[`span`,{"data-jsx-inline":``},0]}}),SAFE_URL_SCHEMES=[`https`,`http`,`mailto`,`tel`,`ftp`,`sms`],SCHEME_ALT=SAFE_URL_SCHEMES.map(e=>`${e}:`).join(`|`),SAFE_URL_SCHEME_RE=RegExp(`^(?:${SCHEME_ALT}|\\/|#|\\?|\\.\\/|\\.\\.\\/)`,`i`);function isRelativeUrl(e){let t=e.trim();if(t===``)return!0;let S=t.indexOf(`:`);if(S===-1)return!0;let w=t.indexOf(`/`),E=t.indexOf(`?`),D=t.indexOf(`#`);return S>Math.min(w===-1?1/0:w,E===-1?1/0:E,D===-1?1/0:D)}const ALLOWED_LINK_SCHEMES=new Set(SAFE_URL_SCHEMES.map(e=>`${e}:`)),PLACEHOLDER_BASE=`https://placeholder.invalid`;function isAllowedLinkUri(e){try{let t=new URL(e,PLACEHOLDER_BASE);return ALLOWED_LINK_SCHEMES.has(t.protocol.toLowerCase())}catch{return!1}}const LinkFidelity=index_default$6.extend({priority:60,addOptions(){return{openOnClick:!1,enableClickSelection:!1,linkOnPaste:!0,autolink:!0,protocols:[],defaultProtocol:`http`,HTMLAttributes:{target:`_blank`,rel:`noopener noreferrer`},isAllowedUri:isAllowedLinkUri,validate:isAllowedLinkUri,shouldAutoLink:()=>!0}},addAttributes(){return{...this.parent?.(),linkStyle:{default:`inline`,rendered:!1},refLabel:{default:null,rendered:!1},sourceForm:{default:null,rendered:!1},target:{default:null,rendered:!1},anchor:{default:null,rendered:!1},alias:{default:null,rendered:!1},sourceUrlForm:{default:null,rendered:!1},sourceTitleMarker:{default:null,rendered:!1}}}}),LinkRefDefFidelity=Node3.create({name:`linkRefDef`,group:`block`,atom:!0,priority:60,addAttributes(){return{label:{default:``},href:{default:``},title:{default:null},sourceLayout:{default:null},sourceTitleMarker:{default:null}}},parseHTML(){return[{tag:`div[data-link-ref-def]`}]},renderHTML({node:e}){let{label:t,href:S,title:w}=e.attrs,E=w?`[${t}]: ${S} "${w}"`:`[${t}]: ${S}`;return[`div`,{"data-link-ref-def":``,class:`link-ref-def`},E]}});function isBulletList(e){return e.type.name===`list`&&!e.attrs.ordered}function isOrderedList(e){return e.type.name===`list`&&!!e.attrs.ordered}function hasTaskItems(e){let t=!1;return e.forEach(e=>{e.type.name===`listItem`&&e.attrs.checked!==null&&(t=!0)}),t}function toggleListKind(e,t,S,w,E,D,O){let k=findParentNode(e=>e.type.name===`list`)(e.selection);if(k&&E(k.node)){let{$from:S,$to:E}=e.selection;return S.blockRange(E)?liftListItem$1(w)(e,t):!1}if(k){if(!t)return!0;let{tr:S}=e;return S.setNodeMarkup(k.pos,void 0,{...k.node.attrs,...D}),O!==void 0&&k.node.forEach((e,t)=>{if(e.type.name===`listItem`){let w=k.pos+1+t;S.setNodeMarkup(w,void 0,{...e.attrs,...O})}}),t(S),!0}return wrapInList$1(S,D)(e,void 0)?t?wrapInList$1(S,D)(e,S=>{if(O){let t=S.mapping.map(e.selection.$from.pos),w=S.doc.resolve(t);for(let e=w.depth;e>0;e--){let t=w.node(e);if(t.type.name===`listItem`){S.setNodeMarkup(w.before(e),void 0,{...t.attrs,...O});break}}}t(S)}):!0:!1}const ListNode=Node3.create({name:`list`,group:`block list`,content:`listItem+`,priority:60,addAttributes(){return{ordered:{default:!1},start:{default:1},spread:{default:!1},bulletMarker:{default:null},listMarkerDelimiter:{default:null}}},parseHTML(){return[{tag:`ul`,getAttrs:()=>({ordered:!1})},{tag:`ol`,getAttrs:e=>({ordered:!0,start:e.getAttribute(`start`)?Number(e.getAttribute(`start`)):1})}]},renderHTML({node:e,HTMLAttributes:t}){let S=e.attrs.ordered?`ol`:`ul`,w={};return e.attrs.ordered&&e.attrs.start!==1&&(w.start=e.attrs.start),[S,mergeAttributes(t,w),0]},addCommands(){return{toggleBulletList:()=>({state:e,dispatch:t})=>{let S=e.schema.nodes.list,w=e.schema.nodes.listItem;return!S||!w?!1:toggleListKind(e,t,S,w,e=>isBulletList(e)&&!hasTaskItems(e),{ordered:!1},{checked:null})},toggleOrderedList:()=>({state:e,dispatch:t})=>{let S=e.schema.nodes.list,w=e.schema.nodes.listItem;return!S||!w?!1:toggleListKind(e,t,S,w,e=>isOrderedList(e),{ordered:!0},{checked:null})},toggleTaskList:()=>({state:e,dispatch:t})=>{let S=e.schema.nodes.list,w=e.schema.nodes.listItem;return!S||!w?!1:toggleListKind(e,t,S,w,e=>isBulletList(e)&&hasTaskItems(e),{ordered:!1},{checked:!1})}}},addInputRules(){return[wrappingInputRule({find:/^\s*([-+*])(?!\s*\[[ xX]\])\s$/,type:this.type,getAttributes:e=>({ordered:!1,bulletMarker:e[1]})}),wrappingInputRule({find:/^\s*(\d+)([.)])\s$/,type:this.type,getAttributes:e=>({ordered:!0,start:Number(e[1]),listMarkerDelimiter:e[2]})}),new InputRule({find:/^\s*[-*+]\s\[([ xX])\]\s$/,handler:({state:e,range:t,match:S})=>{let w=e.schema.nodes.list;if(!w)return null;let E=S[1]!==` `,D=e.tr.delete(t.from,t.to),O=D.doc.resolve(t.from).blockRange();if(!O)return null;let k=findWrapping(O,w,{ordered:!1});if(!k)return null;D.wrap(O,k);let j=D.doc.resolve(D.mapping.map(t.from));for(let e=j.depth;e>0;e--){let t=j.node(e);if(t.type.name===`listItem`){D.setNodeMarkup(j.before(e),void 0,{...t.attrs,checked:E});break}}}})]},addKeyboardShortcuts(){return{"Mod-Shift-8":()=>this.editor.commands.toggleBulletList(),"Mod-Shift-7":()=>this.editor.commands.toggleOrderedList(),"Mod-Shift-9":()=>this.editor.commands.toggleTaskList()}}}),ListItemNode=Node3.create({name:`listItem`,content:`paragraph block*`,defining:!0,addAttributes(){return{checked:{default:null},spread:{default:!1}}},parseHTML(){return[{tag:`li`,getAttrs:e=>{let t=e.querySelector(`input[type="checkbox"]`);return{checked:t?t.checked:null}}}]},renderHTML({node:e,HTMLAttributes:t}){return e.attrs.checked===null?[`li`,mergeAttributes(t),0]:[`li`,mergeAttributes(t,{"data-type":`taskItem`,"data-checked":e.attrs.checked?`true`:`false`}),[`label`,{contenteditable:`false`},[`input`,{type:`checkbox`,...e.attrs.checked?{checked:`checked`}:{}}]],[`div`,0]]},addNodeView(){return({node:e,getPos:t,editor:S,HTMLAttributes:w})=>{let E=document.createElement(`li`);Object.entries(mergeAttributes(w,e.attrs.checked===null?{}:{"data-type":`taskItem`,"data-checked":String(!!e.attrs.checked)})).forEach(([e,t])=>{t!=null&&E.setAttribute(e,String(t))});let D=null,O=null,k=document.createElement(`div`);return e.attrs.checked!==null&&(D=document.createElement(`label`),D.contentEditable=`false`,O=document.createElement(`input`),O.type=`checkbox`,O.checked=!!e.attrs.checked,S.isEditable||(O.disabled=!0),O.addEventListener(`change`,()=>{let w=t();w===void 0||typeof w!=`number`||S.view.dispatch(S.view.state.tr.setNodeMarkup(w,void 0,{...e.attrs,checked:O?.checked??!1}))}),D.appendChild(O),E.appendChild(D)),E.appendChild(k),{dom:E,contentDOM:k,update(t){return t.type!==e.type||t.attrs.checked!==null!=(e.attrs.checked!==null)?!1:(O&&t.attrs.checked!==null&&(O.checked=!!t.attrs.checked,E.setAttribute(`data-checked`,String(!!t.attrs.checked))),e=t,!0)}}}},addKeyboardShortcuts(){return{Enter:()=>this.editor.commands.splitListItem(this.name),Tab:()=>{let{$from:e}=this.editor.state.selection;for(let t=e.depth;t>0;t--)if(e.node(t).type.name===`listItem`)return this.editor.commands.sinkListItem(this.name);return!1},"Shift-Tab":()=>{let{$from:e}=this.editor.state.selection;for(let t=e.depth;t>0;t--)if(e.node(t).type.name===`listItem`)return this.editor.commands.liftListItem(this.name);return!1}}}}),List=ListNode,ListItem=ListItemNode,MathInline=Node3.create({name:`mathInline`,group:`inline`,inline:!0,atom:!0,selectable:!0,priority:60,addAttributes(){return{formula:{default:``},id:{default:null},language:{default:`latex`}}},parseHTML(){return[{tag:`span[data-math-inline]`,getAttrs:e=>typeof e==`string`?!1:{formula:e.getAttribute(`data-formula`)||``,id:e.getAttribute(`id`)||null,language:e.getAttribute(`data-language`)||`latex`}}]},renderHTML({HTMLAttributes:e}){return[`span`,{"data-math-inline":``,"data-formula":e.formula,"data-language":e.language,...e.id?{id:e.id}:{}}]},addCommands(){return{insertMathInline:e=>({commands:t})=>t.insertContent({type:this.name,attrs:{formula:e}})}}}),RawMdxFallback=Node3.create({name:`rawMdxFallback`,group:`block`,atom:!1,content:`text*`,isolating:!0,selectable:!0,defining:!0,priority:60,addAttributes(){return{reason:{default:``},originalSpan:{default:{start:0,end:0}}}},parseHTML(){let e=e=>typeof e==`string`?!1:{reason:e.getAttribute(`data-reason`)||``};return[{tag:`div[data-raw-mdx-fallback]`,getAttrs:e},{tag:`pre[data-raw-mdx-fallback]`,getAttrs:e}]},renderHTML({HTMLAttributes:e}){return[`div`,{"data-raw-mdx-fallback":``,"data-raw-badge":`raw`,"data-reason":e.reason,contenteditable:`false`,class:`raw-mdx-fallback`},0]},addNodeView(){return({HTMLAttributes:e})=>{let t=document.createElement(`div`);t.setAttribute(`data-raw-mdx-fallback`,``),t.setAttribute(`data-raw-badge`,`raw`),t.setAttribute(`contenteditable`,`false`),t.classList.add(`raw-mdx-fallback`),e.reason&&t.setAttribute(`data-reason`,e.reason);let S=document.createElement(`pre`);return S.classList.add(`raw-mdx-fallback-content`),S.setAttribute(`contenteditable`,`false`),t.appendChild(S),{dom:t,contentDOM:S,ignoreMutation:()=>!0}}}}),BlockquoteFidelity=index_default$4.extend({priority:60,addAttributes(){return{...this.parent?.(),sourceMarkerSpacings:{default:null}}}}),CodeMarkFidelity=index_default$3.extend({excludes:``,addAttributes(){return{...this.parent?.(),sourceFenceChar:{default:"`"},sourceFenceLength:{default:1}}}}),CommentBlock=Node3.create({name:`commentBlock`,group:`block`,content:`block+`,defining:!0,priority:60,addAttributes(){return{sourceForm:{default:`percent`,parseHTML:e=>e.getAttribute(`data-source-form`)===`html`?`html`:`percent`,renderHTML:e=>e.sourceForm===`html`?{"data-source-form":`html`}:{}},sourceLayout:{default:`block`,parseHTML:e=>e.getAttribute(`data-source-layout`)===`inline`?`inline`:`block`,renderHTML:e=>e.sourceLayout===`inline`?{"data-source-layout":`inline`}:{}}}},parseHTML(){return[{tag:`aside[data-comment-block]`},{tag:`aside.comment-block`}]},renderHTML({HTMLAttributes:e}){return[`aside`,{"data-comment-block":``,"data-clipboard-omit":`true`,class:`comment-block`,style:`display: none;`,...e},0]},addCommands(){return{setCommentBlock:()=>({commands:e})=>e.wrapIn(this.name),toggleCommentBlock:()=>({commands:e})=>e.toggleWrap(this.name),unsetCommentBlock:()=>({commands:e})=>e.lift(this.name)}}}),CommentMark=Mark.create({name:`comment`,priority:10,excludes:``,inclusive:!1,addAttributes(){return{sourceForm:{default:`percent`,parseHTML:e=>e.getAttribute(`data-source-form`)===`html`?`html`:`percent`,renderHTML:e=>e.sourceForm===`html`?{"data-source-form":`html`}:{}}}},parseHTML(){return[{tag:`span[data-comment-mark]`}]},renderHTML({HTMLAttributes:e}){return[`span`,{"data-comment-mark":``,"data-clipboard-omit":`true`,class:`comment-mark`,style:`display: none;`,...e},0]},addCommands(){return{setComment:()=>({commands:e})=>e.setMark(this.name),toggleComment:()=>({commands:e})=>e.toggleMark(this.name),unsetComment:()=>({commands:e})=>e.unsetMark(this.name)}}}),FootnoteDefinition=Node3.create({name:`footnoteDefinition`,group:`block`,content:`block+`,defining:!0,priority:60,addAttributes(){return{identifier:{default:``},label:{default:null}}},parseHTML(){let e=e=>{if(typeof e==`string`)return!1;let t=e.getAttribute(`data-footnote-id`)||``;return{identifier:t,label:t||null}};return[{tag:`aside[data-footnote-def]`,getAttrs:e},{tag:`aside.footnote-def`,getAttrs:e}]},renderHTML({node:e,HTMLAttributes:t}){let S=String(e.attrs.identifier??``);return[`aside`,{...t,"data-footnote-def":``,"data-footnote-id":S,id:`fn-${S}`,class:`footnote-def`},[`div`,{class:`footnote-body`},0],[`a`,{href:`#fnref-${S}`,class:`footnote-backref`,contentEditable:`false`,"aria-label":`Back to reference`},`↩`]]},addCommands(){return{insertFootnoteDefinition:e=>({commands:t})=>t.insertContent({type:this.name,attrs:{identifier:e,label:e},content:[{type:`paragraph`}]})}}}),FootnoteReference=Node3.create({name:`footnoteReference`,group:`inline`,inline:!0,atom:!0,selectable:!0,draggable:!1,priority:60,addAttributes(){return{identifier:{default:``},label:{default:null}}},parseHTML(){return[{tag:`sup[data-footnote-ref]`,getAttrs:e=>{if(typeof e==`string`)return!1;let t=e.getAttribute(`data-footnote-id`)||``;return{identifier:t,label:t||null}}}]},renderHTML({node:e}){let t=String(e.attrs.identifier??``);return[`sup`,{id:`fnref-${t}`,"data-footnote-ref":``,"data-footnote-id":t,class:`footnote-ref`},[`a`,{href:`#fn-${t}`,class:`footnote-ref-link`},`[${t}]`]]},addCommands(){return{insertFootnoteReference:e=>({commands:t})=>t.insertContent({type:this.name,attrs:{identifier:e,label:e}})}}}),ImageReferenceFidelity=Node3.create({name:`imageReference`,group:`inline`,inline:!0,atom:!0,priority:60,addAttributes(){return{alt:{default:``},label:{default:``},identifier:{default:``},referenceType:{default:`shortcut`}}},parseHTML(){return[{tag:`img[data-image-reference]`}]},renderHTML({node:e}){let{alt:t,label:S,referenceType:w}=e.attrs,E=t||S;return[`img`,{"data-image-reference":``,"data-reference-type":w,"data-label":S,alt:E}]}});function toDesktopAssetHref(e){if(typeof e!=`string`||!e.startsWith(`/`))return e;let t=globalThis.window?.okDesktop?.config?.apiOrigin;return typeof t==`string`&&t?t+e:e}const ImageSrcFidelity=index_default.extend({priority:60,addAttributes(){return{...this.parent?.(),sourceUrl:{default:null,rendered:!1}}},renderHTML({HTMLAttributes:e}){let t=mergeAttributes(this.options.HTMLAttributes,e);return typeof t.src==`string`&&(t.src=toDesktopAssetHref(t.src)),[`img`,t]}}),SourceLiteralMark=Mark.create({name:`sourceLiteral`,priority:10,excludes:``,inclusive:!1,addAttributes(){return{sourceRaw:{default:``}}},parseHTML(){return[{tag:`span[data-source-literal]`}]},renderHTML({HTMLAttributes:e}){return[`span`,{"data-source-literal":``,...e},0]}});function isValidSourceLiteralRaw(e,t){if(typeof e!=`string`||typeof t!=`string`||/[\x00-\x1F\x7F]/.test(e))return!1;let S=e.replaceAll(`\xA0`,` `),w=t.replaceAll(`\xA0`,` `);return S===w?!0:stripMarkdownBackslashEscapes(S)===w}function stripMarkdownBackslashEscapes(e){return e.replace(/\\([!-/:-@[-`{-~])/g,`$1`)}const TableFidelity=Table.extend({priority:60,addAttributes(){return{...this.parent?.(),sourceDashCounts:{default:null}}}}),TableCellFidelity=TableCell.extend({priority:60,addAttributes(){return{...this.parent?.(),sourcePadding:{default:null}}}}),TableHeaderFidelity=TableHeader.extend({priority:60,addAttributes(){return{...this.parent?.(),sourcePadding:{default:null}}}}),Tag=Node3.create({name:`tag`,group:`inline`,inline:!0,atom:!0,selectable:!0,priority:60,addAttributes(){return{value:{default:``}}},parseHTML(){return[{tag:`a[data-tag]`,getAttrs:e=>typeof e==`string`?!1:{value:e.getAttribute(`data-tag`)||``}}]},renderHTML({node:e,HTMLAttributes:t}){let S=String(e.attrs.value??``);return[`a`,{...t,"data-tag":S,href:`#tag/${S}`,class:`tag`},`#${S}`]},addCommands(){return{insertTag:e=>({chain:t})=>t().insertContent({type:`tag`,attrs:{value:e}}).run()}}}),THEMATIC_BREAK_INPUT_RE=/^(?:---|—-|___\s|\*\*\*\s)$/;function thematicBreakSourceRawFromMatch(e){let t=String(e[0]??``).replace(/\s+$/,``);return t===`—-`?`---`:t}const ThematicBreakFidelity=index_default$2.extend({name:`thematicBreak`,priority:60,addAttributes(){return{...this.parent?.(),sourceRaw:{default:`---`}}},addInputRules(){return[nodeInputRule({find:THEMATIC_BREAK_INPUT_RE,type:this.type,getAttributes:e=>({sourceRaw:thematicBreakSourceRawFromMatch(e)})})]}});function normalizeNullableString(e){if(typeof e!=`string`)return null;let t=e.trim();return t.length>0?t:null}function getWikiLinkText(e){return e.alias?e.alias:e.anchor?`${e.target}#${e.anchor}`:e.target}const WikiLink=Node3.create({name:`wikiLink`,group:`inline`,inline:!0,atom:!0,priority:60,addAttributes(){return{target:{default:``},alias:{default:null},anchor:{default:null},resolved:{default:!1}}},parseHTML(){return[{tag:`span[data-wiki-link]`,getAttrs:e=>typeof e==`string`?!1:{target:e.getAttribute(`data-target`)||``,alias:normalizeNullableString(e.getAttribute(`data-alias`)),anchor:normalizeNullableString(e.getAttribute(`data-anchor`)),resolved:e.getAttribute(`data-resolved`)===`true`}},{tag:`a.wiki-link[data-target]`,priority:100,getAttrs:e=>{if(typeof e==`string`)return!1;let t=e.getAttribute(`data-target`)??``;return t?{target:t,alias:normalizeNullableString(e.getAttribute(`data-alias`)),anchor:normalizeNullableString(e.getAttribute(`data-anchor`)),resolved:!1}:!1}}]},renderHTML({node:e,HTMLAttributes:t}){let S=String(e.attrs.target??``),w=normalizeNullableString(e.attrs.alias),E=normalizeNullableString(e.attrs.anchor),D=e.attrs.resolved===!0;return[`span`,{...t,"data-wiki-link":``,"data-target":S,"data-alias":w??``,"data-anchor":E??``,"data-resolved":D?`true`:`false`},getWikiLinkText({target:S,alias:w,anchor:E})]}});function extensionOf(e){let t=e.split(`/`).pop()??e,S=t.lastIndexOf(`.`);return S<=0||S===t.length-1?``:t.slice(S+1).toLowerCase()}function labelFor(e){return e.alias?e.alias:e.anchor?`${e.target}#${e.anchor}`:e.target}const WikiLinkEmbed=Node3.create({name:`wikiLinkEmbed`,group:`inline`,inline:!0,atom:!0,priority:60,addAttributes(){return{target:{default:``},alias:{default:null},anchor:{default:null},resolvedSrc:{default:null,rendered:!1,parseHTML:()=>null}}},parseHTML(){let e=e=>typeof e==`string`||!e.hasAttribute(`data-wiki-embed`)?!1:{target:e.getAttribute(`data-target`)||``,alias:normalizeNullableString(e.getAttribute(`data-alias`)),anchor:normalizeNullableString(e.getAttribute(`data-anchor`))};return[{tag:`img[data-wiki-embed]`,getAttrs:e,priority:100},{tag:`a[data-wiki-embed]`,getAttrs:e,priority:100}]},renderHTML({node:e,HTMLAttributes:t}){let S=String(e.attrs.target??``),w=normalizeNullableString(e.attrs.alias),E=normalizeNullableString(e.attrs.anchor),D=normalizeNullableString(e.attrs.resolvedSrc),O=extensionOf(S);if(IMAGE_EXTENSIONS.has(O))return[`img`,{...t,"data-wiki-embed":``,"data-target":S,"data-alias":w??``,"data-anchor":E??``,src:D??S,alt:w??S}];let k=D??S;return[`a`,{...t,"data-wiki-embed":``,"data-target":S,"data-alias":w??``,"data-anchor":E??``,href:E?`${k}#${E}`:k,target:`_blank`,rel:`noopener noreferrer`},labelFor({target:S,alias:w,anchor:E})]}}),sharedExtensions=[JsxComponent,RawMdxFallback,JsxInline,MathInline,WikiLink,WikiLinkEmbed,Tag,List,ListItem,EmphasisFidelity,StrongFidelity,CodeMarkFidelity,CodeBlockFidelity,BlockquoteFidelity,HeadingFidelity,ThematicBreakFidelity,LinkFidelity,HtmlBlockFidelity,LinkRefDefFidelity,HardBreakFidelity,EscapeMark,SourceLiteralMark,index_default$1.configure({undoRedo:!1,bulletList:!1,orderedList:!1,listItem:!1,italic:!1,bold:!1,code:!1,codeBlock:!1,heading:!1,horizontalRule:!1,hardBreak:!1,link:!1,blockquote:!1,dropcursor:{color:`color-mix(in oklch, var(--primary) 50%, transparent)`,width:2}}),TableFidelity.configure({resizable:!0}),TableRow,TableHeaderFidelity,TableCellFidelity,ImageSrcFidelity.configure({inline:!0}),ImageReferenceFidelity,index_default$5,CommentMark,CommentBlock,FootnoteReference,FootnoteDefinition],FRONTMATTER_TAG_VALUE_RE=/^[a-zA-Z][\w/-]*$/;function stripLeadingHash(e){return e.startsWith(`#`)?e.slice(1):e}function coerceCandidates(e){return typeof e==`string`?[e]:Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function extractFrontmatterTags(e){if(!e||e.trim()===``)return[];let{map:t}=parseFrontmatterYaml(e);if(!t)return[];let S=coerceCandidates(t.tags),w=[];for(let e of S){let t=stripLeadingHash(e);FRONTMATTER_TAG_VALUE_RE.test(t)?w.push(t):console.warn(`[frontmatter-tags] dropping invalid tag entry: ${JSON.stringify(e)}`)}return w}const safeDocNameField=string$2().refine(e=>!e.includes(`..`)&&!e.startsWith(`/`)&&!e.includes(`\0`)&&!e.includes(`\\`),{message:`docName contains unsafe path characters`}).optional(),agentIdentityFields={agentId:string$2().optional(),agentName:string$2().optional(),colorSeed:string$2().optional(),clientName:string$2().optional(),clientVersion:string$2().optional(),label:string$2().optional()},summaryField=string$2().optional(),URN_UUID_RE=/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,ShareConstructUrlRequestSchema=object$1({docPath:string$2().min(1)}).loose(),ShareConstructUrlErrorCodeSchema=_enum([`no-remote`,`detached-head`,`branch-not-on-origin`,`non-github-remote`,`invalid-path`]),ShareConstructUrlResponseSchema=discriminatedUnion(`ok`,[object$1({ok:literal(!0),shareUrl:string$2().min(1),blobUrl:string$2().min(1),branch:string$2().min(1)}).loose(),object$1({ok:literal(!1),error:ShareConstructUrlErrorCodeSchema,branch:string$2().min(1).optional()}).loose()]),SharePublishOwnerKindSchema=_enum([`user`,`org`]),SharePublishOwnerSchema=object$1({login:string$2().min(1),kind:SharePublishOwnerKindSchema,avatarUrl:string$2().optional()}).loose(),SharePublishOwnersErrorCodeSchema=_enum([`auth-required`,`network`]),SharePublishOwnersResponseSchema=discriminatedUnion(`ok`,[object$1({ok:literal(!0),owners:array(SharePublishOwnerSchema)}).loose(),object$1({ok:literal(!1),error:SharePublishOwnersErrorCodeSchema}).loose()]),SharePublishNameCheckResponseSchema=discriminatedUnion(`ok`,[object$1({ok:literal(!0),available:boolean$1()}).loose(),object$1({ok:literal(!1),error:SharePublishOwnersErrorCodeSchema}).loose()]),SharePublishVisibilitySchema=_enum([`public`,`private`]),SharePublishRequestSchema=object$1({owner:string$2().min(1),name:string$2().min(1),visibility:SharePublishVisibilitySchema,description:string$2().optional()}).loose(),SharePublishErrorCodeSchema=_enum([`name-conflict`,`saml-sso`,`auth-required`,`push-failed`,`init-failed`,`network`,`no-project`]),SharePublishResponseSchema=discriminatedUnion(`ok`,[object$1({ok:literal(!0),ownerLogin:string$2().min(1),repoName:string$2().min(1),cloneUrl:string$2().min(1),defaultBranch:string$2().min(1)}).loose(),object$1({ok:literal(!1),error:SharePublishErrorCodeSchema}).loose()]);function isValidBranchName(e){return!(typeof e!=`string`||e.length===0||e.startsWith(`-`)||/[\x00-\x1F\x7F]/.test(e)||/\s/.test(e)||e.includes(`:`)||e.split(`/`).includes(`..`))}const refineBranchName=e=>e.refine(isValidBranchName,`invalid branch name`);function isBranchNotFoundGitError(e){if(e==null)return!1;let t=e instanceof Error?e.message:String(e);return/couldn'?t find remote ref|Remote branch .+ not found/i.test(t)}const BranchInfoSharedFields={shareFileExists:boolean$1(),dirtyConflicts:object$1({conflicts:boolean$1(),files:array(string$2().min(1))}).loose(),branchIsLocal:boolean$1()},BranchInfoResponseSchema=discriminatedUnion(`detached`,[object$1({detached:literal(!1),currentBranch:string$2().min(1).nullable(),currentHeadSha:_null(),...BranchInfoSharedFields}).loose(),object$1({detached:literal(!0),currentBranch:_null(),currentHeadSha:string$2().min(1),...BranchInfoSharedFields}).loose()]),CheckoutRequestSchema=object$1({branch:refineBranchName(string$2().min(1)),principalId:string$2().optional()}).loose(),CheckoutFailureReasonSchema=_enum([`dirty-conflict`,`branch-not-found`,`fetch-failed`,`checkout-failed`]),CheckoutResponseSchema=discriminatedUnion(`ok`,[object$1({ok:literal(!0)}).loose(),object$1({ok:literal(!1),reason:CheckoutFailureReasonSchema,files:array(string$2().min(1)).optional()}).loose()]),ServerInfoSuccessSchema=object$1({serverInstanceId:string$2().min(1),currentBranch:string$2().min(1).optional(),currentDiskAckSVs:record(string$2().min(1),string$2().min(1)).optional()}).loose(),PrincipalSuccessSchema=object$1({id:string$2().min(1),display_name:string$2().min(1),display_email:string$2(),source:_enum([`git-config`,`synthesized`]),created_at:string$2().min(1)}).loose(),ProblemTypeSchema=_enum(`urn:ok:error:malformed-upload.urn:ok:error:collision-exhaustion.urn:ok:error:storage-full.urn:ok:error:storage-readonly.urn:ok:error:storage-error.urn:ok:error:no-file-received.urn:ok:error:path-escape.urn:ok:error:method-not-allowed.urn:ok:error:invalid-request.urn:ok:error:payload-too-large.urn:ok:error:request-timeout.urn:ok:error:internal-server-error.urn:ok:error:loopback-required.urn:ok:error:invalid-origin.urn:ok:error:url-not-allowed.urn:ok:error:dir-outside-home.urn:ok:error:concurrent-operation.urn:ok:error:clone-failed.urn:ok:error:clone-timeout.urn:ok:error:server-start-failed.urn:ok:error:reserved-doc-name.urn:ok:error:target-not-found.urn:ok:error:stale-target.urn:ok:error:frontmatter-edit-not-supported.urn:ok:error:invalid-frontmatter-patch.urn:ok:error:no-active-session.urn:ok:error:too-many-agent-sessions.urn:ok:error:doc-not-found.urn:ok:error:doc-already-exists.urn:ok:error:doc-not-open.urn:ok:error:rollback-not-configured.urn:ok:error:doc-not-available.urn:ok:error:backlink-index-not-configured.urn:ok:error:file-rescan-not-configured.urn:ok:error:shadow-not-configured.urn:ok:error:host-not-allowed.urn:ok:error:principal-not-available.urn:ok:error:not-found.urn:ok:error:auth-failed.urn:ok:error:no-project-dir.urn:ok:error:server-open-failed.urn:ok:error:doc-in-conflict.urn:ok:error:no-conflict-tracked.urn:ok:error:sync-not-active.urn:ok:error:project-repo-not-configured.urn:ok:error:seed-prerequisite-missing.urn:ok:error:seed-invalid-root.urn:ok:error:tag-index-not-configured.urn:ok:error:template-not-found.urn:ok:error:unsupported-asset-type.urn:ok:error:asset-not-found.urn:ok:error:collab-server-not-running.urn:ok:error:gateway-timeout.urn:ok:error:cursor-not-installed.urn:ok:error:cursor-spawn-timeout.urn:ok:error:cursor-spawn-failed.urn:ok:error:handoff-target-not-installed.urn:ok:error:handoff-spawn-timeout.urn:ok:error:handoff-spawn-failed`.split(`.`));function assertNeverProblemType(e){throw Error(`Unexpected ProblemType variant: ${JSON.stringify(e)}`)}const ProblemDetailsSchema=object$1({type:ProblemTypeSchema,title:string$2().min(1),status:number$1().int().min(400).max(599),instance:string$2().regex(URN_UUID_RE,`instance must be urn:uuid:<uuid>`).optional(),detail:string$2().optional()}).loose(),UploadRequestSchema=object$1({parentDocName:string$2().min(1),agentId:string$2().min(1).optional(),agentName:string$2().min(1).optional()}).loose(),UploadAssetSuccessSchema=object$1({src:string$2().min(1),path:string$2().min(1).optional(),deduped:boolean$1().optional()}).loose(),LocalOpCloneRequestSchema=object$1({url:string$2().min(1),dir:string$2().min(1),branch:string$2().min(1).refine(isValidBranchName,`invalid branch name`).optional()}).loose(),StreamingProblemEventSchema=object$1({type:literal(`error`),problem:ProblemDetailsSchema}).loose();function reconstructAttrs(e,t){let S=Array.isArray(e.attrs.attributes)?e.attrs.attributes.filter(e=>typeof e==`object`&&!!e&&`type`in e):[],w=e.attrs.props??{},E=new Map,D=new Set;if(t)for(let e of t)e.omitOnDefault===!0&&`defaultValue`in e&&e.defaultValue!==void 0&&E.set(e.name,e.defaultValue),e.type===`string`&&e.required===!1&&e.defaultValue===void 0&&D.add(e.name);for(let[e,t]of Object.entries(w)){let w=S.findIndex(t=>t.type===`mdxJsxAttribute`&&t.name===e);if(E.has(e)&&Object.is(E.get(e),t)){w>=0&&S.splice(w,1);continue}if(D.has(e)&&t===``){w>=0&&S.splice(w,1);continue}let O=propToMdxJsxAttribute(e,t);w>=0?S[w]=O:S.push(O)}return S}function propToMdxJsxAttribute(e,t){if(t===!0)return{type:`mdxJsxAttribute`,name:e,value:null};if(t===!1)return{type:`mdxJsxAttribute`,name:e,value:{type:`mdxJsxAttributeValueExpression`,value:`false`}};if(t==null)return{type:`mdxJsxAttribute`,name:e,value:null};if(typeof t==`string`)return{type:`mdxJsxAttribute`,name:e,value:t};if(typeof t==`number`)return{type:`mdxJsxAttribute`,name:e,value:{type:`mdxJsxAttributeValueExpression`,value:JSON.stringify(t)}};if(typeof t==`object`){let S;try{S=JSON.stringify(t)}catch{S=String(t)}return{type:`mdxJsxAttribute`,name:e,value:{type:`mdxJsxAttributeValueExpression`,value:S}}}return{type:`mdxJsxAttribute`,name:e,value:String(t)}}function emitMdxJsx(e,t,S,w){return{type:`mdxJsxFlowElement`,name:e,attributes:reconstructAttrs(t,w),children:S.all(t),data:{}}}const LOOM_ID_RE=/^[A-Za-z0-9]{20,}$/,LOOM_TIMESTAMP_RE=/^(?:\d+s?|(?:\d+h)?(?:\d+m)?(?:\d+s)?)$/;function isLoomHost(e){let t=e.toLowerCase();return t===`loom.com`||t===`www.loom.com`}function extractLoomId(e){let t=e.pathname.match(/^\/(?:share|embed)\/([A-Za-z0-9]+)\/?$/);if(!t)return null;let S=t[1]??``;return LOOM_ID_RE.test(S)?S:null}function parseLoomUrl(e){if(typeof e!=`string`||e.length===0)return null;let t;try{t=new URL(e)}catch{return null}if(t.protocol!==`http:`&&t.protocol!==`https:`||!isLoomHost(t.hostname))return null;let S=extractLoomId(t);if(!S)return null;let w=t.searchParams.get(`t`);return{id:S,startRaw:w&&w.length>0&&LOOM_TIMESTAMP_RE.test(w)?w:null}}function isLoomUrl(e){return parseLoomUrl(e)!==null}function isVimeoHost(e){let t=e.toLowerCase();return t===`vimeo.com`||t===`www.vimeo.com`||t===`player.vimeo.com`}function isVimeoUrl(e){if(typeof e!=`string`||e.length===0)return!1;let t;try{t=new URL(e)}catch{return!1}return t.protocol!==`http:`&&t.protocol!==`https:`?!1:isVimeoHost(t.hostname)}const YOUTUBE_VIDEO_ID_RE=/^[A-Za-z0-9_-]{11}$/;function isYouTubeHost(e){let t=e.toLowerCase();return t===`youtube.com`||t===`www.youtube.com`||t===`m.youtube.com`||t===`music.youtube.com`||t===`youtu.be`||t===`youtube-nocookie.com`||t===`www.youtube-nocookie.com`}function parseTimestampToSeconds(e){if(e.length===0)return null;if(/^[0-9]+$/.test(e)){let t=Number.parseInt(e,10);return t>0?t:null}let t=e.match(/^(?:([0-9]+)h)?(?:([0-9]+)m)?(?:([0-9]+)s?)?$/);if(!t)return null;let S=t[1]?Number.parseInt(t[1],10):0,w=t[2]?Number.parseInt(t[2],10):0,E=t[3]?Number.parseInt(t[3],10):0,D=S*3600+w*60+E;return D>0?D:null}function extractVideoId(e){if(e.hostname.toLowerCase()===`youtu.be`){let t=e.pathname.replace(/^\//,``).split(`/`)[0]??``;return YOUTUBE_VIDEO_ID_RE.test(t)?t:null}if(e.pathname===`/watch`){let t=e.searchParams.get(`v`)??``;return YOUTUBE_VIDEO_ID_RE.test(t)?t:null}let t=e.pathname.match(/^\/(?:embed|shorts|v)\/([A-Za-z0-9_-]{11})\/?$/);return t?t[1]??null:null}function parseYouTubeUrl(e){if(typeof e!=`string`||e.length===0)return null;let t;try{t=new URL(e)}catch{return null}if(t.protocol!==`http:`&&t.protocol!==`https:`||!isYouTubeHost(t.hostname))return null;let S=extractVideoId(t);if(!S)return null;let w=t.searchParams.get(`t`)??t.searchParams.get(`start`)??``;return{id:S,startSeconds:w.length>0?parseTimestampToSeconds(w):null,noCookie:t.hostname.toLowerCase().endsWith(`youtube-nocookie.com`)}}const calloutProps=[{name:`type`,type:`enum`,enumValues:[`note`,`tip`,`important`,`warning`,`caution`,`abstract`,`info`,`todo`,`success`,`question`,`failure`,`danger`,`bug`,`example`,`quote`],defaultValue:`note`,required:!1,description:`Callout variant`},{name:`title`,type:`string`,required:!1,description:`Optional heading shown above the body`},{name:`icon`,type:`string`,required:!1,advanced:!0,description:"Custom lucide icon override (e.g. `lucide:Lightbulb`)"},{name:`color`,type:`string`,required:!1,advanced:!0,description:"Optional accent color override (hex — e.g. `#F05032`)"},{name:`collapsible`,type:`boolean`,required:!1,defaultValue:!1,advanced:!0,description:"Render as a foldable `<details>` (Obsidian `[!TYPE]+/-`)"},{name:`defaultOpen`,type:`boolean`,required:!1,defaultValue:!0,advanced:!0,description:`When collapsible, start in the open state`},{name:`children`,type:`reactnode`,required:!0,description:`Callout content`}],htmlImgProps=[{name:`src`,type:`string`,required:!0,defaultValue:``,description:`Image source URL`,accept:ALLOWED_IMAGE_MIME_TYPES,autoFocus:!0},{name:`alt`,type:`string`,required:!0,description:`Alt text`},{name:`width`,type:`number`,required:!1,advanced:!0,description:`Image width`},{name:`height`,type:`number`,required:!1,advanced:!0,description:`Image height`},{name:`srcset`,type:`string`,required:!1,advanced:!0,description:`Responsive image candidate set (e.g. "x.png 1x, y.png 2x")`},{name:`sizes`,type:`string`,required:!1,advanced:!0,description:`Responsive image sizes hint paired with srcset`},{name:`loading`,type:`enum`,enumValues:[`eager`,`lazy`],defaultValue:`lazy`,required:!1,advanced:!0,omitOnDefault:!0,description:`Native img loading strategy (defaults to lazy)`},{name:`title`,type:`string`,required:!1,advanced:!0,description:`Native HTML title attribute (tooltip)`},{name:`decoding`,type:`enum`,enumValues:[`sync`,`async`,`auto`],defaultValue:`auto`,required:!1,advanced:!0,omitOnDefault:!0,description:`Hint for how the browser should decode the image`},{name:`fetchpriority`,type:`enum`,enumValues:[`high`,`low`,`auto`],defaultValue:`auto`,required:!1,advanced:!0,omitOnDefault:!0,description:`Resource fetch priority hint`},{name:`crossorigin`,type:`enum`,enumValues:[`anonymous`,`use-credentials`],required:!1,advanced:!0,description:`CORS mode for the image fetch`},{name:`referrerpolicy`,type:`string`,required:!1,advanced:!0,description:`Referrer policy for the image fetch (HTML referrerpolicy values)`},{name:`align`,type:`enum`,enumValues:[`center`,`left`,`right`],defaultValue:`center`,required:!1,omitOnDefault:!0,description:`Alignment within the column`}],embedProps=[{name:`src`,type:`string`,required:!0,defaultValue:``,description:`Embedded page URL (must start with http:// or https://)`,autoFocus:!0},{name:`title`,type:`string`,required:!1,description:`Iframe title (accessible label for screen readers)`},{name:`width`,type:`string`,required:!1,advanced:!0,description:`Embed width as a CSS length (e.g. "100%", "640px")`},{name:`height`,type:`string`,required:!1,advanced:!0,description:`Embed height as a CSS length (e.g. "26rem", "480px")`},{name:`align`,type:`enum`,enumValues:[`center`,`left`,`right`],defaultValue:`center`,required:!1,omitOnDefault:!0,description:`Alignment within the column`}],htmlVideoProps=[{name:`src`,type:`string`,required:!0,defaultValue:``,description:`Video source URL`,accept:ALLOWED_VIDEO_MIME_TYPES,autoFocus:!0},{name:`controls`,type:`boolean`,required:!1,defaultValue:!0,advanced:!0,omitOnDefault:!0,description:`Show native HTML5 video controls (defaults to true)`,hideWhen:e=>typeof e.src==`string`&&(isVimeoUrl(e.src)||isLoomUrl(e.src))},{name:`autoplay`,type:`boolean`,required:!1,advanced:!0,description:`Begin playback as soon as possible (usually requires muted)`},{name:`poster`,type:`string`,required:!1,advanced:!0,description:`Poster image URL shown before playback`,accept:ALLOWED_IMAGE_MIME_TYPES,hideWhen:e=>typeof e.src==`string`&&(isVimeoUrl(e.src)||isLoomUrl(e.src))},{name:`width`,type:`number`,required:!1,advanced:!0,description:`Video width`},{name:`height`,type:`number`,required:!1,advanced:!0,description:`Video height`},{name:`title`,type:`string`,required:!1,advanced:!0,description:`Native HTML title attribute (tooltip)`},{name:`muted`,type:`boolean`,required:!1,advanced:!0,description:`Mute audio on load`},{name:`loop`,type:`boolean`,required:!1,advanced:!0,description:`Restart from the beginning when playback ends`,hideWhen:e=>typeof e.src==`string`&&isLoomUrl(e.src)},{name:`playsinline`,type:`boolean`,required:!1,advanced:!0,description:`Play inline on iOS rather than entering fullscreen`,hideWhen:e=>typeof e.src==`string`&&(isVimeoUrl(e.src)||isLoomUrl(e.src))},{name:`preload`,type:`enum`,enumValues:[`none`,`metadata`,`auto`],required:!1,advanced:!0,description:`Hint for how much of the video to preload`,hideWhen:e=>typeof e.src==`string`&&(parseYouTubeUrl(e.src)!==null||isVimeoUrl(e.src)||isLoomUrl(e.src))}],htmlAudioProps=[{name:`src`,type:`string`,required:!0,defaultValue:``,description:`Audio source URL`,accept:ALLOWED_AUDIO_MIME_TYPES,autoFocus:!0},{name:`controls`,type:`boolean`,required:!1,defaultValue:!0,advanced:!0,omitOnDefault:!0,description:`Show native HTML5 audio controls (defaults to true)`},{name:`autoplay`,type:`boolean`,required:!1,advanced:!0,description:`Begin playback as soon as possible (usually requires muted)`},{name:`title`,type:`string`,required:!1,advanced:!0,description:`Native HTML title attribute (tooltip)`},{name:`muted`,type:`boolean`,required:!1,advanced:!0,description:`Mute audio on load`},{name:`loop`,type:`boolean`,required:!1,advanced:!0,description:`Restart from the beginning when playback ends`},{name:`preload`,type:`enum`,enumValues:[`none`,`metadata`,`auto`],required:!1,advanced:!0,description:`Hint for how much of the audio to preload`}],accordionProps=[{name:`title`,type:`string`,required:!0,description:`Accordion heading shown inside the <summary>`},{name:`defaultOpen`,type:`boolean`,required:!1,defaultValue:!1,description:`When true, the accordion renders expanded on initial load`},{name:`icon`,type:`string`,required:!1,advanced:!0,description:"Custom lucide icon override (e.g. `lucide:Rocket`)"},{name:`description`,type:`string`,required:!1,advanced:!0,description:`Optional subtitle rendered below the title inside <summary>`},{name:`id`,type:`string`,required:!1,advanced:!0,description:"HTML id attribute for deep-linking (e.g. `#advanced-options`)"},{name:`name`,type:`string`,required:!1,advanced:!0,description:`HTML5 <details name=> group — siblings with the same name are mutually exclusive`}],gfmCalloutProps=[calloutProps[0],calloutProps[1],calloutProps[4],calloutProps[5],calloutProps[6]],commonMarkImageProps=[htmlImgProps[0],htmlImgProps[1],htmlImgProps[7]],htmlDetailsAccordionProps=[accordionProps[0],accordionProps[1],accordionProps[4],accordionProps[5]],wikiEmbedImageProps=[{name:`alias`,type:`string`,required:!1,defaultValue:``,description:"Alt text (Obsidian alias syntax: `![[file.png|alt text]]`)"}],wikiEmbedVideoProps=[{name:`alias`,type:`string`,required:!1,defaultValue:``,description:"Title text (Obsidian alias syntax: `![[clip.mp4|title]]`)"}],wikiEmbedAudioProps=[{name:`alias`,type:`string`,required:!1,defaultValue:``,description:"Title text (Obsidian alias syntax: `![[song.mp3|title]]`)"}],tabsProps=[{name:`id`,type:`string`,required:!1,advanced:!0,description:"HTML id attribute for deep-linking (e.g. `#install-tabs`)"}],tabProps=[{name:`label`,type:`string`,required:!0,autoFocus:!0,defaultValue:`Tab`,description:`Tab strip label — shown in the clickable pill at the top`},{name:`id`,type:`string`,required:!1,advanced:!0,description:"HTML id attribute for deep-linking (e.g. `#tab-npm`)"}],mathProps=[{name:`formula`,type:`string`,required:!0,autoFocus:!0,language:`latex`,description:`LaTeX math source (rendered with KaTeX in the browser)`},{name:`id`,type:`string`,required:!1,advanced:!0,description:"HTML id attribute for deep-linking (e.g. `#eq-pythagoras`)"},{name:`language`,type:`string`,required:!1,advanced:!0,description:"Forward-compat hint for the math source language (default `latex`). Reserved for future MathJax / Typst / AsciiMath substrates."}],dollarMathProps=[mathProps[0]],mathFenceProps=[mathProps[0]],mermaidProps=[{name:`chart`,type:`string`,required:!0,autoFocus:!0,language:`mermaid`,description:`Mermaid chart source (graph / flowchart / sequenceDiagram / class / state / etc.)`}],wikiEmbedFileProps=[{name:`alias`,type:`string`,required:!1,defaultValue:``,description:"Display name override (Obsidian alias syntax: `![[file.zip|label]]`)"}],fileProps=[{name:`src`,type:`string`,required:!0,defaultValue:``,description:`File URL`,accept:[`*/*`],autoFocus:!0}],pdfProps=[{name:`src`,type:`string`,required:!0,defaultValue:``,description:`PDF source URL`,accept:ALLOWED_PDF_MIME_TYPES,autoFocus:!0},{name:`title`,type:`string`,required:!1,advanced:!0,description:`Accessible label for the embedded PDF viewer`},{name:`anchor`,type:`string`,required:!1,advanced:!0,description:"PDF viewer parameters as a single URL-fragment string (e.g. `page=3&height=600`)"}],mirrorProps=[{name:`src`,type:`string`,required:!0,description:"Path of the source doc, extension-less (e.g. `api-spec`).",autoFocus:!0},{name:`anchor`,type:`string`,required:!0,description:"Id of the `<MirrorSource>` block within the source doc."}],mirrorSourceProps=[{name:`id`,type:`string`,required:!0,description:"Stable id agents and authors use to reference this block from `<Mirror>` elsewhere.",autoFocus:!0},{name:`children`,type:`reactnode`,required:!0,description:`Block content this MirrorSource owns — paragraphs, callouts, code, nested JSX, anything.`}];function escapeHtmlAttr(e){return e.replace(/&/g,`&amp;`).replace(/"/g,`&quot;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}function escapeHtmlText(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}function serializeWikiEmbed(e){let t=e.attrs.props,S=t?.target??``,w=typeof t?.alias==`string`&&t.alias.length>0?t.alias:null,E=typeof t?.anchor==`string`&&t.anchor.length>0?t.anchor:null,D=w??(E?`${S}#${E}`:S);return{type:`wikiLinkEmbed`,value:D,data:{target:S,anchor:E,alias:w},children:[{type:`text`,value:D}]}}const builtInComponents=[{name:`Callout`,surface:`canonical`,hasChildren:!0,props:calloutProps,icon:`MessageSquareWarning`,category:`content`,displayName:`Callout`,description:`Alert / admonition with 15 type variants — 5 GFM (note, tip, important, warning, caution) plus 10 Obsidian-parity (abstract, info, todo, success, question, failure, danger, bug, example, quote)`,searchTerms:[`note`,`tip`,`important`,`warning`,`caution`,`abstract`,`info`,`todo`,`success`,`question`,`failure`,`danger`,`bug`,`example`,`quote`,`alert`,`admonition`,`callout`],serialize:(e,t)=>emitMdxJsx(`Callout`,e,t,calloutProps)},{name:`img`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:htmlImgProps,icon:`Image`,category:`media`,displayName:`Image`,description:`Image with click-to-zoom and HTML-native attributes`,searchTerms:[`image`,`zoom`,`picture`,`photo`],placeholder:{label:`Add an image`},serialize:(e,t)=>emitMdxJsx(`img`,e,t,htmlImgProps)},{name:`video`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:htmlVideoProps,icon:`SquarePlay`,category:`media`,displayName:`Video`,description:`HTML5 video player with native controls`,searchTerms:[`video`,`media`,`player`,`mp4`,`webm`,`movie`],placeholder:{label:`Add a video`},serialize:(e,t)=>emitMdxJsx(`video`,e,t,htmlVideoProps)},{name:`audio`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:htmlAudioProps,icon:`Volume2`,category:`media`,displayName:`Audio`,description:`HTML5 audio player with native controls`,searchTerms:[`audio`,`sound`,`music`,`mp3`,`podcast`,`player`],placeholder:{label:`Add audio`},serialize:(e,t)=>emitMdxJsx(`audio`,e,t,htmlAudioProps)},{name:`Pdf`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:pdfProps,icon:`FileText`,category:`media`,displayName:`PDF`,description:"Embedded PDF viewer (`#page=N` to open at page N, `#height=N` for viewer height)",searchTerms:[`pdf`,`document`,`embed`,`pdfjs`],placeholder:{label:`Add a PDF`},serialize:(e,t)=>emitMdxJsx(`Pdf`,e,t,pdfProps)},{name:`File`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:fileProps,icon:`Paperclip`,category:`media`,displayName:`File`,description:`Downloadable file attachment — inline row with name + size + download link`,searchTerms:[`file`,`attachment`,`download`,`document`,`zip`,`docx`,`doc`],placeholder:{label:`Add a file`},serialize:(e,t)=>emitMdxJsx(`File`,e,t,fileProps)},{name:`Embed`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:embedProps,icon:`AppWindow`,category:`media`,displayName:`Embed`,description:`Inline web embed (iframe) — drop a URL, get a resizable preview pane`,searchTerms:[`embed`,`iframe`,`website`,`page`,`inline`,`frame`,`preview`],placeholder:{label:`Embed a URL`},serialize:(e,t)=>emitMdxJsx(`Embed`,e,t,embedProps)},{name:`Accordion`,surface:`canonical`,hasChildren:!0,props:accordionProps,icon:`ChevronRight`,category:`content`,displayName:`Accordion`,description:"Standalone expand/collapse via native HTML5 <details>/<summary>. Group siblings with the `name` prop for exclusive-accordion UX.",searchTerms:[`toggle`,`accordion`,`expandable`,`details`,`disclosure`,`collapse`,`fold`],exampleBody:`Body content revealed when the accordion is expanded.`,serialize:(e,t)=>emitMdxJsx(`Accordion`,e,t,accordionProps)},{name:`Tabs`,surface:`canonical`,hasChildren:!0,emptyChildName:`Tab`,props:tabsProps,icon:`LayoutPanelTop`,category:`content`,displayName:`Tabs`,description:"Horizontal tab strip + active panel below. Each `<Tab>` child is one panel; clickable pills at the top switch the active one. Active selection is ephemeral (resets on reload).",searchTerms:[`tabs`,`tabbed`,`panels`,`tabgroup`,`switcher`],exampleBody:`<Tab label="One">Body of the first tab panel.</Tab>
390
+ `)}const PREVIEW_THEME_TOKENS=[{name:`--chart-1`,light:`oklch(0.62 0.19 259)`,dark:`oklch(0.72 0.14 259)`},{name:`--chart-2`,light:`oklch(0.58 0.14 145)`,dark:`oklch(0.73 0.13 145)`},{name:`--chart-3`,light:`oklch(0.62 0.15 70)`,dark:`oklch(0.77 0.14 70)`},{name:`--chart-4`,light:`oklch(0.55 0.18 290)`,dark:`oklch(0.72 0.16 290)`},{name:`--chart-5`,light:`oklch(0.58 0.21 25)`,dark:`oklch(0.72 0.2 25)`},{name:`--primary`,light:`oklch(0.6321 0.1983 259.59)`,dark:`#69a3ff`},{name:`--primary-foreground`,light:`oklch(0.985 0 0)`,dark:`oklch(0.205 0 0)`},{name:`--foreground`,light:`oklch(0.145 0 0)`,dark:`oklch(0.985 0 0)`},{name:`--background`,light:`oklch(1 0 0)`,dark:`oklch(0.145 0 0)`},{name:`--card`,light:`oklch(1 0 0)`,dark:`oklch(0.205 0 0)`},{name:`--card-foreground`,light:`oklch(0.145 0 0)`,dark:`oklch(0.985 0 0)`},{name:`--muted-foreground`,light:`oklch(0.556 0 0)`,dark:`oklch(0.708 0 0)`},{name:`--border`,light:`oklch(0.922 0 0)`,dark:`oklch(1 0 0 / 10%)`},{name:`--destructive`,light:`oklch(0.577 0.245 27.325)`,dark:`oklch(0.704 0.191 22.216)`},{name:`--radius`,light:`0.625rem`,dark:`0.625rem`}],DEFAULT_SERVER_HOST=`localhost`,ALLOWED_IMAGE_MIME_TYPES=[`image/jpeg`,`image/png`,`image/gif`,`image/webp`,`image/svg+xml`],ALLOWED_VIDEO_MIME_TYPES=[`video/mp4`,`video/webm`,`video/ogg`],ALLOWED_AUDIO_MIME_TYPES=[`audio/mpeg`,`audio/wav`,`audio/ogg`],ALLOWED_PDF_MIME_TYPES=[`application/pdf`],IMAGE_EXTENSIONS=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`avif`,`svg`]),VIDEO_EXTENSIONS=new Set([`mp4`,`webm`,`mov`,`m4v`,`mkv`]),PDF_EXTENSIONS=new Set([`pdf`]),AUDIO_EXTENSIONS=new Set([`mp3`,`wav`,`ogg`,`m4a`,`flac`,`aac`,`opus`]),FILE_ATTACHMENT_EXTENSIONS=new Set(`pdf.docx.xlsx.pptx.doc.xls.ppt.zip.7z.tar.gz.rar.csv.tsv.rtf.json.yaml.yml.xml.txt.pages.numbers.key.odt.ods.odp.epub.mobi`.split(`.`)),EXECUTABLE_BLOCKLIST_EXTENSIONS=new Set(`exe.bat.cmd.ps1.com.msi.vbs.js.jse.wsf.wsh.hta.sh.command.csh.ksh.bash.zsh.fish.desktop.action.workflow.html.htm.svg.xml.mhtml.svgz.dmg.pkg.mpkg.scpt.applescript.terminal.prefpane.webloc.inetloc.fileloc.jar.appimage.deb.rpm.msix.appx.ipa.apk.pif.scr.lnk.url`.split(`.`)),ASSET_EXTENSIONS=new Set(`png.jpg.jpeg.gif.webp.avif.svg.apng.heic.heif.tiff.bmp.ico.pdf.mp4.webm.mov.m4v.mkv.avi.flv.wmv.mpeg.mpg.mp3.wav.ogg.m4a.flac.aac.opus.zip.woff.woff2.ttf.otf.eot.docx.xlsx.pptx.csv.txt.rtf.json.toml`.split(`.`)),INLINE_RENDERABLE_EXTENSIONS=new Set(`png.jpg.jpeg.gif.webp.avif.apng.heic.heif.tiff.bmp.ico.svg.pdf.mp4.webm.mov.m4v.mkv.mp3.wav.ogg.m4a.flac.aac.opus.json.toml`.split(`.`)),DEFAULT_DEDUP_MODE=`same-dir`,WIKI_EMBED_EXTENSIONS=new Set(`png.jpg.jpeg.gif.webp.avif.svg.pdf.mp4.webm.mov.m4v.mkv.mp3.wav.ogg.m4a.flac.aac.opus.docx.xlsx.pptx.doc.xls.ppt.zip.7z.tar.gz.rar.csv.tsv.rtf.json.yaml.yml.xml.txt.pages.numbers.key.odt.ods.odp.epub.mobi`.split(`.`)),SIDEBAR_IMAGE_EXTENSIONS=[`png`,`jpg`,`jpeg`,`gif`,`webp`,`avif`],SIDEBAR_VIDEO_EXTENSIONS=[`mp4`,`webm`,`mov`,`m4v`],SIDEBAR_AUDIO_EXTENSIONS=[`mp3`,`wav`,`ogg`,`m4a`,`flac`,`aac`,`opus`],SIDEBAR_PDF_EXTENSIONS=[`pdf`],SIDEBAR_TEXT_EXTENSIONS=[`json`,`toml`];function assertSubset(e,t,S){for(let w of t)if(!S.has(w))throw Error(`${e}: ${w} is not present in canonical upload constants`)}assertSubset(`SIDEBAR_IMAGE_ASSET_EXTENSIONS`,SIDEBAR_IMAGE_EXTENSIONS,IMAGE_EXTENSIONS),assertSubset(`SIDEBAR_VIDEO_ASSET_EXTENSIONS`,SIDEBAR_VIDEO_EXTENSIONS,VIDEO_EXTENSIONS),assertSubset(`SIDEBAR_AUDIO_ASSET_EXTENSIONS`,SIDEBAR_AUDIO_EXTENSIONS,AUDIO_EXTENSIONS),assertSubset(`SIDEBAR_PDF_ASSET_EXTENSIONS`,SIDEBAR_PDF_EXTENSIONS,PDF_EXTENSIONS),assertSubset(`FILE_ATTACHMENT_EXTENSIONS`,[...FILE_ATTACHMENT_EXTENSIONS],WIKI_EMBED_EXTENSIONS);const SIDEBAR_IMAGE_ASSET_EXTENSIONS=new Set(SIDEBAR_IMAGE_EXTENSIONS),SIDEBAR_VIDEO_ASSET_EXTENSIONS=new Set(SIDEBAR_VIDEO_EXTENSIONS),SIDEBAR_AUDIO_ASSET_EXTENSIONS=new Set(SIDEBAR_AUDIO_EXTENSIONS),SIDEBAR_PDF_ASSET_EXTENSIONS=new Set(SIDEBAR_PDF_EXTENSIONS),SIDEBAR_TEXT_ASSET_EXTENSIONS=new Set(SIDEBAR_TEXT_EXTENSIONS),SIDEBAR_RENDERABLE_ASSET_EXTENSIONS=new Set([...SIDEBAR_IMAGE_EXTENSIONS,...SIDEBAR_VIDEO_EXTENSIONS,...SIDEBAR_AUDIO_EXTENSIONS,...SIDEBAR_PDF_EXTENSIONS,...SIDEBAR_TEXT_EXTENSIONS]);assertSubset(`SIDEBAR_RENDERABLE_ASSET_EXTENSIONS`,[...SIDEBAR_RENDERABLE_ASSET_EXTENSIONS],INLINE_RENDERABLE_EXTENSIONS);function mediaKindForSidebarAssetExtension(e){let t=e.toLowerCase().replace(/^\./,``);return SIDEBAR_IMAGE_ASSET_EXTENSIONS.has(t)?`image`:SIDEBAR_VIDEO_ASSET_EXTENSIONS.has(t)?`video`:SIDEBAR_AUDIO_ASSET_EXTENSIONS.has(t)?`audio`:SIDEBAR_PDF_ASSET_EXTENSIONS.has(t)?`pdf`:SIDEBAR_TEXT_ASSET_EXTENSIONS.has(t)?`text`:null}const CodeBlockFidelity=index_default$11.extend({priority:60,addAttributes(){return{...this.parent?.(),fenceDelimiter:{default:"`"},fenceLength:{default:3},meta:{default:null},sourceStyle:{default:`fenced`}}}}),EmphasisFidelity=index_default$9.extend({name:`emphasis`,priority:60,addAttributes(){return{...this.parent?.(),sourceDelimiter:{default:`*`}}},addInputRules(){return[markInputRule({find:starInputRegex,type:this.type,getAttributes:{sourceDelimiter:`*`}}),markInputRule({find:underscoreInputRegex,type:this.type,getAttributes:{sourceDelimiter:`_`}})]}}),StrongFidelity=index_default$10.extend({name:`strong`,priority:60,addAttributes(){return{...this.parent?.(),sourceDelimiter:{default:`**`}}},addInputRules(){return[markInputRule({find:starInputRegex$1,type:this.type,getAttributes:{sourceDelimiter:`**`}}),markInputRule({find:underscoreInputRegex$1,type:this.type,getAttributes:{sourceDelimiter:`__`}})]}}),EscapeMark=Mark.create({name:`escapeMark`,priority:10,excludes:``,inclusive:!1,parseHTML(){return[{tag:`span[data-escape-mark]`}]},renderHTML(){return[`span`,{"data-escape-mark":``},0]}}),HardBreakFidelity=index_default$8.extend({priority:60,addAttributes(){return{...this.parent?.(),hardBreakStyle:{default:`backslash`}}}}),HeadingFidelity=index_default$7.extend({priority:60,addAttributes(){return{...this.parent?.(),headingStyle:{default:`atx`},sourceTrailingHashes:{default:null},sourceUnderlineLength:{default:null},sourceContiguousNext:{default:!1}}}}),HtmlBlockFidelity=Node3.create({name:`htmlBlock`,group:`block`,atom:!0,priority:60,addAttributes(){return{content:{default:``}}},parseHTML(){return[{tag:`div[data-html-block]`}]},renderHTML({node:e}){return[`div`,{"data-html-block":``,class:`html-block`},e.attrs.content]}});function toDesktopAssetHref(e){if(typeof e!=`string`||!e.startsWith(`/`))return e;let t=globalThis.window?.okDesktop?.config?.apiOrigin;return typeof t==`string`&&t?t+e:e}const ImageSrcFidelity=index_default$6.extend({priority:60,addAttributes(){return{...this.parent?.(),sourceUrl:{default:null,rendered:!1}}},renderHTML({HTMLAttributes:e}){let t=mergeAttributes(this.options.HTMLAttributes,e);return typeof t.src==`string`&&(t.src=toDesktopAssetHref(t.src)),[`img`,t]}}),JsxComponent=Node3.create({name:`jsxComponent`,group:`block`,atom:!1,content:`block*`,isolating:!0,selectable:!0,defining:!0,priority:60,addAttributes(){return{componentName:{default:``},kind:{default:`element`},attributes:{default:[]},sourceRaw:{default:``},sourceDirty:{default:!1},props:{default:{}}}},parseHTML(){return[{tag:`div[data-jsx-component]`,getAttrs:e=>typeof e==`string`?!1:{componentName:e.getAttribute(`data-component-name`)||``,sourceRaw:e.getAttribute(`data-source-raw`)||``}}]},renderHTML({HTMLAttributes:e}){return[`div`,{"data-jsx-component":``,"data-component-name":e.componentName,"data-source-raw":e.sourceRaw},0]},addCommands(){return{insertJsxComponent:e=>({commands:t})=>t.insertContent({type:this.name,attrs:{sourceRaw:e}})}}}),JsxInline=Node3.create({name:`jsxInline`,group:`inline`,inline:!0,atom:!1,content:`text*`,isolating:!1,selectable:!0,priority:60,addAttributes(){return{}},parseHTML(){return[{tag:`span[data-jsx-inline]`}]},renderHTML(){return[`span`,{"data-jsx-inline":``},0]}}),SAFE_URL_SCHEMES=[`https`,`http`,`mailto`,`tel`,`ftp`,`sms`],SCHEME_ALT=SAFE_URL_SCHEMES.map(e=>`${e}:`).join(`|`),SAFE_URL_SCHEME_RE=RegExp(`^(?:${SCHEME_ALT}|\\/|#|\\?|\\.\\/|\\.\\.\\/)`,`i`);function isRelativeUrl(e){let t=e.trim();if(t===``)return!0;let S=t.indexOf(`:`);if(S===-1)return!0;let w=t.indexOf(`/`),E=t.indexOf(`?`),D=t.indexOf(`#`);return S>Math.min(w===-1?1/0:w,E===-1?1/0:E,D===-1?1/0:D)}const ALLOWED_LINK_SCHEMES=new Set(SAFE_URL_SCHEMES.map(e=>`${e}:`)),PLACEHOLDER_BASE=`https://placeholder.invalid`;function isAllowedLinkUri(e){try{let t=new URL(e,PLACEHOLDER_BASE);return ALLOWED_LINK_SCHEMES.has(t.protocol.toLowerCase())}catch{return!1}}const LinkFidelity=index_default$5.extend({priority:60,addOptions(){return{openOnClick:!1,enableClickSelection:!1,linkOnPaste:!0,autolink:!0,protocols:[],defaultProtocol:`http`,HTMLAttributes:{target:`_blank`,rel:`noopener noreferrer`},isAllowedUri:isAllowedLinkUri,validate:isAllowedLinkUri,shouldAutoLink:()=>!0}},addAttributes(){return{...this.parent?.(),linkStyle:{default:`inline`,rendered:!1},refLabel:{default:null,rendered:!1},sourceForm:{default:null,rendered:!1},target:{default:null,rendered:!1},anchor:{default:null,rendered:!1},alias:{default:null,rendered:!1},sourceUrlForm:{default:null,rendered:!1},sourceTitleMarker:{default:null,rendered:!1}}}}),LinkRefDefFidelity=Node3.create({name:`linkRefDef`,group:`block`,atom:!0,priority:60,addAttributes(){return{label:{default:``},href:{default:``},title:{default:null},sourceLayout:{default:null},sourceTitleMarker:{default:null}}},parseHTML(){return[{tag:`div[data-link-ref-def]`}]},renderHTML({node:e}){let{label:t,href:S,title:w}=e.attrs,E=w?`[${t}]: ${S} "${w}"`:`[${t}]: ${S}`;return[`div`,{"data-link-ref-def":``,class:`link-ref-def`},E]}});function isBulletList(e){return e.type.name===`list`&&!e.attrs.ordered}function isOrderedList(e){return e.type.name===`list`&&!!e.attrs.ordered}function hasTaskItems(e){let t=!1;return e.forEach(e=>{e.type.name===`listItem`&&e.attrs.checked!==null&&(t=!0)}),t}function toggleListKind(e,t,S,w,E,D,O){let k=findParentNode(e=>e.type.name===`list`)(e.selection);if(k&&E(k.node)){let{$from:S,$to:E}=e.selection;return S.blockRange(E)?liftListItem$1(w)(e,t):!1}if(k){if(!t)return!0;let{tr:S}=e;return S.setNodeMarkup(k.pos,void 0,{...k.node.attrs,...D}),O!==void 0&&k.node.forEach((e,t)=>{if(e.type.name===`listItem`){let w=k.pos+1+t;S.setNodeMarkup(w,void 0,{...e.attrs,...O})}}),t(S),!0}return wrapInList$1(S,D)(e,void 0)?t?wrapInList$1(S,D)(e,S=>{if(O){let t=S.mapping.map(e.selection.$from.pos),w=S.doc.resolve(t);for(let e=w.depth;e>0;e--){let t=w.node(e);if(t.type.name===`listItem`){S.setNodeMarkup(w.before(e),void 0,{...t.attrs,...O});break}}}t(S)}):!0:!1}const ListNode=Node3.create({name:`list`,group:`block list`,content:`listItem+`,priority:60,addAttributes(){return{ordered:{default:!1},start:{default:1},spread:{default:!1},bulletMarker:{default:null},listMarkerDelimiter:{default:null}}},parseHTML(){return[{tag:`ul`,getAttrs:()=>({ordered:!1})},{tag:`ol`,getAttrs:e=>({ordered:!0,start:e.getAttribute(`start`)?Number(e.getAttribute(`start`)):1})}]},renderHTML({node:e,HTMLAttributes:t}){let S=e.attrs.ordered?`ol`:`ul`,w={};return e.attrs.ordered&&e.attrs.start!==1&&(w.start=e.attrs.start),[S,mergeAttributes(t,w),0]},addCommands(){return{toggleBulletList:()=>({state:e,dispatch:t})=>{let S=e.schema.nodes.list,w=e.schema.nodes.listItem;return!S||!w?!1:toggleListKind(e,t,S,w,e=>isBulletList(e)&&!hasTaskItems(e),{ordered:!1},{checked:null})},toggleOrderedList:()=>({state:e,dispatch:t})=>{let S=e.schema.nodes.list,w=e.schema.nodes.listItem;return!S||!w?!1:toggleListKind(e,t,S,w,e=>isOrderedList(e),{ordered:!0},{checked:null})},toggleTaskList:()=>({state:e,dispatch:t})=>{let S=e.schema.nodes.list,w=e.schema.nodes.listItem;return!S||!w?!1:toggleListKind(e,t,S,w,e=>isBulletList(e)&&hasTaskItems(e),{ordered:!1},{checked:!1})}}},addInputRules(){return[wrappingInputRule({find:/^\s*([-+*])(?!\s*\[[ xX]\])\s$/,type:this.type,getAttributes:e=>({ordered:!1,bulletMarker:e[1]})}),wrappingInputRule({find:/^\s*(\d+)([.)])\s$/,type:this.type,getAttributes:e=>({ordered:!0,start:Number(e[1]),listMarkerDelimiter:e[2]})}),new InputRule({find:/^\s*[-*+]\s\[([ xX])\]\s$/,handler:({state:e,range:t,match:S})=>{let w=e.schema.nodes.list;if(!w)return null;let E=S[1]!==` `,D=e.tr.delete(t.from,t.to),O=D.doc.resolve(t.from).blockRange();if(!O)return null;let k=findWrapping(O,w,{ordered:!1});if(!k)return null;D.wrap(O,k);let j=D.doc.resolve(D.mapping.map(t.from));for(let e=j.depth;e>0;e--){let t=j.node(e);if(t.type.name===`listItem`){D.setNodeMarkup(j.before(e),void 0,{...t.attrs,checked:E});break}}}})]},addKeyboardShortcuts(){return{"Mod-Shift-8":()=>this.editor.commands.toggleBulletList(),"Mod-Shift-7":()=>this.editor.commands.toggleOrderedList(),"Mod-Shift-9":()=>this.editor.commands.toggleTaskList()}}}),ListItemNode=Node3.create({name:`listItem`,content:`paragraph block*`,defining:!0,addAttributes(){return{checked:{default:null},spread:{default:!1}}},parseHTML(){return[{tag:`li`,getAttrs:e=>{let t=e.querySelector(`input[type="checkbox"]`);return{checked:t?t.checked:null}}}]},renderHTML({node:e,HTMLAttributes:t}){return e.attrs.checked===null?[`li`,mergeAttributes(t),0]:[`li`,mergeAttributes(t,{"data-type":`taskItem`,"data-checked":e.attrs.checked?`true`:`false`}),[`label`,{contenteditable:`false`},[`input`,{type:`checkbox`,...e.attrs.checked?{checked:`checked`}:{}}]],[`div`,0]]},addNodeView(){return({node:e,getPos:t,editor:S,HTMLAttributes:w})=>{let E=document.createElement(`li`);Object.entries(mergeAttributes(w,e.attrs.checked===null?{}:{"data-type":`taskItem`,"data-checked":String(!!e.attrs.checked)})).forEach(([e,t])=>{t!=null&&E.setAttribute(e,String(t))});let D=null,O=null,k=document.createElement(`div`);return e.attrs.checked!==null&&(D=document.createElement(`label`),D.contentEditable=`false`,O=document.createElement(`input`),O.type=`checkbox`,O.checked=!!e.attrs.checked,S.isEditable||(O.disabled=!0),O.addEventListener(`change`,()=>{let w=t();w===void 0||typeof w!=`number`||S.view.dispatch(S.view.state.tr.setNodeMarkup(w,void 0,{...e.attrs,checked:O?.checked??!1}))}),D.appendChild(O),E.appendChild(D)),E.appendChild(k),{dom:E,contentDOM:k,update(t){return t.type!==e.type||t.attrs.checked!==null!=(e.attrs.checked!==null)?!1:(O&&t.attrs.checked!==null&&(O.checked=!!t.attrs.checked,E.setAttribute(`data-checked`,String(!!t.attrs.checked))),e=t,!0)}}}},addKeyboardShortcuts(){return{Enter:()=>this.editor.commands.splitListItem(this.name),Tab:()=>{let{$from:e}=this.editor.state.selection;for(let t=e.depth;t>0;t--)if(e.node(t).type.name===`listItem`)return this.editor.commands.sinkListItem(this.name);return!1},"Shift-Tab":()=>{let{$from:e}=this.editor.state.selection;for(let t=e.depth;t>0;t--)if(e.node(t).type.name===`listItem`)return this.editor.commands.liftListItem(this.name);return!1}}}}),List=ListNode,ListItem=ListItemNode,MathInline=Node3.create({name:`mathInline`,group:`inline`,inline:!0,atom:!0,selectable:!0,priority:60,addAttributes(){return{formula:{default:``},id:{default:null},language:{default:`latex`}}},parseHTML(){return[{tag:`span[data-math-inline]`,getAttrs:e=>typeof e==`string`?!1:{formula:e.getAttribute(`data-formula`)||``,id:e.getAttribute(`id`)||null,language:e.getAttribute(`data-language`)||`latex`}}]},renderHTML({HTMLAttributes:e}){return[`span`,{"data-math-inline":``,"data-formula":e.formula,"data-language":e.language,...e.id?{id:e.id}:{}}]},addCommands(){return{insertMathInline:e=>({commands:t})=>t.insertContent({type:this.name,attrs:{formula:e}})}}}),RawMdxFallback=Node3.create({name:`rawMdxFallback`,group:`block`,atom:!1,content:`text*`,isolating:!0,selectable:!0,defining:!0,priority:60,addAttributes(){return{reason:{default:``},originalSpan:{default:{start:0,end:0}}}},parseHTML(){let e=e=>typeof e==`string`?!1:{reason:e.getAttribute(`data-reason`)||``};return[{tag:`div[data-raw-mdx-fallback]`,getAttrs:e},{tag:`pre[data-raw-mdx-fallback]`,getAttrs:e}]},renderHTML({HTMLAttributes:e}){return[`div`,{"data-raw-mdx-fallback":``,"data-raw-badge":`raw`,"data-reason":e.reason,contenteditable:`false`,class:`raw-mdx-fallback`},0]},addNodeView(){return({HTMLAttributes:e})=>{let t=document.createElement(`div`);t.setAttribute(`data-raw-mdx-fallback`,``),t.setAttribute(`data-raw-badge`,`raw`),t.setAttribute(`contenteditable`,`false`),t.classList.add(`raw-mdx-fallback`),e.reason&&t.setAttribute(`data-reason`,e.reason);let S=document.createElement(`pre`);return S.classList.add(`raw-mdx-fallback-content`),S.setAttribute(`contenteditable`,`false`),t.appendChild(S),{dom:t,contentDOM:S,ignoreMutation:()=>!0}}}}),BlockquoteFidelity=index_default$3.extend({priority:60,addAttributes(){return{...this.parent?.(),sourceMarkerSpacings:{default:null}}}}),CodeMarkFidelity=index_default$2.extend({excludes:``,addAttributes(){return{...this.parent?.(),sourceFenceChar:{default:"`"},sourceFenceLength:{default:1}}}}),CommentBlock=Node3.create({name:`commentBlock`,group:`block`,content:`block+`,defining:!0,priority:60,addAttributes(){return{sourceForm:{default:`percent`,parseHTML:e=>e.getAttribute(`data-source-form`)===`html`?`html`:`percent`,renderHTML:e=>e.sourceForm===`html`?{"data-source-form":`html`}:{}},sourceLayout:{default:`block`,parseHTML:e=>e.getAttribute(`data-source-layout`)===`inline`?`inline`:`block`,renderHTML:e=>e.sourceLayout===`inline`?{"data-source-layout":`inline`}:{}}}},parseHTML(){return[{tag:`aside[data-comment-block]`},{tag:`aside.comment-block`}]},renderHTML({HTMLAttributes:e}){return[`aside`,{"data-comment-block":``,"data-clipboard-omit":`true`,class:`comment-block`,style:`display: none;`,...e},0]},addCommands(){return{setCommentBlock:()=>({commands:e})=>e.wrapIn(this.name),toggleCommentBlock:()=>({commands:e})=>e.toggleWrap(this.name),unsetCommentBlock:()=>({commands:e})=>e.lift(this.name)}}}),CommentMark=Mark.create({name:`comment`,priority:10,excludes:``,inclusive:!1,addAttributes(){return{sourceForm:{default:`percent`,parseHTML:e=>e.getAttribute(`data-source-form`)===`html`?`html`:`percent`,renderHTML:e=>e.sourceForm===`html`?{"data-source-form":`html`}:{}}}},parseHTML(){return[{tag:`span[data-comment-mark]`}]},renderHTML({HTMLAttributes:e}){return[`span`,{"data-comment-mark":``,"data-clipboard-omit":`true`,class:`comment-mark`,style:`display: none;`,...e},0]},addCommands(){return{setComment:()=>({commands:e})=>e.setMark(this.name),toggleComment:()=>({commands:e})=>e.toggleMark(this.name),unsetComment:()=>({commands:e})=>e.unsetMark(this.name)}}}),FootnoteDefinition=Node3.create({name:`footnoteDefinition`,group:`block`,content:`block+`,defining:!0,priority:60,addAttributes(){return{identifier:{default:``},label:{default:null}}},parseHTML(){let e=e=>{if(typeof e==`string`)return!1;let t=e.getAttribute(`data-footnote-id`)||``;return{identifier:t,label:t||null}};return[{tag:`aside[data-footnote-def]`,getAttrs:e},{tag:`aside.footnote-def`,getAttrs:e}]},renderHTML({node:e,HTMLAttributes:t}){let S=String(e.attrs.identifier??``);return[`aside`,{...t,"data-footnote-def":``,"data-footnote-id":S,id:`fn-${S}`,class:`footnote-def`},[`div`,{class:`footnote-body`},0],[`a`,{href:`#fnref-${S}`,class:`footnote-backref`,contentEditable:`false`,"aria-label":`Back to reference`},`↩`]]},addCommands(){return{insertFootnoteDefinition:e=>({commands:t})=>t.insertContent({type:this.name,attrs:{identifier:e,label:e},content:[{type:`paragraph`}]})}}}),FootnoteReference=Node3.create({name:`footnoteReference`,group:`inline`,inline:!0,atom:!0,selectable:!0,draggable:!1,priority:60,addAttributes(){return{identifier:{default:``},label:{default:null}}},parseHTML(){return[{tag:`sup[data-footnote-ref]`,getAttrs:e=>{if(typeof e==`string`)return!1;let t=e.getAttribute(`data-footnote-id`)||``;return{identifier:t,label:t||null}}}]},renderHTML({node:e}){let t=String(e.attrs.identifier??``);return[`sup`,{id:`fnref-${t}`,"data-footnote-ref":``,"data-footnote-id":t,class:`footnote-ref`},[`a`,{href:`#fn-${t}`,class:`footnote-ref-link`},`[${t}]`]]},addCommands(){return{insertFootnoteReference:e=>({commands:t})=>t.insertContent({type:this.name,attrs:{identifier:e,label:e}})}}}),ImageReferenceFidelity=Node3.create({name:`imageReference`,group:`inline`,inline:!0,atom:!0,priority:60,addAttributes(){return{alt:{default:``},label:{default:``},identifier:{default:``},referenceType:{default:`shortcut`}}},parseHTML(){return[{tag:`img[data-image-reference]`}]},renderHTML({node:e}){let{alt:t,label:S,referenceType:w}=e.attrs,E=t||S;return[`img`,{"data-image-reference":``,"data-reference-type":w,"data-label":S,alt:E}]}}),SourceLiteralMark=Mark.create({name:`sourceLiteral`,priority:10,excludes:``,inclusive:!1,addAttributes(){return{sourceRaw:{default:``}}},parseHTML(){return[{tag:`span[data-source-literal]`}]},renderHTML({HTMLAttributes:e}){return[`span`,{"data-source-literal":``,...e},0]}});function isValidSourceLiteralRaw(e,t){if(typeof e!=`string`||typeof t!=`string`||/[\x00-\x1F\x7F]/.test(e))return!1;let S=e.replaceAll(`\xA0`,` `),w=t.replaceAll(`\xA0`,` `);return S===w?!0:stripMarkdownBackslashEscapes(S)===w}function stripMarkdownBackslashEscapes(e){return e.replace(/\\([!-/:-@[-`{-~])/g,`$1`)}const TableFidelity=Table.extend({priority:60,addAttributes(){return{...this.parent?.(),sourceDashCounts:{default:null}}}}),TableCellFidelity=TableCell.extend({priority:60,addAttributes(){return{...this.parent?.(),sourcePadding:{default:null}}}}),TableHeaderFidelity=TableHeader.extend({priority:60,addAttributes(){return{...this.parent?.(),sourcePadding:{default:null}}}}),Tag=Node3.create({name:`tag`,group:`inline`,inline:!0,atom:!0,selectable:!0,priority:60,addAttributes(){return{value:{default:``}}},parseHTML(){return[{tag:`a[data-tag]`,getAttrs:e=>typeof e==`string`?!1:{value:e.getAttribute(`data-tag`)||``}}]},renderHTML({node:e,HTMLAttributes:t}){let S=String(e.attrs.value??``);return[`a`,{...t,"data-tag":S,href:`#tag/${S}`,class:`tag`},`#${S}`]},addCommands(){return{insertTag:e=>({chain:t})=>t().insertContent({type:`tag`,attrs:{value:e}}).run()}}}),THEMATIC_BREAK_INPUT_RE=/^(?:---|—-|___\s|\*\*\*\s)$/;function thematicBreakSourceRawFromMatch(e){let t=String(e[0]??``).replace(/\s+$/,``);return t===`—-`?`---`:t}const ThematicBreakFidelity=index_default$1.extend({name:`thematicBreak`,priority:60,addAttributes(){return{...this.parent?.(),sourceRaw:{default:`---`}}},addInputRules(){return[nodeInputRule({find:THEMATIC_BREAK_INPUT_RE,type:this.type,getAttributes:e=>({sourceRaw:thematicBreakSourceRawFromMatch(e)})})]}});function normalizeNullableString(e){if(typeof e!=`string`)return null;let t=e.trim();return t.length>0?t:null}function getWikiLinkText(e){return e.alias?e.alias:e.anchor?`${e.target}#${e.anchor}`:e.target}const WikiLink=Node3.create({name:`wikiLink`,group:`inline`,inline:!0,atom:!0,priority:60,addAttributes(){return{target:{default:``},alias:{default:null},anchor:{default:null},resolved:{default:!1}}},parseHTML(){return[{tag:`span[data-wiki-link]`,getAttrs:e=>typeof e==`string`?!1:{target:e.getAttribute(`data-target`)||``,alias:normalizeNullableString(e.getAttribute(`data-alias`)),anchor:normalizeNullableString(e.getAttribute(`data-anchor`)),resolved:e.getAttribute(`data-resolved`)===`true`}},{tag:`a.wiki-link[data-target]`,priority:100,getAttrs:e=>{if(typeof e==`string`)return!1;let t=e.getAttribute(`data-target`)??``;return t?{target:t,alias:normalizeNullableString(e.getAttribute(`data-alias`)),anchor:normalizeNullableString(e.getAttribute(`data-anchor`)),resolved:!1}:!1}}]},renderHTML({node:e,HTMLAttributes:t}){let S=String(e.attrs.target??``),w=normalizeNullableString(e.attrs.alias),E=normalizeNullableString(e.attrs.anchor),D=e.attrs.resolved===!0;return[`span`,{...t,"data-wiki-link":``,"data-target":S,"data-alias":w??``,"data-anchor":E??``,"data-resolved":D?`true`:`false`},getWikiLinkText({target:S,alias:w,anchor:E})]}});function extensionOf(e){let t=e.split(`/`).pop()??e,S=t.lastIndexOf(`.`);return S<=0||S===t.length-1?``:t.slice(S+1).toLowerCase()}function labelFor(e){return e.alias?e.alias:e.anchor?`${e.target}#${e.anchor}`:e.target}const WikiLinkEmbed=Node3.create({name:`wikiLinkEmbed`,group:`inline`,inline:!0,atom:!0,priority:60,addAttributes(){return{target:{default:``},alias:{default:null},anchor:{default:null},resolvedSrc:{default:null,rendered:!1,parseHTML:()=>null}}},parseHTML(){let e=e=>typeof e==`string`||!e.hasAttribute(`data-wiki-embed`)?!1:{target:e.getAttribute(`data-target`)||``,alias:normalizeNullableString(e.getAttribute(`data-alias`)),anchor:normalizeNullableString(e.getAttribute(`data-anchor`))};return[{tag:`img[data-wiki-embed]`,getAttrs:e,priority:100},{tag:`a[data-wiki-embed]`,getAttrs:e,priority:100}]},renderHTML({node:e,HTMLAttributes:t}){let S=String(e.attrs.target??``),w=normalizeNullableString(e.attrs.alias),E=normalizeNullableString(e.attrs.anchor),D=normalizeNullableString(e.attrs.resolvedSrc),O=extensionOf(S);if(IMAGE_EXTENSIONS.has(O))return[`img`,{...t,"data-wiki-embed":``,"data-target":S,"data-alias":w??``,"data-anchor":E??``,src:D??S,alt:w??S}];let k=D??S;return[`a`,{...t,"data-wiki-embed":``,"data-target":S,"data-alias":w??``,"data-anchor":E??``,href:E?`${k}#${E}`:k,target:`_blank`,rel:`noopener noreferrer`},labelFor({target:S,alias:w,anchor:E})]}}),sharedExtensions=[JsxComponent,RawMdxFallback,JsxInline,MathInline,WikiLink,WikiLinkEmbed,Tag,List,ListItem,EmphasisFidelity,StrongFidelity,CodeMarkFidelity,CodeBlockFidelity,BlockquoteFidelity,HeadingFidelity,ThematicBreakFidelity,LinkFidelity,HtmlBlockFidelity,LinkRefDefFidelity,HardBreakFidelity,EscapeMark,SourceLiteralMark,index_default.configure({undoRedo:!1,bulletList:!1,orderedList:!1,listItem:!1,italic:!1,bold:!1,code:!1,codeBlock:!1,heading:!1,horizontalRule:!1,hardBreak:!1,link:!1,blockquote:!1,dropcursor:{color:`color-mix(in oklch, var(--primary) 50%, transparent)`,width:2}}),TableFidelity.configure({resizable:!0}),TableRow,TableHeaderFidelity,TableCellFidelity,ImageSrcFidelity.configure({inline:!0}),ImageReferenceFidelity,index_default$4,CommentMark,CommentBlock,FootnoteReference,FootnoteDefinition],FRONTMATTER_TAG_VALUE_RE=/^[a-zA-Z][\w/-]*$/;function stripLeadingHash(e){return e.startsWith(`#`)?e.slice(1):e}function coerceCandidates(e){return typeof e==`string`?[e]:Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function extractFrontmatterTags(e){if(!e||e.trim()===``)return[];let{map:t}=parseFrontmatterYaml(e);if(!t)return[];let S=coerceCandidates(t.tags),w=[];for(let e of S){let t=stripLeadingHash(e);FRONTMATTER_TAG_VALUE_RE.test(t)?w.push(t):console.warn(`[frontmatter-tags] dropping invalid tag entry: ${JSON.stringify(e)}`)}return w}const safeDocNameField=string$2().refine(e=>!e.includes(`..`)&&!e.startsWith(`/`)&&!e.includes(`\0`)&&!e.includes(`\\`),{message:`docName contains unsafe path characters`}).optional(),agentIdentityFields={agentId:string$2().optional(),agentName:string$2().optional(),colorSeed:string$2().optional(),clientName:string$2().optional(),clientVersion:string$2().optional(),label:string$2().optional()},summaryField=string$2().optional(),URN_UUID_RE=/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,ShareConstructUrlRequestSchema=object$1({docPath:string$2().min(1)}).loose(),ShareConstructUrlErrorCodeSchema=_enum([`no-remote`,`detached-head`,`branch-not-on-origin`,`non-github-remote`,`invalid-path`]),ShareConstructUrlResponseSchema=discriminatedUnion(`ok`,[object$1({ok:literal(!0),shareUrl:string$2().min(1),blobUrl:string$2().min(1),branch:string$2().min(1)}).loose(),object$1({ok:literal(!1),error:ShareConstructUrlErrorCodeSchema,branch:string$2().min(1).optional()}).loose()]),SharePublishOwnerKindSchema=_enum([`user`,`org`]),SharePublishOwnerSchema=object$1({login:string$2().min(1),kind:SharePublishOwnerKindSchema,avatarUrl:string$2().optional()}).loose(),SharePublishOwnersErrorCodeSchema=_enum([`auth-required`,`network`]),SharePublishOwnersResponseSchema=discriminatedUnion(`ok`,[object$1({ok:literal(!0),owners:array(SharePublishOwnerSchema)}).loose(),object$1({ok:literal(!1),error:SharePublishOwnersErrorCodeSchema}).loose()]),SharePublishNameCheckResponseSchema=discriminatedUnion(`ok`,[object$1({ok:literal(!0),available:boolean$1()}).loose(),object$1({ok:literal(!1),error:SharePublishOwnersErrorCodeSchema}).loose()]),SharePublishVisibilitySchema=_enum([`public`,`private`]),SharePublishRequestSchema=object$1({owner:string$2().min(1),name:string$2().min(1),visibility:SharePublishVisibilitySchema,description:string$2().optional()}).loose(),SharePublishErrorCodeSchema=_enum([`name-conflict`,`saml-sso`,`auth-required`,`push-failed`,`init-failed`,`network`,`no-project`]),SharePublishResponseSchema=discriminatedUnion(`ok`,[object$1({ok:literal(!0),ownerLogin:string$2().min(1),repoName:string$2().min(1),cloneUrl:string$2().min(1),defaultBranch:string$2().min(1)}).loose(),object$1({ok:literal(!1),error:SharePublishErrorCodeSchema}).loose()]);function isValidBranchName(e){return!(typeof e!=`string`||e.length===0||e.startsWith(`-`)||/[\x00-\x1F\x7F]/.test(e)||/\s/.test(e)||e.includes(`:`)||e.split(`/`).includes(`..`))}const refineBranchName=e=>e.refine(isValidBranchName,`invalid branch name`);function isBranchNotFoundGitError(e){if(e==null)return!1;let t=e instanceof Error?e.message:String(e);return/couldn'?t find remote ref|Remote branch .+ not found/i.test(t)}const BranchInfoSharedFields={shareFileExists:boolean$1(),dirtyConflicts:object$1({conflicts:boolean$1(),files:array(string$2().min(1))}).loose(),branchIsLocal:boolean$1()},BranchInfoResponseSchema=discriminatedUnion(`detached`,[object$1({detached:literal(!1),currentBranch:string$2().min(1).nullable(),currentHeadSha:_null(),...BranchInfoSharedFields}).loose(),object$1({detached:literal(!0),currentBranch:_null(),currentHeadSha:string$2().min(1),...BranchInfoSharedFields}).loose()]),CheckoutRequestSchema=object$1({branch:refineBranchName(string$2().min(1)),principalId:string$2().optional()}).loose(),CheckoutFailureReasonSchema=_enum([`dirty-conflict`,`branch-not-found`,`fetch-failed`,`checkout-failed`]),CheckoutResponseSchema=discriminatedUnion(`ok`,[object$1({ok:literal(!0)}).loose(),object$1({ok:literal(!1),reason:CheckoutFailureReasonSchema,files:array(string$2().min(1)).optional()}).loose()]),ServerInfoSuccessSchema=object$1({serverInstanceId:string$2().min(1),currentBranch:string$2().min(1).optional(),currentDiskAckSVs:record(string$2().min(1),string$2().min(1)).optional()}).loose(),PrincipalSuccessSchema=object$1({id:string$2().min(1),display_name:string$2().min(1),display_email:string$2(),source:_enum([`git-config`,`synthesized`]),created_at:string$2().min(1)}).loose(),ProblemTypeSchema=_enum(`urn:ok:error:malformed-upload.urn:ok:error:collision-exhaustion.urn:ok:error:storage-full.urn:ok:error:storage-readonly.urn:ok:error:storage-error.urn:ok:error:no-file-received.urn:ok:error:path-escape.urn:ok:error:method-not-allowed.urn:ok:error:invalid-request.urn:ok:error:payload-too-large.urn:ok:error:request-timeout.urn:ok:error:internal-server-error.urn:ok:error:loopback-required.urn:ok:error:invalid-origin.urn:ok:error:url-not-allowed.urn:ok:error:dir-outside-home.urn:ok:error:concurrent-operation.urn:ok:error:clone-failed.urn:ok:error:clone-timeout.urn:ok:error:server-start-failed.urn:ok:error:reserved-doc-name.urn:ok:error:target-not-found.urn:ok:error:stale-target.urn:ok:error:frontmatter-edit-not-supported.urn:ok:error:invalid-frontmatter-patch.urn:ok:error:no-active-session.urn:ok:error:too-many-agent-sessions.urn:ok:error:doc-not-found.urn:ok:error:doc-already-exists.urn:ok:error:doc-not-open.urn:ok:error:rollback-not-configured.urn:ok:error:doc-not-available.urn:ok:error:backlink-index-not-configured.urn:ok:error:file-rescan-not-configured.urn:ok:error:shadow-not-configured.urn:ok:error:host-not-allowed.urn:ok:error:principal-not-available.urn:ok:error:not-found.urn:ok:error:auth-failed.urn:ok:error:no-project-dir.urn:ok:error:server-open-failed.urn:ok:error:doc-in-conflict.urn:ok:error:no-conflict-tracked.urn:ok:error:sync-not-active.urn:ok:error:project-repo-not-configured.urn:ok:error:seed-prerequisite-missing.urn:ok:error:seed-invalid-root.urn:ok:error:tag-index-not-configured.urn:ok:error:template-not-found.urn:ok:error:unsupported-asset-type.urn:ok:error:asset-not-found.urn:ok:error:collab-server-not-running.urn:ok:error:gateway-timeout.urn:ok:error:cursor-not-installed.urn:ok:error:cursor-spawn-timeout.urn:ok:error:cursor-spawn-failed.urn:ok:error:handoff-target-not-installed.urn:ok:error:handoff-spawn-timeout.urn:ok:error:handoff-spawn-failed`.split(`.`));function assertNeverProblemType(e){throw Error(`Unexpected ProblemType variant: ${JSON.stringify(e)}`)}const ProblemDetailsSchema=object$1({type:ProblemTypeSchema,title:string$2().min(1),status:number$1().int().min(400).max(599),instance:string$2().regex(URN_UUID_RE,`instance must be urn:uuid:<uuid>`).optional(),detail:string$2().optional()}).loose(),UploadRequestSchema=object$1({parentDocName:string$2().min(1),agentId:string$2().min(1).optional(),agentName:string$2().min(1).optional()}).loose(),UploadAssetSuccessSchema=object$1({src:string$2().min(1),path:string$2().min(1).optional(),deduped:boolean$1().optional()}).loose(),LocalOpCloneRequestSchema=object$1({url:string$2().min(1),dir:string$2().min(1),branch:string$2().min(1).refine(isValidBranchName,`invalid branch name`).optional()}).loose(),StreamingProblemEventSchema=object$1({type:literal(`error`),problem:ProblemDetailsSchema}).loose();function reconstructAttrs(e,t){let S=Array.isArray(e.attrs.attributes)?e.attrs.attributes.filter(e=>typeof e==`object`&&!!e&&`type`in e):[],w=e.attrs.props??{},E=new Map,D=new Set;if(t)for(let e of t)e.omitOnDefault===!0&&`defaultValue`in e&&e.defaultValue!==void 0&&E.set(e.name,e.defaultValue),e.type===`string`&&e.required===!1&&e.defaultValue===void 0&&D.add(e.name);for(let[e,t]of Object.entries(w)){let w=S.findIndex(t=>t.type===`mdxJsxAttribute`&&t.name===e);if(E.has(e)&&Object.is(E.get(e),t)){w>=0&&S.splice(w,1);continue}if(D.has(e)&&t===``){w>=0&&S.splice(w,1);continue}let O=propToMdxJsxAttribute(e,t);w>=0?S[w]=O:S.push(O)}return S}function propToMdxJsxAttribute(e,t){if(t===!0)return{type:`mdxJsxAttribute`,name:e,value:null};if(t===!1)return{type:`mdxJsxAttribute`,name:e,value:{type:`mdxJsxAttributeValueExpression`,value:`false`}};if(t==null)return{type:`mdxJsxAttribute`,name:e,value:null};if(typeof t==`string`)return{type:`mdxJsxAttribute`,name:e,value:t};if(typeof t==`number`)return{type:`mdxJsxAttribute`,name:e,value:{type:`mdxJsxAttributeValueExpression`,value:JSON.stringify(t)}};if(typeof t==`object`){let S;try{S=JSON.stringify(t)}catch{S=String(t)}return{type:`mdxJsxAttribute`,name:e,value:{type:`mdxJsxAttributeValueExpression`,value:S}}}return{type:`mdxJsxAttribute`,name:e,value:String(t)}}function emitMdxJsx(e,t,S,w){return{type:`mdxJsxFlowElement`,name:e,attributes:reconstructAttrs(t,w),children:S.all(t),data:{}}}const LOOM_ID_RE=/^[A-Za-z0-9]{20,}$/,LOOM_TIMESTAMP_RE=/^(?:\d+s?|(?:\d+h)?(?:\d+m)?(?:\d+s)?)$/;function isLoomHost(e){let t=e.toLowerCase();return t===`loom.com`||t===`www.loom.com`}function extractLoomId(e){let t=e.pathname.match(/^\/(?:share|embed)\/([A-Za-z0-9]+)\/?$/);if(!t)return null;let S=t[1]??``;return LOOM_ID_RE.test(S)?S:null}function parseLoomUrl(e){if(typeof e!=`string`||e.length===0)return null;let t;try{t=new URL(e)}catch{return null}if(t.protocol!==`http:`&&t.protocol!==`https:`||!isLoomHost(t.hostname))return null;let S=extractLoomId(t);if(!S)return null;let w=t.searchParams.get(`t`);return{id:S,startRaw:w&&w.length>0&&LOOM_TIMESTAMP_RE.test(w)?w:null}}function isLoomUrl(e){return parseLoomUrl(e)!==null}function isVimeoHost(e){let t=e.toLowerCase();return t===`vimeo.com`||t===`www.vimeo.com`||t===`player.vimeo.com`}function isVimeoUrl(e){if(typeof e!=`string`||e.length===0)return!1;let t;try{t=new URL(e)}catch{return!1}return t.protocol!==`http:`&&t.protocol!==`https:`?!1:isVimeoHost(t.hostname)}const YOUTUBE_VIDEO_ID_RE=/^[A-Za-z0-9_-]{11}$/;function isYouTubeHost(e){let t=e.toLowerCase();return t===`youtube.com`||t===`www.youtube.com`||t===`m.youtube.com`||t===`music.youtube.com`||t===`youtu.be`||t===`youtube-nocookie.com`||t===`www.youtube-nocookie.com`}function parseTimestampToSeconds(e){if(e.length===0)return null;if(/^[0-9]+$/.test(e)){let t=Number.parseInt(e,10);return t>0?t:null}let t=e.match(/^(?:([0-9]+)h)?(?:([0-9]+)m)?(?:([0-9]+)s?)?$/);if(!t)return null;let S=t[1]?Number.parseInt(t[1],10):0,w=t[2]?Number.parseInt(t[2],10):0,E=t[3]?Number.parseInt(t[3],10):0,D=S*3600+w*60+E;return D>0?D:null}function extractVideoId(e){if(e.hostname.toLowerCase()===`youtu.be`){let t=e.pathname.replace(/^\//,``).split(`/`)[0]??``;return YOUTUBE_VIDEO_ID_RE.test(t)?t:null}if(e.pathname===`/watch`){let t=e.searchParams.get(`v`)??``;return YOUTUBE_VIDEO_ID_RE.test(t)?t:null}let t=e.pathname.match(/^\/(?:embed|shorts|v)\/([A-Za-z0-9_-]{11})\/?$/);return t?t[1]??null:null}function parseYouTubeUrl(e){if(typeof e!=`string`||e.length===0)return null;let t;try{t=new URL(e)}catch{return null}if(t.protocol!==`http:`&&t.protocol!==`https:`||!isYouTubeHost(t.hostname))return null;let S=extractVideoId(t);if(!S)return null;let w=t.searchParams.get(`t`)??t.searchParams.get(`start`)??``;return{id:S,startSeconds:w.length>0?parseTimestampToSeconds(w):null,noCookie:t.hostname.toLowerCase().endsWith(`youtube-nocookie.com`)}}const calloutProps=[{name:`type`,type:`enum`,enumValues:[`note`,`tip`,`important`,`warning`,`caution`,`abstract`,`info`,`todo`,`success`,`question`,`failure`,`danger`,`bug`,`example`,`quote`],defaultValue:`note`,required:!1,description:`Callout variant`},{name:`title`,type:`string`,required:!1,description:`Optional heading shown above the body`},{name:`icon`,type:`string`,required:!1,advanced:!0,description:"Custom lucide icon override (e.g. `lucide:Lightbulb`)"},{name:`color`,type:`string`,required:!1,advanced:!0,description:"Optional accent color override (hex — e.g. `#F05032`)"},{name:`collapsible`,type:`boolean`,required:!1,defaultValue:!1,advanced:!0,description:"Render as a foldable `<details>` (Obsidian `[!TYPE]+/-`)"},{name:`defaultOpen`,type:`boolean`,required:!1,defaultValue:!0,advanced:!0,description:`When collapsible, start in the open state`},{name:`children`,type:`reactnode`,required:!0,description:`Callout content`}],htmlImgProps=[{name:`src`,type:`string`,required:!0,defaultValue:``,description:`Image source URL`,accept:ALLOWED_IMAGE_MIME_TYPES,autoFocus:!0},{name:`alt`,type:`string`,required:!0,description:`Alt text`},{name:`width`,type:`number`,required:!1,advanced:!0,description:`Image width`},{name:`height`,type:`number`,required:!1,advanced:!0,description:`Image height`},{name:`srcset`,type:`string`,required:!1,advanced:!0,description:`Responsive image candidate set (e.g. "x.png 1x, y.png 2x")`},{name:`sizes`,type:`string`,required:!1,advanced:!0,description:`Responsive image sizes hint paired with srcset`},{name:`loading`,type:`enum`,enumValues:[`eager`,`lazy`],defaultValue:`lazy`,required:!1,advanced:!0,omitOnDefault:!0,description:`Native img loading strategy (defaults to lazy)`},{name:`title`,type:`string`,required:!1,advanced:!0,description:`Native HTML title attribute (tooltip)`},{name:`decoding`,type:`enum`,enumValues:[`sync`,`async`,`auto`],defaultValue:`auto`,required:!1,advanced:!0,omitOnDefault:!0,description:`Hint for how the browser should decode the image`},{name:`fetchpriority`,type:`enum`,enumValues:[`high`,`low`,`auto`],defaultValue:`auto`,required:!1,advanced:!0,omitOnDefault:!0,description:`Resource fetch priority hint`},{name:`crossorigin`,type:`enum`,enumValues:[`anonymous`,`use-credentials`],required:!1,advanced:!0,description:`CORS mode for the image fetch`},{name:`referrerpolicy`,type:`string`,required:!1,advanced:!0,description:`Referrer policy for the image fetch (HTML referrerpolicy values)`},{name:`align`,type:`enum`,enumValues:[`center`,`left`,`right`],defaultValue:`center`,required:!1,omitOnDefault:!0,description:`Alignment within the column`}],embedProps=[{name:`src`,type:`string`,required:!0,defaultValue:``,description:`Embedded page URL (must start with http:// or https://)`,autoFocus:!0},{name:`title`,type:`string`,required:!1,description:`Iframe title (accessible label for screen readers)`},{name:`width`,type:`string`,required:!1,advanced:!0,description:`Embed width as a CSS length (e.g. "100%", "640px")`},{name:`height`,type:`string`,required:!1,advanced:!0,description:`Embed height as a CSS length (e.g. "26rem", "480px")`},{name:`align`,type:`enum`,enumValues:[`center`,`left`,`right`],defaultValue:`center`,required:!1,omitOnDefault:!0,description:`Alignment within the column`}],htmlVideoProps=[{name:`src`,type:`string`,required:!0,defaultValue:``,description:`Video source URL`,accept:ALLOWED_VIDEO_MIME_TYPES,autoFocus:!0},{name:`controls`,type:`boolean`,required:!1,defaultValue:!0,advanced:!0,omitOnDefault:!0,description:`Show native HTML5 video controls (defaults to true)`,hideWhen:e=>typeof e.src==`string`&&(isVimeoUrl(e.src)||isLoomUrl(e.src))},{name:`autoplay`,type:`boolean`,required:!1,advanced:!0,description:`Begin playback as soon as possible (usually requires muted)`},{name:`poster`,type:`string`,required:!1,advanced:!0,description:`Poster image URL shown before playback`,accept:ALLOWED_IMAGE_MIME_TYPES,hideWhen:e=>typeof e.src==`string`&&(isVimeoUrl(e.src)||isLoomUrl(e.src))},{name:`width`,type:`number`,required:!1,advanced:!0,description:`Video width`},{name:`height`,type:`number`,required:!1,advanced:!0,description:`Video height`},{name:`title`,type:`string`,required:!1,advanced:!0,description:`Native HTML title attribute (tooltip)`},{name:`muted`,type:`boolean`,required:!1,advanced:!0,description:`Mute audio on load`},{name:`loop`,type:`boolean`,required:!1,advanced:!0,description:`Restart from the beginning when playback ends`,hideWhen:e=>typeof e.src==`string`&&isLoomUrl(e.src)},{name:`playsinline`,type:`boolean`,required:!1,advanced:!0,description:`Play inline on iOS rather than entering fullscreen`,hideWhen:e=>typeof e.src==`string`&&(isVimeoUrl(e.src)||isLoomUrl(e.src))},{name:`preload`,type:`enum`,enumValues:[`none`,`metadata`,`auto`],required:!1,advanced:!0,description:`Hint for how much of the video to preload`,hideWhen:e=>typeof e.src==`string`&&(parseYouTubeUrl(e.src)!==null||isVimeoUrl(e.src)||isLoomUrl(e.src))}],htmlAudioProps=[{name:`src`,type:`string`,required:!0,defaultValue:``,description:`Audio source URL`,accept:ALLOWED_AUDIO_MIME_TYPES,autoFocus:!0},{name:`controls`,type:`boolean`,required:!1,defaultValue:!0,advanced:!0,omitOnDefault:!0,description:`Show native HTML5 audio controls (defaults to true)`},{name:`autoplay`,type:`boolean`,required:!1,advanced:!0,description:`Begin playback as soon as possible (usually requires muted)`},{name:`title`,type:`string`,required:!1,advanced:!0,description:`Native HTML title attribute (tooltip)`},{name:`muted`,type:`boolean`,required:!1,advanced:!0,description:`Mute audio on load`},{name:`loop`,type:`boolean`,required:!1,advanced:!0,description:`Restart from the beginning when playback ends`},{name:`preload`,type:`enum`,enumValues:[`none`,`metadata`,`auto`],required:!1,advanced:!0,description:`Hint for how much of the audio to preload`}],accordionProps=[{name:`title`,type:`string`,required:!0,description:`Accordion heading shown inside the <summary>`},{name:`defaultOpen`,type:`boolean`,required:!1,defaultValue:!1,description:`When true, the accordion renders expanded on initial load`},{name:`icon`,type:`string`,required:!1,advanced:!0,description:"Custom lucide icon override (e.g. `lucide:Rocket`)"},{name:`description`,type:`string`,required:!1,advanced:!0,description:`Optional subtitle rendered below the title inside <summary>`},{name:`id`,type:`string`,required:!1,advanced:!0,description:"HTML id attribute for deep-linking (e.g. `#advanced-options`)"},{name:`name`,type:`string`,required:!1,advanced:!0,description:`HTML5 <details name=> group — siblings with the same name are mutually exclusive`}],gfmCalloutProps=[calloutProps[0],calloutProps[1],calloutProps[4],calloutProps[5],calloutProps[6]],commonMarkImageProps=[htmlImgProps[0],htmlImgProps[1],htmlImgProps[7]],htmlDetailsAccordionProps=[accordionProps[0],accordionProps[1],accordionProps[4],accordionProps[5]],wikiEmbedImageProps=[{name:`alias`,type:`string`,required:!1,defaultValue:``,description:"Alt text (Obsidian alias syntax: `![[file.png|alt text]]`)"}],wikiEmbedVideoProps=[{name:`alias`,type:`string`,required:!1,defaultValue:``,description:"Title text (Obsidian alias syntax: `![[clip.mp4|title]]`)"}],wikiEmbedAudioProps=[{name:`alias`,type:`string`,required:!1,defaultValue:``,description:"Title text (Obsidian alias syntax: `![[song.mp3|title]]`)"}],tabsProps=[{name:`id`,type:`string`,required:!1,advanced:!0,description:"HTML id attribute for deep-linking (e.g. `#install-tabs`)"}],tabProps=[{name:`label`,type:`string`,required:!0,autoFocus:!0,defaultValue:`Tab`,description:`Tab strip label — shown in the clickable pill at the top`},{name:`id`,type:`string`,required:!1,advanced:!0,description:"HTML id attribute for deep-linking (e.g. `#tab-npm`)"}],mathProps=[{name:`formula`,type:`string`,required:!0,autoFocus:!0,language:`latex`,description:`LaTeX math source (rendered with KaTeX in the browser)`},{name:`id`,type:`string`,required:!1,advanced:!0,description:"HTML id attribute for deep-linking (e.g. `#eq-pythagoras`)"},{name:`language`,type:`string`,required:!1,advanced:!0,description:"Forward-compat hint for the math source language (default `latex`). Reserved for future MathJax / Typst / AsciiMath substrates."}],dollarMathProps=[mathProps[0]],mathFenceProps=[mathProps[0]],mermaidProps=[{name:`chart`,type:`string`,required:!0,autoFocus:!0,language:`mermaid`,description:`Mermaid chart source (graph / flowchart / sequenceDiagram / class / state / etc.)`}],wikiEmbedFileProps=[{name:`alias`,type:`string`,required:!1,defaultValue:``,description:"Display name override (Obsidian alias syntax: `![[file.zip|label]]`)"}],fileProps=[{name:`src`,type:`string`,required:!0,defaultValue:``,description:`File URL`,accept:[`*/*`],autoFocus:!0}],pdfProps=[{name:`src`,type:`string`,required:!0,defaultValue:``,description:`PDF source URL`,accept:ALLOWED_PDF_MIME_TYPES,autoFocus:!0},{name:`title`,type:`string`,required:!1,advanced:!0,description:`Accessible label for the embedded PDF viewer`},{name:`anchor`,type:`string`,required:!1,advanced:!0,description:"PDF viewer parameters as a single URL-fragment string (e.g. `page=3&height=600`)"}],mirrorProps=[{name:`src`,type:`string`,required:!0,description:"Path of the source doc, extension-less (e.g. `api-spec`).",autoFocus:!0},{name:`anchor`,type:`string`,required:!0,description:"Id of the `<MirrorSource>` block within the source doc."}],mirrorSourceProps=[{name:`id`,type:`string`,required:!0,description:"Stable id agents and authors use to reference this block from `<Mirror>` elsewhere.",autoFocus:!0},{name:`children`,type:`reactnode`,required:!0,description:`Block content this MirrorSource owns — paragraphs, callouts, code, nested JSX, anything.`}];function escapeHtmlAttr(e){return e.replace(/&/g,`&amp;`).replace(/"/g,`&quot;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}function escapeHtmlText(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}function serializeWikiEmbed(e){let t=e.attrs.props,S=t?.target??``,w=typeof t?.alias==`string`&&t.alias.length>0?t.alias:null,E=typeof t?.anchor==`string`&&t.anchor.length>0?t.anchor:null,D=w??(E?`${S}#${E}`:S);return{type:`wikiLinkEmbed`,value:D,data:{target:S,anchor:E,alias:w},children:[{type:`text`,value:D}]}}const builtInComponents=[{name:`Callout`,surface:`canonical`,hasChildren:!0,props:calloutProps,icon:`MessageSquareWarning`,category:`content`,displayName:`Callout`,description:`Alert / admonition with 15 type variants — 5 GFM (note, tip, important, warning, caution) plus 10 Obsidian-parity (abstract, info, todo, success, question, failure, danger, bug, example, quote)`,searchTerms:[`note`,`tip`,`important`,`warning`,`caution`,`abstract`,`info`,`todo`,`success`,`question`,`failure`,`danger`,`bug`,`example`,`quote`,`alert`,`admonition`,`callout`],serialize:(e,t)=>emitMdxJsx(`Callout`,e,t,calloutProps)},{name:`img`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:htmlImgProps,icon:`Image`,category:`media`,displayName:`Image`,description:`Image with click-to-zoom and HTML-native attributes`,searchTerms:[`image`,`zoom`,`picture`,`photo`],placeholder:{label:`Add an image`},serialize:(e,t)=>emitMdxJsx(`img`,e,t,htmlImgProps)},{name:`video`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:htmlVideoProps,icon:`SquarePlay`,category:`media`,displayName:`Video`,description:`HTML5 video player with native controls`,searchTerms:[`video`,`media`,`player`,`mp4`,`webm`,`movie`],placeholder:{label:`Add a video`},serialize:(e,t)=>emitMdxJsx(`video`,e,t,htmlVideoProps)},{name:`audio`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:htmlAudioProps,icon:`Volume2`,category:`media`,displayName:`Audio`,description:`HTML5 audio player with native controls`,searchTerms:[`audio`,`sound`,`music`,`mp3`,`podcast`,`player`],placeholder:{label:`Add audio`},serialize:(e,t)=>emitMdxJsx(`audio`,e,t,htmlAudioProps)},{name:`Pdf`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:pdfProps,icon:`FileText`,category:`media`,displayName:`PDF`,description:"Embedded PDF viewer (`#page=N` to open at page N, `#height=N` for viewer height)",searchTerms:[`pdf`,`document`,`embed`,`pdfjs`],placeholder:{label:`Add a PDF`},serialize:(e,t)=>emitMdxJsx(`Pdf`,e,t,pdfProps)},{name:`File`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:fileProps,icon:`Paperclip`,category:`media`,displayName:`File`,description:`Downloadable file attachment — inline row with name + size + download link`,searchTerms:[`file`,`attachment`,`download`,`document`,`zip`,`docx`,`doc`],placeholder:{label:`Add a file`},serialize:(e,t)=>emitMdxJsx(`File`,e,t,fileProps)},{name:`Embed`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:embedProps,icon:`AppWindow`,category:`media`,displayName:`Embed`,description:`Inline web embed (iframe) — drop a URL, get a resizable preview pane`,searchTerms:[`embed`,`iframe`,`website`,`page`,`inline`,`frame`,`preview`],placeholder:{label:`Embed a URL`},serialize:(e,t)=>emitMdxJsx(`Embed`,e,t,embedProps)},{name:`Accordion`,surface:`canonical`,hasChildren:!0,props:accordionProps,icon:`ChevronRight`,category:`content`,displayName:`Accordion`,description:"Standalone expand/collapse via native HTML5 <details>/<summary>. Group siblings with the `name` prop for exclusive-accordion UX.",searchTerms:[`toggle`,`accordion`,`expandable`,`details`,`disclosure`,`collapse`,`fold`],exampleBody:`Body content revealed when the accordion is expanded.`,serialize:(e,t)=>emitMdxJsx(`Accordion`,e,t,accordionProps)},{name:`Tabs`,surface:`canonical`,hasChildren:!0,emptyChildName:`Tab`,props:tabsProps,icon:`LayoutPanelTop`,category:`content`,displayName:`Tabs`,description:"Horizontal tab strip + active panel below. Each `<Tab>` child is one panel; clickable pills at the top switch the active one. Active selection is ephemeral (resets on reload).",searchTerms:[`tabs`,`tabbed`,`panels`,`tabgroup`,`switcher`],exampleBody:`<Tab label="One">Body of the first tab panel.</Tab>
391
391
  <Tab label="Two">Body of the second tab panel.</Tab>`,serialize:(e,t)=>emitMdxJsx(`Tabs`,e,t,tabsProps)},{name:`Tab`,surface:`canonical`,hasChildren:!0,props:tabProps,icon:`PanelTop`,category:`content`,displayName:`Tab`,description:"A single tab panel inside a `<Tabs>` container — carries the strip label and the block-content body.",searchTerms:[`tab`,`panel`],exampleBody:"Panel content — must be nested inside a `<Tabs>` parent.",serialize:(e,t)=>emitMdxJsx(`Tab`,e,t,tabProps)},{name:`Math`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:mathProps,icon:`Sigma`,category:`content`,displayName:`Math`,description:`Block math equation rendered with KaTeX from a LaTeX source string`,searchTerms:[`math`,`latex`,`equation`,`formula`,`katex`,`tex`],serialize:(e,t)=>emitMdxJsx(`Math`,e,t,mathProps)},{name:`MermaidFence`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:mermaidProps,icon:`Workflow`,category:`content`,displayName:`Mermaid`,description:"Diagram rendered from Mermaid source (flowchart, sequence, class, state, ER, gantt, pie). Authored exclusively as ` ```mermaid ` fenced code.",searchTerms:[`mermaid`,`diagram`,`flowchart`,`graph`,`sequence`,`sequencediagram`,`class`,`state`,`er`,`erdiagram`,`gantt`,`pie`,`chart`],serialize:e=>({type:`code`,lang:`mermaid`,meta:null,value:e.attrs.props?.chart??``})},{name:`Mirror`,surface:`canonical`,hasChildren:!1,isSelfClosing:!0,props:mirrorProps,icon:`CopyPlus`,category:`content`,displayName:`Mirror`,description:"Render a read-only copy of a `<MirrorSource>` block from another doc. Use to keep the same content in sync across multiple docs without copy-paste — edits land at the source, every Mirror reflects the change.",searchTerms:[`mirror`,`sync`,`synced`,`transclude`,`embed`,`reference`,`shared block`],serialize:(e,t)=>emitMdxJsx(`Mirror`,e,t,mirrorProps)},{name:`MirrorSource`,surface:`canonical`,hasChildren:!0,props:mirrorSourceProps,icon:`GitBranch`,category:`content`,displayName:`Mirror Source`,description:'Mark a block as the source of truth for content that appears in multiple docs. Wrap any block content; `<Mirror src="…" anchor="<id>">` references render this verbatim read-only at every call-site. Edit here, propagate everywhere.',searchTerms:[`mirror source`,`sync source`,`source block`,`master block`,`shared`],exampleBody:"Authoritative content lives inside this block — edits here propagate to every `<Mirror>` that references this id.",serialize:(e,t)=>emitMdxJsx(`MirrorSource`,e,t,mirrorSourceProps)},{name:`GFMCallout`,surface:`compat`,hasChildren:!0,props:gfmCalloutProps,icon:`MessageSquareWarning`,category:`content`,displayName:`GFM Callout`,description:"GFM blockquote alert (`> [!NOTE]`) — read-only compat. Preserves `> [!NOTE]` syntax on round-trip; insert a fresh Callout block for the full prop surface.",rendersAs:`Callout`,translateProps:e=>e,serialize:(e,t)=>{let S=e.attrs.props,w=new Set([`note`,`tip`,`important`,`warning`,`caution`,`abstract`,`info`,`todo`,`success`,`question`,`failure`,`danger`,`bug`,`example`,`quote`]),E=S?.type??`note`;return{type:`blockquote`,children:[{type:`html`,value:`[!${(w.has(E.toLowerCase())?E:`note`).toUpperCase()}]${S?.collapsible?S.defaultOpen===!1?`-`:`+`:``}${S?.title?` ${S.title}`:``}`},...t.all(e).filter(e=>{if(e.type!==`paragraph`)return!0;let t=e;return Array.isArray(t.children)&&t.children.length>0})]}}},{name:`CommonMarkImage`,surface:`compat`,hasChildren:!1,isSelfClosing:!0,props:commonMarkImageProps,icon:`Image`,category:`media`,displayName:`CommonMark Image`,description:'CommonMark image (`![alt](src "title")`) — read-only compat. Preserves `![alt](src)` syntax on round-trip; insert a fresh Image block for the full HTML-native attribute surface (srcset, sizes, decoding, etc.).',rendersAs:`img`,translateProps:e=>e,serialize:e=>{let t=e.attrs.props;return{type:`paragraph`,children:[{type:`image`,url:t?.sourceUrl??t?.src??``,alt:t?.alt??``,title:t?.title??null}]}}},{name:`WikiEmbedImage`,surface:`compat`,hasChildren:!1,isSelfClosing:!0,props:wikiEmbedImageProps,icon:`ZoomIn`,category:`media`,displayName:`Wiki Embed Image`,description:"Obsidian-style `![[file.png]]` wiki-embed — read-only compat. Edit the alt-text via the alias slot; the embed target / anchor stay on the prop bag and round-trip byte-identical.",rendersAs:`img`,translateProps:e=>{let t=typeof e.alias==`string`&&e.alias.length>0?e.alias:null,S=typeof e.target==`string`?e.target:``;return{src:e.src,alt:t??S}},serialize:serializeWikiEmbed},{name:`WikiEmbedVideo`,surface:`compat`,hasChildren:!1,isSelfClosing:!0,props:wikiEmbedVideoProps,icon:`Film`,category:`media`,displayName:`Wiki Embed Video`,description:"Obsidian-style `![[clip.mp4]]` wiki-embed — read-only compat. Edit the title via the alias slot; the embed target / anchor stay on the prop bag and round-trip byte-identical.",rendersAs:`video`,translateProps:e=>{let t=typeof e.alias==`string`&&e.alias.length>0?e.alias:null,S=typeof e.target==`string`?e.target:``;return{src:e.src,title:t??S}},serialize:serializeWikiEmbed},{name:`WikiEmbedAudio`,surface:`compat`,hasChildren:!1,isSelfClosing:!0,props:wikiEmbedAudioProps,icon:`Volume2`,category:`media`,displayName:`Wiki Embed Audio`,description:"Obsidian-style `![[song.mp3]]` wiki-embed — read-only compat. Edit the title via the alias slot; the embed target / anchor stay on the prop bag and round-trip byte-identical.",rendersAs:`audio`,translateProps:e=>{let t=typeof e.alias==`string`&&e.alias.length>0?e.alias:null,S=typeof e.target==`string`?e.target:``;return{src:e.src,title:t??S}},serialize:serializeWikiEmbed},{name:`WikiEmbedFile`,surface:`compat`,hasChildren:!1,isSelfClosing:!0,props:wikiEmbedFileProps,icon:`Paperclip`,category:`media`,displayName:`Wiki Embed File`,description:"Obsidian-style `![[file.zip]]` wiki-embed — read-only compat for arbitrary downloadable attachments. Renders through the `File` canonical (inline row with file-up icon + bold name + optional dim size). Edit the display name via the alias slot.",rendersAs:`File`,translateProps:e=>{let t=typeof e.alias==`string`&&e.alias.length>0?e.alias:null,S=typeof e.size==`string`&&e.size.length>0?e.size:null;return{src:e.src,name:t??void 0,size:S??void 0}},serialize:serializeWikiEmbed},{name:`HtmlDetailsAccordion`,surface:`compat`,hasChildren:!0,props:htmlDetailsAccordionProps,icon:`ChevronRight`,category:`content`,displayName:`HTML5 Details`,description:"HTML5 `<details><summary>` collapsible — read-only compat. Preserves `<details>` syntax on round-trip; insert a fresh Accordion block for icon / description / group-name props.",rendersAs:`Accordion`,translateProps:e=>e,serialize:(e,t)=>{let S=e.attrs.props,w=S?.defaultOpen?` open`:``,E=S?.name?` name="${escapeHtmlAttr(S.name)}"`:``,D=S?.id?` id="${escapeHtmlAttr(S.id)}"`:``,O=S?.title?.trim(),k=O?`<summary>${escapeHtmlText(O)}</summary>`:``;return{type:`mdxJsxFlowElement`,name:`HtmlDetailsAccordion`,attributes:[],children:t.all(e),data:{htmlBoundary:{opener:`<details${w}${E}${D}>\n${k}`,closer:`</details>`}}}}},{name:`DollarMath`,surface:`compat`,hasChildren:!1,isSelfClosing:!0,props:dollarMathProps,icon:`Sigma`,category:`content`,displayName:`Dollar Math`,description:"Block math via `$$…$$` syntax — read-only compat. Preserves `$$…$$` form on round-trip; insert a fresh Math block for the full prop surface (id, language).",rendersAs:`Math`,translateProps:e=>e,serialize:e=>({type:`math`,value:e.attrs.props?.formula??``})},{name:`MathFence`,surface:`compat`,hasChildren:!1,isSelfClosing:!0,props:mathFenceProps,icon:`Sigma`,category:`content`,displayName:`Math Fence`,description:"Block math via ` ```math ` fenced code syntax — read-only compat. Preserves the fence form on round-trip; insert a fresh Math block for the full prop surface (id, language).",rendersAs:`Math`,translateProps:e=>e,serialize:e=>({type:`code`,lang:`math`,meta:null,value:e.attrs.props?.formula??``})}],wildcardMeta={name:`*`,surface:`canonical`,hasChildren:!0,props:[],description:`Unregistered component — children editable as markdown`,serialize:(e,t)=>emitMdxJsx(e.attrs.componentName||`*`,e,t)};function createRegistry(){let e=new Map;e.set(`*`,wildcardMeta);for(let t of builtInComponents)e.set(t.name,t);return{get(t){return e.get(t)},getOrWildcard(t){return e.get(t)??e.get(`*`)},set(t,S){e.set(t,S)},has(t){return e.has(t)},entries(){return e.entries()}}}function ypsCounters(){let e=globalThis;return e.__okYpsCounters||={block:0,inline:0},e.__okYpsCounters}const metrics={parseFallback:{blockLevel:0,wholeDoc:0},jsxRenderFailure:{},jsxAutoConvertFailed:{},jsxAutoConvertSucceeded:{},jsxPropDropped:{},jsxMoveFailed:{},jsxStuckCopyFailed:{},jsxStuckDeleteFailed:{},jsxPopoverCloseRestoreFailed:{},jsxKeyboardDeleteFailed:{},blockGripClickSelectFailed:{},jsxArrowNodeSelectFailed:{}};function incrementBlockFallback(){metrics.parseFallback.blockLevel++}function incrementWholeDocFallback(){metrics.parseFallback.wholeDoc++}function getParseHealth(){let e=ypsCounters();return{parseFallback:{...metrics.parseFallback},ypsMismatch:{block:e.block,inline:e.inline},jsxRenderFailure:{...metrics.jsxRenderFailure},jsxAutoConvertFailed:{...metrics.jsxAutoConvertFailed},jsxAutoConvertSucceeded:{...metrics.jsxAutoConvertSucceeded},jsxPropDropped:{...metrics.jsxPropDropped},jsxMoveFailed:{...metrics.jsxMoveFailed},jsxStuckCopyFailed:{...metrics.jsxStuckCopyFailed},jsxStuckDeleteFailed:{...metrics.jsxStuckDeleteFailed},jsxPopoverCloseRestoreFailed:{...metrics.jsxPopoverCloseRestoreFailed},jsxKeyboardDeleteFailed:{...metrics.jsxKeyboardDeleteFailed},blockGripClickSelectFailed:{...metrics.blockGripClickSelectFailed},jsxArrowNodeSelectFailed:{...metrics.jsxArrowNodeSelectFailed}}}const FENCE_RE=/^(`{3,}|~{3,})/gm;function findFencedRegions(e){let t=[],S=null;for(let w of e.matchAll(FENCE_RE)){let e=w[1],E=w.index;S?e[0]===S.marker[0]&&e.length>=S.marker.length&&(t.push([S.offset,E+w[0].length]),S=null):S={marker:e,offset:E}}return S&&t.push([S.offset,e.length]),t}function isInsideFence(e,t){return t.some(([t,S])=>e>=t&&e<S)}const REF_DEF_RE=/^[ \t]{0,3}\[([^\]]+)\]:\s*(\S+)(\s+(?:"[^"]*"|'[^']*'|\([^)]*\)))?\s*$/gm;function hoistRefDefs(e){let t=findFencedRegions(e),S=[];for(let w of e.matchAll(REF_DEF_RE))isInsideFence(w.index,t)||S.push(w[0].trimEnd());return S.length>0?`${S.join(`
392
392
  `)}\n\n`:``}const MAX_PARSE_WALLCLOCK_MS=500,MAX_TOTAL_PARSE_CALLS=1e3;function parseWithFallback(e,t){let S={startMs:typeof performance<`u`&&typeof performance.now==`function`?performance.now():Date.now(),calls:0};return parseRecursive(e,t.parse,0,S)}function budgetExhausted(e){return e.calls>=MAX_TOTAL_PARSE_CALLS?!0:(typeof performance<`u`&&typeof performance.now==`function`?performance.now():Date.now())-e.startMs>=MAX_PARSE_WALLCLOCK_MS}const MAX_ERROR_MESSAGE_LEN=500;function errorPayload(e){return e instanceof Error?{name:e.name,message:e.message.slice(0,MAX_ERROR_MESSAGE_LEN),stack:e.stack?.split(`
393
393
  `).slice(0,4).join(`
@@ -469,7 +469,7 @@ To resolve the conflict:`,(0,w.getConflictResolutionRecipe)(E,e))),D=O):S.diag.w
469
469
  `),B=Buffer.from(`\r`),H=Buffer.from(`-`);function q(){}let J=2e3,Y=16*1024,ee=0,te=1,ne=2;var ae=class{constructor(e){this.header=Object.create(null),this.pairCount=0,this.byteCount=0,this.state=0,this.name=``,this.value=``,this.crlf=0,this.cb=e}reset(){this.header=Object.create(null),this.pairCount=0,this.byteCount=0,this.state=0,this.name=``,this.value=``,this.crlf=0}push(e,t,S){let w=t;for(;t<S;)switch(this.state){case 0:{let E=!1;for(;t<S;++t){if(this.byteCount===Y)return-1;++this.byteCount;let S=e[t];if(ge[S]!==1){if(S!==58||(this.name+=e.latin1Slice(w,t),this.name.length===0))return-1;++t,E=!0,this.state=1;break}}if(!E){this.name+=e.latin1Slice(w,t);break}}case 1:{let E=!1;for(;t<S;++t){if(this.byteCount===Y)return-1;++this.byteCount;let S=e[t];if(S!==32&&S!==9){w=t,E=!0,this.state=2;break}}if(!E)break}case 2:switch(this.crlf){case 0:for(;t<S;++t){if(this.byteCount===Y)return-1;++this.byteCount;let S=e[t];if(_e[S]!==1){if(S!==13)return-1;++this.crlf;break}}this.value+=e.latin1Slice(w,t++);break;case 1:if(this.byteCount===Y||(++this.byteCount,e[t++]!==10))return-1;++this.crlf;break;case 2:{if(this.byteCount===Y)return-1;++this.byteCount;let S=e[t];S===32||S===9?(w=t,this.crlf=0):(++this.pairCount<2e3&&(this.name=this.name.toLowerCase(),this.header[this.name]===void 0?this.header[this.name]=[this.value]:this.header[this.name].push(this.value)),S===13?(++this.crlf,++t):(w=t,this.crlf=0,this.state=0,this.name=``,this.value=``));break}case 3:{if(this.byteCount===Y||(++this.byteCount,e[t++]!==10))return-1;let S=this.header;return this.reset(),this.cb(S),t}}break}return t}},oe=class extends S{constructor(e,t){super(e),this.truncated=!1,this._readcb=null,this.once(`end`,()=>{if(this._read(),--t._fileEndsLeft===0&&t._finalcb){let e=t._finalcb;t._finalcb=null,process.nextTick(e)}})}_read(e){let t=this._readcb;t&&(this._readcb=null,t())}};let se={push:(e,t)=>{},destroy:()=>{}};function ce(e,t){let S=e._writecb;e._writecb=null,t?e.destroy(t):S&&S()}function ue(e,t){return e}var de=class extends w{constructor(e){let t={autoDestroy:!0,emitClose:!0,highWaterMark:typeof e.highWaterMark==`number`?e.highWaterMark:void 0};if(super(t),!e.conType.params||typeof e.conType.params.boundary!=`string`)throw Error(`Multipart: Boundary not found`);let S=e.conType.params.boundary,w=typeof e.defParamCharset==`string`&&e.defParamCharset?k(e.defParamCharset):ue,J=e.defCharset||`utf8`,Y=e.preservePath,ee={autoDestroy:!0,emitClose:!0,highWaterMark:typeof e.fileHwm==`number`?e.fileHwm:void 0},te=e.limits,ne=te&&typeof te.fieldSize==`number`?te.fieldSize:1*1024*1024,ce=te&&typeof te.fileSize==`number`?te.fileSize:1/0,de=te&&typeof te.files==`number`?te.files:1/0,fe=te&&typeof te.fields==`number`?te.fields:1/0,me=te&&typeof te.parts==`number`?te.parts:1/0,ge=-1,_e=0,ve=0,ye=!1;this._fileEndsLeft=0,this._fileStream=void 0,this._complete=!1;let Ce=0,we,Te=0,De,je,Me,Pe,Ie=!1,Re=!1,ze=!1;this._hparser=null;let Be=new ae(e=>{this._hparser=null,ye=!1,Me=`text/plain`,De=J,je=`7bit`,Pe=void 0,Ie=!1;let t;if(!e[`content-disposition`]){ye=!0;return}let S=F(e[`content-disposition`][0],w);if(!S||S.type!==`form-data`){ye=!0;return}if(S.params&&(S.params.name&&(Pe=S.params.name),S.params[`filename*`]?t=S.params[`filename*`]:S.params.filename&&(t=S.params.filename),t!==void 0&&!Y&&(t=D(t))),e[`content-type`]){let t=j(e[`content-type`][0]);t&&(Me=`${t.type}/${t.subtype}`,t.params&&typeof t.params.charset==`string`&&(De=t.params.charset.toLowerCase()))}if(e[`content-transfer-encoding`]&&(je=e[`content-transfer-encoding`][0].toLowerCase()),Me===`application/octet-stream`||t!==void 0){if(ve===de){Re||(Re=!0,this.emit(`filesLimit`)),ye=!0;return}if(++ve,this.listenerCount(`file`)===0){ye=!0;return}Ce=0,this._fileStream=new oe(ee,this),++this._fileEndsLeft,this.emit(`file`,Pe,this._fileStream,{filename:t,encoding:je,mimeType:Me})}else{if(_e===fe){ze||(ze=!0,this.emit(`fieldsLimit`)),ye=!0;return}if(++_e,this.listenerCount(`field`)===0){ye=!0;return}we=[],Te=0}}),Ve=0,Ue=(e,t,S,w,E)=>{retrydata:for(;t;){if(this._hparser!==null){let e=this._hparser.push(t,S,w);if(e===-1){this._hparser=null,Be.reset(),this.emit(`error`,Error(`Malformed part header`));break}S=e}if(S===w)break;if(Ve!==0){if(Ve===1){switch(t[S]){case 45:Ve=2,++S;break;case 13:Ve=3,++S;break;default:Ve=0}if(S===w)return}if(Ve===2){if(Ve=0,t[S]===45){this._complete=!0,this._bparser=se;return}let e=this._writecb;this._writecb=q,Ue(!1,H,0,1,!1),this._writecb=e}else if(Ve===3)if(Ve=0,t[S]===10){if(++S,ge>=me||(this._hparser=Be,S===w))break;continue retrydata}else{let e=this._writecb;this._writecb=q,Ue(!1,B,0,1,!1),this._writecb=e}}if(!ye){if(this._fileStream){let e,D=Math.min(w-S,ce-Ce);E?e=t.slice(S,S+D):(e=Buffer.allocUnsafe(D),t.copy(e,0,S,S+D)),Ce+=e.length,Ce===ce?(e.length>0&&this._fileStream.push(e),this._fileStream.emit(`limit`),this._fileStream.truncated=!0,ye=!0):this._fileStream.push(e)||(this._writecb&&(this._fileStream._readcb=this._writecb),this._writecb=null)}else if(we!==void 0){let e,D=Math.min(w-S,ne-Te);E?e=t.slice(S,S+D):(e=Buffer.allocUnsafe(D),t.copy(e,0,S,S+D)),Te+=D,we.push(e),Te===ne&&(ye=!0,Ie=!0)}}break}if(e){if(Ve=1,this._fileStream)this._fileStream.push(null),this._fileStream=null;else if(we!==void 0){let e;switch(we.length){case 0:e=``;break;case 1:e=O(we[0],De,0);break;default:e=O(Buffer.concat(we,Te),De,0)}we=void 0,Te=0,this.emit(`field`,Pe,e,{nameTruncated:!1,valueTruncated:Ie,encoding:je,mimeType:Me})}++ge===me&&this.emit(`partsLimit`)}};this._bparser=new E(`\r\n--${S}`,Ue),this._writecb=null,this._finalcb=null,this.write(L)}static detect(e){return e.type===`multipart`&&e.subtype===`form-data`}_write(e,t,S){this._writecb=S,this._bparser.push(e,0),this._writecb&&ce(this)}_destroy(e,t){this._hparser=null,this._bparser=se,e||=me(this);let S=this._fileStream;S&&(this._fileStream=null,S.destroy(e)),t(e)}_final(e){if(this._bparser.destroy(),!this._complete)return e(Error(`Unexpected end of form`));this._fileEndsLeft?this._finalcb=fe.bind(null,this,e):fe(this,e)}};function fe(e,t,S){if(S)return t(S);S=me(e),t(S)}function me(e){if(e._hparser)return Error(`Malformed part header`);let t=e._fileStream;if(t&&(e._fileStream=null,t.destroy(Error(`Unexpected end of file`))),!e._complete)return Error(`Unexpected end of form`)}let ge=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],_e=[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];t.exports=de})),require_urlencoded=__commonJSMin$1(((e,t)=>{let{Writable:S}=__require$1(`stream`),{getDecoder:w}=require_utils$1();var E=class extends S{constructor(e){let t={autoDestroy:!0,emitClose:!0,highWaterMark:typeof e.highWaterMark==`number`?e.highWaterMark:void 0};super(t);let S=e.defCharset||`utf8`;e.conType.params&&typeof e.conType.params.charset==`string`&&(S=e.conType.params.charset),this.charset=S;let E=e.limits;this.fieldSizeLimit=E&&typeof E.fieldSize==`number`?E.fieldSize:1*1024*1024,this.fieldsLimit=E&&typeof E.fields==`number`?E.fields:1/0,this.fieldNameSizeLimit=E&&typeof E.fieldNameSize==`number`?E.fieldNameSize:100,this._inKey=!0,this._keyTrunc=!1,this._valTrunc=!1,this._bytesKey=0,this._bytesVal=0,this._fields=0,this._key=``,this._val=``,this._byte=-2,this._lastPos=0,this._encode=0,this._decoder=w(S)}static detect(e){return e.type===`application`&&e.subtype===`x-www-form-urlencoded`}_write(e,t,S){if(this._fields>=this.fieldsLimit)return S();let w=0,E=e.length;if(this._lastPos=0,this._byte!==-2){if(w=D(this,e,w,E),w===-1)return S(Error(`Malformed urlencoded form`));if(w>=E)return S();this._inKey?++this._bytesKey:++this._bytesVal}main:for(;w<E;)if(this._inKey){for(w=O(this,e,w,E);w<E;){switch(e[w]){case 61:this._lastPos<w&&(this._key+=e.latin1Slice(this._lastPos,w)),this._lastPos=++w,this._key=this._decoder(this._key,this._encode),this._encode=0,this._inKey=!1;continue main;case 38:if(this._lastPos<w&&(this._key+=e.latin1Slice(this._lastPos,w)),this._lastPos=++w,this._key=this._decoder(this._key,this._encode),this._encode=0,this._bytesKey>0&&this.emit(`field`,this._key,``,{nameTruncated:this._keyTrunc,valueTruncated:!1,encoding:this.charset,mimeType:`text/plain`}),this._key=``,this._val=``,this._keyTrunc=!1,this._valTrunc=!1,this._bytesKey=0,this._bytesVal=0,++this._fields>=this.fieldsLimit)return this.emit(`fieldsLimit`),S();continue;case 43:this._lastPos<w&&(this._key+=e.latin1Slice(this._lastPos,w)),this._key+=` `,this._lastPos=w+1;break;case 37:if(this._encode===0&&(this._encode=1),this._lastPos<w&&(this._key+=e.latin1Slice(this._lastPos,w)),this._lastPos=w+1,this._byte=-1,w=D(this,e,w+1,E),w===-1)return S(Error(`Malformed urlencoded form`));if(w>=E)return S();++this._bytesKey,w=O(this,e,w,E);continue}++w,++this._bytesKey,w=O(this,e,w,E)}this._lastPos<w&&(this._key+=e.latin1Slice(this._lastPos,w))}else{for(w=k(this,e,w,E);w<E;){switch(e[w]){case 38:if(this._lastPos<w&&(this._val+=e.latin1Slice(this._lastPos,w)),this._lastPos=++w,this._inKey=!0,this._val=this._decoder(this._val,this._encode),this._encode=0,(this._bytesKey>0||this._bytesVal>0)&&this.emit(`field`,this._key,this._val,{nameTruncated:this._keyTrunc,valueTruncated:this._valTrunc,encoding:this.charset,mimeType:`text/plain`}),this._key=``,this._val=``,this._keyTrunc=!1,this._valTrunc=!1,this._bytesKey=0,this._bytesVal=0,++this._fields>=this.fieldsLimit)return this.emit(`fieldsLimit`),S();continue main;case 43:this._lastPos<w&&(this._val+=e.latin1Slice(this._lastPos,w)),this._val+=` `,this._lastPos=w+1;break;case 37:if(this._encode===0&&(this._encode=1),this._lastPos<w&&(this._val+=e.latin1Slice(this._lastPos,w)),this._lastPos=w+1,this._byte=-1,w=D(this,e,w+1,E),w===-1)return S(Error(`Malformed urlencoded form`));if(w>=E)return S();++this._bytesVal,w=k(this,e,w,E);continue}++w,++this._bytesVal,w=k(this,e,w,E)}this._lastPos<w&&(this._val+=e.latin1Slice(this._lastPos,w))}S()}_final(e){if(this._byte!==-2)return e(Error(`Malformed urlencoded form`));(!this._inKey||this._bytesKey>0||this._bytesVal>0)&&(this._inKey?this._key=this._decoder(this._key,this._encode):this._val=this._decoder(this._val,this._encode),this.emit(`field`,this._key,this._val,{nameTruncated:this._keyTrunc,valueTruncated:this._valTrunc,encoding:this.charset,mimeType:`text/plain`})),e()}};function D(e,t,S,w){if(S>=w)return w;if(e._byte===-1){let E=j[t[S++]];if(E===-1)return-1;if(E>=8&&(e._encode=2),S<w){let w=j[t[S++]];if(w===-1)return-1;e._inKey?e._key+=String.fromCharCode((E<<4)+w):e._val+=String.fromCharCode((E<<4)+w),e._byte=-2,e._lastPos=S}else e._byte=E}else{let w=j[t[S++]];if(w===-1)return-1;e._inKey?e._key+=String.fromCharCode((e._byte<<4)+w):e._val+=String.fromCharCode((e._byte<<4)+w),e._byte=-2,e._lastPos=S}return S}function O(e,t,S,w){if(e._bytesKey>e.fieldNameSizeLimit){for(e._keyTrunc||e._lastPos<S&&(e._key+=t.latin1Slice(e._lastPos,S-1)),e._keyTrunc=!0;S<w;++S){let w=t[S];if(w===61||w===38)break;++e._bytesKey}e._lastPos=S}return S}function k(e,t,S,w){if(e._bytesVal>e.fieldSizeLimit){for(e._valTrunc||e._lastPos<S&&(e._val+=t.latin1Slice(e._lastPos,S-1)),e._valTrunc=!0;S<w&&t[S]!==38;++S)++e._bytesVal;e._lastPos=S}return S}let j=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1];t.exports=E})),require_lib=__commonJSMin$1(((e,t)=>{let{parseContentType:S}=require_utils$1();function w(e){let t=e.headers,w=S(t[`content-type`]);if(!w)throw Error(`Malformed content type`);for(let S of E){if(!S.detect(w))continue;let E={limits:e.limits,headers:t,conType:w,highWaterMark:void 0,fileHwm:void 0,defCharset:void 0,defParamCharset:void 0,preservePath:!1};return e.highWaterMark&&(E.highWaterMark=e.highWaterMark),e.fileHwm&&(E.fileHwm=e.fileHwm),E.defCharset=e.defCharset,E.defParamCharset=e.defParamCharset,E.preservePath=e.preservePath,new S(E)}throw Error(`Unsupported content type: ${t[`content-type`]}`)}let E=[require_multipart(),require_urlencoded()].filter(function(e){return typeof e.detect==`function`});t.exports=e=>{if((typeof e!=`object`||!e)&&(e={}),typeof e.headers!=`object`||e.headers===null||typeof e.headers[`content-type`]!=`string`)throw Error(`Missing Content-Type`);return w(e)}}));const WINDOWS_1252_EXTRA={128:`€`,130:`‚`,131:`ƒ`,132:`„`,133:`…`,134:`†`,135:`‡`,136:`ˆ`,137:`‰`,138:`Š`,139:`‹`,140:`Œ`,142:`Ž`,145:`‘`,146:`’`,147:`“`,148:`”`,149:`•`,150:`–`,151:`—`,152:`˜`,153:`™`,154:`š`,155:`›`,156:`œ`,158:`ž`,159:`Ÿ`},WINDOWS_1252_REVERSE={};for(let[e,t]of Object.entries(WINDOWS_1252_EXTRA))WINDOWS_1252_REVERSE[t]=Number.parseInt(e,10);let _utf8Decoder;function utf8Decoder(){if(globalThis.TextDecoder!==void 0)return _utf8Decoder??=new globalThis.TextDecoder(`utf-8`)}const CHUNK=32*1024,REPLACEMENT=65533;function textDecode(e,t=`utf-8`){switch(t.toLowerCase()){case`utf-8`:case`utf8`:{let t=utf8Decoder();return t?t.decode(e):decodeUTF8(e)}case`utf-16le`:return decodeUTF16LE(e);case`us-ascii`:case`ascii`:return decodeASCII(e);case`latin1`:case`iso-8859-1`:return decodeLatin1(e);case`windows-1252`:return decodeWindows1252(e);default:throw RangeError(`Encoding '${t}' not supported`)}}function flushChunk(e,t){t.length!==0&&(e.push(String.fromCharCode.apply(null,t)),t.length=0)}function pushCodeUnit(e,t,S){t.push(S),t.length>=CHUNK&&flushChunk(e,t)}function pushCodePoint(e,t,S){if(S<=65535){pushCodeUnit(e,t,S);return}S-=65536,pushCodeUnit(e,t,55296+(S>>10)),pushCodeUnit(e,t,56320+(S&1023))}function decodeUTF8(e){let t=[],S=[],w=0;for(e.length>=3&&e[0]===239&&e[1]===187&&e[2]===191&&(w=3);w<e.length;){let E=e[w];if(E<=127){pushCodeUnit(t,S,E),w++;continue}if(E<194||E>244){pushCodeUnit(t,S,REPLACEMENT),w++;continue}if(E<=223){if(w+1>=e.length){pushCodeUnit(t,S,REPLACEMENT),w++;continue}let D=e[w+1];if((D&192)!=128){pushCodeUnit(t,S,REPLACEMENT),w++;continue}pushCodeUnit(t,S,(E&31)<<6|D&63),w+=2;continue}if(E<=239){if(w+2>=e.length){pushCodeUnit(t,S,REPLACEMENT),w++;continue}let D=e[w+1],O=e[w+2];if(!((D&192)==128&&(O&192)==128&&!(E===224&&D<160)&&!(E===237&&D>=160))){pushCodeUnit(t,S,REPLACEMENT),w++;continue}pushCodeUnit(t,S,(E&15)<<12|(D&63)<<6|O&63),w+=3;continue}if(w+3>=e.length){pushCodeUnit(t,S,REPLACEMENT),w++;continue}let D=e[w+1],O=e[w+2],k=e[w+3];if(!((D&192)==128&&(O&192)==128&&(k&192)==128&&!(E===240&&D<144)&&!(E===244&&D>143))){pushCodeUnit(t,S,REPLACEMENT),w++;continue}pushCodePoint(t,S,(E&7)<<18|(D&63)<<12|(O&63)<<6|k&63),w+=4}return flushChunk(t,S),t.join(``)}function decodeUTF16LE(e){let t=[],S=[],w=e.length,E=0;for(;E+1<w;){let D=e[E]|e[E+1]<<8;if(E+=2,D>=55296&&D<=56319){if(E+1<w){let w=e[E]|e[E+1]<<8;w>=56320&&w<=57343?(pushCodeUnit(t,S,D),pushCodeUnit(t,S,w),E+=2):pushCodeUnit(t,S,REPLACEMENT)}else pushCodeUnit(t,S,REPLACEMENT);continue}if(D>=56320&&D<=57343){pushCodeUnit(t,S,REPLACEMENT);continue}pushCodeUnit(t,S,D)}return E<w&&pushCodeUnit(t,S,REPLACEMENT),flushChunk(t,S),t.join(``)}function decodeASCII(e){let t=[];for(let S=0;S<e.length;S+=CHUNK){let w=Math.min(e.length,S+CHUNK),E=Array(w-S);for(let t=S,D=0;t<w;t++,D++)E[D]=e[t]&127;t.push(String.fromCharCode.apply(null,E))}return t.join(``)}function decodeLatin1(e){let t=[];for(let S=0;S<e.length;S+=CHUNK){let w=Math.min(e.length,S+CHUNK),E=Array(w-S);for(let t=S,D=0;t<w;t++,D++)E[D]=e[t];t.push(String.fromCharCode.apply(null,E))}return t.join(``)}function decodeWindows1252(e){let t=[],S=``;for(let w=0;w<e.length;w++){let E=e[w],D=E>=128&&E<=159?WINDOWS_1252_EXTRA[E]:void 0;S+=D??String.fromCharCode(E),S.length>=CHUNK&&(t.push(S),S=``)}return S&&t.push(S),t.join(``)}function dv(e){return new DataView(e.buffer,e.byteOffset)}const UINT8={len:1,get(e,t){return dv(e).getUint8(t)},put(e,t,S){return dv(e).setUint8(t,S),t+1}},UINT16_LE={len:2,get(e,t){return dv(e).getUint16(t,!0)},put(e,t,S){return dv(e).setUint16(t,S,!0),t+2}},UINT16_BE={len:2,get(e,t){return dv(e).getUint16(t)},put(e,t,S){return dv(e).setUint16(t,S),t+2}},UINT32_LE={len:4,get(e,t){return dv(e).getUint32(t,!0)},put(e,t,S){return dv(e).setUint32(t,S,!0),t+4}},UINT32_BE={len:4,get(e,t){return dv(e).getUint32(t)},put(e,t,S){return dv(e).setUint32(t,S),t+4}},INT32_BE={len:4,get(e,t){return dv(e).getInt32(t)},put(e,t,S){return dv(e).setInt32(t,S),t+4}},UINT64_LE={len:8,get(e,t){return dv(e).getBigUint64(t,!0)},put(e,t,S){return dv(e).setBigUint64(t,S,!0),t+8}};var StringType=class{constructor(e,t){this.len=e,this.encoding=t}get(e,t=0){return textDecode(e.subarray(t,t+this.len),this.encoding)}};const defaultMessages=`End-Of-Stream`;var EndOfStreamError=class extends Error{constructor(){super(defaultMessages),this.name=`EndOfStreamError`}},AbortError=class extends Error{constructor(e=`The operation was aborted`){super(e),this.name=`AbortError`}},AbstractStreamReader=class{constructor(){this.endOfStream=!1,this.interrupted=!1,this.peekQueue=[]}async peek(e,t=!1){let S=await this.read(e,t);return this.peekQueue.push(e.subarray(0,S)),S}async read(e,t=!1){if(e.length===0)return 0;let S=this.readFromPeekBuffer(e);if(this.endOfStream||(S+=await this.readRemainderFromStream(e.subarray(S),t)),S===0&&!t)throw new EndOfStreamError;return S}readFromPeekBuffer(e){let t=e.length,S=0;for(;this.peekQueue.length>0&&t>0;){let w=this.peekQueue.pop();if(!w)throw Error(`peekData should be defined`);let E=Math.min(w.length,t);e.set(w.subarray(0,E),S),S+=E,t-=E,E<w.length&&this.peekQueue.push(w.subarray(E))}return S}async readRemainderFromStream(e,t){let S=0;for(;S<e.length&&!this.endOfStream;){if(this.interrupted)throw new AbortError;let w=await this.readFromStream(e.subarray(S),t);if(w===0)break;S+=w}if(!t&&S<e.length)throw new EndOfStreamError;return S}},WebStreamReader=class extends AbstractStreamReader{constructor(e){super(),this.reader=e}async abort(){return this.close()}async close(){this.reader.releaseLock()}},WebStreamByobReader=class extends WebStreamReader{async readFromStream(e,t){if(e.length===0)return 0;let S=await this.reader.read(new Uint8Array(e.length),{min:t?void 0:e.length});return S.done&&(this.endOfStream=S.done),S.value?(e.set(S.value),S.value.length):0}},WebStreamDefaultReader=class extends AbstractStreamReader{constructor(e){super(),this.reader=e,this.buffer=null}writeChunk(e,t){let S=Math.min(t.length,e.length);return e.set(t.subarray(0,S)),S<t.length?this.buffer=t.subarray(S):this.buffer=null,S}async readFromStream(e,t){if(e.length===0)return 0;let S=0;for(this.buffer&&(S+=this.writeChunk(e,this.buffer));S<e.length&&!this.endOfStream;){let t=await this.reader.read();if(t.done){this.endOfStream=!0;break}t.value&&(S+=this.writeChunk(e.subarray(S),t.value))}if(!t&&S===0&&this.endOfStream)throw new EndOfStreamError;return S}abort(){return this.interrupted=!0,this.reader.cancel()}async close(){await this.abort(),this.reader.releaseLock()}};function makeWebStreamReader(e){try{let t=e.getReader({mode:`byob`});return t instanceof ReadableStreamDefaultReader?new WebStreamDefaultReader(t):new WebStreamByobReader(t)}catch(t){if(t instanceof TypeError)return new WebStreamDefaultReader(e.getReader());throw t}}var AbstractTokenizer=class{constructor(e){this.numBuffer=new Uint8Array(8),this.position=0,this.onClose=e?.onClose,e?.abortSignal&&e.abortSignal.addEventListener(`abort`,()=>{this.abort()})}async readToken(e,t=this.position){let S=new Uint8Array(e.len);if(await this.readBuffer(S,{position:t})<e.len)throw new EndOfStreamError;return e.get(S,0)}async peekToken(e,t=this.position){let S=new Uint8Array(e.len);if(await this.peekBuffer(S,{position:t})<e.len)throw new EndOfStreamError;return e.get(S,0)}async readNumber(e){if(await this.readBuffer(this.numBuffer,{length:e.len})<e.len)throw new EndOfStreamError;return e.get(this.numBuffer,0)}async peekNumber(e){if(await this.peekBuffer(this.numBuffer,{length:e.len})<e.len)throw new EndOfStreamError;return e.get(this.numBuffer,0)}async ignore(e){if(e<0)throw RangeError(`ignore length must be ≥ 0 bytes`);if(this.fileInfo.size!==void 0){let t=this.fileInfo.size-this.position;if(e>t)return this.position+=t,t}return this.position+=e,e}async close(){await this.abort(),await this.onClose?.()}normalizeOptions(e,t){if(!this.supportsRandomAccess()&&t&&t.position!==void 0&&t.position<this.position)throw Error("`options.position` must be equal or greater than `tokenizer.position`");return{mayBeLess:!1,offset:0,length:e.length,position:this.position,...t}}abort(){return Promise.resolve()}};const maxBufferSize=256e3;var ReadStreamTokenizer=class extends AbstractTokenizer{constructor(e,t){super(t),this.streamReader=e,this.fileInfo=t?.fileInfo??{}}async readBuffer(e,t){let S=this.normalizeOptions(e,t),w=S.position-this.position;if(w>0)return await this.ignore(w),this.readBuffer(e,t);if(w<0)throw Error("`options.position` must be equal or greater than `tokenizer.position`");if(S.length===0)return 0;let E=await this.streamReader.read(e.subarray(0,S.length),S.mayBeLess);if(this.position+=E,(!t||!t.mayBeLess)&&E<S.length)throw new EndOfStreamError;return E}async peekBuffer(e,t){let S=this.normalizeOptions(e,t),w=0;if(S.position){let t=S.position-this.position;if(t>0){let E=new Uint8Array(S.length+t);return w=await this.peekBuffer(E,{mayBeLess:S.mayBeLess}),e.set(E.subarray(t)),w-t}if(t<0)throw Error(`Cannot peek from a negative offset in a stream`)}if(S.length>0){try{w=await this.streamReader.peek(e.subarray(0,S.length),S.mayBeLess)}catch(e){if(t?.mayBeLess&&e instanceof EndOfStreamError)return 0;throw e}if(!S.mayBeLess&&w<S.length)throw new EndOfStreamError}return w}async ignore(e){if(e<0)throw RangeError(`ignore length must be ≥ 0 bytes`);let t=Math.min(maxBufferSize,e),S=new Uint8Array(t),w=0;for(;w<e;){let E=e-w,D=await this.readBuffer(S,{length:Math.min(t,E)});if(D<0)return D;w+=D}return w}abort(){return this.streamReader.abort()}async close(){return this.streamReader.close()}supportsRandomAccess(){return!1}},BufferTokenizer=class extends AbstractTokenizer{constructor(e,t){super(t),this.uint8Array=e,this.fileInfo={...t?.fileInfo??{},size:e.length}}async readBuffer(e,t){t?.position&&(this.position=t.position);let S=await this.peekBuffer(e,t);return this.position+=S,S}async peekBuffer(e,t){let S=this.normalizeOptions(e,t),w=Math.min(this.uint8Array.length-S.position,S.length);if(!S.mayBeLess&&w<S.length)throw new EndOfStreamError;return e.set(this.uint8Array.subarray(S.position,S.position+w)),w}close(){return super.close()}supportsRandomAccess(){return!0}setPosition(e){this.position=e}},BlobTokenizer=class extends AbstractTokenizer{constructor(e,t){super(t),this.blob=e,this.fileInfo={...t?.fileInfo??{},size:e.size,mimeType:e.type}}async readBuffer(e,t){t?.position&&(this.position=t.position);let S=await this.peekBuffer(e,t);return this.position+=S,S}async peekBuffer(e,t){let S=this.normalizeOptions(e,t),w=Math.min(this.blob.size-S.position,S.length);if(!S.mayBeLess&&w<S.length)throw new EndOfStreamError;let E=await this.blob.slice(S.position,S.position+w).arrayBuffer();return e.set(new Uint8Array(E)),w}close(){return super.close()}supportsRandomAccess(){return!0}setPosition(e){this.position=e}};function fromWebStream(e,t){let S=makeWebStreamReader(e),w=t??{},E=w.onClose;return w.onClose=async()=>{if(await S.close(),E)return E()},new ReadStreamTokenizer(S,w)}function fromBuffer(e,t){return new BufferTokenizer(e,t)}function fromBlob(e,t){return new BlobTokenizer(e,t)}const Signature={LocalFileHeader:67324752,DataDescriptor:134695760,CentralFileHeader:33639248,EndOfCentralDirectory:101010256},DataDescriptor={get(e){return{signature:UINT32_LE.get(e,0),compressedSize:UINT32_LE.get(e,8),uncompressedSize:UINT32_LE.get(e,12)}},len:16},LocalFileHeaderToken={get(e){let t=UINT16_LE.get(e,6);return{signature:UINT32_LE.get(e,0),minVersion:UINT16_LE.get(e,4),dataDescriptor:!!(t&8),compressedMethod:UINT16_LE.get(e,8),compressedSize:UINT32_LE.get(e,18),uncompressedSize:UINT32_LE.get(e,22),filenameLength:UINT16_LE.get(e,26),extraFieldLength:UINT16_LE.get(e,28),filename:null}},len:30},EndOfCentralDirectoryRecordToken={get(e){return{signature:UINT32_LE.get(e,0),nrOfThisDisk:UINT16_LE.get(e,4),nrOfThisDiskWithTheStart:UINT16_LE.get(e,6),nrOfEntriesOnThisDisk:UINT16_LE.get(e,8),nrOfEntriesOfSize:UINT16_LE.get(e,10),sizeOfCd:UINT32_LE.get(e,12),offsetOfStartOfCd:UINT32_LE.get(e,16),zipFileCommentLength:UINT16_LE.get(e,20)}},len:22},FileHeader={get(e){let t=UINT16_LE.get(e,8);return{signature:UINT32_LE.get(e,0),minVersion:UINT16_LE.get(e,6),dataDescriptor:!!(t&8),compressedMethod:UINT16_LE.get(e,10),compressedSize:UINT32_LE.get(e,20),uncompressedSize:UINT32_LE.get(e,24),filenameLength:UINT16_LE.get(e,28),extraFieldLength:UINT16_LE.get(e,30),fileCommentLength:UINT16_LE.get(e,32),relativeOffsetOfLocalHeader:UINT32_LE.get(e,42),filename:null}},len:46};var import_src$7=__toESM$1(require_src$15(),1);function signatureToArray(e){let t=new Uint8Array(UINT32_LE.len);return UINT32_LE.put(t,0,e),t}const debug=(0,import_src$7.default)(`tokenizer:inflate`),syncBufferSize=256*1024,ddSignatureArray=signatureToArray(Signature.DataDescriptor),eocdSignatureBytes=signatureToArray(Signature.EndOfCentralDirectory);var ZipHandler=class e{constructor(e){this.tokenizer=e,this.syncBuffer=new Uint8Array(syncBufferSize)}async isZip(){return await this.peekSignature()===Signature.LocalFileHeader}peekSignature(){return this.tokenizer.peekToken(UINT32_LE)}async findEndOfCentralDirectoryLocator(){let e=this.tokenizer,t=Math.min(16*1024,e.fileInfo.size),S=this.syncBuffer.subarray(0,t);await this.tokenizer.readBuffer(S,{position:e.fileInfo.size-t});for(let w=S.length-4;w>=0;w--)if(S[w]===eocdSignatureBytes[0]&&S[w+1]===eocdSignatureBytes[1]&&S[w+2]===eocdSignatureBytes[2]&&S[w+3]===eocdSignatureBytes[3])return e.fileInfo.size-t+w;return-1}async readCentralDirectory(){if(!this.tokenizer.supportsRandomAccess()){debug(`Cannot reading central-directory without random-read support`);return}debug(`Reading central-directory...`);let e=this.tokenizer.position,t=await this.findEndOfCentralDirectoryLocator();if(t>0){debug(`Central-directory 32-bit signature found`);let S=await this.tokenizer.readToken(EndOfCentralDirectoryRecordToken,t),w=[];this.tokenizer.setPosition(S.offsetOfStartOfCd);for(let e=0;e<S.nrOfEntriesOfSize;++e){let t=await this.tokenizer.readToken(FileHeader);if(t.signature!==Signature.CentralFileHeader)throw Error(`Expected Central-File-Header signature`);t.filename=await this.tokenizer.readToken(new StringType(t.filenameLength,`utf-8`)),await this.tokenizer.ignore(t.extraFieldLength),await this.tokenizer.ignore(t.fileCommentLength),w.push(t),debug(`Add central-directory file-entry: n=${e+1}/${w.length}: filename=${w[e].filename}`)}return this.tokenizer.setPosition(e),w}this.tokenizer.setPosition(e)}async unzip(e){let t=await this.readCentralDirectory();if(t)return this.iterateOverCentralDirectory(t,e);let S=!1;do{let t=await this.readLocalFileHeader();if(!t)break;let w=e(t);S=!!w.stop;let E;if(await this.tokenizer.ignore(t.extraFieldLength),t.dataDescriptor&&t.compressedSize===0){let e=[],S=syncBufferSize;debug(`Compressed-file-size unknown, scanning for next data-descriptor-signature....`);let E=-1;for(;E<0&&S===syncBufferSize;){S=await this.tokenizer.peekBuffer(this.syncBuffer,{mayBeLess:!0}),E=indexOf(this.syncBuffer.subarray(0,S),ddSignatureArray);let t=E>=0?E:S;if(w.handler){let S=new Uint8Array(t);await this.tokenizer.readBuffer(S),e.push(S)}else await this.tokenizer.ignore(t)}debug(`Found data-descriptor-signature at pos=${this.tokenizer.position}`),w.handler&&await this.inflate(t,mergeArrays(e),w.handler)}else w.handler?(debug(`Reading compressed-file-data: ${t.compressedSize} bytes`),E=new Uint8Array(t.compressedSize),await this.tokenizer.readBuffer(E),await this.inflate(t,E,w.handler)):(debug(`Ignoring compressed-file-data: ${t.compressedSize} bytes`),await this.tokenizer.ignore(t.compressedSize));if(debug(`Reading data-descriptor at pos=${this.tokenizer.position}`),t.dataDescriptor&&(await this.tokenizer.readToken(DataDescriptor)).signature!==134695760)throw Error(`Expected data-descriptor-signature at position ${this.tokenizer.position-DataDescriptor.len}`)}while(!S)}async iterateOverCentralDirectory(e,t){for(let S of e){let e=t(S);if(e.handler){this.tokenizer.setPosition(S.relativeOffsetOfLocalHeader);let t=await this.readLocalFileHeader();if(t){await this.tokenizer.ignore(t.extraFieldLength);let w=new Uint8Array(S.compressedSize);await this.tokenizer.readBuffer(w),await this.inflate(t,w,e.handler)}}if(e.stop)break}}async inflate(t,S,w){if(t.compressedMethod===0)return w(S);if(t.compressedMethod!==8)throw Error(`Unsupported ZIP compression method: ${t.compressedMethod}`);return debug(`Decompress filename=${t.filename}, compressed-size=${S.length}`),w(await e.decompressDeflateRaw(S))}static async decompressDeflateRaw(e){let t=new ReadableStream({start(t){t.enqueue(e),t.close()}}),S=new DecompressionStream(`deflate-raw`),w=t.pipeThrough(S);try{let e=await new Response(w).arrayBuffer();return new Uint8Array(e)}catch(e){let t=e instanceof Error?`Failed to deflate ZIP entry: ${e.message}`:`Unknown decompression error in ZIP entry`;throw TypeError(t)}}async readLocalFileHeader(){let e=await this.tokenizer.peekToken(UINT32_LE);if(e===Signature.LocalFileHeader){let e=await this.tokenizer.readToken(LocalFileHeaderToken);return e.filename=await this.tokenizer.readToken(new StringType(e.filenameLength,`utf-8`)),e}if(e===Signature.CentralFileHeader)return!1;throw Error(e===3759263696?`Encrypted ZIP`:`Unexpected signature`)}};function indexOf(e,t){let S=e.length,w=t.length;if(w>S)return-1;for(let E=0;E<=S-w;E++){let S=!0;for(let D=0;D<w;D++)if(e[E+D]!==t[D]){S=!1;break}if(S)return E}return-1}function mergeArrays(e){let t=e.reduce((e,t)=>e+t.length,0),S=new Uint8Array(t),w=0;for(let t of e)S.set(t,w),w+=t.length;return S}var GzipHandler=class{constructor(e){this.tokenizer=e}inflate(){let e=this.tokenizer;return new ReadableStream({async pull(t){let S=new Uint8Array(1024),w=await e.readBuffer(S,{mayBeLess:!0});if(w===0){t.close();return}t.enqueue(S.subarray(0,w))}}).pipeThrough(new DecompressionStream(`gzip`))}};const objectToString=Object.prototype.toString,uint8ArrayStringified=`[object Uint8Array]`;function isType(e,t,S){return e?e.constructor===t?!0:objectToString.call(e)===S:!1}function isUint8Array(e){return isType(e,Uint8Array,uint8ArrayStringified)}function assertUint8Array(e){if(!isUint8Array(e))throw TypeError(`Expected \`Uint8Array\`, got \`${typeof e}\``)}function concatUint8Arrays(e,t){if(e.length===0)return new Uint8Array;t??=e.reduce((e,t)=>e+t.length,0);let S=new Uint8Array(t),w=0;for(let t of e)assertUint8Array(t),S.set(t,w),w+=t.length;return S}const cachedDecoders={utf8:new globalThis.TextDecoder(`utf8`)},cachedEncoder=new globalThis.TextEncoder,byteToHexLookupTable=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,`0`));function getUintBE(e){let{byteLength:t}=e;if(t===6)return e.getUint16(0)*2**32+e.getUint32(2);if(t===5)return e.getUint8(0)*2**32+e.getUint32(1);if(t===4)return e.getUint32(0);if(t===3)return e.getUint8(0)*2**16+e.getUint16(1);if(t===2)return e.getUint16(0);if(t===1)return e.getUint8(0)}function stringToBytes(e,t){if(t===`utf-16le`){let t=[];for(let S=0;S<e.length;S++){let w=e.charCodeAt(S);t.push(w&255,w>>8&255)}return t}if(t===`utf-16be`){let t=[];for(let S=0;S<e.length;S++){let w=e.charCodeAt(S);t.push(w>>8&255,w&255)}return t}return[...e].map(e=>e.charCodeAt(0))}function tarHeaderChecksumMatches(e,t=0){let S=Number.parseInt(new StringType(6).get(e,148).replace(/\0.*$/v,``).trim(),8);if(Number.isNaN(S))return!1;let w=256;for(let S=t;S<t+148;S++)w+=e[S];for(let S=t+156;S<t+512;S++)w+=e[S];return S===w}const uint32SyncSafeToken={get:(e,t)=>e[t+3]&127|(e[t+2]&127)<<7|(e[t+1]&127)<<14|(e[t]&127)<<21,len:4},extensions=`jpg,png,apng,gif,webp,flif,xcf,cr2,cr3,orf,arw,dng,nef,rw2,raf,tif,bmp,icns,jxr,psd,indd,zip,tar,rar,gz,bz2,7z,dmg,mp4,mid,mkv,webm,mov,avi,mpg,mp2,mp3,m4a,oga,ogg,ogv,opus,flac,wav,spx,amr,pdf,epub,elf,macho,exe,swf,rtf,wasm,woff,woff2,eot,ttf,otf,ttc,ico,flv,ps,xz,sqlite,nes,crx,xpi,cab,deb,ar,rpm,Z,lz,cfb,mxf,mts,blend,bpg,docx,pptx,xlsx,3gp,3g2,j2c,jp2,jpm,jpx,mj2,aif,qcp,odt,ods,odp,xml,mobi,heic,cur,ktx,ape,wv,dcm,ics,glb,pcap,dsf,lnk,alias,voc,ac3,m4v,m4p,m4b,f4v,f4p,f4b,f4a,mie,asf,ogm,ogx,mpc,arrow,shp,aac,mp1,it,s3m,xm,skp,avif,eps,lzh,pgp,asar,stl,chm,3mf,zst,jxl,vcf,jls,pst,dwg,parquet,class,arj,cpio,ace,avro,icc,fbx,vsdx,vtt,apk,drc,lz4,potx,xltx,dotx,xltm,ott,ots,otp,odg,otg,xlsm,docm,dotm,potm,pptm,jar,jmp,rm,sav,ppsm,ppsx,tar.gz,reg,dat,key,numbers,pages`.split(`,`),mimeTypes=`image/jpeg,image/png,image/gif,image/webp,image/flif,image/x-xcf,image/x-canon-cr2,image/x-canon-cr3,image/tiff,image/bmp,image/vnd.ms-photo,image/vnd.adobe.photoshop,application/x-indesign,application/epub+zip,application/x-xpinstall,application/vnd.ms-powerpoint.slideshow.macroenabled.12,application/vnd.oasis.opendocument.text,application/vnd.oasis.opendocument.spreadsheet,application/vnd.oasis.opendocument.presentation,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.openxmlformats-officedocument.presentationml.slideshow,application/zip,application/x-tar,application/x-rar-compressed,application/gzip,application/x-bzip2,application/x-7z-compressed,application/x-apple-diskimage,application/vnd.apache.arrow.file,video/mp4,audio/midi,video/matroska,video/webm,video/quicktime,video/vnd.avi,audio/wav,audio/qcelp,audio/x-ms-asf,video/x-ms-asf,application/vnd.ms-asf,video/mpeg,video/3gpp,audio/mpeg,audio/mp4,video/ogg,audio/ogg,audio/ogg; codecs=opus,application/ogg,audio/flac,audio/ape,audio/wavpack,audio/amr,application/pdf,application/x-elf,application/x-mach-binary,application/x-msdownload,application/x-shockwave-flash,application/rtf,application/wasm,font/woff,font/woff2,application/vnd.ms-fontobject,font/ttf,font/otf,font/collection,image/x-icon,video/x-flv,application/postscript,application/eps,application/x-xz,application/x-sqlite3,application/x-nintendo-nes-rom,application/x-google-chrome-extension,application/vnd.ms-cab-compressed,application/x-deb,application/x-unix-archive,application/x-rpm,application/x-compress,application/lzip,application/x-cfb,application/x-mie,application/mxf,video/mp2t,application/x-blender,image/bpg,image/j2c,image/jp2,image/jpx,image/jpm,image/mj2,audio/aiff,application/xml,application/x-mobipocket-ebook,image/heif,image/heif-sequence,image/heic,image/heic-sequence,image/icns,image/ktx,application/dicom,audio/x-musepack,text/calendar,text/vcard,text/vtt,model/gltf-binary,application/vnd.tcpdump.pcap,audio/x-dsf,application/x-ms-shortcut,application/x-ft-apple.alias,audio/x-voc,audio/vnd.dolby.dd-raw,audio/x-m4a,image/apng,image/x-olympus-orf,image/x-sony-arw,image/x-adobe-dng,image/x-nikon-nef,image/x-panasonic-rw2,image/x-fujifilm-raf,video/x-m4v,video/3gpp2,application/x-esri-shape,audio/aac,audio/x-it,audio/x-s3m,audio/x-xm,video/MP1S,video/MP2P,application/vnd.sketchup.skp,image/avif,application/x-lzh-compressed,application/pgp-encrypted,application/x-asar,model/stl,application/vnd.ms-htmlhelp,model/3mf,image/jxl,application/zstd,image/jls,application/vnd.ms-outlook,image/vnd.dwg,application/vnd.apache.parquet,application/java-vm,application/x-arj,application/x-cpio,application/x-ace-compressed,application/avro,application/vnd.iccprofile,application/x-ft-fbx,application/vnd.visio,application/vnd.android.package-archive,application/x-ft-draco,application/x-lz4,application/vnd.openxmlformats-officedocument.presentationml.template,application/vnd.openxmlformats-officedocument.spreadsheetml.template,application/vnd.openxmlformats-officedocument.wordprocessingml.template,application/vnd.ms-excel.template.macroenabled.12,application/vnd.oasis.opendocument.text-template,application/vnd.oasis.opendocument.spreadsheet-template,application/vnd.oasis.opendocument.presentation-template,application/vnd.oasis.opendocument.graphics,application/vnd.oasis.opendocument.graphics-template,application/vnd.ms-excel.sheet.macroenabled.12,application/vnd.ms-word.document.macroenabled.12,application/vnd.ms-word.template.macroenabled.12,application/vnd.ms-powerpoint.template.macroenabled.12,application/vnd.ms-powerpoint.presentation.macroenabled.12,application/java-archive,application/vnd.rn-realmedia,application/x-spss-sav,application/x-ms-regedit,application/x-ft-windows-registry-hive,application/x-jmp-data,application/vnd.apple.keynote,application/vnd.apple.numbers,application/vnd.apple.pages`.split(`,`),maximumUntrustedSkipSizeInBytes=16*1024*1024;var ParserHardLimitError=class extends Error{};function getSafeBound(e,t,S){if(!Number.isFinite(e)||e<0||e>t)throw new ParserHardLimitError(`${S} has invalid size ${e} (maximum ${t} bytes)`);return e}async function safeIgnore(e,t,{maximumLength:S=maximumUntrustedSkipSizeInBytes,reason:w=`skip`}={}){let E=getSafeBound(t,S,w);await e.ignore(E)}async function safeReadBuffer(e,t,S,{maximumLength:w=t.length,reason:E=`read`}={}){let D=getSafeBound(S?.length??t.length,w,E);return e.readBuffer(t,{...S,length:D})}function checkBytes(e,t,S){S={offset:0,...S};for(let[w,E]of t.entries())if(S.mask){if(E!==(S.mask[w]&e[w+S.offset]))return!1}else if(E!==e[w+S.offset])return!1;return!0}function hasUnknownFileSize(e){let t=e.fileInfo.size;return!Number.isFinite(t)||t===2**53-1}function hasExceededUnknownSizeScanBudget(e,t,S){return hasUnknownFileSize(e)&&e.position-t>S}const maximumZipEntrySizeInBytes=1024*1024,maximumZipEntryCount=1024,maximumZipBufferedReadSizeInBytes=2**31-1,maximumZipTextEntrySizeInBytes=maximumZipEntrySizeInBytes,recoverableZipErrorMessages=new Set([`Unexpected signature`,`Encrypted ZIP`,`Expected Central-File-Header signature`]),recoverableZipErrorMessagePrefixes=[`ZIP entry count exceeds `,`Unsupported ZIP compression method:`,`ZIP entry compressed data exceeds `,`ZIP entry decompressed data exceeds `,`Expected data-descriptor-signature at position `],recoverableZipErrorCodes=new Set([`Z_BUF_ERROR`,`Z_DATA_ERROR`,`ERR_INVALID_STATE`]);async function decompressDeflateRawWithLimit(e,{maximumLength:t=maximumZipEntrySizeInBytes}={}){let S=new ReadableStream({start(t){t.enqueue(e),t.close()}}).pipeThrough(new DecompressionStream(`deflate-raw`)).getReader(),w=[],E=0;try{for(;;){let{done:e,value:D}=await S.read();if(e)break;if(E+=D.length,E>t)throw await S.cancel(),Error(`ZIP entry decompressed data exceeds ${t} bytes`);w.push(D)}}finally{S.releaseLock()}let D=new Uint8Array(E),O=0;for(let e of w)D.set(e,O),O+=e.length;return D}function mergeByteChunks(e,t){let S=new Uint8Array(t),w=0;for(let t of e)S.set(t,w),w+=t.length;return S}function getMaximumZipBufferedReadLength(e){let t=e.fileInfo.size,S=Number.isFinite(t)?Math.max(0,t-e.position):2**53-1;return Math.min(S,maximumZipBufferedReadSizeInBytes)}function isRecoverableZipError(e){if(e instanceof EndOfStreamError||e instanceof ParserHardLimitError)return!0;if(!(e instanceof Error))return!1;if(recoverableZipErrorMessages.has(e.message)||recoverableZipErrorCodes.has(e.code))return!0;for(let t of recoverableZipErrorMessagePrefixes)if(e.message.startsWith(t))return!0;return!1}function canReadZipEntryForDetection(e,t=maximumZipEntrySizeInBytes){let S=[e.compressedSize,e.uncompressedSize];for(let e of S)if(!Number.isFinite(e)||e<0||e>t)return!1;return!0}function createIWorkZipDetectionState(){return{hasDocumentEntry:!1,hasMasterSlideEntry:!1,hasTablesEntry:!1,hasCalculationEngineEntry:!1}}function updateIWorkZipDetectionStateFromFilename(e,t){t===`Index/Document.iwa`&&(e.hasDocumentEntry=!0),t.startsWith(`Index/MasterSlide`)&&(e.hasMasterSlideEntry=!0),t.startsWith(`Index/Tables/`)&&(e.hasTablesEntry=!0),t===`Index/CalculationEngine.iwa`&&(e.hasCalculationEngineEntry=!0)}function getIWorkFileTypeFromZipEntries(e){if(e.hasDocumentEntry)return e.hasMasterSlideEntry?{ext:`key`,mime:`application/vnd.apple.keynote`}:e.hasTablesEntry?{ext:`numbers`,mime:`application/vnd.apple.numbers`}:{ext:`pages`,mime:`application/vnd.apple.pages`}}function getFileTypeFromMimeType(e){switch(e=e.toLowerCase(),e){case`application/epub+zip`:return{ext:`epub`,mime:e};case`application/vnd.oasis.opendocument.text`:return{ext:`odt`,mime:e};case`application/vnd.oasis.opendocument.text-template`:return{ext:`ott`,mime:e};case`application/vnd.oasis.opendocument.spreadsheet`:return{ext:`ods`,mime:e};case`application/vnd.oasis.opendocument.spreadsheet-template`:return{ext:`ots`,mime:e};case`application/vnd.oasis.opendocument.presentation`:return{ext:`odp`,mime:e};case`application/vnd.oasis.opendocument.presentation-template`:return{ext:`otp`,mime:e};case`application/vnd.oasis.opendocument.graphics`:return{ext:`odg`,mime:e};case`application/vnd.oasis.opendocument.graphics-template`:return{ext:`otg`,mime:e};case`application/vnd.openxmlformats-officedocument.presentationml.slideshow`:return{ext:`ppsx`,mime:e};case`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`:return{ext:`xlsx`,mime:e};case`application/vnd.ms-excel.sheet.macroenabled`:return{ext:`xlsm`,mime:`application/vnd.ms-excel.sheet.macroenabled.12`};case`application/vnd.openxmlformats-officedocument.spreadsheetml.template`:return{ext:`xltx`,mime:e};case`application/vnd.ms-excel.template.macroenabled`:return{ext:`xltm`,mime:`application/vnd.ms-excel.template.macroenabled.12`};case`application/vnd.ms-powerpoint.slideshow.macroenabled`:return{ext:`ppsm`,mime:`application/vnd.ms-powerpoint.slideshow.macroenabled.12`};case`application/vnd.openxmlformats-officedocument.wordprocessingml.document`:return{ext:`docx`,mime:e};case`application/vnd.ms-word.document.macroenabled`:return{ext:`docm`,mime:`application/vnd.ms-word.document.macroenabled.12`};case`application/vnd.openxmlformats-officedocument.wordprocessingml.template`:return{ext:`dotx`,mime:e};case`application/vnd.ms-word.template.macroenabledtemplate`:return{ext:`dotm`,mime:`application/vnd.ms-word.template.macroenabled.12`};case`application/vnd.openxmlformats-officedocument.presentationml.template`:return{ext:`potx`,mime:e};case`application/vnd.ms-powerpoint.template.macroenabled`:return{ext:`potm`,mime:`application/vnd.ms-powerpoint.template.macroenabled.12`};case`application/vnd.openxmlformats-officedocument.presentationml.presentation`:return{ext:`pptx`,mime:e};case`application/vnd.ms-powerpoint.presentation.macroenabled`:return{ext:`pptm`,mime:`application/vnd.ms-powerpoint.presentation.macroenabled.12`};case`application/vnd.ms-visio.drawing`:return{ext:`vsdx`,mime:`application/vnd.visio`};case`application/vnd.ms-package.3dmanufacturing-3dmodel+xml`:return{ext:`3mf`,mime:`model/3mf`};default:}}function createOpenXmlZipDetectionState(){return{hasContentTypesEntry:!1,hasParsedContentTypesEntry:!1,isParsingContentTypes:!1,hasUnparseableContentTypes:!1,hasWordDirectory:!1,hasPresentationDirectory:!1,hasSpreadsheetDirectory:!1,hasThreeDimensionalModelEntry:!1}}function updateOpenXmlZipDetectionStateFromFilename(e,t){t.startsWith(`word/`)&&(e.hasWordDirectory=!0),t.startsWith(`ppt/`)&&(e.hasPresentationDirectory=!0),t.startsWith(`xl/`)&&(e.hasSpreadsheetDirectory=!0),t.startsWith(`3D/`)&&t.endsWith(`.model`)&&(e.hasThreeDimensionalModelEntry=!0)}function getOpenXmlFileTypeFromDirectoryNames(e){if(e.hasWordDirectory)return{ext:`docx`,mime:`application/vnd.openxmlformats-officedocument.wordprocessingml.document`};if(e.hasPresentationDirectory)return{ext:`pptx`,mime:`application/vnd.openxmlformats-officedocument.presentationml.presentation`};if(e.hasSpreadsheetDirectory)return{ext:`xlsx`,mime:`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`};if(e.hasThreeDimensionalModelEntry)return{ext:`3mf`,mime:`model/3mf`}}function getOpenXmlFileTypeFromZipEntries(e){if(!(!e.hasContentTypesEntry||e.hasUnparseableContentTypes||e.isParsingContentTypes||e.hasParsedContentTypesEntry))return getOpenXmlFileTypeFromDirectoryNames(e)}function getOpenXmlMimeTypeFromContentTypesXml(e){let t=e.indexOf(`.main+xml"`);if(t===-1){let t=`application/vnd.ms-package.3dmanufacturing-3dmodel+xml`;return e.includes(`ContentType="${t}"`)?t:void 0}let S=e.slice(0,t),w=S.lastIndexOf(`"`);return S.slice(w+1)}const zipDataDescriptorSignature=134695760,zipDataDescriptorLengthInBytes=16,zipDataDescriptorOverlapLengthInBytes=zipDataDescriptorLengthInBytes-1;function findZipDataDescriptorOffset(e,t){if(e.length<zipDataDescriptorLengthInBytes)return-1;let S=e.length-zipDataDescriptorLengthInBytes;for(let w=0;w<=S;w++)if(UINT32_LE.get(e,w)===zipDataDescriptorSignature&&UINT32_LE.get(e,w+8)===t+w)return w;return-1}async function readZipDataDescriptorEntryWithLimit(e,{shouldBuffer:t,maximumLength:S=maximumZipEntrySizeInBytes}={}){let{syncBuffer:w}=e,{length:E}=w,D=[],O=0;for(;;){let k=await e.tokenizer.peekBuffer(w,{mayBeLess:!0}),j=findZipDataDescriptorOffset(w.subarray(0,k),O),F=j>=0?0:k===E?Math.min(zipDataDescriptorOverlapLengthInBytes,k-1):0,L=j>=0?j:k-F;if(L===0)break;if(O+=L,O>S)throw Error(`ZIP entry compressed data exceeds ${S} bytes`);if(t){let t=new Uint8Array(L);await e.tokenizer.readBuffer(t),D.push(t)}else await e.tokenizer.ignore(L);if(j>=0)break}if(hasUnknownFileSize(e.tokenizer)||(e.knownSizeDescriptorScannedBytes+=O),t)return mergeByteChunks(D,O)}function getRemainingZipScanBudget(e,t){return hasUnknownFileSize(e.tokenizer)?Math.max(0,maximumUntrustedSkipSizeInBytes-(e.tokenizer.position-t)):Math.max(0,maximumZipEntrySizeInBytes-e.knownSizeDescriptorScannedBytes)}async function readZipEntryData(e,t,{shouldBuffer:S,maximumDescriptorLength:w=maximumZipEntrySizeInBytes}={}){if(t.dataDescriptor&&t.compressedSize===0)return readZipDataDescriptorEntryWithLimit(e,{shouldBuffer:S,maximumLength:w});if(!S){await safeIgnore(e.tokenizer,t.compressedSize,{maximumLength:hasUnknownFileSize(e.tokenizer)?maximumZipEntrySizeInBytes:e.tokenizer.fileInfo.size,reason:`ZIP entry compressed data`});return}let E=getMaximumZipBufferedReadLength(e.tokenizer);if(!Number.isFinite(t.compressedSize)||t.compressedSize<0||t.compressedSize>E)throw Error(`ZIP entry compressed data exceeds ${E} bytes`);let D=new Uint8Array(t.compressedSize);return await e.tokenizer.readBuffer(D),D}ZipHandler.prototype.inflate=async function(e,t,S){if(e.compressedMethod===0)return S(t);if(e.compressedMethod!==8)throw Error(`Unsupported ZIP compression method: ${e.compressedMethod}`);return S(await decompressDeflateRawWithLimit(t,{maximumLength:maximumZipEntrySizeInBytes}))},ZipHandler.prototype.unzip=async function(e){let t=!1,S=0,w=this.tokenizer.position;this.knownSizeDescriptorScannedBytes=0;do{if(hasExceededUnknownSizeScanBudget(this.tokenizer,w,16777216))throw new ParserHardLimitError(`ZIP stream probing exceeds ${maximumUntrustedSkipSizeInBytes} bytes`);let E=await this.readLocalFileHeader();if(!E)break;if(S++,S>maximumZipEntryCount)throw Error(`ZIP entry count exceeds ${maximumZipEntryCount}`);let D=e(E);t=!!D.stop,await this.tokenizer.ignore(E.extraFieldLength);let O=await readZipEntryData(this,E,{shouldBuffer:!!D.handler,maximumDescriptorLength:Math.min(maximumZipEntrySizeInBytes,getRemainingZipScanBudget(this,w))});if(D.handler&&await this.inflate(E,O,D.handler),E.dataDescriptor){let e=new Uint8Array(zipDataDescriptorLengthInBytes);if(await this.tokenizer.readBuffer(e),UINT32_LE.get(e,0)!==zipDataDescriptorSignature)throw Error(`Expected data-descriptor-signature at position ${this.tokenizer.position-e.length}`)}if(hasExceededUnknownSizeScanBudget(this.tokenizer,w,16777216))throw new ParserHardLimitError(`ZIP stream probing exceeds ${maximumUntrustedSkipSizeInBytes} bytes`)}while(!t)};async function detectZip(e){let t,S=createOpenXmlZipDetectionState(),w=createIWorkZipDetectionState();try{await new ZipHandler(e).unzip(e=>{if(updateOpenXmlZipDetectionStateFromFilename(S,e.filename),updateIWorkZipDetectionStateFromFilename(w,e.filename),w.hasDocumentEntry&&(w.hasMasterSlideEntry||w.hasTablesEntry))return t=getIWorkFileTypeFromZipEntries(w),{stop:!0};let E=e.filename===`[Content_Types].xml`,D=getOpenXmlFileTypeFromZipEntries(S);if(!E&&D)return t=D,{stop:!0};switch(e.filename){case`META-INF/mozilla.rsa`:return t={ext:`xpi`,mime:`application/x-xpinstall`},{stop:!0};case`META-INF/MANIFEST.MF`:return t={ext:`jar`,mime:`application/java-archive`},{stop:!0};case`mimetype`:return canReadZipEntryForDetection(e,maximumZipTextEntrySizeInBytes)?{async handler(e){t=getFileTypeFromMimeType(new TextDecoder(`utf-8`).decode(e).trim())},stop:!0}:{};case`[Content_Types].xml`:return S.hasContentTypesEntry=!0,canReadZipEntryForDetection(e,maximumZipTextEntrySizeInBytes)?(S.isParsingContentTypes=!0,{async handler(e){let w=getOpenXmlMimeTypeFromContentTypesXml(new TextDecoder(`utf-8`).decode(e));w&&(t=getFileTypeFromMimeType(w)),S.hasParsedContentTypesEntry=!0,S.isParsingContentTypes=!1},stop:!0}):(S.hasUnparseableContentTypes=!0,{});default:return/classes\d*\.dex/v.test(e.filename)?(t={ext:`apk`,mime:`application/vnd.android.package-archive`},{stop:!0}):{}}})}catch(e){if(!isRecoverableZipError(e))throw e;S.isParsingContentTypes&&(S.isParsingContentTypes=!1,S.hasUnparseableContentTypes=!0),!t&&e instanceof EndOfStreamError&&!S.hasContentTypesEntry&&(t=getOpenXmlFileTypeFromDirectoryNames(S))}let E=hasUnknownFileSize(e)&&w.hasDocumentEntry&&!w.hasMasterSlideEntry&&!w.hasTablesEntry&&!w.hasCalculationEngineEntry?void 0:getIWorkFileTypeFromZipEntries(w);return t??getOpenXmlFileTypeFromZipEntries(S)??E??{ext:`zip`,mime:`application/zip`}}const maximumEbmlDocumentTypeSizeInBytes=64,maximumEbmlElementPayloadSizeInBytes=1024*1024,maximumEbmlElementCount=256;async function detectEbml(e){async function t(){let t=await e.peekNumber(UINT8),S=128,w=0;for(;(t&S)===0&&S!==0;)++w,S>>=1;let E=new Uint8Array(w+1);return await safeReadBuffer(e,E,void 0,{maximumLength:E.length,reason:`EBML field`}),E}async function S(){let e=await t(),S=await t();S[0]^=128>>S.length-1;let w=Math.min(6,S.length),E=new DataView(e.buffer),D=new DataView(S.buffer,S.length-w,w);return{id:getUintBE(E),len:getUintBE(D)}}async function w(t){let w=0;for(;t>0;){if(w++,w>maximumEbmlElementCount||hasExceededUnknownSizeScanBudget(e,D,16777216))return;let E=e.position,O=await S();if(O.id===17026){if(O.len>maximumEbmlDocumentTypeSizeInBytes)return;let t=getSafeBound(O.len,maximumEbmlDocumentTypeSizeInBytes,`EBML DocType`);return(await e.readToken(new StringType(t))).replaceAll(/\0.*$/gv,``)}if(hasUnknownFileSize(e)&&(!Number.isFinite(O.len)||O.len<0||O.len>maximumEbmlElementPayloadSizeInBytes)||(await safeIgnore(e,O.len,{maximumLength:hasUnknownFileSize(e)?maximumEbmlElementPayloadSizeInBytes:e.fileInfo.size,reason:`EBML payload`}),--t,e.position<=E))return}}let E=await S(),D=e.position;switch(await w(E.len)){case`webm`:return{ext:`webm`,mime:`video/webm`};case`matroska`:return{ext:`mkv`,mime:`video/matroska`};default:}}const maximumPngChunkCount=512,maximumPngStreamScanBudgetInBytes=16*1024*1024,maximumPngChunkSizeInBytes=1024*1024;function isPngAncillaryChunk(e){return(e.codePointAt(0)&32)!=0}async function detectPng(e){let t={ext:`png`,mime:`image/png`},S={ext:`apng`,mime:`image/apng`};await e.ignore(8);async function w(){return{length:await e.readToken(INT32_BE),type:await e.readToken(new StringType(4,`latin1`))}}let E=hasUnknownFileSize(e),D=e.position,O=0,k=!1;do{if(O++,O>maximumPngChunkCount||hasExceededUnknownSizeScanBudget(e,D,maximumPngStreamScanBudgetInBytes))break;let j=e.position,F=await w();if(F.length<0)return;if(F.type===`IHDR`){if(F.length!==13)return;k=!0}switch(F.type){case`IDAT`:return t;case`acTL`:return S;default:if(!k&&F.type!==`CgBI`)return;if(E&&F.length>maximumPngChunkSizeInBytes)return k&&isPngAncillaryChunk(F.type)?t:void 0;try{await safeIgnore(e,F.length+4,{maximumLength:E?maximumPngChunkSizeInBytes+4:e.fileInfo.size,reason:`PNG chunk payload`})}catch(e){if(!E&&(e instanceof ParserHardLimitError||e instanceof EndOfStreamError))return t;throw e}}if(e.position<=j)break}while(e.position+8<e.fileInfo.size);return t}const maximumAsfHeaderObjectCount=512,maximumAsfHeaderPayloadSizeInBytes=1024*1024;async function detectAsf(e){let t=!1;try{async function S(){let t=new Uint8Array(16);return await safeReadBuffer(e,t,void 0,{maximumLength:t.length,reason:`ASF header GUID`}),{id:t,size:Number(await e.readToken(UINT64_LE))}}await safeIgnore(e,30,{maximumLength:30,reason:`ASF header prelude`});let w=hasUnknownFileSize(e),E=e.position,D=0;for(;e.position+24<e.fileInfo.size&&(D++,!(D>maximumAsfHeaderObjectCount||hasExceededUnknownSizeScanBudget(e,E,16777216)));){let E=e.position,D=await S(),O=D.size-24;if(!Number.isFinite(O)||O<0){t=!0;break}if(checkBytes(D.id,[145,7,220,183,183,169,207,17,142,230,0,192,12,32,83,101])){let t=new Uint8Array(16);if(O-=await safeReadBuffer(e,t,void 0,{maximumLength:t.length,reason:`ASF stream type GUID`}),checkBytes(t,[64,158,105,248,77,91,207,17,168,253,0,128,95,92,68,43]))return{ext:`asf`,mime:`audio/x-ms-asf`};if(checkBytes(t,[192,239,25,188,77,91,207,17,168,253,0,128,95,92,68,43]))return{ext:`asf`,mime:`video/x-ms-asf`};break}if(w&&O>maximumAsfHeaderPayloadSizeInBytes){t=!0;break}if(await safeIgnore(e,O,{maximumLength:w?maximumAsfHeaderPayloadSizeInBytes:e.fileInfo.size,reason:`ASF header payload`}),e.position<=E){t=!0;break}}}catch(S){if(S instanceof EndOfStreamError||S instanceof ParserHardLimitError)hasUnknownFileSize(e)&&(t=!0);else throw S}if(!t)return{ext:`asf`,mime:`application/vnd.ms-asf`}}const reasonableDetectionSizeInBytes=4100,maximumMpegOffsetTolerance=reasonableDetectionSizeInBytes-2,maximumNestedGzipDetectionSizeInBytes=maximumUntrustedSkipSizeInBytes,maximumNestedGzipProbeDepth=1,unknownSizeGzipProbeTimeoutInMilliseconds=100,maximumId3HeaderSizeInBytes=maximumUntrustedSkipSizeInBytes,maximumTiffTagCount=512,maximumDetectionReentryCount=256,maximumTiffStreamIfdOffsetInBytes=1024*1024,maximumTiffIfdOffsetInBytes=maximumUntrustedSkipSizeInBytes;function normalizeSampleSize(e){return Number.isFinite(e)?Math.max(1,Math.trunc(e)):reasonableDetectionSizeInBytes}function normalizeMpegOffsetTolerance(e){return Number.isFinite(e)?Math.max(0,Math.min(maximumMpegOffsetTolerance,Math.trunc(e))):0}function getKnownFileSizeOrMaximum(e){return Number.isFinite(e)?Math.max(0,e):2**53-1}function importAtRuntime(e){return import(e)}function toDefaultStream(e){return e.pipeThrough(new TransformStream)}function readWithSignal(e,t){return t===void 0?e.read():(t.throwIfAborted(),Promise.race([e.read(),new Promise((S,w)=>{t.addEventListener(`abort`,()=>{w(t.reason),e.cancel(t.reason).catch(()=>{})},{once:!0})})]))}function createByteLimitedReadableStream(e,t){let S=e.getReader(),w=0,E=!1,D=!1,O=async e=>{E||D||(D=!0,await S.cancel(e))};return new ReadableStream({async pull(e){if(w>=t){e.close(),await O();return}let{done:D,value:k}=await S.read();if(D||!k){E=!0,e.close();return}let j=t-w;if(k.length>j){e.enqueue(k.subarray(0,j)),w+=j,e.close(),await O();return}e.enqueue(k),w+=k.length},async cancel(e){await O(e)}})}var FileTypeParser=class e{constructor(e){let t=normalizeMpegOffsetTolerance(e?.mpegOffsetTolerance);this.options={...e,mpegOffsetTolerance:t},this.detectors=[...this.options.customDetectors??[],{id:`core`,detect:this.detectConfident},{id:`core.imprecise`,detect:this.detectImprecise}],this.tokenizerOptions={abortSignal:this.options.signal},this.gzipProbeDepth=0}getTokenizerOptions(){return{...this.tokenizerOptions}}createTokenizerFromWebStream(e){return fromWebStream(toDefaultStream(e),this.getTokenizerOptions())}async parseTokenizer(e,t=0){this.detectionReentryCount=t;let S=e.position;for(let t of this.detectors){let w;try{w=await t.detect(e)}catch(e){if(e instanceof EndOfStreamError||e instanceof ParserHardLimitError)return;throw e}if(w)return w;if(S!==e.position)return}}async fromTokenizer(e){try{return await this.parseTokenizer(e)}finally{await e.close()}}async fromBuffer(e){if(!(e instanceof Uint8Array||e instanceof ArrayBuffer))throw TypeError(`Expected the \`input\` argument to be of type \`Uint8Array\` or \`ArrayBuffer\`, got \`${typeof e}\``);let t=e instanceof Uint8Array?e:new Uint8Array(e);if(t?.length>1)return this.fromTokenizer(fromBuffer(t,this.getTokenizerOptions()))}async fromBlob(e){this.options.signal?.throwIfAborted();let t=fromBlob(e,this.getTokenizerOptions());return this.fromTokenizer(t)}async fromStream(e){this.options.signal?.throwIfAborted();let t=this.createTokenizerFromWebStream(e);return this.fromTokenizer(t)}async fromFile(e){this.options.signal?.throwIfAborted();let[{default:t},{FileTokenizer:S}]=await Promise.all([importAtRuntime(`node:fs/promises`),importAtRuntime(`strtok3`)]),w=await t.open(e,t.constants.O_RDONLY|t.constants.O_NONBLOCK),E=await w.stat();if(!E.isFile()){await w.close();return}let D=new S(w,{...this.getTokenizerOptions(),fileInfo:{path:e,size:E.size}});return this.fromTokenizer(D)}async toDetectionStream(e,t){this.options.signal?.throwIfAborted();let S=normalizeSampleSize(t?.sampleSize??4100),w,E=!1,D=e.getReader(),O=[],k=0;try{for(;k<S;){let{value:e,done:t}=await readWithSignal(D,this.options.signal);if(t||!e){E=!0;break}O.push(e),k+=e.length}if(!E&&k===S){let{value:e,done:t}=await readWithSignal(D,this.options.signal);t||!e?E=!0:(O.push(e),k+=e.length)}}finally{D.releaseLock()}if(k>0){let e=O.length===1?O[0]:concatUint8Arrays(O);try{w=await this.fromBuffer(e.subarray(0,S))}catch(e){if(!(e instanceof EndOfStreamError))throw e;w=void 0}!E&&w?.ext===`pages`&&(w={ext:`zip`,mime:`application/zip`})}let j=new TransformStream({start(e){for(let t of O)e.enqueue(t)},transform(e,t){t.enqueue(e)}}),F=e.pipeThrough(j);return F.fileType=w,F}async detectGzip(t){if(this.gzipProbeDepth>=maximumNestedGzipProbeDepth)return{ext:`gz`,mime:`application/gzip`};let S=createByteLimitedReadableStream(new GzipHandler(t).inflate(),maximumNestedGzipDetectionSizeInBytes),w=hasUnknownFileSize(t),E,D,O,k;if(w){let t=new AbortController;E=setTimeout(()=>{t.abort(new DOMException(`Operation timed out after ${unknownSizeGzipProbeTimeoutInMilliseconds} ms`,`TimeoutError`))},unknownSizeGzipProbeTimeoutInMilliseconds),D=this.options.signal===void 0?t.signal:AbortSignal.any([this.options.signal,t.signal]),O=new e({...this.options,signal:D}),O.gzipProbeDepth=this.gzipProbeDepth+1}else this.gzipProbeDepth++;try{k=await(O??this).fromStream(S)}catch(e){if(e?.name===`AbortError`&&D?.reason?.name!==`TimeoutError`)throw e}finally{clearTimeout(E),w||this.gzipProbeDepth--}return k?.ext===`tar`?{ext:`tar.gz`,mime:`application/gzip`}:{ext:`gz`,mime:`application/gzip`}}check(e,t){return checkBytes(this.buffer,e,t)}checkString(e,t){return this.check(stringToBytes(e,t?.encoding),t)}detectConfident=async e=>{if(this.buffer=new Uint8Array(reasonableDetectionSizeInBytes),e.fileInfo.size===void 0&&(e.fileInfo.size=2**53-1),this.tokenizer=e,hasUnknownFileSize(e)&&(await e.peekBuffer(this.buffer,{length:3,mayBeLess:!0}),this.check([31,139,8])))return this.detectGzip(e);if(await e.peekBuffer(this.buffer,{length:32,mayBeLess:!0}),this.check([66,77]))return{ext:`bmp`,mime:`image/bmp`};if(this.check([11,119]))return{ext:`ac3`,mime:`audio/vnd.dolby.dd-raw`};if(this.check([120,1]))return{ext:`dmg`,mime:`application/x-apple-diskimage`};if(this.check([77,90]))return{ext:`exe`,mime:`application/x-msdownload`};if(this.check([37,33]))return await e.peekBuffer(this.buffer,{length:24,mayBeLess:!0}),this.checkString(`PS-Adobe-`,{offset:2})&&this.checkString(` EPSF-`,{offset:14})?{ext:`eps`,mime:`application/eps`}:{ext:`ps`,mime:`application/postscript`};if(this.check([31,160])||this.check([31,157]))return{ext:`Z`,mime:`application/x-compress`};if(this.check([199,113]))return{ext:`cpio`,mime:`application/x-cpio`};if(this.check([96,234]))return{ext:`arj`,mime:`application/x-arj`};if(this.check([239,187,191]))return this.detectionReentryCount>=maximumDetectionReentryCount?void 0:(this.detectionReentryCount++,await this.tokenizer.ignore(3),this.detectConfident(e));if(this.check([71,73,70]))return{ext:`gif`,mime:`image/gif`};if(this.check([73,73,188]))return{ext:`jxr`,mime:`image/vnd.ms-photo`};if(this.check([31,139,8]))return this.detectGzip(e);if(this.check([66,90,104]))return{ext:`bz2`,mime:`application/x-bzip2`};if(this.checkString(`ID3`)){await safeIgnore(e,6,{maximumLength:6,reason:`ID3 header prefix`});let t=await e.readToken(uint32SyncSafeToken),S=hasUnknownFileSize(e);if(!Number.isFinite(t)||t<0||S&&(t>maximumId3HeaderSizeInBytes||e.position+t>maximumId3HeaderSizeInBytes))return;if(e.position+t>e.fileInfo.size)return S?void 0:{ext:`mp3`,mime:`audio/mpeg`};try{await safeIgnore(e,t,{maximumLength:S?maximumId3HeaderSizeInBytes:e.fileInfo.size,reason:`ID3 payload`})}catch(e){if(e instanceof EndOfStreamError)return;throw e}return this.detectionReentryCount>=maximumDetectionReentryCount?void 0:(this.detectionReentryCount++,this.parseTokenizer(e,this.detectionReentryCount))}if(this.checkString(`MP+`))return{ext:`mpc`,mime:`audio/x-musepack`};if((this.buffer[0]===67||this.buffer[0]===70)&&this.check([87,83],{offset:1}))return{ext:`swf`,mime:`application/x-shockwave-flash`};if(this.check([255,216,255]))return this.check([247],{offset:3})?{ext:`jls`,mime:`image/jls`}:{ext:`jpg`,mime:`image/jpeg`};if(this.check([79,98,106,1]))return{ext:`avro`,mime:`application/avro`};if(this.checkString(`FLIF`))return{ext:`flif`,mime:`image/flif`};if(this.checkString(`8BPS`))return{ext:`psd`,mime:`image/vnd.adobe.photoshop`};if(this.checkString(`MPCK`))return{ext:`mpc`,mime:`audio/x-musepack`};if(this.checkString(`FORM`))return{ext:`aif`,mime:`audio/aiff`};if(this.checkString(`icns`,{offset:0}))return{ext:`icns`,mime:`image/icns`};if(this.check([80,75,3,4]))return detectZip(e);if(this.checkString(`OggS`)){await e.ignore(28);let t=new Uint8Array(8);return await e.readBuffer(t),checkBytes(t,[79,112,117,115,72,101,97,100])?{ext:`opus`,mime:`audio/ogg; codecs=opus`}:checkBytes(t,[128,116,104,101,111,114,97])?{ext:`ogv`,mime:`video/ogg`}:checkBytes(t,[1,118,105,100,101,111,0])?{ext:`ogm`,mime:`video/ogg`}:checkBytes(t,[127,70,76,65,67])?{ext:`oga`,mime:`audio/ogg`}:checkBytes(t,[83,112,101,101,120,32,32])?{ext:`spx`,mime:`audio/ogg`}:checkBytes(t,[1,118,111,114,98,105,115])?{ext:`ogg`,mime:`audio/ogg`}:{ext:`ogx`,mime:`application/ogg`}}if(this.check([80,75])&&(this.buffer[2]===3||this.buffer[2]===5||this.buffer[2]===7)&&(this.buffer[3]===4||this.buffer[3]===6||this.buffer[3]===8))return{ext:`zip`,mime:`application/zip`};if(this.checkString(`MThd`))return{ext:`mid`,mime:`audio/midi`};if(this.checkString(`wOFF`)&&(this.check([0,1,0,0],{offset:4})||this.checkString(`OTTO`,{offset:4})))return{ext:`woff`,mime:`font/woff`};if(this.checkString(`wOF2`)&&(this.check([0,1,0,0],{offset:4})||this.checkString(`OTTO`,{offset:4})))return{ext:`woff2`,mime:`font/woff2`};if(this.check([212,195,178,161])||this.check([161,178,195,212]))return{ext:`pcap`,mime:`application/vnd.tcpdump.pcap`};if(this.checkString(`DSD `))return{ext:`dsf`,mime:`audio/x-dsf`};if(this.checkString(`LZIP`))return{ext:`lz`,mime:`application/lzip`};if(this.checkString(`fLaC`))return{ext:`flac`,mime:`audio/flac`};if(this.check([66,80,71,251]))return{ext:`bpg`,mime:`image/bpg`};if(this.checkString(`wvpk`))return{ext:`wv`,mime:`audio/wavpack`};if(this.checkString(`%PDF`))return{ext:`pdf`,mime:`application/pdf`};if(this.check([0,97,115,109]))return{ext:`wasm`,mime:`application/wasm`};if(this.check([73,73])){let e=await this.readTiffHeader(!1);if(e)return e}if(this.check([77,77])){let e=await this.readTiffHeader(!0);if(e)return e}if(this.checkString(`MAC `))return{ext:`ape`,mime:`audio/ape`};if(this.check([26,69,223,163]))return detectEbml(e);if(this.checkString(`SQLi`))return{ext:`sqlite`,mime:`application/x-sqlite3`};if(this.check([78,69,83,26]))return{ext:`nes`,mime:`application/x-nintendo-nes-rom`};if(this.checkString(`Cr24`))return{ext:`crx`,mime:`application/x-google-chrome-extension`};if(this.checkString(`MSCF`)||this.checkString(`ISc(`))return{ext:`cab`,mime:`application/vnd.ms-cab-compressed`};if(this.check([237,171,238,219]))return{ext:`rpm`,mime:`application/x-rpm`};if(this.check([197,208,211,198]))return{ext:`eps`,mime:`application/eps`};if(this.check([40,181,47,253]))return{ext:`zst`,mime:`application/zstd`};if(this.check([127,69,76,70]))return{ext:`elf`,mime:`application/x-elf`};if(this.check([33,66,68,78]))return{ext:`pst`,mime:`application/vnd.ms-outlook`};if(this.checkString(`PAR1`)||this.checkString(`PARE`))return{ext:`parquet`,mime:`application/vnd.apache.parquet`};if(this.checkString(`ttcf`))return{ext:`ttc`,mime:`font/collection`};if(this.check([254,237,250,206])||this.check([254,237,250,207])||this.check([206,250,237,254])||this.check([207,250,237,254]))return{ext:`macho`,mime:`application/x-mach-binary`};if(this.check([4,34,77,24]))return{ext:`lz4`,mime:`application/x-lz4`};if(this.checkString(`regf`))return{ext:`dat`,mime:`application/x-ft-windows-registry-hive`};if(this.checkString(`$FL2`)||this.checkString(`$FL3`))return{ext:`sav`,mime:`application/x-spss-sav`};if(this.check([79,84,84,79,0]))return{ext:`otf`,mime:`font/otf`};if(this.checkString(`#!AMR`))return{ext:`amr`,mime:`audio/amr`};if(this.checkString(String.raw`{\rtf`))return{ext:`rtf`,mime:`application/rtf`};if(this.check([70,76,86,1]))return{ext:`flv`,mime:`video/x-flv`};if(this.checkString(`IMPM`))return{ext:`it`,mime:`audio/x-it`};if(this.checkString(`-lh0-`,{offset:2})||this.checkString(`-lh1-`,{offset:2})||this.checkString(`-lh2-`,{offset:2})||this.checkString(`-lh3-`,{offset:2})||this.checkString(`-lh4-`,{offset:2})||this.checkString(`-lh5-`,{offset:2})||this.checkString(`-lh6-`,{offset:2})||this.checkString(`-lh7-`,{offset:2})||this.checkString(`-lzs-`,{offset:2})||this.checkString(`-lz4-`,{offset:2})||this.checkString(`-lz5-`,{offset:2})||this.checkString(`-lhd-`,{offset:2}))return{ext:`lzh`,mime:`application/x-lzh-compressed`};if(this.check([0,0,1,186])){if(this.check([33],{offset:4,mask:[241]}))return{ext:`mpg`,mime:`video/MP1S`};if(this.check([68],{offset:4,mask:[196]}))return{ext:`mpg`,mime:`video/MP2P`}}if(this.checkString(`ITSF`))return{ext:`chm`,mime:`application/vnd.ms-htmlhelp`};if(this.check([202,254,186,190])){let e=UINT32_BE.get(this.buffer,4),t=UINT16_BE.get(this.buffer,6);if(e>0&&e<=30)return{ext:`macho`,mime:`application/x-mach-binary`};if(t>30)return{ext:`class`,mime:`application/java-vm`}}if(this.checkString(`.RMF`))return{ext:`rm`,mime:`application/vnd.rn-realmedia`};if(this.checkString(`DRACO`))return{ext:`drc`,mime:`application/x-ft-draco`};if(this.check([253,55,122,88,90,0]))return{ext:`xz`,mime:`application/x-xz`};if(this.checkString(`<?xml `))return{ext:`xml`,mime:`application/xml`};if(this.check([55,122,188,175,39,28]))return{ext:`7z`,mime:`application/x-7z-compressed`};if(this.check([82,97,114,33,26,7])&&(this.buffer[6]===0||this.buffer[6]===1))return{ext:`rar`,mime:`application/x-rar-compressed`};if(this.checkString(`solid `))return{ext:`stl`,mime:`model/stl`};if(this.checkString(`AC`)){let e=new StringType(4,`latin1`).get(this.buffer,2);if(/^\d+$/v.test(e)&&e>=1e3&&e<=1050)return{ext:`dwg`,mime:`image/vnd.dwg`}}if(this.checkString(`070707`))return{ext:`cpio`,mime:`application/x-cpio`};if(this.checkString(`BLENDER`))return{ext:`blend`,mime:`application/x-blender`};if(this.checkString(`!<arch>`))return await e.ignore(8),await e.readToken(new StringType(13,`ascii`))===`debian-binary`?{ext:`deb`,mime:`application/x-deb`}:{ext:`ar`,mime:`application/x-unix-archive`};if(this.checkString(`WEBVTT`)&&[`
470
470
  `,`\r`,` `,` `,`\0`].some(e=>this.checkString(e,{offset:6})))return{ext:`vtt`,mime:`text/vtt`};if(this.check([137,80,78,71,13,10,26,10]))return detectPng(e);if(this.check([65,82,82,79,87,49,0,0]))return{ext:`arrow`,mime:`application/vnd.apache.arrow.file`};if(this.check([103,108,84,70,2,0,0,0]))return{ext:`glb`,mime:`model/gltf-binary`};if(this.check([102,114,101,101],{offset:4})||this.check([109,100,97,116],{offset:4})||this.check([109,111,111,118],{offset:4})||this.check([119,105,100,101],{offset:4}))return{ext:`mov`,mime:`video/quicktime`};if(this.check([73,73,82,79,8,0,0,0,24]))return{ext:`orf`,mime:`image/x-olympus-orf`};if(this.checkString(`gimp xcf `))return{ext:`xcf`,mime:`image/x-xcf`};if(this.checkString(`ftyp`,{offset:4})&&this.buffer[8]&96){let e=new StringType(4,`latin1`).get(this.buffer,8).replace(`\0`,` `).trim();switch(e){case`avif`:case`avis`:return{ext:`avif`,mime:`image/avif`};case`mif1`:return{ext:`heic`,mime:`image/heif`};case`msf1`:return{ext:`heic`,mime:`image/heif-sequence`};case`heic`:case`heix`:return{ext:`heic`,mime:`image/heic`};case`hevc`:case`hevx`:return{ext:`heic`,mime:`image/heic-sequence`};case`qt`:return{ext:`mov`,mime:`video/quicktime`};case`M4V`:case`M4VH`:case`M4VP`:return{ext:`m4v`,mime:`video/x-m4v`};case`M4P`:return{ext:`m4p`,mime:`video/mp4`};case`M4B`:return{ext:`m4b`,mime:`audio/mp4`};case`M4A`:return{ext:`m4a`,mime:`audio/x-m4a`};case`F4V`:return{ext:`f4v`,mime:`video/mp4`};case`F4P`:return{ext:`f4p`,mime:`video/mp4`};case`F4A`:return{ext:`f4a`,mime:`audio/mp4`};case`F4B`:return{ext:`f4b`,mime:`audio/mp4`};case`crx`:return{ext:`cr3`,mime:`image/x-canon-cr3`};default:return e.startsWith(`3g`)?e.startsWith(`3g2`)?{ext:`3g2`,mime:`video/3gpp2`}:{ext:`3gp`,mime:`video/3gpp`}:{ext:`mp4`,mime:`video/mp4`}}}if(this.checkString(`REGEDIT4\r
471
471
  `))return{ext:`reg`,mime:`application/x-ms-regedit`};if(this.check([82,73,70,70])){if(this.checkString(`WEBP`,{offset:8}))return{ext:`webp`,mime:`image/webp`};if(this.check([65,86,73],{offset:8}))return{ext:`avi`,mime:`video/vnd.avi`};if(this.check([87,65,86,69],{offset:8}))return{ext:`wav`,mime:`audio/wav`};if(this.check([81,76,67,77],{offset:8}))return{ext:`qcp`,mime:`audio/qcelp`}}if(this.check([73,73,85,0,24,0,0,0,136,231,116,216]))return{ext:`rw2`,mime:`image/x-panasonic-rw2`};if(this.check([48,38,178,117,142,102,207,17,166,217]))return detectAsf(e);if(this.check([171,75,84,88,32,49,49,187,13,10,26,10]))return{ext:`ktx`,mime:`image/ktx`};if((this.check([126,16,4])||this.check([126,24,4]))&&this.check([48,77,73,69],{offset:4}))return{ext:`mie`,mime:`application/x-mie`};if(this.check([39,10,0,0,0,0,0,0,0,0,0,0],{offset:2}))return{ext:`shp`,mime:`application/x-esri-shape`};if(this.check([255,79,255,81]))return{ext:`j2c`,mime:`image/j2c`};if(this.check([0,0,0,12,106,80,32,32,13,10,135,10]))switch(await e.ignore(20),await e.readToken(new StringType(4,`ascii`))){case`jp2 `:return{ext:`jp2`,mime:`image/jp2`};case`jpx `:return{ext:`jpx`,mime:`image/jpx`};case`jpm `:return{ext:`jpm`,mime:`image/jpm`};case`mjp2`:return{ext:`mj2`,mime:`image/mj2`};default:return}if(this.check([255,10])||this.check([0,0,0,12,74,88,76,32,13,10,135,10]))return{ext:`jxl`,mime:`image/jxl`};if(this.check([254,255]))return this.checkString(`<?xml `,{offset:2,encoding:`utf-16be`})?{ext:`xml`,mime:`application/xml`}:void 0;if(this.check([208,207,17,224,161,177,26,225]))return{ext:`cfb`,mime:`application/x-cfb`};if(await e.peekBuffer(this.buffer,{length:Math.min(256,e.fileInfo.size),mayBeLess:!0}),this.check([97,99,115,112],{offset:36}))return{ext:`icc`,mime:`application/vnd.iccprofile`};if(this.checkString(`**ACE`,{offset:7})&&this.checkString(`**`,{offset:12}))return{ext:`ace`,mime:`application/x-ace-compressed`};if(this.checkString(`BEGIN:`)){if(this.checkString(`VCARD`,{offset:6}))return{ext:`vcf`,mime:`text/vcard`};if(this.checkString(`VCALENDAR`,{offset:6}))return{ext:`ics`,mime:`text/calendar`}}if(this.checkString(`FUJIFILMCCD-RAW`))return{ext:`raf`,mime:`image/x-fujifilm-raf`};if(this.checkString(`Extended Module:`))return{ext:`xm`,mime:`audio/x-xm`};if(this.checkString(`Creative Voice File`))return{ext:`voc`,mime:`audio/x-voc`};if(this.check([4,0,0,0])&&this.buffer.length>=16){let e=new DataView(this.buffer.buffer).getUint32(12,!0);if(e>12&&this.buffer.length>=e+16)try{let t=new TextDecoder().decode(this.buffer.subarray(16,e+16));if(JSON.parse(t).files)return{ext:`asar`,mime:`application/x-asar`}}catch{}}if(this.check([6,14,43,52,2,5,1,1,13,1,2,1,1,2]))return{ext:`mxf`,mime:`application/mxf`};if(this.checkString(`SCRM`,{offset:44}))return{ext:`s3m`,mime:`audio/x-s3m`};if(this.check([71])&&this.check([71],{offset:188})||this.check([71],{offset:4})&&this.check([71],{offset:196}))return{ext:`mts`,mime:`video/mp2t`};if(this.check([66,79,79,75,77,79,66,73],{offset:60}))return{ext:`mobi`,mime:`application/x-mobipocket-ebook`};if(this.check([68,73,67,77],{offset:128}))return{ext:`dcm`,mime:`application/dicom`};if(this.check([76,0,0,0,1,20,2,0,0,0,0,0,192,0,0,0,0,0,0,70]))return{ext:`lnk`,mime:`application/x-ms-shortcut`};if(this.check([98,111,111,107,0,0,0,0,109,97,114,107,0,0,0,0]))return{ext:`alias`,mime:`application/x-ft-apple.alias`};if(this.checkString(`Kaydara FBX Binary \0`))return{ext:`fbx`,mime:`application/x-ft-fbx`};if(this.check([76,80],{offset:34})&&(this.check([0,0,1],{offset:8})||this.check([1,0,2],{offset:8})||this.check([2,0,2],{offset:8})))return{ext:`eot`,mime:`application/vnd.ms-fontobject`};if(this.check([6,6,237,245,216,29,70,229,189,49,239,231,254,116,183,29]))return{ext:`indd`,mime:`application/x-indesign`};if(this.check([255,255,0,0,7,0,0,0,4,0,0,0,1,0,1,0])||this.check([0,0,255,255,0,0,0,7,0,0,0,4,0,1,0,1]))return{ext:`jmp`,mime:`application/x-jmp-data`};if(await e.peekBuffer(this.buffer,{length:Math.min(512,e.fileInfo.size),mayBeLess:!0}),this.checkString(`ustar`,{offset:257})&&(this.checkString(`\0`,{offset:262})||this.checkString(` `,{offset:262}))||this.check([0,0,0,0,0,0],{offset:257})&&tarHeaderChecksumMatches(this.buffer))return{ext:`tar`,mime:`application/x-tar`};if(this.check([255,254])){let e=`utf-16le`;return this.checkString(`<?xml `,{offset:2,encoding:e})?{ext:`xml`,mime:`application/xml`}:this.check([255,14],{offset:2})&&this.checkString(`SketchUp Model`,{offset:4,encoding:e})?{ext:`skp`,mime:`application/vnd.sketchup.skp`}:this.checkString(`Windows Registry Editor Version 5.00\r
472
- `,{offset:2,encoding:e})?{ext:`reg`,mime:`application/x-ms-regedit`}:void 0}if(this.checkString(`-----BEGIN PGP MESSAGE-----`))return{ext:`pgp`,mime:`application/pgp-encrypted`}};detectImprecise=async e=>{this.buffer=new Uint8Array(reasonableDetectionSizeInBytes);let t=getKnownFileSizeOrMaximum(e.fileInfo.size);if(await e.peekBuffer(this.buffer,{length:Math.min(8,t),mayBeLess:!0}),this.check([0,0,1,186])||this.check([0,0,1,179]))return{ext:`mpg`,mime:`video/mpeg`};if(this.check([0,1,0,0,0]))return{ext:`ttf`,mime:`font/ttf`};if(this.check([0,0,1,0]))return{ext:`ico`,mime:`image/x-icon`};if(this.check([0,0,2,0]))return{ext:`cur`,mime:`image/x-icon`};if(await e.peekBuffer(this.buffer,{length:Math.min(2+this.options.mpegOffsetTolerance,t),mayBeLess:!0}),this.buffer.length>=2+this.options.mpegOffsetTolerance)for(let e=0;e<=this.options.mpegOffsetTolerance;++e){let t=this.scanMpeg(e);if(t)return t}};async readTiffTag(e){let t=await this.tokenizer.readToken(e?UINT16_BE:UINT16_LE);switch(await this.tokenizer.ignore(10),t){case 50341:return{ext:`arw`,mime:`image/x-sony-arw`};case 50706:return{ext:`dng`,mime:`image/x-adobe-dng`};default:}}async readTiffIFD(e){let t=await this.tokenizer.readToken(e?UINT16_BE:UINT16_LE);if(!(t>maximumTiffTagCount)&&!(hasUnknownFileSize(this.tokenizer)&&2+t*12>maximumTiffIfdOffsetInBytes))for(let S=0;S<t;++S){let t=await this.readTiffTag(e);if(t)return t}}async readTiffHeader(e){let t={ext:`tif`,mime:`image/tiff`},S=(e?UINT16_BE:UINT16_LE).get(this.buffer,2),w=(e?UINT32_BE:UINT32_LE).get(this.buffer,4);if(S===42){if(w>=6){if(this.checkString(`CR`,{offset:8}))return{ext:`cr2`,mime:`image/x-canon-cr2`};if(w>=8){let t=(e?UINT16_BE:UINT16_LE).get(this.buffer,8),S=(e?UINT16_BE:UINT16_LE).get(this.buffer,10);if(t===28&&S===254||t===31&&S===11)return{ext:`nef`,mime:`image/x-nikon-nef`}}}if(hasUnknownFileSize(this.tokenizer)&&w>maximumTiffStreamIfdOffsetInBytes)return t;let S=hasUnknownFileSize(this.tokenizer)?maximumTiffIfdOffsetInBytes:this.tokenizer.fileInfo.size;try{await safeIgnore(this.tokenizer,w,{maximumLength:S,reason:`TIFF IFD offset`})}catch(e){if(e instanceof EndOfStreamError)return;throw e}let E;try{E=await this.readTiffIFD(e)}catch(e){if(e instanceof EndOfStreamError)return;throw e}return E??t}if(S===43)return t}scanMpeg(e){if(this.check([255,224],{offset:e,mask:[255,224]})){if(this.check([16],{offset:e+1,mask:[22]}))return this.check([8],{offset:e+1,mask:[8]}),{ext:`aac`,mime:`audio/aac`};if(this.check([2],{offset:e+1,mask:[6]}))return{ext:`mp3`,mime:`audio/mpeg`};if(this.check([4],{offset:e+1,mask:[6]}))return{ext:`mp2`,mime:`audio/mpeg`};if(this.check([6],{offset:e+1,mask:[6]}))return{ext:`mp1`,mime:`audio/mpeg`}}}};const supportedExtensions=new Set(extensions),supportedMimeTypes=new Set(mimeTypes);async function fileTypeFromFile(e,t){return new FileTypeParser(t).fromFile(e)}const DEFAULT_FS={writeFile:(e,t,S)=>writeFile(e,t,S),rename:(e,t)=>rename(e,t)};async function atomicWriteFile(e,t,S={}){let w=S.fs??DEFAULT_FS,E=`${e}.tmp.${crypto.randomUUID()}`;try{await w.writeFile(E,t,{encoding:`utf-8`,mode:S.mode??420}),await w.rename(E,e)}catch(e){try{unlinkSync(E)}catch{}throw e}}var FileLockTimeoutError=class extends Error{code=`LOCK_TIMEOUT`;lockPath;timeoutMs;constructor(e,t){super(`Could not acquire file lock at ${e} within ${t}ms`),this.name=`FileLockTimeoutError`,this.lockPath=e,this.timeoutMs=t}};const sleep=e=>new Promise(t=>{setTimeout(t,e)});async function withFileLock(e,t,S={}){let w=S.timeoutMs??5e3,E=S.retryIntervalMs??25,D=w*2,O=Date.now()+w;for(;;){let k;try{k=openSync(e,`wx`,384)}catch(t){if(t.code!==`EEXIST`)throw t;let k=!1;try{let t=statSync(e),w=Date.now()-t.mtimeMs;if(w>D){S.onWarn?.(`cleared stale file lock`,{lockPath:e,ageMs:w,staleThresholdMs:D});try{unlinkSync(e),k=!0}catch{}}}catch{continue}if(k)continue;if(Date.now()>=O)throw new FileLockTimeoutError(e,w);await sleep(E);continue}try{return await t()}finally{try{closeSync(k)}catch{}try{unlinkSync(e)}catch{}}}}const CONFIG_FILENAME=`config.yml`,USER_CONFIG_FILENAME=`global.yml`;function schemaUrl(e){return`https://unpkg.com/@inkeep/open-knowledge@latest/dist/schemas/${CONFIG_SCHEMA_MAJOR_PATH}/${e===`user`?`config.user.schema.json`:e===`project-local`?`config.project-local.schema.json`:`config.project.schema.json`}`}function defaultFirstWriteHeader(e){return`# yaml-language-server: $schema=${schemaUrl(e)}\n`}function resolveConfigPath(e,t,S){if(e===`user`)return resolve(S??homedir(),`.ok`,USER_CONFIG_FILENAME);let w=isAbsolute(t)?t:resolve(t);return e===`project-local`?resolve(w,`.ok`,LOCAL_DIR,CONFIG_FILENAME):resolve(w,`.ok`,CONFIG_FILENAME)}function err(e){return{ok:!1,error:e}}function ok(e){return{ok:!0,...e}}async function writeConfigPatch(e){return withConfigSpan(`config.patch`,{"config.scope":e.scope,"config.transport":`fs`},async t=>{let S=await writeConfigPatchInner(e);return t.setAttribute(`config.outcome`,S.ok?`success`:`rejected`),S.ok||t.setAttribute(`config.error.code`,S.error.code),S})}async function writeConfigPatchInner(e){let{cwd:t,scope:S,patch:w,homedirOverride:E}=e,D=resolveConfigPath(S,t,E),O=validatePatchScopes(w,S);if(O!==null)return err(O);try{await mkdir(dirname(D),{recursive:!0})}catch(e){return err({code:`WRITE_ERROR`,detail:`Could not create parent directory for ${D}: ${e instanceof Error?e.message:String(e)}`})}try{return await withFileLock(`${D}.lock`,()=>writeConfigPatchLocked(e,D))}catch(e){if(e instanceof FileLockTimeoutError)return err({code:`WRITE_ERROR`,detail:e.message});throw e}}async function writeConfigPatchLocked(e,t){let{patch:S,scope:w,firstWriteHeader:E}=e,D=``,O=!1;if(existsSync(t)){O=!0;try{D=readFileSync(t,`utf-8`)}catch(e){return err({code:`WRITE_ERROR`,detail:`Could not read existing config: ${e instanceof Error?e.message:String(e)}`})}}let k=(0,import_dist$1.parseDocument)(D);if(k.errors.length>0)return err({code:`YAML_PARSE`,detail:k.errors.map(e=>e.message).join(`; `)});if(k.contents===null)k.contents=k.createNode({});else if(!(0,import_dist$1.isMap)(k.contents))return err({code:`YAML_PARSE`,detail:`Top-level YAML value must be a mapping (object), got ${(0,import_dist$1.isSeq)(k.contents)?`sequence`:`scalar`}`});let j=applyPatchToDocument(k,S),F=k.toJSON(),L=withConfigSpanSync(`config.validate`,{"config.scope":w,"config.validation.layer":`L2`},e=>{let t=ConfigSchema$1.safeParse(F);if(e.setAttribute(`config.outcome`,t.success?`success`:`rejected`),!t.success)for(let e of t.error.issues)addConfigSpanEvent(`config.validation.issue`,{"issue.path":e.path.map(e=>String(e)).join(`.`),"issue.message":e.message});return t});if(!L.success)return err({code:`SCHEMA_INVALID`,issues:L.error.issues.map(toConfigIssue)});let B=k.toString();if(!O){let e=E===void 0?defaultFirstWriteHeader(w):E??``;e.length>0&&(B=`${e.endsWith(`
472
+ `,{offset:2,encoding:e})?{ext:`reg`,mime:`application/x-ms-regedit`}:void 0}if(this.checkString(`-----BEGIN PGP MESSAGE-----`))return{ext:`pgp`,mime:`application/pgp-encrypted`}};detectImprecise=async e=>{this.buffer=new Uint8Array(reasonableDetectionSizeInBytes);let t=getKnownFileSizeOrMaximum(e.fileInfo.size);if(await e.peekBuffer(this.buffer,{length:Math.min(8,t),mayBeLess:!0}),this.check([0,0,1,186])||this.check([0,0,1,179]))return{ext:`mpg`,mime:`video/mpeg`};if(this.check([0,1,0,0,0]))return{ext:`ttf`,mime:`font/ttf`};if(this.check([0,0,1,0]))return{ext:`ico`,mime:`image/x-icon`};if(this.check([0,0,2,0]))return{ext:`cur`,mime:`image/x-icon`};if(await e.peekBuffer(this.buffer,{length:Math.min(2+this.options.mpegOffsetTolerance,t),mayBeLess:!0}),this.buffer.length>=2+this.options.mpegOffsetTolerance)for(let e=0;e<=this.options.mpegOffsetTolerance;++e){let t=this.scanMpeg(e);if(t)return t}};async readTiffTag(e){let t=await this.tokenizer.readToken(e?UINT16_BE:UINT16_LE);switch(await this.tokenizer.ignore(10),t){case 50341:return{ext:`arw`,mime:`image/x-sony-arw`};case 50706:return{ext:`dng`,mime:`image/x-adobe-dng`};default:}}async readTiffIFD(e){let t=await this.tokenizer.readToken(e?UINT16_BE:UINT16_LE);if(!(t>maximumTiffTagCount)&&!(hasUnknownFileSize(this.tokenizer)&&2+t*12>maximumTiffIfdOffsetInBytes))for(let S=0;S<t;++S){let t=await this.readTiffTag(e);if(t)return t}}async readTiffHeader(e){let t={ext:`tif`,mime:`image/tiff`},S=(e?UINT16_BE:UINT16_LE).get(this.buffer,2),w=(e?UINT32_BE:UINT32_LE).get(this.buffer,4);if(S===42){if(w>=6){if(this.checkString(`CR`,{offset:8}))return{ext:`cr2`,mime:`image/x-canon-cr2`};if(w>=8){let t=(e?UINT16_BE:UINT16_LE).get(this.buffer,8),S=(e?UINT16_BE:UINT16_LE).get(this.buffer,10);if(t===28&&S===254||t===31&&S===11)return{ext:`nef`,mime:`image/x-nikon-nef`}}}if(hasUnknownFileSize(this.tokenizer)&&w>maximumTiffStreamIfdOffsetInBytes)return t;let S=hasUnknownFileSize(this.tokenizer)?maximumTiffIfdOffsetInBytes:this.tokenizer.fileInfo.size;try{await safeIgnore(this.tokenizer,w,{maximumLength:S,reason:`TIFF IFD offset`})}catch(e){if(e instanceof EndOfStreamError)return;throw e}let E;try{E=await this.readTiffIFD(e)}catch(e){if(e instanceof EndOfStreamError)return;throw e}return E??t}if(S===43)return t}scanMpeg(e){if(this.check([255,224],{offset:e,mask:[255,224]})){if(this.check([16],{offset:e+1,mask:[22]}))return this.check([8],{offset:e+1,mask:[8]}),{ext:`aac`,mime:`audio/aac`};if(this.check([2],{offset:e+1,mask:[6]}))return{ext:`mp3`,mime:`audio/mpeg`};if(this.check([4],{offset:e+1,mask:[6]}))return{ext:`mp2`,mime:`audio/mpeg`};if(this.check([6],{offset:e+1,mask:[6]}))return{ext:`mp1`,mime:`audio/mpeg`}}}};const supportedExtensions=new Set(extensions),supportedMimeTypes=new Set(mimeTypes);async function fileTypeFromFile(e,t){return new FileTypeParser(t).fromFile(e)}const STALE_TMP_AGE_MS=3e4,DEFAULT_FS={writeFile:(e,t,S)=>writeFile(e,t,S),rename:(e,t)=>rename(e,t)};async function sweepStaleTmps(e){try{let t=dirname(e),S=`${basename(e)}.tmp.`,w=Date.now()-STALE_TMP_AGE_MS,E=await readdir(t);await Promise.all(E.map(async e=>{if(!e.startsWith(S))return;let E=join(t,e);try{(await stat$1(E)).mtimeMs<w&&await unlink(E)}catch{}}))}catch{}}function sweepStaleTmpsSync(e){try{let t=dirname(e),S=`${basename(e)}.tmp.`,w=Date.now()-STALE_TMP_AGE_MS;for(let e of readdirSync(t)){if(!e.startsWith(S))continue;let E=join(t,e);try{statSync(E).mtimeMs<w&&unlinkSync(E)}catch{}}}catch{}}async function atomicWriteFile(e,t,S={}){await sweepStaleTmps(e);let w=S.fs??DEFAULT_FS,E=`${e}.tmp.${crypto.randomUUID()}`;try{await w.writeFile(E,t,{encoding:`utf-8`,mode:S.mode??420}),await w.rename(E,e)}catch(e){try{unlinkSync(E)}catch{}throw e}}function atomicWriteFileSync(e,t,S={}){sweepStaleTmpsSync(e);let w=`${e}.tmp.${crypto.randomUUID()}`;try{writeFileSync(w,t,{encoding:`utf-8`,mode:S.mode??420}),renameSync(w,e)}catch(e){try{unlinkSync(w)}catch{}throw e}}var FileLockTimeoutError=class extends Error{code=`LOCK_TIMEOUT`;lockPath;timeoutMs;constructor(e,t){super(`Could not acquire file lock at ${e} within ${t}ms`),this.name=`FileLockTimeoutError`,this.lockPath=e,this.timeoutMs=t}};const sleep=e=>new Promise(t=>{setTimeout(t,e)});async function withFileLock(e,t,S={}){let w=S.timeoutMs??5e3,E=S.retryIntervalMs??25,D=w*2,O=Date.now()+w;for(;;){let k;try{k=openSync(e,`wx`,384)}catch(t){if(t.code!==`EEXIST`)throw t;let k;try{let t=statSync(e);k=Date.now()-t.mtimeMs}catch{continue}let j=!1;if(k>D){S.onWarn?.(`cleared stale file lock`,{lockPath:e,ageMs:k,staleThresholdMs:D});try{unlinkSync(e),j=!0}catch{}}if(j)continue;if(Date.now()>=O)throw new FileLockTimeoutError(e,w);await sleep(E);continue}try{return await t()}finally{try{closeSync(k)}catch{}try{unlinkSync(e)}catch{}}}}function sleepSyncBusy(e){let t=Date.now()+e;for(;Date.now()<t;);}function withFileLockSync(e,t,S={}){let w=S.timeoutMs??5e3,E=S.retryIntervalMs??25,D=w*2,O=Date.now()+w;for(;;){let k;try{k=openSync(e,`wx`,384)}catch(t){if(t.code!==`EEXIST`)throw t;let k;try{let t=statSync(e);k=Date.now()-t.mtimeMs}catch{continue}let j=!1;if(k>D){S.onWarn?.(`cleared stale file lock`,{lockPath:e,ageMs:k,staleThresholdMs:D});try{unlinkSync(e),j=!0}catch{}}if(j)continue;if(Date.now()>=O)throw new FileLockTimeoutError(e,w);sleepSyncBusy(E);continue}try{return t()}finally{try{closeSync(k)}catch{}try{unlinkSync(e)}catch{}}}}const CONFIG_FILENAME=`config.yml`,USER_CONFIG_FILENAME=`global.yml`;function schemaUrl(e){return`https://unpkg.com/@inkeep/open-knowledge@latest/dist/schemas/${CONFIG_SCHEMA_MAJOR_PATH}/${e===`user`?`config.user.schema.json`:e===`project-local`?`config.project-local.schema.json`:`config.project.schema.json`}`}function defaultFirstWriteHeader(e){return`# yaml-language-server: $schema=${schemaUrl(e)}\n`}function resolveConfigPath(e,t,S){if(e===`user`)return resolve(S??homedir(),`.ok`,USER_CONFIG_FILENAME);let w=isAbsolute(t)?t:resolve(t);return e===`project-local`?resolve(w,`.ok`,LOCAL_DIR,CONFIG_FILENAME):resolve(w,`.ok`,CONFIG_FILENAME)}function err(e){return{ok:!1,error:e}}function ok(e){return{ok:!0,...e}}async function writeConfigPatch(e){return withConfigSpan(`config.patch`,{"config.scope":e.scope,"config.transport":`fs`},async t=>{let S=await writeConfigPatchInner(e);return t.setAttribute(`config.outcome`,S.ok?`success`:`rejected`),S.ok||t.setAttribute(`config.error.code`,S.error.code),S})}async function writeConfigPatchInner(e){let{cwd:t,scope:S,patch:w,homedirOverride:E}=e,D=resolveConfigPath(S,t,E),O=validatePatchScopes(w,S);if(O!==null)return err(O);try{await mkdir(dirname(D),{recursive:!0})}catch(e){return err({code:`WRITE_ERROR`,detail:`Could not create parent directory for ${D}: ${e instanceof Error?e.message:String(e)}`})}try{return await withFileLock(`${D}.lock`,()=>writeConfigPatchLocked(e,D))}catch(e){if(e instanceof FileLockTimeoutError)return err({code:`WRITE_ERROR`,detail:e.message});throw e}}async function writeConfigPatchLocked(e,t){let{patch:S,scope:w,firstWriteHeader:E}=e,D=``,O=!1;if(existsSync(t)){O=!0;try{D=readFileSync(t,`utf-8`)}catch(e){return err({code:`WRITE_ERROR`,detail:`Could not read existing config: ${e instanceof Error?e.message:String(e)}`})}}let k=(0,import_dist$1.parseDocument)(D);if(k.errors.length>0)return err({code:`YAML_PARSE`,detail:k.errors.map(e=>e.message).join(`; `)});if(k.contents===null)k.contents=k.createNode({});else if(!(0,import_dist$1.isMap)(k.contents))return err({code:`YAML_PARSE`,detail:`Top-level YAML value must be a mapping (object), got ${(0,import_dist$1.isSeq)(k.contents)?`sequence`:`scalar`}`});let j=applyPatchToDocument(k,S),F=k.toJSON(),L=withConfigSpanSync(`config.validate`,{"config.scope":w,"config.validation.layer":`L2`},e=>{let t=ConfigSchema$1.safeParse(F);if(e.setAttribute(`config.outcome`,t.success?`success`:`rejected`),!t.success)for(let e of t.error.issues)addConfigSpanEvent(`config.validation.issue`,{"issue.path":e.path.map(e=>String(e)).join(`.`),"issue.message":e.message});return t});if(!L.success)return err({code:`SCHEMA_INVALID`,issues:L.error.issues.map(toConfigIssue)});let B=k.toString();if(!O){let e=E===void 0?defaultFirstWriteHeader(w):E??``;e.length>0&&(B=`${e.endsWith(`
473
473
  `)?e:`${e}\n`}${B}`)}try{await mkdir(dirname(t),{recursive:!0})}catch(e){return err({code:`WRITE_ERROR`,detail:`Could not create parent directory for ${t}: ${e instanceof Error?e.message:String(e)}`})}try{await atomicWriteFile(t,B)}catch(e){return err({code:`WRITE_ERROR`,detail:`Could not write ${t}: ${e instanceof Error?e.message:String(e)}`})}return ok({effective:L.data,appliedPaths:j,path:t,created:!O})}function buildSchemaInvalidError(e,t,S,w){return e.success?{code:`UNKNOWN`,message:`unexpected success in error path`}:{code:`SCHEMA_INVALID`,issues:e.error.issues.map(e=>{let E=e.path.map(e=>typeof e==`symbol`?String(e):e),D=locateIssue({file:w,source:S,doc:t,path:E});return{path:E,message:e.message,issueCode:e.code,...D===void 0?{}:{source:D}}})}}function attemptSideline(e,t,S){let w=`${e}.invalid-${t.replace(/[:.]/g,`-`)}`;try{return renameSync(e,w),w}catch(t){S(`[config] Could not sideline invalid config file ${e} → ${w}: ${t instanceof Error?t.message:String(t)}. File left in place; using schema defaults.`);return}}function readConfigSafely(e){let{absPath:t,sideline:S=!0,timestamp:w=new Date().toISOString()}=e,E=e.warn??(e=>console.warn(e)),D=ConfigSchema$1.parse({});if(!existsSync(t))return{valid:!0,value:D,source:void 0};let O;try{O=readFileSync(t,`utf-8`)}catch(e){let S=e instanceof Error?e.message:String(e);return E(`[config] Could not read ${t}: ${S}. Using schema defaults.`),{valid:!1,value:D,error:{code:`UNKNOWN`,message:`Read failed: ${S}`}}}let k=(0,import_dist$1.parseDocument)(O);if(k.errors.length>0){let e=k.errors.map(e=>e.message).join(`; `);E(`[config] ${t} contains invalid YAML (${e}). Using schema defaults.`+(S?``:` Pass-through mode: file left in place.`));let O=S?attemptSideline(t,w,E):void 0;return{valid:!1,value:D,error:{code:`YAML_PARSE`,detail:e},...O===void 0?{}:{sidelinedTo:O}}}let j=k.toJSON()??{},F=ConfigSchema$1.safeParse(j);if(!F.success){let e=buildSchemaInvalidError(F,k,O,t);E(`[config] ${t} fails schema validation (${F.error.issues.length} issue(s)). Using schema defaults.`+(S?``:` Pass-through mode: file left in place.`));let j=S?attemptSideline(t,w,E):void 0;return{valid:!1,value:D,error:e,...j===void 0?{}:{sidelinedTo:j}}}return{valid:!0,value:F.data,source:t}}var require_dist$1=__commonJSMin$1(((e,t)=>{function S(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,`default`)?e.default:e}let w=new Int32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function E(e){if(Buffer.isBuffer(e))return e;if(typeof e==`number`)return Buffer.alloc(e);if(typeof e==`string`)return Buffer.from(e);throw Error(`input must be buffer, number, or string, received `+typeof e)}function D(e){let t=E(4);return t.writeInt32BE(e,0),t}function O(e,t){e=E(e),Buffer.isBuffer(t)&&(t=t.readUInt32BE(0));let S=~~t^-1;for(var D=0;D<e.length;D++)S=w[(S^e[D])&255]^S>>>8;return S^-1}function k(){return D(O.apply(null,arguments))}k.signed=function(){return O.apply(null,arguments)},k.unsigned=function(){return O.apply(null,arguments)>>>0},t.exports=S(k)})),require_yazl=__commonJSMin$1((e=>{var t=__require$1(`fs`),S=__require$1(`stream`).Transform,w=__require$1(`stream`).PassThrough,E=__require$1(`zlib`),D=__require$1(`util`),O=__require$1(`events`).EventEmitter,k=__require$1(`events`).errorMonitor,j=require_dist$1();e.ZipFile=F,D.inherits(F,O);function F(){this.outputStream=new w,this.entries=[],this.outputStreamCursor=0,this.ended=!1,this.allDone=!1,this.forceZip64Eocd=!1,this.errored=!1,this.on(k,function(){this.errored=!0})}F.prototype.addFile=function(e,S,w){var E=this;if(S=se(S,!1),w??={},!ee(E)){var D=new ue(S,!1,w);E.entries.push(D),t.stat(e,function(S,O){if(S)return E.emit(`error`,S);if(!O.isFile())return E.emit(`error`,Error(`not a file: `+e));D.uncompressedSize=O.size,w.mtime??D.setLastModDate(O.mtime),w.mode??D.setFileAttributesMode(O.mode),D.setFileDataPumpFunction(function(){var S=t.createReadStream(e);D.state=ue.FILE_DATA_IN_PROGRESS,S.on(`error`,function(e){E.emit(`error`,e)}),H(E,D,S)}),J(E)})}},F.prototype.addReadStream=function(e,t,S){this.addReadStreamLazy(t,S,function(t){t(null,e)})},F.prototype.addReadStreamLazy=function(e,t,S){var w=this;if(typeof t==`function`&&(S=t,t=null),t??={},e=se(e,!1),!ee(w)){var E=new ue(e,!1,t);w.entries.push(E),E.setFileDataPumpFunction(function(){E.state=ue.FILE_DATA_IN_PROGRESS,S(function(e,t){if(e)return w.emit(`error`,e);H(w,E,t)})}),J(w)}},F.prototype.addBuffer=function(e,t,S){var w=this;if(t=se(t,!1),e.length>1073741823)throw Error(`buffer too large: `+e.length+` > 1073741823`);if(S??={},S.size!=null)throw Error(`options.size not allowed`);if(ee(w))return;var D=new ue(t,!1,S);D.uncompressedSize=e.length,D.crc32=j.unsigned(e),D.crcAndFileSizeKnown=!0,w.entries.push(D),D.compressionLevel===0?O(e):E.deflateRaw(e,{level:D.compressionLevel},function(e,t){O(t)});function O(e){D.compressedSize=e.length,D.setFileDataPumpFunction(function(){B(w,e),B(w,D.getDataDescriptor()),D.state=ue.FILE_DATA_DONE,setImmediate(function(){J(w)})}),J(w)}},F.prototype.addEmptyDirectory=function(e,t){var S=this;if(e=se(e,!0),t??={},t.size!=null)throw Error(`options.size not allowed`);if(t.compress!=null)throw Error(`options.compress not allowed`);if(t.compressionLevel!=null)throw Error(`options.compressionLevel not allowed`);if(!ee(S)){var w=new ue(e,!0,t);S.entries.push(w),w.setFileDataPumpFunction(function(){B(S,w.getDataDescriptor()),w.state=ue.FILE_DATA_DONE,J(S)}),J(S)}};var L=Ge([80,75,5,6]);F.prototype.end=function(e,t){if(typeof e==`function`&&(t=e,e=null),e??={},!this.ended&&(this.ended=!0,!this.errored)){if(this.calculatedTotalSizeCallback=t,this.forceZip64Eocd=!!e.forceZip64Format,e.comment){if(typeof e.comment==`string`?this.comment=Ue(e.comment):this.comment=e.comment,this.comment.length>65535)throw Error(`comment is too large`);if(Ke(this.comment,L))throw Error(`comment contains end of central directory record signature`)}else this.comment=ce;J(this)}};function B(e,t){e.outputStream.write(t),e.outputStreamCursor+=t.length}function H(e,t,S){var D=new ze,O=new Re,k=t.compressionLevel===0?new w:new E.DeflateRaw({level:t.compressionLevel}),j=new Re;S.pipe(D).pipe(O).pipe(k).pipe(j).pipe(e.outputStream,{end:!1}),j.on(`end`,function(){if(t.crc32=D.crc32,t.uncompressedSize==null)t.uncompressedSize=O.byteCount;else if(t.uncompressedSize!==O.byteCount)return e.emit(`error`,Error(`file data stream has unexpected number of bytes`));t.compressedSize=j.byteCount,e.outputStreamCursor+=t.compressedSize,B(e,t.getDataDescriptor()),t.state=ue.FILE_DATA_DONE,J(e)})}function q(e){if(e.compress!=null&&e.compressionLevel!=null&&!!e.compress!=!!e.compressionLevel)throw Error(`conflicting settings for compress and compressionLevel`);return e.compressionLevel==null?e.compress===!1?0:6:e.compressionLevel}function J(e){if(e.allDone||e.errored)return;if(e.ended&&e.calculatedTotalSizeCallback!=null){var t=Y(e);t!=null&&(e.calculatedTotalSizeCallback(t),e.calculatedTotalSizeCallback=null)}var S=w();function w(){for(var t=0;t<e.entries.length;t++){var S=e.entries[t];if(S.state<ue.FILE_DATA_DONE)return S}return null}if(S!=null){if(S.state<ue.READY_TO_PUMP_FILE_DATA||S.state===ue.FILE_DATA_IN_PROGRESS)return;S.relativeOffsetOfLocalHeader=e.outputStreamCursor,B(e,S.getLocalFileHeader()),S.doFileDataPump()}else e.ended&&(e.offsetOfStartOfCentralDirectory=e.outputStreamCursor,e.entries.forEach(function(t){B(e,t.getCentralDirectoryRecord())}),B(e,oe(e)),e.outputStream.end(),e.allDone=!0)}function Y(e){for(var t=0,S=0,w=0;w<e.entries.length;w++){var E=e.entries[w];if(E.compressionLevel!==0)return-1;if(E.state>=ue.READY_TO_PUMP_FILE_DATA){if(E.uncompressedSize==null)return-1}else if(E.uncompressedSize==null)return null;E.relativeOffsetOfLocalHeader=t;var D=E.useZip64Format();t+=de+E.utf8FileName.length,t+=E.uncompressedSize,E.crcAndFileSizeKnown||(D?t+=Ce:t+=ye),S+=we+E.utf8FileName.length+E.fileComment.length,E.forceDosTimestamp||(S+=Te),D&&(S+=De)}var O=0;return(e.forceZip64Eocd||e.entries.length>=65535||S>=65535||t>=4294967295)&&(O+=te+ne),O+=ae+e.comment.length,t+S+O}function ee(e){if(e.ended)throw Error(`cannot add entries after calling end()`);return!!e.errored}var te=56,ne=20,ae=22;function oe(e,t){var S=!1,w=e.entries.length;(e.forceZip64Eocd||e.entries.length>=65535)&&(w=65535,S=!0);var E=e.outputStreamCursor-e.offsetOfStartOfCentralDirectory,D=E;(e.forceZip64Eocd||E>=4294967295)&&(D=4294967295,S=!0);var O=e.offsetOfStartOfCentralDirectory;if((e.forceZip64Eocd||e.offsetOfStartOfCentralDirectory>=4294967295)&&(O=4294967295,S=!0),t)return S?te+ne+ae:ae;var k=We(ae+e.comment.length);if(k.writeUInt32LE(101010256,0),k.writeUInt16LE(0,4),k.writeUInt16LE(0,6),k.writeUInt16LE(w,8),k.writeUInt16LE(w,10),k.writeUInt32LE(D,12),k.writeUInt32LE(O,16),k.writeUInt16LE(e.comment.length,20),e.comment.copy(k,22),!S)return k;var j=We(te);j.writeUInt32LE(101075792,0),Ie(j,te-12,4),j.writeUInt16LE(ge,12),j.writeUInt16LE(me,14),j.writeUInt32LE(0,16),j.writeUInt32LE(0,20),Ie(j,e.entries.length,24),Ie(j,e.entries.length,32),Ie(j,E,40),Ie(j,e.offsetOfStartOfCentralDirectory,48);var F=We(ne);return F.writeUInt32LE(117853008,0),F.writeUInt32LE(0,4),Ie(F,e.outputStreamCursor,8),F.writeUInt32LE(1,16),Buffer.concat([j,F,k])}function se(e,t){if(e===``)throw Error(`empty metadataPath`);if(e=e.replace(/\\/g,`/`),/^[a-zA-Z]:/.test(e)||/^\//.test(e))throw Error(`absolute path: `+e);if(e.split(`/`).indexOf(`..`)!==-1)throw Error(`invalid relative path: `+e);var S=/\/$/.test(e);if(t)S||(e+=`/`);else if(S)throw Error(`file path cannot end with '/': `+e);return e}var ce=We(0);function ue(e,t,S){if(this.utf8FileName=Ge(e),this.utf8FileName.length>65535)throw Error(`utf8 file name too long. `+utf8FileName.length+` > 65535`);if(this.isDirectory=t,this.state=ue.WAITING_FOR_METADATA,this.setLastModDate(S.mtime==null?new Date:S.mtime),this.forceDosTimestamp=!!S.forceDosTimestamp,S.mode==null?this.setFileAttributesMode(t?16893:33204):this.setFileAttributesMode(S.mode),t?(this.crcAndFileSizeKnown=!0,this.crc32=0,this.uncompressedSize=0,this.compressedSize=0):(this.crcAndFileSizeKnown=!1,this.crc32=null,this.uncompressedSize=null,this.compressedSize=null,S.size!=null&&(this.uncompressedSize=S.size)),t?this.compressionLevel=0:this.compressionLevel=q(S),this.forceZip64Format=!!S.forceZip64Format,S.fileComment){if(typeof S.fileComment==`string`?this.fileComment=Ge(S.fileComment,`utf-8`):this.fileComment=S.fileComment,this.fileComment.length>65535)throw Error(`fileComment is too large`)}else this.fileComment=ce}ue.WAITING_FOR_METADATA=0,ue.READY_TO_PUMP_FILE_DATA=1,ue.FILE_DATA_IN_PROGRESS=2,ue.FILE_DATA_DONE=3,ue.prototype.setLastModDate=function(e){this.mtime=e;var t=Pe(e);this.lastModFileTime=t.time,this.lastModFileDate=t.date},ue.prototype.setFileAttributesMode=function(e){if((e&65535)!==e)throw Error(`invalid mode. expected: 0 <= `+e+` <= 65535`);this.externalFileAttributes=e<<16>>>0},ue.prototype.setFileDataPumpFunction=function(e){this.doFileDataPump=e,this.state=ue.READY_TO_PUMP_FILE_DATA},ue.prototype.useZip64Format=function(){return this.forceZip64Format||this.uncompressedSize!=null&&this.uncompressedSize>4294967294||this.compressedSize!=null&&this.compressedSize>4294967294||this.relativeOffsetOfLocalHeader!=null&&this.relativeOffsetOfLocalHeader>4294967294};var de=30,fe=20,me=45,ge=831,_e=2048,ve=8;ue.prototype.getLocalFileHeader=function(){var e=0,t=0,S=0;this.crcAndFileSizeKnown&&(e=this.crc32,t=this.compressedSize,S=this.uncompressedSize);var w=We(de),E=_e;return this.crcAndFileSizeKnown||(E|=ve),w.writeUInt32LE(67324752,0),w.writeUInt16LE(fe,4),w.writeUInt16LE(E,6),w.writeUInt16LE(this.getCompressionMethod(),8),w.writeUInt16LE(this.lastModFileTime,10),w.writeUInt16LE(this.lastModFileDate,12),w.writeUInt32LE(e,14),w.writeUInt32LE(t,18),w.writeUInt32LE(S,22),w.writeUInt16LE(this.utf8FileName.length,26),w.writeUInt16LE(0,28),Buffer.concat([w,this.utf8FileName])};var ye=16,Ce=24;ue.prototype.getDataDescriptor=function(){if(this.crcAndFileSizeKnown)return ce;if(this.useZip64Format()){var e=We(Ce);return e.writeUInt32LE(134695760,0),e.writeUInt32LE(this.crc32,4),Ie(e,this.compressedSize,8),Ie(e,this.uncompressedSize,16),e}else{var e=We(ye);return e.writeUInt32LE(134695760,0),e.writeUInt32LE(this.crc32,4),e.writeUInt32LE(this.compressedSize,8),e.writeUInt32LE(this.uncompressedSize,12),e}};var we=46,Te=9,De=28;ue.prototype.getCentralDirectoryRecord=function(){var e=We(we),t=_e;this.crcAndFileSizeKnown||(t|=ve);var S=ce;if(!this.forceDosTimestamp){S=We(Te),S.writeUInt16LE(21589,0),S.writeUInt16LE(Te-4,2),S.writeUInt8(3,4);var w=Math.floor(this.mtime.getTime()/1e3);w<-2147483648&&(w=-2147483648),w>2147483647&&(w=2147483647),S.writeUInt32LE(w,5)}var E=this.compressedSize,D=this.uncompressedSize,O=this.relativeOffsetOfLocalHeader,k=fe,j=ce;return this.useZip64Format()&&(E=4294967295,D=4294967295,O=4294967295,k=me,j=We(De),j.writeUInt16LE(1,0),j.writeUInt16LE(De-4,2),Ie(j,this.uncompressedSize,4),Ie(j,this.compressedSize,12),Ie(j,this.relativeOffsetOfLocalHeader,20)),e.writeUInt32LE(33639248,0),e.writeUInt16LE(ge,4),e.writeUInt16LE(k,6),e.writeUInt16LE(t,8),e.writeUInt16LE(this.getCompressionMethod(),10),e.writeUInt16LE(this.lastModFileTime,12),e.writeUInt16LE(this.lastModFileDate,14),e.writeUInt32LE(this.crc32,16),e.writeUInt32LE(E,20),e.writeUInt32LE(D,24),e.writeUInt16LE(this.utf8FileName.length,28),e.writeUInt16LE(S.length+j.length,30),e.writeUInt16LE(this.fileComment.length,32),e.writeUInt16LE(0,34),e.writeUInt16LE(0,36),e.writeUInt32LE(this.externalFileAttributes,38),e.writeUInt32LE(O,42),Buffer.concat([e,this.utf8FileName,S,j,this.fileComment])},ue.prototype.getCompressionMethod=function(){return this.compressionLevel===0?0:8};var je=new Date(1980,0,1),Me=new Date(2107,11,31,23,59,58);function Pe(e){e<je?e=je:e>Me&&(e=Me);var t=0;t|=e.getDate()&31,t|=(e.getMonth()+1&15)<<5,t|=(e.getFullYear()-1980&127)<<9;var S=0;return S|=Math.floor(e.getSeconds()/2),S|=(e.getMinutes()&63)<<5,S|=(e.getHours()&31)<<11,{date:t,time:S}}function Ie(e,t,S){var w=Math.floor(t/4294967296),E=t%4294967296;e.writeUInt32LE(E,S),e.writeUInt32LE(w,S+4)}D.inherits(Re,S);function Re(e){S.call(this,e),this.byteCount=0}Re.prototype._transform=function(e,t,S){this.byteCount+=e.length,S(null,e)},D.inherits(ze,S);function ze(e){S.call(this,e),this.crc32=0}ze.prototype._transform=function(e,t,S){this.crc32=j.unsigned(e,this.crc32),S(null,e)};var Be=`\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0`;if(Be.length!==256)throw Error(`assertion failure`);var Ve=null;function Ue(e){if(/^[\x20-\x7e]*$/.test(e))return Ge(e,`utf-8`);if(Ve==null){Ve={};for(var t=0;t<Be.length;t++)Ve[Be[t]]=t}for(var S=We(e.length),t=0;t<e.length;t++){var w=Ve[e[t]];if(w==null)throw Error(`character not encodable in CP437: `+JSON.stringify(e[t]));S[t]=w}return S}function We(e){We=t;try{return We(e)}catch{return We=S,We(e)}function t(e){return Buffer.allocUnsafe(e)}function S(e){return new Buffer(e)}}function Ge(e,t){Ge=S;try{return Ge(e,t)}catch{return Ge=w,Ge(e,t)}function S(e,t){return Buffer.from(e,t)}function w(e,t){return new Buffer(e,t)}}function Ke(e,t){Ke=S;try{return Ke(e,t)}catch{return Ke=w,Ke(e,t)}function S(e,t){return e.includes(t)}function w(e,t){for(var S=0;S<=e.length-t.length;S++)for(var w=0;;w++){if(w===t.length)return!0;if(e[S+w]!==t[w])break}return!1}}})),util;(function(e){e.assertEqual=e=>{};function t(e){}e.assertIs=t;function S(e){throw Error()}e.assertNever=S,e.arrayToEnum=e=>{let t={};for(let S of e)t[S]=S;return t},e.getValidEnumValues=t=>{let S=e.objectKeys(t).filter(e=>typeof t[t[e]]!=`number`),w={};for(let e of S)w[e]=t[e];return e.objectValues(w)},e.objectValues=t=>e.objectKeys(t).map(function(e){return t[e]}),e.objectKeys=typeof Object.keys==`function`?e=>Object.keys(e):e=>{let t=[];for(let S in e)Object.prototype.hasOwnProperty.call(e,S)&&t.push(S);return t},e.find=(e,t)=>{for(let S of e)if(t(S))return S},e.isInteger=typeof Number.isInteger==`function`?e=>Number.isInteger(e):e=>typeof e==`number`&&Number.isFinite(e)&&Math.floor(e)===e;function w(e,t=` | `){return e.map(e=>typeof e==`string`?`'${e}'`:e).join(t)}e.joinValues=w,e.jsonStringifyReplacer=(e,t)=>typeof t==`bigint`?t.toString():t})(util||={});var objectUtil;(function(e){e.mergeShapes=(e,t)=>({...e,...t})})(objectUtil||={});const ZodParsedType=util.arrayToEnum([`string`,`nan`,`number`,`integer`,`float`,`boolean`,`date`,`bigint`,`symbol`,`function`,`undefined`,`null`,`array`,`object`,`unknown`,`promise`,`void`,`never`,`map`,`set`]),getParsedType=e=>{switch(typeof e){case`undefined`:return ZodParsedType.undefined;case`string`:return ZodParsedType.string;case`number`:return Number.isNaN(e)?ZodParsedType.nan:ZodParsedType.number;case`boolean`:return ZodParsedType.boolean;case`function`:return ZodParsedType.function;case`bigint`:return ZodParsedType.bigint;case`symbol`:return ZodParsedType.symbol;case`object`:return Array.isArray(e)?ZodParsedType.array:e===null?ZodParsedType.null:e.then&&typeof e.then==`function`&&e.catch&&typeof e.catch==`function`?ZodParsedType.promise:typeof Map<`u`&&e instanceof Map?ZodParsedType.map:typeof Set<`u`&&e instanceof Set?ZodParsedType.set:typeof Date<`u`&&e instanceof Date?ZodParsedType.date:ZodParsedType.object;default:return ZodParsedType.unknown}},ZodIssueCode=util.arrayToEnum([`invalid_type`,`invalid_literal`,`custom`,`invalid_union`,`invalid_union_discriminator`,`invalid_enum_value`,`unrecognized_keys`,`invalid_arguments`,`invalid_return_type`,`invalid_date`,`invalid_string`,`too_small`,`too_big`,`invalid_intersection_types`,`not_multiple_of`,`not_finite`]);var ZodError=class e extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name=`ZodError`,this.issues=e}format(e){let t=e||function(e){return e.message},S={_errors:[]},w=e=>{for(let E of e.issues)if(E.code===`invalid_union`)E.unionErrors.map(w);else if(E.code===`invalid_return_type`)w(E.returnTypeError);else if(E.code===`invalid_arguments`)w(E.argumentsError);else if(E.path.length===0)S._errors.push(t(E));else{let e=S,w=0;for(;w<E.path.length;){let S=E.path[w];w===E.path.length-1?(e[S]=e[S]||{_errors:[]},e[S]._errors.push(t(E))):e[S]=e[S]||{_errors:[]},e=e[S],w++}}};return w(this),S}static assert(t){if(!(t instanceof e))throw Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,util.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=e=>e.message){let t=Object.create(null),S=[];for(let w of this.issues)if(w.path.length>0){let S=w.path[0];t[S]=t[S]||[],t[S].push(e(w))}else S.push(e(w));return{formErrors:S,fieldErrors:t}}get formErrors(){return this.flatten()}};ZodError.create=e=>new ZodError(e);const errorMap=(e,t)=>{let S;switch(e.code){case ZodIssueCode.invalid_type:S=e.received===ZodParsedType.undefined?`Required`:`Expected ${e.expected}, received ${e.received}`;break;case ZodIssueCode.invalid_literal:S=`Invalid literal value, expected ${JSON.stringify(e.expected,util.jsonStringifyReplacer)}`;break;case ZodIssueCode.unrecognized_keys:S=`Unrecognized key(s) in object: ${util.joinValues(e.keys,`, `)}`;break;case ZodIssueCode.invalid_union:S=`Invalid input`;break;case ZodIssueCode.invalid_union_discriminator:S=`Invalid discriminator value. Expected ${util.joinValues(e.options)}`;break;case ZodIssueCode.invalid_enum_value:S=`Invalid enum value. Expected ${util.joinValues(e.options)}, received '${e.received}'`;break;case ZodIssueCode.invalid_arguments:S=`Invalid function arguments`;break;case ZodIssueCode.invalid_return_type:S=`Invalid function return type`;break;case ZodIssueCode.invalid_date:S=`Invalid date`;break;case ZodIssueCode.invalid_string:typeof e.validation==`object`?`includes`in e.validation?(S=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position==`number`&&(S=`${S} at one or more positions greater than or equal to ${e.validation.position}`)):`startsWith`in e.validation?S=`Invalid input: must start with "${e.validation.startsWith}"`:`endsWith`in e.validation?S=`Invalid input: must end with "${e.validation.endsWith}"`:util.assertNever(e.validation):S=e.validation===`regex`?`Invalid`:`Invalid ${e.validation}`;break;case ZodIssueCode.too_small:S=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at least`:`more than`} ${e.minimum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at least`:`over`} ${e.minimum} character(s)`:e.type===`number`||e.type===`bigint`?`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`:e.type===`date`?`Date must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${new Date(Number(e.minimum))}`:`Invalid input`;break;case ZodIssueCode.too_big:S=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at most`:`less than`} ${e.maximum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at most`:`under`} ${e.maximum} character(s)`:e.type===`number`?`Number must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`bigint`?`BigInt must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`date`?`Date must be ${e.exact?`exactly`:e.inclusive?`smaller than or equal to`:`smaller than`} ${new Date(Number(e.maximum))}`:`Invalid input`;break;case ZodIssueCode.custom:S=`Invalid input`;break;case ZodIssueCode.invalid_intersection_types:S=`Intersection results could not be merged`;break;case ZodIssueCode.not_multiple_of:S=`Number must be a multiple of ${e.multipleOf}`;break;case ZodIssueCode.not_finite:S=`Number must be finite`;break;default:S=t.defaultError,util.assertNever(e)}return{message:S}};let overrideErrorMap=errorMap;function getErrorMap(){return overrideErrorMap}const makeIssue=e=>{let{data:t,path:S,errorMaps:w,issueData:E}=e,D=[...S,...E.path||[]],O={...E,path:D};if(E.message!==void 0)return{...E,path:D,message:E.message};let k=``,j=w.filter(e=>!!e).slice().reverse();for(let e of j)k=e(O,{data:t,defaultError:k}).message;return{...E,path:D,message:k}};function addIssueToContext(e,t){let S=getErrorMap(),w=makeIssue({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,S,S===errorMap?void 0:errorMap].filter(e=>!!e)});e.common.issues.push(w)}var ParseStatus=class e{constructor(){this.value=`valid`}dirty(){this.value===`valid`&&(this.value=`dirty`)}abort(){this.value!==`aborted`&&(this.value=`aborted`)}static mergeArray(e,t){let S=[];for(let w of t){if(w.status===`aborted`)return INVALID;w.status===`dirty`&&e.dirty(),S.push(w.value)}return{status:e.value,value:S}}static async mergeObjectAsync(t,S){let w=[];for(let e of S){let t=await e.key,S=await e.value;w.push({key:t,value:S})}return e.mergeObjectSync(t,w)}static mergeObjectSync(e,t){let S={};for(let w of t){let{key:t,value:E}=w;if(t.status===`aborted`||E.status===`aborted`)return INVALID;t.status===`dirty`&&e.dirty(),E.status===`dirty`&&e.dirty(),t.value!==`__proto__`&&(E.value!==void 0||w.alwaysSet)&&(S[t.value]=E.value)}return{status:e.value,value:S}}};const INVALID=Object.freeze({status:`aborted`}),DIRTY=e=>({status:`dirty`,value:e}),OK=e=>({status:`valid`,value:e}),isAborted=e=>e.status===`aborted`,isDirty=e=>e.status===`dirty`,isValid=e=>e.status===`valid`,isAsync=e=>typeof Promise<`u`&&e instanceof Promise;var errorUtil;(function(e){e.errToObj=e=>typeof e==`string`?{message:e}:e||{},e.toString=e=>typeof e==`string`?e:e?.message})(errorUtil||={});var ParseInputLazyPath=class{constructor(e,t,S,w){this._cachedPath=[],this.parent=e,this.data=t,this._path=S,this._key=w}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}};const handleResult=(e,t)=>{if(isValid(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error(`Validation failed but no issues detected.`);return{success:!1,get error(){return this._error||=new ZodError(e.common.issues),this._error}}};function processCreateParams(e){if(!e)return{};let{errorMap:t,invalid_type_error:S,required_error:w,description:E}=e;if(t&&(S||w))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:E}:{errorMap:(t,E)=>{let{message:D}=e;return t.code===`invalid_enum_value`?{message:D??E.defaultError}:E.data===void 0?{message:D??w??E.defaultError}:t.code===`invalid_type`?{message:D??S??E.defaultError}:{message:E.defaultError}},description:E}}var ZodType=class{get description(){return this._def.description}_getType(e){return getParsedType(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:getParsedType(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:getParsedType(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(isAsync(t))throw Error(`Synchronous parse encountered promise.`);return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let S=this.safeParse(e,t);if(S.success)return S.data;throw S.error}safeParse(e,t){let S={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:getParsedType(e)};return handleResult(S,this._parseSync({data:e,path:S.path,parent:S}))}"~validate"(e){let t={common:{issues:[],async:!!this[`~standard`].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:getParsedType(e)};if(!this[`~standard`].async)try{let S=this._parseSync({data:e,path:[],parent:t});return isValid(S)?{value:S.value}:{issues:t.common.issues}}catch(e){e?.message?.toLowerCase()?.includes(`encountered`)&&(this[`~standard`].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(e=>isValid(e)?{value:e.value}:{issues:t.common.issues})}async parseAsync(e,t){let S=await this.safeParseAsync(e,t);if(S.success)return S.data;throw S.error}async safeParseAsync(e,t){let S={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:getParsedType(e)},w=this._parse({data:e,path:S.path,parent:S});return handleResult(S,await(isAsync(w)?w:Promise.resolve(w)))}refine(e,t){let S=e=>typeof t==`string`||t===void 0?{message:t}:typeof t==`function`?t(e):t;return this._refinement((t,w)=>{let E=e(t),D=()=>w.addIssue({code:ZodIssueCode.custom,...S(t)});return typeof Promise<`u`&&E instanceof Promise?E.then(e=>e?!0:(D(),!1)):E?!0:(D(),!1)})}refinement(e,t){return this._refinement((S,w)=>e(S)?!0:(w.addIssue(typeof t==`function`?t(S,w):t),!1))}_refinement(e){return new ZodEffects({schema:this,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:{type:`refinement`,refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this[`~standard`]={version:1,vendor:`zod`,validate:e=>this[`~validate`](e)}}optional(){return ZodOptional.create(this,this._def)}nullable(){return ZodNullable.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ZodArray.create(this)}promise(){return ZodPromise.create(this,this._def)}or(e){return ZodUnion.create([this,e],this._def)}and(e){return ZodIntersection.create(this,e,this._def)}transform(e){return new ZodEffects({...processCreateParams(this._def),schema:this,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:{type:`transform`,transform:e}})}default(e){let t=typeof e==`function`?e:()=>e;return new ZodDefault({...processCreateParams(this._def),innerType:this,defaultValue:t,typeName:ZodFirstPartyTypeKind.ZodDefault})}brand(){return new ZodBranded({typeName:ZodFirstPartyTypeKind.ZodBranded,type:this,...processCreateParams(this._def)})}catch(e){let t=typeof e==`function`?e:()=>e;return new ZodCatch({...processCreateParams(this._def),innerType:this,catchValue:t,typeName:ZodFirstPartyTypeKind.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return ZodPipeline.create(this,e)}readonly(){return ZodReadonly.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}};const cuidRegex=/^c[^\s-]{8,}$/i,cuid2Regex=/^[0-9a-z]+$/,ulidRegex=/^[0-9A-HJKMNP-TV-Z]{26}$/i,uuidRegex=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,nanoidRegex=/^[a-z0-9_-]{21}$/i,jwtRegex=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,durationRegex=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,emailRegex=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,_emojiRegex=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;let emojiRegex$1;const ipv4Regex=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4CidrRegex=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6Regex=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,ipv6CidrRegex=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64Regex=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64urlRegex=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,dateRegexSource=`((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`,dateRegex=RegExp(`^${dateRegexSource}$`);function timeRegexSource(e){let t=`[0-5]\\d`;e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision??(t=`${t}(\\.\\d+)?`);let S=e.precision?`+`:`?`;return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${S}`}function timeRegex(e){return RegExp(`^${timeRegexSource(e)}$`)}function datetimeRegex(e){let t=`${dateRegexSource}T${timeRegexSource(e)}`,S=[];return S.push(e.local?`Z?`:`Z`),e.offset&&S.push(`([+-]\\d{2}:?\\d{2})`),t=`${t}(${S.join(`|`)})`,RegExp(`^${t}$`)}function isValidIP(e,t){return!!((t===`v4`||!t)&&ipv4Regex.test(e)||(t===`v6`||!t)&&ipv6Regex.test(e))}function isValidJWT(e,t){if(!jwtRegex.test(e))return!1;try{let[S]=e.split(`.`);if(!S)return!1;let w=S.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(S.length+(4-S.length%4)%4,`=`),E=JSON.parse(atob(w));return!(typeof E!=`object`||!E||`typ`in E&&E?.typ!==`JWT`||!E.alg||t&&E.alg!==t)}catch{return!1}}function isValidCidr(e,t){return!!((t===`v4`||!t)&&ipv4CidrRegex.test(e)||(t===`v6`||!t)&&ipv6CidrRegex.test(e))}var ZodString=class e extends ZodType{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==ZodParsedType.string){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.string,received:t.parsedType}),INVALID}let t=new ParseStatus,S;for(let w of this._def.checks)if(w.kind===`min`)e.data.length<w.value&&(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{code:ZodIssueCode.too_small,minimum:w.value,type:`string`,inclusive:!0,exact:!1,message:w.message}),t.dirty());else if(w.kind===`max`)e.data.length>w.value&&(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{code:ZodIssueCode.too_big,maximum:w.value,type:`string`,inclusive:!0,exact:!1,message:w.message}),t.dirty());else if(w.kind===`length`){let E=e.data.length>w.value,D=e.data.length<w.value;(E||D)&&(S=this._getOrReturnCtx(e,S),E?addIssueToContext(S,{code:ZodIssueCode.too_big,maximum:w.value,type:`string`,inclusive:!0,exact:!0,message:w.message}):D&&addIssueToContext(S,{code:ZodIssueCode.too_small,minimum:w.value,type:`string`,inclusive:!0,exact:!0,message:w.message}),t.dirty())}else if(w.kind===`email`)emailRegex.test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`email`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty());else if(w.kind===`emoji`)emojiRegex$1||=new RegExp(_emojiRegex,`u`),emojiRegex$1.test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`emoji`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty());else if(w.kind===`uuid`)uuidRegex.test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`uuid`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty());else if(w.kind===`nanoid`)nanoidRegex.test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`nanoid`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty());else if(w.kind===`cuid`)cuidRegex.test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`cuid`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty());else if(w.kind===`cuid2`)cuid2Regex.test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`cuid2`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty());else if(w.kind===`ulid`)ulidRegex.test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`ulid`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty());else if(w.kind===`url`)try{new URL(e.data)}catch{S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`url`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty()}else w.kind===`regex`?(w.regex.lastIndex=0,w.regex.test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`regex`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty())):w.kind===`trim`?e.data=e.data.trim():w.kind===`includes`?e.data.includes(w.value,w.position)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{code:ZodIssueCode.invalid_string,validation:{includes:w.value,position:w.position},message:w.message}),t.dirty()):w.kind===`toLowerCase`?e.data=e.data.toLowerCase():w.kind===`toUpperCase`?e.data=e.data.toUpperCase():w.kind===`startsWith`?e.data.startsWith(w.value)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{code:ZodIssueCode.invalid_string,validation:{startsWith:w.value},message:w.message}),t.dirty()):w.kind===`endsWith`?e.data.endsWith(w.value)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{code:ZodIssueCode.invalid_string,validation:{endsWith:w.value},message:w.message}),t.dirty()):w.kind===`datetime`?datetimeRegex(w).test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{code:ZodIssueCode.invalid_string,validation:`datetime`,message:w.message}),t.dirty()):w.kind===`date`?dateRegex.test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{code:ZodIssueCode.invalid_string,validation:`date`,message:w.message}),t.dirty()):w.kind===`time`?timeRegex(w).test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{code:ZodIssueCode.invalid_string,validation:`time`,message:w.message}),t.dirty()):w.kind===`duration`?durationRegex.test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`duration`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty()):w.kind===`ip`?isValidIP(e.data,w.version)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`ip`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty()):w.kind===`jwt`?isValidJWT(e.data,w.alg)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`jwt`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty()):w.kind===`cidr`?isValidCidr(e.data,w.version)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`cidr`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty()):w.kind===`base64`?base64Regex.test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`base64`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty()):w.kind===`base64url`?base64urlRegex.test(e.data)||(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{validation:`base64url`,code:ZodIssueCode.invalid_string,message:w.message}),t.dirty()):util.assertNever(w);return{status:t.value,value:e.data}}_regex(e,t,S){return this.refinement(t=>e.test(t),{validation:t,code:ZodIssueCode.invalid_string,...errorUtil.errToObj(S)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(e){return this._addCheck({kind:`email`,...errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:`url`,...errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:`emoji`,...errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:`uuid`,...errorUtil.errToObj(e)})}nanoid(e){return this._addCheck({kind:`nanoid`,...errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:`cuid`,...errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:`cuid2`,...errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:`ulid`,...errorUtil.errToObj(e)})}base64(e){return this._addCheck({kind:`base64`,...errorUtil.errToObj(e)})}base64url(e){return this._addCheck({kind:`base64url`,...errorUtil.errToObj(e)})}jwt(e){return this._addCheck({kind:`jwt`,...errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:`ip`,...errorUtil.errToObj(e)})}cidr(e){return this._addCheck({kind:`cidr`,...errorUtil.errToObj(e)})}datetime(e){return typeof e==`string`?this._addCheck({kind:`datetime`,precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:`datetime`,precision:e?.precision===void 0?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...errorUtil.errToObj(e?.message)})}date(e){return this._addCheck({kind:`date`,message:e})}time(e){return typeof e==`string`?this._addCheck({kind:`time`,precision:null,message:e}):this._addCheck({kind:`time`,precision:e?.precision===void 0?null:e?.precision,...errorUtil.errToObj(e?.message)})}duration(e){return this._addCheck({kind:`duration`,...errorUtil.errToObj(e)})}regex(e,t){return this._addCheck({kind:`regex`,regex:e,...errorUtil.errToObj(t)})}includes(e,t){return this._addCheck({kind:`includes`,value:e,position:t?.position,...errorUtil.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:`startsWith`,value:e,...errorUtil.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:`endsWith`,value:e,...errorUtil.errToObj(t)})}min(e,t){return this._addCheck({kind:`min`,value:e,...errorUtil.errToObj(t)})}max(e,t){return this._addCheck({kind:`max`,value:e,...errorUtil.errToObj(t)})}length(e,t){return this._addCheck({kind:`length`,value:e,...errorUtil.errToObj(t)})}nonempty(e){return this.min(1,errorUtil.errToObj(e))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:`trim`}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toLowerCase`}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toUpperCase`}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind===`datetime`)}get isDate(){return!!this._def.checks.find(e=>e.kind===`date`)}get isTime(){return!!this._def.checks.find(e=>e.kind===`time`)}get isDuration(){return!!this._def.checks.find(e=>e.kind===`duration`)}get isEmail(){return!!this._def.checks.find(e=>e.kind===`email`)}get isURL(){return!!this._def.checks.find(e=>e.kind===`url`)}get isEmoji(){return!!this._def.checks.find(e=>e.kind===`emoji`)}get isUUID(){return!!this._def.checks.find(e=>e.kind===`uuid`)}get isNANOID(){return!!this._def.checks.find(e=>e.kind===`nanoid`)}get isCUID(){return!!this._def.checks.find(e=>e.kind===`cuid`)}get isCUID2(){return!!this._def.checks.find(e=>e.kind===`cuid2`)}get isULID(){return!!this._def.checks.find(e=>e.kind===`ulid`)}get isIP(){return!!this._def.checks.find(e=>e.kind===`ip`)}get isCIDR(){return!!this._def.checks.find(e=>e.kind===`cidr`)}get isBase64(){return!!this._def.checks.find(e=>e.kind===`base64`)}get isBase64url(){return!!this._def.checks.find(e=>e.kind===`base64url`)}get minLength(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}};ZodString.create=e=>new ZodString({checks:[],typeName:ZodFirstPartyTypeKind.ZodString,coerce:e?.coerce??!1,...processCreateParams(e)});function floatSafeRemainder(e,t){let S=(e.toString().split(`.`)[1]||``).length,w=(t.toString().split(`.`)[1]||``).length,E=S>w?S:w;return Number.parseInt(e.toFixed(E).replace(`.`,``))%Number.parseInt(t.toFixed(E).replace(`.`,``))/10**E}var ZodNumber=class e extends ZodType{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==ZodParsedType.number){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.number,received:t.parsedType}),INVALID}let t,S=new ParseStatus;for(let w of this._def.checks)w.kind===`int`?util.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:`integer`,received:`float`,message:w.message}),S.dirty()):w.kind===`min`?(w.inclusive?e.data<w.value:e.data<=w.value)&&(t=this._getOrReturnCtx(e,t),addIssueToContext(t,{code:ZodIssueCode.too_small,minimum:w.value,type:`number`,inclusive:w.inclusive,exact:!1,message:w.message}),S.dirty()):w.kind===`max`?(w.inclusive?e.data>w.value:e.data>=w.value)&&(t=this._getOrReturnCtx(e,t),addIssueToContext(t,{code:ZodIssueCode.too_big,maximum:w.value,type:`number`,inclusive:w.inclusive,exact:!1,message:w.message}),S.dirty()):w.kind===`multipleOf`?floatSafeRemainder(e.data,w.value)!==0&&(t=this._getOrReturnCtx(e,t),addIssueToContext(t,{code:ZodIssueCode.not_multiple_of,multipleOf:w.value,message:w.message}),S.dirty()):w.kind===`finite`?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),addIssueToContext(t,{code:ZodIssueCode.not_finite,message:w.message}),S.dirty()):util.assertNever(w);return{status:S.value,value:e.data}}gte(e,t){return this.setLimit(`min`,e,!0,errorUtil.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,errorUtil.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,errorUtil.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,errorUtil.toString(t))}setLimit(t,S,w,E){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:S,inclusive:w,message:errorUtil.toString(E)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(e){return this._addCheck({kind:`int`,message:errorUtil.toString(e)})}positive(e){return this._addCheck({kind:`min`,value:0,inclusive:!1,message:errorUtil.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:0,inclusive:!1,message:errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:0,inclusive:!0,message:errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:0,inclusive:!0,message:errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:errorUtil.toString(t)})}finite(e){return this._addCheck({kind:`finite`,message:errorUtil.toString(e)})}safe(e){return this._addCheck({kind:`min`,inclusive:!0,value:-(2**53-1),message:errorUtil.toString(e)})._addCheck({kind:`max`,inclusive:!0,value:2**53-1,message:errorUtil.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind===`int`||e.kind===`multipleOf`&&util.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let S of this._def.checks)if(S.kind===`finite`||S.kind===`int`||S.kind===`multipleOf`)return!0;else S.kind===`min`?(t===null||S.value>t)&&(t=S.value):S.kind===`max`&&(e===null||S.value<e)&&(e=S.value);return Number.isFinite(t)&&Number.isFinite(e)}};ZodNumber.create=e=>new ZodNumber({checks:[],typeName:ZodFirstPartyTypeKind.ZodNumber,coerce:e?.coerce||!1,...processCreateParams(e)});var ZodBigInt=class e extends ZodType{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==ZodParsedType.bigint)return this._getInvalidInput(e);let t,S=new ParseStatus;for(let w of this._def.checks)w.kind===`min`?(w.inclusive?e.data<w.value:e.data<=w.value)&&(t=this._getOrReturnCtx(e,t),addIssueToContext(t,{code:ZodIssueCode.too_small,type:`bigint`,minimum:w.value,inclusive:w.inclusive,message:w.message}),S.dirty()):w.kind===`max`?(w.inclusive?e.data>w.value:e.data>=w.value)&&(t=this._getOrReturnCtx(e,t),addIssueToContext(t,{code:ZodIssueCode.too_big,type:`bigint`,maximum:w.value,inclusive:w.inclusive,message:w.message}),S.dirty()):w.kind===`multipleOf`?e.data%w.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),addIssueToContext(t,{code:ZodIssueCode.not_multiple_of,multipleOf:w.value,message:w.message}),S.dirty()):util.assertNever(w);return{status:S.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.bigint,received:t.parsedType}),INVALID}gte(e,t){return this.setLimit(`min`,e,!0,errorUtil.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,errorUtil.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,errorUtil.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,errorUtil.toString(t))}setLimit(t,S,w,E){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:S,inclusive:w,message:errorUtil.toString(E)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!1,message:errorUtil.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!1,message:errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!0,message:errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!0,message:errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:errorUtil.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}};ZodBigInt.create=e=>new ZodBigInt({checks:[],typeName:ZodFirstPartyTypeKind.ZodBigInt,coerce:e?.coerce??!1,...processCreateParams(e)});var ZodBoolean=class extends ZodType{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==ZodParsedType.boolean){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.boolean,received:t.parsedType}),INVALID}return OK(e.data)}};ZodBoolean.create=e=>new ZodBoolean({typeName:ZodFirstPartyTypeKind.ZodBoolean,coerce:e?.coerce||!1,...processCreateParams(e)});var ZodDate=class e extends ZodType{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==ZodParsedType.date){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.date,received:t.parsedType}),INVALID}if(Number.isNaN(e.data.getTime()))return addIssueToContext(this._getOrReturnCtx(e),{code:ZodIssueCode.invalid_date}),INVALID;let t=new ParseStatus,S;for(let w of this._def.checks)w.kind===`min`?e.data.getTime()<w.value&&(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{code:ZodIssueCode.too_small,message:w.message,inclusive:!0,exact:!1,minimum:w.value,type:`date`}),t.dirty()):w.kind===`max`?e.data.getTime()>w.value&&(S=this._getOrReturnCtx(e,S),addIssueToContext(S,{code:ZodIssueCode.too_big,message:w.message,inclusive:!0,exact:!1,maximum:w.value,type:`date`}),t.dirty()):util.assertNever(w);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(e,t){return this._addCheck({kind:`min`,value:e.getTime(),message:errorUtil.toString(t)})}max(e,t){return this._addCheck({kind:`max`,value:e.getTime(),message:errorUtil.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e==null?null:new Date(e)}get maxDate(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e==null?null:new Date(e)}};ZodDate.create=e=>new ZodDate({checks:[],coerce:e?.coerce||!1,typeName:ZodFirstPartyTypeKind.ZodDate,...processCreateParams(e)});var ZodSymbol=class extends ZodType{_parse(e){if(this._getType(e)!==ZodParsedType.symbol){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.symbol,received:t.parsedType}),INVALID}return OK(e.data)}};ZodSymbol.create=e=>new ZodSymbol({typeName:ZodFirstPartyTypeKind.ZodSymbol,...processCreateParams(e)});var ZodUndefined=class extends ZodType{_parse(e){if(this._getType(e)!==ZodParsedType.undefined){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.undefined,received:t.parsedType}),INVALID}return OK(e.data)}};ZodUndefined.create=e=>new ZodUndefined({typeName:ZodFirstPartyTypeKind.ZodUndefined,...processCreateParams(e)});var ZodNull=class extends ZodType{_parse(e){if(this._getType(e)!==ZodParsedType.null){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.null,received:t.parsedType}),INVALID}return OK(e.data)}};ZodNull.create=e=>new ZodNull({typeName:ZodFirstPartyTypeKind.ZodNull,...processCreateParams(e)});var ZodAny=class extends ZodType{constructor(){super(...arguments),this._any=!0}_parse(e){return OK(e.data)}};ZodAny.create=e=>new ZodAny({typeName:ZodFirstPartyTypeKind.ZodAny,...processCreateParams(e)});var ZodUnknown=class extends ZodType{constructor(){super(...arguments),this._unknown=!0}_parse(e){return OK(e.data)}};ZodUnknown.create=e=>new ZodUnknown({typeName:ZodFirstPartyTypeKind.ZodUnknown,...processCreateParams(e)});var ZodNever=class extends ZodType{_parse(e){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.never,received:t.parsedType}),INVALID}};ZodNever.create=e=>new ZodNever({typeName:ZodFirstPartyTypeKind.ZodNever,...processCreateParams(e)});var ZodVoid=class extends ZodType{_parse(e){if(this._getType(e)!==ZodParsedType.undefined){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.void,received:t.parsedType}),INVALID}return OK(e.data)}};ZodVoid.create=e=>new ZodVoid({typeName:ZodFirstPartyTypeKind.ZodVoid,...processCreateParams(e)});var ZodArray=class e extends ZodType{_parse(e){let{ctx:t,status:S}=this._processInputParams(e),w=this._def;if(t.parsedType!==ZodParsedType.array)return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.array,received:t.parsedType}),INVALID;if(w.exactLength!==null){let e=t.data.length>w.exactLength.value,E=t.data.length<w.exactLength.value;(e||E)&&(addIssueToContext(t,{code:e?ZodIssueCode.too_big:ZodIssueCode.too_small,minimum:E?w.exactLength.value:void 0,maximum:e?w.exactLength.value:void 0,type:`array`,inclusive:!0,exact:!0,message:w.exactLength.message}),S.dirty())}if(w.minLength!==null&&t.data.length<w.minLength.value&&(addIssueToContext(t,{code:ZodIssueCode.too_small,minimum:w.minLength.value,type:`array`,inclusive:!0,exact:!1,message:w.minLength.message}),S.dirty()),w.maxLength!==null&&t.data.length>w.maxLength.value&&(addIssueToContext(t,{code:ZodIssueCode.too_big,maximum:w.maxLength.value,type:`array`,inclusive:!0,exact:!1,message:w.maxLength.message}),S.dirty()),t.common.async)return Promise.all([...t.data].map((e,S)=>w.type._parseAsync(new ParseInputLazyPath(t,e,t.path,S)))).then(e=>ParseStatus.mergeArray(S,e));let E=[...t.data].map((e,S)=>w.type._parseSync(new ParseInputLazyPath(t,e,t.path,S)));return ParseStatus.mergeArray(S,E)}get element(){return this._def.type}min(t,S){return new e({...this._def,minLength:{value:t,message:errorUtil.toString(S)}})}max(t,S){return new e({...this._def,maxLength:{value:t,message:errorUtil.toString(S)}})}length(t,S){return new e({...this._def,exactLength:{value:t,message:errorUtil.toString(S)}})}nonempty(e){return this.min(1,e)}};ZodArray.create=(e,t)=>new ZodArray({type:e,minLength:null,maxLength:null,exactLength:null,typeName:ZodFirstPartyTypeKind.ZodArray,...processCreateParams(t)});function deepPartialify(e){if(e instanceof ZodObject){let t={};for(let S in e.shape){let w=e.shape[S];t[S]=ZodOptional.create(deepPartialify(w))}return new ZodObject({...e._def,shape:()=>t})}else if(e instanceof ZodArray)return new ZodArray({...e._def,type:deepPartialify(e.element)});else if(e instanceof ZodOptional)return ZodOptional.create(deepPartialify(e.unwrap()));else if(e instanceof ZodNullable)return ZodNullable.create(deepPartialify(e.unwrap()));else if(e instanceof ZodTuple)return ZodTuple.create(e.items.map(e=>deepPartialify(e)));else return e}var ZodObject=class e extends ZodType{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape();return this._cached={shape:e,keys:util.objectKeys(e)},this._cached}_parse(e){if(this._getType(e)!==ZodParsedType.object){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:t.parsedType}),INVALID}let{status:t,ctx:S}=this._processInputParams(e),{shape:w,keys:E}=this._getCached(),D=[];if(!(this._def.catchall instanceof ZodNever&&this._def.unknownKeys===`strip`))for(let e in S.data)E.includes(e)||D.push(e);let O=[];for(let e of E){let t=w[e],E=S.data[e];O.push({key:{status:`valid`,value:e},value:t._parse(new ParseInputLazyPath(S,E,S.path,e)),alwaysSet:e in S.data})}if(this._def.catchall instanceof ZodNever){let e=this._def.unknownKeys;if(e===`passthrough`)for(let e of D)O.push({key:{status:`valid`,value:e},value:{status:`valid`,value:S.data[e]}});else if(e===`strict`)D.length>0&&(addIssueToContext(S,{code:ZodIssueCode.unrecognized_keys,keys:D}),t.dirty());else if(e!==`strip`)throw Error(`Internal ZodObject error: invalid unknownKeys value.`)}else{let e=this._def.catchall;for(let t of D){let w=S.data[t];O.push({key:{status:`valid`,value:t},value:e._parse(new ParseInputLazyPath(S,w,S.path,t)),alwaysSet:t in S.data})}}return S.common.async?Promise.resolve().then(async()=>{let e=[];for(let t of O){let S=await t.key,w=await t.value;e.push({key:S,value:w,alwaysSet:t.alwaysSet})}return e}).then(e=>ParseStatus.mergeObjectSync(t,e)):ParseStatus.mergeObjectSync(t,O)}get shape(){return this._def.shape()}strict(t){return errorUtil.errToObj,new e({...this._def,unknownKeys:`strict`,...t===void 0?{}:{errorMap:(e,S)=>{let w=this._def.errorMap?.(e,S).message??S.defaultError;return e.code===`unrecognized_keys`?{message:errorUtil.errToObj(t).message??w}:{message:w}}}})}strip(){return new e({...this._def,unknownKeys:`strip`})}passthrough(){return new e({...this._def,unknownKeys:`passthrough`})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:ZodFirstPartyTypeKind.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let S={};for(let e of util.objectKeys(t))t[e]&&this.shape[e]&&(S[e]=this.shape[e]);return new e({...this._def,shape:()=>S})}omit(t){let S={};for(let e of util.objectKeys(this.shape))t[e]||(S[e]=this.shape[e]);return new e({...this._def,shape:()=>S})}deepPartial(){return deepPartialify(this)}partial(t){let S={};for(let e of util.objectKeys(this.shape)){let w=this.shape[e];t&&!t[e]?S[e]=w:S[e]=w.optional()}return new e({...this._def,shape:()=>S})}required(t){let S={};for(let e of util.objectKeys(this.shape))if(t&&!t[e])S[e]=this.shape[e];else{let t=this.shape[e];for(;t instanceof ZodOptional;)t=t._def.innerType;S[e]=t}return new e({...this._def,shape:()=>S})}keyof(){return createZodEnum(util.objectKeys(this.shape))}};ZodObject.create=(e,t)=>new ZodObject({shape:()=>e,unknownKeys:`strip`,catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(t)}),ZodObject.strictCreate=(e,t)=>new ZodObject({shape:()=>e,unknownKeys:`strict`,catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(t)}),ZodObject.lazycreate=(e,t)=>new ZodObject({shape:e,unknownKeys:`strip`,catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(t)});var ZodUnion=class extends ZodType{_parse(e){let{ctx:t}=this._processInputParams(e),S=this._def.options;function w(e){for(let t of e)if(t.result.status===`valid`)return t.result;for(let S of e)if(S.result.status===`dirty`)return t.common.issues.push(...S.ctx.common.issues),S.result;let S=e.map(e=>new ZodError(e.ctx.common.issues));return addIssueToContext(t,{code:ZodIssueCode.invalid_union,unionErrors:S}),INVALID}if(t.common.async)return Promise.all(S.map(async e=>{let S={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:S}),ctx:S}})).then(w);{let e,w=[];for(let E of S){let S={...t,common:{...t.common,issues:[]},parent:null},D=E._parseSync({data:t.data,path:t.path,parent:S});if(D.status===`valid`)return D;D.status===`dirty`&&!e&&(e={result:D,ctx:S}),S.common.issues.length&&w.push(S.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;let E=w.map(e=>new ZodError(e));return addIssueToContext(t,{code:ZodIssueCode.invalid_union,unionErrors:E}),INVALID}}get options(){return this._def.options}};ZodUnion.create=(e,t)=>new ZodUnion({options:e,typeName:ZodFirstPartyTypeKind.ZodUnion,...processCreateParams(t)});const getDiscriminator=e=>e instanceof ZodLazy?getDiscriminator(e.schema):e instanceof ZodEffects?getDiscriminator(e.innerType()):e instanceof ZodLiteral?[e.value]:e instanceof ZodEnum?e.options:e instanceof ZodNativeEnum?util.objectValues(e.enum):e instanceof ZodDefault?getDiscriminator(e._def.innerType):e instanceof ZodUndefined?[void 0]:e instanceof ZodNull?[null]:e instanceof ZodOptional?[void 0,...getDiscriminator(e.unwrap())]:e instanceof ZodNullable?[null,...getDiscriminator(e.unwrap())]:e instanceof ZodBranded||e instanceof ZodReadonly?getDiscriminator(e.unwrap()):e instanceof ZodCatch?getDiscriminator(e._def.innerType):[];var ZodDiscriminatedUnion=class e extends ZodType{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==ZodParsedType.object)return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:t.parsedType}),INVALID;let S=this.discriminator,w=t.data[S],E=this.optionsMap.get(w);return E?t.common.async?E._parseAsync({data:t.data,path:t.path,parent:t}):E._parseSync({data:t.data,path:t.path,parent:t}):(addIssueToContext(t,{code:ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[S]}),INVALID)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,S,w){let E=new Map;for(let e of S){let S=getDiscriminator(e.shape[t]);if(!S.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let w of S){if(E.has(w))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(w)}`);E.set(w,e)}}return new e({typeName:ZodFirstPartyTypeKind.ZodDiscriminatedUnion,discriminator:t,options:S,optionsMap:E,...processCreateParams(w)})}};function mergeValues(e,t){let S=getParsedType(e),w=getParsedType(t);if(e===t)return{valid:!0,data:e};if(S===ZodParsedType.object&&w===ZodParsedType.object){let S=util.objectKeys(t),w=util.objectKeys(e).filter(e=>S.indexOf(e)!==-1),E={...e,...t};for(let S of w){let w=mergeValues(e[S],t[S]);if(!w.valid)return{valid:!1};E[S]=w.data}return{valid:!0,data:E}}else if(S===ZodParsedType.array&&w===ZodParsedType.array){if(e.length!==t.length)return{valid:!1};let S=[];for(let w=0;w<e.length;w++){let E=e[w],D=t[w],O=mergeValues(E,D);if(!O.valid)return{valid:!1};S.push(O.data)}return{valid:!0,data:S}}else if(S===ZodParsedType.date&&w===ZodParsedType.date&&+e==+t)return{valid:!0,data:e};else return{valid:!1}}var ZodIntersection=class extends ZodType{_parse(e){let{status:t,ctx:S}=this._processInputParams(e),w=(e,w)=>{if(isAborted(e)||isAborted(w))return INVALID;let E=mergeValues(e.value,w.value);return E.valid?((isDirty(e)||isDirty(w))&&t.dirty(),{status:t.value,value:E.data}):(addIssueToContext(S,{code:ZodIssueCode.invalid_intersection_types}),INVALID)};return S.common.async?Promise.all([this._def.left._parseAsync({data:S.data,path:S.path,parent:S}),this._def.right._parseAsync({data:S.data,path:S.path,parent:S})]).then(([e,t])=>w(e,t)):w(this._def.left._parseSync({data:S.data,path:S.path,parent:S}),this._def.right._parseSync({data:S.data,path:S.path,parent:S}))}};ZodIntersection.create=(e,t,S)=>new ZodIntersection({left:e,right:t,typeName:ZodFirstPartyTypeKind.ZodIntersection,...processCreateParams(S)});var ZodTuple=class e extends ZodType{_parse(e){let{status:t,ctx:S}=this._processInputParams(e);if(S.parsedType!==ZodParsedType.array)return addIssueToContext(S,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.array,received:S.parsedType}),INVALID;if(S.data.length<this._def.items.length)return addIssueToContext(S,{code:ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),INVALID;!this._def.rest&&S.data.length>this._def.items.length&&(addIssueToContext(S,{code:ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),t.dirty());let w=[...S.data].map((e,t)=>{let w=this._def.items[t]||this._def.rest;return w?w._parse(new ParseInputLazyPath(S,e,S.path,t)):null}).filter(e=>!!e);return S.common.async?Promise.all(w).then(e=>ParseStatus.mergeArray(t,e)):ParseStatus.mergeArray(t,w)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};ZodTuple.create=(e,t)=>{if(!Array.isArray(e))throw Error(`You must pass an array of schemas to z.tuple([ ... ])`);return new ZodTuple({items:e,typeName:ZodFirstPartyTypeKind.ZodTuple,rest:null,...processCreateParams(t)})};var ZodRecord=class e extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:S}=this._processInputParams(e);if(S.parsedType!==ZodParsedType.object)return addIssueToContext(S,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:S.parsedType}),INVALID;let w=[],E=this._def.keyType,D=this._def.valueType;for(let e in S.data)w.push({key:E._parse(new ParseInputLazyPath(S,e,S.path,e)),value:D._parse(new ParseInputLazyPath(S,S.data[e],S.path,e)),alwaysSet:e in S.data});return S.common.async?ParseStatus.mergeObjectAsync(t,w):ParseStatus.mergeObjectSync(t,w)}get element(){return this._def.valueType}static create(t,S,w){return S instanceof ZodType?new e({keyType:t,valueType:S,typeName:ZodFirstPartyTypeKind.ZodRecord,...processCreateParams(w)}):new e({keyType:ZodString.create(),valueType:t,typeName:ZodFirstPartyTypeKind.ZodRecord,...processCreateParams(S)})}},ZodMap=class extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:S}=this._processInputParams(e);if(S.parsedType!==ZodParsedType.map)return addIssueToContext(S,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.map,received:S.parsedType}),INVALID;let w=this._def.keyType,E=this._def.valueType,D=[...S.data.entries()].map(([e,t],D)=>({key:w._parse(new ParseInputLazyPath(S,e,S.path,[D,`key`])),value:E._parse(new ParseInputLazyPath(S,t,S.path,[D,`value`]))}));if(S.common.async){let e=new Map;return Promise.resolve().then(async()=>{for(let S of D){let w=await S.key,E=await S.value;if(w.status===`aborted`||E.status===`aborted`)return INVALID;(w.status===`dirty`||E.status===`dirty`)&&t.dirty(),e.set(w.value,E.value)}return{status:t.value,value:e}})}else{let e=new Map;for(let S of D){let w=S.key,E=S.value;if(w.status===`aborted`||E.status===`aborted`)return INVALID;(w.status===`dirty`||E.status===`dirty`)&&t.dirty(),e.set(w.value,E.value)}return{status:t.value,value:e}}}};ZodMap.create=(e,t,S)=>new ZodMap({valueType:t,keyType:e,typeName:ZodFirstPartyTypeKind.ZodMap,...processCreateParams(S)});var ZodSet=class e extends ZodType{_parse(e){let{status:t,ctx:S}=this._processInputParams(e);if(S.parsedType!==ZodParsedType.set)return addIssueToContext(S,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.set,received:S.parsedType}),INVALID;let w=this._def;w.minSize!==null&&S.data.size<w.minSize.value&&(addIssueToContext(S,{code:ZodIssueCode.too_small,minimum:w.minSize.value,type:`set`,inclusive:!0,exact:!1,message:w.minSize.message}),t.dirty()),w.maxSize!==null&&S.data.size>w.maxSize.value&&(addIssueToContext(S,{code:ZodIssueCode.too_big,maximum:w.maxSize.value,type:`set`,inclusive:!0,exact:!1,message:w.maxSize.message}),t.dirty());let E=this._def.valueType;function D(e){let S=new Set;for(let w of e){if(w.status===`aborted`)return INVALID;w.status===`dirty`&&t.dirty(),S.add(w.value)}return{status:t.value,value:S}}let O=[...S.data.values()].map((e,t)=>E._parse(new ParseInputLazyPath(S,e,S.path,t)));return S.common.async?Promise.all(O).then(e=>D(e)):D(O)}min(t,S){return new e({...this._def,minSize:{value:t,message:errorUtil.toString(S)}})}max(t,S){return new e({...this._def,maxSize:{value:t,message:errorUtil.toString(S)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};ZodSet.create=(e,t)=>new ZodSet({valueType:e,minSize:null,maxSize:null,typeName:ZodFirstPartyTypeKind.ZodSet,...processCreateParams(t)});var ZodFunction=class e extends ZodType{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==ZodParsedType.function)return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.function,received:t.parsedType}),INVALID;function S(e,S){return makeIssue({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,getErrorMap(),errorMap].filter(e=>!!e),issueData:{code:ZodIssueCode.invalid_arguments,argumentsError:S}})}function w(e,S){return makeIssue({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,getErrorMap(),errorMap].filter(e=>!!e),issueData:{code:ZodIssueCode.invalid_return_type,returnTypeError:S}})}let E={errorMap:t.common.contextualErrorMap},D=t.data;if(this._def.returns instanceof ZodPromise){let e=this;return OK(async function(...t){let O=new ZodError([]),k=await e._def.args.parseAsync(t,E).catch(e=>{throw O.addIssue(S(t,e)),O}),j=await Reflect.apply(D,this,k);return await e._def.returns._def.type.parseAsync(j,E).catch(e=>{throw O.addIssue(w(j,e)),O})})}else{let e=this;return OK(function(...t){let O=e._def.args.safeParse(t,E);if(!O.success)throw new ZodError([S(t,O.error)]);let k=Reflect.apply(D,this,O.data),j=e._def.returns.safeParse(k,E);if(!j.success)throw new ZodError([w(k,j.error)]);return j.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:ZodTuple.create(t).rest(ZodUnknown.create())})}returns(t){return new e({...this._def,returns:t})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(t,S,w){return new e({args:t||ZodTuple.create([]).rest(ZodUnknown.create()),returns:S||ZodUnknown.create(),typeName:ZodFirstPartyTypeKind.ZodFunction,...processCreateParams(w)})}},ZodLazy=class extends ZodType{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};ZodLazy.create=(e,t)=>new ZodLazy({getter:e,typeName:ZodFirstPartyTypeKind.ZodLazy,...processCreateParams(t)});var ZodLiteral=class extends ZodType{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{received:t.data,code:ZodIssueCode.invalid_literal,expected:this._def.value}),INVALID}return{status:`valid`,value:e.data}}get value(){return this._def.value}};ZodLiteral.create=(e,t)=>new ZodLiteral({value:e,typeName:ZodFirstPartyTypeKind.ZodLiteral,...processCreateParams(t)});function createZodEnum(e,t){return new ZodEnum({values:e,typeName:ZodFirstPartyTypeKind.ZodEnum,...processCreateParams(t)})}var ZodEnum=class e extends ZodType{_parse(e){if(typeof e.data!=`string`){let t=this._getOrReturnCtx(e),S=this._def.values;return addIssueToContext(t,{expected:util.joinValues(S),received:t.parsedType,code:ZodIssueCode.invalid_type}),INVALID}if(this._cache||=new Set(this._def.values),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),S=this._def.values;return addIssueToContext(t,{received:t.data,code:ZodIssueCode.invalid_enum_value,options:S}),INVALID}return OK(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(t,S=this._def){return e.create(t,{...this._def,...S})}exclude(t,S=this._def){return e.create(this.options.filter(e=>!t.includes(e)),{...this._def,...S})}};ZodEnum.create=createZodEnum;var ZodNativeEnum=class extends ZodType{_parse(e){let t=util.getValidEnumValues(this._def.values),S=this._getOrReturnCtx(e);if(S.parsedType!==ZodParsedType.string&&S.parsedType!==ZodParsedType.number){let e=util.objectValues(t);return addIssueToContext(S,{expected:util.joinValues(e),received:S.parsedType,code:ZodIssueCode.invalid_type}),INVALID}if(this._cache||=new Set(util.getValidEnumValues(this._def.values)),!this._cache.has(e.data)){let e=util.objectValues(t);return addIssueToContext(S,{received:S.data,code:ZodIssueCode.invalid_enum_value,options:e}),INVALID}return OK(e.data)}get enum(){return this._def.values}};ZodNativeEnum.create=(e,t)=>new ZodNativeEnum({values:e,typeName:ZodFirstPartyTypeKind.ZodNativeEnum,...processCreateParams(t)});var ZodPromise=class extends ZodType{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);return t.parsedType!==ZodParsedType.promise&&t.common.async===!1?(addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.promise,received:t.parsedType}),INVALID):OK((t.parsedType===ZodParsedType.promise?t.data:Promise.resolve(t.data)).then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}};ZodPromise.create=(e,t)=>new ZodPromise({type:e,typeName:ZodFirstPartyTypeKind.ZodPromise,...processCreateParams(t)});var ZodEffects=class extends ZodType{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===ZodFirstPartyTypeKind.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:S}=this._processInputParams(e),w=this._def.effect||null,E={addIssue:e=>{addIssueToContext(S,e),e.fatal?t.abort():t.dirty()},get path(){return S.path}};if(E.addIssue=E.addIssue.bind(E),w.type===`preprocess`){let e=w.transform(S.data,E);if(S.common.async)return Promise.resolve(e).then(async e=>{if(t.value===`aborted`)return INVALID;let w=await this._def.schema._parseAsync({data:e,path:S.path,parent:S});return w.status===`aborted`?INVALID:w.status===`dirty`||t.value===`dirty`?DIRTY(w.value):w});{if(t.value===`aborted`)return INVALID;let w=this._def.schema._parseSync({data:e,path:S.path,parent:S});return w.status===`aborted`?INVALID:w.status===`dirty`||t.value===`dirty`?DIRTY(w.value):w}}if(w.type===`refinement`){let e=e=>{let t=w.refinement(e,E);if(S.common.async)return Promise.resolve(t);if(t instanceof Promise)throw Error(`Async refinement encountered during synchronous parse operation. Use .parseAsync instead.`);return e};if(S.common.async===!1){let w=this._def.schema._parseSync({data:S.data,path:S.path,parent:S});return w.status===`aborted`?INVALID:(w.status===`dirty`&&t.dirty(),e(w.value),{status:t.value,value:w.value})}else return this._def.schema._parseAsync({data:S.data,path:S.path,parent:S}).then(S=>S.status===`aborted`?INVALID:(S.status===`dirty`&&t.dirty(),e(S.value).then(()=>({status:t.value,value:S.value}))))}if(w.type===`transform`)if(S.common.async===!1){let e=this._def.schema._parseSync({data:S.data,path:S.path,parent:S});if(!isValid(e))return INVALID;let D=w.transform(e.value,E);if(D instanceof Promise)throw Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);return{status:t.value,value:D}}else return this._def.schema._parseAsync({data:S.data,path:S.path,parent:S}).then(e=>isValid(e)?Promise.resolve(w.transform(e.value,E)).then(e=>({status:t.value,value:e})):INVALID);util.assertNever(w)}};ZodEffects.create=(e,t,S)=>new ZodEffects({schema:e,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:t,...processCreateParams(S)}),ZodEffects.createWithPreprocess=(e,t,S)=>new ZodEffects({schema:t,effect:{type:`preprocess`,transform:e},typeName:ZodFirstPartyTypeKind.ZodEffects,...processCreateParams(S)});var ZodOptional=class extends ZodType{_parse(e){return this._getType(e)===ZodParsedType.undefined?OK(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ZodOptional.create=(e,t)=>new ZodOptional({innerType:e,typeName:ZodFirstPartyTypeKind.ZodOptional,...processCreateParams(t)});var ZodNullable=class extends ZodType{_parse(e){return this._getType(e)===ZodParsedType.null?OK(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ZodNullable.create=(e,t)=>new ZodNullable({innerType:e,typeName:ZodFirstPartyTypeKind.ZodNullable,...processCreateParams(t)});var ZodDefault=class extends ZodType{_parse(e){let{ctx:t}=this._processInputParams(e),S=t.data;return t.parsedType===ZodParsedType.undefined&&(S=this._def.defaultValue()),this._def.innerType._parse({data:S,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};ZodDefault.create=(e,t)=>new ZodDefault({innerType:e,typeName:ZodFirstPartyTypeKind.ZodDefault,defaultValue:typeof t.default==`function`?t.default:()=>t.default,...processCreateParams(t)});var ZodCatch=class extends ZodType{_parse(e){let{ctx:t}=this._processInputParams(e),S={...t,common:{...t.common,issues:[]}},w=this._def.innerType._parse({data:S.data,path:S.path,parent:{...S}});return isAsync(w)?w.then(e=>({status:`valid`,value:e.status===`valid`?e.value:this._def.catchValue({get error(){return new ZodError(S.common.issues)},input:S.data})})):{status:`valid`,value:w.status===`valid`?w.value:this._def.catchValue({get error(){return new ZodError(S.common.issues)},input:S.data})}}removeCatch(){return this._def.innerType}};ZodCatch.create=(e,t)=>new ZodCatch({innerType:e,typeName:ZodFirstPartyTypeKind.ZodCatch,catchValue:typeof t.catch==`function`?t.catch:()=>t.catch,...processCreateParams(t)});var ZodNaN=class extends ZodType{_parse(e){if(this._getType(e)!==ZodParsedType.nan){let t=this._getOrReturnCtx(e);return addIssueToContext(t,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.nan,received:t.parsedType}),INVALID}return{status:`valid`,value:e.data}}};ZodNaN.create=e=>new ZodNaN({typeName:ZodFirstPartyTypeKind.ZodNaN,...processCreateParams(e)});var ZodBranded=class extends ZodType{_parse(e){let{ctx:t}=this._processInputParams(e),S=t.data;return this._def.type._parse({data:S,path:t.path,parent:t})}unwrap(){return this._def.type}},ZodPipeline=class e extends ZodType{_parse(e){let{status:t,ctx:S}=this._processInputParams(e);if(S.common.async)return(async()=>{let e=await this._def.in._parseAsync({data:S.data,path:S.path,parent:S});return e.status===`aborted`?INVALID:e.status===`dirty`?(t.dirty(),DIRTY(e.value)):this._def.out._parseAsync({data:e.value,path:S.path,parent:S})})();{let e=this._def.in._parseSync({data:S.data,path:S.path,parent:S});return e.status===`aborted`?INVALID:e.status===`dirty`?(t.dirty(),{status:`dirty`,value:e.value}):this._def.out._parseSync({data:e.value,path:S.path,parent:S})}}static create(t,S){return new e({in:t,out:S,typeName:ZodFirstPartyTypeKind.ZodPipeline})}},ZodReadonly=class extends ZodType{_parse(e){let t=this._def.innerType._parse(e),S=e=>(isValid(e)&&(e.value=Object.freeze(e.value)),e);return isAsync(t)?t.then(e=>S(e)):S(t)}unwrap(){return this._def.innerType}};ZodReadonly.create=(e,t)=>new ZodReadonly({innerType:e,typeName:ZodFirstPartyTypeKind.ZodReadonly,...processCreateParams(t)});const late={object:ZodObject.lazycreate};var ZodFirstPartyTypeKind;(function(e){e.ZodString=`ZodString`,e.ZodNumber=`ZodNumber`,e.ZodNaN=`ZodNaN`,e.ZodBigInt=`ZodBigInt`,e.ZodBoolean=`ZodBoolean`,e.ZodDate=`ZodDate`,e.ZodSymbol=`ZodSymbol`,e.ZodUndefined=`ZodUndefined`,e.ZodNull=`ZodNull`,e.ZodAny=`ZodAny`,e.ZodUnknown=`ZodUnknown`,e.ZodNever=`ZodNever`,e.ZodVoid=`ZodVoid`,e.ZodArray=`ZodArray`,e.ZodObject=`ZodObject`,e.ZodUnion=`ZodUnion`,e.ZodDiscriminatedUnion=`ZodDiscriminatedUnion`,e.ZodIntersection=`ZodIntersection`,e.ZodTuple=`ZodTuple`,e.ZodRecord=`ZodRecord`,e.ZodMap=`ZodMap`,e.ZodSet=`ZodSet`,e.ZodFunction=`ZodFunction`,e.ZodLazy=`ZodLazy`,e.ZodLiteral=`ZodLiteral`,e.ZodEnum=`ZodEnum`,e.ZodEffects=`ZodEffects`,e.ZodNativeEnum=`ZodNativeEnum`,e.ZodOptional=`ZodOptional`,e.ZodNullable=`ZodNullable`,e.ZodDefault=`ZodDefault`,e.ZodCatch=`ZodCatch`,e.ZodPromise=`ZodPromise`,e.ZodBranded=`ZodBranded`,e.ZodPipeline=`ZodPipeline`,e.ZodReadonly=`ZodReadonly`})(ZodFirstPartyTypeKind||={});const stringType=ZodString.create,numberType=ZodNumber.create,nanType=ZodNaN.create,bigIntType=ZodBigInt.create,booleanType=ZodBoolean.create,dateType=ZodDate.create,symbolType=ZodSymbol.create,undefinedType=ZodUndefined.create,nullType=ZodNull.create,anyType=ZodAny.create,unknownType=ZodUnknown.create,neverType=ZodNever.create,voidType=ZodVoid.create,arrayType=ZodArray.create,objectType=ZodObject.create,strictObjectType=ZodObject.strictCreate,unionType=ZodUnion.create,discriminatedUnionType=ZodDiscriminatedUnion.create,intersectionType=ZodIntersection.create,tupleType=ZodTuple.create,recordType=ZodRecord.create,mapType=ZodMap.create,setType=ZodSet.create,functionType=ZodFunction.create,lazyType=ZodLazy.create,literalType=ZodLiteral.create,enumType=ZodEnum.create,nativeEnumType=ZodNativeEnum.create,promiseType=ZodPromise.create,effectsType=ZodEffects.create,optionalType=ZodOptional.create,nullableType=ZodNullable.create,preprocessType=ZodEffects.createWithPreprocess,pipelineType=ZodPipeline.create,ZodMiniType=$constructor(`ZodMiniType`,(e,t)=>{if(!e._zod)throw Error(`Uninitialized schema in ZodMiniType.`);$ZodType.init(e,t),e.def=t,e.type=t.type,e.parse=(t,S)=>parse$6(e,t,S,{callee:e.parse}),e.safeParse=(t,S)=>safeParse$2(e,t,S),e.parseAsync=async(t,S)=>parseAsync$1(e,t,S,{callee:e.parseAsync}),e.safeParseAsync=async(t,S)=>safeParseAsync$2(e,t,S),e.check=(...S)=>e.clone({...t,checks:[...t.checks??[],...S.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]},{parent:!0}),e.with=e.check,e.clone=(t,S)=>clone(e,t,S),e.brand=()=>e,e.register=((t,S)=>(t.add(e,S),e)),e.apply=t=>t(e)}),ZodMiniObject=$constructor(`ZodMiniObject`,(e,t)=>{$ZodObject.init(e,t),ZodMiniType.init(e,t),defineLazy(e,`shape`,()=>t.shape)});function object(e,t){return new ZodMiniObject({type:`object`,shape:e??{},...normalizeParams(t)})}const describe=describe$2,meta=meta$2;function isZ4Schema(e){return!!e._zod}function objectFromShape(e){let t=Object.values(e);if(t.length===0)return object({});let S=t.every(isZ4Schema),w=t.every(e=>!isZ4Schema(e));if(S)return object(e);if(w)return objectType(e);throw Error(`Mixed Zod versions detected in object shape.`)}function safeParse(e,t){return isZ4Schema(e)?safeParse$2(e,t):e.safeParse(t)}async function safeParseAsync(e,t){return isZ4Schema(e)?await safeParseAsync$2(e,t):await e.safeParseAsync(t)}function getObjectShape(e){if(!e)return;let t;if(t=isZ4Schema(e)?e._zod?.def?.shape:e.shape,t){if(typeof t==`function`)try{return t()}catch{return}return t}}function normalizeObjectSchema(e){if(e){if(typeof e==`object`){let t=e,S=e;if(!t._def&&!S._zod){let t=Object.values(e);if(t.length>0&&t.every(e=>typeof e==`object`&&!!e&&(e._def!==void 0||e._zod!==void 0||typeof e.parse==`function`)))return objectFromShape(e)}}if(isZ4Schema(e)){let t=e._zod?.def;if(t&&(t.type===`object`||t.shape!==void 0))return e}else if(e.shape!==void 0)return e}}function getParseErrorMessage(e){if(e&&typeof e==`object`){if(`message`in e&&typeof e.message==`string`)return e.message;if(`issues`in e&&Array.isArray(e.issues)&&e.issues.length>0){let t=e.issues[0];if(t&&typeof t==`object`&&`message`in t)return String(t.message)}try{return JSON.stringify(e)}catch{return String(e)}}return String(e)}function getSchemaDescription(e){return e.description}function isSchemaOptional(e){if(isZ4Schema(e))return e._zod?.def?.type===`optional`;let t=e;return typeof e.isOptional==`function`?e.isOptional():t._def?.typeName===`ZodOptional`}function getLiteralValue(e){if(isZ4Schema(e)){let t=e._zod?.def;if(t){if(t.value!==void 0)return t.value;if(Array.isArray(t.values)&&t.values.length>0)return t.values[0]}}let t=e._def;if(t){if(t.value!==void 0)return t.value;if(Array.isArray(t.values)&&t.values.length>0)return t.values[0]}let S=e.value;if(S!==void 0)return S}const LATEST_PROTOCOL_VERSION=`2025-11-25`,DEFAULT_NEGOTIATED_PROTOCOL_VERSION=`2025-03-26`,SUPPORTED_PROTOCOL_VERSIONS=[LATEST_PROTOCOL_VERSION,`2025-06-18`,`2025-03-26`,`2024-11-05`,`2024-10-07`],RELATED_TASK_META_KEY=`io.modelcontextprotocol/related-task`,JSONRPC_VERSION=`2.0`,AssertObjectSchema=custom(e=>e!==null&&(typeof e==`object`||typeof e==`function`)),ProgressTokenSchema=union([string$2(),number$1().int()]),CursorSchema=string$2(),TaskCreationParamsSchema=looseObject({ttl:number$1().optional(),pollInterval:number$1().optional()}),TaskMetadataSchema=object$1({ttl:number$1().optional()}),RelatedTaskMetadataSchema=object$1({taskId:string$2()}),RequestMetaSchema=looseObject({progressToken:ProgressTokenSchema.optional(),[RELATED_TASK_META_KEY]:RelatedTaskMetadataSchema.optional()}),BaseRequestParamsSchema=object$1({_meta:RequestMetaSchema.optional()}),TaskAugmentedRequestParamsSchema=BaseRequestParamsSchema.extend({task:TaskMetadataSchema.optional()}),isTaskAugmentedRequestParams=e=>TaskAugmentedRequestParamsSchema.safeParse(e).success,RequestSchema=object$1({method:string$2(),params:BaseRequestParamsSchema.loose().optional()}),NotificationsParamsSchema=object$1({_meta:RequestMetaSchema.optional()}),NotificationSchema=object$1({method:string$2(),params:NotificationsParamsSchema.loose().optional()}),ResultSchema=looseObject({_meta:RequestMetaSchema.optional()}),RequestIdSchema=union([string$2(),number$1().int()]),JSONRPCRequestSchema=object$1({jsonrpc:literal(`2.0`),id:RequestIdSchema,...RequestSchema.shape}).strict(),isJSONRPCRequest=e=>JSONRPCRequestSchema.safeParse(e).success,JSONRPCNotificationSchema=object$1({jsonrpc:literal(`2.0`),...NotificationSchema.shape}).strict(),isJSONRPCNotification=e=>JSONRPCNotificationSchema.safeParse(e).success,JSONRPCResultResponseSchema=object$1({jsonrpc:literal(`2.0`),id:RequestIdSchema,result:ResultSchema}).strict(),isJSONRPCResultResponse=e=>JSONRPCResultResponseSchema.safeParse(e).success;var ErrorCode;(function(e){e[e.ConnectionClosed=-32e3]=`ConnectionClosed`,e[e.RequestTimeout=-32001]=`RequestTimeout`,e[e.ParseError=-32700]=`ParseError`,e[e.InvalidRequest=-32600]=`InvalidRequest`,e[e.MethodNotFound=-32601]=`MethodNotFound`,e[e.InvalidParams=-32602]=`InvalidParams`,e[e.InternalError=-32603]=`InternalError`,e[e.UrlElicitationRequired=-32042]=`UrlElicitationRequired`})(ErrorCode||={});const JSONRPCErrorResponseSchema=object$1({jsonrpc:literal(`2.0`),id:RequestIdSchema.optional(),error:object$1({code:number$1().int(),message:string$2(),data:unknown$2().optional()})}).strict(),isJSONRPCErrorResponse=e=>JSONRPCErrorResponseSchema.safeParse(e).success,JSONRPCMessageSchema=union([JSONRPCRequestSchema,JSONRPCNotificationSchema,JSONRPCResultResponseSchema,JSONRPCErrorResponseSchema]),JSONRPCResponseSchema=union([JSONRPCResultResponseSchema,JSONRPCErrorResponseSchema]),EmptyResultSchema=ResultSchema.strict(),CancelledNotificationParamsSchema=NotificationsParamsSchema.extend({requestId:RequestIdSchema.optional(),reason:string$2().optional()}),CancelledNotificationSchema=NotificationSchema.extend({method:literal(`notifications/cancelled`),params:CancelledNotificationParamsSchema}),IconSchema=object$1({src:string$2(),mimeType:string$2().optional(),sizes:array(string$2()).optional(),theme:_enum([`light`,`dark`]).optional()}),IconsSchema=object$1({icons:array(IconSchema).optional()}),BaseMetadataSchema=object$1({name:string$2(),title:string$2().optional()}),ImplementationSchema=BaseMetadataSchema.extend({...BaseMetadataSchema.shape,...IconsSchema.shape,version:string$2(),websiteUrl:string$2().optional(),description:string$2().optional()}),FormElicitationCapabilitySchema=intersection(object$1({applyDefaults:boolean$1().optional()}),record(string$2(),unknown$2())),ElicitationCapabilitySchema=preprocess$1(e=>e&&typeof e==`object`&&!Array.isArray(e)&&Object.keys(e).length===0?{form:{}}:e,intersection(object$1({form:FormElicitationCapabilitySchema.optional(),url:AssertObjectSchema.optional()}),record(string$2(),unknown$2()).optional())),ClientTasksCapabilitySchema=looseObject({list:AssertObjectSchema.optional(),cancel:AssertObjectSchema.optional(),requests:looseObject({sampling:looseObject({createMessage:AssertObjectSchema.optional()}).optional(),elicitation:looseObject({create:AssertObjectSchema.optional()}).optional()}).optional()}),ServerTasksCapabilitySchema=looseObject({list:AssertObjectSchema.optional(),cancel:AssertObjectSchema.optional(),requests:looseObject({tools:looseObject({call:AssertObjectSchema.optional()}).optional()}).optional()}),ClientCapabilitiesSchema=object$1({experimental:record(string$2(),AssertObjectSchema).optional(),sampling:object$1({context:AssertObjectSchema.optional(),tools:AssertObjectSchema.optional()}).optional(),elicitation:ElicitationCapabilitySchema.optional(),roots:object$1({listChanged:boolean$1().optional()}).optional(),tasks:ClientTasksCapabilitySchema.optional(),extensions:record(string$2(),AssertObjectSchema).optional()}),InitializeRequestParamsSchema=BaseRequestParamsSchema.extend({protocolVersion:string$2(),capabilities:ClientCapabilitiesSchema,clientInfo:ImplementationSchema}),InitializeRequestSchema=RequestSchema.extend({method:literal(`initialize`),params:InitializeRequestParamsSchema}),isInitializeRequest=e=>InitializeRequestSchema.safeParse(e).success,ServerCapabilitiesSchema=object$1({experimental:record(string$2(),AssertObjectSchema).optional(),logging:AssertObjectSchema.optional(),completions:AssertObjectSchema.optional(),prompts:object$1({listChanged:boolean$1().optional()}).optional(),resources:object$1({subscribe:boolean$1().optional(),listChanged:boolean$1().optional()}).optional(),tools:object$1({listChanged:boolean$1().optional()}).optional(),tasks:ServerTasksCapabilitySchema.optional(),extensions:record(string$2(),AssertObjectSchema).optional()}),InitializeResultSchema=ResultSchema.extend({protocolVersion:string$2(),capabilities:ServerCapabilitiesSchema,serverInfo:ImplementationSchema,instructions:string$2().optional()}),InitializedNotificationSchema=NotificationSchema.extend({method:literal(`notifications/initialized`),params:NotificationsParamsSchema.optional()}),isInitializedNotification=e=>InitializedNotificationSchema.safeParse(e).success,PingRequestSchema=RequestSchema.extend({method:literal(`ping`),params:BaseRequestParamsSchema.optional()}),ProgressSchema=object$1({progress:number$1(),total:optional(number$1()),message:optional(string$2())}),ProgressNotificationParamsSchema=object$1({...NotificationsParamsSchema.shape,...ProgressSchema.shape,progressToken:ProgressTokenSchema}),ProgressNotificationSchema=NotificationSchema.extend({method:literal(`notifications/progress`),params:ProgressNotificationParamsSchema}),PaginatedRequestParamsSchema=BaseRequestParamsSchema.extend({cursor:CursorSchema.optional()}),PaginatedRequestSchema=RequestSchema.extend({params:PaginatedRequestParamsSchema.optional()}),PaginatedResultSchema=ResultSchema.extend({nextCursor:CursorSchema.optional()}),TaskStatusSchema=_enum([`working`,`input_required`,`completed`,`failed`,`cancelled`]),TaskSchema=object$1({taskId:string$2(),status:TaskStatusSchema,ttl:union([number$1(),_null()]),createdAt:string$2(),lastUpdatedAt:string$2(),pollInterval:optional(number$1()),statusMessage:optional(string$2())}),CreateTaskResultSchema=ResultSchema.extend({task:TaskSchema}),TaskStatusNotificationParamsSchema=NotificationsParamsSchema.merge(TaskSchema),TaskStatusNotificationSchema=NotificationSchema.extend({method:literal(`notifications/tasks/status`),params:TaskStatusNotificationParamsSchema}),GetTaskRequestSchema=RequestSchema.extend({method:literal(`tasks/get`),params:BaseRequestParamsSchema.extend({taskId:string$2()})}),GetTaskResultSchema=ResultSchema.merge(TaskSchema),GetTaskPayloadRequestSchema=RequestSchema.extend({method:literal(`tasks/result`),params:BaseRequestParamsSchema.extend({taskId:string$2()})}),GetTaskPayloadResultSchema=ResultSchema.loose(),ListTasksRequestSchema=PaginatedRequestSchema.extend({method:literal(`tasks/list`)}),ListTasksResultSchema=PaginatedResultSchema.extend({tasks:array(TaskSchema)}),CancelTaskRequestSchema=RequestSchema.extend({method:literal(`tasks/cancel`),params:BaseRequestParamsSchema.extend({taskId:string$2()})}),CancelTaskResultSchema=ResultSchema.merge(TaskSchema),ResourceContentsSchema=object$1({uri:string$2(),mimeType:optional(string$2()),_meta:record(string$2(),unknown$2()).optional()}),TextResourceContentsSchema=ResourceContentsSchema.extend({text:string$2()}),Base64Schema=string$2().refine(e=>{try{return atob(e),!0}catch{return!1}},{message:`Invalid Base64 string`}),BlobResourceContentsSchema=ResourceContentsSchema.extend({blob:Base64Schema}),RoleSchema=_enum([`user`,`assistant`]),AnnotationsSchema=object$1({audience:array(RoleSchema).optional(),priority:number$1().min(0).max(1).optional(),lastModified:datetime({offset:!0}).optional()}),ResourceSchema=object$1({...BaseMetadataSchema.shape,...IconsSchema.shape,uri:string$2(),description:optional(string$2()),mimeType:optional(string$2()),size:optional(number$1()),annotations:AnnotationsSchema.optional(),_meta:optional(looseObject({}))}),ResourceTemplateSchema=object$1({...BaseMetadataSchema.shape,...IconsSchema.shape,uriTemplate:string$2(),description:optional(string$2()),mimeType:optional(string$2()),annotations:AnnotationsSchema.optional(),_meta:optional(looseObject({}))}),ListResourcesRequestSchema=PaginatedRequestSchema.extend({method:literal(`resources/list`)}),ListResourcesResultSchema=PaginatedResultSchema.extend({resources:array(ResourceSchema)}),ListResourceTemplatesRequestSchema=PaginatedRequestSchema.extend({method:literal(`resources/templates/list`)}),ListResourceTemplatesResultSchema=PaginatedResultSchema.extend({resourceTemplates:array(ResourceTemplateSchema)}),ResourceRequestParamsSchema=BaseRequestParamsSchema.extend({uri:string$2()}),ReadResourceRequestParamsSchema=ResourceRequestParamsSchema,ReadResourceRequestSchema=RequestSchema.extend({method:literal(`resources/read`),params:ReadResourceRequestParamsSchema}),ReadResourceResultSchema=ResultSchema.extend({contents:array(union([TextResourceContentsSchema,BlobResourceContentsSchema]))}),ResourceListChangedNotificationSchema=NotificationSchema.extend({method:literal(`notifications/resources/list_changed`),params:NotificationsParamsSchema.optional()}),SubscribeRequestParamsSchema=ResourceRequestParamsSchema,SubscribeRequestSchema=RequestSchema.extend({method:literal(`resources/subscribe`),params:SubscribeRequestParamsSchema}),UnsubscribeRequestParamsSchema=ResourceRequestParamsSchema,UnsubscribeRequestSchema=RequestSchema.extend({method:literal(`resources/unsubscribe`),params:UnsubscribeRequestParamsSchema}),ResourceUpdatedNotificationParamsSchema=NotificationsParamsSchema.extend({uri:string$2()}),ResourceUpdatedNotificationSchema=NotificationSchema.extend({method:literal(`notifications/resources/updated`),params:ResourceUpdatedNotificationParamsSchema}),PromptArgumentSchema=object$1({name:string$2(),description:optional(string$2()),required:optional(boolean$1())}),PromptSchema=object$1({...BaseMetadataSchema.shape,...IconsSchema.shape,description:optional(string$2()),arguments:optional(array(PromptArgumentSchema)),_meta:optional(looseObject({}))}),ListPromptsRequestSchema=PaginatedRequestSchema.extend({method:literal(`prompts/list`)}),ListPromptsResultSchema=PaginatedResultSchema.extend({prompts:array(PromptSchema)}),GetPromptRequestParamsSchema=BaseRequestParamsSchema.extend({name:string$2(),arguments:record(string$2(),string$2()).optional()}),GetPromptRequestSchema=RequestSchema.extend({method:literal(`prompts/get`),params:GetPromptRequestParamsSchema}),TextContentSchema=object$1({type:literal(`text`),text:string$2(),annotations:AnnotationsSchema.optional(),_meta:record(string$2(),unknown$2()).optional()}),ImageContentSchema=object$1({type:literal(`image`),data:Base64Schema,mimeType:string$2(),annotations:AnnotationsSchema.optional(),_meta:record(string$2(),unknown$2()).optional()}),AudioContentSchema=object$1({type:literal(`audio`),data:Base64Schema,mimeType:string$2(),annotations:AnnotationsSchema.optional(),_meta:record(string$2(),unknown$2()).optional()}),ToolUseContentSchema=object$1({type:literal(`tool_use`),name:string$2(),id:string$2(),input:record(string$2(),unknown$2()),_meta:record(string$2(),unknown$2()).optional()}),EmbeddedResourceSchema=object$1({type:literal(`resource`),resource:union([TextResourceContentsSchema,BlobResourceContentsSchema]),annotations:AnnotationsSchema.optional(),_meta:record(string$2(),unknown$2()).optional()}),ResourceLinkSchema=ResourceSchema.extend({type:literal(`resource_link`)}),ContentBlockSchema=union([TextContentSchema,ImageContentSchema,AudioContentSchema,ResourceLinkSchema,EmbeddedResourceSchema]),PromptMessageSchema=object$1({role:RoleSchema,content:ContentBlockSchema}),GetPromptResultSchema=ResultSchema.extend({description:string$2().optional(),messages:array(PromptMessageSchema)}),PromptListChangedNotificationSchema=NotificationSchema.extend({method:literal(`notifications/prompts/list_changed`),params:NotificationsParamsSchema.optional()}),ToolAnnotationsSchema=object$1({title:string$2().optional(),readOnlyHint:boolean$1().optional(),destructiveHint:boolean$1().optional(),idempotentHint:boolean$1().optional(),openWorldHint:boolean$1().optional()}),ToolExecutionSchema=object$1({taskSupport:_enum([`required`,`optional`,`forbidden`]).optional()}),ToolSchema=object$1({...BaseMetadataSchema.shape,...IconsSchema.shape,description:string$2().optional(),inputSchema:object$1({type:literal(`object`),properties:record(string$2(),AssertObjectSchema).optional(),required:array(string$2()).optional()}).catchall(unknown$2()),outputSchema:object$1({type:literal(`object`),properties:record(string$2(),AssertObjectSchema).optional(),required:array(string$2()).optional()}).catchall(unknown$2()).optional(),annotations:ToolAnnotationsSchema.optional(),execution:ToolExecutionSchema.optional(),_meta:record(string$2(),unknown$2()).optional()}),ListToolsRequestSchema=PaginatedRequestSchema.extend({method:literal(`tools/list`)}),ListToolsResultSchema=PaginatedResultSchema.extend({tools:array(ToolSchema)}),CallToolResultSchema=ResultSchema.extend({content:array(ContentBlockSchema).default([]),structuredContent:record(string$2(),unknown$2()).optional(),isError:boolean$1().optional()}),CompatibilityCallToolResultSchema=CallToolResultSchema.or(ResultSchema.extend({toolResult:unknown$2()})),CallToolRequestParamsSchema=TaskAugmentedRequestParamsSchema.extend({name:string$2(),arguments:record(string$2(),unknown$2()).optional()}),CallToolRequestSchema=RequestSchema.extend({method:literal(`tools/call`),params:CallToolRequestParamsSchema}),ToolListChangedNotificationSchema=NotificationSchema.extend({method:literal(`notifications/tools/list_changed`),params:NotificationsParamsSchema.optional()}),ListChangedOptionsBaseSchema=object$1({autoRefresh:boolean$1().default(!0),debounceMs:number$1().int().nonnegative().default(300)}),LoggingLevelSchema=_enum([`debug`,`info`,`notice`,`warning`,`error`,`critical`,`alert`,`emergency`]),SetLevelRequestParamsSchema=BaseRequestParamsSchema.extend({level:LoggingLevelSchema}),SetLevelRequestSchema=RequestSchema.extend({method:literal(`logging/setLevel`),params:SetLevelRequestParamsSchema}),LoggingMessageNotificationParamsSchema=NotificationsParamsSchema.extend({level:LoggingLevelSchema,logger:string$2().optional(),data:unknown$2()}),LoggingMessageNotificationSchema=NotificationSchema.extend({method:literal(`notifications/message`),params:LoggingMessageNotificationParamsSchema}),ModelHintSchema=object$1({name:string$2().optional()}),ModelPreferencesSchema=object$1({hints:array(ModelHintSchema).optional(),costPriority:number$1().min(0).max(1).optional(),speedPriority:number$1().min(0).max(1).optional(),intelligencePriority:number$1().min(0).max(1).optional()}),ToolChoiceSchema=object$1({mode:_enum([`auto`,`required`,`none`]).optional()}),ToolResultContentSchema=object$1({type:literal(`tool_result`),toolUseId:string$2().describe(`The unique identifier for the corresponding tool call.`),content:array(ContentBlockSchema).default([]),structuredContent:object$1({}).loose().optional(),isError:boolean$1().optional(),_meta:record(string$2(),unknown$2()).optional()}),SamplingContentSchema=discriminatedUnion(`type`,[TextContentSchema,ImageContentSchema,AudioContentSchema]),SamplingMessageContentBlockSchema=discriminatedUnion(`type`,[TextContentSchema,ImageContentSchema,AudioContentSchema,ToolUseContentSchema,ToolResultContentSchema]),SamplingMessageSchema=object$1({role:RoleSchema,content:union([SamplingMessageContentBlockSchema,array(SamplingMessageContentBlockSchema)]),_meta:record(string$2(),unknown$2()).optional()}),CreateMessageRequestParamsSchema=TaskAugmentedRequestParamsSchema.extend({messages:array(SamplingMessageSchema),modelPreferences:ModelPreferencesSchema.optional(),systemPrompt:string$2().optional(),includeContext:_enum([`none`,`thisServer`,`allServers`]).optional(),temperature:number$1().optional(),maxTokens:number$1().int(),stopSequences:array(string$2()).optional(),metadata:AssertObjectSchema.optional(),tools:array(ToolSchema).optional(),toolChoice:ToolChoiceSchema.optional()}),CreateMessageRequestSchema=RequestSchema.extend({method:literal(`sampling/createMessage`),params:CreateMessageRequestParamsSchema}),CreateMessageResultSchema=ResultSchema.extend({model:string$2(),stopReason:optional(_enum([`endTurn`,`stopSequence`,`maxTokens`]).or(string$2())),role:RoleSchema,content:SamplingContentSchema}),CreateMessageResultWithToolsSchema=ResultSchema.extend({model:string$2(),stopReason:optional(_enum([`endTurn`,`stopSequence`,`maxTokens`,`toolUse`]).or(string$2())),role:RoleSchema,content:union([SamplingMessageContentBlockSchema,array(SamplingMessageContentBlockSchema)])}),BooleanSchemaSchema=object$1({type:literal(`boolean`),title:string$2().optional(),description:string$2().optional(),default:boolean$1().optional()}),StringSchemaSchema=object$1({type:literal(`string`),title:string$2().optional(),description:string$2().optional(),minLength:number$1().optional(),maxLength:number$1().optional(),format:_enum([`email`,`uri`,`date`,`date-time`]).optional(),default:string$2().optional()}),NumberSchemaSchema=object$1({type:_enum([`number`,`integer`]),title:string$2().optional(),description:string$2().optional(),minimum:number$1().optional(),maximum:number$1().optional(),default:number$1().optional()}),UntitledSingleSelectEnumSchemaSchema=object$1({type:literal(`string`),title:string$2().optional(),description:string$2().optional(),enum:array(string$2()),default:string$2().optional()}),TitledSingleSelectEnumSchemaSchema=object$1({type:literal(`string`),title:string$2().optional(),description:string$2().optional(),oneOf:array(object$1({const:string$2(),title:string$2()})),default:string$2().optional()}),LegacyTitledEnumSchemaSchema=object$1({type:literal(`string`),title:string$2().optional(),description:string$2().optional(),enum:array(string$2()),enumNames:array(string$2()).optional(),default:string$2().optional()}),SingleSelectEnumSchemaSchema=union([UntitledSingleSelectEnumSchemaSchema,TitledSingleSelectEnumSchemaSchema]),UntitledMultiSelectEnumSchemaSchema=object$1({type:literal(`array`),title:string$2().optional(),description:string$2().optional(),minItems:number$1().optional(),maxItems:number$1().optional(),items:object$1({type:literal(`string`),enum:array(string$2())}),default:array(string$2()).optional()}),TitledMultiSelectEnumSchemaSchema=object$1({type:literal(`array`),title:string$2().optional(),description:string$2().optional(),minItems:number$1().optional(),maxItems:number$1().optional(),items:object$1({anyOf:array(object$1({const:string$2(),title:string$2()}))}),default:array(string$2()).optional()}),MultiSelectEnumSchemaSchema=union([UntitledMultiSelectEnumSchemaSchema,TitledMultiSelectEnumSchemaSchema]),EnumSchemaSchema=union([LegacyTitledEnumSchemaSchema,SingleSelectEnumSchemaSchema,MultiSelectEnumSchemaSchema]),PrimitiveSchemaDefinitionSchema=union([EnumSchemaSchema,BooleanSchemaSchema,StringSchemaSchema,NumberSchemaSchema]),ElicitRequestFormParamsSchema=TaskAugmentedRequestParamsSchema.extend({mode:literal(`form`).optional(),message:string$2(),requestedSchema:object$1({type:literal(`object`),properties:record(string$2(),PrimitiveSchemaDefinitionSchema),required:array(string$2()).optional()})}),ElicitRequestURLParamsSchema=TaskAugmentedRequestParamsSchema.extend({mode:literal(`url`),message:string$2(),elicitationId:string$2(),url:string$2().url()}),ElicitRequestParamsSchema=union([ElicitRequestFormParamsSchema,ElicitRequestURLParamsSchema]),ElicitRequestSchema=RequestSchema.extend({method:literal(`elicitation/create`),params:ElicitRequestParamsSchema}),ElicitationCompleteNotificationParamsSchema=NotificationsParamsSchema.extend({elicitationId:string$2()}),ElicitationCompleteNotificationSchema=NotificationSchema.extend({method:literal(`notifications/elicitation/complete`),params:ElicitationCompleteNotificationParamsSchema}),ElicitResultSchema=ResultSchema.extend({action:_enum([`accept`,`decline`,`cancel`]),content:preprocess$1(e=>e===null?void 0:e,record(string$2(),union([string$2(),number$1(),boolean$1(),array(string$2())])).optional())}),ResourceTemplateReferenceSchema=object$1({type:literal(`ref/resource`),uri:string$2()}),PromptReferenceSchema=object$1({type:literal(`ref/prompt`),name:string$2()}),CompleteRequestParamsSchema=BaseRequestParamsSchema.extend({ref:union([PromptReferenceSchema,ResourceTemplateReferenceSchema]),argument:object$1({name:string$2(),value:string$2()}),context:object$1({arguments:record(string$2(),string$2()).optional()}).optional()}),CompleteRequestSchema=RequestSchema.extend({method:literal(`completion/complete`),params:CompleteRequestParamsSchema});function assertCompleteRequestPrompt(e){if(e.params.ref.type!==`ref/prompt`)throw TypeError(`Expected CompleteRequestPrompt, but got ${e.params.ref.type}`)}function assertCompleteRequestResourceTemplate(e){if(e.params.ref.type!==`ref/resource`)throw TypeError(`Expected CompleteRequestResourceTemplate, but got ${e.params.ref.type}`)}const CompleteResultSchema=ResultSchema.extend({completion:looseObject({values:array(string$2()).max(100),total:optional(number$1().int()),hasMore:optional(boolean$1())})}),RootSchema=object$1({uri:string$2().startsWith(`file://`),name:string$2().optional(),_meta:record(string$2(),unknown$2()).optional()}),ListRootsRequestSchema=RequestSchema.extend({method:literal(`roots/list`),params:BaseRequestParamsSchema.optional()}),ListRootsResultSchema=ResultSchema.extend({roots:array(RootSchema)}),RootsListChangedNotificationSchema=NotificationSchema.extend({method:literal(`notifications/roots/list_changed`),params:NotificationsParamsSchema.optional()}),ClientRequestSchema=union([PingRequestSchema,InitializeRequestSchema,CompleteRequestSchema,SetLevelRequestSchema,GetPromptRequestSchema,ListPromptsRequestSchema,ListResourcesRequestSchema,ListResourceTemplatesRequestSchema,ReadResourceRequestSchema,SubscribeRequestSchema,UnsubscribeRequestSchema,CallToolRequestSchema,ListToolsRequestSchema,GetTaskRequestSchema,GetTaskPayloadRequestSchema,ListTasksRequestSchema,CancelTaskRequestSchema]),ClientNotificationSchema=union([CancelledNotificationSchema,ProgressNotificationSchema,InitializedNotificationSchema,RootsListChangedNotificationSchema,TaskStatusNotificationSchema]),ClientResultSchema=union([EmptyResultSchema,CreateMessageResultSchema,CreateMessageResultWithToolsSchema,ElicitResultSchema,ListRootsResultSchema,GetTaskResultSchema,ListTasksResultSchema,CreateTaskResultSchema]),ServerRequestSchema=union([PingRequestSchema,CreateMessageRequestSchema,ElicitRequestSchema,ListRootsRequestSchema,GetTaskRequestSchema,GetTaskPayloadRequestSchema,ListTasksRequestSchema,CancelTaskRequestSchema]),ServerNotificationSchema=union([CancelledNotificationSchema,ProgressNotificationSchema,LoggingMessageNotificationSchema,ResourceUpdatedNotificationSchema,ResourceListChangedNotificationSchema,ToolListChangedNotificationSchema,PromptListChangedNotificationSchema,TaskStatusNotificationSchema,ElicitationCompleteNotificationSchema]),ServerResultSchema=union([EmptyResultSchema,InitializeResultSchema,CompleteResultSchema,GetPromptResultSchema,ListPromptsResultSchema,ListResourcesResultSchema,ListResourceTemplatesResultSchema,ReadResourceResultSchema,CallToolResultSchema,ListToolsResultSchema,GetTaskResultSchema,ListTasksResultSchema,CreateTaskResultSchema]);var McpError=class e extends Error{constructor(e,t,S){super(`MCP error ${e}: ${t}`),this.code=e,this.data=S,this.name=`McpError`}static fromError(t,S,w){if(t===ErrorCode.UrlElicitationRequired&&w){let e=w;if(e.elicitations)return new UrlElicitationRequiredError(e.elicitations,S)}return new e(t,S,w)}},UrlElicitationRequiredError=class extends McpError{constructor(e,t=`URL elicitation${e.length>1?`s`:``} required`){super(ErrorCode.UrlElicitationRequired,t,{elicitations:e})}get elicitations(){return this.data?.elicitations??[]}};function isTerminal(e){return e===`completed`||e===`failed`||e===`cancelled`}const ignoreOverride=Symbol(`Let zodToJsonSchema decide on which parser to use`),defaultOptions={name:void 0,$refStrategy:`root`,basePath:[`#`],effectStrategy:`input`,pipeStrategy:`all`,dateStrategy:`format:date-time`,mapStrategy:`entries`,removeAdditionalStrategy:`passthrough`,allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:`definitions`,target:`jsonSchema7`,strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:`escape`,applyRegexFlags:!1,emailStrategy:`format:email`,base64Strategy:`contentEncoding:base64`,nameStrategy:`ref`,openAiAnyTypeName:`OpenAiAnyType`},getDefaultOptions=e=>typeof e==`string`?{...defaultOptions,name:e}:{...defaultOptions,...e},getRefs=e=>{let t=getDefaultOptions(e),S=t.name===void 0?t.basePath:[...t.basePath,t.definitionPath,t.name];return{...t,flags:{hasReferencedOpenAiAnyType:!1},currentPath:S,propertyPath:void 0,seen:new Map(Object.entries(t.definitions).map(([e,S])=>[S._def,{def:S._def,path:[...t.basePath,t.definitionPath,e],jsonSchema:void 0}]))}};function addErrorMessage(e,t,S,w){w?.errorMessages&&S&&(e.errorMessage={...e.errorMessage,[t]:S})}function setResponseValueAndErrors(e,t,S,w,E){e[t]=S,addErrorMessage(e,t,w,E)}const getRelativePath=(e,t)=>{let S=0;for(;S<e.length&&S<t.length&&e[S]===t[S];S++);return[(e.length-S).toString(),...t.slice(S)].join(`/`)};function parseAnyDef(e){if(e.target!==`openAi`)return{};let t=[...e.basePath,e.definitionPath,e.openAiAnyTypeName];return e.flags.hasReferencedOpenAiAnyType=!0,{$ref:e.$refStrategy===`relative`?getRelativePath(t,e.currentPath):t.join(`/`)}}function parseArrayDef(e,t){let S={type:`array`};return e.type?._def&&e.type?._def?.typeName!==ZodFirstPartyTypeKind.ZodAny&&(S.items=parseDef(e.type._def,{...t,currentPath:[...t.currentPath,`items`]})),e.minLength&&setResponseValueAndErrors(S,`minItems`,e.minLength.value,e.minLength.message,t),e.maxLength&&setResponseValueAndErrors(S,`maxItems`,e.maxLength.value,e.maxLength.message,t),e.exactLength&&(setResponseValueAndErrors(S,`minItems`,e.exactLength.value,e.exactLength.message,t),setResponseValueAndErrors(S,`maxItems`,e.exactLength.value,e.exactLength.message,t)),S}function parseBigintDef(e,t){let S={type:`integer`,format:`int64`};if(!e.checks)return S;for(let w of e.checks)switch(w.kind){case`min`:t.target===`jsonSchema7`?w.inclusive?setResponseValueAndErrors(S,`minimum`,w.value,w.message,t):setResponseValueAndErrors(S,`exclusiveMinimum`,w.value,w.message,t):(w.inclusive||(S.exclusiveMinimum=!0),setResponseValueAndErrors(S,`minimum`,w.value,w.message,t));break;case`max`:t.target===`jsonSchema7`?w.inclusive?setResponseValueAndErrors(S,`maximum`,w.value,w.message,t):setResponseValueAndErrors(S,`exclusiveMaximum`,w.value,w.message,t):(w.inclusive||(S.exclusiveMaximum=!0),setResponseValueAndErrors(S,`maximum`,w.value,w.message,t));break;case`multipleOf`:setResponseValueAndErrors(S,`multipleOf`,w.value,w.message,t);break}return S}function parseBooleanDef(){return{type:`boolean`}}function parseBrandedDef(e,t){return parseDef(e.type._def,t)}const parseCatchDef=(e,t)=>parseDef(e.innerType._def,t);function parseDateDef(e,t,S){let w=S??t.dateStrategy;if(Array.isArray(w))return{anyOf:w.map((S,w)=>parseDateDef(e,t,S))};switch(w){case`string`:case`format:date-time`:return{type:`string`,format:`date-time`};case`format:date`:return{type:`string`,format:`date`};case`integer`:return integerDateParser(e,t)}}const integerDateParser=(e,t)=>{let S={type:`integer`,format:`unix-time`};if(t.target===`openApi3`)return S;for(let w of e.checks)switch(w.kind){case`min`:setResponseValueAndErrors(S,`minimum`,w.value,w.message,t);break;case`max`:setResponseValueAndErrors(S,`maximum`,w.value,w.message,t);break}return S};function parseDefaultDef(e,t){return{...parseDef(e.innerType._def,t),default:e.defaultValue()}}function parseEffectsDef(e,t){return t.effectStrategy===`input`?parseDef(e.schema._def,t):parseAnyDef(t)}function parseEnumDef(e){return{type:`string`,enum:Array.from(e.values)}}const isJsonSchema7AllOfType=e=>`type`in e&&e.type===`string`?!1:`allOf`in e;function parseIntersectionDef(e,t){let S=[parseDef(e.left._def,{...t,currentPath:[...t.currentPath,`allOf`,`0`]}),parseDef(e.right._def,{...t,currentPath:[...t.currentPath,`allOf`,`1`]})].filter(e=>!!e),w=t.target===`jsonSchema2019-09`?{unevaluatedProperties:!1}:void 0,E=[];return S.forEach(e=>{if(isJsonSchema7AllOfType(e))E.push(...e.allOf),e.unevaluatedProperties===void 0&&(w=void 0);else{let t=e;if(`additionalProperties`in e&&e.additionalProperties===!1){let{additionalProperties:S,...w}=e;t=w}else w=void 0;E.push(t)}}),E.length?{allOf:E,...w}:void 0}function parseLiteralDef(e,t){let S=typeof e.value;return S!==`bigint`&&S!==`number`&&S!==`boolean`&&S!==`string`?{type:Array.isArray(e.value)?`array`:`object`}:t.target===`openApi3`?{type:S===`bigint`?`integer`:S,enum:[e.value]}:{type:S===`bigint`?`integer`:S,const:e.value}}let emojiRegex;const zodPatterns={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>(emojiRegex===void 0&&(emojiRegex=RegExp(`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,`u`)),emojiRegex),uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function parseStringDef(e,t){let S={type:`string`};if(e.checks)for(let w of e.checks)switch(w.kind){case`min`:setResponseValueAndErrors(S,`minLength`,typeof S.minLength==`number`?Math.max(S.minLength,w.value):w.value,w.message,t);break;case`max`:setResponseValueAndErrors(S,`maxLength`,typeof S.maxLength==`number`?Math.min(S.maxLength,w.value):w.value,w.message,t);break;case`email`:switch(t.emailStrategy){case`format:email`:addFormat(S,`email`,w.message,t);break;case`format:idn-email`:addFormat(S,`idn-email`,w.message,t);break;case`pattern:zod`:addPattern(S,zodPatterns.email,w.message,t);break}break;case`url`:addFormat(S,`uri`,w.message,t);break;case`uuid`:addFormat(S,`uuid`,w.message,t);break;case`regex`:addPattern(S,w.regex,w.message,t);break;case`cuid`:addPattern(S,zodPatterns.cuid,w.message,t);break;case`cuid2`:addPattern(S,zodPatterns.cuid2,w.message,t);break;case`startsWith`:addPattern(S,RegExp(`^${escapeLiteralCheckValue(w.value,t)}`),w.message,t);break;case`endsWith`:addPattern(S,RegExp(`${escapeLiteralCheckValue(w.value,t)}$`),w.message,t);break;case`datetime`:addFormat(S,`date-time`,w.message,t);break;case`date`:addFormat(S,`date`,w.message,t);break;case`time`:addFormat(S,`time`,w.message,t);break;case`duration`:addFormat(S,`duration`,w.message,t);break;case`length`:setResponseValueAndErrors(S,`minLength`,typeof S.minLength==`number`?Math.max(S.minLength,w.value):w.value,w.message,t),setResponseValueAndErrors(S,`maxLength`,typeof S.maxLength==`number`?Math.min(S.maxLength,w.value):w.value,w.message,t);break;case`includes`:addPattern(S,RegExp(escapeLiteralCheckValue(w.value,t)),w.message,t);break;case`ip`:w.version!==`v6`&&addFormat(S,`ipv4`,w.message,t),w.version!==`v4`&&addFormat(S,`ipv6`,w.message,t);break;case`base64url`:addPattern(S,zodPatterns.base64url,w.message,t);break;case`jwt`:addPattern(S,zodPatterns.jwt,w.message,t);break;case`cidr`:w.version!==`v6`&&addPattern(S,zodPatterns.ipv4Cidr,w.message,t),w.version!==`v4`&&addPattern(S,zodPatterns.ipv6Cidr,w.message,t);break;case`emoji`:addPattern(S,zodPatterns.emoji(),w.message,t);break;case`ulid`:addPattern(S,zodPatterns.ulid,w.message,t);break;case`base64`:switch(t.base64Strategy){case`format:binary`:addFormat(S,`binary`,w.message,t);break;case`contentEncoding:base64`:setResponseValueAndErrors(S,`contentEncoding`,`base64`,w.message,t);break;case`pattern:zod`:addPattern(S,zodPatterns.base64,w.message,t);break}break;case`nanoid`:addPattern(S,zodPatterns.nanoid,w.message,t);case`toLowerCase`:case`toUpperCase`:case`trim`:break;default:(e=>{})(w)}return S}function escapeLiteralCheckValue(e,t){return t.patternStrategy===`escape`?escapeNonAlphaNumeric(e):e}const ALPHA_NUMERIC=new Set(`ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789`);function escapeNonAlphaNumeric(e){let t=``;for(let S=0;S<e.length;S++)ALPHA_NUMERIC.has(e[S])||(t+=`\\`),t+=e[S];return t}function addFormat(e,t,S,w){e.format||e.anyOf?.some(e=>e.format)?(e.anyOf||=[],e.format&&(e.anyOf.push({format:e.format,...e.errorMessage&&w.errorMessages&&{errorMessage:{format:e.errorMessage.format}}}),delete e.format,e.errorMessage&&(delete e.errorMessage.format,Object.keys(e.errorMessage).length===0&&delete e.errorMessage)),e.anyOf.push({format:t,...S&&w.errorMessages&&{errorMessage:{format:S}}})):setResponseValueAndErrors(e,`format`,t,S,w)}function addPattern(e,t,S,w){e.pattern||e.allOf?.some(e=>e.pattern)?(e.allOf||=[],e.pattern&&(e.allOf.push({pattern:e.pattern,...e.errorMessage&&w.errorMessages&&{errorMessage:{pattern:e.errorMessage.pattern}}}),delete e.pattern,e.errorMessage&&(delete e.errorMessage.pattern,Object.keys(e.errorMessage).length===0&&delete e.errorMessage)),e.allOf.push({pattern:stringifyRegExpWithFlags(t,w),...S&&w.errorMessages&&{errorMessage:{pattern:S}}})):setResponseValueAndErrors(e,`pattern`,stringifyRegExpWithFlags(t,w),S,w)}function stringifyRegExpWithFlags(e,t){if(!t.applyRegexFlags||!e.flags)return e.source;let S={i:e.flags.includes(`i`),m:e.flags.includes(`m`),s:e.flags.includes(`s`)},w=S.i?e.source.toLowerCase():e.source,E=``,D=!1,O=!1,k=!1;for(let e=0;e<w.length;e++){if(D){E+=w[e],D=!1;continue}if(S.i){if(O){if(w[e].match(/[a-z]/)){k?(E+=w[e],E+=`${w[e-2]}-${w[e]}`.toUpperCase(),k=!1):w[e+1]===`-`&&w[e+2]?.match(/[a-z]/)?(E+=w[e],k=!0):E+=`${w[e]}${w[e].toUpperCase()}`;continue}}else if(w[e].match(/[a-z]/)){E+=`[${w[e]}${w[e].toUpperCase()}]`;continue}}if(S.m){if(w[e]===`^`){E+=`(^|(?<=[\r
474
474
  ]))`;continue}else if(w[e]===`$`){E+=`($|(?=[\r
475
475
  ]))`;continue}}if(S.s&&w[e]===`.`){E+=O?`${w[e]}\r\n`:`[${w[e]}\r\n]`;continue}E+=w[e],w[e]===`\\`?D=!0:O&&w[e]===`]`?O=!1:!O&&w[e]===`[`&&(O=!0)}try{new RegExp(E)}catch{return console.warn(`Could not convert regex pattern at ${t.currentPath.join(`/`)} to a flag-independent form! Falling back to the flag-ignorant source`),e.source}return E}function parseRecordDef(e,t){if(t.target===`openAi`&&console.warn(`Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.`),t.target===`openApi3`&&e.keyType?._def.typeName===ZodFirstPartyTypeKind.ZodEnum)return{type:`object`,required:e.keyType._def.values,properties:e.keyType._def.values.reduce((S,w)=>({...S,[w]:parseDef(e.valueType._def,{...t,currentPath:[...t.currentPath,`properties`,w]})??parseAnyDef(t)}),{}),additionalProperties:t.rejectedAdditionalProperties};let S={type:`object`,additionalProperties:parseDef(e.valueType._def,{...t,currentPath:[...t.currentPath,`additionalProperties`]})??t.allowedAdditionalProperties};if(t.target===`openApi3`)return S;if(e.keyType?._def.typeName===ZodFirstPartyTypeKind.ZodString&&e.keyType._def.checks?.length){let{type:w,...E}=parseStringDef(e.keyType._def,t);return{...S,propertyNames:E}}else if(e.keyType?._def.typeName===ZodFirstPartyTypeKind.ZodEnum)return{...S,propertyNames:{enum:e.keyType._def.values}};else if(e.keyType?._def.typeName===ZodFirstPartyTypeKind.ZodBranded&&e.keyType._def.type._def.typeName===ZodFirstPartyTypeKind.ZodString&&e.keyType._def.type._def.checks?.length){let{type:w,...E}=parseBrandedDef(e.keyType._def,t);return{...S,propertyNames:E}}return S}function parseMapDef(e,t){return t.mapStrategy===`record`?parseRecordDef(e,t):{type:`array`,maxItems:125,items:{type:`array`,items:[parseDef(e.keyType._def,{...t,currentPath:[...t.currentPath,`items`,`items`,`0`]})||parseAnyDef(t),parseDef(e.valueType._def,{...t,currentPath:[...t.currentPath,`items`,`items`,`1`]})||parseAnyDef(t)],minItems:2,maxItems:2}}}function parseNativeEnumDef(e){let t=e.values,S=Object.keys(e.values).filter(e=>typeof t[t[e]]!=`number`).map(e=>t[e]),w=Array.from(new Set(S.map(e=>typeof e)));return{type:w.length===1?w[0]===`string`?`string`:`number`:[`string`,`number`],enum:S}}function parseNeverDef(e){return e.target===`openAi`?void 0:{not:parseAnyDef({...e,currentPath:[...e.currentPath,`not`]})}}function parseNullDef(e){return e.target===`openApi3`?{enum:[`null`],nullable:!0}:{type:`null`}}const primitiveMappings={ZodString:`string`,ZodNumber:`number`,ZodBigInt:`integer`,ZodBoolean:`boolean`,ZodNull:`null`};function parseUnionDef(e,t){if(t.target===`openApi3`)return asAnyOf(e,t);let S=e.options instanceof Map?Array.from(e.options.values()):e.options;if(S.every(e=>e._def.typeName in primitiveMappings&&(!e._def.checks||!e._def.checks.length))){let e=S.reduce((e,t)=>{let S=primitiveMappings[t._def.typeName];return S&&!e.includes(S)?[...e,S]:e},[]);return{type:e.length>1?e:e[0]}}else if(S.every(e=>e._def.typeName===`ZodLiteral`&&!e.description)){let e=S.reduce((e,t)=>{let S=typeof t._def.value;switch(S){case`string`:case`number`:case`boolean`:return[...e,S];case`bigint`:return[...e,`integer`];case`object`:if(t._def.value===null)return[...e,`null`];default:return e}},[]);if(e.length===S.length){let t=e.filter((e,t,S)=>S.indexOf(e)===t);return{type:t.length>1?t:t[0],enum:S.reduce((e,t)=>e.includes(t._def.value)?e:[...e,t._def.value],[])}}}else if(S.every(e=>e._def.typeName===`ZodEnum`))return{type:`string`,enum:S.reduce((e,t)=>[...e,...t._def.values.filter(t=>!e.includes(t))],[])};return asAnyOf(e,t)}const asAnyOf=(e,t)=>{let S=(e.options instanceof Map?Array.from(e.options.values()):e.options).map((e,S)=>parseDef(e._def,{...t,currentPath:[...t.currentPath,`anyOf`,`${S}`]})).filter(e=>!!e&&(!t.strictUnions||typeof e==`object`&&Object.keys(e).length>0));return S.length?{anyOf:S}:void 0};function parseNullableDef(e,t){if([`ZodString`,`ZodNumber`,`ZodBigInt`,`ZodBoolean`,`ZodNull`].includes(e.innerType._def.typeName)&&(!e.innerType._def.checks||!e.innerType._def.checks.length))return t.target===`openApi3`?{type:primitiveMappings[e.innerType._def.typeName],nullable:!0}:{type:[primitiveMappings[e.innerType._def.typeName],`null`]};if(t.target===`openApi3`){let S=parseDef(e.innerType._def,{...t,currentPath:[...t.currentPath]});return S&&`$ref`in S?{allOf:[S],nullable:!0}:S&&{...S,nullable:!0}}let S=parseDef(e.innerType._def,{...t,currentPath:[...t.currentPath,`anyOf`,`0`]});return S&&{anyOf:[S,{type:`null`}]}}function parseNumberDef(e,t){let S={type:`number`};if(!e.checks)return S;for(let w of e.checks)switch(w.kind){case`int`:S.type=`integer`,addErrorMessage(S,`type`,w.message,t);break;case`min`:t.target===`jsonSchema7`?w.inclusive?setResponseValueAndErrors(S,`minimum`,w.value,w.message,t):setResponseValueAndErrors(S,`exclusiveMinimum`,w.value,w.message,t):(w.inclusive||(S.exclusiveMinimum=!0),setResponseValueAndErrors(S,`minimum`,w.value,w.message,t));break;case`max`:t.target===`jsonSchema7`?w.inclusive?setResponseValueAndErrors(S,`maximum`,w.value,w.message,t):setResponseValueAndErrors(S,`exclusiveMaximum`,w.value,w.message,t):(w.inclusive||(S.exclusiveMaximum=!0),setResponseValueAndErrors(S,`maximum`,w.value,w.message,t));break;case`multipleOf`:setResponseValueAndErrors(S,`multipleOf`,w.value,w.message,t);break}return S}function parseObjectDef(e,t){let S=t.target===`openAi`,w={type:`object`,properties:{}},E=[],D=e.shape();for(let e in D){let O=D[e];if(O===void 0||O._def===void 0)continue;let k=safeIsOptional(O);k&&S&&(O._def.typeName===`ZodOptional`&&(O=O._def.innerType),O.isNullable()||(O=O.nullable()),k=!1);let j=parseDef(O._def,{...t,currentPath:[...t.currentPath,`properties`,e],propertyPath:[...t.currentPath,`properties`,e]});j!==void 0&&(w.properties[e]=j,k||E.push(e))}E.length&&(w.required=E);let O=decideAdditionalProperties(e,t);return O!==void 0&&(w.additionalProperties=O),w}function decideAdditionalProperties(e,t){if(e.catchall._def.typeName!==`ZodNever`)return parseDef(e.catchall._def,{...t,currentPath:[...t.currentPath,`additionalProperties`]});switch(e.unknownKeys){case`passthrough`:return t.allowedAdditionalProperties;case`strict`:return t.rejectedAdditionalProperties;case`strip`:return t.removeAdditionalStrategy===`strict`?t.allowedAdditionalProperties:t.rejectedAdditionalProperties}}function safeIsOptional(e){try{return e.isOptional()}catch{return!0}}const parseOptionalDef=(e,t)=>{if(t.currentPath.toString()===t.propertyPath?.toString())return parseDef(e.innerType._def,t);let S=parseDef(e.innerType._def,{...t,currentPath:[...t.currentPath,`anyOf`,`1`]});return S?{anyOf:[{not:parseAnyDef(t)},S]}:parseAnyDef(t)},parsePipelineDef=(e,t)=>{if(t.pipeStrategy===`input`)return parseDef(e.in._def,t);if(t.pipeStrategy===`output`)return parseDef(e.out._def,t);let S=parseDef(e.in._def,{...t,currentPath:[...t.currentPath,`allOf`,`0`]});return{allOf:[S,parseDef(e.out._def,{...t,currentPath:[...t.currentPath,`allOf`,S?`1`:`0`]})].filter(e=>e!==void 0)}};function parsePromiseDef(e,t){return parseDef(e.type._def,t)}function parseSetDef(e,t){let S={type:`array`,uniqueItems:!0,items:parseDef(e.valueType._def,{...t,currentPath:[...t.currentPath,`items`]})};return e.minSize&&setResponseValueAndErrors(S,`minItems`,e.minSize.value,e.minSize.message,t),e.maxSize&&setResponseValueAndErrors(S,`maxItems`,e.maxSize.value,e.maxSize.message,t),S}function parseTupleDef(e,t){return e.rest?{type:`array`,minItems:e.items.length,items:e.items.map((e,S)=>parseDef(e._def,{...t,currentPath:[...t.currentPath,`items`,`${S}`]})).reduce((e,t)=>t===void 0?e:[...e,t],[]),additionalItems:parseDef(e.rest._def,{...t,currentPath:[...t.currentPath,`additionalItems`]})}:{type:`array`,minItems:e.items.length,maxItems:e.items.length,items:e.items.map((e,S)=>parseDef(e._def,{...t,currentPath:[...t.currentPath,`items`,`${S}`]})).reduce((e,t)=>t===void 0?e:[...e,t],[])}}function parseUndefinedDef(e){return{not:parseAnyDef(e)}}function parseUnknownDef(e){return parseAnyDef(e)}const parseReadonlyDef=(e,t)=>parseDef(e.innerType._def,t),selectParser=(e,t,S)=>{switch(t){case ZodFirstPartyTypeKind.ZodString:return parseStringDef(e,S);case ZodFirstPartyTypeKind.ZodNumber:return parseNumberDef(e,S);case ZodFirstPartyTypeKind.ZodObject:return parseObjectDef(e,S);case ZodFirstPartyTypeKind.ZodBigInt:return parseBigintDef(e,S);case ZodFirstPartyTypeKind.ZodBoolean:return parseBooleanDef();case ZodFirstPartyTypeKind.ZodDate:return parseDateDef(e,S);case ZodFirstPartyTypeKind.ZodUndefined:return parseUndefinedDef(S);case ZodFirstPartyTypeKind.ZodNull:return parseNullDef(S);case ZodFirstPartyTypeKind.ZodArray:return parseArrayDef(e,S);case ZodFirstPartyTypeKind.ZodUnion:case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:return parseUnionDef(e,S);case ZodFirstPartyTypeKind.ZodIntersection:return parseIntersectionDef(e,S);case ZodFirstPartyTypeKind.ZodTuple:return parseTupleDef(e,S);case ZodFirstPartyTypeKind.ZodRecord:return parseRecordDef(e,S);case ZodFirstPartyTypeKind.ZodLiteral:return parseLiteralDef(e,S);case ZodFirstPartyTypeKind.ZodEnum:return parseEnumDef(e);case ZodFirstPartyTypeKind.ZodNativeEnum:return parseNativeEnumDef(e);case ZodFirstPartyTypeKind.ZodNullable:return parseNullableDef(e,S);case ZodFirstPartyTypeKind.ZodOptional:return parseOptionalDef(e,S);case ZodFirstPartyTypeKind.ZodMap:return parseMapDef(e,S);case ZodFirstPartyTypeKind.ZodSet:return parseSetDef(e,S);case ZodFirstPartyTypeKind.ZodLazy:return()=>e.getter()._def;case ZodFirstPartyTypeKind.ZodPromise:return parsePromiseDef(e,S);case ZodFirstPartyTypeKind.ZodNaN:case ZodFirstPartyTypeKind.ZodNever:return parseNeverDef(S);case ZodFirstPartyTypeKind.ZodEffects:return parseEffectsDef(e,S);case ZodFirstPartyTypeKind.ZodAny:return parseAnyDef(S);case ZodFirstPartyTypeKind.ZodUnknown:return parseUnknownDef(S);case ZodFirstPartyTypeKind.ZodDefault:return parseDefaultDef(e,S);case ZodFirstPartyTypeKind.ZodBranded:return parseBrandedDef(e,S);case ZodFirstPartyTypeKind.ZodReadonly:return parseReadonlyDef(e,S);case ZodFirstPartyTypeKind.ZodCatch:return parseCatchDef(e,S);case ZodFirstPartyTypeKind.ZodPipeline:return parsePipelineDef(e,S);case ZodFirstPartyTypeKind.ZodFunction:case ZodFirstPartyTypeKind.ZodVoid:case ZodFirstPartyTypeKind.ZodSymbol:return;default:return(e=>void 0)(t)}};function parseDef(e,t,S=!1){let w=t.seen.get(e);if(t.override){let E=t.override?.(e,t,w,S);if(E!==ignoreOverride)return E}if(w&&!S){let e=get$ref(w,t);if(e!==void 0)return e}let E={def:e,path:t.currentPath,jsonSchema:void 0};t.seen.set(e,E);let D=selectParser(e,e.typeName,t),O=typeof D==`function`?parseDef(D(),t):D;if(O&&addMeta(e,t,O),t.postProcess){let S=t.postProcess(O,e,t);return E.jsonSchema=O,S}return E.jsonSchema=O,O}const get$ref=(e,t)=>{switch(t.$refStrategy){case`root`:return{$ref:e.path.join(`/`)};case`relative`:return{$ref:getRelativePath(t.currentPath,e.path)};case`none`:case`seen`:return e.path.length<t.currentPath.length&&e.path.every((e,S)=>t.currentPath[S]===e)?(console.warn(`Recursive reference detected at ${t.currentPath.join(`/`)}! Defaulting to any`),parseAnyDef(t)):t.$refStrategy===`seen`?parseAnyDef(t):void 0}},addMeta=(e,t,S)=>(e.description&&(S.description=e.description,t.markdownDescription&&(S.markdownDescription=e.description)),S),zodToJsonSchema=(e,t)=>{let S=getRefs(t),w=typeof t==`object`&&t.definitions?Object.entries(t.definitions).reduce((e,[t,w])=>({...e,[t]:parseDef(w._def,{...S,currentPath:[...S.basePath,S.definitionPath,t]},!0)??parseAnyDef(S)}),{}):void 0,E=typeof t==`string`?t:t?.nameStrategy===`title`?void 0:t?.name,D=parseDef(e._def,E===void 0?S:{...S,currentPath:[...S.basePath,S.definitionPath,E]},!1)??parseAnyDef(S),O=typeof t==`object`&&t.name!==void 0&&t.nameStrategy===`title`?t.name:void 0;O!==void 0&&(D.title=O),S.flags.hasReferencedOpenAiAnyType&&(w||={},w[S.openAiAnyTypeName]||(w[S.openAiAnyTypeName]={type:[`string`,`number`,`integer`,`boolean`,`array`,`null`],items:{$ref:S.$refStrategy===`relative`?`1`:[...S.basePath,S.definitionPath,S.openAiAnyTypeName].join(`/`)}}));let k=E===void 0?w?{...D,[S.definitionPath]:w}:D:{$ref:[...S.$refStrategy===`relative`?[]:S.basePath,S.definitionPath,E].join(`/`),[S.definitionPath]:{...w,[E]:D}};return S.target===`jsonSchema7`?k.$schema=`http://json-schema.org/draft-07/schema#`:(S.target===`jsonSchema2019-09`||S.target===`openAi`)&&(k.$schema=`https://json-schema.org/draft/2019-09/schema#`),S.target===`openAi`&&(`anyOf`in k||`oneOf`in k||`allOf`in k||`type`in k&&Array.isArray(k.type))&&console.warn(`Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.`),k};function mapMiniTarget(e){return!e||e===`jsonSchema7`||e===`draft-7`?`draft-7`:e===`jsonSchema2019-09`||e===`draft-2020-12`?`draft-2020-12`:`draft-7`}function toJsonSchemaCompat(e,t){return isZ4Schema(e)?toJSONSchema(e,{target:mapMiniTarget(t?.target),io:t?.pipeStrategy??`input`}):zodToJsonSchema(e,{strictUnions:t?.strictUnions??!0,pipeStrategy:t?.pipeStrategy??`input`})}function getMethodLiteral(e){let t=getObjectShape(e)?.method;if(!t)throw Error(`Schema is missing a method literal`);let S=getLiteralValue(t);if(typeof S!=`string`)throw Error(`Schema method literal must be a string`);return S}function parseWithCompat(e,t){let S=safeParse(e,t);if(!S.success)throw S.error;return S.data}const DEFAULT_REQUEST_TIMEOUT_MSEC=6e4;var Protocol=class{constructor(e){this._options=e,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(CancelledNotificationSchema,e=>{this._oncancel(e)}),this.setNotificationHandler(ProgressNotificationSchema,e=>{this._onprogress(e)}),this.setRequestHandler(PingRequestSchema,e=>({})),this._taskStore=e?.taskStore,this._taskMessageQueue=e?.taskMessageQueue,this._taskStore&&(this.setRequestHandler(GetTaskRequestSchema,async(e,t)=>{let S=await this._taskStore.getTask(e.params.taskId,t.sessionId);if(!S)throw new McpError(ErrorCode.InvalidParams,`Failed to retrieve task: Task not found`);return{...S}}),this.setRequestHandler(GetTaskPayloadRequestSchema,async(e,t)=>{let S=async()=>{let w=e.params.taskId;if(this._taskMessageQueue){let e;for(;e=await this._taskMessageQueue.dequeue(w,t.sessionId);){if(e.type===`response`||e.type===`error`){let t=e.message,S=t.id,w=this._requestResolvers.get(S);if(w)if(this._requestResolvers.delete(S),e.type===`response`)w(t);else{let e=t;w(new McpError(e.error.code,e.error.message,e.error.data))}else{let t=e.type===`response`?`Response`:`Error`;this._onerror(Error(`${t} handler missing for request ${S}`))}continue}await this._transport?.send(e.message,{relatedRequestId:t.requestId})}}let E=await this._taskStore.getTask(w,t.sessionId);if(!E)throw new McpError(ErrorCode.InvalidParams,`Task not found: ${w}`);if(!isTerminal(E.status))return await this._waitForTaskUpdate(w,t.signal),await S();if(isTerminal(E.status)){let e=await this._taskStore.getTaskResult(w,t.sessionId);return this._clearTaskQueue(w),{...e,_meta:{...e._meta,[RELATED_TASK_META_KEY]:{taskId:w}}}}return await S()};return await S()}),this.setRequestHandler(ListTasksRequestSchema,async(e,t)=>{try{let{tasks:S,nextCursor:w}=await this._taskStore.listTasks(e.params?.cursor,t.sessionId);return{tasks:S,nextCursor:w,_meta:{}}}catch(e){throw new McpError(ErrorCode.InvalidParams,`Failed to list tasks: ${e instanceof Error?e.message:String(e)}`)}}),this.setRequestHandler(CancelTaskRequestSchema,async(e,t)=>{try{let S=await this._taskStore.getTask(e.params.taskId,t.sessionId);if(!S)throw new McpError(ErrorCode.InvalidParams,`Task not found: ${e.params.taskId}`);if(isTerminal(S.status))throw new McpError(ErrorCode.InvalidParams,`Cannot cancel task in terminal status: ${S.status}`);await this._taskStore.updateTaskStatus(e.params.taskId,`cancelled`,`Client cancelled task execution.`,t.sessionId),this._clearTaskQueue(e.params.taskId);let w=await this._taskStore.getTask(e.params.taskId,t.sessionId);if(!w)throw new McpError(ErrorCode.InvalidParams,`Task not found after cancellation: ${e.params.taskId}`);return{_meta:{},...w}}catch(e){throw e instanceof McpError?e:new McpError(ErrorCode.InvalidRequest,`Failed to cancel task: ${e instanceof Error?e.message:String(e)}`)}}))}async _oncancel(e){e.params.requestId&&this._requestHandlerAbortControllers.get(e.params.requestId)?.abort(e.params.reason)}_setupTimeout(e,t,S,w,E=!1){this._timeoutInfo.set(e,{timeoutId:setTimeout(w,t),startTime:Date.now(),timeout:t,maxTotalTimeout:S,resetTimeoutOnProgress:E,onTimeout:w})}_resetTimeout(e){let t=this._timeoutInfo.get(e);if(!t)return!1;let S=Date.now()-t.startTime;if(t.maxTotalTimeout&&S>=t.maxTotalTimeout)throw this._timeoutInfo.delete(e),McpError.fromError(ErrorCode.RequestTimeout,`Maximum total timeout exceeded`,{maxTotalTimeout:t.maxTotalTimeout,totalElapsed:S});return clearTimeout(t.timeoutId),t.timeoutId=setTimeout(t.onTimeout,t.timeout),!0}_cleanupTimeout(e){let t=this._timeoutInfo.get(e);t&&(clearTimeout(t.timeoutId),this._timeoutInfo.delete(e))}async connect(e){if(this._transport)throw Error(`Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.`);this._transport=e;let t=this.transport?.onclose;this._transport.onclose=()=>{t?.(),this._onclose()};let S=this.transport?.onerror;this._transport.onerror=e=>{S?.(e),this._onerror(e)};let w=this._transport?.onmessage;this._transport.onmessage=(e,t)=>{w?.(e,t),isJSONRPCResultResponse(e)||isJSONRPCErrorResponse(e)?this._onresponse(e):isJSONRPCRequest(e)?this._onrequest(e,t):isJSONRPCNotification(e)?this._onnotification(e):this._onerror(Error(`Unknown message type: ${JSON.stringify(e)}`))},await this._transport.start()}_onclose(){let e=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let e of this._timeoutInfo.values())clearTimeout(e.timeoutId);this._timeoutInfo.clear();for(let e of this._requestHandlerAbortControllers.values())e.abort();this._requestHandlerAbortControllers.clear();let t=McpError.fromError(ErrorCode.ConnectionClosed,`Connection closed`);this._transport=void 0,this.onclose?.();for(let S of e.values())S(t)}_onerror(e){this.onerror?.(e)}_onnotification(e){let t=this._notificationHandlers.get(e.method)??this.fallbackNotificationHandler;t!==void 0&&Promise.resolve().then(()=>t(e)).catch(e=>this._onerror(Error(`Uncaught error in notification handler: ${e}`)))}_onrequest(e,t){let S=this._requestHandlers.get(e.method)??this.fallbackRequestHandler,w=this._transport,E=e.params?._meta?.[RELATED_TASK_META_KEY]?.taskId;if(S===void 0){let t={jsonrpc:`2.0`,id:e.id,error:{code:ErrorCode.MethodNotFound,message:`Method not found`}};E&&this._taskMessageQueue?this._enqueueTaskMessage(E,{type:`error`,message:t,timestamp:Date.now()},w?.sessionId).catch(e=>this._onerror(Error(`Failed to enqueue error response: ${e}`))):w?.send(t).catch(e=>this._onerror(Error(`Failed to send an error response: ${e}`)));return}let D=new AbortController;this._requestHandlerAbortControllers.set(e.id,D);let O=isTaskAugmentedRequestParams(e.params)?e.params.task:void 0,k=this._taskStore?this.requestTaskStore(e,w?.sessionId):void 0,j={signal:D.signal,sessionId:w?.sessionId,_meta:e.params?._meta,sendNotification:async t=>{if(D.signal.aborted)return;let S={relatedRequestId:e.id};E&&(S.relatedTask={taskId:E}),await this.notification(t,S)},sendRequest:async(t,S,w)=>{if(D.signal.aborted)throw new McpError(ErrorCode.ConnectionClosed,`Request was cancelled`);let O={...w,relatedRequestId:e.id};E&&!O.relatedTask&&(O.relatedTask={taskId:E});let j=O.relatedTask?.taskId??E;return j&&k&&await k.updateTaskStatus(j,`input_required`),await this.request(t,S,O)},authInfo:t?.authInfo,requestId:e.id,requestInfo:t?.requestInfo,taskId:E,taskStore:k,taskRequestedTtl:O?.ttl,closeSSEStream:t?.closeSSEStream,closeStandaloneSSEStream:t?.closeStandaloneSSEStream};Promise.resolve().then(()=>{O&&this.assertTaskHandlerCapability(e.method)}).then(()=>S(e,j)).then(async t=>{if(D.signal.aborted)return;let S={result:t,jsonrpc:`2.0`,id:e.id};E&&this._taskMessageQueue?await this._enqueueTaskMessage(E,{type:`response`,message:S,timestamp:Date.now()},w?.sessionId):await w?.send(S)},async t=>{if(D.signal.aborted)return;let S={jsonrpc:`2.0`,id:e.id,error:{code:Number.isSafeInteger(t.code)?t.code:ErrorCode.InternalError,message:t.message??`Internal error`,...t.data!==void 0&&{data:t.data}}};E&&this._taskMessageQueue?await this._enqueueTaskMessage(E,{type:`error`,message:S,timestamp:Date.now()},w?.sessionId):await w?.send(S)}).catch(e=>this._onerror(Error(`Failed to send response: ${e}`))).finally(()=>{this._requestHandlerAbortControllers.get(e.id)===D&&this._requestHandlerAbortControllers.delete(e.id)})}_onprogress(e){let{progressToken:t,...S}=e.params,w=Number(t),E=this._progressHandlers.get(w);if(!E){this._onerror(Error(`Received a progress notification for an unknown token: ${JSON.stringify(e)}`));return}let D=this._responseHandlers.get(w),O=this._timeoutInfo.get(w);if(O&&D&&O.resetTimeoutOnProgress)try{this._resetTimeout(w)}catch(e){this._responseHandlers.delete(w),this._progressHandlers.delete(w),this._cleanupTimeout(w),D(e);return}E(S)}_onresponse(e){let t=Number(e.id),S=this._requestResolvers.get(t);if(S){this._requestResolvers.delete(t),isJSONRPCResultResponse(e)?S(e):S(new McpError(e.error.code,e.error.message,e.error.data));return}let w=this._responseHandlers.get(t);if(w===void 0){this._onerror(Error(`Received a response for an unknown message ID: ${JSON.stringify(e)}`));return}this._responseHandlers.delete(t),this._cleanupTimeout(t);let E=!1;if(isJSONRPCResultResponse(e)&&e.result&&typeof e.result==`object`){let S=e.result;if(S.task&&typeof S.task==`object`){let e=S.task;typeof e.taskId==`string`&&(E=!0,this._taskProgressTokens.set(e.taskId,t))}}E||this._progressHandlers.delete(t),isJSONRPCResultResponse(e)?w(e):w(McpError.fromError(e.error.code,e.error.message,e.error.data))}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(e,t,S){let{task:w}=S??{};if(!w){try{yield{type:`result`,result:await this.request(e,t,S)}}catch(e){yield{type:`error`,error:e instanceof McpError?e:new McpError(ErrorCode.InternalError,String(e))}}return}let E;try{let w=await this.request(e,CreateTaskResultSchema,S);if(w.task)E=w.task.taskId,yield{type:`taskCreated`,task:w.task};else throw new McpError(ErrorCode.InternalError,`Task creation did not return a task`);for(;;){let e=await this.getTask({taskId:E},S);if(yield{type:`taskStatus`,task:e},isTerminal(e.status)){e.status===`completed`?yield{type:`result`,result:await this.getTaskResult({taskId:E},t,S)}:e.status===`failed`?yield{type:`error`,error:new McpError(ErrorCode.InternalError,`Task ${E} failed`)}:e.status===`cancelled`&&(yield{type:`error`,error:new McpError(ErrorCode.InternalError,`Task ${E} was cancelled`)});return}if(e.status===`input_required`){yield{type:`result`,result:await this.getTaskResult({taskId:E},t,S)};return}let w=e.pollInterval??this._options?.defaultTaskPollInterval??1e3;await new Promise(e=>setTimeout(e,w)),S?.signal?.throwIfAborted()}}catch(e){yield{type:`error`,error:e instanceof McpError?e:new McpError(ErrorCode.InternalError,String(e))}}}request(e,t,S){let{relatedRequestId:w,resumptionToken:E,onresumptiontoken:D,task:O,relatedTask:k}=S??{};return new Promise((j,F)=>{let L=e=>{F(e)};if(!this._transport){L(Error(`Not connected`));return}if(this._options?.enforceStrictCapabilities===!0)try{this.assertCapabilityForMethod(e.method),O&&this.assertTaskCapability(e.method)}catch(e){L(e);return}S?.signal?.throwIfAborted();let B=this._requestMessageId++,H={...e,jsonrpc:`2.0`,id:B};S?.onprogress&&(this._progressHandlers.set(B,S.onprogress),H.params={...e.params,_meta:{...e.params?._meta||{},progressToken:B}}),O&&(H.params={...H.params,task:O}),k&&(H.params={...H.params,_meta:{...H.params?._meta||{},[RELATED_TASK_META_KEY]:k}});let q=e=>{this._responseHandlers.delete(B),this._progressHandlers.delete(B),this._cleanupTimeout(B),this._transport?.send({jsonrpc:`2.0`,method:`notifications/cancelled`,params:{requestId:B,reason:String(e)}},{relatedRequestId:w,resumptionToken:E,onresumptiontoken:D}).catch(e=>this._onerror(Error(`Failed to send cancellation: ${e}`))),F(e instanceof McpError?e:new McpError(ErrorCode.RequestTimeout,String(e)))};this._responseHandlers.set(B,e=>{if(!S?.signal?.aborted){if(e instanceof Error)return F(e);try{let S=safeParse(t,e.result);S.success?j(S.data):F(S.error)}catch(e){F(e)}}}),S?.signal?.addEventListener(`abort`,()=>{q(S?.signal?.reason)});let J=S?.timeout??6e4;this._setupTimeout(B,J,S?.maxTotalTimeout,()=>q(McpError.fromError(ErrorCode.RequestTimeout,`Request timed out`,{timeout:J})),S?.resetTimeoutOnProgress??!1);let Y=k?.taskId;Y?(this._requestResolvers.set(B,e=>{let t=this._responseHandlers.get(B);t?t(e):this._onerror(Error(`Response handler missing for side-channeled request ${B}`))}),this._enqueueTaskMessage(Y,{type:`request`,message:H,timestamp:Date.now()}).catch(e=>{this._cleanupTimeout(B),F(e)})):this._transport.send(H,{relatedRequestId:w,resumptionToken:E,onresumptiontoken:D}).catch(e=>{this._cleanupTimeout(B),F(e)})})}async getTask(e,t){return this.request({method:`tasks/get`,params:e},GetTaskResultSchema,t)}async getTaskResult(e,t,S){return this.request({method:`tasks/result`,params:e},t,S)}async listTasks(e,t){return this.request({method:`tasks/list`,params:e},ListTasksResultSchema,t)}async cancelTask(e,t){return this.request({method:`tasks/cancel`,params:e},CancelTaskResultSchema,t)}async notification(e,t){if(!this._transport)throw Error(`Not connected`);this.assertNotificationCapability(e.method);let S=t?.relatedTask?.taskId;if(S){let w={...e,jsonrpc:`2.0`,params:{...e.params,_meta:{...e.params?._meta||{},[RELATED_TASK_META_KEY]:t.relatedTask}}};await this._enqueueTaskMessage(S,{type:`notification`,message:w,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(e.method)&&!e.params&&!t?.relatedRequestId&&!t?.relatedTask){if(this._pendingDebouncedNotifications.has(e.method))return;this._pendingDebouncedNotifications.add(e.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(e.method),!this._transport)return;let S={...e,jsonrpc:`2.0`};t?.relatedTask&&(S={...S,params:{...S.params,_meta:{...S.params?._meta||{},[RELATED_TASK_META_KEY]:t.relatedTask}}}),this._transport?.send(S,t).catch(e=>this._onerror(e))});return}let w={...e,jsonrpc:`2.0`};t?.relatedTask&&(w={...w,params:{...w.params,_meta:{...w.params?._meta||{},[RELATED_TASK_META_KEY]:t.relatedTask}}}),await this._transport.send(w,t)}setRequestHandler(e,t){let S=getMethodLiteral(e);this.assertRequestHandlerCapability(S),this._requestHandlers.set(S,(S,w)=>{let E=parseWithCompat(e,S);return Promise.resolve(t(E,w))})}removeRequestHandler(e){this._requestHandlers.delete(e)}assertCanSetRequestHandler(e){if(this._requestHandlers.has(e))throw Error(`A request handler for ${e} already exists, which would be overridden`)}setNotificationHandler(e,t){let S=getMethodLiteral(e);this._notificationHandlers.set(S,S=>{let w=parseWithCompat(e,S);return Promise.resolve(t(w))})}removeNotificationHandler(e){this._notificationHandlers.delete(e)}_cleanupTaskProgressHandler(e){let t=this._taskProgressTokens.get(e);t!==void 0&&(this._progressHandlers.delete(t),this._taskProgressTokens.delete(e))}async _enqueueTaskMessage(e,t,S){if(!this._taskStore||!this._taskMessageQueue)throw Error(`Cannot enqueue task message: taskStore and taskMessageQueue are not configured`);let w=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(e,t,S,w)}async _clearTaskQueue(e,t){if(this._taskMessageQueue){let S=await this._taskMessageQueue.dequeueAll(e,t);for(let t of S)if(t.type===`request`&&isJSONRPCRequest(t.message)){let S=t.message.id,w=this._requestResolvers.get(S);w?(w(new McpError(ErrorCode.InternalError,`Task cancelled or completed`)),this._requestResolvers.delete(S)):this._onerror(Error(`Resolver missing for request ${S} during task ${e} cleanup`))}}}async _waitForTaskUpdate(e,t){let S=this._options?.defaultTaskPollInterval??1e3;try{let t=await this._taskStore?.getTask(e);t?.pollInterval&&(S=t.pollInterval)}catch{}return new Promise((e,w)=>{if(t.aborted){w(new McpError(ErrorCode.InvalidRequest,`Request cancelled`));return}let E=setTimeout(e,S);t.addEventListener(`abort`,()=>{clearTimeout(E),w(new McpError(ErrorCode.InvalidRequest,`Request cancelled`))},{once:!0})})}requestTaskStore(e,t){let S=this._taskStore;if(!S)throw Error(`No task store configured`);return{createTask:async w=>{if(!e)throw Error(`No request provided`);return await S.createTask(w,e.id,{method:e.method,params:e.params},t)},getTask:async e=>{let w=await S.getTask(e,t);if(!w)throw new McpError(ErrorCode.InvalidParams,`Failed to retrieve task: Task not found`);return w},storeTaskResult:async(e,w,E)=>{await S.storeTaskResult(e,w,E,t);let D=await S.getTask(e,t);if(D){let t=TaskStatusNotificationSchema.parse({method:`notifications/tasks/status`,params:D});await this.notification(t),isTerminal(D.status)&&this._cleanupTaskProgressHandler(e)}},getTaskResult:e=>S.getTaskResult(e,t),updateTaskStatus:async(e,w,E)=>{let D=await S.getTask(e,t);if(!D)throw new McpError(ErrorCode.InvalidParams,`Task "${e}" not found - it may have been cleaned up`);if(isTerminal(D.status))throw new McpError(ErrorCode.InvalidParams,`Cannot update task "${e}" from terminal status "${D.status}" to "${w}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await S.updateTaskStatus(e,w,E,t);let O=await S.getTask(e,t);if(O){let t=TaskStatusNotificationSchema.parse({method:`notifications/tasks/status`,params:O});await this.notification(t),isTerminal(O.status)&&this._cleanupTaskProgressHandler(e)}},listTasks:e=>S.listTasks(e,t)}}};function isPlainObject$1(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function mergeCapabilities(e,t){let S={...e};for(let e in t){let w=e,E=t[w];if(E===void 0)continue;let D=S[w];isPlainObject$1(D)&&isPlainObject$1(E)?S[w]={...D,...E}:S[w]=E}return S}var require_code$1=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.regexpCode=e.getEsmExportName=e.getProperty=e.safeStringify=e.stringify=e.strConcat=e.addCodeArg=e.str=e._=e.nil=e._Code=e.Name=e.IDENTIFIER=e._CodeOrName=void 0;var t=class{};e._CodeOrName=t,e.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var S=class extends t{constructor(t){if(super(),!e.IDENTIFIER.test(t))throw Error(`CodeGen: name must be a valid identifier`);this.str=t}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}};e.Name=S;var w=class extends t{constructor(e){super(),this._items=typeof e==`string`?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===``||e===`""`}get str(){var e;return this._str??=this._items.reduce((e,t)=>`${e}${t}`,``)}get names(){var e;return this._names??=this._items.reduce((e,t)=>(t instanceof S&&(e[t.str]=(e[t.str]||0)+1),e),{})}};e._Code=w,e.nil=new w(``);function E(e,...t){let S=[e[0]],E=0;for(;E<t.length;)k(S,t[E]),S.push(e[++E]);return new w(S)}e._=E;let D=new w(`+`);function O(e,...t){let S=[q(e[0])],E=0;for(;E<t.length;)S.push(D),k(S,t[E]),S.push(D,q(e[++E]));return j(S),new w(S)}e.str=O;function k(e,t){t instanceof w?e.push(...t._items):t instanceof S?e.push(t):e.push(B(t))}e.addCodeArg=k;function j(e){let t=1;for(;t<e.length-1;){if(e[t]===D){let S=F(e[t-1],e[t+1]);if(S!==void 0){e.splice(t-1,3,S);continue}e[t++]=`+`}t++}}function F(e,t){if(t===`""`)return e;if(e===`""`)return t;if(typeof e==`string`)return t instanceof S||e[e.length-1]!==`"`?void 0:typeof t==`string`?t[0]===`"`?e.slice(0,-1)+t.slice(1):void 0:`${e.slice(0,-1)}${t}"`;if(typeof t==`string`&&t[0]===`"`&&!(e instanceof S))return`"${e}${t.slice(1)}`}function L(e,t){return t.emptyStr()?e:e.emptyStr()?t:O`${e}${t}`}e.strConcat=L;function B(e){return typeof e==`number`||typeof e==`boolean`||e===null?e:q(Array.isArray(e)?e.join(`,`):e)}function H(e){return new w(q(e))}e.stringify=H;function q(e){return JSON.stringify(e).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`)}e.safeStringify=q;function J(t){return typeof t==`string`&&e.IDENTIFIER.test(t)?new w(`.${t}`):E`[${t}]`}e.getProperty=J;function Y(t){if(typeof t==`string`&&e.IDENTIFIER.test(t))return new w(`${t}`);throw Error(`CodeGen: invalid export name: ${t}, use explicit $id name mapping`)}e.getEsmExportName=Y;function ee(e){return new w(e.toString())}e.regexpCode=ee})),require_scope=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.ValueScope=e.ValueScopeName=e.Scope=e.varKinds=e.UsedValueState=void 0;let t=require_code$1();var S=class extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`),this.value=e.value}},w;(function(e){e[e.Started=0]=`Started`,e[e.Completed=1]=`Completed`})(w||(e.UsedValueState=w={})),e.varKinds={const:new t.Name(`const`),let:new t.Name(`let`),var:new t.Name(`var`)};var E=class{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof t.Name?e:this.name(e)}name(e){return new t.Name(this._newName(e))}_newName(e){let t=this._names[e]||this._nameGroup(e);return`${e}${t.index++}`}_nameGroup(e){var t,S;if((this._parent?._prefixes)?.has(e)||this._prefixes&&!this._prefixes.has(e))throw Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}};e.Scope=E;var D=class extends t.Name{constructor(e,t){super(t),this.prefix=e}setValue(e,{property:S,itemIndex:w}){this.value=e,this.scopePath=(0,t._)`.${new t.Name(S)}[${w}]`}};e.ValueScopeName=D;let O=(0,t._)`\n`;e.ValueScope=class extends E{constructor(e){super(e),this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?O:t.nil}}get(){return this._scope}name(e){return new D(e,this._newName(e))}value(e,t){var S;if(t.ref===void 0)throw Error(`CodeGen: ref must be passed in value`);let w=this.toName(e),{prefix:E}=w,D=t.key??t.ref,O=this._values[E];if(O){let e=O.get(D);if(e)return e}else O=this._values[E]=new Map;O.set(D,w);let k=this._scope[E]||(this._scope[E]=[]),j=k.length;return k[j]=t.ref,w.setValue(t,{property:E,itemIndex:j}),w}getValue(e,t){let S=this._values[e];if(S)return S.get(t)}scopeRefs(e,S=this._values){return this._reduceValues(S,S=>{if(S.scopePath===void 0)throw Error(`CodeGen: name "${S}" has no value`);return(0,t._)`${e}${S.scopePath}`})}scopeCode(e=this._values,t,S){return this._reduceValues(e,e=>{if(e.value===void 0)throw Error(`CodeGen: name "${e}" has no value`);return e.value.code},t,S)}_reduceValues(E,D,O={},k){let j=t.nil;for(let F in E){let L=E[F];if(!L)continue;let B=O[F]=O[F]||new Map;L.forEach(E=>{if(B.has(E))return;B.set(E,w.Started);let O=D(E);if(O){let S=this.opts.es5?e.varKinds.var:e.varKinds.const;j=(0,t._)`${j}${S} ${E} = ${O};${this.opts._n}`}else if(O=k?.(E))j=(0,t._)`${j}${O}${this.opts._n}`;else throw new S(E);B.set(E,w.Completed)})}return j}}})),require_codegen=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.or=e.and=e.not=e.CodeGen=e.operators=e.varKinds=e.ValueScopeName=e.ValueScope=e.Scope=e.Name=e.regexpCode=e.stringify=e.getProperty=e.nil=e.strConcat=e.str=e._=void 0;let t=require_code$1(),S=require_scope();var w=require_code$1();Object.defineProperty(e,`_`,{enumerable:!0,get:function(){return w._}}),Object.defineProperty(e,`str`,{enumerable:!0,get:function(){return w.str}}),Object.defineProperty(e,`strConcat`,{enumerable:!0,get:function(){return w.strConcat}}),Object.defineProperty(e,`nil`,{enumerable:!0,get:function(){return w.nil}}),Object.defineProperty(e,`getProperty`,{enumerable:!0,get:function(){return w.getProperty}}),Object.defineProperty(e,`stringify`,{enumerable:!0,get:function(){return w.stringify}}),Object.defineProperty(e,`regexpCode`,{enumerable:!0,get:function(){return w.regexpCode}}),Object.defineProperty(e,`Name`,{enumerable:!0,get:function(){return w.Name}});var E=require_scope();Object.defineProperty(e,`Scope`,{enumerable:!0,get:function(){return E.Scope}}),Object.defineProperty(e,`ValueScope`,{enumerable:!0,get:function(){return E.ValueScope}}),Object.defineProperty(e,`ValueScopeName`,{enumerable:!0,get:function(){return E.ValueScopeName}}),Object.defineProperty(e,`varKinds`,{enumerable:!0,get:function(){return E.varKinds}}),e.operators={GT:new t._Code(`>`),GTE:new t._Code(`>=`),LT:new t._Code(`<`),LTE:new t._Code(`<=`),EQ:new t._Code(`===`),NEQ:new t._Code(`!==`),NOT:new t._Code(`!`),OR:new t._Code(`||`),AND:new t._Code(`&&`),ADD:new t._Code(`+`)};var D=class{optimizeNodes(){return this}optimizeNames(e,t){return this}},O=class extends D{constructor(e,t,S){super(),this.varKind=e,this.name=t,this.rhs=S}render({es5:e,_n:t}){let w=e?S.varKinds.var:this.varKind,E=this.rhs===void 0?``:` = ${this.rhs}`;return`${w} ${this.name}${E};`+t}optimizeNames(e,t){if(e[this.name.str])return this.rhs&&=ve(this.rhs,e,t),this}get names(){return this.rhs instanceof t._CodeOrName?this.rhs.names:{}}},k=class extends D{constructor(e,t,S){super(),this.lhs=e,this.rhs=t,this.sideEffects=S}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,S){if(!(this.lhs instanceof t.Name&&!e[this.lhs.str]&&!this.sideEffects))return this.rhs=ve(this.rhs,e,S),this}get names(){return _e(this.lhs instanceof t.Name?{}:{...this.lhs.names},this.rhs)}},j=class extends k{constructor(e,t,S,w){super(e,S,w),this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}},F=class extends D{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}},L=class extends D{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:``};`+e}},B=class extends D{constructor(e){super(),this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}},H=class extends D{constructor(e){super(),this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=ve(this.code,e,t),this}get names(){return this.code instanceof t._CodeOrName?this.code.names:{}}},q=class extends D{constructor(e=[]){super(),this.nodes=e}render(e){return this.nodes.reduce((t,S)=>t+S.render(e),``)}optimizeNodes(){let{nodes:e}=this,t=e.length;for(;t--;){let S=e[t].optimizeNodes();Array.isArray(S)?e.splice(t,1,...S):S?e[t]=S:e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){let{nodes:S}=this,w=S.length;for(;w--;){let E=S[w];E.optimizeNames(e,t)||(ye(e,E.names),S.splice(w,1))}return S.length>0?this:void 0}get names(){return this.nodes.reduce((e,t)=>ge(e,t.names),{})}},J=class extends q{render(e){return`{`+e._n+super.render(e)+`}`+e._n}},Y=class extends q{},ee=class extends J{};ee.kind=`else`;var te=class e extends J{constructor(e,t){super(t),this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);return this.else&&(t+=`else `+this.else.render(e)),t}optimizeNodes(){super.optimizeNodes();let t=this.condition;if(t===!0)return this.nodes;let S=this.else;if(S){let e=S.optimizeNodes();S=this.else=Array.isArray(e)?new ee(e):e}if(S)return t===!1?S instanceof e?S:S.nodes:this.nodes.length?this:new e(Ce(t),S instanceof e?[S]:S.nodes);if(!(t===!1||!this.nodes.length))return this}optimizeNames(e,t){var S;if(this.else=this.else?.optimizeNames(e,t),super.optimizeNames(e,t)||this.else)return this.condition=ve(this.condition,e,t),this}get names(){let e=super.names;return _e(e,this.condition),this.else&&ge(e,this.else.names),e}};te.kind=`if`;var ne=class extends J{};ne.kind=`for`;var ae=class extends ne{constructor(e){super(),this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(super.optimizeNames(e,t))return this.iteration=ve(this.iteration,e,t),this}get names(){return ge(super.names,this.iteration.names)}},oe=class extends ne{constructor(e,t,S,w){super(),this.varKind=e,this.name=t,this.from=S,this.to=w}render(e){let t=e.es5?S.varKinds.var:this.varKind,{name:w,from:E,to:D}=this;return`for(${t} ${w}=${E}; ${w}<${D}; ${w}++)`+super.render(e)}get names(){return _e(_e(super.names,this.from),this.to)}},se=class extends ne{constructor(e,t,S,w){super(),this.loop=e,this.varKind=t,this.name=S,this.iterable=w}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(super.optimizeNames(e,t))return this.iterable=ve(this.iterable,e,t),this}get names(){return ge(super.names,this.iterable.names)}},ce=class extends J{constructor(e,t,S){super(),this.name=e,this.args=t,this.async=S}render(e){return`${this.async?`async `:``}function ${this.name}(${this.args})`+super.render(e)}};ce.kind=`func`;var ue=class extends q{render(e){return`return `+super.render(e)}};ue.kind=`return`;var de=class extends J{render(e){let t=`try`+super.render(e);return this.catch&&(t+=this.catch.render(e)),this.finally&&(t+=this.finally.render(e)),t}optimizeNodes(){var e,t;return super.optimizeNodes(),(e=this.catch)==null||e.optimizeNodes(),(t=this.finally)==null||t.optimizeNodes(),this}optimizeNames(e,t){var S,w;return super.optimizeNames(e,t),(S=this.catch)==null||S.optimizeNames(e,t),(w=this.finally)==null||w.optimizeNames(e,t),this}get names(){let e=super.names;return this.catch&&ge(e,this.catch.names),this.finally&&ge(e,this.finally.names),e}},fe=class extends J{constructor(e){super(),this.error=e}render(e){return`catch(${this.error})`+super.render(e)}};fe.kind=`catch`;var me=class extends J{render(e){return`finally`+super.render(e)}};me.kind=`finally`,e.CodeGen=class{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?`
@@ -1222,7 +1222,7 @@ ${e.terminator}`}function Qa(e){return`(${Ee(e.body)})${ke(e.redirections)}`}fun
1222
1222
  `)){let t=e.trim();t.length===40&&k.add(t)}}w.scanned=t.byTo.size;let j=[];for(let{entry:e,observedSha:S}of D)k.has(S)||t.byTo.get(e.to)===e&&e.commitSha===S&&j.push(e);for(let e of j)t.byTo.get(e.to)===e&&indexRemove(t,e);if(w.dropped=j.length,w.retained=t.byTo.size,S?.rebuild){let S;try{S=await E.raw(`log`,`--all`,`--grep=^rename: `,`--format=%H%x00%cI%x00%B%x1e`)}catch(e){console.warn(`[rename-log] WARN: gcRenameLog rebuild: git log --grep failed; skipping reconstruction:`,e),S=``}let D=await buildBranchReachabilityMap(e,O);for(let e of S.split(``)){let S=e.trimStart();if(!S)continue;let E=S.split(`\0`),O=(E[0]??``).trim(),j=(E[1]??``).trim(),F=E[2]??``;if(O.length!==40||!k.has(O))continue;let L=parseOkActors(F),B=0;for(let e of L)B+=e.previous_paths?.length??0;if(B===0)continue;let H=B>1?`folder`:`file`,q=lookupBranchInMap(D,O),J=deriveGroupId(O,``,``);for(let e of L)if(!(!e.previous_paths||e.previous_paths.length===0))for(let S of e.previous_paths)t.byTo.has(S.to)||(indexInsert(t,{v:1,from:S.from,to:S.to,at:j||new Date(0).toISOString(),commitSha:O,branch:q,groupId:J,kind:H,actor:{writerId:e.writer_id,displayName:e.display_name}}),w.rebuilt+=1,w.retained+=1)}}return(w.dropped>0||w.rebuilt>0)&&rewriteJsonlAtomically(e.gitDir,t),w.dropped>0&&(console.warn(`[rename-log] gc swept ${w.dropped} dead entries (${w.retained} live remain)`),gcDroppedCounter().add(w.dropped),liveEntriesGauge().add(-w.dropped)),w.rebuilt>0&&liveEntriesGauge().add(w.rebuilt),w}function deriveGroupId(e,t,S){let w=createHash(`sha256`);w.update(`${e}\0${t}\0${S}`);let E=w.digest(`hex`);return`${E.slice(0,8)}-${E.slice(8,12)}-${E.slice(12,16)}-${E.slice(16,20)}-${E.slice(20,32)}`}async function buildBranchReachabilityMap(e,t){let S=new Map;for(let e of[...t].sort()){let t=/^refs\/(?:wip|checkpoints)\/([^/]+)\//.exec(e);if(!t?.[1])continue;let w=S.get(t[1])??[];w.push(e),S.set(t[1],w)}let w=new Map;for(let[t,E]of S){let S;try{S=await revListReachable(e,E)}catch(e){console.warn(`[rename-log] WARN: gcRenameLog rebuild: rev-list failed for branch ${t}; reconstructed entries on this branch will fall back to 'main':`,e);continue}let D=new Set;for(let e of S.split(`
1223
1223
  `)){let t=e.trim();t.length===40&&D.add(t)}w.set(t,D)}return w}function lookupBranchInMap(e,t){for(let[S,w]of e)if(w.has(t))return S;return`main`}async function resolveDocPathAtCommit(e,t,S,w,E,D,O,k){let{chain:j}=expandPredecessors(t,w,E),F=await Promise.all(j.map(async t=>{if(t.renameCommit===null)return null;let S=await buildSeeds(e,t.renameCommit,w,k);return S.length===0?new Set:buildAncestorShaSet(e,S,w,O)})),L=[];for(let e=j.length-1;e>=0;e--){let t=j[e],w=F[e];w!==null&&!w.has(S)||L.push({sha:S,path:D(t.path)})}if(L.length===0)return null;let B=await batchCheckExistence(e,L);for(let e=0;e<L.length;e++)if(B[e])return L[e].path;return null}const OBSERVER_SYNC_ORIGIN={source:`local`,skipStoreHooks:!0,context:{origin:`observer-sync`}},isPairedWriteOrigin=e=>typeof e!=`object`||!e?!1:e.context?.paired===!0;function shouldRethrowBridgeMergeLoss(e=process.env){return e.NODE_ENV===`test`||e.OK_RETHROW_BRIDGE_LOSS===`1`}function setupServerObservers(e){let{doc:t,xmlFragment:S,ytext:w,mdManager:E,schema:D}=e,O=(t,S)=>{let w=process.env.OK_TELEMETRY_VERBOSE===`1`;console.warn(JSON.stringify({...t.toLog({verbose:w}),docName:e.docName??null,timestamp:new Date().toISOString()})),incrementBridgeMergeContentLoss();let E=e.shadow?.();if(!E||!e.docName)return;let D=e.getBranch?.()??`main`,O=e.contentRoot??``;queueMicrotask(()=>{saveInMemoryCheckpoint(E,O,{kind:`bridge-merge-loss`,docName:e.docName,contents:S,label:`Before concurrent merge @ ${new Date().toISOString()}`,branch:D,metadata:{lostSubstrings:t.info.lostSubstrings}}).then(t=>{incrementBridgeMergeCheckpointCreated(),console.warn(JSON.stringify({event:`bridge-merge-checkpoint-created`,docName:e.docName,sha:t,kind:`bridge-merge-loss`,timestamp:new Date().toISOString()}))}).catch(e=>{let t=e instanceof Error?e:Error(String(e));console.warn(`[Server Observer A] Silent checkpoint write failed:`,{name:t.name,message:t.message,stack:t.stack?.split(`
1224
1224
  `).slice(0,4).join(`
1225
- `)})})})},k=``,j=!1,F=!1,L=()=>stripFrontmatter(w.toString()).frontmatter;try{let e=yXmlFragmentToProseMirrorRootNode(S,D).toJSON(),t=E.serialize(e);k=prependFrontmatter(L(),t)}catch(e){incrementServerObserverError(`a`),console.warn(`[Server Observer A] Baseline init failed — starting from empty snapshot:`,e instanceof Error?e.message:String(e)),k=``}let B=()=>{try{let j=yXmlFragmentToProseMirrorRootNode(S,D).toJSON(),F=E.serialize(j),B=prependFrontmatter(L(),F);if(k===B)return;let H=w.toString();if(normalizeBridge(H)===normalizeBridge(B)){k=B;return}let q=k,J={mergedText:null};t.transact(()=>{if(H===k)applyIncrementalDiff(w,H,B);else try{let e=mergeThreeWay(k,B,H);applyFastDiff(w,H,e),J.mergedText=e}catch(e){if(!(e instanceof BridgeMergeContentLossError)||(O(e,q),shouldRethrowBridgeMergeLoss()))throw e;applyFastDiff(w,H,e.info.result),J.mergedText=e.info.result}},OBSERVER_SYNC_ORIGIN),J.mergedText!==null&&emitObserverAPathBFired(e.docName)&&(incrementObserverAPathBFires(),console.warn(JSON.stringify({event:`observer-a-path-b-fired`,"doc.name":e.docName??null,xmlFragmentAdvanced:!0,ytextDiverged:!0,mergeBytesChanged:Math.abs(J.mergedText.length-H.length)}))),incrementServerObserverFire(`a`),k=w.toString()}catch(e){incrementServerObserverError(`a`),console.error(`[Server Observer A] Failed to sync tree→text:`,e);try{k=w.toString()}catch(e){console.warn(`[Server Observer A] Baseline recovery also failed:`,e)}}},H=()=>{withSpanSync(`observer.runASync`,{attributes:{"doc.name":e.docName??``}},B)},q=(e,t)=>{if(t.origin!==OBSERVER_SYNC_ORIGIN){if(isPairedWriteOrigin(t.origin)){try{let e=L();k=w.toString(),J=e}catch(e){incrementServerObserverError(`a`),console.warn(`[Server Observer A] Paired-write baseline refresh failed — falling through to settlement:`,e instanceof Error?e.message:String(e)),j=!0}return}j=!0}};if(S.length>0&&w.length===0)try{let e=yXmlFragmentToProseMirrorRootNode(S,D).toJSON(),O=E.serialize(e),j=prependFrontmatter(L(),O);t.transact(()=>{w.insert(0,j)},OBSERVER_SYNC_ORIGIN),k=j}catch(e){incrementServerObserverError(`a`),console.error(`[Server Observer A] Failed initial sync:`,e),k=``}let J=L(),Y=()=>{try{let D=w.toString(),{frontmatter:O,body:j}=stripFrontmatter(D);if(normalizeBridge(k)===normalizeBridge(D)){J!==O&&(recordFrontmatterEditSurface(`source-mode`),J=O);return}let F=e.resolveEmbed&&e.docName?{resolveEmbed:e.resolveEmbed,resolveSize:e.resolveSize,sourcePath:e.docName}:void 0,L=E.parseWithFallback(j,F),B=e.schema.nodeFromJSON(L);t.transact(()=>{updateYFragment(t,S,B,{mapping:new Map,isOMark:new Map})},OBSERVER_SYNC_ORIGIN),J!==O&&(recordFrontmatterEditSurface(`source-mode`),J=O),incrementServerObserverFire(`b`);try{let t=prependFrontmatter(O,E.serialize(L));assertBridgeInvariant(w.toString(),t,{site:`observer-b`,docName:e.docName}),k=t}catch(e){if(e instanceof BridgeInvariantViolationError)throw e;console.warn(`[Server Observer B] Post-sync re-serialization failed — using input body as baseline:`,e),k=prependFrontmatter(O,j)}}catch(e){if(e instanceof BridgeInvariantViolationError)throw e;incrementServerObserverError(`b`),console.error(`[Server Observer B] Failed to sync text→tree:`,e);try{let e=yXmlFragmentToProseMirrorRootNode(S,D).toJSON(),t=E.serialize(e);k=prependFrontmatter(L(),t)}catch(e){if(e instanceof BridgeInvariantViolationError)throw e;console.warn(`[Server Observer B] Baseline recovery also failed:`,e)}}},ee=()=>{withSpanSync(`observer.runBSync`,{attributes:{"doc.name":e.docName??``}},Y)},te=(e,t)=>{if(t.origin!==OBSERVER_SYNC_ORIGIN){if(isPairedWriteOrigin(t.origin)){try{let e=L();k=w.toString(),J=e}catch(e){incrementServerObserverError(`b`),console.warn(`[Server Observer B] Paired-write baseline refresh failed — falling through to settlement:`,e instanceof Error?e.message:String(e)),F=!0}return}F=!0}},ne=(t,S)=>{withSpanSync(`observer.dispatch`,{attributes:{"doc.name":e.docName??``}},t=>{if(!j&&!F){t.setAttribute(`observer.dispatch`,`none`),e.onDispatch?.(`none`);return}if(S.every(e=>e.origin===OBSERVER_SYNC_ORIGIN)){j=!1,F=!1,t.setAttribute(`observer.dispatch`,`none`),e.onDispatch?.(`none`);return}let w=j,E=F;j&&(j=!1,e.onDispatch?.(`a`),H()),F&&(F=!1,e.onDispatch?.(`b`),ee()),t.setAttribute(`observer.dispatch`,w&&E?`a-then-b`:w?`a`:E?`b`:`none`)})};S.observeDeep(q),w.observe(te),t.on(`afterAllTransactions`,ne);let ae=attachQuiescenceTracker(t);return()=>{ae(),t.off(`afterAllTransactions`,ne),S.unobserveDeep(q),w.unobserve(te)}}const log$6=getLogger(`persistence`);function resolveWriterFromOrigin(e,t){if(!e||typeof e!=`object`)return null;let S=e;if(S.source===`local`){let e=S.context;if(!e)return null;if(typeof e.session_id==`string`){let t=e.session_id;return{id:`agent-${t}`,name:`Agent (${t.slice(0,8)})`,email:`agent-${t}@openknowledge.local`}}return e.origin===`file-watcher`?FILE_SYSTEM_WRITER:e.origin===`upstream-import`||e.origin===`git-upstream`?GIT_UPSTREAM_WRITER:SERVICE_WRITER}if(S.source===`connection`){let e=S.connection?.context;if(typeof e?.principalId==`string`){let S=e.principalId,w=t?.();return w&&w.id===S&&w.display_name&&w.display_email?{id:w.id,name:w.display_name,email:w.display_email}:{id:S,name:`Local User`,email:`${S}@openknowledge.local`}}return SERVICE_WRITER}return null}const ERRNO_FS_CODES=new Set([`EACCES`,`EBADF`,`EBUSY`,`EEXIST`,`EISDIR`,`ELOOP`,`EMFILE`,`ENFILE`,`ENOENT`,`ENOSPC`,`ENOTDIR`,`EPERM`,`EROFS`,`ETXTBSY`,`EXDEV`]);function classifyDeferredStoreError(e){if(typeof e!=`object`||!e)return`unknown`;let t=e,S=typeof t.message==`string`?t.message:``;return S.startsWith(`symlink-escape:`)?`disk-write`:typeof t.code==`string`&&ERRNO_FS_CODES.has(t.code)?S.includes(`rename`)?`traced-rename`:`disk-write`:e instanceof BridgeInvariantViolationError?`serialize`:`unknown`}function captureDocSnapshotForPersistence(e){return{sv:encodeStateVector(e),json:yXmlFragmentToProseMirrorRootNode(e.getXmlFragment(`default`),schema).toJSON()}}function safeContentPath(e,t){if(e.includes(`\0`))throw Error(`Invalid document name: ${e}`);let S=resolve(t,`${e}${getDocExtension(e)}`);if(!S.startsWith(`${t}/`))throw Error(`Invalid document name: ${e}`);return S}function isWithinContentDir(e,t){return e===t||e.startsWith(t+sep)}const reconciledBaseByBranch=new Map;let activeBranch=`main`;function switchReconciledBaseScope(e){activeBranch=e,reconciledBaseByBranch.has(e)||reconciledBaseByBranch.set(e,new Map)}function getActiveBranch(){return activeBranch}function getReconciledBase(e){return reconciledBaseByBranch.get(activeBranch)?.get(e)}function setReconciledBase(e,t){reconciledBaseByBranch.has(activeBranch)||reconciledBaseByBranch.set(activeBranch,new Map),reconciledBaseByBranch.get(activeBranch)?.set(e,t)}function deleteReconciledBase(e){reconciledBaseByBranch.get(activeBranch)?.delete(e)}let batchInProgress=!1;function setBatchInProgress(e){batchInProgress=e}function isBatchInProgress(){return batchInProgress}function createPersistenceExtension(e){let t=e?.contentDir??process.cwd(),S;try{S=realpathSync(t)}catch{S=t}let w=e?.projectDir??process.cwd(),E=e?.shadowRef,D=e?.contentRoot??(relative(w,S)||`.`),O=e?.backlinkIndex,k=e?.getPrincipal,j=e?.onAgentCommit,F=e?.onDiskFlush,L=e?.mdManager??mdManager,B={projectDir:w,contentDir:S,lkgCache:new Map,homedirOverride:e?.configHomedirOverride,onConfigRejected:e?.onConfigRejected},H=new Set,q=e?.applyDiskContentToDoc??applyDiskContentToDoc,J=null,Y=8,ee=new Map,te=e?.gitEnabled??!0,ne=e?.commitDebounceMs??15e3,ae=e?.wipRef??`refs/wip/main`,oe=e?.getCurrentBranch,se=null,ce=0,ue=null,de=!1,fe=null,me=new Map;async function ge(){Me();let e=Date.now();return withSpan(`persistence.commitToWipRef`,void 0,async()=>await _e()).finally(()=>{je?.record((Date.now()-e)/1e3)})}async function _e(){let e=E?.current;if(e){let t=swapContributors(),S=oe?.()??`main`;if(t.size===0){let t={v:1,writer_id:SERVICE_WRITER.id,principal:null,agent_session:null,agent_type:null,client_name:null,client_version:null,label:null,display_name:SERVICE_WRITER.name,color_seed:SERVICE_WRITER.id,docs:[]},w=`${formatWipSubject([])}\n\n${formatOkActor(t)}`;try{let t=await commitWip(e,SERVICE_WRITER,D,w,S);ce=0,log$6.info({sha:t.slice(0,8),writer:SERVICE_WRITER.id},`[persistence] Shadow WIP commit: ${t.slice(0,8)} on refs/wip/${SERVICE_WRITER.id}`);try{backfillRenameLogCommitSha(e.gitDir,SERVICE_WRITER.id,t,getOrLoadRenameLogIndex(e.gitDir))}catch(e){log$6.warn({err:e},`[rename-log] service-writer backfill failed`)}}catch(e){ce++,incrementGitAutoSaveFailure(),log$6.error({err:e,attempt:ce},`[persistence] Shadow commit failed (attempt ${ce})`),ce>=3&&log$6.error({attempt:ce},`[persistence] CRITICAL: Git auto-save has failed 3+ times. Version history is NOT being recorded.`)}return}let w;try{w=await buildWipTree(e,D)}catch(e){restoreContributors(t),ce++,incrementGitAutoSaveFailure(),log$6.error({err:e,attempt:ce},`[persistence] Shadow WIP tree build failed (attempt ${ce})`);return}let E=!1;for(let[D,O]of t){let t={id:D,name:O.displayName,email:`${D}@openknowledge.local`},k=[...O.docs],F=O.actor,L=[...O.summaries],B=[...O.previousPaths],H={v:1,writer_id:D,principal:F?.principalId??null,agent_session:D.startsWith(`agent-`)?D.slice(6):null,agent_type:F?.agentType??null,client_name:F?.clientName??null,client_version:F?.clientVersion??null,label:F?.label??null,display_name:O.displayName,color_seed:O.colorSeed,docs:k,...L.length>0?{summaries:L}:{},...B.length>0?{previous_paths:B}:{}},q=`${composeCommitSubject(O.subjectOverride??formatWipSubject(k),L)}\n\n${formatOkActor(H)}`;try{let O=await commitWipFromTree(e,t,w,q,S);E=!0,log$6.info({sha:O.slice(0,8),writer:D,tree:w.slice(0,8)},`[persistence] Shadow WIP commit: ${O.slice(0,8)} on refs/wip/${D}`);try{backfillRenameLogCommitSha(e.gitDir,D,O,getOrLoadRenameLogIndex(e.gitDir))}catch(e){log$6.warn({err:e},`[rename-log] backfill failed; will retry next commit`)}D.startsWith(`agent-`)&&j?.()}catch(e){restoreContributorEntry(D,O),incrementGitWriterCommitFailure(),log$6.error({err:e,writer:D},`[persistence] Per-writer shadow commit failed for ${D}`)}}E?ce=0:(ce++,incrementGitAutoSaveFailure(),ce>=3&&log$6.error({attempt:ce},`[persistence] CRITICAL: Git auto-save has failed 3+ times. Version history is NOT being recorded.`));return}let t=shadowGit({gitDir:resolve(w,`.git`),workTree:w}),S=resolve(w,`.git/index-wip`),O={GIT_INDEX_FILE:S};try{try{let e=(await t.raw(`rev-parse`,`HEAD^{tree}`)).trim();await t.env(O).raw(`read-tree`,e)}catch(e){let t=e instanceof Error?e.message:String(e);t.includes(`unknown revision`)||t.includes(`bad revision`)?log$6.info({},`[persistence] Empty repo — starting with empty index`):log$6.error({err:e},`[persistence] Failed to read HEAD tree, falling back to empty index`)}await t.env(O).raw(`add`,D);let e=(await t.env(O).raw(`write-tree`)).trim(),S=null;try{S=(await t.raw(`rev-parse`,ae)).trim()}catch(e){let t=e instanceof Error?e.message:String(e);if(!t.includes(`unknown revision`)&&!t.includes(`bad revision`))throw e}let w=[`commit-tree`,e,`-m`,`WIP auto-save ${new Date().toISOString()}`];S&&w.push(`-p`,S);let E=(await t.raw(...w)).trim();await t.raw(`update-ref`,ae,E),ce=0,log$6.info({sha:E.slice(0,8),wipRef:ae},`[persistence] Git commit: ${E.slice(0,8)} on ${ae}`)}catch(e){ce++,incrementGitAutoSaveFailure(),log$6.error({err:e,attempt:ce},`[persistence] Git commit failed (attempt ${ce})`),ce>=3&&log$6.error({attempt:ce},`[persistence] CRITICAL: Git auto-save has failed 3+ times. Version history is NOT being recorded.`)}finally{try{tracedUnlinkSync(S)}catch{}}}function ve(e){if(e<=0)return ne;let t=2**Math.min(e,5),S=Math.random()*.25*ne;return ne*t+S}function ye(){te&&(isBatchInProgress()||(se&&clearTimeout(se),se=setTimeout(()=>{if(se=null,ue){de=!0;return}ue=ge().finally(()=>{ue=null,de&&(de=!1,ye())})},ve(ce))))}async function Ce(){se&&(clearTimeout(se),se=null,ue||=ge().finally(()=>{ue=null,de&&(de=!1,ye())})),ue&&await ue}function we(t,S,w){try{let E=t.getXmlFragment(`default`),D=e?.resolveEmbed?{resolveEmbed:e.resolveEmbed,resolveSize:e?.resolveSize,sourcePath:w}:void 0,O=mdManager.parseWithFallback(S,D),k=schema.nodeFromJSON(O);t.transact(()=>{updateYFragment(t,E,k,{mapping:new Map,isOMark:new Map})},OBSERVER_SYNC_ORIGIN)}catch(e){incrementPersistenceReconciliationFailures(),log$6.warn({err:e,documentName:w},`[persistence] reconcileFragmentNow failed for ${w}`)}}let Te=null,De=null,je=null;function Me(){if(Te)return;let e=getMeter();Te=e.createHistogram(`ok.persistence.load.duration`,{description:`Duration of persistence.onLoadDocument in seconds`,unit:`s`}),De=e.createHistogram(`ok.persistence.store.duration`,{description:`Duration of persistence.onStoreDocument in seconds`,unit:`s`}),je=e.createHistogram(`ok.persistence.git_commit.duration`,{description:`Duration of commitToWipRef drain in seconds`,unit:`s`})}async function Pe({document:e,documentName:t,lastTransactionOrigin:w}){Me();let E=Date.now();return withSpan(`persistence.onStoreDocument`,{attributes:{"doc.name":t}},async()=>{let E=e.getMap(`lifecycle`).get(`status`);if(E===`deleted-upstream`||E===`renamed`||E===`conflict`){log$6.info({documentName:t,lifecycleStatus:E},`[persistence] Skipped store for ${t}: lifecycle=${E}`),ee.delete(t),H.delete(t);return}if(!isDocQuiescent(e)){let S=ee.get(t)??0;if(S<8){let w=getMsSinceLastUserTx(e);console.warn(JSON.stringify({event:`persistence-skip-non-quiescent`,"doc.name":t,wallClockMsSinceLastTransaction:w??null,deferCount:S})),incrementPersistenceSkipNonQuiescent(),ee.set(t,S+1);return}console.warn(JSON.stringify({event:`persistence-force-flush-during-burst`,"doc.name":t,wallClockMsSinceLastTransaction:getMsSinceLastUserTx(e)??null,deferCount:S})),incrementPersistenceForceFlushDuringBurst()}let{sv:D,json:j}=captureDocSnapshotForPersistence(e),{frontmatter:B,body:J}=stripFrontmatter(e.getText(`source`).toString()),Y=prependFrontmatter(B,J),te;try{te=assertBridgeInvariant(Y,prependFrontmatter(B,L.serialize(j)),{site:`persistence`,docName:t,suppressDevThrow:!0})}catch(e){incrementPersistenceSanityCheckSerializeFailures(),console.warn(JSON.stringify({event:`persistence-sanity-check-serialize-failed`,"doc.name":t,"error.type":e instanceof Error?e.constructor.name:typeof e,timestamp:new Date().toISOString()})),log$6.warn({err:e,documentName:t},`[persistence] Sanity-check serialize failed for ${t}; proceeding with ytext bytes`),te=!1}te||we(e,J,t);let ne=getReconciledBase(t);if(ne!==void 0&&normalizeBridge(Y)===normalizeBridge(ne)){contributorCount()>0&&ye(),ee.delete(t);return}if(ne===void 0&&normalizeBridge(Y)===``){log$6.warn({documentName:t},`[persistence] Skipped phantom write for ${t}: empty Y.Doc with no reconciled base`),ee.delete(t);return}let ae=resolveWriterFromOrigin(w,k);if(ae&&ae.id!==SERVICE_WRITER.id&&(hasContributor(ae.id)||recordContributor(t,ae.id,ae.name,ae.id)),ne!==void 0){let w=classifyDuplication(Y,ne);if(w.kind===`block`){if(H.has(t)){log$6.warn({documentName:t},`[persistence] Tripwire breaker active — skipping duplicate store for ${t}`);return}let E=e.getXmlFragment(`default`).length;console.warn(JSON.stringify({event:`ok-persistence-duplication-blocked`,"doc.name":t,candidateBytes:Y.length,baseBytes:ne.length,fragmentChildren:E,copies:w.copies,reason:w.reason}));try{let w=safeContentPath(t,S),E;if(existsSync(w)){let e=null;try{e=realpathSync(w)}catch(e){log$6.warn({err:e,documentName:t},`[persistence] Tripwire reset realpath failed for ${t}; using currentBase`)}if(e&&isWithinContentDir(e,S))try{E=readFileSync(e,`utf-8`)}catch(S){log$6.warn({err:S,documentName:t,canonical:e},`[persistence] Tripwire reset readFileSync failed for ${t}; using currentBase`),E=ne}else e&&console.warn(`[persistence] symlink-escape on tripwire reset: ${w} → ${e}, using currentBase`,{docName:t,originalPath:w,canonical:e,contentDir:S}),E=ne}else E=ne;e.transact(()=>{q(e,E)},FILE_WATCHER_ORIGIN),H.delete(t)}catch(e){H.add(t),log$6.error({err:e,documentName:t},`[persistence] Tripwire reset failed for ${t}`)}ee.delete(t);return}}let oe=safeContentPath(t,S);await tracedMkdir(dirname(oe),{recursive:!0});let se;try{se=await realpath(oe)}catch(e){let S=e.code;if(S===`ENOENT`){let e=!1;try{e=lstatSync(oe).isSymbolicLink()}catch(e){e.code!==`ENOENT`&&log$6.warn({err:e,path:oe},`[persistence] lstat failed during broken-symlink check`)}e&&console.warn(`[persistence] broken-symlink fallback`,{docName:t,reason:`broken-symlink`}),se=oe}else if(S===`ELOOP`)throw console.error(`[persistence] Symlink cycle at ${oe}`),Error(`Symlink cycle detected at ${oe}`);else throw e}if(!isWithinContentDir(se,S)){let e=`symlink-escape: ${oe} resolves to ${se} outside ${S}`;throw console.error(`[persistence] ${e}`,{docName:t,originalPath:oe,canonical:se,contentDir:S}),Error(e)}let ce=`${se}.tmp.${crypto.randomUUID()}`;try{await tracedWriteFile(ce,Y,`utf-8`),await tracedRename(ce,se),registerWrite(se,contentHash(Y)),incrementPersistenceDiskWrite();try{F?.(t,D)}catch(e){log$6.warn({err:e,documentName:t},`[persistence] onDiskFlush callback failed for ${t}`)}}catch(e){try{tracedUnlinkSync(ce)}catch{}throw ee.delete(t),log$6.error({err:e,documentName:t},`[persistence] Failed to save ${t}`),e}log$6.info({filePath:se,bytes:Y.length},`[persistence] Wrote ${se} (${Y.length} bytes)`),setReconciledBase(t,Y),H.delete(t),ee.delete(t),O&&(O.updateDocumentFromMarkdown(t,Y),O.saveToDisk().catch(e=>{log$6.warn({err:e,documentName:t},`[backlinks] Failed to persist cache for ${t}`)})),setActiveSpanAttributes({"persistence.bytes":Y.length}),ye()}).finally(()=>{De?.record((Date.now()-E)/1e3)})}function Ie({document:e,documentName:t,lastTransactionOrigin:S}){me.set(t,{branch:getActiveBranch(),document:e,lastTransactionOrigin:S})}async function Re(e=`within-branch`){return fe?(J=J===`discard-stale`||e===`discard-stale`?`discard-stale`:`within-branch`,fe):(fe=(async()=>{let t=e;for(;;){let e=[...me.entries()];if(me.clear(),t!==`discard-stale`){for(let[t,S]of e)if(S.branch===getActiveBranch())try{await Pe({document:S.document,documentName:t,lastTransactionOrigin:S.lastTransactionOrigin})}catch(e){let S=process.env.OK_TELEMETRY_VERBOSE===`1`,w=``;try{w=String(e?.message??``)}catch{w=``}let E=fnv1aDigest(w),D;try{D=classifyDeferredStoreError(e)}catch(e){let w=String(e?.message??``);console.warn(JSON.stringify({event:`deferred-store-classifier-failed`,"doc.name":t,classifyErrorHash:fnv1aDigest(w),errorMessageHash:E,...S?{classifyErrorMessage:w}:{},timestamp:new Date().toISOString()})),D=`unknown`}incrementDeferredStoreFailures(),console.warn(JSON.stringify({event:`deferred-store-failed`,"doc.name":t,errorClass:D,errorMessageHash:E,...S?{errorMessage:w}:{},timestamp:new Date().toISOString()})),log$6.error({err:e,documentName:t},`[persistence] Deferred store failed for ${t}`)}}let S=J;if(J=null,me.size===0&&S===null)break;t=S??`within-branch`}})().finally(()=>{fe=null}),fe)}let ze={async onLoadDocument({document:t,documentName:w,context:E}){if(isSystemDoc(w))return;if(isConfigDoc(w)){loadConfigDoc(t,w,B);return}Me();let D=Date.now();return withSpan(`persistence.onLoadDocument`,{attributes:{"doc.name":w}},async()=>{log$6.info({documentName:w,connections:t.getConnectionsCount?.()??`?`},`[persistence] onLoadDocument called for ${w} (connections: ${t.getConnectionsCount?.()??`?`})`);let E=safeContentPath(w,S);if(!existsSync(E))return;try{let e=realpathSync(E);if(!isWithinContentDir(e,S)){console.warn(`[persistence] symlink-escape on load: ${E} → ${e}, refusing`);return}}catch(e){if(e.code===`ELOOP`){console.warn(`[persistence] Symlink cycle on load: ${E}, refusing`);return}}let D=readFileSync(E,`utf-8`),O=t.getXmlFragment(`default`);log$6.info({documentName:w,fragmentLength:O.length},`[persistence] onLoadDocument ${w}: fragment.length=${O.length} before update`),O.length===0?(t.transact(()=>{applyDiskContentToDoc(t,D,e?.resolveEmbed,w,e?.resolveSize)},FILE_WATCHER_ORIGIN),log$6.info({filePath:E,children:O.length},`[persistence] Loaded ${E} into Y.Doc (${O.length} children)`),O.observeDeep(()=>{log$6.info({documentName:w,fragmentLength:O.length},`[persistence] MUTATION on ${w}: fragment.length=${O.length}`)})):log$6.info({documentName:w,children:O.length},`[persistence] Skipped load for ${w} — fragment already has ${O.length} children`),setReconciledBase(w,D)}).finally(()=>{Te?.record((Date.now()-D)/1e3)})},async onStoreDocument({document:e,documentName:t,lastTransactionOrigin:S,lastContext:w}){if(!isSystemDoc(t)){if(isConfigDoc(t)){await storeConfigDoc(e,t,S,B);return}if(isBatchInProgress()){Ie({document:e,documentName:t,lastTransactionOrigin:S});return}return Pe({document:e,documentName:t,lastTransactionOrigin:S})}}};async function Be(){ue&&await ue}async function Ve(){if(ue){await ue;return}contributorCount()!==0&&(ue=ge().finally(()=>{ue=null,de&&(de=!1,ye())}),await ue)}return{extension:ze,flushDeferredStores:Re,flushPendingGitCommit:Ce,flushContributors:Ve,waitForPendingCommits:Be,configPersistenceCtx:B}}const MARKDOWN_LINK_OR_IMAGE_RE=/!?\[[^\]\n]*(?:\][^[\]\n]*)?\]\((?:<([^>\n]+)>|([^)\s]+))(?:\s+['"][^'"]*['"])?\)/g,WIKI_LINK_OR_EMBED_RE=/!?\[\[([^[\]|#]+?)(?:#[^\]|]+?)?(?:\|[^\]]+?)?\]\]/g,HTML_LINK_ATTR_RE=/<[\w:-]+\b[^>]*?\s+(?:href|src)\s*=\s*(?:"([^"\n]*)"|'([^'\n]*)'|“([^”\n]*)”|([^\s"'=<>`]+))/gi;function isRemoteOrOpaqueHref(e){return e.startsWith(`#`)||e.startsWith(`//`)||e.startsWith(`data:`)||/^[a-z][a-z0-9+.-]*:/i.test(e)}function stripHrefDecorations(e){let t=e.trim().replace(/^<(.+)>$/,`$1`),S=t.indexOf(`#`),w=S>=0?t.slice(0,S):t,E=w.indexOf(`?`);return E>=0?w.slice(0,E):w}function decodeHrefPath(e){let t=stripHrefDecorations(e);try{return decodeURI(t)}catch{return t}}function mediaKindForAssetPath(e){return mediaKindForSidebarAssetExtension(extname(e).slice(1).toLowerCase())}function errnoCode$1(e){return e instanceof Error&&`code`in e&&typeof e.code==`string`?e.code:null}function collectHrefsFromLine(e,t){for(let S of e.matchAll(MARKDOWN_LINK_OR_IMAGE_RE)){let e=S[1]??S[2];e&&t.add(e)}for(let S of e.matchAll(WIKI_LINK_OR_EMBED_RE)){let e=S[1];e&&t.add(e)}for(let S of e.matchAll(HTML_LINK_ATTR_RE)){let e=S[1]??S[2]??S[3]??S[4];e&&t.add(e)}}function stripHtmlComments(e,t){let S=e,w=``;for(;S.length>0;){if(t.inComment){let e=S.indexOf(`-->`);if(e===-1)return w;S=S.slice(e+3),t.inComment=!1;continue}let e=S.indexOf(`<!--`);if(e===-1)return w+S;w+=S.slice(0,e),S=S.slice(e+4),t.inComment=!0}return w}function extractLocalAssetHrefs(e){let t=new Set,S=createCodeFenceTracker(),w={inComment:!1};for(let E of e.replaceAll(`\r
1225
+ `)})})})},k=``,j=!1,F=!1,L=()=>stripFrontmatter(w.toString()).frontmatter;try{let e=yXmlFragmentToProseMirrorRootNode(S,D).toJSON(),t=E.serialize(e);k=prependFrontmatter(L(),t)}catch(e){incrementServerObserverError(`a`),console.warn(`[Server Observer A] Baseline init failed — starting from empty snapshot:`,e instanceof Error?e.message:String(e)),k=``}let B=()=>{try{let j=yXmlFragmentToProseMirrorRootNode(S,D).toJSON(),F=E.serialize(j),B=prependFrontmatter(L(),F);if(k===B)return;let H=w.toString();if(normalizeBridge(H)===normalizeBridge(B)){k=B;return}let q=k,J={mergedText:null};t.transact(()=>{if(H===k)applyIncrementalDiff(w,H,B);else try{let e=mergeThreeWay(k,B,H);applyFastDiff(w,H,e),J.mergedText=e}catch(e){if(!(e instanceof BridgeMergeContentLossError)||(O(e,q),shouldRethrowBridgeMergeLoss()))throw e;applyFastDiff(w,H,e.info.result),J.mergedText=e.info.result}},OBSERVER_SYNC_ORIGIN),J.mergedText!==null&&emitObserverAPathBFired(e.docName)&&(incrementObserverAPathBFires(),console.warn(JSON.stringify({event:`observer-a-path-b-fired`,"doc.name":e.docName??null,xmlFragmentAdvanced:!0,ytextDiverged:!0,mergeBytesChanged:Math.abs(J.mergedText.length-H.length)}))),incrementServerObserverFire(`a`),k=w.toString()}catch(e){incrementServerObserverError(`a`),console.error(`[Server Observer A] Failed to sync tree→text:`,e);try{k=w.toString()}catch(e){console.warn(`[Server Observer A] Baseline recovery also failed:`,e)}}},H=()=>{withSpanSync(`observer.runASync`,{attributes:{"doc.name":e.docName??``}},B)},q=(e,t)=>{if(t.origin!==OBSERVER_SYNC_ORIGIN){if(isPairedWriteOrigin(t.origin)){try{let e=L();k=w.toString(),J=e}catch(e){incrementServerObserverError(`a`),console.warn(`[Server Observer A] Paired-write baseline refresh failed — falling through to settlement:`,e instanceof Error?e.message:String(e)),j=!0}return}j=!0}};if(S.length>0&&w.length===0)try{let e=yXmlFragmentToProseMirrorRootNode(S,D).toJSON(),O=E.serialize(e),j=prependFrontmatter(L(),O);t.transact(()=>{w.insert(0,j)},OBSERVER_SYNC_ORIGIN),k=j}catch(e){incrementServerObserverError(`a`),console.error(`[Server Observer A] Failed initial sync:`,e),k=``}let J=L(),Y=()=>{try{let D=w.toString(),{frontmatter:O,body:j}=stripFrontmatter(D);if(normalizeBridge(k)===normalizeBridge(D)){J!==O&&(recordFrontmatterEditSurface(`source-mode`),J=O);return}let F=e.resolveEmbed&&e.docName?{resolveEmbed:e.resolveEmbed,resolveSize:e.resolveSize,sourcePath:e.docName}:void 0,L=E.parseWithFallback(j,F),B=e.schema.nodeFromJSON(L);t.transact(()=>{updateYFragment(t,S,B,{mapping:new Map,isOMark:new Map})},OBSERVER_SYNC_ORIGIN),J!==O&&(recordFrontmatterEditSurface(`source-mode`),J=O),incrementServerObserverFire(`b`);try{let t=prependFrontmatter(O,E.serialize(L));assertBridgeInvariant(w.toString(),t,{site:`observer-b`,docName:e.docName}),k=t}catch(e){if(e instanceof BridgeInvariantViolationError)throw e;console.warn(`[Server Observer B] Post-sync re-serialization failed — using input body as baseline:`,e),k=prependFrontmatter(O,j)}}catch(e){if(e instanceof BridgeInvariantViolationError)throw e;incrementServerObserverError(`b`),console.error(`[Server Observer B] Failed to sync text→tree:`,e);try{let e=yXmlFragmentToProseMirrorRootNode(S,D).toJSON(),t=E.serialize(e);k=prependFrontmatter(L(),t)}catch(e){if(e instanceof BridgeInvariantViolationError)throw e;console.warn(`[Server Observer B] Baseline recovery also failed:`,e)}}},ee=()=>{withSpanSync(`observer.runBSync`,{attributes:{"doc.name":e.docName??``}},Y)},te=(e,t)=>{if(t.origin!==OBSERVER_SYNC_ORIGIN){if(isPairedWriteOrigin(t.origin)){try{let e=L();k=w.toString(),J=e}catch(e){incrementServerObserverError(`b`),console.warn(`[Server Observer B] Paired-write baseline refresh failed — falling through to settlement:`,e instanceof Error?e.message:String(e)),F=!0}return}F=!0}},ne=(t,S)=>{withSpanSync(`observer.dispatch`,{attributes:{"doc.name":e.docName??``}},t=>{if(!j&&!F){t.setAttribute(`observer.dispatch`,`none`),e.onDispatch?.(`none`);return}if(S.every(e=>e.origin===OBSERVER_SYNC_ORIGIN)){j=!1,F=!1,t.setAttribute(`observer.dispatch`,`none`),e.onDispatch?.(`none`);return}let w=j,E=F;j&&(j=!1,e.onDispatch?.(`a`),H()),F&&(F=!1,e.onDispatch?.(`b`),ee()),t.setAttribute(`observer.dispatch`,w&&E?`a-then-b`:w?`a`:E?`b`:`none`)})};S.observeDeep(q),w.observe(te),t.on(`afterAllTransactions`,ne);let ae=attachQuiescenceTracker(t);return()=>{ae(),t.off(`afterAllTransactions`,ne),S.unobserveDeep(q),w.unobserve(te)}}const log$6=getLogger(`persistence`);var DocumentOpenSizeLimitError=class extends Error{docName;size;limit;constructor(e,t,S=DOCUMENT_OPEN_BYTE_LIMIT){super(`Document "${e}" is ${formatFileSize(t)}; Open Knowledge opens documents up to ${formatFileSize(S)}.`),this.name=`DocumentOpenSizeLimitError`,this.docName=e,this.size=t,this.limit=S}};function resolveWriterFromOrigin(e,t){if(!e||typeof e!=`object`)return null;let S=e;if(S.source===`local`){let e=S.context;if(!e)return null;if(typeof e.session_id==`string`){let t=e.session_id;return{id:`agent-${t}`,name:`Agent (${t.slice(0,8)})`,email:`agent-${t}@openknowledge.local`}}return e.origin===`file-watcher`?FILE_SYSTEM_WRITER:e.origin===`upstream-import`||e.origin===`git-upstream`?GIT_UPSTREAM_WRITER:SERVICE_WRITER}if(S.source===`connection`){let e=S.connection?.context;if(typeof e?.principalId==`string`){let S=e.principalId,w=t?.();return w&&w.id===S&&w.display_name&&w.display_email?{id:w.id,name:w.display_name,email:w.display_email}:{id:S,name:`Local User`,email:`${S}@openknowledge.local`}}return SERVICE_WRITER}return null}const ERRNO_FS_CODES=new Set([`EACCES`,`EBADF`,`EBUSY`,`EEXIST`,`EISDIR`,`ELOOP`,`EMFILE`,`ENFILE`,`ENOENT`,`ENOSPC`,`ENOTDIR`,`EPERM`,`EROFS`,`ETXTBSY`,`EXDEV`]);function classifyDeferredStoreError(e){if(typeof e!=`object`||!e)return`unknown`;let t=e,S=typeof t.message==`string`?t.message:``;return S.startsWith(`symlink-escape:`)?`disk-write`:typeof t.code==`string`&&ERRNO_FS_CODES.has(t.code)?S.includes(`rename`)?`traced-rename`:`disk-write`:e instanceof BridgeInvariantViolationError?`serialize`:`unknown`}function captureDocSnapshotForPersistence(e){return{sv:encodeStateVector(e),json:yXmlFragmentToProseMirrorRootNode(e.getXmlFragment(`default`),schema).toJSON()}}function safeContentPath(e,t){if(e.includes(`\0`))throw Error(`Invalid document name: ${e}`);let S=resolve(t,`${e}${getDocExtension(e)}`);if(!S.startsWith(`${t}/`))throw Error(`Invalid document name: ${e}`);return S}function isWithinContentDir(e,t){return e===t||e.startsWith(t+sep)}const reconciledBaseByBranch=new Map;let activeBranch=`main`;function switchReconciledBaseScope(e){activeBranch=e,reconciledBaseByBranch.has(e)||reconciledBaseByBranch.set(e,new Map)}function getActiveBranch(){return activeBranch}function getReconciledBase(e){return reconciledBaseByBranch.get(activeBranch)?.get(e)}function setReconciledBase(e,t){reconciledBaseByBranch.has(activeBranch)||reconciledBaseByBranch.set(activeBranch,new Map),reconciledBaseByBranch.get(activeBranch)?.set(e,t)}function deleteReconciledBase(e){reconciledBaseByBranch.get(activeBranch)?.delete(e)}let batchInProgress=!1;function setBatchInProgress(e){batchInProgress=e}function isBatchInProgress(){return batchInProgress}function createPersistenceExtension(e){let t=e?.contentDir??process.cwd(),S;try{S=realpathSync(t)}catch{S=t}let w=e?.projectDir??process.cwd(),E=e?.shadowRef,D=e?.contentRoot??(relative(w,S)||`.`),O=e?.backlinkIndex,k=e?.getPrincipal,j=e?.onAgentCommit,F=e?.onDiskFlush,L=e?.mdManager??mdManager,B={projectDir:w,contentDir:S,lkgCache:new Map,homedirOverride:e?.configHomedirOverride,onConfigRejected:e?.onConfigRejected},H=new Set,q=e?.applyDiskContentToDoc??applyDiskContentToDoc,J=null,Y=8,ee=new Map,te=e?.gitEnabled??!0,ne=e?.commitDebounceMs??15e3,ae=e?.wipRef??`refs/wip/main`,oe=e?.getCurrentBranch,se=null,ce=0,ue=null,de=!1,fe=null,me=new Map;async function ge(){Me();let e=Date.now();return withSpan(`persistence.commitToWipRef`,void 0,async()=>await _e()).finally(()=>{je?.record((Date.now()-e)/1e3)})}async function _e(){let e=E?.current;if(e){let t=swapContributors(),S=oe?.()??`main`;if(t.size===0){let t={v:1,writer_id:SERVICE_WRITER.id,principal:null,agent_session:null,agent_type:null,client_name:null,client_version:null,label:null,display_name:SERVICE_WRITER.name,color_seed:SERVICE_WRITER.id,docs:[]},w=`${formatWipSubject([])}\n\n${formatOkActor(t)}`;try{let t=await commitWip(e,SERVICE_WRITER,D,w,S);ce=0,log$6.info({sha:t.slice(0,8),writer:SERVICE_WRITER.id},`[persistence] Shadow WIP commit: ${t.slice(0,8)} on refs/wip/${SERVICE_WRITER.id}`);try{backfillRenameLogCommitSha(e.gitDir,SERVICE_WRITER.id,t,getOrLoadRenameLogIndex(e.gitDir))}catch(e){log$6.warn({err:e},`[rename-log] service-writer backfill failed`)}}catch(e){ce++,incrementGitAutoSaveFailure(),log$6.error({err:e,attempt:ce},`[persistence] Shadow commit failed (attempt ${ce})`),ce>=3&&log$6.error({attempt:ce},`[persistence] CRITICAL: Git auto-save has failed 3+ times. Version history is NOT being recorded.`)}return}let w;try{w=await buildWipTree(e,D)}catch(e){restoreContributors(t),ce++,incrementGitAutoSaveFailure(),log$6.error({err:e,attempt:ce},`[persistence] Shadow WIP tree build failed (attempt ${ce})`);return}let E=!1;for(let[D,O]of t){let t={id:D,name:O.displayName,email:`${D}@openknowledge.local`},k=[...O.docs],F=O.actor,L=[...O.summaries],B=[...O.previousPaths],H={v:1,writer_id:D,principal:F?.principalId??null,agent_session:D.startsWith(`agent-`)?D.slice(6):null,agent_type:F?.agentType??null,client_name:F?.clientName??null,client_version:F?.clientVersion??null,label:F?.label??null,display_name:O.displayName,color_seed:O.colorSeed,docs:k,...L.length>0?{summaries:L}:{},...B.length>0?{previous_paths:B}:{}},q=`${composeCommitSubject(O.subjectOverride??formatWipSubject(k),L)}\n\n${formatOkActor(H)}`;try{let O=await commitWipFromTree(e,t,w,q,S);E=!0,log$6.info({sha:O.slice(0,8),writer:D,tree:w.slice(0,8)},`[persistence] Shadow WIP commit: ${O.slice(0,8)} on refs/wip/${D}`);try{backfillRenameLogCommitSha(e.gitDir,D,O,getOrLoadRenameLogIndex(e.gitDir))}catch(e){log$6.warn({err:e},`[rename-log] backfill failed; will retry next commit`)}D.startsWith(`agent-`)&&j?.()}catch(e){restoreContributorEntry(D,O),incrementGitWriterCommitFailure(),log$6.error({err:e,writer:D},`[persistence] Per-writer shadow commit failed for ${D}`)}}E?ce=0:(ce++,incrementGitAutoSaveFailure(),ce>=3&&log$6.error({attempt:ce},`[persistence] CRITICAL: Git auto-save has failed 3+ times. Version history is NOT being recorded.`));return}let t=shadowGit({gitDir:resolve(w,`.git`),workTree:w}),S=resolve(w,`.git/index-wip`),O={GIT_INDEX_FILE:S};try{try{let e=(await t.raw(`rev-parse`,`HEAD^{tree}`)).trim();await t.env(O).raw(`read-tree`,e)}catch(e){let t=e instanceof Error?e.message:String(e);t.includes(`unknown revision`)||t.includes(`bad revision`)?log$6.info({},`[persistence] Empty repo — starting with empty index`):log$6.error({err:e},`[persistence] Failed to read HEAD tree, falling back to empty index`)}await t.env(O).raw(`add`,D);let e=(await t.env(O).raw(`write-tree`)).trim(),S=null;try{S=(await t.raw(`rev-parse`,ae)).trim()}catch(e){let t=e instanceof Error?e.message:String(e);if(!t.includes(`unknown revision`)&&!t.includes(`bad revision`))throw e}let w=[`commit-tree`,e,`-m`,`WIP auto-save ${new Date().toISOString()}`];S&&w.push(`-p`,S);let E=(await t.raw(...w)).trim();await t.raw(`update-ref`,ae,E),ce=0,log$6.info({sha:E.slice(0,8),wipRef:ae},`[persistence] Git commit: ${E.slice(0,8)} on ${ae}`)}catch(e){ce++,incrementGitAutoSaveFailure(),log$6.error({err:e,attempt:ce},`[persistence] Git commit failed (attempt ${ce})`),ce>=3&&log$6.error({attempt:ce},`[persistence] CRITICAL: Git auto-save has failed 3+ times. Version history is NOT being recorded.`)}finally{try{tracedUnlinkSync(S)}catch{}}}function ve(e){if(e<=0)return ne;let t=2**Math.min(e,5),S=Math.random()*.25*ne;return ne*t+S}function ye(){te&&(isBatchInProgress()||(se&&clearTimeout(se),se=setTimeout(()=>{if(se=null,ue){de=!0;return}ue=ge().finally(()=>{ue=null,de&&(de=!1,ye())})},ve(ce))))}async function Ce(){se&&(clearTimeout(se),se=null,ue||=ge().finally(()=>{ue=null,de&&(de=!1,ye())})),ue&&await ue}function we(t,S,w){try{let E=t.getXmlFragment(`default`),D=e?.resolveEmbed?{resolveEmbed:e.resolveEmbed,resolveSize:e?.resolveSize,sourcePath:w}:void 0,O=mdManager.parseWithFallback(S,D),k=schema.nodeFromJSON(O);t.transact(()=>{updateYFragment(t,E,k,{mapping:new Map,isOMark:new Map})},OBSERVER_SYNC_ORIGIN)}catch(e){incrementPersistenceReconciliationFailures(),log$6.warn({err:e,documentName:w},`[persistence] reconcileFragmentNow failed for ${w}`)}}let Te=null,De=null,je=null;function Me(){if(Te)return;let e=getMeter();Te=e.createHistogram(`ok.persistence.load.duration`,{description:`Duration of persistence.onLoadDocument in seconds`,unit:`s`}),De=e.createHistogram(`ok.persistence.store.duration`,{description:`Duration of persistence.onStoreDocument in seconds`,unit:`s`}),je=e.createHistogram(`ok.persistence.git_commit.duration`,{description:`Duration of commitToWipRef drain in seconds`,unit:`s`})}async function Pe({document:e,documentName:t,lastTransactionOrigin:w}){Me();let E=Date.now();return withSpan(`persistence.onStoreDocument`,{attributes:{"doc.name":t}},async()=>{let E=e.getMap(`lifecycle`).get(`status`);if(E===`deleted-upstream`||E===`renamed`||E===`conflict`){log$6.info({documentName:t,lifecycleStatus:E},`[persistence] Skipped store for ${t}: lifecycle=${E}`),ee.delete(t),H.delete(t);return}if(!isDocQuiescent(e)){let S=ee.get(t)??0;if(S<8){let w=getMsSinceLastUserTx(e);console.warn(JSON.stringify({event:`persistence-skip-non-quiescent`,"doc.name":t,wallClockMsSinceLastTransaction:w??null,deferCount:S})),incrementPersistenceSkipNonQuiescent(),ee.set(t,S+1);return}console.warn(JSON.stringify({event:`persistence-force-flush-during-burst`,"doc.name":t,wallClockMsSinceLastTransaction:getMsSinceLastUserTx(e)??null,deferCount:S})),incrementPersistenceForceFlushDuringBurst()}let{sv:D,json:j}=captureDocSnapshotForPersistence(e),{frontmatter:B,body:J}=stripFrontmatter(e.getText(`source`).toString()),Y=prependFrontmatter(B,J),te;try{te=assertBridgeInvariant(Y,prependFrontmatter(B,L.serialize(j)),{site:`persistence`,docName:t,suppressDevThrow:!0})}catch(e){incrementPersistenceSanityCheckSerializeFailures(),console.warn(JSON.stringify({event:`persistence-sanity-check-serialize-failed`,"doc.name":t,"error.type":e instanceof Error?e.constructor.name:typeof e,timestamp:new Date().toISOString()})),log$6.warn({err:e,documentName:t},`[persistence] Sanity-check serialize failed for ${t}; proceeding with ytext bytes`),te=!1}te||we(e,J,t);let ne=getReconciledBase(t);if(ne!==void 0&&normalizeBridge(Y)===normalizeBridge(ne)){contributorCount()>0&&ye(),ee.delete(t);return}if(ne===void 0&&normalizeBridge(Y)===``){log$6.warn({documentName:t},`[persistence] Skipped phantom write for ${t}: empty Y.Doc with no reconciled base`),ee.delete(t);return}let ae=resolveWriterFromOrigin(w,k);if(ae&&ae.id!==SERVICE_WRITER.id&&(hasContributor(ae.id)||recordContributor(t,ae.id,ae.name,ae.id)),ne!==void 0){let w=classifyDuplication(Y,ne);if(w.kind===`block`){if(H.has(t)){log$6.warn({documentName:t},`[persistence] Tripwire breaker active — skipping duplicate store for ${t}`);return}let E=e.getXmlFragment(`default`).length;console.warn(JSON.stringify({event:`ok-persistence-duplication-blocked`,"doc.name":t,candidateBytes:Y.length,baseBytes:ne.length,fragmentChildren:E,copies:w.copies,reason:w.reason}));try{let w=safeContentPath(t,S),E;if(existsSync(w)){let e=null;try{e=realpathSync(w)}catch(e){log$6.warn({err:e,documentName:t},`[persistence] Tripwire reset realpath failed for ${t}; using currentBase`)}if(e&&isWithinContentDir(e,S))try{E=readFileSync(e,`utf-8`)}catch(S){log$6.warn({err:S,documentName:t,canonical:e},`[persistence] Tripwire reset readFileSync failed for ${t}; using currentBase`),E=ne}else e&&console.warn(`[persistence] symlink-escape on tripwire reset: ${w} → ${e}, using currentBase`,{docName:t,originalPath:w,canonical:e,contentDir:S}),E=ne}else E=ne;e.transact(()=>{q(e,E)},FILE_WATCHER_ORIGIN),H.delete(t)}catch(e){H.add(t),log$6.error({err:e,documentName:t},`[persistence] Tripwire reset failed for ${t}`)}ee.delete(t);return}}let oe=safeContentPath(t,S);await tracedMkdir(dirname(oe),{recursive:!0});let se;try{se=await realpath(oe)}catch(e){let S=e.code;if(S===`ENOENT`){let e=!1;try{e=lstatSync(oe).isSymbolicLink()}catch(e){e.code!==`ENOENT`&&log$6.warn({err:e,path:oe},`[persistence] lstat failed during broken-symlink check`)}e&&console.warn(`[persistence] broken-symlink fallback`,{docName:t,reason:`broken-symlink`}),se=oe}else if(S===`ELOOP`)throw console.error(`[persistence] Symlink cycle at ${oe}`),Error(`Symlink cycle detected at ${oe}`);else throw e}if(!isWithinContentDir(se,S)){let e=`symlink-escape: ${oe} resolves to ${se} outside ${S}`;throw console.error(`[persistence] ${e}`,{docName:t,originalPath:oe,canonical:se,contentDir:S}),Error(e)}let ce=`${se}.tmp.${crypto.randomUUID()}`;try{await tracedWriteFile(ce,Y,`utf-8`),await tracedRename(ce,se),registerWrite(se,contentHash(Y)),incrementPersistenceDiskWrite();try{F?.(t,D)}catch(e){log$6.warn({err:e,documentName:t},`[persistence] onDiskFlush callback failed for ${t}`)}}catch(e){try{tracedUnlinkSync(ce)}catch{}throw ee.delete(t),log$6.error({err:e,documentName:t},`[persistence] Failed to save ${t}`),e}log$6.info({filePath:se,bytes:Y.length},`[persistence] Wrote ${se} (${Y.length} bytes)`),setReconciledBase(t,Y),H.delete(t),ee.delete(t),O&&(O.updateDocumentFromMarkdown(t,Y),O.saveToDisk().catch(e=>{log$6.warn({err:e,documentName:t},`[backlinks] Failed to persist cache for ${t}`)})),setActiveSpanAttributes({"persistence.bytes":Y.length}),ye()}).finally(()=>{De?.record((Date.now()-E)/1e3)})}function Ie({document:e,documentName:t,lastTransactionOrigin:S}){me.set(t,{branch:getActiveBranch(),document:e,lastTransactionOrigin:S})}async function Re(e=`within-branch`){return fe?(J=J===`discard-stale`||e===`discard-stale`?`discard-stale`:`within-branch`,fe):(fe=(async()=>{let t=e;for(;;){let e=[...me.entries()];if(me.clear(),t!==`discard-stale`){for(let[t,S]of e)if(S.branch===getActiveBranch())try{await Pe({document:S.document,documentName:t,lastTransactionOrigin:S.lastTransactionOrigin})}catch(e){let S=process.env.OK_TELEMETRY_VERBOSE===`1`,w=``;try{w=String(e?.message??``)}catch{w=``}let E=fnv1aDigest(w),D;try{D=classifyDeferredStoreError(e)}catch(e){let w=String(e?.message??``);console.warn(JSON.stringify({event:`deferred-store-classifier-failed`,"doc.name":t,classifyErrorHash:fnv1aDigest(w),errorMessageHash:E,...S?{classifyErrorMessage:w}:{},timestamp:new Date().toISOString()})),D=`unknown`}incrementDeferredStoreFailures(),console.warn(JSON.stringify({event:`deferred-store-failed`,"doc.name":t,errorClass:D,errorMessageHash:E,...S?{errorMessage:w}:{},timestamp:new Date().toISOString()})),log$6.error({err:e,documentName:t},`[persistence] Deferred store failed for ${t}`)}}let S=J;if(J=null,me.size===0&&S===null)break;t=S??`within-branch`}})().finally(()=>{fe=null}),fe)}let ze={async onLoadDocument({document:t,documentName:w,context:E}){if(isSystemDoc(w))return;if(isConfigDoc(w)){loadConfigDoc(t,w,B);return}Me();let D=Date.now();return withSpan(`persistence.onLoadDocument`,{attributes:{"doc.name":w}},async()=>{log$6.info({documentName:w,connections:t.getConnectionsCount?.()??`?`},`[persistence] onLoadDocument called for ${w} (connections: ${t.getConnectionsCount?.()??`?`})`);let E=safeContentPath(w,S);if(!existsSync(E))return;let D=E;try{let e=realpathSync(E);if(!isWithinContentDir(e,S)){console.warn(`[persistence] symlink-escape on load: ${E} → ${e}, refusing`);return}D=e}catch(e){if(e.code===`ELOOP`){console.warn(`[persistence] Symlink cycle on load: ${E}, refusing`);return}}let O=statSync(D).size;if(O>524288)throw log$6.warn({documentName:w,fileSize:O,limit:DOCUMENT_OPEN_BYTE_LIMIT},`[persistence] Document exceeds open byte limit; refusing to load`),new DocumentOpenSizeLimitError(w,O);let k=readFileSync(E,`utf-8`),j=t.getXmlFragment(`default`);log$6.info({documentName:w,fragmentLength:j.length},`[persistence] onLoadDocument ${w}: fragment.length=${j.length} before update`),j.length===0?(t.transact(()=>{applyDiskContentToDoc(t,k,e?.resolveEmbed,w,e?.resolveSize)},FILE_WATCHER_ORIGIN),log$6.info({filePath:E,children:j.length},`[persistence] Loaded ${E} into Y.Doc (${j.length} children)`),j.observeDeep(()=>{log$6.info({documentName:w,fragmentLength:j.length},`[persistence] MUTATION on ${w}: fragment.length=${j.length}`)})):log$6.info({documentName:w,children:j.length},`[persistence] Skipped load for ${w} — fragment already has ${j.length} children`),setReconciledBase(w,k)}).finally(()=>{Te?.record((Date.now()-D)/1e3)})},async onStoreDocument({document:e,documentName:t,lastTransactionOrigin:S,lastContext:w}){if(!isSystemDoc(t)){if(isConfigDoc(t)){await storeConfigDoc(e,t,S,B);return}if(isBatchInProgress()){Ie({document:e,documentName:t,lastTransactionOrigin:S});return}return Pe({document:e,documentName:t,lastTransactionOrigin:S})}}};async function Be(){ue&&await ue}async function Ve(){if(ue){await ue;return}contributorCount()!==0&&(ue=ge().finally(()=>{ue=null,de&&(de=!1,ye())}),await ue)}return{extension:ze,flushDeferredStores:Re,flushPendingGitCommit:Ce,flushContributors:Ve,waitForPendingCommits:Be,configPersistenceCtx:B}}const MARKDOWN_LINK_OR_IMAGE_RE=/!?\[[^\]\n]*(?:\][^[\]\n]*)?\]\((?:<([^>\n]+)>|([^)\s]+))(?:\s+['"][^'"]*['"])?\)/g,WIKI_LINK_OR_EMBED_RE=/!?\[\[([^[\]|#]+?)(?:#[^\]|]+?)?(?:\|[^\]]+?)?\]\]/g,HTML_LINK_ATTR_RE=/<[\w:-]+\b[^>]*?\s+(?:href|src)\s*=\s*(?:"([^"\n]*)"|'([^'\n]*)'|“([^”\n]*)”|([^\s"'=<>`]+))/gi;function isRemoteOrOpaqueHref(e){return e.startsWith(`#`)||e.startsWith(`//`)||e.startsWith(`data:`)||/^[a-z][a-z0-9+.-]*:/i.test(e)}function stripHrefDecorations(e){let t=e.trim().replace(/^<(.+)>$/,`$1`),S=t.indexOf(`#`),w=S>=0?t.slice(0,S):t,E=w.indexOf(`?`);return E>=0?w.slice(0,E):w}function decodeHrefPath(e){let t=stripHrefDecorations(e);try{return decodeURI(t)}catch{return t}}function mediaKindForAssetPath(e){return mediaKindForSidebarAssetExtension(extname(e).slice(1).toLowerCase())}function errnoCode$1(e){return e instanceof Error&&`code`in e&&typeof e.code==`string`?e.code:null}function collectHrefsFromLine(e,t){for(let S of e.matchAll(MARKDOWN_LINK_OR_IMAGE_RE)){let e=S[1]??S[2];e&&t.add(e)}for(let S of e.matchAll(WIKI_LINK_OR_EMBED_RE)){let e=S[1];e&&t.add(e)}for(let S of e.matchAll(HTML_LINK_ATTR_RE)){let e=S[1]??S[2]??S[3]??S[4];e&&t.add(e)}}function stripHtmlComments(e,t){let S=e,w=``;for(;S.length>0;){if(t.inComment){let e=S.indexOf(`-->`);if(e===-1)return w;S=S.slice(e+3),t.inComment=!1;continue}let e=S.indexOf(`<!--`);if(e===-1)return w+S;w+=S.slice(0,e),S=S.slice(e+4),t.inComment=!0}return w}function extractLocalAssetHrefs(e){let t=new Set,S=createCodeFenceTracker(),w={inComment:!1};for(let E of e.replaceAll(`\r
1226
1226
  `,`
1227
1227
  `).replaceAll(`\r`,`
1228
1228
  `).split(`
@@ -1249,7 +1249,7 @@ Karpathy's insight: "The tedious part of maintaining a knowledge base is not the
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??!0,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(`
1252
- `).slice(1);for(let e of E){if(/^[^\s]/.test(e))break;let t=e.match(/^\s+version:\s*["']?([^"'\s]+)["']?$/);if(t)return t[1]}}async function validateSkillZip(e,t,S={}){let w=S.bundle??`project`,E=statSync(e).size;if(E>MAX_ZIP_BYTES)throw Error(`Built ${e} is ${E} bytes, exceeds ${MAX_ZIP_BYTES}-byte ceiling`);let D=await sha256OfFile(e),O=await readFile$1(join(S.sourceDir??resolveBundledSkillDir(w,{checkDesktop:!1}),`SKILL.md`),`utf-8`),k=BUNDLE_SKILL_NAME[w];if(!RegExp(`^name:\\s+${k}$`,`m`).test(O.slice(0,1500)))throw Error(`SKILL.md frontmatter \`name:\` does not match '${k}'. Check packages/server/assets/skills/${w}/SKILL.md frontmatter.`);let j=extractMetadataVersion(O);if(t!==void 0){if(!j)throw Error(`SKILL.md metadata.version missing. Add it to packages/server/assets/skills/${w}/SKILL.md.`);if(j!==t)throw Error(`SKILL.md metadata.version (${j}) does not match expected version (${t}).`)}return{size:E,sha256:D,skillVersion:j}}async function buildSkillZip(e={}){let t=e.bundle??`project`,S=e.sourceDir??resolveBundledSkillDir(t,{checkDesktop:!0}),w=e.outputPath??join(process.cwd(),`openknowledge.skill`);await zipDirectory(S,w,BUNDLE_SKILL_NAME[t]);let{size:E,sha256:D,skillVersion:O}=await validateSkillZip(w,e.expectedSkillVersion,{bundle:t,sourceDir:S});return{outputPath:w,size:E,sha256:D,skillVersion:O}}const SKILL_INSTALL_EVENTS_FILE_REL=[`.ok`,`skill-install-events.jsonl`];async function recordSkillInstallEvent(e,t){let S=t?.homedir??(()=>process.env.HOME??``),w=t?.warn??((e,t)=>{console.warn(t,e)}),E=S();if(!E){w({event:`skill-install-events.no-home`},`[skill-install-events] HOME not resolvable; telemetry skipped`);return}let D=join(E,...SKILL_INSTALL_EVENTS_FILE_REL),O=`${JSON.stringify(e)}\n`;try{await tracedMkdir(dirname(D),{recursive:!0})}catch(e){w({event:`skill-install-events.mkdir-failed`,error:String(e)},`[skill-install-events] mkdir failed; telemetry skipped`);return}try{await tracedWriteFile(D,O,{flag:`a`,encoding:`utf-8`})}catch(e){w({event:`skill-install-events.append-failed`,error:String(e)},`[skill-install-events] append failed; telemetry skipped`)}}const readFileAsync=promisify(readFile);function skillStateYamlPath(e){return join(e,...SKILL_STATE_REL)}const DEFAULT_LOGGER={warn:(e,t)=>console.warn(t,e)},TRACED_FS_ADAPTER={writeFile:(e,t,S)=>tracedWriteFile(e,t,S),rename:(e,t)=>tracedRename(e,t)};async function readSkillStateFile(e,t=DEFAULT_LOGGER){let S=skillStateYamlPath(e),w;try{w=await readFileAsync(S,`utf-8`)}catch(e){if(e.code===`ENOENT`)return null;throw e}let E=(0,import_dist$1.parseDocument)(w);if(E.errors.length>0)return t.warn({event:`skill-state.yaml-parse-error`,path:S,errors:E.errors.map(e=>e.message)},`skill-state.yml parse failed; treating as fresh install`),null;let D=SkillStateSchema.safeParse(E.toJSON());if(!D.success){let e=D.error.issues.find(e=>e.path.length===1&&e.path[0]===`schema`);return e?t.warn({event:`skill-state.invalid-schema-version`,path:S,issue:e.message},`skill-state.yml has unknown schema version; treating as fresh install`):t.warn({event:`skill-state.schema-violation`,path:S,issues:D.error.issues.map(e=>({path:e.path,message:e.message}))},`skill-state.yml failed schema validation; treating as fresh install`),null}return D.data}async function writeSkillStateFile(e,t){let S=SkillStateSchema.safeParse(t);if(!S.success)throw Error(`Refusing to write invalid skill-state: ${S.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`; `)}`);let w=skillStateYamlPath(e);await tracedMkdir(dirname(w),{recursive:!0});let E=(0,import_dist$1.parseDocument)(``);E.contents=E.createNode(S.data),await atomicWriteFile(w,E.toString(),{fs:TRACED_FS_ADAPTER})}async function readTargetVersion(e,t,S){let w=await readSkillStateFile(e,S);return w===null?null:w.targets[t]?.version??null}async function readTargetRecordedAt(e,t,S){let w=await readSkillStateFile(e,S);return w===null?null:w.targets[t]?.recordedAt??null}async function writeTargetVersion(e,t,S,w,E){if(!SKILL_STATE_VERSION_RE.test(S))throw Error(`Refusing to write invalid version string: ${S}`);let D=await readSkillStateFile(e,E)??emptySkillState(),O=new Date().toISOString(),k=D.targets[t],j=w===void 0?k?.surface??void 0:w,F=j===void 0?{version:S,recordedAt:O}:{version:S,recordedAt:O,surface:j};await writeSkillStateFile(e,{...D,targets:{...D.targets,[t]:F}})}async function readServerPackageVersion(){let e=await readFileAsync(fileURLToPath(new URL(`../package.json`,import.meta.url)),`utf-8`),t=JSON.parse(e);if(typeof t.version!=`string`||t.version.length===0)throw Error(`@inkeep/open-knowledge-server/package.json missing version field`);return t.version}async function readSkillInstallStateSnapshot(e,t){let[S,w]=await Promise.all([readServerPackageVersion(),readAllTargets(e,t)]);return{currentVersion:S,targets:w}}async function readAllTargets(e,t=DEFAULT_LOGGER){let S=null;try{S=await readSkillStateFile(e,t)}catch(w){t.warn({event:`skill-state.read-error`,path:skillStateYamlPath(e),error:String(w)},`non-ENOENT error reading skill-state.yml; treating as absent`),S=null}let w=SKILL_STATE_TARGETS.map(e=>{let t=S?.targets[e];return t?[e,{version:t.version,recordedAt:t.recordedAt}]:[e,null]});return Object.fromEntries(w)}const CENTRAL_SKILL_DIR_REL=[`.agents`,`skills`,`open-knowledge-discovery`],LEGACY_USER_SKILL_NAME=`open-knowledge`,LEGACY_USER_SKILL_HOST_DIRS=[`.claude`,`.cursor`,`.agents`],SKILLS_CLI_SPEC=`skills@~1.5.0`,DEFAULT_TIMEOUT_MS$3=6e4;function centralSkillDir(e){return join(e,...CENTRAL_SKILL_DIR_REL)}async function centralSkillExists(e){try{return(await stat$1(centralSkillDir(e))).isDirectory()}catch{return!1}}function runSpawn(e,t,S,w,E){return new Promise(D=>{let O;try{O=e(t,S,{env:w,stdio:[`ignore`,`pipe`,`pipe`]})}catch(e){D({kind:`spawn-error`,stderr:``,error:e});return}let k=``,j=!1,F=e=>{j||(j=!0,clearTimeout(L),D(e))};O.stderr?.on(`data`,e=>{k+=typeof e==`string`?e:e.toString(`utf-8`)}),O.on(`error`,e=>{F({kind:`spawn-error`,stderr:k,error:e})}),O.on(`exit`,e=>{F(e===0?{kind:`ok`,exitCode:e,stderr:k}:{kind:`nonzero`,exitCode:e,stderr:k})});let L=setTimeout(()=>{try{O.kill(`SIGTERM`)}catch{}F({kind:`timeout`,stderr:k})},E)})}async function anyLegacyUserSkillExists(e){for(let t of LEGACY_USER_SKILL_HOST_DIRS)try{if((await stat$1(join(e,t,`skills`,LEGACY_USER_SKILL_NAME))).isDirectory())return!0}catch{}return!1}async function removeLegacyUserSkill(e,t,S,w,E){if(!await anyLegacyUserSkillExists(e))return;let D=await runSpawn(t,`npx`,[`-y`,SKILLS_CLI_SPEC,`remove`,`--agent`,`*`,`-g`,LEGACY_USER_SKILL_NAME],S,w);D.kind!==`ok`&&E.warn({event:`skill-install.legacy-remove-failed`,reason:D.kind,exitCode:D.exitCode,stderr:D.stderr},"Legacy `open-knowledge` skill removal did not exit cleanly; continuing with install.")}async function installUserSkill(e={}){let t=e.home??homedir(),S=e.logger??{warn:(e,t)=>console.warn(t,e),info:(e,t)=>console.info(t,e)},w=e.spawn??spawn,E=e.timeoutMs??DEFAULT_TIMEOUT_MS$3,D=e.surface??`cli-npx-skills-add`,O=async(e,w,E)=>{await recordSkillInstallEvent({ts:new Date().toISOString(),surface:D,target:`cli-hosts`,bundle:`discovery`,outcome:e,...w===void 0?{}:{version:w},...E===void 0?{}:{reason:E}},{homedir:()=>t,warn:S.warn})},k;try{k=await readServerPackageVersion()}catch(e){return S.warn({event:`skill-install.failed`,reason:`version-read-failed`,error:String(e)},`Skill install aborted — could not read @inkeep/open-knowledge-server version.`),await O(`failed`,void 0,`version-read-failed`),`failed`}let j=await readTargetVersion(t,`cli-hosts`,S).catch(e=>(S.warn({event:`skill-install.gate.read-failed`,error:String(e)},`Could not read cli-hosts install-state; proceeding with fresh install.`),null));if(j!==null&&j===k){if(await centralSkillExists(t))return S.info?.({event:`skill-install.skip-current`,version:k},`Open Knowledge skill already installed at current version; skipping.`),await O(`skip-current`,k),`skip-current`;S.info?.({event:`skill-install.reinstall-missing`,version:k,path:centralSkillDir(t)},`Sidecar matches current version but skill files are missing; reinstalling.`)}let F;try{F=resolveBundledSkillDir(`discovery`,{checkDesktop:!1})}catch(e){return S.warn({event:`skill-install.failed`,reason:`bundled-asset-missing`,error:String(e)},`Skill install aborted — bundled discovery SKILL.md asset not found.`),await O(`failed`,k,`bundled-asset-missing`),`failed`}let L={...process.env,HOME:t};await removeLegacyUserSkill(t,w,L,E,S);let B=await runSpawn(w,`npx`,[`-y`,SKILLS_CLI_SPEC,`add`,F,`--agent`,`*`,`-g`,`-y`,`--copy`],L,E);if(B.kind===`ok`){try{await writeTargetVersion(t,`cli-hosts`,k,D,S)}catch(e){return S.warn({event:`skill-install.failed`,reason:`sidecar-write-failed`,error:String(e)},`Skill install succeeded but sidecar write failed.`),await O(`failed`,k,`sidecar-write-failed`),`failed`}return S.info?.({event:`skill-install.installed`,version:k},`Open Knowledge skill installed to detected agent hosts.`),await O(`installed`,k),`installed`}return B.kind===`timeout`?(S.warn({event:`skill-install.failed`,reason:`timeout`,timeoutMs:E,stderr:B.stderr},`Skill install subprocess timed out. Run manually: npx ${SKILLS_CLI_SPEC} add ${F} --agent '*' -g -y --copy`),await O(`failed`,k,`timeout`),`failed`):B.kind===`spawn-error`?(S.warn({event:`skill-install.failed`,reason:`spawn-error`,error:String(B.error),stderr:B.stderr},`Skill install failed — \`npx\` unavailable or spawn errored. Run manually: npx ${SKILLS_CLI_SPEC} add ${F} --agent '*' -g -y --copy`),await O(`failed`,k,`spawn-error`),`failed`):(S.warn({event:`skill-install.failed`,reason:`nonzero-exit`,exitCode:B.exitCode,stderr:B.stderr},`Skill install subprocess exited non-zero. Run manually: npx ${SKILLS_CLI_SPEC} add ${F} --agent '*' -g -y --copy`),await O(`failed`,k,`nonzero-exit:${B.exitCode??`unknown`}`),`failed`)}const DOWNLOADS_DIR=`Downloads`,SKILL_FILENAME=`openknowledge.skill`;function defaultDownloadsPath(e){return join(e,DOWNLOADS_DIR,SKILL_FILENAME)}function invokeFileAssociation(e,t,S){let w={detached:!0,stdio:`ignore`};try{return t===`darwin`?(S(`open`,[e],w).unref(),{ok:!0}):t===`win32`?(S(`cmd`,[`/c`,`start`,`""`,e],w).unref(),{ok:!0}):t===`linux`?(S(`xdg-open`,[e],w).unref(),{ok:!0}):{ok:!1,reason:`unsupported-platform`,message:`Platform '${t}' has no file-association invocation wired.`}}catch(e){return{ok:!1,reason:`spawn-error`,message:e instanceof Error?e.message:String(e)}}}async function buildAndOpenSkill(e={}){let t=e.home??homedir(),S=resolve(e.out??defaultDownloadsPath(t)),w=e.platformName??platform(),E=e.spawnFn??spawn,D=e.logger,O=async(e,S,w)=>{await recordSkillInstallEvent({ts:new Date().toISOString(),surface:`server-build-and-open`,target:`claude-cowork`,bundle:`project`,outcome:e,...S===void 0?{}:{version:S},...w===void 0?{}:{reason:w}},{homedir:()=>t,warn:D?.warn})};if(!e.force){let e=null;try{e=await readServerPackageVersion()}catch(e){D?.warn?.({event:`skill-install.gate.version-read-failed`,error:String(e)},`Could not read @inkeep/open-knowledge-server version for gate check; rebuilding.`)}if(e!==null){let S=null,w=null;try{[S,w]=await Promise.all([readTargetVersion(t,`claude-cowork`,D),readTargetRecordedAt(t,`claude-cowork`,D)])}catch(e){D?.warn?.({event:`skill-install.gate.read-failed`,error:String(e)},`Could not read claude-cowork install-state; rebuilding.`)}if(S!==null&&S===e)return D?.info?.({event:`skill-install.skip-current`,target:`claude-cowork`,version:e},`Open Knowledge skill already delivered at current version; skipping rebuild.`),await O(`skip-current`,e),{status:`skip-current`,skillVersion:e,...w===null?{}:{recordedAt:w}}}}try{await tracedMkdir(dirname(S),{recursive:!0})}catch(e){let t=e instanceof Error?e.message:String(e);return await O(`failed`,void 0,`mkdir-failed:${t}`),{status:`failed`,buildError:`could not create output directory: ${t}`}}let k;try{k=await buildSkillZip({outputPath:S,bundle:`project`})}catch(e){let t=e instanceof Error?e.message:String(e);return await O(`failed`,void 0,`build-failed:${t}`),{status:`failed`,buildError:t}}let j={status:`built`,outputPath:k.outputPath,size:k.size,sha256:k.sha256,skillVersion:k.skillVersion};if(k.skillVersion)try{await writeTargetVersion(t,`claude-cowork`,k.skillVersion,`server-build-and-open`,D)}catch(e){D?.warn?.({event:`skill-install.state-write-failed`,target:`claude-cowork`,version:k.skillVersion,error:String(e)},`Skill bundle built but install-state write failed; gate will re-trigger build on next click.`)}if(e.noOpen)return await O(`built`,k.skillVersion),j;let F=invokeFileAssociation(k.outputPath,w,E);return F.ok?(await O(`installed`,k.skillVersion),{...j,status:`installed`}):(await O(`built`,k.skillVersion,`handoff-${F.reason}`),{...j,handoffError:{reason:F.reason,message:F.message}})}var UiLockCollisionError=class extends ProcessLockCollisionError{constructor(e,t){super(e,t,`ui`),this.name=`UiLockCollisionError`}};function acquireUiLock(e,t){try{return acquireProcessLock({lockName:`ui`,lockDir:e,metadata:t}).lockPath}catch(e){throw e instanceof ProcessLockCollisionError&&e.lockName===`ui`?new UiLockCollisionError(e.existing,e.lockPath):e}}function updateUiLockPort(e,t){updateProcessLockPort({lockName:`ui`,lockDir:e,port:t})}function readUiLock(e){return readProcessLock({lockName:`ui`,lockDir:e})}function releaseUiLock(e){releaseProcessLock({lockName:`ui`,lockDir:e})}var UploadWriteError=class extends Error{reason;constructor(e,t){super(`UploadWriteError: ${e}`,{cause:t}),this.name=`UploadWriteError`,this.reason=e}};function uploadStatusFor(e){switch(e){case`urn:ok:error:malformed-upload`:return 400;case`urn:ok:error:storage-full`:return 507;case`urn:ok:error:storage-readonly`:return 500;case`urn:ok:error:storage-error`:return 500;case`urn:ok:error:collision-exhaustion`:return 500;default:return assertNeverProblemType(e)}}function classifyUploadErrno(e){return e.code===`ENOSPC`||e.code===`EDQUOT`?`urn:ok:error:storage-full`:e.code===`EROFS`||e.code===`EACCES`||e.code===`EPERM`?`urn:ok:error:storage-readonly`:`urn:ok:error:storage-error`}function uploadTitleFor(e){switch(e){case`urn:ok:error:malformed-upload`:return`Upload payload is malformed.`;case`urn:ok:error:storage-full`:return`Storage is full.`;case`urn:ok:error:storage-readonly`:return`Storage is read-only.`;case`urn:ok:error:storage-error`:return`Failed to write upload.`;case`urn:ok:error:collision-exhaustion`:return`Filename collision retries exhausted.`;default:return assertNeverProblemType(e)}}const log$4=getLogger(`upload-streaming`);var HashingPassThrough=class extends Transform{hash=createHash(`sha256`);bytes=0;digested=!1;_transform(e,t,S){this.hash.update(e),this.bytes+=e.length,S(null,e)}digest(){if(this.digested)throw Error(`HashingPassThrough.digest() already called`);return this.digested=!0,this.hash.digest(`hex`)}byteLength(){return this.bytes}};function tmpUploadDir(e){return resolve(getLocalDir(e),`tmp`)}function mintTempUploadPath(e){let t=tmpUploadDir(e);return tracedMkdirSync(t,{recursive:!0}),resolve(t,`upload-${randomUUID()}`)}function linkTempToFinalWithCollisionRetry(e,t,S){let w=extname(S),E=S.slice(0,S.length-w.length),D=[S,...Array.from({length:99},(e,t)=>`${E}-${t+1}${w}`)];for(let S of D){let w=resolve(t,S);try{tracedLinkSync(e,w);try{tracedUnlinkSync(e)}catch{}return S}catch(t){let S=t.code;if(S===`EEXIST`)continue;try{tracedUnlinkSync(e)}catch{}throw S===`ENOSPC`||S===`EDQUOT`?new UploadWriteError(`urn:ok:error:storage-full`,t):S===`EROFS`||S===`EACCES`||S===`EPERM`?new UploadWriteError(`urn:ok:error:storage-readonly`,t):new UploadWriteError(`urn:ok:error:storage-error`,t)}}try{tracedUnlinkSync(e)}catch{}throw new UploadWriteError(`urn:ok:error:collision-exhaustion`)}function cleanupOrphanUploadTempfiles(e,{ageMs:t=1440*60*1e3}={}){let S=tmpUploadDir(e),w={scanned:0,deleted:0,errors:0};if(!existsSync(S))return w;let E;try{E=readdirSync(S)}catch(e){return log$4.warn({err:e,dir:S},`[upload-tempfile-sweep] readdir failed`),w.errors++,w}let D=Date.now()-t;for(let e of E){if(!e.startsWith(`upload-`))continue;w.scanned++;let t=resolve(S,e);try{if(statSync(t).mtimeMs>=D)continue;tracedUnlinkSync(t),w.deleted++}catch(e){log$4.warn({err:e,path:t},`[upload-tempfile-sweep] entry failed`),w.errors++}}return(w.deleted>0||w.errors>0)&&log$4.info({dir:S,scanned:w.scanned,deleted:w.deleted,errors:w.errors},`[upload-tempfile-sweep] swept ${w.deleted}/${w.scanned} (errors: ${w.errors})`),w}function matchFence$2(e){let t=/^\s{0,3}([`~]{3,})/.exec(e);if(!t)return null;let S=t[1],w=S[0];return w!=="`"&&w!==`~`?null:{char:w,length:S.length}}function isFenceClose$2(e,t){return RegExp(`^\\s{0,3}\\${t.char}{${t.length},}\\s*$`).test(e)}function leadingMarkdownPrefixLength$2(e){let t=/^\s{0,3}(?:#{1,6}\s+|>\s+|(?:[-+*]|\d+[.)])\s+)/.exec(e);return t?t[0].length:0}function readInlineCode$2(e,t){let S=0;for(;e[t+S]==="`";)S++;if(S===0)return null;let w=t+S,E=w;for(;E<e.length;){if(e[E]!=="`"){E++;continue}let t=0;for(;e[E+t]==="`";)t++;if(t===S)return{nextIndex:E+S};E+=t}return{nextIndex:w}}function readWikiLink$2(e,t){let S=/^\[\[([^\n#[\]|]+)(?:#([^\n[\]|]+))?(?:\|([^\n[\]]+))?\]\]/.exec(e.slice(t));if(!S)return null;let w=S[1]?.trim(),E=S[2]?.trim()||null,D=S[3]?.trim()||null;return w?{target:w,alias:D,anchor:E,nextIndex:t+S[0].length}:null}function readMarkdownLink$2(e,t){let S=/^\[([^\]\n]*)\]\((<[^>\n]+>|[^)\s\n]+)((?:\s+(?:"[^"\n]*"|'[^'\n]*'|\([^)\n]*\)))?)\)/.exec(e.slice(t));if(!S)return null;let w=S[2]??``;return{text:S[1]??``,hrefRaw:w,href:w.startsWith(`<`)&&w.endsWith(`>`)?w.slice(1,-1):w,titleSuffix:S[3]??``,nextIndex:t+S[0].length}}function readImageRef(e,t){let S=/^!\[([^\]\n]*)\]\((<[^>\n]+>|[^)\s\n]+)((?:\s+(?:"[^"\n]*"|'[^'\n]*'|\([^)\n]*\)))?)\)/.exec(e.slice(t));if(!S)return null;let w=S[2]??``;return{alt:S[1]??``,hrefRaw:w,href:w.startsWith(`<`)&&w.endsWith(`>`)?w.slice(1,-1):w,titleSuffix:S[3]??``,nextIndex:t+S[0].length}}function splitLines(e){let t=e.split(/(\r\n|\r|\n)/),S=[];for(let e=0;e<t.length;e+=2)S.push({line:t[e]??``,ending:t[e+1]??``});return S}function rewriteWikiLinksInLine(e,t,S){let w=``,E=0,D=0,O=leadingMarkdownPrefixLength$2(e);for(O>0&&(w+=e.slice(0,O),D=O);D<e.length;){if(e[D]===`\\`&&D+1<e.length){w+=e.slice(D,D+2),D+=2;continue}if(e[D]==="`"){let t=readInlineCode$2(e,D);if(t){w+=e.slice(D,t.nextIndex),D=t.nextIndex;continue}}if(e[D]===`[`&&e[D+1]===`[`){let O=readWikiLink$2(e,D);if(O){O.target===t?(w+=`[[${S}${O.anchor?`#${O.anchor}`:``}${O.alias?`|${O.alias}`:``}]]`,E++):w+=e.slice(D,O.nextIndex),D=O.nextIndex;continue}}w+=e[D],D++}return{markdown:w,rewrites:E}}function recomputeRelativeImageHref(e,t,S){let w=e.indexOf(`#`),E=w>=0?e.slice(w):``,D=w>=0?e.slice(0,w):e,O=D.indexOf(`?`),k=O>=0?D.slice(O):``,j=O>=0?D.slice(0,O):D;if(j.startsWith(`/`)||j.startsWith(`//`)||/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(j))return null;let F=posix.dirname(t),L=posix.dirname(S);if(F===L)return null;let B=F===`.`?`/`:`/${F}/`,H=posix.resolve(B,j).slice(1),q=posix.relative(L===`.`?``:L,H);return q||=posix.basename(H),j.startsWith(`./`)&&!q.startsWith(`./`)&&!q.startsWith(`../`)&&(q=`./${q}`),`${q}${k}${E}`}function recomputeRelativeMarkdownHref(e,t,S){let w=e.indexOf(`#`),E=w>=0?e.slice(w):``,D=w>=0?e.slice(0,w):e,O=D.indexOf(`?`),k=O>=0?D.slice(O):``,j=O>=0?D.slice(0,O):D,F=posix.dirname(t),L=posix.relative(F===`.`?``:F,S);return L||=posix.basename(S),j.endsWith(`.mdx`)?L+=`.mdx`:j.endsWith(`.md`)&&(L+=`.md`),j.startsWith(`./`)&&!L.startsWith(`./`)&&!L.startsWith(`../`)&&(L=`./${L}`),`${L}${k}${E}`}function rewriteMarkdownLinksInLine(e,t,S,w){let E=``,D=0,O=0,k=leadingMarkdownPrefixLength$2(e);for(k>0&&(E+=e.slice(0,k),O=k);O<e.length;){if(e[O]===`\\`&&O+1<e.length){E+=e.slice(O,O+2),O+=2;continue}if(e[O]==="`"){let t=readInlineCode$2(e,O);if(t){E+=e.slice(O,t.nextIndex),O=t.nextIndex;continue}}if(e[O]===`[`&&e[O+1]===`[`){let t=readWikiLink$2(e,O);if(t){E+=e.slice(O,t.nextIndex),O=t.nextIndex;continue}}if(e[O]===`!`&&e[O+1]===`[`){let k=readImageRef(e,O);if(k){let j=t===S&&S!==w?recomputeRelativeImageHref(k.href,S,w):null;if(j!==null){let e=k.hrefRaw.startsWith(`<`)&&k.hrefRaw.endsWith(`>`)?`<${j}>`:j;E+=`![${k.alt}](${e}${k.titleSuffix})`,D++}else E+=e.slice(O,k.nextIndex);O=k.nextIndex;continue}}if(e[O]===`[`){let k=readMarkdownLink$2(e,O);if(k){if(resolveInternalHref(k.href,t)?.docName===S){let e=recomputeRelativeMarkdownHref(k.href,t,w),S=k.hrefRaw.startsWith(`<`)&&k.hrefRaw.endsWith(`>`)?`<${e}>`:e;E+=`[${k.text}](${S}${k.titleSuffix})`,D++}else E+=e.slice(O,k.nextIndex);O=k.nextIndex;continue}}E+=e[O],O++}return{markdown:E,rewrites:D}}const MIRROR_TAG_RE=/<Mirror\b([^>]*)\/>/g,MIRROR_SRC_ATTR_RE=/(\bsrc=)(["'])([^"']*)\2/g;function rewriteMirrorSrcInLine(e,t,S){let w=``,E=0,D=0;for(;D<e.length;){if(e[D]===`\\`&&D+1<e.length){w+=e.slice(D,D+2),D+=2;continue}if(e[D]==="`"){let t=readInlineCode$2(e,D);if(t){w+=e.slice(D,t.nextIndex),D=t.nextIndex;continue}}if(e[D]===`<`){let O=new RegExp(MIRROR_TAG_RE.source),k=e.slice(D),j=O.exec(k);if(j&&j.index===0){let[e,O]=j,k=new RegExp(MIRROR_SRC_ATTR_RE.source,MIRROR_SRC_ATTR_RE.flags),F=O.replace(k,(e,w,D,O)=>O===t?(E++,`${w}${D}${S}${D}`):e);w+=`<Mirror${F}/>`,D+=e.length;continue}}w+=e[D],D++}return{markdown:w,rewrites:E}}function rewriteMirrorSrcForDocumentRename(e,t,S){let w=null,E=0;return{markdown:splitLines(e).map(({line:e,ending:D})=>{if(w)return isFenceClose$2(e,w)&&(w=null),`${e}${D}`;let O=matchFence$2(e);if(O)return w=O,`${e}${D}`;let k=rewriteMirrorSrcInLine(e,t,S);return E+=k.rewrites,`${k.markdown}${D}`}).join(``),rewrites:E}}function rewriteWikiLinksForDocumentRename(e,t,S){let w=null,E=0;return{markdown:splitLines(e).map(({line:e,ending:D})=>{if(w)return isFenceClose$2(e,w)&&(w=null),`${e}${D}`;let O=matchFence$2(e);if(O)return w=O,`${e}${D}`;let k=rewriteWikiLinksInLine(e,t,S);return E+=k.rewrites,`${k.markdown}${D}`}).join(``),rewrites:E}}function rewriteMarkdownLinksForDocumentRename(e,t,S,w){let E=null,D=0;return{markdown:splitLines(e).map(({line:e,ending:O})=>{if(E)return isFenceClose$2(e,E)&&(E=null),`${e}${O}`;let k=matchFence$2(e);if(k)return E=k,`${e}${O}`;let j=rewriteMarkdownLinksInLine(e,t,S,w);return D+=j.rewrites,`${j.markdown}${O}`}).join(``),rewrites:D}}function rewriteOutboundMarkdownLinksInLine(e,t,S){let w=``,E=0,D=0,O=leadingMarkdownPrefixLength$2(e);for(O>0&&(w+=e.slice(0,O),D=O);D<e.length;){if(e[D]===`\\`&&D+1<e.length){w+=e.slice(D,D+2),D+=2;continue}if(e[D]==="`"){let t=readInlineCode$2(e,D);if(t){w+=e.slice(D,t.nextIndex),D=t.nextIndex;continue}}if(e[D]===`[`&&e[D+1]===`[`){let t=readWikiLink$2(e,D);if(t){w+=e.slice(D,t.nextIndex),D=t.nextIndex;continue}}if(e[D]===`!`&&e[D+1]===`[`){let t=readImageRef(e,D);if(t){w+=e.slice(D,t.nextIndex),D=t.nextIndex;continue}}if(e[D]===`[`){let O=readMarkdownLink$2(e,D);if(O){let k=resolveInternalHref(O.href,t);if(k!==null){let t=recomputeRelativeMarkdownHref(O.href,S,k.docName);if(t!==O.href){let e=O.hrefRaw.startsWith(`<`)&&O.hrefRaw.endsWith(`>`)?`<${t}>`:t;w+=`[${O.text}](${e}${O.titleSuffix})`,E++}else w+=e.slice(D,O.nextIndex)}else w+=e.slice(D,O.nextIndex);D=O.nextIndex;continue}}w+=e[D],D++}return{markdown:w,rewrites:E}}function rewriteOutboundMarkdownLinksForSourceMove(e,t,S){if(posix.dirname(t)===posix.dirname(S))return{markdown:e,rewrites:0};let w=null,E=0;return{markdown:splitLines(e).map(({line:e,ending:D})=>{if(w)return isFenceClose$2(e,w)&&(w=null),`${e}${D}`;let O=matchFence$2(e);if(O)return w=O,`${e}${D}`;let k=rewriteOutboundMarkdownLinksInLine(e,t,S);return E+=k.rewrites,`${k.markdown}${D}`}).join(``),rewrites:E}}var ManagedRenameCollisionError=class extends Error{colliding;constructor(e){super(`Managed rename collision: ${e.map(e=>`'${e.existing}' and '${e.incoming}' both target '${e.to}'`).join(`; `)}`),this.name=`ManagedRenameCollisionError`,this.colliding=e}},ManagedRenameSourceNotFoundError=class extends Error{kind;constructor(e){super(`${e} does not exist`),this.name=`ManagedRenameSourceNotFoundError`,this.kind=e}},ManagedRenameDestinationExistsError=class extends Error{constructor(){super(`Destination already exists`),this.name=`ManagedRenameDestinationExistsError`}},ManagedRenameSourceTypeMismatchError=class extends Error{kind;constructor(e){super(`Source path is not a ${e}`),this.name=`ManagedRenameSourceTypeMismatchError`,this.kind=e}},SymlinkEscapeError=class extends Error{constructor(e){super(`symlink-escape: ${e}`),this.name=`SymlinkEscapeError`}},BacklinkIndexRequiredError=class extends Error{constructor(){super(`Managed rename requires backlink index support`),this.name=`BacklinkIndexRequiredError`}},ManagedRenameSnapshotMissingError=class extends Error{docName;constructor(e){super(`Cannot snapshot missing document: ${e}`),this.name=`ManagedRenameSnapshotMissingError`,this.docName=e}},ManagedRenameMissingDocumentError=class extends Error{docName;constructor(e){super(`Cannot rename missing document: ${e}`),this.name=`ManagedRenameMissingDocumentError`,this.docName=e}};function buildRenameMap(e){let t=new Map,S=[];for(let{from:w,to:E}of e){for(let[e,D]of t)e!==w&&D===E&&S.push({existing:e,incoming:w,to:E});t.set(w,E)}if(S.length>0)throw new ManagedRenameCollisionError(S);return t}function rewriteSupportedLinksForRename(e,t,S,w){let{frontmatter:E,body:D}=stripFrontmatter(e),O=rewriteWikiLinksForDocumentRename(D,S,w),k=rewriteMarkdownLinksForDocumentRename(O.markdown,t,S,w),j=rewriteMirrorSrcForDocumentRename(k.markdown,S,w);return{markdown:prependFrontmatter(E,j.markdown),rewrites:O.rewrites+k.rewrites+j.rewrites}}function applyRenameMap(e,t,S){let w=e,E=0,D,O=[];for(let[e,w]of S)e!==w&&(e===t?D=w:O.push([e,w]));if(D!==void 0){let e=rewriteSupportedLinksForRename(w,t,t,D);w=e.markdown,E+=e.rewrites;let{frontmatter:S,body:O}=stripFrontmatter(w),k=rewriteOutboundMarkdownLinksForSourceMove(O,t,D);w=prependFrontmatter(S,k.markdown),E+=k.rewrites}let k=D??t,j=new Map;for(let[e,t]of O){let S=`__OK_RENAME_${randomUUID().replaceAll(`-`,``)}__`,D=rewriteSupportedLinksForRename(w,k,e,S);D.rewrites>0&&(w=D.markdown,E+=D.rewrites,j.set(S,t))}for(let[e,t]of j)w=rewriteSupportedLinksForRename(w,k,e,t).markdown;return{markdown:w,rewrites:E}}const WIKI_LINK_RE$1=/\[\[([^\n#[\]|]+)(?:#([^\n[\]|]+))?(?:\|([^\n[\]]+))?\]\]/y,MD_LINK_RE$1=/\[([^\]\n]*)\]\((<[^>\n]+>|[^)\s\n]+)(?:\s+(?:"[^"\n]*"|'[^'\n]*'|\([^)\n]*\)))?\)/y;function createEmptyState$1(){return{backward:new Map,forward:new Map,externalForward:new Map,externalBackward:new Map}}function mergeLinkMeta(e,t){return e?{anchor:e.anchor??t.anchor,snippet:e.snippet??t.snippet}:t}function getRepresentativeAnchor(e){if(!e)return null;for(let[,t]of[...e.entries()].sort(([e],[t])=>e.localeCompare(t)))if(t.anchor)return t.anchor;return null}function externalNodeId(e){return`external:${e}`}function externalUrlFromNodeId(e){return e.startsWith(`external:`)?e.slice(9):null}function normalizeSnippet$1(e){return e.replace(/\s+/g,` `).trim()}function snippetAround$1(e,t,S){if(!normalizeSnippet$1(e))return null;let w=Math.max(e.lastIndexOf(`.`,t-1),e.lastIndexOf(`?`,t-1),e.lastIndexOf(`!`,t-1),e.lastIndexOf(`
1252
+ `).slice(1);for(let e of E){if(/^[^\s]/.test(e))break;let t=e.match(/^\s+version:\s*["']?([^"'\s]+)["']?$/);if(t)return t[1]}}async function validateSkillZip(e,t,S={}){let w=S.bundle??`project`,E=statSync(e).size;if(E>MAX_ZIP_BYTES)throw Error(`Built ${e} is ${E} bytes, exceeds ${MAX_ZIP_BYTES}-byte ceiling`);let D=await sha256OfFile(e),O=await readFile$1(join(S.sourceDir??resolveBundledSkillDir(w,{checkDesktop:!1}),`SKILL.md`),`utf-8`),k=BUNDLE_SKILL_NAME[w];if(!RegExp(`^name:\\s+${k}$`,`m`).test(O.slice(0,1500)))throw Error(`SKILL.md frontmatter \`name:\` does not match '${k}'. Check packages/server/assets/skills/${w}/SKILL.md frontmatter.`);let j=extractMetadataVersion(O);if(t!==void 0){if(!j)throw Error(`SKILL.md metadata.version missing. Add it to packages/server/assets/skills/${w}/SKILL.md.`);if(j!==t)throw Error(`SKILL.md metadata.version (${j}) does not match expected version (${t}).`)}return{size:E,sha256:D,skillVersion:j}}async function buildSkillZip(e={}){let t=e.bundle??`project`,S=e.sourceDir??resolveBundledSkillDir(t,{checkDesktop:e.checkDesktop??!0}),w=e.outputPath??join(process.cwd(),`openknowledge.skill`);await zipDirectory(S,w,BUNDLE_SKILL_NAME[t]);let{size:E,sha256:D,skillVersion:O}=await validateSkillZip(w,e.expectedSkillVersion,{bundle:t,sourceDir:S});return{outputPath:w,size:E,sha256:D,skillVersion:O}}const SKILL_INSTALL_EVENTS_FILE_REL=[`.ok`,`skill-install-events.jsonl`];async function recordSkillInstallEvent(e,t){let S=t?.homedir??(()=>process.env.HOME??``),w=t?.warn??((e,t)=>{console.warn(t,e)}),E=S();if(!E){w({event:`skill-install-events.no-home`},`[skill-install-events] HOME not resolvable; telemetry skipped`);return}let D=join(E,...SKILL_INSTALL_EVENTS_FILE_REL),O=`${JSON.stringify(e)}\n`;try{await tracedMkdir(dirname(D),{recursive:!0})}catch(e){w({event:`skill-install-events.mkdir-failed`,error:String(e)},`[skill-install-events] mkdir failed; telemetry skipped`);return}try{await tracedWriteFile(D,O,{flag:`a`,encoding:`utf-8`})}catch(e){w({event:`skill-install-events.append-failed`,error:String(e)},`[skill-install-events] append failed; telemetry skipped`)}}const readFileAsync=promisify(readFile);function skillStateYamlPath(e){return join(e,...SKILL_STATE_REL)}const DEFAULT_LOGGER={warn:(e,t)=>console.warn(t,e)},TRACED_FS_ADAPTER={writeFile:(e,t,S)=>tracedWriteFile(e,t,S),rename:(e,t)=>tracedRename(e,t)};async function readSkillStateFile(e,t=DEFAULT_LOGGER){let S=skillStateYamlPath(e),w;try{w=await readFileAsync(S,`utf-8`)}catch(e){if(e.code===`ENOENT`)return null;throw e}let E=(0,import_dist$1.parseDocument)(w);if(E.errors.length>0)return t.warn({event:`skill-state.yaml-parse-error`,path:S,errors:E.errors.map(e=>e.message)},`skill-state.yml parse failed; treating as fresh install`),null;let D=SkillStateSchema.safeParse(E.toJSON());if(!D.success){let e=D.error.issues.find(e=>e.path.length===1&&e.path[0]===`schema`);return e?t.warn({event:`skill-state.invalid-schema-version`,path:S,issue:e.message},`skill-state.yml has unknown schema version; treating as fresh install`):t.warn({event:`skill-state.schema-violation`,path:S,issues:D.error.issues.map(e=>({path:e.path,message:e.message}))},`skill-state.yml failed schema validation; treating as fresh install`),null}return D.data}async function writeSkillStateFile(e,t){let S=SkillStateSchema.safeParse(t);if(!S.success)throw Error(`Refusing to write invalid skill-state: ${S.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`; `)}`);let w=skillStateYamlPath(e);await tracedMkdir(dirname(w),{recursive:!0});let E=(0,import_dist$1.parseDocument)(``);E.contents=E.createNode(S.data),await atomicWriteFile(w,E.toString(),{fs:TRACED_FS_ADAPTER})}async function readTargetVersion(e,t,S){let w=await readSkillStateFile(e,S);return w===null?null:w.targets[t]?.version??null}async function readTargetRecordedAt(e,t,S){let w=await readSkillStateFile(e,S);return w===null?null:w.targets[t]?.recordedAt??null}async function writeTargetVersion(e,t,S,w,E){if(!SKILL_STATE_VERSION_RE.test(S))throw Error(`Refusing to write invalid version string: ${S}`);let D=await readSkillStateFile(e,E)??emptySkillState(),O=new Date().toISOString(),k=D.targets[t],j=w===void 0?k?.surface??void 0:w,F=j===void 0?{version:S,recordedAt:O}:{version:S,recordedAt:O,surface:j};await writeSkillStateFile(e,{...D,targets:{...D.targets,[t]:F}})}async function readServerPackageVersion(){let e=await readFileAsync(fileURLToPath(new URL(`../package.json`,import.meta.url)),`utf-8`),t=JSON.parse(e);if(typeof t.version!=`string`||t.version.length===0)throw Error(`@inkeep/open-knowledge-server/package.json missing version field`);return t.version}async function readSkillInstallStateSnapshot(e,t){let[S,w]=await Promise.all([readServerPackageVersion(),readAllTargets(e,t)]);return{currentVersion:S,targets:w}}async function readAllTargets(e,t=DEFAULT_LOGGER){let S=null;try{S=await readSkillStateFile(e,t)}catch(w){t.warn({event:`skill-state.read-error`,path:skillStateYamlPath(e),error:String(w)},`non-ENOENT error reading skill-state.yml; treating as absent`),S=null}let w=SKILL_STATE_TARGETS.map(e=>{let t=S?.targets[e];return t?[e,{version:t.version,recordedAt:t.recordedAt}]:[e,null]});return Object.fromEntries(w)}const CENTRAL_SKILL_DIR_REL=[`.agents`,`skills`,`open-knowledge-discovery`],LEGACY_USER_SKILL_NAME=`open-knowledge`,LEGACY_USER_SKILL_HOST_DIRS=[`.claude`,`.cursor`,`.agents`],SKILLS_CLI_SPEC=`skills@~1.5.0`,DEFAULT_TIMEOUT_MS$3=6e4;function centralSkillDir(e){return join(e,...CENTRAL_SKILL_DIR_REL)}async function centralSkillExists(e){try{return(await stat$1(centralSkillDir(e))).isDirectory()}catch{return!1}}function runSpawn(e,t,S,w,E){return new Promise(D=>{let O;try{O=e(t,S,{env:w,stdio:[`ignore`,`pipe`,`pipe`]})}catch(e){D({kind:`spawn-error`,stderr:``,error:e});return}let k=``,j=!1,F=e=>{j||(j=!0,clearTimeout(L),D(e))};O.stderr?.on(`data`,e=>{k+=typeof e==`string`?e:e.toString(`utf-8`)}),O.on(`error`,e=>{F({kind:`spawn-error`,stderr:k,error:e})}),O.on(`exit`,e=>{F(e===0?{kind:`ok`,exitCode:e,stderr:k}:{kind:`nonzero`,exitCode:e,stderr:k})});let L=setTimeout(()=>{try{O.kill(`SIGTERM`)}catch{}F({kind:`timeout`,stderr:k})},E)})}async function anyLegacyUserSkillExists(e){for(let t of LEGACY_USER_SKILL_HOST_DIRS)try{if((await stat$1(join(e,t,`skills`,LEGACY_USER_SKILL_NAME))).isDirectory())return!0}catch{}return!1}async function removeLegacyUserSkill(e,t,S,w,E){if(!await anyLegacyUserSkillExists(e))return;let D=await runSpawn(t,`npx`,[`-y`,SKILLS_CLI_SPEC,`remove`,`--agent`,`*`,`-g`,LEGACY_USER_SKILL_NAME],S,w);D.kind!==`ok`&&E.warn({event:`skill-install.legacy-remove-failed`,reason:D.kind,exitCode:D.exitCode,stderr:D.stderr},"Legacy `open-knowledge` skill removal did not exit cleanly; continuing with install.")}async function installUserSkill(e={}){let t=e.home??homedir(),S=e.logger??{warn:(e,t)=>console.warn(t,e),info:(e,t)=>console.info(t,e)},w=e.spawn??spawn,E=e.timeoutMs??DEFAULT_TIMEOUT_MS$3,D=e.surface??`cli-npx-skills-add`,O=async(e,w,E)=>{await recordSkillInstallEvent({ts:new Date().toISOString(),surface:D,target:`cli-hosts`,bundle:`discovery`,outcome:e,...w===void 0?{}:{version:w},...E===void 0?{}:{reason:E}},{homedir:()=>t,warn:S.warn})},k;try{k=await readServerPackageVersion()}catch(e){return S.warn({event:`skill-install.failed`,reason:`version-read-failed`,error:String(e)},`Skill install aborted — could not read @inkeep/open-knowledge-server version.`),await O(`failed`,void 0,`version-read-failed`),`failed`}let j=await readTargetVersion(t,`cli-hosts`,S).catch(e=>(S.warn({event:`skill-install.gate.read-failed`,error:String(e)},`Could not read cli-hosts install-state; proceeding with fresh install.`),null));if(j!==null&&j===k){if(await centralSkillExists(t))return S.info?.({event:`skill-install.skip-current`,version:k},`Open Knowledge skill already installed at current version; skipping.`),await O(`skip-current`,k),`skip-current`;S.info?.({event:`skill-install.reinstall-missing`,version:k,path:centralSkillDir(t)},`Sidecar matches current version but skill files are missing; reinstalling.`)}let F;try{F=resolveBundledSkillDir(`discovery`,{checkDesktop:!1})}catch(e){return S.warn({event:`skill-install.failed`,reason:`bundled-asset-missing`,error:String(e)},`Skill install aborted — bundled discovery SKILL.md asset not found.`),await O(`failed`,k,`bundled-asset-missing`),`failed`}let L={...process.env,HOME:t};await removeLegacyUserSkill(t,w,L,E,S);let B=await runSpawn(w,`npx`,[`-y`,SKILLS_CLI_SPEC,`add`,F,`--agent`,`*`,`-g`,`-y`,`--copy`],L,E);if(B.kind===`ok`){try{await writeTargetVersion(t,`cli-hosts`,k,D,S)}catch(e){return S.warn({event:`skill-install.failed`,reason:`sidecar-write-failed`,error:String(e)},`Skill install succeeded but sidecar write failed.`),await O(`failed`,k,`sidecar-write-failed`),`failed`}return S.info?.({event:`skill-install.installed`,version:k},`Open Knowledge skill installed to detected agent hosts.`),await O(`installed`,k),`installed`}return B.kind===`timeout`?(S.warn({event:`skill-install.failed`,reason:`timeout`,timeoutMs:E,stderr:B.stderr},`Skill install subprocess timed out. Run manually: npx ${SKILLS_CLI_SPEC} add ${F} --agent '*' -g -y --copy`),await O(`failed`,k,`timeout`),`failed`):B.kind===`spawn-error`?(S.warn({event:`skill-install.failed`,reason:`spawn-error`,error:String(B.error),stderr:B.stderr},`Skill install failed — \`npx\` unavailable or spawn errored. Run manually: npx ${SKILLS_CLI_SPEC} add ${F} --agent '*' -g -y --copy`),await O(`failed`,k,`spawn-error`),`failed`):(S.warn({event:`skill-install.failed`,reason:`nonzero-exit`,exitCode:B.exitCode,stderr:B.stderr},`Skill install subprocess exited non-zero. Run manually: npx ${SKILLS_CLI_SPEC} add ${F} --agent '*' -g -y --copy`),await O(`failed`,k,`nonzero-exit:${B.exitCode??`unknown`}`),`failed`)}const DOWNLOADS_DIR=`Downloads`,SKILL_FILENAME=`openknowledge.skill`;function defaultDownloadsPath(e){return join(e,DOWNLOADS_DIR,SKILL_FILENAME)}function invokeFileAssociation(e,t,S){let w={detached:!0,stdio:`ignore`};try{return t===`darwin`?(S(`open`,[e],w).unref(),{ok:!0}):t===`win32`?(S(`cmd`,[`/c`,`start`,`""`,e],w).unref(),{ok:!0}):t===`linux`?(S(`xdg-open`,[e],w).unref(),{ok:!0}):{ok:!1,reason:`unsupported-platform`,message:`Platform '${t}' has no file-association invocation wired.`}}catch(e){return{ok:!1,reason:`spawn-error`,message:e instanceof Error?e.message:String(e)}}}async function buildAndOpenSkill(e={}){let t=e.home??homedir(),S=resolve(e.out??defaultDownloadsPath(t)),w=e.platformName??platform(),E=e.spawnFn??spawn,D=e.logger,O=async(e,S,w)=>{await recordSkillInstallEvent({ts:new Date().toISOString(),surface:`server-build-and-open`,target:`claude-cowork`,bundle:`project`,outcome:e,...S===void 0?{}:{version:S},...w===void 0?{}:{reason:w}},{homedir:()=>t,warn:D?.warn})};if(!e.force){let e=null;try{e=await readServerPackageVersion()}catch(e){D?.warn?.({event:`skill-install.gate.version-read-failed`,error:String(e)},`Could not read @inkeep/open-knowledge-server version for gate check; rebuilding.`)}if(e!==null){let S=null,w=null;try{[S,w]=await Promise.all([readTargetVersion(t,`claude-cowork`,D),readTargetRecordedAt(t,`claude-cowork`,D)])}catch(e){D?.warn?.({event:`skill-install.gate.read-failed`,error:String(e)},`Could not read claude-cowork install-state; rebuilding.`)}if(S!==null&&S===e)return D?.info?.({event:`skill-install.skip-current`,target:`claude-cowork`,version:e},`Open Knowledge skill already delivered at current version; skipping rebuild.`),await O(`skip-current`,e),{status:`skip-current`,skillVersion:e,...w===null?{}:{recordedAt:w}}}}try{await tracedMkdir(dirname(S),{recursive:!0})}catch(e){let t=e instanceof Error?e.message:String(e);return await O(`failed`,void 0,`mkdir-failed:${t}`),{status:`failed`,buildError:`could not create output directory: ${t}`}}let k;try{k=await buildSkillZip({outputPath:S,bundle:`project`})}catch(e){let t=e instanceof Error?e.message:String(e);return await O(`failed`,void 0,`build-failed:${t}`),{status:`failed`,buildError:t}}let j={status:`built`,outputPath:k.outputPath,size:k.size,sha256:k.sha256,skillVersion:k.skillVersion};if(k.skillVersion)try{await writeTargetVersion(t,`claude-cowork`,k.skillVersion,`server-build-and-open`,D)}catch(e){D?.warn?.({event:`skill-install.state-write-failed`,target:`claude-cowork`,version:k.skillVersion,error:String(e)},`Skill bundle built but install-state write failed; gate will re-trigger build on next click.`)}if(e.noOpen)return await O(`built`,k.skillVersion),j;let F=invokeFileAssociation(k.outputPath,w,E);return F.ok?(await O(`installed`,k.skillVersion),{...j,status:`installed`}):(await O(`built`,k.skillVersion,`handoff-${F.reason}`),{...j,handoffError:{reason:F.reason,message:F.message}})}var UiLockCollisionError=class extends ProcessLockCollisionError{constructor(e,t){super(e,t,`ui`),this.name=`UiLockCollisionError`}};function acquireUiLock(e,t){try{return acquireProcessLock({lockName:`ui`,lockDir:e,metadata:t}).lockPath}catch(e){throw e instanceof ProcessLockCollisionError&&e.lockName===`ui`?new UiLockCollisionError(e.existing,e.lockPath):e}}function updateUiLockPort(e,t){updateProcessLockPort({lockName:`ui`,lockDir:e,port:t})}function readUiLock(e){return readProcessLock({lockName:`ui`,lockDir:e})}function releaseUiLock(e){releaseProcessLock({lockName:`ui`,lockDir:e})}var UploadWriteError=class extends Error{reason;constructor(e,t){super(`UploadWriteError: ${e}`,{cause:t}),this.name=`UploadWriteError`,this.reason=e}};function uploadStatusFor(e){switch(e){case`urn:ok:error:malformed-upload`:return 400;case`urn:ok:error:storage-full`:return 507;case`urn:ok:error:storage-readonly`:return 500;case`urn:ok:error:storage-error`:return 500;case`urn:ok:error:collision-exhaustion`:return 500;default:return assertNeverProblemType(e)}}function classifyUploadErrno(e){return e.code===`ENOSPC`||e.code===`EDQUOT`?`urn:ok:error:storage-full`:e.code===`EROFS`||e.code===`EACCES`||e.code===`EPERM`?`urn:ok:error:storage-readonly`:`urn:ok:error:storage-error`}function uploadTitleFor(e){switch(e){case`urn:ok:error:malformed-upload`:return`Upload payload is malformed.`;case`urn:ok:error:storage-full`:return`Storage is full.`;case`urn:ok:error:storage-readonly`:return`Storage is read-only.`;case`urn:ok:error:storage-error`:return`Failed to write upload.`;case`urn:ok:error:collision-exhaustion`:return`Filename collision retries exhausted.`;default:return assertNeverProblemType(e)}}const log$4=getLogger(`upload-streaming`);var HashingPassThrough=class extends Transform{hash=createHash(`sha256`);bytes=0;digested=!1;_transform(e,t,S){this.hash.update(e),this.bytes+=e.length,S(null,e)}digest(){if(this.digested)throw Error(`HashingPassThrough.digest() already called`);return this.digested=!0,this.hash.digest(`hex`)}byteLength(){return this.bytes}};function tmpUploadDir(e){return resolve(getLocalDir(e),`tmp`)}function mintTempUploadPath(e){let t=tmpUploadDir(e);return tracedMkdirSync(t,{recursive:!0}),resolve(t,`upload-${randomUUID()}`)}function linkTempToFinalWithCollisionRetry(e,t,S){let w=extname(S),E=S.slice(0,S.length-w.length),D=[S,...Array.from({length:99},(e,t)=>`${E}-${t+1}${w}`)];for(let S of D){let w=resolve(t,S);try{tracedLinkSync(e,w);try{tracedUnlinkSync(e)}catch{}return S}catch(t){let S=t.code;if(S===`EEXIST`)continue;try{tracedUnlinkSync(e)}catch{}throw S===`ENOSPC`||S===`EDQUOT`?new UploadWriteError(`urn:ok:error:storage-full`,t):S===`EROFS`||S===`EACCES`||S===`EPERM`?new UploadWriteError(`urn:ok:error:storage-readonly`,t):new UploadWriteError(`urn:ok:error:storage-error`,t)}}try{tracedUnlinkSync(e)}catch{}throw new UploadWriteError(`urn:ok:error:collision-exhaustion`)}function cleanupOrphanUploadTempfiles(e,{ageMs:t=1440*60*1e3}={}){let S=tmpUploadDir(e),w={scanned:0,deleted:0,errors:0};if(!existsSync(S))return w;let E;try{E=readdirSync(S)}catch(e){return log$4.warn({err:e,dir:S},`[upload-tempfile-sweep] readdir failed`),w.errors++,w}let D=Date.now()-t;for(let e of E){if(!e.startsWith(`upload-`))continue;w.scanned++;let t=resolve(S,e);try{if(statSync(t).mtimeMs>=D)continue;tracedUnlinkSync(t),w.deleted++}catch(e){log$4.warn({err:e,path:t},`[upload-tempfile-sweep] entry failed`),w.errors++}}return(w.deleted>0||w.errors>0)&&log$4.info({dir:S,scanned:w.scanned,deleted:w.deleted,errors:w.errors},`[upload-tempfile-sweep] swept ${w.deleted}/${w.scanned} (errors: ${w.errors})`),w}function matchFence$2(e){let t=/^\s{0,3}([`~]{3,})/.exec(e);if(!t)return null;let S=t[1],w=S[0];return w!=="`"&&w!==`~`?null:{char:w,length:S.length}}function isFenceClose$2(e,t){return RegExp(`^\\s{0,3}\\${t.char}{${t.length},}\\s*$`).test(e)}function leadingMarkdownPrefixLength$2(e){let t=/^\s{0,3}(?:#{1,6}\s+|>\s+|(?:[-+*]|\d+[.)])\s+)/.exec(e);return t?t[0].length:0}function readInlineCode$2(e,t){let S=0;for(;e[t+S]==="`";)S++;if(S===0)return null;let w=t+S,E=w;for(;E<e.length;){if(e[E]!=="`"){E++;continue}let t=0;for(;e[E+t]==="`";)t++;if(t===S)return{nextIndex:E+S};E+=t}return{nextIndex:w}}function readWikiLink$2(e,t){let S=/^\[\[([^\n#[\]|]+)(?:#([^\n[\]|]+))?(?:\|([^\n[\]]+))?\]\]/.exec(e.slice(t));if(!S)return null;let w=S[1]?.trim(),E=S[2]?.trim()||null,D=S[3]?.trim()||null;return w?{target:w,alias:D,anchor:E,nextIndex:t+S[0].length}:null}function readMarkdownLink$2(e,t){let S=/^\[([^\]\n]*)\]\((<[^>\n]+>|[^)\s\n]+)((?:\s+(?:"[^"\n]*"|'[^'\n]*'|\([^)\n]*\)))?)\)/.exec(e.slice(t));if(!S)return null;let w=S[2]??``;return{text:S[1]??``,hrefRaw:w,href:w.startsWith(`<`)&&w.endsWith(`>`)?w.slice(1,-1):w,titleSuffix:S[3]??``,nextIndex:t+S[0].length}}function readImageRef(e,t){let S=/^!\[([^\]\n]*)\]\((<[^>\n]+>|[^)\s\n]+)((?:\s+(?:"[^"\n]*"|'[^'\n]*'|\([^)\n]*\)))?)\)/.exec(e.slice(t));if(!S)return null;let w=S[2]??``;return{alt:S[1]??``,hrefRaw:w,href:w.startsWith(`<`)&&w.endsWith(`>`)?w.slice(1,-1):w,titleSuffix:S[3]??``,nextIndex:t+S[0].length}}function splitLines(e){let t=e.split(/(\r\n|\r|\n)/),S=[];for(let e=0;e<t.length;e+=2)S.push({line:t[e]??``,ending:t[e+1]??``});return S}function rewriteWikiLinksInLine(e,t,S){let w=``,E=0,D=0,O=leadingMarkdownPrefixLength$2(e);for(O>0&&(w+=e.slice(0,O),D=O);D<e.length;){if(e[D]===`\\`&&D+1<e.length){w+=e.slice(D,D+2),D+=2;continue}if(e[D]==="`"){let t=readInlineCode$2(e,D);if(t){w+=e.slice(D,t.nextIndex),D=t.nextIndex;continue}}if(e[D]===`[`&&e[D+1]===`[`){let O=readWikiLink$2(e,D);if(O){O.target===t?(w+=`[[${S}${O.anchor?`#${O.anchor}`:``}${O.alias?`|${O.alias}`:``}]]`,E++):w+=e.slice(D,O.nextIndex),D=O.nextIndex;continue}}w+=e[D],D++}return{markdown:w,rewrites:E}}function recomputeRelativeImageHref(e,t,S){let w=e.indexOf(`#`),E=w>=0?e.slice(w):``,D=w>=0?e.slice(0,w):e,O=D.indexOf(`?`),k=O>=0?D.slice(O):``,j=O>=0?D.slice(0,O):D;if(j.startsWith(`/`)||j.startsWith(`//`)||/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(j))return null;let F=posix.dirname(t),L=posix.dirname(S);if(F===L)return null;let B=F===`.`?`/`:`/${F}/`,H=posix.resolve(B,j).slice(1),q=posix.relative(L===`.`?``:L,H);return q||=posix.basename(H),j.startsWith(`./`)&&!q.startsWith(`./`)&&!q.startsWith(`../`)&&(q=`./${q}`),`${q}${k}${E}`}function recomputeRelativeMarkdownHref(e,t,S){let w=e.indexOf(`#`),E=w>=0?e.slice(w):``,D=w>=0?e.slice(0,w):e,O=D.indexOf(`?`),k=O>=0?D.slice(O):``,j=O>=0?D.slice(0,O):D,F=posix.dirname(t),L=posix.relative(F===`.`?``:F,S);return L||=posix.basename(S),j.endsWith(`.mdx`)?L+=`.mdx`:j.endsWith(`.md`)&&(L+=`.md`),j.startsWith(`./`)&&!L.startsWith(`./`)&&!L.startsWith(`../`)&&(L=`./${L}`),`${L}${k}${E}`}function rewriteMarkdownLinksInLine(e,t,S,w){let E=``,D=0,O=0,k=leadingMarkdownPrefixLength$2(e);for(k>0&&(E+=e.slice(0,k),O=k);O<e.length;){if(e[O]===`\\`&&O+1<e.length){E+=e.slice(O,O+2),O+=2;continue}if(e[O]==="`"){let t=readInlineCode$2(e,O);if(t){E+=e.slice(O,t.nextIndex),O=t.nextIndex;continue}}if(e[O]===`[`&&e[O+1]===`[`){let t=readWikiLink$2(e,O);if(t){E+=e.slice(O,t.nextIndex),O=t.nextIndex;continue}}if(e[O]===`!`&&e[O+1]===`[`){let k=readImageRef(e,O);if(k){let j=t===S&&S!==w?recomputeRelativeImageHref(k.href,S,w):null;if(j!==null){let e=k.hrefRaw.startsWith(`<`)&&k.hrefRaw.endsWith(`>`)?`<${j}>`:j;E+=`![${k.alt}](${e}${k.titleSuffix})`,D++}else E+=e.slice(O,k.nextIndex);O=k.nextIndex;continue}}if(e[O]===`[`){let k=readMarkdownLink$2(e,O);if(k){if(resolveInternalHref(k.href,t)?.docName===S){let e=recomputeRelativeMarkdownHref(k.href,t,w),S=k.hrefRaw.startsWith(`<`)&&k.hrefRaw.endsWith(`>`)?`<${e}>`:e;E+=`[${k.text}](${S}${k.titleSuffix})`,D++}else E+=e.slice(O,k.nextIndex);O=k.nextIndex;continue}}E+=e[O],O++}return{markdown:E,rewrites:D}}const MIRROR_TAG_RE=/<Mirror\b([^>]*)\/>/g,MIRROR_SRC_ATTR_RE=/(\bsrc=)(["'])([^"']*)\2/g;function rewriteMirrorSrcInLine(e,t,S){let w=``,E=0,D=0;for(;D<e.length;){if(e[D]===`\\`&&D+1<e.length){w+=e.slice(D,D+2),D+=2;continue}if(e[D]==="`"){let t=readInlineCode$2(e,D);if(t){w+=e.slice(D,t.nextIndex),D=t.nextIndex;continue}}if(e[D]===`<`){let O=new RegExp(MIRROR_TAG_RE.source),k=e.slice(D),j=O.exec(k);if(j&&j.index===0){let[e,O]=j,k=new RegExp(MIRROR_SRC_ATTR_RE.source,MIRROR_SRC_ATTR_RE.flags),F=O.replace(k,(e,w,D,O)=>O===t?(E++,`${w}${D}${S}${D}`):e);w+=`<Mirror${F}/>`,D+=e.length;continue}}w+=e[D],D++}return{markdown:w,rewrites:E}}function rewriteMirrorSrcForDocumentRename(e,t,S){let w=null,E=0;return{markdown:splitLines(e).map(({line:e,ending:D})=>{if(w)return isFenceClose$2(e,w)&&(w=null),`${e}${D}`;let O=matchFence$2(e);if(O)return w=O,`${e}${D}`;let k=rewriteMirrorSrcInLine(e,t,S);return E+=k.rewrites,`${k.markdown}${D}`}).join(``),rewrites:E}}function rewriteWikiLinksForDocumentRename(e,t,S){let w=null,E=0;return{markdown:splitLines(e).map(({line:e,ending:D})=>{if(w)return isFenceClose$2(e,w)&&(w=null),`${e}${D}`;let O=matchFence$2(e);if(O)return w=O,`${e}${D}`;let k=rewriteWikiLinksInLine(e,t,S);return E+=k.rewrites,`${k.markdown}${D}`}).join(``),rewrites:E}}function rewriteMarkdownLinksForDocumentRename(e,t,S,w){let E=null,D=0;return{markdown:splitLines(e).map(({line:e,ending:O})=>{if(E)return isFenceClose$2(e,E)&&(E=null),`${e}${O}`;let k=matchFence$2(e);if(k)return E=k,`${e}${O}`;let j=rewriteMarkdownLinksInLine(e,t,S,w);return D+=j.rewrites,`${j.markdown}${O}`}).join(``),rewrites:D}}function rewriteOutboundMarkdownLinksInLine(e,t,S){let w=``,E=0,D=0,O=leadingMarkdownPrefixLength$2(e);for(O>0&&(w+=e.slice(0,O),D=O);D<e.length;){if(e[D]===`\\`&&D+1<e.length){w+=e.slice(D,D+2),D+=2;continue}if(e[D]==="`"){let t=readInlineCode$2(e,D);if(t){w+=e.slice(D,t.nextIndex),D=t.nextIndex;continue}}if(e[D]===`[`&&e[D+1]===`[`){let t=readWikiLink$2(e,D);if(t){w+=e.slice(D,t.nextIndex),D=t.nextIndex;continue}}if(e[D]===`!`&&e[D+1]===`[`){let t=readImageRef(e,D);if(t){w+=e.slice(D,t.nextIndex),D=t.nextIndex;continue}}if(e[D]===`[`){let O=readMarkdownLink$2(e,D);if(O){let k=resolveInternalHref(O.href,t);if(k!==null){let t=recomputeRelativeMarkdownHref(O.href,S,k.docName);if(t!==O.href){let e=O.hrefRaw.startsWith(`<`)&&O.hrefRaw.endsWith(`>`)?`<${t}>`:t;w+=`[${O.text}](${e}${O.titleSuffix})`,E++}else w+=e.slice(D,O.nextIndex)}else w+=e.slice(D,O.nextIndex);D=O.nextIndex;continue}}w+=e[D],D++}return{markdown:w,rewrites:E}}function rewriteOutboundMarkdownLinksForSourceMove(e,t,S){if(posix.dirname(t)===posix.dirname(S))return{markdown:e,rewrites:0};let w=null,E=0;return{markdown:splitLines(e).map(({line:e,ending:D})=>{if(w)return isFenceClose$2(e,w)&&(w=null),`${e}${D}`;let O=matchFence$2(e);if(O)return w=O,`${e}${D}`;let k=rewriteOutboundMarkdownLinksInLine(e,t,S);return E+=k.rewrites,`${k.markdown}${D}`}).join(``),rewrites:E}}var ManagedRenameCollisionError=class extends Error{colliding;constructor(e){super(`Managed rename collision: ${e.map(e=>`'${e.existing}' and '${e.incoming}' both target '${e.to}'`).join(`; `)}`),this.name=`ManagedRenameCollisionError`,this.colliding=e}},ManagedRenameSourceNotFoundError=class extends Error{kind;constructor(e){super(`${e} does not exist`),this.name=`ManagedRenameSourceNotFoundError`,this.kind=e}},ManagedRenameDestinationExistsError=class extends Error{constructor(){super(`Destination already exists`),this.name=`ManagedRenameDestinationExistsError`}},ManagedRenameSourceTypeMismatchError=class extends Error{kind;constructor(e){super(`Source path is not a ${e}`),this.name=`ManagedRenameSourceTypeMismatchError`,this.kind=e}},SymlinkEscapeError=class extends Error{constructor(e){super(`symlink-escape: ${e}`),this.name=`SymlinkEscapeError`}},BacklinkIndexRequiredError=class extends Error{constructor(){super(`Managed rename requires backlink index support`),this.name=`BacklinkIndexRequiredError`}},ManagedRenameSnapshotMissingError=class extends Error{docName;constructor(e){super(`Cannot snapshot missing document: ${e}`),this.name=`ManagedRenameSnapshotMissingError`,this.docName=e}},ManagedRenameMissingDocumentError=class extends Error{docName;constructor(e){super(`Cannot rename missing document: ${e}`),this.name=`ManagedRenameMissingDocumentError`,this.docName=e}};function buildRenameMap(e){let t=new Map,S=[];for(let{from:w,to:E}of e){for(let[e,D]of t)e!==w&&D===E&&S.push({existing:e,incoming:w,to:E});t.set(w,E)}if(S.length>0)throw new ManagedRenameCollisionError(S);return t}function rewriteSupportedLinksForRename(e,t,S,w){let{frontmatter:E,body:D}=stripFrontmatter(e),O=rewriteWikiLinksForDocumentRename(D,S,w),k=rewriteMarkdownLinksForDocumentRename(O.markdown,t,S,w),j=rewriteMirrorSrcForDocumentRename(k.markdown,S,w);return{markdown:prependFrontmatter(E,j.markdown),rewrites:O.rewrites+k.rewrites+j.rewrites}}function applyRenameMap(e,t,S){let w=e,E=0,D,O=[];for(let[e,w]of S)e!==w&&(e===t?D=w:O.push([e,w]));if(D!==void 0){let e=rewriteSupportedLinksForRename(w,t,t,D);w=e.markdown,E+=e.rewrites;let{frontmatter:S,body:O}=stripFrontmatter(w),k=rewriteOutboundMarkdownLinksForSourceMove(O,t,D);w=prependFrontmatter(S,k.markdown),E+=k.rewrites}let k=D??t,j=new Map;for(let[e,t]of O){let S=`__OK_RENAME_${randomUUID().replaceAll(`-`,``)}__`,D=rewriteSupportedLinksForRename(w,k,e,S);D.rewrites>0&&(w=D.markdown,E+=D.rewrites,j.set(S,t))}for(let[e,t]of j)w=rewriteSupportedLinksForRename(w,k,e,t).markdown;return{markdown:w,rewrites:E}}const WIKI_LINK_RE$1=/\[\[([^\n#[\]|]+)(?:#([^\n[\]|]+))?(?:\|([^\n[\]]+))?\]\]/y,MD_LINK_RE$1=/\[([^\]\n]*)\]\((<[^>\n]+>|[^)\s\n]+)(?:\s+(?:"[^"\n]*"|'[^'\n]*'|\([^)\n]*\)))?\)/y;function createEmptyState$1(){return{backward:new Map,forward:new Map,externalForward:new Map,externalBackward:new Map}}function mergeLinkMeta(e,t){return e?{anchor:e.anchor??t.anchor,snippet:e.snippet??t.snippet}:t}function getRepresentativeAnchor(e){if(!e)return null;for(let[,t]of[...e.entries()].sort(([e],[t])=>e.localeCompare(t)))if(t.anchor)return t.anchor;return null}function externalNodeId(e){return`external:${e}`}function externalUrlFromNodeId(e){return e.startsWith(`external:`)?e.slice(9):null}function normalizeSnippet$1(e){return e.replace(/\s+/g,` `).trim()}function snippetAround$1(e,t,S){if(!normalizeSnippet$1(e))return null;let w=Math.max(e.lastIndexOf(`.`,t-1),e.lastIndexOf(`?`,t-1),e.lastIndexOf(`!`,t-1),e.lastIndexOf(`
1253
1253
  `,t-1)),E=[e.indexOf(`.`,S),e.indexOf(`?`,S),e.indexOf(`!`,S),e.indexOf(`
1254
1254
  `,S)].filter(e=>e>=0),D=w>=0?w+1:Math.max(0,t-60),O=E.length>0?Math.min(...E)+1:Math.min(e.length,S+60),k=D>0?`…`:``,j=O<e.length?`…`:``,F=normalizeSnippet$1(e.slice(D,O));return F?`${k}${F}${j}`:null}function matchFence$1(e){let t=/^\s{0,3}([`~]{3,})/.exec(e);if(!t)return null;let S=t[1],w=S[0];return w!=="`"&&w!==`~`?null:{char:w,length:S.length}}function isFenceClose$1(e,t){return RegExp(`^\\s{0,3}\\${t.char}{${t.length},}\\s*$`).test(e)}function leadingMarkdownPrefixLength$1(e){let t=/^\s{0,3}(?:#{1,6}\s+|>\s+|(?:[-+*]|\d+[.)])\s+)/.exec(e);return t?t[0].length:0}function readInlineCode$1(e,t){let S=0;for(;e[t+S]==="`";)S++;if(S===0)return null;let w=t+S,E=w;for(;E<e.length;){if(e[E]!=="`"){E++;continue}let t=0;for(;e[E+t]==="`";)t++;if(t===S)return{text:e.slice(w,E),nextIndex:E+S};E+=t}return{text:e.slice(t,w),nextIndex:w}}function readWikiLink$1(e,t){WIKI_LINK_RE$1.lastIndex=t;let S=WIKI_LINK_RE$1.exec(e);if(!S)return null;let w=S[1]?.trim(),E=S[2]?.trim()||null,D=S[3]?.trim()||null;return w?{target:w,alias:D,anchor:E,nextIndex:t+S[0].length}:null}function extractWikiLinksFromLine(e){let t=``,S=[],w=leadingMarkdownPrefixLength$1(e);for(;w<e.length;){if(e[w]===`\\`&&w+1<e.length){t+=e[w+1],w+=2;continue}if(e[w]==="`"){let S=readInlineCode$1(e,w);if(S){t+=S.text,w=S.nextIndex;continue}}if(e[w]===`[`&&e[w+1]===`[`){let E=readWikiLink$1(e,w);if(E){let e=getWikiLinkText(E),D=t.length;t+=e;let O=classifyWikiLinkTarget(E.target,E.anchor);O?.kind===`doc`&&S.push({target:O.docName,anchor:O.anchor,start:D,end:D+e.length}),w=E.nextIndex;continue}}t+=e[w],w++}return{text:t,occurrences:S}}function extractExternalWikiLinksFromLine(e){let t=``,S=[],w=leadingMarkdownPrefixLength$1(e);for(;w<e.length;){if(e[w]===`\\`&&w+1<e.length){t+=e[w+1],w+=2;continue}if(e[w]==="`"){let S=readInlineCode$1(e,w);if(S){t+=S.text,w=S.nextIndex;continue}}if(e[w]===`[`&&e[w+1]===`[`){let E=readWikiLink$1(e,w);if(E){let e=getWikiLinkText(E),D=t.length;t+=e;let O=classifyWikiLinkTarget(E.target,E.anchor);O?.kind===`external`&&S.push({url:O.url,label:e,start:D,end:D+e.length}),w=E.nextIndex;continue}}t+=e[w],w++}return{text:t,occurrences:S}}function normalizeMarkdownHref$1(e){return e.startsWith(`<`)&&e.endsWith(`>`)?e.slice(1,-1):e}function readMarkdownLink$1(e,t){MD_LINK_RE$1.lastIndex=t;let S=MD_LINK_RE$1.exec(e);return S?{text:S[1]??``,href:normalizeMarkdownHref$1(S[2]??``),nextIndex:t+S[0].length}:null}function extractMarkdownLinksFromLine(e,t){let S=``,w=[],E=leadingMarkdownPrefixLength$1(e);for(;E<e.length;){if(e[E]===`\\`&&E+1<e.length){S+=e[E+1],E+=2;continue}if(e[E]==="`"){let t=readInlineCode$1(e,E);if(t){S+=t.text,E=t.nextIndex;continue}}if(e[E]===`[`&&e[E+1]===`[`){let t=readWikiLink$1(e,E);if(t){S+=getWikiLinkText(t),E=t.nextIndex;continue}}if(e[E]===`[`&&e[E-1]!==`!`){let D=readMarkdownLink$1(e,E);if(D){let e=classifyMarkdownHref(D.href,t);if(e?.kind===`doc`){let t=S.length;S+=D.text,w.push({target:e.docName,anchor:e.anchor,start:t,end:t+D.text.length})}else S+=D.text;E=D.nextIndex;continue}}S+=e[E],E++}return{text:S,occurrences:w}}function extractExternalMarkdownLinksFromLine(e,t){let S=``,w=[],E=leadingMarkdownPrefixLength$1(e);for(;E<e.length;){if(e[E]===`\\`&&E+1<e.length){S+=e[E+1],E+=2;continue}if(e[E]==="`"){let t=readInlineCode$1(e,E);if(t){S+=t.text,E=t.nextIndex;continue}}if(e[E]===`[`&&e[E+1]===`[`){let t=readWikiLink$1(e,E);if(t){S+=getWikiLinkText(t),E=t.nextIndex;continue}}if(e[E]===`[`&&e[E-1]!==`!`){let D=readMarkdownLink$1(e,E);if(D){let e=classifyMarkdownHref(D.href,t);if(S+=D.text,e?.kind===`external`){let t=S.length-D.text.length;w.push({url:e.url,label:D.text||null,start:t,end:t+D.text.length})}E=D.nextIndex;continue}}S+=e[E],E++}return{text:S,occurrences:w}}function extractMarkdownLinksFromMarkdown(e,t){let S=e.replaceAll(`\r
1255
1255
  `,`
@@ -1270,9 +1270,11 @@ Karpathy's insight: "The tedious part of maintaining a knowledge base is not the
1270
1270
  `),w=[],E=null;for(let e of S)if(E)isFenceClose$1(e,E)&&(E=null);else{let S=matchFence$1(e);if(S)E=S;else{let S=extractExternalMarkdownLinksFromLine(e,t);w.push(...S.occurrences.map(({url:e,label:t,start:w,end:E})=>({url:e,label:t,snippet:snippetAround$1(S.text,w,E)})))}}return w}function serializeState(e){return{backward:Object.fromEntries([...e.backward.entries()].map(([e,t])=>[e,[...t.entries()].map(([e,t])=>({source:e,anchor:t.anchor,snippet:t.snippet}))])),forward:Object.fromEntries([...e.forward.entries()].map(([e,t])=>[e,[...t].sort()])),externalForward:Object.fromEntries([...e.externalForward.entries()].map(([e,t])=>[e,[...t.entries()].map(([e,t])=>({url:e,label:t.label,snippet:t.snippet})).sort((e,t)=>e.url.localeCompare(t.url))]))}}function buildExternalBackward(e){let t=new Map;for(let[S,w]of e)for(let[e,E]of w){let w=t.get(e);w||(w=new Map,t.set(e,w)),w.set(S,E)}return t}function deserializeState(e){let t=new Map(Object.entries(e.externalForward??{}).map(([e,t])=>[e,new Map(t.map(e=>[e.url,{label:e.label??null,snippet:e.snippet??null}]))]));return{backward:new Map(Object.entries(e.backward??{}).map(([e,t])=>[e,new Map(t.map(e=>[e.source,{anchor:e.anchor??null,snippet:e.snippet??null}]))])),forward:new Map(Object.entries(e.forward??{}).map(([e,t])=>[e,new Set(t)])),externalForward:t,externalBackward:buildExternalBackward(t)}}var BacklinkIndex=class{projectDir;contentDir;contentFilter;states=new Map;mtimesByBranch=new Map;activeBranch=`main`;constructor(e){this.projectDir=e.projectDir,this.contentDir=e.contentDir,this.contentFilter=e.contentFilter,this.states.set(this.activeBranch,createEmptyState$1())}getState(e=this.activeBranch){let t=this.states.get(e);return t||(t=createEmptyState$1(),this.states.set(e,t)),t}getActiveBranch(){return this.activeBranch}switchBranch(e){this.activeBranch=e,this.getState(e)}cachePath(e=this.activeBranch){return resolve(getLocalDir(this.projectDir),`cache`,e,`backlinks.json`)}updateDocument(e,t,S=[],w=this.activeBranch){if(isSystemDoc(e)||isConfigDoc(e))return;let E=this.getState(w),D=E.forward.get(e)??new Set,O=E.externalForward.get(e)??new Map;for(let t of D){let S=E.backward.get(t);S&&(S.delete(e),S.size===0&&E.backward.delete(t))}for(let t of O.keys()){let S=E.externalBackward.get(t);S&&(S.delete(e),S.size===0&&E.externalBackward.delete(t))}let k=new Set,j=new Map;E.forward.set(e,k),E.externalForward.set(e,j);for(let S of t){if(!S.target)continue;k.add(S.target);let t=E.backward.get(S.target);t||(t=new Map,E.backward.set(S.target,t)),t.set(e,mergeLinkMeta(t.get(e),{anchor:S.anchor,snippet:S.snippet}))}for(let t of S){if(!t.url)continue;j.set(t.url,{label:t.label,snippet:t.snippet});let S=E.externalBackward.get(t.url);S||(S=new Map,E.externalBackward.set(t.url,S)),(!S.has(e)||!S.get(e)?.snippet&&t.snippet)&&S.set(e,{label:t.label,snippet:t.snippet})}}updateDocumentFromMarkdown(e,t,S=this.activeBranch){try{let{body:w}=stripFrontmatter(t),E=extractWikiLinksFromMarkdown(w),D=extractMarkdownLinksFromMarkdown(w,e),O=extractExternalWikiLinksFromMarkdown(w),k=extractExternalMarkdownLinksFromMarkdown(w,e),j=new Set(E.map(e=>e.target)),F=[...E,...D.filter(e=>!j.has(e.target))],L=new Set(O.map(e=>e.url)),B=[...O,...k.filter(e=>!L.has(e.url))];this.updateDocument(e,F,B,S)}catch(t){console.warn(`[backlinks] Failed to scan ${e} for link extraction:`,t),this.deleteDocument(e,S)}}deleteDocument(e,t=this.activeBranch){if(isSystemDoc(e)||isConfigDoc(e))return;let S=this.getState(t),w=S.forward.get(e)??new Set,E=S.externalForward.get(e)??new Map;for(let t of w){let w=S.backward.get(t);w&&(w.delete(e),w.size===0&&S.backward.delete(t))}for(let t of E.keys()){let w=S.externalBackward.get(t);w&&(w.delete(e),w.size===0&&S.externalBackward.delete(t))}S.forward.delete(e),S.externalForward.delete(e)}renameDocument(e,t,S,w=this.activeBranch){this.deleteDocument(e,w),this.updateDocumentFromMarkdown(t,S,w)}getBacklinks(e,t=this.activeBranch){let S=this.getState(t).backward.get(e);return S?[...S.entries()].map(([e,t])=>({source:e,anchor:t.anchor,snippet:t.snippet})).sort((e,t)=>e.source.localeCompare(t.source)):[]}getBacklinkCount(e,t=this.activeBranch){return this.getState(t).backward.get(e)?.size??0}getForwardLinks(e,t=this.activeBranch){return[...this.getState(t).forward.get(e)??new Set].sort((e,t)=>e.localeCompare(t))}getForwardLinkEntries(e,t=this.activeBranch){let S=this.getState(t),w=this.getForwardLinks(e,t).map(t=>({kind:`doc`,target:t,anchor:S.backward.get(t)?.get(e)?.anchor??null,snippet:S.backward.get(t)?.get(e)?.snippet??null})),E=[...(S.externalForward.get(e)??new Map).entries()].map(([e,t])=>({kind:`external`,url:e,label:t.label,snippet:t.snippet})).sort((e,t)=>e.url.localeCompare(t.url));return[...w,...E]}getOrphans(e,t=`both`,S=this.activeBranch){let w=this.getState(S);return[...e].filter(e=>{let S=(w.backward.get(e)?.size??0)>0,E=(w.forward.get(e)?.size??0)>0;return t===`incoming`?!S:(t===`outgoing`||!S)&&!E}).sort((e,t)=>e.localeCompare(t))}getHubs(e=20,t=this.activeBranch){return[...this.getState(t).backward.entries()].map(([e,t])=>({docName:e,count:t.size})).sort((e,t)=>t.count===e.count?e.docName.localeCompare(t.docName):t.count-e.count).slice(0,e)}getDeadLinks(e,t,S=this.activeBranch){let w=this.getState(S),E=new Set(e),D=t?.length?new Set(t):null;return[...w.backward.entries()].filter(([e,t])=>{if(E.has(e))return!1;if(!D)return t.size>0;for(let e of t.keys())if(D.has(e))return!0;return!1}).map(([e,t])=>({target:e,sources:[...t.entries()].filter(([e])=>!D||D.has(e)).map(([e,t])=>({source:e,anchor:t.anchor,snippet:t.snippet})).sort((e,t)=>e.source.localeCompare(t.source))})).filter(e=>e.sources.length>0).sort((e,t)=>t.sources.length===e.sources.length?e.target.localeCompare(t.target):t.sources.length-e.sources.length)}getLinkGraph(e=this.activeBranch){let t=this.getState(e),S=new Map,w=[];for(let[e,E]of t.forward){S.set(e,{kind:`doc`,id:e,docName:e,anchor:getRepresentativeAnchor(t.backward.get(e))});for(let D of E)S.set(D,{kind:`doc`,id:D,docName:D,anchor:getRepresentativeAnchor(t.backward.get(D))}),w.push({source:e,target:D})}for(let[e,E]of t.externalForward){S.set(e,{kind:`doc`,id:e,docName:e,anchor:getRepresentativeAnchor(t.backward.get(e))});for(let[t,D]of E){let E=externalNodeId(t);S.set(E,{kind:`external`,id:E,url:t,label:D.label}),w.push({source:e,target:E})}}return{nodes:[...S.values()].sort((e,t)=>e.id.localeCompare(t.id)),links:w}}getLinkGraphNeighborhood(e,t,S=this.activeBranch){let w=this.getState(S),E=new Map;for(let e of w.externalForward.values())for(let[t,S]of e)E.has(t)||E.set(t,S.label);let D=new Set([e]),O=[{nodeId:e,degree:0}],k=0;for(;k<O.length;){let e=O[k++];if(e.degree>=t)continue;let S=externalUrlFromNodeId(e.nodeId),E=new Set;if(S)for(let e of w.externalBackward.get(S)?.keys()??[])E.add(e);else{for(let t of w.forward.get(e.nodeId)??new Set)E.add(t);for(let t of w.externalForward.get(e.nodeId)?.keys()??[])E.add(externalNodeId(t));for(let t of w.backward.get(e.nodeId)?.keys()??[])E.add(t)}for(let t of E)D.has(t)||(D.add(t),O.push({nodeId:t,degree:e.degree+1}))}let j=[];for(let[e,t]of w.forward)if(D.has(e))for(let S of t)D.has(S)&&j.push({source:e,target:S});for(let[e,t]of w.externalForward)if(D.has(e))for(let S of t.keys()){let t=externalNodeId(S);D.has(t)&&j.push({source:e,target:t})}return{nodes:[...D].sort().map(e=>{let t=externalUrlFromNodeId(e);return t?{kind:`external`,id:e,url:t,label:E.get(t)??null}:{kind:`doc`,id:e,docName:e,anchor:getRepresentativeAnchor(w.backward.get(e))}}),links:j}}async saveToDisk(e=this.activeBranch){let t=this.cachePath(e);mkdirSync(dirname(t),{recursive:!0});let S=this.getState(e),w=this.mtimesByBranch.get(e),E={...serializeState(S),...w?{mtimes:Object.fromEntries(w)}:{}};await writeFile(t,JSON.stringify(E,null,2),`utf-8`)}async loadFromDisk(e=this.activeBranch){let t=this.cachePath(e);if(!existsSync(t))return!1;try{let S=await readFile$1(t,`utf-8`),w=JSON.parse(S);return this.states.set(e,deserializeState(w)),w.mtimes?this.mtimesByBranch.set(e,new Map(Object.entries(w.mtimes))):this.mtimesByBranch.delete(e),!0}catch(t){return console.warn(`[backlinks] Failed to load cache for ${e}:`,t),!1}}clear(e=this.activeBranch){this.states.set(e,createEmptyState$1()),this.mtimesByBranch.delete(e)}async rebuildFromDisk(e=this.activeBranch){let t=createEmptyState$1(),S=new Map,w=[];this.walkForPaths(this.contentDir,w);let E=new Set,D=w.filter(({docName:e})=>E.has(e)?!1:(E.add(e),!0)),O=50;for(let e=0;e<D.length;e+=50){let w=D.slice(e,e+50),E=await Promise.allSettled(w.map(async({docName:e,filePath:t})=>{let[S,w]=await Promise.all([stat$1(t),readFile$1(t,`utf-8`)]);return{docName:e,mtimeMs:S.mtimeMs,markdown:w}}));for(let e of E){if(e.status===`rejected`){console.warn(`[backlinks] Failed to rebuild entry:`,e.reason);continue}let{docName:w,mtimeMs:E,markdown:D}=e.value;S.set(w,E);let{body:O}=stripFrontmatter(D),k=extractWikiLinksFromMarkdown(O),j=extractMarkdownLinksFromMarkdown(O,w),F=extractExternalWikiLinksFromMarkdown(O),L=extractExternalMarkdownLinksFromMarkdown(O,w),B=new Set(k.map(e=>e.target)),H=[...k,...j.filter(e=>!B.has(e.target))],q=new Set(F.map(e=>e.url)),J=[...F,...L.filter(e=>!q.has(e.url))],Y=new Set,ee=new Map;t.forward.set(w,Y),t.externalForward.set(w,ee);for(let e of H){if(!e.target)continue;Y.add(e.target);let S=t.backward.get(e.target);S||(S=new Map,t.backward.set(e.target,S)),S.set(w,mergeLinkMeta(S.get(w),{anchor:e.anchor,snippet:e.snippet}))}for(let e of J){if(!e.url)continue;ee.set(e.url,{label:e.label,snippet:e.snippet});let S=t.externalBackward.get(e.url);S||(S=new Map,t.externalBackward.set(e.url,S)),S.set(w,{label:e.label,snippet:e.snippet})}}}this.states.set(e,t),this.mtimesByBranch.set(e,S)}walkForPaths(e,t){let S;try{S=readdirSync(e,{withFileTypes:!0})}catch(t){console.warn(`[backlinks] 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.walkForPaths(S,t)}else if(w.isFile()&&isSupportedDocFile(w.name)){let e=relative(this.contentDir,S);if(this.contentFilter?.isExcluded(e))continue;t.push({docName:stripDocExtension(e),filePath:S})}}}async reconcileWithDisk(e=this.activeBranch){if(!existsSync(this.contentDir))return{added:0,updated:0,deleted:0};let t=this.mtimesByBranch.get(e)??new Map,S=[];this.walkForPaths(this.contentDir,S);let w=new Set,E=S.filter(({docName:e})=>w.has(e)?!1:(w.add(e),!0)),D=new Set(E.map(e=>e.docName)),O=new Map,k=0,j=0,F=[],L=await Promise.allSettled(E.map(async({docName:e,filePath:t})=>({docName:e,filePath:t,mtimeMs:(await stat$1(t)).mtimeMs})));for(let e of L){if(e.status===`rejected`)continue;let{docName:S,filePath:w,mtimeMs:E}=e.value,D=t.get(S);if(D!==void 0&&D===E){O.set(S,E);continue}F.push({docName:S,filePath:w,mtimeMs:E,isNew:D===void 0})}let B=50;for(let t=0;t<F.length;t+=50){let S=F.slice(t,t+50),w=await Promise.allSettled(S.map(async({docName:e,filePath:t,mtimeMs:S,isNew:w})=>({docName:e,mtimeMs:S,isNew:w,markdown:await readFile$1(t,`utf-8`)})));for(let t of w){if(t.status===`rejected`){console.warn(`[backlinks] Failed to reconcile file:`,t.reason);continue}let{docName:S,mtimeMs:w,isNew:E,markdown:D}=t.value;this.updateDocumentFromMarkdown(S,D,e),O.set(S,w),E?k++:j++}}let H=0,q=new Set([...t.keys(),...this.getState(e).forward.keys()]);for(let t of q)D.has(t)||(this.deleteDocument(t,e),H++);return this.mtimesByBranch.set(e,O),{added:k,updated:j,deleted:H}}};function extractActorIdentity(e,t){let S=normalizeSummary(e.summary);if(S.kind===`invalid`)return{kind:`invalid-summary`};let w=parseAgentBodyFields(e),E=t?.()??null;return w.rawAgentId!==void 0&&w.writerId!==void 0?{kind:`agent`,writerId:w.writerId,displayName:w.displayName,colorSeed:w.colorSeed??w.rawAgentId,clientName:w.clientName,clientVersion:w.clientVersion,label:w.label,actor:{principalId:E?.id,agentType:resolveAgentType(w.clientName),clientName:w.clientName,clientVersion:w.clientVersion,label:w.label},summary:S}:E?{kind:`principal`,writerId:E.id,displayName:E.display_name,colorSeed:E.id,actor:{principalId:E.id},summary:S}:{kind:`anonymous`,summary:S}}function parsePorcelainPaths(e){let t=[];for(let S of e.split(`
1271
1271
  `)){if(S.length<4)continue;let e=S.slice(3),w=e.indexOf(` -> `),E=w>=0?e.slice(w+4):e;E.length>0&&t.push(E)}return t}function parseDiffPaths(e){return e.split(`
1272
1272
  `).map(e=>e.trim()).filter(e=>e.length>0)}async function dirtyFilesOverlapWith(e,t){let{git:S}=createGitInstance(e),[w,E]=await Promise.all([S.raw([`status`,`--porcelain`]),S.raw([`diff`,`--name-only`,`HEAD..${t}`])]),D=new Set(parsePorcelainPaths(w));if(D.size===0)return{conflicts:!1,files:[]};let O=parseDiffPaths(E);if(O.length===0)return{conflicts:!1,files:[]};let k=new Set;for(let e of O)D.has(e)&&k.add(e);return k.size===0?{conflicts:!1,files:[]}:{conflicts:!0,files:Array.from(k).sort()}}function isValidBranchInfoDocPath(e){if(typeof e!=`string`||e.length===0||e.startsWith(`/`)||e.includes(`\\`)||/[\x00-\x1F\x7F]/.test(e))return!1;for(let t of e.split(`/`))if(t.length===0||t===`..`||t===`.git`)return!1;return!0}async function computeBranchInfo(e,t,S){let{git:w}=createGitInstance(e);await w.raw([`rev-parse`,`--git-dir`]);let E=(async()=>{try{let e=(await w.raw([`symbolic-ref`,`HEAD`])).trim(),t=/^refs\/heads\/(.+)$/.exec(e);return{detached:!1,currentBranch:t?t[1]:null,currentHeadSha:null}}catch{let e=(await w.raw([`rev-parse`,`--short=7`,`HEAD`])).trim();return e.length===0?{detached:!1,currentBranch:null,currentHeadSha:null}:{detached:!0,currentBranch:null,currentHeadSha:e}}})(),D=E.then(async e=>{let t=e.detached?`HEAD`:e.currentBranch;if(!t)return!1;try{return await w.raw([`cat-file`,`-e`,`${t}:${S}`]),!0}catch{return!1}}),O=w.raw([`rev-parse`,`--verify`,`refs/heads/${t}`]).then(()=>!0).catch(()=>!1),k=dirtyFilesOverlapWith(e,t).catch(e=>{if(isBranchResolutionError(e))return{conflicts:!1,files:[]};let S=e instanceof Error?e.message:String(e),w=S.length>500?`${S.slice(0,500)}…`:S;return console.warn(`[git-branch-info] action=dirty-overlap-failed branch=${t} error=${w}`),{conflicts:!1,files:[]}}),[j,F,L,B]=await Promise.all([E,D,O,k]);return j.detached?{detached:!0,currentBranch:null,currentHeadSha:j.currentHeadSha,shareFileExists:F,dirtyConflicts:B,branchIsLocal:L}:{detached:!1,currentBranch:j.currentBranch,currentHeadSha:null,shareFileExists:F,dirtyConflicts:B,branchIsLocal:L}}const BRANCH_INFO_HANDLER_TAG=`git-branch-info`;function isBranchResolutionError(e){let t=e instanceof Error?e.message:String(e);return/unknown revision|bad revision|ambiguous argument/i.test(t)}const CHECKOUT_HANDLER_TAG=`git-checkout`,isBranchNotFoundFetchError=isBranchNotFoundGitError;async function runCheckoutFlow(e,t){let{git:S}=createGitInstance(e),w=await S.raw([`rev-parse`,`--verify`,`refs/heads/${t}`]).then(()=>!0).catch(()=>!1);if(!w)try{await S.raw([`fetch`,`origin`,t])}catch(e){return{ok:!1,reason:isBranchNotFoundFetchError(e)?`branch-not-found`:`fetch-failed`}}let E=await dirtyFilesOverlapWith(e,w?t:`origin/${t}`);if(E.conflicts)return{ok:!1,reason:`dirty-conflict`,files:E.files};try{return await S.raw([`checkout`,t]),{ok:!0}}catch(e){let S=e instanceof Error?e.message:String(e),w=S.length>500?`${S.slice(0,500)}…`:S;return console.warn(`[git-checkout] action=checkout-failed branch=${t} error=${w}`),{ok:!1,reason:`checkout-failed`}}}const defaultGitConfigReader=(e,t,S)=>{let w=spawnSync(`git`,[`config`,S===`worktree`?`--worktree`:S===`local`?`--local`:`--global`,t],{cwd:e,encoding:`utf-8`,timeout:5e3});return w.status!==0||!w.stdout?null:w.stdout.trim()||null};function isLinkedWorktree(e){let t=spawnSync(`git`,[`rev-parse`,`--git-dir`],{cwd:e,encoding:`utf-8`,timeout:5e3}),S=spawnSync(`git`,[`rev-parse`,`--git-common-dir`],{cwd:e,encoding:`utf-8`,timeout:5e3});return t.status!==0||S.status!==0?!1:resolve(e,t.stdout.trim())!==resolve(e,S.stdout.trim())}function ensureWorktreeConfigExtension(e){let t=spawnSync(`git`,[`config`,`--local`,`--get`,`extensions.worktreeConfig`],{cwd:e,encoding:`utf-8`,timeout:5e3});if(t.status===0&&/^(true|yes|on|1)$/i.test(t.stdout.trim()))return;let S=spawnSync(`git`,[`config`,`--local`,`extensions.worktreeConfig`,`true`],{cwd:e,encoding:`utf-8`,timeout:5e3});if(S.status!==0){let e=S.stderr?.trim()??``,t=S.error?` [${S.error.message}]`:``;throw Error(`failed to enable extensions.worktreeConfig: ${e}${t}`)}}async function resolveGitIdentity(e,t,S,w=defaultGitConfigReader){let E=w(e,`user.name`,`worktree`),D=w(e,`user.email`,`worktree`);if(E&&D)return{name:E,email:D};let O=w(e,`user.name`,`local`),k=w(e,`user.email`,`local`);if(O&&k)return{name:O,email:k};let j=w(e,`user.name`,`global`),F=w(e,`user.email`,`global`);if(j&&F)return{name:j,email:F};if(t&&S){let e=await t.get(S);if(e){let t=e.name??e.login,S=e.email??`${e.login}@users.noreply.github.com`;if(t)return{name:t,email:S}}}return null}function writeGitIdentity(e,t,S){let w=`--local`;isLinkedWorktree(e)&&(ensureWorktreeConfigExtension(e),w=`--worktree`);let E=(t,S)=>{let E=spawnSync(`git`,[`config`,w,t,S],{cwd:e,encoding:`utf-8`,timeout:5e3});if(E.status!==0){let e=E.stderr?.trim()??``,S=E.error?` [${E.error.message}]`:``;throw Error(`git config ${w} ${t} failed: ${e}${S}`)}};E(`user.name`,t),E(`user.email`,S)}const ALLOWED_URL_PATTERNS=[/^https?:\/\//i,/^ssh:\/\//i,/^git:\/\//i,/^git@[^:]+:/],BLOCKED_URL_PATTERNS=[/^file:\/\//i,/^javascript:/i,/^ext::/i,/^data:/i,/^vbscript:/i];function isAllowedGitUrl(e){return!e||typeof e!=`string`||BLOCKED_URL_PATTERNS.some(t=>t.test(e))?!1:ALLOWED_URL_PATTERNS.some(t=>t.test(e))}function expandTilde(e){return e===`~`?homedir():e.startsWith(`~/`)?join(homedir(),e.slice(2)):e}function ancestorChainHasSymlink(e,t){let S=dirname(e);for(;S!==t&&S!==dirname(S);){let e;try{e=lstatSync(S)}catch(e){let t=e.code;return console.warn(`[local-op-security] ancestorChainHasSymlink: lstat failed on ${S} (${t??`unknown`}); treating as symlink (fail-closed)`),!0}if(e.isSymbolicLink())return console.warn(`[local-op-security] ancestorChainHasSymlink: symlink detected at ${S}`),!0;S=dirname(S)}return!1}function isPathWithinHome(e,t){if(!e||typeof e!=`string`||e.includes(`\0`))return!1;let S;try{S=realpathSync(t)}catch(e){let S=e.code;return console.warn(`[local-op-security] realpath failed on home dir ${t} (${S??`unknown`}); rejecting all paths`),!1}let w=resolve(expandTilde(e)),E=[],D=w;for(;;){let e=null;try{e=lstatSync(D)}catch(e){let t=e.code;if(t!==`ENOENT`)return console.warn(`[local-op-security] lstat error at ${D} (${t??`unknown`}); rejecting`),!1}if(e!==null){let w;try{w=realpathSync(D)}catch(S){let E=S.code;if(e.isSymbolicLink())return console.warn(`[local-op-security] realpath failed on symlink leaf at ${D} (${E??`unknown`}); rejecting`),!1;if(E===`EPERM`||E===`EACCES`){if(ancestorChainHasSymlink(D,t))return console.warn(`[local-op-security] EPERM accept-branch refused at ${D}: symlinked ancestor in chain; rejecting`),!1;console.warn(`[local-op-security] realpath denied on non-symlink leaf at ${D} (${E??`unknown`}); trusting lexical path (TCC-class)`),w=D}else return console.warn(`[local-op-security] realpath failed on non-symlink leaf at ${D} (${E??`unknown`}); rejecting`),!1}let O=E.length===0?w:join(w,...E),k=relative(S,O);return k===``||!k.startsWith(`..`)&&!isAbsolute(k)}let w=dirname(D);if(w===D)return!1;E.unshift(basename(D)),D=w}}function isSafeLocalPath(e){return isPathWithinHome(e,homedir())}function isLoopbackRequest(e){let t=e.socket.remoteAddress;return t===`127.0.0.1`||t===`::1`||t===`::ffff:127.0.0.1`}function hasValidLocalOpOrigin(e){let t=e.headers.origin;if(!t)return!0;try{let{hostname:e}=new URL(t);return e===`127.0.0.1`||e===`localhost`||e===`[::1]`||e===`::1`}catch{return!1}}function checkLocalOpSecurity(e,t,S){return isLoopbackRequest(e)?hasValidLocalOpOrigin(e)?!0:(errorResponse(t,403,`urn:ok:error:invalid-origin`,`Origin header is not a permitted loopback origin.`,{handler:S.handler}),!1):(errorResponse(t,403,`urn:ok:error:loopback-required`,`Local-op endpoints require a loopback connection.`,{handler:S.handler}),!1)}function createConcurrencyGuard(){let e=new Set;return{tryAcquire(t){return e.has(t)?!1:(e.add(t),!0)},release(t){e.delete(t)}}}function runSubprocess(e){let[t,...S]=e.cliArgs;if(!t)return{done:Promise.resolve({code:-1,stderr:`no command provided`,timedOut:!1,cancelled:!1}),cancel:()=>{}};let w=[...S,...e.trailingArgs],E=!1,D=!1,O=``,k=[],j=spawn(t,w,{cwd:e.cwd,stdio:[`ignore`,`pipe`,`pipe`],env:{...process.env}}),F=setTimeout(()=>{E=!0,j.kill(`SIGTERM`)},e.timeoutMs),L=t=>{if(!t.trim())return;let S=null;try{let e=JSON.parse(t);S=e&&typeof e==`object`?e:null}catch{S=null}e.onLine({raw:t,parsed:S})};return j.stdout.on(`data`,e=>{O+=e.toString(`utf-8`);let t=O.split(`
1273
- `);O=t.pop()??``;for(let e of t)L(e)}),j.stderr.on(`data`,t=>{k.push(t),e.onStderr?.(t)}),{done:new Promise(e=>{j.on(`close`,t=>{clearTimeout(F),O.trim()&&L(O),O=``,e({code:t,stderr:Buffer.concat(k).toString(`utf-8`).trim(),timedOut:E,cancelled:D})}),j.on(`error`,t=>{clearTimeout(F),k.push(Buffer.from(t.message,`utf-8`)),e({code:-1,stderr:Buffer.concat(k).toString(`utf-8`).trim(),timedOut:E,cancelled:D})})}),cancel:()=>{if(!D&&(D=!0,!j.killed))try{j.kill(`SIGTERM`)}catch{}}}}const DEFAULT_TIMEOUT_MS$2=600*1e3;function asAuthEvent(e){let t=e.type;return t===`verification`?typeof e.user_code==`string`&&typeof e.verification_uri==`string`&&typeof e.expires_in==`number`?{type:`verification`,user_code:e.user_code,verification_uri:e.verification_uri,expires_in:e.expires_in}:null:t===`complete`?{type:`complete`,host:typeof e.host==`string`?e.host:``,login:typeof e.login==`string`?e.login:``,name:typeof e.name==`string`?e.name:void 0,email:typeof e.email==`string`?e.email:void 0,avatarUrl:typeof e.avatarUrl==`string`?e.avatarUrl:void 0}:t===`error`?{type:`error`,message:typeof e.message==`string`?e.message:`Unknown error`}:null}function runDeviceFlowSubprocess(e){let t=e.host??`github.com`,S=e.timeoutMs??DEFAULT_TIMEOUT_MS$2,w=!1,E=runSubprocess({cliArgs:e.cliArgs,trailingArgs:[`auth`,`login`,`--json`,`--host`,t],timeoutMs:S,onLine:({parsed:t})=>{if(!t)return;let S=asAuthEvent(t);S&&((S.type===`complete`||S.type===`error`)&&(w=!0),e.onEvent(S))}});return{done:E.done.then(S=>{w||(S.code===0?e.onEvent({type:`complete`,host:t,login:``}):e.onEvent({type:`error`,message:S.timedOut?`Sign-in timed out`:`auth login exited with code ${S.code??-1}`}))}),cancel:E.cancel}}const DEFAULT_TIMEOUT_MS$1=3e4;async function runAuthStatusSubprocess(e){let t=e.host??`github.com`,S=[],w=await runSubprocess({cliArgs:e.cliArgs,trailingArgs:[`auth`,`status`,`--json`,`--host`,t],timeoutMs:e.timeoutMs??DEFAULT_TIMEOUT_MS$1,onLine:({parsed:e})=>{e&&S.push(e)}}).done;for(let e=S.length-1;e>=0;e--){let w=S[e];if(w.type!==`status`)continue;let E=typeof w.host==`string`?w.host:t;if(w.authenticated===!0&&typeof w.login==`string`){let e=w.tier===`A`||w.tier===`B`||w.tier===`C`?w.tier:void 0;return{authenticated:!0,host:E,login:w.login,tier:e,name:typeof w.name==`string`?w.name:void 0,email:typeof w.email==`string`?w.email:void 0}}return{authenticated:!1,host:E,error:typeof w.error==`string`?w.error:void 0}}return{authenticated:!1,host:t,error:w.timedOut?`auth status timed out`:w.code===0?void 0:w.stderr||`auth status exited with code ${w.code??-1}`}}async function runAuthReposSubprocess(e){let t=e.host??`github.com`,S=[],w=await runSubprocess({cliArgs:e.cliArgs,trailingArgs:[`auth`,`repos`,`--json`,`--host`,t],timeoutMs:e.timeoutMs??DEFAULT_TIMEOUT_MS$1,onLine:({parsed:e})=>{e&&S.push(e)}}).done;if(w.timedOut)return{ok:!1,error:`auth repos timed out`};if(w.code!==0)return{ok:!1,error:w.stderr||`auth repos exited with code ${w.code??-1}`};for(let e=S.length-1;e>=0;e--){let w=S[e];if(w.type!==`repos`||!Array.isArray(w.repos))continue;let E=[];for(let e of w.repos){if(!e||typeof e!=`object`)continue;let t=e;typeof t.full_name!=`string`||typeof t.clone_url!=`string`||E.push({full_name:t.full_name,clone_url:t.clone_url,private:t.private===!0})}return{ok:!0,host:typeof w.host==`string`?w.host:t,repos:E}}return{ok:!1,error:`auth repos returned no data`}}const DEFAULT_TIMEOUT_MS=600*1e3;function validateCloneInputs(e,t){return isAllowedGitUrl(e)?isSafeLocalPath(t)?{ok:!0}:{ok:!1,reason:`invalid-dir`}:{ok:!1,reason:`invalid-url`}}function asRawCloneEvent(e){let t=e.type;return t===`progress`?typeof e.phase==`string`&&typeof e.pct==`number`?{type:`progress`,phase:e.phase,pct:e.pct}:null:t===`complete`?typeof e.dir==`string`?{type:`complete`,dir:e.dir}:null:t===`branch-fallback`?typeof e.branch==`string`&&e.branch.length>0?{type:`branch-fallback`,branch:e.branch}:null:t===`error`?{type:`error`,message:typeof e.message==`string`?e.message:`Unknown error`}:null}function runCloneSubprocess(e){let t=expandTilde(e.dir),S=e.timeoutMs??DEFAULT_TIMEOUT_MS,w=!1,E=typeof e.branch==`string`&&e.branch.length>0?[`-b`,e.branch]:[],D=runSubprocess({cliArgs:e.cliArgs,trailingArgs:[`clone`,`--json`,...E,e.url,t],timeoutMs:S,onLine:({parsed:t})=>{if(!t)return;let S=asRawCloneEvent(t);S&&((S.type===`complete`||S.type===`error`)&&(w=!0),e.onEvent(S))}});return{done:D.done.then(S=>{if(!w){if(S.timedOut){e.onEvent({type:`error`,message:`Clone timed out after 10 minutes`});return}if(S.code!==0){let t=S.stderr?` — ${S.stderr}`:``;e.onEvent({type:`error`,message:`Clone process exited with code ${S.code??-1}${t}`});return}e.onEvent({type:`complete`,dir:t})}}),cancel:D.cancel}}function isLoopbackAddress(e){return e?!!(e===`::1`||e.startsWith(`::ffff:127.`)||e.startsWith(`127.`)):!1}function isAllowedWorkspaceHostHeader(e){if(!e)return!1;if(e.startsWith(`[`)){let t=e.indexOf(`]`);if(t<0)return!1;let S=e.slice(1,t),w=e.slice(t+1);return w!==``&&!/^:\d+$/.test(w)?!1:S===`::1`}let t=e.lastIndexOf(`:`),S=t>=0?e.slice(0,t):e,w=t>=0?e.slice(t+1):null;return w!==null&&!/^\d+$/.test(w)?!1:!!(S===`localhost`||/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(S))}const MANAGED_RENAME_JOURNAL_FILENAME=`managed-rename.json`;function journalDir(e){return getLocalDir(e)}function managedRenameJournalPath(e){return resolve(journalDir(e),MANAGED_RENAME_JOURNAL_FILENAME)}function createManagedRenameRecoveryJournal(e){return{version:2,fromPath:e.fromPath,toPath:e.toPath,affectedDocs:e.affectedDocs,createdAt:e.createdAt??new Date().toISOString(),snapshots:e.snapshots}}function isManagedRenameSnapshot(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.docName==`string`&&typeof t.content==`string`}function isManagedRenameAffectedDoc(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.from==`string`&&typeof t.to==`string`}function parseV2(e){if(typeof e.fromPath!=`string`||e.fromPath.length===0)throw Error(`Managed rename journal v2 is missing fromPath`);if(typeof e.toPath!=`string`||e.toPath.length===0)throw Error(`Managed rename journal v2 is missing toPath`);if(typeof e.createdAt!=`string`||e.createdAt.length===0)throw Error(`Managed rename journal v2 is missing createdAt`);if(!Array.isArray(e.affectedDocs)||e.affectedDocs.length===0||!e.affectedDocs.every(isManagedRenameAffectedDoc))throw Error(`Managed rename journal v2 has invalid affectedDocs`);if(!Array.isArray(e.snapshots)||e.snapshots.length===0||!e.snapshots.every(isManagedRenameSnapshot))throw Error(`Managed rename journal v2 has invalid snapshots`);for(let t of e.affectedDocs)if(!e.snapshots.some(e=>e.docName===t.from))throw Error(`Managed rename journal v2 is missing snapshot for affected doc: ${t.from}`);return{version:2,fromPath:e.fromPath,toPath:e.toPath,affectedDocs:e.affectedDocs,createdAt:e.createdAt,snapshots:e.snapshots}}function parseV1(e){if(typeof e.sourceDocName!=`string`||e.sourceDocName.length===0)throw Error(`Managed rename journal v1 is missing sourceDocName`);if(typeof e.destinationDocName!=`string`||e.destinationDocName.length===0)throw Error(`Managed rename journal v1 is missing destinationDocName`);if(typeof e.createdAt!=`string`||e.createdAt.length===0)throw Error(`Managed rename journal v1 is missing createdAt`);if(!Array.isArray(e.snapshots)||e.snapshots.length===0||!e.snapshots.every(isManagedRenameSnapshot))throw Error(`Managed rename journal v1 has invalid snapshots`);if(!e.snapshots.some(t=>t.docName===e.sourceDocName))throw Error(`Managed rename journal v1 must include the source document snapshot`);return{version:1,sourceDocName:e.sourceDocName,destinationDocName:e.destinationDocName,createdAt:e.createdAt,snapshots:e.snapshots}}function parseManagedRenameRecoveryJournal(e){if(!e||typeof e!=`object`)throw Error(`Managed rename journal must be an object`);let t=e;if(t.version===2)return parseV2(t);if(t.version===1)return parseV1(t);throw Error(`Unsupported managed rename journal version: ${String(t.version)}`)}function readManagedRenameJournal(e){let t=managedRenameJournalPath(e);if(!existsSync(t))return null;try{let e=readFileSync(t,`utf-8`);return parseManagedRenameRecoveryJournal(JSON.parse(e))}catch(e){throw Error(`Managed rename journal at ${t} is corrupt: ${e instanceof Error?e.message:String(e)}`)}}function writeManagedRenameJournal(e,t){let S=managedRenameJournalPath(e);tracedMkdirSync(dirname(S),{recursive:!0});let w=`${S}.tmp`;tracedWriteFileSync(w,JSON.stringify(t,null,2),`utf-8`),tracedRenameSync(w,S)}function clearManagedRenameJournal(e){tracedRmSync(managedRenameJournalPath(e),{force:!0})}async function withManagedRenameRecovery(e,t,S){writeManagedRenameJournal(e,t);let w=await S();return clearManagedRenameJournal(e),w}function destinationsToCleanV1(e){return[e.destinationDocName]}function destinationsToCleanV2(e){return e.affectedDocs.map(e=>e.to)}function pruneEmptyAncestors(e,t){let S=resolve(t),w=`${S}${sep}`,E=dirname(e);for(;E.startsWith(w)&&E!==S;){let e;try{e=readdirSync(E)}catch(e){console.warn(`[managed-rename] pruneEmptyAncestors: cannot read ${E}:`,e);return}if(e.length>0)return;try{tracedRmdirSync(E)}catch(e){console.warn(`[managed-rename] pruneEmptyAncestors: cannot rmdir ${E}:`,e);return}E=dirname(E)}}function recoverPendingManagedRename(e,t=e){let S=readManagedRenameJournal(t);if(!S)return{recovered:!1,journal:null,restoredDocNames:[]};let w=new Set,E=[];for(let t of S.snapshots)try{let S=safeContentPath(t.docName,e);tracedMkdirSync(dirname(S),{recursive:!0}),tracedWriteFileSync(S,t.content,`utf-8`),w.add(t.docName)}catch(e){E.push({docName:t.docName,cause:e}),console.warn(`[managed-rename] Failed to restore ${t.docName}:`,e)}if(E.length>0){let e=E.map(e=>e.docName).join(`, `);console.warn(`[managed-rename] Recovery incomplete; keeping journal for retry (${e})`);let t=E.map(e=>e.cause instanceof Error?e.cause:Error(String(e.cause)));throw AggregateError(t,`Managed rename recovery incomplete; failed to restore: ${e}`)}let D=S.version===2?destinationsToCleanV2(S):destinationsToCleanV1(S),O=[];for(let t of D){if(w.has(t))continue;let S=safeContentPath(t,e);try{tracedRmSync(S,{force:!0}),pruneEmptyAncestors(S,e)}catch(e){existsSync(S)&&console.warn(`[managed-rename] Both source and destination files exist after partial recovery for ${t}`),console.warn(`[managed-rename] Recovery incomplete; failed to clean destination ${t}:`,e),O.push({destination:t,cause:e})}}if(O.length>0){let e=O.map(e=>e.destination).join(`, `),t=O.map(e=>e.cause instanceof Error?e.cause:Error(String(e.cause)));throw AggregateError(t,`Managed rename recovery incomplete; failed to clean destinations: ${e}`)}return clearManagedRenameJournal(t),{recovered:!0,journal:S,restoredDocNames:[...w].sort((e,t)=>e.localeCompare(t))}}var SeedPrerequisiteError=class extends Error{constructor(e){super(e),this.name=`SeedPrerequisiteError`}},SeedRootDirError=class extends Error{constructor(e){super(e),this.name=`SeedRootDirError`}};function assertEntryPathInProject(e,t){if(typeof t!=`string`||t===``)throw new SeedRootDirError(`entry path must be a non-empty string, got: ${typeof t}`);if(t.includes(`\0`))throw new SeedRootDirError(`entry path must not contain null bytes`);if(isAbsolute(t))throw new SeedRootDirError(`entry path must be relative, got: ${t}`);if(t.split(/[/\\]/).some(e=>e===`..`))throw new SeedRootDirError(`entry path must not contain '..' segments, got: ${t}`);let S=resolve(e),w=resolve(S,t);if(w!==S&&!w.startsWith(S+sep))throw new SeedRootDirError(`entry path must resolve inside the project directory, got: ${t}`);return assertNoSymlinkEscape$1(w,S),w}function assertNoSymlinkEscape$1(e,t){let S;try{S=realpathSync(t)}catch{return}let w=e;for(;;){if(existsSync(w)){let t;try{t=realpathSync(w)}catch(t){throw t.code===`ELOOP`?new SeedRootDirError(`entry path traverses a symlink cycle: ${e}`):t}if(t!==S&&!t.startsWith(S+sep))throw new SeedRootDirError(`entry path resolves outside the project directory via symlink: ${e}`);return}let t=dirname(w);if(t===w)throw new SeedRootDirError(`entry path has no existing ancestor inside the project directory: ${e}`);w=t}}const DEFAULT_PACK_ID=`knowledge-base`,KNOWLEDGE_BASE_FOLDERS=[{path:`external-sources`,title:`External Sources`,description:"Raw sources SAVED verbatim, not just cited. The actual fetched text of URLs, extracted text of PDFs, and copies of any referenced files live as .md files here, each with frontmatter carrying the original URL, access date, and any publisher / author metadata. Produced by `ingest`; applies whether the user shared the URL OR the agent fetched it itself to ground a knowledge-base claim. The KB is closed-loop: downstream docs cite local paths in this folder, never bare web URLs. Immutable after capture (update only to refresh a stale fetch). No analysis in these files; that belongs in `research/`. Downstream articles cite specific docs here by path so every claim is traceable to preserved evidence rather than a dead link.",tags:[`source`,`immutable`,`layer-ingest`],starterTemplate:`clip`},{path:`research`,title:`Research`,description:"Provisional analysis synthesizing external sources. Produced by the `research` tool. Every factual claim cites a specific doc in `external-sources/` (or an inline URL if ingest was skipped); no unsourced assertions. Each article has `status: provisional` and a `sources:` frontmatter list of cited paths — keep the `sources:` list aligned with the docs linked in the article's body. Promoted to `articles/` via `consolidate` once the team decides the findings are stable.",tags:[`research`,`provisional`,`layer-research`],starterTemplate:`research-log`},{path:`articles`,title:`Articles`,description:"Canonical knowledge committed after a team decision. Produced by `consolidate`. Carries `status: canonical` plus a `supersedes:` chain tying back to the `research/` docs it replaces, which in turn cite `external-sources/`. The full evidence chain is traceable without leaving the repo. Source-of-truth for the domain; update only when a new decision supersedes it.",tags:[`article`,`canonical`,`layer-consolidate`],starterTemplate:`article`}],KNOWLEDGE_BASE_TEMPLATES={clip:`---
1273
+ `);O=t.pop()??``;for(let e of t)L(e)}),j.stderr.on(`data`,t=>{k.push(t),e.onStderr?.(t)}),{done:new Promise(e=>{j.on(`close`,t=>{clearTimeout(F),O.trim()&&L(O),O=``,e({code:t,stderr:Buffer.concat(k).toString(`utf-8`).trim(),timedOut:E,cancelled:D})}),j.on(`error`,t=>{clearTimeout(F),k.push(Buffer.from(t.message,`utf-8`)),e({code:-1,stderr:Buffer.concat(k).toString(`utf-8`).trim(),timedOut:E,cancelled:D})})}),cancel:()=>{if(!D&&(D=!0,!j.killed))try{j.kill(`SIGTERM`)}catch{}}}}const DEFAULT_TIMEOUT_MS$2=600*1e3;function asAuthEvent(e){let t=e.type;return t===`verification`?typeof e.user_code==`string`&&typeof e.verification_uri==`string`&&typeof e.expires_in==`number`?{type:`verification`,user_code:e.user_code,verification_uri:e.verification_uri,expires_in:e.expires_in}:null:t===`complete`?{type:`complete`,host:typeof e.host==`string`?e.host:``,login:typeof e.login==`string`?e.login:``,name:typeof e.name==`string`?e.name:void 0,email:typeof e.email==`string`?e.email:void 0,avatarUrl:typeof e.avatarUrl==`string`?e.avatarUrl:void 0}:t===`error`?{type:`error`,message:typeof e.message==`string`?e.message:`Unknown error`}:null}function runDeviceFlowSubprocess(e){let t=e.host??`github.com`,S=e.timeoutMs??DEFAULT_TIMEOUT_MS$2,w=!1,E=runSubprocess({cliArgs:e.cliArgs,trailingArgs:[`auth`,`login`,`--json`,`--host`,t],timeoutMs:S,onLine:({parsed:t})=>{if(!t)return;let S=asAuthEvent(t);S&&((S.type===`complete`||S.type===`error`)&&(w=!0),e.onEvent(S))}});return{done:E.done.then(S=>{w||(S.code===0?e.onEvent({type:`complete`,host:t,login:``}):e.onEvent({type:`error`,message:S.timedOut?`Sign-in timed out`:`auth login exited with code ${S.code??-1}`}))}),cancel:E.cancel}}const DEFAULT_TIMEOUT_MS$1=3e4;async function runAuthStatusSubprocess(e){let t=e.host??`github.com`,S=[],w=await runSubprocess({cliArgs:e.cliArgs,trailingArgs:[`auth`,`status`,`--json`,`--host`,t],timeoutMs:e.timeoutMs??DEFAULT_TIMEOUT_MS$1,onLine:({parsed:e})=>{e&&S.push(e)}}).done;for(let e=S.length-1;e>=0;e--){let w=S[e];if(w.type!==`status`)continue;let E=typeof w.host==`string`?w.host:t;if(w.authenticated===!0&&typeof w.login==`string`){let e=w.tier===`A`||w.tier===`B`||w.tier===`C`?w.tier:void 0;return{authenticated:!0,host:E,login:w.login,tier:e,name:typeof w.name==`string`?w.name:void 0,email:typeof w.email==`string`?w.email:void 0}}return{authenticated:!1,host:E,error:typeof w.error==`string`?w.error:void 0}}return{authenticated:!1,host:t,error:w.timedOut?`auth status timed out`:w.code===0?void 0:w.stderr||`auth status exited with code ${w.code??-1}`}}async function runAuthReposSubprocess(e){let t=e.host??`github.com`,S=[],w=await runSubprocess({cliArgs:e.cliArgs,trailingArgs:[`auth`,`repos`,`--json`,`--host`,t],timeoutMs:e.timeoutMs??DEFAULT_TIMEOUT_MS$1,onLine:({parsed:e})=>{e&&S.push(e)}}).done;if(w.timedOut)return{ok:!1,error:`auth repos timed out`};if(w.code!==0)return{ok:!1,error:w.stderr||`auth repos exited with code ${w.code??-1}`};for(let e=S.length-1;e>=0;e--){let w=S[e];if(w.type!==`repos`||!Array.isArray(w.repos))continue;let E=[];for(let e of w.repos){if(!e||typeof e!=`object`)continue;let t=e;typeof t.full_name!=`string`||typeof t.clone_url!=`string`||E.push({full_name:t.full_name,clone_url:t.clone_url,private:t.private===!0})}return{ok:!0,host:typeof w.host==`string`?w.host:t,repos:E}}return{ok:!1,error:`auth repos returned no data`}}const GENERIC_TITLE=`Clone subprocess reported an error.`,MAX_DETAIL_LEN=500;function classifyCloneError(e){let t=redactShareSubprocessStderr(e).trim().slice(0,MAX_DETAIL_LEN);return t.length===0?{title:GENERIC_TITLE,detail:``}:/repository not found|returned error:\s*404/i.test(t)?{title:`Can't access this repository. It may be private, or you may not have access.`,detail:t}:/permission denied|access denied|returned error:\s*403/i.test(t)?{title:`You don't have access to this repository.`,detail:t}:/authentication failed/i.test(t)?{title:`GitHub authentication failed. Try signing in again.`,detail:t}:{title:GENERIC_TITLE,detail:t}}const DEFAULT_TIMEOUT_MS=600*1e3;function validateCloneInputs(e,t){return isAllowedGitUrl(e)?isSafeLocalPath(t)?{ok:!0}:{ok:!1,reason:`invalid-dir`}:{ok:!1,reason:`invalid-url`}}function asRawCloneEvent(e){let t=e.type;return t===`progress`?typeof e.phase==`string`&&typeof e.pct==`number`?{type:`progress`,phase:e.phase,pct:e.pct}:null:t===`complete`?typeof e.dir==`string`?{type:`complete`,dir:e.dir}:null:t===`branch-fallback`?typeof e.branch==`string`&&e.branch.length>0?{type:`branch-fallback`,branch:e.branch}:null:t===`error`?{type:`error`,message:typeof e.message==`string`?e.message:`Unknown error`}:null}function runCloneSubprocess(e){let t=expandTilde(e.dir),S=e.timeoutMs??DEFAULT_TIMEOUT_MS,w=!1,E=typeof e.branch==`string`&&e.branch.length>0?[`-b`,e.branch]:[],D=runSubprocess({cliArgs:e.cliArgs,trailingArgs:[`clone`,`--json`,...E,e.url,t],timeoutMs:S,onLine:({parsed:t})=>{if(!t)return;let S=asRawCloneEvent(t);S&&((S.type===`complete`||S.type===`error`)&&(w=!0),e.onEvent(S))}});return{done:D.done.then(S=>{if(!w){if(S.timedOut){e.onEvent({type:`error`,message:`Clone timed out after 10 minutes`});return}if(S.code!==0){let t=S.stderr?` — ${S.stderr}`:``;e.onEvent({type:`error`,message:`Clone process exited with code ${S.code??-1}${t}`});return}e.onEvent({type:`complete`,dir:t})}}),cancel:D.cancel}}function isLoopbackAddress(e){return e?!!(e===`::1`||e.startsWith(`::ffff:127.`)||e.startsWith(`127.`)):!1}function isAllowedWorkspaceHostHeader(e){if(!e)return!1;if(e.startsWith(`[`)){let t=e.indexOf(`]`);if(t<0)return!1;let S=e.slice(1,t),w=e.slice(t+1);return w!==``&&!/^:\d+$/.test(w)?!1:S===`::1`}let t=e.lastIndexOf(`:`),S=t>=0?e.slice(0,t):e,w=t>=0?e.slice(t+1):null;return w!==null&&!/^\d+$/.test(w)?!1:!!(S===`localhost`||/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(S))}const MANAGED_RENAME_JOURNAL_FILENAME=`managed-rename.json`;function journalDir(e){return getLocalDir(e)}function managedRenameJournalPath(e){return resolve(journalDir(e),MANAGED_RENAME_JOURNAL_FILENAME)}function createManagedRenameRecoveryJournal(e){return{version:2,fromPath:e.fromPath,toPath:e.toPath,affectedDocs:e.affectedDocs,createdAt:e.createdAt??new Date().toISOString(),snapshots:e.snapshots}}function isManagedRenameSnapshot(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.docName==`string`&&typeof t.content==`string`}function isManagedRenameAffectedDoc(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.from==`string`&&typeof t.to==`string`}function parseV2(e){if(typeof e.fromPath!=`string`||e.fromPath.length===0)throw Error(`Managed rename journal v2 is missing fromPath`);if(typeof e.toPath!=`string`||e.toPath.length===0)throw Error(`Managed rename journal v2 is missing toPath`);if(typeof e.createdAt!=`string`||e.createdAt.length===0)throw Error(`Managed rename journal v2 is missing createdAt`);if(!Array.isArray(e.affectedDocs)||e.affectedDocs.length===0||!e.affectedDocs.every(isManagedRenameAffectedDoc))throw Error(`Managed rename journal v2 has invalid affectedDocs`);if(!Array.isArray(e.snapshots)||e.snapshots.length===0||!e.snapshots.every(isManagedRenameSnapshot))throw Error(`Managed rename journal v2 has invalid snapshots`);for(let t of e.affectedDocs)if(!e.snapshots.some(e=>e.docName===t.from))throw Error(`Managed rename journal v2 is missing snapshot for affected doc: ${t.from}`);return{version:2,fromPath:e.fromPath,toPath:e.toPath,affectedDocs:e.affectedDocs,createdAt:e.createdAt,snapshots:e.snapshots}}function parseV1(e){if(typeof e.sourceDocName!=`string`||e.sourceDocName.length===0)throw Error(`Managed rename journal v1 is missing sourceDocName`);if(typeof e.destinationDocName!=`string`||e.destinationDocName.length===0)throw Error(`Managed rename journal v1 is missing destinationDocName`);if(typeof e.createdAt!=`string`||e.createdAt.length===0)throw Error(`Managed rename journal v1 is missing createdAt`);if(!Array.isArray(e.snapshots)||e.snapshots.length===0||!e.snapshots.every(isManagedRenameSnapshot))throw Error(`Managed rename journal v1 has invalid snapshots`);if(!e.snapshots.some(t=>t.docName===e.sourceDocName))throw Error(`Managed rename journal v1 must include the source document snapshot`);return{version:1,sourceDocName:e.sourceDocName,destinationDocName:e.destinationDocName,createdAt:e.createdAt,snapshots:e.snapshots}}function parseManagedRenameRecoveryJournal(e){if(!e||typeof e!=`object`)throw Error(`Managed rename journal must be an object`);let t=e;if(t.version===2)return parseV2(t);if(t.version===1)return parseV1(t);throw Error(`Unsupported managed rename journal version: ${String(t.version)}`)}function readManagedRenameJournal(e){let t=managedRenameJournalPath(e);if(!existsSync(t))return null;try{let e=readFileSync(t,`utf-8`);return parseManagedRenameRecoveryJournal(JSON.parse(e))}catch(e){throw Error(`Managed rename journal at ${t} is corrupt: ${e instanceof Error?e.message:String(e)}`)}}function writeManagedRenameJournal(e,t){let S=managedRenameJournalPath(e);tracedMkdirSync(dirname(S),{recursive:!0});let w=`${S}.tmp`;tracedWriteFileSync(w,JSON.stringify(t,null,2),`utf-8`),tracedRenameSync(w,S)}function clearManagedRenameJournal(e){tracedRmSync(managedRenameJournalPath(e),{force:!0})}async function withManagedRenameRecovery(e,t,S){writeManagedRenameJournal(e,t);let w=await S();return clearManagedRenameJournal(e),w}function destinationsToCleanV1(e){return[e.destinationDocName]}function destinationsToCleanV2(e){return e.affectedDocs.map(e=>e.to)}function pruneEmptyAncestors(e,t){let S=resolve(t),w=`${S}${sep}`,E=dirname(e);for(;E.startsWith(w)&&E!==S;){let e;try{e=readdirSync(E)}catch(e){console.warn(`[managed-rename] pruneEmptyAncestors: cannot read ${E}:`,e);return}if(e.length>0)return;try{tracedRmdirSync(E)}catch(e){console.warn(`[managed-rename] pruneEmptyAncestors: cannot rmdir ${E}:`,e);return}E=dirname(E)}}function recoverPendingManagedRename(e,t=e){let S=readManagedRenameJournal(t);if(!S)return{recovered:!1,journal:null,restoredDocNames:[]};let w=new Set,E=[];for(let t of S.snapshots)try{let S=safeContentPath(t.docName,e);tracedMkdirSync(dirname(S),{recursive:!0}),tracedWriteFileSync(S,t.content,`utf-8`),w.add(t.docName)}catch(e){E.push({docName:t.docName,cause:e}),console.warn(`[managed-rename] Failed to restore ${t.docName}:`,e)}if(E.length>0){let e=E.map(e=>e.docName).join(`, `);console.warn(`[managed-rename] Recovery incomplete; keeping journal for retry (${e})`);let t=E.map(e=>e.cause instanceof Error?e.cause:Error(String(e.cause)));throw AggregateError(t,`Managed rename recovery incomplete; failed to restore: ${e}`)}let D=S.version===2?destinationsToCleanV2(S):destinationsToCleanV1(S),O=[];for(let t of D){if(w.has(t))continue;let S=safeContentPath(t,e);try{tracedRmSync(S,{force:!0}),pruneEmptyAncestors(S,e)}catch(e){existsSync(S)&&console.warn(`[managed-rename] Both source and destination files exist after partial recovery for ${t}`),console.warn(`[managed-rename] Recovery incomplete; failed to clean destination ${t}:`,e),O.push({destination:t,cause:e})}}if(O.length>0){let e=O.map(e=>e.destination).join(`, `),t=O.map(e=>e.cause instanceof Error?e.cause:Error(String(e.cause)));throw AggregateError(t,`Managed rename recovery incomplete; failed to clean destinations: ${e}`)}return clearManagedRenameJournal(t),{recovered:!0,journal:S,restoredDocNames:[...w].sort((e,t)=>e.localeCompare(t))}}var SeedPrerequisiteError=class extends Error{constructor(e){super(e),this.name=`SeedPrerequisiteError`}},SeedRootDirError=class extends Error{constructor(e){super(e),this.name=`SeedRootDirError`}};function assertEntryPathInProject(e,t){if(typeof t!=`string`||t===``)throw new SeedRootDirError(`entry path must be a non-empty string, got: ${typeof t}`);if(t.includes(`\0`))throw new SeedRootDirError(`entry path must not contain null bytes`);if(isAbsolute(t))throw new SeedRootDirError(`entry path must be relative, got: ${t}`);if(t.split(/[/\\]/).some(e=>e===`..`))throw new SeedRootDirError(`entry path must not contain '..' segments, got: ${t}`);let S=resolve(e),w=resolve(S,t);if(w!==S&&!w.startsWith(S+sep))throw new SeedRootDirError(`entry path must resolve inside the project directory, got: ${t}`);return assertNoSymlinkEscape$1(w,S),w}function assertNoSymlinkEscape$1(e,t){let S;try{S=realpathSync(t)}catch{return}let w=e;for(;;){if(existsSync(w)){let t;try{t=realpathSync(w)}catch(t){throw t.code===`ELOOP`?new SeedRootDirError(`entry path traverses a symlink cycle: ${e}`):t}if(t!==S&&!t.startsWith(S+sep))throw new SeedRootDirError(`entry path resolves outside the project directory via symlink: ${e}`);return}let t=dirname(w);if(t===w)throw new SeedRootDirError(`entry path has no existing ancestor inside the project directory: ${e}`);w=t}}const DEFAULT_PACK_ID=`knowledge-base`,KNOWLEDGE_BASE_FOLDERS=[{path:`external-sources`,title:`External Sources`,description:"Raw sources SAVED verbatim, not just cited. The actual fetched text of URLs, extracted text of PDFs, and copies of any referenced files live as .md files here, each with frontmatter carrying the original URL, access date, and any publisher / author metadata. Produced by `ingest`; applies whether the user shared the URL OR the agent fetched it itself to ground a knowledge-base claim. The KB is closed-loop: downstream docs cite local paths in this folder, never bare web URLs. Immutable after capture (update only to refresh a stale fetch). No analysis in these files; that belongs in `research/`. Downstream articles cite specific docs here by path so every claim is traceable to preserved evidence rather than a dead link.",tags:[`source`,`immutable`,`layer-ingest`],starterTemplate:`clip`},{path:`research`,title:`Research`,description:"Provisional analysis synthesizing external sources. Produced by the `research` tool. Every factual claim cites a specific doc in `external-sources/` (or an inline URL if ingest was skipped); no unsourced assertions. Each article has `status: provisional` and a `sources:` frontmatter list of cited paths — keep the `sources:` list aligned with the docs linked in the article's body. Promoted to `articles/` via `consolidate` once the team decides the findings are stable.",tags:[`research`,`provisional`,`layer-research`],starterTemplate:`research-log`},{path:`articles`,title:`Articles`,description:"Canonical knowledge committed after a team decision. Produced by `consolidate`. Carries `status: canonical` plus a `supersedes:` chain tying back to the `research/` docs it replaces, which in turn cite `external-sources/`. The full evidence chain is traceable without leaving the repo. Source-of-truth for the domain; update only when a new decision supersedes it.",tags:[`article`,`canonical`,`layer-consolidate`],starterTemplate:`article`}],KNOWLEDGE_BASE_TEMPLATES={clip:`---
1274
1274
  title: External Source
1275
1275
  description: Capture a URL or article text verbatim as raw reference material. For binary files (PDFs, images, audio), use the \`ingest\` tool instead — this \`clip\` template is for text sources only.
1276
+ ---
1277
+ ---
1276
1278
  source_url:
1277
1279
  date_fetched: {{date}}
1278
1280
  preservation: text-extracted
@@ -1293,6 +1295,8 @@ tags: [source, immutable, layer-ingest, text]
1293
1295
  `,"research-log":`---
1294
1296
  title: Research Log
1295
1297
  description: Provisional analysis synthesizing external sources. Every factual claim cites a doc in external-sources/. Promoted to articles/ via consolidate once findings are stable.
1298
+ ---
1299
+ ---
1296
1300
  status: provisional
1297
1301
  sources: []
1298
1302
  created: {{date}}
@@ -1318,6 +1322,8 @@ tags: [research, provisional]
1318
1322
  `,article:`---
1319
1323
  title: Canonical Article
1320
1324
  description: Canonical knowledge committed after a team decision. Carries status:canonical plus a supersedes chain tying back to the research/ docs it replaces. Source-of-truth for the domain.
1325
+ ---
1326
+ ---
1321
1327
  status: canonical
1322
1328
  supersedes: []
1323
1329
  authored: {{date}}
@@ -1369,6 +1375,8 @@ What to log:
1369
1375
  `,SOFTWARE_LIFECYCLE_FOLDERS=[{path:`proposals`,title:`Proposals`,description:'In-flight design proposals (RFC-shape). One file per proposal (`0001-feature-name.md`). Status flows `draft → fcp → accepted/rejected`. Accepted proposals graduate to a record in `decisions/`. Shape mirrors Rust RFCs / Astro proposals: Motivation / Design / Drawbacks / Alternatives / Unresolved questions. Folder named `proposals/` (not `rfcs/`) because "RFC" is overloaded across IETF / npm / Rust dialects; `dotnet/designs`, `withastro/roadmap`, and `kubernetes/enhancements` all converged on `proposals/`. Agent: when a proposal sits at `status: draft` >14 days, surface for the author to advance, park, or close.',tags:[`proposal`,`design`,`in-flight`],starterTemplate:`proposal`},{path:`decisions`,title:`Decisions`,description:"Architecture Decision Records (MADR / Nygard shape). Frozen decisions. One file per decision (`NNNN-title.md`). Status: `proposed/accepted/deprecated/superseded`. When a new decision supersedes an older one, the new record's `Supersedes:` field links back. Folder named `decisions/` (not `adrs/`) since it reads as English; Google Cloud's ADR doc and MADR v3 both accept it interchangeably. Agent: on a new decision, scan existing records touching the same subsystem and surface candidates for `Supersedes:` before commit.",tags:[`decision`,`adr`,`frozen`],starterTemplate:`decision`},{path:`specs`,title:`Specs`,description:"Implementation specs derived from accepted proposals. Prefer the `github/spec-kit` shape: one folder per spec (`specs/NNN-name/`) with `spec.md` + `plan.md` + `tasks.md`. Date-stamped flat files (`YYYY-MM-DD-name.md`) also fine for smaller specs. The folder ships THREE templates so you can build the triple: `spec` (Goals / Non-goals / Design / Migration / Test plan), `spec-plan` (per-spec implementation plan), and `spec-tasks` (the per-spec task checklist). References the parent proposal. Agent: when a spec moves to `status: shipped`, suggest a postmortem template if the owner reports an incident touching the spec's subsystem.",tags:[`spec`,`implementation`],starterTemplate:`spec`,extraTemplates:[`spec-plan`,`spec-tasks`]},{path:`postmortems`,title:`Postmortems`,description:"Blameless incident write-ups. One file per incident (`YYYY-MM-DD-name.md`). Sections: Summary / Timeline / Root cause / What went well / Action items (Google SRE shape; `dastergon/postmortem-templates` is the canonical template source). Agent: extract repeated subsystems mentioned across postmortems and surface a `Related:` block pointing at prior postmortems with shared subsystems.",tags:[`postmortem`,`incident`,`blameless`],starterTemplate:`postmortem`},{path:`guides`,title:`Guides`,description:'How-to guides, onboarding docs, and service-bound runbooks. Diátaxis "how-to" bucket: concrete tasks the reader wants to accomplish. Ships THREE templates: `guide` (generic how-to), `onboarding-guide` (new-hire / new-contributor setup), and `runbook` (service-symptom shape, for runbooks that stay next to the service code). Carries `last_verified` so stale guides surface in periodic sweeps. Modern incident tools (incident.io / Rootly) own dedicated runbooks now; keep service-symptom runbooks here only when they ship next to the service code. Agent: when a postmortem is published, scan its Action items for guide-shaped follow-ups and stub a guide here pre-filled with the symptom and timeline excerpt.',tags:[`guide`,`how-to`,`onboarding`],starterTemplate:`guide`,extraTemplates:[`onboarding-guide`,`runbook`]}],SOFTWARE_LIFECYCLE_TEMPLATES={proposal:`---
1370
1376
  title: Proposal Title
1371
1377
  description: One-line summary of the proposal.
1378
+ ---
1379
+ ---
1372
1380
  status: draft
1373
1381
  authors: [{{user}}]
1374
1382
  created: {{date}}
@@ -1397,6 +1405,8 @@ tags: [proposal]
1397
1405
  `,decision:`---
1398
1406
  title: Decision Title
1399
1407
  description: One-line decision summary.
1408
+ ---
1409
+ ---
1400
1410
  status: proposed
1401
1411
  date: {{date}}
1402
1412
  deciders: [{{user}}]
@@ -1418,6 +1428,8 @@ tags: [decision]
1418
1428
  `,spec:`---
1419
1429
  title: Spec Title
1420
1430
  description: One-line description of what's being built.
1431
+ ---
1432
+ ---
1421
1433
  status: draft
1422
1434
  owner: {{user}}
1423
1435
  target_release:
@@ -1448,6 +1460,8 @@ tags: [spec]
1448
1460
  `,"spec-plan":`---
1449
1461
  title: 'Plan: <Spec Title>'
1450
1462
  description: Implementation plan derived from the parent spec. Pairs with spec.md and tasks.md (github/spec-kit triple shape).
1463
+ ---
1464
+ ---
1451
1465
  parent_spec:
1452
1466
  created: {{date}}
1453
1467
  author: {{user}}
@@ -1476,6 +1490,8 @@ tags: [spec, plan]
1476
1490
  `,"spec-tasks":`---
1477
1491
  title: 'Tasks: <Spec Title>'
1478
1492
  description: Task checklist for the parent spec. Pairs with spec.md and plan.md (github/spec-kit triple shape).
1493
+ ---
1494
+ ---
1479
1495
  parent_spec:
1480
1496
  created: {{date}}
1481
1497
  author: {{user}}
@@ -1500,6 +1516,8 @@ tags: [spec, tasks]
1500
1516
  `,guide:`---
1501
1517
  title: '<Topic>: <Action>'
1502
1518
  description: One-line summary of what the reader will accomplish.
1519
+ ---
1520
+ ---
1503
1521
  category: how-to
1504
1522
  last_verified: {{date}}
1505
1523
  tags: [guide]
@@ -1523,6 +1541,8 @@ tags: [guide]
1523
1541
  `,"onboarding-guide":`---
1524
1542
  title: 'Onboarding: <Audience>'
1525
1543
  description: First-N-days setup path for <audience> (e.g. new engineer, new contributor, new oncall).
1544
+ ---
1545
+ ---
1526
1546
  category: onboarding
1527
1547
  audience:
1528
1548
  last_verified: {{date}}
@@ -1555,6 +1575,8 @@ tags: [guide, onboarding]
1555
1575
  `,runbook:`---
1556
1576
  title: '<Service>: <Symptom>'
1557
1577
  description: Oncall procedure for diagnosing and remediating <symptom> in <service>.
1578
+ ---
1579
+ ---
1558
1580
  category: runbook
1559
1581
  service:
1560
1582
  severity:
@@ -1584,6 +1606,8 @@ tags: [guide, runbook, oncall]
1584
1606
  `,postmortem:`---
1585
1607
  title: 'Incident: <short name>'
1586
1608
  description: Blameless postmortem for <incident>.
1609
+ ---
1610
+ ---
1587
1611
  severity:
1588
1612
  duration:
1589
1613
  services: []
@@ -1615,6 +1639,8 @@ tags: [postmortem]
1615
1639
  `},PLAIN_NOTES_FOLDERS=[{path:`notes`,title:`Notes`,description:`Flat notes folder. One file per topic. No structure imposed. Link freely between notes; OK's link graph builds itself from those edges. The "I just want to write" home base. Promote a note into a more structured folder layout later if you outgrow this.`,tags:[`notes`,`flat`],starterTemplate:`note`},{path:`daily`,title:`Daily`,description:"Daily journal entries. One file per day (`YYYY-MM-DD.md`). Pre-templated with morning intentions and evening reflections. Link to anything worth its own page. Agent: on first instantiation each day, link to yesterday's entry (`YYYY-MM-DD-1.md`) and pre-fill the date so the linear journal is also a navigable graph.",tags:[`daily`,`journal`],starterTemplate:`daily`}],PLAIN_NOTES_TEMPLATES={note:`---
1616
1640
  title: Note title
1617
1641
  description: One-line summary.
1642
+ ---
1643
+ ---
1618
1644
  created: {{date}}
1619
1645
  author: {{user}}
1620
1646
  tags: []
@@ -1622,8 +1648,11 @@ tags: []
1622
1648
 
1623
1649
  (Write here. Link to other notes when relevant.)
1624
1650
  `,daily:`---
1625
- title: {{date}}
1651
+ title: Daily entry
1626
1652
  description: Daily journal entry.
1653
+ ---
1654
+ ---
1655
+ title: {{date}}
1627
1656
  date: {{date}}
1628
1657
  author: {{user}}
1629
1658
  mood:
@@ -1648,6 +1677,8 @@ tags: [daily]
1648
1677
  `},WORLDBUILDING_FOLDERS=[{path:`characters`,title:`Characters`,description:"One file per character (PC + NPC). Frontmatter carries `type`, status, faction membership, first appearance. Agent: when a chapter excerpt or session log mentions a name not yet captured, stub a file here with backlinks to where they were mentioned. Do NOT add dialog stat-block fields (`xp_awarded`, etc.); those belong in a future TTRPG variant.",tags:[`character`,`fiction`,`entity`],starterTemplate:`character`},{path:`settings`,title:`Settings`,description:`Locations, regions, world-rules, atmospheric notes. Frontmatter carries region, controlling faction, danger level. The "where" of the story, physical and felt. Agent: when a new location is referenced, stub it here; when a setting is described in two places with conflicting details, surface the conflict.`,tags:[`setting`,`location`,`world`],starterTemplate:`setting`},{path:`themes`,title:`Themes`,description:`Recurring narrative concerns: love, betrayal, redemption, identity, etc. The "why" of the story. Themes work via opposition; each entry captures the theme + its tension. Agent: surface theme links when characters or settings repeatedly invoke a concept; suggest theme entries when a recurring symbol or motif emerges across chapters.`,tags:[`theme`,`narrative`,`meaning`],starterTemplate:`theme`},{path:`factions`,title:`Factions`,description:'Political, social, criminal, magical, religious groups. Frontmatter carries leader, members, rivals, alignment. The "who-vs-who" of the story. Ships three templates: `faction` (generic group), `political-faction` (states / houses / parties with holdings + ideology), `religion` (deity / beliefs / rituals / schisms). Agent: extract faction membership when characters declare allegiance; flag when a character\'s `faction` field contradicts their actions in narrative chapters.',tags:[`faction`,`group`,`politics`],starterTemplate:`faction`,extraTemplates:[`political-faction`,`religion`]},{path:`lore`,title:`Lore`,description:"History, mythology, cosmology, magic systems. Long-form prose; the foundational fabric the story stands on. Ships three templates: `lore` (generic entry), `magic-system` (source / costs / limits / practitioners), `historical-event` (when / where / causes / consequences / sources-cited). Agent: when characters or settings reference the same historical event, link them through the relevant lore entry; flag when in-story tellings contradict the canonical lore (themselves a story-shaping detail worth noting).",tags:[`lore`,`history`,`world`],starterTemplate:`lore`,extraTemplates:[`magic-system`,`historical-event`]}],WORLDBUILDING_TEMPLATES={character:`---
1649
1678
  title: Character Name
1650
1679
  description: One-line characterization.
1680
+ ---
1681
+ ---
1651
1682
  type: character
1652
1683
  status: alive
1653
1684
  faction: []
@@ -1675,6 +1706,8 @@ tags: [character]
1675
1706
  `,setting:`---
1676
1707
  title: Setting Name
1677
1708
  description: One-line atmospheric summary.
1709
+ ---
1710
+ ---
1678
1711
  type: setting
1679
1712
  region:
1680
1713
  controlling_faction:
@@ -1698,6 +1731,8 @@ tags: [setting]
1698
1731
  `,theme:`---
1699
1732
  title: Theme Name
1700
1733
  description: One-line statement of the recurring concern.
1734
+ ---
1735
+ ---
1701
1736
  type: theme
1702
1737
  created: {{date}}
1703
1738
  author: {{user}}
@@ -1718,6 +1753,8 @@ tags: [theme]
1718
1753
  `,faction:`---
1719
1754
  title: Faction Name
1720
1755
  description: One-line description of who they are and what they want.
1756
+ ---
1757
+ ---
1721
1758
  type: faction
1722
1759
  alignment:
1723
1760
  leader:
@@ -1742,6 +1779,8 @@ tags: [faction]
1742
1779
  `,"political-faction":`---
1743
1780
  title: Faction Name
1744
1781
  description: One-line summary of their politics and their ambition.
1782
+ ---
1783
+ ---
1745
1784
  type: political-faction
1746
1785
  form: monarchy
1747
1786
  seat:
@@ -1777,6 +1816,8 @@ tags: [faction, politics]
1777
1816
  `,religion:`---
1778
1817
  title: Religion Name
1779
1818
  description: One-line summary of the faith and its central tension.
1819
+ ---
1820
+ ---
1780
1821
  type: religion
1781
1822
  deity:
1782
1823
  pantheon: []
@@ -1812,6 +1853,8 @@ tags: [faction, religion]
1812
1853
  `,lore:`---
1813
1854
  title: Lore Topic
1814
1855
  description: One-line summary.
1856
+ ---
1857
+ ---
1815
1858
  type: lore
1816
1859
  era:
1817
1860
  scope: history
@@ -1834,6 +1877,8 @@ tags: [lore]
1834
1877
  `,"magic-system":`---
1835
1878
  title: Magic System Name
1836
1879
  description: One-line summary of the source and the cost.
1880
+ ---
1881
+ ---
1837
1882
  type: magic-system
1838
1883
  source:
1839
1884
  cost:
@@ -1867,6 +1912,8 @@ tags: [lore, magic]
1867
1912
  `,"historical-event":`---
1868
1913
  title: Event Name
1869
1914
  description: One-line summary of what happened and why it mattered.
1915
+ ---
1916
+ ---
1870
1917
  type: historical-event
1871
1918
  when:
1872
1919
  where:
@@ -1901,6 +1948,8 @@ tags: [lore, history]
1901
1948
  `},WRITING_PIPELINE_FOLDERS=[{path:`ideas`,title:`Ideas`,description:'One-line ideas, captured before they fade. Premises, headlines, fragments, anything that might earn a draft. Promote an idea into `drafts/` when you commit to writing the piece. Agent: sweep ideas idle >30 days and surface for park-or-push triage. NOT a draft folder; these are pre-drafts, kept short on purpose. Named `ideas/` (not `seeds/`) because "seeds" in PKM usage means evergreen-note maturity, not pre-drafts.',tags:[`idea`,`inbox`,`pre-draft`],starterTemplate:`idea`},{path:`drafts`,title:`Drafts`,description:"Active prose. Frontmatter tracks `status: drafting/review`, word count, parent idea. Iterate freely; OK's CRDT history tracks every save, so named-revision folders aren't needed. The Jekyll `_drafts` → `_posts` convention has been load-bearing since 2008; we follow it. Agent: sweep drafts idle >14 days; for drafts in review, suggest publication targets based on `target_form`. If you need per-piece research notes, create `drafts/<slug>/research/` on demand rather than a top-level folder.",tags:[`draft`,`prose`],starterTemplate:`draft`},{path:`published`,title:`Published`,description:"Shipped work. Carries `published_at`, `canonical_url`, `channel`. Source-of-truth for what's gone live. Treat as immutable; if you need to revise, copy to a new draft. Agent: on publish, auto-fill `canonical_url` when a Substack / Ghost / Mirror URL is pasted into the file.",tags:[`published`,`live`],starterTemplate:`published`}],WRITING_PIPELINE_TEMPLATES={idea:`---
1902
1949
  title: Idea title
1903
1950
  description: One-line hook.
1951
+ ---
1952
+ ---
1904
1953
  captured_at: {{date}}
1905
1954
  hook:
1906
1955
  tags: [idea]
@@ -1914,6 +1963,8 @@ tags: [idea]
1914
1963
  `,draft:`---
1915
1964
  title: Draft title
1916
1965
  description: What's this piece about?
1966
+ ---
1967
+ ---
1917
1968
  status: drafting
1918
1969
  target_form:
1919
1970
  target_words:
@@ -1927,6 +1978,8 @@ tags: [draft]
1927
1978
  `,published:`---
1928
1979
  title: Published title
1929
1980
  description: One-line summary.
1981
+ ---
1982
+ ---
1930
1983
  status: published
1931
1984
  published_at:
1932
1985
  canonical_url:
@@ -1940,6 +1993,8 @@ tags: [published]
1940
1993
  `},GBRAIN_FOLDERS=[{path:`people`,title:`People`,description:"Person dossiers. Compiled-truth section above `---` (overwritten as new evidence arrives); append-only timeline below (`YYYY-MM-DD:` entries, never edit existing ones, only append). Frontmatter `type: person`. Linked to `companies/` (affiliations, founders, investors) and `meetings/` (attendance). Agent: when a meeting note mentions a person not yet captured, stub a file here; route new facts into either compiled-truth (if they update current understanding) or timeline (raw evidence). Never rewrite the timeline.",tags:[`person`,`entity`,`dossier`],starterTemplate:`person`},{path:`companies`,title:`Companies`,description:"Company dossiers. Same body convention as `people/`: compiled-truth above `---`, append-only timeline below. Frontmatter `type: company`. Linked to `people/` (founders, employees, investors) and `meetings/`. Agent: when a person dossier references a company not yet captured, stub a file here; surface company-to-person edges when both exist.",tags:[`company`,`entity`,`dossier`],starterTemplate:`company`},{path:`meetings`,title:`Meetings`,description:"Meeting notes. Filename `YYYY-MM-DD-<slug>.md`. Frontmatter carries `date`, `attendees:` (list of person names — match dossier filenames in `people/` so the graph stays queryable), and `type: meeting`. Body is raw notes with links to the people, companies, and concepts mentioned. Agent: after a meeting note lands, extract entity mentions and append timeline entries to each referenced dossier. Do NOT rewrite the meeting note; it is the verbatim record.",tags:[`meeting`,`note`],starterTemplate:`meeting`},{path:`concepts`,title:`Concepts`,description:'Evergreen idea pages: abstract patterns, frameworks, recurring concepts that surface across people / companies / meetings. Compiled-truth + timeline convention. Frontmatter `type: concept`. Agent: when a meeting note or person dossier references a concept (e.g. "agent-runtime observability") not yet captured, stub a file here; thread links so the concept becomes a hub for everywhere it appears.',tags:[`concept`,`idea`,`evergreen`],starterTemplate:`concept`},{path:`originals`,title:`Originals`,description:"Your own thinking, untransformed. Frontmatter `type: idea`. Use freely; link to anything that should become its own entity. Agent: treat originals as authoritative source material when extracting facts; these are the user's words, not inferences. Append timeline entries to referenced dossiers when a clear new claim appears, citing the original by markdown link.",tags:[`original`,`thinking`,`user`],starterTemplate:`original`},{path:`media`,title:`Media`,description:"Bulk transcripts, voice notes, articles, large attachments. Frontmatter `type: transcript` (template provided). Often `.okignore`-d so the OK index stays light. If gbrain is installed alongside OK, the `media-ingest` skill produces transcripts + backlinks here (video / audio / PDF / books), and the `voice-note-ingest` skill captures voice memos verbatim while routing the extracted content into the right entity dossier. Without gbrain, the agent does both on request. Keep raw; analysis belongs in dossiers, not here.",tags:[`media`,`transcript`,`bulk`],starterTemplate:`transcript`}],GBRAIN_TEMPLATES={person:`---
1941
1994
  title: Person Name
1942
1995
  description: One-line characterization. Who they are, why they matter to you.
1996
+ ---
1997
+ ---
1943
1998
  type: person
1944
1999
  created: {{date}}
1945
2000
  author: {{user}}
@@ -1958,6 +2013,8 @@ tags: [person]
1958
2013
  `,company:`---
1959
2014
  title: Company Name
1960
2015
  description: One-line company summary. What they do, who's involved.
2016
+ ---
2017
+ ---
1961
2018
  type: company
1962
2019
  created: {{date}}
1963
2020
  author: {{user}}
@@ -1976,6 +2033,8 @@ tags: [company]
1976
2033
  `,meeting:`---
1977
2034
  title: Meeting Title
1978
2035
  description: One-line meeting summary. Fill in after the meeting.
2036
+ ---
2037
+ ---
1979
2038
  type: meeting
1980
2039
  date: {{date}}
1981
2040
  attendees: []
@@ -1993,6 +2052,8 @@ tags: [meeting]
1993
2052
  `,concept:`---
1994
2053
  title: Concept Name
1995
2054
  description: One-line concept summary. What it names and why it recurs.
2055
+ ---
2056
+ ---
1996
2057
  type: concept
1997
2058
  created: {{date}}
1998
2059
  author: {{user}}
@@ -2011,6 +2072,8 @@ tags: [concept]
2011
2072
  `,original:`---
2012
2073
  title: Idea Title
2013
2074
  description: One-line summary of the idea or take.
2075
+ ---
2076
+ ---
2014
2077
  type: idea
2015
2078
  date: {{date}}
2016
2079
  author: {{user}}
@@ -2021,6 +2084,8 @@ tags: [original]
2021
2084
  `,transcript:`---
2022
2085
  title: Transcript
2023
2086
  description: One-line transcript summary. Source and key topic.
2087
+ ---
2088
+ ---
2024
2089
  type: transcript
2025
2090
  date: {{date}}
2026
2091
  source:
@@ -2171,7 +2236,7 @@ description: When the agent does scheduled work: daily briefings, end-of-day dos
2171
2236
  `)){if(E(e))continue;let t=e.match(/^(#{1,6})\s+(.+)$/);if(t){let e=t[2].trim(),E=getHeadingSlug(e,w);E&&S.push({level:t[1].length,text:e,slug:E})}}return S}function isSafeDocName(e){return!(e.includes(`..`)||e.startsWith(`/`)||e.includes(`\0`)||e.includes(`\\`))}function createApiExtension(e){let{hocuspocus:t,sessionManager:S,contentDir:w,serverInstanceId:E,getFileIndex:D,getFolderIndex:O,getAliasMap:k,rescanFiles:j,enableTestRoutes:F=!1,shadowRef:L,flushGitCommit:B,flushContributors:H,getCurrentBranch:q,getDiskAckSVs:J,contentRoot:Y,backlinkIndex:ee,tagIndex:te,signalChannel:ne,agentFocusBroadcaster:ae,agentPresenceBroadcaster:oe,onAgentWrite:se,getSyncEngine:ce,localOpCliArgs:ue=[`open-knowledge`],projectDir:de,getPrincipal:fe,contentFilter:me,installedAgentsProbe:ge,forceUnloadDocument:_e,ready:ve,recentlyRemovedDocs:ye,serializeDoc:Ce}=e,we=createConcurrencyGuard(),Te=null;function De(){let e=O?.();return e instanceof Map?e:null}function je(e){let t=De();if(t)try{upsertFolderIndexEntry(t,w,e,statSync(e),e)}catch(t){console.warn(`[api-extension] folder index stat failed for ${e}:`,t)}}function Me(e){let t=e.split(`/`).filter(Boolean);for(let e=1;e<=t.length;e+=1)je(resolve(w,t.slice(0,e).join(`/`)))}function Pe(e){let t=De();t&&removeFolderIndexEntries(t,e)}function Ie(e,t){let S=De();if(!S)return;let E=[];for(let[w,D]of S.entries()){if(w!==e&&!w.startsWith(`${e}/`))continue;S.delete(w);let O=w.slice(e.length);E.push([`${t}${O}`,D])}if(E.length===0){let e=resolveContentEntryPath(w,`folder`,t);existsSync(e)&&je(e);return}for(let[e,t]of E)S.set(e,{...t,modified:new Date().toISOString(),canonicalPath:resolve(w,e)})}function Re(e){return[...e.entries()].map(([e,t])=>`${e}\0${t.canonicalPath}\0${t.size}\0${t.modified}\0${t.aliases.join(`\0`)}`).sort().join(`
2172
2237
  `)}let ze=createInstalledAgentsProbe({probe:ge??createOsProbe(process.platform)});function Be(e){if(!isSafeDocName(e))return null;let t=resolve(w),S=resolve(t,`${e}${getDocExtension(e)}`);return!S.startsWith(`${t}/`)&&S!==t?null:S}function Ve(e){let t=Be(e);if(!t||!existsSync(t))return e;try{return extractPageTitle(readFileSync(t,`utf-8`),e)}catch{return e}}function Ue(e,t){return t.has(e)?Ve(e):e}let We={cluster:void 0,category:void 0,tags:void 0};function Ge(e){try{let S=t.documents.get(e);if(S){let e=readFmMap(S.getText(`source`).toString());if(Object.keys(e).length>0){let t=typeof e.cluster==`string`?e.cluster:void 0,S=typeof e.category==`string`?e.category:void 0,w;return Array.isArray(e.tags)?w=e.tags.length>0?e.tags:void 0:typeof e.tags==`string`&&e.tags&&(w=[e.tags]),{cluster:t,category:S,tags:w}}}}catch{}try{let t=Be(e);if(!t||!existsSync(t))return We;let{frontmatter:S}=stripFrontmatter(readFileSync(t,`utf-8`));return S?parseFrontmatterMetadata(S):We}catch{return We}}function Ke(e,t){return t.has(e)?Ge(e):We}function Xe(e){if(ee)try{if(ee.getBacklinks(e).length>0)return;let t=performance.now(),S=findHubCandidates(e,D()),w=performance.now()-t;return w>5&&log$2.debug({docName:e,elapsedMs:w,candidateCount:S.length},`[orphan-hint] findHubCandidates slow`),S.length===0?void 0:[{type:`orphan`,parentCandidates:S,message:`This doc has no backlinks yet. To make it discoverable, consider linking from a parent hub doc (index/overview files in the folder tree): ${S.map(e=>`[[${e}]]`).join(`, `)}.`}]}catch(e){console.warn(`[orphan-hint] computeOrphanHints failed:`,e);return}}function $e(e){return k?.().get(e)??e}function nt(e){try{return t.documents.get(e)?.connections.size??0}catch{return 0}}function rt(){try{return t.documents.get(`__system__`)?.connections.size??0}catch{return 0}}function it(e,S){let w=`onStoreDocument-${e}`;(t.debouncer.isDebounced(w)?t.debouncer.executeNow(w):Promise.resolve()).then(()=>B?.()).catch(e=>{log$2.warn({err:e},`[${S}] post-write flush failed`)})}function at(){let e=new Set;for(let[t,S]of D()){e.add(t);for(let t of S.aliases)e.add(t)}return e}function st(){let e=Promise.resolve();return async function(t){let S=e,w=()=>{};e=new Promise(e=>{w=e}),await S;try{return await t()}finally{w()}}}let vt=st(),Tt=e=>e.endsWith(`.`)?e:`${e}.`;function Et(e){return e instanceof Error?e instanceof ManagedRenameSourceNotFoundError?{status:404,type:`urn:ok:error:doc-not-found`,error:Tt(e.message)}:e instanceof ManagedRenameDestinationExistsError?{status:409,type:`urn:ok:error:doc-already-exists`,error:Tt(e.message)}:e instanceof ManagedRenameSourceTypeMismatchError?{status:400,type:`urn:ok:error:invalid-request`,error:Tt(e.message)}:e instanceof ManagedRenameMissingDocumentError||e instanceof ManagedRenameSnapshotMissingError?{status:404,type:`urn:ok:error:doc-not-found`,error:Tt(e.message)}:e instanceof SymlinkEscapeError?{status:400,type:`urn:ok:error:path-escape`,error:Tt(e.message)}:e instanceof BacklinkIndexRequiredError?{status:503,type:`urn:ok:error:backlink-index-not-configured`,error:Tt(e.message)}:{status:500,type:`urn:ok:error:internal-server-error`,error:`Failed to rename document.`}:{status:500,type:`urn:ok:error:internal-server-error`,error:`Failed to rename document.`}}async function Dt(e){let w=new Map;for(let S of e){let e=t.documents.get(S);e&&w.set(S,e.getText(`source`).toString())}for(let t of e)await S.closeAllForDoc(t).catch(e=>{console.warn(`[file-ops] Failed to close agent session for ${t}:`,e)});for(let S of e){let e=t.documents.get(S);deleteReconciledBase(S),e&&(t.closeConnections(S),await(_e??t.unloadDocument.bind(t))(e))}return w}function jt(e,t){for(let{fromDocName:S,toDocName:E}of e){let e=safeContentPath(E,w),D=t.get(S);typeof D==`string`&&tracedWriteFileSync(e,D,`utf-8`);let O=typeof D==`string`?D:existsSync(e)?readFileSync(e,`utf-8`):null;typeof O==`string`&&registerWrite(e,contentHash(O))}}function Mt(e,t){return e.map(e=>{let S=t.get(e);if(typeof S==`string`)return{docName:e,content:S};let E=safeContentPath(e,w);if(!existsSync(E))throw new ManagedRenameSnapshotMissingError(e);return{docName:e,content:readFileSync(E,`utf-8`)}})}function Ft(e){let S=t.documents.get(e);if(S)return S.getText(`source`).toString();let E=resolveContentEntryPath(w,`file`,e);return existsSync(E)?readFileSync(E,`utf-8`):null}function It(e,t){let S=resolveContentEntryPath(w,`file`,e);tracedMkdirSync(dirname(S),{recursive:!0}),tracedWriteFileSync(S,t,`utf-8`),registerWrite(S,contentHash(t)),setReconciledBase(e,t);let E=D();E instanceof Map&&updateFileIndex({kind:`update`,path:S,docName:e,content:t},E)}function Lt(e,S){let w=t.documents.get(e);if(!w)throw Error(`Document is not loaded: ${e}`);let E={markdown:``,rewrites:0};return w.transact(()=>{E=applyRenameMap(w.getText(`source`).toString(),e,S),E.rewrites!==0&&composeAndWriteRawBody(w,E.markdown,`managed-rename`,!1)},MANAGED_RENAME_ORIGIN),E}async function Rt(e,S,E,O){return vt(async()=>withSpan(`rename.executeRewrites`,{attributes:{"rename.kind":E}},async k=>{if(!ee)throw new BacklinkIndexRequiredError;let j=resolveContentEntryPath(w,E,e),F=resolveContentEntryPath(w,E,S);if(j===F)return{renamed:[],rewrittenDocs:[]};if(!existsSync(j))throw new ManagedRenameSourceNotFoundError(E);if(existsSync(F))throw new ManagedRenameDestinationExistsError;let B=statSync(j);if(E===`file`&&!B.isFile()||E===`folder`&&!B.isDirectory())throw new ManagedRenameSourceTypeMismatchError(E);let H=(E===`file`?[stripDocExtension(e)]:listAffectedDocNames(D(),E,e)).map(t=>({from:t,to:E===`file`?stripDocExtension(S):remapDocNameForRename(t,E,e,S)}));if(k.setAttribute(`rename.affected_docs`,H.length),H.length===0)return E===`folder`&&(await renameTrackedPathInGit(de,j,F)||(tracedMkdirSync(dirname(F),{recursive:!0}),tracedRenameSync(j,F)),Ie(e,S),ne?.(`files`)),{renamed:[],rewrittenDocs:[]};let J=buildRenameMap(H),Y=H.map(({from:e,to:t})=>({fromDocName:e,toDocName:t})),te=new Set;for(let{from:e}of H)for(let t of ee.getBacklinks(e))J.has(t.source)||te.add(t.source);let ae=[...te].sort((e,t)=>e.localeCompare(t)),oe=new Map,se=[],ce=[];for(let e of[...J.keys(),...ae]){if(oe.has(e))continue;if(!J.has(e)&&!existsSync(resolveContentEntryPath(w,`file`,e))){ce.push(e);continue}let t=Ft(e);typeof t==`string`?(oe.set(e,t),J.has(e)||se.push(e)):J.has(e)||ce.push(e)}for(let{from:e}of H)if(typeof oe.get(e)!=`string`)throw new ManagedRenameMissingDocumentError(e);let ue=createManagedRenameRecoveryJournal({fromPath:e,toPath:S,affectedDocs:[...H],snapshots:Mt([...oe.keys()],oe)}),fe=[];return await withManagedRenameRecovery(de??w,ue,async()=>{for(let e of ce)ee.deleteDocument(e);for(let e of se){let S=t.documents.get(e)?Lt(e,J):applyRenameMap(oe.get(e)??``,e,J);S.rewrites>0&&(It(e,S.markdown),fe.push({docName:e,rewrites:S.rewrites})),ee.updateDocumentFromMarkdown(e,S.markdown)}if(ye)for(let{from:e,to:t}of H)isSystemDoc(e)||isConfigDoc(e)||(ye.setRenamed(e,t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,from:e,to:t,kind:`renamed`,source:`spine`})));let k=resolveContentEntryPath(w,E,e),j=resolveContentEntryPath(w,E,S);await renameTrackedPathInGit(de,k,j)||(tracedMkdirSync(dirname(j),{recursive:!0}),tracedRenameSync(k,j)),E===`folder`&&Ie(e,S);let F=await Dt([...J.keys()]);if(process.env.NODE_ENV===`test`&&process.env.OK_TEST_RENAME_FAULT===`pre-append`)throw Error(`OK_TEST_RENAME_FAULT=pre-append`);if(L?.current){let e=L.current;withSpanSync(`rename.appendLog`,{attributes:{"rename.kind":E}},t=>{let S=randomUUID(),w=new Date().toISOString(),D=q?.()??`main`,k=getOrLoadRenameLogIndex(e.gitDir),j=O?.actor?{writerId:O.actor.writerId,displayName:O.actor.displayName}:{writerId:SERVICE_WRITER.id,displayName:SERVICE_WRITER.name},F=0;for(let{from:t,to:L}of H){let B={v:1,from:t,to:L,at:w,commitSha:``,branch:D,groupId:S,kind:E,actor:j};appendRenameLogEntry(e.gitDir,B,k,e),F+=1,O?.actor?recordContributor(L,O.actor.writerId,O.actor.displayName,O.actor.colorSeed,formatRenameSubject(t,L),O.actor.actorMetadata,void 0,[{from:t,to:L}]):recordContributor(L,SERVICE_WRITER.id,SERVICE_WRITER.name,SERVICE_WRITER.id,formatRenameSubject(t,L),void 0,void 0,[{from:t,to:L}])}t.setAttribute(`rename.entries_appended`,F)})}let B=E===`file`&&isSupportedDocFile(S)?extname(S):null;for(let{from:e,to:t}of H){let S=getDocExtension(e);forgetDocExtension(e),registerDocExtension(t,B??S)}let Y=[...H].sort((e,t)=>e.from.localeCompare(t.from));for(let{from:e,to:t}of Y){let S=resolveContentEntryPath(w,`file`,e),E=resolveContentEntryPath(w,`file`,t),O=applyRenameMap(F.get(e)??oe.get(e)??readFileSync(E,`utf-8`),e,J);jt([{fromDocName:e,toDocName:t}],new Map([[e,O.markdown]])),setReconciledBase(t,O.markdown);let k=D();k instanceof Map&&updateFileIndex({kind:`rename`,oldPath:S,newPath:E,oldDocName:e,newDocName:t,content:O.markdown},k),ee.renameDocument(e,t,O.markdown),O.rewrites>0&&fe.push({docName:t,rewrites:O.rewrites})}if(process.env.NODE_ENV===`test`&&process.env.OK_TEST_RENAME_FAULT===`pre-journal-clear`)throw Error(`OK_TEST_RENAME_FAULT=pre-journal-clear`)}),ee.saveToDisk().catch(t=>{console.warn(`[backlinks] Failed to persist managed rename cache for ${e} -> ${S}:`,t)}),ne?.(`files`),ne?.(`backlinks`),ne?.(`graph`),fe.sort((e,t)=>e.docName.localeCompare(t.docName)),k.setAttribute(`rename.rewrite_count`,fe.length),{renamed:Y,rewrittenDocs:fe}}))}function zt(e){let t=parseAgentBodyFields(e),S=t.writerId??`claude-1`;return{rawAgentId:t.rawAgentId,agentId:S,agentName:t.displayName,colorSeed:t.colorSeed??t.rawAgentId??S,clientName:t.clientName,clientVersion:t.clientVersion,label:t.label}}function Bt(e){return{principalId:fe?.()?.id,agentType:resolveAgentType(e.clientName),clientName:e.clientName,clientVersion:e.clientVersion,label:e.label}}function Vt(e){return e.kind===`value`?e.truncatedFrom===void 0?{response:{value:e.value},stored:e.value}:{response:{value:e.value,truncatedFrom:e.truncatedFrom,hint:`Summary truncated from ${e.truncatedFrom} chars to 80 (max 80).`},stored:e.value}:{stored:void 0}}function Ht(e){return{value:e.value}}function Ut(e,t=!1){e.kind===`value`&&(incrementSummariesProvided(),e.truncatedFrom!==void 0&&!t&&incrementSummariesTruncated())}let Wt=withValidation(AgentWriteRequestSchema,async(t,w,E)=>{try{let t=$e(E.docName!==void 0&&E.docName.length>0?E.docName:`test-doc`),{agentId:D,agentName:O,colorSeed:k,clientName:j,clientVersion:F,label:L}=zt(E);if(isSystemDoc(t)||isConfigDoc(t)){errorResponse(w,400,`urn:ok:error:reserved-doc-name`,`'${t}' is a reserved document name.`,{handler:`agent-write`});return}let B=normalizeSummary(E.summary),H=await S.getSession(t,D,{displayName:O,colorSeed:k,clientName:j}),q=new Date().toISOString(),J=typeof E.content==`string`?E.content:`Hello from the agent! ${q}`,{response:Y,stored:ee}=Vt(B);try{let S=iconFromClientName(j),w=AGENT_ICON_COLORS[S]??colorFromSeed(k??D);oe?.setPresence(D,{displayName:O,icon:S,color:w,currentDoc:t,mode:`writing`,ts:Date.now()}),captureEffect(H.dc.document.getText(`source`),D,k,j),H.dc.document.transact(()=>{applyAgentMarkdownWrite(H.dc.document,`${J}\n`,`append`,e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:t}:void 0),H.dc.document.getMap(`agent-flash`).set(D,{agentId:D,timestamp:Date.now(),type:`insert`,description:`Added (${O}): ${J.slice(0,50)}`})},H.origin),recordContributor(t,D,O,k,void 0,Bt({clientName:j,clientVersion:F,label:L}),ee),incrementAgentWriteCalls(),Ut(B)}finally{oe?.touchMode(D,`idle`)}it(t,`agent-write`),se?.(),successResponse(w,200,AgentWriteSuccessSchema,{timestamp:q,...Y?{summary:Y}:{}},{handler:`agent-write`})}catch(e){if(e instanceof DocInConflictError){respondDocInConflict(w,e,`agent-write`);return}if(e instanceof AgentSessionCapacityError){errorResponse(w,503,`urn:ok:error:too-many-agent-sessions`,`Too many agent sessions.`,{handler:`agent-write`,cause:e,extraHeaders:{"Retry-After":`10`}});return}log$2.error({err:e},`[agent-write] handler failed`),errorResponse(w,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`agent-write`,cause:e})}},{handler:`agent-write`,method:`POST`}),Kt=withValidation(AgentWriteMdRequestSchema,async(t,w,E)=>{try{let t=E.position??`append`,D=$e(E.docName!==void 0&&E.docName.length>0?E.docName:`test-doc`),{agentId:O,agentName:k,colorSeed:j,clientName:F,clientVersion:L,label:B}=zt(E);if(isSystemDoc(D)||isConfigDoc(D)){errorResponse(w,400,`urn:ok:error:reserved-doc-name`,`'${D}' is a reserved document name.`,{handler:`agent-write-md`});return}let H=normalizeSummary(E.summary),{response:q,stored:J}=Vt(H),Y=await S.getSession(D,O,{displayName:k,colorSeed:j,clientName:F}),ee=new Date().toISOString();try{let S=iconFromClientName(F),w=AGENT_ICON_COLORS[S]??colorFromSeed(j??O);oe?.setPresence(O,{displayName:k,icon:S,color:w,currentDoc:D,mode:`writing`,ts:Date.now()}),captureEffect(Y.dc.document.getText(`source`),O,j,F),Y.dc.document.transact(()=>{applyAgentMarkdownWrite(Y.dc.document,E.markdown,t,e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:D}:void 0),Y.dc.document.getMap(`agent-flash`).set(O,{agentId:O,timestamp:Date.now(),type:`insert`,description:`Added (${k}): ${E.markdown.trim().slice(0,50)}`})},Y.origin),recordContributor(D,O,k,j,void 0,Bt({clientName:F,clientVersion:L,label:B}),J),incrementAgentWriteCalls(),Ut(H)}finally{oe?.touchMode(O,`idle`)}it(D,`agent-write-md`),ae?.setFocus(O,{agentName:k,currentDoc:D,writeKind:`write`,ts:Date.now()}),se?.();let te=Xe(D),ne=nt(D),ce=rt();ce===0&&hintEmittedCounter().add(1,{"shadow.writer":`agent`,"agent.type":resolveAgentType(F)}),successResponse(w,200,AgentWriteMdSuccessSchema,{timestamp:ee,subscriberCount:ne,systemSubscriberCount:ce,...te?{hints:te}:{},...q?{summary:q}:{}},{handler:`agent-write-md`})}catch(e){if(e instanceof DocInConflictError){respondDocInConflict(w,e,`agent-write-md`);return}if(e instanceof AgentSessionCapacityError){errorResponse(w,503,`urn:ok:error:too-many-agent-sessions`,`Too many agent sessions.`,{handler:`agent-write-md`,cause:e,extraHeaders:{"Retry-After":`10`}});return}log$2.error({err:e},`[agent-write-md] handler failed`),errorResponse(w,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`agent-write-md`,cause:e})}},{handler:`agent-write-md`,method:`POST`}),$t=withValidation(FrontmatterPatchRequestSchema,async(e,t,w)=>{try{let e=$e(w.docName!==void 0&&w.docName.length>0?w.docName:`test-doc`),{agentId:E,agentName:D,colorSeed:O,clientName:k,clientVersion:j,label:F}=zt(w);if(isSystemDoc(e)||isConfigDoc(e)){errorResponse(t,400,`urn:ok:error:reserved-doc-name`,`'${e}' is a reserved document name.`,{handler:`frontmatter-patch`});return}let L=w.patch??{},B=Object.keys(L),H=normalizeSummary(w.summary),{response:q,stored:J}=Vt(H),Y=await S.getSession(e,E,{displayName:D,colorSeed:O,clientName:k}),ee=new Date().toISOString(),te,ne=!1,ce=[];try{let t=iconFromClientName(k),S=AGENT_ICON_COLORS[t]??colorFromSeed(O??E);oe?.setPresence(E,{displayName:D,icon:t,color:S,currentDoc:e,mode:`writing`,ts:Date.now()}),withSpanSync(`ok.frontmatter_patch`,{attributes:{"doc.name":e,"frontmatter_patch.keys":B.length}},()=>{Y.dc.document.transact(()=>{let{fenced:e,body:t}=detectFmRegion(Y.dc.document.getText(`source`).toString()),S=applyPatchToFm(e,L);if(!S.ok){te=S.error;return}for(let e of Object.keys(L))ce.push(e);if(S.nextFenced!==e){let e=S.nextFenced+t;composeAndWriteRawBody(Y.dc.document,e,`agent`),recordFrontmatterEditSurface(`mcp-write`)}ne=!0},Y.origin)})}finally{oe?.touchMode(E,`idle`)}if(te){let e;switch(te.kind){case`invalid_value`:e={[te.key]:te.reason};break;case`reserved_key`:e={[te.key]:`'${te.key}' is reserved`};break;case`unknown_key`:e={[te.key]:`'${te.key}' is not a recognized key`};break;case`duplicate_target`:e={[te.key]:`'${te.key}' appears more than once`};break;case`reorder_mismatch`:e={__region__:`frontmatter reorder mismatch (expected: ${te.expected.join(`, `)}; got: ${te.got.join(`, `)})`};break;case`region_too_large`:e={__region__:`frontmatter region too large (${te.bytes} > ${te.limit} bytes)`};break;case`parse_failed`:e={__region__:`frontmatter region unparseable: ${te.reason}`};break;default:e={__region__:`unhandled frontmatter edit error (${String(te)})`}}errorResponse(t,400,`urn:ok:error:invalid-frontmatter-patch`,`Frontmatter patch rejected: schema validation failed.`,{handler:`frontmatter-patch`,extensions:{fieldErrors:e}});return}ne&&ce.length>0&&(recordContributor(e,E,D,O,void 0,Bt({clientName:k,clientVersion:j,label:F}),J),incrementAgentWriteCalls(),Ut(H),it(e,`frontmatter-patch`)),ae?.setFocus(E,{agentName:D,currentDoc:e,writeKind:`write`,ts:Date.now()}),se?.();let ue=nt(e),de=rt();de===0&&hintEmittedCounter().add(1,{"shadow.writer":`agent`,"agent.type":resolveAgentType(k)}),successResponse(t,200,FrontmatterPatchSuccessSchema,{timestamp:ee,subscriberCount:ue,systemSubscriberCount:de,appliedKeys:ce,...q?{summary:q}:{}},{handler:`frontmatter-patch`})}catch(e){if(e instanceof AgentSessionCapacityError){errorResponse(t,503,`urn:ok:error:too-many-agent-sessions`,`Too many agent sessions.`,{handler:`frontmatter-patch`,cause:e,extraHeaders:{"Retry-After":`10`}});return}log$2.error({err:e},`[frontmatter-patch] handler failed`),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`frontmatter-patch`,cause:e})}},{handler:`frontmatter-patch`,method:`POST`});function en(e){let t=e.getMap(`lifecycle`),S=t.get(`status`);if(typeof S!=`string`||S.length===0)return null;let w=t.get(`reason`);return{status:S,reason:typeof w==`string`?w:``}}let jr=withValidation(EmptyRequestSchema,async(e,S)=>{try{let E=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`docName`)||`test-doc`;if(!isSafeDocName(E)){errorResponse(S,400,`urn:ok:error:invalid-request`,`Invalid docName.`,{handler:`document-read`});return}let D=$e(E);if(isSystemDoc(D)||isConfigDoc(D)){errorResponse(S,400,`urn:ok:error:reserved-doc-name`,`'${D}' is a reserved document name.`,{handler:`document-read`});return}let O=t.documents.get(D);if(O){successResponse(S,200,DocumentReadSuccessSchema,{docName:D,content:O.getText(`source`).toString(),lifecycle:en(O)},{handler:`document-read`});return}if(!existsSync(resolveContentEntryPath(w,`file`,D))){errorResponse(S,404,`urn:ok:error:doc-not-found`,`Document not found: ${D}.`,{handler:`document-read`});return}let k=await t.openDirectConnection(D);try{let e=k.document;if(!e){errorResponse(S,500,`urn:ok:error:doc-not-available`,`Document is not available.`,{handler:`document-read`});return}successResponse(S,200,DocumentReadSuccessSchema,{docName:D,content:e.getText(`source`).toString(),lifecycle:en(e)},{handler:`document-read`})}finally{await k.disconnect()}}catch(e){errorResponse(S,500,`urn:ok:error:internal-server-error`,`Failed to read document.`,{handler:`document-read`,cause:e})}},{handler:`document-read`,method:`GET`,skipBodyParse:!0}),Mr=withValidation(EmptyRequestSchema,async(e,t)=>{try{ve&&await ve.catch(e=>{log$2.warn({err:e,handler:`document-list`},`[api] ready gate rejected — responding with partial index`)});let S=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),E=S.searchParams.get(`dir`),k=S.searchParams.get(`showAll`)===`true`;if(E)try{safeSubdir(w,E)}catch{errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid directory parameter.`,{handler:`document-list`});return}if(k&&me){let e=[];try{await walkContentDirForShowAll({contentDir:w,contentFilter:me,dirFilter:E,documents:e,getDocExtension}),e.sort((e,t)=>{let S=e.kind===`folder`?e.path??``:e.docName??e.path??``,w=t.kind===`folder`?t.path??``:t.docName??t.path??``;return S.localeCompare(w)}),successResponse(t,200,DocumentListSuccessSchema,{documents:e},{handler:`document-list`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to list documents (showAll mode).`,{handler:`document-list`,cause:e})}return}let j=D(),F=O?.()??new Map,L=[];for(let[e,t]of F)E&&!e.startsWith(`${E}/`)&&e!==E||L.push({kind:`folder`,path:e,size:0,modified:t.modified,docExt:`.md`,isSymlink:!1,canonicalDocName:null,targetPath:null});for(let[e,t]of j){if(E&&!e.startsWith(`${E}/`)&&e!==E)continue;let S=getDocExtension(e);L.push({kind:`document`,docName:e,docExt:S,size:t.size,modified:t.modified,isSymlink:!1,canonicalDocName:null,targetPath:null});for(let D of t.aliases){if(E&&!D.startsWith(`${E}/`)&&D!==E)continue;let O=relative(w,t.canonicalPath);L.push({kind:`document`,docName:D,docExt:S,size:t.size,modified:t.modified,isSymlink:!0,canonicalDocName:e,targetPath:O})}}let B=[];try{let e=Re(j);Te?.signature!==e&&(Te={signature:e,assets:collectReferencedAssets({contentDir:w,fileIndex:j,readMarkdown:e=>{try{return readFileSync(e,`utf-8`)}catch{return null}},isExcluded:me?e=>me.isPathIgnored(e):void 0})}),B=Te?.assets??[]}catch(e){Te=null,console.warn(`[document-list] asset collection failed; returning documents only:`,e)}for(let e of B)E&&!e.path.startsWith(`${E}/`)&&e.path!==E||L.push({kind:`asset`,docName:e.path,docExt:e.assetExt,path:e.path,assetExt:e.assetExt,mediaKind:e.mediaKind,referencedBy:e.referencedBy,size:e.size,modified:e.modified,isSymlink:!1,canonicalDocName:null,targetPath:null});L.sort((e,t)=>{let S=e.kind===`folder`?e.path??``:e.docName??e.path??``,w=t.kind===`folder`?t.path??``:t.docName??t.path??``;return S.localeCompare(w)}),successResponse(t,200,DocumentListSuccessSchema,{documents:L},{handler:`document-list`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to list documents.`,{handler:`document-list`,cause:e})}},{handler:`document-list`,method:`GET`,skipBodyParse:!0}),Fr=withValidation(EmptyRequestSchema,async(e,t)=>{if(!ee){errorResponse(t,503,`urn:ok:error:backlink-index-not-configured`,`Backlink index is not configured.`,{handler:`backlinks`});return}try{let S=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!S){errorResponse(t,400,`urn:ok:error:invalid-request`,`Missing docName parameter.`,{handler:`backlinks`});return}if(!isSafeDocName(S)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid docName.`,{handler:`backlinks`});return}successResponse(t,200,BacklinksSuccessSchema,{docName:S,backlinks:ee.getBacklinks(S).map(e=>({source:e.source,anchor:e.anchor,title:Ve(e.source),snippet:e.snippet}))},{handler:`backlinks`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read backlinks.`,{handler:`backlinks`,cause:e})}},{handler:`backlinks`,method:`GET`,skipBodyParse:!0}),Ir=withValidation(EmptyRequestSchema,async(e,t)=>{if(!ee){errorResponse(t,503,`urn:ok:error:backlink-index-not-configured`,`Backlink index is not configured.`,{handler:`backlink-counts`});return}try{let S=new URL(e.url??``,`http://localhost`).searchParams.get(`docNames`);if(!S){errorResponse(t,400,`urn:ok:error:invalid-request`,`Missing docNames parameter.`,{handler:`backlink-counts`});return}let w={};for(let e of S.split(`,`)){let t=e.trim();!t||!isSafeDocName(t)||(w[t]=ee.getBacklinkCount(t))}successResponse(t,200,BacklinkCountsSuccessSchema,{counts:w},{handler:`backlink-counts`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read backlink counts.`,{handler:`backlink-counts`,cause:e})}},{handler:`backlink-counts`,method:`GET`,skipBodyParse:!0}),Lr=withValidation(EmptyRequestSchema,async(e,t)=>{if(!ee){errorResponse(t,503,`urn:ok:error:backlink-index-not-configured`,`Backlink index is not configured.`,{handler:`forward-links`});return}try{let S=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!S){errorResponse(t,400,`urn:ok:error:invalid-request`,`Missing docName parameter.`,{handler:`forward-links`});return}if(!isSafeDocName(S)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid docName.`,{handler:`forward-links`});return}let w=at();successResponse(t,200,ForwardLinksSuccessSchema,{docName:S,forwardLinks:ee.getForwardLinkEntries(S).map(e=>e.kind===`doc`?{kind:`doc`,docName:e.target,anchor:e.anchor,title:Ue(e.target,w),snippet:e.snippet}:{kind:`external`,url:e.url,title:e.label??e.url,snippet:e.snippet})},{handler:`forward-links`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read forward links.`,{handler:`forward-links`,cause:e})}},{handler:`forward-links`,method:`GET`,skipBodyParse:!0}),zr=withValidation(EmptyRequestSchema,async(e,t)=>{if(!ee){errorResponse(t,503,`urn:ok:error:backlink-index-not-configured`,`Backlink index is not configured.`,{handler:`link-graph`});return}try{let S=new URL(e.url??``,`http://localhost`),w=S.searchParams.get(`docName`);if(w&&!isSafeDocName(w)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid docName.`,{handler:`link-graph`});return}let E=S.searchParams.get(`degrees`);if(E&&!w){errorResponse(t,400,`urn:ok:error:invalid-request`,`docName is required when degrees is provided.`,{handler:`link-graph`});return}let D,O;if(E&&w){let e=Number.parseInt(E,10);if(!Number.isFinite(e)||e<0){errorResponse(t,400,`urn:ok:error:invalid-request`,`degrees must be a non-negative integer.`,{handler:`link-graph`});return}({nodes:D,links:O}=ee.getLinkGraphNeighborhood(w,e))}else ({nodes:D,links:O}=ee.getLinkGraph());let k=at();successResponse(t,200,LinkGraphSuccessSchema,{nodes:D.map(e=>{if(e.kind===`doc`){let t=Ke(e.docName,k);return{id:e.id,kind:`doc`,docName:e.docName,anchor:e.anchor??null,label:Ue(e.docName,k),cluster:t.cluster??null,category:t.category??null,tags:t.tags??null}}return{id:e.id,kind:`external`,url:e.url,label:e.label??e.url}}),links:O},{handler:`link-graph`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read link graph.`,{handler:`link-graph`,cause:e})}},{handler:`link-graph`,method:`GET`,skipBodyParse:!0}),Br=withValidation(EmptyRequestSchema,async(e,t)=>{if(!ee){errorResponse(t,503,`urn:ok:error:backlink-index-not-configured`,`Backlink index is not configured.`,{handler:`orphans`});return}try{let S=new URL(e.url??``,`http://localhost`).searchParams.get(`mode`)??`both`;if(!isOrphanMode(S)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid orphan mode. Allowed values: incoming, outgoing, both.`,{handler:`orphans`});return}successResponse(t,200,OrphansSuccessSchema,{orphans:ee.getOrphans([...D().keys()],S).map(e=>({docName:e,title:Ve(e)}))},{handler:`orphans`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read orphan pages.`,{handler:`orphans`,cause:e})}},{handler:`orphans`,method:`GET`,skipBodyParse:!0}),Vr=withValidation(EmptyRequestSchema,async(e,t)=>{if(!ee){errorResponse(t,503,`urn:ok:error:backlink-index-not-configured`,`Backlink index is not configured.`,{handler:`hubs`});return}try{let S=new URL(e.url??``,`http://localhost`).searchParams.get(`limit`),w=S?Number.parseInt(S,10):20,E=Number.isFinite(w)&&w>0?w:20,D=at();successResponse(t,200,HubsSuccessSchema,{hubs:ee.getHubs(E).map(e=>({docName:e.docName,title:Ue(e.docName,D),count:e.count}))},{handler:`hubs`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read hub pages.`,{handler:`hubs`,cause:e})}},{handler:`hubs`,method:`GET`,skipBodyParse:!0}),Hr=withValidation(EmptyRequestSchema,async(e,t)=>{if(!ee){errorResponse(t,503,`urn:ok:error:backlink-index-not-configured`,`Backlink index is not configured.`,{handler:`dead-links`});return}try{let S=new URL(e.url??``,`http://localhost`).searchParams.getAll(`sourceDocName`);if(S.some(e=>e.length===0||!isSafeDocName(e))){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid sourceDocName.`,{handler:`dead-links`});return}let w=S.length?[...new Set(S.map(e=>$e(e)))]:void 0;successResponse(t,200,DeadLinksSuccessSchema,{deadLinks:ee.getDeadLinks(at(),w).map(e=>({target:e.target,sources:e.sources.map(e=>({source:e.source,title:Ve(e.source),snippet:e.snippet}))}))},{handler:`dead-links`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read dead links.`,{handler:`dead-links`,cause:e})}},{handler:`dead-links`,method:`GET`,skipBodyParse:!0}),Ur=withValidation(AgentPatchRequestSchema,async(t,w,E)=>{try{let{find:t,replace:D,offset:O}=E,k=$e(E.docName!==void 0&&E.docName.length>0?E.docName:`test-doc`),{agentId:j,agentName:F,colorSeed:L,clientName:B,clientVersion:H,label:q}=zt(E);if(findLooksLikeFrontmatter(t)){agentPatchFmTouchCounter().add(1,{result:`rejected`}),errorResponse(w,400,`urn:ok:error:frontmatter-edit-not-supported`,`Frontmatter edits are not supported via edit_document. Use write_document with position:"replace" to rewrite the document including its YAML block.`,{handler:`agent-patch`});return}if(isSystemDoc(k)||isConfigDoc(k)){errorResponse(w,400,`urn:ok:error:reserved-doc-name`,`'${k}' is a reserved document name.`,{handler:`agent-patch`});return}let J=normalizeSummary(E.summary),Y=await S.getSession(k,j,{displayName:F,colorSeed:L,clientName:B}),ee=new Date().toISOString(),te=!1,ne=!1,ce=!1;try{let S=iconFromClientName(B),w=AGENT_ICON_COLORS[S]??colorFromSeed(L??j);if(oe?.setPresence(j,{displayName:F,icon:S,color:w,currentDoc:k,mode:`writing`,ts:Date.now()}),captureEffect(Y.dc.document.getText(`source`),j,L,B),Y.dc.document.transact(()=>{let{frontmatter:S,body:w}=stripFrontmatter(Y.dc.document.getText(`source`).toString()),E=prependFrontmatter(S,w),L=O==null?E.indexOf(t):E.slice(O,O+t.length)===t?O:-1;if(L===-1){O==null?te=!0:ne=!0,console.warn(JSON.stringify({event:`agent-patch-find-mismatch`,"doc.name":k,findLength:t.length,replaceLength:D.length,hadOffset:O!=null})),incrementAgentPatchFindMismatches();return}if(L<S.length){ce=!0;return}let{body:B}=stripFrontmatter(E.slice(0,L)+D+E.slice(L+t.length));applyAgentMarkdownWrite(Y.dc.document,B,`replace`,e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:k}:void 0),Y.dc.document.getMap(`agent-flash`).set(j,{agentId:j,timestamp:Date.now(),type:`insert`,description:`Patched (${F}): ${t.slice(0,50)}`})},Y.origin),!te&&!ne&&!ce){let{stored:e}=Vt(J);recordContributor(k,j,F,L,void 0,Bt({clientName:B,clientVersion:H,label:q}),e),incrementAgentWriteCalls(),Ut(J)}}finally{oe?.touchMode(j,`idle`)}if(ne){errorResponse(w,409,`urn:ok:error:stale-target`,`Target text no longer matches at the requested offset.`,{handler:`agent-patch`});return}if(te){errorResponse(w,404,`urn:ok:error:target-not-found`,`Text not found in document.`,{handler:`agent-patch`});return}if(ce){agentPatchFmTouchCounter().add(1,{result:`rejected`}),errorResponse(w,400,`urn:ok:error:frontmatter-edit-not-supported`,`Frontmatter edits are not supported via edit_document. Use write_document with position:"replace" to rewrite the document including its YAML block.`,{handler:`agent-patch`});return}it(k,`agent-patch`),ae?.setFocus(j,{agentName:F,currentDoc:k,writeKind:`edit`,ts:Date.now()}),se?.();let ue=nt(k),de=rt();de===0&&hintEmittedCounter().add(1,{"shadow.writer":`agent`,"agent.type":resolveAgentType(B)});let{response:fe}=Vt(J);successResponse(w,200,AgentPatchSuccessSchema,{timestamp:ee,subscriberCount:ue,systemSubscriberCount:de,...fe?{summary:fe}:{}},{handler:`agent-patch`})}catch(e){if(e instanceof DocInConflictError){respondDocInConflict(w,e,`agent-patch`);return}if(e instanceof AgentSessionCapacityError){errorResponse(w,503,`urn:ok:error:too-many-agent-sessions`,`Too many agent sessions.`,{handler:`agent-patch`,cause:e,extraHeaders:{"Retry-After":`10`}});return}log$2.error({err:e},`[agent-patch] handler failed`),errorResponse(w,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`agent-patch`,cause:e})}},{handler:`agent-patch`,method:`POST`}),Wr=withValidation(AgentUndoRequestSchema,async(t,w,E)=>{try{let{agentId:t,agentName:D,colorSeed:O,clientName:k,clientVersion:j,label:F}=zt(E),L=$e(E.docName!==void 0&&E.docName.length>0?E.docName:`test-doc`);if(isSystemDoc(L)||isConfigDoc(L)){errorResponse(w,400,`urn:ok:error:reserved-doc-name`,`'${L}' is a reserved document name.`,{handler:`agent-undo`});return}let{connectionId:B}=E,H=E.scope===`session`||E.scope===`file`?`session`:`last`;if(!S.hasSession(L,B)){errorResponse(w,404,`urn:ok:error:no-active-session`,`No active session for this connectionId and docName.`,{handler:`agent-undo`});return}let q=await S.getSession(L,B),J=!1;try{let S=iconFromClientName(k),w=AGENT_ICON_COLORS[S]??colorFromSeed(O??t);oe?.setPresence(t,{displayName:D,icon:S,color:w,currentDoc:L,mode:`writing`,ts:Date.now()}),J=applyAgentUndo(q,H,e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:L}:void 0),J&&recordContributor(L,B,D,O,void 0,Bt({clientName:k,clientVersion:j,label:F}))}finally{oe?.touchMode(t,`idle`)}J&&it(L,`agent-undo`),ae?.setFocus(B,{agentName:B,currentDoc:L,writeKind:`undo`,ts:Date.now()}),successResponse(w,200,AgentUndoSuccessSchema,{docName:L,scope:H,undone:J},{handler:`agent-undo`})}catch(e){if(e instanceof DocInConflictError){respondDocInConflict(w,e,`agent-undo`);return}log$2.error({err:e},`[agent-undo] handler failed`),errorResponse(w,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`agent-undo`,cause:e})}},{handler:`agent-undo`,method:`POST`}),Gr=withValidation(EmptyRequestSchema,async(e,t)=>{try{let w=validateAgentId(new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`agentId`));if(w===null){errorResponse(t,400,`urn:ok:error:invalid-request`,`agentId required (alphanumeric/_/- only).`,{handler:`agent-activity`});return}successResponse(t,200,AgentActivitySuccessSchema,listAgentActivity(S,w),{handler:`agent-activity`})}catch(e){log$2.error({err:e},`[agent-activity] handler failed`),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`agent-activity`,cause:e})}},{handler:`agent-activity`,method:`GET`,skipBodyParse:!0}),Kr=withValidation(EmptyRequestSchema,async(e,t)=>{try{let w=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),E=validateAgentId(w.searchParams.get(`agentId`)),D=w.searchParams.get(`docName`),O=w.searchParams.get(`stackIndex`);if(E===null){errorResponse(t,400,`urn:ok:error:invalid-request`,`agentId required (alphanumeric/_/- only).`,{handler:`agent-burst-diff`});return}if(!D||D.trim()===``){errorResponse(t,400,`urn:ok:error:invalid-request`,`Missing docName parameter.`,{handler:`agent-burst-diff`});return}if(!isSafeDocName(D)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid docName.`,{handler:`agent-burst-diff`});return}let k=$e(D);if(isSystemDoc(k)||isConfigDoc(k)){errorResponse(t,400,`urn:ok:error:reserved-doc-name`,`'${k}' is a reserved document name.`,{handler:`agent-burst-diff`});return}if(!O||Number.isNaN(Number(O))){errorResponse(t,400,`urn:ok:error:invalid-request`,`StackIndex must be a number.`,{handler:`agent-burst-diff`});return}let j=Number(O);if(!Number.isInteger(j)||j<0){errorResponse(t,400,`urn:ok:error:invalid-request`,`stackIndex must be a non-negative integer.`,{handler:`agent-burst-diff`});return}let F=S.getLiveSession(k,E);if(!F){errorResponse(t,404,`urn:ok:error:no-active-session`,`No active session for this agentId and docName.`,{handler:`agent-burst-diff`});return}let L=F.um;if(j>=L.undoStack.length){errorResponse(t,404,`urn:ok:error:not-found`,`stackIndex ${j} out of range (stack has ${L.undoStack.length} items).`,{handler:`agent-burst-diff`});return}let B=L.undoStack[j];successResponse(t,200,AgentBurstDiffSuccessSchema,{diff:synthesizeStackItemDiffText(B,F.dc.document.getText(`source`),k),generatedAt:Date.now()},{handler:`agent-burst-diff`})}catch(e){log$2.error({err:e},`[agent-burst-diff] handler failed`),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`agent-burst-diff`,cause:e})}},{handler:`agent-burst-diff`,method:`GET`,skipBodyParse:!0}),qr=withValidation(EmptyRequestSchema,async(e,E)=>{try{let D=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),O=$e(D.searchParams.get(`docName`)??`test-doc`),k;try{k=safeContentPath(O,w)}catch(e){log$2.error({err:e,docName:O},`[test-reset] safeContentPath rejected docName`),errorResponse(E,400,`urn:ok:error:invalid-request`,`Invalid docName.`,{handler:`test-reset`,cause:e});return}await S.closeAll(O),t.closeConnections(O);let j=`onStoreDocument-${O}`;t.debouncer.isDebounced(j)&&await t.debouncer.executeNow(j);let F=t.documents.get(O);if(F&&await(_e??t.unloadDocument.bind(t))(F),writeFileSync(k,``,`utf-8`),ee&&(ee.deleteDocument(O),ee.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist cache after test-reset for ${O}:`,e)}),ne?.(`backlinks`),ne?.(`graph`)),D.searchParams.get(`reset-okignore`)!==`false`)try{let e=resolve(w,`.okignore`),S=t.documents.get(CONFIG_DOC_NAME_OKIGNORE);if(S){let e=S.getText(`source`);e.length>0&&S.transact(()=>{e.delete(0,e.length)},CONFIG_VALIDATION_REVERT_ORIGIN)}existsSync(e)&&writeFileSync(e,``,`utf-8`),me&&await me.rebuildIgnorePatterns()}catch(e){console.warn(`[test-reset] okignore reset partial failure:`,e)}ne?.(`files`),successResponse(E,200,TestResetSuccessSchema,{},{handler:`test-reset`})}catch(e){errorResponse(E,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`test-reset`,cause:e})}},{handler:`test-reset`,method:`POST`,skipBodyParse:!0}),Jr=withValidation(EmptyRequestSchema,async(e,t)=>{try{if(!ee){errorResponse(t,503,`urn:ok:error:backlink-index-not-configured`,`Backlink index is not configured.`,{handler:`test-rescan-backlinks`});return}await ee.rebuildFromDisk(),ee.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist cache after test-rescan-backlinks:`,e)}),ne?.(`backlinks`),ne?.(`graph`),successResponse(t,200,TestRescanBacklinksSuccessSchema,{},{handler:`test-rescan-backlinks`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`test-rescan-backlinks`,cause:e})}},{handler:`test-rescan-backlinks`,method:`POST`,skipBodyParse:!0}),Yr=withValidation(EmptyRequestSchema,async(e,t)=>{try{if(!j){errorResponse(t,503,`urn:ok:error:file-rescan-not-configured`,`Watcher rescan capability is not configured.`,{handler:`test-rescan-files`});return}j(),ne?.(`files`),successResponse(t,200,TestRescanFilesSuccessSchema,{},{handler:`test-rescan-files`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`test-rescan-files`,cause:e})}},{handler:`test-rescan-files`,method:`POST`,skipBodyParse:!0}),Xr=withValidation(SaveVersionRequestSchema,async(e,t,S)=>{try{let{rawAgentId:e,agentId:w,agentName:E,clientName:D}=zt(S),O=L?.current;if(!O){errorResponse(t,503,`urn:ok:error:shadow-not-configured`,`Shadow repo not configured.`,{handler:`save-version`});return}let k=/^[a-zA-Z0-9_-]+$/,j=[];if(Array.isArray(S.writers))try{j=S.writers.map(e=>{let t=e.id??`unknown`;if(!k.test(t))throw Error(`Invalid writer id: ${t}`);return{id:t,name:(e.name??`unknown`).replace(/[\r\n]/g,``),email:(e.email??`noreply@openknowledge.local`).replace(/[\r\n]/g,``)}})}catch(e){errorResponse(t,400,`urn:ok:error:invalid-request`,e instanceof Error?e.message:`Invalid writer id.`,{handler:`save-version`,cause:e});return}j.length===0&&(j=e===void 0?[SERVICE_WRITER]:[{id:w,name:D?`${E} (${D})`:E,email:`${w}@openknowledge.local`}]);let F=await saveVersion(O,Y??`.`,j);console.log(`[history] checkpoint ${F.checkpointRef}`);try{await gcRenameLog(O,getOrLoadRenameLogIndex(O.gitDir))}catch(e){console.warn(`[rename-log] post-saveVersion GC failed:`,e)}successResponse(t,200,SaveVersionSuccessSchema,{checkpointRef:F.checkpointRef},{handler:`save-version`})}catch(e){log$2.error({err:e},`[save-version] handler failed`),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`save-version`,cause:e})}},{handler:`save-version`,method:`POST`}),Zr=withValidation(EmptyRequestSchema,async(e,t)=>{let S=L?.current;if(!S){errorResponse(t,503,`urn:ok:error:shadow-not-configured`,`Shadow repo not configured.`,{handler:`history`});return}let w=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),E=w.searchParams.get(`docName`)??``,D=w.searchParams.get(`branch`)??q?.()??`main`;if(!E){errorResponse(t,400,`urn:ok:error:invalid-request`,`docName query parameter is required.`,{handler:`history`});return}if(D.includes(`..`)||!/^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/.test(D)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid branch name.`,{handler:`history`});return}let O=Y??`.`,k=safeDocPath(E,O);if(`error`in k){errorResponse(t,400,`urn:ok:error:invalid-request`,k.error,{handler:`history`});return}let j=Number(w.searchParams.get(`limit`)??`50`),F=Number(w.searchParams.get(`offset`)??`0`),B=Math.min(200,Number.isFinite(j)?j:50),H=Number.isFinite(F)?F:0,J=w.searchParams.get(`type`)??void 0,ee=w.searchParams.get(`author`)??void 0,te=w.searchParams.get(`excludeAuthor`)??void 0,ne=Date.now();try{let e=await getDocumentHistory(S,{docName:E,branch:D,limit:B,offset:H,type:J,author:ee,excludeAuthor:te},O),w=Date.now()-ne;console.log(`[timeline] query docName=${E} entries=${e.entries.length} duration=${w}ms`),successResponse(t,200,HistorySuccessSchema,{...e},{handler:`history`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read history.`,{handler:`history`,cause:e})}},{handler:`history`,method:`GET`,skipBodyParse:!0});async function Qr(e,t,S){if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`history-version`,extraHeaders:{Allow:`GET`}});return}let w=L?.current;if(!w){errorResponse(t,503,`urn:ok:error:shadow-not-configured`,`Shadow repo not configured.`,{handler:`history-version`});return}let E=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`docName`)??``,D=Y??`.`,O=safeDocPath(E,D);if(`error`in O){errorResponse(t,400,`urn:ok:error:invalid-request`,O.error,{handler:`history-version`});return}let k=shadowGit(w),j=q?.()??`main`;if(!/^[0-9a-f]{40}$/i.test(S)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid commit SHA.`,{handler:`history-version`});return}try{let e=await resolveDocPathAtCommit(w,E,S,j,getOrLoadRenameLogIndex(w.gitDir),e=>{let t=safeDocPath(e,D);return`error`in t?`${e}.md`:t.path},createAncestorShaSetCache());if(e===null){errorResponse(t,404,`urn:ok:error:doc-not-found`,`Document did not exist at this version.`,{handler:`history-version`});return}let O=await k.raw(`show`,`${S}:${e}`),[F=``,L=``]=(await k.raw(`log`,`-1`,`--format=%aI%x00%an`,S)).trim().split(`\0`);successResponse(t,200,HistoryVersionSuccessSchema,{sha:S,content:O,timestamp:F,author:L},{handler:`history-version`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`history-version`,cause:e})}}let ji=withValidation(EmptyRequestSchema,async(e,S)=>{let w=L?.current;if(!w){errorResponse(S,503,`urn:ok:error:shadow-not-configured`,`Shadow repo not configured.`,{handler:`diff`});return}let E=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),D=E.searchParams.get(`docName`)??``,O=E.searchParams.get(`from`)??``,k=E.searchParams.get(`to`)??``;if(!k||!/^[0-9a-f]{40}$/i.test(k)){errorResponse(S,400,`urn:ok:error:invalid-request`,`'to' must be a valid 40-char commit SHA.`,{handler:`diff`});return}let j=Y??`.`,F=safeDocPath(D,j);if(`error`in F){errorResponse(S,400,`urn:ok:error:invalid-request`,F.error,{handler:`diff`});return}let B=shadowGit(w),H=q?.()??`main`,J=getOrLoadRenameLogIndex(w.gitDir),ee=createAncestorShaSetCache(),te=e=>{let t=safeDocPath(e,j);return`error`in t?`${e}.md`:t.path};try{let e=await resolveDocPathAtCommit(w,D,k,H,J,te,ee);if(e===null){errorResponse(S,404,`urn:ok:error:doc-not-found`,`Document did not exist at the target version.`,{handler:`diff`});return}let E=await B.raw(`show`,`${k}:${e}`),j;if(O&&/^[0-9a-f]{40}$/i.test(O)){let e=await resolveDocPathAtCommit(w,D,O,H,J,te,ee);if(e===null){errorResponse(S,404,`urn:ok:error:doc-not-found`,`Document did not exist at the source version.`,{handler:`diff`});return}j=await B.raw(`show`,`${O}:${e}`)}else{let e=t.documents.get(D);if(!e){errorResponse(S,409,`urn:ok:error:doc-not-open`,`Document is not currently open — open it in the editor first.`,{handler:`diff`});return}j=e.getText(`source`).toString()}let F=stripFrontmatter(j).body,L=stripFrontmatter(E).body,q=diffLines(F,L),Y=[],ne=0,ae=0;for(let e of q){let t=e.value.replace(/\n$/,``).split(`
2173
2238
  `),S=e.added?`added`:e.removed?`removed`:`unchanged`;for(let e of t)Y.push({type:S,text:e});e.added&&(ne+=t.length),e.removed&&(ae+=t.length)}successResponse(S,200,DiffSuccessSchema,{lines:Y,additions:ne,deletions:ae},{handler:`diff`})}catch(e){errorResponse(S,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`diff`,cause:e})}},{handler:`diff`,method:`GET`,skipBodyParse:!0}),Hi=withValidation(RollbackRequestSchema,async(S,w,E)=>{let D=extractActorIdentity(E,fe);if(D.kind===`invalid-summary`){errorResponse(w,400,`urn:ok:error:invalid-request`,`Summary must be a string.`,{handler:`rollback`});return}let O=t.documents.get(E.docName);if(O&&isDocInConflict(O)){respondDocInConflict(w,new DocInConflictError({file:`${E.docName}${getDocExtension(E.docName)}`}),`rollback`);return}let k=L?.current;if(!k){errorResponse(w,503,`urn:ok:error:rollback-not-configured`,`Shadow repo not configured.`,{handler:`rollback`});return}let{docName:j,commitSha:F}=E,B=Y??`.`,H=safeDocPath(j,B);if(`error`in H){errorResponse(w,400,`urn:ok:error:invalid-request`,H.error,{handler:`rollback`});return}let J=shadowGit(k),ee=Date.now();try{let S=getOrLoadRenameLogIndex(k.gitDir),E=createAncestorShaSetCache(),O=await resolveDocPathAtCommit(k,j,F,q?.()??`main`,S,e=>{let t=safeDocPath(e,B);return`error`in t?`${e}.md`:t.path},E);if(O===null){errorResponse(w,404,`urn:ok:error:doc-not-found`,`Commit ${F.slice(0,7)} does not contain document ${j} at any known historical path.`,{handler:`rollback`});return}let L=await J.raw(`show`,`${F}:${O}`),H=new Date().toISOString();await safetyCheckpoint(k,B,{action:`rollback`,context:{docName:j,targetSha:F}});let Y=t.documents.get(j);if(!Y){errorResponse(w,409,`urn:ok:error:doc-not-open`,`Document is not currently open — open it in the editor first.`,{handler:`rollback`});return}let te=e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:j}:void 0;Y.transact(()=>{replaceRawBody(Y,L,te)},ROLLBACK_ORIGIN);let ne;switch(D.kind){case`agent`:{let e=F.slice(0,8),t=D.summary.kind===`value`,S=t?D.summary:normalizeSummary(`Restored to ${e}`),w=Vt(S);ne=t||!w.response?w.response:Ht(w.response),recordContributor(j,D.writerId,D.displayName,D.colorSeed,formatRollbackSubject(j,F),D.actor,w.stored),incrementAgentWriteCalls(),Ut(S,!t);break}case`principal`:{let e=Vt(D.summary);ne=e.response,recordContributor(j,D.writerId,D.displayName,D.colorSeed,formatRollbackSubject(j,F),D.actor,e.stored),Ut(D.summary,!1);break}case`anonymous`:log$2.debug({docName:j,commitSha:F.slice(0,8)},`[rollback] anonymous actor — no contributor recorded (no agentId in body and getPrincipal() returned null)`);break;default:throw Error(`Unhandled actor kind in handleRollback: ${String(D.kind)}`)}renameAttributionCounter().add(1,{kind:`rollback`,attribution_kind:D.kind}),it(j,`rollback`);let oe=Date.now()-ee;console.log(`[rollback] docName=${j} from=${F.slice(0,8)} duration=${oe}ms`),D.kind===`agent`&&ae?.setFocus(D.writerId,{agentName:D.displayName,currentDoc:j,writeKind:`rollback-apply`,ts:Date.now()}),successResponse(w,200,RollbackSuccessSchema,{restoredFrom:F,timestamp:H,...ne?{summary:ne}:{}},{handler:`rollback`})}catch(e){errorResponse(w,500,`urn:ok:error:internal-server-error`,`Failed to roll back.`,{handler:`rollback`,cause:e})}},{handler:`rollback`,method:`POST`}),Ui=withValidation(EmptyRequestSchema,async(e,t)=>{try{successResponse(t,200,MetricsReconciliationSuccessSchema,getMetrics(),{handler:`metrics-reconciliation`})}catch(e){log$2.error({err:e},`[metrics-reconciliation] handler failed`),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`metrics-reconciliation`,cause:e})}},{handler:`metrics-reconciliation`,method:`GET`,skipBodyParse:!0}),Gi=withValidation(EmptyRequestSchema,async(e,t)=>{try{successResponse(t,200,MetricsParseHealthSuccessSchema,getParseHealth(),{handler:`metrics-parse-health`})}catch(e){log$2.error({err:e},`[metrics-parse-health] handler failed`),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`metrics-parse-health`,cause:e})}},{handler:`metrics-parse-health`,method:`GET`,skipBodyParse:!0}),Ki=withValidation(EmptyRequestSchema,async(e,t)=>{try{let e=getActiveBranch(),S=J?.();successResponse(t,200,ServerInfoSuccessSchema,{serverInstanceId:E,currentBranch:e,...S===void 0?{}:{currentDiskAckSVs:S}},{handler:`server-info`,extraHeaders:{"Cache-Control":`no-store`}})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`server-info`,cause:e})}},{handler:`server-info`,method:`GET`,skipBodyParse:!0});async function Yi(e,t){if(!isLoopbackAddress(e.socket.remoteAddress)){errorResponse(t,403,`urn:ok:error:loopback-required`,`Loopback required.`,{handler:`principal`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){errorResponse(t,403,`urn:ok:error:host-not-allowed`,`Host header not allowed.`,{handler:`principal`});return}if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`principal`,extraHeaders:{Allow:`GET`}});return}let S=fe?.()??null;if(!S){errorResponse(t,404,`urn:ok:error:principal-not-available`,`Principal not available.`,{handler:`principal`});return}successResponse(t,200,PrincipalSuccessSchema,S,{handler:`principal`})}async function Xi(e,t){if(!isLoopbackAddress(e.socket.remoteAddress)){errorResponse(t,403,`urn:ok:error:loopback-required`,`Loopback required.`,{handler:`metrics-agent-presence`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){errorResponse(t,403,`urn:ok:error:host-not-allowed`,`Host header not allowed.`,{handler:`metrics-agent-presence`});return}if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`metrics-agent-presence`,extraHeaders:{Allow:`GET`}});return}try{let e=oe?.getPresenceMap()??{},S=Date.now(),w={};for(let[t,E]of Object.entries(e))S-E.ts<2e4&&(w[t]=E);successResponse(t,200,MetricsAgentPresenceSuccessSchema,{presence:w},{handler:`metrics-agent-presence`})}catch(e){log$2.error({err:e},`[metrics-agent-presence] handler failed`),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`metrics-agent-presence`,cause:e})}}async function Zi(e,t){if(!isLoopbackAddress(e.socket.remoteAddress)){errorResponse(t,403,`urn:ok:error:loopback-required`,`Loopback required.`,{handler:`workspace`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){errorResponse(t,403,`urn:ok:error:host-not-allowed`,`Host header not allowed.`,{handler:`workspace`});return}if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`workspace`,extraHeaders:{Allow:`GET`}});return}let S=resolve(w),E=S,D=!0;try{E=realpathSync(S)}catch(e){let w=e?.code;if(w===`ENOENT`)console.warn(`[workspace] contentDir does not exist; returning unresolved path`,{path:S}),D=!1;else{console.warn(`[workspace] realpath failed for contentDir`,{path:S,err:e}),errorResponse(t,500,`urn:ok:error:internal-server-error`,`Workspace realpath failed.`,{handler:`workspace`,detail:w??void 0,cause:e});return}}successResponse(t,200,WorkspaceSuccessSchema,{contentDir:E,pathSeparator:sep,symlinkResolved:D},{handler:`workspace`})}let ka=withValidation(EmptyRequestSchema,async(e,t)=>{try{let S=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`path`);if(!S||S.includes(`\0`)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Missing asset path.`,{handler:`asset`});return}let E=assetContentTypeForPath(S),D=extname(S).slice(1).toLowerCase();if(!E||!ASSET_EXTENSIONS.has(D)){errorResponse(t,415,`urn:ok:error:unsupported-asset-type`,`Unsupported asset type.`,{handler:`asset`});return}let O=realpathSync(w),k=resolve(O,S),j;try{j=realpathSync(k)}catch{errorResponse(t,404,`urn:ok:error:asset-not-found`,`Asset not found.`,{handler:`asset`});return}if(!isWithinContentDir(j,O)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid asset path.`,{handler:`asset`});return}let F;try{F=statSync(j)}catch{errorResponse(t,404,`urn:ok:error:asset-not-found`,`Asset not found.`,{handler:`asset`});return}if(!F.isFile()){errorResponse(t,404,`urn:ok:error:asset-not-found`,`Asset not found.`,{handler:`asset`});return}let L=toContentRelativePath(O,j);if(L!==S.split(`\\`).join(`/`)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid asset path.`,{handler:`asset`});return}if(me?.isPathIgnored(L)){errorResponse(t,404,`urn:ok:error:asset-not-found`,`Asset not found.`,{handler:`asset`});return}let B={"Content-Type":E,"Content-Length":String(F.size),"X-Content-Type-Options":`nosniff`,"Content-Disposition":INLINE_RENDERABLE_EXTENSIONS.has(D)?`inline`:`attachment`,"Cache-Control":`no-store`};D===`svg`&&(B[`Content-Security-Policy`]=`sandbox; default-src 'none'; style-src 'unsafe-inline'`),t.writeHead(200,B);try{await pipeline(createReadStream(j),t)}catch(e){log$2.error({event:`api.asset.pipeline-failed`,handler:`asset`,assetPath:S,err:e},`[asset] pipeline failed mid-stream`),t.destroyed||t.destroy(e instanceof Error?e:void 0)}}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`asset`,cause:e})}},{handler:`asset`,method:`GET`,skipBodyParse:!0}),_s=1048576,xs=withValidation(EmptyRequestSchema,async(e,t)=>{try{let S=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`path`);if(!S||S.includes(`\0`)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Missing asset path.`,{handler:`asset-text`});return}let E=realpathSync(w),D=resolve(E,S),O;try{O=realpathSync(D)}catch(e){errorResponse(t,404,`urn:ok:error:asset-not-found`,`Asset not found.`,{handler:`asset-text`,cause:e});return}if(!isWithinContentDir(O,E)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid asset path.`,{handler:`asset-text`});return}let k;try{k=statSync(O)}catch(e){errorResponse(t,404,`urn:ok:error:asset-not-found`,`Asset not found.`,{handler:`asset-text`,cause:e});return}if(!k.isFile()){errorResponse(t,404,`urn:ok:error:asset-not-found`,`Asset not found.`,{handler:`asset-text`});return}if(toContentRelativePath(E,O)!==S.split(`\\`).join(`/`)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid asset path.`,{handler:`asset-text`});return}if(k.size>_s){errorResponse(t,413,`urn:ok:error:payload-too-large`,`File exceeds the ${_s}-byte text-viewer cap.`,{handler:`asset-text`});return}let j=(await readFile$1(O)).toString(`utf-8`);t.writeHead(200,{"Content-Type":`text/plain; charset=utf-8`,"X-Content-Type-Options":`nosniff`,"Content-Disposition":`inline`,"Cache-Control":`no-store`}),t.end(j)}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`asset-text`,cause:e})}},{handler:`asset-text`,method:`GET`,skipBodyParse:!0}),Cs=1440*60*1e3,Ts=withValidation(EmptyRequestSchema,async(e,t)=>{try{if(!L?.current){successResponse(t,200,RescueListSuccessSchema,[],{handler:`rescue-list`});return}let e=Date.now(),S=[],w=resolve(L.current.gitDir,`rescue`);if(existsSync(w))try{let t=readdirSync(w).filter(e=>isSupportedDocFile(e));for(let E of t){let t=resolve(w,E),D=statSync(t);if(e-D.mtimeMs>Cs){try{unlinkSync(t)}catch(e){console.debug(`[rescue] cleanup failed (non-critical):`,e)}continue}S.push({docName:stripDocExtension(E),timestamp:D.mtime.toISOString(),size:D.size,source:`flat`})}}catch(e){log$2.error({err:e},`[rescue] Failed to list flat-file rescue buffers`)}try{let e=q?.()??`main`,t=await listRescueCheckpoints(L.current,e);for(let e of t)S.push({...e,source:`timeline`})}catch(e){log$2.error({err:e},`[rescue] Failed to list timeline-ref rescue checkpoints`)}successResponse(t,200,RescueListSuccessSchema,S,{handler:`rescue-list`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`rescue-list`,cause:e})}},{handler:`rescue-list`,method:`GET`,skipBodyParse:!0});async function Ds(e,t,S){if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`rescue-get`,extraHeaders:{Allow:`GET`}});return}if(!L?.current){errorResponse(t,503,`urn:ok:error:shadow-not-configured`,`Shadow repo not configured.`,{handler:`rescue-get`});return}let w=resolve(L.current.gitDir,`rescue`),E=resolve(w,`${S}${getDocExtension(S)}`);if(!E.startsWith(`${w}/`)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid document name.`,{handler:`rescue-get`});return}if(existsSync(E)){let e=statSync(E);if(Date.now()-e.mtimeMs>Cs)try{unlinkSync(E)}catch{}else{let e=readFileSync(E,`utf-8`);t.writeHead(200,{"Content-Type":`text/markdown`,"X-Content-Type-Options":`nosniff`}),t.end(e);return}}try{let e=q?.()??`main`,w=(await listRescueCheckpoints(L.current,e)).filter(e=>e.docName===S).sort((e,t)=>t.timestamp.localeCompare(e.timestamp))[0];if(w){let e=shadowGit(L.current),S=((await e.raw(`ls-tree`,`-r`,w.sha)).trim().split(`
2174
- `)[0]??``).split(/\s+/)[2];if(S){let w=await e.raw(`cat-file`,`-p`,S);t.writeHead(200,{"Content-Type":`text/markdown`,"X-Content-Type-Options":`nosniff`}),t.end(w);return}}}catch(e){console.warn(`[rescue] timeline-ref fallback failed:`,e)}errorResponse(t,404,`urn:ok:error:not-found`,`Not found.`,{handler:`rescue-get`})}let Os=withValidation(CreatePageRequestSchema,async(e,t,S)=>{try{let e=extractActorIdentity(S,fe);if(e.kind===`invalid-summary`){errorResponse(t,400,`urn:ok:error:invalid-request`,`Summary must be a string.`,{handler:`create-page`});return}let E=S.path;if(!isSupportedDocFile(E)){errorResponse(t,400,`urn:ok:error:invalid-request`,`path must end with .md or .mdx.`,{handler:`create-page`});return}if(E.includes(`..`)||E.startsWith(`/`)||E.includes(`\0`)||E.includes(`\\`)){errorResponse(t,400,`urn:ok:error:path-escape`,`Invalid path.`,{handler:`create-page`,detail:`path must not contain .. or start with /`});return}let O=resolve(w),k=resolve(O,E);if(!k.startsWith(`${O}/`)&&k!==O){errorResponse(t,400,`urn:ok:error:path-escape`,`path must not escape content directory.`,{handler:`create-page`});return}let j=stripDocExtension(E);if(isSystemDoc(j)||isConfigDoc(j)){errorResponse(t,400,`urn:ok:error:reserved-doc-name`,`'${j}' is a reserved document name.`,{handler:`create-page`});return}let F=typeof S.template==`string`?S.template.trim():``,L=``,B;if(F.length>0){if(!/^[A-Za-z0-9_-]+$/.test(F)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Template name must match [A-Za-z0-9_-]+.`,{handler:`create-page`});return}let S=E.includes(`/`)?E.slice(0,E.lastIndexOf(`/`)):``,w=resolveTemplatesAvailable(O,S),D=w.find(e=>e.name===F);if(!D){let e=w.length===0?`(none)`:w.map(e=>`"${e.name}" (${e.scope})`).join(`, `);errorResponse(t,400,`urn:ok:error:invalid-request`,`Template "${F}" does not resolve for folder "${S||`(root)`}". Available: ${e}`,{handler:`create-page`});return}let k=resolve(O,D.path),j;try{j=readFileSync(k,`utf-8`)}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read template at ${D.path}.`,{handler:`create-page`,cause:e});return}let{body:H}=stripFrontmatter(j),q=e.kind===`agent`||e.kind===`principal`?e.displayName??``:``;L=applySubstitution(H,{date:todayIsoUtc(),user:q}),B=D.scope}mkdirSync(dirname(k),{recursive:!0});try{writeFileSync(k,L,{encoding:`utf-8`,flag:`wx`})}catch(e){if(isAlreadyExistsError(e)){errorResponse(t,409,`urn:ok:error:doc-already-exists`,`File already exists.`,{handler:`create-page`,cause:e});return}throw e}let H=stripDocExtension(E);switch(ye?.delete(H),me&&me.incrementMdDir(dirname(H)),registerWrite(k,contentHash(L)),e.kind){case`agent`:case`principal`:recordContributor(H,e.writerId,e.displayName,e.colorSeed,void 0,e.actor);break;case`anonymous`:break;default:throw Error(`Unhandled actor kind in handleCreatePage: ${String(e.kind)}`)}let q=typeof D==`function`?D():null;q instanceof Map&&updateFileIndex({kind:`create`,path:k,docName:H,content:L},q),ee&&(ee.updateDocumentFromMarkdown(H,L),ee.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist create-page cache for ${H}:`,e)}),ne?.(`backlinks`),ne?.(`graph`)),ne?.(`files`),B!==void 0&&console.warn(JSON.stringify({event:`template-instantiate`,templateName:F,templateScope:B,docName:H})),successResponse(t,200,CreatePageSuccessSchema,{docName:H},{handler:`create-page`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to create page.`,{handler:`create-page`,cause:e})}},{handler:`create-page`,method:`POST`}),ks=withValidation(CreateFolderRequestSchema,async(e,t,S)=>{try{if(extractActorIdentity(S,fe).kind===`invalid-summary`){errorResponse(t,400,`urn:ok:error:invalid-request`,`Summary must be a string.`,{handler:`create-folder`});return}let e=S.path;if(!isValidRelativeContentPath(e)){errorResponse(t,400,`urn:ok:error:invalid-request`,`path must be a relative content path.`,{handler:`create-folder`});return}if(e===`.ok`||e.startsWith(`.ok/`)){errorResponse(t,400,`urn:ok:error:reserved-doc-name`,`'.ok' is a reserved directory.`,{handler:`create-folder`});return}if(me?.isDirExcluded(e)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Destination folder is excluded by the workspace content config.`,{handler:`create-folder`});return}let E=resolveContentEntryPath(w,`folder`,e);if(existsSync(E)){errorResponse(t,409,`urn:ok:error:doc-already-exists`,`Folder already exists.`,{handler:`create-folder`});return}tracedMkdirSync(E,{recursive:!0}),Me(e),ne?.(`files`),successResponse(t,200,CreateFolderSuccessSchema,{path:e},{handler:`create-folder`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to create folder.`,{handler:`create-folder`,cause:e})}},{handler:`create-folder`,method:`POST`}),As=withValidation(DuplicatePathRequestSchema,async(e,S,E)=>{try{let e=extractActorIdentity(E,fe);if(e.kind===`invalid-summary`){errorResponse(S,400,`urn:ok:error:invalid-request`,`Summary must be a string.`,{handler:`duplicate-path`});return}let{kind:O}=E,k=O===`file`?stripDocExtension(E.path):E.path;if(!isValidRelativeContentPath(k)){errorResponse(S,400,`urn:ok:error:invalid-request`,`path must be a relative content path.`,{handler:`duplicate-path`});return}if(k===`.ok`||k.startsWith(`.ok/`)||O===`file`&&(isSystemDoc(k)||isConfigDoc(k))||O===`folder`&&isReservedSyntheticFolderPath(k)){errorResponse(S,400,`urn:ok:error:reserved-doc-name`,`Reserved paths cannot be duplicated.`,{handler:`duplicate-path`});return}O===`file`&&probeAndRegisterSourceFileExtension(w,k);let j=resolveContentEntryPath(w,O,k);if(!existsSync(j)){if(O===`file`){let e=resolveContentEntryPath(w,`folder`,k);if(existsSync(e)&&statSync(e).isDirectory()){errorResponse(S,400,`urn:ok:error:invalid-request`,`Target path is not a ${O}.`,{handler:`duplicate-path`});return}}errorResponse(S,404,`urn:ok:error:doc-not-found`,`${O} does not exist.`,{handler:`duplicate-path`});return}let F=statSync(j);if(O===`file`&&!F.isFile()||O===`folder`&&!F.isDirectory()){errorResponse(S,400,`urn:ok:error:invalid-request`,`Target path is not a ${O}.`,{handler:`duplicate-path`});return}let L=O===`file`?[k]:listAffectedDocNames(D(),O,k),B=ce?.(),H=new Set(B?B.getConflicts().map(e=>e.file):[]);for(let e of L){let w=stripDocExtension(e),E=t.documents.get(w),D=`${w}${getDocExtension(w)}`,O=E!==void 0&&isDocInConflict(E),k=H.has(D);if(O||k){respondDocInConflict(S,new DocInConflictError({file:D}),`duplicate-path`);return}}let q=typeof D==`function`?D():null,J,Y=[];if(O===`file`){let e=extname(j);if(J=nextAvailableDuplicateDocName(w,k).docName,isSystemDoc(J)||isConfigDoc(J)||me?.isExcluded(`${J}${e}`)){errorResponse(S,400,`urn:ok:error:invalid-request`,`Duplicated document destination is excluded by the project content config.`,{handler:`duplicate-path`});return}let t=resolveDuplicateDocPath(w,J,e),E=readFileSync(j,`utf-8`),D=dirname(t),O=existsSync(D);try{tracedMkdirSync(D,{recursive:!0}),tracedWriteFileSync(t,E,{encoding:`utf-8`,flag:`wx`})}catch(e){if(isAlreadyExistsError(e)){errorResponse(S,409,`urn:ok:error:doc-already-exists`,`A file at the duplicate destination already exists.`,{handler:`duplicate-path`,cause:e});return}if(!O)try{tracedRmdirSync(D)}catch(e){let t=e.code;t!==`ENOENT`&&t!==`ENOTEMPTY`&&console.warn(`[duplicate-path] failed to clean duplicate parent directory:`,{destinationDir:D,err:e})}throw e}let F=!1;try{registerDocExtension(J,e),ye?.delete(J),me&&(me.incrementMdDir(dirname(J)),F=!0),registerWrite(t,contentHash(E)),q instanceof Map&&updateFileIndex({kind:`create`,path:t,docName:J,content:E},q),ee?.updateDocumentFromMarkdown(J,E),Y=[J]}catch(e){try{tracedRmSync(t,{force:!0})}catch(e){console.warn(`[duplicate-path] failed to clean partial file duplicate:`,{destinationPath:t,err:e})}throw forgetDocExtension(J),me&&F&&me.decrementMdDir(dirname(J)),q instanceof Map&&updateFileIndex({kind:`delete`,path:t,docName:J},q),e}}else{if(J=nextAvailableDuplicateFolderPath(w,k).folderPath,me?.isDirExcluded(J)){errorResponse(S,400,`urn:ok:error:invalid-request`,`Duplicated folder destination is excluded by the project content config.`,{handler:`duplicate-path`});return}let e=resolveContentEntryPath(w,`folder`,J);try{tracedCpSync(j,e,{recursive:!0,errorOnExist:!0,force:!1})}catch(e){if(isAlreadyExistsError(e)){errorResponse(S,409,`urn:ok:error:doc-already-exists`,`A folder at the duplicate destination already exists.`,{handler:`duplicate-path`,cause:e});return}throw e}try{for(let e of collectFolderPaths(w,J))Me(e);let e=collectMarkdownCopies(w,J);Y=e.map(e=>e.docName);for(let t of e){let e=extname(t.fullPath);registerDocExtension(t.docName,e),ye?.delete(t.docName),me&&me.incrementMdDir(dirname(t.docName)),registerWrite(t.fullPath,contentHash(t.content)),q instanceof Map&&updateFileIndex({kind:`create`,path:t.fullPath,docName:t.docName,content:t.content},q),ee?.updateDocumentFromMarkdown(t.docName,t.content)}}catch(t){try{tracedRmSync(e,{recursive:!0,force:!0})}catch(t){console.warn(`[duplicate-path] failed to clean partial folder duplicate:`,{destinationPath:e,err:t})}throw t}}switch(e.kind){case`agent`:case`principal`:for(let t of Y)recordContributor(t,e.writerId,e.displayName,e.colorSeed,void 0,e.actor);break;case`anonymous`:break;default:throw Error(`Unhandled actor kind in handleDuplicatePath: ${String(e.kind)}`)}ee&&Y.length>0&&(ee.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist duplicate-path cache:`,e)}),ne?.(`backlinks`),ne?.(`graph`)),ne?.(`files`),successResponse(S,200,DuplicatePathSuccessSchema,{kind:O,path:J,duplicatedDocNames:Y},{handler:`duplicate-path`})}catch(e){if(e instanceof DuplicateNameExhaustedError){errorResponse(S,409,`urn:ok:error:doc-already-exists`,`All available duplicate name slots are occupied for this path.`,{handler:`duplicate-path`,cause:e});return}let t=classifyDuplicatePathFilesystemProblem(e);if(t){errorResponse(S,t.status,t.type,t.title,{handler:`duplicate-path`,cause:e});return}errorResponse(S,500,`urn:ok:error:internal-server-error`,`Failed to duplicate path.`,{handler:`duplicate-path`,cause:e})}},{handler:`duplicate-path`,method:`POST`}),Ns=withValidation(EmptyRequestSchema,async(e,t)=>{try{let S=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!S||S.length===0){errorResponse(t,400,`urn:ok:error:invalid-request`,`Missing docName query parameter.`,{handler:`page-headings`});return}if(!isSafeDocName(S)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid docName.`,{handler:`page-headings`});return}let w=Be(S);if(!w){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid docName.`,{handler:`page-headings`});return}if(!existsSync(w)){errorResponse(t,404,`urn:ok:error:doc-not-found`,`Page not found.`,{handler:`page-headings`});return}successResponse(t,200,PageHeadingsSuccessSchema,{docName:S,headings:extractHeadings(readFileSync(w,`utf-8`))},{handler:`page-headings`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read headings.`,{handler:`page-headings`,cause:e})}},{handler:`page-headings`,method:`GET`,skipBodyParse:!0}),Ps=withValidation(RenamePathRequestSchema,async(e,S,E)=>{try{let e=extractActorIdentity(E,fe);if(e.kind===`invalid-summary`){errorResponse(S,400,`urn:ok:error:invalid-request`,`Summary must be a string.`,{handler:`rename-path`});return}let{kind:O,fromPath:k,toPath:j}=E;if(!isValidRelativeContentPath(k)||!isValidRelativeContentPath(j)){errorResponse(S,400,`urn:ok:error:invalid-request`,`Paths must be relative content paths.`,{handler:`rename-path`});return}if(O===`file`&&(isSystemDoc(k)||isSystemDoc(j)||isConfigDoc(k)||isConfigDoc(j))){errorResponse(S,400,`urn:ok:error:reserved-doc-name`,`Reserved document names cannot be renamed.`,{handler:`rename-path`});return}if(k===`.ok`||k.startsWith(`.ok/`)||j===`.ok`||j.startsWith(`.ok/`)){errorResponse(S,400,`urn:ok:error:reserved-doc-name`,`.ok is a reserved directory.`,{handler:`rename-path`});return}if(k===j){successResponse(S,200,RenamePathSuccessSchema,{renamed:[],rewrittenDocs:[]},{handler:`rename-path`});return}let F=O===`file`?[stripDocExtension(k)]:listAffectedDocNames(D(),O,k),L=ce?.(),B=new Set(L?L.getConflicts().map(e=>e.file):[]);for(let e of F){let w=stripDocExtension(e),E=t.documents.get(w),D=O===`file`?k:`${w}${getDocExtension(e)}`,j=E!==void 0&&isDocInConflict(E),F=B.has(D);if(j||F){respondDocInConflict(S,new DocInConflictError({file:D}),`rename-path`);return}}if(k.toLowerCase()===j.toLowerCase()){errorResponse(S,400,`urn:ok:error:invalid-request`,`Case-only renames are not supported.`,{handler:`rename-path`});return}if(O===`file`&&probeAndRegisterSourceFileExtension(w,k),me&&(O===`file`?me.isExcluded(isSupportedDocFile(j)?j:`${j}${getDocExtension(k)}`):me.isDirExcluded(j))){errorResponse(S,400,`urn:ok:error:invalid-request`,`Destination ${O===`file`?`document`:`folder`} is excluded by the project content config.`,{handler:`rename-path`});return}let q=e.kind===`agent`||e.kind===`principal`?{writerId:e.writerId,displayName:e.displayName,colorSeed:e.colorSeed,actorMetadata:e.actor}:void 0,J;try{J=await Rt(k,j,O,q?{actor:q}:{})}catch(e){if(e instanceof ManagedRenameCollisionError){errorResponse(S,409,`urn:ok:error:doc-already-exists`,Tt(e.message),{handler:`rename-path`,extensions:{colliding:e.colliding},cause:e});return}throw e}if(J.renamed.length===0){successResponse(S,200,RenamePathSuccessSchema,{renamed:[],rewrittenDocs:[]},{handler:`rename-path`});return}let Y;switch(e.kind){case`agent`:{let t=e.summary.kind===`value`,S=t?e.summary:normalizeSummary(`Renamed ${k} → ${j}`),w=Vt(S);Y=t||!w.response?w.response:Ht(w.response);for(let t=0;t<J.renamed.length;t++){let{fromDocName:S,toDocName:E}=J.renamed[t];recordContributor(E,e.writerId,e.displayName,e.colorSeed,formatRenameSubject(S,E),e.actor,t===0?w.stored:void 0)}incrementAgentWriteCalls(),Ut(S,!t);for(let{toDocName:e}of J.renamed)it(e,`rename-path`);break}case`principal`:{let t=Vt(e.summary);Y=t.response;for(let S=0;S<J.renamed.length;S++){let{fromDocName:w,toDocName:E}=J.renamed[S];recordContributor(E,e.writerId,e.displayName,e.colorSeed,formatRenameSubject(w,E),e.actor,S===0?t.stored:void 0)}Ut(e.summary,!1);for(let{toDocName:e}of J.renamed)it(e,`rename-path`);break}case`anonymous`:log$2.debug({kind:O,fromPath:k,toPath:j,affectedDocs:J.renamed.length},`[rename-path] anonymous actor — no contributor recorded (no agentId in body and getPrincipal() returned null)`);break;default:throw Error(`Unhandled actor kind in handleRenamePath: ${String(e.kind)}`)}if(renameAttributionCounter().add(1,{kind:`rename-${O}`,attribution_kind:e.kind}),H)try{await H()}catch(e){console.warn(`[rename-path] flushContributors failed (commitSha backfill may be deferred):`,e)}successResponse(S,200,RenamePathSuccessSchema,{renamed:J.renamed,rewrittenDocs:J.rewrittenDocs,...Y?{summary:Y}:{}},{handler:`rename-path`})}catch(e){let{status:t,type:w,error:E}=Et(e);errorResponse(S,t,w,E,{handler:`rename-path`,cause:e})}},{handler:`rename-path`,method:`POST`}),Is=withValidation(DeletePathRequestSchema,async(e,S,E)=>{try{zt(E);let{kind:e,path:O}=E;if(!isValidRelativeContentPath(O)){errorResponse(S,400,`urn:ok:error:invalid-request`,`path must be a relative content path.`,{handler:`delete-path`});return}let k=resolveContentEntryPath(w,e,O);if(!existsSync(k)){errorResponse(S,404,`urn:ok:error:doc-not-found`,`${e} does not exist.`,{handler:`delete-path`});return}let j=statSync(k);if(e===`file`&&!j.isFile()||e===`folder`&&!j.isDirectory()){errorResponse(S,400,`urn:ok:error:invalid-request`,`Target path is not a ${e}.`,{handler:`delete-path`});return}let F=e===`file`?[O]:listAffectedDocNames(D(),e,O),L=ce?.(),B=new Set(L?L.getConflicts().map(e=>e.file):[]);for(let w of F){let E=stripDocExtension(w),D=t.documents.get(E),O=e===`file`?w:`${E}${getDocExtension(E)}`,k=D!==void 0&&isDocInConflict(D),j=B.has(O);if(k||j){respondDocInConflict(S,new DocInConflictError({file:O}),`delete-path`);return}}if(await Dt(F),ye)for(let e of F)isSystemDoc(e)||isConfigDoc(e)||(ye.setDeleted(e),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:e,kind:`deleted`,source:`handleDeletePath`})));e===`file`?unlinkSync(k):(tracedRmSync(k,{recursive:!0,force:!1}),Pe(O));let H=D();if(H instanceof Map)for(let e of F)updateFileIndex({kind:`delete`,path:resolve(w,`${e}${getDocExtension(e)}`),docName:e},H);successResponse(S,200,DeletePathSuccessSchema,{deletedDocNames:F},{handler:`delete-path`})}catch(e){errorResponse(S,500,`urn:ok:error:internal-server-error`,`Failed to delete path.`,{handler:`delete-path`,cause:e})}},{handler:`delete-path`,method:`POST`}),Rs=withValidation(TrashCleanupRequestSchema,async(e,t,S)=>withSpan(`ok.fs.trash_cleanup`,{attributes:{"ok.cleanup.kind":S.kind,"ok.cleanup.path":normalizeFsPath(S.path),"ok.cleanup.path.role":classifyFsPath(S.path)}},async()=>{try{if(extractActorIdentity(S,fe).kind===`invalid-summary`){errorResponse(t,400,`urn:ok:error:invalid-request`,`Summary must be a string.`,{handler:`trash-cleanup`});return}let{kind:e,path:E}=S;if(!isValidRelativeContentPath(E)){errorResponse(t,400,`urn:ok:error:invalid-request`,`path must be a relative content path.`,{handler:`trash-cleanup`});return}let O=e===`folder`&&isReservedSyntheticFolderPath(E);if(e===`file`&&(isSystemDoc(E)||isConfigDoc(E))||O){errorResponse(t,400,`urn:ok:error:reserved-doc-name`,`'${E}' is a reserved document name.`,{handler:`trash-cleanup`});return}let k=D(),j=e===`file`?k.has(E)?[E]:[]:listAffectedDocNames(k,e,E);if(j.length===0){successResponse(t,200,TrashCleanupSuccessSchema,{deletedDocNames:[]},{handler:`trash-cleanup`});return}if(await Dt(j),ye)for(let e of j)isSystemDoc(e)||isConfigDoc(e)||(ye.setDeleted(e),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:e,kind:`deleted`,source:`handleTrashCleanup`})));let F=D();if(F instanceof Map)for(let e of j)updateFileIndex({kind:`delete`,path:resolve(w,`${e}${getDocExtension(e)}`),docName:e},F);e===`folder`&&Pe(E),ne?.(`files`),successResponse(t,200,TrashCleanupSuccessSchema,{deletedDocNames:j},{handler:`trash-cleanup`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to clean up after trash.`,{handler:`trash-cleanup`,cause:e})}}),{handler:`trash-cleanup`,method:`POST`}),$s=withValidation(EmptyRequestSchema,async(e,t)=>{try{let e=D(),S=[];for(let[t,E]of e){let e=t,D,O=getDocExtension(t);try{let S=readFileSync(resolve(w,`${t}${O}`),`utf-8`);e=extractPageTitle(S,t),D=extractPageIcon(S)}catch(e){console.warn(`[pages] Failed to read title for ${t}:`,e)}S.push({docName:t,title:e,docExt:O,size:E.size,modified:E.modified,icon:D})}S.sort((e,t)=>e.docName.localeCompare(t.docName)),successResponse(t,200,PagesSuccessSchema,{pages:S},{handler:`pages`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to list pages.`,{handler:`pages`,cause:e})}},{handler:`pages`,method:`GET`,skipBodyParse:!0}),ec=withValidation(EmptyRequestSchema,async(e,S)=>{try{let w=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!w){errorResponse(S,400,`urn:ok:error:invalid-request`,`Missing docName parameter.`,{handler:`suggest-links`});return}if(!isSafeDocName(w)){errorResponse(S,400,`urn:ok:error:invalid-request`,`Invalid docName.`,{handler:`suggest-links`});return}if(isSystemDoc(w)||isConfigDoc(w)){errorResponse(S,400,`urn:ok:error:reserved-doc-name`,`'${w}' is a reserved document name.`,{handler:`suggest-links`});return}successResponse(S,200,SuggestLinksSuccessSchema,await suggestLinks({hocuspocus:t,fileIndex:D(),docName:w}),{handler:`suggest-links`})}catch(e){if(e instanceof SuggestLinksTargetNotFoundError){errorResponse(S,404,`urn:ok:error:doc-not-found`,`Page not found.`,{handler:`suggest-links`,cause:e});return}errorResponse(S,500,`urn:ok:error:internal-server-error`,`Failed to suggest links.`,{handler:`suggest-links`,cause:e})}},{handler:`suggest-links`,method:`GET`,skipBodyParse:!0});async function tc(e,t){if(e.method!==`POST`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`upload-asset`,extraHeaders:{Allow:`POST`}});return}let S;try{S=await readUploadBody(e,de??w)}catch(e){if(e instanceof UploadWriteError){errorResponse(t,uploadStatusFor(e.reason),e.reason,uploadTitleFor(e.reason),{handler:`upload-asset`,cause:e});return}errorResponse(t,400,`urn:ok:error:malformed-upload`,`Failed to parse upload.`,{handler:`upload-asset`,cause:e});return}let{filename:E,tempPath:D,sha:O,byteLength:k,parentDocName:j}=S,F=()=>{if(existsSync(D))try{unlinkSync(D)}catch{}},L=validateBody(UploadRequestSchema,{parentDocName:j},t,{handler:`upload-asset`});if(!L.ok){F();return}let{parentDocName:B}=L.value,{agentId:H,agentName:q}=zt(Object.fromEntries(new URL(e.url??``,`http://localhost`).searchParams.entries()));if(k===0){F(),errorResponse(t,400,`urn:ok:error:no-file-received`,`No file received.`,{handler:`upload-asset`});return}if(B.includes(`\0`)||B.includes(`..`)||B.startsWith(`/`)){F(),errorResponse(t,400,`urn:ok:error:path-escape`,`Path escape detected.`,{handler:`upload-asset`});return}let J=resolve(w),Y=resolveUploadDestDir(B,`./`,J);if(!isWithinContentDir(Y,J)){F(),errorResponse(t,400,`urn:ok:error:path-escape`,`Path escape detected.`,{handler:`upload-asset`});return}try{assertNoSymlinkEscape(Y,J)}catch(e){if(F(),(e instanceof Error?e.message:String(e)).startsWith(`symlink-escape:`)){errorResponse(t,400,`urn:ok:error:path-escape`,`Path escape detected.`,{handler:`upload-asset`});return}log$2.error({err:e,destDir:Y},`[upload] failed to validate destination directory`),errorResponse(t,500,`urn:ok:error:storage-error`,`Storage error.`,{handler:`upload-asset`,cause:e});return}try{mkdirSync(Y,{recursive:!0})}catch(e){if(!isAlreadyExistsError(e)){F();let S=classifyUploadErrno(e);errorResponse(t,uploadStatusFor(S),S,uploadTitleFor(S),{handler:`upload-asset`,cause:e,detail:`failed to create attachment directory`});return}}try{let e=realpathSync(Y),S;try{S=realpathSync(J)}catch{S=J}if(!isWithinContentDir(e,S)){F(),errorResponse(t,400,`urn:ok:error:path-escape`,`Path escape detected.`,{handler:`upload-asset`});return}}catch(e){if(e.code!==`ENOENT`){F(),errorResponse(t,400,`urn:ok:error:path-escape`,`Path escape detected.`,{handler:`upload-asset`,cause:e});return}}let ee=await fileTypeFromFile(D),te=ee?.mime,ne=ee?.ext;if(!te){let e=readTempFileHead(D,256).toString(`utf-8`).replace(/^/,``).trimStart();(e.startsWith(`<svg`)||e.startsWith(`<?xml`)&&e.includes(`<svg`))&&(te=`image/svg+xml`,ne=`svg`)}{let S=await findDuplicateAsset(Y,O,k);if(S){F();let E=relative(w,resolve(Y,S));log$2.info({event:`upload`,endpoint:e.url??`/api/upload`,agentId:H,agentName:q,dedup:!0,mime:te??null,size:k,destPath:E,httpStatus:200},`[upload] dedup hit`),successResponse(t,200,UploadAssetSuccessSchema,{src:S,path:E,deduped:!0},{handler:`upload-asset`});return}}let ae;if(!E||E===`upload`||GENERIC_PASTE_NAMES.test(E)){let e=new Date().toISOString().replace(/[-:T]/g,``).slice(0,14).replace(/(\d{8})(\d{6})/,`$1-$2`),t=E?extname(E).slice(1):``,S=ne??t??``;ae=S===``?`pasted-${e}`:`pasted-${e}.${S}`}else ae=sanitizeFilename(E);try{let S=linkTempToFinalWithCollisionRetry(D,Y,ae),E=relative(w,resolve(Y,S));log$2.info({event:`upload`,endpoint:e.url??`/api/upload`,agentId:H,agentName:q,dedup:!1,mime:te??null,size:k,destPath:E,httpStatus:200},`[upload] write ok`),successResponse(t,200,UploadAssetSuccessSchema,{src:S,path:E,deduped:!1},{handler:`upload-asset`})}catch(S){let w=S instanceof UploadWriteError?S.reason:`urn:ok:error:storage-error`;log$2.error({event:`upload`,endpoint:e.url??`/api/upload`,agentId:H,agentName:q,filename:ae,size:k,reason:w,httpStatus:uploadStatusFor(w),err:S},`[upload] write failed`),errorResponse(t,uploadStatusFor(w),w,uploadTitleFor(w),{handler:`upload-asset`,cause:S})}}let nc=`/api/local-op/clone`,rc=`/api/local-op/open`,ic=600*1e3,ac=45e3,oc=`local-op-clone`,sc=withValidation(LocalOpCloneRequestSchema,cc,{handler:oc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:oc})});async function cc(e,t,S){let{url:w,dir:E,branch:D}=S;if(!isAllowedGitUrl(w)){errorResponse(t,400,`urn:ok:error:url-not-allowed`,`URL protocol is not allowed for clone.`,{handler:oc,cause:Error(`url=${w}`)});return}if(!isSafeLocalPath(E)){errorResponse(t,400,`urn:ok:error:dir-outside-home`,`Clone destination must be within the user home directory.`,{handler:oc,cause:Error(`dir=${E}`)});return}if(!we.tryAcquire(nc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`A clone operation is already in progress.`,{handler:oc,extraHeaders:{"Retry-After":`30`}});return}t.writeHead(200,{"Content-Type":`application/x-ndjson`,"Transfer-Encoding":`chunked`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-cache`});let O=createStreamingErrorWriter(t,oc),k=null,j=runCloneSubprocess({cliArgs:ue,url:w,dir:E,branch:D,timeoutMs:ic,onEvent:e=>{if(e.type===`complete`){k=e.dir;return}if(e.type===`error`){e.message&&log$2.warn({stderr:e.message,url:w,dir:E},`[local-op/clone] clone failed`),O(500,`urn:ok:error:clone-failed`,`Clone subprocess reported an error.`,{cause:e.message?Error(e.message):void 0});return}if(!t.writableEnded&&!t.destroyed)try{t.write(`${JSON.stringify(e)}\n`)}catch{}}});(async()=>{try{if(await j.done,k&&!t.writableEnded&&!t.destroyed){let e=await lc(k);!t.writableEnded&&!t.destroyed&&(`port`in e?t.write(`${JSON.stringify({type:`complete`,port:e.port,dir:k})}\n`):O(500,`urn:ok:error:server-start-failed`,`Cloned successfully but failed to start the project server.`,{cause:Error(e.error)}))}}catch(e){!t.writableEnded&&!t.destroyed?O(500,`urn:ok:error:internal-server-error`,`Unexpected error during clone post-processing.`,{cause:e}):log$2.error({err:e,handler:oc},`clone IIFE rejected after stream ended`)}finally{t.writableEnded||t.end(),we.release(nc)}})(),t.on(`close`,()=>{j.cancel()})}async function lc(e){let t=resolve(expandTilde(e)),S=getLocalDir(t),w=readUiLock(S);if(w&&w.port>0)return{port:w.port};let E=readServerLock(S),[D,...O]=ue,k=E&&E.port>0?`ui`:`start`,j=spawn(D,[...O,k],{cwd:t,detached:!0,stdio:[`ignore`,`ignore`,`pipe`],env:{...process.env,OK_LOCK_KIND:`interactive`}}),F=[];j.stderr?.on(`data`,e=>{F.push(e),log$2.warn({cwd:t,cliCmd:k,msg:e.toString(`utf-8`).trim()},`[local-op/open] child stderr`)});let L=null;j.on(`exit`,e=>{L=e??-1}),j.unref();let B=Date.now()+45e3;for(;Date.now()<B;){await setTimeout$1(500);let e=readUiLock(S);if(e&&e.port>0)return{port:e.port};if(L!==null){let e=Buffer.concat(F).toString(`utf-8`).trim();return{error:`\`ok ${k}\` exited (code ${L})${e?` — ${e}`:``}`}}}let H=Buffer.concat(F).toString(`utf-8`).trim();return{error:`UI did not start within the expected time${H?` — ${H}`:``}`}}let uc=`local-op-open`,dc=withValidation(LocalOpOpenRequestSchema,async(e,t,S)=>{let{dir:w}=S;if(!isSafeLocalPath(w)){errorResponse(t,400,`urn:ok:error:dir-outside-home`,`dir must be within the user home directory.`,{handler:uc,cause:Error(`dir=${w}`)});return}if(!we.tryAcquire(rc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`A server-open operation is already in progress.`,{handler:uc,extraHeaders:{"Retry-After":`5`}});return}try{let e=await lc(w);`port`in e?successResponse(t,200,LocalOpOpenSuccessSchema,{port:e.port},{handler:uc}):errorResponse(t,504,`urn:ok:error:server-open-failed`,`Failed to open project server.`,{handler:uc,cause:Error(e.error)})}finally{we.release(rc)}},{handler:uc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:uc})}),fc=`/api/local-op/auth/login`,pc=`/api/local-op/auth/status`,mc=`/api/local-op/auth/repos`,hc=`/api/local-op/auth/signout`,gc=`/api/local-op/auth/pat`,_c=null,vc=`local-op-auth-login`,yc=withValidation(LocalOpAuthHostRequestSchema,bc,{handler:vc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:vc})});async function bc(e,t,S){let w=S.host??`github.com`;if(!we.tryAcquire(fc)){let e=_c;if(!e){console.error(JSON.stringify({event:`ok-local-op:auth-login-slot-no-controller`,channel:`auth`,transport:`http`})),errorResponse(t,429,`urn:ok:error:concurrent-operation`,`An auth login operation is already in progress.`,{handler:vc,extraHeaders:{"Retry-After":`5`}});return}e.cancel(),_c=null,console.warn(JSON.stringify({event:`ok-local-op:idempotent-start-replaced-stale-slot`,channel:`auth`,transport:`http`}))}t.writeHead(200,{"Content-Type":`application/x-ndjson`,"Transfer-Encoding":`chunked`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-cache`});let E=createStreamingErrorWriter(t,vc),D=runDeviceFlowSubprocess({cliArgs:ue,host:w,timeoutMs:ic,onEvent:e=>{if(e.type===`error`){E(500,`urn:ok:error:auth-failed`,`Auth subprocess reported an error.`,{cause:e.message?Error(e.message):void 0});return}if(!t.writableEnded&&!t.destroyed)try{t.write(`${JSON.stringify(e)}\n`)}catch{}}});_c=D;let O=()=>{D.cancel(),_c===D&&(_c=null,we.release(fc))};t.on(`close`,O),D.done.finally(()=>{if(t.off(`close`,O),!t.writableEnded&&!t.destroyed)try{t.end()}catch{}_c===D&&(_c=null,we.release(fc))})}let xc=`local-op-auth-status`,Sc=withValidation(LocalOpAuthHostRequestSchema,async(e,t,S)=>{let w=S.host??`github.com`;if(!we.tryAcquire(pc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`An auth status operation is already in progress.`,{handler:xc,extraHeaders:{"Retry-After":`5`}});return}try{let[e,...S]=ue,E=[...S,`auth`,`status`,`--json`,`--host`,w],D=(await new Promise((t,S)=>{let w=spawn(e,E,{stdio:[`ignore`,`pipe`,`pipe`],env:{...process.env}}),D=!1,O=setTimeout(()=>{D=!0,w.kill(`SIGTERM`)},3e4),k=[];w.stdout.on(`data`,e=>k.push(e)),w.on(`close`,()=>{if(clearTimeout(O),D){S(Error(`auth status subprocess timed out after 30s`));return}t(Buffer.concat(k).toString(`utf-8`))}),w.on(`error`,e=>{clearTimeout(O),S(e)})})).split(`
2239
+ `)[0]??``).split(/\s+/)[2];if(S){let w=await e.raw(`cat-file`,`-p`,S);t.writeHead(200,{"Content-Type":`text/markdown`,"X-Content-Type-Options":`nosniff`}),t.end(w);return}}}catch(e){console.warn(`[rescue] timeline-ref fallback failed:`,e)}errorResponse(t,404,`urn:ok:error:not-found`,`Not found.`,{handler:`rescue-get`})}let Os=withValidation(CreatePageRequestSchema,async(e,t,S)=>{try{let e=extractActorIdentity(S,fe);if(e.kind===`invalid-summary`){errorResponse(t,400,`urn:ok:error:invalid-request`,`Summary must be a string.`,{handler:`create-page`});return}let E=S.path;if(!isSupportedDocFile(E)){errorResponse(t,400,`urn:ok:error:invalid-request`,`path must end with .md or .mdx.`,{handler:`create-page`});return}if(E.includes(`..`)||E.startsWith(`/`)||E.includes(`\0`)||E.includes(`\\`)){errorResponse(t,400,`urn:ok:error:path-escape`,`Invalid path.`,{handler:`create-page`,detail:`path must not contain .. or start with /`});return}let O=resolve(w),k=resolve(O,E);if(!k.startsWith(`${O}/`)&&k!==O){errorResponse(t,400,`urn:ok:error:path-escape`,`path must not escape content directory.`,{handler:`create-page`});return}let j=stripDocExtension(E);if(isSystemDoc(j)||isConfigDoc(j)){errorResponse(t,400,`urn:ok:error:reserved-doc-name`,`'${j}' is a reserved document name.`,{handler:`create-page`});return}let F=typeof S.template==`string`?S.template.trim():``,L=``,B;if(F.length>0){if(!/^[A-Za-z0-9_-]+$/.test(F)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Template name must match [A-Za-z0-9_-]+.`,{handler:`create-page`});return}let S=E.includes(`/`)?E.slice(0,E.lastIndexOf(`/`)):``,w=resolveTemplatesAvailable(O,S),D=w.find(e=>e.name===F);if(!D){let e=w.length===0?`(none)`:w.map(e=>`"${e.name}" (${e.scope})`).join(`, `);errorResponse(t,400,`urn:ok:error:invalid-request`,`Template "${F}" does not resolve for folder "${S||`(root)`}". Available: ${e}`,{handler:`create-page`});return}let k=resolve(O,D.path),j;try{j=readFileSync(k,`utf-8`)}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read template at ${D.path}.`,{handler:`create-page`,cause:e});return}let{body:H}=stripFrontmatter(j),q=e.kind===`agent`||e.kind===`principal`?e.displayName??``:``;L=applySubstitution(H,{date:todayIsoUtc(),user:q}),B=D.scope}mkdirSync(dirname(k),{recursive:!0});try{writeFileSync(k,L,{encoding:`utf-8`,flag:`wx`})}catch(e){if(isAlreadyExistsError(e)){errorResponse(t,409,`urn:ok:error:doc-already-exists`,`File already exists.`,{handler:`create-page`,cause:e});return}throw e}let H=stripDocExtension(E);switch(ye?.delete(H),me&&me.incrementMdDir(dirname(H)),registerWrite(k,contentHash(L)),e.kind){case`agent`:case`principal`:recordContributor(H,e.writerId,e.displayName,e.colorSeed,void 0,e.actor);break;case`anonymous`:break;default:throw Error(`Unhandled actor kind in handleCreatePage: ${String(e.kind)}`)}let q=typeof D==`function`?D():null;q instanceof Map&&updateFileIndex({kind:`create`,path:k,docName:H,content:L},q),ee&&(ee.updateDocumentFromMarkdown(H,L),ee.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist create-page cache for ${H}:`,e)}),ne?.(`backlinks`),ne?.(`graph`)),ne?.(`files`),B!==void 0&&console.warn(JSON.stringify({event:`template-instantiate`,templateName:F,templateScope:B,docName:H})),successResponse(t,200,CreatePageSuccessSchema,{docName:H},{handler:`create-page`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to create page.`,{handler:`create-page`,cause:e})}},{handler:`create-page`,method:`POST`}),ks=withValidation(CreateFolderRequestSchema,async(e,t,S)=>{try{if(extractActorIdentity(S,fe).kind===`invalid-summary`){errorResponse(t,400,`urn:ok:error:invalid-request`,`Summary must be a string.`,{handler:`create-folder`});return}let e=S.path;if(!isValidRelativeContentPath(e)){errorResponse(t,400,`urn:ok:error:invalid-request`,`path must be a relative content path.`,{handler:`create-folder`});return}if(e===`.ok`||e.startsWith(`.ok/`)){errorResponse(t,400,`urn:ok:error:reserved-doc-name`,`'.ok' is a reserved directory.`,{handler:`create-folder`});return}if(me?.isDirExcluded(e)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Destination folder is excluded by the workspace content config.`,{handler:`create-folder`});return}let E=resolveContentEntryPath(w,`folder`,e);if(existsSync(E)){errorResponse(t,409,`urn:ok:error:doc-already-exists`,`Folder already exists.`,{handler:`create-folder`});return}tracedMkdirSync(E,{recursive:!0}),Me(e),ne?.(`files`),successResponse(t,200,CreateFolderSuccessSchema,{path:e},{handler:`create-folder`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to create folder.`,{handler:`create-folder`,cause:e})}},{handler:`create-folder`,method:`POST`}),As=withValidation(DuplicatePathRequestSchema,async(e,S,E)=>{try{let e=extractActorIdentity(E,fe);if(e.kind===`invalid-summary`){errorResponse(S,400,`urn:ok:error:invalid-request`,`Summary must be a string.`,{handler:`duplicate-path`});return}let{kind:O}=E,k=O===`file`?stripDocExtension(E.path):E.path;if(!isValidRelativeContentPath(k)){errorResponse(S,400,`urn:ok:error:invalid-request`,`path must be a relative content path.`,{handler:`duplicate-path`});return}if(k===`.ok`||k.startsWith(`.ok/`)||O===`file`&&(isSystemDoc(k)||isConfigDoc(k))||O===`folder`&&isReservedSyntheticFolderPath(k)){errorResponse(S,400,`urn:ok:error:reserved-doc-name`,`Reserved paths cannot be duplicated.`,{handler:`duplicate-path`});return}O===`file`&&probeAndRegisterSourceFileExtension(w,k);let j=resolveContentEntryPath(w,O,k);if(!existsSync(j)){if(O===`file`){let e=resolveContentEntryPath(w,`folder`,k);if(existsSync(e)&&statSync(e).isDirectory()){errorResponse(S,400,`urn:ok:error:invalid-request`,`Target path is not a ${O}.`,{handler:`duplicate-path`});return}}errorResponse(S,404,`urn:ok:error:doc-not-found`,`${O} does not exist.`,{handler:`duplicate-path`});return}let F=statSync(j);if(O===`file`&&!F.isFile()||O===`folder`&&!F.isDirectory()){errorResponse(S,400,`urn:ok:error:invalid-request`,`Target path is not a ${O}.`,{handler:`duplicate-path`});return}let L=O===`file`?[k]:listAffectedDocNames(D(),O,k),B=ce?.(),H=new Set(B?B.getConflicts().map(e=>e.file):[]);for(let e of L){let w=stripDocExtension(e),E=t.documents.get(w),D=`${w}${getDocExtension(w)}`,O=E!==void 0&&isDocInConflict(E),k=H.has(D);if(O||k){respondDocInConflict(S,new DocInConflictError({file:D}),`duplicate-path`);return}}let q=typeof D==`function`?D():null,J,Y=[];if(O===`file`){let e=extname(j);if(J=nextAvailableDuplicateDocName(w,k).docName,isSystemDoc(J)||isConfigDoc(J)||me?.isExcluded(`${J}${e}`)){errorResponse(S,400,`urn:ok:error:invalid-request`,`Duplicated document destination is excluded by the project content config.`,{handler:`duplicate-path`});return}let t=resolveDuplicateDocPath(w,J,e),E=readFileSync(j,`utf-8`),D=dirname(t),O=existsSync(D);try{tracedMkdirSync(D,{recursive:!0}),tracedWriteFileSync(t,E,{encoding:`utf-8`,flag:`wx`})}catch(e){if(isAlreadyExistsError(e)){errorResponse(S,409,`urn:ok:error:doc-already-exists`,`A file at the duplicate destination already exists.`,{handler:`duplicate-path`,cause:e});return}if(!O)try{tracedRmdirSync(D)}catch(e){let t=e.code;t!==`ENOENT`&&t!==`ENOTEMPTY`&&console.warn(`[duplicate-path] failed to clean duplicate parent directory:`,{destinationDir:D,err:e})}throw e}let F=!1;try{registerDocExtension(J,e),ye?.delete(J),me&&(me.incrementMdDir(dirname(J)),F=!0),registerWrite(t,contentHash(E)),q instanceof Map&&updateFileIndex({kind:`create`,path:t,docName:J,content:E},q),ee?.updateDocumentFromMarkdown(J,E),Y=[J]}catch(e){try{tracedRmSync(t,{force:!0})}catch(e){console.warn(`[duplicate-path] failed to clean partial file duplicate:`,{destinationPath:t,err:e})}throw forgetDocExtension(J),me&&F&&me.decrementMdDir(dirname(J)),q instanceof Map&&updateFileIndex({kind:`delete`,path:t,docName:J},q),e}}else{if(J=nextAvailableDuplicateFolderPath(w,k).folderPath,me?.isDirExcluded(J)){errorResponse(S,400,`urn:ok:error:invalid-request`,`Duplicated folder destination is excluded by the project content config.`,{handler:`duplicate-path`});return}let e=resolveContentEntryPath(w,`folder`,J);try{tracedCpSync(j,e,{recursive:!0,errorOnExist:!0,force:!1})}catch(e){if(isAlreadyExistsError(e)){errorResponse(S,409,`urn:ok:error:doc-already-exists`,`A folder at the duplicate destination already exists.`,{handler:`duplicate-path`,cause:e});return}throw e}try{for(let e of collectFolderPaths(w,J))Me(e);let e=collectMarkdownCopies(w,J);Y=e.map(e=>e.docName);for(let t of e){let e=extname(t.fullPath);registerDocExtension(t.docName,e),ye?.delete(t.docName),me&&me.incrementMdDir(dirname(t.docName)),registerWrite(t.fullPath,contentHash(t.content)),q instanceof Map&&updateFileIndex({kind:`create`,path:t.fullPath,docName:t.docName,content:t.content},q),ee?.updateDocumentFromMarkdown(t.docName,t.content)}}catch(t){try{tracedRmSync(e,{recursive:!0,force:!0})}catch(t){console.warn(`[duplicate-path] failed to clean partial folder duplicate:`,{destinationPath:e,err:t})}throw t}}switch(e.kind){case`agent`:case`principal`:for(let t of Y)recordContributor(t,e.writerId,e.displayName,e.colorSeed,void 0,e.actor);break;case`anonymous`:break;default:throw Error(`Unhandled actor kind in handleDuplicatePath: ${String(e.kind)}`)}ee&&Y.length>0&&(ee.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist duplicate-path cache:`,e)}),ne?.(`backlinks`),ne?.(`graph`)),ne?.(`files`),successResponse(S,200,DuplicatePathSuccessSchema,{kind:O,path:J,duplicatedDocNames:Y},{handler:`duplicate-path`})}catch(e){if(e instanceof DuplicateNameExhaustedError){errorResponse(S,409,`urn:ok:error:doc-already-exists`,`All available duplicate name slots are occupied for this path.`,{handler:`duplicate-path`,cause:e});return}let t=classifyDuplicatePathFilesystemProblem(e);if(t){errorResponse(S,t.status,t.type,t.title,{handler:`duplicate-path`,cause:e});return}errorResponse(S,500,`urn:ok:error:internal-server-error`,`Failed to duplicate path.`,{handler:`duplicate-path`,cause:e})}},{handler:`duplicate-path`,method:`POST`}),Ns=withValidation(EmptyRequestSchema,async(e,t)=>{try{let S=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!S||S.length===0){errorResponse(t,400,`urn:ok:error:invalid-request`,`Missing docName query parameter.`,{handler:`page-headings`});return}if(!isSafeDocName(S)){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid docName.`,{handler:`page-headings`});return}let w=Be(S);if(!w){errorResponse(t,400,`urn:ok:error:invalid-request`,`Invalid docName.`,{handler:`page-headings`});return}if(!existsSync(w)){errorResponse(t,404,`urn:ok:error:doc-not-found`,`Page not found.`,{handler:`page-headings`});return}successResponse(t,200,PageHeadingsSuccessSchema,{docName:S,headings:extractHeadings(readFileSync(w,`utf-8`))},{handler:`page-headings`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to read headings.`,{handler:`page-headings`,cause:e})}},{handler:`page-headings`,method:`GET`,skipBodyParse:!0}),Ps=withValidation(RenamePathRequestSchema,async(e,S,E)=>{try{let e=extractActorIdentity(E,fe);if(e.kind===`invalid-summary`){errorResponse(S,400,`urn:ok:error:invalid-request`,`Summary must be a string.`,{handler:`rename-path`});return}let{kind:O,fromPath:k,toPath:j}=E;if(!isValidRelativeContentPath(k)||!isValidRelativeContentPath(j)){errorResponse(S,400,`urn:ok:error:invalid-request`,`Paths must be relative content paths.`,{handler:`rename-path`});return}if(O===`file`&&(isSystemDoc(k)||isSystemDoc(j)||isConfigDoc(k)||isConfigDoc(j))){errorResponse(S,400,`urn:ok:error:reserved-doc-name`,`Reserved document names cannot be renamed.`,{handler:`rename-path`});return}if(k===`.ok`||k.startsWith(`.ok/`)||j===`.ok`||j.startsWith(`.ok/`)){errorResponse(S,400,`urn:ok:error:reserved-doc-name`,`.ok is a reserved directory.`,{handler:`rename-path`});return}if(k===j){successResponse(S,200,RenamePathSuccessSchema,{renamed:[],rewrittenDocs:[]},{handler:`rename-path`});return}let F=O===`file`?[stripDocExtension(k)]:listAffectedDocNames(D(),O,k),L=ce?.(),B=new Set(L?L.getConflicts().map(e=>e.file):[]);for(let e of F){let w=stripDocExtension(e),E=t.documents.get(w),D=O===`file`?k:`${w}${getDocExtension(e)}`,j=E!==void 0&&isDocInConflict(E),F=B.has(D);if(j||F){respondDocInConflict(S,new DocInConflictError({file:D}),`rename-path`);return}}if(k.toLowerCase()===j.toLowerCase()){errorResponse(S,400,`urn:ok:error:invalid-request`,`Case-only renames are not supported.`,{handler:`rename-path`});return}if(O===`file`&&probeAndRegisterSourceFileExtension(w,k),me&&(O===`file`?me.isExcluded(isSupportedDocFile(j)?j:`${j}${getDocExtension(k)}`):me.isDirExcluded(j))){errorResponse(S,400,`urn:ok:error:invalid-request`,`Destination ${O===`file`?`document`:`folder`} is excluded by the project content config.`,{handler:`rename-path`});return}let q=e.kind===`agent`||e.kind===`principal`?{writerId:e.writerId,displayName:e.displayName,colorSeed:e.colorSeed,actorMetadata:e.actor}:void 0,J;try{J=await Rt(k,j,O,q?{actor:q}:{})}catch(e){if(e instanceof ManagedRenameCollisionError){errorResponse(S,409,`urn:ok:error:doc-already-exists`,Tt(e.message),{handler:`rename-path`,extensions:{colliding:e.colliding},cause:e});return}throw e}if(J.renamed.length===0){successResponse(S,200,RenamePathSuccessSchema,{renamed:[],rewrittenDocs:[]},{handler:`rename-path`});return}let Y;switch(e.kind){case`agent`:{let t=e.summary.kind===`value`,S=t?e.summary:normalizeSummary(`Renamed ${k} → ${j}`),w=Vt(S);Y=t||!w.response?w.response:Ht(w.response);for(let t=0;t<J.renamed.length;t++){let{fromDocName:S,toDocName:E}=J.renamed[t];recordContributor(E,e.writerId,e.displayName,e.colorSeed,formatRenameSubject(S,E),e.actor,t===0?w.stored:void 0)}incrementAgentWriteCalls(),Ut(S,!t);for(let{toDocName:e}of J.renamed)it(e,`rename-path`);break}case`principal`:{let t=Vt(e.summary);Y=t.response;for(let S=0;S<J.renamed.length;S++){let{fromDocName:w,toDocName:E}=J.renamed[S];recordContributor(E,e.writerId,e.displayName,e.colorSeed,formatRenameSubject(w,E),e.actor,S===0?t.stored:void 0)}Ut(e.summary,!1);for(let{toDocName:e}of J.renamed)it(e,`rename-path`);break}case`anonymous`:log$2.debug({kind:O,fromPath:k,toPath:j,affectedDocs:J.renamed.length},`[rename-path] anonymous actor — no contributor recorded (no agentId in body and getPrincipal() returned null)`);break;default:throw Error(`Unhandled actor kind in handleRenamePath: ${String(e.kind)}`)}if(renameAttributionCounter().add(1,{kind:`rename-${O}`,attribution_kind:e.kind}),H)try{await H()}catch(e){console.warn(`[rename-path] flushContributors failed (commitSha backfill may be deferred):`,e)}successResponse(S,200,RenamePathSuccessSchema,{renamed:J.renamed,rewrittenDocs:J.rewrittenDocs,...Y?{summary:Y}:{}},{handler:`rename-path`})}catch(e){let{status:t,type:w,error:E}=Et(e);errorResponse(S,t,w,E,{handler:`rename-path`,cause:e})}},{handler:`rename-path`,method:`POST`}),Is=withValidation(DeletePathRequestSchema,async(e,S,E)=>{try{zt(E);let{kind:e,path:O}=E;if(!isValidRelativeContentPath(O)){errorResponse(S,400,`urn:ok:error:invalid-request`,`path must be a relative content path.`,{handler:`delete-path`});return}let k=resolveContentEntryPath(w,e,O);if(!existsSync(k)){errorResponse(S,404,`urn:ok:error:doc-not-found`,`${e} does not exist.`,{handler:`delete-path`});return}let j=statSync(k);if(e===`file`&&!j.isFile()||e===`folder`&&!j.isDirectory()){errorResponse(S,400,`urn:ok:error:invalid-request`,`Target path is not a ${e}.`,{handler:`delete-path`});return}let F=e===`file`?[O]:listAffectedDocNames(D(),e,O),L=ce?.(),B=new Set(L?L.getConflicts().map(e=>e.file):[]);for(let w of F){let E=stripDocExtension(w),D=t.documents.get(E),O=e===`file`?w:`${E}${getDocExtension(E)}`,k=D!==void 0&&isDocInConflict(D),j=B.has(O);if(k||j){respondDocInConflict(S,new DocInConflictError({file:O}),`delete-path`);return}}if(await Dt(F),ye)for(let e of F)isSystemDoc(e)||isConfigDoc(e)||(ye.setDeleted(e),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:e,kind:`deleted`,source:`handleDeletePath`})));e===`file`?unlinkSync(k):(tracedRmSync(k,{recursive:!0,force:!1}),Pe(O));let H=D();if(H instanceof Map)for(let e of F)updateFileIndex({kind:`delete`,path:resolve(w,`${e}${getDocExtension(e)}`),docName:e},H);successResponse(S,200,DeletePathSuccessSchema,{deletedDocNames:F},{handler:`delete-path`})}catch(e){errorResponse(S,500,`urn:ok:error:internal-server-error`,`Failed to delete path.`,{handler:`delete-path`,cause:e})}},{handler:`delete-path`,method:`POST`}),Rs=withValidation(TrashCleanupRequestSchema,async(e,t,S)=>withSpan(`ok.fs.trash_cleanup`,{attributes:{"ok.cleanup.kind":S.kind,"ok.cleanup.path":normalizeFsPath(S.path),"ok.cleanup.path.role":classifyFsPath(S.path)}},async()=>{try{if(extractActorIdentity(S,fe).kind===`invalid-summary`){errorResponse(t,400,`urn:ok:error:invalid-request`,`Summary must be a string.`,{handler:`trash-cleanup`});return}let{kind:e,path:E}=S;if(!isValidRelativeContentPath(E)){errorResponse(t,400,`urn:ok:error:invalid-request`,`path must be a relative content path.`,{handler:`trash-cleanup`});return}let O=e===`folder`&&isReservedSyntheticFolderPath(E);if(e===`file`&&(isSystemDoc(E)||isConfigDoc(E))||O){errorResponse(t,400,`urn:ok:error:reserved-doc-name`,`'${E}' is a reserved document name.`,{handler:`trash-cleanup`});return}let k=D(),j=e===`file`?k.has(E)?[E]:[]:listAffectedDocNames(k,e,E);if(j.length===0){successResponse(t,200,TrashCleanupSuccessSchema,{deletedDocNames:[]},{handler:`trash-cleanup`});return}if(await Dt(j),ye)for(let e of j)isSystemDoc(e)||isConfigDoc(e)||(ye.setDeleted(e),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:e,kind:`deleted`,source:`handleTrashCleanup`})));let F=D();if(F instanceof Map)for(let e of j)updateFileIndex({kind:`delete`,path:resolve(w,`${e}${getDocExtension(e)}`),docName:e},F);e===`folder`&&Pe(E),ne?.(`files`),successResponse(t,200,TrashCleanupSuccessSchema,{deletedDocNames:j},{handler:`trash-cleanup`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to clean up after trash.`,{handler:`trash-cleanup`,cause:e})}}),{handler:`trash-cleanup`,method:`POST`}),$s=withValidation(EmptyRequestSchema,async(e,t)=>{try{let e=D(),S=[];for(let[t,E]of e){let e=t,D,O=getDocExtension(t);try{let S=readFileSync(resolve(w,`${t}${O}`),`utf-8`);e=extractPageTitle(S,t),D=extractPageIcon(S)}catch(e){console.warn(`[pages] Failed to read title for ${t}:`,e)}S.push({docName:t,title:e,docExt:O,size:E.size,modified:E.modified,icon:D})}S.sort((e,t)=>e.docName.localeCompare(t.docName)),successResponse(t,200,PagesSuccessSchema,{pages:S},{handler:`pages`})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Failed to list pages.`,{handler:`pages`,cause:e})}},{handler:`pages`,method:`GET`,skipBodyParse:!0}),ec=withValidation(EmptyRequestSchema,async(e,S)=>{try{let w=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!w){errorResponse(S,400,`urn:ok:error:invalid-request`,`Missing docName parameter.`,{handler:`suggest-links`});return}if(!isSafeDocName(w)){errorResponse(S,400,`urn:ok:error:invalid-request`,`Invalid docName.`,{handler:`suggest-links`});return}if(isSystemDoc(w)||isConfigDoc(w)){errorResponse(S,400,`urn:ok:error:reserved-doc-name`,`'${w}' is a reserved document name.`,{handler:`suggest-links`});return}successResponse(S,200,SuggestLinksSuccessSchema,await suggestLinks({hocuspocus:t,fileIndex:D(),docName:w}),{handler:`suggest-links`})}catch(e){if(e instanceof SuggestLinksTargetNotFoundError){errorResponse(S,404,`urn:ok:error:doc-not-found`,`Page not found.`,{handler:`suggest-links`,cause:e});return}errorResponse(S,500,`urn:ok:error:internal-server-error`,`Failed to suggest links.`,{handler:`suggest-links`,cause:e})}},{handler:`suggest-links`,method:`GET`,skipBodyParse:!0});async function tc(e,t){if(e.method!==`POST`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`upload-asset`,extraHeaders:{Allow:`POST`}});return}let S;try{S=await readUploadBody(e,de??w)}catch(e){if(e instanceof UploadWriteError){errorResponse(t,uploadStatusFor(e.reason),e.reason,uploadTitleFor(e.reason),{handler:`upload-asset`,cause:e});return}errorResponse(t,400,`urn:ok:error:malformed-upload`,`Failed to parse upload.`,{handler:`upload-asset`,cause:e});return}let{filename:E,tempPath:D,sha:O,byteLength:k,parentDocName:j}=S,F=()=>{if(existsSync(D))try{unlinkSync(D)}catch{}},L=validateBody(UploadRequestSchema,{parentDocName:j},t,{handler:`upload-asset`});if(!L.ok){F();return}let{parentDocName:B}=L.value,{agentId:H,agentName:q}=zt(Object.fromEntries(new URL(e.url??``,`http://localhost`).searchParams.entries()));if(k===0){F(),errorResponse(t,400,`urn:ok:error:no-file-received`,`No file received.`,{handler:`upload-asset`});return}if(B.includes(`\0`)||B.includes(`..`)||B.startsWith(`/`)){F(),errorResponse(t,400,`urn:ok:error:path-escape`,`Path escape detected.`,{handler:`upload-asset`});return}let J=resolve(w),Y=resolveUploadDestDir(B,`./`,J);if(!isWithinContentDir(Y,J)){F(),errorResponse(t,400,`urn:ok:error:path-escape`,`Path escape detected.`,{handler:`upload-asset`});return}try{assertNoSymlinkEscape(Y,J)}catch(e){if(F(),(e instanceof Error?e.message:String(e)).startsWith(`symlink-escape:`)){errorResponse(t,400,`urn:ok:error:path-escape`,`Path escape detected.`,{handler:`upload-asset`});return}log$2.error({err:e,destDir:Y},`[upload] failed to validate destination directory`),errorResponse(t,500,`urn:ok:error:storage-error`,`Storage error.`,{handler:`upload-asset`,cause:e});return}try{mkdirSync(Y,{recursive:!0})}catch(e){if(!isAlreadyExistsError(e)){F();let S=classifyUploadErrno(e);errorResponse(t,uploadStatusFor(S),S,uploadTitleFor(S),{handler:`upload-asset`,cause:e,detail:`failed to create attachment directory`});return}}try{let e=realpathSync(Y),S;try{S=realpathSync(J)}catch{S=J}if(!isWithinContentDir(e,S)){F(),errorResponse(t,400,`urn:ok:error:path-escape`,`Path escape detected.`,{handler:`upload-asset`});return}}catch(e){if(e.code!==`ENOENT`){F(),errorResponse(t,400,`urn:ok:error:path-escape`,`Path escape detected.`,{handler:`upload-asset`,cause:e});return}}let ee=await fileTypeFromFile(D),te=ee?.mime,ne=ee?.ext;if(!te){let e=readTempFileHead(D,256).toString(`utf-8`).replace(/^/,``).trimStart();(e.startsWith(`<svg`)||e.startsWith(`<?xml`)&&e.includes(`<svg`))&&(te=`image/svg+xml`,ne=`svg`)}{let S=await findDuplicateAsset(Y,O,k);if(S){F();let E=relative(w,resolve(Y,S));log$2.info({event:`upload`,endpoint:e.url??`/api/upload`,agentId:H,agentName:q,dedup:!0,mime:te??null,size:k,destPath:E,httpStatus:200},`[upload] dedup hit`),successResponse(t,200,UploadAssetSuccessSchema,{src:S,path:E,deduped:!0},{handler:`upload-asset`});return}}let ae;if(!E||E===`upload`||GENERIC_PASTE_NAMES.test(E)){let e=new Date().toISOString().replace(/[-:T]/g,``).slice(0,14).replace(/(\d{8})(\d{6})/,`$1-$2`),t=E?extname(E).slice(1):``,S=ne??t??``;ae=S===``?`pasted-${e}`:`pasted-${e}.${S}`}else ae=sanitizeFilename(E);try{let S=linkTempToFinalWithCollisionRetry(D,Y,ae),E=relative(w,resolve(Y,S));log$2.info({event:`upload`,endpoint:e.url??`/api/upload`,agentId:H,agentName:q,dedup:!1,mime:te??null,size:k,destPath:E,httpStatus:200},`[upload] write ok`),successResponse(t,200,UploadAssetSuccessSchema,{src:S,path:E,deduped:!1},{handler:`upload-asset`})}catch(S){let w=S instanceof UploadWriteError?S.reason:`urn:ok:error:storage-error`;log$2.error({event:`upload`,endpoint:e.url??`/api/upload`,agentId:H,agentName:q,filename:ae,size:k,reason:w,httpStatus:uploadStatusFor(w),err:S},`[upload] write failed`),errorResponse(t,uploadStatusFor(w),w,uploadTitleFor(w),{handler:`upload-asset`,cause:S})}}let nc=`/api/local-op/clone`,rc=`/api/local-op/open`,ic=600*1e3,ac=45e3,oc=`local-op-clone`,sc=withValidation(LocalOpCloneRequestSchema,cc,{handler:oc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:oc})});async function cc(e,t,S){let{url:w,dir:E,branch:D}=S;if(!isAllowedGitUrl(w)){errorResponse(t,400,`urn:ok:error:url-not-allowed`,`URL protocol is not allowed for clone.`,{handler:oc,cause:Error(`url=${w}`)});return}if(!isSafeLocalPath(E)){errorResponse(t,400,`urn:ok:error:dir-outside-home`,`Clone destination must be within the user home directory.`,{handler:oc,cause:Error(`dir=${E}`)});return}if(!we.tryAcquire(nc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`A clone operation is already in progress.`,{handler:oc,extraHeaders:{"Retry-After":`30`}});return}t.writeHead(200,{"Content-Type":`application/x-ndjson`,"Transfer-Encoding":`chunked`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-cache`});let O=createStreamingErrorWriter(t,oc),k=null,j=runCloneSubprocess({cliArgs:ue,url:w,dir:E,branch:D,timeoutMs:ic,onEvent:e=>{if(e.type===`complete`){k=e.dir;return}if(e.type===`error`){e.message&&log$2.warn({stderr:redactShareSubprocessStderr(e.message),url:w,dir:E},`[local-op/clone] clone failed`);let t=classifyCloneError(e.message??``);O(500,`urn:ok:error:clone-failed`,t.title,{detail:t.detail||void 0,cause:e.message?Error(redactShareSubprocessStderr(e.message)):void 0});return}if(!t.writableEnded&&!t.destroyed)try{t.write(`${JSON.stringify(e)}\n`)}catch{}}});(async()=>{try{if(await j.done,k&&!t.writableEnded&&!t.destroyed){let e=await lc(k);!t.writableEnded&&!t.destroyed&&(`port`in e?t.write(`${JSON.stringify({type:`complete`,port:e.port,dir:k})}\n`):O(500,`urn:ok:error:server-start-failed`,`Cloned successfully but failed to start the project server.`,{cause:Error(e.error)}))}}catch(e){!t.writableEnded&&!t.destroyed?O(500,`urn:ok:error:internal-server-error`,`Unexpected error during clone post-processing.`,{cause:e}):log$2.error({err:e,handler:oc},`clone IIFE rejected after stream ended`)}finally{t.writableEnded||t.end(),we.release(nc)}})(),t.on(`close`,()=>{j.cancel()})}async function lc(e){let t=resolve(expandTilde(e)),S=getLocalDir(t),w=readUiLock(S);if(w&&w.port>0)return{port:w.port};let E=readServerLock(S),[D,...O]=ue,k=E&&E.port>0?`ui`:`start`,j=spawn(D,[...O,k],{cwd:t,detached:!0,stdio:[`ignore`,`ignore`,`pipe`],env:{...process.env,OK_LOCK_KIND:`interactive`}}),F=[];j.stderr?.on(`data`,e=>{F.push(e),log$2.warn({cwd:t,cliCmd:k,msg:e.toString(`utf-8`).trim()},`[local-op/open] child stderr`)});let L=null;j.on(`exit`,e=>{L=e??-1}),j.unref();let B=Date.now()+45e3;for(;Date.now()<B;){await setTimeout$1(500);let e=readUiLock(S);if(e&&e.port>0)return{port:e.port};if(L!==null){let e=Buffer.concat(F).toString(`utf-8`).trim();return{error:`\`ok ${k}\` exited (code ${L})${e?` — ${e}`:``}`}}}let H=Buffer.concat(F).toString(`utf-8`).trim();return{error:`UI did not start within the expected time${H?` — ${H}`:``}`}}let uc=`local-op-open`,dc=withValidation(LocalOpOpenRequestSchema,async(e,t,S)=>{let{dir:w}=S;if(!isSafeLocalPath(w)){errorResponse(t,400,`urn:ok:error:dir-outside-home`,`dir must be within the user home directory.`,{handler:uc,cause:Error(`dir=${w}`)});return}if(!we.tryAcquire(rc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`A server-open operation is already in progress.`,{handler:uc,extraHeaders:{"Retry-After":`5`}});return}try{let e=await lc(w);`port`in e?successResponse(t,200,LocalOpOpenSuccessSchema,{port:e.port},{handler:uc}):errorResponse(t,504,`urn:ok:error:server-open-failed`,`Failed to open project server.`,{handler:uc,cause:Error(e.error)})}finally{we.release(rc)}},{handler:uc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:uc})}),fc=`/api/local-op/auth/login`,pc=`/api/local-op/auth/status`,mc=`/api/local-op/auth/repos`,hc=`/api/local-op/auth/signout`,gc=`/api/local-op/auth/pat`,_c=null,vc=`local-op-auth-login`,yc=withValidation(LocalOpAuthHostRequestSchema,bc,{handler:vc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:vc})});async function bc(e,t,S){let w=S.host??`github.com`;if(!we.tryAcquire(fc)){let e=_c;if(!e){console.error(JSON.stringify({event:`ok-local-op:auth-login-slot-no-controller`,channel:`auth`,transport:`http`})),errorResponse(t,429,`urn:ok:error:concurrent-operation`,`An auth login operation is already in progress.`,{handler:vc,extraHeaders:{"Retry-After":`5`}});return}e.cancel(),_c=null,console.warn(JSON.stringify({event:`ok-local-op:idempotent-start-replaced-stale-slot`,channel:`auth`,transport:`http`}))}t.writeHead(200,{"Content-Type":`application/x-ndjson`,"Transfer-Encoding":`chunked`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-cache`});let E=createStreamingErrorWriter(t,vc),D=runDeviceFlowSubprocess({cliArgs:ue,host:w,timeoutMs:ic,onEvent:e=>{if(e.type===`error`){E(500,`urn:ok:error:auth-failed`,`Auth subprocess reported an error.`,{cause:e.message?Error(e.message):void 0});return}if(!t.writableEnded&&!t.destroyed)try{t.write(`${JSON.stringify(e)}\n`)}catch{}}});_c=D;let O=()=>{D.cancel(),_c===D&&(_c=null,we.release(fc))};t.on(`close`,O),D.done.finally(()=>{if(t.off(`close`,O),!t.writableEnded&&!t.destroyed)try{t.end()}catch{}_c===D&&(_c=null,we.release(fc))})}let xc=`local-op-auth-status`,Sc=withValidation(LocalOpAuthHostRequestSchema,async(e,t,S)=>{let w=S.host??`github.com`;if(!we.tryAcquire(pc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`An auth status operation is already in progress.`,{handler:xc,extraHeaders:{"Retry-After":`5`}});return}try{let[e,...S]=ue,E=[...S,`auth`,`status`,`--json`,`--host`,w],D=(await new Promise((t,S)=>{let w=spawn(e,E,{stdio:[`ignore`,`pipe`,`pipe`],env:{...process.env}}),D=!1,O=setTimeout(()=>{D=!0,w.kill(`SIGTERM`)},3e4),k=[];w.stdout.on(`data`,e=>k.push(e)),w.on(`close`,()=>{if(clearTimeout(O),D){S(Error(`auth status subprocess timed out after 30s`));return}t(Buffer.concat(k).toString(`utf-8`))}),w.on(`error`,e=>{clearTimeout(O),S(e)})})).split(`
2175
2240
  `).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:xc}):successResponse(t,200,LocalOpAuthStatusSuccessSchema,O,{handler:xc})}catch(e){errorResponse(t,500,`urn:ok:error:auth-failed`,`Auth status check failed.`,{handler:xc,cause:e})}finally{we.release(pc)}},{handler:xc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:xc})}),Cc=`local-op-auth-repos`,wc=withValidation(LocalOpAuthHostRequestSchema,Tc,{handler:Cc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:Cc})});async function Tc(e,t,S){let w=S.host??`github.com`;if(!we.tryAcquire(mc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`An auth repos operation is already in progress.`,{handler:Cc,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,Cc),[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`)},ic);L.stdout.on(`data`,e=>{F+=e.toString(`utf-8`);let S=F.split(`
2176
2241
  `);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$2.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(mc))}),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(mc))}),t.on(`close`,()=>{j||(j=!0,clearTimeout(B),L.kill(`SIGTERM`),we.release(mc))})}let Ec=`local-op-auth-signout`,Dc=withValidation(LocalOpAuthHostRequestSchema,async(e,t,S)=>{let w=S.host??`github.com`;if(!we.tryAcquire(hc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`An auth signout operation is already in progress.`,{handler:Ec,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:Ec})}catch(e){errorResponse(t,500,`urn:ok:error:auth-failed`,`Auth signout failed.`,{handler:Ec,cause:e})}finally{we.release(hc)}},{handler:Ec,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:Ec})}),Oc=`local-op-auth-pat`,kc=withValidation(LocalOpAuthPatRequestSchema,async(e,t,S)=>{let{pat:w,host:E}=S,D=E??`github.com`;if(!we.tryAcquire(gc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`An auth pat operation is already in progress.`,{handler:Oc,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(`
2177
2242
  `).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:Oc}):successResponse(t,200,LocalOpAuthPatSuccessSchema,k,{handler:Oc})}catch(e){errorResponse(t,500,`urn:ok:error:auth-failed`,`Auth pat failed.`,{handler:Oc,cause:e})}finally{we.release(gc)}},{handler:Oc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:Oc})}),Ac=`local-op-auth-identity`;async function jc(e,t){if(checkLocalOpSecurity(e,t,{handler:Ac})){if(e.method!==`GET`){errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:Ac,extraHeaders:{Allow:`GET`}});return}if(!de){errorResponse(t,503,`urn:ok:error:no-project-dir`,`No project directory configured.`,{handler:Ac});return}try{successResponse(t,200,LocalOpAuthIdentitySuccessSchema,{identity:await resolveGitIdentity(de)},{handler:Ac})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Identity resolution failed.`,{handler:Ac,cause:e})}}}let Mc=`/api/local-op/auth/set-identity`,Nc=`local-op-auth-set-identity`,Pc=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:Nc});return}if(!we.tryAcquire(Mc)){errorResponse(t,429,`urn:ok:error:concurrent-operation`,`A set-identity operation is already in progress.`,{handler:Nc,extraHeaders:{"Retry-After":`5`}});return}try{writeGitIdentity(de,w,E),ce?.()?.refreshIdentity().catch(()=>{}),successResponse(t,200,LocalOpAuthEmptySuccessSchema,{},{handler:Nc})}catch(e){errorResponse(t,500,`urn:ok:error:internal-server-error`,`Set-identity failed.`,{handler:Nc,cause:e})}finally{we.release(Mc)}},{handler:Nc,method:`POST`,preBodyGate:(e,t)=>checkLocalOpSecurity(e,t,{handler:Nc})});async function Fc(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 Ic=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 Lc(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 Rc=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 zc(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 await L.raw([`show`,`:${e}:${E}`])}catch{return``}}try{let[e,w,D]=await Promise.all([B(1),B(2),B(3)]),O=w,k=null;if(F===`ytext`){let e=stripDocExtension(E),S=t.documents.get(e);if(S){let t=S.getMap(`lifecycle`).get(`status`);k=typeof t==`string`&&t.length>0?t:null;let w=Ce?Ce(e):null;w!==null&&!ytextHasConflictMarkers(w)?O=w:w!==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:e,ours:O,theirs:D,lifecycleStatus:k},{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 Bc(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 Vc=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 Hc(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 Uc=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 Wc(e,t){if(checkLocalOpSecurity(e,t,{handler:`installed-agents`}))try{await handleInstalledAgents(e,t,ze.probeAll)}catch(e){t.headersSent||(log$2.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 Gc(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 Kc=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 qc(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 Jc(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 Yc=/^[A-Za-z0-9_-]+$/;function Xc(e,t,S=`template`){return!e||!Yc.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 Zc(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}async function Qc(e,t){if(e.method===`GET`)return $c(e,t);if(e.method===`PUT`)return nl(e,t);errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`folder-config`,extraHeaders:{Allow:`GET, PUT`}})}let $c=withValidation(EmptyRequestSchema,async(e,t)=>{try{let S=Jc(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`,`frontmatter.yml`),D=null;if(existsSync(E))try{let e=(0,import_dist$1.parse)(await readFile$1(E,`utf-8`));D=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 ${E}: ${t}`),D=null}successResponse(t,200,FolderConfigGetSuccessSchema,{folder:w,frontmatter_local:D},{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}),nl=withValidation(FolderConfigPutRequestSchema,async(e,t,S)=>{try{let e=Jc(S.path,t,`path`,`folder-config-put`);if(!e)return;let w=e.folderRel===``?`**`:`${e.folderRel}/**`,E=applyNestedFolderRulesUpsert({projectDir:e.resolvedContentDir,rules:[{match:w,frontmatter:Zc(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}successResponse(t,200,FolderConfigPutSuccessSchema,{applied:E.applied},{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 il(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 al(e,t){if(e.method===`GET`)return ul(e,t);if(e.method===`PUT`)return dl(e,t);if(e.method===`DELETE`)return fl(e,t);errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`template`,extraHeaders:{Allow:`GET, PUT, DELETE`}})}let cl=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/,ll=e=>{let t=e.match(cl),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}},ul=withValidation(EmptyRequestSchema,async(e,t)=>{try{let S=new URL(e.url??``,`http://localhost`),w=S.searchParams.get(`name`)??``;if(!Xc(w,t,`template-get`))return;let E=Jc(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}=ll(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}),dl=withValidation(TemplatePutRequestSchema,async(e,t,S)=>{try{let e=S.name;if(!Xc(e,t,`template-put`))return;let w=Jc(S.folder,t,`folder`,`template-put`);if(!w||il(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:Zc(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`}),fl=withValidation(EmptyRequestSchema,async(e,t)=>{try{let S=new URL(e.url??``,`http://localhost`),w=S.searchParams.get(`name`)??``;if(!Xc(w,t,`template-delete`))return;let E=Jc(S.searchParams.get(`folder`)??``,t,`folder`,`template-delete`);if(!E||il(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 pl(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 ml(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 hl(e){return e===`autocomplete`||e===`full_text`||e===`omnibar`?e:`omnibar`}function gl(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 _l(){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,...pl(e)]}function vl(){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 yl(){let e=`${w}${de??``}`,t=vl(),S=workspaceSearchCaches.get(e);if(S?.fingerprint===t&&S.corpus)return S.corpus;if(S?.fingerprint===t&&S.pending)return S.pending;let E=_l().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 xl(){if(process.env.NODE_ENV!==`test`)for(let e of[0,1e3,3e3])setTimeout(()=>{yl().catch(e=>{console.warn(`[search] Failed to prewarm workspace search cache:`,e)})},e)}xl();async function Cl(e,t){if(e.method===`GET`)return Tl(e,t);if(e.method===`POST`)return El(e,t);errorResponse(t,405,`urn:ok:error:method-not-allowed`,`Method not allowed.`,{handler:`search`,extraHeaders:{Allow:`GET, POST`}})}let Tl=withValidation(EmptyRequestSchema,async(e,t)=>{let S=new URL(e.url??``,`http://localhost`),w=S.searchParams.get(`limit`),E=S.searchParams.get(`query`)??``,D=hl(S.searchParams.get(`intent`)),O=gl(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 yl(),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`?ml(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}),El=withValidation(SearchRequestSchema,async(e,t,S)=>{let w=typeof S.query==`string`?S.query:``,E=hl(S.intent),D=gl(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 yl(),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`?ml(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`}),Dl=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 Ol(e,t){if(checkLocalOpSecurity(e,t,{handler:`handoff`}))try{await handleHandoffDispatch(e,t,{contentDir:w,platform:process.platform})}catch(e){t.headersSent||(log$2.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 kl(e,t){if(checkLocalOpSecurity(e,t,{handler:`spawn-cursor`}))try{await handleSpawnCursor(e,t,{contentDir:w,platform:process.platform})}catch(e){t.headersSent||(log$2.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 jl=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})}),Ml=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}),Pl=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 Fl(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 Il=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 Fl([`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})}),Ll=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 Fl([`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})}),Rl=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 Fl(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})}),zl={"/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":Kc,"/api/pages":$s,"/api/folder-config":Qc,"/api/template":al,"/api/search":Cl,"/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":jl,"/api/git/branch-info":Ml,"/api/git/checkout":Pl,"/api/share/publish/owners":Il,"/api/share/publish/name-check":Ll,"/api/share/publish":Rl,"/api/principal":Yi,"/api/rescue":Ts,"/api/workspace":Zi,"/api/sync/status":Fc,"/api/sync/trigger":Ic,"/api/sync/conflicts":Lc,"/api/sync/conflict-content":zc,"/api/sync/resolve-conflict":Rc,"/api/sync/abort-merge":Gc,"/api/local-op/clone":sc,"/api/local-op/open":dc,"/api/local-op/auth/login":yc,"/api/local-op/auth/status":Sc,"/api/local-op/auth/repos":wc,"/api/local-op/auth/signout":Dc,"/api/local-op/auth/pat":kc,"/api/local-op/auth/identity":jc,"/api/local-op/auth/set-identity":Pc,"/api/installed-agents":Wc,"/api/spawn-cursor":kl,"/api/handoff":Ol,"/api/install-skill":Uc,"/api/skill/install-state":Dl,"/api/seed/plan":Bc,"/api/seed/apply":Vc,"/api/seed/packs":Hc};F&&(zl[`/api/test-reset`]=qr,zl[`/api/test-rescan-backlinks`]=Jr,zl[`/api/test-rescan-files`]=Yr);let Bl=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`]),Vl=[`/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(Bl.has(S)||Vl.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`:zl[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=zl[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 qc(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$1=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$1.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$1.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$1.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-CjyGVy33-DVACqhWk.mjs`).then(e=>e.n),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)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}default:throw Error(`[conflicts] unknown resolve strategy: ${t}`)}if(this.removeConflict(e),!this.hasConflicts())try{await D.git.raw([`commit`,`--no-edit`]),log$1.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(`
@@ -2323,9 +2388,9 @@ superseded_by: <path-to-new-canonical-article>.md
2323
2388
  - **Don't delete research articles** — they are the trail; keep them with a \`superseded_by\` marker
2324
2389
  - **Don't rewrite research prose verbatim** — canonical articles have a different voice (direct, decided) than research (exploratory, provisional)
2325
2390
  - **Don't skip the supersedes / superseded_by links** — the audit trail matters for future readers
2326
- `}const DESCRIPTION$21=[`Returns a step-by-step plan to promote stabilized research into a canonical article. Does NOT write — you execute the plan after a STOP gate confirms a real decision was made.`,"Canonical, not provisional — the output becomes the source of truth, with a `supersedes` trail back to the research.",`Use when a team has decided after research and wants the outcome committed as authoritative knowledge.`].join(`
2327
- `);function register$21(e,t){e.registerTool(`consolidate`,{description:DESCRIPTION$21,inputSchema:{topic:string$2().describe(`The topic to consolidate into a canonical article`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},buildWorkflowHandler(`consolidate`,t,`topic`,buildBody$2))}const PREVIEW_URL_SOURCES=[`lock`];function encodeDocName(e){return e.split(`/`).map(encodeURIComponent).join(`/`)}const START_UI_MESSAGE='No UI is running for this project. Start one to see the preview: `ok ui` (terminal), `preview_start("open-knowledge-ui")` (Claude Code Desktop), or open the project in OK Electron.',ATTACH_PREVIEW_ONCE_MESSAGE=`No browser is attached to the preview. Open it with preview_start, or call get_preview_url for the URL.`;function buildPreviewAttachWarning(e){return e?{action:`attach-preview-once`,previewUrl:e.url,message:ATTACH_PREVIEW_ONCE_MESSAGE}:{action:`start-ui`,previewUrl:null,message:START_UI_MESSAGE}}const START_UI_TEXT_HINT=START_UI_MESSAGE;async function resolvePreviewUrlForTool(e,t,S){return resolvePreviewUrl(e,{lockDir:resolveLockDir(S??await t.resolveCwd())})}function resolveUiInfo(e){try{let t=readUiLock(e.lockDir);if(t&&t.port>0)return{baseUrl:`http://localhost:${t.port}`}}catch(t){process.stderr.write(`[preview-url] readUiLock failed at ${e.lockDir} while resolving ui info: ${t instanceof Error?t.message:String(t)}\n`)}return{baseUrl:null}}async function buildListResolver(e,t){let S={lockDir:resolveLockDir(t??await e.resolveCwd())};return{resolve:e=>resolvePreviewUrl(e,S)}}function docNameFromPath(e){let t=e.toLowerCase();return t.endsWith(`.md`)?e.slice(0,-3):t.endsWith(`.mdx`)?e.slice(0,-4):e}function resolvePreviewUrl(e,t){let S=`/#/${encodeDocName(e)}`;try{let e=readUiLock(t.lockDir);if(e&&e.port>0)return{url:S,source:`lock`}}catch(e){process.stderr.write(`[preview-url] readUiLock failed at ${t.lockDir}: ${e instanceof Error?e.message:String(e)}\n`)}return null}const DESCRIPTION$20=["[Requires: Hocuspocus server] Delete a document through the managed delete flow at `POST /api/delete-path` (kind: file).",`Closes all open agent sessions for the doc, unloads it from Hocuspocus, and removes the file from disk.`,``,`**Parameters:**`,"- `docName` — A single document to delete, typically extension-less. A trailing `.md` or `.mdx` is stripped automatically.","- `docNames` — Batch form: an array of documents to delete in one call. Mutually exclusive with `docName`. Each is deleted independently; the response reports per-doc status.",``,`**Notes:**`,'- Inbound wiki-links to the deleted doc become dead links (redlinks) — they are NOT rewritten. Call `links({ kind: "backlinks", docName: "your-doc" })` BEFORE deleting to see which docs link here, then update or remove those references first.','- Deletion is irreversible from this tool. Use `version({ action: "save" })` beforehand if you may need to roll back.',"- The structured response includes `previousPreviewUrl` (when a preview source resolves) so agents can close any stale preview tab pointing at the deleted doc.",``,`**Errors:**`,"- 400 — `docName` is not a valid relative content path.",`- 404 — document does not exist.`].join(`
2328
- `);function parseDeletedDocNames(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}async function deleteOne(e,t,S,w){let E=normalizeDocName(e);if(!E.ok)return{docName:e,ok:!1,error:E.error};let D=w.identityRef?.current,O=await httpPost(t,`/api/delete-path`,{kind:`file`,path:E.docName,...D?{agentId:D.connectionId,agentName:D.displayName,clientName:D.clientInfo?.name,colorSeed:D.colorSeed}:{}});if(!O.ok)return{docName:E.docName,ok:!1,error:O.error};let k=parseDeletedDocNames(O.deletedDocNames),j=await resolvePreviewUrlForTool(E.docName,{config:w.config,resolveCwd:w.resolveCwd},S);return{docName:E.docName,ok:!0,deletedDocNames:k.length>0?k:[E.docName],...j?{previousPreviewUrl:j.url}:{}}}function register$20(e,t){e.registerTool(`delete_document`,{description:DESCRIPTION$20,inputSchema:{docName:string$2().optional().describe(`A single document to delete.`),docNames:array(string$2()).min(1).optional().describe("Batch: documents to delete in one call. Mutually exclusive with `docName`."),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,url:E}=S;if(!E)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);if(e.docName===void 0&&e.docNames===void 0)return textResult("Error: provide `docName` (single) or `docNames` (batch).",!0);if(e.docName!==void 0&&e.docNames!==void 0)return textResult("Error: `docName` and `docNames` are mutually exclusive.",!0);if(e.docNames!==void 0){let S=await Promise.all(e.docNames.map(e=>deleteOne(e,E,w,t))),D=S.filter(e=>e.ok).length,O=D===S.length,k=S.map(e=>e.ok?`Deleted ${e.docName}.`:`Failed ${e.docName}: ${e.error}`);return textPlusStructured(`${D}/${S.length} deleted.\n${k.join(`
2391
+ `}const DESCRIPTION$22=[`Returns a step-by-step plan to promote stabilized research into a canonical article. Does NOT write — you execute the plan after a STOP gate confirms a real decision was made.`,"Canonical, not provisional — the output becomes the source of truth, with a `supersedes` trail back to the research.",`Use when a team has decided after research and wants the outcome committed as authoritative knowledge.`].join(`
2392
+ `);function register$22(e,t){e.registerTool(`consolidate`,{description:DESCRIPTION$22,inputSchema:{topic:string$2().describe(`The topic to consolidate into a canonical article`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},buildWorkflowHandler(`consolidate`,t,`topic`,buildBody$2))}const PREVIEW_URL_SOURCES=[`lock`];function encodeDocName(e){return e.split(`/`).map(encodeURIComponent).join(`/`)}const START_UI_MESSAGE='No UI is running for this project. Start one to see the preview: `ok ui` (terminal), `preview_start("open-knowledge-ui")` (Claude Code Desktop), or open the project in OK Electron.',ATTACH_PREVIEW_ONCE_MESSAGE=`No browser is attached to the preview. Open it with preview_start, or call get_preview_url for the URL.`;function buildPreviewAttachWarning(e){return e?{action:`attach-preview-once`,previewUrl:e.url,message:ATTACH_PREVIEW_ONCE_MESSAGE}:{action:`start-ui`,previewUrl:null,message:START_UI_MESSAGE}}const START_UI_TEXT_HINT=START_UI_MESSAGE;async function resolvePreviewUrlForTool(e,t,S){return resolvePreviewUrl(e,{lockDir:resolveLockDir(S??await t.resolveCwd())})}function resolveUiInfo(e){try{let t=readUiLock(e.lockDir);if(t&&t.port>0)return{baseUrl:`http://localhost:${t.port}`}}catch(t){process.stderr.write(`[preview-url] readUiLock failed at ${e.lockDir} while resolving ui info: ${t instanceof Error?t.message:String(t)}\n`)}return{baseUrl:null}}async function buildListResolver(e,t){let S={lockDir:resolveLockDir(t??await e.resolveCwd())};return{resolve:e=>resolvePreviewUrl(e,S)}}function docNameFromPath(e){let t=e.toLowerCase();return t.endsWith(`.md`)?e.slice(0,-3):t.endsWith(`.mdx`)?e.slice(0,-4):e}function resolvePreviewUrl(e,t){let S=`/#/${encodeDocName(e)}`;try{let e=readUiLock(t.lockDir);if(e&&e.port>0)return{url:S,source:`lock`}}catch(e){process.stderr.write(`[preview-url] readUiLock failed at ${t.lockDir}: ${e instanceof Error?e.message:String(e)}\n`)}return null}const DESCRIPTION$21=["[Requires: Hocuspocus server] Delete a document through the managed delete flow at `POST /api/delete-path` (kind: file).",`Closes all open agent sessions for the doc, unloads it from Hocuspocus, and removes the file from disk.`,``,`**Parameters:**`,"- `docName` — A single document to delete, typically extension-less. A trailing `.md` or `.mdx` is stripped automatically.","- `docNames` — Batch form: an array of documents to delete in one call. Mutually exclusive with `docName`. Each is deleted independently; the response reports per-doc status.",``,`**Notes:**`,'- Inbound wiki-links to the deleted doc become dead links (redlinks) — they are NOT rewritten. Call `links({ kind: "backlinks", docName: "your-doc" })` BEFORE deleting to see which docs link here, then update or remove those references first.','- Deletion is irreversible from this tool. Use `version({ action: "save" })` beforehand if you may need to roll back.',"- The structured response includes `previousPreviewUrl` (when a preview source resolves) so agents can close any stale preview tab pointing at the deleted doc.",``,`**Errors:**`,"- 400 — `docName` is not a valid relative content path.",`- 404 — document does not exist.`].join(`
2393
+ `);function parseDeletedDocNames(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}async function deleteOne(e,t,S,w){let E=normalizeDocName(e);if(!E.ok)return{docName:e,ok:!1,error:E.error};let D=w.identityRef?.current,O=await httpPost(t,`/api/delete-path`,{kind:`file`,path:E.docName,...D?{agentId:D.connectionId,agentName:D.displayName,clientName:D.clientInfo?.name,colorSeed:D.colorSeed}:{}});if(!O.ok)return{docName:E.docName,ok:!1,error:O.error};let k=parseDeletedDocNames(O.deletedDocNames),j=await resolvePreviewUrlForTool(E.docName,{config:w.config,resolveCwd:w.resolveCwd},S);return{docName:E.docName,ok:!0,deletedDocNames:k.length>0?k:[E.docName],...j?{previousPreviewUrl:j.url}:{}}}function register$21(e,t){e.registerTool(`delete_document`,{description:DESCRIPTION$21,inputSchema:{docName:string$2().optional().describe(`A single document to delete.`),docNames:array(string$2()).min(1).optional().describe("Batch: documents to delete in one call. Mutually exclusive with `docName`."),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,url:E}=S;if(!E)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);if(e.docName===void 0&&e.docNames===void 0)return textResult("Error: provide `docName` (single) or `docNames` (batch).",!0);if(e.docName!==void 0&&e.docNames!==void 0)return textResult("Error: `docName` and `docNames` are mutually exclusive.",!0);if(e.docNames!==void 0){let S=await Promise.all(e.docNames.map(e=>deleteOne(e,E,w,t))),D=S.filter(e=>e.ok).length,O=D===S.length,k=S.map(e=>e.ok?`Deleted ${e.docName}.`:`Failed ${e.docName}: ${e.error}`);return textPlusStructured(`${D}/${S.length} deleted.\n${k.join(`
2329
2394
  `)}`,{ok:O,documents:S},!O)}let D=await deleteOne(e.docName,E,w,t);if(!D.ok){let e={ok:!1,error:D.error??`unknown error`};return textPlusStructured(`Error: ${e.error}`,e,!0)}let O=D.deletedDocNames??[D.docName],k={ok:!0,deletedDocNames:O,...D.previousPreviewUrl?{previousPreviewUrl:D.previousPreviewUrl}:{}};return textPlusStructured(O.length===1?`Deleted ${O[0]}.`:`Deleted ${O.length} documents: ${O.join(`, `)}.`,k)})}function buildDiscoverBody(e){return`# Discover — Project Convention Extraction + Link Graph Activation
2330
2395
 
2331
2396
  You're invoked because (a) the user explicitly asked to set up an existing repo, OR (b) an \`exec\` directory listing surfaced a hint because content exists with no folder frontmatter / templates configured. Your job: **extract conventions from existing siblings + activate the link graph, leaving the repo more structured and more navigable than you found it.**
@@ -2638,27 +2703,27 @@ Link-graph activation:
2638
2703
  - **Server down** (Phase 5 step 0): Phases 1-4 already applied fs-direct; surface "the link-graph phase needs \`ok start\` running" and exit cleanly — re-invoking resumes at Phase 5.
2639
2704
  - **User aborts at any STOP gate** → exit cleanly, leaving any already-applied proposals in place (apply is per-phase, not all-or-nothing).
2640
2705
  - **Validation failure** (Phase 6) → don't pretend to succeed; surface the failed step to the user.
2641
- `}const DESCRIPTION$19=[`Returns a step-by-step plan for setting up an existing repo: extract folder conventions, write folder frontmatter + templates, activate the link graph. Does NOT execute the plan — you run it, with per-phase user confirmation.`,``,"Invoke on first arrival at a repo that has markdown content but no folder frontmatter / templates (an `exec` listing shows empty `frontmatter_defaults` + `templates_available`). Skip empty repos (use `ok seed`) and already-configured ones. One-shot per project; idempotent on re-run (extends, never re-proposes).",``,"Phases 1-4 run fs-direct; Phase 5 (link-graph activation) needs `ok start`. Composes existing tools only — `exec`, `links`, `search`, `folder_config`, `edit_document`."].join(`
2642
- `),InputSchema$5={cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},OutputSchema$8=outputSchemaWithText({previewUrl:_null()});function register$19(e,t){e.registerTool(`discover`,{description:DESCRIPTION$19,inputSchema:InputSchema$5,outputSchema:OutputSchema$8,annotations:{readOnlyHint:!1,idempotentHint:!0,destructiveHint:!1}},async e=>{let S=await resolveProjectConfigContext(t.resolveCwd,t.config,e.cwd);return S.ok?textPlusStructured(buildDiscoverBody(S.config.content.dir),{previewUrl:null}):textResult(`Error: ${S.error}`,!0)})}const DESCRIPTION$18=`${["[Requires: Hocuspocus server] Find-and-replace on a live document via the CRDT layer. The patch propagates to all connected editors in real-time. Use `offset` to target an exact occurrence; omit for first-match.",``,'**Body-only.** Frontmatter-intersecting find/replace is rejected with HTTP 400. For frontmatter: 1-2 keys → `edit_frontmatter`; full rewrite → `write_document({ position: "replace" })`.',``,`**Parameters:**`,"- `docName` — Document name, extension-less. Trailing `.md`/`.mdx` stripped.","- `find` — Text to find (exact match).","- `replace` — Replacement text.",'- `offset` — Optional JavaScript string offset of the exact occurrence to patch. Stale offsets return an error; re-fetch via `links({ kind: "suggest", docName })`.',"- `summary` — Optional one-line user-outcome (≤80 chars). Avoid secrets or PII — persisted to git history."].join(`
2643
- `)}\n${renderInventoryFooter()}`;function register$18(e,t){e.registerTool(`edit_document`,{description:DESCRIPTION$18,inputSchema:{docName:string$2().describe(`Document name to edit`),find:string$2().describe(`Text to find (exact match)`),replace:string$2().describe(`Replacement text`),offset:number$1().int().min(0).optional().describe(`Exact occurrence to patch, as a JavaScript string offset in the current markdown`),summary:summaryArgSchema,cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,url:E}=S;if(!E)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let D=normalizeDocName(e.docName);if(!D.ok)return textResult(D.error,!0);let O=t.identityRef?.current,k=await httpPost(E,`/api/agent-patch`,{docName:D.docName,find:e.find,replace:e.replace,offset:e.offset,...e.summary===void 0?{}:{summary:e.summary},...O?{agentId:O.connectionId,agentName:O.displayName,clientName:O.clientInfo?.name,colorSeed:O.colorSeed}:{}});if(!k.ok)return textResult(`Error: ${k.error}`,!0);let j=resolveLockDir(w),F=resolvePreviewUrl(D.docName,{lockDir:j}),L=typeof k.subscriberCount==`number`?k.subscriberCount:void 0,B=(typeof k.systemSubscriberCount==`number`?k.systemSubscriberCount:void 0)===0,H=L===0,q=k.summary&&typeof k.summary==`object`?k.summary:void 0,J=typeof q?.hint==`string`?q.hint:void 0,Y=[`Edit applied successfully.`];B&&!F&&Y.push(START_UI_TEXT_HINT),J&&Y.push(J);let ee=Y.join(`
2644
- `);if(!F&&!B&&!H&&!q)return textResult(ee);let te={};return F&&(te.previewUrl=F.url,te.previewUrlSource=F.source),B&&(te.warning=buildPreviewAttachWarning(F)),q&&(te.summary=q),textPlusStructured(ee,te)})}const DESCRIPTION$17=[`[Requires: Hocuspocus server] Set, create, or delete frontmatter properties via JSON Merge Patch (RFC 7396).`,``,`Field-level CRDT merge: concurrent patches to different keys (human form + this tool, or two agents) merge cleanly. Same-key concurrent writes resolve last-writer-wins per key.`,``,'**Use this tool — not `edit_document` — for any frontmatter change.** `edit_document` (agent-patch) targets body content; FM-intersecting `edit_document` calls return HTTP 400. For full-document rewrites (≥3-5 frontmatter keys changing), `write_document({ position: "replace" })` remains the canonical pathway.',``,`**Parameters:**`,"- `docName` — Document name. A trailing `.md` or `.mdx` is stripped automatically.","- `patch` — Object whose keys are property names. Each value is the new value (string, number, boolean, or array of strings) to **set or create** the key, or `null` to **delete** the key. Keys not present in `patch` are unchanged.","- `types` (optional) — **Currently ignored.** Shape-validated for forward-compat but not persisted server-side; type is inferred from value shape on read. Reserved for a future per-key widget-type override (`text | number | boolean | date | list`) once persistence ships.",'- `summary` — Optional one-line user-outcome description (≤80 chars). Prefer outcome phrasing ("Marked spec as approved") over structural ("Set status field"). Avoid secrets / PII — summaries persist to git history.',``,`**Atomicity:** any value failing schema validation rejects the WHOLE patch (HTTP 400 with per-key error report). Either every change commits or none do.`].join(`
2645
- `),PatchValueSchema=union([FrontmatterValueSchema,_null()]).describe("Property value (string|number|boolean|string[]) — `null` deletes the key");function register$17(e,t){e.registerTool(`edit_frontmatter`,{description:DESCRIPTION$17,inputSchema:{docName:string$2().describe(`Document name`),patch:record(string$2(),PatchValueSchema).describe("JSON Merge Patch — `{key: value}` sets, `{key: null}` deletes"),types:record(string$2(),_enum(FRONTMATTER_TYPES)).optional().describe(`Currently ignored (shape-validated for forward-compat but not persisted). Type is inferred from value shape on read. Will become a real per-key widget-type override (text|number|boolean|date|list) once persistence lands.`),summary:summaryArgSchema,cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,url:E}=S;if(!E)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let D=normalizeDocName(e.docName);if(!D.ok)return textResult(D.error,!0);let O=t.identityRef?.current,k=await httpPost(E,`/api/frontmatter-patch`,{docName:D.docName,patch:e.patch,...e.types?{types:e.types}:{},...e.summary===void 0?{}:{summary:e.summary},...O?{agentId:O.connectionId,agentName:O.displayName,clientName:O.clientInfo?.name,colorSeed:O.colorSeed}:{}});if(!k.ok){let e=k.error,t=k.fieldErrors&&typeof k.fieldErrors==`object`?k.fieldErrors:void 0;return textResult(t?`Error: ${e}\n${Object.entries(t).map(([e,t])=>` ${e}: ${t}`).join(`
2706
+ `}const DESCRIPTION$20=[`Returns a step-by-step plan for setting up an existing repo: extract folder conventions, write folder frontmatter + templates, activate the link graph. Does NOT execute the plan — you run it, with per-phase user confirmation.`,``,"Invoke on first arrival at a repo that has markdown content but no folder frontmatter / templates (an `exec` listing shows empty `frontmatter_defaults` + `templates_available`). Skip empty repos (use `ok seed`) and already-configured ones. One-shot per project; idempotent on re-run (extends, never re-proposes).",``,"Phases 1-4 run fs-direct; Phase 5 (link-graph activation) needs `ok start`. Composes existing tools only — `exec`, `links`, `search`, `folder_config`, `edit_document`."].join(`
2707
+ `),InputSchema$5={cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},OutputSchema$9=outputSchemaWithText({previewUrl:_null()});function register$20(e,t){e.registerTool(`discover`,{description:DESCRIPTION$20,inputSchema:InputSchema$5,outputSchema:OutputSchema$9,annotations:{readOnlyHint:!1,idempotentHint:!0,destructiveHint:!1}},async e=>{let S=await resolveProjectConfigContext(t.resolveCwd,t.config,e.cwd);return S.ok?textPlusStructured(buildDiscoverBody(S.config.content.dir),{previewUrl:null}):textResult(`Error: ${S.error}`,!0)})}const DESCRIPTION$19=`${["[Requires: Hocuspocus server] Find-and-replace on a live document via the CRDT layer. The patch propagates to all connected editors in real-time. Use `offset` to target an exact occurrence; omit for first-match.",``,'**Body-only.** Frontmatter-intersecting find/replace is rejected with HTTP 400. For frontmatter: 1-2 keys → `edit_frontmatter`; full rewrite → `write_document({ position: "replace" })`.',``,`**Parameters:**`,"- `docName` — Document name, extension-less. Trailing `.md`/`.mdx` stripped.","- `find` — Text to find (exact match).","- `replace` — Replacement text.",'- `offset` — Optional JavaScript string offset of the exact occurrence to patch. Stale offsets return an error; re-fetch via `links({ kind: "suggest", docName })`.',"- `summary` — Optional one-line user-outcome (≤80 chars). Avoid secrets or PII — persisted to git history."].join(`
2708
+ `)}\n${renderInventoryFooter()}`;function register$19(e,t){e.registerTool(`edit_document`,{description:DESCRIPTION$19,inputSchema:{docName:string$2().describe(`Document name to edit`),find:string$2().describe(`Text to find (exact match)`),replace:string$2().describe(`Replacement text`),offset:number$1().int().min(0).optional().describe(`Exact occurrence to patch, as a JavaScript string offset in the current markdown`),summary:summaryArgSchema,cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,url:E}=S;if(!E)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let D=normalizeDocName(e.docName);if(!D.ok)return textResult(D.error,!0);let O=t.identityRef?.current,k=await httpPost(E,`/api/agent-patch`,{docName:D.docName,find:e.find,replace:e.replace,offset:e.offset,...e.summary===void 0?{}:{summary:e.summary},...O?{agentId:O.connectionId,agentName:O.displayName,clientName:O.clientInfo?.name,colorSeed:O.colorSeed}:{}});if(!k.ok)return textResult(`Error: ${k.error}`,!0);let j=resolveLockDir(w),F=resolvePreviewUrl(D.docName,{lockDir:j}),L=typeof k.subscriberCount==`number`?k.subscriberCount:void 0,B=(typeof k.systemSubscriberCount==`number`?k.systemSubscriberCount:void 0)===0,H=L===0,q=k.summary&&typeof k.summary==`object`?k.summary:void 0,J=typeof q?.hint==`string`?q.hint:void 0,Y=[`Edit applied successfully.`];B&&!F&&Y.push(START_UI_TEXT_HINT),J&&Y.push(J);let ee=Y.join(`
2709
+ `);if(!F&&!B&&!H&&!q)return textResult(ee);let te={};return F&&(te.previewUrl=F.url,te.previewUrlSource=F.source),B&&(te.warning=buildPreviewAttachWarning(F)),q&&(te.summary=q),textPlusStructured(ee,te)})}const DESCRIPTION$18=[`[Requires: Hocuspocus server] Set, create, or delete frontmatter properties via JSON Merge Patch (RFC 7396).`,``,`Field-level CRDT merge: concurrent patches to different keys (human form + this tool, or two agents) merge cleanly. Same-key concurrent writes resolve last-writer-wins per key.`,``,'**Use this tool — not `edit_document` — for any frontmatter change.** `edit_document` (agent-patch) targets body content; FM-intersecting `edit_document` calls return HTTP 400. For full-document rewrites (≥3-5 frontmatter keys changing), `write_document({ position: "replace" })` remains the canonical pathway.',``,`**Parameters:**`,"- `docName` — Document name. A trailing `.md` or `.mdx` is stripped automatically.","- `patch` — Object whose keys are property names. Each value is the new value (string, number, boolean, or array of strings) to **set or create** the key, or `null` to **delete** the key. Keys not present in `patch` are unchanged.","- `types` (optional) — **Currently ignored.** Shape-validated for forward-compat but not persisted server-side; type is inferred from value shape on read. Reserved for a future per-key widget-type override (`text | number | boolean | date | list`) once persistence ships.",'- `summary` — Optional one-line user-outcome description (≤80 chars). Prefer outcome phrasing ("Marked spec as approved") over structural ("Set status field"). Avoid secrets / PII — summaries persist to git history.',``,`**Atomicity:** any value failing schema validation rejects the WHOLE patch (HTTP 400 with per-key error report). Either every change commits or none do.`].join(`
2710
+ `),PatchValueSchema=union([FrontmatterValueSchema,_null()]).describe("Property value (string|number|boolean|string[]) — `null` deletes the key");function register$18(e,t){e.registerTool(`edit_frontmatter`,{description:DESCRIPTION$18,inputSchema:{docName:string$2().describe(`Document name`),patch:record(string$2(),PatchValueSchema).describe("JSON Merge Patch — `{key: value}` sets, `{key: null}` deletes"),types:record(string$2(),_enum(FRONTMATTER_TYPES)).optional().describe(`Currently ignored (shape-validated for forward-compat but not persisted). Type is inferred from value shape on read. Will become a real per-key widget-type override (text|number|boolean|date|list) once persistence lands.`),summary:summaryArgSchema,cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,url:E}=S;if(!E)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let D=normalizeDocName(e.docName);if(!D.ok)return textResult(D.error,!0);let O=t.identityRef?.current,k=await httpPost(E,`/api/frontmatter-patch`,{docName:D.docName,patch:e.patch,...e.types?{types:e.types}:{},...e.summary===void 0?{}:{summary:e.summary},...O?{agentId:O.connectionId,agentName:O.displayName,clientName:O.clientInfo?.name,colorSeed:O.colorSeed}:{}});if(!k.ok){let e=k.error,t=k.fieldErrors&&typeof k.fieldErrors==`object`?k.fieldErrors:void 0;return textResult(t?`Error: ${e}\n${Object.entries(t).map(([e,t])=>` ${e}: ${t}`).join(`
2646
2711
  `)}`:`Error: ${e}`,!0)}let j=resolveLockDir(w),F=resolvePreviewUrl(D.docName,{lockDir:j}),L=typeof k.subscriberCount==`number`?k.subscriberCount:void 0,B=(typeof k.systemSubscriberCount==`number`?k.systemSubscriberCount:void 0)===0,H=L===0,q=k.summary&&typeof k.summary==`object`?k.summary:void 0,J=typeof q?.hint==`string`?q.hint:void 0,Y=[],ee=[];for(let[t,S]of Object.entries(e.patch))S===null?ee.push(t):Y.push(t);let te=[`Frontmatter patched (${[Y.length?`${Y.length} set`:``,ee.length?`${ee.length} deleted`:``].filter(Boolean).join(`, `)||`${Object.keys(e.patch).length} key(s)`}).`];B&&!F&&te.push(START_UI_TEXT_HINT),J&&te.push(J);let ne=te.join(`
2647
2712
  `);if(!F&&!B&&!H&&!q)return textResult(ne);let ae={};return F&&(ae.previewUrl=F.url,ae.previewUrlSource=F.source),B&&(ae.warning=buildPreviewAttachWarning(F)),q&&(ae.summary=q),textPlusStructured(ne,ae)})}const PRODUCER_COMMANDS=new Set([`cat`,`ls`,`grep`,`find`]),PATH_FALLBACK_RE=/\b[\w./-]+\.(md|mdx)\b/g;function isWikiPath(e){return/\.(md|mdx)$/.test(e)}function normalize$1(e){let t=e.trim();return t?(t=t.replace(/\/+/g,`/`),t.startsWith(`./`)&&(t=t.slice(2)),t.endsWith(`/`)&&(t=t.slice(0,-1)),t):``}function argsOf(e){return e.args.slice(1)}function nonFlagArgs(e){return e.filter(e=>!e.startsWith(`-`))}function extractFromCat(e){return nonFlagArgs(argsOf(e)).filter(isWikiPath)}function extractFromLs(e,t){let S=nonFlagArgs(argsOf(t)),w=S.length>0?S[S.length-1]:``,E=w&&w!==`.`?normalize$1(w):``,D=[];E&&D.push(E);for(let t of e.split(`
2648
2713
  `)){let e=t.trim();if(!e||/\.[a-z0-9]+$/i.test(e)&&!isWikiPath(e))continue;let S=E?`${E}/${e}`:e;D.push(S)}return D}function extractFromGrep(e){let t=[];for(let S of e.split(`
2649
2714
  `)){if(!S)continue;let e=S.indexOf(`:`);if(e<0)continue;let w=normalize$1(S.slice(0,e));isWikiPath(w)&&t.push(w)}return t}function extractFromFind(e){let t=[];for(let S of e.split(`
2650
- `)){let e=normalize$1(S);e&&isWikiPath(e)&&t.push(e)}return t}function extractFromHeadTail(e){return nonFlagArgs(argsOf(e)).filter(isWikiPath)}function headTailActsAsProducer(e){return nonFlagArgs(argsOf(e)).length>0}function fallback(e){let t=[],S=e.matchAll(PATH_FALLBACK_RE);for(let e of S)t.push(normalize$1(e[0]));return t}function extractReferencedPaths(e,t){let S=null;for(let e=t.length-1;e>=0;e--){let w=t[e];if(PRODUCER_COMMANDS.has(w.command)){S=w;break}if((w.command===`head`||w.command===`tail`)&&headTailActsAsProducer(w)){S=w;break}}let w;if(!S)w=fallback(e);else{switch(S.command){case`cat`:w=extractFromCat(S);break;case`ls`:w=extractFromLs(e,S);break;case`grep`:w=extractFromGrep(e);break;case`find`:w=extractFromFind(e);break;case`head`:case`tail`:w=extractFromHeadTail(S);break;default:w=fallback(e)}w.length===0&&(w=fallback(e))}let E=new Set,D=[];for(let e of w){let t=normalize$1(e);!t||E.has(t)||(E.add(t),D.push(t))}return D}function shellEscape(e){return e===``?`''`:/^[\w.\-/]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}const MAX_STDOUT_BYTES=16*1024*1024;var StdoutOverflowError=class extends Error{limitBytes;actualBytes;partial;constructor(e,t,S){super(`Output exceeded ${e} byte buffer (got ${t}); narrow the command`),this.name=`StdoutOverflowError`,this.limitBytes=e,this.actualBytes=t,this.partial=S}};function createBashInstance(e){if(!isAbsolute(e))throw Error(`createBashInstance: cwd must be absolute (got: ${e})`);return new xt({cwd:`/`,fs:new Ss({root:resolve(e),allowSymlinks:!1})})}async function execBash(e,t){let S=await e.exec(t);if(S.stdout.length>MAX_STDOUT_BYTES)throw new StdoutOverflowError(MAX_STDOUT_BYTES,S.stdout.length,{stdout:S.stdout.slice(0,MAX_STDOUT_BYTES),stderr:S.stderr,exitCode:S.exitCode});return{stdout:S.stdout,stderr:S.stderr,exitCode:S.exitCode}}const SCAN_CAP=1e3,SKIP_DIRS=new Set([`.git`,`.ok`,`node_modules`,`.changeset`,`.claude`,`.agents`,`dist`,`build`]);async function snapshotMtimes(e){let t=resolve(e),S=new Map,w=0,E=!1;async function D(e){if(E)return;let O;try{O=await readdir(e,{withFileTypes:!0})}catch{return}for(let k of O){if(E)return;if(k.isDirectory()&&SKIP_DIRS.has(k.name))continue;let O=resolve(e,k.name);if(k.isDirectory()){await D(O);continue}if(k.isFile()){if(w>=SCAN_CAP){E=!0;return}try{let e=await stat$1(O);S.set(relative(t,O),e.mtimeMs),w++}catch{}}}}return await D(t),{snapshot:S,truncated:E}}function diffMtimes(e,t){let S=[];for(let[w,E]of t){let t=e.get(w);(t===void 0||t!==E)&&S.push(w)}for(let[w]of e)t.has(w)||S.push(w);return{changed:S}}const WIKI_EXCLUDE_DIRS=[`node_modules`,`.git`,`dist`,`build`,`.next`,`.turbo`,`.nuxt`,`coverage`,`.cache`,`.parcel-cache`,`.vercel`,`.ok`,`.claude`];function isRecursiveGrepFlag(e){return e===`--recursive`||e===`--dereference-recursive`?!0:e.startsWith(`--`)||!e.startsWith(`-`)?!1:/[rR]/.test(e.slice(1))}const STRATEGIES=[{command:`grep`,applies:e=>e.slice(1).some(isRecursiveGrepFlag),hasUserExcludes:e=>e.some(e=>e===`--exclude-dir`||e.startsWith(`--exclude-dir=`)),buildExcludeArgs:e=>e.map(e=>`--exclude-dir=${e}`),insertionIndex:()=>1},{command:`find`,applies:()=>!0,hasUserExcludes:e=>e.slice(1).some(e=>e===`-not`||e===`!`||e===`-prune`),buildExcludeArgs:e=>{let t=[];for(let S of e)t.push(`-not`,`-path`,`*/${S}/*`);return t},insertionIndex:e=>{for(let t=1;t<e.length;t++)if(e[t].startsWith(`-`))return t;return e.length}}];function augmentStagesWithExcludes(e){return e.map(e=>{let t=STRATEGIES.find(t=>t.command===e.command);if(!t||!t.applies(e.args)||t.hasUserExcludes(e.args))return e;let S=t.buildExcludeArgs(WIKI_EXCLUDE_DIRS),w=t.insertionIndex(e.args);return{command:e.command,args:[...e.args.slice(0,w),...S,...e.args.slice(w)]}})}function serializeStages(e){return e.map(e=>e.args.map(shellEscape).join(` `)).join(` | `)}const ALLOWLIST=new Set([`cat`,`ls`,`grep`,`find`,`head`,`tail`,`wc`,`sort`,`uniq`,`cut`]),ALLOWLIST_HINT=`cat, ls, grep, find, head, tail, wc, sort, uniq, cut`,WRITE_OPS=new Set([`>`,`>>`,`<`,`>&`,`<&`,`|&`]),SHELL_CONSTRUCT_OPS=new Set([`&`,`;`,`;;`,`&&`,`||`,`(`,`)`,`<(`,`>(`,`<<`,`<<-`]),UNIVERSAL_FLAG_DENY=new Set([`-o`,`--output-file`,`--output`]),UNIVERSAL_FLAG_PREFIX_DENY=[`-o=`,`--output-file=`,`--output=`],FIND_FLAG_DENY=new Set([`-exec`,`-execdir`,`-delete`,`-fprint`,`-fprintf`,`-fprint0`,`-ok`,`-okdir`]),SUSPICIOUS_STRING_RE=/[`]|\$\(|\$\{|\$'/;function isOpToken(e){return typeof e==`object`&&!!e&&`op`in e}function opTokenError(e){let t=typeof e.op==`string`?e.op:`(unknown)`;return WRITE_OPS.has(t)?{category:`write_blocked`,message:`Write operation blocked: '${t}'. exec is read-only. For document changes, use write_document or edit_document.`}:SHELL_CONSTRUCT_OPS.has(t)?{category:`shell_construct_blocked`,message:`Shell construct '${t}' is not supported. Only pipes (|) are allowed between allowlisted stages.`}:{category:`shell_construct_blocked`,message:`Operator '${t}' is not supported.`}}function buildStageArgs(e){let t=[];for(let S of e){if(typeof S==`string`){if(SUSPICIOUS_STRING_RE.test(S))return{error:{category:`shell_construct_blocked`,message:`Argument '${S}' contains a shell-injection pattern (backtick, $(), or \${}); not supported.`}};t.push(S);continue}if(!isOpToken(S))return{error:{category:`shell_construct_blocked`,message:`Unrecognized token shape.`}};if(S.op===`glob`&&typeof S.pattern==`string`){t.push(S.pattern);continue}return typeof S.comment==`string`?{error:{category:`shell_construct_blocked`,message:`Comments are not allowed in exec commands.`}}:{error:opTokenError(S)}}return{args:t}}function checkStage(e){if(!ALLOWLIST.has(e.command))return{category:`unknown_command`,message:`Command '${e.command}' is not in the allowlist. For pattern matching try 'grep'; for file listing try 'ls' or 'find'. Allowlist: ${ALLOWLIST_HINT}.`};for(let t of e.args.slice(1)){if(UNIVERSAL_FLAG_DENY.has(t)||UNIVERSAL_FLAG_PREFIX_DENY.some(e=>t.startsWith(e)))return{category:`write_blocked`,message:`Write operation blocked: '${t}'. exec is read-only. For document changes, use write_document or edit_document.`};if(e.command===`find`&&FIND_FLAG_DENY.has(t))return{category:`write_blocked`,message:`find flag '${t}' is blocked (executes commands or deletes files). Use exec for read-only discovery; chain with another allowlisted tool via '|' if you need to transform output.`}}return null}function parseCommand(e){let t=e.trim();if(!t)return{error:{category:`unknown_command`,message:`Empty command.`}};let S;try{S=import_shell_quote.parse(t)}catch{return{error:{category:`shell_construct_blocked`,message:`Failed to parse command — likely malformed quoting or an unsupported construct.`}}}let w=[],E=[];for(let e of S){if(isOpToken(e)&&e.op===`|`){w.push(E),E=[];continue}E.push(e)}w.push(E);let D=[];for(let e of w){let t=buildStageArgs(e);if(`error`in t)return t;if(t.args.length===0)return{error:{category:`shell_construct_blocked`,message:`Empty pipeline stage (trailing pipe or leading pipe).`}};let S={command:t.args[0],args:t.args},w=checkStage(S);if(w)return{error:w};D.push(S)}return{stages:D}}const SOFT_CAP_LINES=500,SOFT_CAP_BYTES=50*1024,BINARY_EXT_RE=/\.(png|jpe?g|gif|webp|svg|pdf|zip|tar|gz|tgz|mp4|mov|mp3|wav|ico|bmp)$/i,DESCRIPTION$16=["**STOP — native tools on in-scope markdown (when project has `.ok/`).** When the active project contains `.ok/`, do NOT use your host's native `Read`, `Grep`, or `Glob` on `.md` / `.mdx` paths inside OK's content directory — use `exec` (this tool) instead. Native file tools skip frontmatter, backlinks, shadow-repo activity, and project git history that `exec` returns for every matched wiki file. Reserve native `Read`/`Grep`/`Glob` for source code, non-markdown paths, and projects without `.ok/`.",``,`Run a read-only bash-like command against the project content directory. Returns raw stdout plus enriched metadata for every wiki file referenced (frontmatter, backlink/forward-link counts, shadow-repo activity with agent/human attribution).`,``,`Allowlist: cat, ls, grep, find, head, tail, wc, sort, uniq, cut. Pipes (|) work between stages. Redirections, subshells, and writes are rejected.`,``,"cwd: the command runs in the explicit absolute `cwd` you pass, or in the MCP client's only advertised root when there is exactly one. If the client has zero or multiple roots, pass `cwd` explicitly. Paths inside the command resolve relative to that cwd; traversal above it is rejected.",``,"Stdout provenance headers (GNU-style): `ls <dir>/` prepends `<dir>/:`, single-file `cat`/`head`/`tail` prepends `==> <path> <==`, so the subject of the command is visible in raw output. Multi-file `cat a b` emits no header — the `enrichedPaths` array still lists every file. `head`/`tail` used as pipe trimmers (no file arg) defer to the upstream producer.",``,`Examples:`,'- `exec({ command: "cat articles/auth.md" })` — file contents + full enrichment','- `exec({ command: "ls articles/" })` — listing + per-file enrichment (slim)','- `exec({ command: "grep -rn oauth articles/ | head -5" })` — pipe with enrichment on matched files','- `exec({ command: "ls", cwd: "/abs/path/to/other-repo" })` — run in a different project'].join(`
2715
+ `)){let e=normalize$1(S);e&&isWikiPath(e)&&t.push(e)}return t}function extractFromHeadTail(e){return nonFlagArgs(argsOf(e)).filter(isWikiPath)}function headTailActsAsProducer(e){return nonFlagArgs(argsOf(e)).length>0}function fallback(e){let t=[],S=e.matchAll(PATH_FALLBACK_RE);for(let e of S)t.push(normalize$1(e[0]));return t}function extractReferencedPaths(e,t){let S=null;for(let e=t.length-1;e>=0;e--){let w=t[e];if(PRODUCER_COMMANDS.has(w.command)){S=w;break}if((w.command===`head`||w.command===`tail`)&&headTailActsAsProducer(w)){S=w;break}}let w;if(!S)w=fallback(e);else{switch(S.command){case`cat`:w=extractFromCat(S);break;case`ls`:w=extractFromLs(e,S);break;case`grep`:w=extractFromGrep(e);break;case`find`:w=extractFromFind(e);break;case`head`:case`tail`:w=extractFromHeadTail(S);break;default:w=fallback(e)}w.length===0&&(w=fallback(e))}let E=new Set,D=[];for(let e of w){let t=normalize$1(e);!t||E.has(t)||(E.add(t),D.push(t))}return D}function shellEscape(e){return e===``?`''`:/^[\w.\-/]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}const MAX_STDOUT_BYTES=16*1024*1024;var StdoutOverflowError=class extends Error{limitBytes;actualBytes;partial;constructor(e,t,S){super(`Output exceeded ${e} byte buffer (got ${t}); narrow the command`),this.name=`StdoutOverflowError`,this.limitBytes=e,this.actualBytes=t,this.partial=S}};function createBashInstance(e){if(!isAbsolute(e))throw Error(`createBashInstance: cwd must be absolute (got: ${e})`);return new xt({cwd:`/`,fs:new Ss({root:resolve(e),allowSymlinks:!1})})}async function execBash(e,t){let S=await e.exec(t);if(S.stdout.length>MAX_STDOUT_BYTES)throw new StdoutOverflowError(MAX_STDOUT_BYTES,S.stdout.length,{stdout:S.stdout.slice(0,MAX_STDOUT_BYTES),stderr:S.stderr,exitCode:S.exitCode});return{stdout:S.stdout,stderr:S.stderr,exitCode:S.exitCode}}const SCAN_CAP=1e3,SKIP_DIRS=new Set([`.git`,`.ok`,`node_modules`,`.changeset`,`.claude`,`.agents`,`dist`,`build`]);async function snapshotMtimes(e){let t=resolve(e),S=new Map,w=0,E=!1;async function D(e){if(E)return;let O;try{O=await readdir(e,{withFileTypes:!0})}catch{return}for(let k of O){if(E)return;if(k.isDirectory()&&SKIP_DIRS.has(k.name))continue;let O=resolve(e,k.name);if(k.isDirectory()){await D(O);continue}if(k.isFile()){if(w>=SCAN_CAP){E=!0;return}try{let e=await stat$1(O);S.set(relative(t,O),e.mtimeMs),w++}catch{}}}}return await D(t),{snapshot:S,truncated:E}}function diffMtimes(e,t){let S=[];for(let[w,E]of t){let t=e.get(w);(t===void 0||t!==E)&&S.push(w)}for(let[w]of e)t.has(w)||S.push(w);return{changed:S}}const WIKI_EXCLUDE_DIRS=[`node_modules`,`.git`,`dist`,`build`,`.next`,`.turbo`,`.nuxt`,`coverage`,`.cache`,`.parcel-cache`,`.vercel`,`.ok`,`.claude`];function isRecursiveGrepFlag(e){return e===`--recursive`||e===`--dereference-recursive`?!0:e.startsWith(`--`)||!e.startsWith(`-`)?!1:/[rR]/.test(e.slice(1))}const STRATEGIES=[{command:`grep`,applies:e=>e.slice(1).some(isRecursiveGrepFlag),hasUserExcludes:e=>e.some(e=>e===`--exclude-dir`||e.startsWith(`--exclude-dir=`)),buildExcludeArgs:e=>e.map(e=>`--exclude-dir=${e}`),insertionIndex:()=>1},{command:`find`,applies:()=>!0,hasUserExcludes:e=>e.slice(1).some(e=>e===`-not`||e===`!`||e===`-prune`),buildExcludeArgs:e=>{let t=[];for(let S of e)t.push(`-not`,`-path`,`*/${S}/*`);return t},insertionIndex:e=>{for(let t=1;t<e.length;t++)if(e[t].startsWith(`-`))return t;return e.length}}];function augmentStagesWithExcludes(e){return e.map(e=>{let t=STRATEGIES.find(t=>t.command===e.command);if(!t||!t.applies(e.args)||t.hasUserExcludes(e.args))return e;let S=t.buildExcludeArgs(WIKI_EXCLUDE_DIRS),w=t.insertionIndex(e.args);return{command:e.command,args:[...e.args.slice(0,w),...S,...e.args.slice(w)]}})}function serializeStages(e){return e.map(e=>e.args.map(shellEscape).join(` `)).join(` | `)}const ALLOWLIST=new Set([`cat`,`ls`,`grep`,`find`,`head`,`tail`,`wc`,`sort`,`uniq`,`cut`]),ALLOWLIST_HINT=`cat, ls, grep, find, head, tail, wc, sort, uniq, cut`,WRITE_OPS=new Set([`>`,`>>`,`<`,`>&`,`<&`,`|&`]),SHELL_CONSTRUCT_OPS=new Set([`&`,`;`,`;;`,`&&`,`||`,`(`,`)`,`<(`,`>(`,`<<`,`<<-`]),UNIVERSAL_FLAG_DENY=new Set([`-o`,`--output-file`,`--output`]),UNIVERSAL_FLAG_PREFIX_DENY=[`-o=`,`--output-file=`,`--output=`],FIND_FLAG_DENY=new Set([`-exec`,`-execdir`,`-delete`,`-fprint`,`-fprintf`,`-fprint0`,`-ok`,`-okdir`]),SUSPICIOUS_STRING_RE=/[`]|\$\(|\$\{|\$'/;function isOpToken(e){return typeof e==`object`&&!!e&&`op`in e}function opTokenError(e){let t=typeof e.op==`string`?e.op:`(unknown)`;return WRITE_OPS.has(t)?{category:`write_blocked`,message:`Write operation blocked: '${t}'. exec is read-only. For document changes, use write_document or edit_document.`}:SHELL_CONSTRUCT_OPS.has(t)?{category:`shell_construct_blocked`,message:`Shell construct '${t}' is not supported. Only pipes (|) are allowed between allowlisted stages.`}:{category:`shell_construct_blocked`,message:`Operator '${t}' is not supported.`}}function buildStageArgs(e){let t=[];for(let S of e){if(typeof S==`string`){if(SUSPICIOUS_STRING_RE.test(S))return{error:{category:`shell_construct_blocked`,message:`Argument '${S}' contains a shell-injection pattern (backtick, $(), or \${}); not supported.`}};t.push(S);continue}if(!isOpToken(S))return{error:{category:`shell_construct_blocked`,message:`Unrecognized token shape.`}};if(S.op===`glob`&&typeof S.pattern==`string`){t.push(S.pattern);continue}return typeof S.comment==`string`?{error:{category:`shell_construct_blocked`,message:`Comments are not allowed in exec commands.`}}:{error:opTokenError(S)}}return{args:t}}function checkStage(e){if(!ALLOWLIST.has(e.command))return{category:`unknown_command`,message:`Command '${e.command}' is not in the allowlist. For pattern matching try 'grep'; for file listing try 'ls' or 'find'. Allowlist: ${ALLOWLIST_HINT}.`};for(let t of e.args.slice(1)){if(UNIVERSAL_FLAG_DENY.has(t)||UNIVERSAL_FLAG_PREFIX_DENY.some(e=>t.startsWith(e)))return{category:`write_blocked`,message:`Write operation blocked: '${t}'. exec is read-only. For document changes, use write_document or edit_document.`};if(e.command===`find`&&FIND_FLAG_DENY.has(t))return{category:`write_blocked`,message:`find flag '${t}' is blocked (executes commands or deletes files). Use exec for read-only discovery; chain with another allowlisted tool via '|' if you need to transform output.`}}return null}function parseCommand(e){let t=e.trim();if(!t)return{error:{category:`unknown_command`,message:`Empty command.`}};let S;try{S=import_shell_quote.parse(t)}catch{return{error:{category:`shell_construct_blocked`,message:`Failed to parse command — likely malformed quoting or an unsupported construct.`}}}let w=[],E=[];for(let e of S){if(isOpToken(e)&&e.op===`|`){w.push(E),E=[];continue}E.push(e)}w.push(E);let D=[];for(let e of w){let t=buildStageArgs(e);if(`error`in t)return t;if(t.args.length===0)return{error:{category:`shell_construct_blocked`,message:`Empty pipeline stage (trailing pipe or leading pipe).`}};let S={command:t.args[0],args:t.args},w=checkStage(S);if(w)return{error:w};D.push(S)}return{stages:D}}const SOFT_CAP_LINES=500,SOFT_CAP_BYTES=50*1024,BINARY_EXT_RE=/\.(png|jpe?g|gif|webp|svg|pdf|zip|tar|gz|tgz|mp4|mov|mp3|wav|ico|bmp)$/i,DESCRIPTION$17=["**STOP — native tools on in-scope markdown (when project has `.ok/`).** When the active project contains `.ok/`, do NOT use your host's native `Read`, `Grep`, or `Glob` on `.md` / `.mdx` paths inside OK's content directory — use `exec` (this tool) instead. Native file tools skip frontmatter, backlinks, shadow-repo activity, and project git history that `exec` returns for every matched wiki file. Reserve native `Read`/`Grep`/`Glob` for source code, non-markdown paths, and projects without `.ok/`.",``,`Run a read-only bash-like command against the project content directory. Returns raw stdout plus enriched metadata for every wiki file referenced (frontmatter, backlink/forward-link counts, shadow-repo activity with agent/human attribution).`,``,`Allowlist: cat, ls, grep, find, head, tail, wc, sort, uniq, cut. Pipes (|) work between stages. Redirections, subshells, and writes are rejected.`,``,"cwd: the command runs in the explicit absolute `cwd` you pass, or in the MCP client's only advertised root when there is exactly one. If the client has zero or multiple roots, pass `cwd` explicitly. Paths inside the command resolve relative to that cwd; traversal above it is rejected.",``,"Stdout provenance headers (GNU-style): `ls <dir>/` prepends `<dir>/:`, single-file `cat`/`head`/`tail` prepends `==> <path> <==`, so the subject of the command is visible in raw output. Multi-file `cat a b` emits no header — the `enrichedPaths` array still lists every file. `head`/`tail` used as pipe trimmers (no file arg) defer to the upstream producer.",``,`Examples:`,'- `exec({ command: "cat articles/auth.md" })` — file contents + full enrichment','- `exec({ command: "ls articles/" })` — listing + per-file enrichment (slim)','- `exec({ command: "grep -rn oauth articles/ | head -5" })` — pipe with enrichment on matched files','- `exec({ command: "ls", cwd: "/abs/path/to/other-repo" })` — run in a different project'].join(`
2651
2716
  `);function applySoftCap(e){let t=e.split(`
2652
2717
  `),S=t[t.length-1]===``?t.length-1:t.length;if(S<=SOFT_CAP_LINES&&e.length<=SOFT_CAP_BYTES)return{text:e,truncated:!1,omittedLines:0};let w=Math.min(S,SOFT_CAP_LINES),E=0,D=0;for(let e=0;e<w;e++){let S=t[e];if(E+=S.length+1,E>SOFT_CAP_BYTES)break;D++}let O=t.slice(0,D).join(`
2653
2718
  `),k=S-D;return{text:`${O}\n<truncated: ${k} more lines — re-run with a more-specific query>`,truncated:!0,omittedLines:k}}function detectBinaryArgs(e){let t=[];for(let S of e)if(S.command===`cat`)for(let e of S.args.slice(1))e.startsWith(`-`)||BINARY_EXT_RE.test(e)&&t.push(e);return t}function extractHeadTailLimit(e){for(let t=1;t<e.length;t++){let S=e[t],w=S.match(/^--lines=(\d+)$/);if(w)return Number(w[1]);if(S===`--lines`&&t+1<e.length){let S=Number(e[t+1]);if(Number.isFinite(S))return S}if(S===`-n`&&t+1<e.length){let S=Number(e[t+1]);if(Number.isFinite(S))return S}let E=S.match(/^-n(\d+)$/);if(E)return Number(E[1]);let D=S.match(/^-(\d+)$/);if(D)return Number(D[1])}return 10}function detectHeadTailTruncation(e,t){if(e.length<2)return null;let S=e[e.length-1];if(S.command!==`head`&&S.command!==`tail`)return null;let w=extractHeadTailLimit(S.args),E=t.split(`
2654
2719
  `),D=E[E.length-1]===``?E.length-1:E.length;if(D<w)return null;let O=E.slice(0,D),k=new Set(O.map(e=>{let t=e.indexOf(`:`);return t>0?e.slice(0,t):e})).size,j=e.slice(0,-1).map(e=>e.command).join(` | `);return{banner:`Output hit \`${S.command} -${w}\` cap (${D} lines, ${k} unique file${k===1?``:`s`}). The \`${j}\` stage may have had more matches that never reached stdout. For existence checks across many files, prefer \`grep -rl PATTERN <dir>\` (list files only, no head). For enumeration, drop the \`| ${S.command}\` or widen the cap.`}}function isDirectoryMeta(e){return e.type===`directory`}function formatDirectoryEntry(e){let t=[e.title?`**${e.title}** (${e.path}/)`:`**${e.path}/** (directory)`];e.description&&t.push(e.description),e.tags&&e.tags.length>0&&t.push(`tags: ${e.tags.join(`, `)}`);let S=[];return S.push(`${e.recursiveMdCount} md file${e.recursiveMdCount===1?``:`s`}`),e.childDirCount>0&&S.push(`${e.childDirCount} subdir${e.childDirCount===1?``:`s`}`),t.push(S.join(`, `)),e.mostRecentMd&&t.push(`most recent: ${e.mostRecentMd.title??e.mostRecentMd.path} (${e.mostRecentMd.path})`),e.truncated&&t.push(`scan truncated`),`- ${t.join(` — `)}`}function formatFileEntry(e){let t=[`**${e.title??e.path}** (${e.path})`];if(e.description&&t.push(e.description),e.tags.length>0&&t.push(`tags: ${e.tags.join(`, `)}`),e.backlinkCount!==null&&t.push(`backlinks: ${e.backlinkCount}`),e.forwardLinkCount!==null&&t.push(`forward links: ${e.forwardLinkCount}`),e.history&&e.history.length>0){let S=e.history.map(e=>{let t=e.writerClassification===`agent`?`agent: ${e.writerName}`:e.writerClassification===`principal`?`human: ${e.writerName}`:`${e.writerClassification}: ${e.writerName}`;return`${e.hash.slice(0,7)} [${t}] ${e.message}`});t.push(`OK edits: ${S.join(` · `)}`)}if(e.projectHistory&&e.projectHistory.length>0){let S=e.projectHistory.map(e=>`${e.hash.slice(0,7)} ${e.authorName}: ${e.subject}`);t.push(`commits: ${S.join(` · `)}`)}return`- ${t.join(` — `)}`}function buildStdoutProvenance(e,t,S){let w=null;for(let t=e.length-1;t>=0;t--){let S=e[t],E=S.command;if(E===`ls`||E===`cat`){w=S;break}if((E===`head`||E===`tail`)&&nonFlagArgs(argsOf(S)).length>0){w=S;break}}if(!w)return``;let E=nonFlagArgs(argsOf(w));if(w.command===`ls`){let e=E[E.length-1];if(!e||e===`.`)return``;let S=e.replace(/\/+/g,`/`);return S.startsWith(`./`)&&(S=S.slice(2)),S.endsWith(`/`)&&(S=S.slice(0,-1)),!S||!t.has(S)?``:`${S}/:\n`}let D=E.filter(e=>/\.(md|mdx)$/.test(e)&&S.has(e));return D.length===1?`==> ${D[0]} <==\n`:``}function formatEnrichedBlock(e){if(e.length===0)return``;let t=[``,`### Referenced files`,``];for(let S of e)t.push(isDirectoryMeta(S)?formatDirectoryEntry(S):formatFileEntry(S));return t.join(`
2655
2720
  `)}async function classifyPaths(e,t){let S=[],w=[];return await Promise.all(t.map(async t=>{try{let E=await stat$1(resolve(e,t));E.isDirectory()?w.push(t):E.isFile()&&S.push(t)}catch{/\.(md|mdx)$/i.test(t)&&S.push(t)}})),{files:S,dirs:w}}function errorCategoryResult(e,t){return textPlusStructured(t,{enrichedPaths:[],error:{category:e,message:t}},!0)}function withPreviewUrls(e,t){return e.map(e=>{let S=t(docNameFromPath(e.path));return{...e,previewUrl:S?.url??null,...S?{previewUrlSource:S.source}:{}}})}async function buildExecResult(e,t){let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return errorCategoryResult(`shell_construct_blocked`,`exec failed: ${S.error}`);let{cwd:w,config:E,url:D}=S,O=parseCommand(e.command);if(`error`in O)return errorCategoryResult(O.error.category,O.error.message);let k=augmentStagesWithExcludes(O.stages),j=serializeStages(k),F=await snapshotMtimes(w),L=createBashInstance(w),B=``,H=``;try{let e=await execBash(L,j);B=e.stdout,H=e.stderr}catch(e){return e instanceof StdoutOverflowError?errorCategoryResult(`output_overflow`,`Output exceeded 16 MB buffer. Narrow the command (e.g., add a more specific grep pattern, use head, restrict the path).`):errorCategoryResult(`shell_construct_blocked`,`exec failed: ${e instanceof Error?e.message:String(e)}`)}let q=await snapshotMtimes(w),J=diffMtimes(F.snapshot,q.snapshot);if(J.changed.length>0)return errorCategoryResult(`security_invariant_violation`,`Security invariant violated: file(s) in the content directory were modified during a read-only exec call: ${J.changed.join(`, `)}. This indicates a parser bug; the command has been logged.`);let Y=applySoftCap(B),ee=extractReferencedPaths(B,k).filter(e=>resolveWithinRoot(w,e).ok),{files:te,dirs:ne}=await classifyPaths(w,ee),ae=k.length===1&&k[0].command===`cat`&&te.length===1,oe=await Promise.all(te.map(e=>enrichPath(e,{projectDir:w,serverUrl:D},{includeRichFields:ae}).catch(()=>({path:e,tags:[],frontmatter:{},backlinkCount:null,backlinks:null,forwardLinkCount:null,forwardLinks:null,history:null,historySource:null,projectHistory:null,projectHistorySource:null})))),se=await Promise.all(ne.map(e=>enrichDirectoryRecursive(e,1,{projectDir:w}).catch(()=>({path:e,type:`directory`,directMdCount:0,recursiveMdCount:0,childDirCount:0,truncated:!1}))));if(!ae&&D&&oe.length>0){let e=await fetchBacklinkCountsBatch(D,oe.map(e=>pathToDocName$1(e.path))).catch(()=>null);if(e)for(let t of oe){let S=e.get(pathToDocName$1(t.path));typeof S==`number`&&(t.backlinkCount=S)}}let ce=new Map(oe.map(e=>[e.path,e])),ue=new Map(se.map(e=>[e.path,e])),de=[];for(let e of ee){let t=ce.get(e);if(t){de.push(t);continue}let S=ue.get(e);S&&de.push(S)}let fe=detectBinaryArgs(k),me=[];fe.length>0&&me.push(`File${fe.length>1?`s`:``} ${fe.join(`, `)} appear${fe.length===1?`s`:``} to be binary (image/PDF/etc.) — exec returns text only (NG8). For binary retrieval, use native Read.`);let ge=detectHeadTailTruncation(k,B);ge&&me.push(ge.banner),H&&me.push(`stderr: ${H.trim()}`);let _e=me.length>0?`${me.join(`
2656
- `)}\n\n`:``,ve=buildStdoutProvenance(k,ue,ce)+Y.text,ye=`${_e}${ve}${formatEnrichedBlock(de)}`,{resolve:Ce}=await buildListResolver({config:E,resolveCwd:async()=>w});return textPlusStructured(ye,{enrichedPaths:withPreviewUrls(de,Ce),stdout:ve,stdoutTruncated:Y.truncated,cwd:w,...me.length>0?{warnings:me}:{}})}function register$16(e,t){e.registerTool(`exec`,{description:DESCRIPTION$16,inputSchema:{command:string$2().describe(`Read-only bash command (allowlist: cat, ls, grep, find, head, tail, wc, sort, uniq, cut; pipes OK)`),cwd:string$2().optional().describe("Absolute host path to run the command from. Defaults only when the MCP client advertises exactly one root; otherwise pass `cwd` explicitly.")}},async e=>{try{return await buildExecResult(e,t)}catch(e){return errorCategoryResult(`shell_construct_blocked`,`exec handler error: ${e instanceof Error?e.message:String(e)}`)}})}const DESCRIPTION$15=["[Operates on disk; no running OK server required] Folder-level configuration writes. Dispatches on `action`:",``,'- `action: "set-rule"` — Upsert folder rules (default frontmatter applied to docs in `<folder>/` via cascade). Writes nested `<folder>/.ok/frontmatter.yml`. Always batch-shape: pass `rules: [{...}]` even for one. Empty `frontmatter: {}` removes the rule and auto-cleans `<folder>/.ok/` if empty. Use `new_match` to rename the rule\'s match glob. Multi-folder globs are rejected (split per folder).','- `action: "write-template"` — Create or update `<folder>/.ok/templates/<name>.md`. Templates are markdown starter shapes; agents instantiate via `write_document({ template })`. `title` in frontmatter is REQUIRED (menu surface). Body MAY use `{{date}}` / `{{user}}` substitution tokens; any other `{{...}}` is rejected. Unknown keys are rejected.','- `action: "delete-template"` — Remove `<folder>/.ok/templates/<name>.md`. Idempotent (`existed: false` if missing). Auto-cleans empty `templates/` and `.ok/` dirs. Unknown keys are rejected.',``,"To apply several writes in one call (e.g. set a folder rule and write its template together), pass `operations: [{action, ...}, ...]` instead of a top-level `action`. Operations run in order; the response reports each.",``,`**Cascade merge semantics:** scalars replace last-wins along the leaf → root walk; arrays union-and-dedup with first-occurrence preserved; objects replace last-wins.`,``,`**Parameters:**`,"- `action` — `set-rule` | `write-template` | `delete-template`. Omit when using `operations`.","- `operations` — Array of `{action, ...}` objects. Mutually exclusive with a top-level `action`.","- `rules` — Required for `set-rule`. Array of `{match, frontmatter, new_match?}`. `match` is a folder glob (`specs/**`). `frontmatter` is an open record; common keys: `title`, `description`, `tags`; arbitrary keys also persist.","- `folder` — Required for `write-template`/`delete-template`. Project-root-relative folder. Empty / `.` means project root.","- `name` — Required for `write-template`/`delete-template`. Template filename without `.md`. Letters/digits/`_`/`-` only.","- `body` — Required for `write-template`. Markdown body. May use `{{date}}` / `{{user}}`.","- `frontmatter` — Required for `write-template`. `{title (required), description?, tags?: string[]}`.","- `cwd` (optional) — Project root."].join(`
2657
- `),ACTIONS$1=[`set-rule`,`write-template`,`delete-template`],FolderRuleUpsertInputSchema=object$1({match:string$2().min(1).describe(`Glob pattern (e.g. "specs/**", "meetings/prep-notes/**") that identifies the target folder.`),frontmatter:record(string$2(),unknown$2()).refine(e=>!(`title`in e&&e.title!==null&&typeof e.title!=`string`||`description`in e&&e.description!==null&&typeof e.description!=`string`||`tags`in e&&e.tags!==null&&!Array.isArray(e.tags)),{message:"Well-known keys must match expected types when present: `title` (string|null), `description` (string|null), `tags` (string[]|null)."}).describe("Default frontmatter to apply to matched docs. Open shape. Common: `{title?, description?, tags?: string[]}`; arbitrary keys also persist. Pass `{}` to remove the rule."),new_match:string$2().min(1).optional().describe("If set, move the rule from `match` to this new folder.")}),TEMPLATE_NAME_REGEX=/^[A-Za-z0-9_-]+$/,TemplateFrontmatterSchema=object$1({title:string$2().min(1,"Template `title` is required — it is the menu surface agents pick from.").describe(`Required. The menu surface agents pick from.`),description:string$2().optional().describe(`Recommended. Disambiguates similarly-named templates.`),tags:array(string$2()).optional().describe(`Optional. Concatenated with cascade tags at instantiation time.`)}),ACTION_FIELDS={rules:array(FolderRuleUpsertInputSchema).min(1).optional().describe("Required for `set-rule`. Array of folder rules to upsert."),folder:string$2().optional().describe("Required for `write-template`/`delete-template`. Project-root-relative folder."),name:string$2().min(1).regex(TEMPLATE_NAME_REGEX,"Template name must use letters, digits, `_`, or `-` only (no slashes, dots, or spaces).").optional().describe("Required for `write-template`/`delete-template`. Template filename without `.md` extension."),body:string$2().optional().describe("Required for `write-template`. Markdown body."),frontmatter:TemplateFrontmatterSchema.optional().describe("Required for `write-template`. Template menu metadata.")},OperationSchema=object$1({action:_enum(ACTIONS$1).describe(`Which folder-config write to perform.`),...ACTION_FIELDS}).strict();function checkActionFields(e,t,S){e.action===`set-rule`?e.rules||t.addIssue({code:`custom`,message:"action=set-rule requires `rules`.",path:[...S,`rules`]}):e.action===`write-template`?(e.folder===void 0&&t.addIssue({code:`custom`,message:"action=write-template requires `folder`.",path:[...S,`folder`]}),e.name||t.addIssue({code:`custom`,message:"action=write-template requires `name`.",path:[...S,`name`]}),e.body===void 0&&t.addIssue({code:`custom`,message:"action=write-template requires `body`.",path:[...S,`body`]}),e.frontmatter||t.addIssue({code:`custom`,message:"action=write-template requires `frontmatter`.",path:[...S,`frontmatter`]})):e.action===`delete-template`&&(e.folder===void 0&&t.addIssue({code:`custom`,message:"action=delete-template requires `folder`.",path:[...S,`folder`]}),e.name||t.addIssue({code:`custom`,message:"action=delete-template requires `name`.",path:[...S,`name`]}))}const FolderConfigInputSchema=object$1({action:_enum(ACTIONS$1).optional().describe("Which folder-config write to perform. Omit when `operations` is set."),...ACTION_FIELDS,operations:array(OperationSchema).min(1).optional().describe("Batch form: apply several folder-config writes in one call. Mutually exclusive with `action`."),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}).strict().superRefine((e,t)=>{if(e.operations!==void 0){e.action!==void 0&&t.addIssue({code:`custom`,message:"`action` and `operations` are mutually exclusive.",path:[`action`]});for(let S of[`rules`,`folder`,`name`,`body`,`frontmatter`])e[S]!==void 0&&t.addIssue({code:`custom`,message:`\`${S}\` belongs inside an \`operations\` entry, not at the top level.`,path:[S]});e.operations.forEach((e,S)=>{checkActionFields(e,t,[`operations`,S])});return}if(e.action===void 0){t.addIssue({code:`custom`,message:"Provide either `action` or `operations`.",path:[`action`]});return}checkActionFields(e,t,[])}),AppliedEntrySchema=object$1({match:string$2(),path:string$2(),action:_enum([`written`,`deleted`])}),SingleResultSchema=union([object$1({ok:literal(!0),applied:array(AppliedEntrySchema)}),object$1({ok:literal(!1),error:object$1({code:_enum([`MULTI_FOLDER_GLOB`,`PATH_ESCAPE`,`BAD_PROJECT_DIR`,`WRITE_ERROR`]),message:string$2(),rule:string$2().optional()}),partiallyApplied:array(AppliedEntrySchema).optional()}),object$1({ok:literal(!0),path:string$2(),created:boolean$1(),warnings:array(string$2())}),object$1({ok:literal(!0),path:string$2(),existed:boolean$1(),cleanedEmpty:object$1({templatesDir:boolean$1(),okDir:boolean$1()})}),object$1({ok:literal(!1),error:object$1({code:string$2(),message:string$2()})})]),FolderConfigOutputSchema=outputSchemaWithText({result:union([SingleResultSchema,object$1({ok:boolean$1(),operations:array(object$1({action:_enum(ACTIONS$1),result:SingleResultSchema}))})])});function register$15(e,t){e.registerTool(`folder_config`,{description:DESCRIPTION$15,inputSchema:FolderConfigInputSchema,outputSchema:FolderConfigOutputSchema,annotations:{readOnlyHint:!1,idempotentHint:!0,destructiveHint:!0}},async e=>{let S=await resolveProjectConfigContext(t.resolveCwd,t.config,e.cwd);if(!S.ok)return{isError:!0,content:[{type:`text`,text:`Error: ${S.error}`}]};let{cwd:w}=S;if(e.operations!==void 0)return handleBatch(e.operations,w);switch(e.action){case`set-rule`:return handleSetRule(e,w);case`write-template`:return handleWriteTemplate(e,w);case`delete-template`:return handleDeleteTemplate(e,w)}return{isError:!0,content:[{type:`text`,text:`Error: no action.`}]}})}function applyOperation(e,t){switch(e.action){case`set-rule`:return e.rules?applyNestedFolderRulesUpsert({projectDir:t,rules:e.rules.map(e=>({match:e.match,frontmatter:e.frontmatter??{},...e.new_match===void 0?{}:{new_match:e.new_match}}))}):{ok:!1,error:{code:`MISSING_FIELD`,message:"set-rule requires `rules`."}};case`write-template`:return e.folder===void 0||!e.name||e.body===void 0||!e.frontmatter?{ok:!1,error:{code:`MISSING_FIELD`,message:"write-template requires `folder`, `name`, `body`, and `frontmatter`."}}:applyTemplateWrite({projectDir:t,folder:e.folder,name:e.name,body:e.body,frontmatter:e.frontmatter});case`delete-template`:return e.folder===void 0||!e.name?{ok:!1,error:{code:`MISSING_FIELD`,message:"delete-template requires `folder` and `name`."}}:applyTemplateDelete({projectDir:t,folder:e.folder,name:e.name})}}function describeResult(e,t){return t.ok?`applied`in t?`${e}: ${t.applied.length} rule(s) applied`:`created`in t?`${e}: ${t.created?`created`:`updated`} ${t.path}`:`existed`in t?`${e}: ${t.existed?`deleted`:`no-op (missing)`} ${t.path}`:e:`${e}: ${t.error.code}: ${t.error.message}`}function handleBatch(e,t){let S=e.map(e=>({action:e.action,result:applyOperation(e,t)})),w=S.every(e=>e.result.ok),E={ok:w,operations:S},D=S.map(e=>describeResult(e.action,e.result)).join(`
2721
+ `)}\n\n`:``,ve=buildStdoutProvenance(k,ue,ce)+Y.text,ye=`${_e}${ve}${formatEnrichedBlock(de)}`,{resolve:Ce}=await buildListResolver({config:E,resolveCwd:async()=>w});return textPlusStructured(ye,{enrichedPaths:withPreviewUrls(de,Ce),stdout:ve,stdoutTruncated:Y.truncated,cwd:w,...me.length>0?{warnings:me}:{}})}function register$17(e,t){e.registerTool(`exec`,{description:DESCRIPTION$17,inputSchema:{command:string$2().describe(`Read-only bash command (allowlist: cat, ls, grep, find, head, tail, wc, sort, uniq, cut; pipes OK)`),cwd:string$2().optional().describe("Absolute host path to run the command from. Defaults only when the MCP client advertises exactly one root; otherwise pass `cwd` explicitly.")}},async e=>{try{return await buildExecResult(e,t)}catch(e){return errorCategoryResult(`shell_construct_blocked`,`exec handler error: ${e instanceof Error?e.message:String(e)}`)}})}const DESCRIPTION$16=["[Operates on disk; no running OK server required] Folder-level configuration writes. Dispatches on `action`:",``,'- `action: "set-rule"` — Upsert folder rules (default frontmatter applied to docs in `<folder>/` via cascade). Writes nested `<folder>/.ok/frontmatter.yml`. Always batch-shape: pass `rules: [{...}]` even for one. Empty `frontmatter: {}` removes the rule and auto-cleans `<folder>/.ok/` if empty. Use `new_match` to rename the rule\'s match glob. Multi-folder globs are rejected (split per folder).','- `action: "write-template"` — Create or update `<folder>/.ok/templates/<name>.md`. Templates are markdown starter shapes; agents instantiate via `write_document({ template })`. `title` in frontmatter is REQUIRED (menu surface). Body MAY use `{{date}}` / `{{user}}` substitution tokens; any other `{{...}}` is rejected. Unknown keys are rejected.','- `action: "delete-template"` — Remove `<folder>/.ok/templates/<name>.md`. Idempotent (`existed: false` if missing). Auto-cleans empty `templates/` and `.ok/` dirs. Unknown keys are rejected.',``,"To apply several writes in one call (e.g. set a folder rule and write its template together), pass `operations: [{action, ...}, ...]` instead of a top-level `action`. Operations run in order; the response reports each.",``,`**Cascade merge semantics:** scalars replace last-wins along the leaf → root walk; arrays union-and-dedup with first-occurrence preserved; objects replace last-wins.`,``,`**Parameters:**`,"- `action` — `set-rule` | `write-template` | `delete-template`. Omit when using `operations`.","- `operations` — Array of `{action, ...}` objects. Mutually exclusive with a top-level `action`.","- `rules` — Required for `set-rule`. Array of `{match, frontmatter, new_match?}`. `match` is a folder glob (`specs/**`). `frontmatter` is an open record; common keys: `title`, `description`, `tags`; arbitrary keys also persist.","- `folder` — Required for `write-template`/`delete-template`. Project-root-relative folder. Empty / `.` means project root.","- `name` — Required for `write-template`/`delete-template`. Template filename without `.md`. Letters/digits/`_`/`-` only.","- `body` — Required for `write-template`. Markdown body. May use `{{date}}` / `{{user}}`.","- `frontmatter` — Required for `write-template`. `{title (required), description?, tags?: string[]}`.","- `cwd` (optional) — Project root."].join(`
2722
+ `),ACTIONS$1=[`set-rule`,`write-template`,`delete-template`],FolderRuleUpsertInputSchema=object$1({match:string$2().min(1).describe(`Glob pattern (e.g. "specs/**", "meetings/prep-notes/**") that identifies the target folder.`),frontmatter:record(string$2(),unknown$2()).refine(e=>!(`title`in e&&e.title!==null&&typeof e.title!=`string`||`description`in e&&e.description!==null&&typeof e.description!=`string`||`tags`in e&&e.tags!==null&&!Array.isArray(e.tags)),{message:"Well-known keys must match expected types when present: `title` (string|null), `description` (string|null), `tags` (string[]|null)."}).describe("Default frontmatter to apply to matched docs. Open shape. Common: `{title?, description?, tags?: string[]}`; arbitrary keys also persist. Pass `{}` to remove the rule."),new_match:string$2().min(1).optional().describe("If set, move the rule from `match` to this new folder.")}),TEMPLATE_NAME_REGEX=/^[A-Za-z0-9_-]+$/,TemplateFrontmatterSchema=object$1({title:string$2().min(1,"Template `title` is required — it is the menu surface agents pick from.").describe(`Required. The menu surface agents pick from.`),description:string$2().optional().describe(`Recommended. Disambiguates similarly-named templates.`),tags:array(string$2()).optional().describe(`Optional. Concatenated with cascade tags at instantiation time.`)}),ACTION_FIELDS={rules:array(FolderRuleUpsertInputSchema).min(1).optional().describe("Required for `set-rule`. Array of folder rules to upsert."),folder:string$2().optional().describe("Required for `write-template`/`delete-template`. Project-root-relative folder."),name:string$2().min(1).regex(TEMPLATE_NAME_REGEX,"Template name must use letters, digits, `_`, or `-` only (no slashes, dots, or spaces).").optional().describe("Required for `write-template`/`delete-template`. Template filename without `.md` extension."),body:string$2().optional().describe("Required for `write-template`. Markdown body."),frontmatter:TemplateFrontmatterSchema.optional().describe("Required for `write-template`. Template menu metadata.")},OperationSchema=object$1({action:_enum(ACTIONS$1).describe(`Which folder-config write to perform.`),...ACTION_FIELDS}).strict();function checkActionFields(e,t,S){e.action===`set-rule`?e.rules||t.addIssue({code:`custom`,message:"action=set-rule requires `rules`.",path:[...S,`rules`]}):e.action===`write-template`?(e.folder===void 0&&t.addIssue({code:`custom`,message:"action=write-template requires `folder`.",path:[...S,`folder`]}),e.name||t.addIssue({code:`custom`,message:"action=write-template requires `name`.",path:[...S,`name`]}),e.body===void 0&&t.addIssue({code:`custom`,message:"action=write-template requires `body`.",path:[...S,`body`]}),e.frontmatter||t.addIssue({code:`custom`,message:"action=write-template requires `frontmatter`.",path:[...S,`frontmatter`]})):e.action===`delete-template`&&(e.folder===void 0&&t.addIssue({code:`custom`,message:"action=delete-template requires `folder`.",path:[...S,`folder`]}),e.name||t.addIssue({code:`custom`,message:"action=delete-template requires `name`.",path:[...S,`name`]}))}const FolderConfigInputSchema=object$1({action:_enum(ACTIONS$1).optional().describe("Which folder-config write to perform. Omit when `operations` is set."),...ACTION_FIELDS,operations:array(OperationSchema).min(1).optional().describe("Batch form: apply several folder-config writes in one call. Mutually exclusive with `action`."),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}).strict().superRefine((e,t)=>{if(e.operations!==void 0){e.action!==void 0&&t.addIssue({code:`custom`,message:"`action` and `operations` are mutually exclusive.",path:[`action`]});for(let S of[`rules`,`folder`,`name`,`body`,`frontmatter`])e[S]!==void 0&&t.addIssue({code:`custom`,message:`\`${S}\` belongs inside an \`operations\` entry, not at the top level.`,path:[S]});e.operations.forEach((e,S)=>{checkActionFields(e,t,[`operations`,S])});return}if(e.action===void 0){t.addIssue({code:`custom`,message:"Provide either `action` or `operations`.",path:[`action`]});return}checkActionFields(e,t,[])}),AppliedEntrySchema=object$1({match:string$2(),path:string$2(),action:_enum([`written`,`deleted`])}),SingleResultSchema=union([object$1({ok:literal(!0),applied:array(AppliedEntrySchema)}),object$1({ok:literal(!1),error:object$1({code:_enum([`MULTI_FOLDER_GLOB`,`PATH_ESCAPE`,`BAD_PROJECT_DIR`,`WRITE_ERROR`]),message:string$2(),rule:string$2().optional()}),partiallyApplied:array(AppliedEntrySchema).optional()}),object$1({ok:literal(!0),path:string$2(),created:boolean$1(),warnings:array(string$2())}),object$1({ok:literal(!0),path:string$2(),existed:boolean$1(),cleanedEmpty:object$1({templatesDir:boolean$1(),okDir:boolean$1()})}),object$1({ok:literal(!1),error:object$1({code:string$2(),message:string$2()})})]),FolderConfigOutputSchema=outputSchemaWithText({result:union([SingleResultSchema,object$1({ok:boolean$1(),operations:array(object$1({action:_enum(ACTIONS$1),result:SingleResultSchema}))})])});function register$16(e,t){e.registerTool(`folder_config`,{description:DESCRIPTION$16,inputSchema:FolderConfigInputSchema,outputSchema:FolderConfigOutputSchema,annotations:{readOnlyHint:!1,idempotentHint:!0,destructiveHint:!0}},async e=>{let S=await resolveProjectConfigContext(t.resolveCwd,t.config,e.cwd);if(!S.ok)return{isError:!0,content:[{type:`text`,text:`Error: ${S.error}`}]};let{cwd:w}=S;if(e.operations!==void 0)return handleBatch(e.operations,w);switch(e.action){case`set-rule`:return handleSetRule(e,w);case`write-template`:return handleWriteTemplate(e,w);case`delete-template`:return handleDeleteTemplate(e,w)}return{isError:!0,content:[{type:`text`,text:`Error: no action.`}]}})}function applyOperation(e,t){switch(e.action){case`set-rule`:return e.rules?applyNestedFolderRulesUpsert({projectDir:t,rules:e.rules.map(e=>({match:e.match,frontmatter:e.frontmatter??{},...e.new_match===void 0?{}:{new_match:e.new_match}}))}):{ok:!1,error:{code:`MISSING_FIELD`,message:"set-rule requires `rules`."}};case`write-template`:return e.folder===void 0||!e.name||e.body===void 0||!e.frontmatter?{ok:!1,error:{code:`MISSING_FIELD`,message:"write-template requires `folder`, `name`, `body`, and `frontmatter`."}}:applyTemplateWrite({projectDir:t,folder:e.folder,name:e.name,body:e.body,frontmatter:e.frontmatter});case`delete-template`:return e.folder===void 0||!e.name?{ok:!1,error:{code:`MISSING_FIELD`,message:"delete-template requires `folder` and `name`."}}:applyTemplateDelete({projectDir:t,folder:e.folder,name:e.name})}}function describeResult(e,t){return t.ok?`applied`in t?`${e}: ${t.applied.length} rule(s) applied`:`created`in t?`${e}: ${t.created?`created`:`updated`} ${t.path}`:`existed`in t?`${e}: ${t.existed?`deleted`:`no-op (missing)`} ${t.path}`:e:`${e}: ${t.error.code}: ${t.error.message}`}function handleBatch(e,t){let S=e.map(e=>({action:e.action,result:applyOperation(e,t)})),w=S.every(e=>e.result.ok),E={ok:w,operations:S},D=S.map(e=>describeResult(e.action,e.result)).join(`
2658
2723
  `);return w?textPlusStructured(D,{result:E}):textPlusStructured(D,{result:E},!0)}function handleSetRule(e,t){let S=applyNestedFolderRulesUpsert({projectDir:t,rules:(e.rules??[]).map(e=>({match:e.match,frontmatter:e.frontmatter??{},...e.new_match===void 0?{}:{new_match:e.new_match}}))});return S.ok?textPlusStructured(JSON.stringify(S,null,2),{result:S}):textPlusStructured(`${S.error.code}: ${S.error.message}`,{result:S},!0)}function handleWriteTemplate(e,t){let S=applyTemplateWrite({projectDir:t,folder:e.folder??``,name:e.name??``,body:e.body??``,frontmatter:e.frontmatter??{title:``}});if(!S.ok)return textPlusStructured(`${S.error.code}: ${S.error.message}`,{result:S},!0);let w=[`${S.created?`Created`:`Updated`} template at ${S.path}`];if(S.warnings.length>0){w.push(``,`Warnings:`);for(let e of S.warnings)w.push(` - ${e}`)}return textPlusStructured(w.join(`
2659
2724
  `),{result:S})}function handleDeleteTemplate(e,t){let S=applyTemplateDelete({projectDir:t,folder:e.folder??``,name:e.name??``});if(!S.ok)return textPlusStructured(`${S.error.code}: ${S.error.message}`,{result:S},!0);let w=[S.existed?`Deleted template at ${S.path}`:`Template at ${S.path} did not exist (no-op)`];return S.cleanedEmpty.templatesDir&&w.push(`Removed empty .ok/templates/ directory`),S.cleanedEmpty.okDir&&w.push(`Removed empty .ok/ directory`),textPlusStructured(w.join(`
2660
- `),{result:S})}const DESCRIPTION$14=[`[Operates on registry data; no running OK server required] Return the OK authoring palette so a generated document reads as one coherent, themed artifact.`,``,`Three sections:`,"- `components` — the **markdown-native forms** OK auto-promotes into themed canonical components at parse time. Write `> [!NOTE]` (not `<Callout>`), `<details>` (not `<Accordion>`), ` ```mermaid `, `$x$`. Each entry carries a copy-ready `example` + `guidance`.","- `embedPatterns` — copy-ready ` ```html preview ` starters (chart, stat cards, custom SVG, interactive control) already wired to the theme tokens, so an embed tracks light/dark with no hand-picked colors.","- `tokens` — the CSS custom properties injected into every preview iframe; reference them as `var(--chart-1)`, `var(--foreground)`, … inside an `html preview` embed.",``,"For the full JSX-form prop schema of a specific canonical, call `get_components({ ids })`.",``,`**Parameters:**`,"- `cwd` (optional) — Project root (see `cwd` description below)."].join(`
2661
- `),InputSchema$4={cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},OutputSchema$7=outputSchemaWithText({version:literal(1).describe(`Schema version stamp — bump for breaking shape changes.`),components:array(object$1({id:string$2(),displayName:string$2(),description:string$2(),authoring:_enum([`markdown`,`jsx`]).describe("`markdown` — write the markdown-native form OK auto-promotes; `jsx` — write the JSX tag directly (no markdown-native form exists)."),example:string$2().describe(`Copy-ready source for the authoring form.`),guidance:string$2().describe(`One line on when / how to use this construct.`)})).describe(`Canonical authoring constructs, keyed by the form an agent should write.`),embedPatterns:array(object$1({id:string$2(),title:string$2(),description:string$2(),snippet:string$2().describe("A complete, theme-wired ```html preview fenced block.")})).describe("Copy-ready themed `html preview` starters."),tokens:array(object$1({name:string$2().describe("CSS custom-property name, e.g. `--chart-1`."),light:string$2(),dark:string$2()})).describe("Theme tokens injected into every preview iframe — reference with `var(--name)`.")}),AUTHORING_FORMS=[{id:`Callout`,registryName:`Callout`,fallbackDisplayName:`Callout`,description:`Alert / admonition box in one of 15 themed type variants.`,authoring:`markdown`,example:`> [!NOTE]
2725
+ `),{result:S})}const DESCRIPTION$15=[`[Operates on registry data; no running OK server required] Return the OK authoring palette so a generated document reads as one coherent, themed artifact.`,``,`Three sections:`,"- `components` — the **markdown-native forms** OK auto-promotes into themed canonical components at parse time. Write `> [!NOTE]` (not `<Callout>`), `<details>` (not `<Accordion>`), ` ```mermaid `, `$x$`. Each entry carries a copy-ready `example` + `guidance`.","- `embedPatterns` — copy-ready ` ```html preview ` starters (chart, stat cards, custom SVG, interactive control) already wired to the theme tokens, so an embed tracks light/dark with no hand-picked colors.","- `tokens` — the CSS custom properties injected into every preview iframe; reference them as `var(--chart-1)`, `var(--foreground)`, … inside an `html preview` embed.",``,"For the full JSX-form prop schema of a specific canonical, call `get_components({ ids })`.",``,`**Parameters:**`,"- `cwd` (optional) — Project root (see `cwd` description below)."].join(`
2726
+ `),InputSchema$4={cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},OutputSchema$8=outputSchemaWithText({version:literal(1).describe(`Schema version stamp — bump for breaking shape changes.`),components:array(object$1({id:string$2(),displayName:string$2(),description:string$2(),authoring:_enum([`markdown`,`jsx`]).describe("`markdown` — write the markdown-native form OK auto-promotes; `jsx` — write the JSX tag directly (no markdown-native form exists)."),example:string$2().describe(`Copy-ready source for the authoring form.`),guidance:string$2().describe(`One line on when / how to use this construct.`)})).describe(`Canonical authoring constructs, keyed by the form an agent should write.`),embedPatterns:array(object$1({id:string$2(),title:string$2(),description:string$2(),snippet:string$2().describe("A complete, theme-wired ```html preview fenced block.")})).describe("Copy-ready themed `html preview` starters."),tokens:array(object$1({name:string$2().describe("CSS custom-property name, e.g. `--chart-1`."),light:string$2(),dark:string$2()})).describe("Theme tokens injected into every preview iframe — reference with `var(--name)`.")}),AUTHORING_FORMS=[{id:`Callout`,registryName:`Callout`,fallbackDisplayName:`Callout`,description:`Alert / admonition box in one of 15 themed type variants.`,authoring:`markdown`,example:`> [!NOTE]
2662
2727
  > Body text. Swap NOTE for TIP, IMPORTANT, WARNING, CAUTION, …`,guidance:"Write the GFM alert form — OK auto-promotes it to a themed Callout. 15 types; append `+` / `-` (e.g. `> [!NOTE]+`) to make it foldable."},{id:`Accordion`,registryName:`Accordion`,fallbackDisplayName:`Accordion`,description:`Collapsible section with a clickable summary.`,authoring:`markdown`,example:`<details>
2663
2728
  <summary>Section title</summary>
2664
2729
 
@@ -2675,12 +2740,12 @@ $$`,guidance:"Write LaTeX in `$…$` (inline) or `$$…$$` (block) — OK auto-p
2675
2740
  ![[diagram.png]]`,guidance:"Write a `![[file]]` wiki-embed to inline another doc or an uploaded asset."},{id:`Tabs`,registryName:`Tabs`,fallbackDisplayName:`Tabs`,description:`Tabbed panels — a pill strip with one panel visible at a time.`,authoring:`jsx`,example:`<Tabs>
2676
2741
  <Tab label="First">First panel content.</Tab>
2677
2742
  <Tab label="Second">Second panel content.</Tab>
2678
- </Tabs>`,guidance:`Tabs is the one canonical with no markdown-native form — write the JSX directly.`}];function buildComponents(){let e=new Map(getAgentCanonicalDescriptors().map(e=>[e.name,e]));return AUTHORING_FORMS.map(t=>{let S=t.registryName?e.get(t.registryName):void 0;return{id:t.id,displayName:S?.displayName??S?.name??t.fallbackDisplayName,description:t.description,authoring:t.authoring,example:t.example,guidance:t.guidance}})}function register$14(e,t){e.registerTool(`get_authoring_palette`,{description:DESCRIPTION$14,inputSchema:InputSchema$4,outputSchema:OutputSchema$7,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{e.cwd;let t={version:1,components:buildComponents(),embedPatterns:PREVIEW_EMBED_STARTERS.map(e=>({id:e.id,title:e.title,description:e.description,snippet:previewEmbedFence(e)})),tokens:PREVIEW_THEME_TOKENS.map(e=>({name:e.name,light:e.light,dark:e.dark}))};return textPlusStructured(JSON.stringify(t,null,2),t)})}const ID_CARDINALITY_CAP=32,DESCRIPTION$13=["[Operates on registry data; no running OK server required] Return full per-entry details for the canonical components an agent picked from the inventory rendered in the `write_document` / `edit_document` tool descriptions.",``,"Each entry carries: literal source-form `example` (copy-pasteable) + form-aware `params` (every prop, with `type` / `values?` / `required` / `defaultValue?` / `description`). Unmatched ids surface in `notFound` rather than failing the call.",``,`**Parameters:**`,`- \`ids\` — Array of canonical ids picked from the write-tool inventory (e.g. \`["Callout", "Tabs"]\`). Max ${ID_CARDINALITY_CAP} ids per call. Case-sensitive — must match the inventory exactly (\`Callout\` not \`callout\`; \`img\` not \`Image\`).`,"- `cwd` (optional) — Project root (see `cwd` description below)."].join(`
2679
- `),InputSchema$3={ids:array(string$2().min(1)).max(ID_CARDINALITY_CAP).describe(`Array of canonical ids to fetch. Max ${ID_CARDINALITY_CAP} ids per call. Empty array returns an empty components list.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},ParamSchema=object$1({name:string$2(),type:_enum([`string`,`boolean`,`number`,`enum`,`reactnode`]),values:array(string$2()).optional(),required:boolean$1(),defaultValue:union([string$2(),boolean$1(),number$1()]).optional(),description:string$2().optional(),omitOnDefault:literal(!0).optional(),advanced:literal(!0).optional(),language:_enum([`mermaid`,`latex`,`html`,`json`,`yaml`,`javascript`,`markdown`]).optional(),accept:array(string$2()).optional()}),ComponentEntrySchema=object$1({id:string$2(),displayName:string$2(),description:string$2(),kind:_enum([`jsx-block`,`jsx-void`]),example:string$2(),params:array(ParamSchema)}),OutputSchema$6=outputSchemaWithText({version:literal(1).describe(`Schema version stamp — bump for breaking shape changes.`),components:array(ComponentEntrySchema).describe(`Full per-entry details for ids that matched.`),notFound:array(string$2()).describe(`Ids that did not match any canonical descriptor.`)});function register$13(e,t){e.registerTool(`get_components`,{description:DESCRIPTION$13,inputSchema:InputSchema$3,outputSchema:OutputSchema$6,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{e.cwd;let t=getAgentCanonicalDescriptors(),S=new Map(t.map(e=>[e.name,e])),w=[],E=[],D=new Set;for(let t of e.ids){if(D.has(t))continue;D.add(t);let e=S.get(t);if(e===void 0){E.push(t);continue}w.push(projectFull(e))}let O={version:1,components:w,notFound:E};return textPlusStructured(JSON.stringify(O,null,2),O)})}const DESCRIPTION$12=[`[Operates on disk; no running OK server required] Read the effective merged Open Knowledge config (defaults → user → project).`,``,`Use this when you need to inspect the config mid-session — e.g., after a write that may have changed disk state, or to re-confirm the value of a field before reading it again.`,``,"Read returns the FULL merged config or a sub-tree when `path` is provided. There is no allowlist on reads — every field is readable.",``,"Note: the `server.*`, `mcp.*`, `github.*`, and `preview.*` config sub-trees were removed; their values are now built-in constants in `@inkeep/open-knowledge-core` (or hardcoded behavior, in the case of `preview.*`). Reading those paths returns `exists: false`.",``,`**Parameters:**`,'- `path` (optional) — Dotted-segments array. `["content"]` returns the content sub-tree; `["appearance", "theme"]` returns just that leaf. Omit for full config.',"- `cwd` (optional) — Project root (see `cwd` description below)."].join(`
2680
- `),InputSchema$2={path:array(string$2()).optional().describe(`Dotted path as array of segments (e.g. ["appearance","theme"]). Omit to return the full merged config.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},OutputSchema$5=outputSchemaWithText({value:unknown$2().describe(`Resolved config value at the requested path (or full config).`),exists:boolean$1().optional().describe('Whether the requested path resolved to a value. `false` distinguishes "path absent" from "path explicitly set to null"; absent on full-config reads.'),path:array(string$2()).optional().describe(`Echo of the requested dotted path (empty when reading the full config).`)});function readConfigPath(e,t){let S=e;for(let e of t){if(typeof S!=`object`||!S)return;S=S[e]}return S}function register$12(e,t){e.registerTool(`get_config`,{description:DESCRIPTION$12,inputSchema:InputSchema$2,outputSchema:OutputSchema$5,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{let S=await resolveProjectConfigContext(t.resolveCwd,t.config,e.cwd);if(!S.ok)return{isError:!0,content:[{type:`text`,text:`Error: ${S.error}`}]};let w=e.path??[],E=w.length>0?readConfigPath(S.config,w):S.config;return w.length>0&&E===void 0?textPlusStructured(`(no value at ${w.join(`.`)})`,{value:null,exists:!1,path:w}):textPlusStructured(JSON.stringify(E,null,2),{value:E,exists:!0,path:w})})}const DESCRIPTION$11=[`[Requires: Hocuspocus server] Fetch the three merge stages (base / ours / theirs) for a doc currently in a merge-conflict state, plus the doc's lifecycle status.`,`Returns 404 if no conflict is tracked for the path.`,"The `ours` field is sourced from the live Y.Text (showing any pre-conflict unflushed user edits) when the doc is loaded server-side; falls back to `git show :2:<file>` otherwise.",``,`**Parameters:**`,"- `file` — Relative-to-projectDir path WITH the `.md` extension (e.g. `notes/sso.md`). Mirrors the server-side wire contract."].join(`
2681
- `),OutputSchema$4=outputSchemaWithText({file:string$2(),base:string$2(),ours:string$2(),theirs:string$2(),lifecycleStatus:string$2().nullable()});function register$11(e,t){e.registerTool(`get_conflict_content`,{description:DESCRIPTION$11,inputSchema:{file:string$2().min(1).describe("Relative-to-projectDir path WITH .md extension (e.g. `notes/sso.md`). Server-side contract — do NOT strip the extension."),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},outputSchema:OutputSchema$4,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{url:w}=S;if(!w)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let E=await httpGet(w,`/api/sync/conflict-content${`?file=${encodeURIComponent(e.file)}&source=ytext`}`);if(!E.ok){let e=E.error,t=typeof E.detail==`string`?E.detail:void 0;return textResult(`Error: ${t?`${e} — ${t}`:e}`,!0)}let D=E,O=typeof D.file==`string`?D.file:e.file,k=typeof D.base==`string`?D.base:``,j=typeof D.ours==`string`?D.ours:``,F=typeof D.theirs==`string`?D.theirs:``,L=typeof D.lifecycleStatus==`string`?D.lifecycleStatus:null,B={file:O,base:k,ours:j,theirs:F,lifecycleStatus:L};return textPlusStructured(`Conflict stages for ${O}${L?` (lifecycle: ${L})`:``}:\n--- base ---\n${k}\n--- ours ---\n${j}\n--- theirs ---\n${F}`,B)})}const DESCRIPTION$10=[`[Requires: Hocuspocus server] List version history for a document.`,`Returns timeline entries from the shadow repo, sorted by timestamp descending.`,'Each entry includes a commit SHA that can be passed to `version({ action: "rollback" })`.',``,`**Parameters:**`,"- `docName` — Document name to query history for, typically without extension. A trailing `.md` or `.mdx` is stripped automatically.","- `branch` (optional) — Branch name (default: current branch)","- `limit` (optional) — Maximum entries to return (default 50, max 200)","- `offset` (optional) — Number of entries to skip for pagination (default 0)",'- `type` (optional) — Filter by entry type: "checkpoint", "upstream", or "wip"',"- `author` (optional) — Filter to entries by this author name or email","- `excludeAuthor` (optional) — Exclude entries by this author name or email"].join(`
2682
- `);function register$10(e,t){e.registerTool(`get_history`,{description:DESCRIPTION$10,inputSchema:{docName:string$2().describe(`Document name to query history for`),branch:string$2().optional().describe(`Branch name (default: current branch)`),limit:number$1().int().min(1).max(200).optional().describe(`Maximum entries to return (default 50, max 200)`),offset:number$1().int().min(0).optional().describe(`Number of entries to skip for pagination (default 0)`),type:_enum([`checkpoint`,`upstream`,`wip`]).optional().describe(`Filter by entry type`),author:string$2().optional().describe(`Filter to entries by this author name or email`),excludeAuthor:string$2().optional().describe(`Exclude entries by this author name or email`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,url:E}=S;if(!E)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let D=normalizeDocName(e.docName);if(!D.ok)return textResult(D.error,!0);let O=new URLSearchParams;O.set(`docName`,D.docName),e.branch&&O.set(`branch`,e.branch),e.limit!=null&&O.set(`limit`,String(e.limit)),e.offset!=null&&O.set(`offset`,String(e.offset)),e.type&&O.set(`type`,e.type),e.author&&O.set(`author`,e.author),e.excludeAuthor&&O.set(`excludeAuthor`,e.excludeAuthor);let k=await httpGet(E,`/api/history?${O.toString()}`);if(!k.ok)return textResult(`Error: ${k.error}`,!0);let{ok:j,...F}=k,L=await resolvePreviewUrlForTool(D.docName,{config:t.config,resolveCwd:t.resolveCwd},w);return textPlusStructured(JSON.stringify(F,null,2),{...F,previewUrl:L?.url??null,...L?{previewUrlSource:L.source}:{}})})}const DESCRIPTION$9=[`[Operates on disk; no running OK server required] Resolve the browser-reachable preview URL for an Open Knowledge project (optionally for a specific doc).`,``,"Per-response `previewUrl` fields on read/write tools are ROUTE-ONLY (`/#/<doc>`, no host:port) — they identify which doc to preview, not a URL to open by itself. Call this tool to get the full, openable URL.",``,'Use this when YOUR host opens the URL itself: navigate your in-app browser to the returned `url`, or — only on a stdio host with no browser tool — `open` it in the system browser. Claude Code does NOT need this tool: it calls `preview_start("open-knowledge-ui")`, whose pane supplies its own origin.',``,"Returns `{ url, baseUrl, running: false }` and a recovery hint when no UI is running for the project (start one with `ok ui`).",``,`**Parameters:**`,"- `docName` (optional) — Extension-less doc path (e.g. `specs/foo/SPEC`). Omit for the UI root URL.","- `cwd` (optional) — Project root (see `cwd` description below)."].join(`
2683
- `),InputSchema$1={docName:string$2().optional().describe(`Extension-less doc path to resolve a preview URL for (e.g. "specs/foo/SPEC"). Omit to get the UI root URL.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},OutputSchema$3=outputSchemaWithText({url:string$2().nullable().describe("Browser-reachable URL — the UI base joined with the doc route when `docName` is given, else the UI root. `null` when no UI is running."),baseUrl:string$2().nullable().describe("Browser-reachable origin of the running UI (e.g. `http://localhost:5173`). `null` when no UI is running."),running:boolean$1().describe(`Whether a UI is running for the project.`)}),NO_UI_MESSAGE='No UI is running for this project. Start one to see the preview: `ok ui` (terminal), `preview_start("open-knowledge-ui")` (Claude Code), or open the project in OK Electron.';function register$9(e,t){e.registerTool(`get_preview_url`,{description:DESCRIPTION$9,inputSchema:InputSchema$1,outputSchema:OutputSchema$3,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{let S=await resolveProjectConfigContext(t.resolveCwd,t.config,e.cwd);if(!S.ok)return{isError:!0,content:[{type:`text`,text:`Error: ${S.error}`}]};let{baseUrl:w}=resolveUiInfo({lockDir:resolveLockDir(S.cwd)});if(w===null)return textPlusStructured(NO_UI_MESSAGE,{url:null,baseUrl:null,running:!1});let E=e.docName?`${w}/#/${encodeDocName(e.docName)}`:w;return textPlusStructured(`Preview URL: ${E}`,{url:E,baseUrl:w,running:!0})})}function buildBody$1(e,t){return`Capture this external source into the project knowledge base as raw reference material. The KB is **closed-loop**: external sources are pulled INTO the knowledge base here so downstream docs cite local paths, never bare web URLs. This applies whether a user shared the source OR you fetched it yourself to ground a knowledge-base claim — agent-initiated fetches are not exempt. **Raw preservation only** — no summary, no analysis, no interpretation. Summarizing is the job of the \`research\` tool later.
2743
+ </Tabs>`,guidance:`Tabs is the one canonical with no markdown-native form — write the JSX directly.`}];function buildComponents(){let e=new Map(getAgentCanonicalDescriptors().map(e=>[e.name,e]));return AUTHORING_FORMS.map(t=>{let S=t.registryName?e.get(t.registryName):void 0;return{id:t.id,displayName:S?.displayName??S?.name??t.fallbackDisplayName,description:t.description,authoring:t.authoring,example:t.example,guidance:t.guidance}})}function register$15(e,t){e.registerTool(`get_authoring_palette`,{description:DESCRIPTION$15,inputSchema:InputSchema$4,outputSchema:OutputSchema$8,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{e.cwd;let t={version:1,components:buildComponents(),embedPatterns:PREVIEW_EMBED_STARTERS.map(e=>({id:e.id,title:e.title,description:e.description,snippet:previewEmbedFence(e)})),tokens:PREVIEW_THEME_TOKENS.map(e=>({name:e.name,light:e.light,dark:e.dark}))};return textPlusStructured(JSON.stringify(t,null,2),t)})}const ID_CARDINALITY_CAP=32,DESCRIPTION$14=["[Operates on registry data; no running OK server required] Return full per-entry details for the canonical components an agent picked from the inventory rendered in the `write_document` / `edit_document` tool descriptions.",``,"Each entry carries: literal source-form `example` (copy-pasteable) + form-aware `params` (every prop, with `type` / `values?` / `required` / `defaultValue?` / `description`). Unmatched ids surface in `notFound` rather than failing the call.",``,`**Parameters:**`,`- \`ids\` — Array of canonical ids picked from the write-tool inventory (e.g. \`["Callout", "Tabs"]\`). Max ${ID_CARDINALITY_CAP} ids per call. Case-sensitive — must match the inventory exactly (\`Callout\` not \`callout\`; \`img\` not \`Image\`).`,"- `cwd` (optional) — Project root (see `cwd` description below)."].join(`
2744
+ `),InputSchema$3={ids:array(string$2().min(1)).max(ID_CARDINALITY_CAP).describe(`Array of canonical ids to fetch. Max ${ID_CARDINALITY_CAP} ids per call. Empty array returns an empty components list.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},ParamSchema=object$1({name:string$2(),type:_enum([`string`,`boolean`,`number`,`enum`,`reactnode`]),values:array(string$2()).optional(),required:boolean$1(),defaultValue:union([string$2(),boolean$1(),number$1()]).optional(),description:string$2().optional(),omitOnDefault:literal(!0).optional(),advanced:literal(!0).optional(),language:_enum([`mermaid`,`latex`,`html`,`json`,`yaml`,`javascript`,`markdown`]).optional(),accept:array(string$2()).optional()}),ComponentEntrySchema=object$1({id:string$2(),displayName:string$2(),description:string$2(),kind:_enum([`jsx-block`,`jsx-void`]),example:string$2(),params:array(ParamSchema)}),OutputSchema$7=outputSchemaWithText({version:literal(1).describe(`Schema version stamp — bump for breaking shape changes.`),components:array(ComponentEntrySchema).describe(`Full per-entry details for ids that matched.`),notFound:array(string$2()).describe(`Ids that did not match any canonical descriptor.`)});function register$14(e,t){e.registerTool(`get_components`,{description:DESCRIPTION$14,inputSchema:InputSchema$3,outputSchema:OutputSchema$7,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{e.cwd;let t=getAgentCanonicalDescriptors(),S=new Map(t.map(e=>[e.name,e])),w=[],E=[],D=new Set;for(let t of e.ids){if(D.has(t))continue;D.add(t);let e=S.get(t);if(e===void 0){E.push(t);continue}w.push(projectFull(e))}let O={version:1,components:w,notFound:E};return textPlusStructured(JSON.stringify(O,null,2),O)})}const DESCRIPTION$13=[`[Operates on disk; no running OK server required] Read the effective merged Open Knowledge config (defaults → user → project).`,``,`Use this when you need to inspect the config mid-session — e.g., after a write that may have changed disk state, or to re-confirm the value of a field before reading it again.`,``,"Read returns the FULL merged config or a sub-tree when `path` is provided. There is no allowlist on reads — every field is readable.",``,"Note: the `server.*`, `mcp.*`, `github.*`, and `preview.*` config sub-trees were removed; their values are now built-in constants in `@inkeep/open-knowledge-core` (or hardcoded behavior, in the case of `preview.*`). Reading those paths returns `exists: false`.",``,`**Parameters:**`,'- `path` (optional) — Dotted-segments array. `["content"]` returns the content sub-tree; `["appearance", "theme"]` returns just that leaf. Omit for full config.',"- `cwd` (optional) — Project root (see `cwd` description below)."].join(`
2745
+ `),InputSchema$2={path:array(string$2()).optional().describe(`Dotted path as array of segments (e.g. ["appearance","theme"]). Omit to return the full merged config.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},OutputSchema$6=outputSchemaWithText({value:unknown$2().describe(`Resolved config value at the requested path (or full config).`),exists:boolean$1().optional().describe('Whether the requested path resolved to a value. `false` distinguishes "path absent" from "path explicitly set to null"; absent on full-config reads.'),path:array(string$2()).optional().describe(`Echo of the requested dotted path (empty when reading the full config).`)});function readConfigPath(e,t){let S=e;for(let e of t){if(typeof S!=`object`||!S)return;S=S[e]}return S}function register$13(e,t){e.registerTool(`get_config`,{description:DESCRIPTION$13,inputSchema:InputSchema$2,outputSchema:OutputSchema$6,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{let S=await resolveProjectConfigContext(t.resolveCwd,t.config,e.cwd);if(!S.ok)return{isError:!0,content:[{type:`text`,text:`Error: ${S.error}`}]};let w=e.path??[],E=w.length>0?readConfigPath(S.config,w):S.config;return w.length>0&&E===void 0?textPlusStructured(`(no value at ${w.join(`.`)})`,{value:null,exists:!1,path:w}):textPlusStructured(JSON.stringify(E,null,2),{value:E,exists:!0,path:w})})}const DESCRIPTION$12=[`[Requires: Hocuspocus server] Fetch the three merge stages (base / ours / theirs) for a doc currently in a merge-conflict state, plus the doc's lifecycle status.`,`Returns 404 if no conflict is tracked for the path.`,"The `ours` field is sourced from the live Y.Text (showing any pre-conflict unflushed user edits) when the doc is loaded server-side; falls back to `git show :2:<file>` otherwise.",``,`**Parameters:**`,"- `file` — Relative-to-projectDir path WITH the `.md` extension (e.g. `notes/sso.md`). Mirrors the server-side wire contract."].join(`
2746
+ `),OutputSchema$5=outputSchemaWithText({file:string$2(),base:string$2(),ours:string$2(),theirs:string$2(),lifecycleStatus:string$2().nullable()});function register$12(e,t){e.registerTool(`get_conflict_content`,{description:DESCRIPTION$12,inputSchema:{file:string$2().min(1).describe("Relative-to-projectDir path WITH .md extension (e.g. `notes/sso.md`). Server-side contract — do NOT strip the extension."),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},outputSchema:OutputSchema$5,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{url:w}=S;if(!w)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let E=await httpGet(w,`/api/sync/conflict-content${`?file=${encodeURIComponent(e.file)}&source=ytext`}`);if(!E.ok){let e=E.error,t=typeof E.detail==`string`?E.detail:void 0;return textResult(`Error: ${t?`${e} — ${t}`:e}`,!0)}let D=E,O=typeof D.file==`string`?D.file:e.file,k=typeof D.base==`string`?D.base:``,j=typeof D.ours==`string`?D.ours:``,F=typeof D.theirs==`string`?D.theirs:``,L=typeof D.lifecycleStatus==`string`?D.lifecycleStatus:null,B={file:O,base:k,ours:j,theirs:F,lifecycleStatus:L};return textPlusStructured(`Conflict stages for ${O}${L?` (lifecycle: ${L})`:``}:\n--- base ---\n${k}\n--- ours ---\n${j}\n--- theirs ---\n${F}`,B)})}const DESCRIPTION$11=[`[Requires: Hocuspocus server] List version history for a document.`,`Returns timeline entries from the shadow repo, sorted by timestamp descending.`,'Each entry includes a commit SHA that can be passed to `version({ action: "rollback" })`.',``,`**Parameters:**`,"- `docName` — Document name to query history for, typically without extension. A trailing `.md` or `.mdx` is stripped automatically.","- `branch` (optional) — Branch name (default: current branch)","- `limit` (optional) — Maximum entries to return (default 50, max 200)","- `offset` (optional) — Number of entries to skip for pagination (default 0)",'- `type` (optional) — Filter by entry type: "checkpoint", "upstream", or "wip"',"- `author` (optional) — Filter to entries by this author name or email","- `excludeAuthor` (optional) — Exclude entries by this author name or email"].join(`
2747
+ `);function register$11(e,t){e.registerTool(`get_history`,{description:DESCRIPTION$11,inputSchema:{docName:string$2().describe(`Document name to query history for`),branch:string$2().optional().describe(`Branch name (default: current branch)`),limit:number$1().int().min(1).max(200).optional().describe(`Maximum entries to return (default 50, max 200)`),offset:number$1().int().min(0).optional().describe(`Number of entries to skip for pagination (default 0)`),type:_enum([`checkpoint`,`upstream`,`wip`]).optional().describe(`Filter by entry type`),author:string$2().optional().describe(`Filter to entries by this author name or email`),excludeAuthor:string$2().optional().describe(`Exclude entries by this author name or email`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,url:E}=S;if(!E)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let D=normalizeDocName(e.docName);if(!D.ok)return textResult(D.error,!0);let O=new URLSearchParams;O.set(`docName`,D.docName),e.branch&&O.set(`branch`,e.branch),e.limit!=null&&O.set(`limit`,String(e.limit)),e.offset!=null&&O.set(`offset`,String(e.offset)),e.type&&O.set(`type`,e.type),e.author&&O.set(`author`,e.author),e.excludeAuthor&&O.set(`excludeAuthor`,e.excludeAuthor);let k=await httpGet(E,`/api/history?${O.toString()}`);if(!k.ok)return textResult(`Error: ${k.error}`,!0);let{ok:j,...F}=k,L=await resolvePreviewUrlForTool(D.docName,{config:t.config,resolveCwd:t.resolveCwd},w);return textPlusStructured(JSON.stringify(F,null,2),{...F,previewUrl:L?.url??null,...L?{previewUrlSource:L.source}:{}})})}const DESCRIPTION$10=[`[Operates on disk; no running OK server required] Resolve the browser-reachable preview URL for an Open Knowledge project (optionally for a specific doc).`,``,"Per-response `previewUrl` fields on read/write tools are ROUTE-ONLY (`/#/<doc>`, no host:port) — they identify which doc to preview, not a URL to open by itself. Call this tool to get the full, openable URL.",``,'Use this when YOUR host opens the URL itself: navigate your in-app browser to the returned `url`, or — only on a stdio host with no browser tool — `open` it in the system browser. Claude Code does NOT need this tool: it calls `preview_start("open-knowledge-ui")`, whose pane supplies its own origin.',``,"Returns `{ url, baseUrl, running: false }` and a recovery hint when no UI is running for the project (start one with `ok ui`).",``,`**Parameters:**`,"- `docName` (optional) — Extension-less doc path (e.g. `specs/foo/SPEC`). Omit for the UI root URL.","- `cwd` (optional) — Project root (see `cwd` description below)."].join(`
2748
+ `),InputSchema$1={docName:string$2().optional().describe(`Extension-less doc path to resolve a preview URL for (e.g. "specs/foo/SPEC"). Omit to get the UI root URL.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},OutputSchema$4=outputSchemaWithText({url:string$2().nullable().describe("Browser-reachable URL — the UI base joined with the doc route when `docName` is given, else the UI root. `null` when no UI is running."),baseUrl:string$2().nullable().describe("Browser-reachable origin of the running UI (e.g. `http://localhost:5173`). `null` when no UI is running."),running:boolean$1().describe(`Whether a UI is running for the project.`)}),NO_UI_MESSAGE='No UI is running for this project. Start one to see the preview: `ok ui` (terminal), `preview_start("open-knowledge-ui")` (Claude Code), or open the project in OK Electron.';function register$10(e,t){e.registerTool(`get_preview_url`,{description:DESCRIPTION$10,inputSchema:InputSchema$1,outputSchema:OutputSchema$4,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{let S=await resolveProjectConfigContext(t.resolveCwd,t.config,e.cwd);if(!S.ok)return{isError:!0,content:[{type:`text`,text:`Error: ${S.error}`}]};let{baseUrl:w}=resolveUiInfo({lockDir:resolveLockDir(S.cwd)});if(w===null)return textPlusStructured(NO_UI_MESSAGE,{url:null,baseUrl:null,running:!1});let E=e.docName?`${w}/#/${encodeDocName(e.docName)}`:w;return textPlusStructured(`Preview URL: ${E}`,{url:E,baseUrl:w,running:!0})})}function buildBody$1(e,t){return`Capture this external source into the project knowledge base as raw reference material. The KB is **closed-loop**: external sources are pulled INTO the knowledge base here so downstream docs cite local paths, never bare web URLs. This applies whether a user shared the source OR you fetched it yourself to ground a knowledge-base claim — agent-initiated fetches are not exempt. **Raw preservation only** — no summary, no analysis, no interpretation. Summarizing is the job of the \`research\` tool later.
2684
2749
 
2685
2750
  **Bias toward binary preservation.** When the source is a binary file (PDF, image, audio, video, Office doc, archive, dataset), preserve the raw bytes — do NOT settle for a text scrape. OK already ships a complete asset-embed surface (\`![[file.ext]]\` wiki-embed, file-watcher pickup, sha256 dedup, blocked-extension enforcement); this tool's job is to bridge \`ingest\` to it via your shell tool.
2686
2751
 
@@ -2918,12 +2983,12 @@ If the source is directly relevant to an existing article or research doc, updat
2918
2983
  - **No OCR / transcription** — binary preservation only. \`research\` may apply analysis layers downstream.
2919
2984
  - **No streaming-video direct download** — \`yt-dlp\` is a separate workflow; \`ingest\` STOPs and routes to it (Step 1a STOP gate 1).
2920
2985
  - **No executable / scripted-document auto-fetch** — hard-blocked at Step 1b STOP gate 1 (write-path only). User runs \`curl\` manually outside the agent if they need to archive such a file.
2921
- `}const DESCRIPTION$8=[`Returns a step-by-step plan to capture an external source (URL or local file) into the knowledge base as raw, verbatim reference material — no analysis. Does NOT fetch or write — you execute the plan.`,"Biases toward preserving raw binary files (PDF, image, audio, video) via the shell + `![[file.ext]]` embed, falling back to text extraction on shell-less hosts. The KB is closed-loop: cite the captured local doc, never a bare URL.",`Use when a source needs preserving before analysis — including URLs you fetched yourself to ground a KB claim.`].join(`
2922
- `);function register$8(e,t){e.registerTool(`ingest`,{description:DESCRIPTION$8,inputSchema:{source:string$2().describe(`URL, file path, or identifier of the source to ingest`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},buildWorkflowHandler(`ingest`,t,`source`,buildBody$1))}const LINK_KINDS=[`backlinks`,`forward`,`dead`,`orphans`,`hubs`,`suggest`],DESCRIPTION$7=["[Requires: Hocuspocus server] Read the wiki-link graph. `kind` takes one value, or an array for a one-call audit — results merge into a single payload; any per-kind failure lands in an `errors` map.",``,"- `backlinks` / `forward` / `suggest` — operate on one page; require `docName`. `suggest` finds prose mentions of the page not yet wrapped in link syntax (each mention `offset` works with `edit_document`).","- `dead` — missing internal link targets corpus-wide; optional `sourceDocNames` filter (OR semantics).","- `orphans` — disconnected pages; optional `mode`: `incoming` | `outgoing` | `both`.","- `hubs` — most-linked pages; optional `limit` (default 20)."].join(`
2923
- `);function register$7(e,t){e.registerTool(`links`,{description:DESCRIPTION$7,inputSchema:{kind:union([_enum(LINK_KINDS),array(_enum(LINK_KINDS)).min(1)]).describe(`Link-graph view(s) to return — one kind, or an array to fetch several in one call (e.g. ["dead","orphans","hubs"] for a graph audit).`),docName:string$2().optional().describe(`Target page docName. Required for kind=backlinks|forward|suggest.`),sourceDocNames:array(string$2()).optional().describe(`Referring source docs to narrow the audit with OR semantics. Used by kind=dead.`),mode:_enum(ORPHAN_MODES).optional().describe(`Filter which type of graph disconnection to surface. Used by kind=orphans.`),limit:number$1().int().positive().optional().describe(`Maximum number of hubs to return. Used by kind=hubs.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,url:E}=S;if(!E)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let D=Array.isArray(e.kind)?[...new Set(e.kind)]:[e.kind],{resolve:O}=await buildListResolver(t,w),k=await Promise.all(D.map(S=>runKind(S,e,E,w,t,O))),j={},F={};if(D.forEach((e,t)=>{let S=k[t];S.ok?Object.assign(j,S.data):F[e]=S.error}),Object.keys(j).length===0){let e=D.length===1?F[D[0]]:`All requested link kinds failed: ${JSON.stringify(F)}`;return textResult(e.startsWith(`Error`)?e:`Error: ${e}`,!0)}let L={...j,...Object.keys(F).length>0?{errors:F}:{},cwd:w};return textPlusStructured(JSON.stringify(L,null,2),L)})}function runKind(e,t,S,w,E,D){switch(e){case`backlinks`:return runBacklinks(t,S,D);case`forward`:return runForwardLinks(t,S,D);case`dead`:return runDeadLinks(t,S,D);case`orphans`:return runOrphans(t,S,D);case`hubs`:return runHubs(t,S,D);case`suggest`:return runSuggest(t,S,w,E)}}async function runBacklinks(e,t,S){if(!e.docName)return{ok:!1,error:"kind=backlinks requires `docName`."};let w=normalizeDocName(e.docName);if(!w.ok)return{ok:!1,error:w.error};let E=await httpGet(t,`/api/backlinks?docName=${encodeURIComponent(w.docName)}`);if(!E.ok)return{ok:!1,error:String(E.error)};let{ok:D,...O}=E;return{ok:!0,data:{backlinks:(O.backlinks??[]).map(e=>{let t=typeof e.source==`string`?e.source:null,w=t?S(t):null;return{...e,previewUrl:w?.url??null,...w?{previewUrlSource:w.source}:{}}})}}}async function runForwardLinks(e,t,S){if(!e.docName)return{ok:!1,error:"kind=forward requires `docName`."};let w=normalizeDocName(e.docName);if(!w.ok)return{ok:!1,error:w.error};let E=await httpGet(t,`/api/forward-links?docName=${encodeURIComponent(w.docName)}`);if(!E.ok)return{ok:!1,error:String(E.error)};let{ok:D,...O}=E;return{ok:!0,data:{forwardLinks:(O.forwardLinks??[]).map(e=>{let t=e.kind===`doc`&&typeof e.docName==`string`?e.docName:null,w=t?S(t):null;return{...e,previewUrl:w?.url??null,...w?{previewUrlSource:w.source}:{}}})}}}async function runDeadLinks(e,t,S){let w=new URLSearchParams;for(let t of e.sourceDocNames??[]){let e=normalizeDocName(t);if(!e.ok)return{ok:!1,error:e.error};w.append(`sourceDocName`,e.docName)}let E=w.toString(),D=await httpGet(t,`/api/dead-links${E?`?${E}`:``}`);if(!D.ok)return{ok:!1,error:String(D.error)};let{ok:O,...k}=D;return{ok:!0,data:{deadLinks:(k.deadLinks??[]).map(e=>{let t=typeof e.target==`string`?e.target:null,w=t?S(t):null,E=(e.sources??[]).map(e=>{let t=typeof e.source==`string`?e.source:null,w=t?S(t):null;return{...e,previewUrl:w?.url??null,...w?{previewUrlSource:w.source}:{}}});return{...e,sources:E,previewUrl:w?.url??null,...w?{previewUrlSource:w.source}:{}}})}}}async function runOrphans(e,t,S){let w=await httpGet(t,`/api/orphans${e.mode?`?mode=${encodeURIComponent(e.mode)}`:``}`);if(!w.ok)return{ok:!1,error:String(w.error)};let{ok:E,...D}=w;return{ok:!0,data:{orphans:(D.orphans??[]).map(e=>{let t=typeof e.docName==`string`?e.docName:null,w=t?S(t):null;return{...e,previewUrl:w?.url??null,...w?{previewUrlSource:w.source}:{}}})}}}async function runHubs(e,t,S){let w=await httpGet(t,`/api/hubs${e.limit?`?limit=${encodeURIComponent(String(e.limit))}`:``}`);if(!w.ok)return{ok:!1,error:String(w.error)};let{ok:E,...D}=w;return{ok:!0,data:{hubs:(D.hubs??[]).map(e=>{let t=typeof e.docName==`string`?e.docName:null,w=t?S(t):null;return{...e,previewUrl:w?.url??null,...w?{previewUrlSource:w.source}:{}}})}}}async function runSuggest(e,t,S,w){if(!e.docName)return{ok:!1,error:"kind=suggest requires `docName`."};let E=normalizeDocName(e.docName);if(!E.ok)return{ok:!1,error:E.error};let D=await httpGet(t,`/api/suggest-links?docName=${encodeURIComponent(E.docName)}`);if(!D.ok)return{ok:!1,error:String(D.error)};let{ok:O,...k}=D,j=await resolvePreviewUrlForTool(E.docName,{config:w.config,resolveCwd:w.resolveCwd},S);return{ok:!0,data:{suggest:{...k,previewUrl:j?.url??null,...j?{previewUrlSource:j.source}:{}}}}}const DESCRIPTION$6=[`[Requires: Hocuspocus server] Enumerate every document currently tracked as in a merge-conflict state.`,"Returns one entry per file (relative-path, detection timestamp, optional git SHAs). When no conflicts are tracked, returns `conflicts: []`.",``,"Use as the entry point to the conflict-resolution flow: `list_conflicts` to discover, `get_conflict_content` to inspect stages, `resolve_conflict` to write a chosen version."].join(`
2924
- `),OutputSchema$2=outputSchemaWithText({conflicts:array(ConflictEntrySchema)});function register$6(e,t){e.registerTool(`list_conflicts`,{description:DESCRIPTION$6,inputSchema:{cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},outputSchema:OutputSchema$2,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{url:w}=S;if(!w)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let E=await httpGet(w,`/api/sync/conflicts`);if(!E.ok){let e=E.error;return textPlusStructured(`Error: ${e}`,{conflicts:[]},!0)}let D=E.conflicts,O=Array.isArray(D)?D:[];return textPlusStructured(O.length===0?`No conflicts tracked.`:`Tracked conflicts (${O.length}):\n${O.map(e=>`- ${e&&typeof e==`object`&&`file`in e?String(e.file??``):``}`).join(`
2925
- `)}`,{conflicts:O})})}const DESCRIPTION$5=["[Requires: Hocuspocus server] Rename a doc or a folder through the managed rename flow at `POST /api/rename-path`. The tool probes the content directory to decide whether `from` is a doc or a folder, then sets `kind` (`file` vs `folder`) accordingly. Renaming rewrites inbound wiki-links plus supported internal inline Markdown links across affected docs.",``,`**Parameters:**`,"- `from` — Source path. For a doc, the docName (typically without extension; trailing `.md`/`.mdx` is stripped). For a folder, the folder path relative to the content directory with no leading/trailing slash (e.g. `notes/drafts`).","- `to` — Destination path. Same shape as `from`. For a folder rename, parent directories are auto-created.",'- `summary` — Optional one-line user-outcome description (≤80 chars). If omitted, defaults to "Renamed X → Y". Appears as a bullet in the timeline. Avoid secrets or PII — summaries persist to git history.',``,`**Output:**`,"- Doc rename — `{previewUrl, previousPreviewUrl?, renamed, rewrittenDocs, ...}`.","- Folder rename — `{previewUrls: Record<newDocName, url>, renamed, rewrittenDocs, ...}`.",``,`**Errors:**`,"- 400 — case-only renames; destination excluded by `.gitignore` / `.okignore`; invalid path shape.",`- 404 — source doc or folder does not exist.`,"- 409 — destination already exists; server returns a structured `colliding[]` list in this case."].join(`
2926
- `);function parseRenameMappings(e){return Array.isArray(e)?e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{fromDocName:t,toDocName:S}=e;return typeof t==`string`&&typeof S==`string`?[{fromDocName:t,toDocName:S}]:[]}):[]}function parseRewrittenDocs(e){return Array.isArray(e)?e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{docName:t,rewrites:S}=e;return typeof t==`string`&&typeof S==`number`?[{docName:t,rewrites:S}]:[]}):[]}function isValidFolderPath(e){return!(typeof e!=`string`||e.length===0||e.startsWith(`/`)||e.endsWith(`/`)||e.includes(`..`))}function pluralize(e,t,S=`${t}s`){return e===1?t:S}function resolveRenameKind(e,t){let S=resolveWithinRoot(e,t);if(!S.ok)return null;let w=S.abs;if(existsSync(w))try{let e=statSync(w);if(e.isDirectory())return`folder`;if(e.isFile()&&(w.endsWith(`.md`)||w.endsWith(`.mdx`)))return`file`}catch(e){let t=e.code;if(t===`EACCES`||t===`EPERM`)return`file`}for(let e of[`.md`,`.mdx`])if(existsSync(`${w}${e}`))return`file`;return null}function register$5(e,t){e.registerTool(`rename`,{description:DESCRIPTION$5,inputSchema:{from:string$2().describe(`Current path. Doc: docName (typically extensionless). Folder: relative path with no leading/trailing slash.`),to:string$2().describe(`New path. Doc: docName (typically extensionless). Folder: relative path with no leading/trailing slash.`),summary:summaryArgSchema.describe(`Optional one-line user-outcome description (≤80 chars). Defaults to "Renamed X → Y" when omitted. Persisted to git history.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,config:E,url:D}=S;if(!D)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let O=resolveRenameKind(join(w,E.content.dir),e.from);return O===null?textResult(`Error: \`${e.from}\` does not exist as a doc or folder under the content directory.`,!0):O===`file`?handleFileRename(e,D,w,t):handleFolderRename(e,D,w,t)})}async function handleFileRename(e,t,S,w){let E=normalizeDocName(e.from);if(!E.ok)return textResult(E.error,!0);let D=normalizeDocName(e.to);if(!D.ok)return textResult(D.error,!0);let O=w.identityRef?.current,k=await httpPost(t,`/api/rename-path`,{kind:`file`,fromPath:E.docName,toPath:D.docName,...e.summary===void 0?{}:{summary:e.summary},...O?{agentId:O.connectionId,agentName:O.displayName,clientName:O.clientInfo?.name,colorSeed:O.colorSeed}:{}});if(!k.ok){let e=k.error,t=parseRenameCollidingPairs(k.colliding),S={ok:!1,error:e,...t.length>0?{colliding:t}:{}};return textPlusStructured(`Error: ${e}`,S,!0)}let j=parseRenameMappings(k.renamed),F=parseRewrittenDocs(k.rewrittenDocs),L=j.map(({fromDocName:e,toDocName:t})=>`${e} -> ${t}`).join(`, `)||`${E.docName} -> ${D.docName}`,B=F.length===0?`No inbound links required updates.`:`Rewrote ${F.length} ${pluralize(F.length,`document`)}.`,H={config:w.config,resolveCwd:w.resolveCwd},q=await resolvePreviewUrlForTool(D.docName,H,S),J=await resolvePreviewUrlForTool(E.docName,H,S),Y=k.summary&&typeof k.summary==`object`?k.summary:void 0,ee=typeof Y?.hint==`string`?Y.hint:void 0,te={ok:!0,kind:`file`,renamed:j,rewrittenDocs:F,previewUrl:q?.url??null,...q?{previewUrlSource:q.source}:{},...J?{previousPreviewUrl:J.url}:{},...Y?{summary:Y}:{}},ne=[`Renamed ${L}. ${B}`];return ee&&ne.push(ee),textPlusStructured(ne.join(`
2986
+ `}const DESCRIPTION$9=[`Returns a step-by-step plan to capture an external source (URL or local file) into the knowledge base as raw, verbatim reference material — no analysis. Does NOT fetch or write — you execute the plan.`,"Biases toward preserving raw binary files (PDF, image, audio, video) via the shell + `![[file.ext]]` embed, falling back to text extraction on shell-less hosts. The KB is closed-loop: cite the captured local doc, never a bare URL.",`Use when a source needs preserving before analysis — including URLs you fetched yourself to ground a KB claim.`].join(`
2987
+ `);function register$9(e,t){e.registerTool(`ingest`,{description:DESCRIPTION$9,inputSchema:{source:string$2().describe(`URL, file path, or identifier of the source to ingest`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},buildWorkflowHandler(`ingest`,t,`source`,buildBody$1))}const LINK_KINDS=[`backlinks`,`forward`,`dead`,`orphans`,`hubs`,`suggest`],DESCRIPTION$8=["[Requires: Hocuspocus server] Read the wiki-link graph. `kind` takes one value, or an array for a one-call audit — results merge into a single payload; any per-kind failure lands in an `errors` map.",``,"- `backlinks` / `forward` / `suggest` — operate on one page; require `docName`. `suggest` finds prose mentions of the page not yet wrapped in link syntax (each mention `offset` works with `edit_document`).","- `dead` — missing internal link targets corpus-wide; optional `sourceDocNames` filter (OR semantics).","- `orphans` — disconnected pages; optional `mode`: `incoming` | `outgoing` | `both`.","- `hubs` — most-linked pages; optional `limit` (default 20)."].join(`
2988
+ `);function register$8(e,t){e.registerTool(`links`,{description:DESCRIPTION$8,inputSchema:{kind:union([_enum(LINK_KINDS),array(_enum(LINK_KINDS)).min(1)]).describe(`Link-graph view(s) to return — one kind, or an array to fetch several in one call (e.g. ["dead","orphans","hubs"] for a graph audit).`),docName:string$2().optional().describe(`Target page docName. Required for kind=backlinks|forward|suggest.`),sourceDocNames:array(string$2()).optional().describe(`Referring source docs to narrow the audit with OR semantics. Used by kind=dead.`),mode:_enum(ORPHAN_MODES).optional().describe(`Filter which type of graph disconnection to surface. Used by kind=orphans.`),limit:number$1().int().positive().optional().describe(`Maximum number of hubs to return. Used by kind=hubs.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,url:E}=S;if(!E)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let D=Array.isArray(e.kind)?[...new Set(e.kind)]:[e.kind],{resolve:O}=await buildListResolver(t,w),k=await Promise.all(D.map(S=>runKind(S,e,E,w,t,O))),j={},F={};if(D.forEach((e,t)=>{let S=k[t];S.ok?Object.assign(j,S.data):F[e]=S.error}),Object.keys(j).length===0){let e=D.length===1?F[D[0]]:`All requested link kinds failed: ${JSON.stringify(F)}`;return textResult(e.startsWith(`Error`)?e:`Error: ${e}`,!0)}let L={...j,...Object.keys(F).length>0?{errors:F}:{},cwd:w};return textPlusStructured(JSON.stringify(L,null,2),L)})}function runKind(e,t,S,w,E,D){switch(e){case`backlinks`:return runBacklinks(t,S,D);case`forward`:return runForwardLinks(t,S,D);case`dead`:return runDeadLinks(t,S,D);case`orphans`:return runOrphans(t,S,D);case`hubs`:return runHubs(t,S,D);case`suggest`:return runSuggest(t,S,w,E)}}async function runBacklinks(e,t,S){if(!e.docName)return{ok:!1,error:"kind=backlinks requires `docName`."};let w=normalizeDocName(e.docName);if(!w.ok)return{ok:!1,error:w.error};let E=await httpGet(t,`/api/backlinks?docName=${encodeURIComponent(w.docName)}`);if(!E.ok)return{ok:!1,error:String(E.error)};let{ok:D,...O}=E;return{ok:!0,data:{backlinks:(O.backlinks??[]).map(e=>{let t=typeof e.source==`string`?e.source:null,w=t?S(t):null;return{...e,previewUrl:w?.url??null,...w?{previewUrlSource:w.source}:{}}})}}}async function runForwardLinks(e,t,S){if(!e.docName)return{ok:!1,error:"kind=forward requires `docName`."};let w=normalizeDocName(e.docName);if(!w.ok)return{ok:!1,error:w.error};let E=await httpGet(t,`/api/forward-links?docName=${encodeURIComponent(w.docName)}`);if(!E.ok)return{ok:!1,error:String(E.error)};let{ok:D,...O}=E;return{ok:!0,data:{forwardLinks:(O.forwardLinks??[]).map(e=>{let t=e.kind===`doc`&&typeof e.docName==`string`?e.docName:null,w=t?S(t):null;return{...e,previewUrl:w?.url??null,...w?{previewUrlSource:w.source}:{}}})}}}async function runDeadLinks(e,t,S){let w=new URLSearchParams;for(let t of e.sourceDocNames??[]){let e=normalizeDocName(t);if(!e.ok)return{ok:!1,error:e.error};w.append(`sourceDocName`,e.docName)}let E=w.toString(),D=await httpGet(t,`/api/dead-links${E?`?${E}`:``}`);if(!D.ok)return{ok:!1,error:String(D.error)};let{ok:O,...k}=D;return{ok:!0,data:{deadLinks:(k.deadLinks??[]).map(e=>{let t=typeof e.target==`string`?e.target:null,w=t?S(t):null,E=(e.sources??[]).map(e=>{let t=typeof e.source==`string`?e.source:null,w=t?S(t):null;return{...e,previewUrl:w?.url??null,...w?{previewUrlSource:w.source}:{}}});return{...e,sources:E,previewUrl:w?.url??null,...w?{previewUrlSource:w.source}:{}}})}}}async function runOrphans(e,t,S){let w=await httpGet(t,`/api/orphans${e.mode?`?mode=${encodeURIComponent(e.mode)}`:``}`);if(!w.ok)return{ok:!1,error:String(w.error)};let{ok:E,...D}=w;return{ok:!0,data:{orphans:(D.orphans??[]).map(e=>{let t=typeof e.docName==`string`?e.docName:null,w=t?S(t):null;return{...e,previewUrl:w?.url??null,...w?{previewUrlSource:w.source}:{}}})}}}async function runHubs(e,t,S){let w=await httpGet(t,`/api/hubs${e.limit?`?limit=${encodeURIComponent(String(e.limit))}`:``}`);if(!w.ok)return{ok:!1,error:String(w.error)};let{ok:E,...D}=w;return{ok:!0,data:{hubs:(D.hubs??[]).map(e=>{let t=typeof e.docName==`string`?e.docName:null,w=t?S(t):null;return{...e,previewUrl:w?.url??null,...w?{previewUrlSource:w.source}:{}}})}}}async function runSuggest(e,t,S,w){if(!e.docName)return{ok:!1,error:"kind=suggest requires `docName`."};let E=normalizeDocName(e.docName);if(!E.ok)return{ok:!1,error:E.error};let D=await httpGet(t,`/api/suggest-links?docName=${encodeURIComponent(E.docName)}`);if(!D.ok)return{ok:!1,error:String(D.error)};let{ok:O,...k}=D,j=await resolvePreviewUrlForTool(E.docName,{config:w.config,resolveCwd:w.resolveCwd},S);return{ok:!0,data:{suggest:{...k,previewUrl:j?.url??null,...j?{previewUrlSource:j.source}:{}}}}}const DESCRIPTION$7=[`[Requires: Hocuspocus server] Enumerate every document currently tracked as in a merge-conflict state.`,"Returns one entry per file (relative-path, detection timestamp, optional git SHAs). When no conflicts are tracked, returns `conflicts: []`.",``,"Use as the entry point to the conflict-resolution flow: `list_conflicts` to discover, `get_conflict_content` to inspect stages, `resolve_conflict` to write a chosen version."].join(`
2989
+ `),OutputSchema$3=outputSchemaWithText({conflicts:array(ConflictEntrySchema)});function register$7(e,t){e.registerTool(`list_conflicts`,{description:DESCRIPTION$7,inputSchema:{cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},outputSchema:OutputSchema$3,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{url:w}=S;if(!w)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let E=await httpGet(w,`/api/sync/conflicts`);if(!E.ok){let e=E.error;return textPlusStructured(`Error: ${e}`,{conflicts:[]},!0)}let D=E.conflicts,O=Array.isArray(D)?D:[];return textPlusStructured(O.length===0?`No conflicts tracked.`:`Tracked conflicts (${O.length}):\n${O.map(e=>`- ${e&&typeof e==`object`&&`file`in e?String(e.file??``):``}`).join(`
2990
+ `)}`,{conflicts:O})})}const DESCRIPTION$6=["[Requires: Hocuspocus server] Rename a doc or a folder through the managed rename flow at `POST /api/rename-path`. The tool probes the content directory to decide whether `from` is a doc or a folder, then sets `kind` (`file` vs `folder`) accordingly. Renaming rewrites inbound wiki-links plus supported internal inline Markdown links across affected docs.",``,`**Parameters:**`,"- `from` — Source path. For a doc, the docName (typically without extension; trailing `.md`/`.mdx` is stripped). For a folder, the folder path relative to the content directory with no leading/trailing slash (e.g. `notes/drafts`).","- `to` — Destination path. Same shape as `from`. For a folder rename, parent directories are auto-created.",'- `summary` — Optional one-line user-outcome description (≤80 chars). If omitted, defaults to "Renamed X → Y". Appears as a bullet in the timeline. Avoid secrets or PII — summaries persist to git history.',``,`**Output:**`,"- Doc rename — `{previewUrl, previousPreviewUrl?, renamed, rewrittenDocs, ...}`.","- Folder rename — `{previewUrls: Record<newDocName, url>, renamed, rewrittenDocs, ...}`.",``,`**Errors:**`,"- 400 — case-only renames; destination excluded by `.gitignore` / `.okignore`; invalid path shape.",`- 404 — source doc or folder does not exist.`,"- 409 — destination already exists; server returns a structured `colliding[]` list in this case."].join(`
2991
+ `);function parseRenameMappings(e){return Array.isArray(e)?e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{fromDocName:t,toDocName:S}=e;return typeof t==`string`&&typeof S==`string`?[{fromDocName:t,toDocName:S}]:[]}):[]}function parseRewrittenDocs(e){return Array.isArray(e)?e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{docName:t,rewrites:S}=e;return typeof t==`string`&&typeof S==`number`?[{docName:t,rewrites:S}]:[]}):[]}function isValidFolderPath(e){return!(typeof e!=`string`||e.length===0||e.startsWith(`/`)||e.endsWith(`/`)||e.includes(`..`))}function pluralize(e,t,S=`${t}s`){return e===1?t:S}function resolveRenameKind(e,t){let S=resolveWithinRoot(e,t);if(!S.ok)return null;let w=S.abs;if(existsSync(w))try{let e=statSync(w);if(e.isDirectory())return`folder`;if(e.isFile()&&(w.endsWith(`.md`)||w.endsWith(`.mdx`)))return`file`}catch(e){let t=e.code;if(t===`EACCES`||t===`EPERM`)return`file`}for(let e of[`.md`,`.mdx`])if(existsSync(`${w}${e}`))return`file`;return null}function register$6(e,t){e.registerTool(`rename`,{description:DESCRIPTION$6,inputSchema:{from:string$2().describe(`Current path. Doc: docName (typically extensionless). Folder: relative path with no leading/trailing slash.`),to:string$2().describe(`New path. Doc: docName (typically extensionless). Folder: relative path with no leading/trailing slash.`),summary:summaryArgSchema.describe(`Optional one-line user-outcome description (≤80 chars). Defaults to "Renamed X → Y" when omitted. Persisted to git history.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,config:E,url:D}=S;if(!D)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let O=resolveRenameKind(join(w,E.content.dir),e.from);return O===null?textResult(`Error: \`${e.from}\` does not exist as a doc or folder under the content directory.`,!0):O===`file`?handleFileRename(e,D,w,t):handleFolderRename(e,D,w,t)})}async function handleFileRename(e,t,S,w){let E=normalizeDocName(e.from);if(!E.ok)return textResult(E.error,!0);let D=normalizeDocName(e.to);if(!D.ok)return textResult(D.error,!0);let O=w.identityRef?.current,k=await httpPost(t,`/api/rename-path`,{kind:`file`,fromPath:E.docName,toPath:D.docName,...e.summary===void 0?{}:{summary:e.summary},...O?{agentId:O.connectionId,agentName:O.displayName,clientName:O.clientInfo?.name,colorSeed:O.colorSeed}:{}});if(!k.ok){let e=k.error,t=parseRenameCollidingPairs(k.colliding),S={ok:!1,error:e,...t.length>0?{colliding:t}:{}};return textPlusStructured(`Error: ${e}`,S,!0)}let j=parseRenameMappings(k.renamed),F=parseRewrittenDocs(k.rewrittenDocs),L=j.map(({fromDocName:e,toDocName:t})=>`${e} -> ${t}`).join(`, `)||`${E.docName} -> ${D.docName}`,B=F.length===0?`No inbound links required updates.`:`Rewrote ${F.length} ${pluralize(F.length,`document`)}.`,H={config:w.config,resolveCwd:w.resolveCwd},q=await resolvePreviewUrlForTool(D.docName,H,S),J=await resolvePreviewUrlForTool(E.docName,H,S),Y=k.summary&&typeof k.summary==`object`?k.summary:void 0,ee=typeof Y?.hint==`string`?Y.hint:void 0,te={ok:!0,kind:`file`,renamed:j,rewrittenDocs:F,previewUrl:q?.url??null,...q?{previewUrlSource:q.source}:{},...J?{previousPreviewUrl:J.url}:{},...Y?{summary:Y}:{}},ne=[`Renamed ${L}. ${B}`];return ee&&ne.push(ee),textPlusStructured(ne.join(`
2927
2992
  `),te)}async function handleFolderRename(e,t,S,w){if(!isValidFolderPath(e.from))return textResult("Error: `from` must be a relative path with no leading/trailing slash.",!0);if(!isValidFolderPath(e.to))return textResult("Error: `to` must be a relative path with no leading/trailing slash.",!0);let E=w.identityRef?.current,D=await httpPost(t,`/api/rename-path`,{kind:`folder`,fromPath:e.from,toPath:e.to,...e.summary===void 0?{}:{summary:e.summary},...E?{agentId:E.connectionId,agentName:E.displayName,clientName:E.clientInfo?.name,colorSeed:E.colorSeed}:{}});if(!D.ok){let e=D.error,t=parseRenameCollidingPairs(D.colliding),S={ok:!1,error:e,...t.length>0?{colliding:t}:{}};return textPlusStructured(`Error: ${e}`,S,!0)}let O=parseRenameMappings(D.renamed),k=parseRewrittenDocs(D.rewrittenDocs),j={config:w.config,resolveCwd:w.resolveCwd},F={},L;for(let{toDocName:e}of O){let t=await resolvePreviewUrlForTool(e,j,S);t&&(F[e]=t.url,L??=t.source)}let B=D.summary&&typeof D.summary==`object`?D.summary:void 0,H=typeof B?.hint==`string`?B.hint:void 0,q={ok:!0,kind:`folder`,renamed:O,rewrittenDocs:k,previewUrls:F,...L?{previewUrlSource:L}:{},...B?{summary:B}:{}},J=[];return O.length===0?J.push(`No managed docs under ${e.from}/ — nothing to rename. Empty folders are not tracked; create a doc inside the folder first.`):J.push(`Renamed folder ${e.from}/ → ${e.to}/ (${O.length} doc${O.length===1?``:`s`}, ${k.length} rewrite${k.length===1?``:`s`}).`),H&&J.push(H),textPlusStructured(J.join(`
2928
2993
  `),q)}function buildBody(e,t){return`Conduct **evidence-driven research** on this topic and produce a provisional research article in the Open Knowledge content directory. This workflow mirrors the discipline of the \`eng:research\` skill, scoped to Open Knowledge's wiki-provisional layer.
2929
2994
 
@@ -3275,28 +3340,29 @@ In headless mode, write the recap into the research article's "Further reading"
3275
3340
  - **Don't skip the scoping gate in Supervised mode.** The user's rubric shapes everything downstream; you cannot recover a wrong-scope article cheaply.
3276
3341
  - **Don't mix 1P codebase analysis into the article unless asked.** Findings drift from factual synthesis to opinion when you do.
3277
3342
  - **Don't overwrite existing research silently.** If the topic was researched before, either iterate (Path C) or create a clearly-named successor (\`crdt-alternatives-2.md\`) and mark the old one as superseded.
3278
- `}const DESCRIPTION$4=["Returns a step-by-step plan to research a topic: scan existing coverage, scope a rubric, capture sources via `ingest`, then write a provisional research article. Does NOT fetch or write — you execute the plan.","Provisional, not canonical — findings live here until decisions solidify (`consolidate` promotes them).",`Use when exploring a decision space, comparing alternatives, or synthesizing sources into structured analysis.`].join(`
3279
- `);function register$4(e,t){e.registerTool(`research`,{description:DESCRIPTION$4,inputSchema:{topic:string$2().describe(`The topic, question, or anchor URL to research`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},buildWorkflowHandler(`research`,t,`topic`,buildBody))}const DESCRIPTION$3=[`[Requires: Hocuspocus server] Resolve a tracked merge conflict by writing the chosen content to disk and committing.`,``,`Strategy:`,"- `mine` — writes `git show :2:<file>` (your committed ours stage)","- `theirs` — writes `git show :3:<file>` (their committed stage)","- `content` — writes the provided `content` argument (e.g. a per-hunk merged result, or the live Y.Text bytes the user sees in the DiffView)",``,"Returns 200 on success; 500 indicates commit failure (re-call `list_conflicts` to confirm post-state — the resolve API is best-effort, non-atomic, and the file may have been resolved by another session).",``,`**DESTRUCTIVE:** this modifies the working tree and creates a git commit.`,``,`**Parameters:**`,"- `file` — Relative-to-projectDir path WITH .md extension (e.g. `notes/sso.md`).","- `strategy` — One of `mine` | `theirs` | `content`.",'- `content` — Required when `strategy === "content"`; the exact bytes to write.'].join(`
3280
- `),OutputSchema$1=outputSchemaWithText({ok:boolean$1(),file:string$2()});function register$3(e,t){e.registerTool(`resolve_conflict`,{description:DESCRIPTION$3,inputSchema:{file:string$2().min(1).describe("Relative-to-projectDir path WITH .md extension (e.g. `notes/sso.md`)."),strategy:_enum([`mine`,`theirs`,`content`]).describe("Resolution strategy. `content` requires the `content` arg."),content:string$2().optional().describe('Exact bytes to write. Required when `strategy === "content"`; ignored otherwise.'),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},outputSchema:OutputSchema$1,annotations:{readOnlyHint:!1,idempotentHint:!1,destructiveHint:!0}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{url:w}=S;if(!w)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let E={file:e.file,strategy:e.strategy};e.content!==void 0&&(E.content=e.content);let D=await httpPost(w,`/api/sync/resolve-conflict`,E);if(!D.ok){let t=D.error,S=typeof D.detail==`string`?D.detail:void 0;return textPlusStructured(`Error: ${S?`${t} — ${S}`:t}`,{ok:!1,file:e.file},!0)}return textPlusStructured(`Resolved conflict on ${e.file} (strategy: ${e.strategy}).`,{ok:!0,file:e.file})})}const DESCRIPTION$2=["[Requires: Hocuspocus server] Ranked page retrieval for a query (title boost + body BM25 + recency — the cmd-K engine). For literal search across every line, use `exec` (`grep`) instead.",``,"Returns scored page (and folder, with `omnibar` intent) hits, each with a body snippet. `exec`-grep covers every occurrence and needs no server.",``,`**Parameters:**`,"- `query` — Free-form; tokenized across title, name, path segments, and (with `full_text`) body.","- `intent` (optional) — `omnibar` searches title/path/folders only (fast); `full_text` includes body. Default `full_text`.","- `scopes` (optional) — Result scope: `page` | `folder` | `content`. Defaults derive from `intent`.","- `limit` (optional) — Max rows; default 20, max 100.",``,'If the server is down, the tool returns a recovery hint — use `exec("grep ...")` as the server-free fallback.'].join(`
3281
- `),InputSchema={query:string$2().describe(`Search query — title, path, or body terms.`),intent:_enum([`omnibar`,`full_text`]).optional().describe(`'omnibar' for title/path/folder only (fast); 'full_text' includes body content. Default 'full_text'.`),scopes:array(_enum([`page`,`folder`,`content`])).optional().describe(`Override the default scope set. Members: 'page', 'folder', 'content'. Defaults derive from intent.`),limit:number$1().int().min(1).max(100).optional().describe(`Max rows; default 20, max 100.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},SearchResultRowSchema=object$1({kind:_enum([`page`,`folder`]),path:string$2(),docName:string$2(),title:string$2().nullable(),score:number$1(),signals:object$1({lexical:number$1(),fullText:number$1(),recency:number$1()}),snippet:string$2().optional(),previewUrl:string$2().nullable(),previewUrlSource:_enum(PREVIEW_URL_SOURCES).optional()}),OutputSchema=outputSchemaWithText({cwd:string$2(),query:string$2(),intent:string$2(),resultCount:number$1().int(),results:array(SearchResultRowSchema),elapsedMs:number$1().nullable()});function isSearchKind(e){return e===`page`||e===`folder`}function normalizeSignals(e){return{lexical:typeof e?.lexical==`number`?e.lexical:0,fullText:typeof e?.fullText==`number`?e.fullText:0,recency:typeof e?.recency==`number`?e.recency:0}}function formatResultsBlock(e){if(e.length===0)return``;let t=[];for(let S of e){let e=S.title?.trim()||S.path;t.push(`### ${e} (${S.path})`),t.push(`Score ${S.score.toFixed(2)} — kind: ${S.kind}`),S.snippet&&t.push(S.snippet),t.push(``)}return t.join(`
3282
- `)}function register$2(e,t){e.registerTool(`search`,{description:DESCRIPTION$2,inputSchema:InputSchema,outputSchema:OutputSchema,annotations:{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0}},async e=>{try{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,config:E,url:D}=S;if(!D)return textResult(`${HOCUSPOCUS_NOT_RUNNING_ERROR}\nFor server-free literal-string search, use \`exec("grep ...")\` instead — it walks the filesystem and does not need Hocuspocus.`,!0);let O=e.intent??`full_text`,k=e.limit??20,j={query:e.query,intent:O,limit:k};e.scopes&&(j.scopes=e.scopes);let F=await httpPost(D,`/api/search`,j);if(!F.ok)return textResult(`Error: ${F.error}`,!0);let{resolve:L}=await buildListResolver({config:E,resolveCwd:async()=>w},w),B=(F.results??[]).flatMap(e=>{if(!isSearchKind(e.kind)||typeof e.path!=`string`)return[];let t=docNameFromPath(e.path),S=L(t);return[{kind:e.kind,path:e.path,docName:t,title:e.title??null,score:typeof e.score==`number`?e.score:0,signals:normalizeSignals(e.signals),...e.snippet?{snippet:e.snippet}:{},previewUrl:S?.url??null,...S?{previewUrlSource:S.source}:{}}]}),H={cwd:w,query:e.query,intent:O,resultCount:B.length,results:B,elapsedMs:typeof F.elapsedMs==`number`?F.elapsedMs:null},q=`## Search results for "${e.query}" (${B.length} hit${B.length===1?``:`s`}, intent: ${O})`;return textPlusStructured(B.length===0?`No matches for "${e.query}".`:`${q}\n\n${formatResultsBlock(B)}`,H)}catch(e){return textResult(`Error: ${e instanceof Error?e.message:String(e)}`,!0)}})}const ACTIONS=[`save`,`rollback`],DESCRIPTION$1=["[Requires: Hocuspocus server] Project version management. Dispatches on `action`:",``,'- `action: "save"` Project-wide checkpoint of every document. No `docName`. Returns `{checkpointRef, previewUrl: null}`. Find checkpoints later via `get_history`.','- `action: "rollback"` Restore one document to a historical version via the CRDT layer (append-only creates a new version with the old content; all connected editors see the change in real-time). Requires `docName` and `commitSha`. Find `commitSha` via `get_history`.',``,`**Parameters:**`,"- `action``save` | `rollback`.","- `docName` — Required for `rollback`. Document name, typically without extension; trailing `.md`/`.mdx` is stripped.","- `commitSha` — Required for `rollback`. 40-character SHA from the shadow-repo timeline.",'- `summary` Optional rollback summary (≤80 chars). If omitted, defaults to "Restored to <sha-short>". Avoid secrets or PII summaries persist to git history.'].join(`
3343
+ `}const DESCRIPTION$5=["Returns a step-by-step plan to research a topic: scan existing coverage, scope a rubric, capture sources via `ingest`, then write a provisional research article. Does NOT fetch or write — you execute the plan.","Provisional, not canonical — findings live here until decisions solidify (`consolidate` promotes them).",`Use when exploring a decision space, comparing alternatives, or synthesizing sources into structured analysis.`].join(`
3344
+ `);function register$5(e,t){e.registerTool(`research`,{description:DESCRIPTION$5,inputSchema:{topic:string$2().describe(`The topic, question, or anchor URL to research`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},buildWorkflowHandler(`research`,t,`topic`,buildBody))}const DESCRIPTION$4=[`[Requires: Hocuspocus server] Resolve a tracked merge conflict by writing the chosen content to disk and committing.`,``,`Strategy:`,"- `mine` — writes `git show :2:<file>` (your committed ours stage)","- `theirs` — writes `git show :3:<file>` (their committed stage)","- `content` — writes the provided `content` argument (e.g. a per-hunk merged result, or the live Y.Text bytes the user sees in the DiffView)",``,"Returns 200 on success; 500 indicates commit failure (re-call `list_conflicts` to confirm post-state — the resolve API is best-effort, non-atomic, and the file may have been resolved by another session).",``,`**DESTRUCTIVE:** this modifies the working tree and creates a git commit.`,``,`**Parameters:**`,"- `file` — Relative-to-projectDir path WITH .md extension (e.g. `notes/sso.md`).","- `strategy` — One of `mine` | `theirs` | `content`.",'- `content` — Required when `strategy === "content"`; the exact bytes to write.'].join(`
3345
+ `),OutputSchema$2=outputSchemaWithText({ok:boolean$1(),file:string$2()});function register$4(e,t){e.registerTool(`resolve_conflict`,{description:DESCRIPTION$4,inputSchema:{file:string$2().min(1).describe("Relative-to-projectDir path WITH .md extension (e.g. `notes/sso.md`)."),strategy:_enum([`mine`,`theirs`,`content`]).describe("Resolution strategy. `content` requires the `content` arg."),content:string$2().optional().describe('Exact bytes to write. Required when `strategy === "content"`; ignored otherwise.'),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},outputSchema:OutputSchema$2,annotations:{readOnlyHint:!1,idempotentHint:!1,destructiveHint:!0}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{url:w}=S;if(!w)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let E={file:e.file,strategy:e.strategy};e.content!==void 0&&(E.content=e.content);let D=await httpPost(w,`/api/sync/resolve-conflict`,E);if(!D.ok){let t=D.error,S=typeof D.detail==`string`?D.detail:void 0;return textPlusStructured(`Error: ${S?`${t} — ${S}`:t}`,{ok:!1,file:e.file},!0)}return textPlusStructured(`Resolved conflict on ${e.file} (strategy: ${e.strategy}).`,{ok:!0,file:e.file})})}const DESCRIPTION$3=["[Requires: Hocuspocus server] Ranked page retrieval for a query (title boost + body BM25 + recency — the cmd-K engine). For literal search across every line, use `exec` (`grep`) instead.",``,"Returns scored page (and folder, with `omnibar` intent) hits, each with a body snippet. `exec`-grep covers every occurrence and needs no server.",``,`**Parameters:**`,"- `query` — Free-form; tokenized across title, name, path segments, and (with `full_text`) body.","- `intent` (optional) — `omnibar` searches title/path/folders only (fast); `full_text` includes body. Default `full_text`.","- `scopes` (optional) — Result scope: `page` | `folder` | `content`. Defaults derive from `intent`.","- `limit` (optional) — Max rows; default 20, max 100.",``,'If the server is down, the tool returns a recovery hint — use `exec("grep ...")` as the server-free fallback.'].join(`
3346
+ `),InputSchema={query:string$2().describe(`Search query — title, path, or body terms.`),intent:_enum([`omnibar`,`full_text`]).optional().describe(`'omnibar' for title/path/folder only (fast); 'full_text' includes body content. Default 'full_text'.`),scopes:array(_enum([`page`,`folder`,`content`])).optional().describe(`Override the default scope set. Members: 'page', 'folder', 'content'. Defaults derive from intent.`),limit:number$1().int().min(1).max(100).optional().describe(`Max rows; default 20, max 100.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},SearchResultRowSchema=object$1({kind:_enum([`page`,`folder`]),path:string$2(),docName:string$2(),title:string$2().nullable(),score:number$1(),signals:object$1({lexical:number$1(),fullText:number$1(),recency:number$1()}),snippet:string$2().optional(),previewUrl:string$2().nullable(),previewUrlSource:_enum(PREVIEW_URL_SOURCES).optional()}),OutputSchema$1=outputSchemaWithText({cwd:string$2(),query:string$2(),intent:string$2(),resultCount:number$1().int(),results:array(SearchResultRowSchema),elapsedMs:number$1().nullable()});function isSearchKind(e){return e===`page`||e===`folder`}function normalizeSignals(e){return{lexical:typeof e?.lexical==`number`?e.lexical:0,fullText:typeof e?.fullText==`number`?e.fullText:0,recency:typeof e?.recency==`number`?e.recency:0}}function formatResultsBlock(e){if(e.length===0)return``;let t=[];for(let S of e){let e=S.title?.trim()||S.path;t.push(`### ${e} (${S.path})`),t.push(`Score ${S.score.toFixed(2)} — kind: ${S.kind}`),S.snippet&&t.push(S.snippet),t.push(``)}return t.join(`
3347
+ `)}function register$3(e,t){e.registerTool(`search`,{description:DESCRIPTION$3,inputSchema:InputSchema,outputSchema:OutputSchema$1,annotations:{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0}},async e=>{try{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,config:E,url:D}=S;if(!D)return textResult(`${HOCUSPOCUS_NOT_RUNNING_ERROR}\nFor server-free literal-string search, use \`exec("grep ...")\` instead — it walks the filesystem and does not need Hocuspocus.`,!0);let O=e.intent??`full_text`,k=e.limit??20,j={query:e.query,intent:O,limit:k};e.scopes&&(j.scopes=e.scopes);let F=await httpPost(D,`/api/search`,j);if(!F.ok)return textResult(`Error: ${F.error}`,!0);let{resolve:L}=await buildListResolver({config:E,resolveCwd:async()=>w},w),B=(F.results??[]).flatMap(e=>{if(!isSearchKind(e.kind)||typeof e.path!=`string`)return[];let t=docNameFromPath(e.path),S=L(t);return[{kind:e.kind,path:e.path,docName:t,title:e.title??null,score:typeof e.score==`number`?e.score:0,signals:normalizeSignals(e.signals),...e.snippet?{snippet:e.snippet}:{},previewUrl:S?.url??null,...S?{previewUrlSource:S.source}:{}}]}),H={cwd:w,query:e.query,intent:O,resultCount:B.length,results:B,elapsedMs:typeof F.elapsedMs==`number`?F.elapsedMs:null},q=`## Search results for "${e.query}" (${B.length} hit${B.length===1?``:`s`}, intent: ${O})`;return textPlusStructured(B.length===0?`No matches for "${e.query}".`:`${q}\n\n${formatResultsBlock(B)}`,H)}catch(e){return textResult(`Error: ${e instanceof Error?e.message:String(e)}`,!0)}})}const DESCRIPTION$2=["[Requires: Hocuspocus server] Build a shareable GitHub-substrate URL (`https://openknowledge.ai/d/...`) pinned to the project's current branch + the focused doc. Read-only against the working tree no commits, no pushes, no `git fetch`.",``,`Use this when the user asks for a share link / shareable link / URL to send to a teammate. Recipients open the link to receive the doc into their own Open Knowledge install.`,``,"**Publishing is a user act.** Agents do NOT publish projects to GitHub from this tool. When the project has no GitHub remote, this tool returns an error pointing the user at the Share wizard (or `gh repo create` + `git push`)it does not run those steps itself.",``,`**Parameters:**`,"- `docName` — Document name, extension-less. Trailing `.md`/`.mdx` is stripped; the on-disk file is probed automatically.","- `cwd` (optional) Project root (see `cwd` description below).",``,"**Preconditions:** project on a named branch (not detached HEAD); origin set to a `github.com` remote; the branch already pushed to origin."].join(`
3348
+ `);function messageForShareError(e,t){switch(e){case`no-remote`:return"This project has no GitHub remote. Ask the user to push it to GitHub first (e.g. `gh repo create` then `git push -u origin <branch>`), or use the Share button in the editor to run the Publish wizard. Agents do not publish projects from this tool.";case`detached-head`:return"HEAD is detached (no branch checked out). Ask the user to check out a branch (`git checkout <branch>`) before sharing.";case`branch-not-on-origin`:{let e=" (If the user says it is already pushed, ask them to `git fetch origin` first to refresh the local mirror, then retry.)";return t?`Branch \`${t}\` is not on origin yet. Ask the user to push it (\`git push -u origin ${t}\`), then retry.${e}`:`The current branch is not on origin yet. Ask the user to push it (\`git push -u origin <branch>\`), then retry.${e}`}case`non-github-remote`:return"Origin is not a `github.com` remote. Share links are GitHub-only in v1.";case`invalid-path`:return"The resolved document path is not shareable (escapes the project root or names the `.git` subtree). Pass a normal docName under the content directory.";default:return`Unknown share-construct-url error: ${String(e)}`}}function resolveDocSharePath(e,t,S){let w=resolveWithinRoot(t,S);if(!w.ok)return null;for(let t of[`.mdx`,`.md`]){let S=`${w.abs}${t}`;if(existsSync(S)){let t=resolveWithinRoot(e,S);return t.ok?t.rel:null}}return null}const OutputSchema=outputSchemaWithText({ok:boolean$1().describe(`Success discriminator.`),shareUrl:string$2().optional().describe(`Marketing share URL (success only).`),blobUrl:string$2().optional().describe(`Unencoded GitHub blob URL (success only).`),branch:string$2().optional().describe(`Branch the share URL pins to (success only).`),error:_enum([`no-remote`,`detached-head`,`branch-not-on-origin`,`non-github-remote`,`invalid-path`,`doc-not-found`,`unknown`]).optional().describe(`Failure code (error path only).`),message:string$2().optional().describe(`Agent-actionable error message (error path only).`),previewUrl:string$2().nullable().optional().describe("Route-only preview URL `/#/<doc>` (no host:port). `null` when no UI is running."),previewUrlSource:string$2().optional().describe(`Internal: preview-URL provenance.`)});function register$2(e,t){e.registerTool(`share_link`,{description:DESCRIPTION$2,inputSchema:{docName:string$2().describe("Document to share, extension-less. Trailing `.md`/`.mdx` is stripped."),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)},outputSchema:OutputSchema,annotations:{readOnlyHint:!0,idempotentHint:!0}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,config:E,url:D}=S;if(!D)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let O=normalizeDocName(e.docName);if(!O.ok)return textResult(O.error,!0);let k=resolveDocSharePath(w,join(w,E.content.dir),O.docName);if(k===null){let e={ok:!1,error:`doc-not-found`,message:`Document \`${O.docName}\` does not exist under the content directory (looked for \`.md\` and \`.mdx\`).`};return textPlusStructured(`Error: ${e.message}`,e,!0)}let j;try{j=await fetch(`${D}/api/share/construct-url`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({docPath:k}),signal:AbortSignal.timeout(3e4)})}catch(e){let t=`Server unreachable: ${e instanceof Error?e.message:String(e)}`;return textPlusStructured(`Error: ${t}`,{ok:!1,error:`unknown`,message:t},!0)}let F;try{F=await j.json()}catch(e){let t=`Server returned non-JSON body: ${e instanceof Error?e.message:String(e)}`;return textPlusStructured(`Error: ${t}`,{ok:!1,error:`unknown`,message:t},!0)}if(!j.ok){let e;if(F&&typeof F==`object`){let t=F,S=typeof t.title==`string`?t.title:void 0,w=typeof t.detail==`string`?t.detail:void 0;e=S&&w?`${S}: ${w}`:S||w||`HTTP ${j.status}`}else e=`HTTP ${j.status}`;return textPlusStructured(`Error: ${e}`,{ok:!1,error:`unknown`,message:e},!0)}let L=ShareConstructUrlResponseSchema.safeParse(F);if(!L.success){let e=`Server returned an unexpected share-construct-url response shape.`;return textPlusStructured(`Error: ${e}`,{ok:!1,error:`unknown`,message:e},!0)}let B=L.data;if(!B.ok){let e=messageForShareError(B.error,B.branch),t={ok:!1,error:B.error,message:e,...B.branch?{branch:B.branch}:{}};return textPlusStructured(`Error: ${e}`,t,!0)}let{shareUrl:H,blobUrl:q,branch:J}=B,Y={ok:!0,shareUrl:H,blobUrl:q,branch:J},ee=await resolvePreviewUrlForTool(O.docName,{config:t.config,resolveCwd:t.resolveCwd},w);return textPlusStructured(`Share link for \`${O.docName}\` on branch \`${J}\`:\n${H}`,{...Y,previewUrl:ee?.url??null,...ee?{previewUrlSource:ee.source}:{}})})}const ACTIONS=[`save`,`rollback`],DESCRIPTION$1=["[Requires: Hocuspocus server] Project version management. Dispatches on `action`:",``,'- `action: "save"` — Project-wide checkpoint of every document. No `docName`. Returns `{checkpointRef, previewUrl: null}`. Find checkpoints later via `get_history`.','- `action: "rollback"` — Restore one document to a historical version via the CRDT layer (append-only — creates a new version with the old content; all connected editors see the change in real-time). Requires `docName` and `commitSha`. Find `commitSha` via `get_history`.',``,`**Parameters:**`,"- `action` — `save` | `rollback`.","- `docName` — Required for `rollback`. Document name, typically without extension; trailing `.md`/`.mdx` is stripped.","- `commitSha` — Required for `rollback`. 40-character SHA from the shadow-repo timeline.",'- `summary` — Optional rollback summary (≤80 chars). If omitted, defaults to "Restored to <sha-short>". Avoid secrets or PII — summaries persist to git history.'].join(`
3283
3349
  `);function register$1(e,t){e.registerTool(`version`,{description:DESCRIPTION$1,inputSchema:{action:_enum(ACTIONS).describe(`Which version action to perform.`),docName:string$2().optional().describe(`Document name. Required for action=rollback.`),commitSha:string$2().length(40).regex(/^[0-9a-f]+$/i).optional().describe(`40-character commit SHA from the shadow-repo timeline. Required for action=rollback. Find via get_history.`),summary:summaryArgSchema.describe(`Optional rollback summary (≤80 chars). Defaults to "Restored to <sha-short>". Appears as a bullet in the timeline.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,url:E}=S;if(!E)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);switch(e.action){case`save`:return handleSave(E,t);case`rollback`:return handleRollback(e,E,w,t);default:return textResult(`Error: unknown version action.`,!0)}})}async function handleSave(e,t){let S=t.identityRef?.current,w=await httpPost(e,`/api/save-version`,S?{writers:[{id:`agent-${S.connectionId}`,name:S.displayName,email:`agent-${S.connectionId}@openknowledge.local`}]}:{});return w.ok?textPlusStructured(`Checkpoint saved. Checkpoint ref: ${w.checkpointRef}`,{checkpointRef:w.checkpointRef,previewUrl:null}):textResult(`Error: ${w.error}`,!0)}async function handleRollback(e,t,S,w){if(!e.docName)return textResult("Error: action=rollback requires `docName`.",!0);if(!e.commitSha)return textResult("Error: action=rollback requires `commitSha`.",!0);let E=normalizeDocName(e.docName);if(!E.ok)return textResult(E.error,!0);let D=E.docName,O=await httpGet(t,`/api/history/${e.commitSha}?docName=${encodeURIComponent(D)}`);if(!O.ok)return textResult(`Error: ${O.error??`Version not found`}`,!0);let k=w.identityRef?.current,j=await httpPost(t,`/api/rollback`,{docName:D,commitSha:e.commitSha,...e.summary===void 0?{}:{summary:e.summary},...k?{agentId:k.connectionId,agentName:k.displayName,clientName:k.clientInfo?.name,colorSeed:k.colorSeed}:{}});if(!j.ok)return textResult(`Error: ${j.error}`,!0);let F=j.summary&&typeof j.summary==`object`?j.summary:void 0,L=typeof F?.hint==`string`?F.hint:void 0,B=typeof O.author==`string`?O.author:void 0,H=typeof O.timestamp==`string`?O.timestamp:void 0,q=B&&H?` (${B}, ${H})`:``,J=[`Restored "${D}" to version ${e.commitSha.slice(0,8)}${q}. The change has been applied to all connected editors.`];L&&J.push(L);let Y=await resolvePreviewUrlForTool(D,{config:w.config,resolveCwd:w.resolveCwd},S);return textPlusStructured(J.join(`
3284
3350
  `),{previewUrl:Y?.url??null,...Y?{previewUrlSource:Y.source}:{},...F?{summary:F}:{}})}const POSITIONS=[`append`,`prepend`,`replace`],DESCRIPTION=`${[`[Requires: Hocuspocus server] Write markdown to a document via the CRDT layer. Content propagates to all connected editors in real-time.`,``,'Frontmatter changes: 1-2 keys → prefer `edit_frontmatter` (field-level CRDT, atomic). Full rewrite (≥3-5 keys or body + frontmatter together) → this tool with `position: "replace"` and the full YAML block in the payload.',``,'Templates: `template: "<name>"` resolves against the parent folder\'s `templates_available` (see `exec("ls <folder>/")`) and becomes the new doc verbatim. `template` and `markdown` are mutually exclusive. With `template` set, `position` is forced to `"replace"`.',``,"To create several docs in one call (scaffolding a pack, seeding dossiers), pass `docs: [{docName, markdown|template, position?, summary?}, ...]` instead of the single-doc fields. Docs write in order; the response reports each.",``,`**Parameters:**`,"- `docName` — A single document, extension-less (`notes/meeting`). Trailing `.md`/`.mdx` is stripped. New docs default to `.md`.","- `docs` — Batch form: array of `{docName, markdown?|template?, position?, summary?}`. Mutually exclusive with the single-doc fields.","- `markdown` — Markdown payload. Required unless `template` is set.","- `template` — Template name. Mutually exclusive with `markdown`.","- `position` — `append` | `prepend` | `replace`. Optional for a new doc (defaults to `replace`); required for an existing doc. Forced to `replace` with `template`.","- `summary` — Optional one-line user-outcome (≤80 chars). Avoid secrets or PII — persisted to git history."].join(`
3285
- `)}\n${renderInventoryFooter()}`;function frontmatterIgnoredNote(e,t){return e!==`prepend`&&e!==`append`||!t||stripFrontmatter(t).frontmatter.trim()===``?null:`Note: a \`---\` frontmatter block in this \`${e}\` payload was ignored — frontmatter is written only with \`position: "replace"\`. To change frontmatter, use \`edit_frontmatter\` (1-2 keys) or \`write_document({ position: "replace" })\` (full rewrite).`}function docExistsOnDisk(e,t){return SUPPORTED_DOC_EXTENSIONS.some(S=>{let w=resolveWithinRoot(e,`${t}${S}`);return w.ok&&existsSync(w.abs)})}async function writeOneDoc(e,t,S,w,E){let D=normalizeDocName(e.docName);if(!D.ok)return{docName:e.docName,ok:!1,error:D.error};let O=D.docName,k=E.identityRef?.current;if(e.template===void 0&&e.markdown===void 0)return{docName:O,ok:!1,error:"either `markdown` or `template` must be provided — omitting both would write empty content."};if(e.template!==void 0&&e.markdown!==void 0)return{docName:O,ok:!1,error:"TEMPLATE_AND_MARKDOWN_BOTH_SET — `template` and `markdown` are mutually exclusive. Pass one; fill placeholders via subsequent `edit_document` calls."};let j=e.markdown??``,F;if(e.position!==void 0)F=e.position;else if(docExistsOnDisk(S,O))return{docName:O,ok:!1,error:`"${O}" already exists — pass \`position\` (\`append\` | \`prepend\` | \`replace\`), or use \`edit_document\` for a targeted change.`};else F=`replace`;if(e.template!==void 0){let S=parentFolderOf(O),w=resolveTemplatesAvailable(t,S,{depth:1}),E=w.find(t=>t.name===e.template);if(!E)return{docName:O,ok:!1,error:`template "${e.template}" not found for folder "${S||`.`}". Available: ${w.length===0?`(none)`:w.map(e=>`${e.name} [${e.scope}]`).join(`, `)}. Templates are resolved by walk-up; check the parent folder's exec listing to see the menu.`};let D;try{D=readFileSync(resolve(t,E.path),`utf-8`)}catch(e){return{docName:O,ok:!1,error:`failed to read template at ${E.path}: ${e.message}`}}j=applySubstitution(D,{date:todayIsoUtc(),user:k?.displayName??``}),F=`replace`}let L=await httpPost(w,`/api/agent-write-md`,{docName:O,markdown:j,position:F,...e.summary===void 0?{}:{summary:e.summary},...k?{agentId:k.connectionId,agentName:k.displayName,clientName:k.clientInfo?.name,colorSeed:k.colorSeed}:{}});return L.ok?{docName:O,ok:!0,position:F,...e.template===void 0?{}:{fromTemplate:e.template},raw:L}:{docName:O,ok:!1,error:String(L.error)}}function register(e,t){let S={docName:string$2().describe(`Document name to write to`),markdown:string$2().optional().describe("Markdown content to write. Optional when `template` is set."),template:string$2().min(1).optional().describe("Template name resolved against the parent folder's templates_available (leaf → root walk-up; closest-wins). Inspect the menu with an `exec` listing of the folder."),position:_enum(POSITIONS).optional().describe("Where to insert the content. Optional for a new doc (defaults to `replace`); required when the doc already exists."),summary:summaryArgSchema};e.registerTool(`write_document`,{description:DESCRIPTION,inputSchema:{docName:string$2().optional().describe(`A single document to write to.`),markdown:string$2().optional().describe("Markdown content. Optional when `template` is set."),template:string$2().min(1).optional().describe("Template name resolved against the parent folder's templates_available (leaf → root walk-up; closest-wins). Inspect the menu with an `exec` listing of the folder."),position:_enum(POSITIONS).optional().describe("Where to insert the content. Optional for a new doc (defaults to `replace`); required when the doc already exists."),summary:summaryArgSchema,docs:array(object$1(S)).min(1).optional().describe(`Batch: documents to write in one call. Mutually exclusive with the single-doc fields.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,config:E,url:D}=S;if(!D)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let O=resolveLockDir(w),k=resolveContentDir(E,w);if(e.docs!==void 0){if(e.docName!==void 0||e.markdown!==void 0||e.template!==void 0||e.position!==void 0||e.summary!==void 0)return textResult("Error: `docs` is the batch form — do not also pass top-level `docName` / `markdown` / `template` / `position` / `summary` (each `docs[]` entry carries its own).",!0);let S=[];for(let E of e.docs)S.push(await writeOneDoc(E,w,k,D,t));let E=S.map(e=>{if(!e.ok)return{docName:e.docName,ok:!1,error:e.error};let t=resolvePreviewUrl(e.docName,{lockDir:O});return{docName:e.docName,ok:!0,position:e.position,...t?{previewUrl:t.url}:{}}}),j=E.filter(e=>e.ok).length,F=j===E.length,L=E.map(e=>e.ok?`Wrote ${e.docName} (${e.position}).`:`Failed ${e.docName}: ${e.error}`),B=e.docs.flatMap((e,t)=>{let w=S[t];if(!w?.ok)return[];let E=frontmatterIgnoredNote(w.position,e.markdown);return E?[`${e.docName} — ${E}`]:[]}),H=[`${j}/${E.length} written.`,...L,...B].join(`
3351
+ `)}\n${renderInventoryFooter()}`;function frontmatterIgnoredNote(e,t){return e!==`prepend`&&e!==`append`||!t||stripFrontmatter(t).frontmatter.trim()===``?null:`Note: a \`---\` frontmatter block in this \`${e}\` payload was ignored — frontmatter is written only with \`position: "replace"\`. To change frontmatter, use \`edit_frontmatter\` (1-2 keys) or \`write_document({ position: "replace" })\` (full rewrite).`}function docExistsOnDisk(e,t){return SUPPORTED_DOC_EXTENSIONS.some(S=>{let w=resolveWithinRoot(e,`${t}${S}`);return w.ok&&existsSync(w.abs)})}async function writeOneDoc(e,t,S,w,E){let D=normalizeDocName(e.docName);if(!D.ok)return{docName:e.docName,ok:!1,error:D.error};let O=D.docName,k=E.identityRef?.current;if(e.template===void 0&&e.markdown===void 0)return{docName:O,ok:!1,error:"either `markdown` or `template` must be provided — omitting both would write empty content."};if(e.template!==void 0&&e.markdown!==void 0)return{docName:O,ok:!1,error:"TEMPLATE_AND_MARKDOWN_BOTH_SET — `template` and `markdown` are mutually exclusive. Pass one; fill placeholders via subsequent `edit_document` calls."};let j=e.markdown??``,F;if(e.position!==void 0)F=e.position;else if(docExistsOnDisk(S,O))return{docName:O,ok:!1,error:`"${O}" already exists — pass \`position\` (\`append\` | \`prepend\` | \`replace\`), or use \`edit_document\` for a targeted change.`};else F=`replace`;if(e.template!==void 0){let S=parentFolderOf(O),w=resolveTemplatesAvailable(t,S,{depth:1}),E=w.find(t=>t.name===e.template);if(!E)return{docName:O,ok:!1,error:`template "${e.template}" not found for folder "${S||`.`}". Available: ${w.length===0?`(none)`:w.map(e=>`${e.name} [${e.scope}]`).join(`, `)}. Templates are resolved by walk-up; check the parent folder's exec listing to see the menu.`};let D;try{D=readFileSync(resolve(t,E.path),`utf-8`)}catch(e){return{docName:O,ok:!1,error:`failed to read template at ${E.path}: ${e.message}`}}let{body:L}=stripFrontmatter(D);j=applySubstitution(L,{date:todayIsoUtc(),user:k?.displayName??``}),F=`replace`}let L=await httpPost(w,`/api/agent-write-md`,{docName:O,markdown:j,position:F,...e.summary===void 0?{}:{summary:e.summary},...k?{agentId:k.connectionId,agentName:k.displayName,clientName:k.clientInfo?.name,colorSeed:k.colorSeed}:{}});return L.ok?{docName:O,ok:!0,position:F,...e.template===void 0?{}:{fromTemplate:e.template},raw:L}:{docName:O,ok:!1,error:String(L.error)}}function register(e,t){let S={docName:string$2().describe(`Document name to write to`),markdown:string$2().optional().describe("Markdown content to write. Optional when `template` is set."),template:string$2().min(1).optional().describe("Template name resolved against the parent folder's templates_available (leaf → root walk-up; closest-wins). Inspect the menu with an `exec` listing of the folder."),position:_enum(POSITIONS).optional().describe("Where to insert the content. Optional for a new doc (defaults to `replace`); required when the doc already exists."),summary:summaryArgSchema};e.registerTool(`write_document`,{description:DESCRIPTION,inputSchema:{docName:string$2().optional().describe(`A single document to write to.`),markdown:string$2().optional().describe("Markdown content. Optional when `template` is set."),template:string$2().min(1).optional().describe("Template name resolved against the parent folder's templates_available (leaf → root walk-up; closest-wins). Inspect the menu with an `exec` listing of the folder."),position:_enum(POSITIONS).optional().describe("Where to insert the content. Optional for a new doc (defaults to `replace`); required when the doc already exists."),summary:summaryArgSchema,docs:array(object$1(S)).min(1).optional().describe(`Batch: documents to write in one call. Mutually exclusive with the single-doc fields.`),cwd:string$2().optional().describe(ROUTED_CWD_DESCRIPTION)}},async e=>{let S=await resolveProjectServerContext(t.resolveCwd,t.config,t.serverUrl,e.cwd);if(!S.ok)return textResult(`Error: ${S.error}`,!0);let{cwd:w,config:E,url:D}=S;if(!D)return textResult(HOCUSPOCUS_NOT_RUNNING_ERROR,!0);let O=resolveLockDir(w),k=resolveContentDir(E,w);if(e.docs!==void 0){if(e.docName!==void 0||e.markdown!==void 0||e.template!==void 0||e.position!==void 0||e.summary!==void 0)return textResult("Error: `docs` is the batch form — do not also pass top-level `docName` / `markdown` / `template` / `position` / `summary` (each `docs[]` entry carries its own).",!0);let S=[];for(let E of e.docs)S.push(await writeOneDoc(E,w,k,D,t));let E=S.map(e=>{if(!e.ok)return{docName:e.docName,ok:!1,error:e.error};let t=resolvePreviewUrl(e.docName,{lockDir:O});return{docName:e.docName,ok:!0,position:e.position,...t?{previewUrl:t.url}:{}}}),j=E.filter(e=>e.ok).length,F=j===E.length,L=E.map(e=>e.ok?`Wrote ${e.docName} (${e.position}).`:`Failed ${e.docName}: ${e.error}`),B=e.docs.flatMap((e,t)=>{let w=S[t];if(!w?.ok)return[];let E=frontmatterIgnoredNote(w.position,e.markdown);return E?[`${e.docName} — ${E}`]:[]}),H=[`${j}/${E.length} written.`,...L,...B].join(`
3286
3352
  `),q={ok:F,documents:E},J=S.find(e=>e.ok);return J&&J.raw.systemSubscriberCount===0&&(q.warning=buildPreviewAttachWarning(resolvePreviewUrl(J.docName,{lockDir:O}))),textPlusStructured(H,q,!F)}if(e.docName===void 0)return textResult("Error: provide `docName` (single) or `docs` (batch).",!0);let j=await writeOneDoc({docName:e.docName,markdown:e.markdown,template:e.template,position:e.position,summary:e.summary},w,k,D,t);if(!j.ok)return textResult(`Error: ${j.error}`,!0);let F=j.raw,L=resolvePreviewUrl(j.docName,{lockDir:O}),B=typeof F.subscriberCount==`number`?F.subscriberCount:void 0,H=(typeof F.systemSubscriberCount==`number`?F.systemSubscriberCount:void 0)===0,q=B===0,J=Array.isArray(F.hints)?F.hints:void 0,Y=F.summary&&typeof F.summary==`object`?F.summary:void 0,ee=typeof Y?.hint==`string`?Y.hint:void 0,te=[j.fromTemplate===void 0?`Written successfully (${j.position}).`:`Written successfully (instantiated from template "${j.fromTemplate}").`],ne=frontmatterIgnoredNote(j.position,e.markdown);if(ne&&te.push(ne),H&&!L&&te.push(START_UI_TEXT_HINT),ee&&te.push(ee),J)for(let e of J)e.message&&te.push(e.message);let ae=te.join(`
3287
- `);if(!L&&!H&&!q&&!J&&!Y)return textResult(ae);let oe={};return L&&(oe.previewUrl=L.url,oe.previewUrlSource=L.source),H&&(oe.warning=buildPreviewAttachWarning(L)),J&&(oe.hints=J),Y&&(oe.summary=Y),textPlusStructured(ae,oe)})}function registerAllTools(e,t){let S=t.logger,w=createLoggedServer(e,{logger:t.logger,identityRef:t.identityRef}),E=e=>async w=>{try{let E=await t.resolveCwd(w);return(getCurrentMcpLogger()??S)?.debug(`tool cwd resolved`,{tool:e,cwd:E,...w?{explicit:w}:{}}),E}catch(t){throw(getCurrentMcpLogger()??S)?.warn(`tool call failed`,{tool:e,error:t instanceof Error?t.message:String(t),...w?{explicit:w}:{}}),t}};register$16(w,{resolveCwd:E(`exec`),serverUrl:t.serverUrl,config:t.config}),register$8(w,{config:t.config,resolveCwd:E(`ingest`)}),register$4(w,{config:t.config,resolveCwd:E(`research`)}),register$21(w,{config:t.config,resolveCwd:E(`consolidate`)}),register$19(w,{config:t.config,resolveCwd:E(`discover`)}),register$2(w,{resolveCwd:E(`search`),config:t.config,serverUrl:t.serverUrl}),register$7(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`links`)}),register(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`write_document`),identityRef:t.identityRef}),register$18(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`edit_document`),identityRef:t.identityRef}),register$20(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`delete_document`),identityRef:t.identityRef}),register$17(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`edit_frontmatter`),identityRef:t.identityRef}),register$5(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`rename`),identityRef:t.identityRef}),register$10(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`get_history`)}),register$1(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`version`),identityRef:t.identityRef}),register$13(w,{resolveCwd:E(`get_components`),config:t.config}),register$14(w,{resolveCwd:E(`get_authoring_palette`),config:t.config}),register$12(w,{config:t.config,resolveCwd:E(`get_config`)}),register$9(w,{config:t.config,resolveCwd:E(`get_preview_url`)}),register$15(w,{config:t.config,resolveCwd:E(`folder_config`)}),register$6(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`list_conflicts`)}),register$11(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`get_conflict_content`)}),register$3(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`resolve_conflict`)})}function firstHeader(e){return Array.isArray(e)?e[0]:e}function writePlain(e,t,S){e.writableEnded||(e.statusCode=t,e.setHeader(`Content-Type`,`text/plain; charset=utf-8`),e.end(S))}function createSessionServer(e,t,S){let w=e.config,E=new McpServer({name:MCP_SERVER_NAME,version:RUNTIME_VERSION},{instructions:buildInstructions(w.content)});installPrettyZodErrors(E);let D=S??randomUUID(),O={current:{connectionId:D,displayName:D,colorSeed:D}};E.server.oninitialized=()=>{let e=E.server.getClientVersion(),t=sanitizeClientName(e?.name,D);O.current={connectionId:D,clientInfo:e?{name:t,version:e.version}:void 0,displayName:displayNameFromClientName(t),colorSeed:t}};let k=e.projectDir??e.contentDir;return registerAllTools(E,{serverUrl:async()=>e.getServerUrl(),resolveCwd:async e=>{if(e===void 0)return k;let t=resolveWithinRoot(k,e);if(!t.ok)throw Error(`cwd "${e}" is not within the configured project root: ${t.reason}`);return t.abs},config:w,identityRef:O}),{server:E,transport:t}}function createMcpHttpHandler(e){let t=new Map,S=e.sessionTtlMs??1800*1e3,w=e.maxSessions??100;async function E(S,w){let E=t.get(S);if(!E)return;t.delete(S),E.ttlTimer!==void 0&&clearTimeout(E.ttlTimer);let D=await Promise.allSettled([E.server.close(),E.transport.close()]);for(let t of D)t.status===`rejected`&&e.log?.warn?.({err:t.reason,sessionId:S,reason:w},`MCP HTTP session close failed`);e.log?.info?.({sessionId:S,reason:w},`MCP HTTP session closed`)}function D(t,w){w.ttlTimer!==void 0&&clearTimeout(w.ttlTimer),w.ttlTimer=setTimeout(()=>{E(t,`ttl-expired`).catch(S=>{e.log?.warn?.({err:S,sessionId:t},`MCP HTTP session TTL cleanup failed`)})},S),w.ttlTimer.unref?.()}return{async handle(S,O){let k=firstHeader(S.headers[`mcp-session-id`]);if(k){let e=t.get(k);if(!e){writePlain(O,404,`MCP session not found`);return}D(k,e),await e.transport.handleRequest(S,O);return}if(S.method!==`POST`){writePlain(O,400,`Missing MCP session. Initialize with POST /mcp first.`);return}if(t.size>=w){e.log?.warn?.({activeSessions:t.size,maxSessions:w},`MCP HTTP session cap reached`),writePlain(O,503,`Too many active MCP sessions`);return}let j=firstHeader(S.headers[MCP_CONNECTION_ID_HEADER]),F=validateAgentId(j)??void 0;j!==void 0&&F===void 0&&e.log?.warn?.({headerLength:j.length},`MCP HTTP forwarded connectionId header failed validation; falling back to randomUUID`);let L=new StreamableHTTPServerTransport({sessionIdGenerator:()=>randomUUID(),enableJsonResponse:!0,onsessioninitialized:async S=>{try{let w=createSessionServer(e,L,F);await w.server.connect(L),t.set(S,w),D(S,w),e.log?.info?.({sessionId:S},`MCP HTTP session initialized`)}catch(w){throw t.delete(S),e.log?.error?.({err:w,sessionId:S},`MCP HTTP session initialization failed`),w}}});L.onerror=t=>{e.log?.warn?.({err:t},`MCP HTTP transport error`)},L.onclose=()=>{let t=L.sessionId;if(!t){e.log?.info?.({sessionId:t,reason:`transport-closed`},`MCP HTTP session closed`);return}E(t,`transport-closed`).catch(S=>{e.log?.warn?.({err:S,sessionId:t},`MCP HTTP transport-close cleanup failed`)})},await L.handleRequest(S,O)},async close(){let e=[...t.entries()];await Promise.allSettled(e.map(([e])=>E(e,`handler-close`)))}}}const DEFAULT_KEEPALIVE_GRACE_MS=1e4,MAX_COLLAB_MESSAGE_BYTES=1024*1024,MCP_CORS_HEADERS={"Access-Control-Allow-Methods":`GET, POST, DELETE, OPTIONS`,"Access-Control-Allow-Headers":`Content-Type, Authorization, traceparent, tracestate, baggage, mcp-session-id, mcp-protocol-version`,"Access-Control-Max-Age":`86400`};function mountMcpAndApi(e){let{httpServer:t,hocuspocus:S,mcpHttpHandler:w,log:E,sessionManager:D,agentFocusBroadcaster:O,agentPresenceBroadcaster:k,contentAssetMiddleware:j,reactShellMiddleware:F}=e,L=e.keepaliveGraceMs??DEFAULT_KEEPALIVE_GRACE_MS,B=new import_websocket_server$1.default({noServer:!0,maxPayload:MAX_COLLAB_MESSAGE_BYTES});B.on(`error`,e=>{E.error({err:e},`WebSocketServer error`)});let H=new Map,q=new Set,J=!1;return t.on(`request`,(e,t)=>{let D=e.url?.split(`?`)[0];if(w!==void 0&&D===`/mcp`){let S=e.headers.origin,D=Array.isArray(e.headers[`mcp-session-id`])?e.headers[`mcp-session-id`][0]:e.headers[`mcp-session-id`];if(!isLoopbackAddress(e.socket.remoteAddress)){errorResponse(t,403,`urn:ok:error:loopback-required`,`Loopback access required.`,{handler:`mcp`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){errorResponse(t,403,`urn:ok:error:host-not-allowed`,`Host header not allowed.`,{handler:`mcp`});return}if(S!==void 0&&!isAllowedApiOrigin(S)){errorResponse(t,403,`urn:ok:error:invalid-origin`,`Origin not allowed.`,{handler:`mcp`});return}S!==void 0&&(t.setHeader(`Access-Control-Allow-Origin`,S),t.setHeader(`Vary`,`Origin`));for(let[e,S]of Object.entries(MCP_CORS_HEADERS))t.setHeader(e,S);if(e.method===`OPTIONS`){t.writeHead(204),t.end();return}w.handle(e,t).catch(e=>{E.error({err:e,sessionId:D},`Unhandled MCP HTTP error`),!t.writableEnded&&!t.headersSent?errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`mcp`,cause:e}):t.writableEnded||t.end()});return}if(D?.startsWith(`/api/`)){S.hooks(`onRequest`,{request:e,response:t}).then(()=>{t.writableEnded||t.headersSent||errorResponse(t,404,`urn:ok:error:not-found`,`API endpoint not found.`,{handler:`mcp-mount`,detail:`No handler for ${e.method??`GET`} ${D}`})}).catch(e=>{E.error({err:e},`Unhandled onRequest error`),!t.writableEnded&&!t.headersSent?errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`mcp-mount`,cause:e}):t.writableEnded||t.end()});return}let O=(e,t)=>{if(!(t.writableEnded||t.headersSent)){if(F!==void 0){try{F(e,t,()=>{t.writableEnded||t.headersSent||errorResponse(t,404,`urn:ok:error:not-found`,`Not found.`,{handler:`mcp-mount`,detail:`No handler for ${D??`/`}`})})}catch(e){E.error({err:e},`Unhandled react-shell middleware error`),!t.writableEnded&&!t.headersSent?errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`mcp-mount`,cause:e}):t.writableEnded||t.end()}return}errorResponse(t,404,`urn:ok:error:not-found`,`Not found.`,{handler:`mcp-mount`,detail:`No handler for ${D??`/`}`})}};if(j!==void 0){try{j(e,t,()=>O(e,t))}catch(e){E.error({err:e},`Unhandled content-asset middleware error`),!t.writableEnded&&!t.headersSent?errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`mcp-mount`,cause:e}):t.writableEnded||t.end()}return}if(F!==void 0){O(e,t);return}errorResponse(t,404,`urn:ok:error:not-found`,`Not found.`,{handler:`mcp-mount`,detail:`The React UI is served by \`ok ui\` (run \`ok ui\` and check \`ui.lock.port\`). No handler for ${D??`/`}`})}),t.on(`upgrade`,(e,t,w)=>{if(e.url?.startsWith(`/collab/keepalive`)){if(!isLoopbackAddress(e.socket.remoteAddress)||!isAllowedWorkspaceHostHeader(e.headers.host)){t.destroy();return}t.on(`error`,e=>{handleCollabSocketError(e)||E.error({err:e},`MCP keepalive socket error`)}),B.handleUpgrade(e,t,w,t=>{let S=parseKeepaliveConnectionId(e.url);if(S){let e=H.get(S);e!==void 0&&(clearTimeout(e),H.delete(S),E.info({connectionId:S},`[keepalive] reconnect during grace — timer cancelled`))}if(S&&k){let t=parseKeepaliveIdentity(e.url);if(t)try{let e=iconFromClientName(t.clientName),w=AGENT_ICON_COLORS[e]??colorFromSeed(t.colorSeed);k.setPresence(toBroadcasterKey(S),{displayName:t.displayName,icon:e,color:w,currentDoc:`(connected)`,mode:`idle`,ts:Date.now()})}catch(e){E.error({err:e,connectionId:S},`[keepalive] presence bootstrap failed`)}}let w=setInterval(()=>{try{t.ping()}catch{}},3e4);w.unref?.();let j=S?setInterval(()=>{k?.bumpPresenceTs(toBroadcasterKey(S))},3e3):null;j?.unref?.(),t.on(`close`,()=>{if(clearInterval(w),j!==null&&clearInterval(j),!S)return;let e=setTimeout(()=>{if(H.delete(S),J)return;let e=(async()=>{E.info({connectionId:S},`[keepalive] grace expired — cleaning up sessions`);try{await D?.closeAllForAgent(S)}catch(e){E.error({err:e,connectionId:S},`[keepalive] closeAllForAgent failed`)}try{O?.clearFocus(S)}catch(e){E.error({err:e,connectionId:S},`[keepalive] clearFocus failed`)}try{k?.clearPresence(toBroadcasterKey(S))}catch(e){E.error({err:e,connectionId:S},`[keepalive] clearPresence failed`)}})();q.add(e),e.finally(()=>q.delete(e))},L);e.unref?.(),H.set(S,e),E.info({connectionId:S,graceMs:L},`[keepalive] disconnected — grace timer started`)}),t.on(`error`,e=>{handleCollabSocketError(e)||E.error({err:e},`MCP keepalive WS error`),t.terminate()})});return}if(e.url?.startsWith(`/collab`)){t.on(`error`,e=>{handleCollabSocketError(e)||E.error({err:e},`Upgrade socket error`)}),B.handleUpgrade(e,t,w,t=>{let w=S.handleConnection(t,e),D=!1;t.on(`message`,e=>{if(D)return;let S=e.byteLength;if(S>MAX_COLLAB_MESSAGE_BYTES){D=!0,incrementCollabMessageTooLarge(),E.warn({event:`collab-message-too-large`,bytes:S,limit:MAX_COLLAB_MESSAGE_BYTES},`Collab WebSocket message rejected before Yjs processing`),t.close(1009,`Message Too Big`);return}w.handleMessage(new Uint8Array(e))}),t.on(`close`,(e,t)=>{w.handleClose({code:e,reason:t.toString()})}),t.on(`error`,e=>{if(e.code===`WS_ERR_UNSUPPORTED_MESSAGE_LENGTH`){incrementCollabMessageTooLarge(),E.warn({event:`collab-message-too-large`,limit:MAX_COLLAB_MESSAGE_BYTES},`Collab WebSocket frame rejected by ws maxPayload before Yjs processing`),t.terminate();return}handleCollabSocketError(e)||E.error({err:e},`WebSocket error`),t.terminate()})});return}t.destroy()}),{wss:B,shutdown:async()=>{if(!J){J=!0;for(let e of H.values())clearTimeout(e);H.clear(),q.size>0&&await Promise.allSettled(q)}}}}function parseKeepaliveConnectionId(e){if(!e)return null;try{return validateAgentId(new URL(e,`http://localhost`).searchParams.get(`connectionId`))}catch{return null}}const MAX_KEEPALIVE_IDENTITY_LEN=256;function sanitizeIdentityField(e){return e===null||e.length===0||e.length>MAX_KEEPALIVE_IDENTITY_LEN||/[-]/.test(e)?null:e}function parseKeepaliveIdentity(e){if(!e)return null;try{let t=new URL(e,`http://localhost`),S=sanitizeIdentityField(t.searchParams.get(`displayName`)),w=sanitizeIdentityField(t.searchParams.get(`clientName`)),E=sanitizeIdentityField(t.searchParams.get(`colorSeed`));return S===null||w===null||E===null?null:{displayName:S,clientName:w,colorSeed:E}}catch{return null}}const MISSING_OK_CONFIG_MESSAGE=`Open Knowledge config not found at .ok/config.yml. Run ok init to scaffold OK in this directory.`;var MissingOkConfigError=class extends Error{kind;projectDir;constructor(e,t,S){super(MISSING_OK_CONFIG_MESSAGE,S),this.name=`MissingOkConfigError`,this.kind=e,this.projectDir=t}};async function startConfigFileWatcher(e,t){let S=getLogger(`config-file-watcher`),{watch:w}=await import(`./chokidar-CxU7f6JW.mjs`),E=dirname(e);try{tracedMkdirSync(E,{recursive:!0})}catch(e){e.code!==`EEXIST`&&S.warn({err:e,watchDir:E},`failed to create watch directory; watcher may be inert`)}let D=w(E,{ignoreInitial:!0,depth:0,usePolling:!0,interval:200,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},ignored:t=>t!==E&&t!==e});await new Promise(e=>{D.once(`ready`,e)});let O=null;try{O=readFileSync(e,`utf-8`)}catch{}let k=(w,E=!0)=>{if(w!==e)return;let D;try{D=readFileSync(w,`utf-8`)}catch(e){if(e.code===`ENOENT`){E&&S.debug({path:w},`config file disappeared between event and read; dropping`);return}S.warn({err:e,path:w},`config file read failed; dropping event`);return}if(D!==O){O=D;try{t(D)}catch(e){S.warn({err:e,path:w},`config file change handler threw`)}}},j=e=>k(e);D.on(`add`,j),D.on(`change`,j),D.on(`unlink`,t=>{t===e&&S.debug({path:t},`config file unlinked; Y.Text retained at current state`)}),D.on(`error`,t=>{S.warn({err:t,watchDir:E,absPath:e},`[config-file-watcher] chokidar error while watching ${e}`)});let F=0,L=setInterval(()=>{F++,k(e,!1),F>=20&&clearInterval(L)},500);L.unref?.();let B=!1;return async()=>{B||(B=!0,clearInterval(L),await D.close())}}async function startMultiPathConfigFileWatcher(e,t){if(e.length===0)throw Error(`startMultiPathConfigFileWatcher requires at least one absolute path`);let S=getLogger(`config-file-watcher`),{watch:w}=await import(`./chokidar-CxU7f6JW.mjs`),E=new Set(e),D=Array.from(new Set(Array.from(E,e=>dirname(e))));for(let e of D)try{tracedMkdirSync(e,{recursive:!0})}catch(t){t.code!==`EEXIST`&&S.warn({err:t,dir:e},`failed to create watch directory; watcher may be inert`)}let O=w(D,{ignoreInitial:!0,depth:0,usePolling:!0,interval:200,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},ignored:e=>!E.has(e)&&!D.includes(e)});await new Promise(e=>{O.once(`ready`,e)});let k=new Map;for(let e of E)try{k.set(e,readFileSync(e,`utf-8`))}catch{k.set(e,null)}let j=(e,w=!0)=>{if(!E.has(e))return;let D;try{D=readFileSync(e,`utf-8`)}catch(t){if(t.code===`ENOENT`){w&&S.debug({path:e},`config file disappeared between event and read; dropping`);return}S.warn({err:t,path:e},`config file read failed; dropping event`);return}if(D!==k.get(e)){k.set(e,D);try{t(e,D)}catch(t){S.warn({err:t,path:e},`config file change handler threw`)}}},F=e=>j(e);O.on(`add`,F),O.on(`change`,F),O.on(`unlink`,e=>{E.has(e)&&S.debug({path:e},`config file unlinked; downstream state retained`)}),O.on(`error`,e=>{S.warn({err:e,watchDirs:D,paths:Array.from(E)},`[config-file-watcher] chokidar error in multi-path watcher`)});let L=0,B=setInterval(()=>{L++;for(let e of E)j(e,!1);L>=20&&clearInterval(B)},500);B.unref?.();let H=!1;return async()=>{H||(H=!0,clearInterval(B),await O.close())}}const BUILTIN_SKIP_DIRS=new Set([`node_modules`,`.venv`,`venv`,`env`,`__pycache__`,`vendor`,`dist`,`build`,`out`,`output`,`.next`,`.nuxt`,`.svelte-kit`,`.astro`,`.turbo`,`.cache`,`.parcel-cache`,`coverage`,`.git`,`.ok`,`.open-knowledge`,`.openknowledge`,`Library`,`Applications`,`.Trash`]),IGNORE_FILE_NAMES=[`.gitignore`,`.okignore`];function createContentFilter(e){let{projectDir:t,contentDir:S,onAfterRebuild:w}=e,E=relative(t,S),D=E.startsWith(`..`),O,k,j,F=0,L=0,B=0;function H(){let e=(0,import_ignore.default)();e.add(`.git`);let w=[],H=0,q=0;for(let S of IGNORE_FILE_NAMES){let E=join(t,S);if(existsSync(E))try{let t=readFileSync(E,`utf-8`);H+=t.length;let S=parseIgnorePatterns(t);w.push(...S),e.add(S)}catch(e){console.warn(`[content-filter] Failed to read ${S} at ${E}:`,e)}}if(E&&!D)for(let t of IGNORE_FILE_NAMES){let w=join(S,t);if(existsSync(w))try{let t=readFileSync(w,`utf-8`);H+=t.length,q++;let S=parseIgnorePatterns(t).map(e=>prefixPattern(e,E));e.add(S)}catch(e){console.warn(`[content-filter] Failed to read ${t} at ${w}:`,e)}}let J={value:H};q+=loadNestedIgnoreFiles(S,t,e,J),H=J.value;let Y=w.filter(e=>e.length>0&&!e.startsWith(`!`)&&!e.startsWith(`#`));return O=e,k=w,j=Y,F=w.length,L=q,B=H,{patternCount:F,nestedFileCount:L,bytes:B}}H();let q=new Map;function J(e){if(D)return!1;let t=E?`${E}/${e}`:e;return O.ignores(t)}populateDirCount(S,``,J,q);function Y(e){let t=stripDocExtension(e);return isSystemDoc(t)||isConfigDoc(t)}function ee(e){for(let t of e.split(`/`))if(BUILTIN_SKIP_DIRS.has(t))return!0;return D?!1:J(e)}return{isExcluded(e,t){if(Y(e))return!0;if(t?.bypassFilters)return!1;if(ee(e))return!0;if(isSupportedDocFile(e))return!1;let S=extname(e).slice(1).toLowerCase();if(ASSET_EXTENSIONS.has(S)){let t=dirname(e),S=t===`.`?``:t;if((q.get(S)??0)>0)return!1}return!0},isDirExcluded(e,t){if(t?.bypassFilters)return!1;for(let t of e.split(`/`))if(BUILTIN_SKIP_DIRS.has(t))return!0;if(D)return!1;let S=E?`${E}/${e}`:e;return O.ignores(S)||O.ignores(`${S}/`)},isPathIgnored(e,t){return Y(e)?!0:t?.bypassFilters?!1:ee(e)},getWatcherIgnoreGlobs(){return j},incrementMdDir(e){let t=e===`.`?``:e;q.set(t,(q.get(t)??0)+1)},decrementMdDir(e){let t=e===`.`?``:e,S=q.get(t)??0;S<=1?q.delete(t):q.set(t,S-1)},rebuildDirCount(){let e=new Map(q);q.clear();try{populateDirCount(S,``,J,q)}catch(t){for(let[t,S]of e)q.set(t,S);getLogger(`content-filter`).warn({err:t instanceof Error?t:Error(String(t))},`content-filter rebuildDirCount walk failed — retaining previous counts`)}},async rebuildIgnorePatterns(){let e=getLogger(`content-filter`),t=O,E=k,D=j,Y=F,ee=L,te=B,ne=Date.now();return withSpan(`config.ignore.rebuild`,{attributes:{}},async ae=>{try{let t=H();q.clear(),populateDirCount(S,``,J,q);let E=Date.now()-ne;if(ae.setAttributes({"ok.ignore.pattern_count":t.patternCount,"ok.ignore.nested_file_count":t.nestedFileCount,"ok.ignore.bytes":t.bytes}),e.info({patternCount:t.patternCount,nestedFileCount:t.nestedFileCount,bytes:t.bytes,durationMs:E},`content-filter rebuild succeeded`),w)try{w()}catch(t){e.warn({err:t instanceof Error?t:Error(String(t))},`content-filter onAfterRebuild callback threw — derived views may be stale`)}return{ok:!0,patternCount:t.patternCount,nestedFileCount:t.nestedFileCount,bytes:t.bytes,durationMs:E}}catch(w){O=t,k=E,j=D,F=Y,L=ee,B=te,q.clear();try{populateDirCount(S,``,J,q)}catch(t){e.warn({err:t instanceof Error?t:Error(String(t))},`content-filter rollback dirCount re-walk failed — sibling-asset counts may be stale until next rebuild`)}let H=w instanceof Error?w.message:String(w);return e.warn({err:w instanceof Error?w:Error(H)},`content-filter rebuild failed — rolled back to previous state`),{ok:!1,error:{message:H}}}})}}}function populateDirCount(e,t,S,w){let E;try{E=readdirSync(e,{withFileTypes:!0})}catch(t){console.warn(`[content-filter] Failed to read directory for dir-count: ${e}`,t);return}for(let D of E){let E=t?`${t}/${D.name}`:D.name;if(D.isDirectory()){if(BUILTIN_SKIP_DIRS.has(D.name)||S(E)||S(`${E}/`))continue;populateDirCount(join(e,D.name),E,S,w)}else D.isFile()&&isSupportedDocFile(D.name)&&!S(E)&&w.set(t,(w.get(t)??0)+1)}}function parseIgnorePatterns(e){return e.split(`
3353
+ `);if(!L&&!H&&!q&&!J&&!Y)return textResult(ae);let oe={};return L&&(oe.previewUrl=L.url,oe.previewUrlSource=L.source),H&&(oe.warning=buildPreviewAttachWarning(L)),J&&(oe.hints=J),Y&&(oe.summary=Y),textPlusStructured(ae,oe)})}function registerAllTools(e,t){let S=t.logger,w=createLoggedServer(e,{logger:t.logger,identityRef:t.identityRef}),E=e=>async w=>{try{let E=await t.resolveCwd(w);return(getCurrentMcpLogger()??S)?.debug(`tool cwd resolved`,{tool:e,cwd:E,...w?{explicit:w}:{}}),E}catch(t){throw(getCurrentMcpLogger()??S)?.warn(`tool call failed`,{tool:e,error:t instanceof Error?t.message:String(t),...w?{explicit:w}:{}}),t}};register$17(w,{resolveCwd:E(`exec`),serverUrl:t.serverUrl,config:t.config}),register$9(w,{config:t.config,resolveCwd:E(`ingest`)}),register$5(w,{config:t.config,resolveCwd:E(`research`)}),register$22(w,{config:t.config,resolveCwd:E(`consolidate`)}),register$20(w,{config:t.config,resolveCwd:E(`discover`)}),register$3(w,{resolveCwd:E(`search`),config:t.config,serverUrl:t.serverUrl}),register$8(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`links`)}),register(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`write_document`),identityRef:t.identityRef}),register$19(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`edit_document`),identityRef:t.identityRef}),register$21(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`delete_document`),identityRef:t.identityRef}),register$18(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`edit_frontmatter`),identityRef:t.identityRef}),register$6(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`rename`),identityRef:t.identityRef}),register$11(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`get_history`)}),register$1(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`version`),identityRef:t.identityRef}),register$14(w,{resolveCwd:E(`get_components`),config:t.config}),register$15(w,{resolveCwd:E(`get_authoring_palette`),config:t.config}),register$13(w,{config:t.config,resolveCwd:E(`get_config`)}),register$10(w,{config:t.config,resolveCwd:E(`get_preview_url`)}),register$16(w,{config:t.config,resolveCwd:E(`folder_config`)}),register$7(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`list_conflicts`)}),register$12(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`get_conflict_content`)}),register$4(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`resolve_conflict`)}),register$2(w,{serverUrl:t.serverUrl,config:t.config,resolveCwd:E(`share_link`)})}function firstHeader(e){return Array.isArray(e)?e[0]:e}function writePlain(e,t,S){e.writableEnded||(e.statusCode=t,e.setHeader(`Content-Type`,`text/plain; charset=utf-8`),e.end(S))}function createSessionServer(e,t,S){let w=e.config,E=new McpServer({name:MCP_SERVER_NAME,version:RUNTIME_VERSION},{instructions:buildInstructions(w.content)});installPrettyZodErrors(E);let D=S??randomUUID(),O={current:{connectionId:D,displayName:D,colorSeed:D}};E.server.oninitialized=()=>{let e=E.server.getClientVersion(),t=sanitizeClientName(e?.name,D);O.current={connectionId:D,clientInfo:e?{name:t,version:e.version}:void 0,displayName:displayNameFromClientName(t),colorSeed:t}};let k=e.projectDir??e.contentDir;return registerAllTools(E,{serverUrl:async()=>e.getServerUrl(),resolveCwd:async e=>{if(e===void 0)return k;let t=resolveWithinRoot(k,e);if(!t.ok)throw Error(`cwd "${e}" is not within the configured project root: ${t.reason}`);return t.abs},config:w,identityRef:O}),{server:E,transport:t}}function createMcpHttpHandler(e){let t=new Map,S=e.sessionTtlMs??1800*1e3,w=e.maxSessions??100;async function E(S,w){let E=t.get(S);if(!E)return;t.delete(S),E.ttlTimer!==void 0&&clearTimeout(E.ttlTimer);let D=await Promise.allSettled([E.server.close(),E.transport.close()]);for(let t of D)t.status===`rejected`&&e.log?.warn?.({err:t.reason,sessionId:S,reason:w},`MCP HTTP session close failed`);e.log?.info?.({sessionId:S,reason:w},`MCP HTTP session closed`)}function D(t,w){w.ttlTimer!==void 0&&clearTimeout(w.ttlTimer),w.ttlTimer=setTimeout(()=>{E(t,`ttl-expired`).catch(S=>{e.log?.warn?.({err:S,sessionId:t},`MCP HTTP session TTL cleanup failed`)})},S),w.ttlTimer.unref?.()}return{async handle(S,O){let k=firstHeader(S.headers[`mcp-session-id`]);if(k){let e=t.get(k);if(!e){writePlain(O,404,`MCP session not found`);return}D(k,e),await e.transport.handleRequest(S,O);return}if(S.method!==`POST`){writePlain(O,400,`Missing MCP session. Initialize with POST /mcp first.`);return}if(t.size>=w){e.log?.warn?.({activeSessions:t.size,maxSessions:w},`MCP HTTP session cap reached`),writePlain(O,503,`Too many active MCP sessions`);return}let j=firstHeader(S.headers[MCP_CONNECTION_ID_HEADER]),F=validateAgentId(j)??void 0;j!==void 0&&F===void 0&&e.log?.warn?.({headerLength:j.length},`MCP HTTP forwarded connectionId header failed validation; falling back to randomUUID`);let L=new StreamableHTTPServerTransport({sessionIdGenerator:()=>randomUUID(),enableJsonResponse:!0,onsessioninitialized:async S=>{try{let w=createSessionServer(e,L,F);await w.server.connect(L),t.set(S,w),D(S,w),e.log?.info?.({sessionId:S},`MCP HTTP session initialized`)}catch(w){throw t.delete(S),e.log?.error?.({err:w,sessionId:S},`MCP HTTP session initialization failed`),w}}});L.onerror=t=>{e.log?.warn?.({err:t},`MCP HTTP transport error`)},L.onclose=()=>{let t=L.sessionId;if(!t){e.log?.info?.({sessionId:t,reason:`transport-closed`},`MCP HTTP session closed`);return}E(t,`transport-closed`).catch(S=>{e.log?.warn?.({err:S,sessionId:t},`MCP HTTP transport-close cleanup failed`)})},await L.handleRequest(S,O)},async close(){let e=[...t.entries()];await Promise.allSettled(e.map(([e])=>E(e,`handler-close`)))}}}const DEFAULT_KEEPALIVE_GRACE_MS=1e4,MAX_COLLAB_MESSAGE_BYTES=1024*1024,MCP_CORS_HEADERS={"Access-Control-Allow-Methods":`GET, POST, DELETE, OPTIONS`,"Access-Control-Allow-Headers":`Content-Type, Authorization, traceparent, tracestate, baggage, mcp-session-id, mcp-protocol-version`,"Access-Control-Max-Age":`86400`};function mountMcpAndApi(e){let{httpServer:t,hocuspocus:S,mcpHttpHandler:w,log:E,sessionManager:D,agentFocusBroadcaster:O,agentPresenceBroadcaster:k,contentAssetMiddleware:j,reactShellMiddleware:F}=e,L=e.keepaliveGraceMs??DEFAULT_KEEPALIVE_GRACE_MS,B=new import_websocket_server$1.default({noServer:!0,maxPayload:MAX_COLLAB_MESSAGE_BYTES});B.on(`error`,e=>{E.error({err:e},`WebSocketServer error`)});let H=new Map,q=new Set,J=!1;return t.on(`request`,(e,t)=>{let D=e.url?.split(`?`)[0];if(w!==void 0&&D===`/mcp`){let S=e.headers.origin,D=Array.isArray(e.headers[`mcp-session-id`])?e.headers[`mcp-session-id`][0]:e.headers[`mcp-session-id`];if(!isLoopbackAddress(e.socket.remoteAddress)){errorResponse(t,403,`urn:ok:error:loopback-required`,`Loopback access required.`,{handler:`mcp`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){errorResponse(t,403,`urn:ok:error:host-not-allowed`,`Host header not allowed.`,{handler:`mcp`});return}if(S!==void 0&&!isAllowedApiOrigin(S)){errorResponse(t,403,`urn:ok:error:invalid-origin`,`Origin not allowed.`,{handler:`mcp`});return}S!==void 0&&(t.setHeader(`Access-Control-Allow-Origin`,S),t.setHeader(`Vary`,`Origin`));for(let[e,S]of Object.entries(MCP_CORS_HEADERS))t.setHeader(e,S);if(e.method===`OPTIONS`){t.writeHead(204),t.end();return}w.handle(e,t).catch(e=>{E.error({err:e,sessionId:D},`Unhandled MCP HTTP error`),!t.writableEnded&&!t.headersSent?errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`mcp`,cause:e}):t.writableEnded||t.end()});return}if(D?.startsWith(`/api/`)){S.hooks(`onRequest`,{request:e,response:t}).then(()=>{t.writableEnded||t.headersSent||errorResponse(t,404,`urn:ok:error:not-found`,`API endpoint not found.`,{handler:`mcp-mount`,detail:`No handler for ${e.method??`GET`} ${D}`})}).catch(e=>{E.error({err:e},`Unhandled onRequest error`),!t.writableEnded&&!t.headersSent?errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`mcp-mount`,cause:e}):t.writableEnded||t.end()});return}let O=(e,t)=>{if(!(t.writableEnded||t.headersSent)){if(F!==void 0){try{F(e,t,()=>{t.writableEnded||t.headersSent||errorResponse(t,404,`urn:ok:error:not-found`,`Not found.`,{handler:`mcp-mount`,detail:`No handler for ${D??`/`}`})})}catch(e){E.error({err:e},`Unhandled react-shell middleware error`),!t.writableEnded&&!t.headersSent?errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`mcp-mount`,cause:e}):t.writableEnded||t.end()}return}errorResponse(t,404,`urn:ok:error:not-found`,`Not found.`,{handler:`mcp-mount`,detail:`No handler for ${D??`/`}`})}};if(j!==void 0){try{j(e,t,()=>O(e,t))}catch(e){E.error({err:e},`Unhandled content-asset middleware error`),!t.writableEnded&&!t.headersSent?errorResponse(t,500,`urn:ok:error:internal-server-error`,`Internal server error.`,{handler:`mcp-mount`,cause:e}):t.writableEnded||t.end()}return}if(F!==void 0){O(e,t);return}errorResponse(t,404,`urn:ok:error:not-found`,`Not found.`,{handler:`mcp-mount`,detail:`The React UI is served by \`ok ui\` (run \`ok ui\` and check \`ui.lock.port\`). No handler for ${D??`/`}`})}),t.on(`upgrade`,(e,t,w)=>{if(e.url?.startsWith(`/collab/keepalive`)){if(!isLoopbackAddress(e.socket.remoteAddress)||!isAllowedWorkspaceHostHeader(e.headers.host)){t.destroy();return}t.on(`error`,e=>{handleCollabSocketError(e)||E.error({err:e},`MCP keepalive socket error`)}),B.handleUpgrade(e,t,w,t=>{let S=parseKeepaliveConnectionId(e.url);if(S){let e=H.get(S);e!==void 0&&(clearTimeout(e),H.delete(S),E.info({connectionId:S},`[keepalive] reconnect during grace — timer cancelled`))}if(S&&k){let t=parseKeepaliveIdentity(e.url);if(t)try{let e=iconFromClientName(t.clientName),w=AGENT_ICON_COLORS[e]??colorFromSeed(t.colorSeed);k.setPresence(toBroadcasterKey(S),{displayName:t.displayName,icon:e,color:w,currentDoc:`(connected)`,mode:`idle`,ts:Date.now()})}catch(e){E.error({err:e,connectionId:S},`[keepalive] presence bootstrap failed`)}}let w=setInterval(()=>{try{t.ping()}catch{}},3e4);w.unref?.();let j=S?setInterval(()=>{k?.bumpPresenceTs(toBroadcasterKey(S))},3e3):null;j?.unref?.(),t.on(`close`,()=>{if(clearInterval(w),j!==null&&clearInterval(j),!S)return;let e=setTimeout(()=>{if(H.delete(S),J)return;let e=(async()=>{E.info({connectionId:S},`[keepalive] grace expired — cleaning up sessions`);try{await D?.closeAllForAgent(S)}catch(e){E.error({err:e,connectionId:S},`[keepalive] closeAllForAgent failed`)}try{O?.clearFocus(S)}catch(e){E.error({err:e,connectionId:S},`[keepalive] clearFocus failed`)}try{k?.clearPresence(toBroadcasterKey(S))}catch(e){E.error({err:e,connectionId:S},`[keepalive] clearPresence failed`)}})();q.add(e),e.finally(()=>q.delete(e))},L);e.unref?.(),H.set(S,e),E.info({connectionId:S,graceMs:L},`[keepalive] disconnected — grace timer started`)}),t.on(`error`,e=>{handleCollabSocketError(e)||E.error({err:e},`MCP keepalive WS error`),t.terminate()})});return}if(e.url?.startsWith(`/collab`)){t.on(`error`,e=>{handleCollabSocketError(e)||E.error({err:e},`Upgrade socket error`)}),B.handleUpgrade(e,t,w,t=>{let w=S.handleConnection(t,e),D=!1;t.on(`message`,e=>{if(D)return;let S=e.byteLength;if(S>MAX_COLLAB_MESSAGE_BYTES){D=!0,incrementCollabMessageTooLarge(),E.warn({event:`collab-message-too-large`,bytes:S,limit:MAX_COLLAB_MESSAGE_BYTES},`Collab WebSocket message rejected before Yjs processing`),t.close(1009,`Message Too Big`);return}w.handleMessage(new Uint8Array(e))}),t.on(`close`,(e,t)=>{w.handleClose({code:e,reason:t.toString()})}),t.on(`error`,e=>{if(e.code===`WS_ERR_UNSUPPORTED_MESSAGE_LENGTH`){incrementCollabMessageTooLarge(),E.warn({event:`collab-message-too-large`,limit:MAX_COLLAB_MESSAGE_BYTES},`Collab WebSocket frame rejected by ws maxPayload before Yjs processing`),t.terminate();return}handleCollabSocketError(e)||E.error({err:e},`WebSocket error`),t.terminate()})});return}t.destroy()}),{wss:B,shutdown:async()=>{if(!J){J=!0;for(let e of H.values())clearTimeout(e);H.clear(),q.size>0&&await Promise.allSettled(q)}}}}function parseKeepaliveConnectionId(e){if(!e)return null;try{return validateAgentId(new URL(e,`http://localhost`).searchParams.get(`connectionId`))}catch{return null}}const MAX_KEEPALIVE_IDENTITY_LEN=256;function sanitizeIdentityField(e){return e===null||e.length===0||e.length>MAX_KEEPALIVE_IDENTITY_LEN||/[-]/.test(e)?null:e}function parseKeepaliveIdentity(e){if(!e)return null;try{let t=new URL(e,`http://localhost`),S=sanitizeIdentityField(t.searchParams.get(`displayName`)),w=sanitizeIdentityField(t.searchParams.get(`clientName`)),E=sanitizeIdentityField(t.searchParams.get(`colorSeed`));return S===null||w===null||E===null?null:{displayName:S,clientName:w,colorSeed:E}}catch{return null}}const MISSING_OK_CONFIG_MESSAGE=`Open Knowledge config not found at .ok/config.yml. Run ok init to scaffold OK in this directory.`;var MissingOkConfigError=class extends Error{kind;projectDir;constructor(e,t,S){super(MISSING_OK_CONFIG_MESSAGE,S),this.name=`MissingOkConfigError`,this.kind=e,this.projectDir=t}};async function startConfigFileWatcher(e,t){let S=getLogger(`config-file-watcher`),{watch:w}=await import(`./chokidar-CxU7f6JW.mjs`),E=dirname(e);try{tracedMkdirSync(E,{recursive:!0})}catch(e){e.code!==`EEXIST`&&S.warn({err:e,watchDir:E},`failed to create watch directory; watcher may be inert`)}let D=w(E,{ignoreInitial:!0,depth:0,usePolling:!0,interval:200,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},ignored:t=>t!==E&&t!==e});await new Promise(e=>{D.once(`ready`,e)});let O=null;try{O=readFileSync(e,`utf-8`)}catch{}let k=(w,E=!0)=>{if(w!==e)return;let D;try{D=readFileSync(w,`utf-8`)}catch(e){if(e.code===`ENOENT`){E&&S.debug({path:w},`config file disappeared between event and read; dropping`);return}S.warn({err:e,path:w},`config file read failed; dropping event`);return}if(D!==O){O=D;try{t(D)}catch(e){S.warn({err:e,path:w},`config file change handler threw`)}}},j=e=>k(e);D.on(`add`,j),D.on(`change`,j),D.on(`unlink`,t=>{t===e&&S.debug({path:t},`config file unlinked; Y.Text retained at current state`)}),D.on(`error`,t=>{S.warn({err:t,watchDir:E,absPath:e},`[config-file-watcher] chokidar error while watching ${e}`)});let F=0,L=setInterval(()=>{F++,k(e,!1),F>=20&&clearInterval(L)},500);L.unref?.();let B=!1;return async()=>{B||(B=!0,clearInterval(L),await D.close())}}async function startMultiPathConfigFileWatcher(e,t){if(e.length===0)throw Error(`startMultiPathConfigFileWatcher requires at least one absolute path`);let S=getLogger(`config-file-watcher`),{watch:w}=await import(`./chokidar-CxU7f6JW.mjs`),E=new Set(e),D=Array.from(new Set(Array.from(E,e=>dirname(e))));for(let e of D)try{tracedMkdirSync(e,{recursive:!0})}catch(t){t.code!==`EEXIST`&&S.warn({err:t,dir:e},`failed to create watch directory; watcher may be inert`)}let O=w(D,{ignoreInitial:!0,depth:0,usePolling:!0,interval:200,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},ignored:e=>!E.has(e)&&!D.includes(e)});await new Promise(e=>{O.once(`ready`,e)});let k=new Map;for(let e of E)try{k.set(e,readFileSync(e,`utf-8`))}catch{k.set(e,null)}let j=(e,w=!0)=>{if(!E.has(e))return;let D;try{D=readFileSync(e,`utf-8`)}catch(t){if(t.code===`ENOENT`){w&&S.debug({path:e},`config file disappeared between event and read; dropping`);return}S.warn({err:t,path:e},`config file read failed; dropping event`);return}if(D!==k.get(e)){k.set(e,D);try{t(e,D)}catch(t){S.warn({err:t,path:e},`config file change handler threw`)}}},F=e=>j(e);O.on(`add`,F),O.on(`change`,F),O.on(`unlink`,e=>{E.has(e)&&S.debug({path:e},`config file unlinked; downstream state retained`)}),O.on(`error`,e=>{S.warn({err:e,watchDirs:D,paths:Array.from(E)},`[config-file-watcher] chokidar error in multi-path watcher`)});let L=0,B=setInterval(()=>{L++;for(let e of E)j(e,!1);L>=20&&clearInterval(B)},500);B.unref?.();let H=!1;return async()=>{H||(H=!0,clearInterval(B),await O.close())}}function entryMatchesDocName(e,t,S,w){let E=relative(w,join(S,e.file));return E.startsWith(`..`)?!1:stripDocExtension(E)===t}function createConflictLifecycleSeedExtension(e){let{getSyncEngine:t,projectDir:S,contentDir:w}=e;return{async afterLoadDocument({documentName:e,document:E}){if(!(isSystemDoc(e)||isConfigDoc(e)))try{let D=t();if(!D)return;let O=D.getConflicts();if(O.length===0||!O.some(t=>entryMatchesDocName(t,e,S,w)))return;let k=E.getMap(`lifecycle`);if(k.get(`status`)===`conflict`)return;k.set(`status`,`conflict`),k.set(`reason`,`conflict-markers`),console.warn(JSON.stringify({event:`lifecycle-seeded-on-load-from-conflict-store`,"doc.name":e}))}catch(t){console.warn(`[conflict-lifecycle-seed] failed to seed lifecycle on load (doc=${e}):`,t instanceof Error?t:String(t))}}}}const BUILTIN_SKIP_DIRS=new Set([`node_modules`,`.venv`,`venv`,`env`,`__pycache__`,`vendor`,`dist`,`build`,`out`,`output`,`.next`,`.nuxt`,`.svelte-kit`,`.astro`,`.turbo`,`.cache`,`.parcel-cache`,`coverage`,`.git`,`.ok`,`.open-knowledge`,`.openknowledge`,`Library`,`Applications`,`.Trash`]),IGNORE_FILE_NAMES=[`.gitignore`,`.okignore`];function createContentFilter(e){let{projectDir:t,contentDir:S,onAfterRebuild:w}=e,E=relative(t,S),D=E.startsWith(`..`),O,k,j,F=0,L=0,B=0;function H(){let e=(0,import_ignore.default)();e.add(`.git`);let w=[],H=0,q=0;for(let S of IGNORE_FILE_NAMES){let E=join(t,S);if(existsSync(E))try{let t=readFileSync(E,`utf-8`);H+=t.length;let S=parseIgnorePatterns(t);w.push(...S),e.add(S)}catch(e){console.warn(`[content-filter] Failed to read ${S} at ${E}:`,e)}}if(E&&!D)for(let t of IGNORE_FILE_NAMES){let w=join(S,t);if(existsSync(w))try{let t=readFileSync(w,`utf-8`);H+=t.length,q++;let S=parseIgnorePatterns(t).map(e=>prefixPattern(e,E));e.add(S)}catch(e){console.warn(`[content-filter] Failed to read ${t} at ${w}:`,e)}}let J={value:H};q+=loadNestedIgnoreFiles(S,t,e,J),H=J.value;let Y=w.filter(e=>e.length>0&&!e.startsWith(`!`)&&!e.startsWith(`#`));return O=e,k=w,j=Y,F=w.length,L=q,B=H,{patternCount:F,nestedFileCount:L,bytes:B}}H();let q=new Map;function J(e){if(D)return!1;let t=E?`${E}/${e}`:e;return O.ignores(t)}populateDirCount(S,``,J,q);function Y(e){let t=stripDocExtension(e);return isSystemDoc(t)||isConfigDoc(t)}function ee(e){for(let t of e.split(`/`))if(BUILTIN_SKIP_DIRS.has(t))return!0;return D?!1:J(e)}return{isExcluded(e,t){if(Y(e))return!0;if(t?.bypassFilters)return!1;if(ee(e))return!0;if(isSupportedDocFile(e))return!1;let S=extname(e).slice(1).toLowerCase();if(ASSET_EXTENSIONS.has(S)){let t=dirname(e),S=t===`.`?``:t;if((q.get(S)??0)>0)return!1}return!0},isDirExcluded(e,t){if(t?.bypassFilters)return!1;for(let t of e.split(`/`))if(BUILTIN_SKIP_DIRS.has(t))return!0;if(D)return!1;let S=E?`${E}/${e}`:e;return O.ignores(S)||O.ignores(`${S}/`)},isPathIgnored(e,t){return Y(e)?!0:t?.bypassFilters?!1:ee(e)},getWatcherIgnoreGlobs(){return j},incrementMdDir(e){let t=e===`.`?``:e;q.set(t,(q.get(t)??0)+1)},decrementMdDir(e){let t=e===`.`?``:e,S=q.get(t)??0;S<=1?q.delete(t):q.set(t,S-1)},rebuildDirCount(){let e=new Map(q);q.clear();try{populateDirCount(S,``,J,q)}catch(t){for(let[t,S]of e)q.set(t,S);getLogger(`content-filter`).warn({err:t instanceof Error?t:Error(String(t))},`content-filter rebuildDirCount walk failed — retaining previous counts`)}},async rebuildIgnorePatterns(){let e=getLogger(`content-filter`),t=O,E=k,D=j,Y=F,ee=L,te=B,ne=Date.now();return withSpan(`config.ignore.rebuild`,{attributes:{}},async ae=>{try{let t=H();q.clear(),populateDirCount(S,``,J,q);let E=Date.now()-ne;if(ae.setAttributes({"ok.ignore.pattern_count":t.patternCount,"ok.ignore.nested_file_count":t.nestedFileCount,"ok.ignore.bytes":t.bytes}),e.info({patternCount:t.patternCount,nestedFileCount:t.nestedFileCount,bytes:t.bytes,durationMs:E},`content-filter rebuild succeeded`),w)try{w()}catch(t){e.warn({err:t instanceof Error?t:Error(String(t))},`content-filter onAfterRebuild callback threw — derived views may be stale`)}return{ok:!0,patternCount:t.patternCount,nestedFileCount:t.nestedFileCount,bytes:t.bytes,durationMs:E}}catch(w){O=t,k=E,j=D,F=Y,L=ee,B=te,q.clear();try{populateDirCount(S,``,J,q)}catch(t){e.warn({err:t instanceof Error?t:Error(String(t))},`content-filter rollback dirCount re-walk failed — sibling-asset counts may be stale until next rebuild`)}let H=w instanceof Error?w.message:String(w);return e.warn({err:w instanceof Error?w:Error(H)},`content-filter rebuild failed — rolled back to previous state`),{ok:!1,error:{message:H}}}})}}}function populateDirCount(e,t,S,w){let E;try{E=readdirSync(e,{withFileTypes:!0})}catch(t){console.warn(`[content-filter] Failed to read directory for dir-count: ${e}`,t);return}for(let D of E){let E=t?`${t}/${D.name}`:D.name;if(D.isDirectory()){if(BUILTIN_SKIP_DIRS.has(D.name)||S(E)||S(`${E}/`))continue;populateDirCount(join(e,D.name),E,S,w)}else D.isFile()&&isSupportedDocFile(D.name)&&!S(E)&&w.set(t,(w.get(t)??0)+1)}}function parseIgnorePatterns(e){return e.split(`
3288
3354
  `).map(e=>e.trim()).filter(e=>e.length>0&&!e.startsWith(`#`))}function prefixPattern(e,t){return e.startsWith(`!`)?`!${t}/${e.slice(1)}`:`${t}/${e}`}function loadNestedIgnoreFiles(e,t,S,w){let E;try{E=readdirSync(e,{withFileTypes:!0})}catch(t){return console.warn(`[content-filter] Failed to read directory ${e}:`,t),0}let D=0;for(let O of E){if(!O.isDirectory()||BUILTIN_SKIP_DIRS.has(O.name))continue;let E=join(e,O.name),k=relative(t,E);if(!k.startsWith(`..`)&&!(S.ignores(k)||S.ignores(`${k}/`))){for(let e of IGNORE_FILE_NAMES){let t=join(E,e);if(existsSync(t))try{let e=readFileSync(t,`utf-8`);w.value+=e.length;let E=parseIgnorePatterns(e).map(e=>prefixPattern(e,k));S.add(E),D++}catch(S){console.warn(`[content-filter] Failed to read nested ${e} at ${t}:`,S)}}D+=loadNestedIgnoreFiles(E,t,S,w)}}return D}async function initContentDirStateAsync(e,t,S,w,E,D,O){let k;try{k=await readdir(e,{withFileTypes:!0})}catch(t){console.warn(`[content-filter] Failed to read directory ${e}:`,t);return}for(let j of k){let k=t?`${t}/${j.name}`:j.name;if(j.isDirectory()){if(BUILTIN_SKIP_DIRS.has(j.name))continue;let t=join(e,j.name);if(!D){let e=relative(S,t);if(e.startsWith(`..`)||w.ignores(e)||w.ignores(`${e}/`))continue;for(let S of IGNORE_FILE_NAMES){let E=join(t,S);if(existsSync(E))try{let t=parseIgnorePatterns(await readFile$1(E,`utf-8`));w.add(t.map(t=>prefixPattern(t,e)))}catch(e){console.warn(`[content-filter] Failed to read nested ${S} at ${E}:`,e)}}}await initContentDirStateAsync(t,k,S,w,E,D,O)}else if(j.isFile()&&isSupportedDocFile(j.name)){if(!D){let e=E?`${E}/${k}`:k;if(w.ignores(e))continue}O.set(t,(O.get(t)??0)+1)}}}async function createContentFilterAsync(e){let{projectDir:t,contentDir:S,onAfterRebuild:w}=e,E=relative(t,S),D=E.startsWith(`..`),O=(0,import_ignore.default)(),k=[],j=new Map;function F(e){if(D)return!1;let t=E?`${E}/${e}`:e;return O.ignores(t)}function L(e){let t=stripDocExtension(e);return isSystemDoc(t)||isConfigDoc(t)}function B(e){for(let t of e.split(`/`))if(BUILTIN_SKIP_DIRS.has(t))return!0;return D?!1:F(e)}async function H(){let e=(0,import_ignore.default)();e.add(`.git`);let w=[];for(let S of IGNORE_FILE_NAMES){let E=join(t,S);if(existsSync(E))try{let t=parseIgnorePatterns(await readFile$1(E,`utf-8`));w.push(...t),e.add(t)}catch(e){console.warn(`[content-filter] Failed to read ${S} at ${E}:`,e)}}if(E&&!D)for(let t of IGNORE_FILE_NAMES){let w=join(S,t);if(existsSync(w))try{let t=parseIgnorePatterns(await readFile$1(w,`utf-8`));e.add(t.map(e=>prefixPattern(e,E)))}catch(e){console.warn(`[content-filter] Failed to read ${t} at ${w}:`,e)}}let F=new Map;await initContentDirStateAsync(S,``,t,e,E,D,F),O=e,k=w.filter(e=>e.length>0&&!e.startsWith(`!`)&&!e.startsWith(`#`)),j.clear();for(let[e,t]of F)j.set(e,t)}return await H(),{isExcluded(e,t){if(L(e))return!0;if(t?.bypassFilters)return!1;if(B(e))return!0;if(isSupportedDocFile(e))return!1;let S=extname(e).slice(1).toLowerCase();if(ASSET_EXTENSIONS.has(S)){let t=dirname(e),S=t===`.`?``:t;if((j.get(S)??0)>0)return!1}return!0},isDirExcluded(e,t){if(t?.bypassFilters)return!1;for(let t of e.split(`/`))if(BUILTIN_SKIP_DIRS.has(t))return!0;if(D)return!1;let S=E?`${E}/${e}`:e;return O.ignores(S)||O.ignores(`${S}/`)},isPathIgnored(e,t){return L(e)?!0:t?.bypassFilters?!1:B(e)},getWatcherIgnoreGlobs(){return k},incrementMdDir(e){let t=e===`.`?``:e;j.set(t,(j.get(t)??0)+1)},decrementMdDir(e){let t=e===`.`?``:e,S=j.get(t)??0;S<=1?j.delete(t):j.set(t,S-1)},rebuildDirCount(){let e=new Map(j);j.clear();try{populateDirCount(S,``,F,j)}catch(t){for(let[t,S]of e)j.set(t,S);getLogger(`content-filter`).warn({err:t instanceof Error?t:Error(String(t))},`content-filter rebuildDirCount walk failed — retaining previous counts`)}},async rebuildIgnorePatterns(){let e=getLogger(`content-filter`),t=O,S=k,E=new Map(j),D=Date.now();return withSpan(`config.ignore.rebuild`,{attributes:{}},async F=>{try{await H();let t=Date.now()-D;if(F.setAttributes({"ok.ignore.pattern_count":k.length,"ok.ignore.nested_file_count":0,"ok.ignore.bytes":0}),e.info({durationMs:t},`content-filter async rebuild succeeded`),w)try{w()}catch(t){e.warn({err:t instanceof Error?t:Error(String(t))},`content-filter onAfterRebuild callback threw — derived views may be stale`)}return{ok:!0,patternCount:k.length,nestedFileCount:0,bytes:0,durationMs:t}}catch(w){O=t,k=S,j.clear();for(let[e,t]of E)j.set(e,t);let D=w instanceof Error?w.message:String(w);return e.warn({err:w instanceof Error?w:Error(D)},`content-filter async rebuild failed — rolled back`),{ok:!1,error:{message:D}}}})}}}const QUIET_WINDOW_MS=100,BATCH_TIMEOUT_MS=3e4,WATCHED_FILES=new Set([`HEAD`,`MERGE_HEAD`,`ORIG_HEAD`,`index.lock`]);function readHeadSha(e){try{let t=readFileSync(resolve(e,`HEAD`),`utf-8`).trim();if(t.startsWith(`ref: `)){let S=resolve(e,t.slice(5));try{return readFileSync(S,`utf-8`).trim()}catch{try{let S=readFileSync(resolve(e,`packed-refs`),`utf-8`),w=t.slice(5),E=S.split(`
3289
3355
  `).find(e=>e.endsWith(` ${w}`));if(E)return E.split(` `)[0]}catch{}return null}}return t.length>=40?t.slice(0,40):null}catch{return null}}function readBranchFromHead(e){try{let t=readFileSync(resolve(e,`HEAD`),`utf-8`).trim();return t.startsWith(`ref: refs/heads/`)?t.slice(16):t.length>=40?`detached-${t.slice(0,12)}`:null}catch{return null}}async function startHeadWatcher(e,t,S){let w=resolveGitDir(e);if(!w)return{unsubscribe:async()=>{},getLastKnownBranch:()=>null};let E=w,D=!1,O=null,k=null,j=null,F=null;async function L(e){if(H&&await H,!D)return;O&&=(clearTimeout(O),null),k&&=(clearTimeout(k),null);let t=readHeadSha(E),w=j!==t,L=readBranchFromHead(E),B;B=L?.startsWith(`detached-`)?`detached-head`:F===L?`within-branch`:`cross-branch`;let q=F;try{await S({headMoved:w,oldHead:j,newHead:t,timeout:e,batchKind:B,oldBranch:q,newBranch:L})}catch(e){console.error(`[head-watcher] onBatchEnd callback failed:`,e)}finally{D=!1,j=t,F=L}}function B(){O&&clearTimeout(O),O=setTimeout(()=>{O=null,L(!1)},QUIET_WINDOW_MS)}let H=null;async function q(e){if(!D){D=!0,j=readHeadSha(E);let S=(async()=>{try{await t({trigger:e})}catch(e){console.error(`[head-watcher] onBatchBegin callback failed:`,e)}})();H=S,await S,H=null,k=setTimeout(()=>{k=null,L(!0)},BATCH_TIMEOUT_MS)}B()}let J,Y;try{Y=await import(`@parcel/watcher`)}catch(e){throw Error(`@parcel/watcher unavailable for HEAD watching: ${e instanceof Error?e.message:e}`)}try{let e=await Y.subscribe(E,(e,t)=>{if(e){console.error(`[head-watcher]`,e);return}for(let e of t){let t=e.path.split(`/`).pop()??``;if(WATCHED_FILES.has(t)){q(t);break}}});J=()=>e.unsubscribe()}catch(e){throw Error(`@parcel/watcher subscribe failed for HEAD watching: ${e instanceof Error?e.message:e}`)}return j=readHeadSha(E),F=readBranchFromHead(E),console.log(`[head-watcher] Watching ${E} for HEAD changes`),{unsubscribe:async()=>{D&&await L(!1),O&&clearTimeout(O),k&&clearTimeout(k),await J()},getLastKnownBranch:()=>F}}const LIVE_DERIVED_INDEX_DEBOUNCE_MS=100;function isLocalOriginLike(e){return typeof e!=`object`||!e?!1:e.source===`local`}function serializeLiveDocument(e){return e.getText(`source`).toString()}function createLiveDerivedIndexExtension(e){let{backlinkIndex:t,tagIndex:S,signalChannel:w,debounceMs:E=100}=e,D=new Map;function O(e){let t=D.get(e);t&&(clearTimeout(t),D.delete(e))}function k(e,k){O(e),D.set(e,setTimeout(()=>{D.delete(e);try{let E=serializeLiveDocument(k);t.updateDocumentFromMarkdown(e,E),w?.(`backlinks`),w?.(`graph`),S&&(S.updateDocumentFromMarkdown(e,E),w?.(`tags`))}catch(t){console.error(`[live-derived-index] Failed to update derived views for ${e}:`,t)}},E))}return{async onChange({documentName:e,document:t,transactionOrigin:S}){isSystemDoc(e)||isConfigDoc(e)||isLocalOriginLike(S)&&S.context?.origin===`file-watcher`||k(e,t)},async beforeUnloadDocument({documentName:e}){O(e)},async onDestroy(){for(let e of D.values())clearTimeout(e);D.clear()}}}const PRINCIPAL_FILE=`principal.json`,GIT_TIMEOUT_MS=3e3;async function readGitConfig(e){try{let t=esm_default({baseDir:e,timeout:{block:GIT_TIMEOUT_MS}});return{name:(await t.raw(`config`,`--get`,`user.name`)).trim()||null,email:(await t.raw(`config`,`--get`,`user.email`)).trim()||null}}catch{return{name:null,email:null}}}async function loadPrincipal(e){let t=getLocalDir(e),S=resolve(t,PRINCIPAL_FILE),{name:w,email:E}=await readGitConfig(e);if(existsSync(S)){let e;try{e=JSON.parse(readFileSync(S,`utf-8`))}catch{e={}}let t=typeof e.id==`string`&&e.id.startsWith(`principal-`)?e.id:`principal-${randomUUID()}`,D=typeof e.created_at==`string`?e.created_at:new Date().toISOString(),O=t.slice(10,18),k={id:t,display_name:w?sanitizeGitIdentity(w):typeof e.display_name==`string`?e.display_name:`Local User`,display_email:E?sanitizeGitIdentity(E):typeof e.display_email==`string`?e.display_email:`principal-${O}@openknowledge.local`,source:w||E?`git-config`:`synthesized`,created_at:D};return writeFileSync(S,JSON.stringify(k,null,2),`utf-8`),k}mkdirSync(t,{recursive:!0});let D=`principal-${randomUUID()}`,O=D.slice(10,18),k={id:D,display_name:w?sanitizeGitIdentity(w):`Local User`,display_email:E?sanitizeGitIdentity(E):`principal-${O}@openknowledge.local`,source:w||E?`git-config`:`synthesized`,created_at:new Date().toISOString()};return writeFileSync(S,JSON.stringify(k,null,2),`utf-8`),k}const DEFAULT_CAPACITY=1e4;var RecentlyRemovedDocs=class{map=new Map;capacity;onEviction;onSizeChange;now;constructor(e=DEFAULT_CAPACITY,t={}){this.capacity=Math.max(0,Math.floor(e)),this.onEviction=t.onEviction,this.onSizeChange=t.onSizeChange,this.now=t.now??Date.now}setRenamed(e,t){this.put(e,{kind:`renamed`,newDocName:t,addedAt:this.now()})}setDeleted(e){this.put(e,{kind:`deleted`,addedAt:this.now()})}get(e){let t=this.map.get(e);if(t!==void 0)return this.map.delete(e),this.map.set(e,t),t}has(e){return this.map.has(e)}peek(e){return this.map.get(e)}delete(e){this.map.delete(e)&&this.onSizeChange?.(this.map.size)}get size(){return this.map.size}put(e,t){if(this.capacity===0){this.onSizeChange?.(0);return}for(this.map.delete(e),this.map.set(e,t);this.map.size>this.capacity;){let e=this.map.keys().next().value;if(e===void 0)break;this.map.delete(e),this.onEviction?.()}this.onSizeChange?.(this.map.size)}};function fileExistsForDocName(e,t){let S=e.resolveFilePath(t);return S!==null&&e.fileExists(S)}async function runRemovalRedirectGuard(e,t){try{if(isSystemDoc(e)||isConfigDoc(e))return;let S=t.recentlyRemovedDocs.get(e);if(S===void 0)return;if(S.kind===`deleted`){if(fileExistsForDocName(t,e)){t.recentlyRemovedDocs.delete(e);return}throw incrementAuthDocDeleted(),setActiveSpanAttributes({"auth.reason":`doc-deleted`}),new HocuspocusAuthRejection(`doc-deleted`,`removed-doc rejection for deleted ${e}`)}let w=new Set([e]),E=S.newDocName;for(;;){if(w.has(E)){incrementRemovalRedirectChainCycle(),console.warn(JSON.stringify({event:`removal-redirect-chain-cycle`,documentName:e,target:E}));return}w.add(E);let S=t.recentlyRemovedDocs.get(E);if(S===void 0)throw incrementAuthRenameRedirect(),setActiveSpanAttributes({"auth.reason":`rename-redirect`}),new HocuspocusAuthRejection(`rename-redirect`,`removed-doc redirect for ${e} → ${E}`,E);if(S.kind===`deleted`)throw fileExistsForDocName(t,E)?(t.recentlyRemovedDocs.delete(E),incrementAuthRenameRedirect(),setActiveSpanAttributes({"auth.reason":`rename-redirect`}),new HocuspocusAuthRejection(`rename-redirect`,`removed-doc redirect for ${e} → ${E}`,E)):(incrementAuthDocDeleted(),setActiveSpanAttributes({"auth.reason":`doc-deleted`}),new HocuspocusAuthRejection(`doc-deleted`,`removed-doc rejection for deleted ${e}`));E=S.newDocName}}catch(t){if(t instanceof HocuspocusAuthRejection)throw t;incrementAuthRemovalGuardError(),console.warn(JSON.stringify({event:`removal-redirect-extension-error`,documentName:e,message:t instanceof Error?t.message:String(t)}))}}function createServerObserverExtension(e){let t=new Map,S=new Map;return{async afterLoadDocument({documentName:w,document:E}){if(isSystemDoc(w)||isConfigDoc(w)||t.has(w))return;let D=E,O=D.getXmlFragment(`default`),k=D.getText(`source`),j=()=>{try{let S=setupServerObservers({doc:D,xmlFragment:O,ytext:k,mdManager:e.mdManager,schema:e.schema,docName:w,shadow:e.shadowRef?()=>e.shadowRef?.current:void 0,getBranch:e.getCurrentBranch?()=>e.getCurrentBranch?.()??`main`:void 0,contentRoot:e.contentRoot,resolveEmbed:e.resolveEmbed,resolveSize:e.resolveSize});return t.set(w,S),!0}catch(e){return console.error(`[ServerObserverExtension] Failed to attach observers for '${w}':`,e),incrementServerObserverError(`a`),incrementServerObserverError(`b`),!1}};if(!j()){let e=setTimeout(()=>{S.delete(w),!t.has(w)&&(console.warn(`[ServerObserverExtension] Retrying observer attachment for '${w}'`),j())},5e3);S.set(w,e)}},async afterUnloadDocument({documentName:e}){let w=S.get(e);w&&(clearTimeout(w),S.delete(e));let E=t.get(e);E&&(E(),t.delete(e))},async onDestroy(){for(let e of S.values())clearTimeout(e);S.clear();for(let[e,S]of t.entries())try{S()}catch(t){console.error(`[ServerObserverExtension] Cleanup failed for '${e}':`,t)}t.clear()}}}const STATE_MANIFEST_FILENAME=`state.json`;function detectProjectShape(e){return e.lockDir,existsSync(e.shadowRepoDir)?`adopt`:`fresh`}function manifestPath(e){return resolve(e,STATE_MANIFEST_FILENAME)}function isCompatibleSchema(e,t){return e===t||e===0&&t===1}var StateManifestError=class extends Error{kind;path;constructor(e){super(e.message),this.name=`StateManifestError`,this.kind=e.kind,this.path=e.path}};function isStateManifestRecord(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.stateSchemaVersion!=`number`||typeof t.createdAt!=`string`||!t.createdBy||typeof t.createdBy!=`object`)return!1;let S=t.createdBy;return!(typeof S.runtimeVersion!=`string`||S.protocolVersion!==void 0&&typeof S.protocolVersion!=`number`)}function readStateManifest(e){let t=manifestPath(e);if(!existsSync(t))return{status:`absent`};let S;try{S=readFileSync(t,`utf-8`)}catch(e){throw new StateManifestError({kind:`corrupt`,path:t,message:`Failed to read state manifest at ${t}: ${e instanceof Error?e.message:String(e)}`})}let w;try{w=JSON.parse(S)}catch(e){throw new StateManifestError({kind:`corrupt`,path:t,message:`State manifest at ${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`})}if(!isStateManifestRecord(w))throw new StateManifestError({kind:`corrupt`,path:t,message:`State manifest at ${t} has invalid shape (missing or wrong-typed required fields)`});return{status:`present`,manifest:w}}function writeStateManifest(e,t){let S=manifestPath(e);mkdirSync(dirname(S),{recursive:!0}),writeFileSync(S,JSON.stringify(t,null,2),{encoding:`utf-8`,mode:384})}function assertCompatibleStateManifest(e){let t=getLogger(`state-manifest`),S=e.currentStateSchemaVersion??1,w=e.currentRuntimeVersion??RUNTIME_VERSION,E=e.currentProtocolVersion??1,D=(e.now??(()=>new Date))().toISOString(),O=manifestPath(e.lockDir),k=readStateManifest(e.lockDir);if(k.status===`present`){let j=k.manifest;if(!isCompatibleSchema(j.stateSchemaVersion,S))throw new StateManifestError({kind:`incompatible`,path:O,message:`State manifest at ${O} declares stateSchemaVersion=${j.stateSchemaVersion} but this binary supports ${S}. Refusing to boot — on-the-fly migration is out of scope. (Manifest written by runtime ${j.createdBy.runtimeVersion}, protocol ${j.createdBy.protocolVersion}.)`});try{let t={...j,lastWriteBy:{runtimeVersion:w,protocolVersion:E,at:D}};return writeStateManifest(e.lockDir,t),t}catch(e){return t.warn({err:e},`[state-manifest] failed to update lastWriteBy — proceeding`),j}}if(detectProjectShape({lockDir:e.lockDir,shadowRepoDir:e.shadowRepoDir})===`fresh`){let k={stateSchemaVersion:S,createdAt:D,createdBy:{runtimeVersion:w,protocolVersion:E}};return writeStateManifest(e.lockDir,k),t.info({path:O,stateSchemaVersion:S},`[state-manifest] fresh project — wrote manifest`),k}let j={stateSchemaVersion:0,createdAt:D,createdBy:{runtimeVersion:w,protocolVersion:E,adoptedAt:D}};return writeStateManifest(e.lockDir,j),t.warn({path:O,runtimeVersion:w},`[state-manifest] adopting pre-versioned project — wrote schema-0 manifest. Future binaries with STATE_SCHEMA_VERSION>=2 may refuse if they cannot read schema-0 state.`),j}function extractStderr(e){return e.git?.toString()??e.message??``}function matchesAny(e,t){return t.some(t=>t.test(e))}const AUTH_PATTERNS=[/\b(401|403)\b/,/authentication failed/i,/authorization failed/i,/invalid credentials/i,/credential helper/i,/bad credentials/i,/token.*expired/i,/expired.*token/i,/permission denied.*\(publickey\)/i,/host key verification failed/i,/fatal:.*repository.*not found/i],SCOPE_MISMATCH_PATTERNS=[/insufficient scopes/i,/missing.*scope/i,/required scope/i],NON_FAST_FORWARD_PATTERNS=[/non-fast-forward/i,/rejected.*non-fast-forward/i,/would overwrite.*commits/i,/\[rejected\]/,/fetch first/i,/updates were rejected/i],PROTECTED_BRANCH_PATTERNS=[/protected branch/i,/refusing to allow/i,/at least \d+ approving review/i,/required status check/i,/branch policy/i,/GH001/i,/GH002/i,/GH003/i,/GH004/i,/push declined due to repository rule/i,/cannot push to a protected branch/i],MERGE_CONFLICT_PATTERNS=[/\bmerge conflict\b/i,/automatic merge failed/i,/CONFLICT \(/,/\bconflict\b.*\bmerge\b/i,/(?:^|\n)CONFLICTS:\s/i],LFS_PATTERNS=[/lfs.*quota/i,/exceeded.*bandwidth/i,/lfs storage/i],LARGE_FILE_PATTERNS=[/file.*too large/i,/exceeded.*file size/i,/push file size limit/i],PRE_RECEIVE_PATTERNS=[/pre-receive hook/i,/remote:.*rejected/i,/hook declined/i],SECRET_DETECTED_PATTERNS=[/secret.*detected/i,/push.*secret/i,/secret scanning/i,/leaking.*credentials/i,/token.*detected/i],INDEX_LOCK_PATTERNS=[/\.git\/index\.lock/i,/another git process/i,/unable to create.*\.lock/i],DIRTY_TREE_PATTERNS=[/dirty.*working tree/i,/working tree.*not clean/i,/untracked.*files.*would be overwritten/i,/local changes.*would be overwritten/i,/uncommitted changes/i,/changes.*not staged/i,/please.*commit.*changes/i,/please.*stash/i,/commit your changes or stash/i],DISK_FULL_PATTERNS=[/no space left on device/i,/disk quota exceeded/i,/ENOSPC/],NETWORK_PATTERNS=[/could not resolve host/i,/name.*resolution/i,/connection.*timed out/i,/operation timed out/i,/connection refused/i,/network.*unreachable/i,/ssl.*handshake/i,/unable to connect/i,/getaddrinfo/i,/econnrefused/i,/enotfound/i,/etimedout/i,/ehostunreach/i],HTTP_5XX_PATTERNS=[/\bHTTP[\s/]*5[0-9]{2}\b/i,/\bstatus:?\s*5[0-9]{2}\b/i,/\berror\s*5[0-9]{2}\b/i,/\bresponse.*?\b5[0-9]{2}\b/i],HTTP_429_PATTERNS=[/\bHTTP[\s/]*429\b/i,/\bstatus:?\s*429\b/i,/\berror\s*429\b/i,/rate.?limit/i,/too many requests/i];function classifyGitError(e){let t=e instanceof Error?e:Error(String(e)),S=extractStderr(t),w=`${t.message}\n${S}`.toLowerCase();return matchesAny(w,INDEX_LOCK_PATTERNS)?{class:`local`,subclass:`index-lock`,retryable:!0,message:`Git index locked by another process`,rawStderr:S}:matchesAny(w,DIRTY_TREE_PATTERNS)?{class:`local`,subclass:`dirty-tree`,retryable:!0,message:`Working tree has uncommitted changes`,rawStderr:S}:matchesAny(w,DISK_FULL_PATTERNS)?{class:`local`,subclass:`disk-full`,retryable:!0,message:`Disk full or quota exceeded`,rawStderr:S}:matchesAny(w,SCOPE_MISMATCH_PATTERNS)?{class:`auth`,subclass:`scope-mismatch`,retryable:!1,message:`GitHub token missing required scopes`,rawStderr:S}:matchesAny(w,AUTH_PATTERNS)?/\b401\b/.test(w)||/token.*expired/i.test(w)?{class:`auth`,subclass:`401`,retryable:!1,message:`Authentication failed — token may be expired`,rawStderr:S}:/\b403\b/.test(w)?matchesAny(w,PROTECTED_BRANCH_PATTERNS)?{class:`semantic`,subclass:`protected-branch`,retryable:!1,message:`Push rejected — branch is protected`,rawStderr:S}:{class:`auth`,subclass:`403`,retryable:!1,message:`Access denied (403)`,rawStderr:S}:{class:`auth`,subclass:`unknown-auth`,retryable:!1,message:`Authentication failed`,rawStderr:S}:matchesAny(w,PROTECTED_BRANCH_PATTERNS)?{class:`semantic`,subclass:`protected-branch`,retryable:!1,message:`Push rejected — branch is protected`,rawStderr:S}:matchesAny(w,NON_FAST_FORWARD_PATTERNS)?{class:`semantic`,subclass:`non-fast-forward`,retryable:!1,message:`Push rejected — remote has diverged (non-fast-forward)`,rawStderr:S}:matchesAny(w,MERGE_CONFLICT_PATTERNS)?{class:`semantic`,subclass:`merge-conflict`,retryable:!1,message:`Merge conflict — manual resolution required`,rawStderr:S}:matchesAny(w,LFS_PATTERNS)?{class:`structural`,subclass:`lfs-quota`,retryable:!1,message:`Git LFS quota exceeded`,rawStderr:S}:matchesAny(w,LARGE_FILE_PATTERNS)?{class:`structural`,subclass:`large-file`,retryable:!1,message:`File exceeds size limit`,rawStderr:S}:matchesAny(w,SECRET_DETECTED_PATTERNS)?{class:`structural`,subclass:`secret-detected`,retryable:!1,message:`Push blocked — secret or credential detected in content`,rawStderr:S}:matchesAny(w,PRE_RECEIVE_PATTERNS)?{class:`structural`,subclass:`pre-receive-hook`,retryable:!1,message:`Push rejected by server pre-receive hook`,rawStderr:S}:matchesAny(w,HTTP_429_PATTERNS)?{class:`network`,subclass:`429`,retryable:!0,message:`Rate limited — too many requests`,rawStderr:S}:matchesAny(w,HTTP_5XX_PATTERNS)?{class:`network`,subclass:`5xx`,retryable:!0,message:`Server error (5xx)`,rawStderr:S}:matchesAny(w,NETWORK_PATTERNS)?/timed? out/i.test(w)?{class:`network`,subclass:`timeout`,retryable:!0,message:`Connection timed out`,rawStderr:S}:/refused/i.test(w)||/econnrefused/i.test(w)?{class:`network`,subclass:`connection-refused`,retryable:!0,message:`Connection refused`,rawStderr:S}:/resolve.*host/i.test(w)||/enotfound/i.test(w)||/getaddrinfo/i.test(w)?{class:`network`,subclass:`dns`,retryable:!0,message:`DNS resolution failed`,rawStderr:S}:{class:`network`,subclass:`unknown-network`,retryable:!0,message:`Network error`,rawStderr:S}:{class:`local`,subclass:`unknown-local`,retryable:!0,message:t.message||`Unknown git error`,rawStderr:S}}function computeRemainingMs(e,t,S=Date.now()){if(!e)return 0;let w=new Date(e).getTime();if(Number.isNaN(w))return 0;let E=w+t*1e3;return Math.max(0,E-S)}const log=getLogger(`sync-engine`),SHA_HEX_40=/^[0-9a-f]{40}$/i;function jitteredMs(e){let t=e*1e3,S=t*.15*(2*Math.random()-1);return Math.round(t+S)}function isUnbornHead(e){try{let t=join(e,`.git`,`HEAD`);if(!existsSync(t))return!1;let S=readFileSync(t,`utf-8`).trim(),w=/^ref:\s+(refs\/.+)$/.exec(S);if(!w)return!1;let E=w[1];if(existsSync(join(e,`.git`,E)))return!1;let D=join(e,`.git`,`packed-refs`);if(existsSync(D)){let e=readFileSync(D,`utf-8`);if(RegExp(`^[0-9a-f]+\\s+${E}$`,`m`).test(e))return!1}return!0}catch{return!1}}function backoffMs(e){return e>=8?3600*1e3:e>=5?900*1e3:e>=3?300*1e3:0}var SyncEngine=class{state=`dormant`;projectDir;contentDir;contentFilter;contentRoot;pullIntervalSeconds;pushIntervalSeconds;syncEnabled;credentialArgs;cc1Broadcaster;onStateChange;setBatchInProgress;onAutoDisable;pullTimer=null;pushTimer=null;stateSaveTimer=null;lastSyncUtc=null;lastFetchUtc=null;lastPushedSha=null;consecutiveFailures=0;ahead=0;behind=0;conflictCount=0;error;pausedReason;currentBranch=`main`;pullInFlight=!1;pushInFlight=!1;hasRemote=!1;identityUnresolved=!1;statePath;conflictStore;constructor(e){this.projectDir=e.projectDir,this.contentDir=e.contentDir,this.contentFilter=e.contentFilter,this.contentRoot=e.contentRoot??``,this.pullIntervalSeconds=e.pullIntervalSeconds??30,this.pushIntervalSeconds=e.pushIntervalSeconds??60,this.syncEnabled=e.syncEnabled,this.credentialArgs=e.credentialArgs??[],this.cc1Broadcaster=e.cc1Broadcaster??null,this.onStateChange=e.onStateChange,this.setBatchInProgress=e.setBatchInProgress,this.onAutoDisable=e.onAutoDisable,this.statePath=resolve(getLocalDir(this.projectDir),`sync-state.json`),this.conflictStore=new ConflictStore(this.projectDir,this.currentBranch)}async start(){if(this.state!==`dormant`)return;this.loadState();let e=!1;try{let t=createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs});e=(await t.git.raw(`remote`,`-v`)).trim().length>0,this.hasRemote=e;try{let e=(await t.git.raw(`rev-parse`,`--abbrev-ref`,`HEAD`)).trim();e&&e!==`HEAD`&&(this.currentBranch=e,this.conflictStore.setBranch(e))}catch{}}catch(e){log.warn({err:e},`[sync] remote detection failed`)}if(this.syncEnabled!==!0){e&&this.transitionTo(`disabled`),log.info({hasRemote:e,syncEnabled:this.syncEnabled},`[sync] sync not enabled — staying inactive`);return}if(!e){log.info({},`[sync] no remote detected — staying dormant`);return}this.transitionTo(`idle`);let t=resolveGitDir(this.projectDir),S=t?join(t,`MERGE_HEAD`):null,w=S!==null&&existsSync(S);if(this.conflictCount>0&&!w)log.warn({count:this.conflictCount},`[sync] persisted conflicts but no MERGE_HEAD — clearing stale state`),this.conflictStore.clear(),this.conflictCount=0;else if(this.conflictCount>0&&w)try{let e=(await createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs}).git.raw([`diff`,`--name-only`,`--diff-filter=U`])).trim(),t=new Set(e?e.split(`
3290
- `).map(e=>e.trim()).filter(Boolean):[]),S=this.conflictCount;for(let e of this.conflictStore.list())t.has(e.file)||this.conflictStore.removeConflict(e.file);this.conflictCount=this.conflictStore.count(),this.conflictCount<S&&log.info({cleared:S-this.conflictCount,remaining:this.conflictCount},`[sync] reconciled conflicts.json against git unmerged index`)}catch(e){log.warn({err:e},`[sync] failed to reconcile conflicts with git index`)}if(w&&this.conflictCount===0){log.warn({},`[sync] stale MERGE_HEAD detected with no tracked conflicts — aborting merge`);try{await createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs}).git.raw([`merge`,`--abort`])}catch(e){log.warn({err:e},`[sync] git merge --abort for stale MERGE_HEAD failed`)}}if(this.conflictCount>0){this.transitionTo(`conflict`),log.warn({count:this.conflictCount},`[sync] restarted with active conflicts — sync paused`);return}let E=computeRemainingMs(this.lastFetchUtc,this.pullIntervalSeconds),D=computeRemainingMs(this.lastSyncUtc,this.pushIntervalSeconds);this.schedulePull(E>0?E:void 0),this.schedulePush(D>0?D:void 0),log.info({branch:this.currentBranch,pullDelayMs:E,pushDelayMs:D},`[sync] started`)}stop(){this.pullTimer!==null&&(clearTimeout(this.pullTimer),this.pullTimer=null),this.pushTimer!==null&&(clearTimeout(this.pushTimer),this.pushTimer=null),this.stateSaveTimer!==null&&(clearTimeout(this.stateSaveTimer),this.stateSaveTimer=null),this.state!==`dormant`&&this.transitionTo(`dormant`)}async destroy(){this.stop(),this.saveStateNow()}async setEnabled(e){if(this.syncEnabled!==e){if(this.syncEnabled=e,!e){this.pullTimer!==null&&(clearTimeout(this.pullTimer),this.pullTimer=null),this.pushTimer!==null&&(clearTimeout(this.pushTimer),this.pushTimer=null);let e=3e4,t=Date.now();for(;this.pullInFlight||this.pushInFlight;){if(Date.now()-t>3e4){log.warn({pullInFlight:this.pullInFlight,pushInFlight:this.pushInFlight},`[sync] setEnabled(false): timed out waiting for in-flight cycle to drain`);break}await setTimeout$1(50)}this.pausedReason=void 0,this.error=void 0,this.transitionTo(this.hasRemote?`disabled`:`dormant`),this.saveStateNow();return}if(this.hasRemote=await this.probeRemote(),this.pausedReason=void 0,this.error=void 0,this.consecutiveFailures=0,!this.hasRemote){this.transitionTo(`dormant`),this.saveStateNow();return}this.transitionTo(`idle`),this.schedulePull(0),this.schedulePush(),this.saveStateNow()}}async trigger(e=`sync`){this.consecutiveFailures=0,(this.pausedReason===`dirty-tree`||this.pausedReason===`external-changes-pending`)&&(this.pausedReason=void 0,this.error=void 0),this.state===`dormant`||this.state===`disabled`||this.state===`conflict`||this.state===`auth-error`?log.warn({op:e,state:this.state,syncEnabled:this.syncEnabled,hasRemote:this.hasRemote,pausedReason:this.pausedReason,conflictCount:this.conflictCount},`[sync] trigger(${e}) ignored — state=${this.state}`):log.info({op:e,state:this.state},`[sync] trigger(${e}) running`),e===`push`?await this.runPushCycle():(e===`pull`||await this.runPushCycle(),await this.runPullCycle())}getStatus(){return{state:this.state,lastSyncUtc:this.lastSyncUtc,lastFetchUtc:this.lastFetchUtc,lastPushedSha:this.lastPushedSha,ahead:this.ahead,behind:this.behind,consecutiveFailures:this.consecutiveFailures,conflictCount:this.conflictCount,hasRemote:this.hasRemote,syncEnabled:this.syncEnabled===!0,identityUnresolved:this.identityUnresolved,remote:this.hasRemote?readSyncRemoteInfo(this.projectDir):null,error:this.error,pausedReason:this.pausedReason}}async refreshIdentity(){let e=await resolveGitIdentity(this.projectDir)===null;this.identityUnresolved!==e&&(this.identityUnresolved=e,this.cc1Broadcaster?.signal(`sync-status`))}async refreshRemote(){this.hasRemote||await this.probeRemote()&&(this.hasRemote=!0,log.info({syncEnabled:this.syncEnabled},`[sync] remote detected post-boot — re-evaluating state`),this.syncEnabled===!0?(this.transitionTo(`idle`),this.schedulePull(0),this.schedulePush()):this.transitionTo(`disabled`))}async probeRemote(){if(!existsSync(join(this.projectDir,`.git`)))return!1;try{return(await createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs}).git.raw(`remote`,`-v`)).trim().length>0}catch(e){return log.warn({err:e},`[sync] remote detection failed`),!1}}getConflicts(){return this.conflictStore.list()}async reconcileConflictsFromGit(){if(this.conflictCount===0)return;let e=this.conflictCount,t=resolveGitDir(this.projectDir),S=t?join(t,`MERGE_HEAD`):null;if(!(S!==null&&existsSync(S)))log.info({cleared:e},`[sync] external resolve detected (no MERGE_HEAD) — clearing tracked conflicts`),this.conflictStore.clear(),this.conflictCount=0;else try{let t=(await createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs}).git.raw([`diff`,`--name-only`,`--diff-filter=U`])).trim(),S=new Set(t?t.split(`
3356
+ `).map(e=>e.trim()).filter(Boolean):[]),S=this.conflictCount;for(let e of this.conflictStore.list())t.has(e.file)||this.conflictStore.removeConflict(e.file);this.conflictCount=this.conflictStore.count(),this.conflictCount<S&&log.info({cleared:S-this.conflictCount,remaining:this.conflictCount},`[sync] reconciled conflicts.json against git unmerged index`)}catch(e){log.warn({err:e},`[sync] failed to reconcile conflicts with git index`)}if(w&&this.conflictCount===0){log.warn({},`[sync] stale MERGE_HEAD detected with no tracked conflicts — aborting merge`);try{await createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs}).git.raw([`merge`,`--abort`])}catch(e){log.warn({err:e},`[sync] git merge --abort for stale MERGE_HEAD failed`)}}if(this.conflictCount>0){this.transitionTo(`conflict`),log.warn({count:this.conflictCount},`[sync] restarted with active conflicts — sync paused`);return}let E=computeRemainingMs(this.lastFetchUtc,this.pullIntervalSeconds),D=computeRemainingMs(this.lastSyncUtc,this.pushIntervalSeconds);this.schedulePull(E>0?E:void 0),this.schedulePush(D>0?D:void 0),log.info({branch:this.currentBranch,pullDelayMs:E,pushDelayMs:D},`[sync] started`)}stop(){this.pullTimer!==null&&(clearTimeout(this.pullTimer),this.pullTimer=null),this.pushTimer!==null&&(clearTimeout(this.pushTimer),this.pushTimer=null),this.stateSaveTimer!==null&&(clearTimeout(this.stateSaveTimer),this.stateSaveTimer=null),this.state!==`dormant`&&this.transitionTo(`dormant`)}async destroy(){this.stop(),this.saveStateNow()}async setEnabled(e){if(this.syncEnabled!==e){if(this.syncEnabled=e,!e){this.pullTimer!==null&&(clearTimeout(this.pullTimer),this.pullTimer=null),this.pushTimer!==null&&(clearTimeout(this.pushTimer),this.pushTimer=null);let e=3e4,t=Date.now();for(;this.pullInFlight||this.pushInFlight;){if(Date.now()-t>3e4){log.warn({pullInFlight:this.pullInFlight,pushInFlight:this.pushInFlight},`[sync] setEnabled(false): timed out waiting for in-flight cycle to drain`);break}await setTimeout$1(50)}this.pausedReason=void 0,this.error=void 0,this.transitionTo(this.hasRemote?`disabled`:`dormant`),this.saveStateNow();return}if(this.hasRemote=await this.probeRemote(),this.pausedReason=void 0,this.error=void 0,this.consecutiveFailures=0,!this.hasRemote){this.transitionTo(`dormant`),this.saveStateNow();return}this.transitionTo(`idle`),this.schedulePull(0),this.schedulePush(),this.saveStateNow()}}async trigger(e=`sync`){this.consecutiveFailures=0,(this.pausedReason===`dirty-tree`||this.pausedReason===`external-changes-pending`||this.pausedReason===`non-content-merge-failure`)&&(this.pausedReason=void 0,this.error=void 0),this.state===`dormant`||this.state===`disabled`||this.state===`conflict`||this.state===`auth-error`?log.warn({op:e,state:this.state,syncEnabled:this.syncEnabled,hasRemote:this.hasRemote,pausedReason:this.pausedReason,conflictCount:this.conflictCount},`[sync] trigger(${e}) ignored — state=${this.state}`):log.info({op:e,state:this.state},`[sync] trigger(${e}) running`),e===`push`?await this.runPushCycle():(e===`pull`||await this.runPushCycle(),await this.runPullCycle())}getStatus(){return{state:this.state,lastSyncUtc:this.lastSyncUtc,lastFetchUtc:this.lastFetchUtc,lastPushedSha:this.lastPushedSha,ahead:this.ahead,behind:this.behind,consecutiveFailures:this.consecutiveFailures,conflictCount:this.conflictCount,hasRemote:this.hasRemote,syncEnabled:this.syncEnabled===!0,identityUnresolved:this.identityUnresolved,remote:this.hasRemote?readSyncRemoteInfo(this.projectDir):null,error:this.error,pausedReason:this.pausedReason}}async refreshIdentity(){let e=await resolveGitIdentity(this.projectDir)===null;this.identityUnresolved!==e&&(this.identityUnresolved=e,this.cc1Broadcaster?.signal(`sync-status`))}async refreshRemote(){this.hasRemote||await this.probeRemote()&&(this.hasRemote=!0,log.info({syncEnabled:this.syncEnabled},`[sync] remote detected post-boot — re-evaluating state`),this.syncEnabled===!0?(this.transitionTo(`idle`),this.schedulePull(0),this.schedulePush()):this.transitionTo(`disabled`))}async probeRemote(){if(!existsSync(join(this.projectDir,`.git`)))return!1;try{return(await createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs}).git.raw(`remote`,`-v`)).trim().length>0}catch(e){return log.warn({err:e},`[sync] remote detection failed`),!1}}getConflicts(){return this.conflictStore.list()}async reconcileConflictsFromGit(){if(this.conflictCount===0)return;let e=this.conflictCount,t=resolveGitDir(this.projectDir),S=t?join(t,`MERGE_HEAD`):null;if(!(S!==null&&existsSync(S)))log.info({cleared:e},`[sync] external resolve detected (no MERGE_HEAD) — clearing tracked conflicts`),this.conflictStore.clear(),this.conflictCount=0;else try{let t=(await createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs}).git.raw([`diff`,`--name-only`,`--diff-filter=U`])).trim(),S=new Set(t?t.split(`
3291
3357
  `).map(e=>e.trim()).filter(Boolean):[]);for(let e of this.conflictStore.list())S.has(e.file)||this.conflictStore.removeConflict(e.file);this.conflictCount=this.conflictStore.count(),this.conflictCount<e&&log.info({cleared:e-this.conflictCount,remaining:this.conflictCount},`[sync] external resolve detected (mid-merge) — pruned resolved entries`)}catch(e){log.warn({err:e},`[sync] reconcileConflictsFromGit: git probe failed`);return}this.conflictCount!==e&&(this.conflictCount===0&&this.state===`conflict`?(this.transitionTo(`idle`),this.pausedReason=void 0,this.schedulePull(),this.schedulePush()):this.cc1Broadcaster?.signal(`sync-status`),this.scheduleSaveState())}async resolveConflict(e,t,S){this.setBatchInProgress?.(!0);try{try{await this.conflictStore.resolveConflict(e,t,S)}catch(e){throw this.conflictCount=this.conflictStore.count(),this.scheduleSaveState(),e}this.conflictCount=this.conflictStore.count(),this.conflictCount===0&&this.state===`conflict`?(this.transitionTo(`idle`),this.pausedReason=void 0,this.schedulePull(),this.schedulePush()):this.cc1Broadcaster?.signal(`sync-status`),this.scheduleSaveState()}finally{this.setBatchInProgress?.(!1)}}updateCurrentBranch(e){e===null?this.state!==`dormant`&&this.state!==`disabled`&&(this.transitionTo(`disabled`),this.pausedReason=`detached-head`,this.scheduleSaveState()):this.currentBranch!==e&&(this.currentBranch=e,this.conflictStore.setBranch(e),this.state===`disabled`&&this.pausedReason===`detached-head`&&(this.pausedReason=void 0,this.transitionTo(`idle`),this.schedulePull(),this.schedulePush()))}schedulePull(e){this.pullTimer!==null&&clearTimeout(this.pullTimer);let t=e??this.effectivePullDelayMs();this.pullTimer=setTimeout(()=>{this.pullTimer=null,this.runPullCycle().catch(e=>{log.error({err:e},`[sync] pull cycle uncaught error`)})},t)}schedulePush(e){this.pushTimer!==null&&clearTimeout(this.pushTimer);let t=e??jitteredMs(this.pushIntervalSeconds);this.pushTimer=setTimeout(()=>{this.pushTimer=null,this.runPushCycle().catch(e=>{log.error({err:e},`[sync] push cycle uncaught error`)})},t)}effectivePullDelayMs(){let e=this.consecutiveFailures,t=backoffMs(e);return t>0?t:jitteredMs(this.pullIntervalSeconds)}async runPullCycle(){if(!this.pullInFlight&&!(this.state===`dormant`||this.state===`disabled`)){if(this.state===`conflict`){this.schedulePull();return}if(isUnbornHead(this.projectDir)){this.schedulePull();return}this.pullInFlight=!0;try{await this.doPullCycle()}finally{this.pullInFlight=!1,this.schedulePull()}}}async doPullCycle(){let e=createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs}),t;try{let S=(await e.git.raw(`rev-parse`,`--abbrev-ref`,`HEAD`)).trim();if(!S||S===`HEAD`){this.transitionTo(`disabled`),this.pausedReason=`detached-head`,log.warn({},`[sync] detached HEAD — pausing sync`);return}t=S,this.currentBranch=t}catch(e){this.handleError(classifyGitError(e instanceof Error?e:Error(String(e))));return}this.transitionTo(`fetching`);try{await e.git.fetch(`origin`),this.lastFetchUtc=new Date().toISOString(),this.consecutiveFailures=0,this.error=void 0}catch(e){let t=classifyGitError(e instanceof Error?e:Error(String(e)));this.handleError(t);return}try{let t=await e.git.status();this.ahead=t.ahead,this.behind=t.behind}catch{}if(this.behind>0&&this.conflictCount===0){this.transitionTo(`pulling`),this.setBatchInProgress?.(!0);try{await this.commitDirtyContentFilesToHead(e);let S=await this.prepareForMerge(e,t);if(!S.proceed)return;try{await e.git.merge([`origin/${t}`]),this.lastSyncUtc=new Date().toISOString(),this.behind=0,this.transitionTo(`idle`)}finally{S.needsStashPop&&await this.popPreMergeStash(e)}}catch(e){let t=classifyGitError(e instanceof Error?e:Error(String(e)));t.class===`semantic`&&t.subclass===`merge-conflict`?await this.handleMergeConflict():this.handleError(t);return}finally{this.setBatchInProgress?.(!1)}}else this.transitionTo(`idle`);this.scheduleSaveState()}async runPushCycle(){if(!this.pushInFlight&&!(this.state===`dormant`||this.state===`disabled`)&&!(this.state===`conflict`||this.state===`auth-error`)){if(isUnbornHead(this.projectDir)){this.schedulePush();return}this.pushInFlight=!0;try{await this.doPushCycle(1)}finally{this.pushInFlight=!1,this.schedulePush()}}}async doPushCycle(e=0){let t=this.gatherContentFilesSync(),S=join(tmpdir(),`ok-sync-idx-${process.pid}-${Date.now()}.idx`),w=null;this.transitionTo(`pushing`);try{await withParentLock(async()=>{let e=createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs,gitIndexFile:S});if(isUnbornHead(this.projectDir)){log.info({},`[sync] repo has no commits yet — skipping push cycle`),this.transitionTo(`idle`);return}let E;try{E=(await e.git.revparse(`HEAD`)).trim()}catch(e){let t=e instanceof Error?e.message:String(e),S=`${t}\n${e.git?.toString()??t}`;if(/unknown revision or path not in the working tree/i.test(S)||/ambiguous argument 'HEAD'/i.test(S)||/does not have any commits yet/i.test(S)){log.info({},`[sync] repo has no commits yet — skipping push cycle`),this.transitionTo(`idle`);return}this.handleError(classifyGitError(e instanceof Error?e:Error(String(e))));return}await e.git.raw([`read-tree`,E]);let D=new Set;try{let t=(await e.git.raw([`ls-tree`,`-r`,`--name-only`,E])).trim();for(let e of t?t.split(`
3292
3358
  `):[]){let t=e.trim();if(!t)continue;let S=join(this.projectDir,t),w=relative(this.contentDir,S);!w.startsWith(`..`)&&!this.contentFilter.isExcluded(w)&&D.add(t)}}catch{}if(t.length>0){let S=100;for(let S=0;S<t.length;S+=100){let w=t.slice(S,S+100).map(e=>e.projectRelPath);await e.git.raw([`add`,`--`,...w])}}let O=new Set(t.map(e=>e.projectRelPath)),k=[...D].filter(e=>!O.has(e));k.length>0&&await e.git.raw([`rm`,`--cached`,`--`,...k]);let j=(await e.git.raw([`write-tree`])).trim(),F=``;try{F=(await e.git.raw([`rev-parse`,`${E}^{tree}`])).trim()}catch{}if(F&&F===j){let S=null;try{S=(await e.git.raw([`rev-parse`,`origin/${this.currentBranch}`])).trim()}catch{}if(S===E){log.info({contentFileCount:t.length,headSha:E},`[sync] push cycle: nothing to commit (tree unchanged, origin matches HEAD)`),this.lastPushedSha=E,this.lastSyncUtc=new Date().toISOString(),this.transitionTo(`idle`);return}log.info({headSha:E,upstreamSha:S},`[sync] push cycle: tree unchanged but local ahead of origin — pushing existing commits`);let D=!1;try{await e.git.raw([`rev-parse`,`--abbrev-ref`,`${this.currentBranch}@{u}`]),D=!0}catch{}D?await e.git.raw([`push`,`origin`,this.currentBranch]):await e.git.raw([`push`,`--set-upstream`,`origin`,this.currentBranch]),w=E;return}let L=[];try{let S=(await e.git.raw([`diff-tree`,`--name-only`,`-r`,E,j])).trim();if(S){let e=new Map(t.map(e=>[e.projectRelPath,e.contentRelPath]));for(let t of S.split(`
3293
3359
  `)){let S=t.trim();if(!S)continue;let w=e.get(S)??relative(this.contentDir,join(this.projectDir,S));w&&!w.startsWith(`..`)&&L.push(w)}}}catch{L=t.map(e=>e.contentRelPath)}let B=this.buildCommitMessage(L),H=await resolveGitIdentity(this.projectDir),q=H===null;this.identityUnresolved!==q&&(this.identityUnresolved=q,this.cc1Broadcaster?.signal(`sync-status`));let J=H?.name??`Open Knowledge`,Y=H?.email??`sync@open-knowledge.local`;e.git.env({GIT_AUTHOR_NAME:J,GIT_AUTHOR_EMAIL:Y,GIT_COMMITTER_NAME:J,GIT_COMMITTER_EMAIL:Y});let ee=(await e.git.raw([`commit-tree`,j,`-p`,E,`-m`,B])).trim();if(!ee||!SHA_HEX_40.test(ee)){log.warn({raw:ee},`[sync] commit-tree returned invalid SHA — aborting push`),this.transitionTo(`idle`);return}if(await e.git.raw([`update-ref`,`refs/heads/${this.currentBranch}`,ee,E]),t.length>0){let e=createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs}),S=100;for(let S=0;S<t.length;S+=100){let w=t.slice(S,S+100).map(e=>e.projectRelPath);try{await e.git.raw([`reset`,`HEAD`,`--`,...w])}catch{}}}let te=!1;try{await e.git.raw([`rev-parse`,`--abbrev-ref`,`${this.currentBranch}@{u}`]),te=!0}catch{}te?await e.git.raw([`push`,`origin`,this.currentBranch]):await e.git.raw([`push`,`--set-upstream`,`origin`,this.currentBranch]),w=ee}),w&&(this.lastPushedSha=w,this.lastSyncUtc=new Date().toISOString(),this.ahead=0,this.state===`pushing`&&this.transitionTo(`idle`),this.pausedReason===`dirty-tree`&&(this.pausedReason=void 0,this.error=void 0,this.schedulePull(0)))}catch(t){let S=classifyGitError(t instanceof Error?t:Error(String(t)));if(S.class===`semantic`&&S.subclass===`non-fast-forward`){if(e>0){log.info({},`[sync] push rejected (non-fast-forward) — fetching, merging, retrying`);let e=createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs});this.setBatchInProgress?.(!0);try{await e.git.fetch(`origin`),await this.commitDirtyContentFilesToHead(e);let t=await this.prepareForMerge(e,this.currentBranch);if(!t.proceed){this.setBatchInProgress?.(!1);return}try{await e.git.merge([`origin/${this.currentBranch}`])}finally{t.needsStashPop&&await this.popPreMergeStash(e)}}catch(e){let t=classifyGitError(e instanceof Error?e:Error(String(e)));t.class===`semantic`&&t.subclass===`merge-conflict`?await this.handleMergeConflict():this.handleError(t),this.scheduleSaveState();return}finally{this.setBatchInProgress?.(!1)}await this.doPushCycle(0);return}log.info({},`[sync] push still rejected after retry — waiting for next pull cycle`),this.consecutiveFailures++,this.state===`pushing`&&this.transitionTo(`idle`)}else this.handleError(S)}finally{try{unlinkSync(S)}catch{}}this.scheduleSaveState()}async commitDirtyContentFilesToHead(e){if((await e.git.status()).files.length===0)return null;let t=(await e.git.revparse(`HEAD`)).trim(),S=this.gatherContentFilesSync();if(S.length===0)return null;let w=join(tmpdir(),`ok-sync-retry-idx-${process.pid}-${Date.now()}.idx`),E=createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs,gitIndexFile:w});try{await E.git.raw([`read-tree`,t]);let w=100;for(let e=0;e<S.length;e+=100){let t=S.slice(e,e+100).map(e=>e.projectRelPath);await E.git.raw([`add`,`--`,...t])}let D=(await E.git.raw([`write-tree`])).trim();if(D===(await E.git.raw([`rev-parse`,`${t}^{tree}`])).trim())return null;let O=await resolveGitIdentity(this.projectDir),k=O?.name??`Open Knowledge`,j=O?.email??`sync@open-knowledge.local`;E.git.env({GIT_AUTHOR_NAME:k,GIT_AUTHOR_EMAIL:j,GIT_COMMITTER_NAME:k,GIT_COMMITTER_EMAIL:j});let F=(await E.git.raw([`commit-tree`,D,`-p`,t,`-m`,`Auto-save: interim before merge`])).trim();if(!F||!SHA_HEX_40.test(F))return log.warn({raw:F},`[sync] commit-tree returned invalid SHA in commitDirtyContentFilesToHead`),null;await e.git.raw([`update-ref`,`refs/heads/${this.currentBranch}`,F,t]);for(let t=0;t<S.length;t+=100){let w=S.slice(t,t+100).map(e=>e.projectRelPath);try{await e.git.raw([`reset`,`HEAD`,`--`,...w])}catch{}}return F}finally{try{unlinkSync(w)}catch{}}}async prepareForMerge(e,t){let S=``;try{S=(await e.git.raw([`diff-index`,`--name-only`,`HEAD`])).trim()}catch(e){return log.warn({err:e,branch:t},`[sync] diff-index failed — allowing merge attempt`),{proceed:!0,needsStashPop:!1}}if(!S)return{proceed:!0,needsStashPop:!1};let w=S.split(`
3294
3360
  `).map(e=>e.trim()).filter(Boolean);if(w.length===0)return{proceed:!0,needsStashPop:!1};let E=``;try{E=(await e.git.raw([`diff`,`--name-only`,`HEAD..origin/${t}`])).trim()}catch(e){return log.warn({err:e,branch:t},`[sync] merge-path diff failed — allowing merge attempt`),{proceed:!0,needsStashPop:!1}}let D=new Set(E.split(`
3295
3361
  `).map(e=>e.trim()).filter(Boolean)),O=w.filter(e=>D.has(e));if(O.length>0)return this.error=`Sync paused — your local changes to ${O.slice(0,3).join(`, `)}${O.length>3?`, +${O.length-3} more`:``} conflict with incoming changes. Commit, stash, or discard them before syncing.`,this.pausedReason=`external-changes-pending`,this.consecutiveFailures=0,this.transitionTo(`idle`),this.scheduleSaveState(),log.warn({files:O},`[sync] paused — dirty paths overlap incoming merge`),{proceed:!1,needsStashPop:!1};let k=`ok-sync: pre-merge stash @ ${new Date().toISOString()}`;try{await e.git.raw([`stash`,`push`,`-m`,k])}catch(e){return log.warn({err:e},`[sync] stash push failed — proceeding without stash`),{proceed:!0,needsStashPop:!1}}return{proceed:!0,needsStashPop:!0}}async popPreMergeStash(e){try{await e.git.raw([`stash`,`pop`])}catch(e){log.warn({err:e},`[sync] stash pop failed — stash remains on stack`)}}gatherContentFilesSync(){let e=[],t=S=>{let w;try{w=readdirSync(S,{withFileTypes:!0})}catch{return}for(let E of w){let w=join(S,E.name);if(E.isDirectory()){if(E.name===`node_modules`||E.name===`.git`||E.name.startsWith(`.`)&&E.name!==`.ok`)continue;t(w)}else if(E.isFile()){let t=relative(this.contentDir,w);if(!t.startsWith(`..`)&&!this.contentFilter.isExcluded(t)){let S=relative(this.projectDir,w);e.push({contentRelPath:t,projectRelPath:S})}}}};return existsSync(this.contentDir)&&t(this.contentDir),e}buildCommitMessage(e){return e.length===0?`Auto-save: changes saved`:e.length<=3?`Auto-save: Updated ${e.join(`, `)}`:`Auto-save: ${e.length} files changed`}async handleMergeConflict(){let e=createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs}),t=[];try{let S=(await e.git.raw([`diff`,`--name-only`,`--diff-filter=U`])).trim();t=S?S.split(`
3296
- `).map(e=>e.trim()).filter(Boolean):[]}catch(t){log.error({err:t},`[sync] failed to list conflicted files — aborting merge to avoid committing unresolved state`);try{await e.git.raw([`merge`,`--abort`])}catch(e){log.warn({err:e},`[sync] git merge --abort failed during cleanup`)}this.error=`Failed to detect conflict files — merge aborted`,this.pausedReason=void 0,this.transitionTo(`idle`);return}let S=[],w=[];for(let e of t){let t=join(this.projectDir,e),E=relative(this.contentDir,t);!E.startsWith(`..`)&&!this.contentFilter.isExcluded(E)?S.push(e):w.push(e)}for(let t of w)try{await e.git.raw([`checkout`,`--theirs`,`--`,t]),await e.git.raw([`add`,`--`,t]),log.info({file:t},`[sync] auto-resolved non-content conflict with theirs`)}catch(e){log.warn({err:e,file:t},`[sync] auto-resolve failed — escalating to content conflict`),S.push(t)}if(S.length>0){for(let e of S)this.conflictStore.addConflict({file:e,detectedAt:new Date().toISOString()});this.conflictCount=this.conflictStore.count(),this.pullTimer!==null&&(clearTimeout(this.pullTimer),this.pullTimer=null),this.pushTimer!==null&&(clearTimeout(this.pushTimer),this.pushTimer=null),this.transitionTo(`conflict`),log.warn({files:S},`[sync] content conflicts — sync paused until resolved`)}else try{await e.git.raw([`commit`,`--no-edit`]),this.lastSyncUtc=new Date().toISOString(),this.behind=0,this.transitionTo(`idle`),log.info({},`[sync] all conflicts auto-resolved — merge committed`)}catch(t){log.warn({err:t},`[sync] failed to commit after auto-resolving conflicts — aborting merge`);try{await e.git.raw([`merge`,`--abort`])}catch(e){log.warn({err:e},`[sync] git merge --abort failed during cleanup`)}this.transitionTo(`idle`)}}async abortMerge(){let e=createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs});try{await e.git.raw([`merge`,`--abort`]),log.info({},`[sync] merge aborted`)}catch(e){log.warn({err:e},`[sync] git merge --abort failed — conflicts.json still cleared`)}this.conflictStore.clear(),this.conflictCount=0,this.transitionTo(`idle`),this.scheduleSaveState()}handleError(e){this.error=e.message,log.warn({class:e.class,subclass:e.subclass,retryable:e.retryable,rawStderr:e.rawStderr},`[sync-error] ${e.message}`),e.class===`auth`?(this.transitionTo(`auth-error`),this.pausedReason=`auth-error`):e.class===`semantic`&&e.subclass===`protected-branch`?(this.syncEnabled=!1,this.transitionTo(`disabled`),this.pausedReason=`protected-branch`,this.onAutoDisable?.(`protected-branch`)):e.class===`local`&&e.subclass===`dirty-tree`?(this.consecutiveFailures++,this.transitionTo(`idle`),this.pausedReason=`dirty-tree`,this.schedulePush(0)):e.retryable?(this.consecutiveFailures++,this.transitionTo(`offline`)):(this.consecutiveFailures++,this.transitionTo(`idle`))}transitionTo(e){if(this.state===e)return;let t=this.state;this.state=e,log.info({from:t,to:e},`[sync] state: ${t} → ${e}`),this.onStateChange?.(e),this.cc1Broadcaster?.signal(`sync-status`)}scheduleSaveState(){this.stateSaveTimer===null&&(this.stateSaveTimer=setTimeout(()=>{this.stateSaveTimer=null,this.saveStateNow()},5e3))}saveStateNow(){try{let e={version:1,lastSyncUtc:this.lastSyncUtc,lastFetchUtc:this.lastFetchUtc,lastPushedSha:this.lastPushedSha,consecutiveFailures:this.consecutiveFailures,pausedReason:this.pausedReason,pausedSinceUtc:this.pausedReason?new Date().toISOString():void 0,inflightConflicts:this.conflictStore.list().map(e=>e.file)};writeFileSync(this.statePath,JSON.stringify(e,null,2),`utf-8`)}catch(e){log.warn({err:e},`[sync] failed to persist sync state`)}}loadState(){if(existsSync(this.statePath))try{let e=readFileSync(this.statePath,`utf-8`),t=JSON.parse(e);if(t.version!==1)return;this.lastSyncUtc=t.lastSyncUtc??null,this.lastFetchUtc=t.lastFetchUtc??null,this.lastPushedSha=t.lastPushedSha??null,this.consecutiveFailures=t.consecutiveFailures??0,this.pausedReason=t.pausedReason;let S=t.inflightConflicts??[];if(S.length>0){for(let e of S)this.conflictStore.list().some(t=>t.file===e)||this.conflictStore.addConflict({file:e,detectedAt:new Date().toISOString()});this.conflictCount=this.conflictStore.count()}}catch(e){log.warn({err:e},`[sync] failed to load sync state`)}}};const MOUNT_ID_PATTERN=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function createSyncHandshakeSpanExtension(){return{async afterLoadDocument({documentName:e,requestParameters:t}){if(isSystemDoc(e)||isConfigDoc(e))return;let S=t?.get(`mountId`)??void 0,w={"doc.name":e};S!==void 0&&MOUNT_ID_PATTERN.test(S)&&(w[`mount.id`]=S);try{withSpanSync(`sync.handshake`,{attributes:w},()=>{})}catch(e){console.warn(`[sync-handshake-span] emission failed:`,e instanceof Error?e:String(e))}}}}const TAG_VALUE_RE=createTagInTextRegex();function createEmptyState(){return{byTag:new Map,byDoc:new Map,byDocLiteral:new Map}}function stripInlineCodeSpans(e){return e.replace(/`[^`]*`/g,``)}function extractInlineTagsFromBody(e){let t=e.replaceAll(`\r
3362
+ `).map(e=>e.trim()).filter(Boolean):[]}catch(t){log.error({err:t},`[sync] failed to list conflicted files — aborting merge to avoid committing unresolved state`);try{await e.git.raw([`merge`,`--abort`])}catch(e){log.warn({err:e},`[sync] git merge --abort failed during cleanup`)}this.error=`Failed to detect conflict files — merge aborted`,this.pausedReason=void 0,this.transitionTo(`idle`);return}let S=[],w=[];for(let e of t){let t=join(this.projectDir,e),E=relative(this.contentDir,t);!E.startsWith(`..`)&&isSupportedDocFile(E)&&!this.contentFilter.isExcluded(E)?S.push(e):w.push(e)}let E=[];for(let t of w)try{await e.git.raw([`checkout`,`--theirs`,`--`,t]),await e.git.raw([`add`,`--`,t]),log.info({file:t},`[sync] auto-resolved non-content conflict with theirs`)}catch(e){log.warn({err:e,file:t},`[sync] non-content auto-resolve failed — will abort merge and pause sync`),E.push({file:t,err:e})}if(E.length>0){let t=E.map(e=>e.file);try{await e.git.raw([`merge`,`--abort`])}catch(e){log.warn({err:e,files:t},`[sync] git merge --abort failed during non-content cleanup`)}this.error=`Sync paused — couldn't auto-resolve ${t.slice(0,3).join(`, `)}${t.length>3?`, +${t.length-3} more`:``}. Resolve in your terminal (e.g. \`git rm <file>\` or \`git checkout --ours/--theirs <file> && git add <file>\`), then retry sync.`,this.pausedReason=`non-content-merge-failure`,this.consecutiveFailures=0,this.transitionTo(`idle`),this.scheduleSaveState(),log.warn({files:t},`[sync] non-content auto-resolve failed — merge aborted, sync paused`);return}if(S.length>0){for(let e of S)this.conflictStore.addConflict({file:e,detectedAt:new Date().toISOString()});this.conflictCount=this.conflictStore.count(),this.pullTimer!==null&&(clearTimeout(this.pullTimer),this.pullTimer=null),this.pushTimer!==null&&(clearTimeout(this.pushTimer),this.pushTimer=null),this.transitionTo(`conflict`),log.warn({files:S},`[sync] content conflicts — sync paused until resolved`)}else try{await e.git.raw([`commit`,`--no-edit`]),this.lastSyncUtc=new Date().toISOString(),this.behind=0,this.transitionTo(`idle`),log.info({},`[sync] all conflicts auto-resolved — merge committed`)}catch(t){log.warn({err:t},`[sync] failed to commit after auto-resolving conflicts — aborting merge`);try{await e.git.raw([`merge`,`--abort`])}catch(e){log.warn({err:e},`[sync] git merge --abort failed during cleanup`)}this.transitionTo(`idle`)}}async abortMerge(){let e=createGitInstance(this.projectDir,{credentialArgs:this.credentialArgs});try{await e.git.raw([`merge`,`--abort`]),log.info({},`[sync] merge aborted`)}catch(e){log.warn({err:e},`[sync] git merge --abort failed — conflicts.json still cleared`)}this.conflictStore.clear(),this.conflictCount=0,this.transitionTo(`idle`),this.scheduleSaveState()}handleError(e){this.error=e.message,log.warn({class:e.class,subclass:e.subclass,retryable:e.retryable,rawStderr:e.rawStderr},`[sync-error] ${e.message}`),e.class===`auth`?(this.transitionTo(`auth-error`),this.pausedReason=`auth-error`):e.class===`semantic`&&e.subclass===`protected-branch`?(this.syncEnabled=!1,this.transitionTo(`disabled`),this.pausedReason=`protected-branch`,this.onAutoDisable?.(`protected-branch`)):e.class===`local`&&e.subclass===`dirty-tree`?(this.consecutiveFailures++,this.transitionTo(`idle`),this.pausedReason=`dirty-tree`,this.schedulePush(0)):e.retryable?(this.consecutiveFailures++,this.transitionTo(`offline`)):(this.consecutiveFailures++,this.transitionTo(`idle`))}transitionTo(e){if(this.state===e)return;let t=this.state;this.state=e,log.info({from:t,to:e},`[sync] state: ${t} → ${e}`),this.onStateChange?.(e),this.cc1Broadcaster?.signal(`sync-status`)}scheduleSaveState(){this.stateSaveTimer===null&&(this.stateSaveTimer=setTimeout(()=>{this.stateSaveTimer=null,this.saveStateNow()},5e3))}saveStateNow(){try{let e={version:1,lastSyncUtc:this.lastSyncUtc,lastFetchUtc:this.lastFetchUtc,lastPushedSha:this.lastPushedSha,consecutiveFailures:this.consecutiveFailures,pausedReason:this.pausedReason,pausedSinceUtc:this.pausedReason?new Date().toISOString():void 0,inflightConflicts:this.conflictStore.list().map(e=>e.file)};writeFileSync(this.statePath,JSON.stringify(e,null,2),`utf-8`)}catch(e){log.warn({err:e},`[sync] failed to persist sync state`)}}loadState(){if(existsSync(this.statePath))try{let e=readFileSync(this.statePath,`utf-8`),t=JSON.parse(e);if(t.version!==1)return;this.lastSyncUtc=t.lastSyncUtc??null,this.lastFetchUtc=t.lastFetchUtc??null,this.lastPushedSha=t.lastPushedSha??null,this.consecutiveFailures=t.consecutiveFailures??0,this.pausedReason=t.pausedReason;let S=t.inflightConflicts??[];if(S.length>0){for(let e of S)this.conflictStore.list().some(t=>t.file===e)||this.conflictStore.addConflict({file:e,detectedAt:new Date().toISOString()});this.conflictCount=this.conflictStore.count()}}catch(e){log.warn({err:e},`[sync] failed to load sync state`)}}};const MOUNT_ID_PATTERN=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function createSyncHandshakeSpanExtension(){return{async afterLoadDocument({documentName:e,requestParameters:t}){if(isSystemDoc(e)||isConfigDoc(e))return;let S=t?.get(`mountId`)??void 0,w={"doc.name":e};S!==void 0&&MOUNT_ID_PATTERN.test(S)&&(w[`mount.id`]=S);try{withSpanSync(`sync.handshake`,{attributes:w},()=>{})}catch(e){console.warn(`[sync-handshake-span] emission failed:`,e instanceof Error?e:String(e))}}}}const TAG_VALUE_RE=createTagInTextRegex();function createEmptyState(){return{byTag:new Map,byDoc:new Map,byDocLiteral:new Map}}function stripInlineCodeSpans(e){return e.replace(/`[^`]*`/g,``)}function extractInlineTagsFromBody(e){let t=e.replaceAll(`\r
3297
3363
  `,`
3298
3364
  `).split(`
3299
- `),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 e=Rt?.pruneFileIndexNowExcluded()??0,t=Rt?.pruneFolderIndexNowExcluded()??0,S=e+t;S>0&&getLogger(`server-factory`).info({pruned:S,prunedFiles:e,prunedFolders:t},`[content-filter] pruned now-excluded entries from file indexes`)}catch(e){getLogger(`server-factory`).warn({err:e},`[content-filter] file index prune 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())}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 e=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 t of CONFIG_DOC_NAMES){let S=e.get(t);if(S)try{ee.info({docName:t,path:S},`[config-file-watcher] starting`);let e=await startConfigFileWatcher(S,e=>{let S=_e.documents.get(t);ee.info({docName:t,hasDocument:S!==void 0,contentLength:e.length},`[config-file-watcher] file changed`);let w=applyExternalConfigChange(S??null,t,e,ge.configPersistenceCtx);if(ee.info({docName:t,outcome:w},`[config-file-watcher] applyExternalConfigChange outcome`),t===`__config__/project`||t===`__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:t,cleanup:e}),ee.info({docName:t,path:S},`[config-file-watcher] started`)}catch(e){ee.warn({err:e,docName:t,path:S},`[config-file-watcher] failed to start for ${t}`),Wt.push(`config-file-watcher:${t}`)}}try{let e=resolve(t,`.okignore`),w=resolve(S,`.gitignore`),E=ee;E.info({okignorePath:e,gitignorePath:w},`[ignore-watcher] starting multi-path watcher for .okignore + .gitignore`);let D=await startMultiPathConfigFileWatcher([e,w],(t,w)=>{(async()=>{if(t===e)try{let e=applyExternalConfigChange(_e.documents.get(`__config__/okignore`)??null,CONFIG_DOC_NAME_OKIGNORE,w,ge.configPersistenceCtx);E.info({docName:CONFIG_DOC_NAME_OKIGNORE,outcome:e},`[ignore-watcher] applyExternalConfigChange outcome`)}catch(e){E.error({err:e,changedPath:relative(S,t)},`[ignore-watcher] applyExternalConfigChange failed; rebuild proceeds independently`)}let D=await ue.rebuildIgnorePatterns();if(D.ok)E.info({changedPath:relative(S,t),patternCount:D.patternCount,nestedFileCount:D.nestedFileCount,durationMs:D.durationMs},`[ignore-watcher] rebuild succeeded — broadcasting files channel`),ye?.signal(`files`);else{let e=relative(S,t)||`.`;E.warn({changedPath:e,error:D.error.message},`[ignore-watcher] rebuild failed — emitting config-ignore-nested-error`),ye?.emitConfigIgnoreNestedError(e,D.error.message)}})().catch(e=>{E.error({err:e,changedPath:relative(S,t)||`.`},`[ignore-watcher] handler threw`)})});rt.push({docName:`__ignore-files__`,cleanup:D}),E.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 w=resolveGitDir(S),E=w?readBranchFromHead(w)??`main`:`main`;switchReconciledBaseScope(E),de.switchBranch(E);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(`
3365
+ `),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 e=Rt?.pruneFileIndexNowExcluded()??0,t=Rt?.pruneFolderIndexNowExcluded()??0,S=e+t;S>0&&getLogger(`server-factory`).info({pruned:S,prunedFiles:e,prunedFolders:t},`[content-filter] pruned now-excluded entries from file indexes`)}catch(e){getLogger(`server-factory`).warn({err:e},`[content-filter] file index prune 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 e=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 t of CONFIG_DOC_NAMES){let S=e.get(t);if(S)try{ee.info({docName:t,path:S},`[config-file-watcher] starting`);let e=await startConfigFileWatcher(S,e=>{let S=_e.documents.get(t);ee.info({docName:t,hasDocument:S!==void 0,contentLength:e.length},`[config-file-watcher] file changed`);let w=applyExternalConfigChange(S??null,t,e,ge.configPersistenceCtx);if(ee.info({docName:t,outcome:w},`[config-file-watcher] applyExternalConfigChange outcome`),t===`__config__/project`||t===`__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:t,cleanup:e}),ee.info({docName:t,path:S},`[config-file-watcher] started`)}catch(e){ee.warn({err:e,docName:t,path:S},`[config-file-watcher] failed to start for ${t}`),Wt.push(`config-file-watcher:${t}`)}}try{let e=resolve(t,`.okignore`),w=resolve(S,`.gitignore`),E=ee;E.info({okignorePath:e,gitignorePath:w},`[ignore-watcher] starting multi-path watcher for .okignore + .gitignore`);let D=await startMultiPathConfigFileWatcher([e,w],(t,w)=>{(async()=>{if(t===e)try{let e=applyExternalConfigChange(_e.documents.get(`__config__/okignore`)??null,CONFIG_DOC_NAME_OKIGNORE,w,ge.configPersistenceCtx);E.info({docName:CONFIG_DOC_NAME_OKIGNORE,outcome:e},`[ignore-watcher] applyExternalConfigChange outcome`)}catch(e){E.error({err:e,changedPath:relative(S,t)},`[ignore-watcher] applyExternalConfigChange failed; rebuild proceeds independently`)}let D=await ue.rebuildIgnorePatterns();if(D.ok)E.info({changedPath:relative(S,t),patternCount:D.patternCount,nestedFileCount:D.nestedFileCount,durationMs:D.durationMs},`[ignore-watcher] rebuild succeeded — broadcasting files channel`),ye?.signal(`files`);else{let e=relative(S,t)||`.`;E.warn({changedPath:e,error:D.error.message},`[ignore-watcher] rebuild failed — emitting config-ignore-nested-error`),ye?.emitConfigIgnoreNestedError(e,D.error.message)}})().catch(e=>{E.error({err:e,changedPath:relative(S,t)||`.`},`[ignore-watcher] handler threw`)})});rt.push({docName:`__ignore-files__`,cleanup:D}),E.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 w=resolveGitDir(S),E=w?readBranchFromHead(w)??`main`:`main`;switchReconciledBaseScope(E),de.switchBranch(E);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(`
3300
3366
  `))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`)}let D=J?.[0]??`open-knowledge`,O=[`-c`,`credential.helper=!${J&&J.length>1?J.join(` `):D} auth git-credential`];try{Bt=new SyncEngine({projectDir:S,contentDir:t,contentFilter:ue,contentRoot:H,syncEnabled:te(),credentialArgs:O,cc1Broadcaster:ye,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}`)},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-BniQ3qki-DjKtnzVr.mjs`).then(e=>e.a),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}),{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(`
3301
- `).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 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}}export{assertNeverDiskEvent as $,rewriteWikiLinksForDocumentRename as $n,ALL_EDITOR_IDS as $r,initShadowRepo as $t,MissingOkConfigError as A,object$1 as Ai,readSkillInstallStateSnapshot as An,tracedWriteFile as Ar,createTestLogger as At,STARTER_PACK_IDS as B,releaseUiLock as Bn,writeTargetVersion as Br,formatContributors as Bt,LOG_MD_TEMPLATE as C,ZodNumber$1 as Ci,parseHocuspocusAuthToken as Cn,tracedMkdir as Cr,createLiveDerivedIndexExtension as Ct,MCP_SERVER_NAME as D,literal as Di,readAllTargets as Dn,tracedRmSync as Dr,createServer$1 as Dt,MCP_CONNECTION_ID_HEADER as E,boolean$1 as Ei,planSeed as En,tracedRenameSync as Er,createPersistenceExtension as Et,SERVICE_WRITER as F,require_dist$2 as Fi,reconcile as Fn,validateCloneInputs as Fr,evictStaleTrackerEntries as Ft,StateManifestError as G,resolveCursorBinaryDefault as Gn,isInitializedNotification as Gr,getLogger as Gt,STATE_MANIFEST_FILENAME as H,resetMetrics as Hn,McpServer as Hr,gcCheckpointRefs as Ht,SKILL_INSTALL_EVENTS_FILE_REL as I,recordContributor as In,validateSkillZip as Ir,extractWikiLinksFromMarkdown as It,acquireUiLock as J,resolvePack as Jn,readConfigSafely as Jr,getTracer as Jt,TagIndex as K,resolveCursorSpawnInvocation as Kn,isJSONRPCRequest as Kr,getMeter as Kt,STARTER_FOLDERS as L,recordSkillInstallEvent as Ln,withSpan as Lr,findEnclosingGitRoot as Lt,PinoLogger as M,url as Mi,readTargetRecordedAt as Mn,updateLastKnownHash as Mr,detectProjectShape as Mt,ProjectGitInitError as N,_coercedNumber as Ni,readTargetVersion as Nn,updateUiLockPort as Nr,ensureProjectGit as Nt,MISSING_OK_CONFIG_MESSAGE as O,looseObject as Oi,readBranchFromHead as On,tracedRmdirSync as Or,createServerObserverExtension as Ot,ROLLBACK_ORIGIN as P,NEVER as Pi,readUiLock as Pn,validateAgentId as Pr,errorResponse as Pt,assertCompatibleStateManifest as Q,rewriteMarkdownLinksForDocumentRename as Qn,MalformedGitPointerError as Qr,incrementServerObserverFire as Qt,STARTER_FOLDER_FRONTMATTER_FILENAME as R,registerAllTools as Rn,withSpanSync as Rr,findEnclosingProjectRoot as Rt,LIVE_DERIVED_INDEX_DEBOUNCE_MS as S,locateIssue as Si,parseAuthRejectionWire as Sn,tracedLinkSync as Sr,createExternalChangeHandler as St,MAX_AGENT_SESSIONS as T,array as Ti,pathToDocName as Tn,tracedRename as Tr,createOsProbe as Tt,SeedPrerequisiteError as U,resolveBundledSkillDir as Un,JSONRPCMessageSchema as Ur,getCurrentMcpLogger as Ut,STARTER_TEMPLATES as V,removeLastKnownHash as Vn,writeTracker as Vr,formatContributorsFrom as Vt,SeedRootDirError as W,resolveContentDir as Wn,LATEST_PROTOCOL_VERSION as Wr,getLocalDir as Wt,applyExternalChange as X,restoreContributors as Xn,writeConfigPatch as Xr,handleSpawnCursor as Xt,applyAgentMarkdownWrite as Y,resolvePackageVersion as Yn,resolveConfigPath as Yr,handleCollabSocketError as Yt,applySeed as Z,restoreLifecycleFromConflictsJson as Zn,GitDirAccessError as Zr,incrementCollabSocketFilteredError as Zt,GIT_UPSTREAM_WRITER as _,isBranchNotFoundGitError as _i,listStarterPacks as _n,startWatcher as _r,contributorCount as _t,AgentPresenceBroadcaster as a,EDITOR_LABELS as ai,isAllowedWorkspaceHostHeader as an,safeContentPath as ar,buildSkillZip as at,HocuspocusAuthTokenSchema as b,LOCAL_DIR as bi,mountMcpAndApi as bn,toBroadcasterKey as br,createContentFilter as bt,BacklinkIndex as c,ORPHAN_MODES as ci,isKnownPackId as cn,sanitizeClientName as cr,classifyEvents as ct,CURSOR_BUNDLE_PATHS_BY_PLATFORM as d,SPAWN_ERROR_LOG as di,isPathWithinDir as dn,seedBasenameIndex as dr,coercePackId as dt,ASSET_EXTENSIONS as ei,initTelemetry as en,runAuthReposSubprocess as er,attachIdleShutdown as et,ConfigSchema as f,SYSTEM_DOC_NAME as fi,isProjectRoot as fn,setActiveSpanAttributes as fr,commitUpstreamImport as ft,FILE_WATCHER_ORIGIN as g,iconFromClientName as gi,listRescueCheckpoints as gn,splitMarkdownBlocks as gr,contentHash as gt,FILE_SYSTEM_WRITER as h,humanFormat as hi,lastKnownHash as hn,spawnDetached as hr,containsConflictMarkers as ht,AgentFocusBroadcaster as i,DEFAULT_SIGTERM_GRACE_MS as ii,isAllowedApiOrigin as in,runWithMcpLogger as ir,buildInstructions as it,OBSERVER_SYNC_ORIGIN as j,string$2 as ji,readStateManifest as jn,tracedWriteFileSync as jr,detectClaudeDesktopPresence as jt,McpLogger as k,number$1 as ki,readServerPackageVersion as kn,tracedUnlinkSync as kr,createStreamingErrorWriter as kt,CC1Broadcaster as l,ProblemDetailsSchema as li,isLoopbackAddress as ln,saveInMemoryCheckpoint as lr,classifyFsPath as lt,DEFAULT_PACK_ID as m,defaultScheduler as mi,isSystemDoc as mn,shutdownTelemetry as mr,commitWipFromTree as mt,AGENT_ID_RE as n,DEFAULT_GITHUB_OAUTH_CLIENT_ID as ni,installTestLoggers as nn,runCloneSubprocess as nr,buildAndOpenSkill as nt,AgentSessionCapacityError as o,EXECUTABLE_BLOCKLIST_EXTENSIONS as oi,isConfigDoc as on,safeSubdir as or,buildStarterFolderFrontmatterYaml as ot,DEFAULT_CHECKPOINT_RETENTION as p,colorFromSeed as pi,isSelfWrite as pn,shadowGit as pr,commitWip as pt,UiLockCollisionError as q,resolveLockDir as qn,isJSONRPCResultResponse as qr,getMetrics as qt,AGENT_WRITE_ORIGIN as r,DEFAULT_SERVER_HOST as ri,installUserSkill as rn,runDeviceFlowSubprocess as rr,buildExecResult as rt,AgentSessionManager as s,INLINE_RENDERABLE_EXTENSIONS as si,isHocuspocusAuthRejectionReason as sn,safetyCheckpoint as sr,buildWipTree as st,AGENT_ID_MAX_LEN as t,CC1_CONTRACT_VERSION as ti,installPrettyZodErrors as tn,runAuthStatusSubprocess as tr,bootServer as tt,CONFLICT_MARKER_RE as u,SKILL_STATE_TARGETS as ui,isPairedWriteOrigin as un,saveVersion as ur,clearContributors as ut,HOCUSPOCUS_AUTH_REJECTION_REASONS as v,isOrphanMode as vi,loadPrincipal as vn,streamingProblemEvent as vr,createApiExtension as vt,MANAGED_RENAME_ORIGIN as w,any$1 as wi,parseKeepaliveConnectionId as wn,tracedMkdirSync as wr,createMcpHttpHandler as wt,INSTALLED_AGENTS_SCHEMES as x,OK_PROJECT_MARKER as xi,normalizeFsPath as xn,tracedAppendFileSync as xr,createContentFilterAsync as xt,HocuspocusAuthRejection as y,CONFIG_SCHEMA_MAJOR_PATH as yi,loggerFactory as yn,swapContributors as yr,createAssetServeMiddleware as yt,STARTER_PACKS as z,registerWrite as zn,writeStateManifest as zr,formatAuthRejectionWire as zt};
3302
- //# sourceMappingURL=dist-Di8PRueX.mjs.map
3367
+ `).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 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}}export{assertNeverDiskEvent as $,rewriteWikiLinksForDocumentRename as $n,GitDirAccessError as $r,initShadowRepo as $t,MissingOkConfigError as A,looseObject as Ai,readSkillInstallStateSnapshot as An,tracedWriteFile as Ar,createTestLogger as At,STARTER_PACK_IDS as B,releaseUiLock as Bn,writeTargetVersion as Br,formatContributors as Bt,LOG_MD_TEMPLATE as C,OK_PROJECT_MARKER as Ci,parseHocuspocusAuthToken as Cn,tracedMkdir as Cr,createLiveDerivedIndexExtension as Ct,MCP_SERVER_NAME as D,array as Di,readAllTargets as Dn,tracedRmSync as Dr,createServer$1 as Dt,MCP_CONNECTION_ID_HEADER as E,any$1 as Ei,planSeed as En,tracedRenameSync as Er,createPersistenceExtension as Et,SERVICE_WRITER as F,_coercedNumber as Fi,reconcile as Fn,validateCloneInputs as Fr,evictStaleTrackerEntries as Ft,StateManifestError as G,resolveCursorBinaryDefault as Gn,isInitializedNotification as Gr,getLogger as Gt,STATE_MANIFEST_FILENAME as H,resetMetrics as Hn,McpServer as Hr,gcCheckpointRefs as Ht,SKILL_INSTALL_EVENTS_FILE_REL as I,NEVER as Ii,recordContributor as In,validateSkillZip as Ir,extractWikiLinksFromMarkdown as It,acquireUiLock as J,resolvePack as Jn,atomicWriteFileSync as Jr,getTracer as Jt,TagIndex as K,resolveCursorSpawnInvocation as Kn,isJSONRPCRequest as Kr,getMeter as Kt,STARTER_FOLDERS as L,require_dist$2 as Li,recordSkillInstallEvent as Ln,withSpan as Lr,findEnclosingGitRoot as Lt,PinoLogger as M,object$1 as Mi,readTargetRecordedAt as Mn,updateLastKnownHash as Mr,detectProjectShape as Mt,ProjectGitInitError as N,string$2 as Ni,readTargetVersion as Nn,updateUiLockPort as Nr,ensureProjectGit as Nt,MISSING_OK_CONFIG_MESSAGE as O,boolean$1 as Oi,readBranchFromHead as On,tracedRmdirSync as Or,createServerObserverExtension as Ot,ROLLBACK_ORIGIN as P,url as Pi,readUiLock as Pn,validateAgentId as Pr,errorResponse as Pt,assertCompatibleStateManifest as Q,rewriteMarkdownLinksForDocumentRename as Qn,writeConfigPatch as Qr,incrementServerObserverFire as Qt,STARTER_FOLDER_FRONTMATTER_FILENAME as R,registerAllTools as Rn,withSpanSync as Rr,findEnclosingProjectRoot as Rt,LIVE_DERIVED_INDEX_DEBOUNCE_MS as S,LOCAL_DIR as Si,parseAuthRejectionWire as Sn,tracedLinkSync as Sr,createExternalChangeHandler as St,MAX_AGENT_SESSIONS as T,ZodNumber$1 as Ti,pathToDocName as Tn,tracedRename as Tr,createOsProbe as Tt,SeedPrerequisiteError as U,resolveBundledSkillDir as Un,JSONRPCMessageSchema as Ur,getCurrentMcpLogger as Ut,STARTER_TEMPLATES as V,removeLastKnownHash as Vn,writeTracker as Vr,formatContributorsFrom as Vt,SeedRootDirError as W,resolveContentDir as Wn,LATEST_PROTOCOL_VERSION as Wr,getLocalDir as Wt,applyExternalChange as X,restoreContributors as Xn,resolveConfigPath as Xr,handleSpawnCursor as Xt,applyAgentMarkdownWrite as Y,resolvePackageVersion as Yn,readConfigSafely as Yr,handleCollabSocketError as Yt,applySeed as Z,restoreLifecycleFromConflictsJson as Zn,withFileLockSync as Zr,incrementCollabSocketFilteredError as Zt,GIT_UPSTREAM_WRITER as _,humanFormat as _i,listStarterPacks as _n,startWatcher as _r,contributorCount as _t,AgentPresenceBroadcaster as a,DEFAULT_SERVER_HOST as ai,isAllowedWorkspaceHostHeader as an,safeContentPath as ar,buildSkillZip as at,HocuspocusAuthTokenSchema as b,isOrphanMode as bi,mountMcpAndApi as bn,toBroadcasterKey as br,createContentFilter as bt,BacklinkIndex as c,EXECUTABLE_BLOCKLIST_EXTENSIONS as ci,isKnownPackId as cn,sanitizeClientName as cr,classifyEvents as ct,CURSOR_BUNDLE_PATHS_BY_PLATFORM as d,ProblemDetailsSchema as di,isPathWithinDir as dn,seedBasenameIndex as dr,coercePackId as dt,MalformedGitPointerError as ei,initTelemetry as en,runAuthReposSubprocess as er,attachIdleShutdown as et,ConfigSchema as f,SKILL_STATE_TARGETS as fi,isProjectRoot as fn,setActiveSpanAttributes as fr,commitUpstreamImport as ft,FILE_WATCHER_ORIGIN as g,defaultScheduler as gi,listRescueCheckpoints as gn,splitMarkdownBlocks as gr,contentHash as gt,FILE_SYSTEM_WRITER as h,colorFromSeed as hi,lastKnownHash as hn,spawnDetached as hr,containsConflictMarkers as ht,AgentFocusBroadcaster as i,DEFAULT_GITHUB_OAUTH_CLIENT_ID as ii,isAllowedApiOrigin as in,runWithMcpLogger as ir,buildInstructions as it,OBSERVER_SYNC_ORIGIN as j,number$1 as ji,readStateManifest as jn,tracedWriteFileSync as jr,detectClaudeDesktopPresence as jt,McpLogger as k,literal as ki,readServerPackageVersion as kn,tracedUnlinkSync as kr,createStreamingErrorWriter as kt,CC1Broadcaster as l,INLINE_RENDERABLE_EXTENSIONS as li,isLoopbackAddress as ln,saveInMemoryCheckpoint as lr,classifyFsPath as lt,DEFAULT_PACK_ID as m,SYSTEM_DOC_NAME as mi,isSystemDoc as mn,shutdownTelemetry as mr,commitWipFromTree as mt,AGENT_ID_RE as n,ASSET_EXTENSIONS as ni,installTestLoggers as nn,runCloneSubprocess as nr,buildAndOpenSkill as nt,AgentSessionCapacityError as o,DEFAULT_SIGTERM_GRACE_MS as oi,isConfigDoc as on,safeSubdir as or,buildStarterFolderFrontmatterYaml as ot,DEFAULT_CHECKPOINT_RETENTION as p,SPAWN_ERROR_LOG as pi,isSelfWrite as pn,shadowGit as pr,commitWip as pt,UiLockCollisionError as q,resolveLockDir as qn,isJSONRPCResultResponse as qr,getMetrics as qt,AGENT_WRITE_ORIGIN as r,CC1_CONTRACT_VERSION as ri,installUserSkill as rn,runDeviceFlowSubprocess as rr,buildExecResult as rt,AgentSessionManager as s,EDITOR_LABELS as si,isHocuspocusAuthRejectionReason as sn,safetyCheckpoint as sr,buildWipTree as st,AGENT_ID_MAX_LEN as t,ALL_EDITOR_IDS as ti,installPrettyZodErrors as tn,runAuthStatusSubprocess as tr,bootServer as tt,CONFLICT_MARKER_RE as u,ORPHAN_MODES as ui,isPairedWriteOrigin as un,saveVersion as ur,clearContributors as ut,HOCUSPOCUS_AUTH_REJECTION_REASONS as v,iconFromClientName as vi,loadPrincipal as vn,streamingProblemEvent as vr,createApiExtension as vt,MANAGED_RENAME_ORIGIN as w,locateIssue as wi,parseKeepaliveConnectionId as wn,tracedMkdirSync as wr,createMcpHttpHandler as wt,INSTALLED_AGENTS_SCHEMES as x,CONFIG_SCHEMA_MAJOR_PATH as xi,normalizeFsPath as xn,tracedAppendFileSync as xr,createContentFilterAsync as xt,HocuspocusAuthRejection as y,isBranchNotFoundGitError as yi,loggerFactory as yn,swapContributors as yr,createAssetServeMiddleware as yt,STARTER_PACKS as z,registerWrite as zn,writeStateManifest as zr,formatAuthRejectionWire as zt};
3368
+ //# sourceMappingURL=dist-B9kyHZC-.mjs.map