very-happy-cli 0.2.199 → 0.2.201
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-Bo6bOamG.mjs → AcpBackend-BNinFMHZ.mjs} +3 -3
- package/dist/{AcpBackend-HhZ8nrIh.cjs → AcpBackend-CMFlng3C.cjs} +3 -3
- package/dist/{AcpSessionManager--7nDgA9S.cjs → AcpSessionManager-CPgoICjp.cjs} +2 -2
- package/dist/{AcpSessionManager-C-pkJKO2.mjs → AcpSessionManager-Dg6gKavf.mjs} +2 -2
- package/dist/{BasePermissionHandler-Ffp54Ntg.mjs → BasePermissionHandler-DwcfWUjr.mjs} +1 -1
- package/dist/{BasePermissionHandler-al7UXWRq.cjs → BasePermissionHandler-c-NaRa_E.cjs} +1 -1
- package/dist/{account-DCIz-iyL.cjs → account-D23SGj7p.cjs} +11 -11
- package/dist/{account-Bnk1yyGS.mjs → account-pzgzyIXW.mjs} +11 -11
- package/dist/{accountService-B59oKwa4.cjs → accountService-Cns8UYGI.cjs} +4 -4
- package/dist/{accountService-WPnOpkvs.mjs → accountService-DEpIq6CF.mjs} +4 -4
- package/dist/{acpSessionResume-CfogEHtT.cjs → acpSessionResume-DklOhwir.cjs} +1 -1
- package/dist/{acpSessionResume-BVroOlVN.mjs → acpSessionResume-urFpnGsk.mjs} +1 -1
- package/dist/{agentHome-Y3bMEtCp.cjs → agentHome-BTwMaYw1.cjs} +4 -4
- package/dist/{agentHome-CHTzSiu4.mjs → agentHome-DyrLqr8b.mjs} +4 -4
- package/dist/{api-DibgCucH.mjs → api-1CD4oRSW.mjs} +16 -10
- package/dist/{api-CgzfmyYS.cjs → api-KVVs-GkM.cjs} +16 -10
- package/dist/{apiMachine-DSI5mKlh.cjs → apiMachine-1sd5IVIB.cjs} +18 -18
- package/dist/{apiMachine-BUaFSi27.mjs → apiMachine-BDVE6MOn.mjs} +18 -18
- package/dist/{attachmentContent-D9wq3bok.mjs → attachmentContent-CeF54XeO.mjs} +2 -2
- package/dist/{attachmentContent-JWUS5uhH.cjs → attachmentContent-f3BbOKqz.cjs} +2 -2
- package/dist/{auth-DFMJQDNF.mjs → auth-CV2H-smf.mjs} +8 -8
- package/dist/{auth-B6H2wHTy.cjs → auth-CXCX-iJ-.cjs} +5 -5
- package/dist/{auth-BjWk9sHU.mjs → auth-WCd2S1zA.mjs} +5 -5
- package/dist/{auth-BXav16o0.cjs → auth-eielZ6Sc.cjs} +8 -8
- package/dist/{auto-CMO-VQYN.cjs → auto-49cRCADN.cjs} +17 -17
- package/dist/{auto-DOhQ2OU5.mjs → auto-BsCE_UHT.mjs} +17 -17
- package/dist/{bootstrap-CY7Db_VV.mjs → bootstrap-D_1MskAl.mjs} +2 -2
- package/dist/{bootstrap-Brd_jnA2.cjs → bootstrap-N1PY4ypX.cjs} +2 -2
- package/dist/{browser-BhncBLE4.cjs → browser-B0SEB6r3.cjs} +1 -1
- package/dist/{browser-BpwBEJDU.mjs → browser-DL3QIQLS.mjs} +1 -1
- package/dist/{claudeAccountEnv-z_ecsJAP.cjs → claudeAccountEnv-Btp39mfa.cjs} +1 -1
- package/dist/{claudeAccountEnv-CYwfvK1u.mjs → claudeAccountEnv-DowsOlDB.mjs} +1 -1
- package/dist/{claudeLocal-coKrsYmR.mjs → claudeLocal-DRMWkdCC.mjs} +5 -5
- package/dist/{claudeLocal-Co_DyW-D.cjs → claudeLocal-Ix69XJ1t.cjs} +5 -5
- package/dist/{claudeLocalLauncher-BFnLc0R-.mjs → claudeLocalLauncher-D4tU6R5n.mjs} +10 -10
- package/dist/{claudeLocalLauncher-CNDrO3b6.cjs → claudeLocalLauncher-rDojqNoa.cjs} +10 -10
- package/dist/{claudeSessionFork-BuDN5SkN.cjs → claudeSessionFork-C_X08LFh.cjs} +1 -1
- package/dist/{claudeSessionFork-dOOc9hpA.mjs → claudeSessionFork-H0ZVQALg.mjs} +1 -1
- package/dist/{client-B5uvkdLn.mjs → client-4YWjreN3.mjs} +2 -2
- package/dist/{client-DKPLBLvx.mjs → client-BgInTvr6.mjs} +2 -2
- package/dist/{client-KbhVRYjy.cjs → client-BoymtYLP.cjs} +2 -2
- package/dist/{client-Ng-oAhlX.mjs → client-CK-jvgM1.mjs} +4 -4
- package/dist/client-CMUlpYcy.mjs +114 -0
- package/dist/{client-CBbUzTcm.cjs → client-DGqnrSg4.cjs} +4 -4
- package/dist/client-DI8Rxsbw.cjs +120 -0
- package/dist/{client-BKyTA9Hf.cjs → client-P1VkI76z.cjs} +2 -2
- package/dist/codex/happyMcpStdioBridge.cjs +25 -16
- package/dist/codex/happyMcpStdioBridge.mjs +25 -16
- package/dist/{codexAccount-DeFAjaHW.mjs → codexAccount-CieIQLOX.mjs} +1 -1
- package/dist/{codexAccount-8Wv5enLR.cjs → codexAccount-D-OBY29W.cjs} +1 -1
- package/dist/{codexAppServerClient-6QmZ2Tn5.cjs → codexAppServerClient-BnMR-DRn.cjs} +3 -3
- package/dist/{codexAppServerClient-BAcU_XN8.mjs → codexAppServerClient-aDrsSyjS.mjs} +3 -3
- package/dist/{codexCommand-CCeaWZ-1.mjs → codexCommand-BCpJzf3q.mjs} +51 -46
- package/dist/{codexCommand-hJYa82Af.cjs → codexCommand-C3oEEpOa.cjs} +51 -46
- package/dist/{codexTermination-BX0sCNFy.mjs → codexTermination-B5haG5wJ.mjs} +1 -1
- package/dist/{codexTermination-DKjQcC3e.cjs → codexTermination-DXhw5Pzi.cjs} +1 -1
- package/dist/{config-171VOPLq.cjs → config-CdGiZZKy.cjs} +3 -3
- package/dist/{config-9iXYh_zS.mjs → config-D9wjo4oa.mjs} +3 -3
- package/dist/{configuration-D9k5yIzV.mjs → configuration-DhEqAYzz.mjs} +1 -1
- package/dist/{configuration-CAzuk0Xs.cjs → configuration-LWFmTxty.cjs} +1 -1
- package/dist/{connect-MlXU2FE3.cjs → connect-BZLD0aVm.cjs} +13 -13
- package/dist/{connect-BEhKtsEn.mjs → connect-CY_EMXQs.mjs} +13 -13
- package/dist/{context-CI9LnDu1.cjs → context-BbZ18lX0.cjs} +1 -1
- package/dist/{context-WVEuAdf2.mjs → context-UzqWaA7f.mjs} +1 -1
- package/dist/{controlClient-DhFAPGHz.mjs → controlClient-PaIiDxM6.mjs} +3 -3
- package/dist/{controlClient-Bb188cU0.cjs → controlClient-TVMpETsR.cjs} +3 -3
- package/dist/{createSessionMetadata-BIK0Xz31.mjs → createSessionMetadata-BWb81WZg.mjs} +3 -2
- package/dist/{createSessionMetadata-C2EQi_od.cjs → createSessionMetadata-hGZeo_nR.cjs} +3 -2
- package/dist/{daemonAccounts-DD5YBwku.mjs → daemonAccounts-D5shoCLt.mjs} +3 -3
- package/dist/{daemonAccounts-nLyHz8WB.cjs → daemonAccounts-ciidbU2h.cjs} +2 -2
- package/dist/{defaultPermissionMode-BA1fgIpW.cjs → defaultPermissionMode-Cs_Tv83b.cjs} +1 -1
- package/dist/{defaultPermissionMode-Dmw3lpdN.mjs → defaultPermissionMode-DgeiMMqy.mjs} +1 -1
- package/dist/{deterministicJson-DCzFgRiT.cjs → deterministicJson-BpDDS7c9.cjs} +121 -24
- package/dist/{deterministicJson-BJ7LY5-S.mjs → deterministicJson-Cg3z7uUX.mjs} +117 -20
- package/dist/{doctor-jAPeyoi6.mjs → doctor-BanQ3jQg.mjs} +7 -7
- package/dist/{doctor-CH_pTY3Q.cjs → doctor-DOzji0f7.cjs} +7 -7
- package/dist/{downloadTarget-BhMm1keb.mjs → downloadTarget-BCSXmPRE.mjs} +6 -6
- package/dist/{downloadTarget-CZS0BVu2.cjs → downloadTarget-BhIAhyEV.cjs} +6 -6
- package/dist/{ensureDaemonRunning-BjbC8PuJ.mjs → ensureDaemonRunning-BZGBE838.mjs} +5 -5
- package/dist/{ensureDaemonRunning-CTKaWMED.cjs → ensureDaemonRunning-DMOCzvQP.cjs} +5 -5
- package/dist/format-BxGkJUki.mjs +71 -0
- package/dist/format-CgiY6uup.cjs +75 -0
- package/dist/{handleResumeCommand-DbFTdwoc.mjs → handleResumeCommand-BRV-9h0o.mjs} +5 -5
- package/dist/{handleResumeCommand-DsaEUiax.cjs → handleResumeCommand-ChnR-12l.cjs} +5 -5
- package/dist/{index-BnT8yvlF.cjs → index-44o_qMvE.cjs} +72 -3
- package/dist/{index-DuoMPw0y.cjs → index-B7HlUXOX.cjs} +4 -4
- package/dist/{index-qVJYCmRA.cjs → index-BuOzDU17.cjs} +4 -4
- package/dist/{index-DcfbjaVL.mjs → index-C_Y9426m.mjs} +3 -3
- package/dist/{index-BQvPYTNM.mjs → index-CiRMvS73.mjs} +59 -4
- package/dist/{index-BEKb2cxz.mjs → index-D5abHQNL.mjs} +48 -43
- package/dist/{index-DL6ONx6v.cjs → index-DnEgpRo4.cjs} +3 -3
- package/dist/{index-DpQ9OLYi.mjs → index-Do1r62PF.mjs} +4 -4
- package/dist/{index-DdJRSpLB.cjs → index-DuOthh8V.cjs} +47 -42
- package/dist/{index-BAjoMeJi.mjs → index-HJFzeG0B.mjs} +4 -4
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-CJcRTQVK.mjs → install-BurTXawL.mjs} +3 -3
- package/dist/{install-5nblS8vW.cjs → install-CUAUG3u4.cjs} +3 -3
- package/dist/issue-DpMsnOFm.mjs +229 -0
- package/dist/issue-feEUrjV0.cjs +237 -0
- package/dist/lib.cjs +12 -12
- package/dist/lib.d.cts +7 -0
- package/dist/lib.d.mts +7 -0
- package/dist/lib.mjs +12 -12
- package/dist/{localHappyAgentAuth-Bsk_VyUN.cjs → localHappyAgentAuth-DxlQgaer.cjs} +1 -1
- package/dist/{localHappyAgentAuth-CD896cy4.mjs → localHappyAgentAuth-kg2RFvOy.mjs} +1 -1
- package/dist/{logger-n9NOzHhK.mjs → logger-CFrzcRHD.mjs} +17 -3
- package/dist/{logger-LsJ3Cl5o.cjs → logger-Hyhy2boA.cjs} +17 -2
- package/dist/{machineMetadata-CUU2NSYl.cjs → machineMetadata-BLymhM03.cjs} +3 -3
- package/dist/{machineMetadata-Bc7FwngX.mjs → machineMetadata-DiStbYik.mjs} +3 -3
- package/dist/{main-CEu9zJ4x.cjs → main-7G17Noc3.cjs} +58 -48
- package/dist/{main-CzItRviV.mjs → main-D1rk-68I.mjs} +58 -48
- package/dist/{mcp-yK3ynz_E.mjs → mcp-C0DMPeTt.mjs} +18 -18
- package/dist/{mcp-CPW1yQdX.cjs → mcp-DUeAS-D6.cjs} +18 -18
- package/dist/{mirrorProtocol-5bgkr1Or.cjs → mirrorProtocol-YUoEuIYO.cjs} +3 -3
- package/dist/{mirrorProtocol-CoXxepvL.mjs → mirrorProtocol-dRyartIG.mjs} +3 -3
- package/dist/{package-D7V1BX2I.cjs → package-06cGlmeD.cjs} +7 -7
- package/dist/{package-CCF6FHr2.mjs → package-DxE8PttX.mjs} +7 -7
- package/dist/{panels-CF5n641F.mjs → panels-BUqmsRE0.mjs} +5 -5
- package/dist/{panels-9DdVhaxc.cjs → panels-D0GHfIJC.cjs} +5 -5
- package/dist/{peerTools-gR_3dwdA.mjs → peerTools-BiFpxXdf.mjs} +5 -5
- package/dist/{peerTools-Dv6bgHkW.cjs → peerTools-CTCyRdg2.cjs} +5 -5
- package/dist/{persistence-B5U9rC15.mjs → persistence-CF7oV1oH.mjs} +2 -2
- package/dist/{persistence-Dl3sBrCF.cjs → persistence-_W9tE-bW.cjs} +2 -2
- package/dist/{piRunnerArgs-DOV74xAt.mjs → piRunnerArgs-Cfc-F-FJ.mjs} +1 -1
- package/dist/{piRunnerArgs-rygeUdRz.cjs → piRunnerArgs-T2cAiaGW.cjs} +1 -1
- package/dist/{piRuntime-BvxCy9qQ.cjs → piRuntime-BzECTca4.cjs} +1 -1
- package/dist/{piRuntime-dtlRpOYa.mjs → piRuntime-CzYkZrYV.mjs} +1 -1
- package/dist/{piTerminal-Bx6c5Jyd.mjs → piTerminal-0tOAYsFm.mjs} +20 -20
- package/dist/{piTerminal-ClaMS-57.cjs → piTerminal-WF--dHaC.cjs} +20 -20
- package/dist/{pushNotifications-pHkbUkqT.mjs → pushNotifications-CxX10K6n.mjs} +3 -3
- package/dist/{pushNotifications-IZaTtVDG.cjs → pushNotifications-DdzTbrA3.cjs} +3 -3
- package/dist/{query-D_3rFFWe.mjs → query-Bkh7d52V.mjs} +1 -1
- package/dist/{query-BVqnfxlX.cjs → query-Cwx4pv91.cjs} +1 -1
- package/dist/{rateLimitWindows-DnLJ-gve.mjs → rateLimitWindows-DdUMUEoy.mjs} +1 -1
- package/dist/{rateLimitWindows-C7xi99Eb.cjs → rateLimitWindows-DjJjgjt4.cjs} +1 -1
- package/dist/{reconnectGate-CHI12y0Y.cjs → reconnectGate-DeDhtQJW.cjs} +1 -1
- package/dist/{reconnectGate-DPDXEkOX.mjs → reconnectGate-uTLj82tS.mjs} +1 -1
- package/dist/{registerCommonHandlers-BrTglZnC.mjs → registerCommonHandlers-BYrmi-A4.mjs} +2 -2
- package/dist/{registerCommonHandlers-CUCw-rad.cjs → registerCommonHandlers-BrEtSwNk.cjs} +2 -2
- package/dist/{registerKillSessionHandler-Bo697Mt0.cjs → registerKillSessionHandler-Bp3g11wW.cjs} +6 -6
- package/dist/{registerKillSessionHandler-BJSVT1iq.mjs → registerKillSessionHandler-Cuzq6ecP.mjs} +6 -6
- package/dist/{registerSideQuestionHandler-BFPCMrmC.mjs → registerSideQuestionHandler-BmEWWaZW.mjs} +4 -4
- package/dist/{registerSideQuestionHandler-HNpsU_20.cjs → registerSideQuestionHandler-ChIbHl_g.cjs} +4 -4
- package/dist/{remoteSessionClient-Blz-z9jM.mjs → remoteSessionClient-Dj2rV8Az.mjs} +5 -5
- package/dist/{remoteSessionClient-9NzkfL13.cjs → remoteSessionClient-DoxfnpnK.cjs} +5 -5
- package/dist/{reportProgressTool-CW9rSnwQ.cjs → reportProgressTool-DvZhaEiN.cjs} +113 -3
- package/dist/{reportProgressTool-B2-RFomn.mjs → reportProgressTool-qo0QIFNd.mjs} +111 -4
- package/dist/{run-9aB7U4BF.cjs → run-BqlWdDTL.cjs} +447 -50
- package/dist/{run-BXyfDvCk.mjs → run-mHeOSOEt.mjs} +447 -50
- package/dist/{runClaude-B4ohp5Dk.cjs → runClaude-MjIrNrxT.cjs} +28 -25
- package/dist/{runClaude-BKpWJdCX.mjs → runClaude-Z4BVFEdC.mjs} +28 -25
- package/dist/{runClaudeDeps-B0x5BCqC.mjs → runClaudeDeps-8RXtu0Zc.mjs} +49 -46
- package/dist/{runClaudeDeps-gqSYeQkl.cjs → runClaudeDeps-tPqwAl_m.cjs} +43 -40
- package/dist/{runGemini-BvV5k9b3.mjs → runGemini-DG3jIxWv.mjs} +36 -33
- package/dist/{runGemini-BMzDy7hY.cjs → runGemini-uc-fViXY.cjs} +36 -33
- package/dist/{runOpenClaw-UcIDMHm7.mjs → runOpenClaw-C4676Sdl.mjs} +18 -18
- package/dist/{runOpenClaw-3Cx3C2ww.cjs → runOpenClaw-DZtoCmSG.cjs} +18 -18
- package/dist/{sandbox-QJdxjmxr.cjs → sandbox-DS7uZ71y.cjs} +4 -4
- package/dist/{sandbox-BC-KbWe7.mjs → sandbox-r29ys6I4.mjs} +4 -4
- package/dist/selfCheck-BmT9ihpR.mjs +89 -0
- package/dist/{selfCheck-Be_M5coh.cjs → selfCheck-CSZ-wx1W.cjs} +40 -39
- package/dist/{send-x789D5ci.mjs → send-BGApHm-z.mjs} +8 -8
- package/dist/{send-DhWp8M8B.cjs → send-CrmLy9lW.cjs} +8 -8
- package/dist/{server-kPDtS-DX.cjs → server-CjwXsTKP.cjs} +6 -6
- package/dist/{server-D-aSnlWI.mjs → server-hutEAAn1.mjs} +4 -4
- package/dist/{sessionLock-JWBEd8g_.mjs → sessionLock-Dj9_lShU.mjs} +3 -3
- package/dist/{sessionLock-CuPN9xfW.cjs → sessionLock-unMOEniJ.cjs} +3 -3
- package/dist/sessionMetadata-B44cL4Xj.cjs +29 -0
- package/dist/sessionMetadata-C1eoAi89.mjs +25 -0
- package/dist/{sessionOps-VS1baPz_.mjs → sessionOps-BmhqmPPd.mjs} +4 -4
- package/dist/{sessionOps-CYNOycqT.cjs → sessionOps-SxZr9veq.cjs} +4 -4
- package/dist/{sessionProvider-iRLKuR9V.mjs → sessionProvider-CPlvR0nT.mjs} +10 -10
- package/dist/{sessionProvider-DksA6icp.cjs → sessionProvider-DLlqS4y6.cjs} +10 -10
- package/dist/{sessionScanner--X2Pzlra.cjs → sessionScanner-B7nZ1i40.cjs} +3 -3
- package/dist/{sessionScanner-CAxiFc_3.mjs → sessionScanner-DvVZpLHG.mjs} +3 -3
- package/dist/{sessions-Dca1UgiF.mjs → sessions-BIYm43CM.mjs} +10 -10
- package/dist/{sessions-BrnP53eO.cjs → sessions-CQQW7u6X.cjs} +10 -10
- package/dist/{setupOfflineReconnection-nguxOn4s.mjs → setupOfflineReconnection-BELrtMGG.mjs} +2 -2
- package/dist/{setupOfflineReconnection-Dwg6nHnP.cjs → setupOfflineReconnection-D7WJTAi_.cjs} +2 -2
- package/dist/{spawn-DDyMxQ7Z.cjs → spawn-CuWcPkkN.cjs} +14 -14
- package/dist/{spawn-BJMU9zbZ.mjs → spawn-DnPu7h2o.mjs} +14 -14
- package/dist/{spawnAgents-SeUX5gIq.mjs → spawnAgents-BclZYkov.mjs} +1 -1
- package/dist/{spawnAgents-B8GT4JQX.cjs → spawnAgents-DvbEDCIq.cjs} +1 -1
- package/dist/{spawnHappyCLI-Cvk2ZMYj.cjs → spawnHappyCLI-CI7Ax4mF.cjs} +1 -1
- package/dist/{spawnHappyCLI-DnT_QEdn.mjs → spawnHappyCLI-D6OcgFDR.mjs} +1 -1
- package/dist/{startFileWatcher-Djf0SdmK.mjs → startFileWatcher-BiWGhlGW.mjs} +1 -1
- package/dist/{startFileWatcher-DLfkP-IW.cjs → startFileWatcher-DBW14aP2.cjs} +1 -1
- package/dist/{startupSessionCreate-CxwJb5m9.cjs → startupSessionCreate-DFl54ozj.cjs} +3 -3
- package/dist/{startupSessionCreate-f1g6pp6E.mjs → startupSessionCreate-DbBpGQo9.mjs} +3 -3
- package/dist/{store-D41VdZcL.cjs → store-Cpb1LMNW.cjs} +1 -1
- package/dist/{store-DnaIrYLA.mjs → store-DWmjM4Ex.mjs} +1 -1
- package/dist/{streamRelay-BT9ew0Mk.cjs → streamRelay-4XiiNB3N.cjs} +1 -1
- package/dist/{streamRelay-DEBIU6Ak.mjs → streamRelay-DdGOsW8v.mjs} +1 -1
- package/dist/{sync-B-B5mc8Z.cjs → sync-C764ZzE6.cjs} +1 -1
- package/dist/{sync-Dfr1zgLx.mjs → sync-CcBrziWp.mjs} +1 -1
- package/dist/{systemPrompt-DAQq-bKB.mjs → systemPrompt-9i7bQypR.mjs} +2 -2
- package/dist/{systemPrompt-pxNDR5u8.cjs → systemPrompt-Xy3Dfj1l.cjs} +2 -2
- package/dist/{teams-BuXDbvzq.mjs → teams-BAWOVbdF.mjs} +7 -7
- package/dist/{teams-CBMB5SvT.cjs → teams-VlmzLDSs.cjs} +7 -7
- package/dist/{template-CB4gXtUX.cjs → template-3fV9bi0X.cjs} +1 -1
- package/dist/{template-DE9JMShn.mjs → template-CtRLg2PG.mjs} +1 -1
- package/dist/{time-DTaj0RVK.cjs → time-CDBZWYDb.cjs} +1 -1
- package/dist/{time-PqfO1O58.mjs → time-DJF2csbV.mjs} +1 -1
- package/dist/{titleGenerator-BP5gqicG.cjs → titleGenerator-BYP3fNFo.cjs} +3 -3
- package/dist/{titleGenerator-DVnEGxoB.mjs → titleGenerator-DR9evHBh.mjs} +2 -2
- package/dist/todo-BkFvwx_z.cjs +210 -0
- package/dist/{todo-DaJPxDVT.mjs → todo-DDDQdB-G.mjs} +103 -12
- package/dist/{tools-G3_fMSjb.cjs → tools-BjiRW_Rg.cjs} +1 -1
- package/dist/{tools-B4W8kWU8.mjs → tools-CDktvjWL.mjs} +1 -1
- package/dist/{uninstall-ByWgUWHg.mjs → uninstall-BcMGkwJ0.mjs} +3 -3
- package/dist/{uninstall-C0pua8G4.cjs → uninstall-D5INt3TC.cjs} +3 -3
- package/dist/{wrapperAccount-CsxMfnCK.cjs → wrapperAccount-nGGMJDBF.cjs} +2 -2
- package/dist/{wrapperAccount-BDeMsgbw.mjs → wrapperAccount-z8Swrd08.mjs} +2 -2
- package/package.json +7 -7
- package/dist/selfCheck-NWjxjpSx.mjs +0 -88
- package/dist/todo-BXsQ5-iD.cjs +0 -119
|
@@ -1,36 +1,129 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var logger = require('./logger-
|
|
3
|
+
var logger = require('./logger-Hyhy2boA.cjs');
|
|
4
4
|
var prompt = require('./prompt-Bof2aQkI.cjs');
|
|
5
|
-
var client = require('./client-
|
|
6
|
-
var
|
|
5
|
+
var client$1 = require('./client-BoymtYLP.cjs');
|
|
6
|
+
var client = require('./client-DI8Rxsbw.cjs');
|
|
7
|
+
var sessionMetadata = require('./sessionMetadata-B44cL4Xj.cjs');
|
|
8
|
+
var configuration = require('./configuration-LWFmTxty.cjs');
|
|
9
|
+
var path = require('node:path');
|
|
7
10
|
var node_fs = require('node:fs');
|
|
11
|
+
var reportProgressTool = require('./reportProgressTool-DvZhaEiN.cjs');
|
|
8
12
|
var os = require('node:os');
|
|
9
|
-
var path = require('node:path');
|
|
10
13
|
var z = require('zod');
|
|
11
14
|
var pi = require('./pi-DlsrPCTa.cjs');
|
|
12
15
|
var promises = require('node:fs/promises');
|
|
13
16
|
var node_crypto = require('node:crypto');
|
|
14
|
-
var client$
|
|
15
|
-
var context = require('./context-
|
|
16
|
-
var sessionOps = require('./sessionOps-
|
|
17
|
+
var client$2 = require('./client-DGqnrSg4.cjs');
|
|
18
|
+
var context = require('./context-BbZ18lX0.cjs');
|
|
19
|
+
var sessionOps = require('./sessionOps-SxZr9veq.cjs');
|
|
17
20
|
var resources = require('./resources-BZ_Be0qM.cjs');
|
|
18
|
-
var tools = require('./tools-
|
|
19
|
-
var peerTools = require('./peerTools-
|
|
21
|
+
var tools = require('./tools-BjiRW_Rg.cjs');
|
|
22
|
+
var peerTools = require('./peerTools-CTCyRdg2.cjs');
|
|
20
23
|
var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
21
24
|
var node_http = require('node:http');
|
|
22
25
|
var streamableHttp_js = require('@modelcontextprotocol/sdk/server/streamableHttp.js');
|
|
23
26
|
var limits = require('./limits-C-a7gr04.cjs');
|
|
24
|
-
var downloadTarget = require('./downloadTarget-
|
|
27
|
+
var downloadTarget = require('./downloadTarget-BhIAhyEV.cjs');
|
|
25
28
|
var agentGuidance = require('./agentGuidance-BtBx2xxE.cjs');
|
|
26
29
|
var webPanels = require('./webPanels-FCgFKvVe.cjs');
|
|
27
|
-
var persistence = require('./persistence-
|
|
28
|
-
var pushNotifications = require('./pushNotifications-
|
|
30
|
+
var persistence = require('./persistence-_W9tE-bW.cjs');
|
|
31
|
+
var pushNotifications = require('./pushNotifications-DdzTbrA3.cjs');
|
|
29
32
|
var previewPath = require('./previewPath-B0rBdhy1.cjs');
|
|
30
|
-
var index = require('./index-
|
|
31
|
-
var configuration = require('./configuration-CAzuk0Xs.cjs');
|
|
33
|
+
var index = require('./index-44o_qMvE.cjs');
|
|
32
34
|
var require$$3 = require('crypto');
|
|
33
35
|
|
|
36
|
+
function buildIssueDigestLine(issue, entries) {
|
|
37
|
+
const human = entries.filter((e) => e.author.kind === "user" && !e.deletedAt);
|
|
38
|
+
const statuses = human.filter((e) => e.kind === "status");
|
|
39
|
+
const parts = [];
|
|
40
|
+
if (statuses.length) {
|
|
41
|
+
const from = statuses[0].data?.from;
|
|
42
|
+
parts.push(`now ${issue.status}${typeof from === "string" ? ` (${from} \u2192 ${issue.status} by owner)` : " (changed by owner)"}`);
|
|
43
|
+
}
|
|
44
|
+
if (human.some((e) => e.kind === "assign")) parts.push("assignee changed");
|
|
45
|
+
const fields = /* @__PURE__ */ new Set();
|
|
46
|
+
for (const e of human) if (e.kind === "field") {
|
|
47
|
+
for (const f of e.data?.fields ?? []) if (typeof f === "string") fields.add(f);
|
|
48
|
+
}
|
|
49
|
+
if (fields.size) parts.push(`${[...fields].join(", ")} updated`);
|
|
50
|
+
if (!parts.length) return null;
|
|
51
|
+
return `[Issue ${issue.key} ${parts.join("; ")}]`;
|
|
52
|
+
}
|
|
53
|
+
const SESSION_ID = /^[A-Za-z0-9_-]{1,128}$/;
|
|
54
|
+
const ISSUE_DIGEST_CURSOR_TTL_MS = 30 * 24 * 36e5;
|
|
55
|
+
function fileIssueDigestCursorStore(home, now = Date.now) {
|
|
56
|
+
const dir = path.join(home, "issues", "digest");
|
|
57
|
+
let pruned = false;
|
|
58
|
+
return {
|
|
59
|
+
read(sessionId) {
|
|
60
|
+
if (!SESSION_ID.test(sessionId)) return null;
|
|
61
|
+
try {
|
|
62
|
+
const asOf = JSON.parse(node_fs.readFileSync(path.join(dir, `${sessionId}.json`), "utf8")).asOf;
|
|
63
|
+
return typeof asOf === "number" && Number.isFinite(asOf) ? asOf : null;
|
|
64
|
+
} catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
write(sessionId, asOf) {
|
|
69
|
+
if (!SESSION_ID.test(sessionId)) return;
|
|
70
|
+
try {
|
|
71
|
+
configuration.ensurePrivateDirectorySync(dir);
|
|
72
|
+
configuration.writePrivateFileSync(path.join(dir, `${sessionId}.json`), JSON.stringify({ asOf }));
|
|
73
|
+
if (!pruned) {
|
|
74
|
+
pruned = true;
|
|
75
|
+
for (const file of node_fs.readdirSync(dir)) {
|
|
76
|
+
const path$1 = path.join(dir, file);
|
|
77
|
+
try {
|
|
78
|
+
if (now() - node_fs.statSync(path$1).mtimeMs > ISSUE_DIGEST_CURSOR_TTL_MS) node_fs.unlinkSync(path$1);
|
|
79
|
+
} catch {
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
} catch (error) {
|
|
84
|
+
logger.logger.debug(`[issues] digest cursor not saved: ${String(error)}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function createIssueDigest(deps) {
|
|
90
|
+
const client$1 = deps.client ?? client.sharedIssuesClient();
|
|
91
|
+
const enabled = deps.enabled ?? (() => !!process.env.VH_ISSUE_ID || sessionMetadata.readSessionIssueMetadata(deps.metadata?.()) !== null);
|
|
92
|
+
const timeoutMs = deps.timeoutMs ?? 1500;
|
|
93
|
+
const store = deps.cursorStore === void 0 ? fileIssueDigestCursorStore(configuration.configuration.happyHomeDir) : deps.cursorStore;
|
|
94
|
+
let cursor = null;
|
|
95
|
+
let loadedFor = null;
|
|
96
|
+
const advance = (sid, asOf) => {
|
|
97
|
+
cursor = asOf;
|
|
98
|
+
store?.write(sid, asOf);
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
cursor: () => cursor,
|
|
102
|
+
async decorate(message) {
|
|
103
|
+
const sid = deps.sessionId();
|
|
104
|
+
if (!sid || !enabled() || client$1.isDisabled()) return message;
|
|
105
|
+
if (loadedFor !== sid) {
|
|
106
|
+
loadedFor = sid;
|
|
107
|
+
cursor = store?.read(sid) ?? null;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
if (cursor === null) {
|
|
111
|
+
const ctx2 = await client$1.session(sid, void 0, timeoutMs);
|
|
112
|
+
if (ctx2.issue) advance(sid, ctx2.asOf);
|
|
113
|
+
return message;
|
|
114
|
+
}
|
|
115
|
+
const ctx = await client$1.session(sid, cursor, timeoutMs);
|
|
116
|
+
if (!ctx.issue) return message;
|
|
117
|
+
advance(sid, ctx.asOf);
|
|
118
|
+
return prompt.prependToMessage(message, buildIssueDigestLine(ctx.issue, ctx.comments));
|
|
119
|
+
} catch (error) {
|
|
120
|
+
if (!(error instanceof client.IssuesUnsupportedError)) logger.logger.debug(`[issues] digest skipped: ${String(error)}`);
|
|
121
|
+
return message;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
34
127
|
function createProjectInjector(deps) {
|
|
35
128
|
const timeoutMs = deps.timeoutMs ?? 1500;
|
|
36
129
|
const now = deps.now ?? Date.now;
|
|
@@ -40,6 +133,7 @@ function createProjectInjector(deps) {
|
|
|
40
133
|
let lastPresenceAt = 0;
|
|
41
134
|
let lastPresenceVersion = null;
|
|
42
135
|
const label = (id) => titles.get(id) ?? id.slice(0, 8);
|
|
136
|
+
const issueDigest = deps.issueDigest === void 0 ? createIssueDigest({ sessionId: deps.sessionId, metadata: () => deps.metadata?.() ?? null, timeoutMs }) : deps.issueDigest;
|
|
43
137
|
function withTimeout(p) {
|
|
44
138
|
return Promise.race([p, new Promise((_, reject) => setTimeout(() => reject(new Error("project injection timeout")), timeoutMs).unref?.())]);
|
|
45
139
|
}
|
|
@@ -111,15 +205,16 @@ function createProjectInjector(deps) {
|
|
|
111
205
|
},
|
|
112
206
|
async decorate(message) {
|
|
113
207
|
if (typeof message !== "string") return message;
|
|
208
|
+
const withIssue = async (text) => issueDigest ? issueDigest.decorate(text) : text;
|
|
114
209
|
const sid = deps.sessionId();
|
|
115
|
-
if (!sid || deps.client.isDisabled()) return message;
|
|
210
|
+
if (!sid || deps.client.isDisabled()) return await withIssue(message);
|
|
211
|
+
let out = message;
|
|
116
212
|
try {
|
|
117
|
-
|
|
118
|
-
return out;
|
|
213
|
+
out = state.prefixSent ? await laterTurn(sid, message) : await firstTurn(sid, message);
|
|
119
214
|
} catch (error) {
|
|
120
|
-
if (!(error instanceof client.ProjectsUnsupportedError)) logger.logger.debug(`[projects] injection skipped: ${String(error)}`);
|
|
121
|
-
return message;
|
|
215
|
+
if (!(error instanceof client$1.ProjectsUnsupportedError)) logger.logger.debug(`[projects] injection skipped: ${String(error)}`);
|
|
122
216
|
}
|
|
217
|
+
return await withIssue(out);
|
|
123
218
|
}
|
|
124
219
|
};
|
|
125
220
|
}
|
|
@@ -235,7 +330,7 @@ async function retainTeam(path, input, resolvedTeamId, guidanceDelivered = false
|
|
|
235
330
|
}
|
|
236
331
|
}
|
|
237
332
|
function createTeamAdoption(sessionId) {
|
|
238
|
-
const client = client$
|
|
333
|
+
const client = client$2.createTeamsClient(sessionId);
|
|
239
334
|
let current;
|
|
240
335
|
return (raw) => {
|
|
241
336
|
const parsed = TeamAdoptSchema.safeParse(raw);
|
|
@@ -277,7 +372,7 @@ ${resources.TEAM_LEAD_PLAYBOOK}`;
|
|
|
277
372
|
}
|
|
278
373
|
operation.result = { status: "connected", teamId: connected.team.id, botId: connected.botId, instructions };
|
|
279
374
|
} catch (error) {
|
|
280
|
-
if (error instanceof client$
|
|
375
|
+
if (error instanceof client$2.TeamConnectionPreflightError && intent?.fresh && !intent.resolvedTeamId) {
|
|
281
376
|
await promises.unlink(path).catch(() => {
|
|
282
377
|
});
|
|
283
378
|
operation.safeToChange = true;
|
|
@@ -286,7 +381,7 @@ ${resources.TEAM_LEAD_PLAYBOOK}`;
|
|
|
286
381
|
error: error instanceof Error ? error.message : "Team connection failed; retry the same request",
|
|
287
382
|
...operation.safeToChange ? { safeToChange: true } : {},
|
|
288
383
|
// B-730: the Web asks the owner to confirm a transfer, then sends a new request with `transfer`.
|
|
289
|
-
...error instanceof client$
|
|
384
|
+
...error instanceof client$2.SessionInOtherTeamError ? { code: error.code, teamId: error.teamId, teamName: error.teamName } : {}
|
|
290
385
|
};
|
|
291
386
|
}
|
|
292
387
|
})();
|
|
@@ -552,7 +647,7 @@ async function resolveTeamLead(sessionId) {
|
|
|
552
647
|
try {
|
|
553
648
|
const scope = await context.readTeamScope(context.teamScopePath(sessionId));
|
|
554
649
|
if (!scope) return false;
|
|
555
|
-
const inspected = await client$
|
|
650
|
+
const inspected = await client$2.teamRequest(`/v1/teams/${encodeURIComponent(scope.teamId)}/agent`, "GET", scope.scopeToken, true);
|
|
556
651
|
const bots = Array.isArray(inspected?.team?.bots) ? inspected.team.bots : [];
|
|
557
652
|
return bots.some((bot) => bot.id === scope.botId && bot.root === true);
|
|
558
653
|
} catch {
|
|
@@ -850,6 +945,7 @@ function createMcpServer(handlers, options, sessionId, client) {
|
|
|
850
945
|
reportProgressTool.registerAutomationTools(mcp);
|
|
851
946
|
if (client) peerTools.registerSessionPeerTools(mcp, peerTools.createSessionPeerToolExecutor(client));
|
|
852
947
|
if (client) reportProgressTool.registerProjectTools(mcp, reportProgressTool.createProjectToolExecutor(() => client.sessionId));
|
|
948
|
+
if (client) reportProgressTool.registerIssueTools(mcp, reportProgressTool.createIssueToolExecutor(() => client.sessionId));
|
|
853
949
|
mcp.registerTool("change_title", {
|
|
854
950
|
description: "Change the title of the current chat session",
|
|
855
951
|
title: "Change Chat Title",
|
|
@@ -1052,7 +1148,7 @@ async function startHappyServer(client, options) {
|
|
|
1052
1148
|
}
|
|
1053
1149
|
},
|
|
1054
1150
|
changeTitle: async (title) => {
|
|
1055
|
-
logger.logger.debug(
|
|
1151
|
+
logger.logger.debug(`[happyMCP] Changing title (${title.length} chars)`);
|
|
1056
1152
|
try {
|
|
1057
1153
|
client.sendClaudeSessionMessage({
|
|
1058
1154
|
type: "summary",
|
|
@@ -1200,6 +1296,7 @@ async function startHappyServer(client, options) {
|
|
|
1200
1296
|
...reportProgressTool.AUTOMATION_TOOL_NAMES,
|
|
1201
1297
|
...peerTools.SESSION_PEER_TOOL_NAMES,
|
|
1202
1298
|
...reportProgressTool.PROJECT_TOOL_NAMES,
|
|
1299
|
+
...reportProgressTool.ISSUE_TOOL_NAMES,
|
|
1203
1300
|
// Auto-allow only; the tools themselves appear for a lead on a board server.
|
|
1204
1301
|
...OWNER_BOARD_TOOL_NAMES,
|
|
1205
1302
|
...options?.assistant && !process.env.VH_TEAM_SCOPE_FILE ? downloadTarget.ASSISTANT_TOOL_NAMES : []
|
|
@@ -1,34 +1,127 @@
|
|
|
1
|
-
import { l as logger } from './logger-
|
|
1
|
+
import { l as logger } from './logger-CFrzcRHD.mjs';
|
|
2
2
|
import { p as prependToMessage, b as buildDigestLine, a as buildFirstTurnPrefix } from './prompt-QHuFx9j6.mjs';
|
|
3
|
-
import { P as ProjectsUnsupportedError } from './client-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { P as ProjectsUnsupportedError } from './client-BgInTvr6.mjs';
|
|
4
|
+
import { s as sharedIssuesClient, I as IssuesUnsupportedError } from './client-CMUlpYcy.mjs';
|
|
5
|
+
import { r as readSessionIssueMetadata } from './sessionMetadata-C1eoAi89.mjs';
|
|
6
|
+
import { c as configuration, f as ensurePrivateDirectorySync, w as writePrivateFileSync } from './configuration-DhEqAYzz.mjs';
|
|
7
7
|
import { join, dirname } from 'node:path';
|
|
8
|
+
import { readdirSync, statSync, unlinkSync, readFileSync, constants } from 'node:fs';
|
|
9
|
+
import { d as createSelfReportState, A as AUTOMATION_TOOL_NAMES, P as PROJECT_TOOL_NAMES, I as ISSUE_TOOL_NAMES, r as registerAutomationTools, a as registerProjectTools, e as createProjectToolExecutor, b as registerIssueTools, f as createIssueToolExecutor, c as registerReportProgressTool, n as normalizeAttention, g as normalizePhase, h as normalizeProgress, s as shouldAcceptSelfReport } from './reportProgressTool-qo0QIFNd.mjs';
|
|
10
|
+
import { homedir } from 'node:os';
|
|
8
11
|
import { z } from 'zod';
|
|
9
12
|
import { p as piAgentDir } from './pi-CqyoZMjI.mjs';
|
|
10
13
|
import { unlink, mkdir, open, rename } from 'node:fs/promises';
|
|
11
14
|
import { randomUUID, createHash } from 'node:crypto';
|
|
12
|
-
import { T as TeamConnectionPreflightError, S as SessionInOtherTeamError, c as createTeamsClient, t as teamRequest } from './client-
|
|
13
|
-
import { t as teamScopePath, r as readTeamScope } from './context-
|
|
14
|
-
import { g as waitForSessionKey, e as sendUserMessage } from './sessionOps-
|
|
15
|
+
import { T as TeamConnectionPreflightError, S as SessionInOtherTeamError, c as createTeamsClient, t as teamRequest } from './client-CK-jvgM1.mjs';
|
|
16
|
+
import { t as teamScopePath, r as readTeamScope } from './context-UzqWaA7f.mjs';
|
|
17
|
+
import { g as waitForSessionKey, e as sendUserMessage } from './sessionOps-BmhqmPPd.mjs';
|
|
15
18
|
import { T as TEAM_SKILL, a as TEAM_LEAD_PLAYBOOK } from './resources-CLP_MpK4.mjs';
|
|
16
|
-
import { T as TEAM_TOOL_NAMES, r as registerTeamsTools } from './tools-
|
|
17
|
-
import { S as SESSION_PEER_TOOL_NAMES, r as registerSessionPeerTools, a as createSessionPeerToolExecutor } from './peerTools-
|
|
19
|
+
import { T as TEAM_TOOL_NAMES, r as registerTeamsTools } from './tools-CDktvjWL.mjs';
|
|
20
|
+
import { S as SESSION_PEER_TOOL_NAMES, r as registerSessionPeerTools, a as createSessionPeerToolExecutor } from './peerTools-BiFpxXdf.mjs';
|
|
18
21
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
19
22
|
import { createServer } from 'node:http';
|
|
20
23
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
21
24
|
import { C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, c as CLIPBOARD_MAX_BYTES } from './limits-DIo7rEBR.mjs';
|
|
22
|
-
import { A as ASSISTANT_TOOL_NAMES, a as registerAssistantTools, c as checkDownloadTarget } from './downloadTarget-
|
|
25
|
+
import { A as ASSISTANT_TOOL_NAMES, a as registerAssistantTools, c as checkDownloadTarget } from './downloadTarget-BCSXmPRE.mjs';
|
|
23
26
|
import { P as PREVIEW_TOOL_NAME, R as REPORT_PROGRESS_TOOL_NAME, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION, c as PREVIEW_DOWNLOAD_PARAM_DESCRIPTION } from './agentGuidance-BDYt2Qy2.mjs';
|
|
24
27
|
import { n as normalizeWebPanels, w as webPanelPath } from './webPanels-B2_C2-3g.mjs';
|
|
25
|
-
import { b as readCredentialsForConfiguredRelay, r as readSettings } from './persistence-
|
|
26
|
-
import { g as getSessionNotificationBody } from './pushNotifications-
|
|
28
|
+
import { b as readCredentialsForConfiguredRelay, r as readSettings } from './persistence-CF7oV1oH.mjs';
|
|
29
|
+
import { g as getSessionNotificationBody } from './pushNotifications-CxX10K6n.mjs';
|
|
27
30
|
import { c as checkPreviewPath } from './previewPath-CXN4Vag0.mjs';
|
|
28
|
-
import {
|
|
29
|
-
import { c as configuration } from './configuration-D9k5yIzV.mjs';
|
|
31
|
+
import { a6 as ATTENTION_DISABLED_ERROR, a7 as ATTENTION_LIMITS, a8 as ownerBoardPostToRest, a9 as isAttentionBoardLocalId, aa as OwnerBoardPostInputSchema, ab as OwnerBoardUpdateInputSchema, ac as OwnerBoardResolveInputSchema, ad as OwnerBoardListInputSchema, ae as ATTENTION_SESSION_CAPABILITY } from './index-CiRMvS73.mjs';
|
|
30
32
|
import { createHash as createHash$1 } from 'crypto';
|
|
31
33
|
|
|
34
|
+
function buildIssueDigestLine(issue, entries) {
|
|
35
|
+
const human = entries.filter((e) => e.author.kind === "user" && !e.deletedAt);
|
|
36
|
+
const statuses = human.filter((e) => e.kind === "status");
|
|
37
|
+
const parts = [];
|
|
38
|
+
if (statuses.length) {
|
|
39
|
+
const from = statuses[0].data?.from;
|
|
40
|
+
parts.push(`now ${issue.status}${typeof from === "string" ? ` (${from} \u2192 ${issue.status} by owner)` : " (changed by owner)"}`);
|
|
41
|
+
}
|
|
42
|
+
if (human.some((e) => e.kind === "assign")) parts.push("assignee changed");
|
|
43
|
+
const fields = /* @__PURE__ */ new Set();
|
|
44
|
+
for (const e of human) if (e.kind === "field") {
|
|
45
|
+
for (const f of e.data?.fields ?? []) if (typeof f === "string") fields.add(f);
|
|
46
|
+
}
|
|
47
|
+
if (fields.size) parts.push(`${[...fields].join(", ")} updated`);
|
|
48
|
+
if (!parts.length) return null;
|
|
49
|
+
return `[Issue ${issue.key} ${parts.join("; ")}]`;
|
|
50
|
+
}
|
|
51
|
+
const SESSION_ID = /^[A-Za-z0-9_-]{1,128}$/;
|
|
52
|
+
const ISSUE_DIGEST_CURSOR_TTL_MS = 30 * 24 * 36e5;
|
|
53
|
+
function fileIssueDigestCursorStore(home, now = Date.now) {
|
|
54
|
+
const dir = join(home, "issues", "digest");
|
|
55
|
+
let pruned = false;
|
|
56
|
+
return {
|
|
57
|
+
read(sessionId) {
|
|
58
|
+
if (!SESSION_ID.test(sessionId)) return null;
|
|
59
|
+
try {
|
|
60
|
+
const asOf = JSON.parse(readFileSync(join(dir, `${sessionId}.json`), "utf8")).asOf;
|
|
61
|
+
return typeof asOf === "number" && Number.isFinite(asOf) ? asOf : null;
|
|
62
|
+
} catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
write(sessionId, asOf) {
|
|
67
|
+
if (!SESSION_ID.test(sessionId)) return;
|
|
68
|
+
try {
|
|
69
|
+
ensurePrivateDirectorySync(dir);
|
|
70
|
+
writePrivateFileSync(join(dir, `${sessionId}.json`), JSON.stringify({ asOf }));
|
|
71
|
+
if (!pruned) {
|
|
72
|
+
pruned = true;
|
|
73
|
+
for (const file of readdirSync(dir)) {
|
|
74
|
+
const path = join(dir, file);
|
|
75
|
+
try {
|
|
76
|
+
if (now() - statSync(path).mtimeMs > ISSUE_DIGEST_CURSOR_TTL_MS) unlinkSync(path);
|
|
77
|
+
} catch {
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
} catch (error) {
|
|
82
|
+
logger.debug(`[issues] digest cursor not saved: ${String(error)}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function createIssueDigest(deps) {
|
|
88
|
+
const client = deps.client ?? sharedIssuesClient();
|
|
89
|
+
const enabled = deps.enabled ?? (() => !!process.env.VH_ISSUE_ID || readSessionIssueMetadata(deps.metadata?.()) !== null);
|
|
90
|
+
const timeoutMs = deps.timeoutMs ?? 1500;
|
|
91
|
+
const store = deps.cursorStore === void 0 ? fileIssueDigestCursorStore(configuration.happyHomeDir) : deps.cursorStore;
|
|
92
|
+
let cursor = null;
|
|
93
|
+
let loadedFor = null;
|
|
94
|
+
const advance = (sid, asOf) => {
|
|
95
|
+
cursor = asOf;
|
|
96
|
+
store?.write(sid, asOf);
|
|
97
|
+
};
|
|
98
|
+
return {
|
|
99
|
+
cursor: () => cursor,
|
|
100
|
+
async decorate(message) {
|
|
101
|
+
const sid = deps.sessionId();
|
|
102
|
+
if (!sid || !enabled() || client.isDisabled()) return message;
|
|
103
|
+
if (loadedFor !== sid) {
|
|
104
|
+
loadedFor = sid;
|
|
105
|
+
cursor = store?.read(sid) ?? null;
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
if (cursor === null) {
|
|
109
|
+
const ctx2 = await client.session(sid, void 0, timeoutMs);
|
|
110
|
+
if (ctx2.issue) advance(sid, ctx2.asOf);
|
|
111
|
+
return message;
|
|
112
|
+
}
|
|
113
|
+
const ctx = await client.session(sid, cursor, timeoutMs);
|
|
114
|
+
if (!ctx.issue) return message;
|
|
115
|
+
advance(sid, ctx.asOf);
|
|
116
|
+
return prependToMessage(message, buildIssueDigestLine(ctx.issue, ctx.comments));
|
|
117
|
+
} catch (error) {
|
|
118
|
+
if (!(error instanceof IssuesUnsupportedError)) logger.debug(`[issues] digest skipped: ${String(error)}`);
|
|
119
|
+
return message;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
32
125
|
function createProjectInjector(deps) {
|
|
33
126
|
const timeoutMs = deps.timeoutMs ?? 1500;
|
|
34
127
|
const now = deps.now ?? Date.now;
|
|
@@ -38,6 +131,7 @@ function createProjectInjector(deps) {
|
|
|
38
131
|
let lastPresenceAt = 0;
|
|
39
132
|
let lastPresenceVersion = null;
|
|
40
133
|
const label = (id) => titles.get(id) ?? id.slice(0, 8);
|
|
134
|
+
const issueDigest = deps.issueDigest === void 0 ? createIssueDigest({ sessionId: deps.sessionId, metadata: () => deps.metadata?.() ?? null, timeoutMs }) : deps.issueDigest;
|
|
41
135
|
function withTimeout(p) {
|
|
42
136
|
return Promise.race([p, new Promise((_, reject) => setTimeout(() => reject(new Error("project injection timeout")), timeoutMs).unref?.())]);
|
|
43
137
|
}
|
|
@@ -109,15 +203,16 @@ function createProjectInjector(deps) {
|
|
|
109
203
|
},
|
|
110
204
|
async decorate(message) {
|
|
111
205
|
if (typeof message !== "string") return message;
|
|
206
|
+
const withIssue = async (text) => issueDigest ? issueDigest.decorate(text) : text;
|
|
112
207
|
const sid = deps.sessionId();
|
|
113
|
-
if (!sid || deps.client.isDisabled()) return message;
|
|
208
|
+
if (!sid || deps.client.isDisabled()) return await withIssue(message);
|
|
209
|
+
let out = message;
|
|
114
210
|
try {
|
|
115
|
-
|
|
116
|
-
return out;
|
|
211
|
+
out = state.prefixSent ? await laterTurn(sid, message) : await firstTurn(sid, message);
|
|
117
212
|
} catch (error) {
|
|
118
213
|
if (!(error instanceof ProjectsUnsupportedError)) logger.debug(`[projects] injection skipped: ${String(error)}`);
|
|
119
|
-
return message;
|
|
120
214
|
}
|
|
215
|
+
return await withIssue(out);
|
|
121
216
|
}
|
|
122
217
|
};
|
|
123
218
|
}
|
|
@@ -848,6 +943,7 @@ function createMcpServer(handlers, options, sessionId, client) {
|
|
|
848
943
|
registerAutomationTools(mcp);
|
|
849
944
|
if (client) registerSessionPeerTools(mcp, createSessionPeerToolExecutor(client));
|
|
850
945
|
if (client) registerProjectTools(mcp, createProjectToolExecutor(() => client.sessionId));
|
|
946
|
+
if (client) registerIssueTools(mcp, createIssueToolExecutor(() => client.sessionId));
|
|
851
947
|
mcp.registerTool("change_title", {
|
|
852
948
|
description: "Change the title of the current chat session",
|
|
853
949
|
title: "Change Chat Title",
|
|
@@ -1050,7 +1146,7 @@ async function startHappyServer(client, options) {
|
|
|
1050
1146
|
}
|
|
1051
1147
|
},
|
|
1052
1148
|
changeTitle: async (title) => {
|
|
1053
|
-
logger.debug(
|
|
1149
|
+
logger.debug(`[happyMCP] Changing title (${title.length} chars)`);
|
|
1054
1150
|
try {
|
|
1055
1151
|
client.sendClaudeSessionMessage({
|
|
1056
1152
|
type: "summary",
|
|
@@ -1198,6 +1294,7 @@ async function startHappyServer(client, options) {
|
|
|
1198
1294
|
...AUTOMATION_TOOL_NAMES,
|
|
1199
1295
|
...SESSION_PEER_TOOL_NAMES,
|
|
1200
1296
|
...PROJECT_TOOL_NAMES,
|
|
1297
|
+
...ISSUE_TOOL_NAMES,
|
|
1201
1298
|
// Auto-allow only; the tools themselves appear for a lead on a board server.
|
|
1202
1299
|
...OWNER_BOARD_TOOL_NAMES,
|
|
1203
1300
|
...options?.assistant && !process.env.VH_TEAM_SCOPE_FILE ? ASSISTANT_TOOL_NAMES : []
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import { c as configuration } from './configuration-
|
|
3
|
-
import { r as readSettings, g as readCredentials, d as readDaemonState } from './persistence-
|
|
4
|
-
import { a as checkIfDaemonRunningAndCleanupStaleState } from './controlClient-
|
|
2
|
+
import { c as configuration } from './configuration-DhEqAYzz.mjs';
|
|
3
|
+
import { r as readSettings, g as readCredentials, d as readDaemonState } from './persistence-CF7oV1oH.mjs';
|
|
4
|
+
import { a as checkIfDaemonRunningAndCleanupStaleState } from './controlClient-PaIiDxM6.mjs';
|
|
5
5
|
import { findAllHappyProcesses } from './doctor-GN5mPOn5.mjs';
|
|
6
6
|
import { statSync, realpathSync, existsSync, readdirSync } from 'node:fs';
|
|
7
7
|
import { isAbsolute, resolve, dirname, basename, delimiter, join } from 'node:path';
|
|
8
8
|
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
9
|
-
import { p as packageJson } from './package-
|
|
9
|
+
import { p as packageJson } from './package-DxE8PttX.mjs';
|
|
10
10
|
import { s as shareableSettingsSummary, c as collectRuntimeReadiness, S as SUPPORTED_NODE_LABEL, r as resolveClaudeCredentialReadiness, a as toolProbeLabel, b as daemonReadiness, d as daemonEndpointsMatch } from './doctorReadiness-C208SMN9.mjs';
|
|
11
11
|
import { c as credentialRelayProblem } from './authRelay-DhQhkBvX.mjs';
|
|
12
12
|
import { d as deriveLocalCliUpdateSummary } from './cliUpdate-Y34VGe9Y.mjs';
|
|
13
13
|
import { spawnSync } from 'node:child_process';
|
|
14
|
-
import { p as piInstallCommand } from './piRunnerArgs-
|
|
14
|
+
import { p as piInstallCommand } from './piRunnerArgs-Cfc-F-FJ.mjs';
|
|
15
15
|
|
|
16
16
|
function shareSafeProcessLine(process2) {
|
|
17
17
|
return `PID ${process2.pid}: command arguments hidden for privacy`;
|
|
@@ -311,8 +311,8 @@ ${typeLabels[type] || type}:`));
|
|
|
311
311
|
}
|
|
312
312
|
console.log(chalk.gray(" An external claude command is only needed for native terminal/mirror use."));
|
|
313
313
|
try {
|
|
314
|
-
const { resolveAgentHomesForCli } = await import('./agentHome-
|
|
315
|
-
const { describeAgentHome } = await import('./index-
|
|
314
|
+
const { resolveAgentHomesForCli } = await import('./agentHome-DyrLqr8b.mjs');
|
|
315
|
+
const { describeAgentHome } = await import('./index-HJFzeG0B.mjs');
|
|
316
316
|
const homes = await resolveAgentHomesForCli();
|
|
317
317
|
console.log(chalk.green(`\u2713 Claude config dir: ${describeAgentHome(homes.claudeConfigDir)}`));
|
|
318
318
|
console.log(chalk.green(`\u2713 Codex home: ${describeAgentHome(homes.codexHome)}`));
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chalk = require('chalk');
|
|
4
|
-
var configuration = require('./configuration-
|
|
5
|
-
var persistence = require('./persistence-
|
|
6
|
-
var controlClient = require('./controlClient-
|
|
4
|
+
var configuration = require('./configuration-LWFmTxty.cjs');
|
|
5
|
+
var persistence = require('./persistence-_W9tE-bW.cjs');
|
|
6
|
+
var controlClient = require('./controlClient-TVMpETsR.cjs');
|
|
7
7
|
var doctor$1 = require('./doctor-CJpFhHoK.cjs');
|
|
8
8
|
var node_fs = require('node:fs');
|
|
9
9
|
var path = require('node:path');
|
|
10
10
|
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
11
|
-
var _package = require('./package-
|
|
11
|
+
var _package = require('./package-06cGlmeD.cjs');
|
|
12
12
|
var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
|
|
13
13
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
14
14
|
var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
|
|
15
15
|
var node_child_process = require('node:child_process');
|
|
16
|
-
var piRunnerArgs = require('./piRunnerArgs-
|
|
16
|
+
var piRunnerArgs = require('./piRunnerArgs-T2cAiaGW.cjs');
|
|
17
17
|
|
|
18
18
|
function shareSafeProcessLine(process2) {
|
|
19
19
|
return `PID ${process2.pid}: command arguments hidden for privacy`;
|
|
@@ -313,8 +313,8 @@ ${typeLabels[type] || type}:`));
|
|
|
313
313
|
}
|
|
314
314
|
console.log(chalk.gray(" An external claude command is only needed for native terminal/mirror use."));
|
|
315
315
|
try {
|
|
316
|
-
const { resolveAgentHomesForCli } = await Promise.resolve().then(function () { return require('./agentHome-
|
|
317
|
-
const { describeAgentHome } = await Promise.resolve().then(function () { return require('./index-
|
|
316
|
+
const { resolveAgentHomesForCli } = await Promise.resolve().then(function () { return require('./agentHome-BTwMaYw1.cjs'); });
|
|
317
|
+
const { describeAgentHome } = await Promise.resolve().then(function () { return require('./index-BuOzDU17.cjs'); });
|
|
318
318
|
const homes = await resolveAgentHomesForCli();
|
|
319
319
|
console.log(chalk.green(`\u2713 Claude config dir: ${describeAgentHome(homes.claudeConfigDir)}`));
|
|
320
320
|
console.log(chalk.green(`\u2713 Codex home: ${describeAgentHome(homes.codexHome)}`));
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { readFile, writeFile, appendFile, stat } from 'node:fs/promises';
|
|
2
2
|
import os from 'node:os';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import { l as logger } from './logger-
|
|
5
|
-
import { c as readPersistedSessions } from './persistence-
|
|
6
|
-
import { e as spawnDaemonSession } from './controlClient-
|
|
7
|
-
import { a as listSessions, r as readSessionTranscript, s as sessionWebUrl, g as waitForSessionKey, e as sendUserMessage, b as stopSession, d as archiveSession } from './sessionOps-
|
|
8
|
-
import { r as readRemoteTranscript, s as sendRemoteMessage, d as deliverToSession, R as RemoteSessionOpsError } from './remoteSessionClient-
|
|
4
|
+
import { l as logger } from './logger-CFrzcRHD.mjs';
|
|
5
|
+
import { c as readPersistedSessions } from './persistence-CF7oV1oH.mjs';
|
|
6
|
+
import { e as spawnDaemonSession } from './controlClient-PaIiDxM6.mjs';
|
|
7
|
+
import { a as listSessions, r as readSessionTranscript, s as sessionWebUrl, g as waitForSessionKey, e as sendUserMessage, b as stopSession, d as archiveSession } from './sessionOps-BmhqmPPd.mjs';
|
|
8
|
+
import { r as readRemoteTranscript, s as sendRemoteMessage, d as deliverToSession, R as RemoteSessionOpsError } from './remoteSessionClient-Dj2rV8Az.mjs';
|
|
9
9
|
import { i as isValidSessionId, a as isValidTerminalId } from './ids-DU6sLx4C.mjs';
|
|
10
10
|
import { l as listVhTerminals, r as readVhTerminal, s as sendToVhTerminal } from './terminals-Dc38XmZv.mjs';
|
|
11
|
-
import { bootstrapAssistantHome, assistantPersonalMemoryPath } from './bootstrap-
|
|
11
|
+
import { bootstrapAssistantHome, assistantPersonalMemoryPath } from './bootstrap-D_1MskAl.mjs';
|
|
12
12
|
import { join, isAbsolute, normalize } from 'node:path';
|
|
13
13
|
|
|
14
14
|
const PERSONAL_MEMORY_SOFT_LIMIT_CHARS = 2e3;
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
var promises = require('node:fs/promises');
|
|
4
4
|
var os = require('node:os');
|
|
5
5
|
var z = require('zod');
|
|
6
|
-
var logger = require('./logger-
|
|
7
|
-
var persistence = require('./persistence-
|
|
8
|
-
var controlClient = require('./controlClient-
|
|
9
|
-
var sessionOps = require('./sessionOps-
|
|
10
|
-
var remoteSessionClient = require('./remoteSessionClient-
|
|
6
|
+
var logger = require('./logger-Hyhy2boA.cjs');
|
|
7
|
+
var persistence = require('./persistence-_W9tE-bW.cjs');
|
|
8
|
+
var controlClient = require('./controlClient-TVMpETsR.cjs');
|
|
9
|
+
var sessionOps = require('./sessionOps-SxZr9veq.cjs');
|
|
10
|
+
var remoteSessionClient = require('./remoteSessionClient-DoxfnpnK.cjs');
|
|
11
11
|
var ids = require('./ids-B6ZC0HGt.cjs');
|
|
12
12
|
var terminals = require('./terminals-dK3Lrjfp.cjs');
|
|
13
|
-
var bootstrap = require('./bootstrap-
|
|
13
|
+
var bootstrap = require('./bootstrap-N1PY4ypX.cjs');
|
|
14
14
|
var path = require('node:path');
|
|
15
15
|
|
|
16
16
|
const PERSONAL_MEMORY_SOFT_LIMIT_CHARS = 2e3;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { l as logger } from './logger-
|
|
2
|
-
import { i as isDaemonRunningCurrentlyInstalledHappyVersion, a as checkIfDaemonRunningAndCleanupStaleState, s as stopDaemon } from './controlClient-
|
|
3
|
-
import { s as spawnHappyCLI } from './spawnHappyCLI-
|
|
4
|
-
import { d as readDaemonState } from './persistence-
|
|
5
|
-
import { c as configuration } from './configuration-
|
|
1
|
+
import { l as logger } from './logger-CFrzcRHD.mjs';
|
|
2
|
+
import { i as isDaemonRunningCurrentlyInstalledHappyVersion, a as checkIfDaemonRunningAndCleanupStaleState, s as stopDaemon } from './controlClient-PaIiDxM6.mjs';
|
|
3
|
+
import { s as spawnHappyCLI } from './spawnHappyCLI-D6OcgFDR.mjs';
|
|
4
|
+
import { d as readDaemonState } from './persistence-CF7oV1oH.mjs';
|
|
5
|
+
import { c as configuration } from './configuration-DhEqAYzz.mjs';
|
|
6
6
|
import { d as daemonEndpointsMatch } from './doctorReadiness-C208SMN9.mjs';
|
|
7
7
|
|
|
8
8
|
function extractNoSandboxFlag(args) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var logger = require('./logger-
|
|
4
|
-
var controlClient = require('./controlClient-
|
|
5
|
-
var spawnHappyCLI = require('./spawnHappyCLI-
|
|
6
|
-
var persistence = require('./persistence-
|
|
7
|
-
var configuration = require('./configuration-
|
|
3
|
+
var logger = require('./logger-Hyhy2boA.cjs');
|
|
4
|
+
var controlClient = require('./controlClient-TVMpETsR.cjs');
|
|
5
|
+
var spawnHappyCLI = require('./spawnHappyCLI-CI7Ax4mF.cjs');
|
|
6
|
+
var persistence = require('./persistence-_W9tE-bW.cjs');
|
|
7
|
+
var configuration = require('./configuration-LWFmTxty.cjs');
|
|
8
8
|
var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
|
|
9
9
|
|
|
10
10
|
function extractNoSandboxFlag(args) {
|