@inkeep/open-knowledge 0.35.1-beta.4 → 0.35.1-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/assets/skills/discovery/SKILL.md +1 -1
  2. package/dist/assets/skills/project/SKILL.md +1 -1
  3. package/dist/{banner-C1j6gKvV.mjs → banner-dc_0Y_PF.mjs} +2 -2
  4. package/dist/cli.mjs +62 -62
  5. package/dist/{colors-CpVsnmzb.mjs → colors-B_qgKwrk.mjs} +1 -1
  6. package/dist/colors-DUjg75V3.mjs +1 -0
  7. package/dist/constants-CtrYcI0v.mjs +2 -0
  8. package/dist/{gh-detect-Cb1UCQYG.mjs → gh-detect-D21DaYXA.mjs} +2 -2
  9. package/dist/{git-handle-H0t8pegP.mjs → git-handle-C-78iRUR.mjs} +2 -2
  10. package/dist/git-handle-Cm2rQ_SB.mjs +1 -0
  11. package/dist/index.mjs +1 -1
  12. package/dist/init-BRDE0k-1.mjs +1 -0
  13. package/dist/{init-BRPdzN9L.mjs → init-CwXQEPui.mjs} +4 -4
  14. package/dist/{launch-json-removal-BmdvufOV.mjs → launch-json-removal-BWzPxI4I.mjs} +2 -2
  15. package/dist/{lib-CsZlOZVg.mjs → lib-CW6dpYSh.mjs} +8 -8
  16. package/dist/loader-DzcO9u-N.mjs +1 -0
  17. package/dist/{loader-I7r-0Ldo.mjs → loader-KE55RbMp.mjs} +3 -3
  18. package/dist/{open-browser-Dhw8dLve.mjs → open-browser-CO5MRLMI.mjs} +2 -2
  19. package/dist/{preview-CAYQZDe6.mjs → preview-9n5Pboi0.mjs} +2 -2
  20. package/dist/preview-Dbfots-x.mjs +1 -0
  21. package/dist/public/assets/{ActivityModeContent-BUW9aMAj.js → ActivityModeContent-BekkKvt5.js} +1 -1
  22. package/dist/public/assets/{AgentDiffPane-BLaH8w6u.js → AgentDiffPane-DX5yygoO.js} +1 -1
  23. package/dist/public/assets/{CodeMirrorPropInput-Bi4r7DgZ.js → CodeMirrorPropInput-Bqy90c-v.js} +1 -1
  24. package/dist/public/assets/{DocumentContext-QVTcu-bw.js → DocumentContext-DpeyjVxx.js} +2 -2
  25. package/dist/public/assets/{EnableSyncConfirmDialog-BC_Qjvcq.js → EnableSyncConfirmDialog-cztPH24v.js} +1 -1
  26. package/dist/public/assets/{GraphPanel-CbZW4P-I.js → GraphPanel-klcC474u.js} +5 -5
  27. package/dist/public/assets/{ManagedArtifactProperties-BfKDk54d.js → ManagedArtifactProperties-BM943qIb.js} +1 -1
  28. package/dist/public/assets/{McpConsentDialogBody-DrpJgjKO.js → McpConsentDialogBody-MWFa6hL-.js} +1 -1
  29. package/dist/public/assets/{MermaidDocEditor-BwDnJXMM.js → MermaidDocEditor-DMLRe7kf.js} +1 -1
  30. package/dist/public/assets/{PropertyPanel-NG0dp1I-.js → PropertyPanel-CghCdyF1.js} +1 -1
  31. package/dist/public/assets/{ReportBugDialogBody-D_PqxqIJ.js → ReportBugDialogBody-CatE51p5.js} +1 -1
  32. package/dist/public/assets/{SettingsDialogBody-CCOprUbG.js → SettingsDialogBody-DCuLzGe5.js} +1 -1
  33. package/dist/public/assets/{ShareBranchSwitchDialog-S4DEIUH2.js → ShareBranchSwitchDialog-JC3ssCG1.js} +1 -1
  34. package/dist/public/assets/{ShareReceiveDialog-D63YZ5Qt.js → ShareReceiveDialog-Bv4NmuUd.js} +1 -1
  35. package/dist/public/assets/{ShareReceiveMissDialog-C5bCaC_x.js → ShareReceiveMissDialog-DCuf6F3E.js} +1 -1
  36. package/dist/public/assets/{SkillEditorActions-4KVF20fT.js → SkillEditorActions-Edciau_D.js} +1 -1
  37. package/dist/public/assets/{SourceEditor-BMRoTchw.js → SourceEditor-CQzUCXVj.js} +1 -1
  38. package/dist/public/assets/{TerminalPanel-DO32mQGi.js → TerminalPanel-4-XK5RI5.js} +1 -1
  39. package/dist/public/assets/{TimelineDiffPane-0hFKuYI4.js → TimelineDiffPane-BSMJUakG.js} +1 -1
  40. package/dist/public/assets/{agent-presence-ByHbes6i.js → agent-presence-aWLDoz77.js} +1 -1
  41. package/dist/public/assets/{auth-state-cache-CyWc-rUz.js → auth-state-cache-CIX5FmID.js} +1 -1
  42. package/dist/public/assets/{config-provider-CM0Qk_B1.js → config-provider-BndKfIQn.js} +1 -1
  43. package/dist/public/assets/{dist-DXjqUQWc.js → dist-B2EDiaY_.js} +85 -85
  44. package/dist/public/assets/{dist-H67bKoaU.js → dist-BKmPXTTI.js} +1 -1
  45. package/dist/public/assets/{doc-hash-DZK-3zeD.js → doc-hash-DMNk5rpw.js} +1 -1
  46. package/dist/public/assets/{documents-events-BVZ2_FvF.js → documents-events-DXJkkSko.js} +1 -1
  47. package/dist/public/assets/{file-tree-adapter-4Otvq2cx.js → file-tree-adapter-CKQwswy3.js} +1 -1
  48. package/dist/public/assets/index-BzMVLovC.js +1995 -0
  49. package/dist/public/assets/{lint-config-client-CvyXWmXs.js → lint-config-client-C8q65Ycw.js} +1 -1
  50. package/dist/public/assets/{navigation-targets-Bdvnj5el.js → navigation-targets-DK_JH7Tb.js} +1 -1
  51. package/dist/public/assets/{open-managed-artifact-tab-D3Xycq5B.js → open-managed-artifact-tab-BT96NXgW.js} +1 -1
  52. package/dist/public/assets/{pending-receive-nav-store-BhoEZnG6.js → pending-receive-nav-store-CtinJwXM.js} +1 -1
  53. package/dist/public/assets/prop-types-Cf8g0EEm.js +1 -0
  54. package/dist/public/assets/{receive-store-vKfJeA9b.js → receive-store-CkUOBZ5-.js} +1 -1
  55. package/dist/public/assets/{selection-context-Camht0am.js → selection-context-ixLwMixV.js} +1 -1
  56. package/dist/public/assets/{skill-actions-cL6YQHiU.js → skill-actions-BffiTy28.js} +1 -1
  57. package/dist/public/assets/{skills-api-BrvevboZ.js → skills-api-DjDFbpaJ.js} +1 -1
  58. package/dist/public/assets/{src-BydwHjwu.js → src-Bg8dr3SE.js} +1 -1
  59. package/dist/public/assets/{target-navigation-intent-B2IV_p5Y.js → target-navigation-intent-zbxkZi4l.js} +1 -1
  60. package/dist/public/assets/{typing-burst-detector-D3atST3k.js → typing-burst-detector-v9igCcyQ.js} +1 -1
  61. package/dist/public/assets/{use-activity-panel-DBvA0hQ2.js → use-activity-panel-DM1azsHE.js} +1 -1
  62. package/dist/public/assets/{use-apply-config-color-theme-D_qio6w-.js → use-apply-config-color-theme-U4kAm-FK.js} +1 -1
  63. package/dist/public/assets/{use-timeline-entry-diff-BhNsU170.js → use-timeline-entry-diff-jL54o2-s.js} +1 -1
  64. package/dist/public/assets/{workspace-paths-iLOFM5BT.js → workspace-paths-CCP6lJKi.js} +1 -1
  65. package/dist/public/index.html +26 -26
  66. package/dist/{repair-launch-json-CuB19poA.mjs → repair-launch-json-BuvXw8q-.mjs} +2 -2
  67. package/dist/{repair-mcp-configs-D7vd7gGq.mjs → repair-mcp-configs-DcCKyHrR.mjs} +2 -2
  68. package/dist/repair-skills-B_LT6KmX.mjs +1 -0
  69. package/dist/{repair-skills-4Dcd6NTt.mjs → repair-skills-D7OqUhR5.mjs} +2 -2
  70. package/dist/server-lock-B4ji1_12.mjs +1 -0
  71. package/dist/{server-lock-DZQRJfHi.mjs → server-lock-B_XsVesk.mjs} +2 -2
  72. package/dist/{src-CLZCA0wF.mjs → src-CgIX2vtn.mjs} +88 -88
  73. package/dist/src-Dwakh1BL.mjs +21 -0
  74. package/dist/{src-DUBbCkx-.mjs → src-PsxMXz66.mjs} +1 -1
  75. package/dist/{src-BKuFxm9H.mjs → src-i2Sa6WJ8.mjs} +395 -395
  76. package/dist/start-BEFJCwqf.mjs +3 -0
  77. package/dist/start-Boj7-YRp.mjs +1 -0
  78. package/dist/{write-project-skill-nQkZOZuL.mjs → write-project-skill-BZ1Qx_Fc.mjs} +2 -2
  79. package/package.json +4 -4
  80. package/dist/colors-DqFW4lvb.mjs +0 -1
  81. package/dist/constants-CLcFGsaK.mjs +0 -2
  82. package/dist/git-handle-D5aVjSAb.mjs +0 -1
  83. package/dist/init-BZsLem5C.mjs +0 -1
  84. package/dist/loader-C-FnqHSV.mjs +0 -1
  85. package/dist/preview-CRNhRnSv.mjs +0 -1
  86. package/dist/public/assets/index-BVnXUpPo.js +0 -1995
  87. package/dist/public/assets/prop-types-CCG66Y4I.js +0 -1
  88. package/dist/repair-skills-BcvPN23G.mjs +0 -1
  89. package/dist/server-lock-CPMjg3EK.mjs +0 -1
  90. package/dist/src-bm9hZUKf.mjs +0 -21
  91. package/dist/start-BrcFfijH.mjs +0 -3
  92. package/dist/start-DXe14NGf.mjs +0 -1
