@inkeep/open-knowledge 0.4.0-beta.29 → 0.4.0-beta.30

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.
@@ -3,7 +3,7 @@ name: open-knowledge
3
3
  description: "MUST invoke when the project contains a .ok/ directory — before any read or edit of .md / .mdx files, any mcp__open-knowledge__ tool call, and any write_document / edit_document. Skip if no .ok/ — not an Open Knowledge project. Carries preview-attach (open preview browser at session start; one-shot on `action: attach-preview-once`), STOP rules for native Read/Grep/Edit on in-scope markdown, grounding rules (every factual claim needs a source), standard markdown linking with get_dead_links verification, image sourcing + alt-text + source-citation rules, folder-first organization with opt-in nested .ok/ frontmatter + templates, and the anti-pattern table. Authoritative — MCP server instructions and AGENTS.md overlap but do not substitute for the full attach rule, grounding rule, media rules, dead-link verification, and failure-mode guidance carried only here."
4
4
  compatibility: "Claude Code, Claude Desktop, Claude Cowork, Claude.ai web. Requires Open Knowledge MCP server + code execution."
5
5
  metadata:
6
- version: "0.4.0-beta.29"
6
+ version: "0.4.0-beta.30"
7
7
  author: "Inkeep"
8
8
  repository: "https://github.com/inkeep/open-knowledge"
9
9
  ---
