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.
- package/dist/{AcpBackend-Z51picBa.mjs → AcpBackend-BBfcpIDj.mjs} +3 -3
- package/dist/{AcpBackend-BRcPXur6.cjs → AcpBackend-BupxHXGp.cjs} +3 -3
- package/dist/{AcpSessionManager-BCGqL1Em.mjs → AcpSessionManager-B9UkPYGi.mjs} +2 -2
- package/dist/{AcpSessionManager-BckOYH3I.cjs → AcpSessionManager-JJrnenKM.cjs} +2 -2
- package/dist/{BasePermissionHandler-BYIY3kxs.cjs → BasePermissionHandler-86_xnisC.cjs} +1 -1
- package/dist/{BasePermissionHandler-BhJjr-wB.mjs → BasePermissionHandler-tGylJLUH.mjs} +1 -1
- package/dist/{account-B-HTHZKw.mjs → account-BRqUOj_D.mjs} +11 -11
- package/dist/{account-B0Wu7rJR.cjs → account-C91_R-kw.cjs} +11 -11
- package/dist/{accountService-DEpIq6CF.mjs → accountService-CqrWNH8K.mjs} +4 -4
- package/dist/{accountService-Cns8UYGI.cjs → accountService-SOeB_21A.cjs} +4 -4
- package/dist/{acpSessionResume-BKjQRT4V.mjs → acpSessionResume-CZQ91ano.mjs} +1 -1
- package/dist/{acpSessionResume-C8Kd8eK6.cjs → acpSessionResume-DK8EjIY0.cjs} +1 -1
- package/dist/{agentHome-BXiCouR4.mjs → agentHome-71zGywwx.mjs} +4 -4
- package/dist/{agentHome-DnxSf1ox.cjs → agentHome-BZvbPuy1.cjs} +4 -4
- package/dist/{api-Cu1OFHDM.mjs → api-BYh1VGBa.mjs} +107 -18
- package/dist/{api-B-FB-s4z.cjs → api-BoJA-zK3.cjs} +107 -18
- package/dist/{apiMachine-DYGPILVb.mjs → apiMachine--_eI4PTv.mjs} +105 -21
- package/dist/{apiMachine-DCWgI1l_.cjs → apiMachine-CA58NM_V.cjs} +105 -21
- package/dist/{attachmentContent-Dq8P5ODq.mjs → attachmentContent-D95cCBX5.mjs} +2 -2
- package/dist/{attachmentContent-dXwHB_3C.cjs → attachmentContent-y621KwMz.cjs} +2 -2
- package/dist/{auth-DpIHm7Lb.cjs → auth-CAkpHr8F.cjs} +5 -5
- package/dist/{auth-D11uvx2P.mjs → auth-DCzFx5BN.mjs} +8 -8
- package/dist/{auth-CgdE-j7z.mjs → auth-DRJ_WPn3.mjs} +5 -5
- package/dist/{auth-BVNBE4B1.cjs → auth-Dofm64Kp.cjs} +8 -8
- package/dist/{auto-WdjHKP9R.mjs → auto-CrgOy5OR.mjs} +18 -18
- package/dist/{auto-Ba2b-il4.cjs → auto-D4IBwJEE.cjs} +18 -18
- package/dist/{bootstrap-CsZO_jkL.cjs → bootstrap-D16MMPNP.cjs} +2 -2
- package/dist/{bootstrap-BTYJf2w8.mjs → bootstrap-PnL2FX64.mjs} +2 -2
- package/dist/{browser-Dx3UOVPP.mjs → browser-D2enJJfv.mjs} +1 -1
- package/dist/{browser-DgufCq1K.cjs → browser-DK2GfyEr.cjs} +1 -1
- package/dist/{claudeAccountEnv-Btp39mfa.cjs → claudeAccountEnv-BTZjHTpF.cjs} +1 -1
- package/dist/{claudeAccountEnv-DowsOlDB.mjs → claudeAccountEnv-C6Wl-ZbT.mjs} +1 -1
- package/dist/{claudeLocal-ylDKcvX0.mjs → claudeLocal-BbzN1qly.mjs} +5 -5
- package/dist/{claudeLocal-Q0FgzhTu.cjs → claudeLocal-DaqiRW9N.cjs} +5 -5
- package/dist/{claudeLocalLauncher-D2rZvuaW.cjs → claudeLocalLauncher-B0qbyOUc.cjs} +10 -10
- package/dist/{claudeLocalLauncher-CtybsaR8.mjs → claudeLocalLauncher-D7bhZ9rp.mjs} +10 -10
- package/dist/claudeLongContext-BR_zdjUp.cjs +239 -0
- package/dist/claudeLongContext-CZ60xo5p.mjs +219 -0
- package/dist/{claudeSessionFork-DRLxmv9j.mjs → claudeSessionFork-BPF3cpGs.mjs} +1 -1
- package/dist/{claudeSessionFork-BrstQPE4.cjs → claudeSessionFork-lcajftLB.cjs} +1 -1
- package/dist/{client-DfT_CRwl.mjs → client-BH4s6mzX.mjs} +2 -2
- package/dist/{client-D0oBXuEe.mjs → client-BHt14nix.mjs} +2 -2
- package/dist/{client-xV99weGP.cjs → client-ByK8-iRd.cjs} +3 -3
- package/dist/{client-CNWx72ZT.cjs → client-CqmT_ur8.cjs} +2 -2
- package/dist/{client-Dq7jaxb2.cjs → client-D5_YDMpA.cjs} +2 -2
- package/dist/{client-DJsXNJWO.mjs → client-Og5iNZ6S.mjs} +17 -8
- package/dist/{client-Cj7D61by.mjs → client-t1vQ7gho.mjs} +3 -3
- package/dist/{client-Ch4Azlny.cjs → client-xA44FUnf.cjs} +17 -8
- package/dist/codex/happyMcpStdioBridge.cjs +20 -19
- package/dist/codex/happyMcpStdioBridge.mjs +20 -19
- package/dist/{codexAccount-CieIQLOX.mjs → codexAccount-BPQ-lPhH.mjs} +1 -1
- package/dist/{codexAccount-D-OBY29W.cjs → codexAccount-BjaHvmKH.cjs} +1 -1
- package/dist/{codexAppServerClient-DtdCZ7_b.mjs → codexAppServerClient-CvL3eBlM.mjs} +3 -3
- package/dist/{codexAppServerClient-BwBPZonh.cjs → codexAppServerClient-CyLtj1kP.cjs} +3 -3
- package/dist/{codexCommand-CsY9YFiG.cjs → codexCommand-B0Slfvne.cjs} +67 -56
- package/dist/{codexCommand-D92AQCLU.mjs → codexCommand-CXytYlk9.mjs} +67 -56
- package/dist/{codexTermination-BbXG2oFT.cjs → codexTermination-CykPnK3G.cjs} +1 -1
- package/dist/{codexTermination-rhIxjRMJ.mjs → codexTermination-D0sBaTvW.mjs} +1 -1
- package/dist/{config-Zhkmfb3O.cjs → config-7Z5qIB3k.cjs} +3 -3
- package/dist/{config-BnN1yFyi.mjs → config-DeXK_5y4.mjs} +3 -3
- package/dist/{configuration-DZUnfWp2.cjs → configuration-CDqmWkHO.cjs} +1 -1
- package/dist/{configuration-CQaLZMa-.mjs → configuration-D_YrWa_i.mjs} +1 -1
- package/dist/{connect-DY5QLfbI.mjs → connect-CivOym_v.mjs} +13 -13
- package/dist/{connect-BToTf3Gy.cjs → connect-D_tzdR4l.cjs} +13 -13
- package/dist/{context-ByTvtMXZ.mjs → context-DXfkj_FL.mjs} +1 -1
- package/dist/{context-BHydzPZw.cjs → context-k2CbuBtp.cjs} +1 -1
- package/dist/{controlClient-Bfwe0Xpt.cjs → controlClient-BS86Ksm8.cjs} +12 -3
- package/dist/{controlClient-Cqhd8ynk.mjs → controlClient-Daki7wgo.mjs} +12 -4
- package/dist/{createSessionMetadata-D_qa01wq.cjs → createSessionMetadata-2s80RDL1.cjs} +2 -2
- package/dist/{createSessionMetadata-tmhDzhJZ.mjs → createSessionMetadata-B_hQ8lDn.mjs} +2 -2
- package/dist/{daemonAccounts-ciidbU2h.cjs → daemonAccounts-BOoI7-sw.cjs} +2 -2
- package/dist/{daemonAccounts-D5shoCLt.mjs → daemonAccounts-BtkmoJmC.mjs} +3 -3
- package/dist/{defaultPermissionMode-DgeiMMqy.mjs → defaultPermissionMode-CYQi7vqJ.mjs} +1 -1
- package/dist/{defaultPermissionMode-Cs_Tv83b.cjs → defaultPermissionMode-DmLYaaL8.cjs} +1 -1
- package/dist/{deterministicJson-DRL1Gs_c.mjs → deterministicJson-DKiOtrSA.mjs} +23 -16
- package/dist/{deterministicJson-CbUdClvO.cjs → deterministicJson-lwG_VzWd.cjs} +23 -16
- package/dist/{doctor-DHCmWcwR.cjs → doctor-C0kONAQn.cjs} +7 -7
- package/dist/{doctor-Wu0yZ80l.mjs → doctor-DegBfYjz.mjs} +7 -7
- package/dist/{downloadTarget-BoJrjpEe.cjs → downloadTarget-BTEVg8t6.cjs} +6 -6
- package/dist/{downloadTarget-G72yKQcM.mjs → downloadTarget-osakJyyA.mjs} +6 -6
- package/dist/{ensureDaemonRunning-BKGybp3s.mjs → ensureDaemonRunning-ED6UVEbk.mjs} +5 -5
- package/dist/{ensureDaemonRunning-CnkyGd9x.cjs → ensureDaemonRunning-vxHxmXo2.cjs} +5 -5
- package/dist/exitNotice-BhRrv8dx.cjs +88 -0
- package/dist/exitNotice-D1tMULzu.mjs +79 -0
- package/dist/{forkBackfill-DYIjlN1Z.mjs → forkBackfill-C9EfJ64O.mjs} +28 -2
- package/dist/{forkBackfill-8eLDeS73.cjs → forkBackfill-D2WW91fz.cjs} +28 -1
- package/dist/{format-DePME4uu.cjs → format-9KvRMdvY.cjs} +1 -1
- package/dist/{format-BSx-Nv2p.mjs → format-DJwRUrQm.mjs} +1 -1
- package/dist/{handleResumeCommand-uKzhaOVC.cjs → handleResumeCommand-0lsgLgBB.cjs} +5 -5
- package/dist/{handleResumeCommand-DrJdhjLD.mjs → handleResumeCommand-PfKmR-hv.mjs} +5 -5
- package/dist/{index-C-eSUhXW.mjs → index-BNcFxRSt.mjs} +4 -4
- package/dist/{index-44o_qMvE.cjs → index-BYL_X3gP.cjs} +27 -6
- package/dist/{index-Bi7Lmykl.cjs → index-B_narjYR.cjs} +45 -44
- package/dist/{index-DDOCSeEj.cjs → index-Bm_9wBaO.cjs} +4 -4
- package/dist/{index-CoBaGAA4.cjs → index-C7yXrMau.cjs} +3 -3
- package/dist/{index-BcYJJV-f.mjs → index-CUJZx4cs.mjs} +3 -3
- package/dist/{index-fNsf-8K-.mjs → index-CUeuMsap.mjs} +4 -4
- package/dist/{index-CowtCbZ_.mjs → index-D1rxFJ2b.mjs} +46 -45
- package/dist/{index-CiRMvS73.mjs → index-DWk-WTU-.mjs} +24 -7
- package/dist/{index-BKXqaux4.cjs → index-l8Xg3Mbf.cjs} +4 -4
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-0TkucJrC.mjs → install-B593oYZs.mjs} +3 -3
- package/dist/{install-Ddc8TlWE.cjs → install-C0I1a5sL.cjs} +3 -3
- package/dist/{issue-CIfzJuaS.cjs → issue-CJrXCpnf.cjs} +8 -8
- package/dist/{issue-CML2xa46.mjs → issue-D9ukoK-U.mjs} +8 -8
- package/dist/lib.cjs +12 -12
- package/dist/lib.d.cts +42 -1
- package/dist/lib.d.mts +42 -1
- package/dist/lib.mjs +12 -12
- package/dist/{localHappyAgentAuth-BUX4E1ug.mjs → localHappyAgentAuth-CxNcSjMM.mjs} +1 -1
- package/dist/{localHappyAgentAuth-WLqXQbc6.cjs → localHappyAgentAuth-D3GKuEC2.cjs} +1 -1
- package/dist/{logger-BEVIGYKL.mjs → logger-BcdURxNR.mjs} +2 -2
- package/dist/{logger-Dhc0l3xH.cjs → logger-C8anCmdW.cjs} +2 -2
- package/dist/{machineMetadata-BQdp_ihk.mjs → machineMetadata-BQaQQk6Z.mjs} +3 -3
- package/dist/{machineMetadata-ixKckJ7k.cjs → machineMetadata-DYWtdEtE.cjs} +3 -3
- package/dist/{main-BNBYOcQb.cjs → main-Bw7qSCWA.cjs} +48 -48
- package/dist/{main-BzQSe4Zu.mjs → main-KsUdHnwc.mjs} +48 -48
- package/dist/{mcp-BwskAxOK.cjs → mcp-CxPUFOEd.cjs} +20 -18
- package/dist/{mcp-BueI4Bel.mjs → mcp-OeLaQ2XR.mjs} +20 -18
- package/dist/{mirrorProtocol-5aFYsCCe.mjs → mirrorProtocol-Sj0yEHHU.mjs} +3 -3
- package/dist/{mirrorProtocol-DGMmhArw.cjs → mirrorProtocol-cTQcrW55.cjs} +3 -3
- package/dist/{package-CAmlKYcH.cjs → package-DkpXQvp1.cjs} +7 -7
- package/dist/{package-aOUtHYRZ.mjs → package-Dx3hbh9J.mjs} +7 -7
- package/dist/{panels-By2IDfXv.cjs → panels-CPNZnwCH.cjs} +5 -5
- package/dist/{panels-BeVMgmRW.mjs → panels-DKYO14Sq.mjs} +5 -5
- package/dist/{peerTools-BkRgJomj.mjs → peerTools-DYFslv6R.mjs} +5 -5
- package/dist/{peerTools-dgllF1wT.cjs → peerTools-DpCWFxI6.cjs} +5 -5
- package/dist/{persistence-EuUaQKL7.mjs → persistence-3iZXGbfb.mjs} +2 -2
- package/dist/{persistence-05BAS4Ou.cjs → persistence-Ch78xygf.cjs} +2 -2
- package/dist/{piRunnerArgs-DkjCRPYn.cjs → piRunnerArgs-CA6jqQ0k.cjs} +1 -1
- package/dist/{piRunnerArgs-CygWrAwY.mjs → piRunnerArgs-DEuYl6FL.mjs} +1 -1
- package/dist/{piRuntime-zY2jIQod.cjs → piRuntime-BIVHf-hN.cjs} +1 -1
- package/dist/{piRuntime-LRW_t6ME.mjs → piRuntime-CyN43ILm.mjs} +1 -1
- package/dist/{piTerminal-BhlPA1HR.mjs → piTerminal-DXz5L73L.mjs} +22 -20
- package/dist/{piTerminal-BfZshXGh.cjs → piTerminal-Hw4StZWN.cjs} +22 -20
- package/dist/{pushNotifications-DaVlLe7N.cjs → pushNotifications-D2ejrxlN.cjs} +17 -3
- package/dist/{pushNotifications-B7Ga8Zyf.mjs → pushNotifications-Db1NGJiA.mjs} +17 -3
- package/dist/{query-BQLtwpr9.mjs → query-CeYpZWVb.mjs} +1 -1
- package/dist/{query-CX0Of89i.cjs → query-velpFYxW.cjs} +1 -1
- package/dist/{rateLimitWindows-hv2zLYid.mjs → rateLimitWindows-BSQttrPk.mjs} +1 -1
- package/dist/{rateLimitWindows-CpSOlXBt.cjs → rateLimitWindows-C78D8Uf-.cjs} +1 -1
- package/dist/{reconnectGate-DO_ZQmJE.mjs → reconnectGate-Ie4nSKNl.mjs} +1 -1
- package/dist/{reconnectGate-B_aJrehH.cjs → reconnectGate-S9yNiuY7.cjs} +1 -1
- package/dist/{registerCommonHandlers-em2elV3l.cjs → registerCommonHandlers-51llVpLx.cjs} +2 -2
- package/dist/{registerCommonHandlers-BEpK4WD2.mjs → registerCommonHandlers-BR7BeGX3.mjs} +2 -2
- package/dist/{registerKillSessionHandler-D4ZQvsH2.cjs → registerKillSessionHandler-BjY79qBi.cjs} +6 -6
- package/dist/{registerKillSessionHandler-D-dDzI2n.mjs → registerKillSessionHandler-RbWPmKnK.mjs} +6 -6
- package/dist/{registerSideQuestionHandler-BIOLUe2U.cjs → registerSideQuestionHandler-B1Xk7dFK.cjs} +4 -4
- package/dist/{registerSideQuestionHandler-okUy9Q_-.mjs → registerSideQuestionHandler-BbYT7QfR.mjs} +4 -4
- package/dist/{remoteSessionClient-CzjLyL9c.mjs → remoteSessionClient-Ddns3U8M.mjs} +5 -5
- package/dist/{remoteSessionClient-BLWFXMBo.cjs → remoteSessionClient-r-UnqHor.cjs} +5 -5
- package/dist/{reportProgressTool-DcNBXBw8.cjs → reportProgressTool-ByadxJtc.cjs} +5 -5
- package/dist/{reportProgressTool-CNi0Vqqm.mjs → reportProgressTool-C3sf9D8m.mjs} +5 -5
- package/dist/{run-D59Gb4SQ.mjs → run-jsINwBOz.mjs} +200 -55
- package/dist/{run-bzlz4DI1.cjs → run-r5sY3wHk.cjs} +200 -55
- package/dist/{runClaude-kVp1PKab.cjs → runClaude-CRKsRfnq.cjs} +53 -38
- package/dist/{runClaude-DZtdmcXK.mjs → runClaude-D8CuiZhi.mjs} +44 -29
- package/dist/{runClaudeDeps-BHv9FkVz.cjs → runClaudeDeps-BiVzNIE6.cjs} +129 -61
- package/dist/{runClaudeDeps-D83tR1KP.mjs → runClaudeDeps-CUuPWcg9.mjs} +125 -57
- package/dist/{runGemini-W-0t7skM.cjs → runGemini-DANnc0BW.cjs} +36 -35
- package/dist/{runGemini-DLc_bL4E.mjs → runGemini-cqVZjPT6.mjs} +36 -35
- package/dist/{runOpenClaw-mm-hKxMC.mjs → runOpenClaw-B6V2nz8J.mjs} +18 -18
- package/dist/{runOpenClaw-BsqbOw8R.cjs → runOpenClaw-CGwc6mfJ.cjs} +18 -18
- package/dist/{sandbox-DrWJss7J.cjs → sandbox-CNheYPva.cjs} +4 -4
- package/dist/{sandbox-DXbKl-Os.mjs → sandbox-JYBMckKE.mjs} +4 -4
- package/dist/{selfCheck-CVXucSXR.cjs → selfCheck-DtSEBt0g.cjs} +40 -40
- package/dist/selfCheck-Jjy_wMw3.mjs +89 -0
- package/dist/{send-Cdda78Iw.mjs → send-BHrbbGJ7.mjs} +8 -8
- package/dist/{send-D7pRBaht.cjs → send-DNdJR3n8.cjs} +8 -8
- package/dist/{server-BI6defPs.cjs → server-CvP_b3eb.cjs} +6 -6
- package/dist/{server-CNilQcJK.mjs → server-DhQjVsyZ.mjs} +4 -4
- package/dist/{sessionLock-CVjlaRSL.mjs → sessionLock-5i516L-w.mjs} +21 -4
- package/dist/{sessionLock-Bjsy90aM.cjs → sessionLock-UkF8M3j5.cjs} +22 -3
- package/dist/{sessionOps-CvmOHwGP.cjs → sessionOps-D77IeFSt.cjs} +4 -4
- package/dist/{sessionOps-CV5RUpwG.mjs → sessionOps-DX49XNAT.mjs} +4 -4
- package/dist/{sessionProvider-BmO4ahnt.mjs → sessionProvider-C5xW4Dt3.mjs} +10 -10
- package/dist/{sessionProvider-4sWr0Myr.cjs → sessionProvider-mSI2UgLX.cjs} +10 -10
- package/dist/{sessionScanner-DZBiEOyb.cjs → sessionScanner-B1Am8D4Y.cjs} +3 -3
- package/dist/{sessionScanner-34Q0vTR3.mjs → sessionScanner-BZkOnp5a.mjs} +3 -3
- package/dist/{sessions-Cl435KQT.mjs → sessions-ClQFpjcA.mjs} +10 -10
- package/dist/{sessions-DjAXZWTX.cjs → sessions-DDDEiHVR.cjs} +10 -10
- package/dist/{setupOfflineReconnection-zebrb6U_.cjs → setupOfflineReconnection-Cn2_vuvO.cjs} +2 -2
- package/dist/{setupOfflineReconnection-BC5FJTkc.mjs → setupOfflineReconnection-PjK9laDd.mjs} +2 -2
- package/dist/{spawn-DqWdgMt_.mjs → spawn-BJGaxdot.mjs} +15 -15
- package/dist/{spawn-C8cJK9-m.cjs → spawn-DOj-sY6W.cjs} +15 -15
- package/dist/{spawnAgents-BclZYkov.mjs → spawnAgents-CcFKtKdX.mjs} +2 -1
- package/dist/{spawnAgents-DvbEDCIq.cjs → spawnAgents-D4lR468W.cjs} +2 -1
- package/dist/{spawnHappyCLI-BckHSjR0.mjs → spawnHappyCLI-CpOMz9hX.mjs} +1 -1
- package/dist/{spawnHappyCLI-CeWgULMt.cjs → spawnHappyCLI-DvxZ7elP.cjs} +1 -1
- package/dist/{startFileWatcher-CXZYt0y9.cjs → startFileWatcher-1ar7WS96.cjs} +1 -1
- package/dist/{startFileWatcher-BXiBlfVr.mjs → startFileWatcher-CPbPNFGY.mjs} +1 -1
- package/dist/{startupSessionCreate-CycB-kwu.cjs → startupSessionCreate-COc5Nnr9.cjs} +3 -3
- package/dist/{startupSessionCreate-D8hODW7I.mjs → startupSessionCreate-CnVaUZ16.mjs} +3 -3
- package/dist/{store-Cpb1LMNW.cjs → store-DGMILdMn.cjs} +1 -1
- package/dist/{store-DWmjM4Ex.mjs → store-Fge1h9wy.mjs} +1 -1
- package/dist/{streamRelay-DdGOsW8v.mjs → streamRelay-MaaYNNuh.mjs} +1 -1
- package/dist/{streamRelay-4XiiNB3N.cjs → streamRelay-keuifCPQ.cjs} +1 -1
- package/dist/{sync-BfM5OKSS.mjs → sync-BZji3J2r.mjs} +1 -1
- package/dist/{sync-CyUWevwD.cjs → sync-DzInYE_l.cjs} +1 -1
- package/dist/{systemPrompt-BUZQDf4k.cjs → systemPrompt-CvpjNmQL.cjs} +2 -2
- package/dist/{systemPrompt-Tu_2ixE3.mjs → systemPrompt-Dhdq8hGf.mjs} +2 -2
- package/dist/{teams-KjHee0Vg.cjs → teams-CRCbDPob.cjs} +20 -9
- package/dist/{teams-Cpdqvfe3.mjs → teams-CVW4ZvmW.mjs} +20 -9
- package/dist/{template-3fV9bi0X.cjs → template-ChUotPTL.cjs} +1 -1
- package/dist/{template-CtRLg2PG.mjs → template-D8fzlO58.mjs} +1 -1
- package/dist/{time-BQWf06hA.mjs → time-BWVJTcWI.mjs} +1 -1
- package/dist/{time-CbOTVtAt.cjs → time-UUMqbIq8.cjs} +1 -1
- package/dist/{titleGenerator-CpiQkf_r.cjs → titleGenerator-BHOA2Wkx.cjs} +3 -3
- package/dist/{titleGenerator-DYnqd0oI.mjs → titleGenerator-Ck82YoB7.mjs} +2 -2
- package/dist/{todo-DVrsXyKn.mjs → todo-Cf52TlmX.mjs} +8 -8
- package/dist/{todo-Cp6bRp62.cjs → todo-Cwo7joub.cjs} +8 -8
- package/dist/{tools-BFQm7xny.cjs → tools-DEErCtZG.cjs} +47 -27
- package/dist/{tools-XGAJepvT.mjs → tools-DmNaOlUF.mjs} +47 -27
- package/dist/{uninstall-C2LF0vtR.mjs → uninstall-B85MiNK2.mjs} +3 -3
- package/dist/{uninstall-Cyqq90JW.cjs → uninstall-CoAK4ANz.cjs} +3 -3
- package/dist/{wrapperAccount-nGGMJDBF.cjs → wrapperAccount-BHMM9I6g.cjs} +2 -2
- package/dist/{wrapperAccount-z8Swrd08.mjs → wrapperAccount-CwaA-n1S.mjs} +2 -2
- package/package.json +7 -7
- package/dist/permissionMode-CH4FoZfU.mjs +0 -80
- package/dist/permissionMode-CrV-XuMs.cjs +0 -87
- 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-
|
|
6
|
-
import { b as readCredentialsForConfiguredRelay } from './persistence-
|
|
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-
|
|
12
|
+
import './index-DWk-WTU-.mjs';
|
|
12
13
|
import '@paralleldrive/cuid2';
|
|
13
|
-
import './configuration-
|
|
14
|
+
import './configuration-D_YrWa_i.mjs';
|
|
14
15
|
import 'node:fs';
|
|
15
|
-
import './package-
|
|
16
|
-
import './context-
|
|
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,4 +1,4 @@
|
|
|
1
|
-
import { o as AUTOMATION_ATTENTION_REASON_MAX_CHARS, q as AUTOMATION_SUMMARY_MAX_CHARS } from './index-
|
|
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;
|
|
@@ -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-
|
|
8
|
+
var logger = require('./logger-C8anCmdW.cjs');
|
|
9
9
|
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
10
|
-
var wrapperAccount = require('./wrapperAccount-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
2
|
-
import { E as createBuiltinTodoClient, F as ISSUE_LIMITS, G as sortBuiltinTodos, H as isIssueClosed, J as BUILTIN_TODO_SKILL } from './index-
|
|
3
|
-
import { b as readCredentialsForConfiguredRelay } from './persistence-
|
|
4
|
-
import { r as readTeamScope, t as teamScopePath } from './context-
|
|
5
|
-
import { a as IssueRequestError, s as sharedIssuesClient, i as importLegacyTodosOnce, I as IssuesUnsupportedError } from './client-
|
|
6
|
-
import { d as describeIssueError } from './format-
|
|
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-
|
|
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-
|
|
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-
|
|
4
|
-
var index = require('./index-
|
|
5
|
-
var persistence = require('./persistence-
|
|
6
|
-
var context = require('./context-
|
|
7
|
-
var client = require('./client-
|
|
8
|
-
var format = require('./format-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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:
|
|
23
|
-
|
|
24
|
-
|
|
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:
|
|
54
|
-
...taskOperations.length ? { taskOperations: taskOperations.map(
|
|
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
|
|
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 (
|
|
104
|
-
{
|
|
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-
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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:
|
|
21
|
-
|
|
22
|
-
|
|
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:
|
|
52
|
-
...taskOperations.length ? { taskOperations: taskOperations.map(
|
|
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
|
|
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 (
|
|
102
|
-
{
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
8
|
+
require('./configuration-CDqmWkHO.cjs');
|
|
9
9
|
require('node:fs');
|
|
10
10
|
require('node:os');
|
|
11
11
|
require('node:path');
|
|
12
|
-
require('./package-
|
|
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-
|
|
7
|
-
var store = require('./store-
|
|
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-
|
|
5
|
-
import { r as readSessionBindings, w as writeSessionBinding, d as defaultSecretProbe, a as readAccounts, c as readAccountsFileV2, f as writeAccountsFile } from './store-
|
|
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.
|
|
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.
|
|
121
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
122
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
123
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
124
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
125
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
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:*",
|