@inkeep/open-knowledge 0.50.0-beta.1 → 0.50.0-beta.3

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 (132) hide show
  1. package/dist/{acp-harness-probe-DwJF1QrM.mjs → acp-harness-probe-BPZnSRO1.mjs} +2 -2
  2. package/dist/cli.mjs +7 -7
  3. package/dist/constants-C5tLcIHw.mjs +2 -0
  4. package/dist/git-handle-Bit5ywOl.mjs +1 -0
  5. package/dist/{git-handle-B9WUn7B2.mjs → git-handle-Dxwd5VZx.mjs} +2 -2
  6. package/dist/index.d.mts +1 -1
  7. package/dist/index.mjs +117 -117
  8. package/dist/init-D2t_tZL7.mjs +1 -0
  9. package/dist/{init-8_iXriiz.mjs → init-Ro461Kb_.mjs} +3 -3
  10. package/dist/{launch-json-removal-CXPn5A7N.mjs → launch-json-removal-w-1VYpF4.mjs} +2 -2
  11. package/dist/{loader-CJqV3lQK.mjs → loader-BINQ4tTK.mjs} +2 -2
  12. package/dist/loader-D7taw_Gp.mjs +1 -0
  13. package/dist/md-manager-DAm5uhV1.mjs +2 -0
  14. package/dist/{open-browser-Bu1KY-5f.mjs → open-browser-BeG-Qyr0.mjs} +2 -2
  15. package/dist/parse-worker.mjs +1 -1
  16. package/dist/{preview-CXrbuj-R.mjs → preview-CnoSuKSf.mjs} +2 -2
  17. package/dist/preview-DsPcq5nE.mjs +1 -0
  18. package/dist/public/assets/{ActivityModeContent-HRSmxB9_.js → ActivityModeContent-BSacDTeg.js} +1 -1
  19. package/dist/public/assets/{AgentDiffPane-BGYo5UN6.js → AgentDiffPane-rotFtLyt.js} +1 -1
  20. package/dist/public/assets/{AgentThreadClientBinder-0uU00Tq4.js → AgentThreadClientBinder-DcMbo1L-.js} +1 -1
  21. package/dist/public/assets/{ChangedOutsideBadge-CG45zoCT.js → ChangedOutsideBadge-VYLHc7SD.js} +1 -1
  22. package/dist/public/assets/{CodeMirrorPropInput-B__Dqs8P.js → CodeMirrorPropInput-CdGGv03H.js} +2 -2
  23. package/dist/public/assets/{DocumentContext-Dxzqsjf0.js → DocumentContext-BTVyZC86.js} +9 -9
  24. package/dist/public/assets/{EditorModeToggle-OACqdrIA.js → EditorModeToggle-Dz5xVGpy.js} +1 -1
  25. package/dist/public/assets/{EnableSyncConfirmDialog-DBMws9uC.js → EnableSyncConfirmDialog-CLmAu8o9.js} +1 -1
  26. package/dist/public/assets/FeedbackForm-Dp1vjYgK.js +1 -0
  27. package/dist/public/assets/{GraphPanel-BlBOG-me.js → GraphPanel-D0ikjJ7b.js} +1 -1
  28. package/dist/public/assets/{ImportSkillDialog-CgeVAxXn.js → ImportSkillDialog-aJqzctlX.js} +1 -1
  29. package/dist/public/assets/{LintConfigEditor-v0oqzBfd.js → LintConfigEditor-Yk4196ji.js} +1 -1
  30. package/dist/public/assets/ManagedArtifactProperties-CMP-ThxE.js +2 -0
  31. package/dist/public/assets/ManagedArtifactProperties-DSr3E0As.js +1 -0
  32. package/dist/public/assets/{McpConsentDialogBody-DcaMMYmf.js → McpConsentDialogBody-CnYmnzCt.js} +1 -1
  33. package/dist/public/assets/{MermaidDocEditor-YEj8k0Fj.js → MermaidDocEditor-BimLfRlC.js} +1 -1
  34. package/dist/public/assets/{ReportBugDialogBody-f7fl9dVO.js → ReportBugDialogBody-C-PxBPo3.js} +1 -1
  35. package/dist/public/assets/{SchemaConfigEditor-C_BBar0x.js → SchemaConfigEditor-PBcainDT.js} +1 -1
  36. package/dist/public/assets/{SessionsHost-DPObQsYR.js → SessionsHost-CknpEvXW.js} +2 -2
  37. package/dist/public/assets/{SettingsDialogBody-C53PpDiP.js → SettingsDialogBody-B3zf_p67.js} +4 -4
  38. package/dist/public/assets/{ShareBranchSwitchDialog-DMbjNni-.js → ShareBranchSwitchDialog-E4sJceRx.js} +1 -1
  39. package/dist/public/assets/{ShareReceiveDialog-DMLSpBoi.js → ShareReceiveDialog-CZ8wF8EG.js} +1 -1
  40. package/dist/public/assets/{ShareReceiveMissDialog-TTjnDvC9.js → ShareReceiveMissDialog-Ff2iKkDU.js} +1 -1
  41. package/dist/public/assets/{SkillEditBanner-Dmsi4hSW.js → SkillEditBanner-LZDhvyzV.js} +1 -1
  42. package/dist/public/assets/{SkillOriginInline-BoGssBkU.js → SkillOriginInline-CfZfwviY.js} +1 -1
  43. package/dist/public/assets/{SkillToolbarControls-C8yypIJ3.js → SkillToolbarControls-CXhDatkg.js} +1 -1
  44. package/dist/public/assets/{SlidesToolbarControls-CWIkYgNX.js → SlidesToolbarControls-B_tRlqt3.js} +1 -1
  45. package/dist/public/assets/SourceEditor-pu60EAhW.js +1 -0
  46. package/dist/public/assets/{TerminalPanel-D_OODFVz.js → TerminalPanel-DnS0vsLe.js} +1 -1
  47. package/dist/public/assets/{TerminalWindowApp-Dwoah4yb.js → TerminalWindowApp-BMu5aZ76.js} +1 -1
  48. package/dist/public/assets/{TextDocEditor-DzdzVGmP.js → TextDocEditor-CbIK48pc.js} +1 -1
  49. package/dist/public/assets/{ThreadView-DJxvdzfd.js → ThreadView-uIta-Vtw.js} +1 -1
  50. package/dist/public/assets/{TimelineDiffPane-D5U46urB.js → TimelineDiffPane-DPX5EnVl.js} +1 -1
  51. package/dist/public/assets/{agent-diff-store-DmpkFUx3.js → agent-diff-store-9R9YLQTj.js} +1 -1
  52. package/dist/public/assets/{auth-state-cache-Dm1J9vyz.js → auth-state-cache-BFy9iIQF.js} +4 -4
  53. package/dist/public/assets/{client-version-BbTOZkhQ.js → client-version-Brtmi6Tl.js} +1 -1
  54. package/dist/public/assets/{comment-chips-CNh6cTT4.js → comment-chips-C-IwbGzt.js} +1 -1
  55. package/dist/public/assets/config-provider-zCjx6lVk.js +5 -0
  56. package/dist/public/assets/{dist-TVrIGknK2.js → dist-BBh-Rx_62.js} +93 -93
  57. package/dist/public/assets/{doc-paths-BKAhPn1c.js → doc-paths-PNMXyOQj.js} +1 -1
  58. package/dist/public/assets/{documents-events-B6nWdFan.js → documents-events-C930MM9G.js} +1 -1
  59. package/dist/public/assets/{file-tree-adapter-Dhf8gmFi.js → file-tree-adapter-D0uVE8rS.js} +1 -1
  60. package/dist/public/assets/{file-tree-utils-Cx1c51Ql.js → file-tree-utils-D9c8Kaxh.js} +1 -1
  61. package/dist/public/assets/{folder-config-api-CKhPo3Lt.js → folder-config-api-DnXS5Q8-.js} +1 -1
  62. package/dist/public/assets/{follow-file-BRGwJuKy.js → follow-file-eWlVLAme.js} +1 -1
  63. package/dist/public/assets/i18n-CGL69Msh.js +1 -0
  64. package/dist/public/assets/{index-Dask65mE.js → index-BV2vpMYO.js} +108 -108
  65. package/dist/public/assets/{lint-config-client-KRlZx1_T.js → lint-config-client-Dnm7kl-A.js} +1 -1
  66. package/dist/public/assets/{markdownlint-rule-browser-BAnqBevm.js → markdownlint-rule-browser-DjTNNqKF.js} +1 -1
  67. package/dist/public/assets/navigation-targets-hMP35CWp.js +1 -0
  68. package/dist/public/assets/{open-managed-artifact-tab-CgUiYJiR.js → open-managed-artifact-tab-BXbv1vZH.js} +1 -1
  69. package/dist/public/assets/{pending-receive-nav-store-Crda7hlg.js → pending-receive-nav-store-BBGIBWy4.js} +1 -1
  70. package/dist/public/assets/prop-types-C8xSIHU7.js +1 -0
  71. package/dist/public/assets/{receive-store--Bc0z-E4.js → receive-store-Dy9Hb1sU.js} +1 -1
  72. package/dist/public/assets/{selection-context-CsRnyGFj.js → selection-context-C3p_BtW1.js} +1 -1
  73. package/dist/public/assets/{skill-actions-B7Cmxryy.js → skill-actions-CQa6AUDr.js} +2 -2
  74. package/dist/public/assets/{skill-scope-CwmLPgmT.js → skill-scope-q42erPyI.js} +1 -1
  75. package/dist/public/assets/{skills-api-DDfyPLwg.js → skills-api-DxH6BgPG.js} +1 -1
  76. package/dist/public/assets/{src-DfI4uz3u.js → src-hzPGvn2R.js} +1 -1
  77. package/dist/public/assets/{tag-pill-input-DnM-Fz1E.js → tag-pill-input-KrIJOPkF.js} +1 -1
  78. package/dist/public/assets/{target-navigation-intent-D8zAsaUV.js → target-navigation-intent-BPFSqMEn.js} +1 -1
  79. package/dist/public/assets/{terminal-cli-display-Djf7X5gE.js → terminal-cli-display-BCPlwXFC.js} +1 -1
  80. package/dist/public/assets/{terminal-launch-events-B76nHQ-9.js → terminal-launch-events-BDizFas3.js} +1 -1
  81. package/dist/public/assets/{terminal-telemetry-CynEAJPS.js → terminal-telemetry-DGeT-gdl.js} +1 -1
  82. package/dist/public/assets/{typing-burst-detector-DzIKrNKg.js → typing-burst-detector-jWGPUNfv.js} +2 -2
  83. package/dist/public/assets/{uninstall-DT91VYMe.js → uninstall-DSQiimxB.js} +1 -1
  84. package/dist/public/assets/{use-activity-panel-CbIsW8Oq.js → use-activity-panel-iiPv1fFb.js} +1 -1
  85. package/dist/public/assets/{use-apply-config-color-theme-Cd_bVm8F.js → use-apply-config-color-theme-BT2P9Cg6.js} +1 -1
  86. package/dist/public/assets/{use-collab-url-DESxkkaS.js → use-collab-url-ByKwzGpm.js} +1 -1
  87. package/dist/public/assets/{use-live-xterm-theme-D9HFWiME.js → use-live-xterm-theme-O1QzvrK2.js} +1 -1
  88. package/dist/public/assets/{use-open-skill-DyTRfvTr.js → use-open-skill-Dhlxc-5j.js} +1 -1
  89. package/dist/public/assets/{use-settings-route-BXWhuQbZ.js → use-settings-route-BvOZe32W.js} +1 -1
  90. package/dist/public/assets/{use-skill-directory-BaP9hj7C.js → use-skill-directory-_MeqpXal.js} +1 -1
  91. package/dist/public/assets/{use-skill-origin-DBXnPKZS.js → use-skill-origin-BWwJ-V8H.js} +1 -1
  92. package/dist/public/assets/{use-skills-CVci-eTA.js → use-skills-CCrPufi9.js} +1 -1
  93. package/dist/public/assets/{use-terminal-enabled-DDthawVX.js → use-terminal-enabled-CPGBEBb0.js} +1 -1
  94. package/dist/public/assets/{use-timeline-entry-diff-BC2rFPLm.js → use-timeline-entry-diff-DBmy_B-o.js} +1 -1
  95. package/dist/public/assets/{use-workspace-CAcWHNxj.js → use-workspace-B4DagT1C.js} +1 -1
  96. package/dist/public/index.html +44 -44
  97. package/dist/public/uninstall.html +3 -3
  98. package/dist/{repair-launch-json-V-un1HwF.mjs → repair-launch-json-7Sf_hdOn.mjs} +2 -2
  99. package/dist/{repair-mcp-configs-CgS2qBwI.mjs → repair-mcp-configs-Cp0KmcwQ.mjs} +2 -2
  100. package/dist/{repair-skills-cQdbD3lz.mjs → repair-skills-Dz6gjuVz.mjs} +2 -2
  101. package/dist/repair-skills-kKrHm4Sp.mjs +1 -0
  102. package/dist/server-lock-DLY6qJ31.mjs +1 -0
  103. package/dist/{server-lock-CVlhIOaP.mjs → server-lock-_SrmIVon.mjs} +2 -2
  104. package/dist/{skill-teardown-BVQqx1VE.mjs → skill-teardown-N2at_ImB.mjs} +2 -2
  105. package/dist/{src-Cb3i1kcm.mjs → src-BgYGdjBz.mjs} +123 -123
  106. package/dist/{src-Mfncsy21.mjs → src-DBqW6hfs.mjs} +2 -2
  107. package/dist/{src-Dn98dNdR.mjs → src-DJHJJDlb.mjs} +1 -1
  108. package/dist/src-DexEZ0uX.mjs +2032 -0
  109. package/dist/src-DyGBqgiO.mjs +1 -0
  110. package/dist/start-BqobG-qu.mjs +1 -0
  111. package/dist/{start-BSLZXd-A.mjs → start-DdmHbvgs.mjs} +3 -3
  112. package/dist/{write-project-skill-DPVCl9Kv.mjs → write-project-skill-DirISflr.mjs} +2 -2
  113. package/package.json +4 -4
  114. package/dist/constants-C9EGLQ-u.mjs +0 -2
  115. package/dist/git-handle-BfyNyc1q.mjs +0 -1
  116. package/dist/init-D5SAyEIp.mjs +0 -1
  117. package/dist/loader-CU-Nz3ee.mjs +0 -1
  118. package/dist/md-manager-DGG55-uN.mjs +0 -2
  119. package/dist/preview-CjwSh-52.mjs +0 -1
  120. package/dist/public/assets/FeedbackForm-YQbdmBFL.js +0 -1
  121. package/dist/public/assets/ManagedArtifactProperties-BfO4jYnj.js +0 -2
  122. package/dist/public/assets/ManagedArtifactProperties-Dmjq1ugS.js +0 -1
  123. package/dist/public/assets/SourceEditor-D3dXest3.js +0 -1
  124. package/dist/public/assets/config-provider-CZ_6SNHv.js +0 -5
  125. package/dist/public/assets/i18n-iRTrMKQI.js +0 -1
  126. package/dist/public/assets/navigation-targets-BhdJAW-R.js +0 -1
  127. package/dist/public/assets/prop-types-CvU-2DkU.js +0 -1
  128. package/dist/repair-skills-KPpoS1oT.mjs +0 -1
  129. package/dist/server-lock-CMPaDe7b.mjs +0 -1
  130. package/dist/src-C1NIOm2S.mjs +0 -1
  131. package/dist/src-q9JjDIHN.mjs +0 -2032
  132. package/dist/start-CJ3wdpkC.mjs +0 -1
