@inkeep/open-knowledge 0.30.1-beta.8 → 0.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/skills/discovery/SKILL.md +1 -1
- package/dist/assets/skills/project/SKILL.md +1 -1
- package/dist/cli.mjs +7 -7
- package/dist/constants-DqOw6mgQ.mjs +2 -0
- package/dist/{dist-Bu8EnbFm.mjs → dist-BXlA66Rv.mjs} +4 -4
- package/dist/{dist-s05zKf10.mjs → dist-MZRC45Vk.mjs} +1 -1
- package/dist/{gh-detect-Dvi-l8Fu.mjs → gh-detect-BAop1ZEi.mjs} +2 -2
- package/dist/index.mjs +1 -1
- package/dist/init-CRAt_4qx.mjs +1 -0
- package/dist/{init-UFEoFr0i.mjs → init-D4BfioBb.mjs} +3 -3
- package/dist/{launch-json-removal-Dhzumamy.mjs → launch-json-removal-CUy2T3Uq.mjs} +2 -2
- package/dist/{loader-BDckjYwa.mjs → loader-BxXL_zFb.mjs} +2 -2
- package/dist/loader-DcbDRtIj.mjs +1 -0
- package/dist/{open-browser-B5VaZ8SA.mjs → open-browser-c8D-FzSc.mjs} +2 -2
- package/dist/preview-B12077GC.mjs +1 -0
- package/dist/{preview-nTcv__yn.mjs → preview-D955wcsg.mjs} +2 -2
- package/dist/public/assets/{ActivityModeContent-CvscUOlB.js → ActivityModeContent-Ck8qdJCp.js} +1 -1
- package/dist/public/assets/CodeMirrorPropInput-Cqy5AMG8.js +3 -0
- package/dist/public/assets/DocumentContext-BmXknE_D.js +35 -0
- package/dist/public/assets/{EnableSyncConfirmDialog-84rkuitb.js → EnableSyncConfirmDialog-CWfJC2tV.js} +1 -1
- package/dist/public/assets/{GraphPanel-CJcaT4ZV.js → GraphPanel-64dKrEeN.js} +1 -1
- package/dist/public/assets/{ManagedArtifactProperties-BchMXJov.js → ManagedArtifactProperties-w28ZuUXh.js} +1 -1
- package/dist/public/assets/{McpConsentDialogBody-CIA51kgu.js → McpConsentDialogBody-CBhFj_dO.js} +1 -1
- package/dist/public/assets/{MermaidDocEditor-DBwiC1Iv.js → MermaidDocEditor-DHYDIKqN.js} +1 -1
- package/dist/public/assets/PropertyPanel-Cd7DFfct.js +2 -0
- package/dist/public/assets/{SettingsDialogBody-CoRSU9Td.js → SettingsDialogBody-BN5WnNHe.js} +2 -2
- package/dist/public/assets/{ShareBranchSwitchDialog-BenQyIEd.js → ShareBranchSwitchDialog-BlhZ6hTx.js} +1 -1
- package/dist/public/assets/{ShareReceiveDialog-DWYhHOXw.js → ShareReceiveDialog-L3wJj8ez.js} +1 -1
- package/dist/public/assets/{ShareReceiveMissDialog-CPsNjXmy.js → ShareReceiveMissDialog-D6rKf26E.js} +1 -1
- package/dist/public/assets/{SkillEditorActions-CODXEDz3.js → SkillEditorActions-DAfDDMK2.js} +1 -1
- package/dist/public/assets/SourceEditor-DnBDsIm6.js +1 -0
- package/dist/public/assets/{TerminalPanel-CR5UcwIn.js → TerminalPanel-CFfN7G5Q.js} +1 -1
- package/dist/public/assets/{agent-presence-DKQJl08k.js → agent-presence-DiQ_l3Q4.js} +1 -1
- package/dist/public/assets/{auth-state-cache-BIPktuPk.js → auth-state-cache-Bbu2EA_L.js} +3 -3
- package/dist/public/assets/{config-provider-dZze7ypK.js → config-provider-DON2sTkv.js} +1 -1
- package/dist/public/assets/{dist-C71V3z3d.js → dist-CUDp0fN-.js} +2 -2
- package/dist/public/assets/{dist-BtuJEC9v.js → dist-cAytzZ0r.js} +126 -126
- package/dist/public/assets/{doc-hash-Ce3LmfP6.js → doc-hash-KGQoVCvb.js} +1 -1
- package/dist/public/assets/{documents-events-BzQ1LRmI.js → documents-events-BnMDLvDB.js} +1 -1
- package/dist/public/assets/external-link-BjECE2gH.js +1 -0
- package/dist/public/assets/{file-tree-adapter-BoRujkp5.js → file-tree-adapter-uHXxUJ8g.js} +1 -1
- package/dist/public/assets/index-CPErFLv2.js +2003 -0
- package/dist/public/assets/{keyboard-shortcuts-B5l045PW.js → keyboard-shortcuts-bJc2PBGE.js} +1 -1
- package/dist/public/assets/{navigation-targets-XC4PBjfz.js → navigation-targets-DdhO6GKu.js} +1 -1
- package/dist/public/assets/{open-managed-artifact-tab-DA0lLz1S.js → open-managed-artifact-tab-qxJ9p8Vi.js} +1 -1
- package/dist/public/assets/{pending-receive-nav-store-lNMDQCmC.js → pending-receive-nav-store-v67LB7tS.js} +1 -1
- package/dist/public/assets/{prop-types-CbtJ1iyP.js → prop-types-Dkcm5cUg.js} +1 -1
- package/dist/public/assets/{receive-store-BaQla7GO.js → receive-store-CtqQYghY.js} +1 -1
- package/dist/public/assets/selection-context-C3RRsPiK.js +4 -0
- package/dist/public/assets/{skill-actions-D2II4Qq4.js → skill-actions-HpoN1bS5.js} +1 -1
- package/dist/public/assets/{skills-api-bbofiqW7.js → skills-api-Dg6gQ9CV.js} +1 -1
- package/dist/public/assets/{src-DHOupE17.js → src-BYPkKUxg.js} +1 -1
- package/dist/public/assets/{target-navigation-intent-Bs-B8CMa.js → target-navigation-intent-DhT4boi_.js} +1 -1
- package/dist/public/assets/{typing-burst-detector-CBiF5H7t.js → typing-burst-detector-DDRKfxpo.js} +2 -2
- package/dist/public/assets/{workspace-paths-BBX7G5gP.js → workspace-paths-DYS2c17l.js} +1 -1
- package/dist/public/index.html +26 -26
- package/dist/{repair-launch-json-Cvqtx703.mjs → repair-launch-json-DhbI-EMz.mjs} +2 -2
- package/dist/{repair-mcp-configs-CJm9vtFB.mjs → repair-mcp-configs-CnzHinK5.mjs} +2 -2
- package/dist/repair-skills-BAEDb9Ho.mjs +1 -0
- package/dist/{repair-skills-Dgp9yVUB.mjs → repair-skills-BwUGllKc.mjs} +2 -2
- package/dist/server-lock-GuuouVft-uqSUkxXo.mjs +1 -0
- package/dist/{server-lock-iLcBw_q0-6FEAZKHu.mjs → server-lock-iLcBw_q0-WEyo7ukm.mjs} +42 -42
- package/dist/{src-CNKdCzTY.mjs → src-Okq2zd7b.mjs} +2 -2
- package/dist/start-DBJrdH80.mjs +1 -0
- package/dist/{start-DUC5tzBr.mjs → start-DX2HzLUg.mjs} +2 -2
- package/dist/{write-project-skill-XtppilgQ.mjs → write-project-skill-dxucK8PX.mjs} +2 -2
- package/package.json +1 -1
- package/dist/constants-B6W4Ga4r.mjs +0 -2
- package/dist/init-C4u9UyTM.mjs +0 -1
- package/dist/loader-v-8PSaqM.mjs +0 -1
- package/dist/preview-_Bwwd1eR.mjs +0 -1
- package/dist/public/assets/CodeMirrorPropInput-GWGwbu-Z.js +0 -3
- package/dist/public/assets/DocumentContext-Dl32cms8.js +0 -35
- package/dist/public/assets/PropertyPanel-Cm9QPZIM.js +0 -2
- package/dist/public/assets/SourceEditor-vePDOFlu.js +0 -1
- package/dist/public/assets/external-link-DvDOavYT.js +0 -1
- package/dist/public/assets/index-CKB7bl9B.js +0 -2003
- package/dist/public/assets/selection-context-Q-Ojx168.js +0 -4
- package/dist/repair-skills-D5HH0xbe.mjs +0 -1
- package/dist/server-lock-GuuouVft-xGs0zrNQ.mjs +0 -1
- package/dist/start-DONkstzD.mjs +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as __require$2,n as __esmMin,o as __toCommonJS,r as __exportAll,s as __toESM$2,t as __commonJSMin$2}from"./chunk-C94x7I9S.mjs";import{$ as CLIENT_VERSION_HEADER,$a as humanFormat,$i as parseProjectSkillBundleDoc,$n as SkillDeleteSuccessSchema,$r as UA_PATTERNS,$t as LocalOpEmbeddingsSetKeyRequestSchema,A as AgentWriteMdRequestSchema,Aa as Fragment,Ai as formatFileSize,An as SKILL_STATE_VERSION_RE,Ar as SyncConflictsSuccessSchema,At as FolderConfigPutRequestSchema,B as BrokenLinkSchema,Ba as DEFAULT_TELEMETRY_ATTRIBUTE_DENYLIST,Bn as SeedApplySuccessSchema,Bo as safeParse$1,Br as TemplateDeleteSuccessSchema,Bt as INSTALLED_SKILLS_REL,C as AdvisoryWarningSchema,Ca as toBridgeInvariantLog,Ci as displayNameFromClientName,Cn as RescueListSuccessSchema,Co as object$1,Cr as SkillUpdateRequestSchema,Ct as DuplicatePathSuccessSchema,D as AgentPatchSuccessSchema,Da as withFences,Di as encodeShareUrl,Dn as SKILL_NAME_REGEX,Do as string,Dr as StreamingProblemEventSchema,Dt as EmbedDetectSuccessSchema,E as AgentPatchRequestSchema,Ea as validateDocName,Ei as emptySkillState,En as SKILL_CONTENT_ROOT,Eo as record,Er as SpawnCursorSuccessSchema,Et as EDITOR_PROJECT_SKILL_ROOT,F as BacklinkCountsSuccessSchema,Fa as DEFAULT_DEDUP_MODE,Fi as iconFromClientName,Fn as SaveVersionRequestSchema,Fo as meta$1,Fr as SyncTriggerSuccessSchema,Ft as FrontmatterValueSchema,G as CC1DiskAckPayloadSchema,Ga as OK_PROJECT_MARKER,Gi as managedArtifactDocNameFromContentTarget,Gn as ShareConstructUrlRequestSchema,Go as normalizeParams,Gr as TemplatePutSuccessSchema,Gt as LINEAGE_EPOCH_KEY,H as CC1ConfigIgnoreNestedErrorPayloadSchema,Ha as INLINE_RENDERABLE_EXTENSIONS,Hi as isOrphanMode,Hn as SeedPlanSuccessSchema,Ho as prettifyError,Hr as TemplateMoveRequestSchema,Ht as InstallSkillSuccessSchema,I as BacklinksSuccessSchema,Ia as DEFAULT_EMBEDDINGS_BASE_URL,Ii as instantiateDoc,In as SaveVersionSuccessSchema,Io as $ZodObject,Ir as TEMPLATE_IDENTITY_KEY,J as CC1_CHANNEL_CONFIG_IGNORE_NESTED_ERROR,Ja as SANDBOXED_HTML_EXTENSIONS,Ji as overMultipliedBodyLines,Jn as SharePublishOwnersResponseSchema,Jo as require_dist$1,Jr as TestRescanBacklinksSuccessSchema,Jt as LocalOpAuthHostRequestSchema,K as CC1ServerInfoPayloadSchema,Ki as mergeThreeWay,Kn as ShareConstructUrlResponseSchema,Ko as $constructor,Kr as TemplatesListSuccessSchema,Kt as LinkGraphSuccessSchema,L as BranchInfoResponseSchema,La as DEFAULT_EMBEDDINGS_MODEL,Li as isBranchNotFoundGitError,Ln as SearchRequestSchema,Lo as $ZodType,Lr as TEMPLATE_NAME_REGEX,Lt as HistorySuccessSchema,M as AgentWriteRequestSchema,Ma as ASSET_EXTENSIONS,Mi as getHeadingSlug,Mo as toJSONSchema,Mr as SyncResolveConflictSuccessSchema,Mt as ForwardLinksSuccessSchema,N as AgentWriteSuccessSchema,Na as CONFIG_SCHEMA_MAJOR_PATH,Ni as getParseHealth,Nn as SUPPORTED_DOC_EXTENSIONS,Nr as SyncStatusSchema,Nt as FrontmatterPatchRequestSchema,O as AgentUndoRequestSchema,Oa as getSchema,Oi as expandTagToHierarchy,On as SKILL_STATE_REL,Oo as union,Or as SuggestLinksSuccessSchema,Ot as EmptyRequestSchema,P as ApiConfigSuccessSchema,Pa as ConfigSchema$1,Pi as getWikiLinkText,Pn as SYSTEM_DOC_NAME,Po as describe$1,Pr as SyncTriggerRequestSchema,Pt as FrontmatterPatchSuccessSchema,Q as CC1_CONTRACT_VERSION,Qa as detectRemovedKeys,Qi as parseManagedArtifactName,Qn as ShareTargetStatusResponseSchema,Qr as TrashCleanupSuccessSchema,Qt as LocalOpEmbeddingsMutationSuccessSchema,R as BridgeInvariantViolationError,Ra as DEFAULT_LOGS_MAX_BYTES,Ri as isFrontmatterValueEmpty,Rn as SearchSuccessSchema,Ro as parse$1,Rr as TagsForNameSuccessSchema,Rt as HistoryVersionSuccessSchema,Sa as tagsMatchingPrefix,Si as detectFmRegion,Sn as RenamePathSuccessSchema,So as number,Sr as SkillUninstallSuccessSchema,St as DuplicatePathRequestSchema,T as AgentBurstDiffSuccessSchema,Ta as unwrapFrontmatterFences,Ti as emptyInstalledSkills,Tn as RollbackSuccessSchema,To as preprocess,Tr as SkillsListSuccessSchema,Tt as EDITOR_PROJECT_CONFIG_PATH,U as CC1ConfigValidationRejectedPayloadSchema,Ua as LINKABLE_ASSET_EXTENSIONS,Ui as isParseEquivalentBridge,Un as SemanticIndexStatusSchema,Uo as clone,Ur as TemplateMoveSuccessSchema,Ut as InstalledAgentsSuccessSchema,V as CC1BranchSwitchedPayloadSchema,Va as EXECUTABLE_BLOCKLIST_EXTENSIONS,Vi as isManagedArtifactDocName,Vn as SeedListPacksSuccessSchema,Vo as safeParseAsync$1,Vr as TemplateGetSuccessSchema,Vt as InstallSkillRequestSchema,W as CC1DerivedViewPayloadSchema,Wa as LOCAL_DIR,Wi as isValidBranchName,Wn as ServerInfoSuccessSchema,Wo as defineLazy,Wr as TemplatePutRequestSchema,Wt as InstalledSkillsSchema,X as CC1_CHANNEL_DISK_ACK,Xa as applyPatchToDocument,Xi as parseGlobalSkillBundleDoc,Xn as SharePublishResponseSchema,Xr as TestResetSuccessSchema,Xt as LocalOpAuthStatusSuccessSchema,Y as CC1_CHANNEL_CONFIG_VALIDATION_REJECTED,Ya as addConfigSpanEvent,Yi as parseFrontmatterYaml,Yn as SharePublishRequestSchema,Yr as TestRescanFilesSuccessSchema,Yt as LocalOpAuthSetIdentityRequestSchema,Z as CC1_CHANNEL_SERVER_INFO,Za as checkEmbeddingsBaseUrl,Zi as parseInstalledSkills,Zn as ShareTargetStatusRequestSchema,Zr as TrashCleanupRequestSchema,Zt as LocalOpCloneRequestSchema,_ as releaseServerLock,_a as sharedExtensions,_i as createTagInTextRegex,_n as PageHeadingsSuccessSchema,_o as custom,_r as SkillTargetsGetSuccessSchema,_t as DeadLinksSuccessSchema,a as acquireProcessLock,aa as projectMergeBoundarySpace,ai as applyPatchToFm,an as MCP_SERVER_NAME,ao as normalizeAttachmentFolderPath,ar as SkillInstallRequestSchema,at as CheckoutRequestSchema,ba as splitLeadingDocBoundary,bi as defaultScheduler,bn as ProblemDetailsSchema,bo as literal,br as SkillTargetsSchema,bt as DocumentListSuccessSchema,c as isProcessAlive,ca as reattachLeadingDocBoundary,ci as classifyMarkdownHref,cn as MetricsParseHealthSuccessSchema,co as withConfigSpan,cr as SkillMoveRequestSchema,ct as ClientLogsSuccessSchema,d as markProcessLockDraining,di as colorFromSeed,dn as OrphansSuccessSchema,do as ZodOptional$1,dr as SkillPutSuccessSchema,dt as CreatePageRequestSchema,ea as parseSkillTargets,ei as UploadAssetSuccessSchema,en as LocalOpOkInitRequestSchema,eo as isKnownConfigError,er as SkillFileDeleteSuccessSchema,et as CONFIG_DOC_NAMES,f as markServerLockDraining,fa as resolveInternalHref,fi as comparePmStructural,fn as PARSE_EQUIVALENCE_TOLERANCE,fo as _enum,fr as SkillRestoreRequestSchema,ft as CreatePageSuccessSchema,g as releaseProcessLock,ga as setToleranceTelemetryHook,gi as createCodeFenceTracker,gn as PROTOCOL_VERSION,go as boolean,gr as SkillTargetEditorSchema,gt as DOCUMENT_OPEN_BYTE_LIMIT,h as readServerLock,ha as serializeFrontmatterMap,hi as createBasenameIndex,hn as PROJECT_SKILL_EDITOR_IDS,ho as array,hr as SkillStateSchema,ia as projectFull,ii as applyIncrementalDiff,in as MANAGED_ARTIFACT_SCOPES,io as mediaKindForSidebarAssetExtension,ir as SkillGetSuccessSchema,it as CONFIG_DOC_NAME_USER,j as AgentWriteMdSuccessSchema,ja as fnv1aDigest,ji as getAgentCanonicalDescriptors,jn as SKILL_TARGETS_REL,jo as datetime,jr as SyncResolveConflictRequestSchema,jt as FolderConfigPutSuccessSchema,k as AgentUndoSuccessSchema,ka as PluginKey,ki as extractFrontmatterTags,kn as SKILL_STATE_TARGETS,ko as unknown,kr as SyncConflictContentSuccessSchema,kt as FolderConfigGetSuccessSchema,l as isValidLockPid,la as renderInventoryFooter,li as classifyWikiLinkTarget,ln as MetricsReconciliationSuccessSchema,lo as withConfigSpanSync,lr as SkillMoveSuccessSchema,lt as CreateFolderRequestSchema,ma as searchWorkspaceCorpus,mi as containsXmlTag,mn as PREVIEW_THEME_TOKENS,mr as SkillScopeSchema,n as RUNTIME_VERSION,na as prependFrontmatter,ni as WorkspaceSuccessSchema,nn as MANAGED_ARTIFACT_PREFIX_SKILL,no as isValidAttachmentFolderPath,nr as SkillFilePutRequestSchema,nt as CONFIG_DOC_NAME_PROJECT,o as acquireServerLock,oa as projectSkillContentDocName,oi as assertNeverProblemType,on as MarkdownManager,oo as toConfigIssue,or as SkillInstallStateSuccessSchema,ot as CheckoutResponseSchema,p as readProcessLock,pa as resolveSkillBundleWikiTarget,pi as composeTemplateFile,pn as PREVIEW_EMBED_STARTERS,po as _null,pr as SkillRestoreSuccessSchema,q as CC1_CHANNEL_BRANCH_SWITCHED,qa as SANDBOXED_HTML_CSP,qi as normalizeBridge,qn as SharePublishNameCheckResponseSchema,qr as TestFlushGitSuccessSchema,qt as LocalOpAuthEmptySuccessSchema,ra as previewEmbedFence,ri as applyFastDiff,rn as MANAGED_ARTIFACT_PREFIX_TEMPLATE,ro as locateIssue,rr as SkillFilePutSuccessSchema,rt as CONFIG_DOC_NAME_PROJECT_LOCAL,sa as readFmMap,si as classifyGitAuthError,sn as MetricsAgentPresenceSuccessSchema,so as validatePatchScopes,sr as SkillInstallSuccessSchema,st as ClientLogsRequestSchema,t as ProcessLockCollisionError,ta as parseTemplateFile,ti as UploadRequestSchema,tn as LocalOpOkInitResponseSchema,to as isMermaidDocFile,tr as SkillFileGetSuccessSchema,tt as CONFIG_DOC_NAME_OKIGNORE,ua as resolveAssetProjectPath,un as ORPHAN_MODES,ur as SkillPutRequestSchema,ut as CreateFolderSuccessSchema,v as updateProcessLockPort,vi as createWorkspaceSearchCorpus,vn as PagesSuccessSchema,vo as discriminatedUnion,vr as SkillTargetsPutRequestSchema,vt as DeletePathRequestSchema,w as AgentActivitySuccessSchema,wa as toWikiLinkSlug,wi as emitToleranceFire,wn as RollbackRequestSchema,wo as optional,wr as SkillUpdateSuccessSchema,x as AGENT_ICON_COLORS,xa as stripFrontmatter,xi as detectAppliedToleranceClasses,xn as RenamePathRequestSchema,xo as looseObject,xr as SkillUninstallRequestSchema,xt as DocumentReadSuccessSchema,ya as skillLiveDocName,yi as createWorkspaceSearchDocument,yn as PrincipalSuccessSchema,yo as intersection,yr as SkillTargetsPutSuccessSchema,yt as DeletePathSuccessSchema,z as BridgeMergeContentLossError,za as DEFAULT_SPANS_MAX_BYTES,zi as isHiddenDocName,zn as SeedApplyRequestSchema,zo as parseAsync,zr as TagsListSuccessSchema,zt as HubsSuccessSchema}from"./server-lock-iLcBw_q0-6FEAZKHu.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-BQ4-CT8p.mjs";import{a as simpleGit,i as esm_default,n as createGitInstance,o as require_src$15,r as withParentLock,t as applyGitEnv}from"./git-handle-XXj9bu6B-B4fXubq8.mjs";import{t as createPatch}from"./libesm-_Wi8iuGI.mjs";import{n as mimes,t as build_default}from"./build-CCNlCFyu.mjs";import{t as require_yazl}from"./yazl-DgCFuIuD.mjs";import{t as I1}from"./chunk-B74TABJS-DlbqoTuk.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-DigWkxW2.mjs";import{A as gt$1,B as wt,C as _i$1,D as da$1,E as bt,F as pe,H as zi$1,I as qi$1,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,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-BGSUD5R5-DQ0_iOyO.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-KX3P26DQ-Cli1PSKS.mjs";import{n as l$1,r as o,t as h$2}from"./chunk-R6VWJ2ZL-XKIhMSUi.mjs";import{r as o$1}from"./chunk-CWQS3NFK-DNm_iIwd.mjs";import{t as m$2}from"./chunk-DXB73IDG-Bx-Ikbnu.mjs";import{n as d$2,t as _$1}from"./chunk-5QMZ5MUS-_0tQyQsf.mjs";import{n as u$1,t as b$1}from"./chunk-A5O5YHGN-Kbs3GRxW.mjs";import{n,r,t as c$2}from"./chunk-OJDRYQWQ-LGuZyK6R.mjs";import{r as x$1,t as a$1}from"./chunk-24IMIIXA-BoP5OA93.mjs";import{n as n$1}from"./chunk-3THT3N7L-CBWmNncQ.mjs";import{t as n$2}from"./chunk-44UOCSGV-B6GSHp1s.mjs";import{t as import_websocket_server$1}from"./wrapper-CGw3ogaz.mjs";import{createRequire}from"node:module";import{execFile,spawn,spawnSync}from"node:child_process";import*as U from"node:path";import{basename,delimiter,dirname,extname,isAbsolute,join,normalize,posix,relative,resolve,sep,win32}from"node:path";import{URLSearchParams as URLSearchParams$1,fileURLToPath}from"node:url";import{homedir,hostname,platform,tmpdir}from"node:os";import*as I from"node:fs";import{appendFileSync,chmodSync,closeSync,cpSync,createReadStream,createWriteStream,existsSync,linkSync,lstatSync,mkdirSync,mkdtempSync,openSync,readFile,readFileSync,readSync,readdirSync,readlinkSync,realpathSync,renameSync,rmSync,rmdirSync,statSync,symlinkSync,unlinkSync,writeFileSync}from"node:fs";import crypto$1,{createHash,randomUUID,webcrypto}from"node:crypto";import{Transform,Writable}from"node:stream";import{access,constants as constants$1,lstat,mkdir,readFile as readFile$1,readdir,realpath,rename,stat as stat$1,unlink,writeFile}from"node:fs/promises";import crypto$2 from"crypto";import*as zlib from"zlib";import{Readable as Readable$1}from"stream";import{pipeline}from"node:stream/promises";import{setTimeout as setTimeout$1}from"node:timers/promises";import{promisify}from"node:util";import{Http2ServerRequest,constants as constants$2}from"http2";import{AsyncLocalStorage}from"node:async_hooks";import{lookup}from"node:dns";import{createServer}from"node:http";const GIT_AUTHOR_WRITER_PREFIX=`git-author-`;function gitAuthorWriterId(e){return`${GIT_AUTHOR_WRITER_PREFIX}${fnv1aDigest(e.trim().toLowerCase())}`}const WRITER_ID_RE=/^(agent-[^/]+|principal-[^/]+|git-author-[^/]+|file-system|git-upstream|openknowledge-service)$/;function classifyGitEntry(e,t,s){let g;try{g=statSync(e)}catch(t){let s=t.code;return s===`ENOENT`||s===`ENOTDIR`?{kind:`absent`}:{kind:`inaccessible`,gitPath:e,cause:t}}let S=computeProjectSubPath(t,s);if(g.isDirectory())return{kind:`directory`,path:e,projectSubPath:S};if(g.isFile()){let s;try{s=readFileSync(e,`utf-8`).trim()}catch(t){return{kind:`malformed-pointer`,gitPath:e,target:``,cause:t}}let g=s.match(/^gitdir:\s*(.+)$/);return g?{kind:`linked`,path:resolve(t,g[1]),gitPath:e,projectSubPath:S}:{kind:`malformed-pointer`,gitPath:e,target:``}}return{kind:`absent`}}function computeProjectSubPath(e,t){let s=relative(e,t);return s===``||s===`.`||s.startsWith(`..`)||isAbsolute(s)?``:s}function findAncestorGitEntry(e){let t=homedir(),s=resolve(e),g=64;for(let e=0;e<64;e++){if(s===t)return null;let e=dirname(s);if(e===s||e===t)return null;let g=resolve(e,`.git`);try{let t=statSync(g);if(t.isDirectory()||t.isFile())return{gitPath:g,workTreeRoot:e}}catch(e){let t=e.code;t!==`ENOENT`&&t!==`ENOTDIR`&&console.warn(`[shadow-repo-layout] Cannot stat ${g} (${t??`unknown`}); skipping ancestor`)}s=e}return null}function resolveGitDirDetailed(e){let t=resolve(e),s=classifyGitEntry(resolve(t,`.git`),t,t);if(s.kind!==`absent`)return s;let g=findAncestorGitEntry(t);return g===null?{kind:`absent`}:classifyGitEntry(g.gitPath,g.workTreeRoot,t)}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,shadowSubdirName(t.projectSubPath));case`linked`:if(!existsSync(t.path))throw new MalformedGitPointerError(t.gitPath,t.path);return resolve(t.path,shadowSubdirName(t.projectSubPath));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`)}}function shadowSubdirName(e){return e===``?`ok`:`ok-${slugifyShadowSubPath(e)}`}function slugifyShadowSubPath(e){let t=e.split(sep).join(`-`).replace(/\/+/g,`-`).replace(/[^A-Za-z0-9._-]/g,`_`).replace(/^\.+/,`_`),s=64;if(t.length<=64)return t||`sub`;let g=djb2(e).toString(16).padStart(8,`0`);return`${t.slice(0,55)}-${g}`}function djb2(e){let t=5381;for(let s=0;s<e.length;s++)t=t*33+e.charCodeAt(s)>>>0;return t}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 __require$2,n as __esmMin,o as __toCommonJS,r as __exportAll,s as __toESM$2,t as __commonJSMin$2}from"./chunk-C94x7I9S.mjs";import{$ as CLIENT_VERSION_HEADER,$a as humanFormat,$i as parseProjectSkillBundleDoc,$n as SkillDeleteSuccessSchema,$r as UA_PATTERNS,$t as LocalOpEmbeddingsSetKeyRequestSchema,A as AgentWriteMdRequestSchema,Aa as Fragment,Ai as formatFileSize,An as SKILL_STATE_VERSION_RE,Ar as SyncConflictsSuccessSchema,At as FolderConfigPutRequestSchema,B as BrokenLinkSchema,Ba as DEFAULT_TELEMETRY_ATTRIBUTE_DENYLIST,Bn as SeedApplySuccessSchema,Bo as safeParse$1,Br as TemplateDeleteSuccessSchema,Bt as INSTALLED_SKILLS_REL,C as AdvisoryWarningSchema,Ca as toBridgeInvariantLog,Ci as displayNameFromClientName,Cn as RescueListSuccessSchema,Co as object$1,Cr as SkillUpdateRequestSchema,Ct as DuplicatePathSuccessSchema,D as AgentPatchSuccessSchema,Da as withFences,Di as encodeShareUrl,Dn as SKILL_NAME_REGEX,Do as string,Dr as StreamingProblemEventSchema,Dt as EmbedDetectSuccessSchema,E as AgentPatchRequestSchema,Ea as validateDocName,Ei as emptySkillState,En as SKILL_CONTENT_ROOT,Eo as record,Er as SpawnCursorSuccessSchema,Et as EDITOR_PROJECT_SKILL_ROOT,F as BacklinkCountsSuccessSchema,Fa as DEFAULT_DEDUP_MODE,Fi as iconFromClientName,Fn as SaveVersionRequestSchema,Fo as meta$1,Fr as SyncTriggerSuccessSchema,Ft as FrontmatterValueSchema,G as CC1DiskAckPayloadSchema,Ga as OK_PROJECT_MARKER,Gi as managedArtifactDocNameFromContentTarget,Gn as ShareConstructUrlRequestSchema,Go as normalizeParams,Gr as TemplatePutSuccessSchema,Gt as LINEAGE_EPOCH_KEY,H as CC1ConfigIgnoreNestedErrorPayloadSchema,Ha as INLINE_RENDERABLE_EXTENSIONS,Hi as isOrphanMode,Hn as SeedPlanSuccessSchema,Ho as prettifyError,Hr as TemplateMoveRequestSchema,Ht as InstallSkillSuccessSchema,I as BacklinksSuccessSchema,Ia as DEFAULT_EMBEDDINGS_BASE_URL,Ii as instantiateDoc,In as SaveVersionSuccessSchema,Io as $ZodObject,Ir as TEMPLATE_IDENTITY_KEY,J as CC1_CHANNEL_CONFIG_IGNORE_NESTED_ERROR,Ja as SANDBOXED_HTML_EXTENSIONS,Ji as overMultipliedBodyLines,Jn as SharePublishOwnersResponseSchema,Jo as require_dist$1,Jr as TestRescanBacklinksSuccessSchema,Jt as LocalOpAuthHostRequestSchema,K as CC1ServerInfoPayloadSchema,Ki as mergeThreeWay,Kn as ShareConstructUrlResponseSchema,Ko as $constructor,Kr as TemplatesListSuccessSchema,Kt as LinkGraphSuccessSchema,L as BranchInfoResponseSchema,La as DEFAULT_EMBEDDINGS_MODEL,Li as isBranchNotFoundGitError,Ln as SearchRequestSchema,Lo as $ZodType,Lr as TEMPLATE_NAME_REGEX,Lt as HistorySuccessSchema,M as AgentWriteRequestSchema,Ma as ASSET_EXTENSIONS,Mi as getHeadingSlug,Mo as toJSONSchema,Mr as SyncResolveConflictSuccessSchema,Mt as ForwardLinksSuccessSchema,N as AgentWriteSuccessSchema,Na as CONFIG_SCHEMA_MAJOR_PATH,Ni as getParseHealth,Nn as SUPPORTED_DOC_EXTENSIONS,Nr as SyncStatusSchema,Nt as FrontmatterPatchRequestSchema,O as AgentUndoRequestSchema,Oa as getSchema,Oi as expandTagToHierarchy,On as SKILL_STATE_REL,Oo as union,Or as SuggestLinksSuccessSchema,Ot as EmptyRequestSchema,P as ApiConfigSuccessSchema,Pa as ConfigSchema$1,Pi as getWikiLinkText,Pn as SYSTEM_DOC_NAME,Po as describe$1,Pr as SyncTriggerRequestSchema,Pt as FrontmatterPatchSuccessSchema,Q as CC1_CONTRACT_VERSION,Qa as detectRemovedKeys,Qi as parseManagedArtifactName,Qn as ShareTargetStatusResponseSchema,Qr as TrashCleanupSuccessSchema,Qt as LocalOpEmbeddingsMutationSuccessSchema,R as BridgeInvariantViolationError,Ra as DEFAULT_LOGS_MAX_BYTES,Ri as isFrontmatterValueEmpty,Rn as SearchSuccessSchema,Ro as parse$1,Rr as TagsForNameSuccessSchema,Rt as HistoryVersionSuccessSchema,Sa as tagsMatchingPrefix,Si as detectFmRegion,Sn as RenamePathSuccessSchema,So as number,Sr as SkillUninstallSuccessSchema,St as DuplicatePathRequestSchema,T as AgentBurstDiffSuccessSchema,Ta as unwrapFrontmatterFences,Ti as emptyInstalledSkills,Tn as RollbackSuccessSchema,To as preprocess,Tr as SkillsListSuccessSchema,Tt as EDITOR_PROJECT_CONFIG_PATH,U as CC1ConfigValidationRejectedPayloadSchema,Ua as LINKABLE_ASSET_EXTENSIONS,Ui as isParseEquivalentBridge,Un as SemanticIndexStatusSchema,Uo as clone,Ur as TemplateMoveSuccessSchema,Ut as InstalledAgentsSuccessSchema,V as CC1BranchSwitchedPayloadSchema,Va as EXECUTABLE_BLOCKLIST_EXTENSIONS,Vi as isManagedArtifactDocName,Vn as SeedListPacksSuccessSchema,Vo as safeParseAsync$1,Vr as TemplateGetSuccessSchema,Vt as InstallSkillRequestSchema,W as CC1DerivedViewPayloadSchema,Wa as LOCAL_DIR,Wi as isValidBranchName,Wn as ServerInfoSuccessSchema,Wo as defineLazy,Wr as TemplatePutRequestSchema,Wt as InstalledSkillsSchema,X as CC1_CHANNEL_DISK_ACK,Xa as applyPatchToDocument,Xi as parseGlobalSkillBundleDoc,Xn as SharePublishResponseSchema,Xr as TestResetSuccessSchema,Xt as LocalOpAuthStatusSuccessSchema,Y as CC1_CHANNEL_CONFIG_VALIDATION_REJECTED,Ya as addConfigSpanEvent,Yi as parseFrontmatterYaml,Yn as SharePublishRequestSchema,Yr as TestRescanFilesSuccessSchema,Yt as LocalOpAuthSetIdentityRequestSchema,Z as CC1_CHANNEL_SERVER_INFO,Za as checkEmbeddingsBaseUrl,Zi as parseInstalledSkills,Zn as ShareTargetStatusRequestSchema,Zr as TrashCleanupRequestSchema,Zt as LocalOpCloneRequestSchema,_ as releaseServerLock,_a as sharedExtensions,_i as createTagInTextRegex,_n as PageHeadingsSuccessSchema,_o as custom,_r as SkillTargetsGetSuccessSchema,_t as DeadLinksSuccessSchema,a as acquireProcessLock,aa as projectMergeBoundarySpace,ai as applyPatchToFm,an as MCP_SERVER_NAME,ao as normalizeAttachmentFolderPath,ar as SkillInstallRequestSchema,at as CheckoutRequestSchema,ba as splitLeadingDocBoundary,bi as defaultScheduler,bn as ProblemDetailsSchema,bo as literal,br as SkillTargetsSchema,bt as DocumentListSuccessSchema,c as isProcessAlive,ca as reattachLeadingDocBoundary,ci as classifyMarkdownHref,cn as MetricsParseHealthSuccessSchema,co as withConfigSpan,cr as SkillMoveRequestSchema,ct as ClientLogsSuccessSchema,d as markProcessLockDraining,di as colorFromSeed,dn as OrphansSuccessSchema,do as ZodOptional$1,dr as SkillPutSuccessSchema,dt as CreatePageRequestSchema,ea as parseSkillTargets,ei as UploadAssetSuccessSchema,en as LocalOpOkInitRequestSchema,eo as isKnownConfigError,er as SkillFileDeleteSuccessSchema,et as CONFIG_DOC_NAMES,f as markServerLockDraining,fa as resolveInternalHref,fi as comparePmStructural,fn as PARSE_EQUIVALENCE_TOLERANCE,fo as _enum,fr as SkillRestoreRequestSchema,ft as CreatePageSuccessSchema,g as releaseProcessLock,ga as setToleranceTelemetryHook,gi as createCodeFenceTracker,gn as PROTOCOL_VERSION,go as boolean,gr as SkillTargetEditorSchema,gt as DOCUMENT_OPEN_BYTE_LIMIT,h as readServerLock,ha as serializeFrontmatterMap,hi as createBasenameIndex,hn as PROJECT_SKILL_EDITOR_IDS,ho as array,hr as SkillStateSchema,ia as projectFull,ii as applyIncrementalDiff,in as MANAGED_ARTIFACT_SCOPES,io as mediaKindForSidebarAssetExtension,ir as SkillGetSuccessSchema,it as CONFIG_DOC_NAME_USER,j as AgentWriteMdSuccessSchema,ja as fnv1aDigest,ji as getAgentCanonicalDescriptors,jn as SKILL_TARGETS_REL,jo as datetime,jr as SyncResolveConflictRequestSchema,jt as FolderConfigPutSuccessSchema,k as AgentUndoSuccessSchema,ka as PluginKey,ki as extractFrontmatterTags,kn as SKILL_STATE_TARGETS,ko as unknown,kr as SyncConflictContentSuccessSchema,kt as FolderConfigGetSuccessSchema,l as isValidLockPid,la as renderInventoryFooter,li as classifyWikiLinkTarget,ln as MetricsReconciliationSuccessSchema,lo as withConfigSpanSync,lr as SkillMoveSuccessSchema,lt as CreateFolderRequestSchema,ma as searchWorkspaceCorpus,mi as containsXmlTag,mn as PREVIEW_THEME_TOKENS,mr as SkillScopeSchema,n as RUNTIME_VERSION,na as prependFrontmatter,ni as WorkspaceSuccessSchema,nn as MANAGED_ARTIFACT_PREFIX_SKILL,no as isValidAttachmentFolderPath,nr as SkillFilePutRequestSchema,nt as CONFIG_DOC_NAME_PROJECT,o as acquireServerLock,oa as projectSkillContentDocName,oi as assertNeverProblemType,on as MarkdownManager,oo as toConfigIssue,or as SkillInstallStateSuccessSchema,ot as CheckoutResponseSchema,p as readProcessLock,pa as resolveSkillBundleWikiTarget,pi as composeTemplateFile,pn as PREVIEW_EMBED_STARTERS,po as _null,pr as SkillRestoreSuccessSchema,q as CC1_CHANNEL_BRANCH_SWITCHED,qa as SANDBOXED_HTML_CSP,qi as normalizeBridge,qn as SharePublishNameCheckResponseSchema,qr as TestFlushGitSuccessSchema,qt as LocalOpAuthEmptySuccessSchema,ra as previewEmbedFence,ri as applyFastDiff,rn as MANAGED_ARTIFACT_PREFIX_TEMPLATE,ro as locateIssue,rr as SkillFilePutSuccessSchema,rt as CONFIG_DOC_NAME_PROJECT_LOCAL,sa as readFmMap,si as classifyGitAuthError,sn as MetricsAgentPresenceSuccessSchema,so as validatePatchScopes,sr as SkillInstallSuccessSchema,st as ClientLogsRequestSchema,t as ProcessLockCollisionError,ta as parseTemplateFile,ti as UploadRequestSchema,tn as LocalOpOkInitResponseSchema,to as isMermaidDocFile,tr as SkillFileGetSuccessSchema,tt as CONFIG_DOC_NAME_OKIGNORE,ua as resolveAssetProjectPath,un as ORPHAN_MODES,ur as SkillPutRequestSchema,ut as CreateFolderSuccessSchema,v as updateProcessLockPort,vi as createWorkspaceSearchCorpus,vn as PagesSuccessSchema,vo as discriminatedUnion,vr as SkillTargetsPutRequestSchema,vt as DeletePathRequestSchema,w as AgentActivitySuccessSchema,wa as toWikiLinkSlug,wi as emitToleranceFire,wn as RollbackRequestSchema,wo as optional,wr as SkillUpdateSuccessSchema,x as AGENT_ICON_COLORS,xa as stripFrontmatter,xi as detectAppliedToleranceClasses,xn as RenamePathRequestSchema,xo as looseObject,xr as SkillUninstallRequestSchema,xt as DocumentReadSuccessSchema,ya as skillLiveDocName,yi as createWorkspaceSearchDocument,yn as PrincipalSuccessSchema,yo as intersection,yr as SkillTargetsPutSuccessSchema,yt as DeletePathSuccessSchema,z as BridgeMergeContentLossError,za as DEFAULT_SPANS_MAX_BYTES,zi as isHiddenDocName,zn as SeedApplyRequestSchema,zo as parseAsync,zr as TagsListSuccessSchema,zt as HubsSuccessSchema}from"./server-lock-iLcBw_q0-WEyo7ukm.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-BQ4-CT8p.mjs";import{a as simpleGit,i as esm_default,n as createGitInstance,o as require_src$15,r as withParentLock,t as applyGitEnv}from"./git-handle-XXj9bu6B-B4fXubq8.mjs";import{t as createPatch}from"./libesm-_Wi8iuGI.mjs";import{n as mimes,t as build_default}from"./build-CCNlCFyu.mjs";import{t as require_yazl}from"./yazl-DgCFuIuD.mjs";import{t as I1}from"./chunk-B74TABJS-DlbqoTuk.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-DigWkxW2.mjs";import{A as gt$1,B as wt,C as _i$1,D as da$1,E as bt,F as pe,H as zi$1,I as qi$1,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,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-BGSUD5R5-DQ0_iOyO.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-KX3P26DQ-Cli1PSKS.mjs";import{n as l$1,r as o,t as h$2}from"./chunk-R6VWJ2ZL-XKIhMSUi.mjs";import{r as o$1}from"./chunk-CWQS3NFK-DNm_iIwd.mjs";import{t as m$2}from"./chunk-DXB73IDG-Bx-Ikbnu.mjs";import{n as d$2,t as _$1}from"./chunk-5QMZ5MUS-_0tQyQsf.mjs";import{n as u$1,t as b$1}from"./chunk-A5O5YHGN-Kbs3GRxW.mjs";import{n,r,t as c$2}from"./chunk-OJDRYQWQ-LGuZyK6R.mjs";import{r as x$1,t as a$1}from"./chunk-24IMIIXA-BoP5OA93.mjs";import{n as n$1}from"./chunk-3THT3N7L-CBWmNncQ.mjs";import{t as n$2}from"./chunk-44UOCSGV-B6GSHp1s.mjs";import{t as import_websocket_server$1}from"./wrapper-CGw3ogaz.mjs";import{createRequire}from"node:module";import{execFile,spawn,spawnSync}from"node:child_process";import*as U from"node:path";import{basename,delimiter,dirname,extname,isAbsolute,join,normalize,posix,relative,resolve,sep,win32}from"node:path";import{URLSearchParams as URLSearchParams$1,fileURLToPath}from"node:url";import{homedir,hostname,platform,tmpdir}from"node:os";import*as I from"node:fs";import{appendFileSync,chmodSync,closeSync,cpSync,createReadStream,createWriteStream,existsSync,linkSync,lstatSync,mkdirSync,mkdtempSync,openSync,readFile,readFileSync,readSync,readdirSync,readlinkSync,realpathSync,renameSync,rmSync,rmdirSync,statSync,symlinkSync,unlinkSync,writeFileSync}from"node:fs";import crypto$1,{createHash,randomUUID,webcrypto}from"node:crypto";import{Transform,Writable}from"node:stream";import{access,constants as constants$1,lstat,mkdir,readFile as readFile$1,readdir,realpath,rename,stat as stat$1,unlink,writeFile}from"node:fs/promises";import crypto$2 from"crypto";import*as zlib from"zlib";import{Readable as Readable$1}from"stream";import{pipeline}from"node:stream/promises";import{setTimeout as setTimeout$1}from"node:timers/promises";import{promisify}from"node:util";import{Http2ServerRequest,constants as constants$2}from"http2";import{AsyncLocalStorage}from"node:async_hooks";import{lookup}from"node:dns";import{createServer}from"node:http";const GIT_AUTHOR_WRITER_PREFIX=`git-author-`;function gitAuthorWriterId(e){return`${GIT_AUTHOR_WRITER_PREFIX}${fnv1aDigest(e.trim().toLowerCase())}`}const WRITER_ID_RE=/^(agent-[^/]+|principal-[^/]+|git-author-[^/]+|file-system|git-upstream|openknowledge-service)$/;function classifyGitEntry(e,t,s){let g;try{g=statSync(e)}catch(t){let s=t.code;return s===`ENOENT`||s===`ENOTDIR`?{kind:`absent`}:{kind:`inaccessible`,gitPath:e,cause:t}}let S=computeProjectSubPath(t,s);if(g.isDirectory())return{kind:`directory`,path:e,projectSubPath:S};if(g.isFile()){let s;try{s=readFileSync(e,`utf-8`).trim()}catch(t){return{kind:`malformed-pointer`,gitPath:e,target:``,cause:t}}let g=s.match(/^gitdir:\s*(.+)$/);return g?{kind:`linked`,path:resolve(t,g[1]),gitPath:e,projectSubPath:S}:{kind:`malformed-pointer`,gitPath:e,target:``}}return{kind:`absent`}}function computeProjectSubPath(e,t){let s=relative(e,t);return s===``||s===`.`||s.startsWith(`..`)||isAbsolute(s)?``:s}function findAncestorGitEntry(e){let t=homedir(),s=resolve(e),g=64;for(let e=0;e<64;e++){if(s===t)return null;let e=dirname(s);if(e===s||e===t)return null;let g=resolve(e,`.git`);try{let t=statSync(g);if(t.isDirectory()||t.isFile())return{gitPath:g,workTreeRoot:e}}catch(e){let t=e.code;t!==`ENOENT`&&t!==`ENOTDIR`&&console.warn(`[shadow-repo-layout] Cannot stat ${g} (${t??`unknown`}); skipping ancestor`)}s=e}return null}function resolveGitDirDetailed(e){let t=resolve(e),s=classifyGitEntry(resolve(t,`.git`),t,t);if(s.kind!==`absent`)return s;let g=findAncestorGitEntry(t);return g===null?{kind:`absent`}:classifyGitEntry(g.gitPath,g.workTreeRoot,t)}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,shadowSubdirName(t.projectSubPath));case`linked`:if(!existsSync(t.path))throw new MalformedGitPointerError(t.gitPath,t.path);return resolve(t.path,shadowSubdirName(t.projectSubPath));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`)}}function shadowSubdirName(e){return e===``?`ok`:`ok-${slugifyShadowSubPath(e)}`}function slugifyShadowSubPath(e){let t=e.split(sep).join(`-`).replace(/\/+/g,`-`).replace(/[^A-Za-z0-9._-]/g,`_`).replace(/^\.+/,`_`),s=64;if(t.length<=64)return t||`sub`;let g=djb2(e).toString(16).padStart(8,`0`);return`${t.slice(0,55)}-${g}`}function djb2(e){let t=5381;for(let s=0;s<e.length;s++)t=t*33+e.charCodeAt(s)>>>0;return t}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
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===`producer-guard-loss`){let e=w;return typeof e.construct==`string`?{kind:`producer-guard-loss`,docName:E,size:D,metadata:{construct:e.construct}}:null}if(S===`observer-a-duplication`){let e=w;return typeof e.duplicatedLineCount==`number`&&Number.isFinite(e.duplicatedLineCount)?{kind:`observer-a-duplication`,docName:E,size:D,metadata:{duplicatedLineCount:e.duplicatedLineCount}}: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}if(S===`auto-consolidation`){let e=w;return typeof e.foldedRefs==`number`&&Number.isFinite(e.foldedRefs)&&typeof e.trigger==`string`?{kind:`auto-consolidation`,docName:E,size:D,metadata:{foldedRefs:e.foldedRefs,trigger:e.trigger}}: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 parseOkActor(e){if(!e)return null;for(let t of e.split(`
|
|
4
4
|
`)){let e=t.trim();if(!e.startsWith(OK_ACTOR_PREFIX))continue;let s;try{s=JSON.parse(e.slice(10))}catch{return null}return typeof s!=`object`||!s?null:parseOkActorObject(s)}return null}function parseOkActors(e){if(!e)return[];let t=[];for(let s of e.split(`
|
|
@@ -790,7 +790,7 @@ caused by: `+S(E,t)):w},w=e=>S(e,new Set),E=(e,t,S)=>{if(!s(e))return``;let w=S?
|
|
|
790
790
|
`);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(`
|
|
791
791
|
`).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(`
|
|
792
792
|
`)){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(`
|
|
793
|
-
`)){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}function computeMapDrivenBodySplice(e,t,s,g){let S,w,E;try{S=s.parseToMdast(e).children,w=s.serialize(t),E=s.parseToMdast(w).children}catch(e){return g?.(`parse-error`,e),null}if(!allBlocksCarryPositions(S)||!allBlocksCarryPositions(E))return g?.(`missing-position`),null;
|
|
793
|
+
`)){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}function computeMapDrivenBodySplice(e,t,s,g){let S,w,E;try{S=s.parseToMdast(e).children,w=s.serialize(t),E=s.parseToMdast(w).children}catch(e){return g?.(`parse-error`,e),null}if(!allBlocksCarryPositions(S)||!allBlocksCarryPositions(E))return g?.(`missing-position`),null;let D=0;for(;D<S.length&&D<E.length&&structurallyEqual(S[D],E[D]);)D++;let O=0;for(;O<S.length-D&&O<E.length-D&&structurallyEqual(S[S.length-1-O],E[E.length-1-O]);)O++;let k=D>0?blockEndOffset(S[D-1]):S.length>0?blockStartOffset(S[0]):0,j=O>0?blockStartOffset(S[S.length-O]):e.length,F=D>0?blockEndOffset(E[D-1]):E.length>0?blockStartOffset(E[0]):0,L=O>0?blockStartOffset(E[E.length-O]):w.length;return{spliceStart:k,spliceEnd:j,newSlice:w.slice(F,L)}}function allBlocksCarryPositions(e){for(let t of e){let e=t.position?.start?.offset,s=t.position?.end?.offset;if(typeof e!=`number`||typeof s!=`number`)return!1}return!0}function blockStartOffset(e){let t=e.position?.start?.offset;if(typeof t!=`number`)throw Error(`mdast node missing position.start.offset`);return t}function blockEndOffset(e){let t=e.position?.end?.offset;if(typeof t!=`number`)throw Error(`mdast node missing position.end.offset`);return t}function structurallyEqual(e,t){return stringifyIgnorePosition(e)===stringifyIgnorePosition(t)}function stringifyIgnorePosition(e){return JSON.stringify(e,(e,t)=>e===`position`?void 0:t)}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`}var ProducerGuardViolationError=class extends Error{info;constructor(e){super(`Observer-A producer guard: serialize output failed structural legality (${e.reason}: ${e.detail})`),this.name=`ProducerGuardViolationError`,this.info=e}};const PRODUCER_GUARD_DANGER_TYPES=new Set([`jsxComponent`,`table`,`tableCell`,`tableHeader`]);function fragmentContainsDangerSpace(e){if(e.type&&PRODUCER_GUARD_DANGER_TYPES.has(e.type))return!0;if(e.content){for(let t of e.content)if(fragmentContainsDangerSpace(t))return!0}return!1}function dangerSpaceLocator(e){let t=new Set,s=e=>{if(e.type&&PRODUCER_GUARD_DANGER_TYPES.has(e.type)&&t.add(e.type),e.content)for(let t of e.content)s(t)};return s(e),[...t].sort().join(`,`)}let mapDrivenParseErrorWarned=!1;function warnOnceMapDrivenParseError(e,t){mapDrivenParseErrorWarned||(mapDrivenParseErrorWarned=!0,console.warn(`[Server Observer A] Map-driven splice parse/serialize threw (doc: ${e??`unknown`}); drains fall back to the incremental diff (warned once; further failures count in mapDrivenSpliceFallback only):`,t instanceof Error?t.message:String(t)))}function tryComputeMapDrivenSplice(e){let{currentText:t,lastSyncedXmlMd:s,json:g,mdManager:S,docName:w}=e;if(t!==s)return incrementMapDrivenSpliceFallback(`text-mismatch`),null;if(w!==void 0&&(isSystemDoc(w)||isConfigDoc(w)))return incrementMapDrivenSpliceFallback(`synthetic-doc`),null;let{body:E}=stripFrontmatter(t),D=t.length-E.length,O=computeMapDrivenBodySplice(E,g,S,(e,t)=>{incrementMapDrivenSpliceFallback(e),e===`parse-error`&&warnOnceMapDrivenParseError(w,t)});return O?{spliceStart:D+O.spliceStart,spliceEnd:D+O.spliceEnd,newSlice:O.newSlice}:null}function applyMapDrivenSplice(e,t){let s=t.spliceEnd-t.spliceStart;s>0&&e.delete(t.spliceStart,s),t.newSlice.length>0&&e.insert(t.spliceStart,t.newSlice)}function settlesSplitBrain(e,t,s){return e!==t&&normalizeBridge(e)!==(s??normalizeBridge(t))}function carrierKind(e){return e instanceof YXmlElement?e.nodeName:e instanceof YXmlText?`#text`:`#hook`}function mintingClientId(e){return e._item?.id?.client}const collapseSpaces=e=>e.replace(/\s+/g,` `).trim(),stripInlineMarkerChars=e=>e.replace(/[*_~`]+/g,``);function xmlBareText(e){return collapseSpaces(stripInlineMarkerChars(e.replace(/<[^>]*>/g,``).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/&/g,`&`)))}function markdownBareText(e){return collapseSpaces(stripInlineMarkerChars(e.replace(/!?\[([^\]]*)\]\([^)]*\)/g,`$1`).replace(/\\([\\`*_{}[\]()#+\-.!><])/g,`$1`)))}function findRaceDuplicatedSpans(e,t,s){if(s.length===0)return!1;let g=e.toArray(),S=g.map(e=>xmlBareText(e.toString()));for(let e of s){let s=markdownBareText(e);if(s.length<8)continue;let w=new Set,E=new Set;for(let e=0;e<g.length;e++){let D=g[e];if(D===void 0||!S[e]?.includes(s))continue;let O=mintingClientId(D);O!==void 0&&(O===t?w.add(carrierKind(D)):E.add(carrierKind(D)))}for(let e of w)for(let t of E)if(e!==t)return!0}return!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()})),t.info.which===`growth`?incrementBridgeMergeContentGrowth():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,which:t.info.which}}).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(`
|
|
794
794
|
`).slice(0,4).join(`
|
|
795
795
|
`)})})})},D=t=>{try{emitBridgeSplitBrainRederive(t,e.docName)&&(incrementBridgeSplitBrainRederives(),console.warn(JSON.stringify({event:`bridge-split-brain-rederive`,"doc.name":e.docName??null,site:t})))}catch(e){console.warn(`[Server Observer A] Split-brain telemetry failed:`,e)}},O=(t,s)=>{let g=e.shadow?.();if(!g||!e.docName)return;let S=e.getBranch?.()??`main`,w=e.contentRoot??``,E=e.docName;queueMicrotask(()=>{saveInMemoryCheckpoint(g,w,{kind:`observer-a-duplication`,docName:E,contents:t,label:`Before duplication re-derive @ ${new Date().toISOString()}`,branch:S,metadata:{duplicatedLineCount:s}}).then(e=>{incrementObserverADuplicationCheckpointCreated(),console.warn(JSON.stringify({event:`observer-a-duplication-checkpoint-created`,docName:E,sha:e,kind:`observer-a-duplication`,timestamp:new Date().toISOString()}))}).catch(e=>{let t=e instanceof Error?e:Error(String(e));console.warn(`[Server Observer A] Duplication checkpoint write failed:`,{docName:E,name:t.name,message:t.message,stack:t.stack?.split(`
|
|
796
796
|
`).slice(0,4).join(`
|
|
@@ -3260,6 +3260,6 @@ Incremental by default — don't re-read the whole repo.
|
|
|
3260
3260
|
`).split(`
|
|
3261
3261
|
`),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();initChain=Promise.resolve();constructor(e){this.contentDir=e.contentDir,this.contentFilter=e.contentFilter}updateDocumentFromMarkdown(e,t){if(!isLinkIndexExcludedDoc(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(isLinkIndexExcludedDoc(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(){let e=this.initChain.then(()=>this.initOnce());return this.initChain=e.catch(e=>{console.warn(`[tag-index] init failed (chain cleared for next init):`,e)}),e}async initOnce(){if(this.state=createEmptyState(),!existsSync(this.contentDir))return;let e=await this.listDocsWithPaths(),t=50;for(let t=0;t<e.length;t+=50){let s=e.slice(t,t+50),g=await Promise.all(s.map(async({docName:e,filePath:t})=>{try{return{docName:e,markdown:await readFile$1(t,`utf-8`)}}catch(t){return console.warn(`[tag-index] Failed to read ${e} during init:`,t),null}}));for(let e of g)if(e)try{this.updateDocumentFromMarkdown(e.docName,e.markdown)}catch(t){console.warn(`[tag-index] Failed to index ${e.docName} during init:`,t)}}}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))}async listDocsWithPaths(){let e=[];await 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))}async walkContentDir(e,t){let s;try{s=await readdir(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=toPosix(relative(this.contentDir,s));if(this.contentFilter&&e&&this.contentFilter.isDirExcluded(e))continue;await this.walkContentDir(s,t);continue}if(!g.isFile()||!isSupportedDocFile(g.name))continue;let S=toPosix(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 buildSyncCredentialArgs(e){return[`-c`,`credential.helper=!${(e&&e.length>0?e:[`open-knowledge`]).map(shellEscape).join(` `)} auth git-credential`]}function resolveUpstreamChanges(e,t,s,g){let S=new Map;if(!s)return S;let w;try{w=spawnSync(`git`,[`-c`,`core.quotePath=false`,`log`,`${s}..${g}`,`--no-merges`,`--name-only`,`--format=C%x00%an%x00%ae`],withHiddenWindowsConsole({cwd:e,encoding:`utf-8`,timeout:5e3}))}catch(e){return getLogger(`upstream-attribution`).warn({err:e,oldHead:s,newHead:g},`git log spawn threw; upstream docs keep file-system attribution`),S}if(w.error||w.status!==0||typeof w.stdout!=`string`)return getLogger(`upstream-attribution`).warn({err:w.error,status:w.status,signal:w.signal,stderr:typeof w.stderr==`string`?w.stderr.slice(0,500):void 0,oldHead:s,newHead:g},`git log failed; upstream docs keep file-system attribution`),S;let E=null;for(let s of w.stdout.split(`
|
|
3262
3262
|
`)){let g=s.trim();if(g===``)continue;if(g.startsWith(`C\0`)){let[,e,t]=g.split(`\0`);E=e&&t?{name:e,email:t}:null;continue}if(!E||!g.endsWith(`.md`)&&!g.endsWith(`.mdx`))continue;let w=resolve(e,g);if(!isWithinContentDir(w,t))continue;let D=pathToDocName(w,t);S.has(D)||existsSync(w)&&S.set(D,E)}return S}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,singleDocRelPath:ee,ephemeral:J=!1}=e,Y=getLogger(`server`);function te(){let e=readConfigSafely({absPath:resolveConfigPath(`project`,s),sideline:!1,warn:e=>Y.warn({message:e},`[config] could not read project config`)});if(!e.valid){let t=isKnownConfigError(e.error)&&e.error.code===`SCHEMA_INVALID`?e.error.issues.filter(e=>e.path.map(String).join(`.`)===`content.attachmentFolderPath`):[];if(t.length>0){let e=t.map(e=>e.message).join(`; `);throw Error(`Invalid content.attachmentFolderPath in project config: ${e}`)}Y.warn({},`[config] committed content.attachmentFolderPath unavailable (project config invalid) — using default attachment placement`)}return e.value.content.attachmentFolderPath??`./`}function ne(){let e=readConfigSafely({absPath:resolveConfigPath(`project-local`,s),sideline:!1,warn:e=>Y.warn({message:e},`[config] could not read project-local config`)}),t=e.value.autoSync?.enabled;if(t!=null)return t===!0;e.valid||Y.warn({},`[config] project-local autoSync.enabled unavailable (config invalid) — falling back to the committed project default`);let g=readConfigSafely({absPath:resolveConfigPath(`project`,s),sideline:!1,warn:e=>Y.warn({message:e},`[config] could not read project config`)});return g.valid||Y.warn({},`[config] committed autoSync.default unavailable (project config invalid) — defaulting to disabled`),g.value.autoSync?.default===!0}function ae(){return readProjectLocalSemanticConfig(s,{configHomedirOverride:k,onWarn:e=>Y.warn({message:e},`[config] could not read project-local config`)})}function oe(e){return`${normalizeProviderId(e.baseUrl)}|${e.model}|${e.dimensions??1536}`}function se(e){let t;(e===`__config__/project`||e===`__local__/project`)&&(t=ne(),jr?.setEnabled(t).catch(s=>{Y.warn({err:s,enabled:t,docName:e},`[sync] failed to apply autoSync.enabled from config`)}));let s=ae();ze.applyConfig({enabled:s.enabled,providerFingerprint:oe(s)}),Y.info({docName:e,autoSyncEnabled:t,semanticEnabled:s.enabled},`[config] applied persisted config to in-process consumers`)}initTelemetry();let ce=randomUUID(),ue=getLocalDir(s);if(acquireServerLock(ue,{port:e.port??0,worktreeRoot:s,kind:e.lockKind??`interactive`,capabilities:[`http`,`ws`]}),!q)try{assertCompatibleStateManifest({lockDir:ue,shadowRepoDir:resolveShadowDir(s)})}catch(e){throw releaseServerLock(ue),e}let de=createBasenameIndex(),fe=(e,t)=>de.resolveEmbed(e,t),me=(e,s)=>{let g=de.resolveEmbed(e,s);if(!g&&e.includes(`/`)&&(g=e.replace(/^\.?\//,``)),!g)return null;let S=resolve(t,g);if(!isWithinDir(S,resolve(t)))return null;try{let e=statSync(S);return e.isFile()?e.size:null}catch{return null}},ge,_e,ve,ye,Ce,we,Te,De,je=null,Me=null,Pe=null,Ie=null,Re=ae(),ze=new SemanticSearchService({loadEmbedder:e.embedderLoader??(()=>{let t=ae();return loadOpenAiEmbedder({keyStore:e.embeddingsKeyStore??null,config:{baseUrl:t.baseUrl,model:t.model,dimensions:t.dimensions}})}),cacheDir:join(getLocalDir(s),`embeddings`),enabled:Re.enabled,providerFingerprint:oe(Re)}),Be=null,Ve=new Set,Ue=!1,We,Ge,Ke,Xe=new Promise((e,t)=>{Ge=e,Ke=t});function $e(e){je?.signal(e)}let nt=2e3,rt=null;function it(){rt!==null&&clearTimeout(rt),rt=setTimeout(()=>{rt=null,_e.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist debounced cache:`,e)})},2e3)}let at=2e3,st=null,vt=!1,St=()=>{try{saveRemovedDocsJournal(s,Tt.entries())}catch(e){Y.warn({err:e},`[removed-docs-journal] failed to persist removal journal`)}},Tt=new RecentlyRemovedDocs(void 0,{onEviction:()=>incrementRecentlyRemovedDocsEviction(),onSizeChange:e=>setRecentlyRemovedDocsSize(e),onMutate:()=>{!vt||st!==null||(st=setTimeout(()=>{st=null,St()},2e3))}});for(let[e,g]of loadRemovedDocsJournal(s))isReservedForUserTree(e)||isSafeDocName(e)&&([`.md`,`.mdx`].some(s=>{let g=resolve(t,`${e}${s}`);return isWithinDir(g,resolve(t))&&existsSync(g)})||Tt.restore(e,g));vt=!0;let Et=(e,t)=>{isReservedForUserTree(e)||Tt.setRenamed(e,t)},jt=e=>{if(!isReservedForUserTree(e)){if(Tt.peek(e)?.kind===`renamed`){console.info(JSON.stringify({event:`recently-removed-docs-unpaired-delete-suppressed`,docName:e,source:`watcher-delete`}));return}Tt.setDeleted(e)}},Mt=e=>{isReservedForUserTree(e)||Tt.delete(e)};try{ge=createContentFilter({projectDir:s,contentDir:t,singleDocRelPath:ee,onAfterRebuild:()=>{_e.rebuildFromDisk(getActiveBranch()).catch(e=>{getLogger(`server-factory`).warn({err:e},`[content-filter] backlink-index rebuild failed after onAfterRebuild`)}),ve.init().catch(e=>{getLogger(`server-factory`).warn({err:e},`[content-filter] tag-index rebuild failed after onAfterRebuild`)}),reconcileFileIndexAfterFilterRebuild(rn).then(({prunedFiles:e,prunedFolders:t})=>{let s=e+t;s>0?getLogger(`server-factory`).info({pruned:s,prunedFiles:e,prunedFolders:t},`[content-filter] reconciled file indexes after onAfterRebuild`):getLogger(`server-factory`).debug({prunedFiles:e,prunedFolders:t},`[content-filter] file index reconcile completed after onAfterRebuild (no entries pruned; rescan may have added entries)`)}).catch(e=>{getLogger(`server-factory`).warn({err:e},`[content-filter] file index reconcile failed after onAfterRebuild`)})}}),_e=new BacklinkIndex({projectDir:s,contentDir:t,contentFilter:ge}),ve=new TagIndex({contentDir:t,contentFilter:ge}),ve.init().catch(e=>{getLogger(`server-factory`).warn({err:e},`[server-factory] tag-index init failed; continuing with empty index`)}),ye={current:F},Ce=E?createMaintenanceCoordinator({getShadow:()=>ye.current??null,getCurrentBranch:()=>sn?.getLastKnownBranch()??null,contentRoot:L??``,projectGitDir:resolveGitDir(s)??void 0,isWriterLive:e=>{if(!Pe&&!De)return getLogger(`server-factory`).debug({writerId:e},`[server-factory] isWriterLive called before liveness deps populated — treating writer as dead`),!1;if(Pe?.getPresenceMap()[e])return!0;let t=e.startsWith(`agent-`)?e.slice(6):e;for(let e of De?.sessionsForConnection(t)??[])return!0;return!1}}):void 0,we=createPersistenceExtension({contentDir:t,projectDir:s,gitEnabled:E,commitDebounceMs:D,wipRef:O,shadowRef:ye,ephemeral:J,contentRoot:L,backlinkIndex:_e,configHomedirOverride:k,getCurrentBranch:()=>sn?.getLastKnownBranch()??null,resolveEmbed:fe,resolveSize:me,getPrincipal:()=>Be,onAgentCommit:()=>je?.signal(`session-activity`),onFlushCommit:()=>Ce?.noteFlushCommit(),onDiskFlush:(e,t,s,g)=>{je?.emitDiskAck(e,t),!isReservedForUserTree(e)&&assetReferencesChanged(g,s)&&(Ie?.(),$e(`files`))},onConfigRejected:(e,t)=>je?.emitConfigValidationRejected(e,t),onConfigPersisted:se,isRecentlyRemoved:e=>Tt.has(e),mdManager:e.mdManager}),Te=new Hocuspocus({quiet:g,debounce:S,maxDebounce:w,extensions:[we.extension]});let B=Te.shouldUnloadDocument.bind(Te);Te.shouldUnloadDocument=e=>{if(Ve.has(e)||Ue&&B(e))return!0;let t=e.name;return isReservedForUserTree(t)||getReconciledBase(t)!==void 0||e.getXmlFragment(`default`).length!==0||e.getText(`source`).length!==0?!1:B(e)},We=async e=>{Ve.add(e);try{await Te.unloadDocument(e)}finally{Ve.delete(e)}},je=new CC1Broadcaster(Te),Me=new AgentFocusBroadcaster(Te),Pe=new AgentPresenceBroadcaster(Te),De=new AgentSessionManager(Te);let q=createLiveDerivedIndexExtension({backlinkIndex:_e,tagIndex:ve,signalChannel:$e});Te.configuration.extensions.push(q),Te.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!==ce)throw new HocuspocusAuthRejection(`server-instance-mismatch`,`server instance mismatch: client claimed ${g}, this server is ${ce}`);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`&&(Be&&s.principalId===Be.id?E.principalId=Be.id:Be?console.warn(JSON.stringify({event:`principal-token-mismatch`,claimed:s.principalId,loaded:Be.id})):E.principalId=s.principalId),typeof s.tabSessionId==`string`&&(E.tabSessionId=s.tabSessionId),E.kind=`human`}}),Te.configuration.extensions.push({__kind:`config-doc-admission-guard`,async onAuthenticate(e){if(!isConfigDoc(e.documentName)&&!isManagedArtifactDoc(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})`)}});let Y=resolve(t);function ne(e){if(!isSafeDocName(e))return null;let t=resolve(Y,docNameToRelativePath(e));return isWithinDir(t,Y)?t:null}Te.configuration.extensions.push({__kind:`removal-redirect-guard`,async onAuthenticate(e){await runRemovalRedirectGuard(e.documentName,{recentlyRemovedDocs:Tt,resolveFilePath:ne,fileExists:existsSync})}}),Te.configuration.extensions.push({__kind:`doc-lineage-guard`,async onAuthenticate(e){let t=parseHocuspocusAuthToken(e.token);runDocLineageGuard(e.documentName,t?.expectedDocLineageEpoch,{getLoadedDoc:e=>Te.documents.get(e)})}}),Te.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 oe=createApiExtension({hocuspocus:Te,sessionManager:De,contentDir:t,contentFilter:ge,serverInstanceId:ce,getFileIndex:()=>rn?rn.getFileIndex():new Map,getAttachmentFolderPath:te,getAllFilesIndex:()=>rn?rn.getAllFilesIndex():new Map,getFileIndexGeneration:()=>rn?.getFileIndexGeneration()??0,mutateFileIndex:e=>rn?.mutateFileIndex(e),getFolderIndex:()=>rn?rn.getFolderIndex():new Map,getAliasMap:()=>rn?rn.getAliasMap():new Map,getFolderAliasIndex:()=>rn?rn.getFolderAliasIndex():new Map,rescanFiles:()=>rn?.rescanFromDisk(),enableTestRoutes:j,shadowRef:ye,flushGitCommit:()=>we.flushPendingGitCommit(),flushContributors:()=>we.flushContributors(),takeStoreFailure:e=>we.takeStoreFailure(e),takeStoreDivergence:e=>we.takeStoreDivergence(e),markAgentWriteStore:e=>we.markAgentWriteStore(e),getCurrentBranch:()=>sn?.getLastKnownBranch()??null,getDiskAckSVs:()=>je?.getLatestDiskAckSVsAsBase64()??{},contentRoot:L,backlinkIndex:_e,tagIndex:ve,signalChannel:$e,agentFocusBroadcaster:Me,agentPresenceBroadcaster:Pe,onAgentWrite:e.onAgentWrite,getSyncEngine:()=>jr,localOpCliArgs:H,projectDir:s,resolveEmbed:fe,getPrincipal:()=>Be,homeDirOverride:k,forceUnloadDocument:We,ready:Xe,recentlyRemovedDocs:Tt,serializeDoc:zt,evictManagedArtifactLkg:e=>{we.managedArtifactCtx.lkgCache.delete(e)},semanticSearch:ze,getSemanticSimilarityFloor:()=>ae().similarityFloor,embeddingsSecretsFile:secretsFilePath(k),ephemeral:J,onReferencedAssetsCacheInvalidator:e=>{Ie=e}});Te.configuration.extensions.push(oe),Te.configuration.extensions.push(createServerObserverExtension({mdManager,schema,shadowRef:ye,contentRoot:L,getCurrentBranch:()=>sn?.getLastKnownBranch()??null,resolveEmbed:fe,resolveSize:me})),Te.configuration.extensions.push(createSyncHandshakeSpanExtension()),Te.configuration.extensions.push(createConflictLifecycleSeedExtension({getSyncEngine:()=>jr,projectDir:s,contentDir:t}))}catch(e){throw releaseServerLock(ue),e}let Ft=null,It=new Map,Lt=[];function Rt(e,t){let s=resolve(e,`rescue`),g=resolve(s,docNameToRelativePath(t));return isWithinDir(g,s)?g:null}function zt(e){let t=Te.documents.get(e);return t?serializeYDocSource(t):null}let Bt=(e,t)=>applyExternalChange(Te,e,t,fe,me);function Vt(e){if(!isDocInConflict(e))return;let t=e.getMap(`lifecycle`);t.delete(`status`),t.delete(`reason`)}let Ht=e=>{if(!e)return;let t=`[[${e}]]`;for(let[s]of Te.documents){if(isReservedForUserTree(s))continue;let g=Te.documents.get(s);if(!g)continue;let S=g.getText(`source`).toString();if(S.includes(t))try{g.transact(()=>{applyDiskContentToDoc(g,S,fe,s)},FILE_WATCHER_ORIGIN)}catch(t){Y.error({err:t,docName:s,assetBasename:e},`[asset-event] failed to re-render ${s} for asset basename ${e}`)}}},Ut=null,Wt=e=>{e&&(Ut===null&&(Ut=new Set,setImmediate(()=>{let e=Ut;if(Ut=null,e)try{for(let t of e)Ht(t)}catch(t){Y.error({err:t,basenames:[...e]},`[asset-event] dedup rerender pass crashed`)}})),Ut.add(e))};function Xt(e){switch(e.kind){case`rename`:return e.newDocName;case`asset-create`:case`asset-delete`:case`folder-create`:case`folder-delete`:case`file-create`:case`file-update`:case`file-delete`:return e.relativePath;case`create`:case`update`:case`delete`:case`conflict`:return e.docName;default:return assertNeverDiskEvent(e)}}async function Zt(e){try{switch(e.kind){case`create`:Y.info({docName:e.docName},`[reconcile] create: ${e.docName}`),_e.updateDocumentFromMarkdown(e.docName,e.content),it(),ve.updateDocumentFromMarkdown(e.docName,e.content),$e(`files`),$e(`backlinks`),$e(`graph`),$e(`tags`),Mt(e.docName);break;case`update`:{let{docName:t,content:s}=e,g=Te.documents.get(t);if(!g){_e.updateDocumentFromMarkdown(t,s),it(),ve.updateDocumentFromMarkdown(t,s),$e(`backlinks`),$e(`graph`),$e(`tags`);return}let S=getReconciledBase(t)??``,w=zt(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(Y.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`:Vt(g),_e.updateDocumentFromMarkdown(t,s),it(),ve.updateDocumentFromMarkdown(t,s),$e(`backlinks`),$e(`graph`),$e(`tags`);break;case`clean`:try{Bt(t,E.newContent),setReconciledBase(t,E.newContent),incrementReconcile(),Vt(g),_e.updateDocumentFromMarkdown(t,s),it(),ve.updateDocumentFromMarkdown(t,s),$e(`backlinks`),$e(`graph`),$e(`tags`)}catch(e){Y.error({err:e,docName:t},`[reconcile] failed to apply clean content to Y.Doc for ${t}`),setReconciledBase(t,s),Vt(g)}break;case`merged`:try{Bt(t,E.newContent),setReconciledBase(t,s),incrementReconcile(),Vt(g),_e.updateDocumentFromMarkdown(t,s),it(),ve.updateDocumentFromMarkdown(t,s),$e(`backlinks`),$e(`graph`),$e(`tags`)}catch(e){Y.error({err:e,docName:t},`[reconcile] failed to apply merged content to Y.Doc for ${t}`),setReconciledBase(t,s),Vt(g)}break;case`conflicts`:try{Bt(t,E.newContent),setReconciledBase(t,E.newContent),incrementReconcile(),incrementConflict(),_e.updateDocumentFromMarkdown(t,s),it(),ve.updateDocumentFromMarkdown(t,s),$e(`backlinks`),$e(`graph`),$e(`tags`)}catch(e){Y.error({err:e,docName:t},`[reconcile] failed to apply conflict content to Y.Doc for ${t}`),setReconciledBase(t,s)}{let e=g.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,`merged-with-markers`)}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=Te.documents.get(t);if(!s){_e.deleteDocument(t),it(),ve.deleteDocument(t),$e(`files`),$e(`backlinks`),$e(`graph`),$e(`tags`),jt(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));return}let g=getReconciledBase(t)??``,S=zt(t)??``,w=S!==g;if(w&&ye.current){let e=ye.current,s=sn?.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(),Y.info({docName:t},`[reconcile] rescue checkpoint saved (delete): ${t}`)}).catch(e=>{Y.error({docName:t,err:e},`[reconcile] rescue checkpoint write failed: ${t}`)})})}s.getMap(`lifecycle`).set(`status`,`deleted-upstream`),deleteReconciledBase(t),_e.deleteDocument(t),it(),ve.deleteDocument(t),Y.info({docName:t,isDirty:w},`[reconcile] delete: ${t} (dirty=${w})`),Te.closeConnections(t),await We(s),$e(`files`),$e(`backlinks`),$e(`graph`),$e(`tags`),jt(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));break}case`rename`:{let{oldDocName:t,newDocName:s,content:g}=e,S=Te.documents.get(t);if(deleteReconciledBase(t),setReconciledBase(s,g),_e.renameDocument(t,s,g),it(),ve.renameDocument(t,s,g),S){let e=S.getMap(`lifecycle`);e.set(`status`,`renamed`),e.set(`newPath`,s)}Y.info({oldDocName:t,newDocName:s},`[reconcile] rename: ${t} → ${s}`),$e(`files`),$e(`backlinks`),$e(`graph`),$e(`tags`),Et(t,s),console.info(JSON.stringify({event:`recently-removed-docs-populate`,from:t,to:s,kind:`renamed`,source:`watcher-rename`}));break}case`conflict`:{let{docName:t}=e,s=Te.documents.get(t);if(!s)return;let g=zt(t);g===null?Y.warn({docName:t},`[reconcile] case 'conflict': serializeDoc returned null for ${t}; reconciledBase snapshot skipped — post-resolution reconcile may degrade to 3-way merge`):setReconciledBase(t,g);let S=s.getMap(`lifecycle`);S.set(`status`,`conflict`),S.set(`reason`,`conflict-markers`),Y.info({docName:t},`[reconcile] conflict markers detected: ${t}`);break}case`asset-create`:de.add(e.relativePath),$e(`files`),Wt(basename(e.relativePath));break;case`asset-delete`:de.remove(e.relativePath),$e(`files`),Wt(basename(e.relativePath));break;case`folder-create`:case`folder-delete`:$e(`files`);break;case`file-create`:case`file-update`:case`file-delete`:$e(`files`);break;default:assertNeverDiskEvent(e)}}catch(t){let s=Xt(e);Y.error({err:t,kind:e.kind,label:s},`[reconcile] failed to handle ${e.kind} for ${s}`)}}let $t=[];async function en(e){if(isBatchInProgress()){$t.push(e);return}await Zt(e)}async function tn(){let e=$t.splice(0,$t.length);for(let t of e)await Zt(t)}let rn=null,sn=null,jr=null,Mr=null;async function zr(e){if(Te.documents.size===0)return;let t=!1,s=new Promise(e=>{Te.configuration.extensions.push({async afterUnloadDocument({instance:s}){!t&&s.getDocumentsCount()===0&&(t=!0,e())}})}),g=Array.from(Te.documents.keys());Te.closeConnections(),Te.flushPendingStores();for(let e of Te.documents.values())e.getConnectionsCount()===0&&Te.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(Te.documents.keys()),S=[],E=[];if(ye.current){for(let e of s)if(!isReservedForUserTree(e))try{let t=zt(e);if(t===null){Y.warn({docName:e},`[rescue] skipping ${e} — document dropped from map mid-rescue`),E.push(e);continue}let s=Rt(ye.current.gitDir,e);if(!s){Y.warn({docName:e,gitDir:ye.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),Y.info({docName:e},`[rescue] rescue buffer saved on flush timeout: ${e}`)}catch(t){E.push(e),Y.error({err:t,docName:e},`[rescue] failed to write rescue buffer for ${e}`)}}else Y.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 Br(){return Mr||(Mr=(async()=>{let e=Date.now(),t=[];Ue=!0;try{markServerLockDraining(ue)}catch(e){Y.warn({err:e},`[server] failed to mark server.lock draining`)}if(rt!==null&&(clearTimeout(rt),rt=null),st!==null&&(clearTimeout(st),st=null),vt)try{saveRemovedDocsJournal(s,Tt.entries())}catch(e){Y.warn({err:e},`[removed-docs-journal] failed to persist removal journal during shutdown`),t.push({phase:`removed-docs-journal-flush`,error:String(e)})}let g,S=await Promise.race([Xe.then(()=>`completed`,e=>(Y.debug({err:e},`[server] init incomplete during shutdown`),`failed`)),new Promise(e=>{g=setTimeout(()=>e(`timeout`),5e3)})]);g!==void 0&&clearTimeout(g),S===`timeout`&&Y.warn({},`[server] init did not complete within 5s during shutdown`);let w=Te.documents.size;Ce?.destroy();try{try{try{sn&&=(await sn.unsubscribe(),null),rn&&=(await rn.unsubscribe(),null);for(let{docName:e,cleanup:t}of Lt)try{await t()}catch(t){Y.warn({err:t,docName:e},`[server] failed to stop config-file-watcher for ${e}`)}Lt.length=0}catch(e){t.push({phase:`watcher-unsubscribe`,error:e instanceof Error?e.message:String(e)}),Y.error({err:e},`[server] shutdown phase-1 watcher unsubscribe failed`)}try{je?.destroy(),Pe?.destroy(),Ft&&=(await Ft.disconnect(),null);for(let[e,t]of It)try{await t.disconnect()}catch(t){Y.warn({err:t,docName:e},`[server] failed to disconnect ${e} during shutdown`)}It.clear()}catch(e){t.push({phase:`cc1-teardown`,error:e instanceof Error?e.message:String(e)}),Y.error({err:e},`[server] shutdown phase-1b CC1 teardown failed`)}try{await De.closeAll()}catch(e){t.push({phase:`agent-session-drain`,error:e instanceof Error?e.message:String(e)}),Y.error({err:e},`[server] shutdown phase-2 agent session drain failed`)}try{await zr(B)}catch(e){t.push({phase:`flush-all-stores`,error:e instanceof Error?e.message:String(e)}),Y.error({err:e},`[server] shutdown phase-3 flush failed`)}let e;try{await Promise.race([(async()=>{await we.flushPendingGitCommit(),await we.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)}),Y.error({err:e},`[server] shutdown phase-4 git commit flush failed`)}finally{e!==void 0&&clearTimeout(e)}try{jr&&=(await jr.destroy(),null)}catch(e){t.push({phase:`sync-engine-stop`,error:e instanceof Error?e.message:String(e)}),Y.error({err:e},`[server] shutdown sync-engine-stop failed`)}}finally{if(ye.current){try{let e=(await esm_default({baseDir:s,timeout:{block:5e3}}).revparse(`HEAD`)).trim();e&&writeFileSync(resolve(ye.current.gitDir,`last-known-head`),e,`utf-8`)}catch{}try{destroyShadowRepo(ye.current)}catch(e){t.push({phase:`shadow-repo-release`,error:e instanceof Error?e.message:String(e)}),Y.error({err:e},`[server] shutdown phase-5 destroyShadowRepo failed`)}}let g=Date.now()-e;t.length===0?Y.info({documentCount:w,durationMs:g},`[server] shutdown flushed ${w} documents in ${g}ms`):Y.warn({documentCount:w,durationMs:g,phaseErrors:t},`[server] shutdown flushed ${w} documents in ${g}ms with ${t.length} phase error(s)`)}}finally{try{releaseServerLock(ue,{deferUnlinkToExit:!0})}catch(e){t.push({phase:`server-lock-release`,error:e instanceof Error?e.message:String(e)}),Y.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)})}}})(),Mr)}let Vr=[];async function Hr(){try{Be=await loadPrincipal(s),Y.info({principalId:Be.id},`[server] principal loaded`)}catch(e){Y.warn({err:e},`[server] principal load failed — browser writes will use SERVICE_WRITER`)}if(!ye.current)try{ye.current=await initShadowRepo(s),Y.info({gitDir:ye.current.gitDir},`[server] history repo initialized at ${ye.current.gitDir}`)}catch(e){Y.error({err:e},`[server] history repo init failed`),Vr.push(`shadow-repo`)}if(ye.current){let e=null;try{e=loadRenameLogIndex(ye.current.gitDir),sweepLazyPopOrphans(ye.current.gitDir,e),setRenameLogIndex(ye.current.gitDir,e),Y.info({entries:e.byTo.size},`[server] rename log loaded (${e.byTo.size} entries)`)}catch(e){Y.warn({err:e},`[rename-log] boot-time load/sweep failed; rename history unavailable`)}if(e){let t=1e4;try{await Promise.race([gcRenameLog(ye.current,e,{rebuild:!0}),new Promise((e,s)=>setTimeout(()=>s(Error(`boot-time GC exceeded ${t}ms`)),t))])}catch(e){Y.warn({err:e},`[rename-log] boot-time GC/rebuild failed; index loaded without GC`)}}try{await Ce?.runBootMaintenance()}catch(e){Y.warn({err:e},`[shadow-maintenance] boot maintenance failed (non-fatal)`)}}if(ye.current)try{await shadowGit(ye.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`)){Y.warn({},`[server] history repo appears corrupted — reinitializing`);try{ye.current=await initShadowRepo(s)}catch(e){Y.error({err:e},`[server] history repo reinit failed`),ye.current=void 0,Vr.includes(`shadow-repo`)||Vr.push(`shadow-repo`)}}else Y.error({err:e},`[server] history repo check failed (transient?)`)}if(ye.current)try{let e=resolve(ye.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{}Y.info({lastKnownHead:t,currentHead:g,branch:e},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${g}, action=import`);try{await commitUpstreamImport(ye.current,L??``,t,g,e),incrementUpstreamImport()}catch(e){Y.warn({err:e},`[head-drift] commitUpstreamImport failed — continuing`)}}else Y.info({currentHead:g},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${g}, action=noop`);try{writeFileSync(e,g,`utf-8`)}catch(e){Y.warn({err:e},`[head-drift] failed to write last-known-head`)}}}catch(e){Y.warn({err:e},`[head-drift] check failed — continuing`)}try{let e=recoverPendingManagedRename(t,s);if(e.recovered&&e.journal){let t=e.journal.version===2?e.journal.fromPath:e.journal.sourceDocName,s=e.journal.version===2?e.journal.toPath:e.journal.destinationDocName;Y.warn({journalVersion:e.journal.version,fromPath:t,toPath:s,restoredDocNames:e.restoredDocNames},`[managed-rename] recovered pending rename ${t} -> ${s}`)}}catch(e){Y.error({err:e},`[server] managed rename recovery failed`),Vr.push(`managed-rename-recovery`)}try{let e=cleanupOrphanUploadTempfiles(s);(e.deleted>0||e.errors>0)&&Y.info({scanned:e.scanned,deleted:e.deleted,errors:e.errors},`[upload-tempfile-sweep] swept ${e.deleted} orphan tempfile(s)`)}catch(e){Y.error({err:e},`[server] upload-tempfile sweep failed`),Vr.push(`upload-tempfile-sweep`)}try{Ft=await Te.openDirectConnection(SYSTEM_DOC_NAME),je?.emitServerInfo(ce,getActiveBranch())}catch(e){Y.error({err:e},`[server] failed to open __system__ direct connection — CC1 push disabled`),Vr.push(`cc1-push`)}let g=J?[]:CONFIG_DOC_NAMES;for(let e of g)try{let t=await Te.openDirectConnection(e);It.set(e,t)}catch(t){Y.error({err:t,docName:e},`[server] failed to open ${e} direct connection — config bind degraded`),Vr.push(`config-doc:${e}`)}let S=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 e of g){let t=S.get(e);if(t)try{Y.info({docName:e,path:t},`[config-file-watcher] starting`);let s=await startConfigFileWatcher(t,t=>{let s=Te.documents.get(e);Y.info({docName:e,hasDocument:s!==void 0,contentLength:t.length},`[config-file-watcher] file changed`);let g=applyExternalConfigChange(s??null,e,t,we.configPersistenceCtx);Y.info({docName:e,outcome:g},`[config-file-watcher] applyExternalConfigChange outcome`),se(e)});Lt.push({docName:e,cleanup:s}),Y.info({docName:e,path:t},`[config-file-watcher] started`)}catch(s){Y.warn({err:s,docName:e,path:t},`[config-file-watcher] failed to start for ${e}`),Vr.push(`config-file-watcher:${e}`)}}if(!J){let e=(e,t)=>{let s=managedArtifactDocNameForPath(e,we.managedArtifactCtx);if(!s)return;let g=applyExternalManagedArtifactChange(Te.documents.get(s)??null,s,t,we.managedArtifactCtx);Y.info({docName:s,outcome:g},`[managed-artifact-watcher] external change`),parseGlobalSkillBundleDoc(s)&&_e.ingestGlobalSkillBundles(managedArtifactSkillsRoots(we.managedArtifactCtx),getActiveBranch()).then(()=>{$e(`backlinks`),$e(`graph`)}).catch(e=>{Y.warn({err:e,docName:s},`[backlinks] global skill bundle re-ingest failed`)})};try{let t=managedArtifactSkillsRoots(we.managedArtifactCtx),s=await startManagedArtifactWatcher(t,e);Lt.push({docName:`__skill-files__`,cleanup:s}),Y.info({roots:t},`[managed-artifact-watcher] skills started`)}catch(e){Y.warn({err:e},`[managed-artifact-watcher] skills failed to start`),Vr.push(`managed-artifact-watcher:skills`)}try{let t=new Set([``]);try{for(let e of resolveProjectTemplates(s).templates)t.add(e.source_folder)}catch(e){Y.warn({err:e},`[managed-artifact-watcher] template enumeration failed; root only`)}let g=[...t].map(e=>e?resolve(s,e,`.ok`,`templates`):resolve(s,`.ok`,`templates`)),S=await startManagedArtifactWatcher(g,e,TEMPLATE_WATCH_OPTIONS);Lt.push({docName:`__template-files__`,cleanup:S}),Y.info({rootCount:g.length},`[managed-artifact-watcher] templates started`)}catch(e){Y.warn({err:e},`[managed-artifact-watcher] templates failed to start`),Vr.push(`managed-artifact-watcher:templates`)}}try{let e=resolve(t,`.okignore`),g=resolve(s,`.gitignore`),S=null;try{let e=spawnSync(`git`,[`rev-parse`,`--git-common-dir`],withHiddenWindowsConsole({cwd:s,encoding:`utf-8`,timeout:5e3}));if(e.status===0&&e.stdout){let t=join(resolve(s,e.stdout.trim()),`info`,`exclude`);existsSync(dirname(t))&&(S=t)}}catch{}let w=S?[e,g,S]:[e,g],E=Y;E.info({okignorePath:e,gitignorePath:g,gitInfoExcludePath:S,ephemeral:J},`[ignore-watcher] starting multi-path watcher for .okignore + .gitignore (+ .git/info/exclude when present)`);let D=J?null:await startMultiPathConfigFileWatcher(w,(t,g)=>{(async()=>{if(t===e)try{let e=applyExternalConfigChange(Te.documents.get(`__config__/okignore`)??null,CONFIG_DOC_NAME_OKIGNORE,g,we.configPersistenceCtx);E.info({docName:CONFIG_DOC_NAME_OKIGNORE,outcome:e},`[ignore-watcher] applyExternalConfigChange outcome`)}catch(e){E.error({err:e,changedPath:relative(s,t)},`[ignore-watcher] applyExternalConfigChange failed; rebuild proceeds independently`)}let S=await ge.rebuildIgnorePatterns();if(S.ok)E.info({changedPath:relative(s,t),patternCount:S.patternCount,nestedFileCount:S.nestedFileCount,durationMs:S.durationMs},`[ignore-watcher] rebuild succeeded — broadcasting files channel`),je?.signal(`files`);else{let e=relative(s,t)||`.`;E.warn({changedPath:e,error:S.error.message},`[ignore-watcher] rebuild failed — emitting config-ignore-nested-error`),je?.emitConfigIgnoreNestedError(e,S.error.message)}})().catch(e=>{E.error({err:e,changedPath:relative(s,t)||`.`},`[ignore-watcher] handler threw`)})});D&&(Lt.push({docName:`__ignore-files__`,cleanup:D}),E.info({okignorePath:e,gitignorePath:g},`[ignore-watcher] multi-path watcher started`))}catch(e){Y.warn({err:e,projectDir:s,contentDir:t},`[ignore-watcher] failed to start multi-path watcher`),Vr.push(`ignore-files-watcher`)}let w=resolveGitDir(s),E=w?readBranchFromHead(w)??`main`:`main`;switchReconciledBaseScope(E),_e.switchBranch(E);let D=performance.now();try{await withSpan(`ok.boot.indexes`,void 0,async()=>{let e=getActiveBranch();try{if(await _e.loadFromDisk(e)){let t=await _e.reconcileWithDisk(e);(t.added>0||t.updated>0||t.deleted>0)&&Y.info({added:t.added,updated:t.updated,deleted:t.deleted},`[backlinks] startup reconcile: offline changes applied`);let s=0;for(let e of t.deletedDocNames)isReservedForUserTree(e)||Tt.peek(e)?.kind!==`renamed`&&(Tt.setDeleted(e),s++);s>0&&Y.info({count:s},`[removal-guard] tombstoned docs deleted while the server was down`)}else await _e.rebuildFromDisk(e);try{await _e.ingestGlobalSkillBundles(managedArtifactSkillsRoots(we.managedArtifactCtx),e)}catch(t){Y.warn({err:t,branch:e},`[backlinks] global skill bundle ingest failed`)}_e.saveToDisk().catch(t=>{console.warn(`[backlinks] Failed to persist startup cache for ${e}:`,t)})}catch(t){Y.error({err:t,branch:e},`[backlinks] startup init failed; index will populate incrementally via watcher`)}let s=performance.now();rn=await withSpan(`ok.boot.seed-walk`,void 0,async()=>startWatcher(t,en,ge)),recordBootPhase(`seedWalkMs`,Math.round(performance.now()-s));{let e=resolve(t),s=0;for(let[t]of Tt.entries()){if(!isSafeDocName(t))continue;let g=resolve(e,`${t}${getDocExtension(t)}`);isWithinDir(g,e)&&existsSync(g)&&(Tt.delete(t),s++)}s>0&&Y.info({count:s},`[removal-guard] dropped journaled removal entries whose file re-appeared while the server was down`)}try{await ve.init()}catch(e){Y.error({err:e},`[tag-index] startup re-init failed; tag index updates incrementally via watcher events`),Vr.push(`tag-index`)}let g=0;try{ee===void 0?await seedBasenameIndex({contentDir:t,contentFilter:ge,basenameIndex:de,onSkip:(e,t,s)=>{g++,Y.warn({reason:e,code:t,path:s},`[basename-index] skipped entry during seed (${e}${t?` ${t}`:``})`)}}):seedSingleDirBasenameIndex({contentDir:t,basenameIndex:de,onSkip:(e,t,s)=>{g++,Y.warn({reason:e,code:t,path:s},`[basename-index] skipped entry during single-file seed (${e}${t?` ${t}`:``})`)}}),g>0&&(Y.warn({count:g},`[basename-index] startup seed completed with ${g} skipped entries — embeds under inaccessible subtrees will not resolve`),Vr.push(`basename-index-partial`))}catch(e){Y.error({err:e},`[basename-index] startup seed failed`),Vr.push(`basename-index`)}})}catch(e){Y.error({err:e},`[server] disk bridge watcher failed to start`),Vr.push(`file-watcher`)}finally{recordBootPhase(`indexesMs`,Math.round(performance.now()-D)),rn&&setBootField(`fileCount`,rn.getFileIndex().size)}try{sn=await startHeadWatcher(s,async({trigger:e})=>{if(Y.info({trigger:e},`[batch] begin trigger=${e}`),incrementBatch(),Te.flushPendingStores(),await we.flushPendingGitCommit(),setBatchInProgress(!0),ye.current){let e=getActiveBranch(),t=resolveGitDir(s),g=t?readBranchFromHead(t)??e:e,S=[];for(let[e,t]of Te.documents){if(isReservedForUserTree(e))continue;let s=null;if(t.transact(()=>{s=zt(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(ye.current,e,SERVICE_WRITER.id,S,g);t&&(incrementPark(),Y.info({count:S.length,branch:e,sha:t.slice(0,8)},`[history] parked ${S.length} docs on ${e} → ${t.slice(0,8)}`))}catch(e){Y.error({err:e},`[shadow] park failed`)}}},async e=>{let g=$t.length,S=e.newBranch??`main`;if(Y.info({kind:e.batchKind,headMoved:e.headMoved,docs:g,timeout:!!e.timeout},`[batch] end kind=${e.batchKind} headMoved=${e.headMoved} docs=${g}${e.timeout?` timeout`:``}`),e.batchKind===`within-branch`){if(setBatchInProgress(!1),await tn(),e.headMoved&&e.newHead){let g=resolveUpstreamChanges(s,resolve(t),e.oldHead,e.newHead);if(g.size>0){dropPendingDocs(g.keys());for(let[e,t]of g)recordContributor(e,gitAuthorWriterId(t.email),t.name,t.email,formatReconcileSubject(e));await we.flushContributors()}}if(await we.flushDeferredStores(`within-branch`),jr!==null)try{await jr.reconcileConflictsFromGit()}catch(e){Y.warn({err:e},`[head-watcher] sync engine conflict reconcile failed`)}}else{incrementBranchSwitch(),$t.splice(0,$t.length),switchReconciledBaseScope(S),rt!==null&&(clearTimeout(rt),rt=null),_e.switchBranch(S),ge.rebuildDirCount();try{let e=0;de.clear(),await seedBasenameIndex({contentDir:t,contentFilter:ge,basenameIndex:de,onSkip:(t,s,g)=>{e++,Y.warn({reason:t,code:s,path:g,branch:S},`[basename-index] skipped entry during branch-switch reseed (${t}${s?` ${s}`:``})`)}}),e>0&&(Y.warn({count:e,branch:S},`[basename-index] branch-switch reseed completed with ${e} skipped entries — embeds under inaccessible subtrees will not resolve on this branch`),Vr.includes(`basename-index-partial`)||Vr.push(`basename-index-partial`))}catch(e){Y.error({err:e,branch:S},`[basename-index] branch-switch reseed failed`)}for(let[e,s]of Te.documents)if(!isReservedForUserTree(e))try{let g=safeContentPath(e,t);if(!existsSync(g)){let t=getReconciledBase(e)??``,g=zt(e)??``;if(g!==t&&ye.current){let t=ye.current;queueMicrotask(()=>{saveInMemoryCheckpoint(t,L??``,{kind:`external-change-rescue`,docName:e,contents:g,label:`External change recovered @ ${new Date().toISOString()}`,branch:S,metadata:{incomingDiskSha:``}}).then(()=>{incrementRescueBuffer(),Y.info({docName:e},`[reconcile] rescue checkpoint saved on branch switch: ${e}`)}).catch(t=>{Y.error({docName:e,err:t},`[reconcile] rescue checkpoint write failed: ${e}`)})})}s.getMap(`lifecycle`).set(`status`,`deleted-upstream`),Y.info({docName:e,branch:S},`[branch-switch] tombstone: ${e} (not on ${S})`);continue}let w=readFileSync(g,`utf-8`);Bt(e,w),setReconciledBase(e,w),Y.info({docName:e},`[branch-switch] reset: ${e}`)}catch(t){Y.error({err:t,docName:e},`[branch-switch] failed to reset ${e}`)}Y.info({branch:S,docCount:Te.documents.size},`[branch-switch] loaded branch ${S} (${Te.documents.size} docs)`);try{if(await _e.loadFromDisk(S)){let e=await _e.reconcileWithDisk(S);(e.added>0||e.updated>0||e.deleted>0)&&Y.info(e,`[backlinks] branch-switch reconcile for ${S}`)}else await _e.rebuildFromDisk(S);try{await _e.ingestGlobalSkillBundles(managedArtifactSkillsRoots(we.managedArtifactCtx),S)}catch(e){Y.warn({err:e,branch:S},`[backlinks] branch-switch global skill bundle ingest failed`)}_e.saveToDisk(S).catch(e=>{console.warn(`[backlinks] Failed to persist branch cache for ${S}:`,e)})}catch(e){Y.error({err:e,branch:S},`[backlinks] branch-switch rebuild failed; backlinks may be stale`)}if(await ve.init(),ye.current&&e.batchKind===`cross-branch`){let e=0;for(let[t]of Te.documents)if(!isReservedForUserTree(t))try{let s=await readParkedState(ye.current,S,SERVICE_WRITER.id,t);if(!s||s.markdown===s.diskSnapshot)continue;let g=getReconciledBase(t);if(!g)continue;let w=reconcile({docName:t,base:s.diskSnapshot,ours:s.markdown,theirs:g});switch(w.kind){case`merged`:case`clean`:Bt(t,w.newContent),setReconciledBase(t,w.newContent),e++;break;case`conflicts`:Bt(t,w.newContent),setReconciledBase(t,w.newContent),incrementConflict(),e++;{let e=Te.documents.get(t);if(e){let t=e.getMap(`lifecycle`);t.set(`status`,`conflict`),t.set(`reason`,`merged-with-markers`)}}break;case`noop`:case`refused`:break}}catch(e){Y.error({err:e,docName:t},`[branch-switch] restore WIP failed for ${t}`)}e>0&&Y.info({count:e,branch:S},`[branch-switch] restored ${e} parked docs on ${S}`)}if(e.oldBranch?.startsWith(`detached-`)&&ye.current)try{let t=shadowGit(ye.current),s=(await t.raw(`for-each-ref`,`refs/wip/${e.oldBranch}/`,`--format=%(refname)`)).trim();if(s){for(let e of s.split(`
|
|
3263
|
-
`))e&&await t.raw(`update-ref`,`-d`,e);Y.info({context:e.oldBranch},`[branch-switch] cleaned up detached context ${e.oldBranch}`)}}catch(e){Y.error({err:e},`[branch-switch] detached cleanup failed`)}setBatchInProgress(!1),await we.flushDeferredStores(`discard-stale`),je?.emitBranchSwitched(S)}if(e.headMoved&&e.newHead&&ye.current&&g>0){let t=L??`.`;try{let s=await commitUpstreamImport(ye.current,t,e.oldHead,e.newHead,S);incrementUpstreamImport(),Y.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){Y.error({err:e},`[shadow] upstream-import failed`)}}})}catch(e){Y.error({err:e},`[server] HEAD watcher failed to start`),Vr.push(`head-watcher`)}function O(e){for(let g of e)try{let e=toPosix(relative(t,join(s,g)));if(e.startsWith(`..`))continue;let S=stripDocExtension(e),w=Te.documents.get(S);if(!w)continue;let E=zt(S);E===null?Y.warn({docName:S,file:g},`[sync] content conflict: serializeDoc returned null; reconciledBase snapshot skipped`):setReconciledBase(S,E);let D=w.getMap(`lifecycle`);D.set(`status`,`conflict`),D.set(`reason`,`sync-merge-conflict`),Y.info({docName:S,file:g},`[sync] marked loaded content conflict`)}catch(e){Y.warn({err:e,file:g},`[sync] failed to mark loaded content conflict`)}}let j=buildSyncCredentialArgs(H);try{jr=new SyncEngine({projectDir:s,contentDir:t,contentFilter:ge,contentRoot:L,syncEnabled:ne(),credentialArgs:j,cc1Broadcaster:je,detectGh:e.detectGh,tokenStore:e.tokenStore,checkPushPermissionFn:e.checkPushPermissionFn,setBatchInProgress:e=>{setBatchInProgress(e),e||we.flushDeferredStores(`within-branch`).catch(e=>{Y.error({err:e},`[persistence] deferred store drain failed after sync batch`)})},onStateChange:e=>{Y.info({state:e},`[sync] state → ${e}`)},onContentConflictsDetected:O,onAutoDisable:async e=>{Y.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||Y.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 jr.start()}catch(e){Y.warn({err:e},`[server] SyncEngine failed to start — sync disabled`),jr=null}$e(`files`),$e(`backlinks`),$e(`graph`),$e(`tags`);let F=bootElapsedMs();F!==void 0&&recordBootPhase(`readyMs`,F)}return Hr().then(Ge,Ke),{hocuspocus:Te,sessionManager:De,cc1Broadcaster:je,agentFocusBroadcaster:Me,agentPresenceBroadcaster:Pe,maintenanceCoordinator:Ce,contentFilter:ge,basenameIndex:de,serverInstanceId:ce,destroy:Br,ready:Xe,degraded:Vr,lockDir:ue,get syncEngine(){return jr}}}const SERVER_MEMORY_SCHEMA_VERSION=1,BYTES_PER_MB=1024*1024;function toMb(e){return e/BYTES_PER_MB}function captureServerMemorySnapshot(){let e=process.memoryUsage();return{schemaVersion:SERVER_MEMORY_SCHEMA_VERSION,capturedAt:new Date().toISOString(),snapshot:{rssMb:toMb(e.rss),heapTotalMb:toMb(e.heapTotal),heapUsedMb:toMb(e.heapUsed),externalMb:toMb(e.external),arrayBuffersMb:toMb(e.arrayBuffers)}}}let cachedGauge=null;onTelemetryShutdown(()=>{cachedGauge=null});function installServerMemoryGauge(){if(cachedGauge)return;let e=getMeter().createObservableGauge(`ok.server.memory.usage_megabytes`,{description:`Server process memory by section. Bounded labels: section ∈ {heap_used, heap_total, rss}.`,unit:`MB`});e.addCallback(e=>{let{snapshot:t}=captureServerMemorySnapshot();e.observe(t.heapUsedMb,{section:`heap_used`}),e.observe(t.heapTotalMb,{section:`heap_total`}),e.observe(t.rssMb,{section:`rss`})}),cachedGauge=e}const TELEMETRY_FILENAME=`tolerance-telemetry.jsonl`,TELEMETRY_PREV_FILENAME=`tolerance-telemetry.prev.jsonl`,TELEMETRY_MAX_BYTES=8*1024*1024;let appender=null,appendFailureWarned=!1;function isToleranceTelemetryEnabled(e=process.env){return e.OK_BRIDGE_TOLERANCE_TELEMETRY===`1`}function initToleranceTelemetryWriter(e){if(!isToleranceTelemetryEnabled())return;let t=getLocalDir(e);appender=new RotatingAppender({currentPath:resolve(t,TELEMETRY_FILENAME),previousPath:resolve(t,TELEMETRY_PREV_FILENAME),maxBytes:TELEMETRY_MAX_BYTES}),setToleranceTelemetryHook(e=>{let t={event:`bridge-tolerance-fire`,timestamp:e.timestamp,class:e.className,document:e.documentName??null,codeUnitPosition:e.codeUnitPosition,severity:e.severity};appender?.append(`${JSON.stringify(t)}\n`).catch(e=>{appendFailureWarned||(appendFailureWarned=!0,console.warn(`[tolerance-telemetry] append failed; further failures are silent:`,e instanceof Error?e.message:String(e)))})})}async function teardownToleranceTelemetryWriter(){setToleranceTelemetryHook(null),await appender?.drain(),appender=null,appendFailureWarned=!1}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,PINO_REDACT_MAX_DEPTH=5;async function bootServer(e){startBootTimings();let t=e.projectDir??e.contentDir,s=resolveLocalSinkConfig({projectDir:t});if(s){let e=s.telemetry.attributeDenylist,t=[];for(let s of e){t.push(s);for(let e=1;e<=PINO_REDACT_MAX_DEPTH;e++)t.push(`${`*.`.repeat(e)}${s}`)}loggerFactory.configure({pinoConfig:{fileSink:s.logs,redactPaths:t}})}initTelemetry({localSink:s?.telemetry}),initToleranceTelemetryWriter(t),installServerMemoryGauge();let{kind:g,gitdir:S}=computeWorktreeAttributes(e.projectDir??e.contentDir),w={"ok.worktree.kind":g};S!==null&&(w[`ok.worktree.gitdir`]=normalizeFsPath(S));let E=process.env.OK_STARTUP_TRACEPARENT,D=()=>withSpan(`ok.boot`,{attributes:w},async()=>bootServerInner(e));if(E)try{let e=propagation.extract(context.active(),{traceparent:E});return context.with(e,D)}catch(e){getLogger(`boot`).warn({err:e instanceof Error?e.message:String(e)},`ok.boot trace-join failed — starting unparented boot`)}return D()}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`),{markServerLockDraining:O,releaseServerLock:k,updateServerLockPort:j}=await import(`./server-lock-GuuouVft-xGs0zrNQ.mjs`),F=!1;if(!t&&e.autoInitFn)try{F=!!await e.autoInitFn()}catch(e){S.warn({err:e},`autoInitFn failed`)}let L=e.projectDir??e.contentDir,B=resolve(L,`.ok`);if(!existsSync(resolve(B,`config.yml`)))throw new MissingOkConfigError(existsSync(B)?`config`:`okdir`,L);existsSync(resolve(B,`.gitignore`))||console.warn("[boot] Note: .ok/.gitignore is missing — per-machine state files in .ok/ may show up as untracked changes. Run `ok init` to add the recommended ignore entries.");let H=e.gitPreflight??assertGitAvailable;try{e.gitEnabled!==!1&&H()}catch(e){if(e instanceof GitNotAvailableError||e instanceof GitTooOldError){let t=e instanceof GitTooOldError?e.detected:``,s=e instanceof GitTooOldError?`too_old`:`not_available`;emitPreflightFailureSpan(e),S.warn({event:`git_preflight_fail`,platform:e.platform,reason:s,detectedVersion:t},s===`not_available`?`git binary not found`:`git binary too old`),process.stderr.write(`${e.message}\n`)}throw await shutdownTelemetry(),await Promise.race([teardownToleranceTelemetryWriter(),new Promise(e=>setTimeout(e,DESTROY_STEP_TIMEOUT_MS))]),e}let q=findLegacyRuntimeFiles(B);q.length>0&&console.warn(`[boot] Found legacy runtime files at .ok/${q.join(`, `)}. Delete .ok/ and re-init — these files moved to .ok/${LOCAL_DIR}/.`);let ee=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,detectGh:e.detectGh,tokenStore:e.tokenStore,embeddingsKeyStore:e.embeddingsKeyStore,singleDocRelPath:e.singleDocRelPath,ephemeral:e.ephemeral}),{hocuspocus:J,destroy:Y,ready:te,degraded:ne,lockDir:ae,sessionManager:oe,agentFocusBroadcaster:se,agentPresenceBroadcaster:ce,maintenanceCoordinator:ue}=ee,de=(()=>{let t=e.host??`localhost`;return t===`0.0.0.0`||t===`::`?`localhost`:t.includes(`:`)&&!t.startsWith(`[`)?`[${t}]`:t})(),fe=e.port??0,me=e.ephemeral?void 0:createMcpHttpHandler({contentDir:e.contentDir,projectDir:e.projectDir??e.contentDir,config:e.config,getServerUrl:()=>`http://${de}:${fe}`,log:S}),ge=D();ge.headersTimeout=3e4,ge.requestTimeout=6e4;let _e=e.serveContentAssets?createAssetServeMiddleware({contentFilter:ee.contentFilter,contentSirv:build_default(e.contentDir,{dev:!0,dotfiles:!1}),inlineExtensions:INLINE_RENDERABLE_EXTENSIONS,assetExtensions:ASSET_EXTENSIONS,blocklistExtensions:EXECUTABLE_BLOCKLIST_EXTENSIONS}):void 0,ve=!1;if(e.reactShellDistDir)try{acquireUiLock(ae,{port:0,worktreeRoot:e.projectDir??e.contentDir}),ve=!0}catch(e){if(e instanceof UiLockCollisionError)S.info({event:`ui-lock-yielded-to-live-holder`,pid:process.pid,existingPid:e.existing.pid,existingPort:e.existing.port,lockDir:ae},`ui.lock already held by a live process — yielding (advertisement is fulfilled)`);else throw await Y().catch(()=>{}),k(ae),e}let ye=e.reactShellDistDir?build_default(e.reactShellDistDir,{single:!0,gzip:!0,immutable:!0}):void 0,Ce=mountMcpAndApi({httpServer:ge,hocuspocus:J,mcpHttpHandler:me,log:S,sessionManager:oe,agentFocusBroadcaster:se,agentPresenceBroadcaster:ce,maintenanceCoordinator:ue,keepaliveGraceMs:e.keepaliveGraceMs,contentAssetMiddleware:_e,reactShellMiddleware:ye,ephemeral:e.ephemeral}),we=async()=>{throw Error(`bootServer: destroy() invoked before initialization — boot did not complete`)},Te=null;g!==null&&(Te=attachIdleShutdown({httpServer:ge,thresholdMs:g??DEFAULT_IDLE_THRESHOLD_MS,log:S,onShutdown:(e.idleShutdownHandler??(e=>async()=>{await e()}))(async()=>{await we()})})),await restoreLifecycleFromConflictsJson({hocuspocus:J,projectDir:e.projectDir??e.contentDir,log:S});try{await new Promise((t,s)=>{let g=e=>s(e);ge.once(`error`,g),ge.listen(e.port,e.host,()=>{ge.removeListener(`error`,g),t()})})}catch(e){if(ve)try{releaseUiLock(ae)}catch(e){S.warn({err:e},`releaseUiLock failed during listen-error cleanup`)}throw await Y().catch(()=>{}),k(ae),e}let De=bootElapsedMs();De!==void 0&&recordBootPhase(`httpListenMs`,De);let je=ge.address(),Me=typeof je==`object`&&je?je.port:e.port??0;if(fe=Me,j(ae,Me),ve&&updateUiLockPort(ae,Me),s&&e.spawnUiSiblingFn)try{await e.spawnUiSiblingFn({lockDir:ae,log:S})}catch(e){S.warn({err:e},`spawnUiSiblingFn failed`)}let Pe=!1,Ie=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)}};we=async()=>{if(Pe)return;Pe=!0;let e=[],t=async(t,s)=>{try{await Ie(t,s)}catch(s){e.push(s),S.warn({err:s,step:t},`bootServer destroy step failed`)}};try{O(ae),ve&&markUiLockDraining(ae)}catch(e){S.warn({err:e,step:`markLocksDraining`},`bootServer destroy step failed`)}try{Te?.detach()}catch(t){e.push(t),S.warn({err:t,step:`idleHandle.detach`},`bootServer destroy step failed`)}if(await t(`mount.shutdown`,()=>Ce.shutdown()),me!==void 0&&await t(`mcpHttpHandler.close`,()=>me.close()),await t(`mount.wss.close`,()=>new Promise((e,t)=>{Ce.wss.close(s=>s?t(s):e())})),await t(`httpServer.closeAllConnections`,async()=>{ge.closeAllConnections?.()}),await t(`httpServer.close`,()=>new Promise((e,t)=>{ge.close(s=>s&&s.code!==`ERR_SERVER_NOT_RUNNING`?t(s):e())})),await t(`destroyHocuspocus`,()=>Y()),ve&&await t(`releaseUiLock`,async()=>releaseUiLock(ae,{deferUnlinkToExit:!0})),await t(`shutdownTelemetry`,()=>shutdownTelemetry()),await t(`teardownToleranceTelemetry`,()=>teardownToleranceTelemetryWriter()),await t(`flushLogFileSinks`,()=>loggerFactory.flushAllFileSinks()),e.length>0)throw AggregateError(e,`bootServer destroy completed with errors`)};try{let t=await reconcileSkillInstalls({projectDir:L,skillsRoot:resolve(e.contentDir,`.ok`,`skills`)}),s=t.healed.length+t.adopted.length+t.replaced.length+t.collided.length+t.orphansRemoved.length;s>0&&S.info?.({event:`installed-skills-reconciled`,healed:t.healed.length,adopted:t.adopted.length,replaced:t.replaced.length,collided:t.collided.length,orphansRemoved:t.orphansRemoved.length},`Reconciled ${s} editor skill entr${s===1?`y`:`ies`} to the symlink model.`)}catch(e){S.warn?.({event:`installed-skills-reconcile-failed`,error:String(e)},`Installed-skills reconcile failed (non-fatal).`)}return{httpServer:ge,destroy:we,lockDir:ae,contentDir:e.contentDir,port:Me,ready:te,degraded:ne,didAutoInit:F,serverInstance:ee}}async function restoreLifecycleFromConflictsJson(e){let{hocuspocus:t,projectDir:s,log:g}=e,S,w;try{S=new ConflictStore(s),w=S.list()}catch(e){g.warn({err:e,projectDir:s},`[boot] lifecycle restore: failed to read conflicts.json — skipping`);return}if(w.length===0)return;let E=null;try{let e=resolveGitDir(s),t=e?join(e,`MERGE_HEAD`):null;if(!t||!existsSync(t)){S.clear(),console.warn(JSON.stringify({event:`lifecycle-restore-cleared-stale-conflicts`,reason:`no-merge-head`,count:w.length}));return}let g=simpleGit({baseDir:s,timeout:{block:5e3}});E=new Set(await listNames(g,[`diff`,`--name-only`,`--diff-filter=U`]))}catch(e){g.warn({err:e,projectDir:s},`[boot] lifecycle restore: git unmerged probe failed — restoring all entries`)}if(E!==null){let e=0;for(let t of w)E.has(t.file)||(S.removeConflict(t.file),e++);if(e>0&&console.warn(JSON.stringify({event:`lifecycle-restore-pruned-resolved-entries`,pruned:e,remaining:w.length-e})),w=w.filter(e=>E?.has(e.file)),w.length===0)return}for(let e of w){let s=stripDocExtension(e.file),S=null,w=!1;try{S=await t.openDirectConnection(s);let e=S.document;if(!e)continue;let g=e.getMap(`lifecycle`);g.set(`status`,`conflict`),g.set(`reason`,`conflict-markers`),w=!0,console.warn(JSON.stringify({event:`lifecycle-restored-from-conflicts-json`,"doc.name":s}))}catch(e){g.warn({err:e,docName:s},`[boot] lifecycle restore: failed to set lifecycle for doc — skipping`)}finally{if(S)try{await S.disconnect()}catch(e){g.warn({err:e,docName:s,restored:w},`[boot] lifecycle restore: disconnect failed after lifecycle write`)}}}}const ConfigSchema=ConfigSchema$1;function detectClaudeDesktopPresence(e={}){let t=e.home??homedir(),s=e.platformName??process.platform,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 OK_LOGS_DIR=join(homedir(),`.ok`,`logs`),MAX_ROTATED_FILES=2,MAX_AGE_DAYS=7,MAX_DIR_SIZE_BYTES=45*1024*1024,REDACT_PATHS=[`authorization`,`password`,`token`,`apiKey`,`secret`,`*.authorization`,`*.password`,`*.token`,`*.apiKey`,`*.secret`];function resolveLogLevel(){let e=process.env.OK_LOG_LEVEL??process.env.LOG_LEVEL;if(e){let t=[`fatal`,`error`,`warn`,`info`,`debug`],s=e.toLowerCase();if(t.includes(s))return s}return process.env.NODE_ENV===`test`?`silent`:`info`}function ensureDir(e){mkdirSync(e,{recursive:!0})}function todayDateString(){return new Date().toISOString().slice(0,10)}function rotateIfNeeded(e){try{if(statSync(e).size<5242880)return}catch{return}for(let t=MAX_ROTATED_FILES;t>=1;t--){let s=t===1?e:`${e}.${t-1}`,g=`${e}.${t}`;try{renameSync(s,g)}catch{}}try{unlinkSync(`${e}.${MAX_ROTATED_FILES+1}`)}catch{}}function pruneLogsDir(e){try{let t=Date.now(),s=MAX_AGE_DAYS*24*60*60*1e3,g=readdirSync(e).filter(e=>e.endsWith(`.log`)||/\.log\.\d+$/.test(e)).map(t=>{try{let s=statSync(join(e,t));return{name:t,mtime:s.mtimeMs,size:s.size}}catch{return null}}).filter(Boolean);for(let S of g)if(t-S.mtime>s)try{unlinkSync(join(e,S.name))}catch{}let S=g.filter(e=>t-e.mtime<=s).sort((e,t)=>e.mtime-t.mtime),w=S.reduce((e,t)=>e+t.size,0);for(let t of S){if(w<=MAX_DIR_SIZE_BYTES)break;try{unlinkSync(join(e,t.name)),w-=t.size}catch{}}}catch{}}function createFileLogger(e){ensureDir(OK_LOGS_DIR);let t=todayDateString(),s=e.filePath??join(OK_LOGS_DIR,`${e.name}.${t}.log`);rotateIfNeeded(s),(e._setTimeout??setTimeout)(()=>pruneLogsDir(OK_LOGS_DIR),5e3).unref();let g=import_pino.default.destination({dest:s,append:!0,sync:!0});return(0,import_pino.default)({level:resolveLogLevel(),name:e.name,redact:{paths:REDACT_PATHS,censor:`[REDACTED]`},base:{pid:process.pid,hostname:void 0,runtime:`cli`,project:e.project??`<no-project>`},timestamp:import_pino.default.stdTimeFunctions.isoTime,...e.additionalOptions},g)}function flushFileLogger(e,t=250){return new Promise(s=>{if(!e){s();return}let g=e[import_pino.default.symbols.streamSym],S=!1,w=()=>{S||(S=!0,s())};if(!g||typeof g.flushSync!=`function`){w();return}let E=()=>{try{g.flushSync?.()}catch{}w()},D=setTimeout(w,t);typeof D.unref==`function`&&D.unref(),typeof g.fd==`number`&&g.fd>=0?(clearTimeout(D),E()):typeof g.once==`function`?g.once(`ready`,()=>{clearTimeout(D),E()}):(clearTimeout(D),E())})}function getLogFilePath(e){return join(OK_LOGS_DIR,`${e}.${todayDateString()}.log`)}function getLogsDir(){return OK_LOGS_DIR}const ANCESTOR_WALK_DEPTH_LIMIT=30,GIT_MARKER=`.git`;function findEnclosingGitRoot(e){let t=resolve(e),s=0;for(;s<ANCESTOR_WALK_DEPTH_LIMIT;){let e=!1;try{e=existsSync(resolve(t,GIT_MARKER))}catch{e=!1}if(e)return{gitRoot:t,distance:s};let g=dirname(t);if(g===t)return null;t=g,s+=1}return null}const execFileAsync=promisify(execFile),log=getLogger(`project-git`);var ProjectGitInitError=class extends Error{stderr;constructor(e,t=``,s){super(e,s),this.name=`ProjectGitInitError`,this.stderr=t}};async function isInsideExistingWorkTree(e,t){try{let{stdout:s}=await execFileAsync(e,[`rev-parse`,`--is-inside-work-tree`],withHiddenWindowsConsole({cwd:t,encoding:`utf-8`}));return s.trim()===`true`}catch{return!1}}async function ensureProjectGit(e){let t=resolve(e),s=resolve(t,`.git`),g=resolve(s,`HEAD`),S=!1;if(existsSync(s)){if(!statSync(s).isDirectory()||existsSync(g))return{didInit:!1};log.info({},`detected partial .git/ — running git init to repair`),S=!0}let w;try{w=assertGitAvailable()}catch(e){throw e instanceof GitNotAvailableError||e instanceof GitTooOldError?(emitPreflightFailureSpan(e),log.warn({event:`git_preflight_fail`,platform:e.platform,reason:e instanceof GitTooOldError?`too_old`:`not_available`,detectedVersion:e instanceof GitTooOldError?e.detected:``},e instanceof GitTooOldError?`git binary too old`:`git binary not found`)):log.warn({event:`git_preflight_unexpected_error`,message:e instanceof Error?e.message:String(e)},`unexpected error during git preflight`),e}let E=w.resolvedPath;if(!S&&await isInsideExistingWorkTree(E,t))return{didInit:!1};let D=``;try{D=(await execFileAsync(E,[`init`,`--initial-branch=main`,t],withHiddenWindowsConsole({encoding:`utf-8`}))).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(g))throw new ProjectGitInitError(`git init reported success but ${s}/HEAD is missing (partial init detected)`,D);return S?(log.info({path:t},`backfilled missing .git/HEAD`),{didInit:!0,repaired:!0}):(log.info({path:t,branch:`main`},`initialized .git/`),{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}}const MAX_CAUSE_DEPTH=5,HOME_PATH_PATTERNS=[{regex:/\/Users\/[^/]+\//g,replacement:`~/`},{regex:/\/home\/[^/]+\//g,replacement:`~/`},{regex:/C:\\\\Users\\\\[^\\\\]+\\\\/g,replacement:`~\\`},{regex:/C:\\Users\\[^\\]+\\/g,replacement:`~\\`}];function scrubPaths(e){if(e===void 0)return;let t=e;for(let{regex:e,replacement:s}of HOME_PATH_PATTERNS)t=t.replace(e,s);return t}function serializeError(e,t=0,s=new WeakSet){if(t>=MAX_CAUSE_DEPTH)return{name:`SerializedError.CauseDepthExceeded`,message:`cause chain depth > ${MAX_CAUSE_DEPTH}; truncated`};if(typeof e==`object`&&e){if(s.has(e))return{name:`SerializedError.CauseCycle`,message:`cyclic cause; truncated`};s.add(e)}if(e instanceof Error)return{name:e.name,message:scrubPaths(e.message)??``,stack:scrubPaths(e.stack),code:e.code,cause:e.cause===void 0?void 0:serializeError(e.cause,t+1,s)};if(e==null)return{name:`UnknownError`,message:String(e)};if(typeof e==`string`)return{name:`StringError`,message:scrubPaths(e)??e};if(typeof e==`object`){let g=e;return{name:String(g.name??`ObjectError`),message:scrubPaths(String(g.message??``))??``,stack:scrubPaths(g.stack),code:g.code,cause:g.cause===void 0?void 0:serializeError(g.cause,t+1,s)}}return{name:`UnknownError`,message:String(e)}}var SingleFileNotFoundError=class extends Error{constructor(e){super(`File not found: ${e}`),this.filePath=e,this.name=`SingleFileNotFoundError`}},SingleFileNotAFileError=class extends Error{constructor(e){super(`Not a file: ${e}. \`ok <file>\` opens a single markdown file.`),this.filePath=e,this.name=`SingleFileNotAFileError`}},SingleFileNotMarkdownError=class extends Error{constructor(e){super(`OpenKnowledge edits markdown files (.md / .mdx): ${e}`),this.filePath=e,this.name=`SingleFileNotMarkdownError`}};function prepareSingleFileOpen(e){if(!isSupportedDocFile(e))throw new SingleFileNotMarkdownError(e);let t;try{t=realpathSync(resolve(e))}catch(t){throw t.code===`ENOENT`?new SingleFileNotFoundError(e):t}if(!statSync(t).isFile())throw new SingleFileNotAFileError(e);let s=dirname(t),g=findEnclosingProjectRoot(s);if(g){let e=g.rootPath;return{mode:`project`,projectRoot:e,docName:stripDocExtension(relative(resolveProjectContentDir(e),t).split(sep).join(`/`)),canonicalFilePath:t}}let S=basename(t);return{mode:`ephemeral`,canonicalFilePath:t,contentDir:s,singleDocRelPath:S,docName:stripDocExtension(S)}}function resolveProjectContentDir(e){return resolve(e,readConfigSafely({absPath:resolveConfigPath(`project`,e),sideline:!1,warn:()=>{}}).value.content?.dir??`.`)}function createEphemeralProjectDir(e){let t=mkdtempSync(resolve(tmpdir(),`ok-ephemeral-`)),s=resolve(t,`.ok`);return mkdirSync(s,{recursive:!0}),writeFileSync(resolve(s,`config.yml`),`# Ephemeral single-file session (\`ok <file>\`). Throwaway — safe to delete.\ncontent:\n dir: ${JSON.stringify(e)}\n`,`utf-8`),writeFileSync(resolve(s,`.gitignore`),`local/
|
|
3263
|
+
`))e&&await t.raw(`update-ref`,`-d`,e);Y.info({context:e.oldBranch},`[branch-switch] cleaned up detached context ${e.oldBranch}`)}}catch(e){Y.error({err:e},`[branch-switch] detached cleanup failed`)}setBatchInProgress(!1),await we.flushDeferredStores(`discard-stale`),je?.emitBranchSwitched(S)}if(e.headMoved&&e.newHead&&ye.current&&g>0){let t=L??`.`;try{let s=await commitUpstreamImport(ye.current,t,e.oldHead,e.newHead,S);incrementUpstreamImport(),Y.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){Y.error({err:e},`[shadow] upstream-import failed`)}}})}catch(e){Y.error({err:e},`[server] HEAD watcher failed to start`),Vr.push(`head-watcher`)}function O(e){for(let g of e)try{let e=toPosix(relative(t,join(s,g)));if(e.startsWith(`..`))continue;let S=stripDocExtension(e),w=Te.documents.get(S);if(!w)continue;let E=zt(S);E===null?Y.warn({docName:S,file:g},`[sync] content conflict: serializeDoc returned null; reconciledBase snapshot skipped`):setReconciledBase(S,E);let D=w.getMap(`lifecycle`);D.set(`status`,`conflict`),D.set(`reason`,`sync-merge-conflict`),Y.info({docName:S,file:g},`[sync] marked loaded content conflict`)}catch(e){Y.warn({err:e,file:g},`[sync] failed to mark loaded content conflict`)}}let j=buildSyncCredentialArgs(H);try{jr=new SyncEngine({projectDir:s,contentDir:t,contentFilter:ge,contentRoot:L,syncEnabled:ne(),credentialArgs:j,cc1Broadcaster:je,detectGh:e.detectGh,tokenStore:e.tokenStore,checkPushPermissionFn:e.checkPushPermissionFn,setBatchInProgress:e=>{setBatchInProgress(e),e||we.flushDeferredStores(`within-branch`).catch(e=>{Y.error({err:e},`[persistence] deferred store drain failed after sync batch`)})},onStateChange:e=>{Y.info({state:e},`[sync] state → ${e}`)},onContentConflictsDetected:O,onAutoDisable:async e=>{Y.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||Y.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 jr.start()}catch(e){Y.warn({err:e},`[server] SyncEngine failed to start — sync disabled`),jr=null}$e(`files`),$e(`backlinks`),$e(`graph`),$e(`tags`);let F=bootElapsedMs();F!==void 0&&recordBootPhase(`readyMs`,F)}return Hr().then(Ge,Ke),{hocuspocus:Te,sessionManager:De,cc1Broadcaster:je,agentFocusBroadcaster:Me,agentPresenceBroadcaster:Pe,maintenanceCoordinator:Ce,contentFilter:ge,basenameIndex:de,serverInstanceId:ce,destroy:Br,ready:Xe,degraded:Vr,lockDir:ue,get syncEngine(){return jr}}}const SERVER_MEMORY_SCHEMA_VERSION=1,BYTES_PER_MB=1024*1024;function toMb(e){return e/BYTES_PER_MB}function captureServerMemorySnapshot(){let e=process.memoryUsage();return{schemaVersion:SERVER_MEMORY_SCHEMA_VERSION,capturedAt:new Date().toISOString(),snapshot:{rssMb:toMb(e.rss),heapTotalMb:toMb(e.heapTotal),heapUsedMb:toMb(e.heapUsed),externalMb:toMb(e.external),arrayBuffersMb:toMb(e.arrayBuffers)}}}let cachedGauge=null;onTelemetryShutdown(()=>{cachedGauge=null});function installServerMemoryGauge(){if(cachedGauge)return;let e=getMeter().createObservableGauge(`ok.server.memory.usage_megabytes`,{description:`Server process memory by section. Bounded labels: section ∈ {heap_used, heap_total, rss}.`,unit:`MB`});e.addCallback(e=>{let{snapshot:t}=captureServerMemorySnapshot();e.observe(t.heapUsedMb,{section:`heap_used`}),e.observe(t.heapTotalMb,{section:`heap_total`}),e.observe(t.rssMb,{section:`rss`})}),cachedGauge=e}const TELEMETRY_FILENAME=`tolerance-telemetry.jsonl`,TELEMETRY_PREV_FILENAME=`tolerance-telemetry.prev.jsonl`,TELEMETRY_MAX_BYTES=8*1024*1024;let appender=null,appendFailureWarned=!1;function isToleranceTelemetryEnabled(e=process.env){return e.OK_BRIDGE_TOLERANCE_TELEMETRY===`1`}function initToleranceTelemetryWriter(e){if(!isToleranceTelemetryEnabled())return;let t=getLocalDir(e);appender=new RotatingAppender({currentPath:resolve(t,TELEMETRY_FILENAME),previousPath:resolve(t,TELEMETRY_PREV_FILENAME),maxBytes:TELEMETRY_MAX_BYTES}),setToleranceTelemetryHook(e=>{let t={event:`bridge-tolerance-fire`,timestamp:e.timestamp,class:e.className,document:e.documentName??null,codeUnitPosition:e.codeUnitPosition,severity:e.severity};appender?.append(`${JSON.stringify(t)}\n`).catch(e=>{appendFailureWarned||(appendFailureWarned=!0,console.warn(`[tolerance-telemetry] append failed; further failures are silent:`,e instanceof Error?e.message:String(e)))})})}async function teardownToleranceTelemetryWriter(){setToleranceTelemetryHook(null),await appender?.drain(),appender=null,appendFailureWarned=!1}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,PINO_REDACT_MAX_DEPTH=5;async function bootServer(e){startBootTimings();let t=e.projectDir??e.contentDir,s=resolveLocalSinkConfig({projectDir:t});if(s){let e=s.telemetry.attributeDenylist,t=[];for(let s of e){t.push(s);for(let e=1;e<=PINO_REDACT_MAX_DEPTH;e++)t.push(`${`*.`.repeat(e)}${s}`)}loggerFactory.configure({pinoConfig:{fileSink:s.logs,redactPaths:t}})}initTelemetry({localSink:s?.telemetry}),initToleranceTelemetryWriter(t),installServerMemoryGauge();let{kind:g,gitdir:S}=computeWorktreeAttributes(e.projectDir??e.contentDir),w={"ok.worktree.kind":g};S!==null&&(w[`ok.worktree.gitdir`]=normalizeFsPath(S));let E=process.env.OK_STARTUP_TRACEPARENT,D=()=>withSpan(`ok.boot`,{attributes:w},async()=>bootServerInner(e));if(E)try{let e=propagation.extract(context.active(),{traceparent:E});return context.with(e,D)}catch(e){getLogger(`boot`).warn({err:e instanceof Error?e.message:String(e)},`ok.boot trace-join failed — starting unparented boot`)}return D()}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`),{markServerLockDraining:O,releaseServerLock:k,updateServerLockPort:j}=await import(`./server-lock-GuuouVft-uqSUkxXo.mjs`),F=!1;if(!t&&e.autoInitFn)try{F=!!await e.autoInitFn()}catch(e){S.warn({err:e},`autoInitFn failed`)}let L=e.projectDir??e.contentDir,B=resolve(L,`.ok`);if(!existsSync(resolve(B,`config.yml`)))throw new MissingOkConfigError(existsSync(B)?`config`:`okdir`,L);existsSync(resolve(B,`.gitignore`))||console.warn("[boot] Note: .ok/.gitignore is missing — per-machine state files in .ok/ may show up as untracked changes. Run `ok init` to add the recommended ignore entries.");let H=e.gitPreflight??assertGitAvailable;try{e.gitEnabled!==!1&&H()}catch(e){if(e instanceof GitNotAvailableError||e instanceof GitTooOldError){let t=e instanceof GitTooOldError?e.detected:``,s=e instanceof GitTooOldError?`too_old`:`not_available`;emitPreflightFailureSpan(e),S.warn({event:`git_preflight_fail`,platform:e.platform,reason:s,detectedVersion:t},s===`not_available`?`git binary not found`:`git binary too old`),process.stderr.write(`${e.message}\n`)}throw await shutdownTelemetry(),await Promise.race([teardownToleranceTelemetryWriter(),new Promise(e=>setTimeout(e,DESTROY_STEP_TIMEOUT_MS))]),e}let q=findLegacyRuntimeFiles(B);q.length>0&&console.warn(`[boot] Found legacy runtime files at .ok/${q.join(`, `)}. Delete .ok/ and re-init — these files moved to .ok/${LOCAL_DIR}/.`);let ee=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,detectGh:e.detectGh,tokenStore:e.tokenStore,embeddingsKeyStore:e.embeddingsKeyStore,singleDocRelPath:e.singleDocRelPath,ephemeral:e.ephemeral}),{hocuspocus:J,destroy:Y,ready:te,degraded:ne,lockDir:ae,sessionManager:oe,agentFocusBroadcaster:se,agentPresenceBroadcaster:ce,maintenanceCoordinator:ue}=ee,de=(()=>{let t=e.host??`localhost`;return t===`0.0.0.0`||t===`::`?`localhost`:t.includes(`:`)&&!t.startsWith(`[`)?`[${t}]`:t})(),fe=e.port??0,me=e.ephemeral?void 0:createMcpHttpHandler({contentDir:e.contentDir,projectDir:e.projectDir??e.contentDir,config:e.config,getServerUrl:()=>`http://${de}:${fe}`,log:S}),ge=D();ge.headersTimeout=3e4,ge.requestTimeout=6e4;let _e=e.serveContentAssets?createAssetServeMiddleware({contentFilter:ee.contentFilter,contentSirv:build_default(e.contentDir,{dev:!0,dotfiles:!1}),inlineExtensions:INLINE_RENDERABLE_EXTENSIONS,assetExtensions:ASSET_EXTENSIONS,blocklistExtensions:EXECUTABLE_BLOCKLIST_EXTENSIONS}):void 0,ve=!1;if(e.reactShellDistDir)try{acquireUiLock(ae,{port:0,worktreeRoot:e.projectDir??e.contentDir}),ve=!0}catch(e){if(e instanceof UiLockCollisionError)S.info({event:`ui-lock-yielded-to-live-holder`,pid:process.pid,existingPid:e.existing.pid,existingPort:e.existing.port,lockDir:ae},`ui.lock already held by a live process — yielding (advertisement is fulfilled)`);else throw await Y().catch(()=>{}),k(ae),e}let ye=e.reactShellDistDir?build_default(e.reactShellDistDir,{single:!0,gzip:!0,immutable:!0}):void 0,Ce=mountMcpAndApi({httpServer:ge,hocuspocus:J,mcpHttpHandler:me,log:S,sessionManager:oe,agentFocusBroadcaster:se,agentPresenceBroadcaster:ce,maintenanceCoordinator:ue,keepaliveGraceMs:e.keepaliveGraceMs,contentAssetMiddleware:_e,reactShellMiddleware:ye,ephemeral:e.ephemeral}),we=async()=>{throw Error(`bootServer: destroy() invoked before initialization — boot did not complete`)},Te=null;g!==null&&(Te=attachIdleShutdown({httpServer:ge,thresholdMs:g??DEFAULT_IDLE_THRESHOLD_MS,log:S,onShutdown:(e.idleShutdownHandler??(e=>async()=>{await e()}))(async()=>{await we()})})),await restoreLifecycleFromConflictsJson({hocuspocus:J,projectDir:e.projectDir??e.contentDir,log:S});try{await new Promise((t,s)=>{let g=e=>s(e);ge.once(`error`,g),ge.listen(e.port,e.host,()=>{ge.removeListener(`error`,g),t()})})}catch(e){if(ve)try{releaseUiLock(ae)}catch(e){S.warn({err:e},`releaseUiLock failed during listen-error cleanup`)}throw await Y().catch(()=>{}),k(ae),e}let De=bootElapsedMs();De!==void 0&&recordBootPhase(`httpListenMs`,De);let je=ge.address(),Me=typeof je==`object`&&je?je.port:e.port??0;if(fe=Me,j(ae,Me),ve&&updateUiLockPort(ae,Me),s&&e.spawnUiSiblingFn)try{await e.spawnUiSiblingFn({lockDir:ae,log:S})}catch(e){S.warn({err:e},`spawnUiSiblingFn failed`)}let Pe=!1,Ie=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)}};we=async()=>{if(Pe)return;Pe=!0;let e=[],t=async(t,s)=>{try{await Ie(t,s)}catch(s){e.push(s),S.warn({err:s,step:t},`bootServer destroy step failed`)}};try{O(ae),ve&&markUiLockDraining(ae)}catch(e){S.warn({err:e,step:`markLocksDraining`},`bootServer destroy step failed`)}try{Te?.detach()}catch(t){e.push(t),S.warn({err:t,step:`idleHandle.detach`},`bootServer destroy step failed`)}if(await t(`mount.shutdown`,()=>Ce.shutdown()),me!==void 0&&await t(`mcpHttpHandler.close`,()=>me.close()),await t(`mount.wss.close`,()=>new Promise((e,t)=>{Ce.wss.close(s=>s?t(s):e())})),await t(`httpServer.closeAllConnections`,async()=>{ge.closeAllConnections?.()}),await t(`httpServer.close`,()=>new Promise((e,t)=>{ge.close(s=>s&&s.code!==`ERR_SERVER_NOT_RUNNING`?t(s):e())})),await t(`destroyHocuspocus`,()=>Y()),ve&&await t(`releaseUiLock`,async()=>releaseUiLock(ae,{deferUnlinkToExit:!0})),await t(`shutdownTelemetry`,()=>shutdownTelemetry()),await t(`teardownToleranceTelemetry`,()=>teardownToleranceTelemetryWriter()),await t(`flushLogFileSinks`,()=>loggerFactory.flushAllFileSinks()),e.length>0)throw AggregateError(e,`bootServer destroy completed with errors`)};try{let t=await reconcileSkillInstalls({projectDir:L,skillsRoot:resolve(e.contentDir,`.ok`,`skills`)}),s=t.healed.length+t.adopted.length+t.replaced.length+t.collided.length+t.orphansRemoved.length;s>0&&S.info?.({event:`installed-skills-reconciled`,healed:t.healed.length,adopted:t.adopted.length,replaced:t.replaced.length,collided:t.collided.length,orphansRemoved:t.orphansRemoved.length},`Reconciled ${s} editor skill entr${s===1?`y`:`ies`} to the symlink model.`)}catch(e){S.warn?.({event:`installed-skills-reconcile-failed`,error:String(e)},`Installed-skills reconcile failed (non-fatal).`)}return{httpServer:ge,destroy:we,lockDir:ae,contentDir:e.contentDir,port:Me,ready:te,degraded:ne,didAutoInit:F,serverInstance:ee}}async function restoreLifecycleFromConflictsJson(e){let{hocuspocus:t,projectDir:s,log:g}=e,S,w;try{S=new ConflictStore(s),w=S.list()}catch(e){g.warn({err:e,projectDir:s},`[boot] lifecycle restore: failed to read conflicts.json — skipping`);return}if(w.length===0)return;let E=null;try{let e=resolveGitDir(s),t=e?join(e,`MERGE_HEAD`):null;if(!t||!existsSync(t)){S.clear(),console.warn(JSON.stringify({event:`lifecycle-restore-cleared-stale-conflicts`,reason:`no-merge-head`,count:w.length}));return}let g=simpleGit({baseDir:s,timeout:{block:5e3}});E=new Set(await listNames(g,[`diff`,`--name-only`,`--diff-filter=U`]))}catch(e){g.warn({err:e,projectDir:s},`[boot] lifecycle restore: git unmerged probe failed — restoring all entries`)}if(E!==null){let e=0;for(let t of w)E.has(t.file)||(S.removeConflict(t.file),e++);if(e>0&&console.warn(JSON.stringify({event:`lifecycle-restore-pruned-resolved-entries`,pruned:e,remaining:w.length-e})),w=w.filter(e=>E?.has(e.file)),w.length===0)return}for(let e of w){let s=stripDocExtension(e.file),S=null,w=!1;try{S=await t.openDirectConnection(s);let e=S.document;if(!e)continue;let g=e.getMap(`lifecycle`);g.set(`status`,`conflict`),g.set(`reason`,`conflict-markers`),w=!0,console.warn(JSON.stringify({event:`lifecycle-restored-from-conflicts-json`,"doc.name":s}))}catch(e){g.warn({err:e,docName:s},`[boot] lifecycle restore: failed to set lifecycle for doc — skipping`)}finally{if(S)try{await S.disconnect()}catch(e){g.warn({err:e,docName:s,restored:w},`[boot] lifecycle restore: disconnect failed after lifecycle write`)}}}}const ConfigSchema=ConfigSchema$1;function detectClaudeDesktopPresence(e={}){let t=e.home??homedir(),s=e.platformName??process.platform,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 OK_LOGS_DIR=join(homedir(),`.ok`,`logs`),MAX_ROTATED_FILES=2,MAX_AGE_DAYS=7,MAX_DIR_SIZE_BYTES=45*1024*1024,REDACT_PATHS=[`authorization`,`password`,`token`,`apiKey`,`secret`,`*.authorization`,`*.password`,`*.token`,`*.apiKey`,`*.secret`];function resolveLogLevel(){let e=process.env.OK_LOG_LEVEL??process.env.LOG_LEVEL;if(e){let t=[`fatal`,`error`,`warn`,`info`,`debug`],s=e.toLowerCase();if(t.includes(s))return s}return process.env.NODE_ENV===`test`?`silent`:`info`}function ensureDir(e){mkdirSync(e,{recursive:!0})}function todayDateString(){return new Date().toISOString().slice(0,10)}function rotateIfNeeded(e){try{if(statSync(e).size<5242880)return}catch{return}for(let t=MAX_ROTATED_FILES;t>=1;t--){let s=t===1?e:`${e}.${t-1}`,g=`${e}.${t}`;try{renameSync(s,g)}catch{}}try{unlinkSync(`${e}.${MAX_ROTATED_FILES+1}`)}catch{}}function pruneLogsDir(e){try{let t=Date.now(),s=MAX_AGE_DAYS*24*60*60*1e3,g=readdirSync(e).filter(e=>e.endsWith(`.log`)||/\.log\.\d+$/.test(e)).map(t=>{try{let s=statSync(join(e,t));return{name:t,mtime:s.mtimeMs,size:s.size}}catch{return null}}).filter(Boolean);for(let S of g)if(t-S.mtime>s)try{unlinkSync(join(e,S.name))}catch{}let S=g.filter(e=>t-e.mtime<=s).sort((e,t)=>e.mtime-t.mtime),w=S.reduce((e,t)=>e+t.size,0);for(let t of S){if(w<=MAX_DIR_SIZE_BYTES)break;try{unlinkSync(join(e,t.name)),w-=t.size}catch{}}}catch{}}function createFileLogger(e){ensureDir(OK_LOGS_DIR);let t=todayDateString(),s=e.filePath??join(OK_LOGS_DIR,`${e.name}.${t}.log`);rotateIfNeeded(s),(e._setTimeout??setTimeout)(()=>pruneLogsDir(OK_LOGS_DIR),5e3).unref();let g=import_pino.default.destination({dest:s,append:!0,sync:!0});return(0,import_pino.default)({level:resolveLogLevel(),name:e.name,redact:{paths:REDACT_PATHS,censor:`[REDACTED]`},base:{pid:process.pid,hostname:void 0,runtime:`cli`,project:e.project??`<no-project>`},timestamp:import_pino.default.stdTimeFunctions.isoTime,...e.additionalOptions},g)}function flushFileLogger(e,t=250){return new Promise(s=>{if(!e){s();return}let g=e[import_pino.default.symbols.streamSym],S=!1,w=()=>{S||(S=!0,s())};if(!g||typeof g.flushSync!=`function`){w();return}let E=()=>{try{g.flushSync?.()}catch{}w()},D=setTimeout(w,t);typeof D.unref==`function`&&D.unref(),typeof g.fd==`number`&&g.fd>=0?(clearTimeout(D),E()):typeof g.once==`function`?g.once(`ready`,()=>{clearTimeout(D),E()}):(clearTimeout(D),E())})}function getLogFilePath(e){return join(OK_LOGS_DIR,`${e}.${todayDateString()}.log`)}function getLogsDir(){return OK_LOGS_DIR}const ANCESTOR_WALK_DEPTH_LIMIT=30,GIT_MARKER=`.git`;function findEnclosingGitRoot(e){let t=resolve(e),s=0;for(;s<ANCESTOR_WALK_DEPTH_LIMIT;){let e=!1;try{e=existsSync(resolve(t,GIT_MARKER))}catch{e=!1}if(e)return{gitRoot:t,distance:s};let g=dirname(t);if(g===t)return null;t=g,s+=1}return null}const execFileAsync=promisify(execFile),log=getLogger(`project-git`);var ProjectGitInitError=class extends Error{stderr;constructor(e,t=``,s){super(e,s),this.name=`ProjectGitInitError`,this.stderr=t}};async function isInsideExistingWorkTree(e,t){try{let{stdout:s}=await execFileAsync(e,[`rev-parse`,`--is-inside-work-tree`],withHiddenWindowsConsole({cwd:t,encoding:`utf-8`}));return s.trim()===`true`}catch{return!1}}async function ensureProjectGit(e){let t=resolve(e),s=resolve(t,`.git`),g=resolve(s,`HEAD`),S=!1;if(existsSync(s)){if(!statSync(s).isDirectory()||existsSync(g))return{didInit:!1};log.info({},`detected partial .git/ — running git init to repair`),S=!0}let w;try{w=assertGitAvailable()}catch(e){throw e instanceof GitNotAvailableError||e instanceof GitTooOldError?(emitPreflightFailureSpan(e),log.warn({event:`git_preflight_fail`,platform:e.platform,reason:e instanceof GitTooOldError?`too_old`:`not_available`,detectedVersion:e instanceof GitTooOldError?e.detected:``},e instanceof GitTooOldError?`git binary too old`:`git binary not found`)):log.warn({event:`git_preflight_unexpected_error`,message:e instanceof Error?e.message:String(e)},`unexpected error during git preflight`),e}let E=w.resolvedPath;if(!S&&await isInsideExistingWorkTree(E,t))return{didInit:!1};let D=``;try{D=(await execFileAsync(E,[`init`,`--initial-branch=main`,t],withHiddenWindowsConsole({encoding:`utf-8`}))).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(g))throw new ProjectGitInitError(`git init reported success but ${s}/HEAD is missing (partial init detected)`,D);return S?(log.info({path:t},`backfilled missing .git/HEAD`),{didInit:!0,repaired:!0}):(log.info({path:t,branch:`main`},`initialized .git/`),{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}}const MAX_CAUSE_DEPTH=5,HOME_PATH_PATTERNS=[{regex:/\/Users\/[^/]+\//g,replacement:`~/`},{regex:/\/home\/[^/]+\//g,replacement:`~/`},{regex:/C:\\\\Users\\\\[^\\\\]+\\\\/g,replacement:`~\\`},{regex:/C:\\Users\\[^\\]+\\/g,replacement:`~\\`}];function scrubPaths(e){if(e===void 0)return;let t=e;for(let{regex:e,replacement:s}of HOME_PATH_PATTERNS)t=t.replace(e,s);return t}function serializeError(e,t=0,s=new WeakSet){if(t>=MAX_CAUSE_DEPTH)return{name:`SerializedError.CauseDepthExceeded`,message:`cause chain depth > ${MAX_CAUSE_DEPTH}; truncated`};if(typeof e==`object`&&e){if(s.has(e))return{name:`SerializedError.CauseCycle`,message:`cyclic cause; truncated`};s.add(e)}if(e instanceof Error)return{name:e.name,message:scrubPaths(e.message)??``,stack:scrubPaths(e.stack),code:e.code,cause:e.cause===void 0?void 0:serializeError(e.cause,t+1,s)};if(e==null)return{name:`UnknownError`,message:String(e)};if(typeof e==`string`)return{name:`StringError`,message:scrubPaths(e)??e};if(typeof e==`object`){let g=e;return{name:String(g.name??`ObjectError`),message:scrubPaths(String(g.message??``))??``,stack:scrubPaths(g.stack),code:g.code,cause:g.cause===void 0?void 0:serializeError(g.cause,t+1,s)}}return{name:`UnknownError`,message:String(e)}}var SingleFileNotFoundError=class extends Error{constructor(e){super(`File not found: ${e}`),this.filePath=e,this.name=`SingleFileNotFoundError`}},SingleFileNotAFileError=class extends Error{constructor(e){super(`Not a file: ${e}. \`ok <file>\` opens a single markdown file.`),this.filePath=e,this.name=`SingleFileNotAFileError`}},SingleFileNotMarkdownError=class extends Error{constructor(e){super(`OpenKnowledge edits markdown files (.md / .mdx): ${e}`),this.filePath=e,this.name=`SingleFileNotMarkdownError`}};function prepareSingleFileOpen(e){if(!isSupportedDocFile(e))throw new SingleFileNotMarkdownError(e);let t;try{t=realpathSync(resolve(e))}catch(t){throw t.code===`ENOENT`?new SingleFileNotFoundError(e):t}if(!statSync(t).isFile())throw new SingleFileNotAFileError(e);let s=dirname(t),g=findEnclosingProjectRoot(s);if(g){let e=g.rootPath;return{mode:`project`,projectRoot:e,docName:stripDocExtension(relative(resolveProjectContentDir(e),t).split(sep).join(`/`)),canonicalFilePath:t}}let S=basename(t);return{mode:`ephemeral`,canonicalFilePath:t,contentDir:s,singleDocRelPath:S,docName:stripDocExtension(S)}}function resolveProjectContentDir(e){return resolve(e,readConfigSafely({absPath:resolveConfigPath(`project`,e),sideline:!1,warn:()=>{}}).value.content?.dir??`.`)}function createEphemeralProjectDir(e){let t=mkdtempSync(resolve(tmpdir(),`ok-ephemeral-`)),s=resolve(t,`.ok`);return mkdirSync(s,{recursive:!0}),writeFileSync(resolve(s,`config.yml`),`# Ephemeral single-file session (\`ok <file>\`). Throwaway — safe to delete.\ncontent:\n dir: ${JSON.stringify(e)}\n`,`utf-8`),writeFileSync(resolve(s,`.gitignore`),`local/
|
|
3264
3264
|
`,`utf-8`),t}export{STARTER_PACK_IDS as $,withSpanSync as $i,isKnownPackId as $n,resolveCursorSpawnInvocation as $r,createMcpHttpHandler as $t,HocuspocusAuthRejection as A,startWatcher as Ai,getLocalDir as An,processUsage as Ar,classifyFsPath as At,McpLogger as B,tracedRenameSync as Bi,incrementCollabSocketFilteredError as Bn,readTargetVersion as Br,contributorCount as Bt,FILE_WATCHER_ORIGIN as C,shadowGit as Ci,flushFileLogger as Cn,parseGitVersion as Cr,buildConfigYmlContent as Ct,GitNotAvailableError as D,spansPreviousPath as Di,formatPackRationale as Dn,planSeed as Dr,buildWipTree as Dt,GIT_UPSTREAM_WRITER as E,spansCurrentPath as Ei,formatContributorsFrom as En,pathToDocName as Er,buildStarterFolderFrontmatterYaml as Et,MANAGED_RENAME_ORIGIN as F,tracedAppendFileSync as Fi,getMetrics as Fn,readServerPackageVersion as Fr,commitWip as Ft,ProjectGitInitError as G,tracedWriteFileSync as Gi,initToleranceTelemetryWriter as Gn,registerAllTools as Gr,createAssetServeMiddleware as Gt,OBSERVER_SYNC_ORIGIN as H,tracedRmdirSync as Hi,initContent as Hn,reconcile as Hr,countStaleAgentWipRefs as Ht,MAX_AGENT_SESSIONS as I,tracedLinkSync as Ii,getTracer as In,readSkillInstallStateSnapshot as Ir,commitWipFromTree as It,SERVICE_WRITER as J,validateAgentId as Ji,installUserSkill as Jn,removeLastKnownHash as Jr,createEmbeddingsSecretStore as Jt,ROLLBACK_ORIGIN as K,updateLastKnownHash as Ki,installPrettyZodErrors as Kn,registerWrite as Kr,createContentFilter as Kt,MCP_CONNECTION_ID_HEADER as L,tracedMkdir as Li,handleCollabSocketError as Ln,readSkillManagement as Lr,compareSemver as Lt,INSTALLED_AGENTS_SCHEMES as M,swapContributors as Mi,getLogger as Mn,readBranchFromHead as Mr,clearEmbeddingsKeyFromAllBackends as Mt,LIVE_DERIVED_INDEX_DEBOUNCE_MS as N,teardownToleranceTelemetryWriter as Ni,getLogsDir as Nn,readBundleDecision as Nr,coercePackId as Nt,GitTooOldError as O,spawnDetached as Oi,gcCheckpointRefs as On,prepareSingleFileOpen as Or,bundleSkillMdPath as Ot,LOG_MD_TEMPLATE as P,toBroadcasterKey as Pi,getMeter as Pn,readProjectLocalSemanticConfig as Pr,commitUpstreamImport as Pt,STARTER_PACKS as Q,withSpan as Qi,isHocuspocusAuthRejectionReason as Qn,resolveCursorBinaryDefault as Qr,createLiveDerivedIndexExtension as Qt,MIN_GIT_VERSION as R,tracedMkdirSync as Ri,handleSpawnCursor as Rn,readStateManifest as Rr,containsConflictMarkers as Rt,FILE_SYSTEM_WRITER as S,setupServerObservers as Si,findEnclosingProjectRoot as Sn,parseAuthRejectionWire as Sr,buildAndOpenSkill as St,GIT_PREFLIGHT_FAIL_SPAN_NAME as T,skillManagementPath as Ti,formatContributors as Tn,parseKeepaliveConnectionId as Tr,buildSkillZip as Tt,OK_OKIGNORE_TEMPLATE as U,tracedUnlinkSync as Ui,initShadowRepo as Un,recordContributor as Ur,countWipRefs as Ut,MissingOkConfigError as V,tracedRmSync as Vi,incrementServerObserverFire as Vn,readUiLock as Vr,countShadowObjects as Vt,PinoLogger as W,tracedWriteFile as Wi,initTelemetry as Wn,recordSkillInstallEvent as Wr,createApiExtension as Wt,STARTER_FOLDERS as X,validateSkillZip as Xi,isAllowedWorkspaceHostHeader as Xn,resolveBundledSkillDir as Xr,createExternalChangeHandler as Xt,SKILL_INSTALL_EVENTS_FILE_REL as Y,validateCloneInputs as Yi,isAllowedApiOrigin as Yn,resetMetrics as Yr,createEphemeralProjectDir as Yt,STARTER_FOLDER_FRONTMATTER_FILENAME as Z,withHiddenWindowsConsole as Zi,isConfigDoc as Zn,resolveContentDir as Zr,createFileLogger as Zt,ConfigSchema as _,GitDirAccessError as _a,saveInMemoryCheckpoint as _i,evictStaleTrackerEntries as _n,logsPreviousPath as _r,assertCompatibleStateManifest as _t,AgentPresenceBroadcaster as a,writeTracker as aa,restoreLifecycleFromConflictsJson as ai,createTestLogger as an,isProjectRoot as ar,SingleFileNotFoundError as at,DEFAULT_PACK_ID as b,resolveGitDirDetailed as ba,serializeError as bi,fallbackPaths as bn,normalizeFsPath as br,attachIdleShutdown as bt,AutoStartDisabledError as c,LATEST_PROTOCOL_VERSION as ca,runAuthReposSubprocess as ci,detectGit as cn,isSelfWrite as cr,TagIndex as ct,BUNDLE_SKILL_NAME as d,isJSONRPCResultResponse as da,runDeviceFlowSubprocess as di,emitPreflightFailureSpan as dn,lastKnownHash as dr,__getShowAllWalkStatsForTesting as dt,writeBundleDecision as ea,resolveLockDir as ei,createOsProbe as en,isLinkIndexExcludedDoc as er,STARTER_TEMPLATES as et,BacklinkIndex as f,atomicWriteFileSync as fa,runWithMcpLogger as fi,encodeDocName as fn,listRescueCheckpoints as fr,__resetShowAllWalkStatsForTesting as ft,CURSOR_BUNDLE_PATHS_BY_PLATFORM as g,writeConfigPatch as ga,sanitizeClientName as gi,errorResponse as gn,logsCurrentPath as gr,applySeed as gt,CONFLICT_MARKER_RE as h,withFileLockSync as ha,safetyCheckpoint as hi,ensureProjectGit as hn,loggerFactory as hr,applyExternalChange as ht,AgentFocusBroadcaster as i,writeTargetVersion as ia,restoreContributors as ii,createStreamingErrorWriter as in,isPathWithinDir as ir,SingleFileNotAFileError as it,HocuspocusAuthTokenSchema as j,streamingProblemEvent as ji,getLogFilePath as jn,readAllTargets as jr,clearContributors as jt,HOCUSPOCUS_AUTH_REJECTION_REASONS as k,splitMarkdownBlocks as ki,getCurrentMcpLogger as kn,processCommand as kr,classifyEvents as kt,BUNDLE_IDS as l,isInitializedNotification as la,runAuthStatusSubprocess as li,detectProjectShape as ln,isSystemDoc as lr,USER_GLOBAL_BUNDLE_IDS as lt,CONFIG_FILENAME as m,resolveConfigPath as ma,safeSubdir as mi,encodeSkillRoute as mn,loadPrincipal as mr,applyAgentMarkdownWrite as mt,AGENT_ID_RE as n,writeSkillManagement as na,resolvePackageVersion as ni,createServer$1 as nn,isManagedArtifactDoc as nr,SeedPrerequisiteError as nt,AgentSessionCapacityError as o,McpServer as oa,rewriteMarkdownLinksForDocumentRename as oi,describeStoredEmbeddingsKey as on,isProjectSkillManaged as or,SingleFileNotMarkdownError as ot,CC1Broadcaster as p,readConfigSafely as pa,safeContentPath as pi,encodeFolderRoute as pn,listStarterPacks as pr,acquireUiLock as pt,ROOT_GITIGNORE_TEMPLATE as q,updateUiLockPort as qi,installTestLoggers as qn,releaseUiLock as qr,createContentFilterAsync as qt,AGENT_WRITE_ORIGIN as r,writeStateManifest as ra,resolveUiInfo as ri,createServerObserverExtension as rn,isPairedWriteOrigin as rr,SeedRootDirError as rt,AgentSessionManager as s,JSONRPCMessageSchema as sa,rewriteWikiLinksForDocumentRename as si,detectClaudeDesktopPresence as sn,isReservedForUserTree as sr,StateManifestError as st,AGENT_ID_MAX_LEN as t,writeRootGitignoreForNewRepo as ta,resolvePack as ti,createPersistenceExtension as tn,isLoopbackAddress as tr,STATE_MANIFEST_FILENAME as tt,BUNDLE_SCOPE as u,isJSONRPCRequest as ua,runCloneSubprocess as ui,discoverLockDirs as un,isToleranceTelemetryEnabled as ur,UiLockCollisionError as ut,DEFAULT_CHECKPOINT_RETENTION as v,MalformedGitPointerError as va,saveVersion as vi,extractOkBinaryPath as vn,makeLazyEmbeddingsKeyStore as vr,assertGitAvailable as vt,FileEmbeddingsBackend as w,shutdownTelemetry as wi,formatAuthRejectionWire as wn,parseHocuspocusAuthToken as wr,buildExecResult as wt,EMBEDDINGS_API_KEY_ENV as x,resolveShadowDir as xa,setActiveSpanAttributes as xi,findEnclosingGitRoot as xn,packageVersionMajorMinor as xr,bootServer as xt,DEFAULT_EMBEDDINGS_DIMENSIONS as y,parseCheckpoint as ya,seedBasenameIndex as yi,extractWikiLinksFromMarkdown as yn,mountMcpAndApi as yr,assertNeverDiskEvent as yt,MISSING_OK_CONFIG_MESSAGE as z,tracedRename as zi,hasGcLogLatch as zn,readTargetRecordedAt as zr,contentHash as zt};
|
|
3265
|
-
//# sourceMappingURL=dist-
|
|
3265
|
+
//# sourceMappingURL=dist-BXlA66Rv.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Fi as e,Gt as t,Hi as n,Pn as r,Q as i,_ as a,a as o,an as s,b as c,c as l,da as u,di as d,f,g as p,gn as m,h,i as g,kn as _,l as v,m as y,n as b,o as x,p as S,r as C,s as w,t as T,u as E,un as D,v as O,y as k}from"./server-lock-iLcBw_q0-6FEAZKHu.mjs";import{$ as A,$i as j,$n as M,$r as N,$t as P,A as F,Ai as I,An as L,Ar as R,At as z,B,Bi as V,Bn as H,Br as U,Bt as W,C as G,Ci as K,Cn as q,Cr as J,Ct as Y,D as X,Di as Z,Dn as Q,Dr as $,Dt as ee,E as te,Ei as ne,En as re,Er as ie,Et as ae,F as oe,Fi as se,Fn as ce,Fr as le,Ft as ue,G as de,Gi as fe,Gn as pe,Gr as me,Gt as he,H as ge,Hi as _e,Hn as ve,Hr as ye,Ht as be,I as xe,Ii as Se,In as Ce,Ir as we,It as Te,J as Ee,Ji as De,Jn as Oe,Jr as ke,Jt as Ae,K as je,Ki as Me,Kn as Ne,Kr as Pe,Kt as Fe,L as Ie,Li as Le,Ln as Re,Lr as ze,Lt as Be,M as Ve,Mi as He,Mn as Ue,Mr as We,Mt as Ge,N as Ke,Ni as qe,Nn as Je,Nr as Ye,Nt as Xe,O as Ze,Oi as Qe,On as $e,Or as et,Ot as tt,P as nt,Pi as rt,Pn as it,Pr as at,Pt as ot,Q as st,Qi as ct,Qn as lt,Qr as ut,Qt as dt,R as ft,Ri as pt,Rn as mt,Rr as ht,Rt as gt,S as _t,Si as vt,Sn as yt,Sr as bt,St as xt,T as St,Ti as Ct,Tn as wt,Tr as Tt,Tt as Et,U as Dt,Ui as Ot,Un as kt,Ur as At,Ut as jt,V as Mt,Vi as Nt,Vn as Pt,Vr as Ft,Vt as It,W as Lt,Wi as Rt,Wn as zt,Wr as Bt,Wt as Vt,X as Ht,Xi as Ut,Xn as Wt,Xr as Gt,Xt as Kt,Y as qt,Yi as Jt,Yn as Yt,Yr as Xt,Yt as Zt,Z as Qt,Zi as $t,Zn as en,Zr as tn,Zt as nn,_ as rn,_a as an,_i as on,_n as sn,_r as cn,_t as ln,a as un,aa as dn,ai as fn,an as pn,ar as mn,at as hn,b as gn,bi as _n,bn as vn,br as yn,bt as bn,c as xn,ci as Sn,cn as Cn,cr as wn,ct as Tn,d as En,di as Dn,dn as On,dr as kn,dt as An,ea as jn,ei as Mn,en as Nn,er as Pn,et as Fn,f as In,fi as Ln,fn as Rn,fr as zn,ft as Bn,g as Vn,gi as Hn,gn as Un,gr as Wn,gt as Gn,h as Kn,hi as qn,hn as Jn,hr as Yn,ht as Xn,i as Zn,ia as Qn,ii as $n,in as er,ir as tr,it as nr,j as rr,ji as ir,jn as ar,jr as or,jt as sr,k as cr,ki as lr,kn as ur,kr as dr,kt as fr,l as pr,li as mr,ln as hr,lr as gr,lt as _r,m as vr,mi as yr,mn as br,mr as xr,mt as Sr,n as Cr,na as wr,ni as Tr,nn as Er,nr as Dr,nt as Or,o as kr,oi as Ar,on as jr,or as Mr,ot as Nr,p as Pr,pi as Fr,pn as Ir,pr as Lr,pt as Rr,q as zr,qi as Br,qn as Vr,qr as Hr,qt as Ur,r as Wr,ra as Gr,ri as Kr,rn as qr,rr as Jr,rt as Yr,s as Xr,si as Zr,sn as Qr,sr as $r,st as ei,t as ti,ta as ni,ti as ri,tn as ii,tr as ai,tt as oi,u as si,ui as ci,un as li,ur as ui,ut as di,v as fi,va as pi,vi as mi,vn as hi,vr as gi,vt as _i,w as vi,wi as yi,wn as bi,wr as xi,wt as Si,x as Ci,xi as wi,xn as Ti,xr as Ei,xt as Di,y as Oi,yi as ki,yn as Ai,yr as ji,yt as Mi,z as Ni,zi as Pi,zn as Fi,zr as Ii,zt as Li}from"./dist-Bu8EnbFm.mjs";export{ti as AGENT_ID_MAX_LEN,Cr as AGENT_ID_RE,Wr as AGENT_WRITE_ORIGIN,Zn as AgentFocusBroadcaster,un as AgentPresenceBroadcaster,kr as AgentSessionCapacityError,Xr as AgentSessionManager,xn as AutoStartDisabledError,pr as BUNDLE_IDS,si as BUNDLE_SCOPE,En as BUNDLE_SKILL_NAME,In as BacklinkIndex,Pr as CC1Broadcaster,i as CC1_CONTRACT_VERSION,vr as CONFIG_FILENAME,Kn as CONFLICT_MARKER_RE,Vn as CURSOR_BUNDLE_PATHS_BY_PLATFORM,rn as ConfigSchema,fi as DEFAULT_CHECKPOINT_RETENTION,Oi as DEFAULT_EMBEDDINGS_DIMENSIONS,gn as DEFAULT_PACK_ID,Ci as EMBEDDINGS_API_KEY_ENV,_t as FILE_SYSTEM_WRITER,G as FILE_WATCHER_ORIGIN,vi as FileEmbeddingsBackend,St as GIT_PREFLIGHT_FAIL_SPAN_NAME,te as GIT_UPSTREAM_WRITER,an as GitDirAccessError,X as GitNotAvailableError,Ze as GitTooOldError,cr as HOCUSPOCUS_AUTH_REJECTION_REASONS,F as HocuspocusAuthRejection,rr as HocuspocusAuthTokenSchema,Ve as INSTALLED_AGENTS_SCHEMES,t as LINEAGE_EPOCH_KEY,Ke as LIVE_DERIVED_INDEX_DEBOUNCE_MS,nt as LOG_MD_TEMPLATE,oe as MANAGED_RENAME_ORIGIN,xe as MAX_AGENT_SESSIONS,Ie as MCP_CONNECTION_ID_HEADER,s as MCP_SERVER_NAME,ft as MIN_GIT_VERSION,Ni as MISSING_OK_CONFIG_MESSAGE,pi as MalformedGitPointerError,B as McpLogger,Mt as MissingOkConfigError,ge as OBSERVER_SYNC_ORIGIN,Dt as OK_OKIGNORE_TEMPLATE,D as ORPHAN_MODES,m as PROTOCOL_VERSION,Lt as PinoLogger,T as ProcessLockCollisionError,de as ProjectGitInitError,je as ROLLBACK_ORIGIN,zr as ROOT_GITIGNORE_TEMPLATE,b as RUNTIME_VERSION,Ee as SERVICE_WRITER,qt as SKILL_INSTALL_EVENTS_FILE_REL,_ as SKILL_STATE_TARGETS,Ht as STARTER_FOLDERS,Qt as STARTER_FOLDER_FRONTMATTER_FILENAME,st as STARTER_PACKS,A as STARTER_PACK_IDS,Fn as STARTER_TEMPLATES,oi as STATE_MANIFEST_FILENAME,C as STATE_SCHEMA_VERSION,r as SYSTEM_DOC_NAME,Or as SeedPrerequisiteError,Yr as SeedRootDirError,g as ServerLockCollisionError,nr as SingleFileNotAFileError,hn as SingleFileNotFoundError,Nr as SingleFileNotMarkdownError,ei as StateManifestError,Tn as TagIndex,_r as USER_GLOBAL_BUNDLE_IDS,di as UiLockCollisionError,An as __getShowAllWalkStatsForTesting,Bn as __resetShowAllWalkStatsForTesting,o as acquireProcessLock,x as acquireServerLock,Rr as acquireUiLock,Sr as applyAgentMarkdownWrite,Xn as applyExternalChange,Gn as applySeed,ln as assertCompatibleStateManifest,_i as assertGitAvailable,Mi as assertNeverDiskEvent,bn as attachIdleShutdown,Di as bootServer,xt as buildAndOpenSkill,Y as buildConfigYmlContent,Si as buildExecResult,Et as buildSkillZip,ae as buildStarterFolderFrontmatterYaml,ee as buildWipTree,tt as bundleSkillMdPath,fr as classifyEvents,z as classifyFsPath,sr as clearContributors,Ge as clearEmbeddingsKeyFromAllBackends,Xe as coercePackId,d as colorFromSeed,ot as commitUpstreamImport,ue as commitWip,Te as commitWipFromTree,Be as compareSemver,gt as containsConflictMarkers,Li as contentHash,W as contributorCount,It as countShadowObjects,be as countStaleAgentWipRefs,jt as countWipRefs,Vt as createApiExtension,he as createAssetServeMiddleware,Fe as createContentFilter,Ur as createContentFilterAsync,Ae as createEmbeddingsSecretStore,Zt as createEphemeralProjectDir,Kt as createExternalChangeHandler,nn as createFileLogger,dt as createLiveDerivedIndexExtension,P as createMcpHttpHandler,Nn as createOsProbe,ii as createPersistenceExtension,Er as createServer,qr as createServerObserverExtension,er as createStreamingErrorWriter,pn as createTestLogger,jr as describeStoredEmbeddingsKey,Qr as detectClaudeDesktopPresence,Cn as detectGit,hr as detectProjectShape,li as discoverLockDirs,On as emitPreflightFailureSpan,Rn as encodeDocName,Ir as encodeFolderRoute,br as encodeSkillRoute,Jn as ensureProjectGit,Un as errorResponse,sn as evictStaleTrackerEntries,hi as extractOkBinaryPath,Ai as extractWikiLinksFromMarkdown,vn as fallbackPaths,Ti as findEnclosingGitRoot,yt as findEnclosingProjectRoot,q as flushFileLogger,bi as formatAuthRejectionWire,wt as formatContributors,re as formatContributorsFrom,Q as formatPackRationale,$e as gcCheckpointRefs,ur as getCurrentMcpLogger,L as getLocalDir,ar as getLogFilePath,Ue as getLogger,Je as getLogsDir,w as getMachineId,it as getMeter,ce as getMetrics,Ce as getTracer,Re as handleCollabSocketError,mt as handleSpawnCursor,Fi as hasGcLogLatch,e as iconFromClientName,H as incrementCollabSocketFilteredError,Pt as incrementServerObserverFire,ve as initContent,kt as initShadowRepo,zt as initTelemetry,pe as initToleranceTelemetryWriter,Ne as installPrettyZodErrors,Vr as installTestLoggers,Oe as installUserSkill,Yt as isAllowedApiOrigin,Wt as isAllowedWorkspaceHostHeader,en as isConfigDoc,lt as isHocuspocusAuthRejectionReason,M as isKnownPackId,Pn as isLinkIndexExcludedDoc,ai as isLoopbackAddress,Dr as isManagedArtifactDoc,n as isOrphanMode,Jr as isPairedWriteOrigin,tr as isPathWithinDir,l as isProcessAlive,mn as isProjectRoot,Mr as isProjectSkillManaged,$r as isReservedForUserTree,wn as isSelfWrite,gr as isSystemDoc,ui as isToleranceTelemetryEnabled,v as isValidLockPid,kn as lastKnownHash,zn as listRescueCheckpoints,Lr as listStarterPacks,xr as loadPrincipal,E as lockFilePath,Yn as loggerFactory,Wn as logsCurrentPath,cn as logsPreviousPath,gi as makeLazyEmbeddingsKeyStore,f as markServerLockDraining,ji as mountMcpAndApi,yn as normalizeFsPath,Ei as packageVersionMajorMinor,bt as parseAuthRejectionWire,J as parseGitVersion,xi as parseHocuspocusAuthToken,Tt as parseKeepaliveConnectionId,ie as pathToDocName,$ as planSeed,et as prepareSingleFileOpen,dr as processCommand,R as processUsage,or as readAllTargets,We as readBranchFromHead,Ye as readBundleDecision,S as readProcessLock,y as readProcessLockDetailed,at as readProjectLocalSemanticConfig,h as readServerLock,le as readServerPackageVersion,we as readSkillInstallStateSnapshot,ze as readSkillManagement,ht as readStateManifest,Ii as readTargetRecordedAt,U as readTargetVersion,Ft as readUiLock,ye as reconcile,At as recordContributor,Bt as recordSkillInstallEvent,me as registerAllTools,Pe as registerWrite,p as releaseProcessLock,a as releaseServerLock,Hr as releaseUiLock,ke as removeLastKnownHash,Xt as resetMetrics,u as resolveBundleEnabled,Gt as resolveBundledSkillDir,tn as resolveContentDir,ut as resolveCursorBinaryDefault,N as resolveCursorSpawnInvocation,Mn as resolveLockDir,ri as resolvePack,Tr as resolvePackageVersion,Kr as resolveUiInfo,$n as restoreContributors,fn as restoreLifecycleFromConflictsJson,Ar as rewriteMarkdownLinksForDocumentRename,Zr as rewriteWikiLinksForDocumentRename,Sn as runAuthReposSubprocess,mr as runAuthStatusSubprocess,ci as runCloneSubprocess,Dn as runDeviceFlowSubprocess,Ln as runWithMcpLogger,Fr as safeContentPath,yr as safeSubdir,qn as safetyCheckpoint,Hn as sanitizeClientName,on as saveInMemoryCheckpoint,mi as saveVersion,ki as seedBasenameIndex,_n as serializeError,wi as setActiveSpanAttributes,vt as setupServerObservers,K as shadowGit,yi as shutdownTelemetry,Ct as skillManagementPath,ne as spansCurrentPath,Z as spansPreviousPath,Qe as spawnDetached,lr as splitMarkdownBlocks,I as startWatcher,ir as streamingProblemEvent,He as swapContributors,qe as teardownToleranceTelemetryWriter,rt as toBroadcasterKey,se as tracedAppendFileSync,Se as tracedLinkSync,Le as tracedMkdir,pt as tracedMkdirSync,Pi as tracedRename,V as tracedRenameSync,Nt as tracedRmSync,_e as tracedRmdirSync,Ot as tracedUnlinkSync,Rt as tracedWriteFile,fe as tracedWriteFileSync,Me as updateLastKnownHash,O as updateProcessLockPort,k as updateServerLockPort,Br as updateUiLockPort,De as validateAgentId,Jt as validateCloneInputs,Ut as validateSkillZip,c as waitForServerLockDrain,$t as withHiddenWindowsConsole,ct as withSpan,j as withSpanSync,jn as writeBundleDecision,ni as writeRootGitignoreForNewRepo,wr as writeSkillManagement,Gr as writeStateManifest,Qn as writeTargetVersion,dn as writeTracker};
|
|
1
|
+
import{Fi as e,Gt as t,Hi as n,Pn as r,Q as i,_ as a,a as o,an as s,b as c,c as l,da as u,di as d,f,g as p,gn as m,h,i as g,kn as _,l as v,m as y,n as b,o as x,p as S,r as C,s as w,t as T,u as E,un as D,v as O,y as k}from"./server-lock-iLcBw_q0-WEyo7ukm.mjs";import{$ as A,$i as j,$n as M,$r as N,$t as P,A as F,Ai as I,An as L,Ar as R,At as z,B,Bi as V,Bn as H,Br as U,Bt as W,C as G,Ci as K,Cn as q,Cr as J,Ct as Y,D as X,Di as Z,Dn as Q,Dr as $,Dt as ee,E as te,Ei as ne,En as re,Er as ie,Et as ae,F as oe,Fi as se,Fn as ce,Fr as le,Ft as ue,G as de,Gi as fe,Gn as pe,Gr as me,Gt as he,H as ge,Hi as _e,Hn as ve,Hr as ye,Ht as be,I as xe,Ii as Se,In as Ce,Ir as we,It as Te,J as Ee,Ji as De,Jn as Oe,Jr as ke,Jt as Ae,K as je,Ki as Me,Kn as Ne,Kr as Pe,Kt as Fe,L as Ie,Li as Le,Ln as Re,Lr as ze,Lt as Be,M as Ve,Mi as He,Mn as Ue,Mr as We,Mt as Ge,N as Ke,Ni as qe,Nn as Je,Nr as Ye,Nt as Xe,O as Ze,Oi as Qe,On as $e,Or as et,Ot as tt,P as nt,Pi as rt,Pn as it,Pr as at,Pt as ot,Q as st,Qi as ct,Qn as lt,Qr as ut,Qt as dt,R as ft,Ri as pt,Rn as mt,Rr as ht,Rt as gt,S as _t,Si as vt,Sn as yt,Sr as bt,St as xt,T as St,Ti as Ct,Tn as wt,Tr as Tt,Tt as Et,U as Dt,Ui as Ot,Un as kt,Ur as At,Ut as jt,V as Mt,Vi as Nt,Vn as Pt,Vr as Ft,Vt as It,W as Lt,Wi as Rt,Wn as zt,Wr as Bt,Wt as Vt,X as Ht,Xi as Ut,Xn as Wt,Xr as Gt,Xt as Kt,Y as qt,Yi as Jt,Yn as Yt,Yr as Xt,Yt as Zt,Z as Qt,Zi as $t,Zn as en,Zr as tn,Zt as nn,_ as rn,_a as an,_i as on,_n as sn,_r as cn,_t as ln,a as un,aa as dn,ai as fn,an as pn,ar as mn,at as hn,b as gn,bi as _n,bn as vn,br as yn,bt as bn,c as xn,ci as Sn,cn as Cn,cr as wn,ct as Tn,d as En,di as Dn,dn as On,dr as kn,dt as An,ea as jn,ei as Mn,en as Nn,er as Pn,et as Fn,f as In,fi as Ln,fn as Rn,fr as zn,ft as Bn,g as Vn,gi as Hn,gn as Un,gr as Wn,gt as Gn,h as Kn,hi as qn,hn as Jn,hr as Yn,ht as Xn,i as Zn,ia as Qn,ii as $n,in as er,ir as tr,it as nr,j as rr,ji as ir,jn as ar,jr as or,jt as sr,k as cr,ki as lr,kn as ur,kr as dr,kt as fr,l as pr,li as mr,ln as hr,lr as gr,lt as _r,m as vr,mi as yr,mn as br,mr as xr,mt as Sr,n as Cr,na as wr,ni as Tr,nn as Er,nr as Dr,nt as Or,o as kr,oi as Ar,on as jr,or as Mr,ot as Nr,p as Pr,pi as Fr,pn as Ir,pr as Lr,pt as Rr,q as zr,qi as Br,qn as Vr,qr as Hr,qt as Ur,r as Wr,ra as Gr,ri as Kr,rn as qr,rr as Jr,rt as Yr,s as Xr,si as Zr,sn as Qr,sr as $r,st as ei,t as ti,ta as ni,ti as ri,tn as ii,tr as ai,tt as oi,u as si,ui as ci,un as li,ur as ui,ut as di,v as fi,va as pi,vi as mi,vn as hi,vr as gi,vt as _i,w as vi,wi as yi,wn as bi,wr as xi,wt as Si,x as Ci,xi as wi,xn as Ti,xr as Ei,xt as Di,y as Oi,yi as ki,yn as Ai,yr as ji,yt as Mi,z as Ni,zi as Pi,zn as Fi,zr as Ii,zt as Li}from"./dist-BXlA66Rv.mjs";export{ti as AGENT_ID_MAX_LEN,Cr as AGENT_ID_RE,Wr as AGENT_WRITE_ORIGIN,Zn as AgentFocusBroadcaster,un as AgentPresenceBroadcaster,kr as AgentSessionCapacityError,Xr as AgentSessionManager,xn as AutoStartDisabledError,pr as BUNDLE_IDS,si as BUNDLE_SCOPE,En as BUNDLE_SKILL_NAME,In as BacklinkIndex,Pr as CC1Broadcaster,i as CC1_CONTRACT_VERSION,vr as CONFIG_FILENAME,Kn as CONFLICT_MARKER_RE,Vn as CURSOR_BUNDLE_PATHS_BY_PLATFORM,rn as ConfigSchema,fi as DEFAULT_CHECKPOINT_RETENTION,Oi as DEFAULT_EMBEDDINGS_DIMENSIONS,gn as DEFAULT_PACK_ID,Ci as EMBEDDINGS_API_KEY_ENV,_t as FILE_SYSTEM_WRITER,G as FILE_WATCHER_ORIGIN,vi as FileEmbeddingsBackend,St as GIT_PREFLIGHT_FAIL_SPAN_NAME,te as GIT_UPSTREAM_WRITER,an as GitDirAccessError,X as GitNotAvailableError,Ze as GitTooOldError,cr as HOCUSPOCUS_AUTH_REJECTION_REASONS,F as HocuspocusAuthRejection,rr as HocuspocusAuthTokenSchema,Ve as INSTALLED_AGENTS_SCHEMES,t as LINEAGE_EPOCH_KEY,Ke as LIVE_DERIVED_INDEX_DEBOUNCE_MS,nt as LOG_MD_TEMPLATE,oe as MANAGED_RENAME_ORIGIN,xe as MAX_AGENT_SESSIONS,Ie as MCP_CONNECTION_ID_HEADER,s as MCP_SERVER_NAME,ft as MIN_GIT_VERSION,Ni as MISSING_OK_CONFIG_MESSAGE,pi as MalformedGitPointerError,B as McpLogger,Mt as MissingOkConfigError,ge as OBSERVER_SYNC_ORIGIN,Dt as OK_OKIGNORE_TEMPLATE,D as ORPHAN_MODES,m as PROTOCOL_VERSION,Lt as PinoLogger,T as ProcessLockCollisionError,de as ProjectGitInitError,je as ROLLBACK_ORIGIN,zr as ROOT_GITIGNORE_TEMPLATE,b as RUNTIME_VERSION,Ee as SERVICE_WRITER,qt as SKILL_INSTALL_EVENTS_FILE_REL,_ as SKILL_STATE_TARGETS,Ht as STARTER_FOLDERS,Qt as STARTER_FOLDER_FRONTMATTER_FILENAME,st as STARTER_PACKS,A as STARTER_PACK_IDS,Fn as STARTER_TEMPLATES,oi as STATE_MANIFEST_FILENAME,C as STATE_SCHEMA_VERSION,r as SYSTEM_DOC_NAME,Or as SeedPrerequisiteError,Yr as SeedRootDirError,g as ServerLockCollisionError,nr as SingleFileNotAFileError,hn as SingleFileNotFoundError,Nr as SingleFileNotMarkdownError,ei as StateManifestError,Tn as TagIndex,_r as USER_GLOBAL_BUNDLE_IDS,di as UiLockCollisionError,An as __getShowAllWalkStatsForTesting,Bn as __resetShowAllWalkStatsForTesting,o as acquireProcessLock,x as acquireServerLock,Rr as acquireUiLock,Sr as applyAgentMarkdownWrite,Xn as applyExternalChange,Gn as applySeed,ln as assertCompatibleStateManifest,_i as assertGitAvailable,Mi as assertNeverDiskEvent,bn as attachIdleShutdown,Di as bootServer,xt as buildAndOpenSkill,Y as buildConfigYmlContent,Si as buildExecResult,Et as buildSkillZip,ae as buildStarterFolderFrontmatterYaml,ee as buildWipTree,tt as bundleSkillMdPath,fr as classifyEvents,z as classifyFsPath,sr as clearContributors,Ge as clearEmbeddingsKeyFromAllBackends,Xe as coercePackId,d as colorFromSeed,ot as commitUpstreamImport,ue as commitWip,Te as commitWipFromTree,Be as compareSemver,gt as containsConflictMarkers,Li as contentHash,W as contributorCount,It as countShadowObjects,be as countStaleAgentWipRefs,jt as countWipRefs,Vt as createApiExtension,he as createAssetServeMiddleware,Fe as createContentFilter,Ur as createContentFilterAsync,Ae as createEmbeddingsSecretStore,Zt as createEphemeralProjectDir,Kt as createExternalChangeHandler,nn as createFileLogger,dt as createLiveDerivedIndexExtension,P as createMcpHttpHandler,Nn as createOsProbe,ii as createPersistenceExtension,Er as createServer,qr as createServerObserverExtension,er as createStreamingErrorWriter,pn as createTestLogger,jr as describeStoredEmbeddingsKey,Qr as detectClaudeDesktopPresence,Cn as detectGit,hr as detectProjectShape,li as discoverLockDirs,On as emitPreflightFailureSpan,Rn as encodeDocName,Ir as encodeFolderRoute,br as encodeSkillRoute,Jn as ensureProjectGit,Un as errorResponse,sn as evictStaleTrackerEntries,hi as extractOkBinaryPath,Ai as extractWikiLinksFromMarkdown,vn as fallbackPaths,Ti as findEnclosingGitRoot,yt as findEnclosingProjectRoot,q as flushFileLogger,bi as formatAuthRejectionWire,wt as formatContributors,re as formatContributorsFrom,Q as formatPackRationale,$e as gcCheckpointRefs,ur as getCurrentMcpLogger,L as getLocalDir,ar as getLogFilePath,Ue as getLogger,Je as getLogsDir,w as getMachineId,it as getMeter,ce as getMetrics,Ce as getTracer,Re as handleCollabSocketError,mt as handleSpawnCursor,Fi as hasGcLogLatch,e as iconFromClientName,H as incrementCollabSocketFilteredError,Pt as incrementServerObserverFire,ve as initContent,kt as initShadowRepo,zt as initTelemetry,pe as initToleranceTelemetryWriter,Ne as installPrettyZodErrors,Vr as installTestLoggers,Oe as installUserSkill,Yt as isAllowedApiOrigin,Wt as isAllowedWorkspaceHostHeader,en as isConfigDoc,lt as isHocuspocusAuthRejectionReason,M as isKnownPackId,Pn as isLinkIndexExcludedDoc,ai as isLoopbackAddress,Dr as isManagedArtifactDoc,n as isOrphanMode,Jr as isPairedWriteOrigin,tr as isPathWithinDir,l as isProcessAlive,mn as isProjectRoot,Mr as isProjectSkillManaged,$r as isReservedForUserTree,wn as isSelfWrite,gr as isSystemDoc,ui as isToleranceTelemetryEnabled,v as isValidLockPid,kn as lastKnownHash,zn as listRescueCheckpoints,Lr as listStarterPacks,xr as loadPrincipal,E as lockFilePath,Yn as loggerFactory,Wn as logsCurrentPath,cn as logsPreviousPath,gi as makeLazyEmbeddingsKeyStore,f as markServerLockDraining,ji as mountMcpAndApi,yn as normalizeFsPath,Ei as packageVersionMajorMinor,bt as parseAuthRejectionWire,J as parseGitVersion,xi as parseHocuspocusAuthToken,Tt as parseKeepaliveConnectionId,ie as pathToDocName,$ as planSeed,et as prepareSingleFileOpen,dr as processCommand,R as processUsage,or as readAllTargets,We as readBranchFromHead,Ye as readBundleDecision,S as readProcessLock,y as readProcessLockDetailed,at as readProjectLocalSemanticConfig,h as readServerLock,le as readServerPackageVersion,we as readSkillInstallStateSnapshot,ze as readSkillManagement,ht as readStateManifest,Ii as readTargetRecordedAt,U as readTargetVersion,Ft as readUiLock,ye as reconcile,At as recordContributor,Bt as recordSkillInstallEvent,me as registerAllTools,Pe as registerWrite,p as releaseProcessLock,a as releaseServerLock,Hr as releaseUiLock,ke as removeLastKnownHash,Xt as resetMetrics,u as resolveBundleEnabled,Gt as resolveBundledSkillDir,tn as resolveContentDir,ut as resolveCursorBinaryDefault,N as resolveCursorSpawnInvocation,Mn as resolveLockDir,ri as resolvePack,Tr as resolvePackageVersion,Kr as resolveUiInfo,$n as restoreContributors,fn as restoreLifecycleFromConflictsJson,Ar as rewriteMarkdownLinksForDocumentRename,Zr as rewriteWikiLinksForDocumentRename,Sn as runAuthReposSubprocess,mr as runAuthStatusSubprocess,ci as runCloneSubprocess,Dn as runDeviceFlowSubprocess,Ln as runWithMcpLogger,Fr as safeContentPath,yr as safeSubdir,qn as safetyCheckpoint,Hn as sanitizeClientName,on as saveInMemoryCheckpoint,mi as saveVersion,ki as seedBasenameIndex,_n as serializeError,wi as setActiveSpanAttributes,vt as setupServerObservers,K as shadowGit,yi as shutdownTelemetry,Ct as skillManagementPath,ne as spansCurrentPath,Z as spansPreviousPath,Qe as spawnDetached,lr as splitMarkdownBlocks,I as startWatcher,ir as streamingProblemEvent,He as swapContributors,qe as teardownToleranceTelemetryWriter,rt as toBroadcasterKey,se as tracedAppendFileSync,Se as tracedLinkSync,Le as tracedMkdir,pt as tracedMkdirSync,Pi as tracedRename,V as tracedRenameSync,Nt as tracedRmSync,_e as tracedRmdirSync,Ot as tracedUnlinkSync,Rt as tracedWriteFile,fe as tracedWriteFileSync,Me as updateLastKnownHash,O as updateProcessLockPort,k as updateServerLockPort,Br as updateUiLockPort,De as validateAgentId,Jt as validateCloneInputs,Ut as validateSkillZip,c as waitForServerLockDrain,$t as withHiddenWindowsConsole,ct as withSpan,j as withSpanSync,jn as writeBundleDecision,ni as writeRootGitignoreForNewRepo,wr as writeSkillManagement,Gr as writeStateManifest,Qn as writeTargetVersion,dn as writeTracker};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{Jo as e}from"./server-lock-iLcBw_q0-
|
|
1
|
+
import{Jo as e}from"./server-lock-iLcBw_q0-WEyo7ukm.mjs";import{execFileSync as t}from"node:child_process";import{dirname as n,join as r}from"node:path";import{homedir as i}from"node:os";import{existsSync as a,mkdirSync as o,readFileSync as s,writeFileSync as c}from"node:fs";var l=e();const u=`open-knowledge`;function d(e){try{e()}catch{}}var f=class{backend=`keyring`;constructor(e){this.onKeychainRead=e}async get(e){let{Entry:t}=await import(`@napi-rs/keyring`),n;try{n=new t(u,e).getPassword()}catch(t){return d(()=>this.onKeychainRead?.({kind:`read-error`,host:e,error:t instanceof Error?t.name:`unknown`})),null}if(n==null)return d(()=>this.onKeychainRead?.({kind:`absent`,host:e})),null;try{return JSON.parse(n)}catch{return d(()=>this.onKeychainRead?.({kind:`corrupt-entry`,host:e,error:`corrupt-entry`})),null}}async set(e,t,n,r){let{Entry:i}=await import(`@napi-rs/keyring`),a=new i(u,e),o={login:t,token:n,...r};a.setPassword(JSON.stringify(o))}async clear(e){let{Entry:t}=await import(`@napi-rs/keyring`);try{new t(u,e).deletePassword()}catch{}}},p=class{backend=`file`;authFile;constructor(e){this.authFile=e??r(i(),`.ok`,`auth.yml`)}read(){if(!a(this.authFile))return{};try{return(0,l.parse)(s(this.authFile,`utf-8`))??{}}catch(e){let t=e instanceof Error?e.message:`unknown error`;return process.stderr.write(`[auth] Failed to parse ${this.authFile}: ${t}. Starting with empty credentials.\n`),{}}}write(e){let t=n(this.authFile);a(t)||o(t,{recursive:!0,mode:448}),c(this.authFile,(0,l.stringify)(e),{mode:384})}async get(e){return this.read()[e]??null}async set(e,t,n,r){let i=this.read();i[e]={login:t,token:n,...r},this.write(i)}async clear(e){let t=this.read();delete t[e],this.write(t)}},m=class{backend=`keyring`;constructor(e,t){this.keychain=e,this.file=t}async get(e){let t=await this.keychain.get(e);if(t!=null)return t;let n=await this.file.get(e);if(n==null)return null;try{await this.keychain.set(e,n.login,n.token,{gitProtocol:n.gitProtocol,name:n.name,email:n.email}),await this.file.clear(e),process.stderr.write(`[auth] migrated ${e} credential from ~/.ok/auth.yml to the OS keychain\n`)}catch{}return n}set(e,t,n,r){return this.keychain.set(e,t,n,r)}async clear(e){await this.keychain.clear(e),await this.file.get(e)!=null&&await this.file.clear(e)}};async function h(e,t){try{let{Entry:n}=await import(`@napi-rs/keyring`);return new n(u,`__probe__`),process.stderr.write(`[auth] token storage: OS keychain
|
|
2
2
|
`),d(()=>t?.onBackendSelected?.({backend:`keyring`})),new m(new f(t?.onKeychainRead),new p(e))}catch(n){let r=n instanceof Error?`${n.name}: ${n.message}`:String(n);return process.stderr.write(`[auth] token storage: file (~/.ok/auth.yml) — OS keychain unavailable: ${r}\n`),d(()=>t?.onBackendSelected?.({backend:`file`,reason:r})),new p(e)}}function g(e){let t=null;return function(){if(t)return t;let n=2e3;return t=(async()=>{let t=null,r=new Promise(r=>{t=setTimeout(()=>{process.stderr.write(`[auth] token storage: keyring init exceeded ${n}ms; falling back to file (~/.ok/auth.yml)\n`),r(new p(e))},n)});try{return await Promise.race([h(e),r])}catch{return new p(e)}finally{t!==null&&clearTimeout(t)}})(),t}}function _(e){let t=g(e);return{async get(e){let n=await(await t()).get(e);return n===null?null:{token:n.token}}}}function v(e){let t=g(e);return{backend:`file`,async get(e){return(await t()).get(e)},async set(e,n,r,i){return(await t()).set(e,n,r,i)},async clear(e){return(await t()).clear(e)}}}async function y(e,t){let n=[],r=new p(t);await r.get(e)!=null&&(await r.clear(e),n.push(`file`));let i;try{let{Entry:t}=await import(`@napi-rs/keyring`);new t(u,`__probe__`);let r,a=await new f(e=>{e.kind===`read-error`&&(r=e.error??`read-error`)}).get(e);if(r!==void 0)i=r;else if(a!=null)try{new t(u,e).deletePassword(),n.push(`keychain`)}catch(e){i=e instanceof Error?e.name:`delete-error`}}catch{}return{touched:n,keychainError:i}}const b=[`/opt/homebrew/bin/gh`,`/usr/local/bin/gh`,`/opt/local/bin/gh`,`/snap/bin/gh`,`/usr/bin/gh`],x={encoding:`utf-8`,stdio:[`ignore`,`pipe`,`pipe`],timeout:5e3,windowsHide:!0};function S(e,n={}){let r=n._exec??t,i=n._fileExists??a,o=[`auth`,`token`,...e?[`--hostname`,e]:[]],s=[`gh`,...b.filter(i)];for(let e of s)try{let t=r(e,o,x).toString().trim();if(t.length>0)return{available:!0,token:t}}catch{}return{available:!1}}export{v as a,_ as i,y as n,h as r,S as t};
|
|
3
|
-
//# sourceMappingURL=gh-detect-
|
|
3
|
+
//# sourceMappingURL=gh-detect-BAop1ZEi.mjs.map
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,r as t,t as n}from"./gh-detect-
|
|
1
|
+
import{i as e,r as t,t as n}from"./gh-detect-BAop1ZEi.mjs";import{A as r,F as i,M as a,N as o,P as s,d as c,j as l,k as u,n as d,o as f,s as p,v as m,x as h,y as g}from"./init-D4BfioBb.mjs";import{_,b as v,d as y,f as b,i as x,l as S,m as C,n as w,r as T,t as E,u as D,v as O,y as k}from"./src-Okq2zd7b.mjs";import{_ as A,a as j,d as M,f as N,g as P,i as F,o as I,r as L,s as R,t as z,u as B,v as V}from"./write-project-skill-dxucK8PX.mjs";import{n as H}from"./loader-BxXL_zFb.mjs";import{n as U}from"./preview-D955wcsg.mjs";import{n as W,t as G}from"./mcp-migrate-event-CyH1VVyy.mjs";export{R as ALL_EDITOR_IDS,B as EDITOR_LABELS,M as EDITOR_TARGETS,N as HOSTS_WITH_USER_SKILL_DIR,d as LAUNCH_CONFIG_NAME,D as PATH_SHIM_BEGIN,y as PATH_SHIM_BLOCK_RE,b as PATH_SHIM_END,u as addOkPathsToGitExclude,z as assertProjectPathSafe,P as buildManagedServerEntry,T as buildMcpConfigDeclineEvent,G as buildMcpConfigMigrateEvent,f as classifyExistingMcpEntry,t as createTokenStore,n as detectGh,p as detectInstalledEditors,r as formatTrackedRemediation,l as getExcludedOkPaths,a as getOkArtifactPaths,A as isEntryUpToDate,V as isOwnManagedEntry,H as loadConfig,e as makeLazyProbeTokenStore,_ as parseGitHubBlobUrl,O as parseGitHubShareUrl,k as parseGitHubTreeUrl,v as parseGitUrl,C as pathInstallMarkerPath,U as previewContent,o as probeTrackedOkPaths,c as readExistingMcpEntry,s as readSharingMode,i as removeOkPathsFromGitExclude,S as removeOwnMcpEntry,L as removeProjectSkill,j as removeUserGlobalSkillBundle,h as resolveProjectRoot,x as runStop,W as truncatePriorEntry,I as userGlobalSkillBundleTargets,w as validateLocalFolderForShare,m as writeEditorMcpConfig,E as writeProjectAiIntegrations,F as writeProjectSkill,g as writeUserMcpConfigs};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as e}from"./init-D4BfioBb.mjs";export{e as runInit};
|