very-happy-cli 0.2.178 → 0.2.180

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 (217) hide show
  1. package/dist/{AcpBackend-DCQXHRzT.mjs → AcpBackend-B8Zi30Zh.mjs} +135 -16
  2. package/dist/{AcpBackend-CDkAQXYf.cjs → AcpBackend-DfRDtMcG.cjs} +135 -16
  3. package/dist/{AcpSessionManager-DckmUZza.cjs → AcpSessionManager-CASKOnOj.cjs} +38 -4
  4. package/dist/{AcpSessionManager-BXrQcqwC.mjs → AcpSessionManager-i8Rab0xT.mjs} +38 -4
  5. package/dist/{BasePermissionHandler-BVlrEhIi.mjs → BasePermissionHandler-26fKbRCm.mjs} +5 -2
  6. package/dist/{BasePermissionHandler-DyLmKKtO.cjs → BasePermissionHandler-BlM_tfej.cjs} +5 -2
  7. package/dist/acpSessionResume-B9l54P-X.mjs +67 -0
  8. package/dist/acpSessionResume-CR5pmgVo.cjs +74 -0
  9. package/dist/{agentHome-CEp9RMyK.cjs → agentHome-C7Sb7-Tz.cjs} +4 -4
  10. package/dist/{agentHome-C1xi37as.mjs → agentHome-CmGy0NWv.mjs} +4 -4
  11. package/dist/{api-JANhFdZV.cjs → api-DM7b1OKj.cjs} +38 -262
  12. package/dist/{api-Dib0dmqC.mjs → api-Hov8p7CA.mjs} +32 -256
  13. package/dist/{apiMachine-DNTJidYH.mjs → apiMachine-CwGEhQDT.mjs} +62 -15
  14. package/dist/{apiMachine-QhK-sKcr.cjs → apiMachine-DkGRj-Ai.cjs} +64 -17
  15. package/dist/{attachmentContent-bpQTBJ0y.cjs → attachmentContent-CEm13_gF.cjs} +4 -4
  16. package/dist/{attachmentContent-DkkdpSSJ.mjs → attachmentContent-CIn4iPEk.mjs} +2 -2
  17. package/dist/{auth-BRjd2esb.mjs → auth-BG1DY0gj.mjs} +5 -5
  18. package/dist/{auth-DgIV0Cvt.cjs → auth-CBXnm-Mj.cjs} +5 -5
  19. package/dist/{auth-omWDtgR8.cjs → auth-Dawj7pP5.cjs} +8 -8
  20. package/dist/{auth-DNct7VUi.mjs → auth-rggxMpEE.mjs} +8 -8
  21. package/dist/{auto-DKGFOJBo.mjs → auto-CXXLXGeL.mjs} +19 -18
  22. package/dist/{auto-CI16FZmX.cjs → auto-CbYOfoPS.cjs} +19 -18
  23. package/dist/{backgroundTaskActivity-BVwJBl02.mjs → backgroundTaskActivity-8PdPxrvy.mjs} +1 -1
  24. package/dist/{bootstrap-DCQ87Aan.cjs → bootstrap-DoA7okld.cjs} +2 -2
  25. package/dist/{bootstrap-BUagGC_-.mjs → bootstrap-Dt5I1SOl.mjs} +2 -2
  26. package/dist/{browser-Dj_DYQEh.mjs → browser-DUNetFT4.mjs} +1 -1
  27. package/dist/{browser-CSKhc0Bl.cjs → browser-DZ6qRtfH.cjs} +1 -1
  28. package/dist/{claudeCliPath-U4HHmV4r.cjs → claudeCliPath-GaP3UUz1.cjs} +1 -1
  29. package/dist/{claudeLocal-CdIVnOZp.cjs → claudeLocal--DNyMOSv.cjs} +8 -7
  30. package/dist/{claudeLocal-CCCvAeMd.mjs → claudeLocal-OHWQigCl.mjs} +6 -5
  31. package/dist/{claudeLocalLauncher-BmrpaRYJ.mjs → claudeLocalLauncher-BStvfa7M.mjs} +11 -10
  32. package/dist/{claudeLocalLauncher-21-xh5gc.cjs → claudeLocalLauncher-BhvPbcyH.cjs} +13 -12
  33. package/dist/{claudeSessionFork-kYCP1IJB.cjs → claudeSessionFork-Be16vzGc.cjs} +1 -1
  34. package/dist/{claudeSessionFork-DvxMKAmY.mjs → claudeSessionFork-GAVWhiKG.mjs} +1 -1
  35. package/dist/{client-C4zKGjiJ.cjs → client-BWjaHKtj.cjs} +2 -2
  36. package/dist/client-Ca5Pcgy_.mjs +71 -0
  37. package/dist/{client-CnlkkrZO.mjs → client-CnB7kRCT.mjs} +2 -2
  38. package/dist/{client-BTX9hsbr.mjs → client-D4uPb1uu.mjs} +3 -3
  39. package/dist/client-DJplzPjD.cjs +76 -0
  40. package/dist/{client-Dnza1hgN.cjs → client-D_loZ9IK.cjs} +3 -3
  41. package/dist/codex/happyMcpStdioBridge.cjs +24 -15
  42. package/dist/codex/happyMcpStdioBridge.mjs +25 -16
  43. package/dist/{codexAppServerClient-DvkpQgyv.mjs → codexAppServerClient-CO4G6OS4.mjs} +3 -3
  44. package/dist/{codexAppServerClient-CRlBWGn3.cjs → codexAppServerClient-PE-12AsW.cjs} +3 -3
  45. package/dist/{codexCommand-DzxIWXIT.cjs → codexCommand-BNoD1t1C.cjs} +127 -116
  46. package/dist/{codexCommand-BxjogBzU.mjs → codexCommand-B_xUH79E.mjs} +77 -66
  47. package/dist/{codexTermination-C28FzlLb.cjs → codexTermination-BmBbizFK.cjs} +7 -2
  48. package/dist/{codexTermination-ySDNMEhd.mjs → codexTermination-Dx48ma6e.mjs} +7 -2
  49. package/dist/{config-BFB5uJ4t.cjs → config-CtwEUxUP.cjs} +26 -26
  50. package/dist/{config-DwfEpFr3.mjs → config-DSu0Blos.mjs} +3 -3
  51. package/dist/{configuration-4TGMrjul.cjs → configuration-CYO-kPOS.cjs} +1 -1
  52. package/dist/{configuration-DVrb61aY.mjs → configuration-PxzEJumr.mjs} +1 -1
  53. package/dist/{connect-C7FPY0PI.mjs → connect-BQrg3TB6.mjs} +15 -15
  54. package/dist/{connect-QH2VJGBG.cjs → connect-Dq7wndzR.cjs} +28 -28
  55. package/dist/{context-JoKu0V54.cjs → context-6TP-iz_c.cjs} +1 -1
  56. package/dist/{context-B3XPVJlj.mjs → context-CJGRRGWW.mjs} +1 -1
  57. package/dist/{controlClient-BTaZlbC6.cjs → controlClient-Bqv5v5OM.cjs} +3 -3
  58. package/dist/{controlClient-BYKyGyxj.mjs → controlClient-DoeYovwP.mjs} +4 -4
  59. package/dist/{createSessionMetadata-8Fuj2-IV.mjs → createSessionMetadata-DDIChCx8.mjs} +2 -2
  60. package/dist/{createSessionMetadata-B2NynaWZ.cjs → createSessionMetadata-xz767pcG.cjs} +3 -3
  61. package/dist/{defaultPermissionMode-BEWCqJU-.cjs → defaultPermissionMode-PkZGsQDk.cjs} +2 -2
  62. package/dist/{defaultPermissionMode-B8kJG9uI.mjs → defaultPermissionMode-i5KzdK09.mjs} +2 -2
  63. package/dist/{detectCLI-DR9ZaN6B.cjs → detectCLI-BuYR_Qxe.cjs} +4 -4
  64. package/dist/{deterministicJson-C5ZwZ7hu.mjs → deterministicJson-CTEJDqtS.mjs} +217 -12
  65. package/dist/{deterministicJson-BjNQsAjO.cjs → deterministicJson-xqA6DaOm.cjs} +222 -16
  66. package/dist/{doctor-BshRnjLi.cjs → doctor-BrgSlfXn.cjs} +9 -9
  67. package/dist/{doctor-0BiGwJXk.mjs → doctor-IctjVh9T.mjs} +8 -8
  68. package/dist/{doctorReadiness-BCZGcN0a.cjs → doctorReadiness-Dl6yRQCy.cjs} +1 -1
  69. package/dist/{downloadTarget-BN5vZt3K.cjs → downloadTarget-CEb9che-.cjs} +6 -6
  70. package/dist/{downloadTarget-DJPwAZlu.mjs → downloadTarget-jbOz1egC.mjs} +6 -6
  71. package/dist/{ensureDaemonRunning-C5QfToCe.cjs → ensureDaemonRunning-D-HyjGIX.cjs} +6 -6
  72. package/dist/{ensureDaemonRunning-CSmb_mqt.mjs → ensureDaemonRunning-b1e8LCSM.mjs} +5 -5
  73. package/dist/{handleResumeCommand-BwnUZmbo.cjs → handleResumeCommand-BvWVuRwH.cjs} +23 -7
  74. package/dist/{handleResumeCommand-CgjpsdDe.mjs → handleResumeCommand-DpaZvm2c.mjs} +22 -6
  75. package/dist/{index-piJPsTsm.cjs → index-B2p2Mut7.cjs} +259 -53
  76. package/dist/{index-BehVbAsA.mjs → index-BUNnpGFF.mjs} +256 -50
  77. package/dist/{index-Bvldtdny.mjs → index-Bsvbgh9e.mjs} +4 -4
  78. package/dist/{index-BYOZ_8WZ.cjs → index-C64Ufj4D.cjs} +4 -4
  79. package/dist/{index-Clqlu17M.mjs → index-C6Vn5Eac.mjs} +155 -34
  80. package/dist/index-CMf5VbzG.mjs +18 -0
  81. package/dist/index-DmTlDRSL.cjs +24 -0
  82. package/dist/{index-_l1Sdmbi.cjs → index-Dv0Q48P3.cjs} +156 -33
  83. package/dist/{index-BRClDe07.cjs → index-F2UejqYs.cjs} +3 -3
  84. package/dist/{index-BYgfern_.mjs → index-wCbtF4BK.mjs} +3 -3
  85. package/dist/index.cjs +2 -2
  86. package/dist/index.mjs +2 -2
  87. package/dist/{install-BdvKiOQw.mjs → install-BX3lv3NO.mjs} +1 -1
  88. package/dist/{install-Cf6AFSWC.cjs → install-BXvf2E3o.cjs} +1 -1
  89. package/dist/{install-TO4taKW7.cjs → install-C0ANcEAW.cjs} +7 -7
  90. package/dist/{install-fYWHrPcC.mjs → install-CdzSV7qO.mjs} +3 -3
  91. package/dist/{installPiTools-BKnXjrVu.cjs → installPiTools-CL_axh_6.cjs} +1 -1
  92. package/dist/{installTerminalHooks-BQZbvxsZ.cjs → installTerminalHooks-BETLKAtd.cjs} +3 -3
  93. package/dist/lib.cjs +14 -14
  94. package/dist/lib.d.cts +239 -2
  95. package/dist/lib.d.mts +239 -2
  96. package/dist/lib.mjs +14 -14
  97. package/dist/{lidState-BeOwj6eW.cjs → lidState-DWGnm2H4.cjs} +1 -1
  98. package/dist/{lidState-DNMlIhX0.mjs → lidState-bBrmaQd2.mjs} +1 -1
  99. package/dist/{localHappyAgentAuth-Br-mgogg.cjs → localHappyAgentAuth-DZHQnIW9.cjs} +1 -1
  100. package/dist/{localHappyAgentAuth-BezKSFDi.mjs → localHappyAgentAuth-Dn1jYDpt.mjs} +1 -1
  101. package/dist/{logger--vAVtXB_.mjs → logger-BUngm5Xg.mjs} +2 -2
  102. package/dist/{logger-DXTWlPzP.cjs → logger-CphW5nUE.cjs} +2 -2
  103. package/dist/machineMetadata-BQm9YTcI.cjs +79 -0
  104. package/dist/machineMetadata-BXN_bKU3.mjs +68 -0
  105. package/dist/{main-DoMFJ2Cl.cjs → main-B2UV51nK.cjs} +112 -132
  106. package/dist/{main-CshDb5-1.mjs → main-DGkdYfEq.mjs} +106 -126
  107. package/dist/{mcp-pNc1EbQf.cjs → mcp-BFvAEIRz.cjs} +15 -15
  108. package/dist/{mcp-DKT_lrvQ.mjs → mcp-CbTtbs0f.mjs} +15 -15
  109. package/dist/{mirrorProtocol-6IFGPpjJ.mjs → mirrorProtocol-BR4luBC0.mjs} +148 -7
  110. package/dist/{mirrorProtocol-qKflWTX_.cjs → mirrorProtocol-HKPivs5o.cjs} +150 -4
  111. package/dist/{package-B7B03ejW.mjs → package-7Ld1YMhh.mjs} +8 -7
  112. package/dist/{package-DY4zTbKS.cjs → package-KhLqBDX9.cjs} +8 -7
  113. package/dist/panels-C7IVqpJk.mjs +137 -0
  114. package/dist/panels-Njf6GelF.cjs +142 -0
  115. package/dist/{peerTools-3R9RUARX.mjs → peerTools-BOlDRyhi.mjs} +60 -10
  116. package/dist/{peerTools-iy3_6Yc5.cjs → peerTools-DQNlrcqM.cjs} +60 -9
  117. package/dist/{persistence-BfX72dne.cjs → persistence-9BMYspxG.cjs} +2 -2
  118. package/dist/{persistence-DTk4sNpd.mjs → persistence-BFUOHW5h.mjs} +3 -3
  119. package/dist/{piRunnerArgs-CRQVR9o-.cjs → piRunnerArgs-DGaq6VYM.cjs} +8 -2
  120. package/dist/{piRunnerArgs-AT8QJY7x.mjs → piRunnerArgs-H2pgpA5z.mjs} +7 -1
  121. package/dist/{piRuntime-BHRT5MKO.cjs → piRuntime-CT5xv_3h.cjs} +2 -2
  122. package/dist/{piRuntime-E44qTVQ4.mjs → piRuntime-CdN0JAsa.mjs} +2 -2
  123. package/dist/{piTerminal-hI4WFdWm.cjs → piTerminal-0FBtXTHK.cjs} +18 -18
  124. package/dist/{piTerminal-De8nbciM.mjs → piTerminal-C4m9YXAV.mjs} +18 -18
  125. package/dist/processTreeSnapshot-CuLJDNC-.mjs +101 -0
  126. package/dist/processTreeSnapshot-mDbnuojn.cjs +105 -0
  127. package/dist/projectPath-C3ioB4Bu.cjs +13 -0
  128. package/dist/prompt-BOouDaTM.mjs +99 -0
  129. package/dist/prompt-lgF9IE82.cjs +105 -0
  130. package/dist/{attachmentLimits-UyFn8fkQ.mjs → pushNotifications-DCiBEVeC.mjs} +307 -3
  131. package/dist/{attachmentLimits-SqeAHrVC.cjs → pushNotifications-DI92havG.cjs} +308 -2
  132. package/dist/{index-DFPT4HOO.cjs → query-BETKBrnz.cjs} +25 -5
  133. package/dist/{index-CEjJnq05.mjs → query-ywZbQUzR.mjs} +26 -3
  134. package/dist/{rateLimitWindows-XrJiiBpU.mjs → rateLimitWindows-BkfuUB1a.mjs} +1 -1
  135. package/dist/{rateLimitWindows-Czb7_7cK.cjs → rateLimitWindows-YRIYVdo4.cjs} +1 -1
  136. package/dist/{registerCommonHandlers-C0_fyBQ0.cjs → registerCommonHandlers-C7a_dUWs.cjs} +30 -30
  137. package/dist/{registerCommonHandlers-CvIedVRf.mjs → registerCommonHandlers-CTkCvjxt.mjs} +2 -2
  138. package/dist/{registerKillSessionHandler-DYl7l4Ts.cjs → registerKillSessionHandler-CIsvBrVe.cjs} +6 -6
  139. package/dist/{registerKillSessionHandler-gwJ5lTf0.mjs → registerKillSessionHandler-CaqqRYq6.mjs} +6 -6
  140. package/dist/{remoteSessionClient-BRTIOX5b.cjs → remoteSessionClient-D843fkzL.cjs} +5 -5
  141. package/dist/{remoteSessionClient-DRb2Jr5s.mjs → remoteSessionClient-PP-mOKmw.mjs} +5 -5
  142. package/dist/{reportProgressTool-B9nCzbkL.cjs → reportProgressTool-14AXr959.cjs} +84 -2
  143. package/dist/{reportProgressTool-D5tEoXMW.mjs → reportProgressTool-ZOCNjWHr.mjs} +82 -3
  144. package/dist/{resources-JDPugcDq.cjs → resources-CvIlkzpP.cjs} +30 -0
  145. package/dist/{resources-BdFBQi8r.mjs → resources-y9jfyO-_.mjs} +30 -0
  146. package/dist/{run-CKe_WeLW.cjs → run-CAOCYYfT.cjs} +2806 -110
  147. package/dist/{run-BQ_FGaOL.mjs → run-Dajw2E5j.mjs} +2787 -91
  148. package/dist/{runClaude-zrrNcQC_.mjs → runClaude-C6oxWYbp.mjs} +49 -47
  149. package/dist/{runClaude-MHI5IKM-.cjs → runClaude-CRRKt-tm.cjs} +50 -48
  150. package/dist/{runClaudeDeps-RRw-Nusc.cjs → runClaudeDeps-B1ysqTvx.cjs} +310 -237
  151. package/dist/{runClaudeDeps-CVBCokOS.mjs → runClaudeDeps-BcZ68cX3.mjs} +297 -226
  152. package/dist/{runGemini-kipag2ag.mjs → runGemini-D7yKc4wD.mjs} +61 -55
  153. package/dist/{runGemini-D7Lg9yCr.cjs → runGemini-DtKFXqf-.cjs} +89 -83
  154. package/dist/{runOpenClaw-C_lRY3Do.mjs → runOpenClaw-C8ilyLP9.mjs} +19 -19
  155. package/dist/{runOpenClaw-DCcQ0L2N.cjs → runOpenClaw-Cq29mryb.cjs} +20 -20
  156. package/dist/{sandbox-BSyXFVFp.mjs → sandbox-CbCutma4.mjs} +4 -4
  157. package/dist/{sandbox-dMwPTmjm.cjs → sandbox-gIj-EuF4.cjs} +4 -4
  158. package/dist/{selfCheck-DkzDDUsE.cjs → selfCheck-BTGBVthv.cjs} +39 -38
  159. package/dist/selfCheck-Smt-5Xiq.mjs +85 -0
  160. package/dist/{send-dxC0miIA.cjs → send-CZf5lLw_.cjs} +8 -8
  161. package/dist/{send-C-k9nsd3.mjs → send-YZRMQvMJ.mjs} +9 -9
  162. package/dist/{server-DxoTYNlw.mjs → server-BqwXRzFZ.mjs} +4 -4
  163. package/dist/{server-B-W6P7Qr.cjs → server-CknFq6xG.cjs} +6 -6
  164. package/dist/sessionExitLifecycle-CzkLIgNZ.mjs +142 -0
  165. package/dist/sessionExitLifecycle-DFltxXU8.cjs +148 -0
  166. package/dist/{sessionLock-DWX6BbiU.cjs → sessionLock-DRZUcKHT.cjs} +38 -5
  167. package/dist/{sessionLock-DBdtZGOL.mjs → sessionLock-nBXdJxJm.mjs} +36 -5
  168. package/dist/{sessionOps-BAnr7n8t.cjs → sessionOps-BrGiU9-s.cjs} +10 -5
  169. package/dist/{sessionOps-BVoXe12O.mjs → sessionOps-C58iDeD5.mjs} +11 -6
  170. package/dist/{sessionScanner-BtxoeluY.mjs → sessionScanner-Bm57LEXe.mjs} +3 -3
  171. package/dist/{sessionScanner-CDOYsEUD.cjs → sessionScanner-CaO8bLaG.cjs} +3 -3
  172. package/dist/{sessions-C3sZJkzI.mjs → sessions-BXyBHo8n.mjs} +40 -18
  173. package/dist/{sessions-hAitoN-m.cjs → sessions-uzqPCc37.cjs} +39 -16
  174. package/dist/{setupOfflineReconnection-_eD4cuUT.mjs → setupOfflineReconnection-1Qlek3wl.mjs} +2 -2
  175. package/dist/{setupOfflineReconnection-C2EeYTFH.cjs → setupOfflineReconnection-DvvVX3TB.cjs} +2 -2
  176. package/dist/{spawn-Bc9v7pIf.cjs → spawn-DBkodJEO.cjs} +49 -18
  177. package/dist/{spawn-qNrB2CD_.mjs → spawn-vn93PhYL.mjs} +49 -18
  178. package/dist/spawnAgents-CgPMWexP.mjs +79 -0
  179. package/dist/{spawnAgents-BVEaz35W.cjs → spawnAgents-DLNMlhWJ.cjs} +37 -1
  180. package/dist/{spawnHappyCLI-C2stUioM.mjs → spawnHappyCLI-BjFZc_7V.mjs} +1 -1
  181. package/dist/{spawnHappyCLI-fzUagkKV.cjs → spawnHappyCLI-DnUZv0X2.cjs} +2 -2
  182. package/dist/{specialCommands-BJ-nqY4s.cjs → specialCommands-BRufxlqe.cjs} +3 -3
  183. package/dist/{specialCommands-C6W-rVyh.mjs → specialCommands-D3ND9bdg.mjs} +3 -3
  184. package/dist/{startFileWatcher-Bqlqjt93.cjs → startFileWatcher-D9cYzZOq.cjs} +1 -1
  185. package/dist/{startFileWatcher-CR09Snmz.mjs → startFileWatcher-DXJ7yB5v.mjs} +1 -1
  186. package/dist/startupSessionCreate-kdr3m1uX.cjs +26 -0
  187. package/dist/startupSessionCreate-uZ6BM0ty.mjs +24 -0
  188. package/dist/{streamRelay-CJoMk_d2.mjs → streamRelay-DnMCMMfV.mjs} +1 -1
  189. package/dist/{streamRelay-9kBPpbvU.cjs → streamRelay-Dy6amlzx.cjs} +1 -1
  190. package/dist/{sync-Dhmtk66S.cjs → sync-Bn-idAoy.cjs} +1 -1
  191. package/dist/{sync-DbW07iQS.mjs → sync-BvVhDO40.mjs} +1 -1
  192. package/dist/{systemPrompt-CQcuUmVp.mjs → systemPrompt-CIZcJuJF.mjs} +4 -3
  193. package/dist/{systemPrompt-3PYi3EUY.cjs → systemPrompt-DlyEk35T.cjs} +4 -3
  194. package/dist/{teams-DpxLcUU_.cjs → teams-BLeRpDxv.cjs} +8 -8
  195. package/dist/{teams-CwF4Z2fA.mjs → teams-DLY3B5yi.mjs} +8 -8
  196. package/dist/{time-A6zR3Iy6.cjs → time-Cjv0zxQO.cjs} +1 -1
  197. package/dist/{time-BuGWTVP6.mjs → time-D3ETL7Jb.mjs} +1 -1
  198. package/dist/{titleGenerator-D26gvNaS.cjs → titleGenerator-Cgp5ihFb.cjs} +10 -9
  199. package/dist/{titleGenerator-BGEzNWC9.mjs → titleGenerator-Uzbd4utr.mjs} +9 -8
  200. package/dist/{todo-DrZc76H5.mjs → todo-C9Ga-oEM.mjs} +6 -6
  201. package/dist/{todo-73g3NCIO.cjs → todo-pOMcEECE.cjs} +6 -6
  202. package/dist/{tools-CxJp4T1T.cjs → tools-BL7Byl_x.cjs} +1 -1
  203. package/dist/{tools-BtsrQnNS.mjs → tools-Cho7iIWf.mjs} +1 -1
  204. package/dist/{uninstall-DWNYvewQ.cjs → uninstall-CbayEVoV.cjs} +6 -6
  205. package/dist/{uninstall-DOb2mTwV.mjs → uninstall-CvZHVY9C.mjs} +3 -3
  206. package/dist/webPanels-B2_C2-3g.mjs +49 -0
  207. package/dist/webPanels-FCgFKvVe.cjs +53 -0
  208. package/package.json +8 -7
  209. package/dist/machineMetadata-B1H9gNbN.mjs +0 -39
  210. package/dist/machineMetadata-DcUupMje.cjs +0 -42
  211. package/dist/messageBuffer-BWlGgR3A.mjs +0 -71
  212. package/dist/messageBuffer-fJMH6uY8.cjs +0 -73
  213. package/dist/projectPath-ChLhdOyt.cjs +0 -13
  214. package/dist/selfCheck-CF7XGJPb.mjs +0 -84
  215. package/dist/sessionModeFile-ByLbXTbg.mjs +0 -32
  216. package/dist/sessionModeFile-CLLdidiJ.cjs +0 -36
  217. package/dist/spawnAgents-Bw6j4tqz.mjs +0 -45
