@inkeep/open-knowledge 0.46.0-beta.30 → 0.46.0-beta.31

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 (169) hide show
  1. package/dist/{acp-harness-probe-Dnp9R5Ed.mjs → acp-harness-probe-BhL2GGSC.mjs} +2 -2
  2. package/dist/cli.mjs +7 -7
  3. package/dist/constants-Di8MswbY.mjs +2 -0
  4. package/dist/index.mjs +1 -1
  5. package/dist/{init-DKNk15jt.mjs → init-1Zuxwle3.mjs} +3 -3
  6. package/dist/init-COO1XmDc.mjs +1 -0
  7. package/dist/{launch-json-removal-lcqaAuw6.mjs → launch-json-removal-DpvWRF1p.mjs} +2 -2
  8. package/dist/{loader-DjvJBhtr.mjs → loader-BTUi6QEO.mjs} +2 -2
  9. package/dist/loader-DpAvfrco.mjs +1 -0
  10. package/dist/{open-browser-BGVZscyy.mjs → open-browser-BNqkp-zS.mjs} +2 -2
  11. package/dist/preview-CYnmE6gb.mjs +1 -0
  12. package/dist/{preview-Dg4ywQIA.mjs → preview-KnQlnS2U.mjs} +2 -2
  13. package/dist/public/assets/{ActivityModeContent-BDcT4TxQ.js → ActivityModeContent-DsdjARuQ.js} +1 -1
  14. package/dist/public/assets/{AgentDiffPane-DX2P0__f.js → AgentDiffPane-Cqq_oTQ4.js} +1 -1
  15. package/dist/public/assets/{AgentThreadClientBinder-BIRrf4fT.js → AgentThreadClientBinder-nBQH9VpU.js} +1 -1
  16. package/dist/public/assets/{BugReportHistory-DBDmjrpO.js → BugReportHistory-CNzYOdOg.js} +1 -1
  17. package/dist/public/assets/{BugReportHistoryDialog-DW7QQqLa.js → BugReportHistoryDialog-CGfQFtoC.js} +1 -1
  18. package/dist/public/assets/{ChangedOutsideBadge-CXC8VsIl.js → ChangedOutsideBadge-Cz-t_sw6.js} +1 -1
  19. package/dist/public/assets/{CodeMirrorPropInput-B8kRwmVZ.js → CodeMirrorPropInput-DcPXHJf2.js} +3 -3
  20. package/dist/public/assets/{ConfigSharingInfoTooltip-Cp2QIlcI.js → ConfigSharingInfoTooltip-C4ydhukC.js} +1 -1
  21. package/dist/public/assets/{ConsentDialogBody-DHWAWelf.js → ConsentDialogBody-DMbx6HaH.js} +1 -1
  22. package/dist/public/assets/{DiffView-BGxKi5-k.js → DiffView-CiVa7sAS.js} +1 -1
  23. package/dist/public/assets/{DocumentContext-D0RzElUf.js → DocumentContext-UjmdttS_.js} +1 -1
  24. package/dist/public/assets/{EditorModeToggle-CntGfA2M.js → EditorModeToggle-CIdRKhWV.js} +1 -1
  25. package/dist/public/assets/{EnableSyncConfirmDialog-CHGQWYEl.js → EnableSyncConfirmDialog-ve7kkIAZ.js} +1 -1
  26. package/dist/public/assets/FeedbackForm-CX3gq4eI.js +1 -0
  27. package/dist/public/assets/{GraphPanel-BxIhZrNo.js → GraphPanel-Dtesjb_V.js} +1 -1
  28. package/dist/public/assets/{ImportSkillDialog-DR8mmXAY.js → ImportSkillDialog-BlSmqHz6.js} +1 -1
  29. package/dist/public/assets/{LintConfigEditor-sFr75Z_7.js → LintConfigEditor-nQnHe-pB.js} +1 -1
  30. package/dist/public/assets/ManagedArtifactProperties-CJEZeYeD.js +1 -0
  31. package/dist/public/assets/{ManagedArtifactProperties-Bj4lnpaV.js → ManagedArtifactProperties-ChhpkEbr.js} +1 -1
  32. package/dist/public/assets/{McpConsentDialogBody-6siPniv2.js → McpConsentDialogBody-LgNG1_Dd.js} +1 -1
  33. package/dist/public/assets/{Mermaid-Em-qFqeY.js → Mermaid-C8gHr0W4.js} +1 -1
  34. package/dist/public/assets/{MermaidDocEditor-DhkEOFI3.js → MermaidDocEditor-Cpmy2YT3.js} +1 -1
  35. package/dist/public/assets/{ReportBugDialogBody-lu5k8GNZ.js → ReportBugDialogBody-BuDppa3M.js} +1 -1
  36. package/dist/public/assets/{SchemaConfigEditor-zrIjiNud.js → SchemaConfigEditor-CPsaLPav.js} +1 -1
  37. package/dist/public/assets/{SessionsHost-Df530WfQ.js → SessionsHost-DquC6yc6.js} +2 -2
  38. package/dist/public/assets/{SettingsDialogBody-Ksxpji5v.js → SettingsDialogBody-0hlU5rB1.js} +1 -1
  39. package/dist/public/assets/{ShareBranchSwitchDialog-BGOYxNIE.js → ShareBranchSwitchDialog-CDEWSBL4.js} +1 -1
  40. package/dist/public/assets/{ShareReceiveDialog-FTL0Nl2Y.js → ShareReceiveDialog-DI0Octqd.js} +1 -1
  41. package/dist/public/assets/{ShareReceiveMissDialog-DQjsafW1.js → ShareReceiveMissDialog-B5vL6o_w.js} +1 -1
  42. package/dist/public/assets/{SkillEditBanner-BmbDMwLJ.js → SkillEditBanner-DZsmgb8V.js} +1 -1
  43. package/dist/public/assets/{SkillOriginInline-DovTGVNx.js → SkillOriginInline-DwtNJmKt.js} +1 -1
  44. package/dist/public/assets/{SkillToolbarControls-DBo1i_3u.js → SkillToolbarControls-dComMSSi.js} +1 -1
  45. package/dist/public/assets/SourceEditor-BEZHrSQE.js +1 -0
  46. package/dist/public/assets/{TerminalPanel-DatLbttD.js → TerminalPanel-TAVEKr8t.js} +1 -1
  47. package/dist/public/assets/{TerminalWindowApp-B78uifJH.js → TerminalWindowApp-DFtoqOyq.js} +1 -1
  48. package/dist/public/assets/{TextDocEditor-Bog-HupC.js → TextDocEditor-RGsX2nbs.js} +1 -1
  49. package/dist/public/assets/{ThreadView-BUeFMVzD.js → ThreadView-BD-8aedw.js} +1 -1
  50. package/dist/public/assets/{TimelineDiffPane-Cwj2TId7.js → TimelineDiffPane-C1xRQ_Nn.js} +1 -1
  51. package/dist/public/assets/{agent-diff-store-CIy04dNY.js → agent-diff-store-ZJKn0jSj.js} +1 -1
  52. package/dist/public/assets/{agent-visibility-DWTC90Gx.js → agent-visibility-DrtlDOGR.js} +1 -1
  53. package/dist/public/assets/{auth-state-cache-BeFofmuN.js → auth-state-cache-c4XtKLDr.js} +1 -1
  54. package/dist/public/assets/{checkbox-B3oU_wC5.js → checkbox-DoJAOcMt.js} +1 -1
  55. package/dist/public/assets/{cm-theme-DwY_w-ZH.js → cm-theme-BCzjFmR8.js} +1 -1
  56. package/dist/public/assets/{config-provider-C0MTDrc2.js → config-provider-DyS6fLG7.js} +1 -1
  57. package/dist/public/assets/{dialog-5yFU9QTA.js → dialog-FGMqkFjm.js} +1 -1
  58. package/dist/public/assets/{dist-BzLQbCCK.js → dist-7c4LkvyR.js} +1 -1
  59. package/dist/public/assets/{dist-C6rrsmKk2.js → dist-BiwnBosN2.js} +1 -1
  60. package/dist/public/assets/{dist-CS0bV0cB2.js → dist-Br-Gb0Mn2.js} +1 -1
  61. package/dist/public/assets/{dist-B971nepF.js → dist-CK9mVFzk.js} +1 -1
  62. package/dist/public/assets/{dist-BSBLKBak.js → dist-CRdXWGYm.js} +1 -1
  63. package/dist/public/assets/{dist-CiOwPiQu.js → dist-D0E_Pe_n.js} +1 -1
  64. package/dist/public/assets/{dist-L3Um8hKP.js → dist-D1CcITrZ.js} +1 -1
  65. package/dist/public/assets/{dist-Dnz4sbhb.js → dist-DXP0VKAj.js} +1 -1
  66. package/dist/public/assets/{dist-eYC3Xyy7.js → dist-DZPs1bpg.js} +1 -1
  67. package/dist/public/assets/{dist-CMFaQXzi.js → dist-DetO1WI6.js} +1 -1
  68. package/dist/public/assets/{dist-BeUYj7Wz.js → dist-EGYq-imk.js} +1 -1
  69. package/dist/public/assets/{dist-D6gEnCk4.js → dist-PVNGgT7j.js} +1 -1
  70. package/dist/public/assets/{file-tree-adapter-C_sQoGAP.js → file-tree-adapter-Bci5VzwG.js} +1 -1
  71. package/dist/public/assets/{folder-config-api-BsgNwqoo.js → folder-config-api-vcUjNI4V.js} +1 -1
  72. package/dist/public/assets/{globals-CD79nPvR.js → globals-Cidq7GOk.js} +2 -2
  73. package/dist/public/assets/{index-Dl1XewIz.js → index-DZO5aZS5.js} +18 -18
  74. package/dist/public/assets/{input-group-oGE61-xJ.js → input-group-DY7bardr.js} +1 -1
  75. package/dist/public/assets/lint-config-client-CZFgaqLA.js +1 -0
  76. package/dist/public/assets/{markdownlint-rule-browser-CVcD2sbl.js → markdownlint-rule-browser-CB-6-N9j.js} +1 -1
  77. package/dist/public/assets/{navigation-targets-3WrtCIdg.js → navigation-targets-aSNAL8lJ.js} +1 -1
  78. package/dist/public/assets/{open-managed-artifact-tab-Ukl2yn2y.js → open-managed-artifact-tab-BGx8Npxu.js} +1 -1
  79. package/dist/public/assets/{pending-receive-nav-store-CP3zXfyb.js → pending-receive-nav-store-CjoJxjRj.js} +1 -1
  80. package/dist/public/assets/{project-paths-CwB2AxiU.js → project-paths-DF-eCznB.js} +1 -1
  81. package/dist/public/assets/{prop-types-_OaBa25a.js → prop-types-CL82T1eG.js} +1 -1
  82. package/dist/public/assets/{schema-fields-view-intent-DEvpcL7g.js → schema-fields-view-intent-BICJc1NC.js} +1 -1
  83. package/dist/public/assets/{selection-context-Zx0dA-i_.js → selection-context-DokMnQWX.js} +1 -1
  84. package/dist/public/assets/{skill-actions-T4AibCGZ.js → skill-actions-Cw9XpcOR.js} +1 -1
  85. package/dist/public/assets/{skills-api-B4t4YDn0.js → skills-api-X_nXVJRp.js} +1 -1
  86. package/dist/public/assets/{src-DlevgQZV.js → src-CCnXY_O8.js} +1 -1
  87. package/dist/public/assets/{tag-pill-input-CXySiSXP.js → tag-pill-input-BmVVOadT.js} +1 -1
  88. package/dist/public/assets/{target-navigation-intent-BlqJDOLf.js → target-navigation-intent-BVtoBSe-.js} +1 -1
  89. package/dist/public/assets/{telemetry-startup-DQ2qb_qu.js → telemetry-startup-BlBhKLqd.js} +1 -1
  90. package/dist/public/assets/{terminal-launch-events-D5NaDVe6.js → terminal-launch-events-D7o0Puq7.js} +1 -1
  91. package/dist/public/assets/{terminal-telemetry-VgpHdUun.js → terminal-telemetry-BqtsoPcX.js} +1 -1
  92. package/dist/public/assets/{text-viewer-languages-DAH8UfLK.js → text-viewer-languages-Dz-aerrJ.js} +2 -2
  93. package/dist/public/assets/{thread-client-DwZg8y3s.js → thread-client-VmTuW12V.js} +1 -1
  94. package/dist/public/assets/typing-burst-detector-BIvbnSjg.js +8 -0
  95. package/dist/public/assets/{uninstall-SAlICV7v.js → uninstall-CB3TrO52.js} +1 -1
  96. package/dist/public/assets/{use-activity-panel-C5c1hZj4.js → use-activity-panel-DYhECPc1.js} +1 -1
  97. package/dist/public/assets/{use-live-xterm-theme-4nFFm_UN.js → use-live-xterm-theme-BV4w3Ptz.js} +1 -1
  98. package/dist/public/assets/{use-open-skill-DUVBXxdQ.js → use-open-skill-yb9jq3Hx.js} +1 -1
  99. package/dist/public/assets/{use-skill-directory-Ch7oO5x2.js → use-skill-directory-iq319ahk.js} +1 -1
  100. package/dist/public/assets/{use-skill-origin-BEXe64x3.js → use-skill-origin-9taPCWgy.js} +1 -1
  101. package/dist/public/assets/{use-skills-CrzRiBPN.js → use-skills-BPj3WrfT.js} +1 -1
  102. package/dist/public/assets/{use-terminal-enabled-CaIiZGm3.js → use-terminal-enabled-HJd-T5QE.js} +1 -1
  103. package/dist/public/assets/{use-timeline-entry-diff-6ZzDz5lq.js → use-timeline-entry-diff-BtVWU24W.js} +1 -1
  104. package/dist/public/index.html +92 -92
  105. package/dist/public/uninstall.html +8 -8
  106. package/dist/{repair-launch-json-4vix_xWA.mjs → repair-launch-json-CC6vXukr.mjs} +2 -2
  107. package/dist/{repair-mcp-configs-BSwE3hDa.mjs → repair-mcp-configs-D3yVfgVc.mjs} +2 -2
  108. package/dist/{repair-skills-Bdq3MhBx.mjs → repair-skills-CDk6a7mR.mjs} +2 -2
  109. package/dist/repair-skills-MNmT0TmA.mjs +1 -0
  110. package/dist/{src-CFTJ6mgL.mjs → src-D7xgi9Vi.mjs} +2 -2
  111. package/dist/{src-BL0AYaKb.mjs → src-SRUWG3aB.mjs} +2 -2
  112. package/dist/{src-BJlGFyAy.mjs → src-fsTU2aOF.mjs} +1 -1
  113. package/dist/start-ChI3M_H7.mjs +1 -0
  114. package/dist/{start-DgvKKO2M.mjs → start-DNL0T2JV.mjs} +3 -3
  115. package/dist/{write-project-skill-KxnphNDZ.mjs → write-project-skill-B7SNlnFV.mjs} +2 -2
  116. package/package.json +5 -5
  117. package/dist/constants-DRhEm2ep.mjs +0 -2
  118. package/dist/init-CsUIPTyK.mjs +0 -1
  119. package/dist/loader-68uv79Mt.mjs +0 -1
  120. package/dist/preview-Ceep_aU6.mjs +0 -1
  121. package/dist/public/assets/FeedbackForm-CQiHum6L.js +0 -1
  122. package/dist/public/assets/ManagedArtifactProperties-BZSXgzAt.js +0 -1
  123. package/dist/public/assets/SourceEditor-k8Uabz89.js +0 -1
  124. package/dist/public/assets/lint-config-client-BYN3AswU.js +0 -1
  125. package/dist/public/assets/typing-burst-detector-BRfE-TkT.js +0 -8
  126. package/dist/repair-skills-DzOXy3tC.mjs +0 -1
  127. package/dist/start-B5-by2dB.mjs +0 -1
  128. /package/dist/public/assets/{CopyButton-pzHstTNX.js → CopyButton-D6N3opvE.js} +0 -0
  129. /package/dist/public/assets/{auth-prompt-store-2KB0Hew5.js → auth-prompt-store-QZM88i3o.js} +0 -0
  130. /package/dist/public/assets/{badge-m7D8aFo0.js → badge-C21d8Yhu.js} +0 -0
  131. /package/dist/public/assets/{client-version-CpzGZ9Pm.js → client-version-BNzTNPW4.js} +0 -0
  132. /package/dist/public/assets/{config-context-B189QANJ.js → config-context-CUmbDWJM.js} +0 -0
  133. /package/dist/public/assets/{desktop-bridge-types-cNTLS5xb.js → desktop-bridge-types-FXg4M54A.js} +0 -0
  134. /package/dist/public/assets/{dist-DNnPZGFC.js → dist-BNDNcytQ.js} +0 -0
  135. /package/dist/public/assets/{dist-D6euTqbb.js → dist-CzC3AWOn.js} +0 -0
  136. /package/dist/public/assets/{dist-BNVxnBBw.js → dist-uN7pEWl0.js} +0 -0
  137. /package/dist/public/assets/{doc-paths-D9NCcq9A.js → doc-paths-Duh5Nnpj.js} +0 -0
  138. /package/dist/public/assets/{documents-events-CaFJayVH.js → documents-events-BonfTMy2.js} +0 -0
  139. /package/dist/public/assets/{documents-fetch-D4kwvrzo.js → documents-fetch-DhfOkJYw.js} +0 -0
  140. /package/dist/public/assets/{download-CBO2IP-H.js → download-DlaLrCD-.js} +0 -0
  141. /package/dist/public/assets/{external-link-CKZFgCFq.js → external-link-Dvu-nzFi.js} +0 -0
  142. /package/dist/public/assets/{eye-8uM6ns3M.js → eye-BIA1oECU.js} +0 -0
  143. /package/dist/public/assets/{field-cr1jQyIo.js → field-CmzMDU7U.js} +0 -0
  144. /package/dist/public/assets/{file-tree-rename-validation-BH8L3cc3.js → file-tree-rename-validation-BcBhYhGq.js} +0 -0
  145. /package/dist/public/assets/{file-tree-utils-CEY_V3HQ.js → file-tree-utils-HG7-nUhX.js} +0 -0
  146. /package/dist/public/assets/{folder-DzWyPfbs.js → folder-DcWlgZbb.js} +0 -0
  147. /package/dist/public/assets/{folder-open-CP1WmVVj.js → folder-open-Ceue91os.js} +0 -0
  148. /package/dist/public/assets/{hash-ByuNR1hN.js → hash-BXtq910s.js} +0 -0
  149. /package/dist/public/assets/{info-DlOOzLOT.js → info-BO0f2XRt.js} +0 -0
  150. /package/dist/public/assets/{input-DcoGZoTQ.js → input-Cm94Cun3.js} +0 -0
  151. /package/dist/public/assets/{loader-circle-BlhYRJvG.js → loader-circle-DJ1nzSAL.js} +0 -0
  152. /package/dist/public/assets/{minus-BEMW9g0y.js → minus-DfB0TQSz.js} +0 -0
  153. /package/dist/public/assets/{miss-dialog-store-DH-EddRP.js → miss-dialog-store-BGDBpPYJ.js} +0 -0
  154. /package/dist/public/assets/{overlay-layers-DGwgwjHg.js → overlay-layers-B39mutdg.js} +0 -0
  155. /package/dist/public/assets/{panel-right-open-DXe-hrDU.js → panel-right-open-ypUBRt7V.js} +0 -0
  156. /package/dist/public/assets/{paperclip-BlWoV8m4.js → paperclip-DQzUb6fY.js} +0 -0
  157. /package/dist/public/assets/{parse-api-error-CGRziNbI.js → parse-api-error-Dmlzsw8v.js} +0 -0
  158. /package/dist/public/assets/{refresh-cw-CKzByWEG.js → refresh-cw-CTfHLdRW.js} +0 -0
  159. /package/dist/public/assets/{skill-scope-D2eK5d33.js → skill-scope-DeFCibVI.js} +0 -0
  160. /package/dist/public/assets/{square-pen-BaC0OC45.js → square-pen-DbfX_rTK.js} +0 -0
  161. /package/dist/public/assets/{startup-marks-Bl-kvAXX.js → startup-marks-B88RuIAa.js} +0 -0
  162. /package/dist/public/assets/{stex-7gT25hE_.js → stex-C_UPsIFu.js} +0 -0
  163. /package/dist/public/assets/{trash-2-D6vgpeVv.js → trash-2-WxyktwvM.js} +0 -0
  164. /package/dist/public/assets/{triangle-alert-CPiOfyLK.js → triangle-alert-C2yId37R.js} +0 -0
  165. /package/dist/public/assets/{undo-2-Md7zht3s.js → undo-2-DlBBaLMR.js} +0 -0
  166. /package/dist/public/assets/{use-collab-url-D8Tx97gf.js → use-collab-url-DfX94XN4.js} +0 -0
  167. /package/dist/public/assets/{use-settings-route-CIUthkWt.js → use-settings-route-CX4Wv19h.js} +0 -0
  168. /package/dist/public/assets/{wrench-mbNJ1TLT.js → wrench-BvqzH63x.js} +0 -0
  169. /package/dist/public/assets/{x-ITeFzq8c.js → x-xV4a4mi6.js} +0 -0
