very-happy-cli 0.2.180 → 0.2.182

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 (202) hide show
  1. package/dist/{AcpBackend-B8Zi30Zh.mjs → AcpBackend-DLk3gMYH.mjs} +3 -3
  2. package/dist/{AcpBackend-DfRDtMcG.cjs → AcpBackend-JA5eu8Y0.cjs} +3 -3
  3. package/dist/{AcpSessionManager-CASKOnOj.cjs → AcpSessionManager-DjYidq4C.cjs} +1 -1
  4. package/dist/{AcpSessionManager-i8Rab0xT.mjs → AcpSessionManager-OrCww-Qv.mjs} +1 -1
  5. package/dist/{BasePermissionHandler-BlM_tfej.cjs → BasePermissionHandler-D3PMKLBS.cjs} +1 -1
  6. package/dist/{BasePermissionHandler-26fKbRCm.mjs → BasePermissionHandler-u-neo-iN.mjs} +1 -1
  7. package/dist/{acpSessionResume-CR5pmgVo.cjs → acpSessionResume-Dxo8222T.cjs} +1 -1
  8. package/dist/{acpSessionResume-B9l54P-X.mjs → acpSessionResume-u2TwX5Jd.mjs} +1 -1
  9. package/dist/{agentHome-C7Sb7-Tz.cjs → agentHome-CP1tCBXz.cjs} +4 -4
  10. package/dist/{agentHome-CmGy0NWv.mjs → agentHome-D3hNrnoA.mjs} +4 -4
  11. package/dist/{api-DM7b1OKj.cjs → api-CZWcG7uh.cjs} +10 -10
  12. package/dist/{api-Hov8p7CA.mjs → api-C_YSQnsi.mjs} +10 -10
  13. package/dist/{apiMachine-CwGEhQDT.mjs → apiMachine-C_GA5Bm-.mjs} +59 -32
  14. package/dist/{apiMachine-DkGRj-Ai.cjs → apiMachine-DPGrED5C.cjs} +60 -33
  15. package/dist/{attachmentContent-CIn4iPEk.mjs → attachmentContent-Ckzyb1Uy.mjs} +2 -2
  16. package/dist/{attachmentContent-CEm13_gF.cjs → attachmentContent-I_dJIevE.cjs} +2 -2
  17. package/dist/{auth-Dawj7pP5.cjs → auth-BKnE7uv7.cjs} +8 -8
  18. package/dist/{auth-BG1DY0gj.mjs → auth-CGgpiJ5-.mjs} +5 -5
  19. package/dist/{auth-rggxMpEE.mjs → auth-DOXMI-xp.mjs} +8 -8
  20. package/dist/{auth-CBXnm-Mj.cjs → auth-Lw_utSMV.cjs} +5 -5
  21. package/dist/{auto-CbYOfoPS.cjs → auto-CIgFHIyQ.cjs} +18 -18
  22. package/dist/{auto-CXXLXGeL.mjs → auto-Z56mMZnH.mjs} +18 -18
  23. package/dist/{bootstrap-Dt5I1SOl.mjs → bootstrap-D3vlOROj.mjs} +2 -2
  24. package/dist/{bootstrap-DoA7okld.cjs → bootstrap-DsXp74wv.cjs} +2 -2
  25. package/dist/{browser-DUNetFT4.mjs → browser-CUxGoATV.mjs} +1 -1
  26. package/dist/{browser-DZ6qRtfH.cjs → browser-CZlA9AkO.cjs} +1 -1
  27. package/dist/{claudeLocal-OHWQigCl.mjs → claudeLocal-FnTUgwCi.mjs} +6 -6
  28. package/dist/{claudeLocal--DNyMOSv.cjs → claudeLocal-oELvwiZL.cjs} +6 -6
  29. package/dist/{claudeLocalLauncher-BStvfa7M.mjs → claudeLocalLauncher-CO5YHCzi.mjs} +11 -11
  30. package/dist/{claudeLocalLauncher-BhvPbcyH.cjs → claudeLocalLauncher-QsVXEVdE.cjs} +11 -11
  31. package/dist/{claudeSessionFork-Be16vzGc.cjs → claudeSessionFork-BA4GE5AL.cjs} +1 -1
  32. package/dist/{claudeSessionFork-GAVWhiKG.mjs → claudeSessionFork-Cspr6QW0.mjs} +1 -1
  33. package/dist/{client-D4uPb1uu.mjs → client-BGfmSbWc.mjs} +44 -9
  34. package/dist/{client-BWjaHKtj.cjs → client-CDuW4MS9.cjs} +2 -2
  35. package/dist/{client-CnB7kRCT.mjs → client-Ctbw05Xj.mjs} +2 -2
  36. package/dist/{client-DJplzPjD.cjs → client-DK8CzUry.cjs} +2 -2
  37. package/dist/{client-Ca5Pcgy_.mjs → client-o-meK7-a.mjs} +2 -2
  38. package/dist/{client-D_loZ9IK.cjs → client-xnWiHqdb.cjs} +44 -8
  39. package/dist/codex/happyMcpStdioBridge.cjs +21 -20
  40. package/dist/codex/happyMcpStdioBridge.mjs +21 -20
  41. package/dist/{codexAppServerClient-CO4G6OS4.mjs → codexAppServerClient-BlsOZLul.mjs} +3 -3
  42. package/dist/{codexAppServerClient-PE-12AsW.cjs → codexAppServerClient-DhNDTU_i.cjs} +3 -3
  43. package/dist/{codexCommand-B_xUH79E.mjs → codexCommand-BGx5NMQR.mjs} +49 -46
  44. package/dist/{codexCommand-BNoD1t1C.cjs → codexCommand-DJDPfpIs.cjs} +49 -46
  45. package/dist/{codexTermination-Dx48ma6e.mjs → codexTermination-CVhhwHZU.mjs} +1 -1
  46. package/dist/{codexTermination-BmBbizFK.cjs → codexTermination-CqPMuokw.cjs} +1 -1
  47. package/dist/{config-CtwEUxUP.cjs → config-CHpxzXBL.cjs} +3 -3
  48. package/dist/{config-DSu0Blos.mjs → config-CWAe08-Q.mjs} +3 -3
  49. package/dist/{configuration-CYO-kPOS.cjs → configuration-B-CugKJ3.cjs} +1 -1
  50. package/dist/{configuration-PxzEJumr.mjs → configuration-YXw_Dcsb.mjs} +1 -1
  51. package/dist/{connect-Dq7wndzR.cjs → connect-BmHvMXH2.cjs} +13 -13
  52. package/dist/{connect-BQrg3TB6.mjs → connect-CPeJXHha.mjs} +13 -13
  53. package/dist/{context-6TP-iz_c.cjs → context-BtIVqHI5.cjs} +1 -1
  54. package/dist/{context-CJGRRGWW.mjs → context-Drzs_Z38.mjs} +1 -1
  55. package/dist/{controlClient-DoeYovwP.mjs → controlClient-BL4hb4l3.mjs} +3 -3
  56. package/dist/{controlClient-Bqv5v5OM.cjs → controlClient-D0kGwKYx.cjs} +3 -3
  57. package/dist/{createSessionMetadata-DDIChCx8.mjs → createSessionMetadata-DvGDsnsn.mjs} +2 -2
  58. package/dist/{createSessionMetadata-xz767pcG.cjs → createSessionMetadata-L499emJn.cjs} +2 -2
  59. package/dist/{defaultPermissionMode-i5KzdK09.mjs → defaultPermissionMode-BLfxu-Yz.mjs} +2 -2
  60. package/dist/{defaultPermissionMode-PkZGsQDk.cjs → defaultPermissionMode-MXpZlXud.cjs} +2 -2
  61. package/dist/{deterministicJson-CTEJDqtS.mjs → deterministicJson-B_UAbmQ4.mjs} +87 -24
  62. package/dist/{deterministicJson-xqA6DaOm.cjs → deterministicJson-CfLkBRvU.cjs} +87 -22
  63. package/dist/{doctor-BrgSlfXn.cjs → doctor-DMvlzmnE.cjs} +8 -7
  64. package/dist/{doctor-IctjVh9T.mjs → doctor-bKScPtZu.mjs} +8 -8
  65. package/dist/{downloadTarget-CEb9che-.cjs → downloadTarget-D33BFvew.cjs} +6 -6
  66. package/dist/{downloadTarget-jbOz1egC.mjs → downloadTarget-J9j37eFG.mjs} +6 -6
  67. package/dist/{ensureDaemonRunning-D-HyjGIX.cjs → ensureDaemonRunning-2IqWROJp.cjs} +5 -5
  68. package/dist/{ensureDaemonRunning-b1e8LCSM.mjs → ensureDaemonRunning-DLvwhpNg.mjs} +5 -5
  69. package/dist/fileStore-5qpetZS0.mjs +146 -0
  70. package/dist/fileStore-7qhnbs6N.cjs +152 -0
  71. package/dist/fsMkdir-0K3yENml.cjs +56 -0
  72. package/dist/fsMkdir-DumgLTzR.mjs +53 -0
  73. package/dist/{handleResumeCommand-DpaZvm2c.mjs → handleResumeCommand-CjtjQ_I7.mjs} +5 -5
  74. package/dist/{handleResumeCommand-BvWVuRwH.cjs → handleResumeCommand-Dp2Y-p6V.cjs} +5 -5
  75. package/dist/{index-C6Vn5Eac.mjs → index-BI0h2Zks.mjs} +54 -6
  76. package/dist/{index-CMf5VbzG.mjs → index-BOT0Tg5E.mjs} +4 -4
  77. package/dist/{index-C64Ufj4D.cjs → index-B_aNaW9w.cjs} +4 -4
  78. package/dist/{index-F2UejqYs.cjs → index-CZC7egJA.cjs} +3 -3
  79. package/dist/{index-Bsvbgh9e.mjs → index-Cllzqoes.mjs} +4 -4
  80. package/dist/{index-B2p2Mut7.cjs → index-DYVIbhAJ.cjs} +78 -60
  81. package/dist/{index-wCbtF4BK.mjs → index-D_LvOWUN.mjs} +3 -3
  82. package/dist/{index-DmTlDRSL.cjs → index-DymOv3kK.cjs} +4 -4
  83. package/dist/{index-BUNnpGFF.mjs → index-kA46KMxN.mjs} +79 -61
  84. package/dist/{index-Dv0Q48P3.cjs → index-oh8XEozJ.cjs} +57 -6
  85. package/dist/index.cjs +2 -2
  86. package/dist/index.mjs +2 -2
  87. package/dist/{install-C0ANcEAW.cjs → install-BAa_Xmof.cjs} +3 -3
  88. package/dist/{install-CdzSV7qO.mjs → install-C46mkr9a.mjs} +3 -3
  89. package/dist/{install-BX3lv3NO.mjs → install-D0inLCv-.mjs} +1 -1
  90. package/dist/{install-BXvf2E3o.cjs → install-D2NCbeJ-.cjs} +1 -1
  91. package/dist/lib.cjs +12 -12
  92. package/dist/lib.d.cts +40 -1
  93. package/dist/lib.d.mts +40 -1
  94. package/dist/lib.mjs +12 -12
  95. package/dist/{lidState-bBrmaQd2.mjs → lidState-D8Iuvjgl.mjs} +1 -1
  96. package/dist/{lidState-DWGnm2H4.cjs → lidState-DcPvwniz.cjs} +1 -1
  97. package/dist/{localHappyAgentAuth-Dn1jYDpt.mjs → localHappyAgentAuth-D3rQDRd9.mjs} +1 -1
  98. package/dist/{localHappyAgentAuth-DZHQnIW9.cjs → localHappyAgentAuth-SD6GM97y.cjs} +1 -1
  99. package/dist/{logger-CphW5nUE.cjs → logger-DK1ytCz6.cjs} +2 -2
  100. package/dist/{logger-BUngm5Xg.mjs → logger-DpqihN1f.mjs} +2 -2
  101. package/dist/{machineMetadata-BXN_bKU3.mjs → machineMetadata-D4E3qoIG.mjs} +13 -4
  102. package/dist/{machineMetadata-BQm9YTcI.cjs → machineMetadata-IJc6_iyx.cjs} +13 -3
  103. package/dist/{main-DGkdYfEq.mjs → main-CpUmw7hm.mjs} +45 -45
  104. package/dist/{main-B2UV51nK.cjs → main-DUXh2rgW.cjs} +45 -45
  105. package/dist/{mcp-CbTtbs0f.mjs → mcp-66g1TJ8P.mjs} +17 -15
  106. package/dist/{mcp-BFvAEIRz.cjs → mcp-D5f3Vd-z.cjs} +17 -15
  107. package/dist/{mirrorProtocol-HKPivs5o.cjs → mirrorProtocol-DkWOcZh9.cjs} +16 -153
  108. package/dist/{mirrorProtocol-BR4luBC0.mjs → mirrorProtocol-bsCUcaCY.mjs} +19 -151
  109. package/dist/{package-KhLqBDX9.cjs → package-BfeqAzyJ.cjs} +8 -8
  110. package/dist/{package-7Ld1YMhh.mjs → package-CKj8zndE.mjs} +8 -8
  111. package/dist/{panels-Njf6GelF.cjs → panels-2PXsw9-d.cjs} +5 -5
  112. package/dist/{panels-C7IVqpJk.mjs → panels-r8LmaBs6.mjs} +5 -5
  113. package/dist/{peerTools-DQNlrcqM.cjs → peerTools-BVp1z0T_.cjs} +5 -5
  114. package/dist/{peerTools-BOlDRyhi.mjs → peerTools-D_id4d41.mjs} +5 -5
  115. package/dist/{persistence-9BMYspxG.cjs → persistence-BdpwWXKh.cjs} +2 -2
  116. package/dist/{persistence-BFUOHW5h.mjs → persistence-jOEuAFTS.mjs} +2 -2
  117. package/dist/pi-CqyoZMjI.mjs +380 -0
  118. package/dist/pi-DlsrPCTa.cjs +400 -0
  119. package/dist/{piRunnerArgs-H2pgpA5z.mjs → piRunnerArgs-68I5F_M1.mjs} +1 -1
  120. package/dist/{piRunnerArgs-DGaq6VYM.cjs → piRunnerArgs-vxCHKnSA.cjs} +1 -1
  121. package/dist/{piRuntime-CT5xv_3h.cjs → piRuntime-C3Dg5uni.cjs} +2 -2
  122. package/dist/{piRuntime-CdN0JAsa.mjs → piRuntime-DgLIard1.mjs} +2 -2
  123. package/dist/{piTerminal-0FBtXTHK.cjs → piTerminal-C135BcLP.cjs} +20 -18
  124. package/dist/{piTerminal-C4m9YXAV.mjs → piTerminal-DJL0w-uA.mjs} +20 -18
  125. package/dist/{prompt-lgF9IE82.cjs → prompt-Bof2aQkI.cjs} +7 -2
  126. package/dist/{prompt-BOouDaTM.mjs → prompt-QHuFx9j6.mjs} +7 -2
  127. package/dist/{pushNotifications-DCiBEVeC.mjs → pushNotifications-CMmRsbKv.mjs} +12 -4
  128. package/dist/{pushNotifications-DI92havG.cjs → pushNotifications-CyQVDThC.cjs} +12 -4
  129. package/dist/{query-BETKBrnz.cjs → query-CK--1fbL.cjs} +1 -1
  130. package/dist/{query-ywZbQUzR.mjs → query-CPXnDURZ.mjs} +1 -1
  131. package/dist/{rateLimitWindows-BkfuUB1a.mjs → rateLimitWindows-Cqa4AGaB.mjs} +1 -1
  132. package/dist/{rateLimitWindows-YRIYVdo4.cjs → rateLimitWindows-DJxnNw-X.cjs} +1 -1
  133. package/dist/{registerCommonHandlers-C7a_dUWs.cjs → registerCommonHandlers-DbNoM39q.cjs} +2 -2
  134. package/dist/{registerCommonHandlers-CTkCvjxt.mjs → registerCommonHandlers-K8dICQO2.mjs} +2 -2
  135. package/dist/{registerKillSessionHandler-CIsvBrVe.cjs → registerKillSessionHandler-DiS_go8d.cjs} +6 -6
  136. package/dist/{registerKillSessionHandler-CaqqRYq6.mjs → registerKillSessionHandler-O1iriOMO.mjs} +6 -6
  137. package/dist/{remoteSessionClient-PP-mOKmw.mjs → remoteSessionClient-BlURPulk.mjs} +5 -5
  138. package/dist/{remoteSessionClient-D843fkzL.cjs → remoteSessionClient-CtV9mDko.cjs} +5 -5
  139. package/dist/{reportProgressTool-14AXr959.cjs → reportProgressTool-DlD_xjzU.cjs} +4 -4
  140. package/dist/{reportProgressTool-ZOCNjWHr.mjs → reportProgressTool-nCExrHZH.mjs} +4 -4
  141. package/dist/{resources-CvIlkzpP.cjs → resources-BPyN59Iv.cjs} +23 -2
  142. package/dist/{resources-y9jfyO-_.mjs → resources-CH1iP6Cv.mjs} +22 -3
  143. package/dist/{run-CAOCYYfT.cjs → run-BBNrcCfI.cjs} +621 -594
  144. package/dist/{run-Dajw2E5j.mjs → run-drtwHYkO.mjs} +557 -530
  145. package/dist/{runClaude-CRRKt-tm.cjs → runClaude-B3KSeby4.cjs} +23 -22
  146. package/dist/{runClaude-C6oxWYbp.mjs → runClaude-CFp27Tyi.mjs} +23 -22
  147. package/dist/{runClaudeDeps-B1ysqTvx.cjs → runClaudeDeps-C_C9TCI0.cjs} +43 -41
  148. package/dist/{runClaudeDeps-BcZ68cX3.mjs → runClaudeDeps-DMcv93lA.mjs} +48 -46
  149. package/dist/{runGemini-D7yKc4wD.mjs → runGemini-Bc6SY-hd.mjs} +40 -37
  150. package/dist/{runGemini-DtKFXqf-.cjs → runGemini-DzdSBAr9.cjs} +40 -37
  151. package/dist/{runOpenClaw-C8ilyLP9.mjs → runOpenClaw-DI0qMlgF.mjs} +19 -18
  152. package/dist/{runOpenClaw-Cq29mryb.cjs → runOpenClaw-DN6rEVqC.cjs} +19 -18
  153. package/dist/{sandbox-gIj-EuF4.cjs → sandbox-DtttPBMA.cjs} +4 -4
  154. package/dist/{sandbox-CbCutma4.mjs → sandbox-v-ffe8LR.mjs} +4 -4
  155. package/dist/{selfCheck-BTGBVthv.cjs → selfCheck-B-yy6bW3.cjs} +36 -36
  156. package/dist/selfCheck-BDfTwxqB.mjs +85 -0
  157. package/dist/{send-YZRMQvMJ.mjs → send-DpBwSZuj.mjs} +8 -8
  158. package/dist/{send-CZf5lLw_.cjs → send-ShzXYPRu.cjs} +8 -8
  159. package/dist/{server-CknFq6xG.cjs → server-CEzKrfKj.cjs} +6 -6
  160. package/dist/{server-BqwXRzFZ.mjs → server-DScgJXxa.mjs} +4 -4
  161. package/dist/{sessionLock-nBXdJxJm.mjs → sessionLock-B6K4SBZD.mjs} +3 -3
  162. package/dist/{sessionLock-DRZUcKHT.cjs → sessionLock-Dc0fadGG.cjs} +3 -3
  163. package/dist/{sessionOps-C58iDeD5.mjs → sessionOps-D0BPWPoh.mjs} +4 -4
  164. package/dist/{sessionOps-BrGiU9-s.cjs → sessionOps-Dx7wARjI.cjs} +4 -4
  165. package/dist/{sessionScanner-Bm57LEXe.mjs → sessionScanner-9Fpgaxtf.mjs} +3 -3
  166. package/dist/{sessionScanner-CaO8bLaG.cjs → sessionScanner-BJ35TVG6.cjs} +3 -3
  167. package/dist/{sessions-BXyBHo8n.mjs → sessions-CFtDlyZd.mjs} +10 -10
  168. package/dist/{sessions-uzqPCc37.cjs → sessions-TZGGAry1.cjs} +10 -10
  169. package/dist/{setupOfflineReconnection-DvvVX3TB.cjs → setupOfflineReconnection-B1GsVA8P.cjs} +2 -2
  170. package/dist/{setupOfflineReconnection-1Qlek3wl.mjs → setupOfflineReconnection-Biaus-0T.mjs} +2 -2
  171. package/dist/{spawn-DBkodJEO.cjs → spawn-BRTuypQ2.cjs} +14 -14
  172. package/dist/{spawn-vn93PhYL.mjs → spawn-CsoQ-Ecz.mjs} +14 -14
  173. package/dist/{spawnAgents-DLNMlhWJ.cjs → spawnAgents-CG211IW7.cjs} +1 -1
  174. package/dist/{spawnAgents-CgPMWexP.mjs → spawnAgents-Co-SLcx-.mjs} +1 -1
  175. package/dist/{spawnHappyCLI-BjFZc_7V.mjs → spawnHappyCLI-D1doCjkZ.mjs} +1 -1
  176. package/dist/{spawnHappyCLI-DnUZv0X2.cjs → spawnHappyCLI-D47kX6jg.cjs} +1 -1
  177. package/dist/{specialCommands-BRufxlqe.cjs → specialCommands-Ch-Gvy-i.cjs} +3 -3
  178. package/dist/{specialCommands-D3ND9bdg.mjs → specialCommands-xSmqT_Fu.mjs} +3 -3
  179. package/dist/{startFileWatcher-DXJ7yB5v.mjs → startFileWatcher-CCl2fFxT.mjs} +1 -1
  180. package/dist/{startFileWatcher-D9cYzZOq.cjs → startFileWatcher-gKQTstR6.cjs} +1 -1
  181. package/dist/{startupSessionCreate-kdr3m1uX.cjs → startupSessionCreate-BXqoUX30.cjs} +1 -1
  182. package/dist/{startupSessionCreate-uZ6BM0ty.mjs → startupSessionCreate-DlZc8yPl.mjs} +1 -1
  183. package/dist/{streamRelay-Dy6amlzx.cjs → streamRelay-B-J-4St1.cjs} +1 -1
  184. package/dist/{streamRelay-DnMCMMfV.mjs → streamRelay-DnJXsi36.mjs} +1 -1
  185. package/dist/{sync-BvVhDO40.mjs → sync-BbjMC3sR.mjs} +1 -1
  186. package/dist/{sync-Bn-idAoy.cjs → sync-BxMdnZzz.cjs} +1 -1
  187. package/dist/{systemPrompt-DlyEk35T.cjs → systemPrompt-C2KojRmK.cjs} +3 -3
  188. package/dist/{systemPrompt-CIZcJuJF.mjs → systemPrompt-CmSDAoIx.mjs} +3 -3
  189. package/dist/{teams-BLeRpDxv.cjs → teams-DESdalox.cjs} +13 -10
  190. package/dist/{teams-DLY3B5yi.mjs → teams-lRy1MS0Z.mjs} +13 -10
  191. package/dist/{time-D3ETL7Jb.mjs → time-Cfknl7xG.mjs} +1 -1
  192. package/dist/{time-Cjv0zxQO.cjs → time-DNLeIRgR.cjs} +1 -1
  193. package/dist/{titleGenerator-Uzbd4utr.mjs → titleGenerator-ClnMSzwC.mjs} +1 -1
  194. package/dist/{titleGenerator-Cgp5ihFb.cjs → titleGenerator-YNutaU88.cjs} +2 -2
  195. package/dist/{todo-pOMcEECE.cjs → todo-DS75Mboz.cjs} +6 -6
  196. package/dist/{todo-C9Ga-oEM.mjs → todo-DZbK5POc.mjs} +6 -6
  197. package/dist/{tools-Cho7iIWf.mjs → tools-BgdU0dWp.mjs} +3 -3
  198. package/dist/{tools-BL7Byl_x.cjs → tools-ClYcb1YQ.cjs} +3 -3
  199. package/dist/{uninstall-CbayEVoV.cjs → uninstall-Di1vPBLV.cjs} +3 -3
  200. package/dist/{uninstall-CvZHVY9C.mjs → uninstall-bXenFevR.mjs} +3 -3
  201. package/package.json +8 -8
  202. package/dist/selfCheck-Smt-5Xiq.mjs +0 -85
