very-happy-cli 0.2.178 → 0.2.180
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-DCQXHRzT.mjs → AcpBackend-B8Zi30Zh.mjs} +135 -16
- package/dist/{AcpBackend-CDkAQXYf.cjs → AcpBackend-DfRDtMcG.cjs} +135 -16
- package/dist/{AcpSessionManager-DckmUZza.cjs → AcpSessionManager-CASKOnOj.cjs} +38 -4
- package/dist/{AcpSessionManager-BXrQcqwC.mjs → AcpSessionManager-i8Rab0xT.mjs} +38 -4
- package/dist/{BasePermissionHandler-BVlrEhIi.mjs → BasePermissionHandler-26fKbRCm.mjs} +5 -2
- package/dist/{BasePermissionHandler-DyLmKKtO.cjs → BasePermissionHandler-BlM_tfej.cjs} +5 -2
- package/dist/acpSessionResume-B9l54P-X.mjs +67 -0
- package/dist/acpSessionResume-CR5pmgVo.cjs +74 -0
- package/dist/{agentHome-CEp9RMyK.cjs → agentHome-C7Sb7-Tz.cjs} +4 -4
- package/dist/{agentHome-C1xi37as.mjs → agentHome-CmGy0NWv.mjs} +4 -4
- package/dist/{api-JANhFdZV.cjs → api-DM7b1OKj.cjs} +38 -262
- package/dist/{api-Dib0dmqC.mjs → api-Hov8p7CA.mjs} +32 -256
- package/dist/{apiMachine-DNTJidYH.mjs → apiMachine-CwGEhQDT.mjs} +62 -15
- package/dist/{apiMachine-QhK-sKcr.cjs → apiMachine-DkGRj-Ai.cjs} +64 -17
- package/dist/{attachmentContent-bpQTBJ0y.cjs → attachmentContent-CEm13_gF.cjs} +4 -4
- package/dist/{attachmentContent-DkkdpSSJ.mjs → attachmentContent-CIn4iPEk.mjs} +2 -2
- package/dist/{auth-BRjd2esb.mjs → auth-BG1DY0gj.mjs} +5 -5
- package/dist/{auth-DgIV0Cvt.cjs → auth-CBXnm-Mj.cjs} +5 -5
- package/dist/{auth-omWDtgR8.cjs → auth-Dawj7pP5.cjs} +8 -8
- package/dist/{auth-DNct7VUi.mjs → auth-rggxMpEE.mjs} +8 -8
- package/dist/{auto-DKGFOJBo.mjs → auto-CXXLXGeL.mjs} +19 -18
- package/dist/{auto-CI16FZmX.cjs → auto-CbYOfoPS.cjs} +19 -18
- package/dist/{backgroundTaskActivity-BVwJBl02.mjs → backgroundTaskActivity-8PdPxrvy.mjs} +1 -1
- package/dist/{bootstrap-DCQ87Aan.cjs → bootstrap-DoA7okld.cjs} +2 -2
- package/dist/{bootstrap-BUagGC_-.mjs → bootstrap-Dt5I1SOl.mjs} +2 -2
- package/dist/{browser-Dj_DYQEh.mjs → browser-DUNetFT4.mjs} +1 -1
- package/dist/{browser-CSKhc0Bl.cjs → browser-DZ6qRtfH.cjs} +1 -1
- package/dist/{claudeCliPath-U4HHmV4r.cjs → claudeCliPath-GaP3UUz1.cjs} +1 -1
- package/dist/{claudeLocal-CdIVnOZp.cjs → claudeLocal--DNyMOSv.cjs} +8 -7
- package/dist/{claudeLocal-CCCvAeMd.mjs → claudeLocal-OHWQigCl.mjs} +6 -5
- package/dist/{claudeLocalLauncher-BmrpaRYJ.mjs → claudeLocalLauncher-BStvfa7M.mjs} +11 -10
- package/dist/{claudeLocalLauncher-21-xh5gc.cjs → claudeLocalLauncher-BhvPbcyH.cjs} +13 -12
- package/dist/{claudeSessionFork-kYCP1IJB.cjs → claudeSessionFork-Be16vzGc.cjs} +1 -1
- package/dist/{claudeSessionFork-DvxMKAmY.mjs → claudeSessionFork-GAVWhiKG.mjs} +1 -1
- package/dist/{client-C4zKGjiJ.cjs → client-BWjaHKtj.cjs} +2 -2
- package/dist/client-Ca5Pcgy_.mjs +71 -0
- package/dist/{client-CnlkkrZO.mjs → client-CnB7kRCT.mjs} +2 -2
- package/dist/{client-BTX9hsbr.mjs → client-D4uPb1uu.mjs} +3 -3
- package/dist/client-DJplzPjD.cjs +76 -0
- package/dist/{client-Dnza1hgN.cjs → client-D_loZ9IK.cjs} +3 -3
- package/dist/codex/happyMcpStdioBridge.cjs +24 -15
- package/dist/codex/happyMcpStdioBridge.mjs +25 -16
- package/dist/{codexAppServerClient-DvkpQgyv.mjs → codexAppServerClient-CO4G6OS4.mjs} +3 -3
- package/dist/{codexAppServerClient-CRlBWGn3.cjs → codexAppServerClient-PE-12AsW.cjs} +3 -3
- package/dist/{codexCommand-DzxIWXIT.cjs → codexCommand-BNoD1t1C.cjs} +127 -116
- package/dist/{codexCommand-BxjogBzU.mjs → codexCommand-B_xUH79E.mjs} +77 -66
- package/dist/{codexTermination-C28FzlLb.cjs → codexTermination-BmBbizFK.cjs} +7 -2
- package/dist/{codexTermination-ySDNMEhd.mjs → codexTermination-Dx48ma6e.mjs} +7 -2
- package/dist/{config-BFB5uJ4t.cjs → config-CtwEUxUP.cjs} +26 -26
- package/dist/{config-DwfEpFr3.mjs → config-DSu0Blos.mjs} +3 -3
- package/dist/{configuration-4TGMrjul.cjs → configuration-CYO-kPOS.cjs} +1 -1
- package/dist/{configuration-DVrb61aY.mjs → configuration-PxzEJumr.mjs} +1 -1
- package/dist/{connect-C7FPY0PI.mjs → connect-BQrg3TB6.mjs} +15 -15
- package/dist/{connect-QH2VJGBG.cjs → connect-Dq7wndzR.cjs} +28 -28
- package/dist/{context-JoKu0V54.cjs → context-6TP-iz_c.cjs} +1 -1
- package/dist/{context-B3XPVJlj.mjs → context-CJGRRGWW.mjs} +1 -1
- package/dist/{controlClient-BTaZlbC6.cjs → controlClient-Bqv5v5OM.cjs} +3 -3
- package/dist/{controlClient-BYKyGyxj.mjs → controlClient-DoeYovwP.mjs} +4 -4
- package/dist/{createSessionMetadata-8Fuj2-IV.mjs → createSessionMetadata-DDIChCx8.mjs} +2 -2
- package/dist/{createSessionMetadata-B2NynaWZ.cjs → createSessionMetadata-xz767pcG.cjs} +3 -3
- package/dist/{defaultPermissionMode-BEWCqJU-.cjs → defaultPermissionMode-PkZGsQDk.cjs} +2 -2
- package/dist/{defaultPermissionMode-B8kJG9uI.mjs → defaultPermissionMode-i5KzdK09.mjs} +2 -2
- package/dist/{detectCLI-DR9ZaN6B.cjs → detectCLI-BuYR_Qxe.cjs} +4 -4
- package/dist/{deterministicJson-C5ZwZ7hu.mjs → deterministicJson-CTEJDqtS.mjs} +217 -12
- package/dist/{deterministicJson-BjNQsAjO.cjs → deterministicJson-xqA6DaOm.cjs} +222 -16
- package/dist/{doctor-BshRnjLi.cjs → doctor-BrgSlfXn.cjs} +9 -9
- package/dist/{doctor-0BiGwJXk.mjs → doctor-IctjVh9T.mjs} +8 -8
- package/dist/{doctorReadiness-BCZGcN0a.cjs → doctorReadiness-Dl6yRQCy.cjs} +1 -1
- package/dist/{downloadTarget-BN5vZt3K.cjs → downloadTarget-CEb9che-.cjs} +6 -6
- package/dist/{downloadTarget-DJPwAZlu.mjs → downloadTarget-jbOz1egC.mjs} +6 -6
- package/dist/{ensureDaemonRunning-C5QfToCe.cjs → ensureDaemonRunning-D-HyjGIX.cjs} +6 -6
- package/dist/{ensureDaemonRunning-CSmb_mqt.mjs → ensureDaemonRunning-b1e8LCSM.mjs} +5 -5
- package/dist/{handleResumeCommand-BwnUZmbo.cjs → handleResumeCommand-BvWVuRwH.cjs} +23 -7
- package/dist/{handleResumeCommand-CgjpsdDe.mjs → handleResumeCommand-DpaZvm2c.mjs} +22 -6
- package/dist/{index-piJPsTsm.cjs → index-B2p2Mut7.cjs} +259 -53
- package/dist/{index-BehVbAsA.mjs → index-BUNnpGFF.mjs} +256 -50
- package/dist/{index-Bvldtdny.mjs → index-Bsvbgh9e.mjs} +4 -4
- package/dist/{index-BYOZ_8WZ.cjs → index-C64Ufj4D.cjs} +4 -4
- package/dist/{index-Clqlu17M.mjs → index-C6Vn5Eac.mjs} +155 -34
- package/dist/index-CMf5VbzG.mjs +18 -0
- package/dist/index-DmTlDRSL.cjs +24 -0
- package/dist/{index-_l1Sdmbi.cjs → index-Dv0Q48P3.cjs} +156 -33
- package/dist/{index-BRClDe07.cjs → index-F2UejqYs.cjs} +3 -3
- package/dist/{index-BYgfern_.mjs → index-wCbtF4BK.mjs} +3 -3
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-BdvKiOQw.mjs → install-BX3lv3NO.mjs} +1 -1
- package/dist/{install-Cf6AFSWC.cjs → install-BXvf2E3o.cjs} +1 -1
- package/dist/{install-TO4taKW7.cjs → install-C0ANcEAW.cjs} +7 -7
- package/dist/{install-fYWHrPcC.mjs → install-CdzSV7qO.mjs} +3 -3
- package/dist/{installPiTools-BKnXjrVu.cjs → installPiTools-CL_axh_6.cjs} +1 -1
- package/dist/{installTerminalHooks-BQZbvxsZ.cjs → installTerminalHooks-BETLKAtd.cjs} +3 -3
- package/dist/lib.cjs +14 -14
- package/dist/lib.d.cts +239 -2
- package/dist/lib.d.mts +239 -2
- package/dist/lib.mjs +14 -14
- package/dist/{lidState-BeOwj6eW.cjs → lidState-DWGnm2H4.cjs} +1 -1
- package/dist/{lidState-DNMlIhX0.mjs → lidState-bBrmaQd2.mjs} +1 -1
- package/dist/{localHappyAgentAuth-Br-mgogg.cjs → localHappyAgentAuth-DZHQnIW9.cjs} +1 -1
- package/dist/{localHappyAgentAuth-BezKSFDi.mjs → localHappyAgentAuth-Dn1jYDpt.mjs} +1 -1
- package/dist/{logger--vAVtXB_.mjs → logger-BUngm5Xg.mjs} +2 -2
- package/dist/{logger-DXTWlPzP.cjs → logger-CphW5nUE.cjs} +2 -2
- package/dist/machineMetadata-BQm9YTcI.cjs +79 -0
- package/dist/machineMetadata-BXN_bKU3.mjs +68 -0
- package/dist/{main-DoMFJ2Cl.cjs → main-B2UV51nK.cjs} +112 -132
- package/dist/{main-CshDb5-1.mjs → main-DGkdYfEq.mjs} +106 -126
- package/dist/{mcp-pNc1EbQf.cjs → mcp-BFvAEIRz.cjs} +15 -15
- package/dist/{mcp-DKT_lrvQ.mjs → mcp-CbTtbs0f.mjs} +15 -15
- package/dist/{mirrorProtocol-6IFGPpjJ.mjs → mirrorProtocol-BR4luBC0.mjs} +148 -7
- package/dist/{mirrorProtocol-qKflWTX_.cjs → mirrorProtocol-HKPivs5o.cjs} +150 -4
- package/dist/{package-B7B03ejW.mjs → package-7Ld1YMhh.mjs} +8 -7
- package/dist/{package-DY4zTbKS.cjs → package-KhLqBDX9.cjs} +8 -7
- package/dist/panels-C7IVqpJk.mjs +137 -0
- package/dist/panels-Njf6GelF.cjs +142 -0
- package/dist/{peerTools-3R9RUARX.mjs → peerTools-BOlDRyhi.mjs} +60 -10
- package/dist/{peerTools-iy3_6Yc5.cjs → peerTools-DQNlrcqM.cjs} +60 -9
- package/dist/{persistence-BfX72dne.cjs → persistence-9BMYspxG.cjs} +2 -2
- package/dist/{persistence-DTk4sNpd.mjs → persistence-BFUOHW5h.mjs} +3 -3
- package/dist/{piRunnerArgs-CRQVR9o-.cjs → piRunnerArgs-DGaq6VYM.cjs} +8 -2
- package/dist/{piRunnerArgs-AT8QJY7x.mjs → piRunnerArgs-H2pgpA5z.mjs} +7 -1
- package/dist/{piRuntime-BHRT5MKO.cjs → piRuntime-CT5xv_3h.cjs} +2 -2
- package/dist/{piRuntime-E44qTVQ4.mjs → piRuntime-CdN0JAsa.mjs} +2 -2
- package/dist/{piTerminal-hI4WFdWm.cjs → piTerminal-0FBtXTHK.cjs} +18 -18
- package/dist/{piTerminal-De8nbciM.mjs → piTerminal-C4m9YXAV.mjs} +18 -18
- package/dist/processTreeSnapshot-CuLJDNC-.mjs +101 -0
- package/dist/processTreeSnapshot-mDbnuojn.cjs +105 -0
- package/dist/projectPath-C3ioB4Bu.cjs +13 -0
- package/dist/prompt-BOouDaTM.mjs +99 -0
- package/dist/prompt-lgF9IE82.cjs +105 -0
- package/dist/{attachmentLimits-UyFn8fkQ.mjs → pushNotifications-DCiBEVeC.mjs} +307 -3
- package/dist/{attachmentLimits-SqeAHrVC.cjs → pushNotifications-DI92havG.cjs} +308 -2
- package/dist/{index-DFPT4HOO.cjs → query-BETKBrnz.cjs} +25 -5
- package/dist/{index-CEjJnq05.mjs → query-ywZbQUzR.mjs} +26 -3
- package/dist/{rateLimitWindows-XrJiiBpU.mjs → rateLimitWindows-BkfuUB1a.mjs} +1 -1
- package/dist/{rateLimitWindows-Czb7_7cK.cjs → rateLimitWindows-YRIYVdo4.cjs} +1 -1
- package/dist/{registerCommonHandlers-C0_fyBQ0.cjs → registerCommonHandlers-C7a_dUWs.cjs} +30 -30
- package/dist/{registerCommonHandlers-CvIedVRf.mjs → registerCommonHandlers-CTkCvjxt.mjs} +2 -2
- package/dist/{registerKillSessionHandler-DYl7l4Ts.cjs → registerKillSessionHandler-CIsvBrVe.cjs} +6 -6
- package/dist/{registerKillSessionHandler-gwJ5lTf0.mjs → registerKillSessionHandler-CaqqRYq6.mjs} +6 -6
- package/dist/{remoteSessionClient-BRTIOX5b.cjs → remoteSessionClient-D843fkzL.cjs} +5 -5
- package/dist/{remoteSessionClient-DRb2Jr5s.mjs → remoteSessionClient-PP-mOKmw.mjs} +5 -5
- package/dist/{reportProgressTool-B9nCzbkL.cjs → reportProgressTool-14AXr959.cjs} +84 -2
- package/dist/{reportProgressTool-D5tEoXMW.mjs → reportProgressTool-ZOCNjWHr.mjs} +82 -3
- package/dist/{resources-JDPugcDq.cjs → resources-CvIlkzpP.cjs} +30 -0
- package/dist/{resources-BdFBQi8r.mjs → resources-y9jfyO-_.mjs} +30 -0
- package/dist/{run-CKe_WeLW.cjs → run-CAOCYYfT.cjs} +2806 -110
- package/dist/{run-BQ_FGaOL.mjs → run-Dajw2E5j.mjs} +2787 -91
- package/dist/{runClaude-zrrNcQC_.mjs → runClaude-C6oxWYbp.mjs} +49 -47
- package/dist/{runClaude-MHI5IKM-.cjs → runClaude-CRRKt-tm.cjs} +50 -48
- package/dist/{runClaudeDeps-RRw-Nusc.cjs → runClaudeDeps-B1ysqTvx.cjs} +310 -237
- package/dist/{runClaudeDeps-CVBCokOS.mjs → runClaudeDeps-BcZ68cX3.mjs} +297 -226
- package/dist/{runGemini-kipag2ag.mjs → runGemini-D7yKc4wD.mjs} +61 -55
- package/dist/{runGemini-D7Lg9yCr.cjs → runGemini-DtKFXqf-.cjs} +89 -83
- package/dist/{runOpenClaw-C_lRY3Do.mjs → runOpenClaw-C8ilyLP9.mjs} +19 -19
- package/dist/{runOpenClaw-DCcQ0L2N.cjs → runOpenClaw-Cq29mryb.cjs} +20 -20
- package/dist/{sandbox-BSyXFVFp.mjs → sandbox-CbCutma4.mjs} +4 -4
- package/dist/{sandbox-dMwPTmjm.cjs → sandbox-gIj-EuF4.cjs} +4 -4
- package/dist/{selfCheck-DkzDDUsE.cjs → selfCheck-BTGBVthv.cjs} +39 -38
- package/dist/selfCheck-Smt-5Xiq.mjs +85 -0
- package/dist/{send-dxC0miIA.cjs → send-CZf5lLw_.cjs} +8 -8
- package/dist/{send-C-k9nsd3.mjs → send-YZRMQvMJ.mjs} +9 -9
- package/dist/{server-DxoTYNlw.mjs → server-BqwXRzFZ.mjs} +4 -4
- package/dist/{server-B-W6P7Qr.cjs → server-CknFq6xG.cjs} +6 -6
- package/dist/sessionExitLifecycle-CzkLIgNZ.mjs +142 -0
- package/dist/sessionExitLifecycle-DFltxXU8.cjs +148 -0
- package/dist/{sessionLock-DWX6BbiU.cjs → sessionLock-DRZUcKHT.cjs} +38 -5
- package/dist/{sessionLock-DBdtZGOL.mjs → sessionLock-nBXdJxJm.mjs} +36 -5
- package/dist/{sessionOps-BAnr7n8t.cjs → sessionOps-BrGiU9-s.cjs} +10 -5
- package/dist/{sessionOps-BVoXe12O.mjs → sessionOps-C58iDeD5.mjs} +11 -6
- package/dist/{sessionScanner-BtxoeluY.mjs → sessionScanner-Bm57LEXe.mjs} +3 -3
- package/dist/{sessionScanner-CDOYsEUD.cjs → sessionScanner-CaO8bLaG.cjs} +3 -3
- package/dist/{sessions-C3sZJkzI.mjs → sessions-BXyBHo8n.mjs} +40 -18
- package/dist/{sessions-hAitoN-m.cjs → sessions-uzqPCc37.cjs} +39 -16
- package/dist/{setupOfflineReconnection-_eD4cuUT.mjs → setupOfflineReconnection-1Qlek3wl.mjs} +2 -2
- package/dist/{setupOfflineReconnection-C2EeYTFH.cjs → setupOfflineReconnection-DvvVX3TB.cjs} +2 -2
- package/dist/{spawn-Bc9v7pIf.cjs → spawn-DBkodJEO.cjs} +49 -18
- package/dist/{spawn-qNrB2CD_.mjs → spawn-vn93PhYL.mjs} +49 -18
- package/dist/spawnAgents-CgPMWexP.mjs +79 -0
- package/dist/{spawnAgents-BVEaz35W.cjs → spawnAgents-DLNMlhWJ.cjs} +37 -1
- package/dist/{spawnHappyCLI-C2stUioM.mjs → spawnHappyCLI-BjFZc_7V.mjs} +1 -1
- package/dist/{spawnHappyCLI-fzUagkKV.cjs → spawnHappyCLI-DnUZv0X2.cjs} +2 -2
- package/dist/{specialCommands-BJ-nqY4s.cjs → specialCommands-BRufxlqe.cjs} +3 -3
- package/dist/{specialCommands-C6W-rVyh.mjs → specialCommands-D3ND9bdg.mjs} +3 -3
- package/dist/{startFileWatcher-Bqlqjt93.cjs → startFileWatcher-D9cYzZOq.cjs} +1 -1
- package/dist/{startFileWatcher-CR09Snmz.mjs → startFileWatcher-DXJ7yB5v.mjs} +1 -1
- package/dist/startupSessionCreate-kdr3m1uX.cjs +26 -0
- package/dist/startupSessionCreate-uZ6BM0ty.mjs +24 -0
- package/dist/{streamRelay-CJoMk_d2.mjs → streamRelay-DnMCMMfV.mjs} +1 -1
- package/dist/{streamRelay-9kBPpbvU.cjs → streamRelay-Dy6amlzx.cjs} +1 -1
- package/dist/{sync-Dhmtk66S.cjs → sync-Bn-idAoy.cjs} +1 -1
- package/dist/{sync-DbW07iQS.mjs → sync-BvVhDO40.mjs} +1 -1
- package/dist/{systemPrompt-CQcuUmVp.mjs → systemPrompt-CIZcJuJF.mjs} +4 -3
- package/dist/{systemPrompt-3PYi3EUY.cjs → systemPrompt-DlyEk35T.cjs} +4 -3
- package/dist/{teams-DpxLcUU_.cjs → teams-BLeRpDxv.cjs} +8 -8
- package/dist/{teams-CwF4Z2fA.mjs → teams-DLY3B5yi.mjs} +8 -8
- package/dist/{time-A6zR3Iy6.cjs → time-Cjv0zxQO.cjs} +1 -1
- package/dist/{time-BuGWTVP6.mjs → time-D3ETL7Jb.mjs} +1 -1
- package/dist/{titleGenerator-D26gvNaS.cjs → titleGenerator-Cgp5ihFb.cjs} +10 -9
- package/dist/{titleGenerator-BGEzNWC9.mjs → titleGenerator-Uzbd4utr.mjs} +9 -8
- package/dist/{todo-DrZc76H5.mjs → todo-C9Ga-oEM.mjs} +6 -6
- package/dist/{todo-73g3NCIO.cjs → todo-pOMcEECE.cjs} +6 -6
- package/dist/{tools-CxJp4T1T.cjs → tools-BL7Byl_x.cjs} +1 -1
- package/dist/{tools-BtsrQnNS.mjs → tools-Cho7iIWf.mjs} +1 -1
- package/dist/{uninstall-DWNYvewQ.cjs → uninstall-CbayEVoV.cjs} +6 -6
- package/dist/{uninstall-DOb2mTwV.mjs → uninstall-CvZHVY9C.mjs} +3 -3
- package/dist/webPanels-B2_C2-3g.mjs +49 -0
- package/dist/webPanels-FCgFKvVe.cjs +53 -0
- package/package.json +8 -7
- package/dist/machineMetadata-B1H9gNbN.mjs +0 -39
- package/dist/machineMetadata-DcUupMje.cjs +0 -42
- package/dist/messageBuffer-BWlGgR3A.mjs +0 -71
- package/dist/messageBuffer-fJMH6uY8.cjs +0 -73
- package/dist/projectPath-ChLhdOyt.cjs +0 -13
- package/dist/selfCheck-CF7XGJPb.mjs +0 -84
- package/dist/sessionModeFile-ByLbXTbg.mjs +0 -32
- package/dist/sessionModeFile-CLLdidiJ.cjs +0 -36
- package/dist/spawnAgents-Bw6j4tqz.mjs +0 -45
|
@@ -1,57 +1,60 @@
|
|
|
1
1
|
import os from 'node:os';
|
|
2
|
-
import { c as claimSessionOrExit, a as applyServerSnapshot, b as
|
|
3
|
-
import { r as readSettings, H as HIBERNATION_CAPABILITY, a as resolveCheckMs, l as latchKeepAwake, e as evaluateWrapperIdle } from './persistence-
|
|
4
|
-
import { D as DEFAULT_CLAUDE_PERMISSION_MODE, H as HibernationProbe, c as commitHibernation } from './defaultPermissionMode-
|
|
2
|
+
import { c as claimSessionOrExit, a as applyServerSnapshot, b as applyReconnectReplay, w as withoutServerSnapshot, m as mergeReconnectMetadata, e as exitCursorStamp } from './sessionLock-nBXdJxJm.mjs';
|
|
3
|
+
import { r as readSettings, H as HIBERNATION_CAPABILITY, a as resolveCheckMs, l as latchKeepAwake, e as evaluateWrapperIdle } from './persistence-BFUOHW5h.mjs';
|
|
4
|
+
import { D as DEFAULT_CLAUDE_PERMISSION_MODE, H as HibernationProbe, c as commitHibernation } from './defaultPermissionMode-i5KzdK09.mjs';
|
|
5
5
|
import { randomUUID } from 'node:crypto';
|
|
6
|
-
import { c as connectionState, A as ApiClient, s as startOfflineReconnection } from './api-
|
|
7
|
-
import { l as logger } from './logger
|
|
8
|
-
import { s as spawnOriginTags, a as sessionWorktreeMetadata } from './createSessionMetadata-
|
|
9
|
-
import { p as packageJson } from './package-
|
|
10
|
-
import { P as PROMPT_QUEUE_CAPABILITY } from './index-
|
|
6
|
+
import { c as connectionState, A as ApiClient, s as startOfflineReconnection } from './api-Hov8p7CA.mjs';
|
|
7
|
+
import { l as logger } from './logger-BUngm5Xg.mjs';
|
|
8
|
+
import { s as spawnOriginTags, a as sessionWorktreeMetadata } from './createSessionMetadata-DDIChCx8.mjs';
|
|
9
|
+
import { p as packageJson } from './package-7Ld1YMhh.mjs';
|
|
10
|
+
import { P as PROMPT_QUEUE_CAPABILITY, a as PROJECT_SESSION_CAPABILITY } from './index-C6Vn5Eac.mjs';
|
|
11
11
|
import { F as FORK_BACKFILL_CAPABILITY, p as publishForkBackfillWhenCommitted } from './forkBackfill-DYIjlN1Z.mjs';
|
|
12
|
-
import { c as configuration } from './configuration-
|
|
13
|
-
import { n as notifyDaemonSessionStarted, c as checkDaemonHibernation } from './controlClient-
|
|
14
|
-
import { g as getInitialMachineMetadata } from './machineMetadata-
|
|
12
|
+
import { c as configuration } from './configuration-PxzEJumr.mjs';
|
|
13
|
+
import { n as notifyDaemonSessionStarted, c as checkDaemonHibernation } from './controlClient-DoeYovwP.mjs';
|
|
14
|
+
import { g as getInitialMachineMetadata } from './machineMetadata-BXN_bKU3.mjs';
|
|
15
15
|
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
16
16
|
import { resolve, join } from 'node:path';
|
|
17
|
+
import { c as createSessionForStartup } from './startupSessionCreate-uZ6BM0ty.mjs';
|
|
17
18
|
import { a as applySandboxPermissionPolicy, r as resolveInitialClaudePermissionMode, m as mapToClaudeMode, b as reconcilePublishedPermissionMode } from './permissionMode-CH4FoZfU.mjs';
|
|
18
19
|
import { d as decodeBase64, e as encodeBase64 } from './authRelay-DhQhkBvX.mjs';
|
|
19
20
|
import { readFile } from 'node:fs/promises';
|
|
20
|
-
import { C as CLAUDE_ATTACHMENT_KINDS, s as stripAttachmentManifest } from './attachmentContent-
|
|
21
|
+
import { C as CLAUDE_ATTACHMENT_KINDS, s as stripAttachmentManifest } from './attachmentContent-CIn4iPEk.mjs';
|
|
21
22
|
import { T as TranscriptPathHints } from './transcriptCursor-B7T_gkQ0.mjs';
|
|
22
23
|
import { p as planClaudeStartup } from './startupPlan-DFMyNgAs.mjs';
|
|
23
24
|
import 'node:fs';
|
|
25
|
+
import './processTreeSnapshot-CuLJDNC-.mjs';
|
|
26
|
+
import 'node:child_process';
|
|
24
27
|
import 'zod';
|
|
25
28
|
import 'axios';
|
|
26
|
-
import './lidState-
|
|
29
|
+
import './lidState-bBrmaQd2.mjs';
|
|
27
30
|
import 'os';
|
|
28
31
|
import 'child_process';
|
|
29
32
|
import 'node:events';
|
|
30
33
|
import 'socket.io-client';
|
|
31
|
-
import './
|
|
34
|
+
import './pushNotifications-DCiBEVeC.mjs';
|
|
35
|
+
import './contentLogMetadata-BlWI0egu.mjs';
|
|
32
36
|
import './limits-DIo7rEBR.mjs';
|
|
33
|
-
import './time-
|
|
34
|
-
import './registerCommonHandlers-
|
|
37
|
+
import './time-D3ETL7Jb.mjs';
|
|
38
|
+
import './registerCommonHandlers-CTkCvjxt.mjs';
|
|
35
39
|
import 'util';
|
|
36
40
|
import 'fs/promises';
|
|
37
41
|
import 'crypto';
|
|
38
42
|
import 'path';
|
|
39
43
|
import 'cross-spawn';
|
|
40
44
|
import '@paralleldrive/cuid2';
|
|
41
|
-
import './sync-
|
|
42
|
-
import './backgroundTaskActivity-
|
|
43
|
-
import './contentLogMetadata-BlWI0egu.mjs';
|
|
45
|
+
import './sync-BvVhDO40.mjs';
|
|
46
|
+
import './backgroundTaskActivity-8PdPxrvy.mjs';
|
|
44
47
|
import 'chalk';
|
|
45
48
|
import 'node:util';
|
|
46
49
|
import './detectCLI-CSGMlV51.mjs';
|
|
47
50
|
import 'fs';
|
|
48
|
-
import './localHappyAgentAuth-
|
|
51
|
+
import './localHappyAgentAuth-Dn1jYDpt.mjs';
|
|
49
52
|
import 'tweetnacl';
|
|
50
53
|
import 'url';
|
|
51
54
|
|
|
52
55
|
const DEFAULT_CLAUDE_MODEL = void 0;
|
|
53
56
|
const DEFAULT_CLAUDE_EFFORT = void 0;
|
|
54
|
-
const importRunClaudeDeps = () => import('./runClaudeDeps-
|
|
57
|
+
const importRunClaudeDeps = () => import('./runClaudeDeps-BcZ68cX3.mjs');
|
|
55
58
|
async function runClaude(credentials, options = {}) {
|
|
56
59
|
logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
|
|
57
60
|
logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
|
|
@@ -65,7 +68,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
65
68
|
const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
|
|
66
69
|
if (isAssistantVariant) {
|
|
67
70
|
try {
|
|
68
|
-
const { bootstrapAssistantHome } = await import('./bootstrap-
|
|
71
|
+
const { bootstrapAssistantHome } = await import('./bootstrap-Dt5I1SOl.mjs');
|
|
69
72
|
await bootstrapAssistantHome();
|
|
70
73
|
} catch (error) {
|
|
71
74
|
logger.debug("[START] Assistant home bootstrap failed:", error);
|
|
@@ -140,7 +143,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
140
143
|
// a brand-new session cannot pick a PDF until after sending once.
|
|
141
144
|
attachmentKinds: [...CLAUDE_ATTACHMENT_KINDS],
|
|
142
145
|
queueCancellation: true,
|
|
143
|
-
capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2", "claude-btw-v1", "claude-runtime-controls-v1", "claude-opus-5-5-v1", PROMPT_QUEUE_CAPABILITY, FORK_BACKFILL_CAPABILITY, HIBERNATION_CAPABILITY],
|
|
146
|
+
capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2", "claude-btw-v1", "claude-runtime-controls-v1", "claude-opus-5-5-v1", PROMPT_QUEUE_CAPABILITY, FORK_BACKFILL_CAPABILITY, HIBERNATION_CAPABILITY, PROJECT_SESSION_CAPABILITY],
|
|
144
147
|
// Effective mode this process enforces. Kept current by
|
|
145
148
|
// publishPermissionMode below; the web renders it instead of guessing.
|
|
146
149
|
permissionMode: mapToClaudeMode(initialPermissionMode ?? "default"),
|
|
@@ -181,11 +184,11 @@ async function runClaude(credentials, options = {}) {
|
|
|
181
184
|
agentStateVersion: parseInt(reconnectAgentStateVersion || "0", 10)
|
|
182
185
|
};
|
|
183
186
|
} else {
|
|
184
|
-
response = await api.getOrCreateSession({ tag: sessionTag, metadata, state });
|
|
187
|
+
response = await createSessionForStartup(() => api.getOrCreateSession({ tag: sessionTag, metadata, state }), { startedBy: options.startedBy, log: (m) => logger.debug(m) });
|
|
185
188
|
}
|
|
186
189
|
if (!response) {
|
|
187
190
|
let offlineSessionId = null;
|
|
188
|
-
const { claudeLocal } = await import('./claudeLocal-
|
|
191
|
+
const { claudeLocal } = await import('./claudeLocal-OHWQigCl.mjs');
|
|
189
192
|
const { createSessionScanner: createSessionScanner2 } = await loadDeps();
|
|
190
193
|
const reconnection = startOfflineReconnection({
|
|
191
194
|
serverUrl: configuration.serverUrl,
|
|
@@ -233,16 +236,18 @@ async function runClaude(credentials, options = {}) {
|
|
|
233
236
|
}
|
|
234
237
|
let reconnectSeeded = false;
|
|
235
238
|
let wakingFromHibernation = false;
|
|
239
|
+
let reconnectReplay = null;
|
|
236
240
|
if (reconnectSessionId) {
|
|
237
241
|
const snapshot = await api.getSession(response.id, response.encryptionKey, response.encryptionVariant);
|
|
238
242
|
if (snapshot.ok) {
|
|
239
243
|
response = applyServerSnapshot(response, snapshot.session);
|
|
240
244
|
reconnectSeeded = true;
|
|
241
245
|
logger.debug(`[START] Reconnect seeded from server: seq=${snapshot.session.seq} metadataVersion=${snapshot.session.metadataVersion}`);
|
|
242
|
-
const wake =
|
|
246
|
+
const wake = applyReconnectReplay(response);
|
|
243
247
|
response = wake.response;
|
|
244
|
-
|
|
245
|
-
|
|
248
|
+
reconnectReplay = wake.replay;
|
|
249
|
+
wakingFromHibernation = wake.replay?.source === "hibernation";
|
|
250
|
+
if (wake.replay) logger.debug(`[START] Resuming (${wake.replay.source}): replaying records after seq=${response.seq}`);
|
|
246
251
|
} else {
|
|
247
252
|
response = withoutServerSnapshot(response);
|
|
248
253
|
logger.debug(`[START] Reconnect without server snapshot (${snapshot.reason}); skipping existing messages`);
|
|
@@ -307,7 +312,9 @@ async function runClaude(credentials, options = {}) {
|
|
|
307
312
|
claudeCheckSession,
|
|
308
313
|
createSessionScanner,
|
|
309
314
|
getProjectPath,
|
|
310
|
-
|
|
315
|
+
replayClaudeForkJsonl,
|
|
316
|
+
snapshotTree,
|
|
317
|
+
terminateSurvivors,
|
|
311
318
|
TitleGenerator,
|
|
312
319
|
BoardAnalyzer,
|
|
313
320
|
FileRateLimiter,
|
|
@@ -334,7 +341,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
334
341
|
if (reconnectSessionId) {
|
|
335
342
|
session.suppressNextArchiveSignal();
|
|
336
343
|
if (!reconnectSeeded) session.skipExistingMessages();
|
|
337
|
-
if (!wakingFromHibernation) void session.cancelUndeliveredQueuedInputs();
|
|
344
|
+
if (!wakingFromHibernation) void session.cancelUndeliveredQueuedInputs(reconnectReplay ? { maxSeq: reconnectReplay.seq } : void 0);
|
|
338
345
|
session.updateMetadata((meta) => ({
|
|
339
346
|
...mergeReconnectMetadata(meta, metadata, Date.now()),
|
|
340
347
|
queueCancellation: true,
|
|
@@ -349,21 +356,10 @@ async function runClaude(credentials, options = {}) {
|
|
|
349
356
|
const jsonlPath = join(getProjectPath(workingDirectory), `${forkClaudeSessionId}.jsonl`);
|
|
350
357
|
try {
|
|
351
358
|
const file = await readFile(jsonlPath, "utf-8");
|
|
352
|
-
const
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
let parsed;
|
|
357
|
-
try {
|
|
358
|
-
parsed = JSON.parse(line);
|
|
359
|
-
} catch {
|
|
360
|
-
continue;
|
|
361
|
-
}
|
|
362
|
-
const result = RawJSONLinesSchema.safeParse(parsed);
|
|
363
|
-
if (!result.success) continue;
|
|
364
|
-
session.sendClaudeSessionMessage(result.data);
|
|
365
|
-
backfilled += 1;
|
|
366
|
-
}
|
|
359
|
+
const backfilled = replayClaudeForkJsonl(file, {
|
|
360
|
+
send: (line) => session.sendClaudeSessionMessage(line),
|
|
361
|
+
closeTurn: () => session.closeReplayedClaudeTurn()
|
|
362
|
+
});
|
|
367
363
|
logger.debug(`[FORK BACKFILL] Replayed ${backfilled} historical messages from ${jsonlPath}`);
|
|
368
364
|
session.updateMetadata((meta) => ({ ...meta, claudeSessionId: forkClaudeSessionId }));
|
|
369
365
|
void publishForkBackfillWhenCommitted(session, { count: backfilled }).then((published) => logger.debug(`[FORK BACKFILL] ${published ? "Committed" : "Session closed before commit of"} ${backfilled} replayed messages`));
|
|
@@ -447,7 +443,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
447
443
|
session.sendClaudeSessionMessage(raw);
|
|
448
444
|
}
|
|
449
445
|
});
|
|
450
|
-
const happyServer = await startHappyServer(session, { assistant: isAssistantVariant, selfReportState: boardSelfReport });
|
|
446
|
+
const happyServer = await startHappyServer(session, { assistant: isAssistantVariant, selfReportState: boardSelfReport, push: { sendAttention: (input) => api.push().sendAttention(input) } });
|
|
451
447
|
logger.debug(`[START] Happy MCP server started at ${happyServer.url}`);
|
|
452
448
|
let currentSession = null;
|
|
453
449
|
const prewarmHookGate = new PrewarmHookGate();
|
|
@@ -801,12 +797,16 @@ async function runClaude(credentials, options = {}) {
|
|
|
801
797
|
logger.debug(`[START] Received termination signal, cleaning up (archive=${intent === "archive"})...`);
|
|
802
798
|
promptQueueDrain.close();
|
|
803
799
|
cleanupPrewarm();
|
|
800
|
+
const wrapperTree = snapshotTree(process.pid);
|
|
804
801
|
try {
|
|
805
802
|
if (session) {
|
|
803
|
+
const exitCursor = intent === "offline" ? exitCursorStamp(session.messageCursor, Date.now()) : void 0;
|
|
804
|
+
if (exitCursor) session.freezeInbound();
|
|
806
805
|
currentSession?.cleanup();
|
|
807
806
|
await settleSessionOnExit(session.sessionId, intent, {
|
|
808
807
|
updateMetadata: (handler) => session.updateMetadata(handler),
|
|
809
|
-
updateMetadataAndWait: (handler) => session.updateMetadataAndWait(handler),
|
|
808
|
+
updateMetadataAndWait: (handler, timeoutMs) => session.updateMetadataAndWait(handler, timeoutMs),
|
|
809
|
+
exitCursor,
|
|
810
810
|
sendSessionDeath: () => session.sendSessionDeath(),
|
|
811
811
|
archiveSession: (id) => api.archiveSession(id),
|
|
812
812
|
deactivateSession: (id) => api.deactivateSession(id),
|
|
@@ -820,9 +820,11 @@ async function runClaude(credentials, options = {}) {
|
|
|
820
820
|
cleanupHookSettingsFile(hookSettingsPath);
|
|
821
821
|
await remoteScanner.cleanup();
|
|
822
822
|
logger.debug("[START] Cleanup complete, exiting");
|
|
823
|
+
await terminateSurvivors(wrapperTree);
|
|
823
824
|
process.exit(0);
|
|
824
825
|
} catch (error) {
|
|
825
826
|
logger.debug("[START] Error during cleanup:", error);
|
|
827
|
+
await terminateSurvivors(wrapperTree).catch(() => void 0);
|
|
826
828
|
process.exit(1);
|
|
827
829
|
}
|
|
828
830
|
};
|
|
@@ -1,59 +1,62 @@
|
|
|
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-DRZUcKHT.cjs');
|
|
5
|
+
var persistence = require('./persistence-9BMYspxG.cjs');
|
|
6
|
+
var defaultPermissionMode = require('./defaultPermissionMode-PkZGsQDk.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-DM7b1OKj.cjs');
|
|
9
|
+
var logger = require('./logger-CphW5nUE.cjs');
|
|
10
|
+
var createSessionMetadata = require('./createSessionMetadata-xz767pcG.cjs');
|
|
11
|
+
var _package = require('./package-KhLqBDX9.cjs');
|
|
12
|
+
var index = require('./index-Dv0Q48P3.cjs');
|
|
13
13
|
var forkBackfill = require('./forkBackfill-8eLDeS73.cjs');
|
|
14
|
-
var configuration = require('./configuration-
|
|
15
|
-
var controlClient = require('./controlClient-
|
|
16
|
-
var machineMetadata = require('./machineMetadata-
|
|
17
|
-
var projectPath = require('./projectPath-
|
|
14
|
+
var configuration = require('./configuration-CYO-kPOS.cjs');
|
|
15
|
+
var controlClient = require('./controlClient-Bqv5v5OM.cjs');
|
|
16
|
+
var machineMetadata = require('./machineMetadata-BQm9YTcI.cjs');
|
|
17
|
+
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
18
18
|
var path = require('node:path');
|
|
19
|
+
var startupSessionCreate = require('./startupSessionCreate-kdr3m1uX.cjs');
|
|
19
20
|
var permissionMode = require('./permissionMode-CrV-XuMs.cjs');
|
|
20
21
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
21
22
|
var promises = require('node:fs/promises');
|
|
22
|
-
var attachmentContent = require('./attachmentContent-
|
|
23
|
+
var attachmentContent = require('./attachmentContent-CEm13_gF.cjs');
|
|
23
24
|
var transcriptCursor = require('./transcriptCursor-DcXGLeSc.cjs');
|
|
24
25
|
var startupPlan = require('./startupPlan-BLMbfQIH.cjs');
|
|
25
26
|
require('node:fs');
|
|
27
|
+
require('./processTreeSnapshot-mDbnuojn.cjs');
|
|
28
|
+
require('node:child_process');
|
|
26
29
|
require('zod');
|
|
27
30
|
require('axios');
|
|
28
|
-
require('./lidState-
|
|
31
|
+
require('./lidState-DWGnm2H4.cjs');
|
|
29
32
|
require('os');
|
|
30
33
|
require('child_process');
|
|
31
34
|
require('node:events');
|
|
32
35
|
require('socket.io-client');
|
|
33
|
-
require('./
|
|
36
|
+
require('./pushNotifications-DI92havG.cjs');
|
|
37
|
+
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
34
38
|
require('./limits-C-a7gr04.cjs');
|
|
35
|
-
require('./time-
|
|
36
|
-
require('./registerCommonHandlers-
|
|
39
|
+
require('./time-Cjv0zxQO.cjs');
|
|
40
|
+
require('./registerCommonHandlers-C7a_dUWs.cjs');
|
|
37
41
|
require('util');
|
|
38
42
|
require('fs/promises');
|
|
39
43
|
require('crypto');
|
|
40
44
|
require('path');
|
|
41
45
|
require('cross-spawn');
|
|
42
46
|
require('@paralleldrive/cuid2');
|
|
43
|
-
require('./sync-
|
|
47
|
+
require('./sync-Bn-idAoy.cjs');
|
|
44
48
|
require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
45
|
-
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
46
49
|
require('chalk');
|
|
47
50
|
require('node:util');
|
|
48
|
-
require('./detectCLI-
|
|
51
|
+
require('./detectCLI-BuYR_Qxe.cjs');
|
|
49
52
|
require('fs');
|
|
50
|
-
require('./localHappyAgentAuth-
|
|
53
|
+
require('./localHappyAgentAuth-DZHQnIW9.cjs');
|
|
51
54
|
require('tweetnacl');
|
|
52
55
|
require('url');
|
|
53
56
|
|
|
54
57
|
const DEFAULT_CLAUDE_MODEL = void 0;
|
|
55
58
|
const DEFAULT_CLAUDE_EFFORT = void 0;
|
|
56
|
-
const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-
|
|
59
|
+
const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-B1ysqTvx.cjs'); });
|
|
57
60
|
async function runClaude(credentials, options = {}) {
|
|
58
61
|
logger.logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
|
|
59
62
|
logger.logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
|
|
@@ -67,7 +70,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
67
70
|
const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
|
|
68
71
|
if (isAssistantVariant) {
|
|
69
72
|
try {
|
|
70
|
-
const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-
|
|
73
|
+
const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-DoA7okld.cjs'); });
|
|
71
74
|
await bootstrapAssistantHome();
|
|
72
75
|
} catch (error) {
|
|
73
76
|
logger.logger.debug("[START] Assistant home bootstrap failed:", error);
|
|
@@ -142,7 +145,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
142
145
|
// a brand-new session cannot pick a PDF until after sending once.
|
|
143
146
|
attachmentKinds: [...attachmentContent.CLAUDE_ATTACHMENT_KINDS],
|
|
144
147
|
queueCancellation: true,
|
|
145
|
-
capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2", "claude-btw-v1", "claude-runtime-controls-v1", "claude-opus-5-5-v1", index.PROMPT_QUEUE_CAPABILITY, forkBackfill.FORK_BACKFILL_CAPABILITY, persistence.HIBERNATION_CAPABILITY],
|
|
148
|
+
capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2", "claude-btw-v1", "claude-runtime-controls-v1", "claude-opus-5-5-v1", index.PROMPT_QUEUE_CAPABILITY, forkBackfill.FORK_BACKFILL_CAPABILITY, persistence.HIBERNATION_CAPABILITY, index.PROJECT_SESSION_CAPABILITY],
|
|
146
149
|
// Effective mode this process enforces. Kept current by
|
|
147
150
|
// publishPermissionMode below; the web renders it instead of guessing.
|
|
148
151
|
permissionMode: permissionMode.mapToClaudeMode(initialPermissionMode ?? "default"),
|
|
@@ -183,11 +186,11 @@ async function runClaude(credentials, options = {}) {
|
|
|
183
186
|
agentStateVersion: parseInt(reconnectAgentStateVersion || "0", 10)
|
|
184
187
|
};
|
|
185
188
|
} else {
|
|
186
|
-
response = await api$1.getOrCreateSession({ tag: sessionTag, metadata, state });
|
|
189
|
+
response = await startupSessionCreate.createSessionForStartup(() => api$1.getOrCreateSession({ tag: sessionTag, metadata, state }), { startedBy: options.startedBy, log: (m) => logger.logger.debug(m) });
|
|
187
190
|
}
|
|
188
191
|
if (!response) {
|
|
189
192
|
let offlineSessionId = null;
|
|
190
|
-
const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal
|
|
193
|
+
const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal--DNyMOSv.cjs'); });
|
|
191
194
|
const { createSessionScanner: createSessionScanner2 } = await loadDeps();
|
|
192
195
|
const reconnection = api.startOfflineReconnection({
|
|
193
196
|
serverUrl: configuration.configuration.serverUrl,
|
|
@@ -235,16 +238,18 @@ async function runClaude(credentials, options = {}) {
|
|
|
235
238
|
}
|
|
236
239
|
let reconnectSeeded = false;
|
|
237
240
|
let wakingFromHibernation = false;
|
|
241
|
+
let reconnectReplay = null;
|
|
238
242
|
if (reconnectSessionId) {
|
|
239
243
|
const snapshot = await api$1.getSession(response.id, response.encryptionKey, response.encryptionVariant);
|
|
240
244
|
if (snapshot.ok) {
|
|
241
245
|
response = sessionLock.applyServerSnapshot(response, snapshot.session);
|
|
242
246
|
reconnectSeeded = true;
|
|
243
247
|
logger.logger.debug(`[START] Reconnect seeded from server: seq=${snapshot.session.seq} metadataVersion=${snapshot.session.metadataVersion}`);
|
|
244
|
-
const wake = sessionLock.
|
|
248
|
+
const wake = sessionLock.applyReconnectReplay(response);
|
|
245
249
|
response = wake.response;
|
|
246
|
-
|
|
247
|
-
|
|
250
|
+
reconnectReplay = wake.replay;
|
|
251
|
+
wakingFromHibernation = wake.replay?.source === "hibernation";
|
|
252
|
+
if (wake.replay) logger.logger.debug(`[START] Resuming (${wake.replay.source}): replaying records after seq=${response.seq}`);
|
|
248
253
|
} else {
|
|
249
254
|
response = sessionLock.withoutServerSnapshot(response);
|
|
250
255
|
logger.logger.debug(`[START] Reconnect without server snapshot (${snapshot.reason}); skipping existing messages`);
|
|
@@ -309,7 +314,9 @@ async function runClaude(credentials, options = {}) {
|
|
|
309
314
|
claudeCheckSession,
|
|
310
315
|
createSessionScanner,
|
|
311
316
|
getProjectPath,
|
|
312
|
-
|
|
317
|
+
replayClaudeForkJsonl,
|
|
318
|
+
snapshotTree,
|
|
319
|
+
terminateSurvivors,
|
|
313
320
|
TitleGenerator,
|
|
314
321
|
BoardAnalyzer,
|
|
315
322
|
FileRateLimiter,
|
|
@@ -336,7 +343,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
336
343
|
if (reconnectSessionId) {
|
|
337
344
|
session.suppressNextArchiveSignal();
|
|
338
345
|
if (!reconnectSeeded) session.skipExistingMessages();
|
|
339
|
-
if (!wakingFromHibernation) void session.cancelUndeliveredQueuedInputs();
|
|
346
|
+
if (!wakingFromHibernation) void session.cancelUndeliveredQueuedInputs(reconnectReplay ? { maxSeq: reconnectReplay.seq } : void 0);
|
|
340
347
|
session.updateMetadata((meta) => ({
|
|
341
348
|
...sessionLock.mergeReconnectMetadata(meta, metadata, Date.now()),
|
|
342
349
|
queueCancellation: true,
|
|
@@ -351,21 +358,10 @@ async function runClaude(credentials, options = {}) {
|
|
|
351
358
|
const jsonlPath = path.join(getProjectPath(workingDirectory), `${forkClaudeSessionId}.jsonl`);
|
|
352
359
|
try {
|
|
353
360
|
const file = await promises.readFile(jsonlPath, "utf-8");
|
|
354
|
-
const
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
let parsed;
|
|
359
|
-
try {
|
|
360
|
-
parsed = JSON.parse(line);
|
|
361
|
-
} catch {
|
|
362
|
-
continue;
|
|
363
|
-
}
|
|
364
|
-
const result = RawJSONLinesSchema.safeParse(parsed);
|
|
365
|
-
if (!result.success) continue;
|
|
366
|
-
session.sendClaudeSessionMessage(result.data);
|
|
367
|
-
backfilled += 1;
|
|
368
|
-
}
|
|
361
|
+
const backfilled = replayClaudeForkJsonl(file, {
|
|
362
|
+
send: (line) => session.sendClaudeSessionMessage(line),
|
|
363
|
+
closeTurn: () => session.closeReplayedClaudeTurn()
|
|
364
|
+
});
|
|
369
365
|
logger.logger.debug(`[FORK BACKFILL] Replayed ${backfilled} historical messages from ${jsonlPath}`);
|
|
370
366
|
session.updateMetadata((meta) => ({ ...meta, claudeSessionId: forkClaudeSessionId }));
|
|
371
367
|
void forkBackfill.publishForkBackfillWhenCommitted(session, { count: backfilled }).then((published) => logger.logger.debug(`[FORK BACKFILL] ${published ? "Committed" : "Session closed before commit of"} ${backfilled} replayed messages`));
|
|
@@ -449,7 +445,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
449
445
|
session.sendClaudeSessionMessage(raw);
|
|
450
446
|
}
|
|
451
447
|
});
|
|
452
|
-
const happyServer = await startHappyServer(session, { assistant: isAssistantVariant, selfReportState: boardSelfReport });
|
|
448
|
+
const happyServer = await startHappyServer(session, { assistant: isAssistantVariant, selfReportState: boardSelfReport, push: { sendAttention: (input) => api$1.push().sendAttention(input) } });
|
|
453
449
|
logger.logger.debug(`[START] Happy MCP server started at ${happyServer.url}`);
|
|
454
450
|
let currentSession = null;
|
|
455
451
|
const prewarmHookGate = new PrewarmHookGate();
|
|
@@ -803,12 +799,16 @@ async function runClaude(credentials, options = {}) {
|
|
|
803
799
|
logger.logger.debug(`[START] Received termination signal, cleaning up (archive=${intent === "archive"})...`);
|
|
804
800
|
promptQueueDrain.close();
|
|
805
801
|
cleanupPrewarm();
|
|
802
|
+
const wrapperTree = snapshotTree(process.pid);
|
|
806
803
|
try {
|
|
807
804
|
if (session) {
|
|
805
|
+
const exitCursor = intent === "offline" ? sessionLock.exitCursorStamp(session.messageCursor, Date.now()) : void 0;
|
|
806
|
+
if (exitCursor) session.freezeInbound();
|
|
808
807
|
currentSession?.cleanup();
|
|
809
808
|
await settleSessionOnExit(session.sessionId, intent, {
|
|
810
809
|
updateMetadata: (handler) => session.updateMetadata(handler),
|
|
811
|
-
updateMetadataAndWait: (handler) => session.updateMetadataAndWait(handler),
|
|
810
|
+
updateMetadataAndWait: (handler, timeoutMs) => session.updateMetadataAndWait(handler, timeoutMs),
|
|
811
|
+
exitCursor,
|
|
812
812
|
sendSessionDeath: () => session.sendSessionDeath(),
|
|
813
813
|
archiveSession: (id) => api$1.archiveSession(id),
|
|
814
814
|
deactivateSession: (id) => api$1.deactivateSession(id),
|
|
@@ -822,9 +822,11 @@ async function runClaude(credentials, options = {}) {
|
|
|
822
822
|
cleanupHookSettingsFile(hookSettingsPath);
|
|
823
823
|
await remoteScanner.cleanup();
|
|
824
824
|
logger.logger.debug("[START] Cleanup complete, exiting");
|
|
825
|
+
await terminateSurvivors(wrapperTree);
|
|
825
826
|
process.exit(0);
|
|
826
827
|
} catch (error) {
|
|
827
828
|
logger.logger.debug("[START] Error during cleanup:", error);
|
|
829
|
+
await terminateSurvivors(wrapperTree).catch(() => void 0);
|
|
828
830
|
process.exit(1);
|
|
829
831
|
}
|
|
830
832
|
};
|