very-happy-cli 0.2.198 → 0.2.200
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-Bm3EodAb.mjs → AcpBackend-Cnp6WNn8.mjs} +3 -3
- package/dist/{AcpBackend-DOuWeCAx.cjs → AcpBackend-CwSShYPI.cjs} +3 -3
- package/dist/{AcpSessionManager-BiwuXpbx.mjs → AcpSessionManager-C4O3jhT_.mjs} +2 -2
- package/dist/{AcpSessionManager-DvsZWTXp.cjs → AcpSessionManager-DqW99tOL.cjs} +2 -2
- package/dist/{BasePermissionHandler-1QcavYFn.mjs → BasePermissionHandler-8Msj0Z8j.mjs} +1 -1
- package/dist/{BasePermissionHandler-25RmI4dK.cjs → BasePermissionHandler-CgqjIUyG.cjs} +1 -1
- package/dist/{account-DA4mbX3-.mjs → account-BIxPuBEs.mjs} +11 -11
- package/dist/{account-ChUtFYld.cjs → account-DcNh2_SN.cjs} +11 -11
- package/dist/{accountService-BWUjgHl0.cjs → accountService-BDJo14mY.cjs} +4 -4
- package/dist/{accountService-D7NZrnQd.mjs → accountService-ELazcp3V.mjs} +4 -4
- package/dist/{acpSessionResume-CeQu84Ol.cjs → acpSessionResume-B_W8uTI6.cjs} +1 -1
- package/dist/{acpSessionResume-D6YgeofW.mjs → acpSessionResume-De_sTG30.mjs} +1 -1
- package/dist/{agentHome-DM6mC64c.mjs → agentHome-C-900jC1.mjs} +4 -4
- package/dist/{agentHome-DevJCRG9.cjs → agentHome-C-usjJwB.cjs} +4 -4
- package/dist/{api-te19Pzi3.cjs → api-BPWRzeNF.cjs} +16 -10
- package/dist/{api-oceym3w6.mjs → api-DCUiAds-.mjs} +16 -10
- package/dist/{apiMachine-DCHsqtFQ.mjs → apiMachine-CJl4m3V3.mjs} +18 -18
- package/dist/{apiMachine-BjhCXg6C.cjs → apiMachine-DjhbA1rL.cjs} +18 -18
- package/dist/{attachmentContent-Dl29U1v1.mjs → attachmentContent-BKIq6EXR.mjs} +2 -2
- package/dist/{attachmentContent-BfCEgPTP.cjs → attachmentContent-C2f1UEP9.cjs} +2 -2
- package/dist/{auth-BIkCWkRV.mjs → auth-8jKFCZOX.mjs} +5 -5
- package/dist/{auth-SshU0tNW.cjs → auth-h6oU63Ni.cjs} +8 -8
- package/dist/{auth-SH0o7ue7.cjs → auth-oAnLi4Tl.cjs} +5 -5
- package/dist/{auth-BJ8Tej9L.mjs → auth-uLRHXOGY.mjs} +8 -8
- package/dist/{auto-Bdr4sSJk.mjs → auto-A5arQ-bI.mjs} +17 -17
- package/dist/{auto-t1B1Yzb3.cjs → auto-Bpa5iA1A.cjs} +17 -17
- package/dist/{bootstrap-D8DYLUId.mjs → bootstrap-BkLFgEGF.mjs} +2 -2
- package/dist/{bootstrap-GZDknvPy.cjs → bootstrap-DUKAKxrJ.cjs} +2 -2
- package/dist/{browser-C-H3QYV2.mjs → browser-BAlw0rns.mjs} +1 -1
- package/dist/{browser-DwCi-9Ya.cjs → browser-Ds-N-Dup.cjs} +1 -1
- package/dist/{claudeAccountEnv-DmVbGhZb.mjs → claudeAccountEnv-CI8RlIB9.mjs} +1 -1
- package/dist/{claudeAccountEnv-DSaFKajJ.cjs → claudeAccountEnv-D33xXRE7.cjs} +1 -1
- package/dist/{claudeLocal-Ck1jTve1.cjs → claudeLocal-BbsOT-EF.cjs} +5 -5
- package/dist/{claudeLocal-BiM2x9DJ.mjs → claudeLocal-X48n0RhP.mjs} +5 -5
- package/dist/{claudeLocalLauncher-DzvM0jBo.mjs → claudeLocalLauncher-D18gRtxz.mjs} +10 -10
- package/dist/{claudeLocalLauncher-Jsupvl4V.cjs → claudeLocalLauncher-D1jS3iK4.cjs} +10 -10
- package/dist/{claudeSessionFork-CDTbQmYi.cjs → claudeSessionFork-Bkxn40Y8.cjs} +1 -1
- package/dist/{claudeSessionFork-D-BhXkRa.mjs → claudeSessionFork-n1vMiFcP.mjs} +1 -1
- package/dist/client-1zIbVVX5.cjs +120 -0
- package/dist/{client-BRuFIwki.mjs → client-BXwIqRha.mjs} +2 -2
- package/dist/client-BgxQ9aej.mjs +114 -0
- package/dist/{client-CISkP897.mjs → client-Blpuk2Hr.mjs} +2 -2
- package/dist/{client-D-HEr922.cjs → client-BnoN4P4t.cjs} +2 -2
- package/dist/{client-E4kW5qjR.mjs → client-C0qjAgZ_.mjs} +4 -4
- package/dist/{client-v6rdLsBH.cjs → client-C8BTmcrh.cjs} +4 -4
- package/dist/{client-oqSAKwmy.cjs → client-D0_UOmC1.cjs} +2 -2
- package/dist/codex/happyMcpStdioBridge.cjs +25 -16
- package/dist/codex/happyMcpStdioBridge.mjs +25 -16
- package/dist/{codexAccount-CnbDfCOM.mjs → codexAccount-BAezf1fY.mjs} +1 -1
- package/dist/{codexAccount-CQ4W1Ax8.cjs → codexAccount-DfeCHUOU.cjs} +1 -1
- package/dist/{codexAppServerClient-BLasFGTm.mjs → codexAppServerClient-By4ntTIr.mjs} +3 -3
- package/dist/{codexAppServerClient--K-ILfqM.cjs → codexAppServerClient-xBeqblCj.cjs} +3 -3
- package/dist/{codexCommand-Wv1WVNtM.mjs → codexCommand-C7BVsmPu.mjs} +58 -47
- package/dist/{codexCommand-M1uNblJx.cjs → codexCommand-CgzJe-Ti.cjs} +62 -51
- package/dist/{codexTermination-DigTBSJE.mjs → codexTermination-BS0sLBKS.mjs} +1 -1
- package/dist/{codexTermination-BumRIUqm.cjs → codexTermination-DVrdQx3Q.cjs} +1 -1
- package/dist/{config-Czs0Tucv.cjs → config-4R0rnthZ.cjs} +3 -3
- package/dist/{config-Br2fCFwB.mjs → config-D3jidXDu.mjs} +3 -3
- package/dist/{configuration-JBFF7432.mjs → configuration-4pG95tsq.mjs} +1 -1
- package/dist/{configuration-DfRs3WLd.cjs → configuration-ClUt7pqs.cjs} +1 -1
- package/dist/{connect-Cr--b0yl.cjs → connect-Da2NQJ3K.cjs} +13 -13
- package/dist/{connect-CbCqv-MV.mjs → connect-Do5qcqmg.mjs} +13 -13
- package/dist/{context-DLIjT5qU.mjs → context-Cf05DtNM.mjs} +1 -1
- package/dist/{context-C5WWlHOl.cjs → context-wMsIGwBw.cjs} +1 -1
- package/dist/{controlClient-B61crTpk.cjs → controlClient-SYDFcIkk.cjs} +3 -3
- package/dist/{controlClient-D5BYm3PU.mjs → controlClient-bqCKl9Nv.mjs} +3 -3
- package/dist/{createSessionMetadata-OMKj3e48.mjs → createSessionMetadata-CQkxe_4T.mjs} +3 -2
- package/dist/{createSessionMetadata-BwYysMTH.cjs → createSessionMetadata-msQTEvvn.cjs} +3 -2
- package/dist/{daemonAccounts-asWvoPKG.mjs → daemonAccounts-B8xnkprW.mjs} +3 -3
- package/dist/{daemonAccounts-CqAnPXDJ.cjs → daemonAccounts-Ch_rSTSX.cjs} +2 -2
- package/dist/{defaultPermissionMode-BItpIZML.cjs → defaultPermissionMode-BETWd5Lf.cjs} +1 -1
- package/dist/{defaultPermissionMode-4KYZA4WF.mjs → defaultPermissionMode-Cl3OvdHp.mjs} +1 -1
- package/dist/{deterministicJson-DnTSkEgb.mjs → deterministicJson-BRAeReBK.mjs} +67 -17
- package/dist/{deterministicJson-DIzyb1dQ.cjs → deterministicJson-CQ8jkArF.cjs} +72 -22
- package/dist/{doctor-Dn1G6QhF.cjs → doctor-C9D-t20z.cjs} +7 -7
- package/dist/{doctor-jrvm-tl3.mjs → doctor-Dy7z3qvy.mjs} +7 -7
- package/dist/{downloadTarget-DGnCGrDZ.cjs → downloadTarget-DfoOSrYi.cjs} +6 -6
- package/dist/{downloadTarget-BtsN_-LN.mjs → downloadTarget-Diq-GBu4.mjs} +6 -6
- package/dist/{ensureDaemonRunning-DsvcjXb4.cjs → ensureDaemonRunning-Df76EtKd.cjs} +5 -5
- package/dist/{ensureDaemonRunning-DCmXUwNi.mjs → ensureDaemonRunning-LqrgqVG3.mjs} +5 -5
- package/dist/format-CbliQN8V.mjs +70 -0
- package/dist/format-P9_M_7ga.cjs +74 -0
- package/dist/{handleResumeCommand-hzho-lp7.cjs → handleResumeCommand-CjCtwrrm.cjs} +5 -5
- package/dist/{handleResumeCommand-CFupxyHT.mjs → handleResumeCommand-Dz4Aw_aZ.mjs} +5 -5
- package/dist/{index-BMFLwBCd.mjs → index-BNBXrqRE.mjs} +4 -4
- package/dist/{index-BknTkVnR.cjs → index-BiutHOAO.cjs} +62 -1
- package/dist/{index-CRI-_-YH.cjs → index-ByBOdEvG.cjs} +48 -44
- package/dist/{index-DCfEzudP.cjs → index-CbzettaI.cjs} +4 -4
- package/dist/{index-5TDKOvkU.cjs → index-CdOnhx2X.cjs} +4 -4
- package/dist/{index-CHk8F9OY.mjs → index-CjMA70-R.mjs} +47 -43
- package/dist/{index-EGwuuFdL.cjs → index-DUwOmhnq.cjs} +3 -3
- package/dist/{index-CZpFhEmE.mjs → index-Sdvy1Lsf.mjs} +3 -3
- package/dist/{index-CofTgtQ3.mjs → index-XP-qcJQ3.mjs} +4 -4
- package/dist/{index-CxiisoO1.mjs → index-kwsivEs-.mjs} +49 -2
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-CB5eTmzm.cjs → install-C4dKrmxR.cjs} +3 -3
- package/dist/{install-CeDqNGxI.mjs → install-DMXd8Z4c.mjs} +3 -3
- package/dist/issue-BijeNKIT.cjs +237 -0
- package/dist/issue-COytLvGE.mjs +229 -0
- package/dist/lib.cjs +12 -12
- package/dist/lib.d.cts +6 -0
- package/dist/lib.d.mts +6 -0
- package/dist/lib.mjs +12 -12
- package/dist/{localHappyAgentAuth-B6xdH-Fr.cjs → localHappyAgentAuth-CjtNcaI0.cjs} +1 -1
- package/dist/{localHappyAgentAuth-BiIyMoiG.mjs → localHappyAgentAuth-DeDQjw24.mjs} +1 -1
- package/dist/{logger-BHfBDOsy.mjs → logger-BLMi8oJK.mjs} +2 -2
- package/dist/{logger-BrAF4iuT.cjs → logger-D28MY1Bv.cjs} +2 -2
- package/dist/{machineMetadata-D5PO2ylb.cjs → machineMetadata-BzjrIn_N.cjs} +3 -3
- package/dist/{machineMetadata-Ekniv5o4.mjs → machineMetadata-D8OWVD4l.mjs} +3 -3
- package/dist/{main-C8lsRSYS.cjs → main-DoJIcSOh.cjs} +57 -47
- package/dist/{main-HXdcnexS.mjs → main-c0fCuBON.mjs} +57 -47
- package/dist/{mcp-D9sglL02.cjs → mcp-CEtvR6tG.cjs} +18 -18
- package/dist/{mcp-C2YD6mq4.mjs → mcp-DKkBFGUa.mjs} +18 -18
- package/dist/{mirrorProtocol-CNF1eHsm.cjs → mirrorProtocol-CCl9dtzh.cjs} +3 -3
- package/dist/{mirrorProtocol-BLhArCS9.mjs → mirrorProtocol-DFQLXDBI.mjs} +3 -3
- package/dist/{package-CStJrLG3.cjs → package-BFSsS_dl.cjs} +7 -7
- package/dist/{package-BGZo2vAj.mjs → package-DbGqY8Ej.mjs} +7 -7
- package/dist/{panels-GVnnEsow.mjs → panels-2yIO9FxQ.mjs} +5 -5
- package/dist/{panels-D4_yGw4n.cjs → panels-BqLXIQif.cjs} +5 -5
- package/dist/{peerTools-BO-H0wNj.mjs → peerTools-4GYKxr8J.mjs} +5 -5
- package/dist/{peerTools-Drow2-P4.cjs → peerTools-Z8V2E0AF.cjs} +5 -5
- package/dist/{persistence-DvD-irLh.mjs → persistence-DbOKjdUD.mjs} +3 -3
- package/dist/{persistence-DGfEdbA5.cjs → persistence-TpVFA5-I.cjs} +2 -2
- package/dist/{piRunnerArgs-DwcAwwzm.mjs → piRunnerArgs-Bdj0sjAT.mjs} +1 -1
- package/dist/{piRunnerArgs-C1dLsoXF.cjs → piRunnerArgs-DOEJJymf.cjs} +1 -1
- package/dist/{piRuntime-_yRSPgnR.mjs → piRuntime-B0QZykV7.mjs} +1 -1
- package/dist/{piRuntime-d2h0Cska.cjs → piRuntime-DiRayy91.cjs} +1 -1
- package/dist/{piTerminal-WN0AMv9u.mjs → piTerminal-DGF4X7C-.mjs} +20 -20
- package/dist/{piTerminal-CVB4fa5R.cjs → piTerminal-DciFqPEi.cjs} +20 -20
- package/dist/{pushNotifications-3YsyCEfY.cjs → pushNotifications-C1i2W1GQ.cjs} +3 -3
- package/dist/{pushNotifications-D2UZnoTB.mjs → pushNotifications-CrCTpDiN.mjs} +3 -3
- package/dist/{query-Ba7UXc_y.cjs → query-BkOpCpRo.cjs} +1 -1
- package/dist/{query-_sw0hG6A.mjs → query-CrSvcV32.mjs} +1 -1
- package/dist/{rateLimitWindows-DiiGHS9r.cjs → rateLimitWindows-BREA7OZj.cjs} +1 -1
- package/dist/{rateLimitWindows-DzXv6p_W.mjs → rateLimitWindows-DZVrafmm.mjs} +1 -1
- package/dist/{reconnectGate-CxLgZCBh.mjs → reconnectGate-COxAZTv8.mjs} +1 -1
- package/dist/{reconnectGate-BpePVLPu.cjs → reconnectGate-YQ5jXJfY.cjs} +1 -1
- package/dist/{registerCommonHandlers-ChdVwZW6.mjs → registerCommonHandlers-Cfl_dEWs.mjs} +2 -2
- package/dist/{registerCommonHandlers-6iKpECuR.cjs → registerCommonHandlers-D95IxqDN.cjs} +2 -2
- package/dist/{registerKillSessionHandler-BDTgrstx.cjs → registerKillSessionHandler-DJJXtc_L.cjs} +6 -6
- package/dist/{registerKillSessionHandler-D6wYbAIt.mjs → registerKillSessionHandler-DoE6xgH3.mjs} +6 -6
- package/dist/{registerSideQuestionHandler-U4LGga_Z.cjs → registerSideQuestionHandler-DsRz-aD9.cjs} +4 -4
- package/dist/{registerSideQuestionHandler-C3K_qKwA.mjs → registerSideQuestionHandler-Dv00rqcy.mjs} +4 -4
- package/dist/{remoteSessionClient-CFNM8UEh.mjs → remoteSessionClient-BFd_D9ka.mjs} +5 -5
- package/dist/{remoteSessionClient-DSC5Cj21.cjs → remoteSessionClient-DleOeQlN.cjs} +5 -5
- package/dist/{reportProgressTool-CFmDK8ag.mjs → reportProgressTool-D4xKY9Ur.mjs} +111 -4
- package/dist/{reportProgressTool-Cr25LWeW.cjs → reportProgressTool-DtEpDqv3.cjs} +113 -3
- package/dist/{run-Be0yicft.cjs → run-CVAIFpsp.cjs} +391 -42
- package/dist/{run-D0D73Dam.mjs → run-iDEMW4js.mjs} +391 -42
- package/dist/{runClaude-1NP467UM.mjs → runClaude-DvHdLJaV.mjs} +27 -25
- package/dist/{runClaude-BOxvKK4H.cjs → runClaude-gucCQBma.cjs} +30 -28
- package/dist/{runClaudeDeps-CkRlQx2Y.cjs → runClaudeDeps-CQ8vvqUQ.cjs} +42 -40
- package/dist/{runClaudeDeps-BPzLoWyT.mjs → runClaudeDeps-DkFWFwVc.mjs} +48 -46
- package/dist/{runGemini-j2n5ZlOL.mjs → runGemini-B2lXQDru.mjs} +35 -33
- package/dist/{runGemini-BowXJRXb.cjs → runGemini-C0vqJYtS.cjs} +35 -33
- package/dist/{runOpenClaw-DLsnZnFM.cjs → runOpenClaw-DNV7GX73.cjs} +18 -18
- package/dist/{runOpenClaw-6zrT8dPO.mjs → runOpenClaw-Ddb6sOkY.mjs} +18 -18
- package/dist/{sandbox-BFbT6HDl.mjs → sandbox-Cw0cPDDh.mjs} +4 -4
- package/dist/{sandbox-DLijcRKk.cjs → sandbox-FA0RlaZg.cjs} +4 -4
- package/dist/selfCheck-B-hKig8I.mjs +89 -0
- package/dist/{selfCheck-U-A1DCi9.cjs → selfCheck-DFC8fzhF.cjs} +40 -39
- package/dist/{send-CGxo_QUR.cjs → send-BFd-5b_Q.cjs} +8 -8
- package/dist/{send-CQGKb3Kb.mjs → send-CwgqPftE.mjs} +8 -8
- package/dist/{server-DR5bQzTq.mjs → server-C_4Fk45r.mjs} +4 -4
- package/dist/{server-CWbcDBjV.cjs → server-DwOdMGAP.cjs} +6 -6
- package/dist/{sessionLock-DqFKSW8u.mjs → sessionLock-CphKQyav.mjs} +3 -3
- package/dist/{sessionLock-CJiayMcZ.cjs → sessionLock-DglhFHzB.cjs} +3 -3
- package/dist/{startupSessionCreate-s1ekIs2Z.cjs → sessionMetadata-DyTJ0Ki5.cjs} +14 -3
- package/dist/{startupSessionCreate-CfBajt2k.mjs → sessionMetadata-V7Z7F-cj.mjs} +14 -4
- package/dist/{sessionOps-Cw_JivR2.cjs → sessionOps-CIFvoFPA.cjs} +4 -4
- package/dist/{sessionOps-D-SDNs-D.mjs → sessionOps-D-uFSTHk.mjs} +4 -4
- package/dist/{sessionProvider-JEAWxBF6.cjs → sessionProvider-B0daO-Ln.cjs} +10 -10
- package/dist/{sessionProvider-Cb-LtbFQ.mjs → sessionProvider-D8y7K8bK.mjs} +10 -10
- package/dist/{sessionScanner-zJrc_Oe0.cjs → sessionScanner-CWflbWoH.cjs} +3 -3
- package/dist/{sessionScanner-C2M697xz.mjs → sessionScanner-DQAOP6pU.mjs} +3 -3
- package/dist/{sessions-CIxnjpCM.mjs → sessions-CaO_-AI7.mjs} +10 -10
- package/dist/{sessions-D2yLkE5R.cjs → sessions-CzpI76qj.cjs} +10 -10
- package/dist/{setupOfflineReconnection-Uu3tqISz.cjs → setupOfflineReconnection-BZHRoKDx.cjs} +2 -2
- package/dist/{setupOfflineReconnection-DzV1wB4y.mjs → setupOfflineReconnection-Ck-p0YPb.mjs} +2 -2
- package/dist/{spawn-CeeM-Piz.mjs → spawn-BEJxfj60.mjs} +14 -14
- package/dist/{spawn-DD1Sv8Ri.cjs → spawn-DyjOa4nf.cjs} +14 -14
- package/dist/{spawnAgents-CrHgpAzU.cjs → spawnAgents-IiuqX0S5.cjs} +1 -1
- package/dist/{spawnAgents-DEBfpoPZ.mjs → spawnAgents-XObVj6zN.mjs} +1 -1
- package/dist/{spawnHappyCLI-CYzlz9Sl.cjs → spawnHappyCLI-C3XuIB2N.cjs} +1 -1
- package/dist/{spawnHappyCLI-CUfe8n_m.mjs → spawnHappyCLI-Cc9kKpcq.mjs} +1 -1
- package/dist/{startFileWatcher-C0u3J6Bj.cjs → startFileWatcher-CeDJl9mN.cjs} +1 -1
- package/dist/{startFileWatcher-JdO3v65I.mjs → startFileWatcher-t3K1y9kY.mjs} +1 -1
- package/dist/{store-DEhdblkI.mjs → store-CqNAE-0v.mjs} +1 -1
- package/dist/{store-QBBJB5Ox.cjs → store-DOZAMV4W.cjs} +1 -1
- package/dist/{streamRelay-DymKR1Rk.mjs → streamRelay-7D7v0hvk.mjs} +1 -1
- package/dist/{streamRelay-BVrCYh2G.cjs → streamRelay-Dyp4x44P.cjs} +1 -1
- package/dist/{sync-BO4DRSub.cjs → sync-BvxhuW9R.cjs} +1 -1
- package/dist/{sync-BLGrIKN9.mjs → sync-s1pUqWGm.mjs} +1 -1
- package/dist/{systemPrompt-DTUJZOn6.cjs → systemPrompt-CCdSrtn3.cjs} +2 -2
- package/dist/{systemPrompt-YylizkJs.mjs → systemPrompt-CLYTbBhV.mjs} +2 -2
- package/dist/{teams-zkGFcwsG.mjs → teams-BVp5F_xN.mjs} +7 -7
- package/dist/{teams-DnLPBPKx.cjs → teams-D2q1DQWz.cjs} +7 -7
- package/dist/{template-uSKZ53Sv.cjs → template-M1YGFYUT.cjs} +1 -1
- package/dist/{template-BGlDAjbM.mjs → template-oBrR0saD.mjs} +1 -1
- package/dist/{time-Cv4hbCLT.cjs → time-D-v2Cd9e.cjs} +1 -1
- package/dist/{time-DZE0879N.mjs → time-qd46L189.mjs} +1 -1
- package/dist/{titleGenerator-B2BbmJuc.mjs → titleGenerator-BdeHi3IY.mjs} +2 -2
- package/dist/{titleGenerator-D2ehxbvK.cjs → titleGenerator-CSYqcorn.cjs} +3 -3
- package/dist/{todo-DUpW9d8p.mjs → todo-DiEhLgUZ.mjs} +95 -12
- package/dist/{todo-9kn_9N-H.cjs → todo-Dq_YuJvj.cjs} +101 -18
- package/dist/{tools-rMr-wPIc.cjs → tools-CY2zrdd5.cjs} +1 -1
- package/dist/{tools-gIDXwAzk.mjs → tools-DR7GWBBV.mjs} +1 -1
- package/dist/{uninstall-CHx5TOHi.cjs → uninstall-BHhHjbzE.cjs} +3 -3
- package/dist/{uninstall-CBlRzvNa.mjs → uninstall-BvwDZVU9.mjs} +3 -3
- package/dist/{wrapperAccount-Ce78kKMo.mjs → wrapperAccount-CpDsQL15.mjs} +2 -2
- package/dist/{wrapperAccount-EkmR4V-v.cjs → wrapperAccount-ejUjAQaM.cjs} +2 -2
- package/package.json +7 -7
- package/dist/selfCheck-DCIqaiMu.mjs +0 -88
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { l as logger } from './logger-
|
|
1
|
+
import { l as logger } from './logger-BLMi8oJK.mjs';
|
|
2
2
|
import { p as prependToMessage, b as buildDigestLine, a as buildFirstTurnPrefix } from './prompt-QHuFx9j6.mjs';
|
|
3
|
-
import { P as ProjectsUnsupportedError } from './client-
|
|
4
|
-
import {
|
|
3
|
+
import { P as ProjectsUnsupportedError } from './client-BXwIqRha.mjs';
|
|
4
|
+
import { s as sharedIssuesClient, I as IssuesUnsupportedError } from './client-BgxQ9aej.mjs';
|
|
5
|
+
import { d as createSelfReportState, A as AUTOMATION_TOOL_NAMES, P as PROJECT_TOOL_NAMES, I as ISSUE_TOOL_NAMES, r as registerAutomationTools, a as registerProjectTools, e as createProjectToolExecutor, b as registerIssueTools, f as createIssueToolExecutor, c as registerReportProgressTool, n as normalizeAttention, g as normalizePhase, h as normalizeProgress, s as shouldAcceptSelfReport } from './reportProgressTool-D4xKY9Ur.mjs';
|
|
5
6
|
import { readFileSync, constants } from 'node:fs';
|
|
6
7
|
import { homedir } from 'node:os';
|
|
7
8
|
import { join, dirname } from 'node:path';
|
|
@@ -9,26 +10,71 @@ import { z } from 'zod';
|
|
|
9
10
|
import { p as piAgentDir } from './pi-CqyoZMjI.mjs';
|
|
10
11
|
import { unlink, mkdir, open, rename } from 'node:fs/promises';
|
|
11
12
|
import { randomUUID, createHash } from 'node:crypto';
|
|
12
|
-
import { T as TeamConnectionPreflightError, S as SessionInOtherTeamError, c as createTeamsClient, t as teamRequest } from './client-
|
|
13
|
-
import { t as teamScopePath, r as readTeamScope } from './context-
|
|
14
|
-
import { g as waitForSessionKey, e as sendUserMessage } from './sessionOps-D-
|
|
13
|
+
import { T as TeamConnectionPreflightError, S as SessionInOtherTeamError, c as createTeamsClient, t as teamRequest } from './client-C0qjAgZ_.mjs';
|
|
14
|
+
import { t as teamScopePath, r as readTeamScope } from './context-Cf05DtNM.mjs';
|
|
15
|
+
import { g as waitForSessionKey, e as sendUserMessage } from './sessionOps-D-uFSTHk.mjs';
|
|
15
16
|
import { T as TEAM_SKILL, a as TEAM_LEAD_PLAYBOOK } from './resources-CLP_MpK4.mjs';
|
|
16
|
-
import { T as TEAM_TOOL_NAMES, r as registerTeamsTools } from './tools-
|
|
17
|
-
import { S as SESSION_PEER_TOOL_NAMES, r as registerSessionPeerTools, a as createSessionPeerToolExecutor } from './peerTools-
|
|
17
|
+
import { T as TEAM_TOOL_NAMES, r as registerTeamsTools } from './tools-DR7GWBBV.mjs';
|
|
18
|
+
import { S as SESSION_PEER_TOOL_NAMES, r as registerSessionPeerTools, a as createSessionPeerToolExecutor } from './peerTools-4GYKxr8J.mjs';
|
|
18
19
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
19
20
|
import { createServer } from 'node:http';
|
|
20
21
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
21
22
|
import { C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, c as CLIPBOARD_MAX_BYTES } from './limits-DIo7rEBR.mjs';
|
|
22
|
-
import { A as ASSISTANT_TOOL_NAMES, a as registerAssistantTools, c as checkDownloadTarget } from './downloadTarget-
|
|
23
|
+
import { A as ASSISTANT_TOOL_NAMES, a as registerAssistantTools, c as checkDownloadTarget } from './downloadTarget-Diq-GBu4.mjs';
|
|
23
24
|
import { P as PREVIEW_TOOL_NAME, R as REPORT_PROGRESS_TOOL_NAME, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION, c as PREVIEW_DOWNLOAD_PARAM_DESCRIPTION } from './agentGuidance-BDYt2Qy2.mjs';
|
|
24
25
|
import { n as normalizeWebPanels, w as webPanelPath } from './webPanels-B2_C2-3g.mjs';
|
|
25
|
-
import { b as readCredentialsForConfiguredRelay, r as readSettings } from './persistence-
|
|
26
|
-
import { g as getSessionNotificationBody } from './pushNotifications-
|
|
26
|
+
import { b as readCredentialsForConfiguredRelay, r as readSettings } from './persistence-DbOKjdUD.mjs';
|
|
27
|
+
import { g as getSessionNotificationBody } from './pushNotifications-CrCTpDiN.mjs';
|
|
27
28
|
import { c as checkPreviewPath } from './previewPath-CXN4Vag0.mjs';
|
|
28
|
-
import {
|
|
29
|
-
import { c as configuration } from './configuration-
|
|
29
|
+
import { a5 as ATTENTION_DISABLED_ERROR, a6 as ATTENTION_LIMITS, a7 as ownerBoardPostToRest, a8 as isAttentionBoardLocalId, a9 as OwnerBoardPostInputSchema, aa as OwnerBoardUpdateInputSchema, ab as OwnerBoardResolveInputSchema, ac as OwnerBoardListInputSchema, ad as ATTENTION_SESSION_CAPABILITY } from './index-kwsivEs-.mjs';
|
|
30
|
+
import { c as configuration } from './configuration-4pG95tsq.mjs';
|
|
30
31
|
import { createHash as createHash$1 } from 'crypto';
|
|
31
32
|
|
|
33
|
+
function buildIssueDigestLine(issue, entries) {
|
|
34
|
+
const human = entries.filter((e) => e.author.kind === "user" && !e.deletedAt);
|
|
35
|
+
const statuses = human.filter((e) => e.kind === "status");
|
|
36
|
+
const parts = [];
|
|
37
|
+
if (statuses.length) {
|
|
38
|
+
const from = statuses[0].data?.from;
|
|
39
|
+
parts.push(`now ${issue.status}${typeof from === "string" ? ` (${from} \u2192 ${issue.status} by owner)` : " (changed by owner)"}`);
|
|
40
|
+
}
|
|
41
|
+
if (human.some((e) => e.kind === "assign")) parts.push("assignee changed");
|
|
42
|
+
const fields = /* @__PURE__ */ new Set();
|
|
43
|
+
for (const e of human) if (e.kind === "field") {
|
|
44
|
+
for (const f of e.data?.fields ?? []) if (typeof f === "string") fields.add(f);
|
|
45
|
+
}
|
|
46
|
+
if (fields.size) parts.push(`${[...fields].join(", ")} updated`);
|
|
47
|
+
if (!parts.length) return null;
|
|
48
|
+
return `[Issue ${issue.key} ${parts.join("; ")}]`;
|
|
49
|
+
}
|
|
50
|
+
function createIssueDigest(deps) {
|
|
51
|
+
const client = deps.client ?? sharedIssuesClient();
|
|
52
|
+
const enabled = deps.enabled ?? (() => !!process.env.VH_ISSUE_ID);
|
|
53
|
+
const timeoutMs = deps.timeoutMs ?? 1500;
|
|
54
|
+
let cursor = null;
|
|
55
|
+
return {
|
|
56
|
+
cursor: () => cursor,
|
|
57
|
+
async decorate(message) {
|
|
58
|
+
const sid = deps.sessionId();
|
|
59
|
+
if (!sid || !enabled() || client.isDisabled()) return message;
|
|
60
|
+
try {
|
|
61
|
+
if (cursor === null) {
|
|
62
|
+
const ctx2 = await client.session(sid, void 0, timeoutMs);
|
|
63
|
+
if (ctx2.issue) cursor = ctx2.asOf;
|
|
64
|
+
return message;
|
|
65
|
+
}
|
|
66
|
+
const ctx = await client.session(sid, cursor, timeoutMs);
|
|
67
|
+
if (!ctx.issue) return message;
|
|
68
|
+
cursor = ctx.asOf;
|
|
69
|
+
return prependToMessage(message, buildIssueDigestLine(ctx.issue, ctx.comments));
|
|
70
|
+
} catch (error) {
|
|
71
|
+
if (!(error instanceof IssuesUnsupportedError)) logger.debug(`[issues] digest skipped: ${String(error)}`);
|
|
72
|
+
return message;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
32
78
|
function createProjectInjector(deps) {
|
|
33
79
|
const timeoutMs = deps.timeoutMs ?? 1500;
|
|
34
80
|
const now = deps.now ?? Date.now;
|
|
@@ -38,6 +84,7 @@ function createProjectInjector(deps) {
|
|
|
38
84
|
let lastPresenceAt = 0;
|
|
39
85
|
let lastPresenceVersion = null;
|
|
40
86
|
const label = (id) => titles.get(id) ?? id.slice(0, 8);
|
|
87
|
+
const issueDigest = deps.issueDigest === void 0 ? createIssueDigest({ sessionId: deps.sessionId, timeoutMs }) : deps.issueDigest;
|
|
41
88
|
function withTimeout(p) {
|
|
42
89
|
return Promise.race([p, new Promise((_, reject) => setTimeout(() => reject(new Error("project injection timeout")), timeoutMs).unref?.())]);
|
|
43
90
|
}
|
|
@@ -109,15 +156,16 @@ function createProjectInjector(deps) {
|
|
|
109
156
|
},
|
|
110
157
|
async decorate(message) {
|
|
111
158
|
if (typeof message !== "string") return message;
|
|
159
|
+
const withIssue = async (text) => issueDigest ? issueDigest.decorate(text) : text;
|
|
112
160
|
const sid = deps.sessionId();
|
|
113
|
-
if (!sid || deps.client.isDisabled()) return message;
|
|
161
|
+
if (!sid || deps.client.isDisabled()) return await withIssue(message);
|
|
162
|
+
let out = message;
|
|
114
163
|
try {
|
|
115
|
-
|
|
116
|
-
return out;
|
|
164
|
+
out = state.prefixSent ? await laterTurn(sid, message) : await firstTurn(sid, message);
|
|
117
165
|
} catch (error) {
|
|
118
166
|
if (!(error instanceof ProjectsUnsupportedError)) logger.debug(`[projects] injection skipped: ${String(error)}`);
|
|
119
|
-
return message;
|
|
120
167
|
}
|
|
168
|
+
return await withIssue(out);
|
|
121
169
|
}
|
|
122
170
|
};
|
|
123
171
|
}
|
|
@@ -848,6 +896,7 @@ function createMcpServer(handlers, options, sessionId, client) {
|
|
|
848
896
|
registerAutomationTools(mcp);
|
|
849
897
|
if (client) registerSessionPeerTools(mcp, createSessionPeerToolExecutor(client));
|
|
850
898
|
if (client) registerProjectTools(mcp, createProjectToolExecutor(() => client.sessionId));
|
|
899
|
+
if (client) registerIssueTools(mcp, createIssueToolExecutor(() => client.sessionId));
|
|
851
900
|
mcp.registerTool("change_title", {
|
|
852
901
|
description: "Change the title of the current chat session",
|
|
853
902
|
title: "Change Chat Title",
|
|
@@ -1198,6 +1247,7 @@ async function startHappyServer(client, options) {
|
|
|
1198
1247
|
...AUTOMATION_TOOL_NAMES,
|
|
1199
1248
|
...SESSION_PEER_TOOL_NAMES,
|
|
1200
1249
|
...PROJECT_TOOL_NAMES,
|
|
1250
|
+
...ISSUE_TOOL_NAMES,
|
|
1201
1251
|
// Auto-allow only; the tools themselves appear for a lead on a board server.
|
|
1202
1252
|
...OWNER_BOARD_TOOL_NAMES,
|
|
1203
1253
|
...options?.assistant && !process.env.VH_TEAM_SCOPE_FILE ? ASSISTANT_TOOL_NAMES : []
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var logger = require('./logger-
|
|
3
|
+
var logger = require('./logger-D28MY1Bv.cjs');
|
|
4
4
|
var prompt = require('./prompt-Bof2aQkI.cjs');
|
|
5
|
-
var client = require('./client-
|
|
6
|
-
var
|
|
5
|
+
var client$1 = require('./client-BnoN4P4t.cjs');
|
|
6
|
+
var client = require('./client-1zIbVVX5.cjs');
|
|
7
|
+
var reportProgressTool = require('./reportProgressTool-DtEpDqv3.cjs');
|
|
7
8
|
var node_fs = require('node:fs');
|
|
8
9
|
var os = require('node:os');
|
|
9
10
|
var path = require('node:path');
|
|
@@ -11,26 +12,71 @@ var z = require('zod');
|
|
|
11
12
|
var pi = require('./pi-DlsrPCTa.cjs');
|
|
12
13
|
var promises = require('node:fs/promises');
|
|
13
14
|
var node_crypto = require('node:crypto');
|
|
14
|
-
var client$
|
|
15
|
-
var context = require('./context-
|
|
16
|
-
var sessionOps = require('./sessionOps-
|
|
15
|
+
var client$2 = require('./client-C8BTmcrh.cjs');
|
|
16
|
+
var context = require('./context-wMsIGwBw.cjs');
|
|
17
|
+
var sessionOps = require('./sessionOps-CIFvoFPA.cjs');
|
|
17
18
|
var resources = require('./resources-BZ_Be0qM.cjs');
|
|
18
|
-
var tools = require('./tools-
|
|
19
|
-
var peerTools = require('./peerTools-
|
|
19
|
+
var tools = require('./tools-CY2zrdd5.cjs');
|
|
20
|
+
var peerTools = require('./peerTools-Z8V2E0AF.cjs');
|
|
20
21
|
var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
21
22
|
var node_http = require('node:http');
|
|
22
23
|
var streamableHttp_js = require('@modelcontextprotocol/sdk/server/streamableHttp.js');
|
|
23
24
|
var limits = require('./limits-C-a7gr04.cjs');
|
|
24
|
-
var downloadTarget = require('./downloadTarget-
|
|
25
|
+
var downloadTarget = require('./downloadTarget-DfoOSrYi.cjs');
|
|
25
26
|
var agentGuidance = require('./agentGuidance-BtBx2xxE.cjs');
|
|
26
27
|
var webPanels = require('./webPanels-FCgFKvVe.cjs');
|
|
27
|
-
var persistence = require('./persistence-
|
|
28
|
-
var pushNotifications = require('./pushNotifications-
|
|
28
|
+
var persistence = require('./persistence-TpVFA5-I.cjs');
|
|
29
|
+
var pushNotifications = require('./pushNotifications-C1i2W1GQ.cjs');
|
|
29
30
|
var previewPath = require('./previewPath-B0rBdhy1.cjs');
|
|
30
|
-
var index = require('./index-
|
|
31
|
-
var configuration = require('./configuration-
|
|
31
|
+
var index = require('./index-BiutHOAO.cjs');
|
|
32
|
+
var configuration = require('./configuration-ClUt7pqs.cjs');
|
|
32
33
|
var require$$3 = require('crypto');
|
|
33
34
|
|
|
35
|
+
function buildIssueDigestLine(issue, entries) {
|
|
36
|
+
const human = entries.filter((e) => e.author.kind === "user" && !e.deletedAt);
|
|
37
|
+
const statuses = human.filter((e) => e.kind === "status");
|
|
38
|
+
const parts = [];
|
|
39
|
+
if (statuses.length) {
|
|
40
|
+
const from = statuses[0].data?.from;
|
|
41
|
+
parts.push(`now ${issue.status}${typeof from === "string" ? ` (${from} \u2192 ${issue.status} by owner)` : " (changed by owner)"}`);
|
|
42
|
+
}
|
|
43
|
+
if (human.some((e) => e.kind === "assign")) parts.push("assignee changed");
|
|
44
|
+
const fields = /* @__PURE__ */ new Set();
|
|
45
|
+
for (const e of human) if (e.kind === "field") {
|
|
46
|
+
for (const f of e.data?.fields ?? []) if (typeof f === "string") fields.add(f);
|
|
47
|
+
}
|
|
48
|
+
if (fields.size) parts.push(`${[...fields].join(", ")} updated`);
|
|
49
|
+
if (!parts.length) return null;
|
|
50
|
+
return `[Issue ${issue.key} ${parts.join("; ")}]`;
|
|
51
|
+
}
|
|
52
|
+
function createIssueDigest(deps) {
|
|
53
|
+
const client$1 = deps.client ?? client.sharedIssuesClient();
|
|
54
|
+
const enabled = deps.enabled ?? (() => !!process.env.VH_ISSUE_ID);
|
|
55
|
+
const timeoutMs = deps.timeoutMs ?? 1500;
|
|
56
|
+
let cursor = null;
|
|
57
|
+
return {
|
|
58
|
+
cursor: () => cursor,
|
|
59
|
+
async decorate(message) {
|
|
60
|
+
const sid = deps.sessionId();
|
|
61
|
+
if (!sid || !enabled() || client$1.isDisabled()) return message;
|
|
62
|
+
try {
|
|
63
|
+
if (cursor === null) {
|
|
64
|
+
const ctx2 = await client$1.session(sid, void 0, timeoutMs);
|
|
65
|
+
if (ctx2.issue) cursor = ctx2.asOf;
|
|
66
|
+
return message;
|
|
67
|
+
}
|
|
68
|
+
const ctx = await client$1.session(sid, cursor, timeoutMs);
|
|
69
|
+
if (!ctx.issue) return message;
|
|
70
|
+
cursor = ctx.asOf;
|
|
71
|
+
return prompt.prependToMessage(message, buildIssueDigestLine(ctx.issue, ctx.comments));
|
|
72
|
+
} catch (error) {
|
|
73
|
+
if (!(error instanceof client.IssuesUnsupportedError)) logger.logger.debug(`[issues] digest skipped: ${String(error)}`);
|
|
74
|
+
return message;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
34
80
|
function createProjectInjector(deps) {
|
|
35
81
|
const timeoutMs = deps.timeoutMs ?? 1500;
|
|
36
82
|
const now = deps.now ?? Date.now;
|
|
@@ -40,6 +86,7 @@ function createProjectInjector(deps) {
|
|
|
40
86
|
let lastPresenceAt = 0;
|
|
41
87
|
let lastPresenceVersion = null;
|
|
42
88
|
const label = (id) => titles.get(id) ?? id.slice(0, 8);
|
|
89
|
+
const issueDigest = deps.issueDigest === void 0 ? createIssueDigest({ sessionId: deps.sessionId, timeoutMs }) : deps.issueDigest;
|
|
43
90
|
function withTimeout(p) {
|
|
44
91
|
return Promise.race([p, new Promise((_, reject) => setTimeout(() => reject(new Error("project injection timeout")), timeoutMs).unref?.())]);
|
|
45
92
|
}
|
|
@@ -111,15 +158,16 @@ function createProjectInjector(deps) {
|
|
|
111
158
|
},
|
|
112
159
|
async decorate(message) {
|
|
113
160
|
if (typeof message !== "string") return message;
|
|
161
|
+
const withIssue = async (text) => issueDigest ? issueDigest.decorate(text) : text;
|
|
114
162
|
const sid = deps.sessionId();
|
|
115
|
-
if (!sid || deps.client.isDisabled()) return message;
|
|
163
|
+
if (!sid || deps.client.isDisabled()) return await withIssue(message);
|
|
164
|
+
let out = message;
|
|
116
165
|
try {
|
|
117
|
-
|
|
118
|
-
return out;
|
|
166
|
+
out = state.prefixSent ? await laterTurn(sid, message) : await firstTurn(sid, message);
|
|
119
167
|
} catch (error) {
|
|
120
|
-
if (!(error instanceof client.ProjectsUnsupportedError)) logger.logger.debug(`[projects] injection skipped: ${String(error)}`);
|
|
121
|
-
return message;
|
|
168
|
+
if (!(error instanceof client$1.ProjectsUnsupportedError)) logger.logger.debug(`[projects] injection skipped: ${String(error)}`);
|
|
122
169
|
}
|
|
170
|
+
return await withIssue(out);
|
|
123
171
|
}
|
|
124
172
|
};
|
|
125
173
|
}
|
|
@@ -235,7 +283,7 @@ async function retainTeam(path, input, resolvedTeamId, guidanceDelivered = false
|
|
|
235
283
|
}
|
|
236
284
|
}
|
|
237
285
|
function createTeamAdoption(sessionId) {
|
|
238
|
-
const client = client$
|
|
286
|
+
const client = client$2.createTeamsClient(sessionId);
|
|
239
287
|
let current;
|
|
240
288
|
return (raw) => {
|
|
241
289
|
const parsed = TeamAdoptSchema.safeParse(raw);
|
|
@@ -277,7 +325,7 @@ ${resources.TEAM_LEAD_PLAYBOOK}`;
|
|
|
277
325
|
}
|
|
278
326
|
operation.result = { status: "connected", teamId: connected.team.id, botId: connected.botId, instructions };
|
|
279
327
|
} catch (error) {
|
|
280
|
-
if (error instanceof client$
|
|
328
|
+
if (error instanceof client$2.TeamConnectionPreflightError && intent?.fresh && !intent.resolvedTeamId) {
|
|
281
329
|
await promises.unlink(path).catch(() => {
|
|
282
330
|
});
|
|
283
331
|
operation.safeToChange = true;
|
|
@@ -286,7 +334,7 @@ ${resources.TEAM_LEAD_PLAYBOOK}`;
|
|
|
286
334
|
error: error instanceof Error ? error.message : "Team connection failed; retry the same request",
|
|
287
335
|
...operation.safeToChange ? { safeToChange: true } : {},
|
|
288
336
|
// B-730: the Web asks the owner to confirm a transfer, then sends a new request with `transfer`.
|
|
289
|
-
...error instanceof client$
|
|
337
|
+
...error instanceof client$2.SessionInOtherTeamError ? { code: error.code, teamId: error.teamId, teamName: error.teamName } : {}
|
|
290
338
|
};
|
|
291
339
|
}
|
|
292
340
|
})();
|
|
@@ -552,7 +600,7 @@ async function resolveTeamLead(sessionId) {
|
|
|
552
600
|
try {
|
|
553
601
|
const scope = await context.readTeamScope(context.teamScopePath(sessionId));
|
|
554
602
|
if (!scope) return false;
|
|
555
|
-
const inspected = await client$
|
|
603
|
+
const inspected = await client$2.teamRequest(`/v1/teams/${encodeURIComponent(scope.teamId)}/agent`, "GET", scope.scopeToken, true);
|
|
556
604
|
const bots = Array.isArray(inspected?.team?.bots) ? inspected.team.bots : [];
|
|
557
605
|
return bots.some((bot) => bot.id === scope.botId && bot.root === true);
|
|
558
606
|
} catch {
|
|
@@ -850,6 +898,7 @@ function createMcpServer(handlers, options, sessionId, client) {
|
|
|
850
898
|
reportProgressTool.registerAutomationTools(mcp);
|
|
851
899
|
if (client) peerTools.registerSessionPeerTools(mcp, peerTools.createSessionPeerToolExecutor(client));
|
|
852
900
|
if (client) reportProgressTool.registerProjectTools(mcp, reportProgressTool.createProjectToolExecutor(() => client.sessionId));
|
|
901
|
+
if (client) reportProgressTool.registerIssueTools(mcp, reportProgressTool.createIssueToolExecutor(() => client.sessionId));
|
|
853
902
|
mcp.registerTool("change_title", {
|
|
854
903
|
description: "Change the title of the current chat session",
|
|
855
904
|
title: "Change Chat Title",
|
|
@@ -1200,6 +1249,7 @@ async function startHappyServer(client, options) {
|
|
|
1200
1249
|
...reportProgressTool.AUTOMATION_TOOL_NAMES,
|
|
1201
1250
|
...peerTools.SESSION_PEER_TOOL_NAMES,
|
|
1202
1251
|
...reportProgressTool.PROJECT_TOOL_NAMES,
|
|
1252
|
+
...reportProgressTool.ISSUE_TOOL_NAMES,
|
|
1203
1253
|
// Auto-allow only; the tools themselves appear for a lead on a board server.
|
|
1204
1254
|
...OWNER_BOARD_TOOL_NAMES,
|
|
1205
1255
|
...options?.assistant && !process.env.VH_TEAM_SCOPE_FILE ? downloadTarget.ASSISTANT_TOOL_NAMES : []
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chalk = require('chalk');
|
|
4
|
-
var configuration = require('./configuration-
|
|
5
|
-
var persistence = require('./persistence-
|
|
6
|
-
var controlClient = require('./controlClient-
|
|
4
|
+
var configuration = require('./configuration-ClUt7pqs.cjs');
|
|
5
|
+
var persistence = require('./persistence-TpVFA5-I.cjs');
|
|
6
|
+
var controlClient = require('./controlClient-SYDFcIkk.cjs');
|
|
7
7
|
var doctor$1 = require('./doctor-CJpFhHoK.cjs');
|
|
8
8
|
var node_fs = require('node:fs');
|
|
9
9
|
var path = require('node:path');
|
|
10
10
|
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
11
|
-
var _package = require('./package-
|
|
11
|
+
var _package = require('./package-BFSsS_dl.cjs');
|
|
12
12
|
var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
|
|
13
13
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
14
14
|
var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
|
|
15
15
|
var node_child_process = require('node:child_process');
|
|
16
|
-
var piRunnerArgs = require('./piRunnerArgs-
|
|
16
|
+
var piRunnerArgs = require('./piRunnerArgs-DOEJJymf.cjs');
|
|
17
17
|
|
|
18
18
|
function shareSafeProcessLine(process2) {
|
|
19
19
|
return `PID ${process2.pid}: command arguments hidden for privacy`;
|
|
@@ -313,8 +313,8 @@ ${typeLabels[type] || type}:`));
|
|
|
313
313
|
}
|
|
314
314
|
console.log(chalk.gray(" An external claude command is only needed for native terminal/mirror use."));
|
|
315
315
|
try {
|
|
316
|
-
const { resolveAgentHomesForCli } = await Promise.resolve().then(function () { return require('./agentHome-
|
|
317
|
-
const { describeAgentHome } = await Promise.resolve().then(function () { return require('./index-
|
|
316
|
+
const { resolveAgentHomesForCli } = await Promise.resolve().then(function () { return require('./agentHome-C-usjJwB.cjs'); });
|
|
317
|
+
const { describeAgentHome } = await Promise.resolve().then(function () { return require('./index-CbzettaI.cjs'); });
|
|
318
318
|
const homes = await resolveAgentHomesForCli();
|
|
319
319
|
console.log(chalk.green(`\u2713 Claude config dir: ${describeAgentHome(homes.claudeConfigDir)}`));
|
|
320
320
|
console.log(chalk.green(`\u2713 Codex home: ${describeAgentHome(homes.codexHome)}`));
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import { c as configuration } from './configuration-
|
|
3
|
-
import { r as readSettings, g as readCredentials, d as readDaemonState } from './persistence-
|
|
4
|
-
import { a as checkIfDaemonRunningAndCleanupStaleState } from './controlClient-
|
|
2
|
+
import { c as configuration } from './configuration-4pG95tsq.mjs';
|
|
3
|
+
import { r as readSettings, g as readCredentials, d as readDaemonState } from './persistence-DbOKjdUD.mjs';
|
|
4
|
+
import { a as checkIfDaemonRunningAndCleanupStaleState } from './controlClient-bqCKl9Nv.mjs';
|
|
5
5
|
import { findAllHappyProcesses } from './doctor-GN5mPOn5.mjs';
|
|
6
6
|
import { statSync, realpathSync, existsSync, readdirSync } from 'node:fs';
|
|
7
7
|
import { isAbsolute, resolve, dirname, basename, delimiter, join } from 'node:path';
|
|
8
8
|
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
9
|
-
import { p as packageJson } from './package-
|
|
9
|
+
import { p as packageJson } from './package-DbGqY8Ej.mjs';
|
|
10
10
|
import { s as shareableSettingsSummary, c as collectRuntimeReadiness, S as SUPPORTED_NODE_LABEL, r as resolveClaudeCredentialReadiness, a as toolProbeLabel, b as daemonReadiness, d as daemonEndpointsMatch } from './doctorReadiness-C208SMN9.mjs';
|
|
11
11
|
import { c as credentialRelayProblem } from './authRelay-DhQhkBvX.mjs';
|
|
12
12
|
import { d as deriveLocalCliUpdateSummary } from './cliUpdate-Y34VGe9Y.mjs';
|
|
13
13
|
import { spawnSync } from 'node:child_process';
|
|
14
|
-
import { p as piInstallCommand } from './piRunnerArgs-
|
|
14
|
+
import { p as piInstallCommand } from './piRunnerArgs-Bdj0sjAT.mjs';
|
|
15
15
|
|
|
16
16
|
function shareSafeProcessLine(process2) {
|
|
17
17
|
return `PID ${process2.pid}: command arguments hidden for privacy`;
|
|
@@ -311,8 +311,8 @@ ${typeLabels[type] || type}:`));
|
|
|
311
311
|
}
|
|
312
312
|
console.log(chalk.gray(" An external claude command is only needed for native terminal/mirror use."));
|
|
313
313
|
try {
|
|
314
|
-
const { resolveAgentHomesForCli } = await import('./agentHome-
|
|
315
|
-
const { describeAgentHome } = await import('./index-
|
|
314
|
+
const { resolveAgentHomesForCli } = await import('./agentHome-C-900jC1.mjs');
|
|
315
|
+
const { describeAgentHome } = await import('./index-XP-qcJQ3.mjs');
|
|
316
316
|
const homes = await resolveAgentHomesForCli();
|
|
317
317
|
console.log(chalk.green(`\u2713 Claude config dir: ${describeAgentHome(homes.claudeConfigDir)}`));
|
|
318
318
|
console.log(chalk.green(`\u2713 Codex home: ${describeAgentHome(homes.codexHome)}`));
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
var promises = require('node:fs/promises');
|
|
4
4
|
var os = require('node:os');
|
|
5
5
|
var z = require('zod');
|
|
6
|
-
var logger = require('./logger-
|
|
7
|
-
var persistence = require('./persistence-
|
|
8
|
-
var controlClient = require('./controlClient-
|
|
9
|
-
var sessionOps = require('./sessionOps-
|
|
10
|
-
var remoteSessionClient = require('./remoteSessionClient-
|
|
6
|
+
var logger = require('./logger-D28MY1Bv.cjs');
|
|
7
|
+
var persistence = require('./persistence-TpVFA5-I.cjs');
|
|
8
|
+
var controlClient = require('./controlClient-SYDFcIkk.cjs');
|
|
9
|
+
var sessionOps = require('./sessionOps-CIFvoFPA.cjs');
|
|
10
|
+
var remoteSessionClient = require('./remoteSessionClient-DleOeQlN.cjs');
|
|
11
11
|
var ids = require('./ids-B6ZC0HGt.cjs');
|
|
12
12
|
var terminals = require('./terminals-dK3Lrjfp.cjs');
|
|
13
|
-
var bootstrap = require('./bootstrap-
|
|
13
|
+
var bootstrap = require('./bootstrap-DUKAKxrJ.cjs');
|
|
14
14
|
var path = require('node:path');
|
|
15
15
|
|
|
16
16
|
const PERSONAL_MEMORY_SOFT_LIMIT_CHARS = 2e3;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { readFile, writeFile, appendFile, stat } from 'node:fs/promises';
|
|
2
2
|
import os from 'node:os';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import { l as logger } from './logger-
|
|
5
|
-
import { c as readPersistedSessions } from './persistence-
|
|
6
|
-
import { e as spawnDaemonSession } from './controlClient-
|
|
7
|
-
import { a as listSessions, r as readSessionTranscript, s as sessionWebUrl, g as waitForSessionKey, e as sendUserMessage, b as stopSession, d as archiveSession } from './sessionOps-D-
|
|
8
|
-
import { r as readRemoteTranscript, s as sendRemoteMessage, d as deliverToSession, R as RemoteSessionOpsError } from './remoteSessionClient-
|
|
4
|
+
import { l as logger } from './logger-BLMi8oJK.mjs';
|
|
5
|
+
import { c as readPersistedSessions } from './persistence-DbOKjdUD.mjs';
|
|
6
|
+
import { e as spawnDaemonSession } from './controlClient-bqCKl9Nv.mjs';
|
|
7
|
+
import { a as listSessions, r as readSessionTranscript, s as sessionWebUrl, g as waitForSessionKey, e as sendUserMessage, b as stopSession, d as archiveSession } from './sessionOps-D-uFSTHk.mjs';
|
|
8
|
+
import { r as readRemoteTranscript, s as sendRemoteMessage, d as deliverToSession, R as RemoteSessionOpsError } from './remoteSessionClient-BFd_D9ka.mjs';
|
|
9
9
|
import { i as isValidSessionId, a as isValidTerminalId } from './ids-DU6sLx4C.mjs';
|
|
10
10
|
import { l as listVhTerminals, r as readVhTerminal, s as sendToVhTerminal } from './terminals-Dc38XmZv.mjs';
|
|
11
|
-
import { bootstrapAssistantHome, assistantPersonalMemoryPath } from './bootstrap-
|
|
11
|
+
import { bootstrapAssistantHome, assistantPersonalMemoryPath } from './bootstrap-BkLFgEGF.mjs';
|
|
12
12
|
import { join, isAbsolute, normalize } from 'node:path';
|
|
13
13
|
|
|
14
14
|
const PERSONAL_MEMORY_SOFT_LIMIT_CHARS = 2e3;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var logger = require('./logger-
|
|
4
|
-
var controlClient = require('./controlClient-
|
|
5
|
-
var spawnHappyCLI = require('./spawnHappyCLI-
|
|
6
|
-
var persistence = require('./persistence-
|
|
7
|
-
var configuration = require('./configuration-
|
|
3
|
+
var logger = require('./logger-D28MY1Bv.cjs');
|
|
4
|
+
var controlClient = require('./controlClient-SYDFcIkk.cjs');
|
|
5
|
+
var spawnHappyCLI = require('./spawnHappyCLI-C3XuIB2N.cjs');
|
|
6
|
+
var persistence = require('./persistence-TpVFA5-I.cjs');
|
|
7
|
+
var configuration = require('./configuration-ClUt7pqs.cjs');
|
|
8
8
|
var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
|
|
9
9
|
|
|
10
10
|
function extractNoSandboxFlag(args) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { l as logger } from './logger-
|
|
2
|
-
import { i as isDaemonRunningCurrentlyInstalledHappyVersion, a as checkIfDaemonRunningAndCleanupStaleState, s as stopDaemon } from './controlClient-
|
|
3
|
-
import { s as spawnHappyCLI } from './spawnHappyCLI-
|
|
4
|
-
import { d as readDaemonState } from './persistence-
|
|
5
|
-
import { c as configuration } from './configuration-
|
|
1
|
+
import { l as logger } from './logger-BLMi8oJK.mjs';
|
|
2
|
+
import { i as isDaemonRunningCurrentlyInstalledHappyVersion, a as checkIfDaemonRunningAndCleanupStaleState, s as stopDaemon } from './controlClient-bqCKl9Nv.mjs';
|
|
3
|
+
import { s as spawnHappyCLI } from './spawnHappyCLI-Cc9kKpcq.mjs';
|
|
4
|
+
import { d as readDaemonState } from './persistence-DbOKjdUD.mjs';
|
|
5
|
+
import { c as configuration } from './configuration-4pG95tsq.mjs';
|
|
6
6
|
import { d as daemonEndpointsMatch } from './doctorReadiness-C208SMN9.mjs';
|
|
7
7
|
|
|
8
8
|
function extractNoSandboxFlag(args) {
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { I as IssuesUnsupportedError, a as IssueRequestError } from './client-BgxQ9aej.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_version_conflict: "The issue changed since you read it; read it again before deciding what to change.",
|
|
12
|
+
issue_assignee_unsupported: "That assignee is not supported.",
|
|
13
|
+
issue_agent_unsupported: "That agent cannot be assigned an issue (Claude, Codex or pi only).",
|
|
14
|
+
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.",
|
|
15
|
+
issue_machine_not_found: "No such machine on this account.",
|
|
16
|
+
issue_project_not_found: "No such project.",
|
|
17
|
+
issue_parent_cycle: "That parent would create a cycle.",
|
|
18
|
+
issue_count_quota_exceeded: "This account has reached the issue limit.",
|
|
19
|
+
transaction_conflict: "The server was busy; retry.",
|
|
20
|
+
rate_limited: "Rate limited; retry later.",
|
|
21
|
+
not_signed_in: "Sign in to Very Happy with `very-happy auth login` first."
|
|
22
|
+
};
|
|
23
|
+
const ISSUES_UNSUPPORTED_TEXT = "issues_unsupported: This Very Happy server does not support Issues (or they are turned off).";
|
|
24
|
+
function describeIssueError(error) {
|
|
25
|
+
if (error instanceof IssuesUnsupportedError) return ISSUES_UNSUPPORTED_TEXT;
|
|
26
|
+
if (error instanceof IssueRequestError) {
|
|
27
|
+
const code = error.code ?? (error.status === 429 ? "rate_limited" : null);
|
|
28
|
+
if (code) {
|
|
29
|
+
const server = typeof error.details.message === "string" ? error.details.message : null;
|
|
30
|
+
return `${code}: ${server ?? MESSAGES[code] ?? "Issue request failed."}`;
|
|
31
|
+
}
|
|
32
|
+
return `Issue request failed (HTTP ${error.status})`;
|
|
33
|
+
}
|
|
34
|
+
return error instanceof Error && error.message ? error.message : "Issue request failed";
|
|
35
|
+
}
|
|
36
|
+
function assigneeLabel(issue) {
|
|
37
|
+
const a = issue.assignee;
|
|
38
|
+
if (a.kind === "agent") return `${a.agent ?? "agent"}@${(a.machineId ?? "").slice(0, 8)}`;
|
|
39
|
+
return a.kind;
|
|
40
|
+
}
|
|
41
|
+
function when(ms) {
|
|
42
|
+
return ms ? new Date(ms).toISOString().replace("T", " ").slice(0, 16) + "Z" : "";
|
|
43
|
+
}
|
|
44
|
+
function formatIssueLine(issue) {
|
|
45
|
+
const extra = [issue.priority !== "none" ? issue.priority : null, issue.labels.length ? issue.labels.join(",") : null].filter(Boolean).join(" \xB7 ");
|
|
46
|
+
return `${issue.key} [${issue.status}] ${issue.title} (${assigneeLabel(issue)}${extra ? ` \xB7 ${extra}` : ""})`;
|
|
47
|
+
}
|
|
48
|
+
function commentLine(c) {
|
|
49
|
+
const who = c.author.kind === "agent" ? "agent" : c.author.kind === "user" ? "owner" : c.author.kind;
|
|
50
|
+
const body = c.kind === "comment" ? c.body : `(${c.kind}) ${c.body}`;
|
|
51
|
+
return `- ${when(c.createdAt)} [${who}] ${body.replace(/\s+/g, " ").slice(0, 600)}`;
|
|
52
|
+
}
|
|
53
|
+
function runLine(r) {
|
|
54
|
+
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)}` : ""}`;
|
|
55
|
+
}
|
|
56
|
+
function formatIssueDetail(input) {
|
|
57
|
+
const { issue } = input;
|
|
58
|
+
const meta = [`status: ${issue.status}`, `priority: ${issue.priority}`, `assignee: ${assigneeLabel(issue)}`];
|
|
59
|
+
if (issue.labels.length) meta.push(`labels: ${issue.labels.join(", ")}`);
|
|
60
|
+
if (issue.dueAt) meta.push(`due: ${new Date(issue.dueAt).toISOString().slice(0, 10)}`);
|
|
61
|
+
const lines = [`${issue.key}: ${issue.title}`, meta.join(" \xB7 ")];
|
|
62
|
+
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.");
|
|
63
|
+
lines.push("", issue.description.trim() || "(no description)");
|
|
64
|
+
const comments = input.comments.slice(-10);
|
|
65
|
+
if (comments.length) lines.push("", "Timeline (oldest first):", ...comments.map(commentLine));
|
|
66
|
+
if (input.runs?.length) lines.push("", "Runs:", ...input.runs.map(runLine));
|
|
67
|
+
return lines.join("\n");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { formatIssueDetail as a, describeIssueError as d, formatIssueLine as f };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var client = require('./client-1zIbVVX5.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_version_conflict: "The issue changed since you read it; read it again before deciding what to change.",
|
|
14
|
+
issue_assignee_unsupported: "That assignee is not supported.",
|
|
15
|
+
issue_agent_unsupported: "That agent cannot be assigned an issue (Claude, Codex or pi only).",
|
|
16
|
+
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.",
|
|
17
|
+
issue_machine_not_found: "No such machine on this account.",
|
|
18
|
+
issue_project_not_found: "No such project.",
|
|
19
|
+
issue_parent_cycle: "That parent would create a cycle.",
|
|
20
|
+
issue_count_quota_exceeded: "This account has reached the issue limit.",
|
|
21
|
+
transaction_conflict: "The server was busy; retry.",
|
|
22
|
+
rate_limited: "Rate limited; retry later.",
|
|
23
|
+
not_signed_in: "Sign in to Very Happy with `very-happy auth login` first."
|
|
24
|
+
};
|
|
25
|
+
const ISSUES_UNSUPPORTED_TEXT = "issues_unsupported: This Very Happy server does not support Issues (or they are turned off).";
|
|
26
|
+
function describeIssueError(error) {
|
|
27
|
+
if (error instanceof client.IssuesUnsupportedError) return ISSUES_UNSUPPORTED_TEXT;
|
|
28
|
+
if (error instanceof client.IssueRequestError) {
|
|
29
|
+
const code = error.code ?? (error.status === 429 ? "rate_limited" : null);
|
|
30
|
+
if (code) {
|
|
31
|
+
const server = typeof error.details.message === "string" ? error.details.message : null;
|
|
32
|
+
return `${code}: ${server ?? MESSAGES[code] ?? "Issue request failed."}`;
|
|
33
|
+
}
|
|
34
|
+
return `Issue request failed (HTTP ${error.status})`;
|
|
35
|
+
}
|
|
36
|
+
return error instanceof Error && error.message ? error.message : "Issue request failed";
|
|
37
|
+
}
|
|
38
|
+
function assigneeLabel(issue) {
|
|
39
|
+
const a = issue.assignee;
|
|
40
|
+
if (a.kind === "agent") return `${a.agent ?? "agent"}@${(a.machineId ?? "").slice(0, 8)}`;
|
|
41
|
+
return a.kind;
|
|
42
|
+
}
|
|
43
|
+
function when(ms) {
|
|
44
|
+
return ms ? new Date(ms).toISOString().replace("T", " ").slice(0, 16) + "Z" : "";
|
|
45
|
+
}
|
|
46
|
+
function formatIssueLine(issue) {
|
|
47
|
+
const extra = [issue.priority !== "none" ? issue.priority : null, issue.labels.length ? issue.labels.join(",") : null].filter(Boolean).join(" \xB7 ");
|
|
48
|
+
return `${issue.key} [${issue.status}] ${issue.title} (${assigneeLabel(issue)}${extra ? ` \xB7 ${extra}` : ""})`;
|
|
49
|
+
}
|
|
50
|
+
function commentLine(c) {
|
|
51
|
+
const who = c.author.kind === "agent" ? "agent" : c.author.kind === "user" ? "owner" : c.author.kind;
|
|
52
|
+
const body = c.kind === "comment" ? c.body : `(${c.kind}) ${c.body}`;
|
|
53
|
+
return `- ${when(c.createdAt)} [${who}] ${body.replace(/\s+/g, " ").slice(0, 600)}`;
|
|
54
|
+
}
|
|
55
|
+
function runLine(r) {
|
|
56
|
+
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)}` : ""}`;
|
|
57
|
+
}
|
|
58
|
+
function formatIssueDetail(input) {
|
|
59
|
+
const { issue } = input;
|
|
60
|
+
const meta = [`status: ${issue.status}`, `priority: ${issue.priority}`, `assignee: ${assigneeLabel(issue)}`];
|
|
61
|
+
if (issue.labels.length) meta.push(`labels: ${issue.labels.join(", ")}`);
|
|
62
|
+
if (issue.dueAt) meta.push(`due: ${new Date(issue.dueAt).toISOString().slice(0, 10)}`);
|
|
63
|
+
const lines = [`${issue.key}: ${issue.title}`, meta.join(" \xB7 ")];
|
|
64
|
+
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.");
|
|
65
|
+
lines.push("", issue.description.trim() || "(no description)");
|
|
66
|
+
const comments = input.comments.slice(-10);
|
|
67
|
+
if (comments.length) lines.push("", "Timeline (oldest first):", ...comments.map(commentLine));
|
|
68
|
+
if (input.runs?.length) lines.push("", "Runs:", ...input.runs.map(runLine));
|
|
69
|
+
return lines.join("\n");
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
exports.describeIssueError = describeIssueError;
|
|
73
|
+
exports.formatIssueDetail = formatIssueDetail;
|
|
74
|
+
exports.formatIssueLine = formatIssueLine;
|