@@ -1,12 +1,20 @@
1
- import { randomBytes, createHash, randomUUID } from 'node:crypto';
2
- import { promises, constants, writeFileSync, chmodSync, openSync, fstatSync, closeSync, existsSync, readFileSync, renameSync, readdirSync, rmSync, lstatSync, realpathSync, statSync, mkdirSync, readSync, unlinkSync, rmdirSync } from 'node:fs';
3
- import { join, dirname, basename, relative, isAbsolute, sep, resolve } from 'node:path';
4
1
  import { spawn, execFileSync, execFile } from 'node:child_process';
2
+ import { createHash, randomUUID } from 'node:crypto';
3
+ import { constants, writeFileSync, chmodSync, openSync, fstatSync, closeSync, existsSync, readFileSync, renameSync, readdirSync, rmSync, lstatSync, realpathSync, statSync, mkdirSync, readSync, unlinkSync, rmdirSync } from 'node:fs';
4
+ import { relative, isAbsolute, sep, join, dirname, basename, resolve } from 'node:path';
5
5
  import { realpath, lstat, stat, mkdir, copyFile, symlink, readdir } from 'node:fs/promises';
6
- import { f as ensurePrivateDirectorySync, w as writePrivateFileSync } from './configuration-PxzEJumr.mjs';
7
- import { r as AGENT_VERSION_SOURCES } from './index-C6Vn5Eac.mjs';
8
- import { p as packageJson } from './package-7Ld1YMhh.mjs';
6
+ import { f as ensurePrivateDirectorySync, w as writePrivateFileSync } from './configuration-YXw_Dcsb.mjs';
7
+ import { u as AGENT_VERSION_SOURCES } from './index-BI0h2Zks.mjs';
8
+ import { p as packageJson } from './package-CKj8zndE.mjs';
9
9
 
