@inkeep/open-knowledge 0.9.0-beta.17 → 0.9.0-beta.18

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 (192) hide show
  1. package/dist/THIRD_PARTY_NOTICES.md +30 -0
  2. package/dist/assets/skills/discovery/SKILL.md +1 -1
  3. package/dist/assets/skills/project/SKILL.md +1 -1
  4. package/dist/cli.mjs +49 -51
  5. package/dist/constants-DA4jIddi.mjs +2 -0
  6. package/dist/{dist-BO9a8zPl.mjs → dist-CALGnBzw.mjs} +1 -1
  7. package/dist/{dist-eWWovL1R.mjs → dist-Dj9BYfL1.mjs} +2 -2
  8. package/dist/index.d.mts +27 -1
  9. package/dist/index.mjs +1 -1
  10. package/dist/init-C4yicZJj.mjs +300 -0
  11. package/dist/init-D2ErEQSV.mjs +1 -0
  12. package/dist/{loader-4PWBhAQr.mjs → loader-BzTd4HIW.mjs} +2 -2
  13. package/dist/loader-rxlzR_EV.mjs +1 -0
  14. package/dist/{preview-Bhv-E1fS.mjs → preview-24NAxCj4.mjs} +2 -2
  15. package/dist/preview-CgF7QsDc.mjs +1 -0
  16. package/dist/public/assets/ActivityModeContent-DsAp4Qx_.js +2 -0
  17. package/dist/public/assets/ConsentDialogBody-B79cSNWQ.js +2 -0
  18. package/dist/public/assets/DocumentContext-1c9fBKpu.js +61 -0
  19. package/dist/public/assets/{GraphPanel-BZLyzZlB.js → GraphPanel-D51Xzs9Z.js} +3 -3
  20. package/dist/public/assets/{McpConsentDialogBody-zLI2c1sC.js → McpConsentDialogBody-DlKF-rkf.js} +1 -1
  21. package/dist/public/assets/SettingsDialogBody-sKkiFGm_.js +7 -0
  22. package/dist/public/assets/{SourceEditor-BurQPyPf.js → SourceEditor-Ce0fDpat.js} +1 -1
  23. package/dist/public/assets/{_baseFor-B3FCzyNW.js → _baseFor-Dewzr4ka.js} +1 -1
  24. package/dist/public/assets/{arc-GOD6SLHR.js → arc-DA-_Qgty.js} +1 -1
  25. package/dist/public/assets/architecture-YZFGNWBL-ii1DMScC.js +1 -0
  26. package/dist/public/assets/{architectureDiagram-Q4EWVU46-CIVh0TLx.js → architectureDiagram-Q4EWVU46-Wd0Ua0Z1.js} +1 -1
  27. package/dist/public/assets/{blockDiagram-DXYQGD6D-Cg-UHasz.js → blockDiagram-DXYQGD6D-B_z4vCOg.js} +1 -1
  28. package/dist/public/assets/{c4Diagram-AHTNJAMY-KFeHAAOO.js → c4Diagram-AHTNJAMY-CXNX0C7S.js} +1 -1
  29. package/dist/public/assets/channel-BsgewBDI.js +1 -0
  30. package/dist/public/assets/{chunk-2KRD3SAO-ChBquZUZ.js → chunk-2KRD3SAO-QHu6lS2z.js} +1 -1
  31. package/dist/public/assets/{chunk-336JU56O-DHqaXNrn.js → chunk-336JU56O-D77Rj_75.js} +2 -2
  32. package/dist/public/assets/chunk-426QAEUC-b3iWz8H-.js +1 -0
  33. package/dist/public/assets/{chunk-4BX2VUAB-Dagml-_v.js → chunk-4BX2VUAB-CDjfF5mJ.js} +1 -1
  34. package/dist/public/assets/{chunk-4TB4RGXK-QLafKs7A.js → chunk-4TB4RGXK-DgzpC1RW.js} +1 -1
  35. package/dist/public/assets/chunk-55IACEB6-DLoy8CmX.js +1 -0
  36. package/dist/public/assets/{chunk-5FUZZQ4R-DoG5zk7O.js → chunk-5FUZZQ4R-pDx0Wde8.js} +1 -1
  37. package/dist/public/assets/{chunk-5PVQY5BW--zDnbXdQ.js → chunk-5PVQY5BW-kcWn_d-_.js} +1 -1
  38. package/dist/public/assets/{chunk-67CJDMHE-BDDJCVvR.js → chunk-67CJDMHE-DlS8iVRi.js} +1 -1
  39. package/dist/public/assets/{chunk-7N4EOEYR-DcM-tXJf.js → chunk-7N4EOEYR-BhSQn_oU.js} +1 -1
  40. package/dist/public/assets/{chunk-AA7GKIK3-CIk9DOam.js → chunk-AA7GKIK3-C1CcYx5B.js} +1 -1
  41. package/dist/public/assets/{chunk-BSJP7CBP-CC13npHT.js → chunk-BSJP7CBP-B5xN369R.js} +1 -1
  42. package/dist/public/assets/{chunk-CIAEETIT-B7rpgB3I.js → chunk-CIAEETIT-ecxKAxUb.js} +1 -1
  43. package/dist/public/assets/{chunk-EDXVE4YY-BfT15Ufb.js → chunk-EDXVE4YY-Bm2-fU6x.js} +1 -1
  44. package/dist/public/assets/{chunk-ENJZ2VHE-DEtEhITq.js → chunk-ENJZ2VHE-1bYQNnwE.js} +1 -1
  45. package/dist/public/assets/{chunk-FMBD7UC4-DXl_nUYs.js → chunk-FMBD7UC4-Da7gMLWx.js} +1 -1
  46. package/dist/public/assets/{chunk-FOC6F5B3-wEKzMqND.js → chunk-FOC6F5B3-CHF5QCPz.js} +1 -1
  47. package/dist/public/assets/{chunk-ICPOFSXX-C8AElYY_.js → chunk-ICPOFSXX-rmT7ehAO.js} +1 -1
  48. package/dist/public/assets/{chunk-K5T4RW27-DcJgbIMU.js → chunk-K5T4RW27-CHoEPFOL.js} +1 -1
  49. package/dist/public/assets/{chunk-KGLVRYIC-kNC4I9ls.js → chunk-KGLVRYIC-DRtjGHKV.js} +1 -1
  50. package/dist/public/assets/{chunk-LIHQZDEY-B0zYcYPV.js → chunk-LIHQZDEY-GDhBbkMd.js} +1 -1
  51. package/dist/public/assets/{chunk-ORNJ4GCN-S_3Y_0FS.js → chunk-ORNJ4GCN-C9FrQ4Hp.js} +1 -1
  52. package/dist/public/assets/{chunk-OYMX7WX6-CX3nrwxJ.js → chunk-OYMX7WX6-CAW2HwTq.js} +1 -1
  53. package/dist/public/assets/chunk-QZHKN3VN-XrJADtWP.js +1 -0
  54. package/dist/public/assets/{chunk-U2HBQHQK-CfAyyLJz.js → chunk-U2HBQHQK-Cg7rxXd1.js} +1 -1
  55. package/dist/public/assets/{chunk-X2U36JSP-CmACymAN.js → chunk-X2U36JSP-Z4V8etFJ.js} +1 -1
  56. package/dist/public/assets/{chunk-XPW4576I-D1s3NdKZ.js → chunk-XPW4576I-Ci37cmyJ.js} +1 -1
  57. package/dist/public/assets/{chunk-YZCP3GAM-CiWxV9XS.js → chunk-YZCP3GAM-BlAQKShJ.js} +1 -1
  58. package/dist/public/assets/{chunk-ZZ45TVLE-B7t5_MqN.js → chunk-ZZ45TVLE-CKHp-exc.js} +1 -1
  59. package/dist/public/assets/classDiagram-6PBFFD2Q-Bt8hJVX9.js +1 -0
  60. package/dist/public/assets/classDiagram-v2-HSJHXN6E-BTPIteVB.js +1 -0
  61. package/dist/public/assets/clone-B_tH2FKO.js +1 -0
  62. package/dist/public/assets/config-validation-events-CdI6KjcP.js +12 -0
  63. package/dist/public/assets/{cose-bilkent-S5V4N54A-BjJ-OKPr.js → cose-bilkent-S5V4N54A-CzOLOBap.js} +1 -1
  64. package/dist/public/assets/{dagre-BuFRtOcC.js → dagre-CbTJGa51.js} +1 -1
  65. package/dist/public/assets/{dagre-KV5264BT-BpBW6R71.js → dagre-KV5264BT-CzrIWBHi.js} +1 -1
  66. package/dist/public/assets/{diagram-5BDNPKRD-B5phtkJp.js → diagram-5BDNPKRD-DDHvw5SM.js} +1 -1
  67. package/dist/public/assets/{diagram-G4DWMVQ6-tjReW6yx.js → diagram-G4DWMVQ6-DiQx8aIN.js} +1 -1
  68. package/dist/public/assets/{diagram-MMDJMWI5-b4CgKryF.js → diagram-MMDJMWI5-CJELLr4J.js} +1 -1
  69. package/dist/public/assets/{diagram-TYMM5635-D5B0g2lj.js → diagram-TYMM5635-BHwicR15.js} +1 -1
  70. package/dist/public/assets/{dist-y5PvfJVO.js → dist-B3L7cm0M.js} +1 -1
  71. package/dist/public/assets/{dist-CdAufVHw.js → dist-BMooy-F_.js} +1 -1
  72. package/dist/public/assets/{dist-DkR43q3h.js → dist-BiYnsAMa.js} +1 -1
  73. package/dist/public/assets/{dist-CadHdAvi.js → dist-CATLRngz.js} +1 -1
  74. package/dist/public/assets/{dist-Cwt7KtW7.js → dist-Cp-iTcML.js} +1 -1
  75. package/dist/public/assets/dist-DicqJavT.js +1 -0
  76. package/dist/public/assets/{dist-DRBAXDc3.js → dist-Dwop2AD8.js} +1 -1
  77. package/dist/public/assets/dist-P7DYrfOB.js +1 -0
  78. package/dist/public/assets/{erDiagram-SMLLAGMA-CRJz10Jv.js → erDiagram-SMLLAGMA-DdltplqB.js} +1 -1
  79. package/dist/public/assets/{flatten-BWAerz3O.js → flatten-BdgTwKTr.js} +1 -1
  80. package/dist/public/assets/{flowDiagram-DWJPFMVM-BDCJTgJ7.js → flowDiagram-DWJPFMVM-CQHlOxjR.js} +1 -1
  81. package/dist/public/assets/{ganttDiagram-T4ZO3ILL-cPQKlGYc.js → ganttDiagram-T4ZO3ILL-CNDOT9hb.js} +1 -1
  82. package/dist/public/assets/gitGraph-7Q5UKJZL-CIz9LX1B.js +1 -0
  83. package/dist/public/assets/{gitGraphDiagram-UUTBAWPF-BMyjc352.js → gitGraphDiagram-UUTBAWPF-BgXxQBs9.js} +1 -1
  84. package/dist/public/assets/{graphlib-BU8FnRz1.js → graphlib-CrrIJ98S.js} +1 -1
  85. package/dist/public/assets/index-BkfwH1Zz.js +1914 -0
  86. package/dist/public/assets/info-OMHHGYJF-CIFsXa-y.js +1 -0
  87. package/dist/public/assets/{infoDiagram-42DDH7IO-BZ6v5y-j.js → infoDiagram-42DDH7IO-BNSprTvD.js} +1 -1
  88. package/dist/public/assets/{isEmpty-Cairwk5V.js → isEmpty-XlV2b3kS.js} +1 -1
  89. package/dist/public/assets/isSymbol-CiN6ou2H.js +1 -0
  90. package/dist/public/assets/{ishikawaDiagram-UXIWVN3A-DA7_P2Up.js → ishikawaDiagram-UXIWVN3A-COSeJVOI.js} +1 -1
  91. package/dist/public/assets/{journeyDiagram-VCZTEJTY-CzZoB161.js → journeyDiagram-VCZTEJTY-sGfNXUrs.js} +1 -1
  92. package/dist/public/assets/{kanban-definition-6JOO6SKY-DKg7pXv1.js → kanban-definition-6JOO6SKY-DknMinG3.js} +1 -1
  93. package/dist/public/assets/{line-DGc-MCyQ.js → line-BI6r6-S8.js} +1 -1
  94. package/dist/public/assets/{linear-D6wzOaQP.js → linear-1aKBO-v1.js} +1 -1
  95. package/dist/public/assets/{mermaid-parser.core-Bm2u0Ges.js → mermaid-parser.core-BrufKICx.js} +2 -2
  96. package/dist/public/assets/{mermaid.core-DRx0wZe0.js → mermaid.core-hgzeX18g.js} +3 -3
  97. package/dist/public/assets/{mindmap-definition-QFDTVHPH-C9GRZxO6.js → mindmap-definition-QFDTVHPH-X4KQZFdB.js} +1 -1
  98. package/dist/public/assets/{now-BN_Nj6nz.js → now--RAZR_wd.js} +1 -1
  99. package/dist/public/assets/{ordinal-Dk6d5Y-0.js → ordinal-C6wHcby9.js} +1 -1
  100. package/dist/public/assets/packet-4T2RLAQJ-BaGTVTK6.js +1 -0
  101. package/dist/public/assets/pie-ZZUOXDRM-BlBm3k_7.js +1 -0
  102. package/dist/public/assets/{pieDiagram-DEJITSTG-L6I3ft9Z.js → pieDiagram-DEJITSTG-5kceM3o3.js} +1 -1
  103. package/dist/public/assets/{prop-types-aT575Fhm.js → prop-types-CfHbVTyU.js} +136 -136
  104. package/dist/public/assets/{quadrantDiagram-34T5L4WZ-Dp2IeEPC.js → quadrantDiagram-34T5L4WZ-CQehowKY.js} +1 -1
  105. package/dist/public/assets/radar-PYXPWWZC-DcDFZeKR.js +1 -0
  106. package/dist/public/assets/{reduce-CSWSFqzz.js → reduce-C4NH7ua9.js} +1 -1
  107. package/dist/public/assets/{requirementDiagram-MS252O5E-BxNWyIZg.js → requirementDiagram-MS252O5E-DySfGFfG.js} +1 -1
  108. package/dist/public/assets/{sankeyDiagram-XADWPNL6-CRn0_xkw.js → sankeyDiagram-XADWPNL6-CMU0uGgr.js} +1 -1
  109. package/dist/public/assets/{sequenceDiagram-FGHM5R23-Drkjb1j4.js → sequenceDiagram-FGHM5R23-BlnukeK1.js} +1 -1
  110. package/dist/public/assets/{src-DZeiyxTL.js → src-BXk72DrU.js} +1 -1
  111. package/dist/public/assets/{stateDiagram-FHFEXIEX-BBUFKS0u.js → stateDiagram-FHFEXIEX-B7C4fJw1.js} +1 -1
  112. package/dist/public/assets/stateDiagram-v2-QKLJ7IA2-BjMTOSSV.js +1 -0
  113. package/dist/public/assets/{target-navigation-intent-BPXK-fNF.js → target-navigation-intent-DkbGLcLk.js} +1 -1
  114. package/dist/public/assets/{telemetry-impl-DLAKvA29.js → telemetry-impl-CuUV_174.js} +2 -2
  115. package/dist/public/assets/textarea-Capp8KrP.js +1 -0
  116. package/dist/public/assets/{timeline-definition-GMOUNBTQ-CLoe9y-z.js → timeline-definition-GMOUNBTQ-DAcQtRlS.js} +1 -1
  117. package/dist/public/assets/toggle-group-Cs-1L92l.js +1 -0
  118. package/dist/public/assets/treeView-SZITEDCU-DT6-aoa9.js +1 -0
  119. package/dist/public/assets/treemap-W4RFUUIX-JWBoWOdi.js +1 -0
  120. package/dist/public/assets/typing-burst-detector-DgMy7lBI.js +2 -0
  121. package/dist/public/assets/{vennDiagram-DHZGUBPP-q2zdiy4F.js → vennDiagram-DHZGUBPP-D5QpqXSc.js} +1 -1
  122. package/dist/public/assets/wardley-RL74JXVD-GxyzoOqN.js +1 -0
  123. package/dist/public/assets/{wardleyDiagram-NUSXRM2D-Njg6YHso.js → wardleyDiagram-NUSXRM2D-CV74dN2L.js} +1 -1
  124. package/dist/public/assets/{xychartDiagram-5P7HB3ND-Ct8Wgp45.js → xychartDiagram-5P7HB3ND-VYAkLjyv.js} +1 -1
  125. package/dist/public/index.html +20 -18
  126. package/dist/{repair-launch-json-CZU8VRgE.mjs → repair-launch-json-BDIpiikx.mjs} +2 -2
  127. package/dist/repair-mcp-configs-CmIZxDRO.mjs +2 -0
  128. package/dist/repair-skills-COfml03g.mjs +1 -0
  129. package/dist/{repair-skills-PmgRAebo.mjs → repair-skills-CtvdU8P7.mjs} +2 -2
  130. package/dist/{src-CNn_hgDt.mjs → src-D2EdRsfI.mjs} +2 -2
  131. package/dist/{start-BZw-ZUeC.mjs → start-BL-EnavU.mjs} +2 -2
  132. package/dist/start-CifdBH55.mjs +1 -0
  133. package/dist/{write-project-skill-B5IcYKkU.mjs → write-project-skill-BLaG06dA.mjs} +2 -2
  134. package/package.json +2 -1
  135. package/dist/constants-x13FHmEA.mjs +0 -2
  136. package/dist/init-B7LwPw73.mjs +0 -1
  137. package/dist/init-BpZoh-IB.mjs +0 -281
  138. package/dist/loader-BLASVgrL.mjs +0 -1
  139. package/dist/preview-EYxPWIZ-.mjs +0 -1
  140. package/dist/public/assets/ActivityModeContent-DZuWquln.js +0 -2
  141. package/dist/public/assets/ConsentDialogBody-CGOr8j6S.js +0 -2
  142. package/dist/public/assets/DocumentContext-Dxan0ulz.js +0 -61
  143. package/dist/public/assets/SettingsDialogBody-D6_VytdC.js +0 -7
  144. package/dist/public/assets/architecture-YZFGNWBL-B2pJrg2X.js +0 -1
  145. package/dist/public/assets/channel-BqqURnVG.js +0 -1
  146. package/dist/public/assets/chunk-426QAEUC-CuPmuy8t.js +0 -1
  147. package/dist/public/assets/chunk-55IACEB6-BRPDx2aU.js +0 -1
  148. package/dist/public/assets/chunk-QZHKN3VN-CTZ4su3-.js +0 -1
  149. package/dist/public/assets/classDiagram-6PBFFD2Q-DrN_pUa5.js +0 -1
  150. package/dist/public/assets/classDiagram-v2-HSJHXN6E-C1MJ1Ukt.js +0 -1
  151. package/dist/public/assets/clone-CecJCxEU.js +0 -1
  152. package/dist/public/assets/config-validation-events-D1a8eR7j.js +0 -12
  153. package/dist/public/assets/gitGraph-7Q5UKJZL-BMann5g7.js +0 -1
  154. package/dist/public/assets/index-BBoMBxZV.js +0 -1914
  155. package/dist/public/assets/info-OMHHGYJF-CKMkwFH6.js +0 -1
  156. package/dist/public/assets/isSymbol-BKUBGC2u.js +0 -1
  157. package/dist/public/assets/packet-4T2RLAQJ-DXn_0fd3.js +0 -1
  158. package/dist/public/assets/pie-ZZUOXDRM-BdZBZPW9.js +0 -1
  159. package/dist/public/assets/radar-PYXPWWZC-yUE2OrUV.js +0 -1
  160. package/dist/public/assets/stateDiagram-v2-QKLJ7IA2-BtYsWsIg.js +0 -1
  161. package/dist/public/assets/textarea-C_bHQrXh.js +0 -1
  162. package/dist/public/assets/toggle-group-BxyYbA6G.js +0 -1
  163. package/dist/public/assets/treeView-SZITEDCU-BjJ_gnFc.js +0 -1
  164. package/dist/public/assets/treemap-W4RFUUIX-DiV984fD.js +0 -1
  165. package/dist/public/assets/typing-burst-detector-BY1B6_tL.js +0 -2
  166. package/dist/public/assets/wardley-RL74JXVD-DbPCtCHV.js +0 -1
  167. package/dist/repair-mcp-configs-DkvcUBls.mjs +0 -2
  168. package/dist/repair-skills-DjdnsgMp.mjs +0 -1
  169. package/dist/start-CZy2MSSR.mjs +0 -1
  170. /package/dist/public/assets/{ActivityPanelDiffView-LNHry3BJ.js → ActivityPanelDiffView-BNQupLE1.js} +0 -0
  171. /package/dist/public/assets/{__vite-browser-external-Bet_nOzq.js → __vite-browser-external-mvD4HPu0.js} +0 -0
  172. /package/dist/public/assets/{array-DfeqBzds.js → array-o2rfyIz3.js} +0 -0
  173. /package/dist/public/assets/{checkbox-CBMLW0iM.js → checkbox-DoU3OXGx.js} +0 -0
  174. /package/dist/public/assets/{colors-CuFmRbNJ.js → colors-BbIH8S-B.js} +0 -0
  175. /package/dist/public/assets/{cytoscape.esm-C3hcpWGW.js → cytoscape.esm-xzkCxEpv.js} +0 -0
  176. /package/dist/public/assets/{defaultLocale-CmG7Nywc.js → defaultLocale-D3xTVDt1.js} +0 -0
  177. /package/dist/public/assets/{dist-sw9fzKjM.js → dist-D2RGH7XO.js} +0 -0
  178. /package/dist/public/assets/{dist-GFox5lpz.js → dist-TlK-S7KL.js} +0 -0
  179. /package/dist/public/assets/{go-BjDSeE19.js → go-e6pdpn6U.js} +0 -0
  180. /package/dist/public/assets/{init-D-V7N9g_.js → init-gbiKrEzm.js} +0 -0
  181. /package/dist/public/assets/{isObjectLike-HLvQwJYx.js → isObjectLike-BNNgtFA6.js} +0 -0
  182. /package/dist/public/assets/{label-DCMZaJ38.js → label-DwEePOBC.js} +0 -0
  183. /package/dist/public/assets/{mcp-consent-store-19Boxoxe.js → mcp-consent-store-CijO54Jd.js} +0 -0
  184. /package/dist/public/assets/{min-CHzARyU6.js → min-VayDM1tY.js} +0 -0
  185. /package/dist/public/assets/{path-Bf8MP5yP.js → path-DFpIsaqN.js} +0 -0
  186. /package/dist/public/assets/{pdf-wFLJduM2.js → pdf-w2KBoLit.js} +0 -0
  187. /package/dist/public/assets/{pdf.worker-CP44mBOj.js → pdf.worker-BpRoOtgY.js} +0 -0
  188. /package/dist/public/assets/{project-paths-eyh51nmQ.js → project-paths-CsGHlmFh.js} +0 -0
  189. /package/dist/public/assets/{rough.esm-Di0388iR.js → rough.esm-BgPNbngg.js} +0 -0
  190. /package/dist/public/assets/{shell-184Lov7C.js → shell-BkCD5kyH.js} +0 -0
  191. /package/dist/public/assets/{src-Dz70a8sm.js → src-BYmEUJ3I.js} +0 -0
  192. /package/dist/public/assets/{stex-DxnLy7rA.js → stex-J8UMaf7u.js} +0 -0
