very-happy-cli 0.2.183 → 0.2.184
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-9c-Jeaxd.mjs → AcpBackend-Csg7Sy2P.mjs} +3 -3
- package/dist/{AcpBackend-B-aMuEzO.cjs → AcpBackend-DOzn74zn.cjs} +3 -3
- package/dist/{AcpSessionManager-CS0FOSQk.mjs → AcpSessionManager-BRK2F2yN.mjs} +2 -2
- package/dist/{AcpSessionManager-BxXe24AV.cjs → AcpSessionManager-CJXDNNtq.cjs} +2 -2
- package/dist/{BasePermissionHandler-BJ1ID_Br.mjs → BasePermissionHandler-BqYwrCra.mjs} +1 -1
- package/dist/{BasePermissionHandler-BREjppjP.cjs → BasePermissionHandler-CfrnkG3v.cjs} +1 -1
- package/dist/{acpSessionResume-mVoJ75vI.cjs → acpSessionResume-DZ65DBeE.cjs} +1 -1
- package/dist/{acpSessionResume-BKtI9Jq_.mjs → acpSessionResume-Dz1myMbR.mjs} +1 -1
- package/dist/{agentHome-B8Ctr_Nu.mjs → agentHome-B_tu3tFJ.mjs} +4 -4
- package/dist/{agentHome-rzjm56o4.cjs → agentHome-CKAXhc8P.cjs} +4 -4
- package/dist/{api-C29WLYkW.mjs → api-BpTDU2BO.mjs} +10 -10
- package/dist/{api-xZiqVynF.cjs → api-rw5xkzxo.cjs} +10 -10
- package/dist/{apiMachine-B-FNBIYG.cjs → apiMachine-Bs1XXHKs.cjs} +14 -14
- package/dist/{apiMachine-Dz6Yfk0m.mjs → apiMachine-wp0hWG3F.mjs} +14 -14
- package/dist/{attachmentContent-DwY0uIg6.mjs → attachmentContent-CWSSGMMo.mjs} +2 -2
- package/dist/{attachmentContent-COV4LF8k.cjs → attachmentContent-K_Up4InS.cjs} +2 -2
- package/dist/{auth-D_qsnVr3.cjs → auth-C4_mXYgj.cjs} +8 -8
- package/dist/{auth-DvbSDalm.mjs → auth-CBESCCCn.mjs} +8 -8
- package/dist/{auth-xT70IYMx.mjs → auth-D6kSt2sR.mjs} +5 -5
- package/dist/{auth-CYtk9_ga.cjs → auth-gGryJImw.cjs} +5 -5
- package/dist/{auto-IiPqvIsN.mjs → auto-CEucVmFR.mjs} +17 -17
- package/dist/{auto-DT_PfpCx.cjs → auto-Do43AOza.cjs} +17 -17
- package/dist/{bootstrap-C50NkfPx.cjs → bootstrap-BPz1iX77.cjs} +2 -2
- package/dist/{bootstrap-DS8Acdhm.mjs → bootstrap-CodyCmGt.mjs} +2 -2
- package/dist/{browser-1j9gdZoD.mjs → browser-CqMhj8Gm.mjs} +1 -1
- package/dist/{browser-CxKZLd2T.cjs → browser-D9D-1eqa.cjs} +1 -1
- package/dist/{claudeLocal-U1Fa9sJo.mjs → claudeLocal-BgIRtT3Q.mjs} +5 -5
- package/dist/{claudeLocal-CgNWpepB.cjs → claudeLocal-Dywp8NKr.cjs} +5 -5
- package/dist/{claudeLocalLauncher-BjCsfZUE.mjs → claudeLocalLauncher-CaHjZ8HW.mjs} +10 -10
- package/dist/{claudeLocalLauncher-IyFm0D6a.cjs → claudeLocalLauncher-_TOL73g5.cjs} +10 -10
- package/dist/{claudeSessionFork-6-1vKISn.mjs → claudeSessionFork-C9nB7fs5.mjs} +1 -1
- package/dist/{claudeSessionFork-BUO1XdSm.cjs → claudeSessionFork-jq-_WiAu.cjs} +1 -1
- package/dist/{client-DYGDBD0M.cjs → client-BFDji81N.cjs} +2 -2
- package/dist/{client-BgHvK7lo.mjs → client-BdbVizjk.mjs} +2 -2
- package/dist/{client--vZueZYF.cjs → client-ByZFACEw.cjs} +18 -5
- package/dist/{client-DcKJ0ul_.cjs → client-C49zFRkX.cjs} +2 -2
- package/dist/{client-5_zDNdOh.mjs → client-CX-_2myt.mjs} +2 -2
- package/dist/{client-DfDyE322.mjs → client-DwlYk8uJ.mjs} +18 -5
- package/dist/codex/happyMcpStdioBridge.cjs +16 -16
- package/dist/codex/happyMcpStdioBridge.mjs +16 -16
- package/dist/{codexAppServerClient-DvBg4hGc.mjs → codexAppServerClient-CmOIqiNQ.mjs} +3 -3
- package/dist/{codexAppServerClient-C3nrTfwY.cjs → codexAppServerClient-DF12ZSw1.cjs} +3 -3
- package/dist/{codexCommand-Bqp2--g_.mjs → codexCommand-BN05uEyv.mjs} +42 -42
- package/dist/{codexCommand-DSiU6MNt.cjs → codexCommand-H-ObWTtx.cjs} +42 -42
- package/dist/{codexTermination-DsliWl_s.mjs → codexTermination-Byohgj8h.mjs} +1 -1
- package/dist/{codexTermination-D9TRTglF.cjs → codexTermination-RwKa8pKk.cjs} +1 -1
- package/dist/{config-DeaqRn3o.mjs → config-ChHLh-hf.mjs} +3 -3
- package/dist/{config-CRhWiOwi.cjs → config-D_wNqwxX.cjs} +3 -3
- package/dist/{configuration-K3I6yOjZ.cjs → configuration-C9Sx-Foo.cjs} +1 -1
- package/dist/{configuration-elzht62L.mjs → configuration-CVgUe2qN.mjs} +1 -1
- package/dist/{connect-B5UbfmO3.cjs → connect-B61xJDRq.cjs} +13 -13
- package/dist/{connect-CT5cOlnC.mjs → connect-DJEQjS7C.mjs} +13 -13
- package/dist/{context-DNKNF8Yh.cjs → context-Bf3BG7w8.cjs} +1 -1
- package/dist/{context-CLj1_RYF.mjs → context-CDPfhHTo.mjs} +1 -1
- package/dist/{controlClient-ChqmxgbB.cjs → controlClient-BLO1_pPx.cjs} +14 -3
- package/dist/{controlClient-CuYQs2aZ.mjs → controlClient-DMCxtwq2.mjs} +14 -4
- package/dist/{createSessionMetadata-QfiRx4Tf.cjs → createSessionMetadata-5Mde6Dfh.cjs} +2 -2
- package/dist/{createSessionMetadata-C1MbLQnh.mjs → createSessionMetadata-BYroCdrU.mjs} +2 -2
- package/dist/{defaultPermissionMode-DQmdZZIg.cjs → defaultPermissionMode-B7mjHQKp.cjs} +2 -2
- package/dist/{defaultPermissionMode-U9LuUeQh.mjs → defaultPermissionMode-CTdxUV_3.mjs} +2 -2
- package/dist/{deterministicJson-BBRUcB8i.cjs → deterministicJson-C1Z9MlDX.cjs} +13 -13
- package/dist/{deterministicJson-BixlyPWV.mjs → deterministicJson-C3QXOc1N.mjs} +13 -13
- package/dist/{doctor-CKgHUV4W.cjs → doctor-DRdV3thy.cjs} +7 -7
- package/dist/{doctor-Dban2oE2.mjs → doctor-OwNmTpYh.mjs} +7 -7
- package/dist/{downloadTarget-VUTd9lEO.mjs → downloadTarget-CNtQ8rhV.mjs} +6 -6
- package/dist/{downloadTarget-CmC11Y7E.cjs → downloadTarget-Di5bf7r0.cjs} +6 -6
- package/dist/{ensureDaemonRunning-L0fl0cLE.cjs → ensureDaemonRunning-CMY--T9Q.cjs} +5 -5
- package/dist/{ensureDaemonRunning-khb8Nr1n.mjs → ensureDaemonRunning-IRV-w0wH.mjs} +5 -5
- package/dist/{handleResumeCommand-CLDGWpTJ.mjs → handleResumeCommand-BO00SYjG.mjs} +5 -5
- package/dist/{handleResumeCommand-D9myBN2N.cjs → handleResumeCommand-z7wY7QVM.cjs} +5 -5
- package/dist/{index-DgA79dVw.cjs → index-B4cyX2by.cjs} +39 -39
- package/dist/{index-y4JNyz9H.cjs → index-BsoUsrKS.cjs} +4 -4
- package/dist/{index-GkkbUZX-.mjs → index-C7zgeuLP.mjs} +4 -4
- package/dist/{index-CtwqBeH6.mjs → index-CVUiytNq.mjs} +3 -3
- package/dist/{index-BMZx-699.mjs → index-DZvi6_tB.mjs} +4 -4
- package/dist/{index-BptfFoXM.mjs → index-DisBaRvM.mjs} +10 -1
- package/dist/{index-BdJs0465.cjs → index-NhmqjrGv.cjs} +3 -3
- package/dist/{index-Fq-jxjsB.cjs → index-Ub-5xbcU.cjs} +10 -1
- package/dist/{index-IRI8s8kz.mjs → index-_LfuIz-O.mjs} +40 -40
- package/dist/{index-COSjJPIv.cjs → index-wYJu2yGc.cjs} +4 -4
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-cn98bTCs.cjs → install-CGYDeYes.cjs} +3 -3
- package/dist/{install-JvCk2PJV.mjs → install-DeUM6h8X.mjs} +3 -3
- package/dist/lib.cjs +12 -12
- package/dist/lib.mjs +12 -12
- package/dist/{lidState-Bcs5kRHi.cjs → lidState-C4YgPn6y.cjs} +1 -1
- package/dist/{lidState-DXeYTsrm.mjs → lidState-CBjQEwTt.mjs} +1 -1
- package/dist/{localHappyAgentAuth-CypTSe42.cjs → localHappyAgentAuth-BzCuIkzi.cjs} +1 -1
- package/dist/{localHappyAgentAuth-C1A4ChCR.mjs → localHappyAgentAuth-CcWGU_lS.mjs} +1 -1
- package/dist/{logger-Cgwz30rK.cjs → logger-CrtT0opS.cjs} +2 -2
- package/dist/{logger-RMPh5aqe.mjs → logger-D2qd0mMg.mjs} +2 -2
- package/dist/{machineMetadata-BTUtPRth.mjs → machineMetadata-B2czDiTd.mjs} +3 -3
- package/dist/{machineMetadata-BSOGMNRi.cjs → machineMetadata-D1hlm_oF.cjs} +3 -3
- package/dist/{main-DNDL6t8z.mjs → main-BNYWELul.mjs} +53 -45
- package/dist/{main-4iiwYpCR.cjs → main-BWgWN5d1.cjs} +53 -45
- package/dist/{mcp-C7eEoGhz.cjs → mcp-C18unjs1.cjs} +15 -15
- package/dist/{mcp-DXYDPOpJ.mjs → mcp-ColtiH23.mjs} +15 -15
- package/dist/{mirrorProtocol-c5g5MgNc.cjs → mirrorProtocol-D4CR5I5W.cjs} +3 -3
- package/dist/{mirrorProtocol-DQRy5PaT.mjs → mirrorProtocol-DTHWtAE5.mjs} +3 -3
- package/dist/{package-3aPiSpZj.cjs → package-DczR1k0c.cjs} +7 -7
- package/dist/{package-CTrz6U3C.mjs → package-Ek5FOyEo.mjs} +7 -7
- package/dist/{panels-B5sZ84vA.mjs → panels-BIQ7FrCB.mjs} +5 -5
- package/dist/{panels-BmsmKHbw.cjs → panels-DYSMHhdb.cjs} +5 -5
- package/dist/{peerTools-DIPOX033.mjs → peerTools-CABQ6iKd.mjs} +5 -5
- package/dist/{peerTools-Dxe7iCi_.cjs → peerTools-Cufh4Qp_.cjs} +5 -5
- package/dist/{persistence-zJo4r7YI.mjs → persistence-DFtgQvr6.mjs} +2 -2
- package/dist/{persistence-DZRMUZZS.cjs → persistence-IYH6bAXY.cjs} +2 -2
- package/dist/{piRunnerArgs-IVdoHUB6.mjs → piRunnerArgs-CIWprC1S.mjs} +1 -1
- package/dist/{piRunnerArgs-BSPiS6tZ.cjs → piRunnerArgs-Dgjmj8KL.cjs} +1 -1
- package/dist/{piRuntime-BJzjlMcN.cjs → piRuntime-C_nX977w.cjs} +1 -1
- package/dist/{piRuntime-BvHO3vgO.mjs → piRuntime-K6o4GPZ9.mjs} +1 -1
- package/dist/{piTerminal-D7vBOpkE.mjs → piTerminal-CRl0EZc3.mjs} +17 -17
- package/dist/{piTerminal-Cz4pW55d.cjs → piTerminal-CYhcmkyi.cjs} +17 -17
- package/dist/providerBinding-B-Qbx9W2.cjs +140 -0
- package/dist/providerBinding-CYubGg-Z.mjs +132 -0
- package/dist/{pushNotifications-CgIrYml3.cjs → pushNotifications-BgQ_QTgS.cjs} +3 -3
- package/dist/{pushNotifications-C4R9-1hU.mjs → pushNotifications-gVJWGFBP.mjs} +3 -3
- package/dist/{query-DKPmDsHS.mjs → query-CGp9vY4e.mjs} +1 -1
- package/dist/{query-CZQG1PdU.cjs → query-DFreaScb.cjs} +1 -1
- package/dist/{rateLimitWindows-CPV0nLeq.cjs → rateLimitWindows-CeogT1b6.cjs} +1 -1
- package/dist/{rateLimitWindows-HlHATOQ0.mjs → rateLimitWindows-DM_gshI4.mjs} +1 -1
- package/dist/{registerCommonHandlers-D1pC83Op.cjs → registerCommonHandlers-CRqKXwQt.cjs} +2 -2
- package/dist/{registerCommonHandlers-a9lHojSV.mjs → registerCommonHandlers-CyAtDNvs.mjs} +2 -2
- package/dist/{registerKillSessionHandler-nTi2vVJy.cjs → registerKillSessionHandler-CX49N52L.cjs} +6 -6
- package/dist/{registerKillSessionHandler-Bp-fuH-w.mjs → registerKillSessionHandler-DGWADNla.mjs} +6 -6
- package/dist/{remoteSessionClient-Cwrddscy.mjs → remoteSessionClient-1nycIdrG.mjs} +5 -5
- package/dist/{remoteSessionClient-HQAKAvVd.cjs → remoteSessionClient-CuAkp19e.cjs} +5 -5
- package/dist/{reportProgressTool-Be-8ADI4.cjs → reportProgressTool-BS7TkeEk.cjs} +3 -3
- package/dist/{reportProgressTool-CcZ32nrd.mjs → reportProgressTool-CdSi-uSC.mjs} +3 -3
- package/dist/{run-BBU8GyxE.mjs → run-DqjEj8M2.mjs} +77 -40
- package/dist/{run-CxRJk9qq.cjs → run-gVwkplx0.cjs} +77 -40
- package/dist/{runClaude-Dd5zJaUZ.cjs → runClaude-CtVoFstP.cjs} +39 -24
- package/dist/{runClaude-DR6pEQwd.mjs → runClaude-CuSjrZSf.mjs} +39 -24
- package/dist/{runClaudeDeps-CTtZ_1mC.cjs → runClaudeDeps-DqOgRuKq.cjs} +42 -38
- package/dist/{runClaudeDeps-COgZaUZm.mjs → runClaudeDeps-eazOhb6g.mjs} +47 -43
- package/dist/{runGemini-DX72qB92.cjs → runGemini-81wkPvMv.cjs} +33 -33
- package/dist/{runGemini-DVoVUfPp.mjs → runGemini-B4EqAd1U.mjs} +33 -33
- package/dist/{runOpenClaw-BSg4hFVt.cjs → runOpenClaw-BK7ZQEKj.cjs} +18 -18
- package/dist/{runOpenClaw-BHjzmzeC.mjs → runOpenClaw-Brb1KKAA.mjs} +18 -18
- package/dist/{sandbox-D1T_hmgZ.cjs → sandbox-DFD6an8o.cjs} +4 -4
- package/dist/{sandbox-CWR9EqoN.mjs → sandbox-t43Exd4t.mjs} +4 -4
- package/dist/{selfCheck-CE7vlnNS.cjs → selfCheck-Bel50SH3.cjs} +37 -36
- package/dist/selfCheck-CwpZepG-.mjs +86 -0
- package/dist/{send-BDF0Zvxo.mjs → send-Co9jxmc4.mjs} +8 -8
- package/dist/{send-BxZqRCcG.cjs → send-IR5DnG9V.cjs} +8 -8
- package/dist/{server-DB7_70Mi.cjs → server-CAo6a3Vw.cjs} +6 -6
- package/dist/{server-B4JtnDLF.mjs → server-KnIeKeTb.mjs} +4 -4
- package/dist/{sessionLock-BXvFN6uw.cjs → sessionLock-DNGDn9oj.cjs} +3 -3
- package/dist/{sessionLock-CXOOX-VD.mjs → sessionLock-ha9gsQEn.mjs} +3 -3
- package/dist/{sessionOps-ByVggB_q.mjs → sessionOps-Di9MC0FP.mjs} +4 -4
- package/dist/{sessionOps-BWlDlFYP.cjs → sessionOps-hRqzcMXB.cjs} +4 -4
- package/dist/sessionProvider-4Nn6e9Kd.mjs +109 -0
- package/dist/sessionProvider-LqE7Y_cf.cjs +114 -0
- package/dist/{sessionScanner-DkxPB5VA.cjs → sessionScanner-BzEtrHB8.cjs} +3 -3
- package/dist/{sessionScanner-r66RtF95.mjs → sessionScanner-DKFKDsrW.mjs} +3 -3
- package/dist/{sessions-BiJTxFy9.cjs → sessions-CmLiagcb.cjs} +10 -10
- package/dist/{sessions-C1lLK_a9.mjs → sessions-DzgMNXo5.mjs} +10 -10
- package/dist/{setupOfflineReconnection-Bl3DuakT.mjs → setupOfflineReconnection-D4NGi3Jf.mjs} +2 -2
- package/dist/{setupOfflineReconnection-CecTiFZ-.cjs → setupOfflineReconnection-Dq4N2Txp.cjs} +2 -2
- package/dist/{spawn-D-8MlEM6.mjs → spawn-C6CE5PsI.mjs} +14 -14
- package/dist/{spawn-D79mVa3h.cjs → spawn-tmoekkOW.cjs} +14 -14
- package/dist/{spawnAgents-Sfnf-4pN.cjs → spawnAgents-D15n6tAj.cjs} +1 -1
- package/dist/{spawnAgents-DJHjq01u.mjs → spawnAgents-jXo9jIYo.mjs} +1 -1
- package/dist/{spawnHappyCLI-v_bJwZ4Z.mjs → spawnHappyCLI-66grqHO0.mjs} +1 -1
- package/dist/{spawnHappyCLI-CQwQs9G5.cjs → spawnHappyCLI-8NcKgkuy.cjs} +1 -1
- package/dist/{specialCommands-yMnFvS-W.mjs → specialCommands-BO8ipH0n.mjs} +3 -3
- package/dist/{specialCommands-CWMVfT5s.cjs → specialCommands-Dq0TmY1Z.cjs} +3 -3
- package/dist/{startFileWatcher-BCDkT_tr.mjs → startFileWatcher-BLDkieUW.mjs} +1 -1
- package/dist/{startFileWatcher-GW4_E7dV.cjs → startFileWatcher-CjgKvec9.cjs} +1 -1
- package/dist/{startupSessionCreate-BcAGYo51.mjs → startupSessionCreate-B60THeNz.mjs} +1 -1
- package/dist/{startupSessionCreate-tBRa_ze8.cjs → startupSessionCreate-CXRVahaU.cjs} +1 -1
- package/dist/{streamRelay-BZ8drtof.cjs → streamRelay-CtTpf-Li.cjs} +1 -1
- package/dist/{streamRelay-BEDiy6_b.mjs → streamRelay-GzHxvMem.mjs} +1 -1
- package/dist/{sync--QUIOuf8.mjs → sync-DJvx7RbO.mjs} +1 -1
- package/dist/{sync-BMDkyo75.cjs → sync-DKSZOi6w.cjs} +1 -1
- package/dist/{systemPrompt-DoHSXrH0.cjs → systemPrompt-Duos1BtM.cjs} +2 -2
- package/dist/{systemPrompt-O0Kd6vbA.mjs → systemPrompt-dOOpz8L7.mjs} +2 -2
- package/dist/{teams-BkZop-sP.cjs → teams-pO5rjvPO.cjs} +7 -7
- package/dist/{teams-CTF1gT48.mjs → teams-uWiMJEe1.mjs} +7 -7
- package/dist/{template-CeC1dYe-.cjs → template-BLJxflCH.cjs} +1 -1
- package/dist/{template-D1fm22em.mjs → template-YlpbYGeQ.mjs} +1 -1
- package/dist/{time-CdCotzKU.cjs → time-D-8GFCE7.cjs} +1 -1
- package/dist/{time-B2KKdAym.mjs → time-Du0scQeJ.mjs} +1 -1
- package/dist/{titleGenerator-BFDczskR.mjs → titleGenerator-DKYj8rLY.mjs} +1 -1
- package/dist/{titleGenerator-DZH1XqAf.cjs → titleGenerator-DnKygjBP.cjs} +2 -2
- package/dist/{todo-DnTFTHmV.cjs → todo-BFDb7O8q.cjs} +6 -6
- package/dist/{todo-C2gyOUom.mjs → todo-Du5dAwnt.mjs} +6 -6
- package/dist/{tools-DUjkqSQL.mjs → tools-DHvMVL0a.mjs} +1 -1
- package/dist/{tools-C8rpwyIl.cjs → tools-DK_x86Kl.cjs} +1 -1
- package/dist/{uninstall-B5Ew50mZ.mjs → uninstall-CLDEXir0.mjs} +3 -3
- package/dist/{uninstall-CKMPWTMv.cjs → uninstall-c3zjum2o.cjs} +3 -3
- package/package.json +7 -7
- package/dist/selfCheck-ZGgBtxFQ.mjs +0 -85
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { i as isClaudeSessionId, g as extractCompleteLines, h as decideBackfill, j as parseTerminalHookPayload, k as decideMirrorBinding, M as MIRROR_BACKFILL_LINES_DEFAULT, m as mirrorLineKey, n as mirrorLocalId, o as initializeOwnedWorktree, e as summarizeSpawnSessionForLog, q as startAgentVersionChecks, W as WORKTREE_CAPABILITY_VERSION, t as currentWorktreeService } from './mirrorProtocol-
|
|
1
|
+
import { i as isClaudeSessionId, g as extractCompleteLines, h as decideBackfill, j as parseTerminalHookPayload, k as decideMirrorBinding, M as MIRROR_BACKFILL_LINES_DEFAULT, m as mirrorLineKey, n as mirrorLocalId, o as initializeOwnedWorktree, e as summarizeSpawnSessionForLog, q as startAgentVersionChecks, W as WORKTREE_CAPABILITY_VERSION, t as currentWorktreeService } from './mirrorProtocol-DTHWtAE5.mjs';
|
|
2
2
|
import { F as FS_MKDIR_CAPABILITY_VERSION } from './fsMkdir-DumgLTzR.mjs';
|
|
3
|
-
import { P as PI_ADAPTER_INSTALL_HINT, s as sanitizeSpawnModel } from './piRunnerArgs-
|
|
3
|
+
import { P as PI_ADAPTER_INSTALL_HINT, s as sanitizeSpawnModel } from './piRunnerArgs-CIWprC1S.mjs';
|
|
4
4
|
import fs from 'fs/promises';
|
|
5
5
|
import os from 'os';
|
|
6
6
|
import * as tmp from 'tmp';
|
|
7
7
|
import axios from 'axios';
|
|
8
8
|
import { readFileSync, openSync, fsyncSync, closeSync, renameSync, existsSync, readdirSync, statSync, unlinkSync, realpathSync, promises, writeFileSync, mkdirSync, accessSync, constants as constants$1, readSync, rmdirSync } from 'node:fs';
|
|
9
9
|
import { join, isAbsolute, resolve, dirname, sep, basename } from 'node:path';
|
|
10
|
-
import { f as ensurePrivateDirectorySync, w as writePrivateFileSync, c as configuration } from './configuration-
|
|
11
|
-
import { T as TurnActivityTracker, A as ApiClient } from './api-
|
|
12
|
-
import { S as SPAWN_AGENTS, i as isSpawnAgent, s as sanitizeSpawnPermissionMode, r as resolveSpawnPermissionMode, a as resolveFirstMessageMeta, j as joinProject } from './spawnAgents-
|
|
13
|
-
import { l as logger } from './logger-
|
|
14
|
-
import { p as pruneStaleCompileCaches } from './index-
|
|
15
|
-
import { a as authAndSetupMachineIfNeeded } from './auth-
|
|
10
|
+
import { f as ensurePrivateDirectorySync, w as writePrivateFileSync, c as configuration } from './configuration-CVgUe2qN.mjs';
|
|
11
|
+
import { T as TurnActivityTracker, A as ApiClient } from './api-BpTDU2BO.mjs';
|
|
12
|
+
import { S as SPAWN_AGENTS, i as isSpawnAgent, s as sanitizeSpawnPermissionMode, r as resolveSpawnPermissionMode, a as resolveFirstMessageMeta, j as joinProject } from './spawnAgents-jXo9jIYo.mjs';
|
|
13
|
+
import { l as logger } from './logger-D2qd0mMg.mjs';
|
|
14
|
+
import { p as pruneStaleCompileCaches } from './index-CVUiytNq.mjs';
|
|
15
|
+
import { a as authAndSetupMachineIfNeeded } from './auth-D6kSt2sR.mjs';
|
|
16
16
|
import { spawn, execSync } from 'child_process';
|
|
17
|
-
import { p as packageJson } from './package-
|
|
18
|
-
import { a as globalPrefixForPackage, N as NPM_SAFE_ARG, g as getEnvironmentInfo } from './doctor-
|
|
19
|
-
import { s as spawnHappyCLI } from './spawnHappyCLI-
|
|
20
|
-
import { c as readPersistedSessions, r as readSettings, l as latchKeepAwake, q as reportSignature, s as decideDaemonHibernation, t as nextCheckDelay, v as persistSession, d as readDaemonState, x as acquireDaemonLock, a as resolveCheckMs, y as resolveIdleMs, z as deletePersistedSessions, A as writeDaemonState, B as writeSettings, C as settingIdleMs, u as updateSettings, D as rewriteCredentialsForRelay, g as readCredentials, E as releaseDaemonLock } from './persistence-
|
|
21
|
-
import { i as isDaemonRunningCurrentlyInstalledHappyVersion, s as stopDaemon,
|
|
22
|
-
import { e as sendUserMessage, f as readSessionMetadata, r as readSessionTranscript, l as listAccountSessions, a as listSessions, M as MAX_READ_LIMIT, s as sessionWebUrl, g as waitForSessionKey, d as archiveSession, j as analyzeLatestTurn, k as readSessionLog, m as TURN_WINDOW, n as userPromptText } from './sessionOps-
|
|
17
|
+
import { p as packageJson } from './package-Ek5FOyEo.mjs';
|
|
18
|
+
import { a as globalPrefixForPackage, N as NPM_SAFE_ARG, g as getEnvironmentInfo } from './doctor-OwNmTpYh.mjs';
|
|
19
|
+
import { s as spawnHappyCLI } from './spawnHappyCLI-66grqHO0.mjs';
|
|
20
|
+
import { c as readPersistedSessions, r as readSettings, l as latchKeepAwake, q as reportSignature, s as decideDaemonHibernation, t as nextCheckDelay, v as persistSession, d as readDaemonState, x as acquireDaemonLock, a as resolveCheckMs, y as resolveIdleMs, z as deletePersistedSessions, A as writeDaemonState, B as writeSettings, C as settingIdleMs, u as updateSettings, D as rewriteCredentialsForRelay, g as readCredentials, E as releaseDaemonLock } from './persistence-DFtgQvr6.mjs';
|
|
21
|
+
import { i as isDaemonRunningCurrentlyInstalledHappyVersion, s as stopDaemon, u as cleanupDaemonState } from './controlClient-DMCxtwq2.mjs';
|
|
22
|
+
import { e as sendUserMessage, f as readSessionMetadata, r as readSessionTranscript, l as listAccountSessions, a as listSessions, M as MAX_READ_LIMIT, s as sessionWebUrl, g as waitForSessionKey, d as archiveSession, j as analyzeLatestTurn, k as readSessionLog, m as TURN_WINDOW, n as userPromptText } from './sessionOps-Di9MC0FP.mjs';
|
|
23
23
|
import fastify from 'fastify';
|
|
24
24
|
import { z } from 'zod';
|
|
25
25
|
import { validatorCompiler, serializerCompiler } from 'fastify-type-provider-zod';
|
|
@@ -27,62 +27,62 @@ import { d as decodeBase64, s as sameRelay, e as encodeBase64, h as decrypt } fr
|
|
|
27
27
|
import { randomBytes, createHash, timingSafeEqual, randomUUID } from 'node:crypto';
|
|
28
28
|
import { c as checkPreviewPath } from './previewPath-CXN4Vag0.mjs';
|
|
29
29
|
import { a as BACKGROUND_TASKS_MAX, d as BACKGROUND_TASK_DESCRIPTION_MAX, e as BackgroundTaskTracker } from './backgroundTaskActivity-8PdPxrvy.mjs';
|
|
30
|
-
import { b as sanitizeRateLimitReport } from './rateLimitWindows-
|
|
31
|
-
import { f as formatEditConflictNotice, b as SESSION_PEER_SENT_FROM, s as sendPeerMessage, l as listPeerSessions, C as CLI_PEER_SENDER_ID } from './peerTools-
|
|
30
|
+
import { b as sanitizeRateLimitReport } from './rateLimitWindows-DM_gshI4.mjs';
|
|
31
|
+
import { f as formatEditConflictNotice, b as SESSION_PEER_SENT_FROM, s as sendPeerMessage, l as listPeerSessions, C as CLI_PEER_SENDER_ID } from './peerTools-CABQ6iKd.mjs';
|
|
32
32
|
import os$1, { hostname, homedir, tmpdir } from 'node:os';
|
|
33
|
-
import { c as RemoteCallBudget, e as REMOTE_WRITE_CALLS_PER_MINUTE, d as deliverToSession, g as guardRemoteSessionOpsRequest, h as remoteError, i as REMOTE_OP_DEADLINE_MS, j as formatRemoteAuditLine, k as REMOTE_SEND_COMMIT_DEADLINE_MS, m as REMOTE_RESUME_WAIT_MS, n as capRemoteTranscript, o as capRemoteText, p as REMOTE_ANSWER_MAX_BYTES, q as REMOTE_TITLE_MAX_BYTES } from './remoteSessionClient-
|
|
34
|
-
import { assistantHome, bootstrapAssistantHome } from './bootstrap-
|
|
35
|
-
import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-
|
|
33
|
+
import { c as RemoteCallBudget, e as REMOTE_WRITE_CALLS_PER_MINUTE, d as deliverToSession, g as guardRemoteSessionOpsRequest, h as remoteError, i as REMOTE_OP_DEADLINE_MS, j as formatRemoteAuditLine, k as REMOTE_SEND_COMMIT_DEADLINE_MS, m as REMOTE_RESUME_WAIT_MS, n as capRemoteTranscript, o as capRemoteText, p as REMOTE_ANSWER_MAX_BYTES, q as REMOTE_TITLE_MAX_BYTES } from './remoteSessionClient-1nycIdrG.mjs';
|
|
34
|
+
import { assistantHome, bootstrapAssistantHome } from './bootstrap-CodyCmGt.mjs';
|
|
35
|
+
import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-C7zgeuLP.mjs';
|
|
36
36
|
import require$$0, { existsSync as existsSync$1, statSync as statSync$1, mkdtempSync, rmSync } from 'fs';
|
|
37
37
|
import require$$1, { join as join$1 } from 'path';
|
|
38
38
|
import { spawn as spawn$1, execFile, spawnSync } from 'node:child_process';
|
|
39
39
|
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
40
40
|
import { d as daemonEndpointsMatch, r as resolveClaudeCredentialReadiness } from './doctorReadiness-C208SMN9.mjs';
|
|
41
|
-
import { o as ownerRetryPending, c as consumeOwnerRetry, s as spawnGate, a as afterStartupFailure, b as startupFailureMessage, T as TEAM_SPAWN_MAX_ATTEMPTS, d as TEAM_CLEANUP_RETRY_MS, g as getInitialMachineMetadata, e as getStartupCliAvailability, f as TEAM_RETRY_CAPABILITY_VERSION, w as withRunningCliFacts } from './machineMetadata-
|
|
41
|
+
import { o as ownerRetryPending, c as consumeOwnerRetry, s as spawnGate, a as afterStartupFailure, b as startupFailureMessage, T as TEAM_SPAWN_MAX_ATTEMPTS, d as TEAM_CLEANUP_RETRY_MS, g as getInitialMachineMetadata, e as getStartupCliAvailability, f as TEAM_RETRY_CAPABILITY_VERSION, w as withRunningCliFacts } from './machineMetadata-B2czDiTd.mjs';
|
|
42
42
|
import { M as ModelConfigError, B as BackupStore, r as readConfigFile, s as sha256, a as atomicWriteFile } from './fileStore-5qpetZS0.mjs';
|
|
43
43
|
import { c as collectSecretValues, a as parseJsonObject, b as childObject, s as setOrDelete, d as changedPaths, e as stringifyLike, f as fail, n as normalizeModelList, g as normalizeModelId, h as normalizeSecret, i as normalizeBaseUrl, u as uniq, j as baseUrlWarnings, m as maskSecret, k as getPath$1, l as normalizeProviderId, o as piAdapter, r as redactText } from './pi-CqyoZMjI.mjs';
|
|
44
44
|
import require$$3 from 'crypto';
|
|
45
45
|
import { c as commandOnPath } from './detectCLI-CSGMlV51.mjs';
|
|
46
|
-
import { buildResumeLaunch } from './handleResumeCommand-
|
|
46
|
+
import { buildResumeLaunch } from './handleResumeCommand-BO00SYjG.mjs';
|
|
47
47
|
import { n as normalizeWebPanels } from './webPanels-B2_C2-3g.mjs';
|
|
48
|
-
import { K as ServerMigrateNoticeSchema, L as isHarnessInstallId, e as AUTOMATION_SUMMARY_MAX_CHARS, M as AUTOMATION_PRECHECK_OUTPUT_MAX_CHARS, N as AUTOMATION_PRECHECK_DEFAULT_TIMEOUT_MS, b as AUTOMATION_PRECHECK_MAX_TIMEOUT_MS, Q as AUTOMATION_CLAIM_MAX_RUNS, T as AUTOMATION_DAEMON_CAPABILITY_PRECHECK, U as AUTOMATION_DEFAULT_LEASE_MS, i as isAutomationRunTerminal, V as HARNESS_INSTALL_CAPABILITY_VERSION } from './index-
|
|
48
|
+
import { K as ServerMigrateNoticeSchema, L as isHarnessInstallId, e as AUTOMATION_SUMMARY_MAX_CHARS, M as AUTOMATION_PRECHECK_OUTPUT_MAX_CHARS, N as AUTOMATION_PRECHECK_DEFAULT_TIMEOUT_MS, b as AUTOMATION_PRECHECK_MAX_TIMEOUT_MS, Q as AUTOMATION_CLAIM_MAX_RUNS, T as AUTOMATION_DAEMON_CAPABILITY_PRECHECK, U as AUTOMATION_DEFAULT_LEASE_MS, i as isAutomationRunTerminal, V as HARNESS_INSTALL_CAPABILITY_VERSION } from './index-DisBaRvM.mjs';
|
|
49
49
|
import { access, symlink, readFile, rm, unlink, readlink, lstat, constants, stat, open } from 'node:fs/promises';
|
|
50
50
|
import { p as parseExactVersion, c as compareExactVersions, f as fetchCliUpdateState, r as resolveCliUpdateCheckInterval, D as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS } from './cliUpdate-Y34VGe9Y.mjs';
|
|
51
|
-
import { P as ProjectsUnsupportedError, c as createProjectsClient } from './client-
|
|
52
|
-
import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-
|
|
51
|
+
import { P as ProjectsUnsupportedError, c as createProjectsClient } from './client-CX-_2myt.mjs';
|
|
52
|
+
import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-BdbVizjk.mjs';
|
|
53
53
|
import { w as withKeychainOffPath, a as keychainIdentityFor, i as interpretSecurityRead, s as securityReadArgs, b as securityDeleteArgs, c as keychainOffShimDir, d as interpretCredentialsFile, C as CREDENTIALS_REJECTED_DETAIL, e as buildClaudeAuthState, f as claudeAuthStateChanged, r as resolveSdkClaudeBinary, g as classifyAuthStatus, h as diagnoseStores, p as parseLaunchctlPid, H as HAPPY_DAEMON_LAUNCHD_LABEL, j as classifyLineage, l as probeLaunchdJob, m as detectDaemonSupervisor, n as daemonLineage } from './daemonSupervisor-DfzrtNhM.mjs';
|
|
54
54
|
import { g as getProjectPath } from './path-D2wdaNSk.mjs';
|
|
55
55
|
import { b as extractClaudeEditPaths } from './editPaths-BVfS_FFL.mjs';
|
|
56
|
-
import { s as startFileWatcher } from './startFileWatcher-
|
|
57
|
-
import { I as InvalidateSync } from './sync
|
|
56
|
+
import { s as startFileWatcher } from './startFileWatcher-BLDkieUW.mjs';
|
|
57
|
+
import { I as InvalidateSync } from './sync-DJvx7RbO.mjs';
|
|
58
58
|
import { R as RawJSONLinesSchema } from './types-CkqAACXx.mjs';
|
|
59
59
|
import { t as tmuxArgs, a as scrubTmuxClientEnv, s as shellescape } from './tmuxSocket-B8Yx20sT.mjs';
|
|
60
|
-
import { p as processIdentityFields, r as readSessionLock, t as terminateProcess, d as terminateProcessTree } from './sessionLock-
|
|
60
|
+
import { p as processIdentityFields, r as readSessionLock, t as terminateProcess, d as terminateProcessTree } from './sessionLock-ha9gsQEn.mjs';
|
|
61
61
|
import { findAllHappyProcesses } from './doctor-BPkYWSuq.mjs';
|
|
62
62
|
import { T as TEAM_SKILL, a as TEAM_LEAD_PLAYBOOK, b as TEAM_MEMBER_RULES } from './resources-CLdQfe3b.mjs';
|
|
63
63
|
import { promisify } from 'node:util';
|
|
64
|
-
import { b as clipText, r as renderAction, c as clipAutomationReport, e as renderTemplate } from './template-
|
|
64
|
+
import { b as clipText, r as renderAction, c as clipAutomationReport, e as renderTemplate } from './template-YlpbYGeQ.mjs';
|
|
65
65
|
import { d as describeAgentHome } from './loginShellEnv-Dw8M7tkI.mjs';
|
|
66
|
-
import './acpSessionResume-
|
|
67
|
-
import './lidState-
|
|
66
|
+
import './acpSessionResume-Dz1myMbR.mjs';
|
|
67
|
+
import './lidState-CBjQEwTt.mjs';
|
|
68
68
|
import 'node:events';
|
|
69
69
|
import 'socket.io-client';
|
|
70
|
-
import './pushNotifications-
|
|
70
|
+
import './pushNotifications-gVJWGFBP.mjs';
|
|
71
71
|
import './contentLogMetadata-BlWI0egu.mjs';
|
|
72
72
|
import './limits-DIo7rEBR.mjs';
|
|
73
|
-
import './time-
|
|
74
|
-
import './registerCommonHandlers-
|
|
73
|
+
import './time-Du0scQeJ.mjs';
|
|
74
|
+
import './registerCommonHandlers-CyAtDNvs.mjs';
|
|
75
75
|
import 'util';
|
|
76
76
|
import 'cross-spawn';
|
|
77
77
|
import '@paralleldrive/cuid2';
|
|
78
78
|
import 'chalk';
|
|
79
79
|
import 'node:module';
|
|
80
80
|
import 'tweetnacl';
|
|
81
|
-
import './browser-
|
|
81
|
+
import './browser-CqMhj8Gm.mjs';
|
|
82
82
|
import 'open';
|
|
83
83
|
import './ids-DU6sLx4C.mjs';
|
|
84
84
|
import 'url';
|
|
85
|
-
import './localHappyAgentAuth-
|
|
85
|
+
import './localHappyAgentAuth-CcWGU_lS.mjs';
|
|
86
86
|
import './processTreeSnapshot-CuLJDNC-.mjs';
|
|
87
87
|
import 'ps-list';
|
|
88
88
|
|
|
@@ -572,6 +572,7 @@ function startDaemonControlServer({
|
|
|
572
572
|
stopSession,
|
|
573
573
|
spawnSession,
|
|
574
574
|
resumeSession,
|
|
575
|
+
restartSession,
|
|
575
576
|
requestShutdown,
|
|
576
577
|
onHappySessionWebhook,
|
|
577
578
|
onSessionStateEvent,
|
|
@@ -868,6 +869,34 @@ function startDaemonControlServer({
|
|
|
868
869
|
return { success: false, error: result.errorMessage };
|
|
869
870
|
}
|
|
870
871
|
});
|
|
872
|
+
typed.post("/restart-session", {
|
|
873
|
+
schema: {
|
|
874
|
+
body: z.object({ sessionId: z.string().min(1).max(200) }),
|
|
875
|
+
response: {
|
|
876
|
+
200: z.object({ success: z.boolean(), sessionId: z.string().optional(), error: z.string().optional() }),
|
|
877
|
+
500: z.object({ success: z.boolean(), error: z.string().optional() }),
|
|
878
|
+
503: z.object({ success: z.boolean(), error: z.string().optional() })
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
}, async (request, reply) => {
|
|
882
|
+
const { sessionId } = request.body;
|
|
883
|
+
if (!restartSession) {
|
|
884
|
+
reply.code(503);
|
|
885
|
+
return { success: false, error: "daemon is still starting up" };
|
|
886
|
+
}
|
|
887
|
+
logger.debug(`[CONTROL SERVER] Restart session request: ${sessionId}`);
|
|
888
|
+
const result = await restartSession(sessionId, { keepPublishedPermissionMode: true });
|
|
889
|
+
switch (result.type) {
|
|
890
|
+
case "success":
|
|
891
|
+
return { success: true, sessionId: result.sessionId };
|
|
892
|
+
case "requestToApproveDirectoryCreation":
|
|
893
|
+
reply.code(500);
|
|
894
|
+
return { success: false, error: `Cannot restart: working directory ${result.directory} needs to be created first` };
|
|
895
|
+
case "error":
|
|
896
|
+
reply.code(500);
|
|
897
|
+
return { success: false, error: result.errorMessage };
|
|
898
|
+
}
|
|
899
|
+
});
|
|
871
900
|
typed.post("/terminal-hook", {
|
|
872
901
|
schema: {
|
|
873
902
|
body: z.any(),
|
|
@@ -6167,6 +6196,10 @@ async function removeTeamWorktree(resource) {
|
|
|
6167
6196
|
if (ownBranch) await git(repository, ["branch", "-D", branch]);
|
|
6168
6197
|
}
|
|
6169
6198
|
|
|
6199
|
+
function refusalCode(error) {
|
|
6200
|
+
const code = axios.isAxiosError(error) ? error.response?.data?.error : void 0;
|
|
6201
|
+
return typeof code === "string" && /^[a-z_]{1,64}$/.test(code) ? ` (${code})` : "";
|
|
6202
|
+
}
|
|
6170
6203
|
function persistedSpawnMatches(operationId) {
|
|
6171
6204
|
return Object.entries(readPersistedSessions()).filter(([, entry]) => entry.metadata?.teamOperationId === operationId);
|
|
6172
6205
|
}
|
|
@@ -6201,6 +6234,7 @@ function createTeamWorker(deps) {
|
|
|
6201
6234
|
writeReceipt$1(home, receipt);
|
|
6202
6235
|
}
|
|
6203
6236
|
if (receipt.phase === "completed") return;
|
|
6237
|
+
let sessionStopped = false;
|
|
6204
6238
|
try {
|
|
6205
6239
|
if (op.type === "spawn") {
|
|
6206
6240
|
if (ownerRetryPending(op, receipt) && (receipt.phase === "prepared" || receipt.phase === "spawning" && persistedSpawnMatches(op.id).length === 0)) {
|
|
@@ -6297,10 +6331,11 @@ function createTeamWorker(deps) {
|
|
|
6297
6331
|
return;
|
|
6298
6332
|
}
|
|
6299
6333
|
const bot = team.bots.find((candidate) => candidate.id === op.botId);
|
|
6300
|
-
if (!bot ||
|
|
6334
|
+
if (!bot || op.sessionId && bot.transferredTo?.sessionId === op.sessionId) throw new Error("Worker binding changed; preserve resources for reconciliation");
|
|
6301
6335
|
if (op.sessionId) {
|
|
6302
6336
|
await deps.stopAndWait(op.sessionId);
|
|
6303
6337
|
await archiveSession(op.sessionId);
|
|
6338
|
+
sessionStopped = true;
|
|
6304
6339
|
}
|
|
6305
6340
|
if (team.archivedAt !== void 0) {
|
|
6306
6341
|
await complete(op, receipt);
|
|
@@ -6323,7 +6358,7 @@ function createTeamWorker(deps) {
|
|
|
6323
6358
|
} catch {
|
|
6324
6359
|
}
|
|
6325
6360
|
}
|
|
6326
|
-
await action(op.teamId, `failure-${op.id}-${receipt.phase}-${createHash("sha256").update(detail).digest("hex").slice(0, 12)}`, { type: "fail-operation", operationId: op.id, machineId: deps.machineId, claimId: receipt.claimId, error: detail.slice(0, 1e3), unknown }).catch(() => {
|
|
6361
|
+
await action(op.teamId, `failure-${op.id}-${receipt.phase}-${createHash("sha256").update(detail).digest("hex").slice(0, 12)}${sessionStopped ? "-stopped" : ""}`, { type: "fail-operation", operationId: op.id, machineId: deps.machineId, claimId: receipt.claimId, error: detail.slice(0, 1e3), unknown, ...sessionStopped ? { sessionStopped: true } : {} }).catch(() => {
|
|
6327
6362
|
});
|
|
6328
6363
|
deps.log(`Teams operation ${op.id} ${unknown ? "needs reconciliation" : "will retry"}`);
|
|
6329
6364
|
}
|
|
@@ -6403,8 +6438,8 @@ Use the teams tools to inspect current task state before acting. This message is
|
|
|
6403
6438
|
if (closed) break;
|
|
6404
6439
|
try {
|
|
6405
6440
|
await execute(op);
|
|
6406
|
-
} catch {
|
|
6407
|
-
deps.log(`Teams operation ${op.id} remains pending`);
|
|
6441
|
+
} catch (error) {
|
|
6442
|
+
deps.log(`Teams operation ${op.id} remains pending${refusalCode(error)}`);
|
|
6408
6443
|
}
|
|
6409
6444
|
}
|
|
6410
6445
|
await flushEvents(data.teams ?? []);
|
|
@@ -8181,7 +8216,7 @@ async function startDaemon() {
|
|
|
8181
8216
|
}
|
|
8182
8217
|
const model = sanitizeResumeModel(options?.model);
|
|
8183
8218
|
if (model) args.push("--model", model);
|
|
8184
|
-
const permissionMode = sanitizeSpawnPermissionMode(options?.permissionMode);
|
|
8219
|
+
const permissionMode = sanitizeSpawnPermissionMode(options?.permissionMode ?? (options?.keepPublishedPermissionMode ? publishedRelaunchPermissionMode(metadata) : void 0));
|
|
8185
8220
|
if (permissionMode) args.push("--permission-mode", permissionMode);
|
|
8186
8221
|
restartCounts.set(happySessionId, recordRestartAttempt(prior));
|
|
8187
8222
|
const teamEnv = await teamRelaunchEnvFor(happySessionId, metadata);
|
|
@@ -8340,6 +8375,8 @@ async function startDaemon() {
|
|
|
8340
8375
|
spawnSession,
|
|
8341
8376
|
resumeSession,
|
|
8342
8377
|
// B-501: `very-happy send --resume`
|
|
8378
|
+
restartSession,
|
|
8379
|
+
// B-794: `very-happy session provider`
|
|
8343
8380
|
requestShutdown: () => requestShutdown("happy-cli"),
|
|
8344
8381
|
onHappySessionWebhook,
|
|
8345
8382
|
onSessionStateEvent,
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var mirrorProtocol = require('./mirrorProtocol-
|
|
3
|
+
var mirrorProtocol = require('./mirrorProtocol-D4CR5I5W.cjs');
|
|
4
4
|
var fsMkdir = require('./fsMkdir-0K3yENml.cjs');
|
|
5
|
-
var piRunnerArgs = require('./piRunnerArgs-
|
|
5
|
+
var piRunnerArgs = require('./piRunnerArgs-Dgjmj8KL.cjs');
|
|
6
6
|
var fs = require('fs/promises');
|
|
7
7
|
var os$1 = require('os');
|
|
8
8
|
var tmp = require('tmp');
|
|
9
9
|
var axios = require('axios');
|
|
10
10
|
var node_fs = require('node:fs');
|
|
11
11
|
var path = require('node:path');
|
|
12
|
-
var configuration = require('./configuration-
|
|
13
|
-
var api = require('./api-
|
|
14
|
-
var spawnAgents = require('./spawnAgents-
|
|
15
|
-
var logger = require('./logger-
|
|
16
|
-
var index$2 = require('./index-
|
|
17
|
-
var auth = require('./auth-
|
|
12
|
+
var configuration = require('./configuration-C9Sx-Foo.cjs');
|
|
13
|
+
var api = require('./api-rw5xkzxo.cjs');
|
|
14
|
+
var spawnAgents = require('./spawnAgents-D15n6tAj.cjs');
|
|
15
|
+
var logger = require('./logger-CrtT0opS.cjs');
|
|
16
|
+
var index$2 = require('./index-NhmqjrGv.cjs');
|
|
17
|
+
var auth = require('./auth-gGryJImw.cjs');
|
|
18
18
|
var child_process = require('child_process');
|
|
19
|
-
var _package = require('./package-
|
|
20
|
-
var doctor = require('./doctor-
|
|
21
|
-
var spawnHappyCLI = require('./spawnHappyCLI-
|
|
22
|
-
var persistence = require('./persistence-
|
|
23
|
-
var controlClient = require('./controlClient-
|
|
24
|
-
var sessionOps = require('./sessionOps-
|
|
19
|
+
var _package = require('./package-DczR1k0c.cjs');
|
|
20
|
+
var doctor = require('./doctor-DRdV3thy.cjs');
|
|
21
|
+
var spawnHappyCLI = require('./spawnHappyCLI-8NcKgkuy.cjs');
|
|
22
|
+
var persistence = require('./persistence-IYH6bAXY.cjs');
|
|
23
|
+
var controlClient = require('./controlClient-BLO1_pPx.cjs');
|
|
24
|
+
var sessionOps = require('./sessionOps-hRqzcMXB.cjs');
|
|
25
25
|
var fastify = require('fastify');
|
|
26
26
|
var z = require('zod');
|
|
27
27
|
var fastifyTypeProviderZod = require('fastify-type-provider-zod');
|
|
@@ -29,62 +29,62 @@ var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
|
29
29
|
var node_crypto = require('node:crypto');
|
|
30
30
|
var previewPath = require('./previewPath-B0rBdhy1.cjs');
|
|
31
31
|
var backgroundTaskActivity = require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
32
|
-
var rateLimitWindows = require('./rateLimitWindows-
|
|
33
|
-
var peerTools = require('./peerTools-
|
|
32
|
+
var rateLimitWindows = require('./rateLimitWindows-CeogT1b6.cjs');
|
|
33
|
+
var peerTools = require('./peerTools-Cufh4Qp_.cjs');
|
|
34
34
|
var os = require('node:os');
|
|
35
|
-
var remoteSessionClient = require('./remoteSessionClient-
|
|
36
|
-
var bootstrap = require('./bootstrap-
|
|
37
|
-
var index$1 = require('./index-
|
|
35
|
+
var remoteSessionClient = require('./remoteSessionClient-CuAkp19e.cjs');
|
|
36
|
+
var bootstrap = require('./bootstrap-BPz1iX77.cjs');
|
|
37
|
+
var index$1 = require('./index-BsoUsrKS.cjs');
|
|
38
38
|
var require$$0 = require('fs');
|
|
39
39
|
var require$$1 = require('path');
|
|
40
40
|
var node_child_process = require('node:child_process');
|
|
41
41
|
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
42
42
|
var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
|
|
43
|
-
var machineMetadata = require('./machineMetadata-
|
|
43
|
+
var machineMetadata = require('./machineMetadata-D1hlm_oF.cjs');
|
|
44
44
|
var fileStore = require('./fileStore-7qhnbs6N.cjs');
|
|
45
45
|
var pi = require('./pi-DlsrPCTa.cjs');
|
|
46
46
|
var require$$3 = require('crypto');
|
|
47
47
|
var detectCLI = require('./detectCLI-BuYR_Qxe.cjs');
|
|
48
|
-
var handleResumeCommand = require('./handleResumeCommand-
|
|
48
|
+
var handleResumeCommand = require('./handleResumeCommand-z7wY7QVM.cjs');
|
|
49
49
|
var webPanels = require('./webPanels-FCgFKvVe.cjs');
|
|
50
|
-
var index = require('./index-
|
|
50
|
+
var index = require('./index-Ub-5xbcU.cjs');
|
|
51
51
|
var promises = require('node:fs/promises');
|
|
52
52
|
var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
|
|
53
|
-
var client = require('./client-
|
|
54
|
-
var client$1 = require('./client-
|
|
53
|
+
var client = require('./client-C49zFRkX.cjs');
|
|
54
|
+
var client$1 = require('./client-BFDji81N.cjs');
|
|
55
55
|
var daemonSupervisor = require('./daemonSupervisor-57JYYzMf.cjs');
|
|
56
56
|
var path$1 = require('./path-B7zW-WwE.cjs');
|
|
57
57
|
var editPaths = require('./editPaths-Bqp4OFPw.cjs');
|
|
58
|
-
var startFileWatcher = require('./startFileWatcher-
|
|
59
|
-
var sync = require('./sync-
|
|
58
|
+
var startFileWatcher = require('./startFileWatcher-CjgKvec9.cjs');
|
|
59
|
+
var sync = require('./sync-DKSZOi6w.cjs');
|
|
60
60
|
var types = require('./types-CRS-srZK.cjs');
|
|
61
61
|
var tmuxSocket = require('./tmuxSocket-D-Xt6Vn-.cjs');
|
|
62
|
-
var sessionLock = require('./sessionLock-
|
|
62
|
+
var sessionLock = require('./sessionLock-DNGDn9oj.cjs');
|
|
63
63
|
var doctor$1 = require('./doctor-u46qYYKX.cjs');
|
|
64
64
|
var resources = require('./resources-CqwHPhdK.cjs');
|
|
65
65
|
var node_util = require('node:util');
|
|
66
|
-
var template = require('./template-
|
|
66
|
+
var template = require('./template-BLJxflCH.cjs');
|
|
67
67
|
var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
|
|
68
|
-
require('./acpSessionResume-
|
|
69
|
-
require('./lidState-
|
|
68
|
+
require('./acpSessionResume-DZ65DBeE.cjs');
|
|
69
|
+
require('./lidState-C4YgPn6y.cjs');
|
|
70
70
|
require('node:events');
|
|
71
71
|
require('socket.io-client');
|
|
72
|
-
require('./pushNotifications-
|
|
72
|
+
require('./pushNotifications-BgQ_QTgS.cjs');
|
|
73
73
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
74
74
|
require('./limits-C-a7gr04.cjs');
|
|
75
|
-
require('./time-
|
|
76
|
-
require('./registerCommonHandlers-
|
|
75
|
+
require('./time-D-8GFCE7.cjs');
|
|
76
|
+
require('./registerCommonHandlers-CRqKXwQt.cjs');
|
|
77
77
|
require('util');
|
|
78
78
|
require('cross-spawn');
|
|
79
79
|
require('@paralleldrive/cuid2');
|
|
80
80
|
require('chalk');
|
|
81
81
|
require('node:module');
|
|
82
82
|
require('tweetnacl');
|
|
83
|
-
require('./browser-
|
|
83
|
+
require('./browser-D9D-1eqa.cjs');
|
|
84
84
|
require('open');
|
|
85
85
|
require('./ids-B6ZC0HGt.cjs');
|
|
86
86
|
require('url');
|
|
87
|
-
require('./localHappyAgentAuth-
|
|
87
|
+
require('./localHappyAgentAuth-BzCuIkzi.cjs');
|
|
88
88
|
require('./processTreeSnapshot-mDbnuojn.cjs');
|
|
89
89
|
require('ps-list');
|
|
90
90
|
|
|
@@ -593,6 +593,7 @@ function startDaemonControlServer({
|
|
|
593
593
|
stopSession,
|
|
594
594
|
spawnSession,
|
|
595
595
|
resumeSession,
|
|
596
|
+
restartSession,
|
|
596
597
|
requestShutdown,
|
|
597
598
|
onHappySessionWebhook,
|
|
598
599
|
onSessionStateEvent,
|
|
@@ -889,6 +890,34 @@ function startDaemonControlServer({
|
|
|
889
890
|
return { success: false, error: result.errorMessage };
|
|
890
891
|
}
|
|
891
892
|
});
|
|
893
|
+
typed.post("/restart-session", {
|
|
894
|
+
schema: {
|
|
895
|
+
body: z.z.object({ sessionId: z.z.string().min(1).max(200) }),
|
|
896
|
+
response: {
|
|
897
|
+
200: z.z.object({ success: z.z.boolean(), sessionId: z.z.string().optional(), error: z.z.string().optional() }),
|
|
898
|
+
500: z.z.object({ success: z.z.boolean(), error: z.z.string().optional() }),
|
|
899
|
+
503: z.z.object({ success: z.z.boolean(), error: z.z.string().optional() })
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
}, async (request, reply) => {
|
|
903
|
+
const { sessionId } = request.body;
|
|
904
|
+
if (!restartSession) {
|
|
905
|
+
reply.code(503);
|
|
906
|
+
return { success: false, error: "daemon is still starting up" };
|
|
907
|
+
}
|
|
908
|
+
logger.logger.debug(`[CONTROL SERVER] Restart session request: ${sessionId}`);
|
|
909
|
+
const result = await restartSession(sessionId, { keepPublishedPermissionMode: true });
|
|
910
|
+
switch (result.type) {
|
|
911
|
+
case "success":
|
|
912
|
+
return { success: true, sessionId: result.sessionId };
|
|
913
|
+
case "requestToApproveDirectoryCreation":
|
|
914
|
+
reply.code(500);
|
|
915
|
+
return { success: false, error: `Cannot restart: working directory ${result.directory} needs to be created first` };
|
|
916
|
+
case "error":
|
|
917
|
+
reply.code(500);
|
|
918
|
+
return { success: false, error: result.errorMessage };
|
|
919
|
+
}
|
|
920
|
+
});
|
|
892
921
|
typed.post("/terminal-hook", {
|
|
893
922
|
schema: {
|
|
894
923
|
body: z.z.any(),
|
|
@@ -6188,6 +6217,10 @@ async function removeTeamWorktree(resource) {
|
|
|
6188
6217
|
if (ownBranch) await git(repository, ["branch", "-D", branch]);
|
|
6189
6218
|
}
|
|
6190
6219
|
|
|
6220
|
+
function refusalCode(error) {
|
|
6221
|
+
const code = axios.isAxiosError(error) ? error.response?.data?.error : void 0;
|
|
6222
|
+
return typeof code === "string" && /^[a-z_]{1,64}$/.test(code) ? ` (${code})` : "";
|
|
6223
|
+
}
|
|
6191
6224
|
function persistedSpawnMatches(operationId) {
|
|
6192
6225
|
return Object.entries(persistence.readPersistedSessions()).filter(([, entry]) => entry.metadata?.teamOperationId === operationId);
|
|
6193
6226
|
}
|
|
@@ -6222,6 +6255,7 @@ function createTeamWorker(deps) {
|
|
|
6222
6255
|
writeReceipt$1(home, receipt);
|
|
6223
6256
|
}
|
|
6224
6257
|
if (receipt.phase === "completed") return;
|
|
6258
|
+
let sessionStopped = false;
|
|
6225
6259
|
try {
|
|
6226
6260
|
if (op.type === "spawn") {
|
|
6227
6261
|
if (machineMetadata.ownerRetryPending(op, receipt) && (receipt.phase === "prepared" || receipt.phase === "spawning" && persistedSpawnMatches(op.id).length === 0)) {
|
|
@@ -6318,10 +6352,11 @@ function createTeamWorker(deps) {
|
|
|
6318
6352
|
return;
|
|
6319
6353
|
}
|
|
6320
6354
|
const bot = team.bots.find((candidate) => candidate.id === op.botId);
|
|
6321
|
-
if (!bot ||
|
|
6355
|
+
if (!bot || op.sessionId && bot.transferredTo?.sessionId === op.sessionId) throw new Error("Worker binding changed; preserve resources for reconciliation");
|
|
6322
6356
|
if (op.sessionId) {
|
|
6323
6357
|
await deps.stopAndWait(op.sessionId);
|
|
6324
6358
|
await sessionOps.archiveSession(op.sessionId);
|
|
6359
|
+
sessionStopped = true;
|
|
6325
6360
|
}
|
|
6326
6361
|
if (team.archivedAt !== void 0) {
|
|
6327
6362
|
await complete(op, receipt);
|
|
@@ -6344,7 +6379,7 @@ function createTeamWorker(deps) {
|
|
|
6344
6379
|
} catch {
|
|
6345
6380
|
}
|
|
6346
6381
|
}
|
|
6347
|
-
await action(op.teamId, `failure-${op.id}-${receipt.phase}-${node_crypto.createHash("sha256").update(detail).digest("hex").slice(0, 12)}`, { type: "fail-operation", operationId: op.id, machineId: deps.machineId, claimId: receipt.claimId, error: detail.slice(0, 1e3), unknown }).catch(() => {
|
|
6382
|
+
await action(op.teamId, `failure-${op.id}-${receipt.phase}-${node_crypto.createHash("sha256").update(detail).digest("hex").slice(0, 12)}${sessionStopped ? "-stopped" : ""}`, { type: "fail-operation", operationId: op.id, machineId: deps.machineId, claimId: receipt.claimId, error: detail.slice(0, 1e3), unknown, ...sessionStopped ? { sessionStopped: true } : {} }).catch(() => {
|
|
6348
6383
|
});
|
|
6349
6384
|
deps.log(`Teams operation ${op.id} ${unknown ? "needs reconciliation" : "will retry"}`);
|
|
6350
6385
|
}
|
|
@@ -6424,8 +6459,8 @@ Use the teams tools to inspect current task state before acting. This message is
|
|
|
6424
6459
|
if (closed) break;
|
|
6425
6460
|
try {
|
|
6426
6461
|
await execute(op);
|
|
6427
|
-
} catch {
|
|
6428
|
-
deps.log(`Teams operation ${op.id} remains pending`);
|
|
6462
|
+
} catch (error) {
|
|
6463
|
+
deps.log(`Teams operation ${op.id} remains pending${refusalCode(error)}`);
|
|
6429
6464
|
}
|
|
6430
6465
|
}
|
|
6431
6466
|
await flushEvents(data.teams ?? []);
|
|
@@ -8202,7 +8237,7 @@ async function startDaemon() {
|
|
|
8202
8237
|
}
|
|
8203
8238
|
const model = sanitizeResumeModel(options?.model);
|
|
8204
8239
|
if (model) args.push("--model", model);
|
|
8205
|
-
const permissionMode = spawnAgents.sanitizeSpawnPermissionMode(options?.permissionMode);
|
|
8240
|
+
const permissionMode = spawnAgents.sanitizeSpawnPermissionMode(options?.permissionMode ?? (options?.keepPublishedPermissionMode ? publishedRelaunchPermissionMode(metadata) : void 0));
|
|
8206
8241
|
if (permissionMode) args.push("--permission-mode", permissionMode);
|
|
8207
8242
|
restartCounts.set(happySessionId, recordRestartAttempt(prior));
|
|
8208
8243
|
const teamEnv = await teamRelaunchEnvFor(happySessionId, metadata);
|
|
@@ -8361,6 +8396,8 @@ async function startDaemon() {
|
|
|
8361
8396
|
spawnSession,
|
|
8362
8397
|
resumeSession,
|
|
8363
8398
|
// B-501: `very-happy send --resume`
|
|
8399
|
+
restartSession,
|
|
8400
|
+
// B-794: `very-happy session provider`
|
|
8364
8401
|
requestShutdown: () => requestShutdown("happy-cli"),
|
|
8365
8402
|
onHappySessionWebhook,
|
|
8366
8403
|
onSessionStateEvent,
|
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var os = require('node:os');
|
|
4
|
-
var sessionLock = require('./sessionLock-
|
|
5
|
-
var persistence = require('./persistence-
|
|
6
|
-
var defaultPermissionMode = require('./defaultPermissionMode-
|
|
4
|
+
var sessionLock = require('./sessionLock-DNGDn9oj.cjs');
|
|
5
|
+
var persistence = require('./persistence-IYH6bAXY.cjs');
|
|
6
|
+
var defaultPermissionMode = require('./defaultPermissionMode-B7mjHQKp.cjs');
|
|
7
7
|
var node_crypto = require('node:crypto');
|
|
8
|
-
var api = require('./api-
|
|
9
|
-
var logger = require('./logger-
|
|
10
|
-
var createSessionMetadata = require('./createSessionMetadata-
|
|
11
|
-
var _package = require('./package-
|
|
12
|
-
var index = require('./index-
|
|
8
|
+
var api = require('./api-rw5xkzxo.cjs');
|
|
9
|
+
var logger = require('./logger-CrtT0opS.cjs');
|
|
10
|
+
var createSessionMetadata = require('./createSessionMetadata-5Mde6Dfh.cjs');
|
|
11
|
+
var _package = require('./package-DczR1k0c.cjs');
|
|
12
|
+
var index = require('./index-Ub-5xbcU.cjs');
|
|
13
13
|
var forkBackfill = require('./forkBackfill-8eLDeS73.cjs');
|
|
14
|
-
var configuration = require('./configuration-
|
|
15
|
-
var
|
|
16
|
-
var
|
|
14
|
+
var configuration = require('./configuration-C9Sx-Foo.cjs');
|
|
15
|
+
var providerBinding = require('./providerBinding-B-Qbx9W2.cjs');
|
|
16
|
+
var controlClient = require('./controlClient-BLO1_pPx.cjs');
|
|
17
|
+
var machineMetadata = require('./machineMetadata-D1hlm_oF.cjs');
|
|
17
18
|
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
18
19
|
var path = require('node:path');
|
|
19
|
-
var startupSessionCreate = require('./startupSessionCreate-
|
|
20
|
+
var startupSessionCreate = require('./startupSessionCreate-CXRVahaU.cjs');
|
|
20
21
|
var permissionMode = require('./permissionMode-CrV-XuMs.cjs');
|
|
21
22
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
22
23
|
var promises = require('node:fs/promises');
|
|
23
|
-
var attachmentContent = require('./attachmentContent-
|
|
24
|
+
var attachmentContent = require('./attachmentContent-K_Up4InS.cjs');
|
|
24
25
|
var transcriptCursor = require('./transcriptCursor-DcXGLeSc.cjs');
|
|
25
26
|
var startupPlan = require('./startupPlan-BLMbfQIH.cjs');
|
|
26
27
|
require('node:fs');
|
|
@@ -28,36 +29,36 @@ require('./processTreeSnapshot-mDbnuojn.cjs');
|
|
|
28
29
|
require('node:child_process');
|
|
29
30
|
require('zod');
|
|
30
31
|
require('axios');
|
|
31
|
-
require('./lidState-
|
|
32
|
+
require('./lidState-C4YgPn6y.cjs');
|
|
32
33
|
require('os');
|
|
33
34
|
require('child_process');
|
|
34
35
|
require('node:events');
|
|
35
36
|
require('socket.io-client');
|
|
36
|
-
require('./pushNotifications-
|
|
37
|
+
require('./pushNotifications-BgQ_QTgS.cjs');
|
|
37
38
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
38
39
|
require('./limits-C-a7gr04.cjs');
|
|
39
|
-
require('./time-
|
|
40
|
-
require('./registerCommonHandlers-
|
|
40
|
+
require('./time-D-8GFCE7.cjs');
|
|
41
|
+
require('./registerCommonHandlers-CRqKXwQt.cjs');
|
|
41
42
|
require('util');
|
|
42
43
|
require('fs/promises');
|
|
43
44
|
require('crypto');
|
|
44
45
|
require('path');
|
|
45
46
|
require('cross-spawn');
|
|
46
47
|
require('@paralleldrive/cuid2');
|
|
47
|
-
require('./sync-
|
|
48
|
+
require('./sync-DKSZOi6w.cjs');
|
|
48
49
|
require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
49
50
|
require('chalk');
|
|
50
51
|
require('node:util');
|
|
51
52
|
require('./detectCLI-BuYR_Qxe.cjs');
|
|
52
53
|
require('fs');
|
|
53
|
-
require('./localHappyAgentAuth-
|
|
54
|
+
require('./localHappyAgentAuth-BzCuIkzi.cjs');
|
|
54
55
|
require('tweetnacl');
|
|
55
56
|
require('./fsMkdir-0K3yENml.cjs');
|
|
56
57
|
require('url');
|
|
57
58
|
|
|
58
59
|
const DEFAULT_CLAUDE_MODEL = void 0;
|
|
59
60
|
const DEFAULT_CLAUDE_EFFORT = void 0;
|
|
60
|
-
const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-
|
|
61
|
+
const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-DqOgRuKq.cjs'); });
|
|
61
62
|
async function runClaude(credentials, options = {}) {
|
|
62
63
|
logger.logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
|
|
63
64
|
logger.logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
|
|
@@ -71,7 +72,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
71
72
|
const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
|
|
72
73
|
if (isAssistantVariant) {
|
|
73
74
|
try {
|
|
74
|
-
const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-
|
|
75
|
+
const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-BPz1iX77.cjs'); });
|
|
75
76
|
await bootstrapAssistantHome();
|
|
76
77
|
} catch (error) {
|
|
77
78
|
logger.logger.debug("[START] Assistant home bootstrap failed:", error);
|
|
@@ -191,7 +192,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
191
192
|
}
|
|
192
193
|
if (!response) {
|
|
193
194
|
let offlineSessionId = null;
|
|
194
|
-
const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-
|
|
195
|
+
const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-Dywp8NKr.cjs'); });
|
|
195
196
|
const { createSessionScanner: createSessionScanner2 } = await loadDeps();
|
|
196
197
|
const reconnection = api.startOfflineReconnection({
|
|
197
198
|
serverUrl: configuration.configuration.serverUrl,
|
|
@@ -427,6 +428,20 @@ async function runClaude(credentials, options = {}) {
|
|
|
427
428
|
}
|
|
428
429
|
});
|
|
429
430
|
options = { ...options, claudeEnvVars: { ...options.claudeEnvVars, VH_PEER_SESSION_ID: response.id } };
|
|
431
|
+
let providerPinnedModel;
|
|
432
|
+
try {
|
|
433
|
+
const provider = providerBinding.loadSessionProvider(configuration.configuration.happyHomeDir, response.id);
|
|
434
|
+
if (provider) {
|
|
435
|
+
providerBinding.applyProviderEnv(process.env, provider);
|
|
436
|
+
options = { ...options, model: provider.model };
|
|
437
|
+
providerPinnedModel = provider.model;
|
|
438
|
+
logger.logger.debug(`[START] B-794 provider binding: profile=${provider.profile} model=${provider.model} baseUrl=${provider.baseUrl}`);
|
|
439
|
+
}
|
|
440
|
+
} catch (error) {
|
|
441
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
442
|
+
logger.logger.debug(`[START] B-794 provider binding failed: ${reason}`);
|
|
443
|
+
session.sendSessionEvent({ type: "message", message: `Provider binding ignored: ${reason}` });
|
|
444
|
+
}
|
|
430
445
|
const initialScannerSessionId = forkClaudeSessionId ?? (metadata.claudeSessionId ?? null);
|
|
431
446
|
const transcriptPathHints = new transcriptCursor.TranscriptPathHints();
|
|
432
447
|
const remoteScanner = await createSessionScanner({
|
|
@@ -579,7 +594,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
579
594
|
claudeArgs: options.claudeArgs,
|
|
580
595
|
setting: settings?.claudePrewarm
|
|
581
596
|
};
|
|
582
|
-
const prewarmCtx = () => ({ sandboxEnabled, isAssistantVariant, staleModeSnapshot: false });
|
|
597
|
+
const prewarmCtx = () => ({ sandboxEnabled, isAssistantVariant, staleModeSnapshot: false, pinnedModel: providerPinnedModel });
|
|
583
598
|
const predictFirstMessageMode = () => prewarmCache ? resolveMessageMode(currentModeState(), prewarmPredictionMeta(prewarmCache), prewarmCtx()).mode : null;
|
|
584
599
|
let firstMessageScored = false;
|
|
585
600
|
const scoreFirstMessage = (meta, predicted, actual) => {
|
|
@@ -681,7 +696,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
681
696
|
}
|
|
682
697
|
const previousPermissionMode = currentPermissionMode;
|
|
683
698
|
const predictedFirstMode = firstMessageScored ? null : predictFirstMessageMode();
|
|
684
|
-
const resolved = resolveMessageMode(currentModeState(), message.meta, { sandboxEnabled, isAssistantVariant, staleModeSnapshot });
|
|
699
|
+
const resolved = resolveMessageMode(currentModeState(), message.meta, { sandboxEnabled, isAssistantVariant, staleModeSnapshot, pinnedModel: providerPinnedModel });
|
|
685
700
|
if ("publishPermissionMode" in resolved) {
|
|
686
701
|
publishPermissionMode(resolved.publishPermissionMode);
|
|
687
702
|
const ignoredDefaultDowngrade = (previousPermissionMode === "bypassPermissions" || previousPermissionMode === "yolo") && message.meta?.permissionMode === "default" && currentPermissionMode === previousPermissionMode;
|