@inkeep/open-knowledge 0.42.0-beta.16 → 0.42.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 (289) hide show
  1. package/dist/{acp-harness-probe-CuWpq8nc.mjs → acp-harness-probe-YBOSkdVZ.mjs} +2 -2
  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 +7 -7
  5. package/dist/constants-CwItHkkD.mjs +2 -0
  6. package/dist/index.mjs +1 -1
  7. package/dist/{init-BS4baNmF.mjs → init-B6G5TNEZ.mjs} +3 -3
  8. package/dist/init-DeoaaR6X.mjs +1 -0
  9. package/dist/{launch-json-removal-C5PSwQ8e.mjs → launch-json-removal-C8qtJdjf.mjs} +2 -2
  10. package/dist/loader-BfQwhOzJ.mjs +1 -0
  11. package/dist/{loader-CuA5lWOn.mjs → loader-Bv75gnFR.mjs} +2 -2
  12. package/dist/{open-browser-C8LJ8Ayv.mjs → open-browser-Dw5DQEDW.mjs} +2 -2
  13. package/dist/{preview-Bx2KytPR.mjs → preview-BDH87oqy.mjs} +2 -2
  14. package/dist/preview-DBCfB24F.mjs +1 -0
  15. package/dist/public/assets/{ActivityModeContent-BKXjuplq.js → ActivityModeContent-DxhQgqLl.js} +1 -1
  16. package/dist/public/assets/AgentDiffPane-CWJAzlpV.js +2 -0
  17. package/dist/public/assets/{AgentThreadClientBinder-5np3W5L0.js → AgentThreadClientBinder-CBEUWipu.js} +1 -1
  18. package/dist/public/assets/{CodeMirrorPropInput-DVKpEEN-.js → CodeMirrorPropInput-FqVKjLIz.js} +2 -2
  19. package/dist/public/assets/{ConsentDialogBody-CerQg1mw.js → ConsentDialogBody-CiXNBNFL.js} +1 -1
  20. package/dist/public/assets/{DocumentContext-B3zqdyv9.js → DocumentContext-CPPEO2zV.js} +4 -4
  21. package/dist/public/assets/{EditorModeToggle-Dbuv4fgZ.js → EditorModeToggle-DFugNVv7.js} +2 -2
  22. package/dist/public/assets/FeedbackForm-Cl_t_aIp.js +1 -0
  23. package/dist/public/assets/GraphPanel-DWQ2VUCG.js +44 -0
  24. package/dist/public/assets/{LintConfigEditor-DIYSRgqB.js → LintConfigEditor-BKuRdaxF.js} +1 -1
  25. package/dist/public/assets/{ManagedArtifactProperties-dcuLjASq.js → ManagedArtifactProperties-1H2nvJO2.js} +1 -1
  26. package/dist/public/assets/{McpConsentDialogBody-CfIFUDI5.js → McpConsentDialogBody-zDEQw_Tc.js} +1 -1
  27. package/dist/public/assets/MermaidDocEditor-BxVogY39.js +1 -0
  28. package/dist/public/assets/{PropertyPanel-Bq57kyv2.js → PropertyPanel-BQeNXiCG.js} +2 -2
  29. package/dist/public/assets/{RegisteredAgentIcon-8Tcfr3WP.js → RegisteredAgentIcon-C2dU04N7.js} +1 -1
  30. package/dist/public/assets/{ReportBugDialogBody-CTQAP-nG.js → ReportBugDialogBody-OSLek5NV.js} +1 -1
  31. package/dist/public/assets/{SchemaConfigEditor-CbPhK70_.js → SchemaConfigEditor-DUWb-GGB.js} +1 -1
  32. package/dist/public/assets/{SettingsDialogBody-CQeG5IyB.js → SettingsDialogBody-BKrLoMPw.js} +1 -1
  33. package/dist/public/assets/{ShareBranchSwitchDialog-WYAp-XYk.js → ShareBranchSwitchDialog-0LuwM6dk.js} +1 -1
  34. package/dist/public/assets/{ShareReceiveDialog-Bv5-jzGb.js → ShareReceiveDialog-DTxgFGgH.js} +1 -1
  35. package/dist/public/assets/{SkillEditorActions-C26cEUj7.js → SkillEditorActions-DweKKjQa.js} +1 -1
  36. package/dist/public/assets/{SourceEditor-lgRH9o-2.js → SourceEditor-jjZ6IZUj.js} +1 -1
  37. package/dist/public/assets/{TerminalPanel-CT2sMqvd.js → TerminalPanel-CS6a-9QZ.js} +1 -1
  38. package/dist/public/assets/TerminalSessionsHost-BlK2dUNm.js +2 -0
  39. package/dist/public/assets/{TerminalWindowApp-CrcW5uiN.js → TerminalWindowApp-GRlp7_uC.js} +1 -1
  40. package/dist/public/assets/{ThreadView-CI5QzoRT.js → ThreadView-CpTnEsKp.js} +1 -1
  41. package/dist/public/assets/TimelineDiffPane-wIFcV7Jw.js +2 -0
  42. package/dist/public/assets/{abnfDiagram-VRR7QNED-CpaiDrfg.js → abnfDiagram-VRR7QNED-BA0sca5y.js} +1 -1
  43. package/dist/public/assets/{agent-diff-store-B_NhNyJH.js → agent-diff-store-Df55YCP1.js} +1 -1
  44. package/dist/public/assets/{agent-visibility-Bi4X_pbR.js → agent-visibility-_yBPH01Q.js} +1 -1
  45. package/dist/public/assets/{arc-CvzmZpaI.js → arc-DIcYIkPb.js} +1 -1
  46. package/dist/public/assets/architecture-TIHT7OUA-DhKVyAdC.js +1 -0
  47. package/dist/public/assets/{architectureDiagram-ZJ3FMSHR-CUPpKaNe.js → architectureDiagram-ZJ3FMSHR-CyZsfJqr.js} +1 -1
  48. package/dist/public/assets/{auth-state-cache-B6dPEdNE.js → auth-state-cache-BGHcz4Hg.js} +1 -1
  49. package/dist/public/assets/{blockDiagram-677ZJIJ3-BHPvFhpI.js → blockDiagram-677ZJIJ3-BL4J4ddi.js} +1 -1
  50. package/dist/public/assets/{c4Diagram-LMCZKHZV-DJHIa26M.js → c4Diagram-LMCZKHZV-DtpyWL_l.js} +1 -1
  51. package/dist/public/assets/{calendar-Cbj0oPjD.js → calendar-2iQWonjM.js} +1 -1
  52. package/dist/public/assets/channel-D7XYjy4a.js +1 -0
  53. package/dist/public/assets/chunk-2Q5K7J3B-BpVQiBsM.js +1 -0
  54. package/dist/public/assets/{chunk-32BRIVSS-BwgPzOKX.js → chunk-32BRIVSS-J_rdnOiy.js} +1 -1
  55. package/dist/public/assets/{chunk-52WLFC77-BbFy67yI.js → chunk-52WLFC77-BOMCKXNP.js} +1 -1
  56. package/dist/public/assets/{chunk-5FCAYU7R-b-dJCCK-.js → chunk-5FCAYU7R-8Y9BJKC-.js} +1 -1
  57. package/dist/public/assets/{chunk-5HE753X5-BQBFOg3H.js → chunk-5HE753X5-CQEApaqU.js} +1 -1
  58. package/dist/public/assets/{chunk-5JV3BV7I-DjT6jnuJ.js → chunk-5JV3BV7I-Wp4ieThX.js} +1 -1
  59. package/dist/public/assets/{chunk-5TONJI2A-CmHBNIPA.js → chunk-5TONJI2A-Dht2oB5p.js} +1 -1
  60. package/dist/public/assets/{chunk-5VM5RSS4-Do0yPUxJ.js → chunk-5VM5RSS4-BtUIXst7.js} +1 -1
  61. package/dist/public/assets/{chunk-7BUUIJ7U-BNZcf0tz.js → chunk-7BUUIJ7U-B7ItXXvn.js} +1 -1
  62. package/dist/public/assets/{chunk-BIQX33UG-UfugZvJI.js → chunk-BIQX33UG-B4CjyNhu.js} +1 -1
  63. package/dist/public/assets/{chunk-BO2N2NFS-BIBt7Qku.js → chunk-BO2N2NFS-DMgXoikU.js} +3 -3
  64. package/dist/public/assets/{chunk-C7G6YPKG-Do2eDGGY.js → chunk-C7G6YPKG-Bhzd4FsL.js} +1 -1
  65. package/dist/public/assets/{chunk-CQNSW5MT-CnhzhYO8.js → chunk-CQNSW5MT-CVrDoms_.js} +1 -1
  66. package/dist/public/assets/{chunk-CYSBUYHQ--r3UnEvE.js → chunk-CYSBUYHQ-N9puYKAt.js} +1 -1
  67. package/dist/public/assets/{chunk-EMLP6XTP-DrfV6ENZ.js → chunk-EMLP6XTP-ACA6yW7o.js} +1 -1
  68. package/dist/public/assets/{chunk-EX3LRPZG-5ZShCZOk.js → chunk-EX3LRPZG-BIvLDOrf.js} +1 -1
  69. package/dist/public/assets/{chunk-FWX5IMBZ-o2qZZUCd.js → chunk-FWX5IMBZ-1CESfm5O.js} +2 -2
  70. package/dist/public/assets/{chunk-HOUHSVGY-Df48_U0n.js → chunk-HOUHSVGY-DTcG17JD.js} +1 -1
  71. package/dist/public/assets/{chunk-ICXQ74PX-C5pgH7nt.js → chunk-ICXQ74PX-CDyWyZCQ.js} +1 -1
  72. package/dist/public/assets/{chunk-JG7HCLWE-BML1eBLo.js → chunk-JG7HCLWE-gt52jYPR.js} +1 -1
  73. package/dist/public/assets/{chunk-JWPE2WC7-CdhLoJ2N.js → chunk-JWPE2WC7-BIGkO1cG.js} +1 -1
  74. package/dist/public/assets/{chunk-MOJQB5TN-DlER2Egr.js → chunk-MOJQB5TN-dX_Ns_6-.js} +1 -1
  75. package/dist/public/assets/{chunk-MOZMSUNE-DUrRQaqL.js → chunk-MOZMSUNE-DtIvb1II.js} +1 -1
  76. package/dist/public/assets/{chunk-OGEWGWER-CSwz10O0.js → chunk-OGEWGWER-BgCGYbch.js} +1 -1
  77. package/dist/public/assets/{chunk-OSBZ3O6U-81uAnz70.js → chunk-OSBZ3O6U-BjU8eaT1.js} +1 -1
  78. package/dist/public/assets/{chunk-PUDLZKDR-DpE61GzF.js → chunk-PUDLZKDR-BtLyPGmD.js} +1 -1
  79. package/dist/public/assets/{chunk-Q4XR5HBZ-BEUOBfte.js → chunk-Q4XR5HBZ-B32WTAPs.js} +1 -1
  80. package/dist/public/assets/{chunk-QBLGF6JB-BLRJJJog.js → chunk-QBLGF6JB-CprENtRb.js} +1 -1
  81. package/dist/public/assets/{chunk-R7FJI6CG-DrLC9WW_.js → chunk-R7FJI6CG-DCV9Dvbs.js} +1 -1
  82. package/dist/public/assets/{chunk-RYQCIY6F-C2zE8SC6.js → chunk-RYQCIY6F-DAyLri1b.js} +1 -1
  83. package/dist/public/assets/{chunk-U6XO7XAA-CzoIuhZL.js → chunk-U6XO7XAA-DSdpZQB7.js} +1 -1
  84. package/dist/public/assets/{chunk-V7JOEXUC-BQfpu3-5.js → chunk-V7JOEXUC-9lX7N0EN.js} +1 -1
  85. package/dist/public/assets/chunk-VAUOI2AC-buA1NS7h.js +1 -0
  86. package/dist/public/assets/{chunk-VR4S4FIN-QXoKTwNU.js → chunk-VR4S4FIN-CcTJJ1HA.js} +1 -1
  87. package/dist/public/assets/{chunk-WYO6CB5R-DAWl___9.js → chunk-WYO6CB5R-9yPqK9ib.js} +1 -1
  88. package/dist/public/assets/chunk-XXDRQBXY-Dpdm1nrz.js +1 -0
  89. package/dist/public/assets/{chunk-YOTPTUD7-BaSlFT1K.js → chunk-YOTPTUD7-DBti7bK5.js} +1 -1
  90. package/dist/public/assets/{chunk-ZGVPDNZ5-CApzXV8d.js → chunk-ZGVPDNZ5-5ruaVNfo.js} +1 -1
  91. package/dist/public/assets/{chunk-ZIRB5QZD-DcyZ3zVD.js → chunk-ZIRB5QZD-DmY1977n.js} +1 -1
  92. package/dist/public/assets/classDiagram-OUVF2IWQ-BdRcUr99.js +1 -0
  93. package/dist/public/assets/classDiagram-v2-EOCWNBFH-4fffeoHu.js +1 -0
  94. package/dist/public/assets/{cose-bilkent-JH36ORCC-CA17ejsA.js → cose-bilkent-JH36ORCC-D8nyC_t4.js} +1 -1
  95. package/dist/public/assets/cynefin-VYW2F7L2-BlrdxSfe.js +1 -0
  96. package/dist/public/assets/{cynefinDiagram-TSTJHNR4-C1SvaQSj.js → cynefinDiagram-TSTJHNR4-B4B58YEO.js} +1 -1
  97. package/dist/public/assets/{dagre-BePblgKB.js → dagre-DjTdhlGF.js} +1 -1
  98. package/dist/public/assets/{dagre-VKFMJZFB-DEzcQzQ_.js → dagre-VKFMJZFB-DQHmtQOE.js} +1 -1
  99. package/dist/public/assets/{diagram-FQU43EPY-CbY2dMOG.js → diagram-FQU43EPY-B28ABQG6.js} +1 -1
  100. package/dist/public/assets/{diagram-G47NLZAW-DqCIUGeN.js → diagram-G47NLZAW-1MthGQcj.js} +1 -1
  101. package/dist/public/assets/{diagram-NH7WQ7WH-Cw8bUyPJ.js → diagram-NH7WQ7WH-B_Fhjw29.js} +1 -1
  102. package/dist/public/assets/{diagram-OA4YK3LP-U82pbdIM.js → diagram-OA4YK3LP-1B7_yz5p.js} +1 -1
  103. package/dist/public/assets/{diagram-WEI45ONY-Q03Igfxy.js → diagram-WEI45ONY-DzfuKRxf.js} +1 -1
  104. package/dist/public/assets/{dist-BX94flmC.js → dist-CslAqn54.js} +1 -1
  105. package/dist/public/assets/{dist-fh4pGZKU.js → dist-DL8cni8v.js} +1 -1
  106. package/dist/public/assets/{ebnfDiagram-CCIWWBDH-DZowrdm4.js → ebnfDiagram-CCIWWBDH-BjazoYYO.js} +1 -1
  107. package/dist/public/assets/{erDiagram-Q63AITRT-CmoXSu-r.js → erDiagram-Q63AITRT-DvgiLWl5.js} +1 -1
  108. package/dist/public/assets/eventmodeling-45OFAUF4-D8s6Yevv.js +1 -0
  109. package/dist/public/assets/flowDiagram-23GEKE2U-hlKdkNzZ.js +1 -0
  110. package/dist/public/assets/{ganttDiagram-NO4QXBWP-C0xOCx7Q.js → ganttDiagram-NO4QXBWP-CJgOU-j1.js} +1 -1
  111. package/dist/public/assets/gitGraph-TEB2WS4Q-B-5iqxxO.js +1 -0
  112. package/dist/public/assets/{gitGraphDiagram-IHSO6WYX-_EJiD41h.js → gitGraphDiagram-IHSO6WYX-DYP87cJL.js} +1 -1
  113. package/dist/public/assets/{globals-DRxb6Lib.js → globals-BzYms-F0.js} +1 -1
  114. package/dist/public/assets/{graphlib-DnpO72b_.js → graphlib-DYCc0Y9o.js} +1 -1
  115. package/dist/public/assets/{highlighted-body-OFNGDK62-CNSPR2wA.js → highlighted-body-OFNGDK62-C9GzQB8c.js} +1 -1
  116. package/dist/public/assets/index-C9U3jI28.js +2014 -0
  117. package/dist/public/assets/info-DKCQHKI2-CkzkGEPY.js +1 -0
  118. package/dist/public/assets/{infoDiagram-FWYZ7A6U-CS6V0kHh.js → infoDiagram-FWYZ7A6U-CbZOQ254.js} +1 -1
  119. package/dist/public/assets/{ishikawaDiagram-FXEZZL3T-CyR5Ajwf.js → ishikawaDiagram-FXEZZL3T-CUWPHUOP.js} +1 -1
  120. package/dist/public/assets/{journeyDiagram-5HDEW3XC-CDLzkiDv.js → journeyDiagram-5HDEW3XC-RLUp44OU.js} +1 -1
  121. package/dist/public/assets/{kanban-definition-HUTT4EX6-DpgKHF6a.js → kanban-definition-HUTT4EX6-D4TPhDQW.js} +1 -1
  122. package/dist/public/assets/{line-5y1fbUZx.js → line-KTG0S8eM.js} +1 -1
  123. package/dist/public/assets/{linear-Cr_l_wiY.js → linear-D6fTctUn.js} +1 -1
  124. package/dist/public/assets/{map-Y1ICr5kQ.js → map-Rw6uJqFR.js} +1 -1
  125. package/dist/public/assets/{markdownlint-rule-browser-CkglOI9o.js → markdownlint-rule-browser-GuUhoAPS.js} +1 -1
  126. package/dist/public/assets/mermaid-GHXKKRXX-WtDC9WMV.js +1 -0
  127. package/dist/public/assets/{mermaid-parser.core-CqW0l_dJ.js → mermaid-parser.core-CusxBOjy.js} +2 -2
  128. package/dist/public/assets/{mermaid.core-DTAF4MBn.js → mermaid.core-okCkIUps.js} +3 -3
  129. package/dist/public/assets/{mindmap-definition-LN4V7U3C-D_O_QNPK.js → mindmap-definition-LN4V7U3C-D-eGlMvq.js} +1 -1
  130. package/dist/public/assets/{now-DZKi6vJC.js → now-DRL8tqfF.js} +1 -1
  131. package/dist/public/assets/{ordinal-BWNniVDk.js → ordinal-DnmHW-WD.js} +1 -1
  132. package/dist/public/assets/overlay-layers-y-dNUWSd.js +1 -0
  133. package/dist/public/assets/packet-7NZHBO7P-DDIvLOTX.js +1 -0
  134. package/dist/public/assets/{pegDiagram-2B236MQR-CdihzSPE.js → pegDiagram-2B236MQR-Bjnm3xCN.js} +1 -1
  135. package/dist/public/assets/pie-RZYD4A2V-DnssmCEa.js +1 -0
  136. package/dist/public/assets/{pieDiagram-ENE6RG2P-ChFgOvHp.js → pieDiagram-ENE6RG2P-BkLpbnFN.js} +1 -1
  137. package/dist/public/assets/{quadrantDiagram-ABIIQ3AL-BSsBk-PK.js → quadrantDiagram-ABIIQ3AL-eMGNkhp-.js} +1 -1
  138. package/dist/public/assets/radar-I7S5WNFK-0J5y2_MO.js +1 -0
  139. package/dist/public/assets/railroad-3IZDKUUU-BgsONsxl.js +1 -0
  140. package/dist/public/assets/railroad-abnf-AHOZXSZD-BhBo_9j9.js +1 -0
  141. package/dist/public/assets/railroad-ebnf-EBAXGLYW-B5mHA2IL.js +1 -0
  142. package/dist/public/assets/railroad-peg-LSFZ7HO6-BV4uZ4WL.js +1 -0
  143. package/dist/public/assets/{railroadDiagram-RFXS5EU6-CZtrUy7I.js → railroadDiagram-RFXS5EU6-Cs70gdc4.js} +1 -1
  144. package/dist/public/assets/{requirementDiagram-TGXJPOKE-4y0MwGkb.js → requirementDiagram-TGXJPOKE-yQhnovOU.js} +1 -1
  145. package/dist/public/assets/{sankeyDiagram-HTMAVEWB-DU6fqR-t.js → sankeyDiagram-HTMAVEWB-C7R3anws.js} +1 -1
  146. package/dist/public/assets/{selection-context-DgaUInzq.js → selection-context-D4I3POaf.js} +1 -1
  147. package/dist/public/assets/{sequenceDiagram-DBY2YBRQ-BLOHid4z.js → sequenceDiagram-DBY2YBRQ-CEdbVotz.js} +1 -1
  148. package/dist/public/assets/{sizeCapture-X5ZJPWSS-DHfk9Ljg.js → sizeCapture-X5ZJPWSS-DAh96RVo.js} +1 -1
  149. package/dist/public/assets/{skill-actions-DznImRP-.js → skill-actions-COFeHtId.js} +1 -1
  150. package/dist/public/assets/{src-xjlg9C_q.js → src--OxBHrEw.js} +1 -1
  151. package/dist/public/assets/{src-CqqckDJx.js → src-Chz3YRgH.js} +1 -1
  152. package/dist/public/assets/{stateDiagram-2N3HPSRC-BSUZgpoy.js → stateDiagram-2N3HPSRC-q96Dmt4i.js} +1 -1
  153. package/dist/public/assets/stateDiagram-v2-6OUMAXLB-BCNHhMpC.js +1 -0
  154. package/dist/public/assets/{swimlanes-5IMT3BWC-DXdgh-Jw.js → swimlanes-5IMT3BWC--g7Ac5Wk.js} +2 -2
  155. package/dist/public/assets/swimlanesDiagram-G3AALYLV-hRuoLGg3.js +8 -0
  156. package/dist/public/assets/{telemetry-impl-P2IeKAaO.js → telemetry-impl-BkUHQGvT.js} +2 -2
  157. package/dist/public/assets/{telemetry-startup-DEYbhmGw.js → telemetry-startup-BQEK1fXn.js} +1 -1
  158. package/dist/public/assets/{terminal-launch-events-CqeUQf-r.js → terminal-launch-events-Dpx5Pnye.js} +1 -1
  159. package/dist/public/assets/{terminal-telemetry-CMJRqinp.js → terminal-telemetry-BjvWkp0c.js} +1 -1
  160. package/dist/public/assets/{timeline-definition-FHXFAJF6-DgwM8xnq.js → timeline-definition-FHXFAJF6-DqrkK_6w.js} +1 -1
  161. package/dist/public/assets/treeView-QDETBFTQ-N2YNex2I.js +1 -0
  162. package/dist/public/assets/treemap-6X3UGDF4-DkzYKeau.js +1 -0
  163. package/dist/public/assets/{typing-burst-detector-_I8YSQ_i.js → typing-burst-detector-DWcm4eaK.js} +1 -1
  164. package/dist/public/assets/{uninstall-B1de0Ylj.js → uninstall-G6kQkM5k.js} +1 -1
  165. package/dist/public/assets/{use-activity-panel-K7snTw6W.js → use-activity-panel-U65INr5Y.js} +1 -1
  166. package/dist/public/assets/{use-settings-route-B1su6zxs.js → use-settings-route-DWn1XG7h.js} +1 -1
  167. package/dist/public/assets/{use-terminal-enabled-ByO3fA-w.js → use-terminal-enabled-C94hof40.js} +1 -1
  168. package/dist/public/assets/{use-timeline-entry-diff-hIl1gqDw.js → use-timeline-entry-diff-D8qH53j6.js} +1 -1
  169. package/dist/public/assets/{vennDiagram-L72KCM5P-Ds0NnN2m.js → vennDiagram-L72KCM5P-DFSXk11G.js} +1 -1
  170. package/dist/public/assets/wardley-OPB4EBWU-OOiOMSoP.js +1 -0
  171. package/dist/public/assets/{wardleyDiagram-EHGQE667-CyCq4K63.js → wardleyDiagram-EHGQE667-Bw65HviB.js} +1 -1
  172. package/dist/public/assets/{xychartDiagram-FW5EYKEG-DKLKXonj.js → xychartDiagram-FW5EYKEG-CEVfZ0d5.js} +1 -1
  173. package/dist/public/index.html +40 -39
  174. package/dist/public/uninstall.html +3 -3
  175. package/dist/{repair-launch-json-DYlb3Z6M.mjs → repair-launch-json-CJjdBoDw.mjs} +2 -2
  176. package/dist/{repair-mcp-configs-I36BFTV3.mjs → repair-mcp-configs-BkAeh6sA.mjs} +2 -2
  177. package/dist/{repair-skills-BHTfIODR.mjs → repair-skills-BQ6XUgog.mjs} +2 -2
  178. package/dist/repair-skills-Cfw1f-SB.mjs +1 -0
  179. package/dist/{src-B2TsqsDz.mjs → src-3A0TPO6b.mjs} +1 -1
  180. package/dist/{src-Du7SIOP-.mjs → src-BCD8rTYl.mjs} +3 -3
  181. package/dist/{src-C2G7uAkJ.mjs → src-DAESo1YE.mjs} +2 -2
  182. package/dist/start-Dc_64hl7.mjs +1 -0
  183. package/dist/{start-BzlVJs-M.mjs → start-MaNLreSP.mjs} +2 -2
  184. package/dist/{write-project-skill-fJOezUXa.mjs → write-project-skill-Dkx-twoj.mjs} +2 -2
  185. package/package.json +4 -4
  186. package/dist/constants-D0VN0nav.mjs +0 -2
  187. package/dist/init-qiwBYGAP.mjs +0 -1
  188. package/dist/loader-BJslDY2L.mjs +0 -1
  189. package/dist/preview-Cf_W1C8G.mjs +0 -1
  190. package/dist/public/assets/AgentDiffPane-BIAIS9ip.js +0 -2
  191. package/dist/public/assets/FeedbackForm-BrtCnGwq.js +0 -1
  192. package/dist/public/assets/GraphPanel-jWpeDa-y.js +0 -44
  193. package/dist/public/assets/MermaidDocEditor-Jrj5MoaB.js +0 -1
  194. package/dist/public/assets/TerminalSessionsHost-BSs639Bj.js +0 -2
  195. package/dist/public/assets/TimelineDiffPane-CRSa4hIk.js +0 -2
  196. package/dist/public/assets/architecture-TIHT7OUA-DJqhUxi8.js +0 -1
  197. package/dist/public/assets/channel-DJju_46x.js +0 -1
  198. package/dist/public/assets/chunk-2Q5K7J3B-BThJ0ACJ.js +0 -1
  199. package/dist/public/assets/chunk-VAUOI2AC-BeKYmt6g.js +0 -1
  200. package/dist/public/assets/chunk-XXDRQBXY-BVenPdkF.js +0 -1
  201. package/dist/public/assets/classDiagram-OUVF2IWQ-C-jB8GCV.js +0 -1
  202. package/dist/public/assets/classDiagram-v2-EOCWNBFH-YdtbtmeU.js +0 -1
  203. package/dist/public/assets/cynefin-VYW2F7L2-D2sHOfu_.js +0 -1
  204. package/dist/public/assets/eventmodeling-45OFAUF4-LqLB3TNh.js +0 -1
  205. package/dist/public/assets/flowDiagram-23GEKE2U-4rTcseMm.js +0 -1
  206. package/dist/public/assets/gitGraph-TEB2WS4Q-BEPuDtJ5.js +0 -1
  207. package/dist/public/assets/index-eQ_wk3s1.js +0 -2014
  208. package/dist/public/assets/info-DKCQHKI2-CMS65hg4.js +0 -1
  209. package/dist/public/assets/mermaid-GHXKKRXX-cKMuWw6m.js +0 -1
  210. package/dist/public/assets/packet-7NZHBO7P-BHMeVRDP.js +0 -1
  211. package/dist/public/assets/pie-RZYD4A2V-04-GDYum.js +0 -1
  212. package/dist/public/assets/radar-I7S5WNFK-CFV8GxSd.js +0 -1
  213. package/dist/public/assets/railroad-3IZDKUUU-HocUJIPa.js +0 -1
  214. package/dist/public/assets/railroad-abnf-AHOZXSZD-BjtQnDLf.js +0 -1
  215. package/dist/public/assets/railroad-ebnf-EBAXGLYW-CB0AKoda.js +0 -1
  216. package/dist/public/assets/railroad-peg-LSFZ7HO6-D14HGrNX.js +0 -1
  217. package/dist/public/assets/stateDiagram-v2-6OUMAXLB-BTi0JfLJ.js +0 -1
  218. package/dist/public/assets/swimlanesDiagram-G3AALYLV-v3ze-Bpb.js +0 -8
  219. package/dist/public/assets/treeView-QDETBFTQ-P-cJWDuJ.js +0 -1
  220. package/dist/public/assets/treemap-6X3UGDF4-DHfkEEZV.js +0 -1
  221. package/dist/public/assets/wardley-OPB4EBWU-CYMtNsgm.js +0 -1
  222. package/dist/repair-skills-DBcVrEEv.mjs +0 -1
  223. package/dist/start-Jc31y2YW.mjs +0 -1
  224. /package/dist/public/assets/{ActivityPanelDiffView-BGKBr_no.js → ActivityPanelDiffView-B03Wzvap.js} +0 -0
  225. /package/dist/public/assets/{AppMenubar-BU0HYo5c.js → AppMenubar-Bisp0k8X.js} +0 -0
  226. /package/dist/public/assets/{BugReportHistoryDialog-BZO4T3mM.js → BugReportHistoryDialog-Bp4PHyEI.js} +0 -0
  227. /package/dist/public/assets/{ShareReceiveMissDialog-C_hR4_tW.js → ShareReceiveMissDialog-CkTp1O_S.js} +0 -0
  228. /package/dist/public/assets/{__vite-browser-external-BPhyXp2q.js → __vite-browser-external-BckCY-VI.js} +0 -0
  229. /package/dist/public/assets/{agent-presence-BDFQXhQj.js → agent-presence-CEfNcJUY.js} +0 -0
  230. /package/dist/public/assets/{array-DJgG7CD3.js → array-D9gZmznT.js} +0 -0
  231. /package/dist/public/assets/{chunk-KEIR6QF5-C3U0QMR_.js → chunk-KEIR6QF5-zkgbDrf9.js} +0 -0
  232. /package/dist/public/assets/{chunk-Y2CYZVJY-WLanMySb.js → chunk-Y2CYZVJY-BAUBUeAF.js} +0 -0
  233. /package/dist/public/assets/{clike-CsX0C1YS.js → clike-ccBqxK3t.js} +0 -0
  234. /package/dist/public/assets/{clipboard-adapter-B_gXWRIi.js → clipboard-adapter-Cxzkvc1d.js} +0 -0
  235. /package/dist/public/assets/{colors-CWhKCDlb.js → colors-BZ7r12jC.js} +0 -0
  236. /package/dist/public/assets/{copilot-BAzfPGty.js → copilot-CjOGWDvv.js} +0 -0
  237. /package/dist/public/assets/{cursor-C1n4GZG0.js → cursor-B8rehP9c.js} +0 -0
  238. /package/dist/public/assets/{cytoscape.esm-2keAwKuv.js → cytoscape.esm-GtliGICm.js} +0 -0
  239. /package/dist/public/assets/{defaultLocale-CsPu2dQr.js → defaultLocale-CqKPYlUZ.js} +0 -0
  240. /package/dist/public/assets/{diff-CbyZ1KYU.js → diff-oW0nWZgn.js} +0 -0
  241. /package/dist/public/assets/{dist-Ct4bmKYA.js → dist-B1Jbz0yl.js} +0 -0
  242. /package/dist/public/assets/{dist-C6PM6Xz4.js → dist-ChSSPf9y.js} +0 -0
  243. /package/dist/public/assets/{dist-6exA4p3e.js → dist-Cqbn6bM9.js} +0 -0
  244. /package/dist/public/assets/{dist-O02mGI7S.js → dist-D1zECWv_.js} +0 -0
  245. /package/dist/public/assets/{dist-CmkBz4Vc.js → dist-zCmaEyrL.js} +0 -0
  246. /package/dist/public/assets/{file-tree-adapter-CADG8e7M.js → file-tree-adapter-DvSpt-UT.js} +0 -0
  247. /package/dist/public/assets/{follow-file-zwaRiP64.js → follow-file-BghdVu5J.js} +0 -0
  248. /package/dist/public/assets/{form-fGxW7-bd.js → form-coxG-8Qw.js} +0 -0
  249. /package/dist/public/assets/{format-CrtQIa7U.js → format-CejNFduS.js} +0 -0
  250. /package/dist/public/assets/{go-Cx3BNpJ0.js → go-CCS4kWKN.js} +0 -0
  251. /package/dist/public/assets/{init-tdyl3bNV.js → init-CMTNTj66.js} +0 -0
  252. /package/dist/public/assets/{isObject-CX6hKsbi.js → isObject-Ho9jn-6g.js} +0 -0
  253. /package/dist/public/assets/{libesm-JNr6wvfe.js → libesm-Db-3Gx3Z.js} +0 -0
  254. /package/dist/public/assets/{lint-config-client-CdSglhT_.js → lint-config-client-t01h9tVd.js} +0 -0
  255. /package/dist/public/assets/{lint-plugin-meta-B3N1DKgL.js → lint-plugin-meta-J-wb-uxW.js} +0 -0
  256. /package/dist/public/assets/{lru-string-cache-BqWv9U_z.js → lru-string-cache-BZxOuxTi.js} +0 -0
  257. /package/dist/public/assets/{lua-u3LXwKmZ.js → lua-DgAwqJ0D.js} +0 -0
  258. /package/dist/public/assets/{mcp-consent-store-D31n_rvi.js → mcp-consent-store-wvrClpLC.js} +0 -0
  259. /package/dist/public/assets/{min-K63jgMN_.js → min-BQPeeNfF.js} +0 -0
  260. /package/dist/public/assets/{panel-Cyobla0Z.js → panel-C8ZhM4q-.js} +0 -0
  261. /package/dist/public/assets/{panzoom.es-CLhX4RTP.js → panzoom.es-CxTS7ZPP.js} +0 -0
  262. /package/dist/public/assets/{path-D0DHVP2m.js → path-DoEWlp6O.js} +0 -0
  263. /package/dist/public/assets/{pdf-D1xNRDom.js → pdf-Da_O_GF5.js} +0 -0
  264. /package/dist/public/assets/{pdf.worker-BoI-M0vk.js → pdf.worker-Pbs_-93C.js} +0 -0
  265. /package/dist/public/assets/{perl-Ds8HeZsB.js → perl-DMwerdcj.js} +0 -0
  266. /package/dist/public/assets/{properties-CZlNTT94.js → properties-Du1Kuwqc.js} +0 -0
  267. /package/dist/public/assets/{r-fvx4gKsV.js → r-wSvpRg5h.js} +0 -0
  268. /package/dist/public/assets/{receive-store-DkS0KjJJ.js → receive-store-BAdSSiiM.js} +0 -0
  269. /package/dist/public/assets/{rough.esm-BNRxiiMT.js → rough.esm-esi5HKC4.js} +0 -0
  270. /package/dist/public/assets/{ruby-BGw-M-J7.js → ruby-DuM6hMQW.js} +0 -0
  271. /package/dist/public/assets/{schema-fields-view-intent-BxfUZqrI.js → schema-fields-view-intent-BeD8vY0v.js} +0 -0
  272. /package/dist/public/assets/{share-metadata-rows-CheY4PXF.js → share-metadata-rows-CbXHISQ4.js} +0 -0
  273. /package/dist/public/assets/{shell-DTMPEhEr.js → shell-BZ7mgeL0.js} +0 -0
  274. /package/dist/public/assets/{skeleton-HLkcMp95.js → skeleton-BG12Hmzn.js} +0 -0
  275. /package/dist/public/assets/{skills-api-Bc3GrYqa.js → skills-api-BYKJgjIc.js} +0 -0
  276. /package/dist/public/assets/{sortable.esm-DGuuqLb9.js → sortable.esm-C565D25d.js} +0 -0
  277. /package/dist/public/assets/{sql-DoPu5kfc.js → sql-BXdRuz6d.js} +0 -0
  278. /package/dist/public/assets/{src-Bipm8mTe.js → src-DNE52RZP.js} +0 -0
  279. /package/dist/public/assets/{swift-CfZoxKRA.js → swift-DZwxTp-L.js} +0 -0
  280. /package/dist/public/assets/{tag-pill-input-CG2GU8r0.js → tag-pill-input-D5ksIrs3.js} +0 -0
  281. /package/dist/public/assets/{target-navigation-intent-DZuwV856.js → target-navigation-intent-CfMsl7_M.js} +0 -0
  282. /package/dist/public/assets/{textarea-DII_Czak.js → textarea-tdCJViKf.js} +0 -0
  283. /package/dist/public/assets/{thread-client-59Ryh_VO.js → thread-client-C0O75Kza.js} +0 -0
  284. /package/dist/public/assets/{thread-draft-staging-YcpEkMiY.js → thread-draft-staging-BuvCYJwg.js} +0 -0
  285. /package/dist/public/assets/{toml-Br73Jx61.js → toml-C5KR4pi6.js} +0 -0
  286. /package/dist/public/assets/{use-installed-clis-B_nDAq7A.js → use-installed-clis-UlK7P1aH.js} +0 -0
  287. /package/dist/public/assets/{use-live-xterm-theme-C_sUu1cV.js → use-live-xterm-theme-HgpP9_Al.js} +0 -0
  288. /package/dist/public/assets/{use-workspace-B_MMlm8_.js → use-workspace-C7cHCmWZ.js} +0 -0
  289. /package/dist/public/assets/{useLintConfigViewMode-MQmCIk3b.js → useLintConfigViewMode-DKPENttR.js} +0 -0
@@ -6,9 +6,9 @@ import{i as e,o as t,t as n}from"./chunk-DTipWd-i.mjs";import{$ as r,$a as i,$i
6
6
  `;n.right=new Ax(Jv(o,oy(a.store,o)),n.left,n.left&&n.left.lastId,n.right,n.right&&n.right.id,t,null,new hx(i)),n.right.integrate(e,0),n.forward()}Db(e,t,n,s)},Nb=(e,t,n,r,i)=>{let a=t,o=jh();for(;a&&(!a.countable||a.deleted);){if(!a.deleted&&a.content.constructor===cx){let e=a.content;o.set(e.key,e)}a=a.right}let s=0,c=!1;for(;t!==a;){if(n===t&&(c=!0),!t.deleted){let n=t.content;switch(n.constructor){case cx:{let{key:a,value:l}=n,u=r.get(a)??null;(o.get(a)!==n||u===l)&&(t.delete(e),s++,!c&&(i.get(a)??null)===l&&u!==l&&(u===null?i.delete(a):i.set(a,u))),!c&&!t.deleted&&Ob(i,n);break}}}t=t.right}return s},Pb=(e,t)=>{for(;t&&t.right&&(t.right.deleted||!t.right.countable);)t=t.right;let n=new Set;for(;t&&(t.deleted||!t.countable);){if(!t.deleted&&t.content.constructor===cx){let r=t.content.key;n.has(r)?t.delete(e):n.add(r)}t=t.left}},Fb=e=>{let t=0;return Sy(e.doc,n=>{let r=e._start,i=e._start,a=jh(),o=Mh(a);for(;i;){if(i.deleted===!1)switch(i.content.constructor){case cx:Ob(o,i.content);break;default:t+=Nb(n,r,i,a,o),a=Mh(o),r=i;break}i=i.right}}),t},Ib=e=>{let t=new Set,n=e.doc;for(let[r,i]of e.afterState.entries()){let a=e.beforeState.get(r)||0;i!==a&&my(e,n.store.clients.get(r),a,i,e=>{!e.deleted&&e.content.constructor===cx&&e.constructor!==Qb&&t.add(e.parent)})}Sy(n,n=>{nv(e,e.deleteSet,e=>{if(e instanceof Qb||!e.parent._hasFormatting||t.has(e.parent))return;let r=e.parent;e.content.constructor===cx?t.add(r):Pb(n,e)});for(let e of t)Fb(e)})},Lb=(e,t,n)=>{let r=n,i=Mh(t.currentAttributes),a=t.right;for(;n>0&&t.right!==null;){if(t.right.deleted===!1)switch(t.right.content.constructor){case Tx:case ox:case hx:n<t.right.length&&dy(e,Jv(t.right.id.client,t.right.id.clock+n)),n-=t.right.length,t.right.delete(e);break}t.forward()}a&&Nb(e,a,t.right,i,t.currentAttributes);let o=(t.left||t.right).parent;return o._searchMarker&&Yy(o._searchMarker,t.index,-r+n),t};var Rb=class extends By{constructor(e,t,n){super(e,t),this.childListChanged=!1,this.keysChanged=new Set,n.forEach(e=>{e===null?this.childListChanged=!0:this.keysChanged.add(e)})}get changes(){if(this._changes===null){let e={keys:this.keys,delta:this.delta,added:new Set,deleted:new Set};this._changes=e}return this._changes}get delta(){if(this._delta===null){let e=this.target.doc,t=[];Sy(e,e=>{let n=new Map,r=new Map,i=this.target._start,a=null,o={},s=``,c=0,l=0,u=()=>{if(a!==null){let e=null;switch(a){case`delete`:l>0&&(e={delete:l}),l=0;break;case`insert`:(typeof s==`object`||s.length>0)&&(e={insert:s},n.size>0&&(e.attributes={},n.forEach((t,n)=>{t!==null&&(e.attributes[n]=t)}))),s=``;break;case`retain`:c>0&&(e={retain:c},m_(o)||(e.attributes=u_({},o))),c=0;break}e&&t.push(e),a=null}};for(;i!==null;){switch(i.content.constructor){case Tx:case ox:this.adds(i)?this.deletes(i)||(u(),a=`insert`,s=i.content.getContent()[0],u()):this.deletes(i)?(a!==`delete`&&(u(),a=`delete`),l+=1):i.deleted||(a!==`retain`&&(u(),a=`retain`),c+=1);break;case hx:this.adds(i)?this.deletes(i)||(a!==`insert`&&(u(),a=`insert`),s+=i.content.str):this.deletes(i)?(a!==`delete`&&(u(),a=`delete`),l+=i.length):i.deleted||(a!==`retain`&&(u(),a=`retain`),c+=i.length);break;case cx:{let{key:t,value:s}=i.content;if(this.adds(i))this.deletes(i)||(Cb(n.get(t)??null,s)?s!==null&&i.delete(e):(a===`retain`&&u(),Cb(s,r.get(t)??null)?delete o[t]:o[t]=s));else if(this.deletes(i)){r.set(t,s);let e=n.get(t)??null;Cb(e,s)||(a===`retain`&&u(),o[t]=e)}else if(!i.deleted){r.set(t,s);let n=o[t];n!==void 0&&(Cb(n,s)?n!==null&&i.delete(e):(a===`retain`&&u(),s===null?delete o[t]:o[t]=s))}i.deleted||(a===`insert`&&u(),Ob(n,i.content));break}}i=i.right}for(u();t.length>0;){let e=t[t.length-1];if(e.retain!==void 0&&e.attributes===void 0)t.pop();else break}}),this._delta=t}return this._delta}},zb=class e extends Zy{constructor(e){super(),this._pending=e===void 0?[]:[()=>this.insert(0,e)],this._searchMarker=[],this._hasFormatting=!1}get length(){return this.doc??Hy(),this._length}_integrate(e,t){super._integrate(e,t);try{this._pending.forEach(e=>e())}catch(e){console.error(e)}this._pending=null}_copy(){return new e}clone(){let t=new e;return t.applyDelta(this.toDelta()),t}_callObserver(e,t){super._callObserver(e,t);let n=new Rb(this,e,t);Xy(this,e,n),!e.local&&this._hasFormatting&&(e._needFormattingCleanup=!0)}toString(){this.doc??Hy();let e=``,t=this._start;for(;t!==null;)!t.deleted&&t.countable&&t.content.constructor===hx&&(e+=t.content.str),t=t.right;return e}toJSON(){return this.toString()}applyDelta(e,{sanitize:t=!0}={}){this.doc===null?this._pending.push(()=>this.applyDelta(e)):Sy(this.doc,n=>{let r=new wb(null,this._start,0,new Map);for(let i=0;i<e.length;i++){let a=e[i];if(a.insert!==void 0){let o=!t&&typeof a.insert==`string`&&i===e.length-1&&r.right===null&&a.insert.slice(-1)===`
7
7
  `?a.insert.slice(0,-1):a.insert;(typeof o!=`string`||o.length>0)&&jb(n,this,r,o,a.attributes||{})}else a.retain===void 0?a.delete!==void 0&&Lb(n,r,a.delete):Mb(n,this,r,a.retain,a.attributes||{})}})}toDelta(e,t,n){this.doc??Hy();let r=[],i=new Map,a=this.doc,o=``,s=this._start;function c(){if(o.length>0){let e={},t=!1;i.forEach((n,r)=>{t=!0,e[r]=n});let n={insert:o};t&&(n.attributes=e),r.push(n),o=``}}let l=()=>{for(;s!==null;){if(ey(s,e)||t!==void 0&&ey(s,t))switch(s.content.constructor){case hx:{let r=i.get(`ychange`);e!==void 0&&!ey(s,e)?(r===void 0||r.user!==s.id.client||r.type!==`removed`)&&(c(),i.set(`ychange`,n?n(`removed`,s.id):{type:`removed`})):t!==void 0&&!ey(s,t)?(r===void 0||r.user!==s.id.client||r.type!==`added`)&&(c(),i.set(`ychange`,n?n(`added`,s.id):{type:`added`})):r!==void 0&&(c(),i.delete(`ychange`)),o+=s.content.str;break}case Tx:case ox:{c();let e={insert:s.content.getContent()[0]};if(i.size>0){let t={};e.attributes=t,i.forEach((e,n)=>{t[n]=e})}r.push(e);break}case cx:ey(s,e)&&(c(),Ob(i,s.content));break}s=s.right}c()};return e||t?Sy(a,n=>{e&&ty(n,e),t&&ty(n,t),l()},`cleanup`):l(),r}insert(e,t,n){if(t.length<=0)return;let r=this.doc;r===null?this._pending.push(()=>this.insert(e,t,n)):Sy(r,r=>{let i=Eb(r,this,e,!n);n||(n={},i.currentAttributes.forEach((e,t)=>{n[t]=e})),jb(r,this,i,t,n)})}insertEmbed(e,t,n){let r=this.doc;r===null?this._pending.push(()=>this.insertEmbed(e,t,n||{})):Sy(r,r=>{let i=Eb(r,this,e,!n);jb(r,this,i,t,n||{})})}delete(e,t){if(t===0)return;let n=this.doc;n===null?this._pending.push(()=>this.delete(e,t)):Sy(n,n=>{Lb(n,Eb(n,this,e,!0),t)})}format(e,t,n){if(t===0)return;let r=this.doc;r===null?this._pending.push(()=>this.format(e,t,n)):Sy(r,r=>{let i=Eb(r,this,e,!1);i.right!==null&&Mb(r,this,i,t,n)})}removeAttribute(e){this.doc===null?this._pending.push(()=>this.removeAttribute(e)):Sy(this.doc,t=>{ub(t,this,e)})}setAttribute(e,t){this.doc===null?this._pending.push(()=>this.setAttribute(e,t)):Sy(this.doc,n=>{db(n,this,e,t)})}getAttribute(e){return fb(this,e)}getAttributes(){return pb(this)}_write(e){e.writeTypeRef(bx)}};const Bb=e=>new zb;var Vb=class{constructor(e,t=()=>!0){this._filter=t,this._root=e,this._currentNode=e._start,this._firstCall=!0,e.doc??Hy()}[Symbol.iterator](){return this}next(){let e=this._currentNode,t=e&&e.content&&e.content.type;if(e!==null&&(!this._firstCall||e.deleted||!this._filter(t)))do if(t=e.content.type,!e.deleted&&(t.constructor===Wb||t.constructor===Hb)&&t._start!==null)e=t._start;else for(;e!==null;){let t=e.next;if(t!==null){e=t;break}else e=e.parent===this._root?null:e.parent._item}while(e!==null&&(e.deleted||!this._filter(e.content.type)));return this._firstCall=!1,e===null?{value:void 0,done:!0}:(this._currentNode=e,{value:e.content.type,done:!1})}},Hb=class e extends Zy{constructor(){super(),this._prelimContent=[]}get firstChild(){let e=this._first;return e?e.content.getContent()[0]:null}_integrate(e,t){super._integrate(e,t),this.insert(0,this._prelimContent),this._prelimContent=null}_copy(){return new e}clone(){let t=new e;return t.insert(0,this.toArray().map(e=>e instanceof Zy?e.clone():e)),t}get length(){return this.doc??Hy(),this._prelimContent===null?this._length:this._prelimContent.length}createTreeWalker(e){return new Vb(this,e)}querySelector(e){e=e.toUpperCase();let t=new Vb(this,t=>t.nodeName&&t.nodeName.toUpperCase()===e).next();return t.done?null:t.value}querySelectorAll(e){return e=e.toUpperCase(),Rh(new Vb(this,t=>t.nodeName&&t.nodeName.toUpperCase()===e))}_callObserver(e,t){Xy(this,e,new Kb(this,t,e))}toString(){return nb(this,e=>e.toString()).join(``)}toJSON(){return this.toString()}toDOM(e=document,t={},n){let r=e.createDocumentFragment();return n!==void 0&&n._createAssociation(r,this),tb(this,i=>{r.insertBefore(i.toDOM(e,t,n),null)}),r}insert(e,t){this.doc===null?this._prelimContent.splice(e,0,...t):Sy(this.doc,n=>{sb(n,this,e,t)})}insertAfter(e,t){if(this.doc!==null)Sy(this.doc,n=>{let r=e&&e instanceof Zy?e._item:e;ab(n,this,r,t)});else{let n=this._prelimContent,r=e===null?0:n.findIndex(t=>t===e)+1;if(r===0&&e!==null)throw Ng(`Reference item not found`);n.splice(r,0,...t)}}delete(e,t=1){this.doc===null?this._prelimContent.splice(e,t):Sy(this.doc,n=>{lb(n,this,e,t)})}toArray(){return $y(this)}push(e){this.insert(this.length,e)}unshift(e){this.insert(0,e)}get(e){return ib(this,e)}slice(e=0,t=this.length){return Qy(this,e,t)}forEach(e){tb(this,e)}_write(e){e.writeTypeRef(Sx)}};const Ub=e=>new Hb;var Wb=class e extends Hb{constructor(e=`UNDEFINED`){super(),this.nodeName=e,this._prelimAttrs=new Map}get nextSibling(){let e=this._item?this._item.next:null;return e?e.content.type:null}get prevSibling(){let e=this._item?this._item.prev:null;return e?e.content.type:null}_integrate(e,t){super._integrate(e,t),this._prelimAttrs.forEach((e,t)=>{this.setAttribute(t,e)}),this._prelimAttrs=null}_copy(){return new e(this.nodeName)}clone(){let t=new e(this.nodeName);return f_(this.getAttributes(),(e,n)=>{t.setAttribute(n,e)}),t.insert(0,this.toArray().map(e=>e instanceof Zy?e.clone():e)),t}toString(){let e=this.getAttributes(),t=[],n=[];for(let t in e)n.push(t);n.sort();let r=n.length;for(let i=0;i<r;i++){let r=n[i];t.push(r+`="`+e[r]+`"`)}let i=this.nodeName.toLocaleLowerCase();return`<${i}${t.length>0?` `+t.join(` `):``}>${super.toString()}</${i}>`}removeAttribute(e){this.doc===null?this._prelimAttrs.delete(e):Sy(this.doc,t=>{ub(t,this,e)})}setAttribute(e,t){this.doc===null?this._prelimAttrs.set(e,t):Sy(this.doc,n=>{db(n,this,e,t)})}getAttribute(e){return fb(this,e)}hasAttribute(e){return mb(this,e)}getAttributes(e){return e?hb(this,e):pb(this)}toDOM(e=document,t={},n){let r=e.createElement(this.nodeName),i=this.getAttributes();for(let e in i){let t=i[e];typeof t==`string`&&r.setAttribute(e,t)}return tb(this,i=>{r.appendChild(i.toDOM(e,t,n))}),n!==void 0&&n._createAssociation(r,this),r}_write(e){e.writeTypeRef(xx),e.writeKey(this.nodeName)}};const Gb=e=>new Wb(e.readKey());var Kb=class extends By{constructor(e,t,n){super(e,n),this.childListChanged=!1,this.attributesChanged=new Set,t.forEach(e=>{e===null?this.childListChanged=!0:this.attributesChanged.add(e)})}},qb=class e extends xb{constructor(e){super(),this.hookName=e}_copy(){return new e(this.hookName)}clone(){let t=new e(this.hookName);return this.forEach((e,n)=>{t.set(n,e)}),t}toDOM(e=document,t={},n){let r=t[this.hookName],i;return i=r===void 0?document.createElement(this.hookName):r.createDom(this),i.setAttribute(`data-yjs-hook`,this.hookName),n!==void 0&&n._createAssociation(i,this),i}_write(e){e.writeTypeRef(Cx),e.writeKey(this.hookName)}};const Jb=e=>new qb(e.readKey());var Yb=class e extends zb{get nextSibling(){let e=this._item?this._item.next:null;return e?e.content.type:null}get prevSibling(){let e=this._item?this._item.prev:null;return e?e.content.type:null}_copy(){return new e}clone(){let t=new e;return t.applyDelta(this.toDelta()),t}toDOM(e=document,t,n){let r=e.createTextNode(this.toString());return n!==void 0&&n._createAssociation(r,this),r}toString(){return this.toDelta().map(e=>{let t=[];for(let n in e.attributes){let r=[];for(let t in e.attributes[n])r.push({key:t,value:e.attributes[n][t]});r.sort((e,t)=>e.key<t.key?-1:1),t.push({nodeName:n,attrs:r})}t.sort((e,t)=>e.nodeName<t.nodeName?-1:1);let n=``;for(let e=0;e<t.length;e++){let r=t[e];n+=`<${r.nodeName}`;for(let e=0;e<r.attrs.length;e++){let t=r.attrs[e];n+=` ${t.key}="${t.value}"`}n+=`>`}n+=e.insert;for(let e=t.length-1;e>=0;e--)n+=`</${t[e].nodeName}>`;return n}).join(``)}toJSON(){return this.toString()}_write(e){e.writeTypeRef(wx)}};const Xb=e=>new Yb;var Zb=class{constructor(e,t){this.id=e,this.length=t}get deleted(){throw Pg()}mergeWith(e){return!1}write(e,t,n){throw Pg()}integrate(e,t){throw Pg()}},Qb=class extends Zb{get deleted(){return!0}delete(){}mergeWith(e){return this.constructor===e.constructor?(this.length+=e.length,!0):!1}integrate(e,t){t>0&&(this.id.clock+=t,this.length-=t),sy(e.doc.store,this)}write(e,t){e.writeInfo(0),e.writeLen(this.length-t)}getMissing(e,t){return null}},$b=class e{constructor(e){this.content=e}getLength(){return 1}getContent(){return[this.content]}isCountable(){return!0}copy(){return new e(this.content)}splice(e){throw Pg()}mergeWith(e){return!1}integrate(e,t){}delete(e){}gc(e){}write(e,t){e.writeBuf(this.content)}getRef(){return 3}};const ex=e=>new $b(e.readBuf());var tx=class e{constructor(e){this.len=e}getLength(){return this.len}getContent(){return[]}isCountable(){return!1}copy(){return new e(this.len)}splice(t){let n=new e(this.len-t);return this.len=t,n}mergeWith(e){return this.len+=e.len,!0}integrate(e,t){sv(e.deleteSet,t.id.client,t.id.clock,this.len),t.markDeleted()}delete(e){}gc(e){}write(e,t){e.writeLen(this.len-t)}getRef(){return 1}};const nx=e=>new tx(e.readLen()),rx=(e,t)=>new hv({guid:e,...t,shouldLoad:t.shouldLoad||t.autoLoad||!1});var ix=class e{constructor(e){e._item&&console.error(`This document was already integrated as a sub-document. You should create a second instance instead with the same guid.`),this.doc=e;let t={};this.opts=t,e.gc||(t.gc=!1),e.autoLoad&&(t.autoLoad=!0),e.meta!==null&&(t.meta=e.meta)}getLength(){return 1}getContent(){return[this.doc]}isCountable(){return!0}copy(){return new e(rx(this.doc.guid,this.opts))}splice(e){throw Pg()}mergeWith(e){return!1}integrate(e,t){this.doc._item=t,e.subdocsAdded.add(this.doc),this.doc.shouldLoad&&e.subdocsLoaded.add(this.doc)}delete(e){e.subdocsAdded.has(this.doc)?e.subdocsAdded.delete(this.doc):e.subdocsRemoved.add(this.doc)}gc(e){}write(e,t){e.writeString(this.doc.guid),e.writeAny(this.opts)}getRef(){return 9}};const ax=e=>new ix(rx(e.readString(),e.readAny()));var ox=class e{constructor(e){this.embed=e}getLength(){return 1}getContent(){return[this.embed]}isCountable(){return!0}copy(){return new e(this.embed)}splice(e){throw Pg()}mergeWith(e){return!1}integrate(e,t){}delete(e){}gc(e){}write(e,t){e.writeJSON(this.embed)}getRef(){return 5}};const sx=e=>new ox(e.readJSON());var cx=class e{constructor(e,t){this.key=e,this.value=t}getLength(){return 1}getContent(){return[]}isCountable(){return!1}copy(){return new e(this.key,this.value)}splice(e){throw Pg()}mergeWith(e){return!1}integrate(e,t){let n=t.parent;n._searchMarker=null,n._hasFormatting=!0}delete(e){}gc(e){}write(e,t){e.writeKey(this.key),e.writeJSON(this.value)}getRef(){return 6}};const lx=e=>new cx(e.readKey(),e.readJSON());var ux=class e{constructor(e){this.arr=e}getLength(){return this.arr.length}getContent(){return this.arr}isCountable(){return!0}copy(){return new e(this.arr)}splice(t){let n=new e(this.arr.slice(t));return this.arr=this.arr.slice(0,t),n}mergeWith(e){return this.arr=this.arr.concat(e.arr),!0}integrate(e,t){}delete(e){}gc(e){}write(e,t){let n=this.arr.length;e.writeLen(n-t);for(let r=t;r<n;r++){let t=this.arr[r];e.writeString(t===void 0?`undefined`:JSON.stringify(t))}}getRef(){return 2}};const dx=e=>{let t=e.readLen(),n=[];for(let r=0;r<t;r++){let t=e.readString();t===`undefined`?n.push(void 0):n.push(JSON.parse(t))}return new ux(n)},fx=k_(`node_env`)===`development`;var px=class e{constructor(e){this.arr=e,fx&&y_(e)}getLength(){return this.arr.length}getContent(){return this.arr}isCountable(){return!0}copy(){return new e(this.arr)}splice(t){let n=new e(this.arr.slice(t));return this.arr=this.arr.slice(0,t),n}mergeWith(e){return this.arr=this.arr.concat(e.arr),!0}integrate(e,t){}delete(e){}gc(e){}write(e,t){let n=this.arr.length;e.writeLen(n-t);for(let r=t;r<n;r++){let t=this.arr[r];e.writeAny(t)}}getRef(){return 8}};const mx=e=>{let t=e.readLen(),n=[];for(let r=0;r<t;r++)n.push(e.readAny());return new px(n)};var hx=class e{constructor(e){this.str=e}getLength(){return this.str.length}getContent(){return this.str.split(``)}isCountable(){return!0}copy(){return new e(this.str)}splice(t){let n=new e(this.str.slice(t));this.str=this.str.slice(0,t);let r=this.str.charCodeAt(t-1);return r>=55296&&r<=56319&&(this.str=this.str.slice(0,t-1)+`�`,n.str=`�`+n.str.slice(1)),n}mergeWith(e){return this.str+=e.str,!0}integrate(e,t){}delete(e){}gc(e){}write(e,t){e.writeString(t===0?this.str:this.str.slice(t))}getRef(){return 4}};const gx=e=>new hx(e.readString()),_x=[yb,Sb,Bb,Gb,Ub,Jb,Xb],vx=0,yx=1,bx=2,xx=3,Sx=4,Cx=5,wx=6;var Tx=class e{constructor(e){this.type=e}getLength(){return 1}getContent(){return[this.type]}isCountable(){return!0}copy(){return new e(this.type._copy())}splice(e){throw Pg()}mergeWith(e){return!1}integrate(e,t){this.type._integrate(e.doc,t)}delete(e){let t=this.type._start;for(;t!==null;)t.deleted?t.id.clock<(e.beforeState.get(t.id.client)||0)&&e._mergeStructs.push(t):t.delete(e),t=t.right;this.type._map.forEach(t=>{t.deleted?t.id.clock<(e.beforeState.get(t.id.client)||0)&&e._mergeStructs.push(t):t.delete(e)}),e.changed.delete(this.type)}gc(e){let t=this.type._start;for(;t!==null;)t.gc(e,!0),t=t.right;this.type._start=null,this.type._map.forEach(t=>{for(;t!==null;)t.gc(e,!0),t=t.left}),this.type._map=new Map}write(e,t){this.type._write(e)}getRef(){return 7}};const dne=e=>new Tx(_x[e.readTypeRef()](e)),fne=(e,t)=>{let n=t,r=0,i;do r>0&&(n=Jv(n.client,n.clock+r)),i=ly(e,n),r=n.clock-i.id.clock,n=i.redone;while(n!==null&&i instanceof Ax);return{item:i,diff:r}},Ex=(e,t)=>{for(;e!==null&&e.keep!==t;)e.keep=t,e=e.parent._item},Dx=(e,t,n)=>{let{client:r,clock:i}=t.id,a=new Ax(Jv(r,i+n),t,Jv(r,i+n-1),t.right,t.rightOrigin,t.parent,t.parentSub,t.content.splice(n));return t.deleted&&a.markDeleted(),t.keep&&(a.keep=!0),t.redone!==null&&(a.redone=Jv(t.redone.client,t.redone.clock+n)),t.right=a,a.right!==null&&(a.right.left=a),e._mergeStructs.push(a),a.parentSub!==null&&a.right===null&&a.parent._map.set(a.parentSub,a),t.length=n,a},Ox=(e,t)=>zh(e,e=>iv(e.deletions,t)),kx=(e,t,n,r,i,a)=>{let o=e.doc,s=o.store,c=o.clientID,l=t.redone;if(l!==null)return dy(e,l);let u=t.parent._item,d=null,f;if(u!==null&&u.deleted===!0){if(u.redone===null&&(!n.has(u)||kx(e,u,n,r,i,a)===null))return null;for(;u.redone!==null;)u=dy(e,u.redone)}let p=u===null?t.parent:u.content.type;if(t.parentSub===null){for(d=t.left,f=t;d!==null;){let t=d;for(;t!==null&&t.parent._item!==u;)t=t.redone===null?null:dy(e,t.redone);if(t!==null&&t.parent._item===u){d=t;break}d=d.left}for(;f!==null;){let t=f;for(;t!==null&&t.parent._item!==u;)t=t.redone===null?null:dy(e,t.redone);if(t!==null&&t.parent._item===u){f=t;break}f=f.right}}else{if(f=null,t.right&&!i){for(d=t;d!==null&&d.right!==null&&(d.right.redone||iv(r,d.right.id)||Ox(a.undoStack,d.right.id)||Ox(a.redoStack,d.right.id));)for(d=d.right;d.redone;)d=dy(e,d.redone);if(d&&d.right!==null)return null}else d=p._map.get(t.parentSub)||null;d!==null&&d.parent._item!==u&&(d=p._map.get(t.parentSub)||null)}let m=Jv(c,oy(s,c)),h=new Ax(m,d,d&&d.lastId,f,f&&f.id,p,t.parentSub,t.content.copy());return t.redone=m,Ex(h,!0),h.integrate(e,0),h};var Ax=class e extends Zb{constructor(e,t,n,r,i,a,o,s){super(e,s.getLength()),this.origin=n,this.left=t,this.right=r,this.rightOrigin=i,this.parent=a,this.parentSub=o,this.redone=null,this.content=s,this.info=this.content.isCountable()?2:0}set marker(e){(this.info&8)>0!==e&&(this.info^=8)}get marker(){return(this.info&8)>0}get keep(){return(this.info&1)>0}set keep(e){this.keep!==e&&(this.info^=1)}get countable(){return(this.info&2)>0}get deleted(){return(this.info&4)>0}set deleted(e){this.deleted!==e&&(this.info^=4)}markDeleted(){this.info|=4}getMissing(t,n){if(this.origin&&this.origin.client!==this.id.client&&this.origin.clock>=oy(n,this.origin.client))return this.origin.client;if(this.rightOrigin&&this.rightOrigin.client!==this.id.client&&this.rightOrigin.clock>=oy(n,this.rightOrigin.client))return this.rightOrigin.client;if(this.parent&&this.parent.constructor===Kv&&this.id.client!==this.parent.client&&this.parent.clock>=oy(n,this.parent.client))return this.parent.client;if(this.origin&&=(this.left=fy(t,n,this.origin),this.left.lastId),this.rightOrigin&&=(this.right=dy(t,this.rightOrigin),this.right.id),this.left&&this.left.constructor===Qb||this.right&&this.right.constructor===Qb)this.parent=null;else if(!this.parent)this.left&&this.left.constructor===e?(this.parent=this.left.parent,this.parentSub=this.left.parentSub):this.right&&this.right.constructor===e&&(this.parent=this.right.parent,this.parentSub=this.right.parentSub);else if(this.parent.constructor===Kv){let e=ly(n,this.parent);e.constructor===Qb?this.parent=null:this.parent=e.content.type}return null}integrate(e,t){if(t>0&&(this.id.clock+=t,this.left=fy(e,e.doc.store,Jv(this.id.client,this.id.clock-1)),this.origin=this.left.lastId,this.content=this.content.splice(t),this.length-=t),this.parent){if(!this.left&&(!this.right||this.right.left!==null)||this.left&&this.left.right!==this.right){let t=this.left,n;if(t!==null)n=t.right;else if(this.parentSub!==null)for(n=this.parent._map.get(this.parentSub)||null;n!==null&&n.left!==null;)n=n.left;else n=this.parent._start;let r=new Set,i=new Set;for(;n!==null&&n!==this.right;){if(i.add(n),r.add(n),qv(this.origin,n.origin)){if(n.id.client<this.id.client)t=n,r.clear();else if(qv(this.rightOrigin,n.rightOrigin))break}else if(n.origin!==null&&i.has(ly(e.doc.store,n.origin)))r.has(ly(e.doc.store,n.origin))||(t=n,r.clear());else break;n=n.right}this.left=t}if(this.left!==null){let e=this.left.right;this.right=e,this.left.right=this}else{let e;if(this.parentSub!==null)for(e=this.parent._map.get(this.parentSub)||null;e!==null&&e.left!==null;)e=e.left;else e=this.parent._start,this.parent._start=this;this.right=e}this.right===null?this.parentSub!==null&&(this.parent._map.set(this.parentSub,this),this.left!==null&&this.left.delete(e)):this.right.left=this,this.parentSub===null&&this.countable&&!this.deleted&&(this.parent._length+=this.length),sy(e.doc.store,this),this.content.integrate(e,this),_y(e,this.parent,this.parentSub),(this.parent._item!==null&&this.parent._item.deleted||this.parentSub!==null&&this.right!==null)&&this.delete(e)}else new Qb(this.id,this.length).integrate(e,0)}get next(){let e=this.right;for(;e!==null&&e.deleted;)e=e.right;return e}get prev(){let e=this.left;for(;e!==null&&e.deleted;)e=e.left;return e}get lastId(){return this.length===1?this.id:Jv(this.id.client,this.id.clock+this.length-1)}mergeWith(e){if(this.constructor===e.constructor&&qv(e.origin,this.lastId)&&this.right===e&&qv(this.rightOrigin,e.rightOrigin)&&this.id.client===e.id.client&&this.id.clock+this.length===e.id.clock&&this.deleted===e.deleted&&this.redone===null&&e.redone===null&&this.content.constructor===e.content.constructor&&this.content.mergeWith(e.content)){let t=this.parent._searchMarker;return t&&t.forEach(t=>{t.p===e&&(t.p=this,!this.deleted&&this.countable&&(t.index-=this.length))}),e.keep&&(this.keep=!0),this.right=e.right,this.right!==null&&(this.right.left=this),this.length+=e.length,!0}return!1}delete(e){if(!this.deleted){let t=this.parent;this.countable&&this.parentSub===null&&(t._length-=this.length),this.markDeleted(),sv(e.deleteSet,this.id.client,this.id.clock,this.length),_y(e,t,this.parentSub),this.content.delete(e)}}gc(e,t){if(!this.deleted)throw Fg();this.content.gc(e),t?py(e,this,new Qb(this.id,this.length)):this.content=new tx(this.length)}write(e,t){let n=t>0?Jv(this.id.client,this.id.clock+t-1):this.origin,r=this.rightOrigin,i=this.parentSub,a=this.content.getRef()&31|(n===null?0:128)|(r===null?0:64)|(i===null?0:32);if(e.writeInfo(a),n!==null&&e.writeLeftID(n),r!==null&&e.writeRightID(r),n===null&&r===null){let t=this.parent;if(t._item!==void 0){let n=t._item;if(n===null){let n=Yv(t);e.writeParentInfo(!0),e.writeString(n)}else e.writeParentInfo(!1),e.writeLeftID(n.id)}else t.constructor===String?(e.writeParentInfo(!0),e.writeString(t)):t.constructor===Kv?(e.writeParentInfo(!1),e.writeLeftID(t)):Fg();i!==null&&e.writeString(i)}this.content.write(e,t)}};const jx=(e,t)=>pne[t&31](e),pne=[()=>{Fg()},nx,dx,ex,gx,sx,lx,dne,mx,ax,()=>{Fg()}];var Mx=class extends Zb{get deleted(){return!0}delete(){}mergeWith(e){return this.constructor===e.constructor?(this.length+=e.length,!0):!1}integrate(e,t){Fg()}write(e,t){e.writeInfo(10),pg(e.restEncoder,this.length-t)}getMissing(e,t){return null}};const Nx=typeof globalThis<`u`?globalThis:typeof window<`u`?window:typeof global<`u`?global:{},Px=`__ $YJS$ __`;Nx[Px]===!0&&console.error(`Yjs was already imported. This breaks constructor checks and will lead to issues! - https://github.com/yjs/yjs/issues/438`),Nx[Px]=!0;const mne=/[\uD800-\uDBFF]/,hne=/[\uDC00-\uDFFF]/,gne=(e,t)=>{let n=0,r=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n++;for(n>0&&mne.test(e[n-1])&&n--;r+n<e.length&&r+n<t.length&&e[e.length-r-1]===t[t.length-r-1];)r++;return r>0&&hne.test(e[e.length-r])&&r--,{index:n,remove:e.length-n-r,insert:t.slice(n,t.length-r)}},_ne=e=>{let t=hu(`sha256`);return t.update(e),t.digest()},vne=new Lt(`y-sync`);new Lt(`y-undo`),new Lt(`yjs-cursor`);const yne=e=>{for(let t=6;t<e.length;t++)e[t%6]=e[t%6]^e[t];return e.slice(0,6)},bne=e=>N_(yne(_ne(F_(e)))),xne=()=>({mapping:new Map,isOMark:new Map}),Fx=(e,t)=>t===void 0?!e.deleted:t.sv.has(e.id.client)&&t.sv.get(e.id.client)>e.id.clock&&!iv(t.ds,e.id),Sne=(e,t,n,r,i,a)=>{let o=n.mapping.get(e);if(o===void 0){if(e instanceof Wb)return Ix(e,t,n,r,i,a);throw Pg()}return o},Ix=(e,t,n,r,i,a)=>{let o=[],s=e=>{if(e instanceof Wb){let s=Sne(e,t,n,r,i,a);s!==null&&o.push(s)}else{let s=e._item.right?.content?.type;s instanceof zb&&!s._item.deleted&&s._item.id.client===s.doc.clientID&&(e.applyDelta([{retain:e.length},...s.toDelta()]),s.doc.transact(e=>{s._item.delete(e)}));let c=Cne(e,t,n,r,i,a);c!==null&&c.forEach(e=>{e!==null&&o.push(e)})}};r===void 0||i===void 0?e.toArray().forEach(s):eb(e,new Zv(i.ds,r.sv)).forEach(s);try{let s=e.getAttributes(r);r!==void 0&&(Fx(e._item,r)?Fx(e._item,i)||(s.ychange=a?a(`added`,e._item.id):{type:`added`}):s.ychange=a?a(`removed`,e._item.id):{type:`removed`});let c=Ux(s),l=Jx(c.marks,t),u=t.node(e.nodeName,c.plain,o,l.length?l:void 0);return n.mapping.set(e,u),u}catch(r){console.warn(`[y-prosemirror] schema.node(`+e.nodeName+`) threw:`,String(r&&r.message||r));let i=globalThis.__okYpsCounters=globalThis.__okYpsCounters||{block:0,inline:0};if(t.nodes[e.nodeName]&&t.nodes[e.nodeName].spec&&t.nodes[e.nodeName].spec.inline)i.inline++;else if(i.block++,t.nodes.rawMdxFallback)try{let i=t.node(`rawMdxFallback`,{reason:String(r&&r.message||r)},[t.text(e.nodeName)]);return n.mapping.set(e,i),i}catch(e){console.warn(`[y-prosemirror] rawMdxFallback substitution also failed:`,String(e&&e.message||e))}return n.mapping.delete(e),null}},Cne=(e,t,n,r,i,a)=>{let o=[],s=e.toDelta(r,i,a);try{for(let e=0;e<s.length;e++){let n=s[e];o.push(t.text(n.insert,Jx(n.attributes,t)))}}catch(e){console.warn(`[y-prosemirror] schema.text() threw:`,String(e&&e.message||e));let t=globalThis.__okYpsCounters=globalThis.__okYpsCounters||{block:0,inline:0};return t.inline++,null}return o},wne=(e,t)=>{let n=new Yb,r=e.map(e=>({insert:e.text,attributes:Yx(e.marks,t)}));return n.applyDelta(r),t.mapping.set(n,e),n},Tne=(e,t)=>{let n=new Wb(e.type.name);for(let t in e.attrs){let r=e.attrs[t];r!==null&&t!==`ychange`&&n.setAttribute(t,r)}let r=Yx(e.marks||[],t);for(let e in r)n.setAttribute(Hx+e,{...r[e]});return n.insert(0,Bx(e).map(e=>Lx(e,t))),t.mapping.set(n,e),n},Lx=(e,t)=>e instanceof Array?wne(e,t):Tne(e,t),Rx=e=>typeof e==`object`&&!!e,zx=(e,t)=>{let n=Object.keys(e).filter(t=>e[t]!==null),r=n.length===Object.keys(t).filter(e=>t[e]!==null).length;for(let i=0;i<n.length&&r;i++){let a=n[i],o=e[a],s=t[a];r=a===`ychange`||o===s||Rx(o)&&Rx(s)&&zx(o,s)}return r},Bx=e=>{let t=e.content.content,n=[];for(let e=0;e<t.length;e++){let r=t[e];if(r.isText){let r=[];for(let n=t[e];e<t.length&&n.isText;n=t[++e])r.push(n);e--,n.push(r)}else n.push(r)}return n},Vx=(e,t)=>{let n=e.toDelta();return n.length===t.length&&n.every((e,n)=>e.insert===t[n].text&&d_(e.attributes||{}).length===t[n].marks.length&&h_(e.attributes,(e,r)=>{let i=qx(r),a=t[n].marks;return a.find(e=>e.type.name===i)?zx(e,a.find(e=>e.type.name===i)?.attrs):!1}))},Hx=`ymark:`,Ux=e=>{let t={},n={};for(let r in e)r.startsWith(Hx)?n[r.slice(6)]=e[r]:t[r]=e[r];return{plain:t,marks:n}},Ene=(e,t)=>{let n=Object.keys(e);return n.length===t.length?n.every(n=>{let r=qx(n),i=t.find(e=>e.type.name===r);return i?zx(e[n],i.attrs):!1}):!1},Wx=(e,t)=>{if(e instanceof Wb&&!(t instanceof Array)&&Zx(e,t)){let n=Bx(t),r=Ux(e.getAttributes());return e._length===n.length&&Ene(r.marks,t.marks)&&zx(r.plain,t.attrs)&&e.toArray().every((e,t)=>Wx(e,n[t]))}return e instanceof Yb&&t instanceof Array&&Vx(e,t)},Gx=(e,t)=>e===t||e instanceof Array&&t instanceof Array&&e.length===t.length&&e.every((e,n)=>t[n]===e),Kx=(e,t,n)=>{let r=e.toArray(),i=Bx(t),a=i.length,o=r.length,s=Wh(o,a),c=0,l=0,u=!1;for(;c<s;c++){let e=r[c],t=i[c];if(Gx(n.mapping.get(e),t))u=!0;else if(!Wx(e,t))break}for(;c+l<s;l++){let e=r[o-l-1],t=i[a-l-1];if(Gx(n.mapping.get(e),t))u=!0;else if(!Wx(e,t))break}return{equalityFactor:c+l,foundMappedChild:u}},Dne=e=>{let t=``,n=e._start,r={};for(;n!==null;)n.deleted||(n.countable&&n.content instanceof hx?t+=n.content.str:n.content instanceof cx&&(r[n.content.key]=null)),n=n.right;return{str:t,nAttrs:r}},One=(e,t,n)=>{n.mapping.set(e,t);let{nAttrs:r,str:i}=Dne(e),a=t.map(e=>({insert:e.text,attributes:Object.assign({},r,Yx(e.marks,n))})),{insert:o,remove:s,index:c}=gne(i,a.map(e=>e.insert).join(``));e.delete(c,s),e.insert(c,o),e.applyDelta(a.map(e=>({retain:e.insert.length,attributes:e.attributes})))},kne=/(.*)(--[a-zA-Z0-9+/=]{8})$/,qx=e=>kne.exec(e)?.[1]??e,Jx=(e,t)=>{let n=[];for(let r in e)n.push(t.mark(qx(r),e[r]));return n},Yx=(e,t)=>{let n={};return e.forEach(e=>{if(e.type.name!==`ychange`){let r=Nh(t.isOMark,e.type,()=>!e.type.excludes(e.type));n[r?`${e.type.name}--${bne(e.toJSON())}`:e.type.name]=e.attrs}}),n},Xx=(e,t,n,r)=>{if(t instanceof Wb&&t.nodeName!==n.type.name)throw Error(`node name mismatch!`);if(r.mapping.set(t,n),t instanceof Wb){let e=t.getAttributes(),i=n.attrs;for(let n in i)i[n]===null?t.removeAttribute(n):e[n]!==i[n]&&n!==`ychange`&&t.setAttribute(n,i[n]);for(let n in e)i[n]===void 0&&!n.startsWith(Hx)&&t.removeAttribute(n);let a=Yx(n.marks||[],r);for(let n in a){let r=e[Hx+n];(r===void 0||!zx(r,a[n]))&&t.setAttribute(Hx+n,{...a[n]})}for(let n in e)n.startsWith(Hx)&&a[n.slice(6)]===void 0&&t.removeAttribute(n)}let i=Bx(n),a=i.length,o=t.toArray(),s=o.length,c=Wh(a,s),l=0,u=0;for(;l<c;l++){let e=o[l],t=i[l];if(!Gx(r.mapping.get(e),t))if(Wx(e,t))r.mapping.set(e,t);else break}for(;u+l+1<c;u++){let e=o[s-u-1],t=i[a-u-1];if(!Gx(r.mapping.get(e),t))if(Wx(e,t))r.mapping.set(e,t);else break}e.transact(()=>{for(;s-l-u>0&&a-l-u>0;){let n=o[l],c=i[l],d=o[s-u-1],f=i[a-u-1];if(n instanceof Yb&&c instanceof Array)Vx(n,c)||One(n,c,r),l+=1;else{let i=n instanceof Wb&&Zx(n,c),a=d instanceof Wb&&Zx(d,f);if(i&&a){let e=Kx(n,c,r),t=Kx(d,f,r);e.foundMappedChild&&!t.foundMappedChild?a=!1:!e.foundMappedChild&&t.foundMappedChild||e.equalityFactor<t.equalityFactor?i=!1:a=!1}i?(Xx(e,n,c,r),l+=1):a?(Xx(e,d,f,r),u+=1):(r.mapping.delete(t.get(l)),t.delete(l,1),t.insert(l,[Lx(c,r)]),l+=1)}}let n=s-l-u;if(s===1&&a===0&&o[0]instanceof Yb?(r.mapping.delete(o[0]),o[0].delete(0,o[0].length)):n>0&&(t.slice(l,l+n).forEach(e=>r.mapping.delete(e)),t.delete(l,n)),l+u<a){let e=[];for(let t=l;t<a-u;t++)e.push(Lx(i[t],r));t.insert(l,e)}},vne)},Zx=(e,t)=>!(t instanceof Array)&&e.nodeName===t.type.name,Ane=(e,t)=>{let n=e.toArray().map(e=>Ix(e,t,xne())).filter(e=>e!==null);return oe.fromArray(n)},Qx=(e,t)=>t.topNodeType.create(null,Ane(e,t));function $x(e,t,n,r){let{body:i}=At(t);return r!==void 0&&r.rawContent===t?r.parsedJson:Eo(`md.parseWithFallback`,{attributes:{"body.bytes":i.length,"doc.name":e.guid}},()=>So.parseWithFallback(i,eS(n)))}function eS(e){return e?{resolveEmbed:e.resolveEmbed,resolveSize:e.resolveSize,sourcePath:e.sourcePath}:void 0}function tS(e){return So.serialize(Qx(e,xo).toJSON())}function nS(e,t,n,r,i,a){let o=tS(r),s=So.serialize(n),{body:c}=At(e.baselineFullMd),l=So.serialize(So.parseWithFallback(c,a));e.report({pendingBody:t,baselineBody:l,ytextDerivedBody:s,rebuiltBody:o,restorePayload:oa(i,t)})}function rS(e,t,n,r,i,a){Eo(`bridge.composeAndWriteRawBody`,{attributes:{surface:n,"body.bytes":t.length,"doc.name":e.guid}},()=>{let n=e.getXmlFragment(`default`),o=e.getText(`source`),s=o.toString(),c=$x(e,t,r,i),l=xo.nodeFromJSON(c),u=a?tS(n):void 0;if(s!==t&&Wr(o,s,t),Xx(e,n,l,{mapping:new Map,isOMark:new Map}),a&&u!==void 0){let{frontmatter:e}=At(a.baselineFullMd);nS(a,u,c,n,e,eS(r))}})}function iS(e,t,n,r,i){Eo(`bridge.replaceRawBody`,{attributes:{"body.bytes":t.length,"doc.name":e.guid}},()=>{let a=e.getXmlFragment(`default`),o=e.getText(`source`),s=$x(e,t,n,r),c=xo.nodeFromJSON(s),l=i?tS(a):void 0,u=o.toString();if(u!==t&&(o.delete(0,u.length),o.insert(0,t)),Xx(e,a,c,{mapping:new Map,isOMark:new Map}),i&&l!==void 0){let{frontmatter:e}=At(i.baselineFullMd);nS(i,l,s,a,e,eS(n))}})}function jne(e,t,n){let r=e.getXmlFragment(`default`),{frontmatter:i,body:a}=At(e.getText(`source`).toString()),o=eS(t),s=So.parseWithFallback(a,o),c=xo.nodeFromJSON(s),l=n?So.serialize(Qx(r,xo).toJSON()):void 0;if(Xx(e,r,c,{mapping:new Map,isOMark:new Map}),n&&l!==void 0){let e=So.serialize(Qx(r,xo).toJSON()),t=So.serialize(s),{body:a}=At(n.baselineFullMd),c=So.serialize(So.parseWithFallback(a,o));n.report({pendingBody:l,baselineBody:c,ytextDerivedBody:t,rebuiltBody:e,restorePayload:oa(i,l)})}}const Mne=F(`loss-capture`),aS=`detector-trip`,oS=`backstop-trip`,sS=`checkpoint-write`;k({ts:P(),schemaVersion:P(),seq:P(),event:A(),docName:A(),writerId:A().nullable(),site:A().optional(),direction:A().optional(),lostLen:P().optional(),digest:A().optional(),checkpointSha:A().optional()});const cS=[`.ok`,`local`,`loss-capture`];function Nne(e){return L(e,...cS,`loss-current.jsonl`)}function Pne(e){return L(e,...cS,`loss-prev.jsonl`)}var Fne=class{#e;#t;#n=new Map;constructor(e){this.#e=new os({currentPath:Nne(e.projectDir),previousPath:Pne(e.projectDir),maxBytes:e.maxBytes}),this.#t=e.now??Date.now}record(e){let t=(this.#n.get(e.docName)??0)+1;this.#n.set(e.docName,t);let n={ts:this.#t(),schemaVersion:1,seq:t,event:e.event,docName:e.docName,writerId:e.writerId,...e.site===void 0?{}:{site:e.site},...e.direction===void 0?{}:{direction:e.direction},...e.lostLen===void 0?{}:{lostLen:e.lostLen},...e.digest===void 0?{}:{digest:e.digest},...e.checkpointSha===void 0?{}:{checkpointSha:e.checkpointSha}};return this.#e.append(`${JSON.stringify(n)}\n`).catch(t=>{Mne.warn({event:e.event,err:t},`[loss-capture] failed to write loss-class event`)})}async drain(){await this.#e.drain()}};function Ine(e){return e.split(`\0`).filter(e=>e.length>0)}function Lne(e){let t=[],n=e.split(`\0`);for(let e=0;e<n.length;e++){let r=n[e]??``;r.length<4||(t.push(r.slice(3)),(r[0]===`R`||r[0]===`C`)&&e++)}return t}function Rne(e){let t=e.split(`\0`),n=[],r=0;for(;r<t.length;){let e=t[r]??``;if(e===``)break;if(e[0]===`R`||e[0]===`C`)n.push({status:e,from:t[r+1]??``,to:t[r+2]??``}),r+=3;else{let i=t[r+1]??``;n.push({status:e,from:i,to:i}),r+=2}}return n}function zne(e){let t=[];for(let n of e.split(`\0`)){if(!n)continue;let e=n.indexOf(` `);if(e<0)continue;let[r=``,i=``,a=``,o=`0`]=n.slice(0,e).trim().split(/\s+/),s=Number(o);t.push({mode:r,type:i,object:a,size:Number.isFinite(s)?s:0,path:n.slice(e+1)})}return t}function lS(e,t){let[n=``,...r]=t;return e.raw([n,`-z`,...r])}async function uS(e,t){return Ine(await lS(e,t))}async function Bne(e,t=[`status`,`--porcelain`]){return Lne(await lS(e,t))}async function Vne(e,t){return Rne(await lS(e,t))}async function Hne(e,t){return zne(await lS(e,t))}const W={reconcileCount:0,conflictCount:0,batchCount:0,upstreamImportCount:0,persistenceStoreRemovedDocCount:0,rescueBufferCount:0,branchSwitchCount:0,parkCount:0,gitAutoSaveFailureCount:0,gitWriterCommitFailureCount:0,cc1BroadcastCount:0,cc1BroadcastDropCount:0,cc1SubscriberCount:0,cc1LastSeq:{},serverObserverFiresA:0,serverObserverFiresB:0,serverObserverErrorsA:0,serverObserverErrorsB:0,persistenceDiskWrites:0,bridgeMergeContentLoss:0,bridgeMergeContentGrowth:0,bridgeMergeCheckpointCreated:0,producerGuardFires:0,producerGuardFiresSuppressed:0,producerGuardCheckpointCreated:0,bridgeInvariantViolations:0,bridgeInvariantViolationsSuppressed:0,persistenceSkipNonQuiescent:0,persistenceForceFlushDuringBurst:0,persistenceStalenessDetected:0,persistenceStalenessForcedStores:0,persistenceStalenessStoodDown:0,collabSocketEpipeCount:0,collabSocketEconnresetCount:0,collabMessageTooLargeCount:0,shadowMigrationLegacyRefsDeleted:0,effectDiffCaptureFailures:0,agentPresenceMutationErrors:0,agentWriteCalls:0,agentSessionEvictions:0,summariesProvided:0,summariesTruncated:0,agentPatchFindMismatches:0,bridgeToleranceApplied:{},observerAPathBFires:0,observerAPathBFiresSuppressed:0,mapDrivenSpliceApplied:0,mapDrivenSpliceFallback:{},observerAResidualMergeRuns:0,observerADuplicationRederives:0,observerADuplicationCheckpointCreated:0,observerAApplyLoss:0,observerAApplyLossCheckpointCreated:0,deriveTimingDeferForceResolved:0,persistenceDeferHold:0,persistenceReconcileLoss:0,persistenceReconcileLossCheckpointCreated:0,persistenceReconcileLossDeduped:0,reDeriveBackstopTripped:0,bridgeSplitBrainRederives:0,bridgeSplitBrainRederivesSuppressed:0,persistenceReconciliationFailures:0,externalChangeHandlerErrors:0,reconcileOwnFlushSkips:0,reconcileInFlightFallthroughs:0,persistenceSanityCheckSerializeFailures:0,deferredStoreFailures:0,authRenameRedirectCount:0,authDocDeletedCount:0,recentlyRemovedDocsEvictions:0,recentlyRemovedDocsSize:0,authRemovalGuardErrors:0,removalRedirectChainCycles:0,authDocLineageMismatchCount:0,authDocLineageGuardErrors:0};function dS(){W.reconcileCount++}function fS(){W.conflictCount++}function Une(){W.batchCount++}function pS(){W.upstreamImportCount++}function Wne(){W.persistenceStoreRemovedDocCount++}function mS(){W.rescueBufferCount++}function Gne(){W.branchSwitchCount++}function Kne(){W.parkCount++}function hS(){W.gitAutoSaveFailureCount++}function qne(){W.gitWriterCommitFailureCount++}function gS(){W.cc1BroadcastCount++}function _S(){W.cc1BroadcastDropCount++}function Jne(e){W.cc1SubscriberCount=e}function vS(e){e===`a`?W.serverObserverFiresA++:W.serverObserverFiresB++}function Yne(){W.persistenceDiskWrites++}function yS(e){e===`a`?W.serverObserverErrorsA++:W.serverObserverErrorsB++}function Xne(){W.bridgeMergeContentLoss++}function Zne(){W.bridgeMergeContentGrowth++}function bS(){W.agentWriteCalls++}function Qne(){W.agentSessionEvictions++}function $ne(){W.summariesProvided++}function ere(){W.summariesTruncated++}function tre(){W.bridgeMergeCheckpointCreated++}function nre(){W.producerGuardCheckpointCreated++}function rre(){W.producerGuardFires++}function ire(){W.producerGuardFiresSuppressed++}function are(){W.bridgeInvariantViolations++}function ore(){W.bridgeInvariantViolationsSuppressed++}function sre(){W.persistenceSkipNonQuiescent++}function cre(){W.persistenceForceFlushDuringBurst++}function lre(){W.persistenceStalenessDetected++}function ure(){W.persistenceStalenessForcedStores++}function dre(){W.persistenceStalenessStoodDown++}function fre(){W.agentPatchFindMismatches++}function pre(e){W.bridgeToleranceApplied[e]=(W.bridgeToleranceApplied[e]??0)+1}function mre(){W.observerAPathBFires++}function hre(){W.observerAPathBFiresSuppressed++}function gre(){W.mapDrivenSpliceApplied++}function xS(e){W.mapDrivenSpliceFallback[e]=(W.mapDrivenSpliceFallback[e]??0)+1}function _re(){W.observerAResidualMergeRuns++}function vre(){W.observerADuplicationRederives++}function yre(){W.observerADuplicationCheckpointCreated++}function bre(){W.observerAApplyLoss++}function xre(){W.observerAApplyLossCheckpointCreated++}function Sre(){W.deriveTimingDeferForceResolved++}function Cre(){W.persistenceDeferHold++}function wre(){W.persistenceReconcileLoss++}function Tre(){W.persistenceReconcileLossCheckpointCreated++}function Ere(){W.persistenceReconcileLossDeduped++}function Dre(){W.reDeriveBackstopTripped++}function Ore(){W.bridgeSplitBrainRederives++}function kre(){W.bridgeSplitBrainRederivesSuppressed++}function Are(){W.persistenceReconciliationFailures++}function jre(){W.externalChangeHandlerErrors++}function Mre(){W.reconcileOwnFlushSkips++}function Nre(){W.reconcileInFlightFallthroughs++}function Pre(){W.persistenceSanityCheckSerializeFailures++}function Fre(){W.deferredStoreFailures++}function SS(){W.authRenameRedirectCount++}function CS(){W.authDocDeletedCount++}function Ire(){W.recentlyRemovedDocsEvictions++}function Lre(e){W.recentlyRemovedDocsSize=e}function Rre(){W.authRemovalGuardErrors++}function zre(){W.removalRedirectChainCycles++}function wS(){W.authDocLineageMismatchCount++}function Bre(){W.authDocLineageGuardErrors++}function TS(e){e===`EPIPE`?W.collabSocketEpipeCount++:W.collabSocketEconnresetCount++}function ES(){W.collabMessageTooLargeCount++}function Vre(e){W.shadowMigrationLegacyRefsDeleted+=e}function Hre(){W.effectDiffCaptureFailures++}function Ure(){W.agentPresenceMutationErrors++}function DS(e){return e.code===`EPIPE`||e.code===`ECONNRESET`?(TS(e.code),!0):!1}function OS(e,t){W.cc1LastSeq[e]=t}function kS(){return{...W,cc1LastSeq:{...W.cc1LastSeq},bridgeToleranceApplied:{...W.bridgeToleranceApplied},mapDrivenSpliceFallback:{...W.mapDrivenSpliceFallback}}}function Wre(){W.reconcileCount=0,W.conflictCount=0,W.batchCount=0,W.upstreamImportCount=0,W.persistenceStoreRemovedDocCount=0,W.rescueBufferCount=0,W.branchSwitchCount=0,W.parkCount=0,W.gitAutoSaveFailureCount=0,W.gitWriterCommitFailureCount=0,W.cc1BroadcastCount=0,W.cc1BroadcastDropCount=0,W.cc1SubscriberCount=0,W.cc1LastSeq={},W.serverObserverFiresA=0,W.serverObserverFiresB=0,W.serverObserverErrorsA=0,W.serverObserverErrorsB=0,W.persistenceDiskWrites=0,W.bridgeMergeContentLoss=0,W.bridgeMergeContentGrowth=0,W.bridgeMergeCheckpointCreated=0,W.producerGuardFires=0,W.producerGuardFiresSuppressed=0,W.producerGuardCheckpointCreated=0,W.bridgeInvariantViolations=0,W.bridgeInvariantViolationsSuppressed=0,W.persistenceSkipNonQuiescent=0,W.persistenceForceFlushDuringBurst=0,W.persistenceStalenessDetected=0,W.persistenceStalenessForcedStores=0,W.persistenceStalenessStoodDown=0,W.collabSocketEpipeCount=0,W.collabSocketEconnresetCount=0,W.collabMessageTooLargeCount=0,W.shadowMigrationLegacyRefsDeleted=0,W.effectDiffCaptureFailures=0,W.agentPresenceMutationErrors=0,W.agentWriteCalls=0,W.agentSessionEvictions=0,W.summariesProvided=0,W.summariesTruncated=0,W.agentPatchFindMismatches=0,W.bridgeToleranceApplied={},W.observerAPathBFires=0,W.observerAPathBFiresSuppressed=0,W.mapDrivenSpliceApplied=0,W.mapDrivenSpliceFallback={},W.observerAResidualMergeRuns=0,W.observerADuplicationRederives=0,W.observerADuplicationCheckpointCreated=0,W.observerAApplyLoss=0,W.observerAApplyLossCheckpointCreated=0,W.deriveTimingDeferForceResolved=0,W.persistenceDeferHold=0,W.persistenceReconcileLoss=0,W.persistenceReconcileLossCheckpointCreated=0,W.persistenceReconcileLossDeduped=0,W.reDeriveBackstopTripped=0,W.bridgeSplitBrainRederives=0,W.bridgeSplitBrainRederivesSuppressed=0,W.persistenceReconciliationFailures=0,W.externalChangeHandlerErrors=0,W.reconcileOwnFlushSkips=0,W.reconcileInFlightFallthroughs=0,W.persistenceSanityCheckSerializeFailures=0,W.deferredStoreFailures=0,W.authRenameRedirectCount=0,W.authDocDeletedCount=0,W.recentlyRemovedDocsEvictions=0,W.recentlyRemovedDocsSize=0,W.authRemovalGuardErrors=0,W.removalRedirectChainCycles=0,W.authDocLineageMismatchCount=0,W.authDocLineageGuardErrors=0}const AS=F(`shadow-lock`);function Gre(e,t){let n=z(e,`lock`);if(B(n)){let t=null;try{t=JSON.parse(V(n,`utf-8`))}catch{AS.warn({lockPath:n},`Corrupt lock file at ${n} — replacing`)}if(t&&!hs(t.pid)&&(AS.warn({lockPath:n,pid:String(t.pid)},`Invalid lock pid (${String(t.pid)}) at ${n} — replacing`),t=null),t){let n=t.hostname===Xl();if(!(n&&t.pid===process.pid)){if(n&&Os(t.pid))throw Error(`Shadow repo at ${e} is locked by another writer (pid=${t.pid}, worktree=${t.worktreeRoot}, started=${t.startedAt}). Only one active writer instance may mutate a given shadow root at a time.`);AS.warn({pid:t.pid,host:t.hostname},`Stale lock detected (pid=${t.pid}, host=${t.hostname}) — replacing`)}}}let r={pid:process.pid,hostname:Xl(),startedAt:new Date().toISOString(),worktreeRoot:t};return Gl(n,JSON.stringify(r,null,2),`utf-8`),n}function Kre(e){let t=z(e,`lock`);try{Wl(t)}catch{}}const qre=F(`shadow-op-gate`);var Jre=class{mutatorCount=0;exclusiveHeld=null;drainWaiters=[];get activeMutators(){return this.mutatorCount}get isExclusiveHeld(){return this.exclusiveHeld!==null}async withMutator(e){for(;this.exclusiveHeld;)await this.exclusiveHeld;this.mutatorCount+=1;try{return await e()}finally{if(--this.mutatorCount,this.mutatorCount===0)for(let e of this.drainWaiters.splice(0))e()}}async withExclusive(e){let t=performance.now();for(;;){if(this.exclusiveHeld){await this.exclusiveHeld;continue}if(this.mutatorCount>0){await new Promise(e=>{this.drainWaiters.push(e)});continue}break}let n=performance.now()-t;n>6e4&&qre.warn({waitedMs:Math.round(n)},`[shadow-op-gate] exclusive acquisition waited a long time for the mutator drain — sustained write stream is starving maintenance`);let r;this.exclusiveHeld=new Promise(e=>{r=e});try{return await e()}finally{this.exclusiveHeld=null,r()}}};const jS=new Map;function MS(e){let t=jS.get(e.gitDir);return t||(t=new Jre,jS.set(e.gitDir,t)),t}function Yre(e){jS.delete(e)}const NS=F(`shadow-repo`),PS=(()=>{let e=process.env.OK_GIT_TIMEOUT_MS;if(!e)return 3e4;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:3e4})(),FS=(()=>{let e=process.env.OK_SHADOW_MAINTENANCE_GC_TIMEOUT_MS;if(!e)return 6e5;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:6e5})();function IS(e,t){return ls({baseDir:e.workTree,timeout:{block:t?.timeoutMs??PS}}).env({GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree})}async function Xre(e){let t=IS(e);await t.raw(`config`,`gc.auto`,`512`),await t.raw(`config`,`gc.autoDetach`,`false`),await t.raw(`config`,`gc.writeCommitGraph`,`true`),await t.raw(`config`,`commitGraph.changedPaths`,`true`)}async function LS(e,t){let n=IS(e),r;try{r=(await n.raw(`for-each-ref`,`--format=%(refname)%00%(objectname)%00%(committerdate:unix)%00%(contents:subject)`,`refs/wip/${t}/`)).trim().split(`
8
8
  `).filter(Boolean)}catch{return[]}let i=[];for(let e of r){let[t=``,n=``,r=``,a=``]=e.split(`\0`),o=t.split(`/`).slice(3).join(`/`);if(!o)continue;let s=Number.parseInt(r,10);i.push({writerId:o,tipSha:n,classification:Yu(o).classification,isPark:a.startsWith(`park:`),committedAtMs:Number.isFinite(s)?s*1e3:0})}return i}async function RS(e){let t=Nu(e),n=z(e,`.git/openknowledge`),r=B(n),i=B(t);if(r&&!i?Fo(n,t):r&&i&&NS.warn({legacyDir:n,shadowDir:t},`[shadow-repo] unexpected legacy + new shadow both present — no rename performed`),!B(z(t,`HEAD`))){Ho(t,{recursive:!0}),await ls({baseDir:e,timeout:{block:PS}}).raw(`init`,`--bare`,t);let n=ls({timeout:{block:PS}}).env({GIT_DIR:t});await n.raw(`config`,`--unset`,`core.bare`),await n.raw(`config`,`core.worktree`,e),await n.raw(`config`,`user.name`,`openknowledge`),await n.raw(`config`,`user.email`,`noreply@openknowledge.local`)}let a={gitDir:t,workTree:e};try{await Xre(a)}catch(e){NS.warn({err:e},`failed to write gc config (non-fatal)`)}return await Qre(a),eie(a),Gre(t,e),a}function Zre(e){Kre(e.gitDir),Yre(e.gitDir)}async function Qre(e){let t=IS(e),n;try{n=(await t.raw(`for-each-ref`,`--format=%(refname)`,`refs/wip`)).trim().split(`
9
- `).filter(e=>e.length>0)}catch{return 0}let r=[],i={server:0,"human-":0,upstream:0};for(let e of n){let t=e.split(`/`);if(t.length<4)continue;let n=t.slice(3).join(`/`);Yu(n).classification===`unknown`&&(n===`server`?(r.push(e),i.server++):n.startsWith(`human-`)?(r.push(e),i[`human-`]++):n===`upstream`&&(r.push(e),i.upstream++))}if(r.length===0)return 0;let a=0;return await MS(e).withMutator(async()=>{for(let e of r)try{await t.raw(`update-ref`,`-d`,e),a++}catch(t){NS.warn({ref:e,err:t},`[shadow-migration] failed to delete legacy ref ${e}`)}}),Vre(a),NS.warn({deleted:a,server:i.server,human:i[`human-`],upstream:i.upstream},`[shadow-migration] deleted ${a} legacy refs: server=${i.server} human-=${i[`human-`]} upstream=${i.upstream}`),a}async function zS(e,t,n,r,i=`main`,a){return Ao(`shadow.commitWip`,{attributes:{"shadow.writer":t.id,"shadow.branch":i}},async()=>MS(e).withMutator(()=>$re(e,t,n,r,i,a?.date)))}async function $re(e,t,n,r,i=`main`,a){let o=z(e.gitDir,`index-wip-${t.id}`),s=`refs/wip/${i}/${t.id}`,c=IS(e),l=n||`.`;try{try{let t=(await c.raw(`rev-parse`,`${s}^{tree}`)).trim();await c.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:o}).raw(`read-tree`,t)}catch(e){let t=e instanceof Error?e.message:String(e);if(!(t.includes(`unknown revision`)||t.includes(`bad revision`)))throw NS.error({ref:s,err:e},`Unexpected error seeding index for ${s}`),e}await c.env({GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree,GIT_INDEX_FILE:o}).raw(`add`,l);let n=(await c.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:o}).raw(`write-tree`)).trim(),i=null;try{i=(await c.raw(`rev-parse`,s)).trim()}catch(e){let t=e instanceof Error?e.message:String(e);if(!t.includes(`unknown revision`)&&!t.includes(`bad revision`))throw NS.error({ref:s,err:e},`Unexpected error resolving ${s}`),e}let u=[`commit-tree`,n,`-m`,r];i&&u.push(`-p`,i);let d={GIT_DIR:e.gitDir,GIT_AUTHOR_NAME:t.name,GIT_AUTHOR_EMAIL:t.email,GIT_COMMITTER_NAME:`openknowledge`,GIT_COMMITTER_EMAIL:`noreply@openknowledge.local`};a&&(d.GIT_AUTHOR_DATE=a,d.GIT_COMMITTER_DATE=a);let f=(await c.env(d).raw(...u)).trim();return await c.raw(`update-ref`,s,f),f}finally{try{Vl(o)}catch{}}}const BS=`index-wip-fanout`;function eie(e){let t=0;try{for(let n of Ll(e.gitDir)){let r=n.startsWith(`${BS}-`),i=n===`${BS}.lock`,a=n.startsWith(`tmp-park-blobs-`);if(!(!r&&!i&&!a))try{Vl(z(e.gitDir,n),{recursive:!0,force:!0}),t++}catch{}}}catch{}return t}async function VS(e,t){return MS(e).withMutator(()=>tie(e,t))}async function HS(e,t,n){let r=IS(e),i=t||`.`;return await r.env({GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree,GIT_INDEX_FILE:n}).raw(`add`,i),(await r.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:n}).raw(`write-tree`)).trim()}async function tie(e,t){let n=z(e.gitDir,BS);try{return await HS(e,t,n)}catch(r){NS.warn({err:r},`[shadow-repo] persistent fan-out index failed — rebuilding from a fresh index`);for(let e of[n,`${n}.lock`])try{Vl(e)}catch{}let i=z(e.gitDir,`${BS}-${gu()}`);try{return await HS(e,t,i)}finally{try{Vl(i)}catch{}}}}async function US(e,t,n,r,i=`main`){return Ao(`shadow.commitWipFromTree`,{attributes:{"shadow.writer":t.id,"shadow.branch":i,"shadow.tree":n.slice(0,8)}},async()=>MS(e).withMutator(()=>nie(e,t,n,r,i)))}async function nie(e,t,n,r,i=`main`){let a=`refs/wip/${i}/${t.id}`,o=IS(e),s=null;try{s=(await o.raw(`rev-parse`,a)).trim()}catch(e){let t=e instanceof Error?e.message:String(e);if(!t.includes(`unknown revision`)&&!t.includes(`bad revision`))throw NS.error({ref:a,err:e},`Unexpected error resolving ${a}`),e}let c=[`commit-tree`,n,`-m`,r];s&&c.push(`-p`,s);let l=(await o.env({GIT_DIR:e.gitDir,GIT_AUTHOR_NAME:t.name,GIT_AUTHOR_EMAIL:t.email,GIT_COMMITTER_NAME:`openknowledge`,GIT_COMMITTER_EMAIL:`noreply@openknowledge.local`}).raw(...c)).trim();return await o.raw(`update-ref`,a,l),l}const WS={id:`file-system`,name:`File System`,email:`file-system@openknowledge.local`},GS={id:`git-upstream`,name:`Git (upstream)`,email:`git@openknowledge.local`},KS={id:`openknowledge-service`,name:`OpenKnowledge (service)`,email:`service@openknowledge.local`},qS=GS;async function JS(e,t,n,r,i=`main`){return Ao(`shadow.commitUpstreamImport`,{attributes:{"shadow.branch":i,"shadow.new_head":r.slice(0,8)}},async()=>rie(e,t,n,r,i))}async function rie(e,t,n,r,i=`main`){return zS(e,qS,t,`${Jee(n,r)}\n\n${zu({v:1,writer_id:qS.id,principal:null,agent_session:null,agent_type:null,client_name:null,client_version:null,label:null,display_name:qS.name,color_seed:qS.id,docs:[]})}`,i)}const YS=KS;async function XS(e,t,n,r=`main`){return zS(e,YS,t,`${qu(`pre-${n.action}`)}\n\n${zu({v:1,writer_id:YS.id,principal:null,agent_session:null,agent_type:null,client_name:null,client_version:null,label:null,display_name:YS.name,color_seed:YS.id,docs:[]})}`,r)}async function ZS(e,t,n){return MS(e).withMutator(()=>iie(e,t,n))}async function iie(e,t,n){let r=n.branch??`main`,i=IS(e),a=gu(),o=z(e.gitDir,`index-checkpoint-${a}`),s=z(e.gitDir,`tmp-checkpoint-blob-${a}`),c=t===`.`?``:t.replace(/^\.\//,``).replace(/\/$/,``),l=c?`${c}/${n.docName}`:n.docName,u=Buffer.byteLength(n.contents,`utf-8`),d;switch(n.kind){case`bridge-merge-loss`:d={kind:`bridge-merge-loss`,docName:n.docName,size:u,metadata:n.metadata};break;case`producer-guard-loss`:d={kind:`producer-guard-loss`,docName:n.docName,size:u,metadata:n.metadata};break;case`observer-a-duplication`:d={kind:`observer-a-duplication`,docName:n.docName,size:u,metadata:n.metadata};break;case`external-change-rescue`:d={kind:`external-change-rescue`,docName:n.docName,size:u,metadata:n.metadata};break;case`defer-exhaustion-loss`:d={kind:`defer-exhaustion-loss`,docName:n.docName,size:u,metadata:n.metadata};break;case`observer-a-apply-loss`:d={kind:`observer-a-apply-loss`,docName:n.docName,size:u,metadata:n.metadata};break;case`bridge-derive-loss`:d={kind:`bridge-derive-loss`,docName:n.docName,size:u,metadata:n.metadata};break;case`bridge-backstop-trip`:d={kind:`bridge-backstop-trip`,docName:n.docName,size:u,metadata:n.metadata};break;case`persistence-reconcile-loss`:d={kind:`persistence-reconcile-loss`,docName:n.docName,size:u,metadata:n.metadata};break}let f=C(d),p=`checkpoint: ${n.label}\n\n${f}`;try{Zo(s,n.contents,`utf-8`);let t=(await i.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:o}).raw(`hash-object`,`-w`,s)).trim();await i.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:o}).raw(`update-index`,`--add`,`--cacheinfo`,`100644,${t},${l}`);let a=(await i.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:o}).raw(`write-tree`)).trim(),c=(await i.env({GIT_DIR:e.gitDir,GIT_AUTHOR_NAME:`openknowledge`,GIT_AUTHOR_EMAIL:`noreply@openknowledge.local`,GIT_COMMITTER_NAME:`openknowledge`,GIT_COMMITTER_EMAIL:`noreply@openknowledge.local`}).raw(`commit-tree`,a,`-m`,p)).trim();return await i.raw(`update-ref`,`refs/checkpoints/${r}/${c}`,c),c}finally{try{Vl(o)}catch{}try{Vl(s)}catch{}}}async function QS(e,t=`main`){let n=IS(e),r;try{r=await n.raw(`for-each-ref`,`--format=%(objectname)`,`refs/checkpoints/${t}/`)}catch{return[]}let i=r.trim().split(`
9
+ `).filter(e=>e.length>0)}catch{return 0}let r=[],i={server:0,"human-":0,upstream:0};for(let e of n){let t=e.split(`/`);if(t.length<4)continue;let n=t.slice(3).join(`/`);Yu(n).classification===`unknown`&&(n===`server`?(r.push(e),i.server++):n.startsWith(`human-`)?(r.push(e),i[`human-`]++):n===`upstream`&&(r.push(e),i.upstream++))}if(r.length===0)return 0;let a=0;return await MS(e).withMutator(async()=>{for(let e of r)try{await t.raw(`update-ref`,`-d`,e),a++}catch(t){NS.warn({ref:e,err:t},`[shadow-migration] failed to delete legacy ref ${e}`)}}),Vre(a),NS.warn({deleted:a,server:i.server,human:i[`human-`],upstream:i.upstream},`[shadow-migration] deleted ${a} legacy refs: server=${i.server} human-=${i[`human-`]} upstream=${i.upstream}`),a}async function zS(e,t,n,r,i=`main`,a){return Ao(`shadow.commitWip`,{attributes:{"shadow.writer":t.id,"shadow.branch":i}},async()=>MS(e).withMutator(()=>$re(e,t,n,r,i,a?.date)))}async function $re(e,t,n,r,i=`main`,a){let o=z(e.gitDir,`index-wip-${t.id}`),s=`refs/wip/${i}/${t.id}`,c=IS(e),l=n||`.`;try{try{let t=(await c.raw(`rev-parse`,`${s}^{tree}`)).trim();await c.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:o}).raw(`read-tree`,t)}catch(e){let t=e instanceof Error?e.message:String(e);if(!(t.includes(`unknown revision`)||t.includes(`bad revision`)))throw NS.error({ref:s,err:e},`Unexpected error seeding index for ${s}`),e}await c.env({GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree,GIT_INDEX_FILE:o}).raw(`add`,l);let n=(await c.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:o}).raw(`write-tree`)).trim(),i=null;try{i=(await c.raw(`rev-parse`,s)).trim()}catch(e){let t=e instanceof Error?e.message:String(e);if(!t.includes(`unknown revision`)&&!t.includes(`bad revision`))throw NS.error({ref:s,err:e},`Unexpected error resolving ${s}`),e}let u=[`commit-tree`,n,`-m`,r];i&&u.push(`-p`,i);let d={GIT_DIR:e.gitDir,GIT_AUTHOR_NAME:t.name,GIT_AUTHOR_EMAIL:t.email,GIT_COMMITTER_NAME:`openknowledge`,GIT_COMMITTER_EMAIL:`noreply@openknowledge.local`};a&&(d.GIT_AUTHOR_DATE=a,d.GIT_COMMITTER_DATE=a);let f=(await c.env(d).raw(...u)).trim();return await c.raw(`update-ref`,s,f),f}finally{try{Vl(o)}catch{}}}const BS=`index-wip-fanout`;function eie(e){let t=0;try{for(let n of Ll(e.gitDir)){let r=n.startsWith(`${BS}-`),i=n===`${BS}.lock`,a=n.startsWith(`tmp-park-blobs-`);if(!(!r&&!i&&!a))try{Vl(z(e.gitDir,n),{recursive:!0,force:!0}),t++}catch{}}}catch{}return t}async function VS(e,t){return MS(e).withMutator(()=>tie(e,t))}async function HS(e,t,n){let r=IS(e),i=t||`.`;return await r.env({GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree,GIT_INDEX_FILE:n}).raw(`add`,i),(await r.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:n}).raw(`write-tree`)).trim()}async function tie(e,t){let n=z(e.gitDir,BS);try{return await HS(e,t,n)}catch(r){NS.warn({err:r},`[shadow-repo] persistent fan-out index failed — rebuilding from a fresh index`);for(let e of[n,`${n}.lock`])try{Vl(e)}catch{}let i=z(e.gitDir,`${BS}-${gu()}`);try{return await HS(e,t,i)}finally{try{Vl(i)}catch{}}}}async function US(e,t,n,r,i=`main`){return Ao(`shadow.commitWipFromTree`,{attributes:{"shadow.writer":t.id,"shadow.branch":i,"shadow.tree":n.slice(0,8)}},async()=>MS(e).withMutator(()=>nie(e,t,n,r,i)))}async function nie(e,t,n,r,i=`main`){let a=`refs/wip/${i}/${t.id}`,o=IS(e),s=null;try{s=(await o.raw(`rev-parse`,a)).trim()}catch(e){let t=e instanceof Error?e.message:String(e);if(!t.includes(`unknown revision`)&&!t.includes(`bad revision`))throw NS.error({ref:a,err:e},`Unexpected error resolving ${a}`),e}let c=[`commit-tree`,n,`-m`,r];s&&c.push(`-p`,s);let l=(await o.env({GIT_DIR:e.gitDir,GIT_AUTHOR_NAME:t.name,GIT_AUTHOR_EMAIL:t.email,GIT_COMMITTER_NAME:`openknowledge`,GIT_COMMITTER_EMAIL:`noreply@openknowledge.local`}).raw(...c)).trim();return await o.raw(`update-ref`,a,l),l}const WS={id:`file-system`,name:`File System`,email:`file-system@openknowledge.local`},GS={id:`git-upstream`,name:`Git (upstream)`,email:`git@openknowledge.local`},KS={id:`openknowledge-service`,name:`OpenKnowledge (service)`,email:`service@openknowledge.local`},qS=GS;async function JS(e,t,n,r,i=`main`){return Ao(`shadow.commitUpstreamImport`,{attributes:{"shadow.branch":i,"shadow.new_head":r.slice(0,8)}},async()=>rie(e,t,n,r,i))}async function rie(e,t,n,r,i=`main`){return zS(e,qS,t,`${Jee(n,r)}\n\n${zu({v:1,writer_id:qS.id,principal:null,agent_session:null,agent_type:null,client_name:null,client_version:null,label:null,display_name:qS.name,color_seed:qS.id,docs:[]})}`,i)}const YS=KS;async function XS(e,t,n,r=`main`){return zS(e,YS,t,`${qu(`pre-${n.action}`)}\n\n${zu({v:1,writer_id:YS.id,principal:null,agent_session:null,agent_type:null,client_name:null,client_version:null,label:null,display_name:YS.name,color_seed:YS.id,docs:[]})}`,r)}async function ZS(e,t,n){return MS(e).withMutator(()=>iie(e,t,n))}async function iie(e,t,n){let r=n.branch??`main`,i=IS(e),a=gu(),o=z(e.gitDir,`index-checkpoint-${a}`),s=z(e.gitDir,`tmp-checkpoint-blob-${a}`),c=t===`.`?``:t.replace(/^\.\//,``).replace(/\/$/,``),l=c?`${c}/${n.docName}`:n.docName,u=Buffer.byteLength(n.contents,`utf-8`),d;switch(n.kind){case`bridge-merge-loss`:d={kind:`bridge-merge-loss`,docName:n.docName,size:u,metadata:n.metadata};break;case`producer-guard-loss`:d={kind:`producer-guard-loss`,docName:n.docName,size:u,metadata:n.metadata};break;case`observer-a-duplication`:d={kind:`observer-a-duplication`,docName:n.docName,size:u,metadata:n.metadata};break;case`external-change-rescue`:d={kind:`external-change-rescue`,docName:n.docName,size:u,metadata:n.metadata};break;case`defer-exhaustion-loss`:d={kind:`defer-exhaustion-loss`,docName:n.docName,size:u,metadata:n.metadata};break;case`observer-a-apply-loss`:d={kind:`observer-a-apply-loss`,docName:n.docName,size:u,metadata:n.metadata};break;case`bridge-derive-loss`:d={kind:`bridge-derive-loss`,docName:n.docName,size:u,metadata:n.metadata};break;case`bridge-backstop-trip`:d={kind:`bridge-backstop-trip`,docName:n.docName,size:u,metadata:n.metadata};break;case`persistence-reconcile-loss`:d={kind:`persistence-reconcile-loss`,docName:n.docName,size:u,metadata:n.metadata};break}let f=C(d),p=`checkpoint: ${n.label}\n\n${f}`;try{Zo(s,n.contents,`utf-8`);let t=(await i.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:o}).raw(`hash-object`,`-w`,s)).trim();await i.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:o}).raw(`update-index`,`--add`,`--cacheinfo`,`100644,${t},${l}`);let a=(await i.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:o}).raw(`write-tree`)).trim(),c={GIT_DIR:e.gitDir,GIT_AUTHOR_NAME:`openknowledge`,GIT_AUTHOR_EMAIL:`noreply@openknowledge.local`,GIT_COMMITTER_NAME:`openknowledge`,GIT_COMMITTER_EMAIL:`noreply@openknowledge.local`};n.date&&(c.GIT_AUTHOR_DATE=n.date,c.GIT_COMMITTER_DATE=n.date);let u=(await i.env(c).raw(`commit-tree`,a,`-m`,p)).trim();return await i.raw(`update-ref`,`refs/checkpoints/${r}/${u}`,u),u}finally{try{Vl(o)}catch{}try{Vl(s)}catch{}}}async function QS(e,t=`main`){let n=IS(e),r;try{r=await n.raw(`for-each-ref`,`--format=%(objectname)`,`refs/checkpoints/${t}/`)}catch{return[]}let i=r.trim().split(`
10
10
  `).filter(e=>e.length===40);if(i.length===0)return[];let a;try{a=await n.raw(`log`,`--no-walk`,`--author-date-order`,`--format=%H%x00%aI%x00%s%x00%B%x1e`,...i)}catch{return[]}let o=[];for(let e of a.split(``)){let t=e.trimStart();if(!t)continue;let[r=``,i=``,a=``,s=``]=t.split(`\0`),c=Rt(s);if(c?.kind!==`external-change-rescue`)continue;let l=c.docName??``,u=c.size??0;if(!l)try{let e=(await Hne(n,[`ls-tree`,`-r`,`--long`,r]))[0];e&&(u===0&&(u=e.size),l=e.path.replace(/\.mdx?$/,``).split(`/`).slice(-1)[0]??``)}catch{}l&&o.push({docName:l,timestamp:i,size:u,sha:r,label:a.replace(/^checkpoint:\s*/,``),incomingDiskSha:c.metadata.incomingDiskSha})}return o}const $S={maxBridgeMergeLoss:50,maxProducerGuardLoss:50,maxObserverADuplication:50,maxExternalChangeRescue:50,maxDeferExhaustionLoss:50,maxBridgeDeriveLoss:50,maxObserverAApplyLoss:50,maxBridgeBackstopTrip:50,maxPersistenceReconcileLoss:50,maxAutoConsolidation:2,ttlMs:720*60*60*1e3},aie={"bridge-merge-loss":{limit:e=>e.maxBridgeMergeLoss,counter:`deletedBridgeMergeLoss`,applyTtl:!0},"producer-guard-loss":{limit:e=>e.maxProducerGuardLoss,counter:`deletedProducerGuardLoss`,applyTtl:!0},"observer-a-duplication":{limit:e=>e.maxObserverADuplication,counter:`deletedObserverADuplication`,applyTtl:!0},"external-change-rescue":{limit:e=>e.maxExternalChangeRescue,counter:`deletedExternalChangeRescue`,applyTtl:!0},"defer-exhaustion-loss":{limit:e=>e.maxDeferExhaustionLoss,counter:`deletedDeferExhaustionLoss`,applyTtl:!0},"observer-a-apply-loss":{limit:e=>e.maxObserverAApplyLoss,counter:`deletedObserverAApplyLoss`,applyTtl:!0},"bridge-derive-loss":{limit:e=>e.maxBridgeDeriveLoss,counter:`deletedBridgeDeriveLoss`,applyTtl:!0},"bridge-backstop-trip":{limit:e=>e.maxBridgeBackstopTrip,counter:`deletedBridgeBackstopTrip`,applyTtl:!0},"persistence-reconcile-loss":{limit:e=>e.maxPersistenceReconcileLoss,counter:`deletedPersistenceReconcileLoss`,applyTtl:!0},"auto-consolidation":{limit:e=>e.maxAutoConsolidation,counter:`deletedAutoConsolidation`,applyTtl:!1}};async function eC(e,t=`main`,n=$S){return MS(e).withMutator(()=>oie(e,t,n))}async function oie(e,t=`main`,n=$S){let r={scanned:0,deletedBridgeMergeLoss:0,deletedProducerGuardLoss:0,deletedObserverADuplication:0,deletedExternalChangeRescue:0,deletedDeferExhaustionLoss:0,deletedBridgeDeriveLoss:0,deletedObserverAApplyLoss:0,deletedBridgeBackstopTrip:0,deletedPersistenceReconcileLoss:0,deletedAutoConsolidation:0,retained:0},i=IS(e),a;try{a=await i.raw(`for-each-ref`,`--format=%(objectname) %(refname)`,`refs/checkpoints/${t}/`)}catch{return r}let o=a.trim().split(`
11
- `).map(e=>e.trim()).filter(Boolean);if(o.length===0)return r;let s=new Map,c=[];for(let e of o){let t=e.indexOf(` `);if(t<0)continue;let n=e.slice(0,t),r=e.slice(t+1);n.length===40&&(s.set(n,r),c.push(n))}if(r.scanned=c.length,c.length===0)return r;let l;try{l=await i.raw(`log`,`--no-walk`,`--author-date-order`,`--format=%H%x00%aI%x00%B%x1e`,...c)}catch{return r}let u=[];for(let e of l.split(``)){let t=e.trimStart();if(!t)continue;let[n=``,r=``,i=``]=t.split(`\0`);if(!n)continue;let a=Rt(i)?.kind??null,o=Date.parse(r);u.push({sha:n,timestamp:Number.isFinite(o)?o:0,kind:a})}let d=Object.fromEntries(ca.map(e=>[e,[]])),f=0;for(let e of u){if(e.kind===null){f++;continue}d[Nt[e.kind].gcBucket].push(e)}let p=Date.now(),m=[],h=(e,t,i,a=!0)=>{e.sort((e,t)=>t.timestamp-e.timestamp);for(let o=0;o<e.length;o++){let c=e[o];if(!c)continue;let l=o>=t,u=a&&n.ttlMs>0&&c.timestamp>0&&p-c.timestamp>n.ttlMs;if(l||u){let e=s.get(c.sha);e&&(m.push(e),r[i]++)}}};for(let e of ca){let t=aie[e];h(d[e],t.limit(n),t.counter,t.applyTtl)}for(let e of m)try{await i.raw(`update-ref`,`-d`,e)}catch(t){NS.warn({ref:e,err:t},`[checkpoint-gc] failed to delete ${e}`)}return r.retained=f+(r.scanned-m.length-f),r}async function sie(e,t,n,r,i){return r.length===0?null:Ao(`shadow.parkBranch`,{attributes:{"shadow.branch":t,"shadow.new_branch":i??``,"shadow.doc_count":r.length}},async()=>MS(e).withMutator(()=>cie(e,t,n,r,i)))}async function cie(e,t,n,r,i){let a=IS(e),o=z(e.gitDir,`index-park-${t.replace(/\//g,`-`)}`),s=`refs/wip/${t}/${n}`,c=z(e.gitDir,`tmp-park-blobs-${gu()}`);try{Ho(c,{recursive:!0});let n=[],l=[];for(let e=0;e<r.length;e++){let t=r[e];if(!t)continue;let i=z(c,`${e}-state`);Zo(i,t.markdown,`utf-8`),n.push(i),l.push(t.docName);let a=z(c,`${e}-base`);Zo(a,t.diskSnapshot,`utf-8`),n.push(a),l.push(`.park-base/${t.docName}`)}let u=[];for(let t=0;t<n.length;t+=200){let r=n.slice(t,t+200),i=(await a.env({GIT_DIR:e.gitDir}).raw(`hash-object`,`-w`,`--`,...r)).trim().split(`
11
+ `).map(e=>e.trim()).filter(Boolean);if(o.length===0)return r;let s=new Map,c=[];for(let e of o){let t=e.indexOf(` `);if(t<0)continue;let n=e.slice(0,t),r=e.slice(t+1);n.length===40&&(s.set(n,r),c.push(n))}if(r.scanned=c.length,c.length===0)return r;let l;try{l=await i.raw(`log`,`--no-walk`,`--author-date-order`,`--format=%H%x00%aI%x00%B%x1e`,...c)}catch{return r}let u=[];for(let e of l.split(``)){let t=e.trimStart();if(!t)continue;let[n=``,r=``,i=``]=t.split(`\0`);if(!n)continue;let a=Rt(i)?.kind??null,o=Date.parse(r);u.push({sha:n,timestamp:Number.isFinite(o)?o:0,kind:a})}let d=Object.fromEntries(ca.map(e=>[e,[]])),f=0;for(let e of u){if(e.kind===null){f++;continue}d[Nt[e.kind].gcBucket].push(e)}let p=Date.now(),m=[],h=(e,t,i,a=!0)=>{e.sort((e,t)=>t.timestamp-e.timestamp);let o=t;for(;o>0&&o<e.length;){let t=e[o-1],n=e[o];if(!t||!n||t.timestamp!==n.timestamp)break;o++}for(let t=0;t<e.length;t++){let c=e[t];if(!c)continue;let l=t>=o,u=a&&n.ttlMs>0&&c.timestamp>0&&p-c.timestamp>n.ttlMs;if(l||u){let e=s.get(c.sha);e&&(m.push(e),r[i]++)}}};for(let e of ca){let t=aie[e];h(d[e],t.limit(n),t.counter,t.applyTtl)}for(let e of m)try{await i.raw(`update-ref`,`-d`,e)}catch(t){NS.warn({ref:e,err:t},`[checkpoint-gc] failed to delete ${e}`)}return r.retained=f+(r.scanned-m.length-f),r}async function sie(e,t,n,r,i){return r.length===0?null:Ao(`shadow.parkBranch`,{attributes:{"shadow.branch":t,"shadow.new_branch":i??``,"shadow.doc_count":r.length}},async()=>MS(e).withMutator(()=>cie(e,t,n,r,i)))}async function cie(e,t,n,r,i){let a=IS(e),o=z(e.gitDir,`index-park-${t.replace(/\//g,`-`)}`),s=`refs/wip/${t}/${n}`,c=z(e.gitDir,`tmp-park-blobs-${gu()}`);try{Ho(c,{recursive:!0});let n=[],l=[];for(let e=0;e<r.length;e++){let t=r[e];if(!t)continue;let i=z(c,`${e}-state`);Zo(i,t.markdown,`utf-8`),n.push(i),l.push(t.docName);let a=z(c,`${e}-base`);Zo(a,t.diskSnapshot,`utf-8`),n.push(a),l.push(`.park-base/${t.docName}`)}let u=[];for(let t=0;t<n.length;t+=200){let r=n.slice(t,t+200),i=(await a.env({GIT_DIR:e.gitDir}).raw(`hash-object`,`-w`,`--`,...r)).trim().split(`
12
12
  `).map(e=>e.trim()).filter(Boolean);if(i.length!==r.length||i.some(e=>!/^[0-9a-f]{40}$/.test(e)))throw Error(`[shadow] park hash-object returned ${i.length} ids for ${r.length} blobs`);u.push(...i)}for(let t=0;t<l.length;t+=200){let n=[],r=Math.min(t+200,l.length);for(let e=t;e<r;e++)n.push(`--cacheinfo`,`100644,${u[e]},${l[e]}`);await a.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:o}).raw(`update-index`,`--add`,...n)}let d=(await a.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:o}).raw(`write-tree`)).trim(),f=null;try{f=(await a.raw(`rev-parse`,s)).trim()}catch{}let p={v:1,writer_id:KS.id,principal:null,agent_session:null,agent_type:null,client_name:null,client_version:null,label:null,display_name:KS.name,color_seed:KS.id,docs:r.map(e=>e.docName)},m=[`commit-tree`,d,`-m`,`${qee(t,i??t)}\n\n${zu(p)}`];f&&m.push(`-p`,f);let h=(await a.env({GIT_DIR:e.gitDir,GIT_AUTHOR_NAME:`openknowledge`,GIT_AUTHOR_EMAIL:`noreply@openknowledge.local`,GIT_COMMITTER_NAME:`openknowledge`,GIT_COMMITTER_EMAIL:`noreply@openknowledge.local`}).raw(...m)).trim();return await a.raw(`update-ref`,s,h),h}finally{try{Vl(o)}catch{}try{Vl(c,{recursive:!0,force:!0})}catch{}}}async function lie(e,t,n,r){let i=IS(e),a=`refs/wip/${t}/${n}`,o;try{o=(await i.raw(`rev-parse`,a)).trim()}catch{return null}try{return(await i.raw(`log`,`-1`,`--format=%s`,o)).trim().startsWith(`park:`)?{markdown:(await i.raw(`show`,`${o}:${r}`)).trim(),diskSnapshot:(await i.raw(`show`,`${o}:.park-base/${r}`)).trim()}:null}catch(e){throw NS.error({docName:r,ref:a,err:e},`Failed to read parked state for ${r} from ${a}`),e}}async function tC(e,t,n,r=`main`,i,a){return Ao(`shadow.saveVersion`,{attributes:{"shadow.branch":r,"shadow.writer_count":n.length,"shadow.checkpoint_kind":a?.checkpointKind?`auto-consolidation`:`user`}},async()=>MS(e).withMutator(()=>uie(e,t,n,r,i,a)))}async function uie(e,t,n,r=`main`,i,a){let o=IS(e,a?.timeoutMs?{timeoutMs:a.timeoutMs}:void 0),s=t||`.`,c=z(e.gitDir,`index-checkpoint-${gu()}`);try{await o.env({GIT_DIR:e.gitDir,GIT_WORK_TREE:e.workTree,GIT_INDEX_FILE:c}).raw(`add`,s);let t=(await o.env({GIT_DIR:e.gitDir,GIT_INDEX_FILE:c}).raw(`write-tree`)).trim(),l=a?.includeUpstream===!1?n:[...n,GS],u=[],d=new Map;for(let e of l)try{let t=(await o.raw(`rev-parse`,`refs/wip/${r}/${e.id}`)).trim();u.push(t),d.set(e.id,t)}catch{}let f=[...new Set(u)];try{let e=(await o.raw(`for-each-ref`,`--sort=-creatordate`,`--count=1`,`--format=%(objectname)`,`refs/checkpoints/${r}/`)).trim();e&&!f.includes(e)&&f.push(e)}catch{}let p={v:1,writer_id:KS.id,principal:null,agent_session:null,agent_type:null,client_name:null,client_version:null,label:null,display_name:KS.name,color_seed:KS.id,docs:[]},m=`${qu(i?.trim()?i.trim():`Checkpoint version`)}\n\n${zu(p)}`;a?.checkpointKind&&(m+=`\n${C({kind:`auto-consolidation`,docName:null,size:null,metadata:{foldedRefs:a.checkpointKind.foldedRefs,trigger:a.checkpointKind.trigger}})}`);let h=[`commit-tree`,t,`-m`,m];for(let e of f)h.push(`-p`,e);let g={GIT_DIR:e.gitDir,GIT_AUTHOR_NAME:`openknowledge`,GIT_AUTHOR_EMAIL:`noreply@openknowledge.local`,GIT_COMMITTER_NAME:`openknowledge`,GIT_COMMITTER_EMAIL:`noreply@openknowledge.local`};a?.date&&(g.GIT_AUTHOR_DATE=a.date,g.GIT_COMMITTER_DATE=a.date);let _=(await o.env(g).raw(...h)).trim(),v=`refs/checkpoints/${r}/${_}`;return await o.raw(`update-ref`,v,_),await die(o,r,l,d),{checkpointRef:v}}finally{try{Vl(c)}catch{}}}async function die(e,t,n,r){for(let i of n){let n=`refs/wip/${t}/${i.id}`,a=r.get(i.id);if(a!==void 0)try{await e.raw(`update-ref`,`-d`,n,a)}catch{}}}const fie=F(`bridge-loss-detector`),pie=F(`checkpoint`);function mie(e,t,n,r){return e===n||r===t?[]:Be(t,r,r)}function hie(e){let t=Be(e.pendingBody,e.baselineBody,e.rebuiltBody),n=Be(e.pendingBody,e.baselineBody,e.ytextDerivedBody);if(n.length===0)return t;let r=[...t],i=new Set(t);for(let e of n)i.has(e)||(i.add(e),r.push(e));return r}function gie(e){let t=hie(e),n=an(e.pendingBody,e.ytextDerivedBody,e.baselineBody);if(n.length===0)return t;let r=new Set(t),i=[...t];for(let e of n)r.has(e)||(r.add(e),i.push(e));return i}function _ie(e){return(t,n,r=null,i=`agent-undo-derive`)=>{let a=gie(n);if(a.length===0)return;let o=a.reduce((e,t)=>e+t.length,0),s=le(a.join(`
13
13
  `)),c=e.shadow();if(!c){e.ring?.record({event:aS,docName:t,writerId:r,direction:`b`,site:i,lostLen:o,digest:s});return}let l=e.getBranch(),u=e.contentRoot;queueMicrotask(()=>{ZS(c,u,{kind:`bridge-derive-loss`,docName:t,contents:n.restorePayload,label:`Before ${i} content-loss @ ${new Date().toISOString()}`,branch:l,metadata:{lostSubstrings:a}}).then(n=>{e.ring?.record({event:aS,docName:t,writerId:r,direction:`b`,site:i,lostLen:o,digest:s,checkpointSha:n}),console.warn(JSON.stringify({event:`bridge-derive-loss-checkpoint-created`,docName:t,sha:n,kind:`bridge-derive-loss`,site:i,timestamp:new Date().toISOString()}))}).catch(e=>{let n=e instanceof Error?e:Error(String(e));fie.warn({docName:t,err:n},`[bridge-derive-loss] checkpoint write failed`),pie.warn({err:n,"doc.name":t,branch:l,kind:`bridge-derive-loss`},`checkpoint write failed`)})})}}const vie={"agent-write":{mode:`detect`,why:`An agent write can race un-propagated WYSIWYG content; the pre-write baseline excludes the write itself, so only a never-propagated keystroke trips.`},"agent-undo":{mode:`detect`,why:`The Observer-B agent-undo derive; the pre-undo baseline excludes the undo’s own removal, so only a never-propagated keystroke trips.`},"file-watcher":{mode:`detect`,why:`An external disk write overwriting a dirty open doc drops un-propagated content; the pre-write baseline excludes the incoming change itself.`},"rollback-apply":{mode:`suppress`,why:`An explicit restore of a historical version; discarding the current state is the user intent, and that state stays a timeline version.`},"managed-rename":{mode:`suppress`,why:`A rename re-writes the same content at a new path; no content is dropped by construction.`},"park-snapshot":{mode:`suppress`,why:`A read-only snapshot capture that makes no Y.Doc mutation, so no content can be lost.`}};function nC(e){return vie[e]?.mode===`detect`}function rC(e){return e===li}const yie=new Set(_n);function iC(e){return yie.has(e)}function aC(e){return Pi(e)}function oC(e){return za(e)}function sC(e){return rC(e)||iC(e)||aC(e)}function cC(e){return rC(e)||iC(e)}function lC(e){return rC(e)||iC(e)||aC(e)||oC(e)}var uC=class{hocuspocus;seqs=new Map;timers=new Map;log=F(`cc1`);warnedMissing=!1;latestDiskAckSVs=new Map;constructor(e){this.hocuspocus=e}signal(e){let t=this.timers.get(e);t!==void 0&&clearTimeout(t),this.timers.set(e,setTimeout(()=>{this.timers.delete(e),this.broadcast(e)},100))}broadcast(e){try{let t=this.hocuspocus.documents.get(li);if(!t){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found — broadcasts will be dropped until it is materialized`),!0),_S();return}let n=(this.seqs.get(e)??0)+1;this.seqs.set(e,n);let r=dr.parse({v:1,ch:e,seq:n});t.broadcastStateless(JSON.stringify(r)),gS(),OS(e,n),Jne(t.getConnectionsCount())}catch(t){this.log.error({err:t,channel:e},`[cc1] broadcast failed`)}}emitServerInfo(e,t){try{let n=this.hocuspocus.documents.get(li);if(!n){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitServerInfo — dropped`),!0),_S();return}let r=Qi.parse({v:1,ch:T,seq:0,serverInstanceId:e,...t===void 0?{}:{currentBranch:t}});n.broadcastStateless(JSON.stringify(r)),gS(),OS(T,0)}catch(e){this.log.error({err:e},`[cc1] emitServerInfo failed`)}}emitBranchSwitched(e){try{let t=this.hocuspocus.documents.get(li);if(!t){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitBranchSwitched — dropped`),!0),_S();return}let n=(this.seqs.get(`branch-switched`)??0)+1;this.seqs.set(da,n);let r=_i.parse({v:1,ch:da,seq:n,branch:e});t.broadcastStateless(JSON.stringify(r)),gS(),OS(da,n)}catch(e){this.log.error({err:e},`[cc1] emitBranchSwitched failed`)}}emitDiskAck(e,t){if(this.latestDiskAckSVs.delete(e),this.latestDiskAckSVs.set(e,t),this.latestDiskAckSVs.size>1e3){let e=this.latestDiskAckSVs.keys().next().value;e!==void 0&&this.latestDiskAckSVs.delete(e)}try{let n=this.hocuspocus.documents.get(li);if(!n){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitDiskAck — dropped`),!0),_S();return}let r=(this.seqs.get(`disk-ack`)??0)+1;this.seqs.set(Ft,r);let i=Dn.parse({v:1,ch:Ft,seq:r,docName:e,sv:Buffer.from(t).toString(`base64`)});n.broadcastStateless(JSON.stringify(i)),gS(),OS(Ft,r)}catch(t){this.log.error({err:t,docName:e},`[cc1] emitDiskAck failed`)}}getLatestDiskAckSVsAsBase64(){let e={};for(let[t,n]of this.latestDiskAckSVs)e[t]=Buffer.from(n).toString(`base64`);return e}emitConfigValidationRejected(e,t){try{let n=this.hocuspocus.documents.get(li);if(!n){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitConfigValidationRejected — dropped`),!0),_S();return}let r=(this.seqs.get(`config-validation-rejected`)??0)+1;this.seqs.set(la,r);let i=vr.parse({v:1,ch:la,seq:r,docName:e,error:t});n.broadcastStateless(JSON.stringify(i)),gS(),OS(la,r)}catch(t){this.log.error({err:t,docName:e},`[cc1] emitConfigValidationRejected failed`)}}emitConfigIgnoreNestedError(e,t){try{let n=this.hocuspocus.documents.get(li);if(!n){this.warnedMissing||=(this.log.warn({},`[cc1] __system__ document not found at emitConfigIgnoreNestedError — dropped`),!0),_S();return}let r=(this.seqs.get(`config-ignore-nested-error`)??0)+1;this.seqs.set(Bn,r);let i=Zr.parse({v:1,ch:Bn,seq:r,path:e,error:t});n.broadcastStateless(JSON.stringify(i)),gS(),OS(Bn,r)}catch(t){this.log.error({err:t,path:e},`[cc1] emitConfigIgnoreNestedError failed`)}}get subscriberCount(){let e=this.hocuspocus.documents.get(li);return e?e.getConnectionsCount():0}destroy(){for(let e of this.timers.values())clearTimeout(e);this.timers.clear()}};function dC(e){let t=vl(e).toLowerCase();return dn.includes(t)}function fC(e,t){let n=vl(e).slice(1).toLowerCase();return n.length>0&&t.has(n)}function pC(e){let t=e.toLowerCase();for(let n of dn)if(t.endsWith(n))return e.slice(0,-n.length);return e}function mC(e){let t=e.toLowerCase();return t===`.mdx`?`.mdx`:t===`.md`?`.md`:null}function hC(e){return dn.indexOf(e)}const gC=new Map;function _C(e,t){let n=mC(t);if(!n)throw Error(`registerDocExtension: unsupported extension "${t}"`);let r=gC.get(e);if(!r)return gC.set(e,t),{effective:t,changed:!0,shadowed:null};let i=mC(r);return i?i===n?{effective:r,changed:!1,shadowed:null}:hC(n)<hC(i)?(gC.set(e,t),{effective:t,changed:!0,shadowed:r}):{effective:r,changed:!1,shadowed:t}:(gC.set(e,t),{effective:t,changed:!0,shadowed:r})}function vC(e){return gC.get(e)??`.md`}function yC(e){return dC(e)||za(e)?e:`${e}${vC(e)}`}function bC(e,t){let n=vC(t);if(n.length>0&&e.endsWith(n)){let t=e.slice(0,-n.length);if(t.length>0&&t!==e)return t}return null}function xC(e){gC.delete(e)}const SC=`x-request-id`,CC=/^[A-Za-z0-9._-]{1,128}$/;function bie(e){let t=e.headers[SC],n=Array.isArray(t)?t[0]:t;return n!==void 0&&CC.test(n)?n:gu()}const wC=new WeakMap;function xie(e,t){wC.set(e,t)}function TC(e){return wC.get(e)}const EC=()=>F(`http`);let DC=null;function OC(){return DC||=es().createCounter(`ok.api.error.count`,{description:`API error responses by problem type and handler`,unit:`1`}),DC}function G(e,t,n,r,i={}){let a=i.instance??`urn:uuid:${gu()}`;if(wo({"ok.error.instance":a}),e.headersSent||e.writableEnded||e.destroyed){EC().error({event:`api.error.double-write`,instance:a,requestId:TC(e.req),type:n,status:t,handler:i.handler},`errorResponse called after headers already sent — suppressed`),OC().add(1,{type:`urn:ok:error:internal-server-error`,...i.handler?{handler:i.handler}:{}});return}let o={type:n,title:r,status:t,instance:a,detail:i.detail??void 0},s=bi.safeParse(o);if(!s.success){EC().error({event:`api.error.malformed-envelope`,requestId:TC(e.req),issues:s.error.issues,body:o,handler:i.handler,originalStatus:t},`errorResponse produced an invalid ProblemDetails body — emitting fallback`),OC().add(1,{type:`urn:ok:error:internal-server-error`,...i.handler?{handler:i.handler}:{}}),e.writeHead(500,{"Content-Type":`application/problem+json`,"X-Content-Type-Options":`nosniff`}),e.end(JSON.stringify({type:`urn:ok:error:internal-server-error`,title:`Internal server error.`,status:500,instance:a}));return}let c=i.extensions?{...i.extensions,...o}:o;OC().add(1,{type:n,...i.handler?{handler:i.handler}:{}});let l=t>=500?`error`:`warn`;EC()[l]({event:`api.error`,instance:a,requestId:TC(e.req),type:n,status:t,handler:i.handler,detail:i.detail,err:i.cause},r);let u;try{u=JSON.stringify(c)}catch(n){EC().error({event:`api.error.unserializable-body`,requestId:TC(e.req),bodyKeys:Object.keys(c),handler:i.handler,originalStatus:t,instance:a,err:n},`errorResponse wireBody is not JSON-serializable — emitting hardcoded fallback`),OC().add(1,{type:`urn:ok:error:internal-server-error`,...i.handler?{handler:i.handler}:{}}),e.writeHead(500,{"Content-Type":`application/problem+json`,"X-Content-Type-Options":`nosniff`}),e.end(JSON.stringify({type:`urn:ok:error:internal-server-error`,title:`Internal server error.`,status:500,instance:a}));return}e.writeHead(t,{...i.extraHeaders,"Content-Type":`application/problem+json`,"X-Content-Type-Options":`nosniff`}),e.end(u)}function kC(e,t,n,r={}){let i=r.instance??`urn:uuid:${gu()}`,a={type:`error`,problem:{type:t,title:n,status:e,instance:i,detail:r.detail??void 0}},o=fn.safeParse(a);if(!o.success)return EC().error({event:`api.streaming.malformed-envelope`,issues:o.error.issues,body:a,handler:r.handler,originalStatus:e},`streamingProblemEvent produced an invalid StreamingProblemEvent — returning fallback`),OC().add(1,{type:`urn:ok:error:internal-server-error`,...r.handler?{handler:r.handler}:{}}),{type:`error`,problem:{type:`urn:ok:error:internal-server-error`,title:`Internal server error.`,status:500,instance:i}};OC().add(1,{type:t,...r.handler?{handler:r.handler}:{}});let s=e>=500?`error`:`warn`;return EC()[s]({event:`api.streaming.error`,instance:i,type:t,status:e,handler:r.handler,detail:r.detail,err:r.cause},n),a}function AC(e,t){return(n,r,i,a={})=>{if(e.writableEnded||e.destroyed){EC().error({event:`api.streaming.error.suppressed`,requestId:TC(e.req),type:r,status:n,handler:t,detail:a.detail,err:a.cause},`createStreamingErrorWriter called after writableEnded/destroyed — suppressed`),OC().add(1,{type:`urn:ok:error:internal-server-error`,...t?{handler:t}:{}});return}let o=kC(n,r,i,{handler:t,...a});try{e.write(`${JSON.stringify(o)}\n`)}catch(i){EC().error({event:`api.streaming.error.write-failed`,requestId:TC(e.req),type:r,status:n,handler:t,err:a.cause,writeErr:i},`createStreamingErrorWriter: res.write threw — original error preserved in log`)}}}const Sie=[`mine`,`theirs`,`content`,`delete`];function jC(e){return PC(e)===`conflict`}const MC=[`deleted-upstream`,`renamed`,`conflict`];function NC(e){return MC.includes(e)}function PC(e){let t=e.getMap(`lifecycle`).get(`status`);return NC(t)?t:null}var FC=class extends Error{file;name=`DocInConflictError`;constructor(e){super(`Document is in conflict: ${e.file}`),this.file=e.file}};function IC(e,t,n){console.warn(JSON.stringify({event:`doc-in-conflict-write-refused`,handler:n,"doc.name":pC(t.file)})),G(e,409,`urn:ok:error:doc-in-conflict`,`Document is in conflict.`,{handler:n,detail:`The document is in a merge-conflict state. Call conflicts({ kind: "content" }) + resolve_conflict before retrying.`,extensions:{file:t.file,resolutionOptions:Sie}})}const LC=e=>Buffer.byteLength(e,`utf8`);function RC(e){let t=LC(e);return t<=51200?{kind:`inline`,content:e}:{kind:`truncated`,byteLength:t,hint:`Converged content exceeds the inline cap — re-read via exec("cat <doc>") for the full document.`}}function zC(e,t,n){if(e===t)return;let r=LC(t),i=LC(e);return{intendedBytes:r,actualBytes:i,byteDelta:i-r,divergenceType:`${n}-content-mismatch`,currentState:RC(e)}}function BC(e,t="The converged document differs from the bytes you composed. The write landed; `currentState` carries what is in the document now — re-read only if it is truncated."){return{kind:`content-divergence`,intendedBytes:e.intendedBytes,actualBytes:e.actualBytes,byteDelta:e.byteDelta,divergenceType:e.divergenceType,currentState:e.currentState,hint:t}}var VC=class extends Error{file;parseError;name=`FrontmatterMalformedError`;constructor(e){super(`Frontmatter YAML is malformed in ${e.file}: ${e.parseError}`),this.file=e.file,this.parseError=e.parseError}};function HC(e){return e===`top-level value is not a mapping`?`non-mapping-top-level`:e.startsWith(`value at "`)||e.startsWith(`schema validation failed:`)?`schema-rejection`:e.startsWith(`parse threw:`)||e.startsWith(`toJS threw:`)||e.length>0&&e!==`unknown YAML parse error`?`yaml-parse-error`:`unknown`}function UC(e,t,n){let r=HC(t.parseError);console.warn(JSON.stringify({event:`frontmatter-malformed-write-refused`,handler:n,class:r,"doc.name":pC(t.file),parseError:t.parseError})),G(e,400,`urn:ok:error:frontmatter-malformed`,`Frontmatter YAML is malformed.`,{handler:n,detail:`${t.parseError}. Frontmatter must be a top-level YAML mapping. Quote string values containing YAML-significant characters (\`:\`, \`#\`, leading \`-\`), e.g. \`title: "Foo: bar"\`.`,extensions:{file:t.file,parseError:t.parseError}})}let WC=null;function Cie(){return WC||=es().createCounter(`ok.frontmatter.edit_surface_total`,{description:`Count of frontmatter edits by surface. Bounded label: source ∈ {source-mode, mcp-write, file-watcher}.`}),WC}function GC(e){Cie().add(1,{source:e})}const KC=F(`parse-pool`),qC=Math.max(1,Math.min(4,Jl()-1));let JC=null,YC=null,XC=!1;ko(()=>{JC=null,YC=null,XC=!1});function ZC(e){JC||=es().createCounter(`ok.parse_pool.dispatch_total`,{description:`Bridge-intake parse precompute dispatches by mode: offload (worker parse used) vs the inline-* fallback reasons (small doc, pool unavailable, queue saturated, task timeout, worker error).`}),JC.add(1,{mode:e})}function QC(e){YC||=es().createHistogram(`ok.parse_pool.task_ms`,{description:`Wall-clock latency of a completed parse-pool offload (both passes for embed-bearing docs), in milliseconds.`,unit:`ms`}),YC.record(e)}function $C(){XC||(XC=!0,es().createObservableGauge(`ok.parse_pool.queue_depth`,{description:`Parse-pool tasks waiting for a free worker.`}).addCallback(e=>{e.observe(tw.length)}),es().createObservableGauge(`ok.parse_pool.workers`,{description:`Live parse-pool worker threads.`}).addCallback(e=>{e.observe(ew.length)}))}const ew=[],tw=[];let nw=1,rw=null,iw=3e4;function aw(){let e=[new URL(`./parse-worker.mjs`,import.meta.url),new URL(`./parse-worker.ts`,import.meta.url)];try{let t=dl(import.meta.url);e.push(pu(L(I(t.resolve(`@inkeep/open-knowledge-server/parse-worker`)),`parse-worker.mjs`)))}catch{}for(let t of e)try{if(B(fu(t)))return t}catch{}return null}function ow(e){try{let t=new xee(e);t.unref();let n={worker:t,current:null,timer:null};return t.on(`message`,e=>{sw(n,t=>t.resolve(e))}),t.on(`error`,e=>{sw(n,t=>t.reject(e)),cw(n)}),t.on(`exit`,()=>{sw(n,e=>e.reject(Error(`parse worker exited mid-task`))),cw(n)}),n}catch(e){return KC.warn({err:e},`[parse-pool] failed to spawn parse worker`),null}}function sw(e,t){let n=e.current;n!==null&&(e.current=null,e.timer!==null&&(clearTimeout(e.timer),e.timer=null),t(n),lw())}function cw(e){let t=ew.indexOf(e);t!==-1&&ew.splice(t,1)}function lw(){for(;tw.length>0;){let e=ew.find(e=>e.current===null);if(e===void 0&&ew.length<qC){let t=aw(),n=t===null?null:ow(t);n!==null&&(ew.push(n),e=n)}if(e===void 0)break;let t=tw.shift();if(t===void 0)break;uw(e,t)}fw()}function uw(e,t){e.current=t,e.timer=setTimeout(()=>{e.current=null,cw(e),e.worker.terminate(),t.reject(new dw),lw()},iw),e.timer.unref(),e.worker.postMessage(t.task)}var dw=class extends Error{constructor(){super(`parse worker task exceeded ${iw}ms`),this.name=`ParseTaskTimeoutError`}};function fw(){rw===null&&ew.length!==0&&(rw=setTimeout(()=>{if(rw=null,ew.some(e=>e.current!==null)||tw.length>0){fw();return}for(let e of ew.splice(0))e.worker.terminate()},3e4),rw.unref())}function pw(e){let t=aw();if(t===null)return Promise.reject(new mw);$C();let n={task:{...e,id:nw++},resolve:()=>{},reject:()=>{}},r=new Promise((e,t)=>{n.resolve=e,n.reject=t}),i=ew.find(e=>e.current===null);if(i!==void 0)uw(i,n);else if(ew.length<qC){let e=ow(t);if(e===null)return Promise.reject(new mw);ew.push(e),uw(e,n)}else if(tw.length<32)tw.push(n);else return Promise.reject(new hw);return r}var mw=class extends Error{constructor(){super(`parse worker unavailable in this packaging`),this.name=`ParsePoolUnavailableError`}},hw=class extends Error{constructor(){super(`parse pool backlog exceeded 32 tasks`),this.name=`ParsePoolBusyError`}};async function wie(){rw!==null&&(clearTimeout(rw),rw=null);for(let e of tw.splice(0))e.reject(Error(`parse pool destroyed`));let e=ew.splice(0).map(e=>{e.timer!==null&&clearTimeout(e.timer);let t=e.current;return e.current=null,t?.reject(Error(`parse pool destroyed`)),e.worker.terminate()});await Promise.allSettled(e)}async function gw(e,t){let n=await pw({body:e,...t===void 0?{}:{sourcePath:t.sourcePath,recordEmbeds:!0,wantSizes:t.resolveSize!==void 0}});if(!n.ok)throw Error(n.message);if(n.requestedTargets===void 0||n.requestedTargets.length===0)return n.parsedJson;let r=t,i={};for(let e of n.requestedTargets)i[e]={path:r.resolveEmbed(e,r.sourcePath)??null,size:r.resolveSize?.(e,r.sourcePath)??null};let a=await pw({body:e,sourcePath:r.sourcePath,wantSizes:r.resolveSize!==void 0,embedTable:i});if(!a.ok)throw Error(a.message);return a.parsedJson}async function _w(e,t){let{body:n}=At(e);if(n.length<8192){ZC(`inline-small`);return}let r=yu.now();try{let i=await gw(n,t);return ZC(`offload`),QC(yu.now()-r),{rawContent:e,parsedJson:i}}catch(e){e instanceof mw?ZC(`inline-unavailable`):e instanceof hw?ZC(`inline-busy`):e instanceof dw?(ZC(`inline-timeout`),KC.warn({err:e,bodyBytes:n.length},`[parse-pool] offload timed out; parsing inline`)):(ZC(`inline-error`),KC.warn({err:e,bodyBytes:n.length},`[parse-pool] offload failed; parsing inline`));return}}const vw=new WeakMap;let yw=0;function bw(e){let t=vw.get(e);return t||(t={lastUserTxGen:0,settledGen:0,lastUserTxAtMs:null},vw.set(e,t)),t}function xw(e){if(!e||typeof e!=`object`)return!1;let t=e.context;return t!=null&&t.origin===`observer-sync`}function Sw(e){let t=t=>{if(xw(t.origin))return;let n=bw(e);n.lastUserTxGen=++yw,n.lastUserTxAtMs=Date.now()},n=()=>{bw(e).settledGen=++yw};return e.on(`afterTransaction`,t),e.on(`afterAllTransactions`,n),()=>{e.off(`afterTransaction`,t),e.off(`afterAllTransactions`,n)}}const Cw=new WeakMap;function ww(e){let t=Cw.get(e);if(t!==void 0)return t;let n=vw.get(e);return n?n.settledGen>n.lastUserTxGen:!0}function Tw(e,t=Date.now()){let n=vw.get(e);return!n||n.lastUserTxAtMs===null?null:Math.max(0,t-n.lastUserTxAtMs)}const Ew=F(`bridge-watchdog`),Dw=new Map,Ow=1024,kw=new Map,Aw=new Map,jw=new Map;function Mw(e,t){return`${e}::${t}`}function Nw(){let e=process.env.OK_BRIDGE_VIOLATION_DEBOUNCE_S;if(e===void 0)return 60*1e3;let t=Number.parseInt(e,10);return!Number.isFinite(t)||t<=0?60*1e3:t*1e3}function Pw(e,t){return`${e}::${t??`__nodoc__`}`}function Fw(e,t,n=Date.now()){let r=Pw(e,t),i=Dw.get(r),a=Nw();if(i!==void 0&&n-i<a)return!1;if(Dw.size>=Ow)for(let[e,t]of Dw)n-t>=a&&Dw.delete(e);return Dw.set(r,n),!0}function Iw(e,t,n=Date.now()){let r=Mw(e,t),i=kw.get(r),a=Nw();return i!==void 0&&n-i<a?!1:(kw.set(r,n),!0)}function Lw(e,t=Date.now()){let n=e??`__nodoc__`,r=Aw.get(n),i=Nw();if(r!==void 0&&t-r<i)return!1;if(Aw.size>=Ow)for(let[e,n]of Aw)t-n>=i&&Aw.delete(e);return Aw.set(n,t),!0}function Rw(e,t){let n=Lw(e,t);return n?Ew.debug({docName:e},`[bridge-watchdog] Observer A Path B fired (slow-path Y.Text divergence merge)`):hre(),n}function zw(e,t,n=Date.now()){let r=`${e}::${t??`__nodoc__`}`,i=jw.get(r),a=Nw();if(i!==void 0&&n-i<a)return!1;if(jw.size>=Ow)for(let[e,t]of jw)n-t>=a&&jw.delete(e);return jw.set(r,n),!0}function Bw(e,t,n){let r=zw(e,t,n);return r?Ew.debug({site:e,docName:t},`[bridge-watchdog] split-brain re-derive detected`):kre(),r}function Vw(e=process.env){return e.NODE_ENV===`test`||e.OK_BRIDGE_THROW_ON_VIOLATION===`1`}function Hw(e,t){let n=t.resolveEmbed&&t.docName?{resolveEmbed:t.resolveEmbed,resolveSize:t.resolveSize,sourcePath:t.docName}:void 0;return t=>e.serialize(e.parseWithFallback(t,n))}function Uw(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r++;return r}function Ww(e,t,n){let r=r=>{let i=r.filter(e=>Iw(n.site,e,n.nowMs));r.length>0&&Ct(r,e,t,n.docName),i.length>0&&Ew.debug({site:n.site,docName:n.docName,classes:i},`[bridge-watchdog] tolerance classes applied`);for(let e of i)pre(e),console.warn(JSON.stringify({event:`bridge-tolerance-applied`,site:n.site,class:e}))},i=$t(e),a=$t(t);if(i===a)return e!==t&&r(Vt(e,t)),!0;if(n.canonicalizeBody&&Ce(e,t,n.canonicalizeBody))return r([...Vt(e,t),qt]),!0;let o={site:n.site,origin:n.origin,docName:n.docName,ytextSnapshot:e,fragmentMdSnapshot:t,unifiedDiff:` ytext: ${i.slice(0,300)}\n frag: ${a.slice(0,300)}`,stack:Error().stack};if(Vw()&&!n.suppressDevThrow)throw new Vi(o);if(!Fw(n.site,n.docName,n.nowMs))return ore(),!1;are(),Ew.warn({site:n.site,docName:n.docName,ytextBytes:e.length,fragmentBytes:t.length,normalizedYtextBytes:i.length,normalizedFragmentBytes:a.length,firstDivergenceIndex:Uw(i,a)},`[bridge-watchdog] bridge invariant violation at ${n.site}${n.docName?` for '${n.docName}'`:``}`);let s=process.env.OK_TELEMETRY_VERBOSE===`1`;return console.warn(JSON.stringify(ii(o,{verbose:s}))),!1}function Gw(e,t,n,r){let i,a,o;try{i=n.parseToMdast(e).children,a=n.serialize(t),o=n.parseToMdast(a).children}catch(e){return r?.(`parse-error`,e),null}if(!Yw(i)||!Yw(o))return r?.(`missing-position`),null;try{return qw(i,o,{start:i.length>0?Xw(i[0]):0,end:e.length},{start:o.length>0?Xw(o[0]):0,end:a.length},a)}catch(e){return r?.(`missing-position`,e),null}}const Kw=new Set([`blockquote`,`list`,`listItem`]);function qw(e,t,n,r,i){let a=0;for(;a<e.length&&a<t.length&&Qw(e[a],t[a]);)a++;let o=0;for(;o<e.length-a&&o<t.length-a&&Qw(e[e.length-1-o],t[t.length-1-o]);)o++;if(e.length-a-o===1&&t.length-a-o===1){let n=e[a],r=t[a],o=Jw(n,r,i);if(o)return o}let s=a>0?Zw(e[a-1]):n.start,c=o>0?Xw(e[e.length-o]):n.end,l=a>0?Zw(t[a-1]):r.start,u=o>0?Xw(t[t.length-o]):r.end;return{spliceStart:s,spliceEnd:c,newSlice:i.slice(l,u)}}function Jw(e,t,n){if(e.type!==t.type||!Kw.has(e.type)||!(`children`in e)||!(`children`in t))return null;let r=e.children,i=t.children;return r.length===0||i.length===0||!Yw(r)||!Yw(i)||$w({...e,children:[]})!==$w({...t,children:[]})?null:qw(r,i,{start:Xw(e),end:Zw(e)},{start:Xw(t),end:Zw(t)},n)}function Yw(e){for(let t of e){let e=t.position?.start?.offset,n=t.position?.end?.offset;if(typeof e!=`number`||typeof n!=`number`)return!1}return!0}function Xw(e){let t=e.position?.start?.offset;if(typeof t!=`number`)throw Error(`mdast node missing position.start.offset`);return t}function Zw(e){let t=e.position?.end?.offset;if(typeof t!=`number`)throw Error(`mdast node missing position.end.offset`);return t}function Qw(e,t){return $w(e)===$w(t)}function $w(e){return JSON.stringify(e,(e,t)=>e===`position`?void 0:t)}function eT(e,t,n){nv(e,t,e=>{e instanceof Ax&&n.add(e)})}function*tT(e){let t=e._start;for(;t!==null;)yield t,t=t.right}function nT(e,t,n){let r=e.slice(t),i=ov(r.map(e=>e.insertions)),a=ov(r.map(e=>e.deletions)),o=``;for(let e of tT(n)){if(!(e.content instanceof hx))continue;let t=e.content.str,{client:n,clock:r}=e.id;for(let s=0;s<t.length;s++){let c=Jv(n,r+s),l=iv(i,c),u=iv(a,c);!l&&(!e.deleted||u)&&(o+=t[s])}}return o}function rT(e,t,n,r){let i=nT(e,0,n),a=nT(e,t,n);return{diff:i===a?``:As(r,i,a,void 0,void 0,{context:Math.max(i.split(`
14
14
  `).length,a.split(`
@@ -3265,4 +3265,4 @@ native-divergence-injected
3265
3265
  `)){let r=n.trim();if(r===``)continue;if(r.startsWith(`C\0`)){let[,e,t]=r.split(`\0`);o=e&&t?{name:e,email:t}:null;continue}if(!o||!r.endsWith(`.md`)&&!r.endsWith(`.mdx`))continue;let a=z(e,r);if(!Uk(a,t))continue;let s=xV(a,t);i.has(s)||B(a)&&i.set(s,o)}return i}function w9(e){C9();let{contentDir:t,projectDir:n=t,quiet:r=!0,debounce:a=2e3,maxDebounce:o=1e4,gitEnabled:s=!0,commitDebounceMs:c=3e4,wipRef:l=`refs/wip/main`,configHomedirOverride:u,enableTestRoutes:d=!1,shadowRepo:f,contentRoot:p,destroyTimeoutMs:m=1e4,localOpCliArgs:h,authStreamHeartbeatMs:g,skipStateManifestCheck:_=!1,singleDocRelPath:v,ephemeral:y=!1}=e,b=F(`server`),x=new h7,S=()=>x.getActiveBranch(),C=e=>x.getReconciledBase(e),w=(e,t)=>x.setReconciledBase(e,t),T=e=>x.deleteReconciledBase(e),ee=e=>x.switchReconciledBaseScope(e),ne=e=>x.setBatchInProgress(e),re=()=>x.isBatchInProgress();function ie(){let e=To({absPath:Oo(`project`,n),sideline:!1,warn:e=>b.warn({message:e},`[config] could not read project config`)});if(!e.valid){let t=co(e.error)&&e.error.code===`SCHEMA_INVALID`?e.error.issues.filter(e=>e.path.map(String).join(`.`)===`content.attachmentFolderPath`):[];if(t.length>0){let e=t.map(e=>e.message).join(`; `);throw Error(`Invalid content.attachmentFolderPath in project config: ${e}`)}b.warn({},`[config] committed content.attachmentFolderPath unavailable (project config invalid) — using default attachment placement`)}return e.value.content.attachmentFolderPath??`./`}function ae(){let e=To({absPath:Oo(`project-local`,n),sideline:!1,warn:e=>b.warn({message:e},`[config] could not read project-local config`)}),t=Ba(e.value.autoSync);if(t!==null)return{mode:t,source:`config`};e.valid||b.warn({},`[config] project-local autoSync.enabled unavailable (config invalid) — falling back to the committed project default`);let r=To({absPath:Oo(`project`,n),sideline:!1,warn:e=>b.warn({message:e},`[config] could not read project config`)});return r.valid||b.warn({},`[config] committed autoSync.default unavailable (project config invalid) — defaulting to disabled`),{mode:Da(r.value.autoSync?.default)??`off`,source:`committed-default`}}function oe(){let e=To({absPath:Oo(`project`,n),sideline:!1,warn:e=>b.warn({message:e},`[config] could not read project config for linter`)}).value.contentRules;return e?te(e):ct}function se(){return To({absPath:Oo(`project`,n),sideline:!1,warn:e=>b.warn({message:e},`[config] could not read project config for link validation`)}).value.validation?.links??`warning`}function ce(){return iP(n,{configHomedirOverride:u,onWarn:e=>b.warn({message:e},`[config] could not read project-local config`)})}function le(){let e=To({absPath:Oo(`project-local`,n,u),sideline:!1,warn:e=>b.warn({message:e},`[config] could not read project-local config`)});return e.valid?e.value.linkPreviews?.enabled===!0:!1}function ue(e){return`${LN(e.baseUrl)}|${e.model}|${e.dimensions??`auto`}`}function de(e){let t;if(e===`__config__/project`||e===`__local__/project`){let n=ae();t=n.mode,_t?.setMode(n.mode,n.source).catch(t=>{b.warn({err:t,mode:n.mode,docName:e},`[sync] failed to apply autoSync mode from config`)})}let n=ce();Fe.applyConfig({enabled:n.enabled,providerFingerprint:ue(n)}),e===`__config__/project`&&ke?.signal(`lint-config`),b.info({docName:e,autoSyncMode:t,semanticEnabled:n.enabled},`[config] applied persisted config to in-process consumers`)}$o();let fe=gu(),pe=DA(n),me=new od({localDir:pe,log:F(`acp-registry`)}),he=new Qu(pe,F(`acp-permissions`));if(Es(pe,{port:e.port??0,worktreeRoot:n,kind:e.lockKind??`interactive`,capabilities:[`http`,`ws`]}),!_)try{i9({lockDir:pe,shadowRepoDir:Nu(n)})}catch(e){throw gs(pe),e}let ge=wi(),_e=(e,t)=>ge.resolveEmbed(e,t),ve=(e,n)=>{let r=ge.resolveEmbed(e,n);if(!r&&e.includes(`/`)&&(r=e.replace(/^\.?\//,``)),!r)return null;let i=z(t,r);if(!Vk(i,z(t)))return null;try{let e=Ul(i);return e.isFile()?e.size:null}catch{return null}},ye,be,xe,Se,Ce,we,Te,Ee,De,Oe,ke=null,Ae=null,je=null,Me=null,Ne=null,Pe=ce(),Fe=new hP({loadEmbedder:e.embedderLoader??(()=>{let t=ce();return UN({keyStore:e.embeddingsKeyStore??null,projectDir:n,config:{baseUrl:t.baseUrl,model:t.model,dimensions:t.dimensions}})}),cacheDir:L(DA(n),`embeddings`),enabled:Pe.enabled,providerFingerprint:ue(Pe)}),Ie=null,Le=new Set,Re=!1,ze=[],Be,Ve,He,Ue=new Promise((e,t)=>{Ve=e,He=t});function We(e){ke?.signal(e)}let Ge=null;function Ke(){Ge!==null&&clearTimeout(Ge),Ge=setTimeout(()=>{Ge=null,be.saveToDisk().catch(e=>{F(`backlinks`).warn({err:e},`Failed to persist debounced cache`)}),xe.saveToDisk().catch(e=>{F(`tag-index`).warn({err:e},`Failed to persist debounced tag snapshot`)})},2e3)}let qe=null,Je=!1,Ye=()=>{try{Y7(n,Xe.entries())}catch(e){b.warn({err:e},`[removed-docs-journal] failed to persist removal journal`)}},Xe=new Bge(void 0,{onEviction:()=>Ire(),onSizeChange:e=>Lre(e),onMutate:()=>{!Je||qe!==null||(qe=setTimeout(()=>{qe=null,Ye()},2e3))}});for(let[e,r]of Uge(n))sC(e)||BJ(e)&&([`.md`,`.mdx`].some(n=>{let r=z(t,`${e}${n}`);return Vk(r,z(t))&&B(r)})||Xe.restore(e,r));Je=!0;let Ze=(e,t)=>{sC(e)||Xe.setRenamed(e,t)},Qe=e=>{if(!sC(e)){if(Xe.peek(e)?.kind===`renamed`){console.info(JSON.stringify({event:`recently-removed-docs-unpaired-delete-suppressed`,docName:e,source:`watcher-delete`}));return}Xe.setDeleted(e)}},$e=e=>{sC(e)||Xe.delete(e)};try{ye=YF({projectDir:n,contentDir:t,singleDocRelPath:v,onAfterRebuild:()=>{be.rebuildFromDisk(S()).catch(e=>{F(`server-factory`).warn({err:e},`[content-filter] backlink-index rebuild failed after onAfterRebuild`)}),xe.init().catch(e=>{F(`server-factory`).warn({err:e},`[content-filter] tag-index rebuild failed after onAfterRebuild`)}),WV(ht).then(({prunedFiles:e,prunedFolders:t})=>{let n=e+t;n>0?F(`server-factory`).info({pruned:n,prunedFiles:e,prunedFolders:t},`[content-filter] reconciled file indexes after onAfterRebuild`):F(`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=>{F(`server-factory`).warn({err:e},`[content-filter] file index reconcile failed after onAfterRebuild`)})}}),be=new NB({projectDir:n,contentDir:t,contentFilter:ye}),xe=new x9({projectDir:n,contentDir:t,contentFilter:ye}),(async()=>{await xe.loadFromDisk()?await xe.reconcileWithDisk():await xe.init()})().catch(e=>{F(`server-factory`).warn({err:e},`[server-factory] tag-index warm boot failed; continuing with empty index`)}),Se={current:f},Ce=s?Dge({getShadow:()=>Se.current??null,getCurrentBranch:()=>gt?.getLastKnownBranch()??null,contentRoot:p??``,projectGitDir:Mu(n)??void 0,isWriterLive:e=>{if(!je&&!De)return F(`server-factory`).debug({writerId:e},`[server-factory] isWriterLive called before liveness deps populated — treating writer as dead`),!1;if(je?.getPresenceMap()[e])return!0;let t=e.startsWith(`agent-`)?e.slice(6):e;for(let e of De?.sessionsForConnection(t)??[])return!0;return!1}}):void 0,we=H7({contentDir:t,projectDir:n,gitEnabled:s,commitDebounceMs:c,wipRef:l,shadowRef:Se,ephemeral:y,contentRoot:p,backlinkIndex:be,configHomedirOverride:u,getCurrentBranch:()=>gt?.getLastKnownBranch()??null,resolveEmbed:_e,resolveSize:ve,getPrincipal:()=>Ie,onAgentCommit:()=>ke?.signal(`session-activity`),onFlushCommit:()=>Ce?.noteFlushCommit(),onDiskFlush:(e,t,n,r)=>{ke?.emitDiskAck(e,t),!sC(e)&&mA(r,n)&&(Me?.(),We(`files`))},onConfigRejected:(e,t)=>ke?.emitConfigValidationRejected(e,t),onConfigPersisted:de,isRecentlyRemoved:e=>Xe.has(e),mdManager:e.mdManager,getLossRing:()=>Te,durabilityState:x}),Ee=new Uhe({quiet:r,debounce:a,maxDebounce:o,extensions:[we.extension]});let i=Ee;ze.push(Oie(()=>i.documents.size),kie(()=>we.getQueueDepths()),ST(()=>{let e=0;for(let t of i.documents.values())e+=t.directConnectionsCount;return{websocket:i.getConnectionsCount()-e,direct:e}})),wT(),y||(Ne=Rge({getLoadedDocuments:()=>i.documents,forceStore:(e,t)=>we.forceStore(e,t),getBase:e=>x.getReconciledBase(e),isBatchActive:()=>x.isBatchInProgress(),peekInFlight:e=>x.peekInFlightFlush(e),readDiskBytes:e=>{let n=Hk(e,t),r,i;try{r=zl(n),i=Ul(r).size}catch(t){let n=ks(t);if(n===`ENOENT`)return null;throw n===`ELOOP`?new W7(`symlink cycle at content path: ${e}`):t}if(!Uk(r,t))throw new W7(`symlink-escape: ${n} resolves outside the content dir`);if(i>524288)throw new W7(`document exceeds the open byte limit: ${e}`);try{return V(r,`utf-8`)}catch(e){if(ks(e)===`ENOENT`)return null;throw e}},graceMs:e.stalenessGraceMs,sweepIntervalMs:e.stalenessSweepIntervalMs}));let m=Ee.shouldUnloadDocument.bind(Ee);Ee.shouldUnloadDocument=e=>{if(Le.has(e)||Re&&m(e))return!0;let t=e.name;return sC(t)||C(t)!==void 0||e.getXmlFragment(`default`).length!==0||e.getText(`source`).length!==0?!1:m(e)},Be=async e=>{Le.add(e);try{await Ee.unloadDocument(e)}finally{Le.delete(e)}},ke=new uC(Ee),Ae=new VD(Ee),je=new HD(Ee),De=new _E(Ee);let _=De;ze.push(CT(()=>({active:_.liveSessionCount,limit:_.sessionLimit})));let w=y7({backlinkIndex:be,tagIndex:xe,signalChannel:We});Ee.configuration.extensions.push(w),Ee.configuration.extensions.push({__kind:`principal-auth`,async onAuthenticate(e){let t=e.token,n=QJ(t),r=n?.expectedServerInstanceId;if(typeof r==`string`&&r.length>0&&r!==fe)throw new ZJ(`server-instance-mismatch`,`server instance mismatch: client claimed ${r}, this server is ${fe}`);let i=n?.expectedBranch,a=S();if(typeof i==`string`&&i.length>0&&i!==a)throw new ZJ(`branch-mismatch`,`branch mismatch: client claimed ${i}, server is on ${a}`);if(!n)return;let o=e.context;typeof n.principalId==`string`&&(Ie&&n.principalId===Ie.id?o.principalId=Ie.id:Ie?console.warn(JSON.stringify({event:`principal-token-mismatch`,claimed:n.principalId,loaded:Ie.id})):o.principalId=n.principalId),typeof n.tabSessionId==`string`&&(o.tabSessionId=n.tabSessionId),o.kind=`human`}}),Ee.configuration.extensions.push({__kind:`config-doc-admission-guard`,async onAuthenticate(e){if(!iC(e.documentName)&&!aC(e.documentName))return;let t=e.request,n=t.socket?.remoteAddress;if(n!==void 0&&!oW(n))throw Error(`config-doc admission requires loopback peer (peer=${n}, doc=${e.documentName})`);let r=e.requestHeaders,i=(r&&typeof r.get==`function`?r.get(`host`):null)??t.headers?.host??void 0;if(!sW(i))throw Error(`config-doc admission requires loopback Host header (host=${i??`<absent>`}, doc=${e.documentName})`)}});let T=z(t);function ee(e){if(!BJ(e))return null;let t=z(T,yC(e));return Vk(t,T)?t:null}Ee.configuration.extensions.push({__kind:`removal-redirect-guard`,async onAuthenticate(e){await Vge(e.documentName,{recentlyRemovedDocs:Xe,resolveFilePath:ee,fileExists:B})}}),Ee.configuration.extensions.push({__kind:`doc-lineage-guard`,async onAuthenticate(e){let t=QJ(e.token);oge(e.documentName,t?.expectedDocLineageEpoch,{getLoadedDoc:e=>Ee.documents.get(e)})}}),Ee.configuration.extensions.push({__kind:`system-doc-broadcast-guard`,async beforeHandleMessage(e){if(e.documentName!==`__system__`)return;let t=new P5(e.update);if(t.readVarString(),t.readVarUint()===G5.BroadcastStateless)throw Error(`inbound BroadcastStateless on ${li} rejected — server-only channel`)}});let te=HJ({hocuspocus:Ee,durabilityState:x,sessionManager:De,contentDir:t,contentFilter:ye,serverInstanceId:fe,getFileIndex:()=>ht?ht.getFileIndex():new Map,getAttachmentFolderPath:ie,getAllFilesIndex:()=>ht?ht.getAllFilesIndex():new Map,getFileIndexGeneration:()=>ht?.getFileIndexGeneration()??0,mutateFileIndex:e=>ht?.mutateFileIndex(e),getFolderIndex:()=>ht?ht.getFolderIndex():new Map,getAliasMap:()=>ht?ht.getAliasMap():new Map,getFolderAliasIndex:()=>ht?ht.getFolderAliasIndex():new Map,rescanFiles:()=>ht?.rescanFromDisk(),enableTestRoutes:d,shadowRef:Se,flushGitCommit:()=>we.flushPendingGitCommit(),flushContributors:()=>we.flushContributors(),getCurrentBranch:()=>gt?.getLastKnownBranch()??null,getDiskAckSVs:()=>ke?.getLatestDiskAckSVsAsBase64()??{},contentRoot:p,backlinkIndex:be,tagIndex:xe,signalChannel:We,agentFocusBroadcaster:Ae,agentPresenceBroadcaster:je,onAgentWrite:e.onAgentWrite,getSyncEngine:()=>_t,localOpCliArgs:h,authStreamHeartbeatMs:g,projectDir:n,resolveEmbed:_e,getBridgeLossReporter:()=>Oe,getPrincipal:()=>Ie,acpRegistry:me,loadAcpCustomAgents:()=>sd(pe,F(`acp-registry`)),homeDirOverride:u,forceUnloadDocument:Be,ready:Ue,recentlyRemovedDocs:Xe,serializeDoc:E,evictManagedArtifactLkg:e=>{we.managedArtifactCtx.lkgCache.delete(e)},semanticSearch:Fe,getSemanticSimilarityFloor:()=>ce().similarityFloor,getLinterBaseConfig:()=>oe(),getLinksValidationSetting:()=>se(),getLinkPreviewsEnabled:le,embeddingsSecretsFile:XN(u),readSemanticProviderConfig:ce,ephemeral:y,onReferencedAssetsCacheInvalidator:e=>{Me=e}});Ee.configuration.extensions.push(te);let ne=To({absPath:Oo(`project`,n),sideline:!1,warn:e=>b.warn({message:e},`[config] could not read project config for bridge guards`)}),re=ne.value.bridge.deferGuard.enabled,ae=ne.value.bridge.fixedPoint.enabled,ue=ne.value.bridge.preDrain.enabled;Te=ne.value.lossCapture.enabled?new Fne({projectDir:n,maxBytes:ne.value.lossCapture.maxBytes}):void 0,ne.value.bridge.lossDetector.enabled&&(Oe=_ie({shadow:()=>Se.current,ring:Te,getBranch:()=>gt?.getLastKnownBranch()??`main`,contentRoot:p??``}),De.attachBridgeLossReporter(Oe)),Ee.configuration.extensions.push(Z7({mdManager:So,schema:xo,shadowRef:Se,contentRoot:p,getCurrentBranch:()=>gt?.getLastKnownBranch()??null,resolveEmbed:_e,resolveSize:ve,deferGuardEnabled:re,lossDetectorEnabled:ne.value.bridge.lossDetector.enabled,fixedPointBackstopEnabled:ae,preDrainEnabled:ue,lossRing:Te})),Ee.configuration.extensions.push(D_e()),Ee.configuration.extensions.push(age({getSyncEngine:()=>_t,projectDir:n,contentDir:t}))}catch(e){for(let e of ze.splice(0))e();throw Ne?.dispose(),Ne=null,gs(pe),e}let et=null,tt=new Map,nt=[];function rt(e,t){let n=z(e,`rescue`),r=z(n,yC(t));return Vk(r,n)?r:null}function E(e){let t=Ee.documents.get(e);return t?$B(t):null}let it=(e,t)=>XB(x,Ee,e,t,_e,ve,Oe);function at(e){if(!jC(e)||_t?.getConflicts().some(r=>m7(r,e.name,n,t)))return;let r=e.getMap(`lifecycle`);r.delete(`status`),r.delete(`reason`)}let ot=e=>{if(!e)return;let t=`[[${e}]]`;for(let[n]of Ee.documents){if(sC(n))continue;let r=Ee.documents.get(n);if(!r)continue;let i=r.getText(`source`).toString();if(i.includes(t))try{r.transact(()=>{HB(r,i,_e,n)},VB)}catch(t){b.error({err:t,docName:n,assetBasename:e},`[asset-event] failed to re-render ${n} for asset basename ${e}`)}}},st=null,lt=e=>{e&&(st===null&&(st=new Set,setImmediate(()=>{let e=st;if(st=null,e)try{for(let t of e)ot(t)}catch(t){b.error({err:t,basenames:[...e]},`[asset-event] dedup rerender pass crashed`)}})),st.add(e))};function ut(e){switch(e.kind){case`rename`:return e.newDocName;case`asset-create`:case`asset-delete`:case`folder-create`:case`folder-delete`:case`file-create`:case`file-update`:case`file-delete`:return e.relativePath;case`create`:case`update`:case`delete`:case`conflict`:return e.docName;default:return rV(e)}}async function dt(e){try{switch(e.kind){case`create`:b.info({docName:e.docName},`[reconcile] create: ${e.docName}`),be.updateDocumentFromMarkdown(e.docName,e.content),Ke(),xe.updateDocumentFromMarkdown(e.docName,e.content),We(`files`),We(`backlinks`),We(`graph`),We(`tags`),$e(e.docName);break;case`update`:{let{docName:t,content:n}=e,r=Ee.documents.get(t);if(!r){be.updateDocumentFromMarkdown(t,n),Ke(),xe.updateDocumentFromMarkdown(t,n),We(`backlinks`),We(`graph`),We(`tags`);return}let i=C(t)??``,a=E(t)??i,o=KB({docName:t,base:i,ours:a,theirs:n}),s=uV(i).slice(0,6),c=uV(a).slice(0,6),l=uV(n).slice(0,6);switch(b.info({docName:t,base:s,ours:c,theirs:l,result:o.kind},`[reconcile] ${t} base=${s} ours=${c} theirs=${l} result=${o.kind}`),o.kind){case`noop`:at(r),be.updateDocumentFromMarkdown(t,n),Ke(),xe.updateDocumentFromMarkdown(t,n),We(`backlinks`),We(`graph`),We(`tags`);break;case`clean`:try{it(t,o.newContent),w(t,o.newContent),dS(),at(r),be.updateDocumentFromMarkdown(t,n),Ke(),xe.updateDocumentFromMarkdown(t,n),We(`backlinks`),We(`graph`),We(`tags`)}catch(e){b.error({err:e,docName:t},`[reconcile] failed to apply clean content to Y.Doc for ${t}`),w(t,n),at(r)}break;case`merged`:try{it(t,o.newContent),w(t,n),dS(),at(r),be.updateDocumentFromMarkdown(t,n),Ke(),xe.updateDocumentFromMarkdown(t,n),We(`backlinks`),We(`graph`),We(`tags`)}catch(e){b.error({err:e,docName:t},`[reconcile] failed to apply merged content to Y.Doc for ${t}`),w(t,n),at(r)}break;case`conflicts`:try{it(t,o.newContent),w(t,o.newContent),dS(),fS(),be.updateDocumentFromMarkdown(t,n),Ke(),xe.updateDocumentFromMarkdown(t,n),We(`backlinks`),We(`graph`),We(`tags`)}catch(e){b.error({err:e,docName:t},`[reconcile] failed to apply conflict content to Y.Doc for ${t}`),w(t,n)}{let e=r.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,`merged-with-markers`)}break;case`refused`:{fS();let e=r.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,o.reason);break}}break}case`delete`:{let{docName:t}=e,n=Ee.documents.get(t);if(!n){be.deleteDocument(t),Ke(),xe.deleteDocument(t),We(`files`),We(`backlinks`),We(`graph`),We(`tags`),Qe(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));return}let r=C(t)??``,i=E(t)??``,a=i!==r;if(a&&Se.current){let e=Se.current,n=gt?.getLastKnownBranch()??`main`;queueMicrotask(()=>{ZS(e,p??``,{kind:`external-change-rescue`,docName:t,contents:i,label:`External change recovered @ ${new Date().toISOString()}`,branch:n,metadata:{incomingDiskSha:``}}).then(()=>{mS(),b.info({docName:t},`[reconcile] rescue checkpoint saved (delete): ${t}`)}).catch(e=>{b.error({docName:t,err:e},`[reconcile] rescue checkpoint write failed: ${t}`)})})}n.getMap(`lifecycle`).set(`status`,`deleted-upstream`),T(t),be.deleteDocument(t),Ke(),xe.deleteDocument(t),b.info({docName:t,isDirty:a},`[reconcile] delete: ${t} (dirty=${a})`),Ee.closeConnections(t),await Be(n),We(`files`),We(`backlinks`),We(`graph`),We(`tags`),Qe(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));break}case`rename`:{let{oldDocName:t,newDocName:n,content:r}=e,i=Ee.documents.get(t);if(T(t),w(n,r),be.renameDocument(t,n,r),Ke(),xe.renameDocument(t,n,r),i){let e=i.getMap(`lifecycle`);e.set(`status`,`renamed`),e.set(`newPath`,n)}b.info({oldDocName:t,newDocName:n},`[reconcile] rename: ${t} → ${n}`),We(`files`),We(`backlinks`),We(`graph`),We(`tags`),Ze(t,n),console.info(JSON.stringify({event:`recently-removed-docs-populate`,from:t,to:n,kind:`renamed`,source:`watcher-rename`}));break}case`conflict`:{let{docName:t}=e,n=Ee.documents.get(t);if(!n)return;let r=E(t);r===null?b.warn({docName:t},`[reconcile] case 'conflict': serializeDoc returned null for ${t}; reconciledBase snapshot skipped — post-resolution reconcile may degrade to 3-way merge`):w(t,r);let i=n.getMap(`lifecycle`);i.set(`status`,`conflict`),i.set(`reason`,`conflict-markers`),b.info({docName:t},`[reconcile] conflict markers detected: ${t}`);break}case`asset-create`:ge.add(e.relativePath),We(`files`),lt(gl(e.relativePath));break;case`asset-delete`:ge.remove(e.relativePath),We(`files`),lt(gl(e.relativePath));break;case`folder-create`:case`folder-delete`:We(`files`);break;case`file-create`:case`file-update`:case`file-delete`:We(`files`);break;default:rV(e)}}catch(t){let n=ut(e);b.error({err:t,kind:e.kind,label:n},`[reconcile] failed to handle ${e.kind} for ${n}`)}}let ft=[];async function pt(e){if(re()){ft.push(e);return}await dt(e)}async function mt(){let e=ft.splice(0,ft.length);for(let t of e)await dt(t)}let ht=null,gt=null,_t=null,yt=null;async function bt(e){if(Ee.documents.size===0)return;let t=!1,n=new Promise(e=>{Ee.configuration.extensions.push({async afterUnloadDocument({instance:n}){!t&&n.getDocumentsCount()===0&&(t=!0,e())}})}),r=Array.from(Ee.documents.keys());Ee.closeConnections(),Ee.flushPendingStores();for(let e of Ee.documents.values())e.getConnectionsCount()===0&&Ee.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 i,a=new Promise((n,a)=>{i=setTimeout(()=>{t=!0;let n=Array.from(Ee.documents.keys()),i=[],o=[];if(Se.current){for(let e of n)if(!sC(e))try{let t=E(e);if(t===null){b.warn({docName:e},`[rescue] skipping ${e} — document dropped from map mid-rescue`),o.push(e);continue}let n=rt(Se.current.gitDir,e);if(!n){b.warn({docName:e,gitDir:Se.current.gitDir},`[rescue] path-traversal guard rejected docName: ${e}`),o.push(e);continue}Ml(I(n),{recursive:!0}),Gl(n,t,`utf-8`),mS(),i.push(e),b.info({docName:e},`[rescue] rescue buffer saved on flush timeout: ${e}`)}catch(t){o.push(e),b.error({err:t,docName:e},`[rescue] failed to write rescue buffer for ${e}`)}}else b.warn({stillLoadedCount:n.length},`[rescue] shadow repo unavailable at flush timeout — ${n.length} doc(s) will be lost: [${n.join(`, `)}]`),o.push(...n);let s=i.length>0||o.length>0?` — rescued [${i.join(`, `)}]${o.length>0?`, lost [${o.join(`, `)}]`:``}`:``;a(Error(`flushAllStoresAndWait timeout after ${e}ms — ${n.length}/${r.length} docs did not unload: [${n.join(`, `)}]${s}`))},e)});try{await Promise.race([n,a])}finally{i!==void 0&&clearTimeout(i)}}async function xt(){return yt||(yt=(async()=>{let e=Date.now(),t=[];Re=!0;for(let e of ze.splice(0))e();try{await Ne?.dispose()}catch(e){b.warn({err:e},`[server] staleness watchdog drain failed during destroy`)}Ne=null;try{Ds(pe)}catch(e){b.warn({err:e},`[server] failed to mark server.lock draining`)}if(Ge!==null&&(clearTimeout(Ge),Ge=null),xe.close(),qe!==null&&(clearTimeout(qe),qe=null),Je)try{Y7(n,Xe.entries())}catch(e){b.warn({err:e},`[removed-docs-journal] failed to persist removal journal during shutdown`),t.push({phase:`removed-docs-journal-flush`,error:String(e)})}let r,i=await Promise.race([Ue.then(()=>`completed`,e=>(b.debug({err:e},`[server] init incomplete during shutdown`),`failed`)),new Promise(e=>{r=setTimeout(()=>e(`timeout`),5e3)})]);r!==void 0&&clearTimeout(r),i===`timeout`&&b.warn({},`[server] init did not complete within 5s during shutdown`);let a=Ee.documents.size;Ce?.destroy();try{try{try{gt&&=(await gt.unsubscribe(),null),ht&&=(await ht.unsubscribe(),null);for(let{docName:e,cleanup:t}of nt)try{await t()}catch(t){b.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)}),b.error({err:e},`[server] shutdown phase-1 watcher unsubscribe failed`)}try{ke?.destroy(),je?.destroy(),et&&=(await et.disconnect(),null);for(let[e,t]of tt)try{await t.disconnect()}catch(t){b.warn({err:t,docName:e},`[server] failed to disconnect ${e} during shutdown`)}tt.clear()}catch(e){t.push({phase:`cc1-teardown`,error:e instanceof Error?e.message:String(e)}),b.error({err:e},`[server] shutdown phase-1b CC1 teardown failed`)}try{await De.closeAll()}catch(e){t.push({phase:`agent-session-drain`,error:e instanceof Error?e.message:String(e)}),b.error({err:e},`[server] shutdown phase-2 agent session drain failed`)}try{await wie()}catch(e){t.push({phase:`parse-pool-teardown`,error:e instanceof Error?e.message:String(e)}),b.error({err:e},`[server] shutdown phase-2b parse pool teardown failed`)}try{await bt(m)}catch(e){t.push({phase:`flush-all-stores`,error:e instanceof Error?e.message:String(e)}),b.error({err:e},`[server] shutdown phase-3 flush failed`)}let e;try{await Promise.race([(async()=>{await we.flushPendingGitCommit(),await we.waitForPendingCommits()})(),new Promise((t,n)=>{e=setTimeout(()=>n(Error(`L2 git flush timeout`)),m)})])}catch(e){t.push({phase:`git-commit-flush`,error:e instanceof Error?e.message:String(e)}),b.error({err:e},`[server] shutdown phase-4 git commit flush failed`)}finally{e!==void 0&&clearTimeout(e)}try{_t&&=(await _t.destroy(),null)}catch(e){t.push({phase:`sync-engine-stop`,error:e instanceof Error?e.message:String(e)}),b.error({err:e},`[server] shutdown sync-engine-stop failed`)}}finally{if(Se.current){try{let e=(await ls({baseDir:n,timeout:{block:5e3}}).revparse(`HEAD`)).trim();e&&Gl(z(Se.current.gitDir,`last-known-head`),e,`utf-8`)}catch{}try{Zre(Se.current)}catch(e){t.push({phase:`shadow-repo-release`,error:e instanceof Error?e.message:String(e)}),b.error({err:e},`[server] shutdown phase-5 destroyShadowRepo failed`)}}let r=Date.now()-e;t.length===0?b.info({documentCount:a,durationMs:r},`[server] shutdown flushed ${a} documents in ${r}ms`):b.warn({documentCount:a,durationMs:r,phaseErrors:t},`[server] shutdown flushed ${a} documents in ${r}ms with ${t.length} phase error(s)`)}}finally{try{gs(pe,{deferUnlinkToExit:!0})}catch(e){t.push({phase:`server-lock-release`,error:e instanceof Error?e.message:String(e)}),b.error({err:e},`[server] shutdown phase-6 releaseServerLock failed`)}try{await Qo()}catch(e){t.push({phase:`telemetry-shutdown`,error:e instanceof Error?e.message:String(e)})}}})(),yt)}let St=[];async function Ct(){try{Ie=await G7(n),b.info({principalId:Ie.id},`[server] principal loaded`)}catch(e){b.warn({err:e},`[server] principal load failed — browser writes will use SERVICE_WRITER`)}if(!Se.current)try{Se.current=await RS(n),b.info({gitDir:Se.current.gitDir},`[server] history repo initialized at ${Se.current.gitDir}`)}catch(e){b.error({err:e},`[server] history repo init failed`),St.push(`shadow-repo`)}if(Se.current){let e=null;try{e=$W(Se.current.gitDir),SG(Se.current.gitDir,e),iG(Se.current.gitDir,e),b.info({entries:e.byTo.size},`[server] rename log loaded (${e.byTo.size} entries)`)}catch(e){b.warn({err:e},`[rename-log] boot-time load/sweep failed; rename history unavailable`)}if(e){let t=1e4;try{await Promise.race([CG(Se.current,e,{rebuild:!0}),new Promise((e,n)=>setTimeout(()=>n(Error(`boot-time GC exceeded ${t}ms`)),t))])}catch(e){b.warn({err:e},`[rename-log] boot-time GC/rebuild failed; index loaded without GC`)}}try{await Ce?.runBootMaintenance()}catch(e){b.warn({err:e},`[shadow-maintenance] boot maintenance failed (non-fatal)`)}}if(Se.current)try{await IS(Se.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`)){b.warn({},`[server] history repo appears corrupted — reinitializing`);try{Se.current=await RS(n)}catch(e){b.error({err:e},`[server] history repo reinit failed`),Se.current=void 0,St.includes(`shadow-repo`)||St.push(`shadow-repo`)}}else b.error({err:e},`[server] history repo check failed (transient?)`)}if(Se.current)try{let e=z(Se.current.gitDir,`last-known-head`),t=null;try{t=V(e,`utf-8`).trim()||null}catch{}let r=null;try{r=(await ls({baseDir:n,timeout:{block:1e4}}).revparse(`HEAD`)).trim()||null}catch{}if(r!==null){if(r!==t){let e=`main`;try{let t=(await ls({baseDir:n,timeout:{block:1e4}}).raw(`rev-parse`,`--abbrev-ref`,`HEAD`)).trim();t&&t!==`HEAD`&&(e=t)}catch{}b.info({lastKnownHead:t,currentHead:r,branch:e},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${r}, action=import`);try{await JS(Se.current,p??``,t,r,e),pS()}catch(e){b.warn({err:e},`[head-drift] commitUpstreamImport failed — continuing`)}}else b.info({currentHead:r},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${r}, action=noop`);try{Gl(e,r,`utf-8`)}catch(e){b.warn({err:e},`[head-drift] failed to write last-known-head`)}}}catch(e){b.warn({err:e},`[head-drift] check failed — continuing`)}try{let e=zW(t,n);if(e.recovered&&e.journal){let t=e.journal.version===2?e.journal.fromPath:e.journal.sourceDocName,n=e.journal.version===2?e.journal.toPath:e.journal.destinationDocName;b.warn({journalVersion:e.journal.version,fromPath:t,toPath:n,restoredDocNames:e.restoredDocNames},`[managed-rename] recovered pending rename ${t} -> ${n}`)}}catch(e){b.error({err:e},`[server] managed rename recovery failed`),St.push(`managed-rename-recovery`)}try{let e=Qz(n);(e.deleted>0||e.errors>0)&&b.info({scanned:e.scanned,deleted:e.deleted,errors:e.errors},`[upload-tempfile-sweep] swept ${e.deleted} orphan tempfile(s)`)}catch(e){b.error({err:e},`[server] upload-tempfile sweep failed`),St.push(`upload-tempfile-sweep`)}try{et=await Ee.openDirectConnection(li),ke?.emitServerInfo(fe,S())}catch(e){b.error({err:e},`[server] failed to open __system__ direct connection — CC1 push disabled`),St.push(`cc1-push`)}let r=y?[]:_n;for(let e of r)try{let t=await Ee.openDirectConnection(e);tt.set(e,t)}catch(t){b.error({err:t,docName:e},`[server] failed to open ${e} direct connection — config bind degraded`),St.push(`config-doc:${e}`)}let a=new Map([[i,Oo(`project`,n)],[$n,Oo(`project-local`,n)],[zi,Oo(`user`,n,u)]]);for(let e of r){let t=a.get(e);if(t)try{b.info({docName:e,path:t},`[config-file-watcher] starting`);let n=await Yhe(t,t=>{let n=Ee.documents.get(e);b.info({docName:e,hasDocument:n!==void 0,contentLength:t.length},`[config-file-watcher] file changed`);let r=p7(n??null,e,t,we.configPersistenceCtx);b.info({docName:e,outcome:r},`[config-file-watcher] applyExternalConfigChange outcome`),de(e)});nt.push({docName:e,cleanup:n}),b.info({docName:e,path:t},`[config-file-watcher] started`)}catch(n){b.warn({err:n,docName:e,path:t},`[config-file-watcher] failed to start for ${e}`),St.push(`config-file-watcher:${e}`)}}if(!y){let e=(e,t)=>{let n=gW(e,we.managedArtifactCtx);if(!n)return;let r=yW(Ee.documents.get(n)??null,n,t,we.managedArtifactCtx);b.info({docName:n,outcome:r},`[managed-artifact-watcher] external change`),Hr(n)&&be.ingestGlobalSkillBundles(fW(we.managedArtifactCtx),S()).then(()=>{We(`backlinks`),We(`graph`)}).catch(e=>{b.warn({err:e,docName:n},`[backlinks] global skill bundle re-ingest failed`)})};try{let t=fW(we.managedArtifactCtx),n=await M7(t,e);nt.push({docName:`__skill-files__`,cleanup:n}),b.info({roots:t},`[managed-artifact-watcher] skills started`)}catch(e){b.warn({err:e},`[managed-artifact-watcher] skills failed to start`),St.push(`managed-artifact-watcher:skills`)}try{let t=new Set([``]);try{for(let e of Pj(n).templates)t.add(e.source_folder)}catch(e){b.warn({err:e},`[managed-artifact-watcher] template enumeration failed; root only`)}let r=[...t].map(e=>e?z(n,e,`.ok`,`templates`):z(n,`.ok`,`templates`)),i=await M7(r,e,kge);nt.push({docName:`__template-files__`,cleanup:i}),b.info({rootCount:r.length},`[managed-artifact-watcher] templates started`)}catch(e){b.warn({err:e},`[managed-artifact-watcher] templates failed to start`),St.push(`managed-artifact-watcher:templates`)}}try{let e=z(t,`.okignore`),r=z(n,`.gitignore`),i=null;try{let e=ml(`git`,[`rev-parse`,`--git-common-dir`],gP({cwd:n,encoding:`utf-8`,timeout:5e3}));if(e.status===0&&e.stdout){let t=L(z(n,e.stdout.trim()),`info`,`exclude`);B(I(t))&&(i=t)}}catch{}let a=i?[e,r,i]:[e,r],o=b;o.info({okignorePath:e,gitignorePath:r,gitInfoExcludePath:i,ephemeral:y},`[ignore-watcher] starting multi-path watcher for .okignore + .gitignore (+ .git/info/exclude when present)`);let s=y?null:await Xhe(a,(t,r)=>{(async()=>{if(t===e)try{let e=p7(Ee.documents.get(`__config__/okignore`)??null,vt,r,we.configPersistenceCtx);o.info({docName:vt,outcome:e},`[ignore-watcher] applyExternalConfigChange outcome`)}catch(e){o.error({err:e,changedPath:R(n,t)},`[ignore-watcher] applyExternalConfigChange failed; rebuild proceeds independently`)}let i=await ye.rebuildIgnorePatterns();if(i.ok)o.info({changedPath:R(n,t),patternCount:i.patternCount,nestedFileCount:i.nestedFileCount,durationMs:i.durationMs},`[ignore-watcher] rebuild succeeded — broadcasting files channel`),ke?.signal(`files`);else{let e=R(n,t)||`.`;o.warn({changedPath:e,error:i.error.message},`[ignore-watcher] rebuild failed — emitting config-ignore-nested-error`),ke?.emitConfigIgnoreNestedError(e,i.error.message)}})().catch(e=>{o.error({err:e,changedPath:R(n,t)||`.`},`[ignore-watcher] handler threw`)})});s&&(nt.push({docName:`__ignore-files__`,cleanup:s}),o.info({okignorePath:e,gitignorePath:r},`[ignore-watcher] multi-path watcher started`))}catch(e){b.warn({err:e,projectDir:n,contentDir:t},`[ignore-watcher] failed to start multi-path watcher`),St.push(`ignore-files-watcher`)}let o=v7(n).branch??`main`;ee(o),be.switchBranch(o);let s=performance.now();try{await Ao(`ok.boot.indexes`,void 0,async()=>{let e=S();try{if(await be.loadFromDisk(e)){let t=await be.reconcileWithDisk(e);(t.added>0||t.updated>0||t.deleted>0)&&b.info({added:t.added,updated:t.updated,deleted:t.deleted},`[backlinks] startup reconcile: offline changes applied`);let n=0;for(let e of t.deletedDocNames)sC(e)||Xe.peek(e)?.kind!==`renamed`&&(Xe.setDeleted(e),n++);n>0&&b.info({count:n},`[removal-guard] tombstoned docs deleted while the server was down`)}else await be.rebuildFromDisk(e);try{await be.ingestGlobalSkillBundles(fW(we.managedArtifactCtx),e)}catch(t){b.warn({err:t,branch:e},`[backlinks] global skill bundle ingest failed`)}be.saveToDisk().catch(t=>{F(`backlinks`).warn({branch:e,err:t},`Failed to persist startup cache for ${e}`)})}catch(t){b.error({err:t,branch:e},`[backlinks] startup init failed; index will populate incrementally via watcher`)}let n=performance.now();ht=await Ao(`ok.boot.seed-walk`,void 0,async()=>UV(t,pt,ye)),RB(`seedWalkMs`,Math.round(performance.now()-n));{let e=z(t),n=0;for(let[t]of Xe.entries()){if(!BJ(t))continue;let r=z(e,`${t}${vC(t)}`);Vk(r,e)&&B(r)&&(Xe.delete(t),n++)}n>0&&b.info({count:n},`[removal-guard] dropped journaled removal entries whose file re-appeared while the server was down`)}try{let e=await xe.reconcileWithDisk();(e.added>0||e.updated>0||e.deleted>0)&&b.info(e,`[tag-index] startup reconcile: offline changes applied`),xe.saveToDisk().catch(e=>{F(`tag-index`).warn({err:e},`Failed to persist startup tag snapshot`)})}catch(e){b.error({err:e},`[tag-index] startup reconcile failed; tag index updates incrementally via watcher events`),St.push(`tag-index`)}let r=0;try{v===void 0?await GJ({contentDir:t,contentFilter:ye,basenameIndex:ge,onSkip:(e,t,n)=>{r++,b.warn({reason:e,code:t,path:n},`[basename-index] skipped entry during seed (${e}${t?` ${t}`:``})`)}}):WJ({contentDir:t,basenameIndex:ge,onSkip:(e,t,n)=>{r++,b.warn({reason:e,code:t,path:n},`[basename-index] skipped entry during single-file seed (${e}${t?` ${t}`:``})`)}}),r>0&&(b.warn({count:r},`[basename-index] startup seed completed with ${r} skipped entries — embeds under inaccessible subtrees will not resolve`),St.push(`basename-index-partial`))}catch(e){b.error({err:e},`[basename-index] startup seed failed`),St.push(`basename-index`)}})}catch(e){b.error({err:e},`[server] disk bridge watcher failed to start`),St.push(`file-watcher`)}finally{RB(`indexesMs`,Math.round(performance.now()-s)),ht&&zB(`fileCount`,ht.getFileIndex().size)}try{gt=await dge(n,async({trigger:e})=>{if(b.info({trigger:e},`[batch] begin trigger=${e}`),Une(),Ee.flushPendingStores(),await we.flushPendingGitCommit(),ne(!0),Se.current){let e=S(),t=v7(n).branch??e,r=[];for(let[e,t]of Ee.documents){if(sC(e))continue;let n=null;if(t.transact(()=>{n=E(e)},j_e),n===null)continue;let i=C(e)??n;r.push({docName:e,markdown:n,diskSnapshot:i})}if(r.length>0)try{let n=await sie(Se.current,e,KS.id,r,t);n&&(Kne(),b.info({count:r.length,branch:e,sha:n.slice(0,8)},`[history] parked ${r.length} docs on ${e} → ${n.slice(0,8)}`))}catch(e){b.error({err:e},`[shadow] park failed`)}}},async e=>{let r=ft.length,i=e.newBranch??`main`;if(b.info({kind:e.batchKind,headMoved:e.headMoved,docs:r,timeout:!!e.timeout},`[batch] end kind=${e.batchKind} headMoved=${e.headMoved} docs=${r}${e.timeout?` timeout`:``}`),e.batchKind===`within-branch`){if(ne(!1),await mt(),e.headMoved&&e.newHead){let r=N_e(n,z(t),e.oldHead,e.newHead);if(r.size>0){ZM(r.keys());for(let[e,t]of r)XM(e,Ree(t.email),t.name,t.email,Wu(e));await we.flushContributors()}}if(await we.flushDeferredStores(`within-branch`),_t!==null)try{await _t.reconcileConflictsFromGit()}catch(e){b.warn({err:e},`[head-watcher] sync engine conflict reconcile failed`)}}else{Gne(),ft.splice(0,ft.length),ee(i),Ge!==null&&(clearTimeout(Ge),Ge=null),be.switchBranch(i),ye.rebuildDirCount();try{let e=0;ge.clear(),await GJ({contentDir:t,contentFilter:ye,basenameIndex:ge,onSkip:(t,n,r)=>{e++,b.warn({reason:t,code:n,path:r,branch:i},`[basename-index] skipped entry during branch-switch reseed (${t}${n?` ${n}`:``})`)}}),e>0&&(b.warn({count:e,branch:i},`[basename-index] branch-switch reseed completed with ${e} skipped entries — embeds under inaccessible subtrees will not resolve on this branch`),St.includes(`basename-index-partial`)||St.push(`basename-index-partial`))}catch(e){b.error({err:e,branch:i},`[basename-index] branch-switch reseed failed`)}for(let[e,n]of Ee.documents)if(!sC(e))try{let r=Hk(e,t);if(!B(r)){let t=C(e)??``,r=E(e)??``;if(r!==t&&Se.current){let t=Se.current;queueMicrotask(()=>{ZS(t,p??``,{kind:`external-change-rescue`,docName:e,contents:r,label:`External change recovered @ ${new Date().toISOString()}`,branch:i,metadata:{incomingDiskSha:``}}).then(()=>{mS(),b.info({docName:e},`[reconcile] rescue checkpoint saved on branch switch: ${e}`)}).catch(t=>{b.error({docName:e,err:t},`[reconcile] rescue checkpoint write failed: ${e}`)})})}n.getMap(`lifecycle`).set(`status`,`deleted-upstream`),b.info({docName:e,branch:i},`[branch-switch] tombstone: ${e} (not on ${i})`);continue}let a=V(r,`utf-8`);it(e,a),w(e,a),b.info({docName:e},`[branch-switch] reset: ${e}`)}catch(t){b.error({err:t,docName:e},`[branch-switch] failed to reset ${e}`)}b.info({branch:i,docCount:Ee.documents.size},`[branch-switch] loaded branch ${i} (${Ee.documents.size} docs)`);try{if(await be.loadFromDisk(i)){let e=await be.reconcileWithDisk(i);(e.added>0||e.updated>0||e.deleted>0)&&b.info(e,`[backlinks] branch-switch reconcile for ${i}`)}else await be.rebuildFromDisk(i);try{await be.ingestGlobalSkillBundles(fW(we.managedArtifactCtx),i)}catch(e){b.warn({err:e,branch:i},`[backlinks] branch-switch global skill bundle ingest failed`)}be.saveToDisk(i).catch(e=>{F(`backlinks`).warn({branch:i,err:e},`Failed to persist branch cache for ${i}`)})}catch(e){b.error({err:e,branch:i},`[backlinks] branch-switch rebuild failed; backlinks may be stale`)}try{let e=await xe.reconcileWithDisk();(e.added>0||e.updated>0||e.deleted>0)&&b.info(e,`[tag-index] branch-switch reconcile for ${i}`)}catch(e){b.warn({err:e,branch:i},`[tag-index] branch-switch reconcile failed; falling back to full rebuild`),await xe.init()}if(xe.saveToDisk().catch(e=>{F(`tag-index`).warn({branch:i,err:e},`Failed to persist tag snapshot after branch switch`)}),Se.current&&e.batchKind===`cross-branch`){let e=0;for(let[t]of Ee.documents)if(!sC(t))try{let n=await lie(Se.current,i,KS.id,t);if(!n||n.markdown===n.diskSnapshot)continue;let r=C(t);if(!r)continue;let a=KB({docName:t,base:n.diskSnapshot,ours:n.markdown,theirs:r});switch(a.kind){case`merged`:case`clean`:it(t,a.newContent),w(t,a.newContent),e++;break;case`conflicts`:it(t,a.newContent),w(t,a.newContent),fS(),e++;{let e=Ee.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){b.error({err:e,docName:t},`[branch-switch] restore WIP failed for ${t}`)}e>0&&b.info({count:e,branch:i},`[branch-switch] restored ${e} parked docs on ${i}`)}if(e.oldBranch?.startsWith(`detached-`)&&Se.current)try{let t=IS(Se.current),n=(await t.raw(`for-each-ref`,`refs/wip/${e.oldBranch}/`,`--format=%(refname)`)).trim();n&&(await MS(Se.current).withMutator(async()=>{for(let e of n.split(`
3266
3266
  `))e&&await t.raw(`update-ref`,`-d`,e)}),b.info({context:e.oldBranch},`[branch-switch] cleaned up detached context ${e.oldBranch}`))}catch(e){b.error({err:e},`[branch-switch] detached cleanup failed`)}ne(!1),await we.flushDeferredStores(`discard-stale`),ke?.emitBranchSwitched(i)}if(e.headMoved&&e.newHead&&Se.current&&r>0){let t=p??`.`;try{let n=await JS(Se.current,t,e.oldHead,e.newHead,i);pS(),b.info({oldHead:e.oldHead?.slice(0,8)??`null`,newHead:e.newHead.slice(0,8),sha:n.slice(0,8)},`[history] upstream-import from ${e.oldHead?.slice(0,8)??`null`}..${e.newHead.slice(0,8)} → ${n.slice(0,8)}`)}catch(e){b.error({err:e},`[shadow] upstream-import failed`)}}})}catch(e){b.error({err:e},`[server] HEAD watcher failed to start`),St.push(`head-watcher`)}function c(e){for(let r of e)try{let e=Bk(R(t,L(n,r)));if(e.startsWith(`..`))continue;let i=pC(e),a=Ee.documents.get(i);if(!a)continue;let o=E(i);o===null?b.warn({docName:i,file:r},`[sync] content conflict: serializeDoc returned null; reconciledBase snapshot skipped`):w(i,o);let s=a.getMap(`lifecycle`);s.set(`status`,`conflict`),s.set(`reason`,`sync-merge-conflict`),b.info({docName:i,file:r},`[sync] marked loaded content conflict`)}catch(e){b.warn({err:e,file:r},`[sync] failed to mark loaded content conflict`)}}function l(e){for(let r of e)try{let e=Bk(R(t,L(n,r)));if(e.startsWith(`..`))continue;let i=Ee.documents.get(pC(e));i&&at(i)}catch(e){b.warn({err:e,file:r},`[sync] failed to clear resolved content conflict`)}}let d=M_e(h),f=ae();f.mode!==`off`&&b.info({mode:f.mode,source:f.source},`[sync] mode active at boot`);try{_t=new T_e({projectDir:n,contentDir:t,contentFilter:ye,contentRoot:p,mode:f.mode,pullIntervalSeconds:e.pullIntervalSeconds,pushIntervalSeconds:e.pushIntervalSeconds,credentialArgs:d,cc1Broadcaster:ke,detectGh:e.detectGh,tokenStore:e.tokenStore,checkPushPermissionFn:e.checkPushPermissionFn,setBatchInProgress:e=>{ne(e),e||we.flushDeferredStores(`within-branch`).catch(e=>{b.error({err:e},`[persistence] deferred store drain failed after sync batch`)})},onStateChange:e=>{b.info({state:e},`[sync] state → ${e}`)},onContentConflictsDetected:c,onContentConflictsResolved:l,checkpointBeforeStrandedConversion:async({branch:e,ahead:t})=>{let n=Se.current;n&&await XS(n,p??``,{action:`pull-only-stranded-conversion`,context:{ahead:t}},e)},checkpointBeforeOverlayRestore:async({branch:e,paths:t})=>{let n=Se.current;n&&await XS(n,p??``,{action:`pull-only-overlay-restore`,context:{paths:t}},e)},onAutoDisable:async e=>{b.warn({reason:e},`[sync] auto-disabled — persisting to project-local config`);let t=await Vo({cwd:n,scope:`project-local`,patch:{autoSync:{enabled:!1}}});t.ok||b.error({result:t,reason:e,humanError:$a(t.error),configPath:Oo(`project-local`,n)},`[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 _t.start()}catch(e){b.warn({err:e},`[server] SyncEngine failed to start — sync disabled`),_t=null}We(`files`),We(`backlinks`),We(`graph`),We(`tags`);let m=LB();m!==void 0&&RB(`readyMs`,m)}return Ct().then(Ve,He),{hocuspocus:Ee,durabilityState:x,sessionManager:De,cc1Broadcaster:ke,agentFocusBroadcaster:Ae,agentPresenceBroadcaster:je,maintenanceCoordinator:Ce,contentFilter:ye,basenameIndex:ge,serverInstanceId:fe,destroy:xt,ready:Ue,degraded:St,lockDir:pe,get syncEngine(){return _t},resolveEmbed:_e,acpRegistry:me,acpPermissions:he}}function T9(e){return e/1048576}function P_e(){let e=process.memoryUsage();return{schemaVersion:1,capturedAt:new Date().toISOString(),snapshot:{rssMb:T9(e.rss),heapTotalMb:T9(e.heapTotal),heapUsedMb:T9(e.heapUsed),externalMb:T9(e.external),arrayBuffersMb:T9(e.arrayBuffers)}}}let E9=null,D9=null,O9=null;const k9=1e6;let A9=null,j9=null;ko(()=>{E9=null,D9=null,O9=null,A9?.disable(),A9=null,j9=null});function F_e(){if(E9)return;let e=es().createObservableGauge(`ok.server.memory.usage_megabytes`,{description:`Server process memory by section. Bounded labels: section ∈ {heap_used, heap_total, rss, external, array_buffers}.`,unit:`MB`});e.addCallback(e=>{let{snapshot:t}=P_e();e.observe(t.heapUsedMb,{section:`heap_used`}),e.observe(t.heapTotalMb,{section:`heap_total`}),e.observe(t.rssMb,{section:`rss`}),e.observe(t.externalMb,{section:`external`}),e.observe(t.arrayBuffersMb,{section:`array_buffers`})}),E9=e}function I_e(){if(!D9){let e=es().createObservableGauge(`ok.server.event_loop.delay_ms`,{description:`Event-loop delay percentiles over the last export window. Bounded labels: stat ∈ {p50, p99}.`,unit:`ms`});e.addCallback(e=>{if(!A9){A9=See({resolution:20}),A9.enable();return}e.observe(A9.percentile(50)/k9,{stat:`p50`}),e.observe(A9.percentile(99)/k9,{stat:`p99`}),A9.reset()}),D9=e}if(!O9){let e=es().createObservableGauge(`ok.server.cpu.utilization`,{description:`Process CPU time as a fraction of wall time since the previous export. Bounded labels: mode ∈ {user, system}.`,unit:`1`});e.addCallback(e=>{let t=process.cpuUsage(),n=process.hrtime.bigint(),r=j9;if(j9={cpu:t,hrtimeNs:n},!r)return;let i=Number(n-r.hrtimeNs)/1e3;i<=0||(e.observe((t.user-r.cpu.user)/i,{mode:`user`}),e.observe((t.system-r.cpu.system)/i,{mode:`system`}))}),O9=e}}let M9=null,N9=!1;function P9(e=process.env){return e.OK_BRIDGE_TOLERANCE_TELEMETRY===`1`}function F9(e){if(!P9())return;let t=DA(e);M9=new os({currentPath:z(t,`tolerance-telemetry.jsonl`),previousPath:z(t,`tolerance-telemetry.prev.jsonl`),maxBytes:8388608}),fa(e=>{let t={event:`bridge-tolerance-fire`,timestamp:e.timestamp,class:e.className,document:e.documentName??null,codeUnitPosition:e.codeUnitPosition,severity:e.severity};M9?.append(`${JSON.stringify(t)}\n`).catch(e=>{N9||(N9=!0,F(`tolerance-telemetry`).warn({err:e instanceof Error?e:Error(String(e))},`append failed; further failures are silent`))})})}async function I9(){fa(null),await M9?.drain(),M9=null,N9=!1}yo();const L_e=[`server.lock`,`ui.lock`,`state.json`,`principal.json`,`sync-state.json`,`conflicts.json`,`last-spawn-error.log`],R_e=[`cache`,`tmp`];function z_e(e){let t=z(e,no);if(!(()=>{if(!B(t))return!0;try{return Ll(t).length===0}catch{return!0}})())return[];let n=[];for(let t of L_e)B(z(e,t))&&n.push(t);for(let t of R_e){let r=z(e,t);try{B(r)&&Ul(r).isDirectory()&&n.push(`${t}/`)}catch{}}return n}function B_e(e){let t=ju(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 L9=Number(process.env.OK_DESTROY_STEP_TIMEOUT_MS)||5e3;async function V_e(e){IB();let t=e.projectDir??e.contentDir,n=hY({projectDir:t});if(n){let e=n.telemetry.attributeDenylist,t=[];for(let n of e){t.push(n);for(let e=1;e<=5;e++)t.push(`${`*.`.repeat(e)}${n}`)}ns.configure({pinoConfig:{fileSink:n.logs,redactPaths:t}})}$o({localSink:n?.telemetry}),F9(t),F_e(),I_e();let{kind:r,gitdir:i}=B_e(e.projectDir??e.contentDir),a={"ok.worktree.kind":r};i!==null&&(a[`ok.worktree.gitdir`]=Wo(i));let o=sY(t),s=process.env.OK_STARTUP_TRACEPARENT,c=()=>Ao(`ok.boot`,{attributes:a},async()=>H_e(e)),l=()=>{if(s)try{let e=_o.extract(bo.active(),{traceparent:s});return bo.with(e,c)}catch(e){F(`boot`).warn({err:e},`ok.boot trace-join failed — starting unparented boot`)}return c()},u;try{u=await l()}catch(e){throw o.uninstall(),e}let d=u.destroy;return u.destroy=async()=>{try{await d()}finally{o.uninstall()}},u}async function H_e(e){let t=e.skipAutoInit??!1,n=e.attachUiSibling??!0,r=e.idleShutdownMs,i=e.log??F(`boot`),a=process.env.OK_LOCK_KIND===`mcp-spawned`||process.env.OK_LOCK_KIND===`interactive`?process.env.OK_LOCK_KIND:void 0,o=e.lockKind??a??`interactive`,{createServer:s}=await import(`node:http`),{markServerLockDraining:c,releaseServerLock:l,updateServerLockPort:u}=await import(`./server-lock-B5Sh25lK.mjs`),d=!1;if(!t&&e.autoInitFn)try{d=!!await e.autoInitFn()}catch(e){i.warn({err:e},`autoInitFn failed`)}let f=e.projectDir??e.contentDir,p=z(f,`.ok`);if(!B(z(p,`config.yml`)))throw new r5(B(p)?`config`:`okdir`,f);let m=z(p,`.gitignore`);B(m)||F(`boot`).warn({path:m},"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 h=e.gitPreflight??SR;try{e.gitEnabled!==!1&&h()}catch(e){if(e instanceof yR||e instanceof bR){let t=e instanceof bR?e.detected:``,n=e instanceof bR?`too_old`:`not_available`;WU(e),i.warn({event:`git_preflight_fail`,platform:e.platform,reason:n,detectedVersion:t},n===`not_available`?`git binary not found`:`git binary too old`),process.stderr.write(`${e.message}\n`)}throw await Qo(),await Promise.race([I9(),new Promise(e=>setTimeout(e,L9))]),e}let g=z_e(p);g.length>0&&F(`boot`).warn({files:g},`Found legacy runtime files at .ok/${g.join(`, `)}. Delete .ok/ and re-init — these files moved to .ok/${no}/.`);let _=w9({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,authStreamHeartbeatMs:e.authStreamHeartbeatMs,onAgentWrite:e.onAgentWrite,lockKind:o,skipStateManifestCheck:e.skipStateManifestCheck,detectGh:e.detectGh,tokenStore:e.tokenStore,embeddingsKeyStore:e.embeddingsKeyStore,singleDocRelPath:e.singleDocRelPath,ephemeral:e.ephemeral}),{hocuspocus:v,destroy:y,ready:b,degraded:x,lockDir:S,sessionManager:C,agentFocusBroadcaster:w,agentPresenceBroadcaster:T,maintenanceCoordinator:ee}=_,te=(()=>{let t=e.host??`localhost`;return t===`0.0.0.0`||t===`::`?`localhost`:t.includes(`:`)&&!t.startsWith(`[`)?`[${t}]`:t})(),ne=e.port??0,re=e.ephemeral?void 0:Z8({contentDir:e.contentDir,projectDir:e.projectDir??e.contentDir,config:e.config,getServerUrl:()=>`http://${te}:${ne}`,log:i}),ie=s();ie.headersTimeout=3e4,ie.requestTimeout=6e4;let ae=e.serveContentAssets===!1?void 0:TA({contentFilter:_.contentFilter,contentSirv:Ms(e.contentDir,{dev:!0,dotfiles:!1}),inlineExtensions:ho,assetExtensions:Aa,blocklistExtensions:Ea}),oe=!1;if(e.reactShellDistDir)try{Rz(S,{port:0,worktreeRoot:e.projectDir??e.contentDir}),oe=!0}catch(e){if(e instanceof Lz)i.info({event:`ui-lock-yielded-to-live-holder`,pid:process.pid,existingPid:e.existing.pid,existingPort:e.existing.port,lockDir:S},`ui.lock already held by a live process — yielding (advertisement is fulfilled)`);else throw await y().catch(()=>{}),l(S),e}let se=e.reactShellDistDir?Ms(e.reactShellDistDir,{single:!0,gzip:!0,immutable:!0}):void 0,ce=e.ephemeral?null:new LD({contentDir:e.contentDir,localDir:S,globalDir:z(Yl(),`.ok`),registry:_.acpRegistry,permissions:_.acpPermissions,sessionManager:C,agentPresenceBroadcaster:T,resolveEmbed:_.resolveEmbed,isExcludedPath:e=>_.contentFilter.isExcluded(e),isIgnoredPath:e=>_.contentFilter.isPathIgnored(e),getLoadedDocText:e=>v.documents.get(e)?.getText(`source`).toString()??null,getServerUrl:()=>`http://${te}:${ne}`,getMcpStdioCommand:()=>ID(e.localOpCliArgs,ne),probeHarnessManagedMcpEntry:e.probeHarnessManagedMcpEntry,log:i});ce!==null&&await ce.init();let le=$8({httpServer:ie,hocuspocus:v,mcpHttpHandler:re,log:i,sessionManager:C,agentFocusBroadcaster:w,agentPresenceBroadcaster:T,maintenanceCoordinator:ee,keepaliveGraceMs:e.keepaliveGraceMs,contentAssetMiddleware:ae,reactShellMiddleware:se,ephemeral:e.ephemeral,acpThreadManager:ce}),ue=async()=>{throw Error(`bootServer: destroy() invoked before initialization — boot did not complete`)},de=null;r!==null&&(de=cY({httpServer:ie,thresholdMs:r??18e5,log:i,onShutdown:(e.idleShutdownHandler??(e=>async()=>{await e()}))(async()=>{await ue()})})),await R9({hocuspocus:v,projectDir:e.projectDir??e.contentDir,log:i});try{await new Promise((t,n)=>{let r=e=>n(e);ie.once(`error`,r),ie.listen(e.port,e.host,()=>{ie.removeListener(`error`,r),t()})})}catch(e){if(oe)try{Vz(S)}catch(e){i.warn({err:e},`releaseUiLock failed during listen-error cleanup`)}throw await y().catch(()=>{}),l(S),e}let fe=LB();fe!==void 0&&RB(`httpListenMs`,fe);let pe=ie.address(),me=typeof pe==`object`&&pe?pe.port:e.port??0;if(ne=me,u(S,me),oe&&zz(S,me),n&&e.spawnUiSiblingFn)try{await e.spawnUiSiblingFn({lockDir:S,log:i})}catch(e){i.warn({err:e},`spawnUiSiblingFn failed`)}let he=!1,ge=async(e,t)=>{let n;try{await Promise.race([t(),new Promise((t,r)=>{n=setTimeout(()=>{r(Error(`${e} timed out after ${L9}ms`))},L9),n.unref?.()})])}finally{n!==void 0&&clearTimeout(n)}};ue=async()=>{if(he)return;he=!0;let e=[],t=async(t,n)=>{try{await ge(t,n)}catch(n){e.push(n),i.warn({err:n,step:t},`bootServer destroy step failed`)}};try{c(S),oe&&Hz(S)}catch(e){i.warn({err:e,step:`markLocksDraining`},`bootServer destroy step failed`)}try{de?.detach()}catch(t){e.push(t),i.warn({err:t,step:`idleHandle.detach`},`bootServer destroy step failed`)}if(ce!==null&&await t(`acpThreads.destroy`,()=>ce.destroy()),await t(`mount.shutdown`,()=>le.shutdown()),re!==void 0&&await t(`mcpHttpHandler.close`,()=>re.close()),await t(`mount.wss.close`,()=>new Promise((e,t)=>{le.wss.close(n=>n?t(n):e())})),await t(`httpServer.closeAllConnections`,async()=>{ie.closeAllConnections?.()}),await t(`httpServer.close`,()=>new Promise((e,t)=>{ie.close(n=>n&&n.code!==`ERR_SERVER_NOT_RUNNING`?t(n):e())})),await t(`destroyHocuspocus`,()=>y()),oe&&await t(`releaseUiLock`,async()=>Vz(S,{deferUnlinkToExit:!0})),await t(`shutdownTelemetry`,()=>Qo()),await t(`teardownToleranceTelemetry`,()=>I9()),await t(`flushLogFileSinks`,()=>ns.flushAllFileSinks()),e.length>0)throw AggregateError(e,`bootServer destroy completed with errors`)};try{let t=await Dz({projectDir:f,skillsRoot:z(e.contentDir,`.ok`,`skills`)}),n=t.healed.length+t.adopted.length+t.replaced.length+t.collided.length+t.orphansRemoved.length;n>0&&i.info?.({event:`installed-skills-reconciled`,healed:t.healed.length,adopted:t.adopted.length,replaced:t.replaced.length,collided:t.collided.length,orphansRemoved:t.orphansRemoved.length},`Reconciled ${n} editor skill entr${n===1?`y`:`ies`} to the symlink model.`)}catch(e){i.warn?.({event:`installed-skills-reconcile-failed`,err:e},`Installed-skills reconcile failed (non-fatal).`)}return{httpServer:ie,destroy:ue,lockDir:S,contentDir:e.contentDir,port:me,ready:b,degraded:x,didAutoInit:d,serverInstance:_,acpThreadManager:ce}}async function R9(e){let{hocuspocus:t,projectDir:n,log:r}=e,i,a;try{i=new tY(n),a=i.list()}catch(e){r.warn({err:e,projectDir:n},`[boot] lifecycle restore: failed to read conflicts.json — skipping`);return}if(a.length===0)return;let o=e=>e.variant===`working-tree`,s=null;try{let e=Mu(n),t=e?L(e,`MERGE_HEAD`):null;if(!t||!B(t)){let e=a.filter(e=>!o(e));for(let t of e)i.removeConflict(t.file);if(a=a.filter(o),e.length>0&&console.warn(JSON.stringify({event:`lifecycle-restore-cleared-stale-conflicts`,reason:`no-merge-head`,count:e.length})),a.length===0)return}else{let e=ds({baseDir:n,timeout:{block:5e3}});s=new Set(await uS(e,[`diff`,`--name-only`,`--diff-filter=U`]))}}catch(e){r.warn({err:e,projectDir:n},`[boot] lifecycle restore: git unmerged probe failed — restoring all entries`)}if(s!==null){let e=0;for(let t of a)!o(t)&&!s.has(t.file)&&(i.removeConflict(t.file),e++);if(e>0&&console.warn(JSON.stringify({event:`lifecycle-restore-pruned-resolved-entries`,pruned:e,remaining:a.length-e})),a=a.filter(e=>o(e)||s?.has(e.file)),a.length===0)return}for(let e of a){let n=pC(e.file),i=null,a=!1;try{i=await t.openDirectConnection(n);let e=i.document;if(!e)continue;let r=e.getMap(`lifecycle`);r.set(`status`,`conflict`),r.set(`reason`,`conflict-markers`),a=!0,console.warn(JSON.stringify({event:`lifecycle-restored-from-conflicts-json`,"doc.name":n}))}catch(e){r.warn({err:e,docName:n},`[boot] lifecycle restore: failed to set lifecycle for doc — skipping`)}finally{if(i)try{await i.disconnect()}catch(e){r.warn({err:e,docName:n,restored:a},`[boot] lifecycle restore: disconnect failed after lifecycle write`)}}}}const U_e=Ha;function W_e(e={}){let t=e.home??Yl(),n=e.platformName??process.platform,r=e.env??process.env;return n===`darwin`?B(L(t,`Library`,`Application Support`,`Claude`)):n===`win32`?B(L(r.APPDATA??L(t,`AppData`,`Roaming`),`Claude`)):!1}var z9=t(as(),1);const B9=L(Yl(),`.ok`,`logs`),G_e=[`authorization`,`password`,`token`,`apiKey`,`secret`,`*.authorization`,`*.password`,`*.token`,`*.apiKey`,`*.secret`];function K_e(){let e=process.env.OK_LOG_LEVEL??process.env.LOG_LEVEL;if(e){let t=[`fatal`,`error`,`warn`,`info`,`debug`],n=e.toLowerCase();if(t.includes(n))return n}return process.env.NODE_ENV===`test`?`silent`:`info`}function q_e(e){Ml(e,{recursive:!0})}function V9(){return new Date().toISOString().slice(0,10)}function J_e(e){try{if(Ul(e).size<5242880)return}catch{return}for(let t=2;t>=1;t--){let n=t===1?e:`${e}.${t-1}`,r=`${e}.${t}`;try{Bl(n,r)}catch{}}try{Wl(`${e}.3`)}catch{}}function Y_e(e){try{let t=Date.now(),n=10080*60*1e3,r=Ll(e).filter(e=>e.endsWith(`.log`)||/\.log\.\d+$/.test(e)).map(t=>{try{let n=Ul(L(e,t));return{name:t,mtime:n.mtimeMs,size:n.size}}catch{return null}}).filter(Boolean);for(let i of r)if(t-i.mtime>n)try{Wl(L(e,i.name))}catch{}let i=r.filter(e=>t-e.mtime<=n).sort((e,t)=>e.mtime-t.mtime),a=i.reduce((e,t)=>e+t.size,0);for(let t of i){if(a<=47185920)break;try{Wl(L(e,t.name)),a-=t.size}catch{}}}catch{}}function X_e(e){q_e(B9);let t=V9(),n=e.filePath??L(B9,`${e.name}.${t}.log`);J_e(n),(e._setTimeout??setTimeout)(()=>Y_e(B9),5e3).unref();let r=z9.default.destination({dest:n,append:!0,sync:!0});return(0,z9.default)({level:K_e(),name:e.name,redact:{paths:G_e,censor:`[REDACTED]`},base:{pid:process.pid,hostname:void 0,runtime:`cli`,project:e.project??`<no-project>`},timestamp:z9.default.stdTimeFunctions.isoTime,...e.additionalOptions},r)}function Z_e(e,t=250){return new Promise(n=>{if(!e){n();return}let r=e[z9.default.symbols.streamSym],i=!1,a=()=>{i||(i=!0,n())};if(!r||typeof r.flushSync!=`function`){a();return}let o=()=>{try{r.flushSync?.()}catch{}a()},s=setTimeout(a,t);typeof s.unref==`function`&&s.unref(),typeof r.fd==`number`&&r.fd>=0?(clearTimeout(s),o()):typeof r.once==`function`?r.once(`ready`,()=>{clearTimeout(s),o()}):(clearTimeout(s),o())})}function Q_e(e){return L(B9,`${e}.${V9()}.log`)}function $_e(){return B9}function eve(e){let t=z(e),n=0;for(;n<30;){let e=!1;try{e=B(z(t,`.git`))}catch{e=!1}if(e)return{gitRoot:t,distance:n};let r=I(t);if(r===t)return null;t=r,n+=1}return null}const H9=Su(fl),U9=F(`project-git`);var W9=class extends Error{stderr;constructor(e,t=``,n){super(e,n),this.name=`ProjectGitInitError`,this.stderr=t}};async function tve(e,t){try{let{stdout:n}=await H9(e,[`rev-parse`,`--is-inside-work-tree`],gP({cwd:t,encoding:`utf-8`}));return n.trim()===`true`}catch{return!1}}async function nve(e){let t=z(e),n=z(t,`.git`),r=z(n,`HEAD`),i=!1;if(B(n)){if(!Ul(n).isDirectory()||B(r))return{didInit:!1};U9.info({},`detected partial .git/ — running git init to repair`),i=!0}let a;try{a=SR()}catch(e){throw e instanceof yR||e instanceof bR?(WU(e),U9.warn({event:`git_preflight_fail`,platform:e.platform,reason:e instanceof bR?`too_old`:`not_available`,detectedVersion:e instanceof bR?e.detected:``},e instanceof bR?`git binary too old`:`git binary not found`)):U9.warn({event:`git_preflight_unexpected_error`,err:e},`unexpected error during git preflight`),e}let o=a.resolvedPath;if(!i&&await tve(o,t))return{didInit:!1};let s=``;try{s=(await H9(o,[`init`,`--initial-branch=main`,t],gP({encoding:`utf-8`}))).stderr??``}catch(e){let n=typeof e==`object`&&e&&`stderr`in e?String(e.stderr??``):``;throw new W9(`git init failed at ${t}: ${e instanceof Error?e.message:String(e)}`,n,{cause:e})}if(!B(r))throw new W9(`git init reported success but ${n}/HEAD is missing (partial init detected)`,s);return i?(U9.info({path:t},`backfilled missing .git/HEAD`),{didInit:!0,repaired:!0}):(U9.info({path:t,branch:`main`},`initialized .git/`),{didInit:!0})}const G9=F(`project-skill-git`),K9=/^[0-9a-f]{40}$/,rve=ve.map(e=>e.replace(/\/$/,``));async function ive(e){let t=Mu(e);if(t===null)return{kind:`skipped`,reason:`no-git`};if(cve(t))return{kind:`skipped`,reason:`operation-in-progress`};let n=fs(e);if((await q9(n)).length===0)return{kind:`nothing-tracked`};try{return await us(async()=>{let t=await ave(n);if(t===null)return{kind:`skipped`,reason:`detached-head`};let r=await ove(n);if(r===null)return{kind:`skipped`,reason:`unborn-head`};let i=await q9(n);if(i.length===0)return{kind:`nothing-tracked`};let a=fs(e,{gitIndexFile:L(Ql(),`ok-untrack-idx-${process.pid}-${Date.now()}.idx`)});await a.git.raw([`read-tree`,r]),await a.git.raw([`rm`,`--cached`,`-r`,`--ignore-unmatch`,`--`,...i]);let o=(await a.git.raw([`write-tree`])).trim(),s=await sve(n,r);if(s!==null&&s===o)return{kind:`nothing-tracked`};let c=await cH(e),l=c?.name??`OpenKnowledge`,u=c?.email??`sync@open-knowledge.local`;ms(a,{GIT_AUTHOR_NAME:l,GIT_AUTHOR_EMAIL:u,GIT_COMMITTER_NAME:l,GIT_COMMITTER_EMAIL:u});let d=`Stop tracking the OpenKnowledge project skill\n\nThe \`${Ve}\` skill is regenerated per machine and version-stamped per app build, so tracking it causes recurring sync conflicts. It is now git-ignored.`,f=(await a.git.raw([`commit-tree`,o,`-p`,r,`-m`,d])).trim();if(!K9.test(f))return G9.warn({raw:f},`commit-tree returned invalid SHA — aborting untrack`),{kind:`failed`,error:`commit-tree returned invalid SHA`};try{await n.git.raw([`update-ref`,`refs/heads/${t}`,f,r])}catch(e){return G9.info({branch:t,err:J9(e)},`update-ref CAS failed — ref moved, retry next open`),{kind:`skipped`,reason:`ref-race`}}try{await n.git.raw([`reset`,`-q`,f,`--`,...i])}catch(e){G9.info({err:J9(e)},`real-index reset after untrack failed (cosmetic)`)}return G9.info({dirs:i,commitSha:f},`untracked project-skill projection`),{kind:`untracked`,dirs:i,commitSha:f}})}catch(e){return{kind:`failed`,error:J9(e)}}}async function q9(e){let t=[];for(let n of rve){let r=``;try{r=(await e.git.raw([`ls-files`,`--`,n])).trim()}catch{r=``}r.length>0&&t.push(n)}return t}async function ave(e){try{let t=(await e.git.raw([`rev-parse`,`--abbrev-ref`,`HEAD`])).trim();return t.length===0||t===`HEAD`?null:t}catch{return null}}async function ove(e){try{let t=(await e.git.raw([`rev-parse`,`--verify`,`HEAD`])).trim();return K9.test(t)?t:null}catch{return null}}async function sve(e,t){try{let n=(await e.git.raw([`rev-parse`,`${t}^{tree}`])).trim();return K9.test(n)?n:null}catch{return null}}function cve(e){return B(L(e,`MERGE_HEAD`))||B(L(e,`rebase-merge`))||B(L(e,`rebase-apply`))||B(L(e,`CHERRY_PICK_HEAD`))||B(L(e,`REVERT_HEAD`))}function J9(e){return e instanceof Error?e.message:String(e)}async function lve(e,t){let n;try{n=dl(t).resolve(e)}catch(e){if(e?.code===`MODULE_NOT_FOUND`)return;throw e}for(let t=I(n),r=0;r<32;r+=1){let n=L(t,`package.json`);if(B(n))try{let t=JSON.parse(await ru(n,`utf-8`));if(t.name===e&&typeof t.version==`string`)return t.version}catch{}let r=I(t);if(r===t)return;t=r}}const uve=[{regex:/\/Users\/[^/]+\//g,replacement:`~/`},{regex:/\/home\/[^/]+\//g,replacement:`~/`},{regex:/C:\\\\Users\\\\[^\\\\]+\\\\/g,replacement:`~\\`},{regex:/C:\\Users\\[^\\]+\\/g,replacement:`~\\`}];function Y9(e){if(e===void 0)return;let t=e;for(let{regex:e,replacement:n}of uve)t=t.replace(e,n);return t}function X9(e,t=0,n=new WeakSet){if(t>=5)return{name:`SerializedError.CauseDepthExceeded`,message:`cause chain depth > 5; truncated`};if(typeof e==`object`&&e){if(n.has(e))return{name:`SerializedError.CauseCycle`,message:`cyclic cause; truncated`};n.add(e)}if(e instanceof Error)return{name:e.name,message:Y9(e.message)??``,stack:Y9(e.stack),code:e.code,cause:e.cause===void 0?void 0:X9(e.cause,t+1,n)};if(e==null)return{name:`UnknownError`,message:String(e)};if(typeof e==`string`)return{name:`StringError`,message:Y9(e)??e};if(typeof e==`object`){let r=e;return{name:String(r.name??`ObjectError`),message:Y9(String(r.message??``))??``,stack:Y9(r.stack),code:r.code,cause:r.cause===void 0?void 0:X9(r.cause,t+1,n)}}return{name:`UnknownError`,message:String(e)}}var Z9=class extends Error{constructor(e){super(`File not found: ${e}`),this.filePath=e,this.name=`SingleFileNotFoundError`}},Q9=class extends Error{constructor(e){super(`Not a file: ${e}. \`ok <file>\` opens a single markdown file.`),this.filePath=e,this.name=`SingleFileNotAFileError`}},$9=class extends Error{constructor(e){super(`OpenKnowledge edits markdown files (.md / .mdx): ${e}`),this.filePath=e,this.name=`SingleFileNotMarkdownError`}};function dve(e){if(!dC(e))throw new $9(e);let t;try{t=zl(z(e))}catch(t){throw t.code===`ENOENT`?new Z9(e):t}if(!Ul(t).isFile())throw new Q9(e);let n=I(t),r=KV(n);if(r){let e=r.rootPath;return{mode:`project`,projectRoot:e,docName:pC(R(fve(e),t).split(Sl).join(`/`)),canonicalFilePath:t}}let i=gl(t);return{mode:`ephemeral`,canonicalFilePath:t,contentDir:n,singleDocRelPath:i,docName:pC(i)}}function fve(e){return z(e,To({absPath:Oo(`project`,e),sideline:!1,warn:()=>{}}).value.content?.dir??`.`)}function pve(e){let t=Nl(z(Ql(),`ok-ephemeral-`)),n=z(t,`.ok`);return Ml(n,{recursive:!0}),Gl(z(n,`config.yml`),`# Ephemeral single-file session (\`ok <file>\`). Throwaway — safe to delete.\ncontent:\n dir: ${JSON.stringify(e)}\n`,`utf-8`),Gl(z(n,`.gitignore`),`local/
3267
3267
  `,`utf-8`),t}export{a4 as $,tC as $i,nR as $n,tP as $r,UU as $t,n9 as A,XT as Ai,KB as An,Soe as Ar,HJ as At,y7 as B,$S as Bi,yR as Bn,WP as Br,HG as Bt,w9 as C,mE as Ci,UV as Cn,MI as Cr,XJ as Ct,t9 as D,iE as Di,ZB as Dn,TI as Dr,Mq as Dt,Q7 as E,pE as Ei,XB as En,CI as Er,Nq as Et,T7 as F,iC as Fi,Lz as Fn,ooe as Fr,LG as Ft,$8 as G,JS as Gi,xR as Gn,TP as Gr,qG as Gt,h7 as H,GS as Hi,_R as Hn,UP as Hr,$G as Ht,wge as I,cC as Ii,Rz as In,xF as Ir,ZG as It,J8 as J,eC as Ji,gR as Jn,$N as Jr,PG as Jt,e5 as K,zS as Ki,OR as Kn,gP as Kr,UG as Kt,D7 as L,aC as Li,Bz as Ln,bF as Lr,YG as Lt,Z7 as M,G as Mi,VB as Mn,bI as Mr,uK as Mt,G7 as N,kC as Ni,NB as Nn,xoe as Nr,sK as Nt,i9 as O,DT as Oi,UB as On,wI as Or,tJ as Ot,H7 as P,uC as Pi,TB as Pn,YF as Pr,nK as Pt,e4 as Q,ZS as Qi,uR as Qn,nP as Qr,KU as Qt,E7 as R,sC as Ri,Vz as Rn,VP as Rr,QG as Rt,I9 as S,QT as Si,OV as Sn,jI as Sr,JJ as St,x9 as T,fE as Ti,oV as Tn,Doe as Tr,GJ as Tt,n5 as U,KS as Ui,SR as Un,LP as Ur,GG as Ut,v7 as V,WS as Vi,bR as Vn,HP as Vr,XG as Vt,r5 as W,VS as Wi,zR as Wn,vP as Wr,WG as Wt,Q2 as X,QS as Xi,pR as Xn,rP as Xr,oW as Xt,R8 as Y,RS as Yi,mR as Yn,YN as Yr,sW as Yt,$2 as Z,XS as Zi,hR as Zn,eP as Zr,JU as Zt,U_e as _,Eu as _a,VD as _i,lV as _n,wL as _r,$J as _t,dve as a,Wre as aa,tN as ai,bH as an,qL as ar,N2 as at,F9 as b,Rie as bi,xV as bn,UI as br,KJ as bt,ive as c,Dh as ca,$M as ci,TH as cn,JL as cr,y2 as ct,eve as d,$u as da,EA as di,CH as dn,LL as dr,FZ as dt,IS as ea,kN as ei,WU as en,sR as er,wse as et,X_e as f,sd as fa,OA as fi,KV as fn,kL as fr,lZ as ft,W_e as g,Nu as ga,HD as gi,uV as gn,yL as gr,cY as gt,$_e as h,Fu as ha,zk as hi,kV as hn,CL as hr,jZ as ht,pve as i,vS as ia,iN as ii,fH as in,QL as ir,M2 as it,r9 as j,AC as ji,GB as jn,xI as jr,qq as jt,$7 as k,OT as ki,WB as kn,SI as kr,nJ as kt,W9 as l,Eh as la,QM as li,SH as ln,RL as lr,b2 as lt,Q_e as m,Iu as ma,Hk as mi,rV as mn,SL as mr,DZ as mt,Z9 as n,DS as na,HN as ni,zU as nn,YL as nr,G2 as nt,X9 as o,Th as oa,eN as oi,xH as on,KL as or,P2 as ot,Z_e as p,Qu as pa,TA as pi,GV as pn,IL as pr,QZ as pt,Z8 as q,US as qi,wR as qn,iP as qr,NG as qt,$9 as r,TS as ra,rN as ri,IU as rn,ZL as rr,B2 as rt,lve as s,wh as sa,XM as si,gH as sn,XL as sr,x2 as st,Q9 as t,kS as ta,AN as ti,BU as tn,$L as tr,K2 as tt,nve as u,od as ua,DA as ui,mH as un,zL as ur,C0 as ut,V_e as v,Tu as va,BD as vi,AV as vn,TL as vr,qJ as vt,C9 as w,_E as wi,DV as wn,kI as wr,QJ as wt,P9 as x,ID as xi,cV as xn,AI as xr,YJ as xt,R9 as y,LD as yi,EV as yn,sL as yr,ZJ as yt,fge as z,rC as zi,zz as zn,BP as zr,VG as zt};
3268
- //# sourceMappingURL=src-Du7SIOP-.mjs.map
3268
+ //# sourceMappingURL=src-BCD8rTYl.mjs.map
@@ -1,4 +1,4 @@
1
- import{o as e}from"./chunk-DTipWd-i.mjs";import{F as t,I as n,La as r,_o as i,go as a}from"./src-M0w4w7wj.mjs";import{Kr as o,at as s,fi as c,fn as l,it as u,ot as d,rt as f,va as p}from"./src-Du7SIOP-.mjs";import{K as m}from"./sleep-DTzPXGtM.mjs";import{O as h,P as g}from"./fs-traced-BmZQL7v9.mjs";import{S as _,u as v,v as y,x as b}from"./server-lock-Cb67kdiB.mjs";import{t as x}from"./yazl-BafwB467.mjs";import{C as S,d as C,i as w,v as T,y as ee}from"./write-project-skill-fJOezUXa.mjs";import{c as te}from"./colors-BsmVIwfM.mjs";import"./acp-harness-probe-CuWpq8nc.mjs";import{D as E,E as D,S as ne,T as O,_ as k,b as re,o as ie,v as A}from"./init-BS4baNmF.mjs";import{n as ae}from"./constants-D0VN0nav.mjs";import{t as j}from"./is-object-ByG7RnjH.mjs";import"./loader-CuA5lWOn.mjs";import"./preview-Bx2KytPR.mjs";import{execSync as oe,spawnSync as M}from"node:child_process";import{basename as N,dirname as P,isAbsolute as se,join as F,relative as ce,resolve as I,sep as le}from"node:path";import{cpSync as ue,createWriteStream as de,existsSync as L,lstatSync as fe,mkdirSync as R,mkdtempSync as pe,readFileSync as z,readdirSync as me,readlinkSync as he,rmSync as ge,statSync as _e,writeFileSync as B}from"node:fs";import{arch as ve,freemem as ye,homedir as be,hostname as xe,platform as Se,release as Ce,tmpdir as we,totalmem as Te,type as Ee,uptime as De}from"node:os";import{realpath as V}from"node:fs/promises";import{createHash as Oe}from"node:crypto";var H=m();const ke=new Set([`start`,`stop`,`status`,`clean`,`ui`,`mcp`,`preview`,`lint`,`deinit`,`auth`]);function Ae(e,t,n=l){if(e!==void 0&&!ke.has(e))return null;let r=n(t);return r===null||r.distance===0?null:r.rootPath}let je=null;function Me(e){je=e}function Ne(){return je??process.cwd()}function Pe(){return F(be(),`.ok`,`bug-reports`)}function Fe(e=new Date){let t=e.toISOString().replace(/[:.]/g,`-`),n=Pe(),r=`${t}-bugreport`,i=F(n,`${r}.zip`);for(let e=2;L(i);e+=1)i=F(n,`${r}-${e}.zip`);return i}function Ie(e,t){let n=F(e,`.ok`,`config.yml`);if(L(n))try{let e=z(n,`utf8`).match(/^\s*name:\s*['"]?(.+?)['"]?\s*$/m);if(e?.[1])return e[1]}catch(e){t?.warn({configPath:n,err:e},`bug-report: failed to read .ok/config.yml for project slug; using path-hash fallback`)}return L(F(e,`.ok`))?Oe(`sha256`).update(I(e)).digest(`hex`).slice(0,12):null}function Le(){let e={timestamp:new Date().toISOString(),platform:Se(),osType:Ee(),osRelease:Ce(),hostname:`[redacted]`,uptime:De(),freeMem:ye(),totalMem:Te(),nodeVersion:process.version,bunVersion:process.versions.bun??null,v8Version:process.versions.v8??null,pid:process.pid};try{e.macosVersion=oe(`sw_vers -productVersion 2>/dev/null`,o({encoding:`utf8`})).trim()}catch{}try{let t=F(__dirname,`..`,`..`,`package.json`);L(t)&&(e.okVersion=JSON.parse(z(t,`utf8`)).version)}catch{}return e}function Re(e,t){return ze(e,t).files}function ze(e,t){if(!L(t))return{files:[]};let n=me(t).filter(e=>e.endsWith(`.log`)||/\.log\.\d+$/.test(e)).map(e=>F(t,e));if(e&&n.length>0){let t=n.filter(t=>{try{return z(t,`utf8`).includes(`"project":"${e}"`)}catch{return!0}});t.length>0&&(n=t)}return{files:n}}function Be(e){let n=F(e,`.ok`,`local`);return L(n)?{files:[`server.lock`,`last-spawn-error.log`,t].map(e=>F(n,e)).filter(e=>L(e))}:{files:[]}}function Ve(e){let t=F(e,`.ok`,`local`,`logs`);return L(t)?{files:[`server-current.jsonl`,`server-prev.jsonl`].map(e=>F(t,e)).filter(e=>L(e))}:{files:[]}}function He(e){if(e.redact){let{redacted:t,patterns:n,lineCount:r}=i(e.content);e.zipfile.addBuffer(Buffer.from(t,`utf8`),e.name),e.bundleFiles.push(e.name),n.length>0&&e.redactions.push({file:e.name,lineCount:r,patterns:n})}else e.zipfile.addBuffer(Buffer.from(e.content,`utf8`),e.name),e.bundleFiles.push(e.name)}function U(e){for(let t of e.files)try{He({zipfile:e.zipfile,name:`${e.prefix}/${N(t)}`,content:z(t,`utf8`),redact:e.redact,bundleFiles:e.bundleFiles,redactions:e.redactions})}catch(n){e.logger?.warn({file:t,prefix:e.prefix,err:n},`bug-report: skipped unreadable file`)}}async function Ue(t){let{redact:n,outputPath:r,logger:i}=t,o=t.userLogsDir??F(be(),`.ok`,`logs`),s=t.projectDir?Ie(t.projectDir,i):null;R(P(r),{recursive:!0}),i?.info({projectSlug:s},`gathering diagnostic data`);let c=Le();c.desktop=t.desktop??null;let{files:l}=ze(s,o),{files:u}=t.projectDir?Be(t.projectDir):{files:[]},{files:d}=t.projectDir?Ve(t.projectDir):{files:[]};i?.info({logFileCount:l.length,lockFileCount:u.length,localSinkFileCount:d.length},`files collected`);let f=[],p=[],{ZipFile:m}=await import(`./yazl-vwTkB7U0.mjs`).then(t=>e(t.default,1)),h=new m;U({zipfile:h,files:l,prefix:`logs`,redact:n,bundleFiles:p,redactions:f,logger:i}),U({zipfile:h,files:u,prefix:`lockdir`,redact:n,bundleFiles:p,redactions:f,logger:i}),U({zipfile:h,files:d,prefix:`local-logs`,redact:n,bundleFiles:p,redactions:f,logger:i});for(let e of t.extraFiles??[])try{let t=z(e.sourcePath),n=`extra/${e.zipName??N(e.sourcePath)}`;h.addBuffer(t,n),p.push(n)}catch(t){i?.warn({sourcePath:e.sourcePath,err:t},`extra file unreadable; omitted from bundle`)}t.note&&He({zipfile:h,name:`note.txt`,content:t.note,redact:n,bundleFiles:p,redactions:f});let g=JSON.stringify(c,null,2);h.addBuffer(Buffer.from(g,`utf8`),`sysinfo.json`),p.push(`sysinfo.json`);let _={generatedAt:new Date().toISOString(),disciplineVersion:`1.0.0`,projectSlug:s,files:p,redactions:f,sysinfo:c};h.addBuffer(Buffer.from(JSON.stringify(_,null,2),`utf8`),`MANIFEST.json`);let v=f.reduce((e,t)=>e+t.lineCount,0),y=[`# Bug Report Bundle`,``,`Generated: ${_.generatedAt}`,`Project: ${s??`(unscoped)`}`,`Discipline version: ${_.disciplineVersion}`,``,`## Contents`,``,...p.map(e=>`- ${e}`),``,`## Privacy`,``,...n?[`This bundle was auto-redacted before packaging.`,`Patterns checked: ${a.join(`, `)}`,v>0?`${v} line(s) were scrubbed across ${f.length} file(s).`:`No redactions were needed.`,`See MANIFEST.json for the full redaction audit report.`,``,`This bundle is safe to attach to a GitHub issue.`]:[`Redaction was disabled for this bundle; file contents are unmodified.`]].join(`
1
+ import{o as e}from"./chunk-DTipWd-i.mjs";import{F as t,I as n,La as r,_o as i,go as a}from"./src-M0w4w7wj.mjs";import{Kr as o,at as s,fi as c,fn as l,it as u,ot as d,rt as f,va as p}from"./src-BCD8rTYl.mjs";import{K as m}from"./sleep-DTzPXGtM.mjs";import{O as h,P as g}from"./fs-traced-BmZQL7v9.mjs";import{S as _,u as v,v as y,x as b}from"./server-lock-Cb67kdiB.mjs";import{t as x}from"./yazl-BafwB467.mjs";import{C as S,d as C,i as w,v as T,y as ee}from"./write-project-skill-Dkx-twoj.mjs";import{c as te}from"./colors-BsmVIwfM.mjs";import"./acp-harness-probe-YBOSkdVZ.mjs";import{D as E,E as D,S as ne,T as O,_ as k,b as re,o as ie,v as A}from"./init-B6G5TNEZ.mjs";import{n as ae}from"./constants-CwItHkkD.mjs";import{t as j}from"./is-object-ByG7RnjH.mjs";import"./loader-Bv75gnFR.mjs";import"./preview-BDH87oqy.mjs";import{execSync as oe,spawnSync as M}from"node:child_process";import{basename as N,dirname as P,isAbsolute as se,join as F,relative as ce,resolve as I,sep as le}from"node:path";import{cpSync as ue,createWriteStream as de,existsSync as L,lstatSync as fe,mkdirSync as R,mkdtempSync as pe,readFileSync as z,readdirSync as me,readlinkSync as he,rmSync as ge,statSync as _e,writeFileSync as B}from"node:fs";import{arch as ve,freemem as ye,homedir as be,hostname as xe,platform as Se,release as Ce,tmpdir as we,totalmem as Te,type as Ee,uptime as De}from"node:os";import{realpath as V}from"node:fs/promises";import{createHash as Oe}from"node:crypto";var H=m();const ke=new Set([`start`,`stop`,`status`,`clean`,`ui`,`mcp`,`preview`,`lint`,`deinit`,`auth`]);function Ae(e,t,n=l){if(e!==void 0&&!ke.has(e))return null;let r=n(t);return r===null||r.distance===0?null:r.rootPath}let je=null;function Me(e){je=e}function Ne(){return je??process.cwd()}function Pe(){return F(be(),`.ok`,`bug-reports`)}function Fe(e=new Date){let t=e.toISOString().replace(/[:.]/g,`-`),n=Pe(),r=`${t}-bugreport`,i=F(n,`${r}.zip`);for(let e=2;L(i);e+=1)i=F(n,`${r}-${e}.zip`);return i}function Ie(e,t){let n=F(e,`.ok`,`config.yml`);if(L(n))try{let e=z(n,`utf8`).match(/^\s*name:\s*['"]?(.+?)['"]?\s*$/m);if(e?.[1])return e[1]}catch(e){t?.warn({configPath:n,err:e},`bug-report: failed to read .ok/config.yml for project slug; using path-hash fallback`)}return L(F(e,`.ok`))?Oe(`sha256`).update(I(e)).digest(`hex`).slice(0,12):null}function Le(){let e={timestamp:new Date().toISOString(),platform:Se(),osType:Ee(),osRelease:Ce(),hostname:`[redacted]`,uptime:De(),freeMem:ye(),totalMem:Te(),nodeVersion:process.version,bunVersion:process.versions.bun??null,v8Version:process.versions.v8??null,pid:process.pid};try{e.macosVersion=oe(`sw_vers -productVersion 2>/dev/null`,o({encoding:`utf8`})).trim()}catch{}try{let t=F(__dirname,`..`,`..`,`package.json`);L(t)&&(e.okVersion=JSON.parse(z(t,`utf8`)).version)}catch{}return e}function Re(e,t){return ze(e,t).files}function ze(e,t){if(!L(t))return{files:[]};let n=me(t).filter(e=>e.endsWith(`.log`)||/\.log\.\d+$/.test(e)).map(e=>F(t,e));if(e&&n.length>0){let t=n.filter(t=>{try{return z(t,`utf8`).includes(`"project":"${e}"`)}catch{return!0}});t.length>0&&(n=t)}return{files:n}}function Be(e){let n=F(e,`.ok`,`local`);return L(n)?{files:[`server.lock`,`last-spawn-error.log`,t].map(e=>F(n,e)).filter(e=>L(e))}:{files:[]}}function Ve(e){let t=F(e,`.ok`,`local`,`logs`);return L(t)?{files:[`server-current.jsonl`,`server-prev.jsonl`].map(e=>F(t,e)).filter(e=>L(e))}:{files:[]}}function He(e){if(e.redact){let{redacted:t,patterns:n,lineCount:r}=i(e.content);e.zipfile.addBuffer(Buffer.from(t,`utf8`),e.name),e.bundleFiles.push(e.name),n.length>0&&e.redactions.push({file:e.name,lineCount:r,patterns:n})}else e.zipfile.addBuffer(Buffer.from(e.content,`utf8`),e.name),e.bundleFiles.push(e.name)}function U(e){for(let t of e.files)try{He({zipfile:e.zipfile,name:`${e.prefix}/${N(t)}`,content:z(t,`utf8`),redact:e.redact,bundleFiles:e.bundleFiles,redactions:e.redactions})}catch(n){e.logger?.warn({file:t,prefix:e.prefix,err:n},`bug-report: skipped unreadable file`)}}async function Ue(t){let{redact:n,outputPath:r,logger:i}=t,o=t.userLogsDir??F(be(),`.ok`,`logs`),s=t.projectDir?Ie(t.projectDir,i):null;R(P(r),{recursive:!0}),i?.info({projectSlug:s},`gathering diagnostic data`);let c=Le();c.desktop=t.desktop??null;let{files:l}=ze(s,o),{files:u}=t.projectDir?Be(t.projectDir):{files:[]},{files:d}=t.projectDir?Ve(t.projectDir):{files:[]};i?.info({logFileCount:l.length,lockFileCount:u.length,localSinkFileCount:d.length},`files collected`);let f=[],p=[],{ZipFile:m}=await import(`./yazl-vwTkB7U0.mjs`).then(t=>e(t.default,1)),h=new m;U({zipfile:h,files:l,prefix:`logs`,redact:n,bundleFiles:p,redactions:f,logger:i}),U({zipfile:h,files:u,prefix:`lockdir`,redact:n,bundleFiles:p,redactions:f,logger:i}),U({zipfile:h,files:d,prefix:`local-logs`,redact:n,bundleFiles:p,redactions:f,logger:i});for(let e of t.extraFiles??[])try{let t=z(e.sourcePath),n=`extra/${e.zipName??N(e.sourcePath)}`;h.addBuffer(t,n),p.push(n)}catch(t){i?.warn({sourcePath:e.sourcePath,err:t},`extra file unreadable; omitted from bundle`)}t.note&&He({zipfile:h,name:`note.txt`,content:t.note,redact:n,bundleFiles:p,redactions:f});let g=JSON.stringify(c,null,2);h.addBuffer(Buffer.from(g,`utf8`),`sysinfo.json`),p.push(`sysinfo.json`);let _={generatedAt:new Date().toISOString(),disciplineVersion:`1.0.0`,projectSlug:s,files:p,redactions:f,sysinfo:c};h.addBuffer(Buffer.from(JSON.stringify(_,null,2),`utf8`),`MANIFEST.json`);let v=f.reduce((e,t)=>e+t.lineCount,0),y=[`# Bug Report Bundle`,``,`Generated: ${_.generatedAt}`,`Project: ${s??`(unscoped)`}`,`Discipline version: ${_.disciplineVersion}`,``,`## Contents`,``,...p.map(e=>`- ${e}`),``,`## Privacy`,``,...n?[`This bundle was auto-redacted before packaging.`,`Patterns checked: ${a.join(`, `)}`,v>0?`${v} line(s) were scrubbed across ${f.length} file(s).`:`No redactions were needed.`,`See MANIFEST.json for the full redaction audit report.`,``,`This bundle is safe to attach to a GitHub issue.`]:[`Redaction was disabled for this bundle; file contents are unmodified.`]].join(`
2
2
  `);h.addBuffer(Buffer.from(y,`utf8`),`README.md`),h.end();let b=de(r);return h.outputStream.pipe(b),await new Promise((e,t)=>{b.on(`close`,e),b.on(`error`,t)}),i?.info({bundlePath:r,fileCount:p.length,redactionCount:v},`bundle written`),{zipPath:r,summary:{projectSlug:s,files:p,redactions:f,redactedLineCount:v,generatedAt:_.generatedAt}}}var We=e(x(),1),W=e(te(),1);function G(e,t){return t.length===0||!e.includes(t)?e:e.split(t).join(`<CONTENT_DIR>`)}function Ge(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function K(e,t){if(typeof e==`string`)return G(e,t.contentDir);if(Array.isArray(e))return e.map(e=>K(e,t));if(!Ge(e))return e;let n={};for(let[r,i]of Object.entries(e))n[r]=K(i,t);return n}function Ke(e,t){let n=z(e,`utf-8`);if(n.length===0)return;let r=n.endsWith(`
3
3
  `),i=n.split(`
4
4
  `),a=[];for(let e=0;e<i.length;e++){let n=i[e]??``;if(!(e===i.length-1&&n===``)){if(n.length===0){a.push(``);continue}try{let e=K(JSON.parse(n),t);a.push(JSON.stringify(e))}catch{a.push(n)}}}B(e,r?`${a.join(`
@@ -17,4 +17,4 @@ import{o as e}from"./chunk-DTipWd-i.mjs";import{F as t,I as n,La as r,_o as i,go
17
17
  `).replace(/\n/g,`\r
18
18
  `));let u=`${i?``:``}${l}`;return u!==r&&g(e,u,{mode:O(e)}),{kind:`removed`}}function ln(e){return e==null?!1:e.includes(`--type=utility`)&&e.includes(`--utility-sub-type=node.mojom.NodeService`)}function un(e,t=Date.now()){let n=new Date(e).getTime();if(Number.isNaN(n))return`—`;let r=t-n,i=Math.floor(r/1e3);if(i<60)return`${i}s`;let a=Math.floor(i/60);if(a<60)return`${a}m ago`;let o=Math.floor(a/60);return o<24?`${o}h ago`:`${Math.floor(o/24)}d ago`}function dn(e,t,n,r,i,a){if(t.status===`missing`||t.status===`corrupt`)return null;let o=t.lock,s=null;if(n.status!==`missing`&&n.status!==`corrupt`){let e=n.lock;s={port:e.port,status:n.status,pid:e.pid,startedAt:e.startedAt,usage:a}}return{directory:o.worktreeRoot,server:{port:o.port,status:t.status,pid:o.pid,startedAt:o.startedAt,usage:i},ui:s,hostname:o.hostname,lockPath:t.lockPath,binary:r==null?null:u(r),command:r,isDesktop:ln(r)}}function fn(e){return e.ui==null?!1:e.ui.status===`alive`||e.ui.status===`foreign-host`}function Q(e){let t=e.server.status;return t===`alive`||t===`foreign-host`?e.isDesktop?`desktop`:t===`alive`?`running`:`foreign`:t===`dead-pid`&&fn(e)?`ui-orphan`:`stale`}const pn=new Set([`running`,`desktop`,`foreign`,`ui-orphan`]);function mn(e){switch(e){case`running`:return W.default.green(e);case`desktop`:return W.default.blue(e);case`foreign`:return W.default.cyan(e);case`ui-orphan`:return W.default.magenta(e);case`stale`:return W.default.yellow(e)}}function hn(e){return e==null?`—`:`${e.cpuPercent.toFixed(1)}% / ${e.memPercent.toFixed(1)}%`}function gn(e){return`${hn(e.server.usage)} | ${hn(e.ui?.usage??null)}`}function _n(e){return`${e.server.port===0?`(starting)`:String(e.server.port)} / ${e.ui==null||e.ui.status===`dead-pid`?`—`:String(e.ui.port)}`}function vn(e){if(e.length===0)return`No open-knowledge servers found.`;let t=[`DIRECTORY`,`PORTS (API/UI)`,`CPU/MEM (API | UI)`,`STATUS`,`PID`,`STARTED`,`BINARY`],n=e.map(e=>{let t=Q(e),n=t===`ui-orphan`&&e.ui!=null?e.ui.pid:e.server.pid;return[e.directory,_n(e),gn(e),t,String(n),un(e.server.startedAt),e.binary??`—`]}),r=t.length,i=t.map(e=>e.length);for(let e of n)for(let t=0;t<r;t++)i[t]=Math.max(i[t]??0,(e[t]??``).length);let a=t.map((e,t)=>e.padEnd(i[t]??0)).join(` `).trimEnd(),o=e.map((e,t)=>{let a=n[t]??[],o=[];for(let t=0;t<r;t++){let n=(a[t]??``).padEnd(i[t]??0);if(t===3){let r=a[t]??``;n=mn(Q(e))+` `.repeat(Math.max(0,(i[t]??0)-r.length))}o.push(n)}return o.join(` `).trimEnd()}),s=W.default.dim(`To stop a server: ok stop <port|pid|directory|all>`);return[a,...o,``,s].join(`
19
19
  `)}async function yn(e={}){let t=e.discover??f,n=e.inspect??Z,r=e.log??(e=>console.log(e)),i=e.resolveCommand??s,a=e.resolveUsage??d,o=await t(),c=[];for(let e of o){let t=n(e,`server`),r=n(e,`ui`),o=dn(e,t,r,t.status===`missing`||t.status===`corrupt`?null:i(t.lock.pid),t.status===`missing`||t.status===`corrupt`?null:a(t.lock.pid),r.status===`missing`||r.status===`corrupt`?null:a(r.lock.pid));o!=null&&c.push(o)}if(e.json){let e=c.map(e=>({...e,displayStatus:Q(e)}));r(JSON.stringify(e,null,2));return}r(vn(e.all?c:c.filter(e=>pn.has(Q(e)))))}function bn(){return new S(`ps`).description(`List all running open-knowledge servers`).argument(`[modifier]`,`"all" to include stale (dead-pid) entries`).option(`--all`,`Include stale (dead-pid) entries (foreign-host shows by default)`).option(`--json`,`Emit structured JSON (always includes all statuses)`).action(async(e,t)=>{await yn({all:t.all===!0||e===`all`,json:t.json===!0})})}function xn(e,t,n={}){let r=n.isAlive??b,i=[];for(let[n,a]of[[`server`,e],[`ui`,t]])(a.status===`alive`||a.status===`foreign-host`&&r(a.lock.pid))&&i.push({name:n,pid:a.lock.pid,port:a.lock.port});return{targets:i}}function Sn(e){let t=e.inspect??(t=>Z(e.lockDir,t)),n=e.kill??((e,t)=>process.kill(e,t)),r=e.log??(e=>console.log(e)),i=e.error??(e=>console.error(e)),a=xn(t(`server`),t(`ui`),{isAlive:e.isAlive});if(a.targets.length===0)return r(`No running open-knowledge processes.`),{stopped:[],failed:[],hadTargets:!1};let o=[],s=[];for(let e of a.targets)try{n(e.pid,`SIGTERM`),o.push(e)}catch(t){s.push({target:e,error:t instanceof Error?t.message:String(t)})}return o.length>0&&r(`Stopped: ${o.map(e=>`${e.name} (pid=${e.pid}, port=${e.port})`).join(`, `)}`),s.length>0&&i(`Failed to stop: ${s.map(({target:e,error:t})=>`${e.name} (pid=${e.pid}): ${t}`).join(`; `)}`),{stopped:o,failed:s,hadTargets:!0}}function $(e,t){return e.status===`alive`?!0:e.status===`foreign-host`?t(e.lock.pid):!1}async function Cn(e,t=b){let n=await f(),r=null;for(let i of n){let n=Z(i,`server`),a=Z(i,`ui`);if($(n,t)&&n.lock.port===e||$(a,t)&&a.lock.port===e)return i;r===null&&($(n,t)&&n.lock.pid===e||$(a,t)&&a.lock.pid===e)&&(r=i)}return r}function wn(e){let t=Sn({lockDir:e});return t.failed.length>0&&(process.exitCode=1),t}function Tn(e){return new S(`stop`).description(`Stop open-knowledge server(s). With no argument: stops the server for the current directory. Pass a port number, a directory path, or "all" to target globally.`).argument(`[target...]`,`port number, directory path (spaces OK), or "all"`).action(async t=>{let n=t.length===0?void 0:t.join(` `);if(n===void 0){e();let t=Sn({lockDir:c(process.cwd()),log:()=>{}});if(t.hadTargets){if(t.stopped.length>0){let e=t.stopped.map(e=>`${e.name} (pid=${e.pid}, port=${e.port})`).join(`, `);console.log(`Stopped: ${e}`)}t.failed.length>0&&(process.exitCode=1)}else await yn({});return}if(n===`all`){let e=await f();if(e.length===0){console.log(`No running open-knowledge servers found.`);return}let t=0;for(let n of e){let e=Z(n,`server`),r=Z(n,`ui`);!$(e,b)&&!$(r,b)||(wn(n),t++)}t===0&&console.log(`No running open-knowledge servers found.`);return}if(/^\d+$/.test(n)){let e=Number.parseInt(n,10),t=await Cn(e);if(t===null){console.log(`No running open-knowledge server found with port or PID ${e}.`);return}wn(t);return}wn(c(I(Ne(),n)))})}function En(e){return{event:`mcp-config-decline`,scope:e.scope,surface:e.surface,editorId:e.editorId,reason:e.reason}}async function Dn(e,t){let n,i;try{n=await V(I(e)),i=await V(I(P(e)))}catch{return{kind:`not-git`}}if(!On(n,i))return{kind:`symlink-escape`};let a=F(n,`.git`),o;try{o=_e(a)}catch{return{kind:`not-git`}}if(o.isDirectory()){let e;try{e=await V(a)}catch{return{kind:`not-git`}}if(!On(e,n))return{kind:`symlink-escape`}}else if(!o.isFile())return{kind:`not-git`};let s=p(n);if(s.kind!==`repository`)return{kind:`not-git`};let c=s.repository.readRemoteUrl(`origin`);if(c.kind===`unreadable`)return{kind:`not-git`};if(c.kind===`absent`)return c.reason===`config-missing`?{kind:`not-git`}:{kind:`no-origin`};let l=c.url,u=Wt(l);if(u===null)return{kind:`non-github`};let d=r(u.hostname);if(d===null)return{kind:`non-github`};let f=d===t.host.toLowerCase(),m=u.owner.toLowerCase()===t.owner.toLowerCase(),h=u.name.toLowerCase()===t.repo.toLowerCase();return!f&&m&&h?{kind:`wrong-host`,actualHost:d}:!f||!m||!h?{kind:`wrong-repo`,actualOwner:u.owner,actualRepo:u.name}:{kind:`ok`,gitRemoteUrl:`https://${d}/${u.owner}/${u.name}.git`}}function On(e,t){if(e===t)return!0;let n=ce(t,e);return n.length>0&&!n.startsWith(`..`)&&!se(n)}const kn=[{id:`mcp-config`,write(e,t,n){let r=e.projectConfigPath?.(t);if(!r)return{integration:`mcp-config`,editorId:e.id,action:`skipped-unsupported`};try{let i=A(e,t,n,void 0,r);return i.action===`written`||i.action===`overwritten`?{integration:`mcp-config`,editorId:e.id,action:i.action,path:i.configPath}:i.action===`failed`?{integration:`mcp-config`,editorId:e.id,action:`failed`,path:i.configPath,error:i.error??`unknown failure`}:i.action===`declined`?{integration:`mcp-config`,editorId:e.id,action:`declined`,path:i.configPath,...i.declineReason===void 0?{}:{reason:i.declineReason}}:{integration:`mcp-config`,editorId:e.id,action:`failed`,path:i.configPath,error:`unexpected project-scope action: ${i.action}`}}catch(t){return{integration:`mcp-config`,editorId:e.id,action:`failed`,path:r,error:t instanceof Error?t.message:String(t)}}}},{id:`project-skill`,write(e,t,n){try{let r=w(e,t,{home:n.home});return{integration:`project-skill`,editorId:e.id,action:r.action,...r.path?{path:r.path}:{},...r.error?{error:r.error}:{}}}catch(t){return{integration:`project-skill`,editorId:e.id,action:`failed`,error:t instanceof Error?t.message:String(t)}}}}];function An(e,t,n={},r=kn){let i=[];for(let a of t){let t=C[a];for(let a of r)i.push(a.write(t,e,n))}return i}function jn(e,t,n={}){return{integrations:An(e,t,n)}}export{Fe as C,Ae as D,Me as E,zt as S,Ne as T,Kt as _,Tn as a,Ht as b,Jt as c,tn as d,Zt as f,qt as g,Gt as h,Sn as i,Xt as l,en as m,Dn as n,bn as o,$t as p,En as r,an as s,jn as t,Yt as u,Wt as v,Pe as w,Rt as x,Z as y};
20
- //# sourceMappingURL=src-C2G7uAkJ.mjs.map
20
+ //# sourceMappingURL=src-DAESo1YE.mjs.map
@@ -0,0 +1 @@
1
+ import{_ as e,f as t,r as n}from"./start-MaNLreSP.mjs";export{n as bootStartServer,t as resolveHost,e as startCommand};
@@ -1,3 +1,3 @@
1
- import{L as e,P as t}from"./src-M0w4w7wj.mjs";import{$r as n,Kr as r,a as i,pn as a}from"./src-Du7SIOP-.mjs";import{C as o,w as s}from"./write-project-skill-fJOezUXa.mjs";import{a as c,n as l,t as u}from"./acp-harness-probe-CuWpq8nc.mjs";import{n as d}from"./constants-D0VN0nav.mjs";import{spawn as f}from"node:child_process";import{basename as p,dirname as m,join as h,win32 as g}from"node:path";import{closeSync as _,existsSync as v,mkdirSync as y,openSync as b,statSync as x}from"node:fs";import{homedir as S}from"node:os";import{rm as C}from"node:fs/promises";import{setTimeout as w}from"node:timers/promises";function T(e){let t={...e};return delete t.ELECTRON_RUN_AS_NODE,t}function E(e,t,n={}){let i=(n.spawn??f)(e,[...t],r({detached:!0,stdio:`ignore`,env:T(n.env??process.env)}));return i.unref(),i}const D=`OpenKnowledge.app`,O=`/Applications/${D}`;function k(){return{platform:process.platform,env:process.env,execPath:process.execPath,isTTY:process.stdout.isTTY,statSync:e=>{try{return x(e,{throwIfNoEntry:!1})??null}catch{return null}}}}function A(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`){let t=/(.+?\.app)\/Contents\/MacOS\//.exec(e.execPath);if(t?.[1])return t[1]}if(j(e,O))return O;let t=h(e.homeDir??S(),`Applications`,D);return j(e,t)?t:null}function j(e,t){return M(e,h(t,`Contents`,`MacOS`,`OpenKnowledge`))}function M(e,t){try{let n=e.statSync(t);return n&&typeof n.isFile==`function`?n.isFile():!1}catch{return!1}}const N=[`@inkeepopen-knowledge-desktop`,`OpenKnowledge`];function P(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`&&/\\OpenKnowledge\.exe$/i.test(e.execPath))return e.execPath;let t=e.env.LOCALAPPDATA;if(t)for(let n of N){let r=g.join(t,`Programs`,n,`OpenKnowledge.exe`);if(M(e,r))return r}return null}function F(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`&&e.execPath.endsWith(`/openknowledge`))return e.execPath;let t=`/opt/OpenKnowledge/openknowledge`;return M(e,t)?t:null}function I(e){if(e.env.OK_FORCE_BROWSER===`1`)return{available:!1,reason:`force-browser`};if(e.platform!==`darwin`&&e.platform!==`win32`&&e.platform!==`linux`)return{available:!1,reason:`unsupported-platform`};let t;try{t=e.platform===`darwin`?A(e):e.platform===`win32`?P(e):F(e)}catch{return{available:!1,reason:`stat-error`}}return t?e.env.OK_FORCE_DESKTOP===`1`?{available:!0,reason:`available`,bundlePath:t}:!(e.isTTY===!0||e.platform===`win32`&&e.isTTY===void 0&&!e.env.CI)||e.env.SSH_CONNECTION||e.env.SSH_TTY||e.platform===`linux`&&!e.env.DISPLAY&&!e.env.WAYLAND_DISPLAY?{available:!1,reason:`headless`,bundlePath:t}:{available:!0,reason:`available`,bundlePath:t}:{available:!1,reason:`no-bundle`}}function L(e,t){let n=e.log??(e=>console.error(e)),r=e.platform??process.platform;if(n("Launching OpenKnowledge desktop (use `ok start` for the browser server, or `OK_FORCE_BROWSER=1` to always skip)"),r===`darwin`){E(`open`,[`-b`,`com.inkeep.open-knowledge`],{spawn:e.spawn});return}let i=t?.bundlePath;if(!i){n(`Desktop launch skipped: no resolved desktop executable (caller bug).`);return}E(i,[],{spawn:e.spawn})}function R(e=`no-bundle`){switch(e){case`no-bundle`:return`Desktop app not found (checked the standard install locations for this OS). Install it, or omit --mode for browser mode.`;case`darwin-only`:case`unsupported-platform`:return`Desktop app is not available on this platform. Use --mode=browser, or omit --mode for the server fallback.`;case`headless`:return`Desktop launch is gated in headless contexts (CI, SSH, non-TTY stdout). Set OK_FORCE_DESKTOP=1 to override, or use --mode=browser.`;case`force-browser`:return`OK_FORCE_BROWSER=1 is set — desktop dispatch is disabled. Unset it to use --mode=app.`;case`stat-error`:return`Failed to inspect the desktop install (filesystem error). Check permissions or use --mode=browser.`;case`available`:return`Desktop app appears available but launch dispatch did not fire (caller bug).`}}function z(e){return h(m(e),`..`,`Frameworks`,`OpenKnowledge Server.app`,`Contents`,`MacOS`,`OpenKnowledge Helper`)}const B=/\/[^/]+\.app\/Contents\/MacOS\/[^/]+$/;function ee(e){if(e.platform!==`darwin`||!B.test(e.execPath))return null;let t=z(e.execPath);return e.exists(t)?t:null}function V(e={}){let t=e.execPath??process.execPath,n=e.platform??process.platform,r=e.argv??process.argv,i=e.exists??v,a=r[1];return a?{command:ee({execPath:t,platform:n,exists:i})??t,prefixArgs:[a]}:(console.warn(`[self-spawn] process.argv[1] is empty — falling back to \`npx -y @inkeep/open-knowledge@latest\`. This re-introduces the registry-fetch surface that re-exec was fixing. Observed argv: ${JSON.stringify(r)}`),{command:`npx`,prefixArgs:[`-y`,`@inkeep/open-knowledge@latest`]})}function te(e,t){return e.host??t.HOST??`127.0.0.1`}function H(e){let t=p(e).replace(/[^\x20-\x7E]/g,``).trim().slice(0,64);return`open-knowledge-server ${t.length>0?t:`unknown`}`}var U=class extends Error{cwd;constructor(e){super("This directory isn't set up yet. Run `ok init` first, then `ok start` again."),this.name=`OkDirMissingError`,this.cwd=e}};function W(e){return e.uiLock?e.isAlive(e.uiLock.pid)?{action:`skip`,reason:`alive`,pid:e.uiLock.pid,port:e.uiLock.port}:{action:`spawn`,reason:`stale`,stalePid:e.uiLock.pid}:{action:`spawn`,reason:`absent`}}function G(t){v(t.lockDir)||y(t.lockDir,{recursive:!0});let n=b(h(t.lockDir,e),`w`),r=t.spawn??f,{PORT:i,...a}=process.env,o=V();try{let e=r(o.command,[...o.prefixArgs,...t.args??[`ui`]],{detached:!0,stdio:[`ignore`,`ignore`,n],windowsHide:!0,cwd:t.cwd,env:{...a,ELECTRON_RUN_AS_NODE:`1`}});return e.unref(),e}finally{try{_(n)}catch{}}}function K(e,t,n){return e??(n===void 0?t:void 0)}function q(e,t){return e!==void 0&&t!==null&&t.port>0&&t.draining!==!0}function J(e,t,n){return e??+(t!=null&&!n)}async function Y(e){let t=e.spawn??f,n=V(),{PORT:r,...i}=process.env,a=t(n.command,[...n.prefixArgs,`ui`,`--port`,String(e.uiPort)],{cwd:e.cwd,stdio:`inherit`,windowsHide:!0,env:{...i,ELECTRON_RUN_AS_NODE:`1`}}),o=!1,s=e=>{o=!0;try{a.kill(e)}catch{}},c=()=>s(`SIGINT`),l=()=>s(`SIGTERM`);process.once(`SIGINT`,c),process.once(`SIGTERM`,l),await new Promise(e=>{a.on(`exit`,(t,n)=>{process.exitCode=J(t,n,o),e()}),a.on(`error`,t=>{console.error(`[start] connect fallback: failed to spawn ok ui — ${t instanceof Error?t.message:String(t)}`),process.exitCode=1,e()})}),process.removeListener(`SIGINT`,c),process.removeListener(`SIGTERM`,l)}async function X(e){let t=e.now()+e.timeoutMs;for(;e.now()<t;){let t=e.readUiLock();if(t&&t.port>0)return t.port;await e.sleep(e.pollIntervalMs)}let n=e.readUiLock();return n&&n.port>0?n.port:null}const ne=t;function Z(e,t,n=e=>C(e,{recursive:!0,force:!0})){return async()=>{try{await e()}finally{try{await n(t)}catch(e){process.stderr.write(`[start] ephemeral temp dir reap failed for ${t}: ${e instanceof Error?e.message:String(e)}\n`)}}}}function Q(e,t={}){let n=t.exit??(e=>process.exit(e)),r=t.getActiveHandles??(()=>{let e=process._getActiveHandles;return e?e.call(process):null});return async()=>{let i=!1;try{await e()}catch(e){i=!0,t.log?.error({err:e},`idle-shutdown: destroy failed — exiting anyway`)}finally{let e=null;try{let t=r();if(t!==null){e={};for(let n of t){let t=n?.constructor?.name??`unknown`;e[t]=(e[t]??0)+1}}}catch{e=null}t.log?.info({event:`idle-shutdown-exit`,exitCode:+!!i,openHandles:e??{},handlesAvailable:e!==null},`idle-shutdown: teardown finished — exiting process`),n(+!!i)}}}async function $(e){let t=e.sigtermGraceMs??ne,n=e.sigtermPollIntervalMs??200,r=e.sleep??(e=>w(e)),i=e.reason??`teardown`;try{let a=e.readUiLock(),o=e.spawnedUiPid();if(a&&e.isAlive(a.pid)&&a.pid!==o)e.log?.info({pid:a.pid,port:a.port,spawnedUiPid:o},`${i}: ui.lock holder is not our spawned sibling — leaving it alone`);else if(a&&e.isAlive(a.pid))try{e.killPid(a.pid,`SIGTERM`),e.log?.info({pid:a.pid,port:a.port},`${i}: SIGTERM UI sibling`);let o=Date.now()+t;for(;Date.now()<o&&e.isAlive(a.pid);)await r(n);if(e.isAlive(a.pid))try{e.killPid(a.pid,`SIGKILL`),e.log?.warn({pid:a.pid,graceMs:t},`${i}: SIGTERM grace expired — escalated to SIGKILL`)}catch(t){e.log?.error({pid:a.pid,err:t},`${i}: SIGKILL failed`)}}catch(t){e.log?.warn({pid:a.pid,err:t},`${i}: failed to SIGTERM UI sibling`)}}catch(t){e.log?.warn({err:t},`${i}: UI lookup failed; proceeding`)}}function re(e){let{destroy:t,...n}=e;return async()=>{await $({...n,reason:`idle-shutdown`}),await t()}}async function ie(e){let{config:t,cwd:r,host:o}=e,s=e.skipAutoInit??!1,d=e.skipUiAutoSpawn??!1,f=e.idleThresholdMs??18e5,{existsSync:p,mkdirSync:m}=await import(`node:fs`),{basename:h,dirname:g}=await import(`node:path`),{bootServer:_,getLogger:v,isProcessAlive:y,readUiLock:b,resolveContentDir:x,resolveLockDir:S,waitForServerLockDrain:C}=await import(`./src-B2TsqsDz.mjs`),T=e.log??v(`start`),E=e.singleFile!==void 0,D=e.projectDir??r,O=E?i(e.singleFile).canonicalFilePath:void 0,k=O?g(O):void 0,A=O?h(O):void 0;if(!E){if(!s&&!a(r))throw new U(r);let t=process.env.OK_RECLAIM_DISABLE??null,n=e=>{let t=typeof e.event==`string`?e.event:``;(t.endsWith(`-failed`)||t.endsWith(`-error`)||t.endsWith(`-missing`))&&T.warn({event:e},`[start] reclaim sweep reported a problem`)};try{(e.repairMcpConfigsFn??(await import(`./repair-mcp-configs-I36BFTV3.mjs`)).repairMcpConfigs)({projectDir:r,reclaimDisableEnv:t,logger:n})}catch(e){T.warn({err:e},`[start] mcp-config repair sweep failed; continuing`)}try{(e.repairLaunchJsonFn??(await import(`./repair-launch-json-DYlb3Z6M.mjs`)).repairLaunchJson)({projectDir:r,reclaimDisableEnv:t,logger:n})}catch(e){T.warn({err:e},`[start] launch.json repair sweep failed; continuing`)}try{await(e.repairSkillsFn??(await import(`./repair-skills-DBcVrEEv.mjs`)).repairSkills)({projectDir:r,reclaimDisableEnv:t,logger:n})}catch(e){T.warn({err:e},`[start] skill repair sweep failed; continuing`)}}let j=k??x(t,r);!E&&!p(j)&&(m(j,{recursive:!0}),T.info({contentDir:j},`Created content directory`));let M=null,N=null,P=async({lockDir:t})=>{if(M=W({uiLock:b(t),isAlive:y}),M.action===`spawn`&&!d)try{let n=e.uiPort===void 0?void 0:[`ui`,`--port`,String(e.uiPort)];N=G({lockDir:t,cwd:r,spawn:e.spawn,args:n}).pid??null,T.info({reason:M.reason,uiPort:e.uiPort},`[start] auto-spawned ok ui sibling`)}catch(e){console.warn(`[start] failed to auto-spawn ok ui: ${e instanceof Error?e.message:String(e)}`)}else M.action===`skip`&&T.info({port:M.port,pid:M.pid},`UI already running at port ${M.port}`)},F=e.reactShellDistDir===void 0,I=c(),L=n();{let e=S(E?D:r),t=Date.now(),n=await C(e);n!==`no-drain`&&T.info({event:`start-waited-for-draining-predecessor`,outcome:n,waitedMs:Date.now()-t,drainLockDir:e},n===`released`?`[start] predecessor server finished draining — proceeding`:`[start] predecessor server still draining after wait — proceeding to collide`)}let R=await _({config:t,contentDir:j,projectDir:E?D:r,contentRoot:E?void 0:t.content.dir,port:e.port,host:o,quiet:!1,detectGh:l,tokenStore:I,embeddingsKeyStore:L,...E?{ephemeral:!0,singleDocRelPath:A,gitEnabled:!1,gitPreflight:()=>({ok:!0,version:`0.0.0`,resolvedPath:`git`,source:`PATH`})}:{},localOpCliArgs:[process.execPath,process.argv[1]],probeHarnessManagedMcpEntry:(e,t)=>u(e,t),attachUiSibling:F,idleShutdownMs:f,skipAutoInit:!0,...F?{spawnUiSiblingFn:P}:{},idleShutdownHandler:t=>{let n=re({readUiLock:()=>b(R.lockDir),spawnedUiPid:()=>N,isAlive:y,killPid:(e,t)=>{process.kill(e,t)},destroy:t,log:T});return Q(E?Z(n,D):n,{log:T,exit:e.idleExit})},log:T,...e.serveContentAssets===void 0?{}:{serveContentAssets:e.serveContentAssets},...e.reactShellDistDir?{reactShellDistDir:e.reactShellDistDir}:{}});M||={action:`skip`,reason:`alive`,pid:0,port:0};let z=M,B=null;if(z.action===`skip`)B=z.port>0?z.port:null;else if(!d){let t=e.uiBindTimeoutMs??3e3;B=await X({readUiLock:()=>b(R.lockDir),now:Date.now,sleep:e=>w(e),timeoutMs:t,pollIntervalMs:50}),B===null&&T.warn({timeoutMs:t},`[start] ok ui did not bind within timeout — banner falls back to API URL`)}return{httpServer:R.httpServer,destroy:R.destroy,lockDir:R.lockDir,contentDir:j,port:R.port,ready:R.ready,degraded:R.degraded,uiSpawnDecision:M,spawnedUiPid:N,resolvedUiPort:B}}function ae(e){if(e===`browser`||e===`app`)return e;throw new s(`--mode must be 'browser' or 'app'`)}function oe(e){let t=Number.parseInt(e,10);if(Number.isNaN(t)||t<1||t>65535)throw new s(`--ui-port must be a port number between 1 and 65535`);return t}function se(e){return e.OK_CONSOLE_LEVEL!==void 0||e.LOG_LEVEL!==void 0?null:`warn`}function ce(e){let t=[`Stopping OpenKnowledge…`,`Saving pending changes and releasing the server lock — this can take a few seconds.`];return e===`SIGINT`&&t.push(`Press Ctrl+C again to force quit.`),t}async function le(e,t){let n=se(process.env);n!==null&&(process.env.OK_CONSOLE_LEVEL=n);let{renderBanner:r}=await import(`./banner--DGfdMN8.mjs`),{accent:i,dim:a,error:o,warning:s}=await import(`./colors-MGDi6UGf.mjs`),c=process.cwd(),l=e;process.title=H(c);let u=te(t,process.env),f=t.port===void 0?void 0:Number(t.port),p=process.env.PORT?Number(process.env.PORT):void 0,m=t.uiPort===void 0?void 0:Number(t.uiPort),h=K(f,p,m);if(m!==void 0){let{readServerLock:e,resolveLockDir:t}=await import(`./src-B2TsqsDz.mjs`);if(q(m,e(t(c)))){await Y({cwd:c,uiPort:m});return}}let g;try{g=await ie({config:l,cwd:c,host:u,port:h,...m===void 0?{}:{uiPort:m},...t.serveContentAssets===void 0?{}:{serveContentAssets:t.serveContentAssets},...t.reactShellDistDir?{reactShellDistDir:t.reactShellDistDir}:{},...t.singleFile?{singleFile:t.singleFile}:{},...t.projectDir?{projectDir:t.projectDir}:{}})}catch(e){e instanceof U&&(console.error(o(e.message)),process.exit(1));let t=await import(`./src-B2TsqsDz.mjs`);if((e instanceof t.GitNotAvailableError||e instanceof t.GitTooOldError)&&process.exit(78),(e instanceof t.SingleFileNotFoundError||e instanceof t.SingleFileNotAFileError||e instanceof t.SingleFileNotMarkdownError)&&(console.error(o(e.message)),process.exit(1)),m!==void 0&&ue(e,t)){await Y({cwd:c,uiPort:m});return}let n=de(e,c,t);n!==null&&(console.error(o(n)),process.exit(1)),console.error(`${o(`Failed to start:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exit(1)}let _=!1,v=async e=>{if(_)return;_=!0;let[t,...n]=ce(e);console.log(i(`\n${t}`));for(let e of n)console.log(a(` ${e}`));if(g.spawnedUiPid!==null)try{let{getLogger:e,isProcessAlive:t,readUiLock:n}=await import(`./src-B2TsqsDz.mjs`);await $({readUiLock:()=>n(g.lockDir),spawnedUiPid:()=>g.spawnedUiPid,isAlive:t,killPid:(e,t)=>process.kill(e,t),log:e(`start`),reason:`shutdown`})}catch(e){console.error(`${o(`ui sibling teardown failed:`)} ${e instanceof Error?e.stack??e.message:String(e)}`)}try{await g.destroy()}catch(e){console.error(`${o(`destroy() failed:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exitCode=1}process.exit(process.exitCode??0)};process.once(`SIGINT`,()=>{v(`SIGINT`)}),process.once(`SIGTERM`,()=>{v(`SIGTERM`)});let y=`http://${u}:${g.port}`,b=u===`0.0.0.0`||u===`::`?`http://0.0.0.0:${g.port}`:void 0,x=g.resolvedUiPort,S=x!==null&&x>0?`http://${u}:${x}`:y;console.log(r({name:`open-knowledge`,version:d,localUrl:S,apiUrl:S===y?void 0:y,networkUrl:b,nextSteps:[`Open the Editor URL in your browser to start editing.`]}));let C={"shadow-repo":`Version history and branch-switch safety unavailable`,"file-watcher":`External file changes will not sync to the editor`,"head-watcher":`Git branch switches may cause document inconsistency`};g.ready.then(async()=>{if(g.degraded.length>0){console.log();for(let e of g.degraded){let t=C[e]??`${e} (check server logs for details)`;console.warn(` ${s(`⚠`)} ${s(e)}: ${a(t)}`)}console.log()}if(t.open){let{openBrowser:e}=await import(`./open-browser-C8LJ8Ayv.mjs`);e(S)}}).catch(e=>{console.error(` ${o(`Server initialization failed:`)} ${e instanceof Error?e.message:String(e)}`)})}function ue(e,t){let n=t.ServerLockCollisionError;return n!==void 0&&e instanceof n}function de(e,t,n){let r=n.ServerLockCollisionError;if(r===void 0||!(e instanceof r))return null;try{let e=h(t,`.ok`),r=n.readServerLock(e);return r?r.kind===`interactive`?`OpenKnowledge desktop is currently running on this project. Quit it or use --cwd to point elsewhere.`:r.kind===`mcp-spawned`?"An MCP-spawned server holds this lock; it should release on idle-shutdown (~30 min). Or run `ok stop`.":"OpenKnowledge server is already running on this project — check `ok status` or `ok stop`.":"OpenKnowledge server is already running on this project — check `ok status` or `ok stop`."}catch{return null}}function fe(e){return new o(`start`).description(`Start the knowledge base collab server`).option(`-p, --port <port>`,`Server port`,void 0).option(`--ui-port <port>`,`Pin the ok ui sibling to <port> and connect (not exit) if a server already runs here — the worktree-preview recipe path`,oe).option(`-H, --host <host>`,`Server host`,void 0).option(`--open`,`Open browser after start`).option(`--mode <mode>`,`Force dispatch mode: 'browser' or 'app'`,ae).option(`--serve-content-assets`,`Serve content assets from this server (now the default; kept for compatibility)`).option(`--react-shell-dist-dir <path>`,`Serve React shell from <path> (suppresses ok ui sibling)`).option(`--single-file <path>`,`No-project ephemeral single-file mode: scope the server to one markdown file (git + MCP off)`).option(`--project-dir <dir>`,`Throwaway project root for --single-file (where ephemeral .ok/ state lives)`).action(async t=>{let n=e();if(t.mode===`app`){t.open&&(process.stderr.write(`error: option '--mode=app' cannot be combined with '--open' (--open opens a browser tab against the local server, which app mode does not boot)
1
+ import{L as e,P as t}from"./src-M0w4w7wj.mjs";import{$r as n,Kr as r,a as i,pn as a}from"./src-BCD8rTYl.mjs";import{C as o,w as s}from"./write-project-skill-Dkx-twoj.mjs";import{a as c,n as l,t as u}from"./acp-harness-probe-YBOSkdVZ.mjs";import{n as d}from"./constants-CwItHkkD.mjs";import{spawn as f}from"node:child_process";import{basename as p,dirname as m,join as h,win32 as g}from"node:path";import{closeSync as _,existsSync as v,mkdirSync as y,openSync as b,statSync as x}from"node:fs";import{homedir as S}from"node:os";import{rm as C}from"node:fs/promises";import{setTimeout as w}from"node:timers/promises";function T(e){let t={...e};return delete t.ELECTRON_RUN_AS_NODE,t}function E(e,t,n={}){let i=(n.spawn??f)(e,[...t],r({detached:!0,stdio:`ignore`,env:T(n.env??process.env)}));return i.unref(),i}const D=`OpenKnowledge.app`,O=`/Applications/${D}`;function k(){return{platform:process.platform,env:process.env,execPath:process.execPath,isTTY:process.stdout.isTTY,statSync:e=>{try{return x(e,{throwIfNoEntry:!1})??null}catch{return null}}}}function A(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`){let t=/(.+?\.app)\/Contents\/MacOS\//.exec(e.execPath);if(t?.[1])return t[1]}if(j(e,O))return O;let t=h(e.homeDir??S(),`Applications`,D);return j(e,t)?t:null}function j(e,t){return M(e,h(t,`Contents`,`MacOS`,`OpenKnowledge`))}function M(e,t){try{let n=e.statSync(t);return n&&typeof n.isFile==`function`?n.isFile():!1}catch{return!1}}const N=[`@inkeepopen-knowledge-desktop`,`OpenKnowledge`];function P(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`&&/\\OpenKnowledge\.exe$/i.test(e.execPath))return e.execPath;let t=e.env.LOCALAPPDATA;if(t)for(let n of N){let r=g.join(t,`Programs`,n,`OpenKnowledge.exe`);if(M(e,r))return r}return null}function F(e){if(e.env.ELECTRON_RUN_AS_NODE===`1`&&e.execPath.endsWith(`/openknowledge`))return e.execPath;let t=`/opt/OpenKnowledge/openknowledge`;return M(e,t)?t:null}function I(e){if(e.env.OK_FORCE_BROWSER===`1`)return{available:!1,reason:`force-browser`};if(e.platform!==`darwin`&&e.platform!==`win32`&&e.platform!==`linux`)return{available:!1,reason:`unsupported-platform`};let t;try{t=e.platform===`darwin`?A(e):e.platform===`win32`?P(e):F(e)}catch{return{available:!1,reason:`stat-error`}}return t?e.env.OK_FORCE_DESKTOP===`1`?{available:!0,reason:`available`,bundlePath:t}:!(e.isTTY===!0||e.platform===`win32`&&e.isTTY===void 0&&!e.env.CI)||e.env.SSH_CONNECTION||e.env.SSH_TTY||e.platform===`linux`&&!e.env.DISPLAY&&!e.env.WAYLAND_DISPLAY?{available:!1,reason:`headless`,bundlePath:t}:{available:!0,reason:`available`,bundlePath:t}:{available:!1,reason:`no-bundle`}}function L(e,t){let n=e.log??(e=>console.error(e)),r=e.platform??process.platform;if(n("Launching OpenKnowledge desktop (use `ok start` for the browser server, or `OK_FORCE_BROWSER=1` to always skip)"),r===`darwin`){E(`open`,[`-b`,`com.inkeep.open-knowledge`],{spawn:e.spawn});return}let i=t?.bundlePath;if(!i){n(`Desktop launch skipped: no resolved desktop executable (caller bug).`);return}E(i,[],{spawn:e.spawn})}function R(e=`no-bundle`){switch(e){case`no-bundle`:return`Desktop app not found (checked the standard install locations for this OS). Install it, or omit --mode for browser mode.`;case`darwin-only`:case`unsupported-platform`:return`Desktop app is not available on this platform. Use --mode=browser, or omit --mode for the server fallback.`;case`headless`:return`Desktop launch is gated in headless contexts (CI, SSH, non-TTY stdout). Set OK_FORCE_DESKTOP=1 to override, or use --mode=browser.`;case`force-browser`:return`OK_FORCE_BROWSER=1 is set — desktop dispatch is disabled. Unset it to use --mode=app.`;case`stat-error`:return`Failed to inspect the desktop install (filesystem error). Check permissions or use --mode=browser.`;case`available`:return`Desktop app appears available but launch dispatch did not fire (caller bug).`}}function z(e){return h(m(e),`..`,`Frameworks`,`OpenKnowledge Server.app`,`Contents`,`MacOS`,`OpenKnowledge Helper`)}const B=/\/[^/]+\.app\/Contents\/MacOS\/[^/]+$/;function ee(e){if(e.platform!==`darwin`||!B.test(e.execPath))return null;let t=z(e.execPath);return e.exists(t)?t:null}function V(e={}){let t=e.execPath??process.execPath,n=e.platform??process.platform,r=e.argv??process.argv,i=e.exists??v,a=r[1];return a?{command:ee({execPath:t,platform:n,exists:i})??t,prefixArgs:[a]}:(console.warn(`[self-spawn] process.argv[1] is empty — falling back to \`npx -y @inkeep/open-knowledge@latest\`. This re-introduces the registry-fetch surface that re-exec was fixing. Observed argv: ${JSON.stringify(r)}`),{command:`npx`,prefixArgs:[`-y`,`@inkeep/open-knowledge@latest`]})}function te(e,t){return e.host??t.HOST??`127.0.0.1`}function H(e){let t=p(e).replace(/[^\x20-\x7E]/g,``).trim().slice(0,64);return`open-knowledge-server ${t.length>0?t:`unknown`}`}var U=class extends Error{cwd;constructor(e){super("This directory isn't set up yet. Run `ok init` first, then `ok start` again."),this.name=`OkDirMissingError`,this.cwd=e}};function W(e){return e.uiLock?e.isAlive(e.uiLock.pid)?{action:`skip`,reason:`alive`,pid:e.uiLock.pid,port:e.uiLock.port}:{action:`spawn`,reason:`stale`,stalePid:e.uiLock.pid}:{action:`spawn`,reason:`absent`}}function G(t){v(t.lockDir)||y(t.lockDir,{recursive:!0});let n=b(h(t.lockDir,e),`w`),r=t.spawn??f,{PORT:i,...a}=process.env,o=V();try{let e=r(o.command,[...o.prefixArgs,...t.args??[`ui`]],{detached:!0,stdio:[`ignore`,`ignore`,n],windowsHide:!0,cwd:t.cwd,env:{...a,ELECTRON_RUN_AS_NODE:`1`}});return e.unref(),e}finally{try{_(n)}catch{}}}function K(e,t,n){return e??(n===void 0?t:void 0)}function q(e,t){return e!==void 0&&t!==null&&t.port>0&&t.draining!==!0}function J(e,t,n){return e??+(t!=null&&!n)}async function Y(e){let t=e.spawn??f,n=V(),{PORT:r,...i}=process.env,a=t(n.command,[...n.prefixArgs,`ui`,`--port`,String(e.uiPort)],{cwd:e.cwd,stdio:`inherit`,windowsHide:!0,env:{...i,ELECTRON_RUN_AS_NODE:`1`}}),o=!1,s=e=>{o=!0;try{a.kill(e)}catch{}},c=()=>s(`SIGINT`),l=()=>s(`SIGTERM`);process.once(`SIGINT`,c),process.once(`SIGTERM`,l),await new Promise(e=>{a.on(`exit`,(t,n)=>{process.exitCode=J(t,n,o),e()}),a.on(`error`,t=>{console.error(`[start] connect fallback: failed to spawn ok ui — ${t instanceof Error?t.message:String(t)}`),process.exitCode=1,e()})}),process.removeListener(`SIGINT`,c),process.removeListener(`SIGTERM`,l)}async function X(e){let t=e.now()+e.timeoutMs;for(;e.now()<t;){let t=e.readUiLock();if(t&&t.port>0)return t.port;await e.sleep(e.pollIntervalMs)}let n=e.readUiLock();return n&&n.port>0?n.port:null}const ne=t;function Z(e,t,n=e=>C(e,{recursive:!0,force:!0})){return async()=>{try{await e()}finally{try{await n(t)}catch(e){process.stderr.write(`[start] ephemeral temp dir reap failed for ${t}: ${e instanceof Error?e.message:String(e)}\n`)}}}}function Q(e,t={}){let n=t.exit??(e=>process.exit(e)),r=t.getActiveHandles??(()=>{let e=process._getActiveHandles;return e?e.call(process):null});return async()=>{let i=!1;try{await e()}catch(e){i=!0,t.log?.error({err:e},`idle-shutdown: destroy failed — exiting anyway`)}finally{let e=null;try{let t=r();if(t!==null){e={};for(let n of t){let t=n?.constructor?.name??`unknown`;e[t]=(e[t]??0)+1}}}catch{e=null}t.log?.info({event:`idle-shutdown-exit`,exitCode:+!!i,openHandles:e??{},handlesAvailable:e!==null},`idle-shutdown: teardown finished — exiting process`),n(+!!i)}}}async function $(e){let t=e.sigtermGraceMs??ne,n=e.sigtermPollIntervalMs??200,r=e.sleep??(e=>w(e)),i=e.reason??`teardown`;try{let a=e.readUiLock(),o=e.spawnedUiPid();if(a&&e.isAlive(a.pid)&&a.pid!==o)e.log?.info({pid:a.pid,port:a.port,spawnedUiPid:o},`${i}: ui.lock holder is not our spawned sibling — leaving it alone`);else if(a&&e.isAlive(a.pid))try{e.killPid(a.pid,`SIGTERM`),e.log?.info({pid:a.pid,port:a.port},`${i}: SIGTERM UI sibling`);let o=Date.now()+t;for(;Date.now()<o&&e.isAlive(a.pid);)await r(n);if(e.isAlive(a.pid))try{e.killPid(a.pid,`SIGKILL`),e.log?.warn({pid:a.pid,graceMs:t},`${i}: SIGTERM grace expired — escalated to SIGKILL`)}catch(t){e.log?.error({pid:a.pid,err:t},`${i}: SIGKILL failed`)}}catch(t){e.log?.warn({pid:a.pid,err:t},`${i}: failed to SIGTERM UI sibling`)}}catch(t){e.log?.warn({err:t},`${i}: UI lookup failed; proceeding`)}}function re(e){let{destroy:t,...n}=e;return async()=>{await $({...n,reason:`idle-shutdown`}),await t()}}async function ie(e){let{config:t,cwd:r,host:o}=e,s=e.skipAutoInit??!1,d=e.skipUiAutoSpawn??!1,f=e.idleThresholdMs??18e5,{existsSync:p,mkdirSync:m}=await import(`node:fs`),{basename:h,dirname:g}=await import(`node:path`),{bootServer:_,getLogger:v,isProcessAlive:y,readUiLock:b,resolveContentDir:x,resolveLockDir:S,waitForServerLockDrain:C}=await import(`./src-3A0TPO6b.mjs`),T=e.log??v(`start`),E=e.singleFile!==void 0,D=e.projectDir??r,O=E?i(e.singleFile).canonicalFilePath:void 0,k=O?g(O):void 0,A=O?h(O):void 0;if(!E){if(!s&&!a(r))throw new U(r);let t=process.env.OK_RECLAIM_DISABLE??null,n=e=>{let t=typeof e.event==`string`?e.event:``;(t.endsWith(`-failed`)||t.endsWith(`-error`)||t.endsWith(`-missing`))&&T.warn({event:e},`[start] reclaim sweep reported a problem`)};try{(e.repairMcpConfigsFn??(await import(`./repair-mcp-configs-BkAeh6sA.mjs`)).repairMcpConfigs)({projectDir:r,reclaimDisableEnv:t,logger:n})}catch(e){T.warn({err:e},`[start] mcp-config repair sweep failed; continuing`)}try{(e.repairLaunchJsonFn??(await import(`./repair-launch-json-CJjdBoDw.mjs`)).repairLaunchJson)({projectDir:r,reclaimDisableEnv:t,logger:n})}catch(e){T.warn({err:e},`[start] launch.json repair sweep failed; continuing`)}try{await(e.repairSkillsFn??(await import(`./repair-skills-Cfw1f-SB.mjs`)).repairSkills)({projectDir:r,reclaimDisableEnv:t,logger:n})}catch(e){T.warn({err:e},`[start] skill repair sweep failed; continuing`)}}let j=k??x(t,r);!E&&!p(j)&&(m(j,{recursive:!0}),T.info({contentDir:j},`Created content directory`));let M=null,N=null,P=async({lockDir:t})=>{if(M=W({uiLock:b(t),isAlive:y}),M.action===`spawn`&&!d)try{let n=e.uiPort===void 0?void 0:[`ui`,`--port`,String(e.uiPort)];N=G({lockDir:t,cwd:r,spawn:e.spawn,args:n}).pid??null,T.info({reason:M.reason,uiPort:e.uiPort},`[start] auto-spawned ok ui sibling`)}catch(e){console.warn(`[start] failed to auto-spawn ok ui: ${e instanceof Error?e.message:String(e)}`)}else M.action===`skip`&&T.info({port:M.port,pid:M.pid},`UI already running at port ${M.port}`)},F=e.reactShellDistDir===void 0,I=c(),L=n();{let e=S(E?D:r),t=Date.now(),n=await C(e);n!==`no-drain`&&T.info({event:`start-waited-for-draining-predecessor`,outcome:n,waitedMs:Date.now()-t,drainLockDir:e},n===`released`?`[start] predecessor server finished draining — proceeding`:`[start] predecessor server still draining after wait — proceeding to collide`)}let R=await _({config:t,contentDir:j,projectDir:E?D:r,contentRoot:E?void 0:t.content.dir,port:e.port,host:o,quiet:!1,detectGh:l,tokenStore:I,embeddingsKeyStore:L,...E?{ephemeral:!0,singleDocRelPath:A,gitEnabled:!1,gitPreflight:()=>({ok:!0,version:`0.0.0`,resolvedPath:`git`,source:`PATH`})}:{},localOpCliArgs:[process.execPath,process.argv[1]],probeHarnessManagedMcpEntry:(e,t)=>u(e,t),attachUiSibling:F,idleShutdownMs:f,skipAutoInit:!0,...F?{spawnUiSiblingFn:P}:{},idleShutdownHandler:t=>{let n=re({readUiLock:()=>b(R.lockDir),spawnedUiPid:()=>N,isAlive:y,killPid:(e,t)=>{process.kill(e,t)},destroy:t,log:T});return Q(E?Z(n,D):n,{log:T,exit:e.idleExit})},log:T,...e.serveContentAssets===void 0?{}:{serveContentAssets:e.serveContentAssets},...e.reactShellDistDir?{reactShellDistDir:e.reactShellDistDir}:{}});M||={action:`skip`,reason:`alive`,pid:0,port:0};let z=M,B=null;if(z.action===`skip`)B=z.port>0?z.port:null;else if(!d){let t=e.uiBindTimeoutMs??3e3;B=await X({readUiLock:()=>b(R.lockDir),now:Date.now,sleep:e=>w(e),timeoutMs:t,pollIntervalMs:50}),B===null&&T.warn({timeoutMs:t},`[start] ok ui did not bind within timeout — banner falls back to API URL`)}return{httpServer:R.httpServer,destroy:R.destroy,lockDir:R.lockDir,contentDir:j,port:R.port,ready:R.ready,degraded:R.degraded,uiSpawnDecision:M,spawnedUiPid:N,resolvedUiPort:B}}function ae(e){if(e===`browser`||e===`app`)return e;throw new s(`--mode must be 'browser' or 'app'`)}function oe(e){let t=Number.parseInt(e,10);if(Number.isNaN(t)||t<1||t>65535)throw new s(`--ui-port must be a port number between 1 and 65535`);return t}function se(e){return e.OK_CONSOLE_LEVEL!==void 0||e.LOG_LEVEL!==void 0?null:`warn`}function ce(e){let t=[`Stopping OpenKnowledge…`,`Saving pending changes and releasing the server lock — this can take a few seconds.`];return e===`SIGINT`&&t.push(`Press Ctrl+C again to force quit.`),t}async function le(e,t){let n=se(process.env);n!==null&&(process.env.OK_CONSOLE_LEVEL=n);let{renderBanner:r}=await import(`./banner--DGfdMN8.mjs`),{accent:i,dim:a,error:o,warning:s}=await import(`./colors-MGDi6UGf.mjs`),c=process.cwd(),l=e;process.title=H(c);let u=te(t,process.env),f=t.port===void 0?void 0:Number(t.port),p=process.env.PORT?Number(process.env.PORT):void 0,m=t.uiPort===void 0?void 0:Number(t.uiPort),h=K(f,p,m);if(m!==void 0){let{readServerLock:e,resolveLockDir:t}=await import(`./src-3A0TPO6b.mjs`);if(q(m,e(t(c)))){await Y({cwd:c,uiPort:m});return}}let g;try{g=await ie({config:l,cwd:c,host:u,port:h,...m===void 0?{}:{uiPort:m},...t.serveContentAssets===void 0?{}:{serveContentAssets:t.serveContentAssets},...t.reactShellDistDir?{reactShellDistDir:t.reactShellDistDir}:{},...t.singleFile?{singleFile:t.singleFile}:{},...t.projectDir?{projectDir:t.projectDir}:{}})}catch(e){e instanceof U&&(console.error(o(e.message)),process.exit(1));let t=await import(`./src-3A0TPO6b.mjs`);if((e instanceof t.GitNotAvailableError||e instanceof t.GitTooOldError)&&process.exit(78),(e instanceof t.SingleFileNotFoundError||e instanceof t.SingleFileNotAFileError||e instanceof t.SingleFileNotMarkdownError)&&(console.error(o(e.message)),process.exit(1)),m!==void 0&&ue(e,t)){await Y({cwd:c,uiPort:m});return}let n=de(e,c,t);n!==null&&(console.error(o(n)),process.exit(1)),console.error(`${o(`Failed to start:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exit(1)}let _=!1,v=async e=>{if(_)return;_=!0;let[t,...n]=ce(e);console.log(i(`\n${t}`));for(let e of n)console.log(a(` ${e}`));if(g.spawnedUiPid!==null)try{let{getLogger:e,isProcessAlive:t,readUiLock:n}=await import(`./src-3A0TPO6b.mjs`);await $({readUiLock:()=>n(g.lockDir),spawnedUiPid:()=>g.spawnedUiPid,isAlive:t,killPid:(e,t)=>process.kill(e,t),log:e(`start`),reason:`shutdown`})}catch(e){console.error(`${o(`ui sibling teardown failed:`)} ${e instanceof Error?e.stack??e.message:String(e)}`)}try{await g.destroy()}catch(e){console.error(`${o(`destroy() failed:`)} ${e instanceof Error?e.stack??e.message:String(e)}`),process.exitCode=1}process.exit(process.exitCode??0)};process.once(`SIGINT`,()=>{v(`SIGINT`)}),process.once(`SIGTERM`,()=>{v(`SIGTERM`)});let y=`http://${u}:${g.port}`,b=u===`0.0.0.0`||u===`::`?`http://0.0.0.0:${g.port}`:void 0,x=g.resolvedUiPort,S=x!==null&&x>0?`http://${u}:${x}`:y;console.log(r({name:`open-knowledge`,version:d,localUrl:S,apiUrl:S===y?void 0:y,networkUrl:b,nextSteps:[`Open the Editor URL in your browser to start editing.`]}));let C={"shadow-repo":`Version history and branch-switch safety unavailable`,"file-watcher":`External file changes will not sync to the editor`,"head-watcher":`Git branch switches may cause document inconsistency`};g.ready.then(async()=>{if(g.degraded.length>0){console.log();for(let e of g.degraded){let t=C[e]??`${e} (check server logs for details)`;console.warn(` ${s(`⚠`)} ${s(e)}: ${a(t)}`)}console.log()}if(t.open){let{openBrowser:e}=await import(`./open-browser-Dw5DQEDW.mjs`);e(S)}}).catch(e=>{console.error(` ${o(`Server initialization failed:`)} ${e instanceof Error?e.message:String(e)}`)})}function ue(e,t){let n=t.ServerLockCollisionError;return n!==void 0&&e instanceof n}function de(e,t,n){let r=n.ServerLockCollisionError;if(r===void 0||!(e instanceof r))return null;try{let e=h(t,`.ok`),r=n.readServerLock(e);return r?r.kind===`interactive`?`OpenKnowledge desktop is currently running on this project. Quit it or use --cwd to point elsewhere.`:r.kind===`mcp-spawned`?"An MCP-spawned server holds this lock; it should release on idle-shutdown (~30 min). Or run `ok stop`.":"OpenKnowledge server is already running on this project — check `ok status` or `ok stop`.":"OpenKnowledge server is already running on this project — check `ok status` or `ok stop`."}catch{return null}}function fe(e){return new o(`start`).description(`Start the knowledge base collab server`).option(`-p, --port <port>`,`Server port`,void 0).option(`--ui-port <port>`,`Pin the ok ui sibling to <port> and connect (not exit) if a server already runs here — the worktree-preview recipe path`,oe).option(`-H, --host <host>`,`Server host`,void 0).option(`--open`,`Open browser after start`).option(`--mode <mode>`,`Force dispatch mode: 'browser' or 'app'`,ae).option(`--serve-content-assets`,`Serve content assets from this server (now the default; kept for compatibility)`).option(`--react-shell-dist-dir <path>`,`Serve React shell from <path> (suppresses ok ui sibling)`).option(`--single-file <path>`,`No-project ephemeral single-file mode: scope the server to one markdown file (git + MCP off)`).option(`--project-dir <dir>`,`Throwaway project root for --single-file (where ephemeral .ok/ state lives)`).action(async t=>{let n=e();if(t.mode===`app`){t.open&&(process.stderr.write(`error: option '--mode=app' cannot be combined with '--open' (--open opens a browser tab against the local server, which app mode does not boot)
2
2
  `),process.exit(2));let e=[];if(t.port!==void 0&&e.push(`--port`),t.uiPort!==void 0&&e.push(`--ui-port`),t.host!==void 0&&e.push(`--host`),e.length>0){let t=process.env.OK_LOG_LEVEL??`info`;(t===`debug`||t===`trace`)&&console.error(`--mode=app: ignoring ${e.join(`, `)}`)}let n=I(k());if(n.available){L({spawn:f},n);return}console.error(R(n.reason)),process.exit(1)}await le(n,t)})}export{k as C,E,V as S,L as T,fe as _,J as a,Z as b,H as c,K as d,te as f,G as g,q as h,re as i,ce as l,le as m,X as n,Y as o,se as p,ie as r,W as s,U as t,ue as u,$ as v,I as w,Q as x,de as y};
3
- //# sourceMappingURL=start-BzlVJs-M.mjs.map
3
+ //# sourceMappingURL=start-MaNLreSP.mjs.map