very-happy-cli 0.2.201 → 0.2.203

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.
Files changed (192) hide show
  1. package/dist/{AcpBackend-BNinFMHZ.mjs → AcpBackend-CAMuhS0Z.mjs} +3 -3
  2. package/dist/{AcpBackend-CMFlng3C.cjs → AcpBackend-DReFgpYD.cjs} +3 -3
  3. package/dist/{AcpSessionManager-CPgoICjp.cjs → AcpSessionManager-BZKM-sCt.cjs} +1 -1
  4. package/dist/{AcpSessionManager-Dg6gKavf.mjs → AcpSessionManager-CJOxMFCF.mjs} +1 -1
  5. package/dist/{BasePermissionHandler-c-NaRa_E.cjs → BasePermissionHandler-BBR9Gkob.cjs} +1 -1
  6. package/dist/{BasePermissionHandler-DwcfWUjr.mjs → BasePermissionHandler-BgX73mQ5.mjs} +1 -1
  7. package/dist/{account-D23SGj7p.cjs → account-41PkJ9nx.cjs} +5 -5
  8. package/dist/{account-pzgzyIXW.mjs → account-hy0rztXY.mjs} +5 -5
  9. package/dist/{acpSessionResume-urFpnGsk.mjs → acpSessionResume-5El4xksf.mjs} +1 -1
  10. package/dist/{acpSessionResume-DklOhwir.cjs → acpSessionResume-DmOPXKpC.cjs} +1 -1
  11. package/dist/{agentHome-BTwMaYw1.cjs → agentHome-BXaVMqHX.cjs} +4 -4
  12. package/dist/{agentHome-DyrLqr8b.mjs → agentHome-DUxArmak.mjs} +4 -4
  13. package/dist/{api-KVVs-GkM.cjs → api-ChhFBuB0.cjs} +9 -9
  14. package/dist/{api-1CD4oRSW.mjs → api-D8ZDxBWw.mjs} +9 -9
  15. package/dist/{apiMachine-1sd5IVIB.cjs → apiMachine-MPwddFXq.cjs} +23 -13
  16. package/dist/{apiMachine-BDVE6MOn.mjs → apiMachine-qav2pnk5.mjs} +23 -13
  17. package/dist/{attachmentContent-CeF54XeO.mjs → attachmentContent-BfSQxccA.mjs} +2 -2
  18. package/dist/{attachmentContent-f3BbOKqz.cjs → attachmentContent-f5gwnv9J.cjs} +2 -2
  19. package/dist/{auth-CV2H-smf.mjs → auth-BxNuFv_0.mjs} +8 -8
  20. package/dist/{auth-eielZ6Sc.cjs → auth-DkPAHXLj.cjs} +8 -8
  21. package/dist/{auth-CXCX-iJ-.cjs → auth-thi2T_T8.cjs} +5 -5
  22. package/dist/{auth-WCd2S1zA.mjs → auth-xW7SDE_7.mjs} +5 -5
  23. package/dist/{auto-49cRCADN.cjs → auto-BiRlQ4tm.cjs} +14 -14
  24. package/dist/{auto-BsCE_UHT.mjs → auto-DmXTwayU.mjs} +14 -14
  25. package/dist/{bootstrap-N1PY4ypX.cjs → bootstrap-EGhaCmXy.cjs} +2 -2
  26. package/dist/{bootstrap-D_1MskAl.mjs → bootstrap-pGaFGbWO.mjs} +2 -2
  27. package/dist/{browser-DL3QIQLS.mjs → browser-BYSYzXvP.mjs} +1 -1
  28. package/dist/{browser-B0SEB6r3.cjs → browser-DSxpOnPb.cjs} +1 -1
  29. package/dist/{claudeLocal-Ix69XJ1t.cjs → claudeLocal-ClqHmkk6.cjs} +4 -4
  30. package/dist/{claudeLocal-DRMWkdCC.mjs → claudeLocal-bDarWqaU.mjs} +4 -4
  31. package/dist/{claudeLocalLauncher-rDojqNoa.cjs → claudeLocalLauncher-Bxi0_eW9.cjs} +9 -9
  32. package/dist/{claudeLocalLauncher-D4tU6R5n.mjs → claudeLocalLauncher-Ccpj2KgW.mjs} +9 -9
  33. package/dist/{claudeSessionFork-H0ZVQALg.mjs → claudeSessionFork-Cize0Y2T.mjs} +1 -1
  34. package/dist/{claudeSessionFork-C_X08LFh.cjs → claudeSessionFork-nyNFjgaf.cjs} +1 -1
  35. package/dist/{client-P1VkI76z.cjs → client-6Y6O72Uq.cjs} +2 -2
  36. package/dist/{client-DGqnrSg4.cjs → client-CMKgB-76.cjs} +4 -4
  37. package/dist/{client-CMUlpYcy.mjs → client-CX8kRedW.mjs} +2 -2
  38. package/dist/{client-BoymtYLP.cjs → client-Cddb1dhi.cjs} +2 -2
  39. package/dist/{client-4YWjreN3.mjs → client-CgMVIP7v.mjs} +2 -2
  40. package/dist/{client-BgInTvr6.mjs → client-DO8DNDC3.mjs} +2 -2
  41. package/dist/{client-DI8Rxsbw.cjs → client-DP8FabOE.cjs} +2 -2
  42. package/dist/{client-CK-jvgM1.mjs → client-Wr_BiOon.mjs} +4 -4
  43. package/dist/codex/happyMcpStdioBridge.cjs +17 -17
  44. package/dist/codex/happyMcpStdioBridge.mjs +17 -17
  45. package/dist/{codexAppServerClient-aDrsSyjS.mjs → codexAppServerClient-D-cD2Dfj.mjs} +3 -3
  46. package/dist/{codexAppServerClient-BnMR-DRn.cjs → codexAppServerClient-EzrHWYhX.cjs} +3 -3
  47. package/dist/{codexCommand-C3oEEpOa.cjs → codexCommand-BMcXtvU3.cjs} +42 -42
  48. package/dist/{codexCommand-BCpJzf3q.mjs → codexCommand-D79GnRhB.mjs} +42 -42
  49. package/dist/{codexTermination-DXhw5Pzi.cjs → codexTermination-CF6xiFbb.cjs} +1 -1
  50. package/dist/{codexTermination-B5haG5wJ.mjs → codexTermination-CK1MYJT7.mjs} +1 -1
  51. package/dist/{config-D9wjo4oa.mjs → config-Crn1mNgr.mjs} +3 -3
  52. package/dist/{config-CdGiZZKy.cjs → config-F6zSRyk2.cjs} +3 -3
  53. package/dist/{configuration-LWFmTxty.cjs → configuration-Cl9kOv09.cjs} +1 -1
  54. package/dist/{configuration-DhEqAYzz.mjs → configuration-i9MVy0a5.mjs} +1 -1
  55. package/dist/{connect-CY_EMXQs.mjs → connect-CiA13Xm4.mjs} +12 -12
  56. package/dist/{connect-BZLD0aVm.cjs → connect-ClklWmnI.cjs} +12 -12
  57. package/dist/{context-BbZ18lX0.cjs → context-BxODP3mG.cjs} +1 -1
  58. package/dist/{context-UzqWaA7f.mjs → context-DvdZsGgl.mjs} +1 -1
  59. package/dist/{controlClient-PaIiDxM6.mjs → controlClient-D6vqMUfi.mjs} +3 -3
  60. package/dist/{controlClient-TVMpETsR.cjs → controlClient-DxCQKfqe.cjs} +3 -3
  61. package/dist/{createSessionMetadata-hGZeo_nR.cjs → createSessionMetadata-B_NZvmhm.cjs} +2 -2
  62. package/dist/{createSessionMetadata-BWb81WZg.mjs → createSessionMetadata-BuAVB-xI.mjs} +2 -2
  63. package/dist/{deterministicJson-Cg3z7uUX.mjs → deterministicJson-B9XrEawW.mjs} +13 -13
  64. package/dist/{deterministicJson-BpDDS7c9.cjs → deterministicJson-kM2OdGZu.cjs} +13 -13
  65. package/dist/{doctor-DOzji0f7.cjs → doctor-DiPRqsqg.cjs} +7 -7
  66. package/dist/{doctor-BanQ3jQg.mjs → doctor-HHS4YegX.mjs} +7 -7
  67. package/dist/{downloadTarget-BCSXmPRE.mjs → downloadTarget-Cd8hx54t.mjs} +6 -6
  68. package/dist/{downloadTarget-BhIAhyEV.cjs → downloadTarget-osB-mGh0.cjs} +6 -6
  69. package/dist/{ensureDaemonRunning-BZGBE838.mjs → ensureDaemonRunning-C0iDtuL7.mjs} +5 -5
  70. package/dist/{ensureDaemonRunning-DMOCzvQP.cjs → ensureDaemonRunning-CtBvPHVB.cjs} +5 -5
  71. package/dist/{format-CgiY6uup.cjs → format-B5V7ie8N.cjs} +1 -1
  72. package/dist/{format-BxGkJUki.mjs → format-Dc5zMslz.mjs} +1 -1
  73. package/dist/{handleResumeCommand-ChnR-12l.cjs → handleResumeCommand-vcD2qcAM.cjs} +5 -5
  74. package/dist/{handleResumeCommand-BRV-9h0o.mjs → handleResumeCommand-xrOAA1qI.mjs} +5 -5
  75. package/dist/{index-DuOthh8V.cjs → index-AyDwQ6FG.cjs} +39 -39
  76. package/dist/{index-D5abHQNL.mjs → index-B7CXMlrz.mjs} +40 -40
  77. package/dist/{index-C_Y9426m.mjs → index-B7pKBIcn.mjs} +3 -3
  78. package/dist/{index-DnEgpRo4.cjs → index-C_ePuQwB.cjs} +3 -3
  79. package/dist/{index-BuOzDU17.cjs → index-Cl-WkB_6.cjs} +4 -4
  80. package/dist/{index-B7HlUXOX.cjs → index-D0rCXp-e.cjs} +4 -4
  81. package/dist/{index-HJFzeG0B.mjs → index-DIKJMfs2.mjs} +4 -4
  82. package/dist/{index-Do1r62PF.mjs → index-iFVMrlPo.mjs} +4 -4
  83. package/dist/index.cjs +2 -2
  84. package/dist/index.mjs +2 -2
  85. package/dist/{install-CUAUG3u4.cjs → install-BgBgsOlS.cjs} +3 -3
  86. package/dist/{install-BurTXawL.mjs → install-yqS4y1cm.mjs} +3 -3
  87. package/dist/{issue-feEUrjV0.cjs → issue-D7liK6bR.cjs} +7 -7
  88. package/dist/{issue-DpMsnOFm.mjs → issue-aKZd7J55.mjs} +7 -7
  89. package/dist/lib.cjs +11 -11
  90. package/dist/lib.d.cts +3 -0
  91. package/dist/lib.d.mts +3 -0
  92. package/dist/lib.mjs +11 -11
  93. package/dist/{localHappyAgentAuth-kg2RFvOy.mjs → localHappyAgentAuth-B2JJxlE9.mjs} +1 -1
  94. package/dist/{localHappyAgentAuth-DxlQgaer.cjs → localHappyAgentAuth-Dm9obisi.cjs} +1 -1
  95. package/dist/{logger-CFrzcRHD.mjs → logger-BiKmiREe.mjs} +2 -2
  96. package/dist/{logger-Hyhy2boA.cjs → logger-BtWBoP60.cjs} +2 -2
  97. package/dist/{machineMetadata-BLymhM03.cjs → machineMetadata-C0-LyMsb.cjs} +3 -3
  98. package/dist/{machineMetadata-DiStbYik.mjs → machineMetadata-CiyO9wm-.mjs} +3 -3
  99. package/dist/{main-D1rk-68I.mjs → main-BP2TBnp5.mjs} +48 -48
  100. package/dist/{main-7G17Noc3.cjs → main-C7hKf5hG.cjs} +48 -48
  101. package/dist/{mcp-C0DMPeTt.mjs → mcp-Cn4k-PXb.mjs} +14 -14
  102. package/dist/{mcp-DUeAS-D6.cjs → mcp-DO00rr9n.cjs} +14 -14
  103. package/dist/{mirrorProtocol-dRyartIG.mjs → mirrorProtocol-DDtEN49F.mjs} +2 -2
  104. package/dist/{mirrorProtocol-YUoEuIYO.cjs → mirrorProtocol-DwO8QgLM.cjs} +2 -2
  105. package/dist/{package-DxE8PttX.mjs → package-CIW5lwaN.mjs} +7 -7
  106. package/dist/{package-06cGlmeD.cjs → package-Djdgx8nb.cjs} +7 -7
  107. package/dist/{panels-BUqmsRE0.mjs → panels-BpfVEvwF.mjs} +5 -5
  108. package/dist/{panels-D0GHfIJC.cjs → panels-DMLtEOtJ.cjs} +5 -5
  109. package/dist/{peerTools-BiFpxXdf.mjs → peerTools-CQ60fUPp.mjs} +5 -5
  110. package/dist/{peerTools-CTCyRdg2.cjs → peerTools-fYuKq3ev.cjs} +5 -5
  111. package/dist/{persistence-_W9tE-bW.cjs → persistence-BOEZtiKb.cjs} +12 -2
  112. package/dist/{persistence-CF7oV1oH.mjs → persistence-D_zVC4Xz.mjs} +12 -3
  113. package/dist/{piRunnerArgs-Cfc-F-FJ.mjs → piRunnerArgs-DE_YXvS1.mjs} +1 -1
  114. package/dist/{piRunnerArgs-T2cAiaGW.cjs → piRunnerArgs-Dz9P62db.cjs} +1 -1
  115. package/dist/{piRuntime-CzYkZrYV.mjs → piRuntime-8SbpRmNA.mjs} +1 -1
  116. package/dist/{piRuntime-BzECTca4.cjs → piRuntime-Du62fjeU.cjs} +1 -1
  117. package/dist/{piTerminal-WF--dHaC.cjs → piTerminal-CGAw7WDW.cjs} +16 -16
  118. package/dist/{piTerminal-0tOAYsFm.mjs → piTerminal-Cl45kac0.mjs} +16 -16
  119. package/dist/{pushNotifications-DdzTbrA3.cjs → pushNotifications-B19lT5mY.cjs} +2 -2
  120. package/dist/{pushNotifications-CxX10K6n.mjs → pushNotifications-RVpbqrxR.mjs} +2 -2
  121. package/dist/{query-Cwx4pv91.cjs → query-CNWdX2r5.cjs} +1 -1
  122. package/dist/{query-Bkh7d52V.mjs → query-DBRR3TOO.mjs} +1 -1
  123. package/dist/{rateLimitWindows-DdUMUEoy.mjs → rateLimitWindows-DX5y23x_.mjs} +1 -1
  124. package/dist/{rateLimitWindows-DjJjgjt4.cjs → rateLimitWindows-mfdokrkQ.cjs} +1 -1
  125. package/dist/{reconnectGate-DeDhtQJW.cjs → reconnectGate-B8ltzSJD.cjs} +1 -1
  126. package/dist/{reconnectGate-uTLj82tS.mjs → reconnectGate-DSxYUCWy.mjs} +1 -1
  127. package/dist/{registerCommonHandlers-BYrmi-A4.mjs → registerCommonHandlers-CQDRKlkG.mjs} +2 -2
  128. package/dist/{registerCommonHandlers-BrEtSwNk.cjs → registerCommonHandlers-Y2siJGwL.cjs} +2 -2
  129. package/dist/{registerKillSessionHandler-Bp3g11wW.cjs → registerKillSessionHandler-B0pMZOdH.cjs} +5 -5
  130. package/dist/{registerKillSessionHandler-Cuzq6ecP.mjs → registerKillSessionHandler-U4Dxtohy.mjs} +5 -5
  131. package/dist/{registerSideQuestionHandler-ChIbHl_g.cjs → registerSideQuestionHandler--ruKhCdY.cjs} +4 -4
  132. package/dist/{registerSideQuestionHandler-BmEWWaZW.mjs → registerSideQuestionHandler-DM1QqTxf.mjs} +4 -4
  133. package/dist/{remoteSessionClient-DoxfnpnK.cjs → remoteSessionClient-CjINaEs_.cjs} +5 -5
  134. package/dist/{remoteSessionClient-Dj2rV8Az.mjs → remoteSessionClient-T-Raoiy6.mjs} +5 -5
  135. package/dist/{reportProgressTool-DvZhaEiN.cjs → reportProgressTool-DDfL1OY7.cjs} +4 -4
  136. package/dist/{reportProgressTool-qo0QIFNd.mjs → reportProgressTool-Stg0xrjF.mjs} +4 -4
  137. package/dist/{run-BqlWdDTL.cjs → run-BoSVfVCZ.cjs} +196 -45
  138. package/dist/{run-mHeOSOEt.mjs → run-Dq48xBtw.mjs} +196 -45
  139. package/dist/{runClaude-Z4BVFEdC.mjs → runClaude-CJe5atrS.mjs} +20 -20
  140. package/dist/{runClaude-MjIrNrxT.cjs → runClaude-D8ScJdJU.cjs} +20 -20
  141. package/dist/{runClaudeDeps-tPqwAl_m.cjs → runClaudeDeps-4RFRR4cY.cjs} +37 -37
  142. package/dist/{runClaudeDeps-8RXtu0Zc.mjs → runClaudeDeps-CL3goCXG.mjs} +43 -43
  143. package/dist/{runGemini-uc-fViXY.cjs → runGemini-BcbNxgsA.cjs} +34 -34
  144. package/dist/{runGemini-DG3jIxWv.mjs → runGemini-DZv6jPxV.mjs} +34 -34
  145. package/dist/{runOpenClaw-DZtoCmSG.cjs → runOpenClaw-BeSivE0X.cjs} +17 -17
  146. package/dist/{runOpenClaw-C4676Sdl.mjs → runOpenClaw-CRqCoj-_.mjs} +17 -17
  147. package/dist/{sandbox-r29ys6I4.mjs → sandbox-DAvJJZcV.mjs} +4 -4
  148. package/dist/{sandbox-DS7uZ71y.cjs → sandbox-xflHChws.cjs} +4 -4
  149. package/dist/selfCheck-BKOIROoJ.mjs +89 -0
  150. package/dist/{selfCheck-CSZ-wx1W.cjs → selfCheck-DZwdgBg0.cjs} +39 -39
  151. package/dist/{send-BGApHm-z.mjs → send-Co_l_Nmg.mjs} +8 -8
  152. package/dist/{send-CrmLy9lW.cjs → send-ConAuYqL.cjs} +8 -8
  153. package/dist/{server-hutEAAn1.mjs → server-D1Qrmxl7.mjs} +4 -4
  154. package/dist/{server-CjwXsTKP.cjs → server-by6kezmM.cjs} +6 -6
  155. package/dist/{sessionLock-Dj9_lShU.mjs → sessionLock-DFrwAnwR.mjs} +3 -3
  156. package/dist/{sessionLock-unMOEniJ.cjs → sessionLock-Db_uQcUP.cjs} +3 -3
  157. package/dist/{sessionOps-BmhqmPPd.mjs → sessionOps-C7nps7qG.mjs} +4 -4
  158. package/dist/{sessionOps-SxZr9veq.cjs → sessionOps-CptDjoZi.cjs} +4 -4
  159. package/dist/{sessionProvider-CPlvR0nT.mjs → sessionProvider-BaJq1AnY.mjs} +5 -5
  160. package/dist/{sessionProvider-DLlqS4y6.cjs → sessionProvider-D9nsAE14.cjs} +5 -5
  161. package/dist/{sessionScanner-DvVZpLHG.mjs → sessionScanner-BOb33NVJ.mjs} +3 -3
  162. package/dist/{sessionScanner-B7nZ1i40.cjs → sessionScanner-C6OVO0Ne.cjs} +3 -3
  163. package/dist/{sessions-BIYm43CM.mjs → sessions-GCql_3Dl.mjs} +10 -10
  164. package/dist/{sessions-CQQW7u6X.cjs → sessions-qVHDXJa6.cjs} +10 -10
  165. package/dist/{setupOfflineReconnection-D7WJTAi_.cjs → setupOfflineReconnection-B8QKqc9a.cjs} +2 -2
  166. package/dist/{setupOfflineReconnection-BELrtMGG.mjs → setupOfflineReconnection-lu0YbS7m.mjs} +2 -2
  167. package/dist/{spawn-DnPu7h2o.mjs → spawn-C9NSlg99.mjs} +12 -12
  168. package/dist/{spawn-CuWcPkkN.cjs → spawn-tL-724RS.cjs} +12 -12
  169. package/dist/{spawnHappyCLI-CI7Ax4mF.cjs → spawnHappyCLI-D7EO8s4E.cjs} +1 -1
  170. package/dist/{spawnHappyCLI-D6OcgFDR.mjs → spawnHappyCLI-jXUKLUT5.mjs} +1 -1
  171. package/dist/{startFileWatcher-DBW14aP2.cjs → startFileWatcher-6NpLGxg5.cjs} +1 -1
  172. package/dist/{startFileWatcher-BiWGhlGW.mjs → startFileWatcher-C7eFs4hA.mjs} +1 -1
  173. package/dist/{startupSessionCreate-DFl54ozj.cjs → startupSessionCreate-C5wdvraY.cjs} +3 -3
  174. package/dist/{startupSessionCreate-DbBpGQo9.mjs → startupSessionCreate-D3ph1DtL.mjs} +3 -3
  175. package/dist/{sync-CcBrziWp.mjs → sync-BIXH8ijr.mjs} +1 -1
  176. package/dist/{sync-C764ZzE6.cjs → sync-ni64k2OI.cjs} +1 -1
  177. package/dist/{systemPrompt-9i7bQypR.mjs → systemPrompt-B_vnlIr1.mjs} +1 -1
  178. package/dist/{systemPrompt-Xy3Dfj1l.cjs → systemPrompt-DuoULaqr.cjs} +1 -1
  179. package/dist/{teams-BAWOVbdF.mjs → teams-CsR_8p3Q.mjs} +6 -6
  180. package/dist/{teams-VlmzLDSs.cjs → teams-DLfcbOMh.cjs} +6 -6
  181. package/dist/{time-CDBZWYDb.cjs → time-BMCY7zJL.cjs} +1 -1
  182. package/dist/{time-DJF2csbV.mjs → time-Che8GhII.mjs} +1 -1
  183. package/dist/{titleGenerator-DR9evHBh.mjs → titleGenerator-B9LckLDq.mjs} +1 -1
  184. package/dist/{titleGenerator-BYP3fNFo.cjs → titleGenerator-HVEN1e7o.cjs} +2 -2
  185. package/dist/{todo-BkFvwx_z.cjs → todo-B8byb_cy.cjs} +7 -7
  186. package/dist/{todo-DDDQdB-G.mjs → todo-bc7db5NN.mjs} +7 -7
  187. package/dist/{tools-BjiRW_Rg.cjs → tools--RN1SFkD.cjs} +47 -27
  188. package/dist/{tools-CDktvjWL.mjs → tools-BAMaBbbP.mjs} +47 -27
  189. package/dist/{uninstall-BcMGkwJ0.mjs → uninstall-Dv4C-W9z.mjs} +3 -3
  190. package/dist/{uninstall-D5INt3TC.cjs → uninstall-UC0Q8YTj.cjs} +3 -3
  191. package/package.json +7 -7
  192. package/dist/selfCheck-BmT9ihpR.mjs +0 -89
