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,229 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { f as ISSUE_ASSIGNABLE_AGENTS, p as parseIssueRef, g as ISSUE_STATUSES, h as ISSUE_PRIORITIES } from './index-CiRMvS73.mjs';
|
|
3
|
+
import { c as configuration } from './configuration-DhEqAYzz.mjs';
|
|
4
|
+
import { r as readSettings } from './persistence-CF7oV1oH.mjs';
|
|
5
|
+
import { r as readTeamScope, t as teamScopePath } from './context-UzqWaA7f.mjs';
|
|
6
|
+
import { s as sharedIssuesClient, i as importLegacyTodosOnce } from './client-CMUlpYcy.mjs';
|
|
7
|
+
import { d as describeIssueError, f as formatIssueLine, a as formatIssueDetail } from './format-BxGkJUki.mjs';
|
|
8
|
+
import 'zod';
|
|
9
|
+
import '@paralleldrive/cuid2';
|
|
10
|
+
import 'node:fs';
|
|
11
|
+
import 'node:os';
|
|
12
|
+
import 'node:path';
|
|
13
|
+
import './package-DxE8PttX.mjs';
|
|
14
|
+
import 'node:fs/promises';
|
|
15
|
+
import './authRelay-DhQhkBvX.mjs';
|
|
16
|
+
import 'tweetnacl';
|
|
17
|
+
import './logger-CFrzcRHD.mjs';
|
|
18
|
+
import 'chalk';
|
|
19
|
+
import 'node:util';
|
|
20
|
+
|
|
21
|
+
const ISSUE_HELP = `very-happy issue \u2014 account Issues (spec 2026-11-issues)
|
|
22
|
+
very-happy issue list [--status todo,in_progress] [--project ID] [--mine] [--unassigned] [--all] [--limit N] [--json]
|
|
23
|
+
very-happy issue show VH-N [--json]
|
|
24
|
+
very-happy issue create --title TEXT [--desc TEXT] [--assign AGENT[@MACHINE_ID]|self|none] [--dir PATH] [--mode M] [--model ID]
|
|
25
|
+
[--project ID] [--priority P] [--label L]... [--status S] [--json]
|
|
26
|
+
very-happy issue update VH-N [--status S] [--assign \u2026] [--dir PATH] [--mode M] [--model ID] [--title TEXT] [--desc TEXT]
|
|
27
|
+
[--priority P] [--label L]... [--project ID|none] [--comment TEXT] [--json]
|
|
28
|
+
very-happy issue comment VH-N TEXT [--mention AGENT[@MACHINE_ID]]... [--json]
|
|
29
|
+
|
|
30
|
+
AGENT is ${ISSUE_ASSIGNABLE_AGENTS.join(" | ")}; without @MACHINE_ID it runs on this machine.
|
|
31
|
+
Assigning an agent on a runnable status (todo / in_progress / in_review / blocked)
|
|
32
|
+
starts a run; backlog only records the assignee. A comment starting with /note
|
|
33
|
+
never wakes an agent.
|
|
34
|
+
|
|
35
|
+
Inside a Very Happy session (HAPPY_SESSION_ID set) update and comment act as the
|
|
36
|
+
agent on the issue this session works on: status only in_progress / in_review /
|
|
37
|
+
blocked (in_review and blocked need --comment), never done or cancelled; create
|
|
38
|
+
is not available. Use --title=TEXT for values starting with --.`;
|
|
39
|
+
const MULTI = /* @__PURE__ */ new Set(["--label", "--mention"]);
|
|
40
|
+
const BOOL = /* @__PURE__ */ new Set(["--json", "--mine", "--unassigned", "--all"]);
|
|
41
|
+
const ALLOWED = {
|
|
42
|
+
list: ["--status", "--project", "--mine", "--unassigned", "--all", "--limit", "--json"],
|
|
43
|
+
show: ["--json"],
|
|
44
|
+
create: ["--title", "--desc", "--assign", "--dir", "--mode", "--model", "--project", "--priority", "--label", "--status", "--json"],
|
|
45
|
+
update: ["--status", "--assign", "--dir", "--mode", "--model", "--title", "--desc", "--priority", "--label", "--project", "--comment", "--json"],
|
|
46
|
+
comment: ["--mention", "--json"]
|
|
47
|
+
};
|
|
48
|
+
function parseIssueArgs(args) {
|
|
49
|
+
if (args.length === 0 || args[0] === "--help" || args[0] === "help") return { action: "help", positional: [], flags: {}, multi: {}, bools: /* @__PURE__ */ new Set() };
|
|
50
|
+
const action = args[0];
|
|
51
|
+
if (!(action in ALLOWED)) throw new Error("Unknown issue command; use issue --help");
|
|
52
|
+
const cmd = { action, positional: [], flags: {}, multi: {}, bools: /* @__PURE__ */ new Set() };
|
|
53
|
+
if (args.includes("--help")) return { ...cmd, action: "help" };
|
|
54
|
+
for (let i = 1; i < args.length; i++) {
|
|
55
|
+
const arg = args[i];
|
|
56
|
+
if (!arg.startsWith("--")) {
|
|
57
|
+
cmd.positional.push(arg);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const eq = arg.indexOf("=");
|
|
61
|
+
const flag = eq === -1 ? arg : arg.slice(0, eq);
|
|
62
|
+
if (!ALLOWED[action].includes(flag)) throw new Error(`${flag} is not supported for issue ${action}`);
|
|
63
|
+
if (BOOL.has(flag)) {
|
|
64
|
+
if (eq !== -1) throw new Error(`${flag} takes no value`);
|
|
65
|
+
cmd.bools.add(flag);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const value = eq === -1 ? args[++i] : arg.slice(eq + 1);
|
|
69
|
+
if (value === void 0 || eq === -1 && value.startsWith("--")) throw new Error(`Missing value for ${flag}`);
|
|
70
|
+
if (MULTI.has(flag)) (cmd.multi[flag] ??= []).push(value);
|
|
71
|
+
else {
|
|
72
|
+
if (Object.hasOwn(cmd.flags, flag)) throw new Error(`Duplicate option: ${flag}`);
|
|
73
|
+
cmd.flags[flag] = value;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const wantRef = action === "show" || action === "update" || action === "comment";
|
|
77
|
+
if (wantRef && !cmd.positional[0]) throw new Error(`issue ${action} needs an issue (VH-N)`);
|
|
78
|
+
if (wantRef && !parseIssueRef(cmd.positional[0])) throw new Error(`Not an issue reference: ${cmd.positional[0]}`);
|
|
79
|
+
if (action === "comment" && cmd.positional.length !== 2) throw new Error("issue comment needs VH-N and one TEXT argument (quote it)");
|
|
80
|
+
if ((action === "show" || action === "update") && cmd.positional.length !== 1) throw new Error("Unexpected argument");
|
|
81
|
+
if ((action === "list" || action === "create") && cmd.positional.length) throw new Error("Unexpected argument");
|
|
82
|
+
if (action === "create" && !cmd.flags["--title"]?.trim()) throw new Error("create needs --title");
|
|
83
|
+
for (const f of ["--dir", "--mode", "--model"]) if (cmd.flags[f] !== void 0 && !cmd.flags["--assign"]) throw new Error(`${f} goes with --assign AGENT`);
|
|
84
|
+
for (const key of ["--status"]) if (cmd.flags[key] !== void 0 && action !== "list" && !ISSUE_STATUSES.includes(cmd.flags[key])) throw new Error(`Unknown status "${cmd.flags[key]}" (${ISSUE_STATUSES.join(", ")})`);
|
|
85
|
+
if (cmd.flags["--priority"] !== void 0 && !ISSUE_PRIORITIES.includes(cmd.flags["--priority"])) throw new Error(`Unknown priority (${ISSUE_PRIORITIES.join(", ")})`);
|
|
86
|
+
if (cmd.flags["--limit"] !== void 0 && !/^[1-9][0-9]{0,2}$/.test(cmd.flags["--limit"])) throw new Error("--limit must be 1\u2013500");
|
|
87
|
+
return cmd;
|
|
88
|
+
}
|
|
89
|
+
function parseAssign(value, localMachineId2, directory, run = {}) {
|
|
90
|
+
if (value === "self" || value === "none") return { kind: value };
|
|
91
|
+
const [agent, machine] = value.split("@", 2);
|
|
92
|
+
if (!ISSUE_ASSIGNABLE_AGENTS.includes(agent)) throw new Error(`Unknown agent "${agent}" (${ISSUE_ASSIGNABLE_AGENTS.join(", ")}, self, none)`);
|
|
93
|
+
const machineId = machine || localMachineId2;
|
|
94
|
+
if (!machineId) throw new Error("This machine has no id yet (start the daemon once), or pass AGENT@MACHINE_ID");
|
|
95
|
+
return {
|
|
96
|
+
kind: "agent",
|
|
97
|
+
agent,
|
|
98
|
+
machineId,
|
|
99
|
+
...directory ? { directory } : {},
|
|
100
|
+
...run.permissionMode ? { permissionMode: run.permissionMode } : {},
|
|
101
|
+
...run.model ? { model: run.model } : {}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function parseMention(value, localMachineId2) {
|
|
105
|
+
const [agent, machine] = value.split("@", 2);
|
|
106
|
+
if (!ISSUE_ASSIGNABLE_AGENTS.includes(agent)) throw new Error(`Unknown agent "${agent}" for --mention`);
|
|
107
|
+
return { kind: "agent", agent, ...machine ? { machineId: machine } : {} };
|
|
108
|
+
}
|
|
109
|
+
async function localMachineId() {
|
|
110
|
+
try {
|
|
111
|
+
return (await readSettings())?.machineId ?? null;
|
|
112
|
+
} catch {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function agentSessionId(env = process.env) {
|
|
117
|
+
const sid = env.HAPPY_SESSION_ID;
|
|
118
|
+
return sid && /^[A-Za-z0-9_-]{1,128}$/.test(sid) ? sid : null;
|
|
119
|
+
}
|
|
120
|
+
async function scoped(sessionId) {
|
|
121
|
+
if (process.env.VH_TEAM_SCOPE_FILE !== void 0) return true;
|
|
122
|
+
return !!sessionId && !!await readTeamScope(teamScopePath(sessionId));
|
|
123
|
+
}
|
|
124
|
+
function print(json, value, text) {
|
|
125
|
+
console.log(json ? JSON.stringify({ serverUrl: configuration.serverUrl, result: value }) : text);
|
|
126
|
+
}
|
|
127
|
+
async function runIssueCommand(cmd, deps = {}) {
|
|
128
|
+
if (cmd.action === "help") {
|
|
129
|
+
console.log(ISSUE_HELP);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const client = deps.client ?? sharedIssuesClient();
|
|
133
|
+
const json = cmd.bools.has("--json");
|
|
134
|
+
const sessionId = agentSessionId(deps.env ?? process.env);
|
|
135
|
+
const isScoped = await scoped(sessionId);
|
|
136
|
+
if (cmd.action === "update" || cmd.action === "comment") {
|
|
137
|
+
if (sessionId) {
|
|
138
|
+
const ctx = await client.session(sessionId);
|
|
139
|
+
const ref = parseIssueRef(cmd.positional[0]);
|
|
140
|
+
if (!ctx.issue || ("number" in ref ? ref.number !== ctx.issue.number : ref.id !== ctx.issue.id)) {
|
|
141
|
+
throw new Error("issue_not_bound: Inside a session you can only update or comment on the issue this session works on.");
|
|
142
|
+
}
|
|
143
|
+
if (cmd.action === "comment") {
|
|
144
|
+
if (cmd.multi["--mention"]?.length) throw new Error("--mention is for the owner; an agent comment never wakes another agent");
|
|
145
|
+
const result2 = await client.agentComment({ sessionId, body: cmd.positional[1], requestId: randomUUID() });
|
|
146
|
+
print(json, result2, `commented on ${result2.issue.key}`);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const extra = Object.keys(cmd.flags).filter((f) => f !== "--status" && f !== "--comment");
|
|
150
|
+
if (extra.length || cmd.multi["--label"]?.length) throw new Error(`Inside a session only --status and --comment can be changed (not ${[...extra, ...cmd.multi["--label"]?.length ? ["--label"] : []].join(", ")})`);
|
|
151
|
+
const result = await client.agentUpdate({ sessionId, requestId: randomUUID(), ...cmd.flags["--status"] ? { status: cmd.flags["--status"] } : {}, ...cmd.flags["--comment"] ? { comment: cmd.flags["--comment"] } : {} });
|
|
152
|
+
print(json, result, `${result.issue.key} is ${result.issue.status}`);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (isScoped && cmd.action !== "show") throw new Error("Scoped Teams sessions cannot access account Issues; ask the owner session.");
|
|
157
|
+
if (sessionId && cmd.action === "create") throw new Error("Agents cannot create issues; ask the owner.");
|
|
158
|
+
if (cmd.action === "list") {
|
|
159
|
+
if (!sessionId) await importLegacyTodosOnce(client);
|
|
160
|
+
const status = cmd.flags["--status"] ?? (cmd.bools.has("--all") ? void 0 : ISSUE_STATUSES.filter((s) => s !== "done" && s !== "cancelled").join(","));
|
|
161
|
+
const list = await client.list({
|
|
162
|
+
...status ? { status } : {},
|
|
163
|
+
...cmd.flags["--project"] ? { projectId: cmd.flags["--project"] } : {},
|
|
164
|
+
...cmd.bools.has("--mine") ? { assigneeKind: "self" } : cmd.bools.has("--unassigned") ? { assigneeKind: "none" } : {},
|
|
165
|
+
limit: cmd.flags["--limit"] ? Number(cmd.flags["--limit"]) : 100
|
|
166
|
+
});
|
|
167
|
+
print(json, list, list.issues.length ? list.issues.map(formatIssueLine).join("\n") : "no issues");
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (cmd.action === "show") {
|
|
171
|
+
if (isScoped) {
|
|
172
|
+
const ctx = sessionId ? await client.session(sessionId) : null;
|
|
173
|
+
const ref = parseIssueRef(cmd.positional[0]);
|
|
174
|
+
if (!ctx?.issue || ("number" in ref ? ref.number !== ctx.issue.number : ref.id !== ctx.issue.id)) throw new Error("Scoped Teams sessions can read only the issue they are working on.");
|
|
175
|
+
}
|
|
176
|
+
if (!sessionId) await importLegacyTodosOnce(client);
|
|
177
|
+
const detail = await client.get(cmd.positional[0]);
|
|
178
|
+
print(json, detail, formatIssueDetail({ issue: detail.issue, comments: detail.comments, runs: detail.runs }));
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const machine = await localMachineId();
|
|
182
|
+
if (cmd.action === "create") {
|
|
183
|
+
const input = {
|
|
184
|
+
title: cmd.flags["--title"].trim(),
|
|
185
|
+
requestId: randomUUID(),
|
|
186
|
+
...cmd.flags["--desc"] !== void 0 ? { description: cmd.flags["--desc"] } : {},
|
|
187
|
+
...cmd.flags["--assign"] ? { assignee: parseAssign(cmd.flags["--assign"], machine, cmd.flags["--dir"], { permissionMode: cmd.flags["--mode"], model: cmd.flags["--model"] }) } : {},
|
|
188
|
+
...cmd.flags["--project"] ? { projectId: cmd.flags["--project"] } : {},
|
|
189
|
+
...cmd.flags["--priority"] ? { priority: cmd.flags["--priority"] } : {},
|
|
190
|
+
...cmd.multi["--label"]?.length ? { labels: cmd.multi["--label"] } : {},
|
|
191
|
+
...cmd.flags["--status"] ? { status: cmd.flags["--status"] } : {}
|
|
192
|
+
};
|
|
193
|
+
const result = await client.create(input);
|
|
194
|
+
print(json, result, `created ${formatIssueLine(result.issue)}${result.runs?.length ? `
|
|
195
|
+
run #${result.runs[0].seq} queued on ${result.runs[0].agent}` : ""}`);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
const target = (await client.get(cmd.positional[0])).issue;
|
|
199
|
+
if (cmd.action === "comment") {
|
|
200
|
+
const mentions = (cmd.multi["--mention"] ?? []).map((m) => parseMention(m));
|
|
201
|
+
const result = await client.comment(target.id, { body: cmd.positional[1], requestId: randomUUID(), ...mentions.length ? { mentions } : {} });
|
|
202
|
+
print(json, result, `commented on ${result.issue.key}${result.comment?.routedRunIds.length ? " (delivered to the agent)" : ""}`);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const patch = {
|
|
206
|
+
...cmd.flags["--status"] ? { status: cmd.flags["--status"] } : {},
|
|
207
|
+
...cmd.flags["--assign"] ? { assignee: parseAssign(cmd.flags["--assign"], machine, cmd.flags["--dir"], { permissionMode: cmd.flags["--mode"], model: cmd.flags["--model"] }) } : {},
|
|
208
|
+
...cmd.flags["--title"] !== void 0 ? { title: cmd.flags["--title"].trim() } : {},
|
|
209
|
+
...cmd.flags["--desc"] !== void 0 ? { description: cmd.flags["--desc"] } : {},
|
|
210
|
+
...cmd.flags["--priority"] ? { priority: cmd.flags["--priority"] } : {},
|
|
211
|
+
...cmd.multi["--label"] ? { labels: cmd.multi["--label"] } : {},
|
|
212
|
+
...cmd.flags["--project"] ? { projectId: cmd.flags["--project"] === "none" ? null : cmd.flags["--project"] } : {}
|
|
213
|
+
};
|
|
214
|
+
let issue = target;
|
|
215
|
+
if (Object.keys(patch).length) issue = (await client.update(target.id, patch)).issue;
|
|
216
|
+
if (cmd.flags["--comment"]) await client.comment(target.id, { body: cmd.flags["--comment"], requestId: randomUUID() });
|
|
217
|
+
if (!Object.keys(patch).length && !cmd.flags["--comment"]) throw new Error("Nothing to update");
|
|
218
|
+
print(json, issue, `updated ${formatIssueLine(issue)}`);
|
|
219
|
+
}
|
|
220
|
+
async function handleIssueCommand(args) {
|
|
221
|
+
const cmd = parseIssueArgs(args);
|
|
222
|
+
try {
|
|
223
|
+
await runIssueCommand(cmd);
|
|
224
|
+
} catch (error) {
|
|
225
|
+
throw new Error(describeIssueError(error));
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export { ISSUE_HELP, agentSessionId, handleIssueCommand, parseAssign, parseIssueArgs, parseMention, runIssueCommand };
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var node_crypto = require('node:crypto');
|
|
4
|
+
var index = require('./index-44o_qMvE.cjs');
|
|
5
|
+
var configuration = require('./configuration-LWFmTxty.cjs');
|
|
6
|
+
var persistence = require('./persistence-_W9tE-bW.cjs');
|
|
7
|
+
var context = require('./context-BbZ18lX0.cjs');
|
|
8
|
+
var client = require('./client-DI8Rxsbw.cjs');
|
|
9
|
+
var format = require('./format-CgiY6uup.cjs');
|
|
10
|
+
require('zod');
|
|
11
|
+
require('@paralleldrive/cuid2');
|
|
12
|
+
require('node:fs');
|
|
13
|
+
require('node:os');
|
|
14
|
+
require('node:path');
|
|
15
|
+
require('./package-06cGlmeD.cjs');
|
|
16
|
+
require('node:fs/promises');
|
|
17
|
+
require('./authRelay-Dy1qU9td.cjs');
|
|
18
|
+
require('tweetnacl');
|
|
19
|
+
require('./logger-Hyhy2boA.cjs');
|
|
20
|
+
require('chalk');
|
|
21
|
+
require('node:util');
|
|
22
|
+
|
|
23
|
+
const ISSUE_HELP = `very-happy issue \u2014 account Issues (spec 2026-11-issues)
|
|
24
|
+
very-happy issue list [--status todo,in_progress] [--project ID] [--mine] [--unassigned] [--all] [--limit N] [--json]
|
|
25
|
+
very-happy issue show VH-N [--json]
|
|
26
|
+
very-happy issue create --title TEXT [--desc TEXT] [--assign AGENT[@MACHINE_ID]|self|none] [--dir PATH] [--mode M] [--model ID]
|
|
27
|
+
[--project ID] [--priority P] [--label L]... [--status S] [--json]
|
|
28
|
+
very-happy issue update VH-N [--status S] [--assign \u2026] [--dir PATH] [--mode M] [--model ID] [--title TEXT] [--desc TEXT]
|
|
29
|
+
[--priority P] [--label L]... [--project ID|none] [--comment TEXT] [--json]
|
|
30
|
+
very-happy issue comment VH-N TEXT [--mention AGENT[@MACHINE_ID]]... [--json]
|
|
31
|
+
|
|
32
|
+
AGENT is ${index.ISSUE_ASSIGNABLE_AGENTS.join(" | ")}; without @MACHINE_ID it runs on this machine.
|
|
33
|
+
Assigning an agent on a runnable status (todo / in_progress / in_review / blocked)
|
|
34
|
+
starts a run; backlog only records the assignee. A comment starting with /note
|
|
35
|
+
never wakes an agent.
|
|
36
|
+
|
|
37
|
+
Inside a Very Happy session (HAPPY_SESSION_ID set) update and comment act as the
|
|
38
|
+
agent on the issue this session works on: status only in_progress / in_review /
|
|
39
|
+
blocked (in_review and blocked need --comment), never done or cancelled; create
|
|
40
|
+
is not available. Use --title=TEXT for values starting with --.`;
|
|
41
|
+
const MULTI = /* @__PURE__ */ new Set(["--label", "--mention"]);
|
|
42
|
+
const BOOL = /* @__PURE__ */ new Set(["--json", "--mine", "--unassigned", "--all"]);
|
|
43
|
+
const ALLOWED = {
|
|
44
|
+
list: ["--status", "--project", "--mine", "--unassigned", "--all", "--limit", "--json"],
|
|
45
|
+
show: ["--json"],
|
|
46
|
+
create: ["--title", "--desc", "--assign", "--dir", "--mode", "--model", "--project", "--priority", "--label", "--status", "--json"],
|
|
47
|
+
update: ["--status", "--assign", "--dir", "--mode", "--model", "--title", "--desc", "--priority", "--label", "--project", "--comment", "--json"],
|
|
48
|
+
comment: ["--mention", "--json"]
|
|
49
|
+
};
|
|
50
|
+
function parseIssueArgs(args) {
|
|
51
|
+
if (args.length === 0 || args[0] === "--help" || args[0] === "help") return { action: "help", positional: [], flags: {}, multi: {}, bools: /* @__PURE__ */ new Set() };
|
|
52
|
+
const action = args[0];
|
|
53
|
+
if (!(action in ALLOWED)) throw new Error("Unknown issue command; use issue --help");
|
|
54
|
+
const cmd = { action, positional: [], flags: {}, multi: {}, bools: /* @__PURE__ */ new Set() };
|
|
55
|
+
if (args.includes("--help")) return { ...cmd, action: "help" };
|
|
56
|
+
for (let i = 1; i < args.length; i++) {
|
|
57
|
+
const arg = args[i];
|
|
58
|
+
if (!arg.startsWith("--")) {
|
|
59
|
+
cmd.positional.push(arg);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const eq = arg.indexOf("=");
|
|
63
|
+
const flag = eq === -1 ? arg : arg.slice(0, eq);
|
|
64
|
+
if (!ALLOWED[action].includes(flag)) throw new Error(`${flag} is not supported for issue ${action}`);
|
|
65
|
+
if (BOOL.has(flag)) {
|
|
66
|
+
if (eq !== -1) throw new Error(`${flag} takes no value`);
|
|
67
|
+
cmd.bools.add(flag);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const value = eq === -1 ? args[++i] : arg.slice(eq + 1);
|
|
71
|
+
if (value === void 0 || eq === -1 && value.startsWith("--")) throw new Error(`Missing value for ${flag}`);
|
|
72
|
+
if (MULTI.has(flag)) (cmd.multi[flag] ??= []).push(value);
|
|
73
|
+
else {
|
|
74
|
+
if (Object.hasOwn(cmd.flags, flag)) throw new Error(`Duplicate option: ${flag}`);
|
|
75
|
+
cmd.flags[flag] = value;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const wantRef = action === "show" || action === "update" || action === "comment";
|
|
79
|
+
if (wantRef && !cmd.positional[0]) throw new Error(`issue ${action} needs an issue (VH-N)`);
|
|
80
|
+
if (wantRef && !index.parseIssueRef(cmd.positional[0])) throw new Error(`Not an issue reference: ${cmd.positional[0]}`);
|
|
81
|
+
if (action === "comment" && cmd.positional.length !== 2) throw new Error("issue comment needs VH-N and one TEXT argument (quote it)");
|
|
82
|
+
if ((action === "show" || action === "update") && cmd.positional.length !== 1) throw new Error("Unexpected argument");
|
|
83
|
+
if ((action === "list" || action === "create") && cmd.positional.length) throw new Error("Unexpected argument");
|
|
84
|
+
if (action === "create" && !cmd.flags["--title"]?.trim()) throw new Error("create needs --title");
|
|
85
|
+
for (const f of ["--dir", "--mode", "--model"]) if (cmd.flags[f] !== void 0 && !cmd.flags["--assign"]) throw new Error(`${f} goes with --assign AGENT`);
|
|
86
|
+
for (const key of ["--status"]) if (cmd.flags[key] !== void 0 && action !== "list" && !index.ISSUE_STATUSES.includes(cmd.flags[key])) throw new Error(`Unknown status "${cmd.flags[key]}" (${index.ISSUE_STATUSES.join(", ")})`);
|
|
87
|
+
if (cmd.flags["--priority"] !== void 0 && !index.ISSUE_PRIORITIES.includes(cmd.flags["--priority"])) throw new Error(`Unknown priority (${index.ISSUE_PRIORITIES.join(", ")})`);
|
|
88
|
+
if (cmd.flags["--limit"] !== void 0 && !/^[1-9][0-9]{0,2}$/.test(cmd.flags["--limit"])) throw new Error("--limit must be 1\u2013500");
|
|
89
|
+
return cmd;
|
|
90
|
+
}
|
|
91
|
+
function parseAssign(value, localMachineId2, directory, run = {}) {
|
|
92
|
+
if (value === "self" || value === "none") return { kind: value };
|
|
93
|
+
const [agent, machine] = value.split("@", 2);
|
|
94
|
+
if (!index.ISSUE_ASSIGNABLE_AGENTS.includes(agent)) throw new Error(`Unknown agent "${agent}" (${index.ISSUE_ASSIGNABLE_AGENTS.join(", ")}, self, none)`);
|
|
95
|
+
const machineId = machine || localMachineId2;
|
|
96
|
+
if (!machineId) throw new Error("This machine has no id yet (start the daemon once), or pass AGENT@MACHINE_ID");
|
|
97
|
+
return {
|
|
98
|
+
kind: "agent",
|
|
99
|
+
agent,
|
|
100
|
+
machineId,
|
|
101
|
+
...directory ? { directory } : {},
|
|
102
|
+
...run.permissionMode ? { permissionMode: run.permissionMode } : {},
|
|
103
|
+
...run.model ? { model: run.model } : {}
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function parseMention(value, localMachineId2) {
|
|
107
|
+
const [agent, machine] = value.split("@", 2);
|
|
108
|
+
if (!index.ISSUE_ASSIGNABLE_AGENTS.includes(agent)) throw new Error(`Unknown agent "${agent}" for --mention`);
|
|
109
|
+
return { kind: "agent", agent, ...machine ? { machineId: machine } : {} };
|
|
110
|
+
}
|
|
111
|
+
async function localMachineId() {
|
|
112
|
+
try {
|
|
113
|
+
return (await persistence.readSettings())?.machineId ?? null;
|
|
114
|
+
} catch {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function agentSessionId(env = process.env) {
|
|
119
|
+
const sid = env.HAPPY_SESSION_ID;
|
|
120
|
+
return sid && /^[A-Za-z0-9_-]{1,128}$/.test(sid) ? sid : null;
|
|
121
|
+
}
|
|
122
|
+
async function scoped(sessionId) {
|
|
123
|
+
if (process.env.VH_TEAM_SCOPE_FILE !== void 0) return true;
|
|
124
|
+
return !!sessionId && !!await context.readTeamScope(context.teamScopePath(sessionId));
|
|
125
|
+
}
|
|
126
|
+
function print(json, value, text) {
|
|
127
|
+
console.log(json ? JSON.stringify({ serverUrl: configuration.configuration.serverUrl, result: value }) : text);
|
|
128
|
+
}
|
|
129
|
+
async function runIssueCommand(cmd, deps = {}) {
|
|
130
|
+
if (cmd.action === "help") {
|
|
131
|
+
console.log(ISSUE_HELP);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const client$1 = deps.client ?? client.sharedIssuesClient();
|
|
135
|
+
const json = cmd.bools.has("--json");
|
|
136
|
+
const sessionId = agentSessionId(deps.env ?? process.env);
|
|
137
|
+
const isScoped = await scoped(sessionId);
|
|
138
|
+
if (cmd.action === "update" || cmd.action === "comment") {
|
|
139
|
+
if (sessionId) {
|
|
140
|
+
const ctx = await client$1.session(sessionId);
|
|
141
|
+
const ref = index.parseIssueRef(cmd.positional[0]);
|
|
142
|
+
if (!ctx.issue || ("number" in ref ? ref.number !== ctx.issue.number : ref.id !== ctx.issue.id)) {
|
|
143
|
+
throw new Error("issue_not_bound: Inside a session you can only update or comment on the issue this session works on.");
|
|
144
|
+
}
|
|
145
|
+
if (cmd.action === "comment") {
|
|
146
|
+
if (cmd.multi["--mention"]?.length) throw new Error("--mention is for the owner; an agent comment never wakes another agent");
|
|
147
|
+
const result2 = await client$1.agentComment({ sessionId, body: cmd.positional[1], requestId: node_crypto.randomUUID() });
|
|
148
|
+
print(json, result2, `commented on ${result2.issue.key}`);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const extra = Object.keys(cmd.flags).filter((f) => f !== "--status" && f !== "--comment");
|
|
152
|
+
if (extra.length || cmd.multi["--label"]?.length) throw new Error(`Inside a session only --status and --comment can be changed (not ${[...extra, ...cmd.multi["--label"]?.length ? ["--label"] : []].join(", ")})`);
|
|
153
|
+
const result = await client$1.agentUpdate({ sessionId, requestId: node_crypto.randomUUID(), ...cmd.flags["--status"] ? { status: cmd.flags["--status"] } : {}, ...cmd.flags["--comment"] ? { comment: cmd.flags["--comment"] } : {} });
|
|
154
|
+
print(json, result, `${result.issue.key} is ${result.issue.status}`);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (isScoped && cmd.action !== "show") throw new Error("Scoped Teams sessions cannot access account Issues; ask the owner session.");
|
|
159
|
+
if (sessionId && cmd.action === "create") throw new Error("Agents cannot create issues; ask the owner.");
|
|
160
|
+
if (cmd.action === "list") {
|
|
161
|
+
if (!sessionId) await client.importLegacyTodosOnce(client$1);
|
|
162
|
+
const status = cmd.flags["--status"] ?? (cmd.bools.has("--all") ? void 0 : index.ISSUE_STATUSES.filter((s) => s !== "done" && s !== "cancelled").join(","));
|
|
163
|
+
const list = await client$1.list({
|
|
164
|
+
...status ? { status } : {},
|
|
165
|
+
...cmd.flags["--project"] ? { projectId: cmd.flags["--project"] } : {},
|
|
166
|
+
...cmd.bools.has("--mine") ? { assigneeKind: "self" } : cmd.bools.has("--unassigned") ? { assigneeKind: "none" } : {},
|
|
167
|
+
limit: cmd.flags["--limit"] ? Number(cmd.flags["--limit"]) : 100
|
|
168
|
+
});
|
|
169
|
+
print(json, list, list.issues.length ? list.issues.map(format.formatIssueLine).join("\n") : "no issues");
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (cmd.action === "show") {
|
|
173
|
+
if (isScoped) {
|
|
174
|
+
const ctx = sessionId ? await client$1.session(sessionId) : null;
|
|
175
|
+
const ref = index.parseIssueRef(cmd.positional[0]);
|
|
176
|
+
if (!ctx?.issue || ("number" in ref ? ref.number !== ctx.issue.number : ref.id !== ctx.issue.id)) throw new Error("Scoped Teams sessions can read only the issue they are working on.");
|
|
177
|
+
}
|
|
178
|
+
if (!sessionId) await client.importLegacyTodosOnce(client$1);
|
|
179
|
+
const detail = await client$1.get(cmd.positional[0]);
|
|
180
|
+
print(json, detail, format.formatIssueDetail({ issue: detail.issue, comments: detail.comments, runs: detail.runs }));
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const machine = await localMachineId();
|
|
184
|
+
if (cmd.action === "create") {
|
|
185
|
+
const input = {
|
|
186
|
+
title: cmd.flags["--title"].trim(),
|
|
187
|
+
requestId: node_crypto.randomUUID(),
|
|
188
|
+
...cmd.flags["--desc"] !== void 0 ? { description: cmd.flags["--desc"] } : {},
|
|
189
|
+
...cmd.flags["--assign"] ? { assignee: parseAssign(cmd.flags["--assign"], machine, cmd.flags["--dir"], { permissionMode: cmd.flags["--mode"], model: cmd.flags["--model"] }) } : {},
|
|
190
|
+
...cmd.flags["--project"] ? { projectId: cmd.flags["--project"] } : {},
|
|
191
|
+
...cmd.flags["--priority"] ? { priority: cmd.flags["--priority"] } : {},
|
|
192
|
+
...cmd.multi["--label"]?.length ? { labels: cmd.multi["--label"] } : {},
|
|
193
|
+
...cmd.flags["--status"] ? { status: cmd.flags["--status"] } : {}
|
|
194
|
+
};
|
|
195
|
+
const result = await client$1.create(input);
|
|
196
|
+
print(json, result, `created ${format.formatIssueLine(result.issue)}${result.runs?.length ? `
|
|
197
|
+
run #${result.runs[0].seq} queued on ${result.runs[0].agent}` : ""}`);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const target = (await client$1.get(cmd.positional[0])).issue;
|
|
201
|
+
if (cmd.action === "comment") {
|
|
202
|
+
const mentions = (cmd.multi["--mention"] ?? []).map((m) => parseMention(m));
|
|
203
|
+
const result = await client$1.comment(target.id, { body: cmd.positional[1], requestId: node_crypto.randomUUID(), ...mentions.length ? { mentions } : {} });
|
|
204
|
+
print(json, result, `commented on ${result.issue.key}${result.comment?.routedRunIds.length ? " (delivered to the agent)" : ""}`);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const patch = {
|
|
208
|
+
...cmd.flags["--status"] ? { status: cmd.flags["--status"] } : {},
|
|
209
|
+
...cmd.flags["--assign"] ? { assignee: parseAssign(cmd.flags["--assign"], machine, cmd.flags["--dir"], { permissionMode: cmd.flags["--mode"], model: cmd.flags["--model"] }) } : {},
|
|
210
|
+
...cmd.flags["--title"] !== void 0 ? { title: cmd.flags["--title"].trim() } : {},
|
|
211
|
+
...cmd.flags["--desc"] !== void 0 ? { description: cmd.flags["--desc"] } : {},
|
|
212
|
+
...cmd.flags["--priority"] ? { priority: cmd.flags["--priority"] } : {},
|
|
213
|
+
...cmd.multi["--label"] ? { labels: cmd.multi["--label"] } : {},
|
|
214
|
+
...cmd.flags["--project"] ? { projectId: cmd.flags["--project"] === "none" ? null : cmd.flags["--project"] } : {}
|
|
215
|
+
};
|
|
216
|
+
let issue = target;
|
|
217
|
+
if (Object.keys(patch).length) issue = (await client$1.update(target.id, patch)).issue;
|
|
218
|
+
if (cmd.flags["--comment"]) await client$1.comment(target.id, { body: cmd.flags["--comment"], requestId: node_crypto.randomUUID() });
|
|
219
|
+
if (!Object.keys(patch).length && !cmd.flags["--comment"]) throw new Error("Nothing to update");
|
|
220
|
+
print(json, issue, `updated ${format.formatIssueLine(issue)}`);
|
|
221
|
+
}
|
|
222
|
+
async function handleIssueCommand(args) {
|
|
223
|
+
const cmd = parseIssueArgs(args);
|
|
224
|
+
try {
|
|
225
|
+
await runIssueCommand(cmd);
|
|
226
|
+
} catch (error) {
|
|
227
|
+
throw new Error(format.describeIssueError(error));
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
exports.ISSUE_HELP = ISSUE_HELP;
|
|
232
|
+
exports.agentSessionId = agentSessionId;
|
|
233
|
+
exports.handleIssueCommand = handleIssueCommand;
|
|
234
|
+
exports.parseAssign = parseAssign;
|
|
235
|
+
exports.parseIssueArgs = parseIssueArgs;
|
|
236
|
+
exports.parseMention = parseMention;
|
|
237
|
+
exports.runIssueCommand = runIssueCommand;
|
package/dist/lib.cjs
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var api = require('./api-
|
|
4
|
-
var logger = require('./logger-
|
|
5
|
-
var configuration = require('./configuration-
|
|
3
|
+
var api = require('./api-KVVs-GkM.cjs');
|
|
4
|
+
var logger = require('./logger-Hyhy2boA.cjs');
|
|
5
|
+
var configuration = require('./configuration-LWFmTxty.cjs');
|
|
6
6
|
var types = require('./types-CRS-srZK.cjs');
|
|
7
7
|
require('axios');
|
|
8
|
-
require('./pushNotifications-
|
|
8
|
+
require('./pushNotifications-DdzTbrA3.cjs');
|
|
9
9
|
require('node:crypto');
|
|
10
10
|
require('zod');
|
|
11
|
-
require('./index-
|
|
11
|
+
require('./index-44o_qMvE.cjs');
|
|
12
12
|
require('@paralleldrive/cuid2');
|
|
13
13
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
14
|
-
require('./reconnectGate-
|
|
14
|
+
require('./reconnectGate-DeDhtQJW.cjs');
|
|
15
15
|
require('./authRelay-Dy1qU9td.cjs');
|
|
16
16
|
require('tweetnacl');
|
|
17
17
|
require('os');
|
|
@@ -19,8 +19,8 @@ require('child_process');
|
|
|
19
19
|
require('node:events');
|
|
20
20
|
require('socket.io-client');
|
|
21
21
|
require('./limits-C-a7gr04.cjs');
|
|
22
|
-
require('./time-
|
|
23
|
-
require('./registerCommonHandlers-
|
|
22
|
+
require('./time-CDBZWYDb.cjs');
|
|
23
|
+
require('./registerCommonHandlers-BrEtSwNk.cjs');
|
|
24
24
|
require('util');
|
|
25
25
|
require('fs/promises');
|
|
26
26
|
require('crypto');
|
|
@@ -28,17 +28,17 @@ require('path');
|
|
|
28
28
|
require('cross-spawn');
|
|
29
29
|
require('./projectPath-C3ioB4Bu.cjs');
|
|
30
30
|
require('url');
|
|
31
|
-
require('./sync-
|
|
31
|
+
require('./sync-C764ZzE6.cjs');
|
|
32
32
|
require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
33
|
-
require('./controlClient-
|
|
34
|
-
require('./persistence-
|
|
33
|
+
require('./controlClient-TVMpETsR.cjs');
|
|
34
|
+
require('./persistence-_W9tE-bW.cjs');
|
|
35
35
|
require('node:fs/promises');
|
|
36
36
|
require('node:fs');
|
|
37
37
|
require('chalk');
|
|
38
38
|
require('node:util');
|
|
39
39
|
require('node:path');
|
|
40
40
|
require('node:os');
|
|
41
|
-
require('./package-
|
|
41
|
+
require('./package-06cGlmeD.cjs');
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
|
package/dist/lib.d.cts
CHANGED
|
@@ -881,6 +881,12 @@ type FileEventMessage = z$1.infer<typeof FileEventMessageSchema>;
|
|
|
881
881
|
type Metadata = {
|
|
882
882
|
/** Durable Teams spawn correlation; never contains credentials. */
|
|
883
883
|
teamOperationId?: string;
|
|
884
|
+
/** B-874: the issue run this session executes (display only; the server's run table is authoritative). */
|
|
885
|
+
issue?: {
|
|
886
|
+
id: string;
|
|
887
|
+
runId?: string;
|
|
888
|
+
key?: string;
|
|
889
|
+
};
|
|
884
890
|
/**
|
|
885
891
|
* ACP session config option value (normalized for UI metadata consumers).
|
|
886
892
|
*/
|
|
@@ -1900,6 +1906,7 @@ type SpawnSessionResult = {
|
|
|
1900
1906
|
type: 'error';
|
|
1901
1907
|
errorMessage: string;
|
|
1902
1908
|
startupExit?: StartupExit;
|
|
1909
|
+
notStarted?: true;
|
|
1903
1910
|
};
|
|
1904
1911
|
|
|
1905
1912
|
/**
|
package/dist/lib.d.mts
CHANGED
|
@@ -881,6 +881,12 @@ type FileEventMessage = z$1.infer<typeof FileEventMessageSchema>;
|
|
|
881
881
|
type Metadata = {
|
|
882
882
|
/** Durable Teams spawn correlation; never contains credentials. */
|
|
883
883
|
teamOperationId?: string;
|
|
884
|
+
/** B-874: the issue run this session executes (display only; the server's run table is authoritative). */
|
|
885
|
+
issue?: {
|
|
886
|
+
id: string;
|
|
887
|
+
runId?: string;
|
|
888
|
+
key?: string;
|
|
889
|
+
};
|
|
884
890
|
/**
|
|
885
891
|
* ACP session config option value (normalized for UI metadata consumers).
|
|
886
892
|
*/
|
|
@@ -1900,6 +1906,7 @@ type SpawnSessionResult = {
|
|
|
1900
1906
|
type: 'error';
|
|
1901
1907
|
errorMessage: string;
|
|
1902
1908
|
startupExit?: StartupExit;
|
|
1909
|
+
notStarted?: true;
|
|
1903
1910
|
};
|
|
1904
1911
|
|
|
1905
1912
|
/**
|
package/dist/lib.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export { A as ApiClient, a as ApiSessionClient } from './api-
|
|
2
|
-
export { l as logger } from './logger-
|
|
3
|
-
export { c as configuration } from './configuration-
|
|
1
|
+
export { A as ApiClient, a as ApiSessionClient } from './api-1CD4oRSW.mjs';
|
|
2
|
+
export { l as logger } from './logger-CFrzcRHD.mjs';
|
|
3
|
+
export { c as configuration } from './configuration-DhEqAYzz.mjs';
|
|
4
4
|
export { R as RawJSONLinesSchema } from './types-CkqAACXx.mjs';
|
|
5
5
|
import 'axios';
|
|
6
|
-
import './pushNotifications-
|
|
6
|
+
import './pushNotifications-CxX10K6n.mjs';
|
|
7
7
|
import 'node:crypto';
|
|
8
8
|
import 'zod';
|
|
9
|
-
import './index-
|
|
9
|
+
import './index-CiRMvS73.mjs';
|
|
10
10
|
import '@paralleldrive/cuid2';
|
|
11
11
|
import './contentLogMetadata-BlWI0egu.mjs';
|
|
12
|
-
import './reconnectGate-
|
|
12
|
+
import './reconnectGate-uTLj82tS.mjs';
|
|
13
13
|
import './authRelay-DhQhkBvX.mjs';
|
|
14
14
|
import 'tweetnacl';
|
|
15
15
|
import 'os';
|
|
@@ -17,8 +17,8 @@ import 'child_process';
|
|
|
17
17
|
import 'node:events';
|
|
18
18
|
import 'socket.io-client';
|
|
19
19
|
import './limits-DIo7rEBR.mjs';
|
|
20
|
-
import './time-
|
|
21
|
-
import './registerCommonHandlers-
|
|
20
|
+
import './time-DJF2csbV.mjs';
|
|
21
|
+
import './registerCommonHandlers-BYrmi-A4.mjs';
|
|
22
22
|
import 'util';
|
|
23
23
|
import 'fs/promises';
|
|
24
24
|
import 'crypto';
|
|
@@ -26,14 +26,14 @@ import 'path';
|
|
|
26
26
|
import 'cross-spawn';
|
|
27
27
|
import './projectPath-BTBIMB57.mjs';
|
|
28
28
|
import 'url';
|
|
29
|
-
import './sync-
|
|
29
|
+
import './sync-CcBrziWp.mjs';
|
|
30
30
|
import './backgroundTaskActivity-8PdPxrvy.mjs';
|
|
31
|
-
import './controlClient-
|
|
32
|
-
import './persistence-
|
|
31
|
+
import './controlClient-PaIiDxM6.mjs';
|
|
32
|
+
import './persistence-CF7oV1oH.mjs';
|
|
33
33
|
import 'node:fs/promises';
|
|
34
34
|
import 'node:fs';
|
|
35
35
|
import 'chalk';
|
|
36
36
|
import 'node:util';
|
|
37
37
|
import 'node:path';
|
|
38
38
|
import 'node:os';
|
|
39
|
-
import './package-
|
|
39
|
+
import './package-DxE8PttX.mjs';
|
|
@@ -6,7 +6,7 @@ var path = require('node:path');
|
|
|
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-
|
|
9
|
+
var configuration = require('./configuration-LWFmTxty.cjs');
|
|
10
10
|
|
|
11
11
|
const AgentCredentialsSchema = z.z.object({
|
|
12
12
|
token: z.z.string().min(1),
|
|
@@ -4,7 +4,7 @@ import { join } from 'node:path';
|
|
|
4
4
|
import tweetnacl from 'tweetnacl';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import { c as credentialRelayProblem, d as decodeBase64 } from './authRelay-DhQhkBvX.mjs';
|
|
7
|
-
import { c as configuration } from './configuration-
|
|
7
|
+
import { c as configuration } from './configuration-DhEqAYzz.mjs';
|
|
8
8
|
|
|
9
9
|
const AgentCredentialsSchema = z.object({
|
|
10
10
|
token: z.string().min(1),
|