@inkeep/open-knowledge 0.49.0-beta.8 → 0.49.0

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 (489) hide show
  1. package/dist/THIRD_PARTY_NOTICES.md +65 -0
  2. package/dist/{acp-harness-probe-D3WKP8RS.mjs → acp-harness-probe-DOXp9Wx4.mjs} +2 -2
  3. package/dist/assets/skills/packs/codebase-wiki/SKILL.md +1 -1
  4. package/dist/assets/skills/packs/entity-vault/SKILL.md +2 -2
  5. package/dist/assets/skills/packs/knowledge-base/SKILL.md +6 -6
  6. package/dist/assets/skills/packs/knowledge-base/consolidate/SKILL.md +2 -2
  7. package/dist/assets/skills/packs/knowledge-base/research/SKILL.md +5 -5
  8. package/dist/assets/skills/packs/okf/SKILL.md +1 -1
  9. package/dist/assets/skills/packs/plain-notes/SKILL.md +1 -1
  10. package/dist/assets/skills/packs/software-lifecycle/SKILL.md +6 -6
  11. package/dist/assets/skills/packs/software-lifecycle/frame-a-proposal/SKILL.md +3 -3
  12. package/dist/assets/skills/packs/software-lifecycle/record-a-decision/SKILL.md +7 -7
  13. package/dist/assets/skills/packs/software-lifecycle/review-a-design/SKILL.md +4 -4
  14. package/dist/assets/skills/packs/software-lifecycle/write-a-postmortem/SKILL.md +2 -2
  15. package/dist/assets/skills/packs/software-lifecycle/write-a-spec/SKILL.md +5 -5
  16. package/dist/assets/skills/packs/worldbuilding/SKILL.md +1 -1
  17. package/dist/assets/skills/packs/writing-pipeline/SKILL.md +1 -1
  18. package/dist/assets/skills/project/SKILL.md +3 -3
  19. package/dist/assets/skills/project/references/starter-packs.md +1 -1
  20. package/dist/cli.mjs +31 -31
  21. package/dist/config-schema.json +38 -0
  22. package/dist/config.user.schema.json +38 -0
  23. package/dist/constants-J4-mibQ1.mjs +2 -0
  24. package/dist/{fs-traced-Cq61rC8q.mjs → fs-traced-By5aY-RE.mjs} +2 -2
  25. package/dist/fs-traced-CkLhqsEn.mjs +1 -0
  26. package/dist/git-handle-BDmbIWwd.mjs +1 -0
  27. package/dist/{git-handle-DyGrpFVy.mjs → git-handle-BHe1p04S.mjs} +2 -2
  28. package/dist/index.d.mts +17 -0
  29. package/dist/index.mjs +1 -1
  30. package/dist/init-DDwncQha.mjs +1 -0
  31. package/dist/{init-CIx--I41.mjs → init-ZOWQ1Th4.mjs} +17 -17
  32. package/dist/{launch-json-removal-BLAj9y37.mjs → launch-json-removal-CcFuFFS1.mjs} +2 -2
  33. package/dist/loader-BcwbnY_K.mjs +1 -0
  34. package/dist/{loader-BLqQZ5Tv.mjs → loader-ji3pPcXi.mjs} +2 -2
  35. package/dist/md-manager-B4-M0hXs.mjs +2 -0
  36. package/dist/{open-browser-svTSfejY.mjs → open-browser-CxnOIVsL.mjs} +2 -2
  37. package/dist/parse-worker.mjs +1 -1
  38. package/dist/{preview-BpDiVSjC.mjs → preview-2rQXoRuM.mjs} +2 -2
  39. package/dist/preview-MV-qHfzy.mjs +1 -0
  40. package/dist/public/assets/{ActivityModeContent-BNAxhpQj.js → ActivityModeContent-C08FYohG.js} +1 -1
  41. package/dist/public/assets/{AgentDiffPane-D7Khwouf.js → AgentDiffPane-T499-ugv.js} +2 -2
  42. package/dist/public/assets/{AgentThreadClientBinder-daoer6rt.js → AgentThreadClientBinder-BlMGv16y.js} +1 -1
  43. package/dist/public/assets/{AppMenubar-_6okky_d.js → AppMenubar-dik_dmjC.js} +1 -1
  44. package/dist/public/assets/BugReportHistory-DymFE_6x.js +1 -0
  45. package/dist/public/assets/{BugReportHistoryDialog-DgM3N4RP.js → BugReportHistoryDialog-D28ahq-6.js} +1 -1
  46. package/dist/public/assets/ChangedOutsideBadge-GeQfL_b-.js +1 -0
  47. package/dist/public/assets/CodeMirrorPropInput-3TWUbzXY.js +3 -0
  48. package/dist/public/assets/{ConfigSharingInfoTooltip-BhNgrS2h.js → ConfigSharingInfoTooltip-Bwt_R43K.js} +1 -1
  49. package/dist/public/assets/{ConsentDialogBody-CAqiYyjs.js → ConsentDialogBody-Clb82Qbo.js} +1 -1
  50. package/dist/public/assets/{CopyButton-DfXJBl0I.js → CopyButton-DysciFW5.js} +1 -1
  51. package/dist/public/assets/{DiffView-Bc5gwnAV.js → DiffView-DY54R06f.js} +1 -1
  52. package/dist/public/assets/DocumentContext-C-Lo65-_.js +38 -0
  53. package/dist/public/assets/{EditorModeToggle-BbMlOgkn.js → EditorModeToggle-BjgmECAn.js} +1 -1
  54. package/dist/public/assets/{EnableSyncConfirmDialog-CQetlwTb.js → EnableSyncConfirmDialog-B1Eo_sVE.js} +1 -1
  55. package/dist/public/assets/FeedbackForm-CmdTz11F.js +1 -0
  56. package/dist/public/assets/{GraphPanel-BlKaOmvl.js → GraphPanel-CxJeFUDp.js} +2 -2
  57. package/dist/public/assets/{ImportSkillDialog-BgrlE-MX.js → ImportSkillDialog-ChsGV6eb.js} +1 -1
  58. package/dist/public/assets/{LintConfigEditor-Cno_iGzp.js → LintConfigEditor-3f4-NF1O.js} +1 -1
  59. package/dist/public/assets/ManagedArtifactProperties-B1ZA0ofn.js +2 -0
  60. package/dist/public/assets/ManagedArtifactProperties-B_ecuboX.js +1 -0
  61. package/dist/public/assets/{McpConsentDialogBody-NLB2A56E.js → McpConsentDialogBody-CG5af4os.js} +1 -1
  62. package/dist/public/assets/{Mermaid-DT9lZOmy.js → Mermaid-Cr48L9fH.js} +2 -2
  63. package/dist/public/assets/{MermaidDocEditor-_Gx5VJXW.js → MermaidDocEditor-C30-UfMg.js} +1 -1
  64. package/dist/public/assets/{RegisteredAgentIcon-CSZXCqwG.js → RegisteredAgentIcon-Cdt1gfjt.js} +1 -1
  65. package/dist/public/assets/{ReportBugDialogBody-C9wKJMEr.js → ReportBugDialogBody-BUGec7jk.js} +1 -1
  66. package/dist/public/assets/SchemaConfigEditor-DPK5XbMd.js +1 -0
  67. package/dist/public/assets/SessionsHost-BobZkNwc.js +2 -0
  68. package/dist/public/assets/SettingsDialogBody-COTbFRqi.js +12 -0
  69. package/dist/public/assets/{ShareBranchSwitchDialog-DWmVoqtB.js → ShareBranchSwitchDialog-C0mAHHVQ.js} +1 -1
  70. package/dist/public/assets/{ShareReceiveDialog-Deigdttj.js → ShareReceiveDialog-Coi9tYAP.js} +1 -1
  71. package/dist/public/assets/{ShareReceiveMissDialog-Bw2-qhvJ.js → ShareReceiveMissDialog-B03ClkaE.js} +1 -1
  72. package/dist/public/assets/{SkillEditBanner-B31-HMnN.js → SkillEditBanner-C7z-32HN.js} +1 -1
  73. package/dist/public/assets/{SkillOriginInline-OqQA2gy_.js → SkillOriginInline-DgWSnmXH.js} +1 -1
  74. package/dist/public/assets/SkillToolbarControls-PvRY_LHn.js +1 -0
  75. package/dist/public/assets/SlidesToolbarControls-8TzXHMwI.js +1 -0
  76. package/dist/public/assets/SourceEditor-Duqpede9.js +1 -0
  77. package/dist/public/assets/TerminalPanel-Bl3bWVA_.js +146 -0
  78. package/dist/public/assets/{TerminalWindowApp-C-uBdtmk.js → TerminalWindowApp-CgWp2eC-.js} +1 -1
  79. package/dist/public/assets/{TextDocEditor-hb2f-OfN.js → TextDocEditor-CHDC5byq.js} +1 -1
  80. package/dist/public/assets/ThreadView-VqdgemBS.js +10 -0
  81. package/dist/public/assets/{TimelineDiffPane-BLLl6THu.js → TimelineDiffPane-DnaRcvCk.js} +2 -2
  82. package/dist/public/assets/{abnfDiagram-VRR7QNED-Df7YgB-u.js → abnfDiagram-VRR7QNED-zrdnvCxH.js} +1 -1
  83. package/dist/public/assets/{agent-diff-store-CLtKPNmI.js → agent-diff-store-B7oQn7l7.js} +1 -1
  84. package/dist/public/assets/agent-visibility-CHYjRInm.js +1 -0
  85. package/dist/public/assets/{arc-CVPlXeVn.js → arc-DNWUH4a1.js} +1 -1
  86. package/dist/public/assets/architecture-TIHT7OUA-DHywK0qf.js +1 -0
  87. package/dist/public/assets/{architectureDiagram-ZJ3FMSHR-Cid8pwpH.js → architectureDiagram-ZJ3FMSHR-C8Bd5LWV.js} +1 -1
  88. package/dist/public/assets/arrow-up-right-0IN5lFEX.js +1 -0
  89. package/dist/public/assets/auth-state-cache-BUYyIMUZ.js +11 -0
  90. package/dist/public/assets/{blockDiagram-677ZJIJ3-CbwD0mr1.js → blockDiagram-677ZJIJ3-B9IYmQZQ.js} +1 -1
  91. package/dist/public/assets/{braces-PuTG97X6.js → braces-Ytg60O62.js} +1 -1
  92. package/dist/public/assets/{c4Diagram-LMCZKHZV-CZHW-U3Z.js → c4Diagram-LMCZKHZV-BAmqGVbu.js} +1 -1
  93. package/dist/public/assets/{calendar-Dze0sDp0.js → calendar-GynmFVw0.js} +1 -1
  94. package/dist/public/assets/{case-sensitive-DyF7sIpA.js → case-sensitive-DvBZDISP.js} +1 -1
  95. package/dist/public/assets/channel-BNyr5ucm.js +1 -0
  96. package/dist/public/assets/check-BLuQ2zvV.js +1 -0
  97. package/dist/public/assets/{checkbox-DqQC4GOw.js → checkbox-V0IoPAe3.js} +1 -1
  98. package/dist/public/assets/{chevron-down-CRb8csep.js → chevron-down-DrpHBSgH.js} +1 -1
  99. package/dist/public/assets/chevron-left-BUr-yKA4.js +1 -0
  100. package/dist/public/assets/chevron-right-BU8AeJST.js +1 -0
  101. package/dist/public/assets/{chevron-up-BZk9M0QL.js → chevron-up-CsH_dTwv.js} +1 -1
  102. package/dist/public/assets/chunk-2Q5K7J3B-UKfnOi4g.js +1 -0
  103. package/dist/public/assets/{chunk-32BRIVSS-DT6F-uh7.js → chunk-32BRIVSS-DMLdlgjI.js} +1 -1
  104. package/dist/public/assets/{chunk-52WLFC77-z8Dc0FTi.js → chunk-52WLFC77-CA6wNZGK.js} +1 -1
  105. package/dist/public/assets/{chunk-5FCAYU7R-CTroACwQ.js → chunk-5FCAYU7R-DqJZ_M2Z.js} +1 -1
  106. package/dist/public/assets/{chunk-5HE753X5-BiVTlY9X.js → chunk-5HE753X5-xEmSuz1X.js} +1 -1
  107. package/dist/public/assets/{chunk-5JV3BV7I-D5PSiL8d.js → chunk-5JV3BV7I-Ck8lDs_Z.js} +1 -1
  108. package/dist/public/assets/{chunk-5TONJI2A-Bxf6m0R0.js → chunk-5TONJI2A-PrC_RJYQ.js} +1 -1
  109. package/dist/public/assets/{chunk-5VM5RSS4-CRkhjuQ5.js → chunk-5VM5RSS4-uHW5nKzV.js} +1 -1
  110. package/dist/public/assets/{chunk-7BUUIJ7U-CIezx2MS.js → chunk-7BUUIJ7U-QsQRXodN.js} +1 -1
  111. package/dist/public/assets/{chunk-BIQX33UG-4vkcoUCs.js → chunk-BIQX33UG-Bn3R7PMg.js} +1 -1
  112. package/dist/public/assets/{chunk-BO2N2NFS-CC8ch_fx.js → chunk-BO2N2NFS-XrP3H1kD.js} +13 -13
  113. package/dist/public/assets/{chunk-C7G6YPKG-CfSnkt3g.js → chunk-C7G6YPKG-Cyi6lMg0.js} +1 -1
  114. package/dist/public/assets/{chunk-CQNSW5MT-DY98Y9zl.js → chunk-CQNSW5MT-DcGjpkNq.js} +1 -1
  115. package/dist/public/assets/{chunk-CYSBUYHQ-BK-vm9jf.js → chunk-CYSBUYHQ-DtqK9e9B.js} +1 -1
  116. package/dist/public/assets/{chunk-EMLP6XTP-DZw4ZtXy.js → chunk-EMLP6XTP-CwGsiDUi.js} +1 -1
  117. package/dist/public/assets/{chunk-EX3LRPZG-Bk_23Lji.js → chunk-EX3LRPZG-DLPjvnJt.js} +1 -1
  118. package/dist/public/assets/{chunk-FWX5IMBZ-Bcld6_cI.js → chunk-FWX5IMBZ-Dl1Yx5lK.js} +2 -2
  119. package/dist/public/assets/{chunk-HOUHSVGY-CFg4tiNL.js → chunk-HOUHSVGY-DV13h0Pr.js} +1 -1
  120. package/dist/public/assets/{chunk-ICXQ74PX-D2_LgSCG.js → chunk-ICXQ74PX-INpeR2_Y.js} +1 -1
  121. package/dist/public/assets/{chunk-JG7HCLWE-DvlaYzpW.js → chunk-JG7HCLWE-DjqF4wz1.js} +1 -1
  122. package/dist/public/assets/{chunk-JWPE2WC7-CLgWJdHV.js → chunk-JWPE2WC7-ChNUGWh8.js} +1 -1
  123. package/dist/public/assets/{chunk-MOJQB5TN-ChUfYEEn.js → chunk-MOJQB5TN-DYAyc4PI.js} +1 -1
  124. package/dist/public/assets/{chunk-MOZMSUNE-BGXPWMly.js → chunk-MOZMSUNE-DAoBuwD4.js} +1 -1
  125. package/dist/public/assets/{chunk-OGEWGWER-CivbNyHY.js → chunk-OGEWGWER-_vqBGeRc.js} +1 -1
  126. package/dist/public/assets/{chunk-OSBZ3O6U-DWgnErEt.js → chunk-OSBZ3O6U-SeZvOun8.js} +1 -1
  127. package/dist/public/assets/{chunk-PUDLZKDR-B7d6ISYj.js → chunk-PUDLZKDR-C184t24_.js} +1 -1
  128. package/dist/public/assets/{chunk-Q4XR5HBZ-91W5kPi9.js → chunk-Q4XR5HBZ-SaCK9erE.js} +1 -1
  129. package/dist/public/assets/{chunk-QBLGF6JB-4F2Itui7.js → chunk-QBLGF6JB-CJVMUUtn.js} +1 -1
  130. package/dist/public/assets/{chunk-R7FJI6CG-hR8tQLXq.js → chunk-R7FJI6CG-q21e0CIM.js} +1 -1
  131. package/dist/public/assets/{chunk-RYQCIY6F-DycaSFT5.js → chunk-RYQCIY6F-nQAz-0yS.js} +1 -1
  132. package/dist/public/assets/{chunk-U6XO7XAA-CHI_dfPQ.js → chunk-U6XO7XAA-hembI7o8.js} +1 -1
  133. package/dist/public/assets/{chunk-V7JOEXUC-Bw7Trikr.js → chunk-V7JOEXUC-3RMXHrzo.js} +1 -1
  134. package/dist/public/assets/chunk-VAUOI2AC-ChJppfl7.js +1 -0
  135. package/dist/public/assets/{chunk-VR4S4FIN-td2s33cT.js → chunk-VR4S4FIN-YHQiPjFo.js} +1 -1
  136. package/dist/public/assets/{chunk-WYO6CB5R-BL3R8kzV.js → chunk-WYO6CB5R-tHLnBMnY.js} +2 -2
  137. package/dist/public/assets/chunk-XXDRQBXY-Bsh29NfZ.js +1 -0
  138. package/dist/public/assets/{chunk-YOTPTUD7-Cg9yDbvj.js → chunk-YOTPTUD7-u4FR_PoG.js} +1 -1
  139. package/dist/public/assets/{chunk-ZGVPDNZ5-DdQ8WlYq.js → chunk-ZGVPDNZ5-BFUSTZTU.js} +1 -1
  140. package/dist/public/assets/{chunk-ZIRB5QZD-DuiWBTeF.js → chunk-ZIRB5QZD-D120inkG.js} +1 -1
  141. package/dist/public/assets/classDiagram-OUVF2IWQ-6PbrHEW6.js +1 -0
  142. package/dist/public/assets/classDiagram-v2-EOCWNBFH-B4bz8Etj.js +1 -0
  143. package/dist/public/assets/client-version-DfXcf1Qf.js +1 -0
  144. package/dist/public/assets/{cm-theme-CUwlOcHl.js → cm-theme-BJSRL90r.js} +1 -1
  145. package/dist/public/assets/code-highlighter-impl-Bq6VPPCL.js +144 -0
  146. package/dist/public/assets/comment-chips-BhvfCPCk.js +5 -0
  147. package/dist/public/assets/{config-context-DyUEqnhn.js → config-context-DNY4at5d.js} +1 -1
  148. package/dist/public/assets/config-provider-B7dMDFNr.js +5 -0
  149. package/dist/public/assets/{cose-bilkent-JH36ORCC-YCEFr4ip.js → cose-bilkent-JH36ORCC-D0CYnCA3.js} +1 -1
  150. package/dist/public/assets/cynefin-VYW2F7L2-CjkKc5Wd.js +1 -0
  151. package/dist/public/assets/{cynefinDiagram-TSTJHNR4-BRxY_0dy.js → cynefinDiagram-TSTJHNR4-Bgric3JJ.js} +1 -1
  152. package/dist/public/assets/{dagre-VKFMJZFB-BTPOxYfv.js → dagre-VKFMJZFB-BXjUnJMs.js} +1 -1
  153. package/dist/public/assets/{dagre-4yTvJ5bN.js → dagre-uJOGPMM-.js} +1 -1
  154. package/dist/public/assets/{diagram-FQU43EPY-C6lvEDUr.js → diagram-FQU43EPY-dXOWFjMG.js} +1 -1
  155. package/dist/public/assets/{diagram-G47NLZAW-BHMtTNZp.js → diagram-G47NLZAW-zdJG9pHl.js} +1 -1
  156. package/dist/public/assets/{diagram-NH7WQ7WH-CaxSgclq.js → diagram-NH7WQ7WH-BVYbs_C0.js} +1 -1
  157. package/dist/public/assets/{diagram-OA4YK3LP-C_1H_cmz.js → diagram-OA4YK3LP-Ds5ohbs1.js} +1 -1
  158. package/dist/public/assets/{diagram-WEI45ONY-hy5nz4b2.js → diagram-WEI45ONY-BluqqbZ4.js} +1 -1
  159. package/dist/public/assets/{dialog-DwFomKjP.js → dialog-eak3pI7G.js} +1 -1
  160. package/dist/public/assets/{dist-CJtNQVui.js → dist--4AcVRue.js} +1 -1
  161. package/dist/public/assets/{dist-BHX9GuTC.js → dist-BCM06z1D.js} +1 -1
  162. package/dist/public/assets/{dist-CFDOSoEm.js → dist-BDJLSjo2.js} +1 -1
  163. package/dist/public/assets/{dist-aEzrjz-4.js → dist-CkHhDuKZ.js} +1 -1
  164. package/dist/public/assets/{dist-Cz7Q9WAs.js → dist-ClczuKkQ.js} +1 -1
  165. package/dist/public/assets/{dist-AhKSYQhE2.js → dist-DJ3iQH0N.js} +1 -1
  166. package/dist/public/assets/{dist-CdZbZpjt.js → dist-DNV7r8rH.js} +1 -1
  167. package/dist/public/assets/{dist-DdN4_oB-.js → dist-DndwauQ3.js} +1 -1
  168. package/dist/public/assets/{dist-DgD72kci.js → dist-DvtYFuZI.js} +1 -1
  169. package/dist/public/assets/dist-PVtTd_Sj2.js +579 -0
  170. package/dist/public/assets/{dist-HbUc9U1a.js → dist-Wj2cwRLU.js} +1 -1
  171. package/dist/public/assets/{dist-BX-8uxZE.js → dist-hwUYIgzz.js} +1 -1
  172. package/dist/public/assets/{dist-KXQQa8Xt.js → dist-tByLfm_n.js} +1 -1
  173. package/dist/public/assets/{dist-C7PQBily.js → dist-yYRRvtMr.js} +1 -1
  174. package/dist/public/assets/{doc-paths-Dr8av3tc.js → doc-paths-CH8QyanF.js} +1 -1
  175. package/dist/public/assets/{documents-events-Cd-1x5Ed.js → documents-events-COSAPFkC.js} +1 -1
  176. package/dist/public/assets/{download-QOlmqXQ8.js → download-Bq4sKAdj.js} +1 -1
  177. package/dist/public/assets/{dropdown-menu-DRytYgB4.js → dropdown-menu-BhMtMvZp.js} +1 -1
  178. package/dist/public/assets/{ebnfDiagram-CCIWWBDH-CSOwp-KN.js → ebnfDiagram-CCIWWBDH-BWiN4nWj.js} +1 -1
  179. package/dist/public/assets/{erDiagram-Q63AITRT-CulC3etm.js → erDiagram-Q63AITRT-5GE6Syx5.js} +1 -1
  180. package/dist/public/assets/eventmodeling-45OFAUF4-GQ05Sah7.js +1 -0
  181. package/dist/public/assets/{eye-CArKS_Md.js → eye-DYUvwA0Z.js} +1 -1
  182. package/dist/public/assets/field-DN11CYjs.js +1 -0
  183. package/dist/public/assets/{file-tree-adapter-DbXLXHhN.js → file-tree-adapter-B9dmiTPy.js} +1 -1
  184. package/dist/public/assets/{file-tree-utils-DfeUmuaf.js → file-tree-utils-CvsKsHRh.js} +1 -1
  185. package/dist/public/assets/flowDiagram-23GEKE2U-CwO12b-s.js +1 -0
  186. package/dist/public/assets/{folder-DxrU2PLH.js → folder-Cnftw7jd.js} +1 -1
  187. package/dist/public/assets/{folder-config-api-C3YTmDwB.js → folder-config-api-IGZhtkRo.js} +1 -1
  188. package/dist/public/assets/{folder-open-ee990ToL.js → folder-open-DoQalFip.js} +1 -1
  189. package/dist/public/assets/follow-file-CWSsUd-S.js +1 -0
  190. package/dist/public/assets/{ganttDiagram-NO4QXBWP-iVPMtR6h.js → ganttDiagram-NO4QXBWP-DGnL6oh-.js} +1 -1
  191. package/dist/public/assets/gherkin-DHKdvgzn.js +1 -0
  192. package/dist/public/assets/{git-branch-B0WeYwW-.js → git-branch-BWBPTGqT.js} +1 -1
  193. package/dist/public/assets/gitGraph-TEB2WS4Q-Da8kWWZb.js +1 -0
  194. package/dist/public/assets/{gitGraphDiagram-IHSO6WYX-DdI0uf23.js → gitGraphDiagram-IHSO6WYX-mMfBO0xv.js} +1 -1
  195. package/dist/public/assets/{globals-DyXnUQBm.js → globals-C-kRTFCu.js} +2 -2
  196. package/dist/public/assets/globals-D9Q1kf3c.css +1 -0
  197. package/dist/public/assets/{graphlib-2sje7ygs.js → graphlib-CS7i3af0.js} +1 -1
  198. package/dist/public/assets/{hash-CDGtqqEo.js → hash-BZXl_HqD.js} +1 -1
  199. package/dist/public/assets/{highlighted-body-OFNGDK62-nVG7xLpg.js → highlighted-body-OFNGDK62-Bc_b2HT_.js} +1 -1
  200. package/dist/public/assets/history-BNEST2Cx.js +1 -0
  201. package/dist/public/assets/html-void-elements-Bkr32DGT.js +1 -0
  202. package/dist/public/assets/i18n-CIRn0AvV.js +1 -0
  203. package/dist/public/assets/index-Dmlpu4P1.js +2097 -0
  204. package/dist/public/assets/info-DKCQHKI2-BPZv5cfZ.js +1 -0
  205. package/dist/public/assets/{info-BnJuC0vW.js → info-Jj1j2YxC.js} +1 -1
  206. package/dist/public/assets/{infoDiagram-FWYZ7A6U-CCLCXbok.js → infoDiagram-FWYZ7A6U-DuU1GDQ6.js} +1 -1
  207. package/dist/public/assets/{input-group-BgDCDWUR.js → input-group-H-ZoGiXT.js} +1 -1
  208. package/dist/public/assets/{ishikawaDiagram-FXEZZL3T-DYNfj8DM.js → ishikawaDiagram-FXEZZL3T-Bg0KJFCj.js} +1 -1
  209. package/dist/public/assets/{journeyDiagram-5HDEW3XC-D3IdBiiM.js → journeyDiagram-5HDEW3XC-DLWkGhNH.js} +1 -1
  210. package/dist/public/assets/{kanban-definition-HUTT4EX6-CF_ZN-jM.js → kanban-definition-HUTT4EX6-BhYGhRMu.js} +1 -1
  211. package/dist/public/assets/lib-BHGXbMkc.js +9 -0
  212. package/dist/public/assets/lib-DcrRfjuF.js +29 -0
  213. package/dist/public/assets/{line-BA7emVey.js → line-e19R8FCM.js} +1 -1
  214. package/dist/public/assets/{linear-CUFA2OWO.js → linear-a82bFSBJ.js} +1 -1
  215. package/dist/public/assets/{lint-config-client-CeUWUhyK.js → lint-config-client-DkwFMG_T.js} +1 -1
  216. package/dist/public/assets/list-plus-IYEFhKGU.js +1 -0
  217. package/dist/public/assets/loader-circle-Coob8S41.js +1 -0
  218. package/dist/public/assets/{local-menu-action-bus-iy6v2osW.js → local-menu-action-bus-DLozq_c4.js} +1 -1
  219. package/dist/public/assets/{map-DbAr_xa0.js → map-il90ypLM.js} +1 -1
  220. package/dist/public/assets/markdownlint-rule-browser-DY5CRVFm.js +1 -0
  221. package/dist/public/assets/mascot-outline-CtS592mc.js +1 -0
  222. package/dist/public/assets/mcp-consent-store-B_Tog3LX.js +1 -0
  223. package/dist/public/assets/mermaid-GHXKKRXX-CaB-_LCR.js +1 -0
  224. package/dist/public/assets/{mermaid-parser.core-B8FUrn7y.js → mermaid-parser.core-ueh8mdU-.js} +2 -2
  225. package/dist/public/assets/{mermaid.core-gcfl0bT0.js → mermaid.core-RZ5le45c.js} +3 -3
  226. package/dist/public/assets/messages-6Fd7I7zn.js +1 -0
  227. package/dist/public/assets/messages-BJIB1I1L.js +1 -0
  228. package/dist/public/assets/messages-BOXmrfhw.js +1 -0
  229. package/dist/public/assets/messages-BeOM8jWl.js +1 -0
  230. package/dist/public/assets/messages-CCWKIebo.js +1 -0
  231. package/dist/public/assets/messages-CQFityfC.js +1 -0
  232. package/dist/public/assets/messages-CzRXVtjz.js +1 -0
  233. package/dist/public/assets/messages-DYiuNk7y.js +1 -0
  234. package/dist/public/assets/messages-Db5U-G1d.js +1 -0
  235. package/dist/public/assets/messages-DohtKbKM.js +1 -0
  236. package/dist/public/assets/messages-WWFblTuV.js +1 -0
  237. package/dist/public/assets/{mindmap-definition-LN4V7U3C-9ySd_DkR.js → mindmap-definition-LN4V7U3C-Bcv7y0kn.js} +1 -1
  238. package/dist/public/assets/minus-DPAjfzCa.js +1 -0
  239. package/dist/public/assets/{miss-dialog-store-B3cHkf8G.js → miss-dialog-store--ihxgGwV.js} +1 -1
  240. package/dist/public/assets/navigation-targets-DKe7BSku.js +1 -0
  241. package/dist/public/assets/{now-B4vxsI1S.js → now-CZywS9tX.js} +1 -1
  242. package/dist/public/assets/{open-managed-artifact-tab-DN3NM6Ff.js → open-managed-artifact-tab-DGO7syz6.js} +1 -1
  243. package/dist/public/assets/{ordinal-Cfxeoxe-.js → ordinal-Bj6MlRdi.js} +1 -1
  244. package/dist/public/assets/packet-7NZHBO7P-BtkfuFQU.js +1 -0
  245. package/dist/public/assets/{panel-right-open-Cc56I_GE.js → panel-right-open-BhUOm1Eq.js} +1 -1
  246. package/dist/public/assets/{paperclip-D7KMFbO9.js → paperclip-9gdTBktj.js} +1 -1
  247. package/dist/public/assets/{pegDiagram-2B236MQR-cNCSiNUP.js → pegDiagram-2B236MQR-Du6F68bP.js} +1 -1
  248. package/dist/public/assets/{pending-receive-nav-store-B4JTMHp-.js → pending-receive-nav-store-SZ8w-xKW.js} +1 -1
  249. package/dist/public/assets/pie-RZYD4A2V-DipSPJ4R.js +1 -0
  250. package/dist/public/assets/{pieDiagram-ENE6RG2P-C2bxi6W1.js → pieDiagram-ENE6RG2P-Du-eEA1d.js} +1 -1
  251. package/dist/public/assets/project-paths-fLhDAPyF.js +1 -0
  252. package/dist/public/assets/prop-types-DoONHMUn.js +1 -0
  253. package/dist/public/assets/{quadrantDiagram-ABIIQ3AL-C8AftH1G.js → quadrantDiagram-ABIIQ3AL-NefyxxyK.js} +1 -1
  254. package/dist/public/assets/radar-I7S5WNFK-CsW1Ke6j.js +1 -0
  255. package/dist/public/assets/railroad-3IZDKUUU-CDGYvuvs.js +1 -0
  256. package/dist/public/assets/railroad-abnf-AHOZXSZD-IJHoKQ5T.js +1 -0
  257. package/dist/public/assets/railroad-ebnf-EBAXGLYW-DiwXL3Zg.js +1 -0
  258. package/dist/public/assets/railroad-peg-LSFZ7HO6-B4tduAeK.js +1 -0
  259. package/dist/public/assets/{railroadDiagram-RFXS5EU6-CZh61tJk.js → railroadDiagram-RFXS5EU6-CN_1Ywzn.js} +1 -1
  260. package/dist/public/assets/receive-store-BvkW9HUo.js +2 -0
  261. package/dist/public/assets/{refresh-cw-DGLnzhho.js → refresh-cw-REpEMEB2.js} +1 -1
  262. package/dist/public/assets/{requirementDiagram-TGXJPOKE-CQLu3M38.js → requirementDiagram-TGXJPOKE-bDLvkWBT.js} +1 -1
  263. package/dist/public/assets/{sankeyDiagram-HTMAVEWB-Bjus_sTX.js → sankeyDiagram-HTMAVEWB-CyhjQEet.js} +1 -1
  264. package/dist/public/assets/schema-fields-view-intent-DZFjFt0c.js +1 -0
  265. package/dist/public/assets/{select-BU4xT6VN.js → select-CRztynyQ.js} +1 -1
  266. package/dist/public/assets/{selection-context-CHSH5Ljn.js → selection-context-CSP8zK1H.js} +1 -1
  267. package/dist/public/assets/separator-k0mwGcaM.js +1 -0
  268. package/dist/public/assets/{sequenceDiagram-DBY2YBRQ-BR7Ay_cV.js → sequenceDiagram-DBY2YBRQ-BeYilBxj.js} +1 -1
  269. package/dist/public/assets/{sizeCapture-X5ZJPWSS-B6c4PqMD.js → sizeCapture-X5ZJPWSS-Mb3J__hm.js} +1 -1
  270. package/dist/public/assets/skill-actions-98H3SnCL.js +2 -0
  271. package/dist/public/assets/{skill-scope-CEtnfeg4.js → skill-scope-Dr7iwSW3.js} +1 -1
  272. package/dist/public/assets/skills-api-qDbnaMmu.js +1 -0
  273. package/dist/public/assets/{square-pen-CEIus1aL.js → square-pen-D3oI-YUs.js} +1 -1
  274. package/dist/public/assets/{src-BFmudBKQ.js → src-DT86yydp.js} +1 -1
  275. package/dist/public/assets/{src-BtmmehSp.js → src-VcUCSe0b.js} +2 -2
  276. package/dist/public/assets/{stateDiagram-2N3HPSRC-DJmlM8IW.js → stateDiagram-2N3HPSRC-D0WNjYjx.js} +1 -1
  277. package/dist/public/assets/stateDiagram-v2-6OUMAXLB-NccT1PAw.js +1 -0
  278. package/dist/public/assets/{swimlanes-5IMT3BWC-D8ijXWBf.js → swimlanes-5IMT3BWC-BAPdgrYU.js} +2 -2
  279. package/dist/public/assets/swimlanesDiagram-G3AALYLV-CIDy7tZE.js +8 -0
  280. package/dist/public/assets/{tag-pill-input-DFIdRT0e.js → tag-pill-input-pBac7WXR.js} +1 -1
  281. package/dist/public/assets/{target-navigation-intent-2M1YK6Wd.js → target-navigation-intent-DAyeqt__.js} +1 -1
  282. package/dist/public/assets/{telemetry-impl-V8ZB0k7Y.js → telemetry-impl-C9jF13xo.js} +2 -2
  283. package/dist/public/assets/{telemetry-startup-Dww4VvEI.js → telemetry-startup-1DamiHqT.js} +1 -1
  284. package/dist/public/assets/terminal-command-events-BBYZtptJ.js +1 -0
  285. package/dist/public/assets/terminal-launch-events-CIULxHeu.js +1 -0
  286. package/dist/public/assets/terminal-mGTI25Qq.js +1 -0
  287. package/dist/public/assets/{terminal-telemetry-CS_Zz_F-.js → terminal-telemetry-CqkILJJU.js} +1 -1
  288. package/dist/public/assets/text-viewer-languages-BTzKrM_y.js +2 -0
  289. package/dist/public/assets/thread-client-DSDduEdo.js +1 -0
  290. package/dist/public/assets/{timeline-definition-FHXFAJF6-DwBMj07Z.js → timeline-definition-FHXFAJF6-BnIpQBQO.js} +1 -1
  291. package/dist/public/assets/{trash-2-Ccq_llrY.js → trash-2-BSr7FcE8.js} +1 -1
  292. package/dist/public/assets/treeView-QDETBFTQ-DCy4i-OI.js +1 -0
  293. package/dist/public/assets/treemap-6X3UGDF4-BrUnfA75.js +1 -0
  294. package/dist/public/assets/{triangle-alert-V8YoC6ss.js → triangle-alert-DNTyNeem.js} +1 -1
  295. package/dist/public/assets/typing-burst-detector-BOmjXV-P.js +8 -0
  296. package/dist/public/assets/{undo-2-bYFSgQwb.js → undo-2-u9f9OoCF.js} +1 -1
  297. package/dist/public/assets/uninstall-36twrq5C.js +1 -0
  298. package/dist/public/assets/{use-activity-panel-B0DFdV4C.js → use-activity-panel-BwANCYjg.js} +1 -1
  299. package/dist/public/assets/{use-collab-url-CMgoqd7H.js → use-collab-url-TKpnPAW8.js} +1 -1
  300. package/dist/public/assets/{use-live-xterm-theme-KGb9fc_e.js → use-live-xterm-theme-B8OPZLR3.js} +1 -1
  301. package/dist/public/assets/{use-open-skill-DhpKvkHk.js → use-open-skill-DCSEJ3jJ.js} +1 -1
  302. package/dist/public/assets/use-settings-route-CKMxexs3.js +1 -0
  303. package/dist/public/assets/{use-skill-directory-CLM2VHZh.js → use-skill-directory-D9S5f8By.js} +1 -1
  304. package/dist/public/assets/{use-skill-origin-DxVRIW_T.js → use-skill-origin-8_nwflm6.js} +1 -1
  305. package/dist/public/assets/use-skills-D5kEHDif.js +1 -0
  306. package/dist/public/assets/{use-terminal-enabled-DTsNSKJU.js → use-terminal-enabled-Ctosnrg_.js} +1 -1
  307. package/dist/public/assets/{use-timeline-entry-diff-Cj4GIfcv.js → use-timeline-entry-diff-CB_cI1yy.js} +4 -4
  308. package/dist/public/assets/use-workspace--QTATo27.js +1 -0
  309. package/dist/public/assets/{vennDiagram-L72KCM5P-DZxwOiUn.js → vennDiagram-L72KCM5P-C38RYC28.js} +1 -1
  310. package/dist/public/assets/wardley-OPB4EBWU-yXijkZ08.js +1 -0
  311. package/dist/public/assets/{wardleyDiagram-EHGQE667-D44Ff-nh.js → wardleyDiagram-EHGQE667-B0VRsKo1.js} +1 -1
  312. package/dist/public/assets/workspace-paths-EgbOaHls.js +1 -0
  313. package/dist/public/assets/{wrench-D8b4qpCM.js → wrench-BPXVnAE5.js} +1 -1
  314. package/dist/public/assets/x-COTyTduF.js +1 -0
  315. package/dist/public/assets/{xychartDiagram-FW5EYKEG-B_4MyxsA.js → xychartDiagram-FW5EYKEG-jAQK9E85.js} +1 -1
  316. package/dist/public/index.html +160 -130
  317. package/dist/public/uninstall.html +19 -15
  318. package/dist/{repair-launch-json-Dv7Lnj9v.mjs → repair-launch-json-Cq9ghST3.mjs} +2 -2
  319. package/dist/{repair-mcp-configs-Wiccuwea.mjs → repair-mcp-configs-DY0FS2-y.mjs} +2 -2
  320. package/dist/{repair-skills-QLgUXS7O.mjs → repair-skills-CkZZbtNk.mjs} +2 -2
  321. package/dist/repair-skills-l9Id0gzv.mjs +1 -0
  322. package/dist/schemas/v0/config.user.schema.json +38 -0
  323. package/dist/{server-lock-DsDrc4RU.mjs → server-lock-BleUv9m0.mjs} +2 -2
  324. package/dist/server-lock-uucDARDL.mjs +1 -0
  325. package/dist/{skill-teardown-Cj1-Y6iS.mjs → skill-teardown-CZnemDLF.mjs} +2 -2
  326. package/dist/{sleep-ByqzSHar.mjs → sleep-DVOInM4H.mjs} +5 -5
  327. package/dist/{src-azBs1EPY.mjs → src-9BFQh559.mjs} +127 -127
  328. package/dist/src-9I3GiOoK.mjs +2032 -0
  329. package/dist/{src-B9TR_wSW.mjs → src-Dl8P6sfz.mjs} +7 -7
  330. package/dist/src-h5dDPK2z.mjs +1 -0
  331. package/dist/start-BYY0acPS.mjs +1 -0
  332. package/dist/{start-BzOb2Q7k.mjs → start-C4KuZHu5.mjs} +3 -3
  333. package/dist/{write-project-skill-B77kdJNQ.mjs → write-project-skill-WXZSbQlg.mjs} +2 -2
  334. package/package.json +4 -4
  335. package/dist/constants-PCQO1EGt.mjs +0 -2
  336. package/dist/fs-traced-WMTb98_i.mjs +0 -1
  337. package/dist/git-handle-CtdWfsLv.mjs +0 -1
  338. package/dist/init-D38fj6bo.mjs +0 -1
  339. package/dist/loader-BkHXK7KD.mjs +0 -1
  340. package/dist/md-manager-C54e9m9K.mjs +0 -2
  341. package/dist/preview-B1SJHxOP.mjs +0 -1
  342. package/dist/public/assets/BugReportHistory-C_4-NQ-j.js +0 -1
  343. package/dist/public/assets/ChangedOutsideBadge-CazpgqWA.js +0 -1
  344. package/dist/public/assets/CodeMirrorPropInput-B98kUaCj.js +0 -3
  345. package/dist/public/assets/DocumentContext-BeNSZPYG.js +0 -38
  346. package/dist/public/assets/FeedbackForm-DijnhbeO.js +0 -1
  347. package/dist/public/assets/ManagedArtifactProperties-CM6O_XVV.js +0 -2
  348. package/dist/public/assets/ManagedArtifactProperties-DUFF_4AB.js +0 -1
  349. package/dist/public/assets/SchemaConfigEditor-KkMUeDV5.js +0 -1
  350. package/dist/public/assets/SessionsHost-CH5jffAG.js +0 -2
  351. package/dist/public/assets/SettingsDialogBody--nklwAG-.js +0 -12
  352. package/dist/public/assets/SkillToolbarControls-U1QWzi0I.js +0 -1
  353. package/dist/public/assets/SourceEditor-DtuqTQRl.js +0 -1
  354. package/dist/public/assets/TerminalPanel-BElaeDzL.js +0 -146
  355. package/dist/public/assets/ThreadView-CQqlZmdN.js +0 -6
  356. package/dist/public/assets/agent-visibility-Dz506quD.js +0 -1
  357. package/dist/public/assets/architecture-TIHT7OUA-Bu3B2Eu7.js +0 -1
  358. package/dist/public/assets/arrow-up-right-Gp4MuO-g.js +0 -1
  359. package/dist/public/assets/auth-state-cache-epurX430.js +0 -11
  360. package/dist/public/assets/channel-BBYqtvcN.js +0 -1
  361. package/dist/public/assets/check-DLRoQSSY.js +0 -1
  362. package/dist/public/assets/chevron-left-BRFq0qcJ.js +0 -1
  363. package/dist/public/assets/chevron-right-BjiB8LDf.js +0 -1
  364. package/dist/public/assets/chunk-2Q5K7J3B-DeGCwTid.js +0 -1
  365. package/dist/public/assets/chunk-VAUOI2AC-B4WVYMGW.js +0 -1
  366. package/dist/public/assets/chunk-XXDRQBXY-DjPNLLex.js +0 -1
  367. package/dist/public/assets/classDiagram-OUVF2IWQ-CusZeKDE.js +0 -1
  368. package/dist/public/assets/classDiagram-v2-EOCWNBFH-3Dd_UHkU.js +0 -1
  369. package/dist/public/assets/client-version-C9zQ1Cba.js +0 -1
  370. package/dist/public/assets/comment-chips-Da14zLsr.js +0 -7
  371. package/dist/public/assets/config-provider-NjnhDMPo.js +0 -4
  372. package/dist/public/assets/cynefin-VYW2F7L2-Dh2yc-Yt.js +0 -1
  373. package/dist/public/assets/dist-DOPRKSzO2.js +0 -586
  374. package/dist/public/assets/eventmodeling-45OFAUF4-CoqTTBqG.js +0 -1
  375. package/dist/public/assets/field-iFofWrdC.js +0 -1
  376. package/dist/public/assets/flowDiagram-23GEKE2U-BKkbdW0r.js +0 -1
  377. package/dist/public/assets/follow-file-Bi4vCCLt.js +0 -1
  378. package/dist/public/assets/gitGraph-TEB2WS4Q-D2tde3MB.js +0 -1
  379. package/dist/public/assets/globals-Bl3fKb9V.css +0 -1
  380. package/dist/public/assets/index-OWoDTcDq.js +0 -2092
  381. package/dist/public/assets/info-DKCQHKI2-DIQGY0RW.js +0 -1
  382. package/dist/public/assets/lib-CtlgmvnR.js +0 -29
  383. package/dist/public/assets/loader-circle-B0OUuKph.js +0 -1
  384. package/dist/public/assets/markdownlint-rule-browser-DfPiRgim.js +0 -1
  385. package/dist/public/assets/mcp-consent-store-Dz4H-8gV.js +0 -1
  386. package/dist/public/assets/mermaid-GHXKKRXX-uJrCvmwj.js +0 -1
  387. package/dist/public/assets/minus-CKcpBpdR.js +0 -1
  388. package/dist/public/assets/navigation-targets-DxC4QM5f.js +0 -1
  389. package/dist/public/assets/packet-7NZHBO7P-C6h6PguP.js +0 -1
  390. package/dist/public/assets/pie-RZYD4A2V-BgsL62qC.js +0 -1
  391. package/dist/public/assets/project-paths--7l9Mqe-.js +0 -1
  392. package/dist/public/assets/prop-types-BC9HEC35.js +0 -1
  393. package/dist/public/assets/radar-I7S5WNFK-2Fukjsh1.js +0 -1
  394. package/dist/public/assets/railroad-3IZDKUUU-BXQstaOW.js +0 -1
  395. package/dist/public/assets/railroad-abnf-AHOZXSZD-D4DJxFB6.js +0 -1
  396. package/dist/public/assets/railroad-ebnf-EBAXGLYW-B9wL5Mgq.js +0 -1
  397. package/dist/public/assets/railroad-peg-LSFZ7HO6-TRaMzMt0.js +0 -1
  398. package/dist/public/assets/receive-store-BCddK7iB.js +0 -2
  399. package/dist/public/assets/schema-fields-view-intent-Df0KnOO8.js +0 -1
  400. package/dist/public/assets/separator-C4EdGs_S.js +0 -1
  401. package/dist/public/assets/skill-actions-qtoCUe9u.js +0 -2
  402. package/dist/public/assets/skills-api-Bt6QqZxu.js +0 -1
  403. package/dist/public/assets/stateDiagram-v2-6OUMAXLB-DJeEhrn3.js +0 -1
  404. package/dist/public/assets/swimlanesDiagram-G3AALYLV-D5vkX5fS.js +0 -8
  405. package/dist/public/assets/terminal-launch-events-C2Gz2G0L.js +0 -1
  406. package/dist/public/assets/text-viewer-languages-DEjz8Rlz.js +0 -2
  407. package/dist/public/assets/thread-client-BVh92ozO.js +0 -1
  408. package/dist/public/assets/treeView-QDETBFTQ-DItjR5Rl.js +0 -1
  409. package/dist/public/assets/treemap-6X3UGDF4-D1JSLPGs.js +0 -1
  410. package/dist/public/assets/typing-burst-detector-DKVkQeXL.js +0 -8
  411. package/dist/public/assets/uninstall-iZnahGQ3.js +0 -1
  412. package/dist/public/assets/use-settings-route-ClTq87t7.js +0 -1
  413. package/dist/public/assets/use-skills-CDcSIIym.js +0 -1
  414. package/dist/public/assets/use-workspace-BNdbTGXU.js +0 -1
  415. package/dist/public/assets/wardley-OPB4EBWU-BEy33__G.js +0 -1
  416. package/dist/public/assets/x-B3zGPHCO.js +0 -1
  417. package/dist/repair-skills-DHPneNpJ.mjs +0 -1
  418. package/dist/server-lock-BoNixvAi.mjs +0 -1
  419. package/dist/src-DIjYfcIb.mjs +0 -1
  420. package/dist/src-DoSxfvJP.mjs +0 -2030
  421. package/dist/start-DLsDkcBf.mjs +0 -1
  422. /package/dist/public/assets/{ActivityPanelDiffView-DZrMHlZH.js → ActivityPanelDiffView-aQoOngI6.js} +0 -0
  423. /package/dist/public/assets/{SkillModeBanner-DFgrdWyf.js → SkillModeBanner-Y5LYtJrC.js} +0 -0
  424. /package/dist/public/assets/{__vite-browser-external-CL4duhlG.js → __vite-browser-external-6FU8ctEn.js} +0 -0
  425. /package/dist/public/assets/{agent-presence-C8KjkxgZ.js → agent-presence-DntZZFlY.js} +0 -0
  426. /package/dist/public/assets/{array-DRGYhAwX.js → array-Ce922FV9.js} +0 -0
  427. /package/dist/public/assets/{asset-dispatch-O9x3rXhj.js → asset-dispatch-Dst62kKY.js} +0 -0
  428. /package/dist/public/assets/{auth-prompt-store-DQ_HcDxh.js → auth-prompt-store-B92v76dM.js} +0 -0
  429. /package/dist/public/assets/{badge-CnYDYmI5.js → badge-B89o8Vy9.js} +0 -0
  430. /package/dist/public/assets/{chunk-KEIR6QF5-CTDrJ2_V.js → chunk-KEIR6QF5-88h2AcFS.js} +0 -0
  431. /package/dist/public/assets/{chunk-Y2CYZVJY-WQQLMo_s.js → chunk-Y2CYZVJY-B-DQ9l1H.js} +0 -0
  432. /package/dist/public/assets/{clike-BfpXCH0g.js → clike-DDeLLKpf.js} +0 -0
  433. /package/dist/public/assets/{clipboard-adapter-DPkNOslT.js → clipboard-adapter-C4L1qX1X.js} +0 -0
  434. /package/dist/public/assets/{colors-BY0RBIvp.js → colors-DXv_7g0X.js} +0 -0
  435. /package/dist/public/assets/{copilot-CuzHDCzI.js → copilot-qpaFt06v.js} +0 -0
  436. /package/dist/public/assets/{createLucideIcon-BbgVV4EV.js → createLucideIcon-BbftclCc.js} +0 -0
  437. /package/dist/public/assets/{cursor-W0skD8YU.js → cursor-Df-vt--2.js} +0 -0
  438. /package/dist/public/assets/{cytoscape.esm-Ck6hca6m.js → cytoscape.esm-61X9Wf4W.js} +0 -0
  439. /package/dist/public/assets/{defaultLocale-C9lDPH35.js → defaultLocale-BypL9rsE.js} +0 -0
  440. /package/dist/public/assets/{desktop-bridge-types-BwR5S9HF.js → desktop-bridge-types-BjBBs_pU.js} +0 -0
  441. /package/dist/public/assets/{diff-CvjWTdgS.js → diff-CUOV9XAb.js} +0 -0
  442. /package/dist/public/assets/{dist-CTHTGkF4.js → dist-BSzXg9wc.js} +0 -0
  443. /package/dist/public/assets/{dist-zYQJXuRH.js → dist-BlH6jxEE.js} +0 -0
  444. /package/dist/public/assets/{dist-CpRBr-Ct.js → dist-C7IFraT6.js} +0 -0
  445. /package/dist/public/assets/{dist-DmEZHXvB.js → dist-CEwo98ia.js} +0 -0
  446. /package/dist/public/assets/{dist-DIZJMUWy.js → dist-CG-e4AlS.js} +0 -0
  447. /package/dist/public/assets/{documents-fetch-DK-kdvYE.js → documents-fetch-BTUkzxjd.js} +0 -0
  448. /package/dist/public/assets/{external-link-COF7NUCm.js → external-link-BkNoUOYg.js} +0 -0
  449. /package/dist/public/assets/{file-tree-rename-validation-DEz_ryBu.js → file-tree-rename-validation-CEz8MVWM.js} +0 -0
  450. /package/dist/public/assets/{form-CGbOgaUs.js → form-WTEKK5Th.js} +0 -0
  451. /package/dist/public/assets/{format-CFFWVvag.js → format-C7y0e043.js} +0 -0
  452. /package/dist/public/assets/{go-D-9nxjMR.js → go-C7e4ztpP.js} +0 -0
  453. /package/dist/public/assets/{init-Dpr8Tcj2.js → init-DQ9T43b9.js} +0 -0
  454. /package/dist/public/assets/{input-CtKG6a5B.js → input-BKUcczSW.js} +0 -0
  455. /package/dist/public/assets/{isObject-B_BLuINR.js → isObject-B3vD71ho.js} +0 -0
  456. /package/dist/public/assets/{katex-7OG0ksww.js → katex-BE6VA85g.js} +0 -0
  457. /package/dist/public/assets/{libesm-Dcsy_--i.js → libesm-DLjHMG6S.js} +0 -0
  458. /package/dist/public/assets/{lint-plugin-meta-BnniPb1r.js → lint-plugin-meta-D6yg1VIa.js} +0 -0
  459. /package/dist/public/assets/{lru-string-cache-jJ5hyYK1.js → lru-string-cache-D1rxjuni.js} +0 -0
  460. /package/dist/public/assets/{lua-qAotk3Jg.js → lua-BbsHik3c.js} +0 -0
  461. /package/dist/public/assets/{markdownit-DoX6x6DK.js → markdownit-CIgVFnWs.js} +0 -0
  462. /package/dist/public/assets/{min-CCEG0l64.js → min-LWIJDKXt.js} +0 -0
  463. /package/dist/public/assets/{overlay-layers-CBGNHxJK.js → overlay-layers-BqWhClsR.js} +0 -0
  464. /package/dist/public/assets/{panel-UxAkffLp.js → panel-CbGx_cRv.js} +0 -0
  465. /package/dist/public/assets/{panzoom.es-H6kNXvjN.js → panzoom.es-CnTJleIF.js} +0 -0
  466. /package/dist/public/assets/{parse-api-error-BFe1cdS7.js → parse-api-error-Cyn4P6OR.js} +0 -0
  467. /package/dist/public/assets/{path-56QyJhyg.js → path-CdhP4z-N.js} +0 -0
  468. /package/dist/public/assets/{pdf-CYHvv2Oq.js → pdf-CvpTyCsQ.js} +0 -0
  469. /package/dist/public/assets/{pdf.worker-B8Ju19hh.js → pdf.worker-Dwl0H-tq.js} +0 -0
  470. /package/dist/public/assets/{perl-E4P7BXaC.js → perl-B_IBZ74F.js} +0 -0
  471. /package/dist/public/assets/{properties-DXHbGwrb.js → properties-DC2eg36q.js} +0 -0
  472. /package/dist/public/assets/{r-DCDstkyG.js → r-Cuws8T_X.js} +0 -0
  473. /package/dist/public/assets/{rough.esm-DE_lJ5Ge.js → rough.esm-Bmw38t74.js} +0 -0
  474. /package/dist/public/assets/{ruby-DeKk3LV3.js → ruby-B4Exyfkx.js} +0 -0
  475. /package/dist/public/assets/{share-metadata-rows-B1YjvGbL.js → share-metadata-rows-a0ScdR3d.js} +0 -0
  476. /package/dist/public/assets/{shell-BRtU48Yb.js → shell-DA6f2ert.js} +0 -0
  477. /package/dist/public/assets/{skeleton-DS8zjX9Q.js → skeleton-ColtBPsg.js} +0 -0
  478. /package/dist/public/assets/{sortable.esm-BT6d9PDz.js → sortable.esm-DlAqBM0z.js} +0 -0
  479. /package/dist/public/assets/{sql-XsKG_-B3.js → sql-gKfhysbI.js} +0 -0
  480. /package/dist/public/assets/{src-DLd5TgYd.js → src-l8acH7-t.js} +0 -0
  481. /package/dist/public/assets/{startup-marks-BJYEMeGu.js → startup-marks-BzFN1cqP.js} +0 -0
  482. /package/dist/public/assets/{stex-B3qxBOBU.js → stex-CyLY7DTo.js} +0 -0
  483. /package/dist/public/assets/{swift-CGhDVaQR.js → swift-D4PiCeXt.js} +0 -0
  484. /package/dist/public/assets/{textarea-CUVLEZhx.js → textarea-C5-cm3M6.js} +0 -0
  485. /package/dist/public/assets/{thread-draft-staging-BXLyxk1u.js → thread-draft-staging-DZhf3sQU.js} +0 -0
  486. /package/dist/public/assets/{timeline-diff-store-sC1fl4YV.js → timeline-diff-store-BpUHW_Yp.js} +0 -0
  487. /package/dist/public/assets/{toml-DkvxgD0C.js → toml-BAg1ozw3.js} +0 -0
  488. /package/dist/public/assets/{use-installed-clis-B7_xP0xS.js → use-installed-clis-CsPJ2Mod.js} +0 -0
  489. /package/dist/public/assets/{useLintConfigViewMode-C3vaXrG0.js → useLintConfigViewMode-shAfv89B.js} +0 -0
package/dist/cli.mjs CHANGED
@@ -1,22 +1,22 @@
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-ByqzSHar.mjs";import{Ao as C,Bo as ee,Ca as w,Co as te,Ds as T,Ha as ne,Io as re,It as ie,Lt as ae,Po as oe,Q as se,Sa as ce,Xo as le,co as ue,es as de,fo as fe,it as E,na as pe,oo as me,so as he,st as ge,ta as _e,us as ve,w as ye,xa as be}from"./src-azBs1EPY.mjs";import{$ as xe,$r as Se,$t as Ce,Bt as we,Ei as Te,F as Ee,Ft as De,I as Oe,J as ke,Jr as Ae,L as je,Mt as Me,Nt as Ne,P as Pe,Pt as Fe,Q as Ie,Qr as Le,Sa as Re,Ti as ze,Vr as D,Wr as Be,X as Ve,Z as He,_ as Ue,_i as We,a as Ge,at as Ke,ba as qe,ci as Je,ct as Ye,di as Xe,dt as Ze,en as Qe,f as $e,ft as et,gi as tt,gr as nt,hn as rt,ht as it,jr as at,li as O,lt as ot,n as st,nn as ct,ot as lt,p as ut,pt as dt,qn as ft,qr as pt,qt as mt,r as ht,rt as gt,si as _t,st as vt,t as yt,ut as bt,vi as xt,vn as St,vr as Ct,w as wt,xa as Tt,xr as Et,ya as Dt,yn as Ot,yr as kt,zt as At}from"./src-DoSxfvJP.mjs";import{F as jt,O as Mt,P as Nt,k as Pt}from"./fs-traced-Cq61rC8q.mjs";import{a as Ft}from"./git-handle-DyGrpFVy.mjs";import{g as It,i as Lt,x as Rt}from"./server-lock-DsDrc4RU.mjs";import{a as zt,n as Bt,s as Vt,x as k,y as Ht}from"./write-project-skill-B77kdJNQ.mjs";import{C as Ut,D as Wt,E as Gt,S as Kt,T as qt,a as Jt,b as Yt,d as Xt,i as Zt,m as Qt,o as $t,p as en,s as tn,v as nn,x as rn,y as an}from"./src-B9TR_wSW.mjs";import{c as on,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 sn,n as cn,o as ln,r as un}from"./acp-harness-probe-D3WKP8RS.mjs";import{n as dn,r as fn,t as pn}from"./dist-bundle-CFfKBclM.mjs";import{A as mn,B as hn,C as gn,F as _n,H as vn,L as yn,M as bn,N as xn,O as Sn,P as Cn,R as wn,T as Tn,U as En,V as Dn,j as On,u as kn,w as An,z as jn}from"./init-CIx--I41.mjs";import{n as Mn,t as Nn}from"./constants-PCQO1EGt.mjs";import{C as Pn,D as Fn,E as In,T as Ln,h as Rn,v as zn,w as Bn}from"./start-BzOb2Q7k.mjs";import{n as Vn,t as Hn}from"./loader-BLqQZ5Tv.mjs";import{i as Un}from"./skill-teardown-Cj1-Y6iS.mjs";import{t as Wn}from"./launch-json-removal-BLAj9y37.mjs";import{n as Gn}from"./repair-skills-QLgUXS7O.mjs";import{execFile as Kn,execFileSync as qn,execSync as Jn,spawn as Yn,spawnSync as Xn}from"node:child_process";import{basename as Zn,dirname as I,isAbsolute as Qn,join as L,relative as R,resolve as z,sep as $n}from"node:path";import er from"node:process";import{fileURLToPath as tr}from"node:url";import{accessSync as nr,appendFileSync as rr,closeSync as ir,constants as ar,existsSync as B,lstatSync as or,mkdirSync as sr,mkdtempSync as cr,openSync as lr,readFileSync as V,readdirSync as ur,realpathSync as dr,renameSync as fr,rmSync as pr,statSync as H,unlinkSync as U,writeFileSync as mr}from"node:fs";import{homedir as hr,platform as gr,tmpdir as _r}from"node:os";import{rm as vr}from"node:fs/promises";import{randomUUID as yr}from"node:crypto";import{setTimeout as br}from"node:timers/promises";import{promisify as xr}from"node:util";import{createServer as Sr,request as Cr}from"node:http";import{createInterface as wr}from"node:readline/promises";import{connect as Tr}from"node:net";const Er={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 Dr;(function(e){})(Dr||={});function Or(e){return o(t,e)}async function kr(e){let{projectDir:t,contentDir:n,baseConfig:r,targetPath:i,fix:a=!1}=e,o=[],s=at({projectDir:t,contentDir:n}),c=new Set,l=e=>{c.has(e)||(c.add(e),o.push(e))},u=kt(t,r,l),d=new Map,f=e=>{let t=I(e),r=d.get(t);if(r)return r;let i=Ct(u,Et(n,e,l));return d.set(t,i),i},p=[],m=Ar(i,n);m.kind===`file`?p.push(R(n,m.path)):h(m.path);function h(e){let t;try{t=ur(e,{withFileTypes:!0})}catch(t){o.push(`could not read directory ${R(n,e)||`.`}: ${Mr(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(!jr(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}: ${Mr(t)}`);continue}let i=f(e),s=!1;if(a&&i.enabled){let n=_e(r,i);if(n!==r){let i=`${t}.tmp.${process.pid}.${Date.now()}`;try{mr(i,n,`utf-8`),fr(i,t),r=n,s=!0,y++}catch(t){try{U(i)}catch{}o.push(`could not write fix to ${e}: ${Mr(t)}`)}}}let c=await pe(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 Ar(e,t){if(e===void 0||e===``)return{kind:`dir`,path:t};let n=Qn(e)?e:z(t,e);try{if(H(n).isFile())return{kind:`file`,path:n}}catch{}return{kind:`dir`,path:n}}function jr(e){let t=e.toLowerCase();return de.some(e=>t.endsWith(e))}function Mr(e){return e instanceof Error?e.message:String(e)}function Nr(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=Je(r,i),o=t===void 0?void 0:Pr(t,qt()),s=r.contentRules,c=await kr({projectDir:i,contentDir:a,baseConfig:s?ce(s):w,targetPath:o,fix:n.fix===!0});n.json===!0?process.stdout.write(`${JSON.stringify(c,null,2)}\n`):process.stdout.write(`${Lr(c)}\n`),(n.errorsOnly===!0?c.errorCount>0:Fr(c))&&(process.exitCode=1)})}function Pr(e,t){return z(t,e)}function Fr(e){return e.errorCount>0||e.warningCount>0}function Ir(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 Lr(e){let t=[];for(let n of e.files)n.diagnostics.length>0&&t.push(...Ir(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
- `)}const Rr={out:e=>process.stdout.write(`${e}\n`),err:e=>process.stderr.write(`${e}\n`)};function zr(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 Br(t,n,e(),process.cwd(),qt());r!==0&&(process.exitCode=r)})}async function Br(e,t,n,r,i,a=Rr){let o=Je(n,r),s;if(e!==void 0){let t=Vr(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=Lt(O(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:T({kind:`cli`,runtimeVersion:It})})}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=be.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(Lr(Hr(f))),+(t.errorsOnly===!0?f.errorCount>0:f.errorCount+f.warningCount>0)}function Vr(e,t,n){let r=R(n,z(t,e));return r===``?``:r.startsWith(`..`)||Qn(r)?null:r.split($n).join(`/`)}function Hr(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 Ur(e,t,n,r){let i=Wr(await Gr(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 Wr(e){let t={};for(let n of e.split(`
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 Gr(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 Kr(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 Ur(process.stdin,process.stdout,r,{log:n,getDiag:()=>t});await ut(n),process.exit(i)}catch(e){n?.error({err:e},`[auth] git-credential get: unexpected error`),await ut(n),process.exit(1)}}),n}function qr(e){let t=e.endpoint.DEFAULTS;return/^https:\/\/(api\.)?github\.com$/.test(t.baseUrl)?`https://github.com`:t.baseUrl.replace(`/api/v3`,``)}async function Jr(e,t,n){let r={baseUrl:qr(e),headers:{accept:`application/json`},...n},i=await e(t,r);if(`error`in i.data){let n=new dn(`${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 Yr(e){let t=e.request||pn,n={client_id:e.clientId};return`scopes`in e&&Array.isArray(e.scopes)&&(n.scope=e.scopes.join(` `)),Jr(t,`POST /login/device/code`,n)}async function Xr(e){let t=await Jr(e.request||pn,`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=Zr(e,t.data.expires_in),n.refreshTokenExpiresAt=Zr(e,t.data.refresh_token_expires_in)}delete n.scopes}return{...t,authentication:n}}function Zr(e,t){return new Date(e+t*1e3).toISOString()}async function Qr(e,t){let n=$r(e,t.auth);if(n)return n;let{data:r}=await Yr({clientType:e.clientType,clientId:e.clientId,request:t.request||e.request,scopes:t.auth.scopes||e.scopes});await e.onVerification(r);let i=await ti(t.request||e.request,e.clientId,e.clientType,r);return e.authentication=i,i}function $r(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 ei(e){await new Promise(t=>setTimeout(t,e*1e3))}async function ti(e,t,n,r){try{let i={clientId:t,request:e,code:r.device_code},{authentication:a}=n===`oauth-app`?await Xr({...i,clientType:`oauth-app`}):await Xr({...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 ei(r.interval),ti(e,t,n,r);if(a===`slow_down`)return await ei(r.interval+7),ti(e,t,n,r);throw i}}async function ni(e,t){return Qr(e,{auth:t})}async function ri(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 Qr(e,{request:t,auth:{type:`oauth`}});return i.headers.authorization=`token ${a}`,t(i)}var ii=`0.0.0-development`;function ai(e){let t=e.request||pn.defaults({headers:{"user-agent":`octokit-auth-oauth-device.js/${ii} ${fn()}`}}),{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(ni.bind(null,i),{hook:ri.bind(null,i)})}async function oi(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=ai({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 si(){return process.env.OPEN_KNOWLEDGE_GITHUB_CLIENT_ID??`Ov23liqlSd0V1MwR6rhI`}function W(e){let t=e.toLowerCase().replace(/:\d+$/,``);ee.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 ci(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function li(e,t,n=oi){let r=si(),{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?ci(!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?ci(!0,{type:`complete`,host:i,login:s}):process.stderr.write(`✓ Logged in as ${s} on ${i}\n`)}function ui(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??nt(process.cwd()),r=await e();await li({...t,host:n},r)})}const di={style:{maskedText:`[input is masked]`}};var fi=yn((e,t)=>{let{validate:n=()=>!0}=e,r=Dn(di,e.theme),[i,a]=vn(`idle`),[o,s]=vn(),[c,l]=vn(``),u=hn({status:i,theme:r});jn(async(e,r)=>{if(i===`idle`)if(En(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)}${wn}`),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 pi(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)=>pi.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 mi(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 hi(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 gi=Function.bind,_i=gi.bind(gi);function vi(e,t,n){let r=_i(hi,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]=_i(mi,null).apply(null,i)})}function yi(){let e=Symbol(`Singular`),t={registry:{}},n=pi.bind(null,t,e);return vi(n,t,e),n}function bi(){let e={registry:{}},t=pi.bind(null,e);return vi(t,e),t}var xi={Singular:yi,Collection:bi},Si=`0.0.0-development`;function Ci(e){return`Request failed due to following response errors:
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{Ao as C,Bo as ee,C as w,Ca as te,Co as ne,Ha as re,Io as ie,It as ae,Lt as oe,Po as se,Q as ce,Sa as le,Xo as ue,co as de,es as fe,fo as pe,it as T,ks as E,na as me,oo as he,so as ge,st as _e,ta as ve,us as ye,xa as be}from"./src-9BFQh559.mjs";import{$ as xe,$t as Se,Bt as Ce,Cn as we,Cr as Te,Ei as Ee,En as De,Er as Oe,F as ke,Ft as Ae,I as je,J as Me,Jr as D,L as Ne,Mt as Pe,Nt as Fe,Or as Ie,P as Le,Pt as Re,Q as ze,Rr as Be,Sa as Ve,Ti as He,Tn as Ue,Tr as We,X as Ge,Z as Ke,Zr as qe,_ as Je,a as Ye,ai as Xe,at as Ze,ba as Qe,ct as $e,dt as et,ei as tt,en as nt,er as rt,f as it,ft as at,gi as O,hi as ot,hn as st,ht as ct,lt,mi as ut,n 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,st as bt,t as xt,ti as St,ut as Ct,vi as wt,vn as Tt,w as Et,wn as Dt,xa as Ot,ya as kt,zt as At}from"./src-9I3GiOoK.mjs";import{F as jt,O as Mt,P as Nt,k as Pt}from"./fs-traced-By5aY-RE.mjs";import{a as Ft}from"./git-handle-BHe1p04S.mjs";import{g as It,i as Lt,x as Rt}from"./server-lock-BleUv9m0.mjs";import{a as zt,n as Bt,s as Vt,x as k,y as Ht}from"./write-project-skill-WXZSbQlg.mjs";import{C as Ut,D as Wt,E as Gt,S as Kt,T as qt,a as Jt,b as Yt,d as Xt,i as Zt,m as Qt,o as $t,p as en,s as tn,v as nn,x as rn,y as an}from"./src-Dl8P6sfz.mjs";import{c as on,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 sn,n as cn,o as ln,r as un}from"./acp-harness-probe-DOXp9Wx4.mjs";import{n as dn,r as fn,t as pn}from"./dist-bundle-CFfKBclM.mjs";import{A as mn,B as hn,C as gn,F as _n,H as vn,L as yn,M as bn,N as xn,O as Sn,P as Cn,R as wn,T as Tn,U as En,V as Dn,j as On,u as kn,w as An,z as jn}from"./init-ZOWQ1Th4.mjs";import{n as Mn,t as Nn}from"./constants-J4-mibQ1.mjs";import{C as Pn,D as Fn,E as In,T as Ln,h as Rn,v as zn,w as Bn}from"./start-C4KuZHu5.mjs";import{n as Vn,t as Hn}from"./loader-ji3pPcXi.mjs";import{i as Un}from"./skill-teardown-CZnemDLF.mjs";import{t as Wn}from"./launch-json-removal-CcFuFFS1.mjs";import{n as Gn}from"./repair-skills-CkZZbtNk.mjs";import{execFile as Kn,execFileSync as qn,execSync as Jn,spawn as Yn,spawnSync as Xn}from"node:child_process";import{basename as Zn,dirname as I,isAbsolute as Qn,join as L,relative as R,resolve as z,sep as $n}from"node:path";import er from"node:process";import{fileURLToPath as tr}from"node:url";import{accessSync as nr,appendFileSync as rr,closeSync as ir,constants as ar,existsSync as B,lstatSync as or,mkdirSync as sr,mkdtempSync as cr,openSync as lr,readFileSync as V,readdirSync as ur,realpathSync as dr,renameSync as fr,rmSync as pr,statSync as H,unlinkSync as U,writeFileSync as mr}from"node:fs";import{homedir as hr,platform as gr,tmpdir as _r}from"node:os";import{rm as vr}from"node:fs/promises";import{randomUUID as yr}from"node:crypto";import{setTimeout as br}from"node:timers/promises";import{promisify as xr}from"node:util";import{createServer as Sr,request as Cr}from"node:http";import{createInterface as wr}from"node:readline/promises";import{connect as Tr}from"node:net";const Er={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 Dr;(function(e){})(Dr||={});function Or(e){return o(t,e)}async function kr(e){let{projectDir:t,contentDir:n,baseConfig:r,targetPath:i,fix:a=!1}=e,o=[],s=Be({projectDir:t,contentDir:n}),c=new Set,l=e=>{c.has(e)||(c.add(e),o.push(e))},u=Oe(t,r,l),d=new Map,f=e=>{let t=I(e),r=d.get(t);if(r)return r;let i=We(u,Ie(n,e,l));return d.set(t,i),i},p=[],m=Ar(i,n);m.kind===`file`?p.push(R(n,m.path)):h(m.path);function h(e){let t;try{t=ur(e,{withFileTypes:!0})}catch(t){o.push(`could not read directory ${R(n,e)||`.`}: ${Mr(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(!jr(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}: ${Mr(t)}`);continue}let i=f(e),s=!1;if(a&&i.enabled){let n=ve(r,i);if(n!==r){let i=`${t}.tmp.${process.pid}.${Date.now()}`;try{mr(i,n,`utf-8`),fr(i,t),r=n,s=!0,y++}catch(t){try{U(i)}catch{}o.push(`could not write fix to ${e}: ${Mr(t)}`)}}}let c=await me(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 Ar(e,t){if(e===void 0||e===``)return{kind:`dir`,path:t};let n=Qn(e)?e:z(t,e);try{if(H(n).isFile())return{kind:`file`,path:n}}catch{}return{kind:`dir`,path:n}}function jr(e){let t=e.toLowerCase();return fe.some(e=>t.endsWith(e))}function Mr(e){return e instanceof Error?e.message:String(e)}function Nr(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=ot(r,i),o=t===void 0?void 0:Pr(t,qt()),s=r.contentRules,c=await kr({projectDir:i,contentDir:a,baseConfig:s?le(s):te,targetPath:o,fix:n.fix===!0});n.json===!0?process.stdout.write(`${JSON.stringify(c,null,2)}\n`):process.stdout.write(`${Lr(c)}\n`),(n.errorsOnly===!0?c.errorCount>0:Fr(c))&&(process.exitCode=1)})}function Pr(e,t){return z(t,e)}function Fr(e){return e.errorCount>0||e.warningCount>0}function Ir(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 Lr(e){let t=[];for(let n of e.files)n.diagnostics.length>0&&t.push(...Ir(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
+ `)}const Rr={out:e=>process.stdout.write(`${e}\n`),err:e=>process.stderr.write(`${e}\n`)};function zr(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 Br(t,n,e(),process.cwd(),qt());r!==0&&(process.exitCode=r)})}async function Br(e,t,n,r,i,a=Rr){let o=ot(n,r),s;if(e!==void 0){let t=Vr(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=Lt(O(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:E({kind:`cli`,runtimeVersion:It})})}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=be.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(Lr(Hr(f))),+(t.errorsOnly===!0?f.errorCount>0:f.errorCount+f.warningCount>0)}function Vr(e,t,n){let r=R(n,z(t,e));return r===``?``:r.startsWith(`..`)||Qn(r)?null:r.split($n).join(`/`)}function Hr(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 Ur(e,t,n,r){let i=Wr(await Gr(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 Wr(e){let t={};for(let n of e.split(`
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 Gr(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 Kr(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 Ur(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 qr(e){let t=e.endpoint.DEFAULTS;return/^https:\/\/(api\.)?github\.com$/.test(t.baseUrl)?`https://github.com`:t.baseUrl.replace(`/api/v3`,``)}async function Jr(e,t,n){let r={baseUrl:qr(e),headers:{accept:`application/json`},...n},i=await e(t,r);if(`error`in i.data){let n=new dn(`${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 Yr(e){let t=e.request||pn,n={client_id:e.clientId};return`scopes`in e&&Array.isArray(e.scopes)&&(n.scope=e.scopes.join(` `)),Jr(t,`POST /login/device/code`,n)}async function Xr(e){let t=await Jr(e.request||pn,`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=Zr(e,t.data.expires_in),n.refreshTokenExpiresAt=Zr(e,t.data.refresh_token_expires_in)}delete n.scopes}return{...t,authentication:n}}function Zr(e,t){return new Date(e+t*1e3).toISOString()}async function Qr(e,t){let n=$r(e,t.auth);if(n)return n;let{data:r}=await Yr({clientType:e.clientType,clientId:e.clientId,request:t.request||e.request,scopes:t.auth.scopes||e.scopes});await e.onVerification(r);let i=await ti(t.request||e.request,e.clientId,e.clientType,r);return e.authentication=i,i}function $r(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 ei(e){await new Promise(t=>setTimeout(t,e*1e3))}async function ti(e,t,n,r){try{let i={clientId:t,request:e,code:r.device_code},{authentication:a}=n===`oauth-app`?await Xr({...i,clientType:`oauth-app`}):await Xr({...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 ei(r.interval),ti(e,t,n,r);if(a===`slow_down`)return await ei(r.interval+7),ti(e,t,n,r);throw i}}async function ni(e,t){return Qr(e,{auth:t})}async function ri(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 Qr(e,{request:t,auth:{type:`oauth`}});return i.headers.authorization=`token ${a}`,t(i)}var ii=`0.0.0-development`;function ai(e){let t=e.request||pn.defaults({headers:{"user-agent":`octokit-auth-oauth-device.js/${ii} ${fn()}`}}),{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(ni.bind(null,i),{hook:ri.bind(null,i)})}async function oi(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=ai({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 si(){return process.env.OPEN_KNOWLEDGE_GITHUB_CLIENT_ID??`Ov23liqlSd0V1MwR6rhI`}function W(e){let t=e.toLowerCase().replace(/:\d+$/,``);ee.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 ci(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function li(e,t,n=oi){let r=si(),{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?ci(!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?ci(!0,{type:`complete`,host:i,login:s}):process.stderr.write(`✓ Logged in as ${s} on ${i}\n`)}function ui(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??Te(process.cwd()),r=await e();await li({...t,host:n},r)})}const di={style:{maskedText:`[input is masked]`}};var fi=yn((e,t)=>{let{validate:n=()=>!0}=e,r=Dn(di,e.theme),[i,a]=vn(`idle`),[o,s]=vn(),[c,l]=vn(``),u=hn({status:i,theme:r});jn(async(e,r)=>{if(i===`idle`)if(En(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)}${wn}`),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 pi(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)=>pi.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 mi(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 hi(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 gi=Function.bind,_i=gi.bind(gi);function vi(e,t,n){let r=_i(hi,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]=_i(mi,null).apply(null,i)})}function yi(){let e=Symbol(`Singular`),t={registry:{}},n=pi.bind(null,t,e);return vi(n,t,e),n}function bi(){let e={registry:{}},t=pi.bind(null,e);return vi(t,e),t}var xi={Singular:yi,Collection:bi},Si=`0.0.0-development`;function Ci(e){return`Request failed due to following response errors:
5
5
  `+e.errors.map(e=>` - ${e.message}`).join(`
6
6
  `)}var wi=class extends Error{constructor(e,t,n){super(Ci(n)),this.request=e,this.headers=t,this.response=n,this.errors=n.errors,this.data=n.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name=`GraphqlResponseError`;errors;data},Ti=[`method`,`baseUrl`,`url`,`headers`,`request`,`query`,`mediaType`,`operationName`],Ei=[`query`,`method`,`url`],Di=/\/api\/v3\/?$/;function Oi(e,t,n){if(n){if(typeof t==`string`&&`query`in n)return Promise.reject(Error(`[@octokit/graphql] "query" cannot be used as variable name`));for(let e in n)if(Ei.includes(e))return Promise.reject(Error(`[@octokit/graphql] "${e}" cannot be used as variable name`))}let r=typeof t==`string`?Object.assign({query:t},n):t,i=Object.keys(r).reduce((e,t)=>Ti.includes(t)?(e[t]=r[t],e):(e.variables||={},e.variables[t]=r[t],e),{}),a=r.baseUrl||e.endpoint.DEFAULTS.baseUrl;return Di.test(a)&&(i.url=a.replace(Di,`/api/graphql`)),e(i).then(e=>{if(e.data.errors){let t={};for(let n of Object.keys(e.headers))t[n]=e.headers[n];throw new wi(i,t,e.data)}return e.data.data})}function ki(e,t){let n=e.defaults(t);return Object.assign((e,t)=>Oi(n,e,t),{defaults:ki.bind(null,n),endpoint:n.endpoint})}ki(pn,{headers:{"user-agent":`octokit-graphql.js/${Si} ${fn()}`},method:`POST`,url:`/graphql`});function Ai(e){return ki(e,{method:`POST`,url:`/graphql`})}var ji=`(?:[a-zA-Z0-9_-]+)`,Mi=`\\.`,Ni=RegExp(`^${ji}${Mi}${ji}${Mi}${ji}$`),Pi=Ni.test.bind(Ni);async function Fi(e){let t=Pi(e),n=e.startsWith(`v1.`)||e.startsWith(`ghs_`),r=e.startsWith(`ghu_`);return{type:`token`,token:e,tokenType:t?`app`:n?`installation`:r?`user-to-server`:`oauth`}}function Ii(e){return e.split(/\./).length===3?`bearer ${e}`:`token ${e}`}async function Li(e,t,n,r){let i=t.endpoint.merge(n,r);return i.headers.authorization=Ii(e),t(i)}var Ri=function(e){if(!e)throw Error(`[@octokit/auth-token] No token passed to createTokenAuth`);if(typeof e!=`string`)throw Error(`[@octokit/auth-token] Token passed to createTokenAuth is not a string`);return e=e.replace(/^(token|bearer) +/i,``),Object.assign(Fi.bind(null,e),{hook:Li.bind(null,e)})};const zi=`7.0.6`,Bi=()=>{},Vi=console.warn.bind(console),Hi=console.error.bind(console);function Ui(e={}){return typeof e.debug!=`function`&&(e.debug=Bi),typeof e.info!=`function`&&(e.info=Bi),typeof e.warn!=`function`&&(e.warn=Vi),typeof e.error!=`function`&&(e.error=Hi),e}const Wi=`octokit-core.js/${zi} ${fn()}`;var Gi=class{static VERSION=zi;static defaults(e){return class extends this{constructor(...t){let n=t[0]||{};if(typeof e==`function`){super(e(n));return}super(Object.assign({},e,n,n.userAgent&&e.userAgent?{userAgent:`${n.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let t=this.plugins;return class extends this{static plugins=t.concat(e.filter(e=>!t.includes(e)))}}constructor(e={}){let t=new xi.Collection,n={baseUrl:pn.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:t.bind(null,`request`)}),mediaType:{previews:[],format:``}};if(n.headers[`user-agent`]=e.userAgent?`${e.userAgent} ${Wi}`:Wi,e.baseUrl&&(n.baseUrl=e.baseUrl),e.previews&&(n.mediaType.previews=e.previews),e.timeZone&&(n.headers[`time-zone`]=e.timeZone),this.request=pn.defaults(n),this.graphql=Ai(this.request).defaults(n),this.log=Ui(e.log),this.hook=t,e.authStrategy){let{authStrategy:n,...r}=e,i=n(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:r},e.auth));t.wrap(`request`,i.hook),this.auth=i}else if(!e.auth)this.auth=async()=>({type:`unauthenticated`});else{let n=Ri(e.auth);t.wrap(`request`,n.hook),this.auth=n}let r=this.constructor;for(let t=0;t<r.plugins.length;++t)Object.assign(this,r.plugins[t](this,e))}request;graphql;log;hook;auth};function Ki(e){e.hook.wrap(`request`,(t,n)=>{e.log.debug(`request`,n);let r=Date.now(),i=e.request.endpoint.parse(n),a=i.url.replace(n.baseUrl,``);return t(n).then(t=>{let n=t.headers[`x-github-request-id`];return e.log.info(`${i.method} ${a} - ${t.status} with id ${n} in ${Date.now()-r}ms`),t}).catch(t=>{let n=t.response?.headers[`x-github-request-id`]||`UNKNOWN`;throw e.log.error(`${i.method} ${a} - ${t.status} with id ${n} in ${Date.now()-r}ms`),t})})}Ki.VERSION=`6.0.0`;var qi=`0.0.0-development`;function Ji(e){if(!e.data)return{...e,data:[]};if(!((`total_count`in e.data||`total_commits`in e.data)&&!(`url`in e.data)))return e;let t=e.data.incomplete_results,n=e.data.repository_selection,r=e.data.total_count,i=e.data.total_commits;delete e.data.incomplete_results,delete e.data.repository_selection,delete e.data.total_count,delete e.data.total_commits;let a=Object.keys(e.data)[0];return e.data=e.data[a],t!==void 0&&(e.data.incomplete_results=t),n!==void 0&&(e.data.repository_selection=n),e.data.total_count=r,e.data.total_commits=i,e}function Yi(e,t,n){let r=typeof t==`function`?t.endpoint(n):e.request.endpoint(t,n),i=typeof t==`function`?t:e.request,a=r.method,o=r.headers,s=r.url;return{[Symbol.asyncIterator]:()=>({async next(){if(!s)return{done:!0};try{let e=Ji(await i({method:a,url:s,headers:o}));if(s=((e.headers.link||``).match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!s&&`total_commits`in e.data){let t=new URL(e.url),n=t.searchParams,r=parseInt(n.get(`page`)||`1`,10);r*parseInt(n.get(`per_page`)||`250`,10)<e.data.total_commits&&(n.set(`page`,String(r+1)),s=t.toString())}return{value:e}}catch(e){if(e.status!==409)throw e;return s=``,{value:{status:200,headers:{},data:[]}}}}})}}function Xi(e,t,n,r){return typeof n==`function`&&(r=n,n=void 0),Zi(e,[],Yi(e,t,n)[Symbol.asyncIterator](),r)}function Zi(e,t,n,r){return n.next().then(i=>{if(i.done)return t;let a=!1;function o(){a=!0}return t=t.concat(r?r(i.value,o):i.value.data),a?t:Zi(e,t,n,r)})}Object.assign(Xi,{iterator:Yi});function Qi(e){return{paginate:Object.assign(Xi.bind(null,e),{iterator:Yi.bind(null,e)})}}Qi.VERSION=qi;const $i=`17.0.0`;var ea={actions:{addCustomLabelsToSelfHostedRunnerForOrg:[`POST /orgs/{org}/actions/runners/{runner_id}/labels`],addCustomLabelsToSelfHostedRunnerForRepo:[`POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels`],addRepoAccessToSelfHostedRunnerGroupInOrg:[`PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}`],addSelectedRepoToOrgSecret:[`PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}`],addSelectedRepoToOrgVariable:[`PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}`],approveWorkflowRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve`],cancelWorkflowRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel`],createEnvironmentVariable:[`POST /repos/{owner}/{repo}/environments/{environment_name}/variables`],createHostedRunnerForOrg:[`POST /orgs/{org}/actions/hosted-runners`],createOrUpdateEnvironmentSecret:[`PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}`],createOrUpdateOrgSecret:[`PUT /orgs/{org}/actions/secrets/{secret_name}`],createOrUpdateRepoSecret:[`PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}`],createOrgVariable:[`POST /orgs/{org}/actions/variables`],createRegistrationTokenForOrg:[`POST /orgs/{org}/actions/runners/registration-token`],createRegistrationTokenForRepo:[`POST /repos/{owner}/{repo}/actions/runners/registration-token`],createRemoveTokenForOrg:[`POST /orgs/{org}/actions/runners/remove-token`],createRemoveTokenForRepo:[`POST /repos/{owner}/{repo}/actions/runners/remove-token`],createRepoVariable:[`POST /repos/{owner}/{repo}/actions/variables`],createWorkflowDispatch:[`POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches`],deleteActionsCacheById:[`DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}`],deleteActionsCacheByKey:[`DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}`],deleteArtifact:[`DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}`],deleteCustomImageFromOrg:[`DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}`],deleteCustomImageVersionFromOrg:[`DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}`],deleteEnvironmentSecret:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}`],deleteEnvironmentVariable:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}`],deleteHostedRunnerForOrg:[`DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}`],deleteOrgSecret:[`DELETE /orgs/{org}/actions/secrets/{secret_name}`],deleteOrgVariable:[`DELETE /orgs/{org}/actions/variables/{name}`],deleteRepoSecret:[`DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}`],deleteRepoVariable:[`DELETE /repos/{owner}/{repo}/actions/variables/{name}`],deleteSelfHostedRunnerFromOrg:[`DELETE /orgs/{org}/actions/runners/{runner_id}`],deleteSelfHostedRunnerFromRepo:[`DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}`],deleteWorkflowRun:[`DELETE /repos/{owner}/{repo}/actions/runs/{run_id}`],deleteWorkflowRunLogs:[`DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs`],disableSelectedRepositoryGithubActionsOrganization:[`DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}`],disableWorkflow:[`PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable`],downloadArtifact:[`GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}`],downloadJobLogsForWorkflowRun:[`GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs`],downloadWorkflowRunAttemptLogs:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs`],downloadWorkflowRunLogs:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs`],enableSelectedRepositoryGithubActionsOrganization:[`PUT /orgs/{org}/actions/permissions/repositories/{repository_id}`],enableWorkflow:[`PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable`],forceCancelWorkflowRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel`],generateRunnerJitconfigForOrg:[`POST /orgs/{org}/actions/runners/generate-jitconfig`],generateRunnerJitconfigForRepo:[`POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig`],getActionsCacheList:[`GET /repos/{owner}/{repo}/actions/caches`],getActionsCacheUsage:[`GET /repos/{owner}/{repo}/actions/cache/usage`],getActionsCacheUsageByRepoForOrg:[`GET /orgs/{org}/actions/cache/usage-by-repository`],getActionsCacheUsageForOrg:[`GET /orgs/{org}/actions/cache/usage`],getAllowedActionsOrganization:[`GET /orgs/{org}/actions/permissions/selected-actions`],getAllowedActionsRepository:[`GET /repos/{owner}/{repo}/actions/permissions/selected-actions`],getArtifact:[`GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}`],getCustomImageForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}`],getCustomImageVersionForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}`],getCustomOidcSubClaimForRepo:[`GET /repos/{owner}/{repo}/actions/oidc/customization/sub`],getEnvironmentPublicKey:[`GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key`],getEnvironmentSecret:[`GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}`],getEnvironmentVariable:[`GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}`],getGithubActionsDefaultWorkflowPermissionsOrganization:[`GET /orgs/{org}/actions/permissions/workflow`],getGithubActionsDefaultWorkflowPermissionsRepository:[`GET /repos/{owner}/{repo}/actions/permissions/workflow`],getGithubActionsPermissionsOrganization:[`GET /orgs/{org}/actions/permissions`],getGithubActionsPermissionsRepository:[`GET /repos/{owner}/{repo}/actions/permissions`],getHostedRunnerForOrg:[`GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}`],getHostedRunnersGithubOwnedImagesForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/github-owned`],getHostedRunnersLimitsForOrg:[`GET /orgs/{org}/actions/hosted-runners/limits`],getHostedRunnersMachineSpecsForOrg:[`GET /orgs/{org}/actions/hosted-runners/machine-sizes`],getHostedRunnersPartnerImagesForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/partner`],getHostedRunnersPlatformsForOrg:[`GET /orgs/{org}/actions/hosted-runners/platforms`],getJobForWorkflowRun:[`GET /repos/{owner}/{repo}/actions/jobs/{job_id}`],getOrgPublicKey:[`GET /orgs/{org}/actions/secrets/public-key`],getOrgSecret:[`GET /orgs/{org}/actions/secrets/{secret_name}`],getOrgVariable:[`GET /orgs/{org}/actions/variables/{name}`],getPendingDeploymentsForRun:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments`],getRepoPermissions:[`GET /repos/{owner}/{repo}/actions/permissions`,{},{renamed:[`actions`,`getGithubActionsPermissionsRepository`]}],getRepoPublicKey:[`GET /repos/{owner}/{repo}/actions/secrets/public-key`],getRepoSecret:[`GET /repos/{owner}/{repo}/actions/secrets/{secret_name}`],getRepoVariable:[`GET /repos/{owner}/{repo}/actions/variables/{name}`],getReviewsForRun:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals`],getSelfHostedRunnerForOrg:[`GET /orgs/{org}/actions/runners/{runner_id}`],getSelfHostedRunnerForRepo:[`GET /repos/{owner}/{repo}/actions/runners/{runner_id}`],getWorkflow:[`GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}`],getWorkflowAccessToRepository:[`GET /repos/{owner}/{repo}/actions/permissions/access`],getWorkflowRun:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}`],getWorkflowRunAttempt:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}`],getWorkflowRunUsage:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing`],getWorkflowUsage:[`GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing`],listArtifactsForRepo:[`GET /repos/{owner}/{repo}/actions/artifacts`],listCustomImageVersionsForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions`],listCustomImagesForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/custom`],listEnvironmentSecrets:[`GET /repos/{owner}/{repo}/environments/{environment_name}/secrets`],listEnvironmentVariables:[`GET /repos/{owner}/{repo}/environments/{environment_name}/variables`],listGithubHostedRunnersInGroupForOrg:[`GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners`],listHostedRunnersForOrg:[`GET /orgs/{org}/actions/hosted-runners`],listJobsForWorkflowRun:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs`],listJobsForWorkflowRunAttempt:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs`],listLabelsForSelfHostedRunnerForOrg:[`GET /orgs/{org}/actions/runners/{runner_id}/labels`],listLabelsForSelfHostedRunnerForRepo:[`GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels`],listOrgSecrets:[`GET /orgs/{org}/actions/secrets`],listOrgVariables:[`GET /orgs/{org}/actions/variables`],listRepoOrganizationSecrets:[`GET /repos/{owner}/{repo}/actions/organization-secrets`],listRepoOrganizationVariables:[`GET /repos/{owner}/{repo}/actions/organization-variables`],listRepoSecrets:[`GET /repos/{owner}/{repo}/actions/secrets`],listRepoVariables:[`GET /repos/{owner}/{repo}/actions/variables`],listRepoWorkflows:[`GET /repos/{owner}/{repo}/actions/workflows`],listRunnerApplicationsForOrg:[`GET /orgs/{org}/actions/runners/downloads`],listRunnerApplicationsForRepo:[`GET /repos/{owner}/{repo}/actions/runners/downloads`],listSelectedReposForOrgSecret:[`GET /orgs/{org}/actions/secrets/{secret_name}/repositories`],listSelectedReposForOrgVariable:[`GET /orgs/{org}/actions/variables/{name}/repositories`],listSelectedRepositoriesEnabledGithubActionsOrganization:[`GET /orgs/{org}/actions/permissions/repositories`],listSelfHostedRunnersForOrg:[`GET /orgs/{org}/actions/runners`],listSelfHostedRunnersForRepo:[`GET /repos/{owner}/{repo}/actions/runners`],listWorkflowRunArtifacts:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts`],listWorkflowRuns:[`GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs`],listWorkflowRunsForRepo:[`GET /repos/{owner}/{repo}/actions/runs`],reRunJobForWorkflowRun:[`POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun`],reRunWorkflow:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun`],reRunWorkflowFailedJobs:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs`],removeAllCustomLabelsFromSelfHostedRunnerForOrg:[`DELETE /orgs/{org}/actions/runners/{runner_id}/labels`],removeAllCustomLabelsFromSelfHostedRunnerForRepo:[`DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels`],removeCustomLabelFromSelfHostedRunnerForOrg:[`DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}`],removeCustomLabelFromSelfHostedRunnerForRepo:[`DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}`],removeSelectedRepoFromOrgSecret:[`DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}`],removeSelectedRepoFromOrgVariable:[`DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}`],reviewCustomGatesForRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule`],reviewPendingDeploymentsForRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments`],setAllowedActionsOrganization:[`PUT /orgs/{org}/actions/permissions/selected-actions`],setAllowedActionsRepository:[`PUT /repos/{owner}/{repo}/actions/permissions/selected-actions`],setCustomLabelsForSelfHostedRunnerForOrg:[`PUT /orgs/{org}/actions/runners/{runner_id}/labels`],setCustomLabelsForSelfHostedRunnerForRepo:[`PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels`],setCustomOidcSubClaimForRepo:[`PUT /repos/{owner}/{repo}/actions/oidc/customization/sub`],setGithubActionsDefaultWorkflowPermissionsOrganization:[`PUT /orgs/{org}/actions/permissions/workflow`],setGithubActionsDefaultWorkflowPermissionsRepository:[`PUT /repos/{owner}/{repo}/actions/permissions/workflow`],setGithubActionsPermissionsOrganization:[`PUT /orgs/{org}/actions/permissions`],setGithubActionsPermissionsRepository:[`PUT /repos/{owner}/{repo}/actions/permissions`],setSelectedReposForOrgSecret:[`PUT /orgs/{org}/actions/secrets/{secret_name}/repositories`],setSelectedReposForOrgVariable:[`PUT /orgs/{org}/actions/variables/{name}/repositories`],setSelectedRepositoriesEnabledGithubActionsOrganization:[`PUT /orgs/{org}/actions/permissions/repositories`],setWorkflowAccessToRepository:[`PUT /repos/{owner}/{repo}/actions/permissions/access`],updateEnvironmentVariable:[`PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}`],updateHostedRunnerForOrg:[`PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}`],updateOrgVariable:[`PATCH /orgs/{org}/actions/variables/{name}`],updateRepoVariable:[`PATCH /repos/{owner}/{repo}/actions/variables/{name}`]},activity:{checkRepoIsStarredByAuthenticatedUser:[`GET /user/starred/{owner}/{repo}`],deleteRepoSubscription:[`DELETE /repos/{owner}/{repo}/subscription`],deleteThreadSubscription:[`DELETE /notifications/threads/{thread_id}/subscription`],getFeeds:[`GET /feeds`],getRepoSubscription:[`GET /repos/{owner}/{repo}/subscription`],getThread:[`GET /notifications/threads/{thread_id}`],getThreadSubscriptionForAuthenticatedUser:[`GET /notifications/threads/{thread_id}/subscription`],listEventsForAuthenticatedUser:[`GET /users/{username}/events`],listNotificationsForAuthenticatedUser:[`GET /notifications`],listOrgEventsForAuthenticatedUser:[`GET /users/{username}/events/orgs/{org}`],listPublicEvents:[`GET /events`],listPublicEventsForRepoNetwork:[`GET /networks/{owner}/{repo}/events`],listPublicEventsForUser:[`GET /users/{username}/events/public`],listPublicOrgEvents:[`GET /orgs/{org}/events`],listReceivedEventsForUser:[`GET /users/{username}/received_events`],listReceivedPublicEventsForUser:[`GET /users/{username}/received_events/public`],listRepoEvents:[`GET /repos/{owner}/{repo}/events`],listRepoNotificationsForAuthenticatedUser:[`GET /repos/{owner}/{repo}/notifications`],listReposStarredByAuthenticatedUser:[`GET /user/starred`],listReposStarredByUser:[`GET /users/{username}/starred`],listReposWatchedByUser:[`GET /users/{username}/subscriptions`],listStargazersForRepo:[`GET /repos/{owner}/{repo}/stargazers`],listWatchedReposForAuthenticatedUser:[`GET /user/subscriptions`],listWatchersForRepo:[`GET /repos/{owner}/{repo}/subscribers`],markNotificationsAsRead:[`PUT /notifications`],markRepoNotificationsAsRead:[`PUT /repos/{owner}/{repo}/notifications`],markThreadAsDone:[`DELETE /notifications/threads/{thread_id}`],markThreadAsRead:[`PATCH /notifications/threads/{thread_id}`],setRepoSubscription:[`PUT /repos/{owner}/{repo}/subscription`],setThreadSubscription:[`PUT /notifications/threads/{thread_id}/subscription`],starRepoForAuthenticatedUser:[`PUT /user/starred/{owner}/{repo}`],unstarRepoForAuthenticatedUser:[`DELETE /user/starred/{owner}/{repo}`]},apps:{addRepoToInstallation:[`PUT /user/installations/{installation_id}/repositories/{repository_id}`,{},{renamed:[`apps`,`addRepoToInstallationForAuthenticatedUser`]}],addRepoToInstallationForAuthenticatedUser:[`PUT /user/installations/{installation_id}/repositories/{repository_id}`],checkToken:[`POST /applications/{client_id}/token`],createFromManifest:[`POST /app-manifests/{code}/conversions`],createInstallationAccessToken:[`POST /app/installations/{installation_id}/access_tokens`],deleteAuthorization:[`DELETE /applications/{client_id}/grant`],deleteInstallation:[`DELETE /app/installations/{installation_id}`],deleteToken:[`DELETE /applications/{client_id}/token`],getAuthenticated:[`GET /app`],getBySlug:[`GET /apps/{app_slug}`],getInstallation:[`GET /app/installations/{installation_id}`],getOrgInstallation:[`GET /orgs/{org}/installation`],getRepoInstallation:[`GET /repos/{owner}/{repo}/installation`],getSubscriptionPlanForAccount:[`GET /marketplace_listing/accounts/{account_id}`],getSubscriptionPlanForAccountStubbed:[`GET /marketplace_listing/stubbed/accounts/{account_id}`],getUserInstallation:[`GET /users/{username}/installation`],getWebhookConfigForApp:[`GET /app/hook/config`],getWebhookDelivery:[`GET /app/hook/deliveries/{delivery_id}`],listAccountsForPlan:[`GET /marketplace_listing/plans/{plan_id}/accounts`],listAccountsForPlanStubbed:[`GET /marketplace_listing/stubbed/plans/{plan_id}/accounts`],listInstallationReposForAuthenticatedUser:[`GET /user/installations/{installation_id}/repositories`],listInstallationRequestsForAuthenticatedApp:[`GET /app/installation-requests`],listInstallations:[`GET /app/installations`],listInstallationsForAuthenticatedUser:[`GET /user/installations`],listPlans:[`GET /marketplace_listing/plans`],listPlansStubbed:[`GET /marketplace_listing/stubbed/plans`],listReposAccessibleToInstallation:[`GET /installation/repositories`],listSubscriptionsForAuthenticatedUser:[`GET /user/marketplace_purchases`],listSubscriptionsForAuthenticatedUserStubbed:[`GET /user/marketplace_purchases/stubbed`],listWebhookDeliveries:[`GET /app/hook/deliveries`],redeliverWebhookDelivery:[`POST /app/hook/deliveries/{delivery_id}/attempts`],removeRepoFromInstallation:[`DELETE /user/installations/{installation_id}/repositories/{repository_id}`,{},{renamed:[`apps`,`removeRepoFromInstallationForAuthenticatedUser`]}],removeRepoFromInstallationForAuthenticatedUser:[`DELETE /user/installations/{installation_id}/repositories/{repository_id}`],resetToken:[`PATCH /applications/{client_id}/token`],revokeInstallationAccessToken:[`DELETE /installation/token`],scopeToken:[`POST /applications/{client_id}/token/scoped`],suspendInstallation:[`PUT /app/installations/{installation_id}/suspended`],unsuspendInstallation:[`DELETE /app/installations/{installation_id}/suspended`],updateWebhookConfigForApp:[`PATCH /app/hook/config`]},billing:{getGithubActionsBillingOrg:[`GET /orgs/{org}/settings/billing/actions`],getGithubActionsBillingUser:[`GET /users/{username}/settings/billing/actions`],getGithubBillingPremiumRequestUsageReportOrg:[`GET /organizations/{org}/settings/billing/premium_request/usage`],getGithubBillingPremiumRequestUsageReportUser:[`GET /users/{username}/settings/billing/premium_request/usage`],getGithubBillingUsageReportOrg:[`GET /organizations/{org}/settings/billing/usage`],getGithubBillingUsageReportUser:[`GET /users/{username}/settings/billing/usage`],getGithubPackagesBillingOrg:[`GET /orgs/{org}/settings/billing/packages`],getGithubPackagesBillingUser:[`GET /users/{username}/settings/billing/packages`],getSharedStorageBillingOrg:[`GET /orgs/{org}/settings/billing/shared-storage`],getSharedStorageBillingUser:[`GET /users/{username}/settings/billing/shared-storage`]},campaigns:{createCampaign:[`POST /orgs/{org}/campaigns`],deleteCampaign:[`DELETE /orgs/{org}/campaigns/{campaign_number}`],getCampaignSummary:[`GET /orgs/{org}/campaigns/{campaign_number}`],listOrgCampaigns:[`GET /orgs/{org}/campaigns`],updateCampaign:[`PATCH /orgs/{org}/campaigns/{campaign_number}`]},checks:{create:[`POST /repos/{owner}/{repo}/check-runs`],createSuite:[`POST /repos/{owner}/{repo}/check-suites`],get:[`GET /repos/{owner}/{repo}/check-runs/{check_run_id}`],getSuite:[`GET /repos/{owner}/{repo}/check-suites/{check_suite_id}`],listAnnotations:[`GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations`],listForRef:[`GET /repos/{owner}/{repo}/commits/{ref}/check-runs`],listForSuite:[`GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs`],listSuitesForRef:[`GET /repos/{owner}/{repo}/commits/{ref}/check-suites`],rerequestRun:[`POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest`],rerequestSuite:[`POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest`],setSuitesPreferences:[`PATCH /repos/{owner}/{repo}/check-suites/preferences`],update:[`PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}`]},codeScanning:{commitAutofix:[`POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits`],createAutofix:[`POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix`],createVariantAnalysis:[`POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses`],deleteAnalysis:[`DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}`],deleteCodeqlDatabase:[`DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}`],getAlert:[`GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}`,{},{renamedParameters:{alert_id:`alert_number`}}],getAnalysis:[`GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}`],getAutofix:[`GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix`],getCodeqlDatabase:[`GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}`],getDefaultSetup:[`GET /repos/{owner}/{repo}/code-scanning/default-setup`],getSarif:[`GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}`],getVariantAnalysis:[`GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}`],getVariantAnalysisRepoTask:[`GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}`],listAlertInstances:[`GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances`],listAlertsForOrg:[`GET /orgs/{org}/code-scanning/alerts`],listAlertsForRepo:[`GET /repos/{owner}/{repo}/code-scanning/alerts`],listAlertsInstances:[`GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances`,{},{renamed:[`codeScanning`,`listAlertInstances`]}],listCodeqlDatabases:[`GET /repos/{owner}/{repo}/code-scanning/codeql/databases`],listRecentAnalyses:[`GET /repos/{owner}/{repo}/code-scanning/analyses`],updateAlert:[`PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}`],updateDefaultSetup:[`PATCH /repos/{owner}/{repo}/code-scanning/default-setup`],uploadSarif:[`POST /repos/{owner}/{repo}/code-scanning/sarifs`]},codeSecurity:{attachConfiguration:[`POST /orgs/{org}/code-security/configurations/{configuration_id}/attach`],attachEnterpriseConfiguration:[`POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach`],createConfiguration:[`POST /orgs/{org}/code-security/configurations`],createConfigurationForEnterprise:[`POST /enterprises/{enterprise}/code-security/configurations`],deleteConfiguration:[`DELETE /orgs/{org}/code-security/configurations/{configuration_id}`],deleteConfigurationForEnterprise:[`DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}`],detachConfiguration:[`DELETE /orgs/{org}/code-security/configurations/detach`],getConfiguration:[`GET /orgs/{org}/code-security/configurations/{configuration_id}`],getConfigurationForRepository:[`GET /repos/{owner}/{repo}/code-security-configuration`],getConfigurationsForEnterprise:[`GET /enterprises/{enterprise}/code-security/configurations`],getConfigurationsForOrg:[`GET /orgs/{org}/code-security/configurations`],getDefaultConfigurations:[`GET /orgs/{org}/code-security/configurations/defaults`],getDefaultConfigurationsForEnterprise:[`GET /enterprises/{enterprise}/code-security/configurations/defaults`],getRepositoriesForConfiguration:[`GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories`],getRepositoriesForEnterpriseConfiguration:[`GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories`],getSingleConfigurationForEnterprise:[`GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}`],setConfigurationAsDefault:[`PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults`],setConfigurationAsDefaultForEnterprise:[`PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults`],updateConfiguration:[`PATCH /orgs/{org}/code-security/configurations/{configuration_id}`],updateEnterpriseConfiguration:[`PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}`]},codesOfConduct:{getAllCodesOfConduct:[`GET /codes_of_conduct`],getConductCode:[`GET /codes_of_conduct/{key}`]},codespaces:{addRepositoryForSecretForAuthenticatedUser:[`PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}`],addSelectedRepoToOrgSecret:[`PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}`],checkPermissionsForDevcontainer:[`GET /repos/{owner}/{repo}/codespaces/permissions_check`],codespaceMachinesForAuthenticatedUser:[`GET /user/codespaces/{codespace_name}/machines`],createForAuthenticatedUser:[`POST /user/codespaces`],createOrUpdateOrgSecret:[`PUT /orgs/{org}/codespaces/secrets/{secret_name}`],createOrUpdateRepoSecret:[`PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}`],createOrUpdateSecretForAuthenticatedUser:[`PUT /user/codespaces/secrets/{secret_name}`],createWithPrForAuthenticatedUser:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces`],createWithRepoForAuthenticatedUser:[`POST /repos/{owner}/{repo}/codespaces`],deleteForAuthenticatedUser:[`DELETE /user/codespaces/{codespace_name}`],deleteFromOrganization:[`DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}`],deleteOrgSecret:[`DELETE /orgs/{org}/codespaces/secrets/{secret_name}`],deleteRepoSecret:[`DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}`],deleteSecretForAuthenticatedUser:[`DELETE /user/codespaces/secrets/{secret_name}`],exportForAuthenticatedUser:[`POST /user/codespaces/{codespace_name}/exports`],getCodespacesForUserInOrg:[`GET /orgs/{org}/members/{username}/codespaces`],getExportDetailsForAuthenticatedUser:[`GET /user/codespaces/{codespace_name}/exports/{export_id}`],getForAuthenticatedUser:[`GET /user/codespaces/{codespace_name}`],getOrgPublicKey:[`GET /orgs/{org}/codespaces/secrets/public-key`],getOrgSecret:[`GET /orgs/{org}/codespaces/secrets/{secret_name}`],getPublicKeyForAuthenticatedUser:[`GET /user/codespaces/secrets/public-key`],getRepoPublicKey:[`GET /repos/{owner}/{repo}/codespaces/secrets/public-key`],getRepoSecret:[`GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}`],getSecretForAuthenticatedUser:[`GET /user/codespaces/secrets/{secret_name}`],listDevcontainersInRepositoryForAuthenticatedUser:[`GET /repos/{owner}/{repo}/codespaces/devcontainers`],listForAuthenticatedUser:[`GET /user/codespaces`],listInOrganization:[`GET /orgs/{org}/codespaces`,{},{renamedParameters:{org_id:`org`}}],listInRepositoryForAuthenticatedUser:[`GET /repos/{owner}/{repo}/codespaces`],listOrgSecrets:[`GET /orgs/{org}/codespaces/secrets`],listRepoSecrets:[`GET /repos/{owner}/{repo}/codespaces/secrets`],listRepositoriesForSecretForAuthenticatedUser:[`GET /user/codespaces/secrets/{secret_name}/repositories`],listSecretsForAuthenticatedUser:[`GET /user/codespaces/secrets`],listSelectedReposForOrgSecret:[`GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories`],preFlightWithRepoForAuthenticatedUser:[`GET /repos/{owner}/{repo}/codespaces/new`],publishForAuthenticatedUser:[`POST /user/codespaces/{codespace_name}/publish`],removeRepositoryForSecretForAuthenticatedUser:[`DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}`],removeSelectedRepoFromOrgSecret:[`DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}`],repoMachinesForAuthenticatedUser:[`GET /repos/{owner}/{repo}/codespaces/machines`],setRepositoriesForSecretForAuthenticatedUser:[`PUT /user/codespaces/secrets/{secret_name}/repositories`],setSelectedReposForOrgSecret:[`PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories`],startForAuthenticatedUser:[`POST /user/codespaces/{codespace_name}/start`],stopForAuthenticatedUser:[`POST /user/codespaces/{codespace_name}/stop`],stopInOrganization:[`POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop`],updateForAuthenticatedUser:[`PATCH /user/codespaces/{codespace_name}`]},copilot:{addCopilotSeatsForTeams:[`POST /orgs/{org}/copilot/billing/selected_teams`],addCopilotSeatsForUsers:[`POST /orgs/{org}/copilot/billing/selected_users`],cancelCopilotSeatAssignmentForTeams:[`DELETE /orgs/{org}/copilot/billing/selected_teams`],cancelCopilotSeatAssignmentForUsers:[`DELETE /orgs/{org}/copilot/billing/selected_users`],copilotMetricsForOrganization:[`GET /orgs/{org}/copilot/metrics`],copilotMetricsForTeam:[`GET /orgs/{org}/team/{team_slug}/copilot/metrics`],getCopilotOrganizationDetails:[`GET /orgs/{org}/copilot/billing`],getCopilotSeatDetailsForUser:[`GET /orgs/{org}/members/{username}/copilot`],listCopilotSeats:[`GET /orgs/{org}/copilot/billing/seats`]},credentials:{revoke:[`POST /credentials/revoke`]},dependabot:{addSelectedRepoToOrgSecret:[`PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}`],createOrUpdateOrgSecret:[`PUT /orgs/{org}/dependabot/secrets/{secret_name}`],createOrUpdateRepoSecret:[`PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}`],deleteOrgSecret:[`DELETE /orgs/{org}/dependabot/secrets/{secret_name}`],deleteRepoSecret:[`DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}`],getAlert:[`GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}`],getOrgPublicKey:[`GET /orgs/{org}/dependabot/secrets/public-key`],getOrgSecret:[`GET /orgs/{org}/dependabot/secrets/{secret_name}`],getRepoPublicKey:[`GET /repos/{owner}/{repo}/dependabot/secrets/public-key`],getRepoSecret:[`GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}`],listAlertsForEnterprise:[`GET /enterprises/{enterprise}/dependabot/alerts`],listAlertsForOrg:[`GET /orgs/{org}/dependabot/alerts`],listAlertsForRepo:[`GET /repos/{owner}/{repo}/dependabot/alerts`],listOrgSecrets:[`GET /orgs/{org}/dependabot/secrets`],listRepoSecrets:[`GET /repos/{owner}/{repo}/dependabot/secrets`],listSelectedReposForOrgSecret:[`GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories`],removeSelectedRepoFromOrgSecret:[`DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}`],repositoryAccessForOrg:[`GET /organizations/{org}/dependabot/repository-access`],setRepositoryAccessDefaultLevel:[`PUT /organizations/{org}/dependabot/repository-access/default-level`],setSelectedReposForOrgSecret:[`PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories`],updateAlert:[`PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}`],updateRepositoryAccessForOrg:[`PATCH /organizations/{org}/dependabot/repository-access`]},dependencyGraph:{createRepositorySnapshot:[`POST /repos/{owner}/{repo}/dependency-graph/snapshots`],diffRange:[`GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}`],exportSbom:[`GET /repos/{owner}/{repo}/dependency-graph/sbom`]},emojis:{get:[`GET /emojis`]},enterpriseTeamMemberships:{add:[`PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}`],bulkAdd:[`POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add`],bulkRemove:[`POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove`],get:[`GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}`],list:[`GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships`],remove:[`DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}`]},enterpriseTeamOrganizations:{add:[`PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}`],bulkAdd:[`POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add`],bulkRemove:[`POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove`],delete:[`DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}`],getAssignment:[`GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}`],getAssignments:[`GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations`]},enterpriseTeams:{create:[`POST /enterprises/{enterprise}/teams`],delete:[`DELETE /enterprises/{enterprise}/teams/{team_slug}`],get:[`GET /enterprises/{enterprise}/teams/{team_slug}`],list:[`GET /enterprises/{enterprise}/teams`],update:[`PATCH /enterprises/{enterprise}/teams/{team_slug}`]},gists:{checkIsStarred:[`GET /gists/{gist_id}/star`],create:[`POST /gists`],createComment:[`POST /gists/{gist_id}/comments`],delete:[`DELETE /gists/{gist_id}`],deleteComment:[`DELETE /gists/{gist_id}/comments/{comment_id}`],fork:[`POST /gists/{gist_id}/forks`],get:[`GET /gists/{gist_id}`],getComment:[`GET /gists/{gist_id}/comments/{comment_id}`],getRevision:[`GET /gists/{gist_id}/{sha}`],list:[`GET /gists`],listComments:[`GET /gists/{gist_id}/comments`],listCommits:[`GET /gists/{gist_id}/commits`],listForUser:[`GET /users/{username}/gists`],listForks:[`GET /gists/{gist_id}/forks`],listPublic:[`GET /gists/public`],listStarred:[`GET /gists/starred`],star:[`PUT /gists/{gist_id}/star`],unstar:[`DELETE /gists/{gist_id}/star`],update:[`PATCH /gists/{gist_id}`],updateComment:[`PATCH /gists/{gist_id}/comments/{comment_id}`]},git:{createBlob:[`POST /repos/{owner}/{repo}/git/blobs`],createCommit:[`POST /repos/{owner}/{repo}/git/commits`],createRef:[`POST /repos/{owner}/{repo}/git/refs`],createTag:[`POST /repos/{owner}/{repo}/git/tags`],createTree:[`POST /repos/{owner}/{repo}/git/trees`],deleteRef:[`DELETE /repos/{owner}/{repo}/git/refs/{ref}`],getBlob:[`GET /repos/{owner}/{repo}/git/blobs/{file_sha}`],getCommit:[`GET /repos/{owner}/{repo}/git/commits/{commit_sha}`],getRef:[`GET /repos/{owner}/{repo}/git/ref/{ref}`],getTag:[`GET /repos/{owner}/{repo}/git/tags/{tag_sha}`],getTree:[`GET /repos/{owner}/{repo}/git/trees/{tree_sha}`],listMatchingRefs:[`GET /repos/{owner}/{repo}/git/matching-refs/{ref}`],updateRef:[`PATCH /repos/{owner}/{repo}/git/refs/{ref}`]},gitignore:{getAllTemplates:[`GET /gitignore/templates`],getTemplate:[`GET /gitignore/templates/{name}`]},hostedCompute:{createNetworkConfigurationForOrg:[`POST /orgs/{org}/settings/network-configurations`],deleteNetworkConfigurationFromOrg:[`DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}`],getNetworkConfigurationForOrg:[`GET /orgs/{org}/settings/network-configurations/{network_configuration_id}`],getNetworkSettingsForOrg:[`GET /orgs/{org}/settings/network-settings/{network_settings_id}`],listNetworkConfigurationsForOrg:[`GET /orgs/{org}/settings/network-configurations`],updateNetworkConfigurationForOrg:[`PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}`]},interactions:{getRestrictionsForAuthenticatedUser:[`GET /user/interaction-limits`],getRestrictionsForOrg:[`GET /orgs/{org}/interaction-limits`],getRestrictionsForRepo:[`GET /repos/{owner}/{repo}/interaction-limits`],getRestrictionsForYourPublicRepos:[`GET /user/interaction-limits`,{},{renamed:[`interactions`,`getRestrictionsForAuthenticatedUser`]}],removeRestrictionsForAuthenticatedUser:[`DELETE /user/interaction-limits`],removeRestrictionsForOrg:[`DELETE /orgs/{org}/interaction-limits`],removeRestrictionsForRepo:[`DELETE /repos/{owner}/{repo}/interaction-limits`],removeRestrictionsForYourPublicRepos:[`DELETE /user/interaction-limits`,{},{renamed:[`interactions`,`removeRestrictionsForAuthenticatedUser`]}],setRestrictionsForAuthenticatedUser:[`PUT /user/interaction-limits`],setRestrictionsForOrg:[`PUT /orgs/{org}/interaction-limits`],setRestrictionsForRepo:[`PUT /repos/{owner}/{repo}/interaction-limits`],setRestrictionsForYourPublicRepos:[`PUT /user/interaction-limits`,{},{renamed:[`interactions`,`setRestrictionsForAuthenticatedUser`]}]},issues:{addAssignees:[`POST /repos/{owner}/{repo}/issues/{issue_number}/assignees`],addBlockedByDependency:[`POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by`],addLabels:[`POST /repos/{owner}/{repo}/issues/{issue_number}/labels`],addSubIssue:[`POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues`],checkUserCanBeAssigned:[`GET /repos/{owner}/{repo}/assignees/{assignee}`],checkUserCanBeAssignedToIssue:[`GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}`],create:[`POST /repos/{owner}/{repo}/issues`],createComment:[`POST /repos/{owner}/{repo}/issues/{issue_number}/comments`],createLabel:[`POST /repos/{owner}/{repo}/labels`],createMilestone:[`POST /repos/{owner}/{repo}/milestones`],deleteComment:[`DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}`],deleteLabel:[`DELETE /repos/{owner}/{repo}/labels/{name}`],deleteMilestone:[`DELETE /repos/{owner}/{repo}/milestones/{milestone_number}`],get:[`GET /repos/{owner}/{repo}/issues/{issue_number}`],getComment:[`GET /repos/{owner}/{repo}/issues/comments/{comment_id}`],getEvent:[`GET /repos/{owner}/{repo}/issues/events/{event_id}`],getLabel:[`GET /repos/{owner}/{repo}/labels/{name}`],getMilestone:[`GET /repos/{owner}/{repo}/milestones/{milestone_number}`],getParent:[`GET /repos/{owner}/{repo}/issues/{issue_number}/parent`],list:[`GET /issues`],listAssignees:[`GET /repos/{owner}/{repo}/assignees`],listComments:[`GET /repos/{owner}/{repo}/issues/{issue_number}/comments`],listCommentsForRepo:[`GET /repos/{owner}/{repo}/issues/comments`],listDependenciesBlockedBy:[`GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by`],listDependenciesBlocking:[`GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking`],listEvents:[`GET /repos/{owner}/{repo}/issues/{issue_number}/events`],listEventsForRepo:[`GET /repos/{owner}/{repo}/issues/events`],listEventsForTimeline:[`GET /repos/{owner}/{repo}/issues/{issue_number}/timeline`],listForAuthenticatedUser:[`GET /user/issues`],listForOrg:[`GET /orgs/{org}/issues`],listForRepo:[`GET /repos/{owner}/{repo}/issues`],listLabelsForMilestone:[`GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels`],listLabelsForRepo:[`GET /repos/{owner}/{repo}/labels`],listLabelsOnIssue:[`GET /repos/{owner}/{repo}/issues/{issue_number}/labels`],listMilestones:[`GET /repos/{owner}/{repo}/milestones`],listSubIssues:[`GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues`],lock:[`PUT /repos/{owner}/{repo}/issues/{issue_number}/lock`],removeAllLabels:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels`],removeAssignees:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees`],removeDependencyBlockedBy:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}`],removeLabel:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}`],removeSubIssue:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue`],reprioritizeSubIssue:[`PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority`],setLabels:[`PUT /repos/{owner}/{repo}/issues/{issue_number}/labels`],unlock:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock`],update:[`PATCH /repos/{owner}/{repo}/issues/{issue_number}`],updateComment:[`PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}`],updateLabel:[`PATCH /repos/{owner}/{repo}/labels/{name}`],updateMilestone:[`PATCH /repos/{owner}/{repo}/milestones/{milestone_number}`]},licenses:{get:[`GET /licenses/{license}`],getAllCommonlyUsed:[`GET /licenses`],getForRepo:[`GET /repos/{owner}/{repo}/license`]},markdown:{render:[`POST /markdown`],renderRaw:[`POST /markdown/raw`,{headers:{"content-type":`text/plain; charset=utf-8`}}]},meta:{get:[`GET /meta`],getAllVersions:[`GET /versions`],getOctocat:[`GET /octocat`],getZen:[`GET /zen`],root:[`GET /`]},migrations:{deleteArchiveForAuthenticatedUser:[`DELETE /user/migrations/{migration_id}/archive`],deleteArchiveForOrg:[`DELETE /orgs/{org}/migrations/{migration_id}/archive`],downloadArchiveForOrg:[`GET /orgs/{org}/migrations/{migration_id}/archive`],getArchiveForAuthenticatedUser:[`GET /user/migrations/{migration_id}/archive`],getStatusForAuthenticatedUser:[`GET /user/migrations/{migration_id}`],getStatusForOrg:[`GET /orgs/{org}/migrations/{migration_id}`],listForAuthenticatedUser:[`GET /user/migrations`],listForOrg:[`GET /orgs/{org}/migrations`],listReposForAuthenticatedUser:[`GET /user/migrations/{migration_id}/repositories`],listReposForOrg:[`GET /orgs/{org}/migrations/{migration_id}/repositories`],listReposForUser:[`GET /user/migrations/{migration_id}/repositories`,{},{renamed:[`migrations`,`listReposForAuthenticatedUser`]}],startForAuthenticatedUser:[`POST /user/migrations`],startForOrg:[`POST /orgs/{org}/migrations`],unlockRepoForAuthenticatedUser:[`DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock`],unlockRepoForOrg:[`DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock`]},oidc:{getOidcCustomSubTemplateForOrg:[`GET /orgs/{org}/actions/oidc/customization/sub`],updateOidcCustomSubTemplateForOrg:[`PUT /orgs/{org}/actions/oidc/customization/sub`]},orgs:{addSecurityManagerTeam:[`PUT /orgs/{org}/security-managers/teams/{team_slug}`,{},{deprecated:`octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team`}],assignTeamToOrgRole:[`PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}`],assignUserToOrgRole:[`PUT /orgs/{org}/organization-roles/users/{username}/{role_id}`],blockUser:[`PUT /orgs/{org}/blocks/{username}`],cancelInvitation:[`DELETE /orgs/{org}/invitations/{invitation_id}`],checkBlockedUser:[`GET /orgs/{org}/blocks/{username}`],checkMembershipForUser:[`GET /orgs/{org}/members/{username}`],checkPublicMembershipForUser:[`GET /orgs/{org}/public_members/{username}`],convertMemberToOutsideCollaborator:[`PUT /orgs/{org}/outside_collaborators/{username}`],createArtifactStorageRecord:[`POST /orgs/{org}/artifacts/metadata/storage-record`],createInvitation:[`POST /orgs/{org}/invitations`],createIssueType:[`POST /orgs/{org}/issue-types`],createWebhook:[`POST /orgs/{org}/hooks`],customPropertiesForOrgsCreateOrUpdateOrganizationValues:[`PATCH /organizations/{org}/org-properties/values`],customPropertiesForOrgsGetOrganizationValues:[`GET /organizations/{org}/org-properties/values`],customPropertiesForReposCreateOrUpdateOrganizationDefinition:[`PUT /orgs/{org}/properties/schema/{custom_property_name}`],customPropertiesForReposCreateOrUpdateOrganizationDefinitions:[`PATCH /orgs/{org}/properties/schema`],customPropertiesForReposCreateOrUpdateOrganizationValues:[`PATCH /orgs/{org}/properties/values`],customPropertiesForReposDeleteOrganizationDefinition:[`DELETE /orgs/{org}/properties/schema/{custom_property_name}`],customPropertiesForReposGetOrganizationDefinition:[`GET /orgs/{org}/properties/schema/{custom_property_name}`],customPropertiesForReposGetOrganizationDefinitions:[`GET /orgs/{org}/properties/schema`],customPropertiesForReposGetOrganizationValues:[`GET /orgs/{org}/properties/values`],delete:[`DELETE /orgs/{org}`],deleteAttestationsBulk:[`POST /orgs/{org}/attestations/delete-request`],deleteAttestationsById:[`DELETE /orgs/{org}/attestations/{attestation_id}`],deleteAttestationsBySubjectDigest:[`DELETE /orgs/{org}/attestations/digest/{subject_digest}`],deleteIssueType:[`DELETE /orgs/{org}/issue-types/{issue_type_id}`],deleteWebhook:[`DELETE /orgs/{org}/hooks/{hook_id}`],disableSelectedRepositoryImmutableReleasesOrganization:[`DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}`],enableSelectedRepositoryImmutableReleasesOrganization:[`PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}`],get:[`GET /orgs/{org}`],getImmutableReleasesSettings:[`GET /orgs/{org}/settings/immutable-releases`],getImmutableReleasesSettingsRepositories:[`GET /orgs/{org}/settings/immutable-releases/repositories`],getMembershipForAuthenticatedUser:[`GET /user/memberships/orgs/{org}`],getMembershipForUser:[`GET /orgs/{org}/memberships/{username}`],getOrgRole:[`GET /orgs/{org}/organization-roles/{role_id}`],getOrgRulesetHistory:[`GET /orgs/{org}/rulesets/{ruleset_id}/history`],getOrgRulesetVersion:[`GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}`],getWebhook:[`GET /orgs/{org}/hooks/{hook_id}`],getWebhookConfigForOrg:[`GET /orgs/{org}/hooks/{hook_id}/config`],getWebhookDelivery:[`GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}`],list:[`GET /organizations`],listAppInstallations:[`GET /orgs/{org}/installations`],listArtifactStorageRecords:[`GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records`],listAttestationRepositories:[`GET /orgs/{org}/attestations/repositories`],listAttestations:[`GET /orgs/{org}/attestations/{subject_digest}`],listAttestationsBulk:[`POST /orgs/{org}/attestations/bulk-list{?per_page,before,after}`],listBlockedUsers:[`GET /orgs/{org}/blocks`],listFailedInvitations:[`GET /orgs/{org}/failed_invitations`],listForAuthenticatedUser:[`GET /user/orgs`],listForUser:[`GET /users/{username}/orgs`],listInvitationTeams:[`GET /orgs/{org}/invitations/{invitation_id}/teams`],listIssueTypes:[`GET /orgs/{org}/issue-types`],listMembers:[`GET /orgs/{org}/members`],listMembershipsForAuthenticatedUser:[`GET /user/memberships/orgs`],listOrgRoleTeams:[`GET /orgs/{org}/organization-roles/{role_id}/teams`],listOrgRoleUsers:[`GET /orgs/{org}/organization-roles/{role_id}/users`],listOrgRoles:[`GET /orgs/{org}/organization-roles`],listOrganizationFineGrainedPermissions:[`GET /orgs/{org}/organization-fine-grained-permissions`],listOutsideCollaborators:[`GET /orgs/{org}/outside_collaborators`],listPatGrantRepositories:[`GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories`],listPatGrantRequestRepositories:[`GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories`],listPatGrantRequests:[`GET /orgs/{org}/personal-access-token-requests`],listPatGrants:[`GET /orgs/{org}/personal-access-tokens`],listPendingInvitations:[`GET /orgs/{org}/invitations`],listPublicMembers:[`GET /orgs/{org}/public_members`],listSecurityManagerTeams:[`GET /orgs/{org}/security-managers`,{},{deprecated:`octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams`}],listWebhookDeliveries:[`GET /orgs/{org}/hooks/{hook_id}/deliveries`],listWebhooks:[`GET /orgs/{org}/hooks`],pingWebhook:[`POST /orgs/{org}/hooks/{hook_id}/pings`],redeliverWebhookDelivery:[`POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts`],removeMember:[`DELETE /orgs/{org}/members/{username}`],removeMembershipForUser:[`DELETE /orgs/{org}/memberships/{username}`],removeOutsideCollaborator:[`DELETE /orgs/{org}/outside_collaborators/{username}`],removePublicMembershipForAuthenticatedUser:[`DELETE /orgs/{org}/public_members/{username}`],removeSecurityManagerTeam:[`DELETE /orgs/{org}/security-managers/teams/{team_slug}`,{},{deprecated:`octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team`}],reviewPatGrantRequest:[`POST /orgs/{org}/personal-access-token-requests/{pat_request_id}`],reviewPatGrantRequestsInBulk:[`POST /orgs/{org}/personal-access-token-requests`],revokeAllOrgRolesTeam:[`DELETE /orgs/{org}/organization-roles/teams/{team_slug}`],revokeAllOrgRolesUser:[`DELETE /orgs/{org}/organization-roles/users/{username}`],revokeOrgRoleTeam:[`DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}`],revokeOrgRoleUser:[`DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}`],setImmutableReleasesSettings:[`PUT /orgs/{org}/settings/immutable-releases`],setImmutableReleasesSettingsRepositories:[`PUT /orgs/{org}/settings/immutable-releases/repositories`],setMembershipForUser:[`PUT /orgs/{org}/memberships/{username}`],setPublicMembershipForAuthenticatedUser:[`PUT /orgs/{org}/public_members/{username}`],unblockUser:[`DELETE /orgs/{org}/blocks/{username}`],update:[`PATCH /orgs/{org}`],updateIssueType:[`PUT /orgs/{org}/issue-types/{issue_type_id}`],updateMembershipForAuthenticatedUser:[`PATCH /user/memberships/orgs/{org}`],updatePatAccess:[`POST /orgs/{org}/personal-access-tokens/{pat_id}`],updatePatAccesses:[`POST /orgs/{org}/personal-access-tokens`],updateWebhook:[`PATCH /orgs/{org}/hooks/{hook_id}`],updateWebhookConfigForOrg:[`PATCH /orgs/{org}/hooks/{hook_id}/config`]},packages:{deletePackageForAuthenticatedUser:[`DELETE /user/packages/{package_type}/{package_name}`],deletePackageForOrg:[`DELETE /orgs/{org}/packages/{package_type}/{package_name}`],deletePackageForUser:[`DELETE /users/{username}/packages/{package_type}/{package_name}`],deletePackageVersionForAuthenticatedUser:[`DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}`],deletePackageVersionForOrg:[`DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}`],deletePackageVersionForUser:[`DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}`],getAllPackageVersionsForAPackageOwnedByAnOrg:[`GET /orgs/{org}/packages/{package_type}/{package_name}/versions`,{},{renamed:[`packages`,`getAllPackageVersionsForPackageOwnedByOrg`]}],getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser:[`GET /user/packages/{package_type}/{package_name}/versions`,{},{renamed:[`packages`,`getAllPackageVersionsForPackageOwnedByAuthenticatedUser`]}],getAllPackageVersionsForPackageOwnedByAuthenticatedUser:[`GET /user/packages/{package_type}/{package_name}/versions`],getAllPackageVersionsForPackageOwnedByOrg:[`GET /orgs/{org}/packages/{package_type}/{package_name}/versions`],getAllPackageVersionsForPackageOwnedByUser:[`GET /users/{username}/packages/{package_type}/{package_name}/versions`],getPackageForAuthenticatedUser:[`GET /user/packages/{package_type}/{package_name}`],getPackageForOrganization:[`GET /orgs/{org}/packages/{package_type}/{package_name}`],getPackageForUser:[`GET /users/{username}/packages/{package_type}/{package_name}`],getPackageVersionForAuthenticatedUser:[`GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}`],getPackageVersionForOrganization:[`GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}`],getPackageVersionForUser:[`GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}`],listDockerMigrationConflictingPackagesForAuthenticatedUser:[`GET /user/docker/conflicts`],listDockerMigrationConflictingPackagesForOrganization:[`GET /orgs/{org}/docker/conflicts`],listDockerMigrationConflictingPackagesForUser:[`GET /users/{username}/docker/conflicts`],listPackagesForAuthenticatedUser:[`GET /user/packages`],listPackagesForOrganization:[`GET /orgs/{org}/packages`],listPackagesForUser:[`GET /users/{username}/packages`],restorePackageForAuthenticatedUser:[`POST /user/packages/{package_type}/{package_name}/restore{?token}`],restorePackageForOrg:[`POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}`],restorePackageForUser:[`POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}`],restorePackageVersionForAuthenticatedUser:[`POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore`],restorePackageVersionForOrg:[`POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore`],restorePackageVersionForUser:[`POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore`]},privateRegistries:{createOrgPrivateRegistry:[`POST /orgs/{org}/private-registries`],deleteOrgPrivateRegistry:[`DELETE /orgs/{org}/private-registries/{secret_name}`],getOrgPrivateRegistry:[`GET /orgs/{org}/private-registries/{secret_name}`],getOrgPublicKey:[`GET /orgs/{org}/private-registries/public-key`],listOrgPrivateRegistries:[`GET /orgs/{org}/private-registries`],updateOrgPrivateRegistry:[`PATCH /orgs/{org}/private-registries/{secret_name}`]},projects:{addItemForOrg:[`POST /orgs/{org}/projectsV2/{project_number}/items`],addItemForUser:[`POST /users/{username}/projectsV2/{project_number}/items`],deleteItemForOrg:[`DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}`],deleteItemForUser:[`DELETE /users/{username}/projectsV2/{project_number}/items/{item_id}`],getFieldForOrg:[`GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}`],getFieldForUser:[`GET /users/{username}/projectsV2/{project_number}/fields/{field_id}`],getForOrg:[`GET /orgs/{org}/projectsV2/{project_number}`],getForUser:[`GET /users/{username}/projectsV2/{project_number}`],getOrgItem:[`GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}`],getUserItem:[`GET /users/{username}/projectsV2/{project_number}/items/{item_id}`],listFieldsForOrg:[`GET /orgs/{org}/projectsV2/{project_number}/fields`],listFieldsForUser:[`GET /users/{username}/projectsV2/{project_number}/fields`],listForOrg:[`GET /orgs/{org}/projectsV2`],listForUser:[`GET /users/{username}/projectsV2`],listItemsForOrg:[`GET /orgs/{org}/projectsV2/{project_number}/items`],listItemsForUser:[`GET /users/{username}/projectsV2/{project_number}/items`],updateItemForOrg:[`PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}`],updateItemForUser:[`PATCH /users/{username}/projectsV2/{project_number}/items/{item_id}`]},pulls:{checkIfMerged:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/merge`],create:[`POST /repos/{owner}/{repo}/pulls`],createReplyForReviewComment:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies`],createReview:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews`],createReviewComment:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/comments`],deletePendingReview:[`DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}`],deleteReviewComment:[`DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}`],dismissReview:[`PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals`],get:[`GET /repos/{owner}/{repo}/pulls/{pull_number}`],getReview:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}`],getReviewComment:[`GET /repos/{owner}/{repo}/pulls/comments/{comment_id}`],list:[`GET /repos/{owner}/{repo}/pulls`],listCommentsForReview:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments`],listCommits:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/commits`],listFiles:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/files`],listRequestedReviewers:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers`],listReviewComments:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/comments`],listReviewCommentsForRepo:[`GET /repos/{owner}/{repo}/pulls/comments`],listReviews:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews`],merge:[`PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge`],removeRequestedReviewers:[`DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers`],requestReviewers:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers`],submitReview:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events`],update:[`PATCH /repos/{owner}/{repo}/pulls/{pull_number}`],updateBranch:[`PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch`],updateReview:[`PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}`],updateReviewComment:[`PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}`]},rateLimit:{get:[`GET /rate_limit`]},reactions:{createForCommitComment:[`POST /repos/{owner}/{repo}/comments/{comment_id}/reactions`],createForIssue:[`POST /repos/{owner}/{repo}/issues/{issue_number}/reactions`],createForIssueComment:[`POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions`],createForPullRequestReviewComment:[`POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions`],createForRelease:[`POST /repos/{owner}/{repo}/releases/{release_id}/reactions`],createForTeamDiscussionCommentInOrg:[`POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions`],createForTeamDiscussionInOrg:[`POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions`],deleteForCommitComment:[`DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}`],deleteForIssue:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}`],deleteForIssueComment:[`DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}`],deleteForPullRequestComment:[`DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}`],deleteForRelease:[`DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}`],deleteForTeamDiscussion:[`DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}`],deleteForTeamDiscussionComment:[`DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}`],listForCommitComment:[`GET /repos/{owner}/{repo}/comments/{comment_id}/reactions`],listForIssue:[`GET /repos/{owner}/{repo}/issues/{issue_number}/reactions`],listForIssueComment:[`GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions`],listForPullRequestReviewComment:[`GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions`],listForRelease:[`GET /repos/{owner}/{repo}/releases/{release_id}/reactions`],listForTeamDiscussionCommentInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions`],listForTeamDiscussionInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions`]},repos:{acceptInvitation:[`PATCH /user/repository_invitations/{invitation_id}`,{},{renamed:[`repos`,`acceptInvitationForAuthenticatedUser`]}],acceptInvitationForAuthenticatedUser:[`PATCH /user/repository_invitations/{invitation_id}`],addAppAccessRestrictions:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps`,{},{mapToData:`apps`}],addCollaborator:[`PUT /repos/{owner}/{repo}/collaborators/{username}`],addStatusCheckContexts:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts`,{},{mapToData:`contexts`}],addTeamAccessRestrictions:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams`,{},{mapToData:`teams`}],addUserAccessRestrictions:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users`,{},{mapToData:`users`}],cancelPagesDeployment:[`POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel`],checkAutomatedSecurityFixes:[`GET /repos/{owner}/{repo}/automated-security-fixes`],checkCollaborator:[`GET /repos/{owner}/{repo}/collaborators/{username}`],checkImmutableReleases:[`GET /repos/{owner}/{repo}/immutable-releases`],checkPrivateVulnerabilityReporting:[`GET /repos/{owner}/{repo}/private-vulnerability-reporting`],checkVulnerabilityAlerts:[`GET /repos/{owner}/{repo}/vulnerability-alerts`],codeownersErrors:[`GET /repos/{owner}/{repo}/codeowners/errors`],compareCommits:[`GET /repos/{owner}/{repo}/compare/{base}...{head}`],compareCommitsWithBasehead:[`GET /repos/{owner}/{repo}/compare/{basehead}`],createAttestation:[`POST /repos/{owner}/{repo}/attestations`],createAutolink:[`POST /repos/{owner}/{repo}/autolinks`],createCommitComment:[`POST /repos/{owner}/{repo}/commits/{commit_sha}/comments`],createCommitSignatureProtection:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures`],createCommitStatus:[`POST /repos/{owner}/{repo}/statuses/{sha}`],createDeployKey:[`POST /repos/{owner}/{repo}/keys`],createDeployment:[`POST /repos/{owner}/{repo}/deployments`],createDeploymentBranchPolicy:[`POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies`],createDeploymentProtectionRule:[`POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules`],createDeploymentStatus:[`POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses`],createDispatchEvent:[`POST /repos/{owner}/{repo}/dispatches`],createForAuthenticatedUser:[`POST /user/repos`],createFork:[`POST /repos/{owner}/{repo}/forks`],createInOrg:[`POST /orgs/{org}/repos`],createOrUpdateEnvironment:[`PUT /repos/{owner}/{repo}/environments/{environment_name}`],createOrUpdateFileContents:[`PUT /repos/{owner}/{repo}/contents/{path}`],createOrgRuleset:[`POST /orgs/{org}/rulesets`],createPagesDeployment:[`POST /repos/{owner}/{repo}/pages/deployments`],createPagesSite:[`POST /repos/{owner}/{repo}/pages`],createRelease:[`POST /repos/{owner}/{repo}/releases`],createRepoRuleset:[`POST /repos/{owner}/{repo}/rulesets`],createUsingTemplate:[`POST /repos/{template_owner}/{template_repo}/generate`],createWebhook:[`POST /repos/{owner}/{repo}/hooks`],customPropertiesForReposCreateOrUpdateRepositoryValues:[`PATCH /repos/{owner}/{repo}/properties/values`],customPropertiesForReposGetRepositoryValues:[`GET /repos/{owner}/{repo}/properties/values`],declineInvitation:[`DELETE /user/repository_invitations/{invitation_id}`,{},{renamed:[`repos`,`declineInvitationForAuthenticatedUser`]}],declineInvitationForAuthenticatedUser:[`DELETE /user/repository_invitations/{invitation_id}`],delete:[`DELETE /repos/{owner}/{repo}`],deleteAccessRestrictions:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions`],deleteAdminBranchProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins`],deleteAnEnvironment:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}`],deleteAutolink:[`DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}`],deleteBranchProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection`],deleteCommitComment:[`DELETE /repos/{owner}/{repo}/comments/{comment_id}`],deleteCommitSignatureProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures`],deleteDeployKey:[`DELETE /repos/{owner}/{repo}/keys/{key_id}`],deleteDeployment:[`DELETE /repos/{owner}/{repo}/deployments/{deployment_id}`],deleteDeploymentBranchPolicy:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}`],deleteFile:[`DELETE /repos/{owner}/{repo}/contents/{path}`],deleteInvitation:[`DELETE /repos/{owner}/{repo}/invitations/{invitation_id}`],deleteOrgRuleset:[`DELETE /orgs/{org}/rulesets/{ruleset_id}`],deletePagesSite:[`DELETE /repos/{owner}/{repo}/pages`],deletePullRequestReviewProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews`],deleteRelease:[`DELETE /repos/{owner}/{repo}/releases/{release_id}`],deleteReleaseAsset:[`DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}`],deleteRepoRuleset:[`DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}`],deleteWebhook:[`DELETE /repos/{owner}/{repo}/hooks/{hook_id}`],disableAutomatedSecurityFixes:[`DELETE /repos/{owner}/{repo}/automated-security-fixes`],disableDeploymentProtectionRule:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}`],disableImmutableReleases:[`DELETE /repos/{owner}/{repo}/immutable-releases`],disablePrivateVulnerabilityReporting:[`DELETE /repos/{owner}/{repo}/private-vulnerability-reporting`],disableVulnerabilityAlerts:[`DELETE /repos/{owner}/{repo}/vulnerability-alerts`],downloadArchive:[`GET /repos/{owner}/{repo}/zipball/{ref}`,{},{renamed:[`repos`,`downloadZipballArchive`]}],downloadTarballArchive:[`GET /repos/{owner}/{repo}/tarball/{ref}`],downloadZipballArchive:[`GET /repos/{owner}/{repo}/zipball/{ref}`],enableAutomatedSecurityFixes:[`PUT /repos/{owner}/{repo}/automated-security-fixes`],enableImmutableReleases:[`PUT /repos/{owner}/{repo}/immutable-releases`],enablePrivateVulnerabilityReporting:[`PUT /repos/{owner}/{repo}/private-vulnerability-reporting`],enableVulnerabilityAlerts:[`PUT /repos/{owner}/{repo}/vulnerability-alerts`],generateReleaseNotes:[`POST /repos/{owner}/{repo}/releases/generate-notes`],get:[`GET /repos/{owner}/{repo}`],getAccessRestrictions:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions`],getAdminBranchProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins`],getAllDeploymentProtectionRules:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules`],getAllEnvironments:[`GET /repos/{owner}/{repo}/environments`],getAllStatusCheckContexts:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts`],getAllTopics:[`GET /repos/{owner}/{repo}/topics`],getAppsWithAccessToProtectedBranch:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps`],getAutolink:[`GET /repos/{owner}/{repo}/autolinks/{autolink_id}`],getBranch:[`GET /repos/{owner}/{repo}/branches/{branch}`],getBranchProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection`],getBranchRules:[`GET /repos/{owner}/{repo}/rules/branches/{branch}`],getClones:[`GET /repos/{owner}/{repo}/traffic/clones`],getCodeFrequencyStats:[`GET /repos/{owner}/{repo}/stats/code_frequency`],getCollaboratorPermissionLevel:[`GET /repos/{owner}/{repo}/collaborators/{username}/permission`],getCombinedStatusForRef:[`GET /repos/{owner}/{repo}/commits/{ref}/status`],getCommit:[`GET /repos/{owner}/{repo}/commits/{ref}`],getCommitActivityStats:[`GET /repos/{owner}/{repo}/stats/commit_activity`],getCommitComment:[`GET /repos/{owner}/{repo}/comments/{comment_id}`],getCommitSignatureProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures`],getCommunityProfileMetrics:[`GET /repos/{owner}/{repo}/community/profile`],getContent:[`GET /repos/{owner}/{repo}/contents/{path}`],getContributorsStats:[`GET /repos/{owner}/{repo}/stats/contributors`],getCustomDeploymentProtectionRule:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}`],getDeployKey:[`GET /repos/{owner}/{repo}/keys/{key_id}`],getDeployment:[`GET /repos/{owner}/{repo}/deployments/{deployment_id}`],getDeploymentBranchPolicy:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}`],getDeploymentStatus:[`GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}`],getEnvironment:[`GET /repos/{owner}/{repo}/environments/{environment_name}`],getLatestPagesBuild:[`GET /repos/{owner}/{repo}/pages/builds/latest`],getLatestRelease:[`GET /repos/{owner}/{repo}/releases/latest`],getOrgRuleSuite:[`GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}`],getOrgRuleSuites:[`GET /orgs/{org}/rulesets/rule-suites`],getOrgRuleset:[`GET /orgs/{org}/rulesets/{ruleset_id}`],getOrgRulesets:[`GET /orgs/{org}/rulesets`],getPages:[`GET /repos/{owner}/{repo}/pages`],getPagesBuild:[`GET /repos/{owner}/{repo}/pages/builds/{build_id}`],getPagesDeployment:[`GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}`],getPagesHealthCheck:[`GET /repos/{owner}/{repo}/pages/health`],getParticipationStats:[`GET /repos/{owner}/{repo}/stats/participation`],getPullRequestReviewProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews`],getPunchCardStats:[`GET /repos/{owner}/{repo}/stats/punch_card`],getReadme:[`GET /repos/{owner}/{repo}/readme`],getReadmeInDirectory:[`GET /repos/{owner}/{repo}/readme/{dir}`],getRelease:[`GET /repos/{owner}/{repo}/releases/{release_id}`],getReleaseAsset:[`GET /repos/{owner}/{repo}/releases/assets/{asset_id}`],getReleaseByTag:[`GET /repos/{owner}/{repo}/releases/tags/{tag}`],getRepoRuleSuite:[`GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}`],getRepoRuleSuites:[`GET /repos/{owner}/{repo}/rulesets/rule-suites`],getRepoRuleset:[`GET /repos/{owner}/{repo}/rulesets/{ruleset_id}`],getRepoRulesetHistory:[`GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history`],getRepoRulesetVersion:[`GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}`],getRepoRulesets:[`GET /repos/{owner}/{repo}/rulesets`],getStatusChecksProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks`],getTeamsWithAccessToProtectedBranch:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams`],getTopPaths:[`GET /repos/{owner}/{repo}/traffic/popular/paths`],getTopReferrers:[`GET /repos/{owner}/{repo}/traffic/popular/referrers`],getUsersWithAccessToProtectedBranch:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users`],getViews:[`GET /repos/{owner}/{repo}/traffic/views`],getWebhook:[`GET /repos/{owner}/{repo}/hooks/{hook_id}`],getWebhookConfigForRepo:[`GET /repos/{owner}/{repo}/hooks/{hook_id}/config`],getWebhookDelivery:[`GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}`],listActivities:[`GET /repos/{owner}/{repo}/activity`],listAttestations:[`GET /repos/{owner}/{repo}/attestations/{subject_digest}`],listAutolinks:[`GET /repos/{owner}/{repo}/autolinks`],listBranches:[`GET /repos/{owner}/{repo}/branches`],listBranchesForHeadCommit:[`GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head`],listCollaborators:[`GET /repos/{owner}/{repo}/collaborators`],listCommentsForCommit:[`GET /repos/{owner}/{repo}/commits/{commit_sha}/comments`],listCommitCommentsForRepo:[`GET /repos/{owner}/{repo}/comments`],listCommitStatusesForRef:[`GET /repos/{owner}/{repo}/commits/{ref}/statuses`],listCommits:[`GET /repos/{owner}/{repo}/commits`],listContributors:[`GET /repos/{owner}/{repo}/contributors`],listCustomDeploymentRuleIntegrations:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps`],listDeployKeys:[`GET /repos/{owner}/{repo}/keys`],listDeploymentBranchPolicies:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies`],listDeploymentStatuses:[`GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses`],listDeployments:[`GET /repos/{owner}/{repo}/deployments`],listForAuthenticatedUser:[`GET /user/repos`],listForOrg:[`GET /orgs/{org}/repos`],listForUser:[`GET /users/{username}/repos`],listForks:[`GET /repos/{owner}/{repo}/forks`],listInvitations:[`GET /repos/{owner}/{repo}/invitations`],listInvitationsForAuthenticatedUser:[`GET /user/repository_invitations`],listLanguages:[`GET /repos/{owner}/{repo}/languages`],listPagesBuilds:[`GET /repos/{owner}/{repo}/pages/builds`],listPublic:[`GET /repositories`],listPullRequestsAssociatedWithCommit:[`GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls`],listReleaseAssets:[`GET /repos/{owner}/{repo}/releases/{release_id}/assets`],listReleases:[`GET /repos/{owner}/{repo}/releases`],listTags:[`GET /repos/{owner}/{repo}/tags`],listTeams:[`GET /repos/{owner}/{repo}/teams`],listWebhookDeliveries:[`GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries`],listWebhooks:[`GET /repos/{owner}/{repo}/hooks`],merge:[`POST /repos/{owner}/{repo}/merges`],mergeUpstream:[`POST /repos/{owner}/{repo}/merge-upstream`],pingWebhook:[`POST /repos/{owner}/{repo}/hooks/{hook_id}/pings`],redeliverWebhookDelivery:[`POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts`],removeAppAccessRestrictions:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps`,{},{mapToData:`apps`}],removeCollaborator:[`DELETE /repos/{owner}/{repo}/collaborators/{username}`],removeStatusCheckContexts:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts`,{},{mapToData:`contexts`}],removeStatusCheckProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks`],removeTeamAccessRestrictions:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams`,{},{mapToData:`teams`}],removeUserAccessRestrictions:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users`,{},{mapToData:`users`}],renameBranch:[`POST /repos/{owner}/{repo}/branches/{branch}/rename`],replaceAllTopics:[`PUT /repos/{owner}/{repo}/topics`],requestPagesBuild:[`POST /repos/{owner}/{repo}/pages/builds`],setAdminBranchProtection:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins`],setAppAccessRestrictions:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps`,{},{mapToData:`apps`}],setStatusCheckContexts:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts`,{},{mapToData:`contexts`}],setTeamAccessRestrictions:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams`,{},{mapToData:`teams`}],setUserAccessRestrictions:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users`,{},{mapToData:`users`}],testPushWebhook:[`POST /repos/{owner}/{repo}/hooks/{hook_id}/tests`],transfer:[`POST /repos/{owner}/{repo}/transfer`],update:[`PATCH /repos/{owner}/{repo}`],updateBranchProtection:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection`],updateCommitComment:[`PATCH /repos/{owner}/{repo}/comments/{comment_id}`],updateDeploymentBranchPolicy:[`PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}`],updateInformationAboutPagesSite:[`PUT /repos/{owner}/{repo}/pages`],updateInvitation:[`PATCH /repos/{owner}/{repo}/invitations/{invitation_id}`],updateOrgRuleset:[`PUT /orgs/{org}/rulesets/{ruleset_id}`],updatePullRequestReviewProtection:[`PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews`],updateRelease:[`PATCH /repos/{owner}/{repo}/releases/{release_id}`],updateReleaseAsset:[`PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}`],updateRepoRuleset:[`PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}`],updateStatusCheckPotection:[`PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks`,{},{renamed:[`repos`,`updateStatusCheckProtection`]}],updateStatusCheckProtection:[`PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks`],updateWebhook:[`PATCH /repos/{owner}/{repo}/hooks/{hook_id}`],updateWebhookConfigForRepo:[`PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config`],uploadReleaseAsset:[`POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}`,{baseUrl:`https://uploads.github.com`}]},search:{code:[`GET /search/code`],commits:[`GET /search/commits`],issuesAndPullRequests:[`GET /search/issues`],labels:[`GET /search/labels`],repos:[`GET /search/repositories`],topics:[`GET /search/topics`],users:[`GET /search/users`]},secretScanning:{createPushProtectionBypass:[`POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses`],getAlert:[`GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}`],getScanHistory:[`GET /repos/{owner}/{repo}/secret-scanning/scan-history`],listAlertsForOrg:[`GET /orgs/{org}/secret-scanning/alerts`],listAlertsForRepo:[`GET /repos/{owner}/{repo}/secret-scanning/alerts`],listLocationsForAlert:[`GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations`],listOrgPatternConfigs:[`GET /orgs/{org}/secret-scanning/pattern-configurations`],updateAlert:[`PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}`],updateOrgPatternConfigs:[`PATCH /orgs/{org}/secret-scanning/pattern-configurations`]},securityAdvisories:{createFork:[`POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks`],createPrivateVulnerabilityReport:[`POST /repos/{owner}/{repo}/security-advisories/reports`],createRepositoryAdvisory:[`POST /repos/{owner}/{repo}/security-advisories`],createRepositoryAdvisoryCveRequest:[`POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve`],getGlobalAdvisory:[`GET /advisories/{ghsa_id}`],getRepositoryAdvisory:[`GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}`],listGlobalAdvisories:[`GET /advisories`],listOrgRepositoryAdvisories:[`GET /orgs/{org}/security-advisories`],listRepositoryAdvisories:[`GET /repos/{owner}/{repo}/security-advisories`],updateRepositoryAdvisory:[`PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}`]},teams:{addOrUpdateMembershipForUserInOrg:[`PUT /orgs/{org}/teams/{team_slug}/memberships/{username}`],addOrUpdateRepoPermissionsInOrg:[`PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}`],checkPermissionsForRepoInOrg:[`GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}`],create:[`POST /orgs/{org}/teams`],createDiscussionCommentInOrg:[`POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments`],createDiscussionInOrg:[`POST /orgs/{org}/teams/{team_slug}/discussions`],deleteDiscussionCommentInOrg:[`DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}`],deleteDiscussionInOrg:[`DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}`],deleteInOrg:[`DELETE /orgs/{org}/teams/{team_slug}`],getByName:[`GET /orgs/{org}/teams/{team_slug}`],getDiscussionCommentInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}`],getDiscussionInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}`],getMembershipForUserInOrg:[`GET /orgs/{org}/teams/{team_slug}/memberships/{username}`],list:[`GET /orgs/{org}/teams`],listChildInOrg:[`GET /orgs/{org}/teams/{team_slug}/teams`],listDiscussionCommentsInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments`],listDiscussionsInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions`],listForAuthenticatedUser:[`GET /user/teams`],listMembersInOrg:[`GET /orgs/{org}/teams/{team_slug}/members`],listPendingInvitationsInOrg:[`GET /orgs/{org}/teams/{team_slug}/invitations`],listReposInOrg:[`GET /orgs/{org}/teams/{team_slug}/repos`],removeMembershipForUserInOrg:[`DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}`],removeRepoInOrg:[`DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}`],updateDiscussionCommentInOrg:[`PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}`],updateDiscussionInOrg:[`PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}`],updateInOrg:[`PATCH /orgs/{org}/teams/{team_slug}`]},users:{addEmailForAuthenticated:[`POST /user/emails`,{},{renamed:[`users`,`addEmailForAuthenticatedUser`]}],addEmailForAuthenticatedUser:[`POST /user/emails`],addSocialAccountForAuthenticatedUser:[`POST /user/social_accounts`],block:[`PUT /user/blocks/{username}`],checkBlocked:[`GET /user/blocks/{username}`],checkFollowingForUser:[`GET /users/{username}/following/{target_user}`],checkPersonIsFollowedByAuthenticated:[`GET /user/following/{username}`],createGpgKeyForAuthenticated:[`POST /user/gpg_keys`,{},{renamed:[`users`,`createGpgKeyForAuthenticatedUser`]}],createGpgKeyForAuthenticatedUser:[`POST /user/gpg_keys`],createPublicSshKeyForAuthenticated:[`POST /user/keys`,{},{renamed:[`users`,`createPublicSshKeyForAuthenticatedUser`]}],createPublicSshKeyForAuthenticatedUser:[`POST /user/keys`],createSshSigningKeyForAuthenticatedUser:[`POST /user/ssh_signing_keys`],deleteAttestationsBulk:[`POST /users/{username}/attestations/delete-request`],deleteAttestationsById:[`DELETE /users/{username}/attestations/{attestation_id}`],deleteAttestationsBySubjectDigest:[`DELETE /users/{username}/attestations/digest/{subject_digest}`],deleteEmailForAuthenticated:[`DELETE /user/emails`,{},{renamed:[`users`,`deleteEmailForAuthenticatedUser`]}],deleteEmailForAuthenticatedUser:[`DELETE /user/emails`],deleteGpgKeyForAuthenticated:[`DELETE /user/gpg_keys/{gpg_key_id}`,{},{renamed:[`users`,`deleteGpgKeyForAuthenticatedUser`]}],deleteGpgKeyForAuthenticatedUser:[`DELETE /user/gpg_keys/{gpg_key_id}`],deletePublicSshKeyForAuthenticated:[`DELETE /user/keys/{key_id}`,{},{renamed:[`users`,`deletePublicSshKeyForAuthenticatedUser`]}],deletePublicSshKeyForAuthenticatedUser:[`DELETE /user/keys/{key_id}`],deleteSocialAccountForAuthenticatedUser:[`DELETE /user/social_accounts`],deleteSshSigningKeyForAuthenticatedUser:[`DELETE /user/ssh_signing_keys/{ssh_signing_key_id}`],follow:[`PUT /user/following/{username}`],getAuthenticated:[`GET /user`],getById:[`GET /user/{account_id}`],getByUsername:[`GET /users/{username}`],getContextForUser:[`GET /users/{username}/hovercard`],getGpgKeyForAuthenticated:[`GET /user/gpg_keys/{gpg_key_id}`,{},{renamed:[`users`,`getGpgKeyForAuthenticatedUser`]}],getGpgKeyForAuthenticatedUser:[`GET /user/gpg_keys/{gpg_key_id}`],getPublicSshKeyForAuthenticated:[`GET /user/keys/{key_id}`,{},{renamed:[`users`,`getPublicSshKeyForAuthenticatedUser`]}],getPublicSshKeyForAuthenticatedUser:[`GET /user/keys/{key_id}`],getSshSigningKeyForAuthenticatedUser:[`GET /user/ssh_signing_keys/{ssh_signing_key_id}`],list:[`GET /users`],listAttestations:[`GET /users/{username}/attestations/{subject_digest}`],listAttestationsBulk:[`POST /users/{username}/attestations/bulk-list{?per_page,before,after}`],listBlockedByAuthenticated:[`GET /user/blocks`,{},{renamed:[`users`,`listBlockedByAuthenticatedUser`]}],listBlockedByAuthenticatedUser:[`GET /user/blocks`],listEmailsForAuthenticated:[`GET /user/emails`,{},{renamed:[`users`,`listEmailsForAuthenticatedUser`]}],listEmailsForAuthenticatedUser:[`GET /user/emails`],listFollowedByAuthenticated:[`GET /user/following`,{},{renamed:[`users`,`listFollowedByAuthenticatedUser`]}],listFollowedByAuthenticatedUser:[`GET /user/following`],listFollowersForAuthenticatedUser:[`GET /user/followers`],listFollowersForUser:[`GET /users/{username}/followers`],listFollowingForUser:[`GET /users/{username}/following`],listGpgKeysForAuthenticated:[`GET /user/gpg_keys`,{},{renamed:[`users`,`listGpgKeysForAuthenticatedUser`]}],listGpgKeysForAuthenticatedUser:[`GET /user/gpg_keys`],listGpgKeysForUser:[`GET /users/{username}/gpg_keys`],listPublicEmailsForAuthenticated:[`GET /user/public_emails`,{},{renamed:[`users`,`listPublicEmailsForAuthenticatedUser`]}],listPublicEmailsForAuthenticatedUser:[`GET /user/public_emails`],listPublicKeysForUser:[`GET /users/{username}/keys`],listPublicSshKeysForAuthenticated:[`GET /user/keys`,{},{renamed:[`users`,`listPublicSshKeysForAuthenticatedUser`]}],listPublicSshKeysForAuthenticatedUser:[`GET /user/keys`],listSocialAccountsForAuthenticatedUser:[`GET /user/social_accounts`],listSocialAccountsForUser:[`GET /users/{username}/social_accounts`],listSshSigningKeysForAuthenticatedUser:[`GET /user/ssh_signing_keys`],listSshSigningKeysForUser:[`GET /users/{username}/ssh_signing_keys`],setPrimaryEmailVisibilityForAuthenticated:[`PATCH /user/email/visibility`,{},{renamed:[`users`,`setPrimaryEmailVisibilityForAuthenticatedUser`]}],setPrimaryEmailVisibilityForAuthenticatedUser:[`PATCH /user/email/visibility`],unblock:[`DELETE /user/blocks/{username}`],unfollow:[`DELETE /user/following/{username}`],updateAuthenticated:[`PATCH /user`]}};const G=new Map;for(let[e,t]of Object.entries(ea))for(let[n,r]of Object.entries(t)){let[t,i,a]=r,[o,s]=t.split(/ /),c=Object.assign({method:o,url:s},i);G.has(e)||G.set(e,new Map),G.get(e).set(n,{scope:e,methodName:n,endpointDefaults:c,decorations:a})}const ta={has({scope:e},t){return G.get(e).has(t)},getOwnPropertyDescriptor(e,t){return{value:this.get(e,t),configurable:!0,writable:!0,enumerable:!0}},defineProperty(e,t,n){return Object.defineProperty(e.cache,t,n),!0},deleteProperty(e,t){return delete e.cache[t],!0},ownKeys({scope:e}){return[...G.get(e).keys()]},set(e,t,n){return e.cache[t]=n},get({octokit:e,scope:t,cache:n},r){if(n[r])return n[r];let i=G.get(t).get(r);if(!i)return;let{endpointDefaults:a,decorations:o}=i;return o?n[r]=ra(e,t,r,a,o):n[r]=e.request.defaults(a),n[r]}};function na(e){let t={};for(let n of G.keys())t[n]=new Proxy({octokit:e,scope:n,cache:{}},ta);return t}function ra(e,t,n,r,i){let a=e.request.defaults(r);function o(...r){let o=a.endpoint.merge(...r);if(i.mapToData)return o=Object.assign({},o,{data:o[i.mapToData],[i.mapToData]:void 0}),a(o);if(i.renamed){let[r,a]=i.renamed;e.log.warn(`octokit.${t}.${n}() has been renamed to octokit.${r}.${a}()`)}if(i.deprecated&&e.log.warn(i.deprecated),i.renamedParameters){let o=a.endpoint.merge(...r);for(let[r,a]of Object.entries(i.renamedParameters))r in o&&(e.log.warn(`"${r}" parameter is deprecated for "octokit.${t}.${n}()". Use "${a}" instead`),a in o||(o[a]=o[r]),delete o[r]);return a(o)}return a(...r)}return Object.assign(o,a)}function ia(e){return{rest:na(e)}}ia.VERSION=$i;function aa(e){let t=na(e);return{...t,rest:t}}aa.VERSION=$i;const oa=Gi.plugin(Ki,aa,Qi).defaults({userAgent:`octokit-rest.js/22.0.1`});function sa(e){let t=e?.cause;if(typeof t?.code==`string`)return t.code;let n=e?.code;return typeof n==`string`?n:void 0}const ca=[`CERT`,`SELF_SIGNED`,`SIGNATURE`,`ISSUER`];function la(e,t){let n=sa(e);if(n&&ca.some(e=>n.includes(e)))return{kind:`tls`,message:`Could not verify the TLS certificate for ${t}. If this is a GitHub Enterprise Server with a self-signed or internal-CA certificate, add its CA to your system trust store (macOS Keychain).`};let r=e?.status;return r===401?{kind:`token`,message:`Token invalid for ${t}`}:r===403?{kind:`token`,message:`Token rejected by ${t} — check that it has the repo and read:user scopes, and that it is authorized for SSO if the organization requires it`}:n?{kind:`network`,message:`Could not reach ${t} (${n})`}:{kind:`token`,message:`Authentication failed for ${t}`}}async function ua(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString(`utf8`).trim()}async function da(e,t,n){let{host:r,json:i}=e;W(r);let a=await(n??(()=>fi({message:`Enter PAT:`})))();a||(process.stderr.write(`No token provided
7
- `),process.exit(1));let o=r===`github.com`?void 0:`https://${r}/api/v3`,s=new oa({auth:a,...o?{baseUrl:o}:{}}),c=`unknown`,l,u;try{let{data:e}=await s.users.getAuthenticated();c=e.login,l=e.name??void 0,u=e.email??void 0}catch(e){let t=la(e,r).message;i?process.stdout.write(`${JSON.stringify({type:`error`,message:t})}\n`):process.stderr.write(`${t}\n`),process.exit(1)}await t.set(r,c,a,{gitProtocol:`https`,name:l,email:u}),i?process.stdout.write(`${JSON.stringify({type:`complete`,host:r,login:c})}\n`):process.stderr.write(`✓ PAT stored for ${c} on ${r}\n`)}function fa(e){return new k(`pat`).description(`Store a Personal Access Token`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname (default: workspace origin host)`).option(`--json`,`Output JSON`,!1).option(`--token-stdin`,`Read the token from stdin instead of prompting`,!1).action(async t=>{let n=t.host??nt(process.cwd()),r=t.tokenStdin?ua:void 0;await da({host:n,json:t.json},await e(),r)})}async function pa(e,t,n=cn){let r=n(e);return r.available&&r.token?r.token:(await t.get(e))?.token??null}async function ma(e,t){let{host:n,json:r}=e;W(n);let i=await pa(n,t);i??(process.stderr.write(`Not logged in to ${n}\n`),process.exit(1));let a=n===`github.com`?void 0:`https://${n}/api/v3`,o=new oa({auth:i,...a?{baseUrl:a}:{}}),s=[];for await(let e of o.paginate.iterator(o.repos.listForAuthenticatedUser,{per_page:100,sort:`updated`}))for(let t of e.data)s.push({full_name:t.full_name,clone_url:t.clone_url,private:t.private});if(r)process.stdout.write(`${JSON.stringify({type:`repos`,host:n,repos:s})}\n`);else for(let e of s)process.stdout.write(`${e.full_name} ${e.clone_url}\n`)}function ha(e){return new k(`repos`).description(`List accessible repositories`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname (default: workspace origin host)`).option(`--json`,`Output JSON`,!1).action(async t=>{let n=t.host??nt(process.cwd());await ma({...t,host:n},await e())})}async function ga(e){let{host:t}=e,{touched:n}=await un(t);if(n.length===0){process.stderr.write(`Not signed in to ${t}\n`);return}process.stderr.write(`✓ Signed out from ${t}\n`),n.includes(`keychain`)&&process.stderr.write(` cleared from OS keychain
7
+ `),process.exit(1));let o=r===`github.com`?void 0:`https://${r}/api/v3`,s=new oa({auth:a,...o?{baseUrl:o}:{}}),c=`unknown`,l,u;try{let{data:e}=await s.users.getAuthenticated();c=e.login,l=e.name??void 0,u=e.email??void 0}catch(e){let t=la(e,r).message;i?process.stdout.write(`${JSON.stringify({type:`error`,message:t})}\n`):process.stderr.write(`${t}\n`),process.exit(1)}await t.set(r,c,a,{gitProtocol:`https`,name:l,email:u}),i?process.stdout.write(`${JSON.stringify({type:`complete`,host:r,login:c})}\n`):process.stderr.write(`✓ PAT stored for ${c} on ${r}\n`)}function fa(e){return new k(`pat`).description(`Store a Personal Access Token`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname (default: workspace origin host)`).option(`--json`,`Output JSON`,!1).option(`--token-stdin`,`Read the token from stdin instead of prompting`,!1).action(async t=>{let n=t.host??Te(process.cwd()),r=t.tokenStdin?ua:void 0;await da({host:n,json:t.json},await e(),r)})}async function pa(e,t,n=cn){let r=n(e);return r.available&&r.token?r.token:(await t.get(e))?.token??null}async function ma(e,t){let{host:n,json:r}=e;W(n);let i=await pa(n,t);i??(process.stderr.write(`Not logged in to ${n}\n`),process.exit(1));let a=n===`github.com`?void 0:`https://${n}/api/v3`,o=new oa({auth:i,...a?{baseUrl:a}:{}}),s=[];for await(let e of o.paginate.iterator(o.repos.listForAuthenticatedUser,{per_page:100,sort:`updated`}))for(let t of e.data)s.push({full_name:t.full_name,clone_url:t.clone_url,private:t.private});if(r)process.stdout.write(`${JSON.stringify({type:`repos`,host:n,repos:s})}\n`);else for(let e of s)process.stdout.write(`${e.full_name} ${e.clone_url}\n`)}function ha(e){return new k(`repos`).description(`List accessible repositories`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname (default: workspace origin host)`).option(`--json`,`Output JSON`,!1).action(async t=>{let n=t.host??Te(process.cwd());await ma({...t,host:n},await e())})}async function ga(e){let{host:t}=e,{touched:n}=await un(t);if(n.length===0){process.stderr.write(`Not signed in to ${t}\n`);return}process.stderr.write(`✓ Signed out from ${t}\n`),n.includes(`keychain`)&&process.stderr.write(` cleared from OS keychain
8
8
  `),n.includes(`file`)&&process.stderr.write(` cleared from ~/.ok/auth.yml
9
- `)}function _a(){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??nt(process.cwd());await ga({...e,host:t})})}async function va(e,t,n=cn){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 ya(e,t,n){return{type:`status`,host:e,backend:t,...n}}async function ba(e,t){let{host:n,json:r}=e;W(n);let i=t.backend,a=await va(n,t);a.tier===`none`&&(r?process.stdout.write(`${JSON.stringify(ya(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 oa({auth:a.token,...o?{baseUrl:o}:{}});try{let{data:e}=await s.users.getAuthenticated();r?process.stdout.write(`${JSON.stringify(ya(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=la(e,n);r?process.stdout.write(`${JSON.stringify(ya(n,i,{authenticated:!1,error:t.message}))}\n`):process.stderr.write(`✗ ${t.message}\n`),process.exit(1)}}function xa(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??nt(process.cwd());await ba({...t,host:n},await e())})}function Sa(e){let t=new k(`auth`);t.description(`GitHub authentication management`);let n=e=>sn(void 0,e);return t.addCommand(ui(n)),t.addCommand(xa(n)),t.addCommand(ha(n)),t.addCommand(_a()),t.addCommand(fa(n)),t.addCommand(Kr(n,e)),t}function Ca(){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 Yt({level:`standard`,projectDir:process.cwd(),redact:!0,outputPath:Ut(),logger:Bf()});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&&gr()===`darwin`)try{Fn(`/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 wa(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 Ta(e){let t=e.inspect??(t=>an(e.lockDir,t)),n=e.unlink??(e=>U(e)),r=e.log??(e=>console.log(e)),i=e.error??(e=>console.error(e)),a=wa(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 Ea(e){return new k(`clean`).description(`Prune stale / corrupt open-knowledge lock files (never touches live locks)`).action(()=>{e(),Ta({lockDir:O(process.cwd())}).failed.length>0&&(process.exitCode=1)})}function Da(e){return`credential.helper=!${e.map(fe).join(` `)} auth git-credential`}async function Oa(e,t,n={},r=cn){let i=[`credential.helper=`,Da(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 ka(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 Aa=[[`count`,0,10],[`compress`,10,20],[`receiv`,20,60],[`resolv`,60,100]];function ja(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 Aa)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 Ma(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 Na(e,t=process.env){let n=Ma(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 Pa(e=process.argv,t=process.execPath){let n=e[1];return n?[t,n]:[t]}function Fa(e){return typeof e!=`string`||e.length===0?[`--progress`]:[`--progress`,`-b`,e]}const Ia=he;async function La(e){try{return await e.clone(Fa(e.branch)),{fellBack:!1}}catch(t){if(e.branch!==null&&Ia(t))return e.onFallback(e.branch),await e.clone(Fa(null)),{fellBack:!0};throw t}}function Ra(e,t){return{baseDir:e,config:t,unsafe:{allowUnsafeCredentialHelper:!0,allowUnsafePager:!0,allowUnsafeSshCommand:!0,allowUnsafeAskPass:!0,allowUnsafeEditor:!0}}}function za(e,t,n){return e===`https`&&t===`github.com`&&n}function Ba(e,t){let n=`${t.owner}/${t.name}`;return e===n||e===`${n}.git`?`https://${t.hostname}/${n}`:e}async function Va(e,t,n,r=process.cwd()){let i=nn(e);if(!i)throw Error(`Invalid git URL: ${e}`);let a=Ba(e,i),o=t.dir?z(r,t.dir):z(r,i.name);if(B(o)&&ur(o).length>0)throw Error(`Target directory is not empty: ${o}`);ct();let s=ln(),c=i.protocol===`https`&&i.hostname===`github.com`?await ka(i.owner,i.name):!1,l=za(i.protocol,i.hostname,c)?{tier:`none`,gitConfig:[]}:await Oa(i.hostname,s,{selfCliArgs:Pa()}),u=Na(l),d=Ft(Ra(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(`
9
+ `)}function _a(){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??Te(process.cwd());await ga({...e,host:t})})}async function va(e,t,n=cn){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 ya(e,t,n){return{type:`status`,host:e,backend:t,...n}}async function ba(e,t){let{host:n,json:r}=e;W(n);let i=t.backend,a=await va(n,t);a.tier===`none`&&(r?process.stdout.write(`${JSON.stringify(ya(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 oa({auth:a.token,...o?{baseUrl:o}:{}});try{let{data:e}=await s.users.getAuthenticated();r?process.stdout.write(`${JSON.stringify(ya(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=la(e,n);r?process.stdout.write(`${JSON.stringify(ya(n,i,{authenticated:!1,error:t.message}))}\n`):process.stderr.write(`✗ ${t.message}\n`),process.exit(1)}}function xa(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??Te(process.cwd());await ba({...t,host:n},await e())})}function Sa(e){let t=new k(`auth`);t.description(`GitHub authentication management`);let n=e=>sn(void 0,e);return t.addCommand(ui(n)),t.addCommand(xa(n)),t.addCommand(ha(n)),t.addCommand(_a()),t.addCommand(fa(n)),t.addCommand(Kr(n,e)),t}function Ca(){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 Yt({level:`standard`,projectDir:process.cwd(),redact:!0,outputPath:Ut(),logger:Bf()});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&&gr()===`darwin`)try{Fn(`/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 wa(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 Ta(e){let t=e.inspect??(t=>an(e.lockDir,t)),n=e.unlink??(e=>U(e)),r=e.log??(e=>console.log(e)),i=e.error??(e=>console.error(e)),a=wa(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 Ea(e){return new k(`clean`).description(`Prune stale / corrupt open-knowledge lock files (never touches live locks)`).action(()=>{e(),Ta({lockDir:O(process.cwd())}).failed.length>0&&(process.exitCode=1)})}function Da(e){return`credential.helper=!${e.map(pe).join(` `)} auth git-credential`}async function Oa(e,t,n={},r=cn){let i=[`credential.helper=`,Da(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 ka(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 Aa=[[`count`,0,10],[`compress`,10,20],[`receiv`,20,60],[`resolv`,60,100]];function ja(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 Aa)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 Ma(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 Na(e,t=process.env){let n=Ma(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 Pa(e=process.argv,t=process.execPath){let n=e[1];return n?[t,n]:[t]}function Fa(e){return typeof e!=`string`||e.length===0?[`--progress`]:[`--progress`,`-b`,e]}const Ia=ge;async function La(e){try{return await e.clone(Fa(e.branch)),{fellBack:!1}}catch(t){if(e.branch!==null&&Ia(t))return e.onFallback(e.branch),await e.clone(Fa(null)),{fellBack:!0};throw t}}function Ra(e,t){return{baseDir:e,config:t,unsafe:{allowUnsafeCredentialHelper:!0,allowUnsafePager:!0,allowUnsafeSshCommand:!0,allowUnsafeAskPass:!0,allowUnsafeEditor:!0}}}function za(e,t,n){return e===`https`&&t===`github.com`&&n}function Ba(e,t){let n=`${t.owner}/${t.name}`;return e===n||e===`${n}.git`?`https://${t.hostname}/${n}`:e}async function Va(e,t,n,r=process.cwd()){let i=nn(e);if(!i)throw Error(`Invalid git URL: ${e}`);let a=Ba(e,i),o=t.dir?z(r,t.dir):z(r,i.name);if(B(o)&&ur(o).length>0)throw Error(`Target directory is not empty: ${o}`);ft();let s=ln(),c=i.protocol===`https`&&i.hostname===`github.com`?await ka(i.owner,i.name):!1,l=za(i.protocol,i.hostname,c)?{tier:`none`,gitConfig:[]}:await Oa(i.hostname,s,{selfCliArgs:Pa()}),u=Na(l),d=Ft(Ra(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=ja(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 La({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-D38fj6bo.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{Ha(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 Ha(e){let t=Sn(e,[`.ok/`]);return t.kind===`no-exclude`?`no-exclude`:t.kind===`refused-tracked`?`already-present`:t.appended.length>0?`appended`:`already-present`}const Ua=/^[A-Za-z0-9._/:@-]+$/;function Wa(e){return Ua.test(e)?e:fe(e)}function Ga(e,t){let n=typeof t==`string`&&t.length>0?` -b ${Wa(t)}`:``;return`ok clone ${Wa(e)}${n}`}function Ka(e){let t=me(e.error);if(t.kind!==`auth`)return null;if(ue(t)){let t=Ga(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-DDwncQha.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{Ha(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 Ha(e){let t=Sn(e,[`.ok/`]);return t.kind===`no-exclude`?`no-exclude`:t.kind===`refused-tracked`?`already-present`:t.appended.length>0?`appended`:`already-present`}const Ua=/^[A-Za-z0-9._/:@-]+$/;function Wa(e){return Ua.test(e)?e:pe(e)}function Ga(e,t){let n=typeof t==`string`&&t.length>0?` -b ${Wa(t)}`:``;return`ok clone ${Wa(e)}${n}`}function Ka(e){let t=he(e.error);if(t.kind!==`auth`)return null;if(de(t)){let t=Ga(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: ${Ga(e.url,e.branch)}`].join(`
13
- `)}function qa(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=Ka({error:e.error,url:e.url,branch:e.branch,principal:e.principal});e.printStderr(`${n??`✗ ${t}`}\n`)}async function Ja(e,t){let n=(await e.get(t))?.login;return n&&n!==`unknown`?n:null}async function Ya(e){let t=me(e.error),n=null;if(!e.json&&t.kind===`auth`&&t.subclass===`403`){let t=nn(e.url);t&&(n=await(e.resolvePrincipal??(e=>Ja(ln(),e)))(t.hostname))}qa({error:e.error,url:e.url,branch:e.branch,json:e.json,principal:n,emit:e.emit,printStderr:e.printStderr})}function Xa(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 Va(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-DLsDkcBf.mjs`);await t(e).parseAsync([],{from:`user`})}}catch(e){if(e instanceof Ce||e instanceof Qe){r.json?K(!0,{type:`error`,message:e.message}):process.stderr.write(`${e.message}\n`),process.exitCode=78;return}await Ya({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 Za=c();const Qa=[[`sync`],[`persistence`,`debounceMs`],[`persistence`,`maxDebounceMs`],[`server`,`port`],...l.map(e=>e.path)];function $a(e){return jt({absPath:Mt(`project-local`,e),sideline:!1}).diagnostics}function eo(e={}){let t=e.log??(e=>console.error(e)),n=e.error??(e=>console.error(e)),r=e.loadConfigFn??Vn;try{let{sources:n,diagnostics:i,sidelined:a}=r(e.cwd),o=(e.readProjectLocalFn??$a)(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 to(e){let t=(0,Za.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 Qa)t.hasIn(e)&&n.push(e.join(`.`));return n}function no(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ro(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=no(i)?i:{};e[r]=a,e=a}e[n[n.length-1]]=null}return t}function io(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 ao(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??Pt,s=io(r).map(t=>({scope:t,absPath:Mt(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=to(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:ro(Qa.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 oo=`project | project-local | user | all`,so=new Set(Object.keys({project:!0,"project-local":!0,user:!0,both:!0,all:!0}));function co(e){return e!==`config`}function lo(){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(()=>{eo({}).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: ${oo}`,`all`).option(`--dry-run`,`Preview without writing`,!1).action(async e=>{let t=String(e.scope);if(!so.has(t)){console.error(`Invalid --scope: ${t}. Expected: ${oo}`),process.exitCode=2;return}(await ao({scope:t,dryRun:e.dryRun})).ok||(process.exitCode=1)}),e}const uo=[` 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`],fo=A(` Open the Claude Desktop App, then: ${F(`Customize → Skills → + → Create skill → Upload skill`)} → pick the file.`);function po(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(fo),t.join(`
13
+ `)}function qa(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=Ka({error:e.error,url:e.url,branch:e.branch,principal:e.principal});e.printStderr(`${n??`✗ ${t}`}\n`)}async function Ja(e,t){let n=(await e.get(t))?.login;return n&&n!==`unknown`?n:null}async function Ya(e){let t=he(e.error),n=null;if(!e.json&&t.kind===`auth`&&t.subclass===`403`){let t=nn(e.url);t&&(n=await(e.resolvePrincipal??(e=>Ja(ln(),e)))(t.hostname))}qa({error:e.error,url:e.url,branch:e.branch,json:e.json,principal:n,emit:e.emit,printStderr:e.printStderr})}function Xa(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 Va(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-BYY0acPS.mjs`);await t(e).parseAsync([],{from:`user`})}}catch(e){if(e instanceof Se||e instanceof nt){r.json?K(!0,{type:`error`,message:e.message}):process.stderr.write(`${e.message}\n`),process.exitCode=78;return}await Ya({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 Za=c();const Qa=[[`sync`],[`persistence`,`debounceMs`],[`persistence`,`maxDebounceMs`],[`server`,`port`],...l.map(e=>e.path)];function $a(e){return jt({absPath:Mt(`project-local`,e),sideline:!1}).diagnostics}function eo(e={}){let t=e.log??(e=>console.error(e)),n=e.error??(e=>console.error(e)),r=e.loadConfigFn??Vn;try{let{sources:n,diagnostics:i,sidelined:a}=r(e.cwd),o=(e.readProjectLocalFn??$a)(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 to(e){let t=(0,Za.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 Qa)t.hasIn(e)&&n.push(e.join(`.`));return n}function no(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ro(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=no(i)?i:{};e[r]=a,e=a}e[n[n.length-1]]=null}return t}function io(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 ao(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??Pt,s=io(r).map(t=>({scope:t,absPath:Mt(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=to(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:ro(Qa.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 oo=`project | project-local | user | all`,so=new Set(Object.keys({project:!0,"project-local":!0,user:!0,both:!0,all:!0}));function co(e){return e!==`config`}function lo(){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(()=>{eo({}).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: ${oo}`,`all`).option(`--dry-run`,`Preview without writing`,!1).action(async e=>{let t=String(e.scope);if(!so.has(t)){console.error(`Invalid --scope: ${t}. Expected: ${oo}`),process.exitCode=2;return}(await ao({scope:t,dryRun:e.dryRun})).ok||(process.exitCode=1)}),e}const uo=[` 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`],fo=A(` Open the Claude Desktop App, then: ${F(`Customize → Skills → + → Create skill → Upload skill`)} → pick the file.`);function po(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(fo),t.join(`
14
14
  `)}function mo(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 ho(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:`),...uo,j(` If Claude Desktop didn't open, open it and start at step 1. The file is at ${e.outputPath}`)].join(`
16
- `)}function go(e){return`${N(`Error:`)} ${e.buildError??`unknown build failure`}`}async function _o(e={}){let t=await ft(e);return t.status===`failed`?{...t,message:go(t),exitCode:1}:t.status===`skip-current`?{...t,message:mo(t),exitCode:0}:t.status===`installed`?{...t,message:ho(t),exitCode:0}:{...t,message:po(t),exitCode:0}}function vo(){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 _o({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 yo(e,t){let n=wr({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 bo(e={}){let t=e.productName??`OpenKnowledge`;return L(Ht(e),t)}function xo(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 So(e){let t=L(e,`state.json`);if(!B(t))return[];let n;try{n=JSON.parse(V(t,`utf-8`))}catch{return[]}return xo(n)??[]}function Co(e){let t=L(e,`state.json`);if(!B(t))return!1;try{return xo(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 wo(e){return $n===`/`?e:e.split($n).join(`/`)}function To(e,t,n=`This project`){let r=[];r.push({kind:`stop-server`,group:n,label:`Stop the project server (if running)`,lockDir:O(e)});let i=new Set;for(let a of zt){let o=Vt[a];if(!o.projectConfigPath)continue;let s=o.projectConfigPath(e);i.add(wo(R(e,s))),r.push({kind:`mcp-entry`,group:n,label:`Remove OK's MCP entry from ${o.label} (${wo(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([...On(e),...le]);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:Re(e)})}catch{}return r}function Eo(e,t){return{scope:`deinit`,ops:To(e,t)}}function Do(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(...ko(a,t));for(let e of zt){let n=Vt[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 Un(t))c.push({kind:`remove-path`,group:`Skill bundles`,label:`Remove ${q(e.path,t)}`,path:e.path});c.push(...Ao(t,n,e.env));for(let e of o)c.push(...To(e,t,`Project: ${Zn(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 Oo(e){return[L(e,`.zshrc`),L(e,`.bash_profile`),L(e,`.config`,`fish`,`conf.d`,`open-knowledge.fish`)]}function ko(e,t){let n=[],r=new Set([...Oo(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 Ao(e,t,n){if(t!==`darwin`)return[];let r={home:e,platformName:t,env:n},i=bo(r),a=bo({...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 jo(e,t={}){let n=t.clearToken??un,r=t.clearEmbeddingsKey??pt,i=t.stopServer??(e=>{let t=Zt({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 Mo(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 Mo(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}=Qt(V(e.rcFile,`utf-8`));return n?r?(pr(e.rcFile,{force:!0}),{op:e,status:`removed`,detail:`file removed (was OK-owned)`}):(Nt(e.rcFile,t,{mode:Tn(e.rcFile)}),{op:e,status:`removed`}):{op:e,status:`not-present`}}case`extra-symlink`:return Xt(e.path,e.target)?(U(e.path),{op:e,status:`removed`}):{op:e,status:`not-present`};case`mcp-entry`:{let t=tn(Vt[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=Wn(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(mn(e.projectRoot).length===0)return{op:e,status:`not-present`};let t=_n(e.projectRoot,On(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 No(e)}}function No(e){if(e.requireOurState&&!Co(e.path))return{op:e,status:`skipped`,detail:`not verified as OpenKnowledge — left untouched`};e.containWithin&&Bt(e.path,e.containWithin);let t;try{t=or(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 ur(e.path))t.has(r)||(pr(L(e.path,r),{recursive:!0,force:!0}),n=!0);return{op:e,status:n?`removed`:`not-present`}}return pr(e.path,{recursive:!0,force:!0}),{op:e,status:`removed`}}function Po(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 Fo(e){if(e.ops.length===0)return j(`Nothing to remove.`);let t=[];for(let[n,r]of Po(e.ops)){t.length>0&&t.push(``),t.push(F(`${n}:`));for(let e of r)t.push(` ${P(`-`)} ${e.label}`)}return t.join(`
16
+ `)}function go(e){return`${N(`Error:`)} ${e.buildError??`unknown build failure`}`}async function _o(e={}){let t=await rt(e);return t.status===`failed`?{...t,message:go(t),exitCode:1}:t.status===`skip-current`?{...t,message:mo(t),exitCode:0}:t.status===`installed`?{...t,message:ho(t),exitCode:0}:{...t,message:po(t),exitCode:0}}function vo(){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 _o({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 yo(e,t){let n=wr({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 bo(e={}){let t=e.productName??`OpenKnowledge`;return L(Ht(e),t)}function xo(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 So(e){let t=L(e,`state.json`);if(!B(t))return[];let n;try{n=JSON.parse(V(t,`utf-8`))}catch{return[]}return xo(n)??[]}function Co(e){let t=L(e,`state.json`);if(!B(t))return!1;try{return xo(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 wo(e){return $n===`/`?e:e.split($n).join(`/`)}function To(e,t,n=`This project`){let r=[];r.push({kind:`stop-server`,group:n,label:`Stop the project server (if running)`,lockDir:O(e)});let i=new Set;for(let a of zt){let o=Vt[a];if(!o.projectConfigPath)continue;let s=o.projectConfigPath(e);i.add(wo(R(e,s))),r.push({kind:`mcp-entry`,group:n,label:`Remove OK's MCP entry from ${o.label} (${wo(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([...On(e),...ue]);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:Ve(e)})}catch{}return r}function Eo(e,t){return{scope:`deinit`,ops:To(e,t)}}function Do(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(...ko(a,t));for(let e of zt){let n=Vt[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 Un(t))c.push({kind:`remove-path`,group:`Skill bundles`,label:`Remove ${q(e.path,t)}`,path:e.path});c.push(...Ao(t,n,e.env));for(let e of o)c.push(...To(e,t,`Project: ${Zn(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 Oo(e){return[L(e,`.zshrc`),L(e,`.bash_profile`),L(e,`.config`,`fish`,`conf.d`,`open-knowledge.fish`)]}function ko(e,t){let n=[],r=new Set([...Oo(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 Ao(e,t,n){if(t!==`darwin`)return[];let r={home:e,platformName:t,env:n},i=bo(r),a=bo({...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 jo(e,t={}){let n=t.clearToken??un,r=t.clearEmbeddingsKey??tt,i=t.stopServer??(e=>{let t=Zt({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 Mo(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 Mo(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}=Qt(V(e.rcFile,`utf-8`));return n?r?(pr(e.rcFile,{force:!0}),{op:e,status:`removed`,detail:`file removed (was OK-owned)`}):(Nt(e.rcFile,t,{mode:Tn(e.rcFile)}),{op:e,status:`removed`}):{op:e,status:`not-present`}}case`extra-symlink`:return Xt(e.path,e.target)?(U(e.path),{op:e,status:`removed`}):{op:e,status:`not-present`};case`mcp-entry`:{let t=tn(Vt[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=Wn(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(mn(e.projectRoot).length===0)return{op:e,status:`not-present`};let t=_n(e.projectRoot,On(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 No(e)}}function No(e){if(e.requireOurState&&!Co(e.path))return{op:e,status:`skipped`,detail:`not verified as OpenKnowledge — left untouched`};e.containWithin&&Bt(e.path,e.containWithin);let t;try{t=or(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 ur(e.path))t.has(r)||(pr(L(e.path,r),{recursive:!0,force:!0}),n=!0);return{op:e,status:n?`removed`:`not-present`}}return pr(e.path,{recursive:!0,force:!0}),{op:e,status:`removed`}}function Po(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 Fo(e){if(e.ops.length===0)return j(`Nothing to remove.`);let t=[];for(let[n,r]of Po(e.ops)){t.length>0&&t.push(``),t.push(F(`${n}:`));for(let e of r)t.push(` ${P(`-`)} ${e.label}`)}return t.join(`
17
17
  `)}function Io(e){let t=e.removed.length,n=e.failed.length,r=e.results.filter(e=>e.status===`not-present`).length,i=e.results.filter(e=>e.status===`skipped`),a=[];a.push(n>0?P(`Removed ${t} item${t===1?``:`s`}, ${n} could not be removed.`):M(`✓ Removed ${t} item${t===1?``:`s`}.`)),r>0&&a.push(j(` ${r} already absent.`));for(let e of i)a.push(` ${P(`·`)} Left in place: ${e.op.label}${e.detail?` — ${j(e.detail)}`:``}`);if(n>0){a.push(``),a.push(N(`Could not remove:`));for(let t of e.failed)a.push(` ${N(`✗`)} ${t.op.label}${t.detail?` — ${t.detail}`:``}`)}return a.join(`
18
- `)}function Lo(e){return{scope:e.scope,mode:`dry-run`,planned:e.ops.map(e=>({kind:e.kind,label:e.label}))}}function Ro(e,t){return{scope:e,mode:`applied`,removed:t.removed.map(e=>({kind:e.op.kind,label:e.op.label})),skipped:t.results.filter(e=>e.status===`skipped`).map(e=>({kind:e.op.kind,label:e.op.label,detail:e.detail})),failed:t.failed.map(e=>({kind:e.op.kind,label:e.op.label,detail:e.detail}))}}async function zo(e={}){let t=z(e.cwd??process.cwd()),n=e.home??hr();if(!B(L(t,`.ok`)))return{status:`no-op`,message:j(`No OpenKnowledge project found at ${t}. Nothing to remove.`),exitCode:0};let r=Eo(t,n);if(e.dryRun)return{status:`dry-run`,message:e.json?JSON.stringify(Lo(r),null,2):`${F(`Would remove (dry-run — no changes made):`)}\n\n${Fo(r)}`,exitCode:0};if(e.json&&!e.yes)return{status:`failed`,message:`${N(`Error:`)} --json requires --yes (or --dry-run) so there is no interactive prompt.`,exitCode:1};if(!e.yes&&(process.stderr.write(`${F(`Remove OpenKnowledge from ${t}:`)}\n\n${Fo(r)}\n\n`),!await yo(`${F(`Remove these?`)} ${j(`[y/N] `)}`,e.confirmStream)))return{status:`cancelled`,message:j(`Cancelled.`),exitCode:0};let i=await jo(r,e.runRemovalDeps);return{status:i.failed.length>0?`failed`:`done`,message:e.json?JSON.stringify(Ro(`deinit`,i),null,2):Io(i),exitCode:+(i.failed.length>0)}}function Bo(){return new k(`deinit`).description("Remove OpenKnowledge from this project (its .ok/, editor MCP entries, git-exclude lines, shadow repo) while leaving your markdown content untouched. Re-run `ok start` to re-scaffold.").argument(`[path]`,`Project directory (defaults to the current project)`).option(`-y, --yes`,`Skip the confirmation prompt`).option(`--dry-run`,`Print the removal plan and exit without changing anything`).option(`--json`,`Emit a machine-readable plan/outcome (requires --yes or --dry-run)`).action(async(e,t)=>{let n=await zo({cwd:e??process.cwd(),yes:t.yes,dryRun:t.dryRun,json:t.json});process.stdout.write(`${n.message}\n`),n.exitCode!==0&&(process.exitCode=n.exitCode)})}var J=e(on(),1);function Vo(){let e=Xn(`bun`,[`--version`],D({encoding:`utf-8`,timeout:5e3,env:{...process.env,LANG:`C`,LC_ALL:`C`}}));return e.error?{ok:!1,error:e.error.message}:e.signal===`SIGTERM`?{ok:!1,error:`probe timed out`}:e.status===0?{ok:!0,version:e.stdout.trim()}:{ok:!1,error:e.stderr?.trim()||`exit code ${e.status}`}}function Ho(e={}){let t=e.probe??Vo;return{name:`bun`,run:async()=>{let e=t();return e.ok?{name:`bun`,status:`pass`,summary:`bun ${e.version}`}:{name:`bun`,status:`fail`,summary:`bun not found on PATH`,remediation:`Install Bun: https://bun.sh/docs/installation`,detail:e.error}}}}function Uo(e={}){let t=e.loader??Vn;return{name:`config-yaml`,run:async e=>{if(!B(z(e.cwd,`.ok`,`config.yml`)))return{name:`config-yaml`,status:`warn`,summary:`.ok/${Nn} not found (project not initialized)`,remediation:"Run `ok init` to scaffold the project."};try{let{config:n,sources:r}=t(e.cwd);return{name:`config-yaml`,status:`pass`,summary:`parses; content.dir = ${n.content.dir}`,detail:`sources: ${r.join(`, `)}`}}catch(e){let t=e instanceof Error?e.message:String(e);return{name:`config-yaml`,status:`fail`,summary:`.ok/${Nn} failed to parse`,detail:t}}}}}function Wo(e){try{return nr(e,ar.W_OK),{writable:!0}}catch(e){return{writable:!1,reason:e instanceof Error?e.message:String(e)}}}function Go(e={}){let t=e.loader??Vn,n=e.probeWritable??Wo;return{name:`content-dir`,run:async e=>{if(!B(z(e.cwd,`.ok`,`config.yml`)))return{name:`content-dir`,status:`warn`,summary:`project not initialized`,remediation:"Run `ok init` to scaffold the project."};let r;try{let{config:n}=t(e.cwd);r=z(e.cwd,n.content.dir)}catch(e){return{name:`content-dir`,status:`fail`,summary:`content.dir unresolved (config invalid)`,detail:e instanceof Error?e.message:String(e)}}if(!B(r))return{name:`content-dir`,status:`fail`,summary:`content.dir does not exist: ${r}`,remediation:`Create the directory or fix \`content.dir\` in .ok/${Nn}.`};if(!H(r).isDirectory())return{name:`content-dir`,status:`fail`,summary:`content.dir is not a directory: ${r}`};let i=n(r);return i.writable?{name:`content-dir`,status:`pass`,summary:`${r} (writable)`}:{name:`content-dir`,status:`fail`,summary:`content.dir is not writable: ${r}`,detail:i.reason}}}}function Ko(e={}){let t=e.assert??ct;return{name:`git`,run:async()=>{try{let e=t();return{name:`git`,status:`pass`,summary:`git ${e.version} (${e.source} — ${e.resolvedPath})`}}catch(e){if(e instanceof Ce)return{name:`git`,status:`fail`,summary:`git not found`,remediation:e.guidance.options.map(e=>`${e.label}: ${e.command}`).join(` / `),detail:e.message};if(e instanceof Qe)return{name:`git`,status:`fail`,summary:`git ${e.detected} is older than required ${e.required}`,remediation:e.guidance.options.map(e=>`${e.label}: ${e.command}`).join(` / `),detail:e.message};throw e}}}}function qo(e){let t=Xn(`codesign`,[`--verify`,`--deep`,`--strict`,e],{encoding:`utf-8`,timeout:5e3,env:{...process.env,LANG:`C`,LC_ALL:`C`}});return t.error?{ok:!1,stderr:t.error.message}:t.signal===`SIGTERM`?{ok:!1,stderr:`codesign probe timed out`}:{ok:t.status===0,stderr:(t.stderr??``).trim()}}function Jo(e={}){let t=e.platform??process.platform,n=e.execPath??process.execPath,r=e.codesignVerify??qo;return{name:`macos-codesig`,run:async()=>{if(t!==`darwin`)return{name:`macos-codesig`,status:`pass`,summary:`skipped on ${t} (macOS-only check)`};let e=n.indexOf(`/Contents/MacOS/`);if(e===-1)return{name:`macos-codesig`,status:`pass`,summary:`dev mode (no app bundle)`};let i=n.slice(0,e);if(i.startsWith(`/private/var/folders/`))return{name:`macos-codesig`,status:`fail`,summary:`app is running translocated (quarantine sandbox)`,remediation:`Drag OpenKnowledge.app to /Applications/ and re-launch.`,detail:`bundlePath: ${i}`};let a=r(i);return a.ok?{name:`macos-codesig`,status:`pass`,summary:`signed bundle at ${i}`}:{name:`macos-codesig`,status:`fail`,summary:`codesign --verify failed`,remediation:`Re-download OpenKnowledge from the official releases page.`,detail:`bundlePath: ${i}\n${a.stderr}`}}}}const Yo=[`git`,`bun`,`config-yaml`,`content-dir`,`server-lock`,`shadow-repo`,`shadow-health`,`macos-codesig`];function Xo(e){return Yo.includes(e)}async function Zo(e,t,n={}){let r=n.timeoutMs??5e3,i,a=Math.round(r/1e3);try{let n=new Promise(t=>{i=setTimeout(()=>{t({name:e.name,status:`fail`,summary:`check timed out after ${a}s`})},r)}),o=e.run(t),s=await Promise.race([o,n]);return o.catch(()=>{}),s}catch(t){let n=t instanceof Error?t.message:String(t);return{name:e.name,status:`fail`,summary:`check crashed: ${n}`}}finally{i!==void 0&&clearTimeout(i)}}async function Qo(e,t,n={}){let r=[];for(let i of e)r.push(await Zo(i,t,n));return r}function $o(e={}){let t=e.inspect??an;return{name:`server-lock`,run:async e=>{let n=O(e.cwd);if(!B(n))return{name:`server-lock`,status:`pass`,summary:"no server lock (no `.ok/local/` yet)"};let r=t(n,`server`);switch(r.status){case`missing`:return{name:`server-lock`,status:`pass`,summary:`no server holding the lock`};case`alive`:return{name:`server-lock`,status:`fail`,summary:`server lock held by pid ${r.lock.pid} on this host`,remediation:"Stop the other OpenKnowledge process or run `ok stop`.",detail:`lockPath: ${r.lockPath}; port: ${r.lock.port}; started: ${r.lock.startedAt}`};case`foreign-host`:return{name:`server-lock`,status:`warn`,summary:`lock claimed by ${r.lock.hostname} (foreign host)`,remediation:`Run \`ok clean\` to prune the stale lock at ${z(n,`server.lock`)}.`,detail:`lockPath: ${r.lockPath}; pid: ${r.lock.pid}`};case`dead-pid`:return{name:`server-lock`,status:`warn`,summary:`stale lock for non-existent pid ${r.lock.pid}`,remediation:"Run `ok clean` to prune.",detail:`lockPath: ${r.lockPath}`};case`corrupt`:return{name:`server-lock`,status:`warn`,summary:`server.lock is corrupt (unparseable or invalid pid)`,remediation:`Delete ${r.lockPath} and rerun.`};default:return r}}}}async function es(e,t){let n={gitDir:e,workTree:t},r=await Pe(n),i=await Oe(n),a=await Ee(n,Date.now()-18e5),o=je(n),s=null;for(let t of[`objects/info/commit-graph`,`objects/info/commit-graphs`]){let n=z(e,t);if(B(n))try{s=Math.max(s??0,H(n).mtimeMs)}catch{}}let c=null;try{let n=Ft({baseDir:t,timeout:{block:4e3}}).env({GIT_DIR:e}),r=(await n.raw(`for-each-ref`,`--sort=-creatordate`,`--format=%(objectname)`,`refs/checkpoints/`)).trim().split(`
19
- `).filter(Boolean).slice(0,25);for(let e of r){let t=(await n.raw(`log`,`-1`,`--format=%cI%x00%B`,e)).trim(),r=t.indexOf(`\0`);if(r<0)continue;let i=t.slice(0,r);if(E(t.slice(r+1))?.kind===`auto-consolidation`){let e=Date.parse(i);Number.isFinite(e)&&(c=e);break}}}catch{}return{looseObjects:r.looseObjects,packfiles:r.packfiles,wipWidth:i,deadChains:a,gcLogLatch:o,lastPackedAtMs:s,lastConsolidationAtMs:c}}function ts(e){if(e===null)return`never`;let t=Date.now()-e,n=t/(1440*60*1e3);if(n>=1)return`${Math.round(n)}d ago`;let r=t/(3600*1e3);return r>=1?`${Math.round(r)}h ago`:`${Math.max(0,Math.round(t/6e4))}m ago`}function ns(e={}){let t=e.resolveDir??Re,n=e.readFacts??es;return{name:`shadow-health`,run:async e=>{if(!B(z(e.cwd,`.git`)))return{name:`shadow-health`,status:`warn`,summary:`no .git/ at project root (shadow repo not initialized)`,remediation:"Run `ok start` once to initialize the shadow repo."};let r;try{r=t(e.cwd)}catch(e){return{name:`shadow-health`,status:`warn`,summary:`cannot resolve shadow gitdir: ${e instanceof Error?e.message:String(e)}`}}if(!B(r))return{name:`shadow-health`,status:`warn`,summary:`shadow repo not yet initialized`,remediation:"Run `ok start` once to initialize the shadow repo."};let i=await n(r,e.cwd),a=[];i.gcLogLatch&&a.push(`gc.log latch present (auto-packing disabled until it self-expires)`),i.looseObjects>2e3?a.push(`${i.looseObjects} loose objects (unpacked)`):i.packfiles===0&&i.looseObjects>512&&a.push(`${i.looseObjects} loose objects, never packed`),i.deadChains>5&&a.push(`${i.deadChains} dead chains unfolded (auto-consolidation not keeping up)`),i.wipWidth>20&&a.push(`${i.wipWidth} WIP refs (version-journal width high)`);let o=[`loose objects: ${i.looseObjects}`,`packfiles: ${i.packfiles}`,`WIP refs: ${i.wipWidth}`,`dead chains: ${i.deadChains}`,`gc.log latch: ${i.gcLogLatch?`present`:`none`}`,`last packed: ${ts(i.lastPackedAtMs)}`,`last fold: ${ts(i.lastConsolidationAtMs)}`].join(`, `);return a.length>0?{name:`shadow-health`,status:`warn`,summary:`history may be slow: ${a.join(`; `)}`,remediation:`Packing and journal cleanup run automatically on the next server start and during use. If this persists, check the server logs.`,detail:o}:{name:`shadow-health`,status:`pass`,summary:`${i.looseObjects} loose, ${i.packfiles} packs, ${i.wipWidth} WIP refs`,detail:o}}}}function rs(e={}){let t=e.resolve??Re;return{name:`shadow-repo`,run:async e=>{if(!B(z(e.cwd,`.git`)))return{name:`shadow-repo`,status:`warn`,summary:`no .git/ at project root (shadow repo not initialized)`,remediation:"Run `ok start` once to initialize the shadow repo."};let n;try{n=t(e.cwd)}catch(e){if(e instanceof qe||e instanceof Dt)return{name:`shadow-repo`,status:`fail`,summary:`cannot resolve shadow gitdir: ${e.message}`};throw e}if(!B(n))return{name:`shadow-repo`,status:`warn`,summary:`shadow repo at ${n} not yet initialized`,remediation:"Run `ok start` once to initialize the shadow repo."};let r=z(n,`HEAD`);if(!B(r))return{name:`shadow-repo`,status:`fail`,summary:`shadow repo at ${n} is missing HEAD`};let i;try{i=V(r,`utf-8`).trim()}catch(e){return{name:`shadow-repo`,status:`fail`,summary:`cannot read shadow HEAD: ${e instanceof Error?e.message:String(e)}`}}return{name:`shadow-repo`,status:`pass`,summary:`${n} (HEAD: ${i})`}}}}function is(){return[Ko(),Ho(),Uo(),Go(),$o(),rs(),ns(),Jo()]}function as(e){switch(e){case`pass`:return J.default.green(`✓`);case`warn`:return J.default.yellow(`!`);case`fail`:return J.default.red(`✗`)}}function os(e,t){let n=[`[${as(e.status)}] ${e.name}: ${e.summary}`];if(e.remediation!==void 0&&e.status!==`pass`&&n.push(` → ${e.remediation}`),t&&e.detail!==void 0)for(let t of e.detail.split(`
18
+ `)}function Lo(e){return{scope:e.scope,mode:`dry-run`,planned:e.ops.map(e=>({kind:e.kind,label:e.label}))}}function Ro(e,t){return{scope:e,mode:`applied`,removed:t.removed.map(e=>({kind:e.op.kind,label:e.op.label})),skipped:t.results.filter(e=>e.status===`skipped`).map(e=>({kind:e.op.kind,label:e.op.label,detail:e.detail})),failed:t.failed.map(e=>({kind:e.op.kind,label:e.op.label,detail:e.detail}))}}async function zo(e={}){let t=z(e.cwd??process.cwd()),n=e.home??hr();if(!B(L(t,`.ok`)))return{status:`no-op`,message:j(`No OpenKnowledge project found at ${t}. Nothing to remove.`),exitCode:0};let r=Eo(t,n);if(e.dryRun)return{status:`dry-run`,message:e.json?JSON.stringify(Lo(r),null,2):`${F(`Would remove (dry-run — no changes made):`)}\n\n${Fo(r)}`,exitCode:0};if(e.json&&!e.yes)return{status:`failed`,message:`${N(`Error:`)} --json requires --yes (or --dry-run) so there is no interactive prompt.`,exitCode:1};if(!e.yes&&(process.stderr.write(`${F(`Remove OpenKnowledge from ${t}:`)}\n\n${Fo(r)}\n\n`),!await yo(`${F(`Remove these?`)} ${j(`[y/N] `)}`,e.confirmStream)))return{status:`cancelled`,message:j(`Cancelled.`),exitCode:0};let i=await jo(r,e.runRemovalDeps);return{status:i.failed.length>0?`failed`:`done`,message:e.json?JSON.stringify(Ro(`deinit`,i),null,2):Io(i),exitCode:+(i.failed.length>0)}}function Bo(){return new k(`deinit`).description("Remove OpenKnowledge from this project (its .ok/, editor MCP entries, git-exclude lines, shadow repo) while leaving your markdown content untouched. Re-run `ok start` to re-scaffold.").argument(`[path]`,`Project directory (defaults to the current project)`).option(`-y, --yes`,`Skip the confirmation prompt`).option(`--dry-run`,`Print the removal plan and exit without changing anything`).option(`--json`,`Emit a machine-readable plan/outcome (requires --yes or --dry-run)`).action(async(e,t)=>{let n=await zo({cwd:e??process.cwd(),yes:t.yes,dryRun:t.dryRun,json:t.json});process.stdout.write(`${n.message}\n`),n.exitCode!==0&&(process.exitCode=n.exitCode)})}var J=e(on(),1);function Vo(){let e=Xn(`bun`,[`--version`],D({encoding:`utf-8`,timeout:5e3,env:{...process.env,LANG:`C`,LC_ALL:`C`}}));return e.error?{ok:!1,error:e.error.message}:e.signal===`SIGTERM`?{ok:!1,error:`probe timed out`}:e.status===0?{ok:!0,version:e.stdout.trim()}:{ok:!1,error:e.stderr?.trim()||`exit code ${e.status}`}}function Ho(e={}){let t=e.probe??Vo;return{name:`bun`,run:async()=>{let e=t();return e.ok?{name:`bun`,status:`pass`,summary:`bun ${e.version}`}:{name:`bun`,status:`fail`,summary:`bun not found on PATH`,remediation:`Install Bun: https://bun.sh/docs/installation`,detail:e.error}}}}function Uo(e={}){let t=e.loader??Vn;return{name:`config-yaml`,run:async e=>{if(!B(z(e.cwd,`.ok`,`config.yml`)))return{name:`config-yaml`,status:`warn`,summary:`.ok/${Nn} not found (project not initialized)`,remediation:"Run `ok init` to scaffold the project."};try{let{config:n,sources:r}=t(e.cwd);return{name:`config-yaml`,status:`pass`,summary:`parses; content.dir = ${n.content.dir}`,detail:`sources: ${r.join(`, `)}`}}catch(e){let t=e instanceof Error?e.message:String(e);return{name:`config-yaml`,status:`fail`,summary:`.ok/${Nn} failed to parse`,detail:t}}}}}function Wo(e){try{return nr(e,ar.W_OK),{writable:!0}}catch(e){return{writable:!1,reason:e instanceof Error?e.message:String(e)}}}function Go(e={}){let t=e.loader??Vn,n=e.probeWritable??Wo;return{name:`content-dir`,run:async e=>{if(!B(z(e.cwd,`.ok`,`config.yml`)))return{name:`content-dir`,status:`warn`,summary:`project not initialized`,remediation:"Run `ok init` to scaffold the project."};let r;try{let{config:n}=t(e.cwd);r=z(e.cwd,n.content.dir)}catch(e){return{name:`content-dir`,status:`fail`,summary:`content.dir unresolved (config invalid)`,detail:e instanceof Error?e.message:String(e)}}if(!B(r))return{name:`content-dir`,status:`fail`,summary:`content.dir does not exist: ${r}`,remediation:`Create the directory or fix \`content.dir\` in .ok/${Nn}.`};if(!H(r).isDirectory())return{name:`content-dir`,status:`fail`,summary:`content.dir is not a directory: ${r}`};let i=n(r);return i.writable?{name:`content-dir`,status:`pass`,summary:`${r} (writable)`}:{name:`content-dir`,status:`fail`,summary:`content.dir is not writable: ${r}`,detail:i.reason}}}}function Ko(e={}){let t=e.assert??ft;return{name:`git`,run:async()=>{try{let e=t();return{name:`git`,status:`pass`,summary:`git ${e.version} (${e.source} — ${e.resolvedPath})`}}catch(e){if(e instanceof Se)return{name:`git`,status:`fail`,summary:`git not found`,remediation:e.guidance.options.map(e=>`${e.label}: ${e.command}`).join(` / `),detail:e.message};if(e instanceof nt)return{name:`git`,status:`fail`,summary:`git ${e.detected} is older than required ${e.required}`,remediation:e.guidance.options.map(e=>`${e.label}: ${e.command}`).join(` / `),detail:e.message};throw e}}}}function qo(e){let t=Xn(`codesign`,[`--verify`,`--deep`,`--strict`,e],{encoding:`utf-8`,timeout:5e3,env:{...process.env,LANG:`C`,LC_ALL:`C`}});return t.error?{ok:!1,stderr:t.error.message}:t.signal===`SIGTERM`?{ok:!1,stderr:`codesign probe timed out`}:{ok:t.status===0,stderr:(t.stderr??``).trim()}}function Jo(e={}){let t=e.platform??process.platform,n=e.execPath??process.execPath,r=e.codesignVerify??qo;return{name:`macos-codesig`,run:async()=>{if(t!==`darwin`)return{name:`macos-codesig`,status:`pass`,summary:`skipped on ${t} (macOS-only check)`};let e=n.indexOf(`/Contents/MacOS/`);if(e===-1)return{name:`macos-codesig`,status:`pass`,summary:`dev mode (no app bundle)`};let i=n.slice(0,e);if(i.startsWith(`/private/var/folders/`))return{name:`macos-codesig`,status:`fail`,summary:`app is running translocated (quarantine sandbox)`,remediation:`Drag OpenKnowledge.app to /Applications/ and re-launch.`,detail:`bundlePath: ${i}`};let a=r(i);return a.ok?{name:`macos-codesig`,status:`pass`,summary:`signed bundle at ${i}`}:{name:`macos-codesig`,status:`fail`,summary:`codesign --verify failed`,remediation:`Re-download OpenKnowledge from the official releases page.`,detail:`bundlePath: ${i}\n${a.stderr}`}}}}const Yo=[`git`,`bun`,`config-yaml`,`content-dir`,`server-lock`,`shadow-repo`,`shadow-health`,`macos-codesig`];function Xo(e){return Yo.includes(e)}async function Zo(e,t,n={}){let r=n.timeoutMs??5e3,i,a=Math.round(r/1e3);try{let n=new Promise(t=>{i=setTimeout(()=>{t({name:e.name,status:`fail`,summary:`check timed out after ${a}s`})},r)}),o=e.run(t),s=await Promise.race([o,n]);return o.catch(()=>{}),s}catch(t){let n=t instanceof Error?t.message:String(t);return{name:e.name,status:`fail`,summary:`check crashed: ${n}`}}finally{i!==void 0&&clearTimeout(i)}}async function Qo(e,t,n={}){let r=[];for(let i of e)r.push(await Zo(i,t,n));return r}function $o(e={}){let t=e.inspect??an;return{name:`server-lock`,run:async e=>{let n=O(e.cwd);if(!B(n))return{name:`server-lock`,status:`pass`,summary:"no server lock (no `.ok/local/` yet)"};let r=t(n,`server`);switch(r.status){case`missing`:return{name:`server-lock`,status:`pass`,summary:`no server holding the lock`};case`alive`:return{name:`server-lock`,status:`fail`,summary:`server lock held by pid ${r.lock.pid} on this host`,remediation:"Stop the other OpenKnowledge process or run `ok stop`.",detail:`lockPath: ${r.lockPath}; port: ${r.lock.port}; started: ${r.lock.startedAt}`};case`foreign-host`:return{name:`server-lock`,status:`warn`,summary:`lock claimed by ${r.lock.hostname} (foreign host)`,remediation:`Run \`ok clean\` to prune the stale lock at ${z(n,`server.lock`)}.`,detail:`lockPath: ${r.lockPath}; pid: ${r.lock.pid}`};case`dead-pid`:return{name:`server-lock`,status:`warn`,summary:`stale lock for non-existent pid ${r.lock.pid}`,remediation:"Run `ok clean` to prune.",detail:`lockPath: ${r.lockPath}`};case`corrupt`:return{name:`server-lock`,status:`warn`,summary:`server.lock is corrupt (unparseable or invalid pid)`,remediation:`Delete ${r.lockPath} and rerun.`};default:return r}}}}async function es(e,t){let n={gitDir:e,workTree:t},r=await Le(n),i=await je(n),a=await ke(n,Date.now()-18e5),o=Ne(n),s=null;for(let t of[`objects/info/commit-graph`,`objects/info/commit-graphs`]){let n=z(e,t);if(B(n))try{s=Math.max(s??0,H(n).mtimeMs)}catch{}}let c=null;try{let n=Ft({baseDir:t,timeout:{block:4e3}}).env({GIT_DIR:e}),r=(await n.raw(`for-each-ref`,`--sort=-creatordate`,`--format=%(objectname)`,`refs/checkpoints/`)).trim().split(`
19
+ `).filter(Boolean).slice(0,25);for(let e of r){let t=(await n.raw(`log`,`-1`,`--format=%cI%x00%B`,e)).trim(),r=t.indexOf(`\0`);if(r<0)continue;let i=t.slice(0,r);if(T(t.slice(r+1))?.kind===`auto-consolidation`){let e=Date.parse(i);Number.isFinite(e)&&(c=e);break}}}catch{}return{looseObjects:r.looseObjects,packfiles:r.packfiles,wipWidth:i,deadChains:a,gcLogLatch:o,lastPackedAtMs:s,lastConsolidationAtMs:c}}function ts(e){if(e===null)return`never`;let t=Date.now()-e,n=t/(1440*60*1e3);if(n>=1)return`${Math.round(n)}d ago`;let r=t/(3600*1e3);return r>=1?`${Math.round(r)}h ago`:`${Math.max(0,Math.round(t/6e4))}m ago`}function ns(e={}){let t=e.resolveDir??Ve,n=e.readFacts??es;return{name:`shadow-health`,run:async e=>{if(!B(z(e.cwd,`.git`)))return{name:`shadow-health`,status:`warn`,summary:`no .git/ at project root (shadow repo not initialized)`,remediation:"Run `ok start` once to initialize the shadow repo."};let r;try{r=t(e.cwd)}catch(e){return{name:`shadow-health`,status:`warn`,summary:`cannot resolve shadow gitdir: ${e instanceof Error?e.message:String(e)}`}}if(!B(r))return{name:`shadow-health`,status:`warn`,summary:`shadow repo not yet initialized`,remediation:"Run `ok start` once to initialize the shadow repo."};let i=await n(r,e.cwd),a=[];i.gcLogLatch&&a.push(`gc.log latch present (auto-packing disabled until it self-expires)`),i.looseObjects>2e3?a.push(`${i.looseObjects} loose objects (unpacked)`):i.packfiles===0&&i.looseObjects>512&&a.push(`${i.looseObjects} loose objects, never packed`),i.deadChains>5&&a.push(`${i.deadChains} dead chains unfolded (auto-consolidation not keeping up)`),i.wipWidth>20&&a.push(`${i.wipWidth} WIP refs (version-journal width high)`);let o=[`loose objects: ${i.looseObjects}`,`packfiles: ${i.packfiles}`,`WIP refs: ${i.wipWidth}`,`dead chains: ${i.deadChains}`,`gc.log latch: ${i.gcLogLatch?`present`:`none`}`,`last packed: ${ts(i.lastPackedAtMs)}`,`last fold: ${ts(i.lastConsolidationAtMs)}`].join(`, `);return a.length>0?{name:`shadow-health`,status:`warn`,summary:`history may be slow: ${a.join(`; `)}`,remediation:`Packing and journal cleanup run automatically on the next server start and during use. If this persists, check the server logs.`,detail:o}:{name:`shadow-health`,status:`pass`,summary:`${i.looseObjects} loose, ${i.packfiles} packs, ${i.wipWidth} WIP refs`,detail:o}}}}function rs(e={}){let t=e.resolve??Ve;return{name:`shadow-repo`,run:async e=>{if(!B(z(e.cwd,`.git`)))return{name:`shadow-repo`,status:`warn`,summary:`no .git/ at project root (shadow repo not initialized)`,remediation:"Run `ok start` once to initialize the shadow repo."};let n;try{n=t(e.cwd)}catch(e){if(e instanceof Qe||e instanceof kt)return{name:`shadow-repo`,status:`fail`,summary:`cannot resolve shadow gitdir: ${e.message}`};throw e}if(!B(n))return{name:`shadow-repo`,status:`warn`,summary:`shadow repo at ${n} not yet initialized`,remediation:"Run `ok start` once to initialize the shadow repo."};let r=z(n,`HEAD`);if(!B(r))return{name:`shadow-repo`,status:`fail`,summary:`shadow repo at ${n} is missing HEAD`};let i;try{i=V(r,`utf-8`).trim()}catch(e){return{name:`shadow-repo`,status:`fail`,summary:`cannot read shadow HEAD: ${e instanceof Error?e.message:String(e)}`}}return{name:`shadow-repo`,status:`pass`,summary:`${n} (HEAD: ${i})`}}}}function is(){return[Ko(),Ho(),Uo(),Go(),$o(),rs(),ns(),Jo()]}function as(e){switch(e){case`pass`:return J.default.green(`✓`);case`warn`:return J.default.yellow(`!`);case`fail`:return J.default.red(`✗`)}}function os(e,t){let n=[`[${as(e.status)}] ${e.name}: ${e.summary}`];if(e.remediation!==void 0&&e.status!==`pass`&&n.push(` → ${e.remediation}`),t&&e.detail!==void 0)for(let t of e.detail.split(`
20
20
  `))n.push(` ${J.default.dim(t)}`);return n}function ss(e){let t=e.filter(e=>e.status===`fail`).length,n=e.filter(e=>e.status===`warn`).length;if(t===0&&n===0)return`All checks passed`;let r=[];return t>0&&r.push(`${t} error${t===1?``:`s`}`),n>0&&r.push(`${n} warning${n===1?``:`s`}`),r.join(`, `)}async function cs(e,t={}){let n=t.checks??is(),r=t.stdout??(e=>console.log(e)),i=t.stderr??(e=>console.error(e)),a=e.quiet??!1,o=e.json??!1,s=e.verbose??!1,c;if(e.check!==void 0){if(!Xo(e.check))return i(J.default.red(`unknown check '${e.check}'. Valid: ${Yo.join(`, `)}`)),2;let t=e.check,r=n.find(e=>e.name===t);if(!r)return i(J.default.red(`internal error: check '${e.check}' not registered`)),2;c=[r]}else c=[...n];let l={cwd:e.cwd},u=await Qo(c,l,t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs});if(!a)if(o)for(let e of u)r(JSON.stringify(e));else{for(let e of u)for(let t of os(e,s))r(t);r(``),r(ss(u))}return+!!u.some(e=>e.status===`fail`)}function ls(){return new k(`health`).description(`Run environment health checks (${Yo.join(`, `)})`).option(`--json`,`Emit NDJSON (one CheckResult per line)`).option(`--verbose`,`Include detail field + probe context in human-readable output`).option(`--check <name>`,`Run only the named check. One of: ${Yo.join(`, `)}`).option(`--quiet`,`Suppress output; exit code only`).action(async e=>{let t=await cs({cwd:process.cwd(),json:e.json,verbose:e.verbose,check:e.check,quiet:e.quiet});process.exit(t)})}function us(e){let t=Xn(`ps`,[`-p`,String(e),`-o`,`%cpu=,%mem=,rss=,vsz=`],D({encoding:`utf-8`,timeout:2e3}));if(t.error||!t.stdout?.trim())return null;let[n,r,i,a]=t.stdout.trim().split(/\s+/),o=Number.parseFloat(n??``),s=Number.parseFloat(r??``),c=Number.parseInt(i??``,10),l=Number.parseInt(a??``,10);return Number.isNaN(o)||Number.isNaN(s)||Number.isNaN(c)||Number.isNaN(l)?null:{ts:new Date().toISOString(),pid:e,cpuPercent:o,memPercent:s,rssKb:c,vszKb:l}}function ds(e){let t=Xn(`lsof`,[`-p`,String(e)],D({encoding:`utf-8`,timeout:5e3}));return t.error||!t.stdout?null:t.stdout}function fs(e){let t=[];for(let n of e.split(`
21
21
  `)){let e=n.match(/127\.0\.0\.1:(\d+)\s*\(LISTEN\)/);if(e){let n=Number.parseInt(e[1]??``,10);Number.isNaN(n)||t.push(n)}}return t}function ps(e){let t=Xn(`curl`,[`-s`,`--max-time`,`2`,`http://127.0.0.1:${e}/json/list`],D({encoding:`utf-8`,timeout:3e3}));if(t.error||!t.stdout?.trim())return null;try{let e=JSON.parse(t.stdout);return Array.isArray(e)?e:null}catch{return null}}function ms(e,t,n){let r=L(cr(L(_r(),`ok-cdp-`)),`profiler.mjs`);return mr(r,`import { writeFileSync } from 'node:fs';
22
22
  const ws = new WebSocket(${JSON.stringify(e)});
@@ -38,18 +38,18 @@ ws.addEventListener('close', () => process.exit(0));
38
38
  ws.addEventListener('error', () => process.exit(1));
39
39
  setTimeout(() => process.exit(2), ${t+1e4});
40
40
  `),r}async function hs(e,t,n,r,i){let a=ms(e,t,L(r,`cpu.cpuprofile`)),o=!1,s=Yn(process.execPath,[a],D({stdio:`ignore`})),c=setInterval(()=>{let e=us(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{pr(L(a,`..`),{recursive:!0,force:!0})}catch{}return o}function gs(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
- `)}async function _s(e,t={}){let{pid:n,cpuProfileSecs:r=15,noInspector:i=!1}=e,a=t.log??(e=>console.log(e)),o=t.discover??gt,s=t.inspect??an,c=t.resolveCommand??Ke,l=t.resolveUsage??lt,u=t.collectLsofFn??ds,d=t.getEndpoints??ps,f=t.profiler??hs,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{sr(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)=>{mr(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?fs(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`,gs(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 vs(e){let t=wr({input:process.stdin,output:process.stdout});try{return(await t.question(e)).trim()}finally{t.close()}}async function ys(e){let t=cr(L(_r(),`ok-bundle-process-`));return await _s({pid:e,output:t}),t}function bs(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 xs(e){let t=e.trim().toLowerCase();return t===`y`||t===`yes`}function Ss(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 Cs(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 ws(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: ${bs(r.totalBytes)} uncompressed`),e(` Document names: included in cleartext (${r.docNameCount} doc.name occurrence(s) in telemetry)`),e(` Content-dir path: ${Ss(t)}`),e(` Credentials: ${Cs(t)}`),e(` Server status: ${i.serverStatus}`),e(` Output: ${n}`),e(``)}async function Ts(e,t={}){let n=t.log??(e=>console.log(e)),r=t.prompt??vs,i=t.runProcessDiagnose??ys,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`);sr(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 rn({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`)),ws(n,l,o),e.yes!==!0&&!xs(await r(`Write bundle? [y/N]: `))?(n(J.default.dim(`Aborted; no bundle written.`)),{outputPath:null,declined:!0}):(await Kt({collected:l,outputPath:o}),n(J.default.bold(`Bundle: ${o}`)),{outputPath:o,declined:!1})}finally{if(l.cleanup(),s!==void 0)try{pr(s,{recursive:!0,force:!0})}catch{}}}function Es(){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 _s({pid:n,cpuProfileSecs:r,output:t.output,noInspector:!t.inspector})}),e.addCommand(ls()),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-BkHXK7KD.mjs`),{resolveContentDir:r}=await import(`./src-DIjYfcIb.mjs`),i=process.cwd(),{config:a}=n(i);await Ts({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 Ds(){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 fi({message:`Enter embeddings provider API key:`})).trim()}function Os(e){return Be(e)}async function ks(e,t){let n=await Se(Ae(),e,t);return n.apiKey?{present:!0,notRequired:!1,source:n.source}:{present:!1,notRequired:n.keyless,source:null}}async function As(e){try{let t=Lt(O(e));if(!t||t.port<=0||!Rt(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 js(){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 Ds();if(!t){process.stderr.write(`No key provided.
43
- `),process.exitCode=1;return}let n=z(e.cwd??process.cwd()),{baseUrl:r}=Os(n);try{await Ae().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).
41
+ `)}async function _s(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??an,c=t.resolveCommand??Ze,l=t.resolveUsage??mt,u=t.collectLsofFn??ds,d=t.getEndpoints??ps,f=t.profiler??hs,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{sr(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)=>{mr(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?fs(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`,gs(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 vs(e){let t=wr({input:process.stdin,output:process.stdout});try{return(await t.question(e)).trim()}finally{t.close()}}async function ys(e){let t=cr(L(_r(),`ok-bundle-process-`));return await _s({pid:e,output:t}),t}function bs(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 xs(e){let t=e.trim().toLowerCase();return t===`y`||t===`yes`}function Ss(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 Cs(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 ws(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: ${bs(r.totalBytes)} uncompressed`),e(` Document names: included in cleartext (${r.docNameCount} doc.name occurrence(s) in telemetry)`),e(` Content-dir path: ${Ss(t)}`),e(` Credentials: ${Cs(t)}`),e(` Server status: ${i.serverStatus}`),e(` Output: ${n}`),e(``)}async function Ts(e,t={}){let n=t.log??(e=>console.log(e)),r=t.prompt??vs,i=t.runProcessDiagnose??ys,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`);sr(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 rn({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`)),ws(n,l,o),e.yes!==!0&&!xs(await r(`Write bundle? [y/N]: `))?(n(J.default.dim(`Aborted; no bundle written.`)),{outputPath:null,declined:!0}):(await Kt({collected:l,outputPath:o}),n(J.default.bold(`Bundle: ${o}`)),{outputPath:o,declined:!1})}finally{if(l.cleanup(),s!==void 0)try{pr(s,{recursive:!0,force:!0})}catch{}}}function Es(){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 _s({pid:n,cpuProfileSecs:r,output:t.output,noInspector:!t.inspector})}),e.addCommand(ls()),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-BcwbnY_K.mjs`),{resolveContentDir:r}=await import(`./src-h5dDPK2z.mjs`),i=process.cwd(),{config:a}=n(i);await Ts({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 Ds(){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 fi({message:`Enter embeddings provider API key:`})).trim()}function Os(e){return qe(e)}async function ks(e,t){let n=await pt(St(),e,t);return n.apiKey?{present:!0,notRequired:!1,source:n.source}:{present:!1,notRequired:n.keyless,source:null}}async function As(e){try{let t=Lt(O(e));if(!t||t.port<=0||!Rt(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 js(){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 Ds();if(!t){process.stderr.write(`No key provided.
43
+ `),process.exitCode=1;return}let n=z(e.cwd??process.cwd()),{baseUrl:r}=Os(n);try{await St().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.
46
- `)})}function Ms(){return new k(`clear-key`).description(`Remove 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=z(e.cwd??process.cwd()),{baseUrl:n}=Os(t),r;try{r=await Ae().clearForProject(t,n)}catch(e){process.stderr.write(`Failed to clear the embeddings key: ${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1;return}if(!r){process.stderr.write(`No stored embeddings key found for ${n}.\n`);return}process.stderr.write(`✓ Embeddings API key cleared for ${n}.\n`)})}function Ns(){return new k(`list`).description(`List every project + endpoint that has a stored embeddings key`).action(async()=>{let e=await Ae().listProjects();if(e.length===0){process.stderr.write(`No project embeddings keys stored.
46
+ `)})}function Ms(){return new k(`clear-key`).description(`Remove 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=z(e.cwd??process.cwd()),{baseUrl:n}=Os(t),r;try{r=await St().clearForProject(t,n)}catch(e){process.stderr.write(`Failed to clear the embeddings key: ${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1;return}if(!r){process.stderr.write(`No stored embeddings key found for ${n}.\n`);return}process.stderr.write(`✓ Embeddings API key cleared for ${n}.\n`)})}function Ns(){return new k(`list`).description(`List every project + endpoint that has a stored embeddings key`).action(async()=>{let e=await St().listProjects();if(e.length===0){process.stderr.write(`No project embeddings keys stored.
47
47
  `);return}let t=[`Stored embeddings keys (this machine):`,``];for(let{projectKey:n,endpoints:r}of e){t.push(` ${n}`);for(let{endpoint:e,hint:n}of r)t.push(` ${e} → ${n?`••••${n}`:`set`}`)}process.stdout.write(`${t.join(`
48
48
  `)}\n`)})}function Ps(){return new k(`set-url`).description(`Set the embeddings API endpoint for this project (project-local)`).argument(`<url>`,`OpenAI-compatible base URL, e.g. https://api.openai.com/v1`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async(e,t)=>{let n=e.trim(),r=a(n);if(r!==null){process.stderr.write(r===`invalid-url`?`Not a valid URL: ${e}\n`:`Refusing an insecure endpoint: use https:// (http:// is allowed only for localhost). Got: ${e}\n`),process.exitCode=1;return}let i=z(t.cwd??process.cwd()),o=await Pt({cwd:i,scope:`project-local`,patch:{search:{semantic:{baseUrl:n}}}});if(!o.ok){process.stderr.write(`Failed to set the embeddings endpoint — ${f(o.error)}\n`),process.exitCode=1;return}process.stderr.write(`✓ Embeddings endpoint set to ${n} for ${i}\n`)})}function Fs(){return new k(`clear-url`).description(`Reset the embeddings API endpoint to the default OpenAI endpoint (project-local)`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async e=>{let t=z(e.cwd??process.cwd()),n=await Pt({cwd:t,scope:`project-local`,patch:{search:{semantic:{baseUrl:d}}}});if(!n.ok){process.stderr.write(`Failed to reset the embeddings endpoint — ${f(n.error)}\n`),process.exitCode=1;return}process.stderr.write(`✓ Embeddings endpoint reset to ${d} for ${t}\n`)})}function Is(){return new k(`set-model`).description(`Set the embeddings model for this project (project-local)`).argument(`<model>`,`Model id served by the configured endpoint, e.g. nomic-embed-text`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async(e,t)=>{let n=e.trim();if(!n){process.stderr.write("Model id cannot be empty. Use `clear-model` to reset the default.\n"),process.exitCode=1;return}let r=z(t.cwd??process.cwd()),i=await Pt({cwd:r,scope:`project-local`,patch:{search:{semantic:{model:n}}}});if(!i.ok){process.stderr.write(`Failed to set the embeddings model — ${f(i.error)}\n`),process.exitCode=1;return}process.stderr.write(`✓ Embeddings model set to ${n} for ${r}\n Changing the model re-embeds the corpus on the next search.
49
- `)})}function Ls(){return new k(`clear-model`).description(`Reset the embeddings model to ${x} (project-local)`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async e=>{let t=z(e.cwd??process.cwd()),n=await Pt({cwd:t,scope:`project-local`,patch:{search:{semantic:{model:x}}}});if(!n.ok){process.stderr.write(`Failed to reset the embeddings model — ${f(n.error)}\n`),process.exitCode=1;return}process.stderr.write(`✓ Embeddings model reset to ${x} for ${t}\n`)})}function Rs(e,t){return new k(e).description(`Turn semantic search ${t?`on`:`off`} for this project (project-local)`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async n=>{let r=z(n.cwd??process.cwd()),i=await Pt({cwd:r,scope:`project-local`,patch:{search:{semantic:{enabled:t}}}});if(!i.ok){process.stderr.write(`Failed to ${e} semantic search — ${f(i.error)}\n`),process.exitCode=1;return}if(process.stderr.write(`✓ Semantic search ${t?`enabled`:`disabled`} for ${r}\n`),t){let{present:e,notRequired:t}=await ks(r,Os(r).baseUrl);!e&&!t&&process.stderr.write(" Note: no API key set yet — run `ok embeddings set-key`. Until then, search stays lexical.\n")}})}function zs(){return new k(`status`).description(`Show semantic-search capability: key presence, enabled, coverage, provider`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).option(`--json`,`Output JSON`,!1).action(async e=>{let t=z(e.cwd??process.cwd()),n=Os(t),{present:r,notRequired:i,source:a}=await ks(t,n.baseUrl),o=n.enabled&&(r||i),s=o?await As(t):null;if(e.json){process.stdout.write(`${JSON.stringify({project:t,key:{present:r,notRequired:i,source:a},project_config:{enabled:n.enabled,capable:o,coverage:s?{embedded:s.embedded,total:s.total}:null,provider:{baseUrl:n.baseUrl,model:n.model,dimensions:n.dimensions??null}}})}\n`);return}let c=r?`set for this endpoint — ${a===`env`?`environment (${Le})`:`~/.ok/secrets.yml`}`:i?`not required (localhost endpoint)`:`not set`,l=o?s?`${s.embedded} / ${s.total} pages embedded`:`server not running — start it to index (or it has not embedded yet)`:null,u=[`Semantic search`,` project: ${t}`,``,` This project:`,` enabled: ${n.enabled?`yes`:`no`}`,` API key: ${c}`,` capability: ${o?`AVAILABLE`:`unavailable (search stays lexical)`}`,...l?[` coverage: ${l}`]:[],` provider: ${n.baseUrl}`,` model: ${n.model}`,` dimensions: ${n.dimensions??`auto (detected from the endpoint)`}`],d=[];!r&&!i&&d.push(`Set a key: ok embeddings set-key (or export ${Le})`),n.enabled||d.push(`Enable it: ok embeddings enable (in this project folder)`),d.length>0&&u.push(``,...d.map(e=>` ${e}`)),process.stdout.write(`${u.join(`
49
+ `)})}function Ls(){return new k(`clear-model`).description(`Reset the embeddings model to ${x} (project-local)`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async e=>{let t=z(e.cwd??process.cwd()),n=await Pt({cwd:t,scope:`project-local`,patch:{search:{semantic:{model:x}}}});if(!n.ok){process.stderr.write(`Failed to reset the embeddings model — ${f(n.error)}\n`),process.exitCode=1;return}process.stderr.write(`✓ Embeddings model reset to ${x} for ${t}\n`)})}function Rs(e,t){return new k(e).description(`Turn semantic search ${t?`on`:`off`} for this project (project-local)`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async n=>{let r=z(n.cwd??process.cwd()),i=await Pt({cwd:r,scope:`project-local`,patch:{search:{semantic:{enabled:t}}}});if(!i.ok){process.stderr.write(`Failed to ${e} semantic search — ${f(i.error)}\n`),process.exitCode=1;return}if(process.stderr.write(`✓ Semantic search ${t?`enabled`:`disabled`} for ${r}\n`),t){let{present:e,notRequired:t}=await ks(r,Os(r).baseUrl);!e&&!t&&process.stderr.write(" Note: no API key set yet — run `ok embeddings set-key`. Until then, search stays lexical.\n")}})}function zs(){return new k(`status`).description(`Show semantic-search capability: key presence, enabled, coverage, provider`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).option(`--json`,`Output JSON`,!1).action(async e=>{let t=z(e.cwd??process.cwd()),n=Os(t),{present:r,notRequired:i,source:a}=await ks(t,n.baseUrl),o=n.enabled&&(r||i),s=o?await As(t):null;if(e.json){process.stdout.write(`${JSON.stringify({project:t,key:{present:r,notRequired:i,source:a},project_config:{enabled:n.enabled,capable:o,coverage:s?{embedded:s.embedded,total:s.total}:null,provider:{baseUrl:n.baseUrl,model:n.model,dimensions:n.dimensions??null}}})}\n`);return}let c=r?`set for this endpoint — ${a===`env`?`environment (${Xe})`:`~/.ok/secrets.yml`}`:i?`not required (localhost endpoint)`:`not set`,l=o?s?`${s.embedded} / ${s.total} pages embedded`:`server not running — start it to index (or it has not embedded yet)`:null,u=[`Semantic search`,` project: ${t}`,``,` This project:`,` enabled: ${n.enabled?`yes`:`no`}`,` API key: ${c}`,` capability: ${o?`AVAILABLE`:`unavailable (search stays lexical)`}`,...l?[` coverage: ${l}`]:[],` provider: ${n.baseUrl}`,` model: ${n.model}`,` dimensions: ${n.dimensions??`auto (detected from the endpoint)`}`],d=[];!r&&!i&&d.push(`Set a key: ok embeddings set-key (or export ${Xe})`),n.enabled||d.push(`Enable it: ok embeddings enable (in this project folder)`),d.length>0&&u.push(``,...d.map(e=>` ${e}`)),process.stdout.write(`${u.join(`
50
50
  `)}\n`)})}function Bs(){return new k(`embeddings`).description(`Manage the semantic-search embeddings provider key + status`).addCommand(js()).addCommand(Ms()).addCommand(Ps()).addCommand(Fs()).addCommand(Is()).addCommand(Ls()).addCommand(Rs(`enable`,!0)).addCommand(Rs(`disable`,!1)).addCommand(Ns()).addCommand(zs())}const Vs=L(`Contents`,`Resources`,`cli`,`bin`,`ok.sh`),Hs=/Contents\/Resources\/cli\/dist\/cli\.mjs$/;function Us(e,t,n){return e===`darwin`?[L(t,`Applications`,`OpenKnowledge.app`,Vs),L(`/Applications`,`OpenKnowledge.app`,Vs)].find(e=>n.existsSync(e))??null:null}function Ws(e,t,n){if(n!==`darwin`)return{proxy:!1,suppressedBy:`platform`};let r=e.OK_BUNDLE_PROXY?.toLowerCase();return r===`0`||r===`false`?{proxy:!1,suppressedBy:`env`}:t.includes(`--no-bundle-proxy`)?{proxy:!1,suppressedBy:`flag`}:typeof t[1]==`string`&&Hs.test(t[1])?{proxy:!1,suppressedBy:`self`}:{proxy:!0,suppressedBy:null}}function Gs(e){e.stderr.write(`${JSON.stringify({event:`mcp-bundle-proxy`,mode:e.mode,bundlePath:e.bundlePath,reason:e.reason,hint:`Suppress with --no-bundle-proxy or OK_BUNDLE_PROXY=0.`})}\n`)}function Ks(e){Gs({stderr:e.stderr,mode:`bundled`,bundlePath:e.bundlePath,reason:null});let t=e.spawnImpl??Yn,n=e.exitProcess??(e=>process.exit(e)),r=e.now??(()=>Date.now()),i=r(),a=e.startupFailureWindowMs??1e3;return new Promise((o,s)=>{let c=t(e.bundlePath,e.argv.filter(e=>e!==`--no-bundle-proxy`),{env:{...e.env,OK_BUNDLE_PROXY:`0`},stdio:`inherit`,windowsHide:!0}),l=e=>{c.kill(e)},u=()=>{process.off(`SIGTERM`,l),process.off(`SIGINT`,l)};process.on(`SIGTERM`,l),process.on(`SIGINT`,l),c.once(`error`,e=>{u(),s(e)}),c.once(`exit`,(e,t)=>{if(u(),t){s(Error(`bundle process exited by signal ${t}`));return}let o=e??0,c=r()-i;if(o!==0&&c<=a){s(Error(`bundle process exited during startup with code ${o}`));return}n(o)})})}function qs(e){let t=e.scheduler??{setTimeout:(e,t)=>globalThis.setTimeout(e,t),clearTimeout:e=>globalThis.clearTimeout(e)},n=e.initialBackoffMs??1e3,r=e.maxBackoffMs??3e4,i=e.rng??Math.random,a=e.createWebSocket??(e=>new WebSocket(e)),o=e.logger??null,s=e.log,c=null,l=null,u=!1,d=n;function f(e,t,n){try{o?o[e](t,n):s?.(t)}catch{}}function p(){if(u)return;l!==null&&t.clearTimeout(l);let e=d;d=Math.min(d*2,r);let n=i(),a=Math.max(1,Math.floor(e*(1-n/2)));f(`debug`,`scheduling reconnect`,{backoffMs:a,ceilMs:e}),l=t.setTimeout(()=>{l=null,m().catch(e=>f(`warn`,`reconnect failed`,{error:String(e)}))},a)}async function m(){if(u)return;let t;try{t=await e.resolveWsUrl()}catch(e){f(`warn`,`resolveWsUrl threw`,{error:String(e)}),p();return}if(!t){p();return}let r=[];e.pid!==void 0&&r.push(`pid=${encodeURIComponent(String(e.pid))}`),e.connectionId&&r.push(`connectionId=${encodeURIComponent(e.connectionId)}`),e.connectionId&&e.displayName!==void 0&&e.clientName!==void 0&&e.colorSeed!==void 0&&(r.push(`displayName=${encodeURIComponent(e.displayName)}`),r.push(`clientName=${encodeURIComponent(e.clientName)}`),r.push(`colorSeed=${encodeURIComponent(e.colorSeed)}`));let i=r.length>0?`?${r.join(`&`)}`:``,o=`${t}/collab/keepalive${i}`;try{c=a(o)}catch(e){f(`warn`,`WebSocket constructor failed`,{url:o,error:String(e)}),c=null,p();return}c.addEventListener(`open`,()=>{f(`info`,`connected`,{url:t}),d=n}),c.addEventListener(`close`,()=>{u||(f(`info`,`disconnected`,{url:t}),c=null,p())}),c.addEventListener(`error`,()=>{f(`debug`,`websocket error observed`,{url:t,readyState:c?.readyState,reason:`error-event`})})}return queueMicrotask(()=>{m().catch(e=>f(`warn`,`initial connect failed`,{error:String(e)}))}),{close:()=>{if(!u&&(u=!0,l!==null&&(t.clearTimeout(l),l=null),c)){try{c.close()}catch{}c=null}},isConnected:()=>c!==null&&c.readyState===1}}var Js=class{append(e){this._buffer=this._buffer?Buffer.concat([this._buffer,e]):e}readMessage(){if(!this._buffer)return null;let e=this._buffer.indexOf(`
51
- `);if(e===-1)return null;let t=this._buffer.toString(`utf8`,0,e).replace(/\r$/,``);return this._buffer=this._buffer.subarray(e+1),Ys(t)}clear(){this._buffer=void 0}};function Ys(e){return ot.parse(JSON.parse(e))}function Xs(e){return JSON.stringify(e)+`
52
- `}var Zs=class{constructor(e=er.stdin,t=er.stdout){this._stdin=e,this._stdout=t,this._readBuffer=new Js,this._started=!1,this._ondata=e=>{this._readBuffer.append(e),this.processReadBuffer()},this._onerror=e=>{this.onerror?.(e)}}async start(){if(this._started)throw Error(`StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.`);this._started=!0,this._stdin.on(`data`,this._ondata),this._stdin.on(`error`,this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off(`data`,this._ondata),this._stdin.off(`error`,this._onerror),this._stdin.listenerCount(`data`)===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(t=>{let n=Xs(e);this._stdout.write(n)?t():this._stdout.once(`drain`,t)})}};function Qs(e){if(e.platform!==`darwin`)return{kind:`unchanged`};let t;try{t=e.realpath(e.bundleAnchorPath)}catch(e){return{kind:`unreadable`,reason:e instanceof Error?e.message:String(e)}}let n;try{n=e.statInode(t)}catch(e){return{kind:`unreadable`,reason:e instanceof Error?e.message:String(e)}}return n===e.currentInode?{kind:`unchanged`}:{kind:`replaced`,currentInode:e.currentInode,onDiskInode:n}}function $s(e){let t=e.setInterval??setInterval,n=e.clearInterval??clearInterval,r=e.intervalMs??3e5,i=!0,a=!1,o=!1,s=t(()=>{if(!i)return;let t;try{t=e.detect()}catch(t){e.log(`bundle identity check threw unexpectedly (contract violation): ${t instanceof Error?t.message:String(t)}`);return}if(t.kind===`unreadable`){o||(o=!0,e.log(`bundle identity check unreadable${t.reason?`: ${t.reason}`:``} — will retry on next tick`));return}o&&(o=!1,e.log(`bundle identity check recovered from unreadable`)),t.kind!==`unchanged`&&(i=!1,e.onReplaced(t))},r);return typeof s.unref==`function`&&s.unref(),{stop:()=>{a||(a=!0,i=!1,n(s))}}}function ec(e,t){let n;try{n=t.realpathSync(e)}catch(e){t.log(`[mcp] bundle identity boot capture unreadable (realpath failed): ${e instanceof Error?e.message:String(e)}`);return}let r;try{r=t.statInoSync(n)}catch(e){t.log(`[mcp] bundle identity boot capture unreadable (stat failed): ${e instanceof Error?e.message:String(e)}`);return}return{resolvedPath:n,inode:r}}function tc(e){let t=e.scheduler??{setInterval:(e,t)=>globalThis.setInterval(e,t),clearInterval:e=>globalThis.clearInterval(e)},n=e.getPpid();if(n<=1)return{stop:()=>{}};let r=!1,i=t.setInterval(()=>{if(r)return;let a=e.getPpid();a!==n&&(r=!0,t.clearInterval(i),e.onHostGone(`host process exited (ppid ${n} -> ${a})`))},e.intervalMs??1e3);return i.unref?.(),{stop:()=>t.clearInterval(i)}}function nc(e){let t=t=>{try{e.log(t)}catch{}},n=e.transport.onclose;e.transport.onclose=()=>{t(`[mcp] stdio transport closed (internal shutdown)`),n?.()},e.stdin.once(`end`,()=>t(`[mcp] stdin EOF (host closed pipe)`)),e.stdin.once(`close`,()=>t(`[mcp] stdin closed`)),e.process.on(`exit`,e=>{t(`[mcp] exit code=${e}`)}),e.process.on(`uncaughtExceptionMonitor`,(e,n)=>{t(`[mcp] uncaughtException origin=${n}: ${e instanceof Error?e.stack??e.message:String(e)}`)})}function rc(e){return e?e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}:{}}function ic(e=fetch,t){return t?async(n,r)=>e(n,{...t,...r,headers:r?.headers?{...rc(t.headers),...rc(r.headers)}:t.headers}):e}let ac;ac=globalThis.crypto?.webcrypto??globalThis.crypto??import(`node:crypto`).then(e=>e.webcrypto);async function oc(e){return(await ac).getRandomValues(new Uint8Array(e))}async function sc(e){let t=``;for(;t.length<e;){let n=await oc(e-t.length);for(let e of n)e<198&&(t+=`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~`[e%66])}return t}async function cc(e){return await sc(e)}async function lc(e){let t=await(await ac).subtle.digest(`SHA-256`,new TextEncoder().encode(e));return btoa(String.fromCharCode(...new Uint8Array(t))).replace(/\//g,`_`).replace(/\+/g,`-`).replace(/=/g,``)}async function uc(e){if(e||=43,e<43||e>128)throw`Expected a length between 43 and 128. Received ${e}.`;let t=await cc(e);return{code_verifier:t,code_challenge:await lc(t)}}const Y=S().superRefine((e,t)=>{if(!URL.canParse(e))return t.addIssue({code:Er.custom,message:`URL must be parseable`,fatal:!0}),i}).refine(e=>{let t=new URL(e);return t.protocol!==`javascript:`&&t.protocol!==`data:`&&t.protocol!==`vbscript:`},{message:`URL cannot use javascript:, data:, or vbscript: scheme`}),dc=m({resource:b().url(),authorization_servers:h(Y).optional(),jwks_uri:b().url().optional(),scopes_supported:h(b()).optional(),bearer_methods_supported:h(b()).optional(),resource_signing_alg_values_supported:h(b()).optional(),resource_name:b().optional(),resource_documentation:b().optional(),resource_policy_uri:b().url().optional(),resource_tos_uri:b().url().optional(),tls_client_certificate_bound_access_tokens:u().optional(),authorization_details_types_supported:h(b()).optional(),dpop_signing_alg_values_supported:h(b()).optional(),dpop_bound_access_tokens_required:u().optional()}),fc=m({issuer:b(),authorization_endpoint:Y,token_endpoint:Y,registration_endpoint:Y.optional(),scopes_supported:h(b()).optional(),response_types_supported:h(b()),response_modes_supported:h(b()).optional(),grant_types_supported:h(b()).optional(),token_endpoint_auth_methods_supported:h(b()).optional(),token_endpoint_auth_signing_alg_values_supported:h(b()).optional(),service_documentation:Y.optional(),revocation_endpoint:Y.optional(),revocation_endpoint_auth_methods_supported:h(b()).optional(),revocation_endpoint_auth_signing_alg_values_supported:h(b()).optional(),introspection_endpoint:b().optional(),introspection_endpoint_auth_methods_supported:h(b()).optional(),introspection_endpoint_auth_signing_alg_values_supported:h(b()).optional(),code_challenge_methods_supported:h(b()).optional(),client_id_metadata_document_supported:u().optional()}),pc=g({...m({issuer:b(),authorization_endpoint:Y,token_endpoint:Y,userinfo_endpoint:Y.optional(),jwks_uri:Y,registration_endpoint:Y.optional(),scopes_supported:h(b()).optional(),response_types_supported:h(b()),response_modes_supported:h(b()).optional(),grant_types_supported:h(b()).optional(),acr_values_supported:h(b()).optional(),subject_types_supported:h(b()),id_token_signing_alg_values_supported:h(b()),id_token_encryption_alg_values_supported:h(b()).optional(),id_token_encryption_enc_values_supported:h(b()).optional(),userinfo_signing_alg_values_supported:h(b()).optional(),userinfo_encryption_alg_values_supported:h(b()).optional(),userinfo_encryption_enc_values_supported:h(b()).optional(),request_object_signing_alg_values_supported:h(b()).optional(),request_object_encryption_alg_values_supported:h(b()).optional(),request_object_encryption_enc_values_supported:h(b()).optional(),token_endpoint_auth_methods_supported:h(b()).optional(),token_endpoint_auth_signing_alg_values_supported:h(b()).optional(),display_values_supported:h(b()).optional(),claim_types_supported:h(b()).optional(),claims_supported:h(b()).optional(),service_documentation:b().optional(),claims_locales_supported:h(b()).optional(),ui_locales_supported:h(b()).optional(),claims_parameter_supported:u().optional(),request_parameter_supported:u().optional(),request_uri_parameter_supported:u().optional(),require_request_uri_registration:u().optional(),op_policy_uri:Y.optional(),op_tos_uri:Y.optional(),client_id_metadata_document_supported:u().optional()}).shape,...fc.pick({code_challenge_methods_supported:!0}).shape}),mc=g({access_token:b(),id_token:b().optional(),token_type:b(),expires_in:Or().optional(),scope:b().optional(),refresh_token:b().optional()}).strip(),hc=g({error:b(),error_description:b().optional(),error_uri:b().optional()}),gc=Y.optional().or(p(``).transform(()=>void 0)),_c=g({redirect_uris:h(Y),token_endpoint_auth_method:b().optional(),grant_types:h(b()).optional(),response_types:h(b()).optional(),client_name:b().optional(),client_uri:Y.optional(),logo_uri:gc,scope:b().optional(),contacts:h(b()).optional(),tos_uri:gc,policy_uri:b().optional(),jwks_uri:Y.optional(),jwks:y().optional(),software_id:b().optional(),software_version:b().optional(),software_statement:b().optional()}).strip(),vc=g({client_id:b(),client_secret:b().optional(),client_id_issued_at:_().optional(),client_secret_expires_at:_().optional()}).strip(),yc=_c.merge(vc);g({error:b(),error_description:b().optional()}).strip(),g({token:b(),token_type_hint:b().optional()}).strip();function bc(e){let t=typeof e==`string`?new URL(e):new URL(e.href);return t.hash=``,t}function xc({requestedResource:e,configuredResource:t}){let n=typeof e==`string`?new URL(e):new URL(e.href),r=typeof t==`string`?new URL(t):new URL(t.href);if(n.origin!==r.origin||n.pathname.length<r.pathname.length)return!1;let i=n.pathname.endsWith(`/`)?n.pathname:n.pathname+`/`,a=r.pathname.endsWith(`/`)?r.pathname:r.pathname+`/`;return i.startsWith(a)}var X=class extends Error{constructor(e,t){super(e),this.errorUri=t,this.name=this.constructor.name}toResponseObject(){let e={error:this.errorCode,error_description:this.message};return this.errorUri&&(e.error_uri=this.errorUri),e}get errorCode(){return this.constructor.errorCode}},Sc=class extends X{};Sc.errorCode=`invalid_request`;var Cc=class extends X{};Cc.errorCode=`invalid_client`;var wc=class extends X{};wc.errorCode=`invalid_grant`;var Tc=class extends X{};Tc.errorCode=`unauthorized_client`;var Ec=class extends X{};Ec.errorCode=`unsupported_grant_type`;var Dc=class extends X{};Dc.errorCode=`invalid_scope`;var Oc=class extends X{};Oc.errorCode=`access_denied`;var kc=class extends X{};kc.errorCode=`server_error`;var Ac=class extends X{};Ac.errorCode=`temporarily_unavailable`;var jc=class extends X{};jc.errorCode=`unsupported_response_type`;var Mc=class extends X{};Mc.errorCode=`unsupported_token_type`;var Nc=class extends X{};Nc.errorCode=`invalid_token`;var Pc=class extends X{};Pc.errorCode=`method_not_allowed`;var Fc=class extends X{};Fc.errorCode=`too_many_requests`;var Ic=class extends X{};Ic.errorCode=`invalid_client_metadata`;var Lc=class extends X{};Lc.errorCode=`insufficient_scope`;var Rc=class extends X{};Rc.errorCode=`invalid_target`;const zc={[Sc.errorCode]:Sc,[Cc.errorCode]:Cc,[wc.errorCode]:wc,[Tc.errorCode]:Tc,[Ec.errorCode]:Ec,[Dc.errorCode]:Dc,[Oc.errorCode]:Oc,[kc.errorCode]:kc,[Ac.errorCode]:Ac,[jc.errorCode]:jc,[Mc.errorCode]:Mc,[Nc.errorCode]:Nc,[Pc.errorCode]:Pc,[Fc.errorCode]:Fc,[Ic.errorCode]:Ic,[Lc.errorCode]:Lc,[Rc.errorCode]:Rc};var Bc=class extends Error{constructor(e){super(e??`Unauthorized`)}};function Vc(e){return[`client_secret_basic`,`client_secret_post`,`none`].includes(e)}const Hc=`code`,Uc=`S256`;function Wc(e,t){let n=e.client_secret!==void 0;return`token_endpoint_auth_method`in e&&e.token_endpoint_auth_method&&Vc(e.token_endpoint_auth_method)&&(t.length===0||t.includes(e.token_endpoint_auth_method))?e.token_endpoint_auth_method:t.length===0?n?`client_secret_basic`:`none`:n&&t.includes(`client_secret_basic`)?`client_secret_basic`:n&&t.includes(`client_secret_post`)?`client_secret_post`:t.includes(`none`)?`none`:n?`client_secret_post`:`none`}function Gc(e,t,n,r){let{client_id:i,client_secret:a}=t;switch(e){case`client_secret_basic`:Kc(i,a,n);return;case`client_secret_post`:qc(i,a,r);return;case`none`:Jc(i,r);return;default:throw Error(`Unsupported client authentication method: ${e}`)}}function Kc(e,t,n){if(!t)throw Error(`client_secret_basic authentication requires a client_secret`);let r=btoa(`${e}:${t}`);n.set(`Authorization`,`Basic ${r}`)}function qc(e,t,n){n.set(`client_id`,e),t&&n.set(`client_secret`,t)}function Jc(e,t){t.set(`client_id`,e)}async function Yc(e){let t=e instanceof Response?e.status:void 0,n=e instanceof Response?await e.text():e;try{let{error:e,error_description:t,error_uri:r}=hc.parse(JSON.parse(n));return new(zc[e]||kc)(t||``,r)}catch(e){return new kc(`${t?`HTTP ${t}: `:``}Invalid OAuth error response: ${e}. Raw body: ${n}`)}}async function Xc(e,t){try{return await Zc(e,t)}catch(n){if(n instanceof Cc||n instanceof Tc)return await e.invalidateCredentials?.(`all`),await Zc(e,t);if(n instanceof wc)return await e.invalidateCredentials?.(`tokens`),await Zc(e,t);throw n}}async function Zc(e,{serverUrl:t,authorizationCode:n,scope:r,resourceMetadataUrl:i,fetchFn:a}){let o=await e.discoveryState?.(),s,c,l,u=i;if(!u&&o?.resourceMetadataUrl&&(u=new URL(o.resourceMetadataUrl)),o?.authorizationServerUrl){if(c=o.authorizationServerUrl,s=o.resourceMetadata,l=o.authorizationServerMetadata??await ll(c,{fetchFn:a}),!s)try{s=await nl(t,{resourceMetadataUrl:u},a)}catch{}(l!==o.authorizationServerMetadata||s!==o.resourceMetadata)&&await e.saveDiscoveryState?.({authorizationServerUrl:String(c),resourceMetadataUrl:u?.toString(),resourceMetadata:s,authorizationServerMetadata:l})}else{let n=await ul(t,{resourceMetadataUrl:u,fetchFn:a});c=n.authorizationServerUrl,l=n.authorizationServerMetadata,s=n.resourceMetadata,await e.saveDiscoveryState?.({authorizationServerUrl:String(c),resourceMetadataUrl:u?.toString(),resourceMetadata:s,authorizationServerMetadata:l})}let d=await $c(t,e,s),f=r||s?.scopes_supported?.join(` `)||e.clientMetadata.scope,p=await Promise.resolve(e.clientInformation());if(!p){if(n!==void 0)throw Error(`Existing OAuth client information is required when exchanging an authorization code`);let t=l?.client_id_metadata_document_supported===!0,r=e.clientMetadataUrl;if(r&&!Qc(r))throw new Ic(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${r}`);if(t&&r)p={client_id:r},await e.saveClientInformation?.(p);else{if(!e.saveClientInformation)throw Error(`OAuth client information must be saveable for dynamic registration`);let t=await gl(c,{metadata:l,clientMetadata:e.clientMetadata,scope:f,fetchFn:a});await e.saveClientInformation(t),p=t}}let m=!e.redirectUrl;if(n!==void 0||m){let t=await hl(e,c,{metadata:l,resource:d,authorizationCode:n,fetchFn:a});return await e.saveTokens(t),`AUTHORIZED`}let h=await e.tokens();if(h?.refresh_token)try{let t=await ml(c,{metadata:l,clientInformation:p,refreshToken:h.refresh_token,resource:d,addClientAuthentication:e.addClientAuthentication,fetchFn:a});return await e.saveTokens(t),`AUTHORIZED`}catch(e){if(!(!(e instanceof X)||e instanceof kc))throw e}let g=e.state?await e.state():void 0,{authorizationUrl:_,codeVerifier:v}=await dl(c,{metadata:l,clientInformation:p,state:g,redirectUrl:e.redirectUrl,scope:f,resource:d});return await e.saveCodeVerifier(v),await e.redirectToAuthorization(_),`REDIRECT`}function Qc(e){if(!e)return!1;try{let t=new URL(e);return t.protocol===`https:`&&t.pathname!==`/`}catch{return!1}}async function $c(e,t,n){let r=bc(e);if(t.validateResourceURL)return await t.validateResourceURL(r,n?.resource);if(n){if(!xc({requestedResource:r,configuredResource:n.resource}))throw Error(`Protected resource ${n.resource} does not match expected ${r} (or origin)`);return new URL(n.resource)}}function el(e){let t=e.headers.get(`WWW-Authenticate`);if(!t)return{};let[n,r]=t.split(` `);if(n.toLowerCase()!==`bearer`||!r)return{};let i=tl(e,`resource_metadata`)||void 0,a;if(i)try{a=new URL(i)}catch{}let o=tl(e,`scope`)||void 0,s=tl(e,`error`)||void 0;return{resourceMetadataUrl:a,scope:o,error:s}}function tl(e,t){let n=e.headers.get(`WWW-Authenticate`);if(!n)return null;let r=RegExp(`${t}=(?:"([^"]+)"|([^\\s,]+))`),i=n.match(r);return i?i[1]||i[2]:null}async function nl(e,t,n=fetch){let r=await sl(e,`oauth-protected-resource`,n,{protocolVersion:t?.protocolVersion,metadataUrl:t?.resourceMetadataUrl});if(!r||r.status===404)throw await r?.body?.cancel(),Error(`Resource server does not implement OAuth 2.0 Protected Resource Metadata.`);if(!r.ok)throw await r.body?.cancel(),Error(`HTTP ${r.status} trying to load well-known OAuth protected resource metadata.`);return dc.parse(await r.json())}async function rl(e,t,n=fetch){try{return await n(e,{headers:t})}catch(r){if(r instanceof TypeError)return t?rl(e,void 0,n):void 0;throw r}}function il(e,t=``,n={}){return t.endsWith(`/`)&&(t=t.slice(0,-1)),n.prependPathname?`${t}/.well-known/${e}`:`/.well-known/${e}${t}`}async function al(e,t,n=fetch){return await rl(e,{"MCP-Protocol-Version":t},n)}function ol(e,t){return!e||e.status>=400&&e.status<500&&t!==`/`}async function sl(e,t,n,r){let i=new URL(e),a=r?.protocolVersion??`2025-11-25`,o;if(r?.metadataUrl)o=new URL(r.metadataUrl);else{let e=il(t,i.pathname);o=new URL(e,r?.metadataServerUrl??i),o.search=i.search}let s=await al(o,a,n);return!r?.metadataUrl&&ol(s,i.pathname)&&(s=await al(new URL(`/.well-known/${t}`,i),a,n)),s}function cl(e){let t=typeof e==`string`?new URL(e):e,n=t.pathname!==`/`,r=[];if(!n)return r.push({url:new URL(`/.well-known/oauth-authorization-server`,t.origin),type:`oauth`}),r.push({url:new URL(`/.well-known/openid-configuration`,t.origin),type:`oidc`}),r;let i=t.pathname;return i.endsWith(`/`)&&(i=i.slice(0,-1)),r.push({url:new URL(`/.well-known/oauth-authorization-server${i}`,t.origin),type:`oauth`}),r.push({url:new URL(`/.well-known/openid-configuration${i}`,t.origin),type:`oidc`}),r.push({url:new URL(`${i}/.well-known/openid-configuration`,t.origin),type:`oidc`}),r}async function ll(e,{fetchFn:t=fetch,protocolVersion:n=bt}={}){let r={"MCP-Protocol-Version":n,Accept:`application/json`},i=cl(e);for(let{url:e,type:n}of i){let i=await rl(e,r,t);if(i){if(!i.ok){if(await i.body?.cancel(),i.status>=400&&i.status<500)continue;throw Error(`HTTP ${i.status} trying to load ${n===`oauth`?`OAuth`:`OpenID provider`} metadata from ${e}`)}return n===`oauth`?fc.parse(await i.json()):pc.parse(await i.json())}}}async function ul(e,t){let n,r;try{n=await nl(e,{resourceMetadataUrl:t?.resourceMetadataUrl},t?.fetchFn),n.authorization_servers&&n.authorization_servers.length>0&&(r=n.authorization_servers[0])}catch{}r||=String(new URL(`/`,e));let i=await ll(r,{fetchFn:t?.fetchFn});return{authorizationServerUrl:r,authorizationServerMetadata:i,resourceMetadata:n}}async function dl(e,{metadata:t,clientInformation:n,redirectUrl:r,scope:i,state:a,resource:o}){let s;if(t){if(s=new URL(t.authorization_endpoint),!t.response_types_supported.includes(Hc))throw Error(`Incompatible auth server: does not support response type ${Hc}`);if(t.code_challenge_methods_supported&&!t.code_challenge_methods_supported.includes(Uc))throw Error(`Incompatible auth server: does not support code challenge method ${Uc}`)}else s=new URL(`/authorize`,e);let c=await uc(),l=c.code_verifier,u=c.code_challenge;return s.searchParams.set(`response_type`,Hc),s.searchParams.set(`client_id`,n.client_id),s.searchParams.set(`code_challenge`,u),s.searchParams.set(`code_challenge_method`,Uc),s.searchParams.set(`redirect_uri`,String(r)),a&&s.searchParams.set(`state`,a),i&&s.searchParams.set(`scope`,i),i?.includes(`offline_access`)&&s.searchParams.append(`prompt`,`consent`),o&&s.searchParams.set(`resource`,o.href),{authorizationUrl:s,codeVerifier:l}}function fl(e,t,n){return new URLSearchParams({grant_type:`authorization_code`,code:e,code_verifier:t,redirect_uri:String(n)})}async function pl(e,{metadata:t,tokenRequestParams:n,clientInformation:r,addClientAuthentication:i,resource:a,fetchFn:o}){let s=t?.token_endpoint?new URL(t.token_endpoint):new URL(`/token`,e),c=new Headers({"Content-Type":`application/x-www-form-urlencoded`,Accept:`application/json`});a&&n.set(`resource`,a.href),i?await i(c,n,s,t):r&&Gc(Wc(r,t?.token_endpoint_auth_methods_supported??[]),r,c,n);let l=await(o??fetch)(s,{method:`POST`,headers:c,body:n});if(!l.ok)throw await Yc(l);return mc.parse(await l.json())}async function ml(e,{metadata:t,clientInformation:n,refreshToken:r,resource:i,addClientAuthentication:a,fetchFn:o}){return{refresh_token:r,...await pl(e,{metadata:t,tokenRequestParams:new URLSearchParams({grant_type:`refresh_token`,refresh_token:r}),clientInformation:n,addClientAuthentication:a,resource:i,fetchFn:o})}}async function hl(e,t,{metadata:n,resource:r,authorizationCode:i,fetchFn:a}={}){let o=e.clientMetadata.scope,s;if(e.prepareTokenRequest&&(s=await e.prepareTokenRequest(o)),!s){if(!i)throw Error(`Either provider.prepareTokenRequest() or authorizationCode is required`);if(!e.redirectUrl)throw Error(`redirectUrl is required for authorization_code flow`);s=fl(i,await e.codeVerifier(),e.redirectUrl)}let c=await e.clientInformation();return pl(t,{metadata:n,tokenRequestParams:s,clientInformation:c??void 0,addClientAuthentication:e.addClientAuthentication,resource:r,fetchFn:a})}async function gl(e,{metadata:t,clientMetadata:n,scope:r,fetchFn:i}){let a;if(t){if(!t.registration_endpoint)throw Error(`Incompatible auth server: does not support dynamic client registration`);a=new URL(t.registration_endpoint)}else a=new URL(`/register`,e);let o=await(i??fetch)(a,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...n,...r===void 0?{}:{scope:r}})});if(!o.ok)throw await Yc(o);return yc.parse(await o.json())}var _l=class extends Error{constructor(e,t){super(e),this.name=`ParseError`,this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}};function vl(e){}function yl(e){if(typeof e==`function`)throw TypeError("`config` must be an object, got a function instead. Did you mean `createParser({onEvent: fn})`?");let{onEvent:t=vl,onError:n=vl,onRetry:r=vl,onComment:i,maxBufferSize:a}=e,o=[],s=0,c=!0,l,u=``,d=0,f,p=!1;function m(e){if(p)throw Error("Cannot feed parser: it was terminated after exceeding the configured max buffer size. Call `reset()` to resume parsing.");if(c&&(c=!1,e.charCodeAt(0)===239&&e.charCodeAt(1)===187&&e.charCodeAt(2)===191&&(e=e.slice(3))),o.length===0){let t=g(e);t!==``&&(o.push(t),s=t.length),h();return}if(e.indexOf(`
51
+ `);if(e===-1)return null;let t=this._buffer.toString(`utf8`,0,e).replace(/\r$/,``);return this._buffer=this._buffer.subarray(e+1),Ys(t)}clear(){this._buffer=void 0}};function Ys(e){return lt.parse(JSON.parse(e))}function Xs(e){return JSON.stringify(e)+`
52
+ `}var Zs=class{constructor(e=er.stdin,t=er.stdout){this._stdin=e,this._stdout=t,this._readBuffer=new Js,this._started=!1,this._ondata=e=>{this._readBuffer.append(e),this.processReadBuffer()},this._onerror=e=>{this.onerror?.(e)}}async start(){if(this._started)throw Error(`StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.`);this._started=!0,this._stdin.on(`data`,this._ondata),this._stdin.on(`error`,this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off(`data`,this._ondata),this._stdin.off(`error`,this._onerror),this._stdin.listenerCount(`data`)===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(t=>{let n=Xs(e);this._stdout.write(n)?t():this._stdout.once(`drain`,t)})}};function Qs(e){if(e.platform!==`darwin`)return{kind:`unchanged`};let t;try{t=e.realpath(e.bundleAnchorPath)}catch(e){return{kind:`unreadable`,reason:e instanceof Error?e.message:String(e)}}let n;try{n=e.statInode(t)}catch(e){return{kind:`unreadable`,reason:e instanceof Error?e.message:String(e)}}return n===e.currentInode?{kind:`unchanged`}:{kind:`replaced`,currentInode:e.currentInode,onDiskInode:n}}function $s(e){let t=e.setInterval??setInterval,n=e.clearInterval??clearInterval,r=e.intervalMs??3e5,i=!0,a=!1,o=!1,s=t(()=>{if(!i)return;let t;try{t=e.detect()}catch(t){e.log(`bundle identity check threw unexpectedly (contract violation): ${t instanceof Error?t.message:String(t)}`);return}if(t.kind===`unreadable`){o||(o=!0,e.log(`bundle identity check unreadable${t.reason?`: ${t.reason}`:``} — will retry on next tick`));return}o&&(o=!1,e.log(`bundle identity check recovered from unreadable`)),t.kind!==`unchanged`&&(i=!1,e.onReplaced(t))},r);return typeof s.unref==`function`&&s.unref(),{stop:()=>{a||(a=!0,i=!1,n(s))}}}function ec(e,t){let n;try{n=t.realpathSync(e)}catch(e){t.log(`[mcp] bundle identity boot capture unreadable (realpath failed): ${e instanceof Error?e.message:String(e)}`);return}let r;try{r=t.statInoSync(n)}catch(e){t.log(`[mcp] bundle identity boot capture unreadable (stat failed): ${e instanceof Error?e.message:String(e)}`);return}return{resolvedPath:n,inode:r}}function tc(e){let t=e.scheduler??{setInterval:(e,t)=>globalThis.setInterval(e,t),clearInterval:e=>globalThis.clearInterval(e)},n=e.getPpid();if(n<=1)return{stop:()=>{}};let r=!1,i=t.setInterval(()=>{if(r)return;let a=e.getPpid();a!==n&&(r=!0,t.clearInterval(i),e.onHostGone(`host process exited (ppid ${n} -> ${a})`))},e.intervalMs??1e3);return i.unref?.(),{stop:()=>t.clearInterval(i)}}function nc(e){let t=t=>{try{e.log(t)}catch{}},n=e.transport.onclose;e.transport.onclose=()=>{t(`[mcp] stdio transport closed (internal shutdown)`),n?.()},e.stdin.once(`end`,()=>t(`[mcp] stdin EOF (host closed pipe)`)),e.stdin.once(`close`,()=>t(`[mcp] stdin closed`)),e.process.on(`exit`,e=>{t(`[mcp] exit code=${e}`)}),e.process.on(`uncaughtExceptionMonitor`,(e,n)=>{t(`[mcp] uncaughtException origin=${n}: ${e instanceof Error?e.stack??e.message:String(e)}`)})}function rc(e){return e?e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}:{}}function ic(e=fetch,t){return t?async(n,r)=>e(n,{...t,...r,headers:r?.headers?{...rc(t.headers),...rc(r.headers)}:t.headers}):e}let ac;ac=globalThis.crypto?.webcrypto??globalThis.crypto??import(`node:crypto`).then(e=>e.webcrypto);async function oc(e){return(await ac).getRandomValues(new Uint8Array(e))}async function sc(e){let t=``;for(;t.length<e;){let n=await oc(e-t.length);for(let e of n)e<198&&(t+=`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~`[e%66])}return t}async function cc(e){return await sc(e)}async function lc(e){let t=await(await ac).subtle.digest(`SHA-256`,new TextEncoder().encode(e));return btoa(String.fromCharCode(...new Uint8Array(t))).replace(/\//g,`_`).replace(/\+/g,`-`).replace(/=/g,``)}async function uc(e){if(e||=43,e<43||e>128)throw`Expected a length between 43 and 128. Received ${e}.`;let t=await cc(e);return{code_verifier:t,code_challenge:await lc(t)}}const Y=S().superRefine((e,t)=>{if(!URL.canParse(e))return t.addIssue({code:Er.custom,message:`URL must be parseable`,fatal:!0}),i}).refine(e=>{let t=new URL(e);return t.protocol!==`javascript:`&&t.protocol!==`data:`&&t.protocol!==`vbscript:`},{message:`URL cannot use javascript:, data:, or vbscript: scheme`}),dc=m({resource:b().url(),authorization_servers:h(Y).optional(),jwks_uri:b().url().optional(),scopes_supported:h(b()).optional(),bearer_methods_supported:h(b()).optional(),resource_signing_alg_values_supported:h(b()).optional(),resource_name:b().optional(),resource_documentation:b().optional(),resource_policy_uri:b().url().optional(),resource_tos_uri:b().url().optional(),tls_client_certificate_bound_access_tokens:u().optional(),authorization_details_types_supported:h(b()).optional(),dpop_signing_alg_values_supported:h(b()).optional(),dpop_bound_access_tokens_required:u().optional()}),fc=m({issuer:b(),authorization_endpoint:Y,token_endpoint:Y,registration_endpoint:Y.optional(),scopes_supported:h(b()).optional(),response_types_supported:h(b()),response_modes_supported:h(b()).optional(),grant_types_supported:h(b()).optional(),token_endpoint_auth_methods_supported:h(b()).optional(),token_endpoint_auth_signing_alg_values_supported:h(b()).optional(),service_documentation:Y.optional(),revocation_endpoint:Y.optional(),revocation_endpoint_auth_methods_supported:h(b()).optional(),revocation_endpoint_auth_signing_alg_values_supported:h(b()).optional(),introspection_endpoint:b().optional(),introspection_endpoint_auth_methods_supported:h(b()).optional(),introspection_endpoint_auth_signing_alg_values_supported:h(b()).optional(),code_challenge_methods_supported:h(b()).optional(),client_id_metadata_document_supported:u().optional()}),pc=g({...m({issuer:b(),authorization_endpoint:Y,token_endpoint:Y,userinfo_endpoint:Y.optional(),jwks_uri:Y,registration_endpoint:Y.optional(),scopes_supported:h(b()).optional(),response_types_supported:h(b()),response_modes_supported:h(b()).optional(),grant_types_supported:h(b()).optional(),acr_values_supported:h(b()).optional(),subject_types_supported:h(b()),id_token_signing_alg_values_supported:h(b()),id_token_encryption_alg_values_supported:h(b()).optional(),id_token_encryption_enc_values_supported:h(b()).optional(),userinfo_signing_alg_values_supported:h(b()).optional(),userinfo_encryption_alg_values_supported:h(b()).optional(),userinfo_encryption_enc_values_supported:h(b()).optional(),request_object_signing_alg_values_supported:h(b()).optional(),request_object_encryption_alg_values_supported:h(b()).optional(),request_object_encryption_enc_values_supported:h(b()).optional(),token_endpoint_auth_methods_supported:h(b()).optional(),token_endpoint_auth_signing_alg_values_supported:h(b()).optional(),display_values_supported:h(b()).optional(),claim_types_supported:h(b()).optional(),claims_supported:h(b()).optional(),service_documentation:b().optional(),claims_locales_supported:h(b()).optional(),ui_locales_supported:h(b()).optional(),claims_parameter_supported:u().optional(),request_parameter_supported:u().optional(),request_uri_parameter_supported:u().optional(),require_request_uri_registration:u().optional(),op_policy_uri:Y.optional(),op_tos_uri:Y.optional(),client_id_metadata_document_supported:u().optional()}).shape,...fc.pick({code_challenge_methods_supported:!0}).shape}),mc=g({access_token:b(),id_token:b().optional(),token_type:b(),expires_in:Or().optional(),scope:b().optional(),refresh_token:b().optional()}).strip(),hc=g({error:b(),error_description:b().optional(),error_uri:b().optional()}),gc=Y.optional().or(p(``).transform(()=>void 0)),_c=g({redirect_uris:h(Y),token_endpoint_auth_method:b().optional(),grant_types:h(b()).optional(),response_types:h(b()).optional(),client_name:b().optional(),client_uri:Y.optional(),logo_uri:gc,scope:b().optional(),contacts:h(b()).optional(),tos_uri:gc,policy_uri:b().optional(),jwks_uri:Y.optional(),jwks:y().optional(),software_id:b().optional(),software_version:b().optional(),software_statement:b().optional()}).strip(),vc=g({client_id:b(),client_secret:b().optional(),client_id_issued_at:_().optional(),client_secret_expires_at:_().optional()}).strip(),yc=_c.merge(vc);g({error:b(),error_description:b().optional()}).strip(),g({token:b(),token_type_hint:b().optional()}).strip();function bc(e){let t=typeof e==`string`?new URL(e):new URL(e.href);return t.hash=``,t}function xc({requestedResource:e,configuredResource:t}){let n=typeof e==`string`?new URL(e):new URL(e.href),r=typeof t==`string`?new URL(t):new URL(t.href);if(n.origin!==r.origin||n.pathname.length<r.pathname.length)return!1;let i=n.pathname.endsWith(`/`)?n.pathname:n.pathname+`/`,a=r.pathname.endsWith(`/`)?r.pathname:r.pathname+`/`;return i.startsWith(a)}var X=class extends Error{constructor(e,t){super(e),this.errorUri=t,this.name=this.constructor.name}toResponseObject(){let e={error:this.errorCode,error_description:this.message};return this.errorUri&&(e.error_uri=this.errorUri),e}get errorCode(){return this.constructor.errorCode}},Sc=class extends X{};Sc.errorCode=`invalid_request`;var Cc=class extends X{};Cc.errorCode=`invalid_client`;var wc=class extends X{};wc.errorCode=`invalid_grant`;var Tc=class extends X{};Tc.errorCode=`unauthorized_client`;var Ec=class extends X{};Ec.errorCode=`unsupported_grant_type`;var Dc=class extends X{};Dc.errorCode=`invalid_scope`;var Oc=class extends X{};Oc.errorCode=`access_denied`;var kc=class extends X{};kc.errorCode=`server_error`;var Ac=class extends X{};Ac.errorCode=`temporarily_unavailable`;var jc=class extends X{};jc.errorCode=`unsupported_response_type`;var Mc=class extends X{};Mc.errorCode=`unsupported_token_type`;var Nc=class extends X{};Nc.errorCode=`invalid_token`;var Pc=class extends X{};Pc.errorCode=`method_not_allowed`;var Fc=class extends X{};Fc.errorCode=`too_many_requests`;var Ic=class extends X{};Ic.errorCode=`invalid_client_metadata`;var Lc=class extends X{};Lc.errorCode=`insufficient_scope`;var Rc=class extends X{};Rc.errorCode=`invalid_target`;const zc={[Sc.errorCode]:Sc,[Cc.errorCode]:Cc,[wc.errorCode]:wc,[Tc.errorCode]:Tc,[Ec.errorCode]:Ec,[Dc.errorCode]:Dc,[Oc.errorCode]:Oc,[kc.errorCode]:kc,[Ac.errorCode]:Ac,[jc.errorCode]:jc,[Mc.errorCode]:Mc,[Nc.errorCode]:Nc,[Pc.errorCode]:Pc,[Fc.errorCode]:Fc,[Ic.errorCode]:Ic,[Lc.errorCode]:Lc,[Rc.errorCode]:Rc};var Bc=class extends Error{constructor(e){super(e??`Unauthorized`)}};function Vc(e){return[`client_secret_basic`,`client_secret_post`,`none`].includes(e)}const Hc=`code`,Uc=`S256`;function Wc(e,t){let n=e.client_secret!==void 0;return`token_endpoint_auth_method`in e&&e.token_endpoint_auth_method&&Vc(e.token_endpoint_auth_method)&&(t.length===0||t.includes(e.token_endpoint_auth_method))?e.token_endpoint_auth_method:t.length===0?n?`client_secret_basic`:`none`:n&&t.includes(`client_secret_basic`)?`client_secret_basic`:n&&t.includes(`client_secret_post`)?`client_secret_post`:t.includes(`none`)?`none`:n?`client_secret_post`:`none`}function Gc(e,t,n,r){let{client_id:i,client_secret:a}=t;switch(e){case`client_secret_basic`:Kc(i,a,n);return;case`client_secret_post`:qc(i,a,r);return;case`none`:Jc(i,r);return;default:throw Error(`Unsupported client authentication method: ${e}`)}}function Kc(e,t,n){if(!t)throw Error(`client_secret_basic authentication requires a client_secret`);let r=btoa(`${e}:${t}`);n.set(`Authorization`,`Basic ${r}`)}function qc(e,t,n){n.set(`client_id`,e),t&&n.set(`client_secret`,t)}function Jc(e,t){t.set(`client_id`,e)}async function Yc(e){let t=e instanceof Response?e.status:void 0,n=e instanceof Response?await e.text():e;try{let{error:e,error_description:t,error_uri:r}=hc.parse(JSON.parse(n));return new(zc[e]||kc)(t||``,r)}catch(e){return new kc(`${t?`HTTP ${t}: `:``}Invalid OAuth error response: ${e}. Raw body: ${n}`)}}async function Xc(e,t){try{return await Zc(e,t)}catch(n){if(n instanceof Cc||n instanceof Tc)return await e.invalidateCredentials?.(`all`),await Zc(e,t);if(n instanceof wc)return await e.invalidateCredentials?.(`tokens`),await Zc(e,t);throw n}}async function Zc(e,{serverUrl:t,authorizationCode:n,scope:r,resourceMetadataUrl:i,fetchFn:a}){let o=await e.discoveryState?.(),s,c,l,u=i;if(!u&&o?.resourceMetadataUrl&&(u=new URL(o.resourceMetadataUrl)),o?.authorizationServerUrl){if(c=o.authorizationServerUrl,s=o.resourceMetadata,l=o.authorizationServerMetadata??await ll(c,{fetchFn:a}),!s)try{s=await nl(t,{resourceMetadataUrl:u},a)}catch{}(l!==o.authorizationServerMetadata||s!==o.resourceMetadata)&&await e.saveDiscoveryState?.({authorizationServerUrl:String(c),resourceMetadataUrl:u?.toString(),resourceMetadata:s,authorizationServerMetadata:l})}else{let n=await ul(t,{resourceMetadataUrl:u,fetchFn:a});c=n.authorizationServerUrl,l=n.authorizationServerMetadata,s=n.resourceMetadata,await e.saveDiscoveryState?.({authorizationServerUrl:String(c),resourceMetadataUrl:u?.toString(),resourceMetadata:s,authorizationServerMetadata:l})}let d=await $c(t,e,s),f=r||s?.scopes_supported?.join(` `)||e.clientMetadata.scope,p=await Promise.resolve(e.clientInformation());if(!p){if(n!==void 0)throw Error(`Existing OAuth client information is required when exchanging an authorization code`);let t=l?.client_id_metadata_document_supported===!0,r=e.clientMetadataUrl;if(r&&!Qc(r))throw new Ic(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${r}`);if(t&&r)p={client_id:r},await e.saveClientInformation?.(p);else{if(!e.saveClientInformation)throw Error(`OAuth client information must be saveable for dynamic registration`);let t=await gl(c,{metadata:l,clientMetadata:e.clientMetadata,scope:f,fetchFn:a});await e.saveClientInformation(t),p=t}}let m=!e.redirectUrl;if(n!==void 0||m){let t=await hl(e,c,{metadata:l,resource:d,authorizationCode:n,fetchFn:a});return await e.saveTokens(t),`AUTHORIZED`}let h=await e.tokens();if(h?.refresh_token)try{let t=await ml(c,{metadata:l,clientInformation:p,refreshToken:h.refresh_token,resource:d,addClientAuthentication:e.addClientAuthentication,fetchFn:a});return await e.saveTokens(t),`AUTHORIZED`}catch(e){if(!(!(e instanceof X)||e instanceof kc))throw e}let g=e.state?await e.state():void 0,{authorizationUrl:_,codeVerifier:v}=await dl(c,{metadata:l,clientInformation:p,state:g,redirectUrl:e.redirectUrl,scope:f,resource:d});return await e.saveCodeVerifier(v),await e.redirectToAuthorization(_),`REDIRECT`}function Qc(e){if(!e)return!1;try{let t=new URL(e);return t.protocol===`https:`&&t.pathname!==`/`}catch{return!1}}async function $c(e,t,n){let r=bc(e);if(t.validateResourceURL)return await t.validateResourceURL(r,n?.resource);if(n){if(!xc({requestedResource:r,configuredResource:n.resource}))throw Error(`Protected resource ${n.resource} does not match expected ${r} (or origin)`);return new URL(n.resource)}}function el(e){let t=e.headers.get(`WWW-Authenticate`);if(!t)return{};let[n,r]=t.split(` `);if(n.toLowerCase()!==`bearer`||!r)return{};let i=tl(e,`resource_metadata`)||void 0,a;if(i)try{a=new URL(i)}catch{}let o=tl(e,`scope`)||void 0,s=tl(e,`error`)||void 0;return{resourceMetadataUrl:a,scope:o,error:s}}function tl(e,t){let n=e.headers.get(`WWW-Authenticate`);if(!n)return null;let r=RegExp(`${t}=(?:"([^"]+)"|([^\\s,]+))`),i=n.match(r);return i?i[1]||i[2]:null}async function nl(e,t,n=fetch){let r=await sl(e,`oauth-protected-resource`,n,{protocolVersion:t?.protocolVersion,metadataUrl:t?.resourceMetadataUrl});if(!r||r.status===404)throw await r?.body?.cancel(),Error(`Resource server does not implement OAuth 2.0 Protected Resource Metadata.`);if(!r.ok)throw await r.body?.cancel(),Error(`HTTP ${r.status} trying to load well-known OAuth protected resource metadata.`);return dc.parse(await r.json())}async function rl(e,t,n=fetch){try{return await n(e,{headers:t})}catch(r){if(r instanceof TypeError)return t?rl(e,void 0,n):void 0;throw r}}function il(e,t=``,n={}){return t.endsWith(`/`)&&(t=t.slice(0,-1)),n.prependPathname?`${t}/.well-known/${e}`:`/.well-known/${e}${t}`}async function al(e,t,n=fetch){return await rl(e,{"MCP-Protocol-Version":t},n)}function ol(e,t){return!e||e.status>=400&&e.status<500&&t!==`/`}async function sl(e,t,n,r){let i=new URL(e),a=r?.protocolVersion??`2025-11-25`,o;if(r?.metadataUrl)o=new URL(r.metadataUrl);else{let e=il(t,i.pathname);o=new URL(e,r?.metadataServerUrl??i),o.search=i.search}let s=await al(o,a,n);return!r?.metadataUrl&&ol(s,i.pathname)&&(s=await al(new URL(`/.well-known/${t}`,i),a,n)),s}function cl(e){let t=typeof e==`string`?new URL(e):e,n=t.pathname!==`/`,r=[];if(!n)return r.push({url:new URL(`/.well-known/oauth-authorization-server`,t.origin),type:`oauth`}),r.push({url:new URL(`/.well-known/openid-configuration`,t.origin),type:`oidc`}),r;let i=t.pathname;return i.endsWith(`/`)&&(i=i.slice(0,-1)),r.push({url:new URL(`/.well-known/oauth-authorization-server${i}`,t.origin),type:`oauth`}),r.push({url:new URL(`/.well-known/openid-configuration${i}`,t.origin),type:`oidc`}),r.push({url:new URL(`${i}/.well-known/openid-configuration`,t.origin),type:`oidc`}),r}async function ll(e,{fetchFn:t=fetch,protocolVersion:n=Ct}={}){let r={"MCP-Protocol-Version":n,Accept:`application/json`},i=cl(e);for(let{url:e,type:n}of i){let i=await rl(e,r,t);if(i){if(!i.ok){if(await i.body?.cancel(),i.status>=400&&i.status<500)continue;throw Error(`HTTP ${i.status} trying to load ${n===`oauth`?`OAuth`:`OpenID provider`} metadata from ${e}`)}return n===`oauth`?fc.parse(await i.json()):pc.parse(await i.json())}}}async function ul(e,t){let n,r;try{n=await nl(e,{resourceMetadataUrl:t?.resourceMetadataUrl},t?.fetchFn),n.authorization_servers&&n.authorization_servers.length>0&&(r=n.authorization_servers[0])}catch{}r||=String(new URL(`/`,e));let i=await ll(r,{fetchFn:t?.fetchFn});return{authorizationServerUrl:r,authorizationServerMetadata:i,resourceMetadata:n}}async function dl(e,{metadata:t,clientInformation:n,redirectUrl:r,scope:i,state:a,resource:o}){let s;if(t){if(s=new URL(t.authorization_endpoint),!t.response_types_supported.includes(Hc))throw Error(`Incompatible auth server: does not support response type ${Hc}`);if(t.code_challenge_methods_supported&&!t.code_challenge_methods_supported.includes(Uc))throw Error(`Incompatible auth server: does not support code challenge method ${Uc}`)}else s=new URL(`/authorize`,e);let c=await uc(),l=c.code_verifier,u=c.code_challenge;return s.searchParams.set(`response_type`,Hc),s.searchParams.set(`client_id`,n.client_id),s.searchParams.set(`code_challenge`,u),s.searchParams.set(`code_challenge_method`,Uc),s.searchParams.set(`redirect_uri`,String(r)),a&&s.searchParams.set(`state`,a),i&&s.searchParams.set(`scope`,i),i?.includes(`offline_access`)&&s.searchParams.append(`prompt`,`consent`),o&&s.searchParams.set(`resource`,o.href),{authorizationUrl:s,codeVerifier:l}}function fl(e,t,n){return new URLSearchParams({grant_type:`authorization_code`,code:e,code_verifier:t,redirect_uri:String(n)})}async function pl(e,{metadata:t,tokenRequestParams:n,clientInformation:r,addClientAuthentication:i,resource:a,fetchFn:o}){let s=t?.token_endpoint?new URL(t.token_endpoint):new URL(`/token`,e),c=new Headers({"Content-Type":`application/x-www-form-urlencoded`,Accept:`application/json`});a&&n.set(`resource`,a.href),i?await i(c,n,s,t):r&&Gc(Wc(r,t?.token_endpoint_auth_methods_supported??[]),r,c,n);let l=await(o??fetch)(s,{method:`POST`,headers:c,body:n});if(!l.ok)throw await Yc(l);return mc.parse(await l.json())}async function ml(e,{metadata:t,clientInformation:n,refreshToken:r,resource:i,addClientAuthentication:a,fetchFn:o}){return{refresh_token:r,...await pl(e,{metadata:t,tokenRequestParams:new URLSearchParams({grant_type:`refresh_token`,refresh_token:r}),clientInformation:n,addClientAuthentication:a,resource:i,fetchFn:o})}}async function hl(e,t,{metadata:n,resource:r,authorizationCode:i,fetchFn:a}={}){let o=e.clientMetadata.scope,s;if(e.prepareTokenRequest&&(s=await e.prepareTokenRequest(o)),!s){if(!i)throw Error(`Either provider.prepareTokenRequest() or authorizationCode is required`);if(!e.redirectUrl)throw Error(`redirectUrl is required for authorization_code flow`);s=fl(i,await e.codeVerifier(),e.redirectUrl)}let c=await e.clientInformation();return pl(t,{metadata:n,tokenRequestParams:s,clientInformation:c??void 0,addClientAuthentication:e.addClientAuthentication,resource:r,fetchFn:a})}async function gl(e,{metadata:t,clientMetadata:n,scope:r,fetchFn:i}){let a;if(t){if(!t.registration_endpoint)throw Error(`Incompatible auth server: does not support dynamic client registration`);a=new URL(t.registration_endpoint)}else a=new URL(`/register`,e);let o=await(i??fetch)(a,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...n,...r===void 0?{}:{scope:r}})});if(!o.ok)throw await Yc(o);return yc.parse(await o.json())}var _l=class extends Error{constructor(e,t){super(e),this.name=`ParseError`,this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}};function vl(e){}function yl(e){if(typeof e==`function`)throw TypeError("`config` must be an object, got a function instead. Did you mean `createParser({onEvent: fn})`?");let{onEvent:t=vl,onError:n=vl,onRetry:r=vl,onComment:i,maxBufferSize:a}=e,o=[],s=0,c=!0,l,u=``,d=0,f,p=!1;function m(e){if(p)throw Error("Cannot feed parser: it was terminated after exceeding the configured max buffer size. Call `reset()` to resume parsing.");if(c&&(c=!1,e.charCodeAt(0)===239&&e.charCodeAt(1)===187&&e.charCodeAt(2)===191&&(e=e.slice(3))),o.length===0){let t=g(e);t!==``&&(o.push(t),s=t.length),h();return}if(e.indexOf(`
53
53
  `)===-1&&e.indexOf(`\r`)===-1){o.push(e),s+=e.length,h();return}o.push(e);let t=o.join(``);o.length=0,s=0;let n=g(t);n!==``&&(o.push(n),s=n.length),h()}function h(){a!==void 0&&(s+u.length<=a||(p=!0,o.length=0,s=0,l=void 0,u=``,d=0,f=void 0,n(new _l(`Buffered data exceeded max buffer size of ${a} characters`,{type:`max-buffer-size-exceeded`}))))}function g(e){let n=0;if(e.indexOf(`\r`)===-1){let r=e.indexOf(`
54
54
  `,n);for(;r!==-1;){if(n===r){d>0&&t({id:l,event:f,data:u}),l=void 0,u=``,d=0,f=void 0,n=r+1,r=e.indexOf(`
55
55
  `,n);continue}let i=e.charCodeAt(n);if(bl(e,n,i)){let i=e.charCodeAt(n+5)===32?n+6:n+5,a=e.slice(i,r);if(d===0&&e.charCodeAt(r+1)===10){t({id:l,event:f,data:a}),l=void 0,u=``,f=void 0,n=r+2,r=e.indexOf(`
@@ -58,8 +58,8 @@ ${a}`,d++}else xl(e,n,i)?f=e.slice(e.charCodeAt(n+6)===32?n+7:n+6,r)||void 0:_(e
58
58
  `,n)}return e.slice(n)}for(;n<e.length;){let t=e.indexOf(`\r`,n),r=e.indexOf(`
59
59
  `,n),i=-1;if(t!==-1&&r!==-1?i=t<r?t:r:t===-1?r!==-1&&(i=r):i=t===e.length-1?-1:t,i===-1)break;_(e,n,i),n=i+1,e.charCodeAt(n-1)===13&&e.charCodeAt(n)===10&&n++}return e.slice(n)}function _(e,t,n){if(t===n){y();return}let r=e.charCodeAt(t);if(bl(e,t,r)){let r=e.charCodeAt(t+5)===32?t+6:t+5,i=e.slice(r,n);u=d===0?i:`${u}
60
60
  ${i}`,d++;return}if(xl(e,t,r)){f=e.slice(e.charCodeAt(t+6)===32?t+7:t+6,n)||void 0;return}if(r===105&&e.charCodeAt(t+1)===100&&e.charCodeAt(t+2)===58){let r=e.slice(e.charCodeAt(t+3)===32?t+4:t+3,n);l=r.includes(`\0`)?void 0:r;return}if(r===58){i&&i(e.slice(t,n).slice(e.charCodeAt(t+1)===32?2:1));return}let a=e.slice(t,n),o=a.indexOf(`:`);if(o===-1){v(a,``,a);return}let s=a.slice(0,o),c=a.charCodeAt(o+1)===32?2:1;v(s,a.slice(o+c),a)}function v(e,t,i){switch(e){case`event`:f=t||void 0;break;case`data`:u=d===0?t:`${u}
61
- ${t}`,d++;break;case`id`:l=t.includes(`\0`)?void 0:t;break;case`retry`:/^\d+$/.test(t)?r(parseInt(t,10)):n(new _l(`Invalid \`retry\` value: "${t}"`,{type:`invalid-retry`,value:t,line:i}));break;default:n(new _l(`Unknown field "${e.length>20?`${e.slice(0,20)}\u2026`:e}"`,{type:`unknown-field`,field:e,value:t,line:i}));break}}function y(){d>0&&t({id:l,event:f,data:u}),l=void 0,u=``,d=0,f=void 0}function b(e={}){if(e.consume&&o.length>0){let e=o.join(``);_(e,0,e.length)}c=!0,l=void 0,u=``,d=0,f=void 0,o.length=0,s=0,p=!1}return{feed:m,reset:b}}function bl(e,t,n){return n===100&&e.charCodeAt(t+1)===97&&e.charCodeAt(t+2)===116&&e.charCodeAt(t+3)===97&&e.charCodeAt(t+4)===58}function xl(e,t,n){return n===101&&e.charCodeAt(t+1)===118&&e.charCodeAt(t+2)===101&&e.charCodeAt(t+3)===110&&e.charCodeAt(t+4)===116&&e.charCodeAt(t+5)===58}var Sl=class extends TransformStream{constructor({onError:e,onRetry:t,onComment:n,maxBufferSize:r}={}){let i;super({start(a){i=yl({onEvent:e=>{a.enqueue(e)},onError(t){typeof e==`function`&&e(t),(e===`terminate`||t.type===`max-buffer-size-exceeded`)&&a.error(t)},onRetry:t,onComment:n,maxBufferSize:r})},transform(e){i.feed(e)}})}};const Cl={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2};var wl=class extends Error{constructor(e,t){super(`Streamable HTTP error: ${t}`),this.code=e}},Tl=class{constructor(e,t){this._hasCompletedAuthFlow=!1,this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._requestInit=t?.requestInit,this._authProvider=t?.authProvider,this._fetch=t?.fetch,this._fetchWithInit=ic(t?.fetch,t?.requestInit),this._sessionId=t?.sessionId,this._reconnectionOptions=t?.reconnectionOptions??Cl}async _authThenStart(){if(!this._authProvider)throw new Bc(`No auth provider`);let e;try{e=await Xc(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(e){throw this.onerror?.(e),e}if(e!==`AUTHORIZED`)throw new Bc;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){let e={};if(this._authProvider){let t=await this._authProvider.tokens();t&&(e.Authorization=`Bearer ${t.access_token}`)}this._sessionId&&(e[`mcp-session-id`]=this._sessionId),this._protocolVersion&&(e[`mcp-protocol-version`]=this._protocolVersion);let t=rc(this._requestInit?.headers);return new Headers({...e,...t})}async _startOrAuthSse(e){let{resumptionToken:t}=e;try{let n=await this._commonHeaders();n.set(`Accept`,`text/event-stream`),t&&n.set(`last-event-id`,t);let r=await(this._fetch??fetch)(this._url,{method:`GET`,headers:n,signal:this._abortController?.signal});if(!r.ok){if(await r.body?.cancel(),r.status===401&&this._authProvider)return await this._authThenStart();if(r.status===405)return;throw new wl(r.status,`Failed to open SSE stream: ${r.statusText}`)}this._handleSseStream(r.body,e,!0)}catch(e){throw this.onerror?.(e),e}}_getNextReconnectionDelay(e){if(this._serverRetryMs!==void 0)return this._serverRetryMs;let t=this._reconnectionOptions.initialReconnectionDelay,n=this._reconnectionOptions.reconnectionDelayGrowFactor,r=this._reconnectionOptions.maxReconnectionDelay;return Math.min(t*n**+e,r)}_scheduleReconnection(e,t=0){let n=this._reconnectionOptions.maxRetries;if(t>=n){this.onerror?.(Error(`Maximum reconnection attempts (${n}) exceeded.`));return}let r=this._getNextReconnectionDelay(t);this._reconnectionTimeout=setTimeout(()=>{this._startOrAuthSse(e).catch(n=>{this.onerror?.(Error(`Failed to reconnect SSE stream: ${n instanceof Error?n.message:String(n)}`)),this._scheduleReconnection(e,t+1)})},r)}_handleSseStream(e,t,n){if(!e)return;let{onresumptiontoken:r,replayMessageId:i}=t,a,o=!1,s=!1;(async()=>{try{let t=e.pipeThrough(new TextDecoderStream).pipeThrough(new Sl({onRetry:e=>{this._serverRetryMs=e}})).getReader();for(;;){let{value:e,done:n}=await t.read();if(n)break;if(e.id&&(a=e.id,o=!0,r?.(e.id)),e.data&&(!e.event||e.event===`message`))try{let t=ot.parse(JSON.parse(e.data));dt(t)&&(s=!0,i!==void 0&&(t.id=i)),this.onmessage?.(t)}catch(e){this.onerror?.(e)}}(n||o)&&!s&&this._abortController&&!this._abortController.signal.aborted&&this._scheduleReconnection({resumptionToken:a,onresumptiontoken:r,replayMessageId:i},0)}catch(e){if(this.onerror?.(Error(`SSE stream disconnected: ${e}`)),(n||o)&&!s&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:a,onresumptiontoken:r,replayMessageId:i},0)}catch(e){this.onerror?.(Error(`Failed to reconnect: ${e instanceof Error?e.message:String(e)}`))}}})()}async start(){if(this._abortController)throw Error(`StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.`);this._abortController=new AbortController}async finishAuth(e){if(!this._authProvider)throw new Bc(`No auth provider`);if(await Xc(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!==`AUTHORIZED`)throw new Bc(`Failed to authorize`)}async close(){this._reconnectionTimeout&&=(clearTimeout(this._reconnectionTimeout),void 0),this._abortController?.abort(),this.onclose?.()}async send(e,t){try{let{resumptionToken:n,onresumptiontoken:r}=t||{};if(n){this._startOrAuthSse({resumptionToken:n,replayMessageId:et(e)?e.id:void 0}).catch(e=>this.onerror?.(e));return}let i=await this._commonHeaders();i.set(`content-type`,`application/json`),i.set(`accept`,`application/json, text/event-stream`);let a={...this._requestInit,method:`POST`,headers:i,body:JSON.stringify(e),signal:this._abortController?.signal},o=await(this._fetch??fetch)(this._url,a),s=o.headers.get(`mcp-session-id`);if(s&&(this._sessionId=s),!o.ok){let t=await o.text().catch(()=>null);if(o.status===401&&this._authProvider){if(this._hasCompletedAuthFlow)throw new wl(401,`Server returned 401 after successful authentication`);let{resourceMetadataUrl:t,scope:n}=el(o);if(this._resourceMetadataUrl=t,this._scope=n,await Xc(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!==`AUTHORIZED`)throw new Bc;return this._hasCompletedAuthFlow=!0,this.send(e)}if(o.status===403&&this._authProvider){let{resourceMetadataUrl:t,scope:n,error:r}=el(o);if(r===`insufficient_scope`){let r=o.headers.get(`WWW-Authenticate`);if(this._lastUpscopingHeader===r)throw new wl(403,`Server returned 403 after trying upscoping`);if(n&&(this._scope=n),t&&(this._resourceMetadataUrl=t),this._lastUpscopingHeader=r??void 0,await Xc(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetch})!==`AUTHORIZED`)throw new Bc;return this.send(e)}}throw new wl(o.status,`Error POSTing to endpoint: ${t}`)}if(this._hasCompletedAuthFlow=!1,this._lastUpscopingHeader=void 0,o.status===202){await o.body?.cancel(),Ze(e)&&this._startOrAuthSse({resumptionToken:void 0}).catch(e=>this.onerror?.(e));return}let c=(Array.isArray(e)?e:[e]).filter(e=>`method`in e&&`id`in e&&e.id!==void 0).length>0,l=o.headers.get(`content-type`);if(c)if(l?.includes(`text/event-stream`))this._handleSseStream(o.body,{onresumptiontoken:r},!1);else if(l?.includes(`application/json`)){let e=await o.json(),t=Array.isArray(e)?e.map(e=>ot.parse(e)):[ot.parse(e)];for(let e of t)this.onmessage?.(e)}else throw await o.body?.cancel(),new wl(-1,`Unexpected content type: ${l}`);else await o.body?.cancel()}catch(e){throw this.onerror?.(e),e}}get sessionId(){return this._sessionId}async terminateSession(){if(this._sessionId)try{let e=await this._commonHeaders(),t={...this._requestInit,method:`DELETE`,headers:e,signal:this._abortController?.signal},n=await(this._fetch??fetch)(this._url,t);if(await n.body?.cancel(),!n.ok&&n.status!==405)throw new wl(n.status,`Failed to terminate session: ${n.statusText}`);this._sessionId=void 0}catch(e){throw this.onerror?.(e),e}}setProtocolVersion(e){this._protocolVersion=e}get protocolVersion(){return this._protocolVersion}async resumeStream(e,t){await this._startOrAuthSse({resumptionToken:e,onresumptiontoken:t?.onresumptiontoken})}};function El(e){return(t,n)=>{if((n?.method??`GET`).toUpperCase()===`GET`)return globalThis.fetch(t,n);let r=new AbortController,i=setTimeout(()=>r.abort(Error(`MCP request timed out after ${e}ms`)),e),a=n?.signal instanceof AbortSignal?AbortSignal.any([n.signal,r.signal]):r.signal;return globalThis.fetch(t,{...n,signal:a}).finally(()=>clearTimeout(i))}}function Dl(e){if(e===void 0||e===``)return;let t=Number.parseInt(e,10);if(!(Number.isNaN(t)||t<=0))return t}function Ol(e){return e===`0.0.0.0`||e===`::`?`localhost`:e.includes(`:`)&&!e.startsWith(`[`)?`[${e}]`:e}function kl(e,t){return`http://${Ol(e)}:${t}/mcp`}function Al(e,t){return`ws://${Ol(e)}:${t}`}function jl(e){let t=new URL(e);return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.pathname=``,t.search=``,t.hash=``,t.toString().replace(/\/$/,``)}function Ml(e,t){if(!(!e||e.port<=0)&&e.draining!==!0&&t(e.pid))return e.port}function Nl(e){return B(e)?V(e,`utf-8`).trim():``}function Pl(e,t){return`server did not start within ${e}ms${t?` stderr:\n${t}`:``}`}function Fl(e){if(e&&typeof e==`object`&&`method`in e&&`id`in e)return e.id}function Il(e){if(!e||typeof e!=`object`||!(`result`in e))return;let t=e.result;if(!t||typeof t!=`object`||!(`protocolVersion`in t))return;let n=t.protocolVersion;return typeof n==`string`?n:void 0}function Ll(e,t){return{jsonrpc:`2.0`,id:e,error:{code:-32e3,message:t instanceof Error?t.message:String(t)}}}async function Rl(e){let t=e.readLock??(()=>Lt(e.lockDir)),n=e.isAlive??Rt,r=e.sleep??(e=>br(e)),i=e.spawn??Yn,a=e.readErrorLog??Nl,o=e.openErrorLog??(e=>lr(e,`w`)),s=e.closeFd??ir,c=e.timeoutMs??5e3,l=e.pollIntervalMs??100;if(e.portOverride!==void 0){let t=Number.parseInt(e.portOverride,10);if(Number.isNaN(t)||t<=0)throw Error(`invalid --port value '${e.portOverride}' — HTTP MCP shim requires a positive port`);return kl(C,t)}let u=t(),d=Ml(u,n);if(d!==void 0)return kl(C,d);if(e.envAutoStart===`0`)throw new it(`OpenKnowledge server is not running and OK_MCP_AUTOSTART=0 disables auto-start.`);if(u!==null&&u.draining===!0&&n(u.pid)){let e=Date.now(),i=e+c,a=!0;for(;Date.now()<i;){let e=t();if(e===null||e.draining!==!0||!n(e.pid)){a=!1;break}await r(l)}console.error(`[mcp-shim] waited ${Date.now()-e}ms for a draining predecessor server${a?` (timed out — proceeding anyway)`:``}`);let o=Ml(t(),n);if(o!==void 0)return kl(C,o)}B(e.lockDir)||sr(e.lockDir,{recursive:!0});let f=L(e.lockDir,se),p=o(f),m,h,g=Pn();try{try{m=i(g.command,[...g.prefixArgs,`start`],{detached:!0,stdio:[`ignore`,`ignore`,p],windowsHide:!0,cwd:e.contentDir,env:{...process.env,OK_LOCK_KIND:`mcp-spawned`,ELECTRON_RUN_AS_NODE:`1`}}),m.on(`error`,e=>{h=e instanceof Error?e.message:String(e)}),m.unref()}catch(e){h=e instanceof Error?e.message:String(e)}}finally{try{s(p)}catch{}}let _=Date.now()+c;for(;Date.now()<_;){if(h){let e=a(f),t=e?` stderr:\n${e}`:``;throw Error(`spawn failed: ${h}${t}`)}await r(l);let e=Ml(t(),n);if(e!==void 0)return kl(C,e)}if(h){let e=a(f),t=e?` stderr:\n${e}`:``;throw Error(`spawn failed: ${h}${t}`)}throw Error(Pl(c,a(f)))}function zl(e,t){if(e.portOverride!==void 0)return jl(t);let n=e.readLock??(()=>Lt(e.lockDir)),r=e.isAlive??Rt,i=Ml(n(),r);if(i!==void 0)return Al(C,i)}async function Bl(e,t={}){let n=t.stderr??process.stderr,r=t.requestTimeoutMs??12e4,i=t.createStdioTransport?t.createStdioTransport(t.stdin,t.stdout):new Zs(t.stdin,t.stdout),a=t.createHttpTransport?t.createHttpTransport(new URL(e)):new Tl(new URL(e),{fetch:El(r),requestInit:{headers:{...T({kind:`mcp`,runtimeVersion:It}),...t.connectionId===void 0?{}:{[ze]:t.connectionId}}}}),o=!1,s=async()=>{o||(o=!0,t.onclose?.(),await Promise.allSettled([i.close(),a.close()]))};i.onerror=e=>{n.write(`[mcp-shim] stdio error: ${e.message}\n`)},a.onerror=e=>{n.write(`[mcp-shim] HTTP transport error: ${e.message}\n`)},i.onclose=()=>{s()},a.onclose=()=>{s()};let c=Promise.resolve();i.onmessage=e=>{c=c.then(async()=>{try{await a.send(e)}catch(t){let r=Fl(e);if(r===void 0){n.write(`[mcp-shim] failed to forward stdio notification: ${t instanceof Error?t.message:String(t)}\n`);return}await i.send(Ll(r,t)).catch(e=>{n.write(`[mcp-shim] failed to write stdio error response: ${e instanceof Error?e.message:String(e)}\n`)})}}).catch(e=>{n.write(`[mcp-shim] unexpected stdio forwarding failure: ${e instanceof Error?e.message:String(e)}\n`)})},a.onmessage=e=>{let t=Il(e);t&&a.setProtocolVersion?.(t),i.send(e).catch(e=>{n.write(`[mcp-shim] failed to write stdio response: ${e instanceof Error?e.message:String(e)}\n`)})};try{await a.start(),await i.start()}catch(e){throw await s(),e}return{close:s}}async function Vl(e){let t=e.stderr??process.stderr,n=e.bridgeFn??Bl,r=await Rl(e),i=e.createConnectionId?.()??yr(),a=!1,o=(e.startKeepalive??qs)({connectionId:i,pid:process.pid,resolveWsUrl:async()=>zl(e,r),log:e=>t.write(`[mcp-shim] keepalive: ${e}\n`)});t.write(`[mcp-shim] proxying stdio to ${r}\n`);let s;try{s=await n(r,{stderr:t,connectionId:i,onclose:()=>{a||(o.close(),process.exit(0))}})}catch(e){throw o.close(),e}let c=()=>{a=!0,o.close(),s.close().finally(()=>{process.exit(0)})};process.once(`SIGINT`,c),process.once(`SIGTERM`,c)}const Hl=/^mcp\.\d{4}-\d{2}-\d{2}\.log$/;function Ul(){return L(hr(),`.ok`,`logs`)}function Wl(e,t=()=>new Date){try{let n=t().getTime(),r=ur(e).filter(e=>Hl.test(e)).flatMap(t=>{try{let n=H(L(e,t));return[{name:t,mtime:n.mtimeMs,size:n.size}]}catch{return[]}}),i=[];for(let t of r)if(n-t.mtime>6048e5)try{U(L(e,t.name))}catch{}else i.push(t);i.sort((e,t)=>e.mtime-t.mtime);let a=i.reduce((e,t)=>e+t.size,0);for(let t of i){if(a<=47185920)break;try{U(L(e,t.name)),a-=t.size}catch{}}}catch{}}function Gl(e={}){let t=e.logsDir??Ul(),n=e.now??(()=>new Date),r=e.pruneDelayMs??5e3;r<=0?Wl(t,n):setTimeout(()=>Wl(t,n),r).unref?.();let i=0,a=!1;return{write(e){if(!(i>=5))try{a||=(sr(t,{recursive:!0}),!0);let r=n().toISOString();rr(L(t,`mcp.${r.slice(0,10)}.log`),`${r} ${e}`),i=0}catch{a=!1,i++}}}}const Kl=tr(import.meta.url),ql=xr(Kn);async function Jl(e){try{let{stdout:t}=await ql(`git`,[`-C`,e,`worktree`,`list`,`--porcelain`],D({timeout:2e3}));return t.split(`
62
- `).filter(e=>e.startsWith(`worktree `)).length}catch{return 0}}function Yl(e){let t=z(e);for(;;){if(Ot(t))return t;let n=I(t);if(n===t)throw Error(`No OpenKnowledge project found at or above ${e}. Pass an explicit \`cwd\` argument that points inside an OK project (a directory with a \`${v}\`).`);t=n}}function Xl(e){try{let t=new URL(e);return t.protocol===`file:`?tr(t):void 0}catch{return}}async function Zl(e){if(!e.getClientCapabilities()?.roots)return;let t;try{t=await e.listRoots()}catch(t){e.log?.(`listRoots fallback failed: ${t instanceof Error?t.message:String(t)}`);return}let n=t.roots??[];if(n.length!==1)return;let r=Xl(n[0].uri);return r===void 0&&e.log?.(`single root URI not usable as fs path: ${n[0].uri}`),r}async function Ql(e,t,n,r=Yl){if(e!==void 0){let t=r(e);return{projectDir:t,viaRootGuess:!1,nextSticky:t}}if(t!==void 0){let e=r(t);return{projectDir:e,viaRootGuess:!1,nextSticky:e}}let i=await n();return i===void 0?{projectDir:void 0,viaRootGuess:!1,nextSticky:void 0}:{projectDir:r(i),viaRootGuess:!0,nextSticky:void 0}}async function $l(e){let t=Gl(),n={write:e=>(t.write(e),process.stderr.write(e))},r=e.spawnTimeoutMs??Dl(process.env.OK_MCP_SPAWN_TIMEOUT_MS),i=e.envAutoStart??process.env.OK_MCP_AUTOSTART,a=Hn({startupCwd:e.startupCwd,startupConfig:e.startupConfig}),o=new Ye({name:oe,version:It});vt(o);let s=yr(),c={current:{connectionId:s,displayName:s,colorSeed:s}},l=new Map,u=e=>{if(l.has(e))return;let t=_t(e),r=c.current,i=qs({connectionId:s,pid:process.pid,displayName:r.displayName,clientName:r.clientInfo?.name??r.displayName,colorSeed:r.colorSeed,resolveWsUrl:async()=>zl({lockDir:t,contentDir:e},``),log:t=>n.write(`[mcp] keepalive[${e}]: ${t}\n`)});l.set(e,i)},d=()=>Zl({getClientCapabilities:()=>o.server.getClientCapabilities(),listRoots:()=>o.server.listRoots(),log:e=>n.write(`[mcp] ${e}\n`)}),f,p=!1,m=async e=>{if(p)return;p=!0;let t=await Jl(e);if(t<=1){p=!1;return}let r=`Routed to ${e} from the MCP client's single advertised root, but this repo has ${t} git worktrees. If you are working in a worktree, pass its path as \`cwd\` on OK tool calls once — it sticks for the session, so reads, writes, and the preview all target that worktree instead of this checkout.`;try{n.write(`[mcp] ${r}\n`),await o.server.sendLoggingMessage({level:`warning`,data:r})}catch{}},h=async e=>{let t=await Ql(e,f,d);if(f=t.nextSticky??f,t.projectDir===void 0)throw Error("`cwd` is required for tool calls against the global MCP server. Pass an absolute path inside an OpenKnowledge project, or have the MCP client advertise a single root.");return t.viaRootGuess&&m(t.projectDir),t.projectDir},g=async e=>{let t=await Ql(e,f,d);if(f=t.nextSticky??f,t.projectDir===void 0)return;t.viaRootGuess&&m(t.projectDir);let n=t.projectDir,o=await a(n),s=await Rl({lockDir:_t(n),contentDir:Je(o,n),envAutoStart:i,...r===void 0?{}:{timeoutMs:r}});return u(n),s.replace(/\/mcp$/,``)};o.server.oninitialized=()=>{let e=o.server.getClientVersion(),t=Te(e?.name,s);c.current={connectionId:s,clientInfo:e?{name:t,version:e.version}:void 0,displayName:t,colorSeed:t}},ke(o,{serverUrl:g,resolveCwd:h,config:a,identityRef:c,isHostedAgent:re(process.env)});let _=new Zs,v=!1,y,b,x=async()=>{if(v)return;v=!0,y?.stop(),b?.stop();for(let e of l.values())try{e.close()}catch(e){n.write(`[mcp] keepalive close error: ${e instanceof Error?e.message:String(e)}\n`)}l.clear();let e=await Promise.allSettled([o.close(),_.close()]);for(let t of e)if(t.status===`rejected`){let e=t.reason;n.write(`[mcp] shutdown close error: ${e instanceof Error?e.message:String(e)}\n`)}};await o.connect(_),n.write(`[mcp] global stdio server ready (per-call project routing)
61
+ ${t}`,d++;break;case`id`:l=t.includes(`\0`)?void 0:t;break;case`retry`:/^\d+$/.test(t)?r(parseInt(t,10)):n(new _l(`Invalid \`retry\` value: "${t}"`,{type:`invalid-retry`,value:t,line:i}));break;default:n(new _l(`Unknown field "${e.length>20?`${e.slice(0,20)}\u2026`:e}"`,{type:`unknown-field`,field:e,value:t,line:i}));break}}function y(){d>0&&t({id:l,event:f,data:u}),l=void 0,u=``,d=0,f=void 0}function b(e={}){if(e.consume&&o.length>0){let e=o.join(``);_(e,0,e.length)}c=!0,l=void 0,u=``,d=0,f=void 0,o.length=0,s=0,p=!1}return{feed:m,reset:b}}function bl(e,t,n){return n===100&&e.charCodeAt(t+1)===97&&e.charCodeAt(t+2)===116&&e.charCodeAt(t+3)===97&&e.charCodeAt(t+4)===58}function xl(e,t,n){return n===101&&e.charCodeAt(t+1)===118&&e.charCodeAt(t+2)===101&&e.charCodeAt(t+3)===110&&e.charCodeAt(t+4)===116&&e.charCodeAt(t+5)===58}var Sl=class extends TransformStream{constructor({onError:e,onRetry:t,onComment:n,maxBufferSize:r}={}){let i;super({start(a){i=yl({onEvent:e=>{a.enqueue(e)},onError(t){typeof e==`function`&&e(t),(e===`terminate`||t.type===`max-buffer-size-exceeded`)&&a.error(t)},onRetry:t,onComment:n,maxBufferSize:r})},transform(e){i.feed(e)}})}};const Cl={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2};var wl=class extends Error{constructor(e,t){super(`Streamable HTTP error: ${t}`),this.code=e}},Tl=class{constructor(e,t){this._hasCompletedAuthFlow=!1,this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._requestInit=t?.requestInit,this._authProvider=t?.authProvider,this._fetch=t?.fetch,this._fetchWithInit=ic(t?.fetch,t?.requestInit),this._sessionId=t?.sessionId,this._reconnectionOptions=t?.reconnectionOptions??Cl}async _authThenStart(){if(!this._authProvider)throw new Bc(`No auth provider`);let e;try{e=await Xc(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(e){throw this.onerror?.(e),e}if(e!==`AUTHORIZED`)throw new Bc;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){let e={};if(this._authProvider){let t=await this._authProvider.tokens();t&&(e.Authorization=`Bearer ${t.access_token}`)}this._sessionId&&(e[`mcp-session-id`]=this._sessionId),this._protocolVersion&&(e[`mcp-protocol-version`]=this._protocolVersion);let t=rc(this._requestInit?.headers);return new Headers({...e,...t})}async _startOrAuthSse(e){let{resumptionToken:t}=e;try{let n=await this._commonHeaders();n.set(`Accept`,`text/event-stream`),t&&n.set(`last-event-id`,t);let r=await(this._fetch??fetch)(this._url,{method:`GET`,headers:n,signal:this._abortController?.signal});if(!r.ok){if(await r.body?.cancel(),r.status===401&&this._authProvider)return await this._authThenStart();if(r.status===405)return;throw new wl(r.status,`Failed to open SSE stream: ${r.statusText}`)}this._handleSseStream(r.body,e,!0)}catch(e){throw this.onerror?.(e),e}}_getNextReconnectionDelay(e){if(this._serverRetryMs!==void 0)return this._serverRetryMs;let t=this._reconnectionOptions.initialReconnectionDelay,n=this._reconnectionOptions.reconnectionDelayGrowFactor,r=this._reconnectionOptions.maxReconnectionDelay;return Math.min(t*n**+e,r)}_scheduleReconnection(e,t=0){let n=this._reconnectionOptions.maxRetries;if(t>=n){this.onerror?.(Error(`Maximum reconnection attempts (${n}) exceeded.`));return}let r=this._getNextReconnectionDelay(t);this._reconnectionTimeout=setTimeout(()=>{this._startOrAuthSse(e).catch(n=>{this.onerror?.(Error(`Failed to reconnect SSE stream: ${n instanceof Error?n.message:String(n)}`)),this._scheduleReconnection(e,t+1)})},r)}_handleSseStream(e,t,n){if(!e)return;let{onresumptiontoken:r,replayMessageId:i}=t,a,o=!1,s=!1;(async()=>{try{let t=e.pipeThrough(new TextDecoderStream).pipeThrough(new Sl({onRetry:e=>{this._serverRetryMs=e}})).getReader();for(;;){let{value:e,done:n}=await t.read();if(n)break;if(e.id&&(a=e.id,o=!0,r?.(e.id)),e.data&&(!e.event||e.event===`message`))try{let t=lt.parse(JSON.parse(e.data));gt(t)&&(s=!0,i!==void 0&&(t.id=i)),this.onmessage?.(t)}catch(e){this.onerror?.(e)}}(n||o)&&!s&&this._abortController&&!this._abortController.signal.aborted&&this._scheduleReconnection({resumptionToken:a,onresumptiontoken:r,replayMessageId:i},0)}catch(e){if(this.onerror?.(Error(`SSE stream disconnected: ${e}`)),(n||o)&&!s&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:a,onresumptiontoken:r,replayMessageId:i},0)}catch(e){this.onerror?.(Error(`Failed to reconnect: ${e instanceof Error?e.message:String(e)}`))}}})()}async start(){if(this._abortController)throw Error(`StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.`);this._abortController=new AbortController}async finishAuth(e){if(!this._authProvider)throw new Bc(`No auth provider`);if(await Xc(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!==`AUTHORIZED`)throw new Bc(`Failed to authorize`)}async close(){this._reconnectionTimeout&&=(clearTimeout(this._reconnectionTimeout),void 0),this._abortController?.abort(),this.onclose?.()}async send(e,t){try{let{resumptionToken:n,onresumptiontoken:r}=t||{};if(n){this._startOrAuthSse({resumptionToken:n,replayMessageId:at(e)?e.id:void 0}).catch(e=>this.onerror?.(e));return}let i=await this._commonHeaders();i.set(`content-type`,`application/json`),i.set(`accept`,`application/json, text/event-stream`);let a={...this._requestInit,method:`POST`,headers:i,body:JSON.stringify(e),signal:this._abortController?.signal},o=await(this._fetch??fetch)(this._url,a),s=o.headers.get(`mcp-session-id`);if(s&&(this._sessionId=s),!o.ok){let t=await o.text().catch(()=>null);if(o.status===401&&this._authProvider){if(this._hasCompletedAuthFlow)throw new wl(401,`Server returned 401 after successful authentication`);let{resourceMetadataUrl:t,scope:n}=el(o);if(this._resourceMetadataUrl=t,this._scope=n,await Xc(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!==`AUTHORIZED`)throw new Bc;return this._hasCompletedAuthFlow=!0,this.send(e)}if(o.status===403&&this._authProvider){let{resourceMetadataUrl:t,scope:n,error:r}=el(o);if(r===`insufficient_scope`){let r=o.headers.get(`WWW-Authenticate`);if(this._lastUpscopingHeader===r)throw new wl(403,`Server returned 403 after trying upscoping`);if(n&&(this._scope=n),t&&(this._resourceMetadataUrl=t),this._lastUpscopingHeader=r??void 0,await Xc(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetch})!==`AUTHORIZED`)throw new Bc;return this.send(e)}}throw new wl(o.status,`Error POSTing to endpoint: ${t}`)}if(this._hasCompletedAuthFlow=!1,this._lastUpscopingHeader=void 0,o.status===202){await o.body?.cancel(),et(e)&&this._startOrAuthSse({resumptionToken:void 0}).catch(e=>this.onerror?.(e));return}let c=(Array.isArray(e)?e:[e]).filter(e=>`method`in e&&`id`in e&&e.id!==void 0).length>0,l=o.headers.get(`content-type`);if(c)if(l?.includes(`text/event-stream`))this._handleSseStream(o.body,{onresumptiontoken:r},!1);else if(l?.includes(`application/json`)){let e=await o.json(),t=Array.isArray(e)?e.map(e=>lt.parse(e)):[lt.parse(e)];for(let e of t)this.onmessage?.(e)}else throw await o.body?.cancel(),new wl(-1,`Unexpected content type: ${l}`);else await o.body?.cancel()}catch(e){throw this.onerror?.(e),e}}get sessionId(){return this._sessionId}async terminateSession(){if(this._sessionId)try{let e=await this._commonHeaders(),t={...this._requestInit,method:`DELETE`,headers:e,signal:this._abortController?.signal},n=await(this._fetch??fetch)(this._url,t);if(await n.body?.cancel(),!n.ok&&n.status!==405)throw new wl(n.status,`Failed to terminate session: ${n.statusText}`);this._sessionId=void 0}catch(e){throw this.onerror?.(e),e}}setProtocolVersion(e){this._protocolVersion=e}get protocolVersion(){return this._protocolVersion}async resumeStream(e,t){await this._startOrAuthSse({resumptionToken:e,onresumptiontoken:t?.onresumptiontoken})}};function El(e){return(t,n)=>{if((n?.method??`GET`).toUpperCase()===`GET`)return globalThis.fetch(t,n);let r=new AbortController,i=setTimeout(()=>r.abort(Error(`MCP request timed out after ${e}ms`)),e),a=n?.signal instanceof AbortSignal?AbortSignal.any([n.signal,r.signal]):r.signal;return globalThis.fetch(t,{...n,signal:a}).finally(()=>clearTimeout(i))}}function Dl(e){if(e===void 0||e===``)return;let t=Number.parseInt(e,10);if(!(Number.isNaN(t)||t<=0))return t}function Ol(e){return e===`0.0.0.0`||e===`::`?`localhost`:e.includes(`:`)&&!e.startsWith(`[`)?`[${e}]`:e}function kl(e,t){return`http://${Ol(e)}:${t}/mcp`}function Al(e,t){return`ws://${Ol(e)}:${t}`}function jl(e){let t=new URL(e);return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.pathname=``,t.search=``,t.hash=``,t.toString().replace(/\/$/,``)}function Ml(e,t){if(!(!e||e.port<=0)&&e.draining!==!0&&t(e.pid))return e.port}function Nl(e){return B(e)?V(e,`utf-8`).trim():``}function Pl(e,t){return`server did not start within ${e}ms${t?` stderr:\n${t}`:``}`}function Fl(e){if(e&&typeof e==`object`&&`method`in e&&`id`in e)return e.id}function Il(e){if(!e||typeof e!=`object`||!(`result`in e))return;let t=e.result;if(!t||typeof t!=`object`||!(`protocolVersion`in t))return;let n=t.protocolVersion;return typeof n==`string`?n:void 0}function Ll(e,t){return{jsonrpc:`2.0`,id:e,error:{code:-32e3,message:t instanceof Error?t.message:String(t)}}}async function Rl(e){let t=e.readLock??(()=>Lt(e.lockDir)),n=e.isAlive??Rt,r=e.sleep??(e=>br(e)),i=e.spawn??Yn,a=e.readErrorLog??Nl,o=e.openErrorLog??(e=>lr(e,`w`)),s=e.closeFd??ir,c=e.timeoutMs??5e3,l=e.pollIntervalMs??100;if(e.portOverride!==void 0){let t=Number.parseInt(e.portOverride,10);if(Number.isNaN(t)||t<=0)throw Error(`invalid --port value '${e.portOverride}' — HTTP MCP shim requires a positive port`);return kl(C,t)}let u=t(),d=Ml(u,n);if(d!==void 0)return kl(C,d);if(e.envAutoStart===`0`)throw new ct(`OpenKnowledge server is not running and OK_MCP_AUTOSTART=0 disables auto-start.`);if(u!==null&&u.draining===!0&&n(u.pid)){let e=Date.now(),i=e+c,a=!0;for(;Date.now()<i;){let e=t();if(e===null||e.draining!==!0||!n(e.pid)){a=!1;break}await r(l)}console.error(`[mcp-shim] waited ${Date.now()-e}ms for a draining predecessor server${a?` (timed out — proceeding anyway)`:``}`);let o=Ml(t(),n);if(o!==void 0)return kl(C,o)}B(e.lockDir)||sr(e.lockDir,{recursive:!0});let f=L(e.lockDir,ce),p=o(f),m,h,g=Pn();try{try{m=i(g.command,[...g.prefixArgs,`start`],{detached:!0,stdio:[`ignore`,`ignore`,p],windowsHide:!0,cwd:e.contentDir,env:{...process.env,OK_LOCK_KIND:`mcp-spawned`,ELECTRON_RUN_AS_NODE:`1`}}),m.on(`error`,e=>{h=e instanceof Error?e.message:String(e)}),m.unref()}catch(e){h=e instanceof Error?e.message:String(e)}}finally{try{s(p)}catch{}}let _=Date.now()+c;for(;Date.now()<_;){if(h){let e=a(f),t=e?` stderr:\n${e}`:``;throw Error(`spawn failed: ${h}${t}`)}await r(l);let e=Ml(t(),n);if(e!==void 0)return kl(C,e)}if(h){let e=a(f),t=e?` stderr:\n${e}`:``;throw Error(`spawn failed: ${h}${t}`)}throw Error(Pl(c,a(f)))}function zl(e,t){if(e.portOverride!==void 0)return jl(t);let n=e.readLock??(()=>Lt(e.lockDir)),r=e.isAlive??Rt,i=Ml(n(),r);if(i!==void 0)return Al(C,i)}async function Bl(e,t={}){let n=t.stderr??process.stderr,r=t.requestTimeoutMs??12e4,i=t.createStdioTransport?t.createStdioTransport(t.stdin,t.stdout):new Zs(t.stdin,t.stdout),a=t.createHttpTransport?t.createHttpTransport(new URL(e)):new Tl(new URL(e),{fetch:El(r),requestInit:{headers:{...E({kind:`mcp`,runtimeVersion:It}),...t.connectionId===void 0?{}:{[He]:t.connectionId}}}}),o=!1,s=async()=>{o||(o=!0,t.onclose?.(),await Promise.allSettled([i.close(),a.close()]))};i.onerror=e=>{n.write(`[mcp-shim] stdio error: ${e.message}\n`)},a.onerror=e=>{n.write(`[mcp-shim] HTTP transport error: ${e.message}\n`)},i.onclose=()=>{s()},a.onclose=()=>{s()};let c=Promise.resolve();i.onmessage=e=>{c=c.then(async()=>{try{await a.send(e)}catch(t){let r=Fl(e);if(r===void 0){n.write(`[mcp-shim] failed to forward stdio notification: ${t instanceof Error?t.message:String(t)}\n`);return}await i.send(Ll(r,t)).catch(e=>{n.write(`[mcp-shim] failed to write stdio error response: ${e instanceof Error?e.message:String(e)}\n`)})}}).catch(e=>{n.write(`[mcp-shim] unexpected stdio forwarding failure: ${e instanceof Error?e.message:String(e)}\n`)})},a.onmessage=e=>{let t=Il(e);t&&a.setProtocolVersion?.(t),i.send(e).catch(e=>{n.write(`[mcp-shim] failed to write stdio response: ${e instanceof Error?e.message:String(e)}\n`)})};try{await a.start(),await i.start()}catch(e){throw await s(),e}return{close:s}}async function Vl(e){let t=e.stderr??process.stderr,n=e.bridgeFn??Bl,r=await Rl(e),i=e.createConnectionId?.()??yr(),a=!1,o=(e.startKeepalive??qs)({connectionId:i,pid:process.pid,resolveWsUrl:async()=>zl(e,r),log:e=>t.write(`[mcp-shim] keepalive: ${e}\n`)});t.write(`[mcp-shim] proxying stdio to ${r}\n`);let s;try{s=await n(r,{stderr:t,connectionId:i,onclose:()=>{a||(o.close(),process.exit(0))}})}catch(e){throw o.close(),e}let c=()=>{a=!0,o.close(),s.close().finally(()=>{process.exit(0)})};process.once(`SIGINT`,c),process.once(`SIGTERM`,c)}const Hl=/^mcp\.\d{4}-\d{2}-\d{2}\.log$/;function Ul(){return L(hr(),`.ok`,`logs`)}function Wl(e,t=()=>new Date){try{let n=t().getTime(),r=ur(e).filter(e=>Hl.test(e)).flatMap(t=>{try{let n=H(L(e,t));return[{name:t,mtime:n.mtimeMs,size:n.size}]}catch{return[]}}),i=[];for(let t of r)if(n-t.mtime>6048e5)try{U(L(e,t.name))}catch{}else i.push(t);i.sort((e,t)=>e.mtime-t.mtime);let a=i.reduce((e,t)=>e+t.size,0);for(let t of i){if(a<=47185920)break;try{U(L(e,t.name)),a-=t.size}catch{}}}catch{}}function Gl(e={}){let t=e.logsDir??Ul(),n=e.now??(()=>new Date),r=e.pruneDelayMs??5e3;r<=0?Wl(t,n):setTimeout(()=>Wl(t,n),r).unref?.();let i=0,a=!1;return{write(e){if(!(i>=5))try{a||=(sr(t,{recursive:!0}),!0);let r=n().toISOString();rr(L(t,`mcp.${r.slice(0,10)}.log`),`${r} ${e}`),i=0}catch{a=!1,i++}}}}const Kl=tr(import.meta.url),ql=xr(Kn);async function Jl(e){try{let{stdout:t}=await ql(`git`,[`-C`,e,`worktree`,`list`,`--porcelain`],D({timeout:2e3}));return t.split(`
62
+ `).filter(e=>e.startsWith(`worktree `)).length}catch{return 0}}function Yl(e){let t=z(e);for(;;){if(De(t))return t;let n=I(t);if(n===t)throw Error(`No OpenKnowledge project found at or above ${e}. Pass an explicit \`cwd\` argument that points inside an OK project (a directory with a \`${v}\`).`);t=n}}function Xl(e){try{let t=new URL(e);return t.protocol===`file:`?tr(t):void 0}catch{return}}async function Zl(e){if(!e.getClientCapabilities()?.roots)return;let t;try{t=await e.listRoots()}catch(t){e.log?.(`listRoots fallback failed: ${t instanceof Error?t.message:String(t)}`);return}let n=t.roots??[];if(n.length!==1)return;let r=Xl(n[0].uri);return r===void 0&&e.log?.(`single root URI not usable as fs path: ${n[0].uri}`),r}async function Ql(e,t,n,r=Yl){if(e!==void 0){let t=r(e);return{projectDir:t,viaRootGuess:!1,nextSticky:t}}if(t!==void 0){let e=r(t);return{projectDir:e,viaRootGuess:!1,nextSticky:e}}let i=await n();return i===void 0?{projectDir:void 0,viaRootGuess:!1,nextSticky:void 0}:{projectDir:r(i),viaRootGuess:!0,nextSticky:void 0}}async function $l(e){let t=Gl(),n={write:e=>(t.write(e),process.stderr.write(e))},r=e.spawnTimeoutMs??Dl(process.env.OK_MCP_SPAWN_TIMEOUT_MS),i=e.envAutoStart??process.env.OK_MCP_AUTOSTART,a=Hn({startupCwd:e.startupCwd,startupConfig:e.startupConfig}),o=new $e({name:se,version:It});bt(o);let s=yr(),c={current:{connectionId:s,displayName:s,colorSeed:s}},l=new Map,u=e=>{if(l.has(e))return;let t=ut(e),r=c.current,i=qs({connectionId:s,pid:process.pid,displayName:r.displayName,clientName:r.clientInfo?.name??r.displayName,colorSeed:r.colorSeed,resolveWsUrl:async()=>zl({lockDir:t,contentDir:e},``),log:t=>n.write(`[mcp] keepalive[${e}]: ${t}\n`)});l.set(e,i)},d=()=>Zl({getClientCapabilities:()=>o.server.getClientCapabilities(),listRoots:()=>o.server.listRoots(),log:e=>n.write(`[mcp] ${e}\n`)}),f,p=!1,m=async e=>{if(p)return;p=!0;let t=await Jl(e);if(t<=1){p=!1;return}let r=`Routed to ${e} from the MCP client's single advertised root, but this repo has ${t} git worktrees. If you are working in a worktree, pass its path as \`cwd\` on OK tool calls once — it sticks for the session, so reads, writes, and the preview all target that worktree instead of this checkout.`;try{n.write(`[mcp] ${r}\n`),await o.server.sendLoggingMessage({level:`warning`,data:r})}catch{}},h=async e=>{let t=await Ql(e,f,d);if(f=t.nextSticky??f,t.projectDir===void 0)throw Error("`cwd` is required for tool calls against the global MCP server. Pass an absolute path inside an OpenKnowledge project, or have the MCP client advertise a single root.");return t.viaRootGuess&&m(t.projectDir),t.projectDir},g=async e=>{let t=await Ql(e,f,d);if(f=t.nextSticky??f,t.projectDir===void 0)return;t.viaRootGuess&&m(t.projectDir);let n=t.projectDir,o=await a(n),s=await Rl({lockDir:ut(n),contentDir:ot(o,n),envAutoStart:i,...r===void 0?{}:{timeoutMs:r}});return u(n),s.replace(/\/mcp$/,``)};o.server.oninitialized=()=>{let e=o.server.getClientVersion(),t=Ee(e?.name,s);c.current={connectionId:s,clientInfo:e?{name:t,version:e.version}:void 0,displayName:t,colorSeed:t}},Me(o,{serverUrl:g,resolveCwd:h,config:a,identityRef:c,isHostedAgent:ie(process.env)});let _=new Zs,v=!1,y,b,x=async()=>{if(v)return;v=!0,y?.stop(),b?.stop();for(let e of l.values())try{e.close()}catch(e){n.write(`[mcp] keepalive close error: ${e instanceof Error?e.message:String(e)}\n`)}l.clear();let e=await Promise.allSettled([o.close(),_.close()]);for(let t of e)if(t.status===`rejected`){let e=t.reason;n.write(`[mcp] shutdown close error: ${e instanceof Error?e.message:String(e)}\n`)}};await o.connect(_),n.write(`[mcp] global stdio server ready (per-call project routing)
63
63
  `);let S=!1,C=()=>{S||(S=!0,setTimeout(()=>{n.write(`[mcp] shutdown deadline (5s) reached — forcing exit(1)
64
64
  `),process.exit(1)},5e3).unref(),x().finally(()=>{process.exit(0)}))};if(process.once(`SIGINT`,C),process.once(`SIGTERM`,C),process.stdin.on(`end`,()=>{n.write(`[mcp] stdin end — host disconnected, shutting down
65
65
  `),C()}),process.stdin.on(`error`,e=>{n.write(`[mcp] stdin error (${e instanceof Error?e.message:String(e)}) — host disconnected, shutting down\n`),C()}),b=tc({getPpid:()=>process.ppid,onHostGone:e=>{n.write(`[mcp] ${e} — shutting down\n`),C()}}),nc({log:e=>n.write(`${e}\n`),transport:_,process,stdin:process.stdin}),process.platform===`darwin`){let e=ec(Kl,{realpathSync:dr,statInoSync:e=>H(e).ino,log:e=>n.write(`${e}\n`)});if(e!==void 0){n.write(`[mcp] bundle identity anchor=${e.resolvedPath} inode=${e.inode} version=${It}\n`);let{resolvedPath:t,inode:r}=e;y=$s({detect:()=>Qs({bundleAnchorPath:Kl,currentInode:r,platform:process.platform,realpath:dr,statInode:e=>H(e).ino}),onReplaced:e=>{n.write(`[mcp] bundle replaced anchor=${t} bootInode=${e.currentInode} onDiskInode=${e.onDiskInode} version=${It} — exiting for host respawn\n`),C()},log:e=>n.write(`[mcp] ${e}\n`)})}}return{close:x}}function eu(e){return new k(`mcp`).description(`Start MCP stdio server for project knowledge base`).option(`-p, --port <port>`,`Override per-call routing and proxy stdio to this HTTP MCP port (skips bundle proxy)`,void 0).option(`--no-bundle-proxy`,`Run the npm-fetched MCP server in-process instead of proxying to the macOS Desktop bundle (equivalent: OK_BUNDLE_PROXY=0)`).action(async t=>{try{let n=e(),r=process.cwd();if(t.port!==void 0){let e=Dl(process.env.OK_MCP_SPAWN_TIMEOUT_MS);await Vl({lockDir:``,contentDir:``,portOverride:t.port,envAutoStart:process.env.OK_MCP_AUTOSTART,timeoutMs:e});return}let i=t.bundleProxy===!1?[...process.argv,`--no-bundle-proxy`]:process.argv,a=Ws(process.env,i,process.platform);if(a.proxy){let e=Us(process.platform,hr(),{existsSync:B});if(e===null)Gs({stderr:process.stderr,mode:`fallback-absent`,bundlePath:null,reason:`no installed OpenKnowledge.app bundle found`});else try{await Ks({bundlePath:e,argv:process.argv.slice(2),env:process.env,stderr:process.stderr});return}catch(t){Gs({stderr:process.stderr,mode:`fallback-exec-failed`,bundlePath:e,reason:t instanceof Error?t.message:String(t)})}}else{let e=a.suppressedBy===`env`?`suppressed-env`:a.suppressedBy===`flag`?`suppressed-flag`:a.suppressedBy===`self`?`suppressed-self`:`suppressed-platform`;Gs({stderr:process.stderr,mode:e,bundlePath:null,reason:null})}await $l({startupCwd:r,startupConfig:n})}catch(e){process.stderr.write(`MCP server failed to start: ${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}})}const tu=/<aside>\s*([\s\S]*?)\s*<\/aside>/g,nu=/^(?:\p{Extended_Pictographic}️?\s*)+/u;function ru(e){return e.replace(tu,(e,t)=>{let n=t.replace(/\r\n/g,`
@@ -74,27 +74,27 @@ ${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 Lu(e){return e.replace(/\r\n|\r|\n/g,`<br>`).replace(/\|/g,`\\|`)}function Ru(e){return/\s/.test(e)?`<${e}>`:e}function zu(e,t={}){let{header:n,rows:r}=cu(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(Lu).join(` | `)} |`,`| ${n.map(()=>`---`).join(` | `)} |`,...r.map(e=>`| ${n.map((n,r)=>{let i=e[r]??``,a=Lu(i);if(r===o&&t.linkForTitle&&i.trim()!==``){let e=t.linkForTitle(i);if(e)return`[${a}](${Ru(e)})`}return a}).join(` | `)} |`)].join(`
76
76
  `),columns:i,wide:i>a}}function Bu(e,t){let n=e.match(/^#\s+(.+)$/m);return n?n[1].trim():t}function Vu(e,t){return`# ${e}\n\n${t}\n`}const Hu=[`links`,`frontmatter`,`callouts`,`images`,`tables`],Uu=/\.mdx?$/i;function Wu(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 Gu(e,t={}){let n=t.selected??new Set(Hu),r=ku(e);if(!r&&!t.force)return{changes:[],assets:[],deletions:[],report:Wu(!1)};let i=Wu(r),a=Eu(e),o=_u(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(!Uu.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=su(a,Zn(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=ru(a),o(`callouts`,e)}if(n.has(`frontmatter`)){let t=c.get(e);if(t){let e=a;a=Iu(a,t.propertyKeys),o(`frontmatter`,e)}}if(n.has(`links`)){let e=a;a=Tu(a,{redirectCsv:s}),o(`links`,e)}a!==r&&u.push({path:e,content:a})}if(s)for(let e of o){let r=zu(e.csvText,{linkForTitle:t=>{let n=mu(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=Vu(o===null?e.fallbackTitle:Bu(o,e.fallbackTitle),r.table);n.has(`links`)&&(c=Tu(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 Ku(e){for(let t of e.assets)sr(I(t.path),{recursive:!0}),mr(t.path,t.bytes);for(let t of e.changes)sr(I(t.path),{recursive:!0}),mr(t.path,t.content,`utf8`);for(let t of e.deletions)try{U(t)}catch(e){if(e.code!==`ENOENT`)throw e}}const qu={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`},Ju=[`images`,`callouts`,`frontmatter`,`tables`,`links`];function Yu(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 Ju)n.push(` ${qu[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 Xu(e,t){return JSON.stringify({applied:t.applied,...e},null,2)}function Zu(e){let t=new Set(Hu);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: ${Hu.join(`, `)}`);return e})}function Qu(e,t){let n=new Set(Hu);if(e&&(n=new Set(Zu(e))),t)for(let e of Zu(t))n.delete(e);return n}function $u(){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=Qu(t.only,t.skip)}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exitCode=2;return}let i=Gu(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{Ku(i)}catch(e){console.error(`Failed to apply changes: ${e instanceof Error?e.message:String(e)}`),process.exitCode=4;return}console.log(t.json?Xu(a,{applied:t.apply??!1}):Yu(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 ed(e=()=>Ln(Bn())){return{detectBundlePath:()=>e().bundlePath??null,resolveBaseUrl:e=>xe({lockDir:O(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=>{Fn(`open`,[e])},log:e=>process.stdout.write(`${e}\n`),error:e=>process.stderr.write(`${e}\n`)}}function td(e){return e.startsWith(`/`)||e.includes(`\\`)||e.split(`/`).includes(`..`)}function nd(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 rd(e,t,n,r){let i=`openknowledge://open?project=${encodeURIComponent(e)}&${t}=${encodeURIComponent(n)}`;r.openTarget(i)}function id(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(td(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(!ve.includes(e))return n.error(`Invalid --scope "${t.scope}": expected one of ${ve.join(`, `)}.`),1;if(n.detectBundlePath())return rd(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}/#/${Ie(e,i)}`;return n.openTarget(t),n.log(`Opening skill ${i} (${e}) in your browser: ${t}`),0}return nd(n)}let a=/\/+$/.test(e)||n.classifyName(r,i)===`folder`,o=n.detectBundlePath();if(a){if(o)return rd(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}/#/${He(i)}`;return n.openTarget(t),n.log(`Opening folder ${i} in your browser: ${t}`),0}return nd(n)}if(o)return rd(r,`doc`,i,n),n.log(`Opening ${i} in the OpenKnowledge desktop app.`),0;let s=n.resolveBaseUrl(r);if(s){let e=`${s}/#/${Ve(i)}`;return n.openTarget(e),n.log(`Opening ${i} in your browser: ${e}`),0}return nd(n)}function ad(){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: ${ve.join(` | `)}`,`project`).option(`--project <dir>`,`Project root (defaults to the current directory)`).action((e,t)=>{process.exitCode=id(e,t,ed())})}function od(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-B1SJHxOP.mjs`),r=e(),i=process.cwd(),a=Je(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 sd(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function cd(e,t,n=process.cwd()){let r=e.op??`sync`,i=Lt(O(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`,...T({kind:`cli`,runtimeVersion:It})},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}`)}sd(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`){sd(e.json,{type:`step`,step:`pull`});let t=await a.pull();sd(e.json,{type:`pull`,summary:t.summary}),e.json||process.stderr.write(` pull: ${t.summary.changes} changes\n`)}(r===`sync`||r===`push`)&&(sd(e.json,{type:`step`,step:`push`}),await a.push(),sd(e.json,{type:`push`,ok:!0}),e.json||process.stderr.write(` push: ok
78
- `)),sd(e.json,{type:`complete`,op:r}),e.json||process.stderr.write(`✓ ${r} complete\n`)}function ld(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 cd({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 ud(e){return new k(`pull`).description(`Pull changes from the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await cd({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 dd(e){return new k(`push`).description(`Push commits to the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await cd({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 fd(e){return typeof e==`string`&&we.includes(e)}async function pd(e={}){let t=z(e.cwd??process.cwd()),n=e.pack??`knowledge-base`;if(!At[n])return{status:`failed`,message:`${N(`Error:`)} Unknown pack "${n}". Available: ${we.join(`, `)}`,exitCode:1};let r;try{r=await Ne({projectDir:t,rootDir:e.root,packId:n,skipPrerequisite:e.dryRun===!0})}catch(e){return e instanceof mt?{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=At[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=Me(At[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${hd(r,t)}`,plan:r,exitCode:0}}if(!e.yes&&!await gd(`${F(`Plan:`)}\n\n${hd(r,t)}\n\n${F(`Apply?`)} ${j(`[Y/n] `)}`,e.confirmStream))return{status:`cancelled`,message:j(`Cancelled.`),plan:r,exitCode:0};let i=await Fe(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
- `),plan:r,exitCode:1}}let a=At[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 md(){let e=[F(`Available packs:`)];for(let t of we){let n=At[t];e.push(` ${M(t)} ${j(`—`)} ${n.name}: ${n.description}`)}return e.join(`
77
+ `)}function Xu(e,t){return JSON.stringify({applied:t.applied,...e},null,2)}function Zu(e){let t=new Set(Hu);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: ${Hu.join(`, `)}`);return e})}function Qu(e,t){let n=new Set(Hu);if(e&&(n=new Set(Zu(e))),t)for(let e of Zu(t))n.delete(e);return n}function $u(){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=Qu(t.only,t.skip)}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exitCode=2;return}let i=Gu(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{Ku(i)}catch(e){console.error(`Failed to apply changes: ${e instanceof Error?e.message:String(e)}`),process.exitCode=4;return}console.log(t.json?Xu(a,{applied:t.apply??!1}):Yu(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 ed(e=()=>Ln(Bn())){return{detectBundlePath:()=>e().bundlePath??null,resolveBaseUrl:e=>xe({lockDir:O(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=>{Fn(`open`,[e])},log:e=>process.stdout.write(`${e}\n`),error:e=>process.stderr.write(`${e}\n`)}}function td(e){return e.startsWith(`/`)||e.includes(`\\`)||e.split(`/`).includes(`..`)}function nd(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 rd(e,t,n,r){let i=`openknowledge://open?project=${encodeURIComponent(e)}&${t}=${encodeURIComponent(n)}`;r.openTarget(i)}function id(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(td(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(!ye.includes(e))return n.error(`Invalid --scope "${t.scope}": expected one of ${ye.join(`, `)}.`),1;if(n.detectBundlePath())return rd(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}/#/${ze(e,i)}`;return n.openTarget(t),n.log(`Opening skill ${i} (${e}) in your browser: ${t}`),0}return nd(n)}let a=/\/+$/.test(e)||n.classifyName(r,i)===`folder`,o=n.detectBundlePath();if(a){if(o)return rd(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}/#/${Ke(i)}`;return n.openTarget(t),n.log(`Opening folder ${i} in your browser: ${t}`),0}return nd(n)}if(o)return rd(r,`doc`,i,n),n.log(`Opening ${i} in the OpenKnowledge desktop app.`),0;let s=n.resolveBaseUrl(r);if(s){let e=`${s}/#/${Ge(i)}`;return n.openTarget(e),n.log(`Opening ${i} in your browser: ${e}`),0}return nd(n)}function ad(){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: ${ye.join(` | `)}`,`project`).option(`--project <dir>`,`Project root (defaults to the current directory)`).action((e,t)=>{process.exitCode=id(e,t,ed())})}function od(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-MV-qHfzy.mjs`),r=e(),i=process.cwd(),a=ot(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 sd(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function cd(e,t,n=process.cwd()){let r=e.op??`sync`,i=Lt(O(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`,...E({kind:`cli`,runtimeVersion:It})},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}`)}sd(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`){sd(e.json,{type:`step`,step:`pull`});let t=await a.pull();sd(e.json,{type:`pull`,summary:t.summary}),e.json||process.stderr.write(` pull: ${t.summary.changes} changes\n`)}(r===`sync`||r===`push`)&&(sd(e.json,{type:`step`,step:`push`}),await a.push(),sd(e.json,{type:`push`,ok:!0}),e.json||process.stderr.write(` push: ok
78
+ `)),sd(e.json,{type:`complete`,op:r}),e.json||process.stderr.write(`✓ ${r} complete\n`)}function ld(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 cd({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 ud(e){return new k(`pull`).description(`Pull changes from the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await cd({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 dd(e){return new k(`push`).description(`Push commits to the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await cd({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 fd(e){return typeof e==`string`&&Ce.includes(e)}async function pd(e={}){let t=z(e.cwd??process.cwd()),n=e.pack??`knowledge-base`;if(!At[n])return{status:`failed`,message:`${N(`Error:`)} Unknown pack "${n}". Available: ${Ce.join(`, `)}`,exitCode:1};let r;try{r=await Fe({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=At[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=Pe(At[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${hd(r,t)}`,plan:r,exitCode:0}}if(!e.yes&&!await gd(`${F(`Plan:`)}\n\n${hd(r,t)}\n\n${F(`Apply?`)} ${j(`[Y/n] `)}`,e.confirmStream))return{status:`cancelled`,message:j(`Cancelled.`),plan:r,exitCode:0};let i=await Re(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
+ `),plan:r,exitCode:1}}let a=At[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 md(){let e=[F(`Available packs:`)];for(let t of Ce){let n=At[t];e.push(` ${M(t)} ${j(`—`)} ${n.name}: ${n.description}`)}return e.join(`
80
80
  `)}function hd(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(`
81
- `)}async function gd(e,t){let n=wr({input:t??process.stdin,output:process.stdout});try{let t=(await n.question(e)).trim().toLowerCase();return t===``||t===`y`||t===`yes`}finally{n.close()}}function _d(){return new k(`seed`).description(`Scaffold a starter pack into the project. Defaults to "${De}" — the Karpathy three-layer knowledge base. Use --pack to pick a different pack (run with --list-packs to see all). Use --root to place pack folders inside a subfolder instead of the project root.`).argument(`[path]`,`Project directory (defaults to cwd)`).option(`-p, --pack <id>`,`Starter pack to scaffold. One of: ${we.join(`, `)}. Defaults to "${De}".`).option(`-r, --root <path>`,`Subfolder (relative to the project dir) to scaffold into — created if missing. Defaults to the project root.`).option(`--list-packs`,`List available starter packs and exit.`).option(`-y, --yes`,`Skip confirmation prompt`).option(`--dry-run`,`Print the plan and exit without writing`).action(async(e,t)=>{if(t.listPacks){process.stdout.write(`${md()}\n`);return}if(t.pack!==void 0&&!fd(t.pack)){process.stderr.write(`${N(`Error:`)} Unknown pack "${t.pack}". Available: ${we.join(`, `)}\n`),process.exitCode=1;return}let n=await pd({cwd:e??process.cwd(),pack:t.pack,root:t.root,yes:t.yes,dryRun:t.dryRun});process.stdout.write(`${n.message}\n`),n.exitCode!==0&&(process.exitCode=n.exitCode)})}async function vd(e,t,n){try{return await e.repos.get({owner:t,repo:n}),{kind:`ok`,available:!1}}catch(e){let t=e.status;return t===404?{kind:`ok`,available:!0}:t===401?{kind:`auth-required`}:{kind:`network`}}}async function yd(e,t){let{host:n,owner:r,name:i,json:a}=e;W(n);let o=await pa(n,t);if(o==null){if(a){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 s=n===`github.com`?void 0:`https://${n}/api/v3`,c=await vd(new oa({auth:o,...s?{baseUrl:s}:{}}),r,i);if(c.kind===`ok`){a?process.stdout.write(`${JSON.stringify({type:`name-check`,available:c.available})}\n`):process.stdout.write(c.available?`available
81
+ `)}async function gd(e,t){let n=wr({input:t??process.stdin,output:process.stdout});try{let t=(await n.question(e)).trim().toLowerCase();return t===``||t===`y`||t===`yes`}finally{n.close()}}function _d(){return new k(`seed`).description(`Scaffold a starter pack into the project. Defaults to "${Ae}" — the Karpathy three-layer knowledge base. Use --pack to pick a different pack (run with --list-packs to see all). Use --root to place pack folders inside a subfolder instead of the project root.`).argument(`[path]`,`Project directory (defaults to cwd)`).option(`-p, --pack <id>`,`Starter pack to scaffold. One of: ${Ce.join(`, `)}. Defaults to "${Ae}".`).option(`-r, --root <path>`,`Subfolder (relative to the project dir) to scaffold into — created if missing. Defaults to the project root.`).option(`--list-packs`,`List available starter packs and exit.`).option(`-y, --yes`,`Skip confirmation prompt`).option(`--dry-run`,`Print the plan and exit without writing`).action(async(e,t)=>{if(t.listPacks){process.stdout.write(`${md()}\n`);return}if(t.pack!==void 0&&!fd(t.pack)){process.stderr.write(`${N(`Error:`)} Unknown pack "${t.pack}". Available: ${Ce.join(`, `)}\n`),process.exitCode=1;return}let n=await pd({cwd:e??process.cwd(),pack:t.pack,root:t.root,yes:t.yes,dryRun:t.dryRun});process.stdout.write(`${n.message}\n`),n.exitCode!==0&&(process.exitCode=n.exitCode)})}async function vd(e,t,n){try{return await e.repos.get({owner:t,repo:n}),{kind:`ok`,available:!1}}catch(e){let t=e.status;return t===404?{kind:`ok`,available:!0}:t===401?{kind:`auth-required`}:{kind:`network`}}}async function yd(e,t){let{host:n,owner:r,name:i,json:a}=e;W(n);let o=await pa(n,t);if(o==null){if(a){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 s=n===`github.com`?void 0:`https://${n}/api/v3`,c=await vd(new oa({auth:o,...s?{baseUrl:s}:{}}),r,i);if(c.kind===`ok`){a?process.stdout.write(`${JSON.stringify({type:`name-check`,available:c.available})}\n`):process.stdout.write(c.available?`available
82
82
  `:`taken
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 bd(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 yd(t,await e())})}async function xd(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 Sd(e,t){let{host:n,json:r}=e;W(n);let i=await pa(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 xd(new oa({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 Cd(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 Sd(t,await e())})}function wd(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
- `)??``}\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 Td(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 Ed(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 Dd(e,t){return(await e.users.getAuthenticated()).data.login.toLowerCase()===t.toLowerCase()?`user`:`org`}function Od(e){return Ft(Ra(e,[])).env(Ma())}function kd(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 Ad={ensureOkScaffold:e=>{rt(e)},gitFactory:Od};async function jd(e){let t={...Ad,...e.deps},n=z(e.projectDir),r;if(e.ownerKind)r=e.ownerKind;else try{r=await Dd(e.octokit,e.body.owner)}catch(e){return{kind:`error`,code:wd(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 Td({octokit:e.octokit,ownerLogin:e.body.owner,ownerKind:r,name:e.body.name,visibility:e.body.visibility,description:e.body.description})}catch(t){if(wd(t)===`name-conflict`){let t=await Ed(e.octokit,e.body.owner,e.body.name);if(t===null)return{kind:`error`,code:`name-conflict`};a=t}else return{kind:`error`,code:wd(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=kd(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 Md(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 Nd(e,t){let{host:n,owner:r,name:i,visibility:a,description:o,projectDir:s,json:c}=e;W(n);let l=await pa(n,t);if(l==null){Md(c,{kind:`error`,code:`auth-required`});return}let u=n===`github.com`?void 0:`https://${n}/api/v3`,d=new oa({auth:l,...u?{baseUrl:u}:{}});try{Jn(`git config user.email`,D({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`}Md(c,await jd({octokit:d,token:l,projectDir:s,body:{owner:r,name:i,visibility:a,description:o}}))}function Pd(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'
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 Td(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 Ed(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 Dd(e,t){return(await e.users.getAuthenticated()).data.login.toLowerCase()===t.toLowerCase()?`user`:`org`}function Od(e){return Ft(Ra(e,[])).env(Ma())}function kd(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 Ad={ensureOkScaffold:e=>{st(e)},gitFactory:Od};async function jd(e){let t={...Ad,...e.deps},n=z(e.projectDir),r;if(e.ownerKind)r=e.ownerKind;else try{r=await Dd(e.octokit,e.body.owner)}catch(e){return{kind:`error`,code:wd(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 Td({octokit:e.octokit,ownerLogin:e.body.owner,ownerKind:r,name:e.body.name,visibility:e.body.visibility,description:e.body.description})}catch(t){if(wd(t)===`name-conflict`){let t=await Ed(e.octokit,e.body.owner,e.body.name);if(t===null)return{kind:`error`,code:`name-conflict`};a=t}else return{kind:`error`,code:wd(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=kd(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 Md(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 Nd(e,t){let{host:n,owner:r,name:i,visibility:a,description:o,projectDir:s,json:c}=e;W(n);let l=await pa(n,t);if(l==null){Md(c,{kind:`error`,code:`auth-required`});return}let u=n===`github.com`?void 0:`https://${n}/api/v3`,d=new oa({auth:l,...u?{baseUrl:u}:{}});try{Jn(`git config user.email`,D({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`}Md(c,await jd({octokit:d,token:l,projectDir:s,body:{owner:r,name:i,visibility:a,description:o}}))}function Pd(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 Nd(t,await e())})}function Fd(){let e=new k(`share`);e.description(`Sharing flow operations (owners, name-check, publish)`);let t=()=>sn();return e.addCommand(Cd(t)),e.addCommand(bd(t)),e.addCommand(Pd(t)),e}function Id(){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=xn(t),r=_n(t,On(t));if(r.kind===`no-exclude`){Ld(e.json,t,r.reason);return}let i=xn(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 Ld(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 Rd(){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=xn(t),r=Cn(t),i=[...mn(t)],a=bn(t,On(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: ${zd(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 zd(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 Bd(){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=Sn(t,On(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`){Vd(e.json,t,n.reason);return}let r=xn(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 Vd(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 Hd(){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(Id()),e.addCommand(Bd()),e.addCommand(Rd()),e}const Ud=new Set([`--cwd`,`--log-level`]);function Wd(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(`-`)){Ud.has(a)&&i++;continue}t.push(a)}}return{operands:t,cwd:n,sawTerminalFlag:r}}function Gd(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 Kd(e){return/\.(md|mdx)$/i.test(e)}function qd(e,t){if(Kd(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 Jd(e=()=>Ln(Bn())){return{prepare:Ge,detectBundlePath:()=>e().bundlePath??null,openTarget:e=>{Fn(`open`,[e])},runProjectOpen:(e,t)=>id(e,{project:t},ed()),runBrowserOpen:e=>Zd(e),log:e=>process.stdout.write(`${e}\n`),error:e=>process.stderr.write(`${e}\n`)}}async function Yd(e,t){let n;try{n=t.prepare(e)}catch(e){if(e instanceof st||e instanceof yt||e instanceof ht)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 Xd(){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 Zd(e){let{createEphemeralProjectDir:t}=await import(`./src-DIjYfcIb.mjs`),{loadConfig:n}=await import(`./index.mjs`),{bootStartServer:r,resolveHost:i}=await import(`./start-DLsDkcBf.mjs`),{openBrowser:a}=await import(`./open-browser-svTSfejY.mjs`),o=Xd();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 vr(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}/#/${Ve(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
- `),a(m)),await new Promise(()=>{})}function Qd(){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=Tt(St(t)?.rootPath??t),r=xt({projectDir:n}),i={...r,skills:r.skills.filter(e=>ye(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=an(O(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 $d(e,t){return{server:ef(`server`,e),ui:ef(`ui`,t)}}function ef(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 tf(e){return`${nf(e.server)}\n${nf(e.ui)}`}function nf(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 rf(e){let t=e.inspect??(t=>an(e.lockDir,t)),n=e.log??(e=>console.log(e)),r=$d(t(`server`),t(`ui`));return e.json?n(JSON.stringify(r,null,2)):n(tf(r)),r}function af(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(),rf({lockDir:O(process.cwd()),json:t.json===!0})})}function Z(e,t,n,r,i){let a=`urn:uuid:${yr()}`;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=ne.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 of=1e4;function sf(e,t){let n=e.socket?.remoteAddress;if(n!==void 0&&!We(n))return Z(t,403,`urn:ok:error:loopback-required`,`Request must originate from a loopback address.`),!0;if(!tt(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&&!Xe(r)?(Z(t,403,`urn:ok:error:invalid-origin`,`Origin header is not in the loopback allowlist.`),!0):!1}const cf=3e4;function lf(e,t){let n=e.socket?.remoteAddress;if(n!==void 0&&!We(n)||!tt(e.headers.host))return t.destroy(),!0;let r=e.headers.origin;return typeof r==`string`&&!Xe(r)?(t.destroy(),!0):!1}function uf(e,t,n,r,i,a){a.add(t),t.once(`close`,()=>a.delete(t));let o=Tr({host:r,port:i,timeout:of});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 df=[`connection`,`keep-alive`,`proxy-authenticate`,`proxy-authorization`,`te`,`trailer`,`transfer-encoding`,`upgrade`,`cookie`,`set-cookie`];async function ff(e){let t=e.upstreamTimeoutMs??of,n=new Set,r=Sr((n,r)=>{sf(n,r)||mf(n,r,e.upstreamHost,e.upstreamPort,t)});r.on(`upgrade`,(t,r,i)=>{lf(t,r)||uf(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 pf(e,t,n){mf(e,t,n.upstreamHost,n.upstreamPort,n.upstreamTimeoutMs??of)}function mf(e,t,n,r,i){let a={...e.headers};delete a.host;for(let e of df)delete a[e];e.setTimeout(cf,()=>{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 ${cf/1e3}s.`)}catch{}try{e.socket?.destroy()}catch{}});let o=Cr({host:n,port:r,method:e.method,path:e.url,headers:{...a,host:`${n}:${r}`}},e=>{let n={...e.headers};for(let e of df)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 hf=39847;async function gf(e){await Promise.all(e.map(e=>new Promise(t=>{e.close(()=>t())})))}async function _f(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-DIjYfcIb.mjs`),{default:p}=await import(`./build-BcDJ6qQ2.mjs`),{resolveContentDir:m,resolveLockDir:h}=await import(`./src-DIjYfcIb.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,ee=e.port,w=null,te=(e,t)=>{let n=e.url?.split(`?`)[0];if((n===`/`||n===``)&&(e.url=`/index.html`),!(n?.startsWith(`/api/`)&&sf(e,t))){if(n===`/api/config`&&(e.method===`GET`||e.method===`HEAD`)){w?.();let n=u(_),r=e.headers.host??`localhost:${ee}`,i=n&&n.port>0?`ws://${r}/collab`:null,a=JSON.stringify({collabUrl:i,previewUrl:null,port:ee});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}pf(e,t,{upstreamHost:C,upstreamPort:r.port});return}if(x&&n?.startsWith(`/assets/`)){x(e,t,()=>{S?S(e,t,()=>vf(t)):vf(t)});return}if(S){S(e,t,()=>{x?x(e,t):vf(t)});return}if(x){x(e,t);return}vf(t)}},T=new Set,ne=(e,t,n)=>{if(lf(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}uf(e,t,n,C,i.port,T)},re=()=>{for(let e of T)try{e.destroy()}catch{}T.clear()},ie=e.host===void 0?[`::1`,`127.0.0.1`]:[e.host],ae=[],oe=e.port,se=e=>e instanceof Error&&e.code===`EADDRINUSE`,ce=async()=>{await Promise.all(ae.splice(0).map(e=>new Promise(t=>{try{e.close(()=>t())}catch{t()}})))},le=async e=>{oe=e;for(let e of ie){let t=i(te);t.on(`upgrade`,ne),ae.push(t),await new Promise((n,r)=>{let i=e=>r(e);t.once(`error`,i),t.listen(oe,e,()=>{t.off(`error`,i);let e=t.address();typeof e==`object`&&e&&(oe=e.port),n()})})}};try{try{await le(e.port)}catch(t){if(e.fallbackToKernel===!0&&se(t))await ce(),await le(0);else throw t}}catch(e){await ce();try{d(_)}catch{}throw e}let ue=oe;ee=ue,f(_,ue);let de=e.scheduler??ge,fe=e.safetyNetMs??432e5,E=null,pe=!1,me=!1,he=()=>{pe||(pe=!0,E!==null&&(de.clearTimeout(E),E=null))},_e=()=>{if(he(),!me){me=!0;try{d(_)}catch{}}},ve=()=>{pe||fe<=0||(E!==null&&(de.clearTimeout(E),E=null),E=de.setTimeout(()=>{E=null,console.warn(`[ui] safety-net (${fe}ms) reached — shutting down (D-025 backstop)`);try{e.onSafetyNet?.()}catch{}re();for(let e of ae)try{e.close()}catch{}_e()},fe))},ye=()=>{pe||fe<=0||ve()};return w=ye,ve(),{httpServers:ae,port:ue,release:_e,detachSafetyNet:he,nudgeSafetyNet:ye,drainUpgradeSockets:re}}function vf(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 yf(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:hf,fallbackToKernel:!0}}async function bf(e){let t=e.readLock??(async()=>{let{readUiLock:t}=await import(`./src-DIjYfcIb.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 ff({listenPort:e.requestedPort,host:e.host,upstreamHost:`localhost`,upstreamPort:r}),upstreamPort:r}}function xf(e){return new k(`ui`).description(`Serve the OpenKnowledge React editor UI`).option(`-p, --port <port>`,`UI port (default: $PORT env or ${hf}, 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-DIjYfcIb.mjs`),{resolveLockDir:i}=await import(`./src-DIjYfcIb.mjs`),a=e(),o=t.host,s;try{s=yf(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 _f({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(),gf(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 bf({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}`),Sf(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 Sf(e){let t=e.stdout.isTTY===!0,n=typeof e.env.PORT==`string`&&e.env.PORT!==``;return!t||n}function Cf(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 wf(e,t){let n=wr({input:e.input,output:e.output});try{return(await n.question(t)).trim()}finally{n.close()}}async function Tf(e={}){let t={input:e.input??process.stdin,output:e.output??process.stderr};t.output.write(j(`
86
+ `)}\n`)})}function zd(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 Bd(){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=Sn(t,On(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`){Vd(e.json,t,n.reason);return}let r=xn(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 Vd(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 Hd(){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(Id()),e.addCommand(Bd()),e.addCommand(Rd()),e}const Ud=new Set([`--cwd`,`--log-level`]);function Wd(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(`-`)){Ud.has(a)&&i++;continue}t.push(a)}}return{operands:t,cwd:n,sawTerminalFlag:r}}function Gd(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 Kd(e){return/\.(md|mdx)$/i.test(e)}function qd(e,t){if(Kd(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 Jd(e=()=>Ln(Bn())){return{prepare:Ye,detectBundlePath:()=>e().bundlePath??null,openTarget:e=>{Fn(`open`,[e])},runProjectOpen:(e,t)=>id(e,{project:t},ed()),runBrowserOpen:e=>Zd(e),log:e=>process.stdout.write(`${e}\n`),error:e=>process.stderr.write(`${e}\n`)}}async function Yd(e,t){let n;try{n=t.prepare(e)}catch(e){if(e instanceof dt||e instanceof xt||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 Xd(){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 Zd(e){let{createEphemeralProjectDir:t}=await import(`./src-h5dDPK2z.mjs`),{loadConfig:n}=await import(`./index.mjs`),{bootStartServer:r,resolveHost:i}=await import(`./start-BYY0acPS.mjs`),{openBrowser:a}=await import(`./open-browser-CxnOIVsL.mjs`),o=Xd();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 vr(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}/#/${Ge(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
+ `),a(m)),await new Promise(()=>{})}function Qd(){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=Ot(Ue(t)?.rootPath??t),r=wt({projectDir:n}),i={...r,skills:r.skills.filter(e=>w(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=an(O(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 $d(e,t){return{server:ef(`server`,e),ui:ef(`ui`,t)}}function ef(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 tf(e){return`${nf(e.server)}\n${nf(e.ui)}`}function nf(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 rf(e){let t=e.inspect??(t=>an(e.lockDir,t)),n=e.log??(e=>console.log(e)),r=$d(t(`server`),t(`ui`));return e.json?n(JSON.stringify(r,null,2)):n(tf(r)),r}function af(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(),rf({lockDir:O(process.cwd()),json:t.json===!0})})}function Z(e,t,n,r,i){let a=`urn:uuid:${yr()}`;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=re.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 of=1e4;function sf(e,t){let n=e.socket?.remoteAddress;if(n!==void 0&&!Dt(n))return Z(t,403,`urn:ok:error:loopback-required`,`Request must originate from a loopback address.`),!0;if(!we(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&&!Tt(r)?(Z(t,403,`urn:ok:error:invalid-origin`,`Origin header is not in the loopback allowlist.`),!0):!1}const cf=3e4;function lf(e,t){let n=e.socket?.remoteAddress;if(n!==void 0&&!Dt(n)||!we(e.headers.host))return t.destroy(),!0;let r=e.headers.origin;return typeof r==`string`&&!Tt(r)?(t.destroy(),!0):!1}function uf(e,t,n,r,i,a){a.add(t),t.once(`close`,()=>a.delete(t));let o=Tr({host:r,port:i,timeout:of});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 df=[`connection`,`keep-alive`,`proxy-authenticate`,`proxy-authorization`,`te`,`trailer`,`transfer-encoding`,`upgrade`,`cookie`,`set-cookie`];async function ff(e){let t=e.upstreamTimeoutMs??of,n=new Set,r=Sr((n,r)=>{sf(n,r)||mf(n,r,e.upstreamHost,e.upstreamPort,t)});r.on(`upgrade`,(t,r,i)=>{lf(t,r)||uf(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 pf(e,t,n){mf(e,t,n.upstreamHost,n.upstreamPort,n.upstreamTimeoutMs??of)}function mf(e,t,n,r,i){let a={...e.headers};delete a.host;for(let e of df)delete a[e];e.setTimeout(cf,()=>{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 ${cf/1e3}s.`)}catch{}try{e.socket?.destroy()}catch{}});let o=Cr({host:n,port:r,method:e.method,path:e.url,headers:{...a,host:`${n}:${r}`}},e=>{let n={...e.headers};for(let e of df)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 hf=39847;async function gf(e){await Promise.all(e.map(e=>new Promise(t=>{e.close(()=>t())})))}async function _f(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-h5dDPK2z.mjs`),{default:p}=await import(`./build-BcDJ6qQ2.mjs`),{resolveContentDir:m,resolveLockDir:h}=await import(`./src-h5dDPK2z.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,ee=e.port,w=null,te=(e,t)=>{let n=e.url?.split(`?`)[0];if((n===`/`||n===``)&&(e.url=`/index.html`),!(n?.startsWith(`/api/`)&&sf(e,t))){if(n===`/api/config`&&(e.method===`GET`||e.method===`HEAD`)){w?.();let n=u(_),r=e.headers.host??`localhost:${ee}`,i=n&&n.port>0?`ws://${r}/collab`:null,a=JSON.stringify({collabUrl:i,previewUrl:null,port:ee});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}pf(e,t,{upstreamHost:C,upstreamPort:r.port});return}if(x&&n?.startsWith(`/assets/`)){x(e,t,()=>{S?S(e,t,()=>vf(t)):vf(t)});return}if(S){S(e,t,()=>{x?x(e,t):vf(t)});return}if(x){x(e,t);return}vf(t)}},ne=new Set,re=(e,t,n)=>{if(lf(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}uf(e,t,n,C,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;ee=de,f(_,de);let fe=e.scheduler??_e,pe=e.safetyNetMs??432e5,T=null,E=!1,me=!1,he=()=>{E||(E=!0,T!==null&&(fe.clearTimeout(T),T=null))},ge=()=>{if(he(),!me){me=!0;try{d(_)}catch{}}},ve=()=>{E||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{}ge()},pe))},ye=()=>{E||pe<=0||ve()};return w=ye,ve(),{httpServers:oe,port:de,release:ge,detachSafetyNet:he,nudgeSafetyNet:ye,drainUpgradeSockets:ie}}function vf(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 yf(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:hf,fallbackToKernel:!0}}async function bf(e){let t=e.readLock??(async()=>{let{readUiLock:t}=await import(`./src-h5dDPK2z.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 ff({listenPort:e.requestedPort,host:e.host,upstreamHost:`localhost`,upstreamPort:r}),upstreamPort:r}}function xf(e){return new k(`ui`).description(`Serve the OpenKnowledge React editor UI`).option(`-p, --port <port>`,`UI port (default: $PORT env or ${hf}, 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-h5dDPK2z.mjs`),{resolveLockDir:i}=await import(`./src-h5dDPK2z.mjs`),a=e(),o=t.host,s;try{s=yf(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 _f({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(),gf(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 bf({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}`),Sf(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 Sf(e){let t=e.stdout.isTTY===!0,n=typeof e.env.PORT==`string`&&e.env.PORT!==``;return!t||n}function Cf(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 wf(e,t){let n=wr({input:e.input,output:e.output});try{return(await n.question(t)).trim()}finally{n.close()}}async function Tf(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
- `));let n=await gn({message:`Before you go, mind sharing why? (optional)`,default:null,pageSize:te.length+1,choices:[...te.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 wf(t,j(`Anything else we should know? (optional) `)),i=await wf(t,j(`Email, if we may follow up (optional) `));return{reason:n,note:r||void 0,email:i||void 0}}async function Ef(e){if(!Cf(e))return`not-prompted`;let t;try{t=await(e.collect??(()=>Tf(e)))()}catch{return`failed`}return ie(t)?((e.output??process.stderr).write(`\n${F(`Thank you. We read every response.`)}\n\n`),(await(e.submit??ae)({...t,source:`cli_uninstall`,appVersion:e.appVersion,platform:e.platform})).ok?`submitted`:`undelivered`):`skipped`}function Df(e,t,n=Of,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 Of(e){try{return qn(`npm`,e,D({encoding:`utf-8`,timeout:5e3,stdio:[`ignore`,`pipe`,`ignore`]}))}catch{return null}}const kf=`━`.repeat(64);function Af(e){let t=[P(kf),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(kf)),t.join(`
91
- `)}function jf(e){return z(e,`..`,`..`)}function Mf(e){return B(L(e,`.ok`))}async function Nf(e){let t=e.findRoot??St,n=e.readRecents??So,r=t(e.cwd)?.rootPath??null,i=bo({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(jf));for(let e of o)a.add(e);r&&a.delete(r);let s=[];r&&Mf(r)&&s.push({path:r,running:o.has(r),current:!0});for(let e of a)Mf(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??Pf)(s)}async function Pf(e){return An({message:`Also remove OpenKnowledge from these projects? (space to toggle; none selected by default)
90
+ `));let n=await gn({message:`Before you go, mind sharing why? (optional)`,default:null,pageSize:ne.length+1,choices:[...ne.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 wf(t,j(`Anything else we should know? (optional) `)),i=await wf(t,j(`Email, if we may follow up (optional) `));return{reason:n,note:r||void 0,email:i||void 0}}async function Ef(e){if(!Cf(e))return`not-prompted`;let t;try{t=await(e.collect??(()=>Tf(e)))()}catch{return`failed`}return ae(t)?((e.output??process.stderr).write(`\n${F(`Thank you. We read every response.`)}\n\n`),(await(e.submit??oe)({...t,source:`cli_uninstall`,appVersion:e.appVersion,platform:e.platform})).ok?`submitted`:`undelivered`):`skipped`}function Df(e,t,n=Of,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 Of(e){try{return qn(`npm`,e,D({encoding:`utf-8`,timeout:5e3,stdio:[`ignore`,`pipe`,`ignore`]}))}catch{return null}}const kf=`━`.repeat(64);function Af(e){let t=[P(kf),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(kf)),t.join(`
91
+ `)}function jf(e){return z(e,`..`,`..`)}function Mf(e){return B(L(e,`.ok`))}async function Nf(e){let t=e.findRoot??Ue,n=e.readRecents??So,r=t(e.cwd)?.rootPath??null,i=bo({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(jf));for(let e of o)a.add(e);r&&a.delete(r);let s=[];r&&Mf(r)&&s.push({path:r,running:o.has(r),current:!0});for(let e of a)Mf(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??Pf)(s)}async function Pf(e){return An({message:`Also remove OpenKnowledge from these projects? (space to toggle; none selected by default)
92
92
  Removes each project's .ok/ config, editor MCP entries, and OK edit-history
93
93
  (.git/ok/). Your markdown content is kept — \`ok start\` re-adds OK later.
94
- `,required:!1,theme:{icon:{checked:`[x]`,unchecked:`[ ]`}},choices:e.map(e=>({name:`${e.path}${e.current?` (current)`:``}${e.running?` (running — will be stopped)`:``}`,value:e.path,checked:!1}))})}const Ff=j(`The openknowledge:// URL scheme deregisters itself once the app is removed — no action needed.`);async function If(e={}){let t=e.home??hr(),n=e.platform??process.platform,r=e.env??process.env,i=z(e.cwd??process.cwd()),a=e.host??`github.com`,o=e.purgeContent??!1,s=e.deps?.discoverLockDirs??gt,c=e.deps?.resolveRecentProjects??Nf,l=e.deps?.detectInstallMethods??Df,u=await s(),d=Do({home:t,platform:n,env:r,host:a,lockDirs:u,marker:en(t),recentDeinitProjectRoots:await c({home:t,platform:n,env:r,cwd:i,lockDirs:u,yes:e.yes,allProjects:e.allProjects,dryRun:e.dryRun,isTTY:e.isTTY}),purgeContent:o}),f=j("Individual projects are only removed when you select them (or pass --all-projects). To remove OpenKnowledge from one project, run `ok deinit` inside it."),p=()=>Af(l(t,e.argv1??process.argv[1]));if(e.dryRun)return{status:`dry-run`,message:e.json?JSON.stringify(Lo(d),null,2):[F(`Would remove (dry-run — no changes made):`),``,Fo(d),``,f,``,p()].join(`
94
+ `,required:!1,theme:{icon:{checked:`[x]`,unchecked:`[ ]`}},choices:e.map(e=>({name:`${e.path}${e.current?` (current)`:``}${e.running?` (running — will be stopped)`:``}`,value:e.path,checked:!1}))})}const Ff=j(`The openknowledge:// URL scheme deregisters itself once the app is removed — no action needed.`);async function If(e={}){let t=e.home??hr(),n=e.platform??process.platform,r=e.env??process.env,i=z(e.cwd??process.cwd()),a=e.host??`github.com`,o=e.purgeContent??!1,s=e.deps?.discoverLockDirs??yt,c=e.deps?.resolveRecentProjects??Nf,l=e.deps?.detectInstallMethods??Df,u=await s(),d=Do({home:t,platform:n,env:r,host:a,lockDirs:u,marker:en(t),recentDeinitProjectRoots:await c({home:t,platform:n,env:r,cwd:i,lockDirs:u,yes:e.yes,allProjects:e.allProjects,dryRun:e.dryRun,isTTY:e.isTTY}),purgeContent:o}),f=j("Individual projects are only removed when you select them (or pass --all-projects). To remove OpenKnowledge from one project, run `ok deinit` inside it."),p=()=>Af(l(t,e.argv1??process.argv[1]));if(e.dryRun)return{status:`dry-run`,message:e.json?JSON.stringify(Lo(d),null,2):[F(`Would remove (dry-run — no changes made):`),``,Fo(d),``,f,``,p()].join(`
95
95
  `),exitCode:0};if(e.json&&!e.yes)return{status:`failed`,message:`${N(`Error:`)} --json requires --yes (or --dry-run) so there is no interactive prompt.`,exitCode:1};if(!e.yes){if(!(e.isTTY??process.stdout.isTTY))return{status:`cancelled`,message:`${N(`Aborted:`)} refusing to uninstall non-interactively without --yes.`,exitCode:1};if(process.stderr.write(`${F(`This will remove OpenKnowledge from your machine:`)}\n\n${Fo(d)}\n\n${P(`This cannot be undone.`)}\n\n`),!await yo(`${F(`Remove all of the above?`)} ${j(`[y/N] `)}`,e.confirmStream))return{status:`cancelled`,message:j(`Cancelled. Nothing was removed.`),exitCode:0}}let m=await jo(d,e.deps?.runRemovalDeps),h=m.failed.length===0?async()=>{await Ef({stdinIsTTY:e.isStdinTTY,stdoutIsTTY:e.isTTY,yes:e.yes,json:e.json,appVersion:Mn,platform:n,...e.deps?.feedback})}:void 0,g=[e.json?JSON.stringify(Ro(`uninstall`,m),null,2):Io(m)];return e.json||(g.push(``,f,Ff),m.failed.length===0&&g.push(``,M(`OpenKnowledge's files have been removed from this machine.`)),g.push(``,p())),{status:m.failed.length>0?`failed`:`done`,message:g.join(`
96
96
  `),exitCode:+(m.failed.length>0),runFeedbackAfterReport:h}}function Lf(){return new k(`uninstall`).description(`Remove OpenKnowledge from your machine — credentials, PATH entries, editor MCP configs, skill bundles, app data, and ~/.ok. Keeps your markdown content and your authored skills (~/.ok/skills) unless --purge-content. Detects the app install and prints how to remove it; never self-deletes.`).option(`-y, --yes`,`Skip the confirmation prompt (removes the global footprint only; add --all-projects to also deinit projects)`).option(`--dry-run`,`Print the removal plan and exit without changing anything`).option(`--json`,`Emit a machine-readable plan/outcome (requires --yes or --dry-run)`).option(`--purge-content`,`Also remove user-authored content (~/.ok/skills)`).option(`--all-projects`,`Also deinit every recent/running project (by default no project is removed — you pick them interactively)`).action(async e=>{let t=await If({yes:e.yes,dryRun:e.dryRun,json:e.json,purgeContent:e.purgeContent,allProjects:e.allProjects});process.stdout.write(`${t.message}\n`),await t.runFeedbackAfterReport?.(),t.exitCode!==0&&(process.exitCode=t.exitCode)})}function Rf(e){return[e,`Copyright (C) 2026 Inkeep, Inc.`,`License GPL-3.0-or-later: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.`,`This is free software: you are free to change and redistribute it.`,`There is NO WARRANTY, to the extent permitted by law.`].join(`
97
- `)}process.argv.includes(`--no-color`)?(process.env.NO_COLOR=`1`,delete process.env.FORCE_COLOR):process.argv.includes(`--color`)&&(process.env.FORCE_COLOR=`1`,delete process.env.NO_COLOR),wt();const Q=new k;let $,zf;function Bf(){return zf}Q.name(`open-knowledge`).description(`Local-first knowledge base with CRDT collaboration`).usage(`[options] [file | command]`).version(Rf(Mn)).option(`--cwd <path>`,`Working directory`).option(`--log-level <level>`,`Log level: silent, error, warn, info (default), debug, trace`,`info`).option(`--no-color`,`Disable color output`).option(`--color`,`Force color output`).hook(`preAction`,e=>{let t=e.opts().cwd;if(t!==void 0&&process.chdir(t),Q.getOptionValueSource(`logLevel`)===`cli`){let e=String(Q.opts().logLevel);process.env.LOG_LEVEL=e,process.env.OK_CONSOLE_LEVEL=e}let n=e.args?.[0],r=Wt(n,process.cwd());r!==null&&(Gt(process.cwd()),process.chdir(r),console.error(`[ok] Using OpenKnowledge project at ${r}`));let i;try{let e=Vn(r??t);if(i=e.config,co(n))for(let t of e.diagnostics)t.code===`REMOVED_KEY`&&console.error(`[ok] ${f(t)}`)}catch(e){if(n===`uninstall`||n===`deinit`)console.error(`[ok] project config could not be loaded; ${n} will use defaults: ${e instanceof Error?e.message:String(e)}`),i=Ue.parse({});else throw e}$=i;let a=e.args?.[0]??e.name()??`cli`;zf=$e({name:`cli`,project:i.project?.name??void 0}),zf.info({command:a,cwd:process.cwd()},`cli command started`)}),Q.action(async()=>{let e=Ln(Bn());if(e.available){In({spawn:Yn},e);return}await Rn($,{})});const Vf=zn(()=>$);Q.addCommand(Vf);const Hf=eu(()=>$);Q.addCommand(Hf),Q.addCommand(kn()),Q.addCommand(_d()),Q.addCommand($u()),Q.addCommand(vo(),{hidden:!0}),Q.addCommand(Gn()),Q.addCommand(Qd());const Uf=od(()=>$);Q.addCommand(Uf),Q.addCommand(Nr(()=>$)),Q.addCommand(zr(()=>$));const Wf=xf(()=>$);Q.addCommand(Wf),Q.addCommand(ad()),Q.addCommand(Jt(()=>$)),Q.addCommand(Ea(()=>$)),Q.addCommand(af(()=>$)),Q.addCommand(Bo()),Q.addCommand(Lf()),Q.addCommand($t()),Q.addCommand(Es()),Q.addCommand(Ca()),Q.addCommand(lo()),Q.addCommand(Sa(Bf)),Q.addCommand(Bs()),Q.addCommand(Xa(()=>$)),Q.addCommand(ld(()=>$)),Q.addCommand(dd(()=>$)),Q.addCommand(ud(()=>$)),Q.addCommand(Fd()),Q.addCommand(Hd()),Q.addHelpText(`after`,`
97
+ `)}process.argv.includes(`--no-color`)?(process.env.NO_COLOR=`1`,delete process.env.FORCE_COLOR):process.argv.includes(`--color`)&&(process.env.FORCE_COLOR=`1`,delete process.env.NO_COLOR),Et();const Q=new k;let $,zf;function Bf(){return zf}Q.name(`open-knowledge`).description(`Local-first knowledge base with CRDT collaboration`).usage(`[options] [file | command]`).version(Rf(Mn)).option(`--cwd <path>`,`Working directory`).option(`--log-level <level>`,`Log level: silent, error, warn, info (default), debug, trace`,`info`).option(`--no-color`,`Disable color output`).option(`--color`,`Force color output`).hook(`preAction`,e=>{let t=e.opts().cwd;if(t!==void 0&&process.chdir(t),Q.getOptionValueSource(`logLevel`)===`cli`){let e=String(Q.opts().logLevel);process.env.LOG_LEVEL=e,process.env.OK_CONSOLE_LEVEL=e}let n=e.args?.[0],r=Wt(n,process.cwd());r!==null&&(Gt(process.cwd()),process.chdir(r),console.error(`[ok] Using OpenKnowledge project at ${r}`));let i;try{let e=Vn(r??t);if(i=e.config,co(n))for(let t of e.diagnostics)t.code===`REMOVED_KEY`&&console.error(`[ok] ${f(t)}`)}catch(e){if(n===`uninstall`||n===`deinit`)console.error(`[ok] project config could not be loaded; ${n} will use defaults: ${e instanceof Error?e.message:String(e)}`),i=Je.parse({});else throw e}$=i;let a=e.args?.[0]??e.name()??`cli`;zf=it({name:`cli`,project:i.project?.name??void 0}),zf.info({command:a,cwd:process.cwd()},`cli command started`)}),Q.action(async()=>{let e=Ln(Bn());if(e.available){In({spawn:Yn},e);return}await Rn($,{})});const Vf=zn(()=>$);Q.addCommand(Vf);const Hf=eu(()=>$);Q.addCommand(Hf),Q.addCommand(kn()),Q.addCommand(_d()),Q.addCommand($u()),Q.addCommand(vo(),{hidden:!0}),Q.addCommand(Gn()),Q.addCommand(Qd());const Uf=od(()=>$);Q.addCommand(Uf),Q.addCommand(Nr(()=>$)),Q.addCommand(zr(()=>$));const Wf=xf(()=>$);Q.addCommand(Wf),Q.addCommand(ad()),Q.addCommand(Jt(()=>$)),Q.addCommand(Ea(()=>$)),Q.addCommand(af(()=>$)),Q.addCommand(Bo()),Q.addCommand(Lf()),Q.addCommand($t()),Q.addCommand(Es()),Q.addCommand(Ca()),Q.addCommand(lo()),Q.addCommand(Sa(Bf)),Q.addCommand(Bs()),Q.addCommand(Xa(()=>$)),Q.addCommand(ld(()=>$)),Q.addCommand(dd(()=>$)),Q.addCommand(ud(()=>$)),Q.addCommand(Fd()),Q.addCommand(Hd()),Q.addHelpText(`after`,`
98
98
  Examples:
99
99
  ok Launch the desktop app (or start a local server if it isn't installed)
100
100
  ok notes.md Open a single markdown file in the editor