@@ -1,6 +1,6 @@
1
- import { i as isClaudeSessionId, h as extractCompleteLines, j as decideBackfill, k as parseTerminalHookPayload, m as decideMirrorBinding, M as MIRROR_BACKFILL_LINES_DEFAULT, n as mirrorLineKey, o as mirrorLocalId, q as initializeOwnedWorktree, f as summarizeSpawnSessionForLog, t as startAgentVersionChecks, W as WORKTREE_CAPABILITY_VERSION, u as currentWorktreeService } from './mirrorProtocol-dRyartIG.mjs';
1
+ import { i as isClaudeSessionId, h as extractCompleteLines, j as decideBackfill, k as parseTerminalHookPayload, m as decideMirrorBinding, M as MIRROR_BACKFILL_LINES_DEFAULT, n as mirrorLineKey, o as mirrorLocalId, q as initializeOwnedWorktree, f as summarizeSpawnSessionForLog, t as startAgentVersionChecks, W as WORKTREE_CAPABILITY_VERSION, u as currentWorktreeService } from './mirrorProtocol-DDtEN49F.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-Cfc-F-FJ.mjs';
3
+ import { P as PI_ADAPTER_INSTALL_HINT, s as sanitizeSpawnModel } from './piRunnerArgs-DE_YXvS1.mjs';
4
4
  import fs from 'fs/promises';