@@ -1,2 +1,2 @@
1
- import{d as e,v as t}from"./init-BRPdzN9L.mjs";import{_ as n,d as r,s as i}from"./write-project-skill-nQkZOZuL.mjs";import{t as a}from"./mcp-migrate-event-C35ikoh2.mjs";import{homedir as o}from"node:os";function s(e){let t=e.logger??u,n=e.home??o(),a=[];if(e.reclaimDisableEnv===`1`)return t({event:`mcp-config-repair-skipped`,reason:`reclaim-disabled`}),{outcomes:a,repairedCount:0};for(let o of i){let i=r[o],s=c(()=>i.configPath(``,n));if(s!==null&&a.push(l({scope:`user`,editorId:o,target:i,home:n,cwd:``,configPath:s,configPathOverride:void 0,logger:t})),i.projectConfigPath){let n=i.projectConfigPath,r=c(()=>n(e.projectDir));r!==null&&a.push(l({scope:`project`,editorId:o,target:i,home:void 0,cwd:e.projectDir,configPath:r,configPathOverride:r,logger:t}))}}return{outcomes:a,repairedCount:a.filter(e=>e.outcome===`repaired`).length}}function c(e){try{return e()}catch{return null}}function l(r){let i={scope:r.scope,editorId:r.editorId,configPath:r.configPath},o=e(r.target,r.cwd,r.home,r.configPathOverride);if(o===null)return{...i,outcome:`no-entry`};if(n(o))return{...i,outcome:`canonical`};r.logger(a({scope:r.scope,surface:`cli-repair`,editorId:r.editorId,configPath:r.configPath,priorEntry:o}));let s=t(r.target,r.cwd,{mode:`published`,skipAvailabilityCheck:!0},r.home,r.configPathOverride);if(s.action===`failed`){let e=s.error??`unknown write failure`;return r.logger({event:`mcp-config-repair-write-failed`,scope:r.scope,editorId:r.editorId,configPath:r.configPath,error:e}),{...i,outcome:`write-failed`,error:e}}return s.action===`declined`?(r.logger({event:`mcp-config-repair-declined`,scope:r.scope,editorId:r.editorId,configPath:r.configPath,reason:s.declineReason}),{...i,outcome:`declined`}):{...i,outcome:`repaired`}}function u(e){process.stderr.write(`${JSON.stringify(e)}\n`)}export{s as repairMcpConfigs};
2
- //# sourceMappingURL=repair-mcp-configs-D7vd7gGq.mjs.map
1
+ import{d as e,v as t}from"./init-CwXQEPui.mjs";import{_ as n,d as r,s as i}from"./write-project-skill-BZ1Qx_Fc.mjs";import{t as a}from"./mcp-migrate-event-C35ikoh2.mjs";import{homedir as o}from"node:os";function s(e){let t=e.logger??u,n=e.home??o(),a=[];if(e.reclaimDisableEnv===`1`)return t({event:`mcp-config-repair-skipped`,reason:`reclaim-disabled`}),{outcomes:a,repairedCount:0};for(let o of i){let i=r[o],s=c(()=>i.configPath(``,n));if(s!==null&&a.push(l({scope:`user`,editorId:o,target:i,home:n,cwd:``,configPath:s,configPathOverride:void 0,logger:t})),i.projectConfigPath){let n=i.projectConfigPath,r=c(()=>n(e.projectDir));r!==null&&a.push(l({scope:`project`,editorId:o,target:i,home:void 0,cwd:e.projectDir,configPath:r,configPathOverride:r,logger:t}))}}return{outcomes:a,repairedCount:a.filter(e=>e.outcome===`repaired`).length}}function c(e){try{return e()}catch{return null}}function l(r){let i={scope:r.scope,editorId:r.editorId,configPath:r.configPath},o=e(r.target,r.cwd,r.home,r.configPathOverride);if(o===null)return{...i,outcome:`no-entry`};if(n(o))return{...i,outcome:`canonical`};r.logger(a({scope:r.scope,surface:`cli-repair`,editorId:r.editorId,configPath:r.configPath,priorEntry:o}));let s=t(r.target,r.cwd,{mode:`published`,skipAvailabilityCheck:!0},r.home,r.configPathOverride);if(s.action===`failed`){let e=s.error??`unknown write failure`;return r.logger({event:`mcp-config-repair-write-failed`,scope:r.scope,editorId:r.editorId,configPath:r.configPath,error:e}),{...i,outcome:`write-failed`,error:e}}return s.action===`declined`?(r.logger({event:`mcp-config-repair-declined`,scope:r.scope,editorId:r.editorId,configPath:r.configPath,reason:s.declineReason}),{...i,outcome:`declined`}):{...i,outcome:`repaired`}}function u(e){process.stderr.write(`${JSON.stringify(e)}\n`)}export{s as repairMcpConfigs};
2
+ //# sourceMappingURL=repair-mcp-configs-DcCKyHrR.mjs.map
@@ -0,0 +1 @@
1
+ import{t as e}from"./repair-skills-D7OqUhR5.mjs";export{e as repairSkills};
@@ -1,3 +1,3 @@
1
- import{S as e}from"./src-CLZCA0wF.mjs";import{An as t,Bn as n,Dn as r,En as i,In as a,Mn as o,Pn as s,Vn as c,jn as l}from"./src-BKuFxm9H.mjs";import{t as u}from"./esm-EvSEzE_V.mjs";import{a as d,d as f,f as p,t as m}from"./write-project-skill-nQkZOZuL.mjs";import{dirname as h,join as g,resolve as _}from"node:path";import{existsSync as v,mkdirSync as y,readFileSync as b,readdirSync as x,rmSync as S,statSync as C,writeFileSync as w}from"node:fs";import{homedir as T}from"node:os";const E={existsSync:e=>v(e),isDirectory:e=>{try{return C(e).isDirectory()}catch(e){if(e.code===`ENOENT`)return!1;throw e}},readdirSync:e=>x(e),readFileSync:e=>b(e),writeFileSync:(e,t)=>{w(e,t)},mkdirSync:(e,t)=>{y(e,t)},rmSync:(e,t)=>{S(e,t)}},D={resolveProjectBundledSkillDir:()=>a(`project`,{checkDesktop:!1}),resolveUserBundledSkillDir:e=>a(e,{checkDesktop:!1}),readBundledVersion:()=>r(),readRecordedVersion:e=>t(e,`cli-hosts`),writeRecordedVersion:(e,t)=>o(e,`cli-hosts`,t,`cli-start`),recordEvent:e=>s(e),readBundleDecision:(e,t)=>i(e,t),writeBundleDecision:(e,t,n)=>l(e,t,n),removeBundleFromDisk:(e,t)=>d(e,t)};function O(e){process.stderr.write(`${JSON.stringify(e)}\n`)}function k(e,t,n){n.rmSync(t,{recursive:!0,force:!0}),n.mkdirSync(h(t),{recursive:!0}),A(e,t,n)}function A(e,t,n){n.mkdirSync(t,{recursive:!0});for(let r of n.readdirSync(e)){let i=g(e,r),a=g(t,r);n.isDirectory(i)?A(i,a,n):n.writeFileSync(a,n.readFileSync(i))}}function j(e,t,n,r,i,a){let o=[],s=g(e,`.agents`,`skills`,t),c=r.existsSync(s),l=!1;try{k(n,s,r),l=!0,o.push({kind:`central`,path:s,outcome:c?`overwritten`:`written`}),i({event:`user-skill-reclaim-central-written`,scope:`user`,path:s,preexisting:c,version:a})}catch(e){let t=e instanceof Error?e.message:String(e);o.push({kind:`central`,path:s,outcome:`failed`,error:t}),i({event:`user-skill-reclaim-central-failed`,scope:`user`,path:s,error:t})}for(let c of p){let l=g(e,c.hostDir),u=g(l,`skills`,t);if(u===s){o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`skipped-collapsed-with-central`});continue}if(!r.existsSync(l)){o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`skipped-host-absent`});continue}let d=r.existsSync(u);try{k(n,u,r),o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:d?`overwritten`:`written`}),i({event:`user-skill-reclaim-host-written`,scope:`user`,editorId:c.editorId,hostDir:c.hostDir,path:u,preexisting:d,version:a})}catch(e){let t=e instanceof Error?e.message:String(e);o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`failed`,error:t}),i({event:`user-skill-reclaim-host-failed`,scope:`user`,editorId:c.editorId,hostDir:c.hostDir,path:u,error:t})}}return{entries:o,centralWritten:l}}function M(e,t){if(!e)return!1;try{if(!t.existsSync(e))return!1;let n=t.readFileSync(e).toString(`utf8`);return n.includes(`# ok-mcp-v1`)||n.includes(`# ok-mcp-win-v1`)}catch{return!1}}function N(e,t,n,r){let i;try{i=t.resolveProjectBundledSkillDir()}catch(e){return r({event:`project-skill-reclaim-bundle-missing`,scope:`project`,error:e instanceof Error?e.message:String(e)}),{outcome:`skipped`,reason:`bundle-missing`}}let a=[];for(let t of p){let o=g(e,t.hostDir,`skills`,`open-knowledge`),s=g(o,`SKILL.md`),c=n.existsSync(s),l=f[t.editorId]?.projectConfigPath?.(e),u=!c&&M(l,n);if(!c&&!u){a.push({editorId:t.editorId,hostDir:t.hostDir,path:o,outcome:`no-token`}),r({event:`project-skill-reclaim-no-token`,scope:`project`,editorId:t.editorId,path:o});continue}try{m(o,e),k(i,o,n);let s=c?`reclaimed`:`created`;a.push({editorId:t.editorId,hostDir:t.hostDir,path:o,outcome:s}),r({event:c?`project-skill-reclaim-reclaimed`:`project-skill-reclaim-created`,scope:`project`,editorId:t.editorId,path:o})}catch(e){let n=e instanceof Error?e.message:String(e);a.push({editorId:t.editorId,hostDir:t.hostDir,path:o,outcome:`failed`,error:n}),r({event:`project-skill-reclaim-failed`,scope:`project`,editorId:t.editorId,path:o,error:n})}}return{outcome:`done`,entries:a}}async function P(t,r,i,a){let o=e=>{r.recordEvent(e).catch(()=>{})},s=()=>new Date().toISOString(),l;try{l=await r.readBundledVersion()}catch(e){let t=e instanceof Error?e.message:String(e);return a({event:`user-skill-reclaim-version-read-failed`,scope:`user`,error:t}),o({ts:s(),surface:`cli-start`,target:`cli-hosts`,bundle:`discovery`,outcome:`failed`,reason:`version-read-failed:${t}`}),{outcome:`skipped`,reason:`version-read-failed`}}let u;try{u=await r.readRecordedVersion(t)}catch(e){a({event:`user-skill-reclaim-version-read-error`,scope:`user`,error:e instanceof Error?e.message:String(e)}),u=null}let d=[],f=null;for(let e of c)try{d.push({id:e,sourceDir:r.resolveUserBundledSkillDir(e)})}catch(e){f=e instanceof Error?e.message:String(e)}if(d.length===0)return a({event:`user-skill-reclaim-bundle-missing`,scope:`user`,error:f??`no user-global bundles`}),o({ts:s(),surface:`cli-start`,target:`cli-hosts`,outcome:`failed`,reason:`bundle-missing:${f}`}),{outcome:`skipped`,reason:`bundle-missing`};let p=[];for(let o of d){let s=n[o.id],c=i.existsSync(g(t,`.agents`,`skills`,s)),l=await r.readBundleDecision(t,s).catch(()=>null);if(!e(l,{installedOnDisk:c})){if(c)try{r.removeBundleFromDisk(t,o.id),a({event:`user-skill-reclaim-bundle-declined-removed`,scope:`user`,bundle:o.id})}catch(e){a({event:`user-skill-reclaim-bundle-remove-failed`,scope:`user`,bundle:o.id,error:e instanceof Error?e.message:String(e)})}continue}if(l===null&&c)try{await r.writeBundleDecision(t,s,!0)}catch(e){a({event:`user-skill-reclaim-grandfather-write-failed`,scope:`user`,bundle:o.id,error:e instanceof Error?e.message:String(e)})}p.push(o)}if(p.length===0)return{outcome:`skipped`,reason:`all-bundles-declined`};let m=p.every(e=>i.existsSync(g(t,`.agents`,`skills`,n[e.id])));if(u!==null&&u===l&&m)return a({event:`user-skill-reclaim-skipped-version-current`,scope:`user`,version:l}),{outcome:`skipped`,reason:`version-current`};let h=[],_=d.length===c.length,v=!0;for(let{id:e,sourceDir:r}of p){let o=j(t,n[e],r,i,a,l);h.push(...o.entries),o.centralWritten||(v=!1)}let y=h.some(e=>e.kind===`central`&&(e.outcome===`written`||e.outcome===`overwritten`));if(_&&v&&y){let e=null;try{await r.writeRecordedVersion(t,l),a({event:`user-skill-reclaim-version-recorded`,scope:`user`,version:l})}catch(t){e=t instanceof Error?t.message:String(t),a({event:`user-skill-reclaim-version-record-failed`,scope:`user`,version:l,error:e})}for(let{id:t}of p)o({ts:s(),surface:`cli-start`,target:`cli-hosts`,bundle:t,outcome:e===null?`installed`:`failed`,version:l,...e===null?{}:{reason:`state-write-failed:${e}`}})}else{let e=h.some(e=>e.kind===`host`&&e.outcome===`failed`);o({ts:s(),surface:`cli-start`,target:`cli-hosts`,outcome:`failed`,version:l,reason:e?`all-writes-failed`:`no-hosts-installed`})}return{outcome:`done`,version:l,entries:h}}async function F(e){let t=e.logger??O,n=e.fs??E,r=e.home??T(),i={...D,...e.deps};return e.reclaimDisableEnv===`1`?(t({event:`skill-repair-skipped`,reason:`reclaim-disabled`}),{status:`skipped`,reason:`reclaim-disabled`}):{status:`done`,project:N(e.projectDir,i,n,t),user:await P(r,i,n,t)}}function I(e){return e.status===`skipped`?e.reason===`reclaim-disabled`?0:1:e.project.outcome===`skipped`||e.user.outcome===`skipped`&&e.user.reason!==`version-current`&&e.user.reason!==`all-bundles-declined`||e.project.entries.some(e=>e.outcome===`failed`)||e.user.outcome===`done`&&e.user.entries.some(e=>e.outcome===`failed`)?1:0}function L(e){if(e.status===`skipped`)return`Skipped: ${e.reason}`;let t=[`Skill reclaim complete.`];if(e.project.outcome===`done`){let n=e.project.entries.filter(e=>e.outcome===`reclaimed`).length,r=e.project.entries.filter(e=>e.outcome===`created`).length,i=e.project.entries.filter(e=>e.outcome===`no-token`).length,a=e.project.entries.filter(e=>e.outcome===`failed`).length;t.push(` Project: ${n} reclaimed, ${r} created, ${i} no-token, ${a} failed.`)}else t.push(` Project: skipped (${e.project.reason}).`);if(e.user.outcome===`done`){let n=e.user.entries.filter(e=>e.outcome===`written`||e.outcome===`overwritten`).length,r=e.user.entries.filter(e=>e.outcome===`skipped-host-absent`||e.outcome===`skipped-collapsed-with-central`).length,i=e.user.entries.filter(e=>e.outcome===`failed`).length;t.push(` User (${e.user.version}): ${n} written, ${r} skipped, ${i} failed.`)}else t.push(` User: skipped (${e.user.reason}).`);return t.join(`
1
+ import{C as e}from"./src-CgIX2vtn.mjs";import{An as t,Bn as n,Dn as r,En as i,In as a,Mn as o,Pn as s,Vn as c,jn as l}from"./src-i2Sa6WJ8.mjs";import{t as u}from"./esm-EvSEzE_V.mjs";import{a as d,d as f,f as p,t as m}from"./write-project-skill-BZ1Qx_Fc.mjs";import{dirname as h,join as g,resolve as _}from"node:path";import{existsSync as v,mkdirSync as y,readFileSync as b,readdirSync as x,rmSync as S,statSync as C,writeFileSync as w}from"node:fs";import{homedir as T}from"node:os";const E={existsSync:e=>v(e),isDirectory:e=>{try{return C(e).isDirectory()}catch(e){if(e.code===`ENOENT`)return!1;throw e}},readdirSync:e=>x(e),readFileSync:e=>b(e),writeFileSync:(e,t)=>{w(e,t)},mkdirSync:(e,t)=>{y(e,t)},rmSync:(e,t)=>{S(e,t)}},D={resolveProjectBundledSkillDir:()=>a(`project`,{checkDesktop:!1}),resolveUserBundledSkillDir:e=>a(e,{checkDesktop:!1}),readBundledVersion:()=>r(),readRecordedVersion:e=>t(e,`cli-hosts`),writeRecordedVersion:(e,t)=>o(e,`cli-hosts`,t,`cli-start`),recordEvent:e=>s(e),readBundleDecision:(e,t)=>i(e,t),writeBundleDecision:(e,t,n)=>l(e,t,n),removeBundleFromDisk:(e,t)=>d(e,t)};function O(e){process.stderr.write(`${JSON.stringify(e)}\n`)}function k(e,t,n){n.rmSync(t,{recursive:!0,force:!0}),n.mkdirSync(h(t),{recursive:!0}),A(e,t,n)}function A(e,t,n){n.mkdirSync(t,{recursive:!0});for(let r of n.readdirSync(e)){let i=g(e,r),a=g(t,r);n.isDirectory(i)?A(i,a,n):n.writeFileSync(a,n.readFileSync(i))}}function j(e,t,n,r,i,a){let o=[],s=g(e,`.agents`,`skills`,t),c=r.existsSync(s),l=!1;try{k(n,s,r),l=!0,o.push({kind:`central`,path:s,outcome:c?`overwritten`:`written`}),i({event:`user-skill-reclaim-central-written`,scope:`user`,path:s,preexisting:c,version:a})}catch(e){let t=e instanceof Error?e.message:String(e);o.push({kind:`central`,path:s,outcome:`failed`,error:t}),i({event:`user-skill-reclaim-central-failed`,scope:`user`,path:s,error:t})}for(let c of p){let l=g(e,c.hostDir),u=g(l,`skills`,t);if(u===s){o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`skipped-collapsed-with-central`});continue}if(!r.existsSync(l)){o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`skipped-host-absent`});continue}let d=r.existsSync(u);try{k(n,u,r),o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:d?`overwritten`:`written`}),i({event:`user-skill-reclaim-host-written`,scope:`user`,editorId:c.editorId,hostDir:c.hostDir,path:u,preexisting:d,version:a})}catch(e){let t=e instanceof Error?e.message:String(e);o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`failed`,error:t}),i({event:`user-skill-reclaim-host-failed`,scope:`user`,editorId:c.editorId,hostDir:c.hostDir,path:u,error:t})}}return{entries:o,centralWritten:l}}function M(e,t){if(!e)return!1;try{if(!t.existsSync(e))return!1;let n=t.readFileSync(e).toString(`utf8`);return n.includes(`# ok-mcp-v1`)||n.includes(`# ok-mcp-win-v1`)}catch{return!1}}function N(e,t,n,r){let i;try{i=t.resolveProjectBundledSkillDir()}catch(e){return r({event:`project-skill-reclaim-bundle-missing`,scope:`project`,error:e instanceof Error?e.message:String(e)}),{outcome:`skipped`,reason:`bundle-missing`}}let a=[];for(let t of p){let o=g(e,t.hostDir,`skills`,`open-knowledge`),s=g(o,`SKILL.md`),c=n.existsSync(s),l=f[t.editorId]?.projectConfigPath?.(e),u=!c&&M(l,n);if(!c&&!u){a.push({editorId:t.editorId,hostDir:t.hostDir,path:o,outcome:`no-token`}),r({event:`project-skill-reclaim-no-token`,scope:`project`,editorId:t.editorId,path:o});continue}try{m(o,e),k(i,o,n);let s=c?`reclaimed`:`created`;a.push({editorId:t.editorId,hostDir:t.hostDir,path:o,outcome:s}),r({event:c?`project-skill-reclaim-reclaimed`:`project-skill-reclaim-created`,scope:`project`,editorId:t.editorId,path:o})}catch(e){let n=e instanceof Error?e.message:String(e);a.push({editorId:t.editorId,hostDir:t.hostDir,path:o,outcome:`failed`,error:n}),r({event:`project-skill-reclaim-failed`,scope:`project`,editorId:t.editorId,path:o,error:n})}}return{outcome:`done`,entries:a}}async function P(t,r,i,a){let o=e=>{r.recordEvent(e).catch(()=>{})},s=()=>new Date().toISOString(),l;try{l=await r.readBundledVersion()}catch(e){let t=e instanceof Error?e.message:String(e);return a({event:`user-skill-reclaim-version-read-failed`,scope:`user`,error:t}),o({ts:s(),surface:`cli-start`,target:`cli-hosts`,bundle:`discovery`,outcome:`failed`,reason:`version-read-failed:${t}`}),{outcome:`skipped`,reason:`version-read-failed`}}let u;try{u=await r.readRecordedVersion(t)}catch(e){a({event:`user-skill-reclaim-version-read-error`,scope:`user`,error:e instanceof Error?e.message:String(e)}),u=null}let d=[],f=null;for(let e of c)try{d.push({id:e,sourceDir:r.resolveUserBundledSkillDir(e)})}catch(e){f=e instanceof Error?e.message:String(e)}if(d.length===0)return a({event:`user-skill-reclaim-bundle-missing`,scope:`user`,error:f??`no user-global bundles`}),o({ts:s(),surface:`cli-start`,target:`cli-hosts`,outcome:`failed`,reason:`bundle-missing:${f}`}),{outcome:`skipped`,reason:`bundle-missing`};let p=[];for(let o of d){let s=n[o.id],c=i.existsSync(g(t,`.agents`,`skills`,s)),l=await r.readBundleDecision(t,s).catch(()=>null);if(!e(l,{installedOnDisk:c})){if(c)try{r.removeBundleFromDisk(t,o.id),a({event:`user-skill-reclaim-bundle-declined-removed`,scope:`user`,bundle:o.id})}catch(e){a({event:`user-skill-reclaim-bundle-remove-failed`,scope:`user`,bundle:o.id,error:e instanceof Error?e.message:String(e)})}continue}if(l===null&&c)try{await r.writeBundleDecision(t,s,!0)}catch(e){a({event:`user-skill-reclaim-grandfather-write-failed`,scope:`user`,bundle:o.id,error:e instanceof Error?e.message:String(e)})}p.push(o)}if(p.length===0)return{outcome:`skipped`,reason:`all-bundles-declined`};let m=p.every(e=>i.existsSync(g(t,`.agents`,`skills`,n[e.id])));if(u!==null&&u===l&&m)return a({event:`user-skill-reclaim-skipped-version-current`,scope:`user`,version:l}),{outcome:`skipped`,reason:`version-current`};let h=[],_=d.length===c.length,v=!0;for(let{id:e,sourceDir:r}of p){let o=j(t,n[e],r,i,a,l);h.push(...o.entries),o.centralWritten||(v=!1)}let y=h.some(e=>e.kind===`central`&&(e.outcome===`written`||e.outcome===`overwritten`));if(_&&v&&y){let e=null;try{await r.writeRecordedVersion(t,l),a({event:`user-skill-reclaim-version-recorded`,scope:`user`,version:l})}catch(t){e=t instanceof Error?t.message:String(t),a({event:`user-skill-reclaim-version-record-failed`,scope:`user`,version:l,error:e})}for(let{id:t}of p)o({ts:s(),surface:`cli-start`,target:`cli-hosts`,bundle:t,outcome:e===null?`installed`:`failed`,version:l,...e===null?{}:{reason:`state-write-failed:${e}`}})}else{let e=h.some(e=>e.kind===`host`&&e.outcome===`failed`);o({ts:s(),surface:`cli-start`,target:`cli-hosts`,outcome:`failed`,version:l,reason:e?`all-writes-failed`:`no-hosts-installed`})}return{outcome:`done`,version:l,entries:h}}async function F(e){let t=e.logger??O,n=e.fs??E,r=e.home??T(),i={...D,...e.deps};return e.reclaimDisableEnv===`1`?(t({event:`skill-repair-skipped`,reason:`reclaim-disabled`}),{status:`skipped`,reason:`reclaim-disabled`}):{status:`done`,project:N(e.projectDir,i,n,t),user:await P(r,i,n,t)}}function I(e){return e.status===`skipped`?e.reason===`reclaim-disabled`?0:1:e.project.outcome===`skipped`||e.user.outcome===`skipped`&&e.user.reason!==`version-current`&&e.user.reason!==`all-bundles-declined`||e.project.entries.some(e=>e.outcome===`failed`)||e.user.outcome===`done`&&e.user.entries.some(e=>e.outcome===`failed`)?1:0}function L(e){if(e.status===`skipped`)return`Skipped: ${e.reason}`;let t=[`Skill reclaim complete.`];if(e.project.outcome===`done`){let n=e.project.entries.filter(e=>e.outcome===`reclaimed`).length,r=e.project.entries.filter(e=>e.outcome===`created`).length,i=e.project.entries.filter(e=>e.outcome===`no-token`).length,a=e.project.entries.filter(e=>e.outcome===`failed`).length;t.push(` Project: ${n} reclaimed, ${r} created, ${i} no-token, ${a} failed.`)}else t.push(` Project: skipped (${e.project.reason}).`);if(e.user.outcome===`done`){let n=e.user.entries.filter(e=>e.outcome===`written`||e.outcome===`overwritten`).length,r=e.user.entries.filter(e=>e.outcome===`skipped-host-absent`||e.outcome===`skipped-collapsed-with-central`).length,i=e.user.entries.filter(e=>e.outcome===`failed`).length;t.push(` User (${e.user.version}): ${n} written, ${r} skipped, ${i} failed.`)}else t.push(` User: skipped (${e.user.reason}).`);return t.join(`
2
2
  `)}function R(){return new u(`repair-skills`).description("Refresh bundled SKILL.md files for installed AI editors (project-local + user-global). Runs automatically during `ok start`; this command forces an explicit sweep.").action(async()=>{let e=await F({projectDir:_(process.cwd()),reclaimDisableEnv:process.env.OK_RECLAIM_DISABLE??null});process.stdout.write(`${L(e)}\n`),process.exitCode=I(e)})}export{R as n,F as t};
3
- //# sourceMappingURL=repair-skills-4Dcd6NTt.mjs.map
3
+ //# sourceMappingURL=repair-skills-D7OqUhR5.mjs.map
@@ -0,0 +1 @@
1
+ import{a as e,o as t,r as n}from"./server-lock-B_XsVesk.mjs";export{n as markServerLockDraining,e as releaseServerLock,t as updateServerLockPort};
@@ -1,2 +1,2 @@
1
- import"./src-CLZCA0wF.mjs";import{dirname as e,join as t,resolve as n}from"node:path";import{closeSync as r,existsSync as i,mkdirSync as a,openSync as o,readFileSync as s,unlinkSync as c,writeFileSync as l,writeSync as u}from"node:fs";import{homedir as d,hostname as f}from"node:os";import{fileURLToPath as p}from"node:url";import{randomUUID as m}from"node:crypto";function h(e){try{return process.kill(e,0),!0}catch(e){return!!(e&&typeof e==`object`&&`code`in e&&e.code===`EPERM`)}}function g(e){return!(typeof e!=`number`||!Number.isInteger(e)||e<2||e>2147483647)}const _=/^[A-Za-z0-9-]{8,64}$/;let v=null;function y(e){return t(e??d(),`.ok`,`machine-id`)}function b(t){if(t===void 0&&v!==null)return v;let n=y(t),r=null;try{let e=s(n,`utf-8`).trim();_.test(e)&&(r=e)}catch{}if(r===null){r=m();try{a(e(n),{recursive:!0}),l(n,`${r}\n`,{encoding:`utf-8`,mode:384})}catch(e){console.warn(`[machine-id] Failed to persist ${n} — using an ephemeral per-process id; lock ownership checks will fail closed (collision) instead of recognizing this machine: ${e instanceof Error?e.message:String(e)}`)}}return t===void 0&&(v=r),r}function x(){try{let t=n(e(p(import.meta.url)),`..`,`package.json`),r=JSON.parse(s(t,`utf-8`));if(typeof r.version==`string`&&r.version.length>0)return r.version}catch{}return`0.0.0-unknown`}const S=x(),C=1;var w=class extends Error{existing;lockPath;lockName;constructor(e,t,n){super(`OpenKnowledge ${n} already running on port ${e.port} (pid ${e.pid}, started ${e.startedAt}). Stop it first or use a different directory. Lock: ${t}`),this.name=`ProcessLockCollisionError`,this.existing=e,this.lockPath=t,this.lockName=n}};function T(e,t){return n(e,`${t}.lock`)}const E=new Map;function D(e){E.set(e,(E.get(e)??0)+1)}function O(e){let t=E.get(e);return t===void 0||t<=1?(E.delete(e),!0):(E.set(e,t-1),!1)}function k(e){return typeof e.machineId==`string`?e.machineId===b():e.hostname===f()}const A=new Set;let j=!1;function M(e){A.add(e),!j&&(j=!0,process.on(`exit`,()=>{for(let e of A)try{let t=JSON.parse(s(e,`utf-8`));if(t?.pid!==process.pid||typeof t.machineId==`string`&&t.machineId!==b()||t.machineId===void 0&&typeof t.hostname==`string`&&t.hostname!==f())continue;c(e)}catch{}}))}function N(e,t){try{let n=JSON.parse(s(e,`utf-8`));return n&&typeof n==`object`&&g(n.pid)?n:(console.warn(`${t} Corrupt lock file at ${e} — replacing`),null)}catch{return console.warn(`${t} Corrupt lock file at ${e} — replacing`),null}}function P(e){let{lockName:t,lockDir:n,metadata:s}=e,d=`[${t}-lock]`;a(n,{recursive:!0});let p=T(n,t),m={pid:process.pid,hostname:f(),port:s.port,startedAt:new Date().toISOString(),worktreeRoot:s.worktreeRoot,machineId:b(),...s.kind!==void 0&&{kind:s.kind},...s.parentPid!==void 0&&{parentPid:s.parentPid},...s.capabilities!==void 0&&{capabilities:s.capabilities},protocolVersion:s.protocolVersion??1,runtimeVersion:s.runtimeVersion??S},g=JSON.stringify(m,null,2);for(let e=0;e<3;e++){if(!i(p))try{let e=o(p,`wx`,384);try{u(e,g)}finally{r(e)}return D(p),M(p),F({lockName:t,lockDir:n,lockPath:p})}catch(e){if(e.code!==`EEXIST`)throw e}let e=N(p,d);if(e){if(k(e)&&e.pid===process.pid)return l(p,g,{encoding:`utf-8`,mode:384}),D(p),M(p),F({lockName:t,lockDir:n,lockPath:p});if(h(e.pid))throw new w(e,p,t);console.warn(`${d} Stale lock detected (pid=${e.pid}, host=${e.hostname}) — replacing`)}try{c(p)}catch{}}throw Error(`${d} Failed to acquire ${p} after 3 attempts (concurrent acquire contention).`)}function F(e){let{lockName:t,lockDir:n,lockPath:r}=e;return{lockPath:r,release:()=>V({lockName:t,lockDir:n}),updatePort:e=>I({lockName:t,lockDir:n,port:e})}}function I(e){let{lockName:t,lockDir:n,port:r}=e,a=`[${t}-lock]`,o=T(n,t);if(!i(o)){console.warn(`${a} Lock file missing at ${o} during port update — skipping`);return}let c;try{let e=JSON.parse(s(o,`utf-8`));if(!e||typeof e!=`object`||!g(e.pid)){console.warn(`${a} Corrupt lock at ${o} during port update — skipping`);return}c=e}catch{console.warn(`${a} Unreadable lock at ${o} during port update — skipping`);return}if(c.pid===process.pid&&k(c)){c.port=r;try{l(o,JSON.stringify(c,null,2),{encoding:`utf-8`,mode:384})}catch(e){console.warn(`${a} Failed to update port in ${o}: ${e instanceof Error?e.message:String(e)}`)}}}function L(e){let{lockName:t,lockDir:n}=e,r=`[${t}-lock]`,i=T(n,t);if((E.get(i)??0)>1)return;let a;try{let e=JSON.parse(s(i,`utf-8`));if(!e||typeof e!=`object`||!g(e.pid)){console.warn(`${r} Corrupt lock at ${i} during draining mark — skipping`);return}a=e}catch(e){e.code!==`ENOENT`&&console.warn(`${r} Unreadable lock at ${i} during draining mark — skipping: ${e instanceof Error?e.message:String(e)}`);return}if(a.pid===process.pid&&k(a)&&a.draining!==!0){a.draining=!0;try{l(i,JSON.stringify(a,null,2),{encoding:`utf-8`,mode:384})}catch(e){console.warn(`${r} Failed to mark ${i} draining: ${e instanceof Error?e.message:String(e)}`)}}}function R(e){let{lockName:t,lockDir:n}=e,r=T(n,t);if(!i(r))return null;let a;try{let e=JSON.parse(s(r,`utf-8`));if(!e||typeof e!=`object`||!g(e.pid))return null;a=e}catch{return null}if(!k(a))return null;if(!h(a.pid)){try{c(r)}catch{}return null}return a}function z(e){let{lockName:t,lockDir:n}=e,r=T(n,t);if(!i(r))return{status:`absent`};let a;try{a=JSON.parse(s(r,`utf-8`))}catch{return{status:`incompatible`,reason:`corrupt`,raw:void 0}}if(!a||typeof a!=`object`)return{status:`incompatible`,reason:`corrupt`,raw:a};let o=a;if(!g(o.pid)||typeof o.hostname!=`string`||typeof o.port!=`number`||typeof o.startedAt!=`string`||typeof o.worktreeRoot!=`string`)return{status:`incompatible`,reason:`corrupt`,raw:a};let l={pid:o.pid,hostname:o.hostname,port:o.port,startedAt:o.startedAt,worktreeRoot:o.worktreeRoot,machineId:typeof o.machineId==`string`?o.machineId:void 0,draining:o.draining===!0?!0:void 0,protocolVersion:typeof o.protocolVersion==`number`?o.protocolVersion:void 0,runtimeVersion:typeof o.runtimeVersion==`string`?o.runtimeVersion:void 0};if(!k(l))return{status:`stale`,lock:l};if(!h(l.pid)){try{c(r)}catch{}return{status:`stale`,lock:l}}return l.protocolVersion===void 0||l.runtimeVersion===void 0?{status:`incompatible`,reason:`missing-fields`,raw:a}:{status:`live`,lock:l}}async function B(e){let{lockName:t,lockDir:n}=e,r=e.timeoutMs??1e4,i=e.pollIntervalMs??100,a=e.readLock??(()=>R({lockName:t,lockDir:n})),o=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),s=a();if(s===null||s.draining!==!0)return`no-drain`;let c=Date.now()+r;for(;Date.now()<c;){await o(i);let e=a();if(e===null)return`released`;if(e.draining!==!0)return`no-drain`}return`timeout`}function V(e){let{lockName:t,lockDir:n,deferUnlinkToExit:r=!1}=e,a=`[${t}-lock]`,o=T(n,t);if(O(o)){if(r){L({lockName:t,lockDir:n});return}if(i(o))try{let e=JSON.parse(s(o,`utf-8`));if(!e||typeof e!=`object`||typeof e.pid!=`number`||e.pid!==process.pid||!k(e))return;c(o),A.delete(o)}catch(e){console.warn(`${a} Failed to release ${o}: ${e instanceof Error?e.message:String(e)}`)}}}var H=class extends w{constructor(e,t){super(e,t,`server`),this.name=`ServerLockCollisionError`}};function U(e,t){try{return P({lockName:`server`,lockDir:e,metadata:t}).lockPath}catch(e){throw e instanceof w&&e.lockName===`server`?new H(e.existing,e.lockPath):e}}function W(e,t){I({lockName:`server`,lockDir:e,port:t})}function G(e){return R({lockName:`server`,lockDir:e})}function K(e,t){V({lockName:`server`,lockDir:e,...t})}function q(e){L({lockName:`server`,lockDir:e})}function J(e,t){return B({lockName:`server`,lockDir:e,...t})}export{C as _,K as a,g as b,w as c,L as d,R as f,S as g,I as h,G as i,P as l,V as m,U as n,W as o,z as p,q as r,J as s,H as t,T as u,b as v,h as y};
2
- //# sourceMappingURL=server-lock-DZQRJfHi.mjs.map
1
+ import"./src-CgIX2vtn.mjs";import{dirname as e,join as t,resolve as n}from"node:path";import{closeSync as r,existsSync as i,mkdirSync as a,openSync as o,readFileSync as s,unlinkSync as c,writeFileSync as l,writeSync as u}from"node:fs";import{homedir as d,hostname as f}from"node:os";import{fileURLToPath as p}from"node:url";import{randomUUID as m}from"node:crypto";function h(e){try{return process.kill(e,0),!0}catch(e){return!!(e&&typeof e==`object`&&`code`in e&&e.code===`EPERM`)}}function g(e){return!(typeof e!=`number`||!Number.isInteger(e)||e<2||e>2147483647)}const _=/^[A-Za-z0-9-]{8,64}$/;let v=null;function y(e){return t(e??d(),`.ok`,`machine-id`)}function b(t){if(t===void 0&&v!==null)return v;let n=y(t),r=null;try{let e=s(n,`utf-8`).trim();_.test(e)&&(r=e)}catch{}if(r===null){r=m();try{a(e(n),{recursive:!0}),l(n,`${r}\n`,{encoding:`utf-8`,mode:384})}catch(e){console.warn(`[machine-id] Failed to persist ${n} — using an ephemeral per-process id; lock ownership checks will fail closed (collision) instead of recognizing this machine: ${e instanceof Error?e.message:String(e)}`)}}return t===void 0&&(v=r),r}function x(){try{let t=n(e(p(import.meta.url)),`..`,`package.json`),r=JSON.parse(s(t,`utf-8`));if(typeof r.version==`string`&&r.version.length>0)return r.version}catch{}return`0.0.0-unknown`}const S=x(),C=1;var w=class extends Error{existing;lockPath;lockName;constructor(e,t,n){super(`OpenKnowledge ${n} already running on port ${e.port} (pid ${e.pid}, started ${e.startedAt}). Stop it first or use a different directory. Lock: ${t}`),this.name=`ProcessLockCollisionError`,this.existing=e,this.lockPath=t,this.lockName=n}};function T(e,t){return n(e,`${t}.lock`)}const E=new Map;function D(e){E.set(e,(E.get(e)??0)+1)}function O(e){let t=E.get(e);return t===void 0||t<=1?(E.delete(e),!0):(E.set(e,t-1),!1)}function k(e){return typeof e.machineId==`string`?e.machineId===b():e.hostname===f()}const A=new Set;let j=!1;function M(e){A.add(e),!j&&(j=!0,process.on(`exit`,()=>{for(let e of A)try{let t=JSON.parse(s(e,`utf-8`));if(t?.pid!==process.pid||typeof t.machineId==`string`&&t.machineId!==b()||t.machineId===void 0&&typeof t.hostname==`string`&&t.hostname!==f())continue;c(e)}catch{}}))}function N(e,t){try{let n=JSON.parse(s(e,`utf-8`));return n&&typeof n==`object`&&g(n.pid)?n:(console.warn(`${t} Corrupt lock file at ${e} — replacing`),null)}catch{return console.warn(`${t} Corrupt lock file at ${e} — replacing`),null}}function P(e){let{lockName:t,lockDir:n,metadata:s}=e,d=`[${t}-lock]`;a(n,{recursive:!0});let p=T(n,t),m={pid:process.pid,hostname:f(),port:s.port,startedAt:new Date().toISOString(),worktreeRoot:s.worktreeRoot,machineId:b(),...s.kind!==void 0&&{kind:s.kind},...s.parentPid!==void 0&&{parentPid:s.parentPid},...s.capabilities!==void 0&&{capabilities:s.capabilities},protocolVersion:s.protocolVersion??1,runtimeVersion:s.runtimeVersion??S},g=JSON.stringify(m,null,2);for(let e=0;e<3;e++){if(!i(p))try{let e=o(p,`wx`,384);try{u(e,g)}finally{r(e)}return D(p),M(p),F({lockName:t,lockDir:n,lockPath:p})}catch(e){if(e.code!==`EEXIST`)throw e}let e=N(p,d);if(e){if(k(e)&&e.pid===process.pid)return l(p,g,{encoding:`utf-8`,mode:384}),D(p),M(p),F({lockName:t,lockDir:n,lockPath:p});if(h(e.pid))throw new w(e,p,t);console.warn(`${d} Stale lock detected (pid=${e.pid}, host=${e.hostname}) — replacing`)}try{c(p)}catch{}}throw Error(`${d} Failed to acquire ${p} after 3 attempts (concurrent acquire contention).`)}function F(e){let{lockName:t,lockDir:n,lockPath:r}=e;return{lockPath:r,release:()=>V({lockName:t,lockDir:n}),updatePort:e=>I({lockName:t,lockDir:n,port:e})}}function I(e){let{lockName:t,lockDir:n,port:r}=e,a=`[${t}-lock]`,o=T(n,t);if(!i(o)){console.warn(`${a} Lock file missing at ${o} during port update — skipping`);return}let c;try{let e=JSON.parse(s(o,`utf-8`));if(!e||typeof e!=`object`||!g(e.pid)){console.warn(`${a} Corrupt lock at ${o} during port update — skipping`);return}c=e}catch{console.warn(`${a} Unreadable lock at ${o} during port update — skipping`);return}if(c.pid===process.pid&&k(c)){c.port=r;try{l(o,JSON.stringify(c,null,2),{encoding:`utf-8`,mode:384})}catch(e){console.warn(`${a} Failed to update port in ${o}: ${e instanceof Error?e.message:String(e)}`)}}}function L(e){let{lockName:t,lockDir:n}=e,r=`[${t}-lock]`,i=T(n,t);if((E.get(i)??0)>1)return;let a;try{let e=JSON.parse(s(i,`utf-8`));if(!e||typeof e!=`object`||!g(e.pid)){console.warn(`${r} Corrupt lock at ${i} during draining mark — skipping`);return}a=e}catch(e){e.code!==`ENOENT`&&console.warn(`${r} Unreadable lock at ${i} during draining mark — skipping: ${e instanceof Error?e.message:String(e)}`);return}if(a.pid===process.pid&&k(a)&&a.draining!==!0){a.draining=!0;try{l(i,JSON.stringify(a,null,2),{encoding:`utf-8`,mode:384})}catch(e){console.warn(`${r} Failed to mark ${i} draining: ${e instanceof Error?e.message:String(e)}`)}}}function R(e){let{lockName:t,lockDir:n}=e,r=T(n,t);if(!i(r))return null;let a;try{let e=JSON.parse(s(r,`utf-8`));if(!e||typeof e!=`object`||!g(e.pid))return null;a=e}catch{return null}if(!k(a))return null;if(!h(a.pid)){try{c(r)}catch{}return null}return a}function z(e){let{lockName:t,lockDir:n}=e,r=T(n,t);if(!i(r))return{status:`absent`};let a;try{a=JSON.parse(s(r,`utf-8`))}catch{return{status:`incompatible`,reason:`corrupt`,raw:void 0}}if(!a||typeof a!=`object`)return{status:`incompatible`,reason:`corrupt`,raw:a};let o=a;if(!g(o.pid)||typeof o.hostname!=`string`||typeof o.port!=`number`||typeof o.startedAt!=`string`||typeof o.worktreeRoot!=`string`)return{status:`incompatible`,reason:`corrupt`,raw:a};let l={pid:o.pid,hostname:o.hostname,port:o.port,startedAt:o.startedAt,worktreeRoot:o.worktreeRoot,machineId:typeof o.machineId==`string`?o.machineId:void 0,draining:o.draining===!0?!0:void 0,protocolVersion:typeof o.protocolVersion==`number`?o.protocolVersion:void 0,runtimeVersion:typeof o.runtimeVersion==`string`?o.runtimeVersion:void 0};if(!k(l))return{status:`stale`,lock:l};if(!h(l.pid)){try{c(r)}catch{}return{status:`stale`,lock:l}}return l.protocolVersion===void 0||l.runtimeVersion===void 0?{status:`incompatible`,reason:`missing-fields`,raw:a}:{status:`live`,lock:l}}async function B(e){let{lockName:t,lockDir:n}=e,r=e.timeoutMs??1e4,i=e.pollIntervalMs??100,a=e.readLock??(()=>R({lockName:t,lockDir:n})),o=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),s=a();if(s===null||s.draining!==!0)return`no-drain`;let c=Date.now()+r;for(;Date.now()<c;){await o(i);let e=a();if(e===null)return`released`;if(e.draining!==!0)return`no-drain`}return`timeout`}function V(e){let{lockName:t,lockDir:n,deferUnlinkToExit:r=!1}=e,a=`[${t}-lock]`,o=T(n,t);if(O(o)){if(r){L({lockName:t,lockDir:n});return}if(i(o))try{let e=JSON.parse(s(o,`utf-8`));if(!e||typeof e!=`object`||typeof e.pid!=`number`||e.pid!==process.pid||!k(e))return;c(o),A.delete(o)}catch(e){console.warn(`${a} Failed to release ${o}: ${e instanceof Error?e.message:String(e)}`)}}}var H=class extends w{constructor(e,t){super(e,t,`server`),this.name=`ServerLockCollisionError`}};function U(e,t){try{return P({lockName:`server`,lockDir:e,metadata:t}).lockPath}catch(e){throw e instanceof w&&e.lockName===`server`?new H(e.existing,e.lockPath):e}}function W(e,t){I({lockName:`server`,lockDir:e,port:t})}function G(e){return R({lockName:`server`,lockDir:e})}function K(e,t){V({lockName:`server`,lockDir:e,...t})}function q(e){L({lockName:`server`,lockDir:e})}function J(e,t){return B({lockName:`server`,lockDir:e,...t})}export{C as _,K as a,g as b,w as c,L as d,R as f,S as g,I as h,G as i,P as l,V as m,U as n,W as o,z as p,q as r,J as s,H as t,T as u,b as v,h as y};
2
+ //# sourceMappingURL=server-lock-B_XsVesk.mjs.map