@@ -0,0 +1,2 @@
1
+ import"./server-lock-BpjJj3OD-B9uBbH7Z.mjs";var e=`0.9.0-beta.18`;const t=`config.yml`,n=e;export{n,t};
2
+ //# sourceMappingURL=constants-DA4jIddi.mjs.map
@@ -1 +1 @@
1
- import{Br as e,Cn as t,K as n,Wr as r,a as i,an as a,bn as o,c as s,d as c,f as l,g as u,h as d,i as f,l as p,ln as m,m as h,n as g,o as _,p as v,r as y,s as b,t as x,u as S,yr as C}from"./server-lock-BpjJj3OD-B9uBbH7Z.mjs";import{$ as w,$n as T,$r as E,$t as D,A as O,An as k,Ar as A,At as j,B as M,Bn as N,Br as P,Bt as F,C as I,Cn as L,Cr as R,Ct as z,D as B,Dn as V,Dr as H,Dt as U,E as W,En as G,Er as K,Et as q,F as J,Fn as Y,Fr as X,Ft as Z,G as Q,Gn as $,Gr as ee,Gt as te,H as ne,Hn as re,Hr as ie,Ht as ae,I as oe,In as se,Ir as ce,It as le,J as ue,Jn as de,Jr as fe,Jt as pe,K as me,Kn as he,Kr as ge,Kt as _e,L as ve,Ln as ye,Lr as be,Lt as xe,M as Se,Mn as Ce,Mr as we,Mt as Te,N as Ee,Nn as De,Nr as Oe,Nt as ke,O as Ae,Oi as je,On as Me,Or as Ne,Ot as Pe,P as Fe,Pn as Ie,Pr as Le,Pt as Re,Q as ze,Qn as Be,Qr as Ve,Qt as He,R as Ue,Rn as We,Rr as Ge,Rt as Ke,S as qe,Sn as Je,Sr as Ye,St as Xe,T as Ze,Tn as Qe,Tr as $e,Tt as et,U as tt,Un as nt,Ur as rt,Ut as it,V as at,Vn as ot,Vr as st,Vt as ct,W as lt,Wn as ut,Wr as dt,Wt as ft,X as pt,Xn as mt,Xr as ht,Xt as gt,Y as _t,Yn as vt,Yr as yt,Yt as bt,Z as xt,Zn as St,Zr as Ct,Zt as wt,_ as Tt,_n as Et,_r as Dt,_t as Ot,a as kt,ai as At,an as jt,ar as Mt,at as Nt,b as Pt,bn as Ft,br as It,bt as Lt,c as Rt,ci as zt,cn as Bt,cr as Vt,ct as Ht,d as Ut,di as Wt,dn as Gt,dr as Kt,dt as qt,ei as Jt,en as Yt,er as Xt,et as Zt,f as Qt,fi as $t,fn as en,fr as tn,ft as nn,g as rn,gi as an,gn as on,gr as sn,gt as cn,h as ln,hi as un,hn as dn,hr as fn,ht as pn,i as mn,ii as hn,in as gn,ir as _n,it as vn,j as yn,jn as bn,jr as xn,jt as Sn,k as Cn,ki as wn,kn as Tn,kr as En,kt as Dn,l as On,li as kn,ln as An,lr as jn,lt as Mn,m as Nn,mi as Pn,mn as Fn,mr as In,mt as Ln,n as Rn,ni as zn,nn as Bn,nr as Vn,nt as Hn,o as Un,oi as Wn,on as Gn,or as Kn,ot as qn,p as Jn,pi as Yn,pn as Xn,pr as Zn,pt as Qn,q as $n,qn as er,qr as tr,qt as nr,r as rr,ri as ir,rn as ar,rr as or,rt as sr,s as cr,si as lr,sn as ur,sr as dr,st as fr,t as pr,ti as mr,tn as hr,tr as gr,tt as _r,u as vr,ui as yr,un as br,ur as xr,ut as Sr,v as Cr,vn as wr,vr as Tr,vt as Er,w as Dr,wn as Or,wr as kr,wt as Ar,x as jr,xn as Mr,xr as Nr,xt as Pr,y as Fr,yn as Ir,yr as Lr,yt as Rr,z as zr,zn as Br,zr as Vr,zt as Hr}from"./dist-eWWovL1R.mjs";export{pr as AGENT_ID_MAX_LEN,Rn as AGENT_ID_RE,rr as AGENT_WRITE_ORIGIN,mn as AgentFocusBroadcaster,kt as AgentPresenceBroadcaster,Un as AgentSessionCapacityError,cr as AgentSessionManager,Rt as BacklinkIndex,On as CC1Broadcaster,n as CC1_CONTRACT_VERSION,vr as CONFIG_FILENAME,Ut as CONFLICT_MARKER_RE,Qt as CURSOR_BUNDLE_PATHS_BY_PLATFORM,Jn as ConfigSchema,Nn as DEFAULT_CHECKPOINT_RETENTION,ln as DEFAULT_PACK_ID,rn as FILE_SYSTEM_WRITER,Tt as FILE_WATCHER_ORIGIN,Cr as GIT_PREFLIGHT_FAIL_SPAN_NAME,Fr as GIT_UPSTREAM_WRITER,je as GitDirAccessError,Pt as GitNotAvailableError,jr as GitTooOldError,qe as HOCUSPOCUS_AUTH_REJECTION_REASONS,I as HocuspocusAuthRejection,Dr as HocuspocusAuthTokenSchema,Ze as INSTALLED_AGENTS_SCHEMES,W as LIVE_DERIVED_INDEX_DEBOUNCE_MS,B as LOG_MD_TEMPLATE,Ae as MANAGED_RENAME_ORIGIN,Cn as MAX_AGENT_SESSIONS,O as MCP_CONNECTION_ID_HEADER,yn as MCP_SERVER_NAME,Se as MIN_GIT_VERSION,Ee as MISSING_OK_CONFIG_MESSAGE,wn as MalformedGitPointerError,Fe as McpLogger,J as MissingOkConfigError,oe as OBSERVER_SYNC_ORIGIN,ve as OK_OKIGNORE_TEMPLATE,a as ORPHAN_MODES,Ue as PANE_TARGET_TTL_MS,m as PROTOCOL_VERSION,zr as PinoLogger,x as ProcessLockCollisionError,M as ProjectGitInitError,at as ROLLBACK_ORIGIN,ne as ROOT_GITIGNORE_TEMPLATE,g as RUNTIME_VERSION,tt as SERVICE_WRITER,lt as SKILL_INSTALL_EVENTS_FILE_REL,o as SKILL_STATE_TARGETS,Q as STARTER_FOLDERS,me as STARTER_FOLDER_FRONTMATTER_FILENAME,$n as STARTER_PACKS,ue as STARTER_PACK_IDS,_t as STARTER_TEMPLATES,pt as STATE_MANIFEST_FILENAME,y as STATE_SCHEMA_VERSION,t as SYSTEM_DOC_NAME,xt as SeedPrerequisiteError,ze as SeedRootDirError,f as ServerLockCollisionError,w as StateManifestError,Zt as TagIndex,_r as UiLockCollisionError,i as acquireProcessLock,_ as acquireServerLock,Hn as acquireUiLock,sr as applyAgentMarkdownWrite,vn as applyExternalChange,Nt as applySeed,qn as armPaneTarget,fr as assertCompatibleStateManifest,Ht as assertGitAvailable,Mn as assertNeverDiskEvent,Sr as attachIdleShutdown,qt as bootServer,nn as buildAndOpenSkill,Qn as buildConfigYmlContent,Ln as buildExecResult,pn as buildInstructions,cn as buildSkillZip,Ot as buildStarterFolderFrontmatterYaml,Er as buildWipTree,Rr as classifyEvents,Lt as classifyFsPath,Pr as clearArmedPaneTarget,Xe as clearContributors,z as coercePackId,C as colorFromSeed,Ar as commitUpstreamImport,et as commitWip,q as commitWipFromTree,U as compareSemver,Pe as containsConflictMarkers,Dn as contentHash,j as contributorCount,Sn as createApiExtension,Te as createAssetServeMiddleware,ke as createContentFilter,Re as createContentFilterAsync,Z as createExternalChangeHandler,le as createFileLogger,xe as createLiveDerivedIndexExtension,Ke as createMcpHttpHandler,Hr as createOsProbe,F as createPersistenceExtension,ct as createServer,ae as createServerObserverExtension,it as createStreamingErrorWriter,ft as createTestLogger,te as detectClaudeDesktopPresence,_e as detectGit,nr as detectProjectShape,pe as emitPreflightFailureSpan,bt as ensureProjectGit,gt as errorResponse,wt as evictStaleTrackerEntries,He as extractWikiLinksFromMarkdown,D as fallbackPaths,Yt as findEnclosingGitRoot,hr as findEnclosingProjectRoot,Bn as formatAuthRejectionWire,ar as formatContributors,gn as formatContributorsFrom,jt as gcCheckpointRefs,Gn as getCurrentMcpLogger,ur as getLocalDir,Bt as getLogFilePath,An as getLogger,br as getLogsDir,Gt as getMeter,en as getMetrics,Xn as getTracer,Fn as handleCollabSocketError,dn as handleSpawnCursor,e as iconFromClientName,on as incrementCollabSocketFilteredError,Et as incrementServerObserverFire,wr as initContent,Ir as initShadowRepo,Ft as initTelemetry,Mr as installPrettyZodErrors,Je as installTestLoggers,L as installUserSkill,Or as isAllowedApiOrigin,Qe as isAllowedWorkspaceHostHeader,G as isConfigDoc,V as isHocuspocusAuthRejectionReason,Me as isKnownPackId,Tn as isLoopbackAddress,r as isOrphanMode,k as isPairedWriteOrigin,bn as isPathWithinDir,b as isProcessAlive,Ce as isProjectRoot,De as isSelfWrite,Ie as isSystemDoc,s as isValidLockPid,Y as lastKnownHash,se as listRescueCheckpoints,ye as listStarterPacks,We as loadPrincipal,p as lockFilePath,Br as loggerFactory,N as logsCurrentPath,ot as logsPreviousPath,re as mountMcpAndApi,nt as normalizeFsPath,ut as packageVersionMajorMinor,$ as parseAuthRejectionWire,he as parseGitVersion,er as parseHocuspocusAuthToken,de as parseKeepaliveConnectionId,vt as pathToDocName,mt as planSeed,St as readAllTargets,Be as readArmedPaneTarget,T as readBranchFromHead,S as readProcessLock,c as readProcessLockDetailed,l as readServerLock,Xt as readServerPackageVersion,gr as readSkillInstallStateSnapshot,Vn as readStateManifest,or as readTargetRecordedAt,_n as readTargetVersion,Mt as readUiLock,Kn as reconcile,dr as recordContributor,Vt as recordSkillInstallEvent,jn as registerAllTools,xr as registerWrite,v as releaseProcessLock,h as releaseServerLock,Kt as releaseUiLock,tn as removeLastKnownHash,Zn as resetMetrics,In as resolveBundledSkillDir,fn as resolveContentDir,sn as resolveCursorBinaryDefault,Dt as resolveCursorSpawnInvocation,Tr as resolveLockDir,Lr as resolvePack,It as resolvePackageVersion,Nr as restoreContributors,Ye as restoreLifecycleFromConflictsJson,R as rewriteMarkdownLinksForDocumentRename,kr as rewriteWikiLinksForDocumentRename,$e as runAuthReposSubprocess,K as runAuthStatusSubprocess,H as runCloneSubprocess,Ne as runDeviceFlowSubprocess,En as runWithMcpLogger,A as safeContentPath,xn as safeSubdir,we as safetyCheckpoint,Oe as sanitizeClientName,Le as saveInMemoryCheckpoint,X as saveVersion,ce as seedBasenameIndex,be as serializeError,Ge as setActiveSpanAttributes,Vr as shadowGit,P as shutdownTelemetry,st as spansCurrentPath,ie as spansPreviousPath,rt as spawnDetached,dt as splitMarkdownBlocks,ee as startWatcher,ge as streamingProblemEvent,tr as swapContributors,fe as toBroadcasterKey,yt as tracedAppendFileSync,ht as tracedLinkSync,Ct as tracedMkdir,Ve as tracedMkdirSync,E as tracedRename,Jt as tracedRenameSync,mr as tracedRmSync,zn as tracedRmdirSync,ir as tracedUnlinkSync,hn as tracedWriteFile,At as tracedWriteFileSync,Wn as updateLastKnownHash,d as updateProcessLockPort,u as updateServerLockPort,lr as updateUiLockPort,zt as validateAgentId,kn as validateCloneInputs,yr as validateSkillZip,Wt as withSpan,$t as withSpanSync,Yn as writeRootGitignoreForNewRepo,Pn as writeStateManifest,un as writeTargetVersion,an as writeTracker};
1
+ import{Br as e,Cn as t,K as n,Wr as r,a as i,an as a,bn as o,c as s,d as c,f as l,g as u,h as d,i as f,l as p,ln as m,m as h,n as g,o as _,p as v,r as y,s as b,t as x,u as S,yr as C}from"./server-lock-BpjJj3OD-B9uBbH7Z.mjs";import{$ as w,$n as T,$r as E,$t as D,A as O,An as k,Ar as A,At as j,B as M,Bn as N,Br as P,Bt as F,C as I,Cn as L,Cr as R,Ct as z,D as B,Dn as V,Dr as H,Dt as U,E as W,En as G,Er as K,Et as q,F as J,Fn as Y,Fr as X,Ft as Z,G as Q,Gn as $,Gr as ee,Gt as te,H as ne,Hn as re,Hr as ie,Ht as ae,I as oe,In as se,Ir as ce,It as le,J as ue,Jn as de,Jr as fe,Jt as pe,K as me,Kn as he,Kr as ge,Kt as _e,L as ve,Ln as ye,Lr as be,Lt as xe,M as Se,Mn as Ce,Mr as we,Mt as Te,N as Ee,Nn as De,Nr as Oe,Nt as ke,O as Ae,Oi as je,On as Me,Or as Ne,Ot as Pe,P as Fe,Pn as Ie,Pr as Le,Pt as Re,Q as ze,Qn as Be,Qr as Ve,Qt as He,R as Ue,Rn as We,Rr as Ge,Rt as Ke,S as qe,Sn as Je,Sr as Ye,St as Xe,T as Ze,Tn as Qe,Tr as $e,Tt as et,U as tt,Un as nt,Ur as rt,Ut as it,V as at,Vn as ot,Vr as st,Vt as ct,W as lt,Wn as ut,Wr as dt,Wt as ft,X as pt,Xn as mt,Xr as ht,Xt as gt,Y as _t,Yn as vt,Yr as yt,Yt as bt,Z as xt,Zn as St,Zr as Ct,Zt as wt,_ as Tt,_n as Et,_r as Dt,_t as Ot,a as kt,ai as At,an as jt,ar as Mt,at as Nt,b as Pt,bn as Ft,br as It,bt as Lt,c as Rt,ci as zt,cn as Bt,cr as Vt,ct as Ht,d as Ut,di as Wt,dn as Gt,dr as Kt,dt as qt,ei as Jt,en as Yt,er as Xt,et as Zt,f as Qt,fi as $t,fn as en,fr as tn,ft as nn,g as rn,gi as an,gn as on,gr as sn,gt as cn,h as ln,hi as un,hn as dn,hr as fn,ht as pn,i as mn,ii as hn,in as gn,ir as _n,it as vn,j as yn,jn as bn,jr as xn,jt as Sn,k as Cn,ki as wn,kn as Tn,kr as En,kt as Dn,l as On,li as kn,ln as An,lr as jn,lt as Mn,m as Nn,mi as Pn,mn as Fn,mr as In,mt as Ln,n as Rn,ni as zn,nn as Bn,nr as Vn,nt as Hn,o as Un,oi as Wn,on as Gn,or as Kn,ot as qn,p as Jn,pi as Yn,pn as Xn,pr as Zn,pt as Qn,q as $n,qn as er,qr as tr,qt as nr,r as rr,ri as ir,rn as ar,rr as or,rt as sr,s as cr,si as lr,sn as ur,sr as dr,st as fr,t as pr,ti as mr,tn as hr,tr as gr,tt as _r,u as vr,ui as yr,un as br,ur as xr,ut as Sr,v as Cr,vn as wr,vr as Tr,vt as Er,w as Dr,wn as Or,wr as kr,wt as Ar,x as jr,xn as Mr,xr as Nr,xt as Pr,y as Fr,yn as Ir,yr as Lr,yt as Rr,z as zr,zn as Br,zr as Vr,zt as Hr}from"./dist-Dj9BYfL1.mjs";export{pr as AGENT_ID_MAX_LEN,Rn as AGENT_ID_RE,rr as AGENT_WRITE_ORIGIN,mn as AgentFocusBroadcaster,kt as AgentPresenceBroadcaster,Un as AgentSessionCapacityError,cr as AgentSessionManager,Rt as BacklinkIndex,On as CC1Broadcaster,n as CC1_CONTRACT_VERSION,vr as CONFIG_FILENAME,Ut as CONFLICT_MARKER_RE,Qt as CURSOR_BUNDLE_PATHS_BY_PLATFORM,Jn as ConfigSchema,Nn as DEFAULT_CHECKPOINT_RETENTION,ln as DEFAULT_PACK_ID,rn as FILE_SYSTEM_WRITER,Tt as FILE_WATCHER_ORIGIN,Cr as GIT_PREFLIGHT_FAIL_SPAN_NAME,Fr as GIT_UPSTREAM_WRITER,je as GitDirAccessError,Pt as GitNotAvailableError,jr as GitTooOldError,qe as HOCUSPOCUS_AUTH_REJECTION_REASONS,I as HocuspocusAuthRejection,Dr as HocuspocusAuthTokenSchema,Ze as INSTALLED_AGENTS_SCHEMES,W as LIVE_DERIVED_INDEX_DEBOUNCE_MS,B as LOG_MD_TEMPLATE,Ae as MANAGED_RENAME_ORIGIN,Cn as MAX_AGENT_SESSIONS,O as MCP_CONNECTION_ID_HEADER,yn as MCP_SERVER_NAME,Se as MIN_GIT_VERSION,Ee as MISSING_OK_CONFIG_MESSAGE,wn as MalformedGitPointerError,Fe as McpLogger,J as MissingOkConfigError,oe as OBSERVER_SYNC_ORIGIN,ve as OK_OKIGNORE_TEMPLATE,a as ORPHAN_MODES,Ue as PANE_TARGET_TTL_MS,m as PROTOCOL_VERSION,zr as PinoLogger,x as ProcessLockCollisionError,M as ProjectGitInitError,at as ROLLBACK_ORIGIN,ne as ROOT_GITIGNORE_TEMPLATE,g as RUNTIME_VERSION,tt as SERVICE_WRITER,lt as SKILL_INSTALL_EVENTS_FILE_REL,o as SKILL_STATE_TARGETS,Q as STARTER_FOLDERS,me as STARTER_FOLDER_FRONTMATTER_FILENAME,$n as STARTER_PACKS,ue as STARTER_PACK_IDS,_t as STARTER_TEMPLATES,pt as STATE_MANIFEST_FILENAME,y as STATE_SCHEMA_VERSION,t as SYSTEM_DOC_NAME,xt as SeedPrerequisiteError,ze as SeedRootDirError,f as ServerLockCollisionError,w as StateManifestError,Zt as TagIndex,_r as UiLockCollisionError,i as acquireProcessLock,_ as acquireServerLock,Hn as acquireUiLock,sr as applyAgentMarkdownWrite,vn as applyExternalChange,Nt as applySeed,qn as armPaneTarget,fr as assertCompatibleStateManifest,Ht as assertGitAvailable,Mn as assertNeverDiskEvent,Sr as attachIdleShutdown,qt as bootServer,nn as buildAndOpenSkill,Qn as buildConfigYmlContent,Ln as buildExecResult,pn as buildInstructions,cn as buildSkillZip,Ot as buildStarterFolderFrontmatterYaml,Er as buildWipTree,Rr as classifyEvents,Lt as classifyFsPath,Pr as clearArmedPaneTarget,Xe as clearContributors,z as coercePackId,C as colorFromSeed,Ar as commitUpstreamImport,et as commitWip,q as commitWipFromTree,U as compareSemver,Pe as containsConflictMarkers,Dn as contentHash,j as contributorCount,Sn as createApiExtension,Te as createAssetServeMiddleware,ke as createContentFilter,Re as createContentFilterAsync,Z as createExternalChangeHandler,le as createFileLogger,xe as createLiveDerivedIndexExtension,Ke as createMcpHttpHandler,Hr as createOsProbe,F as createPersistenceExtension,ct as createServer,ae as createServerObserverExtension,it as createStreamingErrorWriter,ft as createTestLogger,te as detectClaudeDesktopPresence,_e as detectGit,nr as detectProjectShape,pe as emitPreflightFailureSpan,bt as ensureProjectGit,gt as errorResponse,wt as evictStaleTrackerEntries,He as extractWikiLinksFromMarkdown,D as fallbackPaths,Yt as findEnclosingGitRoot,hr as findEnclosingProjectRoot,Bn as formatAuthRejectionWire,ar as formatContributors,gn as formatContributorsFrom,jt as gcCheckpointRefs,Gn as getCurrentMcpLogger,ur as getLocalDir,Bt as getLogFilePath,An as getLogger,br as getLogsDir,Gt as getMeter,en as getMetrics,Xn as getTracer,Fn as handleCollabSocketError,dn as handleSpawnCursor,e as iconFromClientName,on as incrementCollabSocketFilteredError,Et as incrementServerObserverFire,wr as initContent,Ir as initShadowRepo,Ft as initTelemetry,Mr as installPrettyZodErrors,Je as installTestLoggers,L as installUserSkill,Or as isAllowedApiOrigin,Qe as isAllowedWorkspaceHostHeader,G as isConfigDoc,V as isHocuspocusAuthRejectionReason,Me as isKnownPackId,Tn as isLoopbackAddress,r as isOrphanMode,k as isPairedWriteOrigin,bn as isPathWithinDir,b as isProcessAlive,Ce as isProjectRoot,De as isSelfWrite,Ie as isSystemDoc,s as isValidLockPid,Y as lastKnownHash,se as listRescueCheckpoints,ye as listStarterPacks,We as loadPrincipal,p as lockFilePath,Br as loggerFactory,N as logsCurrentPath,ot as logsPreviousPath,re as mountMcpAndApi,nt as normalizeFsPath,ut as packageVersionMajorMinor,$ as parseAuthRejectionWire,he as parseGitVersion,er as parseHocuspocusAuthToken,de as parseKeepaliveConnectionId,vt as pathToDocName,mt as planSeed,St as readAllTargets,Be as readArmedPaneTarget,T as readBranchFromHead,S as readProcessLock,c as readProcessLockDetailed,l as readServerLock,Xt as readServerPackageVersion,gr as readSkillInstallStateSnapshot,Vn as readStateManifest,or as readTargetRecordedAt,_n as readTargetVersion,Mt as readUiLock,Kn as reconcile,dr as recordContributor,Vt as recordSkillInstallEvent,jn as registerAllTools,xr as registerWrite,v as releaseProcessLock,h as releaseServerLock,Kt as releaseUiLock,tn as removeLastKnownHash,Zn as resetMetrics,In as resolveBundledSkillDir,fn as resolveContentDir,sn as resolveCursorBinaryDefault,Dt as resolveCursorSpawnInvocation,Tr as resolveLockDir,Lr as resolvePack,It as resolvePackageVersion,Nr as restoreContributors,Ye as restoreLifecycleFromConflictsJson,R as rewriteMarkdownLinksForDocumentRename,kr as rewriteWikiLinksForDocumentRename,$e as runAuthReposSubprocess,K as runAuthStatusSubprocess,H as runCloneSubprocess,Ne as runDeviceFlowSubprocess,En as runWithMcpLogger,A as safeContentPath,xn as safeSubdir,we as safetyCheckpoint,Oe as sanitizeClientName,Le as saveInMemoryCheckpoint,X as saveVersion,ce as seedBasenameIndex,be as serializeError,Ge as setActiveSpanAttributes,Vr as shadowGit,P as shutdownTelemetry,st as spansCurrentPath,ie as spansPreviousPath,rt as spawnDetached,dt as splitMarkdownBlocks,ee as startWatcher,ge as streamingProblemEvent,tr as swapContributors,fe as toBroadcasterKey,yt as tracedAppendFileSync,ht as tracedLinkSync,Ct as tracedMkdir,Ve as tracedMkdirSync,E as tracedRename,Jt as tracedRenameSync,mr as tracedRmSync,zn as tracedRmdirSync,ir as tracedUnlinkSync,hn as tracedWriteFile,At as tracedWriteFileSync,Wn as updateLastKnownHash,d as updateProcessLockPort,u as updateServerLockPort,lr as updateUiLockPort,zt as validateAgentId,kn as validateCloneInputs,yr as validateSkillZip,Wt as withSpan,$t as withSpanSync,Yn as writeRootGitignoreForNewRepo,Pn as writeStateManifest,un as writeTargetVersion,an as writeTracker};
@@ -3080,5 +3080,5 @@ In headless mode, write the recap into the research article's "Further reading"
3080
3080
  `).split(`