5
5
  import os from 'os';
6
6
  import * as tmp from 'tmp';
@@ -8,19 +8,19 @@ import axios from 'axios';
8
8
  import { a as issueRelaunchEnv } from './sessionMetadata-C1eoAi89.mjs';
9
9
  import { readFileSync, openSync, fsyncSync, closeSync, renameSync, existsSync, readdirSync, statSync, unlinkSync, readSync, writeSync, ftruncateSync, utimesSync, realpathSync, promises, constants as constants$1, writeFileSync, mkdirSync, accessSync, rmdirSync } from 'node:fs';
10
10
  import { join, isAbsolute, resolve, dirname, sep, basename, relative } from 'node:path';
11
- import { f as ensurePrivateDirectorySync, w as writePrivateFileSync, c as configuration } from './configuration-DhEqAYzz.mjs';
12
- import { T as TurnActivityTracker, A as ApiClient } from './api-1CD4oRSW.mjs';
11
+ import { f as ensurePrivateDirectorySync, w as writePrivateFileSync, c as configuration } from './configuration-i9MVy0a5.mjs';
12
+ import { T as TurnActivityTracker, A as ApiClient } from './api-D8ZDxBWw.mjs';
13
13
  import { S as SPAWN_AGENTS, i as isSpawnAgent, s as sanitizeSpawnPermissionMode, r as resolveSpawnPermissionMode, a as resolveFirstMessageMeta, j as joinProject } from './spawnAgents-BclZYkov.mjs';