package/dist/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{o as e}from"./chunk-FK9Q3tQk.mjs";import{t}from"./esm-CEs3LWY3.mjs";import{Dr as n,Er as r,Ln as i,Lr as a,On as o,Ot as s,Pr as c,Tr as l,Xr as u,Y as d,Zr as f,br as p,it as m,jr as h,mr as g,r as ee,vr as _,wr as v,yr as y}from"./dist-H3Ld-L-a.mjs";import{n as b,r as x,t as S}from"./dist-bundle-BSdjl7Rj.mjs";import{C as te,S as C,T as ne,_ as re,b as ie,g as ae,h as oe,r as se,v as w,w as ce,x as le,y as ue}from"./init-B3-z2S8e.mjs";import{c as de,f as fe,l as pe,n as me,s as T}from"./server-lock-D7DXNVql-BRVVzA6T.mjs";import{i as he}from"./git-handle-DwfYp_z--CfyPz4Dz.mjs";import{$ as ge,Br as _e,D as ve,Dn as ye,E as be,G as xe,Gn as Se,Gr as Ce,H as we,Hr as Te,Ir as Ee,Jn as De,Jr as Oe,Kt as ke,Ur as Ae,V as je,Vr as Me,Wr as Ne,an as Pe,it as Fe,m as Ie,on as Le,ot as Re,qr as ze,sr as Be,un as Ve,zn as He}from"./dist-Va4IjzRw.mjs";import{n as Ue}from"./constants-Vc8PoRm6.mjs";import{n as We,t as Ge}from"./loader-nzXlKCaJ.mjs";import{d as Ke,f as qe,l as Je,m as Ye,p as Xe,s as Ze}from"./start-_HvLGlDx.mjs";import{c as Qe,i as $e,n as E,o as D,r as O,s as k,t as A}from"./colors-BtKMHmBX.mjs";import"./src-DCHO3Oll.mjs";import{execFileSync as et,spawn as tt,spawnSync as j}from"node:child_process";import nt,{basename as rt,dirname as it,join as M,relative as at,resolve as N}from"node:path";import{closeSync as ot,existsSync as P,mkdirSync as st,mkdtempSync as ct,openSync as lt,readFileSync as F,readdirSync as ut,rmSync as dt,statSync as ft,unlinkSync as pt,writeFileSync as mt}from"node:fs";import ht from"node:process";import{homedir as gt,hostname as _t,tmpdir as vt}from"node:os";import{fileURLToPath as yt}from"node:url";import{AsyncLocalStorage as bt,AsyncResource as xt}from"node:async_hooks";import{stripVTControlCharacters as St,styleText as I}from"node:util";import*as Ct from"node:readline";import{randomUUID as wt}from"node:crypto";import{realpath as Tt}from"node:fs/promises";import{setTimeout as Et}from"node:timers/promises";import{createServer as Dt,request as Ot}from"node:http";import{createInterface as kt}from"node:readline/promises";var At=f();const jt=`open-knowledge`;var Mt=class{backend=`keyring`;async get(e){let{Entry:t}=await import(`@napi-rs/keyring`);try{let n=new t(jt,e).getPassword();return n==null?null:JSON.parse(n)}catch{return null}}async set(e,t,n,r){let{Entry:i}=await import(`@napi-rs/keyring`),a=new i(jt,e),o={login:t,token:n,...r};a.setPassword(JSON.stringify(o))}async clear(e){let{Entry:t}=await import(`@napi-rs/keyring`);try{new t(jt,e).deletePassword()}catch{}}},Nt=class{backend=`file`;authFile;constructor(e){this.authFile=e??M(gt(),`.ok`,`auth.yml`)}read(){if(!P(this.authFile))return{};try{return(0,At.parse)(F(this.authFile,`utf-8`))??{}}catch(e){let t=e instanceof Error?e.message:`unknown error`;return process.stderr.write(`[auth] Failed to parse ${this.authFile}: ${t}. Starting with empty credentials.\n`),{}}}write(e){let t=it(this.authFile);P(t)||st(t,{recursive:!0,mode:448}),mt(this.authFile,(0,At.stringify)(e),{mode:384})}async get(e){return this.read()[e]??null}async set(e,t,n,r){let i=this.read();i[e]={login:t,token:n,...r},this.write(i)}async clear(e){let t=this.read();delete t[e],this.write(t)}};async function Pt(e){try{let{Entry:e}=await import(`@napi-rs/keyring`);return new e(jt,`__probe__`),process.stderr.write(`[auth] token storage: OS keychain
2
+ import{o as e}from"./chunk-FK9Q3tQk.mjs";import{t}from"./esm-CEs3LWY3.mjs";import{Dr as n,Er as r,Ln as i,Lr as a,On as o,Ot as s,Pr as c,Tr as l,Xr as u,Y as d,Zr as f,br as p,it as m,jr as h,mr as g,r as ee,vr as _,wr as v,yr as y}from"./dist-H3Ld-L-a.mjs";import{n as b,r as x,t as S}from"./dist-bundle-BSdjl7Rj.mjs";import{C as te,S as C,T as ne,_ as re,b as ie,g as ae,h as oe,r as se,v as w,w as ce,x as le,y as ue}from"./init-DrfKz58U.mjs";import{c as de,f as fe,l as pe,n as me,s as T}from"./server-lock-D7DXNVql-BRVVzA6T.mjs";import{i as he}from"./git-handle-DwfYp_z--CfyPz4Dz.mjs";import{$ as ge,Br as _e,D as ve,Dn as ye,E as be,G as xe,Gn as Se,Gr as Ce,H as we,Hr as Te,Ir as Ee,Jn as De,Jr as Oe,Kt as ke,Ur as Ae,V as je,Vr as Me,Wr as Ne,an as Pe,it as Fe,m as Ie,on as Le,ot as Re,qr as ze,sr as Be,un as Ve,zn as He}from"./dist-Va4IjzRw.mjs";import{n as Ue}from"./constants-BY_EleLO.mjs";import{n as We,t as Ge}from"./loader-DKoWw50g.mjs";import{d as Ke,f as qe,l as Je,m as Ye,p as Xe,s as Ze}from"./start-CKupR8YG.mjs";import{c as Qe,i as $e,n as E,o as D,r as O,s as k,t as A}from"./colors-BtKMHmBX.mjs";import"./src-DL2x7ekf.mjs";import{execFileSync as et,spawn as tt,spawnSync as j}from"node:child_process";import nt,{basename as rt,dirname as it,join as M,relative as at,resolve as N}from"node:path";import{closeSync as ot,existsSync as P,mkdirSync as st,mkdtempSync as ct,openSync as lt,readFileSync as F,readdirSync as ut,rmSync as dt,statSync as ft,unlinkSync as pt,writeFileSync as mt}from"node:fs";import ht from"node:process";import{homedir as gt,hostname as _t,tmpdir as vt}from"node:os";import{fileURLToPath as yt}from"node:url";import{AsyncLocalStorage as bt,AsyncResource as xt}from"node:async_hooks";import{stripVTControlCharacters as St,styleText as I}from"node:util";import*as Ct from"node:readline";import{randomUUID as wt}from"node:crypto";import{realpath as Tt}from"node:fs/promises";import{setTimeout as Et}from"node:timers/promises";import{createServer as Dt,request as Ot}from"node:http";import{createInterface as kt}from"node:readline/promises";var At=f();const jt=`open-knowledge`;var Mt=class{backend=`keyring`;async get(e){let{Entry:t}=await import(`@napi-rs/keyring`);try{let n=new t(jt,e).getPassword();return n==null?null:JSON.parse(n)}catch{return null}}async set(e,t,n,r){let{Entry:i}=await import(`@napi-rs/keyring`),a=new i(jt,e),o={login:t,token:n,...r};a.setPassword(JSON.stringify(o))}async clear(e){let{Entry:t}=await import(`@napi-rs/keyring`);try{new t(jt,e).deletePassword()}catch{}}},Nt=class{backend=`file`;authFile;constructor(e){this.authFile=e??M(gt(),`.ok`,`auth.yml`)}read(){if(!P(this.authFile))return{};try{return(0,At.parse)(F(this.authFile,`utf-8`))??{}}catch(e){let t=e instanceof Error?e.message:`unknown error`;return process.stderr.write(`[auth] Failed to parse ${this.authFile}: ${t}. Starting with empty credentials.\n`),{}}}write(e){let t=it(this.authFile);P(t)||st(t,{recursive:!0,mode:448}),mt(this.authFile,(0,At.stringify)(e),{mode:384})}async get(e){return this.read()[e]??null}async set(e,t,n,r){let i=this.read();i[e]={login:t,token:n,...r},this.write(i)}async clear(e){let t=this.read();delete t[e],this.write(t)}};async function Pt(e){try{let{Entry:e}=await import(`@napi-rs/keyring`);return new e(jt,`__probe__`),process.stderr.write(`[auth] token storage: OS keychain
3
3
  `),new Mt}catch{return process.stderr.write(`[auth] token storage: file (~/.ok/auth.yml)
4
4
  `),new Nt(e)}}async function Ft(e,t,n){let r=It(await Lt(e)).host??``;if(!r)return 1;let i=await n.get(r);if(i==null)return 1;let a=e=>e.replace(/[\r\n]/g,``);return t.write(`username=${a(i.login)}\npassword=${a(i.token)}\n`),0}function It(e){let t={};for(let n of e.split(`
5
5
  `)){let e=n.trim();if(e===``)continue;let r=e.indexOf(`=`);r!==-1&&(t[e.slice(0,r)]=e.slice(r+1))}return t}function Lt(e){return new Promise((t,n)=>{let r=[];e.on(`data`,e=>r.push(e)),e.on(`end`,()=>t(Buffer.concat(r).toString(`utf-8`))),e.on(`error`,n)})}function Rt(e){let n=new t(`git-credential`);return n.description(`Git credential helper (git credential-helper protocol)`),n.command(`get`).description(`Lookup credentials from TokenStore (called by git)`).action(async()=>{let t=await e(),n=await Ft(process.stdin,process.stdout,t);process.exit(n)}),n}function zt(e){let t=e.endpoint.DEFAULTS;return/^https:\/\/(api\.)?github\.com$/.test(t.baseUrl)?`https://github.com`:t.baseUrl.replace(`/api/v3`,``)}async function Bt(e,t,n){let r={baseUrl:zt(e),headers:{accept:`application/json`},...n},i=await e(t,r);if(`error`in i.data){let n=new b(`${i.data.error_description} (${i.data.error}, ${i.data.error_uri})`,400,{request:e.endpoint.merge(t,r)});throw n.response=i,n}return i}async function Vt(e){let t=e.request||S,n={client_id:e.clientId};return`scopes`in e&&Array.isArray(e.scopes)&&(n.scope=e.scopes.join(` `)),Bt(t,`POST /login/device/code`,n)}async function Ht(e){let t=await Bt(e.request||S,`POST /login/oauth/access_token`,{client_id:e.clientId,device_code:e.code,grant_type:`urn:ietf:params:oauth:grant-type:device_code`}),n={clientType:e.clientType,clientId:e.clientId,token:t.data.access_token,scopes:t.data.scope.split(/\s+/).filter(Boolean)};if(`clientSecret`in e&&(n.clientSecret=e.clientSecret),e.clientType===`github-app`){if(`refresh_token`in t.data){let e=new Date(t.headers.date).getTime();n.refreshToken=t.data.refresh_token,n.expiresAt=Ut(e,t.data.expires_in),n.refreshTokenExpiresAt=Ut(e,t.data.refresh_token_expires_in)}delete n.scopes}return{...t,authentication:n}}function Ut(e,t){return new Date(e+t*1e3).toISOString()}async function Wt(e,t){let n=Gt(e,t.auth);if(n)return n;let{data:r}=await Vt({clientType:e.clientType,clientId:e.clientId,request:t.request||e.request,scopes:t.auth.scopes||e.scopes});await e.onVerification(r);let i=await qt(t.request||e.request,e.clientId,e.clientType,r);return e.authentication=i,i}function Gt(e,t){if(t.refresh===!0||!e.authentication)return!1;if(e.clientType===`github-app`)return e.authentication;let n=e.authentication;return(`scopes`in t&&t.scopes||e.scopes).join(` `)===n.scopes.join(` `)?n:!1}async function Kt(e){await new Promise(t=>setTimeout(t,e*1e3))}async function qt(e,t,n,r){try{let i={clientId:t,request:e,code:r.device_code},{authentication:a}=n===`oauth-app`?await Ht({...i,clientType:`oauth-app`}):await Ht({...i,clientType:`github-app`});return{type:`token`,tokenType:`oauth`,...a}}catch(i){if(!i.response)throw i;let a=i.response.data.error;if(a===`authorization_pending`)return await Kt(r.interval),qt(e,t,n,r);if(a===`slow_down`)return await Kt(r.interval+7),qt(e,t,n,r);throw i}}async function Jt(e,t){return Wt(e,{auth:t})}async function Yt(e,t,n,r){let i=t.endpoint.merge(n,r);if(/\/login\/(oauth\/access_token|device\/code)$/.test(i.url))return t(i);let{token:a}=await Wt(e,{request:t,auth:{type:`oauth`}});return i.headers.authorization=`token ${a}`,t(i)}var Xt=`0.0.0-development`;function Zt(e){let t=e.request||S.defaults({headers:{"user-agent":`octokit-auth-oauth-device.js/${Xt} ${x()}`}}),{request:n=t,...r}=e,i=e.clientType===`github-app`?{...r,clientType:`github-app`,request:n}:{...r,clientType:`oauth-app`,request:n,scopes:e.scopes||[]};if(!e.clientId)throw Error(`[@octokit/auth-oauth-device] "clientId" option must be set (https://github.com/octokit/auth-oauth-device.js#usage)`);if(!e.onVerification)throw Error(`[@octokit/auth-oauth-device] "onVerification" option must be a function (https://github.com/octokit/auth-oauth-device.js#usage)`);return Object.assign(Jt.bind(null,i),{hook:Yt.bind(null,i)})}async function Qt(e){let{clientId:t,scopes:n=[`repo`,`read:user`,`user:email`],onVerification:r,host:i}=e,a=i&&i!==`github.com`?`https://${i}/api/v3`:`https://api.github.com`,o=Zt({clientType:`oauth-app`,clientId:t,scopes:n,onVerification:async e=>{await r({verificationUri:e.verification_uri,userCode:e.user_code,expiresIn:e.expires_in,interval:e.interval})},request:a===`https://api.github.com`?void 0:(await import(`./dist-bundle-BmF5_Mcp.mjs`)).request.defaults({baseUrl:a})}),s;try{s=await o({type:`oauth`})}catch(e){if(e instanceof Error){let t=e.message.toLowerCase();throw t.includes(`access_denied`)?Error(`Device-flow authorization was denied.`):t.includes(`expired_token`)||t.includes(`timeout`)||t.includes(`timed out`)?Error(`Device-flow code expired before authorization — please try again.`):Error(`GitHub sign-in failed: ${e.message}`)}throw e}return{token:s.token,tokenType:s.tokenType,scopes:s.scopes??[]}}const $t={invalid_type:`invalid_type`,too_big:`too_big`,too_small:`too_small`,invalid_format:`invalid_format`,not_multiple_of:`not_multiple_of`,unrecognized_keys:`unrecognized_keys`,invalid_union:`invalid_union`,invalid_key:`invalid_key`,invalid_element:`invalid_element`,invalid_value:`invalid_value`,custom:`custom`};var en;(function(e){})(en||={});function tn(e){return a(g,e)}function nn(){return process.env.OPEN_KNOWLEDGE_GITHUB_CLIENT_ID??`Ov23liqlSd0V1MwR6rhI`}const rn=new Set([`gitlab.com`,`bitbucket.org`,`codeberg.org`,`gitea.com`,`sr.ht`,`sourcehut.org`]);function an(e){let t=e.toLowerCase().replace(/:\d+$/,``);rn.has(t)&&(process.stderr.write(`Error: ${e} is not a GitHub host. Only GitHub and GitHub Enterprise Server are supported.\n`),process.exit(1))}function on(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function sn(e,t,n=Qt){let r=nn(),{host:i,json:a}=e;an(i),a||process.stderr.write(`Logging in to ${i}…\n`);let o=await n({clientId:r,host:i===`github.com`?void 0:i,onVerification:e=>{e.userCode,e.verificationUri,a?on(!0,{type:`verification`,user_code:e.userCode,verification_uri:e.verificationUri,expires_in:e.expiresIn}):process.stderr.write(`Open: ${e.verificationUri}\nEnter code: ${e.userCode}\n`)}}),s=`unknown`,c,l;try{let e=i===`github.com`?`https://api.github.com`:`https://${i}/api/v3`,t=await fetch(`${e}/user`,{headers:{Authorization:`Bearer ${o.token}`,"User-Agent":`open-knowledge-cli`,Accept:`application/vnd.github+json`}});if(t.ok){let e=await t.json();s=e.login??s,c=e.name??void 0,l=e.email??void 0}}catch{}await t.set(i,s,o.token,{gitProtocol:`https`,name:c,email:l}),a?on(!0,{type:`complete`,host:i,login:s}):process.stderr.write(`✓ Logged in as ${s} on ${i}\n`)}function cn(e){return new t(`login`).description(`Authenticate with GitHub via Device Flow`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{await sn(t,await e())})}const ln=e=>e.name===`enter`||e.name===`return`;var un=class extends Error{name=`AbortPromptError`;message=`Prompt was aborted`;constructor(e){super(),this.cause=e?.cause}},dn=class extends Error{name=`CancelPromptError`;message=`Prompt was canceled`},fn=class extends Error{name=`ExitPromptError`},pn=class extends Error{name=`HookError`},mn=class extends Error{name=`ValidationError`};const hn=new bt;function gn(e){return{rl:e,hooks:[],hooksCleanup:[],hooksEffect:[],index:0,handleChange(){}}}function _n(e,t){let n=gn(e);return hn.run(n,()=>{function e(e){n.handleChange=()=>{n.index=0,e()},n.handleChange()}return t(e)})}function L(){let e=hn.getStore();if(!e)throw new pn(`[Inquirer] Hook functions can only be called from within a prompt`);return e}function vn(){return L().rl}function yn(e){return xt.bind((...t)=>{let n=L(),r=!1,i=n.handleChange;n.handleChange=()=>{r=!0};let a=e(...t);return r&&i(),n.handleChange=i,a})}function bn(e){let t=L(),{index:n}=t,r=e({get(){return t.hooks[n]},set(e){t.hooks[n]=e},initialized:n in t.hooks});return t.index++,r}function xn(){L().handleChange()}const Sn={queue(e){let t=L(),{index:n}=t;t.hooksEffect.push(()=>{t.hooksCleanup[n]?.();let r=e(vn());if(r!=null&&typeof r!=`function`)throw new mn(`useEffect return value must be a cleanup function or nothing.`);t.hooksCleanup[n]=r})},run(){let e=L();yn(()=>{e.hooksEffect.forEach(e=>{e()}),e.hooksEffect.length=0})()},clearAll(){let e=L();e.hooksCleanup.forEach(e=>{e?.()}),e.hooksEffect.length=0,e.hooksCleanup.length=0}};function Cn(e){return typeof e==`function`}function R(e){return bn(t=>{let n=xt.bind(function(e){t.get()!==e&&(t.set(e),xn())});if(t.initialized)return[t.get(),n];let r=Cn(e)?e():e;return t.set(r),[r,n]})}function wn(e,t){bn(n=>{let r=n.get();(!Array.isArray(r)||t.some((e,t)=>!Object.is(e,r[t])))&&Sn.queue(e),n.set(t)})}const Tn={prefix:{idle:I(`blue`,`?`),done:I(`green`,ne.tick)},spinner:{interval:80,frames:[`⠋`,`⠙`,`⠹`,`⠸`,`⠼`,`⠴`,`⠦`,`⠧`,`⠇`,`⠏`].map(e=>I(`yellow`,e))},style:{answer:e=>I(`cyan`,e),message:e=>I(`bold`,e),error:e=>I(`red`,`> ${e}`),defaultAnswer:e=>I(`dim`,`(${e})`),help:e=>I(`dim`,e),highlight:e=>I(`cyan`,e),key:e=>I(`cyan`,I(`bold`,`<${e}>`))}};function En(e){if(typeof e!=`object`||!e)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function Dn(...e){let t={};for(let n of e)for(let[e,r]of Object.entries(n)){let n=t[e];t[e]=En(n)&&En(r)?Dn(n,r):r}return t}function On(...e){return Dn(Tn,...e.filter(e=>e!=null))}function kn({status:e=`idle`,theme:t}){let[n,r]=R(!1),[i,a]=R(0),{prefix:o,spinner:s}=On(t);return wn(()=>{if(e===`loading`){let e,t=-1,n=setTimeout(()=>{r(!0),e=setInterval(()=>{t+=1,a(t%s.frames.length)},s.interval)},300);return()=>{clearTimeout(n),clearInterval(e)}}else r(!1)},[e]),n?s.frames[i]:typeof o==`string`?o:o[e===`loading`?`idle`:e]??o.idle}function An(e){return R({current:e})[0]}function jn(e){let t=An(e);t.current=e,wn(e=>{let n=!1,r=yn((r,i)=>{n||t.current(i,e)});return e.input.on(`keypress`,r),()=>{n=!0,e.input.removeListener(`keypress`,r)}},[])}var Mn=e(ce(),1);function Nn(e,t){return e.split(`
@@ -17,10 +17,10 @@ import{o as e}from"./chunk-FK9Q3tQk.mjs";import{t}from"./esm-CEs3LWY3.mjs";impor
17
17
  `),process.exit(1)}await t.set(r,c,a,{gitProtocol:`https`,name:l,email:u}),i?process.stdout.write(`${JSON.stringify({type:`complete`,host:r,login:c})}\n`):process.stderr.write(`✓ PAT stored for ${c} on ${r}\n`)}function Br(e){return new t(`pat`).description(`Store a Personal Access Token`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSON`,!1).action(async t=>{await zr(t,await e())})}async function Vr(e,t){let{host:n,json:r}=e;an(n);let i=await t.get(n);i??(process.stderr.write(`Not logged in to ${n}\n`),process.exit(1));let a=n===`github.com`?void 0:`https://${n}/api/v3`,o=new Rr({auth:i.token,...a?{baseUrl:a}:{}}),s=[];for await(let e of o.paginate.iterator(o.repos.listForAuthenticatedUser,{per_page:100,sort:`updated`}))for(let t of e.data)s.push({full_name:t.full_name,clone_url:t.clone_url,private:t.private});if(r)process.stdout.write(`${JSON.stringify({type:`repos`,host:n,repos:s})}\n`);else for(let e of s)process.stdout.write(`${e.full_name} ${e.clone_url}\n`)}function Hr(e){return new t(`repos`).description(`List accessible repositories`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSON`,!1).action(async t=>{await Vr(t,await e())})}async function Ur(e,t){let{host:n}=e;await t.clear(n),process.stderr.write(`✓ Signed out from ${n}\n`)}function Wr(e){return new t(`signout`).description(`Remove stored credentials`).option(`--host <host>`,`GitHub hostname`,`github.com`).action(async t=>{await Ur(t,await e())})}async function Gr(e,t){let{host:n,json:r}=e;an(n);let i=await t.get(n);i??(r?process.stdout.write(`${JSON.stringify({type:`status`,host:n,authenticated:!1})}\n`):process.stderr.write(`Not logged in to ${n}\n`),process.exit(1));let a=n===`github.com`?void 0:`https://${n}/api/v3`,o=new Rr({auth:i.token,...a?{baseUrl:a}:{}});try{let{data:e}=await o.users.getAuthenticated();r?process.stdout.write(`${JSON.stringify({type:`status`,host:n,authenticated:!0,login:e.login,name:e.name,email:e.email})}\n`):process.stderr.write(`✓ Logged in as ${e.login} on ${n}\n`)}catch{r?process.stdout.write(JSON.stringify({type:`status`,host:n,authenticated:!1,error:`token invalid`})+`
18
18
  `):process.stderr.write(`✗ Token invalid for ${n}\n`),process.exit(1)}}function Kr(e){return new t(`status`).description(`Show authentication status`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSON`,!1).action(async t=>{await Gr(t,await e())})}function qr(){let e=new t(`auth`);e.description(`GitHub authentication management`);let n=()=>Pt();return e.addCommand(cn(n)),e.addCommand(Kr(n)),e.addCommand(Hr(n)),e.addCommand(Wr(n)),e.addCommand(Br(n)),e.addCommand(Rt(n)),e}function B(e,t,n={}){let r=pe(e,t);if(!P(r))return{status:`missing`,lockPath:r};let i;try{i=JSON.parse(F(r,`utf-8`))}catch{return{status:`corrupt`,lockPath:r}}if(!i||typeof i!=`object`||!de(i.pid))return{status:`corrupt`,lockPath:r};let a=i;if(!(n.isAlive??T)(a.pid))return{status:`dead-pid`,lockPath:r,lock:a};let o=n.host??_t();return a.hostname===o?{status:`alive`,lockPath:r,lock:a}:{status:`foreign-host`,lockPath:r,lock:a}}function Jr(e,t){let n=[];for(let[r,i]of[[`server`,e],[`ui`,t]])(i.status===`dead-pid`||i.status===`corrupt`)&&n.push({name:r,lockPath:i.lockPath,reason:i.status});return{prune:n}}function Yr(e){let t=e.inspect??(t=>B(e.lockDir,t)),n=e.unlink??(e=>pt(e)),r=e.log??(e=>console.log(e)),i=e.error??(e=>console.error(e)),a=Jr(t(`server`),t(`ui`));if(a.prune.length===0)return r(`No stale locks.`),{pruned:[],failed:[]};let o=[],s=[];for(let e of a.prune)try{n(e.lockPath),o.push(e)}catch(t){s.push({target:e,error:t instanceof Error?t.message:String(t)})}if(o.length>0){let e=o.map(e=>`${e.name} (${e.reason})`).join(`, `);r(`Pruned ${o.length} stale lock${o.length===1?``:`s`}: ${e}`)}return s.length>0&&i(`Failed to prune: ${s.map(({target:e,error:t})=>`${e.name} (${e.lockPath}): ${t}`).join(`; `)}`),{pruned:o,failed:s}}function Xr(e){return new t(`clean`).description(`Prune stale / corrupt open-knowledge lock files (never touches live locks)`).action(()=>{e(),Yr({lockDir:De(process.cwd())}).failed.length>0&&(process.exitCode=1)})}function Zr(){try{let e=et(`gh`,[`auth`,`token`],{encoding:`utf-8`,stdio:[`ignore`,`pipe`,`pipe`],timeout:5e3}).trim();return e.length===0?{available:!1}:{available:!0,token:e}}catch{return{available:!1}}}async function Qr(e,t,n={},r=Zr){if(!n.skipGhDetect&&r().available)return{tier:`A`,credentialArgs:[`-c`,`credential.helper=!gh auth git-credential`]};let i=await t.get(e);return i==null?{tier:`none`,credentialArgs:[]}:{tier:i.gitProtocol===`ssh`?`C`:`B`,credentialArgs:[`-c`,`credential.helper=!open-knowledge auth git-credential`]}}function $r(e){return e.replace(/:\d+$/,``)}function ei(e){let t=e.trim();if(!t)return null;{let e=/^https?:\/\/([^/?#]+)\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t);if(e)return{protocol:`https`,hostname:$r(e[1]),owner:e[2],name:e[3]}}{let e=/^ssh:\/\/(?:[\w.-]+@)?([^/?#]+)\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t);if(e)return{protocol:`ssh`,hostname:$r(e[1]),owner:e[2],name:e[3]}}{let e=/^git:\/\/([^/?#]+)\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t);if(e)return{protocol:`git`,hostname:$r(e[1]),owner:e[2],name:e[3]}}{let e=/^(?:[\w.-]+@)?([\w.-]+):([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?$/.exec(t);if(e?.[1].includes(`.`)||e&&t.startsWith(`git@`))return{protocol:`ssh`,hostname:e[1],owner:e[2],name:e[3]}}{let e=/^git:([\w.-]+)\/([\w.\-~%]+)\/([\w.\-~%]+?)(?:\.git)?\/?$/.exec(t);if(e)return{protocol:`git`,hostname:e[1],owner:e[2],name:e[3]}}if(!t.includes(`://`)&&!t.includes(`@`)&&!t.startsWith(`/`)){let e=/^([\w.-]+)\/([\w.\-~%]+?)(?:\.git)?$/.exec(t);if(e)return{protocol:`https`,hostname:`github.com`,owner:e[1],name:e[2]}}return null}const ti=[[`count`,0,10],[`compress`,10,20],[`receiv`,20,60],[`resolv`,60,100]];function ni(e){let t=/^([\w ]+):\s+(\d+)%/.exec(e.trim());if(!t)return null;let n=t[1].toLowerCase(),r=Number(t[2]);for(let[e,i,a]of ti)if(n.includes(e))return{stage:t[1],pct:Math.round(i+r/100*(a-i))};return null}function V(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function ri(e,t,n,r=process.cwd()){let i=ei(e);if(!i)throw Error(`Invalid git URL: ${e}`);let a=t.dir?N(r,t.dir):N(r,i.name);if(P(a)&&ut(a).length>0)throw Error(`Target directory is not empty: ${a}`);let o=await Pt(),s=await Qr(i.hostname,o,{}),c=he({baseDir:r,config:s.credentialArgs.length>=2?[s.credentialArgs[1]]:[],unsafe:{allowUnsafeCredentialHelper:!0}}).env({GIT_TERMINAL_PROMPT:`0`}),l=-1;c.outputHandler((e,n,r)=>{r.on(`data`,e=>{let n=e.toString(`utf-8`);for(let e of n.split(`
19
19
  `)){let n=ni(e);n&&n.pct!==l&&(l=n.pct,V(t.json,{type:`progress`,pct:n.pct,stage:n.stage}),t.json||process.stderr.write(`\r Cloning… ${n.pct}%`))}})}),await c.clone(e,a,[`--progress`]),t.json||process.stderr.write(`
20
- `);try{let{runInit:e}=await import(`./init-BOu8bdIM.mjs`),n=await e({cwd:a,mcp:!1});if(n.contentUpdated.length>0){let e=`auto-init: updated ${n.contentUpdated.join(`, `)}`;t.json?V(!0,{type:`warning`,message:e}):process.stderr.write(` ${e}\n`)}}catch(e){let n=e instanceof Error?e.message:String(e);t.json?V(!0,{type:`warning`,message:`auto-init: ${n}`}):process.stderr.write(` auto-init: ${n}\n`)}try{ii(a)}catch(e){let n=e instanceof Error?e.message:String(e);t.json?V(!0,{type:`warning`,message:`git-exclude: ${n}`}):process.stderr.write(` git-exclude: ${n}\n`)}return a}function ii(e){let t=M(e,`.git`,`info`,`exclude`);if(!P(t))return`no-exclude`;let n=F(t,`utf-8`),r=new Set([`.ok`,`.ok/`,`/.ok`,`/.ok/`]);return n.split(`
20
+ `);try{let{runInit:e}=await import(`./init-BpTa5nQL.mjs`),n=await e({cwd:a,mcp:!1});if(n.contentUpdated.length>0){let e=`auto-init: updated ${n.contentUpdated.join(`, `)}`;t.json?V(!0,{type:`warning`,message:e}):process.stderr.write(` ${e}\n`)}}catch(e){let n=e instanceof Error?e.message:String(e);t.json?V(!0,{type:`warning`,message:`auto-init: ${n}`}):process.stderr.write(` auto-init: ${n}\n`)}try{ii(a)}catch(e){let n=e instanceof Error?e.message:String(e);t.json?V(!0,{type:`warning`,message:`git-exclude: ${n}`}):process.stderr.write(` git-exclude: ${n}\n`)}return a}function ii(e){let t=M(e,`.git`,`info`,`exclude`);if(!P(t))return`no-exclude`;let n=F(t,`utf-8`),r=new Set([`.ok`,`.ok/`,`/.ok`,`/.ok/`]);return n.split(`
21
21
  `).map(e=>e.trim()).some(e=>r.has(e))?`already-present`:(mt(t,`${n}${n.length===0||n.endsWith(`
22
22
  `)?``:`
23
- `}.ok/\n`,`utf-8`),`appended`)}function ai(e){return new t(`clone`).description(`Clone a git repository and open it`).argument(`<url>`,`Repository URL or owner/repo shorthand`).argument(`[dir]`,`Target directory (default: ./<repo-name>)`).option(`--json`,`Output JSONL progress events`,!1).action(async(t,n,r)=>{let i=e();try{let a=await ri(t,{json:r.json,dir:n},i);if(r.json)V(!0,{type:`complete`,dir:a});else{process.stderr.write(`✓ Cloned to ${a}\n`),process.chdir(a);let{startCommand:t}=await import(`./start-e6EurRTD.mjs`);await t(e).parseAsync([],{from:`user`})}}catch(e){let t=e instanceof Error?e.message:String(e);r.json?V(!0,{type:`error`,message:t}):process.stderr.write(`✗ ${t}\n`),process.exitCode=1}})}const oi=[[`sync`],[`persistence`,`debounceMs`],[`persistence`,`maxDebounceMs`],[`server`,`port`],[`content`,`include`],[`content`,`exclude`]];function si(e={}){let t=e.log??(e=>console.error(e)),n=e.error??(e=>console.error(e)),r=e.loadConfigFn??We;try{let{sources:n}=r(e.cwd);return t(`✓ Configuration valid (sources: ${n.length===0?`defaults only`:n.join(`, `)})`),{ok:!0}}catch(e){return n(e instanceof Error?e.message:String(e)),{ok:!1}}}function ci(e){let t=(0,At.parseDocument)(F(e,`utf-8`));if(t.errors.length>0)throw Error(`Could not parse ${e}: ${t.errors.map(e=>e.message).join(`; `)}`);let n=[];for(let e of oi)t.hasIn(e)&&n.push(e.join(`.`));return n}function li(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ui(e){let t={};for(let n of e){let e=t;for(let t=0;t<n.length-1;t++){let r=n[t],i=e[r],a=li(i)?i:{};e[r]=a,e=a}e[n[n.length-1]]=null}return t}async function di(e={}){let t=e.log??(e=>console.log(e)),n=e.error??(e=>console.error(e)),r=e.scope??`both`,a=e.dryRun??!1,o=e.cwd??process.cwd(),s=e.writeConfigPatchFn??Oe,c=[];(r===`project`||r===`both`)&&c.push({scope:`project`,absPath:ze(`project`,o,e.homedirOverride)}),(r===`user`||r===`both`)&&c.push({scope:`user`,absPath:ze(`user`,o,e.homedirOverride)});let l=[],u=!0;for(let{scope:t,absPath:n}of c){if(!P(n)){l.push({path:n,scope:t,found:[],removed:[]});continue}let r;try{r=ci(n)}catch(e){let r=e instanceof Error?e.message:String(e);l.push({path:n,scope:t,found:[],removed:[],error:r}),u=!1;continue}if(r.length===0||a){l.push({path:n,scope:t,found:r,removed:[]});continue}let c=await s({cwd:o,scope:t,patch:ui(oi.filter(e=>r.includes(e.join(`.`)))),homedirOverride:e.homedirOverride});if(!c.ok){l.push({path:n,scope:t,found:r,removed:[],error:i(c.error)}),u=!1;continue}l.push({path:n,scope:t,found:r,removed:r})}for(let e of l)e.error&&n(`✗ ${e.path}: ${e.error}`);let d=l.some(e=>e.error!==void 0),f=l.reduce((e,t)=>e+t.found.length,0);if(f===0&&!d)t(`No deprecated fields found.`);else if(f>0)for(let e of l)e.error||(e.found.length===0?t(` ${e.path}: no deprecated fields`):t(a?`[dry-run] ${e.path}: would remove ${e.found.length} field(s): ${e.found.join(`, `)}`:`✓ ${e.path}: removed ${e.removed.length} field(s): ${e.removed.join(`, `)}`));return{outcomes:l,ok:u}}function fi(){let e=new t(`config`).description(`Inspect and maintain Open Knowledge configuration files`);return e.command(`validate`).description(`Validate the merged config (defaults → user → project)`).action(()=>{si({}).ok||(process.exitCode=1)}),e.command(`migrate`).description(`Remove deprecated config fields (sync.*, persistence.{debounceMs,maxDebounceMs}, server.port, content.{include,exclude}) idempotently`).option(`--scope <scope>`,`Which scope to migrate: project | user | both`,`both`).option(`--dry-run`,`Preview without writing`,!1).action(async e=>{let t=e.scope;if(t!==`project`&&t!==`user`&&t!==`both`){console.error(`Invalid --scope: ${t}. Expected: project | user | both`),process.exitCode=2;return}(await di({scope:t,dryRun:e.dryRun})).ok||(process.exitCode=1)}),e}var H=e(Qe(),1);const U=2e3,pi=[/cli\.mjs/,/(^|[\s/])(open-knowledge|ok)\s+(start|mcp|ui)(\s|$)/,/(^|[\s/])bun([\s/]).*?(run dev|packages\/app|vite|hocuspocus)/,/(^|[\s/])node([\s/]).*?(packages\/(cli|app)|vite|hocuspocus)/];function mi(e){return pi.some(t=>t.test(e))}async function hi(){let e=j(`pgrep`,[`-a`,`-f`,`cli\\.mjs|open-knowledge|(^|[ /])ok[ ]+(start|mcp|ui)([ ]|$)|packages/(cli|app)|hocuspocus|vite`],{encoding:`utf-8`,timeout:U});if(!(e.error!=null&&e.error.code===`ENOENT`)){let t=e.stdout??``,n=gi(t);if(n.length>0||t.trim()===``)return n}let t=j(`ps`,[`-axo`,`pid,command`],{encoding:`utf-8`,timeout:U});return t.error!=null||!t.stdout?[]:_i(t.stdout)}function gi(e){let t=[];for(let n of e.split(`
23
+ `}.ok/\n`,`utf-8`),`appended`)}function ai(e){return new t(`clone`).description(`Clone a git repository and open it`).argument(`<url>`,`Repository URL or owner/repo shorthand`).argument(`[dir]`,`Target directory (default: ./<repo-name>)`).option(`--json`,`Output JSONL progress events`,!1).action(async(t,n,r)=>{let i=e();try{let a=await ri(t,{json:r.json,dir:n},i);if(r.json)V(!0,{type:`complete`,dir:a});else{process.stderr.write(`✓ Cloned to ${a}\n`),process.chdir(a);let{startCommand:t}=await import(`./start-BPfRyvzL.mjs`);await t(e).parseAsync([],{from:`user`})}}catch(e){let t=e instanceof Error?e.message:String(e);r.json?V(!0,{type:`error`,message:t}):process.stderr.write(`✗ ${t}\n`),process.exitCode=1}})}const oi=[[`sync`],[`persistence`,`debounceMs`],[`persistence`,`maxDebounceMs`],[`server`,`port`],[`content`,`include`],[`content`,`exclude`]];function si(e={}){let t=e.log??(e=>console.error(e)),n=e.error??(e=>console.error(e)),r=e.loadConfigFn??We;try{let{sources:n}=r(e.cwd);return t(`✓ Configuration valid (sources: ${n.length===0?`defaults only`:n.join(`, `)})`),{ok:!0}}catch(e){return n(e instanceof Error?e.message:String(e)),{ok:!1}}}function ci(e){let t=(0,At.parseDocument)(F(e,`utf-8`));if(t.errors.length>0)throw Error(`Could not parse ${e}: ${t.errors.map(e=>e.message).join(`; `)}`);let n=[];for(let e of oi)t.hasIn(e)&&n.push(e.join(`.`));return n}function li(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ui(e){let t={};for(let n of e){let e=t;for(let t=0;t<n.length-1;t++){let r=n[t],i=e[r],a=li(i)?i:{};e[r]=a,e=a}e[n[n.length-1]]=null}return t}async function di(e={}){let t=e.log??(e=>console.log(e)),n=e.error??(e=>console.error(e)),r=e.scope??`both`,a=e.dryRun??!1,o=e.cwd??process.cwd(),s=e.writeConfigPatchFn??Oe,c=[];(r===`project`||r===`both`)&&c.push({scope:`project`,absPath:ze(`project`,o,e.homedirOverride)}),(r===`user`||r===`both`)&&c.push({scope:`user`,absPath:ze(`user`,o,e.homedirOverride)});let l=[],u=!0;for(let{scope:t,absPath:n}of c){if(!P(n)){l.push({path:n,scope:t,found:[],removed:[]});continue}let r;try{r=ci(n)}catch(e){let r=e instanceof Error?e.message:String(e);l.push({path:n,scope:t,found:[],removed:[],error:r}),u=!1;continue}if(r.length===0||a){l.push({path:n,scope:t,found:r,removed:[]});continue}let c=await s({cwd:o,scope:t,patch:ui(oi.filter(e=>r.includes(e.join(`.`)))),homedirOverride:e.homedirOverride});if(!c.ok){l.push({path:n,scope:t,found:r,removed:[],error:i(c.error)}),u=!1;continue}l.push({path:n,scope:t,found:r,removed:r})}for(let e of l)e.error&&n(`✗ ${e.path}: ${e.error}`);let d=l.some(e=>e.error!==void 0),f=l.reduce((e,t)=>e+t.found.length,0);if(f===0&&!d)t(`No deprecated fields found.`);else if(f>0)for(let e of l)e.error||(e.found.length===0?t(` ${e.path}: no deprecated fields`):t(a?`[dry-run] ${e.path}: would remove ${e.found.length} field(s): ${e.found.join(`, `)}`:`✓ ${e.path}: removed ${e.removed.length} field(s): ${e.removed.join(`, `)}`));return{outcomes:l,ok:u}}function fi(){let e=new t(`config`).description(`Inspect and maintain Open Knowledge configuration files`);return e.command(`validate`).description(`Validate the merged config (defaults → user → project)`).action(()=>{si({}).ok||(process.exitCode=1)}),e.command(`migrate`).description(`Remove deprecated config fields (sync.*, persistence.{debounceMs,maxDebounceMs}, server.port, content.{include,exclude}) idempotently`).option(`--scope <scope>`,`Which scope to migrate: project | user | both`,`both`).option(`--dry-run`,`Preview without writing`,!1).action(async e=>{let t=e.scope;if(t!==`project`&&t!==`user`&&t!==`both`){console.error(`Invalid --scope: ${t}. Expected: project | user | both`),process.exitCode=2;return}(await di({scope:t,dryRun:e.dryRun})).ok||(process.exitCode=1)}),e}var H=e(Qe(),1);const U=2e3,pi=[/cli\.mjs/,/(^|[\s/])(open-knowledge|ok)\s+(start|mcp|ui)(\s|$)/,/(^|[\s/])bun([\s/]).*?(run dev|packages\/app|vite|hocuspocus)/,/(^|[\s/])node([\s/]).*?(packages\/(cli|app)|vite|hocuspocus)/];function mi(e){return pi.some(t=>t.test(e))}async function hi(){let e=j(`pgrep`,[`-a`,`-f`,`cli\\.mjs|open-knowledge|(^|[ /])ok[ ]+(start|mcp|ui)([ ]|$)|packages/(cli|app)|hocuspocus|vite`],{encoding:`utf-8`,timeout:U});if(!(e.error!=null&&e.error.code===`ENOENT`)){let t=e.stdout??``,n=gi(t);if(n.length>0||t.trim()===``)return n}let t=j(`ps`,[`-axo`,`pid,command`],{encoding:`utf-8`,timeout:U});return t.error!=null||!t.stdout?[]:_i(t.stdout)}function gi(e){let t=[];for(let n of e.split(`
24
24
  `)){let e=n.trim();if(!e)continue;let r=e.indexOf(` `);if(r===-1)continue;let i=e.slice(0,r),a=e.slice(r+1),o=Number.parseInt(i,10);!Number.isNaN(o)&&mi(a)&&t.push(o)}return t}function _i(e){let t=[],n=e.split(`
25
25
  `);for(let e=1;e<n.length;e++){let r=n[e]?.trim();if(!r)continue;let i=r.indexOf(` `);if(i===-1)continue;let a=r.slice(0,i),o=r.slice(i+1).trim(),s=Number.parseInt(a,10);!Number.isNaN(s)&&mi(o)&&t.push(s)}return t}function vi(e){let t=e.trim().split(/\s+/).filter(Boolean);for(let e of t){if(e.startsWith(`@`))continue;let t=rt(e);if(t===`open-knowledge`||t===`ok`||e.endsWith(`/packages/cli/src/cli.ts`)||e.endsWith(`/packages/cli/dist/cli.mjs`)||t===`cli.mjs`||t===`cli.ts`)return e}return null}function yi(e){let t=j(`ps`,[`-p`,String(e),`-o`,`command=`],{encoding:`utf-8`,timeout:U});return t.error!=null||!t.stdout?null:t.stdout.trim()||null}function bi(e){let t=j(`ps`,[`-p`,String(e),`-o`,`%cpu=,%mem=`],{encoding:`utf-8`,timeout:U});if(t.error!=null||!t.stdout)return null;let[n,r]=t.stdout.trim().split(/\s+/),i=Number.parseFloat(n??``),a=Number.parseFloat(r??``);return Number.isNaN(i)||Number.isNaN(a)?null:{cpuPercent:i,memPercent:a}}async function xi(e){let t=j(`lsof`,[`-p`,String(e),`-a`,`-d`,`cwd`,`-Fn`],{encoding:`utf-8`,timeout:U});if(t.error!=null)return null;let n=t.stdout??``;for(let e of n.split(`
26
26
  `))if(e.startsWith(`n`)&&e.length>1)return e.slice(1);return null}function Si(e){let t=[],n=e.split(`
@@ -56,7 +56,7 @@ setTimeout(() => process.exit(2), ${t+1e4});
56
56
  `)?c.slice(0,-1):c}),s=void 0,c=``,l=``}function m(e={}){a&&e.consume&&d(a),o=!0,s=void 0,c=``,l=``,a=``}return{feed:u,reset:m}}function so(e){let t=[],n=``,r=0;for(;r<e.length;){let i=e.indexOf(`\r`,r),a=e.indexOf(`
57
57
  `,r),o=-1;if(i!==-1&&a!==-1?o=Math.min(i,a):i===-1?a!==-1&&(o=a):o=i===e.length-1?-1:i,o===-1){n=e.slice(r);break}else{let n=e.slice(r,o);t.push(n),r=o+1,e[r-1]===`\r`&&e[r]===`
58
58
  `&&r++}}return[t,n]}var co=class extends TransformStream{constructor({onError:e,onRetry:t,onComment:n}={}){let r;super({start(i){r=oo({onEvent:e=>{i.enqueue(e)},onError(t){e===`terminate`?i.error(t):typeof e==`function`&&e(t)},onRetry:t,onComment:n})},transform(e){r.feed(e)}})}};const lo={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2};var J=class extends Error{constructor(e,t){super(`Streamable HTTP error: ${t}`),this.code=e}},uo=class{constructor(e,t){this._hasCompletedAuthFlow=!1,this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._requestInit=t?.requestInit,this._authProvider=t?.authProvider,this._fetch=t?.fetch,this._fetchWithInit=qi(t?.fetch,t?.requestInit),this._sessionId=t?.sessionId,this._reconnectionOptions=t?.reconnectionOptions??lo}async _authThenStart(){if(!this._authProvider)throw new q(`No auth provider`);let e;try{e=await La(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(e){throw this.onerror?.(e),e}if(e!==`AUTHORIZED`)throw new q;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){let e={};if(this._authProvider){let t=await this._authProvider.tokens();t&&(e.Authorization=`Bearer ${t.access_token}`)}this._sessionId&&(e[`mcp-session-id`]=this._sessionId),this._protocolVersion&&(e[`mcp-protocol-version`]=this._protocolVersion);let t=Ki(this._requestInit?.headers);return new Headers({...e,...t})}async _startOrAuthSse(e){let{resumptionToken:t}=e;try{let n=await this._commonHeaders();n.set(`Accept`,`text/event-stream`),t&&n.set(`last-event-id`,t);let r=await(this._fetch??fetch)(this._url,{method:`GET`,headers:n,signal:this._abortController?.signal});if(!r.ok){if(await r.body?.cancel(),r.status===401&&this._authProvider)return await this._authThenStart();if(r.status===405)return;throw new J(r.status,`Failed to open SSE stream: ${r.statusText}`)}this._handleSseStream(r.body,e,!0)}catch(e){throw this.onerror?.(e),e}}_getNextReconnectionDelay(e){if(this._serverRetryMs!==void 0)return this._serverRetryMs;let t=this._reconnectionOptions.initialReconnectionDelay,n=this._reconnectionOptions.reconnectionDelayGrowFactor,r=this._reconnectionOptions.maxReconnectionDelay;return Math.min(t*n**+e,r)}_scheduleReconnection(e,t=0){let n=this._reconnectionOptions.maxRetries;if(t>=n){this.onerror?.(Error(`Maximum reconnection attempts (${n}) exceeded.`));return}let r=this._getNextReconnectionDelay(t);this._reconnectionTimeout=setTimeout(()=>{this._startOrAuthSse(e).catch(n=>{this.onerror?.(Error(`Failed to reconnect SSE stream: ${n instanceof Error?n.message:String(n)}`)),this._scheduleReconnection(e,t+1)})},r)}_handleSseStream(e,t,n){if(!e)return;let{onresumptiontoken:r,replayMessageId:i}=t,a,o=!1,s=!1;(async()=>{try{let t=e.pipeThrough(new TextDecoderStream).pipeThrough(new co({onRetry:e=>{this._serverRetryMs=e}})).getReader();for(;;){let{value:e,done:n}=await t.read();if(n)break;if(e.id&&(a=e.id,o=!0,r?.(e.id)),e.data&&(!e.event||e.event===`message`))try{let t=Me.parse(JSON.parse(e.data));Ce(t)&&(s=!0,i!==void 0&&(t.id=i)),this.onmessage?.(t)}catch(e){this.onerror?.(e)}}(n||o)&&!s&&this._abortController&&!this._abortController.signal.aborted&&this._scheduleReconnection({resumptionToken:a,onresumptiontoken:r,replayMessageId:i},0)}catch(e){if(this.onerror?.(Error(`SSE stream disconnected: ${e}`)),(n||o)&&!s&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:a,onresumptiontoken:r,replayMessageId:i},0)}catch(e){this.onerror?.(Error(`Failed to reconnect: ${e instanceof Error?e.message:String(e)}`))}}})()}async start(){if(this._abortController)throw Error(`StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.`);this._abortController=new AbortController}async finishAuth(e){if(!this._authProvider)throw new q(`No auth provider`);if(await La(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!==`AUTHORIZED`)throw new q(`Failed to authorize`)}async close(){this._reconnectionTimeout&&=(clearTimeout(this._reconnectionTimeout),void 0),this._abortController?.abort(),this.onclose?.()}async send(e,t){try{let{resumptionToken:n,onresumptiontoken:r}=t||{};if(n){this._startOrAuthSse({resumptionToken:n,replayMessageId:Ne(e)?e.id:void 0}).catch(e=>this.onerror?.(e));return}let i=await this._commonHeaders();i.set(`content-type`,`application/json`),i.set(`accept`,`application/json, text/event-stream`);let a={...this._requestInit,method:`POST`,headers:i,body:JSON.stringify(e),signal:this._abortController?.signal},o=await(this._fetch??fetch)(this._url,a),s=o.headers.get(`mcp-session-id`);if(s&&(this._sessionId=s),!o.ok){let t=await o.text().catch(()=>null);if(o.status===401&&this._authProvider){if(this._hasCompletedAuthFlow)throw new J(401,`Server returned 401 after successful authentication`);let{resourceMetadataUrl:t,scope:n}=Va(o);if(this._resourceMetadataUrl=t,this._scope=n,await La(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!==`AUTHORIZED`)throw new q;return this._hasCompletedAuthFlow=!0,this.send(e)}if(o.status===403&&this._authProvider){let{resourceMetadataUrl:t,scope:n,error:r}=Va(o);if(r===`insufficient_scope`){let r=o.headers.get(`WWW-Authenticate`);if(this._lastUpscopingHeader===r)throw new J(403,`Server returned 403 after trying upscoping`);if(n&&(this._scope=n),t&&(this._resourceMetadataUrl=t),this._lastUpscopingHeader=r??void 0,await La(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetch})!==`AUTHORIZED`)throw new q;return this.send(e)}}throw new J(o.status,`Error POSTing to endpoint: ${t}`)}if(this._hasCompletedAuthFlow=!1,this._lastUpscopingHeader=void 0,o.status===202){await o.body?.cancel(),Ae(e)&&this._startOrAuthSse({resumptionToken:void 0}).catch(e=>this.onerror?.(e));return}let c=(Array.isArray(e)?e:[e]).filter(e=>`method`in e&&`id`in e&&e.id!==void 0).length>0,l=o.headers.get(`content-type`);if(c)if(l?.includes(`text/event-stream`))this._handleSseStream(o.body,{onresumptiontoken:r},!1);else if(l?.includes(`application/json`)){let e=await o.json(),t=Array.isArray(e)?e.map(e=>Me.parse(e)):[Me.parse(e)];for(let e of t)this.onmessage?.(e)}else throw await o.body?.cancel(),new J(-1,`Unexpected content type: ${l}`);else await o.body?.cancel()}catch(e){throw this.onerror?.(e),e}}get sessionId(){return this._sessionId}async terminateSession(){if(this._sessionId)try{let e=await this._commonHeaders(),t={...this._requestInit,method:`DELETE`,headers:e,signal:this._abortController?.signal},n=await(this._fetch??fetch)(this._url,t);if(await n.body?.cancel(),!n.ok&&n.status!==405)throw new J(n.status,`Failed to terminate session: ${n.statusText}`);this._sessionId=void 0}catch(e){throw this.onerror?.(e),e}}setProtocolVersion(e){this._protocolVersion=e}get protocolVersion(){return this._protocolVersion}async resumeStream(e,t){await this._startOrAuthSse({resumptionToken:e,onresumptiontoken:t?.onresumptiontoken})}};function fo(e){return(t,n)=>{if((n?.method??`GET`).toUpperCase()===`GET`)return globalThis.fetch(t,n);let r=new AbortController,i=setTimeout(()=>r.abort(Error(`MCP request timed out after ${e}ms`)),e),a=n?.signal instanceof AbortSignal?AbortSignal.any([n.signal,r.signal]):r.signal;return globalThis.fetch(t,{...n,signal:a}).finally(()=>clearTimeout(i))}}function po(e){if(e===void 0||e===``)return;let t=Number.parseInt(e,10);if(!(Number.isNaN(t)||t<=0))return t}function mo(e){return e===`0.0.0.0`||e===`::`?`localhost`:e.includes(`:`)&&!e.startsWith(`[`)?`[${e}]`:e}function ho(e,t){return`http://${mo(e)}:${t}/mcp`}function go(e,t){return`ws://${mo(e)}:${t}`}function _o(e){let t=new URL(e);return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.pathname=``,t.search=``,t.hash=``,t.toString().replace(/\/$/,``)}function vo(e,t){if(!(!e||e.port<=0)&&t(e.pid))return e.port}function yo(e){return P(e)?F(e,`utf-8`).trim():``}function bo(e,t){return`server did not start within ${e}ms${t?` stderr:\n${t}`:``}`}function xo(e){if(e&&typeof e==`object`&&`method`in e&&`id`in e)return e.id}function So(e){if(!e||typeof e!=`object`||!(`result`in e))return;let t=e.result;if(!t||typeof t!=`object`||!(`protocolVersion`in t))return;let n=t.protocolVersion;return typeof n==`string`?n:void 0}function Co(e,t){return{jsonrpc:`2.0`,id:e,error:{code:-32e3,message:t instanceof Error?t.message:String(t)}}}async function wo(e){let t=e.readLock??(()=>fe(e.lockDir)),n=e.isAlive??T,r=e.sleep??(e=>Et(e)),i=e.spawn??tt,a=e.readErrorLog??yo,o=e.openErrorLog??(e=>lt(e,`w`)),s=e.closeFd??ot,c=e.timeoutMs??5e3,l=e.pollIntervalMs??100;if(e.portOverride!==void 0){let t=Number.parseInt(e.portOverride,10);if(Number.isNaN(t)||t<=0)throw Error(`invalid --port value '${e.portOverride}' — HTTP MCP shim requires a positive port`);return ho(`localhost`,t)}let u=vo(t(),n);if(u!==void 0)return ho(`localhost`,u);if(e.envAutoStart===`0`)throw Error(`Open Knowledge server is not running and OK_MCP_AUTOSTART=0 disables auto-start.`);P(e.lockDir)||st(e.lockDir,{recursive:!0});let d=M(e.lockDir,`last-spawn-error.log`),f=o(d),p,m,h=Ke();try{try{p=i(h.command,[...h.prefixArgs,`start`],{detached:!0,stdio:[`ignore`,`ignore`,f],cwd:e.contentDir,env:{...process.env,OK_LOCK_KIND:`mcp-spawned`}}),p.on(`error`,e=>{m=e instanceof Error?e.message:String(e)}),p.unref()}catch(e){m=e instanceof Error?e.message:String(e)}}finally{try{s(f)}catch{}}let g=Date.now()+c;for(;Date.now()<g;){if(m){let e=a(d),t=e?` stderr:\n${e}`:``;throw Error(`spawn failed: ${m}${t}`)}await r(l);let e=vo(t(),n);if(e!==void 0)return ho(`localhost`,e)}if(m){let e=a(d),t=e?` stderr:\n${e}`:``;throw Error(`spawn failed: ${m}${t}`)}throw Error(bo(c,a(d)))}function To(e,t){if(e.portOverride!==void 0)return _o(t);let n=e.readLock??(()=>fe(e.lockDir)),r=e.isAlive??T,i=vo(n(),r);if(i!==void 0)return go(`localhost`,i)}async function Eo(e,t={}){let n=t.stderr??process.stderr,r=t.requestTimeoutMs??12e4,i=t.createStdioTransport?t.createStdioTransport(t.stdin,t.stdout):new Wi(t.stdin,t.stdout),a=t.createHttpTransport?t.createHttpTransport(new URL(e)):new uo(new URL(e),{fetch:fo(r),...t.connectionId===void 0?{}:{requestInit:{headers:{[be]:t.connectionId}}}}),o=!1,s=async()=>{o||(o=!0,t.onclose?.(),await Promise.allSettled([i.close(),a.close()]))};i.onerror=e=>{n.write(`[mcp-shim] stdio error: ${e.message}\n`)},a.onerror=e=>{n.write(`[mcp-shim] HTTP transport error: ${e.message}\n`)},i.onclose=()=>{s()},a.onclose=()=>{s()};let c=Promise.resolve();i.onmessage=e=>{c=c.then(async()=>{try{await a.send(e)}catch(t){let r=xo(e);if(r===void 0){n.write(`[mcp-shim] failed to forward stdio notification: ${t instanceof Error?t.message:String(t)}\n`);return}await i.send(Co(r,t)).catch(e=>{n.write(`[mcp-shim] failed to write stdio error response: ${e instanceof Error?e.message:String(e)}\n`)})}}).catch(e=>{n.write(`[mcp-shim] unexpected stdio forwarding failure: ${e instanceof Error?e.message:String(e)}\n`)})},a.onmessage=e=>{let t=So(e);t&&a.setProtocolVersion?.(t),i.send(e).catch(e=>{n.write(`[mcp-shim] failed to write stdio response: ${e instanceof Error?e.message:String(e)}\n`)})};try{await a.start(),await i.start()}catch(e){throw await s(),e}return{close:s}}async function Do(e){let t=e.stderr??process.stderr,n=e.bridgeFn??Eo,r=await wo(e),i=e.createConnectionId?.()??wt(),a=!1,o=(e.startKeepalive??Gi)({connectionId:i,resolveWsUrl:async()=>To(e,r),log:e=>t.write(`[mcp-shim] keepalive: ${e}\n`)});t.write(`[mcp-shim] proxying stdio to ${r}\n`);let s;try{s=await n(r,{stderr:t,connectionId:i,onclose:()=>{a||(o.close(),process.exit(0))}})}catch(e){throw o.close(),e}let c=()=>{a=!0,o.close(),s.close().finally(()=>{process.exit(0)})};process.once(`SIGINT`,c),process.once(`SIGTERM`,c)}function Oo(e){let t=N(e);for(;;){if(ko(M(t,`.ok`)))return t;let n=it(t);if(n===t)throw Error(`No Open Knowledge project found at or above ${e}. Pass an explicit \`cwd\` argument that points inside an OK project (a directory with a \`.ok/\`).`);t=n}}function ko(e){try{return ft(e).isDirectory()}catch(e){let t=e?.code;if(t===`ENOENT`||t===`ENOTDIR`)return!1;throw e}}function Ao(e){try{let t=new URL(e);return t.protocol===`file:`?yt(t):void 0}catch{return}}async function jo(e){if(!e.getClientCapabilities()?.roots)return;let t;try{t=await e.listRoots()}catch(t){e.log?.(`listRoots fallback failed: ${t instanceof Error?t.message:String(t)}`);return}let n=t.roots??[];if(n.length!==1)return;let r=Ao(n[0].uri);return r===void 0&&e.log?.(`single root URI not usable as fs path: ${n[0].uri}`),r}async function Mo(e,t){if(e!==void 0)return Oo(e);let n=await t();if(n!==void 0)return Oo(n);throw Error("`cwd` is required for tool calls against the global MCP server. Pass an absolute path inside an Open Knowledge project, or have the MCP client advertise a single root.")}async function No(e){let t=process.stderr,n=e.spawnTimeoutMs??po(process.env.OK_MCP_SPAWN_TIMEOUT_MS),r=e.envAutoStart??process.env.OK_MCP_AUTOSTART,i=Ge({startupCwd:e.startupCwd,startupConfig:e.startupConfig}),a=new _e({name:ve,version:me},{instructions:Re({dir:`.`})}),o=wt(),s={current:{connectionId:o,displayName:o,colorSeed:o}},c=new Map,l=e=>{if(c.has(e))return;let n=ke(e),r=Gi({connectionId:o,resolveWsUrl:async()=>To({lockDir:n,contentDir:e},``),log:n=>t.write(`[mcp] keepalive[${e}]: ${n}\n`)});c.set(e,r)},u=()=>jo({getClientCapabilities:()=>a.server.getClientCapabilities(),listRoots:()=>a.server.listRoots(),log:e=>t.write(`[mcp] ${e}\n`)}),d=e=>Mo(e,u),f=async e=>{let t;if(e===void 0){let e=await u();if(e===void 0)return;t=Oo(e)}else t=Oo(e);let a=await i(t),o=await wo({lockDir:ke(t),contentDir:Se(a,t),envAutoStart:r,...n===void 0?{}:{timeoutMs:n}});return l(t),o.replace(/\/mcp$/,``)};a.server.oninitialized=()=>{let e=a.server.getClientVersion(),t=Be(e?.name,o);s.current={connectionId:o,clientInfo:e?{name:t,version:e.version}:void 0,displayName:t,colorSeed:t}},He(a,{serverUrl:f,resolveCwd:d,config:i,identityRef:s});let p=new Wi,m=!1,h=async()=>{if(m)return;m=!0;for(let e of c.values())try{e.close()}catch(e){t.write(`[mcp] keepalive close error: ${e instanceof Error?e.message:String(e)}\n`)}c.clear();let e=await Promise.allSettled([a.close(),p.close()]);for(let n of e)if(n.status===`rejected`){let e=n.reason;t.write(`[mcp] shutdown close error: ${e instanceof Error?e.message:String(e)}\n`)}};await a.connect(p),t.write(`[mcp] global stdio server ready (per-call project routing)
59
- `);let g=()=>{h().finally(()=>{process.exit(0)})};return process.once(`SIGINT`,g),process.once(`SIGTERM`,g),{close:h}}function Po(e){return new t(`mcp`).description(`Start MCP stdio server for project knowledge base`).option(`-p, --port <port>`,`Override per-call routing and proxy stdio to this HTTP MCP port`,void 0).action(async t=>{try{let n=e(),r=process.cwd();if(t.port!==void 0){let e=po(process.env.OK_MCP_SPAWN_TIMEOUT_MS);await Do({lockDir:``,contentDir:``,portOverride:t.port,envAutoStart:process.env.OK_MCP_AUTOSTART,timeoutMs:e});return}await No({startupCwd:r,startupConfig:n})}catch(e){process.stderr.write(`MCP server failed to start: ${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}})}function Fo(e){return new t(`preview`).description(`Show what content the watcher will track (read-only)`).action(async()=>{let{previewContent:t,formatPreviewBlock:n}=await import(`./preview-smcIxud0.mjs`),r=e(),i=process.cwd(),a=Se(r,i),o;try{o=t({projectDir:i,contentDir:a})}catch(e){console.error(`Content preview failed: ${e instanceof Error?e.message:String(e)}`),process.exitCode=1;return}process.stdout.write(`${n(o,i)}\n`),o.totalCount===0&&o.warnings.length>0&&(process.exitCode=1)})}function Io(e){return e==null?!1:e.includes(`--type=utility`)&&e.includes(`--utility-sub-type=node.mojom.NodeService`)}function Lo(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 Ro(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:vi(r),command:r,isDesktop:Io(r)}}function zo(e){return e.ui==null?!1:e.ui.status===`alive`||e.ui.status===`foreign-host`}function Bo(e){let t=e.server.status;return t===`alive`||t===`foreign-host`?e.isDesktop?`desktop`:t===`alive`?`running`:`foreign`:t===`dead-pid`&&zo(e)?`ui-orphan`:`stale`}const Vo=new Set([`running`,`desktop`,`foreign`,`ui-orphan`]);function Ho(e){switch(e){case`running`:return H.default.green(e);case`desktop`:return H.default.blue(e);case`foreign`:return H.default.cyan(e);case`ui-orphan`:return H.default.magenta(e);case`stale`:return H.default.yellow(e)}}function Uo(e){return e==null?`—`:`${e.cpuPercent.toFixed(1)}% / ${e.memPercent.toFixed(1)}%`}function Wo(e){return`${Uo(e.server.usage)} | ${Uo(e.ui?.usage??null)}`}function Go(e){return`${e.server.port===0?`(starting)`:String(e.server.port)} / ${e.ui==null||e.ui.status===`dead-pid`?`—`:String(e.ui.port)}`}function Ko(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=Bo(e),n=t===`ui-orphan`&&e.ui!=null?e.ui.pid:e.server.pid;return[e.directory,Go(e),Wo(e),t,String(n),Lo(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=Ho(Bo(e))+` `.repeat(Math.max(0,(i[t]??0)-r.length))}o.push(n)}return o.join(` `).trimEnd()}),s=H.default.dim(`To stop a server: ok stop <port|pid|directory|all>`);return[a,...o,``,s].join(`
59
+ `);let g=()=>{h().finally(()=>{process.exit(0)})};return process.once(`SIGINT`,g),process.once(`SIGTERM`,g),{close:h}}function Po(e){return new t(`mcp`).description(`Start MCP stdio server for project knowledge base`).option(`-p, --port <port>`,`Override per-call routing and proxy stdio to this HTTP MCP port`,void 0).action(async t=>{try{let n=e(),r=process.cwd();if(t.port!==void 0){let e=po(process.env.OK_MCP_SPAWN_TIMEOUT_MS);await Do({lockDir:``,contentDir:``,portOverride:t.port,envAutoStart:process.env.OK_MCP_AUTOSTART,timeoutMs:e});return}await No({startupCwd:r,startupConfig:n})}catch(e){process.stderr.write(`MCP server failed to start: ${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}})}function Fo(e){return new t(`preview`).description(`Show what content the watcher will track (read-only)`).action(async()=>{let{previewContent:t,formatPreviewBlock:n}=await import(`./preview-DfT6ddN-.mjs`),r=e(),i=process.cwd(),a=Se(r,i),o;try{o=t({projectDir:i,contentDir:a})}catch(e){console.error(`Content preview failed: ${e instanceof Error?e.message:String(e)}`),process.exitCode=1;return}process.stdout.write(`${n(o,i)}\n`),o.totalCount===0&&o.warnings.length>0&&(process.exitCode=1)})}function Io(e){return e==null?!1:e.includes(`--type=utility`)&&e.includes(`--utility-sub-type=node.mojom.NodeService`)}function Lo(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 Ro(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:vi(r),command:r,isDesktop:Io(r)}}function zo(e){return e.ui==null?!1:e.ui.status===`alive`||e.ui.status===`foreign-host`}function Bo(e){let t=e.server.status;return t===`alive`||t===`foreign-host`?e.isDesktop?`desktop`:t===`alive`?`running`:`foreign`:t===`dead-pid`&&zo(e)?`ui-orphan`:`stale`}const Vo=new Set([`running`,`desktop`,`foreign`,`ui-orphan`]);function Ho(e){switch(e){case`running`:return H.default.green(e);case`desktop`:return H.default.blue(e);case`foreign`:return H.default.cyan(e);case`ui-orphan`:return H.default.magenta(e);case`stale`:return H.default.yellow(e)}}function Uo(e){return e==null?`—`:`${e.cpuPercent.toFixed(1)}% / ${e.memPercent.toFixed(1)}%`}function Wo(e){return`${Uo(e.server.usage)} | ${Uo(e.ui?.usage??null)}`}function Go(e){return`${e.server.port===0?`(starting)`:String(e.server.port)} / ${e.ui==null||e.ui.status===`dead-pid`?`—`:String(e.ui.port)}`}function Ko(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=Bo(e),n=t===`ui-orphan`&&e.ui!=null?e.ui.pid:e.server.pid;return[e.directory,Go(e),Wo(e),t,String(n),Lo(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=Ho(Bo(e))+` `.repeat(Math.max(0,(i[t]??0)-r.length))}o.push(n)}return o.join(` `).trimEnd()}),s=H.default.dim(`To stop a server: ok stop <port|pid|directory|all>`);return[a,...o,``,s].join(`
60
60
  `)}async function qo(e={}){let t=e.discover??Ci,n=e.inspect??B,r=e.log??(e=>console.log(e)),i=e.resolveCommand??yi,a=e.resolveUsage??bi,o=await t(),s=[];for(let e of o){let t=n(e,`server`),r=n(e,`ui`),o=Ro(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&&s.push(o)}if(e.json){let e=s.map(e=>({...e,displayStatus:Bo(e)}));r(JSON.stringify(e,null,2));return}r(Ko(e.all?s:s.filter(e=>Vo.has(Bo(e)))))}function Jo(){return new t(`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 qo({all:t.all===!0||e===`all`,json:t.json===!0})})}function Y(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function Yo(e,t,n=process.cwd()){let r=e.op??`sync`,i=fe(De(n));if(i&&i.port>0){let t=`http://127.0.0.1:${i.port}/api/sync/trigger`;e.json||process.stderr.write(`Triggering ${r} via running server (port ${i.port})…\n`);try{let n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({op:r})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.title??e.error??e.message??`Server responded with ${n.status}`)}Y(e.json,{type:`triggered`,op:r,port:i.port}),e.json||process.stderr.write(`✓ ${r} triggered\n`);return}catch(t){let n=t instanceof Error?t.message:String(t);e.json||process.stderr.write(`Server trigger failed (${n}), running directly…\n`)}}e.json||process.stderr.write(`Running ${r} directly (no live server)…\n`);let a=he({baseDir:n});if(r===`sync`||r===`pull`){Y(e.json,{type:`step`,step:`pull`});let t=await a.pull();Y(e.json,{type:`pull`,summary:t.summary}),e.json||process.stderr.write(` pull: ${t.summary.changes} changes\n`)}(r===`sync`||r===`push`)&&(Y(e.json,{type:`step`,step:`push`}),await a.push(),Y(e.json,{type:`push`,ok:!0}),e.json||process.stderr.write(` push: ok
61
61
  `)),Y(e.json,{type:`complete`,op:r}),e.json||process.stderr.write(`✓ ${r} complete\n`)}function Xo(e){return new t(`sync`).description(`Commit, pull, and push to the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await Yo({json:t.json,op:`sync`},e())}catch(e){let n=e instanceof Error?e.message:String(e);t.json?process.stdout.write(`${JSON.stringify({type:`error`,message:n})}\n`):process.stderr.write(`✗ sync failed: ${n}\n`),process.exit(1)}})}function Zo(e){return new t(`pull`).description(`Pull changes from the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await Yo({json:t.json,op:`pull`},e())}catch(e){let n=e instanceof Error?e.message:String(e);t.json?process.stdout.write(`${JSON.stringify({type:`error`,message:n})}\n`):process.stderr.write(`✗ pull failed: ${n}\n`),process.exit(1)}})}function Qo(e){return new t(`push`).description(`Push commits to the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await Yo({json:t.json,op:`push`},e())}catch(e){let n=e instanceof Error?e.message:String(e);t.json?process.stdout.write(`${JSON.stringify({type:`error`,message:n})}\n`):process.stderr.write(`✗ push failed: ${n}\n`),process.exit(1)}})}function $o(e){return typeof e==`string`&&we.includes(e)}async function es(e={}){let t=N(e.cwd??process.cwd()),n=e.pack??`knowledge-base`;if(!je[n])return{status:`failed`,message:`${O(`Error:`)} Unknown pack "${n}". Available: ${we.join(`, `)}`,exitCode:1};let r;try{r=await ye({projectDir:t,rootDir:e.root,packId:n})}catch(e){return e instanceof xe?{status:`prerequisite-missing`,message:`${O(`Error:`)} ${e.message}`,exitCode:1}:{status:`failed`,message:`${O(`Error:`)} ${e instanceof Error?e.message:String(e)}`,exitCode:1}}if(r.created.length===0){let t=je[n].name;if(e.personalTemplates&&!e.dryRun){let e=Ee();if(e.errors.length>0){let n=e.errors.map(e=>` ${k(`!`)} ${e.path}: ${e.error}`);return{status:`failed`,message:[`${D(`Your ${t} pack is already seeded.`)}`,`${k(`Personal templates: some writes failed:`)}`,...n].join(`
62
62
  `),plan:r,exitCode:1}}let n=e.written.length;if(n>0)return{status:`applied`,message:`${D(`Your ${t} pack is already seeded.`)}\n${D(`✓ Wrote ${n} personal template${n===1?``:`s`}`)} ${E(`to ~/.ok/templates/`)}`,plan:r,exitCode:0}}return{status:`no-op`,message:`${D(`Your ${t} pack is already seeded.`)}\n${E(`Nothing to do.`)}`,plan:r,exitCode:0}}if(e.dryRun)return{status:`dry-run`,message:`${A(`Plan (dry-run — no changes made):`)}\n\n${ns(r,t)}`,plan:r,exitCode:0};if(!e.yes&&!await rs(`${A(`Plan:`)}\n\n${ns(r,t)}\n\n${A(`Apply?`)} ${E(`[Y/n] `)}`,e.confirmStream))return{status:`cancelled`,message:E(`Cancelled.`),plan:r,exitCode:0};let i=await ge(r,{projectDir:t,packId:n});if(i.errors.length>0){let e=i.errors.map(e=>` ${O(`✗`)} ${e.path}: ${e.error}`);return{status:`failed`,message:[`${k(`Applied`)} ${i.applied} entries, ${k(String(i.errors.length))} error(s):`,...e].join(`
@@ -0,0 +1,2 @@
1
+ import"./dist-H3Ld-L-a.mjs";var e=`0.4.0-beta.30`;const t=`config.yml`,n=e;export{n,t};
2
+ //# sourceMappingURL=constants-BY_EleLO.mjs.map
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{c as e,d as t,f as n,i as r,l as i,m as a,p as o,t as s,u as c}from"./init-B3-z2S8e.mjs";import{n as l}from"./loader-nzXlKCaJ.mjs";import{n as u}from"./preview-C5ZZtQhd.mjs";import{t as d}from"./src-DCHO3Oll.mjs";export{c as ALL_EDITOR_IDS,t as EDITOR_LABELS,n as EDITOR_TARGETS,s as detectInstalledEditors,a as initContent,l as loadConfig,u as previewContent,r as readExistingMcpEntry,o as resolveProjectRoot,e as writeEditorMcpConfig,d as writeProjectAiIntegrations,i as writeUserMcpConfigs};
1
+ import{c as e,d as t,f as n,i as r,l as i,m as a,p as o,t as s,u as c}from"./init-DrfKz58U.mjs";import{n as l}from"./loader-DKoWw50g.mjs";import{n as u}from"./preview-D6nLHyS2.mjs";import{t as d}from"./src-DL2x7ekf.mjs";export{c as ALL_EDITOR_IDS,t as EDITOR_LABELS,n as EDITOR_TARGETS,s as detectInstalledEditors,a as initContent,l as loadConfig,u as previewContent,r as readExistingMcpEntry,o as resolveProjectRoot,e as writeEditorMcpConfig,d as writeProjectAiIntegrations,i as writeUserMcpConfigs};
@@ -0,0 +1 @@
1
+ import{o as e}from"./init-DrfKz58U.mjs";export{e as runInit};
@@ -1,4 +1,4 @@
1
- import{i as e,o as t,t as n}from"./chunk-FK9Q3tQk.mjs";import{r,t as i}from"./esm-CEs3LWY3.mjs";import{J as a,ir as o,n as s,or as c}from"./dist-H3Ld-L-a.mjs";import{D as l,F as u,It as d,Pt as f,Wn as p,in as m}from"./dist-Va4IjzRw.mjs";import{n as h,t as g}from"./constants-Vc8PoRm6.mjs";import{t as _}from"./is-object-C-4FJ0rP.mjs";import{i as v,o as y,r as b,s as x,t as S}from"./colors-BtKMHmBX.mjs";import{t as ee}from"./preview-C5ZZtQhd.mjs";import{execFileSync as te}from"node:child_process";import ne,{basename as re,dirname as C,isAbsolute as ie,join as w,posix as ae,relative as T,resolve as E,sep as D,win32 as oe}from"node:path";import{cpSync as se,existsSync as O,lstatSync as ce,mkdirSync as k,readFileSync as A,realpathSync as le,rmSync as ue,writeFileSync as j}from"node:fs";import M from"node:process";import{homedir as N}from"node:os";import{AsyncLocalStorage as de,AsyncResource as fe}from"node:async_hooks";import{stripVTControlCharacters as pe,styleText as P}from"node:util";import*as me from"node:readline";function he(){return M.platform.startsWith(`win`)?!!M.env.CI||!!M.env.WT_SESSION||!!M.env.TERMINUS_SUBLIME||M.env.ConEmuTask===`{cmd::Cmder}`||M.env.TERM_PROGRAM===`Terminus-Sublime`||M.env.TERM_PROGRAM===`vscode`||M.env.TERM===`xterm-256color`||M.env.TERM===`alacritty`||M.env.TERMINAL_EMULATOR===`JetBrains-JediTerm`:M.env.TERM!==`linux`}const ge={circleQuestionMark:`(?)`,questionMarkPrefix:`(?)`,square:`█`,squareDarkShade:`▓`,squareMediumShade:`▒`,squareLightShade:`░`,squareTop:`▀`,squareBottom:`▄`,squareLeft:`▌`,squareRight:`▐`,squareCenter:`■`,bullet:`●`,dot:`․`,ellipsis:`…`,pointerSmall:`›`,triangleUp:`▲`,triangleUpSmall:`▴`,triangleDown:`▼`,triangleDownSmall:`▾`,triangleLeftSmall:`◂`,triangleRightSmall:`▸`,home:`⌂`,heart:`♥`,musicNote:`♪`,musicNoteBeamed:`♫`,arrowUp:`↑`,arrowDown:`↓`,arrowLeft:`←`,arrowRight:`→`,arrowLeftRight:`↔`,arrowUpDown:`↕`,almostEqual:`≈`,notEqual:`≠`,lessOrEqual:`≤`,greaterOrEqual:`≥`,identical:`≡`,infinity:`∞`,subscriptZero:`₀`,subscriptOne:`₁`,subscriptTwo:`₂`,subscriptThree:`₃`,subscriptFour:`₄`,subscriptFive:`₅`,subscriptSix:`₆`,subscriptSeven:`₇`,subscriptEight:`₈`,subscriptNine:`₉`,oneHalf:`½`,oneThird:`⅓`,oneQuarter:`¼`,oneFifth:`⅕`,oneSixth:`⅙`,oneEighth:`⅛`,twoThirds:`⅔`,twoFifths:`⅖`,threeQuarters:`¾`,threeFifths:`⅗`,threeEighths:`⅜`,fourFifths:`⅘`,fiveSixths:`⅚`,fiveEighths:`⅝`,sevenEighths:`⅞`,line:`─`,lineBold:`━`,lineDouble:`═`,lineDashed0:`┄`,lineDashed1:`┅`,lineDashed2:`┈`,lineDashed3:`┉`,lineDashed4:`╌`,lineDashed5:`╍`,lineDashed6:`╴`,lineDashed7:`╶`,lineDashed8:`╸`,lineDashed9:`╺`,lineDashed10:`╼`,lineDashed11:`╾`,lineDashed12:`−`,lineDashed13:`–`,lineDashed14:`‐`,lineDashed15:`⁃`,lineVertical:`│`,lineVerticalBold:`┃`,lineVerticalDouble:`║`,lineVerticalDashed0:`┆`,lineVerticalDashed1:`┇`,lineVerticalDashed2:`┊`,lineVerticalDashed3:`┋`,lineVerticalDashed4:`╎`,lineVerticalDashed5:`╏`,lineVerticalDashed6:`╵`,lineVerticalDashed7:`╷`,lineVerticalDashed8:`╹`,lineVerticalDashed9:`╻`,lineVerticalDashed10:`╽`,lineVerticalDashed11:`╿`,lineDownLeft:`┐`,lineDownLeftArc:`╮`,lineDownBoldLeftBold:`┓`,lineDownBoldLeft:`┒`,lineDownLeftBold:`┑`,lineDownDoubleLeftDouble:`╗`,lineDownDoubleLeft:`╖`,lineDownLeftDouble:`╕`,lineDownRight:`┌`,lineDownRightArc:`╭`,lineDownBoldRightBold:`┏`,lineDownBoldRight:`┎`,lineDownRightBold:`┍`,lineDownDoubleRightDouble:`╔`,lineDownDoubleRight:`╓`,lineDownRightDouble:`╒`,lineUpLeft:`┘`,lineUpLeftArc:`╯`,lineUpBoldLeftBold:`┛`,lineUpBoldLeft:`┚`,lineUpLeftBold:`┙`,lineUpDoubleLeftDouble:`╝`,lineUpDoubleLeft:`╜`,lineUpLeftDouble:`╛`,lineUpRight:`└`,lineUpRightArc:`╰`,lineUpBoldRightBold:`┗`,lineUpBoldRight:`┖`,lineUpRightBold:`┕`,lineUpDoubleRightDouble:`╚`,lineUpDoubleRight:`╙`,lineUpRightDouble:`╘`,lineUpDownLeft:`┤`,lineUpBoldDownBoldLeftBold:`┫`,lineUpBoldDownBoldLeft:`┨`,lineUpDownLeftBold:`┥`,lineUpBoldDownLeftBold:`┩`,lineUpDownBoldLeftBold:`┪`,lineUpDownBoldLeft:`┧`,lineUpBoldDownLeft:`┦`,lineUpDoubleDownDoubleLeftDouble:`╣`,lineUpDoubleDownDoubleLeft:`╢`,lineUpDownLeftDouble:`╡`,lineUpDownRight:`├`,lineUpBoldDownBoldRightBold:`┣`,lineUpBoldDownBoldRight:`┠`,lineUpDownRightBold:`┝`,lineUpBoldDownRightBold:`┡`,lineUpDownBoldRightBold:`┢`,lineUpDownBoldRight:`┟`,lineUpBoldDownRight:`┞`,lineUpDoubleDownDoubleRightDouble:`╠`,lineUpDoubleDownDoubleRight:`╟`,lineUpDownRightDouble:`╞`,lineDownLeftRight:`┬`,lineDownBoldLeftBoldRightBold:`┳`,lineDownLeftBoldRightBold:`┯`,lineDownBoldLeftRight:`┰`,lineDownBoldLeftBoldRight:`┱`,lineDownBoldLeftRightBold:`┲`,lineDownLeftRightBold:`┮`,lineDownLeftBoldRight:`┭`,lineDownDoubleLeftDoubleRightDouble:`╦`,lineDownDoubleLeftRight:`╥`,lineDownLeftDoubleRightDouble:`╤`,lineUpLeftRight:`┴`,lineUpBoldLeftBoldRightBold:`┻`,lineUpLeftBoldRightBold:`┷`,lineUpBoldLeftRight:`┸`,lineUpBoldLeftBoldRight:`┹`,lineUpBoldLeftRightBold:`┺`,lineUpLeftRightBold:`┶`,lineUpLeftBoldRight:`┵`,lineUpDoubleLeftDoubleRightDouble:`╩`,lineUpDoubleLeftRight:`╨`,lineUpLeftDoubleRightDouble:`╧`,lineUpDownLeftRight:`┼`,lineUpBoldDownBoldLeftBoldRightBold:`╋`,lineUpDownBoldLeftBoldRightBold:`╈`,lineUpBoldDownLeftBoldRightBold:`╇`,lineUpBoldDownBoldLeftRightBold:`╊`,lineUpBoldDownBoldLeftBoldRight:`╉`,lineUpBoldDownLeftRight:`╀`,lineUpDownBoldLeftRight:`╁`,lineUpDownLeftBoldRight:`┽`,lineUpDownLeftRightBold:`┾`,lineUpBoldDownBoldLeftRight:`╂`,lineUpDownLeftBoldRightBold:`┿`,lineUpBoldDownLeftBoldRight:`╃`,lineUpBoldDownLeftRightBold:`╄`,lineUpDownBoldLeftBoldRight:`╅`,lineUpDownBoldLeftRightBold:`╆`,lineUpDoubleDownDoubleLeftDoubleRightDouble:`╬`,lineUpDoubleDownDoubleLeftRight:`╫`,lineUpDownLeftDoubleRightDouble:`╪`,lineCross:`╳`,lineBackslash:`╲`,lineSlash:`╱`},_e={tick:`✔`,info:`ℹ`,warning:`⚠`,cross:`✘`,squareSmall:`◻`,squareSmallFilled:`◼`,circle:`◯`,circleFilled:`◉`,circleDotted:`◌`,circleDouble:`◎`,circleCircle:`ⓞ`,circleCross:`ⓧ`,circlePipe:`Ⓘ`,radioOn:`◉`,radioOff:`◯`,checkboxOn:`☒`,checkboxOff:`☐`,checkboxCircleOn:`ⓧ`,checkboxCircleOff:`Ⓘ`,pointer:`❯`,triangleUpOutline:`△`,triangleLeft:`◀`,triangleRight:`▶`,lozenge:`◆`,lozengeOutline:`◇`,hamburger:`☰`,smiley:`㋡`,mustache:`෴`,star:`★`,play:`▶`,nodejs:`⬢`,oneSeventh:`⅐`,oneNinth:`⅑`,oneTenth:`⅒`},ve={tick:`√`,info:`i`,warning:`‼`,cross:`×`,squareSmall:`□`,squareSmallFilled:`■`,circle:`( )`,circleFilled:`(*)`,circleDotted:`( )`,circleDouble:`( )`,circleCircle:`(○)`,circleCross:`(×)`,circlePipe:`(│)`,radioOn:`(*)`,radioOff:`( )`,checkboxOn:`[×]`,checkboxOff:`[ ]`,checkboxCircleOn:`(×)`,checkboxCircleOff:`( )`,pointer:`>`,triangleUpOutline:`∆`,triangleLeft:`◄`,triangleRight:`►`,lozenge:`♦`,lozengeOutline:`◊`,hamburger:`≡`,smiley:`☺`,mustache:`┌─┐`,star:`✶`,play:`►`,nodejs:`♦`,oneSeventh:`1/7`,oneNinth:`1/9`,oneTenth:`1/10`},ye={...ge,..._e},be={...ge,...ve},F=he()?ye:be;Object.entries(_e);var xe=n(((t,n)=>{n.exports=i;function r(t){let n={defaultWidth:0,output:process.stdout,tty:e(`tty`)};return t?(Object.keys(n).forEach(function(e){t[e]||(t[e]=n[e])}),t):n}function i(e){let t=r(e);if(t.output.getWindowSize)return t.output.getWindowSize()[0]||t.defaultWidth;if(t.tty.getWindowSize)return t.tty.getWindowSize()[1]||t.defaultWidth;if(t.output.columns)return t.output.columns;if(process.env.CLI_WIDTH){let e=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(e)&&e!==0)return e}return t.defaultWidth}}));const Se=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return t=>{let n=0;for(e.lastIndex=0;e.test(t);)n+=1;return t.length-n}})(),Ce=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,we=e=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141,Te=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Ee=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,De=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/uy,Oe=/\t{1,1000}/y,ke=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/uy,Ae=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,je=/\p{M}+/gu,Me={limit:1/0,ellipsis:``},Ne=(e,t={},n={})=>{let r=t.limit??1/0,i=t.ellipsis??``,a=t?.ellipsisWidth??(i?Ne(i,Me,n).width:0),o=n.controlWidth??0,s=n.tabWidth??8,c=n.emojiWidth??2,l=n.regularWidth??1,u=n.wideWidth??2,d=[[Ae,l],[Te,0],[Ee,o],[Oe,s],[ke,c],[De,u]],f=0,p=0,m=e.length,h=0,g=!1,_=m,v=Math.max(0,r-a),y=0,b=0,x=0,S=0;outer:for(;;){if(b>y||p>=m&&p>f){let t=e.slice(y,b)||e.slice(f,p);h=0;for(let e of t.replaceAll(je,``)){let t=e.codePointAt(0)||0;if(S=Ce(t)?2:we(t)?u:l,x+S>v&&(_=Math.min(_,Math.max(y,f)+h)),x+S>r){g=!0;break outer}h+=e.length,x+=S}y=b=0}if(p>=m)break outer;for(let t=0,n=d.length;t<n;t++){let[n,i]=d[t];if(n.lastIndex=p,n.test(e)){if(h=n===De?Se(e.slice(p,n.lastIndex)):n===ke?1:n.lastIndex-p,S=h*i,x+S>v&&(_=Math.min(_,p+Math.floor((v-x)/i))),x+S>r){g=!0;break outer}x+=S,y=f,b=p,p=f=n.lastIndex;continue outer}}p+=1}return{width:g?v:x,index:g?_:m,truncated:g,ellipsed:g&&r>=a}},Pe={limit:1/0,ellipsis:``,ellipsisWidth:0},I=(e,t={})=>Ne(e,Pe,t).width,Fe=`]8;;`,Ie=RegExp(`(?:\\[(?<code>\\d+)m|\\${Fe}(?<uri>.*))`,`y`),Le=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},Re=e=>`[${e}m`,ze=e=>`${Fe}${e}`,Be=(e,t,n)=>{let r=t[Symbol.iterator](),i=!1,a=!1,o=e.at(-1),s=o===void 0?0:I(o),c=r.next(),l=r.next(),u=0;for(;!c.done;){let o=c.value,d=I(o);s+d<=n?e[e.length-1]+=o:(e.push(o),s=0),(o===`\x1B`||o===`›`)&&(i=!0,a=t.startsWith(Fe,u+1)),i?a?o===`\x07`&&(i=!1,a=!1):o===`m`&&(i=!1):(s+=d,s===n&&!l.done&&(e.push(``),s=0)),c=l,l=r.next(),u+=o.length}o=e.at(-1),!s&&o!==void 0&&o.length&&e.length>1&&(e[e.length-2]+=e.pop())},Ve=e=>{let t=e.split(` `),n=t.length;for(;n&&!I(t[n-1]);)n--;return n===t.length?e:t.slice(0,n).join(` `)+t.slice(n).join(``)},He=(e,t,n={})=>{if(n.trim!==!1&&e.trim()===``)return``;let r=``,i,a,o=e.split(` `),s=[``],c=0;for(let e=0;e<o.length;e++){let r=o[e];if(n.trim!==!1){let e=s.at(-1)??``,t=e.trimStart();e.length!==t.length&&(s[s.length-1]=t,c=I(t))}e!==0&&(c>=t&&(n.wordWrap===!1||n.trim===!1)&&(s.push(``),c=0),(c||n.trim===!1)&&(s[s.length-1]+=` `,c++));let i=I(r);if(n.hard&&i>t){let e=t-c,n=1+Math.floor((i-e-1)/t);Math.floor((i-1)/t)<n&&s.push(``),Be(s,r,t),c=I(s.at(-1)??``);continue}if(c+i>t&&c&&i){if(n.wordWrap===!1&&c<t){Be(s,r,t),c=I(s.at(-1)??``);continue}s.push(``),c=0}if(c+i>t&&n.wordWrap===!1){Be(s,r,t),c=I(s.at(-1)??``);continue}s[s.length-1]+=r,c+=i}n.trim!==!1&&(s=s.map(e=>Ve(e)));let l=s.join(`
1
+ import{i as e,o as t,t as n}from"./chunk-FK9Q3tQk.mjs";import{r,t as i}from"./esm-CEs3LWY3.mjs";import{J as a,ir as o,n as s,or as c}from"./dist-H3Ld-L-a.mjs";import{D as l,F as u,It as d,Pt as f,Wn as p,in as m}from"./dist-Va4IjzRw.mjs";import{n as h,t as g}from"./constants-BY_EleLO.mjs";import{t as _}from"./is-object-C-4FJ0rP.mjs";import{i as v,o as y,r as b,s as x,t as S}from"./colors-BtKMHmBX.mjs";import{t as ee}from"./preview-D6nLHyS2.mjs";import{execFileSync as te}from"node:child_process";import ne,{basename as re,dirname as C,isAbsolute as ie,join as w,posix as ae,relative as T,resolve as E,sep as D,win32 as oe}from"node:path";import{cpSync as se,existsSync as O,lstatSync as ce,mkdirSync as k,readFileSync as A,realpathSync as le,rmSync as ue,writeFileSync as j}from"node:fs";import M from"node:process";import{homedir as N}from"node:os";import{AsyncLocalStorage as de,AsyncResource as fe}from"node:async_hooks";import{stripVTControlCharacters as pe,styleText as P}from"node:util";import*as me from"node:readline";function he(){return M.platform.startsWith(`win`)?!!M.env.CI||!!M.env.WT_SESSION||!!M.env.TERMINUS_SUBLIME||M.env.ConEmuTask===`{cmd::Cmder}`||M.env.TERM_PROGRAM===`Terminus-Sublime`||M.env.TERM_PROGRAM===`vscode`||M.env.TERM===`xterm-256color`||M.env.TERM===`alacritty`||M.env.TERMINAL_EMULATOR===`JetBrains-JediTerm`:M.env.TERM!==`linux`}const ge={circleQuestionMark:`(?)`,questionMarkPrefix:`(?)`,square:`█`,squareDarkShade:`▓`,squareMediumShade:`▒`,squareLightShade:`░`,squareTop:`▀`,squareBottom:`▄`,squareLeft:`▌`,squareRight:`▐`,squareCenter:`■`,bullet:`●`,dot:`․`,ellipsis:`…`,pointerSmall:`›`,triangleUp:`▲`,triangleUpSmall:`▴`,triangleDown:`▼`,triangleDownSmall:`▾`,triangleLeftSmall:`◂`,triangleRightSmall:`▸`,home:`⌂`,heart:`♥`,musicNote:`♪`,musicNoteBeamed:`♫`,arrowUp:`↑`,arrowDown:`↓`,arrowLeft:`←`,arrowRight:`→`,arrowLeftRight:`↔`,arrowUpDown:`↕`,almostEqual:`≈`,notEqual:`≠`,lessOrEqual:`≤`,greaterOrEqual:`≥`,identical:`≡`,infinity:`∞`,subscriptZero:`₀`,subscriptOne:`₁`,subscriptTwo:`₂`,subscriptThree:`₃`,subscriptFour:`₄`,subscriptFive:`₅`,subscriptSix:`₆`,subscriptSeven:`₇`,subscriptEight:`₈`,subscriptNine:`₉`,oneHalf:`½`,oneThird:`⅓`,oneQuarter:`¼`,oneFifth:`⅕`,oneSixth:`⅙`,oneEighth:`⅛`,twoThirds:`⅔`,twoFifths:`⅖`,threeQuarters:`¾`,threeFifths:`⅗`,threeEighths:`⅜`,fourFifths:`⅘`,fiveSixths:`⅚`,fiveEighths:`⅝`,sevenEighths:`⅞`,line:`─`,lineBold:`━`,lineDouble:`═`,lineDashed0:`┄`,lineDashed1:`┅`,lineDashed2:`┈`,lineDashed3:`┉`,lineDashed4:`╌`,lineDashed5:`╍`,lineDashed6:`╴`,lineDashed7:`╶`,lineDashed8:`╸`,lineDashed9:`╺`,lineDashed10:`╼`,lineDashed11:`╾`,lineDashed12:`−`,lineDashed13:`–`,lineDashed14:`‐`,lineDashed15:`⁃`,lineVertical:`│`,lineVerticalBold:`┃`,lineVerticalDouble:`║`,lineVerticalDashed0:`┆`,lineVerticalDashed1:`┇`,lineVerticalDashed2:`┊`,lineVerticalDashed3:`┋`,lineVerticalDashed4:`╎`,lineVerticalDashed5:`╏`,lineVerticalDashed6:`╵`,lineVerticalDashed7:`╷`,lineVerticalDashed8:`╹`,lineVerticalDashed9:`╻`,lineVerticalDashed10:`╽`,lineVerticalDashed11:`╿`,lineDownLeft:`┐`,lineDownLeftArc:`╮`,lineDownBoldLeftBold:`┓`,lineDownBoldLeft:`┒`,lineDownLeftBold:`┑`,lineDownDoubleLeftDouble:`╗`,lineDownDoubleLeft:`╖`,lineDownLeftDouble:`╕`,lineDownRight:`┌`,lineDownRightArc:`╭`,lineDownBoldRightBold:`┏`,lineDownBoldRight:`┎`,lineDownRightBold:`┍`,lineDownDoubleRightDouble:`╔`,lineDownDoubleRight:`╓`,lineDownRightDouble:`╒`,lineUpLeft:`┘`,lineUpLeftArc:`╯`,lineUpBoldLeftBold:`┛`,lineUpBoldLeft:`┚`,lineUpLeftBold:`┙`,lineUpDoubleLeftDouble:`╝`,lineUpDoubleLeft:`╜`,lineUpLeftDouble:`╛`,lineUpRight:`└`,lineUpRightArc:`╰`,lineUpBoldRightBold:`┗`,lineUpBoldRight:`┖`,lineUpRightBold:`┕`,lineUpDoubleRightDouble:`╚`,lineUpDoubleRight:`╙`,lineUpRightDouble:`╘`,lineUpDownLeft:`┤`,lineUpBoldDownBoldLeftBold:`┫`,lineUpBoldDownBoldLeft:`┨`,lineUpDownLeftBold:`┥`,lineUpBoldDownLeftBold:`┩`,lineUpDownBoldLeftBold:`┪`,lineUpDownBoldLeft:`┧`,lineUpBoldDownLeft:`┦`,lineUpDoubleDownDoubleLeftDouble:`╣`,lineUpDoubleDownDoubleLeft:`╢`,lineUpDownLeftDouble:`╡`,lineUpDownRight:`├`,lineUpBoldDownBoldRightBold:`┣`,lineUpBoldDownBoldRight:`┠`,lineUpDownRightBold:`┝`,lineUpBoldDownRightBold:`┡`,lineUpDownBoldRightBold:`┢`,lineUpDownBoldRight:`┟`,lineUpBoldDownRight:`┞`,lineUpDoubleDownDoubleRightDouble:`╠`,lineUpDoubleDownDoubleRight:`╟`,lineUpDownRightDouble:`╞`,lineDownLeftRight:`┬`,lineDownBoldLeftBoldRightBold:`┳`,lineDownLeftBoldRightBold:`┯`,lineDownBoldLeftRight:`┰`,lineDownBoldLeftBoldRight:`┱`,lineDownBoldLeftRightBold:`┲`,lineDownLeftRightBold:`┮`,lineDownLeftBoldRight:`┭`,lineDownDoubleLeftDoubleRightDouble:`╦`,lineDownDoubleLeftRight:`╥`,lineDownLeftDoubleRightDouble:`╤`,lineUpLeftRight:`┴`,lineUpBoldLeftBoldRightBold:`┻`,lineUpLeftBoldRightBold:`┷`,lineUpBoldLeftRight:`┸`,lineUpBoldLeftBoldRight:`┹`,lineUpBoldLeftRightBold:`┺`,lineUpLeftRightBold:`┶`,lineUpLeftBoldRight:`┵`,lineUpDoubleLeftDoubleRightDouble:`╩`,lineUpDoubleLeftRight:`╨`,lineUpLeftDoubleRightDouble:`╧`,lineUpDownLeftRight:`┼`,lineUpBoldDownBoldLeftBoldRightBold:`╋`,lineUpDownBoldLeftBoldRightBold:`╈`,lineUpBoldDownLeftBoldRightBold:`╇`,lineUpBoldDownBoldLeftRightBold:`╊`,lineUpBoldDownBoldLeftBoldRight:`╉`,lineUpBoldDownLeftRight:`╀`,lineUpDownBoldLeftRight:`╁`,lineUpDownLeftBoldRight:`┽`,lineUpDownLeftRightBold:`┾`,lineUpBoldDownBoldLeftRight:`╂`,lineUpDownLeftBoldRightBold:`┿`,lineUpBoldDownLeftBoldRight:`╃`,lineUpBoldDownLeftRightBold:`╄`,lineUpDownBoldLeftBoldRight:`╅`,lineUpDownBoldLeftRightBold:`╆`,lineUpDoubleDownDoubleLeftDoubleRightDouble:`╬`,lineUpDoubleDownDoubleLeftRight:`╫`,lineUpDownLeftDoubleRightDouble:`╪`,lineCross:`╳`,lineBackslash:`╲`,lineSlash:`╱`},_e={tick:`✔`,info:`ℹ`,warning:`⚠`,cross:`✘`,squareSmall:`◻`,squareSmallFilled:`◼`,circle:`◯`,circleFilled:`◉`,circleDotted:`◌`,circleDouble:`◎`,circleCircle:`ⓞ`,circleCross:`ⓧ`,circlePipe:`Ⓘ`,radioOn:`◉`,radioOff:`◯`,checkboxOn:`☒`,checkboxOff:`☐`,checkboxCircleOn:`ⓧ`,checkboxCircleOff:`Ⓘ`,pointer:`❯`,triangleUpOutline:`△`,triangleLeft:`◀`,triangleRight:`▶`,lozenge:`◆`,lozengeOutline:`◇`,hamburger:`☰`,smiley:`㋡`,mustache:`෴`,star:`★`,play:`▶`,nodejs:`⬢`,oneSeventh:`⅐`,oneNinth:`⅑`,oneTenth:`⅒`},ve={tick:`√`,info:`i`,warning:`‼`,cross:`×`,squareSmall:`□`,squareSmallFilled:`■`,circle:`( )`,circleFilled:`(*)`,circleDotted:`( )`,circleDouble:`( )`,circleCircle:`(○)`,circleCross:`(×)`,circlePipe:`(│)`,radioOn:`(*)`,radioOff:`( )`,checkboxOn:`[×]`,checkboxOff:`[ ]`,checkboxCircleOn:`(×)`,checkboxCircleOff:`( )`,pointer:`>`,triangleUpOutline:`∆`,triangleLeft:`◄`,triangleRight:`►`,lozenge:`♦`,lozengeOutline:`◊`,hamburger:`≡`,smiley:`☺`,mustache:`┌─┐`,star:`✶`,play:`►`,nodejs:`♦`,oneSeventh:`1/7`,oneNinth:`1/9`,oneTenth:`1/10`},ye={...ge,..._e},be={...ge,...ve},F=he()?ye:be;Object.entries(_e);var xe=n(((t,n)=>{n.exports=i;function r(t){let n={defaultWidth:0,output:process.stdout,tty:e(`tty`)};return t?(Object.keys(n).forEach(function(e){t[e]||(t[e]=n[e])}),t):n}function i(e){let t=r(e);if(t.output.getWindowSize)return t.output.getWindowSize()[0]||t.defaultWidth;if(t.tty.getWindowSize)return t.tty.getWindowSize()[1]||t.defaultWidth;if(t.output.columns)return t.output.columns;if(process.env.CLI_WIDTH){let e=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(e)&&e!==0)return e}return t.defaultWidth}}));const Se=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return t=>{let n=0;for(e.lastIndex=0;e.test(t);)n+=1;return t.length-n}})(),Ce=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,we=e=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141,Te=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Ee=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,De=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/uy,Oe=/\t{1,1000}/y,ke=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/uy,Ae=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,je=/\p{M}+/gu,Me={limit:1/0,ellipsis:``},Ne=(e,t={},n={})=>{let r=t.limit??1/0,i=t.ellipsis??``,a=t?.ellipsisWidth??(i?Ne(i,Me,n).width:0),o=n.controlWidth??0,s=n.tabWidth??8,c=n.emojiWidth??2,l=n.regularWidth??1,u=n.wideWidth??2,d=[[Ae,l],[Te,0],[Ee,o],[Oe,s],[ke,c],[De,u]],f=0,p=0,m=e.length,h=0,g=!1,_=m,v=Math.max(0,r-a),y=0,b=0,x=0,S=0;outer:for(;;){if(b>y||p>=m&&p>f){let t=e.slice(y,b)||e.slice(f,p);h=0;for(let e of t.replaceAll(je,``)){let t=e.codePointAt(0)||0;if(S=Ce(t)?2:we(t)?u:l,x+S>v&&(_=Math.min(_,Math.max(y,f)+h)),x+S>r){g=!0;break outer}h+=e.length,x+=S}y=b=0}if(p>=m)break outer;for(let t=0,n=d.length;t<n;t++){let[n,i]=d[t];if(n.lastIndex=p,n.test(e)){if(h=n===De?Se(e.slice(p,n.lastIndex)):n===ke?1:n.lastIndex-p,S=h*i,x+S>v&&(_=Math.min(_,p+Math.floor((v-x)/i))),x+S>r){g=!0;break outer}x+=S,y=f,b=p,p=f=n.lastIndex;continue outer}}p+=1}return{width:g?v:x,index:g?_:m,truncated:g,ellipsed:g&&r>=a}},Pe={limit:1/0,ellipsis:``,ellipsisWidth:0},I=(e,t={})=>Ne(e,Pe,t).width,Fe=`]8;;`,Ie=RegExp(`(?:\\[(?<code>\\d+)m|\\${Fe}(?<uri>.*))`,`y`),Le=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},Re=e=>`[${e}m`,ze=e=>`${Fe}${e}`,Be=(e,t,n)=>{let r=t[Symbol.iterator](),i=!1,a=!1,o=e.at(-1),s=o===void 0?0:I(o),c=r.next(),l=r.next(),u=0;for(;!c.done;){let o=c.value,d=I(o);s+d<=n?e[e.length-1]+=o:(e.push(o),s=0),(o===`\x1B`||o===`›`)&&(i=!0,a=t.startsWith(Fe,u+1)),i?a?o===`\x07`&&(i=!1,a=!1):o===`m`&&(i=!1):(s+=d,s===n&&!l.done&&(e.push(``),s=0)),c=l,l=r.next(),u+=o.length}o=e.at(-1),!s&&o!==void 0&&o.length&&e.length>1&&(e[e.length-2]+=e.pop())},Ve=e=>{let t=e.split(` `),n=t.length;for(;n&&!I(t[n-1]);)n--;return n===t.length?e:t.slice(0,n).join(` `)+t.slice(n).join(``)},He=(e,t,n={})=>{if(n.trim!==!1&&e.trim()===``)return``;let r=``,i,a,o=e.split(` `),s=[``],c=0;for(let e=0;e<o.length;e++){let r=o[e];if(n.trim!==!1){let e=s.at(-1)??``,t=e.trimStart();e.length!==t.length&&(s[s.length-1]=t,c=I(t))}e!==0&&(c>=t&&(n.wordWrap===!1||n.trim===!1)&&(s.push(``),c=0),(c||n.trim===!1)&&(s[s.length-1]+=` `,c++));let i=I(r);if(n.hard&&i>t){let e=t-c,n=1+Math.floor((i-e-1)/t);Math.floor((i-1)/t)<n&&s.push(``),Be(s,r,t),c=I(s.at(-1)??``);continue}if(c+i>t&&c&&i){if(n.wordWrap===!1&&c<t){Be(s,r,t),c=I(s.at(-1)??``);continue}s.push(``),c=0}if(c+i>t&&n.wordWrap===!1){Be(s,r,t),c=I(s.at(-1)??``);continue}s[s.length-1]+=r,c+=i}n.trim!==!1&&(s=s.map(e=>Ve(e)));let l=s.join(`
2
2
  `),u=!1;for(let e=0;e<l.length;e++){let t=l[e];if(r+=t,u)u=!1;else if(u=t>=`\ud800`&&t<=`\udbff`,u)continue;if(t===`\x1B`||t===`›`){Ie.lastIndex=e+1;let t=Ie.exec(l)?.groups;if(t?.code!==void 0){let e=Number.parseFloat(t.code);i=e===39?void 0:e}else t?.uri!==void 0&&(a=t.uri.length===0?void 0:t.uri)}if(l[e+1]===`
3
3
  `){a&&(r+=ze(``));let e=i?Le(i):void 0;i&&e&&(r+=Re(e))}else t===`
4
4
  `&&(i&&Le(i)&&(r+=Re(i)),a&&(r+=ze(a)))}return r},Ue=/\r?\n/;function We(e,t,n){return String(e).normalize().split(Ue).map(e=>He(e,t,n)).join(`
@@ -404,5 +404,5 @@ last-spawn-error.log
404
404
  `)?n:`${n}\n`,`utf-8`)}function ur(e,t){let n;try{n=le(t)}catch{n=E(t)}let r;try{r=ce(e)}catch(e){if(e.code!==`ENOENT`)throw e}if(r?.isSymbolicLink())throw Error(`Refusing to write through a symbolic link at ${e}. Remove the symlink and re-run \`ok init\`, or pass \`--no-mcp\` to skip MCP config writes.`);let i=C(e);for(;i.length>1&&i!==D;){let t;try{t=le(i)}catch(e){if(e.code===`ENOENT`){i=C(i);continue}throw e}let r=T(n,t);if(r===``||!r.startsWith(`..`)&&!ie(r))return;throw Error(`Refusing to write at ${e}: ancestor ${i} 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, or pass \`--no-mcp\`.`)}}const dr=e=>e!==`project`,fr=e=>e!==`user`;async function pr(){let e=await rn({message:`Where should the MCP server be configured?
405
405
  `,required:!1,theme:{icon:{checked:`[x]`,unchecked:`[ ]`}},choices:[{name:`User-level (~/.claude.json, ~/.cursor/mcp.json, …)`,value:`user`,checked:!0},{name:`Project-level (.mcp.json, .cursor/mcp.json, …)`,value:`project`,checked:!0}]});return e.includes(`user`)&&e.includes(`project`)?`both`:e.includes(`user`)?`user`:e.includes(`project`)?`project`:null}async function mr(e){return e.mcp===!1?null:e.scope?e.scope:e.isTTY??process.stdout.isTTY?(e.promptFn??pr)():`both`}const hr=`0.0.1`,gr=`open-knowledge-ui`;function _r(e,t={}){let n=w(e,`.claude`,`launch.json`),r=t.mode===`dev`?{name:gr,runtimeExecutable:`node`,runtimeArgs:[Yn(),`ui`],port:3e3}:{name:gr,runtimeExecutable:`npx`,runtimeArgs:[`@inkeep/open-knowledge`,`ui`],port:3e3};try{if(ur(n,e),!O(n))return k(C(n),{recursive:!0}),j(n,`${JSON.stringify({version:hr,configurations:[r]},null,2)}\n`,`utf-8`),{action:`created`,configPath:n};let t=A(n,`utf-8`).trim(),i=t?JSON.parse(t):{};if(!_(i))return{action:`failed`,configPath:n,error:`launch.json root is not an object`};let a=Array.isArray(i.configurations)?i.configurations:[],o=a.findIndex(e=>_(e)&&e.name===gr);o>=0?a[o]=r:a.push(r);let s={...i,version:i.version??hr,configurations:a};return j(n,`${JSON.stringify(s,null,2)}\n`,`utf-8`),{action:o>=0?`merged`:`created`,configPath:n}}catch(e){return{action:`failed`,configPath:n,error:e instanceof Error?e.message:String(e)}}}function vr(e,t,n){try{return O(e.detectPath?.(t,n)??C(e.configPath(t,n)))}catch{return!1}}function $(e,t,n,r,i){let a=e.serverName(t),o;try{o=i??e.configPath(t,r)}catch(t){return{editorId:e.id,label:e.label,action:`failed`,configPath:``,serverName:a,error:t instanceof Error?t.message:String(t)}}if(!i&&!n.skipAvailabilityCheck&&!vr(e,t,r))return{editorId:e.id,label:e.label,action:`skipped-missing`,configPath:o,serverName:a};if(i!==void 0)try{ur(o,t)}catch(t){return{editorId:e.id,label:e.label,action:`failed`,configPath:o,serverName:a,error:t instanceof Error?t.message:String(t),configScope:`project`}}let s;try{s=e.format===`toml`?sr(o):or(o)}catch(t){return{editorId:e.id,label:e.label,action:`failed`,configPath:o,serverName:a,error:t instanceof Error?t.message:String(t)}}let c=s[e.topLevelKey]??{},l=c[a],u;try{u=e.buildEntry(t,n)}catch(t){return{editorId:e.id,label:e.label,action:`failed`,configPath:o,serverName:a,error:t instanceof Error?t.message:String(t)}}let d={...s,[e.topLevelKey]:{...c,[a]:u}};try{e.format===`toml`?lr(o,d):cr(o,d)}catch(t){return{editorId:e.id,label:e.label,action:`failed`,configPath:o,serverName:a,error:t instanceof Error?t.message:String(t)}}return{editorId:e.id,label:e.label,action:l===void 0?`written`:`overwritten`,configPath:o,serverName:a,...i===void 0?{}:{configScope:`project`}}}function yr(e,t){let n=e.projectSkillPath?.(t);if(!n)return{editorId:e.id,label:e.label,action:`skipped-unsupported`,path:``};try{let r=p(),i=C(n);ur(i,t);let a=O(n)?`overwritten`:`written`;return ue(i,{recursive:!0,force:!0}),k(C(i),{recursive:!0}),se(r,i,{recursive:!0}),{editorId:e.id,label:e.label,action:a,path:n}}catch(t){return{editorId:e.id,label:e.label,action:`failed`,path:n,error:t instanceof Error?t.message:String(t)}}}function br(e,t){let n=e.projectConfigPath?.(t);if(!(!n||!O(n)))return{editorId:e.id,label:e.label,path:n}}async function xr(e){let t=ar(e.editors),n={mode:`published`,cliPath:e.cliPath,skipAvailabilityCheck:!0};return t.map(t=>$(t,``,n,e.home))}function Sr(e,t,n){let r;try{r=e.configPath(t,n)}catch{return null}let i;try{i=e.format===`toml`?sr(r):or(r)}catch{return null}let a=i[e.topLevelKey];if(!_(a))return null;let o=a[e.serverName(t)];return _(o)?o:null}async function Cr(e={}){let t=Kn(E(e.cwd??process.cwd()),{homeDir:e.home}),n=t.projectRoot,r=!O(w(n,`.ok`));t.ancestorPromoted?console.log(`[ok] Opened existing project at ${n}`):t.gitRootPromoted&&r&&console.log(`[ok] Initialized OK at ${n} (scoped to ${t.defaultContentDir}/)`);let i={mode:e.devMcp?`dev`:`published`},a=await d(n),o;try{o=Un(n,{contentDir:t.defaultContentDir})}catch(t){let r=Q.claude.configPath(n,e.home);return{projectRoot:n,contentCreated:[],contentUpdated:[],contentSkipped:[],editors:[],projectSkills:[],legacyProjectConfigs:[],didGitInit:a.didInit,claudeDesktopDetected:!1,mcpAction:`failed`,mcpPath:r,mcpError:`Content scaffolding failed: ${t instanceof Error?t.message:String(t)}`}}let s=await mr({scope:e.scope,mcp:e.mcp,isTTY:e.isTTY,promptFn:e.promptFn}),c=e.editors??Tr(n,e.home),l=e.editors??J.filter(e=>Q[e].projectConfigPath!==void 0),u=ar(c),p=ar(l),h=e.mcp===!1||s===null,g=Array.from(new Map([...u,...h?[]:p].map(e=>[e.id,e])).values()),_=u.filter(t=>vr(t,n,e.home)),v=[],y=[],b=new Set;for(let t of g){if(h){let r=``;try{r=t.configPath(n,e.home)}catch{}v.push({editorId:t.id,label:t.label,action:`skipped-flag`,configPath:r,serverName:t.serverName(n)});continue}if(dr(s)&&u.includes(t)&&v.push($(t,n,i,e.home)),fr(s)&&p.includes(t)&&t.projectConfigPath){let r=t.projectConfigPath(n),a=$(t,n,i,e.home,r);v.push(a),(a.action===`written`||a.action===`overwritten`)&&(b.add(r),y.push(yr(t,n)))}}let x=!h&&s!==null&&fr(s)?p.filter(e=>!e.projectConfigPath).map(e=>e.label):void 0,S=h?[]:_.map(e=>br(e,n)).filter(e=>e!==void 0).filter(e=>!b.has(e.path)),ee=_.some(e=>e.id===`claude`)&&!h?_r(n,i):void 0,te=await(e.installUserSkill??m)({home:e.home}),ne=f({home:e.home}),re=h?`skipped-flag`:`skipped-missing`,C=v.find(e=>e.editorId===`claude`)??v[0]??{action:re,configPath:Q.claude.configPath(n,e.home)};return{projectRoot:n,contentCreated:o.created,contentUpdated:o.updated,contentSkipped:o.skipped,editors:v,projectSkills:y,legacyProjectConfigs:S,launchJson:ee,skillInstall:te,didGitInit:a.didInit,claudeDesktopDetected:ne,mcpAction:C.action,mcpPath:C.configPath,mcpError:`error`in C?C.error:void 0,projectScopeUnsupportedLabels:x}}function wr(e,t){let n=[],r=e.editors.some(e=>e.action===`written`||e.action===`overwritten`),i=e.editors.some(e=>e.action===`failed`)||e.projectSkills.some(e=>e.action===`failed`),a=e.editors.length>0&&e.editors.every(e=>e.action===`skipped-flag`),o=e.editors.length>0&&e.editors.every(e=>e.action===`skipped-missing`),s=e=>{let n=e.configPath.startsWith(t)?T(t,e.configPath):e.configPath;switch(e.action){case`created`:return` app preview server ${n} configured for Claude Code Desktop embedded browser`;case`merged`:return` app preview server ${n} updated for Claude Code Desktop embedded browser`;case`failed`:return` app preview server ${n} FAILED: ${e.error}`}};e.didGitInit&&n.push(`Initialized git repo at ${t}/.git/ (default branch: main)`);let c=w(t,`.ok`);if(e.contentCreated.length>0||e.contentUpdated.length>0?(n.push(S(`Content scaffolded at ${c}/`)),e.contentCreated.length>0&&n.push(` Created: ${e.contentCreated.join(`, `)}`),e.contentUpdated.length>0&&n.push(` Updated: ${e.contentUpdated.join(`, `)}`)):n.push(S(`Content already present at ${c}/`)),e.contentSkipped.length>0&&n.push(` Skipped (already exist): ${e.contentSkipped.join(`, `)}`),n.push(``),e.mcpError&&e.editors.length===0)n.push(`Warning: ${e.mcpError}`);else if(e.editors.length===0)if(n.push(S(`MCP server configuration:`)),e.mcpAction===`skipped-flag`)n.push(` MCP config not written — use without --no-mcp to configure editors`);else if(e.projectScopeUnsupportedLabels&&e.projectScopeUnsupportedLabels.length>0){let t=e.projectScopeUnsupportedLabels.join(`, `),r=e.projectScopeUnsupportedLabels.length===1?`does`:`do`;n.push(` ${t} ${r} not support project-level config; skipped`)}else n.push(` No supported editor config directories detected; skipped MCP registration`);else if(a)n.push(`MCP config not written — use without --no-mcp to configure editors`);else if(o)n.push(S(`MCP server configuration:`)),n.push(` No supported editor config directories detected; skipped MCP registration`);else{n.push(S(`MCP server configuration:`));for(let r of e.editors){let i=r.configPath.startsWith(t)?T(t,r.configPath):r.configPath.replace(/^\/Users\/[^/]+/,`~`),a=r.serverName===`open-knowledge`?``:` (${r.serverName})`,o=r.configScope===`project`?` (project)`:``,c=`${r.label}${o}`,l=` `.repeat(Math.max(1,20-c.length)),u=r.editorId===`claude-desktop`&&(r.action===`written`||r.action===`overwritten`)?` — quit and relaunch Claude Desktop to activate`:``;switch(r.action){case`written`:n.push(` ${c}${l}${i} ${y(`registered`)}${a}${u}`);break;case`overwritten`:n.push(` ${c}${l}${i} ${y(`updated`)}${a}${u}`);break;case`skipped-missing`:n.push(` ${c}${l}${i} config root missing; skipped`);break;case`failed`:n.push(` ${c}${l}${i} ${b(`FAILED`)}: ${r.error}`);break;case`skipped-flag`:break}r.editorId===`claude`&&e.launchJson&&n.push(s(e.launchJson))}if(e.projectScopeUnsupportedLabels&&e.projectScopeUnsupportedLabels.length>0){let t=e.projectScopeUnsupportedLabels.join(`, `),r=e.projectScopeUnsupportedLabels.length===1?`does`:`do`;n.push(` ${t} ${r} not support project-level config; skipped`)}}if(e.projectSkills.length>0){n.push(``),n.push(S(`Project-local skills:`));for(let r of e.projectSkills){let e=`${r.label} (project)`,i=` `.repeat(Math.max(1,20-e.length)),a=r.path?T(t,r.path):``;switch(r.action){case`written`:n.push(` ${e}${i}${a} ${y(`installed`)}`);break;case`overwritten`:n.push(` ${e}${i}${a} ${y(`updated`)}`);break;case`skipped-unsupported`:n.push(` ${e}${i}no known project skill surface; skipped`);break;case`failed`:n.push(` ${e}${i}${a} ${b(`FAILED`)}: ${r.error}`);break}}}if(i&&(n.push(``),n.push(`For failed editors, add the MCP server entry or project skill manually. See:`),n.push(` https://github.com/inkeep/open-knowledge#mcp-setup`)),e.legacyProjectConfigs.length>0){n.push(``),n.push(`Project MCP configs found:`);for(let r of e.legacyProjectConfigs)n.push(` ${r.label} ${T(t,r.path)}`);n.push(` These project-local files may override the global config. Remove them if you want fully user-scoped MCP setup in this project.`)}if(e.skillInstall)switch(n.push(``),n.push(S(`User-global skill:`)),e.skillInstall){case`installed`:n.push(` open-knowledge ${y(`installed to detected agent hosts`)} via \`npx skills\``);break;case`skip-current`:n.push(` open-knowledge ${y(`already installed at current version`)}`);break;case`failed`:n.push(` ${x(`open-knowledge install failed — MCP still configured; run manually:`)}`),n.push(` ${x(` npx skills@~1.5.0 add <bundled-path> --agent '*' -g -y --copy`)}`);break}if(e.claudeDesktopDetected&&(n.push(``),n.push(`Claude Desktop App detected. To enable in Claude Chat & Cowork, run: ${S(`ok install-skill`)}`)),e.preview?(n.push(``),n.push(ee(e.preview,t))):e.previewWarning&&(n.push(``),n.push(`Content preview unavailable: ${e.previewWarning}`)),r){let t=new Set,r=e.editors.filter(e=>e.action===`written`||e.action===`overwritten`).filter(e=>!t.has(e.editorId)&&t.add(e.editorId)).map(e=>e.label);n.push(``),n.push(`${y(`✓`)} ${S(`Next steps:`)}`),n.push(` 1. Open your editor (${v(r.join(` / `))})`),n.push(` 2. Approve the MCP server when prompted`),n.push(` 3. (Optional) scaffold the starter knowledge-base structure:`),n.push(` - ${v(`ok seed`)}`),n.push(` 4. Use the three MCP workflow tools as you build the wiki:`),n.push(` - ${v(`mcp__open-knowledge__ingest`)} — capture an external source`),n.push(` - ${v(`mcp__open-knowledge__research`)} — gather sources and write findings`),n.push(` - ${v(`mcp__open-knowledge__consolidate`)} — promote research to canonical articles`)}return n.join(`
406
406
  `)}function Tr(e,t){let n=[];for(let r of J)vr(Q[r],e,t)&&n.push(r);return n}function Er(){return new i(`init`).description(`Scaffold .ok/ in the current directory and register the MCP server for your editor(s)`).option(`--mcp`,`Register the MCP server for selected editors (default: true)`,!0).option(`--no-mcp`,`Scaffold the .ok/ directory but do not touch MCP config`).option(`--dev-mcp`,`Register a local dev MCP entry using node + packages/cli/dist/cli.mjs with debug logging`).addOption(new r(`--scope <scope>`,`Write MCP config at user level, project level, or both`).choices([`user`,`project`,`both`])).action(async e=>{let t=process.cwd(),n;try{n=await Cr({cwd:t,mcp:e.mcp,devMcp:e.devMcp,scope:e.scope})}catch(e){if(e instanceof u){process.stderr.write(`open-knowledge requires git to initialize a parent repo. Install git or run 'git init' yourself, then re-run.
407
- `),e.stderr&&process.stderr.write(`${e.stderr.trim()}\n`),process.exitCode=1;return}throw e}try{let{previewContent:e}=await import(`./preview-smcIxud0.mjs`),{loadConfig:t}=await import(`./loader-CtxyptVz.mjs`),{resolveContentDir:r}=await import(`./dist-Cg4a9GjH.mjs`),{config:i}=t(n.projectRoot),a=r(i,n.projectRoot);n.preview=e({projectDir:n.projectRoot,contentDir:a})}catch(e){n.previewWarning=e instanceof Error?e.message:String(e)}process.stdout.write(`${wr(n,n.projectRoot)}\n`),(n.editors.some(e=>e.action===`failed`)||n.mcpAction===`failed`)&&(process.exitCode=1)})}export{We as C,Ge as S,F as T,at as _,mr as a,ut as b,$ as c,Y as d,Q as f,it as g,st as h,Sr as i,xr as l,Un as m,wr as n,Cr as o,Kn as p,Er as r,_r as s,Tr as t,J as u,ct as v,xe as w,tt as x,ot as y};
408
- //# sourceMappingURL=init-B3-z2S8e.mjs.map
407
+ `),e.stderr&&process.stderr.write(`${e.stderr.trim()}\n`),process.exitCode=1;return}throw e}try{let{previewContent:e}=await import(`./preview-DfT6ddN-.mjs`),{loadConfig:t}=await import(`./loader-BcdTtT9v.mjs`),{resolveContentDir:r}=await import(`./dist-Cg4a9GjH.mjs`),{config:i}=t(n.projectRoot),a=r(i,n.projectRoot);n.preview=e({projectDir:n.projectRoot,contentDir:a})}catch(e){n.previewWarning=e instanceof Error?e.message:String(e)}process.stdout.write(`${wr(n,n.projectRoot)}\n`),(n.editors.some(e=>e.action===`failed`)||n.mcpAction===`failed`)&&(process.exitCode=1)})}export{We as C,Ge as S,F as T,at as _,mr as a,ut as b,$ as c,Y as d,Q as f,it as g,st as h,Sr as i,xr as l,Un as m,wr as n,Cr as o,Kn as p,Er as r,_r as s,Tr as t,J as u,ct as v,xe as w,tt as x,ot as y};
408
+ //# sourceMappingURL=init-DrfKz58U.mjs.map
@@ -0,0 +1 @@
1
+ import{n as e}from"./loader-DKoWw50g.mjs";export{e as loadConfig};
@@ -1,4 +1,4 @@
1
- import{Ln as e,Zr as t,lr as n}from"./dist-H3Ld-L-a.mjs";import{Kr as r,f as i}from"./dist-Va4IjzRw.mjs";import{t as a}from"./constants-Vc8PoRm6.mjs";import{t as o}from"./is-object-C-4FJ0rP.mjs";import{resolve as s}from"node:path";import{existsSync as c,readFileSync as l}from"node:fs";import{homedir as u}from"node:os";import{realpath as d}from"node:fs/promises";async function f(e){let t=s(e);try{return await d(t)}catch(e){if(e.code!==`ENOENT`){let n=e instanceof Error?e.message:String(e);console.warn(`[normalize-cwd] realpath failed for ${t}: ${n}`)}return t}}var p=t();function m(e,t){let n={...e};for(let r of Object.keys(t)){let i=e[r],a=t[r];o(a)&&o(i)?n[r]=m(i,a):a!==void 0&&(n[r]=a)}return n}function h(e){if(!c(e))return{value:null,path:e,source:null,doc:null};let t;try{t=l(e,`utf-8`)}catch(t){return console.warn(`[config] Failed to read ${e}: ${t instanceof Error?t.message:t}`),{value:null,path:e,source:null,doc:null}}let n=(0,p.parseDocument)(t);if(n.errors.length>0)return console.warn(`[config] Failed to parse ${e}: ${n.errors.map(e=>e.message).join(`; `)}`),{value:null,path:e,source:t,doc:null};let r=n.toJSON();return o(r)?{value:r,path:e,source:t,doc:n}:{value:null,path:e,source:t,doc:n}}const g=[`include`,`exclude`];function _(e){let t="Run `ok config migrate` to strip the obsolete key from config.yml automatically, or remove it by hand.";return e===`exclude`?[`Move these patterns to .okignore at the project root (gitignore syntax, 1:1 migration).`,t].join(` `):[`content.include has been removed.`,`For subdirectory scoping, set content.dir in .ok/config.yml instead.`,`For pattern-based filtering, use .okignore (gitignore syntax — exclude-only; do not copy include patterns directly).`,t].join(` `)}function v(e){let t=e.value;if(!o(t))return[];let r=t.content;if(!o(r))return[];let i=[];for(let t of g)if(t in r){let r=[`content`,t],a;e.doc!==null&&e.source!==null&&(a=n({file:e.path,source:e.source,doc:e.doc,path:r})),i.push({code:`REMOVED_KEY`,path:r,redirect:_(t),...a===void 0?{}:{source:a}})}return i}function y(e,t){return e.map(e=>{let r=e.path.map(e=>typeof e==`symbol`?String(e):e),i={path:r,message:e.message,issueCode:e.code};if(t.doc!==null&&t.source!==null){let e=n({file:t.path,source:t.source,doc:t.doc,path:r});if(e!==void 0)return{...i,source:e}}return i})}function b(t){let n=t??process.cwd(),o=[],c=s(u(),`.ok`,a),l=r({absPath:c}),d={};l.valid&&l.source!==void 0?(d=m(d,l.value),o.push(c)):l.valid;let f=s(n,`.ok`,a),p=h(f);if(p.value!==null){let t=v(p);if(t.length>0)throw Error(t.map(e).join(`
1
+ import{Ln as e,Zr as t,lr as n}from"./dist-H3Ld-L-a.mjs";import{Kr as r,f as i}from"./dist-Va4IjzRw.mjs";import{t as a}from"./constants-BY_EleLO.mjs";import{t as o}from"./is-object-C-4FJ0rP.mjs";import{resolve as s}from"node:path";import{existsSync as c,readFileSync as l}from"node:fs";import{homedir as u}from"node:os";import{realpath as d}from"node:fs/promises";async function f(e){let t=s(e);try{return await d(t)}catch(e){if(e.code!==`ENOENT`){let n=e instanceof Error?e.message:String(e);console.warn(`[normalize-cwd] realpath failed for ${t}: ${n}`)}return t}}var p=t();function m(e,t){let n={...e};for(let r of Object.keys(t)){let i=e[r],a=t[r];o(a)&&o(i)?n[r]=m(i,a):a!==void 0&&(n[r]=a)}return n}function h(e){if(!c(e))return{value:null,path:e,source:null,doc:null};let t;try{t=l(e,`utf-8`)}catch(t){return console.warn(`[config] Failed to read ${e}: ${t instanceof Error?t.message:t}`),{value:null,path:e,source:null,doc:null}}let n=(0,p.parseDocument)(t);if(n.errors.length>0)return console.warn(`[config] Failed to parse ${e}: ${n.errors.map(e=>e.message).join(`; `)}`),{value:null,path:e,source:t,doc:null};let r=n.toJSON();return o(r)?{value:r,path:e,source:t,doc:n}:{value:null,path:e,source:t,doc:n}}const g=[`include`,`exclude`];function _(e){let t="Run `ok config migrate` to strip the obsolete key from config.yml automatically, or remove it by hand.";return e===`exclude`?[`Move these patterns to .okignore at the project root (gitignore syntax, 1:1 migration).`,t].join(` `):[`content.include has been removed.`,`For subdirectory scoping, set content.dir in .ok/config.yml instead.`,`For pattern-based filtering, use .okignore (gitignore syntax — exclude-only; do not copy include patterns directly).`,t].join(` `)}function v(e){let t=e.value;if(!o(t))return[];let r=t.content;if(!o(r))return[];let i=[];for(let t of g)if(t in r){let r=[`content`,t],a;e.doc!==null&&e.source!==null&&(a=n({file:e.path,source:e.source,doc:e.doc,path:r})),i.push({code:`REMOVED_KEY`,path:r,redirect:_(t),...a===void 0?{}:{source:a}})}return i}function y(e,t){return e.map(e=>{let r=e.path.map(e=>typeof e==`symbol`?String(e):e),i={path:r,message:e.message,issueCode:e.code};if(t.doc!==null&&t.source!==null){let e=n({file:t.path,source:t.source,doc:t.doc,path:r});if(e!==void 0)return{...i,source:e}}return i})}function b(t){let n=t??process.cwd(),o=[],c=s(u(),`.ok`,a),l=r({absPath:c}),d={};l.valid&&l.source!==void 0?(d=m(d,l.value),o.push(c)):l.valid;let f=s(n,`.ok`,a),p=h(f);if(p.value!==null){let t=v(p);if(t.length>0)throw Error(t.map(e).join(`
2
2
 
3
3
  `));d=m(d,p.value),o.push(f)}x(d,[`upload`,`maxBytes`],`streaming uploads have no user-facing cap`),x(d,[`github`,`oauthAppClientId`],`use the OPEN_KNOWLEDGE_GITHUB_CLIENT_ID env var instead`),x(d,[`server`,`host`],`use the --host flag or HOST env var instead`),x(d,[`server`,`openOnAgentEdit`]),x(d,[`mcp`,`autoStart`],`to disable auto-start, set OK_MCP_AUTOSTART=0`),x(d,[`mcp`,`tools`,`read_document`,`historyDepth`]),x(d,[`mcp`,`tools`,`grep`,`maxResults`]),x(d,[`mcp`,`tools`,`search`,`maxResults`]);let g=i.safeParse(d);if(!g.success){let t={code:`SCHEMA_INVALID`,issues:y(g.error.issues,p)};throw Error(e(t))}return{config:g.data,sources:o}}function x(e,t,n){let r=e;for(let e=0;e<t.length-1;e++){if(!o(r))return;r=r[t[e]]}if(!o(r))return;let i=t[t.length-1];if(r[i]===void 0)return;let a=t.join(`.`);console.warn(`[config] ${a} is no longer user-configurable; ${n??`the value is hardcoded in @inkeep/open-knowledge-core`}. Remove the key to silence this warning.`)}function S(e){let t=e.cacheMs??1e3,n=e.loadConfigFn??b,r=new Map,i=new Map,a=f(e.startupCwd);return async o=>{let s=await f(o??e.startupCwd),c=Date.now(),l=r.get(s);if(l&&l.expiresAt>c)return l.config;let u=i.get(s);if(u)return await u;let d=(async()=>{if(s===await a)return r.set(s,{config:e.startupConfig,expiresAt:Date.now()+t}),e.startupConfig;let i=n(s).config;return r.set(s,{config:i,expiresAt:Date.now()+t}),i})();i.set(s,d);try{return await d}finally{i.delete(s)}}}export{b as n,S as t};