10
+ function spawnOriginForLog(value) {
11
+ if (!value || typeof value !== "object") return void 0;
12
+ const input = value;
13
+ const source = typeof input.source === "string" && /^[a-z][a-z-]{0,23}$/.test(input.source) ? input.source : "invalid";
14
+ const route = typeof input.route === "string" && /^[A-Za-z0-9/:._-]{1,64}$/.test(input.route) ? input.route : "invalid";
15
+ const flag = (v) => typeof v === "boolean" ? v : null;
16
+ return { source, route, visible: flag(input.visible), gesture: flag(input.gesture) };
17
+ }
10
18
  function summarizeSpawnSessionForLog(value) {
11
19
  const input = value && typeof value === "object" ? value : {};
12
20
  const environmentVariables = input.environmentVariables && typeof input.environmentVariables === "object" ? input.environmentVariables : {};
@@ -21,7 +29,8 @@ function summarizeSpawnSessionForLog(value) {
21
29
  resumesCodex: typeof input.resumeCodexThreadId === "string" && input.resumeCodexThreadId.length > 0,
22
30
  importsClaude: typeof input.importedFromClaudeSessionId === "string" && input.importedFromClaudeSessionId.length > 0,
23
31
  forceNew: input.forceNew === true,
24
- ...typeof input.permissionMode === "string" ? { permissionMode: input.permissionMode } : {}
32
+ ...typeof input.permissionMode === "string" ? { permissionMode: input.permissionMode } : {},
33
+ ...input.origin !== void 0 ? { origin: spawnOriginForLog(input.origin) } : {}
25
34
  };
26
35
  }