14
- import { l as logger } from './logger-CFrzcRHD.mjs';
15
- import { p as pruneStaleCompileCaches } from './index-C_Y9426m.mjs';
16
- import { a as authAndSetupMachineIfNeeded } from './auth-WCd2S1zA.mjs';
14
+ import { l as logger } from './logger-BiKmiREe.mjs';
15
+ import { p as pruneStaleCompileCaches } from './index-B7pKBIcn.mjs';
16
+ import { a as authAndSetupMachineIfNeeded } from './auth-xW7SDE_7.mjs';
17
17
  import { spawn, execSync } from 'child_process';
18
- import { p as packageJson } from './package-DxE8PttX.mjs';
19
- import { a as globalPrefixForPackage, N as NPM_SAFE_ARG, g as getEnvironmentInfo } from './doctor-BanQ3jQg.mjs';
20
- import { s as spawnHappyCLI } from './spawnHappyCLI-D6OcgFDR.mjs';
21
- import { c as readPersistedSessions, r as readSettings, l as latchKeepAwake, s as reportSignature, t as decideDaemonHibernation, v as nextCheckDelay, x as persistSession, d as readDaemonState, y as acquireDaemonLock, a as resolveCheckMs, z as resolveIdleMs, A as deletePersistedSessions, B as writeDaemonState, C as writeSettings, D as settingIdleMs, u as updateSettings, E as rewriteCredentialsForRelay, g as readCredentials, F as releaseDaemonLock } from './persistence-CF7oV1oH.mjs';
22
- import { i as isDaemonRunningCurrentlyInstalledHappyVersion, s as stopDaemon, w as cleanupDaemonState } from './controlClient-PaIiDxM6.mjs';
23
- import { e as sendUserMessage, f as readSessionMetadata, r as readSessionTranscript, l as listAccountSessions, a as listSessions, M as MAX_READ_LIMIT, s as sessionWebUrl, n as lineageOf, g as waitForSessionKey, d as archiveSession, h as analyzeLatestTurn, i as readSessionLog, j as TURN_WINDOW, p as userPromptText } from './sessionOps-BmhqmPPd.mjs';
18
+ import { p as packageJson } from './package-CIW5lwaN.mjs';
19
+ import { a as globalPrefixForPackage, N as NPM_SAFE_ARG, g as getEnvironmentInfo } from './doctor-HHS4YegX.mjs';
20
+ import { s as spawnHappyCLI } from './spawnHappyCLI-jXUKLUT5.mjs';
21
+ import { c as readPersistedSessions, r as readSettings, l as latchKeepAwake, s as reportSignature, t as decideDaemonHibernation, v as nextCheckDelay, x as persistSession, d as readDaemonState, y as acquireDaemonLock, a as resolveCheckMs, z as resolveIdleMs, A as deletePersistedSessions, B as writeDaemonState, C as writeSettings, D as settingIdleMs, u as updateSettings, E as readDaemonStatePidSync, F as rewriteCredentialsForRelay, g as readCredentials, G as releaseDaemonLock } from './persistence-D_zVC4Xz.mjs';
22
+ import { i as isDaemonRunningCurrentlyInstalledHappyVersion, s as stopDaemon, w as cleanupDaemonState } from './controlClient-D6vqMUfi.mjs';
23
+ import { e as sendUserMessage, f as readSessionMetadata, r as readSessionTranscript, l as listAccountSessions, a as listSessions, M as MAX_READ_LIMIT, s as sessionWebUrl, n as lineageOf, g as waitForSessionKey, d as archiveSession, h as analyzeLatestTurn, i as readSessionLog, j as TURN_WINDOW, p as userPromptText } from './sessionOps-C7nps7qG.mjs';
24
24
  import { a2 as AgentProfilesStateSchema, an as ServerMigrateNoticeSchema, ao as isHarnessInstallId, ap as agentProfileUnavailableReason, aq as MODEL_INTENT_CONFIG, q as AUTOMATION_SUMMARY_MAX_CHARS, ar as AUTOMATION_PRECHECK_OUTPUT_MAX_CHARS, as as AUTOMATION_PRECHECK_DEFAULT_TIMEOUT_MS, d as AUTOMATION_PRECHECK_MAX_TIMEOUT_MS, at as AUTOMATION_CLAIM_MAX_RUNS, au as AUTOMATION_DAEMON_CAPABILITY_PRECHECK, av as AUTOMATION_DEFAULT_LEASE_MS, i as isAutomationRunTerminal, D as resolveLaunchAgentProfile, aw as ISSUE_SENT_FROM, ax as ISSUE_DISPATCH_LOCAL_ID_PREFIX, f as ISSUE_ASSIGNABLE_AGENTS, ay as HARNESS_INSTALL_CAPABILITY_VERSION } from './index-CiRMvS73.mjs';
25
25
  import fastify from 'fastify';
26
26
  import { z } from 'zod';
@@ -29,37 +29,37 @@ import { d as decodeBase64, s as sameRelay, e as encodeBase64, h as decrypt } fr
29
29
  import { randomBytes, createHash, timingSafeEqual, randomUUID } from 'node:crypto';
30
30
  import { c as checkPreviewPath } from './previewPath-CXN4Vag0.mjs';
31
31
  import { a as BACKGROUND_TASKS_MAX, d as BACKGROUND_TASK_DESCRIPTION_MAX, e as BackgroundTaskTracker } from './backgroundTaskActivity-8PdPxrvy.mjs';
32
- import { b as sanitizeRateLimitReport } from './rateLimitWindows-DdUMUEoy.mjs';
33
- import { f as formatEditConflictNotice, b as SESSION_PEER_SENT_FROM, s as sendPeerMessage, l as listPeerSessions, C as CLI_PEER_SENDER_ID } from './peerTools-BiFpxXdf.mjs';
32
+ import { b as sanitizeRateLimitReport } from './rateLimitWindows-DX5y23x_.mjs';
33
+ import { f as formatEditConflictNotice, b as SESSION_PEER_SENT_FROM, s as sendPeerMessage, l as listPeerSessions, C as CLI_PEER_SENDER_ID } from './peerTools-CQ60fUPp.mjs';
34
34
  import os$1, { hostname, homedir, tmpdir } from 'node:os';
35
- 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-Dj2rV8Az.mjs';
36
- import { assistantHome, bootstrapAssistantHome } from './bootstrap-D_1MskAl.mjs';
37
- import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-HJFzeG0B.mjs';
35
+ 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-T-Raoiy6.mjs';
36
+ import { assistantHome, bootstrapAssistantHome } from './bootstrap-pGaFGbWO.mjs';
37
+ import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-DIKJMfs2.mjs';
38
38
  import require$$0, { existsSync as existsSync$1, statSync as statSync$1, mkdtempSync, rmSync } from 'fs';
39
39
  import require$$1, { join as join$1 } from 'path';
40
40
  import { spawn as spawn$1, execFile, spawnSync } from 'node:child_process';
41
41
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
42
42
  import { d as daemonEndpointsMatch, r as resolveClaudeCredentialReadiness } from './doctorReadiness-C208SMN9.mjs';
43
- 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-DiStbYik.mjs';
43
+ 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-CiyO9wm-.mjs';
44
44
  import { M as ModelConfigError, B as BackupStore, r as readConfigFile, s as sha256, a as atomicWriteFile } from './fileStore-5qpetZS0.mjs';
45
45
  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';
46
46
  import { p as parse } from './codexAccount-CieIQLOX.mjs';
47
47
  import require$$3 from 'crypto';
48
48
  import { c as commandOnPath } from './detectCLI-CSGMlV51.mjs';
49
- import { buildResumeLaunch } from './handleResumeCommand-BRV-9h0o.mjs';
49
+ import { buildResumeLaunch } from './handleResumeCommand-xrOAA1qI.mjs';
50
50
  import { n as normalizeWebPanels } from './webPanels-B2_C2-3g.mjs';
51
51
  import { access, symlink, readFile, rm, unlink, readlink, lstat, constants, rename, mkdir, copyFile, readdir, stat, open } from 'node:fs/promises';
52
52
  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';
53
- import { P as ProjectsUnsupportedError, c as createProjectsClient } from './client-BgInTvr6.mjs';
54
- import { d as wrapperReportsIdle, f as decideAutoRestart, s as statusFromVerdict, g as autoRestartNextCheck, h as wrapperStaleness, r as recordAttempt, i as AUTO_RESTART_MAX_ATTEMPTS, j as AUTO_RESTART_MIN_GAP_MS, p as processIdentityFields, k as readSessionLock, l as AUTO_RESTARTED_ENV, n as encodeAutoRestarted, o as pendingUpgradeVersion, q as resolveQuietMs, u as AUTO_RESTART_RECHECK_CAP_MS } from './sessionLock-Dj9_lShU.mjs';
55
- import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-4YWjreN3.mjs';
53
+ import { P as ProjectsUnsupportedError, c as createProjectsClient } from './client-DO8DNDC3.mjs';
54
+ import { d as wrapperReportsIdle, f as decideAutoRestart, s as statusFromVerdict, g as autoRestartNextCheck, h as wrapperStaleness, r as recordAttempt, i as AUTO_RESTART_MAX_ATTEMPTS, j as AUTO_RESTART_MIN_GAP_MS, p as processIdentityFields, k as readSessionLock, l as AUTO_RESTARTED_ENV, n as encodeAutoRestarted, o as pendingUpgradeVersion, q as resolveQuietMs, u as AUTO_RESTART_RECHECK_CAP_MS } from './sessionLock-DFrwAnwR.mjs';
55
+ import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-CgMVIP7v.mjs';
56
56
  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, o as probeSystemdKillMode, q as wrappersSurviveHandover, t as handoverWaitsForSessions } from './daemonSupervisor-BxohggqN.mjs';
