very-happy-cli 0.2.202 → 0.2.204

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 (222) hide show
  1. package/dist/{AcpBackend-Z51picBa.mjs → AcpBackend-BBfcpIDj.mjs} +3 -3
  2. package/dist/{AcpBackend-BRcPXur6.cjs → AcpBackend-BupxHXGp.cjs} +3 -3
  3. package/dist/{AcpSessionManager-BCGqL1Em.mjs → AcpSessionManager-B9UkPYGi.mjs} +2 -2
  4. package/dist/{AcpSessionManager-BckOYH3I.cjs → AcpSessionManager-JJrnenKM.cjs} +2 -2
  5. package/dist/{BasePermissionHandler-BYIY3kxs.cjs → BasePermissionHandler-86_xnisC.cjs} +1 -1
  6. package/dist/{BasePermissionHandler-BhJjr-wB.mjs → BasePermissionHandler-tGylJLUH.mjs} +1 -1
  7. package/dist/{account-B-HTHZKw.mjs → account-BRqUOj_D.mjs} +11 -11
  8. package/dist/{account-B0Wu7rJR.cjs → account-C91_R-kw.cjs} +11 -11
  9. package/dist/{accountService-DEpIq6CF.mjs → accountService-CqrWNH8K.mjs} +4 -4
  10. package/dist/{accountService-Cns8UYGI.cjs → accountService-SOeB_21A.cjs} +4 -4
  11. package/dist/{acpSessionResume-BKjQRT4V.mjs → acpSessionResume-CZQ91ano.mjs} +1 -1
  12. package/dist/{acpSessionResume-C8Kd8eK6.cjs → acpSessionResume-DK8EjIY0.cjs} +1 -1
  13. package/dist/{agentHome-BXiCouR4.mjs → agentHome-71zGywwx.mjs} +4 -4
  14. package/dist/{agentHome-DnxSf1ox.cjs → agentHome-BZvbPuy1.cjs} +4 -4
  15. package/dist/{api-Cu1OFHDM.mjs → api-BYh1VGBa.mjs} +107 -18
  16. package/dist/{api-B-FB-s4z.cjs → api-BoJA-zK3.cjs} +107 -18
  17. package/dist/{apiMachine-DYGPILVb.mjs → apiMachine--_eI4PTv.mjs} +105 -21
  18. package/dist/{apiMachine-DCWgI1l_.cjs → apiMachine-CA58NM_V.cjs} +105 -21
  19. package/dist/{attachmentContent-Dq8P5ODq.mjs → attachmentContent-D95cCBX5.mjs} +2 -2
  20. package/dist/{attachmentContent-dXwHB_3C.cjs → attachmentContent-y621KwMz.cjs} +2 -2
  21. package/dist/{auth-DpIHm7Lb.cjs → auth-CAkpHr8F.cjs} +5 -5
  22. package/dist/{auth-D11uvx2P.mjs → auth-DCzFx5BN.mjs} +8 -8
  23. package/dist/{auth-CgdE-j7z.mjs → auth-DRJ_WPn3.mjs} +5 -5
  24. package/dist/{auth-BVNBE4B1.cjs → auth-Dofm64Kp.cjs} +8 -8
  25. package/dist/{auto-WdjHKP9R.mjs → auto-CrgOy5OR.mjs} +18 -18
  26. package/dist/{auto-Ba2b-il4.cjs → auto-D4IBwJEE.cjs} +18 -18
  27. package/dist/{bootstrap-CsZO_jkL.cjs → bootstrap-D16MMPNP.cjs} +2 -2
  28. package/dist/{bootstrap-BTYJf2w8.mjs → bootstrap-PnL2FX64.mjs} +2 -2
  29. package/dist/{browser-Dx3UOVPP.mjs → browser-D2enJJfv.mjs} +1 -1
  30. package/dist/{browser-DgufCq1K.cjs → browser-DK2GfyEr.cjs} +1 -1
  31. package/dist/{claudeAccountEnv-Btp39mfa.cjs → claudeAccountEnv-BTZjHTpF.cjs} +1 -1
  32. package/dist/{claudeAccountEnv-DowsOlDB.mjs → claudeAccountEnv-C6Wl-ZbT.mjs} +1 -1
  33. package/dist/{claudeLocal-ylDKcvX0.mjs → claudeLocal-BbzN1qly.mjs} +5 -5
  34. package/dist/{claudeLocal-Q0FgzhTu.cjs → claudeLocal-DaqiRW9N.cjs} +5 -5
  35. package/dist/{claudeLocalLauncher-D2rZvuaW.cjs → claudeLocalLauncher-B0qbyOUc.cjs} +10 -10
  36. package/dist/{claudeLocalLauncher-CtybsaR8.mjs → claudeLocalLauncher-D7bhZ9rp.mjs} +10 -10
  37. package/dist/claudeLongContext-BR_zdjUp.cjs +239 -0
  38. package/dist/claudeLongContext-CZ60xo5p.mjs +219 -0
  39. package/dist/{claudeSessionFork-DRLxmv9j.mjs → claudeSessionFork-BPF3cpGs.mjs} +1 -1
  40. package/dist/{claudeSessionFork-BrstQPE4.cjs → claudeSessionFork-lcajftLB.cjs} +1 -1
  41. package/dist/{client-DfT_CRwl.mjs → client-BH4s6mzX.mjs} +2 -2
  42. package/dist/{client-D0oBXuEe.mjs → client-BHt14nix.mjs} +2 -2
  43. package/dist/{client-xV99weGP.cjs → client-ByK8-iRd.cjs} +3 -3
  44. package/dist/{client-CNWx72ZT.cjs → client-CqmT_ur8.cjs} +2 -2
  45. package/dist/{client-Dq7jaxb2.cjs → client-D5_YDMpA.cjs} +2 -2
  46. package/dist/{client-DJsXNJWO.mjs → client-Og5iNZ6S.mjs} +17 -8
  47. package/dist/{client-Cj7D61by.mjs → client-t1vQ7gho.mjs} +3 -3
  48. package/dist/{client-Ch4Azlny.cjs → client-xA44FUnf.cjs} +17 -8
  49. package/dist/codex/happyMcpStdioBridge.cjs +20 -19
  50. package/dist/codex/happyMcpStdioBridge.mjs +20 -19
  51. package/dist/{codexAccount-CieIQLOX.mjs → codexAccount-BPQ-lPhH.mjs} +1 -1
  52. package/dist/{codexAccount-D-OBY29W.cjs → codexAccount-BjaHvmKH.cjs} +1 -1
  53. package/dist/{codexAppServerClient-DtdCZ7_b.mjs → codexAppServerClient-CvL3eBlM.mjs} +3 -3
  54. package/dist/{codexAppServerClient-BwBPZonh.cjs → codexAppServerClient-CyLtj1kP.cjs} +3 -3
  55. package/dist/{codexCommand-CsY9YFiG.cjs → codexCommand-B0Slfvne.cjs} +67 -56
  56. package/dist/{codexCommand-D92AQCLU.mjs → codexCommand-CXytYlk9.mjs} +67 -56
  57. package/dist/{codexTermination-BbXG2oFT.cjs → codexTermination-CykPnK3G.cjs} +1 -1
  58. package/dist/{codexTermination-rhIxjRMJ.mjs → codexTermination-D0sBaTvW.mjs} +1 -1
  59. package/dist/{config-Zhkmfb3O.cjs → config-7Z5qIB3k.cjs} +3 -3
  60. package/dist/{config-BnN1yFyi.mjs → config-DeXK_5y4.mjs} +3 -3
  61. package/dist/{configuration-DZUnfWp2.cjs → configuration-CDqmWkHO.cjs} +1 -1
  62. package/dist/{configuration-CQaLZMa-.mjs → configuration-D_YrWa_i.mjs} +1 -1
  63. package/dist/{connect-DY5QLfbI.mjs → connect-CivOym_v.mjs} +13 -13
  64. package/dist/{connect-BToTf3Gy.cjs → connect-D_tzdR4l.cjs} +13 -13
  65. package/dist/{context-ByTvtMXZ.mjs → context-DXfkj_FL.mjs} +1 -1
  66. package/dist/{context-BHydzPZw.cjs → context-k2CbuBtp.cjs} +1 -1
  67. package/dist/{controlClient-Bfwe0Xpt.cjs → controlClient-BS86Ksm8.cjs} +12 -3
  68. package/dist/{controlClient-Cqhd8ynk.mjs → controlClient-Daki7wgo.mjs} +12 -4
  69. package/dist/{createSessionMetadata-D_qa01wq.cjs → createSessionMetadata-2s80RDL1.cjs} +2 -2
  70. package/dist/{createSessionMetadata-tmhDzhJZ.mjs → createSessionMetadata-B_hQ8lDn.mjs} +2 -2
  71. package/dist/{daemonAccounts-ciidbU2h.cjs → daemonAccounts-BOoI7-sw.cjs} +2 -2
  72. package/dist/{daemonAccounts-D5shoCLt.mjs → daemonAccounts-BtkmoJmC.mjs} +3 -3
  73. package/dist/{defaultPermissionMode-DgeiMMqy.mjs → defaultPermissionMode-CYQi7vqJ.mjs} +1 -1
  74. package/dist/{defaultPermissionMode-Cs_Tv83b.cjs → defaultPermissionMode-DmLYaaL8.cjs} +1 -1
  75. package/dist/{deterministicJson-DRL1Gs_c.mjs → deterministicJson-DKiOtrSA.mjs} +23 -16
  76. package/dist/{deterministicJson-CbUdClvO.cjs → deterministicJson-lwG_VzWd.cjs} +23 -16
  77. package/dist/{doctor-DHCmWcwR.cjs → doctor-C0kONAQn.cjs} +7 -7
  78. package/dist/{doctor-Wu0yZ80l.mjs → doctor-DegBfYjz.mjs} +7 -7
  79. package/dist/{downloadTarget-BoJrjpEe.cjs → downloadTarget-BTEVg8t6.cjs} +6 -6
  80. package/dist/{downloadTarget-G72yKQcM.mjs → downloadTarget-osakJyyA.mjs} +6 -6
  81. package/dist/{ensureDaemonRunning-BKGybp3s.mjs → ensureDaemonRunning-ED6UVEbk.mjs} +5 -5
  82. package/dist/{ensureDaemonRunning-CnkyGd9x.cjs → ensureDaemonRunning-vxHxmXo2.cjs} +5 -5
  83. package/dist/exitNotice-BhRrv8dx.cjs +88 -0
  84. package/dist/exitNotice-D1tMULzu.mjs +79 -0
  85. package/dist/{forkBackfill-DYIjlN1Z.mjs → forkBackfill-C9EfJ64O.mjs} +28 -2
  86. package/dist/{forkBackfill-8eLDeS73.cjs → forkBackfill-D2WW91fz.cjs} +28 -1
  87. package/dist/{format-DePME4uu.cjs → format-9KvRMdvY.cjs} +1 -1
  88. package/dist/{format-BSx-Nv2p.mjs → format-DJwRUrQm.mjs} +1 -1
  89. package/dist/{handleResumeCommand-uKzhaOVC.cjs → handleResumeCommand-0lsgLgBB.cjs} +5 -5
  90. package/dist/{handleResumeCommand-DrJdhjLD.mjs → handleResumeCommand-PfKmR-hv.mjs} +5 -5
  91. package/dist/{index-C-eSUhXW.mjs → index-BNcFxRSt.mjs} +4 -4
  92. package/dist/{index-44o_qMvE.cjs → index-BYL_X3gP.cjs} +27 -6
  93. package/dist/{index-Bi7Lmykl.cjs → index-B_narjYR.cjs} +45 -44
  94. package/dist/{index-DDOCSeEj.cjs → index-Bm_9wBaO.cjs} +4 -4
  95. package/dist/{index-CoBaGAA4.cjs → index-C7yXrMau.cjs} +3 -3
  96. package/dist/{index-BcYJJV-f.mjs → index-CUJZx4cs.mjs} +3 -3
  97. package/dist/{index-fNsf-8K-.mjs → index-CUeuMsap.mjs} +4 -4
  98. package/dist/{index-CowtCbZ_.mjs → index-D1rxFJ2b.mjs} +46 -45
  99. package/dist/{index-CiRMvS73.mjs → index-DWk-WTU-.mjs} +24 -7
  100. package/dist/{index-BKXqaux4.cjs → index-l8Xg3Mbf.cjs} +4 -4
  101. package/dist/index.cjs +2 -2
  102. package/dist/index.mjs +2 -2
  103. package/dist/{install-0TkucJrC.mjs → install-B593oYZs.mjs} +3 -3
  104. package/dist/{install-Ddc8TlWE.cjs → install-C0I1a5sL.cjs} +3 -3
  105. package/dist/{issue-CIfzJuaS.cjs → issue-CJrXCpnf.cjs} +8 -8
  106. package/dist/{issue-CML2xa46.mjs → issue-D9ukoK-U.mjs} +8 -8
  107. package/dist/lib.cjs +12 -12
  108. package/dist/lib.d.cts +42 -1
  109. package/dist/lib.d.mts +42 -1
  110. package/dist/lib.mjs +12 -12
  111. package/dist/{localHappyAgentAuth-BUX4E1ug.mjs → localHappyAgentAuth-CxNcSjMM.mjs} +1 -1
  112. package/dist/{localHappyAgentAuth-WLqXQbc6.cjs → localHappyAgentAuth-D3GKuEC2.cjs} +1 -1
  113. package/dist/{logger-BEVIGYKL.mjs → logger-BcdURxNR.mjs} +2 -2
  114. package/dist/{logger-Dhc0l3xH.cjs → logger-C8anCmdW.cjs} +2 -2
  115. package/dist/{machineMetadata-BQdp_ihk.mjs → machineMetadata-BQaQQk6Z.mjs} +3 -3
  116. package/dist/{machineMetadata-ixKckJ7k.cjs → machineMetadata-DYWtdEtE.cjs} +3 -3
  117. package/dist/{main-BNBYOcQb.cjs → main-Bw7qSCWA.cjs} +48 -48
  118. package/dist/{main-BzQSe4Zu.mjs → main-KsUdHnwc.mjs} +48 -48
  119. package/dist/{mcp-BwskAxOK.cjs → mcp-CxPUFOEd.cjs} +20 -18
  120. package/dist/{mcp-BueI4Bel.mjs → mcp-OeLaQ2XR.mjs} +20 -18
  121. package/dist/{mirrorProtocol-5aFYsCCe.mjs → mirrorProtocol-Sj0yEHHU.mjs} +3 -3
  122. package/dist/{mirrorProtocol-DGMmhArw.cjs → mirrorProtocol-cTQcrW55.cjs} +3 -3
  123. package/dist/{package-CAmlKYcH.cjs → package-DkpXQvp1.cjs} +7 -7
  124. package/dist/{package-aOUtHYRZ.mjs → package-Dx3hbh9J.mjs} +7 -7
  125. package/dist/{panels-By2IDfXv.cjs → panels-CPNZnwCH.cjs} +5 -5
  126. package/dist/{panels-BeVMgmRW.mjs → panels-DKYO14Sq.mjs} +5 -5
  127. package/dist/{peerTools-BkRgJomj.mjs → peerTools-DYFslv6R.mjs} +5 -5
  128. package/dist/{peerTools-dgllF1wT.cjs → peerTools-DpCWFxI6.cjs} +5 -5
  129. package/dist/{persistence-EuUaQKL7.mjs → persistence-3iZXGbfb.mjs} +2 -2
  130. package/dist/{persistence-05BAS4Ou.cjs → persistence-Ch78xygf.cjs} +2 -2
  131. package/dist/{piRunnerArgs-DkjCRPYn.cjs → piRunnerArgs-CA6jqQ0k.cjs} +1 -1
  132. package/dist/{piRunnerArgs-CygWrAwY.mjs → piRunnerArgs-DEuYl6FL.mjs} +1 -1
  133. package/dist/{piRuntime-zY2jIQod.cjs → piRuntime-BIVHf-hN.cjs} +1 -1
  134. package/dist/{piRuntime-LRW_t6ME.mjs → piRuntime-CyN43ILm.mjs} +1 -1
  135. package/dist/{piTerminal-BhlPA1HR.mjs → piTerminal-DXz5L73L.mjs} +22 -20
  136. package/dist/{piTerminal-BfZshXGh.cjs → piTerminal-Hw4StZWN.cjs} +22 -20
  137. package/dist/{pushNotifications-DaVlLe7N.cjs → pushNotifications-D2ejrxlN.cjs} +17 -3
  138. package/dist/{pushNotifications-B7Ga8Zyf.mjs → pushNotifications-Db1NGJiA.mjs} +17 -3
  139. package/dist/{query-BQLtwpr9.mjs → query-CeYpZWVb.mjs} +1 -1
  140. package/dist/{query-CX0Of89i.cjs → query-velpFYxW.cjs} +1 -1
  141. package/dist/{rateLimitWindows-hv2zLYid.mjs → rateLimitWindows-BSQttrPk.mjs} +1 -1
  142. package/dist/{rateLimitWindows-CpSOlXBt.cjs → rateLimitWindows-C78D8Uf-.cjs} +1 -1
  143. package/dist/{reconnectGate-DO_ZQmJE.mjs → reconnectGate-Ie4nSKNl.mjs} +1 -1
  144. package/dist/{reconnectGate-B_aJrehH.cjs → reconnectGate-S9yNiuY7.cjs} +1 -1
  145. package/dist/{registerCommonHandlers-em2elV3l.cjs → registerCommonHandlers-51llVpLx.cjs} +2 -2
  146. package/dist/{registerCommonHandlers-BEpK4WD2.mjs → registerCommonHandlers-BR7BeGX3.mjs} +2 -2
  147. package/dist/{registerKillSessionHandler-D4ZQvsH2.cjs → registerKillSessionHandler-BjY79qBi.cjs} +6 -6
  148. package/dist/{registerKillSessionHandler-D-dDzI2n.mjs → registerKillSessionHandler-RbWPmKnK.mjs} +6 -6
  149. package/dist/{registerSideQuestionHandler-BIOLUe2U.cjs → registerSideQuestionHandler-B1Xk7dFK.cjs} +4 -4
  150. package/dist/{registerSideQuestionHandler-okUy9Q_-.mjs → registerSideQuestionHandler-BbYT7QfR.mjs} +4 -4
  151. package/dist/{remoteSessionClient-CzjLyL9c.mjs → remoteSessionClient-Ddns3U8M.mjs} +5 -5
  152. package/dist/{remoteSessionClient-BLWFXMBo.cjs → remoteSessionClient-r-UnqHor.cjs} +5 -5
  153. package/dist/{reportProgressTool-DcNBXBw8.cjs → reportProgressTool-ByadxJtc.cjs} +5 -5
  154. package/dist/{reportProgressTool-CNi0Vqqm.mjs → reportProgressTool-C3sf9D8m.mjs} +5 -5
  155. package/dist/{run-D59Gb4SQ.mjs → run-jsINwBOz.mjs} +200 -55
  156. package/dist/{run-bzlz4DI1.cjs → run-r5sY3wHk.cjs} +200 -55
  157. package/dist/{runClaude-kVp1PKab.cjs → runClaude-CRKsRfnq.cjs} +53 -38
  158. package/dist/{runClaude-DZtdmcXK.mjs → runClaude-D8CuiZhi.mjs} +44 -29
  159. package/dist/{runClaudeDeps-BHv9FkVz.cjs → runClaudeDeps-BiVzNIE6.cjs} +129 -61
  160. package/dist/{runClaudeDeps-D83tR1KP.mjs → runClaudeDeps-CUuPWcg9.mjs} +125 -57
  161. package/dist/{runGemini-W-0t7skM.cjs → runGemini-DANnc0BW.cjs} +36 -35
  162. package/dist/{runGemini-DLc_bL4E.mjs → runGemini-cqVZjPT6.mjs} +36 -35
  163. package/dist/{runOpenClaw-mm-hKxMC.mjs → runOpenClaw-B6V2nz8J.mjs} +18 -18
  164. package/dist/{runOpenClaw-BsqbOw8R.cjs → runOpenClaw-CGwc6mfJ.cjs} +18 -18
  165. package/dist/{sandbox-DrWJss7J.cjs → sandbox-CNheYPva.cjs} +4 -4
  166. package/dist/{sandbox-DXbKl-Os.mjs → sandbox-JYBMckKE.mjs} +4 -4
  167. package/dist/{selfCheck-CVXucSXR.cjs → selfCheck-DtSEBt0g.cjs} +40 -40
  168. package/dist/selfCheck-Jjy_wMw3.mjs +89 -0
  169. package/dist/{send-Cdda78Iw.mjs → send-BHrbbGJ7.mjs} +8 -8
  170. package/dist/{send-D7pRBaht.cjs → send-DNdJR3n8.cjs} +8 -8
  171. package/dist/{server-BI6defPs.cjs → server-CvP_b3eb.cjs} +6 -6
  172. package/dist/{server-CNilQcJK.mjs → server-DhQjVsyZ.mjs} +4 -4
  173. package/dist/{sessionLock-CVjlaRSL.mjs → sessionLock-5i516L-w.mjs} +21 -4
  174. package/dist/{sessionLock-Bjsy90aM.cjs → sessionLock-UkF8M3j5.cjs} +22 -3
  175. package/dist/{sessionOps-CvmOHwGP.cjs → sessionOps-D77IeFSt.cjs} +4 -4
  176. package/dist/{sessionOps-CV5RUpwG.mjs → sessionOps-DX49XNAT.mjs} +4 -4
  177. package/dist/{sessionProvider-BmO4ahnt.mjs → sessionProvider-C5xW4Dt3.mjs} +10 -10
  178. package/dist/{sessionProvider-4sWr0Myr.cjs → sessionProvider-mSI2UgLX.cjs} +10 -10
  179. package/dist/{sessionScanner-DZBiEOyb.cjs → sessionScanner-B1Am8D4Y.cjs} +3 -3
  180. package/dist/{sessionScanner-34Q0vTR3.mjs → sessionScanner-BZkOnp5a.mjs} +3 -3
  181. package/dist/{sessions-Cl435KQT.mjs → sessions-ClQFpjcA.mjs} +10 -10
  182. package/dist/{sessions-DjAXZWTX.cjs → sessions-DDDEiHVR.cjs} +10 -10
  183. package/dist/{setupOfflineReconnection-zebrb6U_.cjs → setupOfflineReconnection-Cn2_vuvO.cjs} +2 -2
  184. package/dist/{setupOfflineReconnection-BC5FJTkc.mjs → setupOfflineReconnection-PjK9laDd.mjs} +2 -2
  185. package/dist/{spawn-DqWdgMt_.mjs → spawn-BJGaxdot.mjs} +15 -15
  186. package/dist/{spawn-C8cJK9-m.cjs → spawn-DOj-sY6W.cjs} +15 -15
  187. package/dist/{spawnAgents-BclZYkov.mjs → spawnAgents-CcFKtKdX.mjs} +2 -1
  188. package/dist/{spawnAgents-DvbEDCIq.cjs → spawnAgents-D4lR468W.cjs} +2 -1
  189. package/dist/{spawnHappyCLI-BckHSjR0.mjs → spawnHappyCLI-CpOMz9hX.mjs} +1 -1
  190. package/dist/{spawnHappyCLI-CeWgULMt.cjs → spawnHappyCLI-DvxZ7elP.cjs} +1 -1
  191. package/dist/{startFileWatcher-CXZYt0y9.cjs → startFileWatcher-1ar7WS96.cjs} +1 -1
  192. package/dist/{startFileWatcher-BXiBlfVr.mjs → startFileWatcher-CPbPNFGY.mjs} +1 -1
  193. package/dist/{startupSessionCreate-CycB-kwu.cjs → startupSessionCreate-COc5Nnr9.cjs} +3 -3
  194. package/dist/{startupSessionCreate-D8hODW7I.mjs → startupSessionCreate-CnVaUZ16.mjs} +3 -3
  195. package/dist/{store-Cpb1LMNW.cjs → store-DGMILdMn.cjs} +1 -1
  196. package/dist/{store-DWmjM4Ex.mjs → store-Fge1h9wy.mjs} +1 -1
  197. package/dist/{streamRelay-DdGOsW8v.mjs → streamRelay-MaaYNNuh.mjs} +1 -1
  198. package/dist/{streamRelay-4XiiNB3N.cjs → streamRelay-keuifCPQ.cjs} +1 -1
  199. package/dist/{sync-BfM5OKSS.mjs → sync-BZji3J2r.mjs} +1 -1
  200. package/dist/{sync-CyUWevwD.cjs → sync-DzInYE_l.cjs} +1 -1
  201. package/dist/{systemPrompt-BUZQDf4k.cjs → systemPrompt-CvpjNmQL.cjs} +2 -2
  202. package/dist/{systemPrompt-Tu_2ixE3.mjs → systemPrompt-Dhdq8hGf.mjs} +2 -2
  203. package/dist/{teams-KjHee0Vg.cjs → teams-CRCbDPob.cjs} +20 -9
  204. package/dist/{teams-Cpdqvfe3.mjs → teams-CVW4ZvmW.mjs} +20 -9
  205. package/dist/{template-3fV9bi0X.cjs → template-ChUotPTL.cjs} +1 -1
  206. package/dist/{template-CtRLg2PG.mjs → template-D8fzlO58.mjs} +1 -1
  207. package/dist/{time-BQWf06hA.mjs → time-BWVJTcWI.mjs} +1 -1
  208. package/dist/{time-CbOTVtAt.cjs → time-UUMqbIq8.cjs} +1 -1
  209. package/dist/{titleGenerator-CpiQkf_r.cjs → titleGenerator-BHOA2Wkx.cjs} +3 -3
  210. package/dist/{titleGenerator-DYnqd0oI.mjs → titleGenerator-Ck82YoB7.mjs} +2 -2
  211. package/dist/{todo-DVrsXyKn.mjs → todo-Cf52TlmX.mjs} +8 -8
  212. package/dist/{todo-Cp6bRp62.cjs → todo-Cwo7joub.cjs} +8 -8
  213. package/dist/{tools-BFQm7xny.cjs → tools-DEErCtZG.cjs} +47 -27
  214. package/dist/{tools-XGAJepvT.mjs → tools-DmNaOlUF.mjs} +47 -27
  215. package/dist/{uninstall-C2LF0vtR.mjs → uninstall-B85MiNK2.mjs} +3 -3
  216. package/dist/{uninstall-Cyqq90JW.cjs → uninstall-CoAK4ANz.cjs} +3 -3
  217. package/dist/{wrapperAccount-nGGMJDBF.cjs → wrapperAccount-BHMM9I6g.cjs} +2 -2
  218. package/dist/{wrapperAccount-z8Swrd08.mjs → wrapperAccount-CwaA-n1S.mjs} +2 -2
  219. package/package.json +7 -7
  220. package/dist/permissionMode-CH4FoZfU.mjs +0 -80
  221. package/dist/permissionMode-CrV-XuMs.cjs +0 -87
  222. package/dist/selfCheck-B1XdrEbN.mjs +0 -89
