very-happy-cli 0.2.203 → 0.2.205
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-CAMuhS0Z.mjs → AcpBackend-BqkDMgcN.mjs} +3 -3
- package/dist/{AcpBackend-DReFgpYD.cjs → AcpBackend-Do37yiZg.cjs} +3 -3
- package/dist/{AcpSessionManager-BZKM-sCt.cjs → AcpSessionManager-BpQKu2_m.cjs} +2 -2
- package/dist/{AcpSessionManager-CJOxMFCF.mjs → AcpSessionManager-CvEO7Yex.mjs} +2 -2
- package/dist/{BasePermissionHandler-BgX73mQ5.mjs → BasePermissionHandler-BpaIn9ko.mjs} +1 -1
- package/dist/{BasePermissionHandler-BBR9Gkob.cjs → BasePermissionHandler-CUXi-tq4.cjs} +1 -1
- package/dist/{account-hy0rztXY.mjs → account-C1nsl3ij.mjs} +11 -11
- package/dist/{account-41PkJ9nx.cjs → account-SwG5Yefp.cjs} +11 -11
- package/dist/{accountService-DEpIq6CF.mjs → accountService-CqrWNH8K.mjs} +4 -4
- package/dist/{accountService-Cns8UYGI.cjs → accountService-SOeB_21A.cjs} +4 -4
- package/dist/{acpSessionResume-DmOPXKpC.cjs → acpSessionResume-BCEol11N.cjs} +1 -1
- package/dist/{acpSessionResume-5El4xksf.mjs → acpSessionResume-DvDKsJTV.mjs} +1 -1
- package/dist/{agentHome-BXaVMqHX.cjs → agentHome-8wzmbm0H.cjs} +4 -4
- package/dist/{agentHome-DUxArmak.mjs → agentHome-BuFxooEg.mjs} +4 -4
- package/dist/{api-D8ZDxBWw.mjs → api-20GbdpxY.mjs} +107 -18
- package/dist/{api-ChhFBuB0.cjs → api-BnTF8fkj.cjs} +107 -18
- package/dist/{apiMachine-qav2pnk5.mjs → apiMachine-C8NGJHHd.mjs} +105 -21
- package/dist/{apiMachine-MPwddFXq.cjs → apiMachine-cyDRM_S-.cjs} +105 -21
- package/dist/{attachmentContent-f5gwnv9J.cjs → attachmentContent-B7zz_LPF.cjs} +2 -2
- package/dist/{attachmentContent-BfSQxccA.mjs → attachmentContent-Coo9lUxK.mjs} +2 -2
- package/dist/{auth-BxNuFv_0.mjs → auth-75rP3vc0.mjs} +8 -8
- package/dist/{auth-xW7SDE_7.mjs → auth-BX6xrdHv.mjs} +5 -5
- package/dist/{auth-thi2T_T8.cjs → auth-By6u_iKB.cjs} +5 -5
- package/dist/{auth-DkPAHXLj.cjs → auth-w4UTRbIf.cjs} +8 -8
- package/dist/{auto-DmXTwayU.mjs → auto-BhmWtRvv.mjs} +18 -18
- package/dist/{auto-BiRlQ4tm.cjs → auto-xr_gqUoy.cjs} +18 -18
- package/dist/{bootstrap-EGhaCmXy.cjs → bootstrap-3ti7LXMz.cjs} +2 -2
- package/dist/{bootstrap-pGaFGbWO.mjs → bootstrap-Dn_VvHSt.mjs} +2 -2
- package/dist/{browser-DSxpOnPb.cjs → browser-C4PVyjGe.cjs} +1 -1
- package/dist/{browser-BYSYzXvP.mjs → browser-C4wWGXH7.mjs} +1 -1
- package/dist/{claudeAccountEnv-Btp39mfa.cjs → claudeAccountEnv-BTZjHTpF.cjs} +1 -1
- package/dist/{claudeAccountEnv-DowsOlDB.mjs → claudeAccountEnv-C6Wl-ZbT.mjs} +1 -1
- package/dist/{claudeLocal-bDarWqaU.mjs → claudeLocal-B8rOA-EB.mjs} +5 -5
- package/dist/{claudeLocal-ClqHmkk6.cjs → claudeLocal-DZALKVVc.cjs} +5 -5
- package/dist/{claudeLocalLauncher-Bxi0_eW9.cjs → claudeLocalLauncher-Bf5uj0EA.cjs} +10 -10
- package/dist/{claudeLocalLauncher-Ccpj2KgW.mjs → claudeLocalLauncher-CJPRSv3z.mjs} +10 -10
- package/dist/claudeLongContext-BR_zdjUp.cjs +239 -0
- package/dist/claudeLongContext-CZ60xo5p.mjs +219 -0
- package/dist/{claudeSessionFork-Cize0Y2T.mjs → claudeSessionFork-BK4U655i.mjs} +1 -1
- package/dist/{claudeSessionFork-nyNFjgaf.cjs → claudeSessionFork-unEBLW0t.cjs} +1 -1
- package/dist/{client-Cddb1dhi.cjs → client-BKjBr6pc.cjs} +2 -2
- package/dist/{client-Wr_BiOon.mjs → client-BbYds4AV.mjs} +16 -7
- package/dist/{client-CMKgB-76.cjs → client-Bh-y6cVc.cjs} +16 -7
- package/dist/{client-DO8DNDC3.mjs → client-BxtaglBR.mjs} +2 -2
- package/dist/{client-CgMVIP7v.mjs → client-CvLm25Wq.mjs} +2 -2
- package/dist/{client-6Y6O72Uq.cjs → client-DGsdLx8L.cjs} +2 -2
- package/dist/{client-CX8kRedW.mjs → client-m-K1b6Qa.mjs} +3 -3
- package/dist/{client-DP8FabOE.cjs → client-wMlUPnrV.cjs} +3 -3
- package/dist/codex/happyMcpStdioBridge.cjs +20 -19
- package/dist/codex/happyMcpStdioBridge.mjs +20 -19
- package/dist/{codexAccount-CieIQLOX.mjs → codexAccount-BPQ-lPhH.mjs} +1 -1
- package/dist/{codexAccount-D-OBY29W.cjs → codexAccount-BjaHvmKH.cjs} +1 -1
- package/dist/{codexAppServerClient-EzrHWYhX.cjs → codexAppServerClient-6aQelpRl.cjs} +3 -3
- package/dist/{codexAppServerClient-D-cD2Dfj.mjs → codexAppServerClient-BeRimnu9.mjs} +3 -3
- package/dist/{codexCommand-BMcXtvU3.cjs → codexCommand-CYVaGmhh.cjs} +67 -56
- package/dist/{codexCommand-D79GnRhB.mjs → codexCommand-CmGNDs45.mjs} +67 -56
- package/dist/{codexTermination-CF6xiFbb.cjs → codexTermination-B09HyYIB.cjs} +1 -1
- package/dist/{codexTermination-CK1MYJT7.mjs → codexTermination-Z18pGkkl.mjs} +1 -1
- package/dist/{config-Crn1mNgr.mjs → config-4b-sF37g.mjs} +3 -3
- package/dist/{config-F6zSRyk2.cjs → config-Dq_N615Z.cjs} +3 -3
- package/dist/{configuration-Cl9kOv09.cjs → configuration-Fx61b4MJ.cjs} +1 -1
- package/dist/{configuration-i9MVy0a5.mjs → configuration-H8q1sMwk.mjs} +1 -1
- package/dist/{connect-CiA13Xm4.mjs → connect-BwSwKPzI.mjs} +13 -13
- package/dist/{connect-ClklWmnI.cjs → connect-D54AnDIT.cjs} +13 -13
- package/dist/{context-DvdZsGgl.mjs → context-CM1Xd_HO.mjs} +1 -1
- package/dist/{context-BxODP3mG.cjs → context-D-QOcYuX.cjs} +1 -1
- package/dist/{controlClient-DxCQKfqe.cjs → controlClient-D04wXKoQ.cjs} +12 -3
- package/dist/{controlClient-D6vqMUfi.mjs → controlClient-D9DYqW02.mjs} +12 -4
- package/dist/{createSessionMetadata-BuAVB-xI.mjs → createSessionMetadata-CHa4pufa.mjs} +2 -2
- package/dist/{createSessionMetadata-B_NZvmhm.cjs → createSessionMetadata-Ce539QXK.cjs} +2 -2
- package/dist/{daemonAccounts-ciidbU2h.cjs → daemonAccounts-BOoI7-sw.cjs} +2 -2
- package/dist/{daemonAccounts-D5shoCLt.mjs → daemonAccounts-BtkmoJmC.mjs} +3 -3
- package/dist/{defaultPermissionMode-DgeiMMqy.mjs → defaultPermissionMode-CYQi7vqJ.mjs} +1 -1
- package/dist/{defaultPermissionMode-Cs_Tv83b.cjs → defaultPermissionMode-DmLYaaL8.cjs} +1 -1
- package/dist/{deterministicJson-B9XrEawW.mjs → deterministicJson-BEeXnWCF.mjs} +62 -20
- package/dist/{deterministicJson-kM2OdGZu.cjs → deterministicJson-D34CnNHO.cjs} +61 -19
- package/dist/{doctor-HHS4YegX.mjs → doctor-BI0Iywt_.mjs} +7 -7
- package/dist/{doctor-DiPRqsqg.cjs → doctor-BX8oWKZq.cjs} +7 -7
- package/dist/{downloadTarget-Cd8hx54t.mjs → downloadTarget-DX3m00OE.mjs} +6 -6
- package/dist/{downloadTarget-osB-mGh0.cjs → downloadTarget-TzXJEh6W.cjs} +6 -6
- package/dist/{ensureDaemonRunning-C0iDtuL7.mjs → ensureDaemonRunning-BBBqZ6vQ.mjs} +5 -5
- package/dist/{ensureDaemonRunning-CtBvPHVB.cjs → ensureDaemonRunning-Bvu-yyFn.cjs} +5 -5
- package/dist/exitNotice-M4UjtWkr.cjs +95 -0
- package/dist/exitNotice-gOAdDcL3.mjs +84 -0
- package/dist/{forkBackfill-DYIjlN1Z.mjs → forkBackfill-C9EfJ64O.mjs} +28 -2
- package/dist/{forkBackfill-8eLDeS73.cjs → forkBackfill-D2WW91fz.cjs} +28 -1
- package/dist/{format-B5V7ie8N.cjs → format-BEktLc45.cjs} +1 -1
- package/dist/{format-Dc5zMslz.mjs → format-BPAREVhi.mjs} +1 -1
- package/dist/{handleResumeCommand-vcD2qcAM.cjs → handleResumeCommand-6dYW_WOi.cjs} +5 -5
- package/dist/{handleResumeCommand-xrOAA1qI.mjs → handleResumeCommand-DziiqogX.mjs} +5 -5
- package/dist/{index-iFVMrlPo.mjs → index-BRq5iitn.mjs} +4 -4
- package/dist/{index-44o_qMvE.cjs → index-BYL_X3gP.cjs} +27 -6
- package/dist/{index-AyDwQ6FG.cjs → index-BmacwzcK.cjs} +45 -44
- package/dist/{index-D0rCXp-e.cjs → index-Cawt-fgZ.cjs} +4 -4
- package/dist/{index-C_ePuQwB.cjs → index-CoW4RNEb.cjs} +3 -3
- package/dist/{index-B7pKBIcn.mjs → index-CzBvl9py.mjs} +3 -3
- package/dist/{index-DIKJMfs2.mjs → index-DCvq8Cfw.mjs} +4 -4
- package/dist/{index-CiRMvS73.mjs → index-DWk-WTU-.mjs} +24 -7
- package/dist/{index-B7CXMlrz.mjs → index-UuWDafdi.mjs} +46 -45
- package/dist/{index-Cl-WkB_6.cjs → index-bVMcFi7v.cjs} +4 -4
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-yqS4y1cm.mjs → install-B4OVUIw5.mjs} +3 -3
- package/dist/{install-BgBgsOlS.cjs → install-BQc4Hwuo.cjs} +3 -3
- package/dist/{issue-D7liK6bR.cjs → issue-WpLZYxUQ.cjs} +8 -8
- package/dist/{issue-aKZd7J55.mjs → issue-h_BIrzLs.mjs} +8 -8
- package/dist/lib.cjs +12 -12
- package/dist/lib.d.cts +42 -1
- package/dist/lib.d.mts +42 -1
- package/dist/lib.mjs +12 -12
- package/dist/{localHappyAgentAuth-Dm9obisi.cjs → localHappyAgentAuth-DQRWBUxQ.cjs} +1 -1
- package/dist/{localHappyAgentAuth-B2JJxlE9.mjs → localHappyAgentAuth-DgLh3xzW.mjs} +1 -1
- package/dist/{logger-BiKmiREe.mjs → logger-BKAKIZdy.mjs} +2 -2
- package/dist/{logger-BtWBoP60.cjs → logger-DP35yx-C.cjs} +2 -2
- package/dist/{machineMetadata-C0-LyMsb.cjs → machineMetadata-CZj0XwM_.cjs} +3 -3
- package/dist/{machineMetadata-CiyO9wm-.mjs → machineMetadata-DTlMMhj_.mjs} +3 -3
- package/dist/{main-BP2TBnp5.mjs → main-BIE1zeaH.mjs} +48 -48
- package/dist/{main-C7hKf5hG.cjs → main-l_nP9IQq.cjs} +48 -48
- package/dist/{mcp-Cn4k-PXb.mjs → mcp-B5F6-_7o.mjs} +20 -18
- package/dist/{mcp-DO00rr9n.cjs → mcp-KQHODyR3.cjs} +20 -18
- package/dist/{mirrorProtocol-DDtEN49F.mjs → mirrorProtocol-DDOUSWqL.mjs} +3 -3
- package/dist/{mirrorProtocol-DwO8QgLM.cjs → mirrorProtocol-duXHJeBW.cjs} +3 -3
- package/dist/{package-Djdgx8nb.cjs → package-BCJfNMlt.cjs} +7 -7
- package/dist/{package-CIW5lwaN.mjs → package-CMmhJwSf.mjs} +7 -7
- package/dist/{panels-BpfVEvwF.mjs → panels-BWxZMb_x.mjs} +5 -5
- package/dist/{panels-DMLtEOtJ.cjs → panels-CBlIJIu8.cjs} +5 -5
- package/dist/{peerTools-fYuKq3ev.cjs → peerTools-C6Y28jqG.cjs} +5 -5
- package/dist/{peerTools-CQ60fUPp.mjs → peerTools-ZJzoM48N.mjs} +5 -5
- package/dist/{persistence-D_zVC4Xz.mjs → persistence-dLgWDclq.mjs} +2 -2
- package/dist/{persistence-BOEZtiKb.cjs → persistence-iiVFxhbt.cjs} +2 -2
- package/dist/{piRunnerArgs-DE_YXvS1.mjs → piRunnerArgs-DuWYye4f.mjs} +1 -1
- package/dist/{piRunnerArgs-Dz9P62db.cjs → piRunnerArgs-DxWxgOSZ.cjs} +1 -1
- package/dist/{piRuntime-Du62fjeU.cjs → piRuntime-6UnkPaS1.cjs} +1 -1
- package/dist/{piRuntime-8SbpRmNA.mjs → piRuntime-Cbwk6bN0.mjs} +1 -1
- package/dist/{piTerminal-CGAw7WDW.cjs → piTerminal-BaoUqlM0.cjs} +22 -20
- package/dist/{piTerminal-Cl45kac0.mjs → piTerminal-Dn0qN9nb.mjs} +22 -20
- package/dist/{pushNotifications-RVpbqrxR.mjs → pushNotifications-DD9Z0CoN.mjs} +17 -3
- package/dist/{pushNotifications-B19lT5mY.cjs → pushNotifications-gcQv61e6.cjs} +17 -3
- package/dist/{query-CNWdX2r5.cjs → query-12momZSq.cjs} +1 -1
- package/dist/{query-DBRR3TOO.mjs → query-CFdlRD7b.mjs} +1 -1
- package/dist/{rateLimitWindows-DX5y23x_.mjs → rateLimitWindows-CVS-btq-.mjs} +1 -1
- package/dist/{rateLimitWindows-mfdokrkQ.cjs → rateLimitWindows-D2Gmg7jU.cjs} +1 -1
- package/dist/{reconnectGate-B8ltzSJD.cjs → reconnectGate-BkSaZdIx.cjs} +1 -1
- package/dist/{reconnectGate-DSxYUCWy.mjs → reconnectGate-m81ySKhh.mjs} +1 -1
- package/dist/{registerCommonHandlers-Y2siJGwL.cjs → registerCommonHandlers-B5p3ZZmp.cjs} +2 -2
- package/dist/{registerCommonHandlers-CQDRKlkG.mjs → registerCommonHandlers-CqLHkmG2.mjs} +2 -2
- package/dist/{registerKillSessionHandler-B0pMZOdH.cjs → registerKillSessionHandler-Bf_Q9yii.cjs} +6 -6
- package/dist/{registerKillSessionHandler-U4Dxtohy.mjs → registerKillSessionHandler-jYSuGIP1.mjs} +6 -6
- package/dist/{registerSideQuestionHandler-DM1QqTxf.mjs → registerSideQuestionHandler-CPR29B9d.mjs} +4 -4
- package/dist/{registerSideQuestionHandler--ruKhCdY.cjs → registerSideQuestionHandler-DSIw3xPW.cjs} +4 -4
- package/dist/{remoteSessionClient-T-Raoiy6.mjs → remoteSessionClient-CLuxs0_y.mjs} +5 -5
- package/dist/{remoteSessionClient-CjINaEs_.cjs → remoteSessionClient-DX-60nto.cjs} +5 -5
- package/dist/{reportProgressTool-DDfL1OY7.cjs → reportProgressTool-D1XAxeY1.cjs} +5 -5
- package/dist/{reportProgressTool-Stg0xrjF.mjs → reportProgressTool-k3g3D6cX.mjs} +5 -5
- package/dist/{run-Dq48xBtw.mjs → run-BBJqaIoY.mjs} +200 -55
- package/dist/{run-BoSVfVCZ.cjs → run-DOb_agpA.cjs} +200 -55
- package/dist/{runClaude-D8ScJdJU.cjs → runClaude-BU3Lrd5o.cjs} +53 -38
- package/dist/{runClaude-CJe5atrS.mjs → runClaude-NTvReMNp.mjs} +44 -29
- package/dist/{runClaudeDeps-4RFRR4cY.cjs → runClaudeDeps-DQV-QdDi.cjs} +129 -61
- package/dist/{runClaudeDeps-CL3goCXG.mjs → runClaudeDeps-Dh2LVY2w.mjs} +125 -57
- package/dist/{runGemini-DZv6jPxV.mjs → runGemini-CGD4bqQ3.mjs} +36 -35
- package/dist/{runGemini-BcbNxgsA.cjs → runGemini-dk877ztP.cjs} +36 -35
- package/dist/{runOpenClaw-CRqCoj-_.mjs → runOpenClaw-6MAJ_tHi.mjs} +18 -18
- package/dist/{runOpenClaw-BeSivE0X.cjs → runOpenClaw-CQakHPPq.cjs} +18 -18
- package/dist/{sandbox-xflHChws.cjs → sandbox-8DeDre0R.cjs} +4 -4
- package/dist/{sandbox-DAvJJZcV.mjs → sandbox-B3YMD9I6.mjs} +4 -4
- package/dist/selfCheck-BCKIF6ST.mjs +89 -0
- package/dist/{selfCheck-DZwdgBg0.cjs → selfCheck-BpvUNBmv.cjs} +40 -40
- package/dist/{send-ConAuYqL.cjs → send-Bym_IU4n.cjs} +8 -8
- package/dist/{send-Co_l_Nmg.mjs → send-DgrbVZzC.mjs} +8 -8
- package/dist/{server-by6kezmM.cjs → server-BY-FubRe.cjs} +6 -6
- package/dist/{server-D1Qrmxl7.mjs → server-CmAgeEhS.mjs} +4 -4
- package/dist/{sessionLock-DFrwAnwR.mjs → sessionLock-BMtAQ4bW.mjs} +21 -4
- package/dist/{sessionLock-Db_uQcUP.cjs → sessionLock-WXtjQC9q.cjs} +22 -3
- package/dist/{sessionOps-CptDjoZi.cjs → sessionOps-BEVzE38e.cjs} +4 -4
- package/dist/{sessionOps-C7nps7qG.mjs → sessionOps-BxLhHEhM.mjs} +4 -4
- package/dist/{sessionProvider-BaJq1AnY.mjs → sessionProvider-B1tL5K5f.mjs} +10 -10
- package/dist/{sessionProvider-D9nsAE14.cjs → sessionProvider-DCnZFxwe.cjs} +10 -10
- package/dist/{sessionScanner-BOb33NVJ.mjs → sessionScanner-Ctm9w-AJ.mjs} +3 -3
- package/dist/{sessionScanner-C6OVO0Ne.cjs → sessionScanner-eX2f-j0u.cjs} +3 -3
- package/dist/{sessions-qVHDXJa6.cjs → sessions-BG8r7uht.cjs} +10 -10
- package/dist/{sessions-GCql_3Dl.mjs → sessions-BuxOqRcc.mjs} +10 -10
- package/dist/{setupOfflineReconnection-B8QKqc9a.cjs → setupOfflineReconnection-65k1yEFn.cjs} +2 -2
- package/dist/{setupOfflineReconnection-lu0YbS7m.mjs → setupOfflineReconnection-Dd4NCN9i.mjs} +2 -2
- package/dist/{spawn-tL-724RS.cjs → spawn-0YaC-DQg.cjs} +15 -15
- package/dist/{spawn-C9NSlg99.mjs → spawn-wys_MPgK.mjs} +15 -15
- package/dist/{spawnAgents-BclZYkov.mjs → spawnAgents-CcFKtKdX.mjs} +2 -1
- package/dist/{spawnAgents-DvbEDCIq.cjs → spawnAgents-D4lR468W.cjs} +2 -1
- package/dist/{spawnHappyCLI-D7EO8s4E.cjs → spawnHappyCLI-Bf_N42fi.cjs} +1 -1
- package/dist/{spawnHappyCLI-jXUKLUT5.mjs → spawnHappyCLI-EvPb0jB3.mjs} +1 -1
- package/dist/{startFileWatcher-C7eFs4hA.mjs → startFileWatcher-GF4BNFA1.mjs} +1 -1
- package/dist/{startFileWatcher-6NpLGxg5.cjs → startFileWatcher-ikipjpDk.cjs} +1 -1
- package/dist/{startupSessionCreate-C5wdvraY.cjs → startupSessionCreate-CHU23k6u.cjs} +3 -3
- package/dist/{startupSessionCreate-D3ph1DtL.mjs → startupSessionCreate-Dp3_kvi_.mjs} +3 -3
- package/dist/{store-Cpb1LMNW.cjs → store-DGMILdMn.cjs} +1 -1
- package/dist/{store-DWmjM4Ex.mjs → store-Fge1h9wy.mjs} +1 -1
- package/dist/{streamRelay-DdGOsW8v.mjs → streamRelay-MaaYNNuh.mjs} +1 -1
- package/dist/{streamRelay-4XiiNB3N.cjs → streamRelay-keuifCPQ.cjs} +1 -1
- package/dist/{sync-BIXH8ijr.mjs → sync-Co0wRhGu.mjs} +1 -1
- package/dist/{sync-ni64k2OI.cjs → sync-Dm6GaS8P.cjs} +1 -1
- package/dist/{systemPrompt-B_vnlIr1.mjs → systemPrompt-5cZbY0sf.mjs} +2 -2
- package/dist/{systemPrompt-DuoULaqr.cjs → systemPrompt-Ds7HcfDZ.cjs} +2 -2
- package/dist/{teams-CsR_8p3Q.mjs → teams-DBWFUOC3.mjs} +20 -9
- package/dist/{teams-DLfcbOMh.cjs → teams-nrcZL-1X.cjs} +20 -9
- package/dist/{template-3fV9bi0X.cjs → template-ChUotPTL.cjs} +1 -1
- package/dist/{template-CtRLg2PG.mjs → template-D8fzlO58.mjs} +1 -1
- package/dist/{time-Che8GhII.mjs → time-Cn0mV-di.mjs} +1 -1
- package/dist/{time-BMCY7zJL.cjs → time-NSglRbyr.cjs} +1 -1
- package/dist/{titleGenerator-HVEN1e7o.cjs → titleGenerator-CMIUB04_.cjs} +3 -3
- package/dist/{titleGenerator-B9LckLDq.mjs → titleGenerator-hmxUR3rU.mjs} +2 -2
- package/dist/{todo-bc7db5NN.mjs → todo-CDdBityL.mjs} +8 -8
- package/dist/{todo-B8byb_cy.cjs → todo-D5BoNMb7.cjs} +8 -8
- package/dist/{tools-BAMaBbbP.mjs → tools-BmQbzAfY.mjs} +1 -1
- package/dist/{tools--RN1SFkD.cjs → tools-CLkNfafW.cjs} +1 -1
- package/dist/{uninstall-UC0Q8YTj.cjs → uninstall-DCx_qNMZ.cjs} +3 -3
- package/dist/{uninstall-Dv4C-W9z.mjs → uninstall-DE0SH2qs.mjs} +3 -3
- package/dist/{wrapperAccount-nGGMJDBF.cjs → wrapperAccount-BHMM9I6g.cjs} +2 -2
- package/dist/{wrapperAccount-z8Swrd08.mjs → wrapperAccount-CwaA-n1S.mjs} +2 -2
- package/package.json +7 -7
- package/dist/permissionMode-CH4FoZfU.mjs +0 -80
- package/dist/permissionMode-CrV-XuMs.cjs +0 -87
- package/dist/selfCheck-BKOIROoJ.mjs +0 -89
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
import { io } from 'socket.io-client';
|
|
2
2
|
import { a as webPanelsSignature } from './webPanels-B2_C2-3g.mjs';
|
|
3
|
-
import { l as logger } from './logger-
|
|
4
|
-
import { R as RpcHandlerManager, i as isRateQuotaCode, p as pauseForRateQuota, s as socketConnectGuard, c as connectGuarded, a as answerSocketRequest, e as shouldReconnect, f as createReconnectGate, d as describeSocketAckDrop } from './reconnectGate-
|
|
5
|
-
import { i as isClaudeSessionId, s as stableVersion, a as sanitizeTagList, p as projectField, b as pickMirrorForTerminal, l as liveSnapshotChanged, c as sanitizeLiveSnapshot, d as serializeLiveSnapshot, r as registerWorktreeHandlers, e as configureWorktreeService, f as summarizeSpawnSessionForLog, g as parseMirrorSendParams } from './mirrorProtocol-
|
|
6
|
-
import { c as configuration } from './configuration-
|
|
3
|
+
import { l as logger } from './logger-BKAKIZdy.mjs';
|
|
4
|
+
import { R as RpcHandlerManager, i as isRateQuotaCode, p as pauseForRateQuota, s as socketConnectGuard, c as connectGuarded, a as answerSocketRequest, e as shouldReconnect, f as createReconnectGate, d as describeSocketAckDrop } from './reconnectGate-m81ySKhh.mjs';
|
|
5
|
+
import { i as isClaudeSessionId, s as stableVersion, a as sanitizeTagList, p as projectField, b as pickMirrorForTerminal, l as liveSnapshotChanged, c as sanitizeLiveSnapshot, d as serializeLiveSnapshot, r as registerWorktreeHandlers, e as configureWorktreeService, f as summarizeSpawnSessionForLog, g as parseMirrorSendParams } from './mirrorProtocol-DDOUSWqL.mjs';
|
|
6
|
+
import { c as configuration } from './configuration-H8q1sMwk.mjs';
|
|
7
7
|
import { w as withCurrentCliUpdateState } from './cliUpdate-Y34VGe9Y.mjs';
|
|
8
|
-
import { r as registerCommonHandlers } from './registerCommonHandlers-
|
|
8
|
+
import { r as registerCommonHandlers } from './registerCommonHandlers-CqLHkmG2.mjs';
|
|
9
9
|
import { stat, readdir, lstat, open, readFile, rm, mkdir, chmod, writeFile, rename } from 'node:fs/promises';
|
|
10
10
|
import { join, isAbsolute, resolve } from 'node:path';
|
|
11
11
|
import os, { homedir } from 'node:os';
|
|
12
12
|
import { f as fsMkdir } from './fsMkdir-DumgLTzR.mjs';
|
|
13
13
|
import { spawn, execFile, spawnSync } from 'node:child_process';
|
|
14
|
-
import { r as readSettings, c as readPersistedSessions, p as readTrackedClaudeSessionIds, q as readTrackedCodexThreadIds } from './persistence-
|
|
14
|
+
import { r as readSettings, c as readPersistedSessions, p as readTrackedClaudeSessionIds, q as readTrackedCodexThreadIds } from './persistence-dLgWDclq.mjs';
|
|
15
15
|
import { M as ModelConfigError } from './fileStore-5qpetZS0.mjs';
|
|
16
|
-
import {
|
|
17
|
-
import { a as AccountError } from './accountService-
|
|
16
|
+
import { am as AGENT_PROFILE_RPC, an as RelayCandidatesResponseSchema, ah as RelayAssignmentResponseSchema, ag as ReleaseDrainNoticeSchema } from './index-DWk-WTU-.mjs';
|
|
17
|
+
import { a as AccountError } from './accountService-CqrWNH8K.mjs';
|
|
18
18
|
import { e as encodeBase64, g as encrypt, h as decrypt, d as decodeBase64 } from './authRelay-DhQhkBvX.mjs';
|
|
19
19
|
import { p as prepareClipboardText, d as prepareClipboardHistoryText } from './limits-DIo7rEBR.mjs';
|
|
20
|
-
import { b as backoff, d as delay } from './time-
|
|
20
|
+
import { b as backoff, d as delay } from './time-Cn0mV-di.mjs';
|
|
21
21
|
import * as pty from 'node-pty';
|
|
22
22
|
import { a as attachStartupCommand, v as validateTerminalTags, d as deriveAutoTitle, T as TMUX_SESSION_ID_RE, i as isSafeTmuxSessionName, b as isVhSessionName, U as USER_SESSIONS_FORMAT, p as parseUserSessions, L as LIST_SESSIONS_FORMAT, c as parseSessionListLine, e as LIST_FIELD_SEP, s as sendToVhTerminal } from './terminals-Dc38XmZv.mjs';
|
|
23
23
|
import { t as tmuxArgs, V as VH_TMUX_SOCKET_ENV, v as validateTerminalProjectId, a as scrubTmuxClientEnv } from './tmuxSocket-BmZyixRM.mjs';
|
|
24
|
-
import { locateClaudeConversation, refreshAgentHomes } from './index-
|
|
24
|
+
import { locateClaudeConversation, refreshAgentHomes } from './index-DCvq8Cfw.mjs';
|
|
25
25
|
import { randomBytes } from 'node:crypto';
|
|
26
26
|
import { readdirSync, unlinkSync, existsSync, mkdirSync, writeFileSync, readFileSync, statSync, chmodSync, renameSync, rmSync, accessSync, constants } from 'node:fs';
|
|
27
27
|
import axios from 'axios';
|
|
28
28
|
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
29
29
|
import { a as isValidTerminalId } from './ids-DU6sLx4C.mjs';
|
|
30
30
|
import { d as detectCLIAvailability } from './detectCLI-CSGMlV51.mjs';
|
|
31
|
-
import { d as detectResumeSupport } from './localHappyAgentAuth-
|
|
31
|
+
import { d as detectResumeSupport } from './localHappyAgentAuth-DgLh3xzW.mjs';
|
|
32
32
|
import { g as getProjectPath, a as getClaudeProjectsRoot } from './path-D2wdaNSk.mjs';
|
|
33
33
|
import { i as isVeryHappyOneShotPrompt } from './oneShotPrompts-DT4p6RNd.mjs';
|
|
34
|
-
import { f as forkSession, F as ForkSourceMissingError, d as discardForkedSession, l as listClaudeRewindPoints, b as forkAndTruncateSession, c as ForkTruncateUuidNotFoundError, e as forkBeforeUserMessage, a as forkCompletedTurns } from './claudeSessionFork-
|
|
35
|
-
import { C as CodexAppServerClient } from './codexAppServerClient-
|
|
34
|
+
import { f as forkSession, F as ForkSourceMissingError, d as discardForkedSession, l as listClaudeRewindPoints, b as forkAndTruncateSession, c as ForkTruncateUuidNotFoundError, e as forkBeforeUserMessage, a as forkCompletedTurns } from './claudeSessionFork-BK4U655i.mjs';
|
|
35
|
+
import { C as CodexAppServerClient } from './codexAppServerClient-BeRimnu9.mjs';
|
|
36
36
|
import { f as forkCodexThread, C as CodexForkRewindPointNotFoundError, l as listCodexRewindPoints, b as forkCodexBeforeUserMessage, a as forkCodexCompletedTurns } from './codexThreadFork-CVzAqELg.mjs';
|
|
37
|
-
import { p as planRateLimitWrite, m as mergeRateLimitReports } from './rateLimitWindows-
|
|
37
|
+
import { p as planRateLimitWrite, m as mergeRateLimitReports } from './rateLimitWindows-CVS-btq-.mjs';
|
|
38
38
|
import 'chalk';
|
|
39
39
|
import 'node:util';
|
|
40
40
|
import 'os';
|
|
41
41
|
import 'child_process';
|
|
42
|
-
import './package-
|
|
42
|
+
import './package-CMmhJwSf.mjs';
|
|
43
43
|
import 'util';
|
|
44
44
|
import 'fs/promises';
|
|
45
45
|
import 'crypto';
|
|
@@ -47,9 +47,9 @@ import 'path';
|
|
|
47
47
|
import 'cross-spawn';
|
|
48
48
|
import 'zod';
|
|
49
49
|
import '@paralleldrive/cuid2';
|
|
50
|
-
import './claudeAccountEnv-
|
|
51
|
-
import './store-
|
|
52
|
-
import './codexAccount-
|
|
50
|
+
import './claudeAccountEnv-C6Wl-ZbT.mjs';
|
|
51
|
+
import './store-Fge1h9wy.mjs';
|
|
52
|
+
import './codexAccount-BPQ-lPhH.mjs';
|
|
53
53
|
import 'node:readline';
|
|
54
54
|
import 'tweetnacl';
|
|
55
55
|
import './terminalTitleSuggest-CeKsX_V6.mjs';
|
|
@@ -7029,6 +7029,18 @@ function tmuxNewSessionArgs(session, cols, rows, cwd, envFlags, shell) {
|
|
|
7029
7029
|
}
|
|
7030
7030
|
return args;
|
|
7031
7031
|
}
|
|
7032
|
+
function viewOnlyGeometry(live, tmuxWindow, requested) {
|
|
7033
|
+
if (live) return { cols: live.cols, rows: live.rows };
|
|
7034
|
+
if (tmuxWindow) return tmuxWindow;
|
|
7035
|
+
return requested;
|
|
7036
|
+
}
|
|
7037
|
+
function parseTmuxWindowSize(out) {
|
|
7038
|
+
const m = /^(\d+)\s+(\d+)\s*$/.exec((out ?? "").trim());
|
|
7039
|
+
if (!m) return null;
|
|
7040
|
+
const cols = Number(m[1]);
|
|
7041
|
+
const rows = Number(m[2]);
|
|
7042
|
+
return cols >= 2 && rows >= 2 && cols <= 1e4 && rows <= 1e4 ? { cols, rows } : null;
|
|
7043
|
+
}
|
|
7032
7044
|
function shouldUseDirectPtyFallback(attachOnly, createdNew, sessionAlive) {
|
|
7033
7045
|
return !attachOnly && !createdNew && !sessionAlive;
|
|
7034
7046
|
}
|
|
@@ -8107,6 +8119,41 @@ class WebTerminalManager {
|
|
|
8107
8119
|
resetSubscribers() {
|
|
8108
8120
|
for (const s of this.terminals.values()) s.subscribers = 0;
|
|
8109
8121
|
}
|
|
8122
|
+
/** B-878: share grants that attached a terminal view-only, by terminal id. */
|
|
8123
|
+
viewOnlyShares = /* @__PURE__ */ new Map();
|
|
8124
|
+
noteShareAttach(terminalId, grantId, viewOnly) {
|
|
8125
|
+
if (typeof grantId !== "string" || !grantId) return;
|
|
8126
|
+
const set = this.viewOnlyShares.get(terminalId) ?? /* @__PURE__ */ new Set();
|
|
8127
|
+
if (viewOnly) set.add(grantId);
|
|
8128
|
+
else set.delete(grantId);
|
|
8129
|
+
if (set.size > 0) this.viewOnlyShares.set(terminalId, set);
|
|
8130
|
+
else this.viewOnlyShares.delete(terminalId);
|
|
8131
|
+
}
|
|
8132
|
+
/**
|
|
8133
|
+
* B-878 second layer: input / resize tagged with a grant that attached this
|
|
8134
|
+
* terminal view-only is dropped (the broker should never forward it). Logs
|
|
8135
|
+
* the fact only — never the bytes.
|
|
8136
|
+
*/
|
|
8137
|
+
dropViewOnlyShareEvent(kind, terminalId, grantId) {
|
|
8138
|
+
if (typeof terminalId !== "string" || typeof grantId !== "string") return false;
|
|
8139
|
+
if (!this.viewOnlyShares.get(terminalId)?.has(grantId)) return false;
|
|
8140
|
+
logger.debug(`[WEB TERMINAL] dropped ${kind} from a view-only share on ${terminalId}`);
|
|
8141
|
+
return true;
|
|
8142
|
+
}
|
|
8143
|
+
/** B-878: the tmux window's current size for `vh-<id>`, or null. */
|
|
8144
|
+
readTmuxWindowSize(id) {
|
|
8145
|
+
if (!isTmuxAvailable()) return null;
|
|
8146
|
+
try {
|
|
8147
|
+
const r = spawnSync(
|
|
8148
|
+
"tmux",
|
|
8149
|
+
tmuxArgs(["display-message", "-p", "-t", `=vh-${id}:`, "#{window_width} #{window_height}"]),
|
|
8150
|
+
{ encoding: "utf8", timeout: TMUX_PROBE_TIMEOUT_MS, env: ptyEnv() }
|
|
8151
|
+
);
|
|
8152
|
+
return r.status === 0 ? parseTmuxWindowSize(r.stdout) : null;
|
|
8153
|
+
} catch {
|
|
8154
|
+
return null;
|
|
8155
|
+
}
|
|
8156
|
+
}
|
|
8110
8157
|
/** Update the emitter when the socket reconnects. */
|
|
8111
8158
|
setEmit(emit) {
|
|
8112
8159
|
this.emit = emit;
|
|
@@ -8123,6 +8170,23 @@ class WebTerminalManager {
|
|
|
8123
8170
|
const id = opts.terminalId && /^[a-zA-Z0-9_-]{1,64}$/.test(opts.terminalId) ? opts.terminalId : randomBytes(5).toString("hex");
|
|
8124
8171
|
const lines = opts.streamMode === "lines";
|
|
8125
8172
|
const existing = this.terminals.get(id);
|
|
8173
|
+
if (!opts.viewOnly) this.noteShareAttach(id, opts.shareGrantId, false);
|
|
8174
|
+
if (opts.viewOnly) {
|
|
8175
|
+
const geometry = viewOnlyGeometry(existing ? { cols: existing.cols, rows: existing.rows } : void 0, existing ? null : this.readTmuxWindowSize(id), { cols, rows });
|
|
8176
|
+
const result = await this.open({
|
|
8177
|
+
...opts,
|
|
8178
|
+
viewOnly: false,
|
|
8179
|
+
attachOnly: true,
|
|
8180
|
+
shareGrantId: void 0,
|
|
8181
|
+
startupCommand: void 0,
|
|
8182
|
+
attachTmux: void 0,
|
|
8183
|
+
projectId: void 0,
|
|
8184
|
+
cols: geometry.cols,
|
|
8185
|
+
rows: geometry.rows
|
|
8186
|
+
});
|
|
8187
|
+
this.noteShareAttach(result.terminalId, opts.shareGrantId, true);
|
|
8188
|
+
return { ...result, viewOnly: true, paneCols: result.paneCols ?? geometry.cols, paneRows: result.paneRows ?? geometry.rows };
|
|
8189
|
+
}
|
|
8126
8190
|
if (existing) {
|
|
8127
8191
|
const echo2 = opts.attachTmux && !(opts.attachOnly || opts.resub) && existing.attachedTmux?.name === opts.attachTmux.name ? { attachedTmux: existing.attachedTmux } : {};
|
|
8128
8192
|
if (!opts.resub || existing.subscribers === 0) existing.subscribers += 1;
|
|
@@ -10699,6 +10763,14 @@ class ApiMachineClient {
|
|
|
10699
10763
|
setHarnessInstallHandler(handler) {
|
|
10700
10764
|
this.rpcHandlerManager.registerHandler("harness-install", (params) => handler(params));
|
|
10701
10765
|
}
|
|
10766
|
+
/** B-877 「退出团队模式」 for a team lead session on this machine (Web session ⋯ / team menu). */
|
|
10767
|
+
setTeamExitHandler(handler) {
|
|
10768
|
+
this.rpcHandlerManager.registerHandler("team-exit-session", async (params) => {
|
|
10769
|
+
const sessionId = params?.sessionId;
|
|
10770
|
+
if (typeof sessionId !== "string" || !/^[a-zA-Z0-9_-]{1,128}$/.test(sessionId)) throw new Error("Session ID is required");
|
|
10771
|
+
return handler(sessionId);
|
|
10772
|
+
});
|
|
10773
|
+
}
|
|
10702
10774
|
setCliUpdateRetryHandler(handler) {
|
|
10703
10775
|
this.rpcHandlerManager.registerHandler("cli-update-retry", (params) => handler(params && typeof params === "object" ? params.version : void 0));
|
|
10704
10776
|
}
|
|
@@ -10971,7 +11043,7 @@ class ApiMachineClient {
|
|
|
10971
11043
|
this.syncResumeSessionRpcRegistration();
|
|
10972
11044
|
this.syncRestartSessionRpcRegistration();
|
|
10973
11045
|
this.rpcHandlerManager.registerHandler("open-terminal", async (params) => {
|
|
10974
|
-
const { terminalId, cols, rows, cwd, fromSeq, encStream, startupCommand, resub, attachOnly, streamMode, attachTmux, projectId } = params || {};
|
|
11046
|
+
const { terminalId, cols, rows, cwd, fromSeq, encStream, startupCommand, resub, attachOnly, streamMode, attachTmux, projectId, viewOnly, shareGrantId } = params || {};
|
|
10975
11047
|
const attach = attachTmux && typeof attachTmux === "object" && typeof attachTmux.id === "string" && typeof attachTmux.name === "string" ? { id: attachTmux.id, name: attachTmux.name } : void 0;
|
|
10976
11048
|
const result = await this.webTerminal.open({
|
|
10977
11049
|
terminalId,
|
|
@@ -10985,7 +11057,10 @@ class ApiMachineClient {
|
|
|
10985
11057
|
streamMode: streamMode === "lines" ? "lines" : void 0,
|
|
10986
11058
|
...attach ? { attachTmux: attach } : {},
|
|
10987
11059
|
// B-868: create-only; validated inside open().
|
|
10988
|
-
...typeof projectId === "string" ? { projectId } : {}
|
|
11060
|
+
...typeof projectId === "string" ? { projectId } : {},
|
|
11061
|
+
// B-878: share viewer — attach without resizing the pane.
|
|
11062
|
+
...viewOnly === true ? { viewOnly: true } : {},
|
|
11063
|
+
...typeof shareGrantId === "string" && shareGrantId.length <= 128 ? { shareGrantId } : {}
|
|
10989
11064
|
});
|
|
10990
11065
|
if (encStream) {
|
|
10991
11066
|
this.encTerminals.add(result.terminalId);
|
|
@@ -11613,6 +11688,11 @@ class ApiMachineClient {
|
|
|
11613
11688
|
historySearch: { rpcAvailable: true, detectedAt: now },
|
|
11614
11689
|
// B-868 capability flag: `set-terminal-project` (same restamp discipline).
|
|
11615
11690
|
terminalProjects: { rpcAvailable: true, detectedAt: now },
|
|
11691
|
+
// B-877b capability flag: `team-exit-session` (same restamp discipline); the web
|
|
11692
|
+
// asks an older CLI to update at once instead of waiting out the server's 15 s RPC grace.
|
|
11693
|
+
teamExit: { rpcAvailable: true, detectedAt: now },
|
|
11694
|
+
// B-878 capability flag: `open-terminal.viewOnly` (same restamp discipline).
|
|
11695
|
+
terminalViewOnly: { rpcAvailable: true, detectedAt: now },
|
|
11616
11696
|
// B-084: closed records survive daemon restarts (persisted
|
|
11617
11697
|
// in closed-terminals.json), so the connect snapshot ships
|
|
11618
11698
|
// them too — not just the incremental pushes.
|
|
@@ -11817,6 +11897,7 @@ class ApiMachineClient {
|
|
|
11817
11897
|
}
|
|
11818
11898
|
bindMachineCommandHandlers(socket) {
|
|
11819
11899
|
socket.on("terminal-input", (data) => {
|
|
11900
|
+
if (this.webTerminal.dropViewOnlyShareEvent("input", data?.terminalId, data?.shareGrantId)) return;
|
|
11820
11901
|
let payload = data.data;
|
|
11821
11902
|
if (data.enc) {
|
|
11822
11903
|
const dec = decrypt(this.machine.encryptionKey, this.machine.encryptionVariant, decodeBase64(data.data));
|
|
@@ -11825,7 +11906,10 @@ class ApiMachineClient {
|
|
|
11825
11906
|
}
|
|
11826
11907
|
this.webTerminal.write(data.terminalId, payload);
|
|
11827
11908
|
});
|
|
11828
|
-
socket.on("terminal-resize", (data) =>
|
|
11909
|
+
socket.on("terminal-resize", (data) => {
|
|
11910
|
+
if (this.webTerminal.dropViewOnlyShareEvent("resize", data?.terminalId, data?.shareGrantId)) return;
|
|
11911
|
+
this.webTerminal.resize(data.terminalId, data.cols, data.rows);
|
|
11912
|
+
});
|
|
11829
11913
|
socket.on("terminal-close", (data) => this.webTerminal.unsubscribe(data.terminalId));
|
|
11830
11914
|
socket.on("session-archive", (data) => {
|
|
11831
11915
|
if (typeof data?.sessionId !== "string") return;
|
|
@@ -2,46 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
var socket_ioClient = require('socket.io-client');
|
|
4
4
|
var webPanels = require('./webPanels-FCgFKvVe.cjs');
|
|
5
|
-
var logger = require('./logger-
|
|
6
|
-
var reconnectGate = require('./reconnectGate-
|
|
7
|
-
var mirrorProtocol = require('./mirrorProtocol-
|
|
8
|
-
var configuration = require('./configuration-
|
|
5
|
+
var logger = require('./logger-DP35yx-C.cjs');
|
|
6
|
+
var reconnectGate = require('./reconnectGate-BkSaZdIx.cjs');
|
|
7
|
+
var mirrorProtocol = require('./mirrorProtocol-duXHJeBW.cjs');
|
|
8
|
+
var configuration = require('./configuration-Fx61b4MJ.cjs');
|
|
9
9
|
var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
|
|
10
|
-
var registerCommonHandlers = require('./registerCommonHandlers-
|
|
10
|
+
var registerCommonHandlers = require('./registerCommonHandlers-B5p3ZZmp.cjs');
|
|
11
11
|
var promises = require('node:fs/promises');
|
|
12
12
|
var path = require('node:path');
|
|
13
13
|
var os = require('node:os');
|
|
14
14
|
var fsMkdir = require('./fsMkdir-0K3yENml.cjs');
|
|
15
15
|
var node_child_process = require('node:child_process');
|
|
16
|
-
var persistence = require('./persistence-
|
|
16
|
+
var persistence = require('./persistence-iiVFxhbt.cjs');
|
|
17
17
|
var fileStore = require('./fileStore-7qhnbs6N.cjs');
|
|
18
|
-
var index = require('./index-
|
|
19
|
-
var accountService = require('./accountService-
|
|
18
|
+
var index = require('./index-BYL_X3gP.cjs');
|
|
19
|
+
var accountService = require('./accountService-SOeB_21A.cjs');
|
|
20
20
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
21
21
|
var limits = require('./limits-C-a7gr04.cjs');
|
|
22
|
-
var time = require('./time-
|
|
22
|
+
var time = require('./time-NSglRbyr.cjs');
|
|
23
23
|
var pty = require('node-pty');
|
|
24
24
|
var terminals = require('./terminals-dK3Lrjfp.cjs');
|
|
25
25
|
var tmuxSocket = require('./tmuxSocket-Dg11Olx0.cjs');
|
|
26
|
-
var index$1 = require('./index-
|
|
26
|
+
var index$1 = require('./index-bVMcFi7v.cjs');
|
|
27
27
|
var node_crypto = require('node:crypto');
|
|
28
28
|
var node_fs = require('node:fs');
|
|
29
29
|
var axios = require('axios');
|
|
30
30
|
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
31
31
|
var ids = require('./ids-B6ZC0HGt.cjs');
|
|
32
32
|
var detectCLI = require('./detectCLI-BuYR_Qxe.cjs');
|
|
33
|
-
var localHappyAgentAuth = require('./localHappyAgentAuth-
|
|
33
|
+
var localHappyAgentAuth = require('./localHappyAgentAuth-DQRWBUxQ.cjs');
|
|
34
34
|
var path$1 = require('./path-B7zW-WwE.cjs');
|
|
35
35
|
var oneShotPrompts = require('./oneShotPrompts-CL0dip9C.cjs');
|
|
36
|
-
var claudeSessionFork = require('./claudeSessionFork-
|
|
37
|
-
var codexAppServerClient = require('./codexAppServerClient-
|
|
36
|
+
var claudeSessionFork = require('./claudeSessionFork-unEBLW0t.cjs');
|
|
37
|
+
var codexAppServerClient = require('./codexAppServerClient-6aQelpRl.cjs');
|
|
38
38
|
var codexThreadFork = require('./codexThreadFork-C6ZmcT2z.cjs');
|
|
39
|
-
var rateLimitWindows = require('./rateLimitWindows-
|
|
39
|
+
var rateLimitWindows = require('./rateLimitWindows-D2Gmg7jU.cjs');
|
|
40
40
|
require('chalk');
|
|
41
41
|
require('node:util');
|
|
42
42
|
require('os');
|
|
43
43
|
require('child_process');
|
|
44
|
-
require('./package-
|
|
44
|
+
require('./package-BCJfNMlt.cjs');
|
|
45
45
|
require('util');
|
|
46
46
|
require('fs/promises');
|
|
47
47
|
require('crypto');
|
|
@@ -49,9 +49,9 @@ require('path');
|
|
|
49
49
|
require('cross-spawn');
|
|
50
50
|
require('zod');
|
|
51
51
|
require('@paralleldrive/cuid2');
|
|
52
|
-
require('./claudeAccountEnv-
|
|
53
|
-
require('./store-
|
|
54
|
-
require('./codexAccount-
|
|
52
|
+
require('./claudeAccountEnv-BTZjHTpF.cjs');
|
|
53
|
+
require('./store-DGMILdMn.cjs');
|
|
54
|
+
require('./codexAccount-BjaHvmKH.cjs');
|
|
55
55
|
require('node:readline');
|
|
56
56
|
require('tweetnacl');
|
|
57
57
|
require('./terminalTitleSuggest-DhvRFX3H.cjs');
|
|
@@ -7050,6 +7050,18 @@ function tmuxNewSessionArgs(session, cols, rows, cwd, envFlags, shell) {
|
|
|
7050
7050
|
}
|
|
7051
7051
|
return args;
|
|
7052
7052
|
}
|
|
7053
|
+
function viewOnlyGeometry(live, tmuxWindow, requested) {
|
|
7054
|
+
if (live) return { cols: live.cols, rows: live.rows };
|
|
7055
|
+
if (tmuxWindow) return tmuxWindow;
|
|
7056
|
+
return requested;
|
|
7057
|
+
}
|
|
7058
|
+
function parseTmuxWindowSize(out) {
|
|
7059
|
+
const m = /^(\d+)\s+(\d+)\s*$/.exec((out ?? "").trim());
|
|
7060
|
+
if (!m) return null;
|
|
7061
|
+
const cols = Number(m[1]);
|
|
7062
|
+
const rows = Number(m[2]);
|
|
7063
|
+
return cols >= 2 && rows >= 2 && cols <= 1e4 && rows <= 1e4 ? { cols, rows } : null;
|
|
7064
|
+
}
|
|
7053
7065
|
function shouldUseDirectPtyFallback(attachOnly, createdNew, sessionAlive) {
|
|
7054
7066
|
return !attachOnly && !createdNew && !sessionAlive;
|
|
7055
7067
|
}
|
|
@@ -8128,6 +8140,41 @@ class WebTerminalManager {
|
|
|
8128
8140
|
resetSubscribers() {
|
|
8129
8141
|
for (const s of this.terminals.values()) s.subscribers = 0;
|
|
8130
8142
|
}
|
|
8143
|
+
/** B-878: share grants that attached a terminal view-only, by terminal id. */
|
|
8144
|
+
viewOnlyShares = /* @__PURE__ */ new Map();
|
|
8145
|
+
noteShareAttach(terminalId, grantId, viewOnly) {
|
|
8146
|
+
if (typeof grantId !== "string" || !grantId) return;
|
|
8147
|
+
const set = this.viewOnlyShares.get(terminalId) ?? /* @__PURE__ */ new Set();
|
|
8148
|
+
if (viewOnly) set.add(grantId);
|
|
8149
|
+
else set.delete(grantId);
|
|
8150
|
+
if (set.size > 0) this.viewOnlyShares.set(terminalId, set);
|
|
8151
|
+
else this.viewOnlyShares.delete(terminalId);
|
|
8152
|
+
}
|
|
8153
|
+
/**
|
|
8154
|
+
* B-878 second layer: input / resize tagged with a grant that attached this
|
|
8155
|
+
* terminal view-only is dropped (the broker should never forward it). Logs
|
|
8156
|
+
* the fact only — never the bytes.
|
|
8157
|
+
*/
|
|
8158
|
+
dropViewOnlyShareEvent(kind, terminalId, grantId) {
|
|
8159
|
+
if (typeof terminalId !== "string" || typeof grantId !== "string") return false;
|
|
8160
|
+
if (!this.viewOnlyShares.get(terminalId)?.has(grantId)) return false;
|
|
8161
|
+
logger.logger.debug(`[WEB TERMINAL] dropped ${kind} from a view-only share on ${terminalId}`);
|
|
8162
|
+
return true;
|
|
8163
|
+
}
|
|
8164
|
+
/** B-878: the tmux window's current size for `vh-<id>`, or null. */
|
|
8165
|
+
readTmuxWindowSize(id) {
|
|
8166
|
+
if (!isTmuxAvailable()) return null;
|
|
8167
|
+
try {
|
|
8168
|
+
const r = node_child_process.spawnSync(
|
|
8169
|
+
"tmux",
|
|
8170
|
+
tmuxSocket.tmuxArgs(["display-message", "-p", "-t", `=vh-${id}:`, "#{window_width} #{window_height}"]),
|
|
8171
|
+
{ encoding: "utf8", timeout: TMUX_PROBE_TIMEOUT_MS, env: ptyEnv() }
|
|
8172
|
+
);
|
|
8173
|
+
return r.status === 0 ? parseTmuxWindowSize(r.stdout) : null;
|
|
8174
|
+
} catch {
|
|
8175
|
+
return null;
|
|
8176
|
+
}
|
|
8177
|
+
}
|
|
8131
8178
|
/** Update the emitter when the socket reconnects. */
|
|
8132
8179
|
setEmit(emit) {
|
|
8133
8180
|
this.emit = emit;
|
|
@@ -8144,6 +8191,23 @@ class WebTerminalManager {
|
|
|
8144
8191
|
const id = opts.terminalId && /^[a-zA-Z0-9_-]{1,64}$/.test(opts.terminalId) ? opts.terminalId : node_crypto.randomBytes(5).toString("hex");
|
|
8145
8192
|
const lines = opts.streamMode === "lines";
|
|
8146
8193
|
const existing = this.terminals.get(id);
|
|
8194
|
+
if (!opts.viewOnly) this.noteShareAttach(id, opts.shareGrantId, false);
|
|
8195
|
+
if (opts.viewOnly) {
|
|
8196
|
+
const geometry = viewOnlyGeometry(existing ? { cols: existing.cols, rows: existing.rows } : void 0, existing ? null : this.readTmuxWindowSize(id), { cols, rows });
|
|
8197
|
+
const result = await this.open({
|
|
8198
|
+
...opts,
|
|
8199
|
+
viewOnly: false,
|
|
8200
|
+
attachOnly: true,
|
|
8201
|
+
shareGrantId: void 0,
|
|
8202
|
+
startupCommand: void 0,
|
|
8203
|
+
attachTmux: void 0,
|
|
8204
|
+
projectId: void 0,
|
|
8205
|
+
cols: geometry.cols,
|
|
8206
|
+
rows: geometry.rows
|
|
8207
|
+
});
|
|
8208
|
+
this.noteShareAttach(result.terminalId, opts.shareGrantId, true);
|
|
8209
|
+
return { ...result, viewOnly: true, paneCols: result.paneCols ?? geometry.cols, paneRows: result.paneRows ?? geometry.rows };
|
|
8210
|
+
}
|
|
8147
8211
|
if (existing) {
|
|
8148
8212
|
const echo2 = opts.attachTmux && !(opts.attachOnly || opts.resub) && existing.attachedTmux?.name === opts.attachTmux.name ? { attachedTmux: existing.attachedTmux } : {};
|
|
8149
8213
|
if (!opts.resub || existing.subscribers === 0) existing.subscribers += 1;
|
|
@@ -10720,6 +10784,14 @@ class ApiMachineClient {
|
|
|
10720
10784
|
setHarnessInstallHandler(handler) {
|
|
10721
10785
|
this.rpcHandlerManager.registerHandler("harness-install", (params) => handler(params));
|
|
10722
10786
|
}
|
|
10787
|
+
/** B-877 「退出团队模式」 for a team lead session on this machine (Web session ⋯ / team menu). */
|
|
10788
|
+
setTeamExitHandler(handler) {
|
|
10789
|
+
this.rpcHandlerManager.registerHandler("team-exit-session", async (params) => {
|
|
10790
|
+
const sessionId = params?.sessionId;
|
|
10791
|
+
if (typeof sessionId !== "string" || !/^[a-zA-Z0-9_-]{1,128}$/.test(sessionId)) throw new Error("Session ID is required");
|
|
10792
|
+
return handler(sessionId);
|
|
10793
|
+
});
|
|
10794
|
+
}
|
|
10723
10795
|
setCliUpdateRetryHandler(handler) {
|
|
10724
10796
|
this.rpcHandlerManager.registerHandler("cli-update-retry", (params) => handler(params && typeof params === "object" ? params.version : void 0));
|
|
10725
10797
|
}
|
|
@@ -10992,7 +11064,7 @@ class ApiMachineClient {
|
|
|
10992
11064
|
this.syncResumeSessionRpcRegistration();
|
|
10993
11065
|
this.syncRestartSessionRpcRegistration();
|
|
10994
11066
|
this.rpcHandlerManager.registerHandler("open-terminal", async (params) => {
|
|
10995
|
-
const { terminalId, cols, rows, cwd, fromSeq, encStream, startupCommand, resub, attachOnly, streamMode, attachTmux, projectId } = params || {};
|
|
11067
|
+
const { terminalId, cols, rows, cwd, fromSeq, encStream, startupCommand, resub, attachOnly, streamMode, attachTmux, projectId, viewOnly, shareGrantId } = params || {};
|
|
10996
11068
|
const attach = attachTmux && typeof attachTmux === "object" && typeof attachTmux.id === "string" && typeof attachTmux.name === "string" ? { id: attachTmux.id, name: attachTmux.name } : void 0;
|
|
10997
11069
|
const result = await this.webTerminal.open({
|
|
10998
11070
|
terminalId,
|
|
@@ -11006,7 +11078,10 @@ class ApiMachineClient {
|
|
|
11006
11078
|
streamMode: streamMode === "lines" ? "lines" : void 0,
|
|
11007
11079
|
...attach ? { attachTmux: attach } : {},
|
|
11008
11080
|
// B-868: create-only; validated inside open().
|
|
11009
|
-
...typeof projectId === "string" ? { projectId } : {}
|
|
11081
|
+
...typeof projectId === "string" ? { projectId } : {},
|
|
11082
|
+
// B-878: share viewer — attach without resizing the pane.
|
|
11083
|
+
...viewOnly === true ? { viewOnly: true } : {},
|
|
11084
|
+
...typeof shareGrantId === "string" && shareGrantId.length <= 128 ? { shareGrantId } : {}
|
|
11010
11085
|
});
|
|
11011
11086
|
if (encStream) {
|
|
11012
11087
|
this.encTerminals.add(result.terminalId);
|
|
@@ -11634,6 +11709,11 @@ class ApiMachineClient {
|
|
|
11634
11709
|
historySearch: { rpcAvailable: true, detectedAt: now },
|
|
11635
11710
|
// B-868 capability flag: `set-terminal-project` (same restamp discipline).
|
|
11636
11711
|
terminalProjects: { rpcAvailable: true, detectedAt: now },
|
|
11712
|
+
// B-877b capability flag: `team-exit-session` (same restamp discipline); the web
|
|
11713
|
+
// asks an older CLI to update at once instead of waiting out the server's 15 s RPC grace.
|
|
11714
|
+
teamExit: { rpcAvailable: true, detectedAt: now },
|
|
11715
|
+
// B-878 capability flag: `open-terminal.viewOnly` (same restamp discipline).
|
|
11716
|
+
terminalViewOnly: { rpcAvailable: true, detectedAt: now },
|
|
11637
11717
|
// B-084: closed records survive daemon restarts (persisted
|
|
11638
11718
|
// in closed-terminals.json), so the connect snapshot ships
|
|
11639
11719
|
// them too — not just the incremental pushes.
|
|
@@ -11838,6 +11918,7 @@ class ApiMachineClient {
|
|
|
11838
11918
|
}
|
|
11839
11919
|
bindMachineCommandHandlers(socket) {
|
|
11840
11920
|
socket.on("terminal-input", (data) => {
|
|
11921
|
+
if (this.webTerminal.dropViewOnlyShareEvent("input", data?.terminalId, data?.shareGrantId)) return;
|
|
11841
11922
|
let payload = data.data;
|
|
11842
11923
|
if (data.enc) {
|
|
11843
11924
|
const dec = authRelay.decrypt(this.machine.encryptionKey, this.machine.encryptionVariant, authRelay.decodeBase64(data.data));
|
|
@@ -11846,7 +11927,10 @@ class ApiMachineClient {
|
|
|
11846
11927
|
}
|
|
11847
11928
|
this.webTerminal.write(data.terminalId, payload);
|
|
11848
11929
|
});
|
|
11849
|
-
socket.on("terminal-resize", (data) =>
|
|
11930
|
+
socket.on("terminal-resize", (data) => {
|
|
11931
|
+
if (this.webTerminal.dropViewOnlyShareEvent("resize", data?.terminalId, data?.shareGrantId)) return;
|
|
11932
|
+
this.webTerminal.resize(data.terminalId, data.cols, data.rows);
|
|
11933
|
+
});
|
|
11850
11934
|
socket.on("terminal-close", (data) => this.webTerminal.unsubscribe(data.terminalId));
|
|
11851
11935
|
socket.on("session-archive", (data) => {
|
|
11852
11936
|
if (typeof data?.sessionId !== "string") return;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
var node_crypto = require('node:crypto');
|
|
4
4
|
var promises = require('node:fs/promises');
|
|
5
5
|
var path = require('node:path');
|
|
6
|
-
var pushNotifications = require('./pushNotifications-
|
|
7
|
-
var configuration = require('./configuration-
|
|
6
|
+
var pushNotifications = require('./pushNotifications-gcQv61e6.cjs');
|
|
7
|
+
var configuration = require('./configuration-Fx61b4MJ.cjs');
|
|
8
8
|
|
|
9
9
|
const CLAUDE_ATTACHMENT_KINDS = [
|
|
10
10
|
"image/jpeg",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { writeFile, rename, unlink } from 'node:fs/promises';
|
|
3
3
|
import { join, basename } from 'node:path';
|
|
4
|
-
import { M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES } from './pushNotifications-
|
|
5
|
-
import { e as ensurePrivateDirectory, h as hardenPrivateFile } from './configuration-
|
|
4
|
+
import { M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES } from './pushNotifications-DD9Z0CoN.mjs';
|
|
5
|
+
import { e as ensurePrivateDirectory, h as hardenPrivateFile } from './configuration-H8q1sMwk.mjs';
|
|
6
6
|
|
|
7
7
|
const CLAUDE_ATTACHMENT_KINDS = [
|
|
8
8
|
"image/jpeg",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import { g as readCredentials, r as readSettings, h as clearCredentials, i as clearMachineId } from './persistence-
|
|
3
|
-
import { a as authAndSetupMachineIfNeeded } from './auth-
|
|
4
|
-
import { c as configuration } from './configuration-
|
|
2
|
+
import { g as readCredentials, r as readSettings, h as clearCredentials, i as clearMachineId } from './persistence-dLgWDclq.mjs';
|
|
3
|
+
import { a as authAndSetupMachineIfNeeded } from './auth-BX6xrdHv.mjs';
|
|
4
|
+
import { c as configuration } from './configuration-H8q1sMwk.mjs';
|
|
5
5
|
import { existsSync, rmSync } from 'node:fs';
|
|
6
6
|
import { createInterface } from 'node:readline';
|
|
7
|
-
import { a as checkIfDaemonRunningAndCleanupStaleState, s as stopDaemon } from './controlClient-
|
|
8
|
-
import { l as logger } from './logger-
|
|
7
|
+
import { a as checkIfDaemonRunningAndCleanupStaleState, s as stopDaemon } from './controlClient-D9DYqW02.mjs';
|
|
8
|
+
import { l as logger } from './logger-BKAKIZdy.mjs';
|
|
9
9
|
import os from 'node:os';
|
|
10
10
|
import { c as credentialRelayProblem } from './authRelay-DhQhkBvX.mjs';
|
|
11
11
|
import 'node:fs/promises';
|
|
@@ -13,11 +13,11 @@ import 'zod';
|
|
|
13
13
|
import 'node:crypto';
|
|
14
14
|
import 'tweetnacl';
|
|
15
15
|
import 'axios';
|
|
16
|
-
import './time-
|
|
17
|
-
import './browser-
|
|
16
|
+
import './time-Cn0mV-di.mjs';
|
|
17
|
+
import './browser-C4wWGXH7.mjs';
|
|
18
18
|
import 'open';
|
|
19
19
|
import 'node:path';
|
|
20
|
-
import './package-
|
|
20
|
+
import './package-CMmhJwSf.mjs';
|
|
21
21
|
import 'node:util';
|
|
22
22
|
|
|
23
23
|
function localMachineIdentityStatus(machineId) {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { e as encodeBase64, c as credentialRelayProblem, f as encodeBase64Url, d as decodeBase64 } from './authRelay-DhQhkBvX.mjs';
|
|
2
|
-
import { c as configuration } from './configuration-
|
|
2
|
+
import { c as configuration } from './configuration-H8q1sMwk.mjs';
|
|
3
3
|
import { randomUUID, randomBytes } from 'node:crypto';
|
|
4
4
|
import tweetnacl from 'tweetnacl';
|
|
5
5
|
import axios from 'axios';
|
|
6
|
-
import { d as delay } from './time-
|
|
7
|
-
import { g as readCredentials, m as readSettingsOutcome, u as updateSettings, w as writeCredentialsLegacy, n as writeCredentialsDataKey } from './persistence-
|
|
8
|
-
import { o as openBrowser } from './browser-
|
|
9
|
-
import { l as logger } from './logger-
|
|
6
|
+
import { d as delay } from './time-Cn0mV-di.mjs';
|
|
7
|
+
import { g as readCredentials, m as readSettingsOutcome, u as updateSettings, w as writeCredentialsLegacy, n as writeCredentialsDataKey } from './persistence-dLgWDclq.mjs';
|
|
8
|
+
import { o as openBrowser } from './browser-C4wWGXH7.mjs';
|
|
9
|
+
import { l as logger } from './logger-BKAKIZdy.mjs';
|
|
10
10
|
|
|
11
11
|
function generateWebAuthUrl(publicKey) {
|
|
12
12
|
const publicKeyBase64 = encodeBase64(publicKey, "base64url");
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
4
|
-
var configuration = require('./configuration-
|
|
4
|
+
var configuration = require('./configuration-Fx61b4MJ.cjs');
|
|
5
5
|
var node_crypto = require('node:crypto');
|
|
6
6
|
var tweetnacl = require('tweetnacl');
|
|
7
7
|
var axios = require('axios');
|
|
8
|
-
var time = require('./time-
|
|
9
|
-
var persistence = require('./persistence-
|
|
10
|
-
var browser = require('./browser-
|
|
11
|
-
var logger = require('./logger-
|
|
8
|
+
var time = require('./time-NSglRbyr.cjs');
|
|
9
|
+
var persistence = require('./persistence-iiVFxhbt.cjs');
|
|
10
|
+
var browser = require('./browser-C4PVyjGe.cjs');
|
|
11
|
+
var logger = require('./logger-DP35yx-C.cjs');
|
|
12
12
|
|
|
13
13
|
function generateWebAuthUrl(publicKey) {
|
|
14
14
|
const publicKeyBase64 = authRelay.encodeBase64(publicKey, "base64url");
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chalk = require('chalk');
|
|
4
|
-
var persistence = require('./persistence-
|
|
5
|
-
var auth = require('./auth-
|
|
6
|
-
var configuration = require('./configuration-
|
|
4
|
+
var persistence = require('./persistence-iiVFxhbt.cjs');
|
|
5
|
+
var auth = require('./auth-By6u_iKB.cjs');
|
|
6
|
+
var configuration = require('./configuration-Fx61b4MJ.cjs');
|
|
7
7
|
var node_fs = require('node:fs');
|
|
8
8
|
var node_readline = require('node:readline');
|
|
9
|
-
var controlClient = require('./controlClient-
|
|
10
|
-
var logger = require('./logger-
|
|
9
|
+
var controlClient = require('./controlClient-D04wXKoQ.cjs');
|
|
10
|
+
var logger = require('./logger-DP35yx-C.cjs');
|
|
11
11
|
var os = require('node:os');
|
|
12
12
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
13
13
|
require('node:fs/promises');
|
|
@@ -15,11 +15,11 @@ require('zod');
|
|
|
15
15
|
require('node:crypto');
|
|
16
16
|
require('tweetnacl');
|
|
17
17
|
require('axios');
|
|
18
|
-
require('./time-
|
|
19
|
-
require('./browser-
|
|
18
|
+
require('./time-NSglRbyr.cjs');
|
|
19
|
+
require('./browser-C4PVyjGe.cjs');
|
|
20
20
|
require('open');
|
|
21
21
|
require('node:path');
|
|
22
|
-
require('./package-
|
|
22
|
+
require('./package-BCJfNMlt.cjs');
|
|
23
23
|
require('node:util');
|
|
24
24
|
|
|
25
25
|
function localMachineIdentityStatus(machineId) {
|