@@ -2024,7 +2024,7 @@ $$`,guidance:"Write LaTeX in `$…$` (inline) or `$$…$$` (block) — OK auto-p
2024
2024
  native-divergence-injected
2025
2025
  `,`utf-8`),o&&ee!==void 0){let r=null;try{H(E)&&(r=U(E,`utf-8`))}catch(e){r=null,j7.warn({err:e,documentName:i},`[persistence] L3 disk-read failed; divergence check skipped for this store`)}if(r!==null&&si(r)!==si(ee)){let a=r;console.warn(JSON.stringify({event:`agent-write-content-divergence`,"doc.name":i,outcome:`reverted`,diskBytes:a.length,baseBytes:ee.length,candidateBytes:S.length})),ve(n,i,S,a);let o=e?.getLossRing?.(),s={baselineFullMd:a,report:e=>{try{let t=QS(e);if(t.length===0)return;o?.record({event:Qx,docName:i,writerId:BS.id,direction:`b`,site:A,lostLen:t.reduce((e,t)=>e+t.length,0),digest:Hn(t.join(`
2026
2026
  `))})}catch(e){j7.warn({documentName:i,err:e},`[persistence] divergence-realign loss detection failed`)}}};try{n.transact(()=>{x(n,a,void 0,void 0,void 0,s)},AH)}catch(e){throw t.recordStoreFailure(i,P7(e)),C.delete(i),e}t.setReconciledBase(i,a),t.recordStoreDivergence(i),C.delete(i);return}}e?.isRecentlyRemoved?.(i)&&(tie(),console.warn(JSON.stringify({event:`persistence-store-removed-doc`,"doc.name":i})));let D=`${E}.tmp.${crypto.randomUUID()}`;try{if(process.env.NODE_ENV===`test`&&process.env.OK_TEST_STORE_FAULT===i){let e=Error(`OK_TEST_STORE_FAULT: simulated disk failure for ${i}`);throw e.code=`ENOSPC`,e}await Ro(D,S,`utf-8`),await ns(D,E),$H(E,tU(S)),t.clearStoreFailure(i),oie();try{d?.(i,f,S,ee??null)}catch(e){j7.warn({err:e,documentName:i},`[persistence] onDiskFlush callback failed for ${i}`)}}catch(e){try{Uo(D)}catch{}throw C.delete(i),t.recordStoreFailure(i,P7(e)),j7.error({err:e,documentName:i},`[persistence] Failed to save ${i}`),e}j7.info({filePath:E,bytes:S.length},`[persistence] Wrote ${E} (${S.length} bytes)`),t.setReconciledBase(i,S),b.add(i),y.delete(i),C.delete(i);try{await s?.recordDurableStore(i,S)}catch(e){j7.warn({err:e,documentName:i},`[derived-index] durable-store projection failed; disk write remains authoritative`)}Ao({"persistence.bytes":S.length}),k()}).finally(()=>{l!==void 0&&t.finishInFlightFlush(i,l),P?.record((Date.now()-o)/1e3)})}function we({document:e,documentName:n,lastTransactionOrigin:r}){ae.set(n,{branch:t.getActiveBranch(),document:e,lastTransactionOrigin:r})}async function Te(e=`within-branch`){return D?(S=S===`discard-stale`||e===`discard-stale`?`discard-stale`:`within-branch`,D):(D=(async()=>{let n=e;for(;;){let e=[...ae.entries()];if(ae.clear(),n!==`discard-stale`){for(let[n,r]of e)if(r.branch===t.getActiveBranch())try{await Ce({document:r.document,documentName:n,lastTransactionOrigin:r.lastTransactionOrigin})}catch(e){let t=process.env.OK_TELEMETRY_VERBOSE===`1`,r=``;try{r=String(e?.message??``)}catch{r=``}let i=Hn(r),a;try{a=vSe(e)}catch(e){let r=String(e?.message??``);console.warn(JSON.stringify({event:`deferred-store-classifier-failed`,"doc.name":n,classifyErrorHash:Hn(r),errorMessageHash:i,...t?{classifyErrorMessage:r}:{},timestamp:new Date().toISOString()})),a=`unknown`}nae(),console.warn(JSON.stringify({event:`deferred-store-failed`,"doc.name":n,errorClass:a,errorMessageHash:i,...t?{errorMessage:r}:{},timestamp:new Date().toISOString()})),j7.error({err:e,documentName:n},`[persistence] Deferred store failed for ${n}`)}}let r=S;if(S=null,ae.size===0&&r===null)break;n=r??`within-branch`}})().finally(()=>{D=null}),D)}let F={async onLoadDocument({document:n,documentName:i,context:a}){if(b.delete(i),fC(i))return;if(pC(i)){Ixe(n,i,h);return}if(mC(i)){AK(n,i,_);return}if(hC(i)||gC(i)){k7(n,i,v);return}Se();let o=Date.now();return Lo(`persistence.onLoadDocument`,{attributes:{"doc.name":i}},async()=>{j7.info({documentName:i,connections:n.getConnectionsCount?.()??`?`},`[persistence] onLoadDocument called for ${i} (connections: ${n.getConnectionsCount?.()??`?`})`);let a=Ej(i,r);if(!H(a))return;let o=a;try{let e=W(a);if(!Dj(e,r)){j7.warn({path:a,canonical:e},`[persistence] symlink-escape on load: ${a} → ${e}, refusing`);return}o=e}catch(e){if(Is(e)===`ELOOP`){j7.warn({path:a},`[persistence] Symlink cycle on load: ${a}, refusing`);return}}let s=$l(o).size;if(s>524288)throw j7.warn({documentName:i,fileSize:s,limit:Vt},`[persistence] Document exceeds open byte limit; refusing to load`),new gSe(i,s);let c=U(a,`utf-8`),l=n.getXmlFragment(`default`);j7.info({documentName:i,fragmentLength:l.length},`[persistence] onLoadDocument ${i}: fragment.length=${l.length} before update`),l.length===0?(n.transact(()=>{jH(n,c,e?.resolveEmbed,i,e?.resolveSize),n.getMap(`lifecycle`).set(ar,crypto.randomUUID())},AH),j7.info({filePath:a,children:l.length},`[persistence] Loaded ${a} into Y.Doc (${l.length} children)`),l.observeDeep(()=>{j7.info({documentName:i,fragmentLength:l.length},`[persistence] MUTATION on ${i}: fragment.length=${l.length}`)})):j7.info({documentName:i,children:l.length},`[persistence] Skipped load for ${i} — fragment already has ${l.length} children`),t.setReconciledBase(i,c)}).finally(()=>{N?.record((Date.now()-o)/1e3)})},async onStoreDocument({document:e,documentName:n,lastTransactionOrigin:r,lastContext:i}){if(!fC(n)){if(pC(n)){let t=await Rxe(e,n,r,h);if(t===`persisted`||t===`reconciled`)try{f?.(n)}catch(e){j7.warn({err:e,documentName:n},`[persistence] onConfigPersisted callback failed`)}return}if(mC(n)){if(await NK(e,n,r,_)===`persisted`){let e=M7(r,c);if(e&&e.id!==HS.id&&!e.id.startsWith(`agent-`)){let t=SK(n);t&&(eF(t.docKey,e.id,e.name,e.id,t.subject),k())}}return}if(hC(n)||gC(n)){await pSe(e,n,r,v);return}if(t.isBatchInProgress()){we({document:e,documentName:n,lastTransactionOrigin:r});return}return Ce({document:e,documentName:n,lastTransactionOrigin:r})}}};async function Ee(){ie&&await ie}async function De(){if(ie){await ie;return}iF()!==0&&(ie=O().finally(()=>{ie=null,E&&(E=!1,k())}),await ie)}function Oe(){return{branchDeferred:ae.size,quiescenceDeferred:C.size}}async function ke(e,n){if(!yC(n)){if(t.isBatchInProgress()){we({document:e,documentName:n,lastTransactionOrigin:null});return}return Ce({document:e,documentName:n,lastTransactionOrigin:null})}}return{extension:F,durabilityState:t,flushDeferredStores:Te,flushPendingGitCommit:ce,flushContributors:De,waitForPendingCommits:Ee,getQueueDepths:Oe,forceStore:ke,configPersistenceCtx:h,managedArtifactCtx:_}}const I7=L(`persistence-staleness`);var L7=class extends Error{constructor(e){super(e),this.name=`StructuralDiskReadError`}};function bSe(e){let t=e.graceMs??3e5,n=e.sweepIntervalMs??6e4,r=e.now??Date.now,{getBase:i,isBatchActive:a,peekInFlight:o}=e,s=e.msSinceLastUserTx??xw,c=new Map,l=!1,u=null;function d(e){return N7(e)}function f(e){return e===void 0?void 0:si(e)}function p(e,t,n,r){return t===void 0?e!==``:e===t?r!==void 0&&Qa(r,n):!0}async function m(){if(l||a())return;let n=r(),u=0,m=0,h=0,g=0,_=new Set;for(let[n,v]of e.getLoadedDocuments()){if(l)return;if(_.add(n),yC(n)||MC(v)!==null||o(n)!==void 0)continue;u++;let y=v.getText(`source`).toString(),b=i(n);if(b!==void 0&&y===b){c.delete(n);continue}let x=d(y),S=f(b);if(!p(x,S,y,b)){c.delete(n);continue}m++;let C=r(),w=s(v,C);if(w!==null&&w<t)continue;let T=c.get(n);if(T&&T.fingerprint===x&&(T.declined||C-T.atMs<t))continue;let ee=T?.fingerprint!==x;ee&&bie();let te=!ee&&T?T.firstDetectedAtMs:C,ne=C-te,re=null,ie=!1;try{let t=e.readDiskBytes(n);S===void 0?t!==null&&(re=`disk-file-never-loaded`):t===null?re=`disk-file-missing`:si(t)!==S&&(re=`disk-diverged-from-base`)}catch(e){e instanceof L7?(re=`disk-read-refused`,I7.error({err:e,docName:n},`[persistence-staleness] disk read refused; standing down until content changes`)):(re=`disk-read-failed`,ie=!0,I7.warn({err:e,docName:n},`[persistence-staleness] disk read failed; standing down`))}if(re!==null){g++,Sie(),c.set(n,{fingerprint:x,atMs:C,firstDetectedAtMs:te,declined:!ie}),I7.warn({docName:n,ageMs:w,staleForMs:ne,candidateBytes:x.length,baseBytes:b?.length??0,action:`stood-down`,reason:re},`[persistence-staleness] Unflushed edits detected for ${n} but disk state is unverified or unreconciled; not overwriting`);continue}I7.warn({docName:n,ageMs:w,staleForMs:ne,candidateBytes:x.length,baseBytes:b?.length??0,action:`forced-store`},`[persistence-staleness] Doc ${n} has unpersisted edits past the grace window with no pending store; forcing a store`),c.set(n,{fingerprint:x,atMs:C,firstDetectedAtMs:te,declined:!1}),xie(),h++;try{await e.forceStore(v,n)}catch(e){I7.error({err:e,docName:n,staleForMs:ne},`[persistence-staleness] Forced store failed for ${n}; will retry`);continue}if(l||a())return;let E=v.getText(`source`).toString(),D=i(n),ae=d(E);p(ae,f(D),E,D)&&ae===x?(c.set(n,{fingerprint:x,atMs:C,firstDetectedAtMs:te,declined:!0}),I7.info({docName:n},`[persistence-staleness] Store completed without clearing divergence for ${n}; suppressing until content changes`)):c.delete(n)}for(let e of c.keys())_.has(e)||c.delete(e);let v={scanned:u,divergent:m,forced:h,stoodDown:g,elapsedMs:r()-n};m>0||h>0||g>0?I7.info(v,`[persistence-staleness] sweep complete`):I7.debug(v,`[persistence-staleness] sweep complete`)}function h(){return u||(u=m().finally(()=>{u=null}),u)}let g=setInterval(()=>{h().catch(e=>{I7.error({err:e},`[persistence-staleness] sweep failed`)})},n);return g.unref?.(),{sweep:h,dispose:()=>(l=!0,clearInterval(g),u??Promise.resolve())}}async function xSe(e){try{let t=gs({baseDir:e,timeout:{block:3e3}});return{name:(await t.raw(`config`,`--get`,`user.name`)).trim()||null,email:(await t.raw(`config`,`--get`,`user.email`)).trim()||null}}catch{return{name:null,email:null}}}async function R7(e){let t=nN(e),n=V(t,`principal.json`),{name:r,email:i}=await xSe(e);if(H(n)){let e;try{e=JSON.parse(U(n,`utf-8`))}catch{e={}}let t=typeof e.id==`string`&&e.id.startsWith(`principal-`)?e.id:`principal-${Cu()}`,a=typeof e.created_at==`string`?e.created_at:new Date().toISOString(),o=t.slice(10,18),s={id:t,display_name:r?Gh(r):typeof e.display_name==`string`?e.display_name:`Local User`,display_email:i?Gh(i):typeof e.display_email==`string`?e.display_email:`principal-${o}@openknowledge.local`,source:r||i?`git-config`:`synthesized`,created_at:a};return tu(n,JSON.stringify(s,null,2),`utf-8`),s}Ul(t,{recursive:!0});let a=`principal-${Cu()}`,o=a.slice(10,18),s={id:a,display_name:r?Gh(r):`Local User`,display_email:i?Gh(i):`principal-${o}@openknowledge.local`,source:r||i?`git-config`:`synthesized`,created_at:new Date().toISOString()};return tu(n,JSON.stringify(s,null,2),`utf-8`),s}var SSe=class{map=new Map;capacity;onEviction;onSizeChange;onMutate;now;constructor(e=1e4,t={}){this.capacity=Math.max(0,Math.floor(e)),this.onEviction=t.onEviction,this.onSizeChange=t.onSizeChange,this.onMutate=t.onMutate,this.now=t.now??Date.now}setRenamed(e,t){this.put(e,{kind:`renamed`,newDocName:t,addedAt:this.now()})}setDeleted(e){this.put(e,{kind:`deleted`,addedAt:this.now()})}get(e){let t=this.map.get(e);if(t!==void 0)return this.map.delete(e),this.map.set(e,t),t}has(e){return this.map.has(e)}peek(e){return this.map.get(e)}delete(e){this.map.delete(e)&&(this.onSizeChange?.(this.map.size),this.onMutate?.())}get size(){return this.map.size}entries(){return[...this.map.entries()]}restore(e,t){this.put(e,t)}put(e,t){if(this.capacity===0){this.onSizeChange?.(0);return}for(this.map.delete(e),this.map.set(e,t);this.map.size>this.capacity;){let e=this.map.keys().next().value;if(e===void 0)break;this.map.delete(e),this.onEviction?.()}this.onSizeChange?.(this.map.size),this.onMutate?.()}};function z7(e,t){let n=e.resolveFilePath(t);return n!==null&&e.fileExists(n)}async function CSe(e,t){try{if(_C(e))return;let n=t.recentlyRemovedDocs.get(e);if(n===void 0)return;if(n.kind===`deleted`){if(z7(t,e)){t.recentlyRemovedDocs.delete(e);return}throw vS(),Ao({"auth.reason":`doc-deleted`}),new BZ(`doc-deleted`,`removed-doc rejection for deleted ${e}`)}let r=new Set([e]),i=n.newDocName;for(;;){if(r.has(i)){oae(),console.warn(JSON.stringify({event:`removal-redirect-chain-cycle`,documentName:e,target:i}));return}r.add(i);let n=t.recentlyRemovedDocs.get(i);if(n===void 0)throw _S(),Ao({"auth.reason":`rename-redirect`}),new BZ(`rename-redirect`,`removed-doc redirect for ${e} → ${i}`,i);if(n.kind===`deleted`)throw z7(t,i)?(t.recentlyRemovedDocs.delete(i),_S(),Ao({"auth.reason":`rename-redirect`}),new BZ(`rename-redirect`,`removed-doc redirect for ${e} → ${i}`,i)):(vS(),Ao({"auth.reason":`doc-deleted`}),new BZ(`doc-deleted`,`removed-doc rejection for deleted ${e}`));i=n.newDocName}}catch(t){if(t instanceof BZ)throw t;aae(),console.warn(JSON.stringify({event:`removal-redirect-extension-error`,documentName:e,message:t instanceof Error?t.message:String(t)}))}}const B7=L(`removed-docs-journal`);function V7(e){return z(nN(e),`removed-docs.json`)}function wSe(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.docName!=`string`||t.docName.length===0||typeof t.addedAt!=`number`?!1:t.kind===`deleted`?!0:t.kind===`renamed`?typeof t.newDocName==`string`:!1}function TSe(e){let t=V7(e);if(!H(t))return[];try{let e=JSON.parse(U(t,`utf-8`));if(e.version!==1||!Array.isArray(e.entries))return B7.warn({path:t},`[removed-docs-journal] unrecognized journal shape — ignoring`),[];let n=[];for(let t of e.entries){if(!wSe(t))continue;let{docName:e,...r}=t;n.push([e,r])}return n}catch(e){return B7.warn({path:t,err:e},`[removed-docs-journal] failed to read journal — ignoring`),[]}}function H7(e,t){let n=V7(e),r={version:1,entries:t.map(([e,t])=>({docName:e,...t}))};Jo(R(n),{recursive:!0});let i=`${n}.tmp`;rs(i,JSON.stringify(r),`utf-8`),Vo(i,n)}const U7=L(`server-observers`);function W7(e){let t=new Map,n=new Map;return{async afterLoadDocument({documentName:r,document:i}){if(fC(r)||pC(r)||hC(r)||gC(r)||t.has(r))return;let a=i,o=a.getXmlFragment(`default`),s=a.getText(`source`),c=()=>{try{let n=NT({doc:a,xmlFragment:o,ytext:s,mdManager:e.mdManager,schema:e.schema,docName:r,shadow:e.shadowRef?()=>e.shadowRef?.current:void 0,getBranch:e.getCurrentBranch?()=>e.getCurrentBranch?.()??`main`:void 0,contentRoot:e.contentRoot,resolveEmbed:e.resolveEmbed,resolveSize:e.resolveSize,deferGuardEnabled:e.deferGuardEnabled,lossDetectorEnabled:e.lossDetectorEnabled,fixedPointBackstopEnabled:e.fixedPointBackstopEnabled,preDrainEnabled:e.preDrainEnabled,lossRing:e.lossRing});return t.set(r,n),!0}catch(e){return U7.error({docName:r,err:e},`[ServerObserverExtension] Failed to attach observers for '${r}'`),mS(`a`),mS(`b`),!1}};if(!c()){let e=setTimeout(()=>{n.delete(r),!t.has(r)&&(U7.warn({docName:r},`[ServerObserverExtension] Retrying observer attachment for '${r}'`),c())},5e3);n.set(r,e)}},async afterUnloadDocument({documentName:e}){let r=n.get(e);r&&(clearTimeout(r),n.delete(e));let i=t.get(e);i&&(i(),t.delete(e))},async onDestroy(){for(let e of n.values())clearTimeout(e);n.clear();for(let[e,n]of t.entries())try{n()}catch(t){U7.error({docName:e,err:t},`[ServerObserverExtension] Cleanup failed for '${e}'`)}t.clear()}}}const G7=`state.json`;function K7(e){return e.lockDir,H(e.shadowRepoDir)?`adopt`:`fresh`}function q7(e){return V(e,G7)}function ESe(e,t){return e===t||e===0&&t===1}var J7=class extends Error{kind;path;constructor(e){super(e.message),this.name=`StateManifestError`,this.kind=e.kind,this.path=e.path}};function DSe(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.stateSchemaVersion!=`number`||typeof t.createdAt!=`string`||!t.createdBy||typeof t.createdBy!=`object`)return!1;let n=t.createdBy;return!(typeof n.runtimeVersion!=`string`||n.protocolVersion!==void 0&&typeof n.protocolVersion!=`number`)}function Y7(e){let t=q7(e);if(!H(t))return{status:`absent`};let n;try{n=U(t,`utf-8`)}catch(e){throw new J7({kind:`corrupt`,path:t,message:`Failed to read state manifest at ${t}: ${e instanceof Error?e.message:String(e)}`})}let r;try{r=JSON.parse(n)}catch(e){throw new J7({kind:`corrupt`,path:t,message:`State manifest at ${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`})}if(!DSe(r))throw new J7({kind:`corrupt`,path:t,message:`State manifest at ${t} has invalid shape (missing or wrong-typed required fields)`});return{status:`present`,manifest:r}}function X7(e,t){let n=q7(e);Ul(R(n),{recursive:!0}),tu(n,JSON.stringify(t,null,2),{encoding:`utf-8`,mode:384})}function Z7(e){let t=L(`state-manifest`),n=e.currentStateSchemaVersion??1,r=e.currentRuntimeVersion??Os,i=e.currentProtocolVersion??1,a=(e.now??(()=>new Date))().toISOString(),o=q7(e.lockDir),s=Y7(e.lockDir);if(s.status===`present`){let c=s.manifest;if(!ESe(c.stateSchemaVersion,n))throw new J7({kind:`incompatible`,path:o,message:`State manifest at ${o} declares stateSchemaVersion=${c.stateSchemaVersion} but this binary supports ${n}. Refusing to boot — on-the-fly migration is out of scope. (Manifest written by runtime ${c.createdBy.runtimeVersion}, protocol ${c.createdBy.protocolVersion}.)`});try{let t={...c,lastWriteBy:{runtimeVersion:r,protocolVersion:i,at:a}};return X7(e.lockDir,t),t}catch(e){return t.warn({err:e},`[state-manifest] failed to update lastWriteBy — proceeding`),c}}if(K7({lockDir:e.lockDir,shadowRepoDir:e.shadowRepoDir})===`fresh`){let s={stateSchemaVersion:n,createdAt:a,createdBy:{runtimeVersion:r,protocolVersion:i}};return X7(e.lockDir,s),t.info({path:o,stateSchemaVersion:n},`[state-manifest] fresh project — wrote manifest`),s}let c={stateSchemaVersion:0,createdAt:a,createdBy:{runtimeVersion:r,protocolVersion:i,adoptedAt:a}};return X7(e.lockDir,c),t.warn({path:o,runtimeVersion:r},`[state-manifest] adopting pre-versioned project — wrote schema-0 manifest. Future binaries with STATE_SCHEMA_VERSION>=2 may refuse if they cannot read schema-0 state.`),c}function OSe(e,t){return e===`auth`&&t===`403`?`auth-403`:e===`auth`&&t===`401`?`auth-401`:e===`auth`&&t===`scope-mismatch`?`auth-scope-mismatch`:e===`auth`&&t===`no-credential`?`auth-no-credential`:e===`semantic`&&t===`protected-branch`?`semantic-protected-branch`:null}function kSe(e){return e.git?.toString()??e.message??``}function Q7(e,t){return t.some(t=>t.test(e))}const ASe={"no-credential":`No GitHub credential available — reconnect to resume syncing`,401:`Authentication failed — token may be expired`,403:`Access denied (403)`,"scope-mismatch":`GitHub token missing required scopes`,"ssh-auth":`SSH authentication failed — check your SSH key or host-key trust`,"unknown-auth":`Authentication failed`},jSe=[/non-fast-forward/i,/rejected.*non-fast-forward/i,/would overwrite.*commits/i,/\[rejected\]/,/fetch first/i,/updates were rejected/i],$7=[/protected branch/i,/refusing to allow/i,/at least \d+ approving review/i,/required status check/i,/branch policy/i,/GH001/i,/GH002/i,/GH003/i,/GH004/i,/push declined due to repository rule/i,/cannot push to a protected branch/i],MSe=[/\bmerge conflict\b/i,/automatic merge failed/i,/CONFLICT \(/,/\bconflict\b.*\bmerge\b/i,/(?:^|\n)CONFLICTS:\s/i],NSe=[/lfs.*quota/i,/exceeded.*bandwidth/i,/lfs storage/i],PSe=[/file.*too large/i,/exceeded.*file size/i,/push file size limit/i],FSe=[/pre-receive hook/i,/remote:.*rejected/i,/hook declined/i],ISe=[/secret.*detected/i,/push.*secret/i,/secret scanning/i,/leaking.*credentials/i,/token.*detected/i],LSe=[/\.git\/index\.lock/i,/another git process/i,/unable to create.*\.lock/i],RSe=[/dirty.*working tree/i,/working tree.*not clean/i,/untracked.*files.*would be overwritten/i,/local changes.*would be overwritten/i,/uncommitted changes/i,/changes.*not staged/i,/please.*commit.*changes/i,/please.*stash/i,/commit your changes or stash/i],zSe=[/no space left on device/i,/disk quota exceeded/i,/ENOSPC/i],BSe=[/could not resolve host/i,/name.*resolution/i,/connection.*timed out/i,/operation timed out/i,/connection refused/i,/network.*unreachable/i,/ssl.*handshake/i,/unable to connect/i,/getaddrinfo/i,/econnrefused/i,/enotfound/i,/etimedout/i,/ehostunreach/i],VSe=[/\bHTTP[\s/]*5[0-9]{2}\b/i,/\bstatus:?\s*5[0-9]{2}\b/i,/\berror\s*5[0-9]{2}\b/i,/\bresponse.*?\b5[0-9]{2}\b/i],HSe=[/\bHTTP[\s/]*429\b/i,/\bstatus:?\s*429\b/i,/\berror\s*429\b/i,/rate.?limit/i,/too many requests/i];function e9(e){let t=USe(e);return{...t,userFacingCode:OSe(t.class,t.subclass)}}function USe(e){let t=e instanceof Error?e:Error(String(e)),n=kSe(t),r=`${t.message}\n${n}`.toLowerCase();if(Q7(r,LSe))return{class:`local`,subclass:`index-lock`,retryable:!0,message:`Git index locked by another process`,rawStderr:n};if(Q7(r,RSe))return{class:`local`,subclass:`dirty-tree`,retryable:!0,message:`Working tree has uncommitted changes`,rawStderr:n};if(Q7(r,zSe))return{class:`local`,subclass:`disk-full`,retryable:!0,message:`Disk full or quota exceeded`,rawStderr:n};let i=ga(t);return i.kind===`auth`?i.subclass===`403`&&Q7(r,$7)?{class:`semantic`,subclass:`protected-branch`,retryable:!1,message:`Push rejected — branch is protected`,rawStderr:n}:{class:`auth`,subclass:i.subclass,retryable:!1,message:ASe[i.subclass],rawStderr:n}:Q7(r,$7)?{class:`semantic`,subclass:`protected-branch`,retryable:!1,message:`Push rejected — branch is protected`,rawStderr:n}:Q7(r,jSe)?{class:`semantic`,subclass:`non-fast-forward`,retryable:!1,message:`Push rejected — remote has diverged (non-fast-forward)`,rawStderr:n}:Q7(r,MSe)?{class:`semantic`,subclass:`merge-conflict`,retryable:!1,message:`Merge conflict — manual resolution required`,rawStderr:n}:Q7(r,NSe)?{class:`structural`,subclass:`lfs-quota`,retryable:!1,message:`Git LFS quota exceeded`,rawStderr:n}:Q7(r,PSe)?{class:`structural`,subclass:`large-file`,retryable:!1,message:`File exceeds size limit`,rawStderr:n}:Q7(r,ISe)?{class:`structural`,subclass:`secret-detected`,retryable:!1,message:`Push blocked — secret or credential detected in content`,rawStderr:n}:Q7(r,FSe)?{class:`structural`,subclass:`pre-receive-hook`,retryable:!1,message:`Push rejected by server pre-receive hook`,rawStderr:n}:Q7(r,HSe)?{class:`network`,subclass:`429`,retryable:!0,message:`Rate limited — too many requests`,rawStderr:n}:Q7(r,VSe)?{class:`network`,subclass:`5xx`,retryable:!0,message:`Server error (5xx)`,rawStderr:n}:Q7(r,BSe)?/timed? out/i.test(r)?{class:`network`,subclass:`timeout`,retryable:!0,message:`Connection timed out`,rawStderr:n}:/refused/i.test(r)||/econnrefused/i.test(r)?{class:`network`,subclass:`connection-refused`,retryable:!0,message:`Connection refused`,rawStderr:n}:/resolve.*host/i.test(r)||/enotfound/i.test(r)||/getaddrinfo/i.test(r)?{class:`network`,subclass:`dns`,retryable:!0,message:`DNS resolution failed`,rawStderr:n}:{class:`network`,subclass:`unknown-network`,retryable:!0,message:`Network error`,rawStderr:n}:{class:`local`,subclass:`unknown-local`,retryable:!0,message:t.message||`Unknown git error`,rawStderr:n}}function WSe(e,t={}){let n=t.ttlMs??6e4,r=t.now??Date.now,i=new Map;return{get(t){if(!e)return null;let a=r(),o=i.get(t);if(o&&o.expiresAt>a)return o.token==null?null:{token:o.token,host:t};let s=e(t),c=s.available&&s.token?s.token:null;return i.set(t,{token:c,expiresAt:a+n}),c==null?null:{token:c,host:t}},invalidate(){i.clear()}}}const t9=L(`github-permissions`);function GSe(e){return e===`github.com`?`https://api.github.com`:`https://${e}/api/v3`}function KSe(e){let t={"User-Agent":`open-knowledge-server`,Accept:`application/vnd.github+json`};return e&&(t.Authorization=`Bearer ${e}`),t}function qSe(e){if(typeof e!=`object`||!e)return null;let t=e.permissions;if(typeof t!=`object`||!t)return null;let n=t.push;return typeof n==`boolean`?n:null}async function JSe(e,t){switch(e.status){case 200:{let t;try{t=await e.json()}catch(e){return t9.warn({err:e},`[permissions] probe got 200 with unparseable JSON body`),{kind:`unknown`,error:`malformed-response`}}let n=qSe(t);return n===null?(t9.warn({bodyKeys:typeof t==`object`&&t?Object.keys(t):[]},`[permissions] probe got 200 without permissions.push field`),{kind:`unknown`,error:`malformed-response`}):n?{kind:`allowed`}:{kind:`denied`,reason:`no-collaborator`}}case 401:return{kind:`unknown`,error:`token-invalid`};case 403:return e.headers.get(`x-ratelimit-remaining`)===`0`?{kind:`unknown`,error:`rate-limit`}:{kind:`unknown`,error:`token-invalid`};case 429:return{kind:`unknown`,error:`rate-limit`};case 404:return t?{kind:`denied`,reason:`private-no-access`}:{kind:`denied`,reason:`repo-not-found`};default:return t9.warn({httpStatus:e.status},`[permissions] probe got unexpected HTTP status`),{kind:`unknown`,error:`malformed-response`}}}async function YSe(e,t,n){let r=t(e);if(r.available&&r.token)return{token:r.token,source:`gh`};if(n)try{let t=await n.get(e);if(t?.token)return{token:t.token,source:`token-store`}}catch(t){t9.warn({err:t,host:e},`[permissions] tokenStore.get threw; falling through to anonymous`)}return{token:void 0,source:`anonymous`}}async function XSe(e){let{owner:t,repo:n,host:r=`github.com`,transport:i=`https`,detectGh:a=()=>({available:!1}),tokenStore:o,_fetchFn:s=fetch,_timeoutMs:c=5e3}=e,{token:l,source:u}=await YSe(r,a,o);if(u===`anonymous`)return i===`ssh`||i===`git`?(t9.info({host:r,transport:i},`[permissions] no credential resolved for ssh/git origin — abstaining (push auths with SSH keys, not tokens)`),{kind:`unknown`,error:`ssh-unverified`}):(t9.info({host:r},`[permissions] no credential resolved — denying push (read-only)`),{kind:`denied`,reason:`not-authenticated`});let d=`${GSe(r)}/repos/${encodeURIComponent(t)}/${encodeURIComponent(n)}`;t9.info({host:r,tokenSource:u,tokenLen:l===void 0?0:l.length},`[permissions] probe starting`);let f=new AbortController,p=setTimeout(()=>f.abort(),c);try{let e=await s(d,{signal:f.signal,headers:KSe(l)}),t=await JSe(e,l!==void 0);return t9.info({host:r,tokenSource:u,httpStatus:e.status,kind:t.kind,reason:t.kind===`denied`?t.reason:void 0,error:t.kind===`unknown`?t.error:void 0},`[permissions] probe classified`),t}catch(e){return f.signal.aborted?(t9.warn({host:r,timeoutMs:c},`[permissions] probe timed out`),{kind:`unknown`,error:`timeout`}):(t9.warn({err:e,host:r},`[permissions] probe failed`),{kind:`unknown`,error:`network`})}finally{clearTimeout(p)}}async function ZSe(e){let t=performance.now(),n=await XSe(e);return tCe(n,performance.now()-t),n}function QSe(e){return{outcome:e.kind,denied_reason:e.kind===`denied`?e.reason:`none`,error_class:e.kind===`unknown`?e.error:`none`}}let n9=null;function $Se(){return n9||=os().createCounter(`ok.permissions.probe.outcome_total`,{description:`Push-permission probe outcomes. Bounded labels: outcome ∈ {allowed,denied,unknown}; denied_reason ∈ {no-collaborator,private-no-access,repo-not-found,not-authenticated,none}; error_class ∈ {network,timeout,rate-limit,token-invalid,malformed-response,ssh-unverified,none}.`}),n9}let r9=null;function eCe(){return r9||=os().createHistogram(`ok.permissions.probe.duration_ms`,{description:`Push-permission probe wall-clock duration.`,unit:`ms`}),r9}function tCe(e,t){let n=QSe(e);$Se().add(1,n),eCe().record(t,{outcome:n.outcome})}function i9(e,t,n=Date.now()){if(!e)return 0;let r=new Date(e).getTime();if(Number.isNaN(r))return 0;let i=r+t*1e3;return Math.max(0,i-n)}function nCe(e,t){return t===`anonymous`?Math.max(180,e):e}const a9=L(`sync-engine`),o9=/^[0-9a-f]{40}$/i,rCe=Pu(yl);function iCe(e){let{exitCode:t,stderr:n}=e,r=n??``;return t===128||/^fatal:/m.test(r)&&/not possible to fast-forward/i.test(r)?`divergence`:/^error:/m.test(r)&&/would be overwritten by merge/i.test(r)?`overlay-overlap`:`unknown`}function aCe(e){return e.kind===`allowed`?{checkStatus:`allowed`}:e.kind===`denied`?{checkStatus:`denied`,deniedReason:e.reason}:{checkStatus:`unknown`,unknownError:e.error}}function s9(e,t){return e===t?!0:e===null||t===null||e.checkStatus!==t.checkStatus?!1:e.checkStatus===`denied`&&t.checkStatus===`denied`?e.deniedReason===t.deniedReason:e.checkStatus===`unknown`&&t.checkStatus===`unknown`?e.unknownError===t.unknownError:!0}function c9(e){let t=e*1e3,n=t*.15*(2*Math.random()-1);return Math.round(t+n)}function l9(e){let t=Wu(e);if(t.kind!==`repository`)return!1;let n=t.repository.readHead();return n.kind===`branch`?t.repository.readRef(n.ref).kind===`absent`:!1}function oCe(e){return e>=8?3600*1e3:e>=5?900*1e3:e>=3?300*1e3:0}const u9=12e4;var sCe=class{state=`dormant`;projectDir;contentDir;contentFilter;contentRoot;pullIntervalSeconds;pushIntervalSeconds;mode;credentialArgs;cc1Broadcaster;onStateChange;onContentConflictsDetected;onContentConflictsResolved;setBatchInProgress;onAutoDisable;checkpointBeforeStrandedConversion;checkpointBeforeOverlayRestore;detectGh;ghTokenSource;tokenStore;checkPushPermissionFn;pushPermission=null;pushPermissionProbeInFlight=!1;authTier=`unknown`;pullTimer=null;pushTimer=null;stateSaveTimer=null;lastSyncUtc=null;lastFetchUtc=null;lastPushedSha=null;lastPullUtc=null;lastPullOutcome=null;consecutiveFailures=0;ahead=0;behind=0;conflictCount=0;pushError;pushErrorCode;pullError;pullErrorCode;pausedReason;currentBranch=`main`;pullInFlight=!1;pushInFlight=!1;hasRemote=!1;identityUnresolved=!1;statePath;conflictStore;constructor(e){this.projectDir=e.projectDir,this.contentDir=e.contentDir,this.contentFilter=e.contentFilter,this.contentRoot=e.contentRoot??``,this.pullIntervalSeconds=e.pullIntervalSeconds??30,this.pushIntervalSeconds=e.pushIntervalSeconds??60,this.mode=e.mode??(e.syncEnabled===!0?`full`:`off`),this.credentialArgs=e.credentialArgs??[],this.cc1Broadcaster=e.cc1Broadcaster??null,this.onStateChange=e.onStateChange,this.onContentConflictsDetected=e.onContentConflictsDetected,this.onContentConflictsResolved=e.onContentConflictsResolved,this.setBatchInProgress=e.setBatchInProgress,this.onAutoDisable=e.onAutoDisable,this.checkpointBeforeStrandedConversion=e.checkpointBeforeStrandedConversion,this.checkpointBeforeOverlayRestore=e.checkpointBeforeOverlayRestore,this.detectGh=e.detectGh,this.ghTokenSource=WSe(e.detectGh),this.tokenStore=e.tokenStore,this.checkPushPermissionFn=e.checkPushPermissionFn??ZSe,this.statePath=V(nN(this.projectDir),`sync-state.json`),this.conflictStore=new WZ(this.projectDir,this.currentBranch)}syncGhTokenHost(){return zR(this.projectDir)}gitHandle(e){return ys(this.projectDir,{credentialArgs:this.credentialArgs,gitIndexFile:e,ghToken:this.ghTokenSource.get(this.syncGhTokenHost())??void 0,timeoutMs:12e4})}async start(){if(this.state!==`dormant`)return;this.loadState();let e=!1;try{let t=this.gitHandle();e=(await t.git.raw(`remote`,`-v`)).trim().length>0,this.hasRemote=e;try{let e=(await t.git.raw(`rev-parse`,`--abbrev-ref`,`HEAD`)).trim();e&&e!==`HEAD`&&(this.currentBranch=e,this.conflictStore.setBranch(e))}catch{}}catch(e){a9.warn({err:e},`[sync] remote detection failed`)}if(e&&this.probePushPermissionInternal(`start`),this.mode===`off`){e&&this.transitionTo(`disabled`),a9.info({hasRemote:e,mode:this.mode},`[sync] sync not enabled — staying inactive`);return}if(!e){a9.info({},`[sync] no remote detected — staying dormant`);return}this.transitionTo(`idle`);let t=td(this.projectDir),n=t?z(t,`MERGE_HEAD`):null,r=n!==null&&H(n);this.conflictCount=this.conflictStore.count();let i=()=>this.conflictStore.list().filter(e=>e.variant!==`working-tree`);if(i().length>0&&!r){a9.warn({count:i().length},`[sync] persisted merge conflicts but no MERGE_HEAD — clearing stale state`);for(let e of i())this.conflictStore.removeConflict(e.file);this.conflictCount=this.conflictStore.count()}else if(i().length>0&&r)try{let e=this.gitHandle(),t=new Set(await aS(e.git,[`diff`,`--name-only`,`--diff-filter=U`])),n=this.conflictCount;for(let e of i())t.has(e.file)||this.conflictStore.removeConflict(e.file);this.conflictCount=this.conflictStore.count(),this.conflictCount<n&&a9.info({cleared:n-this.conflictCount,remaining:this.conflictCount},`[sync] reconciled conflicts.json against git unmerged index`)}catch(e){a9.warn({err:e},`[sync] failed to reconcile conflicts with git index`)}if(r&&i().length===0){a9.warn({},`[sync] stale MERGE_HEAD detected with no tracked conflicts — aborting merge`);try{await this.gitHandle().git.raw([`merge`,`--abort`])}catch(e){a9.warn({err:e},`[sync] git merge --abort for stale MERGE_HEAD failed`)}}if(i().length>0){await this.notifyContentConflictsDetected(this.conflictStore.list().map(e=>e.file)),this.transitionTo(`conflict`),a9.warn({count:this.conflictCount},`[sync] restarted with active conflicts — sync paused`);return}let a=this.conflictStore.list().filter(e=>e.variant===`working-tree`);a.length>0&&await this.notifyContentConflictsDetected(a.map(e=>e.file)),this.mode===`follow`&&await this.refreshAuthTier();let o=i9(this.lastFetchUtc,this.currentPullIntervalSeconds()),s=i9(this.lastSyncUtc,this.pushIntervalSeconds);this.schedulePull(o>0?o:void 0),this.schedulePush(s>0?s:void 0),a9.info({branch:this.currentBranch,pullDelayMs:o,pushDelayMs:s},`[sync] started`)}stop(){this.pullTimer!==null&&(clearTimeout(this.pullTimer),this.pullTimer=null),this.pushTimer!==null&&(clearTimeout(this.pushTimer),this.pushTimer=null),this.stateSaveTimer!==null&&(clearTimeout(this.stateSaveTimer),this.stateSaveTimer=null),this.state!==`dormant`&&this.transitionTo(`dormant`)}async destroy(){this.stop(),this.saveStateNow()}async setMode(e,t=`config`){if(this.mode===e)return;let n=this.mode;if(this.mode=e,a9.info({from:n,to:e,source:t},`[sync] mode changed`),e===`off`){this.cancelScheduledCycles(),await this.drainInFlightCycles(),this.pausedReason=void 0,this.clearPushError(),this.clearPullError(),this.transitionTo(this.hasRemote?`disabled`:`dormant`),this.saveStateNow();return}if(this.hasRemote=await this.probeRemote(),this.pausedReason=void 0,this.clearPushError(),this.clearPullError(),this.consecutiveFailures=0,!this.hasRemote){this.transitionTo(`dormant`),this.saveStateNow();return}e===`follow`&&(await this.drainInFlightCycles(),this.cancelScheduledCycles(),await this.convertStrandedCommitsToOverlay()),this.transitionTo(`idle`),this.schedulePull(0),this.schedulePush(),this.saveStateNow(),this.probePushPermissionInternal(`refresh`)}async setEnabled(e){await this.setMode(e?`full`:`off`)}cancelScheduledCycles(){this.pullTimer!==null&&(clearTimeout(this.pullTimer),this.pullTimer=null),this.pushTimer!==null&&(clearTimeout(this.pushTimer),this.pushTimer=null)}async drainInFlightCycles(){let e=Date.now();for(;this.pullInFlight||this.pushInFlight;){if(Date.now()-e>3e4){a9.warn({pullInFlight:this.pullInFlight,pushInFlight:this.pushInFlight},`[sync] drain: timed out waiting for in-flight cycle`);break}await Nu(50)}}async probeUnpushedCommitCount(){return!this.hasRemote||l9(this.projectDir)?0:this.unpushedCommitCount(this.gitHandle())}async unpushedCommitCount(e){try{let t=await e.git.status();if(t.tracking)return t.ahead}catch{}try{let t=(await e.git.raw([`rev-list`,`--count`,`origin/${this.currentBranch}..HEAD`])).trim(),n=Number.parseInt(t,10);return Number.isFinite(n)?n:0}catch{return 0}}async convertStrandedCommitsToOverlay(){if(!this.hasRemote||l9(this.projectDir))return;let e=this.gitHandle(),t;try{t=await this.unpushedCommitCount(e)}catch(e){a9.warn({err:e},`[sync] pull-only: could not probe stranded commits — skipping conversion`);return}if(t!==0){try{await this.checkpointBeforeStrandedConversion?.({branch:this.currentBranch,ahead:t})}catch(e){a9.warn({err:e},`[sync] pull-only: stranded-commit checkpoint failed — proceeding`)}try{let n=(await e.git.raw([`merge-base`,`HEAD`,`origin/${this.currentBranch}`])).trim();this.setBatchInProgress?.(!0);try{await _s(()=>e.git.raw([`reset`,`--mixed`,n]))}finally{this.setBatchInProgress?.(!1)}let r=await e.git.status();this.ahead=r.ahead,this.behind=r.behind,this.pausedReason=void 0,a9.info({ahead:t,behind:this.behind},`[sync] pull-only: folded stranded local commits into a working-tree overlay`)}catch(e){this.pausedReason=`diverged-local-commits`,a9.warn({err:e},`[sync] pull-only: stranded-commit conversion failed — leaving branch as-is`)}}}async notifyCredentialsChanged(){if(this.mode!==`off`&&(this.ghTokenSource.invalidate(),!(this.state!==`auth-error`&&this.pausedReason!==`auth-error`))){if(this.pausedReason=void 0,this.clearPushError(),this.clearPullError(),this.consecutiveFailures=0,this.hasRemote=await this.probeRemote(),!this.hasRemote){this.transitionTo(`dormant`),this.saveStateNow();return}this.transitionTo(`idle`),this.schedulePull(0),this.schedulePush(),this.saveStateNow(),this.probePushPermissionInternal(`refresh`)}}async trigger(e=`sync`){if(this.consecutiveFailures=0,(this.pausedReason===`dirty-tree`||this.pausedReason===`external-changes-pending`||this.pausedReason===`non-content-merge-failure`)&&(this.pausedReason=void 0,this.clearPullError()),this.probePushPermissionInternal(`refresh`),e===`pull`){await this.pullOnce();return}this.state===`dormant`||this.state===`disabled`||this.state===`conflict`||this.state===`auth-error`?a9.warn({op:e,state:this.state,mode:this.mode,hasRemote:this.hasRemote,pausedReason:this.pausedReason,conflictCount:this.conflictCount},`[sync] trigger(${e}) ignored — state=${this.state}`):a9.info({op:e,state:this.state},`[sync] trigger(${e}) running`),e===`push`?await this.runPushCycle():(await this.runPushCycle(),await this.runPullCycle())}async pullOnce(){let e=this.mode,t=await this.runOneShotPull();return a9.info({mode:e,outcome:t},`[sync] one-shot pull complete`),t}async runOneShotPull(){if(this.pullInFlight||this.pushInFlight||this.state===`conflict`||!this.hasRemote||l9(this.projectDir))return this.recordPullOutcome(`refused`);let e=this.mode,t=this.state,n=this.pausedReason;this.pullInFlight=!0;try{return this.recordPullOutcome(await this.doPullCycle())}finally{this.pullInFlight=!1,e===`off`?(this.pausedReason=n,this.transitionTo(t)):this.schedulePull()}}recordPullOutcome(e){return this.lastPullUtc=new Date().toISOString(),this.lastPullOutcome=e,this.cc1Broadcaster?.signal(`sync-status`),e}getStatus(){return{state:this.state,lastSyncUtc:this.lastSyncUtc,lastFetchUtc:this.lastFetchUtc,lastPushedSha:this.lastPushedSha,lastPullUtc:this.lastPullUtc,lastPullOutcome:this.lastPullOutcome,ahead:this.ahead,behind:this.behind,consecutiveFailures:this.consecutiveFailures,conflictCount:this.conflictCount,hasRemote:this.hasRemote,syncEnabled:this.mode!==`off`,syncMode:this.mode,identityUnresolved:this.identityUnresolved,remote:this.hasRemote?BR(this.projectDir):null,...this.pushError===void 0?{}:{pushError:this.pushError},...this.pushErrorCode===void 0?{}:{pushErrorCode:this.pushErrorCode},...this.pullError===void 0?{}:{pullError:this.pullError},...this.pullErrorCode===void 0?{}:{pullErrorCode:this.pullErrorCode},pausedReason:this.pausedReason,...this.pushPermission===null?{}:{pushPermission:this.pushPermission}}}async refreshPushPermission(){return this.probePushPermissionInternal(`refresh`)}async refreshIdentity(){let e=await $U(this.projectDir)===null;this.identityUnresolved!==e&&(this.identityUnresolved=e,this.cc1Broadcaster?.signal(`sync-status`))}async probePushPermissionInternal(e){if(!this.hasRemote||this.pushPermissionProbeInFlight)return null;let t=RR(this.projectDir);if(t.kind!==`ok`){let e={checkStatus:`unknown`},t=this.pushPermission;return this.pushPermission=e,s9(t,e)||this.cc1Broadcaster?.signal(`sync-status`),e}this.pushPermissionProbeInFlight=!0,a9.info({caller:e,host:t.host,hasDetectGh:this.detectGh!==void 0,hasTokenStore:this.tokenStore!==void 0&&this.tokenStore!==null},`[sync] push-permission probe dispatching`);let n;try{n=await this.checkPushPermissionFn({owner:t.owner,repo:t.repo,host:t.host,transport:t.transport,detectGh:this.detectGh,tokenStore:this.tokenStore})}catch(t){a9.warn({err:t,caller:e},`[sync] push-permission probe threw — recording unknown/network`),n={kind:`unknown`,error:`network`}}finally{this.pushPermissionProbeInFlight=!1}let r=aCe(n),i=this.pushPermission;this.pushPermission=r;let a=!1;return r.checkStatus===`denied`&&this.mode===`full`?(this.pausedReason!==`no-push-permission`||this.state!==`disabled`)&&(this.pausedReason=`no-push-permission`,this.transitionTo(`disabled`),a=!0,a9.info({reason:r.deniedReason,caller:e},`[sync] paused — no push permission on origin`)):r.checkStatus===`allowed`&&this.pausedReason===`no-push-permission`&&(this.pausedReason=void 0,this.state===`disabled`&&this.mode===`full`&&this.transitionTo(`idle`),a=!0,a9.info({caller:e,priorState:this.state},`[sync] push permission restored`)),!a&&!s9(i,r)&&this.cc1Broadcaster?.signal(`sync-status`),r}async refreshRemote(){this.hasRemote||await this.probeRemote()&&(this.hasRemote=!0,a9.info({mode:this.mode},`[sync] remote detected post-boot — re-evaluating state`),this.mode===`off`?this.transitionTo(`disabled`):(this.transitionTo(`idle`),this.schedulePull(0),this.schedulePush()))}async probeRemote(){if(!H(z(this.projectDir,`.git`)))return!1;try{return(await this.gitHandle().git.raw(`remote`,`-v`)).trim().length>0}catch(e){return a9.warn({err:e},`[sync] remote detection failed`),!1}}getConflicts(){return this.conflictStore.list()}async reconcileConflictsFromGit(){let e=this.conflictStore.list().filter(e=>e.variant!==`working-tree`);if(e.length===0)return;let t=this.conflictCount,n=td(this.projectDir),r=n?z(n,`MERGE_HEAD`):null;if(r!==null&&H(r))try{let n=this.gitHandle(),r=new Set(await aS(n.git,[`diff`,`--name-only`,`--diff-filter=U`]));for(let t of e)r.has(t.file)||this.conflictStore.removeConflict(t.file);this.conflictCount=this.conflictStore.count(),this.conflictCount<t&&a9.info({cleared:t-this.conflictCount,remaining:this.conflictCount},`[sync] external resolve detected (mid-merge) — pruned resolved entries`)}catch(e){a9.warn({err:e},`[sync] reconcileConflictsFromGit: git probe failed`);return}else{a9.info({cleared:e.length},`[sync] external resolve detected (no MERGE_HEAD) — clearing merge-native conflicts`);for(let t of e)this.conflictStore.removeConflict(t.file);this.conflictCount=this.conflictStore.count()}this.conflictCount!==t&&(this.conflictCount===0&&this.state===`conflict`?(this.transitionTo(`idle`),this.pausedReason=void 0,this.schedulePull(),this.schedulePush()):this.cc1Broadcaster?.signal(`sync-status`),this.scheduleSaveState())}async resolveConflict(e,t,n){let r=this.conflictStore.list().find(t=>t.file===e)?.variant===`working-tree`;this.setBatchInProgress?.(!0);try{try{await this.conflictStore.resolveConflict(e,t,n)}catch(e){throw this.conflictCount=this.conflictStore.count(),this.scheduleSaveState(),e}r&&(a9.info({choice:t},`[sync] pull-only: conflict resolved by choice`),await this.notifyContentConflictsResolved([e])),this.conflictCount=this.conflictStore.count(),this.conflictCount===0&&this.state===`conflict`?(this.transitionTo(`idle`),this.pausedReason=void 0,this.schedulePull(),this.schedulePush()):this.cc1Broadcaster?.signal(`sync-status`),this.scheduleSaveState()}finally{this.setBatchInProgress?.(!1)}}updateCurrentBranch(e){e===null?this.state!==`dormant`&&this.state!==`disabled`&&(this.transitionTo(`disabled`),this.pausedReason=`detached-head`,this.scheduleSaveState()):this.currentBranch!==e&&(this.currentBranch=e,this.conflictStore.setBranch(e),this.state===`disabled`&&this.pausedReason===`detached-head`&&(this.pausedReason=void 0,this.transitionTo(`idle`),this.schedulePull(),this.schedulePush()))}schedulePull(e){this.pullTimer!==null&&clearTimeout(this.pullTimer);let t=e??this.effectivePullDelayMs();this.pullTimer=setTimeout(()=>{this.pullTimer=null,this.runPullCycle().catch(e=>{a9.error({err:e},`[sync] pull cycle uncaught error`)})},t)}schedulePush(e){if(this.mode!==`full`)return;this.pushTimer!==null&&clearTimeout(this.pushTimer);let t=e??c9(this.pushIntervalSeconds);this.pushTimer=setTimeout(()=>{this.pushTimer=null,this.runPushCycle().catch(e=>{a9.error({err:e},`[sync] push cycle uncaught error`)})},t)}async resolveAuthTier(){let e=this.syncGhTokenHost();if(this.ghTokenSource.get(e)!==null)return`authenticated`;if(this.tokenStore)try{if((await this.tokenStore.get(e))?.token)return`authenticated`}catch(e){a9.warn({err:e},`[sync] auth-tier token-store lookup threw — treating as anonymous`)}return`anonymous`}async refreshAuthTier(){this.authTier=await this.resolveAuthTier()}currentPullIntervalSeconds(){return this.mode===`follow`?nCe(this.pullIntervalSeconds,this.authTier===`anonymous`?`anonymous`:`authenticated`):this.pullIntervalSeconds}effectivePullDelayMs(){let e=oCe(this.consecutiveFailures);return c9(e>0?e/1e3:this.currentPullIntervalSeconds())}async runPullCycle(){if(!this.pullInFlight&&!(this.state===`dormant`||this.state===`disabled`||this.state===`auth-error`)){if(this.state===`conflict`){this.schedulePull();return}if(l9(this.projectDir)){this.schedulePull();return}this.mode===`follow`&&await this.refreshAuthTier(),this.pullInFlight=!0;try{this.recordPullOutcome(await this.doPullCycle())}finally{this.pullInFlight=!1,this.schedulePull()}}}async doPullCycle(){let e=this.gitHandle(),t;try{let n=(await e.git.raw(`rev-parse`,`--abbrev-ref`,`HEAD`)).trim();if(!n||n===`HEAD`)return this.transitionTo(`disabled`),this.pausedReason=`detached-head`,a9.warn({},`[sync] detached HEAD — pausing sync`),`refused`;t=n,this.currentBranch=t}catch(e){return this.handleError(e9(e instanceof Error?e:Error(String(e))),`pull`),`error`}this.transitionTo(`fetching`);try{await e.git.fetch(`origin`),this.lastFetchUtc=new Date().toISOString(),this.consecutiveFailures=0,this.clearPullError()}catch(e){let t=e9(e instanceof Error?e:Error(String(e)));return this.handleError(t,`pull`),`error`}try{let t=await e.git.status();this.ahead=t.ahead,this.behind=t.behind}catch{}if(this.behind>0&&this.mode!==`full`){let n=await this.doPullCycleB1(e,t);return this.scheduleSaveState(),n}if(this.behind>0&&this.conflictCount===0){this.transitionTo(`pulling`),this.setBatchInProgress?.(!0);try{await this.commitDirtyContentFilesToHead(e);let n=await this.prepareForMerge(e,t);if(!n.proceed)return`refused`;try{await e.git.merge([`origin/${t}`]),this.lastSyncUtc=new Date().toISOString(),this.behind=0,this.transitionTo(`idle`)}finally{n.needsStashPop&&await this.popPreMergeStash(e)}return this.scheduleSaveState(),`succeeded`}catch(e){let t=e9(e instanceof Error?e:Error(String(e)));return t.class===`semantic`&&t.subclass===`merge-conflict`?(await this.handleMergeConflict(),this.state===`conflict`?`conflict`:this.pullError?`error`:`succeeded`):(this.handleError(t,`pull`),`error`)}finally{this.setBatchInProgress?.(!1)}}return this.transitionTo(`idle`),this.scheduleSaveState(),this.behind===0?`up-to-date`:`conflict`}async doPullCycleB1(e,t){if(this.transitionTo(`pulling`),this.ahead>0)return this.clearPullError(),this.pausedReason=`diverged-local-commits`,this.transitionTo(`idle`),a9.warn({ahead:this.ahead,behind:this.behind},`[sync] pull-only: local history diverged — not fast-forwardable, skipping cycle`),`refused`;let n,r;try{n=(await e.git.revparse([`HEAD`])).trim();let i=await aS(e.git,[`diff-index`,`--name-only`,`HEAD`]),a=new Set(await aS(e.git,[`diff`,`--name-only`,`HEAD..origin/${t}`]));r=i.filter(e=>a.has(e))}catch(e){return this.handleError(e9(e instanceof Error?e:Error(String(e))),`pull`),`error`}let i=new Map;for(let e of this.conflictStore.list())e.variant===`working-tree`&&i.set(e.file,e);let a;try{a=await this.planOverlapReconciliation(e,t,n,r,i)}catch(e){return this.handleError(e9(e instanceof Error?e:Error(String(e))),`pull`),`error`}this.setBatchInProgress?.(!0);try{if(r.length>0){try{await this.checkpointBeforeOverlayRestore?.({branch:t,paths:r.length})}catch(e){a9.warn({err:e,paths:r.length},`[sync] pull-only: overlay checkpoint failed before restore — proceeding`)}try{await e.git.raw([`restore`,`--source=HEAD`,`--staged`,`--worktree`,`--`,...r])}catch(e){return a9.warn({err:e},`[sync] pull-only: failed to restore overlay before fast-forward — skipping cycle`),this.handleError(e9(e instanceof Error?e:Error(String(e))),`pull`),`error`}}let n=await this.fastForwardOnly(e,t);if(!n.ok){try{this.applyOverlayPlan(a.mineRestore,a.deletions)}catch(e){return a9.error({err:e,refusal:n.refusal},`[sync] pull-only: failed to restore overlay after fast-forward refusal`),this.handleError(e9(e instanceof Error?e:Error(String(e))),`pull`),`error`}return n.timedOut?(a9.warn({},`[sync] pull-only: fast-forward timed out — backing off`),this.handleError(e9(Error(`git merge --ff-only timed out after ${u9}ms`)),`pull`),`error`):(n.refusal===`divergence`&&(this.pausedReason=`diverged-local-commits`),this.transitionTo(`idle`),a9.warn({refusal:n.refusal,stderr:n.stderr.slice(0,200)},`[sync] pull-only: fast-forward refused — skipping cycle`),`refused`)}try{this.applyOverlayPlan(a.writes,a.deletions)}catch(e){return a9.error({err:e},`[sync] pull-only: failed to apply overlay after fast-forward`),this.handleError(e9(e instanceof Error?e:Error(String(e))),`pull`),`error`}let i=!0;for(let e of a.upserts)i=this.conflictStore.addConflict(e)&&i;for(let e of a.dissolved)i=this.conflictStore.removeConflict(e)&&i;if(this.conflictCount=this.conflictStore.count(),!i)return a9.error({},`[sync] pull-only: failed to persist conflict state after fast-forward — surfacing as error`),this.handleError(e9(Error(`failed to persist conflict state after fast-forward`)),`pull`),`error`;this.lastSyncUtc=new Date().toISOString(),this.behind=0,this.clearPullError(),this.pausedReason=void 0,this.transitionTo(`idle`),a.newConflicts.length>0&&await this.notifyContentConflictsDetected(a.newConflicts),a.dissolved.length>0&&await this.notifyContentConflictsResolved(a.dissolved),(a.newConflicts.length>0||a.dissolved.length>0)&&this.cc1Broadcaster?.signal(`sync-status`);let o=await this.countStandingOverlay(e);return a9.info({created:a.newConflicts.length,autoCombined:a.autoCombined.length,autoDissolved:a.dissolved.length,autoRestored:a.autoRestored.length,overlayStock:o},`[sync] pull-only: fast-forwarded to origin tip`),a.newConflicts.length>0?`conflict`:`succeeded`}finally{this.setBatchInProgress?.(!1)}}async fastForwardOnly(e,t){try{return await rCe(`git`,[`-c`,`core.autocrlf=false`,`merge`,`--ff-only`,`origin/${t}`],{cwd:this.projectDir,env:e.env,windowsHide:!0,timeout:u9}),{ok:!0}}catch(e){let t=e,n=t.killed===!0||t.signal===`SIGTERM`,r=typeof t.code==`number`?t.code:null,i=typeof t.stderr==`string`?t.stderr:e instanceof Error?e.message:String(e);return{ok:!1,refusal:iCe({exitCode:r,stderr:i}),stderr:i,exitCode:r,timedOut:n}}}async planOverlapReconciliation(e,t,n,r,i){let a=[],o=[],s=[],c=[],l=[],u=[],d=[],f=[];for(let p of r){let r=i.get(p),m=r!==void 0;if(!H(z(this.projectDir,p))){try{await e.git.revparse([`origin/${t}:${p}`])}catch(e){if(this.classifyRefReadFailure(e)===`error`){s.push(p),a9.warn({err:e,path:p},`[sync] pull-only: unexpected error probing origin for a deleted overlay — deferring reconcile`);continue}s.push(p),m&&l.push(p);continue}if(!this.isContentConflictPath(p)){s.push(p);continue}f.push(p),m&&l.push(p);continue}let h;try{h=U(z(this.projectDir,p))}catch{continue}o.push({path:p,bytes:h});let g=h.toString(`utf-8`),_=null;try{_=await e.git.raw([`show`,`origin/${t}:${p}`])}catch(e){this.classifyRefReadFailure(e)===`error`&&a9.warn({err:e,path:p},`[sync] pull-only: unexpected error reading origin blob — keeping overlay, deferring reconcile`),_=null}if(_!==null&&_===g){m&&l.push(p);continue}if(_===null||!this.isContentConflictPath(p)){a.push({path:p,bytes:h});continue}let v=m?r.baseSha:await this.gitBlobSha(e,`${n}:${p}`),y=hi(v?await this.gitBlobContent(e,v):``,g,_);if(y.clean){a.push({path:p,bytes:Buffer.from(y.merged,`utf-8`)}),d.push(p),m&&l.push(p);continue}a.push({path:p,bytes:h});let b=await this.gitBlobSha(e,`origin/${t}:${p}`);if(b===void 0){a9.warn({path:p},`[sync] pull-only: could not pin origin blob for a collision — keeping overlay, deferring`);continue}c.push({file:p,detectedAt:r?.detectedAt??new Date().toISOString(),variant:`working-tree`,theirsSha:b,baseSha:v}),m||u.push(p)}return{writes:a,mineRestore:o,deletions:s,upserts:c,dissolved:l,newConflicts:u,autoCombined:d,autoRestored:f}}applyOverlayPlan(e,t){for(let{path:t,bytes:n}of e){let e=z(this.projectDir,t);dV(e,this.projectDir),rs(e,n)}for(let e of t){let t=z(this.projectDir,e);dV(t,this.projectDir);try{Uo(t)}catch(e){if(e.code!==`ENOENT`)throw e}}}isContentConflictPath(e){let t=z(this.projectDir,e),n=wj(B(this.contentDir,t));return!n.startsWith(`..`)&&eC(n)&&!this.contentFilter.isExcluded(n)}async gitBlobSha(e,t){try{return(await e.git.revparse([t])).trim()}catch{return}}classifyRefReadFailure(e){let t=e instanceof Error?e.message:String(e);return/does not exist in|exists on disk, but not in/i.test(t)?`absent`:`error`}async gitBlobContent(e,t){return e.git.raw([`cat-file`,`blob`,t])}async countStandingOverlay(e){try{return(await aS(e.git,[`diff-index`,`--name-only`,`HEAD`])).filter(e=>this.isContentConflictPath(e)).length}catch{return null}}async runPushCycle(){if(!this.pushInFlight&&this.mode===`full`&&!(this.state===`dormant`||this.state===`disabled`)&&!(this.state===`conflict`||this.state===`auth-error`)){if(l9(this.projectDir)){this.schedulePush();return}this.pushInFlight=!0;try{await this.doPushCycle(1)}finally{this.pushInFlight=!1,this.schedulePush()}}}async doPushCycle(e=0){let t=this.gatherContentFilesSync(),n=z(cu(),`ok-sync-idx-${process.pid}-${Date.now()}.idx`),r=null;this.transitionTo(`pushing`);try{await _s(async()=>{let e=this.gitHandle(n);if(l9(this.projectDir)){a9.info({},`[sync] repo has no commits yet — skipping push cycle`),this.transitionTo(`idle`);return}let i;try{i=(await e.git.revparse(`HEAD`)).trim()}catch(e){let t=e instanceof Error?e.message:String(e),n=`${t}\n${e.git?.toString()??t}`;if(/unknown revision or path not in the working tree/i.test(n)||/ambiguous argument 'HEAD'/i.test(n)||/does not have any commits yet/i.test(n)){a9.info({},`[sync] repo has no commits yet — skipping push cycle`),this.transitionTo(`idle`);return}this.handleError(e9(e instanceof Error?e:Error(String(e))),`push`);return}await e.git.raw([`read-tree`,i]);let a=await this.listHeadContentPaths(e,i);if(t.length>0)for(let n=0;n<t.length;n+=100){let r=t.slice(n,n+100).map(e=>e.projectRelPath);await e.git.raw([`add`,`--`,...r])}let o=new Set(t.map(e=>e.projectRelPath)),s=[...a].filter(e=>!o.has(e));await this.removePathsFromIndex(e,s);let c=(await e.git.raw([`write-tree`])).trim(),l=``;try{l=(await e.git.raw([`rev-parse`,`${i}^{tree}`])).trim()}catch{}if(l&&l===c){let n=null;try{n=(await e.git.raw([`rev-parse`,`origin/${this.currentBranch}`])).trim()}catch{}if(n===i){a9.info({contentFileCount:t.length,headSha:i},`[sync] push cycle: nothing to commit (tree unchanged, origin matches HEAD)`),this.lastPushedSha=i,this.lastSyncUtc=new Date().toISOString(),this.clearPushError(),this.transitionTo(`idle`);return}a9.info({headSha:i,upstreamSha:n},`[sync] push cycle: tree unchanged but local ahead of origin — pushing existing commits`);let a=!1;try{await e.git.raw([`rev-parse`,`--abbrev-ref`,`${this.currentBranch}@{u}`]),a=!0}catch{}a?await e.git.raw([`push`,`origin`,this.currentBranch]):await e.git.raw([`push`,`--set-upstream`,`origin`,this.currentBranch]),r=i;return}let u=[],d=[];try{let n=await aS(e.git,[`diff-tree`,`--name-only`,`-r`,i,c]);if(n.length>0){let e=new Map(t.map(e=>[e.projectRelPath,e.contentRelPath]));for(let t of n){u.push(t);let n=e.get(t)??wj(B(this.contentDir,z(this.projectDir,t)));n&&!n.startsWith(`..`)&&d.push(n)}}}catch{u=t.map(e=>e.projectRelPath).concat(s),d=t.map(e=>e.contentRelPath)}let f=this.buildCommitMessage(d),p=await $U(this.projectDir),m=p===null;this.identityUnresolved!==m&&(this.identityUnresolved=m,this.cc1Broadcaster?.signal(`sync-status`));let h=p?.name??`OpenKnowledge`,g=p?.email??`sync@open-knowledge.local`;xs(e,{GIT_AUTHOR_NAME:h,GIT_AUTHOR_EMAIL:g,GIT_COMMITTER_NAME:h,GIT_COMMITTER_EMAIL:g});let _=(await e.git.raw([`commit-tree`,c,`-p`,i,`-m`,f])).trim();if(!_||!o9.test(_)){a9.warn({raw:_},`[sync] commit-tree returned invalid SHA — aborting push`),this.transitionTo(`idle`);return}await e.git.raw([`update-ref`,`refs/heads/${this.currentBranch}`,_,i]),await this.resetRealIndexForPaths(u);let v=!1;try{await e.git.raw([`rev-parse`,`--abbrev-ref`,`${this.currentBranch}@{u}`]),v=!0}catch{}v?await e.git.raw([`push`,`origin`,this.currentBranch]):await e.git.raw([`push`,`--set-upstream`,`origin`,this.currentBranch]),r=_}),r&&(this.lastPushedSha=r,this.lastSyncUtc=new Date().toISOString(),this.ahead=0,this.clearPushError(),this.state===`pushing`&&this.transitionTo(`idle`),this.pausedReason===`dirty-tree`&&(this.pausedReason=void 0,this.clearPullError(),this.schedulePull(0)))}catch(t){let n=e9(t instanceof Error?t:Error(String(t)));if(n.class===`semantic`&&n.subclass===`non-fast-forward`){if(e>0){a9.info({},`[sync] push rejected (non-fast-forward) — fetching, merging, retrying`);let e=this.gitHandle();this.setBatchInProgress?.(!0);try{await e.git.fetch(`origin`),await this.commitDirtyContentFilesToHead(e);let t=await this.prepareForMerge(e,this.currentBranch);if(!t.proceed){this.setBatchInProgress?.(!1);return}try{await e.git.merge([`origin/${this.currentBranch}`])}finally{t.needsStashPop&&await this.popPreMergeStash(e)}}catch(e){let t=e9(e instanceof Error?e:Error(String(e)));t.class===`semantic`&&t.subclass===`merge-conflict`?await this.handleMergeConflict():this.handleError(t,`pull`),this.scheduleSaveState();return}finally{this.setBatchInProgress?.(!1)}await this.doPushCycle(0);return}a9.info({},`[sync] push still rejected after retry — waiting for next pull cycle`),this.consecutiveFailures++,this.state===`pushing`&&this.transitionTo(`idle`)}else this.handleError(n,`push`)}finally{try{eu(n)}catch{}}this.scheduleSaveState()}async commitDirtyContentFilesToHead(e){if((await e.git.status()).files.length===0)return null;let t=(await e.git.revparse(`HEAD`)).trim(),n=this.gatherContentFilesSync(),r=await this.listHeadContentPaths(e,t);if(n.length===0&&r.size===0)return null;let i=z(cu(),`ok-sync-retry-idx-${process.pid}-${Date.now()}.idx`),a=this.gitHandle(i);try{await a.git.raw([`read-tree`,t]);for(let e=0;e<n.length;e+=100){let t=n.slice(e,e+100).map(e=>e.projectRelPath);await a.git.raw([`add`,`--`,...t])}let i=new Set(n.map(e=>e.projectRelPath)),o=[...r].filter(e=>!i.has(e));await this.removePathsFromIndex(a,o);let s=(await a.git.raw([`write-tree`])).trim();if(s===(await a.git.raw([`rev-parse`,`${t}^{tree}`])).trim())return null;let c=[];try{c=await aS(a.git,[`diff-tree`,`--name-only`,`-r`,t,s])}catch{c=n.map(e=>e.projectRelPath).concat(o)}let l=await $U(this.projectDir),u=l?.name??`OpenKnowledge`,d=l?.email??`sync@open-knowledge.local`;xs(a,{GIT_AUTHOR_NAME:u,GIT_AUTHOR_EMAIL:d,GIT_COMMITTER_NAME:u,GIT_COMMITTER_EMAIL:d});let f=(await a.git.raw([`commit-tree`,s,`-p`,t,`-m`,`Auto-save: interim before merge`])).trim();return!f||!o9.test(f)?(a9.warn({raw:f},`[sync] commit-tree returned invalid SHA in commitDirtyContentFilesToHead`),null):(await e.git.raw([`update-ref`,`refs/heads/${this.currentBranch}`,f,t]),await this.resetRealIndexForPaths(c,e),f)}finally{try{eu(i)}catch{}}}async prepareForMerge(e,t){let n;try{n=await aS(e.git,[`diff-index`,`--name-only`,`HEAD`])}catch(e){return a9.warn({err:e,branch:t},`[sync] diff-index failed — allowing merge attempt`),{proceed:!0,needsStashPop:!1}}if(n.length===0)return{proceed:!0,needsStashPop:!1};let r;try{r=new Set(await aS(e.git,[`diff`,`--name-only`,`HEAD..origin/${t}`]))}catch(e){return a9.warn({err:e,branch:t},`[sync] merge-path diff failed — allowing merge attempt`),{proceed:!0,needsStashPop:!1}}let i=n.filter(e=>r.has(e));if(i.length>0){let e=i.slice(0,3).join(`, `),t=i.length>3?`, +${i.length-3} more`:``;return this.pullErrorCode=void 0,this.pullError=`Sync paused — your local changes to ${e}${t} conflict with incoming changes. Commit, stash, or discard them before syncing.`,this.pausedReason=`external-changes-pending`,this.consecutiveFailures=0,this.transitionTo(`idle`),this.scheduleSaveState(),a9.warn({files:i},`[sync] paused — dirty paths overlap incoming merge`),{proceed:!1,needsStashPop:!1}}let a=`ok-sync: pre-merge stash @ ${new Date().toISOString()}`;try{await e.git.raw([`stash`,`push`,`-m`,a])}catch(e){return a9.warn({err:e},`[sync] stash push failed — proceeding without stash`),{proceed:!0,needsStashPop:!1}}return{proceed:!0,needsStashPop:!0}}async popPreMergeStash(e){try{await e.git.raw([`stash`,`pop`])}catch(e){a9.warn({err:e},`[sync] stash pop failed — stash remains on stack`)}}gatherContentFilesSync(){let e=[],t=n=>{let r;try{r=Jl(n,{withFileTypes:!0})}catch{return}for(let i of r){let r=z(n,i.name);if(i.isDirectory()){let e=wj(B(this.contentDir,r));if(!e.startsWith(`..`)&&this.contentFilter.isDirExcluded(e))continue;t(r)}else if(i.isFile()||i.isSymbolicLink()){let t=wj(B(this.contentDir,r));if(!t.startsWith(`..`)&&!this.contentFilter.isExcluded(t)){let n=wj(B(this.projectDir,r));e.push({contentRelPath:t,projectRelPath:n})}}}};return H(this.contentDir)&&t(this.contentDir),e}async listHeadContentPaths(e,t){let n=new Set;try{let r=await aS(e.git,[`ls-tree`,`-r`,`--name-only`,t]);for(let e of r){let t=z(this.projectDir,e),r=wj(B(this.contentDir,t));!r.startsWith(`..`)&&!this.contentFilter.isExcluded(r)&&n.add(e)}}catch{}return n}async removePathsFromIndex(e,t){if(t.length===0)return;let n=[...new Set(t)];for(let t=0;t<n.length;t+=100){let r=n.slice(t,t+100);await e.git.raw([`rm`,`--cached`,`--`,...r])}}async resetRealIndexForPaths(e,t){if(e.length===0)return;let n=t??this.gitHandle(),r=[...new Set(e)];for(let e=0;e<r.length;e+=100){let t=r.slice(e,e+100);try{await n.git.raw([`reset`,`HEAD`,`--`,...t])}catch{}}}buildCommitMessage(e){return e.length===0?`Auto-save: changes saved`:e.length<=3?`Auto-save: Updated ${e.join(`, `)}`:`Auto-save: ${e.length} files changed`}async handleMergeConflict(){let e=this.gitHandle(),t=[];try{t=await aS(e.git,[`diff`,`--name-only`,`--diff-filter=U`])}catch(t){a9.error({err:t},`[sync] failed to list conflicted files — aborting merge to avoid committing unresolved state`);try{await e.git.raw([`merge`,`--abort`])}catch(e){a9.warn({err:e},`[sync] git merge --abort failed during cleanup`)}this.pullErrorCode=void 0,this.pullError=`Failed to detect conflict files — merge aborted`,this.pausedReason=void 0,this.transitionTo(`idle`);return}let n=[],r=[];for(let e of t){let t=z(this.projectDir,e),i=wj(B(this.contentDir,t));!i.startsWith(`..`)&&eC(i)&&!this.contentFilter.isExcluded(i)?n.push(e):r.push(e)}let i=[];for(let t of r)try{await e.git.raw([`checkout`,`--theirs`,`--`,t]),await e.git.raw([`add`,`--`,t]),a9.info({file:t},`[sync] auto-resolved non-content conflict with theirs`)}catch(e){a9.warn({err:e,file:t},`[sync] non-content auto-resolve failed — will abort merge and pause sync`),i.push({file:t,err:e})}if(i.length>0){let t=i.map(e=>e.file);try{await e.git.raw([`merge`,`--abort`])}catch(e){a9.warn({err:e,files:t},`[sync] git merge --abort failed during non-content cleanup`)}let n=t.slice(0,3).join(`, `),r=t.length>3?`, +${t.length-3} more`:``;this.pullErrorCode=void 0,this.pullError=`Sync paused — couldn't auto-resolve ${n}${r}. Resolve in your terminal (e.g. \`git rm <file>\` or \`git checkout --ours/--theirs <file> && git add <file>\`), then retry sync.`,this.pausedReason=`non-content-merge-failure`,this.consecutiveFailures=0,this.transitionTo(`idle`),this.scheduleSaveState(),a9.warn({files:t},`[sync] non-content auto-resolve failed — merge aborted, sync paused`);return}if(n.length>0){for(let e of n)this.conflictStore.addConflict({file:e,detectedAt:new Date().toISOString()});this.conflictCount=this.conflictStore.count(),await this.notifyContentConflictsDetected(n),this.pullTimer!==null&&(clearTimeout(this.pullTimer),this.pullTimer=null),this.pushTimer!==null&&(clearTimeout(this.pushTimer),this.pushTimer=null),this.transitionTo(`conflict`),a9.warn({files:n},`[sync] content conflicts — sync paused until resolved`)}else{let t=!1;try{await e.git.raw([`commit`,`--no-edit`]);let n=td(this.projectDir);t=n===null||!H(z(n,`MERGE_HEAD`))}catch(e){a9.warn({err:e},`[sync] failed to commit after auto-resolving conflicts`)}if(t)this.lastSyncUtc=new Date().toISOString(),this.behind=0,this.transitionTo(`idle`),a9.info({},`[sync] all conflicts auto-resolved — merge committed`);else{try{await e.git.raw([`merge`,`--abort`])}catch(e){a9.warn({err:e},`[sync] git merge --abort failed during cleanup`)}this.pullError=`Sync paused — could not finalize the merge. Retry sync to try again.`,this.transitionTo(`idle`),a9.warn({},`[sync] could not finalize merge after auto-resolving conflicts — merge aborted`)}}}async notifyContentConflictsDetected(e){if(e.length!==0)try{await this.onContentConflictsDetected?.(e)}catch(t){a9.warn({err:t,files:e},`[sync] content conflict callback failed`)}}async notifyContentConflictsResolved(e){if(e.length!==0)try{await this.onContentConflictsResolved?.(e)}catch(t){a9.warn({err:t,files:e},`[sync] content conflict resolved callback failed`)}}clearPushError(){this.pushError=void 0,this.pushErrorCode=void 0}clearPullError(){this.pullError=void 0,this.pullErrorCode=void 0}handleError(e,t){e.userFacingCode===null?t===`push`?(this.pushErrorCode=void 0,this.pushError=e.message):(this.pullErrorCode=void 0,this.pullError=e.message):t===`push`?(this.pushErrorCode=e.userFacingCode,this.pushError=void 0):(this.pullErrorCode=e.userFacingCode,this.pullError=void 0),a9.warn({class:e.class,subclass:e.subclass,retryable:e.retryable,rawStderr:e.rawStderr},`[sync-error] ${e.message}`),e.class===`auth`?(this.ghTokenSource.invalidate(),this.transitionTo(`auth-error`),this.pausedReason=`auth-error`):e.class===`semantic`&&e.subclass===`protected-branch`?(this.mode=`off`,this.transitionTo(`disabled`),this.pausedReason=`protected-branch`,this.onAutoDisable?.(`protected-branch`)):e.class===`local`&&e.subclass===`dirty-tree`?(this.consecutiveFailures++,this.transitionTo(`idle`),this.pausedReason=`dirty-tree`,this.schedulePush(0)):e.retryable?(this.consecutiveFailures++,this.transitionTo(`offline`)):(this.consecutiveFailures++,this.transitionTo(`idle`))}transitionTo(e){if(this.state===e)return;let t=this.state;this.state=e,a9.info({from:t,to:e},`[sync] state: ${t} → ${e}`),this.onStateChange?.(e),this.cc1Broadcaster?.signal(`sync-status`)}scheduleSaveState(){this.stateSaveTimer===null&&(this.stateSaveTimer=setTimeout(()=>{this.stateSaveTimer=null,this.saveStateNow()},5e3))}saveStateNow(){try{let e=this.pausedReason===`no-push-permission`||this.pausedReason===`auth-error`?void 0:this.pausedReason,t={version:1,lastSyncUtc:this.lastSyncUtc,lastFetchUtc:this.lastFetchUtc,lastPushedSha:this.lastPushedSha,consecutiveFailures:this.consecutiveFailures,pausedReason:e,pausedSinceUtc:e?new Date().toISOString():void 0,inflightConflicts:this.conflictStore.list().map(e=>e.file)};tu(this.statePath,JSON.stringify(t,null,2),`utf-8`)}catch(e){a9.warn({err:e},`[sync] failed to persist sync state`)}}loadState(){if(H(this.statePath))try{let e=U(this.statePath,`utf-8`),t=JSON.parse(e);if(t.version!==1)return;this.lastSyncUtc=t.lastSyncUtc??null,this.lastFetchUtc=t.lastFetchUtc??null,this.lastPushedSha=t.lastPushedSha??null,this.consecutiveFailures=t.consecutiveFailures??0,this.pausedReason=t.pausedReason===`no-push-permission`||t.pausedReason===`auth-error`?void 0:t.pausedReason;let n=t.inflightConflicts??[];if(n.length>0){for(let e of n)this.conflictStore.list().some(t=>t.file===e)||this.conflictStore.addConflict({file:e,detectedAt:new Date().toISOString()});this.conflictCount=this.conflictStore.count()}}catch(e){a9.warn({err:e},`[sync] failed to load sync state`)}}};To();const cCe=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function lCe(){return{async afterLoadDocument({documentName:e,requestParameters:t}){if(fC(e)||pC(e))return;let n=t?.get(`mountId`)??void 0,r={"doc.name":e};n!==void 0&&cCe.test(n)&&(r[`mount.id`]=n);try{let e=()=>{Mo(`sync.handshake`,{attributes:r},()=>{})},n=t?.get(`traceparent`);if(n!=null){let r={traceparent:n},i=t?.get(`tracestate`);i!=null&&(r.tracestate=i),Eo.with(wo.extract(Eo.active(),r),e)}else e()}catch(e){L(`sync-handshake-span`).warn({err:e instanceof Error?e:Error(String(e))},`emission failed`)}}}}let d9=!1;function f9(){if(d9)return;let e=vte;if(typeof e.getCACertificates!=`function`||typeof e.setDefaultCACertificates!=`function`){d9=!0;return}try{e.setDefaultCACertificates([...e.getCACertificates(`default`),...e.getCACertificates(`system`)]),d9=!0}catch(e){L(`trust-system-ca`).warn({err:e},`system CA setup failed; falling back to the bundled CA set`)}}const uCe=(()=>{let e=Object.freeze({origin:`park-snapshot`,paired:!0});return Object.freeze({source:`local`,skipStoreHooks:!1,context:e})})();function dCe(e){return[`-c`,`credential.helper=!${(e&&e.length>0?e:[`open-knowledge`]).map(y8).join(` `)} auth git-credential`]}function fCe(e,t,n,r){let i=new Map;if(!n)return i;let a;try{a=Sl(`git`,[`-c`,`core.quotePath=false`,`log`,`${n}..${r}`,`--no-merges`,`--name-only`,`--format=C%x00%an%x00%ae`],MF({cwd:e,encoding:`utf-8`,timeout:5e3}))}catch(e){return L(`upstream-attribution`).warn({err:e,oldHead:n,newHead:r},`git log spawn threw; upstream docs keep file-system attribution`),i}if(a.error||a.status!==0||typeof a.stdout!=`string`)return L(`upstream-attribution`).warn({err:a.error,status:a.status,signal:a.signal,stderr:typeof a.stderr==`string`?a.stderr.slice(0,500):void 0,oldHead:n,newHead:r},`git log failed; upstream docs keep file-system attribution`),i;let o=null;for(let n of a.stdout.split(`
2027
- `)){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=V(e,r);if(!Dj(a,t))continue;let s=fU(a,t);i.has(s)||H(a)&&i.set(s,o)}return i}function p9(e){f9();let{contentDir:t,projectDir:n=t,quiet:r=!0,debounce:i=2e3,maxDebounce:a=1e4,gitEnabled:o=!0,commitDebounceMs:s=3e4,wipRef:c=`refs/wip/main`,configHomedirOverride:l,enableTestRoutes:u=!1,shadowRepo:d,contentRoot:f,destroyTimeoutMs:p=1e4,localOpCliArgs:m,authStreamHeartbeatMs:h,skipStateManifestCheck:g=!1,singleDocRelPath:_,ephemeral:v=!1}=e,y=L(`server`),x=new c7,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),te=e=>x.setBatchInProgress(e),ne=()=>x.isBatchInProgress();function ie(){let e=No({absPath:Fo(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config`)});if(!e.valid){let t=le(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}`)}y.warn({},`[config] committed content.attachmentFolderPath unavailable (project config invalid) — using default attachment placement`)}return e.value.content.attachmentFolderPath??`./`}function E(){let e=No({absPath:Fo(`project-local`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project-local config`)}),t=b(e.value.autoSync);if(t!==null)return{mode:t,source:`config`};e.valid||y.warn({},`[config] project-local autoSync.mode unavailable (config invalid) — falling back to the committed project default`);let r=No({absPath:Fo(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config`)});return r.valid||y.warn({},`[config] committed autoSync.default unavailable (project config invalid) — defaulting to disabled`),{mode:re(r.value.autoSync?.default)??`off`,source:`committed-default`}}function D(){let e=No({absPath:Fo(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config for linter`)}).value.contentRules;return e?Mn(e):Ze}function ae(){return No({absPath:Fo(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config for link validation`)}).value.validation?.links??`warning`}function O(){return DF(n,{configHomedirOverride:l,onWarn:e=>y.warn({message:e},`[config] could not read project-local config`)})}function oe(){let e=No({absPath:Fo(`project-local`,n,l),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project-local config`)});return e.valid?e.value.linkPreviews?.enabled===!0:!1}function k(){return jo({cwd:n,homedirOverride:l,warn:e=>y.debug({message:e},`[config] diagnostics read`)})}function ce(){for(let e of k().diagnostics)e.code===`REMOVED_KEY`&&y.warn({scope:e.scope,file:e.file,path:e.path.join(`.`)},`[config] ${e.path.join(`.`)} is no longer read and was ignored. ${e.redirect}`)}function ue(e){return`${_F(e.baseUrl)}|${e.model}|${e.dimensions??`auto`}`}function de(e){let t;if(e===`__config__/project`||e===`__local__/project`){let n=E();t=n.mode,dt?.setMode(n.mode,n.source).catch(t=>{y.warn({err:t,mode:n.mode,docName:e},`[sync] failed to apply autoSync mode from config`)})}let n=O();ke.applyConfig({enabled:n.enabled,providerFingerprint:ue(n)}),e===`__config__/project`&&Ce?.signal(`lint-config`),y.info({docName:e,autoSyncMode:t,semanticEnabled:n.enabled},`[config] applied persisted config to in-process consumers`)}as();let fe=Cu(),A=nN(n),pe=new Md({localDir:A,log:L(`acp-registry`)}),j=new Td(A,L(`acp-permissions`));if(Ns(A,{port:e.port??0,worktreeRoot:n,kind:e.lockKind??`interactive`,capabilities:[`http`,`ws`]}),!g)try{Z7({lockDir:A,shadowRepoDir:nd(n)})}catch(e){throw Cs(A),e}let me=Aa(),he=(e,t)=>me.resolveEmbed(e,t),ge=(e,n)=>{let r=me.resolveEmbed(e,n);if(!r&&e.includes(`/`)&&(r=e.replace(/^\.?\//,``)),!r)return null;let i=V(t,r);if(!Tj(i,V(t)))return null;try{let e=$l(i);return e.isFile()?e.size:null}catch{return null}},_e,M,ve,ye,be,N,P,xe,Se,Ce=null,we=null,Te=null,F=null,Ee=null,De=null,Oe=O(),ke=new Nce({loadEmbedder:e.embedderLoader??(()=>{let t=O();return yce({keyStore:e.embeddingsKeyStore??null,projectDir:n,config:{baseUrl:t.baseUrl,model:t.model,dimensions:t.dimensions}})}),cacheDir:z(nN(n),`embeddings`),enabled:Oe.enabled,providerFingerprint:ue(Oe)}),I=null,Ae=new Set,je=!1,Me=[],Ne,Fe,Ie,Le=new Promise((e,t)=>{Fe=e,Ie=t});function Re(e){Ce?.signal(e)}let ze=null,Be=!1,Ve=()=>{try{H7(n,He.entries())}catch(e){y.warn({err:e},`[removed-docs-journal] failed to persist removal journal`)}},He=new SSe(void 0,{onEviction:()=>rae(),onSizeChange:e=>iae(e),onMutate:()=>{!Be||ze!==null||(ze=setTimeout(()=>{ze=null,Ve()},2e3))}});for(let[e,r]of TSe(n))_C(e)||kZ(e)&&([`.md`,`.mdx`].some(n=>{let r=V(t,`${e}${n}`);return Tj(r,V(t))&&H(r)})||He.restore(e,r));Be=!0;let Ue={current:null},We=(e,t)=>{_C(e)||He.setRenamed(e,t)},Ge=e=>{if(!_C(e)){if(He.peek(e)?.kind===`renamed`){console.info(JSON.stringify({event:`recently-removed-docs-unpaired-delete-suppressed`,docName:e,source:`watcher-delete`}));return}He.setDeleted(e),Ue.current?.deleted(e)}},Ke=e=>{_C(e)||He.delete(e)};try{_e=XI({projectDir:n,contentDir:t,singleDocRelPath:_,inPlaceSkillDirs:cV(t),rescanInPlaceSkillDirs:()=>cV(t),onAfterRebuild:()=>{M.refreshContentScope().catch(e=>{L(`server-factory`).warn({err:e},`[content-filter] derived-index rebuild failed after onAfterRebuild`)}),FU(lt).then(({prunedFiles:e,prunedFolders:t})=>{let n=e+t;n>0?L(`server-factory`).info({pruned:n,prunedFiles:e,prunedFolders:t},`[content-filter] reconciled file indexes after onAfterRebuild`):L(`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=>{L(`server-factory`).warn({err:e},`[content-filter] file index reconcile failed after onAfterRebuild`)})}}),M=new kH({projectDir:n,contentDir:t,contentFilter:_e,getGlobalSkillRoots:()=>wK(be.managedArtifactCtx),signalChannel:Re}),ve={current:d},ye=o?uSe({getShadow:()=>ve.current??null,getCurrentBranch:()=>ut?.getLastKnownBranch()??null,contentRoot:f??``,projectGitDir:td(n)??void 0,isWriterLive:e=>{if(!F&&!xe)return L(`server-factory`).debug({writerId:e},`[server-factory] isWriterLive called before liveness deps populated — treating writer as dead`),!1;if(F?.getPresenceMap()[e])return!0;let t=e.startsWith(`agent-`)?e.slice(6):e;for(let e of xe?.sessionsForConnection(t)??[])return!0;return!1}}):void 0,be=F7({contentDir:t,projectDir:n,gitEnabled:o,commitDebounceMs:s,wipRef:c,shadowRef:ve,ephemeral:v,contentRoot:f,derivedDocumentIndex:M,configHomedirOverride:l,getCurrentBranch:()=>ut?.getLastKnownBranch()??null,resolveEmbed:he,resolveSize:ge,getPrincipal:()=>I,onAgentCommit:()=>Ce?.signal(`session-activity`),onFlushCommit:()=>ye?.noteFlushCommit(),onDiskFlush:(e,t,n,r)=>{Ce?.emitDiskAck(e,t),!_C(e)&&Qj(r,n)&&(Ee?.(),Re(`files`))},onConfigRejected:(e,t)=>Ce?.emitConfigValidationRejected(e,t),onConfigPersisted:de,isRecentlyRemoved:e=>He.has(e),mdManager:e.mdManager,getLossRing:()=>N,durabilityState:x}),P=new Exe({quiet:r,debounce:i,maxDebounce:a,extensions:[be.extension]});let p=P;Me.push(ooe(()=>p.documents.size),soe(()=>be.getQueueDepths()),loe(()=>{let e=0;for(let t of p.documents.values())e+=t.directConnectionsCount;return{websocket:p.getConnectionsCount()-e,direct:e}})),doe(),v||(De=bSe({getLoadedDocuments:()=>p.documents,forceStore:(e,t)=>be.forceStore(e,t),getBase:e=>x.getReconciledBase(e),isBatchActive:()=>x.isBatchInProgress(),peekInFlight:e=>x.peekInFlightFlush(e),readDiskBytes:e=>{let n=Ej(e,t),r,i;try{r=W(n),i=$l(r).size}catch(t){let n=Is(t);if(n===`ENOENT`)return null;throw n===`ELOOP`?new L7(`symlink cycle at content path: ${e}`):t}if(!Dj(r,t))throw new L7(`symlink-escape: ${n} resolves outside the content dir`);if(i>524288)throw new L7(`document exceeds the open byte limit: ${e}`);try{return U(r,`utf-8`)}catch(e){if(Is(e)===`ENOENT`)return null;throw e}},graceMs:e.stalenessGraceMs,sweepIntervalMs:e.stalenessSweepIntervalMs}));let g=P.shouldUnloadDocument.bind(P);P.shouldUnloadDocument=e=>{if(Ae.has(e)||je&&g(e))return!0;let t=e.name;return _C(t)||C(t)!==void 0||e.getXmlFragment(`default`).length!==0||e.getText(`source`).length!==0?!1:g(e)},Ne=async e=>{Ae.add(e);try{await P.unloadDocument(e)}finally{Ae.delete(e)}},Ce=new bC(P),Te=new gD(P),F=new _D(P),xe=new eE(P);let b=xe;Me.push(uoe(()=>({active:b.liveSessionCount,limit:b.sessionLimit})));let w=f7({derivedDocumentIndex:M,onDocumentSettled:e=>Ue.current?.changed(e)});P.configuration.extensions.push(w),P.configuration.extensions.push({__kind:`principal-auth`,async onAuthenticate(e){let t=e.token,n=VZ(t),r=n?.expectedServerInstanceId;if(typeof r==`string`&&r.length>0&&r!==fe)throw new BZ(`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 BZ(`branch-mismatch`,`branch mismatch: client claimed ${i}, server is on ${a}`);if(!n)return;let o=e.context;typeof n.principalId==`string`&&(I&&n.principalId===I.id?o.principalId=I.id:I?console.warn(JSON.stringify({event:`principal-token-mismatch`,claimed:n.principalId,loaded:I.id})):o.principalId=n.principalId),typeof n.tabSessionId==`string`&&(o.tabSessionId=n.tabSessionId),o.kind=`human`}}),P.configuration.extensions.push({__kind:`config-doc-admission-guard`,async onAuthenticate(t){if(!pC(t.documentName)&&!mC(t.documentName))return;let n=t.request,r=n.socket?.remoteAddress;if(r!==void 0&&!fj(r))throw Error(`config-doc admission requires loopback peer (peer=${r}, doc=${t.documentName})`);let i=t.requestHeaders,a=(i&&typeof i.get==`function`?i.get(`host`):null)??n.headers?.host??void 0,o=e.remotePublicHost!==void 0&&vj(a,e.remotePublicHost);if(!pj(a)&&!o)throw Error(`config-doc admission requires a loopback or remote Host header (host=${a??`<absent>`}, doc=${t.documentName})`)}});let T=V(t);function ee(e){if(!kZ(e))return null;let t=V(T,lC(e));return Tj(t,T)?t:null}P.configuration.extensions.push({__kind:`removal-redirect-guard`,async onAuthenticate(e){await CSe(e.documentName,{recentlyRemovedDocs:He,resolveFilePath:ee,fileExists:H})}}),P.configuration.extensions.push({__kind:`doc-lineage-guard`,async onAuthenticate(e){let t=VZ(e.token);Hxe(e.documentName,t?.expectedDocLineageEpoch,{getLoadedDoc:e=>P.documents.get(e)})}}),P.configuration.extensions.push({__kind:`system-doc-broadcast-guard`,async beforeHandleMessage(e){if(e.documentName!==`__system__`)return;let t=new E5(e.update);if(t.readVarString(),t.readVarUint()===L5.BroadcastStateless)throw Error(`inbound BroadcastStateless on ${za} rejected — server-only channel`)}});let te=jZ({hocuspocus:P,durabilityState:x,remotePublicHost:e.remotePublicHost,sessionManager:xe,commentDocHooksRef:Ue,contentDir:t,contentFilter:_e,serverInstanceId:fe,getFileIndex:()=>lt?lt.getFileIndex():new Map,getAttachmentFolderPath:ie,getAllFilesIndex:()=>lt?lt.getAllFilesIndex():new Map,getFileIndexGeneration:()=>lt?.getFileIndexGeneration()??0,mutateFileIndex:e=>lt?.mutateFileIndex(e),getFolderIndex:()=>lt?lt.getFolderIndex():new Map,getAliasMap:()=>lt?lt.getAliasMap():new Map,getFolderAliasIndex:()=>lt?lt.getFolderAliasIndex():new Map,rescanFiles:()=>lt?.rescanFromDisk(),enableTestRoutes:u,shadowRef:ve,flushGitCommit:()=>be.flushPendingGitCommit(),flushContributors:()=>be.flushContributors(),getCurrentBranch:()=>ut?.getLastKnownBranch()??null,getDiskAckSVs:()=>Ce?.getLatestDiskAckSVsAsBase64()??{},contentRoot:f,derivedDocumentIndex:M,signalChannel:Re,agentFocusBroadcaster:Te,agentPresenceBroadcaster:F,onAgentWrite:e.onAgentWrite,getSyncEngine:()=>dt,localOpCliArgs:m,authStreamHeartbeatMs:h,projectDir:n,resolveEmbed:he,getBridgeLossReporter:()=>Se,getPrincipal:()=>I,acpRegistry:pe,loadAcpCustomAgents:()=>Nd(A,L(`acp-registry`)),homeDirOverride:l,forceUnloadDocument:Ne,ready:Le,recentlyRemovedDocs:He,serializeDoc:Qe,evictManagedArtifactLkg:e=>{be.managedArtifactCtx.lkgCache.delete(e)},semanticSearch:ke,getSemanticSimilarityFloor:()=>O().similarityFloor,getLinterBaseConfig:()=>D(),getLinksValidationSetting:()=>ae(),getLinkPreviewsEnabled:oe,getConfigDiagnostics:k,embeddingsSecretsFile:wF(l),readSemanticProviderConfig:O,ephemeral:v,onReferencedAssetsCacheInvalidator:e=>{Ee=e}});P.configuration.extensions.push(te);let ne=No({absPath:Fo(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config for bridge guards`)}),re=ne.value.bridge.deferGuard.enabled,E=ne.value.bridge.fixedPoint.enabled,se=ne.value.bridge.preDrain.enabled;N=ne.value.lossCapture.enabled?new Kre({projectDir:n,maxBytes:ne.value.lossCapture.maxBytes}):void 0,ne.value.bridge.lossDetector.enabled&&(Se=Lae({shadow:()=>ve.current,ring:N,getBranch:()=>ut?.getLastKnownBranch()??`main`,contentRoot:f??``}),xe.attachBridgeLossReporter(Se)),P.configuration.extensions.push(W7({mdManager:Oo,schema:Do,shadowRef:ve,contentRoot:f,getCurrentBranch:()=>ut?.getLastKnownBranch()??null,resolveEmbed:he,resolveSize:ge,deferGuardEnabled:re,lossDetectorEnabled:ne.value.bridge.lossDetector.enabled,fixedPointBackstopEnabled:E,preDrainEnabled:se,lossRing:N})),P.configuration.extensions.push(lCe()),P.configuration.extensions.push(Vxe({getSyncEngine:()=>dt,projectDir:n,contentDir:t}))}catch(e){for(let e of Me.splice(0))e();throw De?.dispose(),De=null,Cs(A),e}let qe=null,Je=new Map,Ye=[];function Xe(e,t){let n=V(e,`rescue`),r=V(n,lC(t));return Tj(r,n)?r:null}function Qe(e){let t=P.documents.get(e);return t?HH(t):null}let $e=(e,t)=>zH(x,P,e,t,he,ge,Se);function et(e){if(!AC(e)||dt?.getConflicts().some(r=>s7(r,e.name,n,t)))return;let r=e.getMap(`lifecycle`);r.delete(`status`),r.delete(`reason`)}let tt=e=>{if(!e)return;let t=`[[${e}]]`;for(let[n]of P.documents){if(_C(n))continue;let r=P.documents.get(n);if(!r)continue;let i=r.getText(`source`).toString();if(i.includes(t))try{r.transact(()=>{jH(r,i,he,n)},AH)}catch(t){y.error({err:t,docName:n,assetBasename:e},`[asset-event] failed to re-render ${n} for asset basename ${e}`)}}},nt=null,rt=e=>{e&&(nt===null&&(nt=new Set,setImmediate(()=>{let e=nt;if(nt=null,e)try{for(let t of e)tt(t)}catch(t){y.error({err:t,basenames:[...e]},`[asset-event] dedup rerender pass crashed`)}})),nt.add(e))};function it(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 JH(e)}}async function at(e){try{switch(e.kind){case`create`:y.info({docName:e.docName},`[reconcile] create: ${e.docName}`),await M.recordDiskUpsert(e.docName,e.content),Re(`files`),Ke(e.docName);break;case`update`:{let{docName:t,content:n}=e,r=P.documents.get(t);if(!r){await M.recordDiskUpsert(t,n);return}let i=C(t)??``,a=Qe(t)??i,o=FH({docName:t,base:i,ours:a,theirs:n}),s=tU(i).slice(0,6),c=tU(a).slice(0,6),l=tU(n).slice(0,6);switch(y.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`:et(r),await M.recordDiskUpsert(t,n);break;case`clean`:{let e=!1;try{$e(t,o.newContent),w(t,o.newContent),oS(),et(r),e=!0}catch(e){y.error({err:e,docName:t},`[reconcile] failed to apply clean content to Y.Doc for ${t}`),w(t,n),et(r)}e&&await M.recordDiskUpsert(t,n)}break;case`merged`:{let e=!1;try{$e(t,o.newContent),w(t,n),oS(),et(r),e=!0}catch(e){y.error({err:e,docName:t},`[reconcile] failed to apply merged content to Y.Doc for ${t}`),w(t,n),et(r)}e&&await M.recordDiskUpsert(t,n)}break;case`conflicts`:{let e=!1;try{$e(t,o.newContent),w(t,o.newContent),oS(),sS(),e=!0}catch(e){y.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`)}e&&await M.recordDiskUpsert(t,n);break}case`refused`:{sS();let e=r.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,o.reason);break}}break}case`delete`:{let{docName:t}=e,n=P.documents.get(t);if(!n){await M.recordDiskDelete(t),Re(`files`),Ge(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));return}let r=C(t)??``,i=Qe(t)??``,a=i!==r;if(a&&ve.current){let e=ve.current,n=ut?.getLastKnownBranch()??`main`;queueMicrotask(()=>{qS(e,f??``,{kind:`external-change-rescue`,docName:t,contents:i,label:`External change recovered @ ${new Date().toISOString()}`,branch:n,metadata:{incomingDiskSha:``}}).then(()=>{lS(),y.info({docName:t},`[reconcile] rescue checkpoint saved (delete): ${t}`)}).catch(e=>{y.error({docName:t,err:e},`[reconcile] rescue checkpoint write failed: ${t}`)})})}n.getMap(`lifecycle`).set(`status`,`deleted-upstream`),T(t),await M.recordDiskDelete(t),y.info({docName:t,isDirty:a},`[reconcile] delete: ${t} (dirty=${a})`),P.closeConnections(t),await Ne(n),Re(`files`),Ge(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));break}case`rename`:{let{oldDocName:t,newDocName:n,content:r}=e,i=P.documents.get(t);if(T(t),w(n,r),await M.recordDiskRename(t,n,r),i){let e=i.getMap(`lifecycle`);e.set(`status`,`renamed`),e.set(`newPath`,n)}y.info({oldDocName:t,newDocName:n},`[reconcile] rename: ${t} → ${n}`),Re(`files`),We(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=P.documents.get(t);if(!n)return;let r=Qe(t);r===null?y.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`),y.info({docName:t},`[reconcile] conflict markers detected: ${t}`);break}case`asset-create`:me.add(e.relativePath),Re(`files`),rt(wl(e.relativePath));break;case`asset-delete`:me.remove(e.relativePath),Re(`files`),rt(wl(e.relativePath));break;case`folder-create`:case`folder-delete`:Re(`files`);break;case`file-create`:case`file-update`:case`file-delete`:Re(`files`);break;default:JH(e)}}catch(t){let n=it(e);y.error({err:t,kind:e.kind,label:n},`[reconcile] failed to handle ${e.kind} for ${n}`)}}let ot=[];async function st(e){if(ne()){ot.push(e);return}await at(e)}async function ct(){let e=ot.splice(0,ot.length);for(let t of e)await at(t)}let lt=null,ut=null,dt=null,ft=null;async function pt(e){if(P.documents.size===0)return;let t=!1,n=new Promise(e=>{P.configuration.extensions.push({async afterUnloadDocument({instance:n}){!t&&n.getDocumentsCount()===0&&(t=!0,e())}})}),r=Array.from(P.documents.keys());P.closeConnections(),P.flushPendingStores();for(let e of P.documents.values())e.getConnectionsCount()===0&&P.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(P.documents.keys()),i=[],o=[];if(ve.current){for(let e of n)if(!_C(e))try{let t=Qe(e);if(t===null){y.warn({docName:e},`[rescue] skipping ${e} — document dropped from map mid-rescue`),o.push(e);continue}let n=Xe(ve.current.gitDir,e);if(!n){y.warn({docName:e,gitDir:ve.current.gitDir},`[rescue] path-traversal guard rejected docName: ${e}`),o.push(e);continue}Ul(R(n),{recursive:!0}),tu(n,t,`utf-8`),lS(),i.push(e),y.info({docName:e},`[rescue] rescue buffer saved on flush timeout: ${e}`)}catch(t){o.push(e),y.error({err:t,docName:e},`[rescue] failed to write rescue buffer for ${e}`)}}else y.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 mt(){return ft||(ft=(async()=>{let e=Date.now(),t=[];je=!0;for(let e of Me.splice(0))e();try{await De?.dispose()}catch(e){y.warn({err:e},`[server] staleness watchdog drain failed during destroy`)}De=null;try{Ps(A)}catch(e){y.warn({err:e},`[server] failed to mark server.lock draining`)}if(ze!==null&&(clearTimeout(ze),ze=null),Be)try{H7(n,He.entries())}catch(e){y.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([Le.then(()=>`completed`,e=>(y.debug({err:e},`[server] init incomplete during shutdown`),`failed`)),new Promise(e=>{r=setTimeout(()=>e(`timeout`),5e3)})]);r!==void 0&&clearTimeout(r),i===`timeout`&&y.warn({},`[server] init did not complete within 5s during shutdown`);let a=P.documents.size;ye?.destroy();try{try{try{we&&=(clearTimeout(we),null),ut&&=(await ut.unsubscribe(),null),lt&&=(await lt.unsubscribe(),null);for(let{docName:e,cleanup:t}of Ye)try{await t()}catch(t){y.warn({err:t,docName:e},`[server] failed to stop config-file-watcher for ${e}`)}Ye.length=0}catch(e){t.push({phase:`watcher-unsubscribe`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-1 watcher unsubscribe failed`)}try{Ce?.destroy(),F?.destroy(),qe&&=(await qe.disconnect(),null);for(let[e,t]of Je)try{await t.disconnect()}catch(t){y.warn({err:t,docName:e},`[server] failed to disconnect ${e} during shutdown`)}Je.clear()}catch(e){t.push({phase:`cc1-teardown`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-1b CC1 teardown failed`)}try{await xe.closeAll()}catch(e){t.push({phase:`agent-session-drain`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-2 agent session drain failed`)}try{await dw()}catch(e){t.push({phase:`parse-pool-teardown`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-2b parse pool teardown failed`)}try{await pt(p)}catch(e){t.push({phase:`flush-all-stores`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-3 flush failed`)}M.close();let e;try{await Promise.race([(async()=>{await be.flushPendingGitCommit(),await be.waitForPendingCommits()})(),new Promise((t,n)=>{e=setTimeout(()=>n(Error(`L2 git flush timeout`)),p)})])}catch(e){t.push({phase:`git-commit-flush`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-4 git commit flush failed`)}finally{e!==void 0&&clearTimeout(e)}try{dt&&=(await dt.destroy(),null)}catch(e){t.push({phase:`sync-engine-stop`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown sync-engine-stop failed`)}}finally{if(ve.current){try{let e=(await gs({baseDir:n,timeout:{block:5e3}}).revparse(`HEAD`)).trim();e&&tu(V(ve.current.gitDir,`last-known-head`),e,`utf-8`)}catch{}try{vae(ve.current)}catch(e){t.push({phase:`shadow-repo-release`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-5 destroyShadowRepo failed`)}}let r=Date.now()-e;t.length===0?y.info({documentCount:a,durationMs:r},`[server] shutdown flushed ${a} documents in ${r}ms`):y.warn({documentCount:a,durationMs:r,phaseErrors:t},`[server] shutdown flushed ${a} documents in ${r}ms with ${t.length} phase error(s)`)}}finally{try{Cs(A,{deferUnlinkToExit:!0})}catch(e){t.push({phase:`server-lock-release`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-6 releaseServerLock failed`)}try{await is()}catch(e){t.push({phase:`telemetry-shutdown`,error:e instanceof Error?e.message:String(e)})}}})(),ft)}let ht=[];async function gt(){try{I=await R7(n),y.info({principalId:I.id},`[server] principal loaded`)}catch(e){y.warn({err:e},`[server] principal load failed — browser writes will use SERVICE_WRITER`)}if(!ve.current)try{ve.current=await NS(n),y.info({gitDir:ve.current.gitDir},`[server] history repo initialized at ${ve.current.gitDir}`)}catch(e){y.error({err:e},`[server] history repo init failed`),ht.push(`shadow-repo`)}if(ve.current){let e=null;try{e=mq(ve.current.gitDir),Lq(ve.current.gitDir,e),yq(ve.current.gitDir,e),y.info({entries:e.byTo.size},`[server] rename log loaded (${e.byTo.size} entries)`)}catch(e){y.warn({err:e},`[rename-log] boot-time load/sweep failed; rename history unavailable`)}if(e){let t=1e4;try{await Promise.race([Rq(ve.current,e,{rebuild:!0}),new Promise((e,n)=>setTimeout(()=>n(Error(`boot-time GC exceeded ${t}ms`)),t))])}catch(e){y.warn({err:e},`[rename-log] boot-time GC/rebuild failed; index loaded without GC`)}}try{await ye?.runBootMaintenance()}catch(e){y.warn({err:e},`[shadow-maintenance] boot maintenance failed (non-fatal)`)}}if(ve.current)try{await jS(ve.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`)){y.warn({},`[server] history repo appears corrupted — reinitializing`);try{ve.current=await NS(n)}catch(e){y.error({err:e},`[server] history repo reinit failed`),ve.current=void 0,ht.includes(`shadow-repo`)||ht.push(`shadow-repo`)}}else y.error({err:e},`[server] history repo check failed (transient?)`)}if(ve.current)try{let e=V(ve.current.gitDir,`last-known-head`),t=null;try{t=U(e,`utf-8`).trim()||null}catch{}let r=null;try{r=(await gs({baseDir:n,timeout:{block:1e4}}).revparse(`HEAD`)).trim()||null}catch{}if(r!==null){if(r!==t){let e=`main`;try{let t=(await gs({baseDir:n,timeout:{block:1e4}}).raw(`rev-parse`,`--abbrev-ref`,`HEAD`)).trim();t&&t!==`HEAD`&&(e=t)}catch{}y.info({lastKnownHead:t,currentHead:r,branch:e},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${r}, action=import`);try{await WS(ve.current,f??``,t,r,e),cS()}catch(e){y.warn({err:e},`[head-drift] commitUpstreamImport failed — continuing`)}}else y.info({currentHead:r},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${r}, action=noop`);try{tu(e,r,`utf-8`)}catch(e){y.warn({err:e},`[head-drift] failed to write last-known-head`)}}}catch(e){y.warn({err:e},`[head-drift] check failed — continuing`)}try{let e=eq(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;y.warn({journalVersion:e.journal.version,fromPath:t,toPath:n,restoredDocNames:e.restoredDocNames},`[managed-rename] recovered pending rename ${t} -> ${n}`)}}catch(e){y.error({err:e},`[server] managed rename recovery failed`),ht.push(`managed-rename-recovery`)}try{let e=OV(n);(e.deleted>0||e.errors>0)&&y.info({scanned:e.scanned,deleted:e.deleted,errors:e.errors},`[upload-tempfile-sweep] swept ${e.deleted} orphan tempfile(s)`)}catch(e){y.error({err:e},`[server] upload-tempfile sweep failed`),ht.push(`upload-tempfile-sweep`)}try{qe=await P.openDirectConnection(za),Ce?.emitServerInfo(fe,S())}catch(e){y.error({err:e},`[server] failed to open __system__ direct connection — CC1 push disabled`),ht.push(`cc1-push`)}let r=v?[]:Sn;for(let e of r)try{let t=await P.openDirectConnection(e);Je.set(e,t)}catch(t){y.error({err:t,docName:e},`[server] failed to open ${e} direct connection — config bind degraded`),ht.push(`config-doc:${e}`)}let i=new Map([[$r,Fo(`project`,n)],[Ga,Fo(`project-local`,n)],[da,Fo(`user`,n,l)]]);for(let e of r){let t=i.get(e);if(t)try{y.info({docName:e,path:t},`[config-file-watcher] starting`);let n=await X5(t,t=>{let n=P.documents.get(e);y.info({docName:e,hasDocument:n!==void 0,contentLength:t.length},`[config-file-watcher] file changed`);let r=o7(n??null,e,t,be.configPersistenceCtx);y.info({docName:e,outcome:r},`[config-file-watcher] applyExternalConfigChange outcome`),de(e)});Ye.push({docName:e,cleanup:n}),y.info({docName:e,path:t},`[config-file-watcher] started`)}catch(n){y.warn({err:n,docName:e,path:t},`[config-file-watcher] failed to start for ${e}`),ht.push(`config-file-watcher:${e}`)}}if(!v){let e=(e,t)=>{let n=kK(e,be.managedArtifactCtx);if(!n)return;let r=PK(P.documents.get(n)??null,n,t,be.managedArtifactCtx);y.info({docName:n,outcome:r},`[managed-artifact-watcher] external change`),Re(`files`),oi(n)&&M.refreshGlobalSkillNodes().catch(e=>{y.warn({err:e,docName:n},`[backlinks] global skill bundle re-ingest failed`)})},t=e=>{let t=kK(e,be.managedArtifactCtx);Re(`files`),t&&oi(t)&&M.refreshGlobalSkillNodes().catch(e=>{y.warn({err:e,docName:t},`[backlinks] global skill bundle prune failed`)})};try{let n=wK(be.managedArtifactCtx),r=await w7(n,e,void 0,t);Ye.push({docName:`__skill-files__`,cleanup:r}),y.info({roots:n},`[managed-artifact-watcher] skills started`)}catch(e){y.warn({err:e},`[managed-artifact-watcher] skills failed to start`),ht.push(`managed-artifact-watcher:skills`)}try{let e=V(xK(be.managedArtifactCtx),`.ok`,`skill-state.yml`),t=await X5(e,()=>{Re(`files`)});Ye.push({docName:`__skill-state__`,cleanup:t}),y.info({path:e},`[skill-state-watcher] started`)}catch(e){y.warn({err:e},`[skill-state-watcher] failed to start`),ht.push(`skill-state-watcher`)}try{let t=new Set([``]);try{for(let e of sP(n).templates)t.add(e.source_folder)}catch(e){y.warn({err:e},`[managed-artifact-watcher] template enumeration failed; root only`)}let r=[...t].map(e=>e?V(n,e,`.ok`,`templates`):V(n,`.ok`,`templates`)),i=await w7(r,e,fSe);Ye.push({docName:`__template-files__`,cleanup:i}),y.info({rootCount:r.length},`[managed-artifact-watcher] templates started`)}catch(e){y.warn({err:e},`[managed-artifact-watcher] templates failed to start`),ht.push(`managed-artifact-watcher:templates`)}}try{let e=V(t,`.okignore`),r=V(n,`.gitignore`),i=null;try{let e=Sl(`git`,[`rev-parse`,`--git-common-dir`],MF({cwd:n,encoding:`utf-8`,timeout:5e3}));if(e.status===0&&e.stdout){let t=z(V(n,e.stdout.trim()),`info`,`exclude`);H(R(t))&&(i=t)}}catch{}let a=i?[e,r,i]:[e,r],o=y;o.info({okignorePath:e,gitignorePath:r,gitInfoExcludePath:i,ephemeral:v},`[ignore-watcher] starting multi-path watcher for .okignore + .gitignore (+ .git/info/exclude when present)`);let s=v?null:await Mxe(a,(t,r)=>{(async()=>{if(t===e)try{let e=o7(P.documents.get(`__config__/okignore`)??null,Pe,r,be.configPersistenceCtx);o.info({docName:Pe,outcome:e},`[ignore-watcher] applyExternalConfigChange outcome`)}catch(e){o.error({err:e,changedPath:B(n,t)},`[ignore-watcher] applyExternalConfigChange failed; rebuild proceeds independently`)}let i=await _e.rebuildIgnorePatterns();if(i.ok)o.info({changedPath:B(n,t),patternCount:i.patternCount,nestedFileCount:i.nestedFileCount,durationMs:i.durationMs},`[ignore-watcher] rebuild succeeded — broadcasting files channel`),Ce?.signal(`files`);else{let e=B(n,t)||`.`;o.warn({changedPath:e,error:i.error.message},`[ignore-watcher] rebuild failed — emitting config-ignore-nested-error`),Ce?.emitConfigIgnoreNestedError(e,i.error.message)}})().catch(e=>{o.error({err:e,changedPath:B(n,t)||`.`},`[ignore-watcher] handler threw`)})});s&&(Ye.push({docName:`__ignore-files__`,cleanup:s}),o.info({okignorePath:e,gitignorePath:r},`[ignore-watcher] multi-path watcher started`))}catch(e){y.warn({err:e,projectDir:n,contentDir:t},`[ignore-watcher] failed to start multi-path watcher`),ht.push(`ignore-files-watcher`)}let a=d7(n).branch??`main`;ee(a);let o=M.beginStartup(a),s=!1,c=performance.now();try{await Lo(`ok.boot.indexes`,void 0,async()=>{let{deletedDocNames:e,backlinkIndexDegraded:r}=await o.backlinksReady;r&&ht.push(`backlink-index`);let i=0;for(let t of e)_C(t)||He.peek(t)?.kind!==`renamed`&&(He.setDeleted(t),i++);i>0&&y.info({count:i},`[removal-guard] tombstoned docs deleted while the server was down`);let a=performance.now(),c=/^\.(?!ok\/)[A-Za-z0-9_-]+\/skills\//,u=_e?cV(t):new Set,d=e=>{e.some(e=>c.test(B(t,e).split(Al).join(`/`)))&&(we&&clearTimeout(we),we=setTimeout(()=>{we=null;try{GJ(n,t).then(e=>{e>0&&(y.info({refreshed:e},`[in-place-skills] re-synced recorded copies`),Ce?.signal(`files`))}).catch(e=>y.warn({err:e},`[in-place-skills] copy re-sync failed`));let e=cV(t);if(!(e.size!==u.size||[...e].some(e=>!u.has(e))))return;u=e,_e.rebuildIgnorePatterns().then(t=>{t.ok?(y.info({skillDirs:e.size},`[in-place-skills] canonical set changed — filter rebuilt`),Ce?.signal(`files`)):y.warn({error:t.error.message},`[in-place-skills] filter rebuild failed after skill re-scan`)}).catch(e=>y.warn({err:e},`[in-place-skills] rebuild threw`))}catch(e){y.warn({err:e},`[in-place-skills] re-scan trigger failed`)}},500))};lt=await Lo(`ok.boot.seed-walk`,void 0,async()=>PU(t,st,_e,{onRawBatch:d})),GJ(n,t).then(e=>{e>0&&y.info({refreshed:e},`[in-place-skills] boot copy re-sync`)}).catch(e=>y.warn({err:e},`[in-place-skills] boot copy re-sync failed`));{let e=l??au();GJ(e,e,aV(e)).then(e=>{e>0&&y.info({refreshed:e},`[in-place-skills] global boot copy re-sync`)}).catch(e=>y.warn({err:e},`[in-place-skills] global copy re-sync failed`))}mH(`seedWalkMs`,Math.round(performance.now()-a));{let e=V(t),n=0;for(let[t]of He.entries()){if(!kZ(t))continue;let r=V(e,`${t}${sC(t)}`);Tj(r,e)&&H(r)&&(He.delete(t),n++)}n>0&&y.info({count:n},`[removal-guard] dropped journaled removal entries whose file re-appeared while the server was down`)}let f=await M.settleStartupAfterWatcherSeed();s=!0,f.tagIndexDegraded&&ht.push(`tag-index`);let p=0;try{_===void 0?await PZ({contentDir:t,contentFilter:_e,basenameIndex:me,onSkip:(e,t,n)=>{p++,y.warn({reason:e,code:t,path:n},`[basename-index] skipped entry during seed (${e}${t?` ${t}`:``})`)}}):NZ({contentDir:t,basenameIndex:me,onSkip:(e,t,n)=>{p++,y.warn({reason:e,code:t,path:n},`[basename-index] skipped entry during single-file seed (${e}${t?` ${t}`:``})`)}}),p>0&&(y.warn({count:p},`[basename-index] startup seed completed with ${p} skipped entries — embeds under inaccessible subtrees will not resolve`),ht.push(`basename-index-partial`))}catch(e){y.error({err:e},`[basename-index] startup seed failed`),ht.push(`basename-index`)}})}catch(e){if(y.error({err:e},`[server] disk bridge watcher failed to start`),ht.push(`file-watcher`),!s){let e=await M.settleStartupAfterWatcherSeed();s=!0,e.tagIndexDegraded&&ht.push(`tag-index`)}}finally{mH(`indexesMs`,Math.round(performance.now()-c)),lt&&hH(`fileCount`,lt.getFileIndex().size)}try{ut=await qxe(n,async({trigger:e})=>{if(y.info({trigger:e},`[batch] begin trigger=${e}`),eie(),P.flushPendingStores(),await be.flushPendingGitCommit(),te(!0),ve.current){let e=S(),t=d7(n).branch??e,r=[];for(let[e,t]of P.documents){if(_C(e))continue;let n=null;if(t.transact(()=>{n=Qe(e)},uCe),n===null)continue;let i=C(e)??n;r.push({docName:e,markdown:n,diskSnapshot:i})}if(r.length>0)try{let n=await Oae(ve.current,e,HS.id,r,t);n&&(rie(),y.info({count:r.length,branch:e,sha:n.slice(0,8)},`[history] parked ${r.length} docs on ${e} → ${n.slice(0,8)}`))}catch(e){y.error({err:e},`[shadow] park failed`)}}},async e=>{let r=ot.length,i=e.newBranch??`main`;if(y.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(te(!1),await ct(),e.headMoved&&e.newHead){let r=fCe(n,V(t),e.oldHead,e.newHead);if(r.size>0){Kse(r.keys());for(let[e,t]of r)eF(e,yte(t.email),t.name,t.email,_d(e));await be.flushContributors()}}if(await be.flushDeferredStores(`within-branch`),dt!==null)try{await dt.reconcileConflictsFromGit()}catch(e){y.warn({err:e},`[head-watcher] sync engine conflict reconcile failed`)}}else{nie(),ot.splice(0,ot.length);let n=!1,r;try{ee(i),r=await M.beginBranchSwitch(i),_e.rebuildDirCount();try{let e=0;me.clear(),await PZ({contentDir:t,contentFilter:_e,basenameIndex:me,onSkip:(t,n,r)=>{e++,y.warn({reason:t,code:n,path:r,branch:i},`[basename-index] skipped entry during branch-switch reseed (${t}${n?` ${n}`:``})`)}}),e>0&&(y.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`),ht.includes(`basename-index-partial`)||ht.push(`basename-index-partial`))}catch(e){y.error({err:e,branch:i},`[basename-index] branch-switch reseed failed`)}for(let[e,n]of P.documents)if(!_C(e))try{let r=Ej(e,t);if(!H(r)){let t=C(e)??``,r=Qe(e)??``;if(r!==t&&ve.current){let t=ve.current;queueMicrotask(()=>{qS(t,f??``,{kind:`external-change-rescue`,docName:e,contents:r,label:`External change recovered @ ${new Date().toISOString()}`,branch:i,metadata:{incomingDiskSha:``}}).then(()=>{lS(),y.info({docName:e},`[reconcile] rescue checkpoint saved on branch switch: ${e}`)}).catch(t=>{y.error({docName:e,err:t},`[reconcile] rescue checkpoint write failed: ${e}`)})})}n.getMap(`lifecycle`).set(`status`,`deleted-upstream`),y.info({docName:e,branch:i},`[branch-switch] tombstone: ${e} (not on ${i})`);continue}let a=U(r,`utf-8`);$e(e,a),w(e,a),y.info({docName:e},`[branch-switch] reset: ${e}`)}catch(t){y.error({err:t,docName:e},`[branch-switch] failed to reset ${e}`)}y.info({branch:i,docCount:P.documents.size},`[branch-switch] loaded branch ${i} (${P.documents.size} docs)`);try{await M.settleBranchFromDisk(r)}catch(e){M.abortBranchSwitch(r),y.error({err:e,branch:i},`[derived-index] branch-switch rebuild failed; relationship views may be stale`)}if(ve.current&&e.batchKind===`cross-branch`){let e=0;for(let[t]of P.documents)if(!_C(t))try{let n=await Aae(ve.current,i,HS.id,t);if(!n||n.markdown===n.diskSnapshot)continue;let r=C(t);if(!r)continue;let a=FH({docName:t,base:n.diskSnapshot,ours:n.markdown,theirs:r});switch(a.kind){case`merged`:case`clean`:$e(t,a.newContent),w(t,a.newContent),e++;break;case`conflicts`:$e(t,a.newContent),w(t,a.newContent),sS(),e++;{let e=P.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){y.error({err:e,docName:t},`[branch-switch] restore WIP failed for ${t}`)}e>0&&y.info({count:e,branch:i},`[branch-switch] restored ${e} parked docs on ${i}`)}if(e.oldBranch?.startsWith(`detached-`)&&ve.current)try{let t=jS(ve.current),n=(await t.raw(`for-each-ref`,`refs/wip/${e.oldBranch}/`,`--format=%(refname)`)).trim();n&&(await DS(ve.current).withMutator(async()=>{for(let e of n.split(`
2027
+ `)){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=V(e,r);if(!Dj(a,t))continue;let s=fU(a,t);i.has(s)||H(a)&&i.set(s,o)}return i}function p9(e){f9();let{contentDir:t,projectDir:n=t,quiet:r=!0,debounce:i=2e3,maxDebounce:a=1e4,gitEnabled:o=!0,commitDebounceMs:s=3e4,wipRef:c=`refs/wip/main`,configHomedirOverride:l,enableTestRoutes:u=!1,shadowRepo:d,contentRoot:f,destroyTimeoutMs:p=1e4,localOpCliArgs:m,authStreamHeartbeatMs:h,skipStateManifestCheck:g=!1,singleDocRelPath:_,ephemeral:v=!1}=e,y=L(`server`),x=new c7,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),te=e=>x.setBatchInProgress(e),ne=()=>x.isBatchInProgress();function ie(){let e=No({absPath:Fo(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config`)});if(!e.valid){let t=le(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}`)}y.warn({},`[config] committed content.attachmentFolderPath unavailable (project config invalid) — using default attachment placement`)}return e.value.content.attachmentFolderPath??`./`}function E(){let e=No({absPath:Fo(`project-local`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project-local config`)}),t=b(e.value.autoSync);if(t!==null)return{mode:t,source:`config`};e.valid||y.warn({},`[config] project-local autoSync.mode unavailable (config invalid) — falling back to the committed project default`);let r=No({absPath:Fo(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config`)});return r.valid||y.warn({},`[config] committed autoSync.default unavailable (project config invalid) — defaulting to disabled`),{mode:re(r.value.autoSync?.default)??`off`,source:`committed-default`}}function D(){let e=No({absPath:Fo(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config for linter`)}).value.contentRules;return e?Mn(e):Ze}function ae(){return No({absPath:Fo(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config for link validation`)}).value.validation?.links??`warning`}function O(){return DF(n,{configHomedirOverride:l,onWarn:e=>y.warn({message:e},`[config] could not read project-local config`)})}function oe(){let e=No({absPath:Fo(`project-local`,n,l),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project-local config`)});return e.valid?e.value.linkPreviews?.enabled===!0:!1}function k(){return jo({cwd:n,homedirOverride:l,warn:e=>y.debug({message:e},`[config] diagnostics read`)})}function ce(){for(let e of k().diagnostics)e.code===`REMOVED_KEY`&&y.warn({scope:e.scope,file:e.file,path:e.path.join(`.`)},`[config] ${e.path.join(`.`)} is no longer read and was ignored. ${e.redirect}`)}function ue(e){return`${_F(e.baseUrl)}|${e.model}|${e.dimensions??`auto`}`}function de(e){let t;if(e===`__config__/project`||e===`__local__/project`){let n=E();t=n.mode,dt?.setMode(n.mode,n.source).catch(t=>{y.warn({err:t,mode:n.mode,docName:e},`[sync] failed to apply autoSync mode from config`)})}let n=O();ke.applyConfig({enabled:n.enabled,providerFingerprint:ue(n)}),e===`__config__/project`&&Ce?.signal(`lint-config`),y.info({docName:e,autoSyncMode:t,semanticEnabled:n.enabled},`[config] applied persisted config to in-process consumers`)}as();let fe=Cu(),A=nN(n),pe=new Md({localDir:A,log:L(`acp-registry`)}),j=new Td(A,L(`acp-permissions`));if(Ns(A,{port:e.port??0,worktreeRoot:n,kind:e.lockKind??`interactive`,capabilities:[`http`,`ws`]}),!g)try{Z7({lockDir:A,shadowRepoDir:nd(n)})}catch(e){throw Cs(A),e}let me=Aa(),he=(e,t)=>me.resolveEmbed(e,t),ge=(e,n)=>{let r=me.resolveEmbed(e,n);if(!r&&e.includes(`/`)&&(r=e.replace(/^\.?\//,``)),!r)return null;let i=V(t,r);if(!Tj(i,V(t)))return null;try{let e=$l(i);return e.isFile()?e.size:null}catch{return null}},_e,M,ve,ye,be,N,P,xe,Se,Ce=null,we=null,Te=null,F=null,Ee=null,De=null,Oe=O(),ke=new Nce({loadEmbedder:e.embedderLoader??(()=>{let t=O();return yce({keyStore:e.embeddingsKeyStore??null,projectDir:n,config:{baseUrl:t.baseUrl,model:t.model,dimensions:t.dimensions}})}),cacheDir:z(nN(n),`embeddings`),enabled:Oe.enabled,providerFingerprint:ue(Oe)}),I=null,Ae=new Set,je=!1,Me=[],Ne,Fe,Ie,Le=new Promise((e,t)=>{Fe=e,Ie=t});function Re(e){Ce?.signal(e)}let ze=null,Be=!1,Ve=()=>{try{H7(n,He.entries())}catch(e){y.warn({err:e},`[removed-docs-journal] failed to persist removal journal`)}},He=new SSe(void 0,{onEviction:()=>rae(),onSizeChange:e=>iae(e),onMutate:()=>{!Be||ze!==null||(ze=setTimeout(()=>{ze=null,Ve()},2e3))}});for(let[e,r]of TSe(n))_C(e)||kZ(e)&&([`.md`,`.mdx`].some(n=>{let r=V(t,`${e}${n}`);return Tj(r,V(t))&&H(r)})||He.restore(e,r));Be=!0;let Ue={current:null},We=(e,t)=>{_C(e)||He.setRenamed(e,t)},Ge=e=>{if(!_C(e)){if(He.peek(e)?.kind===`renamed`){console.info(JSON.stringify({event:`recently-removed-docs-unpaired-delete-suppressed`,docName:e,source:`watcher-delete`}));return}He.setDeleted(e),Ue.current?.deleted(e)}},Ke=e=>{_C(e)||He.delete(e)};try{_e=XI({projectDir:n,contentDir:t,singleDocRelPath:_,inPlaceSkillDirs:cV(t),rescanInPlaceSkillDirs:()=>cV(t),onAfterRebuild:()=>{M.refreshContentScope().catch(e=>{L(`server-factory`).warn({err:e},`[content-filter] derived-index rebuild failed after onAfterRebuild`)}),FU(lt).then(({prunedFiles:e,prunedFolders:t})=>{let n=e+t;n>0?L(`server-factory`).info({pruned:n,prunedFiles:e,prunedFolders:t},`[content-filter] reconciled file indexes after onAfterRebuild`):L(`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=>{L(`server-factory`).warn({err:e},`[content-filter] file index reconcile failed after onAfterRebuild`)})}}),M=new kH({projectDir:n,contentDir:t,contentFilter:_e,getGlobalSkillRoots:()=>wK(be.managedArtifactCtx),signalChannel:Re}),ve={current:d},ye=o?uSe({getShadow:()=>ve.current??null,getCurrentBranch:()=>ut?.getLastKnownBranch()??null,contentRoot:f??``,projectGitDir:td(n)??void 0,isWriterLive:e=>{if(!F&&!xe)return L(`server-factory`).debug({writerId:e},`[server-factory] isWriterLive called before liveness deps populated — treating writer as dead`),!1;if(F?.getPresenceMap()[e])return!0;let t=e.startsWith(`agent-`)?e.slice(6):e;for(let e of xe?.sessionsForConnection(t)??[])return!0;return!1}}):void 0,be=F7({contentDir:t,projectDir:n,gitEnabled:o,commitDebounceMs:s,wipRef:c,shadowRef:ve,ephemeral:v,contentRoot:f,derivedDocumentIndex:M,configHomedirOverride:l,getCurrentBranch:()=>ut?.getLastKnownBranch()??null,resolveEmbed:he,resolveSize:ge,getPrincipal:()=>I,onAgentCommit:()=>Ce?.signal(`session-activity`),onFlushCommit:()=>ye?.noteFlushCommit(),onDiskFlush:(e,t,n,r)=>{Ce?.emitDiskAck(e,t),!_C(e)&&Qj(r,n)&&(Ee?.(),Re(`files`))},onConfigRejected:(e,t)=>Ce?.emitConfigValidationRejected(e,t),onConfigPersisted:de,isRecentlyRemoved:e=>He.has(e),mdManager:e.mdManager,getLossRing:()=>N,durabilityState:x}),P=new Exe({quiet:r,debounce:i,maxDebounce:a,extensions:[be.extension]});let p=P;Me.push(ooe(()=>p.documents.size),soe(()=>be.getQueueDepths()),loe(()=>{let e=0;for(let t of p.documents.values())e+=t.directConnectionsCount;return{websocket:p.getConnectionsCount()-e,direct:e}})),doe(),v||(De=bSe({getLoadedDocuments:()=>p.documents,forceStore:(e,t)=>be.forceStore(e,t),getBase:e=>x.getReconciledBase(e),isBatchActive:()=>x.isBatchInProgress(),peekInFlight:e=>x.peekInFlightFlush(e),readDiskBytes:e=>{let n=Ej(e,t),r,i;try{r=W(n),i=$l(r).size}catch(t){let n=Is(t);if(n===`ENOENT`)return null;throw n===`ELOOP`?new L7(`symlink cycle at content path: ${e}`):t}if(!Dj(r,t))throw new L7(`symlink-escape: ${n} resolves outside the content dir`);if(i>524288)throw new L7(`document exceeds the open byte limit: ${e}`);try{return U(r,`utf-8`)}catch(e){if(Is(e)===`ENOENT`)return null;throw e}},graceMs:e.stalenessGraceMs,sweepIntervalMs:e.stalenessSweepIntervalMs}));let g=P.shouldUnloadDocument.bind(P);P.shouldUnloadDocument=e=>{if(Ae.has(e)||je&&g(e))return!0;let t=e.name;return _C(t)||C(t)!==void 0||e.getXmlFragment(`default`).length!==0||e.getText(`source`).length!==0?!1:g(e)},Ne=async e=>{Ae.add(e);try{await P.unloadDocument(e)}finally{Ae.delete(e)}},Ce=new bC(P),Te=new gD(P),F=new _D(P),xe=new eE(P,e.agentSessionOptions);let b=xe;Me.push(uoe(()=>({active:b.liveSessionCount,limit:b.sessionLimit})));let w=f7({derivedDocumentIndex:M,onDocumentSettled:e=>Ue.current?.changed(e)});P.configuration.extensions.push(w),P.configuration.extensions.push({__kind:`principal-auth`,async onAuthenticate(e){let t=e.token,n=VZ(t),r=n?.expectedServerInstanceId;if(typeof r==`string`&&r.length>0&&r!==fe)throw new BZ(`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 BZ(`branch-mismatch`,`branch mismatch: client claimed ${i}, server is on ${a}`);if(!n)return;let o=e.context;typeof n.principalId==`string`&&(I&&n.principalId===I.id?o.principalId=I.id:I?console.warn(JSON.stringify({event:`principal-token-mismatch`,claimed:n.principalId,loaded:I.id})):o.principalId=n.principalId),typeof n.tabSessionId==`string`&&(o.tabSessionId=n.tabSessionId),o.kind=`human`}}),P.configuration.extensions.push({__kind:`config-doc-admission-guard`,async onAuthenticate(t){if(!pC(t.documentName)&&!mC(t.documentName))return;let n=t.request,r=n.socket?.remoteAddress;if(r!==void 0&&!fj(r))throw Error(`config-doc admission requires loopback peer (peer=${r}, doc=${t.documentName})`);let i=t.requestHeaders,a=(i&&typeof i.get==`function`?i.get(`host`):null)??n.headers?.host??void 0,o=e.remotePublicHost!==void 0&&vj(a,e.remotePublicHost);if(!pj(a)&&!o)throw Error(`config-doc admission requires a loopback or remote Host header (host=${a??`<absent>`}, doc=${t.documentName})`)}});let T=V(t);function ee(e){if(!kZ(e))return null;let t=V(T,lC(e));return Tj(t,T)?t:null}P.configuration.extensions.push({__kind:`removal-redirect-guard`,async onAuthenticate(e){await CSe(e.documentName,{recentlyRemovedDocs:He,resolveFilePath:ee,fileExists:H})}}),P.configuration.extensions.push({__kind:`doc-lineage-guard`,async onAuthenticate(e){let t=VZ(e.token);Hxe(e.documentName,t?.expectedDocLineageEpoch,{getLoadedDoc:e=>P.documents.get(e)})}}),P.configuration.extensions.push({__kind:`system-doc-broadcast-guard`,async beforeHandleMessage(e){if(e.documentName!==`__system__`)return;let t=new E5(e.update);if(t.readVarString(),t.readVarUint()===L5.BroadcastStateless)throw Error(`inbound BroadcastStateless on ${za} rejected — server-only channel`)}});let te=jZ({hocuspocus:P,durabilityState:x,remotePublicHost:e.remotePublicHost,sessionManager:xe,commentDocHooksRef:Ue,contentDir:t,contentFilter:_e,serverInstanceId:fe,getFileIndex:()=>lt?lt.getFileIndex():new Map,getAttachmentFolderPath:ie,getAllFilesIndex:()=>lt?lt.getAllFilesIndex():new Map,getFileIndexGeneration:()=>lt?.getFileIndexGeneration()??0,mutateFileIndex:e=>lt?.mutateFileIndex(e),getFolderIndex:()=>lt?lt.getFolderIndex():new Map,getAliasMap:()=>lt?lt.getAliasMap():new Map,getFolderAliasIndex:()=>lt?lt.getFolderAliasIndex():new Map,rescanFiles:()=>lt?.rescanFromDisk(),enableTestRoutes:u,shadowRef:ve,flushGitCommit:()=>be.flushPendingGitCommit(),flushContributors:()=>be.flushContributors(),getCurrentBranch:()=>ut?.getLastKnownBranch()??null,getDiskAckSVs:()=>Ce?.getLatestDiskAckSVsAsBase64()??{},contentRoot:f,derivedDocumentIndex:M,signalChannel:Re,agentFocusBroadcaster:Te,agentPresenceBroadcaster:F,onAgentWrite:e.onAgentWrite,getSyncEngine:()=>dt,localOpCliArgs:m,authStreamHeartbeatMs:h,projectDir:n,resolveEmbed:he,getBridgeLossReporter:()=>Se,getPrincipal:()=>I,acpRegistry:pe,loadAcpCustomAgents:()=>Nd(A,L(`acp-registry`)),homeDirOverride:l,forceUnloadDocument:Ne,ready:Le,recentlyRemovedDocs:He,serializeDoc:Qe,evictManagedArtifactLkg:e=>{be.managedArtifactCtx.lkgCache.delete(e)},semanticSearch:ke,getSemanticSimilarityFloor:()=>O().similarityFloor,getLinterBaseConfig:()=>D(),getLinksValidationSetting:()=>ae(),getLinkPreviewsEnabled:oe,getConfigDiagnostics:k,embeddingsSecretsFile:wF(l),readSemanticProviderConfig:O,ephemeral:v,onReferencedAssetsCacheInvalidator:e=>{Ee=e}});P.configuration.extensions.push(te);let ne=No({absPath:Fo(`project`,n),sideline:!1,warn:e=>y.warn({message:e},`[config] could not read project config for bridge guards`)}),re=ne.value.bridge.deferGuard.enabled,E=ne.value.bridge.fixedPoint.enabled,se=ne.value.bridge.preDrain.enabled;N=ne.value.lossCapture.enabled?new Kre({projectDir:n,maxBytes:ne.value.lossCapture.maxBytes}):void 0,ne.value.bridge.lossDetector.enabled&&(Se=Lae({shadow:()=>ve.current,ring:N,getBranch:()=>ut?.getLastKnownBranch()??`main`,contentRoot:f??``}),xe.attachBridgeLossReporter(Se)),P.configuration.extensions.push(W7({mdManager:Oo,schema:Do,shadowRef:ve,contentRoot:f,getCurrentBranch:()=>ut?.getLastKnownBranch()??null,resolveEmbed:he,resolveSize:ge,deferGuardEnabled:re,lossDetectorEnabled:ne.value.bridge.lossDetector.enabled,fixedPointBackstopEnabled:E,preDrainEnabled:se,lossRing:N})),P.configuration.extensions.push(lCe()),P.configuration.extensions.push(Vxe({getSyncEngine:()=>dt,projectDir:n,contentDir:t}))}catch(e){for(let e of Me.splice(0))e();throw De?.dispose(),De=null,Cs(A),e}let qe=null,Je=new Map,Ye=[];function Xe(e,t){let n=V(e,`rescue`),r=V(n,lC(t));return Tj(r,n)?r:null}function Qe(e){let t=P.documents.get(e);return t?HH(t):null}let $e=(e,t)=>zH(x,P,e,t,he,ge,Se);function et(e){if(!AC(e)||dt?.getConflicts().some(r=>s7(r,e.name,n,t)))return;let r=e.getMap(`lifecycle`);r.delete(`status`),r.delete(`reason`)}let tt=e=>{if(!e)return;let t=`[[${e}]]`;for(let[n]of P.documents){if(_C(n))continue;let r=P.documents.get(n);if(!r)continue;let i=r.getText(`source`).toString();if(i.includes(t))try{r.transact(()=>{jH(r,i,he,n)},AH)}catch(t){y.error({err:t,docName:n,assetBasename:e},`[asset-event] failed to re-render ${n} for asset basename ${e}`)}}},nt=null,rt=e=>{e&&(nt===null&&(nt=new Set,setImmediate(()=>{let e=nt;if(nt=null,e)try{for(let t of e)tt(t)}catch(t){y.error({err:t,basenames:[...e]},`[asset-event] dedup rerender pass crashed`)}})),nt.add(e))};function it(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 JH(e)}}async function at(e){try{switch(e.kind){case`create`:y.info({docName:e.docName},`[reconcile] create: ${e.docName}`),await M.recordDiskUpsert(e.docName,e.content),Re(`files`),Ke(e.docName);break;case`update`:{let{docName:t,content:n}=e,r=P.documents.get(t);if(!r){await M.recordDiskUpsert(t,n);return}let i=C(t)??``,a=Qe(t)??i,o=FH({docName:t,base:i,ours:a,theirs:n}),s=tU(i).slice(0,6),c=tU(a).slice(0,6),l=tU(n).slice(0,6);switch(y.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`:et(r),await M.recordDiskUpsert(t,n);break;case`clean`:{let e=!1;try{$e(t,o.newContent),w(t,o.newContent),oS(),et(r),e=!0}catch(e){y.error({err:e,docName:t},`[reconcile] failed to apply clean content to Y.Doc for ${t}`),w(t,n),et(r)}e&&await M.recordDiskUpsert(t,n)}break;case`merged`:{let e=!1;try{$e(t,o.newContent),w(t,n),oS(),et(r),e=!0}catch(e){y.error({err:e,docName:t},`[reconcile] failed to apply merged content to Y.Doc for ${t}`),w(t,n),et(r)}e&&await M.recordDiskUpsert(t,n)}break;case`conflicts`:{let e=!1;try{$e(t,o.newContent),w(t,o.newContent),oS(),sS(),e=!0}catch(e){y.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`)}e&&await M.recordDiskUpsert(t,n);break}case`refused`:{sS();let e=r.getMap(`lifecycle`);e.set(`status`,`conflict`),e.set(`reason`,o.reason);break}}break}case`delete`:{let{docName:t}=e,n=P.documents.get(t);if(!n){await M.recordDiskDelete(t),Re(`files`),Ge(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));return}let r=C(t)??``,i=Qe(t)??``,a=i!==r;if(a&&ve.current){let e=ve.current,n=ut?.getLastKnownBranch()??`main`;queueMicrotask(()=>{qS(e,f??``,{kind:`external-change-rescue`,docName:t,contents:i,label:`External change recovered @ ${new Date().toISOString()}`,branch:n,metadata:{incomingDiskSha:``}}).then(()=>{lS(),y.info({docName:t},`[reconcile] rescue checkpoint saved (delete): ${t}`)}).catch(e=>{y.error({docName:t,err:e},`[reconcile] rescue checkpoint write failed: ${t}`)})})}n.getMap(`lifecycle`).set(`status`,`deleted-upstream`),T(t),await M.recordDiskDelete(t),y.info({docName:t,isDirty:a},`[reconcile] delete: ${t} (dirty=${a})`),P.closeConnections(t),await Ne(n),Re(`files`),Ge(t),console.info(JSON.stringify({event:`recently-removed-docs-populate`,docName:t,kind:`deleted`,source:`watcher-delete`}));break}case`rename`:{let{oldDocName:t,newDocName:n,content:r}=e,i=P.documents.get(t);if(T(t),w(n,r),await M.recordDiskRename(t,n,r),i){let e=i.getMap(`lifecycle`);e.set(`status`,`renamed`),e.set(`newPath`,n)}y.info({oldDocName:t,newDocName:n},`[reconcile] rename: ${t} → ${n}`),Re(`files`),We(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=P.documents.get(t);if(!n)return;let r=Qe(t);r===null?y.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`),y.info({docName:t},`[reconcile] conflict markers detected: ${t}`);break}case`asset-create`:me.add(e.relativePath),Re(`files`),rt(wl(e.relativePath));break;case`asset-delete`:me.remove(e.relativePath),Re(`files`),rt(wl(e.relativePath));break;case`folder-create`:case`folder-delete`:Re(`files`);break;case`file-create`:case`file-update`:case`file-delete`:Re(`files`);break;default:JH(e)}}catch(t){let n=it(e);y.error({err:t,kind:e.kind,label:n},`[reconcile] failed to handle ${e.kind} for ${n}`)}}let ot=[];async function st(e){if(ne()){ot.push(e);return}await at(e)}async function ct(){let e=ot.splice(0,ot.length);for(let t of e)await at(t)}let lt=null,ut=null,dt=null,ft=null;async function pt(e){if(P.documents.size===0)return;let t=!1,n=new Promise(e=>{P.configuration.extensions.push({async afterUnloadDocument({instance:n}){!t&&n.getDocumentsCount()===0&&(t=!0,e())}})}),r=Array.from(P.documents.keys());P.closeConnections(),P.flushPendingStores();for(let e of P.documents.values())e.getConnectionsCount()===0&&P.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(P.documents.keys()),i=[],o=[];if(ve.current){for(let e of n)if(!_C(e))try{let t=Qe(e);if(t===null){y.warn({docName:e},`[rescue] skipping ${e} — document dropped from map mid-rescue`),o.push(e);continue}let n=Xe(ve.current.gitDir,e);if(!n){y.warn({docName:e,gitDir:ve.current.gitDir},`[rescue] path-traversal guard rejected docName: ${e}`),o.push(e);continue}Ul(R(n),{recursive:!0}),tu(n,t,`utf-8`),lS(),i.push(e),y.info({docName:e},`[rescue] rescue buffer saved on flush timeout: ${e}`)}catch(t){o.push(e),y.error({err:t,docName:e},`[rescue] failed to write rescue buffer for ${e}`)}}else y.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 mt(){return ft||(ft=(async()=>{let e=Date.now(),t=[];je=!0;for(let e of Me.splice(0))e();try{await De?.dispose()}catch(e){y.warn({err:e},`[server] staleness watchdog drain failed during destroy`)}De=null;try{Ps(A)}catch(e){y.warn({err:e},`[server] failed to mark server.lock draining`)}if(ze!==null&&(clearTimeout(ze),ze=null),Be)try{H7(n,He.entries())}catch(e){y.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([Le.then(()=>`completed`,e=>(y.debug({err:e},`[server] init incomplete during shutdown`),`failed`)),new Promise(e=>{r=setTimeout(()=>e(`timeout`),5e3)})]);r!==void 0&&clearTimeout(r),i===`timeout`&&y.warn({},`[server] init did not complete within 5s during shutdown`);let a=P.documents.size;ye?.destroy();try{try{try{we&&=(clearTimeout(we),null),ut&&=(await ut.unsubscribe(),null),lt&&=(await lt.unsubscribe(),null);for(let{docName:e,cleanup:t}of Ye)try{await t()}catch(t){y.warn({err:t,docName:e},`[server] failed to stop config-file-watcher for ${e}`)}Ye.length=0}catch(e){t.push({phase:`watcher-unsubscribe`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-1 watcher unsubscribe failed`)}try{Ce?.destroy(),F?.destroy(),qe&&=(await qe.disconnect(),null);for(let[e,t]of Je)try{await t.disconnect()}catch(t){y.warn({err:t,docName:e},`[server] failed to disconnect ${e} during shutdown`)}Je.clear()}catch(e){t.push({phase:`cc1-teardown`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-1b CC1 teardown failed`)}try{await xe.closeAll()}catch(e){t.push({phase:`agent-session-drain`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-2 agent session drain failed`)}try{await dw()}catch(e){t.push({phase:`parse-pool-teardown`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-2b parse pool teardown failed`)}try{await pt(p)}catch(e){t.push({phase:`flush-all-stores`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-3 flush failed`)}M.close();let e;try{await Promise.race([(async()=>{await be.flushPendingGitCommit(),await be.waitForPendingCommits()})(),new Promise((t,n)=>{e=setTimeout(()=>n(Error(`L2 git flush timeout`)),p)})])}catch(e){t.push({phase:`git-commit-flush`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-4 git commit flush failed`)}finally{e!==void 0&&clearTimeout(e)}try{dt&&=(await dt.destroy(),null)}catch(e){t.push({phase:`sync-engine-stop`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown sync-engine-stop failed`)}}finally{if(ve.current){try{let e=(await gs({baseDir:n,timeout:{block:5e3}}).revparse(`HEAD`)).trim();e&&tu(V(ve.current.gitDir,`last-known-head`),e,`utf-8`)}catch{}try{vae(ve.current)}catch(e){t.push({phase:`shadow-repo-release`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-5 destroyShadowRepo failed`)}}let r=Date.now()-e;t.length===0?y.info({documentCount:a,durationMs:r},`[server] shutdown flushed ${a} documents in ${r}ms`):y.warn({documentCount:a,durationMs:r,phaseErrors:t},`[server] shutdown flushed ${a} documents in ${r}ms with ${t.length} phase error(s)`)}}finally{try{Cs(A,{deferUnlinkToExit:!0})}catch(e){t.push({phase:`server-lock-release`,error:e instanceof Error?e.message:String(e)}),y.error({err:e},`[server] shutdown phase-6 releaseServerLock failed`)}try{await is()}catch(e){t.push({phase:`telemetry-shutdown`,error:e instanceof Error?e.message:String(e)})}}})(),ft)}let ht=[];async function gt(){try{I=await R7(n),y.info({principalId:I.id},`[server] principal loaded`)}catch(e){y.warn({err:e},`[server] principal load failed — browser writes will use SERVICE_WRITER`)}if(!ve.current)try{ve.current=await NS(n),y.info({gitDir:ve.current.gitDir},`[server] history repo initialized at ${ve.current.gitDir}`)}catch(e){y.error({err:e},`[server] history repo init failed`),ht.push(`shadow-repo`)}if(ve.current){let e=null;try{e=mq(ve.current.gitDir),Lq(ve.current.gitDir,e),yq(ve.current.gitDir,e),y.info({entries:e.byTo.size},`[server] rename log loaded (${e.byTo.size} entries)`)}catch(e){y.warn({err:e},`[rename-log] boot-time load/sweep failed; rename history unavailable`)}if(e){let t=1e4;try{await Promise.race([Rq(ve.current,e,{rebuild:!0}),new Promise((e,n)=>setTimeout(()=>n(Error(`boot-time GC exceeded ${t}ms`)),t))])}catch(e){y.warn({err:e},`[rename-log] boot-time GC/rebuild failed; index loaded without GC`)}}try{await ye?.runBootMaintenance()}catch(e){y.warn({err:e},`[shadow-maintenance] boot maintenance failed (non-fatal)`)}}if(ve.current)try{await jS(ve.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`)){y.warn({},`[server] history repo appears corrupted — reinitializing`);try{ve.current=await NS(n)}catch(e){y.error({err:e},`[server] history repo reinit failed`),ve.current=void 0,ht.includes(`shadow-repo`)||ht.push(`shadow-repo`)}}else y.error({err:e},`[server] history repo check failed (transient?)`)}if(ve.current)try{let e=V(ve.current.gitDir,`last-known-head`),t=null;try{t=U(e,`utf-8`).trim()||null}catch{}let r=null;try{r=(await gs({baseDir:n,timeout:{block:1e4}}).revparse(`HEAD`)).trim()||null}catch{}if(r!==null){if(r!==t){let e=`main`;try{let t=(await gs({baseDir:n,timeout:{block:1e4}}).raw(`rev-parse`,`--abbrev-ref`,`HEAD`)).trim();t&&t!==`HEAD`&&(e=t)}catch{}y.info({lastKnownHead:t,currentHead:r,branch:e},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${r}, action=import`);try{await WS(ve.current,f??``,t,r,e),cS()}catch(e){y.warn({err:e},`[head-drift] commitUpstreamImport failed — continuing`)}}else y.info({currentHead:r},`[head-drift] lastKnownHead=${t??`null`}, currentHead=${r}, action=noop`);try{tu(e,r,`utf-8`)}catch(e){y.warn({err:e},`[head-drift] failed to write last-known-head`)}}}catch(e){y.warn({err:e},`[head-drift] check failed — continuing`)}try{let e=eq(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;y.warn({journalVersion:e.journal.version,fromPath:t,toPath:n,restoredDocNames:e.restoredDocNames},`[managed-rename] recovered pending rename ${t} -> ${n}`)}}catch(e){y.error({err:e},`[server] managed rename recovery failed`),ht.push(`managed-rename-recovery`)}try{let e=OV(n);(e.deleted>0||e.errors>0)&&y.info({scanned:e.scanned,deleted:e.deleted,errors:e.errors},`[upload-tempfile-sweep] swept ${e.deleted} orphan tempfile(s)`)}catch(e){y.error({err:e},`[server] upload-tempfile sweep failed`),ht.push(`upload-tempfile-sweep`)}try{qe=await P.openDirectConnection(za),Ce?.emitServerInfo(fe,S())}catch(e){y.error({err:e},`[server] failed to open __system__ direct connection — CC1 push disabled`),ht.push(`cc1-push`)}let r=v?[]:Sn;for(let e of r)try{let t=await P.openDirectConnection(e);Je.set(e,t)}catch(t){y.error({err:t,docName:e},`[server] failed to open ${e} direct connection — config bind degraded`),ht.push(`config-doc:${e}`)}let i=new Map([[$r,Fo(`project`,n)],[Ga,Fo(`project-local`,n)],[da,Fo(`user`,n,l)]]);for(let e of r){let t=i.get(e);if(t)try{y.info({docName:e,path:t},`[config-file-watcher] starting`);let n=await X5(t,t=>{let n=P.documents.get(e);y.info({docName:e,hasDocument:n!==void 0,contentLength:t.length},`[config-file-watcher] file changed`);let r=o7(n??null,e,t,be.configPersistenceCtx);y.info({docName:e,outcome:r},`[config-file-watcher] applyExternalConfigChange outcome`),de(e)});Ye.push({docName:e,cleanup:n}),y.info({docName:e,path:t},`[config-file-watcher] started`)}catch(n){y.warn({err:n,docName:e,path:t},`[config-file-watcher] failed to start for ${e}`),ht.push(`config-file-watcher:${e}`)}}if(!v){let e=(e,t)=>{let n=kK(e,be.managedArtifactCtx);if(!n)return;let r=PK(P.documents.get(n)??null,n,t,be.managedArtifactCtx);y.info({docName:n,outcome:r},`[managed-artifact-watcher] external change`),Re(`files`),oi(n)&&M.refreshGlobalSkillNodes().catch(e=>{y.warn({err:e,docName:n},`[backlinks] global skill bundle re-ingest failed`)})},t=e=>{let t=kK(e,be.managedArtifactCtx);Re(`files`),t&&oi(t)&&M.refreshGlobalSkillNodes().catch(e=>{y.warn({err:e,docName:t},`[backlinks] global skill bundle prune failed`)})};try{let n=wK(be.managedArtifactCtx),r=await w7(n,e,void 0,t);Ye.push({docName:`__skill-files__`,cleanup:r}),y.info({roots:n},`[managed-artifact-watcher] skills started`)}catch(e){y.warn({err:e},`[managed-artifact-watcher] skills failed to start`),ht.push(`managed-artifact-watcher:skills`)}try{let e=V(xK(be.managedArtifactCtx),`.ok`,`skill-state.yml`),t=await X5(e,()=>{Re(`files`)});Ye.push({docName:`__skill-state__`,cleanup:t}),y.info({path:e},`[skill-state-watcher] started`)}catch(e){y.warn({err:e},`[skill-state-watcher] failed to start`),ht.push(`skill-state-watcher`)}try{let t=new Set([``]);try{for(let e of sP(n).templates)t.add(e.source_folder)}catch(e){y.warn({err:e},`[managed-artifact-watcher] template enumeration failed; root only`)}let r=[...t].map(e=>e?V(n,e,`.ok`,`templates`):V(n,`.ok`,`templates`)),i=await w7(r,e,fSe);Ye.push({docName:`__template-files__`,cleanup:i}),y.info({rootCount:r.length},`[managed-artifact-watcher] templates started`)}catch(e){y.warn({err:e},`[managed-artifact-watcher] templates failed to start`),ht.push(`managed-artifact-watcher:templates`)}}try{let e=V(t,`.okignore`),r=V(n,`.gitignore`),i=null;try{let e=Sl(`git`,[`rev-parse`,`--git-common-dir`],MF({cwd:n,encoding:`utf-8`,timeout:5e3}));if(e.status===0&&e.stdout){let t=z(V(n,e.stdout.trim()),`info`,`exclude`);H(R(t))&&(i=t)}}catch{}let a=i?[e,r,i]:[e,r],o=y;o.info({okignorePath:e,gitignorePath:r,gitInfoExcludePath:i,ephemeral:v},`[ignore-watcher] starting multi-path watcher for .okignore + .gitignore (+ .git/info/exclude when present)`);let s=v?null:await Mxe(a,(t,r)=>{(async()=>{if(t===e)try{let e=o7(P.documents.get(`__config__/okignore`)??null,Pe,r,be.configPersistenceCtx);o.info({docName:Pe,outcome:e},`[ignore-watcher] applyExternalConfigChange outcome`)}catch(e){o.error({err:e,changedPath:B(n,t)},`[ignore-watcher] applyExternalConfigChange failed; rebuild proceeds independently`)}let i=await _e.rebuildIgnorePatterns();if(i.ok)o.info({changedPath:B(n,t),patternCount:i.patternCount,nestedFileCount:i.nestedFileCount,durationMs:i.durationMs},`[ignore-watcher] rebuild succeeded — broadcasting files channel`),Ce?.signal(`files`);else{let e=B(n,t)||`.`;o.warn({changedPath:e,error:i.error.message},`[ignore-watcher] rebuild failed — emitting config-ignore-nested-error`),Ce?.emitConfigIgnoreNestedError(e,i.error.message)}})().catch(e=>{o.error({err:e,changedPath:B(n,t)||`.`},`[ignore-watcher] handler threw`)})});s&&(Ye.push({docName:`__ignore-files__`,cleanup:s}),o.info({okignorePath:e,gitignorePath:r},`[ignore-watcher] multi-path watcher started`))}catch(e){y.warn({err:e,projectDir:n,contentDir:t},`[ignore-watcher] failed to start multi-path watcher`),ht.push(`ignore-files-watcher`)}let a=d7(n).branch??`main`;ee(a);let o=M.beginStartup(a),s=!1,c=performance.now();try{await Lo(`ok.boot.indexes`,void 0,async()=>{let{deletedDocNames:e,backlinkIndexDegraded:r}=await o.backlinksReady;r&&ht.push(`backlink-index`);let i=0;for(let t of e)_C(t)||He.peek(t)?.kind!==`renamed`&&(He.setDeleted(t),i++);i>0&&y.info({count:i},`[removal-guard] tombstoned docs deleted while the server was down`);let a=performance.now(),c=/^\.(?!ok\/)[A-Za-z0-9_-]+\/skills\//,u=_e?cV(t):new Set,d=e=>{e.some(e=>c.test(B(t,e).split(Al).join(`/`)))&&(we&&clearTimeout(we),we=setTimeout(()=>{we=null;try{GJ(n,t).then(e=>{e>0&&(y.info({refreshed:e},`[in-place-skills] re-synced recorded copies`),Ce?.signal(`files`))}).catch(e=>y.warn({err:e},`[in-place-skills] copy re-sync failed`));let e=cV(t);if(!(e.size!==u.size||[...e].some(e=>!u.has(e))))return;u=e,_e.rebuildIgnorePatterns().then(t=>{t.ok?(y.info({skillDirs:e.size},`[in-place-skills] canonical set changed — filter rebuilt`),Ce?.signal(`files`)):y.warn({error:t.error.message},`[in-place-skills] filter rebuild failed after skill re-scan`)}).catch(e=>y.warn({err:e},`[in-place-skills] rebuild threw`))}catch(e){y.warn({err:e},`[in-place-skills] re-scan trigger failed`)}},500))};lt=await Lo(`ok.boot.seed-walk`,void 0,async()=>PU(t,st,_e,{onRawBatch:d})),GJ(n,t).then(e=>{e>0&&y.info({refreshed:e},`[in-place-skills] boot copy re-sync`)}).catch(e=>y.warn({err:e},`[in-place-skills] boot copy re-sync failed`));{let e=l??au();GJ(e,e,aV(e)).then(e=>{e>0&&y.info({refreshed:e},`[in-place-skills] global boot copy re-sync`)}).catch(e=>y.warn({err:e},`[in-place-skills] global copy re-sync failed`))}mH(`seedWalkMs`,Math.round(performance.now()-a));{let e=V(t),n=0;for(let[t]of He.entries()){if(!kZ(t))continue;let r=V(e,`${t}${sC(t)}`);Tj(r,e)&&H(r)&&(He.delete(t),n++)}n>0&&y.info({count:n},`[removal-guard] dropped journaled removal entries whose file re-appeared while the server was down`)}let f=await M.settleStartupAfterWatcherSeed();s=!0,f.tagIndexDegraded&&ht.push(`tag-index`);let p=0;try{_===void 0?await PZ({contentDir:t,contentFilter:_e,basenameIndex:me,onSkip:(e,t,n)=>{p++,y.warn({reason:e,code:t,path:n},`[basename-index] skipped entry during seed (${e}${t?` ${t}`:``})`)}}):NZ({contentDir:t,basenameIndex:me,onSkip:(e,t,n)=>{p++,y.warn({reason:e,code:t,path:n},`[basename-index] skipped entry during single-file seed (${e}${t?` ${t}`:``})`)}}),p>0&&(y.warn({count:p},`[basename-index] startup seed completed with ${p} skipped entries — embeds under inaccessible subtrees will not resolve`),ht.push(`basename-index-partial`))}catch(e){y.error({err:e},`[basename-index] startup seed failed`),ht.push(`basename-index`)}})}catch(e){if(y.error({err:e},`[server] disk bridge watcher failed to start`),ht.push(`file-watcher`),!s){let e=await M.settleStartupAfterWatcherSeed();s=!0,e.tagIndexDegraded&&ht.push(`tag-index`)}}finally{mH(`indexesMs`,Math.round(performance.now()-c)),lt&&hH(`fileCount`,lt.getFileIndex().size)}try{ut=await qxe(n,async({trigger:e})=>{if(y.info({trigger:e},`[batch] begin trigger=${e}`),eie(),P.flushPendingStores(),await be.flushPendingGitCommit(),te(!0),ve.current){let e=S(),t=d7(n).branch??e,r=[];for(let[e,t]of P.documents){if(_C(e))continue;let n=null;if(t.transact(()=>{n=Qe(e)},uCe),n===null)continue;let i=C(e)??n;r.push({docName:e,markdown:n,diskSnapshot:i})}if(r.length>0)try{let n=await Oae(ve.current,e,HS.id,r,t);n&&(rie(),y.info({count:r.length,branch:e,sha:n.slice(0,8)},`[history] parked ${r.length} docs on ${e} → ${n.slice(0,8)}`))}catch(e){y.error({err:e},`[shadow] park failed`)}}},async e=>{let r=ot.length,i=e.newBranch??`main`;if(y.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(te(!1),await ct(),e.headMoved&&e.newHead){let r=fCe(n,V(t),e.oldHead,e.newHead);if(r.size>0){Kse(r.keys());for(let[e,t]of r)eF(e,yte(t.email),t.name,t.email,_d(e));await be.flushContributors()}}if(await be.flushDeferredStores(`within-branch`),dt!==null)try{await dt.reconcileConflictsFromGit()}catch(e){y.warn({err:e},`[head-watcher] sync engine conflict reconcile failed`)}}else{nie(),ot.splice(0,ot.length);let n=!1,r;try{ee(i),r=await M.beginBranchSwitch(i),_e.rebuildDirCount();try{let e=0;me.clear(),await PZ({contentDir:t,contentFilter:_e,basenameIndex:me,onSkip:(t,n,r)=>{e++,y.warn({reason:t,code:n,path:r,branch:i},`[basename-index] skipped entry during branch-switch reseed (${t}${n?` ${n}`:``})`)}}),e>0&&(y.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`),ht.includes(`basename-index-partial`)||ht.push(`basename-index-partial`))}catch(e){y.error({err:e,branch:i},`[basename-index] branch-switch reseed failed`)}for(let[e,n]of P.documents)if(!_C(e))try{let r=Ej(e,t);if(!H(r)){let t=C(e)??``,r=Qe(e)??``;if(r!==t&&ve.current){let t=ve.current;queueMicrotask(()=>{qS(t,f??``,{kind:`external-change-rescue`,docName:e,contents:r,label:`External change recovered @ ${new Date().toISOString()}`,branch:i,metadata:{incomingDiskSha:``}}).then(()=>{lS(),y.info({docName:e},`[reconcile] rescue checkpoint saved on branch switch: ${e}`)}).catch(t=>{y.error({docName:e,err:t},`[reconcile] rescue checkpoint write failed: ${e}`)})})}n.getMap(`lifecycle`).set(`status`,`deleted-upstream`),y.info({docName:e,branch:i},`[branch-switch] tombstone: ${e} (not on ${i})`);continue}let a=U(r,`utf-8`);$e(e,a),w(e,a),y.info({docName:e},`[branch-switch] reset: ${e}`)}catch(t){y.error({err:t,docName:e},`[branch-switch] failed to reset ${e}`)}y.info({branch:i,docCount:P.documents.size},`[branch-switch] loaded branch ${i} (${P.documents.size} docs)`);try{await M.settleBranchFromDisk(r)}catch(e){M.abortBranchSwitch(r),y.error({err:e,branch:i},`[derived-index] branch-switch rebuild failed; relationship views may be stale`)}if(ve.current&&e.batchKind===`cross-branch`){let e=0;for(let[t]of P.documents)if(!_C(t))try{let n=await Aae(ve.current,i,HS.id,t);if(!n||n.markdown===n.diskSnapshot)continue;let r=C(t);if(!r)continue;let a=FH({docName:t,base:n.diskSnapshot,ours:n.markdown,theirs:r});switch(a.kind){case`merged`:case`clean`:$e(t,a.newContent),w(t,a.newContent),e++;break;case`conflicts`:$e(t,a.newContent),w(t,a.newContent),sS(),e++;{let e=P.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){y.error({err:e,docName:t},`[branch-switch] restore WIP failed for ${t}`)}e>0&&y.info({count:e,branch:i},`[branch-switch] restored ${e} parked docs on ${i}`)}if(e.oldBranch?.startsWith(`detached-`)&&ve.current)try{let t=jS(ve.current),n=(await t.raw(`for-each-ref`,`refs/wip/${e.oldBranch}/`,`--format=%(refname)`)).trim();n&&(await DS(ve.current).withMutator(async()=>{for(let e of n.split(`
2028
2028
  `))e&&await t.raw(`update-ref`,`-d`,e)}),y.info({context:e.oldBranch},`[branch-switch] cleaned up detached context ${e.oldBranch}`))}catch(e){y.error({err:e},`[branch-switch] detached cleanup failed`)}te(!1),await be.flushDeferredStores(`discard-stale`),n=!0,Ce?.emitBranchSwitched(i)}finally{M.abortBranchSwitch(r),n||(te(!1),await be.flushDeferredStores(`discard-stale`))}}if(e.headMoved&&e.newHead&&ve.current&&r>0){let t=f??`.`;try{let n=await WS(ve.current,t,e.oldHead,e.newHead,i);cS(),y.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){y.error({err:e},`[shadow] upstream-import failed`)}}})}catch(e){y.error({err:e},`[server] HEAD watcher failed to start`),ht.push(`head-watcher`)}function u(e){for(let r of e)try{let e=wj(B(t,z(n,r)));if(e.startsWith(`..`))continue;let i=nC(e),a=P.documents.get(i);if(!a)continue;let o=Qe(i);o===null?y.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`),y.info({docName:i,file:r},`[sync] marked loaded content conflict`)}catch(e){y.warn({err:e,file:r},`[sync] failed to mark loaded content conflict`)}}function d(e){for(let r of e)try{let e=wj(B(t,z(n,r)));if(e.startsWith(`..`))continue;let i=P.documents.get(nC(e));i&&et(i)}catch(e){y.warn({err:e,file:r},`[sync] failed to clear resolved content conflict`)}}let p=dCe(m),h=E();h.mode!==`off`&&y.info({mode:h.mode,source:h.source},`[sync] mode active at boot`);try{dt=new sCe({projectDir:n,contentDir:t,contentFilter:_e,contentRoot:f,mode:h.mode,pullIntervalSeconds:e.pullIntervalSeconds,pushIntervalSeconds:e.pushIntervalSeconds,credentialArgs:p,cc1Broadcaster:Ce,detectGh:e.detectGh,tokenStore:e.tokenStore,checkPushPermissionFn:e.checkPushPermissionFn,setBatchInProgress:e=>{te(e),e||be.flushDeferredStores(`within-branch`).catch(e=>{y.error({err:e},`[persistence] deferred store drain failed after sync batch`)})},onStateChange:e=>{y.info({state:e},`[sync] state → ${e}`)},onContentConflictsDetected:u,onContentConflictsResolved:d,checkpointBeforeStrandedConversion:async({branch:e,ahead:t})=>{let n=ve.current;n&&await KS(n,f??``,{action:`pull-only-stranded-conversion`,context:{ahead:t}},e)},checkpointBeforeOverlayRestore:async({branch:e,paths:t})=>{let n=ve.current;n&&await KS(n,f??``,{action:`pull-only-overlay-restore`,context:{paths:t}},e)},onAutoDisable:async e=>{y.warn({reason:e},`[sync] auto-disabled — persisting to project-local config`);let t=await qo({cwd:n,scope:`project-local`,patch:{autoSync:{enabled:!1}}});t.ok||y.error({result:t,reason:e,humanError:se(t.error),configPath:Fo(`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 dt.start()}catch(e){y.warn({err:e},`[server] SyncEngine failed to start — sync disabled`),dt=null}Re(`files`),M.announceReadyViews();let g=pH();g!==void 0&&mH(`readyMs`,g),ce()}return gt().then(Fe,e=>{M.close(),Ie(e)}),{hocuspocus:P,durabilityState:x,sessionManager:xe,cc1Broadcaster:Ce,agentFocusBroadcaster:Te,agentPresenceBroadcaster:F,maintenanceCoordinator:ye,contentFilter:_e,basenameIndex:me,serverInstanceId:fe,destroy:mt,ready:Le,degraded:ht,lockDir:A,get syncEngine(){return dt},getLinkPreviewsEnabled:oe,resolveEmbed:he,acpRegistry:pe,acpPermissions:j}}function m9(e){return e/1048576}function pCe(){let e=process.memoryUsage();return{schemaVersion:1,capturedAt:new Date().toISOString(),snapshot:{rssMb:m9(e.rss),heapTotalMb:m9(e.heapTotal),heapUsedMb:m9(e.heapUsed),externalMb:m9(e.external),arrayBuffersMb:m9(e.arrayBuffers)}}}let h9=null,g9=null,_9=null;const v9=1e6;let y9=null,b9=null;Io(()=>{h9=null,g9=null,_9=null,y9?.disable(),y9=null,b9=null});function mCe(){if(h9)return;let e=os().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}=pCe();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`})}),h9=e}function hCe(){if(!g9){let e=os().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(!y9){y9=Ou({resolution:20}),y9.enable();return}e.observe(y9.percentile(50)/v9,{stat:`p50`}),e.observe(y9.percentile(99)/v9,{stat:`p99`}),y9.reset()}),g9=e}if(!_9){let e=os().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=b9;if(b9={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`}))}),_9=e}}const x9=L(`skill-migrate`);function S9(e){return[{host:`agents`,root:`.agents/skills`},...Object.entries(e).filter(e=>e[1]!==null).map(([e,t])=>({host:e,root:t}))].sort((e,t)=>{let n=UD.indexOf(e.host),r=UD.indexOf(t.host);return(n===-1?UD.length:n)-(r===-1?UD.length:r)||e.host.localeCompare(t.host)})}const gCe=S9(Mt),_Ce=S9(Gn);function vCe(e,t){Jo(R(t),{recursive:!0});try{Vo(e,t)}catch(n){if(!(n instanceof Error)||n.code!==`EXDEV`)throw n;Zo(e,t,{recursive:!0}),Qo(e,{recursive:!0,force:!0})}}function yCe(e,t,n){let r=oB(e,t,n);switch(r.kind){case`absent`:return{kind:`absent`};case`other`:return{kind:`occupied`,by:`different`};case`symlink`:return r.resolution===`target`?{kind:`store-link`}:{kind:`occupied`,by:`foreign-link`};case`dir`:return r.identity===`different`?{kind:`occupied`,by:`different`}:{kind:`same-copy`}}}function C9(e,t){let n;try{n=W(V(e,`.ok`,`skills`))}catch{n=V(e,`.ok`,`skills`)}return new Set(t.filter(t=>{try{return!W(V(e,t.dir)).startsWith(n+Al)}catch{return!0}}).map(e=>e.name))}async function w9(e){let{projectDir:t,skillsRoot:n}=e,r=e.inPlaceNames??new Set,i=e.hostRoots??gCe,a={migrated:[],skipped:[]};if(!H(n))return a;let o;try{o=Jl(n)}catch{return a}let s=B(t,n).split(Al).join(`/`),c=new Set;for(let[e,n]of Object.entries(HJ(t)))for(let t of n)t.path.split(`/`).slice(0,-1).join(`/`)===s&&c.add(e);for(let e of o)try{if(!Ie.test(e)||lz.has(e))continue;if(r.has(e)){a.skipped.push({name:e,reason:`placement-of-in-place`});continue}if(c.has(e)){a.skipped.push({name:e,reason:`recorded-placement`});continue}let o=V(n,e);if(!H(z(o,`SKILL.md`)))continue;let s=LD(o)?.contentHash;if(s===void 0)continue;let l=W(o),u=i.map(({host:n,root:r})=>{let i=V(t,r);return{host:n,root:r,path:z(i,e),escapes:vB(t,i),state:yCe(z(i,e),l,s)}}).filter(e=>!e.escapes),d=u.find(e=>e.state.kind===`store-link`||e.state.kind===`same-copy`)??u.find(e=>e.state.kind===`absent`&&H(V(t,e.root)))??u.find(e=>e.host===`claude`);if(!d){a.skipped.push({name:e,reason:`no-usable-target`});continue}if(d.state.kind===`occupied`){a.skipped.push({name:e,reason:`target-occupied:${d.root} (${d.state.by})`});continue}d.state.kind===`same-copy`?Qo(o,{recursive:!0,force:!0}):(d.state.kind===`store-link`&&Qo(d.path,{recursive:!0,force:!0}),vCe(o,d.path));for(let e of u)e===d||e.state.kind!==`store-link`||(Qo(e.path,{recursive:!0,force:!0}),Zo(d.path,e.path,{recursive:!0}));await sI(t,e),a.migrated.push({name:e,to:`${d.root}/${e}`}),x9.info({skill:e,to:`${d.root}/${e}`},`migrated store skill in place`)}catch(t){a.skipped.push({name:e,reason:`error`}),x9.warn({err:t,skill:e},`store-skill migration skipped one entry after error`)}return a}const T9=L(`skill-reconcile`),bCe=lz;function E9(){let e=[];for(let t of Et){let n=Mt[t];n!==null&&e.push({rel:n,editor:t})}return e.push({rel:`.agents/skills`,editor:null}),e}function xCe(e,t){let n=B(e,V(t));return Dl(n)?V(t):n}function D9(e){let{frontmatter:t,body:n}=eo(e),r={};if(t!==``)try{let e=(0,tj.parse)(mo(t));e&&typeof e==`object`&&!Array.isArray(e)&&(r=e)}catch{}return{fm:r,body:n}}function SCe(e,t){let n=D9(e),r=D9(t);if(n.body!==r.body)return!1;for(let e of Object.keys(n.fm))if(e in r.fm&&JSON.stringify(n.fm[e])!==JSON.stringify(r.fm[e]))return!1;return!0}function O9(e,t){let n=k9(e),r=k9(t);if(n.length!==r.length)return!1;let i=0;for(let a=0;a<n.length;a+=1){if(n[a]!==r[a])return!1;let o=n[a],s=z(e,o),c=z(t,o);if(i+=$l(s).size+$l(c).size,i>1048576)return!1;let l=U(s),u=U(c);if(!l.equals(u)&&(o!==`SKILL.md`||!SCe(l.toString(`utf8`),u.toString(`utf8`))))return!1}return!0}function k9(e,t=``){let n=[];for(let r of Jl(e,{withFileTypes:!0})){let i=t?`${t}/${r.name}`:r.name;r.isDirectory()?n.push(...k9(z(e,r.name),i)):r.isFile()&&n.push(i)}return n.sort()}function A9(e,t,n){Qo(t,{recursive:!0,force:!0}),Jo(e,{recursive:!0}),Wo(xCe(e,n),t,`dir`)}function j9(e,t){try{let n=Yl(e);return V(Dl(n)?n:V(R(e),n))===V(t)}catch{return!1}}function CCe(e,t){try{let n=Yl(e),r=Dl(n)?V(n):V(R(e),n);if(!H(r))return!1;let i=B(V(t),r);return i!==``&&(i.startsWith(`..`)||Dl(i))}catch(t){return T9.warn({linkPath:e,err:t},`isForeignSymlink: could not resolve symlink; treating as reconcile-managed`),!1}}const wCe=[...Et,`agents`];function TCe(e){for(let t of wCe){let n=`-${t}`;if(e.length>n.length&&e.endsWith(n))return e.slice(0,-n.length)}return null}function ECe(e){let{projectDir:t,skillsRoot:n}=e;if(!H(n))return;let r;try{r=Jl(n)}catch{return}let i=E9();for(let e of r){let r=TCe(e);if(r===null)continue;let a=V(n,e),o=V(n,r);if(H(o))try{let n=Hl(a);if(n.isSymbolicLink()||!n.isDirectory()||!H(z(a,`SKILL.md`))||!H(z(o,`SKILL.md`))||!O9(o,a))continue;for(let{rel:n}of i){let r=V(t,n);if(vB(t,r))continue;let i=z(r,e);j9(i,a)&&A9(r,i,o)}Qo(a,{recursive:!0,force:!0}),T9.info({base:r,suffixed:e},`collapsed accreted suffix-duplicate skill into its base`)}catch(t){T9.warn({err:t,base:r,suffixed:e},`suffix-dupe collapse skipped one entry after error`)}}}async function DCe(e){let{projectDir:t,skillsRoot:n}=e,r={healed:[],replaced:[],orphansRemoved:[],skipped:[]},i=new Map,a=(e,t)=>{if(t===null)return;let n=i.get(e)??new Set;n.add(t),i.set(e,n)};for(let{rel:e,editor:i}of E9()){let o=V(t,e);if(!H(o)||vB(t,o))continue;let s;try{s=Jl(o)}catch(e){T9.warn({hostRoot:o,err:e},`reconcile: skipped unreadable host skills root`);continue}for(let e of s){if(bCe.has(e))continue;let t=z(o,e),s=V(n,e),c=H(s);try{let l=Hl(t);if(l.isSymbolicLink()){if(j9(t,s)&&c)continue;if(CCe(t,n)){r.skipped.push({name:e,editor:i});continue}c?(A9(o,t,s),r.healed.push({name:e,editor:i})):(Qo(t,{recursive:!0,force:!0}),r.orphansRemoved.push({name:e,editor:i}));continue}if(!l.isDirectory())continue;if(!Ie.test(e)){T9.warn({skill:e,editor:i},`reconcile: skipping host-dir entry with a non-skill name`);continue}if(c&&O9(t,s)){A9(o,t,s),r.replaced.push({name:e,editor:i}),a(e,i);continue}r.skipped.push({name:e,editor:i})}catch(t){T9.warn({err:t,skill:e,editor:i},`reconcile skipped one skill entry after error`)}}}if(i.size>0){let e=iI(t);for(let[r,a]of i){let i=V(n,r);if(!H(i))continue;let o=e.skills[r],s=Array.from(new Set([...o?.hosts??[],...a]));try{await oI(t,r,{hosts:s,scope:o?.scope??`project`,scripts:o?.scripts??fB(i,r).hasScripts,installedAt:o?.installedAt??new Date().toISOString()})}catch(e){T9.warn({err:e,skill:r},`reconcile marker update failed (non-fatal)`)}}}try{ECe({projectDir:t,skillsRoot:n})}catch(e){T9.warn({err:e},`suffix-dupe collapse pass failed (non-fatal)`)}return r}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=nN(e);M9=new ps({currentPath:V(t,`tolerance-telemetry.jsonl`),previousPath:V(t,`tolerance-telemetry.prev.jsonl`),maxBytes:8388608}),va(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,L(`tolerance-telemetry`).warn({err:e instanceof Error?e:Error(String(e))},`append failed; further failures are silent`))})})}async function I9(){va(null),await M9?.drain(),M9=null,N9=!1}To();const OCe=[`server.lock`,`ui.lock`,`state.json`,`principal.json`,`sync-state.json`,`conflicts.json`,`last-spawn-error.log`],kCe=[`cache`,`tmp`];function ACe(e){let t=V(e,ve);if(!(()=>{if(!H(t))return!0;try{return Jl(t).length===0}catch{return!0}})())return[];let n=[];for(let t of OCe)H(V(e,t))&&n.push(t);for(let t of kCe){let r=V(e,t);try{H(r)&&$l(r).isDirectory()&&n.push(`${t}/`)}catch{}}return n}function jCe(e){let t=ed(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 MCe(e){fH();let t=e.projectDir??e.contentDir,n=iQ({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}`)}ls.configure({pinoConfig:{fileSink:n.logs,redactPaths:t}})}as({localSink:n?.telemetry}),F9(t),mCe(),hCe();let{kind:r,gitdir:i}=jCe(e.projectDir??e.contentDir),a={"ok.worktree.kind":r};i!==null&&(a[`ok.worktree.gitdir`]=Xo(i));let o=XZ(t),s=process.env.OK_STARTUP_TRACEPARENT,c=()=>Lo(`ok.boot`,{attributes:a},async()=>NCe(e)),l=()=>{if(s)try{let e=wo.extract(Eo.active(),{traceparent:s});return Eo.with(e,c)}catch(e){L(`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 NCe(e){let t=e.skipAutoInit??!1,n=e.attachUiSibling??!0,r=e.log??L(`boot`),i=e.enableRemote===!0&&e.ephemeral!==!0?hj(e.config):null;if(e.enableRemote===!0&&e.ephemeral!==!0&&i===null)throw new mj("remote access was requested but remote.url is not set — pass a url (`ok start --remote <url>`) or set remote.url in .ok/config.yml.");let a=i===null?e.idleShutdownMs:null,o=process.env.OK_LOCK_KIND===`mcp-spawned`||process.env.OK_LOCK_KIND===`interactive`?process.env.OK_LOCK_KIND:void 0,s=e.lockKind??o??`interactive`,{createServer:l}=await import(`node:http`),{markServerLockDraining:u,releaseServerLock:d,updateServerLockPort:f}=await import(`./server-lock-CCA69O0D.mjs`),p=!1;if(!t&&e.autoInitFn)try{p=!!await e.autoInitFn()}catch(e){r.warn({err:e},`autoInitFn failed`)}let m=e.projectDir??e.contentDir,h=V(m,`.ok`);if(!H(V(h,`config.yml`)))throw new Y8(H(h)?`config`:`okdir`,m);let g=V(h,`.gitignore`);H(g)||L(`boot`).warn({path:g},"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 _=e.gitPreflight??zG;try{e.gitEnabled!==!1&&_()}catch(e){if(e instanceof IG||e instanceof LG){let t=e instanceof LG?e.detected:``,n=e instanceof LG?`too_old`:`not_available`;iK(e),r.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 is(),await Promise.race([I9(),new Promise(e=>setTimeout(e,L9))]),e}let v=ACe(h);v.length>0&&L(`boot`).warn({files:v},`Found legacy runtime files at .ok/${v.join(`, `)}. Delete .ok/ and re-init — these files moved to .ok/${ve}/.`);let y=p9({contentDir:e.contentDir,projectDir:e.projectDir,remotePublicHost:i?.publicHost,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:s,skipStateManifestCheck:e.skipStateManifestCheck,detectGh:e.detectGh,tokenStore:e.tokenStore,embeddingsKeyStore:e.embeddingsKeyStore,singleDocRelPath:e.singleDocRelPath,ephemeral:e.ephemeral}),{hocuspocus:b,destroy:S,ready:C,degraded:w,lockDir:T,sessionManager:te,agentFocusBroadcaster:ne,agentPresenceBroadcaster:re,maintenanceCoordinator:ie}=y,E=(()=>{let t=e.host??`localhost`;return t===`0.0.0.0`||t===`::`?`localhost`:t.includes(`:`)&&!t.startsWith(`[`)?`[${t}]`:t})(),D=e.port??0,ae=e.ephemeral?void 0:U8({contentDir:e.contentDir,projectDir:e.projectDir??e.contentDir,config:e.config,getServerUrl:()=>`http://${E}:${D}`,log:r}),O=l();O.headersTimeout=3e4,O.requestTimeout=6e4;let oe=e.serveContentAssets===!1?void 0:lM({contentFilter:y.contentFilter,contentSirv:zs(e.contentDir,{dev:!0,dotfiles:!1}),inlineExtensions:ee,assetExtensions:c,blocklistExtensions:x}),se=!1;if(e.reactShellDistDir)try{mV(T,{port:0,worktreeRoot:e.projectDir??e.contentDir}),se=!0}catch(e){if(e instanceof pV)r.info({event:`ui-lock-yielded-to-live-holder`,pid:process.pid,existingPid:e.existing.pid,existingPort:e.existing.port,lockDir:T},`ui.lock already held by a live process — yielding (advertisement is fulfilled)`);else throw await S().catch(()=>{}),d(T),e}let k=e.reactShellDistDir?zs(e.reactShellDistDir,{single:!0,gzip:!0,immutable:!0}):void 0,ce=e.ephemeral?null:new fD({contentDir:e.contentDir,localDir:T,globalDir:V(au(),`.ok`),registry:y.acpRegistry,permissions:y.acpPermissions,sessionManager:te,agentPresenceBroadcaster:re,resolveEmbed:y.resolveEmbed,isExcludedPath:e=>y.contentFilter.isExcluded(e),isIgnoredPath:e=>y.contentFilter.isPathIgnored(e),getLoadedDocText:e=>b.documents.get(e)?.getText(`source`).toString()??null,getServerUrl:()=>`http://${E}:${D}`,getMcpStdioCommand:()=>dD(e.localOpCliArgs,D),probeHarnessManagedMcpEntry:e.probeHarnessManagedMcpEntry,log:r});ce!==null&&await ce.init(),i!==null&&r.info({url:i.url},`[remote] remote access enabled (trust-the-tunnel)`);let le=G8({httpServer:O,hocuspocus:b,mcpHttpHandler:ae,remoteAccess:i,log:r,sessionManager:te,agentFocusBroadcaster:ne,agentPresenceBroadcaster:re,maintenanceCoordinator:ie,keepaliveGraceMs:e.keepaliveGraceMs,contentAssetMiddleware:oe,reactShellMiddleware:k,ephemeral:e.ephemeral,acpThreadManager:ce}),ue=async()=>{throw Error(`bootServer: destroy() invoked before initialization — boot did not complete`)},de=null;a!==null&&(de=ZZ({httpServer:O,thresholdMs:a??18e5,log:r,onShutdown:(e.idleShutdownHandler??(e=>async()=>{await e()}))(async()=>{await ue()})})),await R9({hocuspocus:b,projectDir:e.projectDir??e.contentDir,log:r});try{await new Promise((t,n)=>{let r=e=>n(e);O.once(`error`,r),O.listen(e.port,e.host,()=>{O.removeListener(`error`,r),t()})})}catch(e){if(se)try{_V(T)}catch(e){r.warn({err:e},`releaseUiLock failed during listen-error cleanup`)}throw await S().catch(()=>{}),d(T),e}let fe=pH();fe!==void 0&&mH(`httpListenMs`,fe);let A=O.address(),pe=typeof A==`object`&&A?A.port:e.port??0;if(D=pe,f(T,pe),se&&hV(T,pe),n&&e.spawnUiSiblingFn)try{await e.spawnUiSiblingFn({lockDir:T,log:r})}catch(e){r.warn({err:e},`spawnUiSiblingFn failed`)}let j=!1,me=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(j)return;j=!0;let e=[],t=async(t,n)=>{try{await me(t,n)}catch(n){e.push(n),r.warn({err:n,step:t},`bootServer destroy step failed`)}};try{u(T),se&&vV(T)}catch(e){r.warn({err:e,step:`markLocksDraining`},`bootServer destroy step failed`)}try{de?.detach()}catch(t){e.push(t),r.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()),ae!==void 0&&await t(`mcpHttpHandler.close`,()=>ae.close()),await t(`mount.wss.close`,()=>new Promise((e,t)=>{le.wss.close(n=>n?t(n):e())})),await t(`httpServer.closeAllConnections`,async()=>{O.closeAllConnections?.()}),await t(`httpServer.close`,()=>new Promise((e,t)=>{O.close(n=>n&&n.code!==`ERR_SERVER_NOT_RUNNING`?t(n):e())})),await t(`destroyHocuspocus`,()=>S()),se&&await t(`releaseUiLock`,async()=>_V(T,{deferUnlinkToExit:!0})),await t(`shutdownTelemetry`,()=>is()),await t(`teardownToleranceTelemetry`,()=>I9()),await t(`flushLogFileSinks`,()=>ls.flushAllFileSinks()),e.length>0)throw AggregateError(e,`bootServer destroy completed with errors`)};try{let t=await w9({projectDir:m,skillsRoot:V(e.contentDir,`.ok`,`skills`),inPlaceNames:C9(e.contentDir,iV(e.contentDir))});t.migrated.length+t.skipped.length>0&&r.info?.({event:`store-skills-migrated-in-place`,migrated:t.migrated,skipped:t.skipped},`Migrated ${t.migrated.length} store skill(s) in place (${t.skipped.length} skipped).`)}catch(e){r.warn?.({event:`store-skill-migration-failed`,error:String(e)},`Store-skill in-place migration failed (non-fatal).`)}try{let e=au(),t=await w9({projectDir:e,skillsRoot:V(e,`.ok`,`skills`),hostRoots:_Ce,inPlaceNames:C9(e,aV(e))});t.migrated.length+t.skipped.length>0&&r.info?.({event:`global-store-skills-migrated-in-place`,migrated:t.migrated,skipped:t.skipped},`Migrated ${t.migrated.length} global store skill(s) in place (${t.skipped.length} skipped).`)}catch(e){r.warn?.({event:`global-store-skill-migration-failed`,error:String(e)},`Global store-skill in-place migration failed (non-fatal).`)}try{let t=await DCe({projectDir:m,skillsRoot:V(e.contentDir,`.ok`,`skills`)}),n=t.healed.length+t.replaced.length+t.orphansRemoved.length;n>0&&r.info?.({event:`installed-skills-reconciled`,healed:t.healed.length,replaced:t.replaced.length,orphansRemoved:t.orphansRemoved.length},`Reconciled ${n} editor skill entr${n===1?`y`:`ies`} to the symlink model.`)}catch(e){r.warn?.({event:`installed-skills-reconcile-failed`,err:e},`Installed-skills reconcile failed (non-fatal).`)}return{httpServer:O,destroy:ue,lockDir:T,contentDir:e.contentDir,port:pe,ready:C,degraded:w,didAutoInit:p,serverInstance:y,acpThreadManager:ce}}async function R9(e){let{hocuspocus:t,projectDir:n,log:r}=e,i,a;try{i=new WZ(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=td(n),t=e?z(e,`MERGE_HEAD`):null;if(!t||!H(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=vs({baseDir:n,timeout:{block:5e3}});s=new Set(await aS(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=nC(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 PCe=ke;function FCe(e={}){let t=e.home??au(),n=e.platformName??process.platform,r=e.env??process.env;return n===`darwin`?H(z(t,`Library`,`Application Support`,`Claude`)):n===`win32`?H(z(r.APPDATA??z(t,`AppData`,`Roaming`),`Claude`)):!1}var z9=t(fs(),1);const B9=z(au(),`.ok`,`logs`),ICe=[`authorization`,`password`,`token`,`apiKey`,`secret`,`*.authorization`,`*.password`,`*.token`,`*.apiKey`,`*.secret`];function LCe(){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 RCe(e){Ul(e,{recursive:!0})}function V9(){return new Date().toISOString().slice(0,10)}function zCe(e){try{if($l(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{Xl(n,r)}catch{}}try{eu(`${e}.3`)}catch{}}function BCe(e){try{let t=Date.now(),n=10080*60*1e3,r=Jl(e).filter(e=>e.endsWith(`.log`)||/\.log\.\d+$/.test(e)).map(t=>{try{let n=$l(z(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{eu(z(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{eu(z(e,t.name)),a-=t.size}catch{}}}catch{}}function VCe(e){RCe(B9);let t=V9(),n=e.filePath??z(B9,`${e.name}.${t}.log`);zCe(n),(e._setTimeout??setTimeout)(()=>BCe(B9),5e3).unref();let r=z9.default.destination({dest:n,append:!0,sync:!0});return(0,z9.default)({level:LCe(),name:e.name,redact:{paths:ICe,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 HCe(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 UCe(e){return z(B9,`${e}.${V9()}.log`)}function WCe(){return B9}function GCe(e){let t=V(e),n=0;for(;n<30;){let e=!1;try{e=H(V(t,`.git`))}catch{e=!1}if(e)return{gitRoot:t,distance:n};let r=R(t);if(r===t)return null;t=r,n+=1}return null}const H9=Pu(yl),U9=L(`project-git`);var W9=class extends Error{stderr;constructor(e,t=``,n){super(e,n),this.name=`ProjectGitInitError`,this.stderr=t}};async function KCe(e,t){try{let{stdout:n}=await H9(e,[`rev-parse`,`--is-inside-work-tree`],MF({cwd:t,encoding:`utf-8`}));return n.trim()===`true`}catch{return!1}}async function qCe(e){let t=V(e),n=V(t,`.git`),r=V(n,`HEAD`),i=!1;if(H(n)){if(!$l(n).isDirectory()||H(r))return{didInit:!1};U9.info({},`detected partial .git/ — running git init to repair`),i=!0}let a;try{a=zG()}catch(e){throw e instanceof IG||e instanceof LG?(iK(e),U9.warn({event:`git_preflight_fail`,platform:e.platform,reason:e instanceof LG?`too_old`:`not_available`,detectedVersion:e instanceof LG?e.detected:``},e instanceof LG?`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 KCe(o,t))return{didInit:!1};let s=``;try{s=(await H9(o,[`init`,`--initial-branch=main`,t],MF({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(!H(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=L(`project-skill-git`),K9=/^[0-9a-f]{40}$/,JCe=Jt.map(e=>e.replace(/\/$/,``));async function YCe(e){let t=td(e);if(t===null)return{kind:`skipped`,reason:`no-git`};if($Ce(t))return{kind:`skipped`,reason:`operation-in-progress`};let n=ys(e);if((await q9(n)).length===0)return{kind:`nothing-tracked`};try{return await _s(async()=>{let t=await XCe(n);if(t===null)return{kind:`skipped`,reason:`detached-head`};let r=await ZCe(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=ys(e,{gitIndexFile:z(cu(),`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 QCe(n,r);if(s!==null&&s===o)return{kind:`nothing-tracked`};let c=await $U(e),l=c?.name??`OpenKnowledge`,u=c?.email??`sync@open-knowledge.local`;xs(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 \`${Da}\` 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 JCe){let r=``;try{r=(await e.git.raw([`ls-files`,`--`,n])).trim()}catch{r=``}r.length>0&&t.push(n)}return t}async function XCe(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 ZCe(e){try{let t=(await e.git.raw([`rev-parse`,`--verify`,`HEAD`])).trim();return K9.test(t)?t:null}catch{return null}}async function QCe(e,t){try{let n=(await e.git.raw([`rev-parse`,`${t}^{tree}`])).trim();return K9.test(n)?n:null}catch{return null}}function $Ce(e){return H(z(e,`MERGE_HEAD`))||H(z(e,`rebase-merge`))||H(z(e,`rebase-apply`))||H(z(e,`CHERRY_PICK_HEAD`))||H(z(e,`REVERT_HEAD`))}function J9(e){return e instanceof Error?e.message:String(e)}async function ewe(e,t){let n;try{n=vl(t).resolve(e)}catch(e){if(e?.code===`MODULE_NOT_FOUND`)return;throw e}for(let t=R(n),r=0;r<32;r+=1){let n=z(t,`package.json`);if(H(n))try{let t=JSON.parse(await pu(n,`utf-8`));if(t.name===e&&typeof t.version==`string`)return t.version}catch{}let r=R(t);if(r===t)return;t=r}}const twe=[{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 twe)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 nwe(e){if(!eC(e))throw new $9(e);let t;try{t=W(V(e))}catch(t){throw t.code===`ENOENT`?new Z9(e):t}if(!$l(t).isFile())throw new Q9(e);let n=R(t),r=LU(n);if(r){let e=r.rootPath;return{mode:`project`,projectRoot:e,docName:nC(B(rwe(e),t).split(Al).join(`/`)),canonicalFilePath:t}}let i=wl(t);return{mode:`ephemeral`,canonicalFilePath:t,contentDir:n,singleDocRelPath:i,docName:nC(i)}}function rwe(e){return V(e,No({absPath:Fo(`project`,e),sideline:!1,warn:()=>{}}).value.content?.dir??`.`)}function iwe(e){let t=Wl(V(cu(),`ok-ephemeral-`)),n=V(t,`.ok`);return Ul(n,{recursive:!0}),tu(V(n,`config.yml`),`# Ephemeral single-file session (\`ok <file>\`). Throwaway — safe to delete.\ncontent:\n dir: ${JSON.stringify(e)}\n`,`utf-8`),tu(V(n,`.gitignore`),`local/
2029
2029
  `,`utf-8`),t}export{spe as $,KS as $i,Uz as $n,iF as $r,IG as $t,X7 as A,dT as Ai,vU as An,kle as Ar,OZ as At,d7 as B,_C as Bi,lH as Bn,IF as Br,sJ as Bt,p9 as C,dD as Ci,eU as Cn,EL as Cr,VZ as Ct,Z7 as D,YT as Di,$H as Dn,SL as Dr,WX as Dt,J7 as E,eE as Ei,fU as En,CL as Er,xX as Et,oSe as F,DC as Fi,NH as Fn,WF as Fr,nJ as Ft,K8 as G,HS as Gi,_V as Gn,Ece as Gr,fJ as Gt,J8 as H,YS as Hi,pV as Hn,DF as Hr,vJ as Ht,b7 as I,bC as Ii,FH as In,HF as Ir,gJ as It,A8 as J,FS as Ji,Zz as Jn,wce as Jr,$q as Jt,U8 as K,LS as Ki,hV as Kn,Cce as Kr,cJ as Kt,y7 as L,pC as Li,PH as Ln,UF as Lr,mJ as Lt,R7 as M,NT as Mi,zH as Mn,yI as Mr,kJ as Mt,F7 as N,OC as Ni,BH as Nn,VF as Nr,EJ as Nt,K7 as O,XT as Oi,yU as On,Wle as Or,GX as Ot,v7 as P,q as Pi,MH as Pn,BF as Pr,xJ as Pt,Y2 as Q,JS as Qi,Hz as Qn,Yse as Qr,iK as Qt,Jxe as R,vC as Ri,AH as Rn,RF as Rr,_J as Rt,I9 as S,Ooe as Si,tU as Sn,DL as Sr,zZ as St,G7 as T,ZT as Ti,_U as Tn,Gle as Tr,SX as Tt,Y8 as U,BS as Ui,mV as Un,EF as Ur,uJ as Ut,c7 as V,fC as Vi,tH as Vn,MF as Vr,hJ as Vt,G8 as W,VS as Wi,gV as Wn,CF as Wr,lJ as Wt,U2 as X,XS as Xi,Wz as Xn,fF as Xr,oK as Xt,H2 as Y,zS as Yi,nB as Yn,pce as Yr,cK as Yt,W2 as Z,NS as Zi,Rz as Zn,yF as Zr,rK as Zt,PCe as _,id as _a,SO as _i,mW as _n,NL as _r,IZ as _t,nwe as a,bS as aa,nN as ai,GG as an,Dz as ar,Xfe as at,F9 as b,Gu as ba,hD as bi,JH as bn,Xle as br,RZ as bt,YCe as c,qh as ca,lM as ci,AG as cn,wz as cr,C2 as ct,GCe as d,Jh as da,mj as di,dW as dn,cz as dr,Q$ as dt,qS as ea,qse as ei,LG as en,Iz as er,I2 as et,VCe as f,Md as fa,Sj as fi,fW as fn,pz as fr,pue as ft,FCe as g,ad as ga,fj as gi,aW as gn,ML as gr,HZ as gt,WCe as h,Td as ha,pj as hi,pW as hn,$L as hr,ZZ as ht,iwe as i,SS as ia,tF as ii,RG as in,Ez as ir,Yfe as it,W7 as j,fT as ji,ZH as jn,bI as jr,IX as jt,Y7 as k,VT as ki,PU as kn,XI as kr,jZ as kt,W9 as l,Kh as la,Ej as li,DG as ln,dz as lr,W0 as lt,UCe as m,Nd as ma,hj as mi,gW as mn,zR as mr,g1 as mt,Z9 as n,jS as na,eF as ni,zG as nn,zz as nr,A2 as nt,X9 as o,pS as oa,tN as oi,VG as on,Tz as or,w2 as ot,HCe as p,Ed as pa,bj as pi,sW as pn,mz as pr,p1 as pt,B8 as q,WS as qi,aB as qn,Tce as qr,Qq as qt,$9 as r,wS as ra,nF as ri,nK as rn,Lz as rr,Jfe as rt,ewe as s,dae as sa,rN as si,jG as sn,vz as sr,S2 as st,Q9 as t,ZS as ta,rF as ti,PG as tn,Fz as tr,F2 as tt,qCe as u,Yh as ua,Cj as ui,rW as un,fz as ur,b1 as ut,MCe as v,Cd as va,_D as vi,LU as vn,PL as vr,BZ as vt,f9 as w,FT as wi,xU as wn,wL as wr,PZ as wt,P9 as x,Wu as xa,fD as xi,bU as xn,TL as xr,LZ as xt,R9 as y,nd as ya,gD as yi,IU as yn,jL as yr,FZ as yt,f7 as z,mC as zi,CH as zn,NF as zr,oJ as zt};
2030
- //# sourceMappingURL=src-CFTJ6mgL.mjs.map
2030
+ //# sourceMappingURL=src-D7xgi9Vi.mjs.map
@@ -1,4 +1,4 @@
1
- import{o as e}from"./chunk-DTipWd-i.mjs";import{Y as t}from"./sleep-C5OfWWWx.mjs";import{Lo as n,X as r,Z as i,bs as a,xs as o}from"./src-CA2-5ky_.mjs";import{Vr as s,at as c,it as l,nt as u,rt as d,si as f,vn as p,xa as m}from"./src-CFTJ6mgL.mjs";import{O as h,P as g}from"./fs-traced-OS6B1cZZ.mjs";import{S as _,u as v,v as y,x as b}from"./server-lock-BcVRTi0F.mjs";import{t as x}from"./yazl-BafwB467.mjs";import{T as S,b as C,d as w,i as ee,x as te}from"./write-project-skill-KxnphNDZ.mjs";import{c as ne}from"./colors-BsmVIwfM.mjs";import"./acp-harness-probe-Dnp9R5Ed.mjs";import{D as T,E,S as re,T as D,_ as O,b as ie,o as k,v as A}from"./init-DKNk15jt.mjs";import{n as j}from"./constants-DRhEm2ep.mjs";import{t as ae}from"./is-object-ByG7RnjH.mjs";import"./loader-DjvJBhtr.mjs";import"./preview-Dg4ywQIA.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=t();const ke=new Set([`start`,`stop`,`status`,`clean`,`ui`,`mcp`,`preview`,`lint`,`deinit`,`auth`]);function Ae(e,t,n=p){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`,s({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 t=F(e,`.ok`,`local`);return L(t)?{files:[`server.lock`,`last-spawn-error.log`,r].map(e=>F(t,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}=o(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{Y as t}from"./sleep-C5OfWWWx.mjs";import{Lo as n,X as r,Z as i,bs as a,xs as o}from"./src-CA2-5ky_.mjs";import{Vr as s,at as c,it as l,nt as u,rt as d,si as f,vn as p,xa as m}from"./src-D7xgi9Vi.mjs";import{O as h,P as g}from"./fs-traced-OS6B1cZZ.mjs";import{S as _,u as v,v as y,x as b}from"./server-lock-BcVRTi0F.mjs";import{t as x}from"./yazl-BafwB467.mjs";import{T as S,b as C,d as w,i as ee,x as te}from"./write-project-skill-B7SNlnFV.mjs";import{c as ne}from"./colors-BsmVIwfM.mjs";import"./acp-harness-probe-BhL2GGSC.mjs";import{D as T,E,S as re,T as D,_ as O,b as ie,o as k,v as A}from"./init-1Zuxwle3.mjs";import{n as j}from"./constants-Di8MswbY.mjs";import{t as ae}from"./is-object-ByG7RnjH.mjs";import"./loader-BTUi6QEO.mjs";import"./preview-KnQlnS2U.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=t();const ke=new Set([`start`,`stop`,`status`,`clean`,`ui`,`mcp`,`preview`,`lint`,`deinit`,`auth`]);function Ae(e,t,n=p){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`,s({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 t=F(e,`.ok`,`local`);return L(t)?{files:[`server.lock`,`last-spawn-error.log`,r].map(e=>F(t,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}=o(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(ne(),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{Y as t}from"./sleep-C5OfWWWx.mjs
17
17
  `).replace(/\n/g,`\r
18
18
  `));let u=`${i?``:``}${l}`;return u!==r&&g(e,u,{mode:D(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:d(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??u,n=e.inspect??Z,r=e.log??(e=>console.log(e)),i=e.resolveCommand??l,a=e.resolveUsage??c,o=await t(),s=[];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&&s.push(o)}if(e.json){let e=s.map(e=>({...e,displayStatus:Q(e)}));r(JSON.stringify(e,null,2));return}r(vn(e.all?s:s.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 u(),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:f(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 u();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(f(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 r,i;try{r=await V(I(e)),i=await V(I(P(e)))}catch{return{kind:`not-git`}}if(!On(r,i))return{kind:`symlink-escape`};let a=F(r,`.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,r))return{kind:`symlink-escape`}}else if(!o.isFile())return{kind:`not-git`};let s=m(r);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=n(u.hostname);if(d===null)return{kind:`non-github`};let f=d===t.host.toLowerCase(),p=u.owner.toLowerCase()===t.owner.toLowerCase(),h=u.name.toLowerCase()===t.repo.toLowerCase();return!f&&p&&h?{kind:`wrong-host`,actualHost:d}:!f||!p||!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=ee(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=w[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-BL0AYaKb.mjs.map
20
+ //# sourceMappingURL=src-SRUWG3aB.mjs.map
@@ -1 +1 @@
1
- import{Mo as e,No as t,P as n,Po as r,R as i,Yo as a,Zo as o,d as s,l as c,ss as l,ws as u}from"./src-CA2-5ky_.mjs";import{$ as d,$i as f,$n as p,$r as m,$t as h,A as g,Ai as _,An as v,Ar as y,At as b,B as x,Bi as S,Bn as C,Br as w,Bt as T,C as E,Ci as D,Cn as O,Cr as k,Ct as A,D as j,Di as M,Dn as N,Dt as P,E as F,Ei as I,En as L,Et as R,F as z,Fi as B,Fn as V,Fr as H,Ft as U,G as W,Gi as G,Gn as K,Gr as q,Gt as J,H as Y,Hi as X,Hn as Z,Hr as Q,Ht as $,I as ee,Ii as te,In as ne,Ir as re,It as ie,J as ae,Ji as oe,Jn as se,Jr as ce,Jt as le,K as ue,Ki as de,Kn as fe,Kr as pe,Kt as me,L as he,Li as ge,Ln as _e,Lr as ve,Lt as ye,M as be,Mi as xe,Mn as Se,Mr as Ce,Mt as we,N as Te,Ni as Ee,Nn as De,Nr as Oe,Nt as ke,O as Ae,Oi as je,On as Me,Ot as Ne,P as Pe,Pi as Fe,Pn as Ie,Pr as Le,Pt as Re,Q as ze,Qi as Be,Qn as Ve,Qr as He,Qt as Ue,R as We,Ri as Ge,Rn as Ke,Rr as qe,Rt as Je,S as Ye,Si as Xe,Sn as Ze,Sr as Qe,St as $e,T as et,Ti as tt,Tn as nt,Tt as rt,U as it,Ui as at,Un as ot,Ur as st,Ut as ct,V as lt,Vi as ut,Vn as dt,Vr as ft,Vt as pt,W as mt,Wi as ht,Wn as gt,Wr as _t,Wt as vt,X as yt,Xi as bt,Xn as xt,Xr as St,Xt as Ct,Y as wt,Yi as Tt,Yn as Et,Yr as Dt,Yt as Ot,Z as kt,Zi as At,Zn as jt,Zr as Mt,Zt as Nt,_ as Pt,_a as Ft,_n as It,_r as Lt,_t as Rt,a as zt,aa as Bt,ai as Vt,an as Ht,ar as Ut,at as Wt,b as Gt,bi as Kt,bn as qt,br as Jt,bt as Yt,c as Xt,ca as Zt,ci as Qt,cn as $t,cr as en,ct as tn,d as nn,da as rn,di as an,dn as on,dr as sn,ea as cn,ei as ln,en as un,er as dn,et as fn,f as pn,fa as mn,fi as hn,fn as gn,fr as _n,g as vn,ga as yn,gi as bn,gn as xn,gr as Sn,gt as Cn,h as wn,ha as Tn,hi as En,hn as Dn,hr as On,ht as kn,i as An,ia as jn,ii as Mn,in as Nn,ir as Pn,it as Fn,j as In,ji as Ln,jn as Rn,jr as zn,jt as Bn,k as Vn,ki as Hn,kn as Un,kr as Wn,kt as Gn,l as Kn,la as qn,li as Jn,ln as Yn,lr as Xn,m as Zn,ma as Qn,mi as $n,mn as er,mr as tr,n as nr,na as rr,ni as ir,nn as ar,nr as or,nt as sr,o as cr,oa as lr,oi as ur,on as dr,or as fr,ot as pr,p as mr,pa as hr,pi as gr,pn as _r,pr as vr,q as yr,qi as br,qn as xr,qr as Sr,qt as Cr,r as wr,ra as Tr,ri as Er,rn as Dr,rr as Or,rt as kr,s as Ar,sa as jr,si as Mr,sn as Nr,sr as Pr,st as Fr,t as Ir,ta as Lr,ti as Rr,tn as zr,tr as Br,tt as Vr,u as Hr,ua as Ur,ui as Wr,un as Gr,ur as Kr,v as qr,vi as Jr,vn as Yr,vr as Xr,vt as Zr,w as Qr,wi as $r,wn as ei,wt as ti,x as ni,xi as ri,xn as ii,xr as ai,xt as oi,y as si,yi as ci,yn as li,yr as ui,yt as di,z as fi,zi as pi,zn as mi,zr as hi,zt as gi}from"./src-CFTJ6mgL.mjs";import{C as _i,E as vi,T as yi,_ as bi,b as xi,c as Si,d as Ci,g as wi,i as Ti,l as Ei,m as Di,n as Oi,p as ki,s as Ai,t as ji,u as Mi,v as Ni,w as Pi,x as Fi,y as Ii}from"./fs-traced-OS6B1cZZ.mjs";import{a as Li,d as Ri,f as zi,i as Bi,l as Vi,n as Hi,r as Ui,t as Wi,u as Gi}from"./logger-5LePyO3n.mjs";import{S as Ki,_ as qi,a as Ji,c as Yi,f as Xi,g as Zi,h as Qi,i as $i,l as ea,m as ta,n as na,o as ra,p as ia,r as aa,s as oa,t as sa,u as ca,v as la,x as ua}from"./server-lock-BcVRTi0F.mjs";export{Zt as AGENT_ID_MAX_LEN,qn as AGENT_ID_RE,$r as AGENT_WRITE_ORIGIN,Tn as AcpPermissionStore,mn as AcpRegistry,ri as AcpThreadManager,ci as AgentFocusBroadcaster,Jr as AgentPresenceBroadcaster,tt as AgentSessionCapacityError,I as AgentSessionManager,Cn as AutoStartDisabledError,Xn as BUNDLE_IDS,Kr as BUNDLE_SCOPE,sn as BUNDLE_SKILL_NAME,C as BacklinkIndex,te as CC1Broadcaster,o as CC1_CONTRACT_VERSION,Gr as CONFIG_FILENAME,Ie as CONFLICT_MARKER_RE,Oe as CURSOR_BUNDLE_PATHS_BY_PLATFORM,Pt as ConfigSchema,X as DEFAULT_CHECKPOINT_RETENTION,Dt as DEFAULT_EMBEDDINGS_DIMENSIONS,U as DEFAULT_PACK_ID,lt as DocumentDurabilityState,St as EMBEDDINGS_API_KEY_ENV,hr as FEATURED_AGENT_IDS,at as FILE_SYSTEM_WRITER,Ke as FILE_WATCHER_ORIGIN,st as FileEmbeddingsBackend,Nt as GIT_PREFLIGHT_FAIL_SPAN_NAME,ht as GIT_UPSTREAM_WRITER,yn as GitDirAccessError,h as GitNotAvailableError,un as GitTooOldError,Rt as HOCUSPOCUS_AUTH_REJECTION_REASONS,Zr as HocuspocusAuthRejection,di as HocuspocusAuthTokenSchema,hi as INSTALLED_AGENTS_SCHEMES,a as LINEAGE_EPOCH_KEY,We as LIVE_DERIVED_INDEX_DEBOUNCE_MS,ie as LOG_MD_TEMPLATE,rt as MANAGED_RENAME_ORIGIN,Xe as MAX_ACP_THREADS,M as MAX_AGENT_SESSIONS,Fr as MCP_CONNECTION_ID_HEADER,e as MCP_SERVER_NAME,je as MIN_EVICTABLE_IDLE_MS,zr as MIN_GIT_VERSION,Y as MISSING_OK_CONFIG_MESSAGE,Ft as MalformedGitPointerError,d as McpLogger,it as MissingOkConfigError,_ as OBSERVER_SYNC_ORIGIN,on as OK_OKIGNORE_TEMPLATE,t as ORPHAN_MODES,u as PROTOCOL_VERSION,Wi as PinoLogger,Yi as ProcessLockCollisionError,Kn as ProjectGitInitError,R as ROLLBACK_ORIGIN,gn as ROOT_GITIGNORE_TEMPLATE,Zi as RUNTIME_VERSION,an as RemoteConfigError,G as SERVICE_WRITER,Pn as SKILL_INSTALL_EVENTS_FILE_REL,n as SKILL_STATE_TARGETS,ye as STARTER_FOLDERS,Je as STARTER_FOLDER_FRONTMATTER_FILENAME,gi as STARTER_PACKS,T as STARTER_PACK_IDS,pt as STARTER_TEMPLATES,et as STATE_MANIFEST_FILENAME,qi as STATE_SCHEMA_VERSION,l as SYSTEM_DOC_NAME,Cr as SeedPrerequisiteError,le as SeedRootDirError,sa as ServerLockCollisionError,Ir as SingleFileNotAFileError,nr as SingleFileNotFoundError,wr as SingleFileNotMarkdownError,F as StateManifestError,mi as TagIndex,_n as USER_GLOBAL_BUNDLE_IDS,Z as UiLockCollisionError,P as __getShowAllWalkStatsForTesting,Ne as __resetShowAllWalkStatsForTesting,ea as acquireProcessLock,na as acquireServerLock,ot as acquireUiLock,Hn as applyAgentMarkdownWrite,Se as applyExternalChange,Re as applySeed,j as assertCompatibleStateManifest,ar as assertGitAvailable,qt as assertNeverDiskEvent,Kt as attachAcpThreadSocket,kn as attachIdleShutdown,qr as bootServer,xr as buildAndOpenSkill,_r as buildConfigYmlContent,ae as buildExecResult,D as buildOkMcpStdioCommand,fr as buildSkillZip,$ as buildStarterFolderFrontmatterYaml,de as buildWipTree,vr as bundleSkillMdPath,_t as canonicalProjectKey,ii as classifyEvents,ji as classifyFsPath,q as clearAllEmbeddingsKeys,He as clearContributors,ct as coercePackId,c as colorFromSeed,br as commitUpstreamImport,oe as commitWip,Tt as commitWipFromTree,Dr as compareSemver,Sn as composeEffectiveLinterConfig,Lt as composeFrontmatterSchemasConfig,V as containsConflictMarkers,Ze as contentHash,m as contributorCount,Pe as countShadowObjects,z as countStaleAgentWipRefs,ee as countWipRefs,Gn as createApiExtension,Qt as createAssetServeMiddleware,Wn as createContentFilter,y as createContentFilterAsync,pe as createEmbeddingsSecretStore,An as createEphemeralProjectDir,De as createExternalChangeHandler,pn as createFileLogger,fi as createLiveDerivedIndexExtension,ue as createMcpHttpHandler,w as createOsProbe,Te as createPersistenceExtension,E as createServer,In as createServerObserverExtension,Ee as createStreamingErrorWriter,Hi as createTestLogger,Sr as describeStoredEmbeddingsKey,vn as detectClaudeDesktopPresence,Nn as detectGit,Ae as detectProjectShape,se as detectUserSkillHosts,sr as discoverLockDirs,Jt as discoverMarkdownlintConfig,Ue as emitPreflightFailureSpan,wt as encodeDocName,yt as encodeFolderRoute,kt as encodeSkillRoute,Hr as ensureProjectGit,er as ensureProjectSkillGitignore,Fe as errorResponse,O as evictStaleTrackerEntries,b as extractHeadings,kr as extractOkBinaryPath,dt as extractWikiLinksFromMarkdown,Ht as fallbackPaths,nn as findEnclosingGitRoot,Yr as findEnclosingProjectRoot,ai as findNativeMarkdownlintFile,mr as flushFileLogger,Yt as formatAuthRejectionWire,ln as formatContributors,Rr as formatContributorsFrom,we as formatPackRationale,bt as gcCheckpointRefs,fn as getCurrentMcpLogger,Vt as getLocalDir,Zn as getLogFilePath,Ui as getLogger,wn as getLogsDir,la as getMachineId,Ii as getMeter,Tr as getMetrics,xi as getTracer,jn as handleCollabSocketError,Le as handleSpawnCursor,hn as hasForwardingHeaders,he as hasGcLogLatch,s as iconFromClientName,Bt as incrementCollabSocketFilteredError,lr as incrementServerObserverFire,Dn as initContent,At as initShadowRepo,Fi as initTelemetry,Gt as initToleranceTelemetryWriter,pr as installPrettyZodErrors,Bi as installTestLoggers,Et as installUserSkill,Wr as isAllowedApiOrigin,En as isAllowedWorkspaceHostHeader,ge as isConfigDoc,oi as isHocuspocusAuthRejectionReason,vt as isKnownPackId,Ge as isLinkIndexExcludedDoc,bn as isLoopbackAddress,pi as isManagedArtifactDoc,r as isOrphanMode,Ln as isPairedWriteOrigin,H as isPathWithinDir,ua as isProcessAlive,li as isProjectRoot,gr as isRemoteAdmitted,S as isReservedForUserTree,ei as isSelfWrite,ut as isSystemDoc,ni as isToleranceTelemetryEnabled,Ki as isValidLockPid,nt as lastKnownHash,Be as listRescueCheckpoints,J as listStarterPacks,Qn as loadCustomAgents,be as loadPrincipal,ca as lockFilePath,Li as loggerFactory,Vi as logsCurrentPath,Gi as logsPreviousPath,ce as makeLazyEmbeddingsKeyStore,aa as markServerLockDraining,mt as mountMcpAndApi,Oi as normalizeFsPath,tr as originGitHubHost,xn as packageVersionMajorMinor,$e as parseAuthRejectionWire,dr as parseGitVersion,A as parseHocuspocusAuthToken,W as parseKeepaliveConnectionId,L as pathToDocName,ke as planSeed,zt as prepareSingleFileOpen,Fn as processCommand,Wt as processUsage,xt as readAllTargets,jt as readBundleDecision,Qe as readOwnNativeRules,Xi as readProcessLock,ia as readProcessLockDetailed,x as readProjectHeadState,Q as readProjectLocalSemanticConfig,$i as readServerLock,Ve as readServerPackageVersion,p as readSkillInstallStateSnapshot,Vn as readStateManifest,dn as readTargetRecordedAt,Br as readTargetVersion,gt as readUiLock,ne as reconcile,ir as recordContributor,Ut as recordSkillInstallEvent,yr as registerAllTools,N as registerWrite,ta as releaseProcessLock,Ji as releaseServerLock,K as releaseUiLock,Me as removeLastKnownHash,jr as resetMetrics,i as resolveBundleEnabled,Pr as resolveBundledSkillDir,ur as resolveContentDir,re as resolveCursorBinaryDefault,ve as resolveCursorSpawnInvocation,Xr as resolveEffectiveLinterConfig,Mt as resolveEmbeddingsCredential,Mr as resolveLockDir,ui as resolveNativeConfigForDoc,k as resolveNativeMarkdownlintConfig,me as resolvePack,Ar as resolvePackageVersion,$n as resolveRemoteAccess,ze as resolveUiInfo,Er as restoreContributors,si as restoreLifecycleFromConflictsJson,zn as rewriteMarkdownLinksForDocumentRename,Ce as rewriteWikiLinksForDocumentRename,Nr as runAuthReposSubprocess,$t as runAuthStatusSubprocess,Ot as runCloneSubprocess,Yn as runDeviceFlowSubprocess,Vr as runWithMcpLogger,Jn as safeContentPath,Bn as safeSubdir,f as safetyCheckpoint,tn as sanitizeClientName,cn as saveInMemoryCheckpoint,Lr as saveVersion,ti as seedBasenameIndex,cr as serializeError,_i as setActiveSpanAttributes,xe as setupServerObservers,rr as shadowGit,Pi as shutdownTelemetry,Ri as spansCurrentPath,zi as spansPreviousPath,qe as spawnDetached,_e as splitMarkdownBlocks,Un as startWatcher,B as streamingProblemEvent,Mn as swapContributors,Ye as teardownToleranceTelemetryWriter,Ur as toBroadcasterKey,Ti as tracedAppendFileSync,Ai as tracedLinkSync,Si as tracedMkdir,Ei as tracedMkdirSync,Mi as tracedRename,Ci as tracedRenameSync,ki as tracedRmSync,Di as tracedRmdirSync,wi as tracedUnlinkSync,bi as tracedWriteFile,Ni as tracedWriteFileSync,Qr as trustSystemCertificates,Xt as untrackTrackedProjectSkillProjection,v as updateLastKnownHash,Qi as updateProcessLockPort,ra as updateServerLockPort,fe as updateUiLockPort,rn as validateAgentId,Ct as validateCloneInputs,en as validateSkillZip,oa as waitForServerLockDrain,ft as withHiddenWindowsConsole,yi as withSpan,vi as withSpanSync,or as writeBundleDecision,On as writeMarkdownlintRule,It as writeRootGitignoreForNewRepo,g as writeStateManifest,Or as writeTargetVersion,Rn as writeTracker};
1
+ import{Mo as e,No as t,P as n,Po as r,R as i,Yo as a,Zo as o,d as s,l as c,ss as l,ws as u}from"./src-CA2-5ky_.mjs";import{$ as d,$i as f,$n as p,$r as m,$t as h,A as g,Ai as _,An as v,Ar as y,At as b,B as x,Bi as S,Bn as C,Br as w,Bt as T,C as E,Ci as D,Cn as O,Cr as k,Ct as A,D as j,Di as M,Dn as N,Dt as P,E as F,Ei as I,En as L,Et as R,F as z,Fi as B,Fn as V,Fr as H,Ft as U,G as W,Gi as G,Gn as K,Gr as q,Gt as J,H as Y,Hi as X,Hn as Z,Hr as Q,Ht as $,I as ee,Ii as te,In as ne,Ir as re,It as ie,J as ae,Ji as oe,Jn as se,Jr as ce,Jt as le,K as ue,Ki as de,Kn as fe,Kr as pe,Kt as me,L as he,Li as ge,Ln as _e,Lr as ve,Lt as ye,M as be,Mi as xe,Mn as Se,Mr as Ce,Mt as we,N as Te,Ni as Ee,Nn as De,Nr as Oe,Nt as ke,O as Ae,Oi as je,On as Me,Ot as Ne,P as Pe,Pi as Fe,Pn as Ie,Pr as Le,Pt as Re,Q as ze,Qi as Be,Qn as Ve,Qr as He,Qt as Ue,R as We,Ri as Ge,Rn as Ke,Rr as qe,Rt as Je,S as Ye,Si as Xe,Sn as Ze,Sr as Qe,St as $e,T as et,Ti as tt,Tn as nt,Tt as rt,U as it,Ui as at,Un as ot,Ur as st,Ut as ct,V as lt,Vi as ut,Vn as dt,Vr as ft,Vt as pt,W as mt,Wi as ht,Wn as gt,Wr as _t,Wt as vt,X as yt,Xi as bt,Xn as xt,Xr as St,Xt as Ct,Y as wt,Yi as Tt,Yn as Et,Yr as Dt,Yt as Ot,Z as kt,Zi as At,Zn as jt,Zr as Mt,Zt as Nt,_ as Pt,_a as Ft,_n as It,_r as Lt,_t as Rt,a as zt,aa as Bt,ai as Vt,an as Ht,ar as Ut,at as Wt,b as Gt,bi as Kt,bn as qt,br as Jt,bt as Yt,c as Xt,ca as Zt,ci as Qt,cn as $t,cr as en,ct as tn,d as nn,da as rn,di as an,dn as on,dr as sn,ea as cn,ei as ln,en as un,er as dn,et as fn,f as pn,fa as mn,fi as hn,fn as gn,fr as _n,g as vn,ga as yn,gi as bn,gn as xn,gr as Sn,gt as Cn,h as wn,ha as Tn,hi as En,hn as Dn,hr as On,ht as kn,i as An,ia as jn,ii as Mn,in as Nn,ir as Pn,it as Fn,j as In,ji as Ln,jn as Rn,jr as zn,jt as Bn,k as Vn,ki as Hn,kn as Un,kr as Wn,kt as Gn,l as Kn,la as qn,li as Jn,ln as Yn,lr as Xn,m as Zn,ma as Qn,mi as $n,mn as er,mr as tr,n as nr,na as rr,ni as ir,nn as ar,nr as or,nt as sr,o as cr,oa as lr,oi as ur,on as dr,or as fr,ot as pr,p as mr,pa as hr,pi as gr,pn as _r,pr as vr,q as yr,qi as br,qn as xr,qr as Sr,qt as Cr,r as wr,ra as Tr,ri as Er,rn as Dr,rr as Or,rt as kr,s as Ar,sa as jr,si as Mr,sn as Nr,sr as Pr,st as Fr,t as Ir,ta as Lr,ti as Rr,tn as zr,tr as Br,tt as Vr,u as Hr,ua as Ur,ui as Wr,un as Gr,ur as Kr,v as qr,vi as Jr,vn as Yr,vr as Xr,vt as Zr,w as Qr,wi as $r,wn as ei,wt as ti,x as ni,xi as ri,xn as ii,xr as ai,xt as oi,y as si,yi as ci,yn as li,yr as ui,yt as di,z as fi,zi as pi,zn as mi,zr as hi,zt as gi}from"./src-D7xgi9Vi.mjs";import{C as _i,E as vi,T as yi,_ as bi,b as xi,c as Si,d as Ci,g as wi,i as Ti,l as Ei,m as Di,n as Oi,p as ki,s as Ai,t as ji,u as Mi,v as Ni,w as Pi,x as Fi,y as Ii}from"./fs-traced-OS6B1cZZ.mjs";import{a as Li,d as Ri,f as zi,i as Bi,l as Vi,n as Hi,r as Ui,t as Wi,u as Gi}from"./logger-5LePyO3n.mjs";import{S as Ki,_ as qi,a as Ji,c as Yi,f as Xi,g as Zi,h as Qi,i as $i,l as ea,m as ta,n as na,o as ra,p as ia,r as aa,s as oa,t as sa,u as ca,v as la,x as ua}from"./server-lock-BcVRTi0F.mjs";export{Zt as AGENT_ID_MAX_LEN,qn as AGENT_ID_RE,$r as AGENT_WRITE_ORIGIN,Tn as AcpPermissionStore,mn as AcpRegistry,ri as AcpThreadManager,ci as AgentFocusBroadcaster,Jr as AgentPresenceBroadcaster,tt as AgentSessionCapacityError,I as AgentSessionManager,Cn as AutoStartDisabledError,Xn as BUNDLE_IDS,Kr as BUNDLE_SCOPE,sn as BUNDLE_SKILL_NAME,C as BacklinkIndex,te as CC1Broadcaster,o as CC1_CONTRACT_VERSION,Gr as CONFIG_FILENAME,Ie as CONFLICT_MARKER_RE,Oe as CURSOR_BUNDLE_PATHS_BY_PLATFORM,Pt as ConfigSchema,X as DEFAULT_CHECKPOINT_RETENTION,Dt as DEFAULT_EMBEDDINGS_DIMENSIONS,U as DEFAULT_PACK_ID,lt as DocumentDurabilityState,St as EMBEDDINGS_API_KEY_ENV,hr as FEATURED_AGENT_IDS,at as FILE_SYSTEM_WRITER,Ke as FILE_WATCHER_ORIGIN,st as FileEmbeddingsBackend,Nt as GIT_PREFLIGHT_FAIL_SPAN_NAME,ht as GIT_UPSTREAM_WRITER,yn as GitDirAccessError,h as GitNotAvailableError,un as GitTooOldError,Rt as HOCUSPOCUS_AUTH_REJECTION_REASONS,Zr as HocuspocusAuthRejection,di as HocuspocusAuthTokenSchema,hi as INSTALLED_AGENTS_SCHEMES,a as LINEAGE_EPOCH_KEY,We as LIVE_DERIVED_INDEX_DEBOUNCE_MS,ie as LOG_MD_TEMPLATE,rt as MANAGED_RENAME_ORIGIN,Xe as MAX_ACP_THREADS,M as MAX_AGENT_SESSIONS,Fr as MCP_CONNECTION_ID_HEADER,e as MCP_SERVER_NAME,je as MIN_EVICTABLE_IDLE_MS,zr as MIN_GIT_VERSION,Y as MISSING_OK_CONFIG_MESSAGE,Ft as MalformedGitPointerError,d as McpLogger,it as MissingOkConfigError,_ as OBSERVER_SYNC_ORIGIN,on as OK_OKIGNORE_TEMPLATE,t as ORPHAN_MODES,u as PROTOCOL_VERSION,Wi as PinoLogger,Yi as ProcessLockCollisionError,Kn as ProjectGitInitError,R as ROLLBACK_ORIGIN,gn as ROOT_GITIGNORE_TEMPLATE,Zi as RUNTIME_VERSION,an as RemoteConfigError,G as SERVICE_WRITER,Pn as SKILL_INSTALL_EVENTS_FILE_REL,n as SKILL_STATE_TARGETS,ye as STARTER_FOLDERS,Je as STARTER_FOLDER_FRONTMATTER_FILENAME,gi as STARTER_PACKS,T as STARTER_PACK_IDS,pt as STARTER_TEMPLATES,et as STATE_MANIFEST_FILENAME,qi as STATE_SCHEMA_VERSION,l as SYSTEM_DOC_NAME,Cr as SeedPrerequisiteError,le as SeedRootDirError,sa as ServerLockCollisionError,Ir as SingleFileNotAFileError,nr as SingleFileNotFoundError,wr as SingleFileNotMarkdownError,F as StateManifestError,mi as TagIndex,_n as USER_GLOBAL_BUNDLE_IDS,Z as UiLockCollisionError,P as __getShowAllWalkStatsForTesting,Ne as __resetShowAllWalkStatsForTesting,ea as acquireProcessLock,na as acquireServerLock,ot as acquireUiLock,Hn as applyAgentMarkdownWrite,Se as applyExternalChange,Re as applySeed,j as assertCompatibleStateManifest,ar as assertGitAvailable,qt as assertNeverDiskEvent,Kt as attachAcpThreadSocket,kn as attachIdleShutdown,qr as bootServer,xr as buildAndOpenSkill,_r as buildConfigYmlContent,ae as buildExecResult,D as buildOkMcpStdioCommand,fr as buildSkillZip,$ as buildStarterFolderFrontmatterYaml,de as buildWipTree,vr as bundleSkillMdPath,_t as canonicalProjectKey,ii as classifyEvents,ji as classifyFsPath,q as clearAllEmbeddingsKeys,He as clearContributors,ct as coercePackId,c as colorFromSeed,br as commitUpstreamImport,oe as commitWip,Tt as commitWipFromTree,Dr as compareSemver,Sn as composeEffectiveLinterConfig,Lt as composeFrontmatterSchemasConfig,V as containsConflictMarkers,Ze as contentHash,m as contributorCount,Pe as countShadowObjects,z as countStaleAgentWipRefs,ee as countWipRefs,Gn as createApiExtension,Qt as createAssetServeMiddleware,Wn as createContentFilter,y as createContentFilterAsync,pe as createEmbeddingsSecretStore,An as createEphemeralProjectDir,De as createExternalChangeHandler,pn as createFileLogger,fi as createLiveDerivedIndexExtension,ue as createMcpHttpHandler,w as createOsProbe,Te as createPersistenceExtension,E as createServer,In as createServerObserverExtension,Ee as createStreamingErrorWriter,Hi as createTestLogger,Sr as describeStoredEmbeddingsKey,vn as detectClaudeDesktopPresence,Nn as detectGit,Ae as detectProjectShape,se as detectUserSkillHosts,sr as discoverLockDirs,Jt as discoverMarkdownlintConfig,Ue as emitPreflightFailureSpan,wt as encodeDocName,yt as encodeFolderRoute,kt as encodeSkillRoute,Hr as ensureProjectGit,er as ensureProjectSkillGitignore,Fe as errorResponse,O as evictStaleTrackerEntries,b as extractHeadings,kr as extractOkBinaryPath,dt as extractWikiLinksFromMarkdown,Ht as fallbackPaths,nn as findEnclosingGitRoot,Yr as findEnclosingProjectRoot,ai as findNativeMarkdownlintFile,mr as flushFileLogger,Yt as formatAuthRejectionWire,ln as formatContributors,Rr as formatContributorsFrom,we as formatPackRationale,bt as gcCheckpointRefs,fn as getCurrentMcpLogger,Vt as getLocalDir,Zn as getLogFilePath,Ui as getLogger,wn as getLogsDir,la as getMachineId,Ii as getMeter,Tr as getMetrics,xi as getTracer,jn as handleCollabSocketError,Le as handleSpawnCursor,hn as hasForwardingHeaders,he as hasGcLogLatch,s as iconFromClientName,Bt as incrementCollabSocketFilteredError,lr as incrementServerObserverFire,Dn as initContent,At as initShadowRepo,Fi as initTelemetry,Gt as initToleranceTelemetryWriter,pr as installPrettyZodErrors,Bi as installTestLoggers,Et as installUserSkill,Wr as isAllowedApiOrigin,En as isAllowedWorkspaceHostHeader,ge as isConfigDoc,oi as isHocuspocusAuthRejectionReason,vt as isKnownPackId,Ge as isLinkIndexExcludedDoc,bn as isLoopbackAddress,pi as isManagedArtifactDoc,r as isOrphanMode,Ln as isPairedWriteOrigin,H as isPathWithinDir,ua as isProcessAlive,li as isProjectRoot,gr as isRemoteAdmitted,S as isReservedForUserTree,ei as isSelfWrite,ut as isSystemDoc,ni as isToleranceTelemetryEnabled,Ki as isValidLockPid,nt as lastKnownHash,Be as listRescueCheckpoints,J as listStarterPacks,Qn as loadCustomAgents,be as loadPrincipal,ca as lockFilePath,Li as loggerFactory,Vi as logsCurrentPath,Gi as logsPreviousPath,ce as makeLazyEmbeddingsKeyStore,aa as markServerLockDraining,mt as mountMcpAndApi,Oi as normalizeFsPath,tr as originGitHubHost,xn as packageVersionMajorMinor,$e as parseAuthRejectionWire,dr as parseGitVersion,A as parseHocuspocusAuthToken,W as parseKeepaliveConnectionId,L as pathToDocName,ke as planSeed,zt as prepareSingleFileOpen,Fn as processCommand,Wt as processUsage,xt as readAllTargets,jt as readBundleDecision,Qe as readOwnNativeRules,Xi as readProcessLock,ia as readProcessLockDetailed,x as readProjectHeadState,Q as readProjectLocalSemanticConfig,$i as readServerLock,Ve as readServerPackageVersion,p as readSkillInstallStateSnapshot,Vn as readStateManifest,dn as readTargetRecordedAt,Br as readTargetVersion,gt as readUiLock,ne as reconcile,ir as recordContributor,Ut as recordSkillInstallEvent,yr as registerAllTools,N as registerWrite,ta as releaseProcessLock,Ji as releaseServerLock,K as releaseUiLock,Me as removeLastKnownHash,jr as resetMetrics,i as resolveBundleEnabled,Pr as resolveBundledSkillDir,ur as resolveContentDir,re as resolveCursorBinaryDefault,ve as resolveCursorSpawnInvocation,Xr as resolveEffectiveLinterConfig,Mt as resolveEmbeddingsCredential,Mr as resolveLockDir,ui as resolveNativeConfigForDoc,k as resolveNativeMarkdownlintConfig,me as resolvePack,Ar as resolvePackageVersion,$n as resolveRemoteAccess,ze as resolveUiInfo,Er as restoreContributors,si as restoreLifecycleFromConflictsJson,zn as rewriteMarkdownLinksForDocumentRename,Ce as rewriteWikiLinksForDocumentRename,Nr as runAuthReposSubprocess,$t as runAuthStatusSubprocess,Ot as runCloneSubprocess,Yn as runDeviceFlowSubprocess,Vr as runWithMcpLogger,Jn as safeContentPath,Bn as safeSubdir,f as safetyCheckpoint,tn as sanitizeClientName,cn as saveInMemoryCheckpoint,Lr as saveVersion,ti as seedBasenameIndex,cr as serializeError,_i as setActiveSpanAttributes,xe as setupServerObservers,rr as shadowGit,Pi as shutdownTelemetry,Ri as spansCurrentPath,zi as spansPreviousPath,qe as spawnDetached,_e as splitMarkdownBlocks,Un as startWatcher,B as streamingProblemEvent,Mn as swapContributors,Ye as teardownToleranceTelemetryWriter,Ur as toBroadcasterKey,Ti as tracedAppendFileSync,Ai as tracedLinkSync,Si as tracedMkdir,Ei as tracedMkdirSync,Mi as tracedRename,Ci as tracedRenameSync,ki as tracedRmSync,Di as tracedRmdirSync,wi as tracedUnlinkSync,bi as tracedWriteFile,Ni as tracedWriteFileSync,Qr as trustSystemCertificates,Xt as untrackTrackedProjectSkillProjection,v as updateLastKnownHash,Qi as updateProcessLockPort,ra as updateServerLockPort,fe as updateUiLockPort,rn as validateAgentId,Ct as validateCloneInputs,en as validateSkillZip,oa as waitForServerLockDrain,ft as withHiddenWindowsConsole,yi as withSpan,vi as withSpanSync,or as writeBundleDecision,On as writeMarkdownlintRule,It as writeRootGitignoreForNewRepo,g as writeStateManifest,Or as writeTargetVersion,Rn as writeTracker};
@@ -0,0 +1 @@
1
+ import{p as e,r as t,v as n}from"./start-DNL0T2JV.mjs";export{t as bootStartServer,e as resolveHost,n as startCommand};