@@ -2,22 +2,25 @@ import { homedir } from 'node:os';
2
2
  import { readFile } from 'node:fs/promises';
3
3
  import { z } from 'zod';
4
4
  import { randomUUID } from 'node:crypto';
5
- import { t as teamRequest, c as createTeamsClient } from './client-DJsXNJWO.mjs';
6
- import { b as readCredentialsForConfiguredRelay } from './persistence-EuUaQKL7.mjs';
5
+ import { t as teamRequest, c as createTeamsClient } from './client-Og5iNZ6S.mjs';
6
+ import { b as readCredentialsForConfiguredRelay } from './persistence-3iZXGbfb.mjs';
7
7
  import { a as installTeamSkill, i as installAutomationSkill } from './install-B8O1JpJH.mjs';
8
+ import { h as exitDaemonTeamMode } from './controlClient-Daki7wgo.mjs';
8
9
  import 'node:child_process';
9
10
  import 'node:util';
10
11
  import 'node:path';
11
- import './index-CiRMvS73.mjs';
12
+ import './index-DWk-WTU-.mjs';
12
13
  import '@paralleldrive/cuid2';
13
- import './configuration-CQaLZMa-.mjs';
14
+ import './configuration-D_YrWa_i.mjs';
14
15
  import 'node:fs';