3081
3081
  `),s=[],g=!1,S=``;for(let e of t){let t=/^\s{0,3}([`~]{3,})/.exec(e);if(t){g?RegExp(`^\\s{0,3}${S[0]==="`"?"`":`~`}{${S.length},}\\s*$`).test(e)&&(g=!1,S=``):(g=!0,S=t[1]);continue}if(g)continue;let w=stripInlineCodeSpans(e);for(TAG_VALUE_RE.lastIndex=0;;){let e=TAG_VALUE_RE.exec(w);if(e===null)break;let t=e[2];t&&s.push(t)}}return s}var TagIndex=class{contentDir;contentFilter;state=createEmptyState();constructor(e){this.contentDir=e.contentDir,this.contentFilter=e.contentFilter}updateDocumentFromMarkdown(e,t){if(!(isSystemDoc(e)||isConfigDoc(e)))try{let{frontmatter:s,body:g}=stripFrontmatter(t),S=extractFrontmatterTags(s?unwrapFrontmatterFences(s):``),w=extractInlineTagsFromBody(g),E=new Set([...S,...w]),D=new Set;for(let e of E)for(let t of expandTagToHierarchy(e))D.add(t);this.applyDocSnapshot(e,E,D)}catch(t){console.warn(`[tag-index] Failed to scan ${e} for tag extraction:`,t),this.deleteDocument(e)}}deleteDocument(e){if(isSystemDoc(e)||isConfigDoc(e))return;let t=this.state.byDoc.get(e);if(t){for(let s of t){let t=this.state.byTag.get(s);t&&(t.delete(e),t.size===0&&this.state.byTag.delete(s))}this.state.byDoc.delete(e),this.state.byDocLiteral.delete(e)}}renameDocument(e,t,s){this.deleteDocument(e),this.updateDocumentFromMarkdown(t,s)}getDocsForTag(e){let t=this.state.byTag.get(e);return t?[...t].sort((e,t)=>e.localeCompare(t)):[]}getDocsForTagWithMatches(e){let t=this.state.byTag.get(e);if(!t)return[];let s=[];for(let g of t){let t=this.state.byDocLiteral.get(g);if(!t)continue;let S=tagsMatchingPrefix(t,e);s.push({docName:g,matchingTags:[...S].sort((e,t)=>e.localeCompare(t))})}return s.sort((e,t)=>e.docName.localeCompare(t.docName))}getAllTags(){let e=[...this.state.byTag.entries()],t=e.map(([e])=>e),s=new Set;for(let e of t){let t=e.indexOf(`/`);t>0&&s.add(e.slice(0,t));let g=t;for(;g>0;)s.add(e.slice(0,g)),g=e.indexOf(`/`,g+1)}return e.map(([e,t])=>({name:e,count:t.size,isLeaf:!s.has(e)})).sort((e,t)=>e.name.localeCompare(t.name))}init(){if(this.state=createEmptyState(),!existsSync(this.contentDir))return;let e=this.listDocsWithPaths();for(let{docName:t,filePath:s}of e)try{let e=readFileSync(s,`utf-8`);this.updateDocumentFromMarkdown(t,e)}catch(e){console.warn(`[tag-index] Failed to read ${t} during init:`,e)}}applyDocSnapshot(e,t,s){let g=this.state.byDoc.get(e)??new Set;for(let t of g){if(s.has(t))continue;let g=this.state.byTag.get(t);g&&(g.delete(e),g.size===0&&this.state.byTag.delete(t))}for(let t of s){let s=this.state.byTag.get(t);s||(s=new Set,this.state.byTag.set(t,s)),s.add(e)}s.size===0?(this.state.byDoc.delete(e),this.state.byDocLiteral.delete(e)):(this.state.byDoc.set(e,s),this.state.byDocLiteral.set(e,t))}listDocsWithPaths(){let e=[];this.walkContentDir(this.contentDir,e),e.sort((e,t)=>e.docName===t.docName?t.filePath.localeCompare(e.filePath):e.docName.localeCompare(t.docName));let t=new Set;return e.filter(({docName:e})=>t.has(e)?!1:(t.add(e),!0))}walkContentDir(e,t){let s;try{s=readdirSync(e,{withFileTypes:!0})}catch(t){console.warn(`[tag-index] Failed to read directory ${e}:`,t);return}for(let g of s){let s=join(e,g.name);if(g.isDirectory()){let e=relative(this.contentDir,s);if(this.contentFilter&&e&&this.contentFilter.isDirExcluded(e))continue;this.walkContentDir(s,t);continue}if(!g.isFile()||!isSupportedDocFile(g.name))continue;let S=relative(this.contentDir,s);this.contentFilter?.isExcluded(S)||t.push({docName:stripDocExtension(S),filePath:s})}}};const PARK_SNAPSHOT_ORIGIN=(()=>{let e=Object.freeze({origin:`park-snapshot`,paired:!0});return Object.freeze({source:`local`,skipStoreHooks:!1,context:e})})();function createServer$1(e){let{contentDir:t,projectDir:s=t,quiet:g=!0,debounce:S=2e3,maxDebounce:w=1e4,gitEnabled:E=!0,commitDebounceMs:D=3e4,wipRef:O=`refs/wip/main`,configHomedirOverride:k,enableTestRoutes:j=!1,shadowRepo:F,contentRoot:L,destroyTimeoutMs:B=1e4,localOpCliArgs:H,skipStateManifestCheck:q=!1}=e,J=getLogger(`server`);function Y(){let e=readConfigSafely({absPath:resolveConfigPath(`project-local`,s),sideline:!1,warn:e=>J.warn({message:e},`[config] could not read project-local config`)}),t=e.value.autoSync?.enabled;return t==null?(e.valid||J.warn({},`[config] project-local autoSync.enabled unavailable (config invalid) — falling back to project config`),readConfigSafely({absPath:resolveConfigPath(`project`,s),sideline:!1,warn:e=>J.warn({message:e},`[config] could not read project config`)}).value.autoSync?.enabled===!0):t===!0}initTelemetry();let ee=randomUUID(),te=getLocalDir(s);if(acquireServerLock(te,{port:e.port??0,worktreeRoot:s,kind:e.lockKind??`interactive`,capabilities:[`http`,`ws`]}),!q)try{assertCompatibleStateManifest({lockDir:te,shadowRepoDir:resolveShadowDir(s)})}catch(e){throw releaseServerLock(te),e}let ne=createBasenameIndex(),ae=(e,t)=>ne.resolveEmbed(e,t),oe=(e,s)=>{let g=ne.resolveEmbed(e,s);if(!g&&e.includes(`/`)&&(g=e.replace(/^\.?\//,``)),!g)return null;let S=resolve(t,g),w=resolve(t);if(S!==w&&!S.startsWith(`${w}/`))return null;try{let e=statSync(S);return e.isFile()?e.size:null}catch{return null}},se,ce,ue,de,fe,me,ge,_e=null,ve=null,ye=null,Ce=null,we=null,Te=new Set,De=!1,je,Me,Pe,Ie=new Promise((e,t)=>{Me=e,Pe=t});function Re(e){_e?.signal(e)}let ze=2e3,Be=null;function Ve(){Be!==null&&clearTimeout(Be),Be=setTimeout(()=>{Be=null,ce.saveToDisk().catch(e=>{console.warn(`[backlinks] Failed to persist debounced cache:`,e)})},2e3)}let Ue=new RecentlyRemovedDocs(void 0,{onEviction:()=>incrementRecentlyRemovedDocsEviction(),onSizeChange:e=>setRecentlyRemovedDocsSize(e)}),We=(e,t)=>{isSystemDoc(e)||isConfigDoc(e)||Ue.setRenamed(e,t)},Ge=e=>{if(!(isSystemDoc(e)||isConfigDoc(e))){if(Ue.peek(e)?.kind===`renamed`){console.info(JSON.stringify({event:`recently-removed-docs-unpaired-delete-suppressed`,docName:e,source:`watcher-delete`}));return}Ue.setDeleted(e)}},Ke=e=>{isSystemDoc(e)||isConfigDoc(e)||Ue.delete(e)};try{se=createContentFilter({projectDir:s,contentDir:t,onAfterRebuild:()=>{ce.rebuildFromDisk(getActiveBranch()).catch(e=>{getLogger(`server-factory`).warn({err:e},`[content-filter] backlink-index rebuild failed after onAfterRebuild`)});try{ue.init()}catch(e){getLogger(`server-factory`).warn({err:e},`[content-filter] tag-index rebuild failed after onAfterRebuild`)}try{let{prunedFiles:e,prunedFolders:t}=reconcileFileIndexAfterFilterRebuild(Lt),s=e+t;s>0?getLogger(`server-factory`).info({pruned:s,prunedFiles:e,prunedFolders:t},`[content-filter] reconciled file indexes after onAfterRebuild`):getLogger(`server-factory`).debug({prunedFiles:e,prunedFolders:t},`[content-filter] file index reconcile completed after onAfterRebuild (no entries pruned; rescan may have added entries)`)}catch(e){getLogger(`server-factory`).warn({err:e},`[content-filter] file index reconcile failed after onAfterRebuild`)}}}),ce=new BacklinkIndex({projectDir:s,contentDir:t,contentFilter:se}),ue=new TagIndex({contentDir:t,contentFilter:se});try{ue.init()}catch(e){console.warn(`[server-factory] tag-index init failed; continuing with empty index:`,e)}de={current:F},fe=createPersistenceExtension({contentDir:t,projectDir:s,gitEnabled:E,commitDebounceMs:D,wipRef:O,shadowRef:de,contentRoot:L,backlinkIndex:ce,configHomedirOverride:k,getCurrentBranch:()=>Rt?.getLastKnownBranch()??null,resolveEmbed:ae,resolveSize:oe,getPrincipal:()=>we,onAgentCommit:()=>_e?.signal(`session-activity`),onDiskFlush:(e,t,s,g)=>{_e?.emitDiskAck(e,t),!(isSystemDoc(e)||isConfigDoc(e))&&assetReferencesChanged(g,s)&&(Ce?.(),Re(`files`))},onConfigRejected:(e,t)=>_e?.emitConfigValidationRejected(e,t),mdManager:e.mdManager}),me=new Hocuspocus({quiet:g,debounce:S,maxDebounce:w,extensions:[fe.extension]});let B=me.shouldUnloadDocument.bind(me);me.shouldUnloadDocument=e=>{if(Te.has(e)||De&&B(e))return!0;let t=e.name;return isSystemDoc(t)||isConfigDoc(t)||getReconciledBase(t)!==void 0||e.getXmlFragment(`default`).length!==0||e.getText(`source`).length!==0?!1:B(e)},je=async e=>{Te.add(e);try{await me.unloadDocument(e)}finally{Te.delete(e)}},_e=new CC1Broadcaster(me),ve=new AgentFocusBroadcaster(me),ye=new AgentPresenceBroadcaster(me),ge=new AgentSessionManager(me);let q=createLiveDerivedIndexExtension({backlinkIndex:ce,tagIndex:ue,signalChannel:Re});me.configuration.extensions.push(q),me.configuration.extensions.push({__kind:`principal-auth`,async onAuthenticate(e){let t=e.token,s=parseHocuspocusAuthToken(t),g=s?.expectedServerInstanceId;if(typeof g==`string`&&g.length>0&&g!==ee)throw new HocuspocusAuthRejection(`server-instance-mismatch`,`server instance mismatch: client claimed ${g}, this server is ${ee}`);let S=s?.expectedBranch,w=getActiveBranch();if(typeof S==`string`&&S.length>0&&S!==w)throw new HocuspocusAuthRejection(`branch-mismatch`,`branch mismatch: client claimed ${S}, server is on ${w}`);if(!s)return;let E=e.context;typeof s.principalId==`string`&&(we&&s.principalId===we.id?E.principalId=we.id:we?console.warn(JSON.stringify({event:`principal-token-mismatch`,claimed:s.principalId,loaded:we.id})):E.principalId=s.principalId),typeof s.tabSessionId==`string`&&(E.tabSessionId=s.tabSessionId),E.kind=`human`}}),me.configuration.extensions.push({__kind:`config-doc-admission-guard`,async onAuthenticate(e){if(!isConfigDoc(e.documentName))return;let t=e.request,s=t.socket?.remoteAddress;if(s!==void 0&&!isLoopbackAddress(s))throw Error(`config-doc admission requires loopback peer (peer=${s}, doc=${e.documentName})`);let g=e.requestHeaders,S=(g&&typeof g.get==`function`?g.get(`host`):null)??t.headers?.host??void 0;if(!isAllowedWorkspaceHostHeader(S))throw Error(`config-doc admission requires loopback Host header (host=${S??`<absent>`}, doc=${e.documentName})`)}});let J=resolve(t);function Y(e){if(!isSafeDocName(e))return null;let t=resolve(J,`${e}${getDocExtension(e)}`);return!t.startsWith(`${J}/`)&&t!==J?null:t}me.configuration.extensions.push({__kind:`removal-redirect-guard`,async onAuthenticate(e){await runRemovalRedirectGuard(e.documentName,{recentlyRemovedDocs:Ue,resolveFilePath:Y,fileExists:existsSync})}}),me.configuration.extensions.push({__kind:`system-doc-broadcast-guard`,async beforeHandleMessage(e){if(e.documentName!==`__system__`)return;let t=new IncomingMessage(e.update);if(t.readVarString(),t.readVarUint()===MessageType.BroadcastStateless)throw Error(`inbound BroadcastStateless on ${SYSTEM_DOC_NAME} rejected — server-only channel`)}});let te=createApiExtension({hocuspocus:me,sessionManager:ge,contentDir:t,contentFilter:se,serverInstanceId:ee,getFileIndex:()=>Lt?Lt.getFileIndex():new Map,getFolderIndex:()=>Lt?Lt.getFolderIndex():new Map,getAliasMap:()=>Lt?Lt.getAliasMap():new Map,rescanFiles:()=>Lt?.rescanFromDisk(),enableTestRoutes:j,shadowRef:de,flushGitCommit:()=>fe.flushPendingGitCommit(),flushContributors:()=>fe.flushContributors(),getCurrentBranch:()=>Rt?.getLastKnownBranch()??null,getDiskAckSVs:()=>_e?.getLatestDiskAckSVsAsBase64()??{},contentRoot:L,backlinkIndex:ce,tagIndex:ue,signalChannel:Re,agentFocusBroadcaster:ve,agentPresenceBroadcaster:ye,onAgentWrite:e.onAgentWrite,getSyncEngine:()=>zt,localOpCliArgs:H,projectDir:s,resolveEmbed:ae,getPrincipal:()=>we,forceUnloadDocument:je,ready:Ie,recentlyRemovedDocs:Ue,serializeDoc:it,onReferencedAssetsCacheInvalidator:e=>{Ce=e}});me.configuration.extensions.push(te),me.configuration.extensions.push(createServerObserverExtension({mdManager,schema,shadowRef:de,contentRoot:L,getCurrentBranch:()=>Rt?.getLastKnownBranch()??null,resolveEmbed:ae,resolveSize:oe})),me.configuration.extensions.push(createSyncHandshakeSpanExtension()),me.configuration.extensions.push(createConflictLifecycleSeedExtension({getSyncEngine:()=>zt,projectDir:s,contentDir:t}))}catch(e){throw releaseServerLock(te),e}let Xe=null,$e=new Map,nt=[];function rt(e,t){let s=resolve(e,`rescue`),g=resolve(s,`${t}${getDocExtension(t)}`);return g.startsWith(`${s}/`)?g:null}function it(e){let t=me.documents.get(e);if(!t)return null;let{frontmatter:s,body:g}=stripFrontmatter(t.getText(`source`).toString());return prependFrontmatter(s,g)}let at=(e,t)=>applyExternalChange(me,e,t,ae,oe);function st(e){if(!isDocInConflict(e))return;let t=e.getMap(`lifecycle`);t.delete(`status`),t.delete(`reason`)}let vt=e=>{if(!e)return;let t=`[[${e}]]`;for(let[s]of me.documents){if(isSystemDoc(s)||isConfigDoc(s))continue;let g=me.documents.get(s);if(!g)continue;let S=g.getText(`source`).toString();if(S.includes(t))try{g.transact(()=>{applyDiskContentToDoc(g,S,ae,s)},FILE_WATCHER_ORIGIN)}catch(t){J.error({err:t,docName:s,assetBasename:e},`[asset-event] failed to re-render ${s} for asset basename ${e}`)}}},Tt=null,Et=e=>{e&&(Tt===null&&(Tt=new Set,setImmediate(()=>{let e=Tt;if(Tt=null,e)try{for(let t of e)vt(t)}catch(t){J.error({err:t,basenames:[...e]},`[asset-event] dedup rerender pass crashed`)}})),Tt.add(e))};function Dt(e){switch(e.kind){case`rename`:return e.newDocName;case`asset-create`:case`asset-delete`:case`folder-create`:case`folder-delete`:return e.relativePath;case`create`:case`update`:case`delete`:case`conflict`:return e.docName;default:return assertNeverDiskEvent(e)}}async function jt(e){try{switch(e.kind){case`create`:J.info({docName:e.docName},`[reconcile] create: ${e.docName}`),ce.updateDocumentFromMarkdown(e.docName,e.content),Ve(),ue.updateDocumentFromMarkdown(e.docName,e.content),Re(`files`),Re(`backlinks`),Re(`graph`),Re(`tags`),Ke(e.docName);break;case`update`:{let{docName:t,content:s}=e,g=me.documents.get(t);if(!g){ce.updateDocumentFromMarkdown(t,s),Ve(),ue.updateDocumentFromMarkdown(t,s),Re(`backlinks`),Re(`graph`),Re(`tags`);return}let S=getReconciledBase(t)??``,w=it(t)??S,E=reconcile({docName:t,base:S,ours:w,theirs:s}),D=contentHash(S).slice(0,6),O=contentHash(w).slice(0,6),k=contentHash(s).slice(0,6);switch(J.info({docName:t,base:D,ours:O,theirs:k,result:E.kind},`[reconcile] ${t} base=${D} ours=${O} theirs=${k} result=${E.kind}`),E.kind){case`noop`:st(g),ce.updateDocumentFromMarkdown(t,s),Ve(),ue.updateDocumentFromMarkdown(t,s),Re(`backlinks`),Re(`graph`),Re(`tags`);break;case`clean`:try{at(t,E.newContent),setReconciledBase(t,E.newContent),incrementReconcile(),st(g),ce.updateDocumentFromMarkdown(t,s),Ve(),ue.updateDocumentFromMarkdown(t,s),Re(`backlinks`),Re(`graph`),Re(`tags`)}catch(e){J.error({err:e,docName:t},`[reconcile] failed to apply clean content to Y.Doc for ${t}`),setReconciledBase(t,s),st(g)}break;case`merged`:try{at(t,E.newContent),setReconciledBase(t,E.newContent),incrementReconcile(),st(g),ce.updateDocumentFromMarkdown(t,s),Ve(),ue.updateDocumentFromMarkdown(t,s),Re(`backlinks`),Re(`graph`),Re(`tags`)}catch(e){J.error({err:e,docName:t},`[reconcile] failed to apply merged content to Y.Doc for ${t}`),setReconciledBase(t,s),st(g)}break;case`conflicts`:try{at(t,E.newContent),setReconciledBase(t,E.newContent),incrementReconcile(),incrementConflict(),ce.updateDocumentFromMarkdown(t,s),Ve(),ue.updateDocumentFromMarkdown(t,s),Re(`backlinks`),Re(`graph`),Re(`tags`)}catch(e){J.error({err:e,docName:t},`[reconcile] failed to apply conflict content to Y.Doc for ${t}`),setReconciledBase(t,s)}{let e=g.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,`merged-with-markers`)}break;case`refused`:{incrementConflict();let e=g.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,E.reason);break}}break}case`delete`:{let{docName:t}=e,s=me.documents.get(t);if(!s){ce.deleteDocument(t),Ve(),ue.deleteDocument(t),Re(`files`),Re(`backlinks`),Re(`graph`),Re(`tags`),Ge(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));return}let g=getReconciledBase(t)??``,S=it(t)??``,w=S!==g;if(w&&de.current){let e=de.current,s=Rt?.getLastKnownBranch()??`main`;queueMicrotask(()=>{saveInMemoryCheckpoint(e,L??``,{kind:`external-change-rescue`,docName:t,contents:S,label:`External change recovered @ ${new Date().toISOString()}`,branch:s,metadata:{incomingDiskSha:``}}).then(()=>{incrementRescueBuffer(),J.info({docName:t},`[reconcile] rescue checkpoint saved (delete): ${t}`)}).catch(e=>{J.error({docName:t,err:e},`[reconcile] rescue checkpoint write failed: ${t}`)})})}s.getMap(`lifecycle`).set(`status`,`deleted-upstream`),deleteReconciledBase(t),ce.deleteDocument(t),Ve(),ue.deleteDocument(t),J.info({docName:t,isDirty:w},`[reconcile] delete: ${t} (dirty=${w})`),me.closeConnections(t),await je(s),Re(`files`),Re(`backlinks`),Re(`graph`),Re(`tags`),Ge(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));break}case`rename`:{let{oldDocName:t,newDocName:s,content:g}=e,S=me.documents.get(t);if(deleteReconciledBase(t),setReconciledBase(s,g),ce.renameDocument(t,s,g),Ve(),ue.renameDocument(t,s,g),S){let e=S.getMap(`lifecycle`);e.set(`status`,`renamed`),e.set(`newPath`,s)}J.info({oldDocName:t,newDocName:s},`[reconcile] rename: ${t} → ${s}`),Re(`files`),Re(`backlinks`),Re(`graph`),Re(`tags`),We(t,s),console.info(JSON.stringify({event:`recently-removed-docs-populate`,from:t,to:s,kind:`renamed`,source:`watcher-rename`}));break}case`conflict`:{let{docName:t}=e,s=me.documents.get(t);if(!s)return;let g=it(t);g===null?J.warn({docName:t},`[reconcile] case 'conflict': serializeDoc returned null for ${t}; reconciledBase snapshot skipped — post-resolution reconcile may degrade to 3-way merge`):setReconciledBase(t,g);let S=s.getMap(`lifecycle`);S.set(`status`,`conflict`),S.set(`reason`,`conflict-markers`),J.info({docName:t},`[reconcile] conflict markers detected: ${t}`);break}case`asset-create`:ne.add(e.relativePath),Re(`files`),Et(basename(e.relativePath));break;case`asset-delete`:ne.remove(e.relativePath),Re(`files`),Et(basename(e.relativePath));break;case`folder-create`:case`folder-delete`:Re(`files`);break;default:assertNeverDiskEvent(e)}}catch(t){let s=Dt(e);J.error({err:t,kind:e.kind,label:s},`[reconcile] failed to handle ${e.kind} for ${s}`)}}let Mt=[];async function Ft(e){if(isBatchInProgress()){Mt.push(e);return}await jt(e)}async function It(){let e=Mt.splice(0,Mt.length);for(let t of e)await jt(t)}let Lt=null,Rt=null,zt=null,Bt=null;async function Vt(e){if(me.documents.size===0)return;let t=!1,s=new Promise(e=>{me.configuration.extensions.push({async afterUnloadDocument({instance:s}){!t&&s.getDocumentsCount()===0&&(t=!0,e())}})}),g=Array.from(me.documents.keys());me.closeConnections(),me.flushPendingStores();for(let e of me.documents.values())e.getConnectionsCount()===0&&me.unloadDocument(e).catch(t=>{console.warn(JSON.stringify({event:`ok-shutdown-unload-document-failed`,docName:e.name,reason:t instanceof Error?t.message:String(t)}))});let S,w=new Promise((s,w)=>{S=setTimeout(()=>{t=!0;let s=Array.from(me.documents.keys()),S=[],E=[];if(de.current){for(let e of s)if(!(isSystemDoc(e)||isConfigDoc(e)))try{let t=it(e);if(t===null){J.warn({docName:e},`[rescue] skipping ${e} — document dropped from map mid-rescue`),E.push(e);continue}let s=rt(de.current.gitDir,e);if(!s){J.warn({docName:e,gitDir:de.current.gitDir},`[rescue] path-traversal guard rejected docName: ${e}`),E.push(e);continue}mkdirSync(dirname(s),{recursive:!0}),writeFileSync(s,t,`utf-8`),incrementRescueBuffer(),S.push(e),J.info({docName:e},`[rescue] rescue buffer saved on flush timeout: ${e}`)}catch(t){E.push(e),J.error({err:t,docName:e},`[rescue] failed to write rescue buffer for ${e}`)}}else J.warn({stillLoadedCount:s.length},`[rescue] shadow repo unavailable at flush timeout — ${s.length} doc(s) will be lost: [${s.join(`, `)}]`),E.push(...s);let D=S.length>0||E.length>0?` — rescued [${S.join(`, `)}]${E.length>0?`, lost [${E.join(`, `)}]`:``}`:``;w(Error(`flushAllStoresAndWait timeout after ${e}ms — ${s.length}/${g.length} docs did not unload: [${s.join(`, `)}]${D}`))},e)});try{await Promise.race([s,w])}finally{S!==void 0&&clearTimeout(S)}}async function Ht(){return Bt||(Bt=(async()=>{let e=Date.now(),t=[];De=!0,Be!==null&&(clearTimeout(Be),Be=null);let g,S=await Promise.race([Ie.then(()=>`completed`,e=>(J.debug({err:e},`[server] init incomplete during shutdown`),`failed`)),new Promise(e=>{g=setTimeout(()=>e(`timeout`),5e3)})]);g!==void 0&&clearTimeout(g),S===`timeout`&&J.warn({},`[server] init did not complete within 5s during shutdown`);let w=me.documents.size;try{try{try{Rt&&=(await Rt.unsubscribe(),null),Lt&&=(await Lt.unsubscribe(),null);for(let{docName:e,cleanup:t}of nt)try{await t()}catch(t){J.warn({err:t,docName:e},`[server] failed to stop config-file-watcher for ${e}`)}nt.length=0}catch(e){t.push({phase:`watcher-unsubscribe`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-1 watcher unsubscribe failed`)}try{_e?.destroy(),ye?.destroy(),Xe&&=(await Xe.disconnect(),null);for(let[e,t]of $e)try{await t.disconnect()}catch(t){J.warn({err:t,docName:e},`[server] failed to disconnect ${e} during shutdown`)}$e.clear()}catch(e){t.push({phase:`cc1-teardown`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-1b CC1 teardown failed`)}try{await ge.closeAll()}catch(e){t.push({phase:`agent-session-drain`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-2 agent session drain failed`)}try{await Vt(B)}catch(e){t.push({phase:`flush-all-stores`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-3 flush failed`)}let e;try{await Promise.race([(async()=>{await fe.flushPendingGitCommit(),await fe.waitForPendingCommits()})(),new Promise((t,s)=>{e=setTimeout(()=>s(Error(`L2 git flush timeout`)),B)})])}catch(e){t.push({phase:`git-commit-flush`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-4 git commit flush failed`)}finally{e!==void 0&&clearTimeout(e)}try{zt&&=(await zt.destroy(),null)}catch(e){t.push({phase:`sync-engine-stop`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown sync-engine-stop failed`)}}finally{if(de.current){try{let e=(await esm_default({baseDir:s,timeout:{block:5e3}}).revparse(`HEAD`)).trim();e&&writeFileSync(resolve(de.current.gitDir,`last-known-head`),e,`utf-8`)}catch{}try{destroyShadowRepo(de.current)}catch(e){t.push({phase:`shadow-repo-release`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-5 destroyShadowRepo failed`)}}let g=Date.now()-e;t.length===0?J.info({documentCount:w,durationMs:g},`[server] shutdown flushed ${w} documents in ${g}ms`):J.warn({documentCount:w,durationMs:g,phaseErrors:t},`[server] shutdown flushed ${w} documents in ${g}ms with ${t.length} phase error(s)`)}}finally{try{releaseServerLock(te)}catch(e){t.push({phase:`server-lock-release`,error:e instanceof Error?e.message:String(e)}),J.error({err:e},`[server] shutdown phase-6 releaseServerLock failed`)}try{await shutdownTelemetry()}catch(e){t.push({phase:`telemetry-shutdown`,error:e instanceof Error?e.message:String(e)})}}})(),Bt)}let Ut=[];async function Wt(){try{we=await loadPrincipal(s),J.info({principalId:we.id},`[server] principal loaded`)}catch(e){J.warn({err:e},`[server] principal load failed — browser writes will use SERVICE_WRITER`)}if(!de.current)try{de.current=await initShadowRepo(s),J.info({gitDir:de.current.gitDir},`[server] history repo initialized at ${de.current.gitDir}`)}catch(e){J.error({err:e},`[server] history repo init failed`),Ut.push(`shadow-repo`)}if(de.current){let e=null;try{e=loadRenameLogIndex(de.current.gitDir),sweepLazyPopOrphans(de.current.gitDir,e),setRenameLogIndex(de.current.gitDir,e),J.info({entries:e.byTo.size},`[server] rename log loaded (${e.byTo.size} entries)`)}catch(e){J.warn({err:e},`[rename-log] boot-time load/sweep failed; rename history unavailable`)}if(e){let t=1e4;try{await Promise.race([gcRenameLog(de.current,e,{rebuild:!0}),new Promise((e,s)=>setTimeout(()=>s(Error(`boot-time GC exceeded ${t}ms`)),t))])}catch(e){J.warn({err:e},`[rename-log] boot-time GC/rebuild failed; index loaded without GC`)}}}if(de.current)try{await shadowGit(de.current).raw(`rev-parse`,`--git-dir`)}catch(e){let t=e instanceof Error?e.message:String(e);if(t.includes(`not a git repository`)||t.includes(`invalid object`)){J.warn({},`[server] history repo appears corrupted — reinitializing`);try{de.current=await initShadowRepo(s)}catch(e){J.error({err:e},`[server] history repo reinit failed`),de.current=void 0,Ut.includes(`shadow-repo`)||Ut.push(`shadow-repo`)}}else J.error({err:e},`[server] history repo check failed (transient?)`)}if(de.current)try{let e=resolve(de.current.gitDir,`last-known-head`),t=null;try{t=readFileSync(e,`utf-8`).trim()||null}catch{}let g=null;try{g=(await esm_default({baseDir:s,timeout:{block:1e4}}).revparse(`HEAD`)).trim()||null}catch{}if(g!==null){if(g!==t){let e=`main`;try{let t=(await esm_default({baseDir:s,timeout:{block:1e4}}).raw(`rev-parse`,`--abbrev-ref`,`HEAD`)).trim();t&&t!==`HEAD`&&(e=t)}catch{}J.info({lastKnownHead:t,currentHead:g,branch:e},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${g}, action=import`);try{await commitUpstreamImport(de.current,L??``,t,g,e),incrementUpstreamImport()}catch(e){J.warn({err:e},`[head-drift] commitUpstreamImport failed — continuing`)}}else J.info({currentHead:g},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${g}, action=noop`);try{writeFileSync(e,g,`utf-8`)}catch(e){J.warn({err:e},`[head-drift] failed to write last-known-head`)}}}catch(e){J.warn({err:e},`[head-drift] check failed — continuing`)}try{let e=recoverPendingManagedRename(t,s);if(e.recovered&&e.journal){let t=e.journal.version===2?e.journal.fromPath:e.journal.sourceDocName,s=e.journal.version===2?e.journal.toPath:e.journal.destinationDocName;J.warn({journalVersion:e.journal.version,fromPath:t,toPath:s,restoredDocNames:e.restoredDocNames},`[managed-rename] recovered pending rename ${t} -> ${s}`)}}catch(e){J.error({err:e},`[server] managed rename recovery failed`),Ut.push(`managed-rename-recovery`)}try{let e=cleanupOrphanUploadTempfiles(s);(e.deleted>0||e.errors>0)&&J.info({scanned:e.scanned,deleted:e.deleted,errors:e.errors},`[upload-tempfile-sweep] swept ${e.deleted} orphan tempfile(s)`)}catch(e){J.error({err:e},`[server] upload-tempfile sweep failed`),Ut.push(`upload-tempfile-sweep`)}try{Xe=await me.openDirectConnection(SYSTEM_DOC_NAME),_e?.emitServerInfo(ee,getActiveBranch())}catch(e){J.error({err:e},`[server] failed to open __system__ direct connection — CC1 push disabled`),Ut.push(`cc1-push`)}for(let e of CONFIG_DOC_NAMES)try{let t=await me.openDirectConnection(e);$e.set(e,t)}catch(t){J.error({err:t,docName:e},`[server] failed to open ${e} direct connection — config bind degraded`),Ut.push(`config-doc:${e}`)}let g=new Map([[CONFIG_DOC_NAME_PROJECT,resolveConfigPath(`project`,s)],[CONFIG_DOC_NAME_PROJECT_LOCAL,resolveConfigPath(`project-local`,s)],[CONFIG_DOC_NAME_USER,resolveConfigPath(`user`,s,k)]]);for(let e of CONFIG_DOC_NAMES){let t=g.get(e);if(t)try{J.info({docName:e,path:t},`[config-file-watcher] starting`);let s=await startConfigFileWatcher(t,t=>{let s=me.documents.get(e);J.info({docName:e,hasDocument:s!==void 0,contentLength:t.length},`[config-file-watcher] file changed`);let g=applyExternalConfigChange(s??null,e,t,fe.configPersistenceCtx);if(J.info({docName:e,outcome:g},`[config-file-watcher] applyExternalConfigChange outcome`),e===`__config__/project`||e===`__local__/project`){let e=Y();zt?.setEnabled(e).catch(t=>{J.warn({err:t,enabled:e},`[sync] failed to apply autoSync.enabled from config`)})}});nt.push({docName:e,cleanup:s}),J.info({docName:e,path:t},`[config-file-watcher] started`)}catch(s){J.warn({err:s,docName:e,path:t},`[config-file-watcher] failed to start for ${e}`),Ut.push(`config-file-watcher:${e}`)}}try{let e=resolve(t,`.okignore`),g=resolve(s,`.gitignore`),S=null;try{let e=spawnSync(`git`,[`rev-parse`,`--git-common-dir`],{cwd:s,encoding:`utf-8`,timeout:5e3});if(e.status===0&&e.stdout){let t=join(resolve(s,e.stdout.trim()),`info`,`exclude`);existsSync(dirname(t))&&(S=t)}}catch{}let w=S?[e,g,S]:[e,g],E=J;E.info({okignorePath:e,gitignorePath:g,gitInfoExcludePath:S},`[ignore-watcher] starting multi-path watcher for .okignore + .gitignore (+ .git/info/exclude when present)`);let D=await startMultiPathConfigFileWatcher(w,(t,g)=>{(async()=>{if(t===e)try{let e=applyExternalConfigChange(me.documents.get(`__config__/okignore`)??null,CONFIG_DOC_NAME_OKIGNORE,g,fe.configPersistenceCtx);E.info({docName:CONFIG_DOC_NAME_OKIGNORE,outcome:e},`[ignore-watcher] applyExternalConfigChange outcome`)}catch(e){E.error({err:e,changedPath:relative(s,t)},`[ignore-watcher] applyExternalConfigChange failed; rebuild proceeds independently`)}let S=await se.rebuildIgnorePatterns();if(S.ok)E.info({changedPath:relative(s,t),patternCount:S.patternCount,nestedFileCount:S.nestedFileCount,durationMs:S.durationMs},`[ignore-watcher] rebuild succeeded — broadcasting files channel`),_e?.signal(`files`);else{let e=relative(s,t)||`.`;E.warn({changedPath:e,error:S.error.message},`[ignore-watcher] rebuild failed — emitting config-ignore-nested-error`),_e?.emitConfigIgnoreNestedError(e,S.error.message)}})().catch(e=>{E.error({err:e,changedPath:relative(s,t)||`.`},`[ignore-watcher] handler threw`)})});nt.push({docName:`__ignore-files__`,cleanup:D}),E.info({okignorePath:e,gitignorePath:g},`[ignore-watcher] multi-path watcher started`)}catch(e){J.warn({err:e,projectDir:s,contentDir:t},`[ignore-watcher] failed to start multi-path watcher`),Ut.push(`ignore-files-watcher`)}let S=resolveGitDir(s),w=S?readBranchFromHead(S)??`main`:`main`;switchReconciledBaseScope(w),ce.switchBranch(w);try{{let e=getActiveBranch();try{if(await ce.loadFromDisk(e)){let t=await ce.reconcileWithDisk(e);(t.added>0||t.updated>0||t.deleted>0)&&J.info(t,`[backlinks] startup reconcile: offline changes applied`)}else await ce.rebuildFromDisk(e);ce.saveToDisk().catch(t=>{console.warn(`[backlinks] Failed to persist startup cache for ${e}:`,t)})}catch(t){J.error({err:t,branch:e},`[backlinks] startup init failed; index will populate incrementally via watcher`)}}Lt=await startWatcher(t,Ft,se),ue.init();let e=0;try{seedBasenameIndex({contentDir:t,contentFilter:se,basenameIndex:ne,onSkip:(t,s,g)=>{e++,J.warn({reason:t,code:s,path:g},`[basename-index] skipped entry during seed (${t}${s?` ${s}`:``})`)}}),e>0&&(J.warn({count:e},`[basename-index] startup seed completed with ${e} skipped entries — embeds under inaccessible subtrees will not resolve`),Ut.push(`basename-index-partial`))}catch(e){J.error({err:e},`[basename-index] startup seed failed`),Ut.push(`basename-index`)}}catch(e){J.error({err:e},`[server] disk bridge watcher failed to start`),Ut.push(`file-watcher`)}try{Rt=await startHeadWatcher(s,async({trigger:e})=>{if(J.info({trigger:e},`[batch] begin trigger=${e}`),incrementBatch(),me.flushPendingStores(),await fe.flushPendingGitCommit(),setBatchInProgress(!0),de.current){let e=getActiveBranch(),t=resolveGitDir(s),g=t?readBranchFromHead(t)??e:e,S=[];for(let[e,t]of me.documents){if(isSystemDoc(e)||isConfigDoc(e))continue;let s=null;if(t.transact(()=>{s=it(e)},PARK_SNAPSHOT_ORIGIN),s===null)continue;let g=getReconciledBase(e)??s;S.push({docName:e,markdown:s,diskSnapshot:g})}if(S.length>0)try{let t=await parkBranch(de.current,e,SERVICE_WRITER.id,S,g);t&&(incrementPark(),J.info({count:S.length,branch:e,sha:t.slice(0,8)},`[history] parked ${S.length} docs on ${e} → ${t.slice(0,8)}`))}catch(e){J.error({err:e},`[shadow] park failed`)}}},async e=>{let s=Mt.length,g=e.newBranch??`main`;if(J.info({kind:e.batchKind,headMoved:e.headMoved,docs:s,timeout:!!e.timeout},`[batch] end kind=${e.batchKind} headMoved=${e.headMoved} docs=${s}${e.timeout?` timeout`:``}`),e.batchKind===`within-branch`){if(setBatchInProgress(!1),await It(),await fe.flushDeferredStores(`within-branch`),zt!==null)try{await zt.reconcileConflictsFromGit()}catch(e){J.warn({err:e},`[head-watcher] sync engine conflict reconcile failed`)}}else{incrementBranchSwitch(),Mt.splice(0,Mt.length),switchReconciledBaseScope(g),Be!==null&&(clearTimeout(Be),Be=null),ce.switchBranch(g),se.rebuildDirCount();try{let e=0;ne.clear(),seedBasenameIndex({contentDir:t,contentFilter:se,basenameIndex:ne,onSkip:(t,s,S)=>{e++,J.warn({reason:t,code:s,path:S,branch:g},`[basename-index] skipped entry during branch-switch reseed (${t}${s?` ${s}`:``})`)}}),e>0&&(J.warn({count:e,branch:g},`[basename-index] branch-switch reseed completed with ${e} skipped entries — embeds under inaccessible subtrees will not resolve on this branch`),Ut.includes(`basename-index-partial`)||Ut.push(`basename-index-partial`))}catch(e){J.error({err:e,branch:g},`[basename-index] branch-switch reseed failed`)}for(let[e,s]of me.documents)if(!(isSystemDoc(e)||isConfigDoc(e)))try{let S=safeContentPath(e,t);if(!existsSync(S)){let t=getReconciledBase(e)??``,S=it(e)??``;if(S!==t&&de.current){let t=de.current;queueMicrotask(()=>{saveInMemoryCheckpoint(t,L??``,{kind:`external-change-rescue`,docName:e,contents:S,label:`External change recovered @ ${new Date().toISOString()}`,branch:g,metadata:{incomingDiskSha:``}}).then(()=>{incrementRescueBuffer(),J.info({docName:e},`[reconcile] rescue checkpoint saved on branch switch: ${e}`)}).catch(t=>{J.error({docName:e,err:t},`[reconcile] rescue checkpoint write failed: ${e}`)})})}s.getMap(`lifecycle`).set(`status`,`deleted-upstream`),J.info({docName:e,branch:g},`[branch-switch] tombstone: ${e} (not on ${g})`);continue}let w=readFileSync(S,`utf-8`);at(e,w),setReconciledBase(e,w),J.info({docName:e},`[branch-switch] reset: ${e}`)}catch(t){J.error({err:t,docName:e},`[branch-switch] failed to reset ${e}`)}J.info({branch:g,docCount:me.documents.size},`[branch-switch] loaded branch ${g} (${me.documents.size} docs)`);try{if(await ce.loadFromDisk(g)){let e=await ce.reconcileWithDisk(g);(e.added>0||e.updated>0||e.deleted>0)&&J.info(e,`[backlinks] branch-switch reconcile for ${g}`)}else await ce.rebuildFromDisk(g);ce.saveToDisk(g).catch(e=>{console.warn(`[backlinks] Failed to persist branch cache for ${g}:`,e)})}catch(e){J.error({err:e,branch:g},`[backlinks] branch-switch rebuild failed; backlinks may be stale`)}if(ue.init(),de.current&&e.batchKind===`cross-branch`){let e=0;for(let[t]of me.documents)if(!(isSystemDoc(t)||isConfigDoc(t)))try{let s=await readParkedState(de.current,g,SERVICE_WRITER.id,t);if(!s||s.markdown===s.diskSnapshot)continue;let S=getReconciledBase(t);if(!S)continue;let w=reconcile({docName:t,base:s.diskSnapshot,ours:s.markdown,theirs:S});switch(w.kind){case`merged`:case`clean`:at(t,w.newContent),setReconciledBase(t,w.newContent),e++;break;case`conflicts`:at(t,w.newContent),setReconciledBase(t,w.newContent),incrementConflict(),e++;{let e=me.documents.get(t);if(e){let t=e.getMap(`lifecycle`);t.set(`status`,`conflict`),t.set(`reason`,`merged-with-markers`)}}break;case`noop`:case`refused`:break}}catch(e){J.error({err:e,docName:t},`[branch-switch] restore WIP failed for ${t}`)}e>0&&J.info({count:e,branch:g},`[branch-switch] restored ${e} parked docs on ${g}`)}if(e.oldBranch?.startsWith(`detached-`)&&de.current)try{let t=shadowGit(de.current),s=(await t.raw(`for-each-ref`,`refs/wip/${e.oldBranch}/`,`--format=%(refname)`)).trim();if(s){for(let e of s.split(`
3082
3082
  `))e&&await t.raw(`update-ref`,`-d`,e);J.info({context:e.oldBranch},`[branch-switch] cleaned up detached context ${e.oldBranch}`)}}catch(e){J.error({err:e},`[branch-switch] detached cleanup failed`)}setBatchInProgress(!1),await fe.flushDeferredStores(`discard-stale`),_e?.emitBranchSwitched(g)}if(e.headMoved&&e.newHead&&de.current&&s>0){let t=L??`.`;try{let s=await commitUpstreamImport(de.current,t,e.oldHead,e.newHead,g);incrementUpstreamImport(),J.info({oldHead:e.oldHead?.slice(0,8)??`null`,newHead:e.newHead.slice(0,8),sha:s.slice(0,8)},`[history] upstream-import from ${e.oldHead?.slice(0,8)??`null`}..${e.newHead.slice(0,8)} → ${s.slice(0,8)}`)}catch(e){J.error({err:e},`[shadow] upstream-import failed`)}}})}catch(e){J.error({err:e},`[server] HEAD watcher failed to start`),Ut.push(`head-watcher`)}function E(e){for(let g of e)try{let e=relative(t,join(s,g));if(e.startsWith(`..`))continue;let S=stripDocExtension(e),w=me.documents.get(S);if(!w)continue;let E=it(S);E===null?J.warn({docName:S,file:g},`[sync] content conflict: serializeDoc returned null; reconciledBase snapshot skipped`):setReconciledBase(S,E);let D=w.getMap(`lifecycle`);D.set(`status`,`conflict`),D.set(`reason`,`sync-merge-conflict`),J.info({docName:S,file:g},`[sync] marked loaded content conflict`)}catch(e){J.warn({err:e,file:g},`[sync] failed to mark loaded content conflict`)}}let D=H?.[0]??`open-knowledge`,O=[`-c`,`credential.helper=!${H&&H.length>1?H.join(` `):D} auth git-credential`];try{zt=new SyncEngine({projectDir:s,contentDir:t,contentFilter:se,contentRoot:L,syncEnabled:Y(),credentialArgs:O,cc1Broadcaster:_e,detectGh:e.detectGh,tokenStore:e.tokenStore,checkPushPermissionFn:e.checkPushPermissionFn,setBatchInProgress:e=>{setBatchInProgress(e),e||fe.flushDeferredStores(`within-branch`).catch(e=>{J.error({err:e},`[persistence] deferred store drain failed after sync batch`)})},onStateChange:e=>{J.info({state:e},`[sync] state → ${e}`)},onContentConflictsDetected:E,onAutoDisable:async e=>{J.warn({reason:e},`[sync] auto-disabled — persisting to project-local config`);let t=await writeConfigPatch({cwd:s,scope:`project-local`,patch:{autoSync:{enabled:!1}}});t.ok||J.error({result:t,reason:e,humanError:humanFormat(t.error),configPath:resolveConfigPath(`project-local`,s)},`[sync] failed to persist auto-disable — next restart WILL re-enable sync and re-trigger the same failure. Check permissions on the config path.`)}}),await zt.start()}catch(e){J.warn({err:e},`[server] SyncEngine failed to start — sync disabled`),zt=null}Re(`files`),Re(`backlinks`),Re(`graph`),Re(`tags`)}return Wt().then(Me,Pe),{hocuspocus:me,sessionManager:ge,cc1Broadcaster:_e,agentFocusBroadcaster:ve,agentPresenceBroadcaster:ye,contentFilter:se,basenameIndex:ne,serverInstanceId:ee,destroy:Ht,ready:Ie,degraded:Ut,lockDir:te,get syncEngine(){return zt}}}const LEGACY_RUNTIME_FILENAMES=[`server.lock`,`ui.lock`,`state.json`,`principal.json`,`sync-state.json`,`conflicts.json`,`last-spawn-error.log`],LEGACY_RUNTIME_DIRNAMES=[`cache`,`tmp`];function findLegacyRuntimeFiles(e){let t=resolve(e,LOCAL_DIR);if(!(()=>{if(!existsSync(t))return!0;try{return readdirSync(t).length===0}catch{return!0}})())return[];let s=[];for(let t of LEGACY_RUNTIME_FILENAMES)existsSync(resolve(e,t))&&s.push(t);for(let t of LEGACY_RUNTIME_DIRNAMES){let g=resolve(e,t);try{existsSync(g)&&statSync(g).isDirectory()&&s.push(`${t}/`)}catch{}}return s}function computeWorktreeAttributes(e){let t=resolveGitDirDetailed(e);switch(t.kind){case`directory`:return{kind:`main`,gitdir:t.path};case`linked`:return{kind:`linked`,gitdir:t.path};case`malformed-pointer`:return{kind:`linked`,gitdir:null};case`inaccessible`:case`absent`:return{kind:`main`,gitdir:null}}}const DEFAULT_IDLE_THRESHOLD_MS=1800*1e3,DESTROY_STEP_TIMEOUT_MS=5e3;async function bootServer(e){let t=resolveLocalSinkConfig({projectDir:e.projectDir??e.contentDir,contentDir:e.contentDir});if(t){let e=t.telemetry.attributeDenylist,s=[];for(let t of e)s.push(t),s.push(`*.${t}`);loggerFactory.configure({pinoConfig:{fileSink:t.logs,redactPaths:s}})}initTelemetry({localSink:t?.telemetry});let{kind:s,gitdir:g}=computeWorktreeAttributes(e.projectDir??e.contentDir),S={"ok.worktree.kind":s};return g!==null&&(S[`ok.worktree.gitdir`]=normalizeFsPath(g)),withSpan(`ok.boot`,{attributes:S},async()=>bootServerInner(e))}async function bootServerInner(e){let t=e.skipAutoInit??!1,s=e.attachUiSibling??!0,g=e.idleShutdownMs,S=e.log??getLogger(`boot`),w=process.env.OK_LOCK_KIND===`mcp-spawned`||process.env.OK_LOCK_KIND===`interactive`?process.env.OK_LOCK_KIND:void 0,E=e.lockKind??w??`interactive`,{createServer:D}=await import(`node:http`),{updateServerLockPort:O}=await import(`./server-lock-CyhBidkz-Bp84kpW5.mjs`),k=!1;if(!t&&e.autoInitFn)try{k=!!await e.autoInitFn()}catch(e){S.warn({err:e},`autoInitFn failed`)}let j=e.projectDir??e.contentDir,F=resolve(j,`.ok`);if(!existsSync(resolve(F,`config.yml`)))throw new MissingOkConfigError(existsSync(F)?`config`:`okdir`,j);existsSync(resolve(F,`.gitignore`))||console.warn("[boot] Note: .ok/.gitignore is missing — per-machine state files in .ok/ may show up as untracked changes. Run `ok init` to add the recommended ignore entries.");let L=e.gitPreflight??assertGitAvailable;try{L()}catch(e){if(e instanceof GitNotAvailableError||e instanceof GitTooOldError){let t=e instanceof GitTooOldError?e.detected:``,s=e instanceof GitTooOldError?`too_old`:`not_available`;emitPreflightFailureSpan(e),S.warn({event:`git_preflight_fail`,platform:e.platform,reason:s,detectedVersion:t},s===`not_available`?`git binary not found`:`git binary too old`),process.stderr.write(`${e.message}\n`)}throw await shutdownTelemetry(),e}let B=findLegacyRuntimeFiles(F);B.length>0&&console.warn(`[boot] Found legacy runtime files at .ok/${B.join(`, `)}. Delete .ok/ and re-init — these files moved to .ok/${LOCAL_DIR}/.`);let H=createServer$1({contentDir:e.contentDir,projectDir:e.projectDir,contentRoot:e.contentRoot,port:e.port,host:e.host,quiet:e.quiet??!1,debounce:e.debounce,maxDebounce:e.maxDebounce,gitEnabled:e.gitEnabled,commitDebounceMs:e.commitDebounceMs,wipRef:e.wipRef,enableTestRoutes:e.enableTestRoutes,shadowRepo:e.shadowRepo,destroyTimeoutMs:e.destroyTimeoutMs,localOpCliArgs:e.localOpCliArgs,onAgentWrite:e.onAgentWrite,lockKind:E,skipStateManifestCheck:e.skipStateManifestCheck,detectGh:e.detectGh,tokenStore:e.tokenStore}),{hocuspocus:q,destroy:J,ready:Y,degraded:ee,lockDir:te,sessionManager:ne,agentFocusBroadcaster:ae,agentPresenceBroadcaster:oe}=H,se=(()=>{let t=e.host??`localhost`;return t===`0.0.0.0`||t===`::`?`localhost`:t.includes(`:`)&&!t.startsWith(`[`)?`[${t}]`:t})(),ce=e.port??0,ue=createMcpHttpHandler({contentDir:e.contentDir,projectDir:e.projectDir??e.contentDir,config:e.config,getServerUrl:()=>`http://${se}:${ce}`,log:S}),de=D();de.headersTimeout=3e4,de.requestTimeout=6e4;let fe=e.serveContentAssets?createAssetServeMiddleware({contentFilter:H.contentFilter,contentSirv:build_default(e.contentDir,{dev:!0,dotfiles:!1}),inlineExtensions:INLINE_RENDERABLE_EXTENSIONS,assetExtensions:ASSET_EXTENSIONS,blocklistExtensions:EXECUTABLE_BLOCKLIST_EXTENSIONS}):void 0,me=!1;if(e.reactShellDistDir)try{acquireUiLock(te,{port:0,worktreeRoot:e.projectDir??e.contentDir}),me=!0}catch(e){if(e instanceof UiLockCollisionError)S.info({event:`ui-lock-yielded-to-live-holder`,pid:process.pid,existingPid:e.existing.pid,existingPort:e.existing.port,lockDir:te},`ui.lock already held by a live process — yielding (advertisement is fulfilled)`);else throw await J().catch(()=>{}),e}let ge=e.reactShellDistDir?build_default(e.reactShellDistDir,{single:!0,gzip:!0,immutable:!0}):void 0,_e=mountMcpAndApi({httpServer:de,hocuspocus:q,mcpHttpHandler:ue,log:S,sessionManager:ne,agentFocusBroadcaster:ae,agentPresenceBroadcaster:oe,keepaliveGraceMs:e.keepaliveGraceMs,contentAssetMiddleware:fe,reactShellMiddleware:ge}),ve=async()=>{throw Error(`bootServer: destroy() invoked before initialization — boot did not complete`)},ye=null;g!==null&&(ye=attachIdleShutdown({httpServer:de,thresholdMs:g??DEFAULT_IDLE_THRESHOLD_MS,log:S,onShutdown:(e.idleShutdownHandler??(e=>async()=>{await e()}))(async()=>{await ve()})})),await restoreLifecycleFromConflictsJson({hocuspocus:q,projectDir:e.projectDir??e.contentDir,log:S});try{await new Promise((t,s)=>{let g=e=>s(e);de.once(`error`,g),de.listen(e.port,e.host,()=>{de.removeListener(`error`,g),t()})})}catch(e){if(me)try{releaseUiLock(te)}catch(e){S.warn({err:e},`releaseUiLock failed during listen-error cleanup`)}throw await J().catch(()=>{}),e}let Ce=de.address(),we=typeof Ce==`object`&&Ce?Ce.port:e.port??0;if(ce=we,O(te,we),me&&updateUiLockPort(te,we),s&&e.spawnUiSiblingFn)try{await e.spawnUiSiblingFn({lockDir:te,log:S})}catch(e){S.warn({err:e},`spawnUiSiblingFn failed`)}let Te=!1,De=async(e,t)=>{let s;try{await Promise.race([t(),new Promise((t,g)=>{s=setTimeout(()=>{g(Error(`${e} timed out after ${DESTROY_STEP_TIMEOUT_MS}ms`))},DESTROY_STEP_TIMEOUT_MS),s.unref?.()})])}finally{s!==void 0&&clearTimeout(s)}};return ve=async()=>{if(Te)return;Te=!0;let e=[],t=async(t,s)=>{try{await De(t,s)}catch(s){e.push(s),S.warn({err:s,step:t},`bootServer destroy step failed`)}};try{ye?.detach()}catch(t){e.push(t),S.warn({err:t,step:`idleHandle.detach`},`bootServer destroy step failed`)}if(await t(`mount.shutdown`,()=>_e.shutdown()),await t(`mcpHttpHandler.close`,()=>ue.close()),await t(`mount.wss.close`,()=>new Promise((e,t)=>{_e.wss.close(s=>s?t(s):e())})),await t(`httpServer.closeAllConnections`,async()=>{de.closeAllConnections?.()}),await t(`httpServer.close`,()=>new Promise((e,t)=>{de.close(s=>s&&s.code!==`ERR_SERVER_NOT_RUNNING`?t(s):e())})),await t(`destroyHocuspocus`,()=>J()),me&&await t(`releaseUiLock`,async()=>releaseUiLock(te)),await t(`shutdownTelemetry`,()=>shutdownTelemetry()),await t(`flushLogFileSinks`,()=>loggerFactory.flushAllFileSinks()),e.length>0)throw AggregateError(e,`bootServer destroy completed with errors`)},{httpServer:de,destroy:ve,lockDir:te,contentDir:e.contentDir,port:we,ready:Y,degraded:ee,didAutoInit:k,serverInstance:H}}async function restoreLifecycleFromConflictsJson(e){let{hocuspocus:t,projectDir:s,log:g}=e,S,w;try{S=new ConflictStore(s),w=S.list()}catch(e){g.warn({err:e,projectDir:s},`[boot] lifecycle restore: failed to read conflicts.json — skipping`);return}if(w.length===0)return;let E=null;try{let e=resolveGitDir(s),t=e?join(e,`MERGE_HEAD`):null;if(!t||!existsSync(t)){S.clear(),console.warn(JSON.stringify({event:`lifecycle-restore-cleared-stale-conflicts`,reason:`no-merge-head`,count:w.length}));return}let g=(await simpleGit({baseDir:s,timeout:{block:5e3}}).raw([`diff`,`--name-only`,`--diff-filter=U`])).trim();E=new Set(g?g.split(`
3083
- `).map(e=>e.trim()).filter(Boolean):[])}catch(e){g.warn({err:e,projectDir:s},`[boot] lifecycle restore: git unmerged probe failed — restoring all entries`)}if(E!==null){let e=0;for(let t of w)E.has(t.file)||(S.removeConflict(t.file),e++);if(e>0&&console.warn(JSON.stringify({event:`lifecycle-restore-pruned-resolved-entries`,pruned:e,remaining:w.length-e})),w=w.filter(e=>E?.has(e.file)),w.length===0)return}for(let e of w){let s=stripDocExtension(e.file),S=null,w=!1;try{S=await t.openDirectConnection(s);let e=S.document;if(!e)continue;let g=e.getMap(`lifecycle`);g.set(`status`,`conflict`),g.set(`reason`,`conflict-markers`),w=!0,console.warn(JSON.stringify({event:`lifecycle-restored-from-conflicts-json`,"doc.name":s}))}catch(e){g.warn({err:e,docName:s},`[boot] lifecycle restore: failed to set lifecycle for doc — skipping`)}finally{if(S)try{await S.disconnect()}catch(e){g.warn({err:e,docName:s,restored:w},`[boot] lifecycle restore: disconnect failed after lifecycle write`)}}}}const ConfigSchema=ConfigSchema$1;function detectClaudeDesktopPresence(e={}){let t=e.home??homedir(),s=e.platformName??process.platform,g=e.env??process.env;return s===`darwin`?existsSync(join(t,`Library`,`Application Support`,`Claude`)):s===`win32`?existsSync(join(g.APPDATA??join(t,`AppData`,`Roaming`),`Claude`)):!1}const OK_LOGS_DIR=join(homedir(),`.ok`,`logs`),MAX_ROTATED_FILES=2,MAX_AGE_DAYS=7,MAX_DIR_SIZE_BYTES=45*1024*1024,REDACT_PATHS=[`authorization`,`password`,`token`,`apiKey`,`secret`,`*.authorization`,`*.password`,`*.token`,`*.apiKey`,`*.secret`];function resolveLogLevel(){let e=process.env.OK_LOG_LEVEL??process.env.LOG_LEVEL;if(e){let t=[`fatal`,`error`,`warn`,`info`,`debug`],s=e.toLowerCase();if(t.includes(s))return s}return process.env.NODE_ENV===`test`?`silent`:`info`}function ensureDir(e){mkdirSync(e,{recursive:!0})}function todayDateString(){return new Date().toISOString().slice(0,10)}function rotateIfNeeded(e){try{if(statSync(e).size<5242880)return}catch{return}for(let t=MAX_ROTATED_FILES;t>=1;t--){let s=t===1?e:`${e}.${t-1}`,g=`${e}.${t}`;try{renameSync(s,g)}catch{}}try{unlinkSync(`${e}.${MAX_ROTATED_FILES+1}`)}catch{}}function pruneLogsDir(e){try{let t=Date.now(),s=MAX_AGE_DAYS*24*60*60*1e3,g=readdirSync(e).filter(e=>e.endsWith(`.log`)||/\.log\.\d+$/.test(e)).map(t=>{try{let s=statSync(join(e,t));return{name:t,mtime:s.mtimeMs,size:s.size}}catch{return null}}).filter(Boolean);for(let S of g)if(t-S.mtime>s)try{unlinkSync(join(e,S.name))}catch{}let S=g.filter(e=>t-e.mtime<=s).sort((e,t)=>e.mtime-t.mtime),w=S.reduce((e,t)=>e+t.size,0);for(let t of S){if(w<=MAX_DIR_SIZE_BYTES)break;try{unlinkSync(join(e,t.name)),w-=t.size}catch{}}}catch{}}function createFileLogger(e){ensureDir(OK_LOGS_DIR);let t=todayDateString(),s=e.filePath??join(OK_LOGS_DIR,`${e.name}.${t}.log`);rotateIfNeeded(s),setTimeout(()=>pruneLogsDir(OK_LOGS_DIR),5e3);let g=import_pino.default.destination({dest:s,append:!0,sync:!1});return(0,import_pino.default)({level:resolveLogLevel(),name:e.name,redact:{paths:REDACT_PATHS,censor:`[REDACTED]`},base:{pid:process.pid,hostname:void 0,runtime:`cli`,project:e.project??`<no-project>`},timestamp:import_pino.default.stdTimeFunctions.isoTime,...e.additionalOptions},g)}function getLogFilePath(e){return join(OK_LOGS_DIR,`${e}.${todayDateString()}.log`)}function getLogsDir(){return OK_LOGS_DIR}const ANCESTOR_WALK_DEPTH_LIMIT=30,GIT_MARKER=`.git`;function findEnclosingGitRoot(e){let t=resolve(e),s=0;for(;s<ANCESTOR_WALK_DEPTH_LIMIT;){let e=!1;try{e=existsSync(resolve(t,GIT_MARKER))}catch{e=!1}if(e)return{gitRoot:t,distance:s};let g=dirname(t);if(g===t)return null;t=g,s+=1}return null}const execFileAsync=promisify(execFile),log=getLogger(`project-git`);var ProjectGitInitError=class extends Error{stderr;constructor(e,t=``,s){super(e,s),this.name=`ProjectGitInitError`,this.stderr=t}};async function isInsideExistingWorkTree(e){try{let{stdout:t}=await execFileAsync(`git`,[`rev-parse`,`--is-inside-work-tree`],{cwd:e});return t.trim()===`true`}catch{return!1}}async function ensureProjectGit(e){let t=resolve(e),s=resolve(t,`.git`),g=resolve(s,`HEAD`),S=!1;if(existsSync(s)){if(!statSync(s).isDirectory()||existsSync(g))return{didInit:!1};log.info({},`detected partial .git/ — running git init to repair`),S=!0}else if(await isInsideExistingWorkTree(t))return{didInit:!1};let w=``;try{w=(await execFileAsync(`git`,[`init`,`--initial-branch=main`,t])).stderr??``}catch(e){let s=typeof e==`object`&&e&&`stderr`in e?String(e.stderr??``):``;throw new ProjectGitInitError(`git init failed at ${t}: ${e instanceof Error?e.message:String(e)}`,s,{cause:e})}if(!existsSync(g))throw new ProjectGitInitError(`git init reported success but ${s}/HEAD is missing (partial init detected)`,w);return S?(log.info({path:t},`backfilled missing .git/HEAD`),{didInit:!0,repaired:!0}):(log.info({path:t,branch:`main`},`initialized .git/`),{didInit:!0})}async function resolvePackageVersion(e,t){let s;try{s=createRequire(t).resolve(e)}catch(e){if(e?.code===`MODULE_NOT_FOUND`)return;throw e}for(let t=dirname(s),g=0;g<32;g+=1){let s=join(t,`package.json`);if(existsSync(s))try{let t=JSON.parse(await readFile$1(s,`utf-8`));if(t.name===e&&typeof t.version==`string`)return t.version}catch{}let g=dirname(t);if(g===t)return;t=g}}const MAX_CAUSE_DEPTH=5,HOME_PATH_PATTERNS=[{regex:/\/Users\/[^/]+\//g,replacement:`~/`},{regex:/\/home\/[^/]+\//g,replacement:`~/`},{regex:/C:\\\\Users\\\\[^\\\\]+\\\\/g,replacement:`~\\`},{regex:/C:\\Users\\[^\\]+\\/g,replacement:`~\\`}];function scrubPaths(e){if(e===void 0)return;let t=e;for(let{regex:e,replacement:s}of HOME_PATH_PATTERNS)t=t.replace(e,s);return t}function serializeError(e,t=0,s=new WeakSet){if(t>=MAX_CAUSE_DEPTH)return{name:`SerializedError.CauseDepthExceeded`,message:`cause chain depth > ${MAX_CAUSE_DEPTH}; truncated`};if(typeof e==`object`&&e){if(s.has(e))return{name:`SerializedError.CauseCycle`,message:`cyclic cause; truncated`};s.add(e)}if(e instanceof Error)return{name:e.name,message:scrubPaths(e.message)??``,stack:scrubPaths(e.stack),code:e.code,cause:e.cause===void 0?void 0:serializeError(e.cause,t+1,s)};if(e==null)return{name:`UnknownError`,message:String(e)};if(typeof e==`string`)return{name:`StringError`,message:scrubPaths(e)??e};if(typeof e==`object`){let g=e;return{name:String(g.name??`ObjectError`),message:scrubPaths(String(g.message??``))??``,stack:scrubPaths(g.stack),code:g.code,cause:g.cause===void 0?void 0:serializeError(g.cause,t+1,s)}}return{name:`UnknownError`,message:String(e)}}export{StateManifestError as $,readBranchFromHead as $n,tracedRename as $r,fallbackPaths as $t,MCP_CONNECTION_ID_HEADER as A,resolveShadowDir as Ai,isPairedWriteOrigin as An,safeContentPath as Ar,contributorCount as At,ProjectGitInitError as B,logsCurrentPath as Bn,shutdownTelemetry as Br,createPersistenceExtension as Bt,HocuspocusAuthRejection as C,atomicWriteFileSync as Ci,installUserSkill as Cn,rewriteMarkdownLinksForDocumentRename as Cr,coercePackId as Ct,LOG_MD_TEMPLATE as D,writeConfigPatch as Di,isHocuspocusAuthRejectionReason as Dn,runCloneSubprocess as Dr,compareSemver as Dt,LIVE_DERIVED_INDEX_DEBOUNCE_MS as E,withFileLockSync as Ei,isConfigDoc as En,runAuthStatusSubprocess as Er,commitWipFromTree as Et,MissingOkConfigError as F,lastKnownHash as Fn,saveVersion as Fr,createExternalChangeHandler as Ft,STARTER_FOLDERS as G,parseAuthRejectionWire as Gn,startWatcher as Gr,detectClaudeDesktopPresence as Gt,ROOT_GITIGNORE_TEMPLATE as H,mountMcpAndApi as Hn,spansPreviousPath as Hr,createServerObserverExtension as Ht,OBSERVER_SYNC_ORIGIN as I,listRescueCheckpoints as In,seedBasenameIndex as Ir,createFileLogger as It,STARTER_PACK_IDS as J,parseKeepaliveConnectionId as Jn,toBroadcasterKey as Jr,emitPreflightFailureSpan as Jt,STARTER_FOLDER_FRONTMATTER_FILENAME as K,parseGitVersion as Kn,streamingProblemEvent as Kr,detectGit as Kt,OK_OKIGNORE_TEMPLATE as L,listStarterPacks as Ln,serializeError as Lr,createLiveDerivedIndexExtension as Lt,MIN_GIT_VERSION as M,isProjectRoot as Mn,safetyCheckpoint as Mr,createAssetServeMiddleware as Mt,MISSING_OK_CONFIG_MESSAGE as N,isSelfWrite as Nn,sanitizeClientName as Nr,createContentFilter as Nt,MANAGED_RENAME_ORIGIN as O,GitDirAccessError as Oi,isKnownPackId as On,runDeviceFlowSubprocess as Or,containsConflictMarkers as Ot,McpLogger as P,isSystemDoc as Pn,saveInMemoryCheckpoint as Pr,createContentFilterAsync as Pt,SeedRootDirError as Q,readArmedPaneTarget as Qn,tracedMkdirSync as Qr,extractWikiLinksFromMarkdown as Qt,PANE_TARGET_TTL_MS as R,loadPrincipal as Rn,setActiveSpanAttributes as Rr,createMcpHttpHandler as Rt,HOCUSPOCUS_AUTH_REJECTION_REASONS as S,isJSONRPCResultResponse as Si,installTestLoggers as Sn,restoreLifecycleFromConflictsJson as Sr,clearContributors as St,INSTALLED_AGENTS_SCHEMES as T,resolveConfigPath as Ti,isAllowedWorkspaceHostHeader as Tn,runAuthReposSubprocess as Tr,commitWip as Tt,SERVICE_WRITER as U,normalizeFsPath as Un,spawnDetached as Ur,createStreamingErrorWriter as Ut,ROLLBACK_ORIGIN as V,logsPreviousPath as Vn,spansCurrentPath as Vr,createServer$1 as Vt,SKILL_INSTALL_EVENTS_FILE_REL as W,packageVersionMajorMinor as Wn,splitMarkdownBlocks as Wr,createTestLogger as Wt,STATE_MANIFEST_FILENAME as X,planSeed as Xn,tracedLinkSync as Xr,errorResponse as Xt,STARTER_TEMPLATES as Y,pathToDocName as Yn,tracedAppendFileSync as Yr,ensureProjectGit as Yt,SeedPrerequisiteError as Z,readAllTargets as Zn,tracedMkdir as Zr,evictStaleTrackerEntries as Zt,FILE_WATCHER_ORIGIN as _,McpServer as _i,incrementServerObserverFire as _n,resolveCursorSpawnInvocation as _r,buildStarterFolderFrontmatterYaml as _t,AgentPresenceBroadcaster as a,tracedWriteFileSync as ai,gcCheckpointRefs as an,readUiLock as ar,applySeed as at,GitNotAvailableError as b,isInitializedNotification as bi,initTelemetry as bn,resolvePackageVersion as br,classifyFsPath as bt,BacklinkIndex as c,validateAgentId as ci,getLogFilePath as cn,recordSkillInstallEvent as cr,assertGitAvailable as ct,CONFLICT_MARKER_RE as d,withSpan as di,getMeter as dn,releaseUiLock as dr,bootServer as dt,tracedRenameSync as ei,findEnclosingGitRoot as en,readServerPackageVersion as er,TagIndex as et,CURSOR_BUNDLE_PATHS_BY_PLATFORM as f,withSpanSync as fi,getMetrics as fn,removeLastKnownHash as fr,buildAndOpenSkill as ft,FILE_SYSTEM_WRITER as g,writeTracker as gi,incrementCollabSocketFilteredError as gn,resolveCursorBinaryDefault as gr,buildSkillZip as gt,DEFAULT_PACK_ID as h,writeTargetVersion as hi,handleSpawnCursor as hn,resolveContentDir as hr,buildInstructions as ht,AgentFocusBroadcaster as i,tracedWriteFile as ii,formatContributorsFrom as in,readTargetVersion as ir,applyExternalChange as it,MCP_SERVER_NAME as j,isPathWithinDir as jn,safeSubdir as jr,createApiExtension as jt,MAX_AGENT_SESSIONS as k,MalformedGitPointerError as ki,isLoopbackAddress as kn,runWithMcpLogger as kr,contentHash as kt,CC1Broadcaster as l,validateCloneInputs as li,getLogger as ln,registerAllTools as lr,assertNeverDiskEvent as lt,DEFAULT_CHECKPOINT_RETENTION as m,writeStateManifest as mi,handleCollabSocketError as mn,resolveBundledSkillDir as mr,buildExecResult as mt,AGENT_ID_RE as n,tracedRmdirSync as ni,formatAuthRejectionWire as nn,readStateManifest as nr,acquireUiLock as nt,AgentSessionCapacityError as o,updateLastKnownHash as oi,getCurrentMcpLogger as on,reconcile as or,armPaneTarget as ot,ConfigSchema as p,writeRootGitignoreForNewRepo as pi,getTracer as pn,resetMetrics as pr,buildConfigYmlContent as pt,STARTER_PACKS as q,parseHocuspocusAuthToken as qn,swapContributors as qr,detectProjectShape as qt,AGENT_WRITE_ORIGIN as r,tracedUnlinkSync as ri,formatContributors as rn,readTargetRecordedAt as rr,applyAgentMarkdownWrite as rt,AgentSessionManager as s,updateUiLockPort as si,getLocalDir as sn,recordContributor as sr,assertCompatibleStateManifest as st,AGENT_ID_MAX_LEN as t,tracedRmSync as ti,findEnclosingProjectRoot as tn,readSkillInstallStateSnapshot as tr,UiLockCollisionError as tt,CONFIG_FILENAME as u,validateSkillZip as ui,getLogsDir as un,registerWrite as ur,attachIdleShutdown as ut,GIT_PREFLIGHT_FAIL_SPAN_NAME as v,JSONRPCMessageSchema as vi,initContent as vn,resolveLockDir as vr,buildWipTree as vt,HocuspocusAuthTokenSchema as w,readConfigSafely as wi,isAllowedApiOrigin as wn,rewriteWikiLinksForDocumentRename as wr,commitUpstreamImport as wt,GitTooOldError as x,isJSONRPCRequest as xi,installPrettyZodErrors as xn,restoreContributors as xr,clearArmedPaneTarget as xt,GIT_UPSTREAM_WRITER as y,LATEST_PROTOCOL_VERSION as yi,initShadowRepo as yn,resolvePack as yr,classifyEvents as yt,PinoLogger as z,loggerFactory as zn,shadowGit as zr,createOsProbe as zt};
3084
- //# sourceMappingURL=dist-eWWovL1R.mjs.map
3083
+ `).map(e=>e.trim()).filter(Boolean):[])}catch(e){g.warn({err:e,projectDir:s},`[boot] lifecycle restore: git unmerged probe failed — restoring all entries`)}if(E!==null){let e=0;for(let t of w)E.has(t.file)||(S.removeConflict(t.file),e++);if(e>0&&console.warn(JSON.stringify({event:`lifecycle-restore-pruned-resolved-entries`,pruned:e,remaining:w.length-e})),w=w.filter(e=>E?.has(e.file)),w.length===0)return}for(let e of w){let s=stripDocExtension(e.file),S=null,w=!1;try{S=await t.openDirectConnection(s);let e=S.document;if(!e)continue;let g=e.getMap(`lifecycle`);g.set(`status`,`conflict`),g.set(`reason`,`conflict-markers`),w=!0,console.warn(JSON.stringify({event:`lifecycle-restored-from-conflicts-json`,"doc.name":s}))}catch(e){g.warn({err:e,docName:s},`[boot] lifecycle restore: failed to set lifecycle for doc — skipping`)}finally{if(S)try{await S.disconnect()}catch(e){g.warn({err:e,docName:s,restored:w},`[boot] lifecycle restore: disconnect failed after lifecycle write`)}}}}const ConfigSchema=ConfigSchema$1;function detectClaudeDesktopPresence(e={}){let t=e.home??homedir(),s=e.platformName??process.platform,g=e.env??process.env;return s===`darwin`?existsSync(join(t,`Library`,`Application Support`,`Claude`)):s===`win32`?existsSync(join(g.APPDATA??join(t,`AppData`,`Roaming`),`Claude`)):!1}const OK_LOGS_DIR=join(homedir(),`.ok`,`logs`),MAX_ROTATED_FILES=2,MAX_AGE_DAYS=7,MAX_DIR_SIZE_BYTES=45*1024*1024,REDACT_PATHS=[`authorization`,`password`,`token`,`apiKey`,`secret`,`*.authorization`,`*.password`,`*.token`,`*.apiKey`,`*.secret`];function resolveLogLevel(){let e=process.env.OK_LOG_LEVEL??process.env.LOG_LEVEL;if(e){let t=[`fatal`,`error`,`warn`,`info`,`debug`],s=e.toLowerCase();if(t.includes(s))return s}return process.env.NODE_ENV===`test`?`silent`:`info`}function ensureDir(e){mkdirSync(e,{recursive:!0})}function todayDateString(){return new Date().toISOString().slice(0,10)}function rotateIfNeeded(e){try{if(statSync(e).size<5242880)return}catch{return}for(let t=MAX_ROTATED_FILES;t>=1;t--){let s=t===1?e:`${e}.${t-1}`,g=`${e}.${t}`;try{renameSync(s,g)}catch{}}try{unlinkSync(`${e}.${MAX_ROTATED_FILES+1}`)}catch{}}function pruneLogsDir(e){try{let t=Date.now(),s=MAX_AGE_DAYS*24*60*60*1e3,g=readdirSync(e).filter(e=>e.endsWith(`.log`)||/\.log\.\d+$/.test(e)).map(t=>{try{let s=statSync(join(e,t));return{name:t,mtime:s.mtimeMs,size:s.size}}catch{return null}}).filter(Boolean);for(let S of g)if(t-S.mtime>s)try{unlinkSync(join(e,S.name))}catch{}let S=g.filter(e=>t-e.mtime<=s).sort((e,t)=>e.mtime-t.mtime),w=S.reduce((e,t)=>e+t.size,0);for(let t of S){if(w<=MAX_DIR_SIZE_BYTES)break;try{unlinkSync(join(e,t.name)),w-=t.size}catch{}}}catch{}}function createFileLogger(e){ensureDir(OK_LOGS_DIR);let t=todayDateString(),s=e.filePath??join(OK_LOGS_DIR,`${e.name}.${t}.log`);rotateIfNeeded(s),setTimeout(()=>pruneLogsDir(OK_LOGS_DIR),5e3);let g=import_pino.default.destination({dest:s,append:!0,sync:!1});return(0,import_pino.default)({level:resolveLogLevel(),name:e.name,redact:{paths:REDACT_PATHS,censor:`[REDACTED]`},base:{pid:process.pid,hostname:void 0,runtime:`cli`,project:e.project??`<no-project>`},timestamp:import_pino.default.stdTimeFunctions.isoTime,...e.additionalOptions},g)}function getLogFilePath(e){return join(OK_LOGS_DIR,`${e}.${todayDateString()}.log`)}function getLogsDir(){return OK_LOGS_DIR}const ANCESTOR_WALK_DEPTH_LIMIT=30,GIT_MARKER=`.git`;function findEnclosingGitRoot(e){let t=resolve(e),s=0;for(;s<ANCESTOR_WALK_DEPTH_LIMIT;){let e=!1;try{e=existsSync(resolve(t,GIT_MARKER))}catch{e=!1}if(e)return{gitRoot:t,distance:s};let g=dirname(t);if(g===t)return null;t=g,s+=1}return null}const execFileAsync=promisify(execFile),log=getLogger(`project-git`);var ProjectGitInitError=class extends Error{stderr;constructor(e,t=``,s){super(e,s),this.name=`ProjectGitInitError`,this.stderr=t}};async function isInsideExistingWorkTree(e){try{let{stdout:t}=await execFileAsync(`git`,[`rev-parse`,`--is-inside-work-tree`],{cwd:e});return t.trim()===`true`}catch{return!1}}async function ensureProjectGit(e){let t=resolve(e),s=resolve(t,`.git`),g=resolve(s,`HEAD`),S=!1;if(existsSync(s)){if(!statSync(s).isDirectory()||existsSync(g))return{didInit:!1};log.info({},`detected partial .git/ — running git init to repair`),S=!0}else if(await isInsideExistingWorkTree(t))return{didInit:!1};let w=``;try{w=(await execFileAsync(`git`,[`init`,`--initial-branch=main`,t])).stderr??``}catch(e){let s=typeof e==`object`&&e&&`stderr`in e?String(e.stderr??``):``;throw new ProjectGitInitError(`git init failed at ${t}: ${e instanceof Error?e.message:String(e)}`,s,{cause:e})}if(!existsSync(g))throw new ProjectGitInitError(`git init reported success but ${s}/HEAD is missing (partial init detected)`,w);return S?(log.info({path:t},`backfilled missing .git/HEAD`),{didInit:!0,repaired:!0}):(log.info({path:t,branch:`main`},`initialized .git/`),{didInit:!0})}async function resolvePackageVersion(e,t){let s;try{s=createRequire(t).resolve(e)}catch(e){if(e?.code===`MODULE_NOT_FOUND`)return;throw e}for(let t=dirname(s),g=0;g<32;g+=1){let s=join(t,`package.json`);if(existsSync(s))try{let t=JSON.parse(await readFile$1(s,`utf-8`));if(t.name===e&&typeof t.version==`string`)return t.version}catch{}let g=dirname(t);if(g===t)return;t=g}}const MAX_CAUSE_DEPTH=5,HOME_PATH_PATTERNS=[{regex:/\/Users\/[^/]+\//g,replacement:`~/`},{regex:/\/home\/[^/]+\//g,replacement:`~/`},{regex:/C:\\\\Users\\\\[^\\\\]+\\\\/g,replacement:`~\\`},{regex:/C:\\Users\\[^\\]+\\/g,replacement:`~\\`}];function scrubPaths(e){if(e===void 0)return;let t=e;for(let{regex:e,replacement:s}of HOME_PATH_PATTERNS)t=t.replace(e,s);return t}function serializeError(e,t=0,s=new WeakSet){if(t>=MAX_CAUSE_DEPTH)return{name:`SerializedError.CauseDepthExceeded`,message:`cause chain depth > ${MAX_CAUSE_DEPTH}; truncated`};if(typeof e==`object`&&e){if(s.has(e))return{name:`SerializedError.CauseCycle`,message:`cyclic cause; truncated`};s.add(e)}if(e instanceof Error)return{name:e.name,message:scrubPaths(e.message)??``,stack:scrubPaths(e.stack),code:e.code,cause:e.cause===void 0?void 0:serializeError(e.cause,t+1,s)};if(e==null)return{name:`UnknownError`,message:String(e)};if(typeof e==`string`)return{name:`StringError`,message:scrubPaths(e)??e};if(typeof e==`object`){let g=e;return{name:String(g.name??`ObjectError`),message:scrubPaths(String(g.message??``))??``,stack:scrubPaths(g.stack),code:g.code,cause:g.cause===void 0?void 0:serializeError(g.cause,t+1,s)}}return{name:`UnknownError`,message:String(e)}}export{StateManifestError as $,readBranchFromHead as $n,tracedRename as $r,fallbackPaths as $t,MCP_CONNECTION_ID_HEADER as A,resolveGitDirDetailed as Ai,isPairedWriteOrigin as An,safeContentPath as Ar,contributorCount as At,ProjectGitInitError as B,logsCurrentPath as Bn,shutdownTelemetry as Br,createPersistenceExtension as Bt,HocuspocusAuthRejection as C,atomicWriteFileSync as Ci,installUserSkill as Cn,rewriteMarkdownLinksForDocumentRename as Cr,coercePackId as Ct,LOG_MD_TEMPLATE as D,writeConfigPatch as Di,isHocuspocusAuthRejectionReason as Dn,runCloneSubprocess as Dr,compareSemver as Dt,LIVE_DERIVED_INDEX_DEBOUNCE_MS as E,withFileLockSync as Ei,isConfigDoc as En,runAuthStatusSubprocess as Er,commitWipFromTree as Et,MissingOkConfigError as F,lastKnownHash as Fn,saveVersion as Fr,createExternalChangeHandler as Ft,STARTER_FOLDERS as G,parseAuthRejectionWire as Gn,startWatcher as Gr,detectClaudeDesktopPresence as Gt,ROOT_GITIGNORE_TEMPLATE as H,mountMcpAndApi as Hn,spansPreviousPath as Hr,createServerObserverExtension as Ht,OBSERVER_SYNC_ORIGIN as I,listRescueCheckpoints as In,seedBasenameIndex as Ir,createFileLogger as It,STARTER_PACK_IDS as J,parseKeepaliveConnectionId as Jn,toBroadcasterKey as Jr,emitPreflightFailureSpan as Jt,STARTER_FOLDER_FRONTMATTER_FILENAME as K,parseGitVersion as Kn,streamingProblemEvent as Kr,detectGit as Kt,OK_OKIGNORE_TEMPLATE as L,listStarterPacks as Ln,serializeError as Lr,createLiveDerivedIndexExtension as Lt,MIN_GIT_VERSION as M,isProjectRoot as Mn,safetyCheckpoint as Mr,createAssetServeMiddleware as Mt,MISSING_OK_CONFIG_MESSAGE as N,isSelfWrite as Nn,sanitizeClientName as Nr,createContentFilter as Nt,MANAGED_RENAME_ORIGIN as O,GitDirAccessError as Oi,isKnownPackId as On,runDeviceFlowSubprocess as Or,containsConflictMarkers as Ot,McpLogger as P,isSystemDoc as Pn,saveInMemoryCheckpoint as Pr,createContentFilterAsync as Pt,SeedRootDirError as Q,readArmedPaneTarget as Qn,tracedMkdirSync as Qr,extractWikiLinksFromMarkdown as Qt,PANE_TARGET_TTL_MS as R,loadPrincipal as Rn,setActiveSpanAttributes as Rr,createMcpHttpHandler as Rt,HOCUSPOCUS_AUTH_REJECTION_REASONS as S,isJSONRPCResultResponse as Si,installTestLoggers as Sn,restoreLifecycleFromConflictsJson as Sr,clearContributors as St,INSTALLED_AGENTS_SCHEMES as T,resolveConfigPath as Ti,isAllowedWorkspaceHostHeader as Tn,runAuthReposSubprocess as Tr,commitWip as Tt,SERVICE_WRITER as U,normalizeFsPath as Un,spawnDetached as Ur,createStreamingErrorWriter as Ut,ROLLBACK_ORIGIN as V,logsPreviousPath as Vn,spansCurrentPath as Vr,createServer$1 as Vt,SKILL_INSTALL_EVENTS_FILE_REL as W,packageVersionMajorMinor as Wn,splitMarkdownBlocks as Wr,createTestLogger as Wt,STATE_MANIFEST_FILENAME as X,planSeed as Xn,tracedLinkSync as Xr,errorResponse as Xt,STARTER_TEMPLATES as Y,pathToDocName as Yn,tracedAppendFileSync as Yr,ensureProjectGit as Yt,SeedPrerequisiteError as Z,readAllTargets as Zn,tracedMkdir as Zr,evictStaleTrackerEntries as Zt,FILE_WATCHER_ORIGIN as _,McpServer as _i,incrementServerObserverFire as _n,resolveCursorSpawnInvocation as _r,buildStarterFolderFrontmatterYaml as _t,AgentPresenceBroadcaster as a,tracedWriteFileSync as ai,gcCheckpointRefs as an,readUiLock as ar,applySeed as at,GitNotAvailableError as b,isInitializedNotification as bi,initTelemetry as bn,resolvePackageVersion as br,classifyFsPath as bt,BacklinkIndex as c,validateAgentId as ci,getLogFilePath as cn,recordSkillInstallEvent as cr,assertGitAvailable as ct,CONFLICT_MARKER_RE as d,withSpan as di,getMeter as dn,releaseUiLock as dr,bootServer as dt,tracedRenameSync as ei,findEnclosingGitRoot as en,readServerPackageVersion as er,TagIndex as et,CURSOR_BUNDLE_PATHS_BY_PLATFORM as f,withSpanSync as fi,getMetrics as fn,removeLastKnownHash as fr,buildAndOpenSkill as ft,FILE_SYSTEM_WRITER as g,writeTracker as gi,incrementCollabSocketFilteredError as gn,resolveCursorBinaryDefault as gr,buildSkillZip as gt,DEFAULT_PACK_ID as h,writeTargetVersion as hi,handleSpawnCursor as hn,resolveContentDir as hr,buildInstructions as ht,AgentFocusBroadcaster as i,tracedWriteFile as ii,formatContributorsFrom as in,readTargetVersion as ir,applyExternalChange as it,MCP_SERVER_NAME as j,resolveShadowDir as ji,isPathWithinDir as jn,safeSubdir as jr,createApiExtension as jt,MAX_AGENT_SESSIONS as k,MalformedGitPointerError as ki,isLoopbackAddress as kn,runWithMcpLogger as kr,contentHash as kt,CC1Broadcaster as l,validateCloneInputs as li,getLogger as ln,registerAllTools as lr,assertNeverDiskEvent as lt,DEFAULT_CHECKPOINT_RETENTION as m,writeStateManifest as mi,handleCollabSocketError as mn,resolveBundledSkillDir as mr,buildExecResult as mt,AGENT_ID_RE as n,tracedRmdirSync as ni,formatAuthRejectionWire as nn,readStateManifest as nr,acquireUiLock as nt,AgentSessionCapacityError as o,updateLastKnownHash as oi,getCurrentMcpLogger as on,reconcile as or,armPaneTarget as ot,ConfigSchema as p,writeRootGitignoreForNewRepo as pi,getTracer as pn,resetMetrics as pr,buildConfigYmlContent as pt,STARTER_PACKS as q,parseHocuspocusAuthToken as qn,swapContributors as qr,detectProjectShape as qt,AGENT_WRITE_ORIGIN as r,tracedUnlinkSync as ri,formatContributors as rn,readTargetRecordedAt as rr,applyAgentMarkdownWrite as rt,AgentSessionManager as s,updateUiLockPort as si,getLocalDir as sn,recordContributor as sr,assertCompatibleStateManifest as st,AGENT_ID_MAX_LEN as t,tracedRmSync as ti,findEnclosingProjectRoot as tn,readSkillInstallStateSnapshot as tr,UiLockCollisionError as tt,CONFIG_FILENAME as u,validateSkillZip as ui,getLogsDir as un,registerWrite as ur,attachIdleShutdown as ut,GIT_PREFLIGHT_FAIL_SPAN_NAME as v,JSONRPCMessageSchema as vi,initContent as vn,resolveLockDir as vr,buildWipTree as vt,HocuspocusAuthTokenSchema as w,readConfigSafely as wi,isAllowedApiOrigin as wn,rewriteWikiLinksForDocumentRename as wr,commitUpstreamImport as wt,GitTooOldError as x,isJSONRPCRequest as xi,installPrettyZodErrors as xn,restoreContributors as xr,clearArmedPaneTarget as xt,GIT_UPSTREAM_WRITER as y,LATEST_PROTOCOL_VERSION as yi,initShadowRepo as yn,resolvePack as yr,classifyEvents as yt,PinoLogger as z,loggerFactory as zn,shadowGit as zr,createOsProbe as zt};
3084
+ //# sourceMappingURL=dist-Dj9BYfL1.mjs.map
package/dist/index.d.mts CHANGED
@@ -74,6 +74,32 @@ interface PreviewResult {
74
74
  }
75
75
  declare function previewContent(opts: PreviewOptions): PreviewResult;
76
76
  //#endregion
77
+ //#region src/sharing/git-exclude.d.ts
78
+ type ExcludeWriteResult = {
79
+ kind: 'updated';
80
+ appended: string[];
81
+ alreadyPresent: string[];
82
+ removed: string[];
83
+ } | {
84
+ kind: 'no-exclude';
85
+ reason: 'no-git' | 'no-info-dir' | 'malformed-pointer' | 'inaccessible';
86
+ };
87
+ interface TrackedRefusal {
88
+ kind: 'refused-tracked';
89
+ tracked: string[];
90
+ remediation: string;
91
+ }
92
+ type SharingMode = 'shared' | 'local-only' | 'no-git';
93
+ declare function getOkArtifactPaths(projectRoot: string): readonly string[];
94
+ declare function addOkPathsToGitExclude(projectRoot: string, paths: readonly string[]): ExcludeWriteResult | TrackedRefusal;
95
+ declare function removeOkPathsFromGitExclude(projectRoot: string, paths: readonly string[]): ExcludeWriteResult;
96
+ declare function readSharingMode(projectRoot: string): SharingMode;
97
+ declare function getExcludedOkPaths(projectRoot: string): readonly string[];
98
+ declare function probeTrackedOkPaths(projectRoot: string, paths: readonly string[]): {
99
+ tracked: string[];
100
+ };
101
+ declare function formatTrackedRemediation(tracked: readonly string[]): string;
102
+ //#endregion
77
103
  //#region src/commands/init.d.ts
78
104
  interface EditorMcpResult {
79
105
  editorId: EditorId;
@@ -233,5 +259,5 @@ interface ProjectAiIntegrationsResult {
233
259
  }
234
260
  declare function writeProjectAiIntegrations(projectDir: string, selectedEditorIds: readonly EditorId[], installOptions?: McpInstallOptions): ProjectAiIntegrationsResult;
235
261
  //#endregion
236
- export { ALL_EDITOR_IDS, EDITOR_LABELS, EDITOR_TARGETS, type EditorId, type EditorMcpResult, type EditorMcpTarget, type ExpectedShareRepo, type GhDetectResult, type IntegrationWriteOutcome, LAUNCH_CONFIG_NAME, type LaunchJsonResult, type LoadConfigResult, type McpConfigMigrateEvent, type McpConfigMigrateScope, type McpEntryClassification, type McpInstallOptions, type ParsedGitHubBlobUrl, type PreviewResult, type ProjectAiIntegrationsResult, type ResolveProjectRootOptions, type ResolveProjectRootResult, type ShareFolderValidationResult, type TokenStore, type UserMcpConfigsOptions, buildManagedServerEntry, buildMcpConfigMigrateEvent, classifyExistingMcpEntry, createTokenStore, detectGh, detectInstalledEditors, isEntryUpToDate, loadConfig, makeLazyProbeTokenStore, parseGitHubBlobUrl, parseGitUrl, previewContent, readExistingMcpEntry, resolveProjectRoot, scaffoldLaunchJson, truncatePriorEntry, validateLocalFolderForShare, writeEditorMcpConfig, writeProjectAiIntegrations, writeUserMcpConfigs };
262
+ export { ALL_EDITOR_IDS, EDITOR_LABELS, EDITOR_TARGETS, type EditorId, type EditorMcpResult, type EditorMcpTarget, type ExcludeWriteResult, type ExpectedShareRepo, type GhDetectResult, type IntegrationWriteOutcome, LAUNCH_CONFIG_NAME, type LaunchJsonResult, type LoadConfigResult, type McpConfigMigrateEvent, type McpConfigMigrateScope, type McpEntryClassification, type McpInstallOptions, type ParsedGitHubBlobUrl, type PreviewResult, type ProjectAiIntegrationsResult, type ResolveProjectRootOptions, type ResolveProjectRootResult, type ShareFolderValidationResult, type SharingMode, type TokenStore, type TrackedRefusal, type UserMcpConfigsOptions, addOkPathsToGitExclude, buildManagedServerEntry, buildMcpConfigMigrateEvent, classifyExistingMcpEntry, createTokenStore, detectGh, detectInstalledEditors, formatTrackedRemediation, getExcludedOkPaths, getOkArtifactPaths, isEntryUpToDate, loadConfig, makeLazyProbeTokenStore, parseGitHubBlobUrl, parseGitUrl, previewContent, probeTrackedOkPaths, readExistingMcpEntry, readSharingMode, removeOkPathsFromGitExclude, resolveProjectRoot, scaffoldLaunchJson, truncatePriorEntry, validateLocalFolderForShare, writeEditorMcpConfig, writeProjectAiIntegrations, writeUserMcpConfigs };
237
263
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{i as e,r as t,t as n}from"./gh-detect-D3_evne3.mjs";import{_ as r,d as i,f as a,g as o,h as s,i as c,m as l,r as u,s as d,t as f,u as p,v as m,y as h}from"./init-BpZoh-IB.mjs";import{i as g,n as _,r as v,t as y}from"./src-CNn_hgDt.mjs";import{n as b}from"./loader-4PWBhAQr.mjs";import{n as x}from"./preview-Bhv-E1fS.mjs";import{n as S,t as C}from"./mcp-migrate-event-BF8ILHwp.mjs";export{l as ALL_EDITOR_IDS,s as EDITOR_LABELS,o as EDITOR_TARGETS,f as LAUNCH_CONFIG_NAME,r as buildManagedServerEntry,C as buildMcpConfigMigrateEvent,u as classifyExistingMcpEntry,t as createTokenStore,n as detectGh,c as detectInstalledEditors,m as isEntryUpToDate,b as loadConfig,e as makeLazyProbeTokenStore,v as parseGitHubBlobUrl,g as parseGitUrl,x as previewContent,d as readExistingMcpEntry,h as resolveProjectRoot,p as scaffoldLaunchJson,S as truncatePriorEntry,_ as validateLocalFolderForShare,i as writeEditorMcpConfig,y as writeProjectAiIntegrations,a as writeUserMcpConfigs};
1
+ import{i as e,r as t,t as n}from"./gh-detect-D3_evne3.mjs";import{C as r,D as i,E as a,O as o,S as s,T as c,_ as l,a as u,b as d,h as f,i as p,k as m,l as h,m as g,p as _,t as v,v as y,w as b,x,y as S}from"./init-C4yicZJj.mjs";import{i as C,n as w,r as T,t as E}from"./src-D2EdRsfI.mjs";import{n as D}from"./loader-BzTd4HIW.mjs";import{n as O}from"./preview-24NAxCj4.mjs";import{n as k,t as A}from"./mcp-migrate-event-BF8ILHwp.mjs";export{c as ALL_EDITOR_IDS,a as EDITOR_LABELS,i as EDITOR_TARGETS,v as LAUNCH_CONFIG_NAME,y as addOkPathsToGitExclude,o as buildManagedServerEntry,A as buildMcpConfigMigrateEvent,p as classifyExistingMcpEntry,t as createTokenStore,n as detectGh,u as detectInstalledEditors,S as formatTrackedRemediation,d as getExcludedOkPaths,x as getOkArtifactPaths,m as isEntryUpToDate,D as loadConfig,e as makeLazyProbeTokenStore,T as parseGitHubBlobUrl,C as parseGitUrl,O as previewContent,s as probeTrackedOkPaths,h as readExistingMcpEntry,r as readSharingMode,b as removeOkPathsFromGitExclude,l as resolveProjectRoot,_ as scaffoldLaunchJson,k as truncatePriorEntry,w as validateLocalFolderForShare,g as writeEditorMcpConfig,E as writeProjectAiIntegrations,f as writeUserMcpConfigs};