@inkeep/open-knowledge 0.43.0-beta.0 → 0.43.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{acp-harness-probe-BI6bXf3a.mjs → acp-harness-probe-BsZ-Hyeq.mjs} +2 -2
- package/dist/assets/skills/discovery/SKILL.md +1 -1
- package/dist/assets/skills/project/SKILL.md +1 -1
- package/dist/cli.mjs +32 -32
- package/dist/config-schema.json +26 -0
- package/dist/config.project.schema.json +26 -0
- package/dist/constants-B7CkRnCB.mjs +2 -0
- package/dist/fs-traced-CeWo_16n.mjs +1 -0
- package/dist/{fs-traced-BmZQL7v9.mjs → fs-traced-DDm-belY.mjs} +2 -2
- package/dist/{git-handle-bosCq-DO.mjs → git-handle-Brc1fNLy.mjs} +2 -2
- package/dist/git-handle-DHnKEzLR.mjs +1 -0
- package/dist/index.d.mts +4 -0
- package/dist/index.mjs +1 -1
- package/dist/{init-BUp3cQ_4.mjs → init-CopMFOJr.mjs} +11 -11
- package/dist/init-Dmrh4v-w.mjs +1 -0
- package/dist/{launch-json-removal-CwOqJJze.mjs → launch-json-removal-DCerdFQY.mjs} +2 -2
- package/dist/{loader-y7Mn8M-Z.mjs → loader-1EAoe8bs.mjs} +2 -2
- package/dist/loader-B8BSGqBb.mjs +1 -0
- package/dist/md-manager-Cz4fhjnd.mjs +2 -0
- package/dist/{open-browser-CkLowmAw.mjs → open-browser-CZVSVsTE.mjs} +2 -2
- package/dist/parse-worker.mjs +1 -1
- package/dist/{preview-BV8bR51k.mjs → preview-CgtWMnxl.mjs} +2 -2
- package/dist/preview-D1OxPvJB.mjs +1 -0
- package/dist/public/assets/{ActivityModeContent-CCFHLlT9.js → ActivityModeContent-Dn0hroLN.js} +1 -1
- package/dist/public/assets/{AgentDiffPane-CQfhJYfr.js → AgentDiffPane-D8VHumHS.js} +1 -1
- package/dist/public/assets/{AgentThreadClientBinder-DZwzRPDa.js → AgentThreadClientBinder-DmS2wmOY.js} +1 -1
- package/dist/public/assets/{CodeMirrorPropInput-BqDZpzvH.js → CodeMirrorPropInput-BAKVIamK.js} +1 -1
- package/dist/public/assets/{DocumentContext-WcIs30H8.js → DocumentContext-ACm8UJLB.js} +1 -1
- package/dist/public/assets/{EditorModeToggle-1xLWvnWd.js → EditorModeToggle-vHV06Y3F.js} +1 -1
- package/dist/public/assets/{EnableSyncConfirmDialog-CPuodmd5.js → EnableSyncConfirmDialog-BXVF9BSv.js} +1 -1
- package/dist/public/assets/FeedbackForm-xoUaEF0z.js +1 -0
- package/dist/public/assets/{GraphPanel-U2ZyS1Aa.js → GraphPanel-1c013bf_.js} +1 -1
- package/dist/public/assets/{LintConfigEditor-DEUL9rFl.js → LintConfigEditor-DYclvSQA.js} +1 -1
- package/dist/public/assets/{ManagedArtifactProperties-EDghUFni.js → ManagedArtifactProperties-C_oqe0AW.js} +1 -1
- package/dist/public/assets/{McpConsentDialogBody-C8VSVSPz.js → McpConsentDialogBody-B6Gwaht3.js} +1 -1
- package/dist/public/assets/{MermaidDocEditor-BwjUe5g_.js → MermaidDocEditor-CqAdgxBk.js} +1 -1
- package/dist/public/assets/{PropertyPanel-F1tECi8I.js → PropertyPanel-CdiLI8dT.js} +1 -1
- package/dist/public/assets/{ReportBugDialogBody-Cz_kN3Qc.js → ReportBugDialogBody-D-51Fi6S.js} +1 -1
- package/dist/public/assets/SchemaConfigEditor-CIGVJa_q.js +1 -0
- package/dist/public/assets/{SettingsDialogBody-_7c5ty2t.js → SettingsDialogBody-CfFnHbf_.js} +2 -2
- package/dist/public/assets/{ShareBranchSwitchDialog-Dj6PdkLL.js → ShareBranchSwitchDialog-CPxlFKib.js} +1 -1
- package/dist/public/assets/{ShareReceiveDialog-Cmfia-Vl.js → ShareReceiveDialog-BVziJqwR.js} +1 -1
- package/dist/public/assets/{ShareReceiveMissDialog-xHTJ1V_2.js → ShareReceiveMissDialog-Ds8bPOAr.js} +1 -1
- package/dist/public/assets/{SkillEditorActions-Cw7itVro.js → SkillEditorActions-Cs6ruYBc.js} +1 -1
- package/dist/public/assets/{SourceEditor-DGpQCfDe.js → SourceEditor-40phOys_.js} +1 -1
- package/dist/public/assets/{TerminalPanel-Dfvz7JrY.js → TerminalPanel-ocG4IGRI.js} +1 -1
- package/dist/public/assets/{TerminalSessionsHost-D6vvdN1I.js → TerminalSessionsHost-DRgRpFQr.js} +2 -2
- package/dist/public/assets/{TerminalWindowApp-CfeLvqLD.js → TerminalWindowApp-J2gSwG7E.js} +1 -1
- package/dist/public/assets/{ThreadView-S_XJwwbZ.js → ThreadView-CsQ9ujqA.js} +1 -1
- package/dist/public/assets/{TimelineDiffPane-DgS-xWyU.js → TimelineDiffPane-TaEpfkAq.js} +1 -1
- package/dist/public/assets/{agent-diff-store-Cn0Zbsuy.js → agent-diff-store-CDu00oUs.js} +1 -1
- package/dist/public/assets/{agent-visibility-B4n6jrOx.js → agent-visibility-Doi5rQGj.js} +1 -1
- package/dist/public/assets/{auth-state-cache-PC5ml3gS.js → auth-state-cache-BbUKb42S.js} +1 -1
- package/dist/public/assets/{client-version-BmlQC9U8.js → client-version-CbYEf8u3.js} +1 -1
- package/dist/public/assets/{config-provider-GshVNiWq.js → config-provider-DsxJSqOE.js} +1 -1
- package/dist/public/assets/{dist-Cgpf3BIr.js → dist-DmmOGEYy.js} +2 -2
- package/dist/public/assets/{doc-hash-Bso39bSh.js → doc-hash-npYJLwiA.js} +1 -1
- package/dist/public/assets/{documents-events-CtKncdGv.js → documents-events-DR-3KwvB.js} +1 -1
- package/dist/public/assets/{file-tree-adapter-SJF4yRd-.js → file-tree-adapter-_Iw9bOfm.js} +1 -1
- package/dist/public/assets/{file-tree-utils-llNa05uo.js → file-tree-utils-D0sM1hl6.js} +1 -1
- package/dist/public/assets/{index-BVWeqqNi.js → index-OREKqjHv.js} +7 -7
- package/dist/public/assets/{lint-config-client-BYECwWuu.js → lint-config-client-P4Vl5_Ll.js} +1 -1
- package/dist/public/assets/{markdownlint-rule-browser-BR80y6ho.js → markdownlint-rule-browser-CgMCf9t4.js} +1 -1
- package/dist/public/assets/{navigation-targets-SdStq-nY.js → navigation-targets-DeBO_CiV.js} +1 -1
- package/dist/public/assets/{open-managed-artifact-tab-CgQ5akUh.js → open-managed-artifact-tab-C3XHRPjz.js} +1 -1
- package/dist/public/assets/{pending-receive-nav-store-DTqMgVXW.js → pending-receive-nav-store-D1Ak_KBi.js} +1 -1
- package/dist/public/assets/{prop-types-CU-rIGvv.js → prop-types-Bhd8xMdJ.js} +1 -1
- package/dist/public/assets/{receive-store-C5uRDARd.js → receive-store-B0la12DE.js} +1 -1
- package/dist/public/assets/{schema-fields-view-intent-BeD8vY0v.js → schema-fields-view-intent-D_s-Cynn.js} +1 -1
- package/dist/public/assets/{selection-context-DtzxXWAX.js → selection-context-BhBk68lx.js} +1 -1
- package/dist/public/assets/{skill-actions-PBEWDc_3.js → skill-actions-QNwfiy_e.js} +1 -1
- package/dist/public/assets/{skills-api-Cd3IvPjQ.js → skills-api-BM7Qxf1S.js} +1 -1
- package/dist/public/assets/{src-Dum6a22K.js → src-BBZpFfdp.js} +1 -1
- package/dist/public/assets/{tag-pill-input-CS-2Qx-_.js → tag-pill-input-_HZuox-k.js} +1 -1
- package/dist/public/assets/{target-navigation-intent-D3w-HLu3.js → target-navigation-intent-voqLi0RG.js} +1 -1
- package/dist/public/assets/{terminal-launch-events-CTVJjVZG.js → terminal-launch-events-CgQk_kaz.js} +1 -1
- package/dist/public/assets/{terminal-telemetry-pdIn1zDv.js → terminal-telemetry-CBfCAmXL.js} +1 -1
- package/dist/public/assets/{typing-burst-detector-BEbZgL9-.js → typing-burst-detector-D2SiMS8f.js} +1 -1
- package/dist/public/assets/{uninstall-BpVYvA3J.js → uninstall-C-l5Ivsg.js} +1 -1
- package/dist/public/assets/{use-activity-panel-B8RDBgok.js → use-activity-panel-Da12eNsM.js} +1 -1
- package/dist/public/assets/{use-apply-config-color-theme-A0jx7vnI.js → use-apply-config-color-theme-DRPFp4xs.js} +1 -1
- package/dist/public/assets/{use-collab-url-bpUtly6S.js → use-collab-url-BwoofE89.js} +1 -1
- package/dist/public/assets/{use-live-xterm-theme-w8QeNUlq.js → use-live-xterm-theme-CEP9y4ZI.js} +1 -1
- package/dist/public/assets/{use-settings-route-CFvCFlXS.js → use-settings-route-DPMg_rMU.js} +1 -1
- package/dist/public/assets/{use-terminal-enabled-CuFAAh8J.js → use-terminal-enabled-CqqmmreO.js} +1 -1
- package/dist/public/assets/{use-timeline-entry-diff-DlW9hmrR.js → use-timeline-entry-diff-DxvN8h6c.js} +1 -1
- package/dist/public/assets/{use-workspace-CNWEPWim.js → use-workspace-BIKWmfQe.js} +1 -1
- package/dist/public/assets/{workspace-paths-DQOJHVhV.js → workspace-paths-BJBhipCI.js} +1 -1
- package/dist/public/index.html +35 -35
- package/dist/public/uninstall.html +2 -2
- package/dist/{repair-launch-json-_2TGq22B.mjs → repair-launch-json-DR3VAd4W.mjs} +2 -2
- package/dist/{repair-mcp-configs-Cf6t84yK.mjs → repair-mcp-configs-CvPyVJOe.mjs} +2 -2
- package/dist/repair-skills-B05O8c60.mjs +1 -0
- package/dist/{repair-skills-DwQqF8O8.mjs → repair-skills-dZDoxvRM.mjs} +2 -2
- package/dist/schemas/v0/config.project.schema.json +26 -0
- package/dist/server-lock-B7mZG_Hv.mjs +1 -0
- package/dist/{server-lock-DpWXnrNF.mjs → server-lock-CH_iezNY.mjs} +2 -2
- package/dist/{sleep-DTzPXGtM.mjs → sleep-DDnWCWup.mjs} +2 -2
- package/dist/src-BRIunPu2.mjs +1 -0
- package/dist/{src-JZ7OJ1TB.mjs → src-CHlNjTzl.mjs} +5 -5
- package/dist/src-CbnujJE-.mjs +3271 -0
- package/dist/{src-DY417osM.mjs → src-Duzu_tVF.mjs} +124 -124
- package/dist/start-Cqs3MTiS.mjs +4 -0
- package/dist/start-DWJSVlHW.mjs +1 -0
- package/dist/{write-project-skill-cxdqSDsT.mjs → write-project-skill-CJb6JZQ_.mjs} +3 -3
- package/package.json +5 -5
- package/dist/constants-BKJ7B5iw.mjs +0 -2
- package/dist/fs-traced-B9Czc2nP.mjs +0 -1
- package/dist/git-handle-B1uGukUi.mjs +0 -1
- package/dist/init-CIt3KTw5.mjs +0 -1
- package/dist/loader-Bofa7u1n.mjs +0 -1
- package/dist/md-manager-DPw-b4lt.mjs +0 -2
- package/dist/preview-CUhu4iSu.mjs +0 -1
- package/dist/public/assets/FeedbackForm-DXei5e26.js +0 -1
- package/dist/public/assets/SchemaConfigEditor-C_t3p7aQ.js +0 -1
- package/dist/repair-skills-CtpTVpw_.mjs +0 -1
- package/dist/server-lock-CZMSbPZ0.mjs +0 -1
- package/dist/src-BFcAqZ_V.mjs +0 -1
- package/dist/src-BkP5u3RK.mjs +0 -3269
- package/dist/start-0twfe-vW.mjs +0 -1
- package/dist/start-BcTJLNem.mjs +0 -3
package/dist/start-0twfe-vW.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as e,f as t,r as n}from"./start-BcTJLNem.mjs";export{n as bootStartServer,t as resolveHost,e as startCommand};
|
package/dist/start-BcTJLNem.mjs
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{L as e,P as t}from"./src-DY417osM.mjs";import{$r as n,Kr as r,a as i,pn as a}from"./src-BkP5u3RK.mjs";import{C as o,w as s}from"./write-project-skill-cxdqSDsT.mjs";import{a as c,n as l,t as u}from"./acp-harness-probe-BI6bXf3a.mjs";import{n as d}from"./constants-BKJ7B5iw.mjs";import{spawn as f}from"node:child_process";import{basename as p,dirname as m,join as h,win32 as g}from"node:path";import{closeSync as _,existsSync as v,mkdirSync as y,openSync as b,statSync as x}from"node:fs";import{homedir as S}from"node:os";import{rm as C}from"node:fs/promises";import{setTimeout as w}from"node:timers/promises";function T(e){let t={...e};return delete t.ELECTRON_RUN_AS_NODE,t}function E(e,t,n={}){let i=(n.spawn??f)(e,[...t],r({detached:!0,stdio:`ignore`,env:T(n.env??process.env)}));return i.unref(),i}const D=`OpenKnowledge.app`,O=`/Applications/${D}`;function k(){return{platform:process.platform,env:process.env,execPath:process.execPath,isTTY:process.stdout.isTTY,statSync:e=>{try{return x(e,{throwIfNoEntry:!1})??null}catch{return null}}}}function A(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`){let t=/(.+?\.app)\/Contents\/MacOS\//.exec(e.execPath);if(t?.[1])return t[1]}if(j(e,O))return O;let t=h(e.homeDir??S(),`Applications`,D);return j(e,t)?t:null}function j(e,t){return M(e,h(t,`Contents`,`MacOS`,`OpenKnowledge`))}function M(e,t){try{let n=e.statSync(t);return n&&typeof n.isFile==`function`?n.isFile():!1}catch{return!1}}const N=[`@inkeepopen-knowledge-desktop`,`OpenKnowledge`];function P(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`&&/\\OpenKnowledge\.exe$/i.test(e.execPath))return e.execPath;let t=e.env.LOCALAPPDATA;if(t)for(let n of N){let r=g.join(t,`Programs`,n,`OpenKnowledge.exe`);if(M(e,r))return r}return null}function F(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`&&e.execPath.endsWith(`/openknowledge`))return e.execPath;let t=`/opt/OpenKnowledge/openknowledge`;return M(e,t)?t:null}function I(e){if(e.env.OK_FORCE_BROWSER===`1`)return{available:!1,reason:`force-browser`};if(e.platform!==`darwin`&&e.platform!==`win32`&&e.platform!==`linux`)return{available:!1,reason:`unsupported-platform`};let t;try{t=e.platform===`darwin`?A(e):e.platform===`win32`?P(e):F(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.platform===`win32`&&e.isTTY===void 0&&!e.env.CI)||e.env.SSH_CONNECTION||e.env.SSH_TTY||e.platform===`linux`&&!e.env.DISPLAY&&!e.env.WAYLAND_DISPLAY?{available:!1,reason:`headless`,bundlePath:t}:{available:!0,reason:`available`,bundlePath:t}:{available:!1,reason:`no-bundle`}}function L(e,t){let n=e.log??(e=>console.error(e)),r=e.platform??process.platform;if(n("Launching OpenKnowledge desktop (use `ok start` for the browser server, or `OK_FORCE_BROWSER=1` to always skip)"),r===`darwin`){E(`open`,[`-b`,`com.inkeep.open-knowledge`],{spawn:e.spawn});return}let i=t?.bundlePath;if(!i){n(`Desktop launch skipped: no resolved desktop executable (caller bug).`);return}E(i,[],{spawn:e.spawn})}function R(e=`no-bundle`){switch(e){case`no-bundle`:return`Desktop app not found (checked the standard install locations for this OS). Install it, or omit --mode for browser mode.`;case`darwin-only`:case`unsupported-platform`:return`Desktop app is not available on this platform. 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 the desktop install (filesystem error). Check permissions or use --mode=browser.`;case`available`:return`Desktop app appears available but launch dispatch did not fire (caller bug).`}}function z(e){return h(m(e),`..`,`Frameworks`,`OpenKnowledge Server.app`,`Contents`,`MacOS`,`OpenKnowledge Helper`)}const B=/\/[^/]+\.app\/Contents\/MacOS\/[^/]+$/;function ee(e){if(e.platform!==`darwin`||!B.test(e.execPath))return null;let t=z(e.execPath);return e.exists(t)?t:null}function V(e={}){let t=e.execPath??process.execPath,n=e.platform??process.platform,r=e.argv??process.argv,i=e.exists??v,a=r[1];return a?{command:ee({execPath:t,platform:n,exists:i})??t,prefixArgs:[a]}:(console.warn(`[self-spawn] process.argv[1] is empty — falling back to \`npx -y @inkeep/open-knowledge@latest\`. This re-introduces the registry-fetch surface that re-exec was fixing. Observed argv: ${JSON.stringify(r)}`),{command:`npx`,prefixArgs:[`-y`,`@inkeep/open-knowledge@latest`]})}function te(e,t){return e.host??t.HOST??`127.0.0.1`}function H(e){let t=p(e).replace(/[^\x20-\x7E]/g,``).trim().slice(0,64);return`open-knowledge-server ${t.length>0?t:`unknown`}`}var U=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 W(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 G(t){v(t.lockDir)||y(t.lockDir,{recursive:!0});let n=b(h(t.lockDir,e),`w`),r=t.spawn??f,{PORT:i,...a}=process.env,o=V();try{let e=r(o.command,[...o.prefixArgs,...t.args??[`ui`]],{detached:!0,stdio:[`ignore`,`ignore`,n],windowsHide:!0,cwd:t.cwd,env:{...a,ELECTRON_RUN_AS_NODE:`1`}});return e.unref(),e}finally{try{_(n)}catch{}}}function K(e,t,n){return e??(n===void 0?t:void 0)}function q(e,t){return e!==void 0&&t!==null&&t.port>0&&t.draining!==!0}function J(e,t,n){return e??+(t!=null&&!n)}async function Y(e){let t=e.spawn??f,n=V(),{PORT:r,...i}=process.env,a=t(n.command,[...n.prefixArgs,`ui`,`--port`,String(e.uiPort)],{cwd:e.cwd,stdio:`inherit`,windowsHide:!0,env:{...i,ELECTRON_RUN_AS_NODE:`1`}}),o=!1,s=e=>{o=!0;try{a.kill(e)}catch{}},c=()=>s(`SIGINT`),l=()=>s(`SIGTERM`);process.once(`SIGINT`,c),process.once(`SIGTERM`,l),await new Promise(e=>{a.on(`exit`,(t,n)=>{process.exitCode=J(t,n,o),e()}),a.on(`error`,t=>{console.error(`[start] connect fallback: failed to spawn ok ui — ${t instanceof Error?t.message:String(t)}`),process.exitCode=1,e()})}),process.removeListener(`SIGINT`,c),process.removeListener(`SIGTERM`,l)}async function X(e){let t=e.now()+e.timeoutMs;for(;e.now()<t;){let t=e.readUiLock();if(t&&t.port>0)return t.port;await e.sleep(e.pollIntervalMs)}let n=e.readUiLock();return n&&n.port>0?n.port:null}const ne=t;function Z(e,t,n=e=>C(e,{recursive:!0,force:!0})){return async()=>{try{await e()}finally{try{await n(t)}catch(e){process.stderr.write(`[start] ephemeral temp dir reap failed for ${t}: ${e instanceof Error?e.message:String(e)}\n`)}}}}function Q(e,t={}){let n=t.exit??(e=>process.exit(e)),r=t.getActiveHandles??(()=>{let e=process._getActiveHandles;return e?e.call(process):null});return async()=>{let i=!1;try{await e()}catch(e){i=!0,t.log?.error({err:e},`idle-shutdown: destroy failed — exiting anyway`)}finally{let e=null;try{let t=r();if(t!==null){e={};for(let n of t){let t=n?.constructor?.name??`unknown`;e[t]=(e[t]??0)+1}}}catch{e=null}t.log?.info({event:`idle-shutdown-exit`,exitCode:+!!i,openHandles:e??{},handlesAvailable:e!==null},`idle-shutdown: teardown finished — exiting process`),n(+!!i)}}}async function $(e){let t=e.sigtermGraceMs??ne,n=e.sigtermPollIntervalMs??200,r=e.sleep??(e=>w(e)),i=e.reason??`teardown`;try{let a=e.readUiLock(),o=e.spawnedUiPid();if(a&&e.isAlive(a.pid)&&a.pid!==o)e.log?.info({pid:a.pid,port:a.port,spawnedUiPid:o},`${i}: ui.lock holder is not our spawned sibling — leaving it alone`);else if(a&&e.isAlive(a.pid))try{e.killPid(a.pid,`SIGTERM`),e.log?.info({pid:a.pid,port:a.port},`${i}: SIGTERM UI sibling`);let o=Date.now()+t;for(;Date.now()<o&&e.isAlive(a.pid);)await r(n);if(e.isAlive(a.pid))try{e.killPid(a.pid,`SIGKILL`),e.log?.warn({pid:a.pid,graceMs:t},`${i}: SIGTERM grace expired — escalated to SIGKILL`)}catch(t){e.log?.error({pid:a.pid,err:t},`${i}: SIGKILL failed`)}}catch(t){e.log?.warn({pid:a.pid,err:t},`${i}: failed to SIGTERM UI sibling`)}}catch(t){e.log?.warn({err:t},`${i}: UI lookup failed; proceeding`)}}function re(e){let{destroy:t,...n}=e;return async()=>{await $({...n,reason:`idle-shutdown`}),await t()}}async function ie(e){let{config:t,cwd:r,host:o}=e,s=e.skipAutoInit??!1,d=e.skipUiAutoSpawn??!1,f=e.idleThresholdMs??18e5,{existsSync:p,mkdirSync:m}=await import(`node:fs`),{basename:h,dirname:g}=await import(`node:path`),{bootServer:_,getLogger:v,isProcessAlive:y,readUiLock:b,resolveContentDir:x,resolveLockDir:S,waitForServerLockDrain:C}=await import(`./src-BFcAqZ_V.mjs`),T=e.log??v(`start`),E=e.singleFile!==void 0,D=e.projectDir??r,O=E?i(e.singleFile).canonicalFilePath:void 0,k=O?g(O):void 0,A=O?h(O):void 0;if(!E){if(!s&&!a(r))throw new U(r);let t=process.env.OK_RECLAIM_DISABLE??null,n=e=>{let t=typeof e.event==`string`?e.event:``;(t.endsWith(`-failed`)||t.endsWith(`-error`)||t.endsWith(`-missing`))&&T.warn({event:e},`[start] reclaim sweep reported a problem`)};try{(e.repairMcpConfigsFn??(await import(`./repair-mcp-configs-Cf6t84yK.mjs`)).repairMcpConfigs)({projectDir:r,reclaimDisableEnv:t,logger:n})}catch(e){T.warn({err:e},`[start] mcp-config repair sweep failed; continuing`)}try{(e.repairLaunchJsonFn??(await import(`./repair-launch-json-_2TGq22B.mjs`)).repairLaunchJson)({projectDir:r,reclaimDisableEnv:t,logger:n})}catch(e){T.warn({err:e},`[start] launch.json repair sweep failed; continuing`)}try{await(e.repairSkillsFn??(await import(`./repair-skills-CtpTVpw_.mjs`)).repairSkills)({projectDir:r,reclaimDisableEnv:t,logger:n})}catch(e){T.warn({err:e},`[start] skill repair sweep failed; continuing`)}}let j=k??x(t,r);!E&&!p(j)&&(m(j,{recursive:!0}),T.info({contentDir:j},`Created content directory`));let M=null,N=null,P=async({lockDir:t})=>{if(M=W({uiLock:b(t),isAlive:y}),M.action===`spawn`&&!d)try{let n=e.uiPort===void 0?void 0:[`ui`,`--port`,String(e.uiPort)];N=G({lockDir:t,cwd:r,spawn:e.spawn,args:n}).pid??null,T.info({reason:M.reason,uiPort:e.uiPort},`[start] auto-spawned ok ui sibling`)}catch(e){console.warn(`[start] failed to auto-spawn ok ui: ${e instanceof Error?e.message:String(e)}`)}else M.action===`skip`&&T.info({port:M.port,pid:M.pid},`UI already running at port ${M.port}`)},F=e.reactShellDistDir===void 0,I=c(),L=n();{let e=S(E?D:r),t=Date.now(),n=await C(e);n!==`no-drain`&&T.info({event:`start-waited-for-draining-predecessor`,outcome:n,waitedMs:Date.now()-t,drainLockDir:e},n===`released`?`[start] predecessor server finished draining — proceeding`:`[start] predecessor server still draining after wait — proceeding to collide`)}let R=await _({config:t,contentDir:j,projectDir:E?D:r,contentRoot:E?void 0:t.content.dir,port:e.port,host:o,quiet:!1,detectGh:l,tokenStore:I,embeddingsKeyStore:L,...E?{ephemeral:!0,singleDocRelPath:A,gitEnabled:!1,gitPreflight:()=>({ok:!0,version:`0.0.0`,resolvedPath:`git`,source:`PATH`})}:{},localOpCliArgs:[process.execPath,process.argv[1]],probeHarnessManagedMcpEntry:(e,t)=>u(e,t),attachUiSibling:F,idleShutdownMs:f,skipAutoInit:!0,...F?{spawnUiSiblingFn:P}:{},idleShutdownHandler:t=>{let n=re({readUiLock:()=>b(R.lockDir),spawnedUiPid:()=>N,isAlive:y,killPid:(e,t)=>{process.kill(e,t)},destroy:t,log:T});return Q(E?Z(n,D):n,{log:T,exit:e.idleExit})},log:T,...e.serveContentAssets===void 0?{}:{serveContentAssets:e.serveContentAssets},...e.reactShellDistDir?{reactShellDistDir:e.reactShellDistDir}:{}});M||={action:`skip`,reason:`alive`,pid:0,port:0};let z=M,B=null;if(z.action===`skip`)B=z.port>0?z.port:null;else if(!d){let t=e.uiBindTimeoutMs??3e3;B=await X({readUiLock:()=>b(R.lockDir),now:Date.now,sleep:e=>w(e),timeoutMs:t,pollIntervalMs:50}),B===null&&T.warn({timeoutMs:t},`[start] ok ui did not bind within timeout — banner falls back to API URL`)}return{httpServer:R.httpServer,destroy:R.destroy,lockDir:R.lockDir,contentDir:j,port:R.port,ready:R.ready,degraded:R.degraded,uiSpawnDecision:M,spawnedUiPid:N,resolvedUiPort:B}}function ae(e){if(e===`browser`||e===`app`)return e;throw new s(`--mode must be 'browser' or 'app'`)}function oe(e){let t=Number.parseInt(e,10);if(Number.isNaN(t)||t<1||t>65535)throw new s(`--ui-port must be a port number between 1 and 65535`);return t}function se(e){return e.OK_CONSOLE_LEVEL!==void 0||e.LOG_LEVEL!==void 0?null:`warn`}function ce(e){let t=[`Stopping OpenKnowledge…`,`Saving pending changes and releasing the server lock — this can take a few seconds.`];return e===`SIGINT`&&t.push(`Press Ctrl+C again to force quit.`),t}async function le(e,t){let n=se(process.env);n!==null&&(process.env.OK_CONSOLE_LEVEL=n);let{renderBanner:r}=await import(`./banner--DGfdMN8.mjs`),{accent:i,dim:a,error:o,warning:s}=await import(`./colors-MGDi6UGf.mjs`),c=process.cwd(),l=e;process.title=H(c);let u=te(t,process.env),f=t.port===void 0?void 0:Number(t.port),p=process.env.PORT?Number(process.env.PORT):void 0,m=t.uiPort===void 0?void 0:Number(t.uiPort),h=K(f,p,m);if(m!==void 0){let{readServerLock:e,resolveLockDir:t}=await import(`./src-BFcAqZ_V.mjs`);if(q(m,e(t(c)))){await Y({cwd:c,uiPort:m});return}}let g;try{g=await ie({config:l,cwd:c,host:u,port:h,...m===void 0?{}:{uiPort:m},...t.serveContentAssets===void 0?{}:{serveContentAssets:t.serveContentAssets},...t.reactShellDistDir?{reactShellDistDir:t.reactShellDistDir}:{},...t.singleFile?{singleFile:t.singleFile}:{},...t.projectDir?{projectDir:t.projectDir}:{}})}catch(e){e instanceof U&&(console.error(o(e.message)),process.exit(1));let t=await import(`./src-BFcAqZ_V.mjs`);if((e instanceof t.GitNotAvailableError||e instanceof t.GitTooOldError)&&process.exit(78),(e instanceof t.SingleFileNotFoundError||e instanceof t.SingleFileNotAFileError||e instanceof t.SingleFileNotMarkdownError)&&(console.error(o(e.message)),process.exit(1)),m!==void 0&&ue(e,t)){await Y({cwd:c,uiPort:m});return}let n=de(e,c,t);n!==null&&(console.error(o(n)),process.exit(1)),console.error(`${o(`Failed to start:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exit(1)}let _=!1,v=async e=>{if(_)return;_=!0;let[t,...n]=ce(e);console.log(i(`\n${t}`));for(let e of n)console.log(a(` ${e}`));if(g.spawnedUiPid!==null)try{let{getLogger:e,isProcessAlive:t,readUiLock:n}=await import(`./src-BFcAqZ_V.mjs`);await $({readUiLock:()=>n(g.lockDir),spawnedUiPid:()=>g.spawnedUiPid,isAlive:t,killPid:(e,t)=>process.kill(e,t),log:e(`start`),reason:`shutdown`})}catch(e){console.error(`${o(`ui sibling teardown failed:`)} ${e instanceof Error?e.stack??e.message:String(e)}`)}try{await g.destroy()}catch(e){console.error(`${o(`destroy() failed:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exitCode=1}process.exit(process.exitCode??0)};process.once(`SIGINT`,()=>{v(`SIGINT`)}),process.once(`SIGTERM`,()=>{v(`SIGTERM`)});let y=`http://${u}:${g.port}`,b=u===`0.0.0.0`||u===`::`?`http://0.0.0.0:${g.port}`:void 0,x=g.resolvedUiPort,S=x!==null&&x>0?`http://${u}:${x}`:y;console.log(r({name:`open-knowledge`,version:d,localUrl:S,apiUrl:S===y?void 0:y,networkUrl:b,nextSteps:[`Open the Editor URL in your browser to start editing.`]}));let C={"shadow-repo":`Version history and branch-switch safety unavailable`,"file-watcher":`External file changes will not sync to the editor`,"head-watcher":`Git branch switches may cause document inconsistency`};g.ready.then(async()=>{if(g.degraded.length>0){console.log();for(let e of g.degraded){let t=C[e]??`${e} (check server logs for details)`;console.warn(` ${s(`⚠`)} ${s(e)}: ${a(t)}`)}console.log()}if(t.open){let{openBrowser:e}=await import(`./open-browser-CkLowmAw.mjs`);e(S)}}).catch(e=>{console.error(` ${o(`Server initialization failed:`)} ${e instanceof Error?e.message:String(e)}`)})}function ue(e,t){let n=t.ServerLockCollisionError;return n!==void 0&&e instanceof n}function de(e,t,n){let r=n.ServerLockCollisionError;if(r===void 0||!(e instanceof r))return null;try{let e=h(t,`.ok`),r=n.readServerLock(e);return r?r.kind===`interactive`?`OpenKnowledge desktop is currently running on this project. Quit it or use --cwd to point elsewhere.`:r.kind===`mcp-spawned`?"An MCP-spawned server holds this lock; it should release on idle-shutdown (~30 min). Or run `ok stop`.":"OpenKnowledge server is already running on this project — check `ok status` or `ok stop`.":"OpenKnowledge server is already running on this project — check `ok status` or `ok stop`."}catch{return null}}function fe(e){return new o(`start`).description(`Start the knowledge base collab server`).option(`-p, --port <port>`,`Server port`,void 0).option(`--ui-port <port>`,`Pin the ok ui sibling to <port> and connect (not exit) if a server already runs here — the worktree-preview recipe path`,oe).option(`-H, --host <host>`,`Server host`,void 0).option(`--open`,`Open browser after start`).option(`--mode <mode>`,`Force dispatch mode: 'browser' or 'app'`,ae).option(`--serve-content-assets`,`Serve content assets from this server (now the default; kept for compatibility)`).option(`--react-shell-dist-dir <path>`,`Serve React shell from <path> (suppresses ok ui sibling)`).option(`--single-file <path>`,`No-project ephemeral single-file mode: scope the server to one markdown file (git + MCP off)`).option(`--project-dir <dir>`,`Throwaway project root for --single-file (where ephemeral .ok/ state lives)`).action(async t=>{let n=e();if(t.mode===`app`){t.open&&(process.stderr.write(`error: option '--mode=app' cannot be combined with '--open' (--open opens a browser tab against the local server, which app mode does not boot)
|
|
2
|
-
`),process.exit(2));let e=[];if(t.port!==void 0&&e.push(`--port`),t.uiPort!==void 0&&e.push(`--ui-port`),t.host!==void 0&&e.push(`--host`),e.length>0){let t=process.env.OK_LOG_LEVEL??`info`;(t===`debug`||t===`trace`)&&console.error(`--mode=app: ignoring ${e.join(`, `)}`)}let n=I(k());if(n.available){L({spawn:f},n);return}console.error(R(n.reason)),process.exit(1)}await le(n,t)})}export{k as C,E,V as S,L as T,fe as _,J as a,Z as b,H as c,K as d,te as f,G as g,q as h,re as i,ce as l,le as m,X as n,Y as o,se as p,ie as r,W as s,U as t,ue as u,$ as v,I as w,Q as x,de as y};
|
|
3
|
-
//# sourceMappingURL=start-BcTJLNem.mjs.map
|