@@ -1,23 +1,22 @@
1
1
  'use strict';
2
2
 
3
3
  var axios = require('axios');
4
- var logger = require('./logger-DXTWlPzP.cjs');
5
- var lidState = require('./lidState-BeOwj6eW.cjs');
4
+ var logger = require('./logger-CphW5nUE.cjs');
5
+ var lidState = require('./lidState-DWGnm2H4.cjs');
6
6
  var node_events = require('node:events');
7
7
  var socket_ioClient = require('socket.io-client');
8
- var attachmentLimits = require('./attachmentLimits-SqeAHrVC.cjs');
8
+ var pushNotifications = require('./pushNotifications-DI92havG.cjs');
9
9
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
10
10
  var limits = require('./limits-C-a7gr04.cjs');
11
- var time = require('./time-A6zR3Iy6.cjs');
12
- var configuration = require('./configuration-4TGMrjul.cjs');
11
+ var time = require('./time-Cjv0zxQO.cjs');
12
+ var configuration = require('./configuration-CYO-kPOS.cjs');
13
13
  var node_crypto = require('node:crypto');
14
- var index = require('./index-_l1Sdmbi.cjs');
15
- var registerCommonHandlers = require('./registerCommonHandlers-C0_fyBQ0.cjs');
14
+ var index = require('./index-Dv0Q48P3.cjs');
15
+ var registerCommonHandlers = require('./registerCommonHandlers-C7a_dUWs.cjs');
16
16
  var cuid2 = require('@paralleldrive/cuid2');