27
36
 
@@ -41,147 +50,6 @@ function registerWorktreeHandlers(rpc, service) {
41
50
  rpc.registerHandler("worktree-remove", async (params) => service.remove(obj(params).path, obj(params).discardChanges, obj(params).expectedFingerprint));
42
51
  }
43
52
 
44
- const MAX_CONFIG_BYTES = 1024 * 1024;
45
- const MAX_BACKUPS_PER_HARNESS = 20;
46
- class ModelConfigError extends Error {
47
- constructor(code, message) {
48
- super(message);
49
- this.code = code;
50
- this.name = "ModelConfigError";
51
- }
52
- }
53
- function sha256(text) {
54
- return createHash("sha256").update(text).digest("hex");
55
- }
56
- async function readConfigFile(path) {
57
- let stat;
58
- try {
59
- stat = await promises.stat(path);
60
- } catch (error) {
61
- if (error.code === "ENOENT") {
62
- return { path, exists: false, content: "", hash: sha256(""), mode: null };
63
- }
64
- throw new ModelConfigError("read-failed", `Cannot read ${path}: ${error.message}`);
65
- }
66
- if (!stat.isFile()) throw new ModelConfigError("not-a-file", `${path} is not a regular file`);
67
- if (stat.size > MAX_CONFIG_BYTES) throw new ModelConfigError("file-too-large", `${path} is larger than ${MAX_CONFIG_BYTES} bytes`);
68
- const content = await promises.readFile(path, "utf8");
69
- return { path, exists: true, content, hash: sha256(content), mode: stat.mode & 511 };
70
- }
71
- async function resolveWriteTarget(path) {
72
- try {
73
- return await promises.realpath(path);
74
- } catch (error) {
75
- if (error.code === "ENOENT") {
76
- try {
77
- const link = await promises.readlink(path);
78
- return link.startsWith("/") ? link : join(dirname(path), link);
79
- } catch {
80
- return path;
81
- }
82
- }
83
- throw error;
84
- }
85
- }
86
- async function atomicWriteFile(path, content, mode) {
87
- const target = await resolveWriteTarget(path);
88
- const dir = dirname(target);
89
- await promises.mkdir(dir, { recursive: true, mode: 448 });
90
- const tmp = join(dir, `.${basename(target)}.vh-tmp-${process.pid}-${randomBytes(4).toString("hex")}`);
91
- const handle = await promises.open(tmp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, mode ?? 384);
92
- try {
93
- await handle.writeFile(content, "utf8");
94
- await handle.sync();
95
- } catch (error) {
96
- await handle.close().catch(() => {
97
- });
98
- await promises.unlink(tmp).catch(() => {
99
- });
100
- throw error;
101
- }
102
- await handle.close();
103
- try {
104
- if (mode !== null) await promises.chmod(tmp, mode);
105
- await promises.rename(tmp, target);
106
- } catch (error) {
107
- await promises.unlink(tmp).catch(() => {
108
- });
109
- throw error;
110
- }
111
- try {
112
- const dirHandle = await promises.open(dir, "r");
113
- await dirHandle.sync().catch(() => {
114
- });
115
- await dirHandle.close();
116
- } catch {
117
- }
118
- }
119
- const BACKUP_ID = /^\d{13}-[0-9a-f]{8}$/;
120
- const HARNESS_DIR = /^[a-z][a-z0-9-]{0,31}$/;
121
- class BackupStore {
122
- constructor(root) {
123
- this.root = root;
124
- }
125
- harnessDir(harness) {
126
- if (!HARNESS_DIR.test(harness)) throw new ModelConfigError("invalid-harness", "Invalid harness");
127
- return join(this.root, harness);
128
- }
129
- async create(harness, reason, files, now = Date.now()) {
130
- const id = `${now}-${randomBytes(4).toString("hex")}`;
131
- const dir = join(this.harnessDir(harness), id);
132
- await promises.mkdir(dir, { recursive: true, mode: 448 });
133
- const manifest = { id, createdAt: now, reason, files: files.map((f, i) => ({ path: f.path, blob: f.content === null ? null : `f${i}`, mode: f.mode })) };
134
- for (const [i, file] of files.entries()) {
135
- if (file.content !== null) await promises.writeFile(join(dir, `f${i}`), file.content, { encoding: "utf8", mode: 384 });
136
- }
137
- await promises.writeFile(join(dir, "manifest.json"), JSON.stringify(manifest, null, 2), { encoding: "utf8", mode: 384 });
138
- await this.prune(harness);
139
- return { id, createdAt: now, reason, files: files.map((f) => f.path) };
140
- }
141
- async list(harness) {
142
- let names;
143
- try {
144
- names = await promises.readdir(this.harnessDir(harness));
145
- } catch {
146
- return [];
147
- }
148
- const entries = [];
149
- for (const name of names.filter((n) => BACKUP_ID.test(n))) {
150
- try {
151
- const manifest = JSON.parse(await promises.readFile(join(this.harnessDir(harness), name, "manifest.json"), "utf8"));
152
- entries.push({ id: name, createdAt: Number(manifest.createdAt) || 0, reason: String(manifest.reason ?? ""), files: (manifest.files ?? []).map((f) => f.path) });
153
- } catch {
154
- }
155
- }
156
- return entries.sort((a, b) => b.createdAt - a.createdAt);
157
- }
158
- async read(harness, id) {
159
- if (!BACKUP_ID.test(id)) throw new ModelConfigError("invalid-backup", "Invalid backup id");
160
- const dir = join(this.harnessDir(harness), id);
161
- let manifest;
162
- try {
163
- manifest = JSON.parse(await promises.readFile(join(dir, "manifest.json"), "utf8"));
164
- } catch {
165
- throw new ModelConfigError("backup-not-found", "Backup not found");
166
- }
167
- const out = [];
168
- for (const file of manifest.files) {
169
- out.push({
170
- path: file.path,
171
- content: file.blob === null ? null : await promises.readFile(join(dir, file.blob), "utf8"),
172
- mode: typeof file.mode === "number" ? file.mode : null
173
- });
174
- }
175
- return out;
176
- }
177
- async prune(harness) {
178
- const entries = await this.list(harness);
179
- for (const stale of entries.slice(MAX_BACKUPS_PER_HARNESS)) {
180
- await promises.rm(join(this.harnessDir(harness), stale.id), { recursive: true, force: true });
181
- }
182
- }
183
- }
184
-
185
53
  const CONFIG_RELATIVE_PATH = ".veryhappy/worktree.json";