57
57
  import { A as AccountService } from './accountService-DEpIq6CF.mjs';
58
58
  import { spawnSetupTokenPty, watchAccountFiles } from './daemonAccounts-D5shoCLt.mjs';
59
59
  import { g as getProjectPath } from './path-D2wdaNSk.mjs';
60
60
  import { b as extractClaudeEditPaths } from './editPaths-BVfS_FFL.mjs';
61
- import { s as startFileWatcher } from './startFileWatcher-BiWGhlGW.mjs';
62
- import { I as InvalidateSync } from './sync-CcBrziWp.mjs';
61
+ import { s as startFileWatcher } from './startFileWatcher-C7eFs4hA.mjs';
62
+ import { I as InvalidateSync } from './sync-BIXH8ijr.mjs';
63
63
  import { R as RawJSONLinesSchema } from './types-CkqAACXx.mjs';
64
64
  import { t as tmuxArgs, a as scrubTmuxClientEnv, s as shellescape } from './tmuxSocket-BmZyixRM.mjs';
65
65
  import { i as isProcessAlive, t as terminateProcessTree } from './processTermination-ChJG5SLW.mjs';
@@ -67,30 +67,30 @@ import { findAllHappyProcesses } from './doctor-GN5mPOn5.mjs';
67
67
  import { T as TEAM_SKILL, a as TEAM_LEAD_PLAYBOOK, b as TEAM_MEMBER_RULES } from './resources-CLP_MpK4.mjs';
68
68
  import { promisify } from 'node:util';
69
69
  import { b as clipText, r as renderAction, c as clipAutomationReport, e as renderTemplate } from './template-CtRLg2PG.mjs';
70
- import { I as IssuesUnsupportedError, a as IssueRequestError, c as createIssuesClient } from './client-CMUlpYcy.mjs';
70
+ import { I as IssuesUnsupportedError, a as IssueRequestError, c as createIssuesClient } from './client-CX8kRedW.mjs';
71
71
  import { d as describeAgentHome } from './loginShellEnv-Dw8M7tkI.mjs';
72
72
  import { S as SPAWN_ACCOUNT_ENV } from './store-DWmjM4Ex.mjs';
73
- import './acpSessionResume-urFpnGsk.mjs';
74
- import './pushNotifications-CxX10K6n.mjs';
73
+ import './acpSessionResume-5El4xksf.mjs';
74
+ import './pushNotifications-RVpbqrxR.mjs';
75
75
  import './contentLogMetadata-BlWI0egu.mjs';
76
- import './reconnectGate-uTLj82tS.mjs';
76
+ import './reconnectGate-DSxYUCWy.mjs';
77
77
  import 'node:events';
78
78
  import 'socket.io-client';
79
79
  import './limits-DIo7rEBR.mjs';
80
- import './time-DJF2csbV.mjs';
81
- import './registerCommonHandlers-BYrmi-A4.mjs';
80
+ import './time-Che8GhII.mjs';
81
+ import './registerCommonHandlers-CQDRKlkG.mjs';
82
82
  import 'util';
83
83
  import 'cross-spawn';
84
84
  import '@paralleldrive/cuid2';
85
85
  import 'chalk';
86
86
  import 'node:module';
87
87
  import 'tweetnacl';
88
- import './browser-DL3QIQLS.mjs';
88
+ import './browser-BYSYzXvP.mjs';
89
89
  import 'open';
90
90
  import './specialCommands-MXUN0wfI.mjs';
91
91
  import './ids-DU6sLx4C.mjs';
92
92
  import 'url';
93
- import './localHappyAgentAuth-kg2RFvOy.mjs';
93
+ import './localHappyAgentAuth-B2JJxlE9.mjs';
94
94
  import './claudeAccountEnv-DowsOlDB.mjs';
95
95
  import 'node:readline';
96
96
  import 'node-pty';
@@ -3894,8 +3894,9 @@ function createUpdateController(deps) {
3894
3894
  outcome = { state, version, detail, at: now(), ...manualVersion ? { source: "manual" } : {} };
3895
3895
  deps.publish(snapshot());
3896
3896
  }