4
- //# sourceMappingURL=loader-nzXlKCaJ.mjs.map
4
+ //# sourceMappingURL=loader-DKoWw50g.mjs.map
@@ -1,3 +1,3 @@
1
- import{Ct as e}from"./dist-Va4IjzRw.mjs";import"./constants-Vc8PoRm6.mjs";import{join as t,relative as n}from"node:path";import{existsSync as r,lstatSync as i,readdirSync as a,realpathSync as o,statSync as s}from"node:fs";function c(r){let{projectDir:c,contentDir:l,sampleCap:u=5}=r,d=[],f=[];try{i(l)}catch(e){return{totalCount:0,sample:[],contentDir:l,warnings:[`cannot access content directory ${l}: ${e instanceof Error?e.message:String(e)}`]}}let p;try{p=e({projectDir:c,contentDir:l})}catch(e){return{totalCount:0,sample:[],contentDir:l,warnings:[e instanceof Error?e.message:String(e)]}}function m(e){let r;try{r=a(e,{withFileTypes:!0})}catch(t){let r=t instanceof Error?t.message:String(t);d.push(`could not read directory ${n(l,e)||`.`}: ${r}`);return}for(let i of r){let r=t(e,i.name);if(i.isSymbolicLink()){let e;try{e=o(r)}catch(e){let t=e.code;t===`ENOENT`||t===`ELOOP`?d.push(`broken or cyclic symlink: ${n(l,r)}`):d.push(`cannot resolve symlink ${n(l,r)}: ${t??`unknown error`}`);continue}let t;try{t=s(e)}catch{continue}if(t.isDirectory()){let e=n(l,r);if(p.isDirExcluded(e))continue;m(r)}else if(t.isFile()){let e=n(l,r);if(p.isExcluded(e))continue;f.push(e)}}else if(i.isDirectory()){let e=n(l,r);if(p.isDirExcluded(e))continue;m(r)}else if(i.isFile()){let e=n(l,r);if(p.isExcluded(e))continue;f.push(e)}}}return m(l),{totalCount:f.length,sample:f.slice(0,u),contentDir:l,warnings:d}}function l(e,i){let a=[],o=n(i,e.contentDir),s=o===``?`./`:`./${o}`;if(a.push(`Content:`),a.push(` Found ${e.totalCount} markdown files in ${s}`),e.sample.length>0){let t=e.sample.join(`, `),n=e.totalCount>e.sample.length?`, …`:``;a.push(` Sample: ${t}${n}`)}if(e.warnings.length>0)for(let t of e.warnings)a.push(` Warning: ${t}`);return a.push(``),r(t(i,`.ok`,`config.yml`))?(a.push(` To adjust scope, add patterns to .okignore at the project root.`),a.push(` To change the content root, edit .ok/config.yml → content.dir.`)):a.push(" Run `open-knowledge init` to scaffold config + .okignore."),a.push(``),a.push(` Re-check anytime: open-knowledge preview`),a.join(`
1
+ import{Ct as e}from"./dist-Va4IjzRw.mjs";import"./constants-BY_EleLO.mjs";import{join as t,relative as n}from"node:path";import{existsSync as r,lstatSync as i,readdirSync as a,realpathSync as o,statSync as s}from"node:fs";function c(r){let{projectDir:c,contentDir:l,sampleCap:u=5}=r,d=[],f=[];try{i(l)}catch(e){return{totalCount:0,sample:[],contentDir:l,warnings:[`cannot access content directory ${l}: ${e instanceof Error?e.message:String(e)}`]}}let p;try{p=e({projectDir:c,contentDir:l})}catch(e){return{totalCount:0,sample:[],contentDir:l,warnings:[e instanceof Error?e.message:String(e)]}}function m(e){let r;try{r=a(e,{withFileTypes:!0})}catch(t){let r=t instanceof Error?t.message:String(t);d.push(`could not read directory ${n(l,e)||`.`}: ${r}`);return}for(let i of r){let r=t(e,i.name);if(i.isSymbolicLink()){let e;try{e=o(r)}catch(e){let t=e.code;t===`ENOENT`||t===`ELOOP`?d.push(`broken or cyclic symlink: ${n(l,r)}`):d.push(`cannot resolve symlink ${n(l,r)}: ${t??`unknown error`}`);continue}let t;try{t=s(e)}catch{continue}if(t.isDirectory()){let e=n(l,r);if(p.isDirExcluded(e))continue;m(r)}else if(t.isFile()){let e=n(l,r);if(p.isExcluded(e))continue;f.push(e)}}else if(i.isDirectory()){let e=n(l,r);if(p.isDirExcluded(e))continue;m(r)}else if(i.isFile()){let e=n(l,r);if(p.isExcluded(e))continue;f.push(e)}}}return m(l),{totalCount:f.length,sample:f.slice(0,u),contentDir:l,warnings:d}}function l(e,i){let a=[],o=n(i,e.contentDir),s=o===``?`./`:`./${o}`;if(a.push(`Content:`),a.push(` Found ${e.totalCount} markdown files in ${s}`),e.sample.length>0){let t=e.sample.join(`, `),n=e.totalCount>e.sample.length?`, …`:``;a.push(` Sample: ${t}${n}`)}if(e.warnings.length>0)for(let t of e.warnings)a.push(` Warning: ${t}`);return a.push(``),r(t(i,`.ok`,`config.yml`))?(a.push(` To adjust scope, add patterns to .okignore at the project root.`),a.push(` To change the content root, edit .ok/config.yml → content.dir.`)):a.push(" Run `open-knowledge init` to scaffold config + .okignore."),a.push(``),a.push(` Re-check anytime: open-knowledge preview`),a.join(`
2
2
  `)}export{c as n,l as t};
3
- //# sourceMappingURL=preview-C5ZZtQhd.mjs.map
3
+ //# sourceMappingURL=preview-D6nLHyS2.mjs.map
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./preview-D6nLHyS2.mjs";export{t as formatPreviewBlock,e as previewContent};
@@ -1850,4 +1850,4 @@ This template lives in your user home (~/.ok/templates/) — deleting affects ev
1850
1850
  [data-item-selected='true'] [data-icon-token='markdown'] {
1851
1851
  color: var(--trees-selected-fg);
1852
1852
  }
1853
- `;function xU(e){return{...IN({type:e===`dark`?`dark`:`light`,colors:{"sideBar.background":`var(--sidebar)`,"sideBar.foreground":`var(--sidebar-foreground)`,"sideBar.border":`var(--sidebar-border)`,"list.activeSelectionBackground":`var(--sidebar-accent)`,"list.activeSelectionForeground":`var(--sidebar-accent-foreground)`,"list.hoverBackground":`var(--sidebar-hover)`,focusBorder:`var(--color-primary)`,"input.background":`var(--input)`,"input.border":`var(--border)`}}),"--trees-font-family-override":`var(--font-sans)`,"--trees-font-size-override":`0.875rem`,"--trees-item-padding-x-override":`0.5rem`,"--trees-padding-inline-override":`0.5rem`,"--trees-border-radius-override":`0.375rem`,"--trees-selected-fg":`var(--color-primary)`,"--truncate-marker-fade-in-duration":`0s`,"--trees-file-icon-color-markdown":`light-dark(var(--color-gray-400), var(--color-gray-500))`,"--trees-fg-muted":`light-dark(var(--color-gray-400), var(--color-gray-500))`}}function SU(e){let t=e.split(`/`).pop()?.replace(/\.md$/i,``).toLowerCase();return!!t&&mU.has(t)}function CU(e){return e===`darwin`?`Reveal in Finder`:e===`win32`?`Reveal in File Explorer`:`Open Containing Folder`}function wU(e){let t=(0,$.c)(14),{item:n,workspace:r,onClose:i}=e,a=typeof window<`u`?window.okDesktop:void 0;if(!a)return null;let o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=CU(a.platform),t[0]=o):o=t[0];let s=o,c=r?null:`No workspace`,l=!r,u;t[1]!==n||t[2]!==i||t[3]!==r?(u=()=>{if(!r)return;i();let e=Rf(r.contentDir,FH(n),r.pathSeparator);a.shell.showItemInFolder(e)},t[1]=n,t[2]=i,t[3]=r,t[4]=u):u=t[4];let d=c?`${s}, ${c}`:s,f,p;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,Z.jsx)(xe,{"aria-hidden":`true`}),p=(0,Z.jsx)(`span`,{className:`flex-1`,children:s}),t[5]=f,t[6]=p):(f=t[5],p=t[6]);let m;t[7]===c?m=t[8]:(m=c?(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:`ml-2 text-muted-foreground text-xs`,children:c}):null,t[7]=c,t[8]=m);let h;return t[9]!==l||t[10]!==u||t[11]!==d||t[12]!==m?(h=(0,Z.jsxs)(hi,{disabled:l,onSelect:u,"aria-label":d,children:[f,p,m]}),t[9]=l,t[10]=u,t[11]=d,t[12]=m,t[13]=h):h=t[13],h}function TU(e){return e?.isDirectory()?e:null}function EU(e,t){let n=t.getPath();for(let t of e.getSelectedPaths())t!==n&&e.getItem(t)?.deselect();t.isSelected()||t.select()}function DU(e){return PH({kind:e.endsWith(`/`)?`directory`:`file`,name:e,path:e})}function OU(e,t){return e!==t&&e.startsWith(t)}function kU(e,t){let n=[...new Set(e)].filter(e=>!t(e)),r=n.filter(e=>e.endsWith(`/`));return n.filter(e=>!r.some(t=>OU(e,t))).map(DU)}function AU(e,t){return e===t||e.startsWith(`${t}/`)}function jU(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return t===`INPUT`||t===`TEXTAREA`||t===`SELECT`||e.isContentEditable||e.closest(`[contenteditable="true"]`)!==null}function MU(e,t,n){let r=new Set,i=new Set;for(let a of e){if(a.kind===`file`){r.add(a.path);continue}i.add(a.path);for(let e of t)br(e)&&e.docName.startsWith(`${a.path}/`)&&r.add(e.docName);for(let e of n){let t=EH(e);AU(t,a.path)&&i.add(t)}}return{docNames:r,folderPaths:i}}function NU(e,t){return e.kind===`file`?t.kind===`file`&&e.path===t.createdPath:AU(t.createdPath,e.path)}function PU(e){let t=(0,$.c)(85),{item:n,context:r,anyActionBusy:i,workspace:a,handoff:o,model:s,okignoreBinding:l,onStartCreating:u,onStartCreatingFromTemplate:d,onDelete:f,onExpandSubtree:p,onCollapseSubtree:m,isAsset:h,isAssetTreePath:g}=e,_,v,y,b,x;if(t[0]!==h||t[1]!==g||t[2]!==n||t[3]!==s||t[4]!==l){x=PH(n),y=n.kind===`directory`,_=!h&&l!==null,v=y?`Hide files in this folder`:`Hide this file`;let e=s.getSelectedPaths();b=e.includes(x.treePath)?kU(e,g):[],t[0]=h,t[1]=g,t[2]=n,t[3]=s,t[4]=l,t[5]=_,t[6]=v,t[7]=y,t[8]=b,t[9]=x}else _=t[5],v=t[6],y=t[7],b=t[8],x=t[9];let S=b,C;t[10]!==S||t[11]!==x?(C=S.length>1?S:[x],t[10]=S,t[11]=x,t[12]=C):C=t[12];let w=C,T=w.length>1?`Delete ${w.length} Items`:`Delete`,E;t[13]!==y||t[14]!==n.path||t[15]!==a?(E=y?null:Bf({docName:CH(n.path),workspace:a}),t[13]=y,t[14]=n.path,t[15]=a,t[16]=E):E=t[16];let D=E,O;t[17]===r?O=t[18]:(O=()=>r.close({restoreFocus:!1}),t[17]=r,t[18]=O);let k=O,A;t[19]===r?A=t[20]:(A=()=>r.close(),t[19]=r,t[20]=A);let j=A,M;t[21]===j?M=t[22]:(M=e=>{e||j()},t[21]=j,t[22]=M);let N;t[23]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,Z.jsx)(Zr,{asChild:!0,children:(0,Z.jsx)(`span`,{"aria-hidden":`true`,"data-file-tree-context-menu-root":`true`,className:`block size-px`})}),t[23]=N):N=t[23];let P;t[24]!==i||t[25]!==j||t[26]!==k||t[27]!==y||t[28]!==n.path||t[29]!==m||t[30]!==p||t[31]!==u||t[32]!==d?(P=y?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(hi,{disabled:i,onSelect:()=>{k(),u(`file`,EH(n.path))},children:[(0,Z.jsx)(Ds,{"aria-hidden":`true`}),`New File`]}),(0,Z.jsxs)(hi,{disabled:i,onSelect:()=>{k(),d(EH(n.path))},children:[(0,Z.jsx)(Wo,{"aria-hidden":`true`}),`New from template…`]}),(0,Z.jsxs)(hi,{disabled:i,onSelect:()=>{k(),u(`folder`,EH(n.path))},children:[(0,Z.jsx)(Yo,{"aria-hidden":`true`}),`New Folder`]}),(0,Z.jsx)(ti,{}),(0,Z.jsxs)(hi,{onSelect:()=>{j(),p(n.path)},children:[(0,Z.jsx)(Fs,{"aria-hidden":`true`}),`Expand All`]}),(0,Z.jsxs)(hi,{onSelect:()=>{j(),m(n.path)},children:[(0,Z.jsx)(qo,{"aria-hidden":`true`}),`Collapse All`]}),(0,Z.jsx)(ti,{})]}):null,t[24]=i,t[25]=j,t[26]=k,t[27]=y,t[28]=n.path,t[29]=m,t[30]=p,t[31]=u,t[32]=d,t[33]=P):P=t[33];let F;t[34]!==i||t[35]!==k||t[36]!==h||t[37]!==n.path||t[38]!==s?(F=h?null:(0,Z.jsxs)(hi,{disabled:i,onSelect:()=>{k(),s.startRenaming(n.path)},children:[(0,Z.jsx)(Ce,{"aria-hidden":`true`}),`Rename`]}),t[34]=i,t[35]=k,t[36]=h,t[37]=n.path,t[38]=s,t[39]=F):F=t[39];let I;t[40]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,Z.jsxs)(Ri,{children:[(0,Z.jsx)(Gi,{"aria-hidden":`true`}),`Copy Path`]}),t[40]=I):I=t[40];let L=!a,R;t[41]!==j||t[42]!==n||t[43]!==a?(R=()=>{a&&(j(),pU(Rf(a.contentDir,FH(n),a.pathSeparator),`full path`))},t[41]=j,t[42]=n,t[43]=a,t[44]=R):R=t[44];let z;t[45]!==L||t[46]!==R?(z=(0,Z.jsx)(hi,{disabled:L,onSelect:R,children:`Full Path`}),t[45]=L,t[46]=R,t[47]=z):z=t[47];let B;t[48]!==j||t[49]!==n?(B=(0,Z.jsx)(hi,{onSelect:()=>{j(),pU(FH(n),`relative path`)},children:`Relative Path`}),t[48]=j,t[49]=n,t[50]=B):B=t[50];let V;t[51]!==z||t[52]!==B?(V=(0,Z.jsxs)(ei,{children:[I,(0,Z.jsxs)(di,{children:[z,B]})]}),t[51]=z,t[52]=B,t[53]=V):V=t[53];let H;t[54]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,Z.jsx)(ti,{}),t[54]=H):H=t[54];let U;t[55]!==j||t[56]!==n||t[57]!==a?(U=(0,Z.jsx)(wU,{item:n,workspace:a,onClose:j}),t[55]=j,t[56]=n,t[57]=a,t[58]=U):U=t[58];let W;t[59]!==o||t[60]!==D||t[61]!==h||t[62]!==y?(W=!y&&!h&&(0,Z.jsx)(YH,{input:D,installStates:o.installStates,isElectronHost:o.isElectronHost,dispatch:o.dispatch}),t[59]=o,t[60]=D,t[61]=h,t[62]=y,t[63]=W):W=t[63];let G;t[64]!==i||t[65]!==_||t[66]!==j||t[67]!==T||t[68]!==w||t[69]!==v||t[70]!==h||t[71]!==l||t[72]!==f||t[73]!==x?(G=h?null:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(ti,{}),(0,Z.jsxs)(hi,{"data-testid":`file-tree-menu-hide`,disabled:!_,onSelect:()=>{if(!l)return;j();let e=UH(x),t=ki(wi(Di(l.current()),e));l.patch(t)},children:[(0,Z.jsx)(Ho,{"aria-hidden":`true`}),v]}),(0,Z.jsx)(ti,{}),(0,Z.jsxs)(hi,{variant:`destructive`,disabled:i,onSelect:()=>{j(),f(w)},children:[(0,Z.jsx)(c,{"aria-hidden":`true`}),T]})]}),t[64]=i,t[65]=_,t[66]=j,t[67]=T,t[68]=w,t[69]=v,t[70]=h,t[71]=l,t[72]=f,t[73]=x,t[74]=G):G=t[74];let K;t[75]!==V||t[76]!==U||t[77]!==W||t[78]!==G||t[79]!==P||t[80]!==F?(K=(0,Z.jsxs)(ta,{sideOffset:0,align:`start`,"data-file-tree-context-menu-root":`true`,className:`min-w-52`,children:[P,F,V,H,U,W,G]}),t[75]=V,t[76]=U,t[77]=W,t[78]=G,t[79]=P,t[80]=F,t[81]=K):K=t[81];let q;return t[82]!==K||t[83]!==M?(q=(0,Z.jsxs)(Ei,{open:!0,modal:!1,onOpenChange:M,children:[N,K]}),t[82]=K,t[83]=M,t[84]=q):q=t[84],q}function FU(e){let t=(0,$.c)(160),{ref:n}=e,{activeDocName:r,activeTarget:i,closeTabs:a,closeTab:o,closeDocument:s,closeAndClearForRename:c,openTarget:l,prewarm:u,remapTabsForRename:d}=Pe(),{notifySidebarFileSelected:f}=yA(),{resolvedTheme:p}=nn(),{addPage:m}=mr(),h;t[0]===f?h=t[1]:(h=function(e){uU(e),f()},t[0]=f,t[1]=h);let _=h,v;t[2]!==f||t[3]!==l?(v=function(e){let t=En(e);if(window.location.hash!==t){let{pathname:e,search:n}=window.location;window.history.replaceState(null,``,`${e}${n}${t}`)}l({kind:`folder`,target:e,folderPath:e}),f()},t[2]=f,t[3]=l,t[4]=v):v=t[4];let y=v,b;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(b=[],t[5]=b):b=t[5];let[x,S]=(0,Q.useState)(b),[C,w]=(0,Q.useState)(!0),[T,E]=(0,Q.useState)(null),[D,O]=(0,Q.useState)(null),[k,A]=(0,Q.useState)(null),[j,M]=(0,Q.useState)(null),[N,P]=(0,Q.useState)(null),F=(0,Q.useRef)(x),I=(0,Q.useRef)(r),L;t[6]===x?L=t[7]:(L=new Set(x.filter(Tn).map(YU)),t[6]=x,t[7]=L);let R=L,B=(0,Q.useRef)(R),V;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(V=[],t[8]=V):V=t[8];let H=(0,Q.useRef)(V),U=(0,Q.useRef)(null),W=(0,Q.useRef)(JU),G=(0,Q.useRef)(null),K=(0,Q.useRef)(null),q=(0,Q.useRef)(!1),ee=(0,Q.useRef)(null),te=(0,Q.useRef)(null),ne=(0,Q.useRef)(qU),re=(0,Q.useRef)(KU),ie=(0,Q.useRef)(GU),ae=(0,Q.useRef)(WU),oe=(0,Q.useRef)(i),{selectedFilePath:se,selectedFolderPath:ce,navigationPath:le}=GH(i,r),de=se?SH(se,x.find(e=>br(e)&&e.docName===se)?.docExt):ce?DH(ce):i?.kind===`asset`?i.assetPath:null,fe=op().states,{dispatch:pe}=Yf(),J;t[9]!==pe||t[10]!==fe?(J={installStates:fe,isElectronHost:typeof window<`u`&&window.okDesktop!=null,dispatch:pe},t[9]=pe,t[10]=fe,t[11]=J):J=t[11];let me=J,{okignoreBinding:he}=Xr(),ge;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(ge=()=>ee.current===null,t[12]=ge):ge=t[12];let _e=ge,ve;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(ve=[],t[13]=ve):ve=t[13];let ye;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(ye={set:`complete`,spriteSheet:yU},t[14]=ye):ye=t[14];let be;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(be={contextMenu:{enabled:!0,triggerMode:`both`,buttonVisibility:`when-needed`}},t[15]=be):be=t[15];let xe;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(xe={canDrag:_e,canDrop:_e,onDropComplete:e=>ae.current(e),onDropError:UU},t[16]=xe):xe=t[16];let Se;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(Se={paths:ve,flattenEmptyDirectories:!1,initialExpansion:`closed`,fileTreeSearchMode:`hide-non-matches`,initialVisibleRowCount:18,stickyFolders:!0,icons:ye,unsafeCSS:bU,composition:be,dragAndDrop:xe,renaming:{canRename:_e,onRename:e=>re.current(e),onError:e=>ie.current(e)},onSelectionChange:e=>ne.current(e),renderRowDecoration:e=>{let{item:t}=e;if(t.kind!==`file`)return null;let n=F.current.find(e=>br(e)&&SH(e.docName,e.docExt)===t.path);return n?.isSymlink?{icon:hU,title:n.targetPath?`Symlink to ${n.targetPath}`:`Symlink`}:SU(t.path)?{icon:gU,title:`Agent configuration file`}:null}},t[17]=Se):Se=t[17];let{model:Y}=yH(Se),Ce,we;t[18]===x?(Ce=t[19],we=t[20]):(we=kH(x),Ce=AH(we),t[18]=x,t[19]=Ce,t[20]=we);let Te=Ce,Ee=(0,Q.useRef)(we),De;t[21]===x?De=t[22]:(De=MH(x),t[21]=x,t[22]=De);let Oe=De,ke=(0,Q.useRef)(Oe),Ae=ce?NH(DH(ce)).slice(0,-1):NH(de??le),je=Ae.join(`\0`),Me;if(t[23]!==Y){let e=()=>{let e=new Set;for(let t of ke.current)TU(Y.getItem(t))?.isExpanded()&&e.add(t);return e};Me=t=>{let n=new Set(MH(t??F.current)),r=e();for(let e of H.current)r.add(e);return[...r].filter(e=>n.has(e))},t[23]=Y,t[24]=Me}else Me=t[24];let Ne=Me,Fe;t[25]!==Ne||t[26]!==Y?(Fe=e=>{let t=kH(e??F.current);Y.resetPaths(t,{initialExpandedPaths:Ne(e)})},t[25]=Ne,t[26]=Y,t[27]=Fe):Fe=t[27];let Ie=Fe,Le;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(Le=e=>{G.current=jH(e)},t[28]=Le):Le=t[28];let Re=Le,Be;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(Be=e=>B.current.has(e),t[29]=Be):Be=t[29];let Ve=Be,He=function(e){let t=dU(e);if(!t||fU(t))return!1;let n=Y.getFocusedPath()??Y.getSelectedPaths()[0]??null;if(!n||n.endsWith(`/`)||Ve(n))return!1;let r=fU(n);if(!r)return!1;let i=DH(t);if(!ke.current.includes(i))return!1;let a=`${t}${r}`;return Ee.current.includes(a)?!1:(lt({sourcePath:n,destinationPath:a,isFolder:!1}),Y.move(n,a),!0)},Ue;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(Ue=e=>{let t=e??U.current;!t||U.current!==t||(t.disposeCommitListener(),U.current=null)},t[30]=Ue):Ue=t[30];let We=Ue,Ge;t[31]!==We||t[32]!==s||t[33]!==o||t[34]!==Ie?(Ge=async function(e,t){let n=t===void 0?{}:t,r=n.updateUi??!0,i=n.restoreLocation??r;We(e),r&&O(e.renamePath);try{let t=await fetch(`/api/delete-path`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:e.kind,path:e.createdPath})});if(!t.ok&&t.status!==404){let n=await z(t,`Failed to clean up pending ${e.kind}`);if(n.ok)return;let i=`${n.title} - ${e.kind} "${e.createdPath}" still exists on disk`;r?pa.error(i):console.warn(`[FileTree] cleanup pending create failed: ${i}`),r&&(O(null),Ie());return}}catch(t){console.warn(`[FileTree] cleanup pending create failed:`,t),r&&pa.error(`Network error - ${e.kind} "${e.createdPath}" still exists on disk`),r&&(O(null),Ie());return}r&&(e.kind===`file`?s(e.createdPath):o(ze(e.createdPath))),r&&S(t=>{let n=ij(t,e.kind===`file`?[e.createdPath]:[],e.kind===`folder`?e.createdPath:void 0);return Re(n),n}),Rn([`files`,`backlinks`,`graph`]),i&&(window.location.hash=e.previousHash),r&&O(null)},t[31]=We,t[32]=s,t[33]=o,t[34]=Ie,t[35]=Ge):Ge=t[35];let Ke=Ge,qe,Je;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(qe=()=>()=>{let e=U.current;e&&W.current(e,{restoreLocation:!1,updateUi:!1}).catch(HU)},Je=[],t[36]=qe,t[37]=Je):(qe=t[36],Je=t[37]),(0,Q.useEffect)(qe,Je);let Ye,Xe;t[38]===Symbol.for(`react.memo_cache_sentinel`)?(Ye=()=>{let e=!0,t=qH(async function(){try{let t=await z(await fetch(`/api/documents`),`Failed to load documents`);if(!e)return;if(!t.ok)E(t.title);else{let e=yr.safeParse(t.body);e.success?(S(e.data.documents),E(null)):E(`Documents response did not match expected shape.`)}}catch(t){let n=t;e&&E(`Could not reach server`),console.warn(`[FileTree] fetch failed:`,n)}e&&w(!1)});t.request();let n=()=>{document.visibilityState===`visible`&&t.request()};window.addEventListener(`focus`,n),window.addEventListener(`visibilitychange`,n);let r=or(e=>{e.includes(`files`)&&t.request()});return()=>{e=!1,t.dispose(),window.removeEventListener(`focus`,n),window.removeEventListener(`visibilitychange`,n),r()}},Xe=[],t[38]=Ye,t[39]=Xe):(Ye=t[38],Xe=t[39]),(0,Q.useEffect)(Ye,Xe);let Ze,Qe;t[40]===Symbol.for(`react.memo_cache_sentinel`)?(Ze=()=>{let e=!0;return fetch(`/api/workspace`).then(async t=>{let n=await t.json();if(!e||!t.ok)return;let r=g(_n,n,`workspace`,null);r&&P({contentDir:r.contentDir,pathSeparator:r.pathSeparator})}).catch(VU),()=>{e=!1}},Qe=[],t[40]=Ze,t[41]=Qe):(Ze=t[40],Qe=t[41]),(0,Q.useEffect)(Ze,Qe);let $e;t[42]!==Ne||t[43]!==Y||t[44]!==Te?($e=()=>{if(G.current===Te){G.current=null;return}Y.resetPaths(Ee.current,{initialExpandedPaths:Ne()})},t[42]=Ne,t[43]=Y,t[44]=Te,t[45]=$e):$e=t[45];let et;t[46]!==Y||t[47]!==Te?(et=[Y,Te],t[46]=Y,t[47]=Te,t[48]=et):et=t[48],(0,Q.useEffect)($e,et);let tt,nt;t[49]!==je||t[50]!==de||t[51]!==Y?(tt=()=>{if(!de)return;let e=je?je.split(`\0`):[];for(let t of e){let e=TU(Y.getItem(t));e&&!e.isExpanded()&&e.expand()}let t=Y.getItem(de);t&&(q.current=!0,EU(Y,t),t.focus(),queueMicrotask(()=>{q.current=!1}))},nt=[je,de,Y],t[49]=je,t[50]=de,t[51]=Y,t[52]=tt,t[53]=nt):(tt=t[52],nt=t[53]),(0,Q.useEffect)(tt,nt);let rt,it;t[54]===Y?(rt=t[55],it=t[56]):(rt=()=>Y.subscribe(()=>{if(!Y.isSearchOpen())for(let e of H.current){let t=TU(Y.getItem(e));t&&!t.isExpanded()&&t.expand()}}),it=[Y],t[54]=Y,t[55]=rt,t[56]=it),(0,Q.useEffect)(rt,it);let at,ot;t[57]===Y?(at=t[58],ot=t[59]):(at=()=>Y.onMutation(`remove`,e=>{let t=U.current;!t||e.path!==t.renamePath||W.current(t)}),ot=[Y],t[57]=Y,t[58]=at,t[59]=ot),(0,Q.useEffect)(at,ot);let st;t[60]!==m||t[61]!==c||t[62]!==y||t[63]!==d?(st=async(e,t,n)=>{let r=t===void 0?[]:t,i=n?.docName??I.current,a=aj(i,e),o=n?.folderPath??(oe.current?.kind===`folder`?oe.current.folderPath:null),s=o?ue(o,r):null;await Promise.all(e.flatMap(e=>[c(e.fromDocName),c(e.toDocName)]));for(let t of e)m(t.toDocName);d(e,r),S(t=>{let n=rj(t,e,r);return Re(n),n}),o&&s&&s!==o?y(s):a&&a!==i&&(window.location.hash=Wn(a)),Rn([`files`,`backlinks`,`graph`])},t[60]=m,t[61]=c,t[62]=y,t[63]=d,t[64]=st):st=t[64];let ct=st;async function lt(e){let t=IH(e.sourcePath,e.isFolder),n=IH(e.destinationPath,e.isFolder);O(t),E(null);try{if(!e.isFolder&&Ve(t)){pa.error(`Assets cannot be renamed from the sidebar`),Ie(),We(),O(null);return}let r=e.isFolder?{kind:`folder`,fromPath:EH(t),toPath:EH(n)}:{kind:`file`,fromPath:CH(t),toPath:CH(n)},i={docName:I.current,folderPath:oe.current?.kind===`folder`?oe.current.folderPath:null},a=await z(await fetch(`/api/rename-path`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(r)}),`Failed to rename path`);if(!a.ok){pa.error(a.title),E(a.title),Ie();let e=U.current;e&&e.renamePath===t?await Ke(e):We(),O(null);return}await ct(g(ln,a.body,`rename-path`,{renamed:[]}).renamed,e.isFolder?[{fromPath:EH(t),toPath:EH(n)}]:[],i),We(),O(null)}catch(e){console.warn(`[FileTree] rename failed:`,e),pa.error(`Network error — please try again`),E(`Network error — please try again`),Ie();let n=U.current;n&&n.renamePath===t?await Ke(n):We(),O(null)}}let ut;t[65]!==ct||t[66]!==Ie?(ut=async function(e){let t=e.draggedPaths.map(t=>{let n=zH(t,e.target);return t===n?null:{sourcePath:t,destinationTreePath:n}}).filter(BU);if(t.length!==0){if(t.some(e=>Ve(e.sourcePath))){pa.error(`Assets cannot be moved from the sidebar`),Ie();return}O(t[0]?.sourcePath??null),E(null);try{let e=[],n=[],r={docName:I.current,folderPath:oe.current?.kind===`folder`?oe.current.folderPath:null};for(let r of t){let t=r.sourcePath.endsWith(`/`),i=t?{kind:`folder`,fromPath:EH(r.sourcePath),toPath:EH(r.destinationTreePath)}:{kind:`file`,fromPath:CH(r.sourcePath),toPath:CH(r.destinationTreePath)},a=await z(await fetch(`/api/rename-path`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)}),`Failed to move`);if(!a.ok){pa.error(a.title),E(a.title),Ie(),O(null);return}let o=g(ln,a.body,`rename-path:drop`,{renamed:[]});e=e.concat(o.renamed),t&&n.push({fromPath:EH(r.sourcePath),toPath:EH(r.destinationTreePath)})}await ct(e,n,r),O(null)}catch(e){console.warn(`[FileTree] move failed:`,e),pa.error(`Network error — please try again`),Ie(),O(null)}}},t[65]=ct,t[66]=Ie,t[67]=ut):ut=t[67];let dt=ut,ft;t[68]===Symbol.for(`react.memo_cache_sentinel`)?(ft=function(e){M({parentDir:e})},t[68]=ft):ft=t[68];let pt=ft,mt;t[69]!==Ke||t[70]!==We||t[71]!==Y||t[72]!==y||t[73]!==_||t[74]!==Ie||t[75]!==we?(mt=async function(e,t){if(ee.current)return;let n=U.current;n&&We(n);try{let n=LH(e,t,[...we,...ke.current]);O(n.renamePath),ee.current=n.renamePath;let r=window.location.hash,i;if(e===`file`){let e=RH(`file`,n.addPath),t=await z(await fetch(`/api/create-page`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})}),`Failed to create file`);if(!t.ok){pa.error(t.title),E(t.title),O(null),ee.current=null;return}let r=CH(e),a=g(ar,t.body,`create-page`,{docName:r}).docName;i=a;let o=e.toLowerCase().endsWith(`.mdx`)?`.mdx`:`.md`;S(e=>{if(e.some(e=>br(e)&&e.docName===a))return e;let t=[...e,{kind:`document`,docName:a,docExt:o,modified:new Date().toISOString(),size:0}];return Re(t),t}),Rn([`files`,`backlinks`,`graph`]),_(a)}else{let e=EH(n.addPath),t=await z(await fetch(`/api/create-folder`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})}),`Failed to create folder`);if(!t.ok){pa.error(t.title),E(t.title),O(null),ee.current=null;return}i=g(On,t.body,`create-folder`,{path:e}).path,S(e=>{if(e.some(e=>Cr(e)&&e.path===i))return e;let t=[...e,{kind:`folder`,path:i,modified:new Date().toISOString(),size:0}];return Re(t),t}),Rn([`files`]),y(i)}let a=!1,o=e=>{if(e.key!==`Enter`)return;let t=U.current;!t||t.renamePath!==n.renamePath||queueMicrotask(()=>We(t))};document.addEventListener(`keydown`,o,!0),U.current={kind:e,renamePath:n.renamePath,createdPath:i,previousHash:r,disposeCommitListener:()=>{a||(a=!0,document.removeEventListener(`keydown`,o,!0))}},O(null),ee.current=null,Y.add(n.addPath),Y.startRenaming(n.renamePath,{removeIfCanceled:!0})}catch(e){console.warn(`[FileTree] create placeholder failed:`,e),pa.error(`Could not start creating a new item`);let t=U.current;t?await Ke(t):We(),O(null),ee.current=null,Ie()}},t[69]=Ke,t[70]=We,t[71]=Y,t[72]=y,t[73]=_,t[74]=Ie,t[75]=we,t[76]=mt):mt=t[76];let ht=mt,gt;t[77]===Y?gt=t[78]:(gt=function(e){let t=DH(e);(0,Q.startTransition)(()=>{for(let e of ke.current)if(e===t||e.startsWith(t)){let t=TU(Y.getItem(e));t&&t.expand()}})},t[77]=Y,t[78]=gt);let _t=gt,vt;t[79]===Y?vt=t[80]:(vt=function(e){let t=DH(e),n=new Set(H.current);(0,Q.startTransition)(()=>{for(let e of[...ke.current].reverse())if((e===t||e.startsWith(t))&&!n.has(e)){let t=TU(Y.getItem(e));t&&t.collapse()}})},t[79]=Y,t[80]=vt);let yt=vt,bt;t[81]!==Ae||t[82]!==r||t[83]!==i||t[84]!==R||t[85]!==D||t[86]!==Ke||t[87]!==x||t[88]!==Oe||t[89]!==dt||t[90]!==lt||t[91]!==y||t[92]!==_||t[93]!==f||t[94]!==He||t[95]!==we?(bt=()=>{F.current=x,I.current=r,oe.current=i,B.current=R,ee.current=D,Ee.current=we,ke.current=Oe,H.current=Ae,W.current=Ke,ne.current=e=>{if(q.current||e.length!==1)return;let t=KH(e[0],F.current);if(t.kind===`none`){let t=e[0];t&&console.debug(`[FileTree] Dropped selection for unknown docName:`,OH(t));return}if(t.kind===`asset`){window.location.hash=t.hash,f();return}if(t.kind===`folder`){y(t.path);return}_(t.path)},ie.current=e=>{He(e)||pa.error(e)},re.current=lt,ae.current=dt},t[81]=Ae,t[82]=r,t[83]=i,t[84]=R,t[85]=D,t[86]=Ke,t[87]=x,t[88]=Oe,t[89]=dt,t[90]=lt,t[91]=y,t[92]=_,t[93]=f,t[94]=He,t[95]=we,t[96]=bt):bt=t[96],(0,Q.useLayoutEffect)(bt);let xt,St;t[97]===Y?(xt=t[98],St=t[99]):(xt=()=>{let e=e=>{if(!(e.metaKey||e.ctrlKey)||e.altKey||e.key.toLowerCase()!==`a`||jU(e.target))return;let t=te.current,n=e.target,r=document.activeElement,i=n instanceof Node&&t?.contains(n),a=r instanceof Node&&t?.contains(r);if(!i&&!a)return;let o=new Set([...ke.current,...Ee.current]);q.current=!0;for(let e of o)!e||B.current.has(e)||Y.getItem(e)?.select();queueMicrotask(()=>{q.current=!1}),e.preventDefault(),e.stopPropagation()};return document.addEventListener(`keydown`,e,!0),()=>document.removeEventListener(`keydown`,e,!0)},St=[Y],t[97]=Y,t[98]=xt,t[99]=St),(0,Q.useEffect)(xt,St);let Ct;t[100]===Symbol.for(`react.memo_cache_sentinel`)?(Ct={folderCount:0,expandedCount:0},t[100]=Ct):Ct=t[100];let wt=(0,Q.useRef)(Ct),Tt=(0,Q.useRef)(ht),Et=(0,Q.useRef)(pt),Dt;t[101]===ht?Dt=t[102]:(Dt=()=>{Tt.current=ht,Et.current=pt},t[101]=ht,t[102]=Dt),(0,Q.useEffect)(Dt);let Ot,kt;t[103]===Y?(Ot=t[104],kt=t[105]):(Ot=()=>({startCreating(e,t){Tt.current(e,t)},startCreatingFromTemplate(e){Et.current(e)},expandAll(){(0,Q.startTransition)(()=>{for(let e of ke.current){let t=TU(Y.getItem(e));t&&t.expand()}})},collapseAll(){let e=new Set(H.current);(0,Q.startTransition)(()=>{for(let t of[...ke.current].reverse()){if(e.has(t))continue;let n=TU(Y.getItem(t));n&&n.collapse()}})},getFolderState(){let e=ke.current,t=0;for(let n of e)TU(Y.getItem(n))?.isExpanded()&&t++;let n=e.length,r=wt.current;if(r.folderCount===n&&r.expandedCount===t)return r;let i={folderCount:n,expandedCount:t};return wt.current=i,i},subscribe(e){return Y.subscribe(e)}}),kt=[Y],t[103]=Y,t[104]=Ot,t[105]=kt),(0,Q.useImperativeHandle)(n,Ot,kt);let At;t[106]!==We||t[107]!==c||t[108]!==a||t[109]!==Y||t[110]!==Ie?(At=async function(e){let t=e[0];if(t){O(t.path),A(null);try{let t=MU(e,F.current,ke.current),n=[],r=[],i=[];for(let t of e){O(t.path);let e=await z(await fetch(`/api/delete-path`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:t.kind,path:t.path})}),`Failed to delete path`);if(!e.ok){let t=MU(i,F.current,ke.current),o=new Set([...t.docNames,...n]),s=new Set([...t.folderPaths,...r]);a([...[...o].map(zU),...[...s].map(RU)]),await Promise.all([...o].map(e=>c(e))),pa.error(e.title),O(null),Ie(),Rn([`files`,`backlinks`,`graph`]);return}let o=g(Qn,e.body,`delete-path`,{deletedDocNames:[]});n.push(...o.deletedDocNames),t.kind===`folder`&&r.push(t.path),i.push(t)}let o=U.current;o&&e.some(e=>NU(e,o))&&(o.kind===`file`?t.docNames.add(o.createdPath):t.folderPaths.add(o.createdPath),We(o));let s=new Set([...t.docNames,...n]),l=new Set([...t.folderPaths,...r]);a([...[...s].map(LU),...[...l].map(IU)]),await Promise.all([...s].map(e=>c(e)));for(let t of e){let e=t.kind===`folder`?DH(t.path):SH(t.path,t.docExt);Y.getItem(e)&&Y.remove(e,t.kind===`folder`?{recursive:!0}:void 0)}S(e=>{let t=ij(e,[...s]);for(let e of l)t=ij(t,[],e);return Re(t),t}),Rn([`files`,`backlinks`,`graph`]),O(null)}catch(e){console.warn(`[FileTree] delete failed:`,e),pa.error(`Network error — please try again`),O(null),Ie()}}},t[106]=We,t[107]=c,t[108]=a,t[109]=Y,t[110]=Ie,t[111]=At):At=t[111];let jt=At,Mt;t[112]===Symbol.for(`react.memo_cache_sentinel`)?(Mt=function(){let e=K.current;e&&cU(e),K.current=null},t[112]=Mt):Mt=t[112];let Nt=Mt,Pt;t[113]===u?Pt=t[114]:(Pt=function(e){let t=XU(e.nativeEvent),n=t?.dataset.itemPath??null;if(t&&n){let e=n.endsWith(`/`)?n.slice(0,-1):n;t.title!==e&&(t.title=e)}if(!n||n.endsWith(`/`)){Nt();return}let r=CH(n),i=F.current.find(e=>wH(e)===n);if(i&&Tn(i)){Nt();return}K.current!==r&&(Nt(),K.current=r,sU(r,e=>u(e)))},t[113]=u,t[114]=Pt);let Ft=Pt;if(C){let e;return t[115]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,Z.jsx)(QU,{}),t[115]=e):e=t[115],e}if(x.length===0){if(T){let e;return t[116]===T?e=t[117]:(e=(0,Z.jsx)(`div`,{className:`flex flex-1 items-center justify-center py-8`,children:(0,Z.jsx)(`span`,{className:`select-none text-sidebar-foreground/50 text-sm`,children:T})}),t[116]=T,t[117]=e),e}let e;t[118]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,Z.jsx)(`span`,{className:`select-none text-sidebar-foreground/30 text-sm`,children:`No files yet.`}),t[118]=e):e=t[118];let n;return t[119]===ht?n=t[120]:(n=(0,Z.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3 py-8`,children:[e,(0,Z.jsx)(Pr,{variant:`link`,size:`sm`,className:`font-mono uppercase`,onClick:()=>ht(`file`,``),children:`Create your first file`})]}),t[119]=ht,t[120]=n),n}let It=D!==null,Lt=k?.targets[0]??null,Rt;t[121]===T?Rt=t[122]:(Rt=T&&(0,Z.jsx)(`span`,{role:`alert`,className:`px-3 pb-1 text-destructive text-xs`,children:T}),t[121]=T,t[122]=Rt);let zt;t[123]===p?zt=t[124]:(zt=xU(p),t[123]=p,t[124]=zt);let Bt;t[125]!==It||t[126]!==R||t[127]!==yt||t[128]!==_t||t[129]!==me||t[130]!==Y||t[131]!==he||t[132]!==ht||t[133]!==N?(Bt=(e,t)=>(0,Z.jsx)(PU,{item:e,context:t,anyActionBusy:It,workspace:N,handoff:me,model:Y,okignoreBinding:he,onStartCreating:ht,onStartCreatingFromTemplate:pt,onDelete:e=>A({targets:e}),onExpandSubtree:_t,onCollapseSubtree:yt,isAsset:R.has(e.path),isAssetTreePath:Ve}),t[125]=It,t[126]=R,t[127]=yt,t[128]=_t,t[129]=me,t[130]=Y,t[131]=he,t[132]=ht,t[133]=N,t[134]=Bt):Bt=t[134];let Vt;t[135]!==Ft||t[136]!==Y||t[137]!==Rt||t[138]!==zt||t[139]!==Bt?(Vt=(0,Z.jsx)(`div`,{ref:te,className:`flex min-h-0 flex-1 flex-col`,children:(0,Z.jsx)(vH,{header:Rt,model:Y,style:zt,onMouseMove:Ft,onMouseLeave:Nt,renderContextMenu:Bt})}),t[135]=Ft,t[136]=Y,t[137]=Rt,t[138]=zt,t[139]=Bt,t[140]=Vt):Vt=t[140];let Ht=!!k,Ut;t[141]===D?Ut=t[142]:(Ut=e=>{!e&&!D&&A(null)},t[141]=D,t[142]=Ut);let Wt;t[143]!==D||t[144]!==k||t[145]!==jt||t[146]!==Lt?(Wt=k&&Lt&&(0,Z.jsx)(Pi,{itemName:k.targets.length===1?`${Lt.name}${Lt.kind===`file`?Lt.docExt??`.md`:`/`}`:void 0,isSubmitting:D!==null,onDelete:()=>jt(k.targets),customTitle:k.targets.length>1?`Delete selected items`:void 0,customDescription:k.targets.length>1?`Are you sure you want to delete ${k.targets.length} selected items? Folders and all files inside them will be deleted. This action cannot be undone.`:Lt.kind===`folder`?`Are you sure you want to delete ${Lt.name}/ and all files inside? This action cannot be undone.`:void 0}),t[143]=D,t[144]=k,t[145]=jt,t[146]=Lt,t[147]=Wt):Wt=t[147];let Gt;t[148]!==Ht||t[149]!==Ut||t[150]!==Wt?(Gt=(0,Z.jsx)(Ma,{open:Ht,onOpenChange:Ut,children:Wt}),t[148]=Ht,t[149]=Ut,t[150]=Wt,t[151]=Gt):Gt=t[151];let Kt=j!==null,qt;t[152]===Symbol.for(`react.memo_cache_sentinel`)?(qt=e=>{e||M(null)},t[152]=qt):qt=t[152];let Jt=j?.parentDir??``,Yt;t[153]!==Kt||t[154]!==Jt?(Yt=(0,Z.jsx)(Fu,{open:Kt,onOpenChange:qt,kind:`file`,initialDir:Jt}),t[153]=Kt,t[154]=Jt,t[155]=Yt):Yt=t[155];let Xt;return t[156]!==Vt||t[157]!==Gt||t[158]!==Yt?(Xt=(0,Z.jsxs)(Z.Fragment,{children:[Vt,Gt,Yt]}),t[156]=Vt,t[157]=Gt,t[158]=Yt,t[159]=Xt):Xt=t[159],Xt}function IU(e){return ze(e)}function LU(e){return oe(e)}function RU(e){return ze(e)}function zU(e){return oe(e)}function BU(e){return!!e}function VU(e){console.warn(`[FileTree] /api/workspace fetch failed:`,e)}function HU(e){console.warn(`[FileTree] unmount cleanup failed:`,e)}function UU(e){pa.error(e)}function WU(){}function GU(e){return pa.error(e)}function KU(){}function qU(){}async function JU(){}function YU(e){return wH(e)}function XU(e){for(let t of e.composedPath())if(t instanceof HTMLElement&&t.dataset.itemPath)return t;return null}var ZU=[`w-3/4`,`w-2/3`,`w-4/5`,`w-1/2`,`w-3/5`,`w-2/3`];function QU(){let e=(0,$.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,Z.jsx)(`div`,{className:`flex flex-1 flex-col gap-1 px-2 py-2`,role:`status`,"aria-busy":`true`,"aria-label":`Loading files`,children:ZU.map($U)}),e[0]=t):t=e[0],t}function $U(e,t){return(0,Z.jsxs)(`div`,{className:`flex h-6 items-center gap-2`,children:[(0,Z.jsx)(Ti,{className:`h-3 w-3 shrink-0 rounded-sm`}),(0,Z.jsx)(Ti,{className:`h-3 ${e}`})]},t)}var eW=(e,t,n)=>Bs(e,t,n,`ProjectSwitcher`);function tW(e){let t=(0,$.c)(59),{bridge:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=[],t[0]=r):r=t[0];let[i,a]=(0,Q.useState)(r),[o,s]=(0,Q.useState)(!1),c;t[1]!==n.project||t[2]!==o?(c=()=>{if(!o)return;let e=!1;return eW(async()=>{let t=await n.project.listRecent();e||a(t)},`Failed to load recent projects.`),()=>{e=!0}},t[1]=n.project,t[2]=o,t[3]=c):c=t[3];let l;t[4]!==n||t[5]!==o?(l=[o,n],t[4]=n,t[5]=o,t[6]=l):l=t[6],(0,Q.useEffect)(c,l);let u;t[7]===n.project?u=t[8]:(u=e=>{s(!1),eW(()=>n.project.open({path:e,target:`new-window`,entryPoint:`recents`}),`Failed to open project.`)},t[7]=n.project,t[8]=u);let d=u,f;t[9]!==n.dialog||t[10]!==n.project?(f=()=>{s(!1),eW(async()=>{let e=await n.dialog.openFolder();e&&await n.project.open({path:e,target:`new-window`,entryPoint:`pick-existing`})},`Failed to open folder.`)},t[9]=n.dialog,t[10]=n.project,t[11]=f):f=t[11];let p=f,m;t[12]===n.navigator?m=t[13]:(m=()=>{s(!1),eW(()=>n.navigator.open(),`Failed to open Project Navigator.`)},t[12]=n.navigator,t[13]=m);let h=m,g=n.config.projectPath,_,v,y,b,x,S,C,w,T,E,D;if(t[14]!==n.config.projectName||t[15]!==g||t[16]!==o||t[17]!==d||t[18]!==i){let e;t[30]===g?e=t[31]:(e=e=>e.path!==g,t[30]=g,t[31]=e);let r=i.filter(e);v=Ei,S=o,C=s;let a;t[32]===n.config.projectName?a=t[33]:(a=(0,Z.jsx)(`span`,{className:`truncate`,children:n.config.projectName}),t[32]=n.config.projectName,t[33]=a);let c;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,Z.jsx)(jo,{"aria-hidden":`true`,className:`opacity-60`}),t[34]=c):c=t[34],t[35]===a?w=t[36]:(w=(0,Z.jsx)(Zr,{asChild:!0,children:(0,Z.jsxs)(NA,{className:`justify-between text-sidebar-foreground/70`,"data-testid":`project-switcher-trigger`,title:`Open project menu`,children:[a,c]})}),t[35]=a,t[36]=w),_=ta,T=`start`,E=`top`,D=`min-w-[260px]`,y=`project-switcher-menu`,t[37]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,Z.jsx)($r,{className:`font-mono font-normal tracking-wide uppercase text-muted-foreground text-xs`,children:`Recent projects`}),t[37]=b):b=t[37],x=r.length===0?(0,Z.jsx)($r,{className:`font-normal text-muted-foreground text-xs`,children:`No other recent projects.`}):r.slice(0,10).map(e=>(0,Z.jsxs)(hi,{disabled:e.missing,onSelect:()=>d(e.path),className:`flex flex-col items-start gap-0.5`,"data-testid":`project-switcher-recent-${e.path}`,children:[(0,Z.jsx)(`span`,{className:`font-medium text-sm`,children:e.name}),(0,Z.jsxs)(`span`,{className:`max-w-[240px] truncate text-muted-foreground text-xs`,children:[e.path,e.missing?` (missing)`:``]})]},e.path)),t[14]=n.config.projectName,t[15]=g,t[16]=o,t[17]=d,t[18]=i,t[19]=_,t[20]=v,t[21]=y,t[22]=b,t[23]=x,t[24]=S,t[25]=C,t[26]=w,t[27]=T,t[28]=E,t[29]=D}else _=t[19],v=t[20],y=t[21],b=t[22],x=t[23],S=t[24],C=t[25],w=t[26],T=t[27],E=t[28],D=t[29];let O;t[38]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,Z.jsx)(ti,{}),t[38]=O):O=t[38];let k;t[39]===p?k=t[40]:(k=(0,Z.jsx)(hi,{onSelect:p,"data-testid":`project-switcher-open-folder`,children:`Open folder…`}),t[39]=p,t[40]=k);let A;t[41]===h?A=t[42]:(A=(0,Z.jsx)(hi,{onSelect:h,"data-testid":`project-switcher-switch-project`,children:Ud}),t[41]=h,t[42]=A);let j;t[43]!==_||t[44]!==y||t[45]!==b||t[46]!==x||t[47]!==k||t[48]!==A||t[49]!==T||t[50]!==E||t[51]!==D?(j=(0,Z.jsxs)(_,{align:T,side:E,className:D,"data-testid":y,children:[b,x,O,k,A]}),t[43]=_,t[44]=y,t[45]=b,t[46]=x,t[47]=k,t[48]=A,t[49]=T,t[50]=E,t[51]=D,t[52]=j):j=t[52];let M;return t[53]!==v||t[54]!==S||t[55]!==C||t[56]!==w||t[57]!==j?(M=(0,Z.jsxs)(v,{open:S,onOpenChange:C,children:[w,j]}),t[53]=v,t[54]=S,t[55]=C,t[56]=w,t[57]=j,t[58]=M):M=t[58],M}function nW(e){let t=(0,$.c)(33),{notice:n,onDismiss:r}=e,i=n.variant===`error`?`border-destructive/60`:`border-sidebar-border`,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,Z.jsx)(ua,{"aria-hidden":`true`,className:`size-3`}),t[0]=a):a=t[0];let o;t[1]===r?o=t[2]:(o=(0,Z.jsx)(Pr,{variant:`ghost`,size:`icon`,className:`size-5 shrink-0 text-muted-foreground hover:text-sidebar-foreground`,"aria-label":`Dismiss notice`,onClick:r,children:a}),t[1]=r,t[2]=o);let s=o;if(n.secondaryAction){let e=`update-notice-${n.id}`,r=`flex flex-col gap-2 rounded-md border bg-sidebar-accent/30 px-2 py-2 text-xs text-muted-foreground ${i}`,a;t[3]===n.body?a=t[4]:(a=(0,Z.jsx)(`span`,{className:`flex-1 leading-snug`,children:n.body}),t[3]=n.body,t[4]=a);let o;t[5]!==s||t[6]!==a?(o=(0,Z.jsxs)(`div`,{className:`flex items-start gap-2`,children:[a,s]}),t[5]=s,t[6]=a,t[7]=o):o=t[7];let c;t[8]===n.action?c=t[9]:(c=n.action?(0,Z.jsx)(`button`,{type:`button`,className:`shrink-0 text-xs font-medium underline underline-offset-2 decoration-muted-foreground/40 hover:text-sidebar-foreground hover:decoration-sidebar-foreground`,onClick:()=>{n.action?.onClick()},children:n.action.label}):null,t[8]=n.action,t[9]=c);let l;t[10]===n.secondaryAction?l=t[11]:(l=()=>{n.secondaryAction?.onClick()},t[10]=n.secondaryAction,t[11]=l);let u;t[12]!==n.secondaryAction.label||t[13]!==l?(u=(0,Z.jsx)(`button`,{type:`button`,className:`shrink-0 text-xs font-medium underline underline-offset-2 decoration-muted-foreground/40 hover:text-sidebar-foreground hover:decoration-sidebar-foreground`,onClick:l,children:n.secondaryAction.label}),t[12]=n.secondaryAction.label,t[13]=l,t[14]=u):u=t[14];let d;t[15]!==c||t[16]!==u?(d=(0,Z.jsxs)(`div`,{className:`flex gap-3 pl-1`,children:[c,u]}),t[15]=c,t[16]=u,t[17]=d):d=t[17];let f;return t[18]!==d||t[19]!==e||t[20]!==r||t[21]!==o?(f=(0,Z.jsxs)(`div`,{role:`status`,"aria-live":`polite`,"data-testid":e,className:r,children:[o,d]}),t[18]=d,t[19]=e,t[20]=r,t[21]=o,t[22]=f):f=t[22],f}let c=`update-notice-${n.id}`,l=`flex items-center gap-2 rounded-md border bg-sidebar-accent/30 px-2 py-1.5 text-xs text-muted-foreground ${i}`,u;t[23]===n.body?u=t[24]:(u=(0,Z.jsx)(`span`,{className:`flex-1 leading-snug`,children:n.body}),t[23]=n.body,t[24]=u);let d;t[25]===n.action?d=t[26]:(d=n.action?(0,Z.jsx)(`button`,{type:`button`,className:`shrink-0 text-xs font-medium underline underline-offset-2 decoration-muted-foreground/40 hover:text-sidebar-foreground hover:decoration-sidebar-foreground`,onClick:()=>{n.action?.onClick()},children:n.action.label}):null,t[25]=n.action,t[26]=d);let f;return t[27]!==s||t[28]!==c||t[29]!==l||t[30]!==u||t[31]!==d?(f=(0,Z.jsxs)(`div`,{role:`status`,"aria-live":`polite`,"data-testid":c,className:l,children:[u,d,s]}),t[27]=s,t[28]=c,t[29]=l,t[30]=u,t[31]=d,t[32]=f):f=t[32],f}function rW(e){if(e.length===0)return null;let t=e[0];if(!t)return null;for(let n=1;n<e.length;n++){let r=e[n];r&&r.priority<t.priority&&(t=r)}return t}function iW(){let e=(0,$.c)(7),t=(0,Q.useSyncExternalStore)(Bl,zl,zl),n;e[0]===t?n=e[1]:(n=rW(t),e[0]=t,e[1]=n);let r=n;if(!r)return null;let i;e[2]===r.id?i=e[3]:(i=()=>{Rl(r.id)},e[2]=r.id,e[3]=i);let a;return e[4]!==r||e[5]!==i?(a=(0,Z.jsx)(`div`,{"data-testid":`update-notices-list`,children:(0,Z.jsx)(nW,{notice:r,onDismiss:i})}),e[4]=r,e[5]=i,e[6]=a):a=e[6],a}var aW={folderCount:0,expandedCount:0};function oW(e){let t=(0,$.c)(2),{onOpenSearch:n}=e,r;return t[0]===n?r=t[1]:(r=(0,Z.jsx)(K,{name:`file-sidebar`,children:(0,Z.jsx)(cW,{onOpenSearch:n})}),t[0]=n,t[1]=r),r}var sW=e=>{let t=(0,$.c)(15),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({icon:n,label:r,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let a;t[4]===n?a=t[5]:(a=(0,Z.jsx)(n,{"aria-hidden":`true`}),t[4]=n,t[5]=a);let o;t[6]!==r||t[7]!==i||t[8]!==a?(o=(0,Z.jsx)(Sa,{asChild:!0,children:(0,Z.jsx)(Pr,{variant:`ghost`,size:`icon-sm`,"aria-label":r,...i,children:a})}),t[6]=r,t[7]=i,t[8]=a,t[9]=o):o=t[9];let s;t[10]===r?s=t[11]:(s=(0,Z.jsx)(Ca,{children:r}),t[10]=r,t[11]=s);let c;return t[12]!==o||t[13]!==s?(c=(0,Z.jsxs)(Ta,{children:[o,s]}),t[12]=o,t[13]=s,t[14]=c):c=t[14],c};function cW(e){let t=(0,$.c)(36),{onOpenSearch:n}=e,[r,i]=(0,Q.useState)(null),a=typeof window<`u`&&window.okDesktop!=null,{state:o}=yA(),s=o===`expanded`,c=o===`collapsed`,[l,u]=(0,Q.useState)(aW),d,f;t[0]===r?(d=t[1],f=t[2]):(d=()=>{if(r!==null)return u(r.getFolderState()),r.subscribe(()=>{u(r.getFolderState())})},f=[r],t[0]=r,t[1]=d,t[2]=f),(0,Q.useEffect)(d,f);let p=l.folderCount>0,m=p&&l.expandedCount===l.folderCount,h=l.expandedCount===0,g=a&&c&&`opacity-0`,_;t[3]===g?_=t[4]:(_=X(`flex-row h-12 items-center py-0 px-3`,a?`justify-end`:`justify-between`,a&&`motion-safe:transition-opacity motion-safe:duration-100 motion-safe:ease-out`,g,a&&`[-webkit-app-region:drag]`),t[3]=g,t[4]=_);let v;t[5]===s?v=t[6]:(v=s&&!a?(0,Z.jsx)(`span`,{className:`shrink-0 font-mono text-sm uppercase tracking-wider text-sidebar-foreground/50`,children:`Files`}):null,t[5]=s,t[6]=v);let y;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(y=X(`flex items-center gap-1`,a&&`[&>*]:[-webkit-app-region:no-drag]`),t[7]=y):y=t[7];let b;t[8]===n?b=t[9]:(b=(0,Z.jsx)(sW,{icon:xs,label:`Search`,onClick:n}),t[8]=n,t[9]=b);let x;t[10]!==m||t[11]!==p||t[12]!==h||t[13]!==r?(x=p?(0,Z.jsxs)(Ei,{children:[(0,Z.jsx)(Zr,{asChild:!0,children:(0,Z.jsx)(sW,{icon:os,label:`Tree View Options`})}),(0,Z.jsxs)(ta,{align:`end`,children:[m?null:(0,Z.jsxs)(hi,{onSelect:()=>r?.expandAll(),children:[(0,Z.jsx)(Fs,{"aria-hidden":`true`}),`Expand All`]}),h?null:(0,Z.jsxs)(hi,{onSelect:()=>r?.collapseAll(),children:[(0,Z.jsx)(qo,{"aria-hidden":`true`}),`Collapse All`]})]})]}):null,t[10]=m,t[11]=p,t[12]=h,t[13]=r,t[14]=x):x=t[14];let S;t[15]===r?S=t[16]:(S=(0,Z.jsx)(sW,{icon:Ds,label:`New File`,onClick:()=>r?.startCreating(`file`,``)}),t[15]=r,t[16]=S);let C;t[17]===r?C=t[18]:(C=(0,Z.jsx)(sW,{icon:Wo,label:`New from template…`,onClick:()=>r?.startCreatingFromTemplate(``)}),t[17]=r,t[18]=C);let w;t[19]===r?w=t[20]:(w=(0,Z.jsx)(sW,{icon:Yo,label:`New Folder`,onClick:()=>r?.startCreating(`folder`,``)}),t[19]=r,t[20]=w);let T;t[21]!==C||t[22]!==w||t[23]!==b||t[24]!==x||t[25]!==S?(T=(0,Z.jsxs)(`div`,{className:y,children:[b,x,S,C,w]}),t[21]=C,t[22]=w,t[23]=b,t[24]=x,t[25]=S,t[26]=T):T=t[26];let E;t[27]!==T||t[28]!==_||t[29]!==v?(E=(0,Z.jsxs)(DA,{className:_,children:[v,T]}),t[27]=T,t[28]=_,t[29]=v,t[30]=E):E=t[30];let D;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,Z.jsx)(kA,{children:(0,Z.jsx)(FU,{ref:i})}),t[31]=D):D=t[31];let O,k;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,Z.jsxs)(OA,{className:`px-0`,children:[typeof window<`u`&&window.okDesktop?(0,Z.jsx)(AA,{children:(0,Z.jsx)(jA,{children:(0,Z.jsx)(tW,{bridge:window.okDesktop})})}):null,(0,Z.jsx)(iW,{})]}),k=(0,Z.jsx)(TA,{enableToggle:!1}),t[32]=O,t[33]=k):(O=t[32],k=t[33]);let A;return t[34]===E?A=t[35]:(A=(0,Z.jsxs)(CA,{variant:`inset`,children:[E,D,O,k]}),t[34]=E,t[35]=A),A}function lW(){let e=(0,$.c)(17),t=Lt(),{collabUrl:n,setSystemProvider:r,updateServerInstanceId:i,onBranchSwitched:a,observeBranch:o,observeDiskAck:s,refreshServerInfo:c}=Pe(),l;e[0]!==o||e[1]!==s||e[2]!==a||e[3]!==c||e[4]!==i?(l={updateServerInstanceId:i,onBranchSwitched:a,observeBranch:o,observeDiskAck:s,refreshServerInfo:c},e[0]=o,e[1]=s,e[2]=a,e[3]=c,e[4]=i,e[5]=l):l=e[5];let u=(0,Q.useRef)(l),d;e[6]!==o||e[7]!==s||e[8]!==a||e[9]!==c||e[10]!==i?(d=()=>{u.current={updateServerInstanceId:i,onBranchSwitched:a,observeBranch:o,observeDiskAck:s,refreshServerInfo:c}},e[6]=o,e[7]=s,e[8]=a,e[9]=c,e[10]=i,e[11]=d):d=e[11],(0,Q.useEffect)(d);let f,m;return e[12]!==n||e[13]!==t||e[14]!==r?(f=()=>{if(n===null)return;let e=new O,i=new we({url:n,name:$t,document:e,onStateless:e=>{let{payload:t}=e;I(t,{onServerInfo:e=>{u.current.updateServerInstanceId(e.serverInstanceId),e.currentBranch!==void 0&&u.current.observeBranch(e.currentBranch)},onBranchSwitched:e=>{u.current.onBranchSwitched(e.branch)},onDiskAck:e=>{u.current.observeDiskAck(e.docName,e.sv)},onDerivedView:hW,onConfigValidationRejected:mW,onConfigIgnoreNestedError:pW,onUnknown:fW})},onClose:dW,onDisconnect:uW}),a=or(e=>{(e.includes(`files`)||e.includes(`backlinks`))&&(t.invalidateQueries({queryKey:[`backlinks`]}),t.invalidateQueries({queryKey:[`forward-links`]})),(e.includes(`files`)||e.includes(`graph`))&&(t.invalidateQueries({queryKey:[`orphans`]}),t.invalidateQueries({queryKey:[`hubs`]}))}),o=p(()=>{u.current.refreshServerInfo()});i.on(`synced`,()=>{Rn([`files`,`backlinks`,`graph`]),o()});let s=new Set,c=()=>{if(i.awareness)for(let[e,t]of i.awareness.getStates().entries())s.has(e)||t.user?.type===`agent`&&(s.add(e),console.warn(`[agent-presence] observed stale AwarenessUser.type === 'agent' from clientID ${e} — probably a stale bundled client`))};return i.awareness?.on(`change`,c),r(i),()=>{a(),i.awareness?.off(`change`,c),r(null),i.destroy(),e.destroy()}},m=[t,n,r],e[12]=n,e[13]=t,e[14]=r,e[15]=f,e[16]=m):(f=e[15],m=e[16]),(0,Q.useEffect)(f,m),null}function uW(){console.warn(`[CC1] __system__ disconnected - derived views may be stale`)}function dW(e){let{event:t}=e;console.warn(`[CC1] __system__ connection closed:`,t.code,t.reason)}function fW(e){console.warn(`[CC1] Unparseable stateless payload, skipping:`,e.slice(0,100))}function pW(e){qi(e)}function mW(e){Xi(e)}function hW(e){Rn([e.ch])}var gW=`#install-claude-desktop`;function _W(e){return e===`#settings`||e===gW}function vW(e,t){return`${[...e].sort().join(`\0`)}\u0001${[...t].sort().join(`\0`)}`}function yW(){let e=(0,$.c)(18),{clearTarget:t,syncOpenTabsWithKnownTargets:n,tabSessionLoaded:r}=Pe(),{openTargetTransition:i}=Ge(),{folderPaths:a,loading:o,pages:s}=mr(),c=(0,Q.useRef)(null),l;e[0]!==a||e[1]!==s?(l=vW(s,a),e[0]=a,e[1]=s,e[2]=l):l=e[2];let u=l,d,f;e[3]!==a||e[4]!==o||e[5]!==s||e[6]!==n||e[7]!==r||e[8]!==u?(d=()=>{o||!r||c.current===u||(c.current=u,n({pages:s,folderPaths:a}))},f=[a,o,s,n,r,u],e[3]=a,e[4]=o,e[5]=s,e[6]=n,e[7]=r,e[8]=u,e[9]=d,e[10]=f):(d=e[9],f=e[10]),(0,Q.useEffect)(d,f);let p,m;return e[11]!==t||e[12]!==a||e[13]!==o||e[14]!==i||e[15]!==s?(p=()=>{e();function e(){if(_W(window.location.hash))return;let e=hr(window.location.hash);if(e){let t=wr(e.split(`.`).pop()??``);W(`ok/nav/hash-change`,{docName:null,kind:`asset`}),i({kind:`asset`,target:e,assetPath:e,mediaKind:t});return}let n=nr(window.location.hash);if(!n){W(`ok/nav/hash-change`,{docName:null,kind:`clear`}),t();return}if(o){W(`ok/nav/hash-change`,{docName:n,kind:`deferred-loading`});return}let r=Yn(n,{pages:s,folderPaths:a});if(r.kind===`missing`&&/\/+$/.test(n.trim())){W(`ok/nav/hash-change`,{docName:n,kind:`deferred-missing-folder`});return}W(`ok/nav/hash-change`,{docName:n,kind:r.kind}),i(r)}return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},m=[t,a,o,i,s],e[11]=t,e[12]=a,e[13]=o,e[14]=i,e[15]=s,e[16]=p,e[17]=m):(p=e[16],m=e[17]),(0,Q.useEffect)(p,m),null}function bW(){let e=(0,$.c)(5),[t,n]=(0,Q.useState)(typeof window<`u`&&window.location.hash===gW),r,i;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=()=>{let e=function(){window.location.hash===gW&&n(!0)};return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},i=[],e[0]=r,e[1]=i):(r=e[0],i=e[1]),(0,Q.useEffect)(r,i);let a;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(a=function(e){if(n(e),!e&&window.location.hash===gW){let{pathname:e,search:t}=window.location;window.history.replaceState(null,``,`${e}${t}`)}},e[2]=a):a=e[2];let o=a,s;return e[3]===t?s=e[4]:(s=(0,Z.jsx)(Wi,{open:t,onOpenChange:o}),e[3]=t,e[4]=s),s}function xW(){let e=(0,$.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=[],e[0]=t):t=e[0],(0,Q.useEffect)(SW,t),null}function SW(){let e=function(e){let t=e.target;Kd({target:t,metaKey:e.metaKey,ctrlKey:e.ctrlKey,altKey:e.altKey,key:e.key})&&(e.preventDefault(),window.location.hash!==`#settings`&&(window.location.hash=Gd))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)}function CW(){let e=(0,$.c)(8),{activeDocName:t,activeTarget:n}=Pe(),[r,i]=(0,Q.useState)(!1),a;e[0]!==t||e[1]!==n?(a=n?.kind===`folder`?n.folderPath:zn(t),e[0]=t,e[1]=n,e[2]=a):a=e[2];let o=a,s,c;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(s=()=>{let e=function(e){let t=e.target;Nu({target:t,metaKey:e.metaKey,ctrlKey:e.ctrlKey,altKey:e.altKey,key:e.key})&&(e.preventDefault(),i(!0))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},c=[],e[3]=s,e[4]=c):(s=e[3],c=e[4]),(0,Q.useEffect)(s,c);let l;return e[5]!==r||e[6]!==o?(l=(0,Z.jsx)(Fu,{open:r,onOpenChange:i,kind:`file`,initialDir:o}),e[5]=r,e[6]=o,e[7]=l):l=e[7],l}function wW(){let e=(0,$.c)(13),t=typeof window<`u`?window.okDesktop??null:null,[n,r]=(0,Q.useState)(!1),i;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,Z.jsx)(Cp,{}),e[0]=i):i=e[0];let a,o,s,c,l,u;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,Z.jsx)(lW,{}),o=(0,Z.jsx)(yW,{}),s=(0,Z.jsx)(CW,{}),c=(0,Z.jsx)(xW,{}),l=(0,Z.jsx)(bW,{}),u=(0,Z.jsx)(kc,{}),e[1]=a,e[2]=o,e[3]=s,e[4]=c,e[5]=l,e[6]=u):(a=e[1],o=e[2],s=e[3],c=e[4],l=e[5],u=e[6]);let d;e[7]===n?d=e[8]:(d=(0,Z.jsx)(gp,{bridge:t,open:n,onOpenChange:r}),e[7]=n,e[8]=d);let f;e[9]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,Z.jsx)(oW,{onOpenSearch:()=>r(!0)}),e[9]=f):f=e[9];let p;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,Z.jsxs)(bA,{className:`h-screen overflow-hidden`,children:[f,(0,Z.jsx)(EA,{className:`overflow-hidden h-[calc(100vh-var(--layout-inset-offset))]`,children:(0,Z.jsx)(rM,{})})]}),e[10]=p):p=e[10];let m;return e[11]===d?m=e[12]:(m=(0,Z.jsx)(K,{name:`app`,children:(0,Z.jsx)(Ze,{children:(0,Z.jsxs)(pi,{children:[i,(0,Z.jsxs)(ir,{children:[a,o,s,c,l,u,d,p]})]})})}),e[11]=d,e[12]=m),m}oo(),typeof window<`u`&&window.okDesktop?.config.apiOrigin&&Rc({apiOrigin:window.okDesktop.config.apiOrigin}),nl()&&cl(),Vl(),typeof window<`u`&&Vc({bridge:window.okDesktop}),typeof window<`u`&&va({bridge:window.okDesktop}),typeof window<`u`&&Pa({bridge:window.okDesktop}),typeof window<`u`&&Uc({bridge:window.okDesktop});var TW=new go({defaultOptions:{queries:{retry:1,staleTime:1e4}}}),EW=document.getElementById(`root`);if(!EW)throw Error(`Root element not found`);var DW=typeof window<`u`&&window.okDesktop?.config.mode===`navigator`;(0,Eo.createRoot)(EW).render((0,Z.jsx)(Q.StrictMode,{children:(0,Z.jsx)(At,{client:TW,children:(0,Z.jsxs)(yn,{attribute:`class`,defaultTheme:`system`,enableSystem:!0,disableTransitionOnChange:!0,storageKey:`ok-theme-v1`,children:[(0,Z.jsx)(wa,{children:DW&&window.okDesktop?(0,Z.jsx)(Nc,{bridge:window.okDesktop}):(0,Z.jsx)(wW,{})}),(0,Z.jsx)(Lc,{richColors:!0,closeButton:!0})]})})}));
1853
+ `;function xU(e){return{...IN({type:e===`dark`?`dark`:`light`,colors:{"sideBar.background":`var(--sidebar)`,"sideBar.foreground":`var(--sidebar-foreground)`,"sideBar.border":`var(--sidebar-border)`,"list.activeSelectionBackground":`var(--sidebar-accent)`,"list.activeSelectionForeground":`var(--sidebar-accent-foreground)`,"list.hoverBackground":`var(--sidebar-hover)`,focusBorder:`var(--color-primary)`,"input.background":`var(--input)`,"input.border":`var(--border)`}}),"--trees-font-family-override":`var(--font-sans)`,"--trees-font-size-override":`0.875rem`,"--trees-item-padding-x-override":`0.5rem`,"--trees-padding-inline-override":`0.5rem`,"--trees-border-radius-override":`0.375rem`,"--trees-selected-fg":`var(--color-primary)`,"--truncate-marker-fade-in-duration":`0s`,"--trees-file-icon-color-markdown":`light-dark(var(--color-gray-400), var(--color-gray-500))`,"--trees-fg-muted":`light-dark(var(--color-gray-400), var(--color-gray-500))`}}function SU(e){let t=e.split(`/`).pop()?.replace(/\.md$/i,``).toLowerCase();return!!t&&mU.has(t)}function CU(e){return e===`darwin`?`Reveal in Finder`:e===`win32`?`Reveal in File Explorer`:`Open Containing Folder`}function wU(e){let t=(0,$.c)(14),{item:n,workspace:r,onClose:i}=e,a=typeof window<`u`?window.okDesktop:void 0;if(!a)return null;let o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=CU(a.platform),t[0]=o):o=t[0];let s=o,c=r?null:`No workspace`,l=!r,u;t[1]!==n||t[2]!==i||t[3]!==r?(u=()=>{if(!r)return;i();let e=Rf(r.contentDir,FH(n),r.pathSeparator);a.shell.showItemInFolder(e)},t[1]=n,t[2]=i,t[3]=r,t[4]=u):u=t[4];let d=c?`${s}, ${c}`:s,f,p;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,Z.jsx)(xe,{"aria-hidden":`true`}),p=(0,Z.jsx)(`span`,{className:`flex-1`,children:s}),t[5]=f,t[6]=p):(f=t[5],p=t[6]);let m;t[7]===c?m=t[8]:(m=c?(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:`ml-2 text-muted-foreground text-xs`,children:c}):null,t[7]=c,t[8]=m);let h;return t[9]!==l||t[10]!==u||t[11]!==d||t[12]!==m?(h=(0,Z.jsxs)(hi,{disabled:l,onSelect:u,"aria-label":d,children:[f,p,m]}),t[9]=l,t[10]=u,t[11]=d,t[12]=m,t[13]=h):h=t[13],h}function TU(e){return e?.isDirectory()?e:null}function EU(e,t){let n=t.getPath();for(let t of e.getSelectedPaths())t!==n&&e.getItem(t)?.deselect();t.isSelected()||t.select()}function DU(e){return PH({kind:e.endsWith(`/`)?`directory`:`file`,name:e,path:e})}function OU(e,t){return e!==t&&e.startsWith(t)}function kU(e,t){let n=[...new Set(e)].filter(e=>!t(e)),r=n.filter(e=>e.endsWith(`/`));return n.filter(e=>!r.some(t=>OU(e,t))).map(DU)}function AU(e,t){return e===t||e.startsWith(`${t}/`)}function jU(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return t===`INPUT`||t===`TEXTAREA`||t===`SELECT`||e.isContentEditable||e.closest(`[contenteditable="true"]`)!==null}function MU(e,t,n){let r=new Set,i=new Set;for(let a of e){if(a.kind===`file`){r.add(a.path);continue}i.add(a.path);for(let e of t)br(e)&&e.docName.startsWith(`${a.path}/`)&&r.add(e.docName);for(let e of n){let t=EH(e);AU(t,a.path)&&i.add(t)}}return{docNames:r,folderPaths:i}}function NU(e,t){return e.kind===`file`?t.kind===`file`&&e.path===t.createdPath:AU(t.createdPath,e.path)}function PU(e){let t=(0,$.c)(85),{item:n,context:r,anyActionBusy:i,workspace:a,handoff:o,model:s,okignoreBinding:l,onStartCreating:u,onStartCreatingFromTemplate:d,onDelete:f,onExpandSubtree:p,onCollapseSubtree:m,isAsset:h,isAssetTreePath:g}=e,_,v,y,b,x;if(t[0]!==h||t[1]!==g||t[2]!==n||t[3]!==s||t[4]!==l){x=PH(n),y=n.kind===`directory`,_=!h&&l!==null,v=y?`Hide files in this folder`:`Hide this file`;let e=s.getSelectedPaths();b=e.includes(x.treePath)?kU(e,g):[],t[0]=h,t[1]=g,t[2]=n,t[3]=s,t[4]=l,t[5]=_,t[6]=v,t[7]=y,t[8]=b,t[9]=x}else _=t[5],v=t[6],y=t[7],b=t[8],x=t[9];let S=b,C;t[10]!==S||t[11]!==x?(C=S.length>1?S:[x],t[10]=S,t[11]=x,t[12]=C):C=t[12];let w=C,T=w.length>1?`Delete ${w.length} Items`:`Delete`,E;t[13]!==y||t[14]!==n.path||t[15]!==a?(E=y?null:Bf({docName:CH(n.path),workspace:a}),t[13]=y,t[14]=n.path,t[15]=a,t[16]=E):E=t[16];let D=E,O;t[17]===r?O=t[18]:(O=()=>r.close({restoreFocus:!1}),t[17]=r,t[18]=O);let k=O,A;t[19]===r?A=t[20]:(A=()=>r.close(),t[19]=r,t[20]=A);let j=A,M;t[21]===j?M=t[22]:(M=e=>{e||j()},t[21]=j,t[22]=M);let N;t[23]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,Z.jsx)(Zr,{asChild:!0,children:(0,Z.jsx)(`span`,{"aria-hidden":`true`,"data-file-tree-context-menu-root":`true`,className:`block size-px`})}),t[23]=N):N=t[23];let P;t[24]!==i||t[25]!==j||t[26]!==k||t[27]!==y||t[28]!==n.path||t[29]!==m||t[30]!==p||t[31]!==u||t[32]!==d?(P=y?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(hi,{disabled:i,onSelect:()=>{k(),u(`file`,EH(n.path))},children:[(0,Z.jsx)(Ds,{"aria-hidden":`true`}),`New File`]}),(0,Z.jsxs)(hi,{disabled:i,onSelect:()=>{k(),d(EH(n.path))},children:[(0,Z.jsx)(Wo,{"aria-hidden":`true`}),`New from template…`]}),(0,Z.jsxs)(hi,{disabled:i,onSelect:()=>{k(),u(`folder`,EH(n.path))},children:[(0,Z.jsx)(Yo,{"aria-hidden":`true`}),`New Folder`]}),(0,Z.jsx)(ti,{}),(0,Z.jsxs)(hi,{onSelect:()=>{j(),p(n.path)},children:[(0,Z.jsx)(Fs,{"aria-hidden":`true`}),`Expand All`]}),(0,Z.jsxs)(hi,{onSelect:()=>{j(),m(n.path)},children:[(0,Z.jsx)(qo,{"aria-hidden":`true`}),`Collapse All`]}),(0,Z.jsx)(ti,{})]}):null,t[24]=i,t[25]=j,t[26]=k,t[27]=y,t[28]=n.path,t[29]=m,t[30]=p,t[31]=u,t[32]=d,t[33]=P):P=t[33];let F;t[34]!==i||t[35]!==k||t[36]!==h||t[37]!==n.path||t[38]!==s?(F=h?null:(0,Z.jsxs)(hi,{disabled:i,onSelect:()=>{k(),s.startRenaming(n.path)},children:[(0,Z.jsx)(Ce,{"aria-hidden":`true`}),`Rename`]}),t[34]=i,t[35]=k,t[36]=h,t[37]=n.path,t[38]=s,t[39]=F):F=t[39];let I;t[40]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,Z.jsxs)(Ri,{children:[(0,Z.jsx)(Gi,{"aria-hidden":`true`}),`Copy Path`]}),t[40]=I):I=t[40];let L=!a,R;t[41]!==j||t[42]!==n||t[43]!==a?(R=()=>{a&&(j(),pU(Rf(a.contentDir,FH(n),a.pathSeparator),`full path`))},t[41]=j,t[42]=n,t[43]=a,t[44]=R):R=t[44];let z;t[45]!==L||t[46]!==R?(z=(0,Z.jsx)(hi,{disabled:L,onSelect:R,children:`Full Path`}),t[45]=L,t[46]=R,t[47]=z):z=t[47];let B;t[48]!==j||t[49]!==n?(B=(0,Z.jsx)(hi,{onSelect:()=>{j(),pU(FH(n),`relative path`)},children:`Relative Path`}),t[48]=j,t[49]=n,t[50]=B):B=t[50];let V;t[51]!==z||t[52]!==B?(V=(0,Z.jsxs)(ei,{children:[I,(0,Z.jsxs)(di,{children:[z,B]})]}),t[51]=z,t[52]=B,t[53]=V):V=t[53];let H;t[54]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,Z.jsx)(ti,{}),t[54]=H):H=t[54];let U;t[55]!==j||t[56]!==n||t[57]!==a?(U=(0,Z.jsx)(wU,{item:n,workspace:a,onClose:j}),t[55]=j,t[56]=n,t[57]=a,t[58]=U):U=t[58];let W;t[59]!==o||t[60]!==D||t[61]!==h||t[62]!==y?(W=!y&&!h&&(0,Z.jsx)(YH,{input:D,installStates:o.installStates,isElectronHost:o.isElectronHost,dispatch:o.dispatch}),t[59]=o,t[60]=D,t[61]=h,t[62]=y,t[63]=W):W=t[63];let G;t[64]!==i||t[65]!==_||t[66]!==j||t[67]!==T||t[68]!==w||t[69]!==v||t[70]!==h||t[71]!==l||t[72]!==f||t[73]!==x?(G=h?null:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(ti,{}),(0,Z.jsxs)(hi,{"data-testid":`file-tree-menu-hide`,disabled:!_,onSelect:()=>{if(!l)return;j();let e=UH(x),t=ki(wi(Di(l.current()),e));l.patch(t)},children:[(0,Z.jsx)(Ho,{"aria-hidden":`true`}),v]}),(0,Z.jsx)(ti,{}),(0,Z.jsxs)(hi,{variant:`destructive`,disabled:i,onSelect:()=>{j(),f(w)},children:[(0,Z.jsx)(c,{"aria-hidden":`true`}),T]})]}),t[64]=i,t[65]=_,t[66]=j,t[67]=T,t[68]=w,t[69]=v,t[70]=h,t[71]=l,t[72]=f,t[73]=x,t[74]=G):G=t[74];let K;t[75]!==V||t[76]!==U||t[77]!==W||t[78]!==G||t[79]!==P||t[80]!==F?(K=(0,Z.jsxs)(ta,{sideOffset:0,align:`start`,"data-file-tree-context-menu-root":`true`,className:`min-w-52`,children:[P,F,V,H,U,W,G]}),t[75]=V,t[76]=U,t[77]=W,t[78]=G,t[79]=P,t[80]=F,t[81]=K):K=t[81];let q;return t[82]!==K||t[83]!==M?(q=(0,Z.jsxs)(Ei,{open:!0,modal:!1,onOpenChange:M,children:[N,K]}),t[82]=K,t[83]=M,t[84]=q):q=t[84],q}function FU(e){let t=(0,$.c)(164),{ref:n}=e,{activeDocName:r,activeTarget:i,closeTabs:a,closeTab:o,closeDocument:s,closeAndClearForRename:c,openTarget:l,prewarm:u,remapTabsForRename:d}=Pe(),{notifySidebarFileSelected:f}=yA(),{resolvedTheme:p}=nn(),{addPage:m}=mr(),h;t[0]===f?h=t[1]:(h=function(e){uU(e),f()},t[0]=f,t[1]=h);let _=h,v;t[2]!==f||t[3]!==l?(v=function(e){let t=En(e);if(window.location.hash!==t){let{pathname:e,search:n}=window.location;window.history.replaceState(null,``,`${e}${n}${t}`)}l({kind:`folder`,target:e,folderPath:e}),f()},t[2]=f,t[3]=l,t[4]=v):v=t[4];let y=v,b;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(b=[],t[5]=b):b=t[5];let[x,S]=(0,Q.useState)(b),[C,w]=(0,Q.useState)(!0),[T,E]=(0,Q.useState)(null),[D,O]=(0,Q.useState)(null),[k,A]=(0,Q.useState)(null),[j,M]=(0,Q.useState)(null),[N,P]=(0,Q.useState)(null),F=(0,Q.useRef)(x),I=(0,Q.useRef)(r),L;t[6]===x?L=t[7]:(L=new Set(x.filter(Tn).map(XU)),t[6]=x,t[7]=L);let R=L,B=(0,Q.useRef)(R),V;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(V=[],t[8]=V):V=t[8];let H=(0,Q.useRef)(V),U=(0,Q.useRef)(null),W=(0,Q.useRef)(YU),G=(0,Q.useRef)(null),K=(0,Q.useRef)(null),q=(0,Q.useRef)(!1),ee=(0,Q.useRef)(null),te=(0,Q.useRef)(null),ne=(0,Q.useRef)(JU),re=(0,Q.useRef)(qU),ie=(0,Q.useRef)(KU),ae=(0,Q.useRef)(GU),oe=(0,Q.useRef)(i),{selectedFilePath:se,selectedFolderPath:ce,navigationPath:le}=GH(i,r),de=se?SH(se,x.find(e=>br(e)&&e.docName===se)?.docExt):ce?DH(ce):i?.kind===`asset`?i.assetPath:null,fe=op().states,{dispatch:pe}=Yf(),J;t[9]!==pe||t[10]!==fe?(J={installStates:fe,isElectronHost:typeof window<`u`&&window.okDesktop!=null,dispatch:pe},t[9]=pe,t[10]=fe,t[11]=J):J=t[11];let me=J,{okignoreBinding:he}=Xr(),ge;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(ge=()=>ee.current===null,t[12]=ge):ge=t[12];let _e=ge,ve;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(ve=[],t[13]=ve):ve=t[13];let ye;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(ye={set:`complete`,spriteSheet:yU},t[14]=ye):ye=t[14];let be;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(be={contextMenu:{enabled:!0,triggerMode:`both`,buttonVisibility:`when-needed`}},t[15]=be):be=t[15];let xe;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(xe={canDrag:_e,canDrop:_e,onDropComplete:e=>ae.current(e),onDropError:WU},t[16]=xe):xe=t[16];let Se;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(Se={paths:ve,flattenEmptyDirectories:!1,initialExpansion:`closed`,fileTreeSearchMode:`hide-non-matches`,initialVisibleRowCount:18,stickyFolders:!0,icons:ye,unsafeCSS:bU,composition:be,dragAndDrop:xe,renaming:{canRename:_e,onRename:e=>re.current(e),onError:e=>ie.current(e)},onSelectionChange:e=>ne.current(e),renderRowDecoration:e=>{let{item:t}=e;if(t.kind!==`file`)return null;let n=F.current.find(e=>br(e)&&SH(e.docName,e.docExt)===t.path);return n?.isSymlink?{icon:hU,title:n.targetPath?`Symlink to ${n.targetPath}`:`Symlink`}:SU(t.path)?{icon:gU,title:`Agent configuration file`}:null}},t[17]=Se):Se=t[17];let{model:Y}=yH(Se),Ce,we;t[18]===x?(Ce=t[19],we=t[20]):(we=kH(x),Ce=AH(we),t[18]=x,t[19]=Ce,t[20]=we);let Te=Ce,Ee=(0,Q.useRef)(we),De;t[21]===x?De=t[22]:(De=MH(x),t[21]=x,t[22]=De);let Oe=De,ke=(0,Q.useRef)(Oe),Ae=ce?NH(DH(ce)).slice(0,-1):NH(de??le),je=Ae.join(`\0`),Me;if(t[23]!==Y){let e=()=>{let e=new Set;for(let t of ke.current)TU(Y.getItem(t))?.isExpanded()&&e.add(t);return e};Me=t=>{let n=new Set(MH(t??F.current)),r=e();for(let e of H.current)r.add(e);return[...r].filter(e=>n.has(e))},t[23]=Y,t[24]=Me}else Me=t[24];let Ne=Me,Fe;t[25]!==Ne||t[26]!==Y?(Fe=e=>{let t=kH(e??F.current);Y.resetPaths(t,{initialExpandedPaths:Ne(e)})},t[25]=Ne,t[26]=Y,t[27]=Fe):Fe=t[27];let Ie=Fe,Le;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(Le=e=>{G.current=jH(e)},t[28]=Le):Le=t[28];let Re=Le,Be;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(Be=e=>B.current.has(e),t[29]=Be):Be=t[29];let Ve=Be,He=function(e){let t=dU(e);if(!t||fU(t))return!1;let n=Y.getFocusedPath()??Y.getSelectedPaths()[0]??null;if(!n||n.endsWith(`/`)||Ve(n))return!1;let r=fU(n);if(!r)return!1;let i=DH(t);if(!ke.current.includes(i))return!1;let a=`${t}${r}`;return Ee.current.includes(a)?!1:(lt({sourcePath:n,destinationPath:a,isFolder:!1}),Y.move(n,a),!0)},Ue;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(Ue=e=>{let t=e??U.current;!t||U.current!==t||(t.disposeCommitListener(),U.current=null)},t[30]=Ue):Ue=t[30];let We=Ue,Ge;t[31]!==We||t[32]!==s||t[33]!==o||t[34]!==Ie?(Ge=async function(e,t){let n=t===void 0?{}:t,r=n.updateUi??!0,i=n.restoreLocation??r;We(e),r&&O(e.renamePath);try{let t=await fetch(`/api/delete-path`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:e.kind,path:e.createdPath})});if(!t.ok&&t.status!==404){let n=await z(t,`Failed to clean up pending ${e.kind}`);if(n.ok)return;let i=`${n.title} - ${e.kind} "${e.createdPath}" still exists on disk`;r?pa.error(i):console.warn(`[FileTree] cleanup pending create failed: ${i}`),r&&(O(null),Ie());return}}catch(t){console.warn(`[FileTree] cleanup pending create failed:`,t),r&&pa.error(`Network error - ${e.kind} "${e.createdPath}" still exists on disk`),r&&(O(null),Ie());return}r&&(e.kind===`file`?s(e.createdPath):o(ze(e.createdPath))),r&&S(t=>{let n=ij(t,e.kind===`file`?[e.createdPath]:[],e.kind===`folder`?e.createdPath:void 0);return Re(n),n}),Rn([`files`,`backlinks`,`graph`]),i&&(window.location.hash=e.previousHash),r&&O(null)},t[31]=We,t[32]=s,t[33]=o,t[34]=Ie,t[35]=Ge):Ge=t[35];let Ke=Ge,qe,Je;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(qe=()=>()=>{let e=U.current;e&&W.current(e,{restoreLocation:!1,updateUi:!1}).catch(UU)},Je=[],t[36]=qe,t[37]=Je):(qe=t[36],Je=t[37]),(0,Q.useEffect)(qe,Je);let Ye,Xe;t[38]===Symbol.for(`react.memo_cache_sentinel`)?(Ye=()=>{let e=!0,t=qH(async function(){try{let t=await z(await fetch(`/api/documents`),`Failed to load documents`);if(!e)return;if(!t.ok)E(t.title);else{let e=yr.safeParse(t.body);e.success?(S(e.data.documents),E(null)):E(`Documents response did not match expected shape.`)}}catch(t){let n=t;e&&E(`Could not reach server`),console.warn(`[FileTree] fetch failed:`,n)}e&&w(!1)});t.request();let n=()=>{document.visibilityState===`visible`&&t.request()};window.addEventListener(`focus`,n),window.addEventListener(`visibilitychange`,n);let r=or(e=>{e.includes(`files`)&&t.request()});return()=>{e=!1,t.dispose(),window.removeEventListener(`focus`,n),window.removeEventListener(`visibilitychange`,n),r()}},Xe=[],t[38]=Ye,t[39]=Xe):(Ye=t[38],Xe=t[39]),(0,Q.useEffect)(Ye,Xe);let Ze,Qe;t[40]===Symbol.for(`react.memo_cache_sentinel`)?(Ze=()=>{let e=!0;return fetch(`/api/workspace`).then(async t=>{let n=await t.json();if(!e||!t.ok)return;let r=g(_n,n,`workspace`,null);r&&P({contentDir:r.contentDir,pathSeparator:r.pathSeparator})}).catch(HU),()=>{e=!1}},Qe=[],t[40]=Ze,t[41]=Qe):(Ze=t[40],Qe=t[41]),(0,Q.useEffect)(Ze,Qe);let $e;t[42]!==Ne||t[43]!==Y||t[44]!==Te?($e=()=>{if(G.current===Te){G.current=null;return}Y.resetPaths(Ee.current,{initialExpandedPaths:Ne()})},t[42]=Ne,t[43]=Y,t[44]=Te,t[45]=$e):$e=t[45];let et;t[46]!==Y||t[47]!==Te?(et=[Y,Te],t[46]=Y,t[47]=Te,t[48]=et):et=t[48],(0,Q.useEffect)($e,et);let tt,nt;t[49]!==je||t[50]!==de||t[51]!==Y?(tt=()=>{if(!de)return;let e=je?je.split(`\0`):[];for(let t of e){let e=TU(Y.getItem(t));e&&!e.isExpanded()&&e.expand()}let t=Y.getItem(de);t&&(q.current=!0,EU(Y,t),t.focus(),queueMicrotask(()=>{q.current=!1}))},nt=[je,de,Y],t[49]=je,t[50]=de,t[51]=Y,t[52]=tt,t[53]=nt):(tt=t[52],nt=t[53]),(0,Q.useEffect)(tt,nt);let rt,it;t[54]===Y?(rt=t[55],it=t[56]):(rt=()=>Y.subscribe(()=>{if(!Y.isSearchOpen())for(let e of H.current){let t=TU(Y.getItem(e));t&&!t.isExpanded()&&t.expand()}}),it=[Y],t[54]=Y,t[55]=rt,t[56]=it),(0,Q.useEffect)(rt,it);let at,ot;t[57]===Y?(at=t[58],ot=t[59]):(at=()=>Y.onMutation(`remove`,e=>{let t=U.current;!t||e.path!==t.renamePath||W.current(t)}),ot=[Y],t[57]=Y,t[58]=at,t[59]=ot),(0,Q.useEffect)(at,ot);let st;t[60]!==m||t[61]!==c||t[62]!==y||t[63]!==d?(st=async(e,t,n)=>{let r=t===void 0?[]:t,i=n?.docName??I.current,a=aj(i,e),o=n?.folderPath??(oe.current?.kind===`folder`?oe.current.folderPath:null),s=o?ue(o,r):null;await Promise.all(e.flatMap(e=>[c(e.fromDocName),c(e.toDocName)]));for(let t of e)m(t.toDocName);d(e,r),S(t=>{let n=rj(t,e,r);return Re(n),n}),o&&s&&s!==o?y(s):a&&a!==i&&(window.location.hash=Wn(a)),Rn([`files`,`backlinks`,`graph`])},t[60]=m,t[61]=c,t[62]=y,t[63]=d,t[64]=st):st=t[64];let ct=st;async function lt(e){let t=IH(e.sourcePath,e.isFolder),n=IH(e.destinationPath,e.isFolder);O(t),E(null);try{if(!e.isFolder&&Ve(t)){pa.error(`Assets cannot be renamed from the sidebar`),Ie(),We(),O(null);return}let r=e.isFolder?{kind:`folder`,fromPath:EH(t),toPath:EH(n)}:{kind:`file`,fromPath:CH(t),toPath:CH(n)},i={docName:I.current,folderPath:oe.current?.kind===`folder`?oe.current.folderPath:null},a=await z(await fetch(`/api/rename-path`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(r)}),`Failed to rename path`);if(!a.ok){pa.error(a.title),E(a.title),Ie();let e=U.current;e&&e.renamePath===t?await Ke(e):We(),O(null);return}await ct(g(ln,a.body,`rename-path`,{renamed:[]}).renamed,e.isFolder?[{fromPath:EH(t),toPath:EH(n)}]:[],i),We(),O(null)}catch(e){console.warn(`[FileTree] rename failed:`,e),pa.error(`Network error — please try again`),E(`Network error — please try again`),Ie();let n=U.current;n&&n.renamePath===t?await Ke(n):We(),O(null)}}let ut;t[65]!==ct||t[66]!==Ie?(ut=async function(e){let t=e.draggedPaths.map(t=>{let n=zH(t,e.target);return t===n?null:{sourcePath:t,destinationTreePath:n}}).filter(VU);if(t.length!==0){if(t.some(e=>Ve(e.sourcePath))){pa.error(`Assets cannot be moved from the sidebar`),Ie();return}O(t[0]?.sourcePath??null),E(null);try{let e=[],n=[],r={docName:I.current,folderPath:oe.current?.kind===`folder`?oe.current.folderPath:null};for(let r of t){let t=r.sourcePath.endsWith(`/`),i=t?{kind:`folder`,fromPath:EH(r.sourcePath),toPath:EH(r.destinationTreePath)}:{kind:`file`,fromPath:CH(r.sourcePath),toPath:CH(r.destinationTreePath)},a=await z(await fetch(`/api/rename-path`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)}),`Failed to move`);if(!a.ok){pa.error(a.title),E(a.title),Ie(),O(null);return}let o=g(ln,a.body,`rename-path:drop`,{renamed:[]});e=e.concat(o.renamed),t&&n.push({fromPath:EH(r.sourcePath),toPath:EH(r.destinationTreePath)})}await ct(e,n,r),O(null)}catch(e){console.warn(`[FileTree] move failed:`,e),pa.error(`Network error — please try again`),Ie(),O(null)}}},t[65]=ct,t[66]=Ie,t[67]=ut):ut=t[67];let dt=ut,ft;t[68]===Symbol.for(`react.memo_cache_sentinel`)?(ft=function(e){M({parentDir:e})},t[68]=ft):ft=t[68];let pt=ft,mt;t[69]!==Ke||t[70]!==We||t[71]!==Y||t[72]!==y||t[73]!==_||t[74]!==Ie||t[75]!==we?(mt=async function(e,t){if(ee.current)return;let n=U.current;n&&We(n);try{let n=LH(e,t,[...we,...ke.current]);O(n.renamePath),ee.current=n.renamePath;let r=window.location.hash,i;if(e===`file`){let e=RH(`file`,n.addPath),t=await z(await fetch(`/api/create-page`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})}),`Failed to create file`);if(!t.ok){pa.error(t.title),E(t.title),O(null),ee.current=null;return}let r=CH(e),a=g(ar,t.body,`create-page`,{docName:r}).docName;i=a;let o=e.toLowerCase().endsWith(`.mdx`)?`.mdx`:`.md`;S(e=>{if(e.some(e=>br(e)&&e.docName===a))return e;let t=[...e,{kind:`document`,docName:a,docExt:o,modified:new Date().toISOString(),size:0}];return Re(t),t}),Rn([`files`,`backlinks`,`graph`]),_(a)}else{let e=EH(n.addPath),t=await z(await fetch(`/api/create-folder`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})}),`Failed to create folder`);if(!t.ok){pa.error(t.title),E(t.title),O(null),ee.current=null;return}i=g(On,t.body,`create-folder`,{path:e}).path,S(e=>{if(e.some(e=>Cr(e)&&e.path===i))return e;let t=[...e,{kind:`folder`,path:i,modified:new Date().toISOString(),size:0}];return Re(t),t}),Rn([`files`]),y(i)}let a=!1,o=e=>{if(e.key!==`Enter`)return;let t=U.current;!t||t.renamePath!==n.renamePath||queueMicrotask(()=>We(t))};document.addEventListener(`keydown`,o,!0),U.current={kind:e,renamePath:n.renamePath,createdPath:i,previousHash:r,disposeCommitListener:()=>{a||(a=!0,document.removeEventListener(`keydown`,o,!0))}},O(null),ee.current=null,Y.add(n.addPath),Y.startRenaming(n.renamePath,{removeIfCanceled:!0})}catch(e){console.warn(`[FileTree] create placeholder failed:`,e),pa.error(`Could not start creating a new item`);let t=U.current;t?await Ke(t):We(),O(null),ee.current=null,Ie()}},t[69]=Ke,t[70]=We,t[71]=Y,t[72]=y,t[73]=_,t[74]=Ie,t[75]=we,t[76]=mt):mt=t[76];let ht=mt,gt;t[77]===Y?gt=t[78]:(gt=function(e){let t=DH(e);(0,Q.startTransition)(()=>{for(let e of ke.current)if(e===t||e.startsWith(t)){let t=TU(Y.getItem(e));t&&t.expand()}})},t[77]=Y,t[78]=gt);let _t=gt,vt;t[79]===Y?vt=t[80]:(vt=function(e){let t=DH(e),n=new Set(H.current);(0,Q.startTransition)(()=>{for(let e of[...ke.current].reverse())if((e===t||e.startsWith(t))&&!n.has(e)){let t=TU(Y.getItem(e));t&&t.collapse()}})},t[79]=Y,t[80]=vt);let yt=vt,bt;t[81]!==Ae||t[82]!==r||t[83]!==i||t[84]!==R||t[85]!==D||t[86]!==Ke||t[87]!==x||t[88]!==Oe||t[89]!==dt||t[90]!==lt||t[91]!==y||t[92]!==_||t[93]!==f||t[94]!==He||t[95]!==we?(bt=()=>{F.current=x,I.current=r,oe.current=i,B.current=R,ee.current=D,Ee.current=we,ke.current=Oe,H.current=Ae,W.current=Ke,ne.current=e=>{if(q.current||e.length!==1)return;let t=KH(e[0],F.current);if(t.kind===`none`){let t=e[0];t&&console.debug(`[FileTree] Dropped selection for unknown docName:`,OH(t));return}if(t.kind===`asset`){window.location.hash=t.hash,f();return}if(t.kind===`folder`){y(t.path);return}_(t.path)},ie.current=e=>{He(e)||pa.error(e)},re.current=lt,ae.current=dt},t[81]=Ae,t[82]=r,t[83]=i,t[84]=R,t[85]=D,t[86]=Ke,t[87]=x,t[88]=Oe,t[89]=dt,t[90]=lt,t[91]=y,t[92]=_,t[93]=f,t[94]=He,t[95]=we,t[96]=bt):bt=t[96],(0,Q.useLayoutEffect)(bt);let xt,St;t[97]===Y?(xt=t[98],St=t[99]):(xt=()=>{let e=e=>{if(!(e.metaKey||e.ctrlKey)||e.altKey||e.key.toLowerCase()!==`a`||jU(e.target))return;let t=te.current,n=e.target,r=document.activeElement,i=n instanceof Node&&t?.contains(n),a=r instanceof Node&&t?.contains(r);if(!i&&!a)return;let o=new Set([...ke.current,...Ee.current]);q.current=!0;for(let e of o)!e||B.current.has(e)||Y.getItem(e)?.select();queueMicrotask(()=>{q.current=!1}),e.preventDefault(),e.stopPropagation()};return document.addEventListener(`keydown`,e,!0),()=>document.removeEventListener(`keydown`,e,!0)},St=[Y],t[97]=Y,t[98]=xt,t[99]=St),(0,Q.useEffect)(xt,St);let Ct,wt;t[100]!==x.length||t[101]!==C?(Ct=()=>{if(C||x.length===0)return;let e=te.current?.querySelector(hN)?.shadowRoot;if(!e)return;let t=BU,n=()=>{for(let n of e.querySelectorAll(`[data-item-path]`)){let e=n.dataset.itemPath;if(!e)continue;let r=t(e);n.title!==r&&(n.title=r)}let n=e.querySelector(`[data-type="context-menu-anchor"]`);if(n){let r=e.querySelector(`[data-item-context-hover="true"][data-item-path]`)?.dataset.itemPath,i=r?t(r):``;n.title!==i&&(n.title=i)}};n();let r=new MutationObserver(n);return r.observe(e,{subtree:!0,childList:!0,attributes:!0,attributeFilter:[`data-item-path`,`data-item-context-hover`]}),()=>r.disconnect()},wt=[C,x.length],t[100]=x.length,t[101]=C,t[102]=Ct,t[103]=wt):(Ct=t[102],wt=t[103]),(0,Q.useEffect)(Ct,wt);let Tt;t[104]===Symbol.for(`react.memo_cache_sentinel`)?(Tt={folderCount:0,expandedCount:0},t[104]=Tt):Tt=t[104];let Et=(0,Q.useRef)(Tt),Dt=(0,Q.useRef)(ht),Ot=(0,Q.useRef)(pt),kt;t[105]===ht?kt=t[106]:(kt=()=>{Dt.current=ht,Ot.current=pt},t[105]=ht,t[106]=kt),(0,Q.useEffect)(kt);let At,jt;t[107]===Y?(At=t[108],jt=t[109]):(At=()=>({startCreating(e,t){Dt.current(e,t)},startCreatingFromTemplate(e){Ot.current(e)},expandAll(){(0,Q.startTransition)(()=>{for(let e of ke.current){let t=TU(Y.getItem(e));t&&t.expand()}})},collapseAll(){let e=new Set(H.current);(0,Q.startTransition)(()=>{for(let t of[...ke.current].reverse()){if(e.has(t))continue;let n=TU(Y.getItem(t));n&&n.collapse()}})},getFolderState(){let e=ke.current,t=0;for(let n of e)TU(Y.getItem(n))?.isExpanded()&&t++;let n=e.length,r=Et.current;if(r.folderCount===n&&r.expandedCount===t)return r;let i={folderCount:n,expandedCount:t};return Et.current=i,i},subscribe(e){return Y.subscribe(e)}}),jt=[Y],t[107]=Y,t[108]=At,t[109]=jt),(0,Q.useImperativeHandle)(n,At,jt);let Mt;t[110]!==We||t[111]!==c||t[112]!==a||t[113]!==Y||t[114]!==Ie?(Mt=async function(e){let t=e[0];if(t){O(t.path),A(null);try{let t=MU(e,F.current,ke.current),n=[],r=[],i=[];for(let t of e){O(t.path);let e=await z(await fetch(`/api/delete-path`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:t.kind,path:t.path})}),`Failed to delete path`);if(!e.ok){let t=MU(i,F.current,ke.current),o=new Set([...t.docNames,...n]),s=new Set([...t.folderPaths,...r]);a([...[...o].map(zU),...[...s].map(RU)]),await Promise.all([...o].map(e=>c(e))),pa.error(e.title),O(null),Ie(),Rn([`files`,`backlinks`,`graph`]);return}let o=g(Qn,e.body,`delete-path`,{deletedDocNames:[]});n.push(...o.deletedDocNames),t.kind===`folder`&&r.push(t.path),i.push(t)}let o=U.current;o&&e.some(e=>NU(e,o))&&(o.kind===`file`?t.docNames.add(o.createdPath):t.folderPaths.add(o.createdPath),We(o));let s=new Set([...t.docNames,...n]),l=new Set([...t.folderPaths,...r]);a([...[...s].map(LU),...[...l].map(IU)]),await Promise.all([...s].map(e=>c(e)));for(let t of e){let e=t.kind===`folder`?DH(t.path):SH(t.path,t.docExt);Y.getItem(e)&&Y.remove(e,t.kind===`folder`?{recursive:!0}:void 0)}S(e=>{let t=ij(e,[...s]);for(let e of l)t=ij(t,[],e);return Re(t),t}),Rn([`files`,`backlinks`,`graph`]),O(null)}catch(e){console.warn(`[FileTree] delete failed:`,e),pa.error(`Network error — please try again`),O(null),Ie()}}},t[110]=We,t[111]=c,t[112]=a,t[113]=Y,t[114]=Ie,t[115]=Mt):Mt=t[115];let Nt=Mt,Pt;t[116]===Symbol.for(`react.memo_cache_sentinel`)?(Pt=function(){let e=K.current;e&&cU(e),K.current=null},t[116]=Pt):Pt=t[116];let Ft=Pt,It;t[117]===u?It=t[118]:(It=function(e){let t=ZU(e.nativeEvent);if(!t||t.endsWith(`/`)){Ft();return}let n=CH(t),r=F.current.find(e=>wH(e)===t);if(r&&Tn(r)){Ft();return}K.current!==n&&(Ft(),K.current=n,sU(n,e=>u(e)))},t[117]=u,t[118]=It);let Lt=It;if(C){let e;return t[119]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,Z.jsx)($U,{}),t[119]=e):e=t[119],e}if(x.length===0){if(T){let e;return t[120]===T?e=t[121]:(e=(0,Z.jsx)(`div`,{className:`flex flex-1 items-center justify-center py-8`,children:(0,Z.jsx)(`span`,{className:`select-none text-sidebar-foreground/50 text-sm`,children:T})}),t[120]=T,t[121]=e),e}let e;t[122]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,Z.jsx)(`span`,{className:`select-none text-sidebar-foreground/30 text-sm`,children:`No files yet.`}),t[122]=e):e=t[122];let n;return t[123]===ht?n=t[124]:(n=(0,Z.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3 py-8`,children:[e,(0,Z.jsx)(Pr,{variant:`link`,size:`sm`,className:`font-mono uppercase`,onClick:()=>ht(`file`,``),children:`Create your first file`})]}),t[123]=ht,t[124]=n),n}let Rt=D!==null,zt=k?.targets[0]??null,Bt;t[125]===T?Bt=t[126]:(Bt=T&&(0,Z.jsx)(`span`,{role:`alert`,className:`px-3 pb-1 text-destructive text-xs`,children:T}),t[125]=T,t[126]=Bt);let Vt;t[127]===p?Vt=t[128]:(Vt=xU(p),t[127]=p,t[128]=Vt);let Ht;t[129]!==Rt||t[130]!==R||t[131]!==yt||t[132]!==_t||t[133]!==me||t[134]!==Y||t[135]!==he||t[136]!==ht||t[137]!==N?(Ht=(e,t)=>(0,Z.jsx)(PU,{item:e,context:t,anyActionBusy:Rt,workspace:N,handoff:me,model:Y,okignoreBinding:he,onStartCreating:ht,onStartCreatingFromTemplate:pt,onDelete:e=>A({targets:e}),onExpandSubtree:_t,onCollapseSubtree:yt,isAsset:R.has(e.path),isAssetTreePath:Ve}),t[129]=Rt,t[130]=R,t[131]=yt,t[132]=_t,t[133]=me,t[134]=Y,t[135]=he,t[136]=ht,t[137]=N,t[138]=Ht):Ht=t[138];let Ut;t[139]!==Lt||t[140]!==Y||t[141]!==Bt||t[142]!==Vt||t[143]!==Ht?(Ut=(0,Z.jsx)(`div`,{ref:te,className:`flex min-h-0 flex-1 flex-col`,children:(0,Z.jsx)(vH,{header:Bt,model:Y,style:Vt,onMouseMove:Lt,onMouseLeave:Ft,renderContextMenu:Ht})}),t[139]=Lt,t[140]=Y,t[141]=Bt,t[142]=Vt,t[143]=Ht,t[144]=Ut):Ut=t[144];let Wt=!!k,Gt;t[145]===D?Gt=t[146]:(Gt=e=>{!e&&!D&&A(null)},t[145]=D,t[146]=Gt);let Kt;t[147]!==D||t[148]!==k||t[149]!==Nt||t[150]!==zt?(Kt=k&&zt&&(0,Z.jsx)(Pi,{itemName:k.targets.length===1?`${zt.name}${zt.kind===`file`?zt.docExt??`.md`:`/`}`:void 0,isSubmitting:D!==null,onDelete:()=>Nt(k.targets),customTitle:k.targets.length>1?`Delete selected items`:void 0,customDescription:k.targets.length>1?`Are you sure you want to delete ${k.targets.length} selected items? Folders and all files inside them will be deleted. This action cannot be undone.`:zt.kind===`folder`?`Are you sure you want to delete ${zt.name}/ and all files inside? This action cannot be undone.`:void 0}),t[147]=D,t[148]=k,t[149]=Nt,t[150]=zt,t[151]=Kt):Kt=t[151];let qt;t[152]!==Wt||t[153]!==Gt||t[154]!==Kt?(qt=(0,Z.jsx)(Ma,{open:Wt,onOpenChange:Gt,children:Kt}),t[152]=Wt,t[153]=Gt,t[154]=Kt,t[155]=qt):qt=t[155];let Jt=j!==null,Yt;t[156]===Symbol.for(`react.memo_cache_sentinel`)?(Yt=e=>{e||M(null)},t[156]=Yt):Yt=t[156];let Xt=j?.parentDir??``,Zt;t[157]!==Jt||t[158]!==Xt?(Zt=(0,Z.jsx)(Fu,{open:Jt,onOpenChange:Yt,kind:`file`,initialDir:Xt}),t[157]=Jt,t[158]=Xt,t[159]=Zt):Zt=t[159];let Qt;return t[160]!==Ut||t[161]!==qt||t[162]!==Zt?(Qt=(0,Z.jsxs)(Z.Fragment,{children:[Ut,qt,Zt]}),t[160]=Ut,t[161]=qt,t[162]=Zt,t[163]=Qt):Qt=t[163],Qt}function IU(e){return ze(e)}function LU(e){return oe(e)}function RU(e){return ze(e)}function zU(e){return oe(e)}function BU(e){return e.endsWith(`/`)?e.slice(0,-1):e}function VU(e){return!!e}function HU(e){console.warn(`[FileTree] /api/workspace fetch failed:`,e)}function UU(e){console.warn(`[FileTree] unmount cleanup failed:`,e)}function WU(e){pa.error(e)}function GU(){}function KU(e){return pa.error(e)}function qU(){}function JU(){}async function YU(){}function XU(e){return wH(e)}function ZU(e){for(let t of e.composedPath())if(t instanceof HTMLElement&&t.dataset.itemPath)return t.dataset.itemPath;return null}var QU=[`w-3/4`,`w-2/3`,`w-4/5`,`w-1/2`,`w-3/5`,`w-2/3`];function $U(){let e=(0,$.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,Z.jsx)(`div`,{className:`flex flex-1 flex-col gap-1 px-2 py-2`,role:`status`,"aria-busy":`true`,"aria-label":`Loading files`,children:QU.map(eW)}),e[0]=t):t=e[0],t}function eW(e,t){return(0,Z.jsxs)(`div`,{className:`flex h-6 items-center gap-2`,children:[(0,Z.jsx)(Ti,{className:`h-3 w-3 shrink-0 rounded-sm`}),(0,Z.jsx)(Ti,{className:`h-3 ${e}`})]},t)}var tW=(e,t,n)=>Bs(e,t,n,`ProjectSwitcher`);function nW(e){let t=(0,$.c)(59),{bridge:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=[],t[0]=r):r=t[0];let[i,a]=(0,Q.useState)(r),[o,s]=(0,Q.useState)(!1),c;t[1]!==n.project||t[2]!==o?(c=()=>{if(!o)return;let e=!1;return tW(async()=>{let t=await n.project.listRecent();e||a(t)},`Failed to load recent projects.`),()=>{e=!0}},t[1]=n.project,t[2]=o,t[3]=c):c=t[3];let l;t[4]!==n||t[5]!==o?(l=[o,n],t[4]=n,t[5]=o,t[6]=l):l=t[6],(0,Q.useEffect)(c,l);let u;t[7]===n.project?u=t[8]:(u=e=>{s(!1),tW(()=>n.project.open({path:e,target:`new-window`,entryPoint:`recents`}),`Failed to open project.`)},t[7]=n.project,t[8]=u);let d=u,f;t[9]!==n.dialog||t[10]!==n.project?(f=()=>{s(!1),tW(async()=>{let e=await n.dialog.openFolder();e&&await n.project.open({path:e,target:`new-window`,entryPoint:`pick-existing`})},`Failed to open folder.`)},t[9]=n.dialog,t[10]=n.project,t[11]=f):f=t[11];let p=f,m;t[12]===n.navigator?m=t[13]:(m=()=>{s(!1),tW(()=>n.navigator.open(),`Failed to open Project Navigator.`)},t[12]=n.navigator,t[13]=m);let h=m,g=n.config.projectPath,_,v,y,b,x,S,C,w,T,E,D;if(t[14]!==n.config.projectName||t[15]!==g||t[16]!==o||t[17]!==d||t[18]!==i){let e;t[30]===g?e=t[31]:(e=e=>e.path!==g,t[30]=g,t[31]=e);let r=i.filter(e);v=Ei,S=o,C=s;let a;t[32]===n.config.projectName?a=t[33]:(a=(0,Z.jsx)(`span`,{className:`truncate`,children:n.config.projectName}),t[32]=n.config.projectName,t[33]=a);let c;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,Z.jsx)(jo,{"aria-hidden":`true`,className:`opacity-60`}),t[34]=c):c=t[34],t[35]===a?w=t[36]:(w=(0,Z.jsx)(Zr,{asChild:!0,children:(0,Z.jsxs)(NA,{className:`justify-between text-sidebar-foreground/70`,"data-testid":`project-switcher-trigger`,title:`Open project menu`,children:[a,c]})}),t[35]=a,t[36]=w),_=ta,T=`start`,E=`top`,D=`min-w-[260px]`,y=`project-switcher-menu`,t[37]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,Z.jsx)($r,{className:`font-mono font-normal tracking-wide uppercase text-muted-foreground text-xs`,children:`Recent projects`}),t[37]=b):b=t[37],x=r.length===0?(0,Z.jsx)($r,{className:`font-normal text-muted-foreground text-xs`,children:`No other recent projects.`}):r.slice(0,10).map(e=>(0,Z.jsxs)(hi,{disabled:e.missing,onSelect:()=>d(e.path),className:`flex flex-col items-start gap-0.5`,"data-testid":`project-switcher-recent-${e.path}`,children:[(0,Z.jsx)(`span`,{className:`font-medium text-sm`,children:e.name}),(0,Z.jsxs)(`span`,{className:`max-w-[240px] truncate text-muted-foreground text-xs`,children:[e.path,e.missing?` (missing)`:``]})]},e.path)),t[14]=n.config.projectName,t[15]=g,t[16]=o,t[17]=d,t[18]=i,t[19]=_,t[20]=v,t[21]=y,t[22]=b,t[23]=x,t[24]=S,t[25]=C,t[26]=w,t[27]=T,t[28]=E,t[29]=D}else _=t[19],v=t[20],y=t[21],b=t[22],x=t[23],S=t[24],C=t[25],w=t[26],T=t[27],E=t[28],D=t[29];let O;t[38]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,Z.jsx)(ti,{}),t[38]=O):O=t[38];let k;t[39]===p?k=t[40]:(k=(0,Z.jsx)(hi,{onSelect:p,"data-testid":`project-switcher-open-folder`,children:`Open folder…`}),t[39]=p,t[40]=k);let A;t[41]===h?A=t[42]:(A=(0,Z.jsx)(hi,{onSelect:h,"data-testid":`project-switcher-switch-project`,children:Ud}),t[41]=h,t[42]=A);let j;t[43]!==_||t[44]!==y||t[45]!==b||t[46]!==x||t[47]!==k||t[48]!==A||t[49]!==T||t[50]!==E||t[51]!==D?(j=(0,Z.jsxs)(_,{align:T,side:E,className:D,"data-testid":y,children:[b,x,O,k,A]}),t[43]=_,t[44]=y,t[45]=b,t[46]=x,t[47]=k,t[48]=A,t[49]=T,t[50]=E,t[51]=D,t[52]=j):j=t[52];let M;return t[53]!==v||t[54]!==S||t[55]!==C||t[56]!==w||t[57]!==j?(M=(0,Z.jsxs)(v,{open:S,onOpenChange:C,children:[w,j]}),t[53]=v,t[54]=S,t[55]=C,t[56]=w,t[57]=j,t[58]=M):M=t[58],M}function rW(e){let t=(0,$.c)(33),{notice:n,onDismiss:r}=e,i=n.variant===`error`?`border-destructive/60`:`border-sidebar-border`,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,Z.jsx)(ua,{"aria-hidden":`true`,className:`size-3`}),t[0]=a):a=t[0];let o;t[1]===r?o=t[2]:(o=(0,Z.jsx)(Pr,{variant:`ghost`,size:`icon`,className:`size-5 shrink-0 text-muted-foreground hover:text-sidebar-foreground`,"aria-label":`Dismiss notice`,onClick:r,children:a}),t[1]=r,t[2]=o);let s=o;if(n.secondaryAction){let e=`update-notice-${n.id}`,r=`flex flex-col gap-2 rounded-md border bg-sidebar-accent/30 px-2 py-2 text-xs text-muted-foreground ${i}`,a;t[3]===n.body?a=t[4]:(a=(0,Z.jsx)(`span`,{className:`flex-1 leading-snug`,children:n.body}),t[3]=n.body,t[4]=a);let o;t[5]!==s||t[6]!==a?(o=(0,Z.jsxs)(`div`,{className:`flex items-start gap-2`,children:[a,s]}),t[5]=s,t[6]=a,t[7]=o):o=t[7];let c;t[8]===n.action?c=t[9]:(c=n.action?(0,Z.jsx)(`button`,{type:`button`,className:`shrink-0 text-xs font-medium underline underline-offset-2 decoration-muted-foreground/40 hover:text-sidebar-foreground hover:decoration-sidebar-foreground`,onClick:()=>{n.action?.onClick()},children:n.action.label}):null,t[8]=n.action,t[9]=c);let l;t[10]===n.secondaryAction?l=t[11]:(l=()=>{n.secondaryAction?.onClick()},t[10]=n.secondaryAction,t[11]=l);let u;t[12]!==n.secondaryAction.label||t[13]!==l?(u=(0,Z.jsx)(`button`,{type:`button`,className:`shrink-0 text-xs font-medium underline underline-offset-2 decoration-muted-foreground/40 hover:text-sidebar-foreground hover:decoration-sidebar-foreground`,onClick:l,children:n.secondaryAction.label}),t[12]=n.secondaryAction.label,t[13]=l,t[14]=u):u=t[14];let d;t[15]!==c||t[16]!==u?(d=(0,Z.jsxs)(`div`,{className:`flex gap-3 pl-1`,children:[c,u]}),t[15]=c,t[16]=u,t[17]=d):d=t[17];let f;return t[18]!==d||t[19]!==e||t[20]!==r||t[21]!==o?(f=(0,Z.jsxs)(`div`,{role:`status`,"aria-live":`polite`,"data-testid":e,className:r,children:[o,d]}),t[18]=d,t[19]=e,t[20]=r,t[21]=o,t[22]=f):f=t[22],f}let c=`update-notice-${n.id}`,l=`flex items-center gap-2 rounded-md border bg-sidebar-accent/30 px-2 py-1.5 text-xs text-muted-foreground ${i}`,u;t[23]===n.body?u=t[24]:(u=(0,Z.jsx)(`span`,{className:`flex-1 leading-snug`,children:n.body}),t[23]=n.body,t[24]=u);let d;t[25]===n.action?d=t[26]:(d=n.action?(0,Z.jsx)(`button`,{type:`button`,className:`shrink-0 text-xs font-medium underline underline-offset-2 decoration-muted-foreground/40 hover:text-sidebar-foreground hover:decoration-sidebar-foreground`,onClick:()=>{n.action?.onClick()},children:n.action.label}):null,t[25]=n.action,t[26]=d);let f;return t[27]!==s||t[28]!==c||t[29]!==l||t[30]!==u||t[31]!==d?(f=(0,Z.jsxs)(`div`,{role:`status`,"aria-live":`polite`,"data-testid":c,className:l,children:[u,d,s]}),t[27]=s,t[28]=c,t[29]=l,t[30]=u,t[31]=d,t[32]=f):f=t[32],f}function iW(e){if(e.length===0)return null;let t=e[0];if(!t)return null;for(let n=1;n<e.length;n++){let r=e[n];r&&r.priority<t.priority&&(t=r)}return t}function aW(){let e=(0,$.c)(7),t=(0,Q.useSyncExternalStore)(Bl,zl,zl),n;e[0]===t?n=e[1]:(n=iW(t),e[0]=t,e[1]=n);let r=n;if(!r)return null;let i;e[2]===r.id?i=e[3]:(i=()=>{Rl(r.id)},e[2]=r.id,e[3]=i);let a;return e[4]!==r||e[5]!==i?(a=(0,Z.jsx)(`div`,{"data-testid":`update-notices-list`,children:(0,Z.jsx)(rW,{notice:r,onDismiss:i})}),e[4]=r,e[5]=i,e[6]=a):a=e[6],a}var oW={folderCount:0,expandedCount:0};function sW(e){let t=(0,$.c)(2),{onOpenSearch:n}=e,r;return t[0]===n?r=t[1]:(r=(0,Z.jsx)(K,{name:`file-sidebar`,children:(0,Z.jsx)(lW,{onOpenSearch:n})}),t[0]=n,t[1]=r),r}var cW=e=>{let t=(0,$.c)(15),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({icon:n,label:r,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let a;t[4]===n?a=t[5]:(a=(0,Z.jsx)(n,{"aria-hidden":`true`}),t[4]=n,t[5]=a);let o;t[6]!==r||t[7]!==i||t[8]!==a?(o=(0,Z.jsx)(Sa,{asChild:!0,children:(0,Z.jsx)(Pr,{variant:`ghost`,size:`icon-sm`,"aria-label":r,...i,children:a})}),t[6]=r,t[7]=i,t[8]=a,t[9]=o):o=t[9];let s;t[10]===r?s=t[11]:(s=(0,Z.jsx)(Ca,{children:r}),t[10]=r,t[11]=s);let c;return t[12]!==o||t[13]!==s?(c=(0,Z.jsxs)(Ta,{children:[o,s]}),t[12]=o,t[13]=s,t[14]=c):c=t[14],c};function lW(e){let t=(0,$.c)(36),{onOpenSearch:n}=e,[r,i]=(0,Q.useState)(null),a=typeof window<`u`&&window.okDesktop!=null,{state:o}=yA(),s=o===`expanded`,c=o===`collapsed`,[l,u]=(0,Q.useState)(oW),d,f;t[0]===r?(d=t[1],f=t[2]):(d=()=>{if(r!==null)return u(r.getFolderState()),r.subscribe(()=>{u(r.getFolderState())})},f=[r],t[0]=r,t[1]=d,t[2]=f),(0,Q.useEffect)(d,f);let p=l.folderCount>0,m=p&&l.expandedCount===l.folderCount,h=l.expandedCount===0,g=a&&c&&`opacity-0`,_;t[3]===g?_=t[4]:(_=X(`flex-row h-12 items-center py-0 px-3`,a?`justify-end`:`justify-between`,a&&`motion-safe:transition-opacity motion-safe:duration-100 motion-safe:ease-out`,g,a&&`[-webkit-app-region:drag]`),t[3]=g,t[4]=_);let v;t[5]===s?v=t[6]:(v=s&&!a?(0,Z.jsx)(`span`,{className:`shrink-0 font-mono text-sm uppercase tracking-wider text-sidebar-foreground/50`,children:`Files`}):null,t[5]=s,t[6]=v);let y;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(y=X(`flex items-center gap-1`,a&&`[&>*]:[-webkit-app-region:no-drag]`),t[7]=y):y=t[7];let b;t[8]===n?b=t[9]:(b=(0,Z.jsx)(cW,{icon:xs,label:`Search`,onClick:n}),t[8]=n,t[9]=b);let x;t[10]!==m||t[11]!==p||t[12]!==h||t[13]!==r?(x=p?(0,Z.jsxs)(Ei,{children:[(0,Z.jsx)(Zr,{asChild:!0,children:(0,Z.jsx)(cW,{icon:os,label:`Tree View Options`})}),(0,Z.jsxs)(ta,{align:`end`,children:[m?null:(0,Z.jsxs)(hi,{onSelect:()=>r?.expandAll(),children:[(0,Z.jsx)(Fs,{"aria-hidden":`true`}),`Expand All`]}),h?null:(0,Z.jsxs)(hi,{onSelect:()=>r?.collapseAll(),children:[(0,Z.jsx)(qo,{"aria-hidden":`true`}),`Collapse All`]})]})]}):null,t[10]=m,t[11]=p,t[12]=h,t[13]=r,t[14]=x):x=t[14];let S;t[15]===r?S=t[16]:(S=(0,Z.jsx)(cW,{icon:Ds,label:`New File`,onClick:()=>r?.startCreating(`file`,``)}),t[15]=r,t[16]=S);let C;t[17]===r?C=t[18]:(C=(0,Z.jsx)(cW,{icon:Wo,label:`New from template…`,onClick:()=>r?.startCreatingFromTemplate(``)}),t[17]=r,t[18]=C);let w;t[19]===r?w=t[20]:(w=(0,Z.jsx)(cW,{icon:Yo,label:`New Folder`,onClick:()=>r?.startCreating(`folder`,``)}),t[19]=r,t[20]=w);let T;t[21]!==C||t[22]!==w||t[23]!==b||t[24]!==x||t[25]!==S?(T=(0,Z.jsxs)(`div`,{className:y,children:[b,x,S,C,w]}),t[21]=C,t[22]=w,t[23]=b,t[24]=x,t[25]=S,t[26]=T):T=t[26];let E;t[27]!==T||t[28]!==_||t[29]!==v?(E=(0,Z.jsxs)(DA,{className:_,children:[v,T]}),t[27]=T,t[28]=_,t[29]=v,t[30]=E):E=t[30];let D;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,Z.jsx)(kA,{children:(0,Z.jsx)(FU,{ref:i})}),t[31]=D):D=t[31];let O,k;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,Z.jsxs)(OA,{className:`px-0`,children:[typeof window<`u`&&window.okDesktop?(0,Z.jsx)(AA,{children:(0,Z.jsx)(jA,{children:(0,Z.jsx)(nW,{bridge:window.okDesktop})})}):null,(0,Z.jsx)(aW,{})]}),k=(0,Z.jsx)(TA,{enableToggle:!1}),t[32]=O,t[33]=k):(O=t[32],k=t[33]);let A;return t[34]===E?A=t[35]:(A=(0,Z.jsxs)(CA,{variant:`inset`,children:[E,D,O,k]}),t[34]=E,t[35]=A),A}function uW(){let e=(0,$.c)(17),t=Lt(),{collabUrl:n,setSystemProvider:r,updateServerInstanceId:i,onBranchSwitched:a,observeBranch:o,observeDiskAck:s,refreshServerInfo:c}=Pe(),l;e[0]!==o||e[1]!==s||e[2]!==a||e[3]!==c||e[4]!==i?(l={updateServerInstanceId:i,onBranchSwitched:a,observeBranch:o,observeDiskAck:s,refreshServerInfo:c},e[0]=o,e[1]=s,e[2]=a,e[3]=c,e[4]=i,e[5]=l):l=e[5];let u=(0,Q.useRef)(l),d;e[6]!==o||e[7]!==s||e[8]!==a||e[9]!==c||e[10]!==i?(d=()=>{u.current={updateServerInstanceId:i,onBranchSwitched:a,observeBranch:o,observeDiskAck:s,refreshServerInfo:c}},e[6]=o,e[7]=s,e[8]=a,e[9]=c,e[10]=i,e[11]=d):d=e[11],(0,Q.useEffect)(d);let f,m;return e[12]!==n||e[13]!==t||e[14]!==r?(f=()=>{if(n===null)return;let e=new O,i=new we({url:n,name:$t,document:e,onStateless:e=>{let{payload:t}=e;I(t,{onServerInfo:e=>{u.current.updateServerInstanceId(e.serverInstanceId),e.currentBranch!==void 0&&u.current.observeBranch(e.currentBranch)},onBranchSwitched:e=>{u.current.onBranchSwitched(e.branch)},onDiskAck:e=>{u.current.observeDiskAck(e.docName,e.sv)},onDerivedView:gW,onConfigValidationRejected:hW,onConfigIgnoreNestedError:mW,onUnknown:pW})},onClose:fW,onDisconnect:dW}),a=or(e=>{(e.includes(`files`)||e.includes(`backlinks`))&&(t.invalidateQueries({queryKey:[`backlinks`]}),t.invalidateQueries({queryKey:[`forward-links`]})),(e.includes(`files`)||e.includes(`graph`))&&(t.invalidateQueries({queryKey:[`orphans`]}),t.invalidateQueries({queryKey:[`hubs`]}))}),o=p(()=>{u.current.refreshServerInfo()});i.on(`synced`,()=>{Rn([`files`,`backlinks`,`graph`]),o()});let s=new Set,c=()=>{if(i.awareness)for(let[e,t]of i.awareness.getStates().entries())s.has(e)||t.user?.type===`agent`&&(s.add(e),console.warn(`[agent-presence] observed stale AwarenessUser.type === 'agent' from clientID ${e} — probably a stale bundled client`))};return i.awareness?.on(`change`,c),r(i),()=>{a(),i.awareness?.off(`change`,c),r(null),i.destroy(),e.destroy()}},m=[t,n,r],e[12]=n,e[13]=t,e[14]=r,e[15]=f,e[16]=m):(f=e[15],m=e[16]),(0,Q.useEffect)(f,m),null}function dW(){console.warn(`[CC1] __system__ disconnected - derived views may be stale`)}function fW(e){let{event:t}=e;console.warn(`[CC1] __system__ connection closed:`,t.code,t.reason)}function pW(e){console.warn(`[CC1] Unparseable stateless payload, skipping:`,e.slice(0,100))}function mW(e){qi(e)}function hW(e){Xi(e)}function gW(e){Rn([e.ch])}var _W=`#install-claude-desktop`;function vW(e){return e===`#settings`||e===_W}function yW(e,t){return`${[...e].sort().join(`\0`)}\u0001${[...t].sort().join(`\0`)}`}function bW(){let e=(0,$.c)(18),{clearTarget:t,syncOpenTabsWithKnownTargets:n,tabSessionLoaded:r}=Pe(),{openTargetTransition:i}=Ge(),{folderPaths:a,loading:o,pages:s}=mr(),c=(0,Q.useRef)(null),l;e[0]!==a||e[1]!==s?(l=yW(s,a),e[0]=a,e[1]=s,e[2]=l):l=e[2];let u=l,d,f;e[3]!==a||e[4]!==o||e[5]!==s||e[6]!==n||e[7]!==r||e[8]!==u?(d=()=>{o||!r||c.current===u||(c.current=u,n({pages:s,folderPaths:a}))},f=[a,o,s,n,r,u],e[3]=a,e[4]=o,e[5]=s,e[6]=n,e[7]=r,e[8]=u,e[9]=d,e[10]=f):(d=e[9],f=e[10]),(0,Q.useEffect)(d,f);let p,m;return e[11]!==t||e[12]!==a||e[13]!==o||e[14]!==i||e[15]!==s?(p=()=>{e();function e(){if(vW(window.location.hash))return;let e=hr(window.location.hash);if(e){let t=wr(e.split(`.`).pop()??``);W(`ok/nav/hash-change`,{docName:null,kind:`asset`}),i({kind:`asset`,target:e,assetPath:e,mediaKind:t});return}let n=nr(window.location.hash);if(!n){W(`ok/nav/hash-change`,{docName:null,kind:`clear`}),t();return}if(o){W(`ok/nav/hash-change`,{docName:n,kind:`deferred-loading`});return}let r=Yn(n,{pages:s,folderPaths:a});if(r.kind===`missing`&&/\/+$/.test(n.trim())){W(`ok/nav/hash-change`,{docName:n,kind:`deferred-missing-folder`});return}W(`ok/nav/hash-change`,{docName:n,kind:r.kind}),i(r)}return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},m=[t,a,o,i,s],e[11]=t,e[12]=a,e[13]=o,e[14]=i,e[15]=s,e[16]=p,e[17]=m):(p=e[16],m=e[17]),(0,Q.useEffect)(p,m),null}function xW(){let e=(0,$.c)(5),[t,n]=(0,Q.useState)(typeof window<`u`&&window.location.hash===_W),r,i;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=()=>{let e=function(){window.location.hash===_W&&n(!0)};return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},i=[],e[0]=r,e[1]=i):(r=e[0],i=e[1]),(0,Q.useEffect)(r,i);let a;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(a=function(e){if(n(e),!e&&window.location.hash===_W){let{pathname:e,search:t}=window.location;window.history.replaceState(null,``,`${e}${t}`)}},e[2]=a):a=e[2];let o=a,s;return e[3]===t?s=e[4]:(s=(0,Z.jsx)(Wi,{open:t,onOpenChange:o}),e[3]=t,e[4]=s),s}function SW(){let e=(0,$.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=[],e[0]=t):t=e[0],(0,Q.useEffect)(CW,t),null}function CW(){let e=function(e){let t=e.target;Kd({target:t,metaKey:e.metaKey,ctrlKey:e.ctrlKey,altKey:e.altKey,key:e.key})&&(e.preventDefault(),window.location.hash!==`#settings`&&(window.location.hash=Gd))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)}function wW(){let e=(0,$.c)(8),{activeDocName:t,activeTarget:n}=Pe(),[r,i]=(0,Q.useState)(!1),a;e[0]!==t||e[1]!==n?(a=n?.kind===`folder`?n.folderPath:zn(t),e[0]=t,e[1]=n,e[2]=a):a=e[2];let o=a,s,c;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(s=()=>{let e=function(e){let t=e.target;Nu({target:t,metaKey:e.metaKey,ctrlKey:e.ctrlKey,altKey:e.altKey,key:e.key})&&(e.preventDefault(),i(!0))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},c=[],e[3]=s,e[4]=c):(s=e[3],c=e[4]),(0,Q.useEffect)(s,c);let l;return e[5]!==r||e[6]!==o?(l=(0,Z.jsx)(Fu,{open:r,onOpenChange:i,kind:`file`,initialDir:o}),e[5]=r,e[6]=o,e[7]=l):l=e[7],l}function TW(){let e=(0,$.c)(13),t=typeof window<`u`?window.okDesktop??null:null,[n,r]=(0,Q.useState)(!1),i;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,Z.jsx)(Cp,{}),e[0]=i):i=e[0];let a,o,s,c,l,u;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,Z.jsx)(uW,{}),o=(0,Z.jsx)(bW,{}),s=(0,Z.jsx)(wW,{}),c=(0,Z.jsx)(SW,{}),l=(0,Z.jsx)(xW,{}),u=(0,Z.jsx)(kc,{}),e[1]=a,e[2]=o,e[3]=s,e[4]=c,e[5]=l,e[6]=u):(a=e[1],o=e[2],s=e[3],c=e[4],l=e[5],u=e[6]);let d;e[7]===n?d=e[8]:(d=(0,Z.jsx)(gp,{bridge:t,open:n,onOpenChange:r}),e[7]=n,e[8]=d);let f;e[9]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,Z.jsx)(sW,{onOpenSearch:()=>r(!0)}),e[9]=f):f=e[9];let p;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,Z.jsxs)(bA,{className:`h-screen overflow-hidden`,children:[f,(0,Z.jsx)(EA,{className:`overflow-hidden h-[calc(100vh-var(--layout-inset-offset))]`,children:(0,Z.jsx)(rM,{})})]}),e[10]=p):p=e[10];let m;return e[11]===d?m=e[12]:(m=(0,Z.jsx)(K,{name:`app`,children:(0,Z.jsx)(Ze,{children:(0,Z.jsxs)(pi,{children:[i,(0,Z.jsxs)(ir,{children:[a,o,s,c,l,u,d,p]})]})})}),e[11]=d,e[12]=m),m}oo(),typeof window<`u`&&window.okDesktop?.config.apiOrigin&&Rc({apiOrigin:window.okDesktop.config.apiOrigin}),nl()&&cl(),Vl(),typeof window<`u`&&Vc({bridge:window.okDesktop}),typeof window<`u`&&va({bridge:window.okDesktop}),typeof window<`u`&&Pa({bridge:window.okDesktop}),typeof window<`u`&&Uc({bridge:window.okDesktop});var EW=new go({defaultOptions:{queries:{retry:1,staleTime:1e4}}}),DW=document.getElementById(`root`);if(!DW)throw Error(`Root element not found`);var OW=typeof window<`u`&&window.okDesktop?.config.mode===`navigator`;(0,Eo.createRoot)(DW).render((0,Z.jsx)(Q.StrictMode,{children:(0,Z.jsx)(At,{client:EW,children:(0,Z.jsxs)(yn,{attribute:`class`,defaultTheme:`system`,enableSystem:!0,disableTransitionOnChange:!0,storageKey:`ok-theme-v1`,children:[(0,Z.jsx)(wa,{children:OW&&window.okDesktop?(0,Z.jsx)(Nc,{bridge:window.okDesktop}):(0,Z.jsx)(TW,{})}),(0,Z.jsx)(Lc,{richColors:!0,closeButton:!0})]})})}));
@@ -48,7 +48,7 @@
48
48
  -->