186
54
  const CONFIG_MAX_BYTES = 64 * 1024;
187
55
  const SCRIPT_MAX_BYTES = 32 * 1024;
@@ -1309,10 +1177,10 @@ function startAgentVersionChecks(publish, onError, detect = detectAgentVersions)
1309
1177
  void refresh();
1310
1178
  const timer = setInterval(() => void refresh(), AGENT_CHECK_INTERVAL);
1311
1179
  timer.unref();
1312
- return () => {
1180
+ return Object.assign(() => {
1313
1181
  stopped = true;
1314
1182
  clearInterval(timer);
1315
- };
1183
+ }, { refresh });
1316
1184
  }
1317
1185
 
1318
1186
  function parseTerminalHookPayload(body) {
@@ -1385,4 +1253,4 @@ function decideBackfill(messages, maxLines) {
1385
1253
  return { replay: messages.slice(messages.length - cap), truncated: true };
1386
1254
  }
1387
1255
 
1388
- export { BackupStore as B, ModelConfigError as M, WORKTREE_CAPABILITY_VERSION as W, sanitizeTagList as a, sanitizeLiveSnapshot as b, serializeLiveSnapshot as c, configureWorktreeService as d, summarizeSpawnSessionForLog as e, parseMirrorSendParams as f, readConfigFile as g, sha256 as h, isClaudeSessionId as i, atomicWriteFile as j, extractCompleteLines as k, liveSnapshotChanged as l, decideBackfill as m, parseTerminalHookPayload as n, decideMirrorBinding as o, pickMirrorForTerminal as p, MIRROR_BACKFILL_LINES_DEFAULT as q, registerWorktreeHandlers as r, stableVersion as s, mirrorLineKey as t, mirrorLocalId as u, initializeOwnedWorktree as v, startAgentVersionChecks as w, currentWorktreeService as x };
1256
+ export { MIRROR_BACKFILL_LINES_DEFAULT as M, WORKTREE_CAPABILITY_VERSION as W, sanitizeTagList as a, sanitizeLiveSnapshot as b, serializeLiveSnapshot as c, configureWorktreeService as d, summarizeSpawnSessionForLog as e, parseMirrorSendParams as f, extractCompleteLines as g, decideBackfill as h, isClaudeSessionId as i, parseTerminalHookPayload as j, decideMirrorBinding as k, liveSnapshotChanged as l, mirrorLineKey as m, mirrorLocalId as n, initializeOwnedWorktree as o, pickMirrorForTerminal as p, startAgentVersionChecks as q, registerWorktreeHandlers as r, stableVersion as s, currentWorktreeService as t };
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var name = "very-happy-cli";
4
- var version = "0.2.180";
4
+ var version = "0.2.182";
5
5
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
6
6
  var author = "Kirill Dubovitskiy";
7
7
  var contributors = [
@@ -84,7 +84,7 @@ var scripts = {
84
84
  };
85
85
  var dependencies = {
86
86
  "@agentclientprotocol/sdk": "^0.14.1",
87
- "@anthropic-ai/claude-agent-sdk": "0.3.296",
87
+ "@anthropic-ai/claude-agent-sdk": "0.3.306",
88
88
  "@anthropic-ai/sandbox-runtime": "^0.0.37",
89
89
  "@modelcontextprotocol/sdk": "1.30.0",
90
90
  "@noble/ed25519": "^3.0.0",
@@ -118,12 +118,12 @@ var dependencies = {
118
118
  zod: "^4.0.0"
119
119
  };
120
120
  var optionalDependencies = {
121
- "very-happy-tools-arm64-darwin": "0.2.180",
122
- "very-happy-tools-x64-darwin": "0.2.180",
123
- "very-happy-tools-arm64-linux": "0.2.180",
124
- "very-happy-tools-x64-linux": "0.2.180",
125
- "very-happy-tools-arm64-win32": "0.2.180",
126
- "very-happy-tools-x64-win32": "0.2.180"
121
+ "very-happy-tools-arm64-darwin": "0.2.182",
122
+ "very-happy-tools-x64-darwin": "0.2.182",
123
+ "very-happy-tools-arm64-linux": "0.2.182",
124
+ "very-happy-tools-x64-linux": "0.2.182",
125
+ "very-happy-tools-arm64-win32": "0.2.182",
126
+ "very-happy-tools-x64-win32": "0.2.182"
127
127
  };
128
128
  var devDependencies = {
129
129
  "@slopus/happy-wire": "workspace:*",
@@ -1,5 +1,5 @@
1
1
  var name = "very-happy-cli";
2
- var version = "0.2.180";
2
+ var version = "0.2.182";
3
3
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
4
4
  var author = "Kirill Dubovitskiy";
5
5
  var contributors = [
@@ -82,7 +82,7 @@ var scripts = {
82
82
  };
83
83
  var dependencies = {
84
84
  "@agentclientprotocol/sdk": "^0.14.1",
85
- "@anthropic-ai/claude-agent-sdk": "0.3.296",
85
+ "@anthropic-ai/claude-agent-sdk": "0.3.306",
86
86
  "@anthropic-ai/sandbox-runtime": "^0.0.37",
87
87
  "@modelcontextprotocol/sdk": "1.30.0",
88
88
  "@noble/ed25519": "^3.0.0",
@@ -116,12 +116,12 @@ var dependencies = {
116
116
  zod: "^4.0.0"
117
117
  };
118
118
  var optionalDependencies = {
119
- "very-happy-tools-arm64-darwin": "0.2.180",
120
- "very-happy-tools-x64-darwin": "0.2.180",
121
- "very-happy-tools-arm64-linux": "0.2.180",
122
- "very-happy-tools-x64-linux": "0.2.180",
123
- "very-happy-tools-arm64-win32": "0.2.180",
124
- "very-happy-tools-x64-win32": "0.2.180"
119
+ "very-happy-tools-arm64-darwin": "0.2.182",
120
+ "very-happy-tools-x64-darwin": "0.2.182",
121
+ "very-happy-tools-arm64-linux": "0.2.182",
122
+ "very-happy-tools-x64-linux": "0.2.182",
123
+ "very-happy-tools-arm64-win32": "0.2.182",
124
+ "very-happy-tools-x64-win32": "0.2.182"
125
125
  };
126
126
  var devDependencies = {
127
127
  "@slopus/happy-wire": "workspace:*",
@@ -2,19 +2,19 @@
2
2
 
3
3
  var axios = require('axios');
4
4
  var chalk = require('chalk');
5
- var configuration = require('./configuration-CYO-kPOS.cjs');
6
- var persistence = require('./persistence-9BMYspxG.cjs');
5
+ var configuration = require('./configuration-B-CugKJ3.cjs');
6
+ var persistence = require('./persistence-BdpwWXKh.cjs');
7
7
  var webPanels = require('./webPanels-FCgFKvVe.cjs');
8
8
  require('node:fs');
9
9
  require('node:os');
10
10
  require('node:path');
11
- require('./package-KhLqBDX9.cjs');
11
+ require('./package-BfeqAzyJ.cjs');
12
12
  require('node:fs/promises');
13
13
  require('zod');
14
14
  require('./authRelay-Dy1qU9td.cjs');
15
15
  require('node:crypto');
16
16
  require('tweetnacl');
17
- require('./logger-CphW5nUE.cjs');
17
+ require('./logger-DK1ytCz6.cjs');
18
18
  require('node:util');
19
19
 
20
20
  function frameVerdict(headers) {
@@ -108,7 +108,7 @@ async function handleAttentionCommand(args) {
108
108
  else console.error(chalk.yellow(`panel "${parsed.panel}" is not declared in ${configuration.configuration.settingsFile}; the notification will not deep-link`));
109
109
  }
110
110
  if (parsed.session) {
111
- const { ApiClient } = await Promise.resolve().then(function () { return require('./api-DM7b1OKj.cjs'); }).then(function (n) { return n.api; });
111
+ const { ApiClient } = await Promise.resolve().then(function () { return require('./api-CZWcG7uh.cjs'); }).then(function (n) { return n.api; });
112
112
  const api = await ApiClient.create(credentials);
113
113
  const r = await api.push().sendAttention({ sessionId: parsed.session, reason: parsed.reason, url: link ?? `/session/${encodeURIComponent(parsed.session)}` });
114
114
  if (!r.sent) {
@@ -1,18 +1,18 @@
1
1
  import axios from 'axios';
2
2
  import chalk from 'chalk';
3
- import { c as configuration } from './configuration-PxzEJumr.mjs';
4
- import { b as readCredentialsForConfiguredRelay, r as readSettings } from './persistence-BFUOHW5h.mjs';
3
+ import { c as configuration } from './configuration-YXw_Dcsb.mjs';
4
+ import { b as readCredentialsForConfiguredRelay, r as readSettings } from './persistence-jOEuAFTS.mjs';
5
5
  import { n as normalizeWebPanels, w as webPanelPath } from './webPanels-B2_C2-3g.mjs';
6
6
  import 'node:fs';
7
7
  import 'node:os';
8
8
  import 'node:path';
9
- import './package-7Ld1YMhh.mjs';
9
+ import './package-CKj8zndE.mjs';
10
10
  import 'node:fs/promises';
11
11
  import 'zod';
12
12
  import './authRelay-DhQhkBvX.mjs';
13
13
  import 'node:crypto';
14
14
  import 'tweetnacl';
15
- import './logger-BUngm5Xg.mjs';
15
+ import './logger-DpqihN1f.mjs';
16
16
  import 'node:util';
17
17
 
18
18
  function frameVerdict(headers) {
@@ -106,7 +106,7 @@ async function handleAttentionCommand(args) {
106
106
  else console.error(chalk.yellow(`panel "${parsed.panel}" is not declared in ${configuration.settingsFile}; the notification will not deep-link`));
107
107
  }
108
108
  if (parsed.session) {
109
- const { ApiClient } = await import('./api-Hov8p7CA.mjs').then(function (n) { return n.b; });
109
+ const { ApiClient } = await import('./api-C_YSQnsi.mjs').then(function (n) { return n.b; });
110
110
  const api = await ApiClient.create(credentials);
111
111
  const r = await api.push().sendAttention({ sessionId: parsed.session, reason: parsed.reason, url: link ?? `/session/${encodeURIComponent(parsed.session)}` });
112
112
  if (!r.sent) {
@@ -4,13 +4,13 @@ var node_crypto = require('node:crypto');
4
4
  var os = require('node:os');
5
5
  var z = require('zod');
6
6
  var ids = require('./ids-B6ZC0HGt.cjs');
7
- var controlClient = require('./controlClient-Bqv5v5OM.cjs');
8
- var persistence = require('./persistence-9BMYspxG.cjs');
9
- var sessionOps = require('./sessionOps-BrGiU9-s.cjs');
10
- var remoteSessionClient = require('./remoteSessionClient-D843fkzL.cjs');
7
+ var controlClient = require('./controlClient-D0kGwKYx.cjs');
8
+ var persistence = require('./persistence-BdpwWXKh.cjs');
9
+ var sessionOps = require('./sessionOps-Dx7wARjI.cjs');
10
+ var remoteSessionClient = require('./remoteSessionClient-CtV9mDko.cjs');
11
11
  var node_fs = require('node:fs');
12
12
  var path = require('node:path');
13
- var client = require('./client-DJplzPjD.cjs');
13
+ var client = require('./client-DK8CzUry.cjs');
14
14
 
15
15
  const SESSION_PEER_SENT_FROM = "session-peer";
16
16
  const CLI_PEER_SENDER_ID = "cli";
@@ -2,13 +2,13 @@ import { randomUUID } from 'node:crypto';
2
2
  import { userInfo, hostname } from 'node:os';
3
3
  import { z } from 'zod';
4
4
  import { i as isValidSessionId } from './ids-DU6sLx4C.mjs';
5
- import { g as listDaemonPeers } from './controlClient-DoeYovwP.mjs';
6
- import { c as readPersistedSessions } from './persistence-BFUOHW5h.mjs';
7
- import { s as sessionWebUrl, e as sendUserMessage } from './sessionOps-C58iDeD5.mjs';
8
- import { a as listRemotePeers, b as sendRemotePeerMessage, d as deliverToSession } from './remoteSessionClient-PP-mOKmw.mjs';
5
+ import { g as listDaemonPeers } from './controlClient-BL4hb4l3.mjs';
6
+ import { c as readPersistedSessions } from './persistence-jOEuAFTS.mjs';
7
+ import { s as sessionWebUrl, e as sendUserMessage } from './sessionOps-D0BPWPoh.mjs';
8
+ import { a as listRemotePeers, b as sendRemotePeerMessage, d as deliverToSession } from './remoteSessionClient-BlURPulk.mjs';
9
9
  import { existsSync, readFileSync, statSync } from 'node:fs';
10
10
  import { resolve, isAbsolute, dirname } from 'node:path';
11
- import { P as ProjectsUnsupportedError, s as sharedProjectsClient } from './client-Ca5Pcgy_.mjs';
11
+ import { P as ProjectsUnsupportedError, s as sharedProjectsClient } from './client-o-meK7-a.mjs';
12
12
 
13
13
  const SESSION_PEER_SENT_FROM = "session-peer";
14
14
  const CLI_PEER_SENDER_ID = "cli";
@@ -2,10 +2,10 @@
2
2
 
3
3
  var promises = require('node:fs/promises');
4
4
  var node_fs = require('node:fs');
5
- var configuration = require('./configuration-CYO-kPOS.cjs');
5
+ var configuration = require('./configuration-B-CugKJ3.cjs');
6
6
  var z = require('zod');
7
7
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
8
- var logger = require('./logger-CphW5nUE.cjs');
8
+ var logger = require('./logger-DK1ytCz6.cjs');
9
9
 
10
10
  function _interopNamespaceDefault(e) {
11
11
  var n = Object.create(null);
@@ -1,9 +1,9 @@
1
1
  import { readFile, open, unlink, stat, rename } from 'node:fs/promises';
2
2
  import { existsSync, constants, readFileSync, unlinkSync, renameSync } from 'node:fs';
3
- import { c as configuration, P as PRIVATE_FILE_MODE, w as writePrivateFileSync, a as hardenPrivateFileSync, e as ensurePrivateDirectory, b as writePrivateFile, h as hardenPrivateFile } from './configuration-PxzEJumr.mjs';
3
+ import { c as configuration, P as PRIVATE_FILE_MODE, w as writePrivateFileSync, a as hardenPrivateFileSync, e as ensurePrivateDirectory, b as writePrivateFile, h as hardenPrivateFile } from './configuration-YXw_Dcsb.mjs';
4
4
  import * as z from 'zod';
5
5
  import { c as credentialRelayProblem, e as encodeBase64 } from './authRelay-DhQhkBvX.mjs';
6
- import { l as logger } from './logger-BUngm5Xg.mjs';
6
+ import { l as logger } from './logger-DpqihN1f.mjs';
7
7
 
8
8
  const HIBERNATION_CAPABILITY = "agent-hibernation-v1";
9
9
  const HOUR_MS = 60 * 60 * 1e3;