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
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { I as IssuesUnsupportedError, a as IssueRequestError } from './client-CMUlpYcy.mjs';
|
|
2
|
+
|
|
3
|
+
const MESSAGES = {
|
|
4
|
+
issue_status_forbidden: "Agents may only set in_progress, in_review or blocked. Only the owner sets done or cancelled; move it to in_review with a summary instead.",
|
|
5
|
+
issue_closed: "This issue is closed (done or cancelled). Its status cannot be changed by an agent; you can still comment.",
|
|
6
|
+
issue_comment_required: "in_review and blocked need a comment: say what you delivered and how it was verified, or exactly what you need.",
|
|
7
|
+
issue_not_bound: "This session is not working on an issue (it was not started from one).",
|
|
8
|
+
issue_run_not_current: "This issue has moved to a newer run; stop changing it.",
|
|
9
|
+
issue_comment_quota_exceeded: "Too many issue comments from this run in the last hour; wait before commenting again.",
|
|
10
|
+
issue_not_found: "No such issue (it may have been deleted).",
|
|
11
|
+
issue_todo_deleted: "This todo id belongs to a deleted todo and cannot be reused; add with a new UUID.",
|
|
12
|
+
issue_version_conflict: "The issue changed since you read it; read it again before deciding what to change.",
|
|
13
|
+
issue_assignee_unsupported: "That assignee is not supported.",
|
|
14
|
+
issue_agent_unsupported: "That agent cannot be assigned an issue (Claude, Codex or pi only).",
|
|
15
|
+
issue_no_directory: "No folder for this agent on that machine: pass a directory or put the issue in a project with a folder there.",
|
|
16
|
+
issue_machine_not_found: "No such machine on this account.",
|
|
17
|
+
issue_project_not_found: "No such project.",
|
|
18
|
+
issue_parent_cycle: "That parent would create a cycle.",
|
|
19
|
+
issue_count_quota_exceeded: "This account has reached the issue limit.",
|
|
20
|
+
transaction_conflict: "The server was busy; retry.",
|
|
21
|
+
rate_limited: "Rate limited; retry later.",
|
|
22
|
+
not_signed_in: "Sign in to Very Happy with `very-happy auth login` first."
|
|
23
|
+
};
|
|
24
|
+
const ISSUES_UNSUPPORTED_TEXT = "issues_unsupported: This Very Happy server does not support Issues (or they are turned off).";
|
|
25
|
+
function describeIssueError(error) {
|
|
26
|
+
if (error instanceof IssuesUnsupportedError) return ISSUES_UNSUPPORTED_TEXT;
|
|
27
|
+
if (error instanceof IssueRequestError) {
|
|
28
|
+
const code = error.code ?? (error.status === 429 ? "rate_limited" : null);
|
|
29
|
+
if (code) {
|
|
30
|
+
const server = typeof error.details.message === "string" ? error.details.message : null;
|
|
31
|
+
return `${code}: ${server ?? MESSAGES[code] ?? "Issue request failed."}`;
|
|
32
|
+
}
|
|
33
|
+
return `Issue request failed (HTTP ${error.status})`;
|
|
34
|
+
}
|
|
35
|
+
return error instanceof Error && error.message ? error.message : "Issue request failed";
|
|
36
|
+
}
|
|
37
|
+
function assigneeLabel(issue) {
|
|
38
|
+
const a = issue.assignee;
|
|
39
|
+
if (a.kind === "agent") return `${a.agent ?? "agent"}@${(a.machineId ?? "").slice(0, 8)}`;
|
|
40
|
+
return a.kind;
|
|
41
|
+
}
|
|
42
|
+
function when(ms) {
|
|
43
|
+
return ms ? new Date(ms).toISOString().replace("T", " ").slice(0, 16) + "Z" : "";
|
|
44
|
+
}
|
|
45
|
+
function formatIssueLine(issue) {
|
|
46
|
+
const extra = [issue.priority !== "none" ? issue.priority : null, issue.labels.length ? issue.labels.join(",") : null].filter(Boolean).join(" \xB7 ");
|
|
47
|
+
return `${issue.key} [${issue.status}] ${issue.title} (${assigneeLabel(issue)}${extra ? ` \xB7 ${extra}` : ""})`;
|
|
48
|
+
}
|
|
49
|
+
function commentLine(c) {
|
|
50
|
+
const who = c.author.kind === "agent" ? "agent" : c.author.kind === "user" ? "owner" : c.author.kind;
|
|
51
|
+
const body = c.kind === "comment" ? c.body : `(${c.kind}) ${c.body}`;
|
|
52
|
+
return `- ${when(c.createdAt)} [${who}] ${body.replace(/\s+/g, " ").slice(0, 600)}`;
|
|
53
|
+
}
|
|
54
|
+
function runLine(r) {
|
|
55
|
+
return `- run #${r.seq} ${r.trigger} \xB7 ${r.agent} \xB7 ${r.status}${r.sessionId ? ` \xB7 session ${r.sessionId}` : ""}${r.error ? ` \xB7 ${r.error.slice(0, 200)}` : ""}`;
|
|
56
|
+
}
|
|
57
|
+
function formatIssueDetail(input) {
|
|
58
|
+
const { issue } = input;
|
|
59
|
+
const meta = [`status: ${issue.status}`, `priority: ${issue.priority}`, `assignee: ${assigneeLabel(issue)}`];
|
|
60
|
+
if (issue.labels.length) meta.push(`labels: ${issue.labels.join(", ")}`);
|
|
61
|
+
if (issue.dueAt) meta.push(`due: ${new Date(issue.dueAt).toISOString().slice(0, 10)}`);
|
|
62
|
+
const lines = [`${issue.key}: ${issue.title}`, meta.join(" \xB7 ")];
|
|
63
|
+
if (input.bound) lines.push(input.current ? "This session is the issue's current run (issue_update / issue_comment allowed)." : "This session's run is no longer current: do not change this issue.");
|
|
64
|
+
lines.push("", issue.description.trim() || "(no description)");
|
|
65
|
+
const comments = input.comments.slice(-10);
|
|
66
|
+
if (comments.length) lines.push("", "Timeline (oldest first):", ...comments.map(commentLine));
|
|
67
|
+
if (input.runs?.length) lines.push("", "Runs:", ...input.runs.map(runLine));
|
|
68
|
+
return lines.join("\n");
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export { formatIssueDetail as a, describeIssueError as d, formatIssueLine as f };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var client = require('./client-DI8Rxsbw.cjs');
|
|
4
|
+
|
|
5
|
+
const MESSAGES = {
|
|
6
|
+
issue_status_forbidden: "Agents may only set in_progress, in_review or blocked. Only the owner sets done or cancelled; move it to in_review with a summary instead.",
|
|
7
|
+
issue_closed: "This issue is closed (done or cancelled). Its status cannot be changed by an agent; you can still comment.",
|
|
8
|
+
issue_comment_required: "in_review and blocked need a comment: say what you delivered and how it was verified, or exactly what you need.",
|
|
9
|
+
issue_not_bound: "This session is not working on an issue (it was not started from one).",
|
|
10
|
+
issue_run_not_current: "This issue has moved to a newer run; stop changing it.",
|
|
11
|
+
issue_comment_quota_exceeded: "Too many issue comments from this run in the last hour; wait before commenting again.",
|
|
12
|
+
issue_not_found: "No such issue (it may have been deleted).",
|
|
13
|
+
issue_todo_deleted: "This todo id belongs to a deleted todo and cannot be reused; add with a new UUID.",
|
|
14
|
+
issue_version_conflict: "The issue changed since you read it; read it again before deciding what to change.",
|
|
15
|
+
issue_assignee_unsupported: "That assignee is not supported.",
|
|
16
|
+
issue_agent_unsupported: "That agent cannot be assigned an issue (Claude, Codex or pi only).",
|
|
17
|
+
issue_no_directory: "No folder for this agent on that machine: pass a directory or put the issue in a project with a folder there.",
|
|
18
|
+
issue_machine_not_found: "No such machine on this account.",
|
|
19
|
+
issue_project_not_found: "No such project.",
|
|
20
|
+
issue_parent_cycle: "That parent would create a cycle.",
|
|
21
|
+
issue_count_quota_exceeded: "This account has reached the issue limit.",
|
|
22
|
+
transaction_conflict: "The server was busy; retry.",
|
|
23
|
+
rate_limited: "Rate limited; retry later.",
|
|
24
|
+
not_signed_in: "Sign in to Very Happy with `very-happy auth login` first."
|
|
25
|
+
};
|
|
26
|
+
const ISSUES_UNSUPPORTED_TEXT = "issues_unsupported: This Very Happy server does not support Issues (or they are turned off).";
|
|
27
|
+
function describeIssueError(error) {
|
|
28
|
+
if (error instanceof client.IssuesUnsupportedError) return ISSUES_UNSUPPORTED_TEXT;
|
|
29
|
+
if (error instanceof client.IssueRequestError) {
|
|
30
|
+
const code = error.code ?? (error.status === 429 ? "rate_limited" : null);
|
|
31
|
+
if (code) {
|
|
32
|
+
const server = typeof error.details.message === "string" ? error.details.message : null;
|
|
33
|
+
return `${code}: ${server ?? MESSAGES[code] ?? "Issue request failed."}`;
|
|
34
|
+
}
|
|
35
|
+
return `Issue request failed (HTTP ${error.status})`;
|
|
36
|
+
}
|
|
37
|
+
return error instanceof Error && error.message ? error.message : "Issue request failed";
|
|
38
|
+
}
|
|
39
|
+
function assigneeLabel(issue) {
|
|
40
|
+
const a = issue.assignee;
|
|
41
|
+
if (a.kind === "agent") return `${a.agent ?? "agent"}@${(a.machineId ?? "").slice(0, 8)}`;
|
|
42
|
+
return a.kind;
|
|
43
|
+
}
|
|
44
|
+
function when(ms) {
|
|
45
|
+
return ms ? new Date(ms).toISOString().replace("T", " ").slice(0, 16) + "Z" : "";
|
|
46
|
+
}
|
|
47
|
+
function formatIssueLine(issue) {
|
|
48
|
+
const extra = [issue.priority !== "none" ? issue.priority : null, issue.labels.length ? issue.labels.join(",") : null].filter(Boolean).join(" \xB7 ");
|
|
49
|
+
return `${issue.key} [${issue.status}] ${issue.title} (${assigneeLabel(issue)}${extra ? ` \xB7 ${extra}` : ""})`;
|
|
50
|
+
}
|
|
51
|
+
function commentLine(c) {
|
|
52
|
+
const who = c.author.kind === "agent" ? "agent" : c.author.kind === "user" ? "owner" : c.author.kind;
|
|
53
|
+
const body = c.kind === "comment" ? c.body : `(${c.kind}) ${c.body}`;
|
|
54
|
+
return `- ${when(c.createdAt)} [${who}] ${body.replace(/\s+/g, " ").slice(0, 600)}`;
|
|
55
|
+
}
|
|
56
|
+
function runLine(r) {
|
|
57
|
+
return `- run #${r.seq} ${r.trigger} \xB7 ${r.agent} \xB7 ${r.status}${r.sessionId ? ` \xB7 session ${r.sessionId}` : ""}${r.error ? ` \xB7 ${r.error.slice(0, 200)}` : ""}`;
|
|
58
|
+
}
|
|
59
|
+
function formatIssueDetail(input) {
|
|
60
|
+
const { issue } = input;
|
|
61
|
+
const meta = [`status: ${issue.status}`, `priority: ${issue.priority}`, `assignee: ${assigneeLabel(issue)}`];
|
|
62
|
+
if (issue.labels.length) meta.push(`labels: ${issue.labels.join(", ")}`);
|
|
63
|
+
if (issue.dueAt) meta.push(`due: ${new Date(issue.dueAt).toISOString().slice(0, 10)}`);
|
|
64
|
+
const lines = [`${issue.key}: ${issue.title}`, meta.join(" \xB7 ")];
|
|
65
|
+
if (input.bound) lines.push(input.current ? "This session is the issue's current run (issue_update / issue_comment allowed)." : "This session's run is no longer current: do not change this issue.");
|
|
66
|
+
lines.push("", issue.description.trim() || "(no description)");
|
|
67
|
+
const comments = input.comments.slice(-10);
|
|
68
|
+
if (comments.length) lines.push("", "Timeline (oldest first):", ...comments.map(commentLine));
|
|
69
|
+
if (input.runs?.length) lines.push("", "Runs:", ...input.runs.map(runLine));
|
|
70
|
+
return lines.join("\n");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
exports.describeIssueError = describeIssueError;
|
|
74
|
+
exports.formatIssueDetail = formatIssueDetail;
|
|
75
|
+
exports.formatIssueLine = formatIssueLine;
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
|
-
import { s as spawnHappyCLI } from './spawnHappyCLI-
|
|
2
|
+
import { s as spawnHappyCLI } from './spawnHappyCLI-D6OcgFDR.mjs';
|
|
3
3
|
import axios, { AxiosError } from 'axios';
|
|
4
4
|
import tweetnacl from 'tweetnacl';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import { d as decodeBase64, a as decryptWithDataKey, b as decryptLegacy } from './authRelay-DhQhkBvX.mjs';
|
|
7
|
-
import { c as configuration } from './configuration-
|
|
8
|
-
import { g as getLocalHappyAgentCredentialPath, r as readLocalHappyAgentCredentials } from './localHappyAgentAuth-
|
|
7
|
+
import { c as configuration } from './configuration-DhEqAYzz.mjs';
|
|
8
|
+
import { g as getLocalHappyAgentCredentialPath, r as readLocalHappyAgentCredentials } from './localHappyAgentAuth-kg2RFvOy.mjs';
|
|
9
9
|
import 'cross-spawn';
|
|
10
10
|
import 'node:path';
|
|
11
11
|
import './projectPath-BTBIMB57.mjs';
|
|
12
12
|
import 'path';
|
|
13
13
|
import 'url';
|
|
14
|
-
import './logger-
|
|
14
|
+
import './logger-CFrzcRHD.mjs';
|
|
15
15
|
import 'chalk';
|
|
16
16
|
import 'node:util';
|
|
17
17
|
import 'node:crypto';
|
|
18
18
|
import 'node:os';
|
|
19
|
-
import './package-
|
|
19
|
+
import './package-DxE8PttX.mjs';
|
|
20
20
|
import 'node:fs/promises';
|
|
21
21
|
|
|
22
22
|
const ResumableMetadataSchema = z.object({
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var node_fs = require('node:fs');
|
|
4
|
-
var spawnHappyCLI = require('./spawnHappyCLI-
|
|
4
|
+
var spawnHappyCLI = require('./spawnHappyCLI-CI7Ax4mF.cjs');
|
|
5
5
|
var axios = require('axios');
|
|
6
6
|
var tweetnacl = require('tweetnacl');
|
|
7
7
|
var z = require('zod');
|
|
8
8
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
9
|
-
var configuration = require('./configuration-
|
|
10
|
-
var localHappyAgentAuth = require('./localHappyAgentAuth-
|
|
9
|
+
var configuration = require('./configuration-LWFmTxty.cjs');
|
|
10
|
+
var localHappyAgentAuth = require('./localHappyAgentAuth-DxlQgaer.cjs');
|
|
11
11
|
require('cross-spawn');
|
|
12
12
|
require('node:path');
|
|
13
13
|
require('./projectPath-C3ioB4Bu.cjs');
|
|
14
14
|
require('path');
|
|
15
15
|
require('url');
|
|
16
|
-
require('./logger-
|
|
16
|
+
require('./logger-Hyhy2boA.cjs');
|
|
17
17
|
require('chalk');
|
|
18
18
|
require('node:util');
|
|
19
19
|
require('node:crypto');
|
|
20
20
|
require('node:os');
|
|
21
|
-
require('./package-
|
|
21
|
+
require('./package-06cGlmeD.cjs');
|
|
22
22
|
require('node:fs/promises');
|
|
23
23
|
|
|
24
24
|
const ResumableMetadataSchema = z.z.object({
|
|
@@ -1238,7 +1238,7 @@ This skill operates the user's account-synced My todos. External providers and a
|
|
|
1238
1238
|
|
|
1239
1239
|
Commands return JSON with serverUrl. A nonzero exit is an error; do not infer success from text generated by the agent.
|
|
1240
1240
|
|
|
1241
|
-
- \`very-happy todo list\`: read tasks including their id and version. Respect truncated/invalidCount; a partial or invalid list is not a complete account inventory.
|
|
1241
|
+
- \`very-happy todo list\`: read open and completed tasks (status open/done) including their id and version. Respect truncated/invalidCount; a partial or invalid list is not a complete account inventory.
|
|
1242
1242
|
- \`very-happy todo get ID\`: read the current task before editing or resolving a conflict.
|
|
1243
1243
|
- \`very-happy todo add --id UUID --title "Task" --note "Optional note"\`: generate one fresh UUID for this intended creation and retain it until the outcome is known. For example, Node can generate it with \`node -e "console.log(require('node:crypto').randomUUID())"\`.
|
|
1244
1244
|
- \`very-happy todo edit ID --version N --title "New title" --note "New note"\`: use the version you read; omit fields that should remain unchanged.
|
|
@@ -1253,9 +1253,13 @@ For add, retry with the same UUID and identical title/note after a timeout; do n
|
|
|
1253
1253
|
|
|
1254
1254
|
For edit/status/delete, a conflict means the version changed. Read the task and compare the new state with the user's request before deciding what to do; never automatically overwrite with a freshly fetched version. A timeout may have committed: read to reconcile, then report the confirmed result. Do not claim a delete succeeded merely because a request was sent.
|
|
1255
1255
|
|
|
1256
|
+
## Issues
|
|
1257
|
+
|
|
1258
|
+
On a server with Issues, My todos are issues without an assignee: the todo commands keep working on them (an ID may also be an issue key such as VH-12). Run \`very-happy issue --help\` for the full Issues interface (assign to an agent, comments). Without Issues the todo commands use the classic store; their output is the same.
|
|
1259
|
+
|
|
1256
1260
|
Restricted team workers cannot use account-wide Todo credentials. Ask the user or supervising session to perform the account operation; do not clear scope variables or seek another credential to bypass that boundary.
|
|
1257
1261
|
`;
|
|
1258
|
-
const BUILTIN_TODO_DISCOVERY = "For the user\u2019s Very Happy My todos, run `very-happy todo skill` to read the official skill, then use its CLI commands. Do not confuse account todos with your execution plan; restricted team workers must not bypass their scope.";
|
|
1262
|
+
const BUILTIN_TODO_DISCOVERY = "For the user\u2019s Very Happy My todos (and Issues: `very-happy issue --help`), run `very-happy todo skill` to read the official skill, then use its CLI commands. Do not confuse account todos with your execution plan; restricted team workers must not bypass their scope.";
|
|
1259
1263
|
z.z.object({
|
|
1260
1264
|
source: z.z.literal("pi"),
|
|
1261
1265
|
tokens: z.z.number().finite().nonnegative().nullable(),
|
|
@@ -1822,6 +1826,12 @@ function ownerBoardPostToRest(sessionId, input, anchor) {
|
|
|
1822
1826
|
inferred: false
|
|
1823
1827
|
};
|
|
1824
1828
|
}
|
|
1829
|
+
const ISSUE_SESSION_CAPABILITY = "issue-v1";
|
|
1830
|
+
const ISSUES_DISABLED_ERROR = "issues_disabled";
|
|
1831
|
+
const ISSUE_WORKER_VERSION = 1;
|
|
1832
|
+
const ISSUE_KEY_PREFIX = "VH";
|
|
1833
|
+
const ISSUE_DISPATCH_LOCAL_ID_PREFIX = "issue-";
|
|
1834
|
+
const ISSUE_SENT_FROM = "issue";
|
|
1825
1835
|
const ISSUE_LIMITS = {
|
|
1826
1836
|
titleChars: 300,
|
|
1827
1837
|
descriptionBytes: 32 * 1024,
|
|
@@ -1834,8 +1844,23 @@ const ISSUE_LIMITS = {
|
|
|
1834
1844
|
const ISSUE_STATUSES = ["backlog", "todo", "in_progress", "in_review", "blocked", "done", "cancelled"];
|
|
1835
1845
|
const ISSUE_PRIORITIES = ["urgent", "high", "medium", "low", "none"];
|
|
1836
1846
|
const ISSUE_AGENT_STATUSES = ["in_progress", "in_review", "blocked"];
|
|
1847
|
+
const ISSUE_CLOSED_STATUSES = ["done", "cancelled"];
|
|
1837
1848
|
const ISSUE_ASSIGNABLE_AGENTS = ["claude", "codex", "pi"];
|
|
1838
1849
|
const ISSUE_ASSIGNEE_KINDS = ["none", "self", "agent", "team"];
|
|
1850
|
+
function isIssueClosed(status) {
|
|
1851
|
+
return ISSUE_CLOSED_STATUSES.includes(status);
|
|
1852
|
+
}
|
|
1853
|
+
const ISSUE_KEY_PATTERN = new RegExp(`^${ISSUE_KEY_PREFIX}-(\\d{1,9})$`, "i");
|
|
1854
|
+
const UUIDISH = /^[A-Za-z0-9_-]{8,128}$/;
|
|
1855
|
+
function parseIssueRef(input) {
|
|
1856
|
+
const value = input.trim();
|
|
1857
|
+
const key2 = ISSUE_KEY_PATTERN.exec(value) ?? /^#?(\d{1,9})$/.exec(value);
|
|
1858
|
+
if (key2) {
|
|
1859
|
+
const n = Number(key2[1]);
|
|
1860
|
+
return n > 0 ? { number: n } : null;
|
|
1861
|
+
}
|
|
1862
|
+
return UUIDISH.test(value) ? { id: value } : null;
|
|
1863
|
+
}
|
|
1839
1864
|
const id = z.z.string().min(1).max(128);
|
|
1840
1865
|
const requestId = z.z.string().min(1).max(128);
|
|
1841
1866
|
const utf8Bytes = (value) => new TextEncoder().encode(value).length;
|
|
@@ -1882,7 +1907,14 @@ z.z.object({
|
|
|
1882
1907
|
dueAt: epochMs.nullable().optional(),
|
|
1883
1908
|
parentId: id.nullable().optional(),
|
|
1884
1909
|
/** Idempotency: the same requestId returns the issue it created. */
|
|
1885
|
-
requestId: requestId.optional()
|
|
1910
|
+
requestId: requestId.optional(),
|
|
1911
|
+
/**
|
|
1912
|
+
* B-874d: the caller's todo id (`very-happy todo add --id U`). Stored as
|
|
1913
|
+
* `legacyTodoId`, so U keeps resolving wherever an issue id is accepted and
|
|
1914
|
+
* a second create with the same U returns that issue (404 `issue_todo_deleted`
|
|
1915
|
+
* once that issue is soft-deleted). Older servers strip it.
|
|
1916
|
+
*/
|
|
1917
|
+
legacyTodoId: id.optional()
|
|
1886
1918
|
});
|
|
1887
1919
|
z.z.object({
|
|
1888
1920
|
title: title.optional(),
|
|
@@ -1989,6 +2021,29 @@ z.z.object({
|
|
|
1989
2021
|
t: z.z.literal("issue-run"),
|
|
1990
2022
|
run: z.z.object({ id: z.z.string(), issueId: z.z.string(), status: z.z.string() }).passthrough()
|
|
1991
2023
|
});
|
|
2024
|
+
const ISSUE_ERROR_CODES = [
|
|
2025
|
+
"issues_disabled",
|
|
2026
|
+
"issue_not_found",
|
|
2027
|
+
"issue_version_conflict",
|
|
2028
|
+
"issue_count_quota_exceeded",
|
|
2029
|
+
"issue_status_forbidden",
|
|
2030
|
+
"issue_closed",
|
|
2031
|
+
"issue_comment_required",
|
|
2032
|
+
"issue_not_bound",
|
|
2033
|
+
"issue_run_not_current",
|
|
2034
|
+
"issue_assignee_unsupported",
|
|
2035
|
+
"issue_agent_unsupported",
|
|
2036
|
+
"issue_no_directory",
|
|
2037
|
+
"issue_machine_not_found",
|
|
2038
|
+
"issue_parent_cycle",
|
|
2039
|
+
"issue_project_not_found",
|
|
2040
|
+
"issue_comment_quota_exceeded",
|
|
2041
|
+
"issue_run_not_found",
|
|
2042
|
+
"issue_dispatch_claim_mismatch",
|
|
2043
|
+
"transaction_conflict",
|
|
2044
|
+
/** B-874d: create with the `legacyTodoId` of a soft-deleted issue (a deleted todo id is never reused). */
|
|
2045
|
+
"issue_todo_deleted"
|
|
2046
|
+
];
|
|
1992
2047
|
const SYNC_HELLO_MAX_REQUEST_SUBS = 64;
|
|
1993
2048
|
const sessionIdSchema = z__namespace.string().min(1).max(128);
|
|
1994
2049
|
const afterSeqSchema = z__namespace.number().int().min(0).nullable();
|
|
@@ -2123,6 +2178,17 @@ exports.CODEX_LIVE_PERMISSION_CAPABILITY = CODEX_LIVE_PERMISSION_CAPABILITY;
|
|
|
2123
2178
|
exports.CODEX_STEER_CAPABILITY = CODEX_STEER_CAPABILITY;
|
|
2124
2179
|
exports.EFFORT_INTENT_AUTO = EFFORT_INTENT_AUTO;
|
|
2125
2180
|
exports.HARNESS_INSTALL_CAPABILITY_VERSION = HARNESS_INSTALL_CAPABILITY_VERSION;
|
|
2181
|
+
exports.ISSUES_DISABLED_ERROR = ISSUES_DISABLED_ERROR;
|
|
2182
|
+
exports.ISSUE_AGENT_STATUSES = ISSUE_AGENT_STATUSES;
|
|
2183
|
+
exports.ISSUE_ASSIGNABLE_AGENTS = ISSUE_ASSIGNABLE_AGENTS;
|
|
2184
|
+
exports.ISSUE_DISPATCH_LOCAL_ID_PREFIX = ISSUE_DISPATCH_LOCAL_ID_PREFIX;
|
|
2185
|
+
exports.ISSUE_ERROR_CODES = ISSUE_ERROR_CODES;
|
|
2186
|
+
exports.ISSUE_LIMITS = ISSUE_LIMITS;
|
|
2187
|
+
exports.ISSUE_PRIORITIES = ISSUE_PRIORITIES;
|
|
2188
|
+
exports.ISSUE_SENT_FROM = ISSUE_SENT_FROM;
|
|
2189
|
+
exports.ISSUE_SESSION_CAPABILITY = ISSUE_SESSION_CAPABILITY;
|
|
2190
|
+
exports.ISSUE_STATUSES = ISSUE_STATUSES;
|
|
2191
|
+
exports.ISSUE_WORKER_VERSION = ISSUE_WORKER_VERSION;
|
|
2126
2192
|
exports.LATEST_MODEL_MODE = LATEST_MODEL_MODE;
|
|
2127
2193
|
exports.MODEL_INTENT_CONFIG = MODEL_INTENT_CONFIG;
|
|
2128
2194
|
exports.OwnerBoardListInputSchema = OwnerBoardListInputSchema;
|
|
@@ -2148,10 +2214,12 @@ exports.isAttentionBoardLocalId = isAttentionBoardLocalId;
|
|
|
2148
2214
|
exports.isAutomationRunTerminal = isAutomationRunTerminal;
|
|
2149
2215
|
exports.isHarnessInstallId = isHarnessInstallId;
|
|
2150
2216
|
exports.isInsideTeamWorktree = isInsideTeamWorktree;
|
|
2217
|
+
exports.isIssueClosed = isIssueClosed;
|
|
2151
2218
|
exports.isLatestModelMode = isLatestModelMode;
|
|
2152
2219
|
exports.nextRunIntents = nextRunIntents;
|
|
2153
2220
|
exports.normalizeAgentKey = normalizeAgentKey;
|
|
2154
2221
|
exports.ownerBoardPostToRest = ownerBoardPostToRest;
|
|
2222
|
+
exports.parseIssueRef = parseIssueRef;
|
|
2155
2223
|
exports.parseLatestModelTable = parseLatestModelTable;
|
|
2156
2224
|
exports.readEffortIntent = readEffortIntent;
|
|
2157
2225
|
exports.readModelIntent = readModelIntent;
|
|
@@ -2160,4 +2228,5 @@ exports.resolveLatestModel = resolveLatestModel;
|
|
|
2160
2228
|
exports.resolveLaunchAgentProfile = resolveLaunchAgentProfile;
|
|
2161
2229
|
exports.restoredEffort = restoredEffort;
|
|
2162
2230
|
exports.restoredModel = restoredModel;
|
|
2231
|
+
exports.sortBuiltinTodos = sortBuiltinTodos;
|
|
2163
2232
|
exports.streamKeyOf = streamKeyOf;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var query = require('./query-
|
|
3
|
+
var query = require('./query-Cwx4pv91.cjs');
|
|
4
4
|
var claudeAgentSdk = require('@anthropic-ai/claude-agent-sdk');
|
|
5
5
|
require('./promptCacheTtl-B8PCzE6k.cjs');
|
|
6
6
|
require('node:fs');
|
|
7
7
|
require('node:os');
|
|
8
8
|
require('node:path');
|
|
9
|
-
require('./logger-
|
|
9
|
+
require('./logger-Hyhy2boA.cjs');
|
|
10
10
|
require('chalk');
|
|
11
11
|
require('node:util');
|
|
12
|
-
require('./configuration-
|
|
13
|
-
require('./package-
|
|
12
|
+
require('./configuration-LWFmTxty.cjs');
|
|
13
|
+
require('./package-06cGlmeD.cjs');
|
|
14
14
|
require('node:fs/promises');
|
|
15
15
|
require('./processTreeSnapshot-D5iNblp6.cjs');
|
|
16
16
|
require('node:child_process');
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
var node_fs = require('node:fs');
|
|
4
4
|
var os = require('node:os');
|
|
5
|
-
var logger = require('./logger-
|
|
6
|
-
var persistence = require('./persistence-
|
|
5
|
+
var logger = require('./logger-Hyhy2boA.cjs');
|
|
6
|
+
var persistence = require('./persistence-_W9tE-bW.cjs');
|
|
7
7
|
var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
|
|
8
8
|
require('chalk');
|
|
9
9
|
require('node:util');
|
|
10
|
-
require('./configuration-
|
|
10
|
+
require('./configuration-LWFmTxty.cjs');
|
|
11
11
|
require('node:path');
|
|
12
|
-
require('./package-
|
|
12
|
+
require('./package-06cGlmeD.cjs');
|
|
13
13
|
require('node:fs/promises');
|
|
14
14
|
require('zod');
|
|
15
15
|
require('./authRelay-Dy1qU9td.cjs');
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { p as packageJson } from './package-
|
|
1
|
+
import { p as packageJson } from './package-DxE8PttX.mjs';
|
|
2
2
|
import module$1 from 'node:module';
|
|
3
3
|
import { existsSync } from 'node:fs';
|
|
4
4
|
import { readdir, rm } from 'node:fs/promises';
|
|
@@ -57,10 +57,10 @@ async function pruneStaleCompileCaches(happyHomeDir, cliVersion) {
|
|
|
57
57
|
async function run(args) {
|
|
58
58
|
enableCompileCacheIfPossible(packageJson.version);
|
|
59
59
|
if (isStandaloneVersionRequest(args) || isSelfCheckRequest(args)) {
|
|
60
|
-
const { selfCheckMain } = await import('./selfCheck-
|
|
60
|
+
const { selfCheckMain } = await import('./selfCheck-BmT9ihpR.mjs');
|
|
61
61
|
process.exit(await selfCheckMain({ verbose: isSelfCheckRequest(args) }));
|
|
62
62
|
}
|
|
63
|
-
const { main } = await import('./main-
|
|
63
|
+
const { main } = await import('./main-D1rk-68I.mjs');
|
|
64
64
|
await main();
|
|
65
65
|
}
|
|
66
66
|
void run(process.argv.slice(2));
|
|
@@ -1218,7 +1218,7 @@ This skill operates the user's account-synced My todos. External providers and a
|
|
|
1218
1218
|
|
|
1219
1219
|
Commands return JSON with serverUrl. A nonzero exit is an error; do not infer success from text generated by the agent.
|
|
1220
1220
|
|
|
1221
|
-
- \`very-happy todo list\`: read tasks including their id and version. Respect truncated/invalidCount; a partial or invalid list is not a complete account inventory.
|
|
1221
|
+
- \`very-happy todo list\`: read open and completed tasks (status open/done) including their id and version. Respect truncated/invalidCount; a partial or invalid list is not a complete account inventory.
|
|
1222
1222
|
- \`very-happy todo get ID\`: read the current task before editing or resolving a conflict.
|
|
1223
1223
|
- \`very-happy todo add --id UUID --title "Task" --note "Optional note"\`: generate one fresh UUID for this intended creation and retain it until the outcome is known. For example, Node can generate it with \`node -e "console.log(require('node:crypto').randomUUID())"\`.
|
|
1224
1224
|
- \`very-happy todo edit ID --version N --title "New title" --note "New note"\`: use the version you read; omit fields that should remain unchanged.
|
|
@@ -1233,9 +1233,13 @@ For add, retry with the same UUID and identical title/note after a timeout; do n
|
|
|
1233
1233
|
|
|
1234
1234
|
For edit/status/delete, a conflict means the version changed. Read the task and compare the new state with the user's request before deciding what to do; never automatically overwrite with a freshly fetched version. A timeout may have committed: read to reconcile, then report the confirmed result. Do not claim a delete succeeded merely because a request was sent.
|
|
1235
1235
|
|
|
1236
|
+
## Issues
|
|
1237
|
+
|
|
1238
|
+
On a server with Issues, My todos are issues without an assignee: the todo commands keep working on them (an ID may also be an issue key such as VH-12). Run \`very-happy issue --help\` for the full Issues interface (assign to an agent, comments). Without Issues the todo commands use the classic store; their output is the same.
|
|
1239
|
+
|
|
1236
1240
|
Restricted team workers cannot use account-wide Todo credentials. Ask the user or supervising session to perform the account operation; do not clear scope variables or seek another credential to bypass that boundary.
|
|
1237
1241
|
`;
|
|
1238
|
-
const BUILTIN_TODO_DISCOVERY = "For the user\u2019s Very Happy My todos, run `very-happy todo skill` to read the official skill, then use its CLI commands. Do not confuse account todos with your execution plan; restricted team workers must not bypass their scope.";
|
|
1242
|
+
const BUILTIN_TODO_DISCOVERY = "For the user\u2019s Very Happy My todos (and Issues: `very-happy issue --help`), run `very-happy todo skill` to read the official skill, then use its CLI commands. Do not confuse account todos with your execution plan; restricted team workers must not bypass their scope.";
|
|
1239
1243
|
z$1.object({
|
|
1240
1244
|
source: z$1.literal("pi"),
|
|
1241
1245
|
tokens: z$1.number().finite().nonnegative().nullable(),
|
|
@@ -1802,6 +1806,12 @@ function ownerBoardPostToRest(sessionId, input, anchor) {
|
|
|
1802
1806
|
inferred: false
|
|
1803
1807
|
};
|
|
1804
1808
|
}
|
|
1809
|
+
const ISSUE_SESSION_CAPABILITY = "issue-v1";
|
|
1810
|
+
const ISSUES_DISABLED_ERROR = "issues_disabled";
|
|
1811
|
+
const ISSUE_WORKER_VERSION = 1;
|
|
1812
|
+
const ISSUE_KEY_PREFIX = "VH";
|
|
1813
|
+
const ISSUE_DISPATCH_LOCAL_ID_PREFIX = "issue-";
|
|
1814
|
+
const ISSUE_SENT_FROM = "issue";
|
|
1805
1815
|
const ISSUE_LIMITS = {
|
|
1806
1816
|
titleChars: 300,
|
|
1807
1817
|
descriptionBytes: 32 * 1024,
|
|
@@ -1814,8 +1824,23 @@ const ISSUE_LIMITS = {
|
|
|
1814
1824
|
const ISSUE_STATUSES = ["backlog", "todo", "in_progress", "in_review", "blocked", "done", "cancelled"];
|
|
1815
1825
|
const ISSUE_PRIORITIES = ["urgent", "high", "medium", "low", "none"];
|
|
1816
1826
|
const ISSUE_AGENT_STATUSES = ["in_progress", "in_review", "blocked"];
|
|
1827
|
+
const ISSUE_CLOSED_STATUSES = ["done", "cancelled"];
|
|
1817
1828
|
const ISSUE_ASSIGNABLE_AGENTS = ["claude", "codex", "pi"];
|
|
1818
1829
|
const ISSUE_ASSIGNEE_KINDS = ["none", "self", "agent", "team"];
|
|
1830
|
+
function isIssueClosed(status) {
|
|
1831
|
+
return ISSUE_CLOSED_STATUSES.includes(status);
|
|
1832
|
+
}
|
|
1833
|
+
const ISSUE_KEY_PATTERN = new RegExp(`^${ISSUE_KEY_PREFIX}-(\\d{1,9})$`, "i");
|
|
1834
|
+
const UUIDISH = /^[A-Za-z0-9_-]{8,128}$/;
|
|
1835
|
+
function parseIssueRef(input) {
|
|
1836
|
+
const value = input.trim();
|
|
1837
|
+
const key2 = ISSUE_KEY_PATTERN.exec(value) ?? /^#?(\d{1,9})$/.exec(value);
|
|
1838
|
+
if (key2) {
|
|
1839
|
+
const n = Number(key2[1]);
|
|
1840
|
+
return n > 0 ? { number: n } : null;
|
|
1841
|
+
}
|
|
1842
|
+
return UUIDISH.test(value) ? { id: value } : null;
|
|
1843
|
+
}
|
|
1819
1844
|
const id = z$1.string().min(1).max(128);
|
|
1820
1845
|
const requestId = z$1.string().min(1).max(128);
|
|
1821
1846
|
const utf8Bytes = (value) => new TextEncoder().encode(value).length;
|
|
@@ -1862,7 +1887,14 @@ z$1.object({
|
|
|
1862
1887
|
dueAt: epochMs.nullable().optional(),
|
|
1863
1888
|
parentId: id.nullable().optional(),
|
|
1864
1889
|
/** Idempotency: the same requestId returns the issue it created. */
|
|
1865
|
-
requestId: requestId.optional()
|
|
1890
|
+
requestId: requestId.optional(),
|
|
1891
|
+
/**
|
|
1892
|
+
* B-874d: the caller's todo id (`very-happy todo add --id U`). Stored as
|
|
1893
|
+
* `legacyTodoId`, so U keeps resolving wherever an issue id is accepted and
|
|
1894
|
+
* a second create with the same U returns that issue (404 `issue_todo_deleted`
|
|
1895
|
+
* once that issue is soft-deleted). Older servers strip it.
|
|
1896
|
+
*/
|
|
1897
|
+
legacyTodoId: id.optional()
|
|
1866
1898
|
});
|
|
1867
1899
|
z$1.object({
|
|
1868
1900
|
title: title.optional(),
|
|
@@ -1969,6 +2001,29 @@ z$1.object({
|
|
|
1969
2001
|
t: z$1.literal("issue-run"),
|
|
1970
2002
|
run: z$1.object({ id: z$1.string(), issueId: z$1.string(), status: z$1.string() }).passthrough()
|
|
1971
2003
|
});
|
|
2004
|
+
const ISSUE_ERROR_CODES = [
|
|
2005
|
+
"issues_disabled",
|
|
2006
|
+
"issue_not_found",
|
|
2007
|
+
"issue_version_conflict",
|
|
2008
|
+
"issue_count_quota_exceeded",
|
|
2009
|
+
"issue_status_forbidden",
|
|
2010
|
+
"issue_closed",
|
|
2011
|
+
"issue_comment_required",
|
|
2012
|
+
"issue_not_bound",
|
|
2013
|
+
"issue_run_not_current",
|
|
2014
|
+
"issue_assignee_unsupported",
|
|
2015
|
+
"issue_agent_unsupported",
|
|
2016
|
+
"issue_no_directory",
|
|
2017
|
+
"issue_machine_not_found",
|
|
2018
|
+
"issue_parent_cycle",
|
|
2019
|
+
"issue_project_not_found",
|
|
2020
|
+
"issue_comment_quota_exceeded",
|
|
2021
|
+
"issue_run_not_found",
|
|
2022
|
+
"issue_dispatch_claim_mismatch",
|
|
2023
|
+
"transaction_conflict",
|
|
2024
|
+
/** B-874d: create with the `legacyTodoId` of a soft-deleted issue (a deleted todo id is never reused). */
|
|
2025
|
+
"issue_todo_deleted"
|
|
2026
|
+
];
|
|
1972
2027
|
const SYNC_HELLO_MAX_REQUEST_SUBS = 64;
|
|
1973
2028
|
const sessionIdSchema = z.string().min(1).max(128);
|
|
1974
2029
|
const afterSeqSchema = z.number().int().min(0).nullable();
|
|
@@ -2066,4 +2121,4 @@ z.object({
|
|
|
2066
2121
|
reason: z.string()
|
|
2067
2122
|
});
|
|
2068
2123
|
|
|
2069
|
-
export {
|
|
2124
|
+
export { AutomationActionSchema as $, AGENT_PROFILE_SESSION_CAPABILITY as A, parseLatestModelTable as B, CLAUDE_CONFIG_MODEL_CAPABILITY as C, resolveLaunchAgentProfile as D, createBuiltinTodoClient as E, ISSUE_LIMITS as F, sortBuiltinTodos as G, isIssueClosed as H, ISSUE_SESSION_CAPABILITY as I, BUILTIN_TODO_SKILL as J, BUILTIN_TODO_DISCOVERY as K, AGENT_PROFILE_FEATURE_LAUNCH as L, AgentProfileAddRequestSchema as M, AgentProfileLoginStartRequestSchema as N, AgentProfileLoginSubmitRequestSchema as O, PROMPT_QUEUE_CAPABILITY as P, AgentProfileBindRequestSchema as Q, RUN_INTENT_CAPABILITY as R, STREAM_DELTA_MAX_CHARS as S, getAgentCodeDefaults as T, isLatestModelMode as U, resolveLatestModel as V, LATEST_MODEL_MODE as W, EFFORT_INTENT_AUTO as X, normalizeAgentKey as Y, AutomationNameSchema as Z, AutomationConcurrencySchema as _, PROJECT_SESSION_CAPABILITY as a, AutomationTriggerSchema as a0, ISSUE_AGENT_STATUSES as a1, AgentProfilesStateSchema as a2, AgentVersionsSchema as a3, AGENT_VERSION_SOURCES as a4, PI_STEER_CAPABILITY as a5, ATTENTION_DISABLED_ERROR as a6, ATTENTION_LIMITS as a7, ownerBoardPostToRest as a8, isAttentionBoardLocalId as a9, OwnerBoardPostInputSchema as aa, OwnerBoardUpdateInputSchema as ab, OwnerBoardResolveInputSchema as ac, OwnerBoardListInputSchema as ad, ATTENTION_SESSION_CAPABILITY as ae, ReleaseDrainNoticeSchema as af, RelayAssignmentResponseSchema as ag, CODEX_STEER_CAPABILITY as ah, CODEX_COMPACT_CAPABILITY as ai, CODEX_BTW_CAPABILITY as aj, CODEX_LIVE_PERMISSION_CAPABILITY as ak, AGENT_PROFILE_RPC as al, RelayCandidatesResponseSchema as am, ServerMigrateNoticeSchema as an, isHarnessInstallId as ao, agentProfileUnavailableReason as ap, MODEL_INTENT_CONFIG as aq, AUTOMATION_PRECHECK_OUTPUT_MAX_CHARS as ar, AUTOMATION_PRECHECK_DEFAULT_TIMEOUT_MS as as, AUTOMATION_CLAIM_MAX_RUNS as at, AUTOMATION_DAEMON_CAPABILITY_PRECHECK as au, AUTOMATION_DEFAULT_LEASE_MS as av, ISSUE_SENT_FROM as aw, ISSUE_DISPATCH_LOCAL_ID_PREFIX as ax, HARNESS_INSTALL_CAPABILITY_VERSION as ay, restoredModel as b, AUTOMATION_NAME_PATTERN as c, AUTOMATION_PRECHECK_MAX_TIMEOUT_MS as d, AutomationPrecheckSchema as e, ISSUE_ASSIGNABLE_AGENTS as f, ISSUE_STATUSES as g, ISSUE_PRIORITIES as h, isAutomationRunTerminal as i, isInsideTeamWorktree as j, rebaseTeamWorktreePath as k, ISSUE_ERROR_CODES as l, ISSUES_DISABLED_ERROR as m, ISSUE_WORKER_VERSION as n, AUTOMATION_ATTENTION_REASON_MAX_CHARS as o, parseIssueRef as p, AUTOMATION_SUMMARY_MAX_CHARS as q, restoredEffort as r, streamKeyOf as s, createEnvelope as t, RUN_INTENT_RPC as u, RunIntentRequestSchema as v, nextRunIntents as w, readEffortIntent as x, readModelIntent as y, AGENT_PROFILE_KINDS as z };
|