3897
+ const superseded = () => !!deps.owned && !deps.owned();
3897
3898
  async function evaluate() {
3898
- if (!policy || running) return;
3899
+ if (!policy || running || superseded()) return;
3899
3900
  const target = manualVersion ?? policy.autoUpdateVersion ?? null;
3900
3901
  if (outcome?.version === target && ["failed", "installed", "manual_required"].includes(outcome.state)) {
3901
3902
  const fingerprint = JSON.stringify([policy.checkedAt, outcome.state, outcome.version, outcome.detail, manualVersion, autoUpdateEnabled]);
@@ -3987,19 +3988,23 @@ function createUpdateController(deps) {
3987
3988
  }
3988
3989
  }
3989
3990
  async function refresh() {
3990
- if (operation || blocked) return;
3991
+ if (superseded()) return "superseded";
3992
+ if (blocked) return "blocked";
3993
+ if (operation) return "busy";
3991
3994
  operation = "refresh";
3992
3995
  try {
3993
3996
  const next = await deps.policy();
3994
- if (!next) return;
3997
+ if (!next) return "unavailable";
3995
3998
  if (manualVersion && !validManualTarget(next, manualVersion)) manualVersion = null;
3996
3999
  policy = next;
3997
4000
  await evaluate();
4001
+ return policyStale() ? "stale" : "ok";
3998
4002
  } finally {
3999
4003
  operation = null;
4000
4004
  }
4001
4005
  }
4002
4006
  async function retry(version) {
4007
+ if (superseded()) return { error: "daemon_superseded" };
4003
4008
  if (operation || blocked) return { error: blocked ? "manual_recovery_required" : "update_in_progress" };
4004
4009
  if (typeof version !== "string" || outcome?.state !== "failed" || outcome.version !== version) {
4005
4010
  return { error: "no_matching_failed_update" };
@@ -4024,6 +4029,7 @@ function createUpdateController(deps) {
4024
4029
  }
4025
4030
  }
4026
4031
  async function request(version) {
4032
+ if (superseded()) return { error: "daemon_superseded" };
4027
4033
  if (operation || blocked) return { error: blocked ? "manual_recovery_required" : "update_in_progress" };
4028
4034
  operation = "request";
4029
4035
  try {
@@ -4067,7 +4073,8 @@ function createUpdateController(deps) {
4067
4073
  handoverHold = { reason, at: now() };
4068
4074
  publish("failed", manualVersion ?? policy?.autoUpdateVersion ?? null, "handover_preflight_failed");
4069
4075
  }
4070
- return { refresh, retry, request, tick, withHandover, holdHandover, isRunning: () => running, currentTarget: () => policy?.autoUpdateVersion ?? null };
4076
+ const policyStale = () => !policy || now() - policy.checkedAt > 65 * 6e4;
4077
+ return { refresh, retry, request, tick, withHandover, holdHandover, policyStale, isRunning: () => running, currentTarget: () => policy?.autoUpdateVersion ?? null };
4071
4078
  }
4072
4079
 
4073
4080
  const defaults = {
@@ -4276,6 +4283,132 @@ function createPolicyAnnouncementHandler(deps) {
4276
4283
  };
4277
4284
  }
4278
4285
 
4286
+ const POLICY_REFRESH_MIN_INTERVAL_MS = 5 * 6e4;
4287
+ const POLICY_REFRESH_RETRY_MS = 3e4;
4288
+ const POLICY_REFRESH_MAX_BACKOFF_MS = 30 * 6e4;
4289
+ const WAKE_GAP_SLACK_MS = 2 * 6e4;
4290
+ function createPolicyRefreshTrigger(deps) {
4291
+ const now = deps.now ?? Date.now;
4292
+ const minIntervalMs = deps.minIntervalMs ?? POLICY_REFRESH_MIN_INTERVAL_MS;
4293
+ const retryMs = deps.retryMs ?? POLICY_REFRESH_RETRY_MS;
4294
+ const maxBackoffMs = deps.maxBackoffMs ?? POLICY_REFRESH_MAX_BACKOFF_MS;
4295
+ const setTimer = deps.setTimer ?? ((fn, ms) => {
4296
+ const t = setTimeout(fn, ms);
4297
+ t.unref?.();
4298
+ return t;
4299
+ });
4300
+ const clearTimer = deps.clearTimer ?? ((handle) => clearTimeout(handle));
4301
+ const log = (message, level) => deps.log?.(message, level);
4302
+ let lastSuccessAt = null;
4303
+ let lastAttemptAt = null;
4304
+ let lastBypassAt = null;
4305
+ let failures = 0;
4306
+ let inFlight = false;
4307
+ let timer = null;
4308
+ let stopped = false;
4309
+ const backoff = (n) => n <= 0 ? retryMs : Math.min(retryMs * 2 ** (n - 1), maxBackoffMs);
4310
+ function earliestRun(reason) {
4311
+ const windowEnd = lastSuccessAt === null ? 0 : lastSuccessAt + minIntervalMs;
4312
+ const retryAt = lastAttemptAt === null ? 0 : lastAttemptAt + backoff(failures);
4313
+ if (retryAt <= Math.max(windowEnd, now())) return { at: windowEnd, bypass: false };
4314
+ const mayBypass = (reason === "connect" || reason === "wake") && (lastBypassAt === null || now() - lastBypassAt >= minIntervalMs);
4315
+ return mayBypass ? { at: windowEnd, bypass: true } : { at: retryAt, bypass: false };
4316
+ }
4317
+ function defer(ms) {
4318
+ if (timer !== null) return;
4319
+ timer = setTimer(() => {
4320
+ timer = null;
4321
+ request("scheduled");
4322
+ }, Math.max(0, ms));
4323
+ }
4324
+ function run(reason) {
4325
+ inFlight = true;
4326
+ lastAttemptAt = now();
4327
+ log(`CLI update policy refresh (${reason})`, failures === 0 ? "warn" : "debug");
4328
+ void deps.refresh().catch(() => "unavailable").then((result) => {
4329
+ inFlight = false;
4330
+ if (result === "superseded") {
4331
+ stop();
4332
+ return;
4333
+ }
4334
+ if (result === "ok") {
4335
+ if (failures > 0) log(`CLI update policy refresh recovered after ${failures} failed attempt(s)`, "warn");
4336
+ lastSuccessAt = now();
4337
+ failures = 0;
4338
+ return;
4339
+ }
4340
+ if (result === "busy") lastAttemptAt = now();
4341
+ else {
4342
+ if (result === "stale") lastSuccessAt = now();
4343
+ failures += 1;
4344
+ const stepUp = failures === 1 || backoff(failures) > backoff(failures - 1);
4345
+ const next = result === "blocked" ? "waiting for the next connect / wake / hourly check" : `next try in ${Math.round(backoff(failures) / 1e3)}s`;
4346
+ log(`CLI update policy refresh (${reason}) read no fresh policy (${result}, ${failures} in a row); ${next}`, stepUp ? "warn" : "debug");
4347
+ }
4348
+ if (stopped || result === "blocked") return;
4349
+ defer(earliestRun("scheduled").at - now());
4350
+ });
4351
+ }
4352
+ function request(reason) {
4353
+ if (stopped) return "stopped";
4354
+ if (inFlight) return "in-flight";
4355
+ const { at, bypass } = earliestRun(reason);
4356
+ const wait = at - now();
4357
+ if (wait > 0) {
4358
+ defer(wait);
4359
+ return "deferred";
4360
+ }
4361
+ if (bypass) lastBypassAt = now();
4362
+ if (timer !== null) {
4363
+ clearTimer(timer);
4364
+ timer = null;
4365
+ }
4366
+ run(reason);
4367
+ return "run";
4368
+ }
4369
+ function stop() {
4370
+ stopped = true;
4371
+ if (timer !== null) clearTimer(timer);
4372
+ timer = null;
4373
+ }
4374
+ return {
4375
+ request,
4376
+ /** Any other refresh (startup, hourly, announcement) that read a policy restarts the window (and a fresh one ends the backoff); one that found us superseded stops it. */
4377
+ noteRefreshed(result) {
4378
+ if (result === "ok" || result === "stale") lastSuccessAt = now();
4379
+ if (result === "ok") failures = 0;
4380
+ else if (result === "superseded") stop();
4381
+ },
4382
+ stop
4383
+ };
4384
+ }
4385
+ function createWakeDetector(intervalMs, now = Date.now, slackMs = WAKE_GAP_SLACK_MS) {
4386
+ let last = null;
4387
+ return {
4388
+ /** Call once per heartbeat; true when the process was just suspended. */
4389
+ beat() {
4390
+ const at = now();
4391
+ const woke = last !== null && at - last > intervalMs + slackMs;
4392
+ last = at;
4393
+ return woke;
4394
+ }
4395
+ };
4396
+ }
4397
+
4398
+ function createDaemonOwnership(deps) {
4399
+ let superseded = false;
4400
+ return {
4401
+ owns() {
4402
+ if (superseded) return false;
4403
+ const ownerPid = deps.statePid();
4404
+ if (ownerPid === null || ownerPid === deps.pid) return true;
4405
+ superseded = true;
4406
+ deps.onSuperseded(ownerPid);
4407
+ return false;
4408
+ }
4409
+ };
4410
+ }
4411
+
4279
4412
  const HARNESS_INSTALL_CATALOG = Object.freeze({
4280
4413
  claude: Object.freeze({ packages: [{ name: "@anthropic-ai/claude-code", spec: "latest" }], commands: ["claude"], minNode: "22.0.0", scripts: true }),
4281
4414
  codex: Object.freeze({ packages: [{ name: "@openai/codex", spec: "latest" }], commands: ["codex"], minNode: "16.0.0", scripts: false }),
@@ -8898,6 +9031,14 @@ async function startDaemon() {
8898
9031
  host: initialMachineMetadata.host
8899
9032
  })).then(() => logger.debug(`[DAEMON RUN] claimed the machine record for host ${initialMachineMetadata.host}`)).catch((error) => logger.debug("[DAEMON RUN] could not refresh the recorded host:", error));
8900
9033
  }
9034
+ const daemonOwnership = createDaemonOwnership({
9035
+ pid: process.pid,
9036
+ statePid: readDaemonStatePidSync,
9037
+ onSuperseded: (ownerPid) => {
9038
+ logger.debug(`[DAEMON RUN] Somehow a different daemon (pid ${ownerPid}) was started without killing us. We should kill ourselves.`);
9039
+ requestShutdown("exception", "A different daemon was started without killing us. We should kill ourselves.");
9040
+ }
9041
+ });
8901
9042
  let lastUpdateLog = "";
8902
9043
  let harnessInstaller = null;
8903
9044
  let handoverInFlight = false;
@@ -8920,7 +9061,9 @@ async function startDaemon() {
8920
9061
  installFenced: () => !!harnessInstaller?.isRunning(),
8921
9062
  busyGraceMs: resolveBusyInstallGrace(process.env.HAPPY_CLI_UPDATE_BUSY_GRACE_MS),
8922
9063
  lastInstall: lastInstallStore(configuration.happyHomeDir),
9064
+ owned: daemonOwnership.owns,
8923
9065
  publish: (state) => {
9066
+ if (!daemonOwnership.owns()) return;
8924
9067
  cliUpdateStateRef = state;
8925
9068
  fileState = { ...fileState, cliUpdate: state };
8926
9069
  writeDaemonState(fileState);
@@ -8957,10 +9100,17 @@ async function startDaemon() {
8957
9100
  relayMoveInFlight = null;
8958
9101
  });
8959
9102
  });
8960
- const refreshCliUpdate = () => updateController.refresh().catch((error) => {
9103
+ const policyRefresh = createPolicyRefreshTrigger({
9104
+ refresh: () => updateController.refresh(),
9105
+ log: (message, level) => level === "warn" ? logger.warn(`[DAEMON RUN] ${message}`) : logger.debug(`[DAEMON RUN] ${message}`)
9106
+ });
9107
+ const refreshCliUpdate = () => updateController.refresh().then(policyRefresh.noteRefreshed).catch((error) => {
8961
9108
  logger.debug("[DAEMON RUN] CLI update policy check failed:", error);
8962
9109
  });
8963
- void refreshCliUpdate();
9110
+ apiMachine.setControlConnectedHandler(() => {
9111
+ policyRefresh.request("connect");
9112
+ });
9113
+ policyRefresh.request("startup");
8964
9114
  const cliUpdateIntervalMs = resolveCliUpdateCheckInterval(process.env.HAPPY_CLI_UPDATE_CHECK_INTERVAL);
8965
9115
  if (process.env.HAPPY_CLI_UPDATE_CHECK_INTERVAL && cliUpdateIntervalMs === DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS && process.env.HAPPY_CLI_UPDATE_CHECK_INTERVAL.trim() !== String(DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS)) {
8966
9116
  logger.warn(`[DAEMON RUN] Ignoring invalid HAPPY_CLI_UPDATE_CHECK_INTERVAL; using ${DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS}ms`);
@@ -8997,6 +9147,7 @@ async function startDaemon() {
8997
9147
  });
8998
9148
  apiMachine.setHarnessInstallHandler((params) => harnessInstaller.request(params));
8999
9149
  const heartbeatIntervalMs = parseInt(process.env.HAPPY_DAEMON_HEARTBEAT_INTERVAL || "60000");
9150
+ const wakeDetector = createWakeDetector(heartbeatIntervalMs);
9000
9151
  const restartOnStaleVersionAndHeartbeat = setInterval(serialTask(async () => {
9001
9152
  try {
9002
9153
  if (process.env.DEBUG) {
@@ -9008,6 +9159,7 @@ async function startDaemon() {
9008
9159
  onChildExited(pid);
9009
9160
  }
9010
9161
  }
9162
+ if (!daemonOwnership.owns()) return;
9011
9163
  await updateController.tick();
9012
9164
  await updateController.withHandover(async () => {
9013
9165
  handoverInFlight = true;
@@ -9044,6 +9196,7 @@ async function startDaemon() {
9044
9196
  clearInterval(restartOnStaleVersionAndHeartbeat);
9045
9197
  clearInterval(cliUpdateInterval);
9046
9198
  policyAnnouncements.stop();
9199
+ policyRefresh.stop();
9047
9200
  stopAgentVersionChecks();
9048
9201
  claudeAuthService.stop();
9049
9202
  stopAccountWatch();
@@ -9071,12 +9224,9 @@ async function startDaemon() {
9071
9224
  handoverInFlight = false;
9072
9225
  }
9073
9226
  });
9074
- const daemonState = await readDaemonState();
9075
- if (daemonState && daemonState.pid !== process.pid) {
9076
- logger.debug("[DAEMON RUN] Somehow a different daemon was started without killing us. We should kill ourselves.");
9077
- requestShutdown("exception", "A different daemon was started without killing us. We should kill ourselves.");
9078
- return;
9079
- }
9227
+ if (!daemonOwnership.owns()) return;
9228
+ const woke = wakeDetector.beat();
9229
+ if (woke || updateController.policyStale()) policyRefresh.request(woke ? "wake" : "stale");
9080
9230
  try {
9081
9231
  fileState = withDaemonHeartbeat(fileState, (/* @__PURE__ */ new Date()).toLocaleString());
9082
9232
  writeDaemonState(fileState);
@@ -9188,6 +9338,7 @@ async function startDaemon() {
9188
9338
  clearInterval(cliUpdateInterval);
9189
9339
  clearInterval(autoRestartSweep);
9190
9340
  policyAnnouncements.stop();
9341
+ policyRefresh.stop();
9191
9342
  stopAgentVersionChecks();
9192
9343
  await apiMachine.updateDaemonState((state) => ({
9193
9344
  ...state,
@@ -1,26 +1,26 @@
1
1
  import os from 'node:os';
2
- import { A as AUTO_RESTART_CAPABILITY, c as claimSessionOrExit, a as applyServerSnapshot, b as applyReconnectReplay, w as withoutServerSnapshot, m as mergeReconnectMetadata, t as takeAutoRestartedEvent, e as exitCursorStamp } from './sessionLock-Dj9_lShU.mjs';
3
- import { r as readSettings, H as HIBERNATION_CAPABILITY, a as resolveCheckMs, l as latchKeepAwake, e as evaluateWrapperIdle } from './persistence-CF7oV1oH.mjs';
4
- import { c as createSessionForStartup, H as HibernationProbe, a as commitHibernation } from './startupSessionCreate-DbBpGQo9.mjs';
2
+ import { A as AUTO_RESTART_CAPABILITY, c as claimSessionOrExit, a as applyServerSnapshot, b as applyReconnectReplay, w as withoutServerSnapshot, m as mergeReconnectMetadata, t as takeAutoRestartedEvent, e as exitCursorStamp } from './sessionLock-DFrwAnwR.mjs';
3
+ import { r as readSettings, H as HIBERNATION_CAPABILITY, a as resolveCheckMs, l as latchKeepAwake, e as evaluateWrapperIdle } from './persistence-D_zVC4Xz.mjs';
4
+ import { c as createSessionForStartup, H as HibernationProbe, a as commitHibernation } from './startupSessionCreate-D3ph1DtL.mjs';
5
5
  import { randomUUID } from 'node:crypto';
6
- import { c as connectionState, A as ApiClient, s as startOfflineReconnection } from './api-1CD4oRSW.mjs';
7
- import { l as logger } from './logger-CFrzcRHD.mjs';
8
- import { s as spawnOriginTags, a as sessionWorktreeMetadata } from './createSessionMetadata-BWb81WZg.mjs';
9
- import { p as packageJson } from './package-DxE8PttX.mjs';
6
+ import { c as connectionState, A as ApiClient, s as startOfflineReconnection } from './api-D8ZDxBWw.mjs';
7
+ import { l as logger } from './logger-BiKmiREe.mjs';
8
+ import { s as spawnOriginTags, a as sessionWorktreeMetadata } from './createSessionMetadata-BuAVB-xI.mjs';
9
+ import { p as packageJson } from './package-CIW5lwaN.mjs';
10
10
  import { P as PROMPT_QUEUE_CAPABILITY, a as PROJECT_SESSION_CAPABILITY, R as RUN_INTENT_CAPABILITY, C as CLAUDE_CONFIG_MODEL_CAPABILITY, A as AGENT_PROFILE_SESSION_CAPABILITY, I as ISSUE_SESSION_CAPABILITY, r as restoredEffort, b as restoredModel } from './index-CiRMvS73.mjs';
11
11
  import { D as DEFAULT_CLAUDE_PERMISSION_MODE, r as registerRunIntentRpc, a as recordRunIntents, w as withoutEffort } from './defaultPermissionMode-DgeiMMqy.mjs';
12
12
  import { F as FORK_BACKFILL_CAPABILITY, p as publishForkBackfillWhenCommitted } from './forkBackfill-DYIjlN1Z.mjs';
13
- import { c as configuration } from './configuration-DhEqAYzz.mjs';
13
+ import { c as configuration } from './configuration-i9MVy0a5.mjs';
14
14
  import { l as loadWrapperAccount } from './wrapperAccount-z8Swrd08.mjs';
15
15
  import { S as SPAWN_ACCOUNT_ENV } from './store-DWmjM4Ex.mjs';
16
- import { n as notifyDaemonSessionStarted, c as checkDaemonHibernation } from './controlClient-PaIiDxM6.mjs';
17
- import { g as getInitialMachineMetadata } from './machineMetadata-DiStbYik.mjs';
16
+ import { n as notifyDaemonSessionStarted, c as checkDaemonHibernation } from './controlClient-D6vqMUfi.mjs';
17
+ import { g as getInitialMachineMetadata } from './machineMetadata-CiyO9wm-.mjs';
18
18
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
19
19
  import { resolve, join } from 'node:path';
20
20
  import { a as applySandboxPermissionPolicy, r as resolveInitialClaudePermissionMode, m as mapToClaudeMode, b as reconcilePublishedPermissionMode } from './permissionMode-CH4FoZfU.mjs';
21
21
  import { d as decodeBase64, e as encodeBase64 } from './authRelay-DhQhkBvX.mjs';
22
22
  import { readFile } from 'node:fs/promises';
23
- import { C as CLAUDE_ATTACHMENT_KINDS, s as stripAttachmentManifest } from './attachmentContent-CeF54XeO.mjs';
23
+ import { C as CLAUDE_ATTACHMENT_KINDS, s as stripAttachmentManifest } from './attachmentContent-BfSQxccA.mjs';
24
24
  import { T as TranscriptPathHints } from './transcriptCursor-B7T_gkQ0.mjs';
25
25
  import { p as planClaudeStartup } from './startupPlan-DFMyNgAs.mjs';
26
26
  import { t as takeReconnectEnv } from './reconnectEnv-DeSvHl3q.mjs';
@@ -32,30 +32,30 @@ import 'node:child_process';
32
32
  import './processTreeSnapshot-fuwxC0fr.mjs';
33
33
  import 'zod';
34
34
  import 'axios';
35
- import './pushNotifications-CxX10K6n.mjs';
35
+ import './pushNotifications-RVpbqrxR.mjs';
36
36
  import './contentLogMetadata-BlWI0egu.mjs';
37
- import './reconnectGate-uTLj82tS.mjs';
37
+ import './reconnectGate-DSxYUCWy.mjs';
38
38
  import 'os';
39
39
  import 'child_process';
40
40
  import 'node:events';
41
41
  import 'socket.io-client';
42
42
  import './limits-DIo7rEBR.mjs';
43
- import './time-DJF2csbV.mjs';
44
- import './registerCommonHandlers-BYrmi-A4.mjs';
43
+ import './time-Che8GhII.mjs';
44
+ import './registerCommonHandlers-CQDRKlkG.mjs';
45
45
  import 'util';
46
46
  import 'fs/promises';
47
47
  import 'crypto';
48
48
  import 'path';
49
49
  import 'cross-spawn';
50
50
  import '@paralleldrive/cuid2';
51
- import './sync-CcBrziWp.mjs';
51
+ import './sync-BIXH8ijr.mjs';
52
52
  import './backgroundTaskActivity-8PdPxrvy.mjs';
53
53
  import 'chalk';
54
54
  import 'node:util';
55
55
  import './claudeAccountEnv-DowsOlDB.mjs';
56
56
  import './detectCLI-CSGMlV51.mjs';
57
57
  import 'fs';
58
- import './localHappyAgentAuth-kg2RFvOy.mjs';
58
+ import './localHappyAgentAuth-B2JJxlE9.mjs';
59
59
  import 'tweetnacl';
60
60
  import './fsMkdir-DumgLTzR.mjs';
61
61
  import 'url';
@@ -66,7 +66,7 @@ const CLAUDE_EFFORTS = ["low", "medium", "high", "xhigh", "max"];
66
66
  function restoredClaudeEffort(effort) {
67
67
  return CLAUDE_EFFORTS.includes(effort ?? "") ? effort : void 0;
68
68
  }
69
- const importRunClaudeDeps = () => import('./runClaudeDeps-8RXtu0Zc.mjs');
69
+ const importRunClaudeDeps = () => import('./runClaudeDeps-CL3goCXG.mjs');
70
70
  async function runClaude(credentials, options = {}) {
71
71
  logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
72
72
  logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
@@ -82,7 +82,7 @@ async function runClaude(credentials, options = {}) {
82
82
  const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
83
83
  if (isAssistantVariant) {
84
84
  try {
85
- const { bootstrapAssistantHome } = await import('./bootstrap-D_1MskAl.mjs');
85
+ const { bootstrapAssistantHome } = await import('./bootstrap-pGaFGbWO.mjs');
86
86
  await bootstrapAssistantHome();
87
87
  } catch (error) {
88
88
  logger.debug("[START] Assistant home bootstrap failed:", error);
@@ -210,7 +210,7 @@ async function runClaude(credentials, options = {}) {
210
210
  }
211
211
  if (!response) {
212
212
  let offlineSessionId = null;
213
- const { claudeLocal } = await import('./claudeLocal-DRMWkdCC.mjs');
213
+ const { claudeLocal } = await import('./claudeLocal-bDarWqaU.mjs');
214
214
  const { createSessionScanner: createSessionScanner2 } = await loadDeps();
215
215
  const reconnection = startOfflineReconnection({
216
216
  serverUrl: configuration.serverUrl,
@@ -1,28 +1,28 @@
1
1
  'use strict';
2
2
 
3
3
  var os = require('node:os');
4
- var sessionLock = require('./sessionLock-unMOEniJ.cjs');
5
- var persistence = require('./persistence-_W9tE-bW.cjs');
6
- var startupSessionCreate = require('./startupSessionCreate-DFl54ozj.cjs');
4
+ var sessionLock = require('./sessionLock-Db_uQcUP.cjs');
5
+ var persistence = require('./persistence-BOEZtiKb.cjs');
6
+ var startupSessionCreate = require('./startupSessionCreate-C5wdvraY.cjs');
7
7
  var node_crypto = require('node:crypto');
8
- var api = require('./api-KVVs-GkM.cjs');
9
- var logger = require('./logger-Hyhy2boA.cjs');
10
- var createSessionMetadata = require('./createSessionMetadata-hGZeo_nR.cjs');
11
- var _package = require('./package-06cGlmeD.cjs');
8
+ var api = require('./api-ChhFBuB0.cjs');
9
+ var logger = require('./logger-BtWBoP60.cjs');
10
+ var createSessionMetadata = require('./createSessionMetadata-B_NZvmhm.cjs');
11
+ var _package = require('./package-Djdgx8nb.cjs');
12
12
  var index = require('./index-44o_qMvE.cjs');
13
13
  var defaultPermissionMode = require('./defaultPermissionMode-Cs_Tv83b.cjs');
14
14
  var forkBackfill = require('./forkBackfill-8eLDeS73.cjs');
15
- var configuration = require('./configuration-LWFmTxty.cjs');
15
+ var configuration = require('./configuration-Cl9kOv09.cjs');
16
16
  var wrapperAccount = require('./wrapperAccount-nGGMJDBF.cjs');
17
17
  var store = require('./store-Cpb1LMNW.cjs');
18
- var controlClient = require('./controlClient-TVMpETsR.cjs');
19
- var machineMetadata = require('./machineMetadata-BLymhM03.cjs');
18
+ var controlClient = require('./controlClient-DxCQKfqe.cjs');
19
+ var machineMetadata = require('./machineMetadata-C0-LyMsb.cjs');
20
20
  var projectPath = require('./projectPath-C3ioB4Bu.cjs');
21
21
  var path = require('node:path');
22
22
  var permissionMode = require('./permissionMode-CrV-XuMs.cjs');
23
23
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
24
24
  var promises = require('node:fs/promises');
25
- var attachmentContent = require('./attachmentContent-f3BbOKqz.cjs');
25
+ var attachmentContent = require('./attachmentContent-f5gwnv9J.cjs');
26
26
  var transcriptCursor = require('./transcriptCursor-DcXGLeSc.cjs');
27
27
  var startupPlan = require('./startupPlan-BLMbfQIH.cjs');
28
28
  var reconnectEnv = require('./reconnectEnv-B31lY4nR.cjs');
@@ -34,30 +34,30 @@ require('node:child_process');
34
34
  require('./processTreeSnapshot-D5iNblp6.cjs');
35
35
  require('zod');
36
36
  require('axios');
37
- require('./pushNotifications-DdzTbrA3.cjs');
37
+ require('./pushNotifications-B19lT5mY.cjs');
38
38
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
39
- require('./reconnectGate-DeDhtQJW.cjs');
39
+ require('./reconnectGate-B8ltzSJD.cjs');
40
40
  require('os');
41
41
  require('child_process');
42
42
  require('node:events');
43
43
  require('socket.io-client');
44
44
  require('./limits-C-a7gr04.cjs');
45
- require('./time-CDBZWYDb.cjs');
46
- require('./registerCommonHandlers-BrEtSwNk.cjs');
45
+ require('./time-BMCY7zJL.cjs');
46
+ require('./registerCommonHandlers-Y2siJGwL.cjs');
47
47
  require('util');
48
48
  require('fs/promises');
49
49
  require('crypto');
50
50
  require('path');
51
51
  require('cross-spawn');
52
52
  require('@paralleldrive/cuid2');
53
- require('./sync-C764ZzE6.cjs');
53
+ require('./sync-ni64k2OI.cjs');
54
54
  require('./backgroundTaskActivity-CBvUdj39.cjs');
55
55
  require('chalk');
56
56
  require('node:util');
57
57
  require('./claudeAccountEnv-Btp39mfa.cjs');
58
58
  require('./detectCLI-BuYR_Qxe.cjs');
59
59
  require('fs');
60
- require('./localHappyAgentAuth-DxlQgaer.cjs');
60
+ require('./localHappyAgentAuth-Dm9obisi.cjs');
61
61
  require('tweetnacl');
62
62
  require('./fsMkdir-0K3yENml.cjs');
63
63
  require('url');
@@ -68,7 +68,7 @@ const CLAUDE_EFFORTS = ["low", "medium", "high", "xhigh", "max"];
68
68
  function restoredClaudeEffort(effort) {
69
69
  return CLAUDE_EFFORTS.includes(effort ?? "") ? effort : void 0;
70
70
  }
71
- const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-tPqwAl_m.cjs'); });
71
+ const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-4RFRR4cY.cjs'); });
72
72
  async function runClaude(credentials, options = {}) {
73
73
  logger.logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
74
74
  logger.logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
@@ -84,7 +84,7 @@ async function runClaude(credentials, options = {}) {
84
84
  const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
85
85
  if (isAssistantVariant) {
86
86
  try {
87
- const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-N1PY4ypX.cjs'); });
87
+ const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-EGhaCmXy.cjs'); });
88
88
  await bootstrapAssistantHome();
89
89
  } catch (error) {
90
90
  logger.logger.debug("[START] Assistant home bootstrap failed:", error);
@@ -212,7 +212,7 @@ async function runClaude(credentials, options = {}) {
212
212
  }
213
213
  if (!response) {
214
214
  let offlineSessionId = null;
215
- const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-Ix69XJ1t.cjs'); });
215
+ const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-ClqHmkk6.cjs'); });
216
216
  const { createSessionScanner: createSessionScanner2 } = await loadDeps();
217
217
  const reconnection = api.startOfflineReconnection({
218
218
  serverUrl: configuration.configuration.serverUrl,