@inkeep/open-knowledge 0.4.0-beta.15 → 0.4.0-beta.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/assets/skills/open-knowledge/SKILL.md +1 -1
  2. package/dist/cli.mjs +13 -13
  3. package/dist/constants-lybG5gQZ.mjs +2 -0
  4. package/dist/dist-D0H-ut9y.mjs +1 -0
  5. package/dist/{dist-D4M20vXU.mjs → dist-dNO-Udm_.mjs} +38 -27
  6. package/dist/index.mjs +1 -1
  7. package/dist/{init-CIe9xion.mjs → init-BO8sWy5q.mjs} +15 -4
  8. package/dist/init-Dlm__eWd.mjs +1 -0
  9. package/dist/{loader-RuexJG94.mjs → loader-fktLkWoO.mjs} +2 -2
  10. package/dist/loader-od_FoBBq.mjs +1 -0
  11. package/dist/preview-ByeyxmgX.mjs +1 -0
  12. package/dist/{preview-DJNoVm8P.mjs → preview-DOErzjxx.mjs} +2 -2
  13. package/dist/public/assets/{ActivityModeContent-BS-F_q5b.js → ActivityModeContent-WITVydyg.js} +1 -1
  14. package/dist/public/assets/{DocumentContext-CKgn09Wu.js → DocumentContext-FwLaR_pb.js} +2 -2
  15. package/dist/public/assets/{OutlinePanel-B1VwD6nb.js → OutlinePanel-DktI5hU_.js} +1 -1
  16. package/dist/public/assets/{SettingsPane-Byz_-VcF.js → SettingsPane-CEKKjs0_.js} +1 -1
  17. package/dist/public/assets/{SourceEditor-CF1C1jlS.js → SourceEditor-B7V3PE4E.js} +1 -1
  18. package/dist/public/assets/{config-validation-events-BX5T6Pv4.js → config-validation-events-ZEbhIRmP.js} +1 -1
  19. package/dist/public/assets/index-C-Lx_3XB.css +1 -0
  20. package/dist/public/assets/{index-B4T9ZPge.js → index-uWtLvm2S.js} +15 -15
  21. package/dist/public/index.html +5 -5
  22. package/dist/src-Brc8KpdH.mjs +1 -0
  23. package/dist/start-H8MzEZdm.mjs +1 -0
  24. package/dist/{start-DDlnyNgo.mjs → start-jeIuSBq5.mjs} +2 -2
  25. package/package.json +1 -1
  26. package/dist/constants-Cf7m1y2Y.mjs +0 -2
  27. package/dist/dist-Bu-MwAbD.mjs +0 -1
  28. package/dist/init-CCbNydWa.mjs +0 -1
  29. package/dist/loader-CMdR0tCR.mjs +0 -1
  30. package/dist/preview-CgKJyIsb.mjs +0 -1
  31. package/dist/public/assets/index-DFiz58v4.css +0 -1
  32. package/dist/src-CKsVM5vq.mjs +0 -1
  33. package/dist/start-BNFHnj8Y.mjs +0 -1
@@ -1,6 +1,6 @@
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{$ as iconFromClientName,$t as meta$1,A as SKILL_STATE_TARGETS,At as _enum,B as createCodeFenceTracker,Bt as number,Ct as locateIssue,D as MarkdownManager,Dt as withConfigSpanSync,E as INLINE_RENDERABLE_EXTENSIONS,Et as withConfigSpan,F as applyIncrementalDiff,Ft as custom,G as detectAppliedToleranceClasses,Gt as string,H as createWorkspaceSearchCorpus,Ht as optional,I as classifyMarkdownHref,It as discriminatedUnion,J as extractFrontmatterTags,K as emptySkillState,Kt as union,L as classifyWikiLinkTarget,Lt as intersection,M as SYSTEM_DOC_NAME,N as SkillStateSchema,Nt as array,O as ORPHAN_MODES,P as applyFastDiff,Pt as boolean,Q as humanFormat,Qt as describe$1,R as colorFromSeed,Rt as literal,S as DEFAULT_DEDUP_MODE,St as applyPatchToDocument,Tt as validatePatchScopes,U as createWorkspaceSearchDocument,Ut as preprocess,V as createTagInTextRegex,Vt as object$1,W as defaultScheduler,Wt as record,X as getParseHealth,Xt as toJSONSchema,Y as getHeadingSlug,Yt as datetime,Z as getWikiLinkText,_ as CONFIG_DOC_NAMES,_t as Fragment,a as CC1BranchSwitchedPayloadSchema,an as safeParseAsync$1,at as prependFrontmatter,b as CONFIG_DOC_NAME_PROJECT_LOCAL,bt as LOCAL_DIR,c as CC1DerivedViewPayloadSchema,cn as normalizeParams,ct as resolveInternalHref,d as CC1_CHANNEL_BRANCH_SWITCHED,dn as require_dist$2,dt as stripFrontmatter,en as $ZodObject,et as isKnownConfigError,f as CC1_CHANNEL_CONFIG_IGNORE_NESTED_ERROR,ft as tagsMatchingPrefix,g as CC1_CONTRACT_VERSION,gt as PluginKey,h as CC1_CHANNEL_SERVER_INFO,ht as getSchema,i as BridgeMergeContentLossError,in as safeParse$1,it as normalizeBridge,j as SKILL_STATE_VERSION_RE,jt as _null,k as SKILL_STATE_REL,kt as ZodOptional$1,l as CC1DiskAckPayloadSchema,ln as $constructor,lt as searchWorkspaceCorpus,m as CC1_CHANNEL_DISK_ACK,mt as unwrapFrontmatterFences,n as ASSET_EXTENSIONS,nn as parse$1,nt as mediaKindForSidebarAssetExtension,o as CC1ConfigIgnoreNestedErrorPayloadSchema,on as clone,ot as readFmMap,p as CC1_CHANNEL_CONFIG_VALIDATION_REJECTED,pt as toWikiLinkSlug,q as expandTagToHierarchy,qt as unknown,r as BridgeInvariantViolationError,rn as parseAsync,rt as mergeThreeWay,s as CC1ConfigValidationRejectedPayloadSchema,sn as defineLazy,st as resolveAssetProjectPath,t as AGENT_ICON_COLORS,tn as $ZodType,tt as isOrphanMode,u as CC1ServerInfoPayloadSchema,ut as sharedExtensions,v as CONFIG_DOC_NAME_OKIGNORE,vt as CONFIG_SCHEMA_MAJOR_PATH,wt as toConfigIssue,x as CONFIG_DOC_NAME_USER,xt as addConfigSpanEvent,y as CONFIG_DOC_NAME_PROJECT,yt as ConfigSchema$1,z as createBasenameIndex,zt as looseObject}from"./dist-DfIz2LcA.mjs";import{a as metrics,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-D7DXNVql-BRVVzA6T.mjs";import{a as require_src$15,i as esm_default,r as withParentLock,t as createGitInstance}from"./git-handle-DwfYp_z--CfyPz4Dz.mjs";import{r as diffLines,t as createPatch}from"./libesm-YL3Bqolr.mjs";import{n as mimes}from"./mrmime-C2W7cgq2.mjs";import{t as b1}from"./chunk-YNYSPYQ5-DesxOVHh.mjs";import{a as c,c as h,d as m,f as p,h as x,i as b,l as i,m as v,n as C,o as d,p as u,r as a,s as f,t as $$1,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$1,l as p$1,n as N,o as f$1,r as P$1,s as h$1,t as $$2,u as v$1}from"./chunk-XHM67O4N-akBjDPaR.mjs";import{n as l$1,r as o,t as h$2}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$2}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{basename,dirname,extname,isAbsolute,join,normalize,posix,relative,resolve,sep}from"node:path";import*as I from"node:fs";import{appendFileSync,closeSync,createReadStream,createWriteStream,existsSync,linkSync,lstatSync,mkdirSync,openSync,readFile,readFileSync,readSync,readdirSync,realpathSync,renameSync,rmSync,rmdirSync,statSync,unlinkSync,writeFileSync}from"node:fs";import{homedir,hostname,platform,tmpdir}from"node:os";import{URLSearchParams as URLSearchParams$1,fileURLToPath}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{mkdir,readFile as readFile$1,readdir,realpath,rename,stat as stat$1,writeFile}from"node:fs/promises";import{performance as performance$1}from"node:perf_hooks";import{pipeline}from"node:stream/promises";import{setTimeout as setTimeout$1}from"node:timers/promises";import{Http2ServerRequest,constants}from"http2";import{lookup}from"node:dns";import{createServer}from"node:http";const WRITER_ID_RE=/^(agent-[^/]+|principal-[^/]+|file-system|git-upstream|openknowledge-service)$/;function resolveGitDirDetailed(e){let t=resolve(e,`.git`),s;try{s=statSync(t)}catch(e){let s=e.code;return s===`ENOENT`||s===`ENOTDIR`?{kind:`absent`}:{kind:`inaccessible`,gitPath:t,cause:e}}if(s.isDirectory())return{kind:`directory`,path:t};if(s.isFile()){let s;try{s=readFileSync(t,`utf-8`).trim()}catch(e){return{kind:`malformed-pointer`,gitPath:t,target:``,cause:e}}let g=s.match(/^gitdir:\s*(.+)$/);return g?{kind:`linked`,path:resolve(e,g[1])}:{kind:`malformed-pointer`,gitPath:t,target:``}}return{kind:`absent`}}function resolveGitDir(e){let t=resolveGitDirDetailed(e);return t.kind===`directory`||t.kind===`linked`?t.path:null}function resolveShadowDir(e){let t=resolveGitDirDetailed(e);switch(t.kind){case`directory`:return resolve(t.path,`ok`);case`linked`:if(!existsSync(t.path))throw new MalformedGitPointerError(resolve(e,`.git`),t.path);return resolve(t.path,`ok`);case`malformed-pointer`:throw new MalformedGitPointerError(t.gitPath,t.target,{cause:t.cause});case`inaccessible`:throw new GitDirAccessError(t.gitPath,{cause:t.cause});case`absent`:return resolve(e,`.git/ok`)}}var MalformedGitPointerError=class extends Error{gitPointerPath;resolvedTarget;constructor(e,t,s){let g=t?`references a missing or unreadable gitdir at ${t}`:`is unreadable or has no valid gitdir: pointer`;super(`\`.git\` pointer at ${e} ${g}. Run \`git worktree prune\` from the source repo and try again.`,s),this.name=`MalformedGitPointerError`,this.gitPointerPath=e,this.resolvedTarget=t}},GitDirAccessError=class extends Error{gitPath;constructor(e,t){let s=t?.cause!==void 0&&t.cause!==null&&typeof t.cause==`object`&&`code`in t.cause&&typeof t.cause.code==`string`?` (${t.cause.code})`:``;super(`Cannot access \`.git\` at ${e}${s}. Check filesystem permissions and that the volume is mounted.`,t),this.name=`GitDirAccessError`,this.gitPath=e}};function getShadowRepoPath(e){let t;try{t=resolveShadowDir(e)}catch(e){if(e instanceof MalformedGitPointerError||e instanceof GitDirAccessError)return null;throw e}return existsSync(resolve(t,`HEAD`))?t:null}function getWipRefPattern(e){return`refs/wip/${e}/`}const OK_CONTRIBUTORS_PREFIX=`ok-contributors: `;function parseContributors(e){if(!e)return[];let t=[];for(let s of e.split(`
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{$ as iconFromClientName,$t as meta$1,A as SKILL_STATE_TARGETS,At as _enum,B as createCodeFenceTracker,Bt as number,Ct as locateIssue,D as MarkdownManager,Dt as withConfigSpanSync,E as INLINE_RENDERABLE_EXTENSIONS,Et as withConfigSpan,F as applyIncrementalDiff,Ft as custom,G as detectAppliedToleranceClasses,Gt as string,H as createWorkspaceSearchCorpus,Ht as optional,I as classifyMarkdownHref,It as discriminatedUnion,J as extractFrontmatterTags,K as emptySkillState,Kt as union,L as classifyWikiLinkTarget,Lt as intersection,M as SYSTEM_DOC_NAME,N as SkillStateSchema,Nt as array,O as ORPHAN_MODES,P as applyFastDiff,Pt as boolean,Q as humanFormat,Qt as describe$1,R as colorFromSeed,Rt as literal,S as DEFAULT_DEDUP_MODE,St as applyPatchToDocument,Tt as validatePatchScopes,U as createWorkspaceSearchDocument,Ut as preprocess,V as createTagInTextRegex,Vt as object$1,W as defaultScheduler,Wt as record,X as getParseHealth,Xt as toJSONSchema,Y as getHeadingSlug,Yt as datetime,Z as getWikiLinkText,_ as CONFIG_DOC_NAMES,_t as Fragment,a as CC1BranchSwitchedPayloadSchema,an as safeParseAsync$1,at as prependFrontmatter,b as CONFIG_DOC_NAME_PROJECT_LOCAL,bt as LOCAL_DIR,c as CC1DerivedViewPayloadSchema,cn as normalizeParams,ct as resolveInternalHref,d as CC1_CHANNEL_BRANCH_SWITCHED,dn as require_dist$2,dt as stripFrontmatter,en as $ZodObject,et as isKnownConfigError,f as CC1_CHANNEL_CONFIG_IGNORE_NESTED_ERROR,ft as tagsMatchingPrefix,g as CC1_CONTRACT_VERSION,gt as PluginKey,h as CC1_CHANNEL_SERVER_INFO,ht as getSchema,i as BridgeMergeContentLossError,in as safeParse$1,it as normalizeBridge,j as SKILL_STATE_VERSION_RE,jt as _null,k as SKILL_STATE_REL,kt as ZodOptional$1,l as CC1DiskAckPayloadSchema,ln as $constructor,lt as searchWorkspaceCorpus,m as CC1_CHANNEL_DISK_ACK,mt as unwrapFrontmatterFences,n as ASSET_EXTENSIONS,nn as parse$1,nt as mediaKindForSidebarAssetExtension,o as CC1ConfigIgnoreNestedErrorPayloadSchema,on as clone,ot as readFmMap,p as CC1_CHANNEL_CONFIG_VALIDATION_REJECTED,pt as toWikiLinkSlug,q as expandTagToHierarchy,qt as unknown,r as BridgeInvariantViolationError,rn as parseAsync,rt as mergeThreeWay,s as CC1ConfigValidationRejectedPayloadSchema,sn as defineLazy,st as resolveAssetProjectPath,t as AGENT_ICON_COLORS,tn as $ZodType,tt as isOrphanMode,u as CC1ServerInfoPayloadSchema,ut as sharedExtensions,v as CONFIG_DOC_NAME_OKIGNORE,vt as CONFIG_SCHEMA_MAJOR_PATH,wt as toConfigIssue,x as CONFIG_DOC_NAME_USER,xt as addConfigSpanEvent,y as CONFIG_DOC_NAME_PROJECT,yt as ConfigSchema$1,z as createBasenameIndex,zt as looseObject}from"./dist-DfIz2LcA.mjs";import{a as metrics,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-D7DXNVql-BRVVzA6T.mjs";import{a as require_src$15,i as esm_default,r as withParentLock,t as createGitInstance}from"./git-handle-DwfYp_z--CfyPz4Dz.mjs";import{r as diffLines,t as createPatch}from"./libesm-YL3Bqolr.mjs";import{n as mimes}from"./mrmime-C2W7cgq2.mjs";import{t as b1}from"./chunk-YNYSPYQ5-DesxOVHh.mjs";import{a as c,c as h,d as m,f as p,h as x,i as b,l as i,m as v,n as C,o as d,p as u,r as a,s as f,t as $$1,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$1,l as p$1,n as N,o as f$1,r as P$1,s as h$1,t as $$2,u as v$1}from"./chunk-XHM67O4N-akBjDPaR.mjs";import{n as l$1,r as o,t as h$2}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$2}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{basename,dirname,extname,isAbsolute,join,normalize,posix,relative,resolve,sep,win32}from"node:path";import*as I from"node:fs";import{appendFileSync,closeSync,createReadStream,createWriteStream,existsSync,linkSync,lstatSync,mkdirSync,openSync,readFile,readFileSync,readSync,readdirSync,realpathSync,renameSync,rmSync,rmdirSync,statSync,unlinkSync,writeFileSync}from"node:fs";import{homedir,hostname,platform,tmpdir}from"node:os";import{URLSearchParams as URLSearchParams$1,fileURLToPath}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{performance as performance$1}from"node:perf_hooks";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";const WRITER_ID_RE=/^(agent-[^/]+|principal-[^/]+|file-system|git-upstream|openknowledge-service)$/;function resolveGitDirDetailed(e){let t=resolve(e,`.git`),s;try{s=statSync(t)}catch(e){let s=e.code;return s===`ENOENT`||s===`ENOTDIR`?{kind:`absent`}:{kind:`inaccessible`,gitPath:t,cause:e}}if(s.isDirectory())return{kind:`directory`,path:t};if(s.isFile()){let s;try{s=readFileSync(t,`utf-8`).trim()}catch(e){return{kind:`malformed-pointer`,gitPath:t,target:``,cause:e}}let g=s.match(/^gitdir:\s*(.+)$/);return g?{kind:`linked`,path:resolve(e,g[1])}:{kind:`malformed-pointer`,gitPath:t,target:``}}return{kind:`absent`}}function resolveGitDir(e){let t=resolveGitDirDetailed(e);return t.kind===`directory`||t.kind===`linked`?t.path:null}function resolveShadowDir(e){let t=resolveGitDirDetailed(e);switch(t.kind){case`directory`:return resolve(t.path,`ok`);case`linked`:if(!existsSync(t.path))throw new MalformedGitPointerError(resolve(e,`.git`),t.path);return resolve(t.path,`ok`);case`malformed-pointer`:throw new MalformedGitPointerError(t.gitPath,t.target,{cause:t.cause});case`inaccessible`:throw new GitDirAccessError(t.gitPath,{cause:t.cause});case`absent`:return resolve(e,`.git/ok`)}}var MalformedGitPointerError=class extends Error{gitPointerPath;resolvedTarget;constructor(e,t,s){let g=t?`references a missing or unreadable gitdir at ${t}`:`is unreadable or has no valid gitdir: pointer`;super(`\`.git\` pointer at ${e} ${g}. Run \`git worktree prune\` from the source repo and try again.`,s),this.name=`MalformedGitPointerError`,this.gitPointerPath=e,this.resolvedTarget=t}},GitDirAccessError=class extends Error{gitPath;constructor(e,t){let s=t?.cause!==void 0&&t.cause!==null&&typeof t.cause==`object`&&`code`in t.cause&&typeof t.cause.code==`string`?` (${t.cause.code})`:``;super(`Cannot access \`.git\` at ${e}${s}. Check filesystem permissions and that the volume is mounted.`,t),this.name=`GitDirAccessError`,this.gitPath=e}};function getShadowRepoPath(e){let t;try{t=resolveShadowDir(e)}catch(e){if(e instanceof MalformedGitPointerError||e instanceof GitDirAccessError)return null;throw e}return existsSync(resolve(t,`HEAD`))?t:null}function getWipRefPattern(e){return`refs/wip/${e}/`}const OK_CONTRIBUTORS_PREFIX=`ok-contributors: `;function parseContributors(e){if(!e)return[];let t=[];for(let s of e.split(`
2
2
  `)){let e=s.trim();if(e.startsWith(OK_CONTRIBUTORS_PREFIX))try{let s=JSON.parse(e.slice(17));if(typeof s==`object`&&s&&`id`in s&&typeof s.id==`string`&&`name`in s&&typeof s.name==`string`&&`docs`in s&&Array.isArray(s.docs)&&s.docs.every(e=>typeof e==`string`)&&(!(`colorSeed`in s)||typeof s.colorSeed==`string`)){let e=s;if(`summaries`in e){let t=e.summaries;(!Array.isArray(t)||!t.every(e=>typeof e==`string`))&&delete e.summaries}t.push(s)}}catch{}}return t}const OK_CHECKPOINT_PREFIX=`ok-checkpoint-v1: `;function parseCheckpoint(e){if(!e)return null;for(let t of e.split(`
3
- `)){let e=t.trim();if(!e.startsWith(OK_CHECKPOINT_PREFIX))continue;let s;try{s=JSON.parse(e.slice(18))}catch{return null}if(typeof s!=`object`||!s)return null;let g=s,S=g.kind,w=g.metadata;if(typeof w!=`object`||!w)return null;let E=typeof g.docName==`string`?g.docName:null,D=typeof g.size==`number`&&Number.isFinite(g.size)?g.size:null;if(S===`bridge-merge-loss`){let e=w;return Array.isArray(e.lostSubstrings)&&e.lostSubstrings.every(e=>typeof e==`string`)?{kind:`bridge-merge-loss`,docName:E,size:D,metadata:{lostSubstrings:e.lostSubstrings}}:null}if(S===`external-change-rescue`){let e=w;return typeof e.incomingDiskSha==`string`?{kind:`external-change-rescue`,docName:E,size:D,metadata:{incomingDiskSha:e.incomingDiskSha}}:null}return null}return null}function formatCheckpointBodyLine(e){let t={kind:e.kind,metadata:e.metadata};return e.docName!==null&&(t.docName=e.docName),e.size!==null&&(t.size=e.size),`${OK_CHECKPOINT_PREFIX}${JSON.stringify(t)}`}const OK_ACTOR_PREFIX=`ok-actor: `;function formatOkActor(e){let{summaries:t,...s}=e,g=t&&t.length>0?{...s,summaries:t}:s;return`${OK_ACTOR_PREFIX}${JSON.stringify(g)}`}function parseOkActorObject(e){if(e.v!==1||!(`display_name`in e)||typeof e.display_name!=`string`||!(`docs`in e)||!Array.isArray(e.docs))return null;let t=typeof e.principal==`string`?e.principal:null,s=typeof e.agent_session==`string`?e.agent_session:null,g;if(typeof e.writer_id==`string`&&e.writer_id.length>0)g=e.writer_id;else if(s)g=`agent-${s}`;else if(t)g=t;else switch(e.display_name){case`File System`:g=`file-system`;break;case`Git (upstream)`:g=`git-upstream`;break;default:g=`openknowledge-service`}let S=`summaries`in e&&Array.isArray(e.summaries)&&e.summaries.every(e=>typeof e==`string`)?e.summaries:void 0;return{v:1,writer_id:g,principal:t,agent_session:s,agent_type:typeof e.agent_type==`string`?e.agent_type:null,client_name:typeof e.client_name==`string`?e.client_name:null,client_version:typeof e.client_version==`string`?e.client_version:null,label:typeof e.label==`string`?e.label:null,display_name:e.display_name,color_seed:typeof e.color_seed==`string`?e.color_seed:`unknown`,docs:e.docs.filter(e=>typeof e==`string`),...S&&S.length>0?{summaries:S}:{}}}function parseOkActors(e){if(!e)return[];let t=[];for(let s of e.split(`
3
+ `)){let e=t.trim();if(!e.startsWith(OK_CHECKPOINT_PREFIX))continue;let s;try{s=JSON.parse(e.slice(18))}catch{return null}if(typeof s!=`object`||!s)return null;let g=s,S=g.kind,w=g.metadata;if(typeof w!=`object`||!w)return null;let E=typeof g.docName==`string`?g.docName:null,D=typeof g.size==`number`&&Number.isFinite(g.size)?g.size:null;if(S===`bridge-merge-loss`){let e=w;return Array.isArray(e.lostSubstrings)&&e.lostSubstrings.every(e=>typeof e==`string`)?{kind:`bridge-merge-loss`,docName:E,size:D,metadata:{lostSubstrings:e.lostSubstrings}}:null}if(S===`external-change-rescue`){let e=w;return typeof e.incomingDiskSha==`string`?{kind:`external-change-rescue`,docName:E,size:D,metadata:{incomingDiskSha:e.incomingDiskSha}}:null}return null}return null}function formatCheckpointBodyLine(e){let t={kind:e.kind,metadata:e.metadata};return e.docName!==null&&(t.docName=e.docName),e.size!==null&&(t.size=e.size),`${OK_CHECKPOINT_PREFIX}${JSON.stringify(t)}`}const OK_ACTOR_PREFIX=`ok-actor: `;function formatOkActor(e){let{summaries:t,previous_paths:s,...g}=e,S={...g};return t&&t.length>0&&(S.summaries=t),s&&s.length>0&&(S.previous_paths=s),`${OK_ACTOR_PREFIX}${JSON.stringify(S)}`}function parseOkActorObject(e){if(e.v!==1||!(`display_name`in e)||typeof e.display_name!=`string`||!(`docs`in e)||!Array.isArray(e.docs))return null;let t=typeof e.principal==`string`?e.principal:null,s=typeof e.agent_session==`string`?e.agent_session:null,g;if(typeof e.writer_id==`string`&&e.writer_id.length>0)g=e.writer_id;else if(s)g=`agent-${s}`;else if(t)g=t;else switch(e.display_name){case`File System`:g=`file-system`;break;case`Git (upstream)`:g=`git-upstream`;break;default:g=`openknowledge-service`}let S=`summaries`in e&&Array.isArray(e.summaries)&&e.summaries.every(e=>typeof e==`string`)?e.summaries:void 0,w=parsePreviousPaths(e);return{v:1,writer_id:g,principal:t,agent_session:s,agent_type:typeof e.agent_type==`string`?e.agent_type:null,client_name:typeof e.client_name==`string`?e.client_name:null,client_version:typeof e.client_version==`string`?e.client_version:null,label:typeof e.label==`string`?e.label:null,display_name:e.display_name,color_seed:typeof e.color_seed==`string`?e.color_seed:`unknown`,docs:e.docs.filter(e=>typeof e==`string`),...S&&S.length>0?{summaries:S}:{},...w&&w.length>0?{previous_paths:w}:{}}}function parsePreviousPaths(e){if(!(`previous_paths`in e)||!Array.isArray(e.previous_paths))return;let t=[];for(let s of e.previous_paths){if(typeof s!=`object`||!s)continue;let e=s;typeof e.from!=`string`||typeof e.to!=`string`||t.push({from:e.from,to:e.to})}return t}function parseOkActors(e){if(!e)return[];let t=[];for(let s of e.split(`
4
4
  `)){let e=s.trim();if(!e.startsWith(OK_ACTOR_PREFIX))continue;let g;try{g=JSON.parse(e.slice(10))}catch{continue}if(typeof g!=`object`||!g)continue;let S=parseOkActorObject(g);S&&t.push(S)}return t}function okActorToShadowContributor(e){let t={v:1,id:e.writer_id,name:e.display_name,colorSeed:e.color_seed,docs:e.docs};return e.summaries&&e.summaries.length>0&&(t.summaries=e.summaries),t}function readContributors(e){let t=parseOkActors(e);return t.length>0?t.map(okActorToShadowContributor):parseContributors(e)}function formatWipSubject(e){return e.length===0?`wip: auto-save`:e.length===1?`wip: ${e[0]}`:`wip: ${e.length} docs`}function formatReconcileSubject(e){return`reconcile: ${e}`}function formatRollbackSubject(e,t){return`rollback: ${e} to ${t.slice(0,7)}`}function formatParkSubject(e,t){return`park: ${e} -> ${t}`}function formatRenameSubject(e,t){return`rename: ${e} -> ${t}`}function formatCheckpointSubject(e){return`checkpoint: ${e}`}function formatImportSubject(e,t){return e?`import: from ${e.slice(0,8)}..${t.slice(0,8)}`:`import: initial at ${t.slice(0,8)}`}const SUBJECT_LINE_BREAK_RE=RegExp(`[\\r\\n\\v\\f\\u0085\\u2028\\u2029]`,`g`);function stripLineBreaks(e){return e.replace(SUBJECT_LINE_BREAK_RE,` `)}function composeCommitSubject(e,t){let s=stripLineBreaks(e);if(t.length===0)return s;if(t.length>=2)return`${s} (${t.length} edits)`;let[g]=t;if(g===void 0)return s;let S=stripLineBreaks(g),w=`${s} — ${S}`;if(w.length<=72)return w;let E=`${s} — `,D=72-E.length-1;return D<=0?w.slice(0,72):`${E}${S.slice(0,D)}…`}function parseWriterId(e){return WRITER_ID_RE.test(e)?e.startsWith(`agent-`)?{id:e,classification:`agent`,isAgent:!0}:e.startsWith(`principal-`)?{id:e,classification:`principal`,isAgent:!1}:e===`file-system`?{id:e,classification:`classified-file-system`,isAgent:null}:e===`git-upstream`?{id:e,classification:`classified-git-upstream`,isAgent:null}:e===`openknowledge-service`?{id:e,classification:`classified-openknowledge-service`,isAgent:null}:{id:e,classification:`unknown`,isAgent:null}:{id:e,classification:`unknown`,isAgent:null}}var require_err_helpers=__commonJSMin$1(((e,t)=>{let s=e=>e&&typeof e.message==`string`,g=e=>{if(!e)return;let t=e.cause;if(typeof t==`function`){let t=e.cause();return s(t)?t:void 0}else return s(t)?t:void 0},S=(e,t)=>{if(!s(e))return``;let w=e.stack||``;if(t.has(e))return w+`
5
5
  causes have become circular...`;let E=g(e);return E?(t.add(e),w+`
6
6
  caused by: `+S(E,t)):w},w=e=>S(e,new Set),E=(e,t,S)=>{if(!s(e))return``;let w=S?``:e.message||``;if(t.has(e))return w+`: ...`;let D=g(e);if(D){t.add(e);let s=typeof e.cause==`function`;return w+(s?``:`: `)+E(D,t,s)}else return w};t.exports={isErrorLike:s,getErrorCause:g,stackWithCauses:w,messageWithCauses:e=>E(e,new Set)}})),require_err_proto=__commonJSMin$1(((e,t)=>{let s=Symbol(`circular-ref-tag`),g=Symbol(`pino-raw-err-ref`),S=Object.create({},{type:{enumerable:!0,writable:!0,value:void 0},message:{enumerable:!0,writable:!0,value:void 0},stack:{enumerable:!0,writable:!0,value:void 0},aggregateErrors:{enumerable:!0,writable:!0,value:void 0},raw:{enumerable:!1,get:function(){return this[g]},set:function(e){this[g]=e}}});Object.defineProperty(S,g,{writable:!0,value:{}}),t.exports={pinoErrProto:S,pinoErrorSymbols:{seen:s,rawSymbol:g}}})),require_err=__commonJSMin$1(((e,t)=>{t.exports=k;let{messageWithCauses:s,stackWithCauses:g,isErrorLike:S}=require_err_helpers(),{pinoErrProto:w,pinoErrorSymbols:E}=require_err_proto(),{seen:D}=E,{toString:O}=Object.prototype;function k(e){if(!S(e))return e;e[D]=void 0;let t=Object.create(w);t.type=O.call(e.constructor)===`[object Function]`?e.constructor.name:e.name,t.message=s(e),t.stack=g(e),Array.isArray(e.errors)&&(t.aggregateErrors=e.errors.map(e=>k(e)));for(let s in e)if(t[s]===void 0){let g=e[s];S(g)?s!==`cause`&&!Object.prototype.hasOwnProperty.call(g,D)&&(t[s]=k(g)):t[s]=g}return delete e[D],t.raw=e,t}})),require_err_with_cause=__commonJSMin$1(((e,t)=>{t.exports=D;let{isErrorLike:s}=require_err_helpers(),{pinoErrProto:g,pinoErrorSymbols:S}=require_err_proto(),{seen:w}=S,{toString:E}=Object.prototype;function D(e){if(!s(e))return e;e[w]=void 0;let t=Object.create(g);t.type=E.call(e.constructor)===`[object Function]`?e.constructor.name:e.name,t.message=e.message,t.stack=e.stack,Array.isArray(e.errors)&&(t.aggregateErrors=e.errors.map(e=>D(e))),s(e.cause)&&!Object.prototype.hasOwnProperty.call(e.cause,w)&&(t.cause=D(e.cause));for(let g in e)if(t[g]===void 0){let S=e[g];s(S)?Object.prototype.hasOwnProperty.call(S,w)||(t[g]=D(S)):t[g]=S}return delete e[w],t.raw=e,t}})),require_req=__commonJSMin$1(((e,t)=>{t.exports={mapHttpRequest:w,reqSerializer:S};let s=Symbol(`pino-raw-req-ref`),g=Object.create({},{id:{enumerable:!0,writable:!0,value:``},method:{enumerable:!0,writable:!0,value:``},url:{enumerable:!0,writable:!0,value:``},query:{enumerable:!0,writable:!0,value:``},params:{enumerable:!0,writable:!0,value:``},headers:{enumerable:!0,writable:!0,value:{}},remoteAddress:{enumerable:!0,writable:!0,value:``},remotePort:{enumerable:!0,writable:!0,value:``},raw:{enumerable:!1,get:function(){return this[s]},set:function(e){this[s]=e}}});Object.defineProperty(g,s,{writable:!0,value:{}});function S(e){let t=e.info||e.socket,s=Object.create(g);if(s.id=typeof e.id==`function`?e.id():e.id||(e.info?e.info.id:void 0),s.method=e.method,e.originalUrl)s.url=e.originalUrl;else{let t=e.path;s.url=typeof t==`string`?t:e.url?e.url.path||e.url:void 0}return e.query&&(s.query=e.query),e.params&&(s.params=e.params),s.headers=e.headers,s.remoteAddress=t&&t.remoteAddress,s.remotePort=t&&t.remotePort,s.raw=e.raw||e,s}function w(e){return{req:S(e)}}})),require_res=__commonJSMin$1(((e,t)=>{t.exports={mapHttpResponse:w,resSerializer:S};let s=Symbol(`pino-raw-res-ref`),g=Object.create({},{statusCode:{enumerable:!0,writable:!0,value:0},headers:{enumerable:!0,writable:!0,value:``},raw:{enumerable:!1,get:function(){return this[s]},set:function(e){this[s]=e}}});Object.defineProperty(g,s,{writable:!0,value:{}});function S(e){let t=Object.create(g);return t.statusCode=e.headersSent?e.statusCode:null,t.headers=e.getHeaders?e.getHeaders():e._headers,t.raw=e,t}function w(e){return{res:S(e)}}})),require_pino_std_serializers=__commonJSMin$1(((e,t)=>{let s=require_err(),g=require_err_with_cause(),S=require_req(),w=require_res();t.exports={err:s,errWithCause:g,mapHttpRequest:S.mapHttpRequest,mapHttpResponse:w.mapHttpResponse,req:S.reqSerializer,res:w.resSerializer,wrapErrorSerializer:function(e){return e===s?e:function(t){return e(s(t))}},wrapRequestSerializer:function(e){return e===S.reqSerializer?e:function(t){return e(S.reqSerializer(t))}},wrapResponseSerializer:function(e){return e===w.resSerializer?e:function(t){return e(w.resSerializer(t))}}}})),require_caller=__commonJSMin$1(((e,t)=>{function s(e,t){return t}t.exports=function(){let e=Error.prepareStackTrace;Error.prepareStackTrace=s;let t=Error().stack;if(Error.prepareStackTrace=e,!Array.isArray(t))return;let g=t.slice(2),S=[];for(let e of g)e&&S.push(e.getFileName());return S}})),require_redact=__commonJSMin$1(((e,t)=>{function s(e){if(typeof e!=`object`||!e)return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof Array){let t=[];for(let g=0;g<e.length;g++)t[g]=s(e[g]);return t}if(typeof e==`object`){let t=Object.create(Object.getPrototypeOf(e));for(let g in e)Object.prototype.hasOwnProperty.call(e,g)&&(t[g]=s(e[g]));return t}return e}function g(e){let t=[],s=``,g=!1,S=!1,w=``;for(let E=0;E<e.length;E++){let D=e[E];!g&&D===`.`?s&&=(t.push(s),``):D===`[`?(s&&=(t.push(s),``),g=!0):D===`]`&&g?(t.push(s),s=``,g=!1,S=!1):(D===`"`||D===`'`)&&g?S?D===w?(S=!1,w=``):s+=D:(S=!0,w=D):s+=D}return s&&t.push(s),t}function S(e,t,s){let g=e;for(let e=0;e<t.length-1;e++){let s=t[e];if(typeof g!=`object`||!g||!(s in g)||typeof g[s]!=`object`||g[s]===null)return!1;g=g[s]}let S=t[t.length-1];if(S===`*`){if(Array.isArray(g))for(let e=0;e<g.length;e++)g[e]=s;else if(typeof g==`object`&&g)for(let e in g)Object.prototype.hasOwnProperty.call(g,e)&&(g[e]=s)}else typeof g==`object`&&g&&S in g&&Object.prototype.hasOwnProperty.call(g,S)&&(g[S]=s);return!0}function w(e,t){let s=e;for(let e=0;e<t.length-1;e++){let g=t[e];if(typeof s!=`object`||!s||!(g in s)||typeof s[g]!=`object`||s[g]===null)return!1;s=s[g]}let g=t[t.length-1];if(g===`*`){if(Array.isArray(s))for(let e=0;e<s.length;e++)s[e]=void 0;else if(typeof s==`object`&&s)for(let e in s)Object.prototype.hasOwnProperty.call(s,e)&&delete s[e]}else typeof s==`object`&&s&&g in s&&Object.prototype.hasOwnProperty.call(s,g)&&delete s[g];return!0}let E=Symbol(`PATH_NOT_FOUND`);function D(e,t){let s=e;for(let e of t){if(typeof s!=`object`||!s||!s||!(e in s))return E;s=s[e]}return s}function O(e,t){let s=e;for(let e of t){if(typeof s!=`object`||!s||!s)return;s=s[e]}return s}function k(e,t,s,O=!1){for(let k of t){let t=g(k);if(t.includes(`*`))j(e,t,s,k,O);else if(O)w(e,t);else{let g=D(e,t);if(g===E)continue;S(e,t,typeof s==`function`?s(g,t):s)}}}function j(e,t,s,g,S=!1){let w=t.indexOf(`*`);if(w===t.length-1){let g=t.slice(0,-1),w=e;for(let e of g){if(typeof w!=`object`||!w||!w)return;w=w[e]}if(Array.isArray(w))if(S)for(let e=0;e<w.length;e++)w[e]=void 0;else for(let e=0;e<w.length;e++){let t=[...g,e.toString()],S=typeof s==`function`?s(w[e],t):s;w[e]=S}else if(typeof w==`object`&&w)if(S){let e=[];for(let t in w)Object.prototype.hasOwnProperty.call(w,t)&&e.push(t);for(let t of e)delete w[t]}else for(let e in w){let t=[...g,e],S=typeof s==`function`?s(w[e],t):s;w[e]=S}}else F(e,t,s,w,g,S)}function F(e,t,s,g,E,D=!1){let k=t.slice(0,g),F=t.slice(g+1),L=[];function B(e,t){if(t===k.length){if(Array.isArray(e))for(let s=0;s<e.length;s++)L[t]=s.toString(),B(e[s],t+1);else if(typeof e==`object`&&e)for(let s in e)L[t]=s,B(e[s],t+1)}else if(t<k.length){let s=k[t];e&&typeof e==`object`&&e&&s in e&&(L[t]=s,B(e[s],t+1))}else F.includes(`*`)?j(e,F,typeof s==`function`?(e,g)=>s(e,[...L.slice(0,t),...g]):s,E,D):D?w(e,F):S(e,F,typeof s==`function`?s(O(e,F),[...L.slice(0,t),...F]):s)}if(k.length===0)B(e,0);else{let t=e;for(let e=0;e<k.length;e++){let s=k[e];if(typeof t!=`object`||!t||!t)return;t=t[s],L[e]=s}t!=null&&B(t,k.length)}}function L(e){if(e.length===0)return null;let t=new Map;for(let s of e){let e=g(s),S=t;for(let t=0;t<e.length;t++){let s=e[t];S.has(s)||S.set(s,new Map),S=S.get(s)}}return t}function B(e,t){if(!t)return e;function s(e,t,g=0){if(!t||t.size===0||typeof e!=`object`||!e)return e;if(e instanceof Date)return new Date(e.getTime());if(Array.isArray(e)){let g=[];for(let S=0;S<e.length;S++){let w=S.toString();t.has(w)||t.has(`*`)?g[S]=s(e[S],t.get(w)||t.get(`*`)):g[S]=e[S]}return g}let S=Object.create(Object.getPrototypeOf(e));for(let g in e)Object.prototype.hasOwnProperty.call(e,g)&&(t.has(g)||t.has(`*`)?S[g]=s(e[g],t.get(g)||t.get(`*`)):S[g]=e[g]);return S}return s(e,t)}function H(e){if(typeof e!=`string`)throw Error(`Paths must be (non-empty) strings`);if(e===``)throw Error(`Invalid redaction path ()`);if(e.includes(`..`)||e.includes(`,`))throw Error(`Invalid redaction path (${e})`);let t=0,s=!1,g=``;for(let S=0;S<e.length;S++){let w=e[S];if((w===`"`||w===`'`)&&t>0)s?w===g&&(s=!1,g=``):(s=!0,g=w);else if(w===`[`&&!s)t++;else if(w===`]`&&!s&&(t--,t<0))throw Error(`Invalid redaction path (${e})`)}if(t!==0)throw Error(`Invalid redaction path (${e})`)}function q(e){if(!Array.isArray(e))throw TypeError(`paths must be an array`);for(let t of e)H(t)}function J(e={}){let{paths:t=[],censor:g=`[REDACTED]`,serialize:S=JSON.stringify,strict:w=!0,remove:E=!1}=e;q(t);let D=L(t);return function(e){if(w&&(typeof e!=`object`||!e)&&(typeof e!=`object`||!e))return S?S(e):e;let O=B(e,D),j=e,F=g;return typeof g==`function`&&(F=g),k(O,t,F,E),S===!1?(O.restore=function(){return s(j)},O):typeof S==`function`?S(O):JSON.stringify(O)}}t.exports=J})),require_symbols=__commonJSMin$1(((e,t)=>{let s=Symbol(`pino.setLevel`),g=Symbol(`pino.getLevel`),S=Symbol(`pino.levelVal`),w=Symbol(`pino.levelComp`),E=Symbol(`pino.useLevelLabels`),D=Symbol(`pino.useOnlyCustomLevels`),O=Symbol(`pino.mixin`),k=Symbol(`pino.lsCache`),j=Symbol(`pino.chindings`),F=Symbol(`pino.asJson`),L=Symbol(`pino.write`),B=Symbol(`pino.redactFmt`),H=Symbol(`pino.time`),q=Symbol(`pino.timeSliceIndex`),J=Symbol(`pino.stream`),Y=Symbol(`pino.stringify`),ee=Symbol(`pino.stringifySafe`),te=Symbol(`pino.stringifiers`),ne=Symbol(`pino.end`),ae=Symbol(`pino.formatOpts`),oe=Symbol(`pino.messageKey`),se=Symbol(`pino.errorKey`),ce=Symbol(`pino.nestedKey`),ue=Symbol(`pino.nestedKeyStr`),de=Symbol(`pino.mixinMergeStrategy`),fe=Symbol(`pino.msgPrefix`),me=Symbol(`pino.wildcardFirst`),ge=Symbol.for(`pino.serializers`),_e=Symbol.for(`pino.formatters`),ve=Symbol.for(`pino.hooks`);t.exports={setLevelSym:s,getLevelSym:g,levelValSym:S,levelCompSym:w,useLevelLabelsSym:E,mixinSym:O,lsCacheSym:k,chindingsSym:j,asJsonSym:F,writeSym:L,serializersSym:ge,redactFmtSym:B,timeSym:H,timeSliceIndexSym:q,streamSym:J,stringifySym:Y,stringifySafeSym:ee,stringifiersSym:te,endSym:ne,formatOptsSym:ae,messageKeySym:oe,errorKeySym:se,nestedKeySym:ce,wildcardFirstSym:me,needsMetadataGsym:Symbol.for(`pino.metadata`),useOnlyCustomLevelsSym:D,formattersSym:_e,hooksSym:ve,nestedKeyStrSym:ue,mixinMergeStrategySym:de,msgPrefixSym:fe}})),require_redaction=__commonJSMin$1(((e,t)=>{let s=require_redact(),{redactFmtSym:g,wildcardFirstSym:S}=require_symbols(),w=/[^.[\]]+|\[([^[\]]*?)\]/g,E=`[Redacted]`,D=!1;function O(e,t){let{paths:E,censor:D,remove:O}=k(e),j=E.reduce((e,t)=>{w.lastIndex=0;let s=w.exec(t),g=w.exec(t),E=s[1]===void 0?s[0]:s[1].replace(/^(?:"|'|`)(.*)(?:"|'|`)$/,`$1`);if(E===`*`&&(E=S),g===null)return e[E]=null,e;if(e[E]===null)return e;let{index:D}=g,O=`${t.substr(D,t.length-1)}`;return e[E]=e[E]||[],E!==S&&e[E].length===0&&e[E].push(...e[S]||[]),E===S&&Object.keys(e).forEach(function(t){e[t]&&e[t].push(O)}),e[E].push(O),e},{}),F={[g]:s({paths:E,censor:D,serialize:t,strict:!1,remove:O})},L=(...e)=>t(typeof D==`function`?D(...e):D);return[...Object.keys(j),...Object.getOwnPropertySymbols(j)].reduce((e,g)=>{if(j[g]===null)e[g]=e=>L(e,[g]);else{let S=typeof D==`function`?(e,t)=>D(e,[g,...t]):D;e[g]=s({paths:j[g],censor:S,serialize:t,strict:!1,remove:O})}return e},F)}function k(e){if(Array.isArray(e))return e={paths:e,censor:E},e;let{paths:t,censor:s=E,remove:g}=e;if(Array.isArray(t)===!1)throw Error(`pino – redact must contain an array of strings`);return g===!0&&(s=void 0),{paths:t,censor:s,remove:g}}t.exports=O})),require_time$4=__commonJSMin$1(((e,t)=>{let s=()=>``,g=()=>`,"time":${Date.now()}`,S=()=>`,"time":${Math.round(Date.now()/1e3)}`,w=()=>`,"time":"${new Date(Date.now()).toISOString()}"`,E=1000000n,D=1000000000n,O=BigInt(Date.now())*1000000n,k=process.hrtime.bigint();t.exports={nullTime:s,epochTime:g,unixTime:S,isoTime:w,isoTimeNano:()=>{let e=O+(process.hrtime.bigint()-k),t=e/D,s=e%D,g=Number(t*1000n+s/1000000n),S=new Date(g);return`,"time":"${S.getUTCFullYear()}-${(S.getUTCMonth()+1).toString().padStart(2,`0`)}-${S.getUTCDate().toString().padStart(2,`0`)}T${S.getUTCHours().toString().padStart(2,`0`)}:${S.getUTCMinutes().toString().padStart(2,`0`)}:${S.getUTCSeconds().toString().padStart(2,`0`)}.${s.toString().padStart(9,`0`)}Z"`}}})),require_quick_format_unescaped=__commonJSMin$1(((e,t)=>{function s(e){try{return JSON.stringify(e)}catch{return`"[Circular]"`}}t.exports=g;function g(e,t,g){var S=g&&g.stringify||s,w=1;if(typeof e==`object`&&e){var E=t.length+w;if(E===1)return e;var D=Array(E);D[0]=S(e);for(var O=1;O<E;O++)D[O]=S(t[O]);return D.join(` `)}if(typeof e!=`string`)return e;var k=t.length;if(k===0)return e;for(var j=``,F=1-w,L=-1,B=e&&e.length||0,H=0;H<B;){if(e.charCodeAt(H)===37&&H+1<B){switch(L=L>-1?L:0,e.charCodeAt(H+1)){case 100:case 102:if(F>=k||t[F]==null)break;L<H&&(j+=e.slice(L,H)),j+=Number(t[F]),L=H+2,H++;break;case 105:if(F>=k||t[F]==null)break;L<H&&(j+=e.slice(L,H)),j+=Math.floor(Number(t[F])),L=H+2,H++;break;case 79:case 111:case 106:if(F>=k||t[F]===void 0)break;L<H&&(j+=e.slice(L,H));var q=typeof t[F];if(q===`string`){j+=`'`+t[F]+`'`,L=H+2,H++;break}if(q===`function`){j+=t[F].name||`<anonymous>`,L=H+2,H++;break}j+=S(t[F]),L=H+2,H++;break;case 115:if(F>=k)break;L<H&&(j+=e.slice(L,H)),j+=String(t[F]),L=H+2,H++;break;case 37:L<H&&(j+=e.slice(L,H)),j+=`%`,L=H+2,H++,F--;break}++F}++H}return L===-1?e:(L<B&&(j+=e.slice(L)),j)}})),require_atomic_sleep=__commonJSMin$1(((e,t)=>{if(typeof SharedArrayBuffer<`u`&&typeof Atomics<`u`){let e=new Int32Array(new SharedArrayBuffer(4));function s(t){if(!(t>0&&t<1/0))throw typeof t!=`number`&&typeof t!=`bigint`?TypeError(`sleep: ms must be a number`):RangeError(`sleep: ms must be a number that is greater than 0 but less than Infinity`);Atomics.wait(e,0,0,Number(t))}t.exports=s}else{function e(e){if(!(e>0&&e<1/0))throw typeof e!=`number`&&typeof e!=`bigint`?TypeError(`sleep: ms must be a number`):RangeError(`sleep: ms must be a number that is greater than 0 but less than Infinity`);let t=Date.now()+Number(e);for(;t>Date.now(););}t.exports=e}})),require_sonic_boom=__commonJSMin$1(((e,t)=>{let s=__require$1(`fs`),g=__require$1(`events`),S=__require$1(`util`).inherits,w=__require$1(`path`),E=require_atomic_sleep(),D=__require$1(`assert`),O=100,k=Buffer.allocUnsafe(0),j=16*1024,F=`buffer`,L=`utf8`,[B,H]=(process.versions.node||`0.0`).split(`.`).map(Number),q=B>=22&&H>=7;function J(e,t){t._opening=!0,t._writing=!0,t._asyncDrainScheduled=!1;function g(s,g){if(s){t._reopening=!1,t._writing=!1,t._opening=!1,t.sync?process.nextTick(()=>{t.listenerCount(`error`)>0&&t.emit(`error`,s)}):t.emit(`error`,s);return}let S=t._reopening;t.fd=g,t.file=e,t._reopening=!1,t._opening=!1,t._writing=!1,t.sync?process.nextTick(()=>t.emit(`ready`)):t.emit(`ready`),!t.destroyed&&(!t._writing&&t._len>t.minLength||t._flushPending?t._actualWrite():S&&process.nextTick(()=>t.emit(`drain`)))}let S=t.append?`a`:`w`,E=t.mode;if(t.sync)try{t.mkdir&&s.mkdirSync(w.dirname(e),{recursive:!0}),g(null,s.openSync(e,S,E))}catch(e){throw g(e),e}else t.mkdir?s.mkdir(w.dirname(e),{recursive:!0},t=>{if(t)return g(t);s.open(e,S,E,g)}):s.open(e,S,E,g)}function Y(e){if(!(this instanceof Y))return new Y(e);let{fd:t,dest:g,minLength:S,maxLength:w,maxWrite:D,periodicFlush:O,sync:j,append:B=!0,mkdir:H,retryEAGAIN:q,fsync:ne,contentMode:se,mode:ve}=e||{};t||=g,this._len=0,this.fd=-1,this._bufs=[],this._lens=[],this._writing=!1,this._ending=!1,this._reopening=!1,this._asyncDrainScheduled=!1,this._flushPending=!1,this._hwm=Math.max(S||0,16387),this.file=null,this.destroyed=!1,this.minLength=S||0,this.maxLength=w||0,this.maxWrite=D||16384,this._periodicFlush=O||0,this._periodicFlushTimer=void 0,this.sync=j||!1,this.writable=!0,this._fsync=ne||!1,this.append=B||!1,this.mode=ve,this.retryEAGAIN=q||(()=>!0),this.mkdir=H||!1;let ye,Ce;if(se===F)this._writingBuf=k,this.write=oe,this.flush=ue,this.flushSync=fe,this._actualWrite=ge,ye=()=>s.writeSync(this.fd,this._writingBuf),Ce=()=>s.write(this.fd,this._writingBuf,this.release);else if(se===void 0||se===L)this._writingBuf=``,this.write=ae,this.flush=ce,this.flushSync=de,this._actualWrite=me,ye=()=>Buffer.isBuffer(this._writingBuf)?s.writeSync(this.fd,this._writingBuf):s.writeSync(this.fd,this._writingBuf,`utf8`),Ce=()=>Buffer.isBuffer(this._writingBuf)?s.write(this.fd,this._writingBuf,this.release):s.write(this.fd,this._writingBuf,`utf8`,this.release);else throw Error(`SonicBoom supports "${L}" and "${F}", but passed ${se}`);if(typeof t==`number`)this.fd=t,process.nextTick(()=>this.emit(`ready`));else if(typeof t==`string`)J(t,this);else throw Error(`SonicBoom supports only file descriptors and files`);if(this.minLength>=this.maxWrite)throw Error(`minLength should be smaller than maxWrite (${this.maxWrite})`);this.release=(e,t)=>{if(e){if((e.code===`EAGAIN`||e.code===`EBUSY`)&&this.retryEAGAIN(e,this._writingBuf.length,this._len-this._writingBuf.length))if(this.sync)try{E(100),this.release(void 0,0)}catch(e){this.release(e)}else setTimeout(Ce,100);else this._writing=!1,this.emit(`error`,e);return}this.emit(`write`,t);let g=ee(this._writingBuf,this._len,t);if(this._len=g.len,this._writingBuf=g.writingBuf,this._writingBuf.length){if(!this.sync){Ce();return}try{do{let e=ye(),t=ee(this._writingBuf,this._len,e);this._len=t.len,this._writingBuf=t.writingBuf}while(this._writingBuf.length)}catch(e){this.release(e);return}}this._fsync&&s.fsyncSync(this.fd);let S=this._len;this._reopening?(this._writing=!1,this._reopening=!1,this.reopen()):S>this.minLength?this._actualWrite():this._ending?S>0?this._actualWrite():(this._writing=!1,_e(this)):(this._writing=!1,this.sync?this._asyncDrainScheduled||(this._asyncDrainScheduled=!0,process.nextTick(te,this)):this.emit(`drain`))},this.on(`newListener`,function(e){e===`drain`&&(this._asyncDrainScheduled=!1)}),this._periodicFlush!==0&&(this._periodicFlushTimer=setInterval(()=>this.flush(null),this._periodicFlush),this._periodicFlushTimer.unref())}function ee(e,t,s){return typeof e==`string`&&(e=Buffer.from(e)),t=Math.max(t-s,0),e=e.subarray(s),{writingBuf:e,len:t}}function te(e){e.listenerCount(`drain`)>0&&(e._asyncDrainScheduled=!1,e.emit(`drain`))}S(Y,g);function ne(e,t){return e.length===0?k:e.length===1?e[0]:Buffer.concat(e,t)}function ae(e){if(this.destroyed)throw Error(`SonicBoom destroyed`);e=``+e;let t=Buffer.byteLength(e),s=this._len+t,g=this._bufs;return this.maxLength&&s>this.maxLength?(this.emit(`drop`,e),this._len<this._hwm):(g.length===0||Buffer.byteLength(g[g.length-1])+t>this.maxWrite?g.push(e):g[g.length-1]+=e,this._len=s,!this._writing&&this._len>=this.minLength&&this._actualWrite(),this._len<this._hwm)}function oe(e){if(this.destroyed)throw Error(`SonicBoom destroyed`);let t=this._len+e.length,s=this._bufs,g=this._lens;return this.maxLength&&t>this.maxLength?(this.emit(`drop`,e),this._len<this._hwm):(s.length===0||g[g.length-1]+e.length>this.maxWrite?(s.push([e]),g.push(e.length)):(s[s.length-1].push(e),g[g.length-1]+=e.length),this._len=t,!this._writing&&this._len>=this.minLength&&this._actualWrite(),this._len<this._hwm)}function se(e){this._flushPending=!0;let t=()=>{if(this._fsync)this._flushPending=!1,e();else try{s.fsync(this.fd,t=>{this._flushPending=!1,e(t)})}catch(t){e(t)}this.off(`error`,g)},g=s=>{this._flushPending=!1,e(s),this.off(`drain`,t)};this.once(`drain`,t),this.once(`error`,g)}function ce(e){if(e!=null&&typeof e!=`function`)throw Error(`flush cb must be a function`);if(this.destroyed){let t=Error(`SonicBoom destroyed`);if(e){e(t);return}throw t}if(this.minLength<=0){e?.();return}e&&se.call(this,e),!this._writing&&(this._bufs.length===0&&this._bufs.push(``),this._actualWrite())}function ue(e){if(e!=null&&typeof e!=`function`)throw Error(`flush cb must be a function`);if(this.destroyed){let t=Error(`SonicBoom destroyed`);if(e){e(t);return}throw t}if(this.minLength<=0){e?.();return}e&&se.call(this,e),!this._writing&&(this._bufs.length===0&&(this._bufs.push([]),this._lens.push(0)),this._actualWrite())}Y.prototype.reopen=function(e){if(this.destroyed)throw Error(`SonicBoom destroyed`);if(this._opening){this.once(`ready`,()=>{this.reopen(e)});return}if(this._ending)return;if(!this.file)throw Error(`Unable to reopen a file descriptor, you must pass a file to SonicBoom`);if(e&&(this.file=e),this._reopening=!0,this._writing)return;let t=this.fd;this.once(`ready`,()=>{t!==this.fd&&s.close(t,e=>{if(e)return this.emit(`error`,e)})}),J(this.file,this)},Y.prototype.end=function(){if(this.destroyed)throw Error(`SonicBoom destroyed`);if(this._opening){this.once(`ready`,()=>{this.end()});return}this._ending||(this._ending=!0,!this._writing&&(this._len>0&&this.fd>=0?this._actualWrite():_e(this)))};function de(){if(this.destroyed)throw Error(`SonicBoom destroyed`);if(this.fd<0)throw Error(`sonic boom is not ready yet`);!this._writing&&this._writingBuf.length>0&&(this._bufs.unshift(this._writingBuf),this._writingBuf=``);let e=``;for(;this._bufs.length||e.length;){e.length<=0&&(e=this._bufs[0]);try{let t=Buffer.isBuffer(e)?s.writeSync(this.fd,e):s.writeSync(this.fd,e,`utf8`),g=ee(e,this._len,t);e=g.writingBuf,this._len=g.len,e.length<=0&&this._bufs.shift()}catch(t){if((t.code===`EAGAIN`||t.code===`EBUSY`)&&!this.retryEAGAIN(t,e.length,this._len-e.length))throw t;E(100)}}try{s.fsyncSync(this.fd)}catch{}}function fe(){if(this.destroyed)throw Error(`SonicBoom destroyed`);if(this.fd<0)throw Error(`sonic boom is not ready yet`);!this._writing&&this._writingBuf.length>0&&(this._bufs.unshift([this._writingBuf]),this._writingBuf=k);let e=k;for(;this._bufs.length||e.length;){e.length<=0&&(e=ne(this._bufs[0],this._lens[0]));try{let t=s.writeSync(this.fd,e);e=e.subarray(t),this._len=Math.max(this._len-t,0),e.length<=0&&(this._bufs.shift(),this._lens.shift())}catch(t){if((t.code===`EAGAIN`||t.code===`EBUSY`)&&!this.retryEAGAIN(t,e.length,this._len-e.length))throw t;E(100)}}}Y.prototype.destroy=function(){this.destroyed||_e(this)};function me(){let e=this.release;if(this._writing=!0,this._writingBuf=this._writingBuf.length?this._writingBuf:this._bufs.shift()||``,this.sync)try{e(null,Buffer.isBuffer(this._writingBuf)?s.writeSync(this.fd,this._writingBuf):s.writeSync(this.fd,this._writingBuf,`utf8`))}catch(t){e(t)}else s.write(this.fd,this._writingBuf,e)}function ge(){let e=this.release;if(this._writing=!0,this._writingBuf=this._writingBuf.length?this._writingBuf:ne(this._bufs.shift(),this._lens.shift()),this.sync)try{e(null,s.writeSync(this.fd,this._writingBuf))}catch(t){e(t)}else q&&(this._writingBuf=Buffer.from(this._writingBuf)),s.write(this.fd,this._writingBuf,e)}function _e(e){if(e.fd===-1){e.once(`ready`,_e.bind(null,e));return}e._periodicFlushTimer!==void 0&&clearInterval(e._periodicFlushTimer),e.destroyed=!0,e._bufs=[],e._lens=[],D(typeof e.fd==`number`,`sonic.fd must be a number, got ${typeof e.fd}`);try{s.fsync(e.fd,t)}catch{}function t(){e.fd!==1&&e.fd!==2?s.close(e.fd,g):g()}function g(t){if(t){e.emit(`error`,t);return}e._ending&&!e._writing&&e.emit(`finish`),e.emit(`close`)}}Y.SonicBoom=Y,Y.default=Y,t.exports=Y})),require_on_exit_leak_free=__commonJSMin$1(((e,t)=>{let s={exit:[],beforeExit:[]},g={exit:O,beforeExit:k},S;function w(){S===void 0&&(S=new FinalizationRegistry(F))}function E(e){s[e].length>0||process.on(e,g[e])}function D(e){s[e].length>0||(process.removeListener(e,g[e]),s.exit.length===0&&s.beforeExit.length===0&&(S=void 0))}function O(){j(`exit`)}function k(){j(`beforeExit`)}function j(e){for(let t of s[e]){let s=t.deref(),g=t.fn;s!==void 0&&g(s,e)}s[e]=[]}function F(e){for(let t of[`exit`,`beforeExit`]){let g=s[t].indexOf(e);s[t].splice(g,g+1),D(t)}}function L(e,t,g){if(t===void 0)throw Error(`the object can't be undefined`);E(e);let D=new WeakRef(t);D.fn=g,w(),S.register(t,D),s[e].push(D)}function B(e,t){L(`exit`,e,t)}function H(e,t){L(`beforeExit`,e,t)}function q(e){if(S!==void 0){S.unregister(e);for(let t of[`exit`,`beforeExit`])s[t]=s[t].filter(t=>{let s=t.deref();return s&&s!==e}),D(t)}}t.exports={register:B,registerBeforeExit:H,unregister:q}})),require_package=__commonJSMin$1(((e,t)=>{t.exports={name:`thread-stream`,version:`4.0.0`,description:`A streaming way to send data to a Node.js Worker Thread`,main:`index.js`,types:`index.d.ts`,engines:{node:`>=20`},dependencies:{"real-require":`^0.2.0`},devDependencies:{"@types/node":`^22.0.0`,"@yao-pkg/pkg":`^6.0.0`,borp:`^0.21.0`,desm:`^1.3.0`,eslint:`^9.39.1`,fastbench:`^1.0.1`,husky:`^9.0.6`,neostandard:`^0.12.2`,"pino-elasticsearch":`^8.0.0`,"sonic-boom":`^4.0.1`,"ts-node":`^10.8.0`,typescript:`~5.7.3`},scripts:{build:`tsc --noEmit`,lint:`eslint`,test:`npm run lint && npm run build && npm run transpile && borp --pattern 'test/*.test.{js,mjs}'`,"test:ci":`npm run lint && npm run transpile && borp --pattern 'test/*.test.{js,mjs}'`,"test:yarn":`npm run transpile && borp --pattern 'test/*.test.js'`,transpile:`sh ./test/ts/transpile.sh`,prepare:`husky install`},repository:{type:`git`,url:`git+https://github.com/mcollina/thread-stream.git`},keywords:[`worker`,`thread`,`threads`,`stream`],author:`Matteo Collina <hello@matteocollina.com>`,license:`MIT`,bugs:{url:`https://github.com/mcollina/thread-stream/issues`},homepage:`https://github.com/mcollina/thread-stream#readme`}})),require_wait=__commonJSMin$1(((e,t)=>{let s=1e4;function g(e,t,g,S,w){let E=S===1/0?1/0:Date.now()+S,D=()=>{let S=Atomics.load(e,t);if(S===g){w(null,`ok`);return}if(E!==1/0&&Date.now()>E){w(null,`timed-out`);return}let O=E===1/0?s:Math.min(s,Math.max(1,E-Date.now())),k=Atomics.waitAsync(e,t,S,O);k.async?k.value.then(D):setImmediate(D)};D()}function S(e,t,g,S,w){let E=S===1/0?1/0:Date.now()+S,D=()=>{if(Atomics.load(e,t)!==g){w(null,`ok`);return}if(E!==1/0&&Date.now()>E){w(null,`timed-out`);return}let S=E===1/0?s:Math.min(s,Math.max(1,E-Date.now())),O=Atomics.waitAsync(e,t,g,S);O.async?O.value.then(D):setImmediate(D)};D()}t.exports={wait:g,waitDiff:S}})),require_indexes=__commonJSMin$1(((e,t)=>{let s=4,g=8;t.exports={WRITE_INDEX:4,READ_INDEX:8}})),require_thread_stream=__commonJSMin$1(((e,t)=>{let{version:s}=require_package(),{EventEmitter:g}=__require$1(`events`),{Worker:S}=__require$1(`worker_threads`),{join:w}=__require$1(`path`),{pathToFileURL:E}=__require$1(`url`),{wait:D}=require_wait(),{WRITE_INDEX:O,READ_INDEX:k}=require_indexes(),j=__require$1(`buffer`),F=__require$1(`assert`),L=Symbol(`kImpl`),B=j.constants.MAX_STRING_LENGTH;var H=class{constructor(e){this._value=e}deref(){return this._value}},q=class{register(){}unregister(){}};let J=process.env.NODE_V8_COVERAGE?q:global.FinalizationRegistry||q,Y=process.env.NODE_V8_COVERAGE?H:global.WeakRef||H,ee=new J(e=>{e.exited||e.terminate()});function te(e,t){let{filename:g,workerData:D}=t,O=new S((`__bundlerPathsOverrides`in globalThis?globalThis.__bundlerPathsOverrides:{})[`thread-stream-worker`]||w(__dirname,`lib`,`worker.js`),{...t.workerOpts,trackUnmanagedFds:!1,workerData:{filename:g.indexOf(`file://`)===0?g:E(g).href,dataBuf:e[L].dataBuf,stateBuf:e[L].stateBuf,workerData:{$context:{threadStreamVersion:s},...D}}});return O.stream=new H(e),O.on(`message`,oe),O.on(`exit`,se),ee.register(e,O),O}function ne(e){F(!e[L].sync),e[L].needDrain&&(e[L].needDrain=!1,e.emit(`drain`))}function ae(e){let t=Atomics.load(e[L].state,O),s=e[L].data.length-t;if(s>0){if(e[L].buf.length===0){e[L].flushing=!1,e[L].ending?me(e):e[L].needDrain&&process.nextTick(ne,e);return}let t=e[L].buf.slice(0,s),g=Buffer.byteLength(t);g<=s?(e[L].buf=e[L].buf.slice(s),fe(e,t,ae.bind(null,e))):e.flush(()=>{if(!e.destroyed){for(Atomics.store(e[L].state,k,0),Atomics.store(e[L].state,O,0),Atomics.notify(e[L].state,k);g>e[L].data.length;)s/=2,t=e[L].buf.slice(0,s),g=Buffer.byteLength(t);e[L].buf=e[L].buf.slice(s),fe(e,t,ae.bind(null,e))}})}else if(s===0){if(t===0&&e[L].buf.length===0)return;e.flush(()=>{Atomics.store(e[L].state,k,0),Atomics.store(e[L].state,O,0),Atomics.notify(e[L].state,k),ae(e)})}else de(e,Error(`overwritten`))}function oe(e){let t=this.stream.deref();if(t===void 0){this.exited=!0,this.terminate();return}switch(e.code){case`READY`:this.stream=new Y(t),t.flush(()=>{t[L].ready=!0,t.emit(`ready`)});break;case`ERROR`:de(t,e.err);break;case`EVENT`:Array.isArray(e.args)?t.emit(e.name,...e.args):t.emit(e.name,e.args);break;case`WARNING`:process.emitWarning(e.err);break;default:de(t,Error(`this should not happen: `+e.code))}}function se(e){let t=this.stream.deref();t!==void 0&&(ee.unregister(t),t.worker.exited=!0,t.worker.off(`exit`,se),de(t,e===0?null:Error(`the worker thread exited`)))}var ce=class extends g{constructor(e={}){if(super(),e.bufferSize<4)throw Error(`bufferSize must at least fit a 4-byte utf-8 char`);this[L]={},this[L].stateBuf=new SharedArrayBuffer(128),this[L].state=new Int32Array(this[L].stateBuf),this[L].dataBuf=new SharedArrayBuffer(e.bufferSize||4*1024*1024),this[L].data=Buffer.from(this[L].dataBuf),this[L].sync=e.sync||!1,this[L].ending=!1,this[L].ended=!1,this[L].needDrain=!1,this[L].destroyed=!1,this[L].flushing=!1,this[L].ready=!1,this[L].finished=!1,this[L].errored=null,this[L].closed=!1,this[L].buf=``,this.worker=te(this,e),this.on(`message`,(e,t)=>{this.worker.postMessage(e,t)})}write(e){if(this[L].destroyed)return ue(this,Error(`the worker has exited`)),!1;if(this[L].ending)return ue(this,Error(`the worker is ending`)),!1;if(this[L].flushing&&this[L].buf.length+e.length>=B)try{ge(this),this[L].flushing=!0}catch(e){return de(this,e),!1}if(this[L].buf+=e,this[L].sync)try{return ge(this),!0}catch(e){return de(this,e),!1}return this[L].flushing||(this[L].flushing=!0,setImmediate(ae,this)),this[L].needDrain=this[L].data.length-this[L].buf.length-Atomics.load(this[L].state,O)<=0,!this[L].needDrain}end(){this[L].destroyed||(this[L].ending=!0,me(this))}flush(e){if(this[L].destroyed){typeof e==`function`&&process.nextTick(e,Error(`the worker has exited`));return}let t=Atomics.load(this[L].state,O);D(this[L].state,k,t,1/0,(t,s)=>{if(t){de(this,t),process.nextTick(e,t);return}if(s===`not-equal`){this.flush(e);return}process.nextTick(e)})}flushSync(){this[L].destroyed||(ge(this),_e(this))}unref(){this.worker.unref()}ref(){this.worker.ref()}get ready(){return this[L].ready}get destroyed(){return this[L].destroyed}get closed(){return this[L].closed}get writable(){return!this[L].destroyed&&!this[L].ending}get writableEnded(){return this[L].ending}get writableFinished(){return this[L].finished}get writableNeedDrain(){return this[L].needDrain}get writableObjectMode(){return!1}get writableErrored(){return this[L].errored}};function ue(e,t){setImmediate(()=>{e.emit(`error`,t)})}function de(e,t){e[L].destroyed||(e[L].destroyed=!0,t&&(e[L].errored=t,ue(e,t)),e.worker.exited?setImmediate(()=>{e[L].closed=!0,e.emit(`close`)}):e.worker.terminate().catch(()=>{}).then(()=>{e[L].closed=!0,e.emit(`close`)}))}function fe(e,t,s){let g=Atomics.load(e[L].state,O),S=Buffer.byteLength(t);return e[L].data.write(t,g),Atomics.store(e[L].state,O,g+S),Atomics.notify(e[L].state,O),s(),!0}function me(e){if(!(e[L].ended||!e[L].ending||e[L].flushing)){e[L].ended=!0;try{e.flushSync();let t=Atomics.load(e[L].state,k);Atomics.store(e[L].state,O,-1),Atomics.notify(e[L].state,O);let s=0;for(;t!==-1;){if(Atomics.wait(e[L].state,k,t,1e3),t=Atomics.load(e[L].state,k),t===-2){de(e,Error(`end() failed`));return}if(++s===10){de(e,Error(`end() took too long (10s)`));return}}process.nextTick(()=>{e[L].finished=!0,e.emit(`finish`)})}catch(t){de(e,t)}}}function ge(e){let t=()=>{e[L].ending?me(e):e[L].needDrain&&process.nextTick(ne,e)};for(e[L].flushing=!1;e[L].buf.length!==0;){let s=Atomics.load(e[L].state,O),g=e[L].data.length-s;if(g===0){_e(e),Atomics.store(e[L].state,k,0),Atomics.store(e[L].state,O,0),Atomics.notify(e[L].state,k);continue}else if(g<0)throw Error(`overwritten`);let S=e[L].buf.slice(0,g),w=Buffer.byteLength(S);if(w<=g)e[L].buf=e[L].buf.slice(g),fe(e,S,t);else{for(_e(e),Atomics.store(e[L].state,k,0),Atomics.store(e[L].state,O,0),Atomics.notify(e[L].state,k);w>e[L].buf.length;)g/=2,S=e[L].buf.slice(0,g),w=Buffer.byteLength(S);e[L].buf=e[L].buf.slice(g),fe(e,S,t)}}}function _e(e){if(e[L].flushing)throw Error(`unable to flush while flushing`);let t=Atomics.load(e[L].state,O),s=0;for(;;){let g=Atomics.load(e[L].state,k);if(g===-2)throw Error(`_flushSync failed`);if(g!==t)Atomics.wait(e[L].state,k,g,1e3);else break;if(++s===10)throw Error(`_flushSync took too long (10s)`)}}t.exports=ce})),require_transport=__commonJSMin$1(((e,t)=>{let{createRequire:s}=__require$1(`module`),{existsSync:g}=__require$1(`node:fs`),S=require_caller(),{join:w,isAbsolute:E,sep:D}=__require$1(`node:path`),{fileURLToPath:O}=__require$1(`node:url`),k=require_atomic_sleep(),j=require_on_exit_leak_free(),F=require_thread_stream();function L(e){j.register(e,ee),j.registerBeforeExit(e,te),e.on(`close`,function(){j.unregister(e)})}function B(){let e=process.execArgv;for(let t=0;t<e.length;t++){let s=e[t];if(s===`--import`||s===`--require`||s===`-r`||s.startsWith(`--import=`)||s.startsWith(`--require=`)||s.startsWith(`-r=`))return!0}return!1}function H(e){let t=e.match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g);if(!t)return e;let s=[],g=!1;for(let e=0;e<t.length;e++){let S=t[e];if(S===`--require`||S===`-r`||S===`--import`){let w=t[e+1];if(w&&q(w)){g=!0,e++;continue}s.push(S),w&&(s.push(w),e++);continue}if((S.startsWith(`--require=`)||S.startsWith(`-r=`)||S.startsWith(`--import=`))&&q(S.slice(S.indexOf(`=`)+1))){g=!0;continue}s.push(S)}return g?s.join(` `):e}function q(e){let t=J(e);if(!t)return!1;let s=t;if(s.startsWith(`file://`))try{s=O(s)}catch{return!1}return E(s)&&!g(s)}function J(e){let t=e[0],s=e[e.length-1];return t===`"`&&s===`"`||t===`'`&&s===`'`?e.slice(1,-1):e}function Y(e,t,s,g,S){if(!s.execArgv&&B()&&__require$1.main===void 0&&(s={...s,execArgv:[]}),!s.env&&process.env.NODE_OPTIONS){let e=H(process.env.NODE_OPTIONS);e!==process.env.NODE_OPTIONS&&(s={...s,env:{...process.env,NODE_OPTIONS:e}})}s={...s,name:S};let w=new F({filename:e,workerData:t,workerOpts:s,sync:g});w.on(`ready`,E),w.on(`close`,function(){process.removeListener(`exit`,D)}),process.on(`exit`,D);function E(){process.removeListener(`exit`,D),w.unref(),s.autoEnd!==!1&&L(w)}function D(){w.closed||(w.flushSync(),k(100),w.end())}return w}function ee(e){e.ref(),e.flushSync(),e.end(),e.once(`close`,function(){e.unref()})}function te(e){e.flushSync()}function ne(e){let{pipeline:t,targets:g,levels:O,dedupe:k,worker:j={},caller:F=S(),sync:L=!1}=e,B={...e.options},H=typeof F==`string`?[F]:F,q=typeof globalThis==`object`&&Object.prototype.hasOwnProperty.call(globalThis,`__bundlerPathsOverrides`)&&globalThis.__bundlerPathsOverrides&&typeof globalThis.__bundlerPathsOverrides==`object`?globalThis.__bundlerPathsOverrides:Object.create(null),J=e.target;if(J&&g)throw Error(`only one of target or targets can be specified`);g?(J=q[`pino-worker`]||w(__dirname,`worker.js`),B.targets=g.filter(e=>e.target).map(e=>({...e,target:te(e.target)})),B.pipelines=g.filter(e=>e.pipeline).map(e=>e.pipeline.map(t=>({...t,level:e.level,target:te(t.target)})))):t&&(J=q[`pino-worker`]||w(__dirname,`worker.js`),B.pipelines=[t.map(e=>({...e,target:te(e.target)}))]),O&&(B.levels=O),k&&(B.dedupe=k),B.pinoWillSendConfig=!0;let ee=g||t?`pino.transport`:J;return Y(te(J),B,j,L,ee);function te(e){if(e=q[e]||e,E(e)||e.indexOf(`file://`)===0)return e;if(e===`pino/file`)return w(__dirname,`..`,`file.js`);let t;for(let g of H)try{t=s(g===`node:repl`?process.cwd()+D:g).resolve(e);break}catch{continue}if(!t)throw Error(`unable to determine transport target for "${e}"`);return t}}t.exports=ne})),require_tools=__commonJSMin$1(((e,t)=>{let s=__require$1(`node:diagnostics_channel`),g=require_quick_format_unescaped(),{mapHttpRequest:S,mapHttpResponse:w}=require_pino_std_serializers(),E=require_sonic_boom(),D=require_on_exit_leak_free(),{lsCacheSym:O,chindingsSym:k,writeSym:j,serializersSym:F,formatOptsSym:L,endSym:B,stringifiersSym:H,stringifySym:q,stringifySafeSym:J,wildcardFirstSym:Y,nestedKeySym:ee,formattersSym:te,messageKeySym:ne,errorKeySym:ae,nestedKeyStrSym:oe,msgPrefixSym:se}=require_symbols(),{isMainThread:ce}=__require$1(`worker_threads`),ue=require_transport(),[de]=process.versions.node.split(`.`).map(e=>Number(e)),fe=s.tracingChannel(`pino_asJson`),me=de>=25?e=>JSON.stringify(e):ve;function ge(){}function _e(e,t){if(!t)return s;return function(...g){t.call(this,g,s,e)};function s(t,...s){if(typeof t==`object`){let E=t;t!==null&&(t.method&&t.headers&&t.socket?t=S(t):typeof t.setHeader==`function`&&(t=w(t)));let D;E===null&&s.length===0?D=[null]:(E=s.shift(),D=s),typeof this[se]==`string`&&E!=null&&(E=this[se]+E),this[j](t,g(E,D,this[L]),e)}else{let S=t===void 0?s.shift():t;typeof this[se]==`string`&&S!=null&&(S=this[se]+S),this[j](null,g(S,s,this[L]),e)}}}function ve(e){let t=``,s=0,g=!1,S=255,w=e.length;if(w>100)return JSON.stringify(e);for(var E=0;E<w&&S>=32;E++)S=e.charCodeAt(E),(S===34||S===92)&&(t+=e.slice(s,E)+`\\`,s=E,g=!0);return g?t+=e.slice(s):t=e,S<32?JSON.stringify(e):`"`+t+`"`}function ye(e,t,s,g){if(fe.hasSubscribers===!1)return Ce.call(this,e,t,s,g);let S={instance:this,arguments};return fe.traceSync(Ce,S,this,e,t,s,g)}function Ce(e,t,s,g){let S=this[q],w=this[J],E=this[H],D=this[B],j=this[k],L=this[F],se=this[te],ce=this[ne],ue=this[ae],de=this[O][s]+g;de+=j;let fe;se.log&&(e=se.log(e));let ge=E[Y],_e=``;for(let t in e)if(fe=e[t],Object.prototype.hasOwnProperty.call(e,t)&&fe!==void 0){L[t]?fe=L[t](fe):t===ue&&L.err&&(fe=L.err(fe));let e=E[t]||ge;switch(typeof fe){case`undefined`:case`function`:continue;case`number`:Number.isFinite(fe)===!1&&(fe=null);case`boolean`:e&&(fe=e(fe));break;case`string`:fe=(e||me)(fe);break;default:fe=(e||S)(fe,w)}if(fe===void 0)continue;let s=me(t);_e+=`,`+s+`:`+fe}let ve=``;if(t!==void 0){fe=L[ce]?L[ce](t):t;let e=E[ce]||ge;switch(typeof fe){case`function`:break;case`number`:Number.isFinite(fe)===!1&&(fe=null);case`boolean`:e&&(fe=e(fe)),ve=`,"`+ce+`":`+fe;break;case`string`:fe=(e||me)(fe),ve=`,"`+ce+`":`+fe;break;default:fe=(e||S)(fe,w),ve=`,"`+ce+`":`+fe}}return this[ee]&&_e?de+this[oe]+_e.slice(1)+`}`+ve+D:de+_e+ve+D}function we(e,t){let s,g=e[k],S=e[q],w=e[J],E=e[H],D=E[Y],O=e[F],j=e[te].bindings;t=j(t);for(let e in t)if(s=t[e],((e.length<5||e!==`level`&&e!==`serializers`&&e!==`formatters`&&e!==`customLevels`)&&t.hasOwnProperty(e)&&s!==void 0)===!0){if(s=O[e]?O[e](s):s,s=(E[e]||D||S)(s,w),s===void 0)continue;g+=`,"`+e+`":`+s}return g}function Te(e){return e.write!==e.constructor.prototype.write}function De(e){let t=new E(e);return t.on(`error`,s),!e.sync&&ce&&(D.register(t,je),t.on(`close`,function(){D.unregister(t)})),t;function s(e){if(e.code===`EPIPE`){t.write=ge,t.end=ge,t.flushSync=ge,t.destroy=ge;return}t.removeListener(`error`,s),t.emit(`error`,e)}}function je(e,t){e.destroyed||(t===`beforeExit`?(e.flush(),e.on(`drain`,function(){e.end()})):e.flushSync())}function Me(e){return function(t,s,g={},S){if(typeof g==`string`)S=De({dest:g}),g={};else if(typeof S==`string`){if(g&&g.transport)throw Error(`only one of option.transport or stream can be specified`);S=De({dest:S})}else if(g instanceof E||g.writable||g._writableState)S=g,g={};else if(g.transport){if(g.transport instanceof E||g.transport.writable||g.transport._writableState)throw Error(`option.transport do not allow stream, please pass to option directly. e.g. pino(transport)`);if(g.transport.targets&&g.transport.targets.length&&g.formatters&&typeof g.formatters.level==`function`)throw Error(`option.transport.targets do not allow custom level formatters`);let e;g.customLevels&&(e=g.useOnlyCustomLevels?g.customLevels:Object.assign({},g.levels,g.customLevels)),S=ue({caller:s,...g.transport,levels:e})}if(g=Object.assign({},e,g),g.serializers=Object.assign({},e.serializers,g.serializers),g.formatters=Object.assign({},e.formatters,g.formatters),g.prettyPrint)throw Error(`prettyPrint option is no longer supported, see the pino-pretty package (https://github.com/pinojs/pino-pretty)`);let{enabled:w,onChild:D}=g;return w===!1&&(g.level=`silent`),D||(g.onChild=ge),S||=Te(process.stdout)?process.stdout:De({fd:process.stdout.fd||1}),{opts:g,stream:S}}}function Pe(e,t){try{return JSON.stringify(e)}catch{try{return(t||this[J])(e)}catch{return`"[unable to serialize, circular reference is too complex to analyze]"`}}}function Ie(e,t,s){return{level:e,bindings:t,log:s}}function Re(e){let t=Number(e);return typeof e==`string`&&Number.isFinite(t)?t:e===void 0?1:e}t.exports={noop:ge,buildSafeSonicBoom:De,asChindings:we,asJson:ye,genLog:_e,createArgsNormalizer:Me,stringify:Pe,buildFormatters:Ie,normalizeDestFileDescriptor:Re}})),require_constants$7=__commonJSMin$1(((e,t)=>{t.exports={DEFAULT_LEVELS:{trace:10,debug:20,info:30,warn:40,error:50,fatal:60},SORTING_ORDER:{ASC:`ASC`,DESC:`DESC`}}})),require_levels=__commonJSMin$1(((e,t)=>{let{lsCacheSym:s,levelValSym:g,useOnlyCustomLevelsSym:S,streamSym:w,formattersSym:E,hooksSym:D,levelCompSym:O}=require_symbols(),{noop:k,genLog:j}=require_tools(),{DEFAULT_LEVELS:F,SORTING_ORDER:L}=require_constants$7(),B={fatal:e=>{let t=j(F.fatal,e);return function(...e){let s=this[w];if(t.call(this,...e),typeof s.flushSync==`function`)try{s.flushSync()}catch{}}},error:e=>j(F.error,e),warn:e=>j(F.warn,e),info:e=>j(F.info,e),debug:e=>j(F.debug,e),trace:e=>j(F.trace,e)},H=Object.keys(F).reduce((e,t)=>(e[F[t]]=t,e),{}),q=Object.keys(H).reduce((e,t)=>(e[t]=`{"level":`+Number(t),e),{});function J(e){let t=e[E].level,{labels:g}=e.levels,S={};for(let e in g){let s=t(g[e],Number(e));S[e]=JSON.stringify(s).slice(0,-1)}return e[s]=S,e}function Y(e,t){if(t)return!1;switch(e){case`fatal`:case`error`:case`warn`:case`info`:case`debug`:case`trace`:return!0;default:return!1}}function ee(e){let{labels:t,values:s}=this.levels;if(typeof e==`number`){if(t[e]===void 0)throw Error(`unknown level value`+e);e=t[e]}if(s[e]===void 0)throw Error(`unknown level `+e);let w=this[g],E=this[g]=s[e],F=this[S],L=this[O],H=this[D].logMethod;for(let e in s){if(L(s[e],E)===!1){this[e]=k;continue}this[e]=Y(e,F)?B[e](H):j(s[e],H)}this.emit(`level-change`,e,E,t[w],w,this)}function te(e){let{levels:t,levelVal:s}=this;return t&&t.labels?t.labels[s]:``}function ne(e){let{values:t}=this.levels,s=t[e];return s!==void 0&&this[O](s,this[g])}function ae(e,t,s){return e===L.DESC?t<=s:t>=s}function oe(e){return typeof e==`string`?ae.bind(null,e):e}function se(e=null,t=!1){let s=e?Object.keys(e).reduce((t,s)=>(t[e[s]]=s,t),{}):null;return{labels:Object.assign(Object.create(Object.prototype,{Infinity:{value:`silent`}}),t?null:H,s),values:Object.assign(Object.create(Object.prototype,{silent:{value:1/0}}),t?null:F,e)}}function ce(e,t,s){if(typeof e==`number`){if(![].concat(Object.keys(t||{}).map(e=>t[e]),s?[]:Object.keys(H).map(e=>+e),1/0).includes(e))throw Error(`default level:${e} must be included in custom levels`);return}if(!(e in Object.assign(Object.create(Object.prototype,{silent:{value:1/0}}),s?null:F,t)))throw Error(`default level:${e} must be included in custom levels`)}function ue(e,t){let{labels:s,values:g}=e;for(let e in t){if(e in g)throw Error(`levels cannot be overridden`);if(t[e]in s)throw Error(`pre-existing level values cannot be used for new levels`)}}function de(e){if(typeof e!=`function`&&!(typeof e==`string`&&Object.values(L).includes(e)))throw Error(`Levels comparison should be one of "ASC", "DESC" or "function" type`)}t.exports={initialLsCache:q,genLsCache:J,levelMethods:B,getLevel:te,setLevel:ee,isLevelEnabled:ne,mappings:se,assertNoLevelCollisions:ue,assertDefaultLevelFound:ce,genLevelComparison:oe,assertLevelComparison:de}})),require_meta=__commonJSMin$1(((e,t)=>{t.exports={version:`10.3.1`}})),require_proto=__commonJSMin$1(((e,t)=>{let{EventEmitter:s}=__require$1(`node:events`),{lsCacheSym:g,levelValSym:S,setLevelSym:w,getLevelSym:E,chindingsSym:D,mixinSym:O,asJsonSym:k,writeSym:j,mixinMergeStrategySym:F,timeSym:L,timeSliceIndexSym:B,streamSym:H,serializersSym:q,formattersSym:J,errorKeySym:Y,messageKeySym:ee,useOnlyCustomLevelsSym:te,needsMetadataGsym:ne,redactFmtSym:ae,stringifySym:oe,formatOptsSym:se,stringifiersSym:ce,msgPrefixSym:ue,hooksSym:de}=require_symbols(),{getLevel:fe,setLevel:me,isLevelEnabled:ge,mappings:_e,initialLsCache:ve,genLsCache:ye,assertNoLevelCollisions:Ce}=require_levels(),{asChindings:we,asJson:Te,buildFormatters:De,stringify:je,noop:Me}=require_tools(),{version:Pe}=require_meta(),Ie=require_redaction(),Re={constructor:class{},child:Be,bindings:Ve,setBindings:Ue,flush:Ke,isLevelEnabled:ge,version:Pe,get level(){return this[E]()},set level(e){this[w](e)},get levelVal(){return this[S]},set levelVal(e){throw Error(`levelVal is read-only`)},get msgPrefix(){return this[ue]},get[Symbol.toStringTag](){return`Pino`},[g]:ve,[j]:Ge,[k]:Te,[E]:fe,[w]:me};Object.setPrototypeOf(Re,s.prototype),t.exports=function(){return Object.create(Re)};let ze=e=>e;function Be(e,t){if(!e)throw Error(`missing bindings for child Pino`);let s=this[q],g=this[J],S=Object.create(this);if(t==null)return S[J].bindings!==ze&&(S[J]=De(g.level,ze,g.log)),S[D]=we(S,e),this.onChild!==Me&&this.onChild(S),S;if(t.hasOwnProperty(`serializers`)===!0){S[q]=Object.create(null);for(let e in s)S[q][e]=s[e];let e=Object.getOwnPropertySymbols(s);for(var E=0;E<e.length;E++){let t=e[E];S[q][t]=s[t]}for(let e in t.serializers)S[q][e]=t.serializers[e];let g=Object.getOwnPropertySymbols(t.serializers);for(var O=0;O<g.length;O++){let e=g[O];S[q][e]=t.serializers[e]}}else S[q]=s;if(t.hasOwnProperty(`formatters`)){let{level:e,bindings:s,log:w}=t.formatters;S[J]=De(e||g.level,s||ze,w||g.log)}else S[J]=De(g.level,ze,g.log);if(t.hasOwnProperty(`customLevels`)===!0&&(Ce(this.levels,t.customLevels),S.levels=_e(t.customLevels,S[te]),ye(S)),typeof t.redact==`object`&&t.redact!==null||Array.isArray(t.redact)){S.redact=t.redact;let e=Ie(S.redact,je),s={stringify:e[ae]};S[oe]=je,S[ce]=e,S[se]=s}if(typeof t.msgPrefix==`string`&&(S[ue]=(this[ue]||``)+t.msgPrefix),S[D]=we(S,e),t.level!==void 0&&t.level!==this.level||t.hasOwnProperty(`customLevels`)){let e=t.level||this.level;S[w](e)}return this.onChild(S),S}function Ve(){let e=`{${this[D].substr(1)}}`,t=JSON.parse(e);return delete t.pid,delete t.hostname,t}function Ue(e){this[D]=we(this,e)}function We(e,t){return Object.assign(t,e)}function Ge(e,t,s){let g=this[L](),S=this[O],w=this[Y],E=this[ee],D=this[F]||We,j,q=this[de].streamWrite;e==null?j={}:e instanceof Error?(j={[w]:e},t===void 0&&(t=e.message)):(j=e,t===void 0&&e[E]===void 0&&e[w]&&(t=e[w].message)),S&&(j=D(j,S(j,s,this)));let J=this[k](j,t,s,g),te=this[H];te[ne]===!0&&(te.lastLevel=s,te.lastObj=j,te.lastMsg=t,te.lastTime=g.slice(this[B]),te.lastLogger=this),te.write(q?q(J):J)}function Ke(e){if(e!=null&&typeof e!=`function`)throw Error(`callback must be a function`);let t=this[H];typeof t.flush==`function`?t.flush(e||Me):e&&e()}})),require_safe_stable_stringify=__commonJSMin$1(((e,t)=>{let{hasOwnProperty:s}=Object.prototype,g=Y();g.configure=Y,g.stringify=g,g.default=g,e.stringify=g,e.configure=Y,t.exports=g;let S=/[\u0000-\u001f\u0022\u005c\ud800-\udfff]/;function w(e){return e.length<5e3&&!S.test(e)?`"${e}"`:JSON.stringify(e)}function E(e,t){if(e.length>200||t)return e.sort(t);for(let t=1;t<e.length;t++){let s=e[t],g=t;for(;g!==0&&e[g-1]>s;)e[g]=e[g-1],g--;e[g]=s}return e}let D=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Object.getPrototypeOf(new Int8Array)),Symbol.toStringTag).get;function O(e){return D.call(e)!==void 0&&e.length!==0}function k(e,t,s){e.length<s&&(s=e.length);let g=t===`,`?``:` `,S=`"0":${g}${e[0]}`;for(let w=1;w<s;w++)S+=`${t}"${w}":${g}${e[w]}`;return S}function j(e){if(s.call(e,`circularValue`)){let t=e.circularValue;if(typeof t==`string`)return`"${t}"`;if(t==null)return t;if(t===Error||t===TypeError)return{toString(){throw TypeError(`Converting circular structure to JSON`)}};throw TypeError(`The "circularValue" argument must be of type string or the value null or undefined`)}return`"[Circular]"`}function F(e){let t;if(s.call(e,`deterministic`)&&(t=e.deterministic,typeof t!=`boolean`&&typeof t!=`function`))throw TypeError(`The "deterministic" argument must be of type boolean or comparator function`);return t===void 0?!0:t}function L(e,t){let g;if(s.call(e,t)&&(g=e[t],typeof g!=`boolean`))throw TypeError(`The "${t}" argument must be of type boolean`);return g===void 0?!0:g}function B(e,t){let g;if(s.call(e,t)){if(g=e[t],typeof g!=`number`)throw TypeError(`The "${t}" argument must be of type number`);if(!Number.isInteger(g))throw TypeError(`The "${t}" argument must be an integer`);if(g<1)throw RangeError(`The "${t}" argument must be >= 1`)}return g===void 0?1/0:g}function H(e){return e===1?`1 item`:`${e} items`}function q(e){let t=new Set;for(let s of e)(typeof s==`string`||typeof s==`number`)&&t.add(String(s));return t}function J(e){if(s.call(e,`strict`)){let t=e.strict;if(typeof t!=`boolean`)throw TypeError(`The "strict" argument must be of type boolean`);if(t)return e=>{let t=`Object can not safely be stringified. Received type ${typeof e}`;throw typeof e!=`function`&&(t+=` (${e.toString()})`),Error(t)}}}function Y(e){e={...e};let t=J(e);t&&(e.bigint===void 0&&(e.bigint=!1),`circularValue`in e||(e.circularValue=Error));let s=j(e),g=L(e,`bigint`),S=F(e),D=typeof S==`function`?S:void 0,Y=B(e,`maximumDepth`),ee=B(e,`maximumBreadth`);function te(e,k,j,F,L,B){let q=k[e];switch(typeof q==`object`&&q&&typeof q.toJSON==`function`&&(q=q.toJSON(e)),q=F.call(k,e,q),typeof q){case`string`:return w(q);case`object`:{if(q===null)return`null`;if(j.indexOf(q)!==-1)return s;let e=``,t=`,`,g=B;if(Array.isArray(q)){if(q.length===0)return`[]`;if(Y<j.length+1)return`"[Array]"`;j.push(q),L!==``&&(B+=L,e+=`\n${B}`,t=`,\n${B}`);let s=Math.min(q.length,ee),S=0;for(;S<s-1;S++){let s=te(String(S),q,j,F,L,B);e+=s===void 0?`null`:s,e+=t}let w=te(String(S),q,j,F,L,B);if(e+=w===void 0?`null`:w,q.length-1>ee){let s=q.length-ee-1;e+=`${t}"... ${H(s)} not stringified"`}return L!==``&&(e+=`\n${g}`),j.pop(),`[${e}]`}let k=Object.keys(q),J=k.length;if(J===0)return`{}`;if(Y<j.length+1)return`"[Object]"`;let ne=``,ae=``;L!==``&&(B+=L,t=`,\n${B}`,ne=` `);let oe=Math.min(J,ee);S&&!O(q)&&(k=E(k,D)),j.push(q);for(let s=0;s<oe;s++){let g=k[s],S=te(g,q,j,F,L,B);S!==void 0&&(e+=`${ae}${w(g)}:${ne}${S}`,ae=t)}if(J>ee){let s=J-ee;e+=`${ae}"...":${ne}"${H(s)} not stringified"`,ae=t}return L!==``&&ae.length>1&&(e=`\n${B}${e}\n${g}`),j.pop(),`{${e}}`}case`number`:return isFinite(q)?String(q):t?t(q):`null`;case`boolean`:return q===!0?`true`:`false`;case`undefined`:return;case`bigint`:if(g)return String(q);default:return t?t(q):void 0}}function ne(e,S,E,D,O,k){switch(typeof S==`object`&&S&&typeof S.toJSON==`function`&&(S=S.toJSON(e)),typeof S){case`string`:return w(S);case`object`:{if(S===null)return`null`;if(E.indexOf(S)!==-1)return s;let e=k,t=``,g=`,`;if(Array.isArray(S)){if(S.length===0)return`[]`;if(Y<E.length+1)return`"[Array]"`;E.push(S),O!==``&&(k+=O,t+=`\n${k}`,g=`,\n${k}`);let s=Math.min(S.length,ee),w=0;for(;w<s-1;w++){let e=ne(String(w),S[w],E,D,O,k);t+=e===void 0?`null`:e,t+=g}let j=ne(String(w),S[w],E,D,O,k);if(t+=j===void 0?`null`:j,S.length-1>ee){let e=S.length-ee-1;t+=`${g}"... ${H(e)} not stringified"`}return O!==``&&(t+=`\n${e}`),E.pop(),`[${t}]`}E.push(S);let j=``;O!==``&&(k+=O,g=`,\n${k}`,j=` `);let F=``;for(let e of D){let s=ne(e,S[e],E,D,O,k);s!==void 0&&(t+=`${F}${w(e)}:${j}${s}`,F=g)}return O!==``&&F.length>1&&(t=`\n${k}${t}\n${e}`),E.pop(),`{${t}}`}case`number`:return isFinite(S)?String(S):t?t(S):`null`;case`boolean`:return S===!0?`true`:`false`;case`undefined`:return;case`bigint`:if(g)return String(S);default:return t?t(S):void 0}}function ae(e,j,F,L,B){switch(typeof j){case`string`:return w(j);case`object`:{if(j===null)return`null`;if(typeof j.toJSON==`function`){if(j=j.toJSON(e),typeof j!=`object`)return ae(e,j,F,L,B);if(j===null)return`null`}if(F.indexOf(j)!==-1)return s;let t=B;if(Array.isArray(j)){if(j.length===0)return`[]`;if(Y<F.length+1)return`"[Array]"`;F.push(j),B+=L;let e=`\n${B}`,s=`,\n${B}`,g=Math.min(j.length,ee),S=0;for(;S<g-1;S++){let t=ae(String(S),j[S],F,L,B);e+=t===void 0?`null`:t,e+=s}let w=ae(String(S),j[S],F,L,B);if(e+=w===void 0?`null`:w,j.length-1>ee){let t=j.length-ee-1;e+=`${s}"... ${H(t)} not stringified"`}return e+=`\n${t}`,F.pop(),`[${e}]`}let g=Object.keys(j),q=g.length;if(q===0)return`{}`;if(Y<F.length+1)return`"[Object]"`;B+=L;let J=`,\n${B}`,te=``,ne=``,oe=Math.min(q,ee);O(j)&&(te+=k(j,J,ee),g=g.slice(j.length),oe-=j.length,ne=J),S&&(g=E(g,D)),F.push(j);for(let e=0;e<oe;e++){let t=g[e],s=ae(t,j[t],F,L,B);s!==void 0&&(te+=`${ne}${w(t)}: ${s}`,ne=J)}if(q>ee){let e=q-ee;te+=`${ne}"...": "${H(e)} not stringified"`,ne=J}return ne!==``&&(te=`\n${B}${te}\n${t}`),F.pop(),`{${te}}`}case`number`:return isFinite(j)?String(j):t?t(j):`null`;case`boolean`:return j===!0?`true`:`false`;case`undefined`:return;case`bigint`:if(g)return String(j);default:return t?t(j):void 0}}function oe(e,j,F){switch(typeof j){case`string`:return w(j);case`object`:{if(j===null)return`null`;if(typeof j.toJSON==`function`){if(j=j.toJSON(e),typeof j!=`object`)return oe(e,j,F);if(j===null)return`null`}if(F.indexOf(j)!==-1)return s;let t=``,g=j.length!==void 0;if(g&&Array.isArray(j)){if(j.length===0)return`[]`;if(Y<F.length+1)return`"[Array]"`;F.push(j);let e=Math.min(j.length,ee),s=0;for(;s<e-1;s++){let e=oe(String(s),j[s],F);t+=e===void 0?`null`:e,t+=`,`}let g=oe(String(s),j[s],F);if(t+=g===void 0?`null`:g,j.length-1>ee){let e=j.length-ee-1;t+=`,"... ${H(e)} not stringified"`}return F.pop(),`[${t}]`}let L=Object.keys(j),B=L.length;if(B===0)return`{}`;if(Y<F.length+1)return`"[Object]"`;let q=``,J=Math.min(B,ee);g&&O(j)&&(t+=k(j,`,`,ee),L=L.slice(j.length),J-=j.length,q=`,`),S&&(L=E(L,D)),F.push(j);for(let e=0;e<J;e++){let s=L[e],g=oe(s,j[s],F);g!==void 0&&(t+=`${q}${w(s)}:${g}`,q=`,`)}if(B>ee){let e=B-ee;t+=`${q}"...":"${H(e)} not stringified"`}return F.pop(),`{${t}}`}case`number`:return isFinite(j)?String(j):t?t(j):`null`;case`boolean`:return j===!0?`true`:`false`;case`undefined`:return;case`bigint`:if(g)return String(j);default:return t?t(j):void 0}}function se(e,t,s){if(arguments.length>1){let g=``;if(typeof s==`number`?g=` `.repeat(Math.min(s,10)):typeof s==`string`&&(g=s.slice(0,10)),t!=null){if(typeof t==`function`)return te(``,{"":e},[],t,g,``);if(Array.isArray(t))return ne(``,e,[],q(t),g,``)}if(g.length!==0)return ae(``,e,[],g,``)}return oe(``,e,[])}return se}})),require_multistream=__commonJSMin$1(((e,t)=>{let s=Symbol.for(`pino.metadata`),{DEFAULT_LEVELS:g}=require_constants$7(),S=g.info;function w(e,t){e||=[],t||={dedupe:!1};let w=Object.create(g);w.silent=1/0,t.levels&&typeof t.levels==`object`&&Object.keys(t.levels).forEach(e=>{w[e]=t.levels[e]});let j={write:F,add:H,remove:q,emit:L,flushSync:B,end:J,minLevel:0,lastId:0,streams:[],clone:Y,[s]:!0,streamLevels:w};return Array.isArray(e)?e.forEach(H,j):H.call(j,e),e=null,j;function F(e){let g,S=this.lastLevel,{streams:w}=this,E=0,j;for(let F=D(w.length,t.dedupe);k(F,w.length,t.dedupe);F=O(F,t.dedupe))if(g=w[F],g.level<=S){if(E!==0&&E!==g.level)break;if(j=g.stream,j[s]){let{lastTime:e,lastMsg:t,lastObj:s,lastLogger:g}=this;j.lastLevel=S,j.lastTime=e,j.lastMsg=t,j.lastObj=s,j.lastLogger=g}j.write(e),t.dedupe&&(E=g.level)}else if(!t.dedupe)break}function L(...e){for(let{stream:t}of this.streams)typeof t.emit==`function`&&t.emit(...e)}function B(){for(let{stream:e}of this.streams)typeof e.flushSync==`function`&&e.flushSync()}function H(e){if(!e)return j;let t=typeof e.write==`function`||e.stream,s=e.write?e:e.stream;if(!t)throw Error(`stream object needs to implement either StreamEntry or DestinationStream interface`);let{streams:g,streamLevels:w}=this,D;D=typeof e.levelVal==`number`?e.levelVal:typeof e.level==`string`?w[e.level]:typeof e.level==`number`?e.level:S;let O={stream:s,level:D,levelVal:void 0,id:++j.lastId};return g.unshift(O),g.sort(E),this.minLevel=g[0].level,j}function q(e){let{streams:t}=this,s=t.findIndex(t=>t.id===e);return s>=0&&(t.splice(s,1),t.sort(E),this.minLevel=t.length>0?t[0].level:-1),j}function J(){for(let{stream:e}of this.streams)typeof e.flushSync==`function`&&e.flushSync(),e.end()}function Y(e){let t=Array(this.streams.length);for(let s=0;s<t.length;s++)t[s]={level:e,stream:this.streams[s].stream};return{write:F,add:H,remove:q,minLevel:e,streams:t,clone:Y,emit:L,flushSync:B,[s]:!0}}}function E(e,t){return e.level-t.level}function D(e,t){return t?e-1:0}function O(e,t){return t?e-1:e+1}function k(e,t,s){return s?e>=0:e<t}t.exports=w})),require_pino=__commonJSMin$1(((e,t)=>{let s=__require$1(`node:os`),g=require_pino_std_serializers(),S=require_caller(),w=require_redaction(),E=require_time$4(),D=require_proto(),O=require_symbols(),{configure:k}=require_safe_stable_stringify(),{assertDefaultLevelFound:j,mappings:F,genLsCache:L,genLevelComparison:B,assertLevelComparison:H}=require_levels(),{DEFAULT_LEVELS:q,SORTING_ORDER:J}=require_constants$7(),{createArgsNormalizer:Y,asChindings:ee,buildSafeSonicBoom:te,buildFormatters:ne,stringify:ae,normalizeDestFileDescriptor:oe,noop:se}=require_tools(),{version:ce}=require_meta(),{chindingsSym:ue,redactFmtSym:de,serializersSym:fe,timeSym:me,timeSliceIndexSym:ge,streamSym:_e,stringifySym:ve,stringifySafeSym:ye,stringifiersSym:Ce,setLevelSym:we,endSym:Te,formatOptsSym:De,messageKeySym:je,errorKeySym:Me,nestedKeySym:Pe,mixinSym:Ie,levelCompSym:Re,useOnlyCustomLevelsSym:ze,formattersSym:Be,hooksSym:Ve,nestedKeyStrSym:Ue,mixinMergeStrategySym:We,msgPrefixSym:Ge}=O,{epochTime:Ke,nullTime:Xe}=E,{pid:$e}=process,nt=s.hostname(),rt=g.err,it=Y({level:`info`,levelComparison:J.ASC,levels:q,messageKey:`msg`,errorKey:`err`,nestedKey:null,enabled:!0,base:{pid:$e,hostname:nt},serializers:Object.assign(Object.create(null),{err:rt}),formatters:Object.assign(Object.create(null),{bindings(e){return e},level(e,t){return{level:t}}}),hooks:{logMethod:void 0,streamWrite:void 0},timestamp:Ke,name:void 0,redact:null,customLevels:null,useOnlyCustomLevels:!1,depthLimit:5,edgeLimit:100}),at=Object.assign(Object.create(null),g);function st(...e){let t={},{opts:s,stream:g}=it(t,S(),...e);s.level&&typeof s.level==`string`&&q[s.level.toLowerCase()]!==void 0&&(s.level=s.level.toLowerCase());let{redact:E,crlf:O,serializers:J,timestamp:Y,messageKey:te,errorKey:oe,nestedKey:ce,base:$e,name:nt,level:rt,customLevels:at,levelComparison:st,mixin:vt,mixinMergeStrategy:Tt,useOnlyCustomLevels:Et,formatters:Dt,hooks:jt,depthLimit:Mt,edgeLimit:Ft,onChild:It,msgPrefix:Lt}=s,Rt=k({maximumDepth:Mt,maximumBreadth:Ft}),zt=ne(Dt.level,Dt.bindings,Dt.log),Bt=ae.bind({[ye]:Rt}),Vt=E?w(E,Bt):{},Ht=E?{stringify:Vt[de]}:{stringify:Bt},Ut=`}`+(O?`\r
@@ -52,7 +52,7 @@ To resolve the conflict:`,(0,g.getConflictResolutionRecipe)(S,e))),w=E):s.diag.w
52
52
  || ${D} === "boolean" || ${w} === null`).assign(O,(0,S._)`[${w}]`)}}}function B({gen:e,parentData:t,parentDataProperty:s},g){e.if((0,S._)`${t} !== undefined`,()=>e.assign((0,S._)`${t}[${s}]`,g))}function H(e,t,s,g=E.Correct){let w=g===E.Correct?S.operators.EQ:S.operators.NEQ,D;switch(e){case`null`:return(0,S._)`${t} ${w} null`;case`array`:D=(0,S._)`Array.isArray(${t})`;break;case`object`:D=(0,S._)`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case`integer`:D=O((0,S._)`!(${t} % 1) && !isNaN(${t})`);break;case`number`:D=O();break;default:return(0,S._)`typeof ${t} ${w} ${e}`}return g===E.Correct?D:(0,S.not)(D);function O(e=S.nil){return(0,S.and)((0,S._)`typeof ${t} == "number"`,e,s?(0,S._)`isFinite(${t})`:S.nil)}}e.checkDataType=H;function q(e,t,s,g){if(e.length===1)return H(e[0],t,s,g);let E,D=(0,w.toHash)(e);if(D.array&&D.object){let e=(0,S._)`typeof ${t} != "object"`;E=D.null?e:(0,S._)`!${t} || ${e}`,delete D.null,delete D.array,delete D.object}else E=S.nil;D.number&&delete D.integer;for(let e in D)E=(0,S.and)(E,H(e,t,s,g));return E}e.checkDataTypes=q;let J={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>typeof e==`string`?(0,S._)`{type: ${e}}`:(0,S._)`{type: ${t}}`};function Y(e){let t=ee(e);(0,g.reportError)(t,J)}e.reportTypeError=Y;function ee(e){let{gen:t,data:s,schema:g}=e,S=(0,w.schemaRefOrVal)(e,g,`type`);return{gen:t,keyword:`type`,data:s,schema:g.type,schemaCode:S,schemaValue:S,parentSchema:g,params:{},it:e}}})),require_defaults=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.assignDefaults=void 0;let t=require_codegen(),s=require_util();function g(e,t){let{properties:s,items:g}=e.schema;if(t===`object`&&s)for(let t in s)S(e,t,s[t].default);else t===`array`&&Array.isArray(g)&&g.forEach((t,s)=>S(e,s,t.default))}e.assignDefaults=g;function S(e,g,S){let{gen:w,compositeRule:E,data:D,opts:O}=e;if(S===void 0)return;let k=(0,t._)`${D}${(0,t.getProperty)(g)}`;if(E){(0,s.checkStrictMode)(e,`default is ignored for: ${k}`);return}let j=(0,t._)`${k} === undefined`;O.useDefaults===`empty`&&(j=(0,t._)`${j} || ${k} === null || ${k} === ""`),w.if(j,(0,t._)`${k} = ${(0,t.stringify)(S)}`)}})),require_code=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateUnion=e.validateArray=e.usePattern=e.callValidateCode=e.schemaProperties=e.allSchemaProperties=e.noPropertyInData=e.propertyInData=e.isOwnProperty=e.hasPropFunc=e.reportMissingProp=e.checkMissingProp=e.checkReportMissingProp=void 0;let t=require_codegen(),s=require_util(),g=require_names(),S=require_util();function w(e,s){let{gen:g,data:S,it:w}=e;g.if(F(g,S,s,w.opts.ownProperties),()=>{e.setParams({missingProperty:(0,t._)`${s}`},!0),e.error()})}e.checkReportMissingProp=w;function E({gen:e,data:s,it:{opts:g}},S,w){return(0,t.or)(...S.map(S=>(0,t.and)(F(e,s,S,g.ownProperties),(0,t._)`${w} = ${S}`)))}e.checkMissingProp=E;function D(e,t){e.setParams({missingProperty:t},!0),e.error()}e.reportMissingProp=D;function O(e){return e.scopeValue(`func`,{ref:Object.prototype.hasOwnProperty,code:(0,t._)`Object.prototype.hasOwnProperty`})}e.hasPropFunc=O;function k(e,s,g){return(0,t._)`${O(e)}.call(${s}, ${g})`}e.isOwnProperty=k;function j(e,s,g,S){let w=(0,t._)`${s}${(0,t.getProperty)(g)} !== undefined`;return S?(0,t._)`${w} && ${k(e,s,g)}`:w}e.propertyInData=j;function F(e,s,g,S){let w=(0,t._)`${s}${(0,t.getProperty)(g)} === undefined`;return S?(0,t.or)(w,(0,t.not)(k(e,s,g))):w}e.noPropertyInData=F;function L(e){return e?Object.keys(e).filter(e=>e!==`__proto__`):[]}e.allSchemaProperties=L;function B(e,t){return L(t).filter(g=>!(0,s.alwaysValidSchema)(e,t[g]))}e.schemaProperties=B;function H({schemaCode:e,data:s,it:{gen:S,topSchemaRef:w,schemaPath:E,errorPath:D},it:O},k,j,F){let L=F?(0,t._)`${e}, ${s}, ${w}${E}`:s,B=[[g.default.instancePath,(0,t.strConcat)(g.default.instancePath,D)],[g.default.parentData,O.parentData],[g.default.parentDataProperty,O.parentDataProperty],[g.default.rootData,g.default.rootData]];O.opts.dynamicRef&&B.push([g.default.dynamicAnchors,g.default.dynamicAnchors]);let H=(0,t._)`${L}, ${S.object(...B)}`;return j===t.nil?(0,t._)`${k}(${H})`:(0,t._)`${k}.call(${j}, ${H})`}e.callValidateCode=H;let q=(0,t._)`new RegExp`;function J({gen:e,it:{opts:s}},g){let w=s.unicodeRegExp?`u`:``,{regExp:E}=s.code,D=E(g,w);return e.scopeValue(`pattern`,{key:D.toString(),ref:D,code:(0,t._)`${E.code===`new RegExp`?q:(0,S.useFunc)(e,E)}(${g}, ${w})`})}e.usePattern=J;function Y(e){let{gen:g,data:S,keyword:w,it:E}=e,D=g.name(`valid`);if(E.allErrors){let e=g.let(`valid`,!0);return O(()=>g.assign(e,!1)),e}return g.var(D,!0),O(()=>g.break()),D;function O(E){let O=g.const(`len`,(0,t._)`${S}.length`);g.forRange(`i`,0,O,S=>{e.subschema({keyword:w,dataProp:S,dataPropType:s.Type.Num},D),g.if((0,t.not)(D),E)})}}e.validateArray=Y;function ee(e){let{gen:g,schema:S,keyword:w,it:E}=e;if(!Array.isArray(S))throw Error(`ajv implementation error`);if(S.some(e=>(0,s.alwaysValidSchema)(E,e))&&!E.opts.unevaluated)return;let D=g.let(`valid`,!1),O=g.name(`_valid`);g.block(()=>S.forEach((s,S)=>{let E=e.subschema({keyword:w,schemaProp:S,compositeRule:!0},O);g.assign(D,(0,t._)`${D} || ${O}`),e.mergeValidEvaluated(E,O)||g.if((0,t.not)(D))})),e.result(D,()=>e.reset(),()=>e.error(!0))}e.validateUnion=ee})),require_keyword=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateKeywordUsage=e.validSchemaType=e.funcKeywordCode=e.macroKeywordCode=void 0;let t=require_codegen(),s=require_names(),g=require_code(),S=require_errors();function w(e,s){let{gen:g,keyword:S,schema:w,parentSchema:E,it:D}=e,O=s.macro.call(D.self,w,E,D),k=j(g,S,O);D.opts.validateSchema!==!1&&D.self.validateSchema(O,!0);let F=g.name(`valid`);e.subschema({schema:O,schemaPath:t.nil,errSchemaPath:`${D.errSchemaPath}/${S}`,topSchemaRef:k,compositeRule:!0},F),e.pass(F,()=>e.error(!0))}e.macroKeywordCode=w;function E(e,S){var w;let{gen:E,keyword:F,schema:L,parentSchema:B,$data:H,it:q}=e;k(q,S);let J=j(E,F,!H&&S.compile?S.compile.call(q.self,L,B,q):S.validate),Y=E.let(`valid`);e.block$data(Y,ee),e.ok(S.valid??Y);function ee(){if(S.errors===!1)ae(),S.modifying&&D(e),oe(()=>e.error());else{let t=S.async?te():ne();S.modifying&&D(e),oe(()=>O(e,t))}}function te(){let e=E.let(`ruleErrs`,null);return E.try(()=>ae((0,t._)`await `),s=>E.assign(Y,!1).if((0,t._)`${s} instanceof ${q.ValidationError}`,()=>E.assign(e,(0,t._)`${s}.errors`),()=>E.throw(s))),e}function ne(){let e=(0,t._)`${J}.errors`;return E.assign(e,null),ae(t.nil),e}function ae(w=S.async?(0,t._)`await `:t.nil){let D=q.opts.passContext?s.default.this:s.default.self,O=!(`compile`in S&&!H||S.schema===!1);E.assign(Y,(0,t._)`${w}${(0,g.callValidateCode)(e,J,D,O)}`,S.modifying)}function oe(e){var s;E.if((0,t.not)(S.valid??Y),e)}}e.funcKeywordCode=E;function D(e){let{gen:s,data:g,it:S}=e;s.if(S.parentData,()=>s.assign(g,(0,t._)`${S.parentData}[${S.parentDataProperty}]`))}function O(e,g){let{gen:w}=e;w.if((0,t._)`Array.isArray(${g})`,()=>{w.assign(s.default.vErrors,(0,t._)`${s.default.vErrors} === null ? ${g} : ${s.default.vErrors}.concat(${g})`).assign(s.default.errors,(0,t._)`${s.default.vErrors}.length`),(0,S.extendErrors)(e)},()=>e.error())}function k({schemaEnv:e},t){if(t.async&&!e.$async)throw Error(`async keyword in sync schema`)}function j(e,s,g){if(g===void 0)throw Error(`keyword "${s}" failed to compile`);return e.scopeValue(`keyword`,typeof g==`function`?{ref:g}:{ref:g,code:(0,t.stringify)(g)})}function F(e,t,s=!1){return!t.length||t.some(t=>t===`array`?Array.isArray(e):t===`object`?e&&typeof e==`object`&&!Array.isArray(e):typeof e==t||s&&e===void 0)}e.validSchemaType=F;function L({schema:e,opts:t,self:s,errSchemaPath:g},S,w){if(Array.isArray(S.keyword)?!S.keyword.includes(w):S.keyword!==w)throw Error(`ajv implementation error`);let E=S.dependencies;if(E?.some(t=>!Object.prototype.hasOwnProperty.call(e,t)))throw Error(`parent schema must have dependencies of ${w}: ${E.join(`,`)}`);if(S.validateSchema&&!S.validateSchema(e[w])){let e=`keyword "${w}" value is invalid at path "${g}": `+s.errorsText(S.validateSchema.errors);if(t.validateSchema===`log`)s.logger.error(e);else throw Error(e)}}e.validateKeywordUsage=L})),require_subschema=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.extendSubschemaMode=e.extendSubschemaData=e.getSubschema=void 0;let t=require_codegen(),s=require_util();function g(e,{keyword:g,schemaProp:S,schema:w,schemaPath:E,errSchemaPath:D,topSchemaRef:O}){if(g!==void 0&&w!==void 0)throw Error(`both "keyword" and "schema" passed, only one allowed`);if(g!==void 0){let w=e.schema[g];return S===void 0?{schema:w,schemaPath:(0,t._)`${e.schemaPath}${(0,t.getProperty)(g)}`,errSchemaPath:`${e.errSchemaPath}/${g}`}:{schema:w[S],schemaPath:(0,t._)`${e.schemaPath}${(0,t.getProperty)(g)}${(0,t.getProperty)(S)}`,errSchemaPath:`${e.errSchemaPath}/${g}/${(0,s.escapeFragment)(S)}`}}if(w!==void 0){if(E===void 0||D===void 0||O===void 0)throw Error(`"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"`);return{schema:w,schemaPath:E,topSchemaRef:O,errSchemaPath:D}}throw Error(`either "keyword" or "schema" must be passed`)}e.getSubschema=g;function S(e,g,{dataProp:S,dataPropType:w,data:E,dataTypes:D,propertyName:O}){if(E!==void 0&&S!==void 0)throw Error(`both "data" and "dataProp" passed, only one allowed`);let{gen:k}=g;if(S!==void 0){let{errorPath:E,dataPathArr:D,opts:O}=g;j(k.let(`data`,(0,t._)`${g.data}${(0,t.getProperty)(S)}`,!0)),e.errorPath=(0,t.str)`${E}${(0,s.getErrorPath)(S,w,O.jsPropertySyntax)}`,e.parentDataProperty=(0,t._)`${S}`,e.dataPathArr=[...D,e.parentDataProperty]}E!==void 0&&(j(E instanceof t.Name?E:k.let(`data`,E,!0)),O!==void 0&&(e.propertyName=O)),D&&(e.dataTypes=D);function j(t){e.data=t,e.dataLevel=g.dataLevel+1,e.dataTypes=[],g.definedProperties=new Set,e.parentData=g.data,e.dataNames=[...g.dataNames,t]}}e.extendSubschemaData=S;function w(e,{jtdDiscriminator:t,jtdMetadata:s,compositeRule:g,createErrors:S,allErrors:w}){g!==void 0&&(e.compositeRule=g),S!==void 0&&(e.createErrors=S),w!==void 0&&(e.allErrors=w),e.jtdDiscriminator=t,e.jtdMetadata=s}e.extendSubschemaMode=w})),require_fast_deep_equal=__commonJSMin$1(((e,t)=>{t.exports=function e(t,s){if(t===s)return!0;if(t&&s&&typeof t==`object`&&typeof s==`object`){if(t.constructor!==s.constructor)return!1;var g,S,w;if(Array.isArray(t)){if(g=t.length,g!=s.length)return!1;for(S=g;S--!==0;)if(!e(t[S],s[S]))return!1;return!0}if(t.constructor===RegExp)return t.source===s.source&&t.flags===s.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===s.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===s.toString();if(w=Object.keys(t),g=w.length,g!==Object.keys(s).length)return!1;for(S=g;S--!==0;)if(!Object.prototype.hasOwnProperty.call(s,w[S]))return!1;for(S=g;S--!==0;){var E=w[S];if(!e(t[E],s[E]))return!1}return!0}return t!==t&&s!==s}})),require_json_schema_traverse=__commonJSMin$1(((e,t)=>{var s=t.exports=function(e,t,s){typeof t==`function`&&(s=t,t={}),s=t.cb||s;var S=typeof s==`function`?s:s.pre||function(){},w=s.post||function(){};g(t,S,w,e,``,e)};s.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},s.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},s.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},s.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function g(e,t,w,E,D,O,k,j,F,L){if(E&&typeof E==`object`&&!Array.isArray(E)){for(var B in t(E,D,O,k,j,F,L),E){var H=E[B];if(Array.isArray(H)){if(B in s.arrayKeywords)for(var q=0;q<H.length;q++)g(e,t,w,H[q],D+`/`+B+`/`+q,O,D,B,E,q)}else if(B in s.propsKeywords){if(H&&typeof H==`object`)for(var J in H)g(e,t,w,H[J],D+`/`+B+`/`+S(J),O,D,B,E,J)}else (B in s.keywords||e.allKeys&&!(B in s.skipKeywords))&&g(e,t,w,H,D+`/`+B,O,D,B,E)}w(E,D,O,k,j,F,L)}}function S(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}})),require_resolve=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.getSchemaRefs=e.resolveUrl=e.normalizeId=e._getFullPath=e.getFullPath=e.inlineRef=void 0;let t=require_util(),s=require_fast_deep_equal(),g=require_json_schema_traverse(),S=new Set([`type`,`format`,`pattern`,`maxLength`,`minLength`,`maxProperties`,`minProperties`,`maxItems`,`minItems`,`maximum`,`minimum`,`uniqueItems`,`multipleOf`,`required`,`enum`,`const`]);function w(e,t=!0){return typeof e==`boolean`?!0:t===!0?!D(e):t?O(e)<=t:!1}e.inlineRef=w;let E=new Set([`$ref`,`$recursiveRef`,`$recursiveAnchor`,`$dynamicRef`,`$dynamicAnchor`]);function D(e){for(let t in e){if(E.has(t))return!0;let s=e[t];if(Array.isArray(s)&&s.some(D)||typeof s==`object`&&D(s))return!0}return!1}function O(e){let s=0;for(let g in e)if(g===`$ref`||(s++,!S.has(g)&&(typeof e[g]==`object`&&(0,t.eachItem)(e[g],e=>s+=O(e)),s===1/0)))return 1/0;return s}function k(e,t=``,s){return s!==!1&&(t=L(t)),j(e,e.parse(t))}e.getFullPath=k;function j(e,t){return e.serialize(t).split(`#`)[0]+`#`}e._getFullPath=j;let F=/#\/?$/;function L(e){return e?e.replace(F,``):``}e.normalizeId=L;function B(e,t,s){return s=L(s),e.resolve(t,s)}e.resolveUrl=B;let H=/^[a-z_][-a-z0-9._]*$/i;function q(e,t){if(typeof e==`boolean`)return{};let{schemaId:S,uriResolver:w}=this.opts,E=L(e[S]||t),D={"":E},O=k(w,E,!1),j={},F=new Set;return g(e,{allKeys:!0},(e,t,s,g)=>{if(g===void 0)return;let w=O+t,E=D[g];typeof e[S]==`string`&&(E=k.call(this,e[S])),J.call(this,e.$anchor),J.call(this,e.$dynamicAnchor),D[t]=E;function k(t){let s=this.opts.uriResolver.resolve;if(t=L(E?s(E,t):t),F.has(t))throw q(t);F.add(t);let g=this.refs[t];return typeof g==`string`&&(g=this.refs[g]),typeof g==`object`?B(e,g.schema,t):t!==L(w)&&(t[0]===`#`?(B(e,j[t],t),j[t]=e):this.refs[t]=w),t}function J(e){if(typeof e==`string`){if(!H.test(e))throw Error(`invalid anchor "${e}"`);k.call(this,`#${e}`)}}}),j;function B(e,t,g){if(t!==void 0&&!s(e,t))throw q(g)}function q(e){return Error(`reference "${e}" resolves to more than one schema`)}}e.getSchemaRefs=q})),require_validate=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.getData=e.KeywordCxt=e.validateFunctionCode=void 0;let t=require_boolSchema(),s=require_dataType(),g=require_applicability(),S=require_dataType(),w=require_defaults(),E=require_keyword(),D=require_subschema(),O=require_codegen(),k=require_names(),j=require_resolve(),F=require_util(),L=require_errors();function B(e){if(oe(e)&&(ce(e),ae(e))){Y(e);return}H(e,()=>(0,t.topBoolOrEmptySchema)(e))}e.validateFunctionCode=B;function H({gen:e,validateName:t,schema:s,schemaEnv:g,opts:S},w){S.code.es5?e.func(t,(0,O._)`${k.default.data}, ${k.default.valCxt}`,g.$async,()=>{e.code((0,O._)`"use strict"; ${te(s,S)}`),J(e,S),e.code(w)}):e.func(t,(0,O._)`${k.default.data}, ${q(S)}`,g.$async,()=>e.code(te(s,S)).code(w))}function q(e){return(0,O._)`{${k.default.instancePath}="", ${k.default.parentData}, ${k.default.parentDataProperty}, ${k.default.rootData}=${k.default.data}${e.dynamicRef?(0,O._)`, ${k.default.dynamicAnchors}={}`:O.nil}}={}`}function J(e,t){e.if(k.default.valCxt,()=>{e.var(k.default.instancePath,(0,O._)`${k.default.valCxt}.${k.default.instancePath}`),e.var(k.default.parentData,(0,O._)`${k.default.valCxt}.${k.default.parentData}`),e.var(k.default.parentDataProperty,(0,O._)`${k.default.valCxt}.${k.default.parentDataProperty}`),e.var(k.default.rootData,(0,O._)`${k.default.valCxt}.${k.default.rootData}`),t.dynamicRef&&e.var(k.default.dynamicAnchors,(0,O._)`${k.default.valCxt}.${k.default.dynamicAnchors}`)},()=>{e.var(k.default.instancePath,(0,O._)`""`),e.var(k.default.parentData,(0,O._)`undefined`),e.var(k.default.parentDataProperty,(0,O._)`undefined`),e.var(k.default.rootData,k.default.data),t.dynamicRef&&e.var(k.default.dynamicAnchors,(0,O._)`{}`)})}function Y(e){let{schema:t,opts:s,gen:g}=e;H(e,()=>{s.$comment&&t.$comment&&_e(e),fe(e),g.let(k.default.vErrors,null),g.let(k.default.errors,0),s.unevaluated&&ee(e),ue(e),ve(e)})}function ee(e){let{gen:t,validateName:s}=e;e.evaluated=t.const(`evaluated`,(0,O._)`${s}.evaluated`),t.if((0,O._)`${e.evaluated}.dynamicProps`,()=>t.assign((0,O._)`${e.evaluated}.props`,(0,O._)`undefined`)),t.if((0,O._)`${e.evaluated}.dynamicItems`,()=>t.assign((0,O._)`${e.evaluated}.items`,(0,O._)`undefined`))}function te(e,t){let s=typeof e==`object`&&e[t.schemaId];return s&&(t.code.source||t.code.process)?(0,O._)`/*# sourceURL=${s} */`:O.nil}function ne(e,s){if(oe(e)&&(ce(e),ae(e))){se(e,s);return}(0,t.boolOrEmptySchema)(e,s)}function ae({schema:e,self:t}){if(typeof e==`boolean`)return!e;for(let s in e)if(t.RULES.all[s])return!0;return!1}function oe(e){return typeof e.schema!=`boolean`}function se(e,t){let{schema:s,gen:g,opts:S}=e;S.$comment&&s.$comment&&_e(e),me(e),ge(e);let w=g.const(`_errs`,k.default.errors);ue(e,w),g.var(t,(0,O._)`${w} === ${k.default.errors}`)}function ce(e){(0,F.checkUnknownRules)(e),de(e)}function ue(e,t){if(e.opts.jtd)return Ce(e,[],!1,t);let g=(0,s.getSchemaTypes)(e.schema);Ce(e,g,!(0,s.coerceAndCheckDataType)(e,g),t)}function de(e){let{schema:t,errSchemaPath:s,opts:g,self:S}=e;t.$ref&&g.ignoreKeywordsWithRef&&(0,F.schemaHasRulesButRef)(t,S.RULES)&&S.logger.warn(`$ref: keywords ignored in schema at path "${s}"`)}function fe(e){let{schema:t,opts:s}=e;t.default!==void 0&&s.useDefaults&&s.strictSchema&&(0,F.checkStrictMode)(e,`default is ignored in the schema root`)}function me(e){let t=e.schema[e.opts.schemaId];t&&(e.baseId=(0,j.resolveUrl)(e.opts.uriResolver,e.baseId,t))}function ge(e){if(e.schema.$async&&!e.schemaEnv.$async)throw Error(`async schema in sync schema`)}function _e({gen:e,schemaEnv:t,schema:s,errSchemaPath:g,opts:S}){let w=s.$comment;if(S.$comment===!0)e.code((0,O._)`${k.default.self}.logger.log(${w})`);else if(typeof S.$comment==`function`){let s=(0,O.str)`${g}/$comment`,S=e.scopeValue(`root`,{ref:t.root});e.code((0,O._)`${k.default.self}.opts.$comment(${w}, ${s}, ${S}.schema)`)}}function ve(e){let{gen:t,schemaEnv:s,validateName:g,ValidationError:S,opts:w}=e;s.$async?t.if((0,O._)`${k.default.errors} === 0`,()=>t.return(k.default.data),()=>t.throw((0,O._)`new ${S}(${k.default.vErrors})`)):(t.assign((0,O._)`${g}.errors`,k.default.vErrors),w.unevaluated&&ye(e),t.return((0,O._)`${k.default.errors} === 0`))}function ye({gen:e,evaluated:t,props:s,items:g}){s instanceof O.Name&&e.assign((0,O._)`${t}.props`,s),g instanceof O.Name&&e.assign((0,O._)`${t}.items`,g)}function Ce(e,t,s,w){let{gen:E,schema:D,data:j,allErrors:L,opts:B,self:H}=e,{RULES:q}=H;if(D.$ref&&(B.ignoreKeywordsWithRef||!(0,F.schemaHasRulesButRef)(D,q))){E.block(()=>Ve(e,`$ref`,q.all.$ref.definition));return}B.jtd||Te(e,t),E.block(()=>{for(let e of q.rules)J(e);J(q.post)});function J(F){(0,g.shouldUseGroup)(D,F)&&(F.type?(E.if((0,S.checkDataType)(F.type,j,B.strictNumbers)),we(e,F),t.length===1&&t[0]===F.type&&s&&(E.else(),(0,S.reportTypeError)(e)),E.endIf()):we(e,F),L||E.if((0,O._)`${k.default.errors} === ${w||0}`))}}function we(e,t){let{gen:s,schema:S,opts:{useDefaults:E}}=e;E&&(0,w.assignDefaults)(e,t.type),s.block(()=>{for(let s of t.rules)(0,g.shouldUseRule)(S,s)&&Ve(e,s.keyword,s.definition,t.type)})}function Te(e,t){e.schemaEnv.meta||!e.opts.strictTypes||(De(e,t),e.opts.allowUnionTypes||je(e,t),Me(e,e.dataTypes))}function De(e,t){if(t.length){if(!e.dataTypes.length){e.dataTypes=t;return}t.forEach(t=>{Ie(e.dataTypes,t)||ze(e,`type "${t}" not allowed by context "${e.dataTypes.join(`,`)}"`)}),Re(e,t)}}function je(e,t){t.length>1&&!(t.length===2&&t.includes(`null`))&&ze(e,`use allowUnionTypes to allow union type keyword`)}function Me(e,t){let s=e.self.RULES.all;for(let S in s){let w=s[S];if(typeof w==`object`&&(0,g.shouldUseRule)(e.schema,w)){let{type:s}=w.definition;s.length&&!s.some(e=>Pe(t,e))&&ze(e,`missing type "${s.join(`,`)}" for keyword "${S}"`)}}}function Pe(e,t){return e.includes(t)||t===`number`&&e.includes(`integer`)}function Ie(e,t){return e.includes(t)||t===`integer`&&e.includes(`number`)}function Re(e,t){let s=[];for(let g of e.dataTypes)Ie(t,g)?s.push(g):t.includes(`integer`)&&g===`number`&&s.push(`integer`);e.dataTypes=s}function ze(e,t){let s=e.schemaEnv.baseId+e.errSchemaPath;t+=` at "${s}" (strictTypes)`,(0,F.checkStrictMode)(e,t,e.opts.strictTypes)}var Be=class{constructor(e,t,s){if((0,E.validateKeywordUsage)(e,t,s),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=s,this.data=e.data,this.schema=e.schema[s],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,F.schemaRefOrVal)(e,this.schema,s,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const(`vSchema`,Ge(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,E.validSchemaType)(this.schema,t.schemaType,t.allowUndefined))throw Error(`${s} value must be ${JSON.stringify(t.schemaType)}`);(`code`in t?t.trackErrors:t.errors!==!1)&&(this.errsCount=e.gen.const(`_errs`,k.default.errors))}result(e,t,s){this.failResult((0,O.not)(e),t,s)}failResult(e,t,s){this.gen.if(e),s?s():this.error(),t?(this.gen.else(),t(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,t){this.failResult((0,O.not)(e),void 0,t)}fail(e){if(e===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:t}=this;this.fail((0,O._)`${t} !== undefined && (${(0,O.or)(this.invalid$data(),e)})`)}error(e,t,s){if(t){this.setParams(t),this._error(e,s),this.setParams({});return}this._error(e,s)}_error(e,t){(e?L.reportExtraError:L.reportError)(this,this.def.error,t)}$dataError(){(0,L.reportError)(this,this.def.$dataError||L.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error(`add "trackErrors" to keyword definition`);(0,L.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,t){t?Object.assign(this.params,e):this.params=e}block$data(e,t,s=O.nil){this.gen.block(()=>{this.check$data(e,s),t()})}check$data(e=O.nil,t=O.nil){if(!this.$data)return;let{gen:s,schemaCode:g,schemaType:S,def:w}=this;s.if((0,O.or)((0,O._)`${g} === undefined`,t)),e!==O.nil&&s.assign(e,!0),(S.length||w.validateSchema)&&(s.elseIf(this.invalid$data()),this.$dataError(),e!==O.nil&&s.assign(e,!1)),s.else()}invalid$data(){let{gen:e,schemaCode:t,schemaType:s,def:g,it:w}=this;return(0,O.or)(E(),D());function E(){if(s.length){if(!(t instanceof O.Name))throw Error(`ajv implementation error`);let e=Array.isArray(s)?s:[s];return(0,O._)`${(0,S.checkDataTypes)(e,t,w.opts.strictNumbers,S.DataType.Wrong)}`}return O.nil}function D(){if(g.validateSchema){let s=e.scopeValue(`validate$data`,{ref:g.validateSchema});return(0,O._)`!${s}(${t})`}return O.nil}}subschema(e,t){let s=(0,D.getSubschema)(this.it,e);(0,D.extendSubschemaData)(s,this.it,e),(0,D.extendSubschemaMode)(s,e);let g={...this.it,...s,items:void 0,props:void 0};return ne(g,t),g}mergeEvaluated(e,t){let{it:s,gen:g}=this;s.opts.unevaluated&&(s.props!==!0&&e.props!==void 0&&(s.props=F.mergeEvaluated.props(g,e.props,s.props,t)),s.items!==!0&&e.items!==void 0&&(s.items=F.mergeEvaluated.items(g,e.items,s.items,t)))}mergeValidEvaluated(e,t){let{it:s,gen:g}=this;if(s.opts.unevaluated&&(s.props!==!0||s.items!==!0))return g.if(t,()=>this.mergeEvaluated(e,O.Name)),!0}};e.KeywordCxt=Be;function Ve(e,t,s,g){let S=new Be(e,s,t);`code`in s?s.code(S,g):S.$data&&s.validate?(0,E.funcKeywordCode)(S,s):`macro`in s?(0,E.macroKeywordCode)(S,s):(s.compile||s.validate)&&(0,E.funcKeywordCode)(S,s)}let Ue=/^\/(?:[^~]|~0|~1)*$/,We=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Ge(e,{dataLevel:t,dataNames:s,dataPathArr:g}){let S,w;if(e===``)return k.default.rootData;if(e[0]===`/`){if(!Ue.test(e))throw Error(`Invalid JSON-pointer: ${e}`);S=e,w=k.default.rootData}else{let E=We.exec(e);if(!E)throw Error(`Invalid JSON-pointer: ${e}`);let D=+E[1];if(S=E[2],S===`#`){if(D>=t)throw Error(j(`property/index`,D));return g[t-D]}if(D>t)throw Error(j(`data`,D));if(w=s[t-D],!S)return w}let E=w,D=S.split(`/`);for(let e of D)e&&(w=(0,O._)`${w}${(0,O.getProperty)((0,F.unescapeJsonPointer)(e))}`,E=(0,O._)`${E} && ${w}`);return E;function j(e,s){return`Cannot access ${e} ${s} levels up, current level is ${t}`}}e.getData=Ge})),require_validation_error=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=class extends Error{constructor(e){super(`validation failed`),this.errors=e,this.ajv=this.validation=!0}}})),require_ref_error=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_resolve();e.default=class extends Error{constructor(e,s,g,S){super(S||`can't resolve reference ${g} from id ${s}`),this.missingRef=(0,t.resolveUrl)(e,s,g),this.missingSchema=(0,t.normalizeId)((0,t.getFullPath)(e,this.missingRef))}}})),require_compile=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.resolveSchema=e.getCompilingSchema=e.resolveRef=e.compileSchema=e.SchemaEnv=void 0;let t=require_codegen(),s=require_validation_error(),g=require_names(),S=require_resolve(),w=require_util(),E=require_validate();var D=class{constructor(e){var t;this.refs={},this.dynamicAnchors={};let s;typeof e.schema==`object`&&(s=e.schema),this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=e.baseId??(0,S.normalizeId)(s?.[e.schemaId||`$id`]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=s?.$async,this.refs={}}};e.SchemaEnv=D;function O(e){let w=F.call(this,e);if(w)return w;let D=(0,S.getFullPath)(this.opts.uriResolver,e.root.baseId),{es5:O,lines:k}=this.opts.code,{ownProperties:j}=this.opts,L=new t.CodeGen(this.scope,{es5:O,lines:k,ownProperties:j}),B;e.$async&&(B=L.scopeValue(`Error`,{ref:s.default,code:(0,t._)`require("ajv/dist/runtime/validation_error").default`}));let H=L.scopeName(`validate`);e.validateName=H;let q={gen:L,allErrors:this.opts.allErrors,data:g.default.data,parentData:g.default.parentData,parentDataProperty:g.default.parentDataProperty,dataNames:[g.default.data],dataPathArr:[t.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:L.scopeValue(`schema`,this.opts.code.source===!0?{ref:e.schema,code:(0,t.stringify)(e.schema)}:{ref:e.schema}),validateName:H,ValidationError:B,schema:e.schema,schemaEnv:e,rootId:D,baseId:e.baseId||D,schemaPath:t.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?``:`#`),errorPath:(0,t._)`""`,opts:this.opts,self:this},J;try{this._compilations.add(e),(0,E.validateFunctionCode)(q),L.optimize(this.opts.code.optimize);let s=L.toString();J=`${L.scopeRefs(g.default.scope)}return ${s}`,this.opts.code.process&&(J=this.opts.code.process(J,e));let S=Function(`${g.default.self}`,`${g.default.scope}`,J)(this,this.scope.get());if(this.scope.value(H,{ref:S}),S.errors=null,S.schema=e.schema,S.schemaEnv=e,e.$async&&(S.$async=!0),this.opts.code.source===!0&&(S.source={validateName:H,validateCode:s,scopeValues:L._values}),this.opts.unevaluated){let{props:e,items:s}=q;S.evaluated={props:e instanceof t.Name?void 0:e,items:s instanceof t.Name?void 0:s,dynamicProps:e instanceof t.Name,dynamicItems:s instanceof t.Name},S.source&&(S.source.evaluated=(0,t.stringify)(S.evaluated))}return e.validate=S,e}catch(t){throw delete e.validate,delete e.validateName,J&&this.logger.error(`Error compiling schema, function code:`,J),t}finally{this._compilations.delete(e)}}e.compileSchema=O;function k(e,t,s){var g;s=(0,S.resolveUrl)(this.opts.uriResolver,t,s);let w=e.refs[s];if(w)return w;let E=B.call(this,e,s);if(E===void 0){let g=e.localRefs?.[s],{schemaId:S}=this.opts;g&&(E=new D({schema:g,schemaId:S,root:e,baseId:t}))}if(E!==void 0)return e.refs[s]=j.call(this,E)}e.resolveRef=k;function j(e){return(0,S.inlineRef)(e.schema,this.opts.inlineRefs)?e.schema:e.validate?e:O.call(this,e)}function F(e){for(let t of this._compilations)if(L(t,e))return t}e.getCompilingSchema=F;function L(e,t){return e.schema===t.schema&&e.root===t.root&&e.baseId===t.baseId}function B(e,t){let s;for(;typeof(s=this.refs[t])==`string`;)t=s;return s||this.schemas[t]||H.call(this,e,t)}function H(e,t){let s=this.opts.uriResolver.parse(t),g=(0,S._getFullPath)(this.opts.uriResolver,s),w=(0,S.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&g===w)return J.call(this,s,e);let E=(0,S.normalizeId)(g),k=this.refs[E]||this.schemas[E];if(typeof k==`string`){let t=H.call(this,e,k);return typeof t?.schema==`object`?J.call(this,s,t):void 0}if(typeof k?.schema==`object`){if(k.validate||O.call(this,k),E===(0,S.normalizeId)(t)){let{schema:t}=k,{schemaId:s}=this.opts,g=t[s];return g&&(w=(0,S.resolveUrl)(this.opts.uriResolver,w,g)),new D({schema:t,schemaId:s,root:e,baseId:w})}return J.call(this,s,k)}}e.resolveSchema=H;let q=new Set([`properties`,`patternProperties`,`enum`,`dependencies`,`definitions`]);function J(e,{baseId:t,schema:s,root:g}){var E;if(e.fragment?.[0]!==`/`)return;for(let g of e.fragment.slice(1).split(`/`)){if(typeof s==`boolean`)return;let e=s[(0,w.unescapeFragment)(g)];if(e===void 0)return;s=e;let E=typeof s==`object`&&s[this.opts.schemaId];!q.has(g)&&E&&(t=(0,S.resolveUrl)(this.opts.uriResolver,t,E))}let O;if(typeof s!=`boolean`&&s.$ref&&!(0,w.schemaHasRulesButRef)(s,this.RULES)){let e=(0,S.resolveUrl)(this.opts.uriResolver,t,s.$ref);O=H.call(this,g,e)}let{schemaId:k}=this.opts;if(O||=new D({schema:s,schemaId:k,root:g,baseId:t}),O.schema!==O.root.schema)return O}})),require_data=__commonJSMin$1(((e,t)=>{t.exports={$id:`https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#`,description:`Meta-schema for $data reference (JSON AnySchema extension proposal)`,type:`object`,required:[`$data`],properties:{$data:{type:`string`,anyOf:[{format:`relative-json-pointer`},{format:`json-pointer`}]}},additionalProperties:!1}})),require_utils=__commonJSMin$1(((e,t)=>{let s=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),g=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function S(e){let t=``,s=0,g=0;for(g=0;g<e.length;g++)if(s=e[g].charCodeAt(0),s!==48){if(!(s>=48&&s<=57||s>=65&&s<=70||s>=97&&s<=102))return``;t+=e[g];break}for(g+=1;g<e.length;g++){if(s=e[g].charCodeAt(0),!(s>=48&&s<=57||s>=65&&s<=70||s>=97&&s<=102))return``;t+=e[g]}return t}let w=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function E(e){return e.length=0,!0}function D(e,t,s){if(e.length){let g=S(e);if(g!==``)t.push(g);else return s.error=!0,!1;e.length=0}return!0}function O(e){let t=0,s={error:!1,address:``,zone:``},g=[],w=[],O=!1,k=!1,j=D;for(let S=0;S<e.length;S++){let D=e[S];if(!(D===`[`||D===`]`))if(D===`:`){if(O===!0&&(k=!0),!j(w,g,s))break;if(++t>7){s.error=!0;break}S>0&&e[S-1]===`:`&&(O=!0),g.push(`:`);continue}else if(D===`%`){if(!j(w,g,s))break;j=E}else{w.push(D);continue}}return w.length&&(j===E?s.zone=w.join(``):k?g.push(w.join(``)):g.push(S(w))),s.address=g.join(``),s}function k(e){if(j(e,`:`)<2)return{host:e,isIPV6:!1};let t=O(e);if(t.error)return{host:e,isIPV6:!1};{let e=t.address,s=t.address;return t.zone&&(e+=`%`+t.zone,s+=`%25`+t.zone),{host:e,isIPV6:!0,escapedHost:s}}}function j(e,t){let s=0;for(let g=0;g<e.length;g++)e[g]===t&&s++;return s}function F(e){let t=e,s=[],g=-1,S=0;for(;S=t.length;){if(S===1){if(t===`.`)break;if(t===`/`){s.push(`/`);break}else{s.push(t);break}}else if(S===2){if(t[0]===`.`){if(t[1]===`.`)break;if(t[1]===`/`){t=t.slice(2);continue}}else if(t[0]===`/`&&(t[1]===`.`||t[1]===`/`)){s.push(`/`);break}}else if(S===3&&t===`/..`){s.length!==0&&s.pop(),s.push(`/`);break}if(t[0]===`.`){if(t[1]===`.`){if(t[2]===`/`){t=t.slice(3);continue}}else if(t[1]===`/`){t=t.slice(2);continue}}else if(t[0]===`/`&&t[1]===`.`){if(t[2]===`/`){t=t.slice(2);continue}else if(t[2]===`.`&&t[3]===`/`){t=t.slice(3),s.length!==0&&s.pop();continue}}if((g=t.indexOf(`/`,1))===-1){s.push(t);break}else s.push(t.slice(0,g)),t=t.slice(g)}return s.join(``)}function L(e,t){let s=t===!0?unescape:escape;return e.scheme!==void 0&&(e.scheme=s(e.scheme)),e.userinfo!==void 0&&(e.userinfo=s(e.userinfo)),e.host!==void 0&&(e.host=s(e.host)),e.path!==void 0&&(e.path=s(e.path)),e.query!==void 0&&(e.query=s(e.query)),e.fragment!==void 0&&(e.fragment=s(e.fragment)),e}function B(e){let t=[];if(e.userinfo!==void 0&&(t.push(e.userinfo),t.push(`@`)),e.host!==void 0){let s=unescape(e.host);if(!g(s)){let t=k(s);s=t.isIPV6===!0?`[${t.escapedHost}]`:e.host}t.push(s)}return(typeof e.port==`number`||typeof e.port==`string`)&&(t.push(`:`),t.push(String(e.port))),t.length?t.join(``):void 0}t.exports={nonSimpleDomain:w,recomposeAuthority:B,normalizeComponentEncoding:L,removeDotSegments:F,isIPv4:g,isUUID:s,normalizeIPv6:k,stringArrayToHexStripped:S}})),require_schemes=__commonJSMin$1(((e,t)=>{let{isUUID:s}=require_utils(),g=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,S=[`http`,`https`,`ws`,`wss`,`urn`,`urn:uuid`];function w(e){return S.indexOf(e)!==-1}function E(e){return e.secure===!0?!0:e.secure===!1?!1:e.scheme?e.scheme.length===3&&(e.scheme[0]===`w`||e.scheme[0]===`W`)&&(e.scheme[1]===`s`||e.scheme[1]===`S`)&&(e.scheme[2]===`s`||e.scheme[2]===`S`):!1}function D(e){return e.host||(e.error=e.error||`HTTP URIs must have a host.`),e}function O(e){let t=String(e.scheme).toLowerCase()===`https`;return(e.port===(t?443:80)||e.port===``)&&(e.port=void 0),e.path||=`/`,e}function k(e){return e.secure=E(e),e.resourceName=(e.path||`/`)+(e.query?`?`+e.query:``),e.path=void 0,e.query=void 0,e}function j(e){if((e.port===(E(e)?443:80)||e.port===``)&&(e.port=void 0),typeof e.secure==`boolean`&&(e.scheme=e.secure?`wss`:`ws`,e.secure=void 0),e.resourceName){let[t,s]=e.resourceName.split(`?`);e.path=t&&t!==`/`?t:void 0,e.query=s,e.resourceName=void 0}return e.fragment=void 0,e}function F(e,t){if(!e.path)return e.error=`URN can not be parsed`,e;let s=e.path.match(g);if(s){let g=t.scheme||e.scheme||`urn`;e.nid=s[1].toLowerCase(),e.nss=s[2];let S=oe(`${g}:${t.nid||e.nid}`);e.path=void 0,S&&(e=S.parse(e,t))}else e.error=e.error||`URN can not be parsed.`;return e}function L(e,t){if(e.nid===void 0)throw Error(`URN without nid cannot be serialized`);let s=t.scheme||e.scheme||`urn`,g=e.nid.toLowerCase(),S=oe(`${s}:${t.nid||g}`);S&&(e=S.serialize(e,t));let w=e,E=e.nss;return w.path=`${g||t.nid}:${E}`,t.skipEscape=!0,w}function B(e,t){let g=e;return g.uuid=g.nss,g.nss=void 0,!t.tolerant&&(!g.uuid||!s(g.uuid))&&(g.error=g.error||`UUID is not valid.`),g}function H(e){let t=e;return t.nss=(e.uuid||``).toLowerCase(),t}let q={scheme:`http`,domainHost:!0,parse:D,serialize:O},J={scheme:`https`,domainHost:q.domainHost,parse:D,serialize:O},Y={scheme:`ws`,domainHost:!0,parse:k,serialize:j},ee={scheme:`wss`,domainHost:Y.domainHost,parse:Y.parse,serialize:Y.serialize},te={scheme:`urn`,parse:F,serialize:L,skipNormalize:!0},ne={scheme:`urn:uuid`,parse:B,serialize:H,skipNormalize:!0},ae={http:q,https:J,ws:Y,wss:ee,urn:te,"urn:uuid":ne};Object.setPrototypeOf(ae,null);function oe(e){return e&&(ae[e]||ae[e.toLowerCase()])||void 0}t.exports={wsIsSecure:E,SCHEMES:ae,isValidSchemeName:w,getSchemeHandler:oe}})),require_fast_uri=__commonJSMin$1(((e,t)=>{let{normalizeIPv6:s,removeDotSegments:g,recomposeAuthority:S,normalizeComponentEncoding:w,isIPv4:E,nonSimpleDomain:D}=require_utils(),{SCHEMES:O,getSchemeHandler:k}=require_schemes();function j(e,t){return typeof e==`string`?e=H(J(e,t),t):typeof e==`object`&&(e=J(H(e,t),t)),e}function F(e,t,s){let g=s?Object.assign({scheme:`null`},s):{scheme:`null`},S=L(J(e,g),J(t,g),g,!0);return g.skipEscape=!0,H(S,g)}function L(e,t,s,S){let w={};return S||(e=J(H(e,s),s),t=J(H(t,s),s)),s||={},!s.tolerant&&t.scheme?(w.scheme=t.scheme,w.userinfo=t.userinfo,w.host=t.host,w.port=t.port,w.path=g(t.path||``),w.query=t.query):(t.userinfo!==void 0||t.host!==void 0||t.port!==void 0?(w.userinfo=t.userinfo,w.host=t.host,w.port=t.port,w.path=g(t.path||``),w.query=t.query):(t.path?(t.path[0]===`/`?w.path=g(t.path):((e.userinfo!==void 0||e.host!==void 0||e.port!==void 0)&&!e.path?w.path=`/`+t.path:e.path?w.path=e.path.slice(0,e.path.lastIndexOf(`/`)+1)+t.path:w.path=t.path,w.path=g(w.path)),w.query=t.query):(w.path=e.path,t.query===void 0?w.query=e.query:w.query=t.query),w.userinfo=e.userinfo,w.host=e.host,w.port=e.port),w.scheme=e.scheme),w.fragment=t.fragment,w}function B(e,t,s){return typeof e==`string`?(e=unescape(e),e=H(w(J(e,s),!0),{...s,skipEscape:!0})):typeof e==`object`&&(e=H(w(e,!0),{...s,skipEscape:!0})),typeof t==`string`?(t=unescape(t),t=H(w(J(t,s),!0),{...s,skipEscape:!0})):typeof t==`object`&&(t=H(w(t,!0),{...s,skipEscape:!0})),e.toLowerCase()===t.toLowerCase()}function H(e,t){let s={host:e.host,scheme:e.scheme,userinfo:e.userinfo,port:e.port,path:e.path,query:e.query,nid:e.nid,nss:e.nss,uuid:e.uuid,fragment:e.fragment,reference:e.reference,resourceName:e.resourceName,secure:e.secure,error:``},w=Object.assign({},t),E=[],D=k(w.scheme||s.scheme);D&&D.serialize&&D.serialize(s,w),s.path!==void 0&&(w.skipEscape?s.path=unescape(s.path):(s.path=escape(s.path),s.scheme!==void 0&&(s.path=s.path.split(`%3A`).join(`:`)))),w.reference!==`suffix`&&s.scheme&&E.push(s.scheme,`:`);let O=S(s);if(O!==void 0&&(w.reference!==`suffix`&&E.push(`//`),E.push(O),s.path&&s.path[0]!==`/`&&E.push(`/`)),s.path!==void 0){let e=s.path;!w.absolutePath&&(!D||!D.absolutePath)&&(e=g(e)),O===void 0&&e[0]===`/`&&e[1]===`/`&&(e=`/%2F`+e.slice(2)),E.push(e)}return s.query!==void 0&&E.push(`?`,s.query),s.fragment!==void 0&&E.push(`#`,s.fragment),E.join(``)}let q=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function J(e,t){let g=Object.assign({},t),S={scheme:void 0,userinfo:void 0,host:``,port:void 0,path:``,query:void 0,fragment:void 0},w=!1;g.reference===`suffix`&&(e=g.scheme?g.scheme+`:`+e:`//`+e);let O=e.match(q);if(O){if(S.scheme=O[1],S.userinfo=O[3],S.host=O[4],S.port=parseInt(O[5],10),S.path=O[6]||``,S.query=O[7],S.fragment=O[8],isNaN(S.port)&&(S.port=O[5]),S.host)if(E(S.host)===!1){let e=s(S.host);S.host=e.host.toLowerCase(),w=e.isIPV6}else w=!0;S.scheme===void 0&&S.userinfo===void 0&&S.host===void 0&&S.port===void 0&&S.query===void 0&&!S.path?S.reference=`same-document`:S.scheme===void 0?S.reference=`relative`:S.fragment===void 0?S.reference=`absolute`:S.reference=`uri`,g.reference&&g.reference!==`suffix`&&g.reference!==S.reference&&(S.error=S.error||`URI is not a `+g.reference+` reference.`);let t=k(g.scheme||S.scheme);if(!g.unicodeSupport&&(!t||!t.unicodeSupport)&&S.host&&(g.domainHost||t&&t.domainHost)&&w===!1&&D(S.host))try{S.host=URL.domainToASCII(S.host.toLowerCase())}catch(e){S.error=S.error||`Host's domain name can not be converted to ASCII: `+e}(!t||t&&!t.skipNormalize)&&(e.indexOf(`%`)!==-1&&(S.scheme!==void 0&&(S.scheme=unescape(S.scheme)),S.host!==void 0&&(S.host=unescape(S.host))),S.path&&=escape(unescape(S.path)),S.fragment&&=encodeURI(decodeURIComponent(S.fragment))),t&&t.parse&&t.parse(S,g)}else S.error=S.error||`URI can not be parsed.`;return S}let Y={SCHEMES:O,normalize:j,resolve:F,resolveComponent:L,equal:B,serialize:H,parse:J};t.exports=Y,t.exports.default=Y,t.exports.fastUri=Y})),require_uri=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_fast_uri();t.code=`require("ajv/dist/runtime/uri").default`,e.default=t})),require_core$1=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=void 0;var t=require_validate();Object.defineProperty(e,`KeywordCxt`,{enumerable:!0,get:function(){return t.KeywordCxt}});var s=require_codegen();Object.defineProperty(e,`_`,{enumerable:!0,get:function(){return s._}}),Object.defineProperty(e,`str`,{enumerable:!0,get:function(){return s.str}}),Object.defineProperty(e,`stringify`,{enumerable:!0,get:function(){return s.stringify}}),Object.defineProperty(e,`nil`,{enumerable:!0,get:function(){return s.nil}}),Object.defineProperty(e,`Name`,{enumerable:!0,get:function(){return s.Name}}),Object.defineProperty(e,`CodeGen`,{enumerable:!0,get:function(){return s.CodeGen}});let g=require_validation_error(),S=require_ref_error(),w=require_rules(),E=require_compile(),D=require_codegen(),O=require_resolve(),k=require_dataType(),j=require_util(),F=require_data(),L=require_uri(),B=(e,t)=>new RegExp(e,t);B.code=`new RegExp`;let H=[`removeAdditional`,`useDefaults`,`coerceTypes`],q=new Set([`validate`,`serialize`,`parse`,`wrapper`,`root`,`schema`,`keyword`,`pattern`,`formats`,`validate$data`,`func`,`obj`,`Error`]),J={errorDataPath:``,format:"`validateFormats: false` can be used instead.",nullable:`"nullable" keyword is supported by default.`,jsonPointers:`Deprecated jsPropertySyntax can be used instead.`,extendRefs:`Deprecated ignoreKeywordsWithRef can be used instead.`,missingRefs:`Pass empty schema with $id that should be ignored to ajv.addSchema.`,processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:`"uniqueItems" keyword is always validated.`,unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:`Map is used as cache, schema object as key.`,serialize:`Map is used as cache, schema object as key.`,ajvErrors:`It is default now.`},Y={ignoreKeywordsWithRef:``,jsPropertySyntax:``,unicode:`"minLength"/"maxLength" account for unicode characters by default.`},ee=200;function te(e){var t,s,g,S,w,E,D,O,k,j,F,H,q,J,Y,ee,te,ne,ae,oe,se,ce,ue,de,fe;let me=e.strict,ge=e.code?.optimize,_e=ge===!0||ge===void 0?1:ge||0,ve=e.code?.regExp??B,ye=e.uriResolver??L.default;return{strictSchema:e.strictSchema??me??!0,strictNumbers:e.strictNumbers??me??!0,strictTypes:e.strictTypes??me??`log`,strictTuples:e.strictTuples??me??`log`,strictRequired:e.strictRequired??me??!1,code:e.code?{...e.code,optimize:_e,regExp:ve}:{optimize:_e,regExp:ve},loopRequired:e.loopRequired??200,loopEnum:e.loopEnum??200,meta:e.meta??!0,messages:e.messages??!0,inlineRefs:e.inlineRefs??!0,schemaId:e.schemaId??`$id`,addUsedSchema:e.addUsedSchema??!0,validateSchema:e.validateSchema??!0,validateFormats:e.validateFormats??!0,unicodeRegExp:e.unicodeRegExp??!0,int32range:e.int32range??!0,uriResolver:ye}}var ne=class{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...te(e)};let{es5:t,lines:s}=this.opts.code;this.scope=new D.ValueScope({scope:{},prefixes:q,es5:t,lines:s}),this.logger=me(e.logger);let g=e.validateFormats;e.validateFormats=!1,this.RULES=(0,w.getRules)(),ae.call(this,J,e,`NOT SUPPORTED`),ae.call(this,Y,e,`DEPRECATED`,`warn`),this._metaOpts=de.call(this),e.formats&&ce.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords&&ue.call(this,e.keywords),typeof e.meta==`object`&&this.addMetaSchema(e.meta),se.call(this),e.validateFormats=g}_addVocabularies(){this.addKeyword(`$async`)}_addDefaultMetaSchema(){let{$data:e,meta:t,schemaId:s}=this.opts,g=F;s===`id`&&(g={...F},g.id=g.$id,delete g.$id),t&&e&&this.addMetaSchema(g,g[s],!1)}defaultMeta(){let{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta=typeof e==`object`?e[t]||e:void 0}validate(e,t){let s;if(typeof e==`string`){if(s=this.getSchema(e),!s)throw Error(`no schema with key or ref "${e}"`)}else s=this.compile(e);let g=s(t);return`$async`in s||(this.errors=s.errors),g}compile(e,t){let s=this._addSchema(e,t);return s.validate||this._compileSchemaEnv(s)}compileAsync(e,t){if(typeof this.opts.loadSchema!=`function`)throw Error(`options.loadSchema should be a function`);let{loadSchema:s}=this.opts;return g.call(this,e,t);async function g(e,t){await w.call(this,e.$schema);let s=this._addSchema(e,t);return s.validate||E.call(this,s)}async function w(e){e&&!this.getSchema(e)&&await g.call(this,{$ref:e},!0)}async function E(e){try{return this._compileSchemaEnv(e)}catch(t){if(!(t instanceof S.default))throw t;return D.call(this,t),await O.call(this,t.missingSchema),E.call(this,e)}}function D({missingSchema:e,missingRef:t}){if(this.refs[e])throw Error(`AnySchema ${e} is loaded but ${t} cannot be resolved`)}async function O(e){let s=await k.call(this,e);this.refs[e]||await w.call(this,s.$schema),this.refs[e]||this.addSchema(s,e,t)}async function k(e){let t=this._loading[e];if(t)return t;try{return await(this._loading[e]=s(e))}finally{delete this._loading[e]}}}addSchema(e,t,s,g=this.opts.validateSchema){if(Array.isArray(e)){for(let t of e)this.addSchema(t,void 0,s,g);return this}let S;if(typeof e==`object`){let{schemaId:t}=this.opts;if(S=e[t],S!==void 0&&typeof S!=`string`)throw Error(`schema ${t} must be string`)}return t=(0,O.normalizeId)(t||S),this._checkUnique(t),this.schemas[t]=this._addSchema(e,s,t,g,!0),this}addMetaSchema(e,t,s=this.opts.validateSchema){return this.addSchema(e,t,!0,s),this}validateSchema(e,t){if(typeof e==`boolean`)return!0;let s;if(s=e.$schema,s!==void 0&&typeof s!=`string`)throw Error(`$schema must be a string`);if(s=s||this.opts.defaultMeta||this.defaultMeta(),!s)return this.logger.warn(`meta-schema not available`),this.errors=null,!0;let g=this.validate(s,e);if(!g&&t){let e=`schema is invalid: `+this.errorsText();if(this.opts.validateSchema===`log`)this.logger.error(e);else throw Error(e)}return g}getSchema(e){let t;for(;typeof(t=oe.call(this,e))==`string`;)e=t;if(t===void 0){let{schemaId:s}=this.opts,g=new E.SchemaEnv({schema:{},schemaId:s});if(t=E.resolveSchema.call(this,g,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case`undefined`:return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case`string`:{let t=oe.call(this,e);return typeof t==`object`&&this._cache.delete(t.schema),delete this.schemas[e],delete this.refs[e],this}case`object`:{let t=e;this._cache.delete(t);let s=e[this.opts.schemaId];return s&&(s=(0,O.normalizeId)(s),delete this.schemas[s],delete this.refs[s]),this}default:throw Error(`ajv.removeSchema: invalid parameter`)}}addVocabulary(e){for(let t of e)this.addKeyword(t);return this}addKeyword(e,t){let s;if(typeof e==`string`)s=e,typeof t==`object`&&(this.logger.warn(`these parameters are deprecated, see docs for addKeyword`),t.keyword=s);else if(typeof e==`object`&&t===void 0){if(t=e,s=t.keyword,Array.isArray(s)&&!s.length)throw Error(`addKeywords: keyword must be string or non-empty array`)}else throw Error(`invalid addKeywords parameters`);if(_e.call(this,s,t),!t)return(0,j.eachItem)(s,e=>ve.call(this,e)),this;Ce.call(this,t);let g={...t,type:(0,k.getJSONTypes)(t.type),schemaType:(0,k.getJSONTypes)(t.schemaType)};return(0,j.eachItem)(s,g.type.length===0?e=>ve.call(this,e,g):e=>g.type.forEach(t=>ve.call(this,e,g,t))),this}getKeyword(e){let t=this.RULES.all[e];return typeof t==`object`?t.definition:!!t}removeKeyword(e){let{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(let s of t.rules){let t=s.rules.findIndex(t=>t.keyword===e);t>=0&&s.rules.splice(t,1)}return this}addFormat(e,t){return typeof t==`string`&&(t=new RegExp(t)),this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=`, `,dataVar:s=`data`}={}){return!e||e.length===0?`No errors`:e.map(e=>`${s}${e.instancePath} ${e.message}`).reduce((e,s)=>e+t+s)}$dataMetaSchema(e,t){let s=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let g of t){let t=g.split(`/`).slice(1),S=e;for(let e of t)S=S[e];for(let e in s){let t=s[e];if(typeof t!=`object`)continue;let{$data:g}=t.definition,w=S[e];g&&w&&(S[e]=Te(w))}}return e}_removeAllSchemas(e,t){for(let s in e){let g=e[s];(!t||t.test(s))&&(typeof g==`string`?delete e[s]:g&&!g.meta&&(this._cache.delete(g.schema),delete e[s]))}}_addSchema(e,t,s,g=this.opts.validateSchema,S=this.opts.addUsedSchema){let w,{schemaId:D}=this.opts;if(typeof e==`object`)w=e[D];else if(this.opts.jtd)throw Error(`schema must be object`);else if(typeof e!=`boolean`)throw Error(`schema must be object or boolean`);let k=this._cache.get(e);if(k!==void 0)return k;s=(0,O.normalizeId)(w||s);let j=O.getSchemaRefs.call(this,e,s);return k=new E.SchemaEnv({schema:e,schemaId:D,meta:t,baseId:s,localRefs:j}),this._cache.set(k.schema,k),S&&!s.startsWith(`#`)&&(s&&this._checkUnique(s),this.refs[s]=k),g&&this.validateSchema(e,!0),k}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta?this._compileMetaSchema(e):E.compileSchema.call(this,e),!e.validate)throw Error(`ajv implementation error`);return e.validate}_compileMetaSchema(e){let t=this.opts;this.opts=this._metaOpts;try{E.compileSchema.call(this,e)}finally{this.opts=t}}};ne.ValidationError=g.default,ne.MissingRefError=S.default,e.default=ne;function ae(e,t,s,g=`error`){for(let S in e){let w=S;w in t&&this.logger[g](`${s}: option ${S}. ${e[w]}`)}}function oe(e){return e=(0,O.normalizeId)(e),this.schemas[e]||this.refs[e]}function se(){let e=this.opts.schemas;if(e)if(Array.isArray(e))this.addSchema(e);else for(let t in e)this.addSchema(e[t],t)}function ce(){for(let e in this.opts.formats){let t=this.opts.formats[e];t&&this.addFormat(e,t)}}function ue(e){if(Array.isArray(e)){this.addVocabulary(e);return}this.logger.warn(`keywords option as map is deprecated, pass array`);for(let t in e){let s=e[t];s.keyword||=t,this.addKeyword(s)}}function de(){let e={...this.opts};for(let t of H)delete e[t];return e}let fe={log(){},warn(){},error(){}};function me(e){if(e===!1)return fe;if(e===void 0)return console;if(e.log&&e.warn&&e.error)return e;throw Error(`logger must implement log, warn and error methods`)}let ge=/^[a-z_$][a-z0-9_$:-]*$/i;function _e(e,t){let{RULES:s}=this;if((0,j.eachItem)(e,e=>{if(s.keywords[e])throw Error(`Keyword ${e} is already defined`);if(!ge.test(e))throw Error(`Keyword ${e} has invalid name`)}),t&&t.$data&&!(`code`in t||`validate`in t))throw Error(`$data keyword must have "code" or "validate" function`)}function ve(e,t,s){var g;let S=t?.post;if(s&&S)throw Error(`keyword with "post" flag cannot have "type"`);let{RULES:w}=this,E=S?w.post:w.rules.find(({type:e})=>e===s);if(E||(E={type:s,rules:[]},w.rules.push(E)),w.keywords[e]=!0,!t)return;let D={keyword:e,definition:{...t,type:(0,k.getJSONTypes)(t.type),schemaType:(0,k.getJSONTypes)(t.schemaType)}};t.before?ye.call(this,E,D,t.before):E.rules.push(D),w.all[e]=D,(g=t.implements)==null||g.forEach(e=>this.addKeyword(e))}function ye(e,t,s){let g=e.rules.findIndex(e=>e.keyword===s);g>=0?e.rules.splice(g,0,t):(e.rules.push(t),this.logger.warn(`rule ${s} is not defined`))}function Ce(e){let{metaSchema:t}=e;t!==void 0&&(e.$data&&this.opts.$data&&(t=Te(t)),e.validateSchema=this.compile(t,!0))}let we={$ref:`https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#`};function Te(e){return{anyOf:[e,we]}}})),require_id=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default={keyword:`id`,code(){throw Error(`NOT SUPPORTED: keyword "id", use "$id" for schema ID`)}}})),require_ref=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.callRef=e.getValidate=void 0;let t=require_ref_error(),s=require_code(),g=require_codegen(),S=require_names(),w=require_compile(),E=require_util(),D={keyword:`$ref`,schemaType:`string`,code(e){let{gen:s,schema:S,it:E}=e,{baseId:D,schemaEnv:j,validateName:F,opts:L,self:B}=E,{root:H}=j;if((S===`#`||S===`#/`)&&D===H.baseId)return J();let q=w.resolveRef.call(B,H,D,S);if(q===void 0)throw new t.default(E.opts.uriResolver,D,S);if(q instanceof w.SchemaEnv)return Y(q);return ee(q);function J(){if(j===H)return k(e,F,j,j.$async);let t=s.scopeValue(`root`,{ref:H});return k(e,(0,g._)`${t}.validate`,H,H.$async)}function Y(t){k(e,O(e,t),t,t.$async)}function ee(t){let w=s.scopeValue(`schema`,L.code.source===!0?{ref:t,code:(0,g.stringify)(t)}:{ref:t}),E=s.name(`valid`),D=e.subschema({schema:t,dataTypes:[],schemaPath:g.nil,topSchemaRef:w,errSchemaPath:S},E);e.mergeEvaluated(D),e.ok(E)}}};function O(e,t){let{gen:s}=e;return t.validate?s.scopeValue(`validate`,{ref:t.validate}):(0,g._)`${s.scopeValue(`wrapper`,{ref:t})}.validate`}e.getValidate=O;function k(e,t,w,D){let{gen:O,it:k}=e,{allErrors:j,schemaEnv:F,opts:L}=k,B=L.passContext?S.default.this:g.nil;D?H():q();function H(){if(!F.$async)throw Error(`async schema referenced by sync schema`);let S=O.let(`valid`);O.try(()=>{O.code((0,g._)`await ${(0,s.callValidateCode)(e,t,B)}`),Y(t),j||O.assign(S,!0)},e=>{O.if((0,g._)`!(${e} instanceof ${k.ValidationError})`,()=>O.throw(e)),J(e),j||O.assign(S,!1)}),e.ok(S)}function q(){e.result((0,s.callValidateCode)(e,t,B),()=>Y(t),()=>J(t))}function J(e){let t=(0,g._)`${e}.errors`;O.assign(S.default.vErrors,(0,g._)`${S.default.vErrors} === null ? ${t} : ${S.default.vErrors}.concat(${t})`),O.assign(S.default.errors,(0,g._)`${S.default.vErrors}.length`)}function Y(e){var t;if(!k.opts.unevaluated)return;let s=w?.validate?.evaluated;if(k.props!==!0)if(s&&!s.dynamicProps)s.props!==void 0&&(k.props=E.mergeEvaluated.props(O,s.props,k.props));else{let t=O.var(`props`,(0,g._)`${e}.evaluated.props`);k.props=E.mergeEvaluated.props(O,t,k.props,g.Name)}if(k.items!==!0)if(s&&!s.dynamicItems)s.items!==void 0&&(k.items=E.mergeEvaluated.items(O,s.items,k.items));else{let t=O.var(`items`,(0,g._)`${e}.evaluated.items`);k.items=E.mergeEvaluated.items(O,t,k.items,g.Name)}}}e.callRef=k,e.default=D})),require_core=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_id(),s=require_ref();e.default=[`$schema`,`$id`,`$defs`,`$vocabulary`,{keyword:`$comment`},`definitions`,t.default,s.default]})),require_limitNumber=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=t.operators,g={maximum:{okStr:`<=`,ok:s.LTE,fail:s.GT},minimum:{okStr:`>=`,ok:s.GTE,fail:s.LT},exclusiveMaximum:{okStr:`<`,ok:s.LT,fail:s.GTE},exclusiveMinimum:{okStr:`>`,ok:s.GT,fail:s.LTE}};e.default={keyword:Object.keys(g),type:`number`,schemaType:`number`,$data:!0,error:{message:({keyword:e,schemaCode:s})=>(0,t.str)`must be ${g[e].okStr} ${s}`,params:({keyword:e,schemaCode:s})=>(0,t._)`{comparison: ${g[e].okStr}, limit: ${s}}`},code(e){let{keyword:s,data:S,schemaCode:w}=e;e.fail$data((0,t._)`${S} ${g[s].fail} ${w} || isNaN(${S})`)}}})),require_multipleOf=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen();e.default={keyword:`multipleOf`,type:`number`,schemaType:`number`,$data:!0,error:{message:({schemaCode:e})=>(0,t.str)`must be multiple of ${e}`,params:({schemaCode:e})=>(0,t._)`{multipleOf: ${e}}`},code(e){let{gen:s,data:g,schemaCode:S,it:w}=e,E=w.opts.multipleOfPrecision,D=s.let(`res`),O=E?(0,t._)`Math.abs(Math.round(${D}) - ${D}) > 1e-${E}`:(0,t._)`${D} !== parseInt(${D})`;e.fail$data((0,t._)`(${S} === 0 || (${D} = ${g}/${S}, ${O}))`)}}})),require_ucs2length=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});function t(e){let t=e.length,s=0,g=0,S;for(;g<t;)s++,S=e.charCodeAt(g++),S>=55296&&S<=56319&&g<t&&(S=e.charCodeAt(g),(S&64512)==56320&&g++);return s}e.default=t,t.code=`require("ajv/dist/runtime/ucs2length").default`})),require_limitLength=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_util(),g=require_ucs2length();e.default={keyword:[`maxLength`,`minLength`],type:`string`,schemaType:`number`,$data:!0,error:{message({keyword:e,schemaCode:s}){let g=e===`maxLength`?`more`:`fewer`;return(0,t.str)`must NOT have ${g} than ${s} characters`},params:({schemaCode:e})=>(0,t._)`{limit: ${e}}`},code(e){let{keyword:S,data:w,schemaCode:E,it:D}=e,O=S===`maxLength`?t.operators.GT:t.operators.LT,k=D.opts.unicode===!1?(0,t._)`${w}.length`:(0,t._)`${(0,s.useFunc)(e.gen,g.default)}(${w})`;e.fail$data((0,t._)`${k} ${O} ${E}`)}}})),require_pattern=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_code(),s=require_util(),g=require_codegen();e.default={keyword:`pattern`,type:`string`,schemaType:`string`,$data:!0,error:{message:({schemaCode:e})=>(0,g.str)`must match pattern "${e}"`,params:({schemaCode:e})=>(0,g._)`{pattern: ${e}}`},code(e){let{gen:S,data:w,$data:E,schema:D,schemaCode:O,it:k}=e,j=k.opts.unicodeRegExp?`u`:``;if(E){let{regExp:t}=k.opts.code,E=t.code===`new RegExp`?(0,g._)`new RegExp`:(0,s.useFunc)(S,t),D=S.let(`valid`);S.try(()=>S.assign(D,(0,g._)`${E}(${O}, ${j}).test(${w})`),()=>S.assign(D,!1)),e.fail$data((0,g._)`!${D}`)}else{let s=(0,t.usePattern)(e,D);e.fail$data((0,g._)`!${s}.test(${w})`)}}}})),require_limitProperties=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen();e.default={keyword:[`maxProperties`,`minProperties`],type:`object`,schemaType:`number`,$data:!0,error:{message({keyword:e,schemaCode:s}){let g=e===`maxProperties`?`more`:`fewer`;return(0,t.str)`must NOT have ${g} than ${s} properties`},params:({schemaCode:e})=>(0,t._)`{limit: ${e}}`},code(e){let{keyword:s,data:g,schemaCode:S}=e,w=s===`maxProperties`?t.operators.GT:t.operators.LT;e.fail$data((0,t._)`Object.keys(${g}).length ${w} ${S}`)}}})),require_required=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_code(),s=require_codegen(),g=require_util();e.default={keyword:`required`,type:`object`,schemaType:`array`,$data:!0,error:{message:({params:{missingProperty:e}})=>(0,s.str)`must have required property '${e}'`,params:({params:{missingProperty:e}})=>(0,s._)`{missingProperty: ${e}}`},code(e){let{gen:S,schema:w,schemaCode:E,data:D,$data:O,it:k}=e,{opts:j}=k;if(!O&&w.length===0)return;let F=w.length>=j.loopRequired;if(k.allErrors?L():B(),j.strictRequired){let t=e.parentSchema.properties,{definedProperties:s}=e.it;for(let e of w)if(t?.[e]===void 0&&!s.has(e)){let t=`required property "${e}" is not defined at "${k.schemaEnv.baseId+k.errSchemaPath}" (strictRequired)`;(0,g.checkStrictMode)(k,t,k.opts.strictRequired)}}function L(){if(F||O)e.block$data(s.nil,H);else for(let s of w)(0,t.checkReportMissingProp)(e,s)}function B(){let s=S.let(`missing`);if(F||O){let t=S.let(`valid`,!0);e.block$data(t,()=>q(s,t)),e.ok(t)}else S.if((0,t.checkMissingProp)(e,w,s)),(0,t.reportMissingProp)(e,s),S.else()}function H(){S.forOf(`prop`,E,s=>{e.setParams({missingProperty:s}),S.if((0,t.noPropertyInData)(S,D,s,j.ownProperties),()=>e.error())})}function q(g,w){e.setParams({missingProperty:g}),S.forOf(g,E,()=>{S.assign(w,(0,t.propertyInData)(S,D,g,j.ownProperties)),S.if((0,s.not)(w),()=>{e.error(),S.break()})},s.nil)}}}})),require_limitItems=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen();e.default={keyword:[`maxItems`,`minItems`],type:`array`,schemaType:`number`,$data:!0,error:{message({keyword:e,schemaCode:s}){let g=e===`maxItems`?`more`:`fewer`;return(0,t.str)`must NOT have ${g} than ${s} items`},params:({schemaCode:e})=>(0,t._)`{limit: ${e}}`},code(e){let{keyword:s,data:g,schemaCode:S}=e,w=s===`maxItems`?t.operators.GT:t.operators.LT;e.fail$data((0,t._)`${g}.length ${w} ${S}`)}}})),require_equal=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_fast_deep_equal();t.code=`require("ajv/dist/runtime/equal").default`,e.default=t})),require_uniqueItems=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_dataType(),s=require_codegen(),g=require_util(),S=require_equal();e.default={keyword:`uniqueItems`,type:`array`,schemaType:`boolean`,$data:!0,error:{message:({params:{i:e,j:t}})=>(0,s.str)`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>(0,s._)`{i: ${e}, j: ${t}}`},code(e){let{gen:w,data:E,$data:D,schema:O,parentSchema:k,schemaCode:j,it:F}=e;if(!D&&!O)return;let L=w.let(`valid`),B=k.items?(0,t.getSchemaTypes)(k.items):[];e.block$data(L,H,(0,s._)`${j} === false`),e.ok(L);function H(){let t=w.let(`i`,(0,s._)`${E}.length`),g=w.let(`j`);e.setParams({i:t,j:g}),w.assign(L,!0),w.if((0,s._)`${t} > 1`,()=>(q()?J:Y)(t,g))}function q(){return B.length>0&&!B.some(e=>e===`object`||e===`array`)}function J(g,S){let D=w.name(`item`),O=(0,t.checkDataTypes)(B,D,F.opts.strictNumbers,t.DataType.Wrong),k=w.const(`indices`,(0,s._)`{}`);w.for((0,s._)`;${g}--;`,()=>{w.let(D,(0,s._)`${E}[${g}]`),w.if(O,(0,s._)`continue`),B.length>1&&w.if((0,s._)`typeof ${D} == "string"`,(0,s._)`${D} += "_"`),w.if((0,s._)`typeof ${k}[${D}] == "number"`,()=>{w.assign(S,(0,s._)`${k}[${D}]`),e.error(),w.assign(L,!1).break()}).code((0,s._)`${k}[${D}] = ${g}`)})}function Y(t,D){let O=(0,g.useFunc)(w,S.default),k=w.name(`outer`);w.label(k).for((0,s._)`;${t}--;`,()=>w.for((0,s._)`${D} = ${t}; ${D}--;`,()=>w.if((0,s._)`${O}(${E}[${t}], ${E}[${D}])`,()=>{e.error(),w.assign(L,!1).break(k)})))}}}})),require_const=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_util(),g=require_equal();e.default={keyword:`const`,$data:!0,error:{message:`must be equal to constant`,params:({schemaCode:e})=>(0,t._)`{allowedValue: ${e}}`},code(e){let{gen:S,data:w,$data:E,schemaCode:D,schema:O}=e;E||O&&typeof O==`object`?e.fail$data((0,t._)`!${(0,s.useFunc)(S,g.default)}(${w}, ${D})`):e.fail((0,t._)`${O} !== ${w}`)}}})),require_enum=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_util(),g=require_equal();e.default={keyword:`enum`,schemaType:`array`,$data:!0,error:{message:`must be equal to one of the allowed values`,params:({schemaCode:e})=>(0,t._)`{allowedValues: ${e}}`},code(e){let{gen:S,data:w,$data:E,schema:D,schemaCode:O,it:k}=e;if(!E&&D.length===0)throw Error(`enum must have non-empty array`);let j=D.length>=k.opts.loopEnum,F,L=()=>F??=(0,s.useFunc)(S,g.default),B;if(j||E)B=S.let(`valid`),e.block$data(B,H);else{if(!Array.isArray(D))throw Error(`ajv implementation error`);let e=S.const(`vSchema`,O);B=(0,t.or)(...D.map((t,s)=>q(e,s)))}e.pass(B);function H(){S.assign(B,!1),S.forOf(`v`,O,e=>S.if((0,t._)`${L()}(${w}, ${e})`,()=>S.assign(B,!0).break()))}function q(e,s){let g=D[s];return typeof g==`object`&&g?(0,t._)`${L()}(${w}, ${e}[${s}])`:(0,t._)`${w} === ${g}`}}}})),require_validation$2=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_limitNumber(),s=require_multipleOf(),g=require_limitLength(),S=require_pattern(),w=require_limitProperties(),E=require_required(),D=require_limitItems(),O=require_uniqueItems(),k=require_const(),j=require_enum();e.default=[t.default,s.default,g.default,S.default,w.default,E.default,D.default,O.default,{keyword:`type`,schemaType:[`string`,`array`]},{keyword:`nullable`,schemaType:`boolean`},k.default,j.default]})),require_additionalItems=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateAdditionalItems=void 0;let t=require_codegen(),s=require_util(),g={keyword:`additionalItems`,type:`array`,schemaType:[`boolean`,`object`],before:`uniqueItems`,error:{message:({params:{len:e}})=>(0,t.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,t._)`{limit: ${e}}`},code(e){let{parentSchema:t,it:g}=e,{items:w}=t;if(!Array.isArray(w)){(0,s.checkStrictMode)(g,`"additionalItems" is ignored when "items" is not an array of schemas`);return}S(e,w)}};function S(e,g){let{gen:S,schema:w,data:E,keyword:D,it:O}=e;O.items=!0;let k=S.const(`len`,(0,t._)`${E}.length`);if(w===!1)e.setParams({len:g.length}),e.pass((0,t._)`${k} <= ${g.length}`);else if(typeof w==`object`&&!(0,s.alwaysValidSchema)(O,w)){let s=S.var(`valid`,(0,t._)`${k} <= ${g.length}`);S.if((0,t.not)(s),()=>j(s)),e.ok(s)}function j(w){S.forRange(`i`,g.length,k,g=>{e.subschema({keyword:D,dataProp:g,dataPropType:s.Type.Num},w),O.allErrors||S.if((0,t.not)(w),()=>S.break())})}}e.validateAdditionalItems=S,e.default=g})),require_items=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateTuple=void 0;let t=require_codegen(),s=require_util(),g=require_code(),S={keyword:`items`,type:`array`,schemaType:[`object`,`array`,`boolean`],before:`uniqueItems`,code(e){let{schema:t,it:S}=e;if(Array.isArray(t))return w(e,`additionalItems`,t);S.items=!0,!(0,s.alwaysValidSchema)(S,t)&&e.ok((0,g.validateArray)(e))}};function w(e,g,S=e.schema){let{gen:w,parentSchema:E,data:D,keyword:O,it:k}=e;L(E),k.opts.unevaluated&&S.length&&k.items!==!0&&(k.items=s.mergeEvaluated.items(w,S.length,k.items));let j=w.name(`valid`),F=w.const(`len`,(0,t._)`${D}.length`);S.forEach((g,S)=>{(0,s.alwaysValidSchema)(k,g)||(w.if((0,t._)`${F} > ${S}`,()=>e.subschema({keyword:O,schemaProp:S,dataProp:S},j)),e.ok(j))});function L(e){let{opts:t,errSchemaPath:w}=k,E=S.length,D=E===e.minItems&&(E===e.maxItems||e[g]===!1);if(t.strictTuples&&!D){let e=`"${O}" is ${E}-tuple, but minItems or maxItems/${g} are not specified or different at path "${w}"`;(0,s.checkStrictMode)(k,e,t.strictTuples)}}}e.validateTuple=w,e.default=S})),require_prefixItems=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_items();e.default={keyword:`prefixItems`,type:`array`,schemaType:[`array`],before:`uniqueItems`,code:e=>(0,t.validateTuple)(e,`items`)}})),require_items2020=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_util(),g=require_code(),S=require_additionalItems();e.default={keyword:`items`,type:`array`,schemaType:[`object`,`boolean`],before:`uniqueItems`,error:{message:({params:{len:e}})=>(0,t.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,t._)`{limit: ${e}}`},code(e){let{schema:t,parentSchema:w,it:E}=e,{prefixItems:D}=w;E.items=!0,!(0,s.alwaysValidSchema)(E,t)&&(D?(0,S.validateAdditionalItems)(e,D):e.ok((0,g.validateArray)(e)))}}})),require_contains=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_util();e.default={keyword:`contains`,type:`array`,schemaType:[`object`,`boolean`],before:`uniqueItems`,trackErrors:!0,error:{message:({params:{min:e,max:s}})=>s===void 0?(0,t.str)`must contain at least ${e} valid item(s)`:(0,t.str)`must contain at least ${e} and no more than ${s} valid item(s)`,params:({params:{min:e,max:s}})=>s===void 0?(0,t._)`{minContains: ${e}}`:(0,t._)`{minContains: ${e}, maxContains: ${s}}`},code(e){let{gen:g,schema:S,parentSchema:w,data:E,it:D}=e,O,k,{minContains:j,maxContains:F}=w;D.opts.next?(O=j===void 0?1:j,k=F):O=1;let L=g.const(`len`,(0,t._)`${E}.length`);if(e.setParams({min:O,max:k}),k===void 0&&O===0){(0,s.checkStrictMode)(D,`"minContains" == 0 without "maxContains": "contains" keyword ignored`);return}if(k!==void 0&&O>k){(0,s.checkStrictMode)(D,`"minContains" > "maxContains" is always invalid`),e.fail();return}if((0,s.alwaysValidSchema)(D,S)){let s=(0,t._)`${L} >= ${O}`;k!==void 0&&(s=(0,t._)`${s} && ${L} <= ${k}`),e.pass(s);return}D.items=!0;let B=g.name(`valid`);k===void 0&&O===1?q(B,()=>g.if(B,()=>g.break())):O===0?(g.let(B,!0),k!==void 0&&g.if((0,t._)`${E}.length > 0`,H)):(g.let(B,!1),H()),e.result(B,()=>e.reset());function H(){let e=g.name(`_valid`),t=g.let(`count`,0);q(e,()=>g.if(e,()=>J(t)))}function q(t,S){g.forRange(`i`,0,L,g=>{e.subschema({keyword:`contains`,dataProp:g,dataPropType:s.Type.Num,compositeRule:!0},t),S()})}function J(e){g.code((0,t._)`${e}++`),k===void 0?g.if((0,t._)`${e} >= ${O}`,()=>g.assign(B,!0).break()):(g.if((0,t._)`${e} > ${k}`,()=>g.assign(B,!1).break()),O===1?g.assign(B,!0):g.if((0,t._)`${e} >= ${O}`,()=>g.assign(B,!0)))}}}})),require_dependencies=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateSchemaDeps=e.validatePropertyDeps=e.error=void 0;let t=require_codegen(),s=require_util(),g=require_code();e.error={message:({params:{property:e,depsCount:s,deps:g}})=>{let S=s===1?`property`:`properties`;return(0,t.str)`must have ${S} ${g} when property ${e} is present`},params:({params:{property:e,depsCount:s,deps:g,missingProperty:S}})=>(0,t._)`{property: ${e},
53
53
  missingProperty: ${S},
54
54
  depsCount: ${s},
55
- deps: ${g}}`};let S={keyword:`dependencies`,type:`object`,schemaType:`object`,error:e.error,code(e){let[t,s]=w(e);E(e,t),D(e,s)}};function w({schema:e}){let t={},s={};for(let g in e){if(g===`__proto__`)continue;let S=Array.isArray(e[g])?t:s;S[g]=e[g]}return[t,s]}function E(e,s=e.schema){let{gen:S,data:w,it:E}=e;if(Object.keys(s).length===0)return;let D=S.let(`missing`);for(let O in s){let k=s[O];if(k.length===0)continue;let j=(0,g.propertyInData)(S,w,O,E.opts.ownProperties);e.setParams({property:O,depsCount:k.length,deps:k.join(`, `)}),E.allErrors?S.if(j,()=>{for(let t of k)(0,g.checkReportMissingProp)(e,t)}):(S.if((0,t._)`${j} && (${(0,g.checkMissingProp)(e,k,D)})`),(0,g.reportMissingProp)(e,D),S.else())}}e.validatePropertyDeps=E;function D(e,t=e.schema){let{gen:S,data:w,keyword:E,it:D}=e,O=S.name(`valid`);for(let k in t)(0,s.alwaysValidSchema)(D,t[k])||(S.if((0,g.propertyInData)(S,w,k,D.opts.ownProperties),()=>{let t=e.subschema({keyword:E,schemaProp:k},O);e.mergeValidEvaluated(t,O)},()=>S.var(O,!0)),e.ok(O))}e.validateSchemaDeps=D,e.default=S})),require_propertyNames=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_util();e.default={keyword:`propertyNames`,type:`object`,schemaType:[`object`,`boolean`],error:{message:`property name must be valid`,params:({params:e})=>(0,t._)`{propertyName: ${e.propertyName}}`},code(e){let{gen:g,schema:S,data:w,it:E}=e;if((0,s.alwaysValidSchema)(E,S))return;let D=g.name(`valid`);g.forIn(`key`,w,s=>{e.setParams({propertyName:s}),e.subschema({keyword:`propertyNames`,data:s,dataTypes:[`string`],propertyName:s,compositeRule:!0},D),g.if((0,t.not)(D),()=>{e.error(!0),E.allErrors||g.break()})}),e.ok(D)}}})),require_additionalProperties=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_code(),s=require_codegen(),g=require_names(),S=require_util();e.default={keyword:`additionalProperties`,type:[`object`],schemaType:[`boolean`,`object`],allowUndefined:!0,trackErrors:!0,error:{message:`must NOT have additional properties`,params:({params:e})=>(0,s._)`{additionalProperty: ${e.additionalProperty}}`},code(e){let{gen:w,schema:E,parentSchema:D,data:O,errsCount:k,it:j}=e;if(!k)throw Error(`ajv implementation error`);let{allErrors:F,opts:L}=j;if(j.props=!0,L.removeAdditional!==`all`&&(0,S.alwaysValidSchema)(j,E))return;let B=(0,t.allSchemaProperties)(D.properties),H=(0,t.allSchemaProperties)(D.patternProperties);q(),e.ok((0,s._)`${k} === ${g.default.errors}`);function q(){w.forIn(`key`,O,e=>{!B.length&&!H.length?ee(e):w.if(J(e),()=>ee(e))})}function J(g){let E;if(B.length>8){let e=(0,S.schemaRefOrVal)(j,D.properties,`properties`);E=(0,t.isOwnProperty)(w,e,g)}else E=B.length?(0,s.or)(...B.map(e=>(0,s._)`${g} === ${e}`)):s.nil;return H.length&&(E=(0,s.or)(E,...H.map(S=>(0,s._)`${(0,t.usePattern)(e,S)}.test(${g})`))),(0,s.not)(E)}function Y(e){w.code((0,s._)`delete ${O}[${e}]`)}function ee(t){if(L.removeAdditional===`all`||L.removeAdditional&&E===!1){Y(t);return}if(E===!1){e.setParams({additionalProperty:t}),e.error(),F||w.break();return}if(typeof E==`object`&&!(0,S.alwaysValidSchema)(j,E)){let g=w.name(`valid`);L.removeAdditional===`failing`?(te(t,g,!1),w.if((0,s.not)(g),()=>{e.reset(),Y(t)})):(te(t,g),F||w.if((0,s.not)(g),()=>w.break()))}}function te(t,s,g){let w={keyword:`additionalProperties`,dataProp:t,dataPropType:S.Type.Str};g===!1&&Object.assign(w,{compositeRule:!0,createErrors:!1,allErrors:!1}),e.subschema(w,s)}}}})),require_properties=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_validate(),s=require_code(),g=require_util(),S=require_additionalProperties();e.default={keyword:`properties`,type:`object`,schemaType:`object`,code(e){let{gen:w,schema:E,parentSchema:D,data:O,it:k}=e;k.opts.removeAdditional===`all`&&D.additionalProperties===void 0&&S.default.code(new t.KeywordCxt(k,S.default,`additionalProperties`));let j=(0,s.allSchemaProperties)(E);for(let e of j)k.definedProperties.add(e);k.opts.unevaluated&&j.length&&k.props!==!0&&(k.props=g.mergeEvaluated.props(w,(0,g.toHash)(j),k.props));let F=j.filter(e=>!(0,g.alwaysValidSchema)(k,E[e]));if(F.length===0)return;let L=w.name(`valid`);for(let t of F)B(t)?H(t):(w.if((0,s.propertyInData)(w,O,t,k.opts.ownProperties)),H(t),k.allErrors||w.else().var(L,!0),w.endIf()),e.it.definedProperties.add(t),e.ok(L);function B(e){return k.opts.useDefaults&&!k.compositeRule&&E[e].default!==void 0}function H(t){e.subschema({keyword:`properties`,schemaProp:t,dataProp:t},L)}}}})),require_patternProperties=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_code(),s=require_codegen(),g=require_util(),S=require_util();e.default={keyword:`patternProperties`,type:`object`,schemaType:`object`,code(e){let{gen:w,schema:E,data:D,parentSchema:O,it:k}=e,{opts:j}=k,F=(0,t.allSchemaProperties)(E),L=F.filter(e=>(0,g.alwaysValidSchema)(k,E[e]));if(F.length===0||L.length===F.length&&(!k.opts.unevaluated||k.props===!0))return;let B=j.strictSchema&&!j.allowMatchingProperties&&O.properties,H=w.name(`valid`);k.props!==!0&&!(k.props instanceof s.Name)&&(k.props=(0,S.evaluatedPropsToName)(w,k.props));let{props:q}=k;J();function J(){for(let e of F)B&&Y(e),k.allErrors?ee(e):(w.var(H,!0),ee(e),w.if(H))}function Y(e){for(let t in B)new RegExp(e).test(t)&&(0,g.checkStrictMode)(k,`property ${t} matches pattern ${e} (use allowMatchingProperties)`)}function ee(g){w.forIn(`key`,D,E=>{w.if((0,s._)`${(0,t.usePattern)(e,g)}.test(${E})`,()=>{let t=L.includes(g);t||e.subschema({keyword:`patternProperties`,schemaProp:g,dataProp:E,dataPropType:S.Type.Str},H),k.opts.unevaluated&&q!==!0?w.assign((0,s._)`${q}[${E}]`,!0):!t&&!k.allErrors&&w.if((0,s.not)(H),()=>w.break())})})}}}})),require_not=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_util();e.default={keyword:`not`,schemaType:[`object`,`boolean`],trackErrors:!0,code(e){let{gen:s,schema:g,it:S}=e;if((0,t.alwaysValidSchema)(S,g)){e.fail();return}let w=s.name(`valid`);e.subschema({keyword:`not`,compositeRule:!0,createErrors:!1,allErrors:!1},w),e.failResult(w,()=>e.reset(),()=>e.error())},error:{message:`must NOT be valid`}}})),require_anyOf=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default={keyword:`anyOf`,schemaType:`array`,trackErrors:!0,code:require_code().validateUnion,error:{message:`must match a schema in anyOf`}}})),require_oneOf=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_util();e.default={keyword:`oneOf`,schemaType:`array`,trackErrors:!0,error:{message:`must match exactly one schema in oneOf`,params:({params:e})=>(0,t._)`{passingSchemas: ${e.passing}}`},code(e){let{gen:g,schema:S,parentSchema:w,it:E}=e;if(!Array.isArray(S))throw Error(`ajv implementation error`);if(E.opts.discriminator&&w.discriminator)return;let D=S,O=g.let(`valid`,!1),k=g.let(`passing`,null),j=g.name(`_valid`);e.setParams({passing:k}),g.block(F),e.result(O,()=>e.reset(),()=>e.error(!0));function F(){D.forEach((S,w)=>{let D;(0,s.alwaysValidSchema)(E,S)?g.var(j,!0):D=e.subschema({keyword:`oneOf`,schemaProp:w,compositeRule:!0},j),w>0&&g.if((0,t._)`${j} && ${O}`).assign(O,!1).assign(k,(0,t._)`[${k}, ${w}]`).else(),g.if(j,()=>{g.assign(O,!0),g.assign(k,w),D&&e.mergeEvaluated(D,t.Name)})})}}}})),require_allOf=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_util();e.default={keyword:`allOf`,schemaType:`array`,code(e){let{gen:s,schema:g,it:S}=e;if(!Array.isArray(g))throw Error(`ajv implementation error`);let w=s.name(`valid`);g.forEach((s,g)=>{if((0,t.alwaysValidSchema)(S,s))return;let E=e.subschema({keyword:`allOf`,schemaProp:g},w);e.ok(w),e.mergeEvaluated(E)})}}})),require_if=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_util(),g={keyword:`if`,schemaType:[`object`,`boolean`],trackErrors:!0,error:{message:({params:e})=>(0,t.str)`must match "${e.ifClause}" schema`,params:({params:e})=>(0,t._)`{failingKeyword: ${e.ifClause}}`},code(e){let{gen:g,parentSchema:w,it:E}=e;w.then===void 0&&w.else===void 0&&(0,s.checkStrictMode)(E,`"if" without "then" and "else" is ignored`);let D=S(E,`then`),O=S(E,`else`);if(!D&&!O)return;let k=g.let(`valid`,!0),j=g.name(`_valid`);if(F(),e.reset(),D&&O){let t=g.let(`ifClause`);e.setParams({ifClause:t}),g.if(j,L(`then`,t),L(`else`,t))}else D?g.if(j,L(`then`)):g.if((0,t.not)(j),L(`else`));e.pass(k,()=>e.error(!0));function F(){let t=e.subschema({keyword:`if`,compositeRule:!0,createErrors:!1,allErrors:!1},j);e.mergeEvaluated(t)}function L(s,S){return()=>{let w=e.subschema({keyword:s},j);g.assign(k,j),e.mergeValidEvaluated(w,k),S?g.assign(S,(0,t._)`${s}`):e.setParams({ifClause:s})}}}};function S(e,t){let g=e.schema[t];return g!==void 0&&!(0,s.alwaysValidSchema)(e,g)}e.default=g})),require_thenElse=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_util();e.default={keyword:[`then`,`else`],schemaType:[`object`,`boolean`],code({keyword:e,parentSchema:s,it:g}){s.if===void 0&&(0,t.checkStrictMode)(g,`"${e}" without "if" is ignored`)}}})),require_applicator=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_additionalItems(),s=require_prefixItems(),g=require_items(),S=require_items2020(),w=require_contains(),E=require_dependencies(),D=require_propertyNames(),O=require_additionalProperties(),k=require_properties(),j=require_patternProperties(),F=require_not(),L=require_anyOf(),B=require_oneOf(),H=require_allOf(),q=require_if(),J=require_thenElse();function Y(e=!1){let Y=[F.default,L.default,B.default,H.default,q.default,J.default,D.default,O.default,E.default,k.default,j.default];return e?Y.push(s.default,S.default):Y.push(t.default,g.default),Y.push(w.default),Y}e.default=Y})),require_format$1=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen();e.default={keyword:`format`,type:[`number`,`string`],schemaType:`string`,$data:!0,error:{message:({schemaCode:e})=>(0,t.str)`must match format "${e}"`,params:({schemaCode:e})=>(0,t._)`{format: ${e}}`},code(e,s){let{gen:g,data:S,$data:w,schema:E,schemaCode:D,it:O}=e,{opts:k,errSchemaPath:j,schemaEnv:F,self:L}=O;if(!k.validateFormats)return;w?B():H();function B(){let w=g.scopeValue(`formats`,{ref:L.formats,code:k.code.formats}),E=g.const(`fDef`,(0,t._)`${w}[${D}]`),O=g.let(`fType`),j=g.let(`format`);g.if((0,t._)`typeof ${E} == "object" && !(${E} instanceof RegExp)`,()=>g.assign(O,(0,t._)`${E}.type || "string"`).assign(j,(0,t._)`${E}.validate`),()=>g.assign(O,(0,t._)`"string"`).assign(j,E)),e.fail$data((0,t.or)(B(),H()));function B(){return k.strictSchema===!1?t.nil:(0,t._)`${D} && !${j}`}function H(){let e=F.$async?(0,t._)`(${E}.async ? await ${j}(${S}) : ${j}(${S}))`:(0,t._)`${j}(${S})`,g=(0,t._)`(typeof ${j} == "function" ? ${e} : ${j}.test(${S}))`;return(0,t._)`${j} && ${j} !== true && ${O} === ${s} && !${g}`}}function H(){let w=L.formats[E];if(!w){H();return}if(w===!0)return;let[D,O,B]=q(w);D===s&&e.pass(J());function H(){if(k.strictSchema===!1){L.logger.warn(e());return}throw Error(e());function e(){return`unknown format "${E}" ignored in schema at path "${j}"`}}function q(e){let s=e instanceof RegExp?(0,t.regexpCode)(e):k.code.formats?(0,t._)`${k.code.formats}${(0,t.getProperty)(E)}`:void 0,S=g.scopeValue(`formats`,{key:E,ref:e,code:s});return typeof e==`object`&&!(e instanceof RegExp)?[e.type||`string`,e.validate,(0,t._)`${S}.validate`]:[`string`,e,S]}function J(){if(typeof w==`object`&&!(w instanceof RegExp)&&w.async){if(!F.$async)throw Error(`async format in sync schema`);return(0,t._)`await ${B}(${S})`}return typeof O==`function`?(0,t._)`${B}(${S})`:(0,t._)`${B}.test(${S})`}}}}})),require_format=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=[require_format$1().default]})),require_metadata=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.contentVocabulary=e.metadataVocabulary=void 0,e.metadataVocabulary=[`title`,`description`,`default`,`deprecated`,`readOnly`,`writeOnly`,`examples`],e.contentVocabulary=[`contentMediaType`,`contentEncoding`,`contentSchema`]})),require_draft7=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_core(),s=require_validation$2(),g=require_applicator(),S=require_format(),w=require_metadata();e.default=[t.default,s.default,(0,g.default)(),S.default,w.metadataVocabulary,w.contentVocabulary]})),require_types=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.DiscrError=void 0;var t;(function(e){e.Tag=`tag`,e.Mapping=`mapping`})(t||(e.DiscrError=t={}))})),require_discriminator=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_types(),g=require_compile(),S=require_ref_error(),w=require_util();e.default={keyword:`discriminator`,type:`object`,schemaType:`object`,error:{message:({params:{discrError:e,tagName:t}})=>e===s.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:s,tagName:g}})=>(0,t._)`{error: ${e}, tag: ${g}, tagValue: ${s}}`},code(e){let{gen:E,data:D,schema:O,parentSchema:k,it:j}=e,{oneOf:F}=k;if(!j.opts.discriminator)throw Error(`discriminator: requires discriminator option`);let L=O.propertyName;if(typeof L!=`string`)throw Error(`discriminator: requires propertyName`);if(O.mapping)throw Error(`discriminator: mapping is not supported`);if(!F)throw Error(`discriminator: requires oneOf keyword`);let B=E.let(`valid`,!1),H=E.const(`tag`,(0,t._)`${D}${(0,t.getProperty)(L)}`);E.if((0,t._)`typeof ${H} == "string"`,()=>q(),()=>e.error(!1,{discrError:s.DiscrError.Tag,tag:H,tagName:L})),e.ok(B);function q(){let g=Y();E.if(!1);for(let e in g)E.elseIf((0,t._)`${H} === ${e}`),E.assign(B,J(g[e]));E.else(),e.error(!1,{discrError:s.DiscrError.Mapping,tag:H,tagName:L}),E.endIf()}function J(s){let g=E.name(`valid`),S=e.subschema({keyword:`oneOf`,schemaProp:s},g);return e.mergeEvaluated(S,t.Name),g}function Y(){var e;let t={},s=D(k),E=!0;for(let e=0;e<F.length;e++){let t=F[e];if(t?.$ref&&!(0,w.schemaHasRulesButRef)(t,j.self.RULES)){let e=t.$ref;if(t=g.resolveRef.call(j.self,j.schemaEnv.root,j.baseId,e),t instanceof g.SchemaEnv&&(t=t.schema),t===void 0)throw new S.default(j.opts.uriResolver,j.baseId,e)}let k=t?.properties?.[L];if(typeof k!=`object`)throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${L}"`);E&&=s||D(t),O(k,e)}if(!E)throw Error(`discriminator: "${L}" must be required`);return t;function D({required:e}){return Array.isArray(e)&&e.includes(L)}function O(e,t){if(e.const)B(e.const,t);else if(e.enum)for(let s of e.enum)B(s,t);else throw Error(`discriminator: "properties/${L}" must have "const" or "enum"`)}function B(e,s){if(typeof e!=`string`||e in t)throw Error(`discriminator: "${L}" values must be unique strings`);t[e]=s}}}}})),require_json_schema_draft_07=__commonJSMin$1(((e,t)=>{t.exports={$schema:`http://json-schema.org/draft-07/schema#`,$id:`http://json-schema.org/draft-07/schema#`,title:`Core schema meta-schema`,definitions:{schemaArray:{type:`array`,minItems:1,items:{$ref:`#`}},nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:`#/definitions/nonNegativeInteger`},{default:0}]},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}},type:[`object`,`boolean`],properties:{$id:{type:`string`,format:`uri-reference`},$schema:{type:`string`,format:`uri`},$ref:{type:`string`,format:`uri-reference`},$comment:{type:`string`},title:{type:`string`},description:{type:`string`},default:!0,readOnly:{type:`boolean`,default:!1},examples:{type:`array`,items:!0},multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/definitions/nonNegativeInteger`},minLength:{$ref:`#/definitions/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},additionalItems:{$ref:`#`},items:{anyOf:[{$ref:`#`},{$ref:`#/definitions/schemaArray`}],default:!0},maxItems:{$ref:`#/definitions/nonNegativeInteger`},minItems:{$ref:`#/definitions/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},contains:{$ref:`#`},maxProperties:{$ref:`#/definitions/nonNegativeInteger`},minProperties:{$ref:`#/definitions/nonNegativeIntegerDefault0`},required:{$ref:`#/definitions/stringArray`},additionalProperties:{$ref:`#`},definitions:{type:`object`,additionalProperties:{$ref:`#`},default:{}},properties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$ref:`#`},propertyNames:{format:`regex`},default:{}},dependencies:{type:`object`,additionalProperties:{anyOf:[{$ref:`#`},{$ref:`#/definitions/stringArray`}]}},propertyNames:{$ref:`#`},const:!0,enum:{type:`array`,items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:`#/definitions/simpleTypes`},{type:`array`,items:{$ref:`#/definitions/simpleTypes`},minItems:1,uniqueItems:!0}]},format:{type:`string`},contentMediaType:{type:`string`},contentEncoding:{type:`string`},if:{$ref:`#`},then:{$ref:`#`},else:{$ref:`#`},allOf:{$ref:`#/definitions/schemaArray`},anyOf:{$ref:`#/definitions/schemaArray`},oneOf:{$ref:`#/definitions/schemaArray`},not:{$ref:`#`}},default:!0}})),require_ajv=__commonJSMin$1(((e,t)=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.MissingRefError=e.ValidationError=e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=e.Ajv=void 0;let s=require_core$1(),g=require_draft7(),S=require_discriminator(),w=require_json_schema_draft_07(),E=[`/properties`],D=`http://json-schema.org/draft-07/schema`;var O=class extends s.default{_addVocabularies(){super._addVocabularies(),g.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(S.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(w,E):w;this.addMetaSchema(e,D,!1),this.refs[`http://json-schema.org/schema`]=D}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(D)?D:void 0)}};e.Ajv=O,t.exports=e=O,t.exports.Ajv=O,Object.defineProperty(e,`__esModule`,{value:!0}),e.default=O;var k=require_validate();Object.defineProperty(e,`KeywordCxt`,{enumerable:!0,get:function(){return k.KeywordCxt}});var j=require_codegen();Object.defineProperty(e,`_`,{enumerable:!0,get:function(){return j._}}),Object.defineProperty(e,`str`,{enumerable:!0,get:function(){return j.str}}),Object.defineProperty(e,`stringify`,{enumerable:!0,get:function(){return j.stringify}}),Object.defineProperty(e,`nil`,{enumerable:!0,get:function(){return j.nil}}),Object.defineProperty(e,`Name`,{enumerable:!0,get:function(){return j.Name}}),Object.defineProperty(e,`CodeGen`,{enumerable:!0,get:function(){return j.CodeGen}});var F=require_validation_error();Object.defineProperty(e,`ValidationError`,{enumerable:!0,get:function(){return F.default}});var L=require_ref_error();Object.defineProperty(e,`MissingRefError`,{enumerable:!0,get:function(){return L.default}})})),require_formats=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.formatNames=e.fastFormats=e.fullFormats=void 0;function t(e,t){return{validate:e,compare:t}}e.fullFormats={date:t(w,E),time:t(O(!0),k),"date-time":t(L(!0),B),"iso-time":t(O(),j),"iso-date-time":t(L(),H),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:Y,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:de,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:te,int32:{type:`number`,validate:oe},int64:{type:`number`,validate:se},float:{type:`number`,validate:ce},double:{type:`number`,validate:ce},password:!0,binary:!0},e.fastFormats={...e.fullFormats,date:t(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,E),time:t(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,k),"date-time":t(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,B),"iso-time":t(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,j),"iso-date-time":t(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,H),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i},e.formatNames=Object.keys(e.fullFormats);function s(e){return e%4==0&&(e%100!=0||e%400==0)}let g=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,S=[0,31,28,31,30,31,30,31,31,30,31,30,31];function w(e){let t=g.exec(e);if(!t)return!1;let w=+t[1],E=+t[2],D=+t[3];return E>=1&&E<=12&&D>=1&&D<=(E===2&&s(w)?29:S[E])}function E(e,t){if(e&&t)return e>t?1:e<t?-1:0}let D=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function O(e){return function(t){let s=D.exec(t);if(!s)return!1;let g=+s[1],S=+s[2],w=+s[3],E=s[4],O=s[5]===`-`?-1:1,k=+(s[6]||0),j=+(s[7]||0);if(k>23||j>59||e&&!E)return!1;if(g<=23&&S<=59&&w<60)return!0;let F=S-j*O,L=g-k*O-(F<0?1:0);return(L===23||L===-1)&&(F===59||F===-1)&&w<61}}function k(e,t){if(!(e&&t))return;let s=new Date(`2020-01-01T`+e).valueOf(),g=new Date(`2020-01-01T`+t).valueOf();if(s&&g)return s-g}function j(e,t){if(!(e&&t))return;let s=D.exec(e),g=D.exec(t);if(s&&g)return e=s[1]+s[2]+s[3],t=g[1]+g[2]+g[3],e>t?1:e<t?-1:0}let F=/t|\s/i;function L(e){let t=O(e);return function(e){let s=e.split(F);return s.length===2&&w(s[0])&&t(s[1])}}function B(e,t){if(!(e&&t))return;let s=new Date(e).valueOf(),g=new Date(t).valueOf();if(s&&g)return s-g}function H(e,t){if(!(e&&t))return;let[s,g]=e.split(F),[S,w]=t.split(F),D=E(s,S);if(D!==void 0)return D||k(g,w)}let q=/\/|:/,J=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function Y(e){return q.test(e)&&J.test(e)}let ee=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function te(e){return ee.lastIndex=0,ee.test(e)}let ne=-(2**31),ae=2**31-1;function oe(e){return Number.isInteger(e)&&e<=ae&&e>=ne}function se(e){return Number.isInteger(e)}function ce(){return!0}let ue=/[^\\]\\Z/;function de(e){if(ue.test(e))return!1;try{return new RegExp(e),!0}catch{return!1}}})),require_limit=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.formatLimitDefinition=void 0;let t=require_ajv(),s=require_codegen(),g=s.operators,S={formatMaximum:{okStr:`<=`,ok:g.LTE,fail:g.GT},formatMinimum:{okStr:`>=`,ok:g.GTE,fail:g.LT},formatExclusiveMaximum:{okStr:`<`,ok:g.LT,fail:g.GTE},formatExclusiveMinimum:{okStr:`>`,ok:g.GT,fail:g.LTE}};e.formatLimitDefinition={keyword:Object.keys(S),type:`string`,schemaType:`string`,$data:!0,error:{message:({keyword:e,schemaCode:t})=>(0,s.str)`should be ${S[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>(0,s._)`{comparison: ${S[e].okStr}, limit: ${t}}`},code(e){let{gen:g,data:w,schemaCode:E,keyword:D,it:O}=e,{opts:k,self:j}=O;if(!k.validateFormats)return;let F=new t.KeywordCxt(O,j.RULES.all.format.definition,`format`);F.$data?L():B();function L(){let t=g.scopeValue(`formats`,{ref:j.formats,code:k.code.formats}),S=g.const(`fmt`,(0,s._)`${t}[${F.schemaCode}]`);e.fail$data((0,s.or)((0,s._)`typeof ${S} != "object"`,(0,s._)`${S} instanceof RegExp`,(0,s._)`typeof ${S}.compare != "function"`,H(S)))}function B(){let t=F.schema,S=j.formats[t];if(!S||S===!0)return;if(typeof S!=`object`||S instanceof RegExp||typeof S.compare!=`function`)throw Error(`"${D}": format "${t}" does not define "compare" function`);let w=g.scopeValue(`formats`,{key:t,ref:S,code:k.code.formats?(0,s._)`${k.code.formats}${(0,s.getProperty)(t)}`:void 0});e.fail$data(H(w))}function H(e){return(0,s._)`${e}.compare(${w}, ${E}) ${S[D].fail} 0`}},dependencies:[`format`]},e.default=t=>(t.addKeyword(e.formatLimitDefinition),t)})),require_dist=__commonJSMin$1(((e,t)=>{Object.defineProperty(e,`__esModule`,{value:!0});let s=require_formats(),g=require_limit(),S=require_codegen(),w=new S.Name(`fullFormats`),E=new S.Name(`fastFormats`),D=(e,t={keywords:!0})=>{if(Array.isArray(t))return O(e,t,s.fullFormats,w),e;let[S,D]=t.mode===`fast`?[s.fastFormats,E]:[s.fullFormats,w];return O(e,t.formats||s.formatNames,S,D),t.keywords&&(0,g.default)(e),e};D.get=(e,t=`full`)=>{let g=(t===`fast`?s.fastFormats:s.fullFormats)[e];if(!g)throw Error(`Unknown format "${e}"`);return g};function O(e,t,s,g){var w,E;(E=e.opts.code).formats??(E.formats=(0,S._)`require("ajv-formats/dist/formats").${g}`);for(let g of t)e.addFormat(g,s[g])}t.exports=e=D,Object.defineProperty(e,`__esModule`,{value:!0}),e.default=D})),import_ajv=__toESM$1(require_ajv(),1),import_dist=__toESM$1(require_dist(),1);function createDefaultAjvInstance(){let e=new import_ajv.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,import_dist.default)(e),e}var AjvJsonSchemaValidator=class{constructor(e){this._ajv=e??createDefaultAjvInstance()}getValidator(e){let t=`$id`in e&&typeof e.$id==`string`?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return e=>t(e)?{valid:!0,data:e,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(t.errors)}}},ExperimentalServerTasks=class{constructor(e){this._server=e}requestStream(e,t,s){return this._server.requestStream(e,t,s)}createMessageStream(e,t){let s=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!s?.sampling?.tools)throw Error(`Client does not support sampling tools capability.`);if(e.messages.length>0){let t=e.messages[e.messages.length-1],s=Array.isArray(t.content)?t.content:[t.content],g=s.some(e=>e.type===`tool_result`),S=e.messages.length>1?e.messages[e.messages.length-2]:void 0,w=S?Array.isArray(S.content)?S.content:[S.content]:[],E=w.some(e=>e.type===`tool_use`);if(g){if(s.some(e=>e.type!==`tool_result`))throw Error(`The last message must contain only tool_result content if any is present`);if(!E)throw Error(`tool_result blocks are not matching any tool_use from the previous message`)}if(E){let e=new Set(w.filter(e=>e.type===`tool_use`).map(e=>e.id)),t=new Set(s.filter(e=>e.type===`tool_result`).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error(`ids of tool_result blocks and tool_use blocks from previous message do not match`)}}return this.requestStream({method:`sampling/createMessage`,params:e},CreateMessageResultSchema,t)}elicitInputStream(e,t){let s=this._server.getClientCapabilities(),g=e.mode??`form`;switch(g){case`url`:if(!s?.elicitation?.url)throw Error(`Client does not support url elicitation.`);break;case`form`:if(!s?.elicitation?.form)throw Error(`Client does not support form elicitation.`);break}let S=g===`form`&&e.mode===void 0?{...e,mode:`form`}:e;return this.requestStream({method:`elicitation/create`,params:S},ElicitResultSchema,t)}async getTask(e,t){return this._server.getTask({taskId:e},t)}async getTaskResult(e,t,s){return this._server.getTaskResult({taskId:e},t,s)}async listTasks(e,t){return this._server.listTasks(e?{cursor:e}:void 0,t)}async cancelTask(e,t){return this._server.cancelTask({taskId:e},t)}};function assertToolsCallTaskCapability(e,t,s){if(!e)throw Error(`${s} does not support task creation (required for ${t})`);switch(t){case`tools/call`:if(!e.tools?.call)throw Error(`${s} does not support task creation for tools/call (required for ${t})`);break;default:break}}function assertClientRequestTaskCapability(e,t,s){if(!e)throw Error(`${s} does not support task creation (required for ${t})`);switch(t){case`sampling/createMessage`:if(!e.sampling?.createMessage)throw Error(`${s} does not support task creation for sampling/createMessage (required for ${t})`);break;case`elicitation/create`:if(!e.elicitation?.create)throw Error(`${s} does not support task creation for elicitation/create (required for ${t})`);break;default:break}}var Server=class extends Protocol{constructor(e,t){super(t),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(LoggingLevelSchema.options.map((e,t)=>[e,t])),this.isMessageIgnored=(e,t)=>{let s=this._loggingLevels.get(t);return s?this.LOG_LEVEL_SEVERITY.get(e)<this.LOG_LEVEL_SEVERITY.get(s):!1},this._capabilities=t?.capabilities??{},this._instructions=t?.instructions,this._jsonSchemaValidator=t?.jsonSchemaValidator??new AjvJsonSchemaValidator,this.setRequestHandler(InitializeRequestSchema,e=>this._oninitialize(e)),this.setNotificationHandler(InitializedNotificationSchema,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(SetLevelRequestSchema,async(e,t)=>{let s=t.sessionId||t.requestInfo?.headers[`mcp-session-id`]||void 0,{level:g}=e.params,S=LoggingLevelSchema.safeParse(g);return S.success&&this._loggingLevels.set(s,S.data),{}})}get experimental(){return this._experimental||={tasks:new ExperimentalServerTasks(this)},this._experimental}registerCapabilities(e){if(this.transport)throw Error(`Cannot register capabilities after connecting to transport`);this._capabilities=mergeCapabilities(this._capabilities,e)}setRequestHandler(e,t){let s=getObjectShape(e)?.method;if(!s)throw Error(`Schema is missing a method literal`);let g;if(isZ4Schema(s)){let e=s;g=e._zod?.def?.value??e.value}else{let e=s;g=e._def?.value??e.value}if(typeof g!=`string`)throw Error(`Schema method literal must be a string`);return g===`tools/call`?super.setRequestHandler(e,async(e,s)=>{let g=safeParse(CallToolRequestSchema,e);if(!g.success){let e=g.error instanceof Error?g.error.message:String(g.error);throw new McpError(ErrorCode.InvalidParams,`Invalid tools/call request: ${e}`)}let{params:S}=g.data,w=await Promise.resolve(t(e,s));if(S.task){let e=safeParse(CreateTaskResultSchema,w);if(!e.success){let t=e.error instanceof Error?e.error.message:String(e.error);throw new McpError(ErrorCode.InvalidParams,`Invalid task creation result: ${t}`)}return e.data}let E=safeParse(CallToolResultSchema,w);if(!E.success){let e=E.error instanceof Error?E.error.message:String(E.error);throw new McpError(ErrorCode.InvalidParams,`Invalid tools/call result: ${e}`)}return E.data}):super.setRequestHandler(e,t)}assertCapabilityForMethod(e){switch(e){case`sampling/createMessage`:if(!this._clientCapabilities?.sampling)throw Error(`Client does not support sampling (required for ${e})`);break;case`elicitation/create`:if(!this._clientCapabilities?.elicitation)throw Error(`Client does not support elicitation (required for ${e})`);break;case`roots/list`:if(!this._clientCapabilities?.roots)throw Error(`Client does not support listing roots (required for ${e})`);break;case`ping`:break}}assertNotificationCapability(e){switch(e){case`notifications/message`:if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case`notifications/resources/updated`:case`notifications/resources/list_changed`:if(!this._capabilities.resources)throw Error(`Server does not support notifying about resources (required for ${e})`);break;case`notifications/tools/list_changed`:if(!this._capabilities.tools)throw Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case`notifications/prompts/list_changed`:if(!this._capabilities.prompts)throw Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case`notifications/elicitation/complete`:if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for ${e})`);break;case`notifications/cancelled`:break;case`notifications/progress`:break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case`completion/complete`:if(!this._capabilities.completions)throw Error(`Server does not support completions (required for ${e})`);break;case`logging/setLevel`:if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case`prompts/get`:case`prompts/list`:if(!this._capabilities.prompts)throw Error(`Server does not support prompts (required for ${e})`);break;case`resources/list`:case`resources/templates/list`:case`resources/read`:if(!this._capabilities.resources)throw Error(`Server does not support resources (required for ${e})`);break;case`tools/call`:case`tools/list`:if(!this._capabilities.tools)throw Error(`Server does not support tools (required for ${e})`);break;case`tasks/get`:case`tasks/list`:case`tasks/result`:case`tasks/cancel`:if(!this._capabilities.tasks)throw Error(`Server does not support tasks capability (required for ${e})`);break;case`ping`:case`initialize`:break}}assertTaskCapability(e){assertClientRequestTaskCapability(this._clientCapabilities?.tasks?.requests,e,`Client`)}assertTaskHandlerCapability(e){this._capabilities&&assertToolsCallTaskCapability(this._capabilities.tasks?.requests,e,`Server`)}async _oninitialize(e){let t=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:SUPPORTED_PROTOCOL_VERSIONS.includes(t)?t:LATEST_PROTOCOL_VERSION,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:`ping`},EmptyResultSchema)}async createMessage(e,t){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw Error(`Client does not support sampling tools capability.`);if(e.messages.length>0){let t=e.messages[e.messages.length-1],s=Array.isArray(t.content)?t.content:[t.content],g=s.some(e=>e.type===`tool_result`),S=e.messages.length>1?e.messages[e.messages.length-2]:void 0,w=S?Array.isArray(S.content)?S.content:[S.content]:[],E=w.some(e=>e.type===`tool_use`);if(g){if(s.some(e=>e.type!==`tool_result`))throw Error(`The last message must contain only tool_result content if any is present`);if(!E)throw Error(`tool_result blocks are not matching any tool_use from the previous message`)}if(E){let e=new Set(w.filter(e=>e.type===`tool_use`).map(e=>e.id)),t=new Set(s.filter(e=>e.type===`tool_result`).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error(`ids of tool_result blocks and tool_use blocks from previous message do not match`)}}return e.tools?this.request({method:`sampling/createMessage`,params:e},CreateMessageResultWithToolsSchema,t):this.request({method:`sampling/createMessage`,params:e},CreateMessageResultSchema,t)}async elicitInput(e,t){switch(e.mode??`form`){case`url`:{if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support url elicitation.`);let s=e;return this.request({method:`elicitation/create`,params:s},ElicitResultSchema,t)}case`form`:{if(!this._clientCapabilities?.elicitation?.form)throw Error(`Client does not support form elicitation.`);let s=e.mode===`form`?e:{...e,mode:`form`},g=await this.request({method:`elicitation/create`,params:s},ElicitResultSchema,t);if(g.action===`accept`&&g.content&&s.requestedSchema)try{let e=this._jsonSchemaValidator.getValidator(s.requestedSchema)(g.content);if(!e.valid)throw new McpError(ErrorCode.InvalidParams,`Elicitation response content does not match requested schema: ${e.errorMessage}`)}catch(e){throw e instanceof McpError?e:new McpError(ErrorCode.InternalError,`Error validating elicitation response: ${e instanceof Error?e.message:String(e)}`)}return g}}}createElicitationCompletionNotifier(e,t){if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for notifications/elicitation/complete)`);return()=>this.notification({method:`notifications/elicitation/complete`,params:{elicitationId:e}},t)}async listRoots(e,t){return this.request({method:`roots/list`,params:e},ListRootsResultSchema,t)}async sendLoggingMessage(e,t){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,t))return this.notification({method:`notifications/message`,params:e})}async sendResourceUpdated(e){return this.notification({method:`notifications/resources/updated`,params:e})}async sendResourceListChanged(){return this.notification({method:`notifications/resources/list_changed`})}async sendToolListChanged(){return this.notification({method:`notifications/tools/list_changed`})}async sendPromptListChanged(){return this.notification({method:`notifications/prompts/list_changed`})}};const COMPLETABLE_SYMBOL=Symbol.for(`mcp.completable`);function isCompletable(e){return!!e&&typeof e==`object`&&COMPLETABLE_SYMBOL in e}function getCompleter(e){return e[COMPLETABLE_SYMBOL]?.complete}var McpZodTypeKind;(function(e){e.Completable=`McpCompletable`})(McpZodTypeKind||={});const TOOL_NAME_REGEX=/^[A-Za-z0-9._-]{1,128}$/;function validateToolName(e){let t=[];if(e.length===0)return{isValid:!1,warnings:[`Tool name cannot be empty`]};if(e.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${e.length})`]};if(e.includes(` `)&&t.push(`Tool name contains spaces, which may cause parsing issues`),e.includes(`,`)&&t.push(`Tool name contains commas, which may cause parsing issues`),(e.startsWith(`-`)||e.endsWith(`-`))&&t.push(`Tool name starts or ends with a dash, which may cause parsing issues in some contexts`),(e.startsWith(`.`)||e.endsWith(`.`))&&t.push(`Tool name starts or ends with a dot, which may cause parsing issues in some contexts`),!TOOL_NAME_REGEX.test(e)){let s=e.split(``).filter(e=>!/[A-Za-z0-9._-]/.test(e)).filter((e,t,s)=>s.indexOf(e)===t);return t.push(`Tool name contains invalid characters: ${s.map(e=>`"${e}"`).join(`, `)}`,`Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)`),{isValid:!1,warnings:t}}return{isValid:!0,warnings:t}}function issueToolNameWarning(e,t){if(t.length>0){console.warn(`Tool name validation warning for "${e}":`);for(let e of t)console.warn(` - ${e}`);console.warn(`Tool registration will proceed, but this may cause compatibility issues.`),console.warn(`Consider updating the tool name to conform to the MCP tool naming standard.`),console.warn(`See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.`)}}function validateAndWarnToolName(e){let t=validateToolName(e);return issueToolNameWarning(e,t.warnings),t.isValid}var ExperimentalMcpServerTasks=class{constructor(e){this._mcpServer=e}registerToolTask(e,t,s){let g={taskSupport:`required`,...t.execution};if(g.taskSupport===`forbidden`)throw Error(`Cannot register task-based tool '${e}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(e,t.title,t.description,t.inputSchema,t.outputSchema,t.annotations,g,t._meta,s)}},McpServer=class{constructor(e,t){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new Server(e,t)}get experimental(){return this._experimental||={tasks:new ExperimentalMcpServerTasks(this)},this._experimental}async connect(e){return await this.server.connect(e)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(ListToolsRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(CallToolRequestSchema)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(ListToolsRequestSchema,()=>({tools:Object.entries(this._registeredTools).filter(([,e])=>e.enabled).map(([e,t])=>{let s={name:e,title:t.title,description:t.description,inputSchema:(()=>{let e=normalizeObjectSchema(t.inputSchema);return e?toJsonSchemaCompat(e,{strictUnions:!0,pipeStrategy:`input`}):EMPTY_OBJECT_JSON_SCHEMA})(),annotations:t.annotations,execution:t.execution,_meta:t._meta};if(t.outputSchema){let e=normalizeObjectSchema(t.outputSchema);e&&(s.outputSchema=toJsonSchemaCompat(e,{strictUnions:!0,pipeStrategy:`output`}))}return s})})),this.server.setRequestHandler(CallToolRequestSchema,async(e,t)=>{try{let s=this._registeredTools[e.params.name];if(!s)throw new McpError(ErrorCode.InvalidParams,`Tool ${e.params.name} not found`);if(!s.enabled)throw new McpError(ErrorCode.InvalidParams,`Tool ${e.params.name} disabled`);let g=!!e.params.task,S=s.execution?.taskSupport,w=`createTask`in s.handler;if((S===`required`||S===`optional`)&&!w)throw new McpError(ErrorCode.InternalError,`Tool ${e.params.name} has taskSupport '${S}' but was not registered with registerToolTask`);if(S===`required`&&!g)throw new McpError(ErrorCode.MethodNotFound,`Tool ${e.params.name} requires task augmentation (taskSupport: 'required')`);if(S===`optional`&&!g&&w)return await this.handleAutomaticTaskPolling(s,e,t);let E=await this.validateToolInput(s,e.params.arguments,e.params.name),D=await this.executeToolHandler(s,E,t);return g||await this.validateToolOutput(s,D,e.params.name),D}catch(e){if(e instanceof McpError&&e.code===ErrorCode.UrlElicitationRequired)throw e;return this.createToolError(e instanceof Error?e.message:String(e))}}),!0)}createToolError(e){return{content:[{type:`text`,text:e}],isError:!0}}async validateToolInput(e,t,s){if(!e.inputSchema)return;let g=await safeParseAsync(normalizeObjectSchema(e.inputSchema)??e.inputSchema,t);if(!g.success){let e=getParseErrorMessage(`error`in g?g.error:`Unknown error`);throw new McpError(ErrorCode.InvalidParams,`Input validation error: Invalid arguments for tool ${s}: ${e}`)}return g.data}async validateToolOutput(e,t,s){if(!e.outputSchema||!(`content`in t)||t.isError)return;if(!t.structuredContent)throw new McpError(ErrorCode.InvalidParams,`Output validation error: Tool ${s} has an output schema but no structured content was provided`);let g=await safeParseAsync(normalizeObjectSchema(e.outputSchema),t.structuredContent);if(!g.success){let e=getParseErrorMessage(`error`in g?g.error:`Unknown error`);throw new McpError(ErrorCode.InvalidParams,`Output validation error: Invalid structured content for tool ${s}: ${e}`)}}async executeToolHandler(e,t,s){let g=e.handler;if(`createTask`in g){if(!s.taskStore)throw Error(`No task store provided.`);let S={...s,taskStore:s.taskStore};if(e.inputSchema){let e=g;return await Promise.resolve(e.createTask(t,S))}else{let e=g;return await Promise.resolve(e.createTask(S))}}if(e.inputSchema){let e=g;return await Promise.resolve(e(t,s))}else{let e=g;return await Promise.resolve(e(s))}}async handleAutomaticTaskPolling(e,t,s){if(!s.taskStore)throw Error(`No task store provided for task-capable tool.`);let g=await this.validateToolInput(e,t.params.arguments,t.params.name),S=e.handler,w={...s,taskStore:s.taskStore},E=g?await Promise.resolve(S.createTask(g,w)):await Promise.resolve(S.createTask(w)),D=E.task.taskId,O=E.task,k=O.pollInterval??5e3;for(;O.status!==`completed`&&O.status!==`failed`&&O.status!==`cancelled`;){await new Promise(e=>setTimeout(e,k));let e=await s.taskStore.getTask(D);if(!e)throw new McpError(ErrorCode.InternalError,`Task ${D} not found during polling`);O=e}return await s.taskStore.getTaskResult(D)}setCompletionRequestHandler(){this._completionHandlerInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(CompleteRequestSchema)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(CompleteRequestSchema,async e=>{switch(e.params.ref.type){case`ref/prompt`:return assertCompleteRequestPrompt(e),this.handlePromptCompletion(e,e.params.ref);case`ref/resource`:return assertCompleteRequestResourceTemplate(e),this.handleResourceCompletion(e,e.params.ref);default:throw new McpError(ErrorCode.InvalidParams,`Invalid completion reference: ${e.params.ref}`)}}),!0)}async handlePromptCompletion(e,t){let s=this._registeredPrompts[t.name];if(!s)throw new McpError(ErrorCode.InvalidParams,`Prompt ${t.name} not found`);if(!s.enabled)throw new McpError(ErrorCode.InvalidParams,`Prompt ${t.name} disabled`);if(!s.argsSchema)return EMPTY_COMPLETION_RESULT;let g=getObjectShape(s.argsSchema)?.[e.params.argument.name];if(!isCompletable(g))return EMPTY_COMPLETION_RESULT;let S=getCompleter(g);return S?createCompletionResult(await S(e.params.argument.value,e.params.context)):EMPTY_COMPLETION_RESULT}async handleResourceCompletion(e,t){let s=Object.values(this._registeredResourceTemplates).find(e=>e.resourceTemplate.uriTemplate.toString()===t.uri);if(!s){if(this._registeredResources[t.uri])return EMPTY_COMPLETION_RESULT;throw new McpError(ErrorCode.InvalidParams,`Resource template ${e.params.ref.uri} not found`)}let g=s.resourceTemplate.completeCallback(e.params.argument.name);return g?createCompletionResult(await g(e.params.argument.value,e.params.context)):EMPTY_COMPLETION_RESULT}setResourceRequestHandlers(){this._resourceHandlersInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(ListResourcesRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(ListResourceTemplatesRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(ReadResourceRequestSchema)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(ListResourcesRequestSchema,async(e,t)=>{let s=Object.entries(this._registeredResources).filter(([e,t])=>t.enabled).map(([e,t])=>({uri:e,name:t.name,...t.metadata})),g=[];for(let e of Object.values(this._registeredResourceTemplates)){if(!e.resourceTemplate.listCallback)continue;let s=await e.resourceTemplate.listCallback(t);for(let t of s.resources)g.push({...e.metadata,...t})}return{resources:[...s,...g]}}),this.server.setRequestHandler(ListResourceTemplatesRequestSchema,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([e,t])=>({name:e,uriTemplate:t.resourceTemplate.uriTemplate.toString(),...t.metadata}))})),this.server.setRequestHandler(ReadResourceRequestSchema,async(e,t)=>{let s=new URL(e.params.uri),g=this._registeredResources[s.toString()];if(g){if(!g.enabled)throw new McpError(ErrorCode.InvalidParams,`Resource ${s} disabled`);return g.readCallback(s,t)}for(let e of Object.values(this._registeredResourceTemplates)){let g=e.resourceTemplate.uriTemplate.match(s.toString());if(g)return e.readCallback(s,g,t)}throw new McpError(ErrorCode.InvalidParams,`Resource ${s} not found`)}),!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(ListPromptsRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(GetPromptRequestSchema)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(ListPromptsRequestSchema,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,e])=>e.enabled).map(([e,t])=>({name:e,title:t.title,description:t.description,arguments:t.argsSchema?promptArgumentsFromSchema(t.argsSchema):void 0}))})),this.server.setRequestHandler(GetPromptRequestSchema,async(e,t)=>{let s=this._registeredPrompts[e.params.name];if(!s)throw new McpError(ErrorCode.InvalidParams,`Prompt ${e.params.name} not found`);if(!s.enabled)throw new McpError(ErrorCode.InvalidParams,`Prompt ${e.params.name} disabled`);if(s.argsSchema){let g=await safeParseAsync(normalizeObjectSchema(s.argsSchema),e.params.arguments);if(!g.success){let t=getParseErrorMessage(`error`in g?g.error:`Unknown error`);throw new McpError(ErrorCode.InvalidParams,`Invalid arguments for prompt ${e.params.name}: ${t}`)}let S=g.data,w=s.callback;return await Promise.resolve(w(S,t))}else{let e=s.callback;return await Promise.resolve(e(t))}}),!0)}resource(e,t,...s){let g;typeof s[0]==`object`&&(g=s.shift());let S=s[0];if(typeof t==`string`){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let s=this._createRegisteredResource(e,void 0,t,g,S);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),s}else{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let s=this._createRegisteredResourceTemplate(e,void 0,t,g,S);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),s}}registerResource(e,t,s,g){if(typeof t==`string`){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let S=this._createRegisteredResource(e,s.title,t,s,g);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),S}else{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let S=this._createRegisteredResourceTemplate(e,s.title,t,s,g);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),S}}_createRegisteredResource(e,t,s,g,S){let w={name:e,title:t,metadata:g,readCallback:S,enabled:!0,disable:()=>w.update({enabled:!1}),enable:()=>w.update({enabled:!0}),remove:()=>w.update({uri:null}),update:e=>{e.uri!==void 0&&e.uri!==s&&(delete this._registeredResources[s],e.uri&&(this._registeredResources[e.uri]=w)),e.name!==void 0&&(w.name=e.name),e.title!==void 0&&(w.title=e.title),e.metadata!==void 0&&(w.metadata=e.metadata),e.callback!==void 0&&(w.readCallback=e.callback),e.enabled!==void 0&&(w.enabled=e.enabled),this.sendResourceListChanged()}};return this._registeredResources[s]=w,w}_createRegisteredResourceTemplate(e,t,s,g,S){let w={resourceTemplate:s,title:t,metadata:g,readCallback:S,enabled:!0,disable:()=>w.update({enabled:!1}),enable:()=>w.update({enabled:!0}),remove:()=>w.update({name:null}),update:t=>{t.name!==void 0&&t.name!==e&&(delete this._registeredResourceTemplates[e],t.name&&(this._registeredResourceTemplates[t.name]=w)),t.title!==void 0&&(w.title=t.title),t.template!==void 0&&(w.resourceTemplate=t.template),t.metadata!==void 0&&(w.metadata=t.metadata),t.callback!==void 0&&(w.readCallback=t.callback),t.enabled!==void 0&&(w.enabled=t.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[e]=w;let E=s.uriTemplate.variableNames;return Array.isArray(E)&&E.some(e=>!!s.completeCallback(e))&&this.setCompletionRequestHandler(),w}_createRegisteredPrompt(e,t,s,g,S){let w={title:t,description:s,argsSchema:g===void 0?void 0:objectFromShape(g),callback:S,enabled:!0,disable:()=>w.update({enabled:!1}),enable:()=>w.update({enabled:!0}),remove:()=>w.update({name:null}),update:t=>{t.name!==void 0&&t.name!==e&&(delete this._registeredPrompts[e],t.name&&(this._registeredPrompts[t.name]=w)),t.title!==void 0&&(w.title=t.title),t.description!==void 0&&(w.description=t.description),t.argsSchema!==void 0&&(w.argsSchema=objectFromShape(t.argsSchema)),t.callback!==void 0&&(w.callback=t.callback),t.enabled!==void 0&&(w.enabled=t.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[e]=w,g&&Object.values(g).some(e=>isCompletable(e instanceof ZodOptional$1?e._def?.innerType:e))&&this.setCompletionRequestHandler(),w}_createRegisteredTool(e,t,s,g,S,w,E,D,O){validateAndWarnToolName(e);let k={title:t,description:s,inputSchema:getZodSchemaObject(g),outputSchema:getZodSchemaObject(S),annotations:w,execution:E,_meta:D,handler:O,enabled:!0,disable:()=>k.update({enabled:!1}),enable:()=>k.update({enabled:!0}),remove:()=>k.update({name:null}),update:t=>{t.name!==void 0&&t.name!==e&&(typeof t.name==`string`&&validateAndWarnToolName(t.name),delete this._registeredTools[e],t.name&&(this._registeredTools[t.name]=k)),t.title!==void 0&&(k.title=t.title),t.description!==void 0&&(k.description=t.description),t.paramsSchema!==void 0&&(k.inputSchema=objectFromShape(t.paramsSchema)),t.outputSchema!==void 0&&(k.outputSchema=objectFromShape(t.outputSchema)),t.callback!==void 0&&(k.handler=t.callback),t.annotations!==void 0&&(k.annotations=t.annotations),t._meta!==void 0&&(k._meta=t._meta),t.enabled!==void 0&&(k.enabled=t.enabled),this.sendToolListChanged()}};return this._registeredTools[e]=k,this.setToolRequestHandlers(),this.sendToolListChanged(),k}tool(e,...t){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let s,g,S,w;if(typeof t[0]==`string`&&(s=t.shift()),t.length>1){let s=t[0];if(isZodRawShapeCompat(s))g=t.shift(),t.length>1&&typeof t[0]==`object`&&t[0]!==null&&!isZodRawShapeCompat(t[0])&&(w=t.shift());else if(typeof s==`object`&&s){if(Object.values(s).some(e=>typeof e==`object`&&!!e))throw Error(`Tool ${e} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);w=t.shift()}}let E=t[0];return this._createRegisteredTool(e,void 0,s,g,void 0,w,{taskSupport:`forbidden`},void 0,E)}registerTool(e,t,s){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let{title:g,description:S,inputSchema:w,outputSchema:E,annotations:D,_meta:O}=t;return this._createRegisteredTool(e,g,S,w,E,D,{taskSupport:`forbidden`},O,s)}prompt(e,...t){if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);let s;typeof t[0]==`string`&&(s=t.shift());let g;t.length>1&&(g=t.shift());let S=t[0],w=this._createRegisteredPrompt(e,void 0,s,g,S);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),w}registerPrompt(e,t,s){if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);let{title:g,description:S,argsSchema:w}=t,E=this._createRegisteredPrompt(e,g,S,w,s);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),E}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(e,t){return this.server.sendLoggingMessage(e,t)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}};const EMPTY_OBJECT_JSON_SCHEMA={type:`object`,properties:{}};function isZodTypeLike(e){return typeof e==`object`&&!!e&&`parse`in e&&typeof e.parse==`function`&&`safeParse`in e&&typeof e.safeParse==`function`}function isZodSchemaInstance(e){return`_def`in e||`_zod`in e||isZodTypeLike(e)}function isZodRawShapeCompat(e){return typeof e!=`object`||!e||isZodSchemaInstance(e)?!1:Object.keys(e).length===0?!0:Object.values(e).some(isZodTypeLike)}function getZodSchemaObject(e){if(e){if(isZodRawShapeCompat(e))return objectFromShape(e);if(!isZodSchemaInstance(e))throw Error(`inputSchema must be a Zod schema or raw shape, received an unrecognized object`);return e}}function promptArgumentsFromSchema(e){let t=getObjectShape(e);return t?Object.entries(t).map(([e,t])=>({name:e,description:getSchemaDescription(t),required:!isSchemaOptional(t)})):[]}function getMethodValue(e){let t=getObjectShape(e)?.method;if(!t)throw Error(`Schema is missing a method literal`);let s=getLiteralValue(t);if(typeof s==`string`)return s;throw Error(`Schema method literal must be a string`)}function createCompletionResult(e){return{completion:{values:e.slice(0,100),total:e.length,hasMore:e.length>100}}}const EMPTY_COMPLETION_RESULT={completion:{values:[],hasMore:!1}};var RequestError=class extends Error{constructor(e,t){super(e,t),this.name=`RequestError`}},toRequestError=e=>e instanceof RequestError?e:new RequestError(e.message,{cause:e}),GlobalRequest=global.Request,Request$1=class extends GlobalRequest{constructor(e,t){typeof e==`object`&&getRequestCache in e&&(e=e[getRequestCache]()),t?.body?.getReader!==void 0&&(t.duplex??=`half`),super(e,t)}},newHeadersFromIncoming=e=>{let t=[],s=e.rawHeaders;for(let e=0;e<s.length;e+=2){let{[e]:g,[e+1]:S}=s;g.charCodeAt(0)!==58&&t.push([g,S])}return new Headers(t)},wrapBodyStream=Symbol(`wrapBodyStream`),newRequestFromIncoming=(e,t,s,g,S)=>{let w={method:e,headers:s,signal:S.signal};if(e===`TRACE`){w.method=`GET`;let e=new Request$1(t,w);return Object.defineProperty(e,`method`,{get(){return`TRACE`}}),e}if(!(e===`GET`||e===`HEAD`))if(`rawBody`in g&&g.rawBody instanceof Buffer)w.body=new ReadableStream({start(e){e.enqueue(g.rawBody),e.close()}});else if(g[wrapBodyStream]){let e;w.body=new ReadableStream({async pull(t){try{e||=Readable.toWeb(g).getReader();let{done:s,value:S}=await e.read();s?t.close():t.enqueue(S)}catch(e){t.error(e)}}})}else w.body=Readable.toWeb(g);return new Request$1(t,w)},getRequestCache=Symbol(`getRequestCache`),requestCache=Symbol(`requestCache`),incomingKey=Symbol(`incomingKey`),urlKey=Symbol(`urlKey`),headersKey=Symbol(`headersKey`),abortControllerKey=Symbol(`abortControllerKey`),requestPrototype={get method(){return this[incomingKey].method||`GET`},get url(){return this[urlKey]},get headers(){return this[headersKey]||=newHeadersFromIncoming(this[incomingKey])},[Symbol(`getAbortController`)](){return this[getRequestCache](),this[abortControllerKey]},[getRequestCache](){return this[abortControllerKey]||=new AbortController,this[requestCache]||=newRequestFromIncoming(this.method,this[urlKey],this.headers,this[incomingKey],this[abortControllerKey])}};[`body`,`bodyUsed`,`cache`,`credentials`,`destination`,`integrity`,`mode`,`redirect`,`referrer`,`referrerPolicy`,`signal`,`keepalive`].forEach(e=>{Object.defineProperty(requestPrototype,e,{get(){return this[getRequestCache]()[e]}})}),[`arrayBuffer`,`blob`,`clone`,`formData`,`json`,`text`].forEach(e=>{Object.defineProperty(requestPrototype,e,{value:function(){return this[getRequestCache]()[e]()}})}),Object.setPrototypeOf(requestPrototype,Request$1.prototype);var newRequest=(e,t)=>{let s=Object.create(requestPrototype);s[incomingKey]=e;let g=e.url||``;if(g[0]!==`/`&&(g.startsWith(`http://`)||g.startsWith(`https://`))){if(e instanceof Http2ServerRequest)throw new RequestError(`Absolute URL for :path is not allowed in HTTP/2`);try{s[urlKey]=new URL(g).href}catch(e){throw new RequestError(`Invalid absolute URL`,{cause:e})}return s}let S=(e instanceof Http2ServerRequest?e.authority:e.headers.host)||t;if(!S)throw new RequestError(`Missing host header`);let w;if(e instanceof Http2ServerRequest){if(w=e.scheme,!(w===`http`||w===`https`))throw new RequestError(`Unsupported scheme`)}else w=e.socket&&e.socket.encrypted?`https`:`http`;let E=new URL(`${w}://${S}${g}`);if(E.hostname.length!==S.length&&E.hostname!==S.replace(/:\d+$/,``))throw new RequestError(`Invalid host header`);return s[urlKey]=E.href,s},responseCache=Symbol(`responseCache`),getResponseCache=Symbol(`getResponseCache`),cacheKey=Symbol(`cache`),GlobalResponse=global.Response,Response2=class e{#e;#t;[getResponseCache](){return delete this[cacheKey],this[responseCache]||=new GlobalResponse(this.#e,this.#t)}constructor(t,s){let g;if(this.#e=t,s instanceof e){let e=s[responseCache];if(e){this.#t=e,this[getResponseCache]();return}else this.#t=s.#t,g=new Headers(s.#t.headers)}else this.#t=s;(typeof t==`string`||t?.getReader!==void 0||t instanceof Blob||t instanceof Uint8Array)&&(this[cacheKey]=[s?.status||200,t,g||s?.headers])}get headers(){let e=this[cacheKey];return e?(e[2]instanceof Headers||(e[2]=new Headers(e[2]||{"content-type":`text/plain; charset=UTF-8`})),e[2]):this[getResponseCache]().headers}get status(){return this[cacheKey]?.[0]??this[getResponseCache]().status}get ok(){let e=this.status;return e>=200&&e<300}};[`body`,`bodyUsed`,`redirected`,`statusText`,`trailers`,`type`,`url`].forEach(e=>{Object.defineProperty(Response2.prototype,e,{get(){return this[getResponseCache]()[e]}})}),[`arrayBuffer`,`blob`,`clone`,`formData`,`json`,`text`].forEach(e=>{Object.defineProperty(Response2.prototype,e,{value:function(){return this[getResponseCache]()[e]()}})}),Object.setPrototypeOf(Response2,GlobalResponse),Object.setPrototypeOf(Response2.prototype,GlobalResponse.prototype);async function readWithoutBlocking(e){return Promise.race([e,Promise.resolve().then(()=>Promise.resolve(void 0))])}function writeFromReadableStreamDefaultReader(e,t,s){let g=t=>{e.cancel(t).catch(()=>{})};return t.on(`close`,g),t.on(`error`,g),(s??e.read()).then(E,S),e.closed.finally(()=>{t.off(`close`,g),t.off(`error`,g)});function S(e){e&&t.destroy(e)}function w(){e.read().then(E,S)}function E({done:s,value:g}){try{if(s)t.end();else if(!t.write(g))t.once(`drain`,w);else return e.read().then(E,S)}catch(e){S(e)}}}function writeFromReadableStream(e,t){if(e.locked)throw TypeError(`ReadableStream is locked.`);return t.destroyed?void 0:writeFromReadableStreamDefaultReader(e.getReader(),t)}var buildOutgoingHttpHeaders=e=>{let t={};e instanceof Headers||(e=new Headers(e??void 0));let s=[];for(let[g,S]of e)g===`set-cookie`?s.push(S):t[g]=S;return s.length>0&&(t[`set-cookie`]=s),t[`content-type`]??=`text/plain; charset=UTF-8`,t},X_ALREADY_SENT=`x-hono-already-sent`;global.crypto===void 0&&(global.crypto=crypto$2);var outgoingEnded=Symbol(`outgoingEnded`),incomingDraining=Symbol(`incomingDraining`),DRAIN_TIMEOUT_MS=500,MAX_DRAIN_BYTES=64*1024*1024,drainIncoming=e=>{let t=e;if(e.destroyed||t[incomingDraining])return;if(t[incomingDraining]=!0,e instanceof Http2ServerRequest){try{e.stream?.close?.(constants.NGHTTP2_NO_ERROR)}catch{}return}let s=0,g=()=>{clearTimeout(w),e.off(`data`,E),e.off(`end`,g),e.off(`error`,g)},S=()=>{g();let t=e.socket;t&&!t.destroyed&&t.destroySoon()},w=setTimeout(S,DRAIN_TIMEOUT_MS);w.unref?.();let E=e=>{s+=e.length,s>MAX_DRAIN_BYTES&&S()};e.on(`data`,E),e.on(`end`,g),e.on(`error`,g),e.resume()},handleRequestError=()=>new Response(null,{status:400}),handleFetchError=e=>new Response(null,{status:e instanceof Error&&(e.name===`TimeoutError`||e.constructor.name===`TimeoutError`)?504:500}),handleResponseError=(e,t)=>{let s=e instanceof Error?e:Error(`unknown error`,{cause:e});s.code===`ERR_STREAM_PREMATURE_CLOSE`?console.info(`The user aborted a request.`):(console.error(e),t.headersSent||t.writeHead(500,{"Content-Type":`text/plain`}),t.end(`Error: ${s.message}`),t.destroy(s))},flushHeaders=e=>{`flushHeaders`in e&&e.writable&&e.flushHeaders()},responseViaCache=async(e,t)=>{let[s,g,S]=e[cacheKey],w=!1;if(!S)S={"content-type":`text/plain; charset=UTF-8`};else if(S instanceof Headers)w=S.has(`content-length`),S=buildOutgoingHttpHeaders(S);else if(Array.isArray(S)){let e=new Headers(S);w=e.has(`content-length`),S=buildOutgoingHttpHeaders(e)}else for(let e in S)if(e.length===14&&e.toLowerCase()===`content-length`){w=!0;break}w||(typeof g==`string`?S[`Content-Length`]=Buffer.byteLength(g):g instanceof Uint8Array?S[`Content-Length`]=g.byteLength:g instanceof Blob&&(S[`Content-Length`]=g.size)),t.writeHead(s,S),typeof g==`string`||g instanceof Uint8Array?t.end(g):g instanceof Blob?t.end(new Uint8Array(await g.arrayBuffer())):(flushHeaders(t),await writeFromReadableStream(g,t)?.catch(e=>handleResponseError(e,t))),t[outgoingEnded]?.()},isPromise=e=>typeof e.then==`function`,responseViaResponseObject=async(e,t,s={})=>{if(isPromise(e))if(s.errorHandler)try{e=await e}catch(t){let g=await s.errorHandler(t);if(!g)return;e=g}else e=await e.catch(handleFetchError);if(cacheKey in e)return responseViaCache(e,t);let g=buildOutgoingHttpHeaders(e.headers);if(e.body){let s=e.body.getReader(),S=[],w=!1,E;if(g[`transfer-encoding`]!==`chunked`){let e=2;for(let t=0;t<e;t++){E||=s.read();let g=await readWithoutBlocking(E).catch(e=>{console.error(e),w=!0});if(!g){if(t===1){await new Promise(e=>setTimeout(e)),e=3;continue}break}if(E=void 0,g.value&&S.push(g.value),g.done){w=!0;break}}w&&!(`content-length`in g)&&(g[`content-length`]=S.reduce((e,t)=>e+t.length,0))}t.writeHead(e.status,g),S.forEach(e=>{t.write(e)}),w?t.end():(S.length===0&&flushHeaders(t),await writeFromReadableStreamDefaultReader(s,t,E))}else g[X_ALREADY_SENT]||(t.writeHead(e.status,g),t.end());t[outgoingEnded]?.()},getRequestListener=(e,t={})=>{let s=t.autoCleanupIncoming??!0;return t.overrideGlobalObjects!==!1&&global.Request!==Request$1&&(Object.defineProperty(global,`Request`,{value:Request$1}),Object.defineProperty(global,`Response`,{value:Response2})),async(g,S)=>{let w,E;try{E=newRequest(g,t.hostname);let D=!s||g.method===`GET`||g.method===`HEAD`;if(D||(g[wrapBodyStream]=!0,g.on(`end`,()=>{D=!0}),g instanceof Http2ServerRequest&&(S[outgoingEnded]=()=>{D||setTimeout(()=>{D||setTimeout(()=>{drainIncoming(g)})})}),S.on(`finish`,()=>{D||drainIncoming(g)})),S.on(`close`,()=>{E[abortControllerKey]&&(g.errored?E[abortControllerKey].abort(g.errored.toString()):S.writableFinished||E[abortControllerKey].abort(`Client connection prematurely closed.`)),D||setTimeout(()=>{D||setTimeout(()=>{drainIncoming(g)})})}),w=e(E,{incoming:g,outgoing:S}),cacheKey in w)return responseViaCache(w,S)}catch(e){if(w)return handleResponseError(e,S);if(t.errorHandler){if(w=await t.errorHandler(E?e:toRequestError(e)),!w)return}else w=E?handleFetchError(e):handleRequestError()}try{return await responseViaResponseObject(w,S,t)}catch(e){return handleResponseError(e,S)}}},WebStandardStreamableHTTPServerTransport=class{constructor(e={}){this._started=!1,this._hasHandledRequest=!1,this._streamMapping=new Map,this._requestToStreamMapping=new Map,this._requestResponseMap=new Map,this._initialized=!1,this._enableJsonResponse=!1,this._standaloneSseStreamId=`_GET_stream`,this.sessionIdGenerator=e.sessionIdGenerator,this._enableJsonResponse=e.enableJsonResponse??!1,this._eventStore=e.eventStore,this._onsessioninitialized=e.onsessioninitialized,this._onsessionclosed=e.onsessionclosed,this._allowedHosts=e.allowedHosts,this._allowedOrigins=e.allowedOrigins,this._enableDnsRebindingProtection=e.enableDnsRebindingProtection??!1,this._retryInterval=e.retryInterval}async start(){if(this._started)throw Error(`Transport already started`);this._started=!0}createJsonErrorResponse(e,t,s,g){let S={code:t,message:s};return g?.data!==void 0&&(S.data=g.data),new Response(JSON.stringify({jsonrpc:`2.0`,error:S,id:null}),{status:e,headers:{"Content-Type":`application/json`,...g?.headers}})}validateRequestHeaders(e){if(this._enableDnsRebindingProtection){if(this._allowedHosts&&this._allowedHosts.length>0){let t=e.headers.get(`host`);if(!t||!this._allowedHosts.includes(t)){let e=`Invalid Host header: ${t}`;return this.onerror?.(Error(e)),this.createJsonErrorResponse(403,-32e3,e)}}if(this._allowedOrigins&&this._allowedOrigins.length>0){let t=e.headers.get(`origin`);if(t&&!this._allowedOrigins.includes(t)){let e=`Invalid Origin header: ${t}`;return this.onerror?.(Error(e)),this.createJsonErrorResponse(403,-32e3,e)}}}}async handleRequest(e,t){if(!this.sessionIdGenerator&&this._hasHandledRequest)throw Error(`Stateless transport cannot be reused across requests. Create a new transport per request.`);this._hasHandledRequest=!0;let s=this.validateRequestHeaders(e);if(s)return s;switch(e.method){case`POST`:return this.handlePostRequest(e,t);case`GET`:return this.handleGetRequest(e);case`DELETE`:return this.handleDeleteRequest(e);default:return this.handleUnsupportedRequest()}}async writePrimingEvent(e,t,s,g){if(!this._eventStore||g<`2025-11-25`)return;let S=await this._eventStore.storeEvent(s,{}),w=`id: ${S}\ndata: \n\n`;this._retryInterval!==void 0&&(w=`id: ${S}\nretry: ${this._retryInterval}\ndata: \n\n`),e.enqueue(t.encode(w))}async handleGetRequest(e){if(!e.headers.get(`accept`)?.includes(`text/event-stream`))return this.onerror?.(Error(`Not Acceptable: Client must accept text/event-stream`)),this.createJsonErrorResponse(406,-32e3,`Not Acceptable: Client must accept text/event-stream`);let t=this.validateSession(e);if(t)return t;let s=this.validateProtocolVersion(e);if(s)return s;if(this._eventStore){let t=e.headers.get(`last-event-id`);if(t)return this.replayEvents(t)}if(this._streamMapping.get(this._standaloneSseStreamId)!==void 0)return this.onerror?.(Error(`Conflict: Only one SSE stream is allowed per session`)),this.createJsonErrorResponse(409,-32e3,`Conflict: Only one SSE stream is allowed per session`);let g=new TextEncoder,S,w=new ReadableStream({start:e=>{S=e},cancel:()=>{this._streamMapping.delete(this._standaloneSseStreamId)}}),E={"Content-Type":`text/event-stream`,"Cache-Control":`no-cache, no-transform`,Connection:`keep-alive`};return this.sessionId!==void 0&&(E[`mcp-session-id`]=this.sessionId),this._streamMapping.set(this._standaloneSseStreamId,{controller:S,encoder:g,cleanup:()=>{this._streamMapping.delete(this._standaloneSseStreamId);try{S.close()}catch{}}}),new Response(w,{headers:E})}async replayEvents(e){if(!this._eventStore)return this.onerror?.(Error(`Event store not configured`)),this.createJsonErrorResponse(400,-32e3,`Event store not configured`);try{let t;if(this._eventStore.getStreamIdForEventId){if(t=await this._eventStore.getStreamIdForEventId(e),!t)return this.onerror?.(Error(`Invalid event ID format`)),this.createJsonErrorResponse(400,-32e3,`Invalid event ID format`);if(this._streamMapping.get(t)!==void 0)return this.onerror?.(Error(`Conflict: Stream already has an active connection`)),this.createJsonErrorResponse(409,-32e3,`Conflict: Stream already has an active connection`)}let s={"Content-Type":`text/event-stream`,"Cache-Control":`no-cache, no-transform`,Connection:`keep-alive`};this.sessionId!==void 0&&(s[`mcp-session-id`]=this.sessionId);let g=new TextEncoder,S,w=new ReadableStream({start:e=>{S=e},cancel:()=>{}}),E=await this._eventStore.replayEventsAfter(e,{send:async(e,t)=>{if(!this.writeSSEEvent(S,g,t,e)){this.onerror?.(Error(`Failed replay events`));try{S.close()}catch{}}}});return this._streamMapping.set(E,{controller:S,encoder:g,cleanup:()=>{this._streamMapping.delete(E);try{S.close()}catch{}}}),new Response(w,{headers:s})}catch(e){return this.onerror?.(e),this.createJsonErrorResponse(500,-32e3,`Error replaying events`)}}writeSSEEvent(e,t,s,g){try{let S=`event: message
55
+ deps: ${g}}`};let S={keyword:`dependencies`,type:`object`,schemaType:`object`,error:e.error,code(e){let[t,s]=w(e);E(e,t),D(e,s)}};function w({schema:e}){let t={},s={};for(let g in e){if(g===`__proto__`)continue;let S=Array.isArray(e[g])?t:s;S[g]=e[g]}return[t,s]}function E(e,s=e.schema){let{gen:S,data:w,it:E}=e;if(Object.keys(s).length===0)return;let D=S.let(`missing`);for(let O in s){let k=s[O];if(k.length===0)continue;let j=(0,g.propertyInData)(S,w,O,E.opts.ownProperties);e.setParams({property:O,depsCount:k.length,deps:k.join(`, `)}),E.allErrors?S.if(j,()=>{for(let t of k)(0,g.checkReportMissingProp)(e,t)}):(S.if((0,t._)`${j} && (${(0,g.checkMissingProp)(e,k,D)})`),(0,g.reportMissingProp)(e,D),S.else())}}e.validatePropertyDeps=E;function D(e,t=e.schema){let{gen:S,data:w,keyword:E,it:D}=e,O=S.name(`valid`);for(let k in t)(0,s.alwaysValidSchema)(D,t[k])||(S.if((0,g.propertyInData)(S,w,k,D.opts.ownProperties),()=>{let t=e.subschema({keyword:E,schemaProp:k},O);e.mergeValidEvaluated(t,O)},()=>S.var(O,!0)),e.ok(O))}e.validateSchemaDeps=D,e.default=S})),require_propertyNames=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_util();e.default={keyword:`propertyNames`,type:`object`,schemaType:[`object`,`boolean`],error:{message:`property name must be valid`,params:({params:e})=>(0,t._)`{propertyName: ${e.propertyName}}`},code(e){let{gen:g,schema:S,data:w,it:E}=e;if((0,s.alwaysValidSchema)(E,S))return;let D=g.name(`valid`);g.forIn(`key`,w,s=>{e.setParams({propertyName:s}),e.subschema({keyword:`propertyNames`,data:s,dataTypes:[`string`],propertyName:s,compositeRule:!0},D),g.if((0,t.not)(D),()=>{e.error(!0),E.allErrors||g.break()})}),e.ok(D)}}})),require_additionalProperties=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_code(),s=require_codegen(),g=require_names(),S=require_util();e.default={keyword:`additionalProperties`,type:[`object`],schemaType:[`boolean`,`object`],allowUndefined:!0,trackErrors:!0,error:{message:`must NOT have additional properties`,params:({params:e})=>(0,s._)`{additionalProperty: ${e.additionalProperty}}`},code(e){let{gen:w,schema:E,parentSchema:D,data:O,errsCount:k,it:j}=e;if(!k)throw Error(`ajv implementation error`);let{allErrors:F,opts:L}=j;if(j.props=!0,L.removeAdditional!==`all`&&(0,S.alwaysValidSchema)(j,E))return;let B=(0,t.allSchemaProperties)(D.properties),H=(0,t.allSchemaProperties)(D.patternProperties);q(),e.ok((0,s._)`${k} === ${g.default.errors}`);function q(){w.forIn(`key`,O,e=>{!B.length&&!H.length?ee(e):w.if(J(e),()=>ee(e))})}function J(g){let E;if(B.length>8){let e=(0,S.schemaRefOrVal)(j,D.properties,`properties`);E=(0,t.isOwnProperty)(w,e,g)}else E=B.length?(0,s.or)(...B.map(e=>(0,s._)`${g} === ${e}`)):s.nil;return H.length&&(E=(0,s.or)(E,...H.map(S=>(0,s._)`${(0,t.usePattern)(e,S)}.test(${g})`))),(0,s.not)(E)}function Y(e){w.code((0,s._)`delete ${O}[${e}]`)}function ee(t){if(L.removeAdditional===`all`||L.removeAdditional&&E===!1){Y(t);return}if(E===!1){e.setParams({additionalProperty:t}),e.error(),F||w.break();return}if(typeof E==`object`&&!(0,S.alwaysValidSchema)(j,E)){let g=w.name(`valid`);L.removeAdditional===`failing`?(te(t,g,!1),w.if((0,s.not)(g),()=>{e.reset(),Y(t)})):(te(t,g),F||w.if((0,s.not)(g),()=>w.break()))}}function te(t,s,g){let w={keyword:`additionalProperties`,dataProp:t,dataPropType:S.Type.Str};g===!1&&Object.assign(w,{compositeRule:!0,createErrors:!1,allErrors:!1}),e.subschema(w,s)}}}})),require_properties=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_validate(),s=require_code(),g=require_util(),S=require_additionalProperties();e.default={keyword:`properties`,type:`object`,schemaType:`object`,code(e){let{gen:w,schema:E,parentSchema:D,data:O,it:k}=e;k.opts.removeAdditional===`all`&&D.additionalProperties===void 0&&S.default.code(new t.KeywordCxt(k,S.default,`additionalProperties`));let j=(0,s.allSchemaProperties)(E);for(let e of j)k.definedProperties.add(e);k.opts.unevaluated&&j.length&&k.props!==!0&&(k.props=g.mergeEvaluated.props(w,(0,g.toHash)(j),k.props));let F=j.filter(e=>!(0,g.alwaysValidSchema)(k,E[e]));if(F.length===0)return;let L=w.name(`valid`);for(let t of F)B(t)?H(t):(w.if((0,s.propertyInData)(w,O,t,k.opts.ownProperties)),H(t),k.allErrors||w.else().var(L,!0),w.endIf()),e.it.definedProperties.add(t),e.ok(L);function B(e){return k.opts.useDefaults&&!k.compositeRule&&E[e].default!==void 0}function H(t){e.subschema({keyword:`properties`,schemaProp:t,dataProp:t},L)}}}})),require_patternProperties=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_code(),s=require_codegen(),g=require_util(),S=require_util();e.default={keyword:`patternProperties`,type:`object`,schemaType:`object`,code(e){let{gen:w,schema:E,data:D,parentSchema:O,it:k}=e,{opts:j}=k,F=(0,t.allSchemaProperties)(E),L=F.filter(e=>(0,g.alwaysValidSchema)(k,E[e]));if(F.length===0||L.length===F.length&&(!k.opts.unevaluated||k.props===!0))return;let B=j.strictSchema&&!j.allowMatchingProperties&&O.properties,H=w.name(`valid`);k.props!==!0&&!(k.props instanceof s.Name)&&(k.props=(0,S.evaluatedPropsToName)(w,k.props));let{props:q}=k;J();function J(){for(let e of F)B&&Y(e),k.allErrors?ee(e):(w.var(H,!0),ee(e),w.if(H))}function Y(e){for(let t in B)new RegExp(e).test(t)&&(0,g.checkStrictMode)(k,`property ${t} matches pattern ${e} (use allowMatchingProperties)`)}function ee(g){w.forIn(`key`,D,E=>{w.if((0,s._)`${(0,t.usePattern)(e,g)}.test(${E})`,()=>{let t=L.includes(g);t||e.subschema({keyword:`patternProperties`,schemaProp:g,dataProp:E,dataPropType:S.Type.Str},H),k.opts.unevaluated&&q!==!0?w.assign((0,s._)`${q}[${E}]`,!0):!t&&!k.allErrors&&w.if((0,s.not)(H),()=>w.break())})})}}}})),require_not=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_util();e.default={keyword:`not`,schemaType:[`object`,`boolean`],trackErrors:!0,code(e){let{gen:s,schema:g,it:S}=e;if((0,t.alwaysValidSchema)(S,g)){e.fail();return}let w=s.name(`valid`);e.subschema({keyword:`not`,compositeRule:!0,createErrors:!1,allErrors:!1},w),e.failResult(w,()=>e.reset(),()=>e.error())},error:{message:`must NOT be valid`}}})),require_anyOf=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default={keyword:`anyOf`,schemaType:`array`,trackErrors:!0,code:require_code().validateUnion,error:{message:`must match a schema in anyOf`}}})),require_oneOf=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_util();e.default={keyword:`oneOf`,schemaType:`array`,trackErrors:!0,error:{message:`must match exactly one schema in oneOf`,params:({params:e})=>(0,t._)`{passingSchemas: ${e.passing}}`},code(e){let{gen:g,schema:S,parentSchema:w,it:E}=e;if(!Array.isArray(S))throw Error(`ajv implementation error`);if(E.opts.discriminator&&w.discriminator)return;let D=S,O=g.let(`valid`,!1),k=g.let(`passing`,null),j=g.name(`_valid`);e.setParams({passing:k}),g.block(F),e.result(O,()=>e.reset(),()=>e.error(!0));function F(){D.forEach((S,w)=>{let D;(0,s.alwaysValidSchema)(E,S)?g.var(j,!0):D=e.subschema({keyword:`oneOf`,schemaProp:w,compositeRule:!0},j),w>0&&g.if((0,t._)`${j} && ${O}`).assign(O,!1).assign(k,(0,t._)`[${k}, ${w}]`).else(),g.if(j,()=>{g.assign(O,!0),g.assign(k,w),D&&e.mergeEvaluated(D,t.Name)})})}}}})),require_allOf=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_util();e.default={keyword:`allOf`,schemaType:`array`,code(e){let{gen:s,schema:g,it:S}=e;if(!Array.isArray(g))throw Error(`ajv implementation error`);let w=s.name(`valid`);g.forEach((s,g)=>{if((0,t.alwaysValidSchema)(S,s))return;let E=e.subschema({keyword:`allOf`,schemaProp:g},w);e.ok(w),e.mergeEvaluated(E)})}}})),require_if=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_util(),g={keyword:`if`,schemaType:[`object`,`boolean`],trackErrors:!0,error:{message:({params:e})=>(0,t.str)`must match "${e.ifClause}" schema`,params:({params:e})=>(0,t._)`{failingKeyword: ${e.ifClause}}`},code(e){let{gen:g,parentSchema:w,it:E}=e;w.then===void 0&&w.else===void 0&&(0,s.checkStrictMode)(E,`"if" without "then" and "else" is ignored`);let D=S(E,`then`),O=S(E,`else`);if(!D&&!O)return;let k=g.let(`valid`,!0),j=g.name(`_valid`);if(F(),e.reset(),D&&O){let t=g.let(`ifClause`);e.setParams({ifClause:t}),g.if(j,L(`then`,t),L(`else`,t))}else D?g.if(j,L(`then`)):g.if((0,t.not)(j),L(`else`));e.pass(k,()=>e.error(!0));function F(){let t=e.subschema({keyword:`if`,compositeRule:!0,createErrors:!1,allErrors:!1},j);e.mergeEvaluated(t)}function L(s,S){return()=>{let w=e.subschema({keyword:s},j);g.assign(k,j),e.mergeValidEvaluated(w,k),S?g.assign(S,(0,t._)`${s}`):e.setParams({ifClause:s})}}}};function S(e,t){let g=e.schema[t];return g!==void 0&&!(0,s.alwaysValidSchema)(e,g)}e.default=g})),require_thenElse=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_util();e.default={keyword:[`then`,`else`],schemaType:[`object`,`boolean`],code({keyword:e,parentSchema:s,it:g}){s.if===void 0&&(0,t.checkStrictMode)(g,`"${e}" without "if" is ignored`)}}})),require_applicator=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_additionalItems(),s=require_prefixItems(),g=require_items(),S=require_items2020(),w=require_contains(),E=require_dependencies(),D=require_propertyNames(),O=require_additionalProperties(),k=require_properties(),j=require_patternProperties(),F=require_not(),L=require_anyOf(),B=require_oneOf(),H=require_allOf(),q=require_if(),J=require_thenElse();function Y(e=!1){let Y=[F.default,L.default,B.default,H.default,q.default,J.default,D.default,O.default,E.default,k.default,j.default];return e?Y.push(s.default,S.default):Y.push(t.default,g.default),Y.push(w.default),Y}e.default=Y})),require_format$1=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen();e.default={keyword:`format`,type:[`number`,`string`],schemaType:`string`,$data:!0,error:{message:({schemaCode:e})=>(0,t.str)`must match format "${e}"`,params:({schemaCode:e})=>(0,t._)`{format: ${e}}`},code(e,s){let{gen:g,data:S,$data:w,schema:E,schemaCode:D,it:O}=e,{opts:k,errSchemaPath:j,schemaEnv:F,self:L}=O;if(!k.validateFormats)return;w?B():H();function B(){let w=g.scopeValue(`formats`,{ref:L.formats,code:k.code.formats}),E=g.const(`fDef`,(0,t._)`${w}[${D}]`),O=g.let(`fType`),j=g.let(`format`);g.if((0,t._)`typeof ${E} == "object" && !(${E} instanceof RegExp)`,()=>g.assign(O,(0,t._)`${E}.type || "string"`).assign(j,(0,t._)`${E}.validate`),()=>g.assign(O,(0,t._)`"string"`).assign(j,E)),e.fail$data((0,t.or)(B(),H()));function B(){return k.strictSchema===!1?t.nil:(0,t._)`${D} && !${j}`}function H(){let e=F.$async?(0,t._)`(${E}.async ? await ${j}(${S}) : ${j}(${S}))`:(0,t._)`${j}(${S})`,g=(0,t._)`(typeof ${j} == "function" ? ${e} : ${j}.test(${S}))`;return(0,t._)`${j} && ${j} !== true && ${O} === ${s} && !${g}`}}function H(){let w=L.formats[E];if(!w){H();return}if(w===!0)return;let[D,O,B]=q(w);D===s&&e.pass(J());function H(){if(k.strictSchema===!1){L.logger.warn(e());return}throw Error(e());function e(){return`unknown format "${E}" ignored in schema at path "${j}"`}}function q(e){let s=e instanceof RegExp?(0,t.regexpCode)(e):k.code.formats?(0,t._)`${k.code.formats}${(0,t.getProperty)(E)}`:void 0,S=g.scopeValue(`formats`,{key:E,ref:e,code:s});return typeof e==`object`&&!(e instanceof RegExp)?[e.type||`string`,e.validate,(0,t._)`${S}.validate`]:[`string`,e,S]}function J(){if(typeof w==`object`&&!(w instanceof RegExp)&&w.async){if(!F.$async)throw Error(`async format in sync schema`);return(0,t._)`await ${B}(${S})`}return typeof O==`function`?(0,t._)`${B}(${S})`:(0,t._)`${B}.test(${S})`}}}}})),require_format=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=[require_format$1().default]})),require_metadata=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.contentVocabulary=e.metadataVocabulary=void 0,e.metadataVocabulary=[`title`,`description`,`default`,`deprecated`,`readOnly`,`writeOnly`,`examples`],e.contentVocabulary=[`contentMediaType`,`contentEncoding`,`contentSchema`]})),require_draft7=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_core(),s=require_validation$2(),g=require_applicator(),S=require_format(),w=require_metadata();e.default=[t.default,s.default,(0,g.default)(),S.default,w.metadataVocabulary,w.contentVocabulary]})),require_types=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.DiscrError=void 0;var t;(function(e){e.Tag=`tag`,e.Mapping=`mapping`})(t||(e.DiscrError=t={}))})),require_discriminator=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0});let t=require_codegen(),s=require_types(),g=require_compile(),S=require_ref_error(),w=require_util();e.default={keyword:`discriminator`,type:`object`,schemaType:`object`,error:{message:({params:{discrError:e,tagName:t}})=>e===s.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:s,tagName:g}})=>(0,t._)`{error: ${e}, tag: ${g}, tagValue: ${s}}`},code(e){let{gen:E,data:D,schema:O,parentSchema:k,it:j}=e,{oneOf:F}=k;if(!j.opts.discriminator)throw Error(`discriminator: requires discriminator option`);let L=O.propertyName;if(typeof L!=`string`)throw Error(`discriminator: requires propertyName`);if(O.mapping)throw Error(`discriminator: mapping is not supported`);if(!F)throw Error(`discriminator: requires oneOf keyword`);let B=E.let(`valid`,!1),H=E.const(`tag`,(0,t._)`${D}${(0,t.getProperty)(L)}`);E.if((0,t._)`typeof ${H} == "string"`,()=>q(),()=>e.error(!1,{discrError:s.DiscrError.Tag,tag:H,tagName:L})),e.ok(B);function q(){let g=Y();E.if(!1);for(let e in g)E.elseIf((0,t._)`${H} === ${e}`),E.assign(B,J(g[e]));E.else(),e.error(!1,{discrError:s.DiscrError.Mapping,tag:H,tagName:L}),E.endIf()}function J(s){let g=E.name(`valid`),S=e.subschema({keyword:`oneOf`,schemaProp:s},g);return e.mergeEvaluated(S,t.Name),g}function Y(){var e;let t={},s=D(k),E=!0;for(let e=0;e<F.length;e++){let t=F[e];if(t?.$ref&&!(0,w.schemaHasRulesButRef)(t,j.self.RULES)){let e=t.$ref;if(t=g.resolveRef.call(j.self,j.schemaEnv.root,j.baseId,e),t instanceof g.SchemaEnv&&(t=t.schema),t===void 0)throw new S.default(j.opts.uriResolver,j.baseId,e)}let k=t?.properties?.[L];if(typeof k!=`object`)throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${L}"`);E&&=s||D(t),O(k,e)}if(!E)throw Error(`discriminator: "${L}" must be required`);return t;function D({required:e}){return Array.isArray(e)&&e.includes(L)}function O(e,t){if(e.const)B(e.const,t);else if(e.enum)for(let s of e.enum)B(s,t);else throw Error(`discriminator: "properties/${L}" must have "const" or "enum"`)}function B(e,s){if(typeof e!=`string`||e in t)throw Error(`discriminator: "${L}" values must be unique strings`);t[e]=s}}}}})),require_json_schema_draft_07=__commonJSMin$1(((e,t)=>{t.exports={$schema:`http://json-schema.org/draft-07/schema#`,$id:`http://json-schema.org/draft-07/schema#`,title:`Core schema meta-schema`,definitions:{schemaArray:{type:`array`,minItems:1,items:{$ref:`#`}},nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:`#/definitions/nonNegativeInteger`},{default:0}]},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}},type:[`object`,`boolean`],properties:{$id:{type:`string`,format:`uri-reference`},$schema:{type:`string`,format:`uri`},$ref:{type:`string`,format:`uri-reference`},$comment:{type:`string`},title:{type:`string`},description:{type:`string`},default:!0,readOnly:{type:`boolean`,default:!1},examples:{type:`array`,items:!0},multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/definitions/nonNegativeInteger`},minLength:{$ref:`#/definitions/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},additionalItems:{$ref:`#`},items:{anyOf:[{$ref:`#`},{$ref:`#/definitions/schemaArray`}],default:!0},maxItems:{$ref:`#/definitions/nonNegativeInteger`},minItems:{$ref:`#/definitions/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},contains:{$ref:`#`},maxProperties:{$ref:`#/definitions/nonNegativeInteger`},minProperties:{$ref:`#/definitions/nonNegativeIntegerDefault0`},required:{$ref:`#/definitions/stringArray`},additionalProperties:{$ref:`#`},definitions:{type:`object`,additionalProperties:{$ref:`#`},default:{}},properties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$ref:`#`},propertyNames:{format:`regex`},default:{}},dependencies:{type:`object`,additionalProperties:{anyOf:[{$ref:`#`},{$ref:`#/definitions/stringArray`}]}},propertyNames:{$ref:`#`},const:!0,enum:{type:`array`,items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:`#/definitions/simpleTypes`},{type:`array`,items:{$ref:`#/definitions/simpleTypes`},minItems:1,uniqueItems:!0}]},format:{type:`string`},contentMediaType:{type:`string`},contentEncoding:{type:`string`},if:{$ref:`#`},then:{$ref:`#`},else:{$ref:`#`},allOf:{$ref:`#/definitions/schemaArray`},anyOf:{$ref:`#/definitions/schemaArray`},oneOf:{$ref:`#/definitions/schemaArray`},not:{$ref:`#`}},default:!0}})),require_ajv=__commonJSMin$1(((e,t)=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.MissingRefError=e.ValidationError=e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=e.Ajv=void 0;let s=require_core$1(),g=require_draft7(),S=require_discriminator(),w=require_json_schema_draft_07(),E=[`/properties`],D=`http://json-schema.org/draft-07/schema`;var O=class extends s.default{_addVocabularies(){super._addVocabularies(),g.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(S.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(w,E):w;this.addMetaSchema(e,D,!1),this.refs[`http://json-schema.org/schema`]=D}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(D)?D:void 0)}};e.Ajv=O,t.exports=e=O,t.exports.Ajv=O,Object.defineProperty(e,`__esModule`,{value:!0}),e.default=O;var k=require_validate();Object.defineProperty(e,`KeywordCxt`,{enumerable:!0,get:function(){return k.KeywordCxt}});var j=require_codegen();Object.defineProperty(e,`_`,{enumerable:!0,get:function(){return j._}}),Object.defineProperty(e,`str`,{enumerable:!0,get:function(){return j.str}}),Object.defineProperty(e,`stringify`,{enumerable:!0,get:function(){return j.stringify}}),Object.defineProperty(e,`nil`,{enumerable:!0,get:function(){return j.nil}}),Object.defineProperty(e,`Name`,{enumerable:!0,get:function(){return j.Name}}),Object.defineProperty(e,`CodeGen`,{enumerable:!0,get:function(){return j.CodeGen}});var F=require_validation_error();Object.defineProperty(e,`ValidationError`,{enumerable:!0,get:function(){return F.default}});var L=require_ref_error();Object.defineProperty(e,`MissingRefError`,{enumerable:!0,get:function(){return L.default}})})),require_formats=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.formatNames=e.fastFormats=e.fullFormats=void 0;function t(e,t){return{validate:e,compare:t}}e.fullFormats={date:t(w,E),time:t(O(!0),k),"date-time":t(L(!0),B),"iso-time":t(O(),j),"iso-date-time":t(L(),H),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:Y,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:de,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:te,int32:{type:`number`,validate:oe},int64:{type:`number`,validate:se},float:{type:`number`,validate:ce},double:{type:`number`,validate:ce},password:!0,binary:!0},e.fastFormats={...e.fullFormats,date:t(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,E),time:t(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,k),"date-time":t(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,B),"iso-time":t(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,j),"iso-date-time":t(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,H),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i},e.formatNames=Object.keys(e.fullFormats);function s(e){return e%4==0&&(e%100!=0||e%400==0)}let g=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,S=[0,31,28,31,30,31,30,31,31,30,31,30,31];function w(e){let t=g.exec(e);if(!t)return!1;let w=+t[1],E=+t[2],D=+t[3];return E>=1&&E<=12&&D>=1&&D<=(E===2&&s(w)?29:S[E])}function E(e,t){if(e&&t)return e>t?1:e<t?-1:0}let D=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function O(e){return function(t){let s=D.exec(t);if(!s)return!1;let g=+s[1],S=+s[2],w=+s[3],E=s[4],O=s[5]===`-`?-1:1,k=+(s[6]||0),j=+(s[7]||0);if(k>23||j>59||e&&!E)return!1;if(g<=23&&S<=59&&w<60)return!0;let F=S-j*O,L=g-k*O-(F<0?1:0);return(L===23||L===-1)&&(F===59||F===-1)&&w<61}}function k(e,t){if(!(e&&t))return;let s=new Date(`2020-01-01T`+e).valueOf(),g=new Date(`2020-01-01T`+t).valueOf();if(s&&g)return s-g}function j(e,t){if(!(e&&t))return;let s=D.exec(e),g=D.exec(t);if(s&&g)return e=s[1]+s[2]+s[3],t=g[1]+g[2]+g[3],e>t?1:e<t?-1:0}let F=/t|\s/i;function L(e){let t=O(e);return function(e){let s=e.split(F);return s.length===2&&w(s[0])&&t(s[1])}}function B(e,t){if(!(e&&t))return;let s=new Date(e).valueOf(),g=new Date(t).valueOf();if(s&&g)return s-g}function H(e,t){if(!(e&&t))return;let[s,g]=e.split(F),[S,w]=t.split(F),D=E(s,S);if(D!==void 0)return D||k(g,w)}let q=/\/|:/,J=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function Y(e){return q.test(e)&&J.test(e)}let ee=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function te(e){return ee.lastIndex=0,ee.test(e)}let ne=-(2**31),ae=2**31-1;function oe(e){return Number.isInteger(e)&&e<=ae&&e>=ne}function se(e){return Number.isInteger(e)}function ce(){return!0}let ue=/[^\\]\\Z/;function de(e){if(ue.test(e))return!1;try{return new RegExp(e),!0}catch{return!1}}})),require_limit=__commonJSMin$1((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.formatLimitDefinition=void 0;let t=require_ajv(),s=require_codegen(),g=s.operators,S={formatMaximum:{okStr:`<=`,ok:g.LTE,fail:g.GT},formatMinimum:{okStr:`>=`,ok:g.GTE,fail:g.LT},formatExclusiveMaximum:{okStr:`<`,ok:g.LT,fail:g.GTE},formatExclusiveMinimum:{okStr:`>`,ok:g.GT,fail:g.LTE}};e.formatLimitDefinition={keyword:Object.keys(S),type:`string`,schemaType:`string`,$data:!0,error:{message:({keyword:e,schemaCode:t})=>(0,s.str)`should be ${S[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>(0,s._)`{comparison: ${S[e].okStr}, limit: ${t}}`},code(e){let{gen:g,data:w,schemaCode:E,keyword:D,it:O}=e,{opts:k,self:j}=O;if(!k.validateFormats)return;let F=new t.KeywordCxt(O,j.RULES.all.format.definition,`format`);F.$data?L():B();function L(){let t=g.scopeValue(`formats`,{ref:j.formats,code:k.code.formats}),S=g.const(`fmt`,(0,s._)`${t}[${F.schemaCode}]`);e.fail$data((0,s.or)((0,s._)`typeof ${S} != "object"`,(0,s._)`${S} instanceof RegExp`,(0,s._)`typeof ${S}.compare != "function"`,H(S)))}function B(){let t=F.schema,S=j.formats[t];if(!S||S===!0)return;if(typeof S!=`object`||S instanceof RegExp||typeof S.compare!=`function`)throw Error(`"${D}": format "${t}" does not define "compare" function`);let w=g.scopeValue(`formats`,{key:t,ref:S,code:k.code.formats?(0,s._)`${k.code.formats}${(0,s.getProperty)(t)}`:void 0});e.fail$data(H(w))}function H(e){return(0,s._)`${e}.compare(${w}, ${E}) ${S[D].fail} 0`}},dependencies:[`format`]},e.default=t=>(t.addKeyword(e.formatLimitDefinition),t)})),require_dist=__commonJSMin$1(((e,t)=>{Object.defineProperty(e,`__esModule`,{value:!0});let s=require_formats(),g=require_limit(),S=require_codegen(),w=new S.Name(`fullFormats`),E=new S.Name(`fastFormats`),D=(e,t={keywords:!0})=>{if(Array.isArray(t))return O(e,t,s.fullFormats,w),e;let[S,D]=t.mode===`fast`?[s.fastFormats,E]:[s.fullFormats,w];return O(e,t.formats||s.formatNames,S,D),t.keywords&&(0,g.default)(e),e};D.get=(e,t=`full`)=>{let g=(t===`fast`?s.fastFormats:s.fullFormats)[e];if(!g)throw Error(`Unknown format "${e}"`);return g};function O(e,t,s,g){var w,E;(E=e.opts.code).formats??(E.formats=(0,S._)`require("ajv-formats/dist/formats").${g}`);for(let g of t)e.addFormat(g,s[g])}t.exports=e=D,Object.defineProperty(e,`__esModule`,{value:!0}),e.default=D})),import_ajv=__toESM$1(require_ajv(),1),import_dist=__toESM$1(require_dist(),1);function createDefaultAjvInstance(){let e=new import_ajv.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,import_dist.default)(e),e}var AjvJsonSchemaValidator=class{constructor(e){this._ajv=e??createDefaultAjvInstance()}getValidator(e){let t=`$id`in e&&typeof e.$id==`string`?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return e=>t(e)?{valid:!0,data:e,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(t.errors)}}},ExperimentalServerTasks=class{constructor(e){this._server=e}requestStream(e,t,s){return this._server.requestStream(e,t,s)}createMessageStream(e,t){let s=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!s?.sampling?.tools)throw Error(`Client does not support sampling tools capability.`);if(e.messages.length>0){let t=e.messages[e.messages.length-1],s=Array.isArray(t.content)?t.content:[t.content],g=s.some(e=>e.type===`tool_result`),S=e.messages.length>1?e.messages[e.messages.length-2]:void 0,w=S?Array.isArray(S.content)?S.content:[S.content]:[],E=w.some(e=>e.type===`tool_use`);if(g){if(s.some(e=>e.type!==`tool_result`))throw Error(`The last message must contain only tool_result content if any is present`);if(!E)throw Error(`tool_result blocks are not matching any tool_use from the previous message`)}if(E){let e=new Set(w.filter(e=>e.type===`tool_use`).map(e=>e.id)),t=new Set(s.filter(e=>e.type===`tool_result`).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error(`ids of tool_result blocks and tool_use blocks from previous message do not match`)}}return this.requestStream({method:`sampling/createMessage`,params:e},CreateMessageResultSchema,t)}elicitInputStream(e,t){let s=this._server.getClientCapabilities(),g=e.mode??`form`;switch(g){case`url`:if(!s?.elicitation?.url)throw Error(`Client does not support url elicitation.`);break;case`form`:if(!s?.elicitation?.form)throw Error(`Client does not support form elicitation.`);break}let S=g===`form`&&e.mode===void 0?{...e,mode:`form`}:e;return this.requestStream({method:`elicitation/create`,params:S},ElicitResultSchema,t)}async getTask(e,t){return this._server.getTask({taskId:e},t)}async getTaskResult(e,t,s){return this._server.getTaskResult({taskId:e},t,s)}async listTasks(e,t){return this._server.listTasks(e?{cursor:e}:void 0,t)}async cancelTask(e,t){return this._server.cancelTask({taskId:e},t)}};function assertToolsCallTaskCapability(e,t,s){if(!e)throw Error(`${s} does not support task creation (required for ${t})`);switch(t){case`tools/call`:if(!e.tools?.call)throw Error(`${s} does not support task creation for tools/call (required for ${t})`);break;default:break}}function assertClientRequestTaskCapability(e,t,s){if(!e)throw Error(`${s} does not support task creation (required for ${t})`);switch(t){case`sampling/createMessage`:if(!e.sampling?.createMessage)throw Error(`${s} does not support task creation for sampling/createMessage (required for ${t})`);break;case`elicitation/create`:if(!e.elicitation?.create)throw Error(`${s} does not support task creation for elicitation/create (required for ${t})`);break;default:break}}var Server=class extends Protocol{constructor(e,t){super(t),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(LoggingLevelSchema.options.map((e,t)=>[e,t])),this.isMessageIgnored=(e,t)=>{let s=this._loggingLevels.get(t);return s?this.LOG_LEVEL_SEVERITY.get(e)<this.LOG_LEVEL_SEVERITY.get(s):!1},this._capabilities=t?.capabilities??{},this._instructions=t?.instructions,this._jsonSchemaValidator=t?.jsonSchemaValidator??new AjvJsonSchemaValidator,this.setRequestHandler(InitializeRequestSchema,e=>this._oninitialize(e)),this.setNotificationHandler(InitializedNotificationSchema,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(SetLevelRequestSchema,async(e,t)=>{let s=t.sessionId||t.requestInfo?.headers[`mcp-session-id`]||void 0,{level:g}=e.params,S=LoggingLevelSchema.safeParse(g);return S.success&&this._loggingLevels.set(s,S.data),{}})}get experimental(){return this._experimental||={tasks:new ExperimentalServerTasks(this)},this._experimental}registerCapabilities(e){if(this.transport)throw Error(`Cannot register capabilities after connecting to transport`);this._capabilities=mergeCapabilities(this._capabilities,e)}setRequestHandler(e,t){let s=getObjectShape(e)?.method;if(!s)throw Error(`Schema is missing a method literal`);let g;if(isZ4Schema(s)){let e=s;g=e._zod?.def?.value??e.value}else{let e=s;g=e._def?.value??e.value}if(typeof g!=`string`)throw Error(`Schema method literal must be a string`);return g===`tools/call`?super.setRequestHandler(e,async(e,s)=>{let g=safeParse(CallToolRequestSchema,e);if(!g.success){let e=g.error instanceof Error?g.error.message:String(g.error);throw new McpError(ErrorCode.InvalidParams,`Invalid tools/call request: ${e}`)}let{params:S}=g.data,w=await Promise.resolve(t(e,s));if(S.task){let e=safeParse(CreateTaskResultSchema,w);if(!e.success){let t=e.error instanceof Error?e.error.message:String(e.error);throw new McpError(ErrorCode.InvalidParams,`Invalid task creation result: ${t}`)}return e.data}let E=safeParse(CallToolResultSchema,w);if(!E.success){let e=E.error instanceof Error?E.error.message:String(E.error);throw new McpError(ErrorCode.InvalidParams,`Invalid tools/call result: ${e}`)}return E.data}):super.setRequestHandler(e,t)}assertCapabilityForMethod(e){switch(e){case`sampling/createMessage`:if(!this._clientCapabilities?.sampling)throw Error(`Client does not support sampling (required for ${e})`);break;case`elicitation/create`:if(!this._clientCapabilities?.elicitation)throw Error(`Client does not support elicitation (required for ${e})`);break;case`roots/list`:if(!this._clientCapabilities?.roots)throw Error(`Client does not support listing roots (required for ${e})`);break;case`ping`:break}}assertNotificationCapability(e){switch(e){case`notifications/message`:if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case`notifications/resources/updated`:case`notifications/resources/list_changed`:if(!this._capabilities.resources)throw Error(`Server does not support notifying about resources (required for ${e})`);break;case`notifications/tools/list_changed`:if(!this._capabilities.tools)throw Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case`notifications/prompts/list_changed`:if(!this._capabilities.prompts)throw Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case`notifications/elicitation/complete`:if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for ${e})`);break;case`notifications/cancelled`:break;case`notifications/progress`:break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case`completion/complete`:if(!this._capabilities.completions)throw Error(`Server does not support completions (required for ${e})`);break;case`logging/setLevel`:if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case`prompts/get`:case`prompts/list`:if(!this._capabilities.prompts)throw Error(`Server does not support prompts (required for ${e})`);break;case`resources/list`:case`resources/templates/list`:case`resources/read`:if(!this._capabilities.resources)throw Error(`Server does not support resources (required for ${e})`);break;case`tools/call`:case`tools/list`:if(!this._capabilities.tools)throw Error(`Server does not support tools (required for ${e})`);break;case`tasks/get`:case`tasks/list`:case`tasks/result`:case`tasks/cancel`:if(!this._capabilities.tasks)throw Error(`Server does not support tasks capability (required for ${e})`);break;case`ping`:case`initialize`:break}}assertTaskCapability(e){assertClientRequestTaskCapability(this._clientCapabilities?.tasks?.requests,e,`Client`)}assertTaskHandlerCapability(e){this._capabilities&&assertToolsCallTaskCapability(this._capabilities.tasks?.requests,e,`Server`)}async _oninitialize(e){let t=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:SUPPORTED_PROTOCOL_VERSIONS.includes(t)?t:LATEST_PROTOCOL_VERSION,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:`ping`},EmptyResultSchema)}async createMessage(e,t){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw Error(`Client does not support sampling tools capability.`);if(e.messages.length>0){let t=e.messages[e.messages.length-1],s=Array.isArray(t.content)?t.content:[t.content],g=s.some(e=>e.type===`tool_result`),S=e.messages.length>1?e.messages[e.messages.length-2]:void 0,w=S?Array.isArray(S.content)?S.content:[S.content]:[],E=w.some(e=>e.type===`tool_use`);if(g){if(s.some(e=>e.type!==`tool_result`))throw Error(`The last message must contain only tool_result content if any is present`);if(!E)throw Error(`tool_result blocks are not matching any tool_use from the previous message`)}if(E){let e=new Set(w.filter(e=>e.type===`tool_use`).map(e=>e.id)),t=new Set(s.filter(e=>e.type===`tool_result`).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error(`ids of tool_result blocks and tool_use blocks from previous message do not match`)}}return e.tools?this.request({method:`sampling/createMessage`,params:e},CreateMessageResultWithToolsSchema,t):this.request({method:`sampling/createMessage`,params:e},CreateMessageResultSchema,t)}async elicitInput(e,t){switch(e.mode??`form`){case`url`:{if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support url elicitation.`);let s=e;return this.request({method:`elicitation/create`,params:s},ElicitResultSchema,t)}case`form`:{if(!this._clientCapabilities?.elicitation?.form)throw Error(`Client does not support form elicitation.`);let s=e.mode===`form`?e:{...e,mode:`form`},g=await this.request({method:`elicitation/create`,params:s},ElicitResultSchema,t);if(g.action===`accept`&&g.content&&s.requestedSchema)try{let e=this._jsonSchemaValidator.getValidator(s.requestedSchema)(g.content);if(!e.valid)throw new McpError(ErrorCode.InvalidParams,`Elicitation response content does not match requested schema: ${e.errorMessage}`)}catch(e){throw e instanceof McpError?e:new McpError(ErrorCode.InternalError,`Error validating elicitation response: ${e instanceof Error?e.message:String(e)}`)}return g}}}createElicitationCompletionNotifier(e,t){if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for notifications/elicitation/complete)`);return()=>this.notification({method:`notifications/elicitation/complete`,params:{elicitationId:e}},t)}async listRoots(e,t){return this.request({method:`roots/list`,params:e},ListRootsResultSchema,t)}async sendLoggingMessage(e,t){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,t))return this.notification({method:`notifications/message`,params:e})}async sendResourceUpdated(e){return this.notification({method:`notifications/resources/updated`,params:e})}async sendResourceListChanged(){return this.notification({method:`notifications/resources/list_changed`})}async sendToolListChanged(){return this.notification({method:`notifications/tools/list_changed`})}async sendPromptListChanged(){return this.notification({method:`notifications/prompts/list_changed`})}};const COMPLETABLE_SYMBOL=Symbol.for(`mcp.completable`);function isCompletable(e){return!!e&&typeof e==`object`&&COMPLETABLE_SYMBOL in e}function getCompleter(e){return e[COMPLETABLE_SYMBOL]?.complete}var McpZodTypeKind;(function(e){e.Completable=`McpCompletable`})(McpZodTypeKind||={});const TOOL_NAME_REGEX=/^[A-Za-z0-9._-]{1,128}$/;function validateToolName(e){let t=[];if(e.length===0)return{isValid:!1,warnings:[`Tool name cannot be empty`]};if(e.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${e.length})`]};if(e.includes(` `)&&t.push(`Tool name contains spaces, which may cause parsing issues`),e.includes(`,`)&&t.push(`Tool name contains commas, which may cause parsing issues`),(e.startsWith(`-`)||e.endsWith(`-`))&&t.push(`Tool name starts or ends with a dash, which may cause parsing issues in some contexts`),(e.startsWith(`.`)||e.endsWith(`.`))&&t.push(`Tool name starts or ends with a dot, which may cause parsing issues in some contexts`),!TOOL_NAME_REGEX.test(e)){let s=e.split(``).filter(e=>!/[A-Za-z0-9._-]/.test(e)).filter((e,t,s)=>s.indexOf(e)===t);return t.push(`Tool name contains invalid characters: ${s.map(e=>`"${e}"`).join(`, `)}`,`Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)`),{isValid:!1,warnings:t}}return{isValid:!0,warnings:t}}function issueToolNameWarning(e,t){if(t.length>0){console.warn(`Tool name validation warning for "${e}":`);for(let e of t)console.warn(` - ${e}`);console.warn(`Tool registration will proceed, but this may cause compatibility issues.`),console.warn(`Consider updating the tool name to conform to the MCP tool naming standard.`),console.warn(`See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.`)}}function validateAndWarnToolName(e){let t=validateToolName(e);return issueToolNameWarning(e,t.warnings),t.isValid}var ExperimentalMcpServerTasks=class{constructor(e){this._mcpServer=e}registerToolTask(e,t,s){let g={taskSupport:`required`,...t.execution};if(g.taskSupport===`forbidden`)throw Error(`Cannot register task-based tool '${e}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(e,t.title,t.description,t.inputSchema,t.outputSchema,t.annotations,g,t._meta,s)}},McpServer=class{constructor(e,t){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new Server(e,t)}get experimental(){return this._experimental||={tasks:new ExperimentalMcpServerTasks(this)},this._experimental}async connect(e){return await this.server.connect(e)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(ListToolsRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(CallToolRequestSchema)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(ListToolsRequestSchema,()=>({tools:Object.entries(this._registeredTools).filter(([,e])=>e.enabled).map(([e,t])=>{let s={name:e,title:t.title,description:t.description,inputSchema:(()=>{let e=normalizeObjectSchema(t.inputSchema);return e?toJsonSchemaCompat(e,{strictUnions:!0,pipeStrategy:`input`}):EMPTY_OBJECT_JSON_SCHEMA})(),annotations:t.annotations,execution:t.execution,_meta:t._meta};if(t.outputSchema){let e=normalizeObjectSchema(t.outputSchema);e&&(s.outputSchema=toJsonSchemaCompat(e,{strictUnions:!0,pipeStrategy:`output`}))}return s})})),this.server.setRequestHandler(CallToolRequestSchema,async(e,t)=>{try{let s=this._registeredTools[e.params.name];if(!s)throw new McpError(ErrorCode.InvalidParams,`Tool ${e.params.name} not found`);if(!s.enabled)throw new McpError(ErrorCode.InvalidParams,`Tool ${e.params.name} disabled`);let g=!!e.params.task,S=s.execution?.taskSupport,w=`createTask`in s.handler;if((S===`required`||S===`optional`)&&!w)throw new McpError(ErrorCode.InternalError,`Tool ${e.params.name} has taskSupport '${S}' but was not registered with registerToolTask`);if(S===`required`&&!g)throw new McpError(ErrorCode.MethodNotFound,`Tool ${e.params.name} requires task augmentation (taskSupport: 'required')`);if(S===`optional`&&!g&&w)return await this.handleAutomaticTaskPolling(s,e,t);let E=await this.validateToolInput(s,e.params.arguments,e.params.name),D=await this.executeToolHandler(s,E,t);return g||await this.validateToolOutput(s,D,e.params.name),D}catch(e){if(e instanceof McpError&&e.code===ErrorCode.UrlElicitationRequired)throw e;return this.createToolError(e instanceof Error?e.message:String(e))}}),!0)}createToolError(e){return{content:[{type:`text`,text:e}],isError:!0}}async validateToolInput(e,t,s){if(!e.inputSchema)return;let g=await safeParseAsync(normalizeObjectSchema(e.inputSchema)??e.inputSchema,t);if(!g.success){let e=getParseErrorMessage(`error`in g?g.error:`Unknown error`);throw new McpError(ErrorCode.InvalidParams,`Input validation error: Invalid arguments for tool ${s}: ${e}`)}return g.data}async validateToolOutput(e,t,s){if(!e.outputSchema||!(`content`in t)||t.isError)return;if(!t.structuredContent)throw new McpError(ErrorCode.InvalidParams,`Output validation error: Tool ${s} has an output schema but no structured content was provided`);let g=await safeParseAsync(normalizeObjectSchema(e.outputSchema),t.structuredContent);if(!g.success){let e=getParseErrorMessage(`error`in g?g.error:`Unknown error`);throw new McpError(ErrorCode.InvalidParams,`Output validation error: Invalid structured content for tool ${s}: ${e}`)}}async executeToolHandler(e,t,s){let g=e.handler;if(`createTask`in g){if(!s.taskStore)throw Error(`No task store provided.`);let S={...s,taskStore:s.taskStore};if(e.inputSchema){let e=g;return await Promise.resolve(e.createTask(t,S))}else{let e=g;return await Promise.resolve(e.createTask(S))}}if(e.inputSchema){let e=g;return await Promise.resolve(e(t,s))}else{let e=g;return await Promise.resolve(e(s))}}async handleAutomaticTaskPolling(e,t,s){if(!s.taskStore)throw Error(`No task store provided for task-capable tool.`);let g=await this.validateToolInput(e,t.params.arguments,t.params.name),S=e.handler,w={...s,taskStore:s.taskStore},E=g?await Promise.resolve(S.createTask(g,w)):await Promise.resolve(S.createTask(w)),D=E.task.taskId,O=E.task,k=O.pollInterval??5e3;for(;O.status!==`completed`&&O.status!==`failed`&&O.status!==`cancelled`;){await new Promise(e=>setTimeout(e,k));let e=await s.taskStore.getTask(D);if(!e)throw new McpError(ErrorCode.InternalError,`Task ${D} not found during polling`);O=e}return await s.taskStore.getTaskResult(D)}setCompletionRequestHandler(){this._completionHandlerInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(CompleteRequestSchema)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(CompleteRequestSchema,async e=>{switch(e.params.ref.type){case`ref/prompt`:return assertCompleteRequestPrompt(e),this.handlePromptCompletion(e,e.params.ref);case`ref/resource`:return assertCompleteRequestResourceTemplate(e),this.handleResourceCompletion(e,e.params.ref);default:throw new McpError(ErrorCode.InvalidParams,`Invalid completion reference: ${e.params.ref}`)}}),!0)}async handlePromptCompletion(e,t){let s=this._registeredPrompts[t.name];if(!s)throw new McpError(ErrorCode.InvalidParams,`Prompt ${t.name} not found`);if(!s.enabled)throw new McpError(ErrorCode.InvalidParams,`Prompt ${t.name} disabled`);if(!s.argsSchema)return EMPTY_COMPLETION_RESULT;let g=getObjectShape(s.argsSchema)?.[e.params.argument.name];if(!isCompletable(g))return EMPTY_COMPLETION_RESULT;let S=getCompleter(g);return S?createCompletionResult(await S(e.params.argument.value,e.params.context)):EMPTY_COMPLETION_RESULT}async handleResourceCompletion(e,t){let s=Object.values(this._registeredResourceTemplates).find(e=>e.resourceTemplate.uriTemplate.toString()===t.uri);if(!s){if(this._registeredResources[t.uri])return EMPTY_COMPLETION_RESULT;throw new McpError(ErrorCode.InvalidParams,`Resource template ${e.params.ref.uri} not found`)}let g=s.resourceTemplate.completeCallback(e.params.argument.name);return g?createCompletionResult(await g(e.params.argument.value,e.params.context)):EMPTY_COMPLETION_RESULT}setResourceRequestHandlers(){this._resourceHandlersInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(ListResourcesRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(ListResourceTemplatesRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(ReadResourceRequestSchema)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(ListResourcesRequestSchema,async(e,t)=>{let s=Object.entries(this._registeredResources).filter(([e,t])=>t.enabled).map(([e,t])=>({uri:e,name:t.name,...t.metadata})),g=[];for(let e of Object.values(this._registeredResourceTemplates)){if(!e.resourceTemplate.listCallback)continue;let s=await e.resourceTemplate.listCallback(t);for(let t of s.resources)g.push({...e.metadata,...t})}return{resources:[...s,...g]}}),this.server.setRequestHandler(ListResourceTemplatesRequestSchema,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([e,t])=>({name:e,uriTemplate:t.resourceTemplate.uriTemplate.toString(),...t.metadata}))})),this.server.setRequestHandler(ReadResourceRequestSchema,async(e,t)=>{let s=new URL(e.params.uri),g=this._registeredResources[s.toString()];if(g){if(!g.enabled)throw new McpError(ErrorCode.InvalidParams,`Resource ${s} disabled`);return g.readCallback(s,t)}for(let e of Object.values(this._registeredResourceTemplates)){let g=e.resourceTemplate.uriTemplate.match(s.toString());if(g)return e.readCallback(s,g,t)}throw new McpError(ErrorCode.InvalidParams,`Resource ${s} not found`)}),!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||=(this.server.assertCanSetRequestHandler(getMethodValue(ListPromptsRequestSchema)),this.server.assertCanSetRequestHandler(getMethodValue(GetPromptRequestSchema)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(ListPromptsRequestSchema,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,e])=>e.enabled).map(([e,t])=>({name:e,title:t.title,description:t.description,arguments:t.argsSchema?promptArgumentsFromSchema(t.argsSchema):void 0}))})),this.server.setRequestHandler(GetPromptRequestSchema,async(e,t)=>{let s=this._registeredPrompts[e.params.name];if(!s)throw new McpError(ErrorCode.InvalidParams,`Prompt ${e.params.name} not found`);if(!s.enabled)throw new McpError(ErrorCode.InvalidParams,`Prompt ${e.params.name} disabled`);if(s.argsSchema){let g=await safeParseAsync(normalizeObjectSchema(s.argsSchema),e.params.arguments);if(!g.success){let t=getParseErrorMessage(`error`in g?g.error:`Unknown error`);throw new McpError(ErrorCode.InvalidParams,`Invalid arguments for prompt ${e.params.name}: ${t}`)}let S=g.data,w=s.callback;return await Promise.resolve(w(S,t))}else{let e=s.callback;return await Promise.resolve(e(t))}}),!0)}resource(e,t,...s){let g;typeof s[0]==`object`&&(g=s.shift());let S=s[0];if(typeof t==`string`){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let s=this._createRegisteredResource(e,void 0,t,g,S);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),s}else{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let s=this._createRegisteredResourceTemplate(e,void 0,t,g,S);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),s}}registerResource(e,t,s,g){if(typeof t==`string`){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let S=this._createRegisteredResource(e,s.title,t,s,g);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),S}else{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let S=this._createRegisteredResourceTemplate(e,s.title,t,s,g);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),S}}_createRegisteredResource(e,t,s,g,S){let w={name:e,title:t,metadata:g,readCallback:S,enabled:!0,disable:()=>w.update({enabled:!1}),enable:()=>w.update({enabled:!0}),remove:()=>w.update({uri:null}),update:e=>{e.uri!==void 0&&e.uri!==s&&(delete this._registeredResources[s],e.uri&&(this._registeredResources[e.uri]=w)),e.name!==void 0&&(w.name=e.name),e.title!==void 0&&(w.title=e.title),e.metadata!==void 0&&(w.metadata=e.metadata),e.callback!==void 0&&(w.readCallback=e.callback),e.enabled!==void 0&&(w.enabled=e.enabled),this.sendResourceListChanged()}};return this._registeredResources[s]=w,w}_createRegisteredResourceTemplate(e,t,s,g,S){let w={resourceTemplate:s,title:t,metadata:g,readCallback:S,enabled:!0,disable:()=>w.update({enabled:!1}),enable:()=>w.update({enabled:!0}),remove:()=>w.update({name:null}),update:t=>{t.name!==void 0&&t.name!==e&&(delete this._registeredResourceTemplates[e],t.name&&(this._registeredResourceTemplates[t.name]=w)),t.title!==void 0&&(w.title=t.title),t.template!==void 0&&(w.resourceTemplate=t.template),t.metadata!==void 0&&(w.metadata=t.metadata),t.callback!==void 0&&(w.readCallback=t.callback),t.enabled!==void 0&&(w.enabled=t.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[e]=w;let E=s.uriTemplate.variableNames;return Array.isArray(E)&&E.some(e=>!!s.completeCallback(e))&&this.setCompletionRequestHandler(),w}_createRegisteredPrompt(e,t,s,g,S){let w={title:t,description:s,argsSchema:g===void 0?void 0:objectFromShape(g),callback:S,enabled:!0,disable:()=>w.update({enabled:!1}),enable:()=>w.update({enabled:!0}),remove:()=>w.update({name:null}),update:t=>{t.name!==void 0&&t.name!==e&&(delete this._registeredPrompts[e],t.name&&(this._registeredPrompts[t.name]=w)),t.title!==void 0&&(w.title=t.title),t.description!==void 0&&(w.description=t.description),t.argsSchema!==void 0&&(w.argsSchema=objectFromShape(t.argsSchema)),t.callback!==void 0&&(w.callback=t.callback),t.enabled!==void 0&&(w.enabled=t.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[e]=w,g&&Object.values(g).some(e=>isCompletable(e instanceof ZodOptional$1?e._def?.innerType:e))&&this.setCompletionRequestHandler(),w}_createRegisteredTool(e,t,s,g,S,w,E,D,O){validateAndWarnToolName(e);let k={title:t,description:s,inputSchema:getZodSchemaObject(g),outputSchema:getZodSchemaObject(S),annotations:w,execution:E,_meta:D,handler:O,enabled:!0,disable:()=>k.update({enabled:!1}),enable:()=>k.update({enabled:!0}),remove:()=>k.update({name:null}),update:t=>{t.name!==void 0&&t.name!==e&&(typeof t.name==`string`&&validateAndWarnToolName(t.name),delete this._registeredTools[e],t.name&&(this._registeredTools[t.name]=k)),t.title!==void 0&&(k.title=t.title),t.description!==void 0&&(k.description=t.description),t.paramsSchema!==void 0&&(k.inputSchema=objectFromShape(t.paramsSchema)),t.outputSchema!==void 0&&(k.outputSchema=objectFromShape(t.outputSchema)),t.callback!==void 0&&(k.handler=t.callback),t.annotations!==void 0&&(k.annotations=t.annotations),t._meta!==void 0&&(k._meta=t._meta),t.enabled!==void 0&&(k.enabled=t.enabled),this.sendToolListChanged()}};return this._registeredTools[e]=k,this.setToolRequestHandlers(),this.sendToolListChanged(),k}tool(e,...t){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let s,g,S,w;if(typeof t[0]==`string`&&(s=t.shift()),t.length>1){let s=t[0];if(isZodRawShapeCompat(s))g=t.shift(),t.length>1&&typeof t[0]==`object`&&t[0]!==null&&!isZodRawShapeCompat(t[0])&&(w=t.shift());else if(typeof s==`object`&&s){if(Object.values(s).some(e=>typeof e==`object`&&!!e))throw Error(`Tool ${e} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);w=t.shift()}}let E=t[0];return this._createRegisteredTool(e,void 0,s,g,void 0,w,{taskSupport:`forbidden`},void 0,E)}registerTool(e,t,s){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let{title:g,description:S,inputSchema:w,outputSchema:E,annotations:D,_meta:O}=t;return this._createRegisteredTool(e,g,S,w,E,D,{taskSupport:`forbidden`},O,s)}prompt(e,...t){if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);let s;typeof t[0]==`string`&&(s=t.shift());let g;t.length>1&&(g=t.shift());let S=t[0],w=this._createRegisteredPrompt(e,void 0,s,g,S);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),w}registerPrompt(e,t,s){if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);let{title:g,description:S,argsSchema:w}=t,E=this._createRegisteredPrompt(e,g,S,w,s);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),E}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(e,t){return this.server.sendLoggingMessage(e,t)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}};const EMPTY_OBJECT_JSON_SCHEMA={type:`object`,properties:{}};function isZodTypeLike(e){return typeof e==`object`&&!!e&&`parse`in e&&typeof e.parse==`function`&&`safeParse`in e&&typeof e.safeParse==`function`}function isZodSchemaInstance(e){return`_def`in e||`_zod`in e||isZodTypeLike(e)}function isZodRawShapeCompat(e){return typeof e!=`object`||!e||isZodSchemaInstance(e)?!1:Object.keys(e).length===0?!0:Object.values(e).some(isZodTypeLike)}function getZodSchemaObject(e){if(e){if(isZodRawShapeCompat(e))return objectFromShape(e);if(!isZodSchemaInstance(e))throw Error(`inputSchema must be a Zod schema or raw shape, received an unrecognized object`);return e}}function promptArgumentsFromSchema(e){let t=getObjectShape(e);return t?Object.entries(t).map(([e,t])=>({name:e,description:getSchemaDescription(t),required:!isSchemaOptional(t)})):[]}function getMethodValue(e){let t=getObjectShape(e)?.method;if(!t)throw Error(`Schema is missing a method literal`);let s=getLiteralValue(t);if(typeof s==`string`)return s;throw Error(`Schema method literal must be a string`)}function createCompletionResult(e){return{completion:{values:e.slice(0,100),total:e.length,hasMore:e.length>100}}}const EMPTY_COMPLETION_RESULT={completion:{values:[],hasMore:!1}};var RequestError=class extends Error{constructor(e,t){super(e,t),this.name=`RequestError`}},toRequestError=e=>e instanceof RequestError?e:new RequestError(e.message,{cause:e}),GlobalRequest=global.Request,Request$1=class extends GlobalRequest{constructor(e,t){typeof e==`object`&&getRequestCache in e&&(e=e[getRequestCache]()),t?.body?.getReader!==void 0&&(t.duplex??=`half`),super(e,t)}},newHeadersFromIncoming=e=>{let t=[],s=e.rawHeaders;for(let e=0;e<s.length;e+=2){let{[e]:g,[e+1]:S}=s;g.charCodeAt(0)!==58&&t.push([g,S])}return new Headers(t)},wrapBodyStream=Symbol(`wrapBodyStream`),newRequestFromIncoming=(e,t,s,g,S)=>{let w={method:e,headers:s,signal:S.signal};if(e===`TRACE`){w.method=`GET`;let e=new Request$1(t,w);return Object.defineProperty(e,`method`,{get(){return`TRACE`}}),e}if(!(e===`GET`||e===`HEAD`))if(`rawBody`in g&&g.rawBody instanceof Buffer)w.body=new ReadableStream({start(e){e.enqueue(g.rawBody),e.close()}});else if(g[wrapBodyStream]){let e;w.body=new ReadableStream({async pull(t){try{e||=Readable.toWeb(g).getReader();let{done:s,value:S}=await e.read();s?t.close():t.enqueue(S)}catch(e){t.error(e)}}})}else w.body=Readable.toWeb(g);return new Request$1(t,w)},getRequestCache=Symbol(`getRequestCache`),requestCache=Symbol(`requestCache`),incomingKey=Symbol(`incomingKey`),urlKey=Symbol(`urlKey`),headersKey=Symbol(`headersKey`),abortControllerKey=Symbol(`abortControllerKey`),requestPrototype={get method(){return this[incomingKey].method||`GET`},get url(){return this[urlKey]},get headers(){return this[headersKey]||=newHeadersFromIncoming(this[incomingKey])},[Symbol(`getAbortController`)](){return this[getRequestCache](),this[abortControllerKey]},[getRequestCache](){return this[abortControllerKey]||=new AbortController,this[requestCache]||=newRequestFromIncoming(this.method,this[urlKey],this.headers,this[incomingKey],this[abortControllerKey])}};[`body`,`bodyUsed`,`cache`,`credentials`,`destination`,`integrity`,`mode`,`redirect`,`referrer`,`referrerPolicy`,`signal`,`keepalive`].forEach(e=>{Object.defineProperty(requestPrototype,e,{get(){return this[getRequestCache]()[e]}})}),[`arrayBuffer`,`blob`,`clone`,`formData`,`json`,`text`].forEach(e=>{Object.defineProperty(requestPrototype,e,{value:function(){return this[getRequestCache]()[e]()}})}),Object.setPrototypeOf(requestPrototype,Request$1.prototype);var newRequest=(e,t)=>{let s=Object.create(requestPrototype);s[incomingKey]=e;let g=e.url||``;if(g[0]!==`/`&&(g.startsWith(`http://`)||g.startsWith(`https://`))){if(e instanceof Http2ServerRequest)throw new RequestError(`Absolute URL for :path is not allowed in HTTP/2`);try{s[urlKey]=new URL(g).href}catch(e){throw new RequestError(`Invalid absolute URL`,{cause:e})}return s}let S=(e instanceof Http2ServerRequest?e.authority:e.headers.host)||t;if(!S)throw new RequestError(`Missing host header`);let w;if(e instanceof Http2ServerRequest){if(w=e.scheme,!(w===`http`||w===`https`))throw new RequestError(`Unsupported scheme`)}else w=e.socket&&e.socket.encrypted?`https`:`http`;let E=new URL(`${w}://${S}${g}`);if(E.hostname.length!==S.length&&E.hostname!==S.replace(/:\d+$/,``))throw new RequestError(`Invalid host header`);return s[urlKey]=E.href,s},responseCache=Symbol(`responseCache`),getResponseCache=Symbol(`getResponseCache`),cacheKey=Symbol(`cache`),GlobalResponse=global.Response,Response2=class e{#e;#t;[getResponseCache](){return delete this[cacheKey],this[responseCache]||=new GlobalResponse(this.#e,this.#t)}constructor(t,s){let g;if(this.#e=t,s instanceof e){let e=s[responseCache];if(e){this.#t=e,this[getResponseCache]();return}else this.#t=s.#t,g=new Headers(s.#t.headers)}else this.#t=s;(typeof t==`string`||t?.getReader!==void 0||t instanceof Blob||t instanceof Uint8Array)&&(this[cacheKey]=[s?.status||200,t,g||s?.headers])}get headers(){let e=this[cacheKey];return e?(e[2]instanceof Headers||(e[2]=new Headers(e[2]||{"content-type":`text/plain; charset=UTF-8`})),e[2]):this[getResponseCache]().headers}get status(){return this[cacheKey]?.[0]??this[getResponseCache]().status}get ok(){let e=this.status;return e>=200&&e<300}};[`body`,`bodyUsed`,`redirected`,`statusText`,`trailers`,`type`,`url`].forEach(e=>{Object.defineProperty(Response2.prototype,e,{get(){return this[getResponseCache]()[e]}})}),[`arrayBuffer`,`blob`,`clone`,`formData`,`json`,`text`].forEach(e=>{Object.defineProperty(Response2.prototype,e,{value:function(){return this[getResponseCache]()[e]()}})}),Object.setPrototypeOf(Response2,GlobalResponse),Object.setPrototypeOf(Response2.prototype,GlobalResponse.prototype);async function readWithoutBlocking(e){return Promise.race([e,Promise.resolve().then(()=>Promise.resolve(void 0))])}function writeFromReadableStreamDefaultReader(e,t,s){let g=t=>{e.cancel(t).catch(()=>{})};return t.on(`close`,g),t.on(`error`,g),(s??e.read()).then(E,S),e.closed.finally(()=>{t.off(`close`,g),t.off(`error`,g)});function S(e){e&&t.destroy(e)}function w(){e.read().then(E,S)}function E({done:s,value:g}){try{if(s)t.end();else if(!t.write(g))t.once(`drain`,w);else return e.read().then(E,S)}catch(e){S(e)}}}function writeFromReadableStream(e,t){if(e.locked)throw TypeError(`ReadableStream is locked.`);return t.destroyed?void 0:writeFromReadableStreamDefaultReader(e.getReader(),t)}var buildOutgoingHttpHeaders=e=>{let t={};e instanceof Headers||(e=new Headers(e??void 0));let s=[];for(let[g,S]of e)g===`set-cookie`?s.push(S):t[g]=S;return s.length>0&&(t[`set-cookie`]=s),t[`content-type`]??=`text/plain; charset=UTF-8`,t},X_ALREADY_SENT=`x-hono-already-sent`;global.crypto===void 0&&(global.crypto=crypto$2);var outgoingEnded=Symbol(`outgoingEnded`),incomingDraining=Symbol(`incomingDraining`),DRAIN_TIMEOUT_MS=500,MAX_DRAIN_BYTES=64*1024*1024,drainIncoming=e=>{let t=e;if(e.destroyed||t[incomingDraining])return;if(t[incomingDraining]=!0,e instanceof Http2ServerRequest){try{e.stream?.close?.(constants$1.NGHTTP2_NO_ERROR)}catch{}return}let s=0,g=()=>{clearTimeout(w),e.off(`data`,E),e.off(`end`,g),e.off(`error`,g)},S=()=>{g();let t=e.socket;t&&!t.destroyed&&t.destroySoon()},w=setTimeout(S,DRAIN_TIMEOUT_MS);w.unref?.();let E=e=>{s+=e.length,s>MAX_DRAIN_BYTES&&S()};e.on(`data`,E),e.on(`end`,g),e.on(`error`,g),e.resume()},handleRequestError=()=>new Response(null,{status:400}),handleFetchError=e=>new Response(null,{status:e instanceof Error&&(e.name===`TimeoutError`||e.constructor.name===`TimeoutError`)?504:500}),handleResponseError=(e,t)=>{let s=e instanceof Error?e:Error(`unknown error`,{cause:e});s.code===`ERR_STREAM_PREMATURE_CLOSE`?console.info(`The user aborted a request.`):(console.error(e),t.headersSent||t.writeHead(500,{"Content-Type":`text/plain`}),t.end(`Error: ${s.message}`),t.destroy(s))},flushHeaders=e=>{`flushHeaders`in e&&e.writable&&e.flushHeaders()},responseViaCache=async(e,t)=>{let[s,g,S]=e[cacheKey],w=!1;if(!S)S={"content-type":`text/plain; charset=UTF-8`};else if(S instanceof Headers)w=S.has(`content-length`),S=buildOutgoingHttpHeaders(S);else if(Array.isArray(S)){let e=new Headers(S);w=e.has(`content-length`),S=buildOutgoingHttpHeaders(e)}else for(let e in S)if(e.length===14&&e.toLowerCase()===`content-length`){w=!0;break}w||(typeof g==`string`?S[`Content-Length`]=Buffer.byteLength(g):g instanceof Uint8Array?S[`Content-Length`]=g.byteLength:g instanceof Blob&&(S[`Content-Length`]=g.size)),t.writeHead(s,S),typeof g==`string`||g instanceof Uint8Array?t.end(g):g instanceof Blob?t.end(new Uint8Array(await g.arrayBuffer())):(flushHeaders(t),await writeFromReadableStream(g,t)?.catch(e=>handleResponseError(e,t))),t[outgoingEnded]?.()},isPromise=e=>typeof e.then==`function`,responseViaResponseObject=async(e,t,s={})=>{if(isPromise(e))if(s.errorHandler)try{e=await e}catch(t){let g=await s.errorHandler(t);if(!g)return;e=g}else e=await e.catch(handleFetchError);if(cacheKey in e)return responseViaCache(e,t);let g=buildOutgoingHttpHeaders(e.headers);if(e.body){let s=e.body.getReader(),S=[],w=!1,E;if(g[`transfer-encoding`]!==`chunked`){let e=2;for(let t=0;t<e;t++){E||=s.read();let g=await readWithoutBlocking(E).catch(e=>{console.error(e),w=!0});if(!g){if(t===1){await new Promise(e=>setTimeout(e)),e=3;continue}break}if(E=void 0,g.value&&S.push(g.value),g.done){w=!0;break}}w&&!(`content-length`in g)&&(g[`content-length`]=S.reduce((e,t)=>e+t.length,0))}t.writeHead(e.status,g),S.forEach(e=>{t.write(e)}),w?t.end():(S.length===0&&flushHeaders(t),await writeFromReadableStreamDefaultReader(s,t,E))}else g[X_ALREADY_SENT]||(t.writeHead(e.status,g),t.end());t[outgoingEnded]?.()},getRequestListener=(e,t={})=>{let s=t.autoCleanupIncoming??!0;return t.overrideGlobalObjects!==!1&&global.Request!==Request$1&&(Object.defineProperty(global,`Request`,{value:Request$1}),Object.defineProperty(global,`Response`,{value:Response2})),async(g,S)=>{let w,E;try{E=newRequest(g,t.hostname);let D=!s||g.method===`GET`||g.method===`HEAD`;if(D||(g[wrapBodyStream]=!0,g.on(`end`,()=>{D=!0}),g instanceof Http2ServerRequest&&(S[outgoingEnded]=()=>{D||setTimeout(()=>{D||setTimeout(()=>{drainIncoming(g)})})}),S.on(`finish`,()=>{D||drainIncoming(g)})),S.on(`close`,()=>{E[abortControllerKey]&&(g.errored?E[abortControllerKey].abort(g.errored.toString()):S.writableFinished||E[abortControllerKey].abort(`Client connection prematurely closed.`)),D||setTimeout(()=>{D||setTimeout(()=>{drainIncoming(g)})})}),w=e(E,{incoming:g,outgoing:S}),cacheKey in w)return responseViaCache(w,S)}catch(e){if(w)return handleResponseError(e,S);if(t.errorHandler){if(w=await t.errorHandler(E?e:toRequestError(e)),!w)return}else w=E?handleFetchError(e):handleRequestError()}try{return await responseViaResponseObject(w,S,t)}catch(e){return handleResponseError(e,S)}}},WebStandardStreamableHTTPServerTransport=class{constructor(e={}){this._started=!1,this._hasHandledRequest=!1,this._streamMapping=new Map,this._requestToStreamMapping=new Map,this._requestResponseMap=new Map,this._initialized=!1,this._enableJsonResponse=!1,this._standaloneSseStreamId=`_GET_stream`,this.sessionIdGenerator=e.sessionIdGenerator,this._enableJsonResponse=e.enableJsonResponse??!1,this._eventStore=e.eventStore,this._onsessioninitialized=e.onsessioninitialized,this._onsessionclosed=e.onsessionclosed,this._allowedHosts=e.allowedHosts,this._allowedOrigins=e.allowedOrigins,this._enableDnsRebindingProtection=e.enableDnsRebindingProtection??!1,this._retryInterval=e.retryInterval}async start(){if(this._started)throw Error(`Transport already started`);this._started=!0}createJsonErrorResponse(e,t,s,g){let S={code:t,message:s};return g?.data!==void 0&&(S.data=g.data),new Response(JSON.stringify({jsonrpc:`2.0`,error:S,id:null}),{status:e,headers:{"Content-Type":`application/json`,...g?.headers}})}validateRequestHeaders(e){if(this._enableDnsRebindingProtection){if(this._allowedHosts&&this._allowedHosts.length>0){let t=e.headers.get(`host`);if(!t||!this._allowedHosts.includes(t)){let e=`Invalid Host header: ${t}`;return this.onerror?.(Error(e)),this.createJsonErrorResponse(403,-32e3,e)}}if(this._allowedOrigins&&this._allowedOrigins.length>0){let t=e.headers.get(`origin`);if(t&&!this._allowedOrigins.includes(t)){let e=`Invalid Origin header: ${t}`;return this.onerror?.(Error(e)),this.createJsonErrorResponse(403,-32e3,e)}}}}async handleRequest(e,t){if(!this.sessionIdGenerator&&this._hasHandledRequest)throw Error(`Stateless transport cannot be reused across requests. Create a new transport per request.`);this._hasHandledRequest=!0;let s=this.validateRequestHeaders(e);if(s)return s;switch(e.method){case`POST`:return this.handlePostRequest(e,t);case`GET`:return this.handleGetRequest(e);case`DELETE`:return this.handleDeleteRequest(e);default:return this.handleUnsupportedRequest()}}async writePrimingEvent(e,t,s,g){if(!this._eventStore||g<`2025-11-25`)return;let S=await this._eventStore.storeEvent(s,{}),w=`id: ${S}\ndata: \n\n`;this._retryInterval!==void 0&&(w=`id: ${S}\nretry: ${this._retryInterval}\ndata: \n\n`),e.enqueue(t.encode(w))}async handleGetRequest(e){if(!e.headers.get(`accept`)?.includes(`text/event-stream`))return this.onerror?.(Error(`Not Acceptable: Client must accept text/event-stream`)),this.createJsonErrorResponse(406,-32e3,`Not Acceptable: Client must accept text/event-stream`);let t=this.validateSession(e);if(t)return t;let s=this.validateProtocolVersion(e);if(s)return s;if(this._eventStore){let t=e.headers.get(`last-event-id`);if(t)return this.replayEvents(t)}if(this._streamMapping.get(this._standaloneSseStreamId)!==void 0)return this.onerror?.(Error(`Conflict: Only one SSE stream is allowed per session`)),this.createJsonErrorResponse(409,-32e3,`Conflict: Only one SSE stream is allowed per session`);let g=new TextEncoder,S,w=new ReadableStream({start:e=>{S=e},cancel:()=>{this._streamMapping.delete(this._standaloneSseStreamId)}}),E={"Content-Type":`text/event-stream`,"Cache-Control":`no-cache, no-transform`,Connection:`keep-alive`};return this.sessionId!==void 0&&(E[`mcp-session-id`]=this.sessionId),this._streamMapping.set(this._standaloneSseStreamId,{controller:S,encoder:g,cleanup:()=>{this._streamMapping.delete(this._standaloneSseStreamId);try{S.close()}catch{}}}),new Response(w,{headers:E})}async replayEvents(e){if(!this._eventStore)return this.onerror?.(Error(`Event store not configured`)),this.createJsonErrorResponse(400,-32e3,`Event store not configured`);try{let t;if(this._eventStore.getStreamIdForEventId){if(t=await this._eventStore.getStreamIdForEventId(e),!t)return this.onerror?.(Error(`Invalid event ID format`)),this.createJsonErrorResponse(400,-32e3,`Invalid event ID format`);if(this._streamMapping.get(t)!==void 0)return this.onerror?.(Error(`Conflict: Stream already has an active connection`)),this.createJsonErrorResponse(409,-32e3,`Conflict: Stream already has an active connection`)}let s={"Content-Type":`text/event-stream`,"Cache-Control":`no-cache, no-transform`,Connection:`keep-alive`};this.sessionId!==void 0&&(s[`mcp-session-id`]=this.sessionId);let g=new TextEncoder,S,w=new ReadableStream({start:e=>{S=e},cancel:()=>{}}),E=await this._eventStore.replayEventsAfter(e,{send:async(e,t)=>{if(!this.writeSSEEvent(S,g,t,e)){this.onerror?.(Error(`Failed replay events`));try{S.close()}catch{}}}});return this._streamMapping.set(E,{controller:S,encoder:g,cleanup:()=>{this._streamMapping.delete(E);try{S.close()}catch{}}}),new Response(w,{headers:s})}catch(e){return this.onerror?.(e),this.createJsonErrorResponse(500,-32e3,`Error replaying events`)}}writeSSEEvent(e,t,s,g){try{let S=`event: message
56
56
  `;return g&&(S+=`id: ${g}\n`),S+=`data: ${JSON.stringify(s)}\n\n`,e.enqueue(t.encode(S)),!0}catch(e){return this.onerror?.(e),!1}}handleUnsupportedRequest(){return this.onerror?.(Error(`Method not allowed.`)),new Response(JSON.stringify({jsonrpc:`2.0`,error:{code:-32e3,message:`Method not allowed.`},id:null}),{status:405,headers:{Allow:`GET, POST, DELETE`,"Content-Type":`application/json`}})}async handlePostRequest(e,t){try{let s=e.headers.get(`accept`);if(!s?.includes(`application/json`)||!s.includes(`text/event-stream`))return this.onerror?.(Error(`Not Acceptable: Client must accept both application/json and text/event-stream`)),this.createJsonErrorResponse(406,-32e3,`Not Acceptable: Client must accept both application/json and text/event-stream`);let g=e.headers.get(`content-type`);if(!g||!g.includes(`application/json`))return this.onerror?.(Error(`Unsupported Media Type: Content-Type must be application/json`)),this.createJsonErrorResponse(415,-32e3,`Unsupported Media Type: Content-Type must be application/json`);let S={headers:Object.fromEntries(e.headers.entries()),url:new URL(e.url)},w;if(t?.parsedBody!==void 0)w=t.parsedBody;else try{w=await e.json()}catch{return this.onerror?.(Error(`Parse error: Invalid JSON`)),this.createJsonErrorResponse(400,-32700,`Parse error: Invalid JSON`)}let E;try{E=Array.isArray(w)?w.map(e=>JSONRPCMessageSchema.parse(e)):[JSONRPCMessageSchema.parse(w)]}catch{return this.onerror?.(Error(`Parse error: Invalid JSON-RPC message`)),this.createJsonErrorResponse(400,-32700,`Parse error: Invalid JSON-RPC message`)}let D=E.some(isInitializeRequest);if(D){if(this._initialized&&this.sessionId!==void 0)return this.onerror?.(Error(`Invalid Request: Server already initialized`)),this.createJsonErrorResponse(400,-32600,`Invalid Request: Server already initialized`);if(E.length>1)return this.onerror?.(Error(`Invalid Request: Only one initialization request is allowed`)),this.createJsonErrorResponse(400,-32600,`Invalid Request: Only one initialization request is allowed`);this.sessionId=this.sessionIdGenerator?.(),this._initialized=!0,this.sessionId&&this._onsessioninitialized&&await Promise.resolve(this._onsessioninitialized(this.sessionId))}if(!D){let t=this.validateSession(e);if(t)return t;let s=this.validateProtocolVersion(e);if(s)return s}if(!E.some(isJSONRPCRequest)){for(let e of E)this.onmessage?.(e,{authInfo:t?.authInfo,requestInfo:S});return new Response(null,{status:202})}let O=crypto.randomUUID(),k=E.find(e=>isInitializeRequest(e)),j=k?k.params.protocolVersion:e.headers.get(`mcp-protocol-version`)??`2025-03-26`;if(this._enableJsonResponse)return new Promise(e=>{this._streamMapping.set(O,{resolveJson:e,cleanup:()=>{this._streamMapping.delete(O)}});for(let e of E)isJSONRPCRequest(e)&&this._requestToStreamMapping.set(e.id,O);for(let e of E)this.onmessage?.(e,{authInfo:t?.authInfo,requestInfo:S})});let F=new TextEncoder,L,B=new ReadableStream({start:e=>{L=e},cancel:()=>{this._streamMapping.delete(O)}}),H={"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`};this.sessionId!==void 0&&(H[`mcp-session-id`]=this.sessionId);for(let e of E)isJSONRPCRequest(e)&&(this._streamMapping.set(O,{controller:L,encoder:F,cleanup:()=>{this._streamMapping.delete(O);try{L.close()}catch{}}}),this._requestToStreamMapping.set(e.id,O));await this.writePrimingEvent(L,F,O,j);for(let e of E){let s,g;isJSONRPCRequest(e)&&this._eventStore&&j>=`2025-11-25`&&(s=()=>{this.closeSSEStream(e.id)},g=()=>{this.closeStandaloneSSEStream()}),this.onmessage?.(e,{authInfo:t?.authInfo,requestInfo:S,closeSSEStream:s,closeStandaloneSSEStream:g})}return new Response(B,{status:200,headers:H})}catch(e){return this.onerror?.(e),this.createJsonErrorResponse(400,-32700,`Parse error`,{data:String(e)})}}async handleDeleteRequest(e){return this.validateSession(e)||this.validateProtocolVersion(e)||(await Promise.resolve(this._onsessionclosed?.(this.sessionId)),await this.close(),new Response(null,{status:200}))}validateSession(e){if(this.sessionIdGenerator===void 0)return;if(!this._initialized)return this.onerror?.(Error(`Bad Request: Server not initialized`)),this.createJsonErrorResponse(400,-32e3,`Bad Request: Server not initialized`);let t=e.headers.get(`mcp-session-id`);if(!t)return this.onerror?.(Error(`Bad Request: Mcp-Session-Id header is required`)),this.createJsonErrorResponse(400,-32e3,`Bad Request: Mcp-Session-Id header is required`);if(t!==this.sessionId)return this.onerror?.(Error(`Session not found`)),this.createJsonErrorResponse(404,-32001,`Session not found`)}validateProtocolVersion(e){let t=e.headers.get(`mcp-protocol-version`);if(t!==null&&!SUPPORTED_PROTOCOL_VERSIONS.includes(t))return this.onerror?.(Error(`Bad Request: Unsupported protocol version: ${t} (supported versions: ${SUPPORTED_PROTOCOL_VERSIONS.join(`, `)})`)),this.createJsonErrorResponse(400,-32e3,`Bad Request: Unsupported protocol version: ${t} (supported versions: ${SUPPORTED_PROTOCOL_VERSIONS.join(`, `)})`)}async close(){this._streamMapping.forEach(({cleanup:e})=>{e()}),this._streamMapping.clear(),this._requestResponseMap.clear(),this.onclose?.()}closeSSEStream(e){let t=this._requestToStreamMapping.get(e);if(!t)return;let s=this._streamMapping.get(t);s&&s.cleanup()}closeStandaloneSSEStream(){let e=this._streamMapping.get(this._standaloneSseStreamId);e&&e.cleanup()}async send(e,t){let s=t?.relatedRequestId;if((isJSONRPCResultResponse(e)||isJSONRPCErrorResponse(e))&&(s=e.id),s===void 0){if(isJSONRPCResultResponse(e)||isJSONRPCErrorResponse(e))throw Error(`Cannot send a response on a standalone SSE stream unless resuming a previous client request`);let t;this._eventStore&&(t=await this._eventStore.storeEvent(this._standaloneSseStreamId,e));let s=this._streamMapping.get(this._standaloneSseStreamId);if(s===void 0)return;s.controller&&s.encoder&&this.writeSSEEvent(s.controller,s.encoder,e,t);return}let g=this._requestToStreamMapping.get(s);if(!g)throw Error(`No connection established for request ID: ${String(s)}`);let S=this._streamMapping.get(g);if(!this._enableJsonResponse&&S?.controller&&S?.encoder){let t;this._eventStore&&(t=await this._eventStore.storeEvent(g,e)),this.writeSSEEvent(S.controller,S.encoder,e,t)}if(isJSONRPCResultResponse(e)||isJSONRPCErrorResponse(e)){this._requestResponseMap.set(s,e);let t=Array.from(this._requestToStreamMapping.entries()).filter(([e,t])=>t===g).map(([e])=>e);if(t.every(e=>this._requestResponseMap.has(e))){if(!S)throw Error(`No connection established for request ID: ${String(s)}`);if(this._enableJsonResponse&&S.resolveJson){let e={"Content-Type":`application/json`};this.sessionId!==void 0&&(e[`mcp-session-id`]=this.sessionId);let s=t.map(e=>this._requestResponseMap.get(e));s.length===1?S.resolveJson(new Response(JSON.stringify(s[0]),{status:200,headers:e})):S.resolveJson(new Response(JSON.stringify(s),{status:200,headers:e}))}else S.cleanup();for(let e of t)this._requestResponseMap.delete(e),this._requestToStreamMapping.delete(e)}}}},StreamableHTTPServerTransport=class{constructor(e={}){this._requestContext=new WeakMap,this._webStandardTransport=new WebStandardStreamableHTTPServerTransport(e),this._requestListener=getRequestListener(async e=>{let t=this._requestContext.get(e);return this._webStandardTransport.handleRequest(e,{authInfo:t?.authInfo,parsedBody:t?.parsedBody})},{overrideGlobalObjects:!1})}get sessionId(){return this._webStandardTransport.sessionId}set onclose(e){this._webStandardTransport.onclose=e}get onclose(){return this._webStandardTransport.onclose}set onerror(e){this._webStandardTransport.onerror=e}get onerror(){return this._webStandardTransport.onerror}set onmessage(e){this._webStandardTransport.onmessage=e}get onmessage(){return this._webStandardTransport.onmessage}async start(){return this._webStandardTransport.start()}async close(){return this._webStandardTransport.close()}async send(e,t){return this._webStandardTransport.send(e,t)}async handleRequest(e,t,s){let g=e.auth;await getRequestListener(async e=>this._webStandardTransport.handleRequest(e,{authInfo:g,parsedBody:s}),{overrideGlobalObjects:!1})(e,t)}closeSSEStream(e){this._webStandardTransport.closeSSEStream(e)}closeStandaloneSSEStream(){this._webStandardTransport.closeStandaloneSSEStream()}},Ye=[{name:`echo`,load:async()=>(await import(`./echo-O45JWWI2-TudodhHR.mjs`)).echoCommand},{name:`cat`,load:async()=>(await import(`./cat-RDUMLXKC-CeNrSElK.mjs`)).catCommand},{name:`printf`,load:async()=>(await import(`./printf-CX64KX2P-Ce--gWAq.mjs`)).printfCommand},{name:`ls`,load:async()=>(await import(`./ls-KSXFZCWH-Bw_Cf-VY.mjs`)).lsCommand},{name:`mkdir`,load:async()=>(await import(`./mkdir-TDEMSB6C-D1oUG8Jf.mjs`)).mkdirCommand},{name:`rmdir`,load:async()=>(await import(`./rmdir-XTQXT7RK-Br7eH9kL.mjs`)).rmdirCommand},{name:`touch`,load:async()=>(await import(`./touch-DX2IJOQ4-KW0Ui-lB.mjs`)).touchCommand},{name:`rm`,load:async()=>(await import(`./rm-RTZG23RL-D9-0WGRY.mjs`)).rmCommand},{name:`cp`,load:async()=>(await import(`./cp-XOYR4ABJ-DmS6dER-.mjs`)).cpCommand},{name:`mv`,load:async()=>(await import(`./mv-Z6MORUFL-CN471qcL.mjs`)).mvCommand},{name:`ln`,load:async()=>(await import(`./ln-4TRFBYAT-4XMTO1OQ.mjs`)).lnCommand},{name:`chmod`,load:async()=>(await import(`./chmod-SYMGL4JA-DFJ4ylQU.mjs`)).chmodCommand},{name:`pwd`,load:async()=>(await import(`./pwd-D4OZ7N27-C18XewhV.mjs`)).pwdCommand},{name:`readlink`,load:async()=>(await import(`./readlink-MI4GCHJF-CHvs7DDT.mjs`)).readlinkCommand},{name:`head`,load:async()=>(await import(`./head-HT2B6D2J-BR4RHRTk.mjs`)).headCommand},{name:`tail`,load:async()=>(await import(`./tail-S5ULNTJU-0-sYrYik.mjs`)).tailCommand},{name:`wc`,load:async()=>(await import(`./wc-TQB3VNOX-BzWNq0MY.mjs`)).wcCommand},{name:`stat`,load:async()=>(await import(`./stat-BT5A227F-Dzp4sgau.mjs`)).statCommand},{name:`grep`,load:async()=>(await import(`./grep-3AIAIJVR-DgQJLmW0.mjs`)).grepCommand},{name:`fgrep`,load:async()=>(await import(`./grep-3AIAIJVR-DgQJLmW0.mjs`)).fgrepCommand},{name:`egrep`,load:async()=>(await import(`./grep-3AIAIJVR-DgQJLmW0.mjs`)).egrepCommand},{name:`rg`,load:async()=>(await import(`./rg-FOQSCCX3-BJahNfSe.mjs`)).rgCommand},{name:`sed`,load:async()=>(await import(`./sed-VFTTATXJ-mYhAmixc.mjs`)).sedCommand},{name:`awk`,load:async()=>(await import(`./awk2-POPGKRAI-DDrFV-7v.mjs`)).awkCommand2},{name:`sort`,load:async()=>(await import(`./sort-DCNRDA7U-DDCY4JZu.mjs`)).sortCommand},{name:`uniq`,load:async()=>(await import(`./uniq-SUNANL47-Ceg51JdA.mjs`)).uniqCommand},{name:`comm`,load:async()=>(await import(`./comm-5SLSESQG-C2GatHU6.mjs`)).commCommand},{name:`cut`,load:async()=>(await import(`./cut-OPC3VAGB-s4tQWhL5.mjs`)).cutCommand},{name:`paste`,load:async()=>(await import(`./paste-7N6AFSDS-bUl2Dwz3.mjs`)).pasteCommand},{name:`tr`,load:async()=>(await import(`./tr-2HXZRDSW-C6Kf0M8T.mjs`)).trCommand},{name:`rev`,load:async()=>(await import(`./rev-XOSYPP45-2mnFFZWW.mjs`)).rev},{name:`nl`,load:async()=>(await import(`./nl-U5YJDM32-CFzXKze3.mjs`)).nl},{name:`fold`,load:async()=>(await import(`./fold-LDSORVYE-CfKQmrJ1.mjs`)).fold},{name:`expand`,load:async()=>(await import(`./expand-DTNXU4LQ-BT6M2Tdc.mjs`)).expand},{name:`unexpand`,load:async()=>(await import(`./unexpand-RGTMIGZM-DZ4Kf6Xq.mjs`)).unexpand},{name:`strings`,load:async()=>(await import(`./strings-7PLOGTPD-DT41jX9d.mjs`)).strings},{name:`split`,load:async()=>(await import(`./split-SITCSYCZ-b9hfEJw7.mjs`)).split},{name:`column`,load:async()=>(await import(`./column-WLPMMSTS-6o4DDsDk.mjs`)).column},{name:`join`,load:async()=>(await import(`./join-GG2LDHE5-xeTE0Mi4.mjs`)).join},{name:`tee`,load:async()=>(await import(`./tee-O7VXZDCO-CwnGG0go.mjs`)).teeCommand},{name:`find`,load:async()=>(await import(`./find-TPUOAIUQ-RFxkUcGN.mjs`)).findCommand},{name:`basename`,load:async()=>(await import(`./basename-AA2KJYZQ-BK5zVs3W.mjs`)).basenameCommand},{name:`dirname`,load:async()=>(await import(`./dirname-LEMTZZFS-B477CImE.mjs`)).dirnameCommand},{name:`tree`,load:async()=>(await import(`./tree-LYXBS7DC-BN1FBqvM.mjs`)).treeCommand},{name:`du`,load:async()=>(await import(`./du-WO2ENHXQ-C4c5wweW.mjs`)).duCommand},{name:`env`,load:async()=>(await import(`./env-5EPCWSXR-CTcNEMpy.mjs`)).envCommand},{name:`printenv`,load:async()=>(await import(`./env-5EPCWSXR-CTcNEMpy.mjs`)).printenvCommand},{name:`alias`,load:async()=>(await import(`./alias-JE7RI5QX-Bia4gLMF.mjs`)).aliasCommand},{name:`unalias`,load:async()=>(await import(`./alias-JE7RI5QX-Bia4gLMF.mjs`)).unaliasCommand},{name:`history`,load:async()=>(await import(`./history-J4QRNGRO-C1r7-kvT.mjs`)).historyCommand},{name:`xargs`,load:async()=>(await import(`./xargs-I6EZUCYF-Cov-i7kW.mjs`)).xargsCommand},{name:`true`,load:async()=>(await import(`./true-WHJNXCHG-DxCMVdqj.mjs`)).trueCommand},{name:`false`,load:async()=>(await import(`./true-WHJNXCHG-DxCMVdqj.mjs`)).falseCommand},{name:`clear`,load:async()=>(await import(`./clear-5CZ5X4YR-CadVxKrq.mjs`)).clearCommand},{name:`bash`,load:async()=>(await import(`./bash-IJWYRKFO-B9r1a0X9.mjs`)).bashCommand},{name:`sh`,load:async()=>(await import(`./bash-IJWYRKFO-B9r1a0X9.mjs`)).shCommand},{name:`jq`,load:async()=>(await import(`./jq-ODXZBPLY-C5v6qNu_.mjs`)).jqCommand},{name:`base64`,load:async()=>(await import(`./base64-4YMZCVJ5-DDKKOjMm.mjs`)).base64Command},{name:`diff`,load:async()=>(await import(`./diff-HJF2MPDN-DjGBLQph.mjs`)).diffCommand},{name:`date`,load:async()=>(await import(`./date-DD7FVA2V-Dubgjr6a.mjs`)).dateCommand},{name:`sleep`,load:async()=>(await import(`./sleep-VZFPZFWA-B1fSoYuO.mjs`)).sleepCommand},{name:`timeout`,load:async()=>(await import(`./timeout-VRKMCG72-BtPBpIRq.mjs`)).timeoutCommand},{name:`time`,load:async()=>(await import(`./time-DEUO3QV2-DzkqaQ1k.mjs`)).timeCommand},{name:`seq`,load:async()=>(await import(`./seq-RN5ZUASB-CKf5MNNO.mjs`)).seqCommand},{name:`expr`,load:async()=>(await import(`./expr-5T3UU5KE-D2Kr5nuJ.mjs`)).exprCommand},{name:`md5sum`,load:async()=>(await import(`./md5sum-INMIK4DX-CAIH4ZVI.mjs`)).md5sumCommand},{name:`sha1sum`,load:async()=>(await import(`./sha1sum-VJPNLNU6-DuOHap1X.mjs`)).sha1sumCommand},{name:`sha256sum`,load:async()=>(await import(`./sha256sum-PI32XWXY-D9fEipQ7.mjs`)).sha256sumCommand},{name:`file`,load:async()=>(await import(`./file-ZIGAJ4YS-BH3jYcuM.mjs`)).fileCommand},{name:`html-to-markdown`,load:async()=>(await import(`./html-to-markdown-TFCECAGV-B9oYuMVf.mjs`)).htmlToMarkdownCommand},{name:`help`,load:async()=>(await import(`./help-VVWX7SA5-M6C6klSC.mjs`)).helpCommand},{name:`which`,load:async()=>(await import(`./which-XZHEH76L-DH_U2-Cj.mjs`)).whichCommand},{name:`tac`,load:async()=>(await import(`./tac-SJGXQ4T2-BpdVoP8b.mjs`)).tac},{name:`hostname`,load:async()=>(await import(`./hostname-BK6HG2DE-BBBcRrtV.mjs`)).hostname},{name:`whoami`,load:async()=>(await import(`./whoami-DGKU3D2X-BholYNPM.mjs`)).whoami},{name:`od`,load:async()=>(await import(`./od-VJEF2UR5-C2R4Accu.mjs`)).od},{name:`gzip`,load:async()=>(await import(`./gzip-AQXSGOVS-yXjpnIVd.mjs`)).gzipCommand},{name:`gunzip`,load:async()=>(await import(`./gzip-AQXSGOVS-yXjpnIVd.mjs`)).gunzipCommand},{name:`zcat`,load:async()=>(await import(`./gzip-AQXSGOVS-yXjpnIVd.mjs`)).zcatCommand}];(typeof __BROWSER__>`u`||!__BROWSER__)&&(Ye.push({name:`tar`,load:async()=>(await import(`./tar-ANUBEFJY-Wh3na_NU.mjs`)).tarCommand}),Ye.push({name:`yq`,load:async()=>(await import(`./yq-MJMAR36V-1r29nH4p.mjs`)).yqCommand}),Ye.push({name:`xan`,load:async()=>(await import(`./xan-BXDXYEIB-b1eAtgch.mjs`)).xanCommand}),Ye.push({name:`sqlite3`,load:async()=>(await import(`./sqlite3-56UMWEY3-BQEx5i3P.mjs`)).sqlite3Command}));var Zt=[];(typeof __BROWSER__>`u`||!__BROWSER__)&&(Zt.push({name:`python3`,load:async()=>(await import(`./python3-AUFTPCU6-BaJugIdp.mjs`)).python3Command}),Zt.push({name:`python`,load:async()=>(await import(`./python3-AUFTPCU6-BaJugIdp.mjs`)).pythonCommand}));var qt=[];(typeof __BROWSER__>`u`||!__BROWSER__)&&(qt.push({name:`js-exec`,load:async()=>(await import(`./js-exec-M6UR76J5-IyD-lpzv.mjs`)).jsExecCommand}),qt.push({name:`node`,load:async()=>(await import(`./js-exec-M6UR76J5-IyD-lpzv.mjs`)).nodeStubCommand}));var sn=[{name:`curl`,load:async()=>(await import(`./curl-47BFPSFW-C2kRcGkX.mjs`)).curlCommand}],tn=new Map;function Gt(e){return{name:e.name,async execute(t,s){let g=tn.get(e.name);if(g||(g=await _$1.runTrustedAsync(()=>e.load()),tn.set(e.name,g)),s.coverage&&(typeof __BROWSER__>`u`||!__BROWSER__)){let{emitFlagCoverage:g}=await import(`./flag-coverage-QT4N2Z44--nNG-HLV.mjs`);g(s.coverage,e.name,t)}return g.execute(t,s)}}}function rn(e){return(e?Ye.filter(t=>e.includes(t.name)):Ye).map(Gt)}function nn(){return sn.map(Gt)}function on(){return Zt.map(Gt)}function an(){return qt.map(Gt)}function ln(e){return`load`in e&&typeof e.load==`function`}function cn(e){let t=null;return{name:e.name,trusted:!0,async execute(s,g){return t||=await e.load(),t.execute(s,g)}}}var ot=new TextEncoder;function Qi(e){return typeof e==`object`&&!!e&&!(e instanceof Uint8Array)&&`content`in e}var Le=class{data=new Map;constructor(e){if(this.data.set(`/`,{type:`directory`,mode:493,mtime:new Date}),e)for(let[t,s]of Object.entries(e))typeof s==`function`?this.writeFileLazy(t,s):Qi(s)?this.writeFileSync(t,s.content,void 0,{mode:s.mode,mtime:s.mtime}):this.writeFileSync(t,s)}ensureParentDirs(e){let t=m$1(e);t!==`/`&&(this.data.has(t)||(this.ensureParentDirs(t),this.data.set(t,{type:`directory`,mode:493,mtime:new Date})))}writeFileSync(e,t,s,g){h$1(e,`write`);let S=c$1(e);this.ensureParentDirs(S);let w=o(t,l$1(s));this.data.set(S,{type:`file`,content:w,mode:g?.mode??420,mtime:g?.mtime??new Date})}writeFileLazy(e,t,s){h$1(e,`write`);let g=c$1(e);this.ensureParentDirs(g),this.data.set(g,{type:`file`,lazy:t,mode:s?.mode??420,mtime:s?.mtime??new Date})}async materializeLazy(e,t){let s=await t.lazy(),g={type:`file`,content:typeof s==`string`?ot.encode(s):s,mode:t.mode,mtime:t.mtime};return this.data.set(e,g),g}async readFile(e,t){return h$2(await this.readFileBuffer(e),l$1(t))}async readFileBuffer(e){h$1(e,`open`);let t=this.resolvePathWithSymlinks(e),s=this.data.get(t);if(!s)throw Error(`ENOENT: no such file or directory, open '${e}'`);if(s.type!==`file`)throw Error(`EISDIR: illegal operation on a directory, read '${e}'`);if(`lazy`in s){let e=await this.materializeLazy(t,s);return e.content instanceof Uint8Array?e.content:ot.encode(e.content)}return s.content instanceof Uint8Array?s.content:ot.encode(s.content)}async writeFile(e,t,s){this.writeFileSync(e,t,s)}async appendFile(e,t,s){h$1(e,`append`);let g=c$1(e),S=this.data.get(g);if(S&&S.type===`directory`)throw Error(`EISDIR: illegal operation on a directory, write '${e}'`);let w=o(t,l$1(s));if(S?.type===`file`){let e=S;`lazy`in e&&(e=await this.materializeLazy(g,e));let t=`content`in e&&e.content instanceof Uint8Array?e.content:ot.encode(`content`in e?e.content:``),s=new Uint8Array(t.length+w.length);s.set(t),s.set(w,t.length),this.data.set(g,{type:`file`,content:s,mode:e.mode,mtime:new Date})}else this.writeFileSync(e,t,s)}async exists(e){if(e.includes(`\0`))return!1;try{let t=this.resolvePathWithSymlinks(e);return this.data.has(t)}catch{return!1}}async stat(e){h$1(e,`stat`);let t=this.resolvePathWithSymlinks(e),s=this.data.get(t);if(!s)throw Error(`ENOENT: no such file or directory, stat '${e}'`);s.type===`file`&&`lazy`in s&&(s=await this.materializeLazy(t,s));let g=0;return s.type===`file`&&`content`in s&&s.content&&(g=s.content instanceof Uint8Array?s.content.length:ot.encode(s.content).length),{isFile:s.type===`file`,isDirectory:s.type===`directory`,isSymbolicLink:!1,mode:s.mode,size:g,mtime:s.mtime||new Date}}async lstat(e){h$1(e,`lstat`);let t=this.resolveIntermediateSymlinks(e),s=this.data.get(t);if(!s)throw Error(`ENOENT: no such file or directory, lstat '${e}'`);if(s.type===`symlink`)return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:s.mode,size:s.target.length,mtime:s.mtime||new Date};s.type===`file`&&`lazy`in s&&(s=await this.materializeLazy(t,s));let g=0;return s.type===`file`&&`content`in s&&s.content&&(g=s.content instanceof Uint8Array?s.content.length:ot.encode(s.content).length),{isFile:s.type===`file`,isDirectory:s.type===`directory`,isSymbolicLink:!1,mode:s.mode,size:g,mtime:s.mtime||new Date}}resolveIntermediateSymlinks(e){let t=c$1(e);if(t===`/`)return`/`;let s=t.slice(1).split(`/`);if(s.length<=1)return t;let g=``,S=new Set;for(let t=0;t<s.length-1;t++){let w=s[t];g=`${g}/${w}`;let E=this.data.get(g),D=0,O=40;for(;E&&E.type===`symlink`&&D<40;){if(S.has(g))throw Error(`ELOOP: too many levels of symbolic links, lstat '${e}'`);S.add(g),g=v$1(g,E.target),E=this.data.get(g),D++}if(D>=40)throw Error(`ELOOP: too many levels of symbolic links, lstat '${e}'`)}return`${g}/${s[s.length-1]}`}resolvePathWithSymlinks(e){let t=c$1(e);if(t===`/`)return`/`;let s=t.slice(1).split(`/`),g=``,S=new Set;for(let t of s){g=`${g}/${t}`;let s=this.data.get(g),w=0,E=40;for(;s&&s.type===`symlink`&&w<40;){if(S.has(g))throw Error(`ELOOP: too many levels of symbolic links, open '${e}'`);S.add(g),g=v$1(g,s.target),s=this.data.get(g),w++}if(w>=40)throw Error(`ELOOP: too many levels of symbolic links, open '${e}'`)}return g}async mkdir(e,t){this.mkdirSync(e,t)}mkdirSync(e,t){h$1(e,`mkdir`);let s=c$1(e);if(this.data.has(s)){if(this.data.get(s)?.type===`file`)throw Error(`EEXIST: file already exists, mkdir '${e}'`);if(!t?.recursive)throw Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let g=m$1(s);if(g!==`/`&&!this.data.has(g))if(t?.recursive)this.mkdirSync(g,{recursive:!0});else throw Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.data.set(s,{type:`directory`,mode:493,mtime:new Date})}async readdir(e){return(await this.readdirWithFileTypes(e)).map(e=>e.name)}async readdirWithFileTypes(e){h$1(e,`scandir`);let t=c$1(e),s=this.data.get(t);if(!s)throw Error(`ENOENT: no such file or directory, scandir '${e}'`);let g=new Set;for(;s&&s.type===`symlink`;){if(g.has(t))throw Error(`ELOOP: too many levels of symbolic links, scandir '${e}'`);g.add(t),t=v$1(t,s.target),s=this.data.get(t)}if(!s)throw Error(`ENOENT: no such file or directory, scandir '${e}'`);if(s.type!==`directory`)throw Error(`ENOTDIR: not a directory, scandir '${e}'`);let S=t===`/`?`/`:`${t}/`,w=new Map;for(let[e,s]of this.data.entries())if(e!==t&&e.startsWith(S)){let t=e.slice(S.length),g=t.split(`/`)[0];g&&!t.includes(`/`,g.length)&&!w.has(g)&&w.set(g,{name:g,isFile:s.type===`file`,isDirectory:s.type===`directory`,isSymbolicLink:s.type===`symlink`})}return Array.from(w.values()).sort((e,t)=>e.name<t.name?-1:e.name>t.name?1:0)}async rm(e,t){h$1(e,`rm`);let s=c$1(e),g=this.data.get(s);if(!g){if(t?.force)return;throw Error(`ENOENT: no such file or directory, rm '${e}'`)}if(g.type===`directory`){let g=await this.readdir(s);if(g.length>0){if(!t?.recursive)throw Error(`ENOTEMPTY: directory not empty, rm '${e}'`);for(let e of g){let g=p$1(s,e);await this.rm(g,t)}}}this.data.delete(s)}async cp(e,t,s){h$1(e,`cp`),h$1(t,`cp`);let g=c$1(e),S=c$1(t),w=this.data.get(g);if(!w)throw Error(`ENOENT: no such file or directory, cp '${e}'`);if(w.type===`file`)if(this.ensureParentDirs(S),`content`in w){let e=w.content instanceof Uint8Array?new Uint8Array(w.content):w.content;this.data.set(S,{...w,content:e})}else this.data.set(S,{...w});else if(w.type===`symlink`)this.ensureParentDirs(S),this.data.set(S,{...w});else if(w.type===`directory`){if(!s?.recursive)throw Error(`EISDIR: is a directory, cp '${e}'`);await this.mkdir(S,{recursive:!0});let t=await this.readdir(g);for(let e of t){let t=p$1(g,e),w=p$1(S,e);await this.cp(t,w,s)}}}async mv(e,t){await this.cp(e,t,{recursive:!0}),await this.rm(e,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(e,t){return y(e,t)}async chmod(e,t){h$1(e,`chmod`);let s=c$1(e),g=this.data.get(s);if(!g)throw Error(`ENOENT: no such file or directory, chmod '${e}'`);g.mode=t}async symlink(e,t){h$1(t,`symlink`);let s=c$1(t);if(this.data.has(s))throw Error(`EEXIST: file already exists, symlink '${t}'`);this.ensureParentDirs(s),this.data.set(s,{type:`symlink`,target:e,mode:511,mtime:new Date})}async link(e,t){h$1(e,`link`),h$1(t,`link`);let s=c$1(e),g=c$1(t),S=this.data.get(s);if(!S)throw Error(`ENOENT: no such file or directory, link '${e}'`);if(S.type!==`file`)throw Error(`EPERM: operation not permitted, link '${e}'`);if(this.data.has(g))throw Error(`EEXIST: file already exists, link '${t}'`);let w=S;`lazy`in w&&(w=await this.materializeLazy(s,w)),this.ensureParentDirs(g),this.data.set(g,{type:`file`,content:w.content,mode:w.mode,mtime:w.mtime})}async readlink(e){h$1(e,`readlink`);let t=c$1(e),s=this.data.get(t);if(!s)throw Error(`ENOENT: no such file or directory, readlink '${e}'`);if(s.type!==`symlink`)throw Error(`EINVAL: invalid argument, readlink '${e}'`);return s.target}async realpath(e){h$1(e,`realpath`);let t=this.resolvePathWithSymlinks(e);if(!this.data.has(t))throw Error(`ENOENT: no such file or directory, realpath '${e}'`);return t}async utimes(e,t,s){h$1(e,`utimes`);let g=c$1(e),S=this.resolvePathWithSymlinks(g),w=this.data.get(S);if(!w)throw Error(`ENOENT: no such file or directory, utimes '${e}'`);w.mtime=s}};function Ji(e){let t=e;return typeof t.mkdirSync==`function`&&typeof t.writeFileSync==`function`}function eo(e,t){e.mkdirSync(`/bin`,{recursive:!0}),e.mkdirSync(`/usr/bin`,{recursive:!0}),t&&(e.mkdirSync(`/home/user`,{recursive:!0}),e.mkdirSync(`/tmp`,{recursive:!0}))}function to(e){e.mkdirSync(`/dev`,{recursive:!0}),e.writeFileSync(`/dev/null`,``),e.writeFileSync(`/dev/zero`,new Uint8Array),e.writeFileSync(`/dev/stdin`,``),e.writeFileSync(`/dev/stdout`,``),e.writeFileSync(`/dev/stderr`,``)}function so(e,t){e.mkdirSync(`/proc/self/fd`,{recursive:!0}),e.writeFileSync(`/proc/version`,`${xi$1}
57
57
  `),e.writeFileSync(`/proc/self/exe`,`/bin/bash`),e.writeFileSync(`/proc/self/cmdline`,`bash\0`),e.writeFileSync(`/proc/self/comm`,`bash
58
58
  `),e.writeFileLazy?e.writeFileLazy(`/proc/self/status`,()=>_i$1(t)):e.writeFileSync(`/proc/self/status`,_i$1(t)),e.writeFileSync(`/proc/self/fd/0`,`/dev/stdin`),e.writeFileSync(`/proc/self/fd/1`,`/dev/stdout`),e.writeFileSync(`/proc/self/fd/2`,`/dev/stderr`)}function un(e,t,s={pid:1,ppid:0,uid:1e3,gid:1e3}){Ji(e)&&(eo(e,t),to(e),so(e,s))}var ro=[`allexport`,`errexit`,`noglob`,`noclobber`,`noexec`,`nounset`,`pipefail`,`posix`,`verbose`,`xtrace`],no=[`braceexpand`,`hashall`,`interactive-comments`];function Ls(e){let t=[],s=[...no.map(e=>({name:e,enabled:!0})),...ro.map(t=>({name:t,enabled:e[t]}))].sort((e,t)=>e.name.localeCompare(t.name));for(let e of s)e.enabled&&t.push(e.name);return t.join(`:`)}function lt(e){e.state.env.set(`SHELLOPTS`,Ls(e.state.options))}var io=[`dotglob`,`expand_aliases`,`extglob`,`failglob`,`globskipdots`,`globstar`,`lastpipe`,`nocaseglob`,`nocasematch`,`nullglob`,`xpg_echo`];function Fs(e){let t=[];for(let s of io)e[s]&&t.push(s);return t.join(`:`)}function Ms(e){e.state.env.set(`BASHOPTS`,Fs(e.state.shoptOptions))}var oo=`BASH_ALIAS_`;function fn(e){return e.parts.length===1?e.parts[0].type===`Literal`:!1}function dn(e){if(e.parts.length!==1)return null;let t=e.parts[0];return t.type===`Literal`?t.value:null}function hn(e,t){return e.env.get(`${oo}${t}`)}function Ws(e,t,s){if(!t.name||!fn(t.name))return t;let g=dn(t.name);if(!g)return t;let S=hn(e,g);if(!S||s.has(g))return t;try{s.add(g);let w=new V,E=S,D=S.endsWith(` `);if(!D)for(let e of t.args){let t=mn(e);E+=` ${t}`}let O;try{O=w.parse(E)}catch(e){if(e instanceof G$1)throw e;return t}if(O.statements.length!==1||O.statements[0].pipelines.length!==1||O.statements[0].pipelines[0].commands.length!==1)return pn(t,S);let k=O.statements[0].pipelines[0].commands[0];if(k.type!==`SimpleCommand`)return pn(t,S);let j={...k,assignments:[...t.assignments,...k.assignments],redirections:[...k.redirections,...t.redirections],line:t.line};if(D&&t.args.length>0&&(j={...j,args:[...j.args,...t.args]},j.args.length>0)){let t=j.args[0];if(fn(t)){let g=dn(t);if(g&&hn(e,g)){let g={type:`SimpleCommand`,name:t,args:j.args.slice(1),assignments:[],redirections:[]},S=Ws(e,g,s);S!==g&&(j={...j,name:S.name,args:[...S.args]})}}}return j}catch(e){throw s.delete(g),e}}function pn(e,t){let s=t;for(let t of e.args){let e=mn(t);s+=` ${e}`}let g=new V;return{type:`SimpleCommand`,name:g.parseWordFromString(`eval`,!1,!1),args:[g.parseWordFromString(`'${s.replace(/'/g,`'\\''`)}'`,!1,!1)],assignments:e.assignments,redirections:e.redirections,line:e.line}}function mn(e){let t=``;for(let s of e.parts)switch(s.type){case`Literal`:t+=s.value.replace(/([\s"'$`\\*?[\]{}()<>|&;#!])/g,`\\$1`);break;case`SingleQuoted`:t+=`'${s.value}'`;break;case`DoubleQuoted`:t+=`"${s.parts.map(e=>e.type===`Literal`?e.value:`$${e.type}`).join(``)}"`;break;case`ParameterExpansion`:t+=`\${${s.parameter}}`;break;case`CommandSubstitution`:t+=`$(...)`;break;case`ArithmeticExpansion`:t+=`$((${s.expression}))`;break;case`Glob`:t+=s.pattern;break;default:break}return t}async function yn(e,t){let s=t.parts.map(e=>e.type===`Literal`?e.value:`\0`).join(``),g=s.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);if(!g||!s.endsWith(`)`))return null;let S=g[1],w=[],E=!1,D=``,O=!1;for(let s of t.parts)if(s.type===`Literal`){let e=s.value;if(!E){let t=e.indexOf(`=(`);t!==-1&&(E=!0,e=e.slice(t+2))}if(E){e.endsWith(`)`)&&(e=e.slice(0,-1));let t=e.split(/(\s+)/);for(let e of t)/^\s+$/.test(e)?(D||O)&&(w.push(D),D=``,O=!1):e&&(D+=e)}}else if(E)if(s.type===`BraceExpansion`)if(/^\[.+\]=/.test(D))D+=En$1({type:`Word`,parts:[s]});else{(D||O)&&(w.push(D),D=``,O=!1);let t=await wl(e,{type:`Word`,parts:[s]});w.push(...t.values)}else{(s.type===`SingleQuoted`||s.type===`DoubleQuoted`||s.type===`Escaped`)&&(O=!0);let t=await Pt$1(e,{type:`Word`,parts:[s]});D+=t}return(D||O)&&w.push(D),`${S}=(${w.map(e=>/^\[.+\]=/.test(e)?e:e===``?`''`:/[\s"'\\$`!*?[\]{}|&;<>()]/.test(e)&&!e.startsWith(`'`)&&!e.startsWith(`"`)?`'${e.replace(/'/g,`'\\''`)}'`:e).join(` `)})`}async function gn(e,t){let s=-1,g=-1,S=!1;for(let e=0;e<t.parts.length;e++){let w=t.parts[e];if(w.type===`Literal`){let t=w.value.indexOf(`+=`);if(t!==-1){let E=w.value.slice(0,t);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(E)){s=e,g=t,S=!0;break}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(E)){s=e,g=t,S=!0;break}}let E=w.value.indexOf(`=`);if(E!==-1&&(E===0||w.value[E-1]!==`+`)){let t=w.value.slice(0,E);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)||/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(t)){s=e,g=E;break}}}}if(s===-1)return null;let w=t.parts.slice(0,s),E=t.parts[s];if(E.type!==`Literal`)return null;let D=S?2:1,O=E.value.slice(0,g),k=E.value.slice(g+D),j=t.parts.slice(s+1),F=``;for(let t of w)F+=await Pt$1(e,{type:`Word`,parts:[t]});F+=O;let L={type:`Word`,parts:k===``?j:[{type:`Literal`,value:k},...j]},B=L.parts.length>0?await Pt$1(e,L):``;return`${F}${S?`+=`:`=`}${B}`}var ao=[`tar`,`yq`,`xan`,`sqlite3`,`python3`,`python`];function wn(e){return ao.includes(e)}var W=Object.freeze({stdout:``,stderr:``,exitCode:0});function z(e=``){return{stdout:e,stderr:``,exitCode:0}}function A(e,t=1){return{stdout:``,stderr:e,exitCode:t}}function _(e,t,s){return{stdout:e,stderr:t,exitCode:s}}function Q(e){return{stdout:``,stderr:``,exitCode:e?0:1}}function Ne(e,t,s=``,g=``){throw new b(e,t,s,g)}function le(e){let t=e.state.fileDescriptors;if(t&&t.size>=e.limits.maxFileDescriptors)throw new b(`too many open file descriptors (max ${e.limits.maxFileDescriptors})`,`file_descriptors`)}function zs(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new f;return W}if(t.length>1)throw new d(1,``,`bash: break: too many arguments
@@ -769,9 +769,9 @@ ${e.terminator}`}function Qa(e){return`(${Ee(e.body)})${ke(e.redirections)}`}fun
769
769
  `)),S.removeListener(`error`,te),B.setSocket(S,O,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(B),B.on(`close`,()=>{this.clients.delete(B),this._shouldEmitClose&&!this.clients.size&&process.nextTick(ee,this)})),k(B,g)}};function Y(e,t){for(let s of Object.keys(t))e.on(s,t[s]);return function(){for(let s of Object.keys(t))e.removeListener(s,t[s])}}function ee(e){e._state=2,e.emit(`close`)}function te(){this.destroy()}function ne(e,t,s,S){s||=g.STATUS_CODES[t],S={Connection:`close`,"Content-Type":`text/html`,"Content-Length":Buffer.byteLength(s),...S},e.once(`finish`,e.destroy),e.end(`HTTP/1.1 ${t} ${g.STATUS_CODES[t]}\r\n`+Object.keys(S).map(e=>`${e}: ${S[e]}`).join(`\r
770
770
  `)+`\r
771
771
  \r
772
- `+s)}function ae(e,t,s,g,S,w){if(e.listenerCount(`wsClientError`)){let g=Error(S);Error.captureStackTrace(g,ae),e.emit(`wsClientError`,g,s,t)}else ne(s,g,S,w)}}));require_stream(),require_receiver(),require_sender(),require_websocket();var import_websocket_server=__toESM(require_websocket_server(),1);init_esm$2();var import_pino=__toESM$1(require_pino(),1),import_pino_pretty=__toESM$1(require_pino_pretty(),1),import_src=require_src$14(),import_src$1=require_src$13(),import_src$2=require_src$4(),import_src$3=require_src$3(),import_src$4=require_src$2(),import_src$5=require_src$1(),import_src$6=require_src();init_esm$1();var import_lib=__toESM$1(require_lib(),1),import_yazl=__toESM$1(require_yazl(),1),import_shell_quote=__toESM$1(require_shell_quote(),1),import_ignore=__toESM$1(require_ignore(),1);const MAX_LEN=128;function sanitizeGitIdentity(e){return e.replace(/[<>\r\n]/g,``).trim().slice(0,MAX_LEN)}const AGENT_ID_RE=/^[a-zA-Z0-9_-]+$/,AGENT_ID_MAX_LEN=64;function validateAgentId(e){return typeof e!=`string`||e.length===0||e.length>64||!AGENT_ID_RE.test(e)?null:e}function toBroadcasterKey(e){return e.startsWith(`agent-`)?e:`agent-${e}`}function isPresenceEligibleAgentId(e){return!e.startsWith(`principal-`)}function resolveAgentType(e){if(!e)return`bot`;let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`cursor`)?`cursor`:t.includes(`codex`)?`codex`:t.includes(`cline`)?`cline`:t.includes(`windsurf`)?`windsurf`:`bot`}function parseAgentBodyFields(e){let t=validateAgentId(typeof e.agentId==`string`?e.agentId:null)??void 0;return{rawAgentId:t,writerId:t===void 0?void 0:toBroadcasterKey(t),displayName:typeof e.agentName==`string`?sanitizeGitIdentity(e.agentName):`Claude`,clientName:typeof e.clientName==`string`?sanitizeGitIdentity(e.clientName):void 0,clientVersion:typeof e.clientVersion==`string`?sanitizeGitIdentity(e.clientVersion):void 0,label:typeof e.label==`string`?sanitizeGitIdentity(e.label):void 0,colorSeed:typeof e.colorSeed==`string`&&e.colorSeed.length>0?e.colorSeed.slice(0,128):void 0}}function otelMixin(){let e=trace.getSpan(context.active());if(!e)return{};let t=e.spanContext();return{trace_id:t.traceId,span_id:t.spanId,trace_flags:t.traceFlags}}function shouldColorize(){return process.env.NO_COLOR&&process.env.NO_COLOR!==``?!1:process.stdout.isTTY??!1}var PinoLogger=class{name;transportConfigs=[];pinoInstance;options;constructor(e,t={}){this.name=e,this.options={name:this.name,level:process.env.LOG_LEVEL||(process.env.NODE_ENV===`test`?`silent`:`info`),serializers:{err:import_pino.default.stdSerializers.err,error:import_pino.default.stdSerializers.err},mixin:otelMixin,...t.options},t.transportConfigs&&(this.transportConfigs=t.transportConfigs),this.pinoInstance=this.buildInstance()}buildInstance(){if(this.transportConfigs.length>0)return(0,import_pino.default)(this.options,import_pino.default.transport({targets:this.transportConfigs}));try{let e=(0,import_pino_pretty.default)({colorize:shouldColorize(),translateTime:`HH:MM:ss`,ignore:`pid,hostname`});return(0,import_pino.default)(this.options,e)}catch(e){return console.warn(`[PinoLogger] pino-pretty failed, falling back to JSON:`,e),(0,import_pino.default)(this.options)}}recreateInstance(){typeof this.pinoInstance.flush==`function`&&this.pinoInstance.flush(),this.pinoInstance=this.buildInstance()}addTransport(e){this.transportConfigs.push(e),this.recreateInstance()}removeTransport(e){e>=0&&e<this.transportConfigs.length&&(this.transportConfigs.splice(e,1),this.recreateInstance())}getTransports(){return[...this.transportConfigs]}updateOptions(e){this.options={...this.options,...e},this.recreateInstance()}getPinoInstance(){return this.pinoInstance}error(e,t){this.pinoInstance.error(e,t)}warn(e,t){this.pinoInstance.warn(e,t)}info(e,t){this.pinoInstance.info(e,t)}debug(e,t){this.pinoInstance.debug(e,t)}},LoggerFactory=class{config={};loggers=new Map;configure(e){this.config=e,this.loggers.clear()}getLogger(e){let t=this.loggers.get(e);if(t)return t;let s;return s=this.config.loggerFactory?this.config.loggerFactory(e):this.config.defaultLogger?this.config.defaultLogger:new PinoLogger(e,this.config.pinoConfig),this.loggers.set(e,s),s}reset(){this.config={},this.loggers.clear()}};const loggerFactory=new LoggerFactory;function getLogger(e){return loggerFactory.getLogger(e)}function createTestLogger(e=`test`){return new PinoLogger(e,{options:{level:`silent`}})}function installTestLoggers(){loggerFactory.configure({pinoConfig:{options:{level:`silent`}}})}var AgentFocusBroadcaster=class{hocuspocus;log=getLogger(`agent-focus`);warnedMissing=!1;constructor(e){this.hocuspocus=e}setFocus(e,t){isPresenceEligibleAgentId(e)&&this.mutateAgentFocus(s=>({...s,[e]:t}))}clearFocus(e){isPresenceEligibleAgentId(e)&&this.mutateAgentFocus(t=>{if(!(e in t))return t;let{[e]:s,...g}=t;return g})}getFocusMap(){let e=this.resolveAwareness();return e?e.getLocalState()?.agentFocus??{}:{}}mutateAgentFocus(e){let t=this.resolveAwareness();if(t)try{let s=t.getLocalState()??{},g=e(s.agentFocus??{});t.setLocalState({...s,agentFocus:g})}catch(e){this.log.error({err:e},`[agent-focus] awareness mutation failed`)}}resolveAwareness(){let e=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);return e?(this.warnedMissing&&=(this.log.info({},`[agent-focus] __system__ document now available — resuming focus updates`),!1),getAwareness$1(e)):(this.warnedMissing||=(this.log.warn({},`[agent-focus] __system__ document not found — focus updates will be dropped until it is materialized`),!0),null)}};function getAwareness$1(e){return e?.awareness??null}const counters$1={reconcileCount:0,conflictCount:0,batchCount:0,upstreamImportCount:0,rescueBufferCount:0,branchSwitchCount:0,parkCount:0,gitAutoSaveFailureCount:0,gitWriterCommitFailureCount:0,cc1BroadcastCount:0,cc1BroadcastDropCount:0,cc1SubscriberCount:0,cc1LastSeq:{},serverObserverFiresA:0,serverObserverFiresB:0,serverObserverErrorsA:0,serverObserverErrorsB:0,persistenceDiskWrites:0,bridgeMergeContentLoss:0,bridgeMergeCheckpointCreated:0,bridgeInvariantViolations:0,bridgeInvariantViolationsSuppressed:0,persistenceSkipNonQuiescent:0,persistenceForceFlushDuringBurst:0,collabSocketEpipeCount:0,collabSocketEconnresetCount:0,collabMessageTooLargeCount:0,shadowMigrationLegacyRefsDeleted:0,effectDiffCaptureFailures:0,agentPresenceMutationErrors:0,agentWriteCalls:0,summariesProvided:0,summariesTruncated:0,agentPatchFindMismatches:0,bridgeToleranceApplied:{},observerAPathBFires:0,persistenceReconciliationFailures:0,externalChangeHandlerErrors:0,persistenceSanityCheckSerializeFailures:0};function incrementReconcile(){counters$1.reconcileCount++}function incrementConflict(){counters$1.conflictCount++}function incrementBatch(){counters$1.batchCount++}function incrementUpstreamImport(){counters$1.upstreamImportCount++}function incrementRescueBuffer(){counters$1.rescueBufferCount++}function incrementBranchSwitch(){counters$1.branchSwitchCount++}function incrementPark(){counters$1.parkCount++}function incrementGitAutoSaveFailure(){counters$1.gitAutoSaveFailureCount++}function incrementGitWriterCommitFailure(){counters$1.gitWriterCommitFailureCount++}function incrementCC1Broadcast(){counters$1.cc1BroadcastCount++}function incrementCC1BroadcastDrop(){counters$1.cc1BroadcastDropCount++}function setCC1SubscriberCount(e){counters$1.cc1SubscriberCount=e}function incrementServerObserverFire(e){e===`a`?counters$1.serverObserverFiresA++:counters$1.serverObserverFiresB++}function incrementPersistenceDiskWrite(){counters$1.persistenceDiskWrites++}function incrementServerObserverError(e){e===`a`?counters$1.serverObserverErrorsA++:counters$1.serverObserverErrorsB++}function incrementBridgeMergeContentLoss(){counters$1.bridgeMergeContentLoss++}function incrementAgentWriteCalls(){counters$1.agentWriteCalls++}function incrementSummariesProvided(){counters$1.summariesProvided++}function incrementSummariesTruncated(){counters$1.summariesTruncated++}function incrementBridgeMergeCheckpointCreated(){counters$1.bridgeMergeCheckpointCreated++}function incrementBridgeInvariantViolations(){counters$1.bridgeInvariantViolations++}function incrementBridgeInvariantViolationsSuppressed(){counters$1.bridgeInvariantViolationsSuppressed++}function incrementPersistenceSkipNonQuiescent(){counters$1.persistenceSkipNonQuiescent++}function incrementPersistenceForceFlushDuringBurst(){counters$1.persistenceForceFlushDuringBurst++}function incrementAgentPatchFindMismatches(){counters$1.agentPatchFindMismatches++}function incrementBridgeToleranceApplied(e){counters$1.bridgeToleranceApplied[e]=(counters$1.bridgeToleranceApplied[e]??0)+1}function incrementObserverAPathBFires(){counters$1.observerAPathBFires++}function incrementPersistenceReconciliationFailures(){counters$1.persistenceReconciliationFailures++}function incrementExternalChangeHandlerErrors(){counters$1.externalChangeHandlerErrors++}function incrementPersistenceSanityCheckSerializeFailures(){counters$1.persistenceSanityCheckSerializeFailures++}function incrementCollabSocketFilteredError(e){e===`EPIPE`?counters$1.collabSocketEpipeCount++:counters$1.collabSocketEconnresetCount++}function incrementCollabMessageTooLarge(){counters$1.collabMessageTooLargeCount++}function incrementShadowMigrationLegacyRefsDeleted(e){counters$1.shadowMigrationLegacyRefsDeleted+=e}function incrementEffectDiffCaptureFailures(){counters$1.effectDiffCaptureFailures++}function incrementAgentPresenceMutationError(){counters$1.agentPresenceMutationErrors++}function handleCollabSocketError(e){return e.code===`EPIPE`||e.code===`ECONNRESET`?(incrementCollabSocketFilteredError(e.code),!0):!1}function setCC1LastSeq(e,t){counters$1.cc1LastSeq[e]=t}function getMetrics(){return{...counters$1,cc1LastSeq:{...counters$1.cc1LastSeq},bridgeToleranceApplied:{...counters$1.bridgeToleranceApplied}}}function resetMetrics(){counters$1.reconcileCount=0,counters$1.conflictCount=0,counters$1.batchCount=0,counters$1.upstreamImportCount=0,counters$1.rescueBufferCount=0,counters$1.branchSwitchCount=0,counters$1.parkCount=0,counters$1.gitAutoSaveFailureCount=0,counters$1.gitWriterCommitFailureCount=0,counters$1.cc1BroadcastCount=0,counters$1.cc1BroadcastDropCount=0,counters$1.cc1SubscriberCount=0,counters$1.cc1LastSeq={},counters$1.serverObserverFiresA=0,counters$1.serverObserverFiresB=0,counters$1.serverObserverErrorsA=0,counters$1.serverObserverErrorsB=0,counters$1.persistenceDiskWrites=0,counters$1.bridgeMergeContentLoss=0,counters$1.bridgeMergeCheckpointCreated=0,counters$1.bridgeInvariantViolations=0,counters$1.bridgeInvariantViolationsSuppressed=0,counters$1.persistenceSkipNonQuiescent=0,counters$1.persistenceForceFlushDuringBurst=0,counters$1.collabSocketEpipeCount=0,counters$1.collabSocketEconnresetCount=0,counters$1.collabMessageTooLargeCount=0,counters$1.shadowMigrationLegacyRefsDeleted=0,counters$1.effectDiffCaptureFailures=0,counters$1.agentPresenceMutationErrors=0,counters$1.agentWriteCalls=0,counters$1.summariesProvided=0,counters$1.summariesTruncated=0,counters$1.agentPatchFindMismatches=0,counters$1.bridgeToleranceApplied={},counters$1.observerAPathBFires=0,counters$1.persistenceReconciliationFailures=0,counters$1.externalChangeHandlerErrors=0,counters$1.persistenceSanityCheckSerializeFailures=0}const BROADCASTER_EVICTION_MS=5e3*4;var AgentPresenceBroadcaster=class{hocuspocus;log=getLogger(`agent-presence`);warnedMissing=!1;destroyed=!1;constructor(e){this.hocuspocus=e}setPresence(e,t){if(!isPresenceEligibleAgentId(e))return;let s=0;this.mutateAgentPresence(g=>{let S=Date.now(),w={};for(let[t,E]of Object.entries(g)){if(S-E.ts>=2e4&&t!==e){s++;continue}w[t]=E}return w[e]=t,w})&&(this.log.debug({agentId:e,action:`set`,currentDoc:t.currentDoc,ts:t.ts},`[agent-presence] set`),s>0&&this.log.info({evictedCount:s,thresholdMs:BROADCASTER_EVICTION_MS},`[agent-presence] evicted stale entries`))}clearPresence(e){if(!isPresenceEligibleAgentId(e))return;let t=!1;this.mutateAgentPresence(s=>{if(!s[e])return s;t=!0;let{[e]:g,...S}=s;return S})&&t&&this.log.info({agentId:e,action:`clear`,currentDoc:null,ts:Date.now()},`[agent-presence] clear`)}touchMode(e,t){if(!isPresenceEligibleAgentId(e))return;let s=[],g=!1,S=this.mutateAgentPresence(S=>{let w=S[e];if(!w)return S;g=!0;let E=Date.now();return s.push({currentDoc:w.currentDoc,ts:E}),{...S,[e]:{...w,mode:t,ts:E}}}),w=s[0];S&&w?this.log.debug({agentId:e,action:`touchMode`,currentDoc:w.currentDoc,ts:w.ts,mode:t},`[agent-presence] touchMode`):g||this.log.debug({agentId:e,action:`touchMode`,mode:t,reason:`entry-missing`},`[agent-presence] touchMode skipped — no entry for agentId`)}bumpPresenceTs(e){if(!isPresenceEligibleAgentId(e))return;let t=null;this.mutateAgentPresence(s=>{let g=s[e];if(!g)return s;let S=Date.now();return t=S,{...s,[e]:{...g,ts:S}}}),t!==null&&this.log.debug({agentId:e,action:`bumpTs`,ts:t},`[agent-presence] bumpTs`)}getPresenceMap(){let e=this.resolveAwareness();return e?e.getLocalState()?.agentPresence??{}:{}}destroy(){this.destroyed=!0}mutateAgentPresence(e){if(this.destroyed)return!1;let t=this.resolveAwareness();if(!t)return!1;try{let s=t.getLocalState()??{},g=e(s.agentPresence??{});return t.setLocalState({...s,agentPresence:g}),!0}catch(e){return incrementAgentPresenceMutationError(),this.log.error({err:e},`[agent-presence] awareness mutation failed`),!1}}resolveAwareness(){let e=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);return e?(this.warnedMissing&&=(this.log.info({},`[agent-presence] __system__ document now available — resuming presence updates`),!1),getAwareness(e)):(this.warnedMissing||=(this.log.warn({},`[agent-presence] __system__ document not found — presence updates will be dropped until it is materialized`),!0),null)}};function getAwareness(e){return e?.awareness??null}const mdManager=new MarkdownManager({extensions:sharedExtensions}),schema=getSchema(sharedExtensions);function composeAndWriteRawBody(e,t,s){let g=e.getXmlFragment(`default`),S=e.getText(`source`),w=S.toString(),{body:E}=stripFrontmatter(t),D=s?{resolveEmbed:s.resolveEmbed,sourcePath:s.sourcePath}:void 0,O=mdManager.parseWithFallback(E,D),k=schema.nodeFromJSON(O);w!==t&&applyFastDiff(S,w,t),updateYFragment(e,g,k,{mapping:new Map,isOMark:new Map})}const DEBOUNCE_MS=100,MAX_DISK_ACK_SVS=1e3;function isSystemDoc(e){return e===SYSTEM_DOC_NAME}const CONFIG_DOC_NAME_SET=new Set(CONFIG_DOC_NAMES);function isConfigDoc(e){return CONFIG_DOC_NAME_SET.has(e)}var CC1Broadcaster=class{hocuspocus;seqs=new Map;timers=new Map;log=getLogger(`cc1`);warnedMissing=!1;latestDiskAckSVs=new Map;constructor(e){this.hocuspocus=e}signal(e){let t=this.timers.get(e);t!==void 0&&clearTimeout(t),this.timers.set(e,setTimeout(()=>{this.timers.delete(e),this.broadcast(e)},DEBOUNCE_MS))}broadcast(e){try{let t=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);if(!t){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found — broadcasts will be dropped until it is materialized`),!0),incrementCC1BroadcastDrop();return}let s=(this.seqs.get(e)??0)+1;this.seqs.set(e,s);let g=CC1DerivedViewPayloadSchema.parse({v:1,ch:e,seq:s});t.broadcastStateless(JSON.stringify(g)),incrementCC1Broadcast(),setCC1LastSeq(e,s),setCC1SubscriberCount(t.getConnectionsCount())}catch(t){this.log.error({err:t,channel:e},`[cc1] broadcast failed`)}}emitServerInfo(e,t){try{let s=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);if(!s){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitServerInfo — dropped`),!0),incrementCC1BroadcastDrop();return}let g=CC1ServerInfoPayloadSchema.parse({v:1,ch:CC1_CHANNEL_SERVER_INFO,seq:0,serverInstanceId:e,...t===void 0?{}:{currentBranch:t}});s.broadcastStateless(JSON.stringify(g)),incrementCC1Broadcast(),setCC1LastSeq(CC1_CHANNEL_SERVER_INFO,0)}catch(e){this.log.error({err:e},`[cc1] emitServerInfo failed`)}}emitBranchSwitched(e){try{let t=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);if(!t){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitBranchSwitched — dropped`),!0),incrementCC1BroadcastDrop();return}let s=(this.seqs.get(`branch-switched`)??0)+1;this.seqs.set(CC1_CHANNEL_BRANCH_SWITCHED,s);let g=CC1BranchSwitchedPayloadSchema.parse({v:1,ch:CC1_CHANNEL_BRANCH_SWITCHED,seq:s,branch:e});t.broadcastStateless(JSON.stringify(g)),incrementCC1Broadcast(),setCC1LastSeq(CC1_CHANNEL_BRANCH_SWITCHED,s)}catch(e){this.log.error({err:e},`[cc1] emitBranchSwitched failed`)}}emitDiskAck(e,t){if(this.latestDiskAckSVs.delete(e),this.latestDiskAckSVs.set(e,t),this.latestDiskAckSVs.size>MAX_DISK_ACK_SVS){let e=this.latestDiskAckSVs.keys().next().value;e!==void 0&&this.latestDiskAckSVs.delete(e)}try{let s=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);if(!s){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitDiskAck — dropped`),!0),incrementCC1BroadcastDrop();return}let g=(this.seqs.get(`disk-ack`)??0)+1;this.seqs.set(CC1_CHANNEL_DISK_ACK,g);let S=CC1DiskAckPayloadSchema.parse({v:1,ch:CC1_CHANNEL_DISK_ACK,seq:g,docName:e,sv:Buffer.from(t).toString(`base64`)});s.broadcastStateless(JSON.stringify(S)),incrementCC1Broadcast(),setCC1LastSeq(CC1_CHANNEL_DISK_ACK,g)}catch(t){this.log.error({err:t,docName:e},`[cc1] emitDiskAck failed`)}}getLatestDiskAckSVsAsBase64(){let e={};for(let[t,s]of this.latestDiskAckSVs)e[t]=Buffer.from(s).toString(`base64`);return e}emitConfigValidationRejected(e,t){try{let s=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);if(!s){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitConfigValidationRejected — dropped`),!0),incrementCC1BroadcastDrop();return}let g=(this.seqs.get(`config-validation-rejected`)??0)+1;this.seqs.set(CC1_CHANNEL_CONFIG_VALIDATION_REJECTED,g);let S=CC1ConfigValidationRejectedPayloadSchema.parse({v:1,ch:CC1_CHANNEL_CONFIG_VALIDATION_REJECTED,seq:g,docName:e,error:t});s.broadcastStateless(JSON.stringify(S)),incrementCC1Broadcast(),setCC1LastSeq(CC1_CHANNEL_CONFIG_VALIDATION_REJECTED,g)}catch(t){this.log.error({err:t,docName:e},`[cc1] emitConfigValidationRejected failed`)}}emitConfigIgnoreNestedError(e,t){try{let s=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);if(!s){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitConfigIgnoreNestedError — dropped`),!0),incrementCC1BroadcastDrop();return}let g=(this.seqs.get(`config-ignore-nested-error`)??0)+1;this.seqs.set(CC1_CHANNEL_CONFIG_IGNORE_NESTED_ERROR,g);let S=CC1ConfigIgnoreNestedErrorPayloadSchema.parse({v:1,ch:CC1_CHANNEL_CONFIG_IGNORE_NESTED_ERROR,seq:g,path:e,error:t});s.broadcastStateless(JSON.stringify(S)),incrementCC1Broadcast(),setCC1LastSeq(CC1_CHANNEL_CONFIG_IGNORE_NESTED_ERROR,g)}catch(t){this.log.error({err:t,path:e},`[cc1] emitConfigIgnoreNestedError failed`)}}get subscriberCount(){let e=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);return e?e.getConnectionsCount():0}destroy(){for(let e of this.timers.values())clearTimeout(e);this.timers.clear()}};const TRACER_NAME=`open-knowledge-server`;let tracerProvider=null,meterProvider=null;function noopResult(){return{tracer:trace.getTracer(TRACER_NAME),meter:metrics.getMeter(TRACER_NAME)}}function initTelemetry(){if(process.env.OTEL_SDK_DISABLED!==`false`||tracerProvider)return noopResult();try{let e=(0,import_src$4.resourceFromAttributes)({[ATTR_SERVICE_NAME]:process.env.OTEL_SERVICE_NAME||`open-knowledge-server`,[ATTR_SERVICE_VERSION]:process.env.OTEL_SERVICE_VERSION||`0.2.0`}),t=new import_src.AsyncLocalStorageContextManager;context.setGlobalContextManager(t);let s=new import_src$6.BasicTracerProvider({resource:e,spanProcessors:[new import_src$6.BatchSpanProcessor(new import_src$3.OTLPTraceExporter)]});trace.setGlobalTracerProvider(s),propagation.setGlobalPropagator(new import_src$1.W3CTraceContextPropagator);let g=new import_src$5.MeterProvider({resource:e,readers:[new import_src$5.PeriodicExportingMetricReader({exporter:new import_src$2.OTLPMetricExporter})]});metrics.setGlobalMeterProvider(g),tracerProvider=s,meterProvider=g,getLogger(`telemetry`).info({otlp_endpoint:process.env.OTEL_EXPORTER_OTLP_ENDPOINT||`http://localhost:4318`,service_name:e.attributes[ATTR_SERVICE_NAME]},`OpenTelemetry initialized — traces + metrics exporting via OTLP/HTTP`)}catch(e){getLogger(`telemetry`).error({err:e},`failed to initialize OpenTelemetry — falling back to no-op`),tracerProvider=null,meterProvider=null}return noopResult()}const SHUTDOWN_TIMEOUT_MS=5e3;async function shutdownTelemetry(){if(!tracerProvider&&!meterProvider)return;let e=getLogger(`telemetry`),t=Promise.all([tracerProvider?.shutdown().catch(t=>{e.warn({err:t},`tracer provider shutdown failed`)}),meterProvider?.shutdown().catch(t=>{e.warn({err:t},`meter provider shutdown failed`)})]);await Promise.race([t.then(()=>!1),new Promise(e=>setTimeout(()=>e(!0),SHUTDOWN_TIMEOUT_MS))])&&e.warn({},`telemetry shutdown timed out after ${SHUTDOWN_TIMEOUT_MS}ms — data may be lost`),tracerProvider=null,meterProvider=null,trace.disable(),metrics.disable(),context.disable()}function getTracer(){return trace.getTracer(TRACER_NAME)}function getMeter(){return metrics.getMeter(TRACER_NAME)}async function withSpan(e,t,s){return getTracer().startActiveSpan(e,t??{},async e=>{try{let t=await s(e);return e.isRecording(),t}catch(t){throw e.recordException(t),e.setStatus({code:SpanStatusCode.ERROR,message:t instanceof Error?t.message:String(t)}),t}finally{e.end()}})}function withSpanSync(e,t,s){return getTracer().startActiveSpan(e,t??{},e=>{try{return s(e)}catch(t){throw e.recordException(t),e.setStatus({code:SpanStatusCode.ERROR,message:t instanceof Error?t.message:String(t)}),t}finally{e.end()}})}function setActiveSpanAttributes(e){let t=trace.getSpan(context.active());t&&t.setAttributes(e)}let _editSurfaceCounter=null;function editSurfaceCounter(){return _editSurfaceCounter||=getMeter().createCounter(`ok.frontmatter.edit_surface_total`,{description:`Count of frontmatter edits by surface. Bounded label: source ∈ {source-mode, mcp-write, file-watcher}.`}),_editSurfaceCounter}function recordFrontmatterEditSurface(e){editSurfaceCounter().add(1,{source:e})}const log$6=getLogger(`agent-sessions`),AGENT_WRITE_ORIGIN={source:`local`,skipStoreHooks:!1,context:{origin:`agent-write`,paired:!0}};function applyAgentMarkdownWrite(e,t,s,g){withSpanSync(`agent.applyAgentMarkdownWrite`,{attributes:{"doc.name":e.name,"agent.write_position":s,"agent.markdown.bytes":t.length}},()=>applyAgentMarkdownWriteInner(e,t,s,g))}function applyAgentMarkdownWriteInner(e,t,s,g){try{let{frontmatter:S,body:w}=stripFrontmatter(e.getText(`source`).toString()),{frontmatter:E,body:D}=stripFrontmatter(t),O,k;switch(s){case`replace`:O=E||S,k=D;break;case`prepend`:O=S,k=w.length>0?`${D}\n\n${w}`:D;break;case`append`:O=S,k=w.length>0?`${w}\n\n${D}`:D;break}O!==S&&recordFrontmatterEditSurface(`mcp-write`),composeAndWriteRawBody(e,prependFrontmatter(O,k),g)}catch(g){throw log$6.error({err:g,docName:e.name,position:s,markdownLen:t.length},`[applyAgentMarkdownWrite] failed for '${e.name}'`),g}}function applyAgentUndo(e,t,s){return withSpanSync(`agent.applyAgentUndo`,{attributes:{"doc.name":e.dc.document.name,"agent.undo_scope":t}},()=>{let g=applyAgentUndoInner(e,t,s);return setActiveSpanAttributes({"agent.undo_effective":g}),g})}function applyAgentUndoInner(e,t,s){let{dc:g,um:S,undoOrigin:w}=e,E=g.document,D=E.getXmlFragment(`default`),O=E.getText(`source`),k=!1;return E.transact(()=>{if(t===`last`){if(S.undoStack.length===0)return;S.undo(),k=!0}else for(;S.undoStack.length>0;)S.undo(),k=!0;let{body:e}=stripFrontmatter(O.toString()),g=mdManager.parseWithFallback(e,s);updateYFragment(E,D,schema.nodeFromJSON(g),{mapping:new Map,isOMark:new Map})},w),k}function createSessionOrigin(e,t,s,g,S){let w={origin:`agent-write`,paired:!0,session_id:e};t!==void 0&&(w.agent_type=t),s!==void 0&&(w.principal=s),g!==void 0&&(w.display_name=g),S!==void 0&&(w.color_seed=S),Object.freeze(w);let E={source:`local`,skipStoreHooks:!1,context:w};return Object.freeze(E),E}function createUndoOrigin(e,t){let s={origin:`agent-undo`,paired:!0,session_id:e};t!==void 0&&(s.agent_type=t),Object.freeze(s);let g={source:`local`,skipStoreHooks:!1,context:s};return Object.freeze(g),g}const MAX_AGENT_SESSIONS=256;var AgentSessionCapacityError=class extends Error{limit;constructor(e){super(`Maximum agent session count reached (${e})`),this.name=`AgentSessionCapacityError`,this.limit=e}},AgentSessionManager=class{sessions=new Map;pendingSessions=new Map;hocuspocus;maxSessions;constructor(e,t={}){this.hocuspocus=e,this.maxSessions=t.maxSessions??256}sessionKey(e,t){return`${e}\0${t}`}*sessionsForConnection(e){let t=`\0${e}`;for(let[e,s]of this.sessions)e.endsWith(t)&&(yield s)}getLiveSession(e,t){return this.sessions.get(this.sessionKey(e,t))}async getSession(e,t=`claude-1`,s){if(isSystemDoc(e)||isConfigDoc(e))throw Error(`Cannot create agent session for reserved doc: ${e}`);let g=this.sessionKey(e,t),S=this.sessions.get(g);if(S)return S;let w=this.pendingSessions.get(g);if(w)return w;if(this.sessions.size+this.pendingSessions.size>=this.maxSessions)throw new AgentSessionCapacityError(this.maxSessions);let E=this._createSession(e,t,s);this.pendingSessions.set(g,E);try{let e=await E;return this.sessions.set(g,e),e}finally{this.pendingSessions.delete(g)}}async _createSession(e,t,s){let g=s?.clientName,S=t.startsWith(`agent-`)?t.slice(6):t,w=createSessionOrigin(S,g,s?.principalId,s?.displayName,s?.colorSeed),E=createUndoOrigin(S,g),D={session_id:S,...g===void 0?{}:{agent_type:g},...s?.clientName===void 0?{}:{client_name:s.clientName},...s?.principalId===void 0?{}:{principalId:s.principalId}},O=await this.hocuspocus.openDirectConnection(e,D),k=new UndoManager([O.document.getText(`source`),O.document.getMap(`agent-flash`)],{trackedOrigins:new Set([w]),captureTimeout:500,captureTransaction:e=>e.origin!==E,ignoreRemoteMapChanges:!0}),j=({stackItem:e})=>{e.meta.set(`time`,Date.now())};return k.on(`stack-item-added`,j),k.on(`stack-item-updated`,j),log$6.info({docName:e,agentId:t},`[agent-session] Created session for: ${e} / ${t}`),{dc:O,origin:w,undoOrigin:E,um:k,agentId:t,docName:e}}hasSession(e,t=`claude-1`){return this.sessions.has(this.sessionKey(e,t))}async cleanupSession(e,t,s){try{try{t.um.destroy()}catch(e){log$6.error({err:e,...s},`[agent-session] um.destroy() failed`)}try{await t.dc.disconnect()}catch(e){log$6.error({err:e,...s},`[agent-session] dc.disconnect() failed`)}}finally{this.sessions.delete(e)}}async closeSession(e,t=`claude-1`){let s=this.sessionKey(e,t),g=this.sessions.get(s);g&&(await this.cleanupSession(s,g,{docName:e,agentId:t}),log$6.info({docName:e,agentId:t},`[agent-session] Closed session for: ${e} / ${t}`))}async closeAllForAgent(e){let t=`\0${e}`,s=[...this.pendingSessions.keys()].filter(e=>e.endsWith(t));s.length>0&&await Promise.allSettled(s.map(e=>this.pendingSessions.get(e)));let g=[...this.sessions.keys()].filter(e=>e.endsWith(t));for(let t of g){let s=this.sessions.get(t);s&&await this.cleanupSession(t,s,{agentId:e,key:t})}}async closeAllForDoc(e){let t=`${e}\0`,s=[...this.sessions.keys()].filter(e=>e.startsWith(t));for(let t of s){let s=this.sessions.get(t);s&&await this.cleanupSession(t,s,{docName:e,key:t})}}async closeAll(e){if(e){await this.closeAllForDoc(e);return}let t=[...this.sessions.keys()];for(let e of t){let t=this.sessions.get(e);t&&await this.cleanupSession(e,t,{key:e})}}};const RING_BUFFER_LIMIT=50;let _effectCounter=0;const EFFECT_CAPTURE_ORIGIN=Object.freeze({source:`local`,skipStoreHooks:!0,context:Object.freeze({origin:`effect-capture`,paired:!1})});function captureEffect(e,t,s,g){let S=e.doc;if(!S)return;let w=++_effectCounter,E=S.getMap(`agent-effects`),D=k=>{e.unobserve(D),S.off(`destroy`,O);let j=`${t}:${w}`,F={sessionId:t,timestamp:Date.now(),delta:k.delta,agent_type:g??`agent`,color_seed:s??t};try{S.transact(()=>{if(E.set(j,F),E.size>RING_BUFFER_LIMIT){let e=[...E.entries()].sort((e,t)=>e[1].timestamp-t[1].timestamp);for(let[t]of e.slice(0,E.size-RING_BUFFER_LIMIT))E.delete(t)}},EFFECT_CAPTURE_ORIGIN)}catch(e){let s=e instanceof Error?e.message:String(e);if(console.warn(JSON.stringify({event:`effect-diff-capture-failed`,sessionId:t,reason:s})),incrementEffectDiffCaptureFailures(),process.env.NODE_ENV!==`production`)throw e}},O=()=>{e.unobserve(D)};e.observe(D),S.once(`destroy`,O)}function collectItemsInDeleteSet(e,t,s){iterateDeletedStructs(e,t,e=>{e instanceof Item&&s.add(e)})}function*walkYTextItems(e){let t=e._start;for(;t!==null;)yield t,t=t.right}function synthesizeStackItemDiff(e,t){let s=[],g=[],S=t.doc,w=new Set,E=new Set;S&&S.transact(t=>{collectItemsInDeleteSet(t,e.insertions,w),collectItemsInDeleteSet(t,e.deletions,E)});let D=``,O=``,k=0,j=0;for(let e of walkYTextItems(t)){if(!(e.content instanceof ContentString))continue;let t=e.content.str,S=t.length,F=w.has(e),L=E.has(e);e.deleted?L&&(g.push({position:k,content:t,length:S}),D+=t,k+=S):(O+=t,F?s.push({position:j,content:t,length:S}):(D+=t,k+=S),j+=S)}return{insertions:s,deletions:g,before:D,after:O}}function synthesizeStackItemDiffText(e,t,s){let{before:g,after:S}=synthesizeStackItemDiff(e,t);return g===S?``:createPatch(s,g,S,void 0,void 0,{context:3})}function getBurstTs(e){let t=e.meta.get(`time`);return typeof t==`number`?t:Date.now()}function countStackItemChanges(e,t){let s=t.doc,g=new Set,S=new Set;s&&s.transact(t=>{collectItemsInDeleteSet(t,e.insertions,g),collectItemsInDeleteSet(t,e.deletions,S)});let w=0,E=0;for(let e of walkYTextItems(t)){if(!(e.content instanceof ContentString))continue;let t=e.content.str.length;!e.deleted&&g.has(e)&&(w+=t),S.has(e)&&(E+=t)}return{additions:w,deletions:E}}function listAgentActivity(e,t){let s=[],g=null,S=!1;for(let w of e.sessionsForConnection(t)){if(S=!0,!g){let e=w.origin.context,s=typeof e?.agent_type==`string`?e.agent_type:void 0,S=typeof e?.color_seed==`string`?e.color_seed:t,E=iconFromClientName(s),D=AGENT_ICON_COLORS[E]??colorFromSeed(S);g={displayName:e?.display_name||(typeof e?.agent_type==`string`?e.agent_type:void 0)||t,color:D,icon:E,connectionId:t}}let e=w.docName,E=w.um,D=w.dc.document.getText(`source`),O=[];for(let e=0;e<E.undoStack.length;e++){let t=E.undoStack[e],s=getBurstTs(t),{additions:g,deletions:S}=countStackItemChanges(t,D);O.push({stackIndex:e,ts:s,additions:g,deletions:S})}if(O.length===0)continue;O.sort((e,t)=>t.stackIndex-e.stackIndex);let k=O.reduce((e,t)=>e+t.additions,0),j=O.reduce((e,t)=>e+t.deletions,0),F=Math.max(...O.map(e=>e.ts));s.push({docName:e,additionsTotal:k,deletionsTotal:j,lastTs:F,bursts:O})}return S?(s.sort((e,t)=>t.lastTs-e.lastTs),{sessionAlive:!0,agent:g,files:s}):{sessionAlive:!1,agent:null,files:[]}}const ELLIPSIS=`…`,LINE_TERMINATOR_RE=RegExp(`[\\r\\n\\v\\f\\u0085\\u2028\\u2029]`,`g`);function normalizeSummary(e){if(e===void 0)return{kind:`absent`};if(typeof e!=`string`)return{kind:`invalid`};if(e.length===0||e.trim().length===0)return{kind:`absent`};let t=e.replace(LINE_TERMINATOR_RE,` `);return t.length<=80?{kind:`value`,value:t}:{kind:`value`,value:t.slice(0,79)+ELLIPSIS,truncatedFrom:e.length}}function isAllowedApiOrigin(e){if(e===`null`)return!0;try{let{hostname:t}=new URL(e);return t===`localhost`||t===`::1`||t===`[::1]`||/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(t)}catch{return!1}}const counters=new WeakMap;let globalCounter=0;function getCounters(e){let t=counters.get(e);return t||(t={lastUserTxGen:0,settledGen:0,lastUserTxAtMs:null},counters.set(e,t)),t}function isObserverSelfOrigin(e){if(!e||typeof e!=`object`)return!1;let t=e.context;return t!=null&&t.origin===`observer-sync`}function attachQuiescenceTracker(e){let t=t=>{if(isObserverSelfOrigin(t.origin))return;let s=getCounters(e);s.lastUserTxGen=++globalCounter,s.lastUserTxAtMs=Date.now()},s=()=>{getCounters(e).settledGen=++globalCounter};return e.on(`afterTransaction`,t),e.on(`afterAllTransactions`,s),()=>{e.off(`afterTransaction`,t),e.off(`afterAllTransactions`,s)}}const overrides=new WeakMap;function isDocQuiescent(e){let t=overrides.get(e);if(t!==void 0)return t;let s=counters.get(e);return s?s.settledGen>s.lastUserTxGen:!0}function getMsSinceLastUserTx(e,t=Date.now()){let s=counters.get(e);return!s||s.lastUserTxAtMs===null?null:Math.max(0,t-s.lastUserTxAtMs)}const DEFAULT_DEBOUNCE_S=60,lastEmitMs=new Map,MAX_VIOLATION_RATE_TUPLES=1024,lastToleranceEmitMs=new Map;function toleranceRateKey(e,t){return`${e}::${t}`}function readDebounceMs(){let e=process.env.OK_BRIDGE_VIOLATION_DEBOUNCE_S;if(e===void 0)return DEFAULT_DEBOUNCE_S*1e3;let t=Number.parseInt(e,10);return!Number.isFinite(t)||t<=0?DEFAULT_DEBOUNCE_S*1e3:t*1e3}function rateKey(e,t){return`${e}::${t??`__nodoc__`}`}function shouldEmitBridgeInvariantViolation(e,t,s=Date.now()){let g=rateKey(e,t),S=lastEmitMs.get(g),w=readDebounceMs();if(S!==void 0&&s-S<w)return!1;if(lastEmitMs.size>=MAX_VIOLATION_RATE_TUPLES)for(let[e,t]of lastEmitMs)s-t>=w&&lastEmitMs.delete(e);return lastEmitMs.set(g,s),!0}function shouldEmitBridgeToleranceApplied(e,t,s=Date.now()){let g=toleranceRateKey(e,t),S=lastToleranceEmitMs.get(g),w=readDebounceMs();return S!==void 0&&s-S<w?!1:(lastToleranceEmitMs.set(g,s),!0)}function shouldThrowOnBridgeInvariantViolation(e=process.env){return e.NODE_ENV===`test`||e.OK_BRIDGE_THROW_ON_VIOLATION===`1`}function assertBridgeInvariant(e,t,s){let g=normalizeBridge(e),S=normalizeBridge(t);if(g===S){if(e!==t){let g=detectAppliedToleranceClasses(e,t);for(let e of g)shouldEmitBridgeToleranceApplied(s.site,e,s.nowMs)&&(incrementBridgeToleranceApplied(e),console.warn(JSON.stringify({event:`bridge-tolerance-applied`,site:s.site,class:e})))}return!0}let w={site:s.site,origin:s.origin,docName:s.docName,ytextSnapshot:e,fragmentMdSnapshot:t,unifiedDiff:` ytext: ${g.slice(0,300)}\n frag: ${S.slice(0,300)}`,stack:Error().stack};if(shouldThrowOnBridgeInvariantViolation()&&!s.suppressDevThrow)throw new BridgeInvariantViolationError(w);return shouldEmitBridgeInvariantViolation(s.site,s.docName,s.nowMs)?(incrementBridgeInvariantViolations(),console.warn(JSON.stringify({event:`bridge-invariant-violation`,site:s.site,"doc.name":s.docName??null,"tolerance-class-attempted":`untracked`,"normalize-equal-modulo-tolerance":!1,ytextLen:e.length,fragmentLen:t.length,diff:w.unifiedDiff,timestamp:new Date().toISOString()})),!1):(incrementBridgeInvariantViolationsSuppressed(),!1)}const CONFIG_VALIDATION_REVERT_ORIGIN={source:`local`,skipStoreHooks:!0,context:{origin:`config-validation-revert`}},CONFIG_FILE_WATCHER_ORIGIN={source:`local`,skipStoreHooks:!0,context:{origin:`config-file-watcher`}};function normalizeFsPath(e){let t=e.split(sep).filter(Boolean);return t.length<=2?e:`...${sep}${t.slice(-2).join(sep)}`}function classifyFsPath(e){return e.includes(`${sep}.git${sep}ok${sep}`)||e.includes(`shadow-repo`)?`shadow-repo`:e.includes(`${sep}.git${sep}`)?`git`:basename(e).endsWith(`.lock`)||basename(e)===`lock`?`lock`:basename(e)===`principal.json`?`principal`:e.includes(`${sep}.ok${sep}`)&&(basename(e)===`conflicts.json`||e.includes(`${sep}conflicts${sep}`))?`conflict`:e.includes(`${sep}.ok${sep}`)?`ok-internal`:e.endsWith(`.md`)||e.endsWith(`.mdx`)?`content-md`:`other`}function buildAttrs(e,t,s){let g={"fs.operation":e,"fs.path":normalizeFsPath(t),"fs.path.role":classifyFsPath(t)};return s&&Object.assign(g,s),g}function byteLength(e){return typeof e==`string`?Buffer.byteLength(e,`utf-8`):e instanceof Uint8Array?e.byteLength:e.byteLength??0}async function tracedWriteFile(e,t,s){return withSpan(`fs.writeFile`,{attributes:buildAttrs(`writeFile`,e,{"fs.bytes":byteLength(t)})},async()=>{await writeFile(e,t,s)})}async function tracedRename(e,t){return withSpan(`fs.rename`,{attributes:buildAttrs(`rename`,t,{"fs.source_path":normalizeFsPath(e)})},async()=>{await rename(e,t)})}async function tracedMkdir(e,t){return withSpan(`fs.mkdir`,{attributes:buildAttrs(`mkdir`,e)},async()=>mkdir(e,t))}function tracedWriteFileSync(e,t,s){withSpanSync(`fs.writeFileSync`,{attributes:buildAttrs(`writeFileSync`,e,{"fs.bytes":byteLength(t)})},()=>{writeFileSync(e,t,s)})}function tracedMkdirSync(e,t){return withSpanSync(`fs.mkdirSync`,{attributes:buildAttrs(`mkdirSync`,e)},()=>mkdirSync(e,t))}function tracedRenameSync(e,t){withSpanSync(`fs.renameSync`,{attributes:buildAttrs(`renameSync`,t,{"fs.source_path":normalizeFsPath(e)})},()=>{renameSync(e,t)})}function tracedUnlinkSync(e){withSpanSync(`fs.unlinkSync`,{attributes:buildAttrs(`unlinkSync`,e)},()=>{unlinkSync(e)})}function tracedLinkSync(e,t){withSpanSync(`fs.linkSync`,{attributes:buildAttrs(`linkSync`,t,{"fs.source_path":normalizeFsPath(e)})},()=>{linkSync(e,t)})}function tracedRmSync(e,t){withSpanSync(`fs.rmSync`,{attributes:buildAttrs(`rmSync`,e)},()=>{rmSync(e,t)})}function tracedRmdirSync(e){withSpanSync(`fs.rmdirSync`,{attributes:buildAttrs(`rmdirSync`,e)},()=>{rmdirSync(e)})}function configScopeAttr(e){if(e===`__config__/project`)return`project`;if(e===`__local__/project`)return`project-local`;if(e===`__user__/config.yml`)return`user`;if(e===`__config__/okignore`)return`project`}let _okignoreRejectionCounter=null;function okignoreRejectionCounter(){return _okignoreRejectionCounter||=getMeter().createCounter(`ok.config.ignore.rejection_total`,{description:`Count of okignore L3 rejections by error code.`}),_okignoreRejectionCounter}function emitSchemaInvalidIssueEvents(e){if(isKnownConfigError(e)&&e.code===`SCHEMA_INVALID`)for(let t of e.issues)addConfigSpanEvent(`config.validation.issue`,{"issue.path":t.path.map(e=>String(e)).join(`.`),"issue.message":t.message})}function configDocAbsPath(e,t){if(e===`__config__/project`)return resolveConfigPath(`project`,t.projectDir,t.homedirOverride);if(e===`__local__/project`)return resolveConfigPath(`project-local`,t.projectDir,t.homedirOverride);if(e===`__user__/config.yml`)return resolveConfigPath(`user`,t.projectDir,t.homedirOverride);if(e===`__config__/okignore`)return resolve(t.contentDir??t.projectDir,`.okignore`);throw Error(`configDocAbsPath: not a config doc name: ${e}`)}let cachedDefaultsYaml=null;function serializedDefaults(){return cachedDefaultsYaml===null&&(cachedDefaultsYaml=(0,import_dist$1.stringify)(ConfigSchema$1.parse({}))),cachedDefaultsYaml}function validateOkignore(e){if(e.length===0)return{ok:!0};let t=e.split(`
773
- `);for(let e=0;e<t.length;e++){let s=t[e]??``;if(s.length!==0&&/^\s+$/.test(s))return{ok:!1,error:{code:`OKIGNORE_INVALID`,detail:`Whitespace-only pattern is not allowed.`,lineNumber:e+1}}}return{ok:!0}}function validateConfigContent(e,t){return e===`__config__/okignore`?validateOkignore(t):validateConfigYaml(t)}function defaultLkgFor(e){return e===`__config__/okignore`?``:serializedDefaults()}function validateConfigYaml(e){let t=(0,import_dist$1.parseDocument)(e);if(t.errors.length>0)return{ok:!1,error:{code:`YAML_PARSE`,detail:t.errors.map(e=>e.message).join(`; `)}};let s=t.toJSON()??{},g=ConfigSchema$1.safeParse(s);return g.success?{ok:!0}:{ok:!1,error:{code:`SCHEMA_INVALID`,issues:g.error.issues.map(e=>({path:e.path.map(e=>typeof e==`symbol`?String(e):e),message:e.message,issueCode:e.code}))}}}function loadConfigDoc(e,t,s){let g=e.getText(`source`);if(g.length>0)return;let S=configDocAbsPath(t,s),w=``;if(existsSync(S))try{w=readFileSync(S,`utf-8`)}catch(e){let t=e instanceof Error?e.message:String(e);console.warn(`[config] Could not read ${S}: ${t}. Seeding with empty content.`),w=``}let E=validateConfigContent(t,w);!E.ok&&w.length>0&&getLogger(`config-persistence`).warn({docName:t,path:S},`[config-persistence] loadConfigDoc seeding invalid content for ${t} into Y.Text — first mutation will revert to LKG`),e.transact(()=>{w.length>0&&g.insert(0,w)},CONFIG_VALIDATION_REVERT_ORIGIN),E.ok&&w.length>0?s.lkgCache.set(t,w):s.lkgCache.set(t,defaultLkgFor(t))}async function atomicWriteConfig(e,t){await tracedMkdir(dirname(e),{recursive:!0});let s=`${e}.tmp.${crypto.randomUUID()}`;try{await tracedWriteFile(s,t,`utf-8`),await tracedRename(s,e)}catch(e){try{tracedUnlinkSync(s)}catch{}throw e}}async function storeConfigDoc(e,t,s,g){return withConfigSpan(`config.persist`,{"config.scope":configScopeAttr(t),"config.transport":`fs`},async S=>{let w=await storeConfigDocInner(e,t,s,g);return S.setAttribute(`config.outcome`,persistOutcomeAttr(w)),w})}function persistOutcomeAttr(e){return e===`reverted`?`reverted`:e===`write-failed`?`rejected`:`success`}async function storeConfigDocInner(e,t,s,g){if(s===CONFIG_VALIDATION_REVERT_ORIGIN)return`no-op`;let S=e.getText(`source`),w=S.toString();if(w.length===0)return`no-op`;let E=g.lkgCache.get(t);if(E!==void 0&&w===E)return`no-op`;let D=configScopeAttr(t),O=withConfigSpanSync(`config.validate`,{"config.scope":D,"config.validation.layer":`L3`},e=>{let s=validateConfigContent(t,w);return e.setAttribute(`config.outcome`,s.ok?`success`:`rejected`),s.ok||emitSchemaInvalidIssueEvents(s.error),s});if(!O.ok)return await withConfigSpan(`config.revert`,{"config.scope":D,"config.outcome":`reverted`},async()=>{let s=E??defaultLkgFor(t);e.transact(()=>{S.length>0&&S.delete(0,S.length),S.insert(0,s)},CONFIG_VALIDATION_REVERT_ORIGIN),E===void 0&&g.lkgCache.set(t,s),t===`__config__/okignore`&&isKnownConfigError(O.error)&&okignoreRejectionCounter().add(1,{"error.code":O.error.code}),g.onConfigRejected?.(t,O.error)}),`reverted`;let k=configDocAbsPath(t,g);try{await atomicWriteConfig(k,w)}catch(e){let s=e instanceof Error?e.message:String(e);return getLogger(`config-persistence`).warn({docName:t,path:k,err:e},`[config-persistence] write-failed at ${k}: ${s}`),g.onConfigRejected?.(t,{code:`WRITE_ERROR`,detail:`Failed to persist config at ${k}: ${s}`}),`write-failed`}return g.lkgCache.set(t,w),`persisted`}function applyExternalConfigChange(e,t,s,g){if(!e)return`no-op`;let S=g.lkgCache.get(t);if(S!==void 0&&S===s)return`no-op`;let w=configScopeAttr(t),E=withConfigSpanSync(`config.validate`,{"config.scope":w,"config.validation.layer":`L3`},e=>{let g=validateConfigContent(t,s);return e.setAttribute(`config.outcome`,g.ok?`success`:`rejected`),g.ok||emitSchemaInvalidIssueEvents(g.error),g});if(!E.ok)return t===`__config__/okignore`&&isKnownConfigError(E.error)&&okignoreRejectionCounter().add(1,{"error.code":E.error.code}),g.onConfigRejected?.(t,E.error),`rejected`;let D=e.getText(`source`);return e.transact(()=>{D.length>0&&D.delete(0,D.length),D.insert(0,s)},CONFIG_FILE_WATCHER_ORIGIN),g.lkgCache.set(t,s),`applied`}let pendingContributors=new Map;function recordContributor(e,t,s,g,S,w,E){let D=pendingContributors.get(t);if(D||(D={writerId:t,displayName:s,colorSeed:g??s,docs:new Set,subjectOverride:S,actor:w,summaries:[]},pendingContributors.set(t,D)),D.docs.add(e),S!==void 0&&(D.subjectOverride=S),w!==void 0){let e=D.actor??{};w.principalId!==void 0&&(e.principalId=w.principalId),w.agentType!==void 0&&(e.agentType=w.agentType),w.clientName!==void 0&&(e.clientName=w.clientName),w.clientVersion!==void 0&&(e.clientVersion=w.clientVersion),w.label!==void 0&&(e.label=w.label),D.actor=e}typeof E==`string`&&E.length>0&&D.summaries.push(E)}function swapContributors(){let e=pendingContributors;return pendingContributors=new Map,e}function restoreContributors(e){for(let[t,s]of e){let e=pendingContributors.get(t);e||(e={writerId:t,displayName:s.displayName,colorSeed:s.colorSeed,docs:new Set,actor:s.actor,summaries:[]},pendingContributors.set(t,e));for(let t of s.docs)e.docs.add(t);s.summaries.length>0&&(e.summaries=[...s.summaries,...e.summaries])}}function formatContributorsFrom(e){if(e.size===0)return``;let t=[``];for(let s of e.values()){let e={v:1,id:s.writerId,name:s.displayName,colorSeed:s.colorSeed,docs:[...s.docs]};s.summaries.length>0&&(e.summaries=[...s.summaries]),t.push(`ok-contributors: ${JSON.stringify(e)}`)}return t.join(`
774
- `)}function formatContributors(){return formatContributorsFrom(pendingContributors)}function restoreContributorEntry(e,t){let s=pendingContributors.get(e);s||(s={writerId:e,displayName:t.displayName,colorSeed:t.colorSeed,docs:new Set,actor:t.actor,summaries:[]},pendingContributors.set(e,s));for(let e of t.docs)s.docs.add(e);t.summaries.length>0&&(s.summaries=[...t.summaries,...s.summaries])}function clearContributors(){pendingContributors.clear()}function contributorCount(){return pendingContributors.size}function hasContributor(e){return pendingContributors.has(e)}const SUPPORTED_DOC_EXTENSIONS=[`.mdx`,`.md`],DEFAULT_EXTENSION=`.md`;function isSupportedDocFile(e){let t=extname(e).toLowerCase();return SUPPORTED_DOC_EXTENSIONS.includes(t)}function isSupportedAssetFile(e,t){let s=extname(e).slice(1).toLowerCase();return s.length>0&&t.has(s)}function stripDocExtension(e){let t=e.toLowerCase();for(let s of SUPPORTED_DOC_EXTENSIONS)if(t.endsWith(s))return e.slice(0,-s.length);return e}function canonicalize(e){let t=e.toLowerCase();return t===`.mdx`?`.mdx`:t===`.md`?`.md`:null}function rank(e){return SUPPORTED_DOC_EXTENSIONS.indexOf(e)}const docExtensionByName=new Map;function registerDocExtension(e,t){let s=canonicalize(t);if(!s)throw Error(`registerDocExtension: unsupported extension "${t}"`);let g=docExtensionByName.get(e);if(!g)return docExtensionByName.set(e,t),{effective:t,changed:!0,shadowed:null};let S=canonicalize(g);return S?S===s?{effective:g,changed:!1,shadowed:null}:rank(s)<rank(S)?(docExtensionByName.set(e,t),{effective:t,changed:!0,shadowed:g}):{effective:g,changed:!1,shadowed:t}:(docExtensionByName.set(e,t),{effective:t,changed:!0,shadowed:g})}function getDocExtension(e){return docExtensionByName.get(e)??DEFAULT_EXTENSION}function forgetDocExtension(e){docExtensionByName.delete(e)}function acquireLock(e,t){let s=resolve(e,`lock`);if(existsSync(s)){let t=null;try{t=JSON.parse(readFileSync(s,`utf-8`))}catch{console.warn(`[shadow-lock] Corrupt lock file at ${s} — replacing`)}if(t&&!isValidLockPid(t.pid)&&(console.warn(`[shadow-lock] Invalid lock pid (${String(t.pid)}) at ${s} — replacing`),t=null),t){let s=t.hostname===hostname();if(!(s&&t.pid===process.pid)){if(s&&isProcessAlive(t.pid))throw Error(`Shadow repo at ${e} is locked by another writer (pid=${t.pid}, worktree=${t.worktreeRoot}, started=${t.startedAt}). Only one active writer instance may mutate a given shadow root at a time.`);console.warn(`[shadow-lock] Stale lock detected (pid=${t.pid}, host=${t.hostname}) — replacing`)}}}let g={pid:process.pid,hostname:hostname(),startedAt:new Date().toISOString(),worktreeRoot:t};return writeFileSync(s,JSON.stringify(g,null,2),`utf-8`),s}function releaseLock(e){let t=resolve(e,`lock`);try{unlinkSync(t)}catch{}}const GIT_TIMEOUT_MS$3=(()=>{let e=process.env.OK_GIT_TIMEOUT_MS;if(!e)return 3e4;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:3e4})();function shadowGit(e){return esm_default({baseDir:e.workTree,timeout:{block:GIT_TIMEOUT_MS$3}}).env({GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree})}async function initShadowRepo(e){let t=resolveShadowDir(e),s=resolve(e,`.git/openknowledge`),g=existsSync(s),S=existsSync(t);if(g&&!S?tracedRenameSync(s,t):g&&S&&console.warn(`[shadow-repo] unexpected legacy + new shadow both present — no rename performed`),!existsSync(resolve(t,`HEAD`))){tracedMkdirSync(t,{recursive:!0}),await esm_default({baseDir:e,timeout:{block:GIT_TIMEOUT_MS$3}}).raw(`init`,`--bare`,t);let s=esm_default({timeout:{block:GIT_TIMEOUT_MS$3}}).env({GIT_DIR:t});await s.raw(`config`,`--unset`,`core.bare`),await s.raw(`config`,`core.worktree`,e),await s.raw(`config`,`user.name`,`openknowledge`),await s.raw(`config`,`user.email`,`noreply@openknowledge.local`)}let w={gitDir:t,workTree:e};return await sweepLegacyShadowRefs(w),sweepOrphanedTmpIndexFiles(w),acquireLock(t,e),w}function destroyShadowRepo(e){releaseLock(e.gitDir)}async function sweepLegacyShadowRefs(e){let t=shadowGit(e),s;try{s=(await t.raw(`for-each-ref`,`--format=%(refname)`,`refs/wip`)).trim().split(`
772
+ `+s)}function ae(e,t,s,g,S,w){if(e.listenerCount(`wsClientError`)){let g=Error(S);Error.captureStackTrace(g,ae),e.emit(`wsClientError`,g,s,t)}else ne(s,g,S,w)}}));require_stream(),require_receiver(),require_sender(),require_websocket();var import_websocket_server=__toESM(require_websocket_server(),1);init_esm$2();var import_pino=__toESM$1(require_pino(),1),import_pino_pretty=__toESM$1(require_pino_pretty(),1),import_src=require_src$14(),import_src$1=require_src$13(),import_src$2=require_src$4(),import_src$3=require_src$3(),import_src$4=require_src$2(),import_src$5=require_src$1(),import_src$6=require_src();init_esm$1();var import_lib=__toESM$1(require_lib(),1),import_yazl=__toESM$1(require_yazl(),1),import_shell_quote=__toESM$1(require_shell_quote(),1),import_ignore=__toESM$1(require_ignore(),1);const MAX_LEN=128;function sanitizeGitIdentity(e){return e.replace(/[<>\r\n]/g,``).trim().slice(0,MAX_LEN)}const AGENT_ID_RE=/^[a-zA-Z0-9_-]+$/,AGENT_ID_MAX_LEN=64;function validateAgentId(e){return typeof e!=`string`||e.length===0||e.length>64||!AGENT_ID_RE.test(e)?null:e}function toBroadcasterKey(e){return e.startsWith(`agent-`)?e:`agent-${e}`}function isPresenceEligibleAgentId(e){return!e.startsWith(`principal-`)}function resolveAgentType(e){if(!e)return`bot`;let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`cursor`)?`cursor`:t.includes(`codex`)?`codex`:t.includes(`cline`)?`cline`:t.includes(`windsurf`)?`windsurf`:`bot`}function parseAgentBodyFields(e){let t=validateAgentId(typeof e.agentId==`string`?e.agentId:null)??void 0;return{rawAgentId:t,writerId:t===void 0?void 0:toBroadcasterKey(t),displayName:typeof e.agentName==`string`?sanitizeGitIdentity(e.agentName):`Claude`,clientName:typeof e.clientName==`string`?sanitizeGitIdentity(e.clientName):void 0,clientVersion:typeof e.clientVersion==`string`?sanitizeGitIdentity(e.clientVersion):void 0,label:typeof e.label==`string`?sanitizeGitIdentity(e.label):void 0,colorSeed:typeof e.colorSeed==`string`&&e.colorSeed.length>0?e.colorSeed.slice(0,128):void 0}}function otelMixin(){let e=trace.getSpan(context.active());if(!e)return{};let t=e.spanContext();return{trace_id:t.traceId,span_id:t.spanId,trace_flags:t.traceFlags}}function shouldColorize(){return process.env.NO_COLOR&&process.env.NO_COLOR!==``?!1:process.stdout.isTTY??!1}var PinoLogger=class{name;transportConfigs=[];pinoInstance;options;constructor(e,t={}){this.name=e,this.options={name:this.name,level:process.env.LOG_LEVEL||(process.env.NODE_ENV===`test`?`silent`:`info`),serializers:{err:import_pino.default.stdSerializers.err,error:import_pino.default.stdSerializers.err},mixin:otelMixin,...t.options},t.transportConfigs&&(this.transportConfigs=t.transportConfigs),this.pinoInstance=this.buildInstance()}buildInstance(){if(this.transportConfigs.length>0)return(0,import_pino.default)(this.options,import_pino.default.transport({targets:this.transportConfigs}));try{let e=(0,import_pino_pretty.default)({colorize:shouldColorize(),translateTime:`HH:MM:ss`,ignore:`pid,hostname`});return(0,import_pino.default)(this.options,e)}catch(e){return console.warn(`[PinoLogger] pino-pretty failed, falling back to JSON:`,e),(0,import_pino.default)(this.options)}}recreateInstance(){typeof this.pinoInstance.flush==`function`&&this.pinoInstance.flush(),this.pinoInstance=this.buildInstance()}addTransport(e){this.transportConfigs.push(e),this.recreateInstance()}removeTransport(e){e>=0&&e<this.transportConfigs.length&&(this.transportConfigs.splice(e,1),this.recreateInstance())}getTransports(){return[...this.transportConfigs]}updateOptions(e){this.options={...this.options,...e},this.recreateInstance()}getPinoInstance(){return this.pinoInstance}error(e,t){this.pinoInstance.error(e,t)}warn(e,t){this.pinoInstance.warn(e,t)}info(e,t){this.pinoInstance.info(e,t)}debug(e,t){this.pinoInstance.debug(e,t)}},LoggerFactory=class{config={};loggers=new Map;configure(e){this.config=e,this.loggers.clear()}getLogger(e){let t=this.loggers.get(e);if(t)return t;let s;return s=this.config.loggerFactory?this.config.loggerFactory(e):this.config.defaultLogger?this.config.defaultLogger:new PinoLogger(e,this.config.pinoConfig),this.loggers.set(e,s),s}reset(){this.config={},this.loggers.clear()}};const loggerFactory=new LoggerFactory;function getLogger(e){return loggerFactory.getLogger(e)}function createTestLogger(e=`test`){return new PinoLogger(e,{options:{level:`silent`}})}function installTestLoggers(){loggerFactory.configure({pinoConfig:{options:{level:`silent`}}})}var AgentFocusBroadcaster=class{hocuspocus;log=getLogger(`agent-focus`);warnedMissing=!1;constructor(e){this.hocuspocus=e}setFocus(e,t){isPresenceEligibleAgentId(e)&&this.mutateAgentFocus(s=>({...s,[e]:t}))}clearFocus(e){isPresenceEligibleAgentId(e)&&this.mutateAgentFocus(t=>{if(!(e in t))return t;let{[e]:s,...g}=t;return g})}getFocusMap(){let e=this.resolveAwareness();return e?e.getLocalState()?.agentFocus??{}:{}}mutateAgentFocus(e){let t=this.resolveAwareness();if(t)try{let s=t.getLocalState()??{},g=e(s.agentFocus??{});t.setLocalState({...s,agentFocus:g})}catch(e){this.log.error({err:e},`[agent-focus] awareness mutation failed`)}}resolveAwareness(){let e=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);return e?(this.warnedMissing&&=(this.log.info({},`[agent-focus] __system__ document now available — resuming focus updates`),!1),getAwareness$1(e)):(this.warnedMissing||=(this.log.warn({},`[agent-focus] __system__ document not found — focus updates will be dropped until it is materialized`),!0),null)}};function getAwareness$1(e){return e?.awareness??null}const counters$1={reconcileCount:0,conflictCount:0,batchCount:0,upstreamImportCount:0,rescueBufferCount:0,branchSwitchCount:0,parkCount:0,gitAutoSaveFailureCount:0,gitWriterCommitFailureCount:0,cc1BroadcastCount:0,cc1BroadcastDropCount:0,cc1SubscriberCount:0,cc1LastSeq:{},serverObserverFiresA:0,serverObserverFiresB:0,serverObserverErrorsA:0,serverObserverErrorsB:0,persistenceDiskWrites:0,bridgeMergeContentLoss:0,bridgeMergeCheckpointCreated:0,bridgeInvariantViolations:0,bridgeInvariantViolationsSuppressed:0,persistenceSkipNonQuiescent:0,persistenceForceFlushDuringBurst:0,collabSocketEpipeCount:0,collabSocketEconnresetCount:0,collabMessageTooLargeCount:0,shadowMigrationLegacyRefsDeleted:0,effectDiffCaptureFailures:0,agentPresenceMutationErrors:0,agentWriteCalls:0,summariesProvided:0,summariesTruncated:0,agentPatchFindMismatches:0,bridgeToleranceApplied:{},observerAPathBFires:0,persistenceReconciliationFailures:0,externalChangeHandlerErrors:0,persistenceSanityCheckSerializeFailures:0};function incrementReconcile(){counters$1.reconcileCount++}function incrementConflict(){counters$1.conflictCount++}function incrementBatch(){counters$1.batchCount++}function incrementUpstreamImport(){counters$1.upstreamImportCount++}function incrementRescueBuffer(){counters$1.rescueBufferCount++}function incrementBranchSwitch(){counters$1.branchSwitchCount++}function incrementPark(){counters$1.parkCount++}function incrementGitAutoSaveFailure(){counters$1.gitAutoSaveFailureCount++}function incrementGitWriterCommitFailure(){counters$1.gitWriterCommitFailureCount++}function incrementCC1Broadcast(){counters$1.cc1BroadcastCount++}function incrementCC1BroadcastDrop(){counters$1.cc1BroadcastDropCount++}function setCC1SubscriberCount(e){counters$1.cc1SubscriberCount=e}function incrementServerObserverFire(e){e===`a`?counters$1.serverObserverFiresA++:counters$1.serverObserverFiresB++}function incrementPersistenceDiskWrite(){counters$1.persistenceDiskWrites++}function incrementServerObserverError(e){e===`a`?counters$1.serverObserverErrorsA++:counters$1.serverObserverErrorsB++}function incrementBridgeMergeContentLoss(){counters$1.bridgeMergeContentLoss++}function incrementAgentWriteCalls(){counters$1.agentWriteCalls++}function incrementSummariesProvided(){counters$1.summariesProvided++}function incrementSummariesTruncated(){counters$1.summariesTruncated++}function incrementBridgeMergeCheckpointCreated(){counters$1.bridgeMergeCheckpointCreated++}function incrementBridgeInvariantViolations(){counters$1.bridgeInvariantViolations++}function incrementBridgeInvariantViolationsSuppressed(){counters$1.bridgeInvariantViolationsSuppressed++}function incrementPersistenceSkipNonQuiescent(){counters$1.persistenceSkipNonQuiescent++}function incrementPersistenceForceFlushDuringBurst(){counters$1.persistenceForceFlushDuringBurst++}function incrementAgentPatchFindMismatches(){counters$1.agentPatchFindMismatches++}function incrementBridgeToleranceApplied(e){counters$1.bridgeToleranceApplied[e]=(counters$1.bridgeToleranceApplied[e]??0)+1}function incrementObserverAPathBFires(){counters$1.observerAPathBFires++}function incrementPersistenceReconciliationFailures(){counters$1.persistenceReconciliationFailures++}function incrementExternalChangeHandlerErrors(){counters$1.externalChangeHandlerErrors++}function incrementPersistenceSanityCheckSerializeFailures(){counters$1.persistenceSanityCheckSerializeFailures++}function incrementCollabSocketFilteredError(e){e===`EPIPE`?counters$1.collabSocketEpipeCount++:counters$1.collabSocketEconnresetCount++}function incrementCollabMessageTooLarge(){counters$1.collabMessageTooLargeCount++}function incrementShadowMigrationLegacyRefsDeleted(e){counters$1.shadowMigrationLegacyRefsDeleted+=e}function incrementEffectDiffCaptureFailures(){counters$1.effectDiffCaptureFailures++}function incrementAgentPresenceMutationError(){counters$1.agentPresenceMutationErrors++}function handleCollabSocketError(e){return e.code===`EPIPE`||e.code===`ECONNRESET`?(incrementCollabSocketFilteredError(e.code),!0):!1}function setCC1LastSeq(e,t){counters$1.cc1LastSeq[e]=t}function getMetrics(){return{...counters$1,cc1LastSeq:{...counters$1.cc1LastSeq},bridgeToleranceApplied:{...counters$1.bridgeToleranceApplied}}}function resetMetrics(){counters$1.reconcileCount=0,counters$1.conflictCount=0,counters$1.batchCount=0,counters$1.upstreamImportCount=0,counters$1.rescueBufferCount=0,counters$1.branchSwitchCount=0,counters$1.parkCount=0,counters$1.gitAutoSaveFailureCount=0,counters$1.gitWriterCommitFailureCount=0,counters$1.cc1BroadcastCount=0,counters$1.cc1BroadcastDropCount=0,counters$1.cc1SubscriberCount=0,counters$1.cc1LastSeq={},counters$1.serverObserverFiresA=0,counters$1.serverObserverFiresB=0,counters$1.serverObserverErrorsA=0,counters$1.serverObserverErrorsB=0,counters$1.persistenceDiskWrites=0,counters$1.bridgeMergeContentLoss=0,counters$1.bridgeMergeCheckpointCreated=0,counters$1.bridgeInvariantViolations=0,counters$1.bridgeInvariantViolationsSuppressed=0,counters$1.persistenceSkipNonQuiescent=0,counters$1.persistenceForceFlushDuringBurst=0,counters$1.collabSocketEpipeCount=0,counters$1.collabSocketEconnresetCount=0,counters$1.collabMessageTooLargeCount=0,counters$1.shadowMigrationLegacyRefsDeleted=0,counters$1.effectDiffCaptureFailures=0,counters$1.agentPresenceMutationErrors=0,counters$1.agentWriteCalls=0,counters$1.summariesProvided=0,counters$1.summariesTruncated=0,counters$1.agentPatchFindMismatches=0,counters$1.bridgeToleranceApplied={},counters$1.observerAPathBFires=0,counters$1.persistenceReconciliationFailures=0,counters$1.externalChangeHandlerErrors=0,counters$1.persistenceSanityCheckSerializeFailures=0}const BROADCASTER_EVICTION_MS=5e3*4;var AgentPresenceBroadcaster=class{hocuspocus;log=getLogger(`agent-presence`);warnedMissing=!1;destroyed=!1;constructor(e){this.hocuspocus=e}setPresence(e,t){if(!isPresenceEligibleAgentId(e))return;let s=0;this.mutateAgentPresence(g=>{let S=Date.now(),w={};for(let[t,E]of Object.entries(g)){if(S-E.ts>=2e4&&t!==e){s++;continue}w[t]=E}return w[e]=t,w})&&(this.log.debug({agentId:e,action:`set`,currentDoc:t.currentDoc,ts:t.ts},`[agent-presence] set`),s>0&&this.log.info({evictedCount:s,thresholdMs:BROADCASTER_EVICTION_MS},`[agent-presence] evicted stale entries`))}clearPresence(e){if(!isPresenceEligibleAgentId(e))return;let t=!1;this.mutateAgentPresence(s=>{if(!s[e])return s;t=!0;let{[e]:g,...S}=s;return S})&&t&&this.log.info({agentId:e,action:`clear`,currentDoc:null,ts:Date.now()},`[agent-presence] clear`)}touchMode(e,t){if(!isPresenceEligibleAgentId(e))return;let s=[],g=!1,S=this.mutateAgentPresence(S=>{let w=S[e];if(!w)return S;g=!0;let E=Date.now();return s.push({currentDoc:w.currentDoc,ts:E}),{...S,[e]:{...w,mode:t,ts:E}}}),w=s[0];S&&w?this.log.debug({agentId:e,action:`touchMode`,currentDoc:w.currentDoc,ts:w.ts,mode:t},`[agent-presence] touchMode`):g||this.log.debug({agentId:e,action:`touchMode`,mode:t,reason:`entry-missing`},`[agent-presence] touchMode skipped — no entry for agentId`)}bumpPresenceTs(e){if(!isPresenceEligibleAgentId(e))return;let t=null;this.mutateAgentPresence(s=>{let g=s[e];if(!g)return s;let S=Date.now();return t=S,{...s,[e]:{...g,ts:S}}}),t!==null&&this.log.debug({agentId:e,action:`bumpTs`,ts:t},`[agent-presence] bumpTs`)}getPresenceMap(){let e=this.resolveAwareness();return e?e.getLocalState()?.agentPresence??{}:{}}destroy(){this.destroyed=!0}mutateAgentPresence(e){if(this.destroyed)return!1;let t=this.resolveAwareness();if(!t)return!1;try{let s=t.getLocalState()??{},g=e(s.agentPresence??{});return t.setLocalState({...s,agentPresence:g}),!0}catch(e){return incrementAgentPresenceMutationError(),this.log.error({err:e},`[agent-presence] awareness mutation failed`),!1}}resolveAwareness(){let e=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);return e?(this.warnedMissing&&=(this.log.info({},`[agent-presence] __system__ document now available — resuming presence updates`),!1),getAwareness(e)):(this.warnedMissing||=(this.log.warn({},`[agent-presence] __system__ document not found — presence updates will be dropped until it is materialized`),!0),null)}};function getAwareness(e){return e?.awareness??null}const mdManager=new MarkdownManager({extensions:sharedExtensions}),schema=getSchema(sharedExtensions);function composeAndWriteRawBody(e,t,s){let g=e.getXmlFragment(`default`),S=e.getText(`source`),w=S.toString(),{body:E}=stripFrontmatter(t),D=s?{resolveEmbed:s.resolveEmbed,sourcePath:s.sourcePath}:void 0,O=mdManager.parseWithFallback(E,D),k=schema.nodeFromJSON(O);w!==t&&applyFastDiff(S,w,t),updateYFragment(e,g,k,{mapping:new Map,isOMark:new Map})}const DEBOUNCE_MS=100,MAX_DISK_ACK_SVS=1e3;function isSystemDoc(e){return e===SYSTEM_DOC_NAME}const CONFIG_DOC_NAME_SET=new Set(CONFIG_DOC_NAMES);function isConfigDoc(e){return CONFIG_DOC_NAME_SET.has(e)}var CC1Broadcaster=class{hocuspocus;seqs=new Map;timers=new Map;log=getLogger(`cc1`);warnedMissing=!1;latestDiskAckSVs=new Map;constructor(e){this.hocuspocus=e}signal(e){let t=this.timers.get(e);t!==void 0&&clearTimeout(t),this.timers.set(e,setTimeout(()=>{this.timers.delete(e),this.broadcast(e)},DEBOUNCE_MS))}broadcast(e){try{let t=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);if(!t){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found — broadcasts will be dropped until it is materialized`),!0),incrementCC1BroadcastDrop();return}let s=(this.seqs.get(e)??0)+1;this.seqs.set(e,s);let g=CC1DerivedViewPayloadSchema.parse({v:1,ch:e,seq:s});t.broadcastStateless(JSON.stringify(g)),incrementCC1Broadcast(),setCC1LastSeq(e,s),setCC1SubscriberCount(t.getConnectionsCount())}catch(t){this.log.error({err:t,channel:e},`[cc1] broadcast failed`)}}emitServerInfo(e,t){try{let s=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);if(!s){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitServerInfo — dropped`),!0),incrementCC1BroadcastDrop();return}let g=CC1ServerInfoPayloadSchema.parse({v:1,ch:CC1_CHANNEL_SERVER_INFO,seq:0,serverInstanceId:e,...t===void 0?{}:{currentBranch:t}});s.broadcastStateless(JSON.stringify(g)),incrementCC1Broadcast(),setCC1LastSeq(CC1_CHANNEL_SERVER_INFO,0)}catch(e){this.log.error({err:e},`[cc1] emitServerInfo failed`)}}emitBranchSwitched(e){try{let t=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);if(!t){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitBranchSwitched — dropped`),!0),incrementCC1BroadcastDrop();return}let s=(this.seqs.get(`branch-switched`)??0)+1;this.seqs.set(CC1_CHANNEL_BRANCH_SWITCHED,s);let g=CC1BranchSwitchedPayloadSchema.parse({v:1,ch:CC1_CHANNEL_BRANCH_SWITCHED,seq:s,branch:e});t.broadcastStateless(JSON.stringify(g)),incrementCC1Broadcast(),setCC1LastSeq(CC1_CHANNEL_BRANCH_SWITCHED,s)}catch(e){this.log.error({err:e},`[cc1] emitBranchSwitched failed`)}}emitDiskAck(e,t){if(this.latestDiskAckSVs.delete(e),this.latestDiskAckSVs.set(e,t),this.latestDiskAckSVs.size>MAX_DISK_ACK_SVS){let e=this.latestDiskAckSVs.keys().next().value;e!==void 0&&this.latestDiskAckSVs.delete(e)}try{let s=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);if(!s){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitDiskAck — dropped`),!0),incrementCC1BroadcastDrop();return}let g=(this.seqs.get(`disk-ack`)??0)+1;this.seqs.set(CC1_CHANNEL_DISK_ACK,g);let S=CC1DiskAckPayloadSchema.parse({v:1,ch:CC1_CHANNEL_DISK_ACK,seq:g,docName:e,sv:Buffer.from(t).toString(`base64`)});s.broadcastStateless(JSON.stringify(S)),incrementCC1Broadcast(),setCC1LastSeq(CC1_CHANNEL_DISK_ACK,g)}catch(t){this.log.error({err:t,docName:e},`[cc1] emitDiskAck failed`)}}getLatestDiskAckSVsAsBase64(){let e={};for(let[t,s]of this.latestDiskAckSVs)e[t]=Buffer.from(s).toString(`base64`);return e}emitConfigValidationRejected(e,t){try{let s=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);if(!s){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitConfigValidationRejected — dropped`),!0),incrementCC1BroadcastDrop();return}let g=(this.seqs.get(`config-validation-rejected`)??0)+1;this.seqs.set(CC1_CHANNEL_CONFIG_VALIDATION_REJECTED,g);let S=CC1ConfigValidationRejectedPayloadSchema.parse({v:1,ch:CC1_CHANNEL_CONFIG_VALIDATION_REJECTED,seq:g,docName:e,error:t});s.broadcastStateless(JSON.stringify(S)),incrementCC1Broadcast(),setCC1LastSeq(CC1_CHANNEL_CONFIG_VALIDATION_REJECTED,g)}catch(t){this.log.error({err:t,docName:e},`[cc1] emitConfigValidationRejected failed`)}}emitConfigIgnoreNestedError(e,t){try{let s=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);if(!s){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitConfigIgnoreNestedError — dropped`),!0),incrementCC1BroadcastDrop();return}let g=(this.seqs.get(`config-ignore-nested-error`)??0)+1;this.seqs.set(CC1_CHANNEL_CONFIG_IGNORE_NESTED_ERROR,g);let S=CC1ConfigIgnoreNestedErrorPayloadSchema.parse({v:1,ch:CC1_CHANNEL_CONFIG_IGNORE_NESTED_ERROR,seq:g,path:e,error:t});s.broadcastStateless(JSON.stringify(S)),incrementCC1Broadcast(),setCC1LastSeq(CC1_CHANNEL_CONFIG_IGNORE_NESTED_ERROR,g)}catch(t){this.log.error({err:t,path:e},`[cc1] emitConfigIgnoreNestedError failed`)}}get subscriberCount(){let e=this.hocuspocus.documents.get(SYSTEM_DOC_NAME);return e?e.getConnectionsCount():0}destroy(){for(let e of this.timers.values())clearTimeout(e);this.timers.clear()}};const TRACER_NAME=`open-knowledge-server`;let tracerProvider=null,meterProvider=null;function noopResult(){return{tracer:trace.getTracer(TRACER_NAME),meter:metrics.getMeter(TRACER_NAME)}}function initTelemetry(){if(process.env.OTEL_SDK_DISABLED!==`false`||tracerProvider)return noopResult();try{let e=(0,import_src$4.resourceFromAttributes)({[ATTR_SERVICE_NAME]:process.env.OTEL_SERVICE_NAME||`open-knowledge-server`,[ATTR_SERVICE_VERSION]:process.env.OTEL_SERVICE_VERSION||`0.2.0`}),t=new import_src.AsyncLocalStorageContextManager;context.setGlobalContextManager(t);let s=new import_src$6.BasicTracerProvider({resource:e,spanProcessors:[new import_src$6.BatchSpanProcessor(new import_src$3.OTLPTraceExporter)]});trace.setGlobalTracerProvider(s),propagation.setGlobalPropagator(new import_src$1.W3CTraceContextPropagator);let g=new import_src$5.MeterProvider({resource:e,readers:[new import_src$5.PeriodicExportingMetricReader({exporter:new import_src$2.OTLPMetricExporter})]});metrics.setGlobalMeterProvider(g),tracerProvider=s,meterProvider=g,getLogger(`telemetry`).info({otlp_endpoint:process.env.OTEL_EXPORTER_OTLP_ENDPOINT||`http://localhost:4318`,service_name:e.attributes[ATTR_SERVICE_NAME]},`OpenTelemetry initialized — traces + metrics exporting via OTLP/HTTP`)}catch(e){getLogger(`telemetry`).error({err:e},`failed to initialize OpenTelemetry — falling back to no-op`),tracerProvider=null,meterProvider=null}return noopResult()}const SHUTDOWN_TIMEOUT_MS=5e3;async function shutdownTelemetry(){if(!tracerProvider&&!meterProvider)return;let e=getLogger(`telemetry`),t=Promise.all([tracerProvider?.shutdown().catch(t=>{e.warn({err:t},`tracer provider shutdown failed`)}),meterProvider?.shutdown().catch(t=>{e.warn({err:t},`meter provider shutdown failed`)})]);await Promise.race([t.then(()=>!1),new Promise(e=>setTimeout(()=>e(!0),SHUTDOWN_TIMEOUT_MS))])&&e.warn({},`telemetry shutdown timed out after ${SHUTDOWN_TIMEOUT_MS}ms — data may be lost`),tracerProvider=null,meterProvider=null,trace.disable(),metrics.disable(),context.disable()}function getTracer(){return trace.getTracer(TRACER_NAME)}function getMeter(){return metrics.getMeter(TRACER_NAME)}async function withSpan(e,t,s){return getTracer().startActiveSpan(e,t??{},async e=>{try{let t=await s(e);return e.isRecording(),t}catch(t){throw e.recordException(t),e.setStatus({code:SpanStatusCode.ERROR,message:t instanceof Error?t.message:String(t)}),t}finally{e.end()}})}function withSpanSync(e,t,s){return getTracer().startActiveSpan(e,t??{},e=>{try{return s(e)}catch(t){throw e.recordException(t),e.setStatus({code:SpanStatusCode.ERROR,message:t instanceof Error?t.message:String(t)}),t}finally{e.end()}})}function setActiveSpanAttributes(e){let t=trace.getSpan(context.active());t&&t.setAttributes(e)}let _editSurfaceCounter=null;function editSurfaceCounter(){return _editSurfaceCounter||=getMeter().createCounter(`ok.frontmatter.edit_surface_total`,{description:`Count of frontmatter edits by surface. Bounded label: source ∈ {source-mode, mcp-write, file-watcher}.`}),_editSurfaceCounter}function recordFrontmatterEditSurface(e){editSurfaceCounter().add(1,{source:e})}const log$6=getLogger(`agent-sessions`),AGENT_WRITE_ORIGIN={source:`local`,skipStoreHooks:!1,context:{origin:`agent-write`,paired:!0}};function applyAgentMarkdownWrite(e,t,s,g){withSpanSync(`agent.applyAgentMarkdownWrite`,{attributes:{"doc.name":e.name,"agent.write_position":s,"agent.markdown.bytes":t.length}},()=>applyAgentMarkdownWriteInner(e,t,s,g))}function applyAgentMarkdownWriteInner(e,t,s,g){try{let{frontmatter:S,body:w}=stripFrontmatter(e.getText(`source`).toString()),{frontmatter:E,body:D}=stripFrontmatter(t),O,k;switch(s){case`replace`:O=E||S,k=D;break;case`prepend`:O=S,k=w.length>0?`${D}\n\n${w}`:D;break;case`append`:O=S,k=w.length>0?`${w}\n\n${D}`:D;break}O!==S&&recordFrontmatterEditSurface(`mcp-write`),composeAndWriteRawBody(e,prependFrontmatter(O,k),g)}catch(g){throw log$6.error({err:g,docName:e.name,position:s,markdownLen:t.length},`[applyAgentMarkdownWrite] failed for '${e.name}'`),g}}function applyAgentUndo(e,t,s){return withSpanSync(`agent.applyAgentUndo`,{attributes:{"doc.name":e.dc.document.name,"agent.undo_scope":t}},()=>{let g=applyAgentUndoInner(e,t,s);return setActiveSpanAttributes({"agent.undo_effective":g}),g})}function applyAgentUndoInner(e,t,s){let{dc:g,um:S,undoOrigin:w}=e,E=g.document,D=E.getXmlFragment(`default`),O=E.getText(`source`),k=!1;return E.transact(()=>{if(t===`last`){if(S.undoStack.length===0)return;S.undo(),k=!0}else for(;S.undoStack.length>0;)S.undo(),k=!0;let{body:e}=stripFrontmatter(O.toString()),g=mdManager.parseWithFallback(e,s);updateYFragment(E,D,schema.nodeFromJSON(g),{mapping:new Map,isOMark:new Map})},w),k}function createSessionOrigin(e,t,s,g,S){let w={origin:`agent-write`,paired:!0,session_id:e};t!==void 0&&(w.agent_type=t),s!==void 0&&(w.principal=s),g!==void 0&&(w.display_name=g),S!==void 0&&(w.color_seed=S),Object.freeze(w);let E={source:`local`,skipStoreHooks:!1,context:w};return Object.freeze(E),E}function createUndoOrigin(e,t){let s={origin:`agent-undo`,paired:!0,session_id:e};t!==void 0&&(s.agent_type=t),Object.freeze(s);let g={source:`local`,skipStoreHooks:!1,context:s};return Object.freeze(g),g}const MAX_AGENT_SESSIONS=256;var AgentSessionCapacityError=class extends Error{limit;constructor(e){super(`Maximum agent session count reached (${e})`),this.name=`AgentSessionCapacityError`,this.limit=e}},AgentSessionManager=class{sessions=new Map;pendingSessions=new Map;hocuspocus;maxSessions;constructor(e,t={}){this.hocuspocus=e,this.maxSessions=t.maxSessions??256}sessionKey(e,t){return`${e}\0${t}`}*sessionsForConnection(e){let t=`\0${e}`;for(let[e,s]of this.sessions)e.endsWith(t)&&(yield s)}getLiveSession(e,t){return this.sessions.get(this.sessionKey(e,t))}async getSession(e,t=`claude-1`,s){if(isSystemDoc(e)||isConfigDoc(e))throw Error(`Cannot create agent session for reserved doc: ${e}`);let g=this.sessionKey(e,t),S=this.sessions.get(g);if(S)return S;let w=this.pendingSessions.get(g);if(w)return w;if(this.sessions.size+this.pendingSessions.size>=this.maxSessions)throw new AgentSessionCapacityError(this.maxSessions);let E=this._createSession(e,t,s);this.pendingSessions.set(g,E);try{let e=await E;return this.sessions.set(g,e),e}finally{this.pendingSessions.delete(g)}}async _createSession(e,t,s){let g=s?.clientName,S=t.startsWith(`agent-`)?t.slice(6):t,w=createSessionOrigin(S,g,s?.principalId,s?.displayName,s?.colorSeed),E=createUndoOrigin(S,g),D={session_id:S,...g===void 0?{}:{agent_type:g},...s?.clientName===void 0?{}:{client_name:s.clientName},...s?.principalId===void 0?{}:{principalId:s.principalId}},O=await this.hocuspocus.openDirectConnection(e,D),k=new UndoManager([O.document.getText(`source`),O.document.getMap(`agent-flash`)],{trackedOrigins:new Set([w]),captureTimeout:500,captureTransaction:e=>e.origin!==E,ignoreRemoteMapChanges:!0}),j=({stackItem:e})=>{e.meta.set(`time`,Date.now())};return k.on(`stack-item-added`,j),k.on(`stack-item-updated`,j),log$6.info({docName:e,agentId:t},`[agent-session] Created session for: ${e} / ${t}`),{dc:O,origin:w,undoOrigin:E,um:k,agentId:t,docName:e}}hasSession(e,t=`claude-1`){return this.sessions.has(this.sessionKey(e,t))}async cleanupSession(e,t,s){try{try{t.um.destroy()}catch(e){log$6.error({err:e,...s},`[agent-session] um.destroy() failed`)}try{await t.dc.disconnect()}catch(e){log$6.error({err:e,...s},`[agent-session] dc.disconnect() failed`)}}finally{this.sessions.delete(e)}}async closeSession(e,t=`claude-1`){let s=this.sessionKey(e,t),g=this.sessions.get(s);g&&(await this.cleanupSession(s,g,{docName:e,agentId:t}),log$6.info({docName:e,agentId:t},`[agent-session] Closed session for: ${e} / ${t}`))}async closeAllForAgent(e){let t=`\0${e}`,s=[...this.pendingSessions.keys()].filter(e=>e.endsWith(t));s.length>0&&await Promise.allSettled(s.map(e=>this.pendingSessions.get(e)));let g=[...this.sessions.keys()].filter(e=>e.endsWith(t));for(let t of g){let s=this.sessions.get(t);s&&await this.cleanupSession(t,s,{agentId:e,key:t})}}async closeAllForDoc(e){let t=`${e}\0`,s=[...this.sessions.keys()].filter(e=>e.startsWith(t));for(let t of s){let s=this.sessions.get(t);s&&await this.cleanupSession(t,s,{docName:e,key:t})}}async closeAll(e){if(e){await this.closeAllForDoc(e);return}let t=[...this.sessions.keys()];for(let e of t){let t=this.sessions.get(e);t&&await this.cleanupSession(e,t,{key:e})}}};const RING_BUFFER_LIMIT=50;let _effectCounter=0;const EFFECT_CAPTURE_ORIGIN=Object.freeze({source:`local`,skipStoreHooks:!0,context:Object.freeze({origin:`effect-capture`,paired:!1})});function captureEffect(e,t,s,g){let S=e.doc;if(!S)return;let w=++_effectCounter,E=S.getMap(`agent-effects`),D=k=>{e.unobserve(D),S.off(`destroy`,O);let j=`${t}:${w}`,F={sessionId:t,timestamp:Date.now(),delta:k.delta,agent_type:g??`agent`,color_seed:s??t};try{S.transact(()=>{if(E.set(j,F),E.size>RING_BUFFER_LIMIT){let e=[...E.entries()].sort((e,t)=>e[1].timestamp-t[1].timestamp);for(let[t]of e.slice(0,E.size-RING_BUFFER_LIMIT))E.delete(t)}},EFFECT_CAPTURE_ORIGIN)}catch(e){let s=e instanceof Error?e.message:String(e);if(console.warn(JSON.stringify({event:`effect-diff-capture-failed`,sessionId:t,reason:s})),incrementEffectDiffCaptureFailures(),process.env.NODE_ENV!==`production`)throw e}},O=()=>{e.unobserve(D)};e.observe(D),S.once(`destroy`,O)}function collectItemsInDeleteSet(e,t,s){iterateDeletedStructs(e,t,e=>{e instanceof Item&&s.add(e)})}function*walkYTextItems(e){let t=e._start;for(;t!==null;)yield t,t=t.right}function synthesizeStackItemDiff(e,t){let s=[],g=[],S=t.doc,w=new Set,E=new Set;S&&S.transact(t=>{collectItemsInDeleteSet(t,e.insertions,w),collectItemsInDeleteSet(t,e.deletions,E)});let D=``,O=``,k=0,j=0;for(let e of walkYTextItems(t)){if(!(e.content instanceof ContentString))continue;let t=e.content.str,S=t.length,F=w.has(e),L=E.has(e);e.deleted?L&&(g.push({position:k,content:t,length:S}),D+=t,k+=S):(O+=t,F?s.push({position:j,content:t,length:S}):(D+=t,k+=S),j+=S)}return{insertions:s,deletions:g,before:D,after:O}}function synthesizeStackItemDiffText(e,t,s){let{before:g,after:S}=synthesizeStackItemDiff(e,t);return g===S?``:createPatch(s,g,S,void 0,void 0,{context:3})}function getBurstTs(e){let t=e.meta.get(`time`);return typeof t==`number`?t:Date.now()}function countStackItemChanges(e,t){let s=t.doc,g=new Set,S=new Set;s&&s.transact(t=>{collectItemsInDeleteSet(t,e.insertions,g),collectItemsInDeleteSet(t,e.deletions,S)});let w=0,E=0;for(let e of walkYTextItems(t)){if(!(e.content instanceof ContentString))continue;let t=e.content.str.length;!e.deleted&&g.has(e)&&(w+=t),S.has(e)&&(E+=t)}return{additions:w,deletions:E}}function listAgentActivity(e,t){let s=[],g=null,S=!1;for(let w of e.sessionsForConnection(t)){if(S=!0,!g){let e=w.origin.context,s=typeof e?.agent_type==`string`?e.agent_type:void 0,S=typeof e?.color_seed==`string`?e.color_seed:t,E=iconFromClientName(s),D=AGENT_ICON_COLORS[E]??colorFromSeed(S);g={displayName:e?.display_name||(typeof e?.agent_type==`string`?e.agent_type:void 0)||t,color:D,icon:E,connectionId:t}}let e=w.docName,E=w.um,D=w.dc.document.getText(`source`),O=[];for(let e=0;e<E.undoStack.length;e++){let t=E.undoStack[e],s=getBurstTs(t),{additions:g,deletions:S}=countStackItemChanges(t,D);O.push({stackIndex:e,ts:s,additions:g,deletions:S})}if(O.length===0)continue;O.sort((e,t)=>t.stackIndex-e.stackIndex);let k=O.reduce((e,t)=>e+t.additions,0),j=O.reduce((e,t)=>e+t.deletions,0),F=Math.max(...O.map(e=>e.ts));s.push({docName:e,additionsTotal:k,deletionsTotal:j,lastTs:F,bursts:O})}return S?(s.sort((e,t)=>t.lastTs-e.lastTs),{sessionAlive:!0,agent:g,files:s}):{sessionAlive:!1,agent:null,files:[]}}const ELLIPSIS=`…`,LINE_TERMINATOR_RE=RegExp(`[\\r\\n\\v\\f\\u0085\\u2028\\u2029]`,`g`);function normalizeSummary(e){if(e===void 0)return{kind:`absent`};if(typeof e!=`string`)return{kind:`invalid`};if(e.length===0||e.trim().length===0)return{kind:`absent`};let t=e.replace(LINE_TERMINATOR_RE,` `);return t.length<=80?{kind:`value`,value:t}:{kind:`value`,value:t.slice(0,79)+ELLIPSIS,truncatedFrom:e.length}}function isAllowedApiOrigin(e){if(e===`null`)return!0;try{let{hostname:t}=new URL(e);return t===`localhost`||t===`::1`||t===`[::1]`||/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(t)}catch{return!1}}const counters=new WeakMap;let globalCounter=0;function getCounters(e){let t=counters.get(e);return t||(t={lastUserTxGen:0,settledGen:0,lastUserTxAtMs:null},counters.set(e,t)),t}function isObserverSelfOrigin(e){if(!e||typeof e!=`object`)return!1;let t=e.context;return t!=null&&t.origin===`observer-sync`}function attachQuiescenceTracker(e){let t=t=>{if(isObserverSelfOrigin(t.origin))return;let s=getCounters(e);s.lastUserTxGen=++globalCounter,s.lastUserTxAtMs=Date.now()},s=()=>{getCounters(e).settledGen=++globalCounter};return e.on(`afterTransaction`,t),e.on(`afterAllTransactions`,s),()=>{e.off(`afterTransaction`,t),e.off(`afterAllTransactions`,s)}}const overrides=new WeakMap;function isDocQuiescent(e){let t=overrides.get(e);if(t!==void 0)return t;let s=counters.get(e);return s?s.settledGen>s.lastUserTxGen:!0}function getMsSinceLastUserTx(e,t=Date.now()){let s=counters.get(e);return!s||s.lastUserTxAtMs===null?null:Math.max(0,t-s.lastUserTxAtMs)}const DEFAULT_DEBOUNCE_S=60,lastEmitMs=new Map,MAX_VIOLATION_RATE_TUPLES=1024,lastToleranceEmitMs=new Map;function toleranceRateKey(e,t){return`${e}::${t}`}function readDebounceMs(){let e=process.env.OK_BRIDGE_VIOLATION_DEBOUNCE_S;if(e===void 0)return DEFAULT_DEBOUNCE_S*1e3;let t=Number.parseInt(e,10);return!Number.isFinite(t)||t<=0?DEFAULT_DEBOUNCE_S*1e3:t*1e3}function rateKey(e,t){return`${e}::${t??`__nodoc__`}`}function shouldEmitBridgeInvariantViolation(e,t,s=Date.now()){let g=rateKey(e,t),S=lastEmitMs.get(g),w=readDebounceMs();if(S!==void 0&&s-S<w)return!1;if(lastEmitMs.size>=MAX_VIOLATION_RATE_TUPLES)for(let[e,t]of lastEmitMs)s-t>=w&&lastEmitMs.delete(e);return lastEmitMs.set(g,s),!0}function shouldEmitBridgeToleranceApplied(e,t,s=Date.now()){let g=toleranceRateKey(e,t),S=lastToleranceEmitMs.get(g),w=readDebounceMs();return S!==void 0&&s-S<w?!1:(lastToleranceEmitMs.set(g,s),!0)}function shouldThrowOnBridgeInvariantViolation(e=process.env){return e.NODE_ENV===`test`||e.OK_BRIDGE_THROW_ON_VIOLATION===`1`}function assertBridgeInvariant(e,t,s){let g=normalizeBridge(e),S=normalizeBridge(t);if(g===S){if(e!==t){let g=detectAppliedToleranceClasses(e,t);for(let e of g)shouldEmitBridgeToleranceApplied(s.site,e,s.nowMs)&&(incrementBridgeToleranceApplied(e),console.warn(JSON.stringify({event:`bridge-tolerance-applied`,site:s.site,class:e})))}return!0}let w={site:s.site,origin:s.origin,docName:s.docName,ytextSnapshot:e,fragmentMdSnapshot:t,unifiedDiff:` ytext: ${g.slice(0,300)}\n frag: ${S.slice(0,300)}`,stack:Error().stack};if(shouldThrowOnBridgeInvariantViolation()&&!s.suppressDevThrow)throw new BridgeInvariantViolationError(w);return shouldEmitBridgeInvariantViolation(s.site,s.docName,s.nowMs)?(incrementBridgeInvariantViolations(),console.warn(JSON.stringify({event:`bridge-invariant-violation`,site:s.site,"doc.name":s.docName??null,"tolerance-class-attempted":`untracked`,"normalize-equal-modulo-tolerance":!1,ytextLen:e.length,fragmentLen:t.length,diff:w.unifiedDiff,timestamp:new Date().toISOString()})),!1):(incrementBridgeInvariantViolationsSuppressed(),!1)}const CONFIG_VALIDATION_REVERT_ORIGIN={source:`local`,skipStoreHooks:!0,context:{origin:`config-validation-revert`}},CONFIG_FILE_WATCHER_ORIGIN={source:`local`,skipStoreHooks:!0,context:{origin:`config-file-watcher`}};function normalizeFsPath(e){let t=e.split(sep).filter(Boolean);return t.length<=2?e:`...${sep}${t.slice(-2).join(sep)}`}function classifyFsPath(e){return e.includes(`${sep}.git${sep}ok${sep}`)||e.includes(`shadow-repo`)?`shadow-repo`:e.includes(`${sep}.git${sep}`)?`git`:basename(e).endsWith(`.lock`)||basename(e)===`lock`?`lock`:basename(e)===`principal.json`?`principal`:e.includes(`${sep}.ok${sep}`)&&(basename(e)===`conflicts.json`||e.includes(`${sep}conflicts${sep}`))?`conflict`:e.includes(`${sep}.ok${sep}`)?`ok-internal`:e.endsWith(`.md`)||e.endsWith(`.mdx`)?`content-md`:`other`}function buildAttrs(e,t,s){let g={"fs.operation":e,"fs.path":normalizeFsPath(t),"fs.path.role":classifyFsPath(t)};return s&&Object.assign(g,s),g}function byteLength(e){return typeof e==`string`?Buffer.byteLength(e,`utf-8`):e instanceof Uint8Array?e.byteLength:e.byteLength??0}async function tracedWriteFile(e,t,s){return withSpan(`fs.writeFile`,{attributes:buildAttrs(`writeFile`,e,{"fs.bytes":byteLength(t)})},async()=>{await writeFile(e,t,s)})}async function tracedRename(e,t){return withSpan(`fs.rename`,{attributes:buildAttrs(`rename`,t,{"fs.source_path":normalizeFsPath(e)})},async()=>{await rename(e,t)})}async function tracedMkdir(e,t){return withSpan(`fs.mkdir`,{attributes:buildAttrs(`mkdir`,e)},async()=>mkdir(e,t))}function tracedWriteFileSync(e,t,s){withSpanSync(`fs.writeFileSync`,{attributes:buildAttrs(`writeFileSync`,e,{"fs.bytes":byteLength(t)})},()=>{writeFileSync(e,t,s)})}function tracedAppendFileSync(e,t,s){withSpanSync(`fs.appendFileSync`,{attributes:buildAttrs(`appendFileSync`,e,{"fs.bytes":byteLength(t)})},()=>{appendFileSync(e,t,s)})}function tracedMkdirSync(e,t){return withSpanSync(`fs.mkdirSync`,{attributes:buildAttrs(`mkdirSync`,e)},()=>mkdirSync(e,t))}function tracedRenameSync(e,t){withSpanSync(`fs.renameSync`,{attributes:buildAttrs(`renameSync`,t,{"fs.source_path":normalizeFsPath(e)})},()=>{renameSync(e,t)})}function tracedUnlinkSync(e){withSpanSync(`fs.unlinkSync`,{attributes:buildAttrs(`unlinkSync`,e)},()=>{unlinkSync(e)})}function tracedLinkSync(e,t){withSpanSync(`fs.linkSync`,{attributes:buildAttrs(`linkSync`,t,{"fs.source_path":normalizeFsPath(e)})},()=>{linkSync(e,t)})}function tracedRmSync(e,t){withSpanSync(`fs.rmSync`,{attributes:buildAttrs(`rmSync`,e)},()=>{rmSync(e,t)})}function tracedRmdirSync(e){withSpanSync(`fs.rmdirSync`,{attributes:buildAttrs(`rmdirSync`,e)},()=>{rmdirSync(e)})}function configScopeAttr(e){if(e===`__config__/project`)return`project`;if(e===`__local__/project`)return`project-local`;if(e===`__user__/config.yml`)return`user`;if(e===`__config__/okignore`)return`project`}let _okignoreRejectionCounter=null;function okignoreRejectionCounter(){return _okignoreRejectionCounter||=getMeter().createCounter(`ok.config.ignore.rejection_total`,{description:`Count of okignore L3 rejections by error code.`}),_okignoreRejectionCounter}function emitSchemaInvalidIssueEvents(e){if(isKnownConfigError(e)&&e.code===`SCHEMA_INVALID`)for(let t of e.issues)addConfigSpanEvent(`config.validation.issue`,{"issue.path":t.path.map(e=>String(e)).join(`.`),"issue.message":t.message})}function configDocAbsPath(e,t){if(e===`__config__/project`)return resolveConfigPath(`project`,t.projectDir,t.homedirOverride);if(e===`__local__/project`)return resolveConfigPath(`project-local`,t.projectDir,t.homedirOverride);if(e===`__user__/config.yml`)return resolveConfigPath(`user`,t.projectDir,t.homedirOverride);if(e===`__config__/okignore`)return resolve(t.contentDir??t.projectDir,`.okignore`);throw Error(`configDocAbsPath: not a config doc name: ${e}`)}let cachedDefaultsYaml=null;function serializedDefaults(){return cachedDefaultsYaml===null&&(cachedDefaultsYaml=(0,import_dist$1.stringify)(ConfigSchema$1.parse({}))),cachedDefaultsYaml}function validateOkignore(e){if(e.length===0)return{ok:!0};let t=e.split(`
773
+ `);for(let e=0;e<t.length;e++){let s=t[e]??``;if(s.length!==0&&/^\s+$/.test(s))return{ok:!1,error:{code:`OKIGNORE_INVALID`,detail:`Whitespace-only pattern is not allowed.`,lineNumber:e+1}}}return{ok:!0}}function validateConfigContent(e,t){return e===`__config__/okignore`?validateOkignore(t):validateConfigYaml(t)}function defaultLkgFor(e){return e===`__config__/okignore`?``:serializedDefaults()}function validateConfigYaml(e){let t=(0,import_dist$1.parseDocument)(e);if(t.errors.length>0)return{ok:!1,error:{code:`YAML_PARSE`,detail:t.errors.map(e=>e.message).join(`; `)}};let s=t.toJSON()??{},g=ConfigSchema$1.safeParse(s);return g.success?{ok:!0}:{ok:!1,error:{code:`SCHEMA_INVALID`,issues:g.error.issues.map(e=>({path:e.path.map(e=>typeof e==`symbol`?String(e):e),message:e.message,issueCode:e.code}))}}}function loadConfigDoc(e,t,s){let g=e.getText(`source`);if(g.length>0)return;let S=configDocAbsPath(t,s),w=``;if(existsSync(S))try{w=readFileSync(S,`utf-8`)}catch(e){let t=e instanceof Error?e.message:String(e);console.warn(`[config] Could not read ${S}: ${t}. Seeding with empty content.`),w=``}let E=validateConfigContent(t,w);!E.ok&&w.length>0&&getLogger(`config-persistence`).warn({docName:t,path:S},`[config-persistence] loadConfigDoc seeding invalid content for ${t} into Y.Text — first mutation will revert to LKG`),e.transact(()=>{w.length>0&&g.insert(0,w)},CONFIG_VALIDATION_REVERT_ORIGIN),E.ok&&w.length>0?s.lkgCache.set(t,w):s.lkgCache.set(t,defaultLkgFor(t))}async function atomicWriteConfig(e,t){await tracedMkdir(dirname(e),{recursive:!0});let s=`${e}.tmp.${crypto.randomUUID()}`;try{await tracedWriteFile(s,t,`utf-8`),await tracedRename(s,e)}catch(e){try{tracedUnlinkSync(s)}catch{}throw e}}async function storeConfigDoc(e,t,s,g){return withConfigSpan(`config.persist`,{"config.scope":configScopeAttr(t),"config.transport":`fs`},async S=>{let w=await storeConfigDocInner(e,t,s,g);return S.setAttribute(`config.outcome`,persistOutcomeAttr(w)),w})}function persistOutcomeAttr(e){return e===`reverted`?`reverted`:e===`write-failed`?`rejected`:`success`}async function storeConfigDocInner(e,t,s,g){if(s===CONFIG_VALIDATION_REVERT_ORIGIN)return`no-op`;let S=e.getText(`source`),w=S.toString();if(w.length===0)return`no-op`;let E=g.lkgCache.get(t);if(E!==void 0&&w===E)return`no-op`;let D=configScopeAttr(t),O=withConfigSpanSync(`config.validate`,{"config.scope":D,"config.validation.layer":`L3`},e=>{let s=validateConfigContent(t,w);return e.setAttribute(`config.outcome`,s.ok?`success`:`rejected`),s.ok||emitSchemaInvalidIssueEvents(s.error),s});if(!O.ok)return await withConfigSpan(`config.revert`,{"config.scope":D,"config.outcome":`reverted`},async()=>{let s=E??defaultLkgFor(t);e.transact(()=>{S.length>0&&S.delete(0,S.length),S.insert(0,s)},CONFIG_VALIDATION_REVERT_ORIGIN),E===void 0&&g.lkgCache.set(t,s),t===`__config__/okignore`&&isKnownConfigError(O.error)&&okignoreRejectionCounter().add(1,{"error.code":O.error.code}),g.onConfigRejected?.(t,O.error)}),`reverted`;let k=configDocAbsPath(t,g);try{await atomicWriteConfig(k,w)}catch(e){let s=e instanceof Error?e.message:String(e);return getLogger(`config-persistence`).warn({docName:t,path:k,err:e},`[config-persistence] write-failed at ${k}: ${s}`),g.onConfigRejected?.(t,{code:`WRITE_ERROR`,detail:`Failed to persist config at ${k}: ${s}`}),`write-failed`}return g.lkgCache.set(t,w),`persisted`}function applyExternalConfigChange(e,t,s,g){if(!e)return`no-op`;let S=g.lkgCache.get(t);if(S!==void 0&&S===s)return`no-op`;let w=configScopeAttr(t),E=withConfigSpanSync(`config.validate`,{"config.scope":w,"config.validation.layer":`L3`},e=>{let g=validateConfigContent(t,s);return e.setAttribute(`config.outcome`,g.ok?`success`:`rejected`),g.ok||emitSchemaInvalidIssueEvents(g.error),g});if(!E.ok)return t===`__config__/okignore`&&isKnownConfigError(E.error)&&okignoreRejectionCounter().add(1,{"error.code":E.error.code}),g.onConfigRejected?.(t,E.error),`rejected`;let D=e.getText(`source`);return e.transact(()=>{D.length>0&&D.delete(0,D.length),D.insert(0,s)},CONFIG_FILE_WATCHER_ORIGIN),g.lkgCache.set(t,s),`applied`}let pendingContributors=new Map;function recordContributor(e,t,s,g,S,w,E,D){let O=pendingContributors.get(t);if(O||(O={writerId:t,displayName:s,colorSeed:g??s,docs:new Set,subjectOverride:S,actor:w,summaries:[],previousPaths:[]},pendingContributors.set(t,O)),O.docs.add(e),S!==void 0&&(O.subjectOverride=S),w!==void 0){let e=O.actor??{};w.principalId!==void 0&&(e.principalId=w.principalId),w.agentType!==void 0&&(e.agentType=w.agentType),w.clientName!==void 0&&(e.clientName=w.clientName),w.clientVersion!==void 0&&(e.clientVersion=w.clientVersion),w.label!==void 0&&(e.label=w.label),O.actor=e}if(typeof E==`string`&&E.length>0&&O.summaries.push(E),D&&D.length>0)for(let e of D)O.previousPaths.push(e)}function swapContributors(){let e=pendingContributors;return pendingContributors=new Map,e}function restoreContributors(e){for(let[t,s]of e){let e=pendingContributors.get(t);e||(e={writerId:t,displayName:s.displayName,colorSeed:s.colorSeed,docs:new Set,actor:s.actor,summaries:[],previousPaths:[]},pendingContributors.set(t,e));for(let t of s.docs)e.docs.add(t);s.summaries.length>0&&(e.summaries=[...s.summaries,...e.summaries]),s.previousPaths.length>0&&(e.previousPaths=[...s.previousPaths,...e.previousPaths])}}function formatContributorsFrom(e){if(e.size===0)return``;let t=[``];for(let s of e.values()){let e={v:1,id:s.writerId,name:s.displayName,colorSeed:s.colorSeed,docs:[...s.docs]};s.summaries.length>0&&(e.summaries=[...s.summaries]),t.push(`ok-contributors: ${JSON.stringify(e)}`)}return t.join(`
774
+ `)}function formatContributors(){return formatContributorsFrom(pendingContributors)}function restoreContributorEntry(e,t){let s=pendingContributors.get(e);s||(s={writerId:e,displayName:t.displayName,colorSeed:t.colorSeed,docs:new Set,actor:t.actor,summaries:[],previousPaths:[]},pendingContributors.set(e,s));for(let e of t.docs)s.docs.add(e);t.summaries.length>0&&(s.summaries=[...t.summaries,...s.summaries]),t.previousPaths.length>0&&(s.previousPaths=[...t.previousPaths,...s.previousPaths])}function clearContributors(){pendingContributors.clear()}function contributorCount(){return pendingContributors.size}function hasContributor(e){return pendingContributors.has(e)}const SUPPORTED_DOC_EXTENSIONS=[`.mdx`,`.md`],DEFAULT_EXTENSION=`.md`;function isSupportedDocFile(e){let t=extname(e).toLowerCase();return SUPPORTED_DOC_EXTENSIONS.includes(t)}function isSupportedAssetFile(e,t){let s=extname(e).slice(1).toLowerCase();return s.length>0&&t.has(s)}function stripDocExtension(e){let t=e.toLowerCase();for(let s of SUPPORTED_DOC_EXTENSIONS)if(t.endsWith(s))return e.slice(0,-s.length);return e}function canonicalize(e){let t=e.toLowerCase();return t===`.mdx`?`.mdx`:t===`.md`?`.md`:null}function rank(e){return SUPPORTED_DOC_EXTENSIONS.indexOf(e)}const docExtensionByName=new Map;function registerDocExtension(e,t){let s=canonicalize(t);if(!s)throw Error(`registerDocExtension: unsupported extension "${t}"`);let g=docExtensionByName.get(e);if(!g)return docExtensionByName.set(e,t),{effective:t,changed:!0,shadowed:null};let S=canonicalize(g);return S?S===s?{effective:g,changed:!1,shadowed:null}:rank(s)<rank(S)?(docExtensionByName.set(e,t),{effective:t,changed:!0,shadowed:g}):{effective:g,changed:!1,shadowed:t}:(docExtensionByName.set(e,t),{effective:t,changed:!0,shadowed:g})}function getDocExtension(e){return docExtensionByName.get(e)??DEFAULT_EXTENSION}function forgetDocExtension(e){docExtensionByName.delete(e)}function acquireLock(e,t){let s=resolve(e,`lock`);if(existsSync(s)){let t=null;try{t=JSON.parse(readFileSync(s,`utf-8`))}catch{console.warn(`[shadow-lock] Corrupt lock file at ${s} — replacing`)}if(t&&!isValidLockPid(t.pid)&&(console.warn(`[shadow-lock] Invalid lock pid (${String(t.pid)}) at ${s} — replacing`),t=null),t){let s=t.hostname===hostname();if(!(s&&t.pid===process.pid)){if(s&&isProcessAlive(t.pid))throw Error(`Shadow repo at ${e} is locked by another writer (pid=${t.pid}, worktree=${t.worktreeRoot}, started=${t.startedAt}). Only one active writer instance may mutate a given shadow root at a time.`);console.warn(`[shadow-lock] Stale lock detected (pid=${t.pid}, host=${t.hostname}) — replacing`)}}}let g={pid:process.pid,hostname:hostname(),startedAt:new Date().toISOString(),worktreeRoot:t};return writeFileSync(s,JSON.stringify(g,null,2),`utf-8`),s}function releaseLock(e){let t=resolve(e,`lock`);try{unlinkSync(t)}catch{}}const GIT_TIMEOUT_MS$3=(()=>{let e=process.env.OK_GIT_TIMEOUT_MS;if(!e)return 3e4;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:3e4})();function shadowGit(e){return esm_default({baseDir:e.workTree,timeout:{block:GIT_TIMEOUT_MS$3}}).env({GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree})}async function initShadowRepo(e){let t=resolveShadowDir(e),s=resolve(e,`.git/openknowledge`),g=existsSync(s),S=existsSync(t);if(g&&!S?tracedRenameSync(s,t):g&&S&&console.warn(`[shadow-repo] unexpected legacy + new shadow both present — no rename performed`),!existsSync(resolve(t,`HEAD`))){tracedMkdirSync(t,{recursive:!0}),await esm_default({baseDir:e,timeout:{block:GIT_TIMEOUT_MS$3}}).raw(`init`,`--bare`,t);let s=esm_default({timeout:{block:GIT_TIMEOUT_MS$3}}).env({GIT_DIR:t});await s.raw(`config`,`--unset`,`core.bare`),await s.raw(`config`,`core.worktree`,e),await s.raw(`config`,`user.name`,`openknowledge`),await s.raw(`config`,`user.email`,`noreply@openknowledge.local`)}let w={gitDir:t,workTree:e};return await sweepLegacyShadowRefs(w),sweepOrphanedTmpIndexFiles(w),acquireLock(t,e),w}function destroyShadowRepo(e){releaseLock(e.gitDir)}async function sweepLegacyShadowRefs(e){let t=shadowGit(e),s;try{s=(await t.raw(`for-each-ref`,`--format=%(refname)`,`refs/wip`)).trim().split(`
775
775
  `).filter(e=>e.length>0)}catch{return 0}let g=[],S={server:0,"human-":0,upstream:0};for(let e of s){let t=e.split(`/`);if(t.length<4)continue;let s=t.slice(3).join(`/`);parseWriterId(s).classification===`unknown`&&(s===`server`?(g.push(e),S.server++):s.startsWith(`human-`)?(g.push(e),S[`human-`]++):s===`upstream`&&(g.push(e),S.upstream++))}if(g.length===0)return 0;for(let e of g)try{await t.raw(`update-ref`,`-d`,e)}catch(t){console.warn(`[shadow-migration] failed to delete legacy ref ${e}:`,t)}let w=g.length;return incrementShadowMigrationLegacyRefsDeleted(w),console.warn(`[shadow-migration] deleted ${w} legacy refs: server=${S.server} human-=${S[`human-`]} upstream=${S.upstream}`),w}async function commitWip(e,t,s,g,S=`main`){return withSpan(`shadow.commitWip`,{attributes:{"shadow.writer":t.id,"shadow.branch":S}},async()=>commitWipInner(e,t,s,g,S))}async function commitWipInner(e,t,s,g,S=`main`){let w=resolve(e.gitDir,`index-wip-${t.id}`),E=`refs/wip/${S}/${t.id}`,D=shadowGit(e),O=s||`.`;try{try{let t=(await D.raw(`rev-parse`,`${E}^{tree}`)).trim();await D.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:w}).raw(`read-tree`,t)}catch(e){let t=e instanceof Error?e.message:String(e);if(!(t.includes(`unknown revision`)||t.includes(`bad revision`)))throw console.error(`[shadow-repo] Unexpected error seeding index for ${E}:`,e),e}await D.env({GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree,GIT_INDEX_FILE:w}).raw(`add`,O);let s=(await D.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:w}).raw(`write-tree`)).trim(),S=null;try{S=(await D.raw(`rev-parse`,E)).trim()}catch(e){let t=e instanceof Error?e.message:String(e);if(!t.includes(`unknown revision`)&&!t.includes(`bad revision`))throw console.error(`[shadow-repo] Unexpected error resolving ${E}:`,e),e}let k=[`commit-tree`,s,`-m`,g];S&&k.push(`-p`,S);let j=(await D.env({GIT_DIR:e.gitDir,GIT_AUTHOR_NAME:t.name,GIT_AUTHOR_EMAIL:t.email,GIT_COMMITTER_NAME:`openknowledge`,GIT_COMMITTER_EMAIL:`noreply@openknowledge.local`}).raw(...k)).trim();return await D.raw(`update-ref`,E,j),j}finally{try{rmSync(w)}catch{}}}function sweepOrphanedTmpIndexFiles(e){let t=0;try{for(let s of readdirSync(e.gitDir))if(s.startsWith(`index-wip-fanout-`))try{rmSync(resolve(e.gitDir,s)),t++}catch{}}catch{}return t}async function buildWipTree(e,t){let s=resolve(e.gitDir,`index-wip-fanout-${randomUUID()}`),g=shadowGit(e),S=t||`.`;try{return await g.env({GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree,GIT_INDEX_FILE:s}).raw(`add`,S),(await g.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:s}).raw(`write-tree`)).trim()}finally{try{rmSync(s)}catch{}}}async function commitWipFromTree(e,t,s,g,S=`main`){return withSpan(`shadow.commitWipFromTree`,{attributes:{"shadow.writer":t.id,"shadow.branch":S,"shadow.tree":s.slice(0,8)}},async()=>commitWipFromTreeInner(e,t,s,g,S))}async function commitWipFromTreeInner(e,t,s,g,S=`main`){let w=`refs/wip/${S}/${t.id}`,E=shadowGit(e),D=null;try{D=(await E.raw(`rev-parse`,w)).trim()}catch(e){let t=e instanceof Error?e.message:String(e);if(!t.includes(`unknown revision`)&&!t.includes(`bad revision`))throw console.error(`[shadow-repo] Unexpected error resolving ${w}:`,e),e}let O=[`commit-tree`,s,`-m`,g];D&&O.push(`-p`,D);let k=(await E.env({GIT_DIR:e.gitDir,GIT_AUTHOR_NAME:t.name,GIT_AUTHOR_EMAIL:t.email,GIT_COMMITTER_NAME:`openknowledge`,GIT_COMMITTER_EMAIL:`noreply@openknowledge.local`}).raw(...O)).trim();return await E.raw(`update-ref`,w,k),k}const FILE_SYSTEM_WRITER={id:`file-system`,name:`File System`,email:`file-system@openknowledge.local`},GIT_UPSTREAM_WRITER={id:`git-upstream`,name:`Git (upstream)`,email:`git@openknowledge.local`},SERVICE_WRITER={id:`openknowledge-service`,name:`Open Knowledge (service)`,email:`service@openknowledge.local`},UPSTREAM_WRITER=GIT_UPSTREAM_WRITER;async function commitUpstreamImport(e,t,s,g,S=`main`){return withSpan(`shadow.commitUpstreamImport`,{attributes:{"shadow.branch":S,"shadow.new_head":g.slice(0,8)}},async()=>commitUpstreamImportInner(e,t,s,g,S))}async function commitUpstreamImportInner(e,t,s,g,S=`main`){return commitWip(e,UPSTREAM_WRITER,t,`${formatImportSubject(s,g)}\n\n${formatOkActor({v:1,writer_id:UPSTREAM_WRITER.id,principal:null,agent_session:null,agent_type:null,client_name:null,client_version:null,label:null,display_name:UPSTREAM_WRITER.name,color_seed:UPSTREAM_WRITER.id,docs:[]})}`,S)}const SAFETY_WRITER=SERVICE_WRITER;async function safetyCheckpoint(e,t,s,g=`main`){return commitWip(e,SAFETY_WRITER,t,`${formatCheckpointSubject(`pre-${s.action}`)}\n\n${formatOkActor({v:1,writer_id:SAFETY_WRITER.id,principal:null,agent_session:null,agent_type:null,client_name:null,client_version:null,label:null,display_name:SAFETY_WRITER.name,color_seed:SAFETY_WRITER.id,docs:[]})}`,g)}async function saveInMemoryCheckpoint(e,t,s){let g=s.branch??`main`,S=shadowGit(e),w=randomUUID(),E=resolve(e.gitDir,`index-checkpoint-${w}`),D=resolve(e.gitDir,`tmp-checkpoint-blob-${w}`),O=t?`${t.replace(/\/$/,``)}/${s.docName}`:s.docName,k=Buffer.byteLength(s.contents,`utf-8`),j=formatCheckpointBodyLine(s.kind===`bridge-merge-loss`?{kind:`bridge-merge-loss`,docName:s.docName,size:k,metadata:s.metadata}:{kind:`external-change-rescue`,docName:s.docName,size:k,metadata:s.metadata}),F=`checkpoint: ${s.label}\n\n${j}`;try{tracedWriteFileSync(D,s.contents,`utf-8`);let t=(await S.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:E}).raw(`hash-object`,`-w`,D)).trim();await S.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:E}).raw(`update-index`,`--add`,`--cacheinfo`,`100644,${t},${O}`);let w=(await S.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:E}).raw(`write-tree`)).trim(),k=(await S.env({GIT_DIR:e.gitDir,GIT_AUTHOR_NAME:`openknowledge`,GIT_AUTHOR_EMAIL:`noreply@openknowledge.local`,GIT_COMMITTER_NAME:`openknowledge`,GIT_COMMITTER_EMAIL:`noreply@openknowledge.local`}).raw(`commit-tree`,w,`-m`,F)).trim();return await S.raw(`update-ref`,`refs/checkpoints/${g}/${k}`,k),k}finally{try{rmSync(E)}catch{}try{rmSync(D)}catch{}}}async function listRescueCheckpoints(e,t=`main`){let s=shadowGit(e),g;try{g=await s.raw(`for-each-ref`,`--format=%(objectname)`,`refs/checkpoints/${t}/`)}catch{return[]}let S=g.trim().split(`
776
776
  `).filter(e=>e.length===40);if(S.length===0)return[];let w;try{w=await s.raw(`log`,`--no-walk`,`--author-date-order`,`--format=%H%x00%aI%x00%s%x00%B%x1e`,...S)}catch{return[]}let E=[];for(let e of w.split(``)){let t=e.trimStart();if(!t)continue;let[g=``,S=``,w=``,D=``]=t.split(`\0`),O=parseCheckpoint(D);if(O?.kind!==`external-change-rescue`)continue;let k=O.docName??``,j=O.size??0;if(!k)try{let e=(await s.raw(`ls-tree`,`-r`,`--long`,g)).trim().split(`
777
777
  `)[0];if(e){let t=e.split(/\s+/),s=4,g=3;j===0&&(j=Number(t[3]??`0`)),k=(t[4]??``).replace(/\.mdx?$/,``).split(`/`).slice(-1)[0]??``}}catch{}k&&E.push({docName:k,timestamp:S,size:j,sha:g,label:w.replace(/^checkpoint:\s*/,``),incomingDiskSha:O.metadata.incomingDiskSha})}return E}const DEFAULT_CHECKPOINT_RETENTION={maxBridgeMergeLoss:50,maxExternalChangeRescue:50,ttlMs:720*60*60*1e3};async function gcCheckpointRefs(e,t=`main`,s=DEFAULT_CHECKPOINT_RETENTION){let g={scanned:0,deletedBridgeMergeLoss:0,deletedExternalChangeRescue:0,retained:0},S=shadowGit(e),w;try{w=await S.raw(`for-each-ref`,`--format=%(objectname) %(refname)`,`refs/checkpoints/${t}/`)}catch{return g}let E=w.trim().split(`
@@ -782,9 +782,20 @@ ${e.terminator}`}function Qa(e){return`(${Ee(e.body)})${ke(e.redirections)}`}fun
782
782
  `).trim();e&&g.push(e)}return g}function reconcile(e){if(isSystemDoc(e.docName)||isConfigDoc(e.docName))return{kind:`noop`};let{base:t,ours:s,theirs:g}=e;if(containsConflictMarkers(g))return{kind:`refused`,reason:`conflict-markers`};if(g===t)return{kind:`noop`};if(s===t)return{kind:`clean`,newContent:g};let S=splitMarkdownBlocks(t),w=splitMarkdownBlocks(s),E=splitMarkdownBlocks(g);return(S.length+1)*(w.length+1)>4e6||(S.length+1)*(E.length+1)>4e6?{kind:`refused`,reason:`too-large`}:mergeBlocks(S,w,E)}function mergeBlocks(e,t,s){let g=computeEditOps(e,t),S=computeEditOps(e,s),w=[],E=[];for(let t=0;t<e.length;t++){let s=e[t],D=g.get(t),O=S.get(t),k=D?.insertsBefore??[],j=O?.insertsBefore??[];w.push(...k,...j);let F=D?.action??`keep`,L=O?.action??`keep`;if(F===`keep`&&L===`keep`)w.push(s);else if(F===`keep`&&L!==`keep`)L===`modify`&&O?.newContent!==void 0&&w.push(O.newContent);else if(F!==`keep`&&L===`keep`)F===`modify`&&D?.newContent!==void 0&&w.push(D.newContent);else{let e=F===`modify`?D?.newContent:null,g=L===`modify`?O?.newContent:null;e===g||E.push({blockIndex:t,base:s,ours:e??``,theirs:g??``}),e!=null&&w.push(e)}}let D=g.get(e.length),O=S.get(e.length);D?.insertsBefore&&w.push(...D.insertsBefore),O?.insertsBefore&&w.push(...O.insertsBefore);let k=w.length>0?`${w.join(`
783
783
 
784
784
  `)}\n`:``;return E.length>0?{kind:`conflicts`,newContent:k,conflicts:E}:{kind:`merged`,newContent:k,mergedBlocks:w.length}}function computeEditOps(e,t){let s=new Map,g=longestCommonSubsequence(e,t);for(let t=0;t<=e.length;t++)s.set(t,{action:`keep`,insertsBefore:[]});let S=new Set,w=new Set;for(let[e,t]of g)S.add(e),w.add(t);let E=-1;for(let D=0;D<e.length;D++)if(S.has(D)){let e=g.find(e=>e[0]===D)?.[1]??-1,S=[];for(let s=E+1;s<e;s++)w.has(s)||S.push(t[s]);let O=s.get(D);O&&(O.insertsBefore=S),E=e}else{let e=g.find(e=>e[0]>D),S=e?e[1]:t.length,O=[];for(let e=E+1;e<S;e++)w.has(e)||O.push(e);if(O.length>0){let e=O[0];w.add(e);let g=s.get(D);g&&(g.action=`modify`,g.newContent=t[e])}else{let e=s.get(D);e&&(e.action=`delete`)}}let D=[];for(let e=E+1;e<t.length;e++)w.has(e)||D.push(t[e]);let O=s.get(e.length);return O&&(O.insertsBefore=D),s}function longestCommonSubsequence(e,t){let s=e.length,g=t.length,S=g+1,w=new Uint32Array((s+1)*S);for(let E=1;E<=s;E++){let s=E*S,D=(E-1)*S;for(let S=1;S<=g;S++)if(e[E-1]===t[S-1])w[s+S]=w[D+(S-1)]+1;else{let e=w[D+S],t=w[s+(S-1)];w[s+S]=e>t?e:t}}let E=[],D=s,O=g;for(;D>0&&O>0;)e[D-1]===t[O-1]?(E.push([D-1,O-1]),D--,O--):w[(D-1)*S+O]>=w[D*S+(O-1)]?D--:O--;return E.reverse()}function assertNeverDiskEvent(e){throw Error(`[DiskEvent] unhandled variant: ${JSON.stringify(e)}`)}const writeTracker=new Map,WRITE_TRACKER_TTL_MS=1e4;function registerWrite(e,t){let s=writeTracker.get(e)??[];s.push({hash:t,timestamp:Date.now()}),writeTracker.set(e,s)}function evictStaleTrackerEntries(){let e=Date.now();for(let[t,s]of writeTracker){let g=s.filter(t=>e-t.timestamp<=WRITE_TRACKER_TTL_MS);g.length===0?writeTracker.delete(t):g.length!==s.length&&writeTracker.set(t,g)}}function contentHash(e){return createHash(`sha256`).update(e).digest(`hex`)}function eventEscapesContentDir(e,t){let s;try{s=lstatSync(e)}catch(t){let s=t.code;return s===`ENOENT`?!1:(console.warn(`[file-watcher] lstat failed for escape check on ${e} (${s}), dropping event`),!0)}if(!s.isSymbolicLink())return!1;let g;try{g=realpathSync(e)}catch(t){let s=t.code;return s!==`ENOENT`&&s!==`ELOOP`&&console.warn(`[file-watcher] realpath failed for escape check on ${e} (${s}), dropping event`),!0}return!isWithinContentDir(g,t)}function pathToDocName(e,t){return stripDocExtension(relative(t,e))}function extractDocExtension(e){let t=extname(e);if(t===``)return null;let s=t.toLowerCase();return s===`.mdx`||s===`.md`?t:null}const lastKnownHash=new Map;function updateLastKnownHash(e,t){lastKnownHash.set(e,t)}function removeLastKnownHash(e){let t=lastKnownHash.get(e);return lastKnownHash.delete(e),t}async function classifyEvents(e,t,s,g){let S=[],w=[],E=[];for(let g of e)if(isSupportedDocFile(g.path)){if(s){let e=relative(t,g.path);if(s.isExcluded(e))continue}switch(g.type){case`delete`:S.push(g);break;case`create`:lastKnownHash.has(g.path)?E.push(g):w.push(g);break;case`update`:E.push(g);break}}let D=new Map,O=new Map;for(let e of w)try{D.set(e.path,await readFile$1(e.path,`utf-8`))}catch(t){t.code!==`ENOENT`&&console.warn(`[file-watcher] Failed to read ${e.path}:`,t)}for(let e of E)try{O.set(e.path,await readFile$1(e.path,`utf-8`))}catch(t){t.code!==`ENOENT`&&console.warn(`[file-watcher] Failed to read ${e.path}:`,t)}function k(e){let s=pathToDocName(e,t);if(!g)return s;let S=null;try{S=lstatSync(e)}catch(t){return t.code!==`ENOENT`&&console.warn(`[file-watcher] resolveDocName lstat failed for ${e}:`,t),g.has(s)&&g.delete(s),s}if(!S.isSymbolicLink())return g.has(s)&&g.delete(s),s;let w;try{w=realpathSync(e)}catch(t){let S=t.code;return S!==`ENOENT`&&S!==`ELOOP`&&console.warn(`[file-watcher] resolveDocName realpath failed for ${e}:`,t),g.delete(s),s}if(!isWithinContentDir(w,t))return g.delete(s),s;let E=pathToDocName(w,t);return E===s?s:(g.set(s,E),E)}let j=[],F=new Set,L=new Set;for(let e of S){let t=removeLastKnownHash(e.path);if(t)for(let s of w){if(F.has(s.path))continue;let g=D.get(s.path);if(g===void 0)continue;let S=contentHash(g);if(S===t){F.add(s.path),L.add(e.path),updateLastKnownHash(s.path,S),j.push({kind:`rename`,oldPath:e.path,newPath:s.path,oldDocName:k(e.path),newDocName:k(s.path),content:g});break}}}for(let e of S)L.has(e.path)||(removeLastKnownHash(e.path),j.push({kind:`delete`,path:e.path,docName:k(e.path)}));for(let e of w){if(F.has(e.path))continue;let t=D.get(e.path);if(t===void 0)continue;let s=contentHash(t);updateLastKnownHash(e.path,s),containsConflictMarkers(t)?j.push({kind:`conflict`,path:e.path,docName:k(e.path),content:t}):j.push({kind:`create`,path:e.path,docName:k(e.path),content:t})}for(let e of E){let t=O.get(e.path);if(t===void 0)continue;let s=contentHash(t);updateLastKnownHash(e.path,s),containsConflictMarkers(t)?j.push({kind:`conflict`,path:e.path,docName:k(e.path),content:t}):j.push({kind:`update`,path:e.path,docName:k(e.path),content:t})}return j}function isSelfWrite(e,t){let s=writeTracker.get(e);if(!s)return!1;let g=s.findIndex(e=>e.hash===t);return g<0?!1:(s.splice(g,1),s.length===0&&writeTracker.delete(e),!0)}function seedLastKnownHashes(e,t,s,g,S,w){let E=w??new Set;try{let w=readdirSync(e,{withFileTypes:!0});for(let D of w){let w=join(e,D.name),O;try{O=lstatSync(w)}catch(e){e.code!==`ENOENT`&&console.warn(`[file-watcher] Failed to lstat ${w}, skipping:`,e);continue}if(O.isSymbolicLink()){let e;try{e=realpathSync(w)}catch(e){let t=e.code;t===`ENOENT`||t===`ELOOP`?console.warn(`[file-watcher] Broken/cyclic symlink at ${w}, skipping`):console.warn(`[file-watcher] Failed to resolve symlink ${w}:`,e);continue}if(!isWithinContentDir(e,t)){console.warn(`[file-watcher] Symlink escape: ${w} → ${e}, skipping`);continue}try{let O=statSync(e);if(E.has(O.ino)){if(O.isFile()&&isSupportedDocFile(D.name)){let s=pathToDocName(w,t),E=pathToDocName(e,t);S.set(s,E);let D=g.get(E);D&&!D.aliases.includes(s)&&D.aliases.push(s)}continue}if(E.add(O.ino),O.isDirectory()){if(s){let g=relative(t,e);if(s.isDirExcluded(g))continue}seedLastKnownHashes(e,t,s,g,S,E)}else if(O.isFile()&&isSupportedDocFile(D.name)){if(s){let g=relative(t,e);if(s.isExcluded(g))continue}let E=pathToDocName(w,t),D=pathToDocName(e,t);S.set(E,D);try{let t=contentHash(readFileSync(e,`utf-8`));lastKnownHash.set(e,t);let s=extractDocExtension(e);if(s){let e=registerDocExtension(D,s);if(e.shadowed&&(console.warn(`[file-watcher] docName "${D}" has both "${e.effective}" and "${e.shadowed}" on disk; "${e.effective}" wins (industry convention). Rename or delete one to disambiguate.`),!e.changed))continue}g.set(D,{size:O.size,modified:O.mtime.toISOString(),canonicalPath:e,inode:O.ino,aliases:[E]})}catch(t){t.code!==`ENOENT`&&console.warn(`[file-watcher] Failed to seed hash for ${e}:`,t)}}}catch(t){console.warn(`[file-watcher] Failed to stat symlink target ${e}:`,t)}}else if(O.isDirectory()){if(s){let e=relative(t,w);if(s.isDirExcluded(e))continue}seedLastKnownHashes(w,t,s,g,S,E)}else if(O.isFile()&&isSupportedDocFile(D.name)){if(E.has(O.ino))continue;if(E.add(O.ino),s){let e=relative(t,w);if(s.isExcluded(e))continue}try{let e=readFileSync(w,`utf-8`);lastKnownHash.set(w,contentHash(e));let s=pathToDocName(w,t),S=extractDocExtension(w);if(S){let e=registerDocExtension(s,S);if(e.shadowed&&(console.warn(`[file-watcher] docName "${s}" has both "${e.effective}" and "${e.shadowed}" on disk; "${e.effective}" wins (industry convention). Rename or delete one to disambiguate.`),!e.changed))continue}g.set(s,{size:O.size,modified:O.mtime.toISOString(),canonicalPath:w,inode:O.ino,aliases:[]})}catch(e){let t=e.code;t===`EACCES`?console.warn(`[file-watcher] Permission denied reading ${w}, file excluded from index`):t!==`ENOENT`&&console.warn(`[file-watcher] Failed to seed hash for ${w}:`,e)}}}}catch(t){t.code!==`ENOENT`&&console.warn(`[file-watcher] Failed to read directory ${e}:`,t)}}function updateFileIndex(e,t){if(e.kind===`asset-create`||e.kind===`asset-delete`)return;let s=e.kind===`rename`?e.newDocName:e.docName;if(!(isSystemDoc(s)||isConfigDoc(s)))switch(e.kind){case`create`:case`update`:case`conflict`:{let s=e.docName,g=t.get(s),S=extractDocExtension(e.path);S&&registerDocExtension(s,S),t.set(s,{size:Buffer.byteLength(e.content,`utf-8`),modified:new Date().toISOString(),canonicalPath:g?.canonicalPath??e.path,inode:g?.inode??0,aliases:g?.aliases??[]});break}case`delete`:if(t.has(e.docName))t.delete(e.docName),forgetDocExtension(e.docName);else for(let[,s]of t){let t=s.aliases.indexOf(e.docName);if(t!==-1){s.aliases.splice(t,1);break}}break;case`rename`:{let s=t.get(e.oldDocName);t.delete(e.oldDocName),forgetDocExtension(e.oldDocName);let g=extractDocExtension(e.newPath);g&&registerDocExtension(e.newDocName,g),t.set(e.newDocName,{size:Buffer.byteLength(e.content,`utf-8`),modified:new Date().toISOString(),canonicalPath:s?.canonicalPath??e.newPath,inode:s?.inode??0,aliases:s?.aliases??[]});break}}}async function handleRawEvents(e,t,s,g,S,w){let E=e.filter(e=>eventEscapesContentDir(e.path,t)?(console.warn(`[file-watcher] Symlink escape: ${e.path}, dropping ${e.type} event`),!1):!0),D=E.filter(e=>isSupportedDocFile(e.path)),O=E.filter(e=>isSupportedAssetFile(e.path,ASSET_EXTENSIONS));if(D.length===0&&O.length===0)return;let k=D.length>0?await classifyEvents(D,t,s,w):[];for(let e of k){let t=!1;if(e.kind!==`delete`&&e.kind!==`rename`){let s=contentHash(e.content),g=e.path;try{g=realpathSync(e.path)}catch(t){let s=t.code;s!==`ENOENT`&&console.warn(`[file-watcher] realpathSync failed for self-write check on ${e.path} (${s})`)}t=isSelfWrite(g,s)}else if(e.kind===`rename`){let s=contentHash(e.content),g=e.newPath;try{g=realpathSync(e.newPath)}catch(t){let s=t.code;s!==`ENOENT`&&console.warn(`[file-watcher] realpathSync failed for self-write check on ${e.newPath} (${s})`)}t=isSelfWrite(g,s)}if(updateFileIndex(e,g),s&&!t)switch(e.kind){case`create`:s.incrementMdDir(dirname(e.docName));break;case`delete`:s.decrementMdDir(dirname(e.docName));break;case`rename`:s.decrementMdDir(dirname(e.oldDocName)),s.incrementMdDir(dirname(e.newDocName));break}if(t){getLogger(`file-watcher`).debug({kind:e.kind,path:e.kind===`rename`?e.newPath:e.path,self:!0},`[file-watcher] Skipped self-write: ${e.kind}`),_fileWatcherEventsCounter().add(1,{"disk.kind":e.kind,self:!0});continue}getLogger(`file-watcher`).debug({kind:e.kind,path:e.kind===`rename`?e.newPath:e.path},`[file-watcher] Dispatching: ${e.kind}`),_fileWatcherEventsCounter().add(1,{"disk.kind":e.kind,self:!1});let w=e.kind===`rename`?e.newPath:e.path;await withSpan(`file_watcher.process_event`,{attributes:{"disk.kind":e.kind,"disk.path":normalizeFsPath(w),"disk.path.role":classifyFsPath(w)}},async()=>S(e))}for(let e of O){if(s){let g=relative(t,e.path);if(s.isExcluded(g))continue}let g=relative(t,e.path);await S(e.type===`delete`?{kind:`asset-delete`,path:e.path,relativePath:g}:{kind:`asset-create`,path:e.path,relativePath:g})}}let _fwEventsCounterCache=null;function _fileWatcherEventsCounter(){return _fwEventsCounterCache||=getMeter().createCounter(`ok.file_watcher.events`,{description:`Number of file-watcher events classified by kind`}),_fwEventsCounterCache}async function startParcelWatcher(e,t,s,g,S){let w;try{w=await import(`@parcel/watcher`)}catch(e){return console.warn(`[file-watcher] @parcel/watcher import failed:`,e instanceof Error?e.message:e),null}try{let E=t?{ignore:t.getWatcherIgnoreGlobs()}:void 0;return await w.subscribe(e,async(w,E)=>{if(w){console.error(`[file-watcher]`,w);return}try{await handleRawEvents(E.map(e=>({type:e.type,path:e.path})),e,t,s,g,S)}catch(e){console.error(`[file-watcher] parcel batch error:`,e)}},E)}catch(e){return console.warn(`[file-watcher] @parcel/watcher subscribe failed, falling back to chokidar:`,e),null}}async function startChokidarWatcher(e,t,s,g,S){let{watch:w}=await import(`./chokidar-CxU7f6JW.mjs`);console.warn(`[file-watcher] @parcel/watcher unavailable, using chokidar fallback`);let E=w(e,{ignoreInitial:!0,followSymlinks:!1,ignored:t?(s,g)=>{let S=relative(e,s);return S===``||S===`.`?!1:g?.isDirectory()?t.isDirExcluded(S):t.isExcluded(S)}:void 0});E.on(`error`,e=>console.error(`[file-watcher] chokidar error:`,e));let D=50,O=[],k=null;function j(w,E){O.push({type:w,path:E}),k||=setTimeout(()=>{let w=O;O=[],k=null,handleRawEvents(w,e,t,s,g,S).catch(e=>console.error(`[file-watcher] chokidar batch error:`,e))},50)}return E.on(`add`,e=>j(`create`,e)),E.on(`change`,e=>j(`update`,e)),E.on(`unlink`,e=>j(`delete`,e)),{unsubscribe:()=>(k&&(clearTimeout(k),k=null,O=[]),E.close())}}async function startWatcher(e,t,s){let g;try{g=realpathSync(e)}catch{g=e}let S=new Map,w=new Map;seedLastKnownHashes(g,g,s,S,w);let E=setInterval(evictStaleTrackerEntries,WRITE_TRACKER_TTL_MS),D,O;try{let e=await startParcelWatcher(g,s,S,t,w);e?(D=e,O=`parcel`):(D=await startChokidarWatcher(g,s,S,t,w),O=`chokidar`)}catch(e){throw clearInterval(E),e}let k=D.unsubscribe.bind(D);return console.log(`[file-watcher] Watching ${g} for external .md changes (backend: ${O})`),{async unsubscribe(){return clearInterval(E),writeTracker.clear(),lastKnownHash.clear(),k()},getFileIndex(){return S},getAliasMap(){return w},pruneFileIndexNowExcluded(){if(!s)return 0;let e=0;for(let[t,w]of S){let E=relative(g,w.canonicalPath);s.isExcluded(E)&&(S.delete(t),e++)}return e}}}function normalizeBody(e){let{body:t}=stripFrontmatter(e);return normalizeBridge(t).trim()}function isWhitespace(e){return e===` `||e===`
785
- `||e===` `||e===`\r`}function classifyDuplication(e,t){let s=normalizeBody(t);if(s.length===0)return{kind:`allow`,reason:`empty-base`};let g=normalizeBody(e);if(g===s)return{kind:`allow`,reason:`identical`};if(g.length<s.length*2)return{kind:`allow`,reason:`too-short`};let S=0,w=0;for(;S<g.length;){if(g.slice(S,S+s.length)!==s)return{kind:`allow`,reason:`not-integer-multiple`};for(S+=s.length,w++;S<g.length&&isWhitespace(g[S]??``);)S++}return w>=2?{kind:`block`,reason:`structural-duplication`,copies:w}:{kind:`allow`,reason:`single-copy`}}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:g,mdManager:S,schema:w}=e,E=(t,s)=>{let g=process.env.OK_TELEMETRY_VERBOSE===`1`;console.warn(JSON.stringify({...t.toLog({verbose:g}),docName:e.docName??null,timestamp:new Date().toISOString()})),incrementBridgeMergeContentLoss();let S=e.shadow?.();if(!S||!e.docName)return;let w=e.getBranch?.()??`main`,E=e.contentRoot??``;queueMicrotask(()=>{saveInMemoryCheckpoint(S,E,{kind:`bridge-merge-loss`,docName:e.docName,contents:s,label:`Before concurrent merge @ ${new Date().toISOString()}`,branch:w,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(`
785
+ `||e===` `||e===`\r`}function classifyDuplication(e,t){let s=normalizeBody(t);if(s.length===0)return{kind:`allow`,reason:`empty-base`};let g=normalizeBody(e);if(g===s)return{kind:`allow`,reason:`identical`};if(g.length<s.length*2)return{kind:`allow`,reason:`too-short`};let S=0,w=0;for(;S<g.length;){if(g.slice(S,S+s.length)!==s)return{kind:`allow`,reason:`not-integer-multiple`};for(S+=s.length,w++;S<g.length&&isWhitespace(g[S]??``);)S++}return w>=2?{kind:`block`,reason:`structural-duplication`,copies:w}:{kind:`allow`,reason:`single-copy`}}let _liveEntriesGauge=null;function liveEntriesGauge(){return _liveEntriesGauge||=getMeter().createUpDownCounter(`rename.log_entries_total`,{description:`Live rename-log entry count after each append / GC pass`}),_liveEntriesGauge}let _gcDroppedCounter=null;function gcDroppedCounter(){return _gcDroppedCounter||=getMeter().createCounter(`rename.log_gc_dropped_total`,{description:`Cumulative count of rename-log entries dropped by reachability GC`}),_gcDroppedCounter}const RENAME_LOG_HARD_CAP_BYTES=5*1024*1024,RENAME_LOG_MAX_LINE_BYTES=4*1024,RENAME_LOG_FILENAME=`renames.jsonl`;function createEmptyIndex(){return{byTo:new Map,byFrom:new Map}}function renameLogPath(e){return resolve(e,RENAME_LOG_FILENAME)}function validateEntry(e){if(typeof e!=`object`||!e)return null;let t=e;if(t.v!==1||typeof t.from!=`string`||t.from.length===0||typeof t.to!=`string`||t.to.length===0||t.from===t.to||typeof t.at!=`string`||t.at.length===0||typeof t.commitSha!=`string`||t.commitSha!==``&&!/^[0-9a-f]{40}$/.test(t.commitSha)||typeof t.branch!=`string`||t.branch.length===0||typeof t.groupId!=`string`||t.groupId.length===0||t.kind!==`file`&&t.kind!==`folder`||t.actor===null||typeof t.actor!=`object`)return null;let s=t.actor;return typeof s.writerId!=`string`||s.writerId.length===0||typeof s.displayName!=`string`?null:{v:1,from:t.from,to:t.to,at:t.at,commitSha:t.commitSha,branch:t.branch,groupId:t.groupId,kind:t.kind,actor:{writerId:s.writerId,displayName:s.displayName}}}function removeFromByFrom(e,t){let s=e.byFrom.get(t.from);if(!s)return;let g=s.filter(e=>e!==t);g.length===0?e.byFrom.delete(t.from):e.byFrom.set(t.from,g)}function indexRemove(e,t){e.byTo.delete(t.to),removeFromByFrom(e,t)}function indexInsert(e,t){let s=e.byTo.get(t.to);s&&removeFromByFrom(e,s),e.byTo.set(t.to,t);let g=e.byFrom.get(t.from);g?g.push(t):e.byFrom.set(t.from,[t])}function loadRenameLogIndex(e){let t=createEmptyIndex(),s=renameLogPath(e);if(!existsSync(s))return t;let g;try{g=readFileSync(s,`utf-8`)}catch(e){return console.warn(`[rename-log] WARN: failed to read ${s}, treating as empty:`,e),t}if(g.length===0)return t;let S=g.split(`
786
+ `),w=S[S.length-1];w!==``&&console.warn(`[rename-log] WARN: trailing line missing newline (${w.length} bytes); dropped`);let E=S.slice(0,-1);for(let e=0;e<E.length;e++){let s=E[e];if(s.length===0)continue;let g;try{g=JSON.parse(s)}catch(t){let g=s.slice(0,80),S=t.message;console.warn(`[rename-log] WARN: corrupt entry at line ${e+1} skipped (${S}): ${g}${s.length>80?`...`:``}`);continue}let S=validateEntry(g);if(!S){console.warn(`[rename-log] WARN: corrupt entry at line ${e+1} skipped`);continue}indexInsert(t,S)}return t.byTo.size>0&&liveEntriesGauge().add(t.byTo.size),t}function appendRenameLogEntry(e,t,s,g){let S=validateEntry(t);if(!S)throw Error(`[rename-log] refusing to append malformed entry`);let w=`${JSON.stringify(S)}\n`;if(Buffer.byteLength(w,`utf-8`)>RENAME_LOG_MAX_LINE_BYTES)throw Error(`[rename-log] entry exceeds max line size (${RENAME_LOG_MAX_LINE_BYTES} bytes)`);let E=renameLogPath(e),D=!1;if(existsSync(E))try{let e=statSync(E).size;e>5242880&&(D=!0,console.warn(`[rename-log] WARN: file size ${e} exceeds hard cap ${RENAME_LOG_HARD_CAP_BYTES}; forcing GC sweep`))}catch{}tracedAppendFileSync(E,w,{flag:`a`}),indexInsert(s,S),liveEntriesGauge().add(1),D&&g&&scheduleHardCapGc(g,s)}const gcPending=new Set;function scheduleHardCapGc(e,t){queueMicrotask(()=>{gcRenameLog(e,t).catch(e=>{console.warn(`[rename-log] WARN: hard-cap forced GC failed:`,e)})})}let _moduleIndex=null;function setRenameLogIndex(e,t){_moduleIndex={shadowDir:e,index:t}}function getOrLoadRenameLogIndex(e){if(_moduleIndex&&_moduleIndex.shadowDir===e)return _moduleIndex.index;let t=loadRenameLogIndex(e);return _moduleIndex={shadowDir:e,index:t},t}function serializeIndexToString(e){let t=[];for(let s of e.byTo.values())t.push(JSON.stringify(s));return t.length>0?`${t.join(`
787
+ `)}\n`:``}function parseGitTimeoutMs(){let e=process.env.OK_GIT_TIMEOUT_MS;if(!e)return 3e4;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:3e4}function expandPredecessors(e,t,s){let g=[],S=new Set,w=e,E=0;for(;;){if(g.length>=100){console.warn(`[rename-log] WARN: predecessor chain depth exceeded 100 while expanding "${e}"; truncating`);break}if(S.has(w)){console.warn(`[rename-log] WARN: cycle detected at "${w}" while expanding predecessors of "${e}"; truncating`);break}S.add(w);let D=s.byTo.get(w);if(!D||D.branch!==t)break;if(D.commitSha===``){E+=1;break}g.push({path:D.from,renameCommit:D.commitSha}),w=D.from}return g.reverse(),g.push({path:e,renameCommit:null}),{chain:g,skipped:E}}function createAncestorShaSetCache(){return new Map}function createSeedsCache(){return new Map}async function buildSeeds(e,t,s,g){return withSpan(`rename.buildSeeds`,void 0,async S=>{if(g){let e=g.get(`${s}:${t}`);if(e)return S.setAttribute(`rename.seeds_count`,e.length),S.setAttribute(`rename.cache_hit`,!0),e}let w=shadowGit(e),E;try{E=(await w.raw(`show`,`-s`,`--format=%aI`,t)).trim()}catch(e){return console.warn(`[rename-log] WARN: buildSeeds: git show failed for rename commit ${t}; falling back to single-seed:`,e),S.setAttribute(`rename.seeds_count`,1),[t]}if(!E)return S.setAttribute(`rename.seeds_count`,1),[t];let D;try{D=await w.raw(`for-each-ref`,`--sort=-creatordate`,`--format=%(creatordate:iso8601-strict) %(objectname)`,`refs/checkpoints/${s}/`)}catch(e){return console.warn(`[rename-log] WARN: buildSeeds: for-each-ref failed for branch ${s}; falling back to single-seed:`,e),S.setAttribute(`rename.seeds_count`,1),[t]}let O=[t];for(let e of D.split(`
788
+ `)){let s=e.trim();if(!s)continue;let g=s.lastIndexOf(` `);if(g<0)continue;let S=s.slice(0,g),w=s.slice(g+1);w.length===40&&w!==t&&S<E&&O.push(w)}return S.setAttribute(`rename.seeds_count`,O.length),g&&g.set(`${s}:${t}`,O),O})}const REV_LIST_STDIN_THRESHOLD_BYTES=100*1024;async function revListReachable(e,t){if(t.length===0)return``;if(t.reduce((e,t)=>e+t.length+1,0)<REV_LIST_STDIN_THRESHOLD_BYTES)return shadowGit(e).raw(`rev-list`,...t);let s=parseGitTimeoutMs();return new Promise((g,S)=>{let w=spawn(`git`,[`rev-list`,`--stdin`],{env:{...process.env,GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree},stdio:[`pipe`,`pipe`,`pipe`]}),E=[],D=[];w.stdout.on(`data`,e=>E.push(e)),w.stderr.on(`data`,e=>D.push(e));let O=!1,k=setTimeout(()=>{if(!O){O=!0;try{w.kill(`SIGKILL`)}catch{}S(Error(`git rev-list --stdin timed out after ${s}ms`))}},s);w.on(`error`,e=>{O||(O=!0,clearTimeout(k),S(e))}),w.on(`close`,e=>{if(!O){if(O=!0,clearTimeout(k),e!==0){let t=Buffer.concat(D).toString(`utf-8`).trim();S(Error(`git rev-list --stdin exited ${e}: ${t}`));return}g(Buffer.concat(E).toString(`utf-8`))}});try{w.stdin.end(`${t.join(`
789
+ `)}\n`)}catch(e){if(O)return;O=!0,clearTimeout(k),S(e)}})}async function logSeededReachable(e,t,s,g){if(s.length===0)return``;if(s.reduce((e,t)=>e+t.length+1,0)<REV_LIST_STDIN_THRESHOLD_BYTES){let S=[...t,...s,...g?[`--`,g]:[]];return shadowGit(e).raw(`log`,...S)}let S=parseGitTimeoutMs();return new Promise((w,E)=>{let D=spawn(`git`,[`log`,`--stdin`,...t,...g?[`--`,g]:[]],{env:{...process.env,GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree},stdio:[`pipe`,`pipe`,`pipe`]}),O=[],k=[];D.stdout.on(`data`,e=>O.push(e)),D.stderr.on(`data`,e=>k.push(e));let j=!1,F=setTimeout(()=>{if(!j){j=!0;try{D.kill(`SIGKILL`)}catch{}E(Error(`git log --stdin timed out after ${S}ms`))}},S);D.on(`error`,e=>{j||(j=!0,clearTimeout(F),E(e))}),D.on(`close`,e=>{if(!j){if(j=!0,clearTimeout(F),e!==0){let t=Buffer.concat(k).toString(`utf-8`).trim();E(Error(`git log --stdin exited ${e}: ${t}`));return}w(Buffer.concat(O).toString(`utf-8`))}});try{D.stdin.end(`${s.join(`
790
+ `)}\n`)}catch(e){if(j)return;j=!0,clearTimeout(F),E(e)}})}async function buildAncestorShaSet(e,t,s,g){return withSpan(`rename.buildAncestorShaSet`,void 0,async S=>{if(t.length===0)return S.setAttribute(`rename.ancestor_shas_count`,0),new Set;let w=`${s}:${[...t].sort().join(`,`)}`;if(g){let e=g.get(w);if(e)return S.setAttribute(`rename.ancestor_shas_count`,e.size),S.setAttribute(`rename.cache_hit`,!0),e}let E;try{E=await revListReachable(e,t)}catch(e){return console.warn(`[rename-log] WARN: buildAncestorShaSet: rev-list failed (${t.length} seeds); falling back to empty set:`,e),S.setAttribute(`rename.ancestor_shas_count`,0),new Set}let D=new Set;for(let e of E.split(`
791
+ `)){let t=e.trim();t.length===40&&D.add(t)}return g&&g.set(w,D),S.setAttribute(`rename.ancestor_shas_count`,D.size),D})}function batchCheckExistence(e,t){if(t.length===0)return Promise.resolve([]);let s=parseGitTimeoutMs();return new Promise(g=>{let S=spawn(`git`,[`cat-file`,`--batch-check`,`--buffer`],{env:{...process.env,GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree},stdio:[`pipe`,`pipe`,`ignore`]}),w=[];S.stdout.on(`data`,e=>w.push(e));let E=()=>t.map(()=>!1),D=!1,O=e=>{D||(D=!0,g(e))},k=setTimeout(()=>{console.warn(`[rename-log] WARN: batchCheckExistence timed out after ${s}ms (${t.length} probes); returning all-false`);try{S.kill(`SIGKILL`)}catch{}O(E())},s);S.on(`error`,e=>{clearTimeout(k),console.warn(`[rename-log] WARN: batchCheckExistence spawn error: ${e.message}`),O(E())}),S.on(`close`,(e,s)=>{if(clearTimeout(k),e!==null&&e!==0||s&&!D){console.warn(`[rename-log] WARN: batchCheckExistence exited code=${e} signal=${s??`none`}; returning all-false`),O(E());return}let g=Buffer.concat(w).toString(`utf-8`).split(`
792
+ `).filter(e=>e.length>0);O(t.map((e,t)=>{let s=g[t];return s?!s.endsWith(` missing`):!1}))});let j=t.map(e=>`${e.sha}:${e.path}`).join(`
793
+ `);try{S.stdin.end(`${j}\n`)}catch(e){clearTimeout(k),console.warn(`[rename-log] WARN: batchCheckExistence stdin write failed: ${e.message}`),O(E())}})}function rewriteJsonlAtomically(e,t){let s=renameLogPath(e),g=serializeIndexToString(t);if(g.length===0){if(existsSync(s))try{tracedWriteFileSync(s,``)}catch(e){console.warn(`[rename-log] WARN: failed to truncate empty jsonl:`,e)}return}let S=`${s}.tmp`;try{tracedWriteFileSync(S,g),tracedRenameSync(S,s)}catch(e){console.warn(`[rename-log] WARN: atomic rewrite failed; index ahead of disk:`,e);try{existsSync(S)&&tracedUnlinkSync(S)}catch{}}}function backfillRenameLogCommitSha(e,t,s,g){if(!/^[0-9a-f]{40}$/.test(s))return console.warn(`[rename-log] WARN: backfill rejected invalid commitSha: ${JSON.stringify(s)}`),{updated:0};let S=0;for(let e of g.byTo.values())e.commitSha===``&&e.actor.writerId===t&&(e.commitSha=s,S+=1);return S>0&&rewriteJsonlAtomically(e,g),{updated:S}}function sweepLazyPopOrphans(e,t){let s=[];for(let e of t.byTo.values())e.commitSha===``&&s.push(e);if(s.length===0)return{dropped:0};for(let e of s)indexRemove(t,e);return rewriteJsonlAtomically(e,t),liveEntriesGauge().add(-s.length),console.warn(`[rename-log] gc swept ${s.length} orphan entries (lazy-pop residue from mid-rename crash)`),{dropped:s.length}}async function gcRenameLog(e,t,s){let g={scanned:0,dropped:0,retained:0,rebuilt:0};if(gcPending.has(e.gitDir))return g;gcPending.add(e.gitDir);try{return await gcRenameLogInner(e,t,s,g)}finally{gcPending.delete(e.gitDir)}}async function gcRenameLogInner(e,t,s,g){let S=shadowGit(e),w=[];for(let e of t.byTo.values())e.commitSha!==``&&w.push({entry:e,observedSha:e.commitSha});let E;try{E=(await S.raw(`for-each-ref`,`--format=%(refname)`,`refs/wip/`,`refs/checkpoints/`)).split(`
794
+ `).map(e=>e.trim()).filter(Boolean)}catch(e){return console.warn(`[rename-log] WARN: gcRenameLog aborted — failed to enumerate refs:`,e),g}let D=new Set;if(E.length>0){let t;try{t=await revListReachable(e,E)}catch(e){return console.warn(`[rename-log] WARN: gcRenameLog aborted — rev-list failed:`,e),g}for(let e of t.split(`
795
+ `)){let t=e.trim();t.length===40&&D.add(t)}}g.scanned=t.byTo.size;let O=[];for(let{entry:e,observedSha:s}of w)D.has(s)||t.byTo.get(e.to)===e&&e.commitSha===s&&O.push(e);for(let e of O)t.byTo.get(e.to)===e&&indexRemove(t,e);if(g.dropped=O.length,g.retained=t.byTo.size,s?.rebuild){let s;try{s=await S.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 w=await buildBranchReachabilityMap(e,E);for(let e of s.split(``)){let s=e.trimStart();if(!s)continue;let S=s.split(`\0`),E=(S[0]??``).trim(),O=(S[1]??``).trim(),k=S[2]??``;if(E.length!==40||!D.has(E))continue;let j=parseOkActors(k),F=0;for(let e of j)F+=e.previous_paths?.length??0;if(F===0)continue;let L=F>1?`folder`:`file`,B=lookupBranchInMap(w,E),H=deriveGroupId(E,``,``);for(let e of j)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:O||new Date(0).toISOString(),commitSha:E,branch:B,groupId:H,kind:L,actor:{writerId:e.writer_id,displayName:e.display_name}}),g.rebuilt+=1,g.retained+=1)}}return(g.dropped>0||g.rebuilt>0)&&rewriteJsonlAtomically(e.gitDir,t),g.dropped>0&&(console.warn(`[rename-log] gc swept ${g.dropped} dead entries (${g.retained} live remain)`),gcDroppedCounter().add(g.dropped),liveEntriesGauge().add(-g.dropped)),g.rebuilt>0&&liveEntriesGauge().add(g.rebuilt),g}function deriveGroupId(e,t,s){let g=createHash(`sha256`);g.update(`${e}\0${t}\0${s}`);let S=g.digest(`hex`);return`${S.slice(0,8)}-${S.slice(8,12)}-${S.slice(12,16)}-${S.slice(16,20)}-${S.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 g=s.get(t[1])??[];g.push(e),s.set(t[1],g)}let g=new Map;for(let[t,S]of s){let s;try{s=await revListReachable(e,S)}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 w=new Set;for(let e of s.split(`
796
+ `)){let t=e.trim();t.length===40&&w.add(t)}g.set(t,w)}return g}function lookupBranchInMap(e,t){for(let[s,g]of e)if(g.has(t))return s;return`main`}async function resolveDocPathAtCommit(e,t,s,g,S,w,E,D){let{chain:O}=expandPredecessors(t,g,S),k=await Promise.all(O.map(async t=>{if(t.renameCommit===null)return null;let s=await buildSeeds(e,t.renameCommit,g,D);return s.length===0?new Set:buildAncestorShaSet(e,s,g,E)})),j=[];for(let e=O.length-1;e>=0;e--){let t=O[e],g=k[e];g!==null&&!g.has(s)||j.push({sha:s,path:w(t.path)})}if(j.length===0)return null;let F=await batchCheckExistence(e,j);for(let e=0;e<j.length;e++)if(F[e])return j[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:g,mdManager:S,schema:w}=e,E=(t,s)=>{let g=process.env.OK_TELEMETRY_VERBOSE===`1`;console.warn(JSON.stringify({...t.toLog({verbose:g}),docName:e.docName??null,timestamp:new Date().toISOString()})),incrementBridgeMergeContentLoss();let S=e.shadow?.();if(!S||!e.docName)return;let w=e.getBranch?.()??`main`,E=e.contentRoot??``;queueMicrotask(()=>{saveInMemoryCheckpoint(S,E,{kind:`bridge-merge-loss`,docName:e.docName,contents:s,label:`Before concurrent merge @ ${new Date().toISOString()}`,branch:w,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(`
786
797
  `).slice(0,4).join(`
787
- `)})})})},D=``,O=!1,k=!1,j=()=>stripFrontmatter(g.toString()).frontmatter;try{let e=yXmlFragmentToProseMirrorRootNode(s,w).toJSON(),t=S.serialize(e);D=prependFrontmatter(j(),t)}catch(e){incrementServerObserverError(`a`),console.warn(`[Server Observer A] Baseline init failed — starting from empty snapshot:`,e instanceof Error?e.message:String(e)),D=``}let F=()=>{try{let e=yXmlFragmentToProseMirrorRootNode(s,w).toJSON(),O=S.serialize(e),k=prependFrontmatter(j(),O);if(D===k)return;let F=g.toString();if(normalizeBridge(F)===normalizeBridge(k)){D=k;return}let L=D,B={mergedText:null};t.transact(()=>{if(F===D)applyIncrementalDiff(g,F,k);else try{let e=mergeThreeWay(D,k,F);applyFastDiff(g,F,e),B.mergedText=e}catch(e){if(!(e instanceof BridgeMergeContentLossError)||(E(e,L),shouldRethrowBridgeMergeLoss()))throw e;applyFastDiff(g,F,e.info.result),B.mergedText=e.info.result}},OBSERVER_SYNC_ORIGIN),B.mergedText!==null&&(incrementObserverAPathBFires(),console.warn(JSON.stringify({event:`observer-a-path-b-fired`,xmlFragmentAdvanced:!0,ytextDiverged:!0,mergeBytesChanged:Math.abs(B.mergedText.length-F.length)}))),incrementServerObserverFire(`a`),D=g.toString()}catch(e){incrementServerObserverError(`a`),console.error(`[Server Observer A] Failed to sync tree→text:`,e);try{D=g.toString()}catch(e){console.warn(`[Server Observer A] Baseline recovery also failed:`,e)}}},L=(e,t)=>{if(t.origin!==OBSERVER_SYNC_ORIGIN){if(isPairedWriteOrigin(t.origin)){try{let e=j();D=g.toString(),B=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)),O=!0}return}O=!0}};if(s.length>0&&g.length===0)try{let e=yXmlFragmentToProseMirrorRootNode(s,w).toJSON(),E=S.serialize(e),O=prependFrontmatter(j(),E);t.transact(()=>{g.insert(0,O)},OBSERVER_SYNC_ORIGIN),D=O}catch(e){incrementServerObserverError(`a`),console.error(`[Server Observer A] Failed initial sync:`,e),D=``}let B=j(),H=()=>{try{let w=g.toString(),{frontmatter:E,body:O}=stripFrontmatter(w);if(normalizeBridge(D)===normalizeBridge(w)){B!==E&&(recordFrontmatterEditSurface(`source-mode`),B=E);return}let k=e.resolveEmbed&&e.docName?{resolveEmbed:e.resolveEmbed,sourcePath:e.docName}:void 0,j=S.parseWithFallback(O,k),F=e.schema.nodeFromJSON(j);t.transact(()=>{updateYFragment(t,s,F,{mapping:new Map,isOMark:new Map})},OBSERVER_SYNC_ORIGIN),B!==E&&(recordFrontmatterEditSurface(`source-mode`),B=E),incrementServerObserverFire(`b`);try{let t=prependFrontmatter(E,S.serialize(j));assertBridgeInvariant(g.toString(),t,{site:`observer-b`,docName:e.docName}),D=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),D=prependFrontmatter(E,O)}}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,w).toJSON(),t=S.serialize(e);D=prependFrontmatter(j(),t)}catch(e){if(e instanceof BridgeInvariantViolationError)throw e;console.warn(`[Server Observer B] Baseline recovery also failed:`,e)}}},q=(e,t)=>{if(t.origin!==OBSERVER_SYNC_ORIGIN){if(isPairedWriteOrigin(t.origin)){try{let e=j();D=g.toString(),B=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)),k=!0}return}k=!0}},J=(t,s)=>{if(!O&&!k){e.onDispatch?.(`none`);return}if(s.every(e=>e.origin===OBSERVER_SYNC_ORIGIN)){O=!1,k=!1,e.onDispatch?.(`none`);return}O&&(O=!1,e.onDispatch?.(`a`),F()),k&&(k=!1,e.onDispatch?.(`b`),H())};s.observeDeep(L),g.observe(q),t.on(`afterAllTransactions`,J);let Y=attachQuiescenceTracker(t);return()=>{Y(),t.off(`afterAllTransactions`,J),s.unobserveDeep(L),g.unobserve(q)}}const log$5=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,g=t?.();return g&&g.id===s&&g.display_name&&g.display_email?{id:g.id,name:g.display_name,email:g.display_email}:{id:s,name:`Local User`,email:`${s}@openknowledge.local`}}return SERVICE_WRITER}return null}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 g=e?.projectDir??process.cwd(),S=e?.shadowRef,w=e?.contentRoot??(relative(g,s)||`.`),E=e?.backlinkIndex,D=e?.getPrincipal,O=e?.onAgentCommit,k=e?.onDiskFlush,j={projectDir:g,contentDir:s,lkgCache:new Map,homedirOverride:e?.configHomedirOverride,onConfigRejected:e?.onConfigRejected},F=new Set,L=e?.applyDiskContentToDoc??applyDiskContentToDoc,B=null,H=8,q=new Map,J=e?.gitEnabled??!0,Y=e?.commitDebounceMs??15e3,ee=e?.wipRef??`refs/wip/main`,te=e?.getCurrentBranch,ne=null,ae=0,oe=null,se=!1,ce=null,ue=new Map;async function de(){Te();let e=Date.now();return withSpan(`persistence.commitToWipRef`,void 0,async()=>await fe()).finally(()=>{we?.record((Date.now()-e)/1e3)})}async function fe(){let e=S?.current;if(e){let t=swapContributors(),s=te?.()??`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:[]},g=`${formatWipSubject([])}\n\n${formatOkActor(t)}`;try{let t=await commitWip(e,SERVICE_WRITER,w,g,s);ae=0,log$5.info({sha:t.slice(0,8),writer:SERVICE_WRITER.id},`[persistence] Shadow WIP commit: ${t.slice(0,8)} on refs/wip/${SERVICE_WRITER.id}`)}catch(e){ae++,incrementGitAutoSaveFailure(),log$5.error({err:e,attempt:ae},`[persistence] Shadow commit failed (attempt ${ae})`),ae>=3&&log$5.error({attempt:ae},`[persistence] CRITICAL: Git auto-save has failed 3+ times. Version history is NOT being recorded.`)}return}let g;try{g=await buildWipTree(e,w)}catch(e){restoreContributors(t),ae++,incrementGitAutoSaveFailure(),log$5.error({err:e,attempt:ae},`[persistence] Shadow WIP tree build failed (attempt ${ae})`);return}let S=!1;for(let[w,E]of t){let t={id:w,name:E.displayName,email:`${w}@openknowledge.local`},D=[...E.docs],k=E.actor,j=[...E.summaries],F={v:1,writer_id:w,principal:k?.principalId??null,agent_session:w.startsWith(`agent-`)?w.slice(6):null,agent_type:k?.agentType??null,client_name:k?.clientName??null,client_version:k?.clientVersion??null,label:k?.label??null,display_name:E.displayName,color_seed:E.colorSeed,docs:D,...j.length>0?{summaries:j}:{}},L=`${composeCommitSubject(E.subjectOverride??formatWipSubject(D),j)}\n\n${formatOkActor(F)}`;try{let E=await commitWipFromTree(e,t,g,L,s);S=!0,log$5.info({sha:E.slice(0,8),writer:w,tree:g.slice(0,8)},`[persistence] Shadow WIP commit: ${E.slice(0,8)} on refs/wip/${w}`),w.startsWith(`agent-`)&&O?.()}catch(e){restoreContributorEntry(w,E),incrementGitWriterCommitFailure(),log$5.error({err:e,writer:w},`[persistence] Per-writer shadow commit failed for ${w}`)}}S?ae=0:(ae++,incrementGitAutoSaveFailure(),ae>=3&&log$5.error({attempt:ae},`[persistence] CRITICAL: Git auto-save has failed 3+ times. Version history is NOT being recorded.`));return}let t=shadowGit({gitDir:resolve(g,`.git`),workTree:g}),s=resolve(g,`.git/index-wip`),E={GIT_INDEX_FILE:s};try{try{let e=(await t.raw(`rev-parse`,`HEAD^{tree}`)).trim();await t.env(E).raw(`read-tree`,e)}catch(e){let t=e instanceof Error?e.message:String(e);t.includes(`unknown revision`)||t.includes(`bad revision`)?log$5.info({},`[persistence] Empty repo — starting with empty index`):log$5.error({err:e},`[persistence] Failed to read HEAD tree, falling back to empty index`)}await t.env(E).raw(`add`,w);let e=(await t.env(E).raw(`write-tree`)).trim(),s=null;try{s=(await t.raw(`rev-parse`,ee)).trim()}catch(e){let t=e instanceof Error?e.message:String(e);if(!t.includes(`unknown revision`)&&!t.includes(`bad revision`))throw e}let g=[`commit-tree`,e,`-m`,`WIP auto-save ${new Date().toISOString()}`];s&&g.push(`-p`,s);let S=(await t.raw(...g)).trim();await t.raw(`update-ref`,ee,S),ae=0,log$5.info({sha:S.slice(0,8),wipRef:ee},`[persistence] Git commit: ${S.slice(0,8)} on ${ee}`)}catch(e){ae++,incrementGitAutoSaveFailure(),log$5.error({err:e,attempt:ae},`[persistence] Git commit failed (attempt ${ae})`),ae>=3&&log$5.error({attempt:ae},`[persistence] CRITICAL: Git auto-save has failed 3+ times. Version history is NOT being recorded.`)}finally{try{tracedUnlinkSync(s)}catch{}}}function me(e){if(e<=0)return Y;let t=2**Math.min(e,5),s=Math.random()*.25*Y;return Y*t+s}function ge(){J&&(isBatchInProgress()||(ne&&clearTimeout(ne),ne=setTimeout(()=>{if(ne=null,oe){se=!0;return}oe=de().finally(()=>{oe=null,se&&(se=!1,ge())})},me(ae))))}async function _e(){ne&&(clearTimeout(ne),ne=null,oe||=de().finally(()=>{oe=null,se&&(se=!1,ge())})),oe&&await oe}function ve(t,s,g){try{let S=t.getXmlFragment(`default`),w=e?.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:g}:void 0,E=mdManager.parseWithFallback(s,w),D=schema.nodeFromJSON(E);t.transact(()=>{updateYFragment(t,S,D,{mapping:new Map,isOMark:new Map})},OBSERVER_SYNC_ORIGIN)}catch(e){incrementPersistenceReconciliationFailures(),log$5.warn({err:e,documentName:g},`[persistence] reconcileFragmentNow failed for ${g}`)}}let ye=null,Ce=null,we=null;function Te(){if(ye)return;let e=getMeter();ye=e.createHistogram(`ok.persistence.load.duration`,{description:`Duration of persistence.onLoadDocument in seconds`,unit:`s`}),Ce=e.createHistogram(`ok.persistence.store.duration`,{description:`Duration of persistence.onStoreDocument in seconds`,unit:`s`}),we=e.createHistogram(`ok.persistence.git_commit.duration`,{description:`Duration of commitToWipRef drain in seconds`,unit:`s`})}async function De({document:e,documentName:t,lastTransactionOrigin:g}){Te();let S=Date.now();return withSpan(`persistence.onStoreDocument`,{attributes:{"doc.name":t}},async()=>{let S=e.getMap(`lifecycle`).get(`status`);if(S===`deleted-upstream`||S===`renamed`){log$5.info({documentName:t,lifecycleStatus:S},`[persistence] Skipped store for ${t}: lifecycle=${S}`),q.delete(t),F.delete(t);return}if(!isDocQuiescent(e)){let s=q.get(t)??0;if(s<8){let g=getMsSinceLastUserTx(e);console.warn(JSON.stringify({event:`persistence-skip-non-quiescent`,"doc.name":t,wallClockMsSinceLastTransaction:g??null,deferCount:s})),incrementPersistenceSkipNonQuiescent(),q.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:w,json:O}=captureDocSnapshotForPersistence(e),{frontmatter:j,body:B}=stripFrontmatter(e.getText(`source`).toString()),H=prependFrontmatter(j,B),J;try{J=assertBridgeInvariant(H,prependFrontmatter(j,mdManager.serialize(O)),{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$5.warn({err:e,documentName:t},`[persistence] Sanity-check serialize failed for ${t}; proceeding with ytext bytes`),J=!1}J||ve(e,B,t);let Y=getReconciledBase(t);if(Y!==void 0&&normalizeBridge(H)===normalizeBridge(Y)){contributorCount()>0&&ge(),q.delete(t);return}if(Y===void 0&&normalizeBridge(H)===``){log$5.warn({documentName:t},`[persistence] Skipped phantom write for ${t}: empty Y.Doc with no reconciled base`),q.delete(t);return}let ee=resolveWriterFromOrigin(g,D);if(ee&&ee.id!==SERVICE_WRITER.id&&(hasContributor(ee.id)||recordContributor(t,ee.id,ee.name,ee.id)),Y!==void 0){let g=classifyDuplication(H,Y);if(g.kind===`block`){if(F.has(t)){log$5.warn({documentName:t},`[persistence] Tripwire breaker active — skipping duplicate store for ${t}`);return}let S=e.getXmlFragment(`default`).length;console.warn(JSON.stringify({event:`ok-persistence-duplication-blocked`,"doc.name":t,candidateBytes:H.length,baseBytes:Y.length,fragmentChildren:S,copies:g.copies,reason:g.reason}));try{let g=safeContentPath(t,s),S;if(existsSync(g)){let e=null;try{e=realpathSync(g)}catch(e){log$5.warn({err:e,documentName:t},`[persistence] Tripwire reset realpath failed for ${t}; using currentBase`)}if(e&&isWithinContentDir(e,s))try{S=readFileSync(e,`utf-8`)}catch(s){log$5.warn({err:s,documentName:t,canonical:e},`[persistence] Tripwire reset readFileSync failed for ${t}; using currentBase`),S=Y}else e&&console.warn(`[persistence] symlink-escape on tripwire reset: ${g} → ${e}, using currentBase`,{docName:t,originalPath:g,canonical:e,contentDir:s}),S=Y}else S=Y;e.transact(()=>{L(e,S)},FILE_WATCHER_ORIGIN),F.delete(t)}catch(e){F.add(t),log$5.error({err:e,documentName:t},`[persistence] Tripwire reset failed for ${t}`)}q.delete(t);return}}let te=safeContentPath(t,s);await tracedMkdir(dirname(te),{recursive:!0});let ne;try{ne=await realpath(te)}catch(e){let s=e.code;if(s===`ENOENT`){let e=!1;try{e=lstatSync(te).isSymbolicLink()}catch(e){e.code!==`ENOENT`&&log$5.warn({err:e,path:te},`[persistence] lstat failed during broken-symlink check`)}e&&console.warn(`[persistence] broken-symlink fallback`,{docName:t,reason:`broken-symlink`}),ne=te}else if(s===`ELOOP`)throw console.error(`[persistence] Symlink cycle at ${te}`),Error(`Symlink cycle detected at ${te}`);else throw e}if(!isWithinContentDir(ne,s)){let e=`symlink-escape: ${te} resolves to ${ne} outside ${s}`;throw console.error(`[persistence] ${e}`,{docName:t,originalPath:te,canonical:ne,contentDir:s}),Error(e)}let ae=`${ne}.tmp.${crypto.randomUUID()}`;try{await tracedWriteFile(ae,H,`utf-8`),await tracedRename(ae,ne),registerWrite(ne,contentHash(H)),incrementPersistenceDiskWrite();try{k?.(t,w)}catch(e){log$5.warn({err:e,documentName:t},`[persistence] onDiskFlush callback failed for ${t}`)}}catch(e){try{tracedUnlinkSync(ae)}catch{}throw q.delete(t),log$5.error({err:e,documentName:t},`[persistence] Failed to save ${t}`),e}log$5.info({filePath:ne,bytes:H.length},`[persistence] Wrote ${ne} (${H.length} bytes)`),setReconciledBase(t,H),F.delete(t),q.delete(t),E&&(E.updateDocumentFromMarkdown(t,H),E.saveToDisk().catch(e=>{log$5.warn({err:e,documentName:t},`[backlinks] Failed to persist cache for ${t}`)})),setActiveSpanAttributes({"persistence.bytes":H.length}),ge()}).finally(()=>{Ce?.record((Date.now()-S)/1e3)})}function je({document:e,documentName:t,lastTransactionOrigin:s}){ue.set(t,{branch:getActiveBranch(),document:e,lastTransactionOrigin:s})}async function Me(e=`within-branch`){return ce?(B=B===`discard-stale`||e===`discard-stale`?`discard-stale`:`within-branch`,ce):(ce=(async()=>{let t=e;for(;;){let e=[...ue.entries()];if(ue.clear(),t!==`discard-stale`){for(let[t,s]of e)if(s.branch===getActiveBranch())try{await De({document:s.document,documentName:t,lastTransactionOrigin:s.lastTransactionOrigin})}catch(e){log$5.error({err:e,documentName:t},`[persistence] Deferred store failed for ${t}`)}}let s=B;if(B=null,ue.size===0&&s===null)break;t=s??`within-branch`}})().finally(()=>{ce=null}),ce)}let Pe={async onLoadDocument({document:t,documentName:g,context:S}){if(isSystemDoc(g))return;if(isConfigDoc(g)){loadConfigDoc(t,g,j);return}Te();let w=Date.now();return withSpan(`persistence.onLoadDocument`,{attributes:{"doc.name":g}},async()=>{log$5.info({documentName:g,connections:t.getConnectionsCount?.()??`?`},`[persistence] onLoadDocument called for ${g} (connections: ${t.getConnectionsCount?.()??`?`})`);let S=safeContentPath(g,s);if(!existsSync(S))return;try{let e=realpathSync(S);if(!isWithinContentDir(e,s)){console.warn(`[persistence] symlink-escape on load: ${S} → ${e}, refusing`);return}}catch(e){if(e.code===`ELOOP`){console.warn(`[persistence] Symlink cycle on load: ${S}, refusing`);return}}let w=readFileSync(S,`utf-8`),E=t.getXmlFragment(`default`);log$5.info({documentName:g,fragmentLength:E.length},`[persistence] onLoadDocument ${g}: fragment.length=${E.length} before update`),E.length===0?(t.transact(()=>{applyDiskContentToDoc(t,w,e?.resolveEmbed,g)},FILE_WATCHER_ORIGIN),log$5.info({filePath:S,children:E.length},`[persistence] Loaded ${S} into Y.Doc (${E.length} children)`),E.observeDeep(()=>{log$5.info({documentName:g,fragmentLength:E.length},`[persistence] MUTATION on ${g}: fragment.length=${E.length}`)})):log$5.info({documentName:g,children:E.length},`[persistence] Skipped load for ${g} — fragment already has ${E.length} children`),setReconciledBase(g,w)}).finally(()=>{ye?.record((Date.now()-w)/1e3)})},async onStoreDocument({document:e,documentName:t,lastTransactionOrigin:s,lastContext:g}){if(!isSystemDoc(t)){if(isConfigDoc(t)){await storeConfigDoc(e,t,s,j);return}if(isBatchInProgress()){je({document:e,documentName:t,lastTransactionOrigin:s});return}return De({document:e,documentName:t,lastTransactionOrigin:s})}}};async function Ie(){oe&&await oe}return{extension:Pe,flushDeferredStores:Me,flushPendingGitCommit:_e,waitForPendingCommits:Ie,configPersistenceCtx:j}}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(`#`),g=s>=0?t.slice(0,s):t,S=g.indexOf(`?`);return S>=0?g.slice(0,S):g}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,g=``;for(;s.length>0;){if(t.inComment){let e=s.indexOf(`-->`);if(e===-1)return g;s=s.slice(e+3),t.inComment=!1;continue}let e=s.indexOf(`<!--`);if(e===-1)return g+s;g+=s.slice(0,e),s=s.slice(e+4),t.inComment=!0}return g}function extractLocalAssetHrefs(e){let t=new Set,s=createCodeFenceTracker(),g={inComment:!1};for(let S of e.replaceAll(`\r
798
+ `)})})})},D=``,O=!1,k=!1,j=()=>stripFrontmatter(g.toString()).frontmatter;try{let e=yXmlFragmentToProseMirrorRootNode(s,w).toJSON(),t=S.serialize(e);D=prependFrontmatter(j(),t)}catch(e){incrementServerObserverError(`a`),console.warn(`[Server Observer A] Baseline init failed — starting from empty snapshot:`,e instanceof Error?e.message:String(e)),D=``}let F=()=>{try{let e=yXmlFragmentToProseMirrorRootNode(s,w).toJSON(),O=S.serialize(e),k=prependFrontmatter(j(),O);if(D===k)return;let F=g.toString();if(normalizeBridge(F)===normalizeBridge(k)){D=k;return}let L=D,B={mergedText:null};t.transact(()=>{if(F===D)applyIncrementalDiff(g,F,k);else try{let e=mergeThreeWay(D,k,F);applyFastDiff(g,F,e),B.mergedText=e}catch(e){if(!(e instanceof BridgeMergeContentLossError)||(E(e,L),shouldRethrowBridgeMergeLoss()))throw e;applyFastDiff(g,F,e.info.result),B.mergedText=e.info.result}},OBSERVER_SYNC_ORIGIN),B.mergedText!==null&&(incrementObserverAPathBFires(),console.warn(JSON.stringify({event:`observer-a-path-b-fired`,xmlFragmentAdvanced:!0,ytextDiverged:!0,mergeBytesChanged:Math.abs(B.mergedText.length-F.length)}))),incrementServerObserverFire(`a`),D=g.toString()}catch(e){incrementServerObserverError(`a`),console.error(`[Server Observer A] Failed to sync tree→text:`,e);try{D=g.toString()}catch(e){console.warn(`[Server Observer A] Baseline recovery also failed:`,e)}}},L=(e,t)=>{if(t.origin!==OBSERVER_SYNC_ORIGIN){if(isPairedWriteOrigin(t.origin)){try{let e=j();D=g.toString(),B=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)),O=!0}return}O=!0}};if(s.length>0&&g.length===0)try{let e=yXmlFragmentToProseMirrorRootNode(s,w).toJSON(),E=S.serialize(e),O=prependFrontmatter(j(),E);t.transact(()=>{g.insert(0,O)},OBSERVER_SYNC_ORIGIN),D=O}catch(e){incrementServerObserverError(`a`),console.error(`[Server Observer A] Failed initial sync:`,e),D=``}let B=j(),H=()=>{try{let w=g.toString(),{frontmatter:E,body:O}=stripFrontmatter(w);if(normalizeBridge(D)===normalizeBridge(w)){B!==E&&(recordFrontmatterEditSurface(`source-mode`),B=E);return}let k=e.resolveEmbed&&e.docName?{resolveEmbed:e.resolveEmbed,sourcePath:e.docName}:void 0,j=S.parseWithFallback(O,k),F=e.schema.nodeFromJSON(j);t.transact(()=>{updateYFragment(t,s,F,{mapping:new Map,isOMark:new Map})},OBSERVER_SYNC_ORIGIN),B!==E&&(recordFrontmatterEditSurface(`source-mode`),B=E),incrementServerObserverFire(`b`);try{let t=prependFrontmatter(E,S.serialize(j));assertBridgeInvariant(g.toString(),t,{site:`observer-b`,docName:e.docName}),D=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),D=prependFrontmatter(E,O)}}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,w).toJSON(),t=S.serialize(e);D=prependFrontmatter(j(),t)}catch(e){if(e instanceof BridgeInvariantViolationError)throw e;console.warn(`[Server Observer B] Baseline recovery also failed:`,e)}}},q=(e,t)=>{if(t.origin!==OBSERVER_SYNC_ORIGIN){if(isPairedWriteOrigin(t.origin)){try{let e=j();D=g.toString(),B=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)),k=!0}return}k=!0}},J=(t,s)=>{if(!O&&!k){e.onDispatch?.(`none`);return}if(s.every(e=>e.origin===OBSERVER_SYNC_ORIGIN)){O=!1,k=!1,e.onDispatch?.(`none`);return}O&&(O=!1,e.onDispatch?.(`a`),F()),k&&(k=!1,e.onDispatch?.(`b`),H())};s.observeDeep(L),g.observe(q),t.on(`afterAllTransactions`,J);let Y=attachQuiescenceTracker(t);return()=>{Y(),t.off(`afterAllTransactions`,J),s.unobserveDeep(L),g.unobserve(q)}}const log$5=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,g=t?.();return g&&g.id===s&&g.display_name&&g.display_email?{id:g.id,name:g.display_name,email:g.display_email}:{id:s,name:`Local User`,email:`${s}@openknowledge.local`}}return SERVICE_WRITER}return null}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 g=e?.projectDir??process.cwd(),S=e?.shadowRef,w=e?.contentRoot??(relative(g,s)||`.`),E=e?.backlinkIndex,D=e?.getPrincipal,O=e?.onAgentCommit,k=e?.onDiskFlush,j={projectDir:g,contentDir:s,lkgCache:new Map,homedirOverride:e?.configHomedirOverride,onConfigRejected:e?.onConfigRejected},F=new Set,L=e?.applyDiskContentToDoc??applyDiskContentToDoc,B=null,H=8,q=new Map,J=e?.gitEnabled??!0,Y=e?.commitDebounceMs??15e3,ee=e?.wipRef??`refs/wip/main`,te=e?.getCurrentBranch,ne=null,ae=0,oe=null,se=!1,ce=null,ue=new Map;async function de(){Te();let e=Date.now();return withSpan(`persistence.commitToWipRef`,void 0,async()=>await fe()).finally(()=>{we?.record((Date.now()-e)/1e3)})}async function fe(){let e=S?.current;if(e){let t=swapContributors(),s=te?.()??`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:[]},g=`${formatWipSubject([])}\n\n${formatOkActor(t)}`;try{let t=await commitWip(e,SERVICE_WRITER,w,g,s);ae=0,log$5.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$5.warn({err:e},`[rename-log] service-writer backfill failed`)}}catch(e){ae++,incrementGitAutoSaveFailure(),log$5.error({err:e,attempt:ae},`[persistence] Shadow commit failed (attempt ${ae})`),ae>=3&&log$5.error({attempt:ae},`[persistence] CRITICAL: Git auto-save has failed 3+ times. Version history is NOT being recorded.`)}return}let g;try{g=await buildWipTree(e,w)}catch(e){restoreContributors(t),ae++,incrementGitAutoSaveFailure(),log$5.error({err:e,attempt:ae},`[persistence] Shadow WIP tree build failed (attempt ${ae})`);return}let S=!1;for(let[w,E]of t){let t={id:w,name:E.displayName,email:`${w}@openknowledge.local`},D=[...E.docs],k=E.actor,j=[...E.summaries],F=[...E.previousPaths],L={v:1,writer_id:w,principal:k?.principalId??null,agent_session:w.startsWith(`agent-`)?w.slice(6):null,agent_type:k?.agentType??null,client_name:k?.clientName??null,client_version:k?.clientVersion??null,label:k?.label??null,display_name:E.displayName,color_seed:E.colorSeed,docs:D,...j.length>0?{summaries:j}:{},...F.length>0?{previous_paths:F}:{}},B=`${composeCommitSubject(E.subjectOverride??formatWipSubject(D),j)}\n\n${formatOkActor(L)}`;try{let E=await commitWipFromTree(e,t,g,B,s);S=!0,log$5.info({sha:E.slice(0,8),writer:w,tree:g.slice(0,8)},`[persistence] Shadow WIP commit: ${E.slice(0,8)} on refs/wip/${w}`);try{backfillRenameLogCommitSha(e.gitDir,w,E,getOrLoadRenameLogIndex(e.gitDir))}catch(e){log$5.warn({err:e},`[rename-log] backfill failed; will retry next commit`)}w.startsWith(`agent-`)&&O?.()}catch(e){restoreContributorEntry(w,E),incrementGitWriterCommitFailure(),log$5.error({err:e,writer:w},`[persistence] Per-writer shadow commit failed for ${w}`)}}S?ae=0:(ae++,incrementGitAutoSaveFailure(),ae>=3&&log$5.error({attempt:ae},`[persistence] CRITICAL: Git auto-save has failed 3+ times. Version history is NOT being recorded.`));return}let t=shadowGit({gitDir:resolve(g,`.git`),workTree:g}),s=resolve(g,`.git/index-wip`),E={GIT_INDEX_FILE:s};try{try{let e=(await t.raw(`rev-parse`,`HEAD^{tree}`)).trim();await t.env(E).raw(`read-tree`,e)}catch(e){let t=e instanceof Error?e.message:String(e);t.includes(`unknown revision`)||t.includes(`bad revision`)?log$5.info({},`[persistence] Empty repo — starting with empty index`):log$5.error({err:e},`[persistence] Failed to read HEAD tree, falling back to empty index`)}await t.env(E).raw(`add`,w);let e=(await t.env(E).raw(`write-tree`)).trim(),s=null;try{s=(await t.raw(`rev-parse`,ee)).trim()}catch(e){let t=e instanceof Error?e.message:String(e);if(!t.includes(`unknown revision`)&&!t.includes(`bad revision`))throw e}let g=[`commit-tree`,e,`-m`,`WIP auto-save ${new Date().toISOString()}`];s&&g.push(`-p`,s);let S=(await t.raw(...g)).trim();await t.raw(`update-ref`,ee,S),ae=0,log$5.info({sha:S.slice(0,8),wipRef:ee},`[persistence] Git commit: ${S.slice(0,8)} on ${ee}`)}catch(e){ae++,incrementGitAutoSaveFailure(),log$5.error({err:e,attempt:ae},`[persistence] Git commit failed (attempt ${ae})`),ae>=3&&log$5.error({attempt:ae},`[persistence] CRITICAL: Git auto-save has failed 3+ times. Version history is NOT being recorded.`)}finally{try{tracedUnlinkSync(s)}catch{}}}function me(e){if(e<=0)return Y;let t=2**Math.min(e,5),s=Math.random()*.25*Y;return Y*t+s}function ge(){J&&(isBatchInProgress()||(ne&&clearTimeout(ne),ne=setTimeout(()=>{if(ne=null,oe){se=!0;return}oe=de().finally(()=>{oe=null,se&&(se=!1,ge())})},me(ae))))}async function _e(){ne&&(clearTimeout(ne),ne=null,oe||=de().finally(()=>{oe=null,se&&(se=!1,ge())})),oe&&await oe}function ve(t,s,g){try{let S=t.getXmlFragment(`default`),w=e?.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:g}:void 0,E=mdManager.parseWithFallback(s,w),D=schema.nodeFromJSON(E);t.transact(()=>{updateYFragment(t,S,D,{mapping:new Map,isOMark:new Map})},OBSERVER_SYNC_ORIGIN)}catch(e){incrementPersistenceReconciliationFailures(),log$5.warn({err:e,documentName:g},`[persistence] reconcileFragmentNow failed for ${g}`)}}let ye=null,Ce=null,we=null;function Te(){if(ye)return;let e=getMeter();ye=e.createHistogram(`ok.persistence.load.duration`,{description:`Duration of persistence.onLoadDocument in seconds`,unit:`s`}),Ce=e.createHistogram(`ok.persistence.store.duration`,{description:`Duration of persistence.onStoreDocument in seconds`,unit:`s`}),we=e.createHistogram(`ok.persistence.git_commit.duration`,{description:`Duration of commitToWipRef drain in seconds`,unit:`s`})}async function De({document:e,documentName:t,lastTransactionOrigin:g}){Te();let S=Date.now();return withSpan(`persistence.onStoreDocument`,{attributes:{"doc.name":t}},async()=>{let S=e.getMap(`lifecycle`).get(`status`);if(S===`deleted-upstream`||S===`renamed`){log$5.info({documentName:t,lifecycleStatus:S},`[persistence] Skipped store for ${t}: lifecycle=${S}`),q.delete(t),F.delete(t);return}if(!isDocQuiescent(e)){let s=q.get(t)??0;if(s<8){let g=getMsSinceLastUserTx(e);console.warn(JSON.stringify({event:`persistence-skip-non-quiescent`,"doc.name":t,wallClockMsSinceLastTransaction:g??null,deferCount:s})),incrementPersistenceSkipNonQuiescent(),q.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:w,json:O}=captureDocSnapshotForPersistence(e),{frontmatter:j,body:B}=stripFrontmatter(e.getText(`source`).toString()),H=prependFrontmatter(j,B),J;try{J=assertBridgeInvariant(H,prependFrontmatter(j,mdManager.serialize(O)),{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$5.warn({err:e,documentName:t},`[persistence] Sanity-check serialize failed for ${t}; proceeding with ytext bytes`),J=!1}J||ve(e,B,t);let Y=getReconciledBase(t);if(Y!==void 0&&normalizeBridge(H)===normalizeBridge(Y)){contributorCount()>0&&ge(),q.delete(t);return}if(Y===void 0&&normalizeBridge(H)===``){log$5.warn({documentName:t},`[persistence] Skipped phantom write for ${t}: empty Y.Doc with no reconciled base`),q.delete(t);return}let ee=resolveWriterFromOrigin(g,D);if(ee&&ee.id!==SERVICE_WRITER.id&&(hasContributor(ee.id)||recordContributor(t,ee.id,ee.name,ee.id)),Y!==void 0){let g=classifyDuplication(H,Y);if(g.kind===`block`){if(F.has(t)){log$5.warn({documentName:t},`[persistence] Tripwire breaker active — skipping duplicate store for ${t}`);return}let S=e.getXmlFragment(`default`).length;console.warn(JSON.stringify({event:`ok-persistence-duplication-blocked`,"doc.name":t,candidateBytes:H.length,baseBytes:Y.length,fragmentChildren:S,copies:g.copies,reason:g.reason}));try{let g=safeContentPath(t,s),S;if(existsSync(g)){let e=null;try{e=realpathSync(g)}catch(e){log$5.warn({err:e,documentName:t},`[persistence] Tripwire reset realpath failed for ${t}; using currentBase`)}if(e&&isWithinContentDir(e,s))try{S=readFileSync(e,`utf-8`)}catch(s){log$5.warn({err:s,documentName:t,canonical:e},`[persistence] Tripwire reset readFileSync failed for ${t}; using currentBase`),S=Y}else e&&console.warn(`[persistence] symlink-escape on tripwire reset: ${g} → ${e}, using currentBase`,{docName:t,originalPath:g,canonical:e,contentDir:s}),S=Y}else S=Y;e.transact(()=>{L(e,S)},FILE_WATCHER_ORIGIN),F.delete(t)}catch(e){F.add(t),log$5.error({err:e,documentName:t},`[persistence] Tripwire reset failed for ${t}`)}q.delete(t);return}}let te=safeContentPath(t,s);await tracedMkdir(dirname(te),{recursive:!0});let ne;try{ne=await realpath(te)}catch(e){let s=e.code;if(s===`ENOENT`){let e=!1;try{e=lstatSync(te).isSymbolicLink()}catch(e){e.code!==`ENOENT`&&log$5.warn({err:e,path:te},`[persistence] lstat failed during broken-symlink check`)}e&&console.warn(`[persistence] broken-symlink fallback`,{docName:t,reason:`broken-symlink`}),ne=te}else if(s===`ELOOP`)throw console.error(`[persistence] Symlink cycle at ${te}`),Error(`Symlink cycle detected at ${te}`);else throw e}if(!isWithinContentDir(ne,s)){let e=`symlink-escape: ${te} resolves to ${ne} outside ${s}`;throw console.error(`[persistence] ${e}`,{docName:t,originalPath:te,canonical:ne,contentDir:s}),Error(e)}let ae=`${ne}.tmp.${crypto.randomUUID()}`;try{await tracedWriteFile(ae,H,`utf-8`),await tracedRename(ae,ne),registerWrite(ne,contentHash(H)),incrementPersistenceDiskWrite();try{k?.(t,w)}catch(e){log$5.warn({err:e,documentName:t},`[persistence] onDiskFlush callback failed for ${t}`)}}catch(e){try{tracedUnlinkSync(ae)}catch{}throw q.delete(t),log$5.error({err:e,documentName:t},`[persistence] Failed to save ${t}`),e}log$5.info({filePath:ne,bytes:H.length},`[persistence] Wrote ${ne} (${H.length} bytes)`),setReconciledBase(t,H),F.delete(t),q.delete(t),E&&(E.updateDocumentFromMarkdown(t,H),E.saveToDisk().catch(e=>{log$5.warn({err:e,documentName:t},`[backlinks] Failed to persist cache for ${t}`)})),setActiveSpanAttributes({"persistence.bytes":H.length}),ge()}).finally(()=>{Ce?.record((Date.now()-S)/1e3)})}function je({document:e,documentName:t,lastTransactionOrigin:s}){ue.set(t,{branch:getActiveBranch(),document:e,lastTransactionOrigin:s})}async function Me(e=`within-branch`){return ce?(B=B===`discard-stale`||e===`discard-stale`?`discard-stale`:`within-branch`,ce):(ce=(async()=>{let t=e;for(;;){let e=[...ue.entries()];if(ue.clear(),t!==`discard-stale`){for(let[t,s]of e)if(s.branch===getActiveBranch())try{await De({document:s.document,documentName:t,lastTransactionOrigin:s.lastTransactionOrigin})}catch(e){log$5.error({err:e,documentName:t},`[persistence] Deferred store failed for ${t}`)}}let s=B;if(B=null,ue.size===0&&s===null)break;t=s??`within-branch`}})().finally(()=>{ce=null}),ce)}let Pe={async onLoadDocument({document:t,documentName:g,context:S}){if(isSystemDoc(g))return;if(isConfigDoc(g)){loadConfigDoc(t,g,j);return}Te();let w=Date.now();return withSpan(`persistence.onLoadDocument`,{attributes:{"doc.name":g}},async()=>{log$5.info({documentName:g,connections:t.getConnectionsCount?.()??`?`},`[persistence] onLoadDocument called for ${g} (connections: ${t.getConnectionsCount?.()??`?`})`);let S=safeContentPath(g,s);if(!existsSync(S))return;try{let e=realpathSync(S);if(!isWithinContentDir(e,s)){console.warn(`[persistence] symlink-escape on load: ${S} → ${e}, refusing`);return}}catch(e){if(e.code===`ELOOP`){console.warn(`[persistence] Symlink cycle on load: ${S}, refusing`);return}}let w=readFileSync(S,`utf-8`),E=t.getXmlFragment(`default`);log$5.info({documentName:g,fragmentLength:E.length},`[persistence] onLoadDocument ${g}: fragment.length=${E.length} before update`),E.length===0?(t.transact(()=>{applyDiskContentToDoc(t,w,e?.resolveEmbed,g)},FILE_WATCHER_ORIGIN),log$5.info({filePath:S,children:E.length},`[persistence] Loaded ${S} into Y.Doc (${E.length} children)`),E.observeDeep(()=>{log$5.info({documentName:g,fragmentLength:E.length},`[persistence] MUTATION on ${g}: fragment.length=${E.length}`)})):log$5.info({documentName:g,children:E.length},`[persistence] Skipped load for ${g} — fragment already has ${E.length} children`),setReconciledBase(g,w)}).finally(()=>{ye?.record((Date.now()-w)/1e3)})},async onStoreDocument({document:e,documentName:t,lastTransactionOrigin:s,lastContext:g}){if(!isSystemDoc(t)){if(isConfigDoc(t)){await storeConfigDoc(e,t,s,j);return}if(isBatchInProgress()){je({document:e,documentName:t,lastTransactionOrigin:s});return}return De({document:e,documentName:t,lastTransactionOrigin:s})}}};async function Ie(){oe&&await oe}async function Re(){if(oe){await oe;return}contributorCount()!==0&&(oe=de().finally(()=>{oe=null,se&&(se=!1,ge())}),await oe)}return{extension:Pe,flushDeferredStores:Me,flushPendingGitCommit:_e,flushContributors:Re,waitForPendingCommits:Ie,configPersistenceCtx:j}}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(`#`),g=s>=0?t.slice(0,s):t,S=g.indexOf(`?`);return S>=0?g.slice(0,S):g}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,g=``;for(;s.length>0;){if(t.inComment){let e=s.indexOf(`-->`);if(e===-1)return g;s=s.slice(e+3),t.inComment=!1;continue}let e=s.indexOf(`<!--`);if(e===-1)return g+s;g+=s.slice(0,e),s=s.slice(e+4),t.inComment=!0}return g}function extractLocalAssetHrefs(e){let t=new Set,s=createCodeFenceTracker(),g={inComment:!1};for(let S of e.replaceAll(`\r
788
799
  `,`
789
800
  `).replaceAll(`\r`,`
790
801
  `).split(`
@@ -807,10 +818,10 @@ Karpathy's insight: "The tedious part of maintaining a knowledge base is not the
807
818
 
808
819
  `}async function resolveServerUrl(e,t){return typeof e==`function`?await e(t):e}async function resolveConfig(e,t){return typeof e==`function`?await e(t):e}async function resolveProjectConfigContext(e,t,s){let g;try{g=await e(s)}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}try{let e=await resolveConfig(t,g);return{ok:!0,cwd:g,config:e}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}async function resolveProjectServerContext(e,t,s,g){let S=await resolveProjectConfigContext(e,t,g);if(!S.ok)return S;let{cwd:w,config:E}=S;try{return{ok:!0,cwd:w,config:E,url:await resolveServerUrl(s,w)}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}function normalizeDocName(e){let t=e.toLowerCase();return t.endsWith(`.md`)?{ok:!0,docName:e.slice(0,-3)}:t.endsWith(`.mdx`)?{ok:!0,docName:e.slice(0,-4)}:t.endsWith(`.markdown`)?{ok:!1,error:`Error: docName "${e}" ends in ".markdown", which is not a supported extension. Use ".md" or ".mdx", or strip the extension to let the server auto-detect.`}:{ok:!0,docName:e}}async function httpGet(e,t){let s;try{s=await fetch(`${e}${t}`,{signal:AbortSignal.timeout(3e4)})}catch(e){return{ok:!1,error:`Server unreachable: ${e instanceof Error?e.message:e}`}}try{return await s.json()}catch{return{ok:!1,error:`Server returned HTTP ${s.status} with non-JSON body`}}}async function httpPost(e,t,s){let g;try{g=await fetch(`${e}${t}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:s?JSON.stringify(s):void 0,signal:AbortSignal.timeout(3e4)})}catch(e){return{ok:!1,error:`Server unreachable: ${e instanceof Error?e.message:e}`}}try{return await g.json()}catch{return{ok:!1,error:`Server returned HTTP ${g.status} with non-JSON body`}}}function parseRenameCollidingPairs(e){return Array.isArray(e)?e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{existing:t,incoming:s,to:g}=e;return typeof t==`string`&&typeof s==`string`&&typeof g==`string`?[{existing:t,incoming:s,to:g}]:[]}):[]}function mergeCascade(e,t){let s={...e},g=new Map;for(let[e,S]of Object.entries(t))if(S!==void 0)if(Array.isArray(S)){let t=Array.isArray(s[e])?[...s[e]]:[],w=g.get(e)??new Set(t.map(toDedupKey));g.set(e,w);for(let e of S){let s=toDedupKey(e);w.has(s)||(w.add(s),t.push(e))}s[e]=t}else s[e]=S;return s}function mergePatch(e,t){let s={...e};for(let[e,g]of Object.entries(t))if(g!==void 0){if(isEmpty$1(g)){delete s[e];continue}s[e]=g}return s}function isEmpty$1(e){return!!(e===null||typeof e==`string`&&e===``||Array.isArray(e)&&e.length===0)}function toDedupKey(e){return typeof e==`string`?`s:${e}`:typeof e==`number`?`n:${e}`:typeof e==`boolean`?`b:${e}`:e===null?`null`:e===void 0?`undefined`:`j:${JSON.stringify(e)}`}function resolveNestedFrontmatter(e,t){return resolveNestedFrontmatterWithSources(e,t).merged}function resolveNestedFrontmatterWithSources(e,t){let s=t.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``),g=s===``||s===`.`?[]:s.split(`/`).filter(e=>e.length>0),S={},w={},E=!1;for(let t=0;t<=g.length;t++){let s=t===0?``:g.slice(0,t).join(`/`),D=t===0?resolve(e,`.ok`,`frontmatter.yml`):resolve(e,s,`.ok`,`frontmatter.yml`);if(!existsSync(D))continue;let O=readFrontmatterYaml(D);if(O!=null){S=mergeCascade(S,O);for(let e of Object.keys(O))O[e]!==void 0&&(w[e]=s);E=!0}}return E?{merged:coerceWellKnown(S),sources:w}:{merged:{},sources:{}}}function coerceWellKnown(e){let t={};for(let[s,g]of Object.entries(e))t[s]=g;return typeof e.title==`string`?t.title=e.title:delete t.title,typeof e.description==`string`?t.description=e.description:delete t.description,Array.isArray(e.tags)?t.tags=e.tags.filter(e=>typeof e==`string`):delete t.tags,t}const warnedPaths=new Set;function readFrontmatterYaml(e){let t;try{t=readFileSync(e,`utf-8`)}catch{return null}let s;try{s=(0,import_dist$1.parse)(t)}catch(t){if(!warnedPaths.has(e)){warnedPaths.add(e);let s=t instanceof Error?t.message:String(t);console.warn(`[ok-folder-frontmatter] malformed YAML at ${e} — folder defaults skipped. Fix the file or delete it. Reason: ${s}`)}return null}return typeof s!=`object`||!s||Array.isArray(s)?null:s}function parentFolderOf(e){let t=e.lastIndexOf(`/`);return t===-1?``:e.slice(0,t)}const GIT_TIMEOUT_MS$2=5e3;function projectHasGitDir(e){try{return statSync(resolve(e,`.git`)).isDirectory()}catch{return!1}}function openProjectGit(e){return esm_default({baseDir:resolve(e),timeout:{block:GIT_TIMEOUT_MS$2}})}async function readProjectGitLog(e,t,s=5){if(!projectHasGitDir(e))return{commits:[],source:`git-absent`};let g=openProjectGit(e),S=``;try{S=await g.raw(`log`,`-${Math.max(1,s)}`,`--format=%H|%aI|%an|%s`,`--follow`,`--`,t)}catch{return{commits:[],source:`git`}}let w=[];for(let e of S.split(`
809
820
  `)){if(!e)continue;let t=e.indexOf(`|`);if(t<0)continue;let s=e.indexOf(`|`,t+1);if(s<0)continue;let g=e.indexOf(`|`,s+1);g<0||w.push({hash:e.slice(0,t),date:e.slice(t+1,s),authorName:e.slice(s+1,g),subject:e.slice(g+1)})}return{commits:w,source:`git`}}const GIT_TIMEOUT_MS$1=5e3;async function currentProjectBranch(e){try{let t=(await esm_default({baseDir:e,timeout:{block:GIT_TIMEOUT_MS$1}}).revparse([`--abbrev-ref`,`HEAD`])).trim();return t&&t!==`HEAD`?t:null}catch{return null}}function openShadowGit(e,t){return esm_default({baseDir:t,timeout:{block:GIT_TIMEOUT_MS$1}}).env({GIT_DIR:e,GIT_WORK_TREE:t})}function writerIdFromRef(e,t){let s=getWipRefPattern(t);return e.startsWith(s)?e.slice(s.length):e}async function logOnRef(e,t,s,g,S){let w=``;try{w=await e.raw(`log`,t,`-${Math.max(1,S*2)}`,`--format=%H%x00%aI%x00%an%x00%s%x00%B%x1e`,`--`,s)}catch{return[]}let E=writerIdFromRef(t,g),D=parseWriterId(E),O=[];for(let e of w.split(``)){let t=e.trimStart();if(!t)continue;let[s=``,S=``,w=``,k=``,j=``]=t.split(`\0`),F=s.trim();F.length===40&&O.push({hash:F,date:S,writerName:w,message:k,contributors:readContributors(j),writerId:E,isAgent:D.isAgent,writerClassification:D.classification,branch:g})}return O}async function readShadowLog(e,t,s=5){let g=getShadowRepoPath(e);if(!g)return{commits:[],source:`shadow-repo-absent`};let S=await currentProjectBranch(e);if(!S)return{commits:[],source:`shadow-repo`};let w=openShadowGit(g,resolve(e)),E=``;try{E=await w.raw(`for-each-ref`,getWipRefPattern(S),`--format=%(refname)`)}catch{return{commits:[],source:`shadow-repo`}}let D=E.split(`
810
- `).map(e=>e.trim()).filter(Boolean);return D.length===0?{commits:[],source:`shadow-repo`}:{commits:(await Promise.all(D.map(e=>logOnRef(w,e,t,S,s)))).flat().sort((e,t)=>t.date.localeCompare(e.date)).slice(0,s),source:`shadow-repo`}}function resolveTemplatesAvailable(e,t,s={}){let g=normalizeFolderPath(t),S=g===``?[]:g.split(`/`),w=new Set,E=[];collectFromFolder(e,g,`local`,w,E);for(let t=S.length-1;t>=1;t--)collectFromFolder(e,S.slice(0,t).join(`/`),`inherited`,w,E);return S.length>0&&collectFromFolder(e,``,`inherited`,w,E),E}function collectFromFolder(e,t,s,g,S){let w=t?join(e,t,`.ok`,`templates`):join(e,`.ok`,`templates`);if(!existsSync(w))return;let E;try{E=readdirSync(w)}catch{return}for(let e of E){if(!e.endsWith(`.md`))continue;let E=e.slice(0,-3);if(g.has(E))continue;let D=join(w,e),O;try{O=statSync(D)}catch{continue}if(!O.isFile())continue;let k=readTemplateMeta(D),j={name:E,path:t?posix.join(t,`.ok`,`templates`,e):posix.join(`.ok`,`templates`,e),source_folder:t,scope:s};k.title!==void 0&&(j.title=k.title),k.description!==void 0&&(j.description=k.description),g.add(E),S.push(j)}}function normalizeFolderPath(e){return e.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``).replace(/^\.$/,``)}const templateMetaWarnedPaths=new Set;function readTemplateMeta(e){let t;try{t=readFileSync(e,`utf-8`)}catch(t){if(t?.code!==`ENOENT`&&!templateMetaWarnedPaths.has(e)){templateMetaWarnedPaths.add(e);let s=t instanceof Error?t.message:String(t);console.warn(`[ok-templates] failed to read template at ${e} — metadata skipped. Reason: ${s}`)}return{}}let s=extractFrontmatterYaml(t);if(s===null)return{};let g;try{g=(0,import_dist$1.parse)(s)}catch(t){if(!templateMetaWarnedPaths.has(e)){templateMetaWarnedPaths.add(e);let s=t instanceof Error?t.message:String(t);console.warn(`[ok-templates] malformed YAML frontmatter at ${e} — title/description unavailable. Reason: ${s}`)}return{}}if(typeof g!=`object`||!g)return{};let S=g,w={};return typeof S.title==`string`&&(w.title=S.title),typeof S.description==`string`&&(w.description=S.description),w}function extractFrontmatterYaml(e){let t=e.replace(/^/,``),s=/^[ \t]*---\r?\n([\s\S]*?)\r?\n[ \t]*---(\r?\n|$)/.exec(t);return s?s[1]??null:null}const FRONTMATTER_RE=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/;function parseFrontmatterRaw(e){let t=e.match(FRONTMATTER_RE);if(!t)return null;try{let e=(0,import_dist$1.parse)(t[1]);if(typeof e==`object`&&e&&!Array.isArray(e))return e}catch{}return null}const DIRECTORY_SCAN_CAP=1e3,DIR_SKIP=new Set([`.git`,`.ok`,`node_modules`,`.changeset`,`.claude`,`.agents`,`dist`,`build`]),WIKI_EXT_RE=/\.(md|mdx)$/i;function pathToDocName$1(e){return e.replace(/\.md$/,``).replace(/\.mdx$/,``)}const fmReadWarnedPaths=new Set;async function readFrontmatter(e){try{return parseFrontmatterRaw(await readFile$1(e,`utf-8`))??{}}catch(t){if(t?.code!==`ENOENT`&&!fmReadWarnedPaths.has(e)){fmReadWarnedPaths.add(e);let s=t instanceof Error?t.message:String(t);console.warn(`[ok-enrich] failed to read frontmatter at ${e} — enrichment degraded for this file. Reason: ${s}`)}return null}}async function fetchBacklinks(e,t){if(!e)return null;let s=await httpGet(e,`/api/backlinks?docName=${encodeURIComponent(t)}`);if(!s.ok)return null;let g=s.backlinks??s.results??s.links;if(!Array.isArray(g))return[];let S=[];for(let e of g){if(typeof e!=`object`||!e)continue;let t=e,s=typeof t.docName==`string`?t.docName:typeof t.source==`string`?t.source:typeof t.page==`string`?t.page:void 0;s&&S.push({source:s,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null})}return S}const BACKLINK_COUNT_CHUNK=100;async function fetchBacklinkCountsBatch(e,t){if(!e||t.length===0)return null;let s=[...new Set(t)],g=[];for(let e=0;e<s.length;e+=BACKLINK_COUNT_CHUNK)g.push(s.slice(e,e+BACKLINK_COUNT_CHUNK));let S=await Promise.all(g.map(async t=>{let s=await httpGet(e,`/api/backlink-counts?docNames=${encodeURIComponent(t.join(`,`))}`);return s.ok?s.counts??{}:null})),w=new Map,E=!1;for(let e of S)if(e){E=!0;for(let[t,s]of Object.entries(e))typeof s==`number`&&Number.isFinite(s)&&w.set(t,s)}return E?w:null}async function fetchForwardLinks(e,t){if(!e)return null;let s=await httpGet(e,`/api/forward-links?docName=${encodeURIComponent(t)}`);if(!s.ok)return null;let g=s.forwardLinks??s.links??s.results;if(!Array.isArray(g))return[];let S=[];for(let e of g){if(typeof e!=`object`||!e)continue;let t=e;if(t.kind===`external`&&typeof t.url==`string`){S.push({kind:`external`,url:t.url,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null});continue}let s=typeof t.docName==`string`?t.docName:void 0;s&&S.push({kind:`doc`,docName:s,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null})}return S}function mergeFileAndFolder(e,t,s){let g=mergeCascade(s?resolveNestedFrontmatter(s,parentFolderOf(t)):{},e??{});return{title:typeof g.title==`string`?g.title:void 0,description:typeof g.description==`string`?g.description:void 0,tags:Array.isArray(g.tags)?g.tags.filter(e=>typeof e==`string`):[],frontmatter:g}}async function enrichPath(e,t,s={}){let g=resolveWithinRoot(t.projectDir,e);if(!g.ok)throw Error(`enrichPath: ${g.reason}`);let S=g.rel,w=g.abs,E=t.historyDepth??5,D=s.includeRichFields===!0,O=readFrontmatter(w);if(!D){let e=mergeFileAndFolder(await O,S,t.projectDir);return{path:S,title:e.title,description:e.description,tags:e.tags,frontmatter:e.frontmatter,backlinkCount:null,backlinks:null,forwardLinkCount:null,forwardLinks:null,history:null,historySource:null,projectHistory:null,projectHistorySource:null}}let[k,j,F,L,B]=await Promise.all([O,fetchBacklinks(t.serverUrl,pathToDocName$1(S)).catch(()=>null),fetchForwardLinks(t.serverUrl,pathToDocName$1(S)).catch(()=>null),readShadowLog(t.projectDir,S,E).catch(()=>({commits:[],source:`shadow-repo`})),readProjectGitLog(t.projectDir,S,E).catch(()=>({commits:[],source:`git`}))]),H=mergeFileAndFolder(k,S,t.projectDir);return{path:S,title:H.title,description:H.description,tags:H.tags,frontmatter:H.frontmatter,backlinkCount:j?.length??null,backlinks:j,forwardLinkCount:F?.length??null,forwardLinks:F,history:L.commits,historySource:L.source,projectHistory:B.commits,projectHistorySource:B.source}}async function scanDirectory(e,t){let s={directMdCount:0,recursiveMdCount:0,childDirCount:0,mostRecent:null,truncated:!1},g=0,S=[{path:e,depth:0}];for(;S.length>0;){let e=S.shift();if(!e)break;if(g>=DIRECTORY_SCAN_CAP){s.truncated=!0;break}let w;try{w=await readdir(e.path,{withFileTypes:!0})}catch{continue}for(let E of w){if(g>=DIRECTORY_SCAN_CAP){s.truncated=!0;break}g++;let w=E.name;if(E.isDirectory()){if(DIR_SKIP.has(w)||w.startsWith(`.`))continue;e.depth===0&&s.childDirCount++,S.push({path:`${e.path}/${w}`,depth:e.depth+1})}else if(E.isFile()&&WIKI_EXT_RE.test(w)){s.recursiveMdCount++,e.depth===0&&s.directMdCount++;let g=`${e.path}/${w}`;try{let e=await stat$1(g);(!s.mostRecent||e.mtimeMs>s.mostRecent.mtimeMs)&&(s.mostRecent={absPath:g,relPath:relative(t,g).split(/[\\/]/).filter(Boolean).join(`/`),mtimeMs:e.mtimeMs})}catch{}}}}return s}async function enrichDirectory(e,t){let s=resolveWithinRoot(t.projectDir,e);if(!s.ok)throw Error(`enrichDirectory: ${s.reason}`);let g=s.rel,S=s.abs,w=await scanDirectory(S,t.projectDir),E;if(w.mostRecent){let e=await readFrontmatter(w.mostRecent.absPath),t=typeof e?.title==`string`?e.title:void 0;E={path:w.mostRecent.relPath,title:t??basename(w.mostRecent.relPath),updatedAt:new Date(w.mostRecent.mtimeMs).toISOString()}}let D={path:g,type:`directory`,directMdCount:w.directMdCount,recursiveMdCount:w.recursiveMdCount,childDirCount:w.childDirCount,mostRecentMd:E,truncated:w.truncated},O=resolveNestedFrontmatter(t.projectDir,g),k=O.title,j=O.description,F=O.tags??[];k!==void 0&&(D.title=k),j!==void 0&&(D.description=j),F.length>0&&(D.tags=F),Object.keys(O).length>0&&(D.frontmatter_defaults=O);let L=resolveTemplatesAvailable(t.projectDir,g);return L.length>0&&(D.templates_available=L),D}async function enrichDirectoryRecursive(e,t,s){let g=await enrichDirectory(e,s);if(t<=1)return g;let S=g.path,w=resolve(s.projectDir,S),E;try{E=await readdir(w,{withFileTypes:!0})}catch{return g}let D=[];for(let e of E){if(!e.isDirectory()||RECURSIVE_LISTING_SKIP_DIRS.has(e.name)||e.name.startsWith(`.`))continue;let g=await enrichDirectoryRecursive(S?`${S}/${e.name}`:e.name,t-1,s);D.push(g)}return D.length>0&&(g.subfolders=D),g}const RECURSIVE_LISTING_SKIP_DIRS=new Set([`.git`,`.ok`,`node_modules`,`.venv`,`venv`,`env`,`__pycache__`,`vendor`,`dist`,`build`,`out`,`output`,`.next`,`.nuxt`,`.svelte-kit`,`.astro`,`.turbo`,`.cache`,`.parcel-cache`,`coverage`]);function applyNestedFolderRulesUpsert(e){if(!isAbsolute(e.projectDir))return{ok:!1,error:{code:`BAD_PROJECT_DIR`,message:`projectDir must be absolute`}};let t=[];for(let s of e.rules){let g=resolveTargetFolderFromMatch(s.new_match??s.match);if(!g.ok)return{ok:!1,error:{code:`MULTI_FOLDER_GLOB`,message:g.message,rule:s.match}};let S=g.folder?resolve(e.projectDir,g.folder):e.projectDir,w=resolve(e.projectDir);if(!S.startsWith(w+sep)&&S!==w)return{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved target folder escapes projectDir: ${S}`,rule:s.match}};let E=null,D=null;if(s.new_match!==void 0&&s.new_match!==s.match){let t=resolveTargetFolderFromMatch(s.match);if(!t.ok)return{ok:!1,error:{code:`MULTI_FOLDER_GLOB`,message:t.message,rule:s.match}};if(E=t.folder,D=t.folder?resolve(e.projectDir,t.folder):e.projectDir,!D.startsWith(w+sep)&&D!==w)return{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved source folder escapes projectDir: ${D}`,rule:s.match}}}t.push({targetFolder:g.folder,targetAbs:S,sourceFolder:E,sourceAbs:D,rule:s})}let s=[];for(let g of t)try{if(g.sourceAbs&&g.sourceAbs!==g.targetAbs){let t=join(g.sourceAbs,`.ok`,`frontmatter.yml`);existsSync(t)&&(unlinkSync(t),autoCleanOkDir(join(g.sourceAbs,`.ok`)),s.push({match:g.rule.match,path:relPathOf$1(e.projectDir,t),action:`deleted`}))}let t=join(g.targetAbs,`.ok`),S=join(t,`frontmatter.yml`),w=readExistingFrontmatter(S),E=Object.keys(g.rule.frontmatter).length===0?{}:mergePatch(w,g.rule.frontmatter);if(Object.keys(E).length===0){existsSync(S)&&(unlinkSync(S),autoCleanOkDir(t),s.push({match:g.rule.new_match??g.rule.match,path:relPathOf$1(e.projectDir,S),action:`deleted`}));continue}mkdirSync(t,{recursive:!0});let D=(0,import_dist$1.stringify)(E),O=`${S}.tmp.${process.pid}.${Date.now()}`;writeFileSync(O,D,`utf-8`),renameSync(O,S),s.push({match:g.rule.new_match??g.rule.match,path:relPathOf$1(e.projectDir,S),action:`written`})}catch(e){return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to write nested frontmatter for ${g.rule.match}: ${e.message}`,rule:g.rule.match},...s.length>0?{partiallyApplied:s}:{}}}return{ok:!0,applied:s}}function resolveTargetFolderFromMatch(e){let t=e.split(`/`).filter(e=>e.length>0),s=[],g=!1;for(let S of t){let t=/[*?[\]{}]/.test(S);if(g&&!t)return{ok:!1,message:`Glob "${e}" matches multiple folders (literal segment "${S}" appears after a glob). Split it into one rule per folder, e.g. set_folder_rule({ rules: [{ match: "specs/foo/${S}/**", ... }, ...] }).`};if(t){if(g=!0,S!==`**`&&S!==`*`)return{ok:!1,message:`Glob "${e}" uses an unsupported pattern segment "${S}". Only "*" and "**" are supported in nested folder rules.`};continue}s.push(S)}return{ok:!0,folder:s.join(`/`)}}function readExistingFrontmatter(e){if(!existsSync(e))return{};let t=(0,import_dist$1.parse)(readFileSync(e,`utf-8`));return typeof t!=`object`||!t||Array.isArray(t)?{}:{...t}}function autoCleanOkDir(e){if(!existsSync(e))return;let t;try{t=readdirSync(e)}catch{return}if(t.length===0)try{rmdirSync(e)}catch{}}function relPathOf$1(e,t){let s=resolve(e);return t.startsWith(s+sep)?t.slice(s.length+1).split(sep).join(`/`):t}const SUBSTITUTION_ALLOWLIST=[`date`,`user`],TOKEN_PATTERN=/\{\{([^{}\n]+?)\}\}/g;function validateSubstitution(e){let t=[];for(let s of e.matchAll(TOKEN_PATTERN)){let e=(s[1]??``).trim();isAllowedToken(e)||t.push({token:e,offset:s.index??0})}return t}function applySubstitution(e,t){return e.replace(TOKEN_PATTERN,(e,s)=>{let g=s.trim();return isAllowedToken(g)?t[g]:e})}function isAllowedToken(e){return SUBSTITUTION_ALLOWLIST.includes(e)}function todayIsoUtc(e=new Date){return`${e.getUTCFullYear().toString().padStart(4,`0`)}-${(e.getUTCMonth()+1).toString().padStart(2,`0`)}-${e.getUTCDate().toString().padStart(2,`0`)}`}const NAME_RE=/^[A-Za-z0-9_-]+$/;function applyTemplateWrite(e){let t=validateInputs(e.projectDir,e.folder,e.name);if(!t.ok)return{ok:!1,error:t.error};let s=validateTitle(e.frontmatter.title);if(!s.ok)return{ok:!1,error:s.error};let g=validateSubstitutionAllowlist(e.body);if(!g.ok)return{ok:!1,error:g.error};let{templatesDir:S,filePath:w}=templatePaths(e.projectDir,t.folderRel,e.name),E=serializeFrontmatter(e.frontmatter),D=E?`---\n${E}---\n${e.body}`:e.body;try{mkdirSync(S,{recursive:!0})}catch(t){return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to create template directory at ${relPathOf(e.projectDir,S)}: ${t.message}`}}}let O=!existsSync(w),k=`${w}.tmp.${process.pid}.${Date.now()}`;try{writeFileSync(k,D,`utf-8`),renameSync(k,w)}catch(t){try{unlinkSync(k)}catch{}return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to write template at ${relPathOf(e.projectDir,w)}: ${t.message}`}}}let j=[];return(e.frontmatter.description===void 0||typeof e.frontmatter.description!=`string`||e.frontmatter.description.length===0)&&j.push("Template frontmatter.description is missing — `description` disambiguates between similarly-named templates in the menu. Recommended but not required."),{ok:!0,path:relPathOf(e.projectDir,w),created:O,warnings:j}}function applyTemplateDelete(e){let t=validateInputs(e.projectDir,e.folder,e.name);if(!t.ok)return{ok:!1,error:t.error};let{templatesDir:s,okDir:g,filePath:S}=templatePaths(e.projectDir,t.folderRel,e.name),w=existsSync(S);if(w)try{unlinkSync(S)}catch(t){return{ok:!1,error:{code:`UNLINK_FAILED`,message:`Failed to delete template at ${relPathOf(e.projectDir,S)}: ${t.message}`}}}let E=!1,D=!1;if(existsSync(s)&&isEmpty(s))try{rmdirSync(s),E=!0}catch{}if(existsSync(g)&&isEmpty(g))try{rmdirSync(g),D=!0}catch{}return{ok:!0,path:relPathOf(e.projectDir,S),existed:w,cleanedEmpty:{templatesDir:E,okDir:D}}}function validateInputs(e,t,s){if(!isAbsolute(e))return{ok:!1,error:{code:`BAD_PROJECT_DIR`,message:`projectDir must be absolute`}};if(!NAME_RE.test(s))return{ok:!1,error:{code:`BAD_NAME`,message:`Template name must match /^[A-Za-z0-9_-]+$/ (got: ${JSON.stringify(s)}). Use letters, digits, underscores, or hyphens — no slashes, dots, or spaces.`}};let g=t.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``).replace(/^\.$/,``);if(g.includes(`..`))return{ok:!1,error:{code:`PATH_TRAVERSAL`,message:`Folder path may not contain "..": ${JSON.stringify(t)}`}};let S=g?resolve(e,g):e,w=resolve(e);return!S.startsWith(w+sep)&&S!==w?{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved folder path escapes projectDir: ${S}`}}:{ok:!0,folderRel:g}}function validateTitle(e){return typeof e!=`string`||e.length===0?{ok:!1,error:{code:`TEMPLATE_TITLE_REQUIRED`,message:"Template frontmatter.title is required (D14). `title` is the menu surface — agents pick templates by name+title; a title-less template is effectively invisible. Set a non-empty `title` and retry."}}:{ok:!0}}function validateSubstitutionAllowlist(e){let t=validateSubstitution(e);return t.length===0?{ok:!0}:{ok:!1,error:{code:`TEMPLATE_UNKNOWN_VARIABLE`,message:`Template body contains unknown substitution token(s): ${t.map(e=>`\`{{${e.token}}}\` at offset ${e.offset}`).join(`, `)}. v1 allowlist: \`{{date}}\`, \`{{user}}\` (D5 / FR17). Remove or rename the offending tokens and retry.`}}}function templatePaths(e,t,s){let g=t?join(e,t,`.ok`):join(e,`.ok`),S=join(g,`templates`);return{okDir:g,templatesDir:S,filePath:join(S,`${s}.md`)}}function relPathOf(e,t){return normalize(t.startsWith(e+sep)?t.slice(e.length+1):t).split(sep).join(`/`)}function serializeFrontmatter(e){let t={};return e.title!==void 0&&(t.title=e.title),e.description!==void 0&&(t.description=e.description),Array.isArray(e.tags)&&e.tags.length>0&&(t.tags=e.tags),Object.keys(t).length===0?``:(0,import_dist$1.stringify)(t)}function isEmpty(e){try{return readdirSync(e).length===0}catch{return!1}}const INSTALLED_AGENTS_SCHEMES=[`claude`,`codex`,`cursor`],INSTALLED_AGENTS_PROBE_TIMEOUT_MS=2e3,MACOS_APP_NAMES={claude:[`Claude`],codex:[`Codex`,`OpenAI Codex`],cursor:[`Cursor`]};function createInstalledAgentsProbe(e){let t=new Map,s=e.now??Date.now,g=e.ttlMs??6e4;async function S(S){let w=t.get(S);if(w?.status===`resolved`&&w.expiresAt>s())return w.installed;if(w?.status===`inflight`)return w.promise;let E=(async()=>{try{let w=await e.probe(S);return t.set(S,{status:`resolved`,installed:w,expiresAt:s()+g}),w}catch{return t.set(S,{status:`resolved`,installed:!1,expiresAt:s()+g}),!1}})();return t.set(S,{status:`inflight`,promise:E}),E}async function w(){let e=await Promise.all(INSTALLED_AGENTS_SCHEMES.map(async e=>[e,await S(e)]));return Object.fromEntries(e)}return{probeAll:w,probeWithCache:S}}async function handleInstalledAgents(e,t,s){if(e.method!==`GET`){writeJson(t,405,{error:`Method not allowed`});return}try{writeJson(t,200,await s())}catch(e){console.error(`[installed-agents]`,e),writeJson(t,500,{error:`Internal server error`})}}function writeJson(e,t,s){e.writeHead(t,{"Content-Type":`application/json`,"X-Content-Type-Options":`nosniff`}),e.end(JSON.stringify(s))}function createOsProbe(e,t=execFile){return s=>e===`darwin`?probeMacOs(s,t):e===`win32`?probeWindows(s,t):probeLinux(s,t)}function probeMacOs(e,t){let s=MACOS_APP_NAMES[e];function g(e){return new Promise(s=>{t(`osascript`,[`-e`,`id of app "${e}"`],{timeout:INSTALLED_AGENTS_PROBE_TIMEOUT_MS,encoding:`utf-8`},(e,t)=>{if(e){s(!1);return}s(t.trim().length>0)})})}return(async()=>{for(let e of s)if(await g(e))return!0;return!1})()}function probeWindows(e,t){return new Promise(s=>{t(`reg`,[`query`,`HKCR\\${e}`,`/ve`],{timeout:INSTALLED_AGENTS_PROBE_TIMEOUT_MS,encoding:`utf-8`},e=>{s(!e)})})}function probeLinux(e,t){return new Promise(s=>{t(`xdg-mime`,[`query`,`default`,`x-scheme-handler/${e}`],{timeout:INSTALLED_AGENTS_PROBE_TIMEOUT_MS,encoding:`utf-8`},(e,t)=>{if(e){s(!1);return}s(t.trim().length>0)})})}const FIXED_HUB_BASENAMES=[`INDEX`,`README`,`REPORT`,`SPEC`],MAX_CANDIDATES=3;function findHubCandidates(e,t){let s=[],g=new Set,S=t=>{!t||g.has(t)||t!==e&&(g.add(t),s.push(t))},w=buildLowerDocNameIndex(t),E=parentFolder(e);for(;;){for(let e of FIXED_HUB_BASENAMES)if(S(lookup$1(t,w,joinDocName(E,e))),s.length>=MAX_CANDIDATES)return s;let e=E===``?null:basename$1(E);if(e&&(S(lookup$1(t,w,joinDocName(E,e))),s.length>=MAX_CANDIDATES))return s;if(E===``)break;E=parentFolder(E)}return s}function lookup$1(e,t,s){return e.has(s)?s:t.get(s.toLowerCase())??null}function buildLowerDocNameIndex(e){let t=new Map;for(let s of e.keys()){let e=s.toLowerCase();t.has(e)||t.set(e,s)}return t}function parentFolder(e){let t=e.lastIndexOf(`/`);return t<0?``:e.slice(0,t)}function basename$1(e){let t=e.lastIndexOf(`/`);return t<0?e:e.slice(t+1)}function joinDocName(e,t){return e===``?t:`${e}/${t}`}function splitFrontmatterLines(e){return e?e.replace(/^---\r?\n/,``).replace(/\r?\n---(?:\r?\n)?$/,``).split(/\r?\n/):[]}function normalizeFrontmatterScalar(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?t.slice(1,-1).trim():t}function extractFrontmatterScalar(e,t){let s=`${t}:`;for(let t of splitFrontmatterLines(e))if(t.startsWith(s))return normalizeFrontmatterScalar(t.slice(s.length))||null;return null}function parseInlineAliases(e){let t=[],s=``,g=null;for(let S of e){if(g){s+=S,S===g&&(g=null);continue}if(S===`"`||S===`'`){g=S,s+=S;continue}if(S===`,`){let e=normalizeFrontmatterScalar(s);e&&t.push(e),s=``;continue}s+=S}let S=normalizeFrontmatterScalar(s);return S&&t.push(S),t}function dedupeExact(e){let t=[],s=new Set;for(let g of e)!g||s.has(g)||(s.add(g),t.push(g));return t}function extractPageAliases(e){let{frontmatter:t}=stripFrontmatter(e);if(!t)return[];let s=splitFrontmatterLines(t);for(let e=0;e<s.length;e+=1){let t=s[e]?.match(/^aliases:\s*(.*)$/);if(!t)continue;let g=t[1]?.trim()??``;if(g){if(g.startsWith(`[`)&&g.endsWith(`]`))return dedupeExact(parseInlineAliases(g.slice(1,-1)));let e=normalizeFrontmatterScalar(g);return e?[e]:[]}let S=[];for(let t=e+1;t<s.length;t+=1){let e=s[t];if(e?.trim()){if(/^\s*-\s+/.test(e)){let t=normalizeFrontmatterScalar(e.replace(/^\s*-\s+/,``));t&&S.push(t);continue}if(/^[^\s][^:]*:\s*/.test(e))break;break}}return dedupeExact(S)}return[]}function extractPageTitle(e,t){let{frontmatter:s,body:g}=stripFrontmatter(e),S=extractFrontmatterScalar(s,`title`);if(S)return S;let w=g.match(/^# (.+)$/m);return w?w[1].trim():t}function parseFrontmatterMetadata(e){return e?.trim()?{cluster:extractFrontmatterScalar(e,`cluster`)??void 0,category:extractFrontmatterScalar(e,`category`)??void 0,tags:extractFrontmatterArray(e,`tags`)}:{cluster:void 0,category:void 0,tags:void 0}}function extractFrontmatterArray(e,t){let s=`${t}:`,g=splitFrontmatterLines(e);for(let e=0;e<g.length;e+=1){let t=g[e];if(!t?.startsWith(s))continue;let S=t.slice(s.length).trim();if(S){if(S.startsWith(`[`)&&S.endsWith(`]`)){let e=parseInlineAliases(S.slice(1,-1));return e.length>0?e:void 0}let e=normalizeFrontmatterScalar(S);return e?[e]:void 0}let w=[];for(let t=e+1;t<g.length;t+=1){let e=g[t];if(e?.trim()){if(/^\s*-\s+/.test(e)){let t=normalizeFrontmatterScalar(e.replace(/^\s*-\s+/,``));t&&w.push(t);continue}if(/^[^\s][^:]*:\s*/.test(e))break;break}}return w.length>0?w:void 0}}function extractPageIdentity(e,t){let s=extractPageTitle(e,t),g=extractPageAliases(e),S=dedupeExact([s,...g]),w=[],E=new Set;for(let e of S){let t=toWikiLinkSlug(e);!t||E.has(t)||(E.add(t),w.push(t))}return{docName:t,title:s,aliases:g,matchLabels:S,normalizedMatchLabels:w}}const MAX_ZIP_BYTES=102400;function resolveBundledSkillDir(){let e=[`../assets/skills/open-knowledge`,`./assets/skills/open-knowledge`],t=[];for(let s of e){let e=fileURLToPath(new URL(s,import.meta.url));if(existsSync(e))return e;t.push(e)}throw Error(`Bundled skill asset directory not found. Tried: ${t.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 g of s){let s=join(e,g.name);g.isDirectory()?yield*walkFiles(s,t):g.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){let s=computeWrapperFolderName(e),g=new import_yazl.ZipFile;g.addEmptyDirectory(`${s}/`);let S=[];for await(let t of walkFiles(e))S.push(t);S.sort();for(let t of S){let S=join(e,t),w=`${s}/${toPosixZipPath(t)}`;g.addFile(S,w)}g.end(),await new Promise((e,s)=>{let S=createWriteStream(t);g.outputStream.pipe(S),S.on(`close`,()=>e()),S.on(`error`,s),g.outputStream.on(`error`,s)})}async function sha256OfFile(e){return new Promise((t,s)=>{let g=createHash(`sha256`),S=createReadStream(e);S.on(`data`,e=>g.update(e)),S.on(`end`,()=>t(g.digest(`hex`))),S.on(`error`,s)})}function extractMetadataVersion(e){let t=e.indexOf(`
821
+ `).map(e=>e.trim()).filter(Boolean);return D.length===0?{commits:[],source:`shadow-repo`}:{commits:(await Promise.all(D.map(e=>logOnRef(w,e,t,S,s)))).flat().sort((e,t)=>t.date.localeCompare(e.date)).slice(0,s),source:`shadow-repo`}}function resolveTemplatesAvailable(e,t,s={}){let g=normalizeFolderPath(t),S=g===``?[]:g.split(`/`),w=new Set,E=[];collectFromFolder(e,g,`local`,w,E);for(let t=S.length-1;t>=1;t--)collectFromFolder(e,S.slice(0,t).join(`/`),`inherited`,w,E);return S.length>0&&collectFromFolder(e,``,`inherited`,w,E),E}function collectFromFolder(e,t,s,g,S){let w=t?join(e,t,`.ok`,`templates`):join(e,`.ok`,`templates`);if(!existsSync(w))return;let E;try{E=readdirSync(w)}catch{return}for(let e of E){if(!e.endsWith(`.md`))continue;let E=e.slice(0,-3);if(g.has(E))continue;let D=join(w,e),O;try{O=statSync(D)}catch{continue}if(!O.isFile())continue;let k=readTemplateMeta(D),j={name:E,path:t?posix.join(t,`.ok`,`templates`,e):posix.join(`.ok`,`templates`,e),source_folder:t,scope:s};k.title!==void 0&&(j.title=k.title),k.description!==void 0&&(j.description=k.description),g.add(E),S.push(j)}}function normalizeFolderPath(e){return e.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``).replace(/^\.$/,``)}const templateMetaWarnedPaths=new Set;function readTemplateMeta(e){let t;try{t=readFileSync(e,`utf-8`)}catch(t){if(t?.code!==`ENOENT`&&!templateMetaWarnedPaths.has(e)){templateMetaWarnedPaths.add(e);let s=t instanceof Error?t.message:String(t);console.warn(`[ok-templates] failed to read template at ${e} — metadata skipped. Reason: ${s}`)}return{}}let s=extractFrontmatterYaml(t);if(s===null)return{};let g;try{g=(0,import_dist$1.parse)(s)}catch(t){if(!templateMetaWarnedPaths.has(e)){templateMetaWarnedPaths.add(e);let s=t instanceof Error?t.message:String(t);console.warn(`[ok-templates] malformed YAML frontmatter at ${e} — title/description unavailable. Reason: ${s}`)}return{}}if(typeof g!=`object`||!g)return{};let S=g,w={};return typeof S.title==`string`&&(w.title=S.title),typeof S.description==`string`&&(w.description=S.description),w}function extractFrontmatterYaml(e){let t=e.replace(/^/,``),s=/^[ \t]*---\r?\n([\s\S]*?)\r?\n[ \t]*---(\r?\n|$)/.exec(t);return s?s[1]??null:null}const FRONTMATTER_RE=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/;function parseFrontmatterRaw(e){let t=e.match(FRONTMATTER_RE);if(!t)return null;try{let e=(0,import_dist$1.parse)(t[1]);if(typeof e==`object`&&e&&!Array.isArray(e))return e}catch{}return null}const DIRECTORY_SCAN_CAP=1e3,DIR_SKIP=new Set([`.git`,`.ok`,`node_modules`,`.changeset`,`.claude`,`.agents`,`dist`,`build`]),WIKI_EXT_RE=/\.(md|mdx)$/i;function pathToDocName$1(e){return e.replace(/\.md$/,``).replace(/\.mdx$/,``)}const fmReadWarnedPaths=new Set;async function readFrontmatter(e){try{return parseFrontmatterRaw(await readFile$1(e,`utf-8`))??{}}catch(t){if(t?.code!==`ENOENT`&&!fmReadWarnedPaths.has(e)){fmReadWarnedPaths.add(e);let s=t instanceof Error?t.message:String(t);console.warn(`[ok-enrich] failed to read frontmatter at ${e} — enrichment degraded for this file. Reason: ${s}`)}return null}}async function fetchBacklinks(e,t){if(!e)return null;let s=await httpGet(e,`/api/backlinks?docName=${encodeURIComponent(t)}`);if(!s.ok)return null;let g=s.backlinks??s.results??s.links;if(!Array.isArray(g))return[];let S=[];for(let e of g){if(typeof e!=`object`||!e)continue;let t=e,s=typeof t.docName==`string`?t.docName:typeof t.source==`string`?t.source:typeof t.page==`string`?t.page:void 0;s&&S.push({source:s,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null})}return S}const BACKLINK_COUNT_CHUNK=100;async function fetchBacklinkCountsBatch(e,t){if(!e||t.length===0)return null;let s=[...new Set(t)],g=[];for(let e=0;e<s.length;e+=BACKLINK_COUNT_CHUNK)g.push(s.slice(e,e+BACKLINK_COUNT_CHUNK));let S=await Promise.all(g.map(async t=>{let s=await httpGet(e,`/api/backlink-counts?docNames=${encodeURIComponent(t.join(`,`))}`);return s.ok?s.counts??{}:null})),w=new Map,E=!1;for(let e of S)if(e){E=!0;for(let[t,s]of Object.entries(e))typeof s==`number`&&Number.isFinite(s)&&w.set(t,s)}return E?w:null}async function fetchForwardLinks(e,t){if(!e)return null;let s=await httpGet(e,`/api/forward-links?docName=${encodeURIComponent(t)}`);if(!s.ok)return null;let g=s.forwardLinks??s.links??s.results;if(!Array.isArray(g))return[];let S=[];for(let e of g){if(typeof e!=`object`||!e)continue;let t=e;if(t.kind===`external`&&typeof t.url==`string`){S.push({kind:`external`,url:t.url,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null});continue}let s=typeof t.docName==`string`?t.docName:void 0;s&&S.push({kind:`doc`,docName:s,title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:null})}return S}function mergeFileAndFolder(e,t,s){let g=mergeCascade(s?resolveNestedFrontmatter(s,parentFolderOf(t)):{},e??{});return{title:typeof g.title==`string`?g.title:void 0,description:typeof g.description==`string`?g.description:void 0,tags:Array.isArray(g.tags)?g.tags.filter(e=>typeof e==`string`):[],frontmatter:g}}async function enrichPath(e,t,s={}){let g=resolveWithinRoot(t.projectDir,e);if(!g.ok)throw Error(`enrichPath: ${g.reason}`);let S=g.rel,w=g.abs,E=t.historyDepth??5,D=s.includeRichFields===!0,O=readFrontmatter(w);if(!D){let e=mergeFileAndFolder(await O,S,t.projectDir);return{path:S,title:e.title,description:e.description,tags:e.tags,frontmatter:e.frontmatter,backlinkCount:null,backlinks:null,forwardLinkCount:null,forwardLinks:null,history:null,historySource:null,projectHistory:null,projectHistorySource:null}}let[k,j,F,L,B]=await Promise.all([O,fetchBacklinks(t.serverUrl,pathToDocName$1(S)).catch(()=>null),fetchForwardLinks(t.serverUrl,pathToDocName$1(S)).catch(()=>null),readShadowLog(t.projectDir,S,E).catch(()=>({commits:[],source:`shadow-repo`})),readProjectGitLog(t.projectDir,S,E).catch(()=>({commits:[],source:`git`}))]),H=mergeFileAndFolder(k,S,t.projectDir);return{path:S,title:H.title,description:H.description,tags:H.tags,frontmatter:H.frontmatter,backlinkCount:j?.length??null,backlinks:j,forwardLinkCount:F?.length??null,forwardLinks:F,history:L.commits,historySource:L.source,projectHistory:B.commits,projectHistorySource:B.source}}async function scanDirectory(e,t){let s={directMdCount:0,recursiveMdCount:0,childDirCount:0,mostRecent:null,truncated:!1},g=0,S=[{path:e,depth:0}];for(;S.length>0;){let e=S.shift();if(!e)break;if(g>=DIRECTORY_SCAN_CAP){s.truncated=!0;break}let w;try{w=await readdir(e.path,{withFileTypes:!0})}catch{continue}for(let E of w){if(g>=DIRECTORY_SCAN_CAP){s.truncated=!0;break}g++;let w=E.name;if(E.isDirectory()){if(DIR_SKIP.has(w)||w.startsWith(`.`))continue;e.depth===0&&s.childDirCount++,S.push({path:`${e.path}/${w}`,depth:e.depth+1})}else if(E.isFile()&&WIKI_EXT_RE.test(w)){s.recursiveMdCount++,e.depth===0&&s.directMdCount++;let g=`${e.path}/${w}`;try{let e=await stat$1(g);(!s.mostRecent||e.mtimeMs>s.mostRecent.mtimeMs)&&(s.mostRecent={absPath:g,relPath:relative(t,g).split(/[\\/]/).filter(Boolean).join(`/`),mtimeMs:e.mtimeMs})}catch{}}}}return s}async function enrichDirectory(e,t){let s=resolveWithinRoot(t.projectDir,e);if(!s.ok)throw Error(`enrichDirectory: ${s.reason}`);let g=s.rel,S=s.abs,w=await scanDirectory(S,t.projectDir),E;if(w.mostRecent){let e=await readFrontmatter(w.mostRecent.absPath),t=typeof e?.title==`string`?e.title:void 0;E={path:w.mostRecent.relPath,title:t??basename(w.mostRecent.relPath),updatedAt:new Date(w.mostRecent.mtimeMs).toISOString()}}let D={path:g,type:`directory`,directMdCount:w.directMdCount,recursiveMdCount:w.recursiveMdCount,childDirCount:w.childDirCount,mostRecentMd:E,truncated:w.truncated},O=resolveNestedFrontmatter(t.projectDir,g),k=O.title,j=O.description,F=O.tags??[];k!==void 0&&(D.title=k),j!==void 0&&(D.description=j),F.length>0&&(D.tags=F),Object.keys(O).length>0&&(D.frontmatter_defaults=O);let L=resolveTemplatesAvailable(t.projectDir,g);return L.length>0&&(D.templates_available=L),D}async function enrichDirectoryRecursive(e,t,s){let g=await enrichDirectory(e,s);if(t<=1)return g;let S=g.path,w=resolve(s.projectDir,S),E;try{E=await readdir(w,{withFileTypes:!0})}catch{return g}let D=[];for(let e of E){if(!e.isDirectory()||RECURSIVE_LISTING_SKIP_DIRS.has(e.name)||e.name.startsWith(`.`))continue;let g=await enrichDirectoryRecursive(S?`${S}/${e.name}`:e.name,t-1,s);D.push(g)}return D.length>0&&(g.subfolders=D),g}const RECURSIVE_LISTING_SKIP_DIRS=new Set([`.git`,`.ok`,`node_modules`,`.venv`,`venv`,`env`,`__pycache__`,`vendor`,`dist`,`build`,`out`,`output`,`.next`,`.nuxt`,`.svelte-kit`,`.astro`,`.turbo`,`.cache`,`.parcel-cache`,`coverage`]);function applyNestedFolderRulesUpsert(e){if(!isAbsolute(e.projectDir))return{ok:!1,error:{code:`BAD_PROJECT_DIR`,message:`projectDir must be absolute`}};let t=[];for(let s of e.rules){let g=resolveTargetFolderFromMatch(s.new_match??s.match);if(!g.ok)return{ok:!1,error:{code:`MULTI_FOLDER_GLOB`,message:g.message,rule:s.match}};let S=g.folder?resolve(e.projectDir,g.folder):e.projectDir,w=resolve(e.projectDir);if(!S.startsWith(w+sep)&&S!==w)return{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved target folder escapes projectDir: ${S}`,rule:s.match}};let E=null,D=null;if(s.new_match!==void 0&&s.new_match!==s.match){let t=resolveTargetFolderFromMatch(s.match);if(!t.ok)return{ok:!1,error:{code:`MULTI_FOLDER_GLOB`,message:t.message,rule:s.match}};if(E=t.folder,D=t.folder?resolve(e.projectDir,t.folder):e.projectDir,!D.startsWith(w+sep)&&D!==w)return{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved source folder escapes projectDir: ${D}`,rule:s.match}}}t.push({targetFolder:g.folder,targetAbs:S,sourceFolder:E,sourceAbs:D,rule:s})}let s=[];for(let g of t)try{if(g.sourceAbs&&g.sourceAbs!==g.targetAbs){let t=join(g.sourceAbs,`.ok`,`frontmatter.yml`);existsSync(t)&&(unlinkSync(t),autoCleanOkDir(join(g.sourceAbs,`.ok`)),s.push({match:g.rule.match,path:relPathOf$1(e.projectDir,t),action:`deleted`}))}let t=join(g.targetAbs,`.ok`),S=join(t,`frontmatter.yml`),w=readExistingFrontmatter(S),E=Object.keys(g.rule.frontmatter).length===0?{}:mergePatch(w,g.rule.frontmatter);if(Object.keys(E).length===0){existsSync(S)&&(unlinkSync(S),autoCleanOkDir(t),s.push({match:g.rule.new_match??g.rule.match,path:relPathOf$1(e.projectDir,S),action:`deleted`}));continue}mkdirSync(t,{recursive:!0});let D=(0,import_dist$1.stringify)(E),O=`${S}.tmp.${process.pid}.${Date.now()}`;writeFileSync(O,D,`utf-8`),renameSync(O,S),s.push({match:g.rule.new_match??g.rule.match,path:relPathOf$1(e.projectDir,S),action:`written`})}catch(e){return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to write nested frontmatter for ${g.rule.match}: ${e.message}`,rule:g.rule.match},...s.length>0?{partiallyApplied:s}:{}}}return{ok:!0,applied:s}}function resolveTargetFolderFromMatch(e){let t=e.split(`/`).filter(e=>e.length>0),s=[],g=!1;for(let S of t){let t=/[*?[\]{}]/.test(S);if(g&&!t)return{ok:!1,message:`Glob "${e}" matches multiple folders (literal segment "${S}" appears after a glob). Split it into one rule per folder, e.g. set_folder_rule({ rules: [{ match: "specs/foo/${S}/**", ... }, ...] }).`};if(t){if(g=!0,S!==`**`&&S!==`*`)return{ok:!1,message:`Glob "${e}" uses an unsupported pattern segment "${S}". Only "*" and "**" are supported in nested folder rules.`};continue}s.push(S)}return{ok:!0,folder:s.join(`/`)}}function readExistingFrontmatter(e){if(!existsSync(e))return{};let t=(0,import_dist$1.parse)(readFileSync(e,`utf-8`));return typeof t!=`object`||!t||Array.isArray(t)?{}:{...t}}function autoCleanOkDir(e){if(!existsSync(e))return;let t;try{t=readdirSync(e)}catch{return}if(t.length===0)try{rmdirSync(e)}catch{}}function relPathOf$1(e,t){let s=resolve(e);return t.startsWith(s+sep)?t.slice(s.length+1).split(sep).join(`/`):t}const SUBSTITUTION_ALLOWLIST=[`date`,`user`],TOKEN_PATTERN=/\{\{([^{}\n]+?)\}\}/g;function validateSubstitution(e){let t=[];for(let s of e.matchAll(TOKEN_PATTERN)){let e=(s[1]??``).trim();isAllowedToken(e)||t.push({token:e,offset:s.index??0})}return t}function applySubstitution(e,t){return e.replace(TOKEN_PATTERN,(e,s)=>{let g=s.trim();return isAllowedToken(g)?t[g]:e})}function isAllowedToken(e){return SUBSTITUTION_ALLOWLIST.includes(e)}function todayIsoUtc(e=new Date){return`${e.getUTCFullYear().toString().padStart(4,`0`)}-${(e.getUTCMonth()+1).toString().padStart(2,`0`)}-${e.getUTCDate().toString().padStart(2,`0`)}`}const NAME_RE=/^[A-Za-z0-9_-]+$/;function applyTemplateWrite(e){let t=validateInputs(e.projectDir,e.folder,e.name);if(!t.ok)return{ok:!1,error:t.error};let s=validateTitle(e.frontmatter.title);if(!s.ok)return{ok:!1,error:s.error};let g=validateSubstitutionAllowlist(e.body);if(!g.ok)return{ok:!1,error:g.error};let{templatesDir:S,filePath:w}=templatePaths(e.projectDir,t.folderRel,e.name),E=serializeFrontmatter(e.frontmatter),D=E?`---\n${E}---\n${e.body}`:e.body;try{mkdirSync(S,{recursive:!0})}catch(t){return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to create template directory at ${relPathOf(e.projectDir,S)}: ${t.message}`}}}let O=!existsSync(w),k=`${w}.tmp.${process.pid}.${Date.now()}`;try{writeFileSync(k,D,`utf-8`),renameSync(k,w)}catch(t){try{unlinkSync(k)}catch{}return{ok:!1,error:{code:`WRITE_ERROR`,message:`Failed to write template at ${relPathOf(e.projectDir,w)}: ${t.message}`}}}let j=[];return(e.frontmatter.description===void 0||typeof e.frontmatter.description!=`string`||e.frontmatter.description.length===0)&&j.push("Template frontmatter.description is missing — `description` disambiguates between similarly-named templates in the menu. Recommended but not required."),{ok:!0,path:relPathOf(e.projectDir,w),created:O,warnings:j}}function applyTemplateDelete(e){let t=validateInputs(e.projectDir,e.folder,e.name);if(!t.ok)return{ok:!1,error:t.error};let{templatesDir:s,okDir:g,filePath:S}=templatePaths(e.projectDir,t.folderRel,e.name),w=existsSync(S);if(w)try{unlinkSync(S)}catch(t){return{ok:!1,error:{code:`UNLINK_FAILED`,message:`Failed to delete template at ${relPathOf(e.projectDir,S)}: ${t.message}`}}}let E=!1,D=!1;if(existsSync(s)&&isEmpty(s))try{rmdirSync(s),E=!0}catch{}if(existsSync(g)&&isEmpty(g))try{rmdirSync(g),D=!0}catch{}return{ok:!0,path:relPathOf(e.projectDir,S),existed:w,cleanedEmpty:{templatesDir:E,okDir:D}}}function validateInputs(e,t,s){if(!isAbsolute(e))return{ok:!1,error:{code:`BAD_PROJECT_DIR`,message:`projectDir must be absolute`}};if(!NAME_RE.test(s))return{ok:!1,error:{code:`BAD_NAME`,message:`Template name must match /^[A-Za-z0-9_-]+$/ (got: ${JSON.stringify(s)}). Use letters, digits, underscores, or hyphens — no slashes, dots, or spaces.`}};let g=t.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``).replace(/^\.$/,``);if(g.includes(`..`))return{ok:!1,error:{code:`PATH_TRAVERSAL`,message:`Folder path may not contain "..": ${JSON.stringify(t)}`}};let S=g?resolve(e,g):e,w=resolve(e);return!S.startsWith(w+sep)&&S!==w?{ok:!1,error:{code:`PATH_ESCAPE`,message:`Resolved folder path escapes projectDir: ${S}`}}:{ok:!0,folderRel:g}}function validateTitle(e){return typeof e!=`string`||e.length===0?{ok:!1,error:{code:`TEMPLATE_TITLE_REQUIRED`,message:"Template frontmatter.title is required (D14). `title` is the menu surface — agents pick templates by name+title; a title-less template is effectively invisible. Set a non-empty `title` and retry."}}:{ok:!0}}function validateSubstitutionAllowlist(e){let t=validateSubstitution(e);return t.length===0?{ok:!0}:{ok:!1,error:{code:`TEMPLATE_UNKNOWN_VARIABLE`,message:`Template body contains unknown substitution token(s): ${t.map(e=>`\`{{${e.token}}}\` at offset ${e.offset}`).join(`, `)}. v1 allowlist: \`{{date}}\`, \`{{user}}\` (D5 / FR17). Remove or rename the offending tokens and retry.`}}}function templatePaths(e,t,s){let g=t?join(e,t,`.ok`):join(e,`.ok`),S=join(g,`templates`);return{okDir:g,templatesDir:S,filePath:join(S,`${s}.md`)}}function relPathOf(e,t){return normalize(t.startsWith(e+sep)?t.slice(e.length+1):t).split(sep).join(`/`)}function serializeFrontmatter(e){let t={};return e.title!==void 0&&(t.title=e.title),e.description!==void 0&&(t.description=e.description),Array.isArray(e.tags)&&e.tags.length>0&&(t.tags=e.tags),Object.keys(t).length===0?``:(0,import_dist$1.stringify)(t)}function isEmpty(e){try{return readdirSync(e).length===0}catch{return!1}}const INSTALLED_AGENTS_SCHEMES=[`claude`,`codex`,`cursor`],INSTALLED_AGENTS_PROBE_TIMEOUT_MS=2e3,MACOS_APP_NAMES={claude:[`Claude`],codex:[`Codex`,`OpenAI Codex`],cursor:[`Cursor`]};function createInstalledAgentsProbe(e){let t=new Map,s=e.now??Date.now,g=e.ttlMs??6e4;async function S(S){let w=t.get(S);if(w?.status===`resolved`&&w.expiresAt>s())return w.installed;if(w?.status===`inflight`)return w.promise;let E=(async()=>{try{let w=await e.probe(S);return t.set(S,{status:`resolved`,installed:w,expiresAt:s()+g}),w}catch{return t.set(S,{status:`resolved`,installed:!1,expiresAt:s()+g}),!1}})();return t.set(S,{status:`inflight`,promise:E}),E}async function w(){let e=await Promise.all(INSTALLED_AGENTS_SCHEMES.map(async e=>[e,await S(e)]));return Object.fromEntries(e)}return{probeAll:w,probeWithCache:S}}async function handleInstalledAgents(e,t,s){if(e.method!==`GET`){writeJson$1(t,405,{error:`Method not allowed`});return}try{writeJson$1(t,200,await s())}catch(e){console.error(`[installed-agents]`,e),writeJson$1(t,500,{error:`Internal server error`})}}function writeJson$1(e,t,s){e.writeHead(t,{"Content-Type":`application/json`,"X-Content-Type-Options":`nosniff`}),e.end(JSON.stringify(s))}function createOsProbe(e,t=execFile){return s=>e===`darwin`?probeMacOs(s,t):e===`win32`?probeWindows(s,t):probeLinux(s,t)}function probeMacOs(e,t){let s=MACOS_APP_NAMES[e];function g(e){return new Promise(s=>{t(`osascript`,[`-e`,`id of app "${e}"`],{timeout:INSTALLED_AGENTS_PROBE_TIMEOUT_MS,encoding:`utf-8`},(e,t)=>{if(e){s(!1);return}s(t.trim().length>0)})})}return(async()=>{for(let e of s)if(await g(e))return!0;return!1})()}function probeWindows(e,t){return new Promise(s=>{t(`reg`,[`query`,`HKCR\\${e}`,`/ve`],{timeout:INSTALLED_AGENTS_PROBE_TIMEOUT_MS,encoding:`utf-8`},e=>{s(!e)})})}function probeLinux(e,t){return new Promise(s=>{t(`xdg-mime`,[`query`,`default`,`x-scheme-handler/${e}`],{timeout:INSTALLED_AGENTS_PROBE_TIMEOUT_MS,encoding:`utf-8`},(e,t)=>{if(e){s(!1);return}s(t.trim().length>0)})})}const FIXED_HUB_BASENAMES=[`INDEX`,`README`,`REPORT`,`SPEC`],MAX_CANDIDATES=3;function findHubCandidates(e,t){let s=[],g=new Set,S=t=>{!t||g.has(t)||t!==e&&(g.add(t),s.push(t))},w=buildLowerDocNameIndex(t),E=parentFolder(e);for(;;){for(let e of FIXED_HUB_BASENAMES)if(S(lookup$1(t,w,joinDocName(E,e))),s.length>=MAX_CANDIDATES)return s;let e=E===``?null:basename$1(E);if(e&&(S(lookup$1(t,w,joinDocName(E,e))),s.length>=MAX_CANDIDATES))return s;if(E===``)break;E=parentFolder(E)}return s}function lookup$1(e,t,s){return e.has(s)?s:t.get(s.toLowerCase())??null}function buildLowerDocNameIndex(e){let t=new Map;for(let s of e.keys()){let e=s.toLowerCase();t.has(e)||t.set(e,s)}return t}function parentFolder(e){let t=e.lastIndexOf(`/`);return t<0?``:e.slice(0,t)}function basename$1(e){let t=e.lastIndexOf(`/`);return t<0?e:e.slice(t+1)}function joinDocName(e,t){return e===``?t:`${e}/${t}`}function splitFrontmatterLines(e){return e?e.replace(/^---\r?\n/,``).replace(/\r?\n---(?:\r?\n)?$/,``).split(/\r?\n/):[]}function normalizeFrontmatterScalar(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?t.slice(1,-1).trim():t}function extractFrontmatterScalar(e,t){let s=`${t}:`;for(let t of splitFrontmatterLines(e))if(t.startsWith(s))return normalizeFrontmatterScalar(t.slice(s.length))||null;return null}function parseInlineAliases(e){let t=[],s=``,g=null;for(let S of e){if(g){s+=S,S===g&&(g=null);continue}if(S===`"`||S===`'`){g=S,s+=S;continue}if(S===`,`){let e=normalizeFrontmatterScalar(s);e&&t.push(e),s=``;continue}s+=S}let S=normalizeFrontmatterScalar(s);return S&&t.push(S),t}function dedupeExact(e){let t=[],s=new Set;for(let g of e)!g||s.has(g)||(s.add(g),t.push(g));return t}function extractPageAliases(e){let{frontmatter:t}=stripFrontmatter(e);if(!t)return[];let s=splitFrontmatterLines(t);for(let e=0;e<s.length;e+=1){let t=s[e]?.match(/^aliases:\s*(.*)$/);if(!t)continue;let g=t[1]?.trim()??``;if(g){if(g.startsWith(`[`)&&g.endsWith(`]`))return dedupeExact(parseInlineAliases(g.slice(1,-1)));let e=normalizeFrontmatterScalar(g);return e?[e]:[]}let S=[];for(let t=e+1;t<s.length;t+=1){let e=s[t];if(e?.trim()){if(/^\s*-\s+/.test(e)){let t=normalizeFrontmatterScalar(e.replace(/^\s*-\s+/,``));t&&S.push(t);continue}if(/^[^\s][^:]*:\s*/.test(e))break;break}}return dedupeExact(S)}return[]}function extractPageTitle(e,t){let{frontmatter:s,body:g}=stripFrontmatter(e),S=extractFrontmatterScalar(s,`title`);if(S)return S;let w=g.match(/^# (.+)$/m);return w?w[1].trim():t}function parseFrontmatterMetadata(e){return e?.trim()?{cluster:extractFrontmatterScalar(e,`cluster`)??void 0,category:extractFrontmatterScalar(e,`category`)??void 0,tags:extractFrontmatterArray(e,`tags`)}:{cluster:void 0,category:void 0,tags:void 0}}function extractFrontmatterArray(e,t){let s=`${t}:`,g=splitFrontmatterLines(e);for(let e=0;e<g.length;e+=1){let t=g[e];if(!t?.startsWith(s))continue;let S=t.slice(s.length).trim();if(S){if(S.startsWith(`[`)&&S.endsWith(`]`)){let e=parseInlineAliases(S.slice(1,-1));return e.length>0?e:void 0}let e=normalizeFrontmatterScalar(S);return e?[e]:void 0}let w=[];for(let t=e+1;t<g.length;t+=1){let e=g[t];if(e?.trim()){if(/^\s*-\s+/.test(e)){let t=normalizeFrontmatterScalar(e.replace(/^\s*-\s+/,``));t&&w.push(t);continue}if(/^[^\s][^:]*:\s*/.test(e))break;break}}return w.length>0?w:void 0}}function extractPageIdentity(e,t){let s=extractPageTitle(e,t),g=extractPageAliases(e),S=dedupeExact([s,...g]),w=[],E=new Set;for(let e of S){let t=toWikiLinkSlug(e);!t||E.has(t)||(E.add(t),w.push(t))}return{docName:t,title:s,aliases:g,matchLabels:S,normalizedMatchLabels:w}}const MAX_ZIP_BYTES=102400;function resolveBundledSkillDir(){let e=[`../assets/skills/open-knowledge`,`./assets/skills/open-knowledge`],t=[];for(let s of e){let e=fileURLToPath(new URL(s,import.meta.url));if(existsSync(e))return e;t.push(e)}throw Error(`Bundled skill asset directory not found. Tried: ${t.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 g of s){let s=join(e,g.name);g.isDirectory()?yield*walkFiles(s,t):g.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){let s=computeWrapperFolderName(e),g=new import_yazl.ZipFile;g.addEmptyDirectory(`${s}/`);let S=[];for await(let t of walkFiles(e))S.push(t);S.sort();for(let t of S){let S=join(e,t),w=`${s}/${toPosixZipPath(t)}`;g.addFile(S,w)}g.end(),await new Promise((e,s)=>{let S=createWriteStream(t);g.outputStream.pipe(S),S.on(`close`,()=>e()),S.on(`error`,s),g.outputStream.on(`error`,s)})}async function sha256OfFile(e){return new Promise((t,s)=>{let g=createHash(`sha256`),S=createReadStream(e);S.on(`data`,e=>g.update(e)),S.on(`end`,()=>t(g.digest(`hex`))),S.on(`error`,s)})}function extractMetadataVersion(e){let t=e.indexOf(`
811
822
  ---`,4);if(!e.startsWith(`---
812
823
  `)||t<0)return;let s=e.slice(4,t),g=s.search(/^metadata:/m);if(g<0)return;let S=s.slice(g).split(`
813
- `).slice(1);for(let e of S){if(/^[^\s]/.test(e))break;let t=e.match(/^\s+version:\s*["']?([^"'\s]+)["']?$/);if(t)return t[1]}}async function validateSkillZip(e,t){let s=statSync(e).size;if(s>MAX_ZIP_BYTES)throw Error(`Built ${e} is ${s} bytes, exceeds ${MAX_ZIP_BYTES}-byte ceiling`);let g=await sha256OfFile(e),S=await readFile$1(join(resolveBundledSkillDir(),`SKILL.md`),`utf-8`);if(!/^name:\s+open-knowledge$/m.test(S.slice(0,1e3)))throw Error("SKILL.md frontmatter `name:` does not match 'open-knowledge'. Check packages/server/assets/skills/open-knowledge/SKILL.md frontmatter.");let w=extractMetadataVersion(S);if(t!==void 0){if(!w)throw Error("SKILL.md metadata.version missing. Add it to packages/server/assets/skills/open-knowledge/SKILL.md or run `bash scripts/sync-skill-version.sh`.");if(w!==t)throw Error(`SKILL.md metadata.version (${w}) does not match expected version (${t}). Run \`bash scripts/sync-skill-version.sh\` after bumping package versions.`)}return{size:s,sha256:g,skillVersion:w}}async function buildSkillZip(e={}){let t=e.sourceDir??resolveBundledSkillDir(),s=e.outputPath??join(process.cwd(),`openknowledge.skill`);await zipDirectory(t,s);let{size:g,sha256:S,skillVersion:w}=await validateSkillZip(s,e.expectedSkillVersion);return{outputPath:s,size:g,sha256:S,skillVersion:w}}const SKILL_INSTALL_EVENTS_FILE_REL=[`.ok`,`skill-install-events.jsonl`];async function recordSkillInstallEvent(e,t){let s=t?.homedir??(()=>process.env.HOME??``),g=t?.warn??((e,t)=>{console.warn(t,e)}),S=s();if(!S){g({event:`skill-install-events.no-home`},`[skill-install-events] HOME not resolvable; telemetry skipped`);return}let w=join(S,...SKILL_INSTALL_EVENTS_FILE_REL),E=`${JSON.stringify(e)}\n`;try{await tracedMkdir(dirname(w),{recursive:!0})}catch(e){g({event:`skill-install-events.mkdir-failed`,error:String(e)},`[skill-install-events] mkdir failed; telemetry skipped`);return}try{await tracedWriteFile(w,E,{flag:`a`,encoding:`utf-8`})}catch(e){g({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),g;try{g=await readFileAsync(s,`utf-8`)}catch(e){if(e.code===`ENOENT`)return null;throw e}let S=(0,import_dist$1.parseDocument)(g);if(S.errors.length>0)return t.warn({event:`skill-state.yaml-parse-error`,path:s,errors:S.errors.map(e=>e.message)},`skill-state.yml parse failed; treating as fresh install`),null;let w=SkillStateSchema.safeParse(S.toJSON());if(!w.success){let e=w.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:w.error.issues.map(e=>({path:e.path,message:e.message}))},`skill-state.yml failed schema validation; treating as fresh install`),null}return w.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 g=skillStateYamlPath(e);await tracedMkdir(dirname(g),{recursive:!0});let S=(0,import_dist$1.parseDocument)(``);S.contents=S.createNode(s.data),await atomicWriteFile(g,S.toString(),{fs:TRACED_FS_ADAPTER})}async function readTargetVersion(e,t,s){let g=await readSkillStateFile(e,s);return g===null?null:g.targets[t]?.version??null}async function readTargetRecordedAt(e,t,s){let g=await readSkillStateFile(e,s);return g===null?null:g.targets[t]?.recordedAt??null}async function writeTargetVersion(e,t,s,g,S){if(!SKILL_STATE_VERSION_RE.test(s))throw Error(`Refusing to write invalid version string: ${s}`);let w=await readSkillStateFile(e,S)??emptySkillState(),E=new Date().toISOString(),D=w.targets[t],O=g===void 0?D?.surface??void 0:g,k=O===void 0?{version:s,recordedAt:E}:{version:s,recordedAt:E,surface:O};await writeSkillStateFile(e,{...w,targets:{...w.targets,[t]:k}})}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,g]=await Promise.all([readServerPackageVersion(),readAllTargets(e,t)]);return{currentVersion:s,targets:g}}async function readAllTargets(e,t=DEFAULT_LOGGER){let s=null;try{s=await readSkillStateFile(e,t)}catch(g){t.warn({event:`skill-state.read-error`,path:skillStateYamlPath(e),error:String(g)},`non-ENOENT error reading skill-state.yml; treating as absent`),s=null}let g=SKILL_STATE_TARGETS.map(e=>{let t=s?.targets[e];return t?[e,{version:t.version,recordedAt:t.recordedAt}]:[e,null]});return Object.fromEntries(g)}const CENTRAL_SKILL_DIR_REL=[`.agents`,`skills`,`open-knowledge`],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,g,S){return new Promise(w=>{let E;try{E=e(t,s,{env:g,stdio:[`ignore`,`pipe`,`pipe`]})}catch(e){w({kind:`spawn-error`,stderr:``,error:e});return}let D=``,O=!1,k=e=>{O||(O=!0,clearTimeout(j),w(e))};E.stderr?.on(`data`,e=>{D+=typeof e==`string`?e:e.toString(`utf-8`)}),E.on(`error`,e=>{k({kind:`spawn-error`,stderr:D,error:e})}),E.on(`exit`,e=>{k(e===0?{kind:`ok`,exitCode:e,stderr:D}:{kind:`nonzero`,exitCode:e,stderr:D})});let j=setTimeout(()=>{try{E.kill(`SIGTERM`)}catch{}k({kind:`timeout`,stderr:D})},S)})}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)},g=e.spawn??spawn,S=e.timeoutMs??DEFAULT_TIMEOUT_MS$3,w=e.surface??`cli-npx-skills-add`,E=async(e,g,S)=>{await recordSkillInstallEvent({ts:new Date().toISOString(),surface:w,target:`cli-hosts`,outcome:e,...g===void 0?{}:{version:g},...S===void 0?{}:{reason:S}},{homedir:()=>t,warn:s.warn})},D;try{D=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 E(`failed`,void 0,`version-read-failed`),`failed`}let O=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(O!==null&&O===D){if(await centralSkillExists(t))return s.info?.({event:`skill-install.skip-current`,version:D},`Open Knowledge skill already installed at current version; skipping.`),await E(`skip-current`,D),`skip-current`;s.info?.({event:`skill-install.reinstall-missing`,version:D,path:centralSkillDir(t)},`Sidecar matches current version but skill files are missing; reinstalling.`)}let k;try{k=resolveBundledSkillDir()}catch(e){return s.warn({event:`skill-install.failed`,reason:`bundled-asset-missing`,error:String(e)},`Skill install aborted — bundled SKILL.md asset not found.`),await E(`failed`,D,`bundled-asset-missing`),`failed`}let j=await runSpawn(g,`npx`,[`-y`,SKILLS_CLI_SPEC,`add`,k,`--agent`,`*`,`-g`,`-y`,`--copy`],{...process.env,HOME:t},S);if(j.kind===`ok`){try{await writeTargetVersion(t,`cli-hosts`,D,w,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 E(`failed`,D,`sidecar-write-failed`),`failed`}return s.info?.({event:`skill-install.installed`,version:D},`Open Knowledge skill installed to detected agent hosts.`),await E(`installed`,D),`installed`}return j.kind===`timeout`?(s.warn({event:`skill-install.failed`,reason:`timeout`,timeoutMs:S,stderr:j.stderr},`Skill install subprocess timed out. Run manually: npx ${SKILLS_CLI_SPEC} add ${k} --agent '*' -g -y --copy`),await E(`failed`,D,`timeout`),`failed`):j.kind===`spawn-error`?(s.warn({event:`skill-install.failed`,reason:`spawn-error`,error:String(j.error),stderr:j.stderr},`Skill install failed — \`npx\` unavailable or spawn errored. Run manually: npx ${SKILLS_CLI_SPEC} add ${k} --agent '*' -g -y --copy`),await E(`failed`,D,`spawn-error`),`failed`):(s.warn({event:`skill-install.failed`,reason:`nonzero-exit`,exitCode:j.exitCode,stderr:j.stderr},`Skill install subprocess exited non-zero. Run manually: npx ${SKILLS_CLI_SPEC} add ${k} --agent '*' -g -y --copy`),await E(`failed`,D,`nonzero-exit:${j.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 g={detached:!0,stdio:`ignore`};try{return t===`darwin`?(s(`open`,[e],g).unref(),{ok:!0}):t===`win32`?(s(`cmd`,[`/c`,`start`,`""`,e],g).unref(),{ok:!0}):t===`linux`?(s(`xdg-open`,[e],g).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)),g=e.platformName??platform(),S=e.spawnFn??spawn,w=e.logger,E=async(e,s,g)=>{await recordSkillInstallEvent({ts:new Date().toISOString(),surface:`server-build-and-open`,target:`claude-cowork`,outcome:e,...s===void 0?{}:{version:s},...g===void 0?{}:{reason:g}},{homedir:()=>t,warn:w?.warn})};if(!e.force){let e=null;try{e=await readServerPackageVersion()}catch(e){w?.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,g=null;try{[s,g]=await Promise.all([readTargetVersion(t,`claude-cowork`,w),readTargetRecordedAt(t,`claude-cowork`,w)])}catch(e){w?.warn?.({event:`skill-install.gate.read-failed`,error:String(e)},`Could not read claude-cowork install-state; rebuilding.`)}if(s!==null&&s===e)return w?.info?.({event:`skill-install.skip-current`,target:`claude-cowork`,version:e},`Open Knowledge skill already delivered at current version; skipping rebuild.`),await E(`skip-current`,e),{status:`skip-current`,skillVersion:e,...g===null?{}:{recordedAt:g}}}}try{await tracedMkdir(dirname(s),{recursive:!0})}catch(e){let t=e instanceof Error?e.message:String(e);return await E(`failed`,void 0,`mkdir-failed:${t}`),{status:`failed`,buildError:`could not create output directory: ${t}`}}let D;try{D=await buildSkillZip({outputPath:s})}catch(e){let t=e instanceof Error?e.message:String(e);return await E(`failed`,void 0,`build-failed:${t}`),{status:`failed`,buildError:t}}let O={status:`built`,outputPath:D.outputPath,size:D.size,sha256:D.sha256,skillVersion:D.skillVersion};if(D.skillVersion)try{await writeTargetVersion(t,`claude-cowork`,D.skillVersion,`server-build-and-open`,w)}catch(e){w?.warn?.({event:`skill-install.state-write-failed`,target:`claude-cowork`,version:D.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 E(`built`,D.skillVersion),O;let k=invokeFileAssociation(D.outputPath,g,S);return k.ok?(await E(`installed`,D.skillVersion),{...O,status:`installed`}):(await E(`built`,D.skillVersion,`handoff-${k.reason}`),{...O,handoffError:{reason:k.reason,message:k.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})}function resolveContentDir(e,t){return resolve(t,e.content.dir)}function getLocalDir(e){return resolve(e,`.ok`,LOCAL_DIR)}function resolveLockDir(e){return getLocalDir(e)}var UploadWriteError=class extends Error{reason;constructor(e,t){super(`UploadWriteError: ${e}`,{cause:t}),this.name=`UploadWriteError`,this.reason=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 g=extname(s),S=s.slice(0,s.length-g.length),w=[s,...Array.from({length:99},(e,t)=>`${S}-${t+1}${g}`)];for(let s of w){let g=resolve(t,s);try{tracedLinkSync(e,g);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(`storage-full`,t):s===`EROFS`||s===`EACCES`||s===`EPERM`?new UploadWriteError(`storage-readonly`,t):new UploadWriteError(`storage-error`,t)}}try{tracedUnlinkSync(e)}catch{}throw new UploadWriteError(`collision-exhaustion`)}function cleanupOrphanUploadTempfiles(e,{ageMs:t=1440*60*1e3}={}){let s=tmpUploadDir(e),g={scanned:0,deleted:0,errors:0};if(!existsSync(s))return g;let S;try{S=readdirSync(s)}catch(e){return log$4.warn({err:e,dir:s},`[upload-tempfile-sweep] readdir failed`),g.errors++,g}let w=Date.now()-t;for(let e of S){if(!e.startsWith(`upload-`))continue;g.scanned++;let t=resolve(s,e);try{if(statSync(t).mtimeMs>=w)continue;tracedUnlinkSync(t),g.deleted++}catch(e){log$4.warn({err:e,path:t},`[upload-tempfile-sweep] entry failed`),g.errors++}}return(g.deleted>0||g.errors>0)&&log$4.info({dir:s,scanned:g.scanned,deleted:g.deleted,errors:g.errors},`[upload-tempfile-sweep] swept ${g.deleted}/${g.scanned} (errors: ${g.errors})`),g}function matchFence$2(e){let t=/^\s{0,3}([`~]{3,})/.exec(e);if(!t)return null;let s=t[1],g=s[0];return g!=="`"&&g!==`~`?null:{char:g,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 g=t+s,S=g;for(;S<e.length;){if(e[S]!=="`"){S++;continue}let t=0;for(;e[S+t]==="`";)t++;if(t===s)return{nextIndex:S+s};S+=t}return{nextIndex:g}}function readWikiLink$2(e,t){let s=/^\[\[([^\n#[\]|]+)(?:#([^\n[\]|]+))?(?:\|([^\n[\]]+))?\]\]/.exec(e.slice(t));if(!s)return null;let g=s[1]?.trim(),S=s[2]?.trim()||null,w=s[3]?.trim()||null;return g?{target:g,alias:w,anchor:S,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 g=s[2]??``;return{text:s[1]??``,hrefRaw:g,href:g.startsWith(`<`)&&g.endsWith(`>`)?g.slice(1,-1):g,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 g=s[2]??``;return{alt:s[1]??``,hrefRaw:g,href:g.startsWith(`<`)&&g.endsWith(`>`)?g.slice(1,-1):g,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 g=``,S=0,w=0,E=leadingMarkdownPrefixLength$2(e);for(E>0&&(g+=e.slice(0,E),w=E);w<e.length;){if(e[w]===`\\`&&w+1<e.length){g+=e.slice(w,w+2),w+=2;continue}if(e[w]==="`"){let t=readInlineCode$2(e,w);if(t){g+=e.slice(w,t.nextIndex),w=t.nextIndex;continue}}if(e[w]===`[`&&e[w+1]===`[`){let E=readWikiLink$2(e,w);if(E){E.target===t?(g+=`[[${s}${E.anchor?`#${E.anchor}`:``}${E.alias?`|${E.alias}`:``}]]`,S++):g+=e.slice(w,E.nextIndex),w=E.nextIndex;continue}}g+=e[w],w++}return{markdown:g,rewrites:S}}function recomputeRelativeImageHref(e,t,s){let g=e.indexOf(`#`),S=g>=0?e.slice(g):``,w=g>=0?e.slice(0,g):e,E=w.indexOf(`?`),D=E>=0?w.slice(E):``,O=E>=0?w.slice(0,E):w;if(O.startsWith(`/`)||O.startsWith(`//`)||/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(O))return null;let k=posix.dirname(t),j=posix.dirname(s);if(k===j)return null;let F=k===`.`?`/`:`/${k}/`,L=posix.resolve(F,O).slice(1),B=posix.relative(j===`.`?``:j,L);return B||=posix.basename(L),O.startsWith(`./`)&&!B.startsWith(`./`)&&!B.startsWith(`../`)&&(B=`./${B}`),`${B}${D}${S}`}function recomputeRelativeMarkdownHref(e,t,s){let g=e.indexOf(`#`),S=g>=0?e.slice(g):``,w=g>=0?e.slice(0,g):e,E=w.indexOf(`?`),D=E>=0?w.slice(E):``,O=E>=0?w.slice(0,E):w,k=posix.dirname(t),j=posix.relative(k===`.`?``:k,s);return j||=posix.basename(s),O.endsWith(`.mdx`)?j+=`.mdx`:O.endsWith(`.md`)&&(j+=`.md`),O.startsWith(`./`)&&!j.startsWith(`./`)&&!j.startsWith(`../`)&&(j=`./${j}`),`${j}${D}${S}`}function rewriteMarkdownLinksInLine(e,t,s,g){let S=``,w=0,E=0,D=leadingMarkdownPrefixLength$2(e);for(D>0&&(S+=e.slice(0,D),E=D);E<e.length;){if(e[E]===`\\`&&E+1<e.length){S+=e.slice(E,E+2),E+=2;continue}if(e[E]==="`"){let t=readInlineCode$2(e,E);if(t){S+=e.slice(E,t.nextIndex),E=t.nextIndex;continue}}if(e[E]===`[`&&e[E+1]===`[`){let t=readWikiLink$2(e,E);if(t){S+=e.slice(E,t.nextIndex),E=t.nextIndex;continue}}if(e[E]===`!`&&e[E+1]===`[`){let D=readImageRef(e,E);if(D){let O=t===s&&s!==g?recomputeRelativeImageHref(D.href,s,g):null;if(O!==null){let e=D.hrefRaw.startsWith(`<`)&&D.hrefRaw.endsWith(`>`)?`<${O}>`:O;S+=`![${D.alt}](${e}${D.titleSuffix})`,w++}else S+=e.slice(E,D.nextIndex);E=D.nextIndex;continue}}if(e[E]===`[`){let D=readMarkdownLink$2(e,E);if(D){if(resolveInternalHref(D.href,t)?.docName===s){let e=recomputeRelativeMarkdownHref(D.href,t,g),s=D.hrefRaw.startsWith(`<`)&&D.hrefRaw.endsWith(`>`)?`<${e}>`:e;S+=`[${D.text}](${s}${D.titleSuffix})`,w++}else S+=e.slice(E,D.nextIndex);E=D.nextIndex;continue}}S+=e[E],E++}return{markdown:S,rewrites:w}}function rewriteWikiLinksForDocumentRename(e,t,s){let g=null,S=0;return{markdown:splitLines(e).map(({line:e,ending:w})=>{if(g)return isFenceClose$2(e,g)&&(g=null),`${e}${w}`;let E=matchFence$2(e);if(E)return g=E,`${e}${w}`;let D=rewriteWikiLinksInLine(e,t,s);return S+=D.rewrites,`${D.markdown}${w}`}).join(``),rewrites:S}}function rewriteMarkdownLinksForDocumentRename(e,t,s,g){let S=null,w=0;return{markdown:splitLines(e).map(({line:e,ending:E})=>{if(S)return isFenceClose$2(e,S)&&(S=null),`${e}${E}`;let D=matchFence$2(e);if(D)return S=D,`${e}${E}`;let O=rewriteMarkdownLinksInLine(e,t,s,g);return w+=O.rewrites,`${O.markdown}${E}`}).join(``),rewrites:w}}function rewriteOutboundMarkdownLinksInLine(e,t,s){let g=``,S=0,w=0,E=leadingMarkdownPrefixLength$2(e);for(E>0&&(g+=e.slice(0,E),w=E);w<e.length;){if(e[w]===`\\`&&w+1<e.length){g+=e.slice(w,w+2),w+=2;continue}if(e[w]==="`"){let t=readInlineCode$2(e,w);if(t){g+=e.slice(w,t.nextIndex),w=t.nextIndex;continue}}if(e[w]===`[`&&e[w+1]===`[`){let t=readWikiLink$2(e,w);if(t){g+=e.slice(w,t.nextIndex),w=t.nextIndex;continue}}if(e[w]===`!`&&e[w+1]===`[`){let t=readImageRef(e,w);if(t){g+=e.slice(w,t.nextIndex),w=t.nextIndex;continue}}if(e[w]===`[`){let E=readMarkdownLink$2(e,w);if(E){let D=resolveInternalHref(E.href,t);if(D!==null){let t=recomputeRelativeMarkdownHref(E.href,s,D.docName);if(t!==E.href){let e=E.hrefRaw.startsWith(`<`)&&E.hrefRaw.endsWith(`>`)?`<${t}>`:t;g+=`[${E.text}](${e}${E.titleSuffix})`,S++}else g+=e.slice(w,E.nextIndex)}else g+=e.slice(w,E.nextIndex);w=E.nextIndex;continue}}g+=e[w],w++}return{markdown:g,rewrites:S}}function rewriteOutboundMarkdownLinksForSourceMove(e,t,s){if(posix.dirname(t)===posix.dirname(s))return{markdown:e,rewrites:0};let g=null,S=0;return{markdown:splitLines(e).map(({line:e,ending:w})=>{if(g)return isFenceClose$2(e,g)&&(g=null),`${e}${w}`;let E=matchFence$2(e);if(E)return g=E,`${e}${w}`;let D=rewriteOutboundMarkdownLinksInLine(e,t,s);return S+=D.rewrites,`${D.markdown}${w}`}).join(``),rewrites:S}}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}};function buildRenameMap(e){let t=new Map,s=[];for(let{from:g,to:S}of e){for(let[e,w]of t)e!==g&&w===S&&s.push({existing:e,incoming:g,to:S});t.set(g,S)}if(s.length>0)throw new ManagedRenameCollisionError(s);return t}function rewriteSupportedLinksForRename(e,t,s,g){let{frontmatter:S,body:w}=stripFrontmatter(e),E=rewriteWikiLinksForDocumentRename(w,s,g),D=rewriteMarkdownLinksForDocumentRename(E.markdown,t,s,g);return{markdown:prependFrontmatter(S,D.markdown),rewrites:E.rewrites+D.rewrites}}function applyRenameMap(e,t,s){let g=e,S=0,w,E=[];for(let[e,g]of s)e!==g&&(e===t?w=g:E.push([e,g]));if(w!==void 0){let e=rewriteSupportedLinksForRename(g,t,t,w);g=e.markdown,S+=e.rewrites;let{frontmatter:s,body:E}=stripFrontmatter(g),D=rewriteOutboundMarkdownLinksForSourceMove(E,t,w);g=prependFrontmatter(s,D.markdown),S+=D.rewrites}let D=w??t,O=new Map;for(let[e,t]of E){let s=`__OK_RENAME_${randomUUID().replaceAll(`-`,``)}__`,w=rewriteSupportedLinksForRename(g,D,e,s);w.rewrites>0&&(g=w.markdown,S+=w.rewrites,O.set(s,t))}for(let[e,t]of O)g=rewriteSupportedLinksForRename(g,D,e,t).markdown;return{markdown:g,rewrites:S}}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 g=Math.max(e.lastIndexOf(`.`,t-1),e.lastIndexOf(`?`,t-1),e.lastIndexOf(`!`,t-1),e.lastIndexOf(`
824
+ `).slice(1);for(let e of S){if(/^[^\s]/.test(e))break;let t=e.match(/^\s+version:\s*["']?([^"'\s]+)["']?$/);if(t)return t[1]}}async function validateSkillZip(e,t){let s=statSync(e).size;if(s>MAX_ZIP_BYTES)throw Error(`Built ${e} is ${s} bytes, exceeds ${MAX_ZIP_BYTES}-byte ceiling`);let g=await sha256OfFile(e),S=await readFile$1(join(resolveBundledSkillDir(),`SKILL.md`),`utf-8`);if(!/^name:\s+open-knowledge$/m.test(S.slice(0,1e3)))throw Error("SKILL.md frontmatter `name:` does not match 'open-knowledge'. Check packages/server/assets/skills/open-knowledge/SKILL.md frontmatter.");let w=extractMetadataVersion(S);if(t!==void 0){if(!w)throw Error("SKILL.md metadata.version missing. Add it to packages/server/assets/skills/open-knowledge/SKILL.md or run `bash scripts/sync-skill-version.sh`.");if(w!==t)throw Error(`SKILL.md metadata.version (${w}) does not match expected version (${t}). Run \`bash scripts/sync-skill-version.sh\` after bumping package versions.`)}return{size:s,sha256:g,skillVersion:w}}async function buildSkillZip(e={}){let t=e.sourceDir??resolveBundledSkillDir(),s=e.outputPath??join(process.cwd(),`openknowledge.skill`);await zipDirectory(t,s);let{size:g,sha256:S,skillVersion:w}=await validateSkillZip(s,e.expectedSkillVersion);return{outputPath:s,size:g,sha256:S,skillVersion:w}}const SKILL_INSTALL_EVENTS_FILE_REL=[`.ok`,`skill-install-events.jsonl`];async function recordSkillInstallEvent(e,t){let s=t?.homedir??(()=>process.env.HOME??``),g=t?.warn??((e,t)=>{console.warn(t,e)}),S=s();if(!S){g({event:`skill-install-events.no-home`},`[skill-install-events] HOME not resolvable; telemetry skipped`);return}let w=join(S,...SKILL_INSTALL_EVENTS_FILE_REL),E=`${JSON.stringify(e)}\n`;try{await tracedMkdir(dirname(w),{recursive:!0})}catch(e){g({event:`skill-install-events.mkdir-failed`,error:String(e)},`[skill-install-events] mkdir failed; telemetry skipped`);return}try{await tracedWriteFile(w,E,{flag:`a`,encoding:`utf-8`})}catch(e){g({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),g;try{g=await readFileAsync(s,`utf-8`)}catch(e){if(e.code===`ENOENT`)return null;throw e}let S=(0,import_dist$1.parseDocument)(g);if(S.errors.length>0)return t.warn({event:`skill-state.yaml-parse-error`,path:s,errors:S.errors.map(e=>e.message)},`skill-state.yml parse failed; treating as fresh install`),null;let w=SkillStateSchema.safeParse(S.toJSON());if(!w.success){let e=w.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:w.error.issues.map(e=>({path:e.path,message:e.message}))},`skill-state.yml failed schema validation; treating as fresh install`),null}return w.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 g=skillStateYamlPath(e);await tracedMkdir(dirname(g),{recursive:!0});let S=(0,import_dist$1.parseDocument)(``);S.contents=S.createNode(s.data),await atomicWriteFile(g,S.toString(),{fs:TRACED_FS_ADAPTER})}async function readTargetVersion(e,t,s){let g=await readSkillStateFile(e,s);return g===null?null:g.targets[t]?.version??null}async function readTargetRecordedAt(e,t,s){let g=await readSkillStateFile(e,s);return g===null?null:g.targets[t]?.recordedAt??null}async function writeTargetVersion(e,t,s,g,S){if(!SKILL_STATE_VERSION_RE.test(s))throw Error(`Refusing to write invalid version string: ${s}`);let w=await readSkillStateFile(e,S)??emptySkillState(),E=new Date().toISOString(),D=w.targets[t],O=g===void 0?D?.surface??void 0:g,k=O===void 0?{version:s,recordedAt:E}:{version:s,recordedAt:E,surface:O};await writeSkillStateFile(e,{...w,targets:{...w.targets,[t]:k}})}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,g]=await Promise.all([readServerPackageVersion(),readAllTargets(e,t)]);return{currentVersion:s,targets:g}}async function readAllTargets(e,t=DEFAULT_LOGGER){let s=null;try{s=await readSkillStateFile(e,t)}catch(g){t.warn({event:`skill-state.read-error`,path:skillStateYamlPath(e),error:String(g)},`non-ENOENT error reading skill-state.yml; treating as absent`),s=null}let g=SKILL_STATE_TARGETS.map(e=>{let t=s?.targets[e];return t?[e,{version:t.version,recordedAt:t.recordedAt}]:[e,null]});return Object.fromEntries(g)}const CENTRAL_SKILL_DIR_REL=[`.agents`,`skills`,`open-knowledge`],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,g,S){return new Promise(w=>{let E;try{E=e(t,s,{env:g,stdio:[`ignore`,`pipe`,`pipe`]})}catch(e){w({kind:`spawn-error`,stderr:``,error:e});return}let D=``,O=!1,k=e=>{O||(O=!0,clearTimeout(j),w(e))};E.stderr?.on(`data`,e=>{D+=typeof e==`string`?e:e.toString(`utf-8`)}),E.on(`error`,e=>{k({kind:`spawn-error`,stderr:D,error:e})}),E.on(`exit`,e=>{k(e===0?{kind:`ok`,exitCode:e,stderr:D}:{kind:`nonzero`,exitCode:e,stderr:D})});let j=setTimeout(()=>{try{E.kill(`SIGTERM`)}catch{}k({kind:`timeout`,stderr:D})},S)})}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)},g=e.spawn??spawn,S=e.timeoutMs??DEFAULT_TIMEOUT_MS$3,w=e.surface??`cli-npx-skills-add`,E=async(e,g,S)=>{await recordSkillInstallEvent({ts:new Date().toISOString(),surface:w,target:`cli-hosts`,outcome:e,...g===void 0?{}:{version:g},...S===void 0?{}:{reason:S}},{homedir:()=>t,warn:s.warn})},D;try{D=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 E(`failed`,void 0,`version-read-failed`),`failed`}let O=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(O!==null&&O===D){if(await centralSkillExists(t))return s.info?.({event:`skill-install.skip-current`,version:D},`Open Knowledge skill already installed at current version; skipping.`),await E(`skip-current`,D),`skip-current`;s.info?.({event:`skill-install.reinstall-missing`,version:D,path:centralSkillDir(t)},`Sidecar matches current version but skill files are missing; reinstalling.`)}let k;try{k=resolveBundledSkillDir()}catch(e){return s.warn({event:`skill-install.failed`,reason:`bundled-asset-missing`,error:String(e)},`Skill install aborted — bundled SKILL.md asset not found.`),await E(`failed`,D,`bundled-asset-missing`),`failed`}let j=await runSpawn(g,`npx`,[`-y`,SKILLS_CLI_SPEC,`add`,k,`--agent`,`*`,`-g`,`-y`,`--copy`],{...process.env,HOME:t},S);if(j.kind===`ok`){try{await writeTargetVersion(t,`cli-hosts`,D,w,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 E(`failed`,D,`sidecar-write-failed`),`failed`}return s.info?.({event:`skill-install.installed`,version:D},`Open Knowledge skill installed to detected agent hosts.`),await E(`installed`,D),`installed`}return j.kind===`timeout`?(s.warn({event:`skill-install.failed`,reason:`timeout`,timeoutMs:S,stderr:j.stderr},`Skill install subprocess timed out. Run manually: npx ${SKILLS_CLI_SPEC} add ${k} --agent '*' -g -y --copy`),await E(`failed`,D,`timeout`),`failed`):j.kind===`spawn-error`?(s.warn({event:`skill-install.failed`,reason:`spawn-error`,error:String(j.error),stderr:j.stderr},`Skill install failed — \`npx\` unavailable or spawn errored. Run manually: npx ${SKILLS_CLI_SPEC} add ${k} --agent '*' -g -y --copy`),await E(`failed`,D,`spawn-error`),`failed`):(s.warn({event:`skill-install.failed`,reason:`nonzero-exit`,exitCode:j.exitCode,stderr:j.stderr},`Skill install subprocess exited non-zero. Run manually: npx ${SKILLS_CLI_SPEC} add ${k} --agent '*' -g -y --copy`),await E(`failed`,D,`nonzero-exit:${j.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 g={detached:!0,stdio:`ignore`};try{return t===`darwin`?(s(`open`,[e],g).unref(),{ok:!0}):t===`win32`?(s(`cmd`,[`/c`,`start`,`""`,e],g).unref(),{ok:!0}):t===`linux`?(s(`xdg-open`,[e],g).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)),g=e.platformName??platform(),S=e.spawnFn??spawn,w=e.logger,E=async(e,s,g)=>{await recordSkillInstallEvent({ts:new Date().toISOString(),surface:`server-build-and-open`,target:`claude-cowork`,outcome:e,...s===void 0?{}:{version:s},...g===void 0?{}:{reason:g}},{homedir:()=>t,warn:w?.warn})};if(!e.force){let e=null;try{e=await readServerPackageVersion()}catch(e){w?.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,g=null;try{[s,g]=await Promise.all([readTargetVersion(t,`claude-cowork`,w),readTargetRecordedAt(t,`claude-cowork`,w)])}catch(e){w?.warn?.({event:`skill-install.gate.read-failed`,error:String(e)},`Could not read claude-cowork install-state; rebuilding.`)}if(s!==null&&s===e)return w?.info?.({event:`skill-install.skip-current`,target:`claude-cowork`,version:e},`Open Knowledge skill already delivered at current version; skipping rebuild.`),await E(`skip-current`,e),{status:`skip-current`,skillVersion:e,...g===null?{}:{recordedAt:g}}}}try{await tracedMkdir(dirname(s),{recursive:!0})}catch(e){let t=e instanceof Error?e.message:String(e);return await E(`failed`,void 0,`mkdir-failed:${t}`),{status:`failed`,buildError:`could not create output directory: ${t}`}}let D;try{D=await buildSkillZip({outputPath:s})}catch(e){let t=e instanceof Error?e.message:String(e);return await E(`failed`,void 0,`build-failed:${t}`),{status:`failed`,buildError:t}}let O={status:`built`,outputPath:D.outputPath,size:D.size,sha256:D.sha256,skillVersion:D.skillVersion};if(D.skillVersion)try{await writeTargetVersion(t,`claude-cowork`,D.skillVersion,`server-build-and-open`,w)}catch(e){w?.warn?.({event:`skill-install.state-write-failed`,target:`claude-cowork`,version:D.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 E(`built`,D.skillVersion),O;let k=invokeFileAssociation(D.outputPath,g,S);return k.ok?(await E(`installed`,D.skillVersion),{...O,status:`installed`}):(await E(`built`,D.skillVersion,`handoff-${k.reason}`),{...O,handoffError:{reason:k.reason,message:k.message}})}const SPAWN_CURSOR_WHICH_TIMEOUT_MS=500,SPAWN_CURSOR_SPAWN_TIMEOUT_MS=2e3,SPAWN_CURSOR_MAX_BODY_BYTES=4*1024;async function handleSpawnCursor(e,t,s){if(e.method!==`POST`){writeJson(t,405,{ok:!1,reason:`method-not-allowed`});return}let g;try{g=await readBoundedJsonBody(e)}catch{writeJson(t,413,{ok:!1,reason:`spawn-error`});return}let S;try{S=JSON.parse(g.toString(`utf-8`))}catch{writeJson(t,400,{ok:!1,reason:`invalid-path`});return}let w=typeof S.path==`string`?S.path:``;if(!w){writeJson(t,400,{ok:!1,reason:`invalid-path`});return}if(!isPathWithinDir(w,s.contentDir,s.platform)){writeJson(t,403,{ok:!1,reason:`invalid-path`});return}let E=await(s.resolveCursorBinary??resolveCursorBinaryDefault)(SPAWN_CURSOR_WHICH_TIMEOUT_MS);if(!E){writeJson(t,200,{ok:!1,reason:`not-installed`});return}let D=resolveCursorSpawnInvocation(E,w,s.platform);writeJson(t,200,await(s.spawnDetached??spawnDetachedReal)(D.exec,D.args,SPAWN_CURSOR_SPAWN_TIMEOUT_MS))}const CURSOR_BUNDLE_PATHS_BY_PLATFORM={darwin:[()=>`/Applications/Cursor.app/Contents/Resources/app/bin/cursor`,e=>`${e}/Applications/Cursor.app/Contents/Resources/app/bin/cursor`],win32:[e=>`${e}\\AppData\\Local\\Programs\\cursor\\resources\\app\\bin\\cursor.cmd`,()=>`C:\\Program Files\\Cursor\\resources\\app\\bin\\cursor.cmd`]};async function resolveCursorBinaryDefault(e){let t=CURSOR_BUNDLE_PATHS_BY_PLATFORM[process.platform];if(t&&t.length>0){let e=homedir();for(let s of t){let t=s(e);try{return await access(t,constants.X_OK),t}catch{}}}return new Promise(t=>{execFile(process.platform===`win32`?`where`:`which`,[`cursor`],{timeout:e,encoding:`utf-8`},(e,s)=>{if(e){t(null);return}let g=s.split(/\r?\n/)[0]?.trim();t(g&&g.length>0?g:null)})})}function spawnDetachedReal(e,t,s){return new Promise(g=>{let S=!1,w=e=>{S||(S=!0,g(e))},E=setTimeout(()=>w({ok:!1,reason:`timeout`}),s);try{let s=spawn(e,[...t],{detached:!0,stdio:`ignore`,shell:!1});s.once(`error`,e=>{clearTimeout(E);let t=e instanceof Error?e.message:String(e);w(/ENOENT|EACCES|EPERM/.test(t)?{ok:!1,reason:`not-installed`}:{ok:!1,reason:`spawn-error`})}),queueMicrotask(()=>{if(!S){try{s.unref()}catch{}clearTimeout(E),w({ok:!0})}})}catch{clearTimeout(E),w({ok:!1,reason:`spawn-error`})}})}function resolveCursorSpawnInvocation(e,t,s){return s===`darwin`&&/\.app\/?$/.test(e)?{exec:`/usr/bin/open`,args:[`-a`,e.replace(/\/$/,``),t]}:{exec:e,args:[t]}}async function readBoundedJsonBody(e){let t=[],s=0;for await(let g of e){if(s+=g.length,s>SPAWN_CURSOR_MAX_BODY_BYTES)throw Error(`Payload too large`);t.push(g)}return Buffer.concat(t)}function writeJson(e,t,s){e.writeHead(t,{"Content-Type":`application/json`,"X-Content-Type-Options":`nosniff`}),e.end(JSON.stringify(s))}function isPathWithinDir(e,t,s){if(!e||typeof e!=`string`||e.includes(`\0`)||!t||typeof t!=`string`)return!1;if(s===`win32`){if(!/^([a-zA-Z]:[\\/]|\\\\)/.test(e)||!/^([a-zA-Z]:[\\/]|\\\\)/.test(t))return!1}else if(!e.startsWith(`/`)||!t.startsWith(`/`))return!1;let g=s===`win32`?win32:posix;try{let S=g.resolve(e),w=g.resolve(t);if(s===`win32`){let e=g.parse(S).root.toLowerCase(),t=g.parse(w).root.toLowerCase();if(!e||!t||e!==t)return!1}if(S===w)return!0;let E=g.relative(w,S);return E===``||E===`.`?!0:!(E===`..`||E.startsWith(`..${g.sep}`)||s===`win32`&&(/^[a-zA-Z]:[\\/]/.test(E)||E.startsWith(`\\\\`))||s!==`win32`&&E.startsWith(`/`))}catch{return!1}}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})}function resolveContentDir(e,t){return resolve(t,e.content.dir)}function getLocalDir(e){return resolve(e,`.ok`,LOCAL_DIR)}function resolveLockDir(e){return getLocalDir(e)}var UploadWriteError=class extends Error{reason;constructor(e,t){super(`UploadWriteError: ${e}`,{cause:t}),this.name=`UploadWriteError`,this.reason=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 g=extname(s),S=s.slice(0,s.length-g.length),w=[s,...Array.from({length:99},(e,t)=>`${S}-${t+1}${g}`)];for(let s of w){let g=resolve(t,s);try{tracedLinkSync(e,g);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(`storage-full`,t):s===`EROFS`||s===`EACCES`||s===`EPERM`?new UploadWriteError(`storage-readonly`,t):new UploadWriteError(`storage-error`,t)}}try{tracedUnlinkSync(e)}catch{}throw new UploadWriteError(`collision-exhaustion`)}function cleanupOrphanUploadTempfiles(e,{ageMs:t=1440*60*1e3}={}){let s=tmpUploadDir(e),g={scanned:0,deleted:0,errors:0};if(!existsSync(s))return g;let S;try{S=readdirSync(s)}catch(e){return log$4.warn({err:e,dir:s},`[upload-tempfile-sweep] readdir failed`),g.errors++,g}let w=Date.now()-t;for(let e of S){if(!e.startsWith(`upload-`))continue;g.scanned++;let t=resolve(s,e);try{if(statSync(t).mtimeMs>=w)continue;tracedUnlinkSync(t),g.deleted++}catch(e){log$4.warn({err:e,path:t},`[upload-tempfile-sweep] entry failed`),g.errors++}}return(g.deleted>0||g.errors>0)&&log$4.info({dir:s,scanned:g.scanned,deleted:g.deleted,errors:g.errors},`[upload-tempfile-sweep] swept ${g.deleted}/${g.scanned} (errors: ${g.errors})`),g}function matchFence$2(e){let t=/^\s{0,3}([`~]{3,})/.exec(e);if(!t)return null;let s=t[1],g=s[0];return g!=="`"&&g!==`~`?null:{char:g,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 g=t+s,S=g;for(;S<e.length;){if(e[S]!=="`"){S++;continue}let t=0;for(;e[S+t]==="`";)t++;if(t===s)return{nextIndex:S+s};S+=t}return{nextIndex:g}}function readWikiLink$2(e,t){let s=/^\[\[([^\n#[\]|]+)(?:#([^\n[\]|]+))?(?:\|([^\n[\]]+))?\]\]/.exec(e.slice(t));if(!s)return null;let g=s[1]?.trim(),S=s[2]?.trim()||null,w=s[3]?.trim()||null;return g?{target:g,alias:w,anchor:S,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 g=s[2]??``;return{text:s[1]??``,hrefRaw:g,href:g.startsWith(`<`)&&g.endsWith(`>`)?g.slice(1,-1):g,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 g=s[2]??``;return{alt:s[1]??``,hrefRaw:g,href:g.startsWith(`<`)&&g.endsWith(`>`)?g.slice(1,-1):g,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 g=``,S=0,w=0,E=leadingMarkdownPrefixLength$2(e);for(E>0&&(g+=e.slice(0,E),w=E);w<e.length;){if(e[w]===`\\`&&w+1<e.length){g+=e.slice(w,w+2),w+=2;continue}if(e[w]==="`"){let t=readInlineCode$2(e,w);if(t){g+=e.slice(w,t.nextIndex),w=t.nextIndex;continue}}if(e[w]===`[`&&e[w+1]===`[`){let E=readWikiLink$2(e,w);if(E){E.target===t?(g+=`[[${s}${E.anchor?`#${E.anchor}`:``}${E.alias?`|${E.alias}`:``}]]`,S++):g+=e.slice(w,E.nextIndex),w=E.nextIndex;continue}}g+=e[w],w++}return{markdown:g,rewrites:S}}function recomputeRelativeImageHref(e,t,s){let g=e.indexOf(`#`),S=g>=0?e.slice(g):``,w=g>=0?e.slice(0,g):e,E=w.indexOf(`?`),D=E>=0?w.slice(E):``,O=E>=0?w.slice(0,E):w;if(O.startsWith(`/`)||O.startsWith(`//`)||/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(O))return null;let k=posix.dirname(t),j=posix.dirname(s);if(k===j)return null;let F=k===`.`?`/`:`/${k}/`,L=posix.resolve(F,O).slice(1),B=posix.relative(j===`.`?``:j,L);return B||=posix.basename(L),O.startsWith(`./`)&&!B.startsWith(`./`)&&!B.startsWith(`../`)&&(B=`./${B}`),`${B}${D}${S}`}function recomputeRelativeMarkdownHref(e,t,s){let g=e.indexOf(`#`),S=g>=0?e.slice(g):``,w=g>=0?e.slice(0,g):e,E=w.indexOf(`?`),D=E>=0?w.slice(E):``,O=E>=0?w.slice(0,E):w,k=posix.dirname(t),j=posix.relative(k===`.`?``:k,s);return j||=posix.basename(s),O.endsWith(`.mdx`)?j+=`.mdx`:O.endsWith(`.md`)&&(j+=`.md`),O.startsWith(`./`)&&!j.startsWith(`./`)&&!j.startsWith(`../`)&&(j=`./${j}`),`${j}${D}${S}`}function rewriteMarkdownLinksInLine(e,t,s,g){let S=``,w=0,E=0,D=leadingMarkdownPrefixLength$2(e);for(D>0&&(S+=e.slice(0,D),E=D);E<e.length;){if(e[E]===`\\`&&E+1<e.length){S+=e.slice(E,E+2),E+=2;continue}if(e[E]==="`"){let t=readInlineCode$2(e,E);if(t){S+=e.slice(E,t.nextIndex),E=t.nextIndex;continue}}if(e[E]===`[`&&e[E+1]===`[`){let t=readWikiLink$2(e,E);if(t){S+=e.slice(E,t.nextIndex),E=t.nextIndex;continue}}if(e[E]===`!`&&e[E+1]===`[`){let D=readImageRef(e,E);if(D){let O=t===s&&s!==g?recomputeRelativeImageHref(D.href,s,g):null;if(O!==null){let e=D.hrefRaw.startsWith(`<`)&&D.hrefRaw.endsWith(`>`)?`<${O}>`:O;S+=`![${D.alt}](${e}${D.titleSuffix})`,w++}else S+=e.slice(E,D.nextIndex);E=D.nextIndex;continue}}if(e[E]===`[`){let D=readMarkdownLink$2(e,E);if(D){if(resolveInternalHref(D.href,t)?.docName===s){let e=recomputeRelativeMarkdownHref(D.href,t,g),s=D.hrefRaw.startsWith(`<`)&&D.hrefRaw.endsWith(`>`)?`<${e}>`:e;S+=`[${D.text}](${s}${D.titleSuffix})`,w++}else S+=e.slice(E,D.nextIndex);E=D.nextIndex;continue}}S+=e[E],E++}return{markdown:S,rewrites:w}}function rewriteWikiLinksForDocumentRename(e,t,s){let g=null,S=0;return{markdown:splitLines(e).map(({line:e,ending:w})=>{if(g)return isFenceClose$2(e,g)&&(g=null),`${e}${w}`;let E=matchFence$2(e);if(E)return g=E,`${e}${w}`;let D=rewriteWikiLinksInLine(e,t,s);return S+=D.rewrites,`${D.markdown}${w}`}).join(``),rewrites:S}}function rewriteMarkdownLinksForDocumentRename(e,t,s,g){let S=null,w=0;return{markdown:splitLines(e).map(({line:e,ending:E})=>{if(S)return isFenceClose$2(e,S)&&(S=null),`${e}${E}`;let D=matchFence$2(e);if(D)return S=D,`${e}${E}`;let O=rewriteMarkdownLinksInLine(e,t,s,g);return w+=O.rewrites,`${O.markdown}${E}`}).join(``),rewrites:w}}function rewriteOutboundMarkdownLinksInLine(e,t,s){let g=``,S=0,w=0,E=leadingMarkdownPrefixLength$2(e);for(E>0&&(g+=e.slice(0,E),w=E);w<e.length;){if(e[w]===`\\`&&w+1<e.length){g+=e.slice(w,w+2),w+=2;continue}if(e[w]==="`"){let t=readInlineCode$2(e,w);if(t){g+=e.slice(w,t.nextIndex),w=t.nextIndex;continue}}if(e[w]===`[`&&e[w+1]===`[`){let t=readWikiLink$2(e,w);if(t){g+=e.slice(w,t.nextIndex),w=t.nextIndex;continue}}if(e[w]===`!`&&e[w+1]===`[`){let t=readImageRef(e,w);if(t){g+=e.slice(w,t.nextIndex),w=t.nextIndex;continue}}if(e[w]===`[`){let E=readMarkdownLink$2(e,w);if(E){let D=resolveInternalHref(E.href,t);if(D!==null){let t=recomputeRelativeMarkdownHref(E.href,s,D.docName);if(t!==E.href){let e=E.hrefRaw.startsWith(`<`)&&E.hrefRaw.endsWith(`>`)?`<${t}>`:t;g+=`[${E.text}](${e}${E.titleSuffix})`,S++}else g+=e.slice(w,E.nextIndex)}else g+=e.slice(w,E.nextIndex);w=E.nextIndex;continue}}g+=e[w],w++}return{markdown:g,rewrites:S}}function rewriteOutboundMarkdownLinksForSourceMove(e,t,s){if(posix.dirname(t)===posix.dirname(s))return{markdown:e,rewrites:0};let g=null,S=0;return{markdown:splitLines(e).map(({line:e,ending:w})=>{if(g)return isFenceClose$2(e,g)&&(g=null),`${e}${w}`;let E=matchFence$2(e);if(E)return g=E,`${e}${w}`;let D=rewriteOutboundMarkdownLinksInLine(e,t,s);return S+=D.rewrites,`${D.markdown}${w}`}).join(``),rewrites:S}}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}};function buildRenameMap(e){let t=new Map,s=[];for(let{from:g,to:S}of e){for(let[e,w]of t)e!==g&&w===S&&s.push({existing:e,incoming:g,to:S});t.set(g,S)}if(s.length>0)throw new ManagedRenameCollisionError(s);return t}function rewriteSupportedLinksForRename(e,t,s,g){let{frontmatter:S,body:w}=stripFrontmatter(e),E=rewriteWikiLinksForDocumentRename(w,s,g),D=rewriteMarkdownLinksForDocumentRename(E.markdown,t,s,g);return{markdown:prependFrontmatter(S,D.markdown),rewrites:E.rewrites+D.rewrites}}function applyRenameMap(e,t,s){let g=e,S=0,w,E=[];for(let[e,g]of s)e!==g&&(e===t?w=g:E.push([e,g]));if(w!==void 0){let e=rewriteSupportedLinksForRename(g,t,t,w);g=e.markdown,S+=e.rewrites;let{frontmatter:s,body:E}=stripFrontmatter(g),D=rewriteOutboundMarkdownLinksForSourceMove(E,t,w);g=prependFrontmatter(s,D.markdown),S+=D.rewrites}let D=w??t,O=new Map;for(let[e,t]of E){let s=`__OK_RENAME_${randomUUID().replaceAll(`-`,``)}__`,w=rewriteSupportedLinksForRename(g,D,e,s);w.rewrites>0&&(g=w.markdown,S+=w.rewrites,O.set(s,t))}for(let[e,t]of O)g=rewriteSupportedLinksForRename(g,D,e,t).markdown;return{markdown:g,rewrites:S}}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 g=Math.max(e.lastIndexOf(`.`,t-1),e.lastIndexOf(`?`,t-1),e.lastIndexOf(`!`,t-1),e.lastIndexOf(`
814
825
  `,t-1)),S=[e.indexOf(`.`,s),e.indexOf(`?`,s),e.indexOf(`!`,s),e.indexOf(`
815
826
  `,s)].filter(e=>e>=0),w=g>=0?g+1:Math.max(0,t-60),E=S.length>0?Math.min(...S)+1:Math.min(e.length,s+60),D=w>0?`…`:``,O=E<e.length?`…`:``,k=normalizeSnippet$1(e.slice(w,E));return k?`${D}${k}${O}`:null}function matchFence$1(e){let t=/^\s{0,3}([`~]{3,})/.exec(e);if(!t)return null;let s=t[1],g=s[0];return g!=="`"&&g!==`~`?null:{char:g,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 g=t+s,S=g;for(;S<e.length;){if(e[S]!=="`"){S++;continue}let t=0;for(;e[S+t]==="`";)t++;if(t===s)return{text:e.slice(g,S),nextIndex:S+s};S+=t}return{text:e.slice(t,g),nextIndex:g}}function readWikiLink$1(e,t){WIKI_LINK_RE$1.lastIndex=t;let s=WIKI_LINK_RE$1.exec(e);if(!s)return null;let g=s[1]?.trim(),S=s[2]?.trim()||null,w=s[3]?.trim()||null;return g?{target:g,alias:w,anchor:S,nextIndex:t+s[0].length}:null}function extractWikiLinksFromLine(e){let t=``,s=[],g=leadingMarkdownPrefixLength$1(e);for(;g<e.length;){if(e[g]===`\\`&&g+1<e.length){t+=e[g+1],g+=2;continue}if(e[g]==="`"){let s=readInlineCode$1(e,g);if(s){t+=s.text,g=s.nextIndex;continue}}if(e[g]===`[`&&e[g+1]===`[`){let S=readWikiLink$1(e,g);if(S){let e=getWikiLinkText(S),w=t.length;t+=e;let E=classifyWikiLinkTarget(S.target,S.anchor);E?.kind===`doc`&&s.push({target:E.docName,anchor:E.anchor,start:w,end:w+e.length}),g=S.nextIndex;continue}}t+=e[g],g++}return{text:t,occurrences:s}}function extractExternalWikiLinksFromLine(e){let t=``,s=[],g=leadingMarkdownPrefixLength$1(e);for(;g<e.length;){if(e[g]===`\\`&&g+1<e.length){t+=e[g+1],g+=2;continue}if(e[g]==="`"){let s=readInlineCode$1(e,g);if(s){t+=s.text,g=s.nextIndex;continue}}if(e[g]===`[`&&e[g+1]===`[`){let S=readWikiLink$1(e,g);if(S){let e=getWikiLinkText(S),w=t.length;t+=e;let E=classifyWikiLinkTarget(S.target,S.anchor);E?.kind===`external`&&s.push({url:E.url,label:e,start:w,end:w+e.length}),g=S.nextIndex;continue}}t+=e[g],g++}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=``,g=[],S=leadingMarkdownPrefixLength$1(e);for(;S<e.length;){if(e[S]===`\\`&&S+1<e.length){s+=e[S+1],S+=2;continue}if(e[S]==="`"){let t=readInlineCode$1(e,S);if(t){s+=t.text,S=t.nextIndex;continue}}if(e[S]===`[`&&e[S+1]===`[`){let t=readWikiLink$1(e,S);if(t){s+=getWikiLinkText(t),S=t.nextIndex;continue}}if(e[S]===`[`&&e[S-1]!==`!`){let w=readMarkdownLink$1(e,S);if(w){let e=classifyMarkdownHref(w.href,t);if(e?.kind===`doc`){let t=s.length;s+=w.text,g.push({target:e.docName,anchor:e.anchor,start:t,end:t+w.text.length})}else s+=w.text;S=w.nextIndex;continue}}s+=e[S],S++}return{text:s,occurrences:g}}function extractExternalMarkdownLinksFromLine(e,t){let s=``,g=[],S=leadingMarkdownPrefixLength$1(e);for(;S<e.length;){if(e[S]===`\\`&&S+1<e.length){s+=e[S+1],S+=2;continue}if(e[S]==="`"){let t=readInlineCode$1(e,S);if(t){s+=t.text,S=t.nextIndex;continue}}if(e[S]===`[`&&e[S+1]===`[`){let t=readWikiLink$1(e,S);if(t){s+=getWikiLinkText(t),S=t.nextIndex;continue}}if(e[S]===`[`&&e[S-1]!==`!`){let w=readMarkdownLink$1(e,S);if(w){let e=classifyMarkdownHref(w.href,t);if(s+=w.text,e?.kind===`external`){let t=s.length-w.text.length;g.push({url:e.url,label:w.text||null,start:t,end:t+w.text.length})}S=w.nextIndex;continue}}s+=e[S],S++}return{text:s,occurrences:g}}function extractMarkdownLinksFromMarkdown(e,t){let s=e.replaceAll(`\r
816
827
  `,`
@@ -929,23 +940,23 @@ tags: [article, canonical]
929
940
  `,t-1)),S=[e.indexOf(`.`,s),e.indexOf(`?`,s),e.indexOf(`!`,s),e.indexOf(`
930
941
  `,s)].filter(e=>e>=0),w=g>=0?g+1:Math.max(0,t-60),E=S.length>0?Math.min(...S)+1:Math.min(e.length,s+60),D=w>0?`…`:``,O=E<e.length?`…`:``,k=normalizeSnippet(e.slice(w,E));return k?`${D}${k}${O}`:null}function matchFence(e){let t=/^\s{0,3}([`~]{3,})/.exec(e);if(!t)return null;let s=t[1],g=s[0];return g!=="`"&&g!==`~`?null:{char:g,length:s.length}}function isFenceClose(e,t){let s=e.trimStart();if(e.length-s.length>3)return!1;let g=0;for(;s[g]===t.char;)g+=1;return g<t.length?!1:s.slice(g).trim().length===0}function leadingMarkdownPrefixLength(e){let t=/^\s{0,3}(?:#{1,6}\s+|>\s+|(?:[-+*]|\d+[.)])\s+)/.exec(e);return t?t[0].length:0}function readInlineCode(e,t){let s=0;for(;e[t+s]==="`";)s++;if(s===0)return null;let g=t+s,S=g;for(;S<e.length;){if(e[S]!=="`"){S+=1;continue}let t=0;for(;e[S+t]==="`";)t+=1;if(t===s)return{text:e.slice(g,S),nextIndex:S+s};S+=t}return{text:e.slice(t,g),nextIndex:g}}function readWikiLink(e,t){WIKI_LINK_RE.lastIndex=t;let s=WIKI_LINK_RE.exec(e);if(!s)return null;let g=s[1]??``,S=g.trim(),w=s[2]?.trim()||null,E=s[3]??null,D=E?.trim()||null;if(!S)return null;let O=D??S,k=D?E:g,j=D?s[0].lastIndexOf(E??``):2,F=k?.indexOf(O)??0;return{target:S,alias:D,anchor:w,label:O,labelStart:t+j+Math.max(F,0),nextIndex:t+s[0].length}}function normalizeMarkdownHref(e){return e.startsWith(`<`)&&e.endsWith(`>`)?e.slice(1,-1):e}function readMarkdownLink(e,t){MD_LINK_RE.lastIndex=t;let s=MD_LINK_RE.exec(e);return s?{text:s[1]??``,href:normalizeMarkdownHref(s[2]??``),nextIndex:t+s[0].length}:null}function readMarkdownImage(e,t){MD_IMAGE_RE.lastIndex=t;let s=MD_IMAGE_RE.exec(e);return s?{alt:s[1]??``,nextIndex:t+s[0].length}:null}function isWordBoundaryChar(e){return!e||!WORD_CHAR_RE.test(e)}function hasWholeWordBoundaries(e,t,s){return isWordBoundaryChar(e[t-1])&&isWordBoundaryChar(e[s])}function prepareSearchLabels(e){let t=[],s=new Set;for(let g of e.matchLabels){let e=g.trim();if(!e)continue;let S=e.toLocaleLowerCase();s.has(S)||(s.add(S),t.push({raw:e,lower:S,length:e.length}))}return t.sort((e,t)=>t.length===e.length?e.raw.localeCompare(t.raw):t.length-e.length)}function findSegmentMatches(e,t){let s=e.toLocaleLowerCase(),g=[];for(let S of t){let t=0;for(;t<=s.length-S.length;){let w=s.indexOf(S.lower,t);if(w===-1)break;let E=w+S.length;hasWholeWordBoundaries(e,w,E)&&g.push({start:w,end:E}),t=w+1}}g.sort((e,t)=>{if(e.start!==t.start)return e.start-t.start;let s=e.end-e.start,g=t.end-t.start;return g===s?e.end-t.end:g-s});let S=[],w=null;for(let e of g)w&&e.start<w.end||(S.push(e),w=e);return S}function contiguousOffsets(e,t){let s=[];for(let g=0;g<t.length;g+=1)s.push(e+g);return s}function wikiLinkResolvesToTarget(e,t){let s=e.trim();return s?s===t||toWikiLinkSlug(s)===t:!1}function scanLineForMentions(e,t,s,g,S){let w=``,E=[],D=``,O=[];function k(){D&&(E.push({flatStart:w.length,text:D,sourceOffsets:O}),w+=D,D=``,O=[])}function j(e,t){D+=e,O.push(t)}function F(e){k(),w+=e}function L(e,t){k(),e&&(E.push({flatStart:w.length,text:e,sourceOffsets:t}),w+=e)}let B=leadingMarkdownPrefixLength(e);for(;B<e.length;){if(e[B]===`\\`&&B+1<e.length){j(e[B+1]??``,t+B+1),B+=2;continue}if(e[B]==="`"){let t=readInlineCode(e,B);if(t){F(t.text),B=t.nextIndex;continue}}if(e[B]===`!`&&e[B+1]===`[`){let t=readMarkdownImage(e,B);if(t){F(t.alt),B=t.nextIndex;continue}}if(e[B]===`[`&&e[B+1]===`[`){let s=readWikiLink(e,B);if(s){let e=s.label;wikiLinkResolvesToTarget(s.target,g)?F(e):L(e,contiguousOffsets(t+s.labelStart,e)),B=s.nextIndex;continue}}if(e[B]===`[`&&e[B-1]!==`!`){let S=readMarkdownLink(e,B);if(S){resolveInternalHref(S.href,s)?.docName===g?F(S.text):L(S.text,contiguousOffsets(t+B+1,S.text)),B=S.nextIndex;continue}}j(e[B]??``,t+B),B+=1}k();let H=[];for(let e of E){let t=findSegmentMatches(e.text,S);for(let s of t){let t=e.flatStart+s.start,g=e.flatStart+s.end,S=snippetAround(w,t,g)??e.text.slice(s.start,s.end),E=e.sourceOffsets[s.start];typeof E==`number`&&H.push({excerpt:S,offset:E})}}return H}function scanMarkdownForMentions(e,t,s,g){let{frontmatter:S,body:w}=stripFrontmatter(e),E=S.length,D=[],O=null,k=0,j=0;for(;j<=w.length;){let e=w[j];if(!(j===w.length||e===`
931
942
  `||e===`\r`)){j+=1;continue}let S=w.slice(k,j);if(O)isFenceClose(S,O)&&(O=null);else{let e=matchFence(S);e?O=e:D.push(...scanLineForMentions(S,E+k,t,s,g))}if(j===w.length)break;if(e===`\r`&&w[j+1]===`
932
- `){j+=2,k=j;continue}j+=1,k=j}return D}function serializeLiveDocument$1(e){return e.getText(`source`).toString()}async function readDocumentMarkdown(e,t,s){let g=e.documents.get(t);if(g)try{return serializeLiveDocument$1(g)}catch(e){return log$3.warn({docName:t,err:e},`[suggest-links] Failed live serialization, falling back to live source text`),g.getText(`source`).toString()}return await readFile$1(s.canonicalPath,`utf-8`)}function toPublicTarget(e){return{docName:e.docName,title:e.title,aliases:e.aliases}}async function suggestLinks(e){let{hocuspocus:t,fileIndex:s,docName:g,scanBudgetMs:S=500,now:w=()=>Date.now(),onComplete:E}=e,D=w(),O=s.get(g);if(!O)throw new SuggestLinksTargetNotFoundError(g);let k=extractPageIdentity(await readDocumentMarkdown(t,g,O),g),j=prepareSearchLabels(k),F=[...s.keys()].filter(e=>e!==g).sort((e,t)=>e.localeCompare(t)),L=new Map,B=!1;for(let e of F){if(w()-D>S){B=!0;break}let E=s.get(e);if(!E)continue;let O;try{O=await readDocumentMarkdown(t,e,E)}catch(t){log$3.warn({docName:e,err:t},`[suggest-links] Failed to read source doc`);continue}let k=scanMarkdownForMentions(O,e,g,j).map(t=>({source:e,excerpt:t.excerpt,offset:t.offset}));k.length>0&&L.set(e,k)}let H=[...L.entries()].sort(([e,t],[s,g])=>g.length===t.length?e===s?(t[0]?.offset??2**53-1)-(g[0]?.offset??2**53-1):e.localeCompare(s):g.length-t.length).flatMap(([,e])=>e),q=w()-D,J={durationMs:q,corpusDocCount:F.length,candidateCount:H.length,truncated:B};return log$3.info({docName:g,durationMs:q,corpusDocCount:F.length,candidateCount:H.length,truncated:B,labelCount:j.length,normalizedTarget:toWikiLinkSlug(k.title)},`[suggest-links] scan completed`),E?.(J),{target:toPublicTarget(k),mentions:H,truncated:B}}const GIT_LOG_FORMAT=`%H%x00%aI%x00%an%x00%ae%x00%s%x00%B%x1e`,EMPTY={entries:[],total:0,hasMore:!1};function classifyType(e){return e.startsWith(`checkpoint:`)?`checkpoint`:e.startsWith(`import:`)||e.startsWith(`upstream:`)?`upstream`:e.startsWith(`park:`)?`park`:`wip`}function parseGitLogOutput(e){return e.trim()?e.split(``).map(e=>{let t=e.trimStart();if(!t)return null;let[s=``,g=``,S=``,w=``,E=``,D=``]=t.split(`\0`),O=classifyType(E);return{sha:s.trim(),timestamp:g,author:S,authorEmail:w,type:O,message:E,contributors:readContributors(D),checkpoint:O===`checkpoint`?parseCheckpoint(D):null}}).filter(e=>e!==null&&e.sha.length===40):[]}function toArray(e){return e?Array.isArray(e)?e:e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}function matchesAuthor(e,t){return t.length===0?!0:t.some(t=>e.author.toLowerCase().includes(t.toLowerCase())||e.authorEmail.toLowerCase().includes(t.toLowerCase()))}async function getDocumentHistory(e,t,s=`.`){if(!existsSync(e.workTree)||!existsSync(e.gitDir)||t.docName&&(t.docName.includes(`..`)||t.docName.includes(`\0`)))return EMPTY;let g=t.branch??`main`,S=Math.max(1,t.limit??50),w=Math.max(0,t.offset??0),E=toArray(t.type),D=toArray(t.author),O=toArray(t.excludeAuthor),k=s===`.`?``:s.replace(/^\.\//,``),j=t.docName?k?`${k}/${t.docName}${getDocExtension(t.docName)}`:`${t.docName}${getDocExtension(t.docName)}`:void 0;try{let t=shadowGit(e);if(E.length===1&&E[0]===`checkpoint`){let e=(await t.raw(`for-each-ref`,`--sort=-creatordate`,`--format=%(objectname)`,`refs/checkpoints/${g}/`)).trim().split(`
933
- `).filter(e=>e.length===40),s=[];if(g!==`main`)try{s=(await t.raw(`for-each-ref`,`--sort=-creatordate`,`--format=%(objectname)`,`refs/checkpoints/main/`)).trim().split(`
934
- `).filter(e=>e.length===40)}catch{}let E=[...e,...s];if(E.length===0)return EMPTY;let k=parseGitLogOutput(await t.raw(`log`,`--no-walk`,`--author-date-order`,`--format=${GIT_LOG_FORMAT}`,...E)).map(e=>({...e,type:`checkpoint`}));if(j){let e=await Promise.all(k.map(async e=>{try{return await t.raw(`cat-file`,`-e`,`${e.sha}:${j}`),!0}catch{return!1}}));k=k.filter((t,s)=>e[s])}if(g!==`main`&&e.length>0&&s.length>0){let t=new Set(e),s=k.filter(e=>t.has(e.sha)),g=k.filter(e=>!t.has(e.sha)),S=s.reduce((e,t)=>Math.min(e,new Date(t.timestamp).getTime()),1/0);k=[...s,...g.filter(e=>new Date(e.timestamp).getTime()<S)]}let F=k.filter(e=>matchesAuthor(e,D)&&(O.length===0||!matchesAuthor(e,O))),L=F.length;return{entries:F.slice(w,w+S),total:L,hasMore:w+S<L}}let s=[],k=[],F=g!==`main`;try{let e=(await t.raw(`for-each-ref`,`--format=%(objectname)`,`refs/checkpoints/${g}/`)).trim().split(`
935
- `).filter(e=>e.length===40);s.push(...e)}catch{}let L=[];if(F)try{L=(await t.raw(`for-each-ref`,`--format=%(objectname)`,`refs/checkpoints/main/`)).trim().split(`
936
- `).filter(e=>e.length===40)}catch{}try{let e=(await t.raw(`for-each-ref`,`--format=%(refname)`,`refs/wip/${g}/`)).trim().split(`
937
- `).filter(Boolean);k.push(...e)}catch{}if(F&&k.length===0)try{let e=(await t.raw(`for-each-ref`,`--format=%(refname)`,`refs/wip/main/`)).trim().split(`
938
- `).filter(Boolean);k.push(...e)}catch{}if(k.length===0&&s.length===0&&L.length===0)return EMPTY;let B=[...s,...L],H=[];if(B.length>0){let e=parseGitLogOutput(await t.raw(`log`,`--no-walk`,`--author-date-order`,`--format=${GIT_LOG_FORMAT}`,...B)).map(e=>({...e,type:`checkpoint`}));if(j){let s=await Promise.all(e.map(async e=>{try{return await t.raw(`cat-file`,`-e`,`${e.sha}:${j}`),!0}catch{return!1}}));e=e.filter((e,t)=>s[t])}if(F&&s.length>0&&L.length>0){let t=new Set(s),g=e.filter(e=>t.has(e.sha)),S=e.filter(e=>!t.has(e.sha)),w=g.reduce((e,t)=>{let s=new Date(t.timestamp).getTime();return s<e?s:e},1/0);H=[...g,...S.filter(e=>new Date(e.timestamp).getTime()<w)]}else H=e}let q=[...k];for(let e of B)q.push(e);let J=[];q.length>0&&(J=parseGitLogOutput(await t.raw(`log`,`--full-history`,`--author-date-order`,`--format=${GIT_LOG_FORMAT}`,...q,...j?[`--`,j]:[])));let Y=[...H,...J],ee=new Set,te=[];for(let e of Y)ee.has(e.sha)||(ee.add(e.sha),te.push(e));te.sort((e,t)=>new Date(t.timestamp).getTime()-new Date(e.timestamp).getTime());let ne=te;ne=ne.filter(e=>e.type!==`park`),E.length>0&&(ne=ne.filter(e=>E.includes(e.type))),D.length>0&&(ne=ne.filter(e=>matchesAuthor(e,D))),O.length>0&&(ne=ne.filter(e=>!matchesAuthor(e,O)));let ae=ne.length;return{entries:ne.slice(w,w+S),total:ae,hasMore:w+S<ae}}catch(e){return console.warn(`[timeline] getDocumentHistory failed, returning empty result:`,e),EMPTY}}let _httpDurationHist=null;function httpDurationHist(){return _httpDurationHist||=getMeter().createHistogram(`http.server.request.duration`,{description:`HTTP server request duration in seconds`,unit:`s`}),_httpDurationHist}let _hintEmittedCounter=null;function hintEmittedCounter(){return _hintEmittedCounter||=getMeter().createCounter(`ok.preview_attach.hint_emitted`,{description:`Count of attach-preview-once hints emitted on write-tool responses when no editor is attached to __system__`}),_hintEmittedCounter}let _agentPatchFmTouchCounter=null;function agentPatchFmTouchCounter(){return _agentPatchFmTouchCounter||=getMeter().createCounter(`ok.frontmatter.agent_patch_fm_touch_total`,{description:`Count of agent-patch calls whose find string targets the frontmatter region. Measures incidence during the soft-deprecation window before agent-patch FM-intersecting calls are enforced as 400. Bounded label: result ∈ {rejected, pre_deprecation_passthrough}.`}),_agentPatchFmTouchCounter}function findLooksLikeFrontmatter(e){return!!(/(^|\n)---(\s|\n|$)/.test(e)||/^\s*[\w-]+:\s+\S/.test(e))}let _renameAttributionCounter=null;function renameAttributionCounter(){return _renameAttributionCounter||=getMeter().createCounter(`ok.rename.attribution_kind`,{description:`Count of rename and rollback handler dispatches by attribution kind (agent | principal | anonymous)`}),_renameAttributionCounter}const ROLLBACK_ORIGIN={source:`local`,skipStoreHooks:!1,context:{origin:`rollback-apply`,paired:!0}},MANAGED_RENAME_ORIGIN={source:`local`,skipStoreHooks:!1,context:{origin:`managed-rename`,paired:!0}},log$2=getLogger(`api`);function safeDocPath(e,t){if(!e||e.includes(`..`)||e.includes(`\0`))return{error:`Invalid document name`};let s=t===`.`?``:t.replace(/^\.\//,``),g=getDocExtension(e);return{path:s?`${s}/${e}${g}`:`${e}${g}`}}const MAX_BODY_BYTES=1048576,GENERIC_PASTE_NAMES=/^(image\.(png|jpe?g|gif|webp)|Clipboard.*|Untitled.*)$/i,SAFE_FILENAME_CHARS=/[^\p{L}\p{N}\p{M}\p{Extended_Pictographic}.\-_ ]/gu,STRIP_ON_SIGHT=/[/\\\x00-\x1f\x7f]/g;function sanitizeFilename(e){let t=e.replace(STRIP_ON_SIGHT,``);if(t=t.replace(SAFE_FILENAME_CHARS,`_`),t=t.replace(/_+/g,`_`).replace(/\.{2,}/g,`.`),t=t.replace(/^[._]+/,``),t=t.replace(/\.+$/,``),t===``)return`upload`;let s=255,g=new TextEncoder;if(g.encode(t).length>255){let e=t.lastIndexOf(`.`),s=e>=0?t.slice(e):``,S=e>=0?t.slice(0,e):t;for(;g.encode(S+s).length>255&&S.length>0;)S=S.slice(0,-1);t=(S||`upload`)+s,g.encode(t).length>255&&(t=`upload`)}return t}function resolveUploadDestDir(e,t,s){let g=t.trim();return g===``||g===`./`?resolve(s,dirname(e)):g===`/`?s:g.startsWith(`./`)?resolve(s,dirname(e),g.slice(2)):resolve(s,g)}function readTempFileHead(e,t){let s=openSync(e,`r`);try{let e=Buffer.alloc(t),g=readSync(s,e,0,t,0);return e.subarray(0,g)}finally{closeSync(s)}}const MAX_DEDUP_SCAN_CANDIDATES=1e3;async function streamingHashFile(e){let t=createHash(`sha256`);return await pipeline(createReadStream(e),t),t.digest(`hex`)}async function findDuplicateAsset(e,t,s){let g;try{g=await readdir(e)}catch{return null}let S=getLogger(`upload`),w=0;for(let E of g){let g=extname(E).slice(1).toLowerCase();if(!ASSET_EXTENSIONS.has(g))continue;let D=resolve(e,E),O;try{O=await stat$1(D)}catch{continue}if(!O.isFile()||O.size!==s)continue;if(w++,w>MAX_DEDUP_SCAN_CANDIDATES)return S.warn({event:`upload-dedup-skip`,reason:`scan-cap-exceeded`,destDir:e,scanned:MAX_DEDUP_SCAN_CANDIDATES,expectedSize:s},`[upload-dedup] candidate scan exceeded ${MAX_DEDUP_SCAN_CANDIDATES} same-size siblings — degrading to no-dedup for this upload`),null;let k;try{k=await streamingHashFile(D)}catch(e){let t=e.code;t!==`ENOENT`&&S.warn({event:`upload-dedup-skip`,reason:`read-failed`,code:t,entry:E},`[upload-dedup] skipped candidate — read failed`);continue}if(k===t)return E}return null}function readUploadBody(e,t){return new Promise((s,g)=>{let S;try{S=(0,import_lib.default)({headers:e.headers,limits:{files:1,fields:10,fieldSize:2*1024}})}catch(e){g(new UploadWriteError(`malformed-upload`,e));return}let w=!1,E=`upload`,D=``,O=``,k,j,F=!1,L=(e,t)=>{if(!w){if(w=!0,k)try{unlinkSync(k)}catch{}g(t instanceof UploadWriteError?t:new UploadWriteError(e,t))}},B=e=>e.code===`ENOSPC`||e.code===`EDQUOT`?`storage-full`:e.code===`EROFS`||e.code===`EACCES`||e.code===`EPERM`?`storage-readonly`:`storage-error`;S.on(`field`,(e,t)=>{e===`parentDocName`&&(O=t)}),S.on(`file`,(e,g,S)=>{F=!0,E=S.filename||`upload`,D=S.mimeType||``;let H;try{H=mintTempUploadPath(t)}catch(e){L(B(e),e),g.resume();return}k=H;let q=new HashingPassThrough;pipeline(g,q,createWriteStream(H)).then(()=>{w||(w=!0,s({filename:E,mimeType:D,parentDocName:O,tempPath:H,sha:q.digest(),byteLength:q.byteLength()}))}).catch(e=>{j=e,L(B(e),e)})}),S.on(`error`,e=>{L(`malformed-upload`,e)}),S.on(`close`,()=>{w||j||F||(w=!0,s({filename:``,mimeType:``,parentDocName:O,tempPath:``,sha:``,byteLength:0}))}),e.on(`close`,()=>{w||j||e.complete||L(`malformed-upload`,Error(`client disconnected`))}),e.pipe(S)})}function safeSubdir(e,t){let s=resolve(e,t);if(s!==e&&!s.startsWith(`${e}/`))throw Error(`Invalid directory: ${t}`);return s}function isValidRelativeContentPath(e){return!e||e.startsWith(`/`)||e.includes(`\\`)||e.includes(`\0`)?!1:e.split(`/`).every(e=>e&&e!==`.`&&e!==`..`)}function listAffectedDocNames(e,t,s){let g=[...e.keys()].filter(e=>t===`file`?e===s:e===s||e.startsWith(`${s}/`));return g.sort((e,t)=>e.localeCompare(t)),g}function remapDocNameForRename(e,t,s,g){return t===`file`||e===s?g:`${g}${e.slice(s.length)}`}function assertNoSymlinkEscape(e,t){let s;try{s=realpathSync(t)}catch{return}let g=e;for(;;)try{if(!isWithinContentDir(realpathSync(g),s))throw Error(`symlink-escape: path resolves outside content directory`);return}catch(e){let s=e.code;if(s===`ELOOP`)throw Error(`symlink-escape: symlink cycle in path`);if(s!==`ENOENT`)throw e;let S=dirname(g);if(S===g||S!==t&&!S.startsWith(`${t}${sep}`))throw e;g=S}}function resolveContentEntryPath(e,t,s){if(!isValidRelativeContentPath(s))throw Error(`path must be a relative content path`);let g=resolve(e),S=resolve(g,t===`file`?isSupportedDocFile(s)?s:`${s}${getDocExtension(s)}`:s);if(S!==g&&!S.startsWith(`${g}${sep}`))throw Error(`path must not escape content directory`);return assertNoSymlinkEscape(S,g),S}function probeAndRegisterSourceFileExtension(e,t){if(!isValidRelativeContentPath(t))return;let s=resolve(e);for(let e of SUPPORTED_DOC_EXTENSIONS){let g=resolve(s,`${t}${e}`);if(!(g!==s&&!g.startsWith(`${s}${sep}`))&&existsSync(g)){registerDocExtension(t,e);return}}}function toGitRelativePath(e,t){let s=resolve(e),g=resolve(t);return g!==s&&!g.startsWith(`${s}${sep}`)?null:relative(s,g).split(sep).join(`/`)}async function renameTrackedPathInGit(e,t,s){if(!e)return!1;let g=toGitRelativePath(e,t),S=toGitRelativePath(e,s);return!g||!S?!1:await withParentLock(async()=>{let t=esm_default({baseDir:e,timeout:{block:15e3}}),w=``;try{w=(await t.raw(`ls-files`,`--`,g)).trim()}catch(e){return console.warn(`[renameTrackedPathInGit] git ls-files failed, falling back to fs rename:`,e),!1}if(!w)return!1;mkdirSync(dirname(s),{recursive:!0});try{return await t.raw(`mv`,`--`,g,S),!0}catch(e){return console.warn(`[renameTrackedPathInGit] git mv failed, falling back to fs rename:`,e),!1}})}const workspaceSearchCaches=new Map;async function readBody(e){let t=[],s=0;for await(let g of e){if(s+=g.length,s>MAX_BODY_BYTES)throw Error(`Payload too large`);t.push(g)}return Buffer.concat(t)}function json(e,t,s,g){e.writeHead(t,{"Content-Type":`application/json`,"X-Content-Type-Options":`nosniff`,...g}),e.end(JSON.stringify(s))}function extractHeadings(e){let t=e;if(e.startsWith(`---
943
+ `){j+=2,k=j;continue}j+=1,k=j}return D}function serializeLiveDocument$1(e){return e.getText(`source`).toString()}async function readDocumentMarkdown(e,t,s){let g=e.documents.get(t);if(g)try{return serializeLiveDocument$1(g)}catch(e){return log$3.warn({docName:t,err:e},`[suggest-links] Failed live serialization, falling back to live source text`),g.getText(`source`).toString()}return await readFile$1(s.canonicalPath,`utf-8`)}function toPublicTarget(e){return{docName:e.docName,title:e.title,aliases:e.aliases}}async function suggestLinks(e){let{hocuspocus:t,fileIndex:s,docName:g,scanBudgetMs:S=500,now:w=()=>Date.now(),onComplete:E}=e,D=w(),O=s.get(g);if(!O)throw new SuggestLinksTargetNotFoundError(g);let k=extractPageIdentity(await readDocumentMarkdown(t,g,O),g),j=prepareSearchLabels(k),F=[...s.keys()].filter(e=>e!==g).sort((e,t)=>e.localeCompare(t)),L=new Map,B=!1;for(let e of F){if(w()-D>S){B=!0;break}let E=s.get(e);if(!E)continue;let O;try{O=await readDocumentMarkdown(t,e,E)}catch(t){log$3.warn({docName:e,err:t},`[suggest-links] Failed to read source doc`);continue}let k=scanMarkdownForMentions(O,e,g,j).map(t=>({source:e,excerpt:t.excerpt,offset:t.offset}));k.length>0&&L.set(e,k)}let H=[...L.entries()].sort(([e,t],[s,g])=>g.length===t.length?e===s?(t[0]?.offset??2**53-1)-(g[0]?.offset??2**53-1):e.localeCompare(s):g.length-t.length).flatMap(([,e])=>e),q=w()-D,J={durationMs:q,corpusDocCount:F.length,candidateCount:H.length,truncated:B};return log$3.info({docName:g,durationMs:q,corpusDocCount:F.length,candidateCount:H.length,truncated:B,labelCount:j.length,normalizedTarget:toWikiLinkSlug(k.title)},`[suggest-links] scan completed`),E?.(J),{target:toPublicTarget(k),mentions:H,truncated:B}}const GIT_LOG_FORMAT=`%H%x00%aI%x00%an%x00%ae%x00%s%x00%B%x1e`,EMPTY={entries:[],total:0,hasMore:!1};function classifyType(e){return e.startsWith(`checkpoint:`)?`checkpoint`:e.startsWith(`import:`)||e.startsWith(`upstream:`)?`upstream`:e.startsWith(`park:`)?`park`:`wip`}function parseGitLogOutput(e){return e.trim()?e.split(``).map(e=>{let t=e.trimStart();if(!t)return null;let[s=``,g=``,S=``,w=``,E=``,D=``]=t.split(`\0`),O=classifyType(E);return{sha:s.trim(),timestamp:g,author:S,authorEmail:w,type:O,message:E,contributors:readContributors(D),checkpoint:O===`checkpoint`?parseCheckpoint(D):null,rawBody:D}}).filter(e=>e!==null&&e.sha.length===40):[]}function toArray(e){return e?Array.isArray(e)?e:e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}let _chainDepthHist=null;function chainDepthHist(){return _chainDepthHist||=getMeter().createHistogram(`rename.predecessor_chain_depth_histogram`,{description:`Predecessor chain depth observed per timeline query`}),_chainDepthHist}let _transientSkipCounter=null;function transientSkipCounter(){return _transientSkipCounter||=getMeter().createCounter(`rename.transient_skip_total`,{description:`Count of empty-commitSha entries encountered (lazy-population transient skip)`}),_transientSkipCounter}function matchesAuthor(e,t){return t.length===0?!0:t.some(t=>e.author.toLowerCase().includes(t.toLowerCase())||e.authorEmail.toLowerCase().includes(t.toLowerCase()))}function filterEntriesByOkActorDocs(e,t,s){return e.length===0||t.length===0?e:e.filter(e=>{let g=parseOkActors(e.rawBody);if(g.length===0)return!0;let S=new Set;for(let e of g){for(let t of e.docs)S.add(t);if(e.previous_paths)for(let t of e.previous_paths)S.add(t.from),S.add(t.to)}if(S.size===0)return!0;for(let g=0;g<t.length;g++){let w=t[g],E=s[g];if(!(E!==null&&!E.has(e.sha))&&S.has(w.path))return!0}return!1})}async function filterEntriesByChain(e,t,s,g,S,w,E){if(t.length===0||s.length===0)return t;let D=await Promise.all(s.map(async t=>{if(t.renameCommit===null)return null;let s=await buildSeeds(e,t.renameCommit,g,E);return s.length===0?new Set:buildAncestorShaSet(e,s,g,w)})),O=[];for(let e=0;e<t.length;e++){let g=t[e];for(let t=0;t<s.length;t++){let w=s[t],E=D[t];E!==null&&!E.has(g.sha)||O.push({entryIdx:e,sha:g.sha,path:S(w.path)})}}if(O.length===0)return[];let k=await batchCheckExistence(e,O.map(e=>({sha:e.sha,path:e.path}))),j=new Set;for(let e=0;e<O.length;e++)k[e]&&j.add(O[e].entryIdx);return t.filter((e,t)=>j.has(t))}async function getDocumentHistory(e,t,s=`.`,g){if(!existsSync(e.workTree)||!existsSync(e.gitDir)||t.docName&&(t.docName.includes(`..`)||t.docName.includes(`\0`)))return EMPTY;let S=t.branch??`main`,w=Math.max(1,t.limit??50),E=Math.max(0,t.offset??0),D=toArray(t.type),O=toArray(t.author),k=toArray(t.excludeAuthor),j=s===`.`?``:s.replace(/^\.\//,``),F=e=>j?`${j}/${e}${getDocExtension(e)}`:`${e}${getDocExtension(e)}`,L=t.docName?F(t.docName):void 0;try{let s=g?.renameLogIndex??getOrLoadRenameLogIndex(e.gitDir),{chain:j,skipped:B}=await withSpan(`rename.expandPredecessors`,void 0,async()=>t.docName?expandPredecessors(t.docName,S,s):{chain:[],skipped:0}),H=j.length>1;t.docName&&chainDepthHist().record(j.length),B>0&&transientSkipCounter().add(B);let q=createSeedsCache(),J=createAncestorShaSetCache(),Y=shadowGit(e);if(D.length===1&&D[0]===`checkpoint`){let t=(await Y.raw(`for-each-ref`,`--sort=-creatordate`,`--format=%(objectname)`,`refs/checkpoints/${S}/`)).trim().split(`
944
+ `).filter(e=>e.length===40),s=[];if(S!==`main`)try{s=(await Y.raw(`for-each-ref`,`--sort=-creatordate`,`--format=%(objectname)`,`refs/checkpoints/main/`)).trim().split(`
945
+ `).filter(e=>e.length===40)}catch{}let g=[...t,...s];if(g.length===0)return EMPTY;let D=parseGitLogOutput(await Y.raw(`log`,`--no-walk`,`--author-date-order`,`--format=${GIT_LOG_FORMAT}`,...g)).map(e=>({...e,type:`checkpoint`}));if(L){let t=createAncestorShaSetCache();D=await filterEntriesByChain(e,D,j,S,F,t,q)}if(S!==`main`&&t.length>0&&s.length>0){let e=new Set(t),s=D.filter(t=>e.has(t.sha)),g=D.filter(t=>!e.has(t.sha)),S=s.reduce((e,t)=>Math.min(e,new Date(t.timestamp).getTime()),1/0);D=[...s,...g.filter(e=>new Date(e.timestamp).getTime()<S)]}let B=D.filter(e=>matchesAuthor(e,O)&&(k.length===0||!matchesAuthor(e,k))),H=B.length;return{entries:B.slice(E,E+w).map(({rawBody:e,...t})=>t),total:H,hasMore:E+w<H}}let ee=[],te=[],ne=S!==`main`;try{let e=(await Y.raw(`for-each-ref`,`--format=%(objectname)`,`refs/checkpoints/${S}/`)).trim().split(`
946
+ `).filter(e=>e.length===40);ee.push(...e)}catch{}let ae=[];if(ne)try{ae=(await Y.raw(`for-each-ref`,`--format=%(objectname)`,`refs/checkpoints/main/`)).trim().split(`
947
+ `).filter(e=>e.length===40)}catch{}try{let e=(await Y.raw(`for-each-ref`,`--format=%(refname)`,`refs/wip/${S}/`)).trim().split(`
948
+ `).filter(Boolean);te.push(...e)}catch{}if(ne&&te.length===0)try{let e=(await Y.raw(`for-each-ref`,`--format=%(refname)`,`refs/wip/main/`)).trim().split(`
949
+ `).filter(Boolean);te.push(...e)}catch{}if(te.length===0&&ee.length===0&&ae.length===0)return EMPTY;let oe=[...ee,...ae],se=[];if(oe.length>0){let t=parseGitLogOutput(await Y.raw(`log`,`--no-walk`,`--author-date-order`,`--format=${GIT_LOG_FORMAT}`,...oe)).map(e=>({...e,type:`checkpoint`}));if(L&&(t=await filterEntriesByChain(e,t,j,S,F,J,q)),ne&&ee.length>0&&ae.length>0){let e=new Set(ee),s=t.filter(t=>e.has(t.sha)),g=t.filter(t=>!e.has(t.sha)),S=s.reduce((e,t)=>{let s=new Date(t.timestamp).getTime();return s<e?s:e},1/0);se=[...s,...g.filter(e=>new Date(e.timestamp).getTime()<S)]}else se=t}let ce=[...te];for(let e of oe)ce.push(e);let ue=[];if(ce.length>0&&(ue=parseGitLogOutput(await Y.raw(`log`,`--full-history`,`--author-date-order`,`--format=${GIT_LOG_FORMAT}`,...ce,...L?[`--`,L]:[])),H))for(let t=0;t<j.length-1;t++){let s=j[t];if(s.renameCommit!==null)try{let t=await buildSeeds(e,s.renameCommit,S,q);if(t.length===0)continue;let g=F(s.path),w=await logSeededReachable(e,[`--full-history`,`--author-date-order`,`--format=${GIT_LOG_FORMAT}`],t,g);ue=[...ue,...parseGitLogOutput(w)]}catch(e){console.warn(`[timeline] predecessor walk failed for step ${t} (${s.path}); skipping:`,e)}}let de=[...se,...ue],fe=new Set,me=[];for(let e of de)fe.has(e.sha)||(fe.add(e.sha),me.push(e));let ge=me;H&&me.length>0&&(ge=filterEntriesByOkActorDocs(me,j,await Promise.all(j.map(async t=>{if(t.renameCommit===null)return null;let s=await buildSeeds(e,t.renameCommit,S,q);return s.length===0?new Set:buildAncestorShaSet(e,s,S,J)})))),ge.sort((e,t)=>new Date(t.timestamp).getTime()-new Date(e.timestamp).getTime());let _e=ge;_e=_e.filter(e=>e.type!==`park`),D.length>0&&(_e=_e.filter(e=>D.includes(e.type))),O.length>0&&(_e=_e.filter(e=>matchesAuthor(e,O))),k.length>0&&(_e=_e.filter(e=>!matchesAuthor(e,k)));let ve=_e.length;return{entries:_e.slice(E,E+w).map(({rawBody:e,...t})=>t),total:ve,hasMore:E+w<ve}}catch(e){return console.warn(`[timeline] getDocumentHistory failed, returning empty result:`,e),EMPTY}}let _httpDurationHist=null;function httpDurationHist(){return _httpDurationHist||=getMeter().createHistogram(`http.server.request.duration`,{description:`HTTP server request duration in seconds`,unit:`s`}),_httpDurationHist}let _hintEmittedCounter=null;function hintEmittedCounter(){return _hintEmittedCounter||=getMeter().createCounter(`ok.preview_attach.hint_emitted`,{description:`Count of attach-preview-once hints emitted on write-tool responses when no editor is attached to __system__`}),_hintEmittedCounter}let _agentPatchFmTouchCounter=null;function agentPatchFmTouchCounter(){return _agentPatchFmTouchCounter||=getMeter().createCounter(`ok.frontmatter.agent_patch_fm_touch_total`,{description:`Count of agent-patch calls whose find string targets the frontmatter region. Measures incidence during the soft-deprecation window before agent-patch FM-intersecting calls are enforced as 400. Bounded label: result ∈ {rejected, pre_deprecation_passthrough}.`}),_agentPatchFmTouchCounter}function findLooksLikeFrontmatter(e){return!!(/(^|\n)---(\s|\n|$)/.test(e)||/^\s*[\w-]+:\s+\S/.test(e))}let _renameAttributionCounter=null;function renameAttributionCounter(){return _renameAttributionCounter||=getMeter().createCounter(`ok.rename.attribution_kind`,{description:`Count of rename and rollback handler dispatches by attribution kind (agent | principal | anonymous)`}),_renameAttributionCounter}const ROLLBACK_ORIGIN={source:`local`,skipStoreHooks:!1,context:{origin:`rollback-apply`,paired:!0}},MANAGED_RENAME_ORIGIN={source:`local`,skipStoreHooks:!1,context:{origin:`managed-rename`,paired:!0}},log$2=getLogger(`api`);function safeDocPath(e,t){if(!e||e.includes(`..`)||e.includes(`\0`))return{error:`Invalid document name`};let s=t===`.`?``:t.replace(/^\.\//,``),g=getDocExtension(e);return{path:s?`${s}/${e}${g}`:`${e}${g}`}}const MAX_BODY_BYTES=1048576,GENERIC_PASTE_NAMES=/^(image\.(png|jpe?g|gif|webp)|Clipboard.*|Untitled.*)$/i,SAFE_FILENAME_CHARS=/[^\p{L}\p{N}\p{M}\p{Extended_Pictographic}.\-_ ]/gu,STRIP_ON_SIGHT=/[/\\\x00-\x1f\x7f]/g;function sanitizeFilename(e){let t=e.replace(STRIP_ON_SIGHT,``);if(t=t.replace(SAFE_FILENAME_CHARS,`_`),t=t.replace(/_+/g,`_`).replace(/\.{2,}/g,`.`),t=t.replace(/^[._]+/,``),t=t.replace(/\.+$/,``),t===``)return`upload`;let s=255,g=new TextEncoder;if(g.encode(t).length>255){let e=t.lastIndexOf(`.`),s=e>=0?t.slice(e):``,S=e>=0?t.slice(0,e):t;for(;g.encode(S+s).length>255&&S.length>0;)S=S.slice(0,-1);t=(S||`upload`)+s,g.encode(t).length>255&&(t=`upload`)}return t}function resolveUploadDestDir(e,t,s){let g=t.trim();return g===``||g===`./`?resolve(s,dirname(e)):g===`/`?s:g.startsWith(`./`)?resolve(s,dirname(e),g.slice(2)):resolve(s,g)}function readTempFileHead(e,t){let s=openSync(e,`r`);try{let e=Buffer.alloc(t),g=readSync(s,e,0,t,0);return e.subarray(0,g)}finally{closeSync(s)}}const MAX_DEDUP_SCAN_CANDIDATES=1e3;async function streamingHashFile(e){let t=createHash(`sha256`);return await pipeline(createReadStream(e),t),t.digest(`hex`)}async function findDuplicateAsset(e,t,s){let g;try{g=await readdir(e)}catch{return null}let S=getLogger(`upload`),w=0;for(let E of g){let g=extname(E).slice(1).toLowerCase();if(!ASSET_EXTENSIONS.has(g))continue;let D=resolve(e,E),O;try{O=await stat$1(D)}catch{continue}if(!O.isFile()||O.size!==s)continue;if(w++,w>MAX_DEDUP_SCAN_CANDIDATES)return S.warn({event:`upload-dedup-skip`,reason:`scan-cap-exceeded`,destDir:e,scanned:MAX_DEDUP_SCAN_CANDIDATES,expectedSize:s},`[upload-dedup] candidate scan exceeded ${MAX_DEDUP_SCAN_CANDIDATES} same-size siblings — degrading to no-dedup for this upload`),null;let k;try{k=await streamingHashFile(D)}catch(e){let t=e.code;t!==`ENOENT`&&S.warn({event:`upload-dedup-skip`,reason:`read-failed`,code:t,entry:E},`[upload-dedup] skipped candidate — read failed`);continue}if(k===t)return E}return null}function readUploadBody(e,t){return new Promise((s,g)=>{let S;try{S=(0,import_lib.default)({headers:e.headers,limits:{files:1,fields:10,fieldSize:2*1024}})}catch(e){g(new UploadWriteError(`malformed-upload`,e));return}let w=!1,E=`upload`,D=``,O=``,k,j,F=!1,L=(e,t)=>{if(!w){if(w=!0,k)try{unlinkSync(k)}catch{}g(t instanceof UploadWriteError?t:new UploadWriteError(e,t))}},B=e=>e.code===`ENOSPC`||e.code===`EDQUOT`?`storage-full`:e.code===`EROFS`||e.code===`EACCES`||e.code===`EPERM`?`storage-readonly`:`storage-error`;S.on(`field`,(e,t)=>{e===`parentDocName`&&(O=t)}),S.on(`file`,(e,g,S)=>{F=!0,E=S.filename||`upload`,D=S.mimeType||``;let H;try{H=mintTempUploadPath(t)}catch(e){L(B(e),e),g.resume();return}k=H;let q=new HashingPassThrough;pipeline(g,q,createWriteStream(H)).then(()=>{w||(w=!0,s({filename:E,mimeType:D,parentDocName:O,tempPath:H,sha:q.digest(),byteLength:q.byteLength()}))}).catch(e=>{j=e,L(B(e),e)})}),S.on(`error`,e=>{L(`malformed-upload`,e)}),S.on(`close`,()=>{w||j||F||(w=!0,s({filename:``,mimeType:``,parentDocName:O,tempPath:``,sha:``,byteLength:0}))}),e.on(`close`,()=>{w||j||e.complete||L(`malformed-upload`,Error(`client disconnected`))}),e.pipe(S)})}function safeSubdir(e,t){let s=resolve(e,t);if(s!==e&&!s.startsWith(`${e}/`))throw Error(`Invalid directory: ${t}`);return s}function isValidRelativeContentPath(e){return!e||e.startsWith(`/`)||e.includes(`\\`)||e.includes(`\0`)?!1:e.split(`/`).every(e=>e&&e!==`.`&&e!==`..`)}function listAffectedDocNames(e,t,s){let g=[...e.keys()].filter(e=>t===`file`?e===s:e===s||e.startsWith(`${s}/`));return g.sort((e,t)=>e.localeCompare(t)),g}function remapDocNameForRename(e,t,s,g){return t===`file`||e===s?g:`${g}${e.slice(s.length)}`}function assertNoSymlinkEscape(e,t){let s;try{s=realpathSync(t)}catch{return}let g=e;for(;;)try{if(!isWithinContentDir(realpathSync(g),s))throw Error(`symlink-escape: path resolves outside content directory`);return}catch(e){let s=e.code;if(s===`ELOOP`)throw Error(`symlink-escape: symlink cycle in path`);if(s!==`ENOENT`)throw e;let S=dirname(g);if(S===g||S!==t&&!S.startsWith(`${t}${sep}`))throw e;g=S}}function resolveContentEntryPath(e,t,s){if(!isValidRelativeContentPath(s))throw Error(`path must be a relative content path`);let g=resolve(e),S=resolve(g,t===`file`?isSupportedDocFile(s)?s:`${s}${getDocExtension(s)}`:s);if(S!==g&&!S.startsWith(`${g}${sep}`))throw Error(`path must not escape content directory`);return assertNoSymlinkEscape(S,g),S}function probeAndRegisterSourceFileExtension(e,t){if(!isValidRelativeContentPath(t))return;let s=resolve(e);for(let e of SUPPORTED_DOC_EXTENSIONS){let g=resolve(s,`${t}${e}`);if(!(g!==s&&!g.startsWith(`${s}${sep}`))&&existsSync(g)){registerDocExtension(t,e);return}}}function toGitRelativePath(e,t){let s=resolve(e),g=resolve(t);return g!==s&&!g.startsWith(`${s}${sep}`)?null:relative(s,g).split(sep).join(`/`)}async function renameTrackedPathInGit(e,t,s){if(!e)return!1;let g=toGitRelativePath(e,t),S=toGitRelativePath(e,s);return!g||!S?!1:await withParentLock(async()=>{let t=esm_default({baseDir:e,timeout:{block:15e3}}),w=``;try{w=(await t.raw(`ls-files`,`--`,g)).trim()}catch(e){return console.warn(`[renameTrackedPathInGit] git ls-files failed, falling back to fs rename:`,e),!1}if(!w)return!1;mkdirSync(dirname(s),{recursive:!0});try{return await t.raw(`mv`,`--`,g,S),!0}catch(e){return console.warn(`[renameTrackedPathInGit] git mv failed, falling back to fs rename:`,e),!1}})}const workspaceSearchCaches=new Map;async function readBody(e){let t=[],s=0;for await(let g of e){if(s+=g.length,s>MAX_BODY_BYTES)throw Error(`Payload too large`);t.push(g)}return Buffer.concat(t)}function json(e,t,s,g){e.writeHead(t,{"Content-Type":`application/json`,"X-Content-Type-Options":`nosniff`,...g}),e.end(JSON.stringify(s))}function extractHeadings(e){let t=e;if(e.startsWith(`---
939
950
  `)||e.startsWith(`---\r
940
951
  `)){let s=e.indexOf(`
941
952
  ---`,3);s!==-1&&(t=e.slice(s+4))}let s=[],g=new Map,S=createCodeFenceTracker();for(let e of t.split(`
942
- `)){if(S(e))continue;let t=e.match(/^(#{1,6})\s+(.+)$/);if(t){let e=t[2].trim(),S=getHeadingSlug(e,g);S&&s.push({level:t[1].length,text:e,slug:S})}}return s}function isSafeDocName(e){return!(e.includes(`..`)||e.startsWith(`/`)||e.includes(`\0`)||e.includes(`\\`))}function createApiExtension(e){let{hocuspocus:t,sessionManager:s,contentDir:g,serverInstanceId:S,getFileIndex:w,getAliasMap:E,enableTestRoutes:D=!1,shadowRef:O,flushGitCommit:k,getCurrentBranch:j,getDiskAckSVs:F,contentRoot:L,backlinkIndex:B,tagIndex:H,signalChannel:q,agentFocusBroadcaster:J,agentPresenceBroadcaster:Y,onAgentWrite:ee,getSyncEngine:te,localOpCliArgs:ne=[`open-knowledge`],projectDir:ae,getPrincipal:oe,contentFilter:se,installedAgentsProbe:ce,forceUnloadDocument:ue}=e,de=createConcurrencyGuard(),fe=null;function me(e){return[...e.entries()].map(([e,t])=>`${e}\0${t.canonicalPath}\0${t.size}\0${t.modified}\0${t.aliases.join(`\0`)}`).sort().join(`
943
- `)}let ge=createInstalledAgentsProbe({probe:ce??createOsProbe(process.platform)});function _e(e){if(!isSafeDocName(e))return null;let t=resolve(g),s=resolve(t,`${e}${getDocExtension(e)}`);return!s.startsWith(`${t}/`)&&s!==t?null:s}function ve(e){let t=_e(e);if(!t||!existsSync(t))return e;try{return extractPageTitle(readFileSync(t,`utf-8`),e)}catch{return e}}function ye(e,t){return t.has(e)?ve(e):e}let Ce={cluster:void 0,category:void 0,tags:void 0};function we(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,g;return Array.isArray(e.tags)?g=e.tags.length>0?e.tags:void 0:typeof e.tags==`string`&&e.tags&&(g=[e.tags]),{cluster:t,category:s,tags:g}}}}catch{}try{let t=_e(e);if(!t||!existsSync(t))return Ce;let{frontmatter:s}=stripFrontmatter(readFileSync(t,`utf-8`));return s?parseFrontmatterMetadata(s):Ce}catch{return Ce}}function Te(e,t){return t.has(e)?we(e):Ce}function De(e){if(B)try{if(B.getBacklinks(e).length>0)return;let t=performance$1.now(),s=findHubCandidates(e,w()),g=performance$1.now()-t;return g>5&&log$2.debug({docName:e,elapsedMs:g,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 je(e){return E?.().get(e)??e}function Me(e){try{return t.documents.get(e)?.connections.size??0}catch{return 0}}function Pe(){try{return t.documents.get(`__system__`)?.connections.size??0}catch{return 0}}function Ie(e,s){let g=`onStoreDocument-${e}`;(t.debouncer.isDebounced(g)?t.debouncer.executeNow(g):Promise.resolve()).then(()=>k?.()).catch(e=>{log$2.warn({err:e},`[${s}] post-write flush failed`)})}function Re(){let e=new Set;for(let[t,s]of w()){e.add(t);for(let t of s.aliases)e.add(t)}return e}function ze(){let e=Promise.resolve();return async function(t){let s=e,g=()=>{};e=new Promise(e=>{g=e}),await s;try{return await t()}finally{g()}}}let Be=ze();function Ve(e){return e instanceof Error?e instanceof ManagedRenameSourceNotFoundError?{status:404,error:e.message}:e instanceof ManagedRenameDestinationExistsError?{status:409,error:e.message}:e instanceof ManagedRenameSourceTypeMismatchError?{status:400,error:e.message}:e.message.startsWith(`Cannot rename missing document:`)||e.message.startsWith(`Cannot snapshot missing document:`)?{status:404,error:e.message}:e.message.startsWith(`symlink-escape:`)?{status:400,error:e.message}:e.message===`Managed rename requires backlink index support`?{status:503,error:e.message}:{status:500,error:`Failed to rename document`}:{status:500,error:`Failed to rename document`}}async function Ue(e){let g=new Map;for(let s of e){let e=t.documents.get(s);e&&g.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(ue??t.unloadDocument.bind(t))(e))}return g}function We(e,t){for(let{fromDocName:s,toDocName:S}of e){let e=safeContentPath(S,g),w=t.get(s);typeof w==`string`&&tracedWriteFileSync(e,w,`utf-8`);let E=typeof w==`string`?w:existsSync(e)?readFileSync(e,`utf-8`):null;typeof E==`string`&&registerWrite(e,contentHash(E))}}function Ge(e,t){return e.map(e=>{let s=t.get(e);if(typeof s==`string`)return{docName:e,content:s};let S=safeContentPath(e,g);if(!existsSync(S))throw Error(`Cannot snapshot missing document: ${e}`);return{docName:e,content:readFileSync(S,`utf-8`)}})}function Ke(e){let s=t.documents.get(e);if(s)return s.getText(`source`).toString();let S=resolveContentEntryPath(g,`file`,e);return existsSync(S)?readFileSync(S,`utf-8`):null}function Xe(e,t){let s=resolveContentEntryPath(g,`file`,e);tracedMkdirSync(dirname(s),{recursive:!0}),tracedWriteFileSync(s,t,`utf-8`),registerWrite(s,contentHash(t)),setReconciledBase(e,t);let S=w();S instanceof Map&&updateFileIndex({kind:`update`,path:s,docName:e,content:t},S)}function $e(s,g){let S=t.documents.get(s);if(!S)throw Error(`Document is not loaded: ${s}`);let w={markdown:``,rewrites:0};return S.transact(()=>{let t=S.getXmlFragment(`default`),E=S.getText(`source`),D=E.toString();if(w=applyRenameMap(D,s,g),w.rewrites===0)return;let{body:O}=stripFrontmatter(w.markdown),k=e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:s}:void 0,j=mdManager.parseWithFallback(O,k),F=schema.nodeFromJSON(j);applyFastDiff(E,D,w.markdown),updateYFragment(S,t,F,{mapping:new Map,isOMark:new Map})},MANAGED_RENAME_ORIGIN),w}async function nt(e,s,S){return Be(async()=>withSpan(`rename.executeRewrites`,{attributes:{"rename.kind":S}},async E=>{if(!B)throw Error(`Managed rename requires backlink index support`);let D=resolveContentEntryPath(g,S,e),O=resolveContentEntryPath(g,S,s);if(D===O)return{renamed:[],rewrittenDocs:[]};if(!existsSync(D))throw new ManagedRenameSourceNotFoundError(S);if(existsSync(O))throw new ManagedRenameDestinationExistsError;let k=statSync(D);if(S===`file`&&!k.isFile()||S===`folder`&&!k.isDirectory())throw new ManagedRenameSourceTypeMismatchError(S);let j=(S===`file`?[stripDocExtension(e)]:listAffectedDocNames(w(),S,e)).map(t=>({from:t,to:S===`file`?stripDocExtension(s):remapDocNameForRename(t,S,e,s)}));if(E.setAttribute(`rename.affected_docs`,j.length),j.length===0)return{renamed:[],rewrittenDocs:[]};let F=buildRenameMap(j),L=j.map(({from:e,to:t})=>({fromDocName:e,toDocName:t})),H=new Set;for(let{from:e}of j)for(let t of B.getBacklinks(e))F.has(t.source)||H.add(t.source);let J=[...H].sort((e,t)=>e.localeCompare(t)),Y=new Map,ee=[],te=[];for(let e of[...F.keys(),...J]){if(Y.has(e))continue;if(!F.has(e)&&!existsSync(resolveContentEntryPath(g,`file`,e))){te.push(e);continue}let t=Ke(e);typeof t==`string`?(Y.set(e,t),F.has(e)||ee.push(e)):F.has(e)||te.push(e)}for(let{from:e}of j)if(typeof Y.get(e)!=`string`)throw Error(`Cannot rename missing document: ${e}`);let ne=createManagedRenameRecoveryJournal({fromPath:e,toPath:s,affectedDocs:[...j],snapshots:Ge([...Y.keys()],Y)}),oe=[];return await withManagedRenameRecovery(g,ne,async()=>{for(let e of te)B.deleteDocument(e);for(let e of ee){let s=t.documents.get(e)?$e(e,F):applyRenameMap(Y.get(e)??``,e,F);s.rewrites>0&&(Xe(e,s.markdown),oe.push({docName:e,rewrites:s.rewrites})),B.updateDocumentFromMarkdown(e,s.markdown)}let E=await Ue([...F.keys()]),D=resolveContentEntryPath(g,S,e),O=resolveContentEntryPath(g,S,s);await renameTrackedPathInGit(ae,D,O)||(tracedMkdirSync(dirname(O),{recursive:!0}),tracedRenameSync(D,O));let k=S===`file`&&isSupportedDocFile(s)?extname(s):null;for(let{from:e,to:t}of j){let s=getDocExtension(e);forgetDocExtension(e),registerDocExtension(t,k??s)}let L=[...j].sort((e,t)=>e.from.localeCompare(t.from));for(let{from:e,to:t}of L){let s=resolveContentEntryPath(g,`file`,e),S=resolveContentEntryPath(g,`file`,t),D=applyRenameMap(E.get(e)??Y.get(e)??readFileSync(S,`utf-8`),e,F);We([{fromDocName:e,toDocName:t}],new Map([[e,D.markdown]])),setReconciledBase(t,D.markdown);let O=w();O instanceof Map&&updateFileIndex({kind:`rename`,oldPath:s,newPath:S,oldDocName:e,newDocName:t,content:D.markdown},O),B.renameDocument(e,t,D.markdown),D.rewrites>0&&oe.push({docName:t,rewrites:D.rewrites})}}),B.saveToDisk().catch(t=>{console.warn(`[backlinks] Failed to persist managed rename cache for ${e} -> ${s}:`,t)}),q?.(`files`),q?.(`backlinks`),q?.(`graph`),oe.sort((e,t)=>e.docName.localeCompare(t.docName)),E.setAttribute(`rename.rewrite_count`,oe.length),{renamed:L,rewrittenDocs:oe}}))}function rt(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 it(e){return{principalId:oe?.()?.id,agentType:resolveAgentType(e.clientName),clientName:e.clientName,clientVersion:e.clientVersion,label:e.label}}function at(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 st(e){return{value:e.value}}function vt(e,t=!1){e.kind===`value`&&(incrementSummariesProvided(),e.truncatedFrom!==void 0&&!t&&incrementSummariesTruncated())}async function Tt(t,g){if(t.method!==`POST`){g.writeHead(405),g.end(`Method not allowed`);return}try{let S;try{S=await readBody(t)}catch{json(g,413,{ok:!1,error:`Payload too large`});return}let w;try{w=S.length>0?JSON.parse(S.toString()):{}}catch{json(g,400,{ok:!1,error:`Invalid JSON`});return}let E=typeof w.docName==`string`&&w.docName.length>0?w.docName:`test-doc`;if(!isSafeDocName(E)){json(g,400,{ok:!1,error:`Invalid docName`});return}let D=je(E);if(isSystemDoc(D)||isConfigDoc(D)){json(g,400,{ok:!1,error:`'${D}' is a reserved document name`});return}let{agentId:O,agentName:k,colorSeed:j,clientName:F,clientVersion:L,label:B}=rt(w),H=normalizeSummary(w.summary);if(H.kind===`invalid`){json(g,400,{ok:!1,error:`summary must be a string`});return}let q=await s.getSession(D,O,{displayName:k,colorSeed:j,clientName:F}),J=new Date().toISOString(),te=typeof w.content==`string`?w.content:`Hello from the agent! ${J}`,{response:ne,stored:ae}=at(H);try{let t=iconFromClientName(F),s=AGENT_ICON_COLORS[t]??colorFromSeed(j??O);Y?.setPresence(O,{displayName:k,icon:t,color:s,currentDoc:D,mode:`writing`,ts:Date.now()}),captureEffect(q.dc.document.getText(`source`),O,j,F),q.dc.document.transact(()=>{applyAgentMarkdownWrite(q.dc.document,`${te}\n`,`append`,e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:D}:void 0),q.dc.document.getMap(`agent-flash`).set(O,{agentId:O,timestamp:Date.now(),type:`insert`,description:`Added (${k}): ${te.slice(0,50)}`})},q.origin),recordContributor(D,O,k,j,void 0,it({clientName:F,clientVersion:L,label:B}),ae),incrementAgentWriteCalls(),vt(H)}finally{Y?.touchMode(O,`idle`)}Ie(D,`agent-write`),ee?.(),json(g,200,{ok:!0,timestamp:J,...ne?{summary:ne}:{}})}catch(e){if(e instanceof AgentSessionCapacityError){log$2.warn({err:e},`[agent-write] session capacity exhausted`),json(g,503,{ok:!1,error:`too-many-agent-sessions`});return}log$2.error({err:e},`[agent-write] handler failed`),json(g,500,{ok:!1,error:`Internal server error`})}}async function Et(t,g){if(t.method!==`POST`){g.writeHead(405),g.end(`Method not allowed`);return}try{let S;try{S=await readBody(t)}catch{json(g,413,{ok:!1,error:`Payload too large`});return}let w;try{w=JSON.parse(S.toString())}catch{json(g,400,{ok:!1,error:`Invalid JSON`});return}if(!w||typeof w!=`object`||Array.isArray(w)){json(g,400,{ok:!1,error:`Body must be a JSON object`});return}let{markdown:E,position:D}=w;if(!E||typeof E!=`string`){json(g,400,{ok:!1,error:`markdown field required`});return}let O=D===`prepend`?`prepend`:D===`replace`?`replace`:`append`,k=w.docName,j=typeof k==`string`&&k.length>0?k:`test-doc`;if(!isSafeDocName(j)){json(g,400,{ok:!1,error:`Invalid docName`});return}let F=je(j);if(isSystemDoc(F)||isConfigDoc(F)){json(g,400,{ok:!1,error:`'${F}' is a reserved document name`});return}let{agentId:L,agentName:B,colorSeed:H,clientName:q,clientVersion:te,label:ne}=rt(w),ae=normalizeSummary(w.summary);if(ae.kind===`invalid`){json(g,400,{ok:!1,error:`summary must be a string`});return}let{response:oe,stored:se}=at(ae),ce=await s.getSession(F,L,{displayName:B,colorSeed:H,clientName:q}),ue=new Date().toISOString();try{let t=iconFromClientName(q),s=AGENT_ICON_COLORS[t]??colorFromSeed(H??L);Y?.setPresence(L,{displayName:B,icon:t,color:s,currentDoc:F,mode:`writing`,ts:Date.now()}),captureEffect(ce.dc.document.getText(`source`),L,H,q),ce.dc.document.transact(()=>{applyAgentMarkdownWrite(ce.dc.document,E,O,e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:F}:void 0),ce.dc.document.getMap(`agent-flash`).set(L,{agentId:L,timestamp:Date.now(),type:`insert`,description:`Added (${B}): ${E.trim().slice(0,50)}`})},ce.origin),recordContributor(F,L,B,H,void 0,it({clientName:q,clientVersion:te,label:ne}),se),incrementAgentWriteCalls(),vt(ae)}finally{Y?.touchMode(L,`idle`)}Ie(F,`agent-write-md`),J?.setFocus(L,{agentName:B,currentDoc:F,writeKind:`write`,ts:Date.now()}),ee?.();let de=De(F),fe=Me(F),me=Pe();me===0&&hintEmittedCounter().add(1,{"shadow.writer":`agent`,"agent.type":resolveAgentType(q)}),json(g,200,{ok:!0,timestamp:ue,subscriberCount:fe,systemSubscriberCount:me,...de?{hints:de}:{},...oe?{summary:oe}:{}})}catch(e){if(e instanceof AgentSessionCapacityError){log$2.warn({err:e},`[agent-write-md] session capacity exhausted`),json(g,503,{ok:!1,error:`too-many-agent-sessions`});return}log$2.error({err:e},`[agent-write-md] handler failed`),json(g,500,{ok:!1,error:`Internal server error`})}}async function Dt(e,s){if(e.method!==`GET`){s.writeHead(405),s.end(`Method not allowed`);return}try{let S=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`docName`)||`test-doc`;if(!isSafeDocName(S)){json(s,400,{ok:!1,error:`Invalid docName`});return}let w=je(S);if(isSystemDoc(w)||isConfigDoc(w)){json(s,400,{ok:!1,error:`'${w}' is a reserved document name`});return}let E=t.documents.get(w);if(E){json(s,200,{ok:!0,docName:w,content:E.getText(`source`).toString()});return}if(!existsSync(resolveContentEntryPath(g,`file`,w))){json(s,404,{ok:!1,error:`Document not found: ${w}`});return}let D=await t.openDirectConnection(w);try{let e=D.document;if(!e){json(s,500,{ok:!1,error:`Document not available`});return}json(s,200,{ok:!0,docName:w,content:e.getText(`source`).toString()})}finally{await D.disconnect()}}catch(e){console.error(`[document-read]`,e),json(s,500,{ok:!1,error:`Internal server error`})}}async function jt(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}try{let s=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`dir`);if(s)try{safeSubdir(g,s)}catch{json(t,400,{ok:!1,error:`Invalid directory parameter`});return}let S=w(),E=[];for(let[e,t]of S){if(s&&!e.startsWith(`${s}/`)&&e!==s)continue;let S=getDocExtension(e);E.push({kind:`document`,docName:e,docExt:S,size:t.size,modified:t.modified,isSymlink:!1,canonicalDocName:null,targetPath:null});for(let w of t.aliases){if(s&&!w.startsWith(`${s}/`)&&w!==s)continue;let D=relative(g,t.canonicalPath);E.push({kind:`document`,docName:w,docExt:S,size:t.size,modified:t.modified,isSymlink:!0,canonicalDocName:e,targetPath:D})}}let D=[];try{let e=me(S);fe?.signature!==e&&(fe={signature:e,assets:collectReferencedAssets({contentDir:g,fileIndex:S,readMarkdown:e=>{try{return readFileSync(e,`utf-8`)}catch{return null}},isExcluded:se?e=>se.isPathIgnored(e):void 0})}),D=fe?.assets??[]}catch(e){fe=null,console.warn(`[document-list] asset collection failed; returning documents only:`,e)}for(let e of D)s&&!e.path.startsWith(`${s}/`)&&e.path!==s||E.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});E.sort((e,t)=>e.docName.localeCompare(t.docName)),json(t,200,{ok:!0,documents:E})}catch(e){console.error(`[document-list]`,e),json(t,500,{ok:!1,error:`Internal server error`})}}async function Mt(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!B){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!s){json(t,400,{ok:!1,error:`Missing docName parameter`});return}if(!isSafeDocName(s)){json(t,400,{ok:!1,error:`Invalid docName`});return}json(t,200,{ok:!0,docName:s,backlinks:B.getBacklinks(s).map(e=>({source:e.source,anchor:e.anchor,title:ve(e.source),snippet:e.snippet}))})}catch(e){console.error(`[backlinks]`,e),json(t,500,{ok:!1,error:`Failed to read backlinks`})}}async function Ft(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!B){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.get(`docNames`);if(!s){json(t,400,{ok:!1,error:`Missing docNames parameter`});return}let g={};for(let e of s.split(`,`)){let t=e.trim();!t||!isSafeDocName(t)||(g[t]=B.getBacklinkCount(t))}json(t,200,{ok:!0,counts:g})}catch(e){console.error(`[backlink-counts]`,e),json(t,500,{ok:!1,error:`Failed to read backlink counts`})}}async function It(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!B){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!s){json(t,400,{ok:!1,error:`Missing docName parameter`});return}if(!isSafeDocName(s)){json(t,400,{ok:!1,error:`Invalid docName`});return}let g=Re();json(t,200,{ok:!0,docName:s,forwardLinks:B.getForwardLinkEntries(s).map(e=>e.kind===`doc`?{kind:`doc`,docName:e.target,anchor:e.anchor,title:ye(e.target,g),snippet:e.snippet}:{kind:`external`,url:e.url,title:e.label??e.url,snippet:e.snippet})})}catch(e){console.error(`[forward-links]`,e),json(t,500,{ok:!1,error:`Failed to read forward links`})}}async function Lt(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!B){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`),g=s.searchParams.get(`docName`);if(g&&!isSafeDocName(g)){json(t,400,{ok:!1,error:`Invalid docName`});return}let S=s.searchParams.get(`degrees`);if(S&&!g){json(t,400,{ok:!1,error:`docName is required when degrees is provided`});return}let w,E;if(S&&g){let e=Number.parseInt(S,10);if(!Number.isFinite(e)||e<0){json(t,400,{ok:!1,error:`degrees must be a non-negative integer`});return}({nodes:w,links:E}=B.getLinkGraphNeighborhood(g,e))}else ({nodes:w,links:E}=B.getLinkGraph());let D=Re();json(t,200,{ok:!0,nodes:w.map(e=>{if(e.kind===`doc`){let t=Te(e.docName,D);return{id:e.id,kind:`doc`,docName:e.docName,anchor:e.anchor??null,label:ye(e.docName,D),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:E})}catch(e){console.error(`[link-graph]`,e),json(t,500,{ok:!1,error:`Failed to read link graph`})}}async function Rt(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!B){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.get(`mode`)??`both`;if(!isOrphanMode(s)){json(t,400,{ok:!1,error:`Invalid orphan mode. Allowed values: incoming, outgoing, both`});return}json(t,200,{ok:!0,orphans:B.getOrphans([...w().keys()],s).map(e=>({docName:e,title:ve(e)}))})}catch(e){console.error(`[orphans]`,e),json(t,500,{ok:!1,error:`Failed to read orphan pages`})}}async function zt(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!B){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.get(`limit`),g=s?Number.parseInt(s,10):20,S=Number.isFinite(g)&&g>0?g:20,w=Re();json(t,200,{ok:!0,hubs:B.getHubs(S).map(e=>({docName:e.docName,title:ye(e.docName,w),count:e.count}))})}catch(e){console.error(`[hubs]`,e),json(t,500,{ok:!1,error:`Failed to read hub pages`})}}async function Bt(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!B){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.getAll(`sourceDocName`);if(s.some(e=>e.length===0||!isSafeDocName(e))){json(t,400,{ok:!1,error:`Invalid sourceDocName`});return}let g=s.length?[...new Set(s.map(e=>je(e)))]:void 0;json(t,200,{ok:!0,deadLinks:B.getDeadLinks(Re(),g).map(e=>({target:e.target,sources:e.sources.map(e=>({source:e.source,title:ve(e.source),snippet:e.snippet}))}))})}catch(e){console.error(`[dead-links]`,e),json(t,500,{ok:!1,error:`Failed to read dead links`})}}async function Vt(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!H){json(t,503,{ok:!1,error:`Tag index not configured`});return}try{json(t,200,{ok:!0,tags:H.getAllTags()})}catch(e){console.error(`[tags-list]`,e),json(t,500,{ok:!1,error:`Failed to read tags`})}}async function Ht(e,t,s){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!H){json(t,503,{ok:!1,error:`Tag index not configured`});return}let g;try{g=decodeURIComponent(s)}catch{json(t,400,{ok:!1,error:`Invalid tag name encoding`});return}if(!g){json(t,400,{ok:!1,error:`Missing tag name`});return}try{let e=H.getDocsForTagWithMatches(g).map(({docName:e,matchingTags:t})=>({docName:e,title:ve(e),matchingTags:t,snippet:null}));json(t,200,{ok:!0,name:g,docs:e})}catch(e){console.error(`[tags-for-name]`,e),json(t,500,{ok:!1,error:`Failed to read tag membership`})}}async function Ut(t,g){if(t.method!==`POST`){g.writeHead(405),g.end(`Method not allowed`);return}try{let S;try{S=await readBody(t)}catch{json(g,413,{ok:!1,error:`Payload too large`});return}let w;try{w=JSON.parse(S.toString())}catch{json(g,400,{ok:!1,error:`Invalid JSON`});return}if(!w||typeof w!=`object`||Array.isArray(w)){json(g,400,{ok:!1,error:`Body must be a JSON object`});return}let{find:E,replace:D,docName:O,offset:k}=w;if(typeof E!=`string`||E.length===0){json(g,400,{ok:!1,error:`find field required`});return}if(typeof D!=`string`){json(g,400,{ok:!1,error:`replace field required`});return}if(findLooksLikeFrontmatter(E)){agentPatchFmTouchCounter().add(1,{result:`rejected`}),json(g,400,{ok:!1,error:`Frontmatter edits are not supported via edit_document. Frontmatter editing through MCP is currently unavailable; use write_document with position:"replace" to rewrite the document including its YAML block.`});return}let j=Object.hasOwn(w,`offset`),F;if(j){if(typeof k!=`number`||!Number.isInteger(k)||k<0){json(g,400,{ok:!1,error:`offset must be a non-negative integer`});return}F=k}let L=typeof O==`string`&&O.length>0?O:`test-doc`;if(!isSafeDocName(L)){json(g,400,{ok:!1,error:`Invalid docName`});return}let B=je(L);if(isSystemDoc(B)||isConfigDoc(B)){json(g,400,{ok:!1,error:`'${B}' is a reserved document name`});return}let{agentId:H,agentName:q,colorSeed:te,clientName:ne,clientVersion:ae,label:oe}=rt(w),se=normalizeSummary(w.summary);if(se.kind===`invalid`){json(g,400,{ok:!1,error:`summary must be a string`});return}let ce=await s.getSession(B,H,{displayName:q,colorSeed:te,clientName:ne}),ue=new Date().toISOString(),de=!1,fe=!1,me=!1;try{let t=iconFromClientName(ne),s=AGENT_ICON_COLORS[t]??colorFromSeed(te??H);if(Y?.setPresence(H,{displayName:q,icon:t,color:s,currentDoc:B,mode:`writing`,ts:Date.now()}),captureEffect(ce.dc.document.getText(`source`),H,te,ne),ce.dc.document.transact(()=>{let{frontmatter:t,body:s}=stripFrontmatter(ce.dc.document.getText(`source`).toString()),g=prependFrontmatter(t,s),S=F==null?g.indexOf(E):g.slice(F,F+E.length)===E?F:-1;if(S===-1){console.warn(JSON.stringify({event:`agent-patch-find-mismatch`,"doc.name":B,findLength:E.length,replaceLength:D.length,hadOffset:F!=null})),incrementAgentPatchFindMismatches(),F==null?de=!0:fe=!0;return}if(S<t.length){me=!0;return}let{body:w}=stripFrontmatter(g.slice(0,S)+D+g.slice(S+E.length));applyAgentMarkdownWrite(ce.dc.document,w,`replace`,e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:B}:void 0),ce.dc.document.getMap(`agent-flash`).set(H,{agentId:H,timestamp:Date.now(),type:`insert`,description:`Patched (${q}): ${E.slice(0,50)}`})},ce.origin),!de&&!fe&&!me){let{stored:e}=at(se);recordContributor(B,H,q,te,void 0,it({clientName:ne,clientVersion:ae,label:oe}),e),incrementAgentWriteCalls(),vt(se)}}finally{Y?.touchMode(H,`idle`)}if(fe){json(g,409,{ok:!1,error:`Target text no longer matches at the requested offset`});return}if(de){json(g,404,{ok:!1,error:`Text not found in document`});return}if(me){agentPatchFmTouchCounter().add(1,{result:`rejected`}),json(g,400,{ok:!1,error:`Frontmatter edits are not supported via edit_document. Frontmatter editing through MCP is currently unavailable; use write_document with position:"replace" to rewrite the document including its YAML block.`});return}Ie(B,`agent-patch`),J?.setFocus(H,{agentName:q,currentDoc:B,writeKind:`edit`,ts:Date.now()}),ee?.();let ge=Me(B),_e=Pe();_e===0&&hintEmittedCounter().add(1,{"shadow.writer":`agent`,"agent.type":resolveAgentType(ne)});let{response:ve}=at(se);json(g,200,{ok:!0,timestamp:ue,subscriberCount:ge,systemSubscriberCount:_e,...ve?{summary:ve}:{}})}catch(e){if(e instanceof AgentSessionCapacityError){log$2.warn({err:e},`[agent-patch] session capacity exhausted`),json(g,503,{ok:!1,error:`too-many-agent-sessions`});return}log$2.error({err:e},`[agent-patch] handler failed`),json(g,500,{ok:!1,error:`Internal server error`})}}async function Wt(t,g){if(t.method!==`POST`){g.writeHead(405),g.end(`Method not allowed`);return}try{let S;try{S=await readBody(t)}catch{json(g,413,{ok:!1,error:`Payload too large`});return}let w;try{w=S.length>0?JSON.parse(S.toString()):{}}catch{json(g,400,{ok:!1,error:`Invalid JSON`});return}let{agentId:E,agentName:D,colorSeed:O,clientName:k,clientVersion:j,label:F}=rt(w),L=typeof w.docName==`string`&&w.docName.length>0?w.docName:`test-doc`;if(!isSafeDocName(L)){json(g,400,{ok:!1,error:`Invalid docName`});return}let B=je(L);if(isSystemDoc(B)||isConfigDoc(B)){json(g,400,{ok:!1,error:`'${B}' is a reserved document name`});return}let H=typeof w.connectionId==`string`?w.connectionId:void 0;if(!H){json(g,400,{ok:!1,error:`connectionId required`});return}let q=w.scope,ee=q===`session`||q===`file`?`session`:`last`;if(!s.hasSession(B,H)){json(g,404,{ok:!1,error:`No active session for this connectionId and docName`});return}let te=await s.getSession(B,H),ne=!1;try{let t=iconFromClientName(k),s=AGENT_ICON_COLORS[t]??colorFromSeed(O??E);Y?.setPresence(E,{displayName:D,icon:t,color:s,currentDoc:B,mode:`writing`,ts:Date.now()}),ne=applyAgentUndo(te,ee,e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:B}:void 0),ne&&recordContributor(B,H,D,O,void 0,it({clientName:k,clientVersion:j,label:F}))}finally{Y?.touchMode(E,`idle`)}ne&&Ie(B,`agent-undo`),J?.setFocus(H,{agentName:H,currentDoc:B,writeKind:`undo`,ts:Date.now()}),json(g,200,{ok:!0,docName:B,scope:ee,undone:ne})}catch(e){log$2.error({err:e},`[agent-undo] handler failed`),json(g,500,{ok:!1,error:`Internal server error`})}}async function Kt(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}try{let g=validateAgentId(new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`agentId`));if(g===null){json(t,400,{ok:!1,error:`agentId required (alphanumeric/_/- only)`});return}json(t,200,{ok:!0,...listAgentActivity(s,g)})}catch(e){log$2.error({err:e},`[agent-activity] handler failed`),json(t,500,{ok:!1,error:`Internal server error`})}}async function $t(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}try{let g=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),S=validateAgentId(g.searchParams.get(`agentId`)),w=g.searchParams.get(`docName`),E=g.searchParams.get(`stackIndex`);if(S===null){json(t,400,{ok:!1,error:`agentId required (alphanumeric/_/- only)`});return}if(!w||w.trim()===``){json(t,400,{ok:!1,error:`docName required`});return}if(!isSafeDocName(w)){json(t,400,{ok:!1,error:`Invalid docName`});return}let D=je(w);if(isSystemDoc(D)||isConfigDoc(D)){json(t,400,{ok:!1,error:`'${D}' is a reserved document name`});return}if(!E||Number.isNaN(Number(E))){json(t,400,{ok:!1,error:`stackIndex must be a number`});return}let O=Number(E);if(!Number.isInteger(O)||O<0){json(t,400,{ok:!1,error:`stackIndex must be a non-negative integer`});return}let k=s.getLiveSession(D,S);if(!k){json(t,404,{ok:!1,error:`No active session for this agentId and docName`});return}let j=k.um;if(O>=j.undoStack.length){json(t,404,{ok:!1,error:`stackIndex ${O} out of range (stack has ${j.undoStack.length} items)`});return}let F=j.undoStack[O];json(t,200,{ok:!0,diff:synthesizeStackItemDiffText(F,k.dc.document.getText(`source`),D),generatedAt:Date.now()})}catch(e){log$2.error({err:e},`[agent-burst-diff] handler failed`),json(t,500,{ok:!1,error:`Internal server error`})}}async function en(e,S){if(e.method!==`POST`){S.writeHead(405),S.end(`Method not allowed`);return}try{let w=je(new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`docName`)??`test-doc`),E;try{E=safeContentPath(w,g)}catch(e){console.error(`[test-reset] safeContentPath rejected docName:`,w,e),json(S,400,{ok:!1,error:`Invalid docName`});return}await s.closeAll(w),t.closeConnections(w);let D=`onStoreDocument-${w}`;t.debouncer.isDebounced(D)&&await t.debouncer.executeNow(D);let O=t.documents.get(w);O&&await(ue??t.unloadDocument.bind(t))(O),writeFileSync(E,``,`utf-8`),B&&(B.deleteDocument(w),B.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist cache after test-reset for ${w}:`,e)}),q?.(`backlinks`),q?.(`graph`)),q?.(`files`),json(S,200,{ok:!0})}catch(e){console.error(`[test-reset]`,e),json(S,500,{ok:!1,error:`Internal server error`})}}async function jr(e,t){if(e.method!==`POST`){t.writeHead(405),t.end(`Method not allowed`);return}try{if(!B){json(t,503,{ok:!1,error:`Backlink index not configured`});return}await B.rebuildFromDisk(),B.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist cache after test-rescan-backlinks:`,e)}),q?.(`backlinks`),q?.(`graph`),json(t,200,{ok:!0})}catch(e){console.error(`[test-rescan-backlinks]`,e),json(t,500,{ok:!1,error:`Internal server error`})}}async function Mr(e,t){if(e.method!==`POST`){t.writeHead(405),t.end(`Method not allowed`);return}let s=O?.current;if(!s){json(t,400,{ok:!1,error:`Shadow repo not configured`});return}try{let g;try{g=await readBody(e)}catch{json(t,413,{ok:!1,error:`Payload too large`});return}let S=/^[a-zA-Z0-9_-]+$/,w=[],E,D={},O,k;if(g.length>0){let e;try{e=JSON.parse(g.toString())}catch{json(t,400,{ok:!1,error:`Invalid JSON`});return}D=e,typeof e.message==`string`&&e.message.trim()&&(E=e.message.replace(/[\r\n]/g,` `).slice(0,256)),Array.isArray(e.writers)&&(w=e.writers.map(e=>{let t=e.id??`unknown`;if(!S.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,``)}}));let s=e.principal;if(s&&typeof s==`object`&&!Array.isArray(s)){let e=s;typeof e.name==`string`&&e.name.trim()&&(O=sanitizeGitIdentity(e.name.trim())),typeof e.email==`string`&&e.email.trim()&&(k=sanitizeGitIdentity(e.email.trim()))}}let{rawAgentId:j,agentId:F,agentName:B,clientName:H}=rt(D);w.length===0&&(w=j===void 0?[SERVICE_WRITER]:[{id:F,name:H?`${B} (${H})`:B,email:`${F}@openknowledge.local`}]);let q=L??`.`,J=await saveVersion(s,q,w);console.log(`[history] checkpoint ${J.checkpointRef}`);let Y=swapContributors(),ee;if(ae){let e=!1;try{await esm_default({baseDir:ae,timeout:{block:5e3}}).revparse([`--git-dir`]),e=!0}catch(e){console.warn(`[save-version] parent-git unavailable: ${e instanceof Error?e.message:String(e)}`)}if(e)try{ee=await withParentLock(async()=>{let e=esm_default({baseDir:ae,timeout:{block:15e3}}),t=(await e.tags([`--list`,`ok/v*`])).all.length+1,s=`ok/v${t}`,g=`openknowledge`,S=`noreply@openknowledge.local`;if(O&&k)g=O,S=k;else try{let e=await resolveGitIdentity(ae);e&&(g=e.name,S=e.email)}catch{}let w=[];for(let e of Y.values())if(e.writerId.startsWith(`agent-`)||e.writerId.startsWith(`principal-`)){let t=`${e.writerId}@openknowledge.local`;w.push(`Co-Authored-By: ${e.displayName} <${t}>`)}let D=formatCheckpointSubject(E??`Checkpoint v${t}`),j=w.length>0?`${D}\n\n${w.join(`
944
- `)}`:D,F=q||`.`;return await e.add(F),await e.env({GIT_AUTHOR_NAME:g,GIT_AUTHOR_EMAIL:S,GIT_COMMITTER_NAME:g,GIT_COMMITTER_EMAIL:S}).commit(j,[`--allow-empty`]),await e.addTag(s),console.log(`[checkpoint] parent-git commit + tag ${s}`),s})}catch(e){console.warn(`[checkpoint] parent-git commit failed (non-fatal):`,e)}}json(t,200,{ok:!0,checkpointRef:J.checkpointRef,...ee?{versionTag:ee}:{}})}catch(e){console.error(`[save-version]`,e),json(t,500,{ok:!1,error:`Internal server error`})}}async function Fr(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}let s=O?.current;if(!s){json(t,400,{ok:!1,error:`Shadow repo not configured`});return}let g=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),S=g.searchParams.get(`docName`)??``,w=g.searchParams.get(`branch`)??j?.()??`main`;if(!S){json(t,400,{ok:!1,error:`docName query parameter is required`});return}if(w.includes(`..`)||!/^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/.test(w)){json(t,400,{ok:!1,error:`Invalid branch name`});return}let E=L??`.`,D=safeDocPath(S,E);if(`error`in D){json(t,400,{ok:!1,error:D.error});return}let k=Number(g.searchParams.get(`limit`)??`50`),F=Number(g.searchParams.get(`offset`)??`0`),B=Math.min(200,Number.isFinite(k)?k:50),H=Number.isFinite(F)?F:0,q=g.searchParams.get(`type`)??void 0,J=g.searchParams.get(`author`)??void 0,Y=g.searchParams.get(`excludeAuthor`)??void 0,ee=Date.now();try{let e=await getDocumentHistory(s,{docName:S,branch:w,limit:B,offset:H,type:q,author:J,excludeAuthor:Y},E),g=Date.now()-ee;console.log(`[timeline] query docName=${S} entries=${e.entries.length} duration=${g}ms`),json(t,200,{ok:!0,...e})}catch(e){console.error(`[shadow]`,e),json(t,500,{ok:!1,error:e instanceof Error?e.message:String(e)})}}async function Ir(e,t,s){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}let g=O?.current;if(!g){json(t,400,{ok:!1,error:`Shadow repo not configured`});return}let S=safeDocPath(new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`docName`)??``,L??`.`);if(`error`in S){json(t,400,{ok:!1,error:S.error});return}let w=S.path,E=shadowGit(g);if(!/^[0-9a-f]{40}$/i.test(s)){json(t,400,{ok:!1,error:`Invalid commit SHA`});return}try{try{await E.raw(`cat-file`,`-e`,`${s}:${w}`)}catch{json(t,404,{ok:!1,error:`Document did not exist at this version`});return}let e=await E.raw(`show`,`${s}:${w}`),[g=``,S=``]=(await E.raw(`log`,`-1`,`--format=%aI%x00%an`,s)).trim().split(`\0`);json(t,200,{ok:!0,sha:s,content:e,timestamp:g,author:S})}catch(e){console.error(`[shadow-version]`,e),json(t,500,{ok:!1,error:`Internal server error`})}}async function Lr(e,s){if(e.method!==`GET`){s.writeHead(405),s.end(`Method not allowed`);return}let g=O?.current;if(!g){json(s,400,{ok:!1,error:`Shadow repo not configured`});return}let S=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),w=S.searchParams.get(`docName`)??``,E=S.searchParams.get(`from`)??``,D=S.searchParams.get(`to`)??``;if(!D||!/^[0-9a-f]{40}$/i.test(D)){json(s,400,{ok:!1,error:`'to' must be a valid 40-char commit SHA`});return}let k=safeDocPath(w,L??`.`);if(`error`in k){json(s,400,{ok:!1,error:k.error});return}let j=k.path,F=shadowGit(g);try{let e;try{e=await F.raw(`show`,`${D}:${j}`)}catch{json(s,404,{ok:!1,error:`Document did not exist at the target version`});return}let g;if(E&&/^[0-9a-f]{40}$/i.test(E))try{g=await F.raw(`show`,`${E}:${j}`)}catch{json(s,404,{ok:!1,error:`Document did not exist at the source version`});return}else{let e=t.documents.get(w);if(!e){json(s,409,{ok:!1,error:`Document is not currently open — open it in the editor first`});return}g=e.getText(`source`).toString()}let S=stripFrontmatter(g).body,O=stripFrontmatter(e).body,k=diffLines(S,O),L=[],B=0,H=0;for(let e of k){let t=e.value.replace(/\n$/,``).split(`
945
- `),s=e.added?`added`:e.removed?`removed`:`unchanged`;for(let e of t)L.push({type:s,text:e});e.added&&(B+=t.length),e.removed&&(H+=t.length)}json(s,200,{ok:!0,lines:L,additions:B,deletions:H})}catch(e){console.error(`[diff]`,e),json(s,500,{ok:!1,error:`Internal server error`})}}async function zr(s,g){if(s.method!==`POST`){g.writeHead(405),g.end(`Method not allowed`);return}let S=O?.current;if(!S){json(g,400,{ok:!1,error:`Shadow repo not configured`});return}let w;try{w=await readBody(s)}catch{json(g,413,{ok:!1,error:`Payload too large`});return}let E;try{E=w.length>0?JSON.parse(w.toString()):{}}catch{json(g,400,{ok:!1,error:`Invalid JSON`});return}if(!E||typeof E!=`object`||Array.isArray(E)){json(g,400,{ok:!1,error:`Body must be a JSON object`});return}let D=E,k=extractActorIdentity(D,oe);if(k.kind===`invalid-summary`){json(g,400,{ok:!1,error:`summary must be a string`});return}let{docName:j,commitSha:F,versionTag:B}=D,H=typeof j==`string`?j:``,q=typeof F==`string`?F:``,Y=typeof B==`string`?B:void 0;if(!H){json(g,400,{ok:!1,error:`docName required`});return}if(!q||!/^[0-9a-f]{40}$/i.test(q)){json(g,400,{ok:!1,error:`commitSha must be a valid 40-char commit SHA`});return}let ee=L??`.`,te=safeDocPath(H,ee);if(`error`in te){json(g,400,{ok:!1,error:te.error});return}let ne=te.path,se=shadowGit(S),ce=Date.now();try{try{await se.raw(`cat-file`,`-e`,`${q}:${ne}`)}catch{json(g,404,{ok:!1,error:`Document did not exist at this version`});return}let s=await se.raw(`show`,`${q}:${ne}`),w=new Date().toISOString();await safetyCheckpoint(S,ee,{action:`rollback`,context:{docName:H,targetSha:q}});let E=t.documents.get(H);if(!E){json(g,409,{ok:!1,error:`Document is not currently open — open it in the editor first`});return}let{body:D}=stripFrontmatter(s),O=e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:H}:void 0,j=mdManager.parseWithFallback(D,O),F=schema.nodeFromJSON(j),B=E.getXmlFragment(`default`);E.transact(()=>{updateYFragment(E,B,F,{mapping:new Map,isOMark:new Map});let e=E.getText(`source`),t=e.toString();t!==s&&(e.delete(0,t.length),e.insert(0,s))},ROLLBACK_ORIGIN);let te;switch(k.kind){case`agent`:{let e=q.slice(0,8),t=k.summary.kind===`value`,s=t?k.summary:normalizeSummary(`Restored to ${e}`),g=at(s);te=t||!g.response?g.response:st(g.response),recordContributor(H,k.writerId,k.displayName,k.colorSeed,formatRollbackSubject(H,q),k.actor,g.stored),incrementAgentWriteCalls(),vt(s,!t);break}case`principal`:{let e=at(k.summary);te=e.response,recordContributor(H,k.writerId,k.displayName,k.colorSeed,formatRollbackSubject(H,q),k.actor,e.stored),vt(k.summary,!1);break}case`anonymous`:log$2.debug({docName:H,commitSha:q.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(k.kind)}`)}renameAttributionCounter().add(1,{kind:`rollback`,attribution_kind:k.kind}),Ie(H,`rollback`);let oe=Date.now()-ce;if(console.log(`[rollback] docName=${H} from=${q.slice(0,8)} duration=${oe}ms`),ae){let e=`Restored to ${Y??q.slice(0,8)}: ${H}`,t=L??`.`;withParentLock(async()=>{let s=esm_default({baseDir:ae,timeout:{block:15e3}}),g=t||`.`;await s.add(g),await s.commit(e,{"--allow-empty":null}),console.log(`[rollback] parent-git commit: ${e}`)}).catch(e=>{console.warn(`[rollback] parent-git commit failed (non-fatal):`,e)})}k.kind===`agent`&&J?.setFocus(k.writerId,{agentName:k.displayName,currentDoc:H,writeKind:`rollback-apply`,ts:Date.now()}),json(g,200,{ok:!0,restoredFrom:q,timestamp:w,...te?{summary:te}:{}})}catch(e){console.error(`[rollback]`,e),json(g,500,{ok:!1,error:e instanceof Error?e.message:`Failed to roll back document`})}}async function Br(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}json(t,200,getMetrics())}async function Vr(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}json(t,200,getParseHealth())}async function Hr(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}let s=getActiveBranch(),g=F?.();json(t,200,{ok:!0,serverInstanceId:S,currentBranch:s,...g===void 0?{}:{currentDiskAckSVs:g}},{"Cache-Control":`no-store`})}async function Ur(e,t){if(!isLoopbackAddress(e.socket.remoteAddress)){json(t,403,{ok:!1,error:`loopback-required`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){json(t,403,{ok:!1,error:`host-header-not-allowed`});return}if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}let s=oe?.()??null;if(!s){json(t,404,{error:`Principal not available`});return}json(t,200,s)}async function Wr(e,t){if(!isLoopbackAddress(e.socket.remoteAddress)){json(t,403,{ok:!1,error:`loopback-required`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){json(t,403,{ok:!1,error:`host-header-not-allowed`});return}if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}let s=Y?.getPresenceMap()??{},g=Date.now(),S={};for(let[e,t]of Object.entries(s))g-t.ts<2e4&&(S[e]=t);json(t,200,{presence:S})}async function Gr(e,t){if(!isLoopbackAddress(e.socket.remoteAddress)){json(t,403,{ok:!1,error:`loopback-required`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){json(t,403,{ok:!1,error:`host-header-not-allowed`});return}if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=resolve(g),S=s,w=!0;try{S=realpathSync(s)}catch(e){let g=e?.code;if(g===`ENOENT`)console.warn(`[workspace] contentDir does not exist; returning unresolved path`,{path:s}),w=!1;else{console.warn(`[workspace] realpath failed for contentDir`,{path:s,err:e}),json(t,500,{ok:!1,error:`workspace-realpath-failed`,code:g??null});return}}json(t,200,{ok:!0,contentDir:S,pathSeparator:sep,symlinkResolved:w})}async function Kr(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let s=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`path`);if(!s||s.includes(`\0`)){json(t,400,{ok:!1,error:`Missing asset path`});return}let S=assetContentTypeForPath(s),w=extname(s).slice(1).toLowerCase();if(!S||!ASSET_EXTENSIONS.has(w)){json(t,415,{ok:!1,error:`Unsupported asset type`});return}let E=realpathSync(g),D=resolve(E,s),O;try{O=realpathSync(D)}catch{json(t,404,{ok:!1,error:`Asset not found`});return}if(!isWithinContentDir(O,E)){json(t,400,{ok:!1,error:`Invalid asset path`});return}let k;try{k=statSync(O)}catch{json(t,404,{ok:!1,error:`Asset not found`});return}if(!k.isFile()){json(t,404,{ok:!1,error:`Asset not found`});return}let j=toContentRelativePath(E,O);if(j!==s.split(`\\`).join(`/`)){json(t,400,{ok:!1,error:`Invalid asset path`});return}if(se?.isPathIgnored(j)){json(t,404,{ok:!1,error:`Asset not found`});return}let F={"Content-Type":S,"Content-Length":String(k.size),"X-Content-Type-Options":`nosniff`,"Content-Disposition":INLINE_RENDERABLE_EXTENSIONS.has(w)?`inline`:`attachment`,"Cache-Control":`no-store`};w===`svg`&&(F[`Content-Security-Policy`]=`sandbox; default-src 'none'; style-src 'unsafe-inline'`),t.writeHead(200,F);try{await pipeline(createReadStream(O),t)}catch(e){console.error(`[asset]`,e),t.headersSent?t.destroyed||t.destroy(e instanceof Error?e:void 0):json(t,500,{ok:!1,error:`Failed to read asset`})}}catch(e){console.error(`[asset]`,e),json(t,500,{ok:!1,error:`Internal server error`})}}let qr=1440*60*1e3;async function Jr(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}if(!O?.current){json(t,200,[]);return}let s=Date.now(),g=[],S=resolve(O.current.gitDir,`rescue`);if(existsSync(S))try{let e=readdirSync(S).filter(e=>isSupportedDocFile(e));for(let t of e){let e=resolve(S,t),w=statSync(e);if(s-w.mtimeMs>qr){try{unlinkSync(e)}catch(e){console.debug(`[rescue] cleanup failed (non-critical):`,e)}continue}g.push({docName:stripDocExtension(t),timestamp:w.mtime.toISOString(),size:w.size,source:`flat`})}}catch(e){console.error(`[rescue] Failed to list flat-file rescue buffers:`,e)}try{let e=j?.()??`main`,t=await listRescueCheckpoints(O.current,e);for(let e of t)g.push({...e,source:`timeline`})}catch(e){console.error(`[rescue] Failed to list timeline-ref rescue checkpoints:`,e)}json(t,200,g)}async function Yr(e,t,s){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}if(!O?.current){t.writeHead(404),t.end(`Not found`);return}let g=resolve(O.current.gitDir,`rescue`),S=resolve(g,`${s}${getDocExtension(s)}`);if(!S.startsWith(`${g}/`)){t.writeHead(400),t.end(`Invalid document name`);return}if(existsSync(S)){let e=statSync(S);if(Date.now()-e.mtimeMs>qr)try{unlinkSync(S)}catch{}else{let e=readFileSync(S,`utf-8`);t.writeHead(200,{"Content-Type":`text/markdown`,"X-Content-Type-Options":`nosniff`}),t.end(e);return}}try{let e=j?.()??`main`,g=(await listRescueCheckpoints(O.current,e)).filter(e=>e.docName===s).sort((e,t)=>t.timestamp.localeCompare(e.timestamp))[0];if(g){let e=shadowGit(O.current),s=((await e.raw(`ls-tree`,`-r`,g.sha)).trim().split(`
946
- `)[0]??``).split(/\s+/)[2];if(s){let g=await e.raw(`cat-file`,`-p`,s);t.writeHead(200,{"Content-Type":`text/markdown`,"X-Content-Type-Options":`nosniff`}),t.end(g);return}}}catch(e){console.warn(`[rescue] timeline-ref fallback failed:`,e)}t.writeHead(404),t.end(`Not found`)}async function Xr(e,t){if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let s;try{s=await readBody(e)}catch{json(t,413,{ok:!1,error:`Payload too large`});return}let S;try{S=JSON.parse(s.toString())}catch{json(t,400,{ok:!1,error:`Invalid JSON`});return}if(!S||typeof S!=`object`||Array.isArray(S)){json(t,400,{ok:!1,error:`Body must be a JSON object`});return}let E=extractActorIdentity(S,oe);if(E.kind===`invalid-summary`){json(t,400,{ok:!1,error:`summary must be a string`});return}let{path:D}=S;if(!D||typeof D!=`string`||D.length===0){json(t,400,{ok:!1,error:`path is required`});return}if(!isSupportedDocFile(D)){json(t,400,{ok:!1,error:`path must end with .md or .mdx`});return}if(D.includes(`..`)||D.startsWith(`/`)||D.includes(`\0`)||D.includes(`\\`)){json(t,400,{ok:!1,error:`path must not contain .. or start with /`});return}let O=resolve(g),k=resolve(O,D);if(!k.startsWith(`${O}/`)&&k!==O){json(t,400,{ok:!1,error:`path must not escape content directory`});return}let j=stripDocExtension(D);if(isSystemDoc(j)||isConfigDoc(j)){json(t,400,{ok:!1,error:`'${j}' is a reserved document name`});return}mkdirSync(dirname(k),{recursive:!0});let F=``;try{writeFileSync(k,``,{encoding:`utf-8`,flag:`wx`})}catch(e){if(e.code===`EEXIST`){json(t,409,{ok:!1,error:`File already exists`});return}throw e}let L=stripDocExtension(D);switch(se&&se.incrementMdDir(dirname(L)),registerWrite(k,contentHash(``)),E.kind){case`agent`:case`principal`:recordContributor(L,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 H=typeof w==`function`?w():null;H instanceof Map&&updateFileIndex({kind:`create`,path:k,docName:L,content:``},H),B&&(B.updateDocumentFromMarkdown(L,``),B.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist create-page cache for ${L}:`,e)}),q?.(`backlinks`),q?.(`graph`)),q?.(`files`),json(t,200,{ok:!0,docName:L})}catch(e){console.error(`[create-page]`,e),json(t,500,{ok:!1,error:`Failed to create page`})}}async function Zr(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!s||typeof s!=`string`||s.length===0){json(t,400,{ok:!1,error:`Missing docName parameter`});return}if(!isSafeDocName(s)){json(t,400,{ok:!1,error:`Invalid docName`});return}let g=_e(s);if(!g){json(t,400,{ok:!1,error:`Invalid docName`});return}if(!existsSync(g)){json(t,404,{ok:!1,error:`Page not found`});return}json(t,200,{ok:!0,docName:s,headings:extractHeadings(readFileSync(g,`utf-8`))})}catch(e){console.error(`[page-headings]`,e),json(t,500,{ok:!1,error:`Failed to read headings`})}}async function Qr(e,t){if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let s;try{s=await readBody(e)}catch{json(t,413,{ok:!1,error:`Payload too large`});return}let S;try{S=JSON.parse(s.toString())}catch{json(t,400,{ok:!1,error:`Invalid JSON`});return}if(!S||typeof S!=`object`||Array.isArray(S)){json(t,400,{ok:!1,error:`Body must be a JSON object`});return}let w=S,E=extractActorIdentity(w,oe);if(E.kind===`invalid-summary`){json(t,400,{ok:!1,error:`summary must be a string`});return}let{kind:D,fromPath:O,toPath:k}=w;if(D!==`file`&&D!==`folder`){json(t,400,{ok:!1,error:`kind must be "file" or "folder"`});return}if(typeof O!=`string`||typeof k!=`string`){json(t,400,{ok:!1,error:`fromPath and toPath are required`});return}if(!isValidRelativeContentPath(O)||!isValidRelativeContentPath(k)){json(t,400,{ok:!1,error:`Paths must be relative content paths`});return}if(D===`file`&&(isSystemDoc(O)||isSystemDoc(k)||isConfigDoc(O)||isConfigDoc(k))){json(t,400,{ok:!1,error:`Reserved document names cannot be renamed`});return}if(O===`.ok`||O.startsWith(`.ok/`)||k===`.ok`||k.startsWith(`.ok/`)){json(t,400,{ok:!1,error:`.ok is a reserved directory`});return}if(O===k){json(t,200,{ok:!0,renamed:[],rewrittenDocs:[]});return}if(O.toLowerCase()===k.toLowerCase()){json(t,400,{ok:!1,error:`Case-only renames are not supported`});return}if(D===`file`&&probeAndRegisterSourceFileExtension(g,O),se&&(D===`file`?se.isExcluded(isSupportedDocFile(k)?k:`${k}${getDocExtension(O)}`):se.isDirExcluded(k))){json(t,400,{ok:!1,error:`Destination ${D===`file`?`document`:`folder`} is excluded by the workspace content config`});return}let j;try{j=await nt(O,k,D)}catch(e){if(e instanceof ManagedRenameCollisionError){json(t,409,{ok:!1,error:e.message,colliding:e.colliding});return}throw e}if(j.renamed.length===0){json(t,200,{ok:!0,renamed:[],rewrittenDocs:[]});return}let F;switch(E.kind){case`agent`:{let e=E.summary.kind===`value`,t=e?E.summary:normalizeSummary(`Renamed ${O} → ${k}`),s=at(t);F=e||!s.response?s.response:st(s.response);for(let{fromDocName:e,toDocName:t}of j.renamed)recordContributor(t,E.writerId,E.displayName,E.colorSeed,formatRenameSubject(e,t),E.actor,s.stored);incrementAgentWriteCalls(),vt(t,!e);for(let{toDocName:e}of j.renamed)Ie(e,`rename-path`);break}case`principal`:{let e=at(E.summary);F=e.response;for(let{fromDocName:t,toDocName:s}of j.renamed)recordContributor(s,E.writerId,E.displayName,E.colorSeed,formatRenameSubject(t,s),E.actor,e.stored);vt(E.summary,!1);for(let{toDocName:e}of j.renamed)Ie(e,`rename-path`);break}case`anonymous`:log$2.debug({kind:D,fromPath:O,toPath:k,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)}`)}renameAttributionCounter().add(1,{kind:`rename-${D}`,attribution_kind:E.kind}),json(t,200,{ok:!0,renamed:j.renamed,rewrittenDocs:j.rewrittenDocs,...F?{summary:F}:{}})}catch(e){console.error(`[rename-path]`,e);let{status:s,error:g}=Ve(e);json(t,s,{ok:!1,error:g})}}async function ji(e,t){if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let s;try{s=await readBody(e)}catch{json(t,413,{ok:!1,error:`Payload too large`});return}let S;try{S=JSON.parse(s.toString())}catch{json(t,400,{ok:!1,error:`Invalid JSON`});return}if(!S||typeof S!=`object`||Array.isArray(S)){json(t,400,{ok:!1,error:`Body must be a JSON object`});return}rt(S);let{kind:E,path:D}=S;if(E!==`file`&&E!==`folder`){json(t,400,{ok:!1,error:`kind must be "file" or "folder"`});return}if(typeof D!=`string`||!isValidRelativeContentPath(D)){json(t,400,{ok:!1,error:`path must be a relative content path`});return}let O=resolveContentEntryPath(g,E,D);if(!existsSync(O)){json(t,404,{ok:!1,error:`${E} does not exist`});return}let k=statSync(O);if(E===`file`&&!k.isFile()||E===`folder`&&!k.isDirectory()){json(t,400,{ok:!1,error:`Target path is not a ${E}`});return}let j=E===`file`?[D]:listAffectedDocNames(w(),E,D);await Ue(j),E===`file`?unlinkSync(O):rmSync(O,{recursive:!0,force:!1}),json(t,200,{ok:!0,deletedDocNames:j})}catch(e){console.error(`[delete-path]`,e),json(t,500,{ok:!1,error:`Failed to delete path`})}}async function Hi(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let e=w(),s=[];for(let[t,S]of e){let e=t,w=getDocExtension(t);try{e=extractPageTitle(readFileSync(resolve(g,`${t}${w}`),`utf-8`),t)}catch(e){console.warn(`[pages] Failed to read title for ${t}:`,e)}s.push({docName:t,title:e,docExt:w,size:S.size,modified:S.modified})}s.sort((e,t)=>e.docName.localeCompare(t.docName)),json(t,200,{ok:!0,pages:s})}catch(e){console.error(`[pages]`,e),json(t,500,{ok:!1,error:`Failed to list pages`})}}function Ui(e,t,s=`path`){let S=e.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``);if(S.split(`/`).some(e=>e===`..`)||e.startsWith(`/`))return json(t,400,{ok:!1,error:`Invalid ${s}: must be project-root-relative`}),null;let w=resolve(g),E=S===``?w:resolve(w,S);return E!==w&&!E.startsWith(`${w}${sep}`)?(json(t,400,{ok:!1,error:`Path escapes content directory`}),null):{folderRel:S,resolvedContentDir:w}}let Gi=/^[A-Za-z0-9_-]+$/;function Ki(e,t){return!e||!Gi.test(e)?(json(t,400,{ok:!1,error:"Invalid name: must be letters / digits / `_` / `-` only (no `.md` extension)."}),!1):!0}function Yi(e){let t={};if(!e||typeof e!=`object`||Array.isArray(e))return t;for(let[s,g]of Object.entries(e))g!==void 0&&(t[s]=g);return t}async function Xi(e,t){if(e.method===`GET`)return Zi(e,t);if(e.method===`PUT`)return ka(e,t);json(t,405,{ok:!1,error:`Method not allowed`})}async function Zi(e,t){try{let s=Ui(new URL(e.url??``,`http://localhost`).searchParams.get(`path`)??``,t);if(!s)return;let g=await enrichDirectory(s.folderRel,{projectDir:s.resolvedContentDir}),{sources:S}=resolveNestedFrontmatterWithSources(s.resolvedContentDir,s.folderRel),w=resolve(s.resolvedContentDir,s.folderRel,`.ok`,`frontmatter.yml`),E=null;if(existsSync(w))try{let e=(0,import_dist$1.parse)(await readFile$1(w,`utf-8`));E=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 ${w}: ${t}`),E=null}json(t,200,{ok:!0,folder:g,frontmatter_local:E,frontmatter_sources:S})}catch(e){console.error(`[folder-config:get]`,e),json(t,500,{ok:!1,error:e instanceof Error?e.message:`internal error`})}}async function ka(e,t){try{let s=(await readBody(e)).toString(`utf-8`),g=JSON.parse(s),S=Ui(typeof g.path==`string`?g.path:``,t);if(!S)return;let w=S.folderRel===``?`**`:`${S.folderRel}/**`,E=applyNestedFolderRulesUpsert({projectDir:S.resolvedContentDir,rules:[{match:w,frontmatter:Yi(g.frontmatter)}]});if(!E.ok){json(t,E.error.code===`WRITE_ERROR`||E.error.code===`BAD_PROJECT_DIR`?500:400,{ok:!1,error:{code:E.error.code,message:E.error.message}});return}json(t,200,{ok:!0,applied:E.applied})}catch(e){console.error(`[folder-config:put]`,e),json(t,e instanceof SyntaxError?400:500,{ok:!1,error:e instanceof Error?e.message:`internal error`})}}async function _s(e,t){if(e.method===`GET`)return xs(e,t);if(e.method===`PUT`)return Cs(e,t);if(e.method===`DELETE`)return Ts(e,t);json(t,405,{ok:!1,error:`Method not allowed`})}async function xs(e,t){try{let s=new URL(e.url??``,`http://localhost`),g=s.searchParams.get(`name`)??``;if(!Ki(g,t))return;let S=Ui(s.searchParams.get(`folder`)??``,t,`folder`);if(!S)return;let{folderRel:w,resolvedContentDir:E}=S,D=w===``?[]:w.split(`/`),O=null,k=null,j=null;for(let e=D.length;e>=0;e--){let t=e===0?``:D.slice(0,e).join(`/`),s=t===``?E:resolve(E,t);if(s!==E&&!s.startsWith(`${E}${sep}`))continue;let S=resolve(s,`.ok`,`templates`,`${g}.md`);if(existsSync(S)){O=S,k=t,j=e===D.length?`local`:`inherited`;break}}if(!O||k===null||j===null){json(t,404,{ok:!1,error:`Template "${g}" not found for folder "${w||`.`}". Walked leaf → root.`});return}let F=await readFile$1(O,`utf-8`),L=F.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/),B={},H=F;if(L){try{let e=(0,import_dist$1.parse)(L[1]);e&&typeof e==`object`&&!Array.isArray(e)&&(B=e)}catch{}H=F.slice(L[0].length)}let q=relative(E,O).split(/[\\/]/).filter(Boolean).join(`/`);json(t,200,{ok:!0,template:{name:g,folder:k,scope:j,path:q,frontmatter:B,body:H}})}catch(e){console.error(`[template:get]`,e),json(t,500,{ok:!1,error:e instanceof Error?e.message:`internal error`})}}async function Cs(e,t){try{let s=(await readBody(e)).toString(`utf-8`),g=JSON.parse(s),S=typeof g.name==`string`?g.name:``;if(!Ki(S,t))return;let w=Ui(typeof g.folder==`string`?g.folder:``,t,`folder`);if(!w)return;let E=applyTemplateWrite({projectDir:w.resolvedContentDir,folder:w.folderRel,name:S,body:typeof g.body==`string`?g.body:``,frontmatter:Yi(g.frontmatter)});if(!E.ok){json(t,E.error.code===`WRITE_ERROR`||E.error.code===`BAD_PROJECT_DIR`?500:400,{ok:!1,error:{code:E.error.code,message:E.error.message}});return}json(t,200,{ok:!0,path:E.path,created:E.created,warnings:E.warnings})}catch(e){console.error(`[template:put]`,e),json(t,e instanceof SyntaxError?400:500,{ok:!1,error:e instanceof Error?e.message:`internal error`})}}async function Ts(e,t){try{let s=new URL(e.url??``,`http://localhost`),g=s.searchParams.get(`name`)??``;if(!Ki(g,t))return;let S=Ui(s.searchParams.get(`folder`)??``,t,`folder`);if(!S)return;let w=applyTemplateDelete({projectDir:S.resolvedContentDir,folder:S.folderRel,name:g});if(!w.ok){json(t,w.error.code===`WRITE_ERROR`||w.error.code===`BAD_PROJECT_DIR`?500:400,{ok:!1,error:{code:w.error.code,message:w.error.message}});return}json(t,200,{ok:!0,existed:w.existed,path:w.path})}catch(e){console.error(`[template:delete]`,e),json(t,500,{ok:!1,error:e instanceof Error?e.message:`internal error`})}}function Ds(e){let t=new Map;for(let s of e){let e=s.path.split(`/`).filter(Boolean);e.pop();for(let g=1;g<=e.length;g++){let S=e.slice(0,g).join(`/`);t.set(S,Math.max(t.get(S)??0,s.modifiedTs))}}return[...t.entries()].map(([e,t])=>createWorkspaceSearchDocument({kind:`folder`,path:e,modifiedTs:t}))}function Os(e,t){let s=t.trim().toLowerCase();if(!s||!e)return;let g=e.toLowerCase().indexOf(s);if(g<0)return;let S=Math.max(0,g-80),w=Math.min(e.length,g+s.length+120),E=S>0?`...`:``,D=w<e.length?`...`:``;return`${E}${e.slice(S,w).replace(/\s+/g,` `).trim()}${D}`}function ks(e){return e===`autocomplete`||e===`full_text`||e===`omnibar`?e:`omnibar`}function As(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}class Ns extends Error{constructor(e,t){super(t),this.status=e}}async function Ps(e){if(e.method===`GET`){let t=new URL(e.url??``,`http://localhost`),s=t.searchParams.get(`limit`);return{query:t.searchParams.get(`query`)??``,intent:ks(t.searchParams.get(`intent`)),scopes:As(t.searchParams.get(`scope`)??t.searchParams.get(`scopes`)),limit:s===null?void 0:Number(s)}}let t;try{t=await readBody(e)}catch{throw new Ns(413,`Payload too large`)}let s;try{let e=JSON.parse(t.toString());if(!e||typeof e!=`object`||Array.isArray(e))throw new Ns(400,`Invalid JSON body`);s=e}catch(e){throw e instanceof Ns?e:new Ns(400,`Invalid JSON body`)}return{query:typeof s.query==`string`?s.query:``,intent:ks(s.intent),scopes:As(s.scopes??s.scope),limit:typeof s.limit==`number`?s.limit:Number(s.limit)}}async function Is(){let e=[];for(let[t,s]of w()){if(isSystemDoc(t)||isConfigDoc(t))continue;let g=``,S=t;try{g=await readFile$1(s.canonicalPath,`utf-8`),S=extractPageTitle(g,t)}catch(e){console.warn(`[search] Failed to index ${t}:`,e)}e.push(createWorkspaceSearchDocument({kind:`page`,path:t,title:S,content:g,modifiedTs:Date.parse(s.modified)}))}return[...e,...Ds(e)]}function Rs(){return[...w()].filter(([e])=>!isSystemDoc(e)&&!isConfigDoc(e)).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${e}\u0000${t.modified}\u0000${t.size}\u0000${t.canonicalPath}\u0000${t.inode}\u0000${t.aliases.join(`,`)}`).join(``)}async function $s(){let e=`${g}\u0000${ae??``}`,t=Rs(),s=workspaceSearchCaches.get(e);if(s?.fingerprint===t&&s.corpus)return s.corpus;if(s?.fingerprint===t&&s.pending)return s.pending;let S=Is().then(e=>createWorkspaceSearchCorpus(e));workspaceSearchCaches.set(e,{fingerprint:t,pending:S});try{let s=await S;return workspaceSearchCaches.get(e)?.pending===S&&workspaceSearchCaches.set(e,{fingerprint:t,corpus:s}),s}catch(t){throw workspaceSearchCaches.get(e)?.pending===S&&workspaceSearchCaches.delete(e),t}}function ec(){if(process.env.NODE_ENV!==`test`)for(let e of[0,1e3,3e3])setTimeout(()=>{$s().catch(e=>{console.warn(`[search] Failed to prewarm workspace search cache:`,e)})},e)}ec();async function tc(e,t){if(e.method!==`GET`&&e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let s=performance$1.now(),g=await Ps(e);if(g.query.length>200){json(t,400,{ok:!1,error:`Query is too long`});return}let S=searchWorkspaceCorpus(await $s(),g.query,{intent:g.intent,scopes:g.scopes,limit:g.limit});json(t,200,{ok:!0,query:g.query,intent:g.intent,results:S.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`?Os(e.document.content,g.query):void 0})),elapsedMs:Math.max(0,performance$1.now()-s)})}catch(e){if(e instanceof Ns){json(t,e.status,{ok:!1,error:e.message});return}console.error(`[search]`,e),json(t,500,{ok:!1,error:`Failed to search workspace`})}}async function nc(e,s){if(e.method!==`GET`){json(s,405,{ok:!1,error:`Method not allowed`});return}try{let g=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!g){json(s,400,{ok:!1,error:`Missing docName parameter`});return}if(!isSafeDocName(g)){json(s,400,{ok:!1,error:`Invalid docName`});return}if(isSystemDoc(g)||isConfigDoc(g)){json(s,400,{ok:!1,error:`'${g}' is a reserved document name`});return}json(s,200,{ok:!0,...await suggestLinks({hocuspocus:t,fileIndex:w(),docName:g})})}catch(e){if(e instanceof SuggestLinksTargetNotFoundError){json(s,404,{ok:!1,error:`Page not found`});return}console.error(`[suggest-links]`,e),json(s,500,{ok:!1,error:`Failed to suggest links`})}}async function rc(e,t){if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s;try{s=await readUploadBody(e,g)}catch(e){if(e instanceof UploadWriteError){if(e.reason===`malformed-upload`){json(t,400,{ok:!1,error:`malformed-upload`});return}if(e.reason===`storage-full`){json(t,507,{ok:!1,error:`storage-full`});return}if(e.reason===`storage-readonly`){json(t,500,{ok:!1,error:`storage-readonly`});return}json(t,500,{ok:!1,error:`storage-error`});return}json(t,400,{ok:!1,error:`Failed to parse upload: ${e instanceof Error?e.message:String(e)}`});return}let{filename:S,tempPath:w,sha:E,byteLength:D,parentDocName:O}=s,{agentId:k,agentName:j}=rt(Object.fromEntries(new URL(e.url??``,`http://localhost`).searchParams.entries())),F=()=>{if(existsSync(w))try{unlinkSync(w)}catch{}};if(D===0){F(),json(t,400,{ok:!1,error:`No file received`});return}if(!O){F(),json(t,400,{ok:!1,error:`parentDocName is required`});return}if(O.includes(`\0`)||O.includes(`..`)||O.startsWith(`/`)){F(),json(t,400,{ok:!1,error:`path-escape`});return}let L=resolve(g),B=resolveUploadDestDir(O,`./`,L);if(!isWithinContentDir(B,L)){F(),json(t,400,{ok:!1,error:`path-escape`});return}try{assertNoSymlinkEscape(B,L)}catch(e){if(F(),(e instanceof Error?e.message:String(e)).startsWith(`symlink-escape:`)){json(t,400,{ok:!1,error:`path-escape`});return}log$2.error({err:e,destDir:B},`[upload] failed to validate destination directory`),json(t,500,{ok:!1,error:`storage-error`});return}try{mkdirSync(B,{recursive:!0})}catch(e){if(e.code!==`EEXIST`){F(),log$2.error({err:e,destDir:B},`[upload] failed to create attachment directory`),json(t,500,{ok:!1,error:`storage-error`});return}}try{let e=realpathSync(B),s;try{s=realpathSync(L)}catch{s=L}if(!isWithinContentDir(e,s)){F(),json(t,400,{ok:!1,error:`path-escape`});return}}catch{F(),json(t,400,{ok:!1,error:`path-escape`});return}let H=await fileTypeFromFile(w),q=H?.mime,J=H?.ext;if(!q){let e=readTempFileHead(w,256).toString(`utf-8`).replace(/^/,``).trimStart();(e.startsWith(`<svg`)||e.startsWith(`<?xml`)&&e.includes(`<svg`))&&(q=`image/svg+xml`,J=`svg`)}{let s=await findDuplicateAsset(B,E,D);if(s){F();let S=relative(g,resolve(B,s));log$2.info({event:`upload`,endpoint:e.url??`/api/upload`,agentId:k,agentName:j,dedup:!0,mime:q??null,size:D,destPath:S,httpStatus:200},`[upload] dedup hit`),json(t,200,{ok:!0,src:s,path:S,deduped:!0});return}}let Y;if(!S||S===`upload`||GENERIC_PASTE_NAMES.test(S)){let e=new Date().toISOString().replace(/[-:T]/g,``).slice(0,14).replace(/(\d{8})(\d{6})/,`$1-$2`),t=S?extname(S).slice(1):``,s=J??t??``;Y=s===``?`pasted-${e}`:`pasted-${e}.${s}`}else Y=sanitizeFilename(S);try{let s=linkTempToFinalWithCollisionRetry(w,B,Y),S=relative(g,resolve(B,s));log$2.info({event:`upload`,endpoint:e.url??`/api/upload`,agentId:k,agentName:j,dedup:!1,mime:q??null,size:D,destPath:S,httpStatus:200},`[upload] write ok`),json(t,200,{ok:!0,src:s,path:S,deduped:!1})}catch(s){let g=s instanceof Error?s.message:String(s),S=s instanceof UploadWriteError?s.reason:`unknown`;if(log$2.error({event:`upload`,endpoint:e.url??`/api/upload`,agentId:k,agentName:j,filename:Y,size:D,reason:S,message:g,httpStatus:s instanceof UploadWriteError&&s.reason===`storage-full`?507:500},`[upload] write failed`),s instanceof UploadWriteError){if(s.reason===`storage-full`){json(t,507,{ok:!1,error:`storage-full`});return}if(s.reason===`storage-readonly`){json(t,500,{ok:!1,error:`storage-readonly`});return}if(s.reason===`collision-exhaustion`){json(t,500,{ok:!1,error:`collision-exhaustion`});return}json(t,500,{ok:!1,error:`storage-error`});return}json(t,500,{ok:!1,error:`storage-error`})}}let ic=`/api/local-op/clone`,ac=`/api/local-op/open`,oc=600*1e3,sc=45e3;async function cc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s,g;try{let S=await readBody(e),w=JSON.parse(S.toString());if(typeof w.url!=`string`||!w.url){json(t,400,{ok:!1,error:`Missing or invalid url`});return}if(typeof w.dir!=`string`||!w.dir){json(t,400,{ok:!1,error:`Missing or invalid dir`});return}s=w.url,g=w.dir}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!isAllowedGitUrl(s)){json(t,400,{ok:!1,error:`URL protocol not allowed`});return}if(!isSafeLocalPath(g)){json(t,400,{ok:!1,error:`dir must be within the user home directory`});return}if(!de.tryAcquire(ic)){json(t,429,{ok:!1,error:`A clone operation is already in progress`});return}t.writeHead(200,{"Content-Type":`application/x-ndjson`,"Transfer-Encoding":`chunked`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-cache`});let S=null,w=runCloneSubprocess({cliArgs:ne,url:s,dir:g,timeoutMs:oc,onEvent:e=>{if(e.type===`complete`){S=e.dir;return}e.type===`error`&&e.message&&log$2.warn({stderr:e.message,url:s,dir:g},`[local-op/clone] clone failed`),t.writableEnded||t.write(`${JSON.stringify(e)}\n`)}});(async()=>{try{if(await w.done,S&&!t.writableEnded){let e=await lc(S);t.writableEnded||(`port`in e?t.write(`${JSON.stringify({type:`complete`,port:e.port,dir:S})}\n`):t.write(`${JSON.stringify({type:`error`,message:e.error})}\n`))}}finally{t.writableEnded||t.end(),de.release(ic)}})(),t.on(`close`,()=>{w.cancel()})}async function lc(e){let t=resolve(expandTilde(e)),s=getLocalDir(t),g=readUiLock(s);if(g&&g.port>0)return{port:g.port};let S=readServerLock(s),[w,...E]=ne,D=S&&S.port>0?`ui`:`start`,O=spawn(w,[...E,D],{cwd:t,detached:!0,stdio:[`ignore`,`ignore`,`pipe`],env:{...process.env,OK_LOCK_KIND:`interactive`,OK_PARENT_PID:String(process.pid)}}),k=[];O.stderr?.on(`data`,e=>{k.push(e),log$2.warn({cwd:t,cliCmd:D,msg:e.toString(`utf-8`).trim()},`[local-op/open] child stderr`)});let j=null;O.on(`exit`,e=>{j=e??-1}),O.unref();let F=Date.now()+45e3;for(;Date.now()<F;){await setTimeout$1(500);let e=readUiLock(s);if(e&&e.port>0)return{port:e.port};if(j!==null){let e=Buffer.concat(k).toString(`utf-8`).trim();return{error:`\`ok ${D}\` exited (code ${j})${e?` — ${e}`:``}`}}}let L=Buffer.concat(k).toString(`utf-8`).trim();return{error:`UI did not start within the expected time${L?` — ${L}`:``}`}}async function uc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s;try{let g=await readBody(e),S=JSON.parse(g.toString());if(typeof S.dir!=`string`||!S.dir){json(t,400,{ok:!1,error:`Missing or invalid dir`});return}s=S.dir}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!isSafeLocalPath(s)){json(t,400,{ok:!1,error:`dir must be within the user home directory`});return}if(!de.tryAcquire(ac)){json(t,429,{ok:!1,error:`A server-open operation is already in progress`});return}try{let e=await lc(s);`port`in e?json(t,200,{port:e.port}):json(t,504,{ok:!1,error:e.error})}finally{de.release(ac)}}let dc=`/api/local-op/auth/login`,fc=`/api/local-op/auth/status`,pc=`/api/local-op/auth/repos`,mc=`/api/local-op/auth/signout`,hc=`/api/local-op/auth/pat`;async function gc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=`github.com`;try{let t=await readBody(e),g=JSON.parse(t.toString());typeof g.host==`string`&&g.host&&(s=g.host)}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!de.tryAcquire(dc)){json(t,429,{ok:!1,error:`An auth login operation is already in progress`});return}t.writeHead(200,{"Content-Type":`application/x-ndjson`,"Transfer-Encoding":`chunked`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-cache`});let g=runDeviceFlowSubprocess({cliArgs:ne,host:s,timeoutMs:oc,onEvent:e=>{t.writableEnded||t.write(`${JSON.stringify(e)}\n`)}}),S=()=>{g.cancel()};t.on(`close`,S),g.done.finally(()=>{t.off(`close`,S),t.writableEnded||t.end(),de.release(dc)})}async function _c(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=`github.com`;try{let t=(await readBody(e)).toString().trim();if(t.length>0){let e=JSON.parse(t);typeof e.host==`string`&&e.host&&(s=e.host)}}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!de.tryAcquire(fc)){json(t,429,{ok:!1,error:`An auth status operation is already in progress`});return}try{let[e,...g]=ne,S=[...g,`auth`,`status`,`--json`,`--host`,s],w=(await new Promise((t,s)=>{let g=spawn(e,S,{stdio:[`ignore`,`pipe`,`pipe`],env:{...process.env}}),w=setTimeout(()=>{g.kill(`SIGTERM`)},3e4),E=[];g.stdout.on(`data`,e=>E.push(e)),g.on(`close`,()=>{clearTimeout(w),t(Buffer.concat(E).toString(`utf-8`))}),g.on(`error`,e=>{clearTimeout(w),s(e)})})).split(`
947
- `).map(e=>e.trim()).filter(Boolean),E=null;for(let e=w.length-1;e>=0;e--)try{E=JSON.parse(w[e]);break}catch{}E===null?json(t,200,{authenticated:!1}):json(t,200,E)}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:`auth status failed`})}finally{de.release(fc)}}async function vc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=`github.com`;try{let t=(await readBody(e)).toString().trim();if(t.length>0){let e=JSON.parse(t);typeof e.host==`string`&&e.host&&(s=e.host)}}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!de.tryAcquire(pc)){json(t,429,{ok:!1,error:`An auth repos operation is already in progress`});return}t.writeHead(200,{"Content-Type":`application/x-ndjson`,"Transfer-Encoding":`chunked`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-cache`});let[g,...S]=ne,w=[...S,`auth`,`repos`,`--json`,`--host`,s],E=!1,D=spawn(g,w,{stdio:[`ignore`,`pipe`,`pipe`],env:{...process.env}}),O=setTimeout(()=>{D.kill(`SIGTERM`)},oc);D.stdout.on(`data`,e=>{t.writableEnded||t.write(e)}),D.stderr.on(`data`,e=>{log$2.debug({msg:e.toString(`utf-8`).trim()},`[local-op/auth/repos] stderr`)}),D.on(`close`,e=>{clearTimeout(O),E||(E=!0,e!==0&&!t.writableEnded&&t.write(`${JSON.stringify({type:`error`,message:`auth repos exited with code ${e}`})}\n`),t.end()),de.release(pc)}),D.on(`error`,e=>{clearTimeout(O),E||(E=!0,t.writableEnded||(t.write(`${JSON.stringify({type:`error`,message:e.message})}\n`),t.end())),de.release(pc)})}async function yc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=`github.com`;try{let t=await readBody(e),g=JSON.parse(t.toString());typeof g.host==`string`&&g.host&&(s=g.host)}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!de.tryAcquire(mc)){json(t,429,{ok:!1,error:`An auth signout operation is already in progress`});return}try{let[e,...g]=ne,S=[...g,`auth`,`signout`,`--host`,s];await new Promise((t,s)=>{let g=spawn(e,S,{stdio:`ignore`,env:{...process.env}}),w=setTimeout(()=>{g.kill(`SIGTERM`)},3e4);g.on(`close`,()=>{clearTimeout(w),t()}),g.on(`error`,e=>{clearTimeout(w),s(e)})}),json(t,200,{ok:!0})}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:`auth signout failed`})}finally{de.release(mc)}}async function bc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=`github.com`,g;try{let S=await readBody(e),w=JSON.parse(S.toString());if(typeof w.pat!=`string`||!w.pat){json(t,400,{ok:!1,error:`Missing or invalid pat`});return}g=w.pat,typeof w.host==`string`&&w.host&&(s=w.host)}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!de.tryAcquire(hc)){json(t,429,{ok:!1,error:`An auth pat operation is already in progress`});return}try{let[e,...S]=ne,w=[...S,`auth`,`pat`,`--json`,`--host`,s],E=(await new Promise((t,s)=>{let S=spawn(e,w,{stdio:[`pipe`,`pipe`,`pipe`],env:{...process.env}}),E=setTimeout(()=>{S.kill(`SIGTERM`)},3e4);S.stdin.write(`${g}\n`),S.stdin.end();let D=[];S.stdout.on(`data`,e=>D.push(e)),S.on(`close`,e=>{clearTimeout(E),e===0?t(Buffer.concat(D).toString(`utf-8`)):s(Error(`auth pat exited with code ${e}`))}),S.on(`error`,e=>{clearTimeout(E),s(e)})})).split(`
948
- `).map(e=>e.trim()).filter(Boolean),D=null;for(let e=E.length-1;e>=0;e--)try{D=JSON.parse(E[e]);break}catch{}D===null?json(t,200,{ok:!0}):json(t,200,D)}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:`auth pat failed`})}finally{de.release(hc)}}async function xc(e,t){if(checkLocalOpSecurity(e,t,json)){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!ae){json(t,400,{ok:!1,error:`No project directory configured`});return}try{json(t,200,{ok:!0,identity:await resolveGitIdentity(ae)})}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:`identity resolution failed`})}}}let Sc=`/api/local-op/auth/set-identity`;async function Cc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s,g;try{let S=await readBody(e),w=JSON.parse(S.toString());if(typeof w.name!=`string`||!w.name.trim()){json(t,400,{ok:!1,error:`Missing or invalid name`});return}if(typeof w.email!=`string`||!w.email.trim()){json(t,400,{ok:!1,error:`Missing or invalid email`});return}s=w.name.trim(),g=w.email.trim()}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!ae){json(t,400,{ok:!1,error:`No project directory configured`});return}if(!de.tryAcquire(Sc)){json(t,429,{ok:!1,error:`A set-identity operation is already in progress`});return}try{writeGitIdentity(ae,s,g),te?.()?.refreshIdentity().catch(()=>{}),json(t,200,{ok:!0})}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:`set-identity failed`})}finally{de.release(Sc)}}async function wc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=te?.();if(!s){json(t,200,{state:`dormant`,lastSyncUtc:null,lastFetchUtc:null,lastPushedSha:null,ahead:0,behind:0,consecutiveFailures:0,conflictCount:0,hasRemote:!1,syncEnabled:!1,identityUnresolved:!1});return}json(t,200,s.getStatus())}async function Tc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=te?.();if(!s){json(t,503,{ok:!1,error:`Sync engine not active`});return}let g=`sync`;try{let t=await readBody(e);if(t.length>0){let e=JSON.parse(t.toString());(e.op===`push`||e.op===`pull`||e.op===`sync`)&&(g=e.op)}}catch{}json(t,202,{ok:!0,op:g}),s.trigger(g)}async function Ec(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=te?.();json(t,200,{conflicts:s?s.getConflicts():[]})}async function Dc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=te?.();if(!s){json(t,503,{ok:!1,error:`Sync engine not active`});return}let g;try{let t=await readBody(e);g=JSON.parse(t.toString())}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}let{file:S,strategy:w,content:E}=g;if(!S||typeof S!=`string`){json(t,400,{ok:!1,error:`Missing required field: file`});return}if(w!==`mine`&&w!==`theirs`&&w!==`content`){json(t,400,{ok:!1,error:`Invalid strategy: must be 'mine', 'theirs', or 'content'`});return}try{await s.resolveConflict(S,w,E),json(t,200,{ok:!0})}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:String(e)})}}async function Oc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!ae){json(t,503,{ok:!1,error:`Project repo not configured`});return}let s=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`file`);if(!s){json(t,400,{ok:!1,error:`Missing required query param: file`});return}if(s.includes(`..`)||s.startsWith(`/`)){json(t,400,{ok:!1,error:`Invalid file path`});return}let g=esm_default({baseDir:ae,timeout:{block:15e3}});async function S(e){try{return await g.raw([`show`,`:${e}:${s}`])}catch{return``}}try{let[e,g,w]=await Promise.all([S(1),S(2),S(3)]);json(t,200,{ok:!0,file:s,base:e,ours:g,theirs:w})}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:String(e)})}}async function kc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=new URL(e.url??`/`,`http://localhost`).searchParams.get(`rootDir`)??void 0;try{json(t,200,{ok:!0,plan:await planSeed({projectDir:g,rootDir:s})})}catch(e){if(e instanceof SeedPrerequisiteError){json(t,200,{ok:!1,error:{kind:`prerequisite-missing`,message:e.message}});return}if(e instanceof SeedRootDirError){json(t,200,{ok:!1,error:{kind:`invalid-root`,message:e.message}});return}json(t,500,{ok:!1,error:{kind:`internal`,message:e instanceof Error?e.message:String(e)}})}}async function Ac(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s;try{let g=await readBody(e),S=JSON.parse(g.toString());if(!S.plan||typeof S.plan!=`object`){json(t,400,{ok:!1,error:`Missing or invalid plan`});return}s=S.plan}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}try{json(t,200,{ok:!0,result:await applySeed(s,{projectDir:g})})}catch(e){json(t,500,{ok:!1,error:{kind:`internal`,message:e instanceof Error?e.message:String(e)}})}}async function jc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s={};try{let g=await readBody(e);if(g.length>0){let e=JSON.parse(g.toString());if(typeof e.noOpen==`boolean`&&(s.noOpen=e.noOpen),typeof e.force==`boolean`&&(s.force=e.force),typeof e.out==`string`){if(!isSafeLocalPath(e.out)){json(t,400,{ok:!1,error:`Output path must be within home directory`});return}s.out=e.out}}}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}try{json(t,200,await buildAndOpenSkill(s))}catch(e){json(t,500,{ok:!1,error:{kind:`internal`,message:e instanceof Error?e.message:String(e)}})}}async function Mc(e,t){if(checkLocalOpSecurity(e,t,json)){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{json(t,200,{ok:!0,...await readSkillInstallStateSnapshot(homedir())},{"Cache-Control":`no-store`})}catch(e){json(t,500,{ok:!1,error:{kind:`internal`,message:e instanceof Error?e.message:String(e)}})}}}async function Nc(e,t){if(checkLocalOpSecurity(e,t,json))return handleInstalledAgents(e,t,ge.probeAll)}async function Pc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=te?.();if(!s){json(t,503,{ok:!1,error:`Sync engine not active`});return}try{await s.abortMerge(),json(t,200,{ok:!0})}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:String(e)})}}let Fc={"/api/document":Dt,"/api/documents":jt,"/api/backlinks":Mt,"/api/backlink-counts":Ft,"/api/forward-links":It,"/api/link-graph":Lt,"/api/dead-links":Bt,"/api/orphans":Rt,"/api/hubs":zt,"/api/tags":Vt,"/api/pages":Hi,"/api/folder-config":Xi,"/api/template":_s,"/api/search":tc,"/api/suggest-links":nc,"/api/page-headings":Zr,"/api/create-page":Xr,"/api/rename-path":Qr,"/api/delete-path":ji,"/api/upload":rc,"/api/agent-write":Tt,"/api/agent-write-md":Et,"/api/agent-patch":Ut,"/api/agent-undo":Wt,"/api/agent-activity":Kt,"/api/agent-burst-diff":$t,"/api/save-version":Mr,"/api/history":Fr,"/api/diff":Lr,"/api/rollback":zr,"/api/metrics/reconciliation":Br,"/api/metrics/parse-health":Vr,"/api/metrics/agent-presence":Wr,"/api/server-info":Hr,"/api/principal":Ur,"/api/rescue":Jr,"/api/asset":Kr,"/api/workspace":Gr,"/api/sync/status":wc,"/api/sync/trigger":Tc,"/api/sync/conflicts":Ec,"/api/sync/conflict-content":Oc,"/api/sync/resolve-conflict":Dc,"/api/sync/abort-merge":Pc,"/api/local-op/clone":cc,"/api/local-op/open":uc,"/api/local-op/auth/login":gc,"/api/local-op/auth/status":_c,"/api/local-op/auth/repos":vc,"/api/local-op/auth/signout":yc,"/api/local-op/auth/pat":bc,"/api/local-op/auth/identity":xc,"/api/local-op/auth/set-identity":Cc,"/api/installed-agents":Nc,"/api/install-skill":jc,"/api/skill/install-state":Mc,"/api/seed/plan":kc,"/api/seed/apply":Ac};D&&(Fc[`/api/test-reset`]=en,Fc[`/api/test-rescan-backlinks`]=jr);let Ic=new Set([`/api/upload`,`/api/create-page`,`/api/rename-path`,`/api/delete-path`,`/api/agent-write`,`/api/agent-write-md`,`/api/agent-patch`,`/api/save-version`,`/api/rollback`,`/api/sync/trigger`,`/api/sync/resolve-conflict`,`/api/sync/abort-merge`,`/api/test-reset`,`/api/test-rescan-backlinks`,`/api/install-skill`,`/api/folder-config`,`/api/template`]),Lc=[`/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)){typeof t.setHeader==`function`&&t.setHeader(`Content-Type`,`application/json`),t.writeHead(403),t.end(JSON.stringify({ok:!1,error:`origin-not-allowed`}));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(Ic.has(s)||Lc.some(e=>s.startsWith(e))){let s=e.socket?.remoteAddress;if(s!==void 0&&!isLoopbackAddress(s)){json(t,403,{ok:!1,error:`loopback-required`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){json(t,403,{ok:!1,error:`host-header-not-allowed`});return}}if(!s.startsWith(`/api/`))return;let g=propagation.extract(context.active(),e.headers),S=e.method??`GET`,w=s;s.startsWith(`/api/rescue/`)?w=`/api/rescue/:docName`:s.startsWith(`/api/history/`)?w=`/api/history/:sha`:s.startsWith(`/api/tags/`)&&(w=`/api/tags/:name`);let E=getTracer(),D=Date.now();await context.with(g,()=>E.startActiveSpan(`HTTP ${S} ${w}`,{kind:SpanKind.SERVER,attributes:{[ATTR_HTTP_REQUEST_METHOD]:S,[ATTR_HTTP_ROUTE]:w,[ATTR_URL_PATH]:s,[ATTR_URL_SCHEME]:`http`,[ATTR_USER_AGENT_ORIGINAL]:e.headers[`user-agent`]??``}},async g=>{try{let S=Fc[s];if(S)await S(e,t);else if(s.startsWith(`/api/rescue/`)){let g=decodeURIComponent(s.slice(12));g&&await Yr(e,t,g)}else if(s.startsWith(`/api/history/`)){let g=decodeURIComponent(s.slice(13));g&&await Ir(e,t,g)}else if(s.startsWith(`/api/tags/`)){let g=s.slice(10);g&&await Ht(e,t,g)}let w=t.statusCode;g.setAttribute(ATTR_HTTP_RESPONSE_STATUS_CODE,w),w>=500&&g.setStatus({code:SpanStatusCode.ERROR,message:`status ${w}`})}catch(e){throw g.recordException(e),g.setStatus({code:SpanStatusCode.ERROR,message:e instanceof Error?e.message:String(e)}),e}finally{g.end();let e=(Date.now()-D)/1e3;httpDurationHist().record(e,{[ATTR_HTTP_REQUEST_METHOD]:S,[ATTR_HTTP_ROUTE]:w,[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 g(S){let w;try{w=readdirSync(S,{withFileTypes:!0})}catch(t){let s=errnoCode(t);s!==`ENOENT`&&e.onSkip?.(`read-failed`,s,S);return}for(let E of w){let w=join(S,E.name),D=relative(t,w);if(D.startsWith(`..`)||e.contentFilter?.isDirExcluded(D)&&E.isDirectory())continue;let O;try{O=lstatSync(w)}catch(t){let s=errnoCode(t);s!==`ENOENT`&&e.onSkip?.(`lstat-failed`,s,w);continue}if(O.isSymbolicLink()){let S;try{S=realpathSync(w)}catch(t){let s=errnoCode(t);s!==`ENOENT`&&e.onSkip?.(`realpath-failed`,s,w);continue}if(!isWithinDir(S,t)){e.onSkip?.(`symlink-escape`,void 0,w);continue}let E;try{E=statSync(S)}catch(t){let s=errnoCode(t);s!==`ENOENT`&&e.onSkip?.(`symlink-stat-failed`,s,S);continue}if(s.has(E.ino))continue;s.add(E.ino),E.isDirectory()?g(S):E.isFile()&&isSupportedAssetFile(w,ASSET_EXTENSIONS)&&!e.contentFilter?.isExcluded(D)&&e.basenameIndex.add(D);continue}if(O.isDirectory()){if(s.has(O.ino))continue;s.add(O.ino),g(w);continue}O.isFile()&&isSupportedAssetFile(w,ASSET_EXTENSIONS)&&!e.contentFilter?.isExcluded(D)&&e.basenameIndex.add(D)}}g(t)}const HocuspocusAuthTokenSchema=object$1({principalId:string().optional(),tabSessionId:string().optional(),expectedServerInstanceId:string().optional(),expectedBranch:string().optional()}).loose(),HOCUSPOCUS_AUTH_REJECTION_REASONS=[`server-instance-mismatch`,`branch-mismatch`];function isHocuspocusAuthRejectionReason(e){return HOCUSPOCUS_AUTH_REJECTION_REASONS.includes(e)}var HocuspocusAuthRejection=class extends Error{reason;constructor(e,t){super(t),this.name=`HocuspocusAuthRejection`,this.reason=e}};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 DEFAULT_WARN_BEFORE_MS=300*1e3;function attachIdleShutdown(e){let t=e.scheduler??defaultScheduler,s=e.warnBeforeMs??DEFAULT_WARN_BEFORE_MS,g=0,S=null,w=null,E=!1,D=!1;function O(){S!==null&&(t.clearTimeout(S),S=null),w!==null&&(t.clearTimeout(w),w=null)}function k(){O(),!(D||E)&&g===0&&(s>0&&s<e.thresholdMs&&(w=t.setTimeout(()=>{w=null,g===0&&!E&&e.log?.warn({msUntilShutdown:s,webSocketClientCount:0},`idle shutdown pending: no WebSocket clients`)},e.thresholdMs-s)),S=t.setTimeout(()=>{if(S=null,!(D||E)&&g===0){E=!0,e.log?.info({webSocketClientCount:0},`idle shutdown firing`);try{let t=e.onShutdown();t&&typeof t.then==`function`&&t.catch(t=>{e.log?.error({err:t},`idle shutdown handler rejected`)})}catch(t){e.log?.error({err:t},`idle shutdown handler threw`)}}},e.thresholdMs))}let j=(e,t)=>{e.url?.startsWith(`/collab`)&&(g++,O(),t.once(`close`,()=>{g--,g<0&&(g=0),g===0&&k()}))};return e.httpServer.on(`upgrade`,j),k(),{detach:()=>{D||(D=!0,e.httpServer.off(`upgrade`,j),O())}}}const MCP_SERVER_NAME=`open-knowledge`;function buildInstructions(e){return`# Open Knowledge (OK) — collaborative markdown via MCP
953
+ `)){if(S(e))continue;let t=e.match(/^(#{1,6})\s+(.+)$/);if(t){let e=t[2].trim(),S=getHeadingSlug(e,g);S&&s.push({level:t[1].length,text:e,slug:S})}}return s}function isSafeDocName(e){return!(e.includes(`..`)||e.startsWith(`/`)||e.includes(`\0`)||e.includes(`\\`))}function createApiExtension(e){let{hocuspocus:t,sessionManager:s,contentDir:g,serverInstanceId:S,getFileIndex:w,getAliasMap:E,enableTestRoutes:D=!1,shadowRef:O,flushGitCommit:k,flushContributors:j,getCurrentBranch:F,getDiskAckSVs:L,contentRoot:B,backlinkIndex:H,tagIndex:q,signalChannel:J,agentFocusBroadcaster:Y,agentPresenceBroadcaster:ee,onAgentWrite:te,getSyncEngine:ne,localOpCliArgs:ae=[`open-knowledge`],projectDir:oe,getPrincipal:se,contentFilter:ce,installedAgentsProbe:ue,forceUnloadDocument:de}=e,fe=createConcurrencyGuard(),me=null;function ge(e){return[...e.entries()].map(([e,t])=>`${e}\0${t.canonicalPath}\0${t.size}\0${t.modified}\0${t.aliases.join(`\0`)}`).sort().join(`
954
+ `)}let _e=createInstalledAgentsProbe({probe:ue??createOsProbe(process.platform)});function ve(e){if(!isSafeDocName(e))return null;let t=resolve(g),s=resolve(t,`${e}${getDocExtension(e)}`);return!s.startsWith(`${t}/`)&&s!==t?null:s}function ye(e){let t=ve(e);if(!t||!existsSync(t))return e;try{return extractPageTitle(readFileSync(t,`utf-8`),e)}catch{return e}}function Ce(e,t){return t.has(e)?ye(e):e}let we={cluster:void 0,category:void 0,tags:void 0};function Te(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,g;return Array.isArray(e.tags)?g=e.tags.length>0?e.tags:void 0:typeof e.tags==`string`&&e.tags&&(g=[e.tags]),{cluster:t,category:s,tags:g}}}}catch{}try{let t=ve(e);if(!t||!existsSync(t))return we;let{frontmatter:s}=stripFrontmatter(readFileSync(t,`utf-8`));return s?parseFrontmatterMetadata(s):we}catch{return we}}function De(e,t){return t.has(e)?Te(e):we}function je(e){if(H)try{if(H.getBacklinks(e).length>0)return;let t=performance$1.now(),s=findHubCandidates(e,w()),g=performance$1.now()-t;return g>5&&log$2.debug({docName:e,elapsedMs:g,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 Me(e){return E?.().get(e)??e}function Pe(e){try{return t.documents.get(e)?.connections.size??0}catch{return 0}}function Ie(){try{return t.documents.get(`__system__`)?.connections.size??0}catch{return 0}}function Re(e,s){let g=`onStoreDocument-${e}`;(t.debouncer.isDebounced(g)?t.debouncer.executeNow(g):Promise.resolve()).then(()=>k?.()).catch(e=>{log$2.warn({err:e},`[${s}] post-write flush failed`)})}function ze(){let e=new Set;for(let[t,s]of w()){e.add(t);for(let t of s.aliases)e.add(t)}return e}function Be(){let e=Promise.resolve();return async function(t){let s=e,g=()=>{};e=new Promise(e=>{g=e}),await s;try{return await t()}finally{g()}}}let Ve=Be();function Ue(e){return e instanceof Error?e instanceof ManagedRenameSourceNotFoundError?{status:404,error:e.message}:e instanceof ManagedRenameDestinationExistsError?{status:409,error:e.message}:e instanceof ManagedRenameSourceTypeMismatchError?{status:400,error:e.message}:e.message.startsWith(`Cannot rename missing document:`)||e.message.startsWith(`Cannot snapshot missing document:`)?{status:404,error:e.message}:e.message.startsWith(`symlink-escape:`)?{status:400,error:e.message}:e.message===`Managed rename requires backlink index support`?{status:503,error:e.message}:{status:500,error:`Failed to rename document`}:{status:500,error:`Failed to rename document`}}async function We(e){let g=new Map;for(let s of e){let e=t.documents.get(s);e&&g.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(de??t.unloadDocument.bind(t))(e))}return g}function Ge(e,t){for(let{fromDocName:s,toDocName:S}of e){let e=safeContentPath(S,g),w=t.get(s);typeof w==`string`&&tracedWriteFileSync(e,w,`utf-8`);let E=typeof w==`string`?w:existsSync(e)?readFileSync(e,`utf-8`):null;typeof E==`string`&&registerWrite(e,contentHash(E))}}function Ke(e,t){return e.map(e=>{let s=t.get(e);if(typeof s==`string`)return{docName:e,content:s};let S=safeContentPath(e,g);if(!existsSync(S))throw Error(`Cannot snapshot missing document: ${e}`);return{docName:e,content:readFileSync(S,`utf-8`)}})}function Xe(e){let s=t.documents.get(e);if(s)return s.getText(`source`).toString();let S=resolveContentEntryPath(g,`file`,e);return existsSync(S)?readFileSync(S,`utf-8`):null}function $e(e,t){let s=resolveContentEntryPath(g,`file`,e);tracedMkdirSync(dirname(s),{recursive:!0}),tracedWriteFileSync(s,t,`utf-8`),registerWrite(s,contentHash(t)),setReconciledBase(e,t);let S=w();S instanceof Map&&updateFileIndex({kind:`update`,path:s,docName:e,content:t},S)}function nt(s,g){let S=t.documents.get(s);if(!S)throw Error(`Document is not loaded: ${s}`);let w={markdown:``,rewrites:0};return S.transact(()=>{let t=S.getXmlFragment(`default`),E=S.getText(`source`),D=E.toString();if(w=applyRenameMap(D,s,g),w.rewrites===0)return;let{body:O}=stripFrontmatter(w.markdown),k=e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:s}:void 0,j=mdManager.parseWithFallback(O,k),F=schema.nodeFromJSON(j);applyFastDiff(E,D,w.markdown),updateYFragment(S,t,F,{mapping:new Map,isOMark:new Map})},MANAGED_RENAME_ORIGIN),w}async function rt(e,s,S,E){return Ve(async()=>withSpan(`rename.executeRewrites`,{attributes:{"rename.kind":S}},async D=>{if(!H)throw Error(`Managed rename requires backlink index support`);let k=resolveContentEntryPath(g,S,e),j=resolveContentEntryPath(g,S,s);if(k===j)return{renamed:[],rewrittenDocs:[]};if(!existsSync(k))throw new ManagedRenameSourceNotFoundError(S);if(existsSync(j))throw new ManagedRenameDestinationExistsError;let L=statSync(k);if(S===`file`&&!L.isFile()||S===`folder`&&!L.isDirectory())throw new ManagedRenameSourceTypeMismatchError(S);let B=(S===`file`?[stripDocExtension(e)]:listAffectedDocNames(w(),S,e)).map(t=>({from:t,to:S===`file`?stripDocExtension(s):remapDocNameForRename(t,S,e,s)}));if(D.setAttribute(`rename.affected_docs`,B.length),B.length===0)return{renamed:[],rewrittenDocs:[]};let q=buildRenameMap(B),Y=B.map(({from:e,to:t})=>({fromDocName:e,toDocName:t})),ee=new Set;for(let{from:e}of B)for(let t of H.getBacklinks(e))q.has(t.source)||ee.add(t.source);let te=[...ee].sort((e,t)=>e.localeCompare(t)),ne=new Map,ae=[],se=[];for(let e of[...q.keys(),...te]){if(ne.has(e))continue;if(!q.has(e)&&!existsSync(resolveContentEntryPath(g,`file`,e))){se.push(e);continue}let t=Xe(e);typeof t==`string`?(ne.set(e,t),q.has(e)||ae.push(e)):q.has(e)||se.push(e)}for(let{from:e}of B)if(typeof ne.get(e)!=`string`)throw Error(`Cannot rename missing document: ${e}`);let ce=createManagedRenameRecoveryJournal({fromPath:e,toPath:s,affectedDocs:[...B],snapshots:Ke([...ne.keys()],ne)}),ue=[];return await withManagedRenameRecovery(g,ce,async()=>{for(let e of se)H.deleteDocument(e);for(let e of ae){let s=t.documents.get(e)?nt(e,q):applyRenameMap(ne.get(e)??``,e,q);s.rewrites>0&&($e(e,s.markdown),ue.push({docName:e,rewrites:s.rewrites})),H.updateDocumentFromMarkdown(e,s.markdown)}let D=await We([...q.keys()]),k=resolveContentEntryPath(g,S,e),j=resolveContentEntryPath(g,S,s);if(await renameTrackedPathInGit(oe,k,j)||(tracedMkdirSync(dirname(j),{recursive:!0}),tracedRenameSync(k,j)),process.env.NODE_ENV===`test`&&process.env.OK_TEST_RENAME_FAULT===`pre-append`)throw Error(`OK_TEST_RENAME_FAULT=pre-append`);if(O?.current){let e=O.current;withSpanSync(`rename.appendLog`,{attributes:{"rename.kind":S}},t=>{let s=randomUUID(),g=new Date().toISOString(),w=F?.()??`main`,D=getOrLoadRenameLogIndex(e.gitDir),O=E?.actor?{writerId:E.actor.writerId,displayName:E.actor.displayName}:{writerId:SERVICE_WRITER.id,displayName:SERVICE_WRITER.name},k=0;for(let{from:t,to:j}of B){let F={v:1,from:t,to:j,at:g,commitSha:``,branch:w,groupId:s,kind:S,actor:O};appendRenameLogEntry(e.gitDir,F,D,e),k+=1,E?.actor?recordContributor(j,E.actor.writerId,E.actor.displayName,E.actor.colorSeed,formatRenameSubject(t,j),E.actor.actorMetadata,void 0,[{from:t,to:j}]):recordContributor(j,SERVICE_WRITER.id,SERVICE_WRITER.name,SERVICE_WRITER.id,formatRenameSubject(t,j),void 0,void 0,[{from:t,to:j}])}t.setAttribute(`rename.entries_appended`,k)})}let L=S===`file`&&isSupportedDocFile(s)?extname(s):null;for(let{from:e,to:t}of B){let s=getDocExtension(e);forgetDocExtension(e),registerDocExtension(t,L??s)}let J=[...B].sort((e,t)=>e.from.localeCompare(t.from));for(let{from:e,to:t}of J){let s=resolveContentEntryPath(g,`file`,e),S=resolveContentEntryPath(g,`file`,t),E=applyRenameMap(D.get(e)??ne.get(e)??readFileSync(S,`utf-8`),e,q);Ge([{fromDocName:e,toDocName:t}],new Map([[e,E.markdown]])),setReconciledBase(t,E.markdown);let O=w();O instanceof Map&&updateFileIndex({kind:`rename`,oldPath:s,newPath:S,oldDocName:e,newDocName:t,content:E.markdown},O),H.renameDocument(e,t,E.markdown),E.rewrites>0&&ue.push({docName:t,rewrites:E.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`)}),H.saveToDisk().catch(t=>{console.warn(`[backlinks] Failed to persist managed rename cache for ${e} -> ${s}:`,t)}),J?.(`files`),J?.(`backlinks`),J?.(`graph`),ue.sort((e,t)=>e.docName.localeCompare(t.docName)),D.setAttribute(`rename.rewrite_count`,ue.length),{renamed:Y,rewrittenDocs:ue}}))}function it(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 at(e){return{principalId:se?.()?.id,agentType:resolveAgentType(e.clientName),clientName:e.clientName,clientVersion:e.clientVersion,label:e.label}}function st(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 vt(e){return{value:e.value}}function Tt(e,t=!1){e.kind===`value`&&(incrementSummariesProvided(),e.truncatedFrom!==void 0&&!t&&incrementSummariesTruncated())}async function Et(t,g){if(t.method!==`POST`){g.writeHead(405),g.end(`Method not allowed`);return}try{let S;try{S=await readBody(t)}catch{json(g,413,{ok:!1,error:`Payload too large`});return}let w;try{w=S.length>0?JSON.parse(S.toString()):{}}catch{json(g,400,{ok:!1,error:`Invalid JSON`});return}let E=typeof w.docName==`string`&&w.docName.length>0?w.docName:`test-doc`;if(!isSafeDocName(E)){json(g,400,{ok:!1,error:`Invalid docName`});return}let D=Me(E);if(isSystemDoc(D)||isConfigDoc(D)){json(g,400,{ok:!1,error:`'${D}' is a reserved document name`});return}let{agentId:O,agentName:k,colorSeed:j,clientName:F,clientVersion:L,label:B}=it(w),H=normalizeSummary(w.summary);if(H.kind===`invalid`){json(g,400,{ok:!1,error:`summary must be a string`});return}let q=await s.getSession(D,O,{displayName:k,colorSeed:j,clientName:F}),J=new Date().toISOString(),Y=typeof w.content==`string`?w.content:`Hello from the agent! ${J}`,{response:ne,stored:ae}=st(H);try{let t=iconFromClientName(F),s=AGENT_ICON_COLORS[t]??colorFromSeed(j??O);ee?.setPresence(O,{displayName:k,icon:t,color:s,currentDoc:D,mode:`writing`,ts:Date.now()}),captureEffect(q.dc.document.getText(`source`),O,j,F),q.dc.document.transact(()=>{applyAgentMarkdownWrite(q.dc.document,`${Y}\n`,`append`,e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:D}:void 0),q.dc.document.getMap(`agent-flash`).set(O,{agentId:O,timestamp:Date.now(),type:`insert`,description:`Added (${k}): ${Y.slice(0,50)}`})},q.origin),recordContributor(D,O,k,j,void 0,at({clientName:F,clientVersion:L,label:B}),ae),incrementAgentWriteCalls(),Tt(H)}finally{ee?.touchMode(O,`idle`)}Re(D,`agent-write`),te?.(),json(g,200,{ok:!0,timestamp:J,...ne?{summary:ne}:{}})}catch(e){if(e instanceof AgentSessionCapacityError){log$2.warn({err:e},`[agent-write] session capacity exhausted`),json(g,503,{ok:!1,error:`too-many-agent-sessions`});return}log$2.error({err:e},`[agent-write] handler failed`),json(g,500,{ok:!1,error:`Internal server error`})}}async function Dt(t,g){if(t.method!==`POST`){g.writeHead(405),g.end(`Method not allowed`);return}try{let S;try{S=await readBody(t)}catch{json(g,413,{ok:!1,error:`Payload too large`});return}let w;try{w=JSON.parse(S.toString())}catch{json(g,400,{ok:!1,error:`Invalid JSON`});return}if(!w||typeof w!=`object`||Array.isArray(w)){json(g,400,{ok:!1,error:`Body must be a JSON object`});return}let{markdown:E,position:D}=w;if(!E||typeof E!=`string`){json(g,400,{ok:!1,error:`markdown field required`});return}let O=D===`prepend`?`prepend`:D===`replace`?`replace`:`append`,k=w.docName,j=typeof k==`string`&&k.length>0?k:`test-doc`;if(!isSafeDocName(j)){json(g,400,{ok:!1,error:`Invalid docName`});return}let F=Me(j);if(isSystemDoc(F)||isConfigDoc(F)){json(g,400,{ok:!1,error:`'${F}' is a reserved document name`});return}let{agentId:L,agentName:B,colorSeed:H,clientName:q,clientVersion:J,label:ne}=it(w),ae=normalizeSummary(w.summary);if(ae.kind===`invalid`){json(g,400,{ok:!1,error:`summary must be a string`});return}let{response:oe,stored:se}=st(ae),ce=await s.getSession(F,L,{displayName:B,colorSeed:H,clientName:q}),ue=new Date().toISOString();try{let t=iconFromClientName(q),s=AGENT_ICON_COLORS[t]??colorFromSeed(H??L);ee?.setPresence(L,{displayName:B,icon:t,color:s,currentDoc:F,mode:`writing`,ts:Date.now()}),captureEffect(ce.dc.document.getText(`source`),L,H,q),ce.dc.document.transact(()=>{applyAgentMarkdownWrite(ce.dc.document,E,O,e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:F}:void 0),ce.dc.document.getMap(`agent-flash`).set(L,{agentId:L,timestamp:Date.now(),type:`insert`,description:`Added (${B}): ${E.trim().slice(0,50)}`})},ce.origin),recordContributor(F,L,B,H,void 0,at({clientName:q,clientVersion:J,label:ne}),se),incrementAgentWriteCalls(),Tt(ae)}finally{ee?.touchMode(L,`idle`)}Re(F,`agent-write-md`),Y?.setFocus(L,{agentName:B,currentDoc:F,writeKind:`write`,ts:Date.now()}),te?.();let de=je(F),fe=Pe(F),me=Ie();me===0&&hintEmittedCounter().add(1,{"shadow.writer":`agent`,"agent.type":resolveAgentType(q)}),json(g,200,{ok:!0,timestamp:ue,subscriberCount:fe,systemSubscriberCount:me,...de?{hints:de}:{},...oe?{summary:oe}:{}})}catch(e){if(e instanceof AgentSessionCapacityError){log$2.warn({err:e},`[agent-write-md] session capacity exhausted`),json(g,503,{ok:!1,error:`too-many-agent-sessions`});return}log$2.error({err:e},`[agent-write-md] handler failed`),json(g,500,{ok:!1,error:`Internal server error`})}}async function jt(e,s){if(e.method!==`GET`){s.writeHead(405),s.end(`Method not allowed`);return}try{let S=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`docName`)||`test-doc`;if(!isSafeDocName(S)){json(s,400,{ok:!1,error:`Invalid docName`});return}let w=Me(S);if(isSystemDoc(w)||isConfigDoc(w)){json(s,400,{ok:!1,error:`'${w}' is a reserved document name`});return}let E=t.documents.get(w);if(E){json(s,200,{ok:!0,docName:w,content:E.getText(`source`).toString()});return}if(!existsSync(resolveContentEntryPath(g,`file`,w))){json(s,404,{ok:!1,error:`Document not found: ${w}`});return}let D=await t.openDirectConnection(w);try{let e=D.document;if(!e){json(s,500,{ok:!1,error:`Document not available`});return}json(s,200,{ok:!0,docName:w,content:e.getText(`source`).toString()})}finally{await D.disconnect()}}catch(e){console.error(`[document-read]`,e),json(s,500,{ok:!1,error:`Internal server error`})}}async function Mt(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}try{let s=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`dir`);if(s)try{safeSubdir(g,s)}catch{json(t,400,{ok:!1,error:`Invalid directory parameter`});return}let S=w(),E=[];for(let[e,t]of S){if(s&&!e.startsWith(`${s}/`)&&e!==s)continue;let S=getDocExtension(e);E.push({kind:`document`,docName:e,docExt:S,size:t.size,modified:t.modified,isSymlink:!1,canonicalDocName:null,targetPath:null});for(let w of t.aliases){if(s&&!w.startsWith(`${s}/`)&&w!==s)continue;let D=relative(g,t.canonicalPath);E.push({kind:`document`,docName:w,docExt:S,size:t.size,modified:t.modified,isSymlink:!0,canonicalDocName:e,targetPath:D})}}let D=[];try{let e=ge(S);me?.signature!==e&&(me={signature:e,assets:collectReferencedAssets({contentDir:g,fileIndex:S,readMarkdown:e=>{try{return readFileSync(e,`utf-8`)}catch{return null}},isExcluded:ce?e=>ce.isPathIgnored(e):void 0})}),D=me?.assets??[]}catch(e){me=null,console.warn(`[document-list] asset collection failed; returning documents only:`,e)}for(let e of D)s&&!e.path.startsWith(`${s}/`)&&e.path!==s||E.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});E.sort((e,t)=>e.docName.localeCompare(t.docName)),json(t,200,{ok:!0,documents:E})}catch(e){console.error(`[document-list]`,e),json(t,500,{ok:!1,error:`Internal server error`})}}async function Ft(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!H){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!s){json(t,400,{ok:!1,error:`Missing docName parameter`});return}if(!isSafeDocName(s)){json(t,400,{ok:!1,error:`Invalid docName`});return}json(t,200,{ok:!0,docName:s,backlinks:H.getBacklinks(s).map(e=>({source:e.source,anchor:e.anchor,title:ye(e.source),snippet:e.snippet}))})}catch(e){console.error(`[backlinks]`,e),json(t,500,{ok:!1,error:`Failed to read backlinks`})}}async function It(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!H){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.get(`docNames`);if(!s){json(t,400,{ok:!1,error:`Missing docNames parameter`});return}let g={};for(let e of s.split(`,`)){let t=e.trim();!t||!isSafeDocName(t)||(g[t]=H.getBacklinkCount(t))}json(t,200,{ok:!0,counts:g})}catch(e){console.error(`[backlink-counts]`,e),json(t,500,{ok:!1,error:`Failed to read backlink counts`})}}async function Lt(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!H){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!s){json(t,400,{ok:!1,error:`Missing docName parameter`});return}if(!isSafeDocName(s)){json(t,400,{ok:!1,error:`Invalid docName`});return}let g=ze();json(t,200,{ok:!0,docName:s,forwardLinks:H.getForwardLinkEntries(s).map(e=>e.kind===`doc`?{kind:`doc`,docName:e.target,anchor:e.anchor,title:Ce(e.target,g),snippet:e.snippet}:{kind:`external`,url:e.url,title:e.label??e.url,snippet:e.snippet})})}catch(e){console.error(`[forward-links]`,e),json(t,500,{ok:!1,error:`Failed to read forward links`})}}async function Rt(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!H){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`),g=s.searchParams.get(`docName`);if(g&&!isSafeDocName(g)){json(t,400,{ok:!1,error:`Invalid docName`});return}let S=s.searchParams.get(`degrees`);if(S&&!g){json(t,400,{ok:!1,error:`docName is required when degrees is provided`});return}let w,E;if(S&&g){let e=Number.parseInt(S,10);if(!Number.isFinite(e)||e<0){json(t,400,{ok:!1,error:`degrees must be a non-negative integer`});return}({nodes:w,links:E}=H.getLinkGraphNeighborhood(g,e))}else ({nodes:w,links:E}=H.getLinkGraph());let D=ze();json(t,200,{ok:!0,nodes:w.map(e=>{if(e.kind===`doc`){let t=De(e.docName,D);return{id:e.id,kind:`doc`,docName:e.docName,anchor:e.anchor??null,label:Ce(e.docName,D),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:E})}catch(e){console.error(`[link-graph]`,e),json(t,500,{ok:!1,error:`Failed to read link graph`})}}async function zt(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!H){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.get(`mode`)??`both`;if(!isOrphanMode(s)){json(t,400,{ok:!1,error:`Invalid orphan mode. Allowed values: incoming, outgoing, both`});return}json(t,200,{ok:!0,orphans:H.getOrphans([...w().keys()],s).map(e=>({docName:e,title:ye(e)}))})}catch(e){console.error(`[orphans]`,e),json(t,500,{ok:!1,error:`Failed to read orphan pages`})}}async function Bt(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!H){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.get(`limit`),g=s?Number.parseInt(s,10):20,S=Number.isFinite(g)&&g>0?g:20,w=ze();json(t,200,{ok:!0,hubs:H.getHubs(S).map(e=>({docName:e.docName,title:Ce(e.docName,w),count:e.count}))})}catch(e){console.error(`[hubs]`,e),json(t,500,{ok:!1,error:`Failed to read hub pages`})}}async function Vt(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!H){json(t,503,{ok:!1,error:`Backlink index not configured`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.getAll(`sourceDocName`);if(s.some(e=>e.length===0||!isSafeDocName(e))){json(t,400,{ok:!1,error:`Invalid sourceDocName`});return}let g=s.length?[...new Set(s.map(e=>Me(e)))]:void 0;json(t,200,{ok:!0,deadLinks:H.getDeadLinks(ze(),g).map(e=>({target:e.target,sources:e.sources.map(e=>({source:e.source,title:ye(e.source),snippet:e.snippet}))}))})}catch(e){console.error(`[dead-links]`,e),json(t,500,{ok:!1,error:`Failed to read dead links`})}}async function Ht(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!q){json(t,503,{ok:!1,error:`Tag index not configured`});return}try{json(t,200,{ok:!0,tags:q.getAllTags()})}catch(e){console.error(`[tags-list]`,e),json(t,500,{ok:!1,error:`Failed to read tags`})}}async function Ut(e,t,s){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!q){json(t,503,{ok:!1,error:`Tag index not configured`});return}let g;try{g=decodeURIComponent(s)}catch{json(t,400,{ok:!1,error:`Invalid tag name encoding`});return}if(!g){json(t,400,{ok:!1,error:`Missing tag name`});return}try{let e=q.getDocsForTagWithMatches(g).map(({docName:e,matchingTags:t})=>({docName:e,title:ye(e),matchingTags:t,snippet:null}));json(t,200,{ok:!0,name:g,docs:e})}catch(e){console.error(`[tags-for-name]`,e),json(t,500,{ok:!1,error:`Failed to read tag membership`})}}async function Wt(t,g){if(t.method!==`POST`){g.writeHead(405),g.end(`Method not allowed`);return}try{let S;try{S=await readBody(t)}catch{json(g,413,{ok:!1,error:`Payload too large`});return}let w;try{w=JSON.parse(S.toString())}catch{json(g,400,{ok:!1,error:`Invalid JSON`});return}if(!w||typeof w!=`object`||Array.isArray(w)){json(g,400,{ok:!1,error:`Body must be a JSON object`});return}let{find:E,replace:D,docName:O,offset:k}=w;if(typeof E!=`string`||E.length===0){json(g,400,{ok:!1,error:`find field required`});return}if(typeof D!=`string`){json(g,400,{ok:!1,error:`replace field required`});return}if(findLooksLikeFrontmatter(E)){agentPatchFmTouchCounter().add(1,{result:`rejected`}),json(g,400,{ok:!1,error:`Frontmatter edits are not supported via edit_document. Frontmatter editing through MCP is currently unavailable; use write_document with position:"replace" to rewrite the document including its YAML block.`});return}let j=Object.hasOwn(w,`offset`),F;if(j){if(typeof k!=`number`||!Number.isInteger(k)||k<0){json(g,400,{ok:!1,error:`offset must be a non-negative integer`});return}F=k}let L=typeof O==`string`&&O.length>0?O:`test-doc`;if(!isSafeDocName(L)){json(g,400,{ok:!1,error:`Invalid docName`});return}let B=Me(L);if(isSystemDoc(B)||isConfigDoc(B)){json(g,400,{ok:!1,error:`'${B}' is a reserved document name`});return}let{agentId:H,agentName:q,colorSeed:J,clientName:ne,clientVersion:ae,label:oe}=it(w),se=normalizeSummary(w.summary);if(se.kind===`invalid`){json(g,400,{ok:!1,error:`summary must be a string`});return}let ce=await s.getSession(B,H,{displayName:q,colorSeed:J,clientName:ne}),ue=new Date().toISOString(),de=!1,fe=!1,me=!1;try{let t=iconFromClientName(ne),s=AGENT_ICON_COLORS[t]??colorFromSeed(J??H);if(ee?.setPresence(H,{displayName:q,icon:t,color:s,currentDoc:B,mode:`writing`,ts:Date.now()}),captureEffect(ce.dc.document.getText(`source`),H,J,ne),ce.dc.document.transact(()=>{let{frontmatter:t,body:s}=stripFrontmatter(ce.dc.document.getText(`source`).toString()),g=prependFrontmatter(t,s),S=F==null?g.indexOf(E):g.slice(F,F+E.length)===E?F:-1;if(S===-1){console.warn(JSON.stringify({event:`agent-patch-find-mismatch`,"doc.name":B,findLength:E.length,replaceLength:D.length,hadOffset:F!=null})),incrementAgentPatchFindMismatches(),F==null?de=!0:fe=!0;return}if(S<t.length){me=!0;return}let{body:w}=stripFrontmatter(g.slice(0,S)+D+g.slice(S+E.length));applyAgentMarkdownWrite(ce.dc.document,w,`replace`,e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:B}:void 0),ce.dc.document.getMap(`agent-flash`).set(H,{agentId:H,timestamp:Date.now(),type:`insert`,description:`Patched (${q}): ${E.slice(0,50)}`})},ce.origin),!de&&!fe&&!me){let{stored:e}=st(se);recordContributor(B,H,q,J,void 0,at({clientName:ne,clientVersion:ae,label:oe}),e),incrementAgentWriteCalls(),Tt(se)}}finally{ee?.touchMode(H,`idle`)}if(fe){json(g,409,{ok:!1,error:`Target text no longer matches at the requested offset`});return}if(de){json(g,404,{ok:!1,error:`Text not found in document`});return}if(me){agentPatchFmTouchCounter().add(1,{result:`rejected`}),json(g,400,{ok:!1,error:`Frontmatter edits are not supported via edit_document. Frontmatter editing through MCP is currently unavailable; use write_document with position:"replace" to rewrite the document including its YAML block.`});return}Re(B,`agent-patch`),Y?.setFocus(H,{agentName:q,currentDoc:B,writeKind:`edit`,ts:Date.now()}),te?.();let ge=Pe(B),_e=Ie();_e===0&&hintEmittedCounter().add(1,{"shadow.writer":`agent`,"agent.type":resolveAgentType(ne)});let{response:ve}=st(se);json(g,200,{ok:!0,timestamp:ue,subscriberCount:ge,systemSubscriberCount:_e,...ve?{summary:ve}:{}})}catch(e){if(e instanceof AgentSessionCapacityError){log$2.warn({err:e},`[agent-patch] session capacity exhausted`),json(g,503,{ok:!1,error:`too-many-agent-sessions`});return}log$2.error({err:e},`[agent-patch] handler failed`),json(g,500,{ok:!1,error:`Internal server error`})}}async function Kt(t,g){if(t.method!==`POST`){g.writeHead(405),g.end(`Method not allowed`);return}try{let S;try{S=await readBody(t)}catch{json(g,413,{ok:!1,error:`Payload too large`});return}let w;try{w=S.length>0?JSON.parse(S.toString()):{}}catch{json(g,400,{ok:!1,error:`Invalid JSON`});return}let{agentId:E,agentName:D,colorSeed:O,clientName:k,clientVersion:j,label:F}=it(w),L=typeof w.docName==`string`&&w.docName.length>0?w.docName:`test-doc`;if(!isSafeDocName(L)){json(g,400,{ok:!1,error:`Invalid docName`});return}let B=Me(L);if(isSystemDoc(B)||isConfigDoc(B)){json(g,400,{ok:!1,error:`'${B}' is a reserved document name`});return}let H=typeof w.connectionId==`string`?w.connectionId:void 0;if(!H){json(g,400,{ok:!1,error:`connectionId required`});return}let q=w.scope,J=q===`session`||q===`file`?`session`:`last`;if(!s.hasSession(B,H)){json(g,404,{ok:!1,error:`No active session for this connectionId and docName`});return}let te=await s.getSession(B,H),ne=!1;try{let t=iconFromClientName(k),s=AGENT_ICON_COLORS[t]??colorFromSeed(O??E);ee?.setPresence(E,{displayName:D,icon:t,color:s,currentDoc:B,mode:`writing`,ts:Date.now()}),ne=applyAgentUndo(te,J,e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:B}:void 0),ne&&recordContributor(B,H,D,O,void 0,at({clientName:k,clientVersion:j,label:F}))}finally{ee?.touchMode(E,`idle`)}ne&&Re(B,`agent-undo`),Y?.setFocus(H,{agentName:H,currentDoc:B,writeKind:`undo`,ts:Date.now()}),json(g,200,{ok:!0,docName:B,scope:J,undone:ne})}catch(e){log$2.error({err:e},`[agent-undo] handler failed`),json(g,500,{ok:!1,error:`Internal server error`})}}async function $t(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}try{let g=validateAgentId(new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`agentId`));if(g===null){json(t,400,{ok:!1,error:`agentId required (alphanumeric/_/- only)`});return}json(t,200,{ok:!0,...listAgentActivity(s,g)})}catch(e){log$2.error({err:e},`[agent-activity] handler failed`),json(t,500,{ok:!1,error:`Internal server error`})}}async function en(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}try{let g=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),S=validateAgentId(g.searchParams.get(`agentId`)),w=g.searchParams.get(`docName`),E=g.searchParams.get(`stackIndex`);if(S===null){json(t,400,{ok:!1,error:`agentId required (alphanumeric/_/- only)`});return}if(!w||w.trim()===``){json(t,400,{ok:!1,error:`docName required`});return}if(!isSafeDocName(w)){json(t,400,{ok:!1,error:`Invalid docName`});return}let D=Me(w);if(isSystemDoc(D)||isConfigDoc(D)){json(t,400,{ok:!1,error:`'${D}' is a reserved document name`});return}if(!E||Number.isNaN(Number(E))){json(t,400,{ok:!1,error:`stackIndex must be a number`});return}let O=Number(E);if(!Number.isInteger(O)||O<0){json(t,400,{ok:!1,error:`stackIndex must be a non-negative integer`});return}let k=s.getLiveSession(D,S);if(!k){json(t,404,{ok:!1,error:`No active session for this agentId and docName`});return}let j=k.um;if(O>=j.undoStack.length){json(t,404,{ok:!1,error:`stackIndex ${O} out of range (stack has ${j.undoStack.length} items)`});return}let F=j.undoStack[O];json(t,200,{ok:!0,diff:synthesizeStackItemDiffText(F,k.dc.document.getText(`source`),D),generatedAt:Date.now()})}catch(e){log$2.error({err:e},`[agent-burst-diff] handler failed`),json(t,500,{ok:!1,error:`Internal server error`})}}async function jr(e,S){if(e.method!==`POST`){S.writeHead(405),S.end(`Method not allowed`);return}try{let w=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),E=Me(w.searchParams.get(`docName`)??`test-doc`),D;try{D=safeContentPath(E,g)}catch(e){console.error(`[test-reset] safeContentPath rejected docName:`,E,e),json(S,400,{ok:!1,error:`Invalid docName`});return}await s.closeAll(E),t.closeConnections(E);let O=`onStoreDocument-${E}`;t.debouncer.isDebounced(O)&&await t.debouncer.executeNow(O);let k=t.documents.get(E);if(k&&await(de??t.unloadDocument.bind(t))(k),writeFileSync(D,``,`utf-8`),H&&(H.deleteDocument(E),H.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist cache after test-reset for ${E}:`,e)}),J?.(`backlinks`),J?.(`graph`)),w.searchParams.get(`reset-okignore`)!==`false`)try{let e=resolve(g,`.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`),ce&&await ce.rebuildIgnorePatterns()}catch(e){console.warn(`[test-reset] okignore reset partial failure:`,e)}J?.(`files`),json(S,200,{ok:!0})}catch(e){console.error(`[test-reset]`,e),json(S,500,{ok:!1,error:`Internal server error`})}}async function Mr(e,t){if(e.method!==`POST`){t.writeHead(405),t.end(`Method not allowed`);return}try{if(!H){json(t,503,{ok:!1,error:`Backlink index not configured`});return}await H.rebuildFromDisk(),H.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist cache after test-rescan-backlinks:`,e)}),J?.(`backlinks`),J?.(`graph`),json(t,200,{ok:!0})}catch(e){console.error(`[test-rescan-backlinks]`,e),json(t,500,{ok:!1,error:`Internal server error`})}}async function Fr(e,t){if(e.method!==`POST`){t.writeHead(405),t.end(`Method not allowed`);return}let s=O?.current;if(!s){json(t,400,{ok:!1,error:`Shadow repo not configured`});return}try{let g;try{g=await readBody(e)}catch{json(t,413,{ok:!1,error:`Payload too large`});return}let S=/^[a-zA-Z0-9_-]+$/,w=[],E,D={},O,k;if(g.length>0){let e;try{e=JSON.parse(g.toString())}catch{json(t,400,{ok:!1,error:`Invalid JSON`});return}D=e,typeof e.message==`string`&&e.message.trim()&&(E=e.message.replace(/[\r\n]/g,` `).slice(0,256)),Array.isArray(e.writers)&&(w=e.writers.map(e=>{let t=e.id??`unknown`;if(!S.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,``)}}));let s=e.principal;if(s&&typeof s==`object`&&!Array.isArray(s)){let e=s;typeof e.name==`string`&&e.name.trim()&&(O=sanitizeGitIdentity(e.name.trim())),typeof e.email==`string`&&e.email.trim()&&(k=sanitizeGitIdentity(e.email.trim()))}}let{rawAgentId:j,agentId:F,agentName:L,clientName:H}=it(D);w.length===0&&(w=j===void 0?[SERVICE_WRITER]:[{id:F,name:H?`${L} (${H})`:L,email:`${F}@openknowledge.local`}]);let q=B??`.`,J=await saveVersion(s,q,w);console.log(`[history] checkpoint ${J.checkpointRef}`);try{await gcRenameLog(s,getOrLoadRenameLogIndex(s.gitDir))}catch(e){console.warn(`[rename-log] post-saveVersion GC failed:`,e)}let Y=swapContributors(),ee;if(oe){let e=!1;try{await esm_default({baseDir:oe,timeout:{block:5e3}}).revparse([`--git-dir`]),e=!0}catch(e){console.warn(`[save-version] parent-git unavailable: ${e instanceof Error?e.message:String(e)}`)}if(e)try{ee=await withParentLock(async()=>{let e=esm_default({baseDir:oe,timeout:{block:15e3}}),t=(await e.tags([`--list`,`ok/v*`])).all.length+1,s=`ok/v${t}`,g=`openknowledge`,S=`noreply@openknowledge.local`;if(O&&k)g=O,S=k;else try{let e=await resolveGitIdentity(oe);e&&(g=e.name,S=e.email)}catch{}let w=[];for(let e of Y.values())if(e.writerId.startsWith(`agent-`)||e.writerId.startsWith(`principal-`)){let t=`${e.writerId}@openknowledge.local`;w.push(`Co-Authored-By: ${e.displayName} <${t}>`)}let D=formatCheckpointSubject(E??`Checkpoint v${t}`),j=w.length>0?`${D}\n\n${w.join(`
955
+ `)}`:D,F=q||`.`;return await e.add(F),await e.env({GIT_AUTHOR_NAME:g,GIT_AUTHOR_EMAIL:S,GIT_COMMITTER_NAME:g,GIT_COMMITTER_EMAIL:S}).commit(j,[`--allow-empty`]),await e.addTag(s),console.log(`[checkpoint] parent-git commit + tag ${s}`),s})}catch(e){console.warn(`[checkpoint] parent-git commit failed (non-fatal):`,e)}}json(t,200,{ok:!0,checkpointRef:J.checkpointRef,...ee?{versionTag:ee}:{}})}catch(e){console.error(`[save-version]`,e),json(t,500,{ok:!1,error:`Internal server error`})}}async function Ir(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}let s=O?.current;if(!s){json(t,400,{ok:!1,error:`Shadow repo not configured`});return}let g=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),S=g.searchParams.get(`docName`)??``,w=g.searchParams.get(`branch`)??F?.()??`main`;if(!S){json(t,400,{ok:!1,error:`docName query parameter is required`});return}if(w.includes(`..`)||!/^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/.test(w)){json(t,400,{ok:!1,error:`Invalid branch name`});return}let E=B??`.`,D=safeDocPath(S,E);if(`error`in D){json(t,400,{ok:!1,error:D.error});return}let k=Number(g.searchParams.get(`limit`)??`50`),j=Number(g.searchParams.get(`offset`)??`0`),L=Math.min(200,Number.isFinite(k)?k:50),H=Number.isFinite(j)?j:0,q=g.searchParams.get(`type`)??void 0,J=g.searchParams.get(`author`)??void 0,Y=g.searchParams.get(`excludeAuthor`)??void 0,ee=Date.now();try{let e=await getDocumentHistory(s,{docName:S,branch:w,limit:L,offset:H,type:q,author:J,excludeAuthor:Y},E),g=Date.now()-ee;console.log(`[timeline] query docName=${S} entries=${e.entries.length} duration=${g}ms`),json(t,200,{ok:!0,...e})}catch(e){console.error(`[shadow]`,e),json(t,500,{ok:!1,error:e instanceof Error?e.message:String(e)})}}async function Lr(e,t,s){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}let g=O?.current;if(!g){json(t,400,{ok:!1,error:`Shadow repo not configured`});return}let S=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`docName`)??``,w=B??`.`,E=safeDocPath(S,w);if(`error`in E){json(t,400,{ok:!1,error:E.error});return}let D=shadowGit(g),k=F?.()??`main`;if(!/^[0-9a-f]{40}$/i.test(s)){json(t,400,{ok:!1,error:`Invalid commit SHA`});return}try{let e=await resolveDocPathAtCommit(g,S,s,k,getOrLoadRenameLogIndex(g.gitDir),e=>{let t=safeDocPath(e,w);return`error`in t?`${e}.md`:t.path},createAncestorShaSetCache());if(e===null){json(t,404,{ok:!1,error:`Document did not exist at this version`});return}let E=await D.raw(`show`,`${s}:${e}`),[O=``,j=``]=(await D.raw(`log`,`-1`,`--format=%aI%x00%an`,s)).trim().split(`\0`);json(t,200,{ok:!0,sha:s,content:E,timestamp:O,author:j})}catch(e){console.error(`[shadow-version]`,e),json(t,500,{ok:!1,error:`Internal server error`})}}async function zr(e,s){if(e.method!==`GET`){s.writeHead(405),s.end(`Method not allowed`);return}let g=O?.current;if(!g){json(s,400,{ok:!1,error:`Shadow repo not configured`});return}let S=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`),w=S.searchParams.get(`docName`)??``,E=S.searchParams.get(`from`)??``,D=S.searchParams.get(`to`)??``;if(!D||!/^[0-9a-f]{40}$/i.test(D)){json(s,400,{ok:!1,error:`'to' must be a valid 40-char commit SHA`});return}let k=B??`.`,j=safeDocPath(w,k);if(`error`in j){json(s,400,{ok:!1,error:j.error});return}let L=shadowGit(g),H=F?.()??`main`,q=getOrLoadRenameLogIndex(g.gitDir),J=createAncestorShaSetCache(),Y=e=>{let t=safeDocPath(e,k);return`error`in t?`${e}.md`:t.path};try{let e,S=await resolveDocPathAtCommit(g,w,D,H,q,Y,J);if(S===null){json(s,404,{ok:!1,error:`Document did not exist at the target version`});return}try{e=await L.raw(`show`,`${D}:${S}`)}catch{json(s,404,{ok:!1,error:`Document did not exist at the target version`});return}let O;if(E&&/^[0-9a-f]{40}$/i.test(E)){let e=await resolveDocPathAtCommit(g,w,E,H,q,Y,J);if(e===null){json(s,404,{ok:!1,error:`Document did not exist at the source version`});return}try{O=await L.raw(`show`,`${E}:${e}`)}catch{json(s,404,{ok:!1,error:`Document did not exist at the source version`});return}}else{let e=t.documents.get(w);if(!e){json(s,409,{ok:!1,error:`Document is not currently open — open it in the editor first`});return}O=e.getText(`source`).toString()}let k=stripFrontmatter(O).body,j=stripFrontmatter(e).body,F=diffLines(k,j),B=[],ee=0,te=0;for(let e of F){let t=e.value.replace(/\n$/,``).split(`
956
+ `),s=e.added?`added`:e.removed?`removed`:`unchanged`;for(let e of t)B.push({type:s,text:e});e.added&&(ee+=t.length),e.removed&&(te+=t.length)}json(s,200,{ok:!0,lines:B,additions:ee,deletions:te})}catch(e){console.error(`[diff]`,e),json(s,500,{ok:!1,error:`Internal server error`})}}async function Br(s,g){if(s.method!==`POST`){g.writeHead(405),g.end(`Method not allowed`);return}let S=O?.current;if(!S){json(g,400,{ok:!1,error:`Shadow repo not configured`});return}let w;try{w=await readBody(s)}catch{json(g,413,{ok:!1,error:`Payload too large`});return}let E;try{E=w.length>0?JSON.parse(w.toString()):{}}catch{json(g,400,{ok:!1,error:`Invalid JSON`});return}if(!E||typeof E!=`object`||Array.isArray(E)){json(g,400,{ok:!1,error:`Body must be a JSON object`});return}let D=E,k=extractActorIdentity(D,se);if(k.kind===`invalid-summary`){json(g,400,{ok:!1,error:`summary must be a string`});return}let{docName:j,commitSha:L,versionTag:H}=D,q=typeof j==`string`?j:``,J=typeof L==`string`?L:``,ee=typeof H==`string`?H:void 0;if(!q){json(g,400,{ok:!1,error:`docName required`});return}if(!J||!/^[0-9a-f]{40}$/i.test(J)){json(g,400,{ok:!1,error:`commitSha must be a valid 40-char commit SHA`});return}let te=B??`.`,ne=safeDocPath(q,te);if(`error`in ne){json(g,400,{ok:!1,error:ne.error});return}let ae=shadowGit(S),ce=Date.now();try{let s=getOrLoadRenameLogIndex(S.gitDir),w=createAncestorShaSetCache(),E=await resolveDocPathAtCommit(S,q,J,F?.()??`main`,s,e=>{let t=safeDocPath(e,te);return`error`in t?`${e}.md`:t.path},w);if(E===null){json(g,404,{ok:!1,error:`Commit ${J.slice(0,7)} does not contain document ${q} at any known historical path.`});return}let D=await ae.raw(`show`,`${J}:${E}`),O=new Date().toISOString();await safetyCheckpoint(S,te,{action:`rollback`,context:{docName:q,targetSha:J}});let j=t.documents.get(q);if(!j){json(g,409,{ok:!1,error:`Document is not currently open — open it in the editor first`});return}let{body:L}=stripFrontmatter(D),H=e.resolveEmbed?{resolveEmbed:e.resolveEmbed,sourcePath:q}:void 0,ne=mdManager.parseWithFallback(L,H),se=schema.nodeFromJSON(ne),ue=j.getXmlFragment(`default`);j.transact(()=>{updateYFragment(j,ue,se,{mapping:new Map,isOMark:new Map});let e=j.getText(`source`),t=e.toString();t!==D&&(e.delete(0,t.length),e.insert(0,D))},ROLLBACK_ORIGIN);let de;switch(k.kind){case`agent`:{let e=J.slice(0,8),t=k.summary.kind===`value`,s=t?k.summary:normalizeSummary(`Restored to ${e}`),g=st(s);de=t||!g.response?g.response:vt(g.response),recordContributor(q,k.writerId,k.displayName,k.colorSeed,formatRollbackSubject(q,J),k.actor,g.stored),incrementAgentWriteCalls(),Tt(s,!t);break}case`principal`:{let e=st(k.summary);de=e.response,recordContributor(q,k.writerId,k.displayName,k.colorSeed,formatRollbackSubject(q,J),k.actor,e.stored),Tt(k.summary,!1);break}case`anonymous`:log$2.debug({docName:q,commitSha:J.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(k.kind)}`)}renameAttributionCounter().add(1,{kind:`rollback`,attribution_kind:k.kind}),Re(q,`rollback`);let fe=Date.now()-ce;if(console.log(`[rollback] docName=${q} from=${J.slice(0,8)} duration=${fe}ms`),oe){let e=`Restored to ${ee??J.slice(0,8)}: ${q}`,t=B??`.`;withParentLock(async()=>{let s=esm_default({baseDir:oe,timeout:{block:15e3}}),g=t||`.`;await s.add(g),await s.commit(e,{"--allow-empty":null}),console.log(`[rollback] parent-git commit: ${e}`)}).catch(e=>{console.warn(`[rollback] parent-git commit failed (non-fatal):`,e)})}k.kind===`agent`&&Y?.setFocus(k.writerId,{agentName:k.displayName,currentDoc:q,writeKind:`rollback-apply`,ts:Date.now()}),json(g,200,{ok:!0,restoredFrom:J,timestamp:O,...de?{summary:de}:{}})}catch(e){console.error(`[rollback]`,e),json(g,500,{ok:!1,error:e instanceof Error?e.message:`Failed to roll back document`})}}async function Vr(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}json(t,200,getMetrics())}async function Hr(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}json(t,200,getParseHealth())}async function Ur(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}let s=getActiveBranch(),g=L?.();json(t,200,{ok:!0,serverInstanceId:S,currentBranch:s,...g===void 0?{}:{currentDiskAckSVs:g}},{"Cache-Control":`no-store`})}async function Wr(e,t){if(!isLoopbackAddress(e.socket.remoteAddress)){json(t,403,{ok:!1,error:`loopback-required`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){json(t,403,{ok:!1,error:`host-header-not-allowed`});return}if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}let s=se?.()??null;if(!s){json(t,404,{error:`Principal not available`});return}json(t,200,s)}async function Gr(e,t){if(!isLoopbackAddress(e.socket.remoteAddress)){json(t,403,{ok:!1,error:`loopback-required`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){json(t,403,{ok:!1,error:`host-header-not-allowed`});return}if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}let s=ee?.getPresenceMap()??{},g=Date.now(),S={};for(let[e,t]of Object.entries(s))g-t.ts<2e4&&(S[e]=t);json(t,200,{presence:S})}async function Kr(e,t){if(!isLoopbackAddress(e.socket.remoteAddress)){json(t,403,{ok:!1,error:`loopback-required`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){json(t,403,{ok:!1,error:`host-header-not-allowed`});return}if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=resolve(g),S=s,w=!0;try{S=realpathSync(s)}catch(e){let g=e?.code;if(g===`ENOENT`)console.warn(`[workspace] contentDir does not exist; returning unresolved path`,{path:s}),w=!1;else{console.warn(`[workspace] realpath failed for contentDir`,{path:s,err:e}),json(t,500,{ok:!1,error:`workspace-realpath-failed`,code:g??null});return}}json(t,200,{ok:!0,contentDir:S,pathSeparator:sep,symlinkResolved:w})}async function qr(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let s=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`path`);if(!s||s.includes(`\0`)){json(t,400,{ok:!1,error:`Missing asset path`});return}let S=assetContentTypeForPath(s),w=extname(s).slice(1).toLowerCase();if(!S||!ASSET_EXTENSIONS.has(w)){json(t,415,{ok:!1,error:`Unsupported asset type`});return}let E=realpathSync(g),D=resolve(E,s),O;try{O=realpathSync(D)}catch{json(t,404,{ok:!1,error:`Asset not found`});return}if(!isWithinContentDir(O,E)){json(t,400,{ok:!1,error:`Invalid asset path`});return}let k;try{k=statSync(O)}catch{json(t,404,{ok:!1,error:`Asset not found`});return}if(!k.isFile()){json(t,404,{ok:!1,error:`Asset not found`});return}let j=toContentRelativePath(E,O);if(j!==s.split(`\\`).join(`/`)){json(t,400,{ok:!1,error:`Invalid asset path`});return}if(ce?.isPathIgnored(j)){json(t,404,{ok:!1,error:`Asset not found`});return}let F={"Content-Type":S,"Content-Length":String(k.size),"X-Content-Type-Options":`nosniff`,"Content-Disposition":INLINE_RENDERABLE_EXTENSIONS.has(w)?`inline`:`attachment`,"Cache-Control":`no-store`};w===`svg`&&(F[`Content-Security-Policy`]=`sandbox; default-src 'none'; style-src 'unsafe-inline'`),t.writeHead(200,F);try{await pipeline(createReadStream(O),t)}catch(e){console.error(`[asset]`,e),t.headersSent?t.destroyed||t.destroy(e instanceof Error?e:void 0):json(t,500,{ok:!1,error:`Failed to read asset`})}}catch(e){console.error(`[asset]`,e),json(t,500,{ok:!1,error:`Internal server error`})}}let Jr=1440*60*1e3;async function Yr(e,t){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}if(!O?.current){json(t,200,[]);return}let s=Date.now(),g=[],S=resolve(O.current.gitDir,`rescue`);if(existsSync(S))try{let e=readdirSync(S).filter(e=>isSupportedDocFile(e));for(let t of e){let e=resolve(S,t),w=statSync(e);if(s-w.mtimeMs>Jr){try{unlinkSync(e)}catch(e){console.debug(`[rescue] cleanup failed (non-critical):`,e)}continue}g.push({docName:stripDocExtension(t),timestamp:w.mtime.toISOString(),size:w.size,source:`flat`})}}catch(e){console.error(`[rescue] Failed to list flat-file rescue buffers:`,e)}try{let e=F?.()??`main`,t=await listRescueCheckpoints(O.current,e);for(let e of t)g.push({...e,source:`timeline`})}catch(e){console.error(`[rescue] Failed to list timeline-ref rescue checkpoints:`,e)}json(t,200,g)}async function Xr(e,t,s){if(e.method!==`GET`){t.writeHead(405),t.end(`Method not allowed`);return}if(!O?.current){t.writeHead(404),t.end(`Not found`);return}let g=resolve(O.current.gitDir,`rescue`),S=resolve(g,`${s}${getDocExtension(s)}`);if(!S.startsWith(`${g}/`)){t.writeHead(400),t.end(`Invalid document name`);return}if(existsSync(S)){let e=statSync(S);if(Date.now()-e.mtimeMs>Jr)try{unlinkSync(S)}catch{}else{let e=readFileSync(S,`utf-8`);t.writeHead(200,{"Content-Type":`text/markdown`,"X-Content-Type-Options":`nosniff`}),t.end(e);return}}try{let e=F?.()??`main`,g=(await listRescueCheckpoints(O.current,e)).filter(e=>e.docName===s).sort((e,t)=>t.timestamp.localeCompare(e.timestamp))[0];if(g){let e=shadowGit(O.current),s=((await e.raw(`ls-tree`,`-r`,g.sha)).trim().split(`
957
+ `)[0]??``).split(/\s+/)[2];if(s){let g=await e.raw(`cat-file`,`-p`,s);t.writeHead(200,{"Content-Type":`text/markdown`,"X-Content-Type-Options":`nosniff`}),t.end(g);return}}}catch(e){console.warn(`[rescue] timeline-ref fallback failed:`,e)}t.writeHead(404),t.end(`Not found`)}async function Zr(e,t){if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let s;try{s=await readBody(e)}catch{json(t,413,{ok:!1,error:`Payload too large`});return}let S;try{S=JSON.parse(s.toString())}catch{json(t,400,{ok:!1,error:`Invalid JSON`});return}if(!S||typeof S!=`object`||Array.isArray(S)){json(t,400,{ok:!1,error:`Body must be a JSON object`});return}let E=extractActorIdentity(S,se);if(E.kind===`invalid-summary`){json(t,400,{ok:!1,error:`summary must be a string`});return}let{path:D}=S;if(!D||typeof D!=`string`||D.length===0){json(t,400,{ok:!1,error:`path is required`});return}if(!isSupportedDocFile(D)){json(t,400,{ok:!1,error:`path must end with .md or .mdx`});return}if(D.includes(`..`)||D.startsWith(`/`)||D.includes(`\0`)||D.includes(`\\`)){json(t,400,{ok:!1,error:`path must not contain .. or start with /`});return}let O=resolve(g),k=resolve(O,D);if(!k.startsWith(`${O}/`)&&k!==O){json(t,400,{ok:!1,error:`path must not escape content directory`});return}let j=stripDocExtension(D);if(isSystemDoc(j)||isConfigDoc(j)){json(t,400,{ok:!1,error:`'${j}' is a reserved document name`});return}mkdirSync(dirname(k),{recursive:!0});let F=``;try{writeFileSync(k,``,{encoding:`utf-8`,flag:`wx`})}catch(e){if(e.code===`EEXIST`){json(t,409,{ok:!1,error:`File already exists`});return}throw e}let L=stripDocExtension(D);switch(ce&&ce.incrementMdDir(dirname(L)),registerWrite(k,contentHash(``)),E.kind){case`agent`:case`principal`:recordContributor(L,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 B=typeof w==`function`?w():null;B instanceof Map&&updateFileIndex({kind:`create`,path:k,docName:L,content:``},B),H&&(H.updateDocumentFromMarkdown(L,``),H.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist create-page cache for ${L}:`,e)}),J?.(`backlinks`),J?.(`graph`)),J?.(`files`),json(t,200,{ok:!0,docName:L})}catch(e){console.error(`[create-page]`,e),json(t,500,{ok:!1,error:`Failed to create page`})}}async function Qr(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let s=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!s||typeof s!=`string`||s.length===0){json(t,400,{ok:!1,error:`Missing docName parameter`});return}if(!isSafeDocName(s)){json(t,400,{ok:!1,error:`Invalid docName`});return}let g=ve(s);if(!g){json(t,400,{ok:!1,error:`Invalid docName`});return}if(!existsSync(g)){json(t,404,{ok:!1,error:`Page not found`});return}json(t,200,{ok:!0,docName:s,headings:extractHeadings(readFileSync(g,`utf-8`))})}catch(e){console.error(`[page-headings]`,e),json(t,500,{ok:!1,error:`Failed to read headings`})}}async function ji(e,t){if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let s;try{s=await readBody(e)}catch{json(t,413,{ok:!1,error:`Payload too large`});return}let S;try{S=JSON.parse(s.toString())}catch{json(t,400,{ok:!1,error:`Invalid JSON`});return}if(!S||typeof S!=`object`||Array.isArray(S)){json(t,400,{ok:!1,error:`Body must be a JSON object`});return}let w=S,E=extractActorIdentity(w,se);if(E.kind===`invalid-summary`){json(t,400,{ok:!1,error:`summary must be a string`});return}let{kind:D,fromPath:O,toPath:k}=w;if(D!==`file`&&D!==`folder`){json(t,400,{ok:!1,error:`kind must be "file" or "folder"`});return}if(typeof O!=`string`||typeof k!=`string`){json(t,400,{ok:!1,error:`fromPath and toPath are required`});return}if(!isValidRelativeContentPath(O)||!isValidRelativeContentPath(k)){json(t,400,{ok:!1,error:`Paths must be relative content paths`});return}if(D===`file`&&(isSystemDoc(O)||isSystemDoc(k)||isConfigDoc(O)||isConfigDoc(k))){json(t,400,{ok:!1,error:`Reserved document names cannot be renamed`});return}if(O===`.ok`||O.startsWith(`.ok/`)||k===`.ok`||k.startsWith(`.ok/`)){json(t,400,{ok:!1,error:`.ok is a reserved directory`});return}if(O===k){json(t,200,{ok:!0,renamed:[],rewrittenDocs:[]});return}if(O.toLowerCase()===k.toLowerCase()){json(t,400,{ok:!1,error:`Case-only renames are not supported`});return}if(D===`file`&&probeAndRegisterSourceFileExtension(g,O),ce&&(D===`file`?ce.isExcluded(isSupportedDocFile(k)?k:`${k}${getDocExtension(O)}`):ce.isDirExcluded(k))){json(t,400,{ok:!1,error:`Destination ${D===`file`?`document`:`folder`} is excluded by the workspace content config`});return}let F;try{let e=E.kind===`agent`||E.kind===`principal`?{writerId:E.writerId,displayName:E.displayName,colorSeed:E.colorSeed,actorMetadata:E.actor}:void 0;F=await rt(O,k,D,{...e?{actor:e}:{}})}catch(e){if(e instanceof ManagedRenameCollisionError){json(t,409,{ok:!1,error:e.message,colliding:e.colliding});return}throw e}if(F.renamed.length===0){json(t,200,{ok:!0,renamed:[],rewrittenDocs:[]});return}let L;switch(E.kind){case`agent`:{let e=E.summary.kind===`value`,t=e?E.summary:normalizeSummary(`Renamed ${O} → ${k}`),s=st(t);L=e||!s.response?s.response:vt(s.response);for(let e=0;e<F.renamed.length;e++){let{fromDocName:t,toDocName:g}=F.renamed[e];recordContributor(g,E.writerId,E.displayName,E.colorSeed,formatRenameSubject(t,g),E.actor,e===0?s.stored:void 0)}incrementAgentWriteCalls(),Tt(t,!e);for(let{toDocName:e}of F.renamed)Re(e,`rename-path`);break}case`principal`:{let e=st(E.summary);L=e.response;for(let t=0;t<F.renamed.length;t++){let{fromDocName:s,toDocName:g}=F.renamed[t];recordContributor(g,E.writerId,E.displayName,E.colorSeed,formatRenameSubject(s,g),E.actor,t===0?e.stored:void 0)}Tt(E.summary,!1);for(let{toDocName:e}of F.renamed)Re(e,`rename-path`);break}case`anonymous`:log$2.debug({kind:D,fromPath:O,toPath:k,affectedDocs:F.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-${D}`,attribution_kind:E.kind}),j)try{await j()}catch(e){console.warn(`[rename-log] WARN: post-rename drain failed:`,e)}json(t,200,{ok:!0,renamed:F.renamed,rewrittenDocs:F.rewrittenDocs,...L?{summary:L}:{}})}catch(e){console.error(`[rename-path]`,e);let{status:s,error:g}=Ue(e);json(t,s,{ok:!1,error:g})}}async function Hi(e,t){if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let s;try{s=await readBody(e)}catch{json(t,413,{ok:!1,error:`Payload too large`});return}let S;try{S=JSON.parse(s.toString())}catch{json(t,400,{ok:!1,error:`Invalid JSON`});return}if(!S||typeof S!=`object`||Array.isArray(S)){json(t,400,{ok:!1,error:`Body must be a JSON object`});return}it(S);let{kind:E,path:D}=S;if(E!==`file`&&E!==`folder`){json(t,400,{ok:!1,error:`kind must be "file" or "folder"`});return}if(typeof D!=`string`||!isValidRelativeContentPath(D)){json(t,400,{ok:!1,error:`path must be a relative content path`});return}let O=resolveContentEntryPath(g,E,D);if(!existsSync(O)){json(t,404,{ok:!1,error:`${E} does not exist`});return}let k=statSync(O);if(E===`file`&&!k.isFile()||E===`folder`&&!k.isDirectory()){json(t,400,{ok:!1,error:`Target path is not a ${E}`});return}let j=E===`file`?[D]:listAffectedDocNames(w(),E,D);await We(j),E===`file`?unlinkSync(O):rmSync(O,{recursive:!0,force:!1}),json(t,200,{ok:!0,deletedDocNames:j})}catch(e){console.error(`[delete-path]`,e),json(t,500,{ok:!1,error:`Failed to delete path`})}}async function Ui(e,t){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let e=w(),s=[];for(let[t,S]of e){let e=t,w=getDocExtension(t);try{e=extractPageTitle(readFileSync(resolve(g,`${t}${w}`),`utf-8`),t)}catch(e){console.warn(`[pages] Failed to read title for ${t}:`,e)}s.push({docName:t,title:e,docExt:w,size:S.size,modified:S.modified})}s.sort((e,t)=>e.docName.localeCompare(t.docName)),json(t,200,{ok:!0,pages:s})}catch(e){console.error(`[pages]`,e),json(t,500,{ok:!1,error:`Failed to list pages`})}}function Gi(e,t,s=`path`){let S=e.replace(/^\.\//,``).replace(/^\/+/,``).replace(/\/+$/,``);if(S.split(`/`).some(e=>e===`..`)||e.startsWith(`/`))return json(t,400,{ok:!1,error:`Invalid ${s}: must be project-root-relative`}),null;let w=resolve(g),E=S===``?w:resolve(w,S);return E!==w&&!E.startsWith(`${w}${sep}`)?(json(t,400,{ok:!1,error:`Path escapes content directory`}),null):{folderRel:S,resolvedContentDir:w}}let Ki=/^[A-Za-z0-9_-]+$/;function Yi(e,t){return!e||!Ki.test(e)?(json(t,400,{ok:!1,error:"Invalid name: must be letters / digits / `_` / `-` only (no `.md` extension)."}),!1):!0}function Xi(e){let t={};if(!e||typeof e!=`object`||Array.isArray(e))return t;for(let[s,g]of Object.entries(e))g!==void 0&&(t[s]=g);return t}async function Zi(e,t){if(e.method===`GET`)return ka(e,t);if(e.method===`PUT`)return _s(e,t);json(t,405,{ok:!1,error:`Method not allowed`})}async function ka(e,t){try{let s=Gi(new URL(e.url??``,`http://localhost`).searchParams.get(`path`)??``,t);if(!s)return;let g=await enrichDirectory(s.folderRel,{projectDir:s.resolvedContentDir}),{sources:S}=resolveNestedFrontmatterWithSources(s.resolvedContentDir,s.folderRel),w=resolve(s.resolvedContentDir,s.folderRel,`.ok`,`frontmatter.yml`),E=null;if(existsSync(w))try{let e=(0,import_dist$1.parse)(await readFile$1(w,`utf-8`));E=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 ${w}: ${t}`),E=null}json(t,200,{ok:!0,folder:g,frontmatter_local:E,frontmatter_sources:S})}catch(e){console.error(`[folder-config:get]`,e),json(t,500,{ok:!1,error:e instanceof Error?e.message:`internal error`})}}async function _s(e,t){try{let s=(await readBody(e)).toString(`utf-8`),g=JSON.parse(s),S=Gi(typeof g.path==`string`?g.path:``,t);if(!S)return;let w=S.folderRel===``?`**`:`${S.folderRel}/**`,E=applyNestedFolderRulesUpsert({projectDir:S.resolvedContentDir,rules:[{match:w,frontmatter:Xi(g.frontmatter)}]});if(!E.ok){json(t,E.error.code===`WRITE_ERROR`||E.error.code===`BAD_PROJECT_DIR`?500:400,{ok:!1,error:{code:E.error.code,message:E.error.message}});return}json(t,200,{ok:!0,applied:E.applied})}catch(e){console.error(`[folder-config:put]`,e),json(t,e instanceof SyntaxError?400:500,{ok:!1,error:e instanceof Error?e.message:`internal error`})}}async function xs(e,t){if(e.method===`GET`)return Cs(e,t);if(e.method===`PUT`)return Ts(e,t);if(e.method===`DELETE`)return Ds(e,t);json(t,405,{ok:!1,error:`Method not allowed`})}async function Cs(e,t){try{let s=new URL(e.url??``,`http://localhost`),g=s.searchParams.get(`name`)??``;if(!Yi(g,t))return;let S=Gi(s.searchParams.get(`folder`)??``,t,`folder`);if(!S)return;let{folderRel:w,resolvedContentDir:E}=S,D=w===``?[]:w.split(`/`),O=null,k=null,j=null;for(let e=D.length;e>=0;e--){let t=e===0?``:D.slice(0,e).join(`/`),s=t===``?E:resolve(E,t);if(s!==E&&!s.startsWith(`${E}${sep}`))continue;let S=resolve(s,`.ok`,`templates`,`${g}.md`);if(existsSync(S)){O=S,k=t,j=e===D.length?`local`:`inherited`;break}}if(!O||k===null||j===null){json(t,404,{ok:!1,error:`Template "${g}" not found for folder "${w||`.`}". Walked leaf → root.`});return}let F=await readFile$1(O,`utf-8`),L=F.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/),B={},H=F;if(L){try{let e=(0,import_dist$1.parse)(L[1]);e&&typeof e==`object`&&!Array.isArray(e)&&(B=e)}catch{}H=F.slice(L[0].length)}let q=relative(E,O).split(/[\\/]/).filter(Boolean).join(`/`);json(t,200,{ok:!0,template:{name:g,folder:k,scope:j,path:q,frontmatter:B,body:H}})}catch(e){console.error(`[template:get]`,e),json(t,500,{ok:!1,error:e instanceof Error?e.message:`internal error`})}}async function Ts(e,t){try{let s=(await readBody(e)).toString(`utf-8`),g=JSON.parse(s),S=typeof g.name==`string`?g.name:``;if(!Yi(S,t))return;let w=Gi(typeof g.folder==`string`?g.folder:``,t,`folder`);if(!w)return;let E=applyTemplateWrite({projectDir:w.resolvedContentDir,folder:w.folderRel,name:S,body:typeof g.body==`string`?g.body:``,frontmatter:Xi(g.frontmatter)});if(!E.ok){json(t,E.error.code===`WRITE_ERROR`||E.error.code===`BAD_PROJECT_DIR`?500:400,{ok:!1,error:{code:E.error.code,message:E.error.message}});return}json(t,200,{ok:!0,path:E.path,created:E.created,warnings:E.warnings})}catch(e){console.error(`[template:put]`,e),json(t,e instanceof SyntaxError?400:500,{ok:!1,error:e instanceof Error?e.message:`internal error`})}}async function Ds(e,t){try{let s=new URL(e.url??``,`http://localhost`),g=s.searchParams.get(`name`)??``;if(!Yi(g,t))return;let S=Gi(s.searchParams.get(`folder`)??``,t,`folder`);if(!S)return;let w=applyTemplateDelete({projectDir:S.resolvedContentDir,folder:S.folderRel,name:g});if(!w.ok){json(t,w.error.code===`WRITE_ERROR`||w.error.code===`BAD_PROJECT_DIR`?500:400,{ok:!1,error:{code:w.error.code,message:w.error.message}});return}json(t,200,{ok:!0,existed:w.existed,path:w.path})}catch(e){console.error(`[template:delete]`,e),json(t,500,{ok:!1,error:e instanceof Error?e.message:`internal error`})}}function Os(e){let t=new Map;for(let s of e){let e=s.path.split(`/`).filter(Boolean);e.pop();for(let g=1;g<=e.length;g++){let S=e.slice(0,g).join(`/`);t.set(S,Math.max(t.get(S)??0,s.modifiedTs))}}return[...t.entries()].map(([e,t])=>createWorkspaceSearchDocument({kind:`folder`,path:e,modifiedTs:t}))}function ks(e,t){let s=t.trim().toLowerCase();if(!s||!e)return;let g=e.toLowerCase().indexOf(s);if(g<0)return;let S=Math.max(0,g-80),w=Math.min(e.length,g+s.length+120),E=S>0?`...`:``,D=w<e.length?`...`:``;return`${E}${e.slice(S,w).replace(/\s+/g,` `).trim()}${D}`}function As(e){return e===`autocomplete`||e===`full_text`||e===`omnibar`?e:`omnibar`}function Ns(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}class Ps extends Error{constructor(e,t){super(t),this.status=e}}async function Is(e){if(e.method===`GET`){let t=new URL(e.url??``,`http://localhost`),s=t.searchParams.get(`limit`);return{query:t.searchParams.get(`query`)??``,intent:As(t.searchParams.get(`intent`)),scopes:Ns(t.searchParams.get(`scope`)??t.searchParams.get(`scopes`)),limit:s===null?void 0:Number(s)}}let t;try{t=await readBody(e)}catch{throw new Ps(413,`Payload too large`)}let s;try{let e=JSON.parse(t.toString());if(!e||typeof e!=`object`||Array.isArray(e))throw new Ps(400,`Invalid JSON body`);s=e}catch(e){throw e instanceof Ps?e:new Ps(400,`Invalid JSON body`)}return{query:typeof s.query==`string`?s.query:``,intent:As(s.intent),scopes:Ns(s.scopes??s.scope),limit:typeof s.limit==`number`?s.limit:Number(s.limit)}}async function Rs(){let e=[];for(let[t,s]of w()){if(isSystemDoc(t)||isConfigDoc(t))continue;let g=``,S=t;try{g=await readFile$1(s.canonicalPath,`utf-8`),S=extractPageTitle(g,t)}catch(e){console.warn(`[search] Failed to index ${t}:`,e)}e.push(createWorkspaceSearchDocument({kind:`page`,path:t,title:S,content:g,modifiedTs:Date.parse(s.modified)}))}return[...e,...Os(e)]}function $s(){return[...w()].filter(([e])=>!isSystemDoc(e)&&!isConfigDoc(e)).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${e}\u0000${t.modified}\u0000${t.size}\u0000${t.canonicalPath}\u0000${t.inode}\u0000${t.aliases.join(`,`)}`).join(``)}async function ec(){let e=`${g}\u0000${oe??``}`,t=$s(),s=workspaceSearchCaches.get(e);if(s?.fingerprint===t&&s.corpus)return s.corpus;if(s?.fingerprint===t&&s.pending)return s.pending;let S=Rs().then(e=>createWorkspaceSearchCorpus(e));workspaceSearchCaches.set(e,{fingerprint:t,pending:S});try{let s=await S;return workspaceSearchCaches.get(e)?.pending===S&&workspaceSearchCaches.set(e,{fingerprint:t,corpus:s}),s}catch(t){throw workspaceSearchCaches.get(e)?.pending===S&&workspaceSearchCaches.delete(e),t}}function tc(){if(process.env.NODE_ENV!==`test`)for(let e of[0,1e3,3e3])setTimeout(()=>{ec().catch(e=>{console.warn(`[search] Failed to prewarm workspace search cache:`,e)})},e)}tc();async function nc(e,t){if(e.method!==`GET`&&e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{let s=performance$1.now(),g=await Is(e);if(g.query.length>200){json(t,400,{ok:!1,error:`Query is too long`});return}let S=searchWorkspaceCorpus(await ec(),g.query,{intent:g.intent,scopes:g.scopes,limit:g.limit});json(t,200,{ok:!0,query:g.query,intent:g.intent,results:S.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`?ks(e.document.content,g.query):void 0})),elapsedMs:Math.max(0,performance$1.now()-s)})}catch(e){if(e instanceof Ps){json(t,e.status,{ok:!1,error:e.message});return}console.error(`[search]`,e),json(t,500,{ok:!1,error:`Failed to search workspace`})}}async function rc(e,s){if(e.method!==`GET`){json(s,405,{ok:!1,error:`Method not allowed`});return}try{let g=new URL(e.url??``,`http://localhost`).searchParams.get(`docName`);if(!g){json(s,400,{ok:!1,error:`Missing docName parameter`});return}if(!isSafeDocName(g)){json(s,400,{ok:!1,error:`Invalid docName`});return}if(isSystemDoc(g)||isConfigDoc(g)){json(s,400,{ok:!1,error:`'${g}' is a reserved document name`});return}json(s,200,{ok:!0,...await suggestLinks({hocuspocus:t,fileIndex:w(),docName:g})})}catch(e){if(e instanceof SuggestLinksTargetNotFoundError){json(s,404,{ok:!1,error:`Page not found`});return}console.error(`[suggest-links]`,e),json(s,500,{ok:!1,error:`Failed to suggest links`})}}async function ic(e,t){if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s;try{s=await readUploadBody(e,g)}catch(e){if(e instanceof UploadWriteError){if(e.reason===`malformed-upload`){json(t,400,{ok:!1,error:`malformed-upload`});return}if(e.reason===`storage-full`){json(t,507,{ok:!1,error:`storage-full`});return}if(e.reason===`storage-readonly`){json(t,500,{ok:!1,error:`storage-readonly`});return}json(t,500,{ok:!1,error:`storage-error`});return}json(t,400,{ok:!1,error:`Failed to parse upload: ${e instanceof Error?e.message:String(e)}`});return}let{filename:S,tempPath:w,sha:E,byteLength:D,parentDocName:O}=s,{agentId:k,agentName:j}=it(Object.fromEntries(new URL(e.url??``,`http://localhost`).searchParams.entries())),F=()=>{if(existsSync(w))try{unlinkSync(w)}catch{}};if(D===0){F(),json(t,400,{ok:!1,error:`No file received`});return}if(!O){F(),json(t,400,{ok:!1,error:`parentDocName is required`});return}if(O.includes(`\0`)||O.includes(`..`)||O.startsWith(`/`)){F(),json(t,400,{ok:!1,error:`path-escape`});return}let L=resolve(g),B=resolveUploadDestDir(O,`./`,L);if(!isWithinContentDir(B,L)){F(),json(t,400,{ok:!1,error:`path-escape`});return}try{assertNoSymlinkEscape(B,L)}catch(e){if(F(),(e instanceof Error?e.message:String(e)).startsWith(`symlink-escape:`)){json(t,400,{ok:!1,error:`path-escape`});return}log$2.error({err:e,destDir:B},`[upload] failed to validate destination directory`),json(t,500,{ok:!1,error:`storage-error`});return}try{mkdirSync(B,{recursive:!0})}catch(e){if(e.code!==`EEXIST`){F(),log$2.error({err:e,destDir:B},`[upload] failed to create attachment directory`),json(t,500,{ok:!1,error:`storage-error`});return}}try{let e=realpathSync(B),s;try{s=realpathSync(L)}catch{s=L}if(!isWithinContentDir(e,s)){F(),json(t,400,{ok:!1,error:`path-escape`});return}}catch{F(),json(t,400,{ok:!1,error:`path-escape`});return}let H=await fileTypeFromFile(w),q=H?.mime,J=H?.ext;if(!q){let e=readTempFileHead(w,256).toString(`utf-8`).replace(/^/,``).trimStart();(e.startsWith(`<svg`)||e.startsWith(`<?xml`)&&e.includes(`<svg`))&&(q=`image/svg+xml`,J=`svg`)}{let s=await findDuplicateAsset(B,E,D);if(s){F();let S=relative(g,resolve(B,s));log$2.info({event:`upload`,endpoint:e.url??`/api/upload`,agentId:k,agentName:j,dedup:!0,mime:q??null,size:D,destPath:S,httpStatus:200},`[upload] dedup hit`),json(t,200,{ok:!0,src:s,path:S,deduped:!0});return}}let Y;if(!S||S===`upload`||GENERIC_PASTE_NAMES.test(S)){let e=new Date().toISOString().replace(/[-:T]/g,``).slice(0,14).replace(/(\d{8})(\d{6})/,`$1-$2`),t=S?extname(S).slice(1):``,s=J??t??``;Y=s===``?`pasted-${e}`:`pasted-${e}.${s}`}else Y=sanitizeFilename(S);try{let s=linkTempToFinalWithCollisionRetry(w,B,Y),S=relative(g,resolve(B,s));log$2.info({event:`upload`,endpoint:e.url??`/api/upload`,agentId:k,agentName:j,dedup:!1,mime:q??null,size:D,destPath:S,httpStatus:200},`[upload] write ok`),json(t,200,{ok:!0,src:s,path:S,deduped:!1})}catch(s){let g=s instanceof Error?s.message:String(s),S=s instanceof UploadWriteError?s.reason:`unknown`;if(log$2.error({event:`upload`,endpoint:e.url??`/api/upload`,agentId:k,agentName:j,filename:Y,size:D,reason:S,message:g,httpStatus:s instanceof UploadWriteError&&s.reason===`storage-full`?507:500},`[upload] write failed`),s instanceof UploadWriteError){if(s.reason===`storage-full`){json(t,507,{ok:!1,error:`storage-full`});return}if(s.reason===`storage-readonly`){json(t,500,{ok:!1,error:`storage-readonly`});return}if(s.reason===`collision-exhaustion`){json(t,500,{ok:!1,error:`collision-exhaustion`});return}json(t,500,{ok:!1,error:`storage-error`});return}json(t,500,{ok:!1,error:`storage-error`})}}let ac=`/api/local-op/clone`,oc=`/api/local-op/open`,sc=600*1e3,cc=45e3;async function lc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s,g;try{let S=await readBody(e),w=JSON.parse(S.toString());if(typeof w.url!=`string`||!w.url){json(t,400,{ok:!1,error:`Missing or invalid url`});return}if(typeof w.dir!=`string`||!w.dir){json(t,400,{ok:!1,error:`Missing or invalid dir`});return}s=w.url,g=w.dir}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!isAllowedGitUrl(s)){json(t,400,{ok:!1,error:`URL protocol not allowed`});return}if(!isSafeLocalPath(g)){json(t,400,{ok:!1,error:`dir must be within the user home directory`});return}if(!fe.tryAcquire(ac)){json(t,429,{ok:!1,error:`A clone operation is already in progress`});return}t.writeHead(200,{"Content-Type":`application/x-ndjson`,"Transfer-Encoding":`chunked`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-cache`});let S=null,w=runCloneSubprocess({cliArgs:ae,url:s,dir:g,timeoutMs:sc,onEvent:e=>{if(e.type===`complete`){S=e.dir;return}e.type===`error`&&e.message&&log$2.warn({stderr:e.message,url:s,dir:g},`[local-op/clone] clone failed`),t.writableEnded||t.write(`${JSON.stringify(e)}\n`)}});(async()=>{try{if(await w.done,S&&!t.writableEnded){let e=await uc(S);t.writableEnded||(`port`in e?t.write(`${JSON.stringify({type:`complete`,port:e.port,dir:S})}\n`):t.write(`${JSON.stringify({type:`error`,message:e.error})}\n`))}}finally{t.writableEnded||t.end(),fe.release(ac)}})(),t.on(`close`,()=>{w.cancel()})}async function uc(e){let t=resolve(expandTilde(e)),s=getLocalDir(t),g=readUiLock(s);if(g&&g.port>0)return{port:g.port};let S=readServerLock(s),[w,...E]=ae,D=S&&S.port>0?`ui`:`start`,O=spawn(w,[...E,D],{cwd:t,detached:!0,stdio:[`ignore`,`ignore`,`pipe`],env:{...process.env,OK_LOCK_KIND:`interactive`,OK_PARENT_PID:String(process.pid)}}),k=[];O.stderr?.on(`data`,e=>{k.push(e),log$2.warn({cwd:t,cliCmd:D,msg:e.toString(`utf-8`).trim()},`[local-op/open] child stderr`)});let j=null;O.on(`exit`,e=>{j=e??-1}),O.unref();let F=Date.now()+45e3;for(;Date.now()<F;){await setTimeout$1(500);let e=readUiLock(s);if(e&&e.port>0)return{port:e.port};if(j!==null){let e=Buffer.concat(k).toString(`utf-8`).trim();return{error:`\`ok ${D}\` exited (code ${j})${e?` — ${e}`:``}`}}}let L=Buffer.concat(k).toString(`utf-8`).trim();return{error:`UI did not start within the expected time${L?` — ${L}`:``}`}}async function dc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s;try{let g=await readBody(e),S=JSON.parse(g.toString());if(typeof S.dir!=`string`||!S.dir){json(t,400,{ok:!1,error:`Missing or invalid dir`});return}s=S.dir}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!isSafeLocalPath(s)){json(t,400,{ok:!1,error:`dir must be within the user home directory`});return}if(!fe.tryAcquire(oc)){json(t,429,{ok:!1,error:`A server-open operation is already in progress`});return}try{let e=await uc(s);`port`in e?json(t,200,{port:e.port}):json(t,504,{ok:!1,error:e.error})}finally{fe.release(oc)}}let 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`;async function _c(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=`github.com`;try{let t=await readBody(e),g=JSON.parse(t.toString());typeof g.host==`string`&&g.host&&(s=g.host)}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!fe.tryAcquire(fc)){json(t,429,{ok:!1,error:`An auth login operation is already in progress`});return}t.writeHead(200,{"Content-Type":`application/x-ndjson`,"Transfer-Encoding":`chunked`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-cache`});let g=runDeviceFlowSubprocess({cliArgs:ae,host:s,timeoutMs:sc,onEvent:e=>{t.writableEnded||t.write(`${JSON.stringify(e)}\n`)}}),S=()=>{g.cancel()};t.on(`close`,S),g.done.finally(()=>{t.off(`close`,S),t.writableEnded||t.end(),fe.release(fc)})}async function vc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=`github.com`;try{let t=(await readBody(e)).toString().trim();if(t.length>0){let e=JSON.parse(t);typeof e.host==`string`&&e.host&&(s=e.host)}}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!fe.tryAcquire(pc)){json(t,429,{ok:!1,error:`An auth status operation is already in progress`});return}try{let[e,...g]=ae,S=[...g,`auth`,`status`,`--json`,`--host`,s],w=(await new Promise((t,s)=>{let g=spawn(e,S,{stdio:[`ignore`,`pipe`,`pipe`],env:{...process.env}}),w=setTimeout(()=>{g.kill(`SIGTERM`)},3e4),E=[];g.stdout.on(`data`,e=>E.push(e)),g.on(`close`,()=>{clearTimeout(w),t(Buffer.concat(E).toString(`utf-8`))}),g.on(`error`,e=>{clearTimeout(w),s(e)})})).split(`
958
+ `).map(e=>e.trim()).filter(Boolean),E=null;for(let e=w.length-1;e>=0;e--)try{E=JSON.parse(w[e]);break}catch{}E===null?json(t,200,{authenticated:!1}):json(t,200,E)}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:`auth status failed`})}finally{fe.release(pc)}}async function yc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=`github.com`;try{let t=(await readBody(e)).toString().trim();if(t.length>0){let e=JSON.parse(t);typeof e.host==`string`&&e.host&&(s=e.host)}}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!fe.tryAcquire(mc)){json(t,429,{ok:!1,error:`An auth repos operation is already in progress`});return}t.writeHead(200,{"Content-Type":`application/x-ndjson`,"Transfer-Encoding":`chunked`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-cache`});let[g,...S]=ae,w=[...S,`auth`,`repos`,`--json`,`--host`,s],E=!1,D=spawn(g,w,{stdio:[`ignore`,`pipe`,`pipe`],env:{...process.env}}),O=setTimeout(()=>{D.kill(`SIGTERM`)},sc);D.stdout.on(`data`,e=>{t.writableEnded||t.write(e)}),D.stderr.on(`data`,e=>{log$2.debug({msg:e.toString(`utf-8`).trim()},`[local-op/auth/repos] stderr`)}),D.on(`close`,e=>{clearTimeout(O),E||(E=!0,e!==0&&!t.writableEnded&&t.write(`${JSON.stringify({type:`error`,message:`auth repos exited with code ${e}`})}\n`),t.end()),fe.release(mc)}),D.on(`error`,e=>{clearTimeout(O),E||(E=!0,t.writableEnded||(t.write(`${JSON.stringify({type:`error`,message:e.message})}\n`),t.end())),fe.release(mc)})}async function bc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=`github.com`;try{let t=await readBody(e),g=JSON.parse(t.toString());typeof g.host==`string`&&g.host&&(s=g.host)}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!fe.tryAcquire(hc)){json(t,429,{ok:!1,error:`An auth signout operation is already in progress`});return}try{let[e,...g]=ae,S=[...g,`auth`,`signout`,`--host`,s];await new Promise((t,s)=>{let g=spawn(e,S,{stdio:`ignore`,env:{...process.env}}),w=setTimeout(()=>{g.kill(`SIGTERM`)},3e4);g.on(`close`,()=>{clearTimeout(w),t()}),g.on(`error`,e=>{clearTimeout(w),s(e)})}),json(t,200,{ok:!0})}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:`auth signout failed`})}finally{fe.release(hc)}}async function xc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=`github.com`,g;try{let S=await readBody(e),w=JSON.parse(S.toString());if(typeof w.pat!=`string`||!w.pat){json(t,400,{ok:!1,error:`Missing or invalid pat`});return}g=w.pat,typeof w.host==`string`&&w.host&&(s=w.host)}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!fe.tryAcquire(gc)){json(t,429,{ok:!1,error:`An auth pat operation is already in progress`});return}try{let[e,...S]=ae,w=[...S,`auth`,`pat`,`--json`,`--host`,s],E=(await new Promise((t,s)=>{let S=spawn(e,w,{stdio:[`pipe`,`pipe`,`pipe`],env:{...process.env}}),E=setTimeout(()=>{S.kill(`SIGTERM`)},3e4);S.stdin.write(`${g}\n`),S.stdin.end();let D=[];S.stdout.on(`data`,e=>D.push(e)),S.on(`close`,e=>{clearTimeout(E),e===0?t(Buffer.concat(D).toString(`utf-8`)):s(Error(`auth pat exited with code ${e}`))}),S.on(`error`,e=>{clearTimeout(E),s(e)})})).split(`
959
+ `).map(e=>e.trim()).filter(Boolean),D=null;for(let e=E.length-1;e>=0;e--)try{D=JSON.parse(E[e]);break}catch{}D===null?json(t,200,{ok:!0}):json(t,200,D)}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:`auth pat failed`})}finally{fe.release(gc)}}async function Sc(e,t){if(checkLocalOpSecurity(e,t,json)){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!oe){json(t,400,{ok:!1,error:`No project directory configured`});return}try{json(t,200,{ok:!0,identity:await resolveGitIdentity(oe)})}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:`identity resolution failed`})}}}let Cc=`/api/local-op/auth/set-identity`;async function wc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s,g;try{let S=await readBody(e),w=JSON.parse(S.toString());if(typeof w.name!=`string`||!w.name.trim()){json(t,400,{ok:!1,error:`Missing or invalid name`});return}if(typeof w.email!=`string`||!w.email.trim()){json(t,400,{ok:!1,error:`Missing or invalid email`});return}s=w.name.trim(),g=w.email.trim()}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}if(!oe){json(t,400,{ok:!1,error:`No project directory configured`});return}if(!fe.tryAcquire(Cc)){json(t,429,{ok:!1,error:`A set-identity operation is already in progress`});return}try{writeGitIdentity(oe,s,g),ne?.()?.refreshIdentity().catch(()=>{}),json(t,200,{ok:!0})}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:`set-identity failed`})}finally{fe.release(Cc)}}async function Tc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=ne?.();if(!s){json(t,200,{state:`dormant`,lastSyncUtc:null,lastFetchUtc:null,lastPushedSha:null,ahead:0,behind:0,consecutiveFailures:0,conflictCount:0,hasRemote:!1,syncEnabled:!1,identityUnresolved:!1});return}json(t,200,s.getStatus())}async function Ec(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=ne?.();if(!s){json(t,503,{ok:!1,error:`Sync engine not active`});return}let g=`sync`;try{let t=await readBody(e);if(t.length>0){let e=JSON.parse(t.toString());(e.op===`push`||e.op===`pull`||e.op===`sync`)&&(g=e.op)}}catch{}json(t,202,{ok:!0,op:g}),s.trigger(g)}async function Dc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=ne?.();json(t,200,{conflicts:s?s.getConflicts():[]})}async function Oc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=ne?.();if(!s){json(t,503,{ok:!1,error:`Sync engine not active`});return}let g;try{let t=await readBody(e);g=JSON.parse(t.toString())}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}let{file:S,strategy:w,content:E}=g;if(!S||typeof S!=`string`){json(t,400,{ok:!1,error:`Missing required field: file`});return}if(w!==`mine`&&w!==`theirs`&&w!==`content`){json(t,400,{ok:!1,error:`Invalid strategy: must be 'mine', 'theirs', or 'content'`});return}try{await s.resolveConflict(S,w,E),json(t,200,{ok:!0})}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:String(e)})}}async function kc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}if(!oe){json(t,503,{ok:!1,error:`Project repo not configured`});return}let s=new URL(e.url??`/`,`http://${e.headers.host??`localhost`}`).searchParams.get(`file`);if(!s){json(t,400,{ok:!1,error:`Missing required query param: file`});return}if(s.includes(`..`)||s.startsWith(`/`)){json(t,400,{ok:!1,error:`Invalid file path`});return}let g=esm_default({baseDir:oe,timeout:{block:15e3}});async function S(e){try{return await g.raw([`show`,`:${e}:${s}`])}catch{return``}}try{let[e,g,w]=await Promise.all([S(1),S(2),S(3)]);json(t,200,{ok:!0,file:s,base:e,ours:g,theirs:w})}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:String(e)})}}async function Ac(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=new URL(e.url??`/`,`http://localhost`).searchParams.get(`rootDir`)??void 0;try{json(t,200,{ok:!0,plan:await planSeed({projectDir:g,rootDir:s})})}catch(e){if(e instanceof SeedPrerequisiteError){json(t,200,{ok:!1,error:{kind:`prerequisite-missing`,message:e.message}});return}if(e instanceof SeedRootDirError){json(t,200,{ok:!1,error:{kind:`invalid-root`,message:e.message}});return}json(t,500,{ok:!1,error:{kind:`internal`,message:e instanceof Error?e.message:String(e)}})}}async function jc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s;try{let g=await readBody(e),S=JSON.parse(g.toString());if(!S.plan||typeof S.plan!=`object`){json(t,400,{ok:!1,error:`Missing or invalid plan`});return}s=S.plan}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}try{json(t,200,{ok:!0,result:await applySeed(s,{projectDir:g})})}catch(e){json(t,500,{ok:!1,error:{kind:`internal`,message:e instanceof Error?e.message:String(e)}})}}async function Mc(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s={};try{let g=await readBody(e);if(g.length>0){let e=JSON.parse(g.toString());if(typeof e.noOpen==`boolean`&&(s.noOpen=e.noOpen),typeof e.force==`boolean`&&(s.force=e.force),typeof e.out==`string`){if(!isSafeLocalPath(e.out)){json(t,400,{ok:!1,error:`Output path must be within home directory`});return}s.out=e.out}}}catch{json(t,400,{ok:!1,error:`Invalid JSON body`});return}try{json(t,200,await buildAndOpenSkill(s))}catch(e){json(t,500,{ok:!1,error:{kind:`internal`,message:e instanceof Error?e.message:String(e)}})}}async function Nc(e,t){if(checkLocalOpSecurity(e,t,json)){if(e.method!==`GET`){json(t,405,{ok:!1,error:`Method not allowed`});return}try{json(t,200,{ok:!0,...await readSkillInstallStateSnapshot(homedir())},{"Cache-Control":`no-store`})}catch(e){json(t,500,{ok:!1,error:{kind:`internal`,message:e instanceof Error?e.message:String(e)}})}}}async function Pc(e,t){if(checkLocalOpSecurity(e,t,json))return handleInstalledAgents(e,t,_e.probeAll)}async function Fc(e,t){if(checkLocalOpSecurity(e,t,json))return handleSpawnCursor(e,t,{contentDir:g,platform:process.platform})}async function Ic(e,t){if(!checkLocalOpSecurity(e,t,json))return;if(e.method!==`POST`){json(t,405,{ok:!1,error:`Method not allowed`});return}let s=ne?.();if(!s){json(t,503,{ok:!1,error:`Sync engine not active`});return}try{await s.abortMerge(),json(t,200,{ok:!0})}catch(e){json(t,500,{ok:!1,error:e instanceof Error?e.message:String(e)})}}let Lc={"/api/document":jt,"/api/documents":Mt,"/api/backlinks":Ft,"/api/backlink-counts":It,"/api/forward-links":Lt,"/api/link-graph":Rt,"/api/dead-links":Vt,"/api/orphans":zt,"/api/hubs":Bt,"/api/tags":Ht,"/api/pages":Ui,"/api/folder-config":Zi,"/api/template":xs,"/api/search":nc,"/api/suggest-links":rc,"/api/page-headings":Qr,"/api/create-page":Zr,"/api/rename-path":ji,"/api/delete-path":Hi,"/api/upload":ic,"/api/agent-write":Et,"/api/agent-write-md":Dt,"/api/agent-patch":Wt,"/api/agent-undo":Kt,"/api/agent-activity":$t,"/api/agent-burst-diff":en,"/api/save-version":Fr,"/api/history":Ir,"/api/diff":zr,"/api/rollback":Br,"/api/metrics/reconciliation":Vr,"/api/metrics/parse-health":Hr,"/api/metrics/agent-presence":Gr,"/api/server-info":Ur,"/api/principal":Wr,"/api/rescue":Yr,"/api/asset":qr,"/api/workspace":Kr,"/api/sync/status":Tc,"/api/sync/trigger":Ec,"/api/sync/conflicts":Dc,"/api/sync/conflict-content":kc,"/api/sync/resolve-conflict":Oc,"/api/sync/abort-merge":Ic,"/api/local-op/clone":lc,"/api/local-op/open":dc,"/api/local-op/auth/login":_c,"/api/local-op/auth/status":vc,"/api/local-op/auth/repos":yc,"/api/local-op/auth/signout":bc,"/api/local-op/auth/pat":xc,"/api/local-op/auth/identity":Sc,"/api/local-op/auth/set-identity":wc,"/api/installed-agents":Pc,"/api/spawn-cursor":Fc,"/api/install-skill":Mc,"/api/skill/install-state":Nc,"/api/seed/plan":Ac,"/api/seed/apply":jc};D&&(Lc[`/api/test-reset`]=jr,Lc[`/api/test-rescan-backlinks`]=Mr);let Rc=new Set([`/api/upload`,`/api/create-page`,`/api/rename-path`,`/api/delete-path`,`/api/agent-write`,`/api/agent-write-md`,`/api/agent-patch`,`/api/save-version`,`/api/rollback`,`/api/sync/trigger`,`/api/sync/resolve-conflict`,`/api/sync/abort-merge`,`/api/test-reset`,`/api/test-rescan-backlinks`,`/api/install-skill`,`/api/folder-config`,`/api/template`]),zc=[`/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)){typeof t.setHeader==`function`&&t.setHeader(`Content-Type`,`application/json`),t.writeHead(403),t.end(JSON.stringify({ok:!1,error:`origin-not-allowed`}));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(Rc.has(s)||zc.some(e=>s.startsWith(e))){let s=e.socket?.remoteAddress;if(s!==void 0&&!isLoopbackAddress(s)){json(t,403,{ok:!1,error:`loopback-required`});return}if(!isAllowedWorkspaceHostHeader(e.headers.host)){json(t,403,{ok:!1,error:`host-header-not-allowed`});return}}if(!s.startsWith(`/api/`))return;let g=propagation.extract(context.active(),e.headers),S=e.method??`GET`,w=s;s.startsWith(`/api/rescue/`)?w=`/api/rescue/:docName`:s.startsWith(`/api/history/`)?w=`/api/history/:sha`:s.startsWith(`/api/tags/`)&&(w=`/api/tags/:name`);let E=getTracer(),D=Date.now();await context.with(g,()=>E.startActiveSpan(`HTTP ${S} ${w}`,{kind:SpanKind.SERVER,attributes:{[ATTR_HTTP_REQUEST_METHOD]:S,[ATTR_HTTP_ROUTE]:w,[ATTR_URL_PATH]:s,[ATTR_URL_SCHEME]:`http`,[ATTR_USER_AGENT_ORIGINAL]:e.headers[`user-agent`]??``}},async g=>{try{let S=Lc[s];if(S)await S(e,t);else if(s.startsWith(`/api/rescue/`)){let g=decodeURIComponent(s.slice(12));g&&await Xr(e,t,g)}else if(s.startsWith(`/api/history/`)){let g=decodeURIComponent(s.slice(13));g&&await Lr(e,t,g)}else if(s.startsWith(`/api/tags/`)){let g=s.slice(10);g&&await Ut(e,t,g)}let w=t.statusCode;g.setAttribute(ATTR_HTTP_RESPONSE_STATUS_CODE,w),w>=500&&g.setStatus({code:SpanStatusCode.ERROR,message:`status ${w}`})}catch(e){throw g.recordException(e),g.setStatus({code:SpanStatusCode.ERROR,message:e instanceof Error?e.message:String(e)}),e}finally{g.end();let e=(Date.now()-D)/1e3;httpDurationHist().record(e,{[ATTR_HTTP_REQUEST_METHOD]:S,[ATTR_HTTP_ROUTE]:w,[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 g(S){let w;try{w=readdirSync(S,{withFileTypes:!0})}catch(t){let s=errnoCode(t);s!==`ENOENT`&&e.onSkip?.(`read-failed`,s,S);return}for(let E of w){let w=join(S,E.name),D=relative(t,w);if(D.startsWith(`..`)||e.contentFilter?.isDirExcluded(D)&&E.isDirectory())continue;let O;try{O=lstatSync(w)}catch(t){let s=errnoCode(t);s!==`ENOENT`&&e.onSkip?.(`lstat-failed`,s,w);continue}if(O.isSymbolicLink()){let S;try{S=realpathSync(w)}catch(t){let s=errnoCode(t);s!==`ENOENT`&&e.onSkip?.(`realpath-failed`,s,w);continue}if(!isWithinDir(S,t)){e.onSkip?.(`symlink-escape`,void 0,w);continue}let E;try{E=statSync(S)}catch(t){let s=errnoCode(t);s!==`ENOENT`&&e.onSkip?.(`symlink-stat-failed`,s,S);continue}if(s.has(E.ino))continue;s.add(E.ino),E.isDirectory()?g(S):E.isFile()&&isSupportedAssetFile(w,ASSET_EXTENSIONS)&&!e.contentFilter?.isExcluded(D)&&e.basenameIndex.add(D);continue}if(O.isDirectory()){if(s.has(O.ino))continue;s.add(O.ino),g(w);continue}O.isFile()&&isSupportedAssetFile(w,ASSET_EXTENSIONS)&&!e.contentFilter?.isExcluded(D)&&e.basenameIndex.add(D)}}g(t)}const HocuspocusAuthTokenSchema=object$1({principalId:string().optional(),tabSessionId:string().optional(),expectedServerInstanceId:string().optional(),expectedBranch:string().optional()}).loose(),HOCUSPOCUS_AUTH_REJECTION_REASONS=[`server-instance-mismatch`,`branch-mismatch`];function isHocuspocusAuthRejectionReason(e){return HOCUSPOCUS_AUTH_REJECTION_REASONS.includes(e)}var HocuspocusAuthRejection=class extends Error{reason;constructor(e,t){super(t),this.name=`HocuspocusAuthRejection`,this.reason=e}};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 DEFAULT_WARN_BEFORE_MS=300*1e3;function attachIdleShutdown(e){let t=e.scheduler??defaultScheduler,s=e.warnBeforeMs??DEFAULT_WARN_BEFORE_MS,g=0,S=null,w=null,E=!1,D=!1;function O(){S!==null&&(t.clearTimeout(S),S=null),w!==null&&(t.clearTimeout(w),w=null)}function k(){O(),!(D||E)&&g===0&&(s>0&&s<e.thresholdMs&&(w=t.setTimeout(()=>{w=null,g===0&&!E&&e.log?.warn({msUntilShutdown:s,webSocketClientCount:0},`idle shutdown pending: no WebSocket clients`)},e.thresholdMs-s)),S=t.setTimeout(()=>{if(S=null,!(D||E)&&g===0){E=!0,e.log?.info({webSocketClientCount:0},`idle shutdown firing`);try{let t=e.onShutdown();t&&typeof t.then==`function`&&t.catch(t=>{e.log?.error({err:t},`idle shutdown handler rejected`)})}catch(t){e.log?.error({err:t},`idle shutdown handler threw`)}}},e.thresholdMs))}let j=(e,t)=>{e.url?.startsWith(`/collab`)&&(g++,O(),t.once(`close`,()=>{g--,g<0&&(g=0),g===0&&k()}))};return e.httpServer.on(`upgrade`,j),k(),{detach:()=>{D||(D=!0,e.httpServer.off(`upgrade`,j),O())}}}const MCP_SERVER_NAME=`open-knowledge`;function buildInstructions(e){return`# Open Knowledge (OK) — collaborative markdown via MCP
949
960
 
950
961
  **STOP** *(when \`.ok/\` exists)* — do NOT use native \`Read\`, \`Grep\`, \`Glob\`, \`Edit\`, \`Write\` on in-scope \`.md\` / \`.mdx\`. Reads: \`exec\` / \`read_document\` / \`search\` / \`grep\`. Writes: \`write_document\` / \`edit_document\` ONLY.
951
962
 
@@ -1605,6 +1616,6 @@ In headless mode, write the recap into the research article's "Further reading"
1605
1616
  `).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=[],g=[];for(let e of t){let t=join(this.projectDir,e),S=relative(this.contentDir,t);!S.startsWith(`..`)&&!this.contentFilter.isExcluded(S)?s.push(e):g.push(e)}for(let t of g)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 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
1606
1617
  `,`
1607
1618
  `).split(`
1608
- `),s=[],g=!1,S=``;for(let e of t){let t=/^\s{0,3}([`~]{3,})/.exec(e);if(t){g?RegExp(`^\\s{0,3}${S[0]==="`"?"`":`~`}{${S.length},}\\s*$`).test(e)&&(g=!1,S=``):(g=!0,S=t[1]);continue}if(g)continue;let w=stripInlineCodeSpans(e);for(TAG_VALUE_RE.lastIndex=0;;){let e=TAG_VALUE_RE.exec(w);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:g}=stripFrontmatter(t),S=extractFrontmatterTags(s?unwrapFrontmatterFences(s):``),w=extractInlineTagsFromBody(g),E=new Set([...S,...w]),D=new Set;for(let e of E)for(let t of expandTagToHierarchy(e))D.add(t);this.applyDocSnapshot(e,E,D)}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 g of t){let t=this.state.byDocLiteral.get(g);if(!t)continue;let S=tagsMatchingPrefix(t,e);s.push({docName:g,matchingTags:[...S].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 g=t;for(;g>0;)s.add(e.slice(0,g)),g=e.indexOf(`/`,g+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 g=this.state.byDoc.get(e)??new Set;for(let t of g){if(s.has(t))continue;let g=this.state.byTag.get(t);g&&(g.delete(e),g.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 g of s){let s=join(e,g.name);if(g.isDirectory()){let e=relative(this.contentDir,s);if(this.contentFilter&&e&&this.contentFilter.isDirExcluded(e))continue;this.walkContentDir(s,t);continue}if(!g.isFile()||!isSupportedDocFile(g.name))continue;let S=relative(this.contentDir,s);this.contentFilter?.isExcluded(S)||t.push({docName:stripDocExtension(S),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:g=!0,debounce:S=2e3,maxDebounce:w=1e4,gitEnabled:E=!0,commitDebounceMs:D=3e4,wipRef:O=`refs/wip/main`,configHomedirOverride:k,enableTestRoutes:j=!1,shadowRepo:F,contentRoot:L,destroyTimeoutMs:B=1e4,localOpCliArgs:H,skipStateManifestCheck:q=!1}=e,J=getLogger(`server`);function Y(){let e=readConfigSafely({absPath:resolveConfigPath(`project-local`,s),sideline:!1,warn:e=>J.warn({message:e},`[config] could not read project-local config`)}),t=e.value.autoSync?.enabled;return t==null?(e.valid||J.warn({},`[config] project-local autoSync.enabled unavailable (config invalid) — falling back to project config`),readConfigSafely({absPath:resolveConfigPath(`project`,s),sideline:!1,warn:e=>J.warn({message:e},`[config] could not read project config`)}).value.autoSync?.enabled===!0):t===!0}initTelemetry();let ee=randomUUID(),te=getLocalDir(t);if(acquireServerLock(te,{port:e.port??0,worktreeRoot:s,kind:e.lockKind??`interactive`,capabilities:[`http`,`ws`]}),!q)try{assertCompatibleStateManifest({lockDir:te,shadowRepoDir:resolveShadowDir(s)})}catch(e){throw releaseServerLock(te),e}let ne=createBasenameIndex(),ae=(e,t)=>ne.resolveEmbed(e,t),oe,se,ce,ue,de,fe,me,ge=null,_e=null,ve=null,ye=null,Ce=new Set,we=!1,Te;function De(e){ge?.signal(e)}let je=2e3,Me=null;function Pe(){Me!==null&&clearTimeout(Me),Me=setTimeout(()=>{Me=null,se.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist debounced cache:`,e)})},2e3)}try{oe=createContentFilter({projectDir:s,contentDir:t,onAfterRebuild:()=>{se.rebuildFromDisk(getActiveBranch()).catch(e=>{getLogger(`server-factory`).warn({err:e},`[content-filter] backlink-index rebuild failed after onAfterRebuild`)});try{ce.init()}catch(e){getLogger(`server-factory`).warn({err:e},`[content-filter] tag-index rebuild failed after onAfterRebuild`)}try{let e=at?.pruneFileIndexNowExcluded()??0;e>0&&getLogger(`server-factory`).info({pruned:e},`[content-filter] pruned now-excluded entries from fileIndex`)}catch(e){getLogger(`server-factory`).warn({err:e},`[content-filter] fileIndex prune failed after onAfterRebuild`)}}}),se=new BacklinkIndex({projectDir:s,contentDir:t,contentFilter:oe}),ce=new TagIndex({contentDir:t,contentFilter:oe});try{ce.init()}catch(e){console.warn(`[server-factory] tag-index init failed; continuing with empty index:`,e)}ue={current:F},de=createPersistenceExtension({contentDir:t,projectDir:s,gitEnabled:E,commitDebounceMs:D,wipRef:O,shadowRef:ue,contentRoot:L,backlinkIndex:se,configHomedirOverride:k,getCurrentBranch:()=>st?.getLastKnownBranch()??null,resolveEmbed:ae,getPrincipal:()=>ye,onAgentCommit:()=>ge?.signal(`session-activity`),onDiskFlush:(e,t)=>ge?.emitDiskAck(e,t),onConfigRejected:(e,t)=>ge?.emitConfigValidationRejected(e,t)}),fe=new Hocuspocus({quiet:g,debounce:S,maxDebounce:w,extensions:[de.extension]});let B=fe.shouldUnloadDocument.bind(fe);fe.shouldUnloadDocument=e=>{if((we||Ce.has(e))&&B(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:B(e)},Te=async e=>{Ce.add(e);try{await fe.unloadDocument(e)}finally{Ce.delete(e)}},ge=new CC1Broadcaster(fe),_e=new AgentFocusBroadcaster(fe),ve=new AgentPresenceBroadcaster(fe),me=new AgentSessionManager(fe);let q=createLiveDerivedIndexExtension({backlinkIndex:se,tagIndex:ce,signalChannel:De});fe.configuration.extensions.push(q),fe.configuration.extensions.push({__kind:`principal-auth`,async onAuthenticate(e){let t=e.token,s=parseHocuspocusAuthToken(t),g=s?.expectedServerInstanceId;if(typeof g==`string`&&g.length>0&&g!==ee)throw new HocuspocusAuthRejection(`server-instance-mismatch`,`server instance mismatch: client claimed ${g}, this server is ${ee}`);let S=s?.expectedBranch,w=getActiveBranch();if(typeof S==`string`&&S.length>0&&S!==w)throw new HocuspocusAuthRejection(`branch-mismatch`,`branch mismatch: client claimed ${S}, server is on ${w}`);if(!s)return;let E=e.context;typeof s.principalId==`string`&&(ye&&s.principalId===ye.id?E.principalId=ye.id:ye?console.warn(JSON.stringify({event:`principal-token-mismatch`,claimed:s.principalId,loaded:ye.id})):E.principalId=s.principalId),typeof s.tabSessionId==`string`&&(E.tabSessionId=s.tabSessionId),E.kind=`human`}}),fe.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 g=e.requestHeaders,S=(g&&typeof g.get==`function`?g.get(`host`):null)??t.headers?.host??void 0;if(!isAllowedWorkspaceHostHeader(S))throw Error(`config-doc admission requires loopback Host header (host=${S??`<absent>`}, doc=${e.documentName})`)}}),fe.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 J=createApiExtension({hocuspocus:fe,sessionManager:me,contentDir:t,contentFilter:oe,serverInstanceId:ee,getFileIndex:()=>at?at.getFileIndex():new Map,getAliasMap:()=>at?at.getAliasMap():new Map,enableTestRoutes:j,shadowRef:ue,flushGitCommit:()=>de.flushPendingGitCommit(),getCurrentBranch:()=>st?.getLastKnownBranch()??null,getDiskAckSVs:()=>ge?.getLatestDiskAckSVsAsBase64()??{},contentRoot:L,backlinkIndex:se,tagIndex:ce,signalChannel:De,agentFocusBroadcaster:_e,agentPresenceBroadcaster:ve,onAgentWrite:e.onAgentWrite,getSyncEngine:()=>vt,localOpCliArgs:H,projectDir:s,resolveEmbed:ae,getPrincipal:()=>ye,forceUnloadDocument:Te});fe.configuration.extensions.push(J),fe.configuration.extensions.push(createServerObserverExtension({mdManager,schema,shadowRef:ue,contentRoot:L,getCurrentBranch:()=>st?.getLastKnownBranch()??null,resolveEmbed:ae}))}catch(e){throw releaseServerLock(te),e}let Ie=null,Re=new Map,ze=[];function Be(e,t){let s=resolve(e,`rescue`),g=resolve(s,`${t}${getDocExtension(t)}`);return g.startsWith(`${s}/`)?g:null}function Ve(e){let t=fe.documents.get(e);if(!t)return null;let{frontmatter:s,body:g}=stripFrontmatter(t.getText(`source`).toString());return prependFrontmatter(s,g)}let Ue=(e,t)=>applyExternalChange(fe,e,t,ae),We=e=>{if(!e)return;let t=`[[${e}]]`;for(let[s]of fe.documents){if(isSystemDoc(s)||isConfigDoc(s))continue;let g=fe.documents.get(s);if(!g)continue;let S=g.getText(`source`).toString();if(S.includes(t))try{g.transact(()=>{applyDiskContentToDoc(g,S,ae,s)},FILE_WATCHER_ORIGIN)}catch(t){J.error({err:t,docName:s,assetBasename:e},`[asset-event] failed to re-render ${s} for asset basename ${e}`)}}},Ge=null,Ke=e=>{e&&(Ge===null&&(Ge=new Set,setImmediate(()=>{let e=Ge;if(Ge=null,e)try{for(let t of e)We(t)}catch(t){J.error({err:t,basenames:[...e]},`[asset-event] dedup rerender pass crashed`)}})),Ge.add(e))};function Xe(e){switch(e.kind){case`rename`:return e.newDocName;case`asset-create`:case`asset-delete`:return e.relativePath;default:return e.docName}}async function $e(e){try{switch(e.kind){case`create`:J.info({docName:e.docName},`[reconcile] create: ${e.docName}`),se.updateDocumentFromMarkdown(e.docName,e.content),Pe(),ce.updateDocumentFromMarkdown(e.docName,e.content),De(`files`),De(`backlinks`),De(`graph`),De(`tags`);break;case`update`:{let{docName:t,content:s}=e,g=fe.documents.get(t);if(!g){se.updateDocumentFromMarkdown(t,s),Pe(),ce.updateDocumentFromMarkdown(t,s),De(`backlinks`),De(`graph`),De(`tags`);return}let S=getReconciledBase(t)??``,w=Ve(t)??S,E=reconcile({docName:t,base:S,ours:w,theirs:s}),D=contentHash(S).slice(0,6),O=contentHash(w).slice(0,6),k=contentHash(s).slice(0,6);switch(J.info({docName:t,base:D,ours:O,theirs:k,result:E.kind},`[reconcile] ${t} base=${D} ours=${O} theirs=${k} result=${E.kind}`),E.kind){case`noop`:se.updateDocumentFromMarkdown(t,s),Pe(),ce.updateDocumentFromMarkdown(t,s),De(`backlinks`),De(`graph`),De(`tags`);break;case`clean`:try{Ue(t,E.newContent),setReconciledBase(t,E.newContent),incrementReconcile(),se.updateDocumentFromMarkdown(t,s),Pe(),ce.updateDocumentFromMarkdown(t,s),De(`backlinks`),De(`graph`),De(`tags`)}catch(e){J.error({err:e,docName:t},`[reconcile] failed to apply clean content to Y.Doc for ${t}`),setReconciledBase(t,s)}break;case`merged`:try{Ue(t,E.newContent),setReconciledBase(t,E.newContent),incrementReconcile(),se.updateDocumentFromMarkdown(t,s),Pe(),ce.updateDocumentFromMarkdown(t,s),De(`backlinks`),De(`graph`),De(`tags`)}catch(e){J.error({err:e,docName:t},`[reconcile] failed to apply merged content to Y.Doc for ${t}`),setReconciledBase(t,s)}break;case`conflicts`:try{Ue(t,E.newContent),setReconciledBase(t,E.newContent),incrementReconcile(),incrementConflict(),se.updateDocumentFromMarkdown(t,s),Pe(),ce.updateDocumentFromMarkdown(t,s),De(`backlinks`),De(`graph`),De(`tags`)}catch(e){J.error({err:e,docName:t},`[reconcile] failed to apply conflict content to Y.Doc for ${t}`),setReconciledBase(t,s)}break;case`refused`:{incrementConflict();let e=g.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,E.reason);break}}break}case`delete`:{let{docName:t}=e,s=fe.documents.get(t);if(!s){se.deleteDocument(t),Pe(),ce.deleteDocument(t),De(`files`),De(`backlinks`),De(`graph`),De(`tags`);return}let g=getReconciledBase(t)??``,S=Ve(t)??``,w=S!==g;if(w&&ue.current){let e=ue.current,s=st?.getLastKnownBranch()??`main`;queueMicrotask(()=>{saveInMemoryCheckpoint(e,L??``,{kind:`external-change-rescue`,docName:t,contents:S,label:`External change recovered @ ${new Date().toISOString()}`,branch:s,metadata:{incomingDiskSha:``}}).then(()=>{incrementRescueBuffer(),J.info({docName:t},`[reconcile] rescue checkpoint saved (delete): ${t}`)}).catch(e=>{J.error({docName:t,err:e},`[reconcile] rescue checkpoint write failed: ${t}`)})})}s.getMap(`lifecycle`).set(`status`,`deleted-upstream`),deleteReconciledBase(t),se.deleteDocument(t),Pe(),ce.deleteDocument(t),J.info({docName:t,isDirty:w},`[reconcile] delete: ${t} (dirty=${w})`),fe.closeConnections(t),await Te(s),De(`files`),De(`backlinks`),De(`graph`),De(`tags`);break}case`rename`:{let{oldDocName:t,newDocName:s,content:g}=e,S=fe.documents.get(t);if(deleteReconciledBase(t),setReconciledBase(s,g),se.renameDocument(t,s,g),Pe(),ce.renameDocument(t,s,g),S){let e=S.getMap(`lifecycle`);e.set(`status`,`renamed`),e.set(`newPath`,s)}J.info({oldDocName:t,newDocName:s},`[reconcile] rename: ${t} → ${s}`),De(`files`),De(`backlinks`),De(`graph`),De(`tags`);break}case`conflict`:{let{docName:t}=e,s=fe.documents.get(t);if(!s)return;let g=s.getMap(`lifecycle`);g.set(`status`,`conflict`),g.set(`reason`,`conflict-markers`),J.info({docName:t},`[reconcile] conflict markers detected: ${t}`);break}case`asset-create`:ne.add(e.relativePath),De(`files`),Ke(basename(e.relativePath));break;case`asset-delete`:ne.remove(e.relativePath),De(`files`),Ke(basename(e.relativePath));break;default:assertNeverDiskEvent(e)}}catch(t){let s=Xe(e);J.error({err:t,kind:e.kind,label:s},`[reconcile] failed to handle ${e.kind} for ${s}`)}}let nt=[];async function rt(e){if(isBatchInProgress()){nt.push(e);return}await $e(e)}async function it(){let e=nt.splice(0,nt.length);for(let t of e)await $e(t)}let at=null,st=null,vt=null,Tt=null;async function Et(e){if(fe.documents.size===0)return;let t=!1,s=new Promise(e=>{fe.configuration.extensions.push({async afterUnloadDocument({instance:s}){!t&&s.getDocumentsCount()===0&&(t=!0,e())}})}),g=Array.from(fe.documents.keys());fe.closeConnections(),fe.flushPendingStores();for(let e of fe.documents.values())e.getConnectionsCount()===0&&fe.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 S,w=new Promise((s,w)=>{S=setTimeout(()=>{t=!0;let s=Array.from(fe.documents.keys()),S=[],E=[];if(ue.current){for(let e of s)if(!(isSystemDoc(e)||isConfigDoc(e)))try{let t=Ve(e);if(t===null){J.warn({docName:e},`[rescue] skipping ${e} — document dropped from map mid-rescue`),E.push(e);continue}let s=Be(ue.current.gitDir,e);if(!s){J.warn({docName:e,gitDir:ue.current.gitDir},`[rescue] path-traversal guard rejected docName: ${e}`),E.push(e);continue}mkdirSync(dirname(s),{recursive:!0}),writeFileSync(s,t,`utf-8`),incrementRescueBuffer(),S.push(e),J.info({docName:e},`[rescue] rescue buffer saved on flush timeout: ${e}`)}catch(t){E.push(e),J.error({err:t,docName:e},`[rescue] failed to write rescue buffer for ${e}`)}}else J.warn({stillLoadedCount:s.length},`[rescue] shadow repo unavailable at flush timeout — ${s.length} doc(s) will be lost: [${s.join(`, `)}]`),E.push(...s);let D=S.length>0||E.length>0?` — rescued [${S.join(`, `)}]${E.length>0?`, lost [${E.join(`, `)}]`:``}`:``;w(Error(`flushAllStoresAndWait timeout after ${e}ms — ${s.length}/${g.length} docs did not unload: [${s.join(`, `)}]${D}`))},e)});try{await Promise.race([s,w])}finally{S!==void 0&&clearTimeout(S)}}async function Dt(){return Tt||(Tt=(async()=>{let e=Date.now(),t=[];we=!0,Me!==null&&(clearTimeout(Me),Me=null);let g,S=await Promise.race([Ft.then(()=>`completed`,e=>(J.debug({err:e},`[server] init incomplete during shutdown`),`failed`)),new Promise(e=>{g=setTimeout(()=>e(`timeout`),5e3)})]);g!==void 0&&clearTimeout(g),S===`timeout`&&J.warn({},`[server] init did not complete within 5s during shutdown`);let w=fe.documents.size;try{try{try{st&&=(await st.unsubscribe(),null),at&&=(await at.unsubscribe(),null);for(let{docName:e,cleanup:t}of ze)try{await t()}catch(t){J.warn({err:t,docName:e},`[server] failed to stop config-file-watcher for ${e}`)}ze.length=0}catch(e){t.push({phase:`watcher-unsubscribe`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-1 watcher unsubscribe failed`)}try{ge?.destroy(),ve?.destroy(),Ie&&=(await Ie.disconnect(),null);for(let[e,t]of Re)try{await t.disconnect()}catch(t){J.warn({err:t,docName:e},`[server] failed to disconnect ${e} during shutdown`)}Re.clear()}catch(e){t.push({phase:`cc1-teardown`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-1b CC1 teardown failed`)}try{await me.closeAll()}catch(e){t.push({phase:`agent-session-drain`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-2 agent session drain failed`)}try{await Et(B)}catch(e){t.push({phase:`flush-all-stores`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-3 flush failed`)}let e;try{await Promise.race([(async()=>{await de.flushPendingGitCommit(),await de.waitForPendingCommits()})(),new Promise((t,s)=>{e=setTimeout(()=>s(Error(`L2 git flush timeout`)),B)})])}catch(e){t.push({phase:`git-commit-flush`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-4 git commit flush failed`)}finally{e!==void 0&&clearTimeout(e)}try{vt&&=(await vt.destroy(),null)}catch(e){t.push({phase:`sync-engine-stop`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown sync-engine-stop failed`)}}finally{if(ue.current){try{let e=(await esm_default({baseDir:s,timeout:{block:5e3}}).revparse(`HEAD`)).trim();e&&writeFileSync(resolve(ue.current.gitDir,`last-known-head`),e,`utf-8`)}catch{}try{destroyShadowRepo(ue.current)}catch(e){t.push({phase:`shadow-repo-release`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-5 destroyShadowRepo failed`)}}let g=Date.now()-e;t.length===0?J.info({documentCount:w,durationMs:g},`[server] shutdown flushed ${w} documents in ${g}ms`):J.warn({documentCount:w,durationMs:g,phaseErrors:t},`[server] shutdown flushed ${w} documents in ${g}ms with ${t.length} phase error(s)`)}}finally{try{releaseServerLock(te)}catch(e){t.push({phase:`server-lock-release`,error:e instanceof Error?e.message:String(e)}),J.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)})}}})(),Tt)}let jt=[];async function Mt(){try{ye=await loadPrincipal(t),J.info({principalId:ye.id},`[server] principal loaded`)}catch(e){J.warn({err:e},`[server] principal load failed — browser writes will use SERVICE_WRITER`)}if(!ue.current)try{ue.current=await initShadowRepo(s),J.info({gitDir:ue.current.gitDir},`[server] history repo initialized at ${ue.current.gitDir}`)}catch(e){J.error({err:e},`[server] history repo init failed`),jt.push(`shadow-repo`)}if(ue.current)try{await shadowGit(ue.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`)){J.warn({},`[server] history repo appears corrupted — reinitializing`);try{ue.current=await initShadowRepo(s)}catch(e){J.error({err:e},`[server] history repo reinit failed`),ue.current=void 0,jt.includes(`shadow-repo`)||jt.push(`shadow-repo`)}}else J.error({err:e},`[server] history repo check failed (transient?)`)}if(ue.current)try{let e=resolve(ue.current.gitDir,`last-known-head`),t=null;try{t=readFileSync(e,`utf-8`).trim()||null}catch{}let g=null;try{g=(await esm_default({baseDir:s,timeout:{block:1e4}}).revparse(`HEAD`)).trim()||null}catch{}if(g!==null){if(g!==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{}J.info({lastKnownHead:t,currentHead:g,branch:e},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${g}, action=import`);try{await commitUpstreamImport(ue.current,L??``,t,g,e),incrementUpstreamImport()}catch(e){J.warn({err:e},`[head-drift] commitUpstreamImport failed — continuing`)}}else J.info({currentHead:g},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${g}, action=noop`);try{writeFileSync(e,g,`utf-8`)}catch(e){J.warn({err:e},`[head-drift] failed to write last-known-head`)}}}catch(e){J.warn({err:e},`[head-drift] check failed — continuing`)}try{let e=recoverPendingManagedRename(t);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;J.warn({journalVersion:e.journal.version,fromPath:t,toPath:s,restoredDocNames:e.restoredDocNames},`[managed-rename] recovered pending rename ${t} -> ${s}`)}}catch(e){J.error({err:e},`[server] managed rename recovery failed`),jt.push(`managed-rename-recovery`)}try{let e=cleanupOrphanUploadTempfiles(t);(e.deleted>0||e.errors>0)&&J.info({scanned:e.scanned,deleted:e.deleted,errors:e.errors},`[upload-tempfile-sweep] swept ${e.deleted} orphan tempfile(s)`)}catch(e){J.error({err:e},`[server] upload-tempfile sweep failed`),jt.push(`upload-tempfile-sweep`)}try{Ie=await fe.openDirectConnection(SYSTEM_DOC_NAME),ge?.emitServerInfo(ee,getActiveBranch())}catch(e){J.error({err:e},`[server] failed to open __system__ direct connection — CC1 push disabled`),jt.push(`cc1-push`)}for(let e of CONFIG_DOC_NAMES)try{let t=await fe.openDirectConnection(e);Re.set(e,t)}catch(t){J.error({err:t,docName:e},`[server] failed to open ${e} direct connection — config bind degraded`),jt.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,k)]]);for(let t of CONFIG_DOC_NAMES){let s=e.get(t);if(s)try{J.info({docName:t,path:s},`[config-file-watcher] starting`);let e=await startConfigFileWatcher(s,e=>{let s=fe.documents.get(t);J.info({docName:t,hasDocument:s!==void 0,contentLength:e.length},`[config-file-watcher] file changed`);let g=applyExternalConfigChange(s??null,t,e,de.configPersistenceCtx);if(J.info({docName:t,outcome:g},`[config-file-watcher] applyExternalConfigChange outcome`),t===`__config__/project`||t===`__local__/project`){let e=Y();vt?.setEnabled(e).catch(t=>{J.warn({err:t,enabled:e},`[sync] failed to apply autoSync.enabled from config`)})}});ze.push({docName:t,cleanup:e}),J.info({docName:t,path:s},`[config-file-watcher] started`)}catch(e){J.warn({err:e,docName:t,path:s},`[config-file-watcher] failed to start for ${t}`),jt.push(`config-file-watcher:${t}`)}}try{let e=resolve(t,`.okignore`),g=resolve(s,`.gitignore`),S=J;S.info({okignorePath:e,gitignorePath:g},`[ignore-watcher] starting multi-path watcher for .okignore + .gitignore`);let w=await startMultiPathConfigFileWatcher([e,g],(t,g)=>{(async()=>{if(t===e)try{let e=applyExternalConfigChange(fe.documents.get(`__config__/okignore`)??null,CONFIG_DOC_NAME_OKIGNORE,g,de.configPersistenceCtx);S.info({docName:CONFIG_DOC_NAME_OKIGNORE,outcome:e},`[ignore-watcher] applyExternalConfigChange outcome`)}catch(e){S.error({err:e,changedPath:relative(s,t)},`[ignore-watcher] applyExternalConfigChange failed; rebuild proceeds independently`)}let w=await oe.rebuildIgnorePatterns();if(w.ok)S.info({changedPath:relative(s,t),patternCount:w.patternCount,nestedFileCount:w.nestedFileCount,durationMs:w.durationMs},`[ignore-watcher] rebuild succeeded — broadcasting files channel`),ge?.signal(`files`);else{let e=relative(s,t)||`.`;S.warn({changedPath:e,error:w.error.message},`[ignore-watcher] rebuild failed — emitting config-ignore-nested-error`),ge?.emitConfigIgnoreNestedError(e,w.error.message)}})().catch(e=>{S.error({err:e,changedPath:relative(s,t)||`.`},`[ignore-watcher] handler threw`)})});ze.push({docName:`__ignore-files__`,cleanup:w}),S.info({okignorePath:e,gitignorePath:g},`[ignore-watcher] multi-path watcher started`)}catch(e){J.warn({err:e,projectDir:s,contentDir:t},`[ignore-watcher] failed to start multi-path watcher`),jt.push(`ignore-files-watcher`)}let g=resolveGitDir(s),S=g?readBranchFromHead(g)??`main`:`main`;switchReconciledBaseScope(S),se.switchBranch(S);try{{let e=getActiveBranch();try{if(await se.loadFromDisk(e)){let t=await se.reconcileWithDisk(e);(t.added>0||t.updated>0||t.deleted>0)&&J.info(t,`[backlinks] startup reconcile: offline changes applied`)}else await se.rebuildFromDisk(e);se.saveToDisk().catch(t=>{console.warn(`[backlinks] Failed to persist startup cache for ${e}:`,t)})}catch(t){J.error({err:t,branch:e},`[backlinks] startup init failed; index will populate incrementally via watcher`)}}at=await startWatcher(t,rt,oe),ce.init();let e=0;try{seedBasenameIndex({contentDir:t,contentFilter:oe,basenameIndex:ne,onSkip:(t,s,g)=>{e++,J.warn({reason:t,code:s,path:g},`[basename-index] skipped entry during seed (${t}${s?` ${s}`:``})`)}}),e>0&&(J.warn({count:e},`[basename-index] startup seed completed with ${e} skipped entries — embeds under inaccessible subtrees will not resolve`),jt.push(`basename-index-partial`))}catch(e){J.error({err:e},`[basename-index] startup seed failed`),jt.push(`basename-index`)}}catch(e){J.error({err:e},`[server] disk bridge watcher failed to start`),jt.push(`file-watcher`)}try{st=await startHeadWatcher(s,async({trigger:e})=>{if(J.info({trigger:e},`[batch] begin trigger=${e}`),incrementBatch(),fe.flushPendingStores(),await de.flushPendingGitCommit(),setBatchInProgress(!0),ue.current){let e=getActiveBranch(),t=resolveGitDir(s),g=t?readBranchFromHead(t)??e:e,S=[];for(let[e,t]of fe.documents){if(isSystemDoc(e)||isConfigDoc(e))continue;let s=null;if(t.transact(()=>{s=Ve(e)},PARK_SNAPSHOT_ORIGIN),s===null)continue;let g=getReconciledBase(e)??s;S.push({docName:e,markdown:s,diskSnapshot:g})}if(S.length>0)try{let t=await parkBranch(ue.current,e,SERVICE_WRITER.id,S,g);t&&(incrementPark(),J.info({count:S.length,branch:e,sha:t.slice(0,8)},`[history] parked ${S.length} docs on ${e} → ${t.slice(0,8)}`))}catch(e){J.error({err:e},`[shadow] park failed`)}}},async e=>{let s=nt.length,g=e.newBranch??`main`;if(J.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`)setBatchInProgress(!1),await it(),await de.flushDeferredStores(`within-branch`);else{incrementBranchSwitch(),nt.splice(0,nt.length),switchReconciledBaseScope(g),Me!==null&&(clearTimeout(Me),Me=null),se.switchBranch(g),oe.rebuildDirCount();try{let e=0;ne.clear(),seedBasenameIndex({contentDir:t,contentFilter:oe,basenameIndex:ne,onSkip:(t,s,S)=>{e++,J.warn({reason:t,code:s,path:S,branch:g},`[basename-index] skipped entry during branch-switch reseed (${t}${s?` ${s}`:``})`)}}),e>0&&(J.warn({count:e,branch:g},`[basename-index] branch-switch reseed completed with ${e} skipped entries — embeds under inaccessible subtrees will not resolve on this branch`),jt.includes(`basename-index-partial`)||jt.push(`basename-index-partial`))}catch(e){J.error({err:e,branch:g},`[basename-index] branch-switch reseed failed`)}for(let[e,s]of fe.documents)if(!(isSystemDoc(e)||isConfigDoc(e)))try{let S=safeContentPath(e,t);if(!existsSync(S)){let t=getReconciledBase(e)??``,S=Ve(e)??``;if(S!==t&&ue.current){let t=ue.current;queueMicrotask(()=>{saveInMemoryCheckpoint(t,L??``,{kind:`external-change-rescue`,docName:e,contents:S,label:`External change recovered @ ${new Date().toISOString()}`,branch:g,metadata:{incomingDiskSha:``}}).then(()=>{incrementRescueBuffer(),J.info({docName:e},`[reconcile] rescue checkpoint saved on branch switch: ${e}`)}).catch(t=>{J.error({docName:e,err:t},`[reconcile] rescue checkpoint write failed: ${e}`)})})}s.getMap(`lifecycle`).set(`status`,`deleted-upstream`),J.info({docName:e,branch:g},`[branch-switch] tombstone: ${e} (not on ${g})`);continue}let w=readFileSync(S,`utf-8`);Ue(e,w),setReconciledBase(e,w),J.info({docName:e},`[branch-switch] reset: ${e}`)}catch(t){J.error({err:t,docName:e},`[branch-switch] failed to reset ${e}`)}J.info({branch:g,docCount:fe.documents.size},`[branch-switch] loaded branch ${g} (${fe.documents.size} docs)`);try{if(await se.loadFromDisk(g)){let e=await se.reconcileWithDisk(g);(e.added>0||e.updated>0||e.deleted>0)&&J.info(e,`[backlinks] branch-switch reconcile for ${g}`)}else await se.rebuildFromDisk(g);se.saveToDisk(g).catch(e=>{console.warn(`[backlinks] Failed to persist branch cache for ${g}:`,e)})}catch(e){J.error({err:e,branch:g},`[backlinks] branch-switch rebuild failed; backlinks may be stale`)}if(ce.init(),ue.current&&e.batchKind===`cross-branch`){let e=0;for(let[t]of fe.documents)if(!(isSystemDoc(t)||isConfigDoc(t)))try{let s=await readParkedState(ue.current,g,SERVICE_WRITER.id,t);if(!s||s.markdown===s.diskSnapshot)continue;let S=getReconciledBase(t);if(!S)continue;let w=reconcile({docName:t,base:s.diskSnapshot,ours:s.markdown,theirs:S});switch(w.kind){case`merged`:case`clean`:Ue(t,w.newContent),setReconciledBase(t,w.newContent),e++;break;case`conflicts`:Ue(t,w.newContent),setReconciledBase(t,w.newContent),incrementConflict(),e++;break;case`noop`:case`refused`:break}}catch(e){J.error({err:e,docName:t},`[branch-switch] restore WIP failed for ${t}`)}e>0&&J.info({count:e,branch:g},`[branch-switch] restored ${e} parked docs on ${g}`)}if(e.oldBranch?.startsWith(`detached-`)&&ue.current)try{let t=shadowGit(ue.current),s=(await t.raw(`for-each-ref`,`refs/wip/${e.oldBranch}/`,`--format=%(refname)`)).trim();if(s){for(let e of s.split(`
1609
- `))e&&await t.raw(`update-ref`,`-d`,e);J.info({context:e.oldBranch},`[branch-switch] cleaned up detached context ${e.oldBranch}`)}}catch(e){J.error({err:e},`[branch-switch] detached cleanup failed`)}setBatchInProgress(!1),await de.flushDeferredStores(`discard-stale`),ge?.emitBranchSwitched(g)}if(e.headMoved&&e.newHead&&ue.current&&s>0){let t=L??`.`;try{let s=await commitUpstreamImport(ue.current,t,e.oldHead,e.newHead,g);incrementUpstreamImport(),J.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){J.error({err:e},`[shadow] upstream-import failed`)}}})}catch(e){J.error({err:e},`[server] HEAD watcher failed to start`),jt.push(`head-watcher`)}let w=H?.[0]??`open-knowledge`,E=[`-c`,`credential.helper=!${H&&H.length>1?H.join(` `):w} auth git-credential`];try{vt=new SyncEngine({projectDir:s,contentDir:t,contentFilter:oe,contentRoot:L,syncEnabled:Y(),credentialArgs:E,cc1Broadcaster:ge,setBatchInProgress:e=>{setBatchInProgress(e),e||de.flushDeferredStores(`within-branch`).catch(e=>{J.error({err:e},`[persistence] deferred store drain failed after sync batch`)})},onStateChange:e=>{J.info({state:e},`[sync] state → ${e}`)},onAutoDisable:async e=>{J.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||J.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 vt.start()}catch(e){J.warn({err:e},`[server] SyncEngine failed to start — sync disabled`),vt=null}}let Ft=Mt();return{hocuspocus:fe,sessionManager:me,cc1Broadcaster:ge,agentFocusBroadcaster:_e,agentPresenceBroadcaster:ve,contentFilter:oe,basenameIndex:ne,serverInstanceId:ee,destroy:Dt,ready:Ft,degraded:jt,lockDir:te,get syncEngine(){return vt}}}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 g=resolve(e,t);try{existsSync(g)&&statSync(g).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),g={"ok.worktree.kind":t};return s!==null&&(g[`ok.worktree.gitdir`]=normalizeFsPath(s)),withSpan(`ok.boot`,{attributes:g},async()=>bootServerInner(e))}async function bootServerInner(e){let t=e.skipAutoInit??!1,s=e.attachUiSibling??!0,g=e.idleShutdownMs,S=e.log??getLogger(`boot`),w=process.env.OK_LOCK_KIND===`mcp-spawned`||process.env.OK_LOCK_KIND===`interactive`?process.env.OK_LOCK_KIND:void 0,E=e.lockKind??w??`interactive`,{createServer:D}=await import(`node:http`),{updateServerLockPort:O}=await import(`./server-lock-D7DXNVql-B5nINglj.mjs`).then(e=>e.a),k=!1;if(!t&&e.autoInitFn)try{k=!!await e.autoInitFn()}catch(e){S.warn({err:e},`autoInitFn failed`)}let j=e.projectDir??e.contentDir,F=resolve(j,`.ok`);if(!existsSync(resolve(F,`config.yml`)))throw new MissingOkConfigError(existsSync(F)?`config`:`okdir`,j);existsSync(resolve(F,`.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 L=findLegacyRuntimeFiles(F);L.length>0&&console.warn(`[boot] Found legacy runtime files at .ok/${L.join(`, `)}. Delete .ok/ and re-init — these files moved to .ok/${LOCAL_DIR}/.`);let B=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:E,skipStateManifestCheck:e.skipStateManifestCheck}),{hocuspocus:H,destroy:q,ready:J,degraded:Y,lockDir:ee,sessionManager:te,agentFocusBroadcaster:ne,agentPresenceBroadcaster:ae}=B,oe=(()=>{let t=e.host??`localhost`;return t===`0.0.0.0`||t===`::`?`localhost`:t.includes(`:`)&&!t.startsWith(`[`)?`[${t}]`:t})(),se=e.port??0,ce=createMcpHttpHandler({contentDir:e.contentDir,projectDir:e.projectDir??e.contentDir,config:e.config,getServerUrl:()=>`http://${oe}:${se}`,log:S}),ue=D(),de=mountMcpAndApi({httpServer:ue,hocuspocus:H,mcpHttpHandler:ce,log:S,sessionManager:te,agentFocusBroadcaster:ne,agentPresenceBroadcaster:ae,keepaliveGraceMs:e.keepaliveGraceMs}),fe=null;g!==null&&(fe=attachIdleShutdown({httpServer:ue,thresholdMs:g??DEFAULT_IDLE_THRESHOLD_MS,log:S,onShutdown:(e.idleShutdownHandler??(e=>async()=>{await e()}))(async()=>{await q()})})),await new Promise((t,s)=>{let g=e=>s(e);ue.once(`error`,g),ue.listen(e.port,e.host,()=>{ue.removeListener(`error`,g),t()})});let me=ue.address(),ge=typeof me==`object`&&me?me.port:e.port??0;if(se=ge,O(ee,ge),s&&e.spawnUiSiblingFn)try{await e.spawnUiSiblingFn({lockDir:ee,log:S})}catch(e){S.warn({err:e},`spawnUiSiblingFn failed`)}let _e=!1,ve=async(e,t)=>{let s;try{await Promise.race([t(),new Promise((t,g)=>{s=setTimeout(()=>{g(Error(`${e} timed out after ${DESTROY_STEP_TIMEOUT_MS}ms`))},DESTROY_STEP_TIMEOUT_MS),s.unref?.()})])}finally{s!==void 0&&clearTimeout(s)}};return{httpServer:ue,destroy:async()=>{if(_e)return;_e=!0;let e=[],t=async(t,s)=>{try{await ve(t,s)}catch(s){e.push(s),S.warn({err:s,step:t},`bootServer destroy step failed`)}};try{fe?.detach()}catch(t){e.push(t),S.warn({err:t,step:`idleHandle.detach`},`bootServer destroy step failed`)}if(await t(`mount.shutdown`,()=>de.shutdown()),await t(`mcpHttpHandler.close`,()=>ce.close()),await t(`mount.wss.close`,()=>new Promise((e,t)=>{de.wss.close(s=>s?t(s):e())})),await t(`httpServer.closeAllConnections`,async()=>{ue.closeAllConnections?.()}),await t(`httpServer.close`,()=>new Promise((e,t)=>{ue.close(s=>s&&s.code!==`ERR_SERVER_NOT_RUNNING`?t(s):e())})),await t(`destroyHocuspocus`,()=>q()),await t(`shutdownTelemetry`,()=>shutdownTelemetry()),e.length>0)throw AggregateError(e,`bootServer destroy completed with errors`)},lockDir:ee,contentDir:e.contentDir,port:ge,ready:J,degraded:Y,didAutoInit:k,serverInstance:B}}const ConfigSchema=ConfigSchema$1;function detectClaudeDesktopPresence(e={}){let t=e.home??homedir(),s=e.platformName??process.platform,g=e.env??process.env;return s===`darwin`?existsSync(join(t,`Library`,`Application Support`,`Claude`)):s===`win32`?existsSync(join(g.APPDATA??join(t,`AppData`,`Roaming`),`Claude`)):!1}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`);if(existsSync(s)||await isInsideExistingWorkTree(t))return{didInit:!1};let g=``;try{g=(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(resolve(s,`HEAD`)))throw new ProjectGitInitError(`git init reported success but ${s}/HEAD is missing (partial init detected)`,g);return 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),g=0;g<32;g+=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 g=dirname(t);if(g===t)return;t=g}}export{buildSkillZip as $,LATEST_PROTOCOL_VERSION as $n,mountMcpAndApi as $t,ROLLBACK_ORIGIN as A,safeContentPath as An,getLogger as At,TagIndex as B,startWatcher as Bn,installUserSkill as Bt,MCP_SERVER_NAME as C,rewriteMarkdownLinksForDocumentRename as Cn,ensureProjectGit as Ct,OBSERVER_SYNC_ORIGIN as D,runCloneSubprocess as Dn,gcCheckpointRefs as Dt,MissingOkConfigError as E,runAuthStatusSubprocess as En,formatContributors as Et,STARTER_TEMPLATES as F,seedBasenameIndex as Fn,incrementCollabSocketFilteredError as Ft,applySeed as G,validateCloneInputs as Gn,isLoopbackAddress as Gt,acquireUiLock as H,updateLastKnownHash as Hn,isAllowedWorkspaceHostHeader as Ht,STATE_MANIFEST_FILENAME as I,setActiveSpanAttributes as In,incrementServerObserverFire as It,attachIdleShutdown as J,withSpanSync as Jn,isSystemDoc as Jt,assertCompatibleStateManifest as K,validateSkillZip as Kn,isPairedWriteOrigin as Kt,SeedPrerequisiteError as L,shadowGit as Ln,initShadowRepo as Lt,SKILL_INSTALL_EVENTS_FILE_REL as M,safetyCheckpoint as Mn,getMetrics as Mt,STARTER_FOLDERS as N,saveInMemoryCheckpoint as Nn,getTracer as Nt,PinoLogger as O,runDeviceFlowSubprocess as On,getCurrentMcpLogger as Ot,STARTER_FOLDER_FRONTMATTER_FILENAME as P,saveVersion as Pn,handleCollabSocketError as Pt,buildReadResult as Q,JSONRPCMessageSchema as Qn,loggerFactory as Qt,SeedRootDirError as R,shutdownTelemetry as Rn,initTelemetry as Rt,MAX_AGENT_SESSIONS as S,resolvePackageVersion as Sn,detectProjectShape as St,McpLogger as T,runAuthReposSubprocess as Tn,extractWikiLinksFromMarkdown as Tt,applyAgentMarkdownWrite as U,updateUiLockPort as Un,isConfigDoc as Ut,UiLockCollisionError as V,toBroadcasterKey as Vn,isAllowedApiOrigin as Vt,applyExternalChange as W,validateAgentId as Wn,isHocuspocusAuthRejectionReason as Wt,buildAndOpenSkill as X,writeTargetVersion as Xn,listRescueCheckpoints as Xt,bootServer as Y,writeStateManifest as Yn,lastKnownHash as Yt,buildExecResult as Z,writeTracker as Zn,loadPrincipal as Zt,HocuspocusAuthRejection as _,removeLastKnownHash as _n,createPersistenceExtension as _t,AgentPresenceBroadcaster as a,readBranchFromHead as an,writeConfigPatch as ar,commitWip as at,LOG_MD_TEMPLATE as b,resolveContentDir as bn,createTestLogger as bt,BacklinkIndex as c,readStateManifest as cn,contentHash as ct,ConfigSchema as d,readUiLock as dn,createAssetServeMiddleware as dt,parseHocuspocusAuthToken as en,isInitializedNotification as er,buildStarterFolderFrontmatterYaml as et,DEFAULT_CHECKPOINT_RETENTION as f,reconcile as fn,createContentFilter as ft,HOCUSPOCUS_AUTH_REJECTION_REASONS as g,releaseUiLock as gn,createMcpHttpHandler as gt,GIT_UPSTREAM_WRITER as h,registerWrite as hn,createLiveDerivedIndexExtension as ht,AgentFocusBroadcaster as i,readAllTargets as in,resolveConfigPath as ir,commitUpstreamImport as it,SERVICE_WRITER as j,safeSubdir as jn,getMeter as jt,ProjectGitInitError as k,runWithMcpLogger as kn,getLocalDir as kt,CC1Broadcaster as l,readTargetRecordedAt as ln,contributorCount as lt,FILE_WATCHER_ORIGIN as m,recordSkillInstallEvent as mn,createExternalChangeHandler as mt,AGENT_ID_RE as n,pathToDocName as nn,isJSONRPCResultResponse as nr,classifyEvents as nt,AgentSessionCapacityError as o,readServerPackageVersion as on,GitDirAccessError as or,commitWipFromTree as ot,FILE_SYSTEM_WRITER as p,recordContributor as pn,createContentFilterAsync as pt,assertNeverDiskEvent as q,withSpan as qn,isSelfWrite as qt,AGENT_WRITE_ORIGIN as r,planSeed as rn,readConfigSafely as rr,clearContributors as rt,AgentSessionManager as s,readSkillInstallStateSnapshot as sn,MalformedGitPointerError as sr,containsConflictMarkers as st,AGENT_ID_MAX_LEN as t,parseKeepaliveConnectionId as tn,isJSONRPCRequest as tr,buildWipTree as tt,CONFLICT_MARKER_RE as u,readTargetVersion as un,createApiExtension as ut,HocuspocusAuthTokenSchema as v,resetMetrics as vn,createServer$1 as vt,MISSING_OK_CONFIG_MESSAGE as w,rewriteWikiLinksForDocumentRename as wn,evictStaleTrackerEntries as wt,MANAGED_RENAME_ORIGIN as x,resolveLockDir as xn,detectClaudeDesktopPresence as xt,LIVE_DERIVED_INDEX_DEBOUNCE_MS as y,resolveBundledSkillDir as yn,createServerObserverExtension as yt,StateManifestError as z,splitMarkdownBlocks as zn,installTestLoggers as zt};
1610
- //# sourceMappingURL=dist-D4M20vXU.mjs.map
1619
+ `),s=[],g=!1,S=``;for(let e of t){let t=/^\s{0,3}([`~]{3,})/.exec(e);if(t){g?RegExp(`^\\s{0,3}${S[0]==="`"?"`":`~`}{${S.length},}\\s*$`).test(e)&&(g=!1,S=``):(g=!0,S=t[1]);continue}if(g)continue;let w=stripInlineCodeSpans(e);for(TAG_VALUE_RE.lastIndex=0;;){let e=TAG_VALUE_RE.exec(w);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:g}=stripFrontmatter(t),S=extractFrontmatterTags(s?unwrapFrontmatterFences(s):``),w=extractInlineTagsFromBody(g),E=new Set([...S,...w]),D=new Set;for(let e of E)for(let t of expandTagToHierarchy(e))D.add(t);this.applyDocSnapshot(e,E,D)}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 g of t){let t=this.state.byDocLiteral.get(g);if(!t)continue;let S=tagsMatchingPrefix(t,e);s.push({docName:g,matchingTags:[...S].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 g=t;for(;g>0;)s.add(e.slice(0,g)),g=e.indexOf(`/`,g+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 g=this.state.byDoc.get(e)??new Set;for(let t of g){if(s.has(t))continue;let g=this.state.byTag.get(t);g&&(g.delete(e),g.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 g of s){let s=join(e,g.name);if(g.isDirectory()){let e=relative(this.contentDir,s);if(this.contentFilter&&e&&this.contentFilter.isDirExcluded(e))continue;this.walkContentDir(s,t);continue}if(!g.isFile()||!isSupportedDocFile(g.name))continue;let S=relative(this.contentDir,s);this.contentFilter?.isExcluded(S)||t.push({docName:stripDocExtension(S),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:g=!0,debounce:S=2e3,maxDebounce:w=1e4,gitEnabled:E=!0,commitDebounceMs:D=3e4,wipRef:O=`refs/wip/main`,configHomedirOverride:k,enableTestRoutes:j=!1,shadowRepo:F,contentRoot:L,destroyTimeoutMs:B=1e4,localOpCliArgs:H,skipStateManifestCheck:q=!1}=e,J=getLogger(`server`);function Y(){let e=readConfigSafely({absPath:resolveConfigPath(`project-local`,s),sideline:!1,warn:e=>J.warn({message:e},`[config] could not read project-local config`)}),t=e.value.autoSync?.enabled;return t==null?(e.valid||J.warn({},`[config] project-local autoSync.enabled unavailable (config invalid) — falling back to project config`),readConfigSafely({absPath:resolveConfigPath(`project`,s),sideline:!1,warn:e=>J.warn({message:e},`[config] could not read project config`)}).value.autoSync?.enabled===!0):t===!0}initTelemetry();let ee=randomUUID(),te=getLocalDir(t);if(acquireServerLock(te,{port:e.port??0,worktreeRoot:s,kind:e.lockKind??`interactive`,capabilities:[`http`,`ws`]}),!q)try{assertCompatibleStateManifest({lockDir:te,shadowRepoDir:resolveShadowDir(s)})}catch(e){throw releaseServerLock(te),e}let ne=createBasenameIndex(),ae=(e,t)=>ne.resolveEmbed(e,t),oe,se,ce,ue,de,fe,me,ge=null,_e=null,ve=null,ye=null,Ce=new Set,we=!1,Te;function De(e){ge?.signal(e)}let je=2e3,Me=null;function Pe(){Me!==null&&clearTimeout(Me),Me=setTimeout(()=>{Me=null,se.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist debounced cache:`,e)})},2e3)}try{oe=createContentFilter({projectDir:s,contentDir:t,onAfterRebuild:()=>{se.rebuildFromDisk(getActiveBranch()).catch(e=>{getLogger(`server-factory`).warn({err:e},`[content-filter] backlink-index rebuild failed after onAfterRebuild`)});try{ce.init()}catch(e){getLogger(`server-factory`).warn({err:e},`[content-filter] tag-index rebuild failed after onAfterRebuild`)}try{let e=at?.pruneFileIndexNowExcluded()??0;e>0&&getLogger(`server-factory`).info({pruned:e},`[content-filter] pruned now-excluded entries from fileIndex`)}catch(e){getLogger(`server-factory`).warn({err:e},`[content-filter] fileIndex prune failed after onAfterRebuild`)}}}),se=new BacklinkIndex({projectDir:s,contentDir:t,contentFilter:oe}),ce=new TagIndex({contentDir:t,contentFilter:oe});try{ce.init()}catch(e){console.warn(`[server-factory] tag-index init failed; continuing with empty index:`,e)}ue={current:F},de=createPersistenceExtension({contentDir:t,projectDir:s,gitEnabled:E,commitDebounceMs:D,wipRef:O,shadowRef:ue,contentRoot:L,backlinkIndex:se,configHomedirOverride:k,getCurrentBranch:()=>st?.getLastKnownBranch()??null,resolveEmbed:ae,getPrincipal:()=>ye,onAgentCommit:()=>ge?.signal(`session-activity`),onDiskFlush:(e,t)=>ge?.emitDiskAck(e,t),onConfigRejected:(e,t)=>ge?.emitConfigValidationRejected(e,t)}),fe=new Hocuspocus({quiet:g,debounce:S,maxDebounce:w,extensions:[de.extension]});let B=fe.shouldUnloadDocument.bind(fe);fe.shouldUnloadDocument=e=>{if((we||Ce.has(e))&&B(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:B(e)},Te=async e=>{Ce.add(e);try{await fe.unloadDocument(e)}finally{Ce.delete(e)}},ge=new CC1Broadcaster(fe),_e=new AgentFocusBroadcaster(fe),ve=new AgentPresenceBroadcaster(fe),me=new AgentSessionManager(fe);let q=createLiveDerivedIndexExtension({backlinkIndex:se,tagIndex:ce,signalChannel:De});fe.configuration.extensions.push(q),fe.configuration.extensions.push({__kind:`principal-auth`,async onAuthenticate(e){let t=e.token,s=parseHocuspocusAuthToken(t),g=s?.expectedServerInstanceId;if(typeof g==`string`&&g.length>0&&g!==ee)throw new HocuspocusAuthRejection(`server-instance-mismatch`,`server instance mismatch: client claimed ${g}, this server is ${ee}`);let S=s?.expectedBranch,w=getActiveBranch();if(typeof S==`string`&&S.length>0&&S!==w)throw new HocuspocusAuthRejection(`branch-mismatch`,`branch mismatch: client claimed ${S}, server is on ${w}`);if(!s)return;let E=e.context;typeof s.principalId==`string`&&(ye&&s.principalId===ye.id?E.principalId=ye.id:ye?console.warn(JSON.stringify({event:`principal-token-mismatch`,claimed:s.principalId,loaded:ye.id})):E.principalId=s.principalId),typeof s.tabSessionId==`string`&&(E.tabSessionId=s.tabSessionId),E.kind=`human`}}),fe.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 g=e.requestHeaders,S=(g&&typeof g.get==`function`?g.get(`host`):null)??t.headers?.host??void 0;if(!isAllowedWorkspaceHostHeader(S))throw Error(`config-doc admission requires loopback Host header (host=${S??`<absent>`}, doc=${e.documentName})`)}}),fe.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 J=createApiExtension({hocuspocus:fe,sessionManager:me,contentDir:t,contentFilter:oe,serverInstanceId:ee,getFileIndex:()=>at?at.getFileIndex():new Map,getAliasMap:()=>at?at.getAliasMap():new Map,enableTestRoutes:j,shadowRef:ue,flushGitCommit:()=>de.flushPendingGitCommit(),flushContributors:()=>de.flushContributors(),getCurrentBranch:()=>st?.getLastKnownBranch()??null,getDiskAckSVs:()=>ge?.getLatestDiskAckSVsAsBase64()??{},contentRoot:L,backlinkIndex:se,tagIndex:ce,signalChannel:De,agentFocusBroadcaster:_e,agentPresenceBroadcaster:ve,onAgentWrite:e.onAgentWrite,getSyncEngine:()=>vt,localOpCliArgs:H,projectDir:s,resolveEmbed:ae,getPrincipal:()=>ye,forceUnloadDocument:Te});fe.configuration.extensions.push(J),fe.configuration.extensions.push(createServerObserverExtension({mdManager,schema,shadowRef:ue,contentRoot:L,getCurrentBranch:()=>st?.getLastKnownBranch()??null,resolveEmbed:ae}))}catch(e){throw releaseServerLock(te),e}let Ie=null,Re=new Map,ze=[];function Be(e,t){let s=resolve(e,`rescue`),g=resolve(s,`${t}${getDocExtension(t)}`);return g.startsWith(`${s}/`)?g:null}function Ve(e){let t=fe.documents.get(e);if(!t)return null;let{frontmatter:s,body:g}=stripFrontmatter(t.getText(`source`).toString());return prependFrontmatter(s,g)}let Ue=(e,t)=>applyExternalChange(fe,e,t,ae),We=e=>{if(!e)return;let t=`[[${e}]]`;for(let[s]of fe.documents){if(isSystemDoc(s)||isConfigDoc(s))continue;let g=fe.documents.get(s);if(!g)continue;let S=g.getText(`source`).toString();if(S.includes(t))try{g.transact(()=>{applyDiskContentToDoc(g,S,ae,s)},FILE_WATCHER_ORIGIN)}catch(t){J.error({err:t,docName:s,assetBasename:e},`[asset-event] failed to re-render ${s} for asset basename ${e}`)}}},Ge=null,Ke=e=>{e&&(Ge===null&&(Ge=new Set,setImmediate(()=>{let e=Ge;if(Ge=null,e)try{for(let t of e)We(t)}catch(t){J.error({err:t,basenames:[...e]},`[asset-event] dedup rerender pass crashed`)}})),Ge.add(e))};function Xe(e){switch(e.kind){case`rename`:return e.newDocName;case`asset-create`:case`asset-delete`:return e.relativePath;default:return e.docName}}async function $e(e){try{switch(e.kind){case`create`:J.info({docName:e.docName},`[reconcile] create: ${e.docName}`),se.updateDocumentFromMarkdown(e.docName,e.content),Pe(),ce.updateDocumentFromMarkdown(e.docName,e.content),De(`files`),De(`backlinks`),De(`graph`),De(`tags`);break;case`update`:{let{docName:t,content:s}=e,g=fe.documents.get(t);if(!g){se.updateDocumentFromMarkdown(t,s),Pe(),ce.updateDocumentFromMarkdown(t,s),De(`backlinks`),De(`graph`),De(`tags`);return}let S=getReconciledBase(t)??``,w=Ve(t)??S,E=reconcile({docName:t,base:S,ours:w,theirs:s}),D=contentHash(S).slice(0,6),O=contentHash(w).slice(0,6),k=contentHash(s).slice(0,6);switch(J.info({docName:t,base:D,ours:O,theirs:k,result:E.kind},`[reconcile] ${t} base=${D} ours=${O} theirs=${k} result=${E.kind}`),E.kind){case`noop`:se.updateDocumentFromMarkdown(t,s),Pe(),ce.updateDocumentFromMarkdown(t,s),De(`backlinks`),De(`graph`),De(`tags`);break;case`clean`:try{Ue(t,E.newContent),setReconciledBase(t,E.newContent),incrementReconcile(),se.updateDocumentFromMarkdown(t,s),Pe(),ce.updateDocumentFromMarkdown(t,s),De(`backlinks`),De(`graph`),De(`tags`)}catch(e){J.error({err:e,docName:t},`[reconcile] failed to apply clean content to Y.Doc for ${t}`),setReconciledBase(t,s)}break;case`merged`:try{Ue(t,E.newContent),setReconciledBase(t,E.newContent),incrementReconcile(),se.updateDocumentFromMarkdown(t,s),Pe(),ce.updateDocumentFromMarkdown(t,s),De(`backlinks`),De(`graph`),De(`tags`)}catch(e){J.error({err:e,docName:t},`[reconcile] failed to apply merged content to Y.Doc for ${t}`),setReconciledBase(t,s)}break;case`conflicts`:try{Ue(t,E.newContent),setReconciledBase(t,E.newContent),incrementReconcile(),incrementConflict(),se.updateDocumentFromMarkdown(t,s),Pe(),ce.updateDocumentFromMarkdown(t,s),De(`backlinks`),De(`graph`),De(`tags`)}catch(e){J.error({err:e,docName:t},`[reconcile] failed to apply conflict content to Y.Doc for ${t}`),setReconciledBase(t,s)}break;case`refused`:{incrementConflict();let e=g.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,E.reason);break}}break}case`delete`:{let{docName:t}=e,s=fe.documents.get(t);if(!s){se.deleteDocument(t),Pe(),ce.deleteDocument(t),De(`files`),De(`backlinks`),De(`graph`),De(`tags`);return}let g=getReconciledBase(t)??``,S=Ve(t)??``,w=S!==g;if(w&&ue.current){let e=ue.current,s=st?.getLastKnownBranch()??`main`;queueMicrotask(()=>{saveInMemoryCheckpoint(e,L??``,{kind:`external-change-rescue`,docName:t,contents:S,label:`External change recovered @ ${new Date().toISOString()}`,branch:s,metadata:{incomingDiskSha:``}}).then(()=>{incrementRescueBuffer(),J.info({docName:t},`[reconcile] rescue checkpoint saved (delete): ${t}`)}).catch(e=>{J.error({docName:t,err:e},`[reconcile] rescue checkpoint write failed: ${t}`)})})}s.getMap(`lifecycle`).set(`status`,`deleted-upstream`),deleteReconciledBase(t),se.deleteDocument(t),Pe(),ce.deleteDocument(t),J.info({docName:t,isDirty:w},`[reconcile] delete: ${t} (dirty=${w})`),fe.closeConnections(t),await Te(s),De(`files`),De(`backlinks`),De(`graph`),De(`tags`);break}case`rename`:{let{oldDocName:t,newDocName:s,content:g}=e,S=fe.documents.get(t);if(deleteReconciledBase(t),setReconciledBase(s,g),se.renameDocument(t,s,g),Pe(),ce.renameDocument(t,s,g),S){let e=S.getMap(`lifecycle`);e.set(`status`,`renamed`),e.set(`newPath`,s)}J.info({oldDocName:t,newDocName:s},`[reconcile] rename: ${t} → ${s}`),De(`files`),De(`backlinks`),De(`graph`),De(`tags`);break}case`conflict`:{let{docName:t}=e,s=fe.documents.get(t);if(!s)return;let g=s.getMap(`lifecycle`);g.set(`status`,`conflict`),g.set(`reason`,`conflict-markers`),J.info({docName:t},`[reconcile] conflict markers detected: ${t}`);break}case`asset-create`:ne.add(e.relativePath),De(`files`),Ke(basename(e.relativePath));break;case`asset-delete`:ne.remove(e.relativePath),De(`files`),Ke(basename(e.relativePath));break;default:assertNeverDiskEvent(e)}}catch(t){let s=Xe(e);J.error({err:t,kind:e.kind,label:s},`[reconcile] failed to handle ${e.kind} for ${s}`)}}let nt=[];async function rt(e){if(isBatchInProgress()){nt.push(e);return}await $e(e)}async function it(){let e=nt.splice(0,nt.length);for(let t of e)await $e(t)}let at=null,st=null,vt=null,Tt=null;async function Et(e){if(fe.documents.size===0)return;let t=!1,s=new Promise(e=>{fe.configuration.extensions.push({async afterUnloadDocument({instance:s}){!t&&s.getDocumentsCount()===0&&(t=!0,e())}})}),g=Array.from(fe.documents.keys());fe.closeConnections(),fe.flushPendingStores();for(let e of fe.documents.values())e.getConnectionsCount()===0&&fe.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 S,w=new Promise((s,w)=>{S=setTimeout(()=>{t=!0;let s=Array.from(fe.documents.keys()),S=[],E=[];if(ue.current){for(let e of s)if(!(isSystemDoc(e)||isConfigDoc(e)))try{let t=Ve(e);if(t===null){J.warn({docName:e},`[rescue] skipping ${e} — document dropped from map mid-rescue`),E.push(e);continue}let s=Be(ue.current.gitDir,e);if(!s){J.warn({docName:e,gitDir:ue.current.gitDir},`[rescue] path-traversal guard rejected docName: ${e}`),E.push(e);continue}mkdirSync(dirname(s),{recursive:!0}),writeFileSync(s,t,`utf-8`),incrementRescueBuffer(),S.push(e),J.info({docName:e},`[rescue] rescue buffer saved on flush timeout: ${e}`)}catch(t){E.push(e),J.error({err:t,docName:e},`[rescue] failed to write rescue buffer for ${e}`)}}else J.warn({stillLoadedCount:s.length},`[rescue] shadow repo unavailable at flush timeout — ${s.length} doc(s) will be lost: [${s.join(`, `)}]`),E.push(...s);let D=S.length>0||E.length>0?` — rescued [${S.join(`, `)}]${E.length>0?`, lost [${E.join(`, `)}]`:``}`:``;w(Error(`flushAllStoresAndWait timeout after ${e}ms — ${s.length}/${g.length} docs did not unload: [${s.join(`, `)}]${D}`))},e)});try{await Promise.race([s,w])}finally{S!==void 0&&clearTimeout(S)}}async function Dt(){return Tt||(Tt=(async()=>{let e=Date.now(),t=[];we=!0,Me!==null&&(clearTimeout(Me),Me=null);let g,S=await Promise.race([Ft.then(()=>`completed`,e=>(J.debug({err:e},`[server] init incomplete during shutdown`),`failed`)),new Promise(e=>{g=setTimeout(()=>e(`timeout`),5e3)})]);g!==void 0&&clearTimeout(g),S===`timeout`&&J.warn({},`[server] init did not complete within 5s during shutdown`);let w=fe.documents.size;try{try{try{st&&=(await st.unsubscribe(),null),at&&=(await at.unsubscribe(),null);for(let{docName:e,cleanup:t}of ze)try{await t()}catch(t){J.warn({err:t,docName:e},`[server] failed to stop config-file-watcher for ${e}`)}ze.length=0}catch(e){t.push({phase:`watcher-unsubscribe`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-1 watcher unsubscribe failed`)}try{ge?.destroy(),ve?.destroy(),Ie&&=(await Ie.disconnect(),null);for(let[e,t]of Re)try{await t.disconnect()}catch(t){J.warn({err:t,docName:e},`[server] failed to disconnect ${e} during shutdown`)}Re.clear()}catch(e){t.push({phase:`cc1-teardown`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-1b CC1 teardown failed`)}try{await me.closeAll()}catch(e){t.push({phase:`agent-session-drain`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-2 agent session drain failed`)}try{await Et(B)}catch(e){t.push({phase:`flush-all-stores`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-3 flush failed`)}let e;try{await Promise.race([(async()=>{await de.flushPendingGitCommit(),await de.waitForPendingCommits()})(),new Promise((t,s)=>{e=setTimeout(()=>s(Error(`L2 git flush timeout`)),B)})])}catch(e){t.push({phase:`git-commit-flush`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-4 git commit flush failed`)}finally{e!==void 0&&clearTimeout(e)}try{vt&&=(await vt.destroy(),null)}catch(e){t.push({phase:`sync-engine-stop`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown sync-engine-stop failed`)}}finally{if(ue.current){try{let e=(await esm_default({baseDir:s,timeout:{block:5e3}}).revparse(`HEAD`)).trim();e&&writeFileSync(resolve(ue.current.gitDir,`last-known-head`),e,`utf-8`)}catch{}try{destroyShadowRepo(ue.current)}catch(e){t.push({phase:`shadow-repo-release`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-5 destroyShadowRepo failed`)}}let g=Date.now()-e;t.length===0?J.info({documentCount:w,durationMs:g},`[server] shutdown flushed ${w} documents in ${g}ms`):J.warn({documentCount:w,durationMs:g,phaseErrors:t},`[server] shutdown flushed ${w} documents in ${g}ms with ${t.length} phase error(s)`)}}finally{try{releaseServerLock(te)}catch(e){t.push({phase:`server-lock-release`,error:e instanceof Error?e.message:String(e)}),J.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)})}}})(),Tt)}let jt=[];async function Mt(){try{ye=await loadPrincipal(t),J.info({principalId:ye.id},`[server] principal loaded`)}catch(e){J.warn({err:e},`[server] principal load failed — browser writes will use SERVICE_WRITER`)}if(!ue.current)try{ue.current=await initShadowRepo(s),J.info({gitDir:ue.current.gitDir},`[server] history repo initialized at ${ue.current.gitDir}`)}catch(e){J.error({err:e},`[server] history repo init failed`),jt.push(`shadow-repo`)}if(ue.current){let e=null;try{e=loadRenameLogIndex(ue.current.gitDir),sweepLazyPopOrphans(ue.current.gitDir,e),setRenameLogIndex(ue.current.gitDir,e),J.info({entries:e.byTo.size},`[server] rename log loaded (${e.byTo.size} entries)`)}catch(e){J.warn({err:e},`[rename-log] boot-time load/sweep failed; rename history unavailable`)}if(e){let t=1e4;try{await Promise.race([gcRenameLog(ue.current,e,{rebuild:!0}),new Promise((e,s)=>setTimeout(()=>s(Error(`boot-time GC exceeded ${t}ms`)),t))])}catch(e){J.warn({err:e},`[rename-log] boot-time GC/rebuild failed; index loaded without GC`)}}}if(ue.current)try{await shadowGit(ue.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`)){J.warn({},`[server] history repo appears corrupted — reinitializing`);try{ue.current=await initShadowRepo(s)}catch(e){J.error({err:e},`[server] history repo reinit failed`),ue.current=void 0,jt.includes(`shadow-repo`)||jt.push(`shadow-repo`)}}else J.error({err:e},`[server] history repo check failed (transient?)`)}if(ue.current)try{let e=resolve(ue.current.gitDir,`last-known-head`),t=null;try{t=readFileSync(e,`utf-8`).trim()||null}catch{}let g=null;try{g=(await esm_default({baseDir:s,timeout:{block:1e4}}).revparse(`HEAD`)).trim()||null}catch{}if(g!==null){if(g!==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{}J.info({lastKnownHead:t,currentHead:g,branch:e},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${g}, action=import`);try{await commitUpstreamImport(ue.current,L??``,t,g,e),incrementUpstreamImport()}catch(e){J.warn({err:e},`[head-drift] commitUpstreamImport failed — continuing`)}}else J.info({currentHead:g},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${g}, action=noop`);try{writeFileSync(e,g,`utf-8`)}catch(e){J.warn({err:e},`[head-drift] failed to write last-known-head`)}}}catch(e){J.warn({err:e},`[head-drift] check failed — continuing`)}try{let e=recoverPendingManagedRename(t);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;J.warn({journalVersion:e.journal.version,fromPath:t,toPath:s,restoredDocNames:e.restoredDocNames},`[managed-rename] recovered pending rename ${t} -> ${s}`)}}catch(e){J.error({err:e},`[server] managed rename recovery failed`),jt.push(`managed-rename-recovery`)}try{let e=cleanupOrphanUploadTempfiles(t);(e.deleted>0||e.errors>0)&&J.info({scanned:e.scanned,deleted:e.deleted,errors:e.errors},`[upload-tempfile-sweep] swept ${e.deleted} orphan tempfile(s)`)}catch(e){J.error({err:e},`[server] upload-tempfile sweep failed`),jt.push(`upload-tempfile-sweep`)}try{Ie=await fe.openDirectConnection(SYSTEM_DOC_NAME),ge?.emitServerInfo(ee,getActiveBranch())}catch(e){J.error({err:e},`[server] failed to open __system__ direct connection — CC1 push disabled`),jt.push(`cc1-push`)}for(let e of CONFIG_DOC_NAMES)try{let t=await fe.openDirectConnection(e);Re.set(e,t)}catch(t){J.error({err:t,docName:e},`[server] failed to open ${e} direct connection — config bind degraded`),jt.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,k)]]);for(let t of CONFIG_DOC_NAMES){let s=e.get(t);if(s)try{J.info({docName:t,path:s},`[config-file-watcher] starting`);let e=await startConfigFileWatcher(s,e=>{let s=fe.documents.get(t);J.info({docName:t,hasDocument:s!==void 0,contentLength:e.length},`[config-file-watcher] file changed`);let g=applyExternalConfigChange(s??null,t,e,de.configPersistenceCtx);if(J.info({docName:t,outcome:g},`[config-file-watcher] applyExternalConfigChange outcome`),t===`__config__/project`||t===`__local__/project`){let e=Y();vt?.setEnabled(e).catch(t=>{J.warn({err:t,enabled:e},`[sync] failed to apply autoSync.enabled from config`)})}});ze.push({docName:t,cleanup:e}),J.info({docName:t,path:s},`[config-file-watcher] started`)}catch(e){J.warn({err:e,docName:t,path:s},`[config-file-watcher] failed to start for ${t}`),jt.push(`config-file-watcher:${t}`)}}try{let e=resolve(t,`.okignore`),g=resolve(s,`.gitignore`),S=J;S.info({okignorePath:e,gitignorePath:g},`[ignore-watcher] starting multi-path watcher for .okignore + .gitignore`);let w=await startMultiPathConfigFileWatcher([e,g],(t,g)=>{(async()=>{if(t===e)try{let e=applyExternalConfigChange(fe.documents.get(`__config__/okignore`)??null,CONFIG_DOC_NAME_OKIGNORE,g,de.configPersistenceCtx);S.info({docName:CONFIG_DOC_NAME_OKIGNORE,outcome:e},`[ignore-watcher] applyExternalConfigChange outcome`)}catch(e){S.error({err:e,changedPath:relative(s,t)},`[ignore-watcher] applyExternalConfigChange failed; rebuild proceeds independently`)}let w=await oe.rebuildIgnorePatterns();if(w.ok)S.info({changedPath:relative(s,t),patternCount:w.patternCount,nestedFileCount:w.nestedFileCount,durationMs:w.durationMs},`[ignore-watcher] rebuild succeeded — broadcasting files channel`),ge?.signal(`files`);else{let e=relative(s,t)||`.`;S.warn({changedPath:e,error:w.error.message},`[ignore-watcher] rebuild failed — emitting config-ignore-nested-error`),ge?.emitConfigIgnoreNestedError(e,w.error.message)}})().catch(e=>{S.error({err:e,changedPath:relative(s,t)||`.`},`[ignore-watcher] handler threw`)})});ze.push({docName:`__ignore-files__`,cleanup:w}),S.info({okignorePath:e,gitignorePath:g},`[ignore-watcher] multi-path watcher started`)}catch(e){J.warn({err:e,projectDir:s,contentDir:t},`[ignore-watcher] failed to start multi-path watcher`),jt.push(`ignore-files-watcher`)}let g=resolveGitDir(s),S=g?readBranchFromHead(g)??`main`:`main`;switchReconciledBaseScope(S),se.switchBranch(S);try{{let e=getActiveBranch();try{if(await se.loadFromDisk(e)){let t=await se.reconcileWithDisk(e);(t.added>0||t.updated>0||t.deleted>0)&&J.info(t,`[backlinks] startup reconcile: offline changes applied`)}else await se.rebuildFromDisk(e);se.saveToDisk().catch(t=>{console.warn(`[backlinks] Failed to persist startup cache for ${e}:`,t)})}catch(t){J.error({err:t,branch:e},`[backlinks] startup init failed; index will populate incrementally via watcher`)}}at=await startWatcher(t,rt,oe),ce.init();let e=0;try{seedBasenameIndex({contentDir:t,contentFilter:oe,basenameIndex:ne,onSkip:(t,s,g)=>{e++,J.warn({reason:t,code:s,path:g},`[basename-index] skipped entry during seed (${t}${s?` ${s}`:``})`)}}),e>0&&(J.warn({count:e},`[basename-index] startup seed completed with ${e} skipped entries — embeds under inaccessible subtrees will not resolve`),jt.push(`basename-index-partial`))}catch(e){J.error({err:e},`[basename-index] startup seed failed`),jt.push(`basename-index`)}}catch(e){J.error({err:e},`[server] disk bridge watcher failed to start`),jt.push(`file-watcher`)}try{st=await startHeadWatcher(s,async({trigger:e})=>{if(J.info({trigger:e},`[batch] begin trigger=${e}`),incrementBatch(),fe.flushPendingStores(),await de.flushPendingGitCommit(),setBatchInProgress(!0),ue.current){let e=getActiveBranch(),t=resolveGitDir(s),g=t?readBranchFromHead(t)??e:e,S=[];for(let[e,t]of fe.documents){if(isSystemDoc(e)||isConfigDoc(e))continue;let s=null;if(t.transact(()=>{s=Ve(e)},PARK_SNAPSHOT_ORIGIN),s===null)continue;let g=getReconciledBase(e)??s;S.push({docName:e,markdown:s,diskSnapshot:g})}if(S.length>0)try{let t=await parkBranch(ue.current,e,SERVICE_WRITER.id,S,g);t&&(incrementPark(),J.info({count:S.length,branch:e,sha:t.slice(0,8)},`[history] parked ${S.length} docs on ${e} → ${t.slice(0,8)}`))}catch(e){J.error({err:e},`[shadow] park failed`)}}},async e=>{let s=nt.length,g=e.newBranch??`main`;if(J.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`)setBatchInProgress(!1),await it(),await de.flushDeferredStores(`within-branch`);else{incrementBranchSwitch(),nt.splice(0,nt.length),switchReconciledBaseScope(g),Me!==null&&(clearTimeout(Me),Me=null),se.switchBranch(g),oe.rebuildDirCount();try{let e=0;ne.clear(),seedBasenameIndex({contentDir:t,contentFilter:oe,basenameIndex:ne,onSkip:(t,s,S)=>{e++,J.warn({reason:t,code:s,path:S,branch:g},`[basename-index] skipped entry during branch-switch reseed (${t}${s?` ${s}`:``})`)}}),e>0&&(J.warn({count:e,branch:g},`[basename-index] branch-switch reseed completed with ${e} skipped entries — embeds under inaccessible subtrees will not resolve on this branch`),jt.includes(`basename-index-partial`)||jt.push(`basename-index-partial`))}catch(e){J.error({err:e,branch:g},`[basename-index] branch-switch reseed failed`)}for(let[e,s]of fe.documents)if(!(isSystemDoc(e)||isConfigDoc(e)))try{let S=safeContentPath(e,t);if(!existsSync(S)){let t=getReconciledBase(e)??``,S=Ve(e)??``;if(S!==t&&ue.current){let t=ue.current;queueMicrotask(()=>{saveInMemoryCheckpoint(t,L??``,{kind:`external-change-rescue`,docName:e,contents:S,label:`External change recovered @ ${new Date().toISOString()}`,branch:g,metadata:{incomingDiskSha:``}}).then(()=>{incrementRescueBuffer(),J.info({docName:e},`[reconcile] rescue checkpoint saved on branch switch: ${e}`)}).catch(t=>{J.error({docName:e,err:t},`[reconcile] rescue checkpoint write failed: ${e}`)})})}s.getMap(`lifecycle`).set(`status`,`deleted-upstream`),J.info({docName:e,branch:g},`[branch-switch] tombstone: ${e} (not on ${g})`);continue}let w=readFileSync(S,`utf-8`);Ue(e,w),setReconciledBase(e,w),J.info({docName:e},`[branch-switch] reset: ${e}`)}catch(t){J.error({err:t,docName:e},`[branch-switch] failed to reset ${e}`)}J.info({branch:g,docCount:fe.documents.size},`[branch-switch] loaded branch ${g} (${fe.documents.size} docs)`);try{if(await se.loadFromDisk(g)){let e=await se.reconcileWithDisk(g);(e.added>0||e.updated>0||e.deleted>0)&&J.info(e,`[backlinks] branch-switch reconcile for ${g}`)}else await se.rebuildFromDisk(g);se.saveToDisk(g).catch(e=>{console.warn(`[backlinks] Failed to persist branch cache for ${g}:`,e)})}catch(e){J.error({err:e,branch:g},`[backlinks] branch-switch rebuild failed; backlinks may be stale`)}if(ce.init(),ue.current&&e.batchKind===`cross-branch`){let e=0;for(let[t]of fe.documents)if(!(isSystemDoc(t)||isConfigDoc(t)))try{let s=await readParkedState(ue.current,g,SERVICE_WRITER.id,t);if(!s||s.markdown===s.diskSnapshot)continue;let S=getReconciledBase(t);if(!S)continue;let w=reconcile({docName:t,base:s.diskSnapshot,ours:s.markdown,theirs:S});switch(w.kind){case`merged`:case`clean`:Ue(t,w.newContent),setReconciledBase(t,w.newContent),e++;break;case`conflicts`:Ue(t,w.newContent),setReconciledBase(t,w.newContent),incrementConflict(),e++;break;case`noop`:case`refused`:break}}catch(e){J.error({err:e,docName:t},`[branch-switch] restore WIP failed for ${t}`)}e>0&&J.info({count:e,branch:g},`[branch-switch] restored ${e} parked docs on ${g}`)}if(e.oldBranch?.startsWith(`detached-`)&&ue.current)try{let t=shadowGit(ue.current),s=(await t.raw(`for-each-ref`,`refs/wip/${e.oldBranch}/`,`--format=%(refname)`)).trim();if(s){for(let e of s.split(`
1620
+ `))e&&await t.raw(`update-ref`,`-d`,e);J.info({context:e.oldBranch},`[branch-switch] cleaned up detached context ${e.oldBranch}`)}}catch(e){J.error({err:e},`[branch-switch] detached cleanup failed`)}setBatchInProgress(!1),await de.flushDeferredStores(`discard-stale`),ge?.emitBranchSwitched(g)}if(e.headMoved&&e.newHead&&ue.current&&s>0){let t=L??`.`;try{let s=await commitUpstreamImport(ue.current,t,e.oldHead,e.newHead,g);incrementUpstreamImport(),J.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){J.error({err:e},`[shadow] upstream-import failed`)}}})}catch(e){J.error({err:e},`[server] HEAD watcher failed to start`),jt.push(`head-watcher`)}let w=H?.[0]??`open-knowledge`,E=[`-c`,`credential.helper=!${H&&H.length>1?H.join(` `):w} auth git-credential`];try{vt=new SyncEngine({projectDir:s,contentDir:t,contentFilter:oe,contentRoot:L,syncEnabled:Y(),credentialArgs:E,cc1Broadcaster:ge,setBatchInProgress:e=>{setBatchInProgress(e),e||de.flushDeferredStores(`within-branch`).catch(e=>{J.error({err:e},`[persistence] deferred store drain failed after sync batch`)})},onStateChange:e=>{J.info({state:e},`[sync] state → ${e}`)},onAutoDisable:async e=>{J.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||J.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 vt.start()}catch(e){J.warn({err:e},`[server] SyncEngine failed to start — sync disabled`),vt=null}}let Ft=Mt();return{hocuspocus:fe,sessionManager:me,cc1Broadcaster:ge,agentFocusBroadcaster:_e,agentPresenceBroadcaster:ve,contentFilter:oe,basenameIndex:ne,serverInstanceId:ee,destroy:Dt,ready:Ft,degraded:jt,lockDir:te,get syncEngine(){return vt}}}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 g=resolve(e,t);try{existsSync(g)&&statSync(g).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),g={"ok.worktree.kind":t};return s!==null&&(g[`ok.worktree.gitdir`]=normalizeFsPath(s)),withSpan(`ok.boot`,{attributes:g},async()=>bootServerInner(e))}async function bootServerInner(e){let t=e.skipAutoInit??!1,s=e.attachUiSibling??!0,g=e.idleShutdownMs,S=e.log??getLogger(`boot`),w=process.env.OK_LOCK_KIND===`mcp-spawned`||process.env.OK_LOCK_KIND===`interactive`?process.env.OK_LOCK_KIND:void 0,E=e.lockKind??w??`interactive`,{createServer:D}=await import(`node:http`),{updateServerLockPort:O}=await import(`./server-lock-D7DXNVql-B5nINglj.mjs`).then(e=>e.a),k=!1;if(!t&&e.autoInitFn)try{k=!!await e.autoInitFn()}catch(e){S.warn({err:e},`autoInitFn failed`)}let j=e.projectDir??e.contentDir,F=resolve(j,`.ok`);if(!existsSync(resolve(F,`config.yml`)))throw new MissingOkConfigError(existsSync(F)?`config`:`okdir`,j);existsSync(resolve(F,`.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 L=findLegacyRuntimeFiles(F);L.length>0&&console.warn(`[boot] Found legacy runtime files at .ok/${L.join(`, `)}. Delete .ok/ and re-init — these files moved to .ok/${LOCAL_DIR}/.`);let B=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:E,skipStateManifestCheck:e.skipStateManifestCheck}),{hocuspocus:H,destroy:q,ready:J,degraded:Y,lockDir:ee,sessionManager:te,agentFocusBroadcaster:ne,agentPresenceBroadcaster:ae}=B,oe=(()=>{let t=e.host??`localhost`;return t===`0.0.0.0`||t===`::`?`localhost`:t.includes(`:`)&&!t.startsWith(`[`)?`[${t}]`:t})(),se=e.port??0,ce=createMcpHttpHandler({contentDir:e.contentDir,projectDir:e.projectDir??e.contentDir,config:e.config,getServerUrl:()=>`http://${oe}:${se}`,log:S}),ue=D(),de=mountMcpAndApi({httpServer:ue,hocuspocus:H,mcpHttpHandler:ce,log:S,sessionManager:te,agentFocusBroadcaster:ne,agentPresenceBroadcaster:ae,keepaliveGraceMs:e.keepaliveGraceMs}),fe=null;g!==null&&(fe=attachIdleShutdown({httpServer:ue,thresholdMs:g??DEFAULT_IDLE_THRESHOLD_MS,log:S,onShutdown:(e.idleShutdownHandler??(e=>async()=>{await e()}))(async()=>{await q()})})),await new Promise((t,s)=>{let g=e=>s(e);ue.once(`error`,g),ue.listen(e.port,e.host,()=>{ue.removeListener(`error`,g),t()})});let me=ue.address(),ge=typeof me==`object`&&me?me.port:e.port??0;if(se=ge,O(ee,ge),s&&e.spawnUiSiblingFn)try{await e.spawnUiSiblingFn({lockDir:ee,log:S})}catch(e){S.warn({err:e},`spawnUiSiblingFn failed`)}let _e=!1,ve=async(e,t)=>{let s;try{await Promise.race([t(),new Promise((t,g)=>{s=setTimeout(()=>{g(Error(`${e} timed out after ${DESTROY_STEP_TIMEOUT_MS}ms`))},DESTROY_STEP_TIMEOUT_MS),s.unref?.()})])}finally{s!==void 0&&clearTimeout(s)}};return{httpServer:ue,destroy:async()=>{if(_e)return;_e=!0;let e=[],t=async(t,s)=>{try{await ve(t,s)}catch(s){e.push(s),S.warn({err:s,step:t},`bootServer destroy step failed`)}};try{fe?.detach()}catch(t){e.push(t),S.warn({err:t,step:`idleHandle.detach`},`bootServer destroy step failed`)}if(await t(`mount.shutdown`,()=>de.shutdown()),await t(`mcpHttpHandler.close`,()=>ce.close()),await t(`mount.wss.close`,()=>new Promise((e,t)=>{de.wss.close(s=>s?t(s):e())})),await t(`httpServer.closeAllConnections`,async()=>{ue.closeAllConnections?.()}),await t(`httpServer.close`,()=>new Promise((e,t)=>{ue.close(s=>s&&s.code!==`ERR_SERVER_NOT_RUNNING`?t(s):e())})),await t(`destroyHocuspocus`,()=>q()),await t(`shutdownTelemetry`,()=>shutdownTelemetry()),e.length>0)throw AggregateError(e,`bootServer destroy completed with errors`)},lockDir:ee,contentDir:e.contentDir,port:ge,ready:J,degraded:Y,didAutoInit:k,serverInstance:B}}const ConfigSchema=ConfigSchema$1;function detectClaudeDesktopPresence(e={}){let t=e.home??homedir(),s=e.platformName??process.platform,g=e.env??process.env;return s===`darwin`?existsSync(join(t,`Library`,`Application Support`,`Claude`)):s===`win32`?existsSync(join(g.APPDATA??join(t,`AppData`,`Roaming`),`Claude`)):!1}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`);if(existsSync(s)||await isInsideExistingWorkTree(t))return{didInit:!1};let g=``;try{g=(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(resolve(s,`HEAD`)))throw new ProjectGitInitError(`git init reported success but ${s}/HEAD is missing (partial init detected)`,g);return 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),g=0;g<32;g+=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 g=dirname(t);if(g===t)return;t=g}}export{buildExecResult as $,validateSkillZip as $n,isSystemDoc as $t,PinoLogger as A,rewriteMarkdownLinksForDocumentRename as An,gcCheckpointRefs as At,SeedRootDirError as B,saveInMemoryCheckpoint as Bn,incrementServerObserverFire as Bt,MANAGED_RENAME_ORIGIN as C,resetMetrics as Cn,createTestLogger as Ct,McpLogger as D,resolveCursorSpawnInvocation as Dn,evictStaleTrackerEntries as Dt,MISSING_OK_CONFIG_MESSAGE as E,resolveCursorBinaryDefault as En,ensureProjectGit as Et,STARTER_FOLDERS as F,runDeviceFlowSubprocess as Fn,getMetrics as Ft,applyAgentMarkdownWrite as G,shutdownTelemetry as Gn,isAllowedApiOrigin as Gt,TagIndex as H,seedBasenameIndex as Hn,initTelemetry as Ht,STARTER_FOLDER_FRONTMATTER_FILENAME as I,runWithMcpLogger as In,getTracer as It,assertCompatibleStateManifest as J,toBroadcasterKey as Jn,isHocuspocusAuthRejectionReason as Jt,applyExternalChange as K,splitMarkdownBlocks as Kn,isAllowedWorkspaceHostHeader as Kt,STARTER_TEMPLATES as L,safeContentPath as Ln,handleCollabSocketError as Lt,ROLLBACK_ORIGIN as M,runAuthReposSubprocess as Mn,getLocalDir as Mt,SERVICE_WRITER as N,runAuthStatusSubprocess as Nn,getLogger as Nt,MissingOkConfigError as O,resolveLockDir as On,extractWikiLinksFromMarkdown as Ot,SKILL_INSTALL_EVENTS_FILE_REL as P,runCloneSubprocess as Pn,getMeter as Pt,buildAndOpenSkill as Q,validateCloneInputs as Qn,isSelfWrite as Qt,STATE_MANIFEST_FILENAME as R,safeSubdir as Rn,handleSpawnCursor as Rt,LOG_MD_TEMPLATE as S,removeLastKnownHash as Sn,createServerObserverExtension as St,MCP_SERVER_NAME as T,resolveContentDir as Tn,detectProjectShape as Tt,UiLockCollisionError as U,setActiveSpanAttributes as Un,installTestLoggers as Ut,StateManifestError as V,saveVersion as Vn,initShadowRepo as Vt,acquireUiLock as W,shadowGit as Wn,installUserSkill as Wt,attachIdleShutdown as X,updateUiLockPort as Xn,isPairedWriteOrigin as Xt,assertNeverDiskEvent as Y,updateLastKnownHash as Yn,isLoopbackAddress as Yt,bootServer as Z,validateAgentId as Zn,isPathWithinDir as Zt,HOCUSPOCUS_AUTH_REJECTION_REASONS as _,reconcile as _n,createLiveDerivedIndexExtension as _t,AgentPresenceBroadcaster as a,parseHocuspocusAuthToken as an,JSONRPCMessageSchema as ar,clearContributors as at,INSTALLED_AGENTS_SCHEMES as b,registerWrite as bn,createPersistenceExtension as bt,BacklinkIndex as c,planSeed as cn,isJSONRPCRequest as cr,commitWipFromTree as ct,CURSOR_BUNDLE_PATHS_BY_PLATFORM as d,readServerPackageVersion as dn,resolveConfigPath as dr,contributorCount as dt,lastKnownHash as en,withSpan as er,buildReadResult as et,ConfigSchema as f,readSkillInstallStateSnapshot as fn,writeConfigPatch as fr,createApiExtension as ft,GIT_UPSTREAM_WRITER as g,readUiLock as gn,createExternalChangeHandler as gt,FILE_WATCHER_ORIGIN as h,readTargetVersion as hn,createContentFilterAsync as ht,AgentFocusBroadcaster as i,mountMcpAndApi as in,writeTracker as ir,classifyEvents as it,ProjectGitInitError as j,rewriteWikiLinksForDocumentRename as jn,getCurrentMcpLogger as jt,OBSERVER_SYNC_ORIGIN as k,resolvePackageVersion as kn,formatContributors as kt,CC1Broadcaster as l,readAllTargets as ln,isJSONRPCResultResponse as lr,containsConflictMarkers as lt,FILE_SYSTEM_WRITER as m,readTargetRecordedAt as mn,MalformedGitPointerError as mr,createContentFilter as mt,AGENT_ID_RE as n,loadPrincipal as nn,writeStateManifest as nr,buildStarterFolderFrontmatterYaml as nt,AgentSessionCapacityError as o,parseKeepaliveConnectionId as on,LATEST_PROTOCOL_VERSION as or,commitUpstreamImport as ot,DEFAULT_CHECKPOINT_RETENTION as p,readStateManifest as pn,GitDirAccessError as pr,createAssetServeMiddleware as pt,applySeed as q,startWatcher as qn,isConfigDoc as qt,AGENT_WRITE_ORIGIN as r,loggerFactory as rn,writeTargetVersion as rr,buildWipTree as rt,AgentSessionManager as s,pathToDocName as sn,isInitializedNotification as sr,commitWip as st,AGENT_ID_MAX_LEN as t,listRescueCheckpoints as tn,withSpanSync as tr,buildSkillZip as tt,CONFLICT_MARKER_RE as u,readBranchFromHead as un,readConfigSafely as ur,contentHash as ut,HocuspocusAuthRejection as v,recordContributor as vn,createMcpHttpHandler as vt,MAX_AGENT_SESSIONS as w,resolveBundledSkillDir as wn,detectClaudeDesktopPresence as wt,LIVE_DERIVED_INDEX_DEBOUNCE_MS as x,releaseUiLock as xn,createServer$1 as xt,HocuspocusAuthTokenSchema as y,recordSkillInstallEvent as yn,createOsProbe as yt,SeedPrerequisiteError as z,safetyCheckpoint as zn,incrementCollabSocketFilteredError as zt};
1621
+ //# sourceMappingURL=dist-dNO-Udm_.mjs.map