17
- var sync = require('./sync-Dhmtk66S.cjs');
17
+ var sync = require('./sync-Bn-idAoy.cjs');
18
18
  var backgroundTaskActivity = require('./backgroundTaskActivity-CBvUdj39.cjs');
19
- var controlClient = require('./controlClient-BTaZlbC6.cjs');
20
- var contentLogMetadata = require('./contentLogMetadata-ZSFk_NjQ.cjs');
19
+ var controlClient = require('./controlClient-Bqv5v5OM.cjs');
21
20
  var chalk = require('chalk');
22
21
 
23
22
  async function hmac_sha512(key, data) {
@@ -883,6 +882,7 @@ function isQueuedUserText(body) {
883
882
  return record.role === "user" && record.content?.type === "text" && typeof record.meta?.queuedAt === "number";
884
883
  }
885
884
  function scanUndeliveredQueuedInputs(records, prior) {
885
+ const replayAboveSeq = prior?.replayAboveSeq;
886
886
  const canceled = prior?.canceled ?? /* @__PURE__ */ new Set();
887
887
  const undelivered = [];
888
888
  let reachedBoundary = false;
@@ -901,6 +901,7 @@ function scanUndeliveredQueuedInputs(records, prior) {
901
901
  }
902
902
  continue;
903
903
  }
904
+ if (replayAboveSeq !== void 0 && record.seq > replayAboveSeq) continue;
904
905
  if (isQueuedUserText(record.body) && record.localId && !canceled.has(record.localId)) {
905
906
  undelivered.push(record.localId);
906
907
  }
@@ -1176,8 +1177,8 @@ class ApiSessionClient extends node_events.EventEmitter {
1176
1177
  */
1177
1178
  pendingDownloads = [];
1178
1179
  rpcHandlerManager;
1179
- agentStateLock = new attachmentLimits.AsyncLock();
1180
- metadataLock = new attachmentLimits.AsyncLock();
1180
+ agentStateLock = new pushNotifications.AsyncLock();
1181
+ metadataLock = new pushNotifications.AsyncLock();
1181
1182
  encryptionKey;
1182
1183
  encryptionVariant;
1183
1184
  reconnectInterval = null;
@@ -1502,8 +1503,8 @@ class ApiSessionClient extends node_events.EventEmitter {
1502
1503
  responseType: "arraybuffer",
1503
1504
  timeout: 6e4,
1504
1505
  maxRedirects: 5,
1505
- maxContentLength: attachmentLimits.MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES,
1506
- maxBodyLength: attachmentLimits.MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES
1506
+ maxContentLength: pushNotifications.MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES,
1507
+ maxBodyLength: pushNotifications.MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES
1507
1508
  });
1508
1509
  return new Uint8Array(response.data);
1509
1510
  }