@@ -1,3 +1,3 @@
1
- import{Y as e}from"./sleep-DVOInM4H.mjs";import{f as t,h as n,o as r}from"./write-project-skill-DPVCl9Kv.mjs";import{d as i}from"./init-8_iXriiz.mjs";import{execFileSync as a}from"node:child_process";import{dirname as o,join as s}from"node:path";import{existsSync as c,mkdirSync as l,readFileSync as u,writeFileSync as d}from"node:fs";import{homedir as f}from"node:os";var p=e();const m=`open-knowledge`;function h(e){try{e()}catch{}}var g=class{backend=`keyring`;constructor(e){this.onKeychainRead=e}async get(e){let{Entry:t}=await import(`@napi-rs/keyring`),n;try{n=new t(m,e).getPassword()}catch(t){return h(()=>this.onKeychainRead?.({kind:`read-error`,host:e,error:t instanceof Error?t.name:`unknown`})),null}if(n==null)return h(()=>this.onKeychainRead?.({kind:`absent`,host:e})),null;try{return JSON.parse(n)}catch{return h(()=>this.onKeychainRead?.({kind:`corrupt-entry`,host:e,error:`corrupt-entry`})),null}}async set(e,t,n,r){let{Entry:i}=await import(`@napi-rs/keyring`),a=new i(m,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(m,e).deletePassword()}catch{}}},_=class{backend=`file`;authFile;constructor(e){this.authFile=e??s(f(),`.ok`,`auth.yml`)}read(){if(!c(this.authFile))return{};try{return(0,p.parse)(u(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=o(this.authFile);c(t)||l(t,{recursive:!0,mode:448}),d(this.authFile,(0,p.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)}},v=class{backend=`keyring`;constructor(e,t){this.keychain=e,this.file=t}async get(e){let t=await this.keychain.get(e);if(t!=null)return t;let n=await this.file.get(e);if(n==null)return null;try{await this.keychain.set(e,n.login,n.token,{gitProtocol:n.gitProtocol,name:n.name,email:n.email}),await this.file.clear(e),process.stderr.write(`[auth] migrated ${e} credential from ~/.ok/auth.yml to the OS keychain\n`)}catch{}return n}set(e,t,n,r){return this.keychain.set(e,t,n,r)}async clear(e){await this.keychain.clear(e),await this.file.get(e)!=null&&await this.file.clear(e)}};async function y(e,t){try{let{Entry:n}=await import(`@napi-rs/keyring`);return new n(m,`__probe__`),process.stderr.write(`[auth] token storage: OS keychain
1
+ import{Y as e}from"./sleep-DVOInM4H.mjs";import{f as t,h as n,o as r}from"./write-project-skill-DirISflr.mjs";import{d as i}from"./init-Ro461Kb_.mjs";import{execFileSync as a}from"node:child_process";import{dirname as o,join as s}from"node:path";import{existsSync as c,mkdirSync as l,readFileSync as u,writeFileSync as d}from"node:fs";import{homedir as f}from"node:os";var p=e();const m=`open-knowledge`;function h(e){try{e()}catch{}}var g=class{backend=`keyring`;constructor(e){this.onKeychainRead=e}async get(e){let{Entry:t}=await import(`@napi-rs/keyring`),n;try{n=new t(m,e).getPassword()}catch(t){return h(()=>this.onKeychainRead?.({kind:`read-error`,host:e,error:t instanceof Error?t.name:`unknown`})),null}if(n==null)return h(()=>this.onKeychainRead?.({kind:`absent`,host:e})),null;try{return JSON.parse(n)}catch{return h(()=>this.onKeychainRead?.({kind:`corrupt-entry`,host:e,error:`corrupt-entry`})),null}}async set(e,t,n,r){let{Entry:i}=await import(`@napi-rs/keyring`),a=new i(m,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(m,e).deletePassword()}catch{}}},_=class{backend=`file`;authFile;constructor(e){this.authFile=e??s(f(),`.ok`,`auth.yml`)}read(){if(!c(this.authFile))return{};try{return(0,p.parse)(u(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=o(this.authFile);c(t)||l(t,{recursive:!0,mode:448}),d(this.authFile,(0,p.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)}},v=class{backend=`keyring`;constructor(e,t){this.keychain=e,this.file=t}async get(e){let t=await this.keychain.get(e);if(t!=null)return t;let n=await this.file.get(e);if(n==null)return null;try{await this.keychain.set(e,n.login,n.token,{gitProtocol:n.gitProtocol,name:n.name,email:n.email}),await this.file.clear(e),process.stderr.write(`[auth] migrated ${e} credential from ~/.ok/auth.yml to the OS keychain\n`)}catch{}return n}set(e,t,n,r){return this.keychain.set(e,t,n,r)}async clear(e){await this.keychain.clear(e),await this.file.get(e)!=null&&await this.file.clear(e)}};async function y(e,t){try{let{Entry:n}=await import(`@napi-rs/keyring`);return new n(m,`__probe__`),process.stderr.write(`[auth] token storage: OS keychain
2
2
  `),h(()=>t?.onBackendSelected?.({backend:`keyring`})),new v(new g(t?.onKeychainRead),new _(e))}catch(n){let r=n instanceof Error?`${n.name}: ${n.message}`:String(n);return process.stderr.write(`[auth] token storage: file (~/.ok/auth.yml) — OS keychain unavailable: ${r}\n`),h(()=>t?.onBackendSelected?.({backend:`file`,reason:r})),new _(e)}}function b(e){let t=null;return function(){if(t)return t;let n=2e3;return t=(async()=>{let t=null,r=new Promise(r=>{t=setTimeout(()=>{process.stderr.write(`[auth] token storage: keyring init exceeded ${n}ms; falling back to file (~/.ok/auth.yml)\n`),r(new _(e))},n)});try{return await Promise.race([y(e),r])}catch{return new _(e)}finally{t!==null&&clearTimeout(t)}})(),t}}function x(e){let t=b(e);return{async get(e){let n=await(await t()).get(e);return n===null?null:{token:n.token}}}}function S(e){let t=b(e);return{backend:`file`,async get(e){return(await t()).get(e)},async set(e,n,r,i){return(await t()).set(e,n,r,i)},async clear(e){return(await t()).clear(e)}}}async function C(e,t){let n=[],r=new _(t);await r.get(e)!=null&&(await r.clear(e),n.push(`file`));let i;try{let{Entry:t}=await import(`@napi-rs/keyring`);new t(m,`__probe__`);let r,a=await new g(e=>{e.kind===`read-error`&&(r=e.error??`read-error`)}).get(e);if(r!==void 0)i=r;else if(a!=null)try{new t(m,e).deletePassword(),n.push(`keychain`)}catch(e){i=e instanceof Error?e.name:`delete-error`}}catch{}return{touched:n,keychainError:i}}const w=[`/opt/homebrew/bin/gh`,`/usr/local/bin/gh`,`/opt/local/bin/gh`,`/snap/bin/gh`,`/usr/bin/gh`],T={encoding:`utf-8`,stdio:[`ignore`,`pipe`,`pipe`],timeout:5e3,windowsHide:!0};function E(e,t={}){let n=t._exec??a,r=t._fileExists??c,i=[`auth`,`token`,...e?[`--hostname`,e]:[]],o=[`gh`,...w.filter(r)];for(let e of o)try{let t=n(e,i,T).toString().trim();if(t.length>0)return{available:!0,token:t}}catch{}return{available:!1}}function D(e,a,o){let s=r[e],c=e===`opencode`?n:t,l=[],u=s.projectConfigPath?.(a);u!==void 0&&l.push({scope:`project`,configPath:u});try{l.push({scope:`user`,configPath:s.configPath(a,o)})}catch{}for(let t of l){let n=i(s,a,o,t.configPath);if(n!==null&&c(n))return{editorId:e,scope:t.scope,configPath:t.configPath}}return null}export{x as a,y as i,E as n,S as o,C as r,D as t};
3
- //# sourceMappingURL=acp-harness-probe-DwJF1QrM.mjs.map
3
+ //# sourceMappingURL=acp-harness-probe-BPZnSRO1.mjs.map
package/dist/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{o as e}from"./chunk-DTipWd-i.mjs";import{$ as t,F as n,R as r,Rt as i,T as a,Tt as o,V as s,Y as c,a as l,at as u,b as d,d as f,dt as p,ft as m,it as h,mt as g,pt as _,r as v,rt as y,vt as b,x,xt as S}from"./sleep-DVOInM4H.mjs";import{$o as C,Ao as ee,Bo as w,C as te,Ca as ne,Co as re,Ha as ie,Io as ae,It as oe,Lt as se,Os as ce,Po as le,Q as ue,Sa as de,Yo as fe,co as pe,fo as T,it as me,ls as he,na as ge,oo as _e,so as ve,st as ye,ta as be,xa as xe}from"./src-Cb3i1kcm.mjs";import{$ as Se,$t as Ce,Bt as we,Cn as Te,Cr as Ee,Ei as De,En as Oe,Er as ke,F as Ae,Ft as je,I as Me,J as Ne,Jr as E,L as Pe,Mt as Fe,Nt as Ie,Or as Le,P as Re,Pt as ze,Q as Be,Qr as Ve,Rr as He,Sa as Ue,Ti as We,Tn as Ge,Tr as Ke,X as qe,Z as Je,_ as Ye,_i as D,a as Xe,at as Ze,ba as Qe,ct as $e,dt as et,en as tt,er as nt,f as rt,ft as it,gi as at,hi as ot,hn as st,ht as ct,lt,n as ut,ni as dt,nn as ft,oi as pt,ot as mt,p as ht,pt as gt,qt as _t,r as vt,rt as yt,si as bt,st as xt,t as St,ti as Ct,ut as wt,vi as Tt,vn as Et,w as Dt,wn as Ot,xa as kt,ya as At,zt as jt}from"./src-q9JjDIHN.mjs";import{F as Mt,O as Nt,P as Pt,k as O}from"./fs-traced-DVpoNaQJ.mjs";import{a as Ft}from"./git-handle-B9WUn7B2.mjs";import{S as It,_ as Lt,i as Rt,u as zt}from"./server-lock-CVlhIOaP.mjs";import{g as Bt,i as Vt,n as Ht,o as Ut,v as k}from"./write-project-skill-DPVCl9Kv.mjs";import{_ as Wt,c as Gt,d as Kt,f as qt,h as Jt,i as Yt,l as Xt,m as Zt,n as Qt,o as $t,p as en,r as tn,t as nn,u as rn,v as an,y as on}from"./src-Mfncsy21.mjs";import{c as sn,i as A,n as j,o as M,r as N,s as P,t as F}from"./colors-BsmVIwfM.mjs";import{i as cn,n as ln,o as un,r as dn}from"./acp-harness-probe-DwJF1QrM.mjs";import{n as fn,r as pn,t as mn}from"./dist-bundle-CFfKBclM.mjs";import{A as hn,B as gn,C as _n,D as vn,F as yn,I as bn,L as xn,M as Sn,N as Cn,P as wn,R as Tn,S as En,V as Dn,j as On,k as kn,u as An,w as jn,z as Mn}from"./init-8_iXriiz.mjs";import{n as Nn,t as Pn}from"./constants-C9EGLQ-u.mjs";import{C as Fn,D as In,E as Ln,T as Rn,h as zn,v as Bn,w as Vn}from"./start-BSLZXd-A.mjs";import{n as Hn,t as Un}from"./loader-CJqV3lQK.mjs";import{i as Wn}from"./skill-teardown-BVQqx1VE.mjs";import{t as Gn}from"./launch-json-removal-CXPn5A7N.mjs";import{n as Kn}from"./repair-skills-cQdbD3lz.mjs";import{execFile as qn,execFileSync as Jn,execSync as Yn,spawn as Xn,spawnSync as Zn}from"node:child_process";import{basename as Qn,dirname as I,isAbsolute as $n,join as L,relative as R,resolve as z,sep as er}from"node:path";import tr from"node:process";import{fileURLToPath as nr}from"node:url";import{accessSync as rr,appendFileSync as ir,closeSync as ar,constants as or,existsSync as B,lstatSync as sr,mkdirSync as cr,mkdtempSync as lr,openSync as ur,readFileSync as V,readdirSync as dr,realpathSync as fr,renameSync as pr,rmSync as mr,statSync as H,unlinkSync as U,writeFileSync as hr}from"node:fs";import{homedir as gr,platform as _r,tmpdir as vr}from"node:os";import{rm as yr}from"node:fs/promises";import{randomUUID as br}from"node:crypto";import{setTimeout as xr}from"node:timers/promises";import{promisify as Sr}from"node:util";import{createServer as Cr,request as wr}from"node:http";import{createInterface as Tr}from"node:readline/promises";import{connect as Er}from"node:net";const Dr={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 Or;(function(e){})(Or||={});function kr(e){return o(t,e)}async function Ar(e){let{projectDir:t,contentDir:n,baseConfig:r,targetPath:i,fix:a=!1}=e,o=[],s=He({projectDir:t,contentDir:n}),c=new Set,l=e=>{c.has(e)||(c.add(e),o.push(e))},u=ke(t,r,l),d=new Map,f=e=>{let t=I(e),r=d.get(t);if(r)return r;let i=Ke(u,Le(n,e,l));return d.set(t,i),i},p=[],m=jr(i,n);m.kind===`file`?p.push(R(n,m.path)):h(m.path);function h(e){let t;try{t=dr(e,{withFileTypes:!0})}catch(t){o.push(`could not read directory ${R(n,e)||`.`}: ${Nr(t)}`);return}for(let r of t){if(r.name.startsWith(`.`))continue;let t=L(e,r.name),i=R(n,t);if(r.isDirectory()){if(s.isDirExcluded(i))continue;h(t)}else if(r.isFile()){if(!Mr(r.name)||s.isExcluded(i))continue;p.push(i)}}}p.sort();let g=[],_=0,v=0,y=0;for(let e of p){let t=L(n,e),r;try{r=V(t,`utf-8`)}catch(t){o.push(`could not read ${e}: ${Nr(t)}`);continue}let i=f(e),s=!1;if(a&&i.enabled){let n=be(r,i);if(n!==r){let i=`${t}.tmp.${process.pid}.${Date.now()}`;try{hr(i,n,`utf-8`),pr(i,t),r=n,s=!0,y++}catch(t){try{U(i)}catch{}o.push(`could not write fix to ${e}: ${Nr(t)}`)}}}let c=await ge(r,i,e);for(let e of c)e.severity===`error`?_++:v++;g.push({file:e,diagnostics:c,fixed:s})}return{contentDir:n,files:g,warnings:o,fileCount:p.length,errorCount:_,warningCount:v,fixedCount:y}}function jr(e,t){if(e===void 0||e===``)return{kind:`dir`,path:t};let n=$n(e)?e:z(t,e);try{if(H(n).isFile())return{kind:`file`,path:n}}catch{}return{kind:`dir`,path:n}}function Mr(e){let t=e.toLowerCase();return C.some(e=>t.endsWith(e))}function Nr(e){return e instanceof Error?e.message:String(e)}function Pr(e){return new k(`lint`).description(`Lint markdown content (headless) — whole project, a folder, or a single file`).argument(`[path]`,`Folder or file to lint, relative to where you run the command`).option(`--json`,`Emit structured JSON instead of formatted text`).option(`--fix`,`Auto-fix fixable issues in place (markdownlint rules only)`).option(`--errors-only`,`Exit non-zero only on error-severity problems (findings are warning-severity unless your .markdownlint.* assigns a rule "error")`).action(async(t,n)=>{let r=e(),i=process.cwd(),a=at(r,i),o=t===void 0?void 0:Fr(t,Wt()),s=r.contentRules,c=await Ar({projectDir:i,contentDir:a,baseConfig:s?de(s):ne,targetPath:o,fix:n.fix===!0});n.json===!0?process.stdout.write(`${JSON.stringify(c,null,2)}\n`):process.stdout.write(`${Rr(c)}\n`),(n.errorsOnly===!0?c.errorCount>0:Ir(c))&&(process.exitCode=1)})}function Fr(e,t){return z(t,e)}function Ir(e){return e.errorCount>0||e.warningCount>0}function Lr(e){let t=[F(e.file)+(e.fixed?j(` (fixed)`):``)];for(let n of e.diagnostics){let e=j(`${n.range.start.line+1}:${n.range.start.character+1}`.padEnd(7)),r=n.severity===`error`?N(`error `):P(`warning`);t.push(` ${e} ${r} ${n.message} ${j(`${n.source}/${n.code}`)}`)}return t.push(``),t}function Rr(e){let t=[];for(let n of e.files)n.diagnostics.length>0&&t.push(...Lr(n));for(let n of e.warnings)t.push(P(`! ${n}`));e.warnings.length>0&&t.push(``);let n=e.errorCount+e.warningCount;if(n===0)t.push(M(`✓ No problems in ${e.fileCount} file${e.fileCount===1?``:`s`}.`));else{let r=[`${n} problem${n===1?``:`s`}`];r.push(`${e.errorCount} error${e.errorCount===1?``:`s`}`),r.push(`${e.warningCount} warning${e.warningCount===1?``:`s`}`),t.push(`${N(r[0]??``)} (${r[1]}, ${r[2]}) across ${e.fileCount} file${e.fileCount===1?``:`s`}.`)}return e.fixedCount>0&&t.push(j(`Fixed ${e.fixedCount} file${e.fixedCount===1?``:`s`}.`)),t.join(`
2
+ import{o as e}from"./chunk-DTipWd-i.mjs";import{$ as t,F as n,R as r,Rt as i,T as a,Tt as o,V as s,Y as c,a as l,at as u,b as d,d as f,dt as p,ft as m,it as h,mt as g,pt as _,r as v,rt as y,vt as b,x,xt as S}from"./sleep-DVOInM4H.mjs";import{$o as C,Ao as ee,Bo as w,C as te,Ca as ne,Co as re,Ha as ie,Io as ae,It as oe,Lt as se,Os as ce,Po as le,Q as ue,Sa as de,Yo as fe,co as pe,fo as T,it as me,ls as he,na as ge,oo as _e,so as ve,st as ye,ta as be,xa as xe}from"./src-BgYGdjBz.mjs";import{$ as Se,$t as Ce,Bt as we,Cn as Te,Cr as Ee,Ei as De,En as Oe,Er as ke,F as Ae,Ft as je,I as Me,J as Ne,Jr as E,L as Pe,Mt as Fe,Nt as Ie,Or as Le,P as Re,Pt as ze,Q as Be,Qr as Ve,Rr as He,Sa as Ue,Ti as We,Tn as Ge,Tr as Ke,X as qe,Z as Je,_ as Ye,_i as D,a as Xe,at as Ze,ba as Qe,ct as $e,dt as et,en as tt,er as nt,f as rt,ft as it,gi as at,hi as ot,hn as st,ht as ct,lt,n as ut,ni as dt,nn as ft,oi as pt,ot as mt,p as ht,pt as gt,qt as _t,r as vt,rt as yt,si as bt,st as xt,t as St,ti as Ct,ut as wt,vi as Tt,vn as Et,w as Dt,wn as Ot,xa as kt,ya as At,zt as jt}from"./src-DexEZ0uX.mjs";import{F as Mt,O as Nt,P as Pt,k as O}from"./fs-traced-DVpoNaQJ.mjs";import{a as Ft}from"./git-handle-Dxwd5VZx.mjs";import{S as It,_ as Lt,i as Rt,u as zt}from"./server-lock-_SrmIVon.mjs";import{g as Bt,i as Vt,n as Ht,o as Ut,v as k}from"./write-project-skill-DirISflr.mjs";import{_ as Wt,c as Gt,d as Kt,f as qt,h as Jt,i as Yt,l as Xt,m as Zt,n as Qt,o as $t,p as en,r as tn,t as nn,u as rn,v as an,y as on}from"./src-DBqW6hfs.mjs";import{c as sn,i as A,n as j,o as M,r as N,s as P,t as F}from"./colors-BsmVIwfM.mjs";import{i as cn,n as ln,o as un,r as dn}from"./acp-harness-probe-BPZnSRO1.mjs";import{n as fn,r as pn,t as mn}from"./dist-bundle-CFfKBclM.mjs";import{A as hn,B as gn,C as _n,D as vn,F as yn,I as bn,L as xn,M as Sn,N as Cn,P as wn,R as Tn,S as En,V as Dn,j as On,k as kn,u as An,w as jn,z as Mn}from"./init-Ro461Kb_.mjs";import{n as Nn,t as Pn}from"./constants-C5tLcIHw.mjs";import{C as Fn,D as In,E as Ln,T as Rn,h as zn,v as Bn,w as Vn}from"./start-DdmHbvgs.mjs";import{n as Hn,t as Un}from"./loader-BINQ4tTK.mjs";import{i as Wn}from"./skill-teardown-N2at_ImB.mjs";import{t as Gn}from"./launch-json-removal-w-1VYpF4.mjs";import{n as Kn}from"./repair-skills-Dz6gjuVz.mjs";import{execFile as qn,execFileSync as Jn,execSync as Yn,spawn as Xn,spawnSync as Zn}from"node:child_process";import{basename as Qn,dirname as I,isAbsolute as $n,join as L,relative as R,resolve as z,sep as er}from"node:path";import tr from"node:process";import{fileURLToPath as nr}from"node:url";import{accessSync as rr,appendFileSync as ir,closeSync as ar,constants as or,existsSync as B,lstatSync as sr,mkdirSync as cr,mkdtempSync as lr,openSync as ur,readFileSync as V,readdirSync as dr,realpathSync as fr,renameSync as pr,rmSync as mr,statSync as H,unlinkSync as U,writeFileSync as hr}from"node:fs";import{homedir as gr,platform as _r,tmpdir as vr}from"node:os";import{rm as yr}from"node:fs/promises";import{randomUUID as br}from"node:crypto";import{setTimeout as xr}from"node:timers/promises";import{promisify as Sr}from"node:util";import{createServer as Cr,request as wr}from"node:http";import{createInterface as Tr}from"node:readline/promises";import{connect as Er}from"node:net";const Dr={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 Or;(function(e){})(Or||={});function kr(e){return o(t,e)}async function Ar(e){let{projectDir:t,contentDir:n,baseConfig:r,targetPath:i,fix:a=!1}=e,o=[],s=He({projectDir:t,contentDir:n}),c=new Set,l=e=>{c.has(e)||(c.add(e),o.push(e))},u=ke(t,r,l),d=new Map,f=e=>{let t=I(e),r=d.get(t);if(r)return r;let i=Ke(u,Le(n,e,l));return d.set(t,i),i},p=[],m=jr(i,n);m.kind===`file`?p.push(R(n,m.path)):h(m.path);function h(e){let t;try{t=dr(e,{withFileTypes:!0})}catch(t){o.push(`could not read directory ${R(n,e)||`.`}: ${Nr(t)}`);return}for(let r of t){if(r.name.startsWith(`.`))continue;let t=L(e,r.name),i=R(n,t);if(r.isDirectory()){if(s.isDirExcluded(i))continue;h(t)}else if(r.isFile()){if(!Mr(r.name)||s.isExcluded(i))continue;p.push(i)}}}p.sort();let g=[],_=0,v=0,y=0;for(let e of p){let t=L(n,e),r;try{r=V(t,`utf-8`)}catch(t){o.push(`could not read ${e}: ${Nr(t)}`);continue}let i=f(e),s=!1;if(a&&i.enabled){let n=be(r,i);if(n!==r){let i=`${t}.tmp.${process.pid}.${Date.now()}`;try{hr(i,n,`utf-8`),pr(i,t),r=n,s=!0,y++}catch(t){try{U(i)}catch{}o.push(`could not write fix to ${e}: ${Nr(t)}`)}}}let c=await ge(r,i,e);for(let e of c)e.severity===`error`?_++:v++;g.push({file:e,diagnostics:c,fixed:s})}return{contentDir:n,files:g,warnings:o,fileCount:p.length,errorCount:_,warningCount:v,fixedCount:y}}function jr(e,t){if(e===void 0||e===``)return{kind:`dir`,path:t};let n=$n(e)?e:z(t,e);try{if(H(n).isFile())return{kind:`file`,path:n}}catch{}return{kind:`dir`,path:n}}function Mr(e){let t=e.toLowerCase();return C.some(e=>t.endsWith(e))}function Nr(e){return e instanceof Error?e.message:String(e)}function Pr(e){return new k(`lint`).description(`Lint markdown content (headless) — whole project, a folder, or a single file`).argument(`[path]`,`Folder or file to lint, relative to where you run the command`).option(`--json`,`Emit structured JSON instead of formatted text`).option(`--fix`,`Auto-fix fixable issues in place (markdownlint rules only)`).option(`--errors-only`,`Exit non-zero only on error-severity problems (findings are warning-severity unless your .markdownlint.* assigns a rule "error")`).action(async(t,n)=>{let r=e(),i=process.cwd(),a=at(r,i),o=t===void 0?void 0:Fr(t,Wt()),s=r.contentRules,c=await Ar({projectDir:i,contentDir:a,baseConfig:s?de(s):ne,targetPath:o,fix:n.fix===!0});n.json===!0?process.stdout.write(`${JSON.stringify(c,null,2)}\n`):process.stdout.write(`${Rr(c)}\n`),(n.errorsOnly===!0?c.errorCount>0:Ir(c))&&(process.exitCode=1)})}function Fr(e,t){return z(t,e)}function Ir(e){return e.errorCount>0||e.warningCount>0}function Lr(e){let t=[F(e.file)+(e.fixed?j(` (fixed)`):``)];for(let n of e.diagnostics){let e=j(`${n.range.start.line+1}:${n.range.start.character+1}`.padEnd(7)),r=n.severity===`error`?N(`error `):P(`warning`);t.push(` ${e} ${r} ${n.message} ${j(`${n.source}/${n.code}`)}`)}return t.push(``),t}function Rr(e){let t=[];for(let n of e.files)n.diagnostics.length>0&&t.push(...Lr(n));for(let n of e.warnings)t.push(P(`! ${n}`));e.warnings.length>0&&t.push(``);let n=e.errorCount+e.warningCount;if(n===0)t.push(M(`✓ No problems in ${e.fileCount} file${e.fileCount===1?``:`s`}.`));else{let r=[`${n} problem${n===1?``:`s`}`];r.push(`${e.errorCount} error${e.errorCount===1?``:`s`}`),r.push(`${e.warningCount} warning${e.warningCount===1?``:`s`}`),t.push(`${N(r[0]??``)} (${r[1]}, ${r[2]}) across ${e.fileCount} file${e.fileCount===1?``:`s`}.`)}return e.fixedCount>0&&t.push(j(`Fixed ${e.fixedCount} file${e.fixedCount===1?``:`s`}.`)),t.join(`
3
3
  `)}const zr={out:e=>process.stdout.write(`${e}\n`),err:e=>process.stderr.write(`${e}\n`)};function Br(e){return new k(`audit`).description(`Unified validation audit (markdown lint + broken internal links) via the running project server`).argument(`[path]`,`Folder or file to audit, relative to where you run the command`).option(`--json`,`Emit the full structured JSON response instead of formatted text`).option(`--errors-only`,`Exit non-zero only on error-severity problems (broken links default to warnings; the project's validation.links setting can raise them to errors)`).action(async(t,n)=>{let r=await Vr(t,n,e(),process.cwd(),Wt());r!==0&&(process.exitCode=r)})}async function Vr(e,t,n,r,i,a=zr){let o=at(n,r),s;if(e!==void 0){let t=Hr(e,i,o);if(t===null)return a.err(`Path is outside the content directory (${o}): ${e}`),1;s=t===``?void 0:t}let c=Rt(D(r));if(!c||c.port<=0)return a.err("OpenKnowledge server is not running — the links validator needs the live backlink index. Start it with `ok start` (or open OK Desktop) and re-run. For headless lint-only checks, use `ok lint`."),1;let l=s===void 0?``:`?path=${encodeURIComponent(s)}`,u;try{u=await fetch(`http://127.0.0.1:${c.port}/api/audit${l}`,{headers:ce({kind:`cli`,runtimeVersion:Lt})})}catch(e){return a.err(`Could not reach the OpenKnowledge server on port ${c.port}: ${String(e)}`),1}if(!u.ok){let e=await u.json().catch(()=>({}));return a.err(`Audit failed: ${e.title??e.error??e.message??`server responded with ${u.status}`}`),1}let d=xe.safeParse(await u.json().catch(()=>null));if(!d.success){let e=d.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`; `);return a.err(`Audit failed: unexpected response shape from the server. Schema issues: ${e}`),1}let f=d.data;return t.json===!0?a.out(JSON.stringify(f,null,2)):a.out(Rr(Ur(f))),+(t.errorsOnly===!0?f.errorCount>0:f.errorCount+f.warningCount>0)}function Hr(e,t,n){let r=R(n,z(t,e));return r===``?``:r.startsWith(`..`)||$n(r)?null:r.split(er).join(`/`)}function Ur(e){return{files:e.files.map(e=>({file:e.file,fixed:!1,diagnostics:e.diagnostics})),warnings:e.warnings,fileCount:e.fileCount,errorCount:e.errorCount,warningCount:e.warningCount,fixedCount:0}}async function Wr(e,t,n,r){let i=Gr(await Kr(e)).host??``,a=e=>e.replace(/[\r\n]/g,``);if(!i)return r?.log?.warn({outcome:`no-host`,backend:n.backend},`[auth] git-credential get`),1;let o=process.env.OK_GH_TOKEN,s=process.env.OK_GH_TOKEN_HOST;if(o&&s===i)return r?.log?.debug({host:i,outcome:`gh-env-token`,backend:n.backend},`[auth] git-credential get`),t.write(`username=x-access-token\npassword=${a(o)}\n`),0;let c=await n.get(i),l=r?.getDiag?.(),u=c==null?l?.kind??`absent`:`found`;if(r?.log){let e={host:i,outcome:u,backend:n.backend,...l?.error?{keychainError:l.error}:{}};u===`found`?r.log.debug(e,`[auth] git-credential get`):r.log.warn(e,`[auth] git-credential get`)}return c==null?1:(t.write(`username=${a(c.login)}\npassword=${a(c.token)}\n`),0)}function Gr(e){let t={};for(let n of e.split(`
4
4
  `)){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 Kr(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 qr(e,t){let n=new k(`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 n=t?.();try{let t,r=await e({onKeychainRead:e=>{t=e},onBackendSelected:e=>{e.backend===`file`&&e.reason&&n?.warn({backend:`file`,reason:e.reason},`[auth] token storage fallback`)}}),i=await Wr(process.stdin,process.stdout,r,{log:n,getDiag:()=>t});await ht(n),process.exit(i)}catch(e){n?.error({err:e},`[auth] git-credential get: unexpected error`),await ht(n),process.exit(1)}}),n}function Jr(e){let t=e.endpoint.DEFAULTS;return/^https:\/\/(api\.)?github\.com$/.test(t.baseUrl)?`https://github.com`:t.baseUrl.replace(`/api/v3`,``)}async function Yr(e,t,n){let r={baseUrl:Jr(e),headers:{accept:`application/json`},...n},i=await e(t,r);if(`error`in i.data){let n=new fn(`${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 Xr(e){let t=e.request||mn,n={client_id:e.clientId};return`scopes`in e&&Array.isArray(e.scopes)&&(n.scope=e.scopes.join(` `)),Yr(t,`POST /login/device/code`,n)}async function Zr(e){let t=await Yr(e.request||mn,`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=Qr(e,t.data.expires_in),n.refreshTokenExpiresAt=Qr(e,t.data.refresh_token_expires_in)}delete n.scopes}return{...t,authentication:n}}function Qr(e,t){return new Date(e+t*1e3).toISOString()}async function $r(e,t){let n=ei(e,t.auth);if(n)return n;let{data:r}=await Xr({clientType:e.clientType,clientId:e.clientId,request:t.request||e.request,scopes:t.auth.scopes||e.scopes});await e.onVerification(r);let i=await ni(t.request||e.request,e.clientId,e.clientType,r);return e.authentication=i,i}function ei(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 ti(e){await new Promise(t=>setTimeout(t,e*1e3))}async function ni(e,t,n,r){try{let i={clientId:t,request:e,code:r.device_code},{authentication:a}=n===`oauth-app`?await Zr({...i,clientType:`oauth-app`}):await Zr({...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 ti(r.interval),ni(e,t,n,r);if(a===`slow_down`)return await ti(r.interval+7),ni(e,t,n,r);throw i}}async function ri(e,t){return $r(e,{auth:t})}async function ii(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 $r(e,{request:t,auth:{type:`oauth`}});return i.headers.authorization=`token ${a}`,t(i)}var ai=`0.0.0-development`;function oi(e){let t=e.request||mn.defaults({headers:{"user-agent":`octokit-auth-oauth-device.js/${ai} ${pn()}`}}),{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(ri.bind(null,i),{hook:ii.bind(null,i)})}async function si(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=oi({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-BT5p_5Yl.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??[]}}function ci(){return process.env.OPEN_KNOWLEDGE_GITHUB_CLIENT_ID??`Ov23liqlSd0V1MwR6rhI`}function W(e){let t=e.toLowerCase().replace(/:\d+$/,``);w.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 li(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function ui(e,t,n=si){let r=ci(),{host:i,json:a}=e;W(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?li(!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?li(!0,{type:`complete`,host:i,login:s}):process.stderr.write(`✓ Logged in as ${s} on ${i}\n`)}function di(e){return new k(`login`).description(`Authenticate with GitHub via Device Flow`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname (default: workspace origin host)`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{let n=t.host??Ee(process.cwd()),r=await e();await ui({...t,host:n},r)})}const fi={style:{maskedText:`[input is masked]`}};var pi=yn((e,t)=>{let{validate:n=()=>!0}=e,r=Mn(fi,e.theme),[i,a]=gn(`idle`),[o,s]=gn(),[c,l]=gn(``),u=Tn({status:i,theme:r});xn(async(e,r)=>{if(i===`idle`)if(Dn(e)){let e=c;a(`loading`);let i=await n(e);i===!0?(l(e),a(`done`),t(e)):(r.write(c),s(i||`You must provide a valid value`),a(`idle`))}else l(r.line),s(void 0)});let d=r.style.message(e.message,i),f=``,p;e.mask?f=(typeof e.mask==`string`?e.mask:`*`).repeat(c.length):i!==`done`&&(p=`${r.style.help(r.style.maskedText)}${bn}`),i===`done`&&(f=r.style.answer(f));let m=``;return o&&(m=r.style.error(o)),[[u,d,e.mask?f:p].join(` `),m]});function mi(e,t,n,r){if(typeof n!=`function`)throw Error(`method for before hook must be a function`);return r||={},Array.isArray(t)?t.reverse().reduce((t,n)=>mi.bind(null,e,n,t,r),n)():Promise.resolve().then(()=>e.registry[t]?e.registry[t].reduce((e,t)=>t.hook.bind(null,e,r),n)():n(r))}function hi(e,t,n,r){let i=r;e.registry[n]||(e.registry[n]=[]),t===`before`&&(r=(e,t)=>Promise.resolve().then(i.bind(null,t)).then(e.bind(null,t))),t===`after`&&(r=(e,t)=>{let n;return Promise.resolve().then(e.bind(null,t)).then(e=>(n=e,i(n,t))).then(()=>n)}),t===`error`&&(r=(e,t)=>Promise.resolve().then(e.bind(null,t)).catch(e=>i(e,t))),e.registry[n].push({hook:r,orig:i})}function gi(e,t,n){if(!e.registry[t])return;let r=e.registry[t].map(e=>e.orig).indexOf(n);r!==-1&&e.registry[t].splice(r,1)}const _i=Function.bind,vi=_i.bind(_i);function yi(e,t,n){let r=vi(gi,null).apply(null,n?[t,n]:[t]);e.api={remove:r},e.remove=r,[`before`,`error`,`after`,`wrap`].forEach(r=>{let i=n?[t,r,n]:[t,r];e[r]=e.api[r]=vi(hi,null).apply(null,i)})}function bi(){let e=Symbol(`Singular`),t={registry:{}},n=mi.bind(null,t,e);return yi(n,t,e),n}function xi(){let e={registry:{}},t=mi.bind(null,e);return yi(t,e),t}var Si={Singular:bi,Collection:xi},Ci=`0.0.0-development`;function wi(e){return`Request failed due to following response errors:
5
5
  `+e.errors.map(e=>` - ${e.message}`).join(`
@@ -8,9 +8,9 @@ import{o as e}from"./chunk-DTipWd-i.mjs";import{$ as t,F as n,R as r,Rt as i,T a
8
8
  `),n.includes(`file`)&&process.stderr.write(` cleared from ~/.ok/auth.yml
9
9
  `)}function va(){return new k(`signout`).description(`Remove stored credentials`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname (default: workspace origin host)`).action(async e=>{let t=e.host??Ee(process.cwd());await _a({...e,host:t})})}async function ya(e,t,n=ln){let r=n(e);if(r.available&&r.token)return{tier:`A`,token:r.token};let i=await t.get(e);return i==null?{tier:`none`}:{tier:i.gitProtocol===`ssh`?`C`:`B`,token:i.token}}function ba(e,t,n){return{type:`status`,host:e,backend:t,...n}}async function xa(e,t){let{host:n,json:r}=e;W(n);let i=t.backend,a=await ya(n,t);a.tier===`none`&&(r?process.stdout.write(`${JSON.stringify(ba(n,i,{authenticated:!1}))}\n`):process.stderr.write(`Not logged in to ${n}\n`),process.exit(1));let o=n===`github.com`?void 0:`https://${n}/api/v3`,s=new sa({auth:a.token,...o?{baseUrl:o}:{}});try{let{data:e}=await s.users.getAuthenticated();r?process.stdout.write(`${JSON.stringify(ba(n,i,{authenticated:!0,tier:a.tier,login:e.login,name:e.name,email:e.email}))}\n`):process.stderr.write(`✓ Logged in as ${e.login} on ${n}\n`)}catch(e){let t=ua(e,n);r?process.stdout.write(`${JSON.stringify(ba(n,i,{authenticated:!1,error:t.message}))}\n`):process.stderr.write(`✗ ${t.message}\n`),process.exit(1)}}function Sa(e){return new k(`status`).description(`Show authentication status`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname (default: workspace origin host)`).option(`--json`,`Output JSON`,!1).action(async t=>{let n=t.host??Ee(process.cwd());await xa({...t,host:n},await e())})}function Ca(e){let t=new k(`auth`);t.description(`GitHub authentication management`);let n=e=>cn(void 0,e);return t.addCommand(di(n)),t.addCommand(Sa(n)),t.addCommand(ga(n)),t.addCommand(va()),t.addCommand(pa(n)),t.addCommand(qr(n,e)),t}function wa(){return new k(`bug-report`).description(`Generate a diagnostic bundle for bug reporting`).option(`--reveal`,`Reveal the bundle in Finder (default: true)`,!0).option(`--no-reveal`,`Do not reveal the bundle in Finder`).action(async e=>{try{let{zipPath:t,summary:n}=await qt({level:`standard`,projectDir:process.cwd(),redact:!0,outputPath:Jt(),logger:Hf()});if(process.stdout.write(`${t}\n`),n.redactedLineCount>0&&process.stderr.write(`ok bug-report: ${n.redactedLineCount} line(s) auto-redacted across ${n.redactions.length} file(s)\n`),e.reveal&&_r()===`darwin`)try{In(`/usr/bin/open`,[`-R`,t])}catch{}}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`ok bug-report: failed — ${t}\n`),process.exitCode=1}})}function Ta(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 Ea(e){let t=e.inspect??(t=>Kt(e.lockDir,t)),n=e.unlink??(e=>U(e)),r=e.log??(e=>console.log(e)),i=e.error??(e=>console.error(e)),a=Ta(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 Da(e){return new k(`clean`).description(`Prune stale / corrupt open-knowledge lock files (never touches live locks)`).action(()=>{e(),Ea({lockDir:D(process.cwd())}).failed.length>0&&(process.exitCode=1)})}function Oa(e){return`credential.helper=!${e.map(T).join(` `)} auth git-credential`}async function ka(e,t,n={},r=ln){let i=[`credential.helper=`,Oa(n.selfCliArgs??[`open-knowledge`])];if(!n.skipGhDetect){let t=r(e);if(t.available&&t.token)return{tier:`A`,gitConfig:i,relayToken:{token:t.token,host:e}}}let a=await t.get(e);return a==null?{tier:`none`,gitConfig:[]}:{tier:a.gitProtocol===`ssh`?`C`:`B`,gitConfig:i}}async function Aa(e,t,n=fetch){let r=new AbortController,i=setTimeout(()=>r.abort(),5e3);try{return(await n(`https://api.github.com/repos/${encodeURIComponent(e)}/${encodeURIComponent(t)}`,{signal:r.signal,headers:{"User-Agent":`open-knowledge-cli`,Accept:`application/vnd.github+json`}})).status===200}catch{return!1}finally{clearTimeout(i)}}const ja=[[`count`,0,10],[`compress`,10,20],[`receiv`,20,60],[`resolv`,60,100]];function Ma(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 ja)if(n.includes(e))return{stage:t[1],pct:Math.round(i+r/100*(a-i))};return null}function K(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}function Na(e=process.env){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t.GIT_TERMINAL_PROMPT=`0`,t.LANG=`C`,t.LC_ALL=`C`,t}function Pa(e,t=process.env){let n=Na(t);return e.relayToken?(n.OK_GH_TOKEN=e.relayToken.token,n.OK_GH_TOKEN_HOST=e.relayToken.host):(delete n.OK_GH_TOKEN,delete n.OK_GH_TOKEN_HOST),n}function Fa(e=process.argv,t=process.execPath){let n=e[1];return n?[t,n]:[t]}function Ia(e){return typeof e!=`string`||e.length===0?[`--progress`]:[`--progress`,`-b`,e]}const La=ve;async function Ra(e){try{return await e.clone(Ia(e.branch)),{fellBack:!1}}catch(t){if(e.branch!==null&&La(t))return e.onFallback(e.branch),await e.clone(Ia(null)),{fellBack:!0};throw t}}function za(e,t){return{baseDir:e,config:t,unsafe:{allowUnsafeCredentialHelper:!0,allowUnsafePager:!0,allowUnsafeSshCommand:!0,allowUnsafeAskPass:!0,allowUnsafeEditor:!0}}}function Ba(e,t,n){return e===`https`&&t===`github.com`&&n}function Va(e,t){let n=`${t.owner}/${t.name}`;return e===n||e===`${n}.git`?`https://${t.hostname}/${n}`:e}async function Ha(e,t,n,r=process.cwd()){let i=rn(e);if(!i)throw Error(`Invalid git URL: ${e}`);let a=Va(e,i),o=t.dir?z(r,t.dir):z(r,i.name);if(B(o)&&dr(o).length>0)throw Error(`Target directory is not empty: ${o}`);ft();let s=un(),c=i.protocol===`https`&&i.hostname===`github.com`?await Aa(i.owner,i.name):!1,l=Ba(i.protocol,i.hostname,c)?{tier:`none`,gitConfig:[]}:await ka(i.hostname,s,{selfCliArgs:Fa()}),u=Pa(l),d=Ft(za(r,l.gitConfig)).env(u),f=-1;d.outputHandler((e,n,r)=>{r.on(`data`,e=>{let n=e.toString(`utf-8`);for(let e of n.split(`
10
10
  `)){let n=Ma(e);n&&n.pct!==f&&(f=n.pct,K(t.json,{type:`progress`,pct:n.pct,stage:n.stage}),t.json||process.stderr.write(`\r Cloning ${n.pct}%`))}})}),await Ra({branch:typeof t.branch==`string`&&t.branch.length>0?t.branch:null,clone:e=>d.clone(a,o,e),onFallback:e=>{K(t.json,{type:`branch-fallback`,branch:e}),t.json||process.stderr.write(`\n Branch '${e}' not found upstream — cloning default branch instead.\n`)}}),t.json||process.stderr.write(`
11
- `);try{let{runInit:e}=await import(`./init-D5SAyEIp.mjs`),n=await e({cwd:o,mcp:!1});if(n.contentUpdated.length>0){let e=`auto-init: updated ${n.contentUpdated.join(`, `)}`;t.json?K(!0,{type:`warning`,message:e}):process.stderr.write(` ${e}\n`)}}catch(e){let n=e instanceof Error?e.message:String(e);t.json?K(!0,{type:`warning`,message:`auto-init: ${n}`}):process.stderr.write(` auto-init: ${n}\n`)}try{Ua(o)}catch(e){let n=e instanceof Error?e.message:String(e);t.json?K(!0,{type:`warning`,message:`git-exclude: ${n}`}):process.stderr.write(` git-exclude: ${n}\n`)}return o}function Ua(e){let t=vn(e,[`.ok/`]);return t.kind===`no-exclude`?`no-exclude`:t.kind===`refused-tracked`?`already-present`:t.appended.length>0?`appended`:`already-present`}const Wa=/^[A-Za-z0-9._/:@-]+$/;function Ga(e){return Wa.test(e)?e:T(e)}function Ka(e,t){let n=typeof t==`string`&&t.length>0?` -b ${Ga(t)}`:``;return`ok clone ${Ga(e)}${n}`}function qa(e){let t=_e(e.error);if(t.kind!==`auth`)return null;if(pe(t)){let t=Ka(e.url,e.branch);return[`✗ Couldn't clone ${e.url} — authentication is required.`,``,` To fix:`,` 1. Run: ok auth login`,` 2. Then re-run: ${t}`].join(`
11
+ `);try{let{runInit:e}=await import(`./init-D2t_tZL7.mjs`),n=await e({cwd:o,mcp:!1});if(n.contentUpdated.length>0){let e=`auto-init: updated ${n.contentUpdated.join(`, `)}`;t.json?K(!0,{type:`warning`,message:e}):process.stderr.write(` ${e}\n`)}}catch(e){let n=e instanceof Error?e.message:String(e);t.json?K(!0,{type:`warning`,message:`auto-init: ${n}`}):process.stderr.write(` auto-init: ${n}\n`)}try{Ua(o)}catch(e){let n=e instanceof Error?e.message:String(e);t.json?K(!0,{type:`warning`,message:`git-exclude: ${n}`}):process.stderr.write(` git-exclude: ${n}\n`)}return o}function Ua(e){let t=vn(e,[`.ok/`]);return t.kind===`no-exclude`?`no-exclude`:t.kind===`refused-tracked`?`already-present`:t.appended.length>0?`appended`:`already-present`}const Wa=/^[A-Za-z0-9._/:@-]+$/;function Ga(e){return Wa.test(e)?e:T(e)}function Ka(e,t){let n=typeof t==`string`&&t.length>0?` -b ${Ga(t)}`:``;return`ok clone ${Ga(e)}${n}`}function qa(e){let t=_e(e.error);if(t.kind!==`auth`)return null;if(pe(t)){let t=Ka(e.url,e.branch);return[`✗ Couldn't clone ${e.url} — authentication is required.`,``,` To fix:`,` 1. Run: ok auth login`,` 2. Then re-run: ${t}`].join(`
12
12
  `)}if(t.subclass===`403`){let t=typeof e.principal==`string`&&e.principal.length>0?` (signed in as @${e.principal} — may lack access)`:``;return`✗ Access denied when cloning ${e.url}${t}. Check that your account has access to the repository.`}return t.subclass===`ssh-auth`?`✗ Couldn't clone ${e.url} over SSH — authentication failed. Check that your SSH key is added to your GitHub account and the host key is trusted, or clone the HTTPS URL instead.`:["✗ Your GitHub token is missing required OAuth scopes — likely the `repo` scope.",``,` To fix:`," 1. Create a token with `repo` scope at https://github.com/settings/tokens",` 2. Run: ok auth pat`,` 3. Then re-run: ${Ka(e.url,e.branch)}`].join(`
13
- `)}function Ja(e){let t=e.error instanceof Error?e.error.message:String(e.error);if(e.json){e.emit({type:`error`,message:t});return}let n=qa({error:e.error,url:e.url,branch:e.branch,principal:e.principal});e.printStderr(`${n??`✗ ${t}`}\n`)}async function Ya(e,t){let n=(await e.get(t))?.login;return n&&n!==`unknown`?n:null}async function Xa(e){let t=_e(e.error),n=null;if(!e.json&&t.kind===`auth`&&t.subclass===`403`){let t=rn(e.url);t&&(n=await(e.resolvePrincipal??(e=>Ya(un(),e)))(t.hostname))}Ja({error:e.error,url:e.url,branch:e.branch,json:e.json,principal:n,emit:e.emit,printStderr:e.printStderr})}function Za(e){return new k(`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).option(`-b, --branch <branch>`,`Branch to check out (falls back to default if missing)`).action(async(t,n,r)=>{let i=e();try{let a=await Ha(t,{json:r.json,dir:n,branch:r.branch??null},i);if(r.json)K(!0,{type:`complete`,dir:a});else{process.stderr.write(`✓ Cloned to ${a}\n`),process.chdir(a);let{startCommand:t}=await import(`./start-CJ3wdpkC.mjs`);await t(e).parseAsync([],{from:`user`})}}catch(e){if(e instanceof Ce||e instanceof tt){r.json?K(!0,{type:`error`,message:e.message}):process.stderr.write(`${e.message}\n`),process.exitCode=78;return}await Xa({error:e,url:t,branch:r.branch??null,json:r.json,emit:e=>K(!0,e),printStderr:e=>process.stderr.write(e)}),process.exitCode=1}})}var Qa=c();const $a=[[`sync`],[`persistence`,`debounceMs`],[`persistence`,`maxDebounceMs`],[`server`,`port`],...l.map(e=>e.path)];function eo(e){return Mt({absPath:Nt(`project-local`,e),sideline:!1}).diagnostics}function to(e={}){let t=e.log??(e=>console.error(e)),n=e.error??(e=>console.error(e)),r=e.loadConfigFn??Hn;try{let{sources:n,diagnostics:i,sidelined:a}=r(e.cwd),o=(e.readProjectLocalFn??eo)(e.cwd??process.cwd()),s=[...i,...o],c=n.length===0?`defaults only`:n.join(`, `),l=s.filter(e=>e.code!==`REMOVED_KEY`);l.length===0?t(`✓ Configuration valid (sources: ${c})`):t(`! Configuration loaded, but ${l.length} config layer(s) had issues (sources: ${c})`);for(let e of s)t(``),t(f(e));for(let{from:e,to:n}of a)t(``),t(`Moved ${e} aside to ${n} so defaults could be used. Restore it once fixed.`);return{ok:!0}}catch(e){return n(e instanceof Error?e.message:String(e)),{ok:!1}}}function no(e){let t=(0,Qa.parseDocument)(V(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 $a)t.hasIn(e)&&n.push(e.join(`.`));return n}function ro(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function io(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=ro(i)?i:{};e[r]=a,e=a}e[n[n.length-1]]=null}return t}function ao(e){switch(e){case`project`:return[`project`];case`project-local`:return[`project-local`];case`user`:return[`user`];case`both`:return[`project`,`user`];case`all`:return[`project`,`project-local`,`user`]}}async function oo(e={}){let t=e.log??(e=>console.log(e)),n=e.error??(e=>console.error(e)),r=e.scope??`all`,i=e.dryRun??!1,a=e.cwd??process.cwd(),o=e.writeConfigPatchFn??O,s=ao(r).map(t=>({scope:t,absPath:Nt(t,a,e.homedirOverride)})),c=[],l=!0;for(let{scope:t,absPath:n}of s){if(!B(n)){c.push({path:n,scope:t,found:[],removed:[]});continue}let r;try{r=no(n)}catch(e){let r=e instanceof Error?e.message:String(e);c.push({path:n,scope:t,found:[],removed:[],error:r}),l=!1;continue}if(r.length===0||i){c.push({path:n,scope:t,found:r,removed:[]});continue}let s=await o({cwd:a,scope:t,patch:io($a.filter(e=>r.includes(e.join(`.`)))),homedirOverride:e.homedirOverride});if(!s.ok){c.push({path:n,scope:t,found:r,removed:[],error:f(s.error)}),l=!1;continue}c.push({path:n,scope:t,found:r,removed:r})}for(let e of c)e.error&&n(`✗ ${e.path}: ${e.error}`);let u=c.some(e=>e.error!==void 0),d=c.reduce((e,t)=>e+t.found.length,0);if(d===0&&!u)t(`No deprecated fields found.`);else if(d>0)for(let e of c)e.error||(e.found.length===0?t(` ${e.path}: no deprecated fields`):t(i?`[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:c,ok:l}}const so=`project | project-local | user | all`,co=new Set(Object.keys({project:!0,"project-local":!0,user:!0,both:!0,all:!0}));function lo(e){return e!==`config`}function uo(){let e=new k(`config`).description(`Inspect and maintain OpenKnowledge configuration files`);return e.command(`validate`).description(`Validate the merged config (defaults → user → project)`).action(()=>{to({}).ok||(process.exitCode=1)}),e.command(`migrate`).description(`Remove deprecated config fields from config.yml idempotently (every removed key in the registry — content.*, folders, appearance.editorModeDefault, server.host, etc. — plus the silently-dropped sync.*, persistence.*, server.port)`).option(`--scope <scope>`,`Which scope to migrate: ${so}`,`all`).option(`--dry-run`,`Preview without writing`,!1).action(async e=>{let t=String(e.scope);if(!co.has(t)){console.error(`Invalid --scope: ${t}. Expected: ${so}`),process.exitCode=2;return}(await oo({scope:t,dryRun:e.dryRun})).ok||(process.exitCode=1)}),e}const fo=[` 1. ${F(`Customize`)} (sidebar) → ${F(`Skills`)}`,` 2. Click the ${F(`+`)} button`,` 3. Click ${F(`Create skill`)}`,` 4. Click ${F(`Upload skill`)}`,` 5. Pick ${F(`openknowledge.skill`)} from Downloads`],po=A(` Open the Claude Desktop App, then: ${F(`Customize → Skills → + → Create skill → Upload skill`)} → pick the file.`);function mo(e){let t=[M(`Built ${e.outputPath}`),j(` ${e.size} bytes • sha256 ${e.sha256?.slice(0,12)}…`)];return e.handoffError&&t.push(P(` Handoff failed: ${e.handoffError.message}`)),t.push(po),t.join(`
13
+ `)}function Ja(e){let t=e.error instanceof Error?e.error.message:String(e.error);if(e.json){e.emit({type:`error`,message:t});return}let n=qa({error:e.error,url:e.url,branch:e.branch,principal:e.principal});e.printStderr(`${n??`✗ ${t}`}\n`)}async function Ya(e,t){let n=(await e.get(t))?.login;return n&&n!==`unknown`?n:null}async function Xa(e){let t=_e(e.error),n=null;if(!e.json&&t.kind===`auth`&&t.subclass===`403`){let t=rn(e.url);t&&(n=await(e.resolvePrincipal??(e=>Ya(un(),e)))(t.hostname))}Ja({error:e.error,url:e.url,branch:e.branch,json:e.json,principal:n,emit:e.emit,printStderr:e.printStderr})}function Za(e){return new k(`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).option(`-b, --branch <branch>`,`Branch to check out (falls back to default if missing)`).action(async(t,n,r)=>{let i=e();try{let a=await Ha(t,{json:r.json,dir:n,branch:r.branch??null},i);if(r.json)K(!0,{type:`complete`,dir:a});else{process.stderr.write(`✓ Cloned to ${a}\n`),process.chdir(a);let{startCommand:t}=await import(`./start-BqobG-qu.mjs`);await t(e).parseAsync([],{from:`user`})}}catch(e){if(e instanceof Ce||e instanceof tt){r.json?K(!0,{type:`error`,message:e.message}):process.stderr.write(`${e.message}\n`),process.exitCode=78;return}await Xa({error:e,url:t,branch:r.branch??null,json:r.json,emit:e=>K(!0,e),printStderr:e=>process.stderr.write(e)}),process.exitCode=1}})}var Qa=c();const $a=[[`sync`],[`persistence`,`debounceMs`],[`persistence`,`maxDebounceMs`],[`server`,`port`],...l.map(e=>e.path)];function eo(e){return Mt({absPath:Nt(`project-local`,e),sideline:!1}).diagnostics}function to(e={}){let t=e.log??(e=>console.error(e)),n=e.error??(e=>console.error(e)),r=e.loadConfigFn??Hn;try{let{sources:n,diagnostics:i,sidelined:a}=r(e.cwd),o=(e.readProjectLocalFn??eo)(e.cwd??process.cwd()),s=[...i,...o],c=n.length===0?`defaults only`:n.join(`, `),l=s.filter(e=>e.code!==`REMOVED_KEY`);l.length===0?t(`✓ Configuration valid (sources: ${c})`):t(`! Configuration loaded, but ${l.length} config layer(s) had issues (sources: ${c})`);for(let e of s)t(``),t(f(e));for(let{from:e,to:n}of a)t(``),t(`Moved ${e} aside to ${n} so defaults could be used. Restore it once fixed.`);return{ok:!0}}catch(e){return n(e instanceof Error?e.message:String(e)),{ok:!1}}}function no(e){let t=(0,Qa.parseDocument)(V(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 $a)t.hasIn(e)&&n.push(e.join(`.`));return n}function ro(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function io(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=ro(i)?i:{};e[r]=a,e=a}e[n[n.length-1]]=null}return t}function ao(e){switch(e){case`project`:return[`project`];case`project-local`:return[`project-local`];case`user`:return[`user`];case`both`:return[`project`,`user`];case`all`:return[`project`,`project-local`,`user`]}}async function oo(e={}){let t=e.log??(e=>console.log(e)),n=e.error??(e=>console.error(e)),r=e.scope??`all`,i=e.dryRun??!1,a=e.cwd??process.cwd(),o=e.writeConfigPatchFn??O,s=ao(r).map(t=>({scope:t,absPath:Nt(t,a,e.homedirOverride)})),c=[],l=!0;for(let{scope:t,absPath:n}of s){if(!B(n)){c.push({path:n,scope:t,found:[],removed:[]});continue}let r;try{r=no(n)}catch(e){let r=e instanceof Error?e.message:String(e);c.push({path:n,scope:t,found:[],removed:[],error:r}),l=!1;continue}if(r.length===0||i){c.push({path:n,scope:t,found:r,removed:[]});continue}let s=await o({cwd:a,scope:t,patch:io($a.filter(e=>r.includes(e.join(`.`)))),homedirOverride:e.homedirOverride});if(!s.ok){c.push({path:n,scope:t,found:r,removed:[],error:f(s.error)}),l=!1;continue}c.push({path:n,scope:t,found:r,removed:r})}for(let e of c)e.error&&n(`✗ ${e.path}: ${e.error}`);let u=c.some(e=>e.error!==void 0),d=c.reduce((e,t)=>e+t.found.length,0);if(d===0&&!u)t(`No deprecated fields found.`);else if(d>0)for(let e of c)e.error||(e.found.length===0?t(` ${e.path}: no deprecated fields`):t(i?`[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:c,ok:l}}const so=`project | project-local | user | all`,co=new Set(Object.keys({project:!0,"project-local":!0,user:!0,both:!0,all:!0}));function lo(e){return e!==`config`}function uo(){let e=new k(`config`).description(`Inspect and maintain OpenKnowledge configuration files`);return e.command(`validate`).description(`Validate the merged config (defaults → user → project)`).action(()=>{to({}).ok||(process.exitCode=1)}),e.command(`migrate`).description(`Remove deprecated config fields from config.yml idempotently (every removed key in the registry — content.*, folders, appearance.editorModeDefault, server.host, etc. — plus the silently-dropped sync.*, persistence.*, server.port)`).option(`--scope <scope>`,`Which scope to migrate: ${so}`,`all`).option(`--dry-run`,`Preview without writing`,!1).action(async e=>{let t=String(e.scope);if(!co.has(t)){console.error(`Invalid --scope: ${t}. Expected: ${so}`),process.exitCode=2;return}(await oo({scope:t,dryRun:e.dryRun})).ok||(process.exitCode=1)}),e}const fo=[` 1. ${F(`Customize`)} (sidebar) → ${F(`Skills`)}`,` 2. Click the ${F(`+`)} button`,` 3. Click ${F(`Create skill`)}`,` 4. Click ${F(`Upload skill`)}`,` 5. Pick ${F(`openknowledge.skill`)} from Downloads`],po=A(` Open the Claude Desktop App, then: ${F(`Customize → Skills → + → Create skill → Upload skill`)} → pick the file.`);function mo(e){let t=[M(`Built ${e.outputPath}`),j(` ${e.size} bytes • sha256 ${e.sha256?.slice(0,12)}…`)];return e.handoffError&&t.push(P(` Handoff failed: ${e.handoffError.message}`)),t.push(po),t.join(`
14
14
  `)}function ho(e){let t=e.skillVersion??`unknown`,n=e.recordedAt??`unknown`;return[A(`OpenKnowledge skill ${F(`v${t}`)} already delivered to Claude Desktop.`),j(` Recorded at ${n} in ~/.ok/skill-state.yml`),j(` Use ${F(`--force`)} to rebuild and re-open the install dialog.`)].join(`
15
15
  `)}function go(e){let t=e.skillVersion?` • Skill v${e.skillVersion}`:``;return[M(`Built ${e.outputPath}`),j(` ${e.size} bytes • sha256 ${e.sha256?.slice(0,12)}…${t}`),A(` Claude Desktop App opened. Now upload the file manually:`),...fo,j(` If Claude Desktop didn't open, open it and start at step 1. The file is at ${e.outputPath}`)].join(`
16
16
  `)}function _o(e){return`${N(`Error:`)} ${e.buildError??`unknown build failure`}`}async function vo(e={}){let t=await nt(e);return t.status===`failed`?{...t,message:_o(t),exitCode:1}:t.status===`skip-current`?{...t,message:ho(t),exitCode:0}:t.status===`installed`?{...t,message:go(t),exitCode:0}:{...t,message:mo(t),exitCode:0}}function yo(){return new k(`cowork`).description("Build openknowledge.skill and open the Claude Desktop App so you can upload it for Claude Chat & Cowork. (Advanced/rarely needed — `ok init` already wires Claude.)").option(`--out <path>`,`Custom output path (default: ~/Downloads/openknowledge.skill)`).option(`--no-open`,`Build the file but skip the OS file-association handoff`).option(`--force`,`Bypass the install-state gate and rebuild unconditionally`).action(async e=>{let t=await vo({out:e.out,noOpen:!e.open,force:e.force??!1});process.stdout.write(`${t.message}\n`),t.exitCode!==0&&process.exit(t.exitCode)})}async function bo(e,t){let n=Tr({input:t??process.stdin,output:process.stderr});try{let t=(await n.question(e)).trim().toLowerCase();return t===`y`||t===`yes`}finally{n.close()}}function xo(e={}){let t=e.productName??`OpenKnowledge`;return L(Bt(e),t)}function So(e){if(typeof e!=`object`||!e)return null;let t=e.recentProjects;if(!Array.isArray(t))return null;let n=[];for(let e of t){if(typeof e!=`object`||!e)continue;let t=e;typeof t.path==`string`&&typeof t.name==`string`&&n.push({path:t.path,name:t.name})}return n}function Co(e){let t=L(e,`state.json`);if(!B(t))return[];let n;try{n=JSON.parse(V(t,`utf-8`))}catch{return[]}return So(n)??[]}function wo(e){let t=L(e,`state.json`);if(!B(t))return!1;try{return So(JSON.parse(V(t,`utf-8`)))!==null}catch{return!1}}function q(e,t){return e===t?`~`:e.startsWith(`${t}/`)?`~${e.slice(t.length)}`:e}function To(e){return er===`/`?e:e.split(er).join(`/`)}function Eo(e,t,n=`This project`){let r=[];r.push({kind:`stop-server`,group:n,label:`Stop the project server (if running)`,lockDir:D(e)});let i=new Set;for(let a of Vt){let o=Ut[a];if(!o.projectConfigPath)continue;let s=o.projectConfigPath(e);i.add(To(R(e,s))),r.push({kind:`mcp-entry`,group:n,label:`Remove OK's MCP entry from ${o.label} (${To(R(e,s))})`,editorId:a,scope:`project`,cwd:e,home:t,configPath:s})}r.push({kind:`launch-entry`,group:n,label:`Remove OK's entry from .claude/launch.json`,projectRoot:e}),r.push({kind:`git-exclude`,group:n,label:`Remove OK paths from .git/info/exclude`,projectRoot:e});let a=new Set([...hn(e),...fe]);for(let t of a){let a=t.replace(/\/$/,``);i.has(a)||a!==`.claude/launch.json`&&r.push({kind:`remove-path`,group:n,label:`Remove ${t}`,path:L(e,a),containWithin:e})}try{r.push({kind:`remove-path`,group:n,label:`Remove the OK shadow repo (.git/ok/)`,path:Ue(e)})}catch{}return r}function Do(e,t){return{scope:`deinit`,ops:Eo(e,t)}}function Oo(e){let{home:t,platform:n,host:r,lockDirs:i,marker:a,recentDeinitProjectRoots:o,purgeContent:s}=e,c=[];for(let e of i)c.push({kind:`stop-server`,group:`Running servers`,label:`Stop server at ${q(L(e,`..`,`..`),t)}`,lockDir:e});c.push({kind:`keychain-token`,group:`Credentials`,label:`Remove the GitHub credential (${r}) from the OS keychain + auth.yml`,host:r}),c.push({kind:`embeddings-key`,group:`Credentials`,label:`Remove all embeddings API keys (secrets.yml)`}),c.push(...Ao(a,t));for(let e of Vt){let n=Ut[e],r;try{r=n.configPath(``,t)}catch{continue}c.push({kind:`mcp-entry`,group:`Editor MCP configs`,label:`Remove OK's MCP entry from ${n.label} (${q(r,t)})`,editorId:e,scope:`user`,cwd:t,home:t,configPath:r})}for(let e of Wn(t))c.push({kind:`remove-path`,group:`Skill bundles`,label:`Remove ${q(e.path,t)}`,path:e.path});c.push(...jo(t,n,e.env));for(let e of o)c.push(...Eo(e,t,`Project: ${Qn(e)}`));return c.push({kind:`remove-path`,group:`Global directory`,label:s?`Remove ~/.ok (including user-authored skills)`:`Remove ~/.ok (keeping ~/.ok/skills)`,path:L(t,`.ok`),preserve:s?void 0:[`skills`]}),{scope:`uninstall`,ops:c}}function ko(e){return[L(e,`.zshrc`),L(e,`.bash_profile`),L(e,`.config`,`fish`,`conf.d`,`open-knowledge.fish`)]}function Ao(e,t){let n=[],r=new Set([...ko(t),...e?.rcFiles??[]]);for(let e of r)B(e)&&n.push({kind:`shell-block`,group:`Shell PATH`,label:`Strip the OK block from ${q(e,t)}`,rcFile:e});for(let r of e?.extraSymlinks??[])n.push({kind:`extra-symlink`,group:`Shell PATH`,label:`Remove the ok symlink at ${q(r.path,t)}`,path:r.path,target:r.target});return n}function jo(e,t,n){if(t!==`darwin`)return[];let r={home:e,platformName:t,env:n},i=xo(r),a=xo({...r,productName:`Open Knowledge`}),o=L(e,`Library`,`Caches`,`OpenKnowledge-updater`);return[{kind:`remove-path`,group:`Application data`,label:`Remove ${q(i,e)}`,path:i},{kind:`remove-path`,group:`Application data`,label:`Remove ${q(a,e)} (only if it is OpenKnowledge's)`,path:a,requireOurState:!0},{kind:`remove-path`,group:`Application data`,label:`Remove ${q(o,e)}`,path:o}]}async function Mo(e,t={}){let n=t.clearToken??dn,r=t.clearEmbeddingsKey??Ct,i=t.stopServer??(e=>{let t=nn({lockDir:e,log:()=>{},error:()=>{}});return{stopped:t.stopped.length,failed:t.failed.map(e=>({pid:e.target.pid,error:e.error}))}}),a=[];for(let t of e.ops)try{a.push(await No(t,{clearToken:n,clearEmbeddingsKey:r,stopServer:i}))}catch(e){a.push({op:t,status:`failed`,detail:e instanceof Error?e.message:String(e)})}return{results:a,removed:a.filter(e=>e.status===`removed`),failed:a.filter(e=>e.status===`failed`)}}async function No(e,t){switch(e.kind){case`stop-server`:{let{stopped:n,failed:r}=t.stopServer(e.lockDir);return r.length>0?{op:e,status:`failed`,detail:`could not stop the server (${r.map(e=>`pid ${e.pid}: ${e.error}`).join(`; `)}); a process may still be using files that were removed`}:{op:e,status:n>0?`removed`:`not-present`}}case`keychain-token`:{let{touched:n,keychainError:r}=await t.clearToken(e.host);return r?{op:e,status:`failed`,detail:`keychain unreachable (${r}); remove manually: Keychain Access → service "open-knowledge"`}:{op:e,status:n.length>0?`removed`:`not-present`}}case`embeddings-key`:{let{touched:n}=await t.clearEmbeddingsKey();return{op:e,status:n.length>0?`removed`:`not-present`}}case`shell-block`:{if(!B(e.rcFile))return{op:e,status:`not-present`};let{text:t,changed:n,emptyAfter:r}=Xt(V(e.rcFile,`utf-8`));return n?r?(mr(e.rcFile,{force:!0}),{op:e,status:`removed`,detail:`file removed (was OK-owned)`}):(Pt(e.rcFile,t,{mode:jn(e.rcFile)}),{op:e,status:`removed`}):{op:e,status:`not-present`}}case`extra-symlink`:return $t(e.path,e.target)?(U(e.path),{op:e,status:`removed`}):{op:e,status:`not-present`};case`mcp-entry`:{let t=Yt(Ut[e.editorId],e.cwd,e.home,e.configPath);switch(t.kind){case`removed`:return{op:e,status:`removed`};case`not-present`:return{op:e,status:`not-present`};case`left-foreign`:return{op:e,status:`skipped`,detail:`left a non-OK server in place`};case`declined`:return{op:e,status:`skipped`,detail:`declined (${t.reason})`};default:throw Error(`unhandled mcp-remove outcome: ${t.kind}`)}}case`launch-entry`:{let t=Gn(e.projectRoot);switch(t.kind){case`removed`:case`removed-file`:return{op:e,status:`removed`};case`not-present`:return{op:e,status:`not-present`};case`declined`:return{op:e,status:`skipped`,detail:`declined (unparseable)`};default:throw Error(`unhandled launch-remove outcome: ${t.kind}`)}}case`git-exclude`:{if(kn(e.projectRoot).length===0)return{op:e,status:`not-present`};let t=wn(e.projectRoot,hn(e.projectRoot));return t.kind===`no-exclude`?t.reason===`inaccessible`?{op:e,status:`failed`,detail:`could not write .git/info/exclude (inaccessible)`}:{op:e,status:`not-present`,detail:t.reason}:{op:e,status:t.removed.length>0?`removed`:`not-present`}}case`remove-path`:return Po(e)}}function Po(e){if(e.requireOurState&&!wo(e.path))return{op:e,status:`skipped`,detail:`not verified as OpenKnowledge — left untouched`};e.containWithin&&Ht(e.path,e.containWithin);let t;try{t=sr(e.path)}catch(e){if(e.code!==`ENOENT`)throw e}if(!t)return{op:e,status:`not-present`};if(t.isSymbolicLink())return U(e.path),{op:e,status:`removed`};if(e.preserve&&e.preserve.length>0){let t=new Set(e.preserve),n=!1;for(let r of dr(e.path))t.has(r)||(mr(L(e.path,r),{recursive:!0,force:!0}),n=!0);return{op:e,status:n?`removed`:`not-present`}}return mr(e.path,{recursive:!0,force:!0}),{op:e,status:`removed`}}function Fo(e){let t=new Map;for(let n of e){let e=t.get(n.group)??[];e.push(n),t.set(n.group,e)}return t}function Io(e){if(e.ops.length===0)return j(`Nothing to remove.`);let t=[];for(let[n,r]of Fo(e.ops)){t.length>0&&t.push(``),t.push(F(`${n}:`));for(let e of r)t.push(` ${P(`-`)} ${e.label}`)}return t.join(`
@@ -39,7 +39,7 @@ ws.addEventListener('error', () => process.exit(1));
39
39
  setTimeout(() => process.exit(2), ${t+1e4});
40
40
  `),r}async function gs(e,t,n,r,i){let a=hs(e,t,L(r,`cpu.cpuprofile`)),o=!1,s=Xn(process.execPath,[a],E({stdio:`ignore`})),c=setInterval(()=>{let e=ds(n);e&&i(e)},1e3);await new Promise(e=>{s.once(`close`,t=>{o=t===0,e()}),setTimeout(()=>{s.kill(),e()},t+12e3)}),clearInterval(c);try{mr(L(a,`..`),{recursive:!0,force:!0})}catch{}return o}function _s(e){let t;try{t=JSON.parse(e)}catch{return`(could not parse profile)`}let n=new Map(t.nodes.map(e=>[e.id,e])),r=new Map;for(let e of t.nodes)for(let t of e.children??[])r.set(t,e.id);let i=new Map;for(let e of t.samples??[])i.set(e,(i.get(e)??0)+1);let a=t.samples?.length??0,o=t.endTime!=null&&t.startTime!=null?((t.endTime-t.startTime)/1e3).toFixed(2):`?`,s=[...i.entries()].sort((e,t)=>t[1]-e[1]).slice(0,10),c=[`samples ${a} duration_ms ${o}`,``,`Top leaf nodes`];for(let[e,t]of s){let r=n.get(e);if(!r)continue;let i=a>0?(t/a*100).toFixed(1):`0.0`,{functionName:o,url:s,lineNumber:l,columnNumber:u}=r.callFrame;c.push(` ${t} ${i}% id=${e} ${o||`(anonymous)`} ${s}:${l}:${u} hit=${r.hitCount??0}`)}c.push(``,`Top stacks`);let l=e=>{let t=[],i=e;for(;i!=null;){let e=n.get(i);if(!e)break;let{functionName:a,url:o,lineNumber:s,columnNumber:c}=e.callFrame;t.unshift(` ${a||`(anonymous)`} ${o} ${s} ${c}`),i=r.get(i)}return t};for(let[e,t]of s.slice(0,5)){let n=a>0?(t/a*100).toFixed(1):`0.0`;c.push(``,`--- ${t} ${n}%`,...l(e))}return c.join(`
41
41
  `)}async function vs(e,t={}){let{pid:n,cpuProfileSecs:r=15,noInspector:i=!1}=e,a=t.log??(e=>console.log(e)),o=t.discover??yt,s=t.inspect??Kt,c=t.resolveCommand??Ze,l=t.resolveUsage??mt,u=t.collectLsofFn??fs,d=t.getEndpoints??ms,f=t.profiler??gs,p=t.isAlive??(e=>{try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}),m=t.sendSignal??((e,t)=>{process.kill(e,t)}),h=t.sleep??(e=>new Promise(t=>setTimeout(t,e))),g=r*1e3;if(!p(n)){a(J.default.red(`No process with pid ${n} found.`));return}let _=await o(),v=null,y=null;for(let e of _){let t=s(e,`server`);if(t.status!==`missing`&&t.status!==`corrupt`&&t.lock.pid===n){v=t.lock.worktreeRoot,y={lockDir:e,state:t.status,lockPath:t.lockPath,lock:t.lock};break}}let b=new Date().toISOString().replace(/[:.]/g,`-`),x=e.output?e.output:v?L(v,`.ok`,`local`,`diagnostics`,`process-${n}-${b}`):L(process.cwd(),`ok-diagnose-${n}-${b}`);try{cr(x,{recursive:!0})}catch(e){a(J.default.red(`Cannot create output directory ${x}: ${e.message}`));return}a(J.default.bold(`Diagnosing pid ${n}`)),a(`Output: ${x}`),a(``);let S=(e,t)=>{hr(L(x,e),t),a(` wrote ${e}`)},C=c(n),ee=l(n);S(`metadata.json`,JSON.stringify({capturedAt:new Date().toISOString(),pid:n,command:C,usage:ee,lockInfo:y},null,2)),a(` sampling lsof`);let w=u(n);if(w&&S(`lsof.txt`,w),!i){let e=w?ps(w).find(e=>e>=9229&&e<=9299)??9229:9229,t=d(e);if(!t||t.length===0){a(` no inspector on :${e}, sending SIGUSR1 to pid ${n}`);try{m(n,`SIGUSR1`),await h(2e3),t=d(e)}catch(e){a(J.default.yellow(` SIGUSR1 delivery failed: ${e.message}`))}}if(t&&t.length>0){S(`inspector-endpoints.json`,JSON.stringify(t,null,2));let e=t[0].webSocketDebuggerUrl;if(e){a(` capturing ${r}s CPU profile`);let t=[];await f(e,g,n,x,e=>t.push(e))?a(` wrote cpu.cpuprofile`):a(J.default.yellow(` CPU profile capture failed`)),t.length>0&&S(`process-stats.jsonl`,`${t.map(e=>JSON.stringify(e)).join(`
42
- `)}\n`);try{S(`stacks.txt`,_s(V(L(x,`cpu.cpuprofile`),`utf-8`)))}catch(e){a(J.default.yellow(` stacks.txt skipped: ${e.message}`))}}}else a(J.default.yellow(` Node inspector unavailable — skipping CPU profile`))}a(``),a(J.default.yellow(`⚠ Before sharing, review what each file contains:`)),a(` metadata.json — content directory paths, lock file locations, CPU/MEM at capture time`),a(` lsof.txt — all open files, network connections, and private paths for this process`),a(` inspector-endpoints.json — Node debugger metadata (titles, URLs)`),a(` cpu.cpuprofile — function names and source file paths from your Node process`),a(` stacks.txt — call stacks derived from cpu.cpuprofile; includes source paths`),a(` process-stats.jsonl — CPU/MEM/RSS numbers only; safe to share`),a(``),a(`Bundle: ${J.default.bold(x)}`)}async function ys(e){let t=Tr({input:process.stdin,output:process.stdout});try{return(await t.question(e)).trim()}finally{t.close()}}async function bs(e){let t=lr(L(vr(),`ok-bundle-process-`));return await vs({pid:e,output:t}),t}function xs(e){if(e<1024)return`${e} B`;let t=e/1024;if(t<1024)return`${t.toFixed(1)} KB`;let n=t/1024;return n<1024?`${n.toFixed(1)} MB`:`${(n/1024).toFixed(1)} GB`}function Ss(e){let t=e.trim().toLowerCase();return t===`y`||t===`yes`}function Cs(e){let{summary:t,manifest:n}=e;return t.redacted?t.contentDirVisible?`masked as <CONTENT_DIR>, but still present in some files`:`masked as <CONTENT_DIR>`:t.contentDirVisible?`visible (${n.contentDir.absolutePath})`:`not present`}function ws(e){let t=e.manifest.redaction.secretScrub;return t===void 0?J.default.yellow(`NOT scrubbed (--no-redact): tokens and keys ship verbatim`):`scrubbed known credential formats (${t.redactedLineCount} line(s) across ${t.redactions.length} file(s))`}function Ts(e,t,n){let{summary:r,manifest:i}=t;e(``),e(J.default.bold(`ok diagnose bundle — what leaves this machine`)),e(``),e(` Files: ${r.fileCount}`),e(` Total size: ${xs(r.totalBytes)} uncompressed`),e(` Document names: included in cleartext (${r.docNameCount} doc.name occurrence(s) in telemetry)`),e(` Content-dir path: ${Cs(t)}`),e(` Credentials: ${ws(t)}`),e(` Server status: ${i.serverStatus}`),e(` Output: ${n}`),e(``)}async function Es(e,t={}){let n=t.log??(e=>console.log(e)),r=t.prompt??ys,i=t.runProcessDiagnose??bs,a=t.now??(()=>new Date),o;if(e.out!==void 0){o=e.out;let t=I(o);if(!B(t))throw Error(`ok diagnose bundle: --out parent directory does not exist: ${t}. Create it first.`)}else{let t=a().toISOString().replace(/[:.]/g,`-`),n=L(e.contentDir,`.ok`,`local`,`diagnostics`);cr(n,{recursive:!0}),o=L(n,`bundle-${t}.zip`)}let s;e.pid!==void 0&&(n(J.default.dim(`Running ok diagnose process ${e.pid} into a temp dir`)),s=await i(e.pid));let c=e.redact!==!1,l=await en({contentDir:e.contentDir,projectDir:e.projectDir,processDir:s,redact:c,scrubSecrets:c,deps:t.collectDeps});try{return l.manifest.serverStatus===`not-running`&&n(J.default.yellow(` server not running — live state unavailable`)),Ts(n,l,o),e.yes!==!0&&!Ss(await r(`Write bundle? [y/N]: `))?(n(J.default.dim(`Aborted; no bundle written.`)),{outputPath:null,declined:!0}):(await Zt({collected:l,outputPath:o}),n(J.default.bold(`Bundle: ${o}`)),{outputPath:o,declined:!1})}finally{if(l.cleanup(),s!==void 0)try{mr(s,{recursive:!0,force:!0})}catch{}}}function Ds(){let e=new k(`diagnose`).description(`Diagnostic utilities for open-knowledge processes`);return e.command(`process`).description(`Capture a diagnostic bundle (metadata, lsof, CPU profile) for a running process`).argument(`<pid>`,`Process ID to diagnose`).option(`--cpu-profile <seconds>`,`CPU profile duration (default: 15)`,`15`).option(`--output <dir>`,`Output directory`).option(`--no-inspector`,`Collect metadata only; skip Node inspector and CPU profile`).action(async(e,t)=>{let n=Number.parseInt(e,10);(Number.isNaN(n)||n<=0)&&(console.error(J.default.red(`Invalid pid '${e}': must be a positive integer`)),process.exit(1));let r=Number.parseInt(t.cpuProfile,10);(Number.isNaN(r)||r<=0)&&(console.error(J.default.red(`--cpu-profile must be a positive integer`)),process.exit(1)),await vs({pid:n,cpuProfileSecs:r,output:t.output,noInspector:!t.inspector})}),e.addCommand(us()),e.command(`bundle`).description(`Capture a support bundle (telemetry + logs + server state) into a zip suitable for bug reports`).option(`--pid <pid>`,"Include `ok diagnose process <pid>` output under process/ in the bundle").option(`--out <path>`,`Write the zip to this path instead of the default location`).option(`--yes`,`Skip the y/N prompt`).option(`--no-redact`,`Write a raw bundle: skip credential scrubbing and content-dir path masking`).option(`--redact`,`Scrub credentials and mask the content-dir path (the default)`).action(async e=>{let t;e.pid!==void 0&&(t=Number.parseInt(e.pid,10),(Number.isNaN(t)||t<=0)&&(console.error(J.default.red(`Invalid --pid '${e.pid}': must be a positive integer`)),process.exit(1)));try{let{loadConfig:n}=await import(`./loader-CU-Nz3ee.mjs`),{resolveContentDir:r}=await import(`./src-Dn98dNdR.mjs`),i=process.cwd(),{config:a}=n(i);await Es({contentDir:r(a,i),projectDir:i,pid:t,out:e.out,yes:e.yes===!0,redact:e.redact})}catch(e){let t=e instanceof Error?e.message:String(e);console.error(J.default.red(t)),process.exit(1)}}),e}async function Os(){if(!process.stdin.isTTY){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString(`utf-8`).trim()}return(await pi({message:`Enter embeddings provider API key:`})).trim()}function ks(e){return Ve(e)}async function As(e,t){let n=await bt(dt(),e,t);return n.apiKey?{present:!0,notRequired:!1,source:n.source}:{present:!1,notRequired:n.keyless,source:null}}async function js(e){try{let t=Rt(D(e));if(!t||t.port<=0||!It(t.pid))return null;let n=await fetch(`http://127.0.0.1:${t.port}/api/semantic-status`,{signal:AbortSignal.timeout(1500)});if(!n.ok)return null;let r=await n.json();return typeof r.embedded!=`number`||typeof r.total!=`number`?null:{embedded:r.embedded,total:r.total}}catch{return null}}function Ms(){return new k(`set-key`).description(`Store the embeddings API key for THIS project's configured endpoint`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async e=>{let t=await Os();if(!t){process.stderr.write(`No key provided.
42
+ `)}\n`);try{S(`stacks.txt`,_s(V(L(x,`cpu.cpuprofile`),`utf-8`)))}catch(e){a(J.default.yellow(` stacks.txt skipped: ${e.message}`))}}}else a(J.default.yellow(` Node inspector unavailable — skipping CPU profile`))}a(``),a(J.default.yellow(`⚠ Before sharing, review what each file contains:`)),a(` metadata.json — content directory paths, lock file locations, CPU/MEM at capture time`),a(` lsof.txt — all open files, network connections, and private paths for this process`),a(` inspector-endpoints.json — Node debugger metadata (titles, URLs)`),a(` cpu.cpuprofile — function names and source file paths from your Node process`),a(` stacks.txt — call stacks derived from cpu.cpuprofile; includes source paths`),a(` process-stats.jsonl — CPU/MEM/RSS numbers only; safe to share`),a(``),a(`Bundle: ${J.default.bold(x)}`)}async function ys(e){let t=Tr({input:process.stdin,output:process.stdout});try{return(await t.question(e)).trim()}finally{t.close()}}async function bs(e){let t=lr(L(vr(),`ok-bundle-process-`));return await vs({pid:e,output:t}),t}function xs(e){if(e<1024)return`${e} B`;let t=e/1024;if(t<1024)return`${t.toFixed(1)} KB`;let n=t/1024;return n<1024?`${n.toFixed(1)} MB`:`${(n/1024).toFixed(1)} GB`}function Ss(e){let t=e.trim().toLowerCase();return t===`y`||t===`yes`}function Cs(e){let{summary:t,manifest:n}=e;return t.redacted?t.contentDirVisible?`masked as <CONTENT_DIR>, but still present in some files`:`masked as <CONTENT_DIR>`:t.contentDirVisible?`visible (${n.contentDir.absolutePath})`:`not present`}function ws(e){let t=e.manifest.redaction.secretScrub;return t===void 0?J.default.yellow(`NOT scrubbed (--no-redact): tokens and keys ship verbatim`):`scrubbed known credential formats (${t.redactedLineCount} line(s) across ${t.redactions.length} file(s))`}function Ts(e,t,n){let{summary:r,manifest:i}=t;e(``),e(J.default.bold(`ok diagnose bundle — what leaves this machine`)),e(``),e(` Files: ${r.fileCount}`),e(` Total size: ${xs(r.totalBytes)} uncompressed`),e(` Document names: included in cleartext (${r.docNameCount} doc.name occurrence(s) in telemetry)`),e(` Content-dir path: ${Cs(t)}`),e(` Credentials: ${ws(t)}`),e(` Server status: ${i.serverStatus}`),e(` Output: ${n}`),e(``)}async function Es(e,t={}){let n=t.log??(e=>console.log(e)),r=t.prompt??ys,i=t.runProcessDiagnose??bs,a=t.now??(()=>new Date),o;if(e.out!==void 0){o=e.out;let t=I(o);if(!B(t))throw Error(`ok diagnose bundle: --out parent directory does not exist: ${t}. Create it first.`)}else{let t=a().toISOString().replace(/[:.]/g,`-`),n=L(e.contentDir,`.ok`,`local`,`diagnostics`);cr(n,{recursive:!0}),o=L(n,`bundle-${t}.zip`)}let s;e.pid!==void 0&&(n(J.default.dim(`Running ok diagnose process ${e.pid} into a temp dir`)),s=await i(e.pid));let c=e.redact!==!1,l=await en({contentDir:e.contentDir,projectDir:e.projectDir,processDir:s,redact:c,scrubSecrets:c,deps:t.collectDeps});try{return l.manifest.serverStatus===`not-running`&&n(J.default.yellow(` server not running — live state unavailable`)),Ts(n,l,o),e.yes!==!0&&!Ss(await r(`Write bundle? [y/N]: `))?(n(J.default.dim(`Aborted; no bundle written.`)),{outputPath:null,declined:!0}):(await Zt({collected:l,outputPath:o}),n(J.default.bold(`Bundle: ${o}`)),{outputPath:o,declined:!1})}finally{if(l.cleanup(),s!==void 0)try{mr(s,{recursive:!0,force:!0})}catch{}}}function Ds(){let e=new k(`diagnose`).description(`Diagnostic utilities for open-knowledge processes`);return e.command(`process`).description(`Capture a diagnostic bundle (metadata, lsof, CPU profile) for a running process`).argument(`<pid>`,`Process ID to diagnose`).option(`--cpu-profile <seconds>`,`CPU profile duration (default: 15)`,`15`).option(`--output <dir>`,`Output directory`).option(`--no-inspector`,`Collect metadata only; skip Node inspector and CPU profile`).action(async(e,t)=>{let n=Number.parseInt(e,10);(Number.isNaN(n)||n<=0)&&(console.error(J.default.red(`Invalid pid '${e}': must be a positive integer`)),process.exit(1));let r=Number.parseInt(t.cpuProfile,10);(Number.isNaN(r)||r<=0)&&(console.error(J.default.red(`--cpu-profile must be a positive integer`)),process.exit(1)),await vs({pid:n,cpuProfileSecs:r,output:t.output,noInspector:!t.inspector})}),e.addCommand(us()),e.command(`bundle`).description(`Capture a support bundle (telemetry + logs + server state) into a zip suitable for bug reports`).option(`--pid <pid>`,"Include `ok diagnose process <pid>` output under process/ in the bundle").option(`--out <path>`,`Write the zip to this path instead of the default location`).option(`--yes`,`Skip the y/N prompt`).option(`--no-redact`,`Write a raw bundle: skip credential scrubbing and content-dir path masking`).option(`--redact`,`Scrub credentials and mask the content-dir path (the default)`).action(async e=>{let t;e.pid!==void 0&&(t=Number.parseInt(e.pid,10),(Number.isNaN(t)||t<=0)&&(console.error(J.default.red(`Invalid --pid '${e.pid}': must be a positive integer`)),process.exit(1)));try{let{loadConfig:n}=await import(`./loader-D7taw_Gp.mjs`),{resolveContentDir:r}=await import(`./src-DJHJJDlb.mjs`),i=process.cwd(),{config:a}=n(i);await Es({contentDir:r(a,i),projectDir:i,pid:t,out:e.out,yes:e.yes===!0,redact:e.redact})}catch(e){let t=e instanceof Error?e.message:String(e);console.error(J.default.red(t)),process.exit(1)}}),e}async function Os(){if(!process.stdin.isTTY){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString(`utf-8`).trim()}return(await pi({message:`Enter embeddings provider API key:`})).trim()}function ks(e){return Ve(e)}async function As(e,t){let n=await bt(dt(),e,t);return n.apiKey?{present:!0,notRequired:!1,source:n.source}:{present:!1,notRequired:n.keyless,source:null}}async function js(e){try{let t=Rt(D(e));if(!t||t.port<=0||!It(t.pid))return null;let n=await fetch(`http://127.0.0.1:${t.port}/api/semantic-status`,{signal:AbortSignal.timeout(1500)});if(!n.ok)return null;let r=await n.json();return typeof r.embedded!=`number`||typeof r.total!=`number`?null:{embedded:r.embedded,total:r.total}}catch{return null}}function Ms(){return new k(`set-key`).description(`Store the embeddings API key for THIS project's configured endpoint`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async e=>{let t=await Os();if(!t){process.stderr.write(`No key provided.
43
43
  `),process.exitCode=1;return}let n=z(e.cwd??process.cwd()),{baseUrl:r}=ks(n);try{await dt().setForProject(n,r,t)}catch(e){process.stderr.write(`Failed to store the embeddings key: ${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1;return}process.stderr.write(`✓ Embeddings API key stored for ${r}\n (kept in ~/.ok/secrets.yml, 0600, this machine only — never in the project).
44
44
  Enable semantic search with \`ok embeddings enable\`, or in
45
45
  OK Desktop → Settings → This project → Search.
@@ -74,7 +74,7 @@ ${t}`,d++;break;case`id`:l=t.includes(`\0`)?void 0:t;break;case`retry`:/^\d+$/.t
74
74
  `).replace(/\n+$/,``);return e.endsWith(`
75
75
  `)?`${c}\n`:c}function zu(e){return e.replace(/\r\n|\r|\n/g,`<br>`).replace(/\|/g,`\\|`)}function Bu(e){return/\s/.test(e)?`<${e}>`:e}function Vu(e,t={}){let{header:n,rows:r}=uu(e),i=n.length;if(i===0)return{table:``,columns:0,wide:!1};let a=t.wideThreshold??15,o=t.titleColumn??0;return{table:[`| ${n.map(zu).join(` | `)} |`,`| ${n.map(()=>`---`).join(` | `)} |`,...r.map(e=>`| ${n.map((n,r)=>{let i=e[r]??``,a=zu(i);if(r===o&&t.linkForTitle&&i.trim()!==``){let e=t.linkForTitle(i);if(e)return`[${a}](${Bu(e)})`}return a}).join(` | `)} |`)].join(`
76
76
  `),columns:i,wide:i>a}}function Hu(e,t){let n=e.match(/^#\s+(.+)$/m);return n?n[1].trim():t}function Uu(e,t){return`# ${e}\n\n${t}\n`}const Wu=[`links`,`frontmatter`,`callouts`,`images`,`tables`],Gu=/\.mdx?$/i;function Ku(e){return{isNotionExport:e,transforms:{links:0,frontmatter:0,callouts:0,images:0,tables:0},assetsExtracted:0,stubsCreated:0,csvsRemoved:0,wideTables:[],ambiguousTitleLinks:0,unreadable:[],filesChanged:0}}function qu(e,t={}){let n=t.selected??new Set(Wu),r=ju(e);if(!r&&!t.force)return{changes:[],assets:[],deletions:[],report:Ku(!1)};let i=Ku(r),a=Ou(e),o=yu(a,{onUnreadable:e=>i.unreadable.push(e)}),s=n.has(`tables`),c=new Map,l=new Set;for(let e of o){e.stubPath&&l.add(e.stubPath);for(let t of e.rowFiles)c.set(t,e)}let u=[],d=[],f=[];for(let e of a){if(!Gu.test(e)||s&&l.has(e))continue;let r;try{r=V(e,`utf8`)}catch{i.unreadable.push(e);continue}let a=r,o=(e,t)=>{a!==t&&(i.transforms[e]+=1)};if(n.has(`images`)){let n=a,r=lu(a,Qn(e),{strip:t.stripBase64});a=r.markdown;for(let t of r.assets)d.push({path:L(I(e),t.filename),bytes:t.bytes});i.assetsExtracted+=r.assets.length,o(`images`,n)}if(n.has(`callouts`)){let e=a;a=au(a),o(`callouts`,e)}if(n.has(`frontmatter`)){let t=c.get(e);if(t){let e=a;a=Ru(a,t.propertyKeys),o(`frontmatter`,e)}}if(n.has(`links`)){let e=a;a=Du(a,{redirectCsv:s}),o(`links`,e)}a!==r&&u.push({path:e,content:a})}if(s)for(let e of o){let r=Vu(e.csvText,{linkForTitle:t=>{let n=gu(e.folderIndex,t);return n.ambiguous&&(i.ambiguousTitleLinks+=1),n.path?R(I(e.stubTargetPath),n.path):null}});if(r.columns===0)continue;let a=e.stubPath??e.stubTargetPath,o=null;if(e.stubPath)try{o=V(e.stubPath,`utf8`)}catch{i.unreadable.push(e.stubPath);continue}let c=Uu(o===null?e.fallbackTitle:Hu(o,e.fallbackTitle),r.table);n.has(`links`)&&(c=Du(c,{redirectCsv:s})),r.wide&&i.wideTables.push(a),o===null?(u.push({path:a,content:c}),i.stubsCreated+=1,i.transforms.tables+=1):c!==o&&(u.push({path:a,content:c}),i.transforms.tables+=1),t.removeCsv&&(f.push(e.csvPath),i.csvsRemoved+=1)}return i.filesChanged=new Set(u.map(e=>e.path)).size,{changes:u,assets:d,deletions:f,report:i}}function Ju(e){for(let t of e.assets)cr(I(t.path),{recursive:!0}),hr(t.path,t.bytes);for(let t of e.changes)cr(I(t.path),{recursive:!0}),hr(t.path,t.content,`utf8`);for(let t of e.deletions)try{U(t)}catch(e){if(e.code!==`ENOENT`)throw e}}const Yu={images:`Inline base64 images extracted`,callouts:`Notion <aside> callouts converted`,frontmatter:`Row properties lifted to frontmatter`,tables:`Databases rendered as tables`,links:`Internal links decoded`},Xu=[`images`,`callouts`,`frontmatter`,`tables`,`links`];function Zu(e,t){let n=[];n.push(t.applied?`Applied Notion cleanup in ${t.dir}`:`Dry run — no changes written (${t.dir})`);for(let t of Xu)n.push(` ${Yu[t]}: ${e.transforms[t]}`);return n.push(` Assets written: ${e.assetsExtracted}`),e.stubsCreated>0&&n.push(` Database pages created (CSVs without a stub): ${e.stubsCreated}`),e.csvsRemoved>0&&n.push(` CSV files removed: ${e.csvsRemoved}`),n.push(` Files changed: ${e.filesChanged}`),e.ambiguousTitleLinks>0&&n.push(` Ambiguous title links left as plain text: ${e.ambiguousTitleLinks}`),e.wideTables.length>0&&n.push(` Wide tables (>15 columns): ${e.wideTables.length}`),e.unreadable.length>0&&n.push(` Skipped unreadable files: ${e.unreadable.length}`),!t.applied&&e.filesChanged+e.assetsExtracted+e.csvsRemoved>0&&(n.push(``),n.push(`Re-run with --apply to write these changes.`)),n.join(`
77
- `)}function Qu(e,t){return JSON.stringify({applied:t.applied,...e},null,2)}function $u(e){let t=new Set(Wu);return e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0).map(e=>{if(!t.has(e))throw Error(`Unknown transform "${e}". Valid transforms: ${Wu.join(`, `)}`);return e})}function ed(e,t){let n=new Set(Wu);if(e&&(n=new Set($u(e))),t)for(let e of $u(t))n.delete(e);return n}function td(){let e=new k(`migrate`).description(`Migrate content from other tools into Open Knowledge`);return e.command(`notion [dir]`).description(`Clean up a Notion "Markdown & CSV" export in place (dry-run unless --apply)`).option(`--apply`,`write changes to disk (default: dry-run preview)`).option(`--strip-base64`,`delete inline base64 images instead of extracting them to files`).option(`--remove-csv`,`delete each "_all.csv" once its table page exists (destructive)`).option(`--only <transforms>`,`run only these transforms (comma-separated: links,frontmatter,callouts,images,tables)`).option(`--skip <transforms>`,`skip these transforms (comma-separated)`).option(`--force`,`run even if the directory is not detected as a Notion export`).option(`--json`,`print a machine-readable JSON report`).action((e,t)=>{let n=z(e??process.cwd()),r;try{r=ed(t.only,t.skip)}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exitCode=2;return}let i=qu(n,{selected:r,stripBase64:t.stripBase64??!1,removeCsv:t.removeCsv??!1,force:t.force??!1}),{report:a}=i;if(!a.isNotionExport&&!t.force){t.json?console.log(JSON.stringify({refused:!0,reason:`not-a-notion-export`,dir:n},null,2)):console.error(`Not a Notion export: ${n}\nNo id-suffixed pages, "_all.csv", or inline base64 images were found. Re-run with --force to override.`),process.exitCode=2;return}if(t.apply)try{Ju(i)}catch(e){console.error(`Failed to apply changes: ${e instanceof Error?e.message:String(e)}`),process.exitCode=4;return}console.log(t.json?Qu(a,{applied:t.apply??!1}):Zu(a,{applied:t.apply??!1,dir:n})),a.filesChanged===0&&a.assetsExtracted===0&&i.deletions.length===0?process.exitCode=1:t.apply&&(a.ambiguousTitleLinks>0||a.wideTables.length>0)&&(process.exitCode=3)}),e}function nd(e=()=>Rn(Vn())){return{detectBundlePath:()=>e().bundlePath??null,resolveBaseUrl:e=>Se({lockDir:D(e)}).baseUrl,classifyName:(e,t)=>{let n=L(e,t);try{return H(n).isDirectory()?`folder`:`doc`}catch(e){let t=e?.code;return t!==`ENOENT`&&t!==`ENOTDIR`&&process.stderr.write(`[ok open] statSync failed for ${n} (${t??`unknown`}); treating as a doc\n`),`doc`}},openTarget:e=>{In(`open`,[e])},log:e=>process.stdout.write(`${e}\n`),error:e=>process.stderr.write(`${e}\n`)}}function rd(e){return e.startsWith(`/`)||e.includes(`\\`)||e.split(`/`).includes(`..`)}function id(e){return e.error("No OpenKnowledge desktop app found and no UI is running. Install OK Desktop, or start a UI with `ok ui`, then retry."),1}function ad(e,t,n,r){let i=`openknowledge://open?project=${encodeURIComponent(e)}&${t}=${encodeURIComponent(n)}`;r.openTarget(i)}function od(e,t,n){let r=z(t.project??process.cwd()),i=e.replace(/\/+$/,``);if(!i)return n.error("Nothing to open: pass a doc, folder, or skill name (e.g. `ok open specs/foo/SPEC`)."),1;if(rd(i))return n.error(`Invalid name "${i}": must be a relative path with no '..' segments, leading '/', or backslashes.`),1;if(t.skill===!0){let e=t.scope??`project`;if(!he.includes(e))return n.error(`Invalid --scope "${t.scope}": expected one of ${he.join(`, `)}.`),1;if(n.detectBundlePath())return ad(r,`doc`,`__skill__/${e}/${i}`,n),n.log(`Opening skill ${i} (${e}) in the OpenKnowledge desktop app.`),0;let a=n.resolveBaseUrl(r);if(a){let t=`${a}/#/${Be(e,i)}`;return n.openTarget(t),n.log(`Opening skill ${i} (${e}) in your browser: ${t}`),0}return id(n)}let a=/\/+$/.test(e)||n.classifyName(r,i)===`folder`,o=n.detectBundlePath();if(a){if(o)return ad(r,`folder`,i,n),n.log(`Opening folder ${i} in the OpenKnowledge desktop app.`),0;let e=n.resolveBaseUrl(r);if(e){let t=`${e}/#/${Je(i)}`;return n.openTarget(t),n.log(`Opening folder ${i} in your browser: ${t}`),0}return id(n)}if(o)return ad(r,`doc`,i,n),n.log(`Opening ${i} in the OpenKnowledge desktop app.`),0;let s=n.resolveBaseUrl(r);if(s){let e=`${s}/#/${qe(i)}`;return n.openTarget(e),n.log(`Opening ${i} in your browser: ${e}`),0}return id(n)}function sd(){return new k(`open`).description(`Open a doc, folder, or skill in the OK Desktop app (falls back to the browser UI). Docs and folders are auto-detected — no flag needed.`).argument(`<name>`,`Doc path (specs/foo/SPEC), folder path (specs/foo or specs/foo/), or a skill name with --skill`).option(`--skill`,`Open <name> as a skill in the skill editor`).option(`--scope <scope>`,`Skill scope when --skill is set: ${he.join(` | `)}`,`project`).option(`--project <dir>`,`Project root (defaults to the current directory)`).action((e,t)=>{process.exitCode=od(e,t,nd())})}function cd(e){return new k(`preview`).description(`Show what content the watcher will track (read-only)`).action(async()=>{let{previewContent:t,formatPreviewBlock:n}=await import(`./preview-CjwSh-52.mjs`),r=e(),i=process.cwd(),a=at(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 ld(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function ud(e,t,n=process.cwd()){let r=e.op??`sync`,i=Rt(D(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`,...ce({kind:`cli`,runtimeVersion:Lt})},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}`)}ld(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=Ft({baseDir:n});if(r===`sync`||r===`pull`){ld(e.json,{type:`step`,step:`pull`});let t=await a.pull();ld(e.json,{type:`pull`,summary:t.summary}),e.json||process.stderr.write(` pull: ${t.summary.changes} changes\n`)}(r===`sync`||r===`push`)&&(ld(e.json,{type:`step`,step:`push`}),await a.push(),ld(e.json,{type:`push`,ok:!0}),e.json||process.stderr.write(` push: ok
77
+ `)}function Qu(e,t){return JSON.stringify({applied:t.applied,...e},null,2)}function $u(e){let t=new Set(Wu);return e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0).map(e=>{if(!t.has(e))throw Error(`Unknown transform "${e}". Valid transforms: ${Wu.join(`, `)}`);return e})}function ed(e,t){let n=new Set(Wu);if(e&&(n=new Set($u(e))),t)for(let e of $u(t))n.delete(e);return n}function td(){let e=new k(`migrate`).description(`Migrate content from other tools into Open Knowledge`);return e.command(`notion [dir]`).description(`Clean up a Notion "Markdown & CSV" export in place (dry-run unless --apply)`).option(`--apply`,`write changes to disk (default: dry-run preview)`).option(`--strip-base64`,`delete inline base64 images instead of extracting them to files`).option(`--remove-csv`,`delete each "_all.csv" once its table page exists (destructive)`).option(`--only <transforms>`,`run only these transforms (comma-separated: links,frontmatter,callouts,images,tables)`).option(`--skip <transforms>`,`skip these transforms (comma-separated)`).option(`--force`,`run even if the directory is not detected as a Notion export`).option(`--json`,`print a machine-readable JSON report`).action((e,t)=>{let n=z(e??process.cwd()),r;try{r=ed(t.only,t.skip)}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exitCode=2;return}let i=qu(n,{selected:r,stripBase64:t.stripBase64??!1,removeCsv:t.removeCsv??!1,force:t.force??!1}),{report:a}=i;if(!a.isNotionExport&&!t.force){t.json?console.log(JSON.stringify({refused:!0,reason:`not-a-notion-export`,dir:n},null,2)):console.error(`Not a Notion export: ${n}\nNo id-suffixed pages, "_all.csv", or inline base64 images were found. Re-run with --force to override.`),process.exitCode=2;return}if(t.apply)try{Ju(i)}catch(e){console.error(`Failed to apply changes: ${e instanceof Error?e.message:String(e)}`),process.exitCode=4;return}console.log(t.json?Qu(a,{applied:t.apply??!1}):Zu(a,{applied:t.apply??!1,dir:n})),a.filesChanged===0&&a.assetsExtracted===0&&i.deletions.length===0?process.exitCode=1:t.apply&&(a.ambiguousTitleLinks>0||a.wideTables.length>0)&&(process.exitCode=3)}),e}function nd(e=()=>Rn(Vn())){return{detectBundlePath:()=>e().bundlePath??null,resolveBaseUrl:e=>Se({lockDir:D(e)}).baseUrl,classifyName:(e,t)=>{let n=L(e,t);try{return H(n).isDirectory()?`folder`:`doc`}catch(e){let t=e?.code;return t!==`ENOENT`&&t!==`ENOTDIR`&&process.stderr.write(`[ok open] statSync failed for ${n} (${t??`unknown`}); treating as a doc\n`),`doc`}},openTarget:e=>{In(`open`,[e])},log:e=>process.stdout.write(`${e}\n`),error:e=>process.stderr.write(`${e}\n`)}}function rd(e){return e.startsWith(`/`)||e.includes(`\\`)||e.split(`/`).includes(`..`)}function id(e){return e.error("No OpenKnowledge desktop app found and no UI is running. Install OK Desktop, or start a UI with `ok ui`, then retry."),1}function ad(e,t,n,r){let i=`openknowledge://open?project=${encodeURIComponent(e)}&${t}=${encodeURIComponent(n)}`;r.openTarget(i)}function od(e,t,n){let r=z(t.project??process.cwd()),i=e.replace(/\/+$/,``);if(!i)return n.error("Nothing to open: pass a doc, folder, or skill name (e.g. `ok open specs/foo/SPEC`)."),1;if(rd(i))return n.error(`Invalid name "${i}": must be a relative path with no '..' segments, leading '/', or backslashes.`),1;if(t.skill===!0){let e=t.scope??`project`;if(!he.includes(e))return n.error(`Invalid --scope "${t.scope}": expected one of ${he.join(`, `)}.`),1;if(n.detectBundlePath())return ad(r,`doc`,`__skill__/${e}/${i}`,n),n.log(`Opening skill ${i} (${e}) in the OpenKnowledge desktop app.`),0;let a=n.resolveBaseUrl(r);if(a){let t=`${a}/#/${Be(e,i)}`;return n.openTarget(t),n.log(`Opening skill ${i} (${e}) in your browser: ${t}`),0}return id(n)}let a=/\/+$/.test(e)||n.classifyName(r,i)===`folder`,o=n.detectBundlePath();if(a){if(o)return ad(r,`folder`,i,n),n.log(`Opening folder ${i} in the OpenKnowledge desktop app.`),0;let e=n.resolveBaseUrl(r);if(e){let t=`${e}/#/${Je(i)}`;return n.openTarget(t),n.log(`Opening folder ${i} in your browser: ${t}`),0}return id(n)}if(o)return ad(r,`doc`,i,n),n.log(`Opening ${i} in the OpenKnowledge desktop app.`),0;let s=n.resolveBaseUrl(r);if(s){let e=`${s}/#/${qe(i)}`;return n.openTarget(e),n.log(`Opening ${i} in your browser: ${e}`),0}return id(n)}function sd(){return new k(`open`).description(`Open a doc, folder, or skill in the OK Desktop app (falls back to the browser UI). Docs and folders are auto-detected — no flag needed.`).argument(`<name>`,`Doc path (specs/foo/SPEC), folder path (specs/foo or specs/foo/), or a skill name with --skill`).option(`--skill`,`Open <name> as a skill in the skill editor`).option(`--scope <scope>`,`Skill scope when --skill is set: ${he.join(` | `)}`,`project`).option(`--project <dir>`,`Project root (defaults to the current directory)`).action((e,t)=>{process.exitCode=od(e,t,nd())})}function cd(e){return new k(`preview`).description(`Show what content the watcher will track (read-only)`).action(async()=>{let{previewContent:t,formatPreviewBlock:n}=await import(`./preview-DsPcq5nE.mjs`),r=e(),i=process.cwd(),a=at(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 ld(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function ud(e,t,n=process.cwd()){let r=e.op??`sync`,i=Rt(D(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`,...ce({kind:`cli`,runtimeVersion:Lt})},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}`)}ld(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=Ft({baseDir:n});if(r===`sync`||r===`pull`){ld(e.json,{type:`step`,step:`pull`});let t=await a.pull();ld(e.json,{type:`pull`,summary:t.summary}),e.json||process.stderr.write(` pull: ${t.summary.changes} changes\n`)}(r===`sync`||r===`push`)&&(ld(e.json,{type:`step`,step:`push`}),await a.push(),ld(e.json,{type:`push`,ok:!0}),e.json||process.stderr.write(` push: ok
78
78
  `)),ld(e.json,{type:`complete`,op:r}),e.json||process.stderr.write(`✓ ${r} complete\n`)}function dd(e){return new k(`sync`).description(`Commit, pull, and push to the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await ud({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 fd(e){return new k(`pull`).description(`Pull changes from the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await ud({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 pd(e){return new k(`push`).description(`Push commits to the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await ud({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 md(e){return typeof e==`string`&&we.includes(e)}async function hd(e={}){let t=z(e.cwd??process.cwd()),n=e.pack??`knowledge-base`;if(!jt[n])return{status:`failed`,message:`${N(`Error:`)} Unknown pack "${n}". Available: ${we.join(`, `)}`,exitCode:1};let r;try{r=await Ie({projectDir:t,rootDir:e.root,packId:n,skipPrerequisite:e.dryRun===!0})}catch(e){return e instanceof _t?{status:`prerequisite-missing`,message:`${N(`Error:`)} ${e.message}`,exitCode:1}:{status:`failed`,message:`${N(`Error:`)} ${e instanceof Error?e.message:String(e)}`,exitCode:1}}if(r.created.length===0&&!r.packSkills?.some(e=>e.pending)){let e=jt[n].name,t=(r.packSkills??[]).filter(e=>e.conflict).map(e=>`\n${P(`!`)} Skill "${e.name}" is your own — the pack's version is not installed. Rename yours to install the pack's version.`).join(``);return{status:`no-op`,message:`${M(`Your ${e} pack is already seeded.`)}${t}\n${j(`Nothing to do.`)}`,plan:r,exitCode:0}}if(e.dryRun){let e=Fe(jt[n]);return{status:`dry-run`,message:`${F(`Reference this pack for inspiration (dry-run — no changes made):`)}\n\n${e}\n\n${F(`Plan:`)}\n\n${_d(r,t)}`,plan:r,exitCode:0}}if(!e.yes&&!await vd(`${F(`Plan:`)}\n\n${_d(r,t)}\n\n${F(`Apply?`)} ${j(`[Y/n] `)}`,e.confirmStream))return{status:`cancelled`,message:j(`Cancelled.`),plan:r,exitCode:0};let i=await ze(r,{projectDir:t,packId:n});if(i.errors.length>0){let e=i.errors.map(e=>` ${N(`✗`)} ${e.path}: ${e.error}`);return{status:`failed`,message:[`${P(`Applied`)} ${i.applied} entries, ${P(String(i.errors.length))} error(s):`,...e].join(`
79
79
  `),plan:r,exitCode:1}}let a=jt[n].name,o=i.packSkillsInstalled.length>0?`\n${j(`Installed the ${a} skills for: ${i.packSkillsInstalled.join(`, `)}`)}`:``,s=(i.packSkillConflicts??[]).map(e=>e.hosts===void 0||e.hosts.length===0?`\n${P(`!`)} Skill "${e.name}" was not installed — you already have your own skill with that name. Rename yours if you want the pack's version.`:`\n${P(`!`)} Skill "${e.name}" was not installed for ${e.hosts.join(`, `)} — you already have your own skill with that name there. Rename yours if you want the pack's version.`).join(``);return{status:`applied`,message:`${M(`✓ Seeded ${a}`)} ${j(`(${i.applied} entries, ${i.durationMs}ms)`)}${o}${s}`,plan:r,exitCode:0}}function gd(){let e=[F(`Available packs:`)];for(let t of we){let n=jt[t];e.push(` ${M(t)} ${j(`—`)} ${n.name}: ${n.description}`)}return e.join(`
80
80
  `)}function _d(e,t){let n=[],r=e.created.filter(e=>e.kind===`folder`),i=e.created.filter(e=>e.kind===`file`);if(r.length>0){n.push(F(`Folders to create:`));for(let e of r)n.push(` ${M(`+`)} ${A(R(t,z(t,e.path))||e.path)}${j(`/`)}`)}if(i.length>0){n.length>0&&n.push(``),n.push(F(`Files to create:`));for(let e of i)n.push(` ${M(`+`)} ${A(R(t,z(t,e.path))||e.path)}`)}if(e.skipped.length>0){n.length>0&&n.push(``),n.push(j(`Already present (skipped):`));for(let t of e.skipped)n.push(` ${j(`· ${t.path} (${t.reason})`)}`)}if(e.warnings.length>0){n.length>0&&n.push(``),n.push(P(`Warnings:`));for(let t of e.warnings)n.push(` ${P(`!`)} ${t}`)}let a=(e.packSkills??[]).filter(e=>e.conflict);if(a.length>0){n.length>0&&n.push(``),n.push(P(`Name collisions:`));for(let e of a)n.push(` ${P(`!`)} Skill "${e.name}" is your own — the pack's version will not be installed. Rename yours to install the pack's version.`)}return n.join(`
@@ -83,9 +83,9 @@ ${t}`,d++;break;case`id`:l=t.includes(`\0`)?void 0:t;break;case`retry`:/^\d+$/.t
83
83
  `);return}if(a){process.stdout.write(`${JSON.stringify({type:`error`,code:c.kind})}\n`);return}process.stderr.write(`✗ share name-check failed: ${c.kind}\n`),process.exit(1)}function Sd(e){return new k(`name-check`).description(`Check if owner/name is available on GitHub`).requiredOption(`--owner <owner>`,`GitHub owner (user or org)`).requiredOption(`--name <name>`,`Repository name`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSON`,!1).action(async t=>{await xd(t,await e())})}async function Cd(e){try{let t=[],n=await e.users.getAuthenticated();t.push({login:n.data.login,kind:`user`,avatarUrl:n.data.avatar_url});for await(let n of e.paginate.iterator(e.orgs.listMembershipsForAuthenticatedUser,{state:`active`,per_page:100}))for(let e of n.data)(e.permissions?.can_create_repository===!0||e.role===`admin`)&&t.push({login:e.organization.login,kind:`org`,avatarUrl:e.organization.avatar_url??void 0});return{kind:`ok`,owners:t}}catch(e){return e.status===401?{kind:`auth-required`}:{kind:`network`}}}async function wd(e,t){let{host:n,json:r}=e;W(n);let i=await ma(n,t);if(i==null){if(r){process.stdout.write(`${JSON.stringify({type:`error`,code:`auth-required`})}\n`);return}process.stderr.write(`Not logged in to ${n}\n`),process.exit(1)}let a=n===`github.com`?void 0:`https://${n}/api/v3`,o=await Cd(new sa({auth:i,...a?{baseUrl:a}:{}}));if(o.kind===`ok`){if(r)process.stdout.write(`${JSON.stringify({type:`owners`,owners:o.owners})}\n`);else for(let e of o.owners)process.stdout.write(`${e.kind}\t${e.login}\n`);return}if(r){process.stdout.write(`${JSON.stringify({type:`error`,code:o.kind})}\n`);return}process.stderr.write(`✗ share owners failed: ${o.kind}\n`),process.exit(1)}function Td(e){return new k(`owners`).description(`List GitHub owners eligible to host a new repository`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSON`,!1).action(async t=>{await wd(t,await e())})}function Ed(e){let t=e,n=t.status,r=t.response?.data,i=t.response?.headers,a=`${r?.message??r?.errors?.map(e=>e.message??``).join(`
84
84
  `)??``}\n${t.message??``}`.toLowerCase();return n===401?`auth-required`:n===403?i?.[`x-github-sso`]||a.includes(`saml`)||a.includes(`sso`)?`saml-sso`:`network`:n===422&&(r?.errors?.some(e=>e.field===`name`)||a.includes(`already exists`)||a.includes(`name already exists`))?`name-conflict`:`network`}async function Dd(e){let{octokit:t,ownerLogin:n,ownerKind:r,name:i,visibility:a,description:o}=e,s=a===`private`;if(r===`user`){let{data:e}=await t.repos.createForAuthenticatedUser({name:i,private:s,...o?{description:o}:{}});return{cloneUrl:e.clone_url,defaultBranch:e.default_branch??`main`}}let{data:c}=await t.repos.createInOrg({org:n,name:i,visibility:a,...o?{description:o}:{}});return{cloneUrl:c.clone_url,defaultBranch:c.default_branch??`main`}}async function Od(e,t,n){try{let{data:r}=await e.repos.get({owner:t,repo:n});return{cloneUrl:r.clone_url,defaultBranch:r.default_branch??`main`}}catch{return null}}async function kd(e,t){return(await e.users.getAuthenticated()).data.login.toLowerCase()===t.toLowerCase()?`user`:`org`}function Ad(e){return Ft(za(e,[])).env(Na())}function jd(e,t){if(!e.startsWith(`https://`))return e;try{if(new URL(e).hostname!==`github.com`)return e}catch{return e}return e.replace(`https://`,`https://x-access-token:${t}@`)}const Md={ensureOkScaffold:e=>{st(e)},gitFactory:Ad};async function Nd(e){let t={...Md,...e.deps},n=z(e.projectDir),r;if(e.ownerKind)r=e.ownerKind;else try{r=await kd(e.octokit,e.body.owner)}catch(e){return{kind:`error`,code:Ed(e)}}try{t.ensureOkScaffold(n)}catch{return{kind:`error`,code:`init-failed`}}let i=t.gitFactory(n);if(!B(L(n,`.git`)))try{await i.init()}catch{return{kind:`error`,code:`init-failed`}}let a;try{a=await Dd({octokit:e.octokit,ownerLogin:e.body.owner,ownerKind:r,name:e.body.name,visibility:e.body.visibility,description:e.body.description})}catch(t){if(Ed(t)===`name-conflict`){let t=await Od(e.octokit,e.body.owner,e.body.name);if(t===null)return{kind:`error`,code:`name-conflict`};a=t}else return{kind:`error`,code:Ed(t)}}try{await i.addRemote(`origin`,a.cloneUrl)}catch(e){if(!String(e.message??``).toLowerCase().includes(`remote origin already exists`))return{kind:`error`,code:`push-failed`}}let o=!1;try{await i.raw([`rev-parse`,`--verify`,`HEAD`])}catch{o=!0}if(o)try{await i.add(`.`),await i.raw([`commit`,`--allow-empty`,`-m`,`Initial commit`])}catch{return{kind:`error`,code:`init-failed`}}let s=jd(a.cloneUrl,e.token);try{await i.raw([`push`,s,`HEAD:refs/heads/${a.defaultBranch}`])}catch(e){let t=String(e.message??``).toLowerCase();return t.includes(`saml`)||t.includes(`sso`)?{kind:`error`,code:`saml-sso`}:{kind:`error`,code:`push-failed`}}try{await i.raw([`update-ref`,`refs/remotes/origin/${a.defaultBranch}`,`HEAD`])}catch{}return{kind:`ok`,value:{ownerLogin:e.body.owner,repoName:e.body.name,cloneUrl:a.cloneUrl,defaultBranch:a.defaultBranch}}}function Pd(e,t){if(!e){t.kind===`ok`?process.stdout.write(`✓ Published ${t.value.cloneUrl}\n`):(process.stderr.write(`✗ share publish failed: ${t.code}\n`),process.exit(1));return}if(t.kind===`ok`){process.stdout.write(`${JSON.stringify({type:`publish`,...t.value})}\n`);return}process.stdout.write(`${JSON.stringify({type:`error`,code:t.code})}\n`)}async function Fd(e,t){let{host:n,owner:r,name:i,visibility:a,description:o,projectDir:s,json:c}=e;W(n);let l=await ma(n,t);if(l==null){Pd(c,{kind:`error`,code:`auth-required`});return}let u=n===`github.com`?void 0:`https://${n}/api/v3`,d=new sa({auth:l,...u?{baseUrl:u}:{}});try{Yn(`git config user.email`,E({cwd:s,stdio:`ignore`}))}catch{process.env.GIT_AUTHOR_NAME??=`OpenKnowledge`,process.env.GIT_AUTHOR_EMAIL??=`noreply@inkeep.com`,process.env.GIT_COMMITTER_NAME??=`OpenKnowledge`,process.env.GIT_COMMITTER_EMAIL??=`noreply@inkeep.com`}Pd(c,await Nd({octokit:d,token:l,projectDir:s,body:{owner:r,name:i,visibility:a,description:o}}))}function Id(e){return new k(`publish`).description(`Publish a no-remote project to GitHub`).requiredOption(`--owner <owner>`,`GitHub owner (user or org)`).requiredOption(`--name <name>`,`Repository name`).requiredOption(`--visibility <visibility>`,`public or private`).option(`--description <description>`,`Repository description`).requiredOption(`--project-dir <projectDir>`,`Path to the project on disk`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSON`,!1).action(async t=>{t.visibility!==`public`&&t.visibility!==`private`&&(process.stderr.write(`✗ visibility must be 'public' or 'private'
85
85
  `),process.exit(1)),await Fd(t,await e())})}function Ld(){let e=new k(`share`);e.description(`Sharing flow operations (owners, name-check, publish)`);let t=()=>cn();return e.addCommand(Td(t)),e.addCommand(Sd(t)),e.addCommand(Id(t)),e}function Rd(){return new k(`share`).description(`Switch this project to shared mode (commit OK config alongside content)`).option(`--project <dir>`,`Project root (defaults to cwd)`).option(`--json`,`Output JSON`,!1).action(async e=>{let t=z(e.project??process.cwd()),n=Sn(t),r=wn(t,hn(t));if(r.kind===`no-exclude`){zd(e.json,t,r.reason);return}let i=Sn(t);if(e.json){let e={type:`sharing-share`,projectRoot:t,mode:i,removed:r.removed};process.stdout.write(`${JSON.stringify(e)}\n`);return}if(n===`shared`){process.stderr.write(`${A(`Sharing mode is already`)} ${F(`shared`)} ${A(`— nothing to do.`)}\n`);return}process.stderr.write(`${M(`✓`)} ${F(`Sharing mode set to`)} ${M(`shared`)}\n`),process.stderr.write(` Removed OK paths from ${F(`.git/info/exclude`)}; commit the files to share with teammates.\n`)})}function zd(e,t,n){if(e){process.stdout.write(`${JSON.stringify({type:`sharing-share`,projectRoot:t,mode:`no-git`,removed:[],reason:n})}\n`);return}process.stderr.write(`${P({"no-git":`No git repository here — sharing mode does not apply.`,"no-info-dir":`The gitdir's info/ folder is absent; cannot toggle sharing mode.`,"malformed-pointer":"The .git pointer file is malformed (stale worktree). Run `git worktree prune` and try again.",inaccessible:`The .git path is inaccessible (permissions or mount issue).`}[n])}\n`)}function Bd(){return new k(`status`).description(`Print the current sharing mode and the OK paths in .git/info/exclude`).option(`--project <dir>`,`Project root (defaults to cwd)`).option(`--json`,`Output JSON`,!1).action(async e=>{let t=z(e.project??process.cwd()),n=Sn(t),r=Cn(t),i=[...kn(t)],a=On(t,hn(t)).tracked;if(e.json){let e={type:`sharing-status`,projectRoot:t,mode:n,skillsShared:r,excluded:i,trackedUpstream:a};process.stdout.write(`${JSON.stringify(e)}\n`);return}let o=[];if(o.push(`OpenKnowledge sharing mode: ${Vd(n)}`),r&&o.push(` ${F(`.ok/skills`)} is committable (carved out); the rest of .ok/ stays local.`),o.push(``),o.push(`Excluded from git via ${F(`.git/info/exclude`)}:`),i.length===0)o.push(` (none)`);else for(let e of i)o.push(` ${e}`);if(o.push(``),o.push(`Other OK paths exist but are tracked upstream:`),a.length===0)o.push(` (none)`);else for(let e of a)o.push(` ${e}`);o.push(``),o.push(`Toggle with: ${A(n===`local-only`?`ok config-sharing share`:`ok config-sharing unshare`)}`),r&&o.push(` (that shares the whole project; to undo only the skills carve-out, use the desktop app: Settings > Config sharing)`),process.stdout.write(`${o.join(`
86
- `)}\n`)})}function Vd(e){switch(e){case`shared`:return M(`shared`);case`local-only`:return M(`local-only`);case`no-git`:return P(`no-git (not a git repository)`)}}function Hd(){return new k(`unshare`).description(`Switch this project to local-only mode (add OK artifacts to .git/info/exclude so they stay out of git)`).option(`--project <dir>`,`Project root (defaults to cwd)`).option(`--json`,`Output JSON`,!1).action(async e=>{let t=z(e.project??process.cwd()),n=vn(t,hn(t));if(n.kind===`refused-tracked`){if(e.json){let e={type:`sharing-unshare`,projectRoot:t,mode:`refused-tracked`,tracked:n.tracked,remediation:n.remediation};process.stdout.write(`${JSON.stringify(e)}\n`)}else process.stderr.write(`${n.remediation}\n`);process.exitCode=1;return}if(n.kind===`no-exclude`){Ud(e.json,t,n.reason);return}let r=Sn(t);if(e.json){let e={type:`sharing-unshare`,projectRoot:t,mode:r,appended:n.appended,alreadyPresent:n.alreadyPresent};process.stdout.write(`${JSON.stringify(e)}\n`);return}if(n.appended.length===0){process.stderr.write(`${F(`Sharing mode is already`)} ${M(`local-only`)} ${F(`— nothing to do.`)}\n`);return}process.stderr.write(`${M(`✓`)} ${F(`Sharing mode set to`)} ${M(`local-only`)}\n`),process.stderr.write(` Added ${n.appended.length} path(s) to ${F(`.git/info/exclude`)} (per-clone, not committed).\n`)})}function Ud(e,t,n){if(e){process.stdout.write(`${JSON.stringify({type:`sharing-unshare`,projectRoot:t,mode:`no-git`,appended:[],alreadyPresent:[],reason:n})}\n`);return}process.stderr.write(`${P({"no-git":`No git repository here — sharing mode does not apply.`,"no-info-dir":`The gitdir's info/ folder is absent; cannot toggle sharing mode.`,"malformed-pointer":"The .git pointer file is malformed (stale worktree). Run `git worktree prune` and try again.",inaccessible:`The .git path is inaccessible (permissions or mount issue).`}[n])}\n`)}function Wd(){let e=new k(`config-sharing`);return e.description(`Manage OpenKnowledge's git-sharing mode (share OK config with the team, or keep local-only on this machine)`),e.addCommand(Rd()),e.addCommand(Hd()),e.addCommand(Bd()),e}const Gd=new Set([`--cwd`,`--log-level`]);function Kd(e){let t=[],n=null,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(a===`--help`||a===`-h`||a===`--version`||a===`-V`){r=!0;break}if(a===`--cwd`||a===`--log-level`){a===`--cwd`&&(n=e[i+1]??null),i++;continue}if(a.startsWith(`--cwd=`)){n=a.slice(6);continue}if(!a.startsWith(`--log-level=`)&&!(a===`--no-color`||a===`--color`)){if(a.startsWith(`-`)){Gd.has(a)&&i++;continue}t.push(a)}}return{operands:t,cwd:n,sawTerminalFlag:r}}function qd(e,t){if(e.length===0)return null;let n=e[0];return n===`open`&&e[1]!==void 0&&t.isFileish(e[1])?e[1]:t.knownSubcommands.has(n)?null:t.isFileish(n)?n:null}function Jd(e){return/\.(md|mdx)$/i.test(e)}function Yd(e,t){if(Jd(t))return!0;try{return H(e).isFile()}catch(t){let n=t?.code;return n!==`ENOENT`&&n!==`ENOTDIR`&&process.stderr.write(`[ok] statSync failed for ${e} (${n??`unknown`}); treating as non-fileish\n`),!1}}function Xd(e=()=>Rn(Vn())){return{prepare:Xe,detectBundlePath:()=>e().bundlePath??null,openTarget:e=>{In(`open`,[e])},runProjectOpen:(e,t)=>od(e,{project:t},nd()),runBrowserOpen:e=>$d(e),log:e=>process.stdout.write(`${e}\n`),error:e=>process.stderr.write(`${e}\n`)}}async function Zd(e,t){let n;try{n=t.prepare(e)}catch(e){if(e instanceof ut||e instanceof St||e instanceof vt)return t.error(e.message),1;throw e}if(n.mode===`project`)return t.runProjectOpen(n.docName,n.projectRoot);if(t.detectBundlePath()){let e=`openknowledge://open?file=${encodeURIComponent(n.canonicalFilePath)}`;return t.openTarget(e),t.log(`Opening ${n.singleDocRelPath} in the OpenKnowledge desktop app.`),0}return await t.runBrowserOpen(n),0}function Qd(){let e=import.meta.dirname??new URL(`.`,import.meta.url).pathname;return[z(e,`public`),z(e,`../../app/dist`),z(e,`../../../app/dist`)].find(e=>B(e))}async function $d(e){let{createEphemeralProjectDir:t}=await import(`./src-Dn98dNdR.mjs`),{loadConfig:n}=await import(`./src-C1NIOm2S.mjs`),{bootStartServer:r,resolveHost:i}=await import(`./start-CJ3wdpkC.mjs`),{openBrowser:a}=await import(`./open-browser-Bu1KY-5f.mjs`),o=Qd();o||(process.stderr.write("OpenKnowledge UI assets were not found. Reinstall @inkeep/open-knowledge, or build the app (`bun run build`) in a monorepo checkout.\n"),process.exit(1));let s=t(e.contentDir),c=!1,l,u=async()=>{if(!c){c=!0;try{await l?.destroy()}catch{}try{await yr(s,{recursive:!0,force:!0})}catch{}}},d=()=>{u().then(()=>process.exit(0))};process.once(`SIGINT`,d),process.once(`SIGTERM`,d);let{config:f}=n(s),p=i({},process.env);try{l=await r({config:f,cwd:s,host:p,port:0,projectDir:s,singleFile:e.canonicalFilePath,serveContentAssets:!0,reactShellDistDir:o,idleThresholdMs:6e5})}catch(t){await u(),process.stderr.write(`Failed to open ${e.singleDocRelPath}: ${t instanceof Error?t.message:String(t)}\n`),process.exit(1)}let m=`http://${p}:${l.port}/#/${qe(e.docName)}`;process.env.OK_SINGLE_FILE_NO_OPEN===`1`?process.stdout.write(`Serving ${e.singleDocRelPath} (headless) at: ${m}\n`):(process.stdout.write(`Opening ${e.singleDocRelPath} in your browser: ${m}\n`),process.stdout.write(`Press Ctrl-C to close the session.
86
+ `)}\n`)})}function Vd(e){switch(e){case`shared`:return M(`shared`);case`local-only`:return M(`local-only`);case`no-git`:return P(`no-git (not a git repository)`)}}function Hd(){return new k(`unshare`).description(`Switch this project to local-only mode (add OK artifacts to .git/info/exclude so they stay out of git)`).option(`--project <dir>`,`Project root (defaults to cwd)`).option(`--json`,`Output JSON`,!1).action(async e=>{let t=z(e.project??process.cwd()),n=vn(t,hn(t));if(n.kind===`refused-tracked`){if(e.json){let e={type:`sharing-unshare`,projectRoot:t,mode:`refused-tracked`,tracked:n.tracked,remediation:n.remediation};process.stdout.write(`${JSON.stringify(e)}\n`)}else process.stderr.write(`${n.remediation}\n`);process.exitCode=1;return}if(n.kind===`no-exclude`){Ud(e.json,t,n.reason);return}let r=Sn(t);if(e.json){let e={type:`sharing-unshare`,projectRoot:t,mode:r,appended:n.appended,alreadyPresent:n.alreadyPresent};process.stdout.write(`${JSON.stringify(e)}\n`);return}if(n.appended.length===0){process.stderr.write(`${F(`Sharing mode is already`)} ${M(`local-only`)} ${F(`— nothing to do.`)}\n`);return}process.stderr.write(`${M(`✓`)} ${F(`Sharing mode set to`)} ${M(`local-only`)}\n`),process.stderr.write(` Added ${n.appended.length} path(s) to ${F(`.git/info/exclude`)} (per-clone, not committed).\n`)})}function Ud(e,t,n){if(e){process.stdout.write(`${JSON.stringify({type:`sharing-unshare`,projectRoot:t,mode:`no-git`,appended:[],alreadyPresent:[],reason:n})}\n`);return}process.stderr.write(`${P({"no-git":`No git repository here — sharing mode does not apply.`,"no-info-dir":`The gitdir's info/ folder is absent; cannot toggle sharing mode.`,"malformed-pointer":"The .git pointer file is malformed (stale worktree). Run `git worktree prune` and try again.",inaccessible:`The .git path is inaccessible (permissions or mount issue).`}[n])}\n`)}function Wd(){let e=new k(`config-sharing`);return e.description(`Manage OpenKnowledge's git-sharing mode (share OK config with the team, or keep local-only on this machine)`),e.addCommand(Rd()),e.addCommand(Hd()),e.addCommand(Bd()),e}const Gd=new Set([`--cwd`,`--log-level`]);function Kd(e){let t=[],n=null,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(a===`--help`||a===`-h`||a===`--version`||a===`-V`){r=!0;break}if(a===`--cwd`||a===`--log-level`){a===`--cwd`&&(n=e[i+1]??null),i++;continue}if(a.startsWith(`--cwd=`)){n=a.slice(6);continue}if(!a.startsWith(`--log-level=`)&&!(a===`--no-color`||a===`--color`)){if(a.startsWith(`-`)){Gd.has(a)&&i++;continue}t.push(a)}}return{operands:t,cwd:n,sawTerminalFlag:r}}function qd(e,t){if(e.length===0)return null;let n=e[0];return n===`open`&&e[1]!==void 0&&t.isFileish(e[1])?e[1]:t.knownSubcommands.has(n)?null:t.isFileish(n)?n:null}function Jd(e){return/\.(md|mdx)$/i.test(e)}function Yd(e,t){if(Jd(t))return!0;try{return H(e).isFile()}catch(t){let n=t?.code;return n!==`ENOENT`&&n!==`ENOTDIR`&&process.stderr.write(`[ok] statSync failed for ${e} (${n??`unknown`}); treating as non-fileish\n`),!1}}function Xd(e=()=>Rn(Vn())){return{prepare:Xe,detectBundlePath:()=>e().bundlePath??null,openTarget:e=>{In(`open`,[e])},runProjectOpen:(e,t)=>od(e,{project:t},nd()),runBrowserOpen:e=>$d(e),log:e=>process.stdout.write(`${e}\n`),error:e=>process.stderr.write(`${e}\n`)}}async function Zd(e,t){let n;try{n=t.prepare(e)}catch(e){if(e instanceof ut||e instanceof St||e instanceof vt)return t.error(e.message),1;throw e}if(n.mode===`project`)return t.runProjectOpen(n.docName,n.projectRoot);if(t.detectBundlePath()){let e=`openknowledge://open?file=${encodeURIComponent(n.canonicalFilePath)}`;return t.openTarget(e),t.log(`Opening ${n.singleDocRelPath} in the OpenKnowledge desktop app.`),0}return await t.runBrowserOpen(n),0}function Qd(){let e=import.meta.dirname??new URL(`.`,import.meta.url).pathname;return[z(e,`public`),z(e,`../../app/dist`),z(e,`../../../app/dist`)].find(e=>B(e))}async function $d(e){let{createEphemeralProjectDir:t}=await import(`./src-DJHJJDlb.mjs`),{loadConfig:n}=await import(`./src-DyGBqgiO.mjs`),{bootStartServer:r,resolveHost:i}=await import(`./start-BqobG-qu.mjs`),{openBrowser:a}=await import(`./open-browser-BeG-Qyr0.mjs`),o=Qd();o||(process.stderr.write("OpenKnowledge UI assets were not found. Reinstall @inkeep/open-knowledge, or build the app (`bun run build`) in a monorepo checkout.\n"),process.exit(1));let s=t(e.contentDir),c=!1,l,u=async()=>{if(!c){c=!0;try{await l?.destroy()}catch{}try{await yr(s,{recursive:!0,force:!0})}catch{}}},d=()=>{u().then(()=>process.exit(0))};process.once(`SIGINT`,d),process.once(`SIGTERM`,d);let{config:f}=n(s),p=i({},process.env);try{l=await r({config:f,cwd:s,host:p,port:0,projectDir:s,singleFile:e.canonicalFilePath,serveContentAssets:!0,reactShellDistDir:o,idleThresholdMs:6e5})}catch(t){await u(),process.stderr.write(`Failed to open ${e.singleDocRelPath}: ${t instanceof Error?t.message:String(t)}\n`),process.exit(1)}let m=`http://${p}:${l.port}/#/${qe(e.docName)}`;process.env.OK_SINGLE_FILE_NO_OPEN===`1`?process.stdout.write(`Serving ${e.singleDocRelPath} (headless) at: ${m}\n`):(process.stdout.write(`Opening ${e.singleDocRelPath} in your browser: ${m}\n`),process.stdout.write(`Press Ctrl-C to close the session.
87
87
  `),a(m)),await new Promise(()=>{})}function ef(){let e=new k(`skills`).description(`Manage Open Knowledge skills for this project.`);return e.command(`installed`).description(`List every skill installed across all your agents (read-only).`).option(`--json`,`Emit the raw enumeration as JSON.`).action(e=>{let t=z(process.cwd()),n=kt(Ge(t)?.rootPath??t),r=Tt({projectDir:n}),i={...r,skills:r.skills.filter(e=>te(e.provenance,n))};if(e.json){process.stdout.write(`${JSON.stringify(i,null,2)}\n`);return}if(i.skills.length===0){process.stdout.write(`${j(`No installed skills found across any agent.`)}\n`);return}process.stdout.write(`${F(`${i.skills.length} installed skill(s):`)}\n`);for(let e of i.skills){let t=e.provenance.version?j(` v${e.provenance.version}`):``,n=[e.inert.commands&&`commands`,e.inert.hooks&&`hooks`,e.inert.mcp&&`mcp`].filter(Boolean),r=n.length>0?j(` [${n.join(`, `)}]`):``;process.stdout.write(` ${M(e.name)}${t} ${j(e.sourceHarnesses.join(`, `))}${r}\n`)}process.stdout.write(`\n${F(`${i.packs.length} pack(s):`)}\n`);for(let e of i.packs)process.stdout.write(` ${A(e.name)} ${j(`v${e.version}`)} — ${e.skills.length} skill(s)\n`)}),e.command(`import <source>`).description(`Import a skill into this project as versioned content (github owner/repo, a git URL, or a local path).`).option(`--skill <name>`,`Pick one skill from a multi-skill source.`).option(`--scope <scope>`,`project (default) or global.`,`project`).action(async(e,t)=>{let n=Kt(D(process.cwd()),`server`);if(n.status!==`alive`){process.stderr.write(`${N(`Error:`)} no running Open Knowledge server for this project. Start it with ${F(`ok start`)} and retry.\n`),process.exitCode=1;return}let r;try{r=await fetch(`http://127.0.0.1:${n.lock.port}/api/skill/import`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({source:e,...t.skill?{skill:t.skill}:{},scope:t.scope===`global`?`global`:`project`})})}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`${N(`Error:`)} could not reach the server: ${t}\n`),process.exitCode=1;return}let i=await r.json().catch(()=>({}));if(!r.ok){let e=i.detail??i.title??`HTTP ${r.status}`;process.stderr.write(`${N(`Import failed:`)} ${e}\n`),process.exitCode=1;return}let a=i.name;if(i.alreadyImported){process.stdout.write(`${A(`Already imported:`)} ${F(a)} (identical content).\n`);return}let o=i.provenance??{},s=i.collisionRenamedFrom;process.stdout.write(`${M(`Imported`)} ${F(a)}${s?j(` (renamed from ${s} — name was taken)`):``} from ${j(o.source??e)}${o.publisher?j(` · ${o.publisher}`):``}.\n${j(`Saved as versioned content in this project's skill home. Scripts shown, never run. Use the skill's install menu (or the install MCP verb) to add it to your other editors.`)}\n`);for(let e of i.warnings??[])process.stdout.write(` ${j(`! ${e}`)}\n`)}),e}function tf(e,t){return{server:nf(`server`,e),ui:nf(`ui`,t)}}function nf(e,t){switch(t.status){case`missing`:return{name:e,state:`missing`,alive:!1};case`corrupt`:return{name:e,state:`corrupt`,alive:!1};case`foreign-host`:return{name:e,state:`foreign-host`,pid:t.lock.pid,port:t.lock.port,startedAt:t.lock.startedAt,host:t.lock.hostname,alive:`unknown`};case`dead-pid`:return{name:e,state:`dead-pid`,pid:t.lock.pid,port:t.lock.port,startedAt:t.lock.startedAt,host:t.lock.hostname,alive:!1};case`alive`:return{name:e,state:`alive`,pid:t.lock.pid,port:t.lock.port,startedAt:t.lock.startedAt,host:t.lock.hostname,alive:!0}}}function rf(e){return`${af(e.server)}\n${af(e.ui)}`}function af(e){let t=e.name===`server`?`server`:`ui `;return e.state===`missing`?`${t} not running`:e.state===`corrupt`?`${t} lock file corrupt — run \`ok clean\``:e.state===`foreign-host`?`${t} foreign host (${e.host}) pid=${e.pid} port=${e.port}`:e.state===`dead-pid`?`${t} stale (dead pid=${e.pid}) — run \`ok clean\``:`${t} alive pid=${e.pid} port=${e.port} started=${e.startedAt}`}function of(e){let t=e.inspect??(t=>Kt(e.lockDir,t)),n=e.log??(e=>console.log(e)),r=tf(t(`server`),t(`ui`));return e.json?n(JSON.stringify(r,null,2)):n(rf(r)),r}function sf(e){return new k(`status`).description(`Show live state of the server + ui lockfiles for this project`).option(`--json`,`Emit structured JSON instead of formatted text`).action(t=>{e(),of({lockDir:D(process.cwd()),json:t.json===!0})})}function Z(e,t,n,r,i){let a=`urn:uuid:${br()}`;if(e.headersSent||e.writableEnded||e.destroyed){console.error(`[ok ui] emitProblem called after headers sent — suppressed`,{type:n,status:t,instance:a});return}let o={type:n,title:r,status:t,instance:a,...i===void 0?{}:{detail:i}},s=ie.safeParse(o);if(!s.success){console.error(`[ok ui] emitProblem produced an invalid ProblemDetails body:`,{issues:s.error.issues,originalStatus:t,body:o}),e.writeHead(500,{"Content-Type":`application/problem+json`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-store`}),e.end(JSON.stringify({type:`urn:ok:error:internal-server-error`,title:`Internal server error.`,status:500,instance:a}));return}e.writeHead(t,{"Content-Type":`application/problem+json`,"X-Content-Type-Options":`nosniff`,"Cache-Control":`no-store`}),e.end(JSON.stringify(o))}const cf=1e4;function lf(e,t){let n=e.socket?.remoteAddress;if(n!==void 0&&!Ot(n))return Z(t,403,`urn:ok:error:loopback-required`,`Request must originate from a loopback address.`),!0;if(!Te(e.headers.host))return Z(t,403,`urn:ok:error:host-not-allowed`,`Host header is not in the loopback allowlist.`),!0;let r=e.headers.origin;return r!==void 0&&!Et(r)?(Z(t,403,`urn:ok:error:invalid-origin`,`Origin header is not in the loopback allowlist.`),!0):!1}const uf=3e4;function df(e,t){let n=e.socket?.remoteAddress;if(n!==void 0&&!Ot(n)||!Te(e.headers.host))return t.destroy(),!0;let r=e.headers.origin;return typeof r==`string`&&!Et(r)?(t.destroy(),!0):!1}function ff(e,t,n,r,i,a){a.add(t),t.once(`close`,()=>a.delete(t));let o=Er({host:r,port:i,timeout:cf});a.add(o),o.once(`close`,()=>a.delete(o));let s=!1,c=n=>{if(!s){if(s=!0,n!==void 0){let t=n.err;console.warn(JSON.stringify({event:n.event,upstreamHost:r,upstreamPort:i,url:e.url,code:t instanceof Error?t.code:void 0,message:t instanceof Error?t.message:void 0}))}try{o.destroy()}catch{}try{t.destroy()}catch{}}};o.once(`connect`,()=>{o.setTimeout(0);let a=[`${e.method??`GET`} ${e.url??`/`} HTTP/1.1`,`host: ${r}:${i}`];for(let[t,n]of Object.entries(e.headers))if(t.toLowerCase()!==`host`&&n!==void 0)if(Array.isArray(n))for(let e of n)a.push(`${t}: ${e}`);else a.push(`${t}: ${n}`);try{o.write(`${a.join(`\r
88
- `)}\r\n\r\n`),n.length>0&&o.write(n)}catch(e){c({event:`proxy-upgrade-handshake-write-failed`,err:e});return}o.on(`data`,e=>{t.writable&&t.write(e)}),t.on(`data`,e=>{o.writable&&o.write(e)})}),o.once(`timeout`,()=>{c({event:`proxy-upgrade-upstream-connect-timeout`})}),o.on(`error`,e=>c({event:`proxy-upgrade-upstream-error`,err:e})),t.on(`error`,e=>c({event:`proxy-upgrade-client-error`,err:e})),o.once(`close`,()=>c()),t.once(`close`,()=>c())}const pf=[`connection`,`keep-alive`,`proxy-authenticate`,`proxy-authorization`,`te`,`trailer`,`transfer-encoding`,`upgrade`,`cookie`,`set-cookie`];async function mf(e){let t=e.upstreamTimeoutMs??cf,n=new Set,r=Cr((n,r)=>{lf(n,r)||gf(n,r,e.upstreamHost,e.upstreamPort,t)});r.on(`upgrade`,(t,r,i)=>{df(t,r)||ff(t,r,i,e.upstreamHost,e.upstreamPort,n)}),await new Promise((t,n)=>{let i=e=>n(e);r.once(`error`,i),r.listen(e.listenPort,e.host,()=>{r.off(`error`,i),t()})});let i=r.address();return{httpServer:r,port:typeof i==`object`&&i?i.port:e.listenPort,close:()=>new Promise(e=>{for(let e of n)try{e.destroy()}catch{}n.clear(),r.close(()=>e()),r.closeIdleConnections()})}}function hf(e,t,n){gf(e,t,n.upstreamHost,n.upstreamPort,n.upstreamTimeoutMs??cf)}function gf(e,t,n,r,i){let a={...e.headers};delete a.host;for(let e of pf)delete a[e];e.setTimeout(uf,()=>{if(t.headersSent)try{t.end()}catch{}else try{Z(t,408,`urn:ok:error:request-timeout`,`Proxy request exceeded the per-request deadline.`,`Slow-loris-class: client did not finish within ${uf/1e3}s.`)}catch{}try{e.socket?.destroy()}catch{}});let o=wr({host:n,port:r,method:e.method,path:e.url,headers:{...a,host:`${n}:${r}`}},e=>{let n={...e.headers};for(let e of pf)delete n[e];t.writeHead(e.statusCode??502,n),e.pipe(t),e.once(`error`,()=>{try{t.end()}catch{}})});i>0&&o.setTimeout(i,()=>{if(!t.headersSent)Z(t,504,`urn:ok:error:gateway-timeout`,`Upstream did not respond before the gateway deadline.`,`Upstream timeout: ${i/1e3}s elapsed without a response.`);else try{t.end()}catch{}o.destroy()}),o.on(`error`,()=>{if(!t.headersSent)Z(t,502,`urn:ok:error:collab-server-not-running`,`Collab server is unreachable.`,`Upstream connection failed or dropped before a response was received.`);else try{t.end()}catch{}}),e.on(`error`,()=>{o.destroy()}),e.pipe(o)}const _f=39847;async function vf(e){await Promise.all(e.map(e=>new Promise(t=>{e.close(()=>t())})))}async function yf(e){let{existsSync:t}=await import(`node:fs`),{createServer:i}=await import(`node:http`),{resolve:a}=await import(`node:path`),{acquireUiLock:o,createAssetServeMiddleware:c,createContentFilter:l,readServerLock:u,releaseUiLock:d,updateUiLockPort:f}=await import(`./src-Dn98dNdR.mjs`),{default:p}=await import(`./build-BcDJ6qQ2.mjs`),{resolveContentDir:m,resolveLockDir:h}=await import(`./src-Dn98dNdR.mjs`),g=m(e.config,e.cwd),_=h(e.cwd);o(_,{port:0,worktreeRoot:e.cwd});let v=import.meta.dirname??new URL(`.`,import.meta.url).pathname,y=[a(v,`public`),a(v,`../../app/dist`),a(v,`../../../app/dist`)],b=e.assetDir??y.find(e=>t(e)),x=b?p(b,{single:!0,gzip:!0,etag:!0,dev:!0,extensions:[]}):null,S=t(g)?c({contentFilter:l({projectDir:e.cwd,contentDir:g}),contentSirv:p(g,{dotfiles:!1,dev:!0,extensions:[]}),inlineExtensions:s,assetExtensions:n,blocklistExtensions:r}):null,C=e.port,w=null,te=(e,t)=>{let n=e.url?.split(`?`)[0];if((n===`/`||n===``)&&(e.url=`/index.html`),!(n?.startsWith(`/api/`)&&lf(e,t))){if(n===`/api/config`&&(e.method===`GET`||e.method===`HEAD`)){w?.();let n=u(_),r=e.headers.host??`localhost:${C}`,i=n&&n.port>0?`ws://${r}/collab`:null,a=JSON.stringify({collabUrl:i,previewUrl:null,port:C});t.setHeader(`Content-Type`,`application/json`),t.setHeader(`Cache-Control`,`no-store`),t.setHeader(`X-Content-Type-Options`,`nosniff`),t.statusCode=200,e.method===`HEAD`?t.end():t.end(a);return}if(n?.startsWith(`/api/`)){w?.();let r=u(_);if(!r||r.port<=0){Z(t,503,`urn:ok:error:collab-server-not-running`,"Collab server not running. Start `ok start` or run `ok status`.",`Path: ${n}`);return}hf(e,t,{upstreamHost:ee,upstreamPort:r.port});return}if(x&&n?.startsWith(`/assets/`)){x(e,t,()=>{S?S(e,t,()=>bf(t)):bf(t)});return}if(S){S(e,t,()=>{x?x(e,t):bf(t)});return}if(x){x(e,t);return}bf(t)}},ne=new Set,re=(e,t,n)=>{if(df(e,t))return;let r=e.url?.split(`?`)[0]??``;if(r!==`/collab`&&!r.startsWith(`/collab/`)){t.destroy();return}let i=u(_);if(!i||i.port<=0){console.warn(JSON.stringify({event:`ok-ui-upgrade-no-collab-lock`,url:r,reason:"server.lock missing or port unbound — is `ok start` running?"})),t.destroy();return}ff(e,t,n,ee,i.port,ne)},ie=()=>{for(let e of ne)try{e.destroy()}catch{}ne.clear()},ae=e.host===void 0?[`::1`,`127.0.0.1`]:[e.host],oe=[],se=e.port,ce=e=>e instanceof Error&&e.code===`EADDRINUSE`,le=async()=>{await Promise.all(oe.splice(0).map(e=>new Promise(t=>{try{e.close(()=>t())}catch{t()}})))},ue=async e=>{se=e;for(let e of ae){let t=i(te);t.on(`upgrade`,re),oe.push(t),await new Promise((n,r)=>{let i=e=>r(e);t.once(`error`,i),t.listen(se,e,()=>{t.off(`error`,i);let e=t.address();typeof e==`object`&&e&&(se=e.port),n()})})}};try{try{await ue(e.port)}catch(t){if(e.fallbackToKernel===!0&&ce(t))await le(),await ue(0);else throw t}}catch(e){await le();try{d(_)}catch{}throw e}let de=se;C=de,f(_,de,`http://localhost:${de}`);let fe=e.scheduler??ye,pe=e.safetyNetMs??432e5,T=null,me=!1,he=!1,ge=()=>{me||(me=!0,T!==null&&(fe.clearTimeout(T),T=null))},_e=()=>{if(ge(),!he){he=!0;try{d(_)}catch{}}},ve=()=>{me||pe<=0||(T!==null&&(fe.clearTimeout(T),T=null),T=fe.setTimeout(()=>{T=null,console.warn(`[ui] safety-net (${pe}ms) reached — shutting down (D-025 backstop)`);try{e.onSafetyNet?.()}catch{}ie();for(let e of oe)try{e.close()}catch{}_e()},pe))},be=()=>{me||pe<=0||ve()};return w=be,ve(),{httpServers:oe,port:de,release:_e,detachSafetyNet:ge,nudgeSafetyNet:be,drainUpgradeSockets:ie}}function bf(e){e.headersSent||e.writableEnded||e.destroyed||(e.setHeader(`X-Content-Type-Options`,`nosniff`),e.setHeader(`Cache-Control`,`no-store`),e.statusCode=404,e.end())}function xf(e,t){if(e!==void 0){let t=Number.parseInt(e,10);if(Number.isNaN(t)||t<0||t>65535)throw Error(`Invalid --port value '${e}'`);return{port:t,fallbackToKernel:!1}}if(t!==void 0&&t!==``){let e=Number.parseInt(t,10);if(Number.isNaN(e)||e<0||e>65535)throw Error(`Invalid PORT env value '${t}'`);return{port:e,fallbackToKernel:!1}}return{port:_f,fallbackToKernel:!0}}async function Sf(e){let t=e.readLock??(async()=>{let{readUiLock:t}=await import(`./src-Dn98dNdR.mjs`);return t(e.lockDir)}),n=await t();if(!n)throw Error(`UI lock collision reported but the lock disappeared before handling — retry acquiring.`);if(n.port===e.requestedPort&&n.port>0)return{mode:`already-running`,port:n.port};let r=n.port;if(r===0){let n=Date.now()+(e.pollDeadlineMs??2e3),i=e.pollIntervalMs??100;for(;Date.now()<n;){await new Promise(e=>{setTimeout(e,i)});let e=await t();if(e&&e.port>0){r=e.port;break}}if(r===0)throw Error("UI did not bind within 2s; run `ok clean`");if(r===e.requestedPort)return{mode:`already-running`,port:r}}return{mode:`proxy`,handle:await mf({listenPort:e.requestedPort,host:e.host,upstreamHost:`localhost`,upstreamPort:r}),upstreamPort:r}}function Cf(e){return new k(`ui`).description(`Serve the OpenKnowledge React editor UI`).option(`-p, --port <port>`,`UI port (default: $PORT env or ${_f}, kernel-allocated fallback if busy)`).option(`-H, --host <host>`,"UI host. Default: two-socket loopback bind (`[::1]` + `127.0.0.1`) so cross-family collisions fail loud. Pass an explicit host (e.g. `127.0.0.1`, `0.0.0.0`) to bind a single socket on that host.").action(async t=>{let{dim:n}=await import(`./colors-MGDi6UGf.mjs`),{UiLockCollisionError:r}=await import(`./src-Dn98dNdR.mjs`),{resolveLockDir:i}=await import(`./src-Dn98dNdR.mjs`),a=e(),o=t.host,s;try{s=xf(t.port,process.env.PORT)}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exitCode=1;return}let c=s.port;try{let e=await yf({config:a,cwd:process.cwd(),port:c,fallbackToKernel:s.fallbackToKernel,host:o}),t=o===void 0||o===`::`||o===`0.0.0.0`?`localhost`:o;console.log(`${n(`[ui]`)} listening on http://${t}:${e.port}`);let r=!1,i=t=>{if(r)return;r=!0,console.log(n(`\n[ui] Shutting down (${t})`)),e.detachSafetyNet();let i=()=>{try{e.release()}finally{process.exit(process.exitCode??0)}};e.drainUpgradeSockets(),vf(e.httpServers).then(i,i),setTimeout(i,2e3).unref()};process.once(`SIGINT`,()=>i(`SIGINT`)),process.once(`SIGTERM`,()=>i(`SIGTERM`));return}catch(e){if(!(e instanceof r))throw e;let t=i(process.cwd()),a=o??`localhost`,s;try{s=await Sf({requestedPort:c,host:a,lockDir:t})}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exit(1)}if(s.mode===`already-running`){if(console.log(`UI already running at http://${a}:${s.port}`),wf(process)){await new Promise(e=>{let t=t=>{console.log(n(`\n[ui-keepalive] Shutting down (${t})`)),e()};process.once(`SIGINT`,()=>t(`SIGINT`)),process.once(`SIGTERM`,()=>t(`SIGTERM`))});return}process.exit(0)}console.log(`UI running at http://${a}:${s.upstreamPort}; acting as HTTP proxy on port ${s.handle.port}`);let l=!1,u=e=>{l||(l=!0,console.log(n(`\n[ui-proxy] Shutting down (${e})`)),s.handle.close().finally(()=>process.exit(process.exitCode??0)),setTimeout(()=>process.exit(process.exitCode??0),2e3).unref())};process.once(`SIGINT`,()=>u(`SIGINT`)),process.once(`SIGTERM`,()=>u(`SIGTERM`))}})}function wf(e){let t=e.stdout.isTTY===!0,n=typeof e.env.PORT==`string`&&e.env.PORT!==``;return!t||n}function Tf(e){if(e.yes===!0||e.json===!0)return!1;let t=e.stdinIsTTY??process.stdin.isTTY,n=e.stdoutIsTTY??process.stdout.isTTY;return t===!0&&n===!0}async function Ef(e,t){let n=Tr({input:e.input,output:e.output});try{return(await n.question(t)).trim()}finally{n.close()}}async function Df(e={}){let t={input:e.input??process.stdin,output:e.output??process.stderr};t.output.write(j(`
88
+ `)}\r\n\r\n`),n.length>0&&o.write(n)}catch(e){c({event:`proxy-upgrade-handshake-write-failed`,err:e});return}o.on(`data`,e=>{t.writable&&t.write(e)}),t.on(`data`,e=>{o.writable&&o.write(e)})}),o.once(`timeout`,()=>{c({event:`proxy-upgrade-upstream-connect-timeout`})}),o.on(`error`,e=>c({event:`proxy-upgrade-upstream-error`,err:e})),t.on(`error`,e=>c({event:`proxy-upgrade-client-error`,err:e})),o.once(`close`,()=>c()),t.once(`close`,()=>c())}const pf=[`connection`,`keep-alive`,`proxy-authenticate`,`proxy-authorization`,`te`,`trailer`,`transfer-encoding`,`upgrade`,`cookie`,`set-cookie`];async function mf(e){let t=e.upstreamTimeoutMs??cf,n=new Set,r=Cr((n,r)=>{lf(n,r)||gf(n,r,e.upstreamHost,e.upstreamPort,t)});r.on(`upgrade`,(t,r,i)=>{df(t,r)||ff(t,r,i,e.upstreamHost,e.upstreamPort,n)}),await new Promise((t,n)=>{let i=e=>n(e);r.once(`error`,i),r.listen(e.listenPort,e.host,()=>{r.off(`error`,i),t()})});let i=r.address();return{httpServer:r,port:typeof i==`object`&&i?i.port:e.listenPort,close:()=>new Promise(e=>{for(let e of n)try{e.destroy()}catch{}n.clear(),r.close(()=>e()),r.closeIdleConnections()})}}function hf(e,t,n){gf(e,t,n.upstreamHost,n.upstreamPort,n.upstreamTimeoutMs??cf)}function gf(e,t,n,r,i){let a={...e.headers};delete a.host;for(let e of pf)delete a[e];e.setTimeout(uf,()=>{if(t.headersSent)try{t.end()}catch{}else try{Z(t,408,`urn:ok:error:request-timeout`,`Proxy request exceeded the per-request deadline.`,`Slow-loris-class: client did not finish within ${uf/1e3}s.`)}catch{}try{e.socket?.destroy()}catch{}});let o=wr({host:n,port:r,method:e.method,path:e.url,headers:{...a,host:`${n}:${r}`}},e=>{let n={...e.headers};for(let e of pf)delete n[e];t.writeHead(e.statusCode??502,n),e.pipe(t),e.once(`error`,()=>{try{t.end()}catch{}})});i>0&&o.setTimeout(i,()=>{if(!t.headersSent)Z(t,504,`urn:ok:error:gateway-timeout`,`Upstream did not respond before the gateway deadline.`,`Upstream timeout: ${i/1e3}s elapsed without a response.`);else try{t.end()}catch{}o.destroy()}),o.on(`error`,()=>{if(!t.headersSent)Z(t,502,`urn:ok:error:collab-server-not-running`,`Collab server is unreachable.`,`Upstream connection failed or dropped before a response was received.`);else try{t.end()}catch{}}),e.on(`error`,()=>{o.destroy()}),e.pipe(o)}const _f=39847;async function vf(e){await Promise.all(e.map(e=>new Promise(t=>{e.close(()=>t())})))}async function yf(e){let{existsSync:t}=await import(`node:fs`),{createServer:i}=await import(`node:http`),{resolve:a}=await import(`node:path`),{acquireUiLock:o,createAssetServeMiddleware:c,createContentFilter:l,readServerLock:u,releaseUiLock:d,updateUiLockPort:f}=await import(`./src-DJHJJDlb.mjs`),{default:p}=await import(`./build-BcDJ6qQ2.mjs`),{resolveContentDir:m,resolveLockDir:h}=await import(`./src-DJHJJDlb.mjs`),g=m(e.config,e.cwd),_=h(e.cwd);o(_,{port:0,worktreeRoot:e.cwd});let v=import.meta.dirname??new URL(`.`,import.meta.url).pathname,y=[a(v,`public`),a(v,`../../app/dist`),a(v,`../../../app/dist`)],b=e.assetDir??y.find(e=>t(e)),x=b?p(b,{single:!0,gzip:!0,etag:!0,dev:!0,extensions:[]}):null,S=t(g)?c({contentFilter:l({projectDir:e.cwd,contentDir:g}),contentSirv:p(g,{dotfiles:!1,dev:!0,extensions:[]}),inlineExtensions:s,assetExtensions:n,blocklistExtensions:r}):null,C=e.port,w=null,te=(e,t)=>{let n=e.url?.split(`?`)[0];if((n===`/`||n===``)&&(e.url=`/index.html`),!(n?.startsWith(`/api/`)&&lf(e,t))){if(n===`/api/config`&&(e.method===`GET`||e.method===`HEAD`)){w?.();let n=u(_),r=e.headers.host??`localhost:${C}`,i=n&&n.port>0?`ws://${r}/collab`:null,a=JSON.stringify({collabUrl:i,previewUrl:null,port:C});t.setHeader(`Content-Type`,`application/json`),t.setHeader(`Cache-Control`,`no-store`),t.setHeader(`X-Content-Type-Options`,`nosniff`),t.statusCode=200,e.method===`HEAD`?t.end():t.end(a);return}if(n?.startsWith(`/api/`)){w?.();let r=u(_);if(!r||r.port<=0){Z(t,503,`urn:ok:error:collab-server-not-running`,"Collab server not running. Start `ok start` or run `ok status`.",`Path: ${n}`);return}hf(e,t,{upstreamHost:ee,upstreamPort:r.port});return}if(x&&n?.startsWith(`/assets/`)){x(e,t,()=>{S?S(e,t,()=>bf(t)):bf(t)});return}if(S){S(e,t,()=>{x?x(e,t):bf(t)});return}if(x){x(e,t);return}bf(t)}},ne=new Set,re=(e,t,n)=>{if(df(e,t))return;let r=e.url?.split(`?`)[0]??``;if(r!==`/collab`&&!r.startsWith(`/collab/`)){t.destroy();return}let i=u(_);if(!i||i.port<=0){console.warn(JSON.stringify({event:`ok-ui-upgrade-no-collab-lock`,url:r,reason:"server.lock missing or port unbound — is `ok start` running?"})),t.destroy();return}ff(e,t,n,ee,i.port,ne)},ie=()=>{for(let e of ne)try{e.destroy()}catch{}ne.clear()},ae=e.host===void 0?[`::1`,`127.0.0.1`]:[e.host],oe=[],se=e.port,ce=e=>e instanceof Error&&e.code===`EADDRINUSE`,le=async()=>{await Promise.all(oe.splice(0).map(e=>new Promise(t=>{try{e.close(()=>t())}catch{t()}})))},ue=async e=>{se=e;for(let e of ae){let t=i(te);t.on(`upgrade`,re),oe.push(t),await new Promise((n,r)=>{let i=e=>r(e);t.once(`error`,i),t.listen(se,e,()=>{t.off(`error`,i);let e=t.address();typeof e==`object`&&e&&(se=e.port),n()})})}};try{try{await ue(e.port)}catch(t){if(e.fallbackToKernel===!0&&ce(t))await le(),await ue(0);else throw t}}catch(e){await le();try{d(_)}catch{}throw e}let de=se;C=de,f(_,de,`http://localhost:${de}`);let fe=e.scheduler??ye,pe=e.safetyNetMs??432e5,T=null,me=!1,he=!1,ge=()=>{me||(me=!0,T!==null&&(fe.clearTimeout(T),T=null))},_e=()=>{if(ge(),!he){he=!0;try{d(_)}catch{}}},ve=()=>{me||pe<=0||(T!==null&&(fe.clearTimeout(T),T=null),T=fe.setTimeout(()=>{T=null,console.warn(`[ui] safety-net (${pe}ms) reached — shutting down (D-025 backstop)`);try{e.onSafetyNet?.()}catch{}ie();for(let e of oe)try{e.close()}catch{}_e()},pe))},be=()=>{me||pe<=0||ve()};return w=be,ve(),{httpServers:oe,port:de,release:_e,detachSafetyNet:ge,nudgeSafetyNet:be,drainUpgradeSockets:ie}}function bf(e){e.headersSent||e.writableEnded||e.destroyed||(e.setHeader(`X-Content-Type-Options`,`nosniff`),e.setHeader(`Cache-Control`,`no-store`),e.statusCode=404,e.end())}function xf(e,t){if(e!==void 0){let t=Number.parseInt(e,10);if(Number.isNaN(t)||t<0||t>65535)throw Error(`Invalid --port value '${e}'`);return{port:t,fallbackToKernel:!1}}if(t!==void 0&&t!==``){let e=Number.parseInt(t,10);if(Number.isNaN(e)||e<0||e>65535)throw Error(`Invalid PORT env value '${t}'`);return{port:e,fallbackToKernel:!1}}return{port:_f,fallbackToKernel:!0}}async function Sf(e){let t=e.readLock??(async()=>{let{readUiLock:t}=await import(`./src-DJHJJDlb.mjs`);return t(e.lockDir)}),n=await t();if(!n)throw Error(`UI lock collision reported but the lock disappeared before handling — retry acquiring.`);if(n.port===e.requestedPort&&n.port>0)return{mode:`already-running`,port:n.port};let r=n.port;if(r===0){let n=Date.now()+(e.pollDeadlineMs??2e3),i=e.pollIntervalMs??100;for(;Date.now()<n;){await new Promise(e=>{setTimeout(e,i)});let e=await t();if(e&&e.port>0){r=e.port;break}}if(r===0)throw Error("UI did not bind within 2s; run `ok clean`");if(r===e.requestedPort)return{mode:`already-running`,port:r}}return{mode:`proxy`,handle:await mf({listenPort:e.requestedPort,host:e.host,upstreamHost:`localhost`,upstreamPort:r}),upstreamPort:r}}function Cf(e){return new k(`ui`).description(`Serve the OpenKnowledge React editor UI`).option(`-p, --port <port>`,`UI port (default: $PORT env or ${_f}, kernel-allocated fallback if busy)`).option(`-H, --host <host>`,"UI host. Default: two-socket loopback bind (`[::1]` + `127.0.0.1`) so cross-family collisions fail loud. Pass an explicit host (e.g. `127.0.0.1`, `0.0.0.0`) to bind a single socket on that host.").action(async t=>{let{dim:n}=await import(`./colors-MGDi6UGf.mjs`),{UiLockCollisionError:r}=await import(`./src-DJHJJDlb.mjs`),{resolveLockDir:i}=await import(`./src-DJHJJDlb.mjs`),a=e(),o=t.host,s;try{s=xf(t.port,process.env.PORT)}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exitCode=1;return}let c=s.port;try{let e=await yf({config:a,cwd:process.cwd(),port:c,fallbackToKernel:s.fallbackToKernel,host:o}),t=o===void 0||o===`::`||o===`0.0.0.0`?`localhost`:o;console.log(`${n(`[ui]`)} listening on http://${t}:${e.port}`);let r=!1,i=t=>{if(r)return;r=!0,console.log(n(`\n[ui] Shutting down (${t})`)),e.detachSafetyNet();let i=()=>{try{e.release()}finally{process.exit(process.exitCode??0)}};e.drainUpgradeSockets(),vf(e.httpServers).then(i,i),setTimeout(i,2e3).unref()};process.once(`SIGINT`,()=>i(`SIGINT`)),process.once(`SIGTERM`,()=>i(`SIGTERM`));return}catch(e){if(!(e instanceof r))throw e;let t=i(process.cwd()),a=o??`localhost`,s;try{s=await Sf({requestedPort:c,host:a,lockDir:t})}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exit(1)}if(s.mode===`already-running`){if(console.log(`UI already running at http://${a}:${s.port}`),wf(process)){await new Promise(e=>{let t=t=>{console.log(n(`\n[ui-keepalive] Shutting down (${t})`)),e()};process.once(`SIGINT`,()=>t(`SIGINT`)),process.once(`SIGTERM`,()=>t(`SIGTERM`))});return}process.exit(0)}console.log(`UI running at http://${a}:${s.upstreamPort}; acting as HTTP proxy on port ${s.handle.port}`);let l=!1,u=e=>{l||(l=!0,console.log(n(`\n[ui-proxy] Shutting down (${e})`)),s.handle.close().finally(()=>process.exit(process.exitCode??0)),setTimeout(()=>process.exit(process.exitCode??0),2e3).unref())};process.once(`SIGINT`,()=>u(`SIGINT`)),process.once(`SIGTERM`,()=>u(`SIGTERM`))}})}function wf(e){let t=e.stdout.isTTY===!0,n=typeof e.env.PORT==`string`&&e.env.PORT!==``;return!t||n}function Tf(e){if(e.yes===!0||e.json===!0)return!1;let t=e.stdinIsTTY??process.stdin.isTTY,n=e.stdoutIsTTY??process.stdout.isTTY;return t===!0&&n===!0}async function Ef(e,t){let n=Tr({input:e.input,output:e.output});try{return(await n.question(t)).trim()}finally{n.close()}}async function Df(e={}){let t={input:e.input??process.stdin,output:e.output??process.stderr};t.output.write(j(`
89
89
  What you share is sent to the OpenKnowledge team.
90
90
  `));let n=await En({message:`Before you go, mind sharing why? (optional)`,default:null,pageSize:re.length+1,choices:[...re.map(e=>({name:e.label,value:e.value})),{name:`Skip, I'd rather not say`,value:null}]},t);if(n===null)return{};let r=await Ef(t,j(`Anything else we should know? (optional) `)),i=await Ef(t,j(`Email, if we may follow up (optional) `));return{reason:n,note:r||void 0,email:i||void 0}}async function Of(e){if(!Tf(e))return`not-prompted`;let t;try{t=await(e.collect??(()=>Df(e)))()}catch{return`failed`}return oe(t)?((e.output??process.stderr).write(`\n${F(`Thank you. We read every response.`)}\n\n`),(await(e.submit??se)({...t,source:`cli_uninstall`,appVersion:e.appVersion,platform:e.platform})).ok?`submitted`:`undelivered`):`skipped`}function kf(e,t,n=Af,r=B){let i=[];for(let t of[`/Applications/OpenKnowledge.app`,L(e,`Applications`,`OpenKnowledge.app`)])r(t)&&i.push({method:`app`,label:`OK Desktop (${t})`,instruction:`Move ${t} to the Trash (or: rm -rf "${t}")`});return n([`ls`,`-g`,`--depth=0`,`@inkeep/open-knowledge`])?.includes(`@inkeep/open-knowledge@`)&&i.push({method:`npm-global`,label:`npm global install`,instruction:`npm uninstall -g @inkeep/open-knowledge`}),t&&/[/\\]_npx[/\\]/.test(t)&&i.push({method:`npx`,label:`npx (ephemeral)`,instruction:`Nothing to uninstall — npx runs from a temporary cache. (Optional: npm cache clean --force)`}),i}function Af(e){try{return Jn(`npm`,e,E({encoding:`utf-8`,timeout:5e3,stdio:[`ignore`,`pipe`,`ignore`]}))}catch{return null}}const jf=`━`.repeat(64);function Mf(e){let t=[P(jf),F(` One more step — remove the OpenKnowledge app itself`),j(` (OpenKnowledge can't delete its own running binary — do this by hand.)`),``];if(e.length===0)t.push(j(` Install method not detected. If you installed it, remove it via:`)),t.push(` ${A(`OK Desktop`)} — move /Applications/OpenKnowledge.app to the Trash`),t.push(` ${A(`npm global`)} — npm uninstall -g @inkeep/open-knowledge`),t.push(` ${A(`npx`)} — nothing to remove (runs from a temporary cache)`);else for(let n of e)t.push(` ${A(n.label)}`),t.push(` ${n.instruction}`);return t.push(P(jf)),t.join(`
91
91
  `)}function Nf(e){return z(e,`..`,`..`)}function Pf(e){return B(L(e,`.ok`))}async function Ff(e){let t=e.findRoot??Ge,n=e.readRecents??Co,r=t(e.cwd)?.rootPath??null,i=xo({home:e.home,platformName:e.platform,env:e.env}),a=new Set;for(let e of n(i))a.add(z(e.path));let o=new Set(e.lockDirs.map(Nf));for(let e of o)a.add(e);r&&a.delete(r);let s=[];r&&Pf(r)&&s.push({path:r,running:o.has(r),current:!0});for(let e of a)Pf(e)&&s.push({path:e,running:o.has(e),current:!1});return s.length===0?[]:e.allProjects?s.map(e=>e.path):e.yes||e.dryRun||!(e.isTTY??process.stdout.isTTY)?[]:(e.promptFn??If)(s)}async function If(e){return _n({message:`Also remove OpenKnowledge from these projects? (space to toggle; none selected by default)
@@ -0,0 +1,2 @@
1
+ import"./src-BgYGdjBz.mjs";var e=`0.50.0-beta.3`;const t=`config.yml`,n=e;export{n,t};
2
+ //# sourceMappingURL=constants-C5tLcIHw.mjs.map
@@ -0,0 +1 @@
1
+ import{r as e}from"./git-handle-Dxwd5VZx.mjs";export{e as createGitInstance};
@@ -1,4 +1,4 @@
1
- import{i as e,o as t,t as n}from"./chunk-DTipWd-i.mjs";import{mo as r}from"./src-Cb3i1kcm.mjs";import{delimiter as i,normalize as a,resolve as o}from"node:path";import{existsSync as s,statSync as c}from"node:fs";import{homedir as l}from"node:os";import{EventEmitter as u}from"node:events";import{spawn as d}from"child_process";var f=n(((e,t)=>{var n=1e3,r=n*60,i=r*60,a=i*24,o=a*7,s=a*365.25;t.exports=function(e,t){t||={};var n=typeof e;if(n===`string`&&e.length>0)return c(e);if(n===`number`&&isFinite(e))return t.long?u(e):l(e);throw Error(`val is not a non-empty string or a valid number. val=`+JSON.stringify(e))};function c(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var c=parseFloat(t[1]);switch((t[2]||`ms`).toLowerCase()){case`years`:case`year`:case`yrs`:case`yr`:case`y`:return c*s;case`weeks`:case`week`:case`w`:return c*o;case`days`:case`day`:case`d`:return c*a;case`hours`:case`hour`:case`hrs`:case`hr`:case`h`:return c*i;case`minutes`:case`minute`:case`mins`:case`min`:case`m`:return c*r;case`seconds`:case`second`:case`secs`:case`sec`:case`s`:return c*n;case`milliseconds`:case`millisecond`:case`msecs`:case`msec`:case`ms`:return c;default:return}}}}function l(e){var t=Math.abs(e);return t>=a?Math.round(e/a)+`d`:t>=i?Math.round(e/i)+`h`:t>=r?Math.round(e/r)+`m`:t>=n?Math.round(e/n)+`s`:e+`ms`}function u(e){var t=Math.abs(e);return t>=a?d(e,t,a,`day`):t>=i?d(e,t,i,`hour`):t>=r?d(e,t,r,`minute`):t>=n?d(e,t,n,`second`):e+` ms`}function d(e,t,n,r){var i=t>=n*1.5;return Math.round(e/n)+` `+r+(i?`s`:``)}})),p=n(((e,t)=>{function n(e){n.debug=n,n.default=n,n.coerce=c,n.disable=o,n.enable=i,n.enabled=s,n.humanize=f(),n.destroy=l,Object.keys(e).forEach(t=>{n[t]=e[t]}),n.names=[],n.skips=[],n.formatters={};function t(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return n.colors[Math.abs(t)%n.colors.length]}n.selectColor=t;function n(e){let t,i=null,a,o;function s(...e){if(!s.enabled)return;let r=s,i=Number(new Date);r.diff=i-(t||i),r.prev=t,r.curr=i,t=i,e[0]=n.coerce(e[0]),typeof e[0]!=`string`&&e.unshift(`%O`);let a=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,(t,i)=>{if(t===`%%`)return`%`;a++;let o=n.formatters[i];if(typeof o==`function`){let n=e[a];t=o.call(r,n),e.splice(a,1),a--}return t}),n.formatArgs.call(r,e),(r.log||n.log).apply(r,e)}return s.namespace=e,s.useColors=n.useColors(),s.color=n.selectColor(e),s.extend=r,s.destroy=n.destroy,Object.defineProperty(s,`enabled`,{enumerable:!0,configurable:!1,get:()=>i===null?(a!==n.namespaces&&(a=n.namespaces,o=n.enabled(e)),o):i,set:e=>{i=e}}),typeof n.init==`function`&&n.init(s),s}function r(e,t){let r=n(this.namespace+(t===void 0?`:`:t)+e);return r.log=this.log,r}function i(e){n.save(e),n.namespaces=e,n.names=[],n.skips=[];let t=(typeof e==`string`?e:``).trim().replace(/\s+/g,`,`).split(`,`).filter(Boolean);for(let e of t)e[0]===`-`?n.skips.push(e.slice(1)):n.names.push(e)}function a(e,t){let n=0,r=0,i=-1,a=0;for(;n<e.length;)if(r<t.length&&(t[r]===e[n]||t[r]===`*`))t[r]===`*`?(i=r,a=n,r++):(n++,r++);else if(i!==-1)r=i+1,a++,n=a;else return!1;for(;r<t.length&&t[r]===`*`;)r++;return r===t.length}function o(){let e=[...n.names,...n.skips.map(e=>`-`+e)].join(`,`);return n.enable(``),e}function s(e){for(let t of n.skips)if(a(e,t))return!1;for(let t of n.names)if(a(e,t))return!0;return!1}function c(e){return e instanceof Error?e.stack||e.message:e}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}t.exports=n})),m=n(((e,t)=>{e.formatArgs=r,e.save=i,e.load=a,e.useColors=n,e.storage=o(),e.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),e.colors=`#0000CC.#0000FF.#0033CC.#0033FF.#0066CC.#0066FF.#0099CC.#0099FF.#00CC00.#00CC33.#00CC66.#00CC99.#00CCCC.#00CCFF.#3300CC.#3300FF.#3333CC.#3333FF.#3366CC.#3366FF.#3399CC.#3399FF.#33CC00.#33CC33.#33CC66.#33CC99.#33CCCC.#33CCFF.#6600CC.#6600FF.#6633CC.#6633FF.#66CC00.#66CC33.#9900CC.#9900FF.#9933CC.#9933FF.#99CC00.#99CC33.#CC0000.#CC0033.#CC0066.#CC0099.#CC00CC.#CC00FF.#CC3300.#CC3333.#CC3366.#CC3399.#CC33CC.#CC33FF.#CC6600.#CC6633.#CC9900.#CC9933.#CCCC00.#CCCC33.#FF0000.#FF0033.#FF0066.#FF0099.#FF00CC.#FF00FF.#FF3300.#FF3333.#FF3366.#FF3399.#FF33CC.#FF33FF.#FF6600.#FF6633.#FF9900.#FF9933.#FFCC00.#FFCC33`.split(`.`);function n(){if(typeof window<`u`&&window.process&&(window.process.type===`renderer`||window.process.__nwjs))return!0;if(typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let e;return typeof document<`u`&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<`u`&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<`u`&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function r(e){if(e[0]=(this.useColors?`%c`:``)+this.namespace+(this.useColors?` %c`:` `)+e[0]+(this.useColors?`%c `:` `)+`+`+t.exports.humanize(this.diff),!this.useColors)return;let n=`color: `+this.color;e.splice(1,0,n,`color: inherit`);let r=0,i=0;e[0].replace(/%[a-zA-Z%]/g,e=>{e!==`%%`&&(r++,e===`%c`&&(i=r))}),e.splice(i,0,n)}e.log=console.debug||console.log||(()=>{});function i(t){try{t?e.storage.setItem(`debug`,t):e.storage.removeItem(`debug`)}catch{}}function a(){let t;try{t=e.storage.getItem(`debug`)||e.storage.getItem(`DEBUG`)}catch{}return!t&&typeof process<`u`&&`env`in process&&(t=process.env.DEBUG),t}function o(){try{return localStorage}catch{}}t.exports=p()(e);let{formatters:s}=t.exports;s.j=function(e){try{return JSON.stringify(e)}catch(e){return`[UnexpectedJSONParseError]: `+e.message}}})),ee=n(((e,t)=>{t.exports=(e,t=process.argv)=>{let n=e.startsWith(`-`)?``:e.length===1?`-`:`--`,r=t.indexOf(n+e),i=t.indexOf(`--`);return r!==-1&&(i===-1||r<i)}})),te=n(((t,n)=>{let r=e(`os`),i=e(`tty`),a=ee(),{env:o}=process,s;a(`no-color`)||a(`no-colors`)||a(`color=false`)||a(`color=never`)?s=0:(a(`color`)||a(`colors`)||a(`color=true`)||a(`color=always`))&&(s=1),`FORCE_COLOR`in o&&(s=o.FORCE_COLOR===`true`?1:o.FORCE_COLOR===`false`?0:o.FORCE_COLOR.length===0?1:Math.min(parseInt(o.FORCE_COLOR,10),3));function c(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function l(e,t){if(s===0)return 0;if(a(`color=16m`)||a(`color=full`)||a(`color=truecolor`))return 3;if(a(`color=256`))return 2;if(e&&!t&&s===void 0)return 0;let n=s||0;if(o.TERM===`dumb`)return n;if(process.platform===`win32`){let e=r.release().split(`.`);return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if(`CI`in o)return[`TRAVIS`,`CIRCLECI`,`APPVEYOR`,`GITLAB_CI`,`GITHUB_ACTIONS`,`BUILDKITE`].some(e=>e in o)||o.CI_NAME===`codeship`?1:n;if(`TEAMCITY_VERSION`in o)return+!!/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(o.TEAMCITY_VERSION);if(o.COLORTERM===`truecolor`)return 3;if(`TERM_PROGRAM`in o){let e=parseInt((o.TERM_PROGRAM_VERSION||``).split(`.`)[0],10);switch(o.TERM_PROGRAM){case`iTerm.app`:return e>=3?3:2;case`Apple_Terminal`:return 2}}return/-256(color)?$/i.test(o.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(o.TERM)||`COLORTERM`in o?1:n}function u(e){return c(l(e,e&&e.isTTY))}n.exports={supportsColor:u,stdout:c(l(!0,i.isatty(1))),stderr:c(l(!0,i.isatty(2)))}})),ne=n(((t,n)=>{let r=e(`tty`),i=e(`util`);t.init=d,t.log=c,t.formatArgs=o,t.save=l,t.load=u,t.useColors=a,t.destroy=i.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),t.colors=[6,2,3,4,5,1];try{let e=te();e&&(e.stderr||e).level>=2&&(t.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}t.inspectOpts=Object.keys(process.env).filter(e=>/^debug_/i.test(e)).reduce((e,t)=>{let n=t.substring(6).toLowerCase().replace(/_([a-z])/g,(e,t)=>t.toUpperCase()),r=process.env[t];return r=/^(yes|on|true|enabled)$/i.test(r)?!0:/^(no|off|false|disabled)$/i.test(r)?!1:r===`null`?null:Number(r),e[n]=r,e},{});function a(){return`colors`in t.inspectOpts?!!t.inspectOpts.colors:r.isatty(process.stderr.fd)}function o(e){let{namespace:t,useColors:r}=this;if(r){let r=this.color,i=`\x1B[3`+(r<8?r:`8;5;`+r),a=` ${i};1m${t} \u001B[0m`;e[0]=a+e[0].split(`
1
+ import{i as e,o as t,t as n}from"./chunk-DTipWd-i.mjs";import{mo as r}from"./src-BgYGdjBz.mjs";import{delimiter as i,normalize as a,resolve as o}from"node:path";import{existsSync as s,statSync as c}from"node:fs";import{homedir as l}from"node:os";import{EventEmitter as u}from"node:events";import{spawn as d}from"child_process";var f=n(((e,t)=>{var n=1e3,r=n*60,i=r*60,a=i*24,o=a*7,s=a*365.25;t.exports=function(e,t){t||={};var n=typeof e;if(n===`string`&&e.length>0)return c(e);if(n===`number`&&isFinite(e))return t.long?u(e):l(e);throw Error(`val is not a non-empty string or a valid number. val=`+JSON.stringify(e))};function c(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var c=parseFloat(t[1]);switch((t[2]||`ms`).toLowerCase()){case`years`:case`year`:case`yrs`:case`yr`:case`y`:return c*s;case`weeks`:case`week`:case`w`:return c*o;case`days`:case`day`:case`d`:return c*a;case`hours`:case`hour`:case`hrs`:case`hr`:case`h`:return c*i;case`minutes`:case`minute`:case`mins`:case`min`:case`m`:return c*r;case`seconds`:case`second`:case`secs`:case`sec`:case`s`:return c*n;case`milliseconds`:case`millisecond`:case`msecs`:case`msec`:case`ms`:return c;default:return}}}}function l(e){var t=Math.abs(e);return t>=a?Math.round(e/a)+`d`:t>=i?Math.round(e/i)+`h`:t>=r?Math.round(e/r)+`m`:t>=n?Math.round(e/n)+`s`:e+`ms`}function u(e){var t=Math.abs(e);return t>=a?d(e,t,a,`day`):t>=i?d(e,t,i,`hour`):t>=r?d(e,t,r,`minute`):t>=n?d(e,t,n,`second`):e+` ms`}function d(e,t,n,r){var i=t>=n*1.5;return Math.round(e/n)+` `+r+(i?`s`:``)}})),p=n(((e,t)=>{function n(e){n.debug=n,n.default=n,n.coerce=c,n.disable=o,n.enable=i,n.enabled=s,n.humanize=f(),n.destroy=l,Object.keys(e).forEach(t=>{n[t]=e[t]}),n.names=[],n.skips=[],n.formatters={};function t(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return n.colors[Math.abs(t)%n.colors.length]}n.selectColor=t;function n(e){let t,i=null,a,o;function s(...e){if(!s.enabled)return;let r=s,i=Number(new Date);r.diff=i-(t||i),r.prev=t,r.curr=i,t=i,e[0]=n.coerce(e[0]),typeof e[0]!=`string`&&e.unshift(`%O`);let a=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,(t,i)=>{if(t===`%%`)return`%`;a++;let o=n.formatters[i];if(typeof o==`function`){let n=e[a];t=o.call(r,n),e.splice(a,1),a--}return t}),n.formatArgs.call(r,e),(r.log||n.log).apply(r,e)}return s.namespace=e,s.useColors=n.useColors(),s.color=n.selectColor(e),s.extend=r,s.destroy=n.destroy,Object.defineProperty(s,`enabled`,{enumerable:!0,configurable:!1,get:()=>i===null?(a!==n.namespaces&&(a=n.namespaces,o=n.enabled(e)),o):i,set:e=>{i=e}}),typeof n.init==`function`&&n.init(s),s}function r(e,t){let r=n(this.namespace+(t===void 0?`:`:t)+e);return r.log=this.log,r}function i(e){n.save(e),n.namespaces=e,n.names=[],n.skips=[];let t=(typeof e==`string`?e:``).trim().replace(/\s+/g,`,`).split(`,`).filter(Boolean);for(let e of t)e[0]===`-`?n.skips.push(e.slice(1)):n.names.push(e)}function a(e,t){let n=0,r=0,i=-1,a=0;for(;n<e.length;)if(r<t.length&&(t[r]===e[n]||t[r]===`*`))t[r]===`*`?(i=r,a=n,r++):(n++,r++);else if(i!==-1)r=i+1,a++,n=a;else return!1;for(;r<t.length&&t[r]===`*`;)r++;return r===t.length}function o(){let e=[...n.names,...n.skips.map(e=>`-`+e)].join(`,`);return n.enable(``),e}function s(e){for(let t of n.skips)if(a(e,t))return!1;for(let t of n.names)if(a(e,t))return!0;return!1}function c(e){return e instanceof Error?e.stack||e.message:e}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}t.exports=n})),m=n(((e,t)=>{e.formatArgs=r,e.save=i,e.load=a,e.useColors=n,e.storage=o(),e.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),e.colors=`#0000CC.#0000FF.#0033CC.#0033FF.#0066CC.#0066FF.#0099CC.#0099FF.#00CC00.#00CC33.#00CC66.#00CC99.#00CCCC.#00CCFF.#3300CC.#3300FF.#3333CC.#3333FF.#3366CC.#3366FF.#3399CC.#3399FF.#33CC00.#33CC33.#33CC66.#33CC99.#33CCCC.#33CCFF.#6600CC.#6600FF.#6633CC.#6633FF.#66CC00.#66CC33.#9900CC.#9900FF.#9933CC.#9933FF.#99CC00.#99CC33.#CC0000.#CC0033.#CC0066.#CC0099.#CC00CC.#CC00FF.#CC3300.#CC3333.#CC3366.#CC3399.#CC33CC.#CC33FF.#CC6600.#CC6633.#CC9900.#CC9933.#CCCC00.#CCCC33.#FF0000.#FF0033.#FF0066.#FF0099.#FF00CC.#FF00FF.#FF3300.#FF3333.#FF3366.#FF3399.#FF33CC.#FF33FF.#FF6600.#FF6633.#FF9900.#FF9933.#FFCC00.#FFCC33`.split(`.`);function n(){if(typeof window<`u`&&window.process&&(window.process.type===`renderer`||window.process.__nwjs))return!0;if(typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let e;return typeof document<`u`&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<`u`&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<`u`&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function r(e){if(e[0]=(this.useColors?`%c`:``)+this.namespace+(this.useColors?` %c`:` `)+e[0]+(this.useColors?`%c `:` `)+`+`+t.exports.humanize(this.diff),!this.useColors)return;let n=`color: `+this.color;e.splice(1,0,n,`color: inherit`);let r=0,i=0;e[0].replace(/%[a-zA-Z%]/g,e=>{e!==`%%`&&(r++,e===`%c`&&(i=r))}),e.splice(i,0,n)}e.log=console.debug||console.log||(()=>{});function i(t){try{t?e.storage.setItem(`debug`,t):e.storage.removeItem(`debug`)}catch{}}function a(){let t;try{t=e.storage.getItem(`debug`)||e.storage.getItem(`DEBUG`)}catch{}return!t&&typeof process<`u`&&`env`in process&&(t=process.env.DEBUG),t}function o(){try{return localStorage}catch{}}t.exports=p()(e);let{formatters:s}=t.exports;s.j=function(e){try{return JSON.stringify(e)}catch(e){return`[UnexpectedJSONParseError]: `+e.message}}})),ee=n(((e,t)=>{t.exports=(e,t=process.argv)=>{let n=e.startsWith(`-`)?``:e.length===1?`-`:`--`,r=t.indexOf(n+e),i=t.indexOf(`--`);return r!==-1&&(i===-1||r<i)}})),te=n(((t,n)=>{let r=e(`os`),i=e(`tty`),a=ee(),{env:o}=process,s;a(`no-color`)||a(`no-colors`)||a(`color=false`)||a(`color=never`)?s=0:(a(`color`)||a(`colors`)||a(`color=true`)||a(`color=always`))&&(s=1),`FORCE_COLOR`in o&&(s=o.FORCE_COLOR===`true`?1:o.FORCE_COLOR===`false`?0:o.FORCE_COLOR.length===0?1:Math.min(parseInt(o.FORCE_COLOR,10),3));function c(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function l(e,t){if(s===0)return 0;if(a(`color=16m`)||a(`color=full`)||a(`color=truecolor`))return 3;if(a(`color=256`))return 2;if(e&&!t&&s===void 0)return 0;let n=s||0;if(o.TERM===`dumb`)return n;if(process.platform===`win32`){let e=r.release().split(`.`);return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if(`CI`in o)return[`TRAVIS`,`CIRCLECI`,`APPVEYOR`,`GITLAB_CI`,`GITHUB_ACTIONS`,`BUILDKITE`].some(e=>e in o)||o.CI_NAME===`codeship`?1:n;if(`TEAMCITY_VERSION`in o)return+!!/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(o.TEAMCITY_VERSION);if(o.COLORTERM===`truecolor`)return 3;if(`TERM_PROGRAM`in o){let e=parseInt((o.TERM_PROGRAM_VERSION||``).split(`.`)[0],10);switch(o.TERM_PROGRAM){case`iTerm.app`:return e>=3?3:2;case`Apple_Terminal`:return 2}}return/-256(color)?$/i.test(o.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(o.TERM)||`COLORTERM`in o?1:n}function u(e){return c(l(e,e&&e.isTTY))}n.exports={supportsColor:u,stdout:c(l(!0,i.isatty(1))),stderr:c(l(!0,i.isatty(2)))}})),ne=n(((t,n)=>{let r=e(`tty`),i=e(`util`);t.init=d,t.log=c,t.formatArgs=o,t.save=l,t.load=u,t.useColors=a,t.destroy=i.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),t.colors=[6,2,3,4,5,1];try{let e=te();e&&(e.stderr||e).level>=2&&(t.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}t.inspectOpts=Object.keys(process.env).filter(e=>/^debug_/i.test(e)).reduce((e,t)=>{let n=t.substring(6).toLowerCase().replace(/_([a-z])/g,(e,t)=>t.toUpperCase()),r=process.env[t];return r=/^(yes|on|true|enabled)$/i.test(r)?!0:/^(no|off|false|disabled)$/i.test(r)?!1:r===`null`?null:Number(r),e[n]=r,e},{});function a(){return`colors`in t.inspectOpts?!!t.inspectOpts.colors:r.isatty(process.stderr.fd)}function o(e){let{namespace:t,useColors:r}=this;if(r){let r=this.color,i=`\x1B[3`+(r<8?r:`8;5;`+r),a=` ${i};1m${t} \u001B[0m`;e[0]=a+e[0].split(`
2
2
  `).join(`
3
3
  `+a),e.push(i+`m+`+n.exports.humanize(this.diff)+`\x1B[0m`)}else e[0]=s()+t+` `+e[0]}function s(){return t.inspectOpts.hideDate?``:new Date().toISOString()+` `}function c(...e){return process.stderr.write(i.formatWithOptions(t.inspectOpts,...e)+`
4
4
  `)}function l(e){e?process.env.DEBUG=e:delete process.env.DEBUG}function u(){return process.env.DEBUG}function d(e){e.inspectOpts={};let n=Object.keys(t.inspectOpts);for(let r=0;r<n.length;r++)e.inspectOpts[n[r]]=t.inspectOpts[n[r]]}n.exports=p()(t);let{formatters:f}=n.exports;f.o=function(e){return this.inspectOpts.colors=this.useColors,i.inspect(e,this.inspectOpts).split(`
@@ -7,4 +7,4 @@ import{i as e,o as t,t as n}from"./chunk-DTipWd-i.mjs";import{mo as r}from"./src
7
7
  `)){let e=it(i,`
8
8
  `);a=e[0],i=e[1]}yield{file:r,key:a,value:i}}}var Tn,En=S({"src/lib/responses/ConfigList.ts"(){q(),Tn=class{constructor(){this.files=[],this.values=Object.create(null)}get all(){return this._all||=this.files.reduce((e,t)=>Object.assign(e,this.values[t]),{}),this._all}addFile(e){if(!(e in this.values)){let t=O(this.files);this.values[e]=t?Object.create(this.values[t]):{},this.files.push(e)}return this.values[e]}addValue(e,t,n){let r=this.addFile(e);Object.hasOwn(r,t)?Array.isArray(r[t])?r[t].push(n):r[t]=[r[t],n]:r[t]=n,this._all=void 0}}}});function Dn(e,t){return typeof e==`string`&&Object.hasOwn(Mn,e)?e:t}function On(e,t,n,r){let i=[`config`,`--${r}`];return n&&i.push(`--add`),i.push(e,t),{commands:i,format:`utf-8`,parser(e){return e}}}function kn(e,t){let n=[`config`,`--null`,`--show-origin`,`--get-all`,e];return t&&n.splice(1,0,`--${t}`),{commands:n,format:`utf-8`,parser(t){return Sn(t,e)}}}function An(e){let t=[`config`,`--list`,`--show-origin`,`--null`];return e&&t.push(`--${e}`),{commands:t,format:`utf-8`,parser(e){return xn(e)}}}function jn(){return{addConfig(e,t,...n){return this._runTask(On(e,t,n[0]===!0,Dn(n[1],`local`)),G(arguments))},getConfig(e,t){return this._runTask(kn(e,Dn(t,void 0)),G(arguments))},listConfig(...e){return this._runTask(An(Dn(e[0],void 0)),G(arguments))}}}var Mn,Nn=S({"src/lib/tasks/config.ts"(){En(),q(),Mn=(e=>(e.system=`system`,e.global=`global`,e.local=`local`,e.worktree=`worktree`,e))(Mn||{})}});function Pn(e){return In.has(e)}var Fn,In,Ln=S({"src/lib/tasks/diff-name-status.ts"(){Fn=(e=>(e.ADDED=`A`,e.COPIED=`C`,e.DELETED=`D`,e.MODIFIED=`M`,e.RENAMED=`R`,e.CHANGED=`T`,e.UNMERGED=`U`,e.UNKNOWN=`X`,e.BROKEN=`B`,e))(Fn||{}),In=new Set(Object.values(Fn))}});function Rn(...e){return new Wn().param(...e)}function zn(e){let t=new Set,n={};return st(e,e=>{let[r,i,a]=e.split(I);t.add(r),(n[r]=n[r]||[]).push({line:N(i),path:r,preview:a})}),{paths:t,results:n}}function Bn(){return{grep(e){let t=G(arguments),n=W(arguments);for(let e of Vn)if(n.includes(e))return this._runTask(J(`git.grep: use of "${e}" is not supported.`),t);typeof e==`string`&&(e=Rn().param(e));let r=[`grep`,`--null`,`-n`,`--full-name`,...n,...e];return this._runTask({commands:r,format:`utf-8`,parser(e){return zn(e)}},t)}}}var Vn,Hn,Un,Wn,Gn=S({"src/lib/tasks/grep.ts"(){q(),X(),Vn=[`-h`],Hn=Symbol(`grepQuery`),Wn=class{constructor(){this[Un]=[]}*[(Un=Hn,Symbol.iterator)](){for(let e of this[Hn])yield e}and(...e){return e.length&&this[Hn].push(`--and`,`(`,...P(e,`-e`),`)`),this}param(...e){return this[Hn].push(...P(e,`-e`)),this}}}}),Kn={};C(Kn,{ResetMode:()=>Xn,getResetMode:()=>Jn,resetTask:()=>qn});function qn(e,t){let n=[`reset`];return Yn(e)&&n.push(`--${e}`),n.push(...t),Y(n)}function Jn(e){if(Yn(e))return e;switch(typeof e){case`string`:case`undefined`:return`soft`}}function Yn(e){return typeof e==`string`&&Zn.includes(e)}var Xn,Zn,Qn=S({"src/lib/tasks/reset.ts"(){q(),X(),Xn=(e=>(e.MIXED=`mixed`,e.SOFT=`soft`,e.HARD=`hard`,e.MERGE=`merge`,e.KEEP=`keep`,e))(Xn||{}),Zn=M(Object.values(Xn))}});function $n(){return(0,ue.default)(`simple-git`)}function er(e,t,n){return!t||!String(t).replace(/\s*/,``)?n?(t,...r)=>{e(t,...r),n(t,...r)}:e:(r,...i)=>{e(`%s ${r}`,t,...i),n&&n(r,...i)}}function tr(e,t,{namespace:n}){if(typeof e==`string`)return e;let r=t&&t.namespace||``;return r.startsWith(n)?r.substr(n.length+1):r||n}function nr(e,t,n,r=$n()){let i=e&&`[${e}]`||``,a=[],o=typeof t==`string`?r.extend(t):t,s=tr(z(t,V),o,r);return l(n);function c(t,n){return A(a,nr(e,s.replace(/^[^:]+/,t),n,r))}function l(t){let n=t&&`[${t}]`||``,a=o&&er(o,n)||L,s=er(r,`${i} ${n}`,a);return Object.assign(o?a:s,{label:e,sibling:c,info:s,step:l})}}var rr=S({"src/lib/git-logger.ts"(){q(),ue.default.formatters.L=e=>String(xt(e)?e.length:`-`),ue.default.formatters.B=e=>Buffer.isBuffer(e)?e.toString(`utf8`):R(e)}}),ir,ar=S({"src/lib/runners/tasks-pending-queue.ts"(){E(),rr(),ir=class e{constructor(e=`GitExecutor`){this.logLabel=e,this._queue=new Map}withProgress(e){return this._queue.get(e)}createProgress(t){let n=e.getName(t.commands[0]);return{task:t,logger:nr(this.logLabel,n),name:n}}push(e){let t=this.createProgress(e);return t.logger(`Adding task to the queue, commands = %o`,e.commands),this._queue.set(e,t),t}fatal(e){for(let[t,{logger:n}]of Array.from(this._queue.entries()))t===e.task?(n.info(`Failed %o`,e),n(`Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`)):n.info(`A fatal exception occurred in a previous task, the queue has been purged: %o`,e.message),this.complete(t);if(this._queue.size!==0)throw Error(`Queue size should be zero after fatal: ${this._queue.size}`)}complete(e){this.withProgress(e)&&this._queue.delete(e)}attempt(e){let t=this.withProgress(e);if(!t)throw new T(void 0,`TasksPendingQueue: attempt called for an unknown task`);return t.logger(`Starting task`),t}static getName(t=`empty`){return`task:${t}:${++e.counter}`}static{this.counter=0}}}});function Z(e,t){return{method:at(e.commands)||``,commands:t}}function or(e,t){return n=>{t(`[ERROR] child process exception %o`,n),e.push(Buffer.from(String(n.stack),`ascii`))}}function sr(e,t,n,r){return i=>{n(`%s received %L bytes`,t,i),r(`%B`,i),e.push(i)}}var cr,lr=S({"src/lib/runners/git-executor-chain.ts"(){E(),X(),q(),ar(),cr=class{constructor(e,t,n){this._executor=e,this._scheduler=t,this._plugins=n,this._chain=Promise.resolve(),this._queue=new ir}get cwd(){return this._cwd||this._executor.cwd}set cwd(e){this._cwd=e}get env(){return this._executor.env}get outputHandler(){return this._executor.outputHandler}chain(){return this}push(e){return this._queue.push(e),this._chain=this._chain.then(()=>this.attemptTask(e))}async attemptTask(e){let t=await this._scheduler.next(),n=()=>this._queue.complete(e);try{let{logger:t}=this._queue.attempt(e);return await(an(e)?this.attemptEmptyTask(e,t):this.attemptRemoteTask(e,t))}catch(t){throw this.onFatalException(e,t)}finally{n(),t()}}onFatalException(e,t){let n=t instanceof T?Object.assign(t,{task:e}):new T(e,t&&String(t));return this._chain=Promise.resolve(),this._queue.fatal(n),n}async attemptRemoteTask(e,t){let n=this._plugins.exec(`spawn.binary`,``,Z(e,e.commands)),r=this._plugins.exec(`spawn.args`,[...e.commands],{...Z(e,e.commands),env:{...this.env}}),i=await this.gitResponse(e,n,r,this.outputHandler,t.step(`SPAWN`)),a=await this.handleTaskData(e,r,i,t.step(`HANDLE`));return t(`passing response to task's parser as a %s`,e.format),rn(e)?It(e.parser,a):It(e.parser,a.asStrings())}async attemptEmptyTask(e,t){return t(`empty task bypassing child process to call to task's parser`),e.parser(this)}handleTaskData(e,t,n,r){let{exitCode:i,rejection:a,stdOut:o,stdErr:s}=n;return new Promise((c,l)=>{r(`Preparing to handle process response exitCode=%d stdOut=`,i);let{error:u}=this._plugins.exec(`task.error`,{error:a},{...Z(e,t),...n});if(u&&e.onError)return r.info(`exitCode=%s handling with custom error handler`),e.onError(n,u,e=>{r.info(`custom error handler treated as success`),r(`custom error returned a %s`,R(e)),c(new Tt(Array.isArray(e)?Buffer.concat(e):e,Buffer.concat(s)))},l);if(u)return r.info(`handling as error: exitCode=%s stdErr=%s rejection=%o`,i,s.length,a),l(u);r.info(`retrieving task output complete`),c(new Tt(Buffer.concat(o),Buffer.concat(s)))})}async gitResponse(e,t,n,r,i){let a=i.sibling(`output`),o=this._plugins.exec(`spawn.options`,{cwd:this.cwd,env:this.env,windowsHide:!0},Z(e,e.commands));return new Promise(s=>{let c=[],l=[];i.info(`%s %o`,t,n),i(`%O`,o);let u=this._beforeSpawn(e,n);if(u)return s({stdOut:c,stdErr:l,exitCode:9901,rejection:u});this._plugins.exec(`spawn.before`,void 0,{...Z(e,n),kill(e){u=e||u}});let f=d(t,n,o);f.stdout.on(`data`,sr(c,`stdOut`,i,a.step(`stdOut`))),f.stderr.on(`data`,sr(l,`stdErr`,i,a.step(`stdErr`))),f.on(`error`,or(l,i)),r&&(i(`Passing child process stdOut/stdErr to custom outputHandler`),r(t,f.stdout,f.stderr,[...n])),this._plugins.exec(`spawn.after`,void 0,{...Z(e,n),spawned:f,close(e,t){s({stdOut:c,stdErr:l,exitCode:e,rejection:u||t})},kill(e){f.killed||(u=e,f.kill(`SIGINT`))}})})}_beforeSpawn(e,t){let n;return this._plugins.exec(`spawn.before`,void 0,{...Z(e,t),kill(e){n=e||n}}),n}}}}),ur={};C(ur,{GitExecutor:()=>dr});var dr,fr=S({"src/lib/runners/git-executor.ts"(){lr(),dr=class{constructor(e,t,n){this.cwd=e,this._scheduler=t,this._plugins=n,this._chain=new cr(this,this._scheduler,this._plugins)}chain(){return new cr(this,this._scheduler,this._plugins)}push(e){return this._chain.push(e)}}}});function pr(e,t,n=L){t.then(e=>{n(null,e)},t=>{t?.task===e&&n(t instanceof $e?mr(t):t,void 0)})}function mr(e){let t=e=>{console.warn(`simple-git deprecation notice: accessing GitResponseError.${e} should be GitResponseError.git.${e}, this will no longer be available in version 3`),t=L};return Object.create(e,Object.getOwnPropertyNames(e.git).reduce(n,{}));function n(n,r){return r in e||(n[r]={enumerable:!1,configurable:!1,get(){return t(r),e.git[r]}}),n}}var hr=S({"src/lib/task-callback.ts"(){D(),q()}});function gr(e,t){return tn(n=>{if(!ct(e))throw Error(`Git.cwd: cannot change to non-directory "${e}"`);return(t||n).cwd=e})}var _r=S({"src/lib/tasks/change-working-directory.ts"(){q(),X()}});function vr(e){let t=[`checkout`,...e];return t[1]===`-b`&&t.includes(`-B`)&&(t[1]=ut(t,`-B`)),Y(t)}function yr(){return{checkout(){return this._runTask(vr(W(arguments,1)),G(arguments))},checkoutBranch(e,t){return this._runTask(vr([`-b`,e,t,...W(arguments)]),G(arguments))},checkoutLocalBranch(e){return this._runTask(vr([`-b`,e,...W(arguments)]),G(arguments))}}}var br=S({"src/lib/tasks/checkout.ts"(){q(),X()}});function xr(){return{count:0,garbage:0,inPack:0,packs:0,prunePackable:0,size:0,sizeGarbage:0,sizePack:0}}function Sr(){return{countObjects(){return this._runTask({commands:[`count-objects`,`--verbose`],format:`utf-8`,parser(e){return K(xr(),[Cr],e)}})}}}var Cr,wr=S({"src/lib/tasks/count-objects.ts"(){q(),Cr=new H(/([a-z-]+): (\d+)$/,(e,[t,n])=>{let r=dt(t);Object.hasOwn(e,r)&&(e[r]=N(n))})}});function Tr(e){return K({author:null,branch:``,commit:``,root:!1,summary:{changes:0,insertions:0,deletions:0}},Er,e)}var Er,Dr=S({"src/lib/parsers/parse-commit.ts"(){q(),Er=[new H(/^\[([^\s]+)( \([^)]+\))? ([^\]]+)/,(e,[t,n,r])=>{e.branch=t,e.commit=r,e.root=!!n}),new H(/\s*Author:\s(.+)/i,(e,[t])=>{let n=t.split(`<`),r=n.pop();!r||!r.includes(`@`)||(e.author={email:r.substr(0,r.length-1),name:n.join(`<`).trim()})}),new H(/(\d+)[^,]*(?:,\s*(\d+)[^,]*)(?:,\s*(\d+))/g,(e,[t,n,r])=>{e.summary.changes=parseInt(t,10)||0,e.summary.insertions=parseInt(n,10)||0,e.summary.deletions=parseInt(r,10)||0}),new H(/^(\d+)[^,]*(?:,\s*(\d+)[^(]+\(([+-]))?/,(e,[t,n,r])=>{e.summary.changes=parseInt(t,10)||0;let i=parseInt(n,10)||0;r===`-`?e.summary.deletions=i:r===`+`&&(e.summary.insertions=i)})]}});function Or(e,t,n){return{commands:[`-c`,`core.abbrev=40`,`commit`,...P(e,`-m`),...t,...n],format:`utf-8`,parser:Tr}}function kr(){return{commit(t,...n){let r=G(arguments),i=e(t)||Or(j(t),j(z(n[0],bt,[])),[...M(z(n[1],B,[])),...W(arguments,0,!0)]);return this._runTask(i,r)}};function e(e){return!bt(e)&&J(`git.commit: requires the commit message to be supplied as a string/string[]`)}}var Ar=S({"src/lib/tasks/commit.ts"(){Dr(),q(),X()}});function jr(){return{firstCommit(){return this._runTask(Y([`rev-list`,`--max-parents=0`,`HEAD`],!0),G(arguments))}}}var Mr=S({"src/lib/tasks/first-commit.ts"(){q(),X()}});function Nr(e,t){let n=[`hash-object`,e];return t&&n.push(`-w`),Y(n,!0)}var Pr=S({"src/lib/tasks/hash-object.ts"(){X()}});function Fr(e,t,n){let r=String(n).trim(),i;if(i=Lr.exec(r))return new Ir(e,t,!1,i[1]);if(i=Rr.exec(r))return new Ir(e,t,!0,i[1]);let a=``,o=r.split(` `);for(;o.length;)if(o.shift()===`in`){a=o.join(` `);break}return new Ir(e,t,/^re/i.test(r),a)}var Ir,Lr,Rr,zr=S({"src/lib/responses/InitSummary.ts"(){Ir=class{constructor(e,t,n,r){this.bare=e,this.path=t,this.existing=n,this.gitDir=r}},Lr=/^Init.+ repository in (.+)$/,Rr=/^Rein.+ in (.+)$/}});function Br(e){return e.includes(Hr)}function Vr(e=!1,t,n){let r=[`init`,...n];return e&&!Br(r)&&r.splice(1,0,Hr),{commands:r,format:`utf-8`,parser(e){return Fr(r.includes(`--bare`),t,e)}}}var Hr,Ur=S({"src/lib/tasks/init.ts"(){zr(),Hr=`--bare`}});function Wr(e){for(let t=0;t<e.length;t++){let n=Kr.exec(e[t]);if(n)return`--${n[1]}`}return``}function Gr(e){return Kr.test(e)}var Kr,qr=S({"src/lib/args/log-format.ts"(){Kr=/^--(stat|numstat|name-only|name-status)(=|$)/}}),Jr,Yr=S({"src/lib/responses/DiffSummary.ts"(){Jr=class{constructor(){this.changed=0,this.deletions=0,this.insertions=0,this.files=[]}}}});function Xr(e=``){let t=ti[e];return e=>K(new Jr,t,e,!1)}var Zr,Qr,$r,ei,ti,ni=S({"src/lib/parsers/parse-diff-summary.ts"(){qr(),Yr(),Ln(),q(),Zr=[new H(/^(.+)\s+\|\s+(\d+)(\s+[+\-]+)?$/,(e,[t,n,r=``])=>{e.files.push({file:t.trim(),changes:N(n),insertions:r.replace(/[^+]/g,``).length,deletions:r.replace(/[^-]/g,``).length,binary:!1})}),new H(/^(.+) \|\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,(e,[t,n,r])=>{e.files.push({file:t.trim(),before:N(n),after:N(r),binary:!0})}),new H(/(\d+) files? changed\s*((?:, \d+ [^,]+){0,2})/,(e,[t,n])=>{let r=/(\d+) i/.exec(n),i=/(\d+) d/.exec(n);e.changed=N(t),e.insertions=N(r?.[1]),e.deletions=N(i?.[1])})],Qr=[new H(/(\d+)\t(\d+)\t(.+)$/,(e,[t,n,r])=>{let i=N(t),a=N(n);e.changed++,e.insertions+=i,e.deletions+=a,e.files.push({file:r,changes:i+a,insertions:i,deletions:a,binary:!1})}),new H(/-\t-\t(.+)$/,(e,[t])=>{e.changed++,e.files.push({file:t,after:0,before:0,binary:!0})})],$r=[new H(/(.+)$/,(e,[t])=>{e.changed++,e.files.push({file:t,changes:0,insertions:0,deletions:0,binary:!1})})],ei=[new H(/([ACDMRTUXB])([0-9]{0,3})\t(.[^\t]*)(\t(.[^\t]*))?$/,(e,[t,n,r,i,a])=>{e.changed++,e.files.push({file:a??r,changes:0,insertions:0,deletions:0,binary:!1,status:mt(Pn(t)&&t),from:mt(!!a&&r!==a&&r),similarity:N(n)})})],ti={"":Zr,"--stat":Zr,"--numstat":Qr,"--name-status":ei,"--name-only":$r}}});function ri(e,t){return t.reduce((t,n,r)=>(t[n]=e[r]||``,t),Object.create({diff:null}))}function ii(e=si,t=ci,n=``){let r=Xr(n);return function(n){let i=k(n.trim(),!1,ai).map(function(n){let i=n.split(oi),a=ri(i[0].split(e),t);return i.length>1&&i[1].trim()&&(a.diff=r(i[1])),a});return{all:i,latest:i.length&&i[0]||null,total:i.length}}}var ai,oi,si,ci,li=S({"src/lib/parsers/parse-list-log-summary.ts"(){q(),ni(),qr(),ai=`òòòòòò `,oi=` òò`,si=` ò `,ci=[`hash`,`date`,`message`,`refs`,`author_name`,`author_email`]}}),ui={};C(ui,{diffSummaryTask:()=>di,validateLogFormatConfig:()=>fi});function di(e){let t=Wr(e),n=[`diff`];return t===``&&(t=`--stat`,n.push(`--stat=4096`)),n.push(...e),fi(n)||{commands:n,format:`utf-8`,parser:Xr(t)}}function fi(e){let t=e.filter(Gr);if(t.length>1)return J(`Summary flags are mutually exclusive - pick one of ${t.join(`,`)}`);if(t.length&&e.includes(`-z`))return J(`Summary flag ${t} parsing is not compatible with null termination option '-z'`)}var pi=S({"src/lib/tasks/diff.ts"(){qr(),ni(),X()}});function mi(e,t){let n=[],r=[];return Object.keys(e).forEach(t=>{n.push(t),r.push(String(e[t]))}),[n,r.join(t)]}function hi(e){return Object.keys(e).reduce((t,n)=>(n in yi||(t[n]=e[n]),t),{})}function gi(e={},t=[]){let n=z(e.splitter,V,si),[r,i]=mi(_t(e.format)?e.format:{hash:`%H`,date:e.strictDate===!1?`%ai`:`%aI`,message:`%s`,refs:`%D`,body:e.multiLine?`%B`:`%b`,author_name:e.mailMap===!1?`%an`:`%aN`,author_email:e.mailMap===!1?`%ae`:`%aE`},n),a=[],o=[`--pretty=format:${ai}${i}${oi}`,...t],s=e.n||e[`max-count`]||e.maxCount;if(s&&o.push(`--max-count=${s}`),e.from||e.to){let t=e.symmetric===!1?`..`:`...`;a.push(`${e.from||``}${t}${e.to||``}`)}return V(e.file)&&o.push(`--follow`,se(e.file)),Mt(hi(e),o),{fields:r,splitter:n,commands:[...o,...a]}}function _i(e,t,n){let r=ii(e,t,Wr(n));return{commands:[`log`,...n],format:`utf-8`,parser:r}}function vi(){return{log(...n){let r=G(arguments),i=gi(Pt(arguments),M(z(arguments[0],B,[]))),a=t(...n)||fi(i.commands)||e(i);return this._runTask(a,r)}};function e(e){return _i(e.splitter,e.fields,e.commands)}function t(e,t){return V(e)&&V(t)&&J(`git.log(string, string) should be replaced with git.log({ from: string, to: string })`)}}var yi,bi=S({"src/lib/tasks/log.ts"(){qr(),li(),q(),X(),pi(),yi=(e=>(e[e[`--pretty`]=0]=`--pretty`,e[e[`max-count`]=1]=`max-count`,e[e.maxCount=2]=`maxCount`,e[e.n=3]=`n`,e[e.file=4]=`file`,e[e.format=5]=`format`,e[e.from=6]=`from`,e[e.to=7]=`to`,e[e.splitter=8]=`splitter`,e[e.symmetric=9]=`symmetric`,e[e.mailMap=10]=`mailMap`,e[e.multiLine=11]=`multiLine`,e[e.strictDate=12]=`strictDate`,e))(yi||{})}}),xi,Si,Ci=S({"src/lib/responses/MergeSummary.ts"(){xi=class{constructor(e,t=null,n){this.reason=e,this.file=t,this.meta=n}toString(){return`${this.file}:${this.reason}`}},Si=class{constructor(){this.conflicts=[],this.merges=[],this.result=`success`}get failed(){return this.conflicts.length>0}get reason(){return this.result}toString(){return this.conflicts.length?`CONFLICTS: ${this.conflicts.join(`, `)}`:`OK`}}}}),wi,Ti,Ei=S({"src/lib/responses/PullSummary.ts"(){wi=class{constructor(){this.remoteMessages={all:[]},this.created=[],this.deleted=[],this.files=[],this.deletions={},this.insertions={},this.summary={changes:0,deletions:0,insertions:0}}},Ti=class{constructor(){this.remote=``,this.hash={local:``,remote:``},this.branch={local:``,remote:``},this.message=``}toString(){return this.message}}}});function Di(e){return e.objects=e.objects||{compressing:0,counting:0,enumerating:0,packReused:0,reused:{count:0,delta:0},total:{count:0,delta:0}}}function Oi(e){let t=/^\s*(\d+)/.exec(e),n=/delta (\d+)/i.exec(e);return{count:N(t&&t[1]||`0`),delta:N(n&&n[1]||`0`)}}var ki,Ai=S({"src/lib/parsers/parse-remote-objects.ts"(){q(),ki=[new U(/^remote:\s*(enumerating|counting|compressing) objects: (\d+),/i,(e,[t,n])=>{let r=t.toLowerCase(),i=Di(e.remoteMessages);Object.assign(i,{[r]:N(n)})}),new U(/^remote:\s*(enumerating|counting|compressing) objects: \d+% \(\d+\/(\d+)\),/i,(e,[t,n])=>{let r=t.toLowerCase(),i=Di(e.remoteMessages);Object.assign(i,{[r]:N(n)})}),new U(/total ([^,]+), reused ([^,]+), pack-reused (\d+)/i,(e,[t,n,r])=>{let i=Di(e.remoteMessages);i.total=Oi(t),i.reused=Oi(n),i.packReused=N(r)})]}});function ji(e,t){return K({remoteMessages:new Ni},Mi,t)}var Mi,Ni,Pi=S({"src/lib/parsers/parse-remote-messages.ts"(){q(),Ai(),Mi=[new U(/^remote:\s*(.+)$/,(e,[t])=>(e.remoteMessages.all.push(t.trim()),!1)),...ki,new U([/create a (?:pull|merge) request/i,/\s(https?:\/\/\S+)$/],(e,[t])=>{e.remoteMessages.pullRequestUrl=t}),new U([/found (\d+) vulnerabilities.+\(([^)]+)\)/i,/\s(https?:\/\/\S+)$/],(e,[t,n,r])=>{e.remoteMessages.vulnerabilities={count:N(t),summary:n,url:r}})],Ni=class{constructor(){this.all=[]}}}});function Fi(e,t){let n=K(new Ti,Bi,[e,t]);return n.message&&n}var Ii,Li,Ri,zi,Bi,Vi,Hi,Ui=S({"src/lib/parsers/parse-pull.ts"(){Ei(),q(),Pi(),Ii=/^\s*(.+?)\s+\|\s+\d+\s*(\+*)(-*)/,Li=/(\d+)\D+((\d+)\D+\(\+\))?(\D+(\d+)\D+\(-\))?/,Ri=/^(create|delete) mode \d+ (.+)/,zi=[new H(Ii,(e,[t,n,r])=>{e.files.push(t),n&&(e.insertions[t]=n.length),r&&(e.deletions[t]=r.length)}),new H(Li,(e,[t,,n,,r])=>n!==void 0||r!==void 0?(e.summary.changes=+t||0,e.summary.insertions=+n||0,e.summary.deletions=+r||0,!0):!1),new H(Ri,(e,[t,n])=>{A(e.files,n),A(t===`create`?e.created:e.deleted,n)})],Bi=[new H(/^from\s(.+)$/i,(e,[t])=>void(e.remote=t)),new H(/^fatal:\s(.+)$/,(e,[t])=>void(e.message=t)),new H(/([a-z0-9]+)\.\.([a-z0-9]+)\s+(\S+)\s+->\s+(\S+)$/,(e,[t,n,r,i])=>{e.branch.local=r,e.hash.local=t,e.branch.remote=i,e.hash.remote=n})],Vi=(e,t)=>K(new wi,zi,[e,t]),Hi=(e,t)=>Object.assign(new wi,Vi(e,t),ji(e,t))}}),Wi,Gi,Ki,qi=S({"src/lib/parsers/parse-merge.ts"(){Ci(),q(),Ui(),Wi=[new H(/^Auto-merging\s+(.+)$/,(e,[t])=>{e.merges.push(t)}),new H(/^CONFLICT\s+\((.+)\): Merge conflict in (.+)$/,(e,[t,n])=>{e.conflicts.push(new xi(t,n))}),new H(/^CONFLICT\s+\((.+\/delete)\): (.+) deleted in (.+) and/,(e,[t,n,r])=>{e.conflicts.push(new xi(t,n,{deleteRef:r}))}),new H(/^CONFLICT\s+\((.+)\):/,(e,[t])=>{e.conflicts.push(new xi(t,null))}),new H(/^Automatic merge failed;\s+(.+)$/,(e,[t])=>{e.result=t})],Gi=(e,t)=>Object.assign(Ki(e,t),Hi(e,t)),Ki=e=>K(new Si,Wi,e)}});function Ji(e){return e.length?{commands:[`merge`,...e],format:`utf-8`,parser(e,t){let n=Gi(e,t);if(n.failed)throw new $e(n);return n}}:J(`Git.merge requires at least one option`)}var Yi=S({"src/lib/tasks/merge.ts"(){D(),qi(),X()}});function Xi(e,t,n){let r=n.includes(`deleted`),i=n.includes(`tag`)||/^refs\/tags/.test(e),a=!n.includes(`new`);return{deleted:r,tag:i,branch:!i,new:!a,alreadyUpdated:a,local:e,remote:t}}var Zi,Qi,$i,ea=S({"src/lib/parsers/parse-push.ts"(){q(),Pi(),Zi=[new H(/^Pushing to (.+)$/,(e,[t])=>{e.repo=t}),new H(/^updating local tracking ref '(.+)'/,(e,[t])=>{e.ref={...e.ref||{},local:t}}),new H(/^[=*-]\s+([^:]+):(\S+)\s+\[(.+)]$/,(e,[t,n,r])=>{e.pushed.push(Xi(t,n,r))}),new H(/^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,(e,[t,n,r])=>{e.branch={...e.branch||{},local:t,remote:n,remoteName:r}}),new H(/^([^:]+):(\S+)\s+([a-z0-9]+)\.\.([a-z0-9]+)$/,(e,[t,n,r,i])=>{e.update={head:{local:t,remote:n},hash:{from:r,to:i}}})],Qi=(e,t)=>{let n=$i(e,t),r=ji(e,t);return{...n,...r}},$i=(e,t)=>K({pushed:[]},Zi,[e,t])}}),ta={};C(ta,{pushTagsTask:()=>na,pushTask:()=>ra});function na(e={},t){return A(t,`--tags`),ra(e,t)}function ra(e={},t){let n=[`push`,...t];return e.branch&&n.splice(1,0,e.branch),e.remote&&n.splice(1,0,e.remote),ut(n,`-v`),A(n,`--verbose`),A(n,`--porcelain`),{commands:n,format:`utf-8`,parser:Qi}}var ia=S({"src/lib/tasks/push.ts"(){ea(),q()}});function aa(){return{showBuffer(){let e=[`show`,...W(arguments,1)];return e.includes(`--binary`)||e.splice(1,0,`--binary`),this._runTask(nn(e),G(arguments))},show(){let e=[`show`,...W(arguments,1)];return this._runTask(Y(e),G(arguments))}}}var oa=S({"src/lib/tasks/show.ts"(){q(),X()}}),sa,ca,la=S({"src/lib/responses/FileStatusSummary.ts"(){sa=/^(.+)\0(.+)$/,ca=class{constructor(e,t,n){if(this.path=e,this.index=t,this.working_dir=n,t===`R`||n===`R`){let t=sa.exec(e)||[null,e,e];this.from=t[2]||``,this.path=t[1]||``}}}}});function ua(e){let[t,n]=e.split(I);return{from:n||t,to:t}}function Q(e,t,n){return[`${e}${t}`,n]}function da(e,...t){return t.map(t=>Q(e,t,(e,t)=>e.conflicted.push(t)))}function fa(e,t){let n=t.trim();switch(` `){case n.charAt(2):return r(n.charAt(0),n.charAt(1),n.slice(3));case n.charAt(1):return r(` `,n.charAt(0),n.slice(2));default:return}function r(t,n,r){let i=`${t}${n}`,a=ma.get(i);a&&a(e,r),i!==`##`&&i!==`!!`&&e.files.push(new ca(r,t,n))}}var pa,ma,ha,ga=S({"src/lib/responses/StatusSummary.ts"(){q(),la(),pa=class{constructor(){this.not_added=[],this.conflicted=[],this.created=[],this.deleted=[],this.ignored=void 0,this.modified=[],this.renamed=[],this.files=[],this.staged=[],this.ahead=0,this.behind=0,this.current=null,this.tracking=null,this.detached=!1,this.isClean=()=>!this.files.length}},ma=new Map([Q(` `,`A`,(e,t)=>e.created.push(t)),Q(` `,`D`,(e,t)=>e.deleted.push(t)),Q(` `,`M`,(e,t)=>e.modified.push(t)),Q(`A`,` `,(e,t)=>{e.created.push(t),e.staged.push(t)}),Q(`A`,`M`,(e,t)=>{e.created.push(t),e.staged.push(t),e.modified.push(t)}),Q(`D`,` `,(e,t)=>{e.deleted.push(t),e.staged.push(t)}),Q(`M`,` `,(e,t)=>{e.modified.push(t),e.staged.push(t)}),Q(`M`,`M`,(e,t)=>{e.modified.push(t),e.staged.push(t)}),Q(`R`,` `,(e,t)=>{e.renamed.push(ua(t))}),Q(`R`,`M`,(e,t)=>{let n=ua(t);e.renamed.push(n),e.modified.push(n.to)}),Q(`!`,`!`,(e,t)=>{(e.ignored=e.ignored||[]).push(t)}),Q(`?`,`?`,(e,t)=>e.not_added.push(t)),...da(`A`,`A`,`U`),...da(`D`,`D`,`U`),...da(`U`,`A`,`D`,`U`),[`##`,(e,t)=>{let n=/ahead (\d+)/,r=/behind (\d+)/,i=/^(.+?(?=(?:\.{3}|\s|$)))/,a=/\.{3}(\S*)/,o=/\son\s(\S+?)(?=\.{3}|$)/,s=n.exec(t);e.ahead=s&&+s[1]||0,s=r.exec(t),e.behind=s&&+s[1]||0,s=i.exec(t),e.current=z(s?.[1],V,null),s=a.exec(t),e.tracking=z(s?.[1],V,null),s=o.exec(t),s&&(e.current=z(s?.[1],V,e.current)),e.detached=/\(no branch\)/.test(t)}]]),ha=function(e){let t=e.split(I),n=new pa;for(let e=0,r=t.length;e<r;){let r=t[e++].trim();r&&(r.charAt(0)===`R`&&(r+=I+(t[e++]||``)),fa(n,r))}return n}}});function _a(e){return{format:`utf-8`,commands:[`status`,`--porcelain`,`-b`,`-u`,`--null`,...e.filter(e=>!va.includes(e))],parser(e){return ha(e)}}}var va,ya=S({"src/lib/tasks/status.ts"(){ga(),va=[`--null`,`-z`]}});function ba(e=0,t=0,n=0,r=``,i=!0){return Object.defineProperty({major:e,minor:t,patch:n,agent:r,installed:i},`toString`,{value(){return`${this.major}.${this.minor}.${this.patch}`},configurable:!1,enumerable:!1})}function xa(){return ba(0,0,0,``,!1)}function Sa(){return{version(){return this._runTask({commands:[`--version`],format:`utf-8`,parser:Ca,onError(e,t,n,r){if(e.exitCode===-2)return n(Buffer.from(wa));r(t)}})}}}function Ca(e){return e===wa?xa():K(ba(0,0,0,e),Ta,e)}var wa,Ta,Ea=S({"src/lib/tasks/version.ts"(){q(),wa=`installed=false`,Ta=[new H(/version (\d+)\.(\d+)\.(\d+)(?:\s*\((.+)\))?/,(e,[t,n,r,i=``])=>{Object.assign(e,ba(N(t),N(n),N(r),i))}),new H(/version (\d+)\.(\d+)\.(\D+)(.+)?$/,(e,[t,n,r,i=``])=>{Object.assign(e,ba(N(t),N(n),r,i))})]}});function Da(e,t,n,...r){return V(n)?t(n,z(r[0],V),W(arguments)):J(`git.${e}() requires a string 'repoPath'`)}function Oa(){return{clone(e,...t){return this._runTask(Da(`clone`,ka,z(e,V),...t),G(arguments))},mirror(e,...t){return this._runTask(Da(`mirror`,Aa,z(e,V),...t),G(arguments))}}}var ka,Aa,ja=S({"src/lib/tasks/clone.ts"(){X(),q(),ka=(e,t,n)=>{let r=[`clone`,...n];return V(e)&&r.push(se(e)),V(t)&&r.push(se(t)),Y(r)},Aa=(e,t,n)=>(A(n,`--mirror`),ka(e,t,n))}}),Ma={};C(Ma,{SimpleGitApi:()=>Na});var Na,Pa=S({"src/lib/simple-git-api.ts"(){hr(),_r(),br(),wr(),Ar(),Nn(),Mr(),Gn(),Pr(),Ur(),bi(),Yi(),ia(),oa(),ya(),X(),Ea(),q(),ja(),Na=class{constructor(e){this._executor=e}_runTask(e,t){let n=this._executor.chain(),r=n.push(e);return t&&pr(e,r,t),Object.create(this,{then:{value:r.then.bind(r)},catch:{value:r.catch.bind(r)},_executor:{value:n}})}add(e){return this._runTask(Y([`add`,...j(e)]),G(arguments))}cwd(e){let t=G(arguments);return typeof e==`string`?this._runTask(gr(e,this._executor),t):typeof e?.path==`string`?this._runTask(gr(e.path,e.root&&this._executor||void 0),t):this._runTask(J(`Git.cwd: workingDirectory must be supplied as a string`),t)}hashObject(e,t){return this._runTask(Nr(e,t===!0),G(arguments))}init(e){return this._runTask(Vr(e===!0,this._executor.cwd,W(arguments)),G(arguments))}merge(){return this._runTask(Ji(W(arguments)),G(arguments))}mergeFromTo(e,t){return V(e)&&V(t)?this._runTask(Ji([e,t,...W(arguments)]),G(arguments,!1)):this._runTask(J(`Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings`))}outputHandler(e){return this._executor.outputHandler=e,this}push(){let e=ra({remote:z(arguments[0],V),branch:z(arguments[1],V)},W(arguments));return this._runTask(e,G(arguments))}stash(){return this._runTask(Y([`stash`,...W(arguments)]),G(arguments))}status(){return this._runTask(_a(W(arguments)),G(arguments))}},Object.assign(Na.prototype,yr(),Oa(),kr(),jn(),Sr(),jr(),Bn(),vi(),aa(),Sa())}}),Fa={};C(Fa,{Scheduler:()=>La});var Ia,La,Ra=S({"src/lib/runners/scheduler.ts"(){q(),rr(),Ia=(()=>{let e=0;return()=>{e++;let{promise:t,done:n}=(0,g.createDeferred)();return{promise:t,done:n,id:e}}})(),La=class{constructor(e=2){this.concurrency=e,this.logger=nr(``,`scheduler`),this.pending=[],this.running=[],this.logger(`Constructed, concurrency=%s`,e)}schedule(){if(!this.pending.length||this.running.length>=this.concurrency){this.logger(`Schedule attempt ignored, pending=%s running=%s concurrency=%s`,this.pending.length,this.running.length,this.concurrency);return}let e=A(this.running,this.pending.shift());this.logger(`Attempting id=%s`,e.id),e.done(()=>{this.logger(`Completing id=`,e.id),ut(this.running,e),this.schedule()})}next(){let{promise:e,id:t}=A(this.pending,Ia());return this.logger(`Scheduling id=%s`,t),this.schedule(),e}}}}),za={};C(za,{applyPatchTask:()=>Ba});function Ba(e,t){return Y([`apply`,...t,...e])}var Va=S({"src/lib/tasks/apply-patch.ts"(){X()}});function Ha(e,t){return{branch:e,hash:t,success:!0}}function Ua(e){return{branch:e,hash:null,success:!1}}var Wa,Ga=S({"src/lib/responses/BranchDeleteSummary.ts"(){Wa=class{constructor(){this.all=[],this.branches={},this.errors=[]}get success(){return!this.errors.length}}}});function Ka(e,t){return t===1&&Ja.test(e)}var qa,Ja,Ya,Xa,Za=S({"src/lib/parsers/parse-branch-delete.ts"(){Ga(),q(),qa=/(\S+)\s+\(\S+\s([^)]+)\)/,Ja=/^error[^']+'([^']+)'/m,Ya=[new H(qa,(e,[t,n])=>{let r=Ha(t,n);e.all.push(r),e.branches[t]=r}),new H(Ja,(e,[t])=>{let n=Ua(t);e.errors.push(n),e.all.push(n),e.branches[t]=n})],Xa=(e,t)=>K(new Wa,Ya,[e,t])}}),Qa,$a=S({"src/lib/responses/BranchSummary.ts"(){Qa=class{constructor(){this.all=[],this.branches={},this.current=``,this.detached=!1}push(e,t,n,r,i){e===`*`&&(this.detached=t,this.current=n),this.all.push(n),this.branches[n]={current:e===`*`,linkedWorkTree:e===`+`,name:n,commit:r,label:i}}}}});function eo(e){return e?e.charAt(0):``}function to(e,t=!1){return K(new Qa,t?[ro]:no,e)}var no,ro,io=S({"src/lib/parsers/parse-branch.ts"(){$a(),q(),no=[new H(/^([*+]\s)?\((?:HEAD )?detached (?:from|at) (\S+)\)\s+([a-z0-9]+)\s(.*)$/,(e,[t,n,r,i])=>{e.push(eo(t),!0,n,r,i)}),new H(/^([*+]\s)?(\S+)\s+([a-z0-9]+)\s?(.*)$/s,(e,[t,n,r,i])=>{e.push(eo(t),!1,n,r,i)})],ro=new H(/^(\S+)$/s,(e,[t])=>{e.push(`*`,!1,t,``,``)})}}),ao={};C(ao,{branchLocalTask:()=>co,branchTask:()=>so,containsDeleteBranchCommand:()=>oo,deleteBranchTask:()=>uo,deleteBranchesTask:()=>lo});function oo(e){let t=[`-d`,`-D`,`--delete`];return e.some(e=>t.includes(e))}function so(e){let t=oo(e),n=e.includes(`--show-current`),r=[`branch`,...e];return r.length===1&&r.push(`-a`),r.includes(`-v`)||r.splice(1,0,`-v`),{format:`utf-8`,commands:r,parser(e,r){return t?Xa(e,r).all[0]:to(e,n)}}}function co(){return{format:`utf-8`,commands:[`branch`,`-v`],parser(e){return to(e)}}}function lo(e,t=!1){return{format:`utf-8`,commands:[`branch`,`-v`,t?`-D`:`-d`,...e],parser(e,t){return Xa(e,t)},onError({exitCode:e,stdOut:t},n,r,i){if(!Ka(String(n),e))return i(n);r(t)}}}function uo(e,t=!1){let n={format:`utf-8`,commands:[`branch`,`-v`,t?`-D`:`-d`,e],parser(t,n){return Xa(t,n).branches[e]},onError({exitCode:e,stdErr:t,stdOut:r},i,a,o){if(!Ka(String(i),e))return o(i);throw new $e(n.parser(F(r),F(t)),String(i))}};return n}var fo=S({"src/lib/tasks/branch.ts"(){D(),Za(),io(),q()}});function po(e){let t=e.trim().replace(/^["']|["']$/g,``);return t&&a(t)}var mo,ho=S({"src/lib/responses/CheckIgnore.ts"(){mo=e=>e.split(/\n/g).map(po).filter(Boolean)}}),go={};C(go,{checkIgnoreTask:()=>_o});function _o(e){return{commands:[`check-ignore`,...e],format:`utf-8`,parser:mo}}var vo=S({"src/lib/tasks/check-ignore.ts"(){ho()}});function yo(e,t){return K({raw:e,remote:null,branches:[],tags:[],updated:[],deleted:[]},bo,[e,t])}var bo,xo=S({"src/lib/parsers/parse-fetch.ts"(){q(),bo=[new H(/From (.+)$/,(e,[t])=>{e.remote=t}),new H(/\* \[new branch]\s+(\S+)\s*-> (.+)$/,(e,[t,n])=>{e.branches.push({name:t,tracking:n})}),new H(/\* \[new tag]\s+(\S+)\s*-> (.+)$/,(e,[t,n])=>{e.tags.push({name:t,tracking:n})}),new H(/- \[deleted]\s+\S+\s*-> (.+)$/,(e,[t])=>{e.deleted.push({tracking:t})}),new H(/\s*([^.]+)\.\.(\S+)\s+(\S+)\s*-> (.+)$/,(e,[t,n,r,i])=>{e.updated.push({name:r,tracking:i,to:n,from:t})})]}}),So={};C(So,{fetchTask:()=>wo});function Co(e){return/^--upload-pack(=|$)/.test(e)}function wo(e,t,n){let r=[`fetch`,...n];return e&&t&&r.push(e,t),r.find(Co)?J(`git.fetch: potential exploit argument blocked.`):{commands:r,format:`utf-8`,parser:yo}}var To=S({"src/lib/tasks/fetch.ts"(){xo(),X()}});function Eo(e){return K({moves:[]},Do,e)}var Do,Oo=S({"src/lib/parsers/parse-move.ts"(){q(),Do=[new H(/^Renaming (.+) to (.+)$/,(e,[t,n])=>{e.moves.push({from:t,to:n})})]}}),ko={};C(ko,{moveTask:()=>Ao});function Ao(e,t){return{commands:[`mv`,`-v`,...j(e),t],format:`utf-8`,parser:Eo}}var jo=S({"src/lib/tasks/move.ts"(){Oo(),q()}}),Mo={};C(Mo,{pullTask:()=>No});function No(e,t,n){let r=[`pull`,...n];return e&&t&&r.splice(1,0,e,t),{commands:r,format:`utf-8`,parser(e,t){return Hi(e,t)},onError(e,t,n,r){let i=Fi(F(e.stdOut),F(e.stdErr));if(i)return r(new $e(i));r(t)}}}var Po=S({"src/lib/tasks/pull.ts"(){D(),Ui(),q()}});function Fo(e){let t={};return Lo(e,([e])=>t[e]={name:e}),Object.values(t)}function Io(e){let t={};return Lo(e,([e,n,r])=>{Object.hasOwn(t,e)||(t[e]={name:e,refs:{fetch:``,push:``}}),r&&n&&(t[e].refs[r.replace(/[^a-z]/g,``)]=n)}),Object.values(t)}function Lo(e,t){st(e,e=>t(e.split(/\s+/)))}var Ro=S({"src/lib/responses/GetRemoteSummary.ts"(){q()}}),zo={};C(zo,{addRemoteTask:()=>Bo,getRemotesTask:()=>Vo,listRemotesTask:()=>Ho,remoteTask:()=>Uo,removeRemoteTask:()=>Wo});function Bo(e,t,n){return Y([`remote`,`add`,...n,e,t])}function Vo(e){let t=[`remote`];return e&&t.push(`-v`),{commands:t,format:`utf-8`,parser:e?Io:Fo}}function Ho(e){let t=[...e];return t[0]!==`ls-remote`&&t.unshift(`ls-remote`),Y(t)}function Uo(e){let t=[...e];return t[0]!==`remote`&&t.unshift(`remote`),Y(t)}function Wo(e){return Y([`remote`,`remove`,e])}var Go=S({"src/lib/tasks/remote.ts"(){Ro(),X()}}),Ko={};C(Ko,{stashListTask:()=>qo});function qo(e={},t){let n=gi(e),r=[`stash`,`list`,...n.commands,...t],i=ii(n.splitter,n.fields,Wr(r));return fi(r)||{commands:r,format:`utf-8`,parser:i}}var Jo=S({"src/lib/tasks/stash-list.ts"(){qr(),li(),pi(),bi()}}),Yo={};C(Yo,{addSubModuleTask:()=>Xo,initSubModuleTask:()=>Zo,subModuleTask:()=>Qo,updateSubModuleTask:()=>$o});function Xo(e,t){return Qo([`add`,e,t])}function Zo(e){return Qo([`init`,...e])}function Qo(e){let t=[...e];return t[0]!==`submodule`&&t.unshift(`submodule`),Y(t)}function $o(e){return Qo([`update`,...e])}var es=S({"src/lib/tasks/sub-module.ts"(){X()}});function ts(e,t){let n=Number.isNaN(e);return n===Number.isNaN(t)?n?ns(e,t):0:n?1:-1}function ns(e,t){return e===t?0:e>t?1:-1}function rs(e){return e.trim()}function is(e){return typeof e==`string`&&parseInt(e.replace(/^\D+/g,``),10)||0}var as,os,ss=S({"src/lib/responses/TagList.ts"(){as=class{constructor(e,t){this.all=e,this.latest=t}},os=function(e,t=!1){let n=e.split(`
9
9
  `).map(rs).filter(Boolean);t||n.sort(function(e,t){let n=e.split(`.`),r=t.split(`.`);if(n.length===1||r.length===1)return ts(is(n[0]),is(r[0]));for(let e=0,t=Math.max(n.length,r.length);e<t;e++){let t=ns(is(n[e]),is(r[e]));if(t)return t}return 0});let r=t?n[0]:[...n].reverse().find(e=>e.indexOf(`.`)>=0);return new as(n,r)}}}),cs={};C(cs,{addAnnotatedTagTask:()=>ds,addTagTask:()=>us,tagListTask:()=>ls});function ls(e=[]){let t=e.some(e=>/^--sort=/.test(e));return{format:`utf-8`,commands:[`tag`,`-l`,...e],parser(e){return os(e,t)}}}function us(e){return{format:`utf-8`,commands:[`tag`,e],parser(){return{name:e}}}}function ds(e,t){return{format:`utf-8`,commands:[`tag`,`-a`,`-m`,t,e],parser(){return{name:e}}}}var fs=S({"src/lib/tasks/tag.ts"(){ss()}}),ps=Ze({"src/git.js"(e,t){var{GitExecutor:n}=(fr(),w(ur)),{SimpleGitApi:r}=(Pa(),w(Ma)),{Scheduler:i}=(Ra(),w(Fa)),{adhocExecTask:a,configurationErrorTask:o}=(X(),w(en)),{asArray:s,filterArray:c,filterPrimitives:l,filterString:u,filterStringOrStringArray:d,filterType:f,getTrailingOptions:p,trailingFunctionArgument:m,trailingOptionsArgument:ee}=(q(),w(Rt)),{applyPatchTask:te}=(Va(),w(za)),{branchTask:ne,branchLocalTask:re,deleteBranchesTask:ie,deleteBranchTask:ae}=(fo(),w(ao)),{checkIgnoreTask:oe}=(vo(),w(go)),{checkIsRepoTask:se}=(qt(),w(zt)),{cleanWithOptionsTask:h,isCleanOptionsArray:ce}=(bn(),w(sn)),{diffSummaryTask:le}=(pi(),w(ui)),{fetchTask:ue}=(To(),w(So)),{moveTask:g}=(jo(),w(ko)),{pullTask:de}=(Po(),w(Mo)),{pushTagsTask:fe}=(ia(),w(ta)),{addRemoteTask:pe,getRemotesTask:me,listRemotesTask:he,remoteTask:ge,removeRemoteTask:_}=(Go(),w(zo)),{getResetMode:_e,resetTask:ve}=(Qn(),w(Kn)),{stashListTask:ye}=(Jo(),w(Ko)),{addSubModuleTask:be,initSubModuleTask:xe,subModuleTask:Se,updateSubModuleTask:Ce}=(es(),w(Yo)),{addAnnotatedTagTask:we,addTagTask:Te,tagListTask:Ee}=(fs(),w(cs)),{straightThroughBufferTask:De,straightThroughStringTask:v}=(X(),w(en));function y(e,t){this._plugins=t,this._executor=new n(e.baseDir,new i(e.maxConcurrentProcesses),t),this._trimmed=e.trimmed}(y.prototype=Object.create(r.prototype)).constructor=y,y.prototype.customBinary=function(e){return this._plugins.reconfigure(`binary`,e),this},y.prototype.env=function(e,t){return arguments.length===1&&typeof e==`object`?this._executor.env=e:(this._executor.env=this._executor.env||{})[e]=t,this},y.prototype.stashList=function(e){return this._runTask(ye(ee(arguments)||{},c(e)&&e||[]),m(arguments))},y.prototype.mv=function(e,t){return this._runTask(g(e,t),m(arguments))},y.prototype.checkoutLatestTag=function(e){var t=this;return this.pull(function(){t.tags(function(n,r){t.checkout(r.latest,e)})})},y.prototype.pull=function(e,t,n,r){return this._runTask(de(f(e,u),f(t,u),p(arguments)),m(arguments))},y.prototype.fetch=function(e,t){return this._runTask(ue(f(e,u),f(t,u),p(arguments)),m(arguments))},y.prototype.silent=function(e){return this._runTask(a(()=>console.warn("simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this method will be removed.")))},y.prototype.tags=function(e,t){return this._runTask(Ee(p(arguments)),m(arguments))},y.prototype.rebase=function(){return this._runTask(v([`rebase`,...p(arguments)]),m(arguments))},y.prototype.reset=function(e){return this._runTask(ve(_e(e),p(arguments)),m(arguments))},y.prototype.revert=function(e){let t=m(arguments);return typeof e==`string`?this._runTask(v([`revert`,...p(arguments,0,!0),e]),t):this._runTask(o(`Commit must be a string`),t)},y.prototype.addTag=function(e){let t=typeof e==`string`?Te(e):o(`Git.addTag requires a tag name`);return this._runTask(t,m(arguments))},y.prototype.addAnnotatedTag=function(e,t){return this._runTask(we(e,t),m(arguments))},y.prototype.deleteLocalBranch=function(e,t,n){return this._runTask(ae(e,typeof t==`boolean`?t:!1),m(arguments))},y.prototype.deleteLocalBranches=function(e,t,n){return this._runTask(ie(e,typeof t==`boolean`?t:!1),m(arguments))},y.prototype.branch=function(e,t){return this._runTask(ne(p(arguments)),m(arguments))},y.prototype.branchLocal=function(e){return this._runTask(re(),m(arguments))},y.prototype.raw=function(e){let t=!Array.isArray(e),n=[].slice.call(t?arguments:e,0);for(let e=0;e<n.length&&t;e++)if(!l(n[e])){n.splice(e,n.length-e);break}n.push(...p(arguments,0,!0));var r=m(arguments);return n.length?this._runTask(v(n,this._trimmed),r):this._runTask(o(`Raw: must supply one or more command to execute`),r)},y.prototype.submoduleAdd=function(e,t,n){return this._runTask(be(e,t),m(arguments))},y.prototype.submoduleUpdate=function(e,t){return this._runTask(Ce(p(arguments,!0)),m(arguments))},y.prototype.submoduleInit=function(e,t){return this._runTask(xe(p(arguments,!0)),m(arguments))},y.prototype.subModule=function(e,t){return this._runTask(Se(p(arguments)),m(arguments))},y.prototype.listRemote=function(){return this._runTask(he(p(arguments)),m(arguments))},y.prototype.addRemote=function(e,t,n){return this._runTask(pe(e,t,p(arguments)),m(arguments))},y.prototype.removeRemote=function(e,t){return this._runTask(_(e),m(arguments))},y.prototype.getRemotes=function(e,t){return this._runTask(me(e===!0),m(arguments))},y.prototype.remote=function(e,t){return this._runTask(ge(p(arguments)),m(arguments))},y.prototype.tag=function(e,t){let n=p(arguments);return n[0]!==`tag`&&n.unshift(`tag`),this._runTask(v(n),m(arguments))},y.prototype.updateServerInfo=function(e){return this._runTask(v([`update-server-info`]),m(arguments))},y.prototype.pushTags=function(e,t){let n=fe({remote:f(e,u)},p(arguments));return this._runTask(n,m(arguments))},y.prototype.rm=function(e){return this._runTask(v([`rm`,`-f`,...s(e)]),m(arguments))},y.prototype.rmKeepLocal=function(e){return this._runTask(v([`rm`,`--cached`,...s(e)]),m(arguments))},y.prototype.catFile=function(e,t){return this._catFile(`utf-8`,arguments)},y.prototype.binaryCatFile=function(){return this._catFile(`buffer`,arguments)},y.prototype._catFile=function(e,t){var n=m(t),r=[`cat-file`],i=t[0];if(typeof i==`string`)return this._runTask(o(`Git.catFile: options must be supplied as an array of strings`),n);Array.isArray(i)&&r.push.apply(r,i);let a=e===`buffer`?De(r):v(r);return this._runTask(a,n)},y.prototype.diff=function(e,t){let n=u(e)?o(`git.diff: supplying options as a single string is no longer supported, switch to an array of strings`):v([`diff`,...p(arguments)]);return this._runTask(n,m(arguments))},y.prototype.diffSummary=function(){return this._runTask(le(p(arguments,1)),m(arguments))},y.prototype.applyPatch=function(e){let t=d(e)?te(s(e),p([].slice.call(arguments,1))):o(`git.applyPatch requires one or more string patches as the first argument`);return this._runTask(t,m(arguments))},y.prototype.revparse=function(){let e=[`rev-parse`,...p(arguments,!0)];return this._runTask(v(e,!0),m(arguments))},y.prototype.clean=function(e,t,n){let r=ce(e),i=r&&e.join(``)||f(e,u)||``,a=p([].slice.call(arguments,+!!r));return this._runTask(h(i,a),m(arguments))},y.prototype.exec=function(e){return this._runTask({commands:[],format:`utf-8`,parser(){typeof e==`function`&&e()}})},y.prototype.clearQueue=function(){return this._runTask(a(()=>console.warn(`simple-git deprecation notice: clearQueue() is deprecated and will be removed, switch to using the abortPlugin instead.`)))},y.prototype.checkIgnore=function(e,t){return this._runTask(oe(s(f(e,d,[]))),m(arguments))},y.prototype.checkIsRepo=function(e,t){return this._runTask(se(f(e,u)),m(arguments))},t.exports=y}});E();var ms=class extends T{constructor(e,t){super(void 0,t),this.config=e}};E(),E();var $=class extends T{constructor(e,t,n){super(e,n),this.task=e,this.plugin=t,Object.setPrototypeOf(this,new.target.prototype)}};D(),tt(),qt(),bn(),Nn(),Ln(),Gn(),Qn();function hs(e){if(e)return[{type:`spawn.before`,action(t,n){e.aborted&&n.kill(new $(void 0,`abort`,`Abort already signaled`))}},{type:`spawn.after`,action(t,n){function r(){n.kill(new $(void 0,`abort`,`Abort signal received`))}e.addEventListener(`abort`,r),n.spawned.on(`close`,()=>e.removeEventListener(`abort`,r))}}]}function gs(e={}){return{type:`spawn.args`,action(t,{env:n}){for(let r of Ke(t,n))if(e[r.category]!==!0)throw new $(void 0,`unsafe`,r.message);return t}}}q();function _s(e){let t=P(e,`-c`);return{type:`spawn.args`,action(e){return[...t,...e]}}}q();var vs=(0,g.deferred)().promise;function ys({onClose:e=!0,onExit:t=50}={}){function n(){let n=-1,i={close:(0,g.deferred)(),closeTimeout:(0,g.deferred)(),exit:(0,g.deferred)(),exitTimeout:(0,g.deferred)()},a=Promise.race([e===!1?vs:i.closeTimeout.promise,t===!1?vs:i.exitTimeout.promise]);return r(e,i.close,i.closeTimeout),r(t,i.exit,i.exitTimeout),{close(e){n=e,i.close.done()},exit(e){n=e,i.exit.done()},get exitCode(){return n},result:a}}function r(e,t,n){e!==!1&&(e===!0?t.promise:t.promise.then(()=>pt(e))).then(n.done)}return{type:`spawn.after`,async action(e,{spawned:t,close:r}){let i=n(),a=!0,o=()=>void(a=!1);t.stdout?.on(`data`,o),t.stderr?.on(`data`,o),t.on(`error`,o),t.on(`close`,e=>i.close(e)),t.on(`exit`,e=>i.exit(e));try{await i.result,a&&await pt(50),r(i.exitCode)}catch(e){r(i.exitCode,e)}}}}q();var bs=`Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings`,xs=`Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option`;function Ss(e){return!e||!/^([a-z]:)?([a-z0-9/.\\_~-]+)$/i.test(e)}function Cs(e,t){if(e.length<1||e.length>2)throw new $(void 0,`binary`,bs);if(e.some(Ss))if(t)console.warn(xs);else throw new $(void 0,`binary`,xs);let[n,r]=e;return{binary:n,prefix:r}}function ws(e,t=[`git`],n=!1){let r=Cs(j(t),n);e.on(`binary`,e=>{r=Cs(j(e),n)}),e.append(`spawn.binary`,()=>r.binary),e.append(`spawn.args`,e=>r.prefix?[r.prefix,...e]:e)}E();function Ts(e){return!!(e.exitCode&&e.stdErr.length)}function Es(e){return Buffer.concat([...e.stdOut,...e.stdErr])}function Ds(e=!1,t=Ts,n=Es){return(r,i)=>!e&&r||!t(i)?r:n(i)}function Os(e){return{type:`task.error`,action(t,n){let r=e(t.error,{stdErr:n.stdErr,stdOut:n.stdOut,exitCode:n.exitCode});return Buffer.isBuffer(r)?{error:new T(void 0,r.toString(`utf-8`))}:{error:r}}}}q();var ks=class{constructor(){this.plugins=new Set,this.events=new u}on(e,t){this.events.on(e,t)}reconfigure(e,t){this.events.emit(e,t)}append(e,t){let n=A(this.plugins,{type:e,action:t});return()=>this.plugins.delete(n)}add(e){let t=[];return j(e).forEach(e=>e&&this.plugins.add(A(t,e))),()=>{t.forEach(e=>this.plugins.delete(e))}}exec(e,t,n){let r=t,i=Object.freeze(Object.create(n));for(let t of this.plugins)t.type===e&&(r=t.action(r,i));return r}};q();function As(e){let t=`--progress`,n=[`checkout`,`clone`,`fetch`,`pull`,`push`];return[{type:`spawn.args`,action(e,r){return n.includes(r.method)?lt(e,t):e}},{type:`spawn.after`,action(n,r){r.commands.includes(t)&&r.spawned.stderr?.on(`data`,t=>{let n=/^([\s\S]+?):\s*(\d+)% \((\d+)\/(\d+)\)/.exec(t.toString(`utf8`));n&&e({method:r.method,stage:js(n[1]),progress:N(n[2]),processed:N(n[3]),total:N(n[4])})})}}]}function js(e){return String(e.toLowerCase().split(` `,1))||`unknown`}q();function Ms(e){let t=ft(e,[`uid`,`gid`]);return{type:`spawn.options`,action(e){return{...t,...e}}}}function Ns({block:e,stdErr:t=!0,stdOut:n=!0}){if(e>0)return{type:`spawn.after`,action(r,i){let a;function o(){a&&clearTimeout(a),a=setTimeout(c,e)}function s(){i.spawned.stdout?.off(`data`,o),i.spawned.stderr?.off(`data`,o),i.spawned.off(`exit`,s),i.spawned.off(`close`,s),a&&clearTimeout(a)}function c(){s(),i.kill(new $(void 0,`timeout`,`block timeout reached`))}n&&i.spawned.stdout?.on(`data`,o),t&&i.spawned.stderr?.on(`data`,o),i.spawned.on(`exit`,s),i.spawned.on(`close`,s),o()}}}function Ps(){return{type:`spawn.args`,action(e){let t=[],n;function r(e){(n||=[]).push(...e)}for(let n=0;n<e.length;n++){let i=e[n];if(h(i)){r(ce(i));continue}if(i===`--`){r(e.slice(n+1).flatMap(e=>h(e)&&ce(e)||e));break}t.push(i)}return n?[...t,`--`,...n.map(String)]:t}}}q();var Fs=ps();function Is(e,t){let n=new ks,r=kt(e&&(typeof e==`string`?{baseDir:e}:e)||{},t);if(!ct(r.baseDir))throw new ms(r,`Cannot use simple-git on a directory that does not exist`);return Array.isArray(r.config)&&n.add(_s(r.config)),n.add(gs(r.unsafe)),n.add(ys(r.completion)),r.abort&&n.add(hs(r.abort)),r.progress&&n.add(As(r.progress)),r.timeout&&n.add(Ns(r.timeout)),r.spawnOptions&&n.add(Ms(r.spawnOptions)),n.add(Ps()),n.add(Os(Ds(!0))),r.errors&&n.add(Os(r.errors)),ws(n,r.binary,r.unsafe?.allowUnsafeCustomBinary),new Fs(r,n)}D();var Ls=Is,Rs=Is;const zs=new class{_tail=Promise.resolve();enqueue(e){let t=this._tail.then(()=>e());return this._tail=t.catch(()=>void 0),t}};function Bs(e){return zs.enqueue(e)}function Vs(e){try{return s(e)&&c(e).isDirectory()}catch{return!1}}const Hs=[`HOME`,`USERPROFILE`,`HOMEDRIVE`,`HOMEPATH`,`APPDATA`,`LOCALAPPDATA`,`ProgramData`,`ALLUSERSPROFILE`,`SystemRoot`,`WINDIR`,`windir`,`ComSpec`,`TEMP`,`TMP`,`USERNAME`,`USERDOMAIN`,`PATHEXT`,`SSH_AUTH_SOCK`,`ELECTRON_RUN_AS_NODE`];function Us(e){let t={LANG:`C`,LC_ALL:`C`,GIT_TERMINAL_PROMPT:`0`,GIT_MERGE_AUTOEDIT:`no`};t.PATH=r(process.env.PATH??process.env.Path,{platform:process.platform,homeDir:l(),isDir:Vs,delimiter:i});for(let e of Hs){let n=process.env[e];n!==void 0&&(t[e]=n)}return e&&(t.OK_GH_TOKEN=e.token,t.OK_GH_TOKEN_HOST=e.host),t}function Ws(e,t){let n={...e.env};for(let[e,r]of Object.entries(t))r!==void 0&&(n[e]=r);return e.git.env(n)}function Gs(e,t={}){let{credentialArgs:n=[],gitIndexFile:r,ghToken:i,timeoutMs:a}=t,s=Us(i);return r&&(s.GIT_INDEX_FILE=o(e,r)),{git:Rs({baseDir:e,config:[`commit.gpgsign=false`,`core.autocrlf=false`,`credential.interactive=false`,...n.length>=2?[n[1]]:[]],unsafe:{allowUnsafeCredentialHelper:!0},...a===void 0?{}:{timeout:{block:a}}}).env(s),projectDir:e,credentialArgs:n,env:s}}export{Rs as a,Bs as i,Us as n,Ls as o,Gs as r,re as s,Ws as t};
10
- //# sourceMappingURL=git-handle-B9WUn7B2.mjs.map
10
+ //# sourceMappingURL=git-handle-Dxwd5VZx.mjs.map