49
49
  <script>(() => { let t = 'system'; try { const r = localStorage.getItem('ok-theme-v1'); if (r === 'light' || r === 'dark' || r === 'system') t = r; } catch {} let dark = t === 'dark'; if (t === 'system') { try { dark = window.matchMedia('(prefers-color-scheme: dark)').matches; } catch {} } if (dark) document.documentElement.classList.add('dark'); if (window.okDesktop) document.documentElement.classList.add('electron-mode'); })();</script>
50
50
  <style>html { background-color: #fafafa } html.dark { background-color: #171717 }</style>
51
- <script type="module" crossorigin src="./assets/index-BOCOmOox.js"></script>
51
+ <script type="module" crossorigin src="./assets/index-6soyXw4M.js"></script>
52
52
  <link rel="modulepreload" crossorigin href="./assets/chunk-CFjPhJqf.js">
53
53
  <link rel="modulepreload" crossorigin href="./assets/preload-helper-2ej06EnG.js">
54
54
  <link rel="modulepreload" crossorigin href="./assets/w3c-keyname-B5t0fahT.js">
@@ -1,2 +1,2 @@
1
- import{c as e,f as t,s as n}from"./init-B3-z2S8e.mjs";import"./loader-nzXlKCaJ.mjs";import"./preview-C5ZZtQhd.mjs";function r(r,i,a={}){let o=[];for(let n of i){let i=t[n],s=i.projectConfigPath?.(r);if(!s){o.push({editorId:n,outcome:`skipped-no-project-surface`});continue}let c;try{c=e(i,r,a,void 0,s)}catch(e){o.push({editorId:n,outcome:`failed`,error:e instanceof Error?e.message:String(e)});continue}if(c.action===`written`||c.action===`overwritten`){o.push({editorId:n,outcome:c.action});continue}if(c.action===`failed`){o.push({editorId:n,outcome:`failed`,error:c.error});continue}o.push({editorId:n,outcome:`failed`,error:`unexpected project-scope action: ${c.action}`})}return{editorOutcomes:o,claudeLaunchJson:i.includes(`claude`)?n(r,a):void 0}}export{r as t};
2
- //# sourceMappingURL=src-DCHO3Oll.mjs.map
1
+ import{c as e,f as t,s as n}from"./init-DrfKz58U.mjs";import"./loader-DKoWw50g.mjs";import"./preview-D6nLHyS2.mjs";function r(r,i,a={}){let o=[];for(let n of i){let i=t[n],s=i.projectConfigPath?.(r);if(!s){o.push({editorId:n,outcome:`skipped-no-project-surface`});continue}let c;try{c=e(i,r,a,void 0,s)}catch(e){o.push({editorId:n,outcome:`failed`,error:e instanceof Error?e.message:String(e)});continue}if(c.action===`written`||c.action===`overwritten`){o.push({editorId:n,outcome:c.action});continue}if(c.action===`failed`){o.push({editorId:n,outcome:`failed`,error:c.error});continue}o.push({editorId:n,outcome:`failed`,error:`unexpected project-scope action: ${c.action}`})}return{editorOutcomes:o,claudeLaunchJson:i.includes(`claude`)?n(r,a):void 0}}export{r as t};
2
+ //# sourceMappingURL=src-DL2x7ekf.mjs.map
@@ -0,0 +1 @@
1
+ import{l as e}from"./start-CKupR8YG.mjs";export{e as startCommand};
@@ -1,3 +1,3 @@
1
- import{n as e,t}from"./esm-CEs3LWY3.mjs";import"./dist-H3Ld-L-a.mjs";import{n}from"./constants-Vc8PoRm6.mjs";import{spawn as r}from"node:child_process";import{join as i}from"node:path";import{closeSync as a,existsSync as o,mkdirSync as s,openSync as c,statSync as l}from"node:fs";import{homedir as u}from"node:os";import{setTimeout as d}from"node:timers/promises";const f=`Open Knowledge.app`,p=`/Applications/${f}`;function m(){return{platform:process.platform,env:process.env,execPath:process.execPath,isTTY:process.stdout.isTTY,statSync:e=>{try{return l(e,{throwIfNoEntry:!1})??null}catch{return null}}}}function h(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`){let t=/(.+?\.app)\/Contents\/MacOS\//.exec(e.execPath);if(t?.[1])return t[1]}if(g(e,p))return p;let t=i(e.homeDir??u(),`Applications`,f);return g(e,t)?t:null}function g(e,t){try{let n=i(t,`Contents`,`MacOS`,`Open Knowledge`),r=e.statSync(n);return r&&typeof r.isFile==`function`?r.isFile():!1}catch{return!1}}function _(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=h(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 v(e){(e.log??(e=>console.error(e)))("Launching Open Knowledge desktop… (use `ok start` for the browser server, or `OK_FORCE_BROWSER=1` to always skip)"),e.spawn(`open`,[`-b`,`com.inkeep.open-knowledge`],{detached:!0,stdio:`ignore`}).unref()}function y(e=`no-bundle`){switch(e){case`no-bundle`:return`Desktop app not found at ${p}. 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 ${p} (filesystem error). Check permissions or use --mode=browser.`;case`available`:return`Desktop app appears available at ${p} but launch dispatch did not fire (caller bug).`}}function b(){let e=process.execPath,t=process.argv[1];return t?{command:e,prefixArgs:[t]}:(console.warn(`[self-spawn] process.argv[1] is empty — falling back to \`npx @inkeep/open-knowledge\`. This re-introduces the version-drift surface that re-exec was fixing. Observed argv: ${JSON.stringify(process.argv)}`),{command:`npx`,prefixArgs:[`@inkeep/open-knowledge`]})}function x(e,t){return e.host??t.HOST??`localhost`}var S=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 C(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 w(e){o(e.lockDir)||s(e.lockDir,{recursive:!0});let t=c(i(e.lockDir,`last-spawn-error.log`),`w`),n=e.spawn??r,{PORT:l,...u}=process.env,d=b();try{let r=n(d.command,[...d.prefixArgs,...e.args??[`ui`]],{detached:!0,stdio:[`ignore`,`ignore`,t],cwd:e.cwd,env:u});return r.unref(),r}finally{try{a(t)}catch{}}}async function T(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}function E(e){let t=e.sigtermGraceMs??1e4,n=e.sigtermPollIntervalMs??200,r=e.sleep??(e=>d(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 D(e){let{config:t,cwd:n,host:r}=e,i=e.skipAutoInit??!1,a=e.skipUiAutoSpawn??!1,o=e.idleThresholdMs??18e5,{existsSync:s,mkdirSync:c}=await import(`node:fs`),{resolve:l}=await import(`node:path`),{bootServer:u,getLogger:f,isProcessAlive:p,readUiLock:m,resolveContentDir:h}=await import(`./dist-Cg4a9GjH.mjs`),g=e.log??f(`start`),_=l(n,`.ok`);if(!i&&!s(_))throw new S(n);let v=h(t,n);s(v)||(c(v,{recursive:!0}),g.info({contentDir:v},`Created content directory`));let y=null,b=await u({config:t,contentDir:v,projectDir:n,contentRoot:t.content.dir,port:e.port,host:r,quiet:!1,localOpCliArgs:[process.execPath,process.argv[1]],attachUiSibling:!0,idleShutdownMs:o,skipAutoInit:!0,spawnUiSiblingFn:async({lockDir:t})=>{if(y=C({uiLock:m(t),isAlive:p}),y.action===`spawn`&&!a)try{w({lockDir:t,cwd:n,spawn:e.spawn}),g.info({reason:y.reason},`[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 y.action===`skip`&&g.info({port:y.port,pid:y.pid},`UI already running at port ${y.port}`)},idleShutdownHandler:e=>E({readUiLock:()=>m(b.lockDir),isAlive:p,killPid:(e,t)=>{process.kill(e,t)},destroy:e,log:g}),log:g});y||={action:`skip`,reason:`alive`,pid:0,port:0};let x=y,D=null;if(x.action===`skip`)D=x.port>0?x.port:null;else if(!a){let t=e.uiBindTimeoutMs??3e3;D=await T({readUiLock:()=>m(b.lockDir),now:Date.now,sleep:e=>d(e),timeoutMs:t,pollIntervalMs:50}),D===null&&g.warn({timeoutMs:t},`[start] ok ui did not bind within timeout — banner falls back to API URL`)}return{httpServer:b.httpServer,destroy:b.destroy,lockDir:b.lockDir,contentDir:v,port:b.port,ready:b.ready,degraded:b.degraded,uiSpawnDecision:y,resolvedUiPort:D}}function O(t){if(t===`browser`||t===`app`)return t;throw new e(`--mode must be 'browser' or 'app'`)}async function k(e,t){let{renderBanner:r}=await import(`./banner-8cQrR88n.mjs`),{dim:i,error:a,warning:o}=await import(`./colors-BCE2jNgl.mjs`),s=process.cwd(),c=e,l=x(t,process.env),u=t.port===void 0?void 0:Number(t.port),d=process.env.PORT?Number(process.env.PORT):void 0,f=u??d,p;try{p=await D({config:c,cwd:s,host:l,port:f})}catch(e){e instanceof S&&(console.error(a(e.message)),process.exit(1));let t=A(e,s,await import(`./dist-Cg4a9GjH.mjs`));t!==null&&(console.error(a(t)),process.exit(1)),console.error(`${a(`Failed to start:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exit(1)}let m=!1,h=async e=>{if(!m){m=!0,console.log(i(`\nShutting down (${e})...`));try{await p.destroy()}catch(e){console.error(`${a(`destroy() failed:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exitCode=1}process.exit(process.exitCode??0)}};process.once(`SIGINT`,()=>{h(`SIGINT`)}),process.once(`SIGTERM`,()=>{h(`SIGTERM`)});let g=`http://${l}:${p.port}`,_=l===`0.0.0.0`||l===`::`?`http://0.0.0.0:${p.port}`:void 0,v=p.resolvedUiPort,y=v!==null&&v>0?`http://${l}:${v}`:g;console.log(r({name:`open-knowledge`,version:n,localUrl:y,apiUrl:y===g?void 0:g,networkUrl:_}));let b={"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`};p.ready.then(async()=>{if(p.degraded.length>0){console.log();for(let e of p.degraded){let t=b[e]??`${e} (check server logs for details)`;console.warn(` ${o(`⚠`)} ${o(e)}: ${i(t)}`)}console.log()}if(t.open){let{openBrowser:e}=await import(`./open-browser-BOeCxs2W.mjs`);e(y)}}).catch(e=>{console.error(` ${a(`Server initialization failed:`)} ${e instanceof Error?e.message:String(e)}`)})}function A(e,t,n){let r=n.ServerLockCollisionError;if(r===void 0||!(e instanceof r))return null;try{let e=i(t,`.ok`),r=n.readServerLock(e);return r?r.kind===`interactive`?`Open Knowledge 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`.":"Open Knowledge server is already running on this project — check `ok status` or `ok stop`.":"Open Knowledge server is already running on this project — check `ok status` or `ok stop`."}catch{return null}}function j(e){return new t(`start`).description(`Start the knowledge base collab server`).option(`-p, --port <port>`,`Server port`,void 0).option(`-H, --host <host>`,`Server host`,void 0).option(`--open`,`Open browser after start`).option(`--mode <mode>`,`Force dispatch mode: 'browser' or 'app'`,O).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{n as e,t}from"./esm-CEs3LWY3.mjs";import"./dist-H3Ld-L-a.mjs";import{n}from"./constants-BY_EleLO.mjs";import{spawn as r}from"node:child_process";import{join as i}from"node:path";import{closeSync as a,existsSync as o,mkdirSync as s,openSync as c,statSync as l}from"node:fs";import{homedir as u}from"node:os";import{setTimeout as d}from"node:timers/promises";const f=`Open Knowledge.app`,p=`/Applications/${f}`;function m(){return{platform:process.platform,env:process.env,execPath:process.execPath,isTTY:process.stdout.isTTY,statSync:e=>{try{return l(e,{throwIfNoEntry:!1})??null}catch{return null}}}}function h(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`){let t=/(.+?\.app)\/Contents\/MacOS\//.exec(e.execPath);if(t?.[1])return t[1]}if(g(e,p))return p;let t=i(e.homeDir??u(),`Applications`,f);return g(e,t)?t:null}function g(e,t){try{let n=i(t,`Contents`,`MacOS`,`Open Knowledge`),r=e.statSync(n);return r&&typeof r.isFile==`function`?r.isFile():!1}catch{return!1}}function _(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=h(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 v(e){(e.log??(e=>console.error(e)))("Launching Open Knowledge desktop… (use `ok start` for the browser server, or `OK_FORCE_BROWSER=1` to always skip)"),e.spawn(`open`,[`-b`,`com.inkeep.open-knowledge`],{detached:!0,stdio:`ignore`}).unref()}function y(e=`no-bundle`){switch(e){case`no-bundle`:return`Desktop app not found at ${p}. 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 ${p} (filesystem error). Check permissions or use --mode=browser.`;case`available`:return`Desktop app appears available at ${p} but launch dispatch did not fire (caller bug).`}}function b(){let e=process.execPath,t=process.argv[1];return t?{command:e,prefixArgs:[t]}:(console.warn(`[self-spawn] process.argv[1] is empty — falling back to \`npx @inkeep/open-knowledge\`. This re-introduces the version-drift surface that re-exec was fixing. Observed argv: ${JSON.stringify(process.argv)}`),{command:`npx`,prefixArgs:[`@inkeep/open-knowledge`]})}function x(e,t){return e.host??t.HOST??`localhost`}var S=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 C(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 w(e){o(e.lockDir)||s(e.lockDir,{recursive:!0});let t=c(i(e.lockDir,`last-spawn-error.log`),`w`),n=e.spawn??r,{PORT:l,...u}=process.env,d=b();try{let r=n(d.command,[...d.prefixArgs,...e.args??[`ui`]],{detached:!0,stdio:[`ignore`,`ignore`,t],cwd:e.cwd,env:u});return r.unref(),r}finally{try{a(t)}catch{}}}async function T(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}function E(e){let t=e.sigtermGraceMs??1e4,n=e.sigtermPollIntervalMs??200,r=e.sleep??(e=>d(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 D(e){let{config:t,cwd:n,host:r}=e,i=e.skipAutoInit??!1,a=e.skipUiAutoSpawn??!1,o=e.idleThresholdMs??18e5,{existsSync:s,mkdirSync:c}=await import(`node:fs`),{resolve:l}=await import(`node:path`),{bootServer:u,getLogger:f,isProcessAlive:p,readUiLock:m,resolveContentDir:h}=await import(`./dist-Cg4a9GjH.mjs`),g=e.log??f(`start`),_=l(n,`.ok`);if(!i&&!s(_))throw new S(n);let v=h(t,n);s(v)||(c(v,{recursive:!0}),g.info({contentDir:v},`Created content directory`));let y=null,b=await u({config:t,contentDir:v,projectDir:n,contentRoot:t.content.dir,port:e.port,host:r,quiet:!1,localOpCliArgs:[process.execPath,process.argv[1]],attachUiSibling:!0,idleShutdownMs:o,skipAutoInit:!0,spawnUiSiblingFn:async({lockDir:t})=>{if(y=C({uiLock:m(t),isAlive:p}),y.action===`spawn`&&!a)try{w({lockDir:t,cwd:n,spawn:e.spawn}),g.info({reason:y.reason},`[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 y.action===`skip`&&g.info({port:y.port,pid:y.pid},`UI already running at port ${y.port}`)},idleShutdownHandler:e=>E({readUiLock:()=>m(b.lockDir),isAlive:p,killPid:(e,t)=>{process.kill(e,t)},destroy:e,log:g}),log:g});y||={action:`skip`,reason:`alive`,pid:0,port:0};let x=y,D=null;if(x.action===`skip`)D=x.port>0?x.port:null;else if(!a){let t=e.uiBindTimeoutMs??3e3;D=await T({readUiLock:()=>m(b.lockDir),now:Date.now,sleep:e=>d(e),timeoutMs:t,pollIntervalMs:50}),D===null&&g.warn({timeoutMs:t},`[start] ok ui did not bind within timeout — banner falls back to API URL`)}return{httpServer:b.httpServer,destroy:b.destroy,lockDir:b.lockDir,contentDir:v,port:b.port,ready:b.ready,degraded:b.degraded,uiSpawnDecision:y,resolvedUiPort:D}}function O(t){if(t===`browser`||t===`app`)return t;throw new e(`--mode must be 'browser' or 'app'`)}async function k(e,t){let{renderBanner:r}=await import(`./banner-8cQrR88n.mjs`),{dim:i,error:a,warning:o}=await import(`./colors-BCE2jNgl.mjs`),s=process.cwd(),c=e,l=x(t,process.env),u=t.port===void 0?void 0:Number(t.port),d=process.env.PORT?Number(process.env.PORT):void 0,f=u??d,p;try{p=await D({config:c,cwd:s,host:l,port:f})}catch(e){e instanceof S&&(console.error(a(e.message)),process.exit(1));let t=A(e,s,await import(`./dist-Cg4a9GjH.mjs`));t!==null&&(console.error(a(t)),process.exit(1)),console.error(`${a(`Failed to start:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exit(1)}let m=!1,h=async e=>{if(!m){m=!0,console.log(i(`\nShutting down (${e})...`));try{await p.destroy()}catch(e){console.error(`${a(`destroy() failed:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exitCode=1}process.exit(process.exitCode??0)}};process.once(`SIGINT`,()=>{h(`SIGINT`)}),process.once(`SIGTERM`,()=>{h(`SIGTERM`)});let g=`http://${l}:${p.port}`,_=l===`0.0.0.0`||l===`::`?`http://0.0.0.0:${p.port}`:void 0,v=p.resolvedUiPort,y=v!==null&&v>0?`http://${l}:${v}`:g;console.log(r({name:`open-knowledge`,version:n,localUrl:y,apiUrl:y===g?void 0:g,networkUrl:_}));let b={"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`};p.ready.then(async()=>{if(p.degraded.length>0){console.log();for(let e of p.degraded){let t=b[e]??`${e} (check server logs for details)`;console.warn(` ${o(`⚠`)} ${o(e)}: ${i(t)}`)}console.log()}if(t.open){let{openBrowser:e}=await import(`./open-browser-BOeCxs2W.mjs`);e(y)}}).catch(e=>{console.error(` ${a(`Server initialization failed:`)} ${e instanceof Error?e.message:String(e)}`)})}function A(e,t,n){let r=n.ServerLockCollisionError;if(r===void 0||!(e instanceof r))return null;try{let e=i(t,`.ok`),r=n.readServerLock(e);return r?r.kind===`interactive`?`Open Knowledge 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`.":"Open Knowledge server is already running on this project — check `ok status` or `ok stop`.":"Open Knowledge server is already running on this project — check `ok status` or `ok stop`."}catch{return null}}function j(e){return new t(`start`).description(`Start the knowledge base collab server`).option(`-p, --port <port>`,`Server port`,void 0).option(`-H, --host <host>`,`Server host`,void 0).option(`--open`,`Open browser after start`).option(`--mode <mode>`,`Force dispatch mode: 'browser' or 'app'`,O).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.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=_(m());if(n.available){v({spawn:r});return}console.error(y(n.reason)),process.exit(1)}await k(n,t)})}export{C as a,w as c,b as d,m as f,E as i,j as l,v as m,T as n,x as o,_ as p,D as r,k as s,S as t,A as u};
3
- //# sourceMappingURL=start-_HvLGlDx.mjs.map
3
+ //# sourceMappingURL=start-CKupR8YG.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inkeep/open-knowledge",
3
- "version": "0.4.0-beta.29",
3
+ "version": "0.4.0-beta.30",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "repository": {
@@ -1,2 +0,0 @@
1
- import"./dist-H3Ld-L-a.mjs";var e=`0.4.0-beta.29`;const t=`config.yml`,n=e;export{n,t};
2
- //# sourceMappingURL=constants-Vc8PoRm6.mjs.map
@@ -1 +0,0 @@
1
- import{o as e}from"./init-B3-z2S8e.mjs";export{e as runInit};
@@ -1 +0,0 @@
1
- import{n as e}from"./loader-nzXlKCaJ.mjs";export{e as loadConfig};
@@ -1 +0,0 @@
1
- import{n as e,t}from"./preview-C5ZZtQhd.mjs";export{t as formatPreviewBlock,e as previewContent};
@@ -1 +0,0 @@
1
- import{l as e}from"./start-_HvLGlDx.mjs";export{e as startCommand};