@@ -1600,7 +1601,7 @@ class ApiSessionClient extends node_events.EventEmitter {
1600
1601
  this.noteActivity();
1601
1602
  if (sourceLocalId) this.promptQueueDrain?.onInbound(sourceLocalId);
1602
1603
  const messageWithSource = sourceLocalId && typeof message === "object" && message !== null ? { ...message, localKey: message.localKey ?? sourceLocalId } : message;
1603
- const userResult = attachmentLimits.UserMessageSchema.safeParse(messageWithSource);
1604
+ const userResult = pushNotifications.UserMessageSchema.safeParse(messageWithSource);
1604
1605
  if (userResult.success) {
1605
1606
  if (this.pendingMessageCallback) {
1606
1607
  this.pendingMessageCallback(userResult.data);
@@ -1609,7 +1610,7 @@ class ApiSessionClient extends node_events.EventEmitter {
1609
1610
  }
1610
1611
  return;
1611
1612
  }
1612
- const fileResult = attachmentLimits.FileEventMessageSchema.safeParse(message);
1613
+ const fileResult = pushNotifications.FileEventMessageSchema.safeParse(message);
1613
1614
  if (fileResult.success) {
1614
1615
  logger.logger.debug(`[API] Received file event: ${fileResult.data.content.data.ev.name} (ref: ${fileResult.data.content.data.ev.ref})`);
1615
1616
  if (this.pendingFileEventCallback) {
@@ -1875,7 +1876,7 @@ class ApiSessionClient extends node_events.EventEmitter {
1875
1876
  * session down. Needs no socket; POSTs through the same session-message
1876
1877
  * channel so the web receives it identically to a cancel-button tombstone.
1877
1878
  */
1878
- async cancelUndeliveredQueuedInputs() {
1879
+ async cancelUndeliveredQueuedInputs(opts) {
1879
1880
  const MAX_SCAN_PAGES = 10;
1880
1881
  const canceled = /* @__PURE__ */ new Set();
1881
1882
  const undelivered = [];
@@ -1904,7 +1905,7 @@ class ApiSessionClient extends node_events.EventEmitter {
1904
1905
  }
1905
1906
  return { seq: message.seq, localId: message.localId, body };
1906
1907
  });
1907
- const scan = scanUndeliveredQueuedInputs(records, { canceled });
1908
+ const scan = scanUndeliveredQueuedInputs(records, { canceled, replayAboveSeq: opts?.maxSeq });
1908
1909
  for (const key of scan.canceled) canceled.add(key);
1909
1910
  undelivered.push(...scan.undeliveredLocalKeys);
1910
1911
  reachedBoundary = scan.reachedBoundary;
@@ -1958,6 +1959,17 @@ class ApiSessionClient extends node_events.EventEmitter {
1958
1959
  * own line, so a launcher sends the matching session event only when this
1959
1960
  * says the turn-end did not carry it).
1960
1961
  */
1962
+ /**
1963
+ * B-495: close the turn a fork backfill left open. History, not a live
1964
+ * turn end — so no `turn-ended` tap (board analyzer, completion hooks).
1965
+ */
1966
+ closeReplayedClaudeTurn() {
1967
+ const mapped = closeClaudeTurnWithStatus(this.claudeSessionProtocolState, "completed");
1968
+ this.claudeSessionProtocolState.currentTurnId = mapped.currentTurnId;
1969
+ for (const envelope of mapped.envelopes) {
1970
+ this.sendSessionProtocolMessage(envelope);
1971
+ }
1972
+ }
1961
1973
  closeClaudeSessionTurn(status = "completed", meta) {
1962
1974
  this.emit("turn-ended", status);
1963
1975
  const mapped = closeClaudeTurnWithStatus(this.claudeSessionProtocolState, status, meta);
@@ -2437,248 +2449,6 @@ class ApiSessionClient extends node_events.EventEmitter {
2437
2449
  }
2438
2450
  }
2439
2451
 
2440
- function getSessionTitle(metadata) {
2441
- const summaryText = metadata?.summary?.text?.trim();
2442
- if (summaryText) {
2443
- return summaryText;
2444
- }
2445
- const path = metadata?.path?.trim();
2446
- if (!path) {
2447
- return "Session";
2448
- }
2449
- const segments = path.split(/[\\/]/).filter(Boolean);
2450
- return segments[segments.length - 1] || "Session";
2451
- }
2452
- function getSessionNotificationUrl(data) {
2453
- const sessionId = data?.sessionId;
2454
- if (typeof sessionId !== "string") {
2455
- return null;
2456
- }
2457
- const trimmedSessionId = sessionId.trim();
2458
- if (!trimmedSessionId) {
2459
- return null;
2460
- }
2461
- return `/session/${encodeURIComponent(trimmedSessionId)}`;
2462
- }
2463
- function getSessionNotificationTitle(kind) {
2464
- switch (kind) {
2465
- case "done":
2466
- return "It's ready!";
2467
- case "permission":
2468
- return "Permission request";
2469
- case "question":
2470
- return "Clarification needed";
2471
- }
2472
- }
2473
- function getSessionNotificationBody(metadata) {
2474
- return getSessionTitle(metadata);
2475
- }
2476
- function getSessionNotificationCopy(kind, metadata) {
2477
- return {
2478
- title: getSessionNotificationTitle(kind),
2479
- body: getSessionNotificationBody(metadata)
2480
- };
2481
- }
2482
- class PushNotificationClient {
2483
- token;
2484
- baseUrl;
2485
- expoLoad = null;
2486
- constructor(token, baseUrl = "https://api.cluster-fluster.com") {
2487
- this.token = token;
2488
- this.baseUrl = baseUrl;
2489
- }
2490
- loadExpo() {
2491
- if (!this.expoLoad) {
2492
- const load = import('expo-server-sdk').then(({ Expo }) => ({ Expo, expo: new Expo() }));
2493
- load.catch(() => {
2494
- if (this.expoLoad === load) this.expoLoad = null;
2495
- });
2496
- this.expoLoad = load;
2497
- }
2498
- return this.expoLoad;
2499
- }
2500
- /**
2501
- * Fetch all push tokens for the authenticated user.
2502
- * Retries up to 3 times with exponential backoff on transient errors.
2503
- */
2504
- async fetchPushTokens() {
2505
- const maxAttempts = 3;
2506
- for (let attempt = 1; attempt <= maxAttempts; attempt++) {
2507
- try {
2508
- const response = await axios.get(
2509
- `${this.baseUrl}/v1/push-tokens`,
2510
- {
2511
- headers: {
2512
- "Authorization": `Bearer ${this.token}`,
2513
- "Content-Type": "application/json",
2514
- "X-Happy-Client": `cli-daemon/${configuration.configuration.currentCliVersion}`
2515
- }
2516
- }
2517
- );
2518
- logger.logger.debug(`Fetched ${response.data.tokens.length} push tokens`);
2519
- response.data.tokens.forEach((token, index) => {
2520
- logger.logger.debug(`[PUSH] Token ${index + 1}: id=${token.id}, created=${new Date(token.createdAt).toISOString()}, updated=${new Date(token.updatedAt).toISOString()}`);
2521
- });
2522
- return response.data.tokens;
2523
- } catch (error) {
2524
- logger.logger.debug(`[PUSH] [ERROR] Failed to fetch push tokens (attempt ${attempt}/${maxAttempts}):`, error);
2525
- if (attempt < maxAttempts) {
2526
- const delay = 1e3 * Math.pow(2, attempt - 1);
2527
- await new Promise((resolve) => setTimeout(resolve, delay));
2528
- }
2529
- }
2530
- }
2531
- logger.logger.debug("[PUSH] [ERROR] All push token fetch attempts failed");
2532
- return [];
2533
- }
2534
- /**
2535
- * Send push notification via Expo Push API with retry
2536
- * @param messages - Array of push messages to send
2537
- */
2538
- async sendPushNotifications(messages) {
2539
- logger.logger.debug(`Sending ${messages.length} push notifications`);
2540
- const { Expo, expo } = await this.loadExpo();
2541
- const validMessages = messages.filter((message) => {
2542
- if (Array.isArray(message.to)) {
2543
- return message.to.every((token) => Expo.isExpoPushToken(token));
2544
- }
2545
- return Expo.isExpoPushToken(message.to);
2546
- });
2547
- if (validMessages.length === 0) {
2548
- logger.logger.debug("No valid Expo push tokens found");
2549
- return;
2550
- }
2551
- const chunks = expo.chunkPushNotifications(validMessages);
2552
- for (const chunk of chunks) {
2553
- const startTime = Date.now();
2554
- const timeout = 3e5;
2555
- let attempt = 0;
2556
- while (true) {
2557
- try {
2558
- const ticketChunk = await expo.sendPushNotificationsAsync(chunk);
2559
- const errors = ticketChunk.filter((ticket) => ticket.status === "error");
2560
- if (errors.length > 0) {
2561
- const errorDetails = errors.map((e) => ({ message: e.message, details: e.details }));
2562
- logger.logger.debug("[PUSH] Some notifications failed:", errorDetails);
2563
- }
2564
- if (errors.length === ticketChunk.length) {
2565
- throw new Error("All push notifications in chunk failed");
2566
- }
2567
- break;
2568
- } catch (error) {
2569
- const elapsed = Date.now() - startTime;
2570
- if (elapsed >= timeout) {
2571
- logger.logger.debug("[PUSH] Timeout reached after 5 minutes, giving up on chunk");
2572
- break;
2573
- }
2574
- attempt++;
2575
- const delay = Math.min(1e3 * Math.pow(2, attempt), 3e4);
2576
- const remainingTime = timeout - elapsed;
2577
- const waitTime = Math.min(delay, remainingTime);
2578
- if (waitTime > 0) {
2579
- logger.logger.debug(`[PUSH] Retrying in ${waitTime}ms (attempt ${attempt})`);
2580
- await new Promise((resolve) => setTimeout(resolve, waitTime));
2581
- }
2582
- }
2583
- }
2584
- }
2585
- logger.logger.debug(`Push notifications sent successfully`);
2586
- }
2587
- /**
2588
- * Send a push notification to all registered devices for the user
2589
- * @param title - Notification title
2590
- * @param body - Notification body
2591
- * @param data - Additional data to send with the notification
2592
- */
2593
- sendToAllDevices(title, body, data) {
2594
- logger.logger.debug("[PUSH] sendToAllDevices called:", {
2595
- title: contentLogMetadata.contentLogMetadata(title),
2596
- body: contentLogMetadata.contentLogMetadata(body),
2597
- dataKeyCount: data ? Object.keys(data).length : 0
2598
- });
2599
- (async () => {
2600
- try {
2601
- logger.logger.debug("[PUSH] Fetching push tokens...");
2602
- const tokens = await this.fetchPushTokens();
2603
- logger.logger.debug(`[PUSH] Fetched ${tokens.length} push tokens`);
2604
- tokens.forEach((token, index) => {
2605
- logger.logger.debug(`[PUSH] Using token ${index + 1}: id=${token.id}`);
2606
- });
2607
- if (tokens.length === 0) {
2608
- logger.logger.debug("No push tokens found for user");
2609
- return;
2610
- }
2611
- const messages = tokens.map((token, index) => {
2612
- logger.logger.debug(`[PUSH] Creating message ${index + 1} for token`);
2613
- return {
2614
- to: token.token,
2615
- title,
2616
- body: body && body.length > 0 ? body : void 0,
2617
- data,
2618
- // TODO: For brutalist session artwork, attach rich media via a public HTTPS image URL.
2619
- // Bundled app asset paths / require(...) / local file paths will not work in push payloads.
2620
- // iOS also needs a Notification Service Extension to render richContent.image reliably.
2621
- sound: "default",
2622
- priority: "high"
2623
- };
2624
- });
2625
- logger.logger.debug(`[PUSH] Sending ${messages.length} push notifications...`);
2626
- await this.sendPushNotifications(messages);
2627
- logger.logger.debug("[PUSH] Push notifications sent successfully");
2628
- } catch (error) {
2629
- logger.logger.debug("[PUSH] Error sending to all devices:", error);
2630
- }
2631
- })();
2632
- }
2633
- /**
2634
- * Routes session-event pushes through the server so it can apply
2635
- * presence-based suppression (active desktop/web, mobile foreground).
2636
- * Falls back to direct Expo send only when sessionId is missing — that
2637
- * shouldn't happen for session notifications but guards against regressions.
2638
- */
2639
- sendSessionNotification(params) {
2640
- const { title, body } = getSessionNotificationCopy(params.kind, params.metadata);
2641
- const sessionTitle = getSessionNotificationBody(params.metadata);
2642
- const url = getSessionNotificationUrl(params.data);
2643
- const payloadData = {
2644
- ...params.data,
2645
- kind: params.kind,
2646
- sessionTitle,
2647
- ...url ? { url } : {}
2648
- };
2649
- const sessionId = typeof params.data?.sessionId === "string" ? params.data.sessionId : null;
2650
- if (!sessionId) {
2651
- logger.logger.debug("[PUSH] sendSessionNotification: missing sessionId, falling back to direct send");
2652
- this.sendToAllDevices(title, body, payloadData);
2653
- return;
2654
- }
2655
- void (async () => {
2656
- try {
2657
- await axios.post(
2658
- `${this.baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/push-event`,
2659
- {
2660
- kind: params.kind,
2661
- title,
2662
- body,
2663
- data: payloadData
2664
- },
2665
- {
2666
- headers: {
2667
- "Authorization": `Bearer ${this.token}`,
2668
- "Content-Type": "application/json",
2669
- "X-Happy-Client": `cli-daemon/${configuration.configuration.currentCliVersion}`
2670
- },
2671
- timeout: 15e3
2672
- }
2673
- );
2674
- logger.logger.debug(`[PUSH] sendSessionNotification dispatched via server (kind=${params.kind})`);
2675
- } catch (error) {
2676
- logger.logger.debug("[PUSH] sendSessionNotification failed:", error);
2677
- }
2678
- })();
2679
- }
2680
- }
2681
-
2682
2452
  function startOfflineReconnection(config) {
2683
2453
  let reconnected = false;
2684
2454
  let session = null;
@@ -2789,6 +2559,12 @@ class OfflineState {
2789
2559
  isOffline() {
2790
2560
  return this.state === "offline";
2791
2561
  }
2562
+ /** B-689: one-line cause of the last failure of `operation` (for exit reasons). */
2563
+ describe(operation) {
2564
+ const f = this.failures.get(operation);
2565
+ if (!f) return void 0;
2566
+ return f.errorCode ? `${f.errorCode} - ${ERROR_DESCRIPTIONS[f.errorCode] || "unknown error"}` : "unknown error";
2567
+ }
2792
2568
  /** Reset for testing - clears all state */
2793
2569
  reset() {
2794
2570
  this.state = "online";
@@ -2957,7 +2733,7 @@ class ApiClient {
2957
2733
  pushClient;
2958
2734
  constructor(credential) {
2959
2735
  this.credential = credential;
2960
- this.pushClient = new PushNotificationClient(credential.token, configuration.configuration.serverUrl);
2736
+ this.pushClient = new pushNotifications.PushNotificationClient(credential.token, configuration.configuration.serverUrl);
2961
2737
  }
2962
2738
  /**
2963
2739
  * Create a new session or load existing one with the given tag
@@ -3173,7 +2949,7 @@ class ApiClient {
3173
2949
  return new ApiSessionClient(this.credential.token, session, opts);
3174
2950
  }
3175
2951
  async machineSyncClient(machine) {
3176
- const { ApiMachineClient } = await Promise.resolve().then(function () { return require('./apiMachine-QhK-sKcr.cjs'); });
2952
+ const { ApiMachineClient } = await Promise.resolve().then(function () { return require('./apiMachine-DkGRj-Ai.cjs'); });
3177
2953
  return new ApiMachineClient(this.credential.token, machine);
3178
2954
  }
3179
2955
  push() {