@inkeep/open-knowledge 0.35.1-beta.8 → 0.35.1-beta.9
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-rx2xsPC5.mjs +2 -0
- package/dist/index.d.mts +17 -17
- package/dist/index.mjs +1 -1
- package/dist/init-Bei6hvcu.mjs +1 -0
- package/dist/{init-WZEK9utJ.mjs → init-D0aMPn3q.mjs} +3 -3
- package/dist/{launch-json-removal-DkMW0R0R.mjs → launch-json-removal-BFoEXgrV.mjs} +2 -2
- package/dist/loader-BhQGz5q5.mjs +1 -0
- package/dist/{loader-DqAZBnhp.mjs → loader-ymMOqJ4G.mjs} +2 -2
- package/dist/{open-browser-evOiSXMq.mjs → open-browser-hDKVLhdi.mjs} +2 -2
- package/dist/preview-BBKZ9rl9.mjs +1 -0
- package/dist/{preview-DipvVs80.mjs → preview-C40R8NHt.mjs} +2 -2
- package/dist/public/assets/{ActivityModeContent-V_zAw2Cp.js → ActivityModeContent-FexHGqMd.js} +1 -1
- package/dist/public/assets/{AgentDiffPane-CVTl1yHd.js → AgentDiffPane-Dcf2DUzT.js} +1 -1
- package/dist/public/assets/CodeMirrorPropInput-CWbhbvpr.js +3 -0
- package/dist/public/assets/{DocumentContext-DdPNvhCs.js → DocumentContext-O0A-tcJv.js} +10 -10
- package/dist/public/assets/{EnableSyncConfirmDialog-YbXwL0lV.js → EnableSyncConfirmDialog-N6XcDLKE.js} +1 -1
- package/dist/public/assets/{GraphPanel-C_f_Xd2V.js → GraphPanel-BqPMq7aw.js} +1 -1
- package/dist/public/assets/ManagedArtifactProperties-DCcQ10r7.js +1 -0
- package/dist/public/assets/{McpConsentDialogBody-DWMKC7U_.js → McpConsentDialogBody-BEhEYVhf.js} +1 -1
- package/dist/public/assets/{MermaidDocEditor-ChTa4qji.js → MermaidDocEditor-D1Zoh82_.js} +1 -1
- package/dist/public/assets/PropertyPanel-BnoEwA0Y.js +2 -0
- package/dist/public/assets/{ReportBugDialogBody-DO-LsEqg.js → ReportBugDialogBody-WNYejKs4.js} +1 -1
- package/dist/public/assets/SettingsDialogBody-kYDS3O-Q.js +7 -0
- package/dist/public/assets/{ShareBranchSwitchDialog-CtWDd4RN.js → ShareBranchSwitchDialog-BdrVo8_D.js} +1 -1
- package/dist/public/assets/{ShareReceiveDialog-DHN60dEn.js → ShareReceiveDialog-Hvt2MZBo.js} +1 -1
- package/dist/public/assets/{ShareReceiveMissDialog-BPZPyDcg.js → ShareReceiveMissDialog-DgBQa7QK.js} +1 -1
- package/dist/public/assets/{SkillEditorActions-D0qSUb6F.js → SkillEditorActions-C0gxnHUB.js} +1 -1
- package/dist/public/assets/{SourceEditor-CiiGGjlz.js → SourceEditor-Cp2KKJVb.js} +1 -1
- package/dist/public/assets/{TerminalPanel-DipsMDbQ.js → TerminalPanel-Ch4_Ef5u.js} +3 -3
- package/dist/public/assets/{TimelineDiffPane-CCoQyhfx.js → TimelineDiffPane-Bs3d6DMI.js} +1 -1
- package/dist/public/assets/{agent-presence-DB_yc77e.js → agent-presence-YrdogQa3.js} +1 -1
- package/dist/public/assets/auth-state-cache-B5AqPHGa.js +11 -0
- package/dist/public/assets/{config-provider-TXwl7IKA.js → config-provider-gBTyVVxO.js} +4 -4
- package/dist/public/assets/{dist-DAFoMRai.js → dist-BkuNSvgE.js} +1 -1
- package/dist/public/assets/{dist-D--vIb9_.js → dist-DEmM8o04.js} +160 -160
- package/dist/public/assets/{doc-hash-BNPgzBjA.js → doc-hash-DBnfNiP9.js} +1 -1
- package/dist/public/assets/{documents-events-BOt1_9Hf.js → documents-events-Ynxz3YVq.js} +1 -1
- package/dist/public/assets/{file-tree-adapter-C2NHvUNc.js → file-tree-adapter-z-igJkOj.js} +1 -1
- package/dist/public/assets/index-CDLDmELK.js +1995 -0
- package/dist/public/assets/index-Dpd8B4Mp.css +1 -0
- package/dist/public/assets/{lint-config-client-DfHR5qma.js → lint-config-client-DPZxzs8Q.js} +1 -1
- package/dist/public/assets/{navigation-targets-Dp0ljlND.js → navigation-targets-Bi-igYug.js} +1 -1
- package/dist/public/assets/{open-managed-artifact-tab-SLDmUABC.js → open-managed-artifact-tab-n_ttWe3q.js} +1 -1
- package/dist/public/assets/{pending-receive-nav-store-DjOWVQpM.js → pending-receive-nav-store-B2epkYbV.js} +1 -1
- package/dist/public/assets/{prop-types-D27bl_X-.js → prop-types-uamYPR-P.js} +1 -1
- package/dist/public/assets/{receive-store-CqCttQos.js → receive-store-Cfx8Fm1O.js} +1 -1
- package/dist/public/assets/{selection-context-VCaFOVcH.js → selection-context-BZ0vDvOZ.js} +1 -1
- package/dist/public/assets/{skill-actions-2X4vusgg.js → skill-actions-Bo5y4Jmv.js} +1 -1
- package/dist/public/assets/{skills-api-Zn9HHSnp.js → skills-api-_7OVhd1o.js} +1 -1
- package/dist/public/assets/{src-DOsxfOd0.js → src-BLjGyHA1.js} +1 -1
- package/dist/public/assets/{target-navigation-intent-gXTtsPCh.js → target-navigation-intent-D32NU0VH.js} +1 -1
- package/dist/public/assets/{typing-burst-detector-xnXm4fKL.js → typing-burst-detector-DZPDaaHu.js} +1 -1
- package/dist/public/assets/{use-activity-panel-Bw3nEPtk.js → use-activity-panel-CsmAywD8.js} +1 -1
- package/dist/public/assets/{use-apply-config-color-theme-B7VneWrH.js → use-apply-config-color-theme-DIFwGHaM.js} +2 -2
- package/dist/public/assets/{use-timeline-entry-diff-BlAVrAam.js → use-timeline-entry-diff-BpeNmjL3.js} +4 -4
- package/dist/public/assets/{workspace-paths-DFIcBLaH.js → workspace-paths-DeyKDDDU.js} +1 -1
- package/dist/public/index.html +27 -27
- package/dist/{repair-launch-json-QkUwumCw.mjs → repair-launch-json-BzaW_t7r.mjs} +2 -2
- package/dist/{repair-mcp-configs-OedQlL6h.mjs → repair-mcp-configs-yho_lu_J.mjs} +2 -2
- package/dist/{repair-skills-BtyTNmva.mjs → repair-skills-50Uzl9Et.mjs} +2 -2
- package/dist/repair-skills-RJeC7Jd-.mjs +1 -0
- package/dist/{src-BmQ95pzm.mjs → src-DYZflqdx.mjs} +1 -1
- package/dist/{src-B8RZXrGO.mjs → src-DkZfCRv7.mjs} +2 -2
- package/dist/{src-lKxysm2m.mjs → src-_5Jz5f0v.mjs} +2 -2
- package/dist/start-BEzh4O4Y.mjs +1 -0
- package/dist/{start-Dx2HSrjw.mjs → start-CA11ql1Y.mjs} +2 -2
- package/dist/{write-project-skill-BKZZvkVE.mjs → write-project-skill-DFZwle9U.mjs} +2 -2
- package/package.json +4 -4
- package/dist/constants-D6DS6fsP.mjs +0 -2
- package/dist/init-Dqbcvqq4.mjs +0 -1
- package/dist/loader-Dw9TpNUA.mjs +0 -1
- package/dist/preview-j-ym5Lce.mjs +0 -1
- package/dist/public/assets/CodeMirrorPropInput-BbZYh8z8.js +0 -3
- package/dist/public/assets/ManagedArtifactProperties-DlJgeeBW.js +0 -1
- package/dist/public/assets/PropertyPanel-CGrfp7KX.js +0 -2
- package/dist/public/assets/SettingsDialogBody-Dqdq8UCp.js +0 -7
- package/dist/public/assets/auth-state-cache-Bm2yGEzY.js +0 -11
- package/dist/public/assets/index-C3iemlkC.css +0 -1
- package/dist/public/assets/index-Dqu53vRM.js +0 -1995
- package/dist/repair-skills-B6wKeiXV.mjs +0 -1
- package/dist/start-cUNS6Qd1.mjs +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as e}from"./chunk-DTipWd-i.mjs";import{F as t,Jo as n,P as r}from"./src-S2yxN8_s.mjs";import{Mr as i,Tr as a,et as o,fa as s,la as c,nn as l,nt as u,rt as d,tt as f}from"./src-
|
|
1
|
+
import{o as e}from"./chunk-DTipWd-i.mjs";import{F as t,Jo as n,P as r}from"./src-S2yxN8_s.mjs";import{Mr as i,Tr as a,et as o,fa as s,la as c,nn as l,nt as u,rt as d,tt as f}from"./src-_5Jz5f0v.mjs";import{b as p,u as m,v as h,y as g}from"./server-lock-CTGMwZRP.mjs";import{t as _}from"./yazl-BucAN8Ez.mjs";import{t as v}from"./esm-EvSEzE_V.mjs";import"./gh-detect-Cdvn1Wl3.mjs";import{E as y,S as b,T as x,_ as ee,b as S,o as C,v as te,w}from"./init-D0aMPn3q.mjs";import{n as T}from"./constants-rx2xsPC5.mjs";import{t as E}from"./is-object-DYBErO9v.mjs";import{_ as ne,d as re,i as D,v as ie}from"./write-project-skill-DFZwle9U.mjs";import"./loader-ymMOqJ4G.mjs";import{c as ae}from"./colors-B_qgKwrk.mjs";import"./preview-C40R8NHt.mjs";import{execSync as oe,spawnSync as O}from"node:child_process";import{basename as k,dirname as A,isAbsolute as j,join as M,relative as N,resolve as P,sep as se}from"node:path";import{cpSync as ce,createWriteStream as le,existsSync as F,lstatSync as ue,mkdirSync as I,mkdtempSync as de,readFileSync as L,readdirSync as R,readlinkSync as fe,rmSync as pe,statSync as me,writeFileSync as z}from"node:fs";import{arch as he,freemem as ge,homedir as _e,hostname as ve,platform as ye,release as be,tmpdir as xe,totalmem as Se,type as Ce,uptime as we}from"node:os";import{readFile as B,realpath as V}from"node:fs/promises";import{createHash as H}from"node:crypto";const Te=[{name:`macos-home-path`,regex:/\/Users\/[^/]+\//g,replacement:`~/`},{name:`linux-home-path`,regex:/\/home\/[^/]+\//g,replacement:`~/`},{name:`github-pat`,regex:/\b(ghp_|gho_|ghu_|ghs_|ghr_)[A-Za-z0-9]{36,}\b/g,replacement:`[REDACTED-GH-PAT]`},{name:`aws-access-key`,regex:/\b(AKIA|ASIA|ABIA)[A-Z2-7]{16}\b/g,replacement:`[REDACTED-AWS-KEY]`},{name:`anthropic-key`,regex:/\bsk-ant-api03-[A-Za-z0-9_-]{20,}\b/g,replacement:`[REDACTED-ANTHROPIC]`},{name:`openai-key`,regex:/\bsk-[A-Za-z0-9]{20,}\b/g,replacement:`[REDACTED-OPENAI]`},{name:`bearer-token`,regex:/([Aa]uthorization:\s*[Bb]earer\s+)\S+/g,replacement:`$1[REDACTED]`},{name:`jwt`,regex:/eyJ[A-Za-z0-9_-]{8,}\.eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g,replacement:`[REDACTED-JWT]`},{name:`url-credentials`,regex:/:\/\/[^/\s:@]+:[^/\s:@]+@/g,replacement:`://[REDACTED]@`}],Ee=Te.map(e=>e.name);function U(e){let t=new Set,n=0;return{redacted:e.split(`
|
|
2
2
|
`).map(e=>{let r=e;for(let{name:e,regex:i,replacement:a}of Te)i.lastIndex=0,i.test(r)&&(t.add(e),n++,i.lastIndex=0,r=r.replace(i,a));return r}).join(`
|
|
3
3
|
`),patterns:[...t],lineCount:n}}function De(){return M(_e(),`.ok`,`bug-reports`)}function Oe(e=new Date){let t=e.toISOString().replace(/[:.]/g,`-`);return M(De(),`${t}-bugreport.zip`)}function ke(e,t){let n=M(e,`.ok`,`config.yml`);if(F(n))try{let e=L(n,`utf8`).match(/^\s*name:\s*['"]?(.+?)['"]?\s*$/m);if(e?.[1])return e[1]}catch(e){t?.warn({configPath:n,err:e instanceof Error?e.message:String(e)},`bug-report: failed to read .ok/config.yml for project slug; using path-hash fallback`)}return F(M(e,`.ok`))?H(`sha256`).update(P(e)).digest(`hex`).slice(0,12):null}function Ae(){let e={timestamp:new Date().toISOString(),platform:ye(),osType:Ce(),osRelease:be(),hostname:`[redacted]`,uptime:we(),freeMem:ge(),totalMem:Se(),nodeVersion:process.version,bunVersion:process.versions.bun??null,v8Version:process.versions.v8??null,pid:process.pid};try{e.macosVersion=oe(`sw_vers -productVersion 2>/dev/null`,i({encoding:`utf8`})).trim()}catch{}try{let t=M(__dirname,`..`,`..`,`package.json`);F(t)&&(e.okVersion=JSON.parse(L(t,`utf8`)).version)}catch{}return e}function je(e,t){if(!F(t))return{files:[]};let n=R(t).filter(e=>e.endsWith(`.log`)||/\.log\.\d+$/.test(e)).map(e=>M(t,e));if(e&&n.length>0){let t=n.filter(t=>{try{return L(t,`utf8`).includes(`"project":"${e}"`)}catch{return!0}});t.length>0&&(n=t)}return{files:n}}function Me(e){let t=M(e,`.ok`,`local`);return F(t)?{files:[`server.lock`,`last-spawn-error.log`,r].map(e=>M(t,e)).filter(e=>F(e))}:{files:[]}}function Ne(e){let t=M(e,`.ok`,`local`,`logs`);return F(t)?{files:[`server-current.jsonl`,`server-prev.jsonl`].map(e=>M(t,e)).filter(e=>F(e))}:{files:[]}}function Pe(e){if(e.redact){let{redacted:t,patterns:n,lineCount:r}=U(e.content);e.zipfile.addBuffer(Buffer.from(t,`utf8`),e.name),e.bundleFiles.push(e.name),n.length>0&&e.redactions.push({file:e.name,lineCount:r,patterns:n})}else e.zipfile.addBuffer(Buffer.from(e.content,`utf8`),e.name),e.bundleFiles.push(e.name)}function W(e){for(let t of e.files)try{Pe({zipfile:e.zipfile,name:`${e.prefix}/${k(t)}`,content:L(t,`utf8`),redact:e.redact,bundleFiles:e.bundleFiles,redactions:e.redactions})}catch(n){e.logger?.warn({file:t,prefix:e.prefix,err:n instanceof Error?n.message:String(n)},`bug-report: skipped unreadable file`)}}async function Fe(t){let{redact:n,outputPath:r,logger:i}=t,a=t.userLogsDir??M(_e(),`.ok`,`logs`),o=t.projectDir?ke(t.projectDir,i):null;I(A(r),{recursive:!0}),i?.info({projectSlug:o},`gathering diagnostic data`);let s=Ae();s.desktop=t.desktop??null;let{files:c}=je(o,a),{files:l}=t.projectDir?Me(t.projectDir):{files:[]},{files:u}=t.projectDir?Ne(t.projectDir):{files:[]};i?.info({logFileCount:c.length,lockFileCount:l.length,localSinkFileCount:u.length},`files collected`);let d=[],f=[],{ZipFile:p}=await import(`./yazl-DvlathRc.mjs`).then(t=>e(t.default,1)),m=new p;W({zipfile:m,files:c,prefix:`logs`,redact:n,bundleFiles:f,redactions:d,logger:i}),W({zipfile:m,files:l,prefix:`lockdir`,redact:n,bundleFiles:f,redactions:d,logger:i}),W({zipfile:m,files:u,prefix:`local-logs`,redact:n,bundleFiles:f,redactions:d,logger:i});for(let e of t.extraFiles??[])try{let t=L(e.sourcePath),n=`extra/${e.zipName??k(e.sourcePath)}`;m.addBuffer(t,n),f.push(n)}catch(t){i?.warn({sourcePath:e.sourcePath,err:t},`extra file unreadable; omitted from bundle`)}t.note&&Pe({zipfile:m,name:`note.txt`,content:t.note,redact:n,bundleFiles:f,redactions:d});let h=JSON.stringify(s,null,2);m.addBuffer(Buffer.from(h,`utf8`),`sysinfo.json`),f.push(`sysinfo.json`);let g={generatedAt:new Date().toISOString(),disciplineVersion:`1.0.0`,projectSlug:o,files:f,redactions:d,sysinfo:s};m.addBuffer(Buffer.from(JSON.stringify(g,null,2),`utf8`),`MANIFEST.json`);let _=d.reduce((e,t)=>e+t.lineCount,0),v=[`# Bug Report Bundle`,``,`Generated: ${g.generatedAt}`,`Project: ${o??`(unscoped)`}`,`Discipline version: ${g.disciplineVersion}`,``,`## Contents`,``,...f.map(e=>`- ${e}`),``,`## Privacy`,``,...n?[`This bundle was auto-redacted before packaging.`,`Patterns checked: ${Ee.join(`, `)}`,_>0?`${_} line(s) were scrubbed across ${d.length} file(s).`:`No redactions were needed.`,`See MANIFEST.json for the full redaction audit report.`,``,`This bundle is safe to attach to a GitHub issue.`]:[`Redaction was disabled for this bundle; file contents are unmodified.`]].join(`
|
|
4
4
|
`);m.addBuffer(Buffer.from(v,`utf8`),`README.md`),m.end();let y=le(r);return m.outputStream.pipe(y),await new Promise((e,t)=>{y.on(`close`,e),y.on(`error`,t)}),i?.info({bundlePath:r,fileCount:f.length,redactionCount:_},`bundle written`),{zipPath:r,summary:{projectSlug:o,files:f,redactions:d,redactedLineCount:_,generatedAt:g.generatedAt}}}var G=n(),Ie=e(_(),1);const Le=new Set([`doc.name`,`currentDoc`]);function Re(e){return`doc:${H(`sha256`).update(e).digest(`hex`).slice(0,8)}`}function ze(e,t,n){let r=e.docNameMap[n];if(r===void 0){e.docNameMap[n]=t;return}if(r===t)return;let i=e.docNameCollisions[n];i?i.includes(t)||i.push(t):e.docNameCollisions[n]=[t]}function Be(e,t){let n=t.originalToHashed.get(e);if(n!==void 0)return n;let r=Re(e);return t.originalToHashed.set(e,r),ze(t,e,r),r}function Ve(e,t){return t.length===0||!e.includes(t)?e:e.split(t).join(`<CONTENT_DIR>`)}function He(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function K(e,t){if(typeof e==`string`)return Ve(e,t.contentDir);if(Array.isArray(e))return e.map(e=>K(e,t));if(!He(e))return e;let n=typeof e.key==`string`&&Le.has(e.key)&&He(e.value)&&typeof e.value.stringValue==`string`?e.value.stringValue:null,r={};for(let[i,a]of Object.entries(e))if(n!==null&&i===`value`&&He(a)){let e=Be(n,t);r[i]={...a,stringValue:e}}else Le.has(i)&&typeof a==`string`?r[i]=Be(a,t):r[i]=K(a,t);return r}function Ue(e,t){if(t.originalToHashed.size===0)return e;let n=Array.from(t.originalToHashed.entries()).sort(([e],[t])=>t.length-e.length),r=e;for(let[e,t]of n)e.length!==0&&r.includes(e)&&(r=r.split(e).join(t));return r}function We(e,t){let n=L(e,`utf-8`);if(n.length===0)return;let r=n.endsWith(`
|
|
@@ -18,4 +18,4 @@ import{o as e}from"./chunk-DTipWd-i.mjs";import{F as t,Jo as n,P as r}from"./src
|
|
|
18
18
|
`).replace(/\n/g,`\r
|
|
19
19
|
`));let d=`${i?``:``}${u}`;return d!==r&&s(e,d,{mode:w(e)}),{kind:`removed`}}const Qt=new Set([`start`,`stop`,`status`,`clean`,`ui`,`mcp`,`preview`,`lint`,`deinit`,`auth`]);function $t(e,t,n=l){if(e!==void 0&&!Qt.has(e))return null;let r=n(t);return r===null||r.distance===0?null:r.rootPath}let en=null;function tn(e){en=e}function nn(){return en??process.cwd()}function rn(e){return e==null?!1:e.includes(`--type=utility`)&&e.includes(`--utility-sub-type=node.mojom.NodeService`)}function an(e,t=Date.now()){let n=new Date(e).getTime();if(Number.isNaN(n))return`—`;let r=t-n,i=Math.floor(r/1e3);if(i<60)return`${i}s`;let a=Math.floor(i/60);if(a<60)return`${a}m ago`;let o=Math.floor(a/60);return o<24?`${o}h ago`:`${Math.floor(o/24)}d ago`}function on(e,t,n,r,i,a){if(t.status===`missing`||t.status===`corrupt`)return null;let o=t.lock,s=null;if(n.status!==`missing`&&n.status!==`corrupt`){let e=n.lock;s={port:e.port,status:n.status,pid:e.pid,startedAt:e.startedAt,usage:a}}return{directory:o.worktreeRoot,server:{port:o.port,status:t.status,pid:o.pid,startedAt:o.startedAt,usage:i},ui:s,hostname:o.hostname,lockPath:t.lockPath,binary:r==null?null:f(r),command:r,isDesktop:rn(r)}}function sn(e){return e.ui==null?!1:e.ui.status===`alive`||e.ui.status===`foreign-host`}function Q(e){let t=e.server.status;return t===`alive`||t===`foreign-host`?e.isDesktop?`desktop`:t===`alive`?`running`:`foreign`:t===`dead-pid`&&sn(e)?`ui-orphan`:`stale`}const cn=new Set([`running`,`desktop`,`foreign`,`ui-orphan`]);function ln(e){switch(e){case`running`:return Z.default.green(e);case`desktop`:return Z.default.blue(e);case`foreign`:return Z.default.cyan(e);case`ui-orphan`:return Z.default.magenta(e);case`stale`:return Z.default.yellow(e)}}function un(e){return e==null?`—`:`${e.cpuPercent.toFixed(1)}% / ${e.memPercent.toFixed(1)}%`}function dn(e){return`${un(e.server.usage)} | ${un(e.ui?.usage??null)}`}function fn(e){return`${e.server.port===0?`(starting)`:String(e.server.port)} / ${e.ui==null||e.ui.status===`dead-pid`?`—`:String(e.ui.port)}`}function pn(e){if(e.length===0)return`No open-knowledge servers found.`;let t=[`DIRECTORY`,`PORTS (API/UI)`,`CPU/MEM (API | UI)`,`STATUS`,`PID`,`STARTED`,`BINARY`],n=e.map(e=>{let t=Q(e),n=t===`ui-orphan`&&e.ui!=null?e.ui.pid:e.server.pid;return[e.directory,fn(e),dn(e),t,String(n),an(e.server.startedAt),e.binary??`—`]}),r=t.length,i=t.map(e=>e.length);for(let e of n)for(let t=0;t<r;t++)i[t]=Math.max(i[t]??0,(e[t]??``).length);let a=t.map((e,t)=>e.padEnd(i[t]??0)).join(` `).trimEnd(),o=e.map((e,t)=>{let a=n[t]??[],o=[];for(let t=0;t<r;t++){let n=(a[t]??``).padEnd(i[t]??0);if(t===3){let r=a[t]??``;n=ln(Q(e))+` `.repeat(Math.max(0,(i[t]??0)-r.length))}o.push(n)}return o.join(` `).trimEnd()}),s=Z.default.dim(`To stop a server: ok stop <port|pid|directory|all>`);return[a,...o,``,s].join(`
|
|
20
20
|
`)}async function mn(e={}){let t=e.discover??o,n=e.inspect??X,r=e.log??(e=>console.log(e)),i=e.resolveCommand??u,a=e.resolveUsage??d,s=await t(),c=[];for(let e of s){let t=n(e,`server`),r=n(e,`ui`),o=on(e,t,r,t.status===`missing`||t.status===`corrupt`?null:i(t.lock.pid),t.status===`missing`||t.status===`corrupt`?null:a(t.lock.pid),r.status===`missing`||r.status===`corrupt`?null:a(r.lock.pid));o!=null&&c.push(o)}if(e.json){let e=c.map(e=>({...e,displayStatus:Q(e)}));r(JSON.stringify(e,null,2));return}r(pn(e.all?c:c.filter(e=>cn.has(Q(e)))))}function hn(){return new v(`ps`).description(`List all running open-knowledge servers`).argument(`[modifier]`,`"all" to include stale (dead-pid) entries`).option(`--all`,`Include stale (dead-pid) entries (foreign-host shows by default)`).option(`--json`,`Emit structured JSON (always includes all statuses)`).action(async(e,t)=>{await mn({all:t.all===!0||e===`all`,json:t.json===!0})})}function gn(e,t,n={}){let r=n.isAlive??g,i=[];for(let[n,a]of[[`server`,e],[`ui`,t]])(a.status===`alive`||a.status===`foreign-host`&&r(a.lock.pid))&&i.push({name:n,pid:a.lock.pid,port:a.lock.port});return{targets:i}}function _n(e){let t=e.inspect??(t=>X(e.lockDir,t)),n=e.kill??((e,t)=>process.kill(e,t)),r=e.log??(e=>console.log(e)),i=e.error??(e=>console.error(e)),a=gn(t(`server`),t(`ui`),{isAlive:e.isAlive});if(a.targets.length===0)return r(`No running open-knowledge processes.`),{stopped:[],failed:[],hadTargets:!1};let o=[],s=[];for(let e of a.targets)try{n(e.pid,`SIGTERM`),o.push(e)}catch(t){s.push({target:e,error:t instanceof Error?t.message:String(t)})}return o.length>0&&r(`Stopped: ${o.map(e=>`${e.name} (pid=${e.pid}, port=${e.port})`).join(`, `)}`),s.length>0&&i(`Failed to stop: ${s.map(({target:e,error:t})=>`${e.name} (pid=${e.pid}): ${t}`).join(`; `)}`),{stopped:o,failed:s,hadTargets:!0}}function $(e,t){return e.status===`alive`?!0:e.status===`foreign-host`?t(e.lock.pid):!1}async function vn(e,t=g){let n=await o(),r=null;for(let i of n){let n=X(i,`server`),a=X(i,`ui`);if($(n,t)&&n.lock.port===e||$(a,t)&&a.lock.port===e)return i;r===null&&($(n,t)&&n.lock.pid===e||$(a,t)&&a.lock.pid===e)&&(r=i)}return r}function yn(e){let t=_n({lockDir:e});return t.failed.length>0&&(process.exitCode=1),t}function bn(e){return new v(`stop`).description(`Stop open-knowledge server(s). With no argument: stops the server for the current directory. Pass a port number, a directory path, or "all" to target globally.`).argument(`[target...]`,`port number, directory path (spaces OK), or "all"`).action(async t=>{let n=t.length===0?void 0:t.join(` `);if(n===void 0){e();let t=_n({lockDir:a(process.cwd()),log:()=>{}});if(t.hadTargets){if(t.stopped.length>0){let e=t.stopped.map(e=>`${e.name} (pid=${e.pid}, port=${e.port})`).join(`, `);console.log(`Stopped: ${e}`)}t.failed.length>0&&(process.exitCode=1)}else await mn({});return}if(n===`all`){let e=await o();if(e.length===0){console.log(`No running open-knowledge servers found.`);return}let t=0;for(let n of e){let e=X(n,`server`),r=X(n,`ui`);!$(e,g)&&!$(r,g)||(yn(n),t++)}t===0&&console.log(`No running open-knowledge servers found.`);return}if(/^\d+$/.test(n)){let e=Number.parseInt(n,10),t=await vn(e);if(t===null){console.log(`No running open-knowledge server found with port or PID ${e}.`);return}yn(t);return}yn(a(P(nn(),n)))})}function xn(e){return{event:`mcp-config-decline`,scope:e.scope,surface:e.surface,editorId:e.editorId,reason:e.reason}}async function Sn(e,t){let n,r;try{n=await V(P(e)),r=await V(P(A(e)))}catch{return{kind:`not-git`}}if(!wn(n,r))return{kind:`symlink-escape`};let i=M(n,`.git`),a;try{a=me(i)}catch{return{kind:`not-git`}}let o;if(a.isDirectory()){let e;try{e=await V(i)}catch{return{kind:`not-git`}}if(!wn(e,n))return{kind:`symlink-escape`};o=e}else if(a.isFile()){let e;try{e=await B(i,`utf-8`)}catch{return{kind:`not-git`}}let t=/^gitdir:\s*(.+)$/m.exec(e.trim());if(!t)return{kind:`not-git`};let r=t[1].trim(),a=j(r)?r:P(n,r);try{o=await V(a)}catch{return{kind:`not-git`}}}else return{kind:`not-git`};let s=M(await Cn(o),`config`),c;try{c=await B(s,`utf-8`)}catch{return{kind:`not-git`}}let l=En(c);if(l===null)return{kind:`no-origin`};let u=Pt(l);if(u===null||u.hostname!==`github.com`)return{kind:`non-github`};let d=u.owner.toLowerCase()===t.owner.toLowerCase(),f=u.name.toLowerCase()===t.repo.toLowerCase();return!d||!f?{kind:`wrong-repo`,actualOwner:u.owner,actualRepo:u.name}:{kind:`ok`,gitRemoteUrl:`https://github.com/${u.owner}/${u.name}.git`}}async function Cn(e){let t;try{t=(await B(M(e,`commondir`),`utf-8`)).trim()}catch{return e}if(t.length===0)return e;let n=j(t)?t:P(e,t);try{return await V(n)}catch{return n}}function wn(e,t){if(e===t)return!0;let n=N(t,e);return n.length>0&&!n.startsWith(`..`)&&!j(n)}function Tn(e){let t=e.indexOf(`#`),n=e.indexOf(`;`),r=-1;return t>=0&&n>=0?r=Math.min(t,n):t>=0?r=t:n>=0&&(r=n),(r===-1?e:e.slice(0,r)).trim()}function En(e){let t=!1;for(let n of e.split(/\r?\n/)){let e=Tn(n);if(e.length===0)continue;if(e.startsWith(`[`)){t=/^\[\s*remote\s+["']origin["']\s*\]$/.test(e);continue}if(!t)continue;let r=/^url\s*=\s*(.+)$/.exec(e);if(r)return Dn(r[1])}return null}function Dn(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?t.slice(1,-1):t}const On=[{id:`mcp-config`,write(e,t,n){let r=e.projectConfigPath?.(t);if(!r)return{integration:`mcp-config`,editorId:e.id,action:`skipped-unsupported`};try{let i=te(e,t,n,void 0,r);return i.action===`written`||i.action===`overwritten`?{integration:`mcp-config`,editorId:e.id,action:i.action,path:i.configPath}:i.action===`failed`?{integration:`mcp-config`,editorId:e.id,action:`failed`,path:i.configPath,error:i.error??`unknown failure`}:i.action===`declined`?{integration:`mcp-config`,editorId:e.id,action:`declined`,path:i.configPath,...i.declineReason===void 0?{}:{reason:i.declineReason}}:{integration:`mcp-config`,editorId:e.id,action:`failed`,path:i.configPath,error:`unexpected project-scope action: ${i.action}`}}catch(t){return{integration:`mcp-config`,editorId:e.id,action:`failed`,path:r,error:t instanceof Error?t.message:String(t)}}}},{id:`project-skill`,write(e,t,n){try{let r=D(e,t,{home:n.home});return{integration:`project-skill`,editorId:e.id,action:r.action,...r.path?{path:r.path}:{},...r.error?{error:r.error}:{}}}catch(t){return{integration:`project-skill`,editorId:e.id,action:`failed`,error:t instanceof Error?t.message:String(t)}}}}];function kn(e,t,n={},r=On){let i=[];for(let a of t){let t=re[a];for(let a of r)i.push(a.write(t,e,n))}return i}function An(e,t,n={}){return{integrations:kn(e,t,n)}}export{Mt as C,U as D,Oe as E,X as S,kt as T,Wt as _,bn as a,It as b,tn as c,Rt as d,Bt as f,Ut as g,Vt as h,_n as i,$t as l,Gt as m,Sn as n,hn as o,zt as p,xn as r,nn as s,An as t,Jt as u,Ft as v,Ot as w,Pt as x,Lt as y};
|
|
21
|
-
//# sourceMappingURL=src-
|
|
21
|
+
//# sourceMappingURL=src-DkZfCRv7.mjs.map
|
|
@@ -1255,7 +1255,7 @@ tags: [lore, history]
|
|
|
1255
1255
|
`,t-1)),i=[e.indexOf(`.`,n),e.indexOf(`?`,n),e.indexOf(`!`,n),e.indexOf(`
|
|
1256
1256
|
`,n)].filter(e=>e>=0),a=r>=0?r+1:Math.max(0,t-60),o=i.length>0?Math.min(...i)+1:Math.min(e.length,n+60),s=a>0?`…`:``,c=o<e.length?`…`:``,l=MZ(e.slice(a,o));return l?`${s}${l}${c}`:null}function Fve(e){let t=/^\s{0,3}([`~]{3,})/.exec(e);if(!t)return null;let n=t[1],r=n[0];return r!=="`"&&r!==`~`?null:{char:r,length:n.length}}function Ive(e,t){let n=e.trimStart();if(e.length-n.length>3)return!1;let r=0;for(;n[r]===t.char;)r+=1;return r<t.length?!1:n.slice(r).trim().length===0}function Lve(e){let t=/^\s{0,3}(?:#{1,6}\s+|>\s+|(?:[-+*]|\d+[.)])\s+)/.exec(e);return t?t[0].length:0}function Rve(e,t){let n=0;for(;e[t+n]==="`";)n++;if(n===0)return null;let r=t+n,i=r;for(;i<e.length;){if(e[i]!=="`"){i+=1;continue}let t=0;for(;e[i+t]==="`";)t+=1;if(t===n)return{text:e.slice(r,i),nextIndex:i+n};i+=t}return{text:e.slice(t,r),nextIndex:r}}function zve(e,t){OZ.lastIndex=t;let n=OZ.exec(e);if(!n)return null;let r=n[1]??``,i=r.trim(),a=n[2]?.trim()||null,o=n[3]??null,s=o?.trim()||null;if(!i)return null;let c=s??i,l=s?o:r,u=s?n[0].lastIndexOf(o??``):2,d=l?.indexOf(c)??0;return{target:i,alias:s,anchor:a,label:c,labelStart:t+u+Math.max(d,0),nextIndex:t+n[0].length}}function Bve(e){return e.startsWith(`<`)&&e.endsWith(`>`)?e.slice(1,-1):e}function Vve(e,t){kZ.lastIndex=t;let n=kZ.exec(e);return n?{text:n[1]??``,href:Bve(n[2]??``),nextIndex:t+n[0].length}:null}function Hve(e,t){AZ.lastIndex=t;let n=AZ.exec(e);return n?{alt:n[1]??``,nextIndex:t+n[0].length}:null}function NZ(e){return!e||!Nve.test(e)}function Uve(e,t,n){return NZ(e[t-1])&&NZ(e[n])}function Wve(e){let t=[],n=new Set;for(let r of e.matchLabels){let e=r.trim();if(!e)continue;let i=e.toLocaleLowerCase();n.has(i)||(n.add(i),t.push({raw:e,lower:i,length:e.length}))}return t.sort((e,t)=>t.length===e.length?e.raw.localeCompare(t.raw):t.length-e.length)}function Gve(e,t){let n=e.toLocaleLowerCase(),r=[];for(let i of t){let t=0;for(;t<=n.length-i.length;){let a=n.indexOf(i.lower,t);if(a===-1)break;let o=a+i.length;Uve(e,a,o)&&r.push({start:a,end:o}),t=a+1}}r.sort((e,t)=>{if(e.start!==t.start)return e.start-t.start;let n=e.end-e.start,r=t.end-t.start;return r===n?e.end-t.end:r-n});let i=[],a=null;for(let e of r)a&&e.start<a.end||(i.push(e),a=e);return i}function PZ(e,t){let n=[];for(let r=0;r<t.length;r+=1)n.push(e+r);return n}function Kve(e,t){let n=e.trim();return n?n===t||zr(n)===t:!1}function qve(e,t,n,r,i){let a=``,o=[],s=``,c=[];function l(){s&&(o.push({flatStart:a.length,text:s,sourceOffsets:c}),a+=s,s=``,c=[])}function u(e,t){s+=e,c.push(t)}function d(e){l(),a+=e}function f(e,t){l(),e&&(o.push({flatStart:a.length,text:e,sourceOffsets:t}),a+=e)}let p=Lve(e);for(;p<e.length;){if(e[p]===`\\`&&p+1<e.length){u(e[p+1]??``,t+p+1),p+=2;continue}if(e[p]==="`"){let t=Rve(e,p);if(t){d(t.text),p=t.nextIndex;continue}}if(e[p]===`!`&&e[p+1]===`[`){let t=Hve(e,p);if(t){d(t.alt),p=t.nextIndex;continue}}if(e[p]===`[`&&e[p+1]===`[`){let n=zve(e,p);if(n){let e=n.label;Kve(n.target,r)?d(e):f(e,PZ(t+n.labelStart,e)),p=n.nextIndex;continue}}if(e[p]===`[`&&e[p-1]!==`!`){let i=Vve(e,p);if(i){Cn(i.href,n)?.docName===r?d(i.text):f(i.text,PZ(t+p+1,i.text)),p=i.nextIndex;continue}}u(e[p]??``,t+p),p+=1}l();let m=[];for(let e of o){let t=Gve(e.text,i);for(let n of t){let t=e.flatStart+n.start,r=e.flatStart+n.end,i=Pve(a,t,r)??e.text.slice(n.start,n.end),o=e.sourceOffsets[n.start];typeof o==`number`&&m.push({excerpt:i,offset:o})}}return m}function Jve(e,t,n,r){let{frontmatter:i,body:a}=Ft(e),o=i.length,s=[],c=null,l=0,u=0;for(;u<=a.length;){let e=a[u];if(!(u===a.length||e===`
|
|
1257
1257
|
`||e===`\r`)){u+=1;continue}let i=a.slice(l,u);if(c)Ive(i,c)&&(c=null);else{let e=Fve(i);e?c=e:s.push(...qve(i,o+l,t,n,r))}if(u===a.length)break;if(e===`\r`&&a[u+1]===`
|
|
1258
|
-
`){u+=2,l=u;continue}u+=1,l=u}return s}function Yve(e){return e.getText(`source`).toString()}async function FZ(e,t,n){let r=e.documents.get(t);if(r)try{return Yve(r)}catch(e){return DZ.warn({docName:t,err:e},`[suggest-links] Failed live serialization, falling back to live source text`),r.getText(`source`).toString()}return await Fs(n.canonicalPath,`utf-8`)}function Xve(e){return{docName:e.docName,title:e.title,aliases:e.aliases}}async function Zve(e){let{hocuspocus:t,fileIndex:n,docName:r,scanBudgetMs:i=500,now:a=()=>Date.now(),onComplete:o}=e,s=a(),c=n.get(r);if(!c)throw new jZ(r);let l=Mfe(await FZ(t,r,c),r),u=Wve(l),d=[...n.keys()].filter(e=>e!==r).sort((e,t)=>e.localeCompare(t)),f=new Map,p=!1;for(let e of d){if(a()-s>i){p=!0;break}let o=n.get(e);if(!o)continue;let c;try{c=await FZ(t,e,o)}catch(t){DZ.warn({docName:e,err:t},`[suggest-links] Failed to read source doc`);continue}let l=Jve(c,e,r,u).map(t=>({source:e,excerpt:t.excerpt,offset:t.offset}));l.length>0&&f.set(e,l)}let m=[...f.entries()].sort(([e,t],[n,r])=>r.length===t.length?e===n?(t[0]?.offset??2**53-1)-(r[0]?.offset??2**53-1):e.localeCompare(n):r.length-t.length).flatMap(([,e])=>e),h=a()-s,g={durationMs:h,corpusDocCount:d.length,candidateCount:m.length,truncated:p};return DZ.info({docName:r,durationMs:h,corpusDocCount:d.length,candidateCount:m.length,truncated:p,labelCount:u.length,normalizedTarget:zr(l.title)},`[suggest-links] scan completed`),o?.(g),{target:Xve(l),mentions:m,truncated:p}}function Qve(e){return e<=0?`0`:e===1?`1`:e<=5?`2-5`:e<=20?`6-20`:e<=50?`21-50`:`50+`}function $ve(e){return e<=0?`0`:e<=50?`1-50`:e<=200?`51-200`:e<=500?`201-500`:`500+`}let IZ=null,LZ=null;function eye(){return IZ||=kI().createHistogram(`ok.timeline.query_duration_ms`,{description:`Wall-clock duration of one history query. Bounded labels: width_bucket (ref fan-out), commits_bucket (commits gathered), capped (depth bound hit), error (the walk threw — e.g. the PRD-6972 git timeout). The error label is what separates a timeout storm from a burst of legitimately-empty docs, both of which otherwise record width/commits 0.`,unit:`ms`}),IZ}function tye(){return LZ||=kI().createCounter(`ok.timeline.coalesced_total`,{description:`History requests served by an in-flight single-flight walk instead of a fresh git walk. Bounded label: mode ∈ {doc, folder}. A high value is the poll-storm / fan-out signal.`}),LZ}function nye(e){eye().record(Math.max(0,e.durationMs),{width_bucket:Qve(e.width),commits_bucket:$ve(e.commits),capped:e.capped,error:e.error??!1})}function RZ(e){tye().add(1,{mode:e})}function zZ(e,t){return Math.min(500,3*(Math.max(0,e)+Math.max(1,t)))}const BZ=`%H%x00%aI%x00%an%x00%ae%x00%s%x00%B%x1e`,VZ={entries:[],total:0,hasMore:!1},rye=/^(template-(create|edit|rename|move|delete)|folder-frontmatter-(edit|delete)|folder-create): /;function iye(e){return rye.test(e)}function aye(e){return e.startsWith(`checkpoint:`)?`checkpoint`:e.startsWith(`import:`)||e.startsWith(`upstream:`)?`upstream`:e.startsWith(`park:`)?`park`:`wip`}function HZ(e){return e.trim()?e.split(``).map(e=>{let t=e.trimStart();if(!t)return null;let[n=``,r=``,i=``,a=``,o=``,s=``]=t.split(`\0`),c=aye(o);return{sha:n.trim(),timestamp:r,author:i,authorEmail:a,type:c,message:o,contributors:fc(s),checkpoint:c===`checkpoint`?oc(s):null,rawBody:s}}).filter(e=>e!==null&&e.sha.length===40):[]}function UZ(e){return e?Array.isArray(e)?e:e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}let WZ=null;function oye(){return WZ||=kI().createHistogram(`rename.predecessor_chain_depth_histogram`,{description:`Predecessor chain depth observed per timeline query`}),WZ}let GZ=null;function sye(){return GZ||=kI().createCounter(`rename.transient_skip_total`,{description:`Count of empty-commitSha entries encountered (lazy-population transient skip)`}),GZ}function KZ(e,t){return t.length===0?!0:t.some(t=>e.author.toLowerCase().includes(t.toLowerCase())||e.authorEmail.toLowerCase().includes(t.toLowerCase()))}function cye(e,t,n){return e.length===0||t.length===0?e:e.filter(e=>{let r=dc(e.rawBody);if(r.length===0)return!0;let i=new Set;for(let e of r){for(let t of e.docs)i.add(t);if(e.previous_paths)for(let t of e.previous_paths)i.add(t.from),i.add(t.to)}if(i.size===0)return!0;for(let r=0;r<t.length;r++){let a=t[r],o=n[r];if(!(o!==null&&!o.has(e.sha))&&i.has(a.path))return!0}return!1})}async function qZ(e,t,n,r,i,a,o){if(t.length===0||n.length===0)return t;let s=await Promise.all(n.map(async t=>{if(t.renameCommit===null)return null;let n=await dV(e,t.renameCommit,r,o);return n.length===0?new Set:gV(e,n,r,a)})),c=[];for(let e=0;e<t.length;e++){let r=t[e];for(let t=0;t<n.length;t++){let a=n[t],o=s[t];o!==null&&!o.has(r.sha)||c.push({entryIdx:e,sha:r.sha,path:i(a.path)})}}if(c.length===0)return[];let l=await _V(e,c.map(e=>({sha:e.sha,path:e.path}))),u=new Set;for(let e=0;e<c.length;e++)l[e]&&u.add(c[e].entryIdx);return t.filter((e,t)=>u.has(t))}async function lye(e,t,n,r,i){if(t.length<2||n.length===0)return t;let a=[];for(let e=0;e<t.length;e++)if(t[e]
|
|
1258
|
+
`){u+=2,l=u;continue}u+=1,l=u}return s}function Yve(e){return e.getText(`source`).toString()}async function FZ(e,t,n){let r=e.documents.get(t);if(r)try{return Yve(r)}catch(e){return DZ.warn({docName:t,err:e},`[suggest-links] Failed live serialization, falling back to live source text`),r.getText(`source`).toString()}return await Fs(n.canonicalPath,`utf-8`)}function Xve(e){return{docName:e.docName,title:e.title,aliases:e.aliases}}async function Zve(e){let{hocuspocus:t,fileIndex:n,docName:r,scanBudgetMs:i=500,now:a=()=>Date.now(),onComplete:o}=e,s=a(),c=n.get(r);if(!c)throw new jZ(r);let l=Mfe(await FZ(t,r,c),r),u=Wve(l),d=[...n.keys()].filter(e=>e!==r).sort((e,t)=>e.localeCompare(t)),f=new Map,p=!1;for(let e of d){if(a()-s>i){p=!0;break}let o=n.get(e);if(!o)continue;let c;try{c=await FZ(t,e,o)}catch(t){DZ.warn({docName:e,err:t},`[suggest-links] Failed to read source doc`);continue}let l=Jve(c,e,r,u).map(t=>({source:e,excerpt:t.excerpt,offset:t.offset}));l.length>0&&f.set(e,l)}let m=[...f.entries()].sort(([e,t],[n,r])=>r.length===t.length?e===n?(t[0]?.offset??2**53-1)-(r[0]?.offset??2**53-1):e.localeCompare(n):r.length-t.length).flatMap(([,e])=>e),h=a()-s,g={durationMs:h,corpusDocCount:d.length,candidateCount:m.length,truncated:p};return DZ.info({docName:r,durationMs:h,corpusDocCount:d.length,candidateCount:m.length,truncated:p,labelCount:u.length,normalizedTarget:zr(l.title)},`[suggest-links] scan completed`),o?.(g),{target:Xve(l),mentions:m,truncated:p}}function Qve(e){return e<=0?`0`:e===1?`1`:e<=5?`2-5`:e<=20?`6-20`:e<=50?`21-50`:`50+`}function $ve(e){return e<=0?`0`:e<=50?`1-50`:e<=200?`51-200`:e<=500?`201-500`:`500+`}let IZ=null,LZ=null;function eye(){return IZ||=kI().createHistogram(`ok.timeline.query_duration_ms`,{description:`Wall-clock duration of one history query. Bounded labels: width_bucket (ref fan-out), commits_bucket (commits gathered), capped (depth bound hit), error (the walk threw — e.g. the PRD-6972 git timeout). The error label is what separates a timeout storm from a burst of legitimately-empty docs, both of which otherwise record width/commits 0.`,unit:`ms`}),IZ}function tye(){return LZ||=kI().createCounter(`ok.timeline.coalesced_total`,{description:`History requests served by an in-flight single-flight walk instead of a fresh git walk. Bounded label: mode ∈ {doc, folder}. A high value is the poll-storm / fan-out signal.`}),LZ}function nye(e){eye().record(Math.max(0,e.durationMs),{width_bucket:Qve(e.width),commits_bucket:$ve(e.commits),capped:e.capped,error:e.error??!1})}function RZ(e){tye().add(1,{mode:e})}function zZ(e,t){return Math.min(500,3*(Math.max(0,e)+Math.max(1,t)))}const BZ=`%H%x00%aI%x00%an%x00%ae%x00%s%x00%B%x1e`,VZ={entries:[],total:0,hasMore:!1},rye=/^(template-(create|edit|rename|move|delete)|folder-frontmatter-(edit|delete)|folder-create): /;function iye(e){return rye.test(e)}function aye(e){return e.startsWith(`checkpoint:`)?`checkpoint`:e.startsWith(`import:`)||e.startsWith(`upstream:`)?`upstream`:e.startsWith(`park:`)?`park`:`wip`}function HZ(e){return e.trim()?e.split(``).map(e=>{let t=e.trimStart();if(!t)return null;let[n=``,r=``,i=``,a=``,o=``,s=``]=t.split(`\0`),c=aye(o);return{sha:n.trim(),timestamp:r,author:i,authorEmail:a,type:c,message:o,contributors:fc(s),checkpoint:c===`checkpoint`?oc(s):null,rawBody:s}}).filter(e=>e!==null&&e.sha.length===40):[]}function UZ(e){return e?Array.isArray(e)?e:e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}let WZ=null;function oye(){return WZ||=kI().createHistogram(`rename.predecessor_chain_depth_histogram`,{description:`Predecessor chain depth observed per timeline query`}),WZ}let GZ=null;function sye(){return GZ||=kI().createCounter(`rename.transient_skip_total`,{description:`Count of empty-commitSha entries encountered (lazy-population transient skip)`}),GZ}function KZ(e,t){return t.length===0?!0:t.some(t=>e.author.toLowerCase().includes(t.toLowerCase())||e.authorEmail.toLowerCase().includes(t.toLowerCase()))}function cye(e,t,n){return e.length===0||t.length===0?e:e.filter(e=>{let r=dc(e.rawBody);if(r.length===0)return!0;let i=new Set;for(let e of r){for(let t of e.docs)i.add(t);if(e.previous_paths)for(let t of e.previous_paths)i.add(t.from),i.add(t.to)}if(i.size===0)return!0;for(let r=0;r<t.length;r++){let a=t[r],o=n[r];if(!(o!==null&&!o.has(e.sha))&&i.has(a.path))return!0}return!1})}async function qZ(e,t,n,r,i,a,o){if(t.length===0||n.length===0)return t;let s=await Promise.all(n.map(async t=>{if(t.renameCommit===null)return null;let n=await dV(e,t.renameCommit,r,o);return n.length===0?new Set:gV(e,n,r,a)})),c=[];for(let e=0;e<t.length;e++){let r=t[e];for(let t=0;t<n.length;t++){let a=n[t],o=s[t];o!==null&&!o.has(r.sha)||c.push({entryIdx:e,sha:r.sha,path:i(a.path)})}}if(c.length===0)return[];let l=await _V(e,c.map(e=>({sha:e.sha,path:e.path}))),u=new Set;for(let e=0;e<c.length;e++)l[e]&&u.add(c[e].entryIdx);return t.filter((e,t)=>u.has(t))}async function lye(e,t,n,r,i){if(t.length<2||n.length===0)return t;let a=new Set(n.map(e=>e.renameCommit).filter(e=>e!==null)),o=e=>e.type===`checkpoint`||a.has(e.sha),s=[];for(let e=0;e<t.length;e++)if(!o(t[e]))for(let a=0;a<n.length;a++){let o=r[a];o!==null&&!o.has(t[e].sha)||s.push({entryIdx:e,sha:t[e].sha,path:i(n[a].path)})}if(s.length===0)return t;let c=await rpe(e,s.map(e=>({sha:e.sha,path:e.path}))),l=t.map(()=>null);for(let e=0;e<s.length;e++){let t=s[e].entryIdx;l[t]===null&&c[e]!==null&&(l[t]=c[e])}let u=new Set,d=null,f=-1;for(let e=t.length-1;e>=0;e--){if(o(t[e]))continue;let n=l[e];if(n!==null){if(d!==null&&n===d){t[e].type!==`upstream`&&t[f].type===`upstream`?(u.add(f),f=e):u.add(e);continue}d=n,f=e}}return u.size===0?t:t.filter((e,t)=>!u.has(t))}async function uye(e,t,n=`.`,r){if(!B(e.workTree)||!B(e.gitDir)||t.docName&&(t.docName.includes(`..`)||t.docName.includes(`\0`)))return VZ;let i=t.branch??`main`,a=Math.max(1,t.limit??50),o=Math.max(0,t.offset??0),s=zZ(o,a),c=performance.now(),l=!1,u=(e,t,n=!1)=>nye({durationMs:performance.now()-c,width:e,commits:t,capped:l,error:n}),d=UZ(t.type),f=UZ(t.author),p=UZ(t.excludeAuthor),m=t.includeAutoCheckpoints??!1,h=n===`.`?``:n.replace(/^\.\//,``),g=e=>h?`${h}/${e}${QI(e)}`:`${e}${QI(e)}`,_=t.docName?BB(t.docName):{managed:!1};if(_.managed&&!_.versioned)return VZ;let v=_.managed&&_.versioned?_.filePath:void 0,y=_.managed&&_.versioned?_.docKey:t.docName,b=t.docName?v?h?`${h}/${v}`:v:g(t.docName):void 0;try{let n=r?.renameLogIndex??sV(e.gitDir),{chain:c,skipped:h}=await AI(`rename.expandPredecessors`,void 0,async()=>t.docName?lV(y,i,n):{chain:[],skipped:0}),_=c.length>1;t.docName&&oye().record(c.length),h>0&&sye().add(h);let v=tpe(),x=uV(),S=Mz(e);if(d.length===1&&d[0]===`checkpoint`){let t=(await S.raw(`for-each-ref`,`--sort=-creatordate`,`--format=%(objectname)`,`refs/checkpoints/${i}/`)).trim().split(`
|
|
1259
1259
|
`).filter(e=>e.length===40),n=[];if(i!==`main`)try{n=(await S.raw(`for-each-ref`,`--sort=-creatordate`,`--format=%(objectname)`,`refs/checkpoints/main/`)).trim().split(`
|
|
1260
1260
|
`).filter(e=>e.length===40)}catch{}let r=[...t,...n];if(r.length===0)return VZ;let s=HZ(await S.raw(`log`,`--no-walk`,`--author-date-order`,`--format=${BZ}`,...r)).map(e=>({...e,type:`checkpoint`}));if(b){let t=uV();s=await qZ(e,s,c,i,g,t,v)}if(i!==`main`&&t.length>0&&n.length>0){let e=new Set(t),n=s.filter(t=>e.has(t.sha)),r=s.filter(t=>!e.has(t.sha)),i=n.reduce((e,t)=>Math.min(e,new Date(t.timestamp).getTime()),1/0);s=[...n,...r.filter(e=>new Date(e.timestamp).getTime()<i)]}let l=s.filter(e=>(m||e.checkpoint?.kind!==`auto-consolidation`)&&KZ(e,f)&&(p.length===0||!KZ(e,p))),d=l.length,h=l.slice(o,o+a).map(({rawBody:e,...t})=>t);return u(r.length,d),{entries:h,total:d,hasMore:o+a<d}}let C=[],w=[],T=i!==`main`;try{let e=(await S.raw(`for-each-ref`,`--format=%(objectname)`,`refs/checkpoints/${i}/`)).trim().split(`
|
|
1261
1261
|
`).filter(e=>e.length===40);C.push(...e)}catch{}let E=[];if(T)try{E=(await S.raw(`for-each-ref`,`--format=%(objectname)`,`refs/checkpoints/main/`)).trim().split(`
|
|
@@ -3308,4 +3308,4 @@ Incremental by default — don't re-read the whole repo.
|
|
|
3308
3308
|
`)){let r=n.trim();if(r===``)continue;if(r.startsWith(`C\0`)){let[,e,t]=r.split(`\0`);o=e&&t?{name:e,email:t}:null;continue}if(!o||!r.endsWith(`.md`)&&!r.endsWith(`.mdx`))continue;let a=z(e,r);if(!YV(a,t))continue;let s=xB(a,t);i.has(s)||B(a)&&i.set(s,o)}return i}function w9(e){let{contentDir:t,projectDir:n=t,quiet:r=!0,debounce:i=2e3,maxDebounce:a=1e4,gitEnabled:o=!0,commitDebounceMs:s=3e4,wipRef:c=`refs/wip/main`,configHomedirOverride:l,enableTestRoutes:u=!1,shadowRepo:d,contentRoot:f,destroyTimeoutMs:m=1e4,localOpCliArgs:h,skipStateManifestCheck:g=!1,singleDocRelPath:_,ephemeral:v=!1}=e,y=H(`server`);function x(){let e=pP({absPath:lP(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config`)});if(!e.valid){let t=Vt(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 S(){let e=pP({absPath:lP(`project-local`,n),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 r=pP({absPath:lP(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config`)});return r.valid||y.warn({},`[config] committed autoSync.default unavailable (project config invalid) — defaulting to disabled`),r.value.autoSync?.default===!0}function C(){let e=pP({absPath:lP(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config for linter`)}).value.contentRules;return e?er(e):pn}function w(){return KU(n,{configHomedirOverride:l,onWarn:e=>y.warn({message:e},`[config] could not read project-local config`)})}function T(){let e=pP({absPath:lP(`project-local`,n,l),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project-local config`)});return e.valid?e.value.linkPreviews?.enabled===!0:!1}function E(e){return`${BU(e.baseUrl)}|${e.model}|${e.dimensions??1536}`}function D(e){let t;(e===`__config__/project`||e===`__local__/project`)&&(t=S(),Ye?.setEnabled(t).catch(n=>{y.warn({err:n,enabled:t,docName:e},`[sync] failed to apply autoSync.enabled from config`)}));let n=w();he.applyConfig({enabled:n.enabled,providerFingerprint:E(n)}),y.info({docName:e,autoSyncEnabled:t,semanticEnabled:n.enabled},`[config] applied persisted config to in-process consumers`)}CI();let ee=Gs(),O=gH(n);if(ea(O,{port:e.port??0,worktreeRoot:n,kind:e.lockKind??`interactive`,capabilities:[`http`,`ws`]}),!g)try{c9({lockDir:O,shadowRepoDir:ec(n)})}catch(e){throw Wi(O),e}let k=Qn(),A=(e,t)=>k.resolveEmbed(e,t),te=(e,n)=>{let r=k.resolveEmbed(e,n);if(!r&&e.includes(`/`)&&(r=e.replace(/^\.?\//,``)),!r)return null;let i=z(t,r);if(!fB(i,z(t)))return null;try{let e=vs(i);return e.isFile()?e.size:null}catch{return null}},re,ie,ae,oe,se,ce,j,le,ue=null,de=null,fe=null,pe=null,me=w(),he=new xhe({loadEmbedder:e.embedderLoader??(()=>{let t=w();return fhe({keyStore:e.embeddingsKeyStore??null,config:{baseUrl:t.baseUrl,model:t.model,dimensions:t.dimensions}})}),cacheDir:L(gH(n),`embeddings`),enabled:me.enabled,providerFingerprint:E(me)}),ge=null,_e=new Set,ve=!1,ye=[],be,xe,Se,Ce=new Promise((e,t)=>{xe=e,Se=t});function M(e){ue?.signal(e)}let we=null;function Te(){we!==null&&clearTimeout(we),we=setTimeout(()=>{we=null,ie.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist debounced cache:`,e)})},2e3)}let Ee=null,De=!1,Oe=()=>{try{e9(n,ke.entries())}catch(e){y.warn({err:e},`[removed-docs-journal] failed to persist removal journal`)}},ke=new CNe(void 0,{onEviction:()=>gae(),onSizeChange:e=>_ae(e),onMutate:()=>{!De||Ee!==null||(Ee=setTimeout(()=>{Ee=null,Oe()},2e3))}});for(let[e,r]of ENe(n))HI(e)||VQ(e)&&([`.md`,`.mdx`].some(n=>{let r=z(t,`${e}${n}`);return fB(r,z(t))&&B(r)})||ke.restore(e,r));De=!0;let Ae=(e,t)=>{HI(e)||ke.setRenamed(e,t)},je=e=>{if(!HI(e)){if(ke.peek(e)?.kind===`renamed`){console.info(JSON.stringify({event:`recently-removed-docs-unpaired-delete-suppressed`,docName:e,source:`watcher-delete`}));return}ke.setDeleted(e)}},Me=e=>{HI(e)||ke.delete(e)};try{re=WG({projectDir:n,contentDir:t,singleDocRelPath:_,onAfterRebuild:()=>{ie.rebuildFromDisk($V()).catch(e=>{H(`server-factory`).warn({err:e},`[content-filter] backlink-index rebuild failed after onAfterRebuild`)}),ae.init().catch(e=>{H(`server-factory`).warn({err:e},`[content-filter] tag-index rebuild failed after onAfterRebuild`)}),Rfe(qe).then(({prunedFiles:e,prunedFolders:t})=>{let n=e+t;n>0?H(`server-factory`).info({pruned:n,prunedFiles:e,prunedFolders:t},`[content-filter] reconciled file indexes after onAfterRebuild`):H(`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=>{H(`server-factory`).warn({err:e},`[content-filter] file index reconcile failed after onAfterRebuild`)})}}),ie=new aX({projectDir:n,contentDir:t,contentFilter:re}),ae=new C9({contentDir:t,contentFilter:re}),ae.init().catch(e=>{H(`server-factory`).warn({err:e},`[server-factory] tag-index init failed; continuing with empty index`)}),oe={current:d},se=o?yNe({getShadow:()=>oe.current??null,getCurrentBranch:()=>Je?.getLastKnownBranch()??null,contentRoot:f??``,projectGitDir:$s(n)??void 0,isWriterLive:e=>{if(!fe&&!le)return H(`server-factory`).debug({writerId:e},`[server-factory] isWriterLive called before liveness deps populated — treating writer as dead`),!1;if(fe?.getPresenceMap()[e])return!0;let t=e.startsWith(`agent-`)?e.slice(6):e;for(let e of le?.sessionsForConnection(t)??[])return!0;return!1}}):void 0,ce=cH({contentDir:t,projectDir:n,gitEnabled:o,commitDebounceMs:s,wipRef:c,shadowRef:oe,ephemeral:v,contentRoot:f,backlinkIndex:ie,configHomedirOverride:l,getCurrentBranch:()=>Je?.getLastKnownBranch()??null,resolveEmbed:A,resolveSize:te,getPrincipal:()=>ge,onAgentCommit:()=>ue?.signal(`session-activity`),onFlushCommit:()=>se?.noteFlushCommit(),onDiskFlush:(e,t,n,r)=>{ue?.emitDiskAck(e,t),!HI(e)&&Ppe(r,n)&&(pe?.(),M(`files`))},onConfigRejected:(e,t)=>ue?.emitConfigValidationRejected(e,t),onConfigPersisted:D,isRecentlyRemoved:e=>ke.has(e),mdManager:e.mdManager}),j=new VMe({quiet:r,debounce:i,maxDebounce:a,extensions:[ce.extension]});let p=j;ye.push(fpe(()=>p.documents.size),ppe(()=>ce.getQueueDepths())),hpe();let m=j.shouldUnloadDocument.bind(j);j.shouldUnloadDocument=e=>{if(_e.has(e)||ve&&m(e))return!0;let t=e.name;return HI(t)||eH(t)!==void 0||e.getXmlFragment(`default`).length!==0||e.getText(`source`).length!==0?!1:m(e)},be=async e=>{_e.add(e);try{await j.unloadDocument(e)}finally{_e.delete(e)}},ue=new WI(j),de=new uk(j),fe=new Hk(j),le=new bL(j);let g=L7({backlinkIndex:ie,tagIndex:ae,signalChannel:M});j.configuration.extensions.push(g),j.configuration.extensions.push({__kind:`principal-auth`,async onAuthenticate(e){let t=e.token,n=DR(t),r=n?.expectedServerInstanceId;if(typeof r==`string`&&r.length>0&&r!==ee)throw new ER(`server-instance-mismatch`,`server instance mismatch: client claimed ${r}, this server is ${ee}`);let i=n?.expectedBranch,a=$V();if(typeof i==`string`&&i.length>0&&i!==a)throw new ER(`branch-mismatch`,`branch mismatch: client claimed ${i}, server is on ${a}`);if(!n)return;let o=e.context;typeof n.principalId==`string`&&(ge&&n.principalId===ge.id?o.principalId=ge.id:ge?console.warn(JSON.stringify({event:`principal-token-mismatch`,claimed:n.principalId,loaded:ge.id})):o.principalId=n.principalId),typeof n.tabSessionId==`string`&&(o.tabSessionId=n.tabSessionId),o.kind=`human`}}),j.configuration.extensions.push({__kind:`config-doc-admission-guard`,async onAuthenticate(e){if(!zI(e.documentName)&&!BI(e.documentName))return;let t=e.request,n=t.socket?.remoteAddress;if(n!==void 0&&!QX(n))throw Error(`config-doc admission requires loopback peer (peer=${n}, doc=${e.documentName})`);let r=e.requestHeaders,i=(r&&typeof r.get==`function`?r.get(`host`):null)??t.headers?.host??void 0;if(!$X(i))throw Error(`config-doc admission requires loopback Host header (host=${i??`<absent>`}, doc=${e.documentName})`)}});let y=z(t);function b(e){if(!VQ(e))return null;let t=z(y,$I(e));return fB(t,y)?t:null}j.configuration.extensions.push({__kind:`removal-redirect-guard`,async onAuthenticate(e){await wNe(e.documentName,{recentlyRemovedDocs:ke,resolveFilePath:b,fileExists:B})}}),j.configuration.extensions.push({__kind:`doc-lineage-guard`,async onAuthenticate(e){let t=DR(e.token);ZMe(e.documentName,t?.expectedDocLineageEpoch,{getLoadedDoc:e=>j.documents.get(e)})}}),j.configuration.extensions.push({__kind:`system-doc-broadcast-guard`,async beforeHandleMessage(e){if(e.documentName!==`__system__`)return;let t=new d7(e.update);if(t.readVarString(),t.readVarUint()===S7.BroadcastStateless)throw Error(`inbound BroadcastStateless on ${ne} rejected — server-only channel`)}});let S=HQ({hocuspocus:j,sessionManager:le,contentDir:t,contentFilter:re,serverInstanceId:ee,getFileIndex:()=>qe?qe.getFileIndex():new Map,getAttachmentFolderPath:x,getAllFilesIndex:()=>qe?qe.getAllFilesIndex():new Map,getFileIndexGeneration:()=>qe?.getFileIndexGeneration()??0,mutateFileIndex:e=>qe?.mutateFileIndex(e),getFolderIndex:()=>qe?qe.getFolderIndex():new Map,getAliasMap:()=>qe?qe.getAliasMap():new Map,getFolderAliasIndex:()=>qe?qe.getFolderAliasIndex():new Map,rescanFiles:()=>qe?.rescanFromDisk(),enableTestRoutes:u,shadowRef:oe,flushGitCommit:()=>ce.flushPendingGitCommit(),flushContributors:()=>ce.flushContributors(),takeStoreFailure:e=>ce.takeStoreFailure(e),takeStoreDivergence:e=>ce.takeStoreDivergence(e),markAgentWriteStore:e=>ce.markAgentWriteStore(e),getCurrentBranch:()=>Je?.getLastKnownBranch()??null,getDiskAckSVs:()=>ue?.getLatestDiskAckSVsAsBase64()??{},contentRoot:f,backlinkIndex:ie,tagIndex:ae,signalChannel:M,agentFocusBroadcaster:de,agentPresenceBroadcaster:fe,onAgentWrite:e.onAgentWrite,getSyncEngine:()=>Ye,localOpCliArgs:h,projectDir:n,resolveEmbed:A,getPrincipal:()=>ge,homeDirOverride:l,forceUnloadDocument:be,ready:Ce,recentlyRemovedDocs:ke,serializeDoc:Le,evictManagedArtifactLkg:e=>{ce.managedArtifactCtx.lkgCache.delete(e)},semanticSearch:he,getSemanticSimilarityFloor:()=>w().similarityFloor,getLinterBaseConfig:()=>C(),getLinkPreviewsEnabled:T,embeddingsSecretsFile:UU(l),ephemeral:v,onReferencedAssetsCacheInvalidator:e=>{pe=e}});j.configuration.extensions.push(S),j.configuration.extensions.push(t9({mdManager:tP,schema:nP,shadowRef:oe,contentRoot:f,getCurrentBranch:()=>Je?.getLastKnownBranch()??null,resolveEmbed:A,resolveSize:te})),j.configuration.extensions.push(sPe()),j.configuration.extensions.push(XMe({getSyncEngine:()=>Ye,projectDir:n,contentDir:t}))}catch(e){for(let e of ye.splice(0))e();throw Wi(O),e}let Ne=null,Pe=new Map,Fe=[];function Ie(e,t){let n=z(e,`rescue`),r=z(n,$I(t));return fB(r,n)?r:null}function Le(e){let t=j.documents.get(e);return t?nB(t):null}let Re=(e,t)=>eB(j,e,t,A,te);function N(e){if(!oL(e))return;let t=e.getMap(`lifecycle`);t.delete(`status`),t.delete(`reason`)}let ze=e=>{if(!e)return;let t=`[[${e}]]`;for(let[n]of j.documents){if(HI(n))continue;let r=j.documents.get(n);if(!r)continue;let i=r.getText(`source`).toString();if(i.includes(t))try{r.transact(()=>{$z(r,i,A,n)},Qz)}catch(t){y.error({err:t,docName:n,assetBasename:e},`[asset-event] failed to re-render ${n} for asset basename ${e}`)}}},Be=null,Ve=e=>{e&&(Be===null&&(Be=new Set,setImmediate(()=>{let e=Be;if(Be=null,e)try{for(let t of e)ze(t)}catch(t){y.error({err:t,basenames:[...e]},`[asset-event] dedup rerender pass crashed`)}})),Be.add(e))};function He(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 pB(e)}}async function Ue(e){try{switch(e.kind){case`create`:y.info({docName:e.docName},`[reconcile] create: ${e.docName}`),ie.updateDocumentFromMarkdown(e.docName,e.content),Te(),ae.updateDocumentFromMarkdown(e.docName,e.content),M(`files`),M(`backlinks`),M(`graph`),M(`tags`),Me(e.docName);break;case`update`:{let{docName:t,content:n}=e,r=j.documents.get(t);if(!r){ie.updateDocumentFromMarkdown(t,n),Te(),ae.updateDocumentFromMarkdown(t,n),M(`backlinks`),M(`graph`),M(`tags`);return}let i=eH(t)??``,a=Le(t)??i,o=wz({docName:t,base:i,ours:a,theirs:n}),s=yB(i).slice(0,6),c=yB(a).slice(0,6),l=yB(n).slice(0,6);switch(y.info({docName:t,base:s,ours:c,theirs:l,result:o.kind},`[reconcile] ${t} base=${s} ours=${c} theirs=${l} result=${o.kind}`),o.kind){case`noop`:N(r),ie.updateDocumentFromMarkdown(t,n),Te(),ae.updateDocumentFromMarkdown(t,n),M(`backlinks`),M(`graph`),M(`tags`);break;case`clean`:try{Re(t,o.newContent),tH(t,o.newContent),dk(),N(r),ie.updateDocumentFromMarkdown(t,n),Te(),ae.updateDocumentFromMarkdown(t,n),M(`backlinks`),M(`graph`),M(`tags`)}catch(e){y.error({err:e,docName:t},`[reconcile] failed to apply clean content to Y.Doc for ${t}`),tH(t,n),N(r)}break;case`merged`:try{Re(t,o.newContent),tH(t,n),dk(),N(r),ie.updateDocumentFromMarkdown(t,n),Te(),ae.updateDocumentFromMarkdown(t,n),M(`backlinks`),M(`graph`),M(`tags`)}catch(e){y.error({err:e,docName:t},`[reconcile] failed to apply merged content to Y.Doc for ${t}`),tH(t,n),N(r)}break;case`conflicts`:try{Re(t,o.newContent),tH(t,o.newContent),dk(),fk(),ie.updateDocumentFromMarkdown(t,n),Te(),ae.updateDocumentFromMarkdown(t,n),M(`backlinks`),M(`graph`),M(`tags`)}catch(e){y.error({err:e,docName:t},`[reconcile] failed to apply conflict content to Y.Doc for ${t}`),tH(t,n)}{let e=r.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,`merged-with-markers`)}break;case`refused`:{fk();let e=r.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,o.reason);break}}break}case`delete`:{let{docName:t}=e,n=j.documents.get(t);if(!n){ie.deleteDocument(t),Te(),ae.deleteDocument(t),M(`files`),M(`backlinks`),M(`graph`),M(`tags`),je(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));return}let r=eH(t)??``,i=Le(t)??``,a=i!==r;if(a&&oe.current){let e=oe.current,n=Je?.getLastKnownBranch()??`main`;queueMicrotask(()=>{qz(e,f??``,{kind:`external-change-rescue`,docName:t,contents:i,label:`External change recovered @ ${new Date().toISOString()}`,branch:n,metadata:{incomingDiskSha:``}}).then(()=>{mk(),y.info({docName:t},`[reconcile] rescue checkpoint saved (delete): ${t}`)}).catch(e=>{y.error({docName:t,err:e},`[reconcile] rescue checkpoint write failed: ${t}`)})})}n.getMap(`lifecycle`).set(`status`,`deleted-upstream`),nH(t),ie.deleteDocument(t),Te(),ae.deleteDocument(t),y.info({docName:t,isDirty:a},`[reconcile] delete: ${t} (dirty=${a})`),j.closeConnections(t),await be(n),M(`files`),M(`backlinks`),M(`graph`),M(`tags`),je(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));break}case`rename`:{let{oldDocName:t,newDocName:n,content:r}=e,i=j.documents.get(t);if(nH(t),tH(n,r),ie.renameDocument(t,n,r),Te(),ae.renameDocument(t,n,r),i){let e=i.getMap(`lifecycle`);e.set(`status`,`renamed`),e.set(`newPath`,n)}y.info({oldDocName:t,newDocName:n},`[reconcile] rename: ${t} → ${n}`),M(`files`),M(`backlinks`),M(`graph`),M(`tags`),Ae(t,n),console.info(JSON.stringify({event:`recently-removed-docs-populate`,from:t,to:n,kind:`renamed`,source:`watcher-rename`}));break}case`conflict`:{let{docName:t}=e,n=j.documents.get(t);if(!n)return;let r=Le(t);r===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`):tH(t,r);let i=n.getMap(`lifecycle`);i.set(`status`,`conflict`),i.set(`reason`,`conflict-markers`),y.info({docName:t},`[reconcile] conflict markers detected: ${t}`);break}case`asset-create`:k.add(e.relativePath),M(`files`),Ve(Uo(e.relativePath));break;case`asset-delete`:k.remove(e.relativePath),M(`files`),Ve(Uo(e.relativePath));break;case`folder-create`:case`folder-delete`:M(`files`);break;case`file-create`:case`file-update`:case`file-delete`:M(`files`);break;default:pB(e)}}catch(t){let n=He(e);y.error({err:t,kind:e.kind,label:n},`[reconcile] failed to handle ${e.kind} for ${n}`)}}let We=[];async function Ge(e){if(oH()){We.push(e);return}await Ue(e)}async function Ke(){let e=We.splice(0,We.length);for(let t of e)await Ue(t)}let qe=null,Je=null,Ye=null,Xe=null;async function Ze(e){if(j.documents.size===0)return;let t=!1,n=new Promise(e=>{j.configuration.extensions.push({async afterUnloadDocument({instance:n}){!t&&n.getDocumentsCount()===0&&(t=!0,e())}})}),r=Array.from(j.documents.keys());j.closeConnections(),j.flushPendingStores();for(let e of j.documents.values())e.getConnectionsCount()===0&&j.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 i,a=new Promise((n,a)=>{i=setTimeout(()=>{t=!0;let n=Array.from(j.documents.keys()),i=[],o=[];if(oe.current){for(let e of n)if(!HI(e))try{let t=Le(e);if(t===null){y.warn({docName:e},`[rescue] skipping ${e} — document dropped from map mid-rescue`),o.push(e);continue}let n=Ie(oe.current.gitDir,e);if(!n){y.warn({docName:e,gitDir:oe.current.gitDir},`[rescue] path-traversal guard rejected docName: ${e}`),o.push(e);continue}ss(Go(n),{recursive:!0}),xs(n,t,`utf-8`),mk(),i.push(e),y.info({docName:e},`[rescue] rescue buffer saved on flush timeout: ${e}`)}catch(t){o.push(e),y.error({err:t,docName:e},`[rescue] failed to write rescue buffer for ${e}`)}}else y.warn({stillLoadedCount:n.length},`[rescue] shadow repo unavailable at flush timeout — ${n.length} doc(s) will be lost: [${n.join(`, `)}]`),o.push(...n);let s=i.length>0||o.length>0?` — rescued [${i.join(`, `)}]${o.length>0?`, lost [${o.join(`, `)}]`:``}`:``;a(Error(`flushAllStoresAndWait timeout after ${e}ms — ${n.length}/${r.length} docs did not unload: [${n.join(`, `)}]${s}`))},e)});try{await Promise.race([n,a])}finally{i!==void 0&&clearTimeout(i)}}async function Qe(){return Xe||(Xe=(async()=>{let e=Date.now(),t=[];ve=!0;for(let e of ye.splice(0))e();try{ta(O)}catch(e){y.warn({err:e},`[server] failed to mark server.lock draining`)}if(we!==null&&(clearTimeout(we),we=null),Ee!==null&&(clearTimeout(Ee),Ee=null),De)try{e9(n,ke.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 r,i=await Promise.race([Ce.then(()=>`completed`,e=>(y.debug({err:e},`[server] init incomplete during shutdown`),`failed`)),new Promise(e=>{r=setTimeout(()=>e(`timeout`),5e3)})]);r!==void 0&&clearTimeout(r),i===`timeout`&&y.warn({},`[server] init did not complete within 5s during shutdown`);let a=j.documents.size;se?.destroy();try{try{try{Je&&=(await Je.unsubscribe(),null),qe&&=(await qe.unsubscribe(),null);for(let{docName:e,cleanup:t}of Fe)try{await t()}catch(t){y.warn({err:t,docName:e},`[server] failed to stop config-file-watcher for ${e}`)}Fe.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{ue?.destroy(),fe?.destroy(),Ne&&=(await Ne.disconnect(),null);for(let[e,t]of Pe)try{await t.disconnect()}catch(t){y.warn({err:t,docName:e},`[server] failed to disconnect ${e} during shutdown`)}Pe.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 le.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 Ze(m)}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 ce.flushPendingGitCommit(),await ce.waitForPendingCommits()})(),new Promise((t,n)=>{e=setTimeout(()=>n(Error(`L2 git flush timeout`)),m)})])}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{Ye&&=(await Ye.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(oe.current){try{let e=(await Li({baseDir:n,timeout:{block:5e3}}).revparse(`HEAD`)).trim();e&&xs(z(oe.current.gitDir,`last-known-head`),e,`utf-8`)}catch{}try{mfe(oe.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 r=Date.now()-e;t.length===0?y.info({documentCount:a,durationMs:r},`[server] shutdown flushed ${a} documents in ${r}ms`):y.warn({documentCount:a,durationMs:r,phaseErrors:t},`[server] shutdown flushed ${a} documents in ${r}ms with ${t.length} phase error(s)`)}}finally{try{Wi(O,{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 DI()}catch(e){t.push({phase:`telemetry-shutdown`,error:e instanceof Error?e.message:String(e)})}}})(),Xe)}let $e=[];async function et(){try{ge=await X7(n),y.info({principalId:ge.id},`[server] principal loaded`)}catch(e){y.warn({err:e},`[server] principal load failed — browser writes will use SERVICE_WRITER`)}if(!oe.current)try{oe.current=await Pz(n),y.info({gitDir:oe.current.gitDir},`[server] history repo initialized at ${oe.current.gitDir}`)}catch(e){y.error({err:e},`[server] history repo init failed`),$e.push(`shadow-repo`)}if(oe.current){let e=null;try{e=iV(oe.current.gitDir),ipe(oe.current.gitDir,e),$fe(oe.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([bV(oe.current,e,{rebuild:!0}),new Promise((e,n)=>setTimeout(()=>n(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 se?.runBootMaintenance()}catch(e){y.warn({err:e},`[shadow-maintenance] boot maintenance failed (non-fatal)`)}}if(oe.current)try{await Mz(oe.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{oe.current=await Pz(n)}catch(e){y.error({err:e},`[server] history repo reinit failed`),oe.current=void 0,$e.includes(`shadow-repo`)||$e.push(`shadow-repo`)}}else y.error({err:e},`[server] history repo check failed (transient?)`)}if(oe.current)try{let e=z(oe.current.gitDir,`last-known-head`),t=null;try{t=V(e,`utf-8`).trim()||null}catch{}let r=null;try{r=(await Li({baseDir:n,timeout:{block:1e4}}).revparse(`HEAD`)).trim()||null}catch{}if(r!==null){if(r!==t){let e=`main`;try{let t=(await Li({baseDir:n,timeout:{block:1e4}}).raw(`rev-parse`,`--abbrev-ref`,`HEAD`)).trim();t&&t!==`HEAD`&&(e=t)}catch{}y.info({lastKnownHead:t,currentHead:r,branch:e},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${r}, action=import`);try{await Wz(oe.current,f??``,t,r,e),pk()}catch(e){y.warn({err:e},`[head-drift] commitUpstreamImport failed — continuing`)}}else y.info({currentHead:r},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${r}, action=noop`);try{xs(e,r,`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=fve(t,n);if(e.recovered&&e.journal){let t=e.journal.version===2?e.journal.fromPath:e.journal.sourceDocName,n=e.journal.version===2?e.journal.toPath:e.journal.destinationDocName;y.warn({journalVersion:e.journal.version,fromPath:t,toPath:n,restoredDocNames:e.restoredDocNames},`[managed-rename] recovered pending rename ${t} -> ${n}`)}}catch(e){y.error({err:e},`[server] managed rename recovery failed`),$e.push(`managed-rename-recovery`)}try{let e=Nge(n);(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`),$e.push(`upload-tempfile-sweep`)}try{Ne=await j.openDirectConnection(ne),ue?.emitServerInfo(ee,$V())}catch(e){y.error({err:e},`[server] failed to open __system__ direct connection — CC1 push disabled`),$e.push(`cc1-push`)}let r=v?[]:ii;for(let e of r)try{let t=await j.openDirectConnection(e);Pe.set(e,t)}catch(t){y.error({err:t,docName:e},`[server] failed to open ${e} direct connection — config bind degraded`),$e.push(`config-doc:${e}`)}let i=new Map([[_n,lP(`project`,n)],[vi,lP(`project-local`,n)],[Tt,lP(`user`,n,l)]]);for(let e of r){let t=i.get(e);if(t)try{y.info({docName:e,path:t},`[config-file-watcher] starting`);let n=await qMe(t,t=>{let n=j.documents.get(e);y.info({docName:e,hasDocument:n!==void 0,contentLength:t.length},`[config-file-watcher] file changed`);let r=mz(n??null,e,t,ce.configPersistenceCtx);y.info({docName:e,outcome:r},`[config-file-watcher] applyExternalConfigChange outcome`),D(e)});Fe.push({docName:e,cleanup:n}),y.info({docName:e,path:t},`[config-file-watcher] started`)}catch(n){y.warn({err:n,docName:e,path:t},`[config-file-watcher] failed to start for ${e}`),$e.push(`config-file-watcher:${e}`)}}if(!v){let e=(e,t)=>{let n=Vfe(e,ce.managedArtifactCtx);if(!n)return;let r=Wfe(j.documents.get(n)??null,n,t,ce.managedArtifactCtx);y.info({docName:n,outcome:r},`[managed-artifact-watcher] external change`),p(n)&&ie.ingestGlobalSkillBundles(VB(ce.managedArtifactCtx),$V()).then(()=>{M(`backlinks`),M(`graph`)}).catch(e=>{y.warn({err:e,docName:n},`[backlinks] global skill bundle re-ingest failed`)})};try{let t=VB(ce.managedArtifactCtx),n=await Y7(t,e);Fe.push({docName:`__skill-files__`,cleanup:n}),y.info({roots:t},`[managed-artifact-watcher] skills started`)}catch(e){y.warn({err:e},`[managed-artifact-watcher] skills failed to start`),$e.push(`managed-artifact-watcher:skills`)}try{let t=new Set([``]);try{for(let e of YH(n).templates)t.add(e.source_folder)}catch(e){y.warn({err:e},`[managed-artifact-watcher] template enumeration failed; root only`)}let r=[...t].map(e=>e?z(n,e,`.ok`,`templates`):z(n,`.ok`,`templates`)),i=await Y7(r,e,xNe);Fe.push({docName:`__template-files__`,cleanup:i}),y.info({rootCount:r.length},`[managed-artifact-watcher] templates started`)}catch(e){y.warn({err:e},`[managed-artifact-watcher] templates failed to start`),$e.push(`managed-artifact-watcher:templates`)}}try{let e=z(t,`.okignore`),r=z(n,`.gitignore`),i=null;try{let e=Vo(`git`,[`rev-parse`,`--git-common-dir`],JB({cwd:n,encoding:`utf-8`,timeout:5e3}));if(e.status===0&&e.stdout){let t=L(z(n,e.stdout.trim()),`info`,`exclude`);B(Go(t))&&(i=t)}}catch{}let a=i?[e,r,i]:[e,r],o=y;o.info({okignorePath:e,gitignorePath:r,gitInfoExcludePath:i,ephemeral:v},`[ignore-watcher] starting multi-path watcher for .okignore + .gitignore (+ .git/info/exclude when present)`);let s=v?null:await JMe(a,(t,r)=>{(async()=>{if(t===e)try{let e=mz(j.documents.get(`__config__/okignore`)??null,Ti,r,ce.configPersistenceCtx);o.info({docName:Ti,outcome:e},`[ignore-watcher] applyExternalConfigChange outcome`)}catch(e){o.error({err:e,changedPath:R(n,t)},`[ignore-watcher] applyExternalConfigChange failed; rebuild proceeds independently`)}let i=await re.rebuildIgnorePatterns();if(i.ok)o.info({changedPath:R(n,t),patternCount:i.patternCount,nestedFileCount:i.nestedFileCount,durationMs:i.durationMs},`[ignore-watcher] rebuild succeeded — broadcasting files channel`),ue?.signal(`files`);else{let e=R(n,t)||`.`;o.warn({changedPath:e,error:i.error.message},`[ignore-watcher] rebuild failed — emitting config-ignore-nested-error`),ue?.emitConfigIgnoreNestedError(e,i.error.message)}})().catch(e=>{o.error({err:e,changedPath:R(n,t)||`.`},`[ignore-watcher] handler threw`)})});s&&(Fe.push({docName:`__ignore-files__`,cleanup:s}),o.info({okignorePath:e,gitignorePath:r},`[ignore-watcher] multi-path watcher started`))}catch(e){y.warn({err:e,projectDir:n,contentDir:t},`[ignore-watcher] failed to start multi-path watcher`),$e.push(`ignore-files-watcher`)}let a=$s(n),o=a?I7(a)??`main`:`main`;QV(o),ie.switchBranch(o);let s=performance.now();try{await AI(`ok.boot.indexes`,void 0,async()=>{let e=$V();try{if(await ie.loadFromDisk(e)){let t=await ie.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 n=0;for(let e of t.deletedDocNames)HI(e)||ke.peek(e)?.kind!==`renamed`&&(ke.setDeleted(e),n++);n>0&&y.info({count:n},`[removal-guard] tombstoned docs deleted while the server was down`)}else await ie.rebuildFromDisk(e);try{await ie.ingestGlobalSkillBundles(VB(ce.managedArtifactCtx),e)}catch(t){y.warn({err:t,branch:e},`[backlinks] global skill bundle ingest failed`)}ie.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 n=performance.now();qe=await AI(`ok.boot.seed-walk`,void 0,async()=>IB(t,Ge,re)),lX(`seedWalkMs`,Math.round(performance.now()-n));{let e=z(t),n=0;for(let[t]of ke.entries()){if(!VQ(t))continue;let r=z(e,`${t}${QI(t)}`);fB(r,e)&&B(r)&&(ke.delete(t),n++)}n>0&&y.info({count:n},`[removal-guard] dropped journaled removal entries whose file re-appeared while the server was down`)}try{await ae.init()}catch(e){y.error({err:e},`[tag-index] startup re-init failed; tag index updates incrementally via watcher events`),$e.push(`tag-index`)}let r=0;try{_===void 0?await WQ({contentDir:t,contentFilter:re,basenameIndex:k,onSkip:(e,t,n)=>{r++,y.warn({reason:e,code:t,path:n},`[basename-index] skipped entry during seed (${e}${t?` ${t}`:``})`)}}):Gye({contentDir:t,basenameIndex:k,onSkip:(e,t,n)=>{r++,y.warn({reason:e,code:t,path:n},`[basename-index] skipped entry during single-file seed (${e}${t?` ${t}`:``})`)}}),r>0&&(y.warn({count:r},`[basename-index] startup seed completed with ${r} skipped entries — embeds under inaccessible subtrees will not resolve`),$e.push(`basename-index-partial`))}catch(e){y.error({err:e},`[basename-index] startup seed failed`),$e.push(`basename-index`)}})}catch(e){y.error({err:e},`[server] disk bridge watcher failed to start`),$e.push(`file-watcher`)}finally{lX(`indexesMs`,Math.round(performance.now()-s)),qe&&Uge(`fileCount`,qe.getFileIndex().size)}try{Je=await nNe(n,async({trigger:e})=>{if(y.info({trigger:e},`[batch] begin trigger=${e}`),qie(),j.flushPendingStores(),await ce.flushPendingGitCommit(),aH(!0),oe.current){let e=$V(),t=$s(n),r=t?I7(t)??e:e,i=[];for(let[e,t]of j.documents){if(HI(e))continue;let n=null;if(t.transact(()=>{n=Le(e)},uPe),n===null)continue;let r=eH(e)??n;i.push({docName:e,markdown:n,diskSnapshot:r})}if(i.length>0)try{let t=await Cfe(oe.current,e,Hz.id,i,r);t&&(Xie(),y.info({count:i.length,branch:e,sha:t.slice(0,8)},`[history] parked ${i.length} docs on ${e} → ${t.slice(0,8)}`))}catch(e){y.error({err:e},`[shadow] park failed`)}}},async e=>{let r=We.length,i=e.newBranch??`main`;if(y.info({kind:e.batchKind,headMoved:e.headMoved,docs:r,timeout:!!e.timeout},`[batch] end kind=${e.batchKind} headMoved=${e.headMoved} docs=${r}${e.timeout?` timeout`:``}`),e.batchKind===`within-branch`){if(aH(!1),await Ke(),e.headMoved&&e.newHead){let r=fPe(n,z(t),e.oldHead,e.newHead);if(r.size>0){Jde(r.keys());for(let[e,t]of r)gz(e,Nte(t.email),t.name,t.email,mc(e));await ce.flushContributors()}}if(await ce.flushDeferredStores(`within-branch`),Ye!==null)try{await Ye.reconcileConflictsFromGit()}catch(e){y.warn({err:e},`[head-watcher] sync engine conflict reconcile failed`)}}else{Yie(),We.splice(0,We.length),QV(i),we!==null&&(clearTimeout(we),we=null),ie.switchBranch(i),re.rebuildDirCount();try{let e=0;k.clear(),await WQ({contentDir:t,contentFilter:re,basenameIndex:k,onSkip:(t,n,r)=>{e++,y.warn({reason:t,code:n,path:r,branch:i},`[basename-index] skipped entry during branch-switch reseed (${t}${n?` ${n}`:``})`)}}),e>0&&(y.warn({count:e,branch:i},`[basename-index] branch-switch reseed completed with ${e} skipped entries — embeds under inaccessible subtrees will not resolve on this branch`),$e.includes(`basename-index-partial`)||$e.push(`basename-index-partial`))}catch(e){y.error({err:e,branch:i},`[basename-index] branch-switch reseed failed`)}for(let[e,n]of j.documents)if(!HI(e))try{let r=JV(e,t);if(!B(r)){let t=eH(e)??``,r=Le(e)??``;if(r!==t&&oe.current){let t=oe.current;queueMicrotask(()=>{qz(t,f??``,{kind:`external-change-rescue`,docName:e,contents:r,label:`External change recovered @ ${new Date().toISOString()}`,branch:i,metadata:{incomingDiskSha:``}}).then(()=>{mk(),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}`)})})}n.getMap(`lifecycle`).set(`status`,`deleted-upstream`),y.info({docName:e,branch:i},`[branch-switch] tombstone: ${e} (not on ${i})`);continue}let a=V(r,`utf-8`);Re(e,a),tH(e,a),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:i,docCount:j.documents.size},`[branch-switch] loaded branch ${i} (${j.documents.size} docs)`);try{if(await ie.loadFromDisk(i)){let e=await ie.reconcileWithDisk(i);(e.added>0||e.updated>0||e.deleted>0)&&y.info(e,`[backlinks] branch-switch reconcile for ${i}`)}else await ie.rebuildFromDisk(i);try{await ie.ingestGlobalSkillBundles(VB(ce.managedArtifactCtx),i)}catch(e){y.warn({err:e,branch:i},`[backlinks] branch-switch global skill bundle ingest failed`)}ie.saveToDisk(i).catch(e=>{console.warn(`[backlinks] Failed to persist branch cache for ${i}:`,e)})}catch(e){y.error({err:e,branch:i},`[backlinks] branch-switch rebuild failed; backlinks may be stale`)}if(await ae.init(),oe.current&&e.batchKind===`cross-branch`){let e=0;for(let[t]of j.documents)if(!HI(t))try{let n=await Tfe(oe.current,i,Hz.id,t);if(!n||n.markdown===n.diskSnapshot)continue;let r=eH(t);if(!r)continue;let a=wz({docName:t,base:n.diskSnapshot,ours:n.markdown,theirs:r});switch(a.kind){case`merged`:case`clean`:Re(t,a.newContent),tH(t,a.newContent),e++;break;case`conflicts`:Re(t,a.newContent),tH(t,a.newContent),fk(),e++;{let e=j.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:i},`[branch-switch] restored ${e} parked docs on ${i}`)}if(e.oldBranch?.startsWith(`detached-`)&&oe.current)try{let t=Mz(oe.current),n=(await t.raw(`for-each-ref`,`refs/wip/${e.oldBranch}/`,`--format=%(refname)`)).trim();n&&(await kz(oe.current).withMutator(async()=>{for(let e of n.split(`
|
|
3309
3309
|
`))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`)}aH(!1),await ce.flushDeferredStores(`discard-stale`),ue?.emitBranchSwitched(i)}if(e.headMoved&&e.newHead&&oe.current&&r>0){let t=f??`.`;try{let n=await Wz(oe.current,t,e.oldHead,e.newHead,i);pk(),y.info({oldHead:e.oldHead?.slice(0,8)??`null`,newHead:e.newHead.slice(0,8),sha:n.slice(0,8)},`[history] upstream-import from ${e.oldHead?.slice(0,8)??`null`}..${e.newHead.slice(0,8)} → ${n.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`),$e.push(`head-watcher`)}function c(e){for(let r of e)try{let e=dB(R(t,L(n,r)));if(e.startsWith(`..`))continue;let i=qI(e),a=j.documents.get(i);if(!a)continue;let o=Le(i);o===null?y.warn({docName:i,file:r},`[sync] content conflict: serializeDoc returned null; reconciledBase snapshot skipped`):tH(i,o);let s=a.getMap(`lifecycle`);s.set(`status`,`conflict`),s.set(`reason`,`sync-merge-conflict`),y.info({docName:i,file:r},`[sync] marked loaded content conflict`)}catch(e){y.warn({err:e,file:r},`[sync] failed to mark loaded content conflict`)}}let u=dPe(h);try{Ye=new aPe({projectDir:n,contentDir:t,contentFilter:re,contentRoot:f,syncEnabled:S(),credentialArgs:u,cc1Broadcaster:ue,detectGh:e.detectGh,tokenStore:e.tokenStore,checkPushPermissionFn:e.checkPushPermissionFn,setBatchInProgress:e=>{aH(e),e||ce.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:c,onAutoDisable:async e=>{y.warn({reason:e},`[sync] auto-disabled — persisting to project-local config`);let t=await dP({cwd:n,scope:`project-local`,patch:{autoSync:{enabled:!1}}});t.ok||y.error({result:t,reason:e,humanError:b(t.error),configPath:lP(`project-local`,n)},`[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 Ye.start()}catch(e){y.warn({err:e},`[server] SyncEngine failed to start — sync disabled`),Ye=null}M(`files`),M(`backlinks`),M(`graph`),M(`tags`);let d=cX();d!==void 0&&lX(`readyMs`,d)}return et().then(xe,Se),{hocuspocus:j,sessionManager:le,cc1Broadcaster:ue,agentFocusBroadcaster:de,agentPresenceBroadcaster:fe,maintenanceCoordinator:se,contentFilter:re,basenameIndex:k,serverInstanceId:ee,destroy:Qe,ready:Ce,degraded:$e,lockDir:O,get syncEngine(){return Ye}}}function T9(e){return e/1048576}function pPe(){let e=process.memoryUsage();return{schemaVersion:1,capturedAt:new Date().toISOString(),snapshot:{rssMb:T9(e.rss),heapTotalMb:T9(e.heapTotal),heapUsedMb:T9(e.heapUsed),externalMb:T9(e.external),arrayBuffersMb:T9(e.arrayBuffers)}}}let E9=null,D9=null,O9=null;const k9=1e6;let A9=null,j9=null;EI(()=>{E9=null,D9=null,O9=null,A9?.disable(),A9=null,j9=null});function mPe(){if(E9)return;let e=kI().createObservableGauge(`ok.server.memory.usage_megabytes`,{description:`Server process memory by section. Bounded labels: section ∈ {heap_used, heap_total, rss, external, array_buffers}.`,unit:`MB`});e.addCallback(e=>{let{snapshot:t}=pPe();e.observe(t.heapUsedMb,{section:`heap_used`}),e.observe(t.heapTotalMb,{section:`heap_total`}),e.observe(t.rssMb,{section:`rss`}),e.observe(t.externalMb,{section:`external`}),e.observe(t.arrayBuffersMb,{section:`array_buffers`})}),E9=e}function hPe(){if(!D9){let e=kI().createObservableGauge(`ok.server.event_loop.delay_ms`,{description:`Event-loop delay percentiles over the last export window. Bounded labels: stat ∈ {p50, p99}.`,unit:`ms`});e.addCallback(e=>{if(!A9){A9=Mte({resolution:20}),A9.enable();return}e.observe(A9.percentile(50)/k9,{stat:`p50`}),e.observe(A9.percentile(99)/k9,{stat:`p99`}),A9.reset()}),D9=e}if(!O9){let e=kI().createObservableGauge(`ok.server.cpu.utilization`,{description:`Process CPU time as a fraction of wall time since the previous export. Bounded labels: mode ∈ {user, system}.`,unit:`1`});e.addCallback(e=>{let t=process.cpuUsage(),n=process.hrtime.bigint(),r=j9;if(j9={cpu:t,hrtimeNs:n},!r)return;let i=Number(n-r.hrtimeNs)/1e3;i<=0||(e.observe((t.user-r.cpu.user)/i,{mode:`user`}),e.observe((t.system-r.cpu.system)/i,{mode:`system`}))}),O9=e}}let M9=null,N9=!1;function P9(e=process.env){return e.OK_BRIDGE_TOLERANCE_TELEMETRY===`1`}function F9(e){if(!P9())return;let t=gH(e);M9=new QO({currentPath:z(t,`tolerance-telemetry.jsonl`),previousPath:z(t,`tolerance-telemetry.prev.jsonl`),maxBytes:8388608}),bt(e=>{let t={event:`bridge-tolerance-fire`,timestamp:e.timestamp,class:e.className,document:e.documentName??null,codeUnitPosition:e.codeUnitPosition,severity:e.severity};M9?.append(`${JSON.stringify(t)}\n`).catch(e=>{N9||(N9=!0,console.warn(`[tolerance-telemetry] append failed; further failures are silent:`,e instanceof Error?e.message:String(e)))})})}async function I9(){bt(null),await M9?.drain(),M9=null,N9=!1}I();const gPe=[`server.lock`,`ui.lock`,`state.json`,`principal.json`,`sync-state.json`,`conflicts.json`,`last-spawn-error.log`],_Pe=[`cache`,`tmp`];function vPe(e){let t=z(e,vt);if(!(()=>{if(!B(t))return!0;try{return fs(t).length===0}catch{return!0}})())return[];let n=[];for(let t of gPe)B(z(e,t))&&n.push(t);for(let t of _Pe){let r=z(e,t);try{B(r)&&vs(r).isDirectory()&&n.push(`${t}/`)}catch{}}return n}function yPe(e){let t=Qs(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 L9=5e3;async function bPe(e){Hge();let t=e.projectDir??e.contentDir,n=Zye({projectDir:t});if(n){let e=n.telemetry.attributeDenylist,t=[];for(let n of e){t.push(n);for(let e=1;e<=5;e++)t.push(`${`*.`.repeat(e)}${n}`)}lk.configure({pinoConfig:{fileSink:n.logs,redactPaths:t}})}CI({localSink:n?.telemetry}),F9(t),mPe(),hPe();let{kind:r,gitdir:i}=yPe(e.projectDir??e.contentDir),a={"ok.worktree.kind":r};i!==null&&(a[`ok.worktree.gitdir`]=HR(i));let o=Yye(t),s=process.env.OK_STARTUP_TRACEPARENT,c=()=>AI(`ok.boot`,{attributes:a},async()=>xPe(e)),l=()=>{if(s)try{let e=Mi.extract(Fi.active(),{traceparent:s});return Fi.with(e,c)}catch(e){H(`boot`).warn({err:e instanceof Error?e.message:String(e)},`ok.boot trace-join failed — starting unparented boot`)}return c()},u;try{u=await l()}catch(e){throw o.uninstall(),e}let d=u.destroy;return u.destroy=async()=>{try{await d()}finally{o.uninstall()}},u}async function xPe(e){let t=e.skipAutoInit??!1,n=e.attachUiSibling??!0,r=e.idleShutdownMs,i=e.log??H(`boot`),a=process.env.OK_LOCK_KIND===`mcp-spawned`||process.env.OK_LOCK_KIND===`interactive`?process.env.OK_LOCK_KIND:void 0,o=e.lockKind??a??`interactive`,{createServer:s}=await import(`node:http`),{markServerLockDraining:c,releaseServerLock:l,updateServerLockPort:u}=await import(`./server-lock-DOwBtoDC.mjs`),d=!1;if(!t&&e.autoInitFn)try{d=!!await e.autoInitFn()}catch(e){i.warn({err:e},`autoInitFn failed`)}let f=e.projectDir??e.contentDir,p=z(f,`.ok`);if(!B(z(p,`config.yml`)))throw new P5(B(p)?`config`:`okdir`,f);B(z(p,`.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 m=e.gitPreflight??WJ;try{e.gitEnabled!==!1&&m()}catch(e){if(e instanceof VJ||e instanceof HJ){let t=e instanceof HJ?e.detected:``,n=e instanceof HJ?`too_old`:`not_available`;YX(e),i.warn({event:`git_preflight_fail`,platform:e.platform,reason:n,detectedVersion:t},n===`not_available`?`git binary not found`:`git binary too old`),process.stderr.write(`${e.message}\n`)}throw await DI(),await Promise.race([I9(),new Promise(e=>setTimeout(e,L9))]),e}let h=vPe(p);h.length>0&&console.warn(`[boot] Found legacy runtime files at .ok/${h.join(`, `)}. Delete .ok/ and re-init — these files moved to .ok/${vt}/.`);let g=w9({contentDir:e.contentDir,projectDir:e.projectDir,contentRoot:e.contentRoot,port:e.port,host:e.host,quiet:e.quiet??!1,debounce:e.debounce,maxDebounce:e.maxDebounce,gitEnabled:e.gitEnabled,commitDebounceMs:e.commitDebounceMs,wipRef:e.wipRef,enableTestRoutes:e.enableTestRoutes,shadowRepo:e.shadowRepo,destroyTimeoutMs:e.destroyTimeoutMs,localOpCliArgs:e.localOpCliArgs,onAgentWrite:e.onAgentWrite,lockKind:o,skipStateManifestCheck:e.skipStateManifestCheck,detectGh:e.detectGh,tokenStore:e.tokenStore,embeddingsKeyStore:e.embeddingsKeyStore,singleDocRelPath:e.singleDocRelPath,ephemeral:e.ephemeral}),{hocuspocus:_,destroy:v,ready:y,degraded:b,lockDir:x,sessionManager:S,agentFocusBroadcaster:C,agentPresenceBroadcaster:w,maintenanceCoordinator:T}=g,E=(()=>{let t=e.host??`localhost`;return t===`0.0.0.0`||t===`::`?`localhost`:t.includes(`:`)&&!t.startsWith(`[`)?`[${t}]`:t})(),D=e.port??0,ee=e.ephemeral?void 0:O5({contentDir:e.contentDir,projectDir:e.projectDir??e.contentDir,config:e.config,getServerUrl:()=>`http://${E}:${D}`,log:i}),O=s();O.headersTimeout=3e4,O.requestTimeout=6e4;let k=e.serveContentAssets===!1?void 0:mH({contentFilter:g.contentFilter,contentSirv:ia(e.contentDir,{dev:!0,dotfiles:!1}),inlineExtensions:Dr,assetExtensions:Hr,blocklistExtensions:mn}),A=!1;if(e.reactShellDistDir)try{OY(x,{port:0,worktreeRoot:e.projectDir??e.contentDir}),A=!0}catch(e){if(e instanceof DY)i.info({event:`ui-lock-yielded-to-live-holder`,pid:process.pid,existingPid:e.existing.pid,existingPort:e.existing.port,lockDir:x},`ui.lock already held by a live process — yielding (advertisement is fulfilled)`);else throw await v().catch(()=>{}),l(x),e}let te=e.reactShellDistDir?ia(e.reactShellDistDir,{single:!0,gzip:!0,immutable:!0}):void 0,ne=A5({httpServer:O,hocuspocus:_,mcpHttpHandler:ee,log:i,sessionManager:S,agentFocusBroadcaster:C,agentPresenceBroadcaster:w,maintenanceCoordinator:T,keepaliveGraceMs:e.keepaliveGraceMs,contentAssetMiddleware:k,reactShellMiddleware:te,ephemeral:e.ephemeral}),re=async()=>{throw Error(`bootServer: destroy() invoked before initialization — boot did not complete`)},ie=null;r!==null&&(ie=XQ({httpServer:O,thresholdMs:r??18e5,log:i,onShutdown:(e.idleShutdownHandler??(e=>async()=>{await e()}))(async()=>{await re()})})),await R9({hocuspocus:_,projectDir:e.projectDir??e.contentDir,log:i});try{await new Promise((t,n)=>{let r=e=>n(e);O.once(`error`,r),O.listen(e.port,e.host,()=>{O.removeListener(`error`,r),t()})})}catch(e){if(A)try{jY(x)}catch(e){i.warn({err:e},`releaseUiLock failed during listen-error cleanup`)}throw await v().catch(()=>{}),l(x),e}let ae=cX();ae!==void 0&&lX(`httpListenMs`,ae);let oe=O.address(),se=typeof oe==`object`&&oe?oe.port:e.port??0;if(D=se,u(x,se),A&&kY(x,se),n&&e.spawnUiSiblingFn)try{await e.spawnUiSiblingFn({lockDir:x,log:i})}catch(e){i.warn({err:e},`spawnUiSiblingFn failed`)}let ce=!1,j=async(e,t)=>{let n;try{await Promise.race([t(),new Promise((t,r)=>{n=setTimeout(()=>{r(Error(`${e} timed out after ${L9}ms`))},L9),n.unref?.()})])}finally{n!==void 0&&clearTimeout(n)}};re=async()=>{if(ce)return;ce=!0;let e=[],t=async(t,n)=>{try{await j(t,n)}catch(n){e.push(n),i.warn({err:n,step:t},`bootServer destroy step failed`)}};try{c(x),A&&kge(x)}catch(e){i.warn({err:e,step:`markLocksDraining`},`bootServer destroy step failed`)}try{ie?.detach()}catch(t){e.push(t),i.warn({err:t,step:`idleHandle.detach`},`bootServer destroy step failed`)}if(await t(`mount.shutdown`,()=>ne.shutdown()),ee!==void 0&&await t(`mcpHttpHandler.close`,()=>ee.close()),await t(`mount.wss.close`,()=>new Promise((e,t)=>{ne.wss.close(n=>n?t(n):e())})),await t(`httpServer.closeAllConnections`,async()=>{O.closeAllConnections?.()}),await t(`httpServer.close`,()=>new Promise((e,t)=>{O.close(n=>n&&n.code!==`ERR_SERVER_NOT_RUNNING`?t(n):e())})),await t(`destroyHocuspocus`,()=>v()),A&&await t(`releaseUiLock`,async()=>jY(x,{deferUnlinkToExit:!0})),await t(`shutdownTelemetry`,()=>DI()),await t(`teardownToleranceTelemetry`,()=>I9()),await t(`flushLogFileSinks`,()=>lk.flushAllFileSinks()),e.length>0)throw AggregateError(e,`bootServer destroy completed with errors`)};try{let t=await CY({projectDir:f,skillsRoot:z(e.contentDir,`.ok`,`skills`)}),n=t.healed.length+t.adopted.length+t.replaced.length+t.collided.length+t.orphansRemoved.length;n>0&&i.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 ${n} editor skill entr${n===1?`y`:`ies`} to the symlink model.`)}catch(e){i.warn?.({event:`installed-skills-reconcile-failed`,error:String(e)},`Installed-skills reconcile failed (non-fatal).`)}return{httpServer:O,destroy:re,lockDir:x,contentDir:e.contentDir,port:se,ready:y,degraded:b,didAutoInit:d,serverInstance:g}}async function R9(e){let{hocuspocus:t,projectDir:n,log:r}=e,i,a;try{i=new qQ(n),a=i.list()}catch(e){r.warn({err:e,projectDir:n},`[boot] lifecycle restore: failed to read conflicts.json — skipping`);return}if(a.length===0)return;let o=null;try{let e=$s(n),t=e?L(e,`MERGE_HEAD`):null;if(!t||!B(t)){i.clear(),console.warn(JSON.stringify({event:`lifecycle-restore-cleared-stale-conflicts`,reason:`no-merge-head`,count:a.length}));return}let r=zi({baseDir:n,timeout:{block:5e3}});o=new Set(await Dz(r,[`diff`,`--name-only`,`--diff-filter=U`]))}catch(e){r.warn({err:e,projectDir:n},`[boot] lifecycle restore: git unmerged probe failed — restoring all entries`)}if(o!==null){let e=0;for(let t of a)o.has(t.file)||(i.removeConflict(t.file),e++);if(e>0&&console.warn(JSON.stringify({event:`lifecycle-restore-pruned-resolved-entries`,pruned:e,remaining:a.length-e})),a=a.filter(e=>o?.has(e.file)),a.length===0)return}for(let e of a){let n=qI(e.file),i=null,a=!1;try{i=await t.openDirectConnection(n);let e=i.document;if(!e)continue;let r=e.getMap(`lifecycle`);r.set(`status`,`conflict`),r.set(`reason`,`conflict-markers`),a=!0,console.warn(JSON.stringify({event:`lifecycle-restored-from-conflicts-json`,"doc.name":n}))}catch(e){r.warn({err:e,docName:n},`[boot] lifecycle restore: failed to set lifecycle for doc — skipping`)}finally{if(i)try{await i.disconnect()}catch(e){r.warn({err:e,docName:n,restored:a},`[boot] lifecycle restore: disconnect failed after lifecycle write`)}}}}const SPe=N;function CPe(e={}){let t=e.home??Ss(),n=e.platformName??process.platform,r=e.env??process.env;return n===`darwin`?B(L(t,`Library`,`Application Support`,`Claude`)):n===`win32`?B(L(r.APPDATA??L(t,`AppData`,`Roaming`),`Claude`)):!1}const z9=L(Ss(),`.ok`,`logs`),B9=[`authorization`,`password`,`token`,`apiKey`,`secret`,`*.authorization`,`*.password`,`*.token`,`*.apiKey`,`*.secret`];function wPe(){let e=process.env.OK_LOG_LEVEL??process.env.LOG_LEVEL;if(e){let t=[`fatal`,`error`,`warn`,`info`,`debug`],n=e.toLowerCase();if(t.includes(n))return n}return process.env.NODE_ENV===`test`?`silent`:`info`}function TPe(e){ss(e,{recursive:!0})}function V9(){return new Date().toISOString().slice(0,10)}function EPe(e){try{if(vs(e).size<5242880)return}catch{return}for(let t=2;t>=1;t--){let n=t===1?e:`${e}.${t-1}`,r=`${e}.${t}`;try{hs(n,r)}catch{}}try{bs(`${e}.3`)}catch{}}function DPe(e){try{let t=Date.now(),n=10080*60*1e3,r=fs(e).filter(e=>e.endsWith(`.log`)||/\.log\.\d+$/.test(e)).map(t=>{try{let n=vs(L(e,t));return{name:t,mtime:n.mtimeMs,size:n.size}}catch{return null}}).filter(Boolean);for(let i of r)if(t-i.mtime>n)try{bs(L(e,i.name))}catch{}let i=r.filter(e=>t-e.mtime<=n).sort((e,t)=>e.mtime-t.mtime),a=i.reduce((e,t)=>e+t.size,0);for(let t of i){if(a<=47185920)break;try{bs(L(e,t.name)),a-=t.size}catch{}}}catch{}}function OPe(e){TPe(z9);let t=V9(),n=e.filePath??L(z9,`${e.name}.${t}.log`);EPe(n),(e._setTimeout??setTimeout)(()=>DPe(z9),5e3).unref();let r=YO.default.destination({dest:n,append:!0,sync:!0});return(0,YO.default)({level:wPe(),name:e.name,redact:{paths:B9,censor:`[REDACTED]`},base:{pid:process.pid,hostname:void 0,runtime:`cli`,project:e.project??`<no-project>`},timestamp:YO.default.stdTimeFunctions.isoTime,...e.additionalOptions},r)}function kPe(e,t=250){return new Promise(n=>{if(!e){n();return}let r=e[YO.default.symbols.streamSym],i=!1,a=()=>{i||(i=!0,n())};if(!r||typeof r.flushSync!=`function`){a();return}let o=()=>{try{r.flushSync?.()}catch{}a()},s=setTimeout(a,t);typeof s.unref==`function`&&s.unref(),typeof r.fd==`number`&&r.fd>=0?(clearTimeout(s),o()):typeof r.once==`function`?r.once(`ready`,()=>{clearTimeout(s),o()}):(clearTimeout(s),o())})}function APe(e){return L(z9,`${e}.${V9()}.log`)}function jPe(){return z9}function MPe(e){let t=z(e),n=0;for(;n<30;){let e=!1;try{e=B(z(t,`.git`))}catch{e=!1}if(e)return{gitRoot:t,distance:n};let r=Go(t);if(r===t)return null;t=r,n+=1}return null}const H9=Ys(zo),U9=H(`project-git`);var W9=class extends Error{stderr;constructor(e,t=``,n){super(e,n),this.name=`ProjectGitInitError`,this.stderr=t}};async function NPe(e,t){try{let{stdout:n}=await H9(e,[`rev-parse`,`--is-inside-work-tree`],JB({cwd:t,encoding:`utf-8`}));return n.trim()===`true`}catch{return!1}}async function PPe(e){let t=z(e),n=z(t,`.git`),r=z(n,`HEAD`),i=!1;if(B(n)){if(!vs(n).isDirectory()||B(r))return{didInit:!1};U9.info({},`detected partial .git/ — running git init to repair`),i=!0}let a;try{a=WJ()}catch(e){throw e instanceof VJ||e instanceof HJ?(YX(e),U9.warn({event:`git_preflight_fail`,platform:e.platform,reason:e instanceof HJ?`too_old`:`not_available`,detectedVersion:e instanceof HJ?e.detected:``},e instanceof HJ?`git binary too old`:`git binary not found`)):U9.warn({event:`git_preflight_unexpected_error`,message:e instanceof Error?e.message:String(e)},`unexpected error during git preflight`),e}let o=a.resolvedPath;if(!i&&await NPe(o,t))return{didInit:!1};let s=``;try{s=(await H9(o,[`init`,`--initial-branch=main`,t],JB({encoding:`utf-8`}))).stderr??``}catch(e){let n=typeof e==`object`&&e&&`stderr`in e?String(e.stderr??``):``;throw new W9(`git init failed at ${t}: ${e instanceof Error?e.message:String(e)}`,n,{cause:e})}if(!B(r))throw new W9(`git init reported success but ${n}/HEAD is missing (partial init detected)`,s);return i?(U9.info({path:t},`backfilled missing .git/HEAD`),{didInit:!0,repaired:!0}):(U9.info({path:t,branch:`main`},`initialized .git/`),{didInit:!0})}const G9=H(`project-skill-git`),K9=/^[0-9a-f]{40}$/,FPe=Bn.map(e=>e.replace(/\/$/,``));async function IPe(e){let t=$s(e);if(t===null)return{kind:`skipped`,reason:`no-git`};if(BPe(t))return{kind:`skipped`,reason:`operation-in-progress`};let n=Bi(e);if((await q9(n)).length===0)return{kind:`nothing-tracked`};try{return await Ri(async()=>{let t=await LPe(n);if(t===null)return{kind:`skipped`,reason:`detached-head`};let r=await RPe(n);if(r===null)return{kind:`skipped`,reason:`unborn-head`};let i=await q9(n);if(i.length===0)return{kind:`nothing-tracked`};let a=Bi(e,{gitIndexFile:L(Ts(),`ok-untrack-idx-${process.pid}-${Date.now()}.idx`)});await a.git.raw([`read-tree`,r]),await a.git.raw([`rm`,`--cached`,`-r`,`--ignore-unmatch`,`--`,...i]);let o=(await a.git.raw([`write-tree`])).trim(),s=await zPe(n,r);if(s!==null&&s===o)return{kind:`nothing-tracked`};let c=await _X(e),l=c?.name??`OpenKnowledge`,u=c?.email??`sync@open-knowledge.local`;Hi(a,{GIT_AUTHOR_NAME:l,GIT_AUTHOR_EMAIL:u,GIT_COMMITTER_NAME:l,GIT_COMMITTER_EMAIL:u});let d=`Stop tracking the OpenKnowledge project skill\n\nThe \`${jr}\` skill is regenerated per machine and version-stamped per app build, so tracking it causes recurring sync conflicts. It is now git-ignored.`,f=(await a.git.raw([`commit-tree`,o,`-p`,r,`-m`,d])).trim();if(!K9.test(f))return G9.warn({raw:f},`commit-tree returned invalid SHA — aborting untrack`),{kind:`failed`,error:`commit-tree returned invalid SHA`};try{await n.git.raw([`update-ref`,`refs/heads/${t}`,f,r])}catch(e){return G9.info({branch:t,err:J9(e)},`update-ref CAS failed — ref moved, retry next open`),{kind:`skipped`,reason:`ref-race`}}try{await n.git.raw([`reset`,`-q`,f,`--`,...i])}catch(e){G9.info({err:J9(e)},`real-index reset after untrack failed (cosmetic)`)}return G9.info({dirs:i,commitSha:f},`untracked project-skill projection`),{kind:`untracked`,dirs:i,commitSha:f}})}catch(e){return{kind:`failed`,error:J9(e)}}}async function q9(e){let t=[];for(let n of FPe){let r=``;try{r=(await e.git.raw([`ls-files`,`--`,n])).trim()}catch{r=``}r.length>0&&t.push(n)}return t}async function LPe(e){try{let t=(await e.git.raw([`rev-parse`,`--abbrev-ref`,`HEAD`])).trim();return t.length===0||t===`HEAD`?null:t}catch{return null}}async function RPe(e){try{let t=(await e.git.raw([`rev-parse`,`--verify`,`HEAD`])).trim();return K9.test(t)?t:null}catch{return null}}async function zPe(e,t){try{let n=(await e.git.raw([`rev-parse`,`${t}^{tree}`])).trim();return K9.test(n)?n:null}catch{return null}}function BPe(e){return B(L(e,`MERGE_HEAD`))||B(L(e,`rebase-merge`))||B(L(e,`rebase-apply`))||B(L(e,`CHERRY_PICK_HEAD`))||B(L(e,`REVERT_HEAD`))}function J9(e){return e instanceof Error?e.message:String(e)}async function VPe(e,t){let n;try{n=Ro(t).resolve(e)}catch(e){if(e?.code===`MODULE_NOT_FOUND`)return;throw e}for(let t=Go(n),r=0;r<32;r+=1){let n=L(t,`package.json`);if(B(n))try{let t=JSON.parse(await Fs(n,`utf-8`));if(t.name===e&&typeof t.version==`string`)return t.version}catch{}let r=Go(t);if(r===t)return;t=r}}const HPe=[{regex:/\/Users\/[^/]+\//g,replacement:`~/`},{regex:/\/home\/[^/]+\//g,replacement:`~/`},{regex:/C:\\\\Users\\\\[^\\\\]+\\\\/g,replacement:`~\\`},{regex:/C:\\Users\\[^\\]+\\/g,replacement:`~\\`}];function Y9(e){if(e===void 0)return;let t=e;for(let{regex:e,replacement:n}of HPe)t=t.replace(e,n);return t}function X9(e,t=0,n=new WeakSet){if(t>=5)return{name:`SerializedError.CauseDepthExceeded`,message:`cause chain depth > 5; truncated`};if(typeof e==`object`&&e){if(n.has(e))return{name:`SerializedError.CauseCycle`,message:`cyclic cause; truncated`};n.add(e)}if(e instanceof Error)return{name:e.name,message:Y9(e.message)??``,stack:Y9(e.stack),code:e.code,cause:e.cause===void 0?void 0:X9(e.cause,t+1,n)};if(e==null)return{name:`UnknownError`,message:String(e)};if(typeof e==`string`)return{name:`StringError`,message:Y9(e)??e};if(typeof e==`object`){let r=e;return{name:String(r.name??`ObjectError`),message:Y9(String(r.message??``))??``,stack:Y9(r.stack),code:r.code,cause:r.cause===void 0?void 0:X9(r.cause,t+1,n)}}return{name:`UnknownError`,message:String(e)}}var Z9=class extends Error{constructor(e){super(`File not found: ${e}`),this.filePath=e,this.name=`SingleFileNotFoundError`}},Q9=class extends Error{constructor(e){super(`Not a file: ${e}. \`ok <file>\` opens a single markdown file.`),this.filePath=e,this.name=`SingleFileNotAFileError`}},$9=class extends Error{constructor(e){super(`OpenKnowledge edits markdown files (.md / .mdx): ${e}`),this.filePath=e,this.name=`SingleFileNotMarkdownError`}};function UPe(e){if(!GI(e))throw new $9(e);let t;try{t=ms(z(e))}catch(t){throw t.code===`ENOENT`?new Z9(e):t}if(!vs(t).isFile())throw new Q9(e);let n=Go(t),r=fX(n);if(r){let e=r.rootPath;return{mode:`project`,projectRoot:e,docName:qI(R(WPe(e),t).split(Xo).join(`/`)),canonicalFilePath:t}}let i=Uo(t);return{mode:`ephemeral`,canonicalFilePath:t,contentDir:n,singleDocRelPath:i,docName:qI(i)}}function WPe(e){return z(e,pP({absPath:lP(`project`,e),sideline:!1,warn:()=>{}}).value.content?.dir??`.`)}function GPe(e){let t=cs(z(Ts(),`ok-ephemeral-`)),n=z(t,`.ok`);return ss(n,{recursive:!0}),xs(z(n,`config.yml`),`# Ephemeral single-file session (\`ok <file>\`). Throwaway — safe to delete.\ncontent:\n dir: ${JSON.stringify(e)}\n`,`utf-8`),xs(z(n,`.gitignore`),`local/
|
|
3310
3310
|
`,`utf-8`),t}export{S4 as $,HI as $i,TK as $n,Wz as $r,TX as $t,s9 as A,xc as Aa,ez as Ai,CJ as An,IV as Ar,gZ as At,N5 as B,xR as Bi,Xq as Bn,_B as Br,QX as Bt,w9 as C,Gie as Ca,tz as Ci,NJ as Cn,gH as Cr,EZ as Ct,c9 as D,ek as Da,QR as Di,EJ as Dn,cH as Dr,yve as Dt,a9 as E,ak as Ea,qR as Ei,Uhe as En,mH as Er,xve as Et,G7 as F,oc as Fa,SR as Fi,mJ as Fn,yB as Fr,bZ as Ft,T5 as G,vL as Gi,VK as Gn,Qz as Gr,Z_e as Gt,A5 as H,yL as Hi,nJ as Hn,IB as Hr,$_e as Ht,W7 as I,Qs as Ia,TR as Ii,oJ as In,vB as Ir,_Z as It,O4 as J,iL as Ji,NK as Jn,Yz as Jr,vX as Jt,p5 as K,aL as Ki,HK as Kn,eB as Kr,X_e as Kt,rNe as L,ec as La,wR as Li,pJ as Ln,AB as Lr,cZ as Lt,X7 as M,Sc as Ma,YR as Mi,TJ as Mn,JB as Mr,SZ as Mt,U7 as N,rc as Na,CR as Ni,hJ as Nn,pB as Nr,yZ as Nt,r9 as O,tk as Oa,rz as Oi,DJ as On,JV as Or,xZ as Ot,hNe as P,nc as Pa,ER as Pi,gJ as Pn,kB as Pr,vZ as Pt,C4 as Q,BI as Qi,AK as Qn,Lz as Qr,s_e as Qt,L7 as R,Ede as Ri,$q as Rn,EB as Rr,lZ as Rt,I9 as S,H as Sa,XR as Si,LJ as Sn,ohe as Sr,Ove as St,n9 as T,ik as Ta,ZR as Ti,OJ as Tn,_H as Tr,dZ as Tt,j5 as U,bL as Ui,Dq as Un,DB as Ur,JX as Ut,P5 as V,Kle as Vi,tJ as Vn,OB as Vr,ZX as Vt,O5 as W,Qle as Wi,nq as Wn,hB as Wr,YX as Wt,P4 as X,zI as Xi,FK as Xn,Vz as Xr,wX as Xt,k4 as Y,WI as Yi,MK as Yn,Bz as Yr,CX as Yt,kwe as Z,UI as Zi,PK as Zn,Hz as Zr,bX as Zt,SPe as _,bk as _a,gz as _i,YJ as _n,GU as _r,aQ as _t,UPe as a,DI as aa,Kz as ai,tX as an,eG as ar,l4 as at,F9 as b,ck as ba,UR as bi,IJ as bn,mhe as br,HQ as bt,IPe as c,pP as ca,Mz as ci,AY as cn,cW as cr,z1 as ct,MPe as d,ice as da,wz as di,VJ as dn,dW as dr,M1 as dt,LI as ea,Fz as ei,n_e as en,kK as er,_4 as et,OPe as f,nce as fa,Cz as fi,HJ as fn,oW as fr,F1 as ft,CPe as g,Lk as ga,yz as gi,UJ as gn,WU as gr,oQ as gt,jPe as h,zk as ha,Yde as hi,QJ as hn,KU as hr,WQ as ht,GPe as i,MI as ia,Jz as ii,aX as in,XG as ir,d4 as it,t9 as j,Cc as ja,KR as ji,Whe as jn,GV as jr,bve as jt,o9 as k,Xte as ka,iz as ki,wJ as kn,FV as kr,hZ as kt,W9 as l,lP as la,xz as li,jY as ln,fW as lr,_1 as lt,APe as m,Vk as ma,bz as mi,WJ as mn,eW as mr,GQ as mt,Z9 as n,OI as na,Xz as ni,fX as nn,wK as nr,vwe as nt,X9 as o,AI as oa,qz as oi,DY as on,$W as or,u4 as ot,kPe as p,Hk as pa,Zde as pi,zJ as pn,ZU as pr,XQ as pt,D4 as q,W as qi,BK as qn,Ofe as qr,GX as qt,$9 as r,CI as ra,Pz as ri,dX as rn,WG as rr,ywe as rt,VPe as s,jI as sa,Zz as si,OY as sn,lW as sr,j2 as st,Q9 as t,kI as ta,zz as ti,a_e as tn,CK as tr,_we as tt,PPe as u,dP as ua,Sz as ui,kY as un,uW as ur,Vbe as ut,bPe as v,wae as va,vz as vi,KJ as vn,phe as vr,kye as vt,C9 as w,lk as wa,JR as wi,Xhe as wn,hH as wr,wZ as wt,P9 as x,Wie as xa,HR as xi,FJ as xn,ahe as xr,uQ as xt,R9 as y,uk as ya,_z as yi,RJ as yn,hhe as yr,Aye as yt,I7 as z,DR as zi,eJ as zn,xB as zr,$X as zt};
|
|
3311
|
-
//# sourceMappingURL=src-
|
|
3311
|
+
//# sourceMappingURL=src-_5Jz5f0v.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as e,f as t,r as n}from"./start-CA11ql1Y.mjs";export{n as bootStartServer,t as resolveHost,e as startCommand};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{I as e,N as t}from"./src-S2yxN8_s.mjs";import{Mr as n,a as r,br as i,rn as a}from"./src-lKxysm2m.mjs";import{n as o,t as s}from"./esm-EvSEzE_V.mjs";import{i as c,t as l}from"./gh-detect-Cdvn1Wl3.mjs";import{n as u}from"./constants-D6DS6fsP.mjs";import{spawn as d}from"node:child_process";import{basename as f,dirname as p,join as m}from"node:path";import{closeSync as h,existsSync as g,mkdirSync as _,openSync as v,statSync as y}from"node:fs";import{homedir as b}from"node:os";import{rm as x}from"node:fs/promises";import{setTimeout as S}from"node:timers/promises";function C(e){let t={...e};return delete t.ELECTRON_RUN_AS_NODE,t}function w(e,t,r={}){let i=(r.spawn??d)(e,[...t],n({detached:!0,stdio:`ignore`,env:C(r.env??process.env)}));return i.unref(),i}const T=`OpenKnowledge.app`,E=`/Applications/${T}`;function D(){return{platform:process.platform,env:process.env,execPath:process.execPath,isTTY:process.stdout.isTTY,statSync:e=>{try{return y(e,{throwIfNoEntry:!1})??null}catch{return null}}}}function O(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`){let t=/(.+?\.app)\/Contents\/MacOS\//.exec(e.execPath);if(t?.[1])return t[1]}if(k(e,E))return E;let t=m(e.homeDir??b(),`Applications`,T);return k(e,t)?t:null}function k(e,t){try{let n=m(t,`Contents`,`MacOS`,`OpenKnowledge`),r=e.statSync(n);return r&&typeof r.isFile==`function`?r.isFile():!1}catch{return!1}}function A(e){if(e.env.OK_FORCE_BROWSER===`1`)return{available:!1,reason:`force-browser`};if(e.platform!==`darwin`)return{available:!1,reason:`darwin-only`};let t;try{t=O(e)}catch{return{available:!1,reason:`stat-error`}}return t?e.env.OK_FORCE_DESKTOP===`1`?{available:!0,reason:`available`,bundlePath:t}:e.isTTY!==!0||e.env.SSH_CONNECTION||e.env.SSH_TTY?{available:!1,reason:`headless`,bundlePath:t}:{available:!0,reason:`available`,bundlePath:t}:{available:!1,reason:`no-bundle`}}function j(e){(e.log??(e=>console.error(e)))("Launching OpenKnowledge desktop (use `ok start` for the browser server, or `OK_FORCE_BROWSER=1` to always skip)"),w(`open`,[`-b`,`com.inkeep.open-knowledge`],{spawn:e.spawn})}function M(e=`no-bundle`){switch(e){case`no-bundle`:return`Desktop app not found at ${E}. Install via DMG, or omit --mode for browser mode.`;case`darwin-only`:return`Desktop app is macOS-only on this release. Use --mode=browser, or omit --mode for the server fallback.`;case`headless`:return`Desktop launch is gated in headless contexts (CI, SSH, non-TTY stdout). Set OK_FORCE_DESKTOP=1 to override, or use --mode=browser.`;case`force-browser`:return`OK_FORCE_BROWSER=1 is set — desktop dispatch is disabled. Unset it to use --mode=app.`;case`stat-error`:return`Failed to inspect desktop bundle at ${E} (filesystem error). Check permissions or use --mode=browser.`;case`available`:return`Desktop app appears available at ${E} but launch dispatch did not fire (caller bug).`}}function N(e){return m(p(e),`..`,`Frameworks`,`OpenKnowledge Server.app`,`Contents`,`MacOS`,`OpenKnowledge Helper`)}const P=/\/[^/]+\.app\/Contents\/MacOS\/[^/]+$/;function F(e){if(e.platform!==`darwin`||!P.test(e.execPath))return null;let t=N(e.execPath);return e.exists(t)?t:null}function I(e={}){let t=e.execPath??process.execPath,n=e.platform??process.platform,r=e.argv??process.argv,i=e.exists??g,a=r[1];return a?{command:F({execPath:t,platform:n,exists:i})??t,prefixArgs:[a]}:(console.warn(`[self-spawn] process.argv[1] is empty — falling back to \`npx -y @inkeep/open-knowledge@latest\`. This re-introduces the registry-fetch surface that re-exec was fixing. Observed argv: ${JSON.stringify(r)}`),{command:`npx`,prefixArgs:[`-y`,`@inkeep/open-knowledge@latest`]})}function L(e,t){return e.host??t.HOST??`127.0.0.1`}function R(e){let t=f(e).replace(/[^\x20-\x7E]/g,``).trim().slice(0,64);return`open-knowledge-server ${t.length>0?t:`unknown`}`}var z=class extends Error{cwd;constructor(e){super("This directory isn't set up yet. Run `ok init` first, then `ok start` again."),this.name=`OkDirMissingError`,this.cwd=e}};function B(e){return e.uiLock?e.isAlive(e.uiLock.pid)?{action:`skip`,reason:`alive`,pid:e.uiLock.pid,port:e.uiLock.port}:{action:`spawn`,reason:`stale`,stalePid:e.uiLock.pid}:{action:`spawn`,reason:`absent`}}function V(t){g(t.lockDir)||_(t.lockDir,{recursive:!0});let n=v(m(t.lockDir,e),`w`),r=t.spawn??d,{PORT:i,...a}=process.env,o=I();try{let e=r(o.command,[...o.prefixArgs,...t.args??[`ui`]],{detached:!0,stdio:[`ignore`,`ignore`,n],windowsHide:!0,cwd:t.cwd,env:{...a,ELECTRON_RUN_AS_NODE:`1`}});return e.unref(),e}finally{try{h(n)}catch{}}}function H(e,t,n){return e??(n===void 0?t:void 0)}function U(e,t){return e!==void 0&&t!==null&&t.port>0&&t.draining!==!0}function W(e,t,n){return e??+(t!=null&&!n)}async function G(e){let t=e.spawn??d,n=I(),{PORT:r,...i}=process.env,a=t(n.command,[...n.prefixArgs,`ui`,`--port`,String(e.uiPort)],{cwd:e.cwd,stdio:`inherit`,windowsHide:!0,env:{...i,ELECTRON_RUN_AS_NODE:`1`}}),o=!1,s=e=>{o=!0;try{a.kill(e)}catch{}},c=()=>s(`SIGINT`),l=()=>s(`SIGTERM`);process.once(`SIGINT`,c),process.once(`SIGTERM`,l),await new Promise(e=>{a.on(`exit`,(t,n)=>{process.exitCode=W(t,n,o),e()}),a.on(`error`,t=>{console.error(`[start] connect fallback: failed to spawn ok ui — ${t instanceof Error?t.message:String(t)}`),process.exitCode=1,e()})}),process.removeListener(`SIGINT`,c),process.removeListener(`SIGTERM`,l)}async function K(e){let t=e.now()+e.timeoutMs;for(;e.now()<t;){let t=e.readUiLock();if(t&&t.port>0)return t.port;await e.sleep(e.pollIntervalMs)}let n=e.readUiLock();return n&&n.port>0?n.port:null}const ee=t;function q(e,t,n=e=>x(e,{recursive:!0,force:!0})){return async()=>{try{await e()}finally{try{await n(t)}catch(e){process.stderr.write(`[start] ephemeral temp dir reap failed for ${t}: ${e instanceof Error?e.message:String(e)}\n`)}}}}function J(e,t={}){let n=t.exit??(e=>process.exit(e)),r=t.getActiveHandles??(()=>{let e=process._getActiveHandles;return e?e.call(process):null});return async()=>{let i=!1;try{await e()}catch(e){i=!0,t.log?.error({err:e},`idle-shutdown: destroy failed — exiting anyway`)}finally{let e=null;try{let t=r();if(t!==null){e={};for(let n of t){let t=n?.constructor?.name??`unknown`;e[t]=(e[t]??0)+1}}}catch{e=null}t.log?.info({event:`idle-shutdown-exit`,exitCode:+!!i,openHandles:e??{},handlesAvailable:e!==null},`idle-shutdown: teardown finished — exiting process`),n(+!!i)}}}function Y(e){let t=e.sigtermGraceMs??ee,n=e.sigtermPollIntervalMs??200,r=e.sleep??(e=>S(e));return async()=>{try{let i=e.readUiLock();if(i&&e.isAlive(i.pid))try{e.killPid(i.pid,`SIGTERM`),e.log?.info({pid:i.pid,port:i.port},`idle-shutdown: SIGTERM UI sibling`);let a=Date.now()+t;for(;Date.now()<a&&e.isAlive(i.pid);)await r(n);if(e.isAlive(i.pid))try{e.killPid(i.pid,`SIGKILL`),e.log?.warn({pid:i.pid,graceMs:t},`idle-shutdown: SIGTERM grace expired — escalated to SIGKILL`)}catch(t){e.log?.error({pid:i.pid,err:t instanceof Error?t.message:String(t)},`idle-shutdown: SIGKILL failed`)}}catch(t){e.log?.warn({pid:i.pid,err:t instanceof Error?t.message:String(t)},`idle-shutdown: failed to SIGTERM UI sibling`)}}catch(t){e.log?.warn({err:t instanceof Error?t.message:String(t)},`idle-shutdown: UI lookup failed; proceeding with destroy`)}await e.destroy()}}async function X(e){let{config:t,cwd:n,host:o}=e,s=e.skipAutoInit??!1,u=e.skipUiAutoSpawn??!1,d=e.idleThresholdMs??18e5,{existsSync:f,mkdirSync:p}=await import(`node:fs`),{basename:m,dirname:h}=await import(`node:path`),{bootServer:g,getLogger:_,isProcessAlive:v,readUiLock:y,resolveContentDir:b,resolveLockDir:x,waitForServerLockDrain:C}=await import(`./src-BmQ95pzm.mjs`),w=e.log??_(`start`),T=e.singleFile!==void 0,E=e.projectDir??n,D=T?r(e.singleFile).canonicalFilePath:void 0,O=D?h(D):void 0,k=D?m(D):void 0;if(!T){if(!s&&!a(n))throw new z(n);let t=process.env.OK_RECLAIM_DISABLE??null,r=e=>{let t=typeof e.event==`string`?e.event:``;(t.endsWith(`-failed`)||t.endsWith(`-error`)||t.endsWith(`-missing`))&&w.warn({event:e},`[start] reclaim sweep reported a problem`)};try{(e.repairMcpConfigsFn??(await import(`./repair-mcp-configs-OedQlL6h.mjs`)).repairMcpConfigs)({projectDir:n,reclaimDisableEnv:t,logger:r})}catch(e){w.warn({err:e},`[start] mcp-config repair sweep failed; continuing`)}try{(e.repairLaunchJsonFn??(await import(`./repair-launch-json-QkUwumCw.mjs`)).repairLaunchJson)({projectDir:n,reclaimDisableEnv:t,logger:r})}catch(e){w.warn({err:e},`[start] launch.json repair sweep failed; continuing`)}try{await(e.repairSkillsFn??(await import(`./repair-skills-B6wKeiXV.mjs`)).repairSkills)({projectDir:n,reclaimDisableEnv:t,logger:r})}catch(e){w.warn({err:e},`[start] skill repair sweep failed; continuing`)}}let A=O??b(t,n);!T&&!f(A)&&(p(A,{recursive:!0}),w.info({contentDir:A},`Created content directory`));let j=null,M=async({lockDir:t})=>{if(j=B({uiLock:y(t),isAlive:v}),j.action===`spawn`&&!u)try{let r=e.uiPort===void 0?void 0:[`ui`,`--port`,String(e.uiPort)];V({lockDir:t,cwd:n,spawn:e.spawn,args:r}),w.info({reason:j.reason,uiPort:e.uiPort},`[start] auto-spawned ok ui sibling`)}catch(e){console.warn(`[start] failed to auto-spawn ok ui: ${e instanceof Error?e.message:String(e)}`)}else j.action===`skip`&&w.info({port:j.port,pid:j.pid},`UI already running at port ${j.port}`)},N=e.reactShellDistDir===void 0,P=c(),F=i();{let e=x(T?E:n),t=Date.now(),r=await C(e);r!==`no-drain`&&w.info({event:`start-waited-for-draining-predecessor`,outcome:r,waitedMs:Date.now()-t,drainLockDir:e},r===`released`?`[start] predecessor server finished draining — proceeding`:`[start] predecessor server still draining after wait — proceeding to collide`)}let I=await g({config:t,contentDir:A,projectDir:T?E:n,contentRoot:T?void 0:t.content.dir,port:e.port,host:o,quiet:!1,detectGh:l,tokenStore:P,embeddingsKeyStore:F,...T?{ephemeral:!0,singleDocRelPath:k,gitEnabled:!1,gitPreflight:()=>({ok:!0,version:`0.0.0`,resolvedPath:`git`,source:`PATH`})}:{},localOpCliArgs:[process.execPath,process.argv[1]],attachUiSibling:N,idleShutdownMs:d,skipAutoInit:!0,...N?{spawnUiSiblingFn:M}:{},idleShutdownHandler:t=>{let n=Y({readUiLock:()=>y(I.lockDir),isAlive:v,killPid:(e,t)=>{process.kill(e,t)},destroy:t,log:w});return J(T?q(n,E):n,{log:w,exit:e.idleExit})},log:w,...e.serveContentAssets===void 0?{}:{serveContentAssets:e.serveContentAssets},...e.reactShellDistDir?{reactShellDistDir:e.reactShellDistDir}:{}});j||={action:`skip`,reason:`alive`,pid:0,port:0};let L=j,R=null;if(L.action===`skip`)R=L.port>0?L.port:null;else if(!u){let t=e.uiBindTimeoutMs??3e3;R=await K({readUiLock:()=>y(I.lockDir),now:Date.now,sleep:e=>S(e),timeoutMs:t,pollIntervalMs:50}),R===null&&w.warn({timeoutMs:t},`[start] ok ui did not bind within timeout — banner falls back to API URL`)}return{httpServer:I.httpServer,destroy:I.destroy,lockDir:I.lockDir,contentDir:A,port:I.port,ready:I.ready,degraded:I.degraded,uiSpawnDecision:j,resolvedUiPort:R}}function te(e){if(e===`browser`||e===`app`)return e;throw new o(`--mode must be 'browser' or 'app'`)}function ne(e){let t=Number.parseInt(e,10);if(Number.isNaN(t)||t<1||t>65535)throw new o(`--ui-port must be a port number between 1 and 65535`);return t}function Z(e){return e.OK_CONSOLE_LEVEL!==void 0||e.LOG_LEVEL!==void 0?null:`warn`}function Q(e){let t=[`Stopping OpenKnowledge…`,`Saving pending changes and releasing the server lock — this can take a few seconds.`];return e===`SIGINT`&&t.push(`Press Ctrl+C again to force quit.`),t}async function $(e,t){let n=Z(process.env);n!==null&&(process.env.OK_CONSOLE_LEVEL=n);let{renderBanner:r}=await import(`./banner-dc_0Y_PF.mjs`),{accent:i,dim:a,error:o,warning:s}=await import(`./colors-DUjg75V3.mjs`),c=process.cwd(),l=e;process.title=R(c);let d=L(t,process.env),f=t.port===void 0?void 0:Number(t.port),p=process.env.PORT?Number(process.env.PORT):void 0,m=t.uiPort===void 0?void 0:Number(t.uiPort),h=H(f,p,m);if(m!==void 0){let{readServerLock:e,resolveLockDir:t}=await import(`./src-BmQ95pzm.mjs`);if(U(m,e(t(c)))){await G({cwd:c,uiPort:m});return}}let g;try{g=await X({config:l,cwd:c,host:d,port:h,...m===void 0?{}:{uiPort:m},...t.serveContentAssets===void 0?{}:{serveContentAssets:t.serveContentAssets},...t.reactShellDistDir?{reactShellDistDir:t.reactShellDistDir}:{},...t.singleFile?{singleFile:t.singleFile}:{},...t.projectDir?{projectDir:t.projectDir}:{}})}catch(e){e instanceof z&&(console.error(o(e.message)),process.exit(1));let t=await import(`./src-BmQ95pzm.mjs`);if((e instanceof t.GitNotAvailableError||e instanceof t.GitTooOldError)&&process.exit(78),(e instanceof t.SingleFileNotFoundError||e instanceof t.SingleFileNotAFileError||e instanceof t.SingleFileNotMarkdownError)&&(console.error(o(e.message)),process.exit(1)),m!==void 0&&re(e,t)){await G({cwd:c,uiPort:m});return}let n=ie(e,c,t);n!==null&&(console.error(o(n)),process.exit(1)),console.error(`${o(`Failed to start:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exit(1)}let _=!1,v=async e=>{if(_)return;_=!0;let[t,...n]=Q(e);console.log(i(`\n${t}`));for(let e of n)console.log(a(` ${e}`));try{await g.destroy()}catch(e){console.error(`${o(`destroy() failed:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exitCode=1}process.exit(process.exitCode??0)};process.once(`SIGINT`,()=>{v(`SIGINT`)}),process.once(`SIGTERM`,()=>{v(`SIGTERM`)});let y=`http://${d}:${g.port}`,b=d===`0.0.0.0`||d===`::`?`http://0.0.0.0:${g.port}`:void 0,x=g.resolvedUiPort,S=x!==null&&x>0?`http://${d}:${x}`:y;console.log(r({name:`open-knowledge`,version:u,localUrl:S,apiUrl:S===y?void 0:y,networkUrl:b,nextSteps:[`Open the Editor URL in your browser to start editing.`]}));let C={"shadow-repo":`Version history and branch-switch safety unavailable`,"file-watcher":`External file changes will not sync to the editor`,"head-watcher":`Git branch switches may cause document inconsistency`};g.ready.then(async()=>{if(g.degraded.length>0){console.log();for(let e of g.degraded){let t=C[e]??`${e} (check server logs for details)`;console.warn(` ${s(`⚠`)} ${s(e)}: ${a(t)}`)}console.log()}if(t.open){let{openBrowser:e}=await import(`./open-browser-evOiSXMq.mjs`);e(S)}}).catch(e=>{console.error(` ${o(`Server initialization failed:`)} ${e instanceof Error?e.message:String(e)}`)})}function re(e,t){let n=t.ServerLockCollisionError;return n!==void 0&&e instanceof n}function ie(e,t,n){let r=n.ServerLockCollisionError;if(r===void 0||!(e instanceof r))return null;try{let e=m(t,`.ok`),r=n.readServerLock(e);return r?r.kind===`interactive`?`OpenKnowledge desktop is currently running on this project. Quit it or use --cwd to point elsewhere.`:r.kind===`mcp-spawned`?"An MCP-spawned server holds this lock; it should release on idle-shutdown (~30 min). Or run `ok stop`.":"OpenKnowledge server is already running on this project — check `ok status` or `ok stop`.":"OpenKnowledge server is already running on this project — check `ok status` or `ok stop`."}catch{return null}}function ae(e){return new s(`start`).description(`Start the knowledge base collab server`).option(`-p, --port <port>`,`Server port`,void 0).option(`--ui-port <port>`,`Pin the ok ui sibling to <port> and connect (not exit) if a server already runs here — the worktree-preview recipe path`,ne).option(`-H, --host <host>`,`Server host`,void 0).option(`--open`,`Open browser after start`).option(`--mode <mode>`,`Force dispatch mode: 'browser' or 'app'`,te).option(`--serve-content-assets`,`Serve content assets from this server (now the default; kept for compatibility)`).option(`--react-shell-dist-dir <path>`,`Serve React shell from <path> (suppresses ok ui sibling)`).option(`--single-file <path>`,`No-project ephemeral single-file mode: scope the server to one markdown file (git + MCP off)`).option(`--project-dir <dir>`,`Throwaway project root for --single-file (where ephemeral .ok/ state lives)`).action(async t=>{let n=e();if(t.mode===`app`){t.open&&(process.stderr.write(`error: option '--mode=app' cannot be combined with '--open' (--open opens a browser tab against the local server, which app mode does not boot)
|
|
1
|
+
import{I as e,N as t}from"./src-S2yxN8_s.mjs";import{Mr as n,a as r,br as i,rn as a}from"./src-_5Jz5f0v.mjs";import{n as o,t as s}from"./esm-EvSEzE_V.mjs";import{i as c,t as l}from"./gh-detect-Cdvn1Wl3.mjs";import{n as u}from"./constants-rx2xsPC5.mjs";import{spawn as d}from"node:child_process";import{basename as f,dirname as p,join as m}from"node:path";import{closeSync as h,existsSync as g,mkdirSync as _,openSync as v,statSync as y}from"node:fs";import{homedir as b}from"node:os";import{rm as x}from"node:fs/promises";import{setTimeout as S}from"node:timers/promises";function C(e){let t={...e};return delete t.ELECTRON_RUN_AS_NODE,t}function w(e,t,r={}){let i=(r.spawn??d)(e,[...t],n({detached:!0,stdio:`ignore`,env:C(r.env??process.env)}));return i.unref(),i}const T=`OpenKnowledge.app`,E=`/Applications/${T}`;function D(){return{platform:process.platform,env:process.env,execPath:process.execPath,isTTY:process.stdout.isTTY,statSync:e=>{try{return y(e,{throwIfNoEntry:!1})??null}catch{return null}}}}function O(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`){let t=/(.+?\.app)\/Contents\/MacOS\//.exec(e.execPath);if(t?.[1])return t[1]}if(k(e,E))return E;let t=m(e.homeDir??b(),`Applications`,T);return k(e,t)?t:null}function k(e,t){try{let n=m(t,`Contents`,`MacOS`,`OpenKnowledge`),r=e.statSync(n);return r&&typeof r.isFile==`function`?r.isFile():!1}catch{return!1}}function A(e){if(e.env.OK_FORCE_BROWSER===`1`)return{available:!1,reason:`force-browser`};if(e.platform!==`darwin`)return{available:!1,reason:`darwin-only`};let t;try{t=O(e)}catch{return{available:!1,reason:`stat-error`}}return t?e.env.OK_FORCE_DESKTOP===`1`?{available:!0,reason:`available`,bundlePath:t}:e.isTTY!==!0||e.env.SSH_CONNECTION||e.env.SSH_TTY?{available:!1,reason:`headless`,bundlePath:t}:{available:!0,reason:`available`,bundlePath:t}:{available:!1,reason:`no-bundle`}}function j(e){(e.log??(e=>console.error(e)))("Launching OpenKnowledge desktop (use `ok start` for the browser server, or `OK_FORCE_BROWSER=1` to always skip)"),w(`open`,[`-b`,`com.inkeep.open-knowledge`],{spawn:e.spawn})}function M(e=`no-bundle`){switch(e){case`no-bundle`:return`Desktop app not found at ${E}. Install via DMG, or omit --mode for browser mode.`;case`darwin-only`:return`Desktop app is macOS-only on this release. Use --mode=browser, or omit --mode for the server fallback.`;case`headless`:return`Desktop launch is gated in headless contexts (CI, SSH, non-TTY stdout). Set OK_FORCE_DESKTOP=1 to override, or use --mode=browser.`;case`force-browser`:return`OK_FORCE_BROWSER=1 is set — desktop dispatch is disabled. Unset it to use --mode=app.`;case`stat-error`:return`Failed to inspect desktop bundle at ${E} (filesystem error). Check permissions or use --mode=browser.`;case`available`:return`Desktop app appears available at ${E} but launch dispatch did not fire (caller bug).`}}function N(e){return m(p(e),`..`,`Frameworks`,`OpenKnowledge Server.app`,`Contents`,`MacOS`,`OpenKnowledge Helper`)}const P=/\/[^/]+\.app\/Contents\/MacOS\/[^/]+$/;function F(e){if(e.platform!==`darwin`||!P.test(e.execPath))return null;let t=N(e.execPath);return e.exists(t)?t:null}function I(e={}){let t=e.execPath??process.execPath,n=e.platform??process.platform,r=e.argv??process.argv,i=e.exists??g,a=r[1];return a?{command:F({execPath:t,platform:n,exists:i})??t,prefixArgs:[a]}:(console.warn(`[self-spawn] process.argv[1] is empty — falling back to \`npx -y @inkeep/open-knowledge@latest\`. This re-introduces the registry-fetch surface that re-exec was fixing. Observed argv: ${JSON.stringify(r)}`),{command:`npx`,prefixArgs:[`-y`,`@inkeep/open-knowledge@latest`]})}function L(e,t){return e.host??t.HOST??`127.0.0.1`}function R(e){let t=f(e).replace(/[^\x20-\x7E]/g,``).trim().slice(0,64);return`open-knowledge-server ${t.length>0?t:`unknown`}`}var z=class extends Error{cwd;constructor(e){super("This directory isn't set up yet. Run `ok init` first, then `ok start` again."),this.name=`OkDirMissingError`,this.cwd=e}};function B(e){return e.uiLock?e.isAlive(e.uiLock.pid)?{action:`skip`,reason:`alive`,pid:e.uiLock.pid,port:e.uiLock.port}:{action:`spawn`,reason:`stale`,stalePid:e.uiLock.pid}:{action:`spawn`,reason:`absent`}}function V(t){g(t.lockDir)||_(t.lockDir,{recursive:!0});let n=v(m(t.lockDir,e),`w`),r=t.spawn??d,{PORT:i,...a}=process.env,o=I();try{let e=r(o.command,[...o.prefixArgs,...t.args??[`ui`]],{detached:!0,stdio:[`ignore`,`ignore`,n],windowsHide:!0,cwd:t.cwd,env:{...a,ELECTRON_RUN_AS_NODE:`1`}});return e.unref(),e}finally{try{h(n)}catch{}}}function H(e,t,n){return e??(n===void 0?t:void 0)}function U(e,t){return e!==void 0&&t!==null&&t.port>0&&t.draining!==!0}function W(e,t,n){return e??+(t!=null&&!n)}async function G(e){let t=e.spawn??d,n=I(),{PORT:r,...i}=process.env,a=t(n.command,[...n.prefixArgs,`ui`,`--port`,String(e.uiPort)],{cwd:e.cwd,stdio:`inherit`,windowsHide:!0,env:{...i,ELECTRON_RUN_AS_NODE:`1`}}),o=!1,s=e=>{o=!0;try{a.kill(e)}catch{}},c=()=>s(`SIGINT`),l=()=>s(`SIGTERM`);process.once(`SIGINT`,c),process.once(`SIGTERM`,l),await new Promise(e=>{a.on(`exit`,(t,n)=>{process.exitCode=W(t,n,o),e()}),a.on(`error`,t=>{console.error(`[start] connect fallback: failed to spawn ok ui — ${t instanceof Error?t.message:String(t)}`),process.exitCode=1,e()})}),process.removeListener(`SIGINT`,c),process.removeListener(`SIGTERM`,l)}async function K(e){let t=e.now()+e.timeoutMs;for(;e.now()<t;){let t=e.readUiLock();if(t&&t.port>0)return t.port;await e.sleep(e.pollIntervalMs)}let n=e.readUiLock();return n&&n.port>0?n.port:null}const ee=t;function q(e,t,n=e=>x(e,{recursive:!0,force:!0})){return async()=>{try{await e()}finally{try{await n(t)}catch(e){process.stderr.write(`[start] ephemeral temp dir reap failed for ${t}: ${e instanceof Error?e.message:String(e)}\n`)}}}}function J(e,t={}){let n=t.exit??(e=>process.exit(e)),r=t.getActiveHandles??(()=>{let e=process._getActiveHandles;return e?e.call(process):null});return async()=>{let i=!1;try{await e()}catch(e){i=!0,t.log?.error({err:e},`idle-shutdown: destroy failed — exiting anyway`)}finally{let e=null;try{let t=r();if(t!==null){e={};for(let n of t){let t=n?.constructor?.name??`unknown`;e[t]=(e[t]??0)+1}}}catch{e=null}t.log?.info({event:`idle-shutdown-exit`,exitCode:+!!i,openHandles:e??{},handlesAvailable:e!==null},`idle-shutdown: teardown finished — exiting process`),n(+!!i)}}}function Y(e){let t=e.sigtermGraceMs??ee,n=e.sigtermPollIntervalMs??200,r=e.sleep??(e=>S(e));return async()=>{try{let i=e.readUiLock();if(i&&e.isAlive(i.pid))try{e.killPid(i.pid,`SIGTERM`),e.log?.info({pid:i.pid,port:i.port},`idle-shutdown: SIGTERM UI sibling`);let a=Date.now()+t;for(;Date.now()<a&&e.isAlive(i.pid);)await r(n);if(e.isAlive(i.pid))try{e.killPid(i.pid,`SIGKILL`),e.log?.warn({pid:i.pid,graceMs:t},`idle-shutdown: SIGTERM grace expired — escalated to SIGKILL`)}catch(t){e.log?.error({pid:i.pid,err:t instanceof Error?t.message:String(t)},`idle-shutdown: SIGKILL failed`)}}catch(t){e.log?.warn({pid:i.pid,err:t instanceof Error?t.message:String(t)},`idle-shutdown: failed to SIGTERM UI sibling`)}}catch(t){e.log?.warn({err:t instanceof Error?t.message:String(t)},`idle-shutdown: UI lookup failed; proceeding with destroy`)}await e.destroy()}}async function X(e){let{config:t,cwd:n,host:o}=e,s=e.skipAutoInit??!1,u=e.skipUiAutoSpawn??!1,d=e.idleThresholdMs??18e5,{existsSync:f,mkdirSync:p}=await import(`node:fs`),{basename:m,dirname:h}=await import(`node:path`),{bootServer:g,getLogger:_,isProcessAlive:v,readUiLock:y,resolveContentDir:b,resolveLockDir:x,waitForServerLockDrain:C}=await import(`./src-DYZflqdx.mjs`),w=e.log??_(`start`),T=e.singleFile!==void 0,E=e.projectDir??n,D=T?r(e.singleFile).canonicalFilePath:void 0,O=D?h(D):void 0,k=D?m(D):void 0;if(!T){if(!s&&!a(n))throw new z(n);let t=process.env.OK_RECLAIM_DISABLE??null,r=e=>{let t=typeof e.event==`string`?e.event:``;(t.endsWith(`-failed`)||t.endsWith(`-error`)||t.endsWith(`-missing`))&&w.warn({event:e},`[start] reclaim sweep reported a problem`)};try{(e.repairMcpConfigsFn??(await import(`./repair-mcp-configs-yho_lu_J.mjs`)).repairMcpConfigs)({projectDir:n,reclaimDisableEnv:t,logger:r})}catch(e){w.warn({err:e},`[start] mcp-config repair sweep failed; continuing`)}try{(e.repairLaunchJsonFn??(await import(`./repair-launch-json-BzaW_t7r.mjs`)).repairLaunchJson)({projectDir:n,reclaimDisableEnv:t,logger:r})}catch(e){w.warn({err:e},`[start] launch.json repair sweep failed; continuing`)}try{await(e.repairSkillsFn??(await import(`./repair-skills-RJeC7Jd-.mjs`)).repairSkills)({projectDir:n,reclaimDisableEnv:t,logger:r})}catch(e){w.warn({err:e},`[start] skill repair sweep failed; continuing`)}}let A=O??b(t,n);!T&&!f(A)&&(p(A,{recursive:!0}),w.info({contentDir:A},`Created content directory`));let j=null,M=async({lockDir:t})=>{if(j=B({uiLock:y(t),isAlive:v}),j.action===`spawn`&&!u)try{let r=e.uiPort===void 0?void 0:[`ui`,`--port`,String(e.uiPort)];V({lockDir:t,cwd:n,spawn:e.spawn,args:r}),w.info({reason:j.reason,uiPort:e.uiPort},`[start] auto-spawned ok ui sibling`)}catch(e){console.warn(`[start] failed to auto-spawn ok ui: ${e instanceof Error?e.message:String(e)}`)}else j.action===`skip`&&w.info({port:j.port,pid:j.pid},`UI already running at port ${j.port}`)},N=e.reactShellDistDir===void 0,P=c(),F=i();{let e=x(T?E:n),t=Date.now(),r=await C(e);r!==`no-drain`&&w.info({event:`start-waited-for-draining-predecessor`,outcome:r,waitedMs:Date.now()-t,drainLockDir:e},r===`released`?`[start] predecessor server finished draining — proceeding`:`[start] predecessor server still draining after wait — proceeding to collide`)}let I=await g({config:t,contentDir:A,projectDir:T?E:n,contentRoot:T?void 0:t.content.dir,port:e.port,host:o,quiet:!1,detectGh:l,tokenStore:P,embeddingsKeyStore:F,...T?{ephemeral:!0,singleDocRelPath:k,gitEnabled:!1,gitPreflight:()=>({ok:!0,version:`0.0.0`,resolvedPath:`git`,source:`PATH`})}:{},localOpCliArgs:[process.execPath,process.argv[1]],attachUiSibling:N,idleShutdownMs:d,skipAutoInit:!0,...N?{spawnUiSiblingFn:M}:{},idleShutdownHandler:t=>{let n=Y({readUiLock:()=>y(I.lockDir),isAlive:v,killPid:(e,t)=>{process.kill(e,t)},destroy:t,log:w});return J(T?q(n,E):n,{log:w,exit:e.idleExit})},log:w,...e.serveContentAssets===void 0?{}:{serveContentAssets:e.serveContentAssets},...e.reactShellDistDir?{reactShellDistDir:e.reactShellDistDir}:{}});j||={action:`skip`,reason:`alive`,pid:0,port:0};let L=j,R=null;if(L.action===`skip`)R=L.port>0?L.port:null;else if(!u){let t=e.uiBindTimeoutMs??3e3;R=await K({readUiLock:()=>y(I.lockDir),now:Date.now,sleep:e=>S(e),timeoutMs:t,pollIntervalMs:50}),R===null&&w.warn({timeoutMs:t},`[start] ok ui did not bind within timeout — banner falls back to API URL`)}return{httpServer:I.httpServer,destroy:I.destroy,lockDir:I.lockDir,contentDir:A,port:I.port,ready:I.ready,degraded:I.degraded,uiSpawnDecision:j,resolvedUiPort:R}}function te(e){if(e===`browser`||e===`app`)return e;throw new o(`--mode must be 'browser' or 'app'`)}function ne(e){let t=Number.parseInt(e,10);if(Number.isNaN(t)||t<1||t>65535)throw new o(`--ui-port must be a port number between 1 and 65535`);return t}function Z(e){return e.OK_CONSOLE_LEVEL!==void 0||e.LOG_LEVEL!==void 0?null:`warn`}function Q(e){let t=[`Stopping OpenKnowledge…`,`Saving pending changes and releasing the server lock — this can take a few seconds.`];return e===`SIGINT`&&t.push(`Press Ctrl+C again to force quit.`),t}async function $(e,t){let n=Z(process.env);n!==null&&(process.env.OK_CONSOLE_LEVEL=n);let{renderBanner:r}=await import(`./banner-dc_0Y_PF.mjs`),{accent:i,dim:a,error:o,warning:s}=await import(`./colors-DUjg75V3.mjs`),c=process.cwd(),l=e;process.title=R(c);let d=L(t,process.env),f=t.port===void 0?void 0:Number(t.port),p=process.env.PORT?Number(process.env.PORT):void 0,m=t.uiPort===void 0?void 0:Number(t.uiPort),h=H(f,p,m);if(m!==void 0){let{readServerLock:e,resolveLockDir:t}=await import(`./src-DYZflqdx.mjs`);if(U(m,e(t(c)))){await G({cwd:c,uiPort:m});return}}let g;try{g=await X({config:l,cwd:c,host:d,port:h,...m===void 0?{}:{uiPort:m},...t.serveContentAssets===void 0?{}:{serveContentAssets:t.serveContentAssets},...t.reactShellDistDir?{reactShellDistDir:t.reactShellDistDir}:{},...t.singleFile?{singleFile:t.singleFile}:{},...t.projectDir?{projectDir:t.projectDir}:{}})}catch(e){e instanceof z&&(console.error(o(e.message)),process.exit(1));let t=await import(`./src-DYZflqdx.mjs`);if((e instanceof t.GitNotAvailableError||e instanceof t.GitTooOldError)&&process.exit(78),(e instanceof t.SingleFileNotFoundError||e instanceof t.SingleFileNotAFileError||e instanceof t.SingleFileNotMarkdownError)&&(console.error(o(e.message)),process.exit(1)),m!==void 0&&re(e,t)){await G({cwd:c,uiPort:m});return}let n=ie(e,c,t);n!==null&&(console.error(o(n)),process.exit(1)),console.error(`${o(`Failed to start:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exit(1)}let _=!1,v=async e=>{if(_)return;_=!0;let[t,...n]=Q(e);console.log(i(`\n${t}`));for(let e of n)console.log(a(` ${e}`));try{await g.destroy()}catch(e){console.error(`${o(`destroy() failed:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exitCode=1}process.exit(process.exitCode??0)};process.once(`SIGINT`,()=>{v(`SIGINT`)}),process.once(`SIGTERM`,()=>{v(`SIGTERM`)});let y=`http://${d}:${g.port}`,b=d===`0.0.0.0`||d===`::`?`http://0.0.0.0:${g.port}`:void 0,x=g.resolvedUiPort,S=x!==null&&x>0?`http://${d}:${x}`:y;console.log(r({name:`open-knowledge`,version:u,localUrl:S,apiUrl:S===y?void 0:y,networkUrl:b,nextSteps:[`Open the Editor URL in your browser to start editing.`]}));let C={"shadow-repo":`Version history and branch-switch safety unavailable`,"file-watcher":`External file changes will not sync to the editor`,"head-watcher":`Git branch switches may cause document inconsistency`};g.ready.then(async()=>{if(g.degraded.length>0){console.log();for(let e of g.degraded){let t=C[e]??`${e} (check server logs for details)`;console.warn(` ${s(`⚠`)} ${s(e)}: ${a(t)}`)}console.log()}if(t.open){let{openBrowser:e}=await import(`./open-browser-hDKVLhdi.mjs`);e(S)}}).catch(e=>{console.error(` ${o(`Server initialization failed:`)} ${e instanceof Error?e.message:String(e)}`)})}function re(e,t){let n=t.ServerLockCollisionError;return n!==void 0&&e instanceof n}function ie(e,t,n){let r=n.ServerLockCollisionError;if(r===void 0||!(e instanceof r))return null;try{let e=m(t,`.ok`),r=n.readServerLock(e);return r?r.kind===`interactive`?`OpenKnowledge desktop is currently running on this project. Quit it or use --cwd to point elsewhere.`:r.kind===`mcp-spawned`?"An MCP-spawned server holds this lock; it should release on idle-shutdown (~30 min). Or run `ok stop`.":"OpenKnowledge server is already running on this project — check `ok status` or `ok stop`.":"OpenKnowledge server is already running on this project — check `ok status` or `ok stop`."}catch{return null}}function ae(e){return new s(`start`).description(`Start the knowledge base collab server`).option(`-p, --port <port>`,`Server port`,void 0).option(`--ui-port <port>`,`Pin the ok ui sibling to <port> and connect (not exit) if a server already runs here — the worktree-preview recipe path`,ne).option(`-H, --host <host>`,`Server host`,void 0).option(`--open`,`Open browser after start`).option(`--mode <mode>`,`Force dispatch mode: 'browser' or 'app'`,te).option(`--serve-content-assets`,`Serve content assets from this server (now the default; kept for compatibility)`).option(`--react-shell-dist-dir <path>`,`Serve React shell from <path> (suppresses ok ui sibling)`).option(`--single-file <path>`,`No-project ephemeral single-file mode: scope the server to one markdown file (git + MCP off)`).option(`--project-dir <dir>`,`Throwaway project root for --single-file (where ephemeral .ok/ state lives)`).action(async t=>{let n=e();if(t.mode===`app`){t.open&&(process.stderr.write(`error: option '--mode=app' cannot be combined with '--open' (--open opens a browser tab against the local server, which app mode does not boot)
|
|
2
2
|
`),process.exit(2));let e=[];if(t.port!==void 0&&e.push(`--port`),t.uiPort!==void 0&&e.push(`--ui-port`),t.host!==void 0&&e.push(`--host`),e.length>0){let t=process.env.OK_LOG_LEVEL??`info`;(t===`debug`||t===`trace`)&&console.error(`--mode=app: ignoring ${e.join(`, `)}`)}let n=A(D());if(n.available){j({spawn:d});return}console.error(M(n.reason)),process.exit(1)}await $(n,t)})}export{A as C,D as S,w as T,ae as _,W as a,J as b,R as c,H as d,L as f,V as g,U as h,Y as i,Q as l,$ as m,K as n,G as o,Z as p,X as r,B as s,z as t,re as u,ie as v,j as w,I as x,q as y};
|
|
3
|
-
//# sourceMappingURL=start-
|
|
3
|
+
//# sourceMappingURL=start-CA11ql1Y.mjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{ea as e,oa as t,sa as n,ua as r}from"./src-S2yxN8_s.mjs";import{Bn as i,In as a,Vn as o,tr as ee}from"./src-
|
|
1
|
+
import{ea as e,oa as t,sa as n,ua as r}from"./src-S2yxN8_s.mjs";import{Bn as i,In as a,Vn as o,tr as ee}from"./src-_5Jz5f0v.mjs";import{basename as s,dirname as c,isAbsolute as l,join as u,posix as d,relative as te,resolve as f,sep as p,win32 as m}from"node:path";import{cpSync as ne,existsSync as h,lstatSync as re,mkdirSync as ie,readFileSync as g,realpathSync as _,rmSync as v,statSync as y}from"node:fs";import{homedir as b}from"node:os";const x=t,S=n,C=r,w=`node`,T={MCP_DEBUG:`1`,OK_LOG_FILE:`/tmp/ok-mcp.log`},E=`# ok-mcp-v1`,D=`# ok-mcp-v1
|
|
2
2
|
USER_BUNDLE="$HOME/Applications/OpenKnowledge.app/Contents/Resources/cli/bin/ok.sh"
|
|
3
3
|
[ -f "$USER_BUNDLE" ] && [ -x "$USER_BUNDLE" ] && exec "$USER_BUNDLE" mcp
|
|
4
4
|
BUNDLE="/Applications/OpenKnowledge.app/Contents/Resources/cli/bin/ok.sh"
|
|
@@ -33,4 +33,4 @@ foreach ($d in $dirs) {
|
|
|
33
33
|
}
|
|
34
34
|
[Console]::Error.WriteLine('OpenKnowledge: install Node.js 24+ (npm i -g @inkeep/open-knowledge), then restart your editor')
|
|
35
35
|
exit 127`,A=`// ok-pi-bridge`,j=`${A}-v1`,M=`ok-pi-managed-extension`;function N(e){if(typeof e!=`object`||!e)return!1;let t=e;if(t.command===`/bin/sh`){if(!Array.isArray(t.args)||t.args[0]!==`-l`||t.args[1]!==`-c`)return!1;let e=t.args[2];return typeof e==`string`&&e.includes(`# ok-mcp-v1`)}if(t.command===`powershell`){if(!Array.isArray(t.args)||t.args[0]!==`-NoProfile`||t.args[1]!==`-NonInteractive`||t.args[2]!==`-Command`)return!1;let e=t.args[3];return typeof e==`string`&&e.includes(`# ok-mcp-win-v1`)}if(t.type===`local`&&Array.isArray(t.command)){if(t.command[0]===`/bin/sh`){if(t.command[1]!==`-l`||t.command[2]!==`-c`)return!1;let e=t.command[3];return typeof e==`string`&&e.includes(`# ok-mcp-v1`)}if(t.command[0]===`powershell`){if(t.command[1]!==`-NoProfile`||t.command[2]!==`-NonInteractive`||t.command[3]!==`-Command`)return!1;let e=t.command[4];return typeof e==`string`&&e.includes(`# ok-mcp-win-v1`)}return!1}if(t.command===`ok-pi-managed-extension`){if(!Array.isArray(t.args))return!1;let e=t.args[0];return typeof e==`string`&&e.startsWith(j)}return!1}function P(e=process.argv[1]){if(!e)throw Error(`Cannot infer the local CLI entry for --dev-mcp because process.argv[1] is empty.`);let t=f(e);if(s(t)===`cli.mjs`&&s(c(t))===`dist`)return t;let n=t.split(p),r=n.lastIndexOf(`packages`);if(r===-1||n[r+1]!==`cli`)throw Error(`Cannot infer the repo root for --dev-mcp from ${t}. Run the local CLI from this repo so the built dist path can be derived.`);let i=n.slice(0,r);return u(i.length===0?p:i.join(p),`packages`,`cli`,`dist`,`cli.mjs`)}function F(e={}){return e.mode===`dev`?{command:w,args:[P(),`mcp`],env:{...T}}:(e.platformName??process.platform)===`win32`?{command:`powershell`,args:[`-NoProfile`,`-NonInteractive`,`-Command`,k]}:{command:`/bin/sh`,args:[`-l`,`-c`,D]}}function ae(e={}){return e.mode===`dev`?{type:`local`,enabled:!0,command:[w,P(),`mcp`],environment:{...T}}:(e.platformName??process.platform)===`win32`?{type:`local`,enabled:!0,command:[`powershell`,`-NoProfile`,`-NonInteractive`,`-Command`,k]}:{type:`local`,enabled:!0,command:[`/bin/sh`,`-l`,`-c`,D]}}function oe(e){if(typeof e!=`object`||!e)return!1;let t=e;return I(t,F({mode:`published`,platformName:`darwin`}))||I(t,F({mode:`published`,platformName:`win32`}))}function I(e,t){if(Object.keys(e).length!==Object.keys(t).length||e.command!==t.command)return!1;let n=t.args;return!Array.isArray(n)||!Array.isArray(e.args)||e.args.length!==n.length?!1:e.args.every((e,t)=>e===n[t])}function L(e){return e===`win32`?m:d}function R(e={}){let t=e.platformName??process.platform,n=e.home??b(),r=e.env??process.env,i=L(t);return t===`darwin`?i.join(n,`Library`,`Application Support`):t===`win32`?r.APPDATA??i.join(n,`AppData`,`Roaming`):r.XDG_CONFIG_HOME??i.join(n,`.config`)}function z(e={}){let t=e.platformName??process.platform,n=e.home??b();return L(t).join(n,`.claude.json`)}function B(e={}){let t=e.platformName??process.platform,n=e.home??b(),r=e.env??process.env;if(t===`darwin`)return d.join(n,`Library`,`Application Support`,`Claude`,`claude_desktop_config.json`);if(t===`win32`){let e=r.APPDATA??m.join(n,`AppData`,`Roaming`);return m.join(e,`Claude`,`claude_desktop_config.json`)}throw Error(`Claude Desktop is not available on ${t}. Supported: macOS, Windows.`)}function V(e={}){let t=e.platformName??process.platform,n=e.home??b();return L(t).join(n,`.cursor`,`mcp.json`)}function H(e={}){let t=e.platformName??process.platform,n=e.home??b();return(e.env??process.env).CODEX_HOME??L(t).join(n,`.codex`)}function U(e={}){return L(e.platformName??process.platform).join(H(e),`config.toml`)}function W(e={}){let t=e.platformName??process.platform,n=e.home??b(),r=(e.env??process.env).COPILOT_HOME??L(t).join(n,`.copilot`);return L(t).join(r,`mcp-config.json`)}function G(e={}){let t=e.platformName??process.platform,n=e.home??b(),r=e.env??process.env,i=L(t);if(t===`win32`){let e=r.APPDATA??i.join(n,`AppData`,`Roaming`);return i.join(e,`opencode`)}let a=r.XDG_CONFIG_HOME??i.join(n,`.config`);return i.join(a,`opencode`)}function K(e={}){return L(e.platformName??process.platform).join(G(e),`opencode.json`)}function se(e={}){let t=e.platformName??process.platform,n=e.home??b();return L(t).join(n,`.openclaw`,`openclaw.json`)}function ce(e={}){let t=e.platformName??process.platform,n=e.home??b();return L(t).join(n,`.hermes`,`config.yaml`)}function le(e={}){let t=e.platformName??process.platform,n=e.home??b();return(e.env??process.env).PI_CODING_AGENT_DIR??L(t).join(n,`.pi`,`agent`)}function ue(e={}){let t=e.platformName??process.platform,n=e.home??b();return L(t).join(n,`.gemini`,`config`,`mcp_config.json`)}function de(e,t){let n=L(t),r=n.join(e,`.lmstudio`,`mcp.json`),i=n.join(e,`.cache`,`lm-studio`,`mcp.json`);return t===`darwin`?[i,r]:[r,i]}function q(e={}){let t=e.platformName??process.platform,n=de(e.home??b(),t);return n.find(e=>h(e))||n.find(e=>h(c(e)))||n[0]}const J={claude:{id:`claude`,label:S.claude,configPath:(e,t)=>z({home:t}),format:`json`,topLevelKey:`mcpServers`,serverName:()=>e,buildEntry:(e,t)=>F(t),scope:`global`,detectPath:(e,t)=>u(t??b(),`.claude`),projectConfigPath:e=>u(e,`.mcp.json`),projectSkillPath:e=>u(e,`.claude`,`skills`,`open-knowledge`,`SKILL.md`)},"claude-desktop":{id:`claude-desktop`,label:S[`claude-desktop`],configPath:(e,t)=>B({home:t}),format:`json`,topLevelKey:`mcpServers`,serverName:()=>e,buildEntry:(e,t)=>F(t),scope:`global`,detectPath:(e,t)=>c(B({home:t}))},cursor:{id:`cursor`,label:S.cursor,configPath:(e,t)=>V({home:t}),format:`json`,topLevelKey:`mcpServers`,serverName:()=>e,buildEntry:(e,t)=>F(t),scope:`global`,detectPath:(e,t)=>c(V({home:t})),projectConfigPath:e=>u(e,`.cursor`,`mcp.json`),projectSkillPath:e=>u(e,`.cursor`,`skills`,`open-knowledge`,`SKILL.md`)},codex:{id:`codex`,label:S.codex,configPath:(e,t)=>U({home:t}),format:`toml`,topLevelKey:`mcp_servers`,serverName:()=>e,buildEntry:(e,t)=>F(t),scope:`global`,detectPath:(e,t)=>c(U({home:t})),projectConfigPath:e=>u(e,`.codex`,`config.toml`),projectSkillPath:e=>u(e,`.codex`,`skills`,`open-knowledge`,`SKILL.md`)},copilot:{id:`copilot`,label:S.copilot,configPath:(e,t)=>W({home:t}),format:`json`,topLevelKey:`mcpServers`,serverName:()=>e,buildEntry:(e,t)=>F(t),scope:`global`,detectPath:(e,t)=>c(W({home:t})),projectSkillPath:e=>u(e,`.github`,`skills`,`open-knowledge`,`SKILL.md`)},opencode:{id:`opencode`,label:S.opencode,configPath:(e,t)=>K({home:t}),format:`json`,topLevelKey:`mcp`,serverName:()=>e,buildEntry:(e,t)=>ae(t),scope:`global`,detectPath:(e,t)=>c(K({home:t})),projectConfigPath:e=>u(e,`opencode.json`),projectSkillPath:e=>u(e,`.opencode`,`skills`,`open-knowledge`,`SKILL.md`)},openclaw:{id:`openclaw`,label:S.openclaw,configPath:(e,t)=>se({home:t}),format:`json`,topLevelKey:`mcp`,serverMapSubKey:`servers`,serverName:()=>e,buildEntry:(e,t)=>F(t),scope:`global`,detectPath:(e,t)=>u(t??b(),`.openclaw`),offerOnlyWhenDetected:!0},pi:{id:`pi`,label:S.pi,configPath:()=>{throw Error("Pi has no user-global MCP config; OK's integration is the project-scoped bridge extension at .pi/extensions/open-knowledge.ts (run `ok init` in the project).")},format:`file`,topLevelKey:`mcpServers`,serverName:()=>e,buildEntry:()=>{throw Error(`Pi has no MCP entry shape; the managed bridge file is built by buildPiExtensionSource (integrations/pi-extension.ts).`)},scope:`project`,detectPath:(e,t)=>le({home:t}),projectConfigPath:e=>u(e,`.pi`,`extensions`,`open-knowledge.ts`),projectSkillPath:e=>u(e,`.pi`,`skills`,`open-knowledge`,`SKILL.md`)},antigravity:{id:`antigravity`,label:S.antigravity,configPath:(e,t)=>ue({home:t}),format:`json`,topLevelKey:`mcpServers`,serverName:()=>e,buildEntry:(e,t)=>F(t),scope:`global`,detectPath:(e,t)=>u(t??b(),`.gemini`),offerOnlyWhenDetected:!0},"lm-studio":{id:`lm-studio`,label:S[`lm-studio`],configPath:(e,t)=>q({home:t}),format:`json`,topLevelKey:`mcpServers`,serverName:()=>e,buildEntry:(e,t)=>F(t),scope:`global`,detectPath:(e,t)=>c(q({home:t})),offerOnlyWhenDetected:!0},hermes:{id:`hermes`,label:S.hermes,configPath:(e,t)=>ce({home:t}),format:`yaml`,topLevelKey:`mcp_servers`,serverName:()=>e,buildEntry:(e,t)=>F(t),scope:`global`,detectPath:(e,t)=>u(t??b(),`.hermes`),offerOnlyWhenDetected:!0}};function fe(e){let t=e.filter(e=>!Object.hasOwn(J,e));if(t.length>0)throw Error(`Unknown editor(s): ${t.join(`, `)}. Valid options: ${x.join(`, `)}`);return e.map(e=>J[e])}function Y(e){let t=[];for(let n of o){let r=i[n];t.push({path:u(e,`.agents`,`skills`,r),bundleId:n,scope:`central`});for(let i of C)t.push({path:u(e,i.hostDir,`skills`,r),bundleId:n,scope:`host`,hostDir:i.hostDir})}return t}function pe(e,t){let n=[];for(let r of Y(e))if(r.bundleId===t)try{v(r.path,{recursive:!0,force:!0})}catch(e){n.push(e instanceof Error?e:Error(String(e)))}if(n.length>0)throw AggregateError(n,`Failed to remove ${n.length} path(s) for ${t}`)}function X(e,t){let n;try{n=re(e)}catch(e){if(e.code!==`ENOENT`)throw e}if(n?.isSymbolicLink())throw Error(`Refusing to write through a symbolic link at ${e}. Remove the symlink and re-run project setup.`);Q(e,t)}function Z(e,t){Q(e,t)}function Q(e,t){let n;try{n=_(t)}catch{n=f(t)}let r=c(e);for(;r.length>1&&r!==p;){let t;try{t=_(r)}catch(e){if(e.code===`ENOENT`){r=c(r);continue}throw e}let i=te(n,t);if(i===``||!i.startsWith(`..`)&&!l(i))return;throw Error(`Refusing to write at ${e}: ancestor ${r} resolves to ${t}, which is outside the project directory ${n}. A symbolic link in the path likely escapes the project. Remove the symlink and re-run project setup.`)}}function $(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function me(e,t,n){try{if(y(n).size>10485760)return!1}catch{return!1}let r;try{r=g(n,`utf-8`)}catch{return!1}let i=[],a=ee(r.charCodeAt(0)===65279?r.slice(1):r,i,{allowTrailingComma:!0,disallowComments:!1});if(i.length>0||!$(a))return!1;let o=a[e.topLevelKey];if(!$(o))return!1;let s=e.serverMapSubKey?o[e.serverMapSubKey]:o;return $(s)?$(s[e.serverName(t)]):!1}function he(e,t,n={}){if(e.id!==`copilot`)return!0;try{return me(e,t,e.configPath(t,n.home))}catch{return!1}}function ge(e,t,n={}){let r=e.projectSkillPath?.(t);if(!r)return{editorId:e.id,label:e.label,action:`skipped-unsupported`,path:``};if(!he(e,t,n))return{editorId:e.id,label:e.label,action:`skipped-prerequisite`,path:r};try{let n=a(`project`,{checkDesktop:!0}),i=c(r);X(i,t);let o=h(r)?`overwritten`:`written`;return v(i,{recursive:!0,force:!0}),ie(c(i),{recursive:!0}),ne(n,i,{recursive:!0}),{editorId:e.id,label:e.label,action:o,path:r}}catch(t){return{editorId:e.id,label:e.label,action:`failed`,path:r,error:t instanceof Error?t.message:String(t)}}}function _e(e,t){let n=e.projectSkillPath?.(t);if(!n)return{editorId:e.id,label:e.label,action:`skipped-unsupported`,path:``};try{let r=c(n);return h(n)?(Z(r,t),v(r,{recursive:!0,force:!0}),{editorId:e.id,label:e.label,action:`removed`,path:n}):{editorId:e.id,label:e.label,action:`not-present`,path:n}}catch(t){return{editorId:e.id,label:e.label,action:`failed`,path:n,error:t instanceof Error?t.message:String(t)}}}export{N as _,pe as a,fe as b,E as c,J as d,C as f,F as g,M as h,ge as i,O as l,j as m,Z as n,Y as o,A as p,_e as r,x as s,X as t,S as u,oe as v,R as y};
|
|
36
|
-
//# sourceMappingURL=write-project-skill-
|
|
36
|
+
//# sourceMappingURL=write-project-skill-DFZwle9U.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inkeep/open-knowledge",
|
|
3
|
-
"version": "0.35.1-beta.
|
|
3
|
+
"version": "0.35.1-beta.9",
|
|
4
4
|
"license": "GPL-3.0-or-later",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -61,10 +61,10 @@
|
|
|
61
61
|
"ajv-formats": "^3.0.1",
|
|
62
62
|
"tsdown": "^0.21.7",
|
|
63
63
|
"typescript": "^5.9.3",
|
|
64
|
-
"@inkeep/open-knowledge-
|
|
65
|
-
"@inkeep/open-knowledge-
|
|
64
|
+
"@inkeep/open-knowledge-core": "0.35.1-beta.9",
|
|
65
|
+
"@inkeep/open-knowledge-app": "0.35.1-beta.9",
|
|
66
66
|
"@inkeep/open-knowledge-native-config": "0.0.0",
|
|
67
|
-
"@inkeep/open-knowledge-server": "0.35.1-beta.
|
|
67
|
+
"@inkeep/open-knowledge-server": "0.35.1-beta.9"
|
|
68
68
|
},
|
|
69
69
|
"scripts": {
|
|
70
70
|
"build:cli": "tsdown",
|
package/dist/init-Dqbcvqq4.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{g as e}from"./init-WZEK9utJ.mjs";export{e as runInit};
|
package/dist/loader-Dw9TpNUA.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./loader-DqAZBnhp.mjs";export{e as loadConfig};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,t}from"./preview-DipvVs80.mjs";export{t as formatPreviewBlock,e as previewContent};
|