15
- import './package-aOUtHYRZ.mjs';
16
- import './context-ByTvtMXZ.mjs';
16
+ import './package-Dx3hbh9J.mjs';
17
+ import './context-DXfkj_FL.mjs';
18
+ import './exitNotice-D1tMULzu.mjs';
19
+ import './logger-BcdURxNR.mjs';
20
+ import 'chalk';
21
+ import './prompt-QHuFx9j6.mjs';
17
22
  import './authRelay-DhQhkBvX.mjs';
18
23
  import 'tweetnacl';
19
- import './logger-BEVIGYKL.mjs';
20
- import 'chalk';
21
24
  import './resources-CLP_MpK4.mjs';
22
25
 
23
26
  const legacyTask = z.object({
@@ -78,7 +81,7 @@ async function handleTeamsCommand(args) {
78
81
  return index < 0 ? void 0 : args[index + 1];
79
82
  };
80
83
  if (!command || command === "--help") {
81
- console.log("very-happy teams install|uninstall --host claude|codex|pi [--home PATH] [--apply]\nvery-happy teams doctor --host pi\nvery-happy teams migration-preview --file LEDGER_JSON\nvery-happy teams inspect\nvery-happy teams permissions --team-id ID --mode default|bypassPermissions --request-id ID\nvery-happy teams create|join --name NAME [--machine-id ID | --team-id ID] [--session-id ID] [--request-id ID]\nvery-happy teams action --json ACTION_JSON --request-id ID\nInstallation previews changes unless --apply is supplied. Managed sessions receive tools automatically.");
84
+ console.log("very-happy teams install|uninstall --host claude|codex|pi [--home PATH] [--apply]\nvery-happy teams doctor --host pi\nvery-happy teams migration-preview --file LEDGER_JSON\nvery-happy teams inspect\nvery-happy teams permissions --team-id ID --mode default|bypassPermissions --request-id ID\nvery-happy teams create|join --name NAME [--machine-id ID | --team-id ID] [--session-id ID] [--request-id ID]\nvery-happy teams action --json ACTION_JSON --request-id ID\nvery-happy teams exit --session-id ID (team lead only: archive the team, keep this session as an ordinary one)\nInstallation previews changes unless --apply is supplied. Managed sessions receive tools automatically.");
82
85
  return;
83
86
  }
84
87
  if (command === "install" || command === "uninstall") {
@@ -118,6 +121,14 @@ async function handleTeamsCommand(args) {
118
121
  console.log(JSON.stringify(await setTeamPermissionMode(teamId, mode, requestId)));
119
122
  return;
120
123
  }
124
+ if (command === "exit") {
125
+ const sessionId = value("--session-id") ?? process.env.HAPPY_SESSION_ID;
126
+ if (!sessionId) throw new Error("--session-id is required");
127
+ const result2 = await exitDaemonTeamMode(sessionId);
128
+ if (!result2.success) throw new Error(result2.error ?? "Exit team mode failed");
129
+ console.log(JSON.stringify(result2));
130
+ return;
131
+ }
121
132
  const client = createTeamsClient(value("--session-id"));
122
133
  let result;
123
134
  if (command === "inspect") result = await client.inspect();
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-44o_qMvE.cjs');
3
+ var index = require('./index-BYL_X3gP.cjs');
4
4
 
5
5
  function payloadJson(payload) {
6
6
  if (!payload) return void 0;
@@ -1,4 +1,4 @@
1
- import { o as AUTOMATION_ATTENTION_REASON_MAX_CHARS, q as AUTOMATION_SUMMARY_MAX_CHARS } from './index-CiRMvS73.mjs';
1
+ import { o as AUTOMATION_ATTENTION_REASON_MAX_CHARS, q as AUTOMATION_SUMMARY_MAX_CHARS } from './index-DWk-WTU-.mjs';
2
2
 
3
3
  function payloadJson(payload) {
4
4
  if (!payload) return void 0;
@@ -1,4 +1,4 @@
1
- import { l as logger } from './logger-BEVIGYKL.mjs';
1
+ import { l as logger } from './logger-BcdURxNR.mjs';
2
2
 
3
3
  async function delay(ms) {
4
4
  return new Promise((resolve) => setTimeout(resolve, ms));
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-Dhc0l3xH.cjs');
3
+ var logger = require('./logger-C8anCmdW.cjs');
4
4
 
5
5
  async function delay(ms) {
6
6
  return new Promise((resolve) => setTimeout(resolve, ms));
@@ -5,16 +5,16 @@ var module$1 = require('node:module');
5
5
  var oneShotPrompts = require('./oneShotPrompts-CL0dip9C.cjs');
6
6
  var node_crypto = require('node:crypto');
7
7
  var path = require('node:path');
8
- var logger = require('./logger-Dhc0l3xH.cjs');
8
+ var logger = require('./logger-C8anCmdW.cjs');
9
9
  var projectPath = require('./projectPath-C3ioB4Bu.cjs');
10
- var wrapperAccount = require('./wrapperAccount-nGGMJDBF.cjs');
10
+ var wrapperAccount = require('./wrapperAccount-BHMM9I6g.cjs');
11
11
 
12
12
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
13
13
  const MAX_PROMPT_SAMPLE_CHARS = 500;
14
14
  const MAX_TITLE_CHARS = 60;
15
15
  const GENERATION_TIMEOUT_MS = 3e4;
16
16
  function loadClaudeVersionUtils() {
17
- const require$1 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('titleGenerator-CpiQkf_r.cjs', document.baseURI).href)));
17
+ const require$1 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('titleGenerator-BHOA2Wkx.cjs', document.baseURI).href)));
18
18
  return require$1(path.resolve(path.join(projectPath.projectPath(), "scripts", "claude_version_utils.cjs")));
19
19
  }
20
20
  function resolveClaudeBinary(loadUtils = loadClaudeVersionUtils) {
@@ -3,9 +3,9 @@ import { createRequire } from 'node:module';
3
3
  import { T as TITLE_PROMPT_PREFIX } from './oneShotPrompts-DT4p6RNd.mjs';
4
4
  import { randomUUID } from 'node:crypto';
5
5
  import { resolve, join } from 'node:path';
6
- import { l as logger } from './logger-BEVIGYKL.mjs';
6
+ import { l as logger } from './logger-BcdURxNR.mjs';
7
7
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
8
- import { a as accountClaudeSettings } from './wrapperAccount-z8Swrd08.mjs';
8
+ import { a as accountClaudeSettings } from './wrapperAccount-CwaA-n1S.mjs';
9
9
 
10
10
  const MAX_PROMPT_SAMPLE_CHARS = 500;
11
11
  const MAX_TITLE_CHARS = 60;
@@ -1,20 +1,20 @@
1
- import { c as configuration } from './configuration-CQaLZMa-.mjs';
2
- import { E as createBuiltinTodoClient, F as ISSUE_LIMITS, G as sortBuiltinTodos, H as isIssueClosed, J as BUILTIN_TODO_SKILL } from './index-CiRMvS73.mjs';
3
- import { b as readCredentialsForConfiguredRelay } from './persistence-EuUaQKL7.mjs';
4
- import { r as readTeamScope, t as teamScopePath } from './context-ByTvtMXZ.mjs';
5
- import { a as IssueRequestError, s as sharedIssuesClient, i as importLegacyTodosOnce, I as IssuesUnsupportedError } from './client-Cj7D61by.mjs';
6
- import { d as describeIssueError } from './format-BSx-Nv2p.mjs';
1
+ import { c as configuration } from './configuration-D_YrWa_i.mjs';
2
+ import { E as createBuiltinTodoClient, F as ISSUE_LIMITS, G as sortBuiltinTodos, H as isIssueClosed, J as BUILTIN_TODO_SKILL } from './index-DWk-WTU-.mjs';
3
+ import { b as readCredentialsForConfiguredRelay } from './persistence-3iZXGbfb.mjs';
4
+ import { r as readTeamScope, t as teamScopePath } from './context-DXfkj_FL.mjs';
5
+ import { a as IssueRequestError, s as sharedIssuesClient, i as importLegacyTodosOnce, I as IssuesUnsupportedError } from './client-t1vQ7gho.mjs';
6
+ import { d as describeIssueError } from './format-DJwRUrQm.mjs';
7
7
  import 'node:fs';
8
8
  import 'node:os';
9
9
  import 'node:path';
10
- import './package-aOUtHYRZ.mjs';
10
+ import './package-Dx3hbh9J.mjs';
11
11
  import 'node:fs/promises';
12
12
  import 'zod';
13
13
  import '@paralleldrive/cuid2';
14
14
  import './authRelay-DhQhkBvX.mjs';
15
15
  import 'node:crypto';
16
16
  import 'tweetnacl';
17
- import './logger-BEVIGYKL.mjs';
17
+ import './logger-BcdURxNR.mjs';
18
18
  import 'chalk';
19
19
  import 'node:util';
20
20
 
@@ -1,22 +1,22 @@
1
1
  'use strict';
2
2
 
3
- var configuration = require('./configuration-DZUnfWp2.cjs');
4
- var index = require('./index-44o_qMvE.cjs');
5
- var persistence = require('./persistence-05BAS4Ou.cjs');
6
- var context = require('./context-BHydzPZw.cjs');
7
- var client = require('./client-xV99weGP.cjs');
8
- var format = require('./format-DePME4uu.cjs');
3
+ var configuration = require('./configuration-CDqmWkHO.cjs');
4
+ var index = require('./index-BYL_X3gP.cjs');
5
+ var persistence = require('./persistence-Ch78xygf.cjs');
6
+ var context = require('./context-k2CbuBtp.cjs');
7
+ var client = require('./client-ByK8-iRd.cjs');
8
+ var format = require('./format-9KvRMdvY.cjs');
9
9
  require('node:fs');
10
10
  require('node:os');
11
11
  require('node:path');
12
- require('./package-CAmlKYcH.cjs');
12
+ require('./package-DkpXQvp1.cjs');
13
13
  require('node:fs/promises');
14
14
  require('zod');
15
15
  require('@paralleldrive/cuid2');
16
16
  require('./authRelay-Dy1qU9td.cjs');
17
17
  require('node:crypto');
18
18
  require('tweetnacl');
19
- require('./logger-Dhc0l3xH.cjs');
19
+ require('./logger-C8anCmdW.cjs');
20
20
  require('chalk');
21
21
  require('node:util');
22
22
 
@@ -1,38 +1,52 @@
1
1
  'use strict';
2
2
 
3
3
  var z = require('zod');
4
- var client = require('./client-Ch4Azlny.cjs');
4
+ var client = require('./client-xA44FUnf.cjs');
5
5
 
6
+ const TEAM_VIEW_RECENT_MESSAGES = 20;
6
7
  const CLOSED_GOAL_CHARS = 200;
8
+ const MESSAGE_BODY_CHARS = 500;
7
9
  const closed = (task) => task.status === "done" || task.status === "cancelled";
8
- function teamToolView(team) {
9
- const { tasks = [], messages = [], operations = [], bots = [], ...rest } = team;
10
- const recent = new Set(messages.filter((m) => m.deliveredAt !== null || m.cancelledAt !== void 0).slice(-20).map((m) => m.id));
11
- const shownMessages = messages.filter((m) => recent.has(m.id) || m.deliveredAt === null && m.cancelledAt === void 0);
12
- const liveOperations = operations.filter((o) => o.status !== "completed" && o.error !== "task_closed_before_spawn");
13
- const closedTasks = tasks.filter(closed).length;
10
+ const undelivered = (m) => m.deliveredAt === null && m.cancelledAt === void 0;
11
+ function teamToolView(team, options = {}) {
12
+ const { tasks = [], messages = [], operations = [], bots = [], schedules, creationLaunch: _launch, capacityWarned: _warned, ...rest } = team;
13
+ const limit = options.messagesLimit ?? TEAM_VIEW_RECENT_MESSAGES;
14
+ const mine = options.botId ? messages.filter((m) => m.senderBotId === options.botId || m.recipientBotId === options.botId) : messages;
15
+ const pinned = (m) => undelivered(m) && (!options.botId || m.recipientBotId === options.botId);
16
+ const recent = new Set(mine.filter((m) => !pinned(m)).slice(limit > 0 ? -limit : mine.length).map((m) => m.id));
17
+ const shown = mine.filter((m) => recent.has(m.id) || pinned(m));
18
+ const closedTasks = tasks.filter(closed);
19
+ const closedCounts = { done: closedTasks.filter((t) => t.status === "done").length, cancelled: closedTasks.filter((t) => t.status === "cancelled").length };
14
20
  return {
15
21
  ...rest,
16
- bots: bots.map(({ previousSessionIds: _previous, ...bot }) => bot),
17
- tasks: tasks.map((task) => closed(task) ? closedTaskSummary(task) : openTask(task)),
18
- messages: shownMessages,
19
- operations: liveOperations.map(({ prompt: _prompt, ...op }) => op),
22
+ ...options.botId ? { selfBotId: options.botId } : {},
23
+ bots: bots.map((bot) => ({ id: bot.id, name: bot.name, root: bot.root, activity: bot.activity, lastEvent: bot.lastEvent })),
24
+ tasks: tasks.filter((t) => !closed(t)).map(openTaskView),
25
+ closedTasks: options.includeClosed ? closedTasks.map(closedTaskSummary) : closedCounts,
26
+ messages: shown.map(messageView),
27
+ ...schedules?.length ? { schedules: schedules.map((s) => ({ ...s, body: clip(s.body, CLOSED_GOAL_CHARS) })) } : {},
20
28
  omitted: {
21
- closedTaskDetails: closedTasks,
22
- olderMessages: messages.length - shownMessages.length,
23
- finishedOperations: operations.length - liveOperations.length,
24
- hint: "Compact view: closed tasks are summarized, older delivered messages and finished operations are left out. Call team_inspect with taskId for one task in full, or full=true for the whole team."
29
+ closedTaskDetails: options.includeClosed ? 0 : closedTasks.length,
30
+ olderMessages: mine.length - shown.length,
31
+ ...options.botId ? { otherMembersMessages: messages.length - mine.length } : {},
32
+ operations: operations.length,
33
+ unfinishedOperations: operations.filter((o) => o.status !== "completed").length,
34
+ hint: "Compact view: goals and message bodies are clipped, closed tasks are counted, operations are left out. \u9700\u8981\u5B8C\u6574\u5185\u5BB9\u65F6\u7528 taskId \u8C03 team_inspect (one task: full goal, acceptance, attempts with results, its messages and operations); includeClosed=true lists closed tasks, messagesLimit sets how many recent messages, full=true returns the whole team (very large)."
25
35
  }
26
36
  };
27
37
  }
38
+ function openTaskView(task) {
39
+ const current = task.attempts.find((a) => a.id === task.currentAttemptId);
40
+ return { id: task.id, parentTaskId: task.parentTaskId, status: task.status, goal: clip(task.goal, CLOSED_GOAL_CHARS), assigneeBotId: task.assigneeBotId, ownerBotId: task.ownerBotId, currentAttemptId: task.currentAttemptId, ...current ? { currentAttemptStatus: current.status } : {}, goalVersion: task.goalVersion, cleanup: task.cleanup, attempts: task.attempts.length };
41
+ }
42
+ function messageView({ id: _id, deliveredAt, body, ...m }) {
43
+ return { ...m, body: clip(body, MESSAGE_BODY_CHARS), ...body.length > MESSAGE_BODY_CHARS ? { bodyChars: body.length } : {}, ...deliveredAt === null ? { undelivered: true } : {} };
44
+ }
28
45
  function teamTaskToolView(team, taskId) {
29
46
  const task = team.tasks.find((t) => t.id === taskId);
30
47
  if (!task) return { taskId, error: "Task not visible: it does not exist, is outside your scope, or was archived after it closed." };
31
48
  return { task, messages: team.messages.filter((m) => m.taskId === taskId), operations: team.operations.filter((o) => o.taskId === taskId), capacity: team.capacity };
32
49
  }
33
- function openTask(task) {
34
- return { ...task, attempts: task.attempts.map((a) => a.id === task.currentAttemptId ? a : { id: a.id, botId: a.botId, status: a.status, goalVersion: a.goalVersion }) };
35
- }
36
50
  function closedTaskSummary(task) {
37
51
  const accepted = task.attempts.find((a) => a.id === task.currentAttemptId);
38
52
  return { id: task.id, parentTaskId: task.parentTaskId, status: task.status, goal: clip(task.goal, CLOSED_GOAL_CHARS), assigneeBotId: task.assigneeBotId, ownerBotId: task.ownerBotId, currentAttemptId: task.currentAttemptId, goalVersion: task.goalVersion, cleanup: task.cleanup, attempts: task.attempts.length, ...accepted?.result ? { result: clip(accepted.result, CLOSED_GOAL_CHARS) } : {}, ...task.closedAt ? { closedAt: task.closedAt } : {} };
@@ -47,11 +61,12 @@ function teamActionReceipt(result, actedTaskId) {
47
61
  const schedule = typeof rest.scheduleId === "string" ? schedules.find((s) => s.id === rest.scheduleId) : void 0;
48
62
  const taskOperations = taskId ? operations.filter((o) => o.taskId === taskId && o.status !== "completed") : [];
49
63
  return {
64
+ ok: true,
50
65
  ...rest,
51
66
  ...taskId ? { taskId } : {},
52
67
  ...task ? { task: taskReceipt(task) } : {},
53
- ...operation ? { operation: withoutPrompt(operation) } : {},
54
- ...taskOperations.length ? { taskOperations: taskOperations.map(withoutPrompt) } : {},
68
+ ...operation ? { operation: operationReceipt(operation) } : {},
69
+ ...taskOperations.length ? { taskOperations: taskOperations.map(operationReceipt) } : {},
55
70
  ...schedule ? { schedule } : {},
56
71
  team: {
57
72
  id: team.id,
@@ -69,7 +84,7 @@ function taskReceipt(task) {
69
84
  const current = task.attempts.find((a) => a.id === task.currentAttemptId);
70
85
  return { id: task.id, parentTaskId: task.parentTaskId, status: task.status, goal: clip(task.goal, CLOSED_GOAL_CHARS), assigneeBotId: task.assigneeBotId, ownerBotId: task.ownerBotId, currentAttemptId: task.currentAttemptId, goalVersion: task.goalVersion, cleanup: task.cleanup, attempts: task.attempts.length, ...current ? { currentAttempt: { id: current.id, botId: current.botId, status: current.status, goalVersion: current.goalVersion, generation: current.generation } } : {} };
71
86
  }
72
- const withoutPrompt = ({ prompt: _prompt, ...op }) => op;
87
+ const operationReceipt = (op) => ({ id: op.id, type: op.type, botId: op.botId, status: op.status, error: op.error });
73
88
 
74
89
  const TEAM_TOOL_NAMES = ["team_create", "team_join", "team_inspect", "team_delegate", "team_message", "team_submit", "team_accept", "team_return", "team_cancel", "team_handoff", "team_schedule_create", "team_schedule_pause", "team_schedule_resume", "team_schedule_cancel"];
75
90
  const id = z.z.string().min(1).max(128);
@@ -85,26 +100,31 @@ function registerTeamsTools(server, sessionId, client$1 = client.createTeamsClie
85
100
  }
86
101
  });
87
102
  };
103
+ const compact = (result, options = {}) => Array.isArray(result?.team?.tasks) && !result.team.omitted ? { ...result, team: teamToolView(result.team, { botId: typeof result.botId === "string" ? result.botId : void 0, ...options }) } : result;
88
104
  register(
89
105
  "team_create",
90
106
  "Create an official Very Happy team and join this session as its root bot. Does not grant access outside this account. The team joins this session's project, or a new project with the team's name; its members share that project's context.",
91
107
  { name: id, machineId: id.optional(), requestId, projectId: id.optional().describe("Existing project to put the team in"), noProject: z.z.boolean().optional().describe("Create the team without a project") },
92
- (args) => client$1.initialize(args)
108
+ async (args) => compact(await client$1.initialize(args))
93
109
  );
94
110
  register(
95
111
  "team_join",
96
112
  "Join an existing team as a root bot using this session owner\u2019s account. Scoped workers cannot elevate their role.",
97
113
  { teamId: id, name: id, botId: id.optional().describe("Existing root bot to reconnect; preserves its identity"), requestId },
98
- (args) => client$1.initialize(args)
114
+ async (args) => compact(await client$1.initialize(args))
99
115
  );
100
- const compact = (result) => result?.team && !result.team.omitted ? { ...result, team: teamToolView(result.team) } : result;
101
116
  register(
102
117
  "team_inspect",
103
- "Read your visible team tasks, attempts and messages. Inspect before decisions; submission is not acceptance. Returns a compact view (closed tasks summarized, recent messages, unfinished operations, capacity); pass taskId for one task in full, or full=true for the whole team.",
104
- { taskId: id.optional().describe("Return this task in full: all attempts, messages and operations"), full: z.z.boolean().optional().describe("Return the whole team view (can be very large)") },
118
+ "Read your visible team tasks, attempts and messages. Inspect before decisions; submission is not acceptance. Returns a compact view (members, open tasks with clipped goals, closed-task counts, your recent messages clipped, capacity); pass taskId for one task in full (goal, acceptance, attempts and results, its messages), includeClosed / messagesLimit to widen the view, or full=true for the whole team.",
119
+ {
120
+ taskId: id.optional().describe("Return this task in full: goal, acceptance, all attempts with results, its messages and operations"),
121
+ includeClosed: z.z.boolean().optional().describe("List closed (done / cancelled) tasks with clipped goals instead of counting them"),
122
+ messagesLimit: z.z.number().int().min(0).max(500).optional().describe("How many of your most recent messages to list (default 20); undelivered ones are always listed"),
123
+ full: z.z.boolean().optional().describe("Return the whole team view (can be very large)")
124
+ },
105
125
  async (args) => {
106
126
  const result = await client$1.inspect();
107
- return args.full ? result : args.taskId ? teamTaskToolView(result.team, args.taskId) : compact(result);
127
+ return args.full ? result : args.taskId ? teamTaskToolView(result.team, args.taskId) : compact(result, { includeClosed: args.includeClosed, messagesLimit: args.messagesLimit });
108
128
  }
109
129
  );
110
130
  const action = (name, description, fields) => register(
@@ -1,36 +1,50 @@
1
1
  import { z } from 'zod';
2
- import { c as createTeamsClient } from './client-DJsXNJWO.mjs';
2
+ import { c as createTeamsClient } from './client-Og5iNZ6S.mjs';
3
3
 
4
+ const TEAM_VIEW_RECENT_MESSAGES = 20;
4
5
  const CLOSED_GOAL_CHARS = 200;
6
+ const MESSAGE_BODY_CHARS = 500;
5
7
  const closed = (task) => task.status === "done" || task.status === "cancelled";
6
- function teamToolView(team) {
7
- const { tasks = [], messages = [], operations = [], bots = [], ...rest } = team;
8
- const recent = new Set(messages.filter((m) => m.deliveredAt !== null || m.cancelledAt !== void 0).slice(-20).map((m) => m.id));
9
- const shownMessages = messages.filter((m) => recent.has(m.id) || m.deliveredAt === null && m.cancelledAt === void 0);
10
- const liveOperations = operations.filter((o) => o.status !== "completed" && o.error !== "task_closed_before_spawn");
11
- const closedTasks = tasks.filter(closed).length;
8
+ const undelivered = (m) => m.deliveredAt === null && m.cancelledAt === void 0;
9
+ function teamToolView(team, options = {}) {
10
+ const { tasks = [], messages = [], operations = [], bots = [], schedules, creationLaunch: _launch, capacityWarned: _warned, ...rest } = team;
11
+ const limit = options.messagesLimit ?? TEAM_VIEW_RECENT_MESSAGES;
12
+ const mine = options.botId ? messages.filter((m) => m.senderBotId === options.botId || m.recipientBotId === options.botId) : messages;
13
+ const pinned = (m) => undelivered(m) && (!options.botId || m.recipientBotId === options.botId);
14
+ const recent = new Set(mine.filter((m) => !pinned(m)).slice(limit > 0 ? -limit : mine.length).map((m) => m.id));
15
+ const shown = mine.filter((m) => recent.has(m.id) || pinned(m));
16
+ const closedTasks = tasks.filter(closed);
17
+ const closedCounts = { done: closedTasks.filter((t) => t.status === "done").length, cancelled: closedTasks.filter((t) => t.status === "cancelled").length };
12
18
  return {
13
19
  ...rest,
14
- bots: bots.map(({ previousSessionIds: _previous, ...bot }) => bot),
15
- tasks: tasks.map((task) => closed(task) ? closedTaskSummary(task) : openTask(task)),
16
- messages: shownMessages,
17
- operations: liveOperations.map(({ prompt: _prompt, ...op }) => op),
20
+ ...options.botId ? { selfBotId: options.botId } : {},
21
+ bots: bots.map((bot) => ({ id: bot.id, name: bot.name, root: bot.root, activity: bot.activity, lastEvent: bot.lastEvent })),
22
+ tasks: tasks.filter((t) => !closed(t)).map(openTaskView),
23
+ closedTasks: options.includeClosed ? closedTasks.map(closedTaskSummary) : closedCounts,
24
+ messages: shown.map(messageView),
25
+ ...schedules?.length ? { schedules: schedules.map((s) => ({ ...s, body: clip(s.body, CLOSED_GOAL_CHARS) })) } : {},
18
26
  omitted: {
19
- closedTaskDetails: closedTasks,
20
- olderMessages: messages.length - shownMessages.length,
21
- finishedOperations: operations.length - liveOperations.length,
22
- hint: "Compact view: closed tasks are summarized, older delivered messages and finished operations are left out. Call team_inspect with taskId for one task in full, or full=true for the whole team."
27
+ closedTaskDetails: options.includeClosed ? 0 : closedTasks.length,
28
+ olderMessages: mine.length - shown.length,
29
+ ...options.botId ? { otherMembersMessages: messages.length - mine.length } : {},
30
+ operations: operations.length,
31
+ unfinishedOperations: operations.filter((o) => o.status !== "completed").length,
32
+ hint: "Compact view: goals and message bodies are clipped, closed tasks are counted, operations are left out. \u9700\u8981\u5B8C\u6574\u5185\u5BB9\u65F6\u7528 taskId \u8C03 team_inspect (one task: full goal, acceptance, attempts with results, its messages and operations); includeClosed=true lists closed tasks, messagesLimit sets how many recent messages, full=true returns the whole team (very large)."
23
33
  }
24
34
  };
25
35
  }
36
+ function openTaskView(task) {
37
+ const current = task.attempts.find((a) => a.id === task.currentAttemptId);
38
+ return { id: task.id, parentTaskId: task.parentTaskId, status: task.status, goal: clip(task.goal, CLOSED_GOAL_CHARS), assigneeBotId: task.assigneeBotId, ownerBotId: task.ownerBotId, currentAttemptId: task.currentAttemptId, ...current ? { currentAttemptStatus: current.status } : {}, goalVersion: task.goalVersion, cleanup: task.cleanup, attempts: task.attempts.length };
39
+ }
40
+ function messageView({ id: _id, deliveredAt, body, ...m }) {
41
+ return { ...m, body: clip(body, MESSAGE_BODY_CHARS), ...body.length > MESSAGE_BODY_CHARS ? { bodyChars: body.length } : {}, ...deliveredAt === null ? { undelivered: true } : {} };
42
+ }
26
43
  function teamTaskToolView(team, taskId) {
27
44
  const task = team.tasks.find((t) => t.id === taskId);
28
45
  if (!task) return { taskId, error: "Task not visible: it does not exist, is outside your scope, or was archived after it closed." };
29
46
  return { task, messages: team.messages.filter((m) => m.taskId === taskId), operations: team.operations.filter((o) => o.taskId === taskId), capacity: team.capacity };
30
47
  }
31
- function openTask(task) {
32
- return { ...task, attempts: task.attempts.map((a) => a.id === task.currentAttemptId ? a : { id: a.id, botId: a.botId, status: a.status, goalVersion: a.goalVersion }) };
33
- }
34
48
  function closedTaskSummary(task) {
35
49
  const accepted = task.attempts.find((a) => a.id === task.currentAttemptId);
36
50
  return { id: task.id, parentTaskId: task.parentTaskId, status: task.status, goal: clip(task.goal, CLOSED_GOAL_CHARS), assigneeBotId: task.assigneeBotId, ownerBotId: task.ownerBotId, currentAttemptId: task.currentAttemptId, goalVersion: task.goalVersion, cleanup: task.cleanup, attempts: task.attempts.length, ...accepted?.result ? { result: clip(accepted.result, CLOSED_GOAL_CHARS) } : {}, ...task.closedAt ? { closedAt: task.closedAt } : {} };
@@ -45,11 +59,12 @@ function teamActionReceipt(result, actedTaskId) {
45
59
  const schedule = typeof rest.scheduleId === "string" ? schedules.find((s) => s.id === rest.scheduleId) : void 0;
46
60
  const taskOperations = taskId ? operations.filter((o) => o.taskId === taskId && o.status !== "completed") : [];
47
61
  return {
62
+ ok: true,
48
63
  ...rest,
49
64
  ...taskId ? { taskId } : {},
50
65
  ...task ? { task: taskReceipt(task) } : {},
51
- ...operation ? { operation: withoutPrompt(operation) } : {},
52
- ...taskOperations.length ? { taskOperations: taskOperations.map(withoutPrompt) } : {},
66
+ ...operation ? { operation: operationReceipt(operation) } : {},
67
+ ...taskOperations.length ? { taskOperations: taskOperations.map(operationReceipt) } : {},
53
68
  ...schedule ? { schedule } : {},
54
69
  team: {
55
70
  id: team.id,
@@ -67,7 +82,7 @@ function taskReceipt(task) {
67
82
  const current = task.attempts.find((a) => a.id === task.currentAttemptId);
68
83
  return { id: task.id, parentTaskId: task.parentTaskId, status: task.status, goal: clip(task.goal, CLOSED_GOAL_CHARS), assigneeBotId: task.assigneeBotId, ownerBotId: task.ownerBotId, currentAttemptId: task.currentAttemptId, goalVersion: task.goalVersion, cleanup: task.cleanup, attempts: task.attempts.length, ...current ? { currentAttempt: { id: current.id, botId: current.botId, status: current.status, goalVersion: current.goalVersion, generation: current.generation } } : {} };
69
84
  }
70
- const withoutPrompt = ({ prompt: _prompt, ...op }) => op;
85
+ const operationReceipt = (op) => ({ id: op.id, type: op.type, botId: op.botId, status: op.status, error: op.error });
71
86
 
72
87
  const TEAM_TOOL_NAMES = ["team_create", "team_join", "team_inspect", "team_delegate", "team_message", "team_submit", "team_accept", "team_return", "team_cancel", "team_handoff", "team_schedule_create", "team_schedule_pause", "team_schedule_resume", "team_schedule_cancel"];
73
88
  const id = z.string().min(1).max(128);
@@ -83,26 +98,31 @@ function registerTeamsTools(server, sessionId, client = createTeamsClient(sessio
83
98
  }
84
99
  });
85
100
  };
101
+ const compact = (result, options = {}) => Array.isArray(result?.team?.tasks) && !result.team.omitted ? { ...result, team: teamToolView(result.team, { botId: typeof result.botId === "string" ? result.botId : void 0, ...options }) } : result;
86
102
  register(
87
103
  "team_create",
88
104
  "Create an official Very Happy team and join this session as its root bot. Does not grant access outside this account. The team joins this session's project, or a new project with the team's name; its members share that project's context.",
89
105
  { name: id, machineId: id.optional(), requestId, projectId: id.optional().describe("Existing project to put the team in"), noProject: z.boolean().optional().describe("Create the team without a project") },
90
- (args) => client.initialize(args)
106
+ async (args) => compact(await client.initialize(args))
91
107
  );
92
108
  register(
93
109
  "team_join",
94
110
  "Join an existing team as a root bot using this session owner\u2019s account. Scoped workers cannot elevate their role.",
95
111
  { teamId: id, name: id, botId: id.optional().describe("Existing root bot to reconnect; preserves its identity"), requestId },
96
- (args) => client.initialize(args)
112
+ async (args) => compact(await client.initialize(args))
97
113
  );
98
- const compact = (result) => result?.team && !result.team.omitted ? { ...result, team: teamToolView(result.team) } : result;
99
114
  register(
100
115
  "team_inspect",
101
- "Read your visible team tasks, attempts and messages. Inspect before decisions; submission is not acceptance. Returns a compact view (closed tasks summarized, recent messages, unfinished operations, capacity); pass taskId for one task in full, or full=true for the whole team.",
102
- { taskId: id.optional().describe("Return this task in full: all attempts, messages and operations"), full: z.boolean().optional().describe("Return the whole team view (can be very large)") },
116
+ "Read your visible team tasks, attempts and messages. Inspect before decisions; submission is not acceptance. Returns a compact view (members, open tasks with clipped goals, closed-task counts, your recent messages clipped, capacity); pass taskId for one task in full (goal, acceptance, attempts and results, its messages), includeClosed / messagesLimit to widen the view, or full=true for the whole team.",
117
+ {
118
+ taskId: id.optional().describe("Return this task in full: goal, acceptance, all attempts with results, its messages and operations"),
119
+ includeClosed: z.boolean().optional().describe("List closed (done / cancelled) tasks with clipped goals instead of counting them"),
120
+ messagesLimit: z.number().int().min(0).max(500).optional().describe("How many of your most recent messages to list (default 20); undelivered ones are always listed"),
121
+ full: z.boolean().optional().describe("Return the whole team view (can be very large)")
122
+ },
103
123
  async (args) => {
104
124
  const result = await client.inspect();
105
- return args.full ? result : args.taskId ? teamTaskToolView(result.team, args.taskId) : compact(result);
125
+ return args.full ? result : args.taskId ? teamTaskToolView(result.team, args.taskId) : compact(result, { includeClosed: args.includeClosed, messagesLimit: args.messagesLimit });
106
126
  }
107
127
  );
108
128
  const action = (name, description, fields) => register(
@@ -1,13 +1,13 @@
1
- import { l as logger } from './logger-BEVIGYKL.mjs';
1
+ import { l as logger } from './logger-BcdURxNR.mjs';
2
2
  import { existsSync, unlinkSync } from 'fs';
3
3
  import { execSync } from 'child_process';
4
4
  import 'chalk';
5
5
  import 'node:util';
6
- import './configuration-CQaLZMa-.mjs';
6
+ import './configuration-D_YrWa_i.mjs';
7
7
  import 'node:fs';
8
8
  import 'node:os';
9
9
  import 'node:path';
10
- import './package-aOUtHYRZ.mjs';
10
+ import './package-Dx3hbh9J.mjs';
11
11
  import 'node:fs/promises';
12
12
 
13
13
  const PLIST_LABEL = "com.happy-cli.daemon";
@@ -1,15 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-Dhc0l3xH.cjs');
3
+ var logger = require('./logger-C8anCmdW.cjs');
4
4
  var require$$0 = require('fs');
5
5
  var child_process = require('child_process');
6
6
  require('chalk');
7
7
  require('node:util');
8
- require('./configuration-DZUnfWp2.cjs');
8
+ require('./configuration-CDqmWkHO.cjs');
9
9
  require('node:fs');
10
10
  require('node:os');
11
11
  require('node:path');
12
- require('./package-CAmlKYcH.cjs');
12
+ require('./package-DkpXQvp1.cjs');
13
13
  require('node:fs/promises');
14
14
 
15
15
  const PLIST_LABEL = "com.happy-cli.daemon";
@@ -3,8 +3,8 @@
3
3
  var node_fs = require('node:fs');
4
4
  var os = require('node:os');
5
5
  var path = require('node:path');
6
- var claudeAccountEnv = require('./claudeAccountEnv-Btp39mfa.cjs');
7
- var store = require('./store-Cpb1LMNW.cjs');
6
+ var claudeAccountEnv = require('./claudeAccountEnv-BTZjHTpF.cjs');
7
+ var store = require('./store-DGMILdMn.cjs');
8
8
 
9
9
  let current = null;
10
10
  let home = null;
@@ -1,8 +1,8 @@
1
1
  import { mkdirSync, writeFileSync, chmodSync, readFileSync, rmSync } from 'node:fs';
2
2
  import { homedir } from 'node:os';
3
3
  import { dirname, join } from 'node:path';
4
- import { r as resolveClaudeAccount, a as applyAccountEnv, o as overridingUserSettings } from './claudeAccountEnv-DowsOlDB.mjs';
5
- import { r as readSessionBindings, w as writeSessionBinding, d as defaultSecretProbe, a as readAccounts, c as readAccountsFileV2, f as writeAccountsFile } from './store-DWmjM4Ex.mjs';
4
+ import { r as resolveClaudeAccount, a as applyAccountEnv, o as overridingUserSettings } from './claudeAccountEnv-C6Wl-ZbT.mjs';
5
+ import { r as readSessionBindings, w as writeSessionBinding, d as defaultSecretProbe, a as readAccounts, c as readAccountsFileV2, f as writeAccountsFile } from './store-Fge1h9wy.mjs';
6
6
 
7
7
  let current = null;
8
8
  let home = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "very-happy-cli",
3
- "version": "0.2.202",
3
+ "version": "0.2.204",
4
4
  "description": "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.",
5
5
  "author": "Kirill Dubovitskiy",
6
6
  "contributors": [
@@ -117,12 +117,12 @@
117
117
  "zod": "^4.6.7"
118
118
  },
119
119
  "optionalDependencies": {
120
- "very-happy-tools-arm64-darwin": "0.2.202",
121
- "very-happy-tools-x64-darwin": "0.2.202",
122
- "very-happy-tools-arm64-linux": "0.2.202",
123
- "very-happy-tools-x64-linux": "0.2.202",
124
- "very-happy-tools-arm64-win32": "0.2.202",
125
- "very-happy-tools-x64-win32": "0.2.202"
120
+ "very-happy-tools-arm64-darwin": "0.2.204",
121
+ "very-happy-tools-x64-darwin": "0.2.204",
122
+ "very-happy-tools-arm64-linux": "0.2.204",
123
+ "very-happy-tools-x64-linux": "0.2.204",
124
+ "very-happy-tools-arm64-win32": "0.2.204",
125
+ "very-happy-tools-x64-win32": "0.2.204"
126
126
  },
127
127
  "devDependencies": {
128
128
  "@slopus/happy-wire": "workspace:*",