very-happy-cli 0.2.166 → 0.2.168

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 (178) hide show
  1. package/dist/{AcpBackend-tRWk7yi7.mjs → AcpBackend-BoLDLYNT.mjs} +3 -3
  2. package/dist/{AcpBackend-20VHOXwb.cjs → AcpBackend-r83MMm-i.cjs} +3 -3
  3. package/dist/{BasePermissionHandler-COKc4pmt.cjs → BasePermissionHandler-CS0eRtT-.cjs} +1 -1
  4. package/dist/{BasePermissionHandler-CDCLIrZJ.mjs → BasePermissionHandler-DTcVlmKi.mjs} +1 -1
  5. package/dist/{BaseReasoningProcessor-BDVKvooR.mjs → BaseReasoningProcessor-BddnNlXQ.mjs} +1 -1
  6. package/dist/{BaseReasoningProcessor-DAGQdkNp.cjs → BaseReasoningProcessor-RJiBhA8h.cjs} +1 -1
  7. package/dist/{agentHome-2IbIjKCa.mjs → agentHome--LRsdUx6.mjs} +4 -4
  8. package/dist/{agentHome-KVWj6nCl.cjs → agentHome-D-e_j9hK.cjs} +4 -4
  9. package/dist/{api-DnNL5fLw.cjs → api-COSJ3Yb7.cjs} +88 -10
  10. package/dist/{api-Cmz3XS4P.mjs → api-hXLwtgMi.mjs} +88 -10
  11. package/dist/{apiMachine-DeoQ8QbZ.cjs → apiMachine-BTCUUGC6.cjs} +50 -15
  12. package/dist/{apiMachine-B6ySCFe0.mjs → apiMachine-BauSXWNd.mjs} +50 -15
  13. package/dist/{attachmentContent-DPWxHgX4.cjs → attachmentContent-BCK0AxDS.cjs} +2 -2
  14. package/dist/{attachmentContent-CTXapi-_.mjs → attachmentContent-CS0B2N0Q.mjs} +2 -2
  15. package/dist/{attachmentLimits-BfgKV5iE.cjs → attachmentLimits-BEYEEBm8.cjs} +13 -1
  16. package/dist/{attachmentLimits-C1PCCM79.mjs → attachmentLimits-CxG3T18E.mjs} +13 -1
  17. package/dist/{auth-pzWIFdOD.mjs → auth-BFeFguVs.mjs} +5 -5
  18. package/dist/{auth-BMaBjRAj.mjs → auth-BUXH1L2k.mjs} +10 -10
  19. package/dist/{auth-D4-eQz85.cjs → auth-CCj5KlYS.cjs} +10 -10
  20. package/dist/{auth-ietHtvwu.cjs → auth-CfB2XcAW.cjs} +5 -5
  21. package/dist/{auto-DL75Dx3I.mjs → auto-D5BYdAoT.mjs} +14 -14
  22. package/dist/{auto-DOWTQDPa.cjs → auto-ZCHKb4jo.cjs} +14 -14
  23. package/dist/{bootstrap-BpXIc2wn.cjs → bootstrap-DSX64t23.cjs} +2 -2
  24. package/dist/{bootstrap-XE8A7Ut2.mjs → bootstrap-DklT121U.mjs} +2 -2
  25. package/dist/{browser-CcG8GLRV.cjs → browser-CeekQeKt.cjs} +1 -1
  26. package/dist/{browser-DDFi1T8C.mjs → browser-DUf1dth8.mjs} +1 -1
  27. package/dist/{claudeLocal-DmM5Oyhv.mjs → claudeLocal-C8pXtb8q.mjs} +5 -5
  28. package/dist/{claudeLocal-DXBXwIOG.cjs → claudeLocal-hH0YYex3.cjs} +5 -5
  29. package/dist/{claudeLocalLauncher-Cs4eUC3P.mjs → claudeLocalLauncher-AtUe2tM-.mjs} +10 -10
  30. package/dist/{claudeLocalLauncher-C41Y6Kp4.cjs → claudeLocalLauncher-B-ta13pT.cjs} +10 -10
  31. package/dist/{claudeSessionFork-BdLnc2Hv.mjs → claudeSessionFork-BQPBKEHk.mjs} +1 -1
  32. package/dist/{claudeSessionFork-Cs0I3eGI.cjs → claudeSessionFork-Cq9FBfjD.cjs} +1 -1
  33. package/dist/{client-CbK33y_s.mjs → client-Bg6-mQKO.mjs} +3 -3
  34. package/dist/{client-GjTnsq6F.mjs → client-Cbl3ejoq.mjs} +2 -2
  35. package/dist/{client-JISJx2f-.cjs → client-DZpkmS5l.cjs} +3 -3
  36. package/dist/{client-DJ0kX_8M.cjs → client-EnFomCjx.cjs} +2 -2
  37. package/dist/codex/happyMcpStdioBridge.cjs +14 -14
  38. package/dist/codex/happyMcpStdioBridge.mjs +14 -14
  39. package/dist/{codexAppServerClient-BTjn2ZCZ.cjs → codexAppServerClient-pllsN90-.cjs} +4 -4
  40. package/dist/{codexAppServerClient-CldXEojt.mjs → codexAppServerClient-sWuwtddZ.mjs} +4 -4
  41. package/dist/{codexCommand-DjMU-Ijf.mjs → codexCommand-DbTkMlW4.mjs} +137 -56
  42. package/dist/{codexCommand-BpD0N1F7.cjs → codexCommand-_jkx59gI.cjs} +137 -56
  43. package/dist/{config-DuLL0Ppe.cjs → config-BuIIZPZK.cjs} +3 -3
  44. package/dist/{config-DjSJKatx.mjs → config-FCOoREKj.mjs} +3 -3
  45. package/dist/{configuration-D2v3puap.mjs → configuration-BZo1JWNV.mjs} +2 -2
  46. package/dist/{configuration-B0cb3xA3.cjs → configuration-DeuGrnej.cjs} +1 -1
  47. package/dist/{connect-CnNNyM9I.mjs → connect-C2yHh85e.mjs} +13 -13
  48. package/dist/{connect-B7JWEzyg.cjs → connect-CjDdF12U.cjs} +13 -13
  49. package/dist/{context-BFUpYT39.cjs → context-BhvZtm3j.cjs} +1 -1
  50. package/dist/{context-DjfqLWzE.mjs → context-DZIIcfld.mjs} +1 -1
  51. package/dist/{controlClient-BMUJfUeF.mjs → controlClient-CXD-Xdny.mjs} +18 -4
  52. package/dist/{controlClient-CmnHGcyl.cjs → controlClient-IDE3se23.cjs} +18 -3
  53. package/dist/{createSessionMetadata-DbfRBhRu.cjs → createSessionMetadata-BCHFLSLk.cjs} +56 -3
  54. package/dist/{createSessionMetadata-DU0bCg2m.mjs → createSessionMetadata-DoLFya-Q.mjs} +57 -5
  55. package/dist/defaultPermissionMode-BtZtLdQz.cjs +197 -0
  56. package/dist/defaultPermissionMode-Dxfv-5Ud.mjs +191 -0
  57. package/dist/{deterministicJson-Dp3TVyap.cjs → deterministicJson-BqQKrUzw.cjs} +8 -8
  58. package/dist/{deterministicJson-D-WPUrZb.mjs → deterministicJson-CF1fJMaM.mjs} +8 -8
  59. package/dist/{doctor-BlXXyQ1L.mjs → doctor-C98yYhYr.mjs} +6 -6
  60. package/dist/{doctor-CkJmdPbi.cjs → doctor-D61ncaeL.cjs} +6 -6
  61. package/dist/{downloadTarget-DjSwMHun.mjs → downloadTarget-CaISZbNy.mjs} +6 -6
  62. package/dist/{downloadTarget-CiQqRIc-.cjs → downloadTarget-Dist9t2e.cjs} +6 -6
  63. package/dist/{ensureDaemonRunning-C_aIOhgG.cjs → ensureDaemonRunning-BB0hnWY_.cjs} +5 -5
  64. package/dist/{ensureDaemonRunning-CAQag1zE.mjs → ensureDaemonRunning-CNiqOarI.mjs} +5 -5
  65. package/dist/{handleResumeCommand-Ci7wacT-.mjs → handleResumeCommand-BzcANj0i.mjs} +5 -5
  66. package/dist/{handleResumeCommand-6KzBGDnl.cjs → handleResumeCommand-CkzW-T_f.cjs} +5 -5
  67. package/dist/{index-DEKIgZUo.cjs → index-BQU1sS9K.cjs} +4 -4
  68. package/dist/{index-DBmNwMX9.cjs → index-BeeWN9Et.cjs} +33 -33
  69. package/dist/{index-WGCT6SSV.mjs → index-CdmIOFwG.mjs} +34 -34
  70. package/dist/{index-HQsigW_J.mjs → index-D2hg_u5i.mjs} +3 -3
  71. package/dist/{index-DQplgo0W.mjs → index-Dgqk3lfG.mjs} +4 -4
  72. package/dist/{index-CaFCAlX8.cjs → index-DipBfs9w.cjs} +3 -3
  73. package/dist/index.cjs +2 -2
  74. package/dist/index.mjs +2 -2
  75. package/dist/{install-oJUvsFu9.mjs → install-CK1FvmYQ.mjs} +3 -3
  76. package/dist/{install-CejEiRGW.cjs → install-VtuffPLu.cjs} +3 -3
  77. package/dist/lib.cjs +11 -11
  78. package/dist/lib.d.cts +61 -0
  79. package/dist/lib.d.mts +61 -0
  80. package/dist/lib.mjs +11 -11
  81. package/dist/{lidState-D8BmnJV1.cjs → lidState-2IT0tas7.cjs} +1 -1
  82. package/dist/{lidState-BfximpjX.mjs → lidState-CJ3XkJRn.mjs} +1 -1
  83. package/dist/{localHappyAgentAuth-d7B6S_o7.cjs → localHappyAgentAuth-CPMh61Su.cjs} +1 -1
  84. package/dist/{localHappyAgentAuth-Ct1aXwqd.mjs → localHappyAgentAuth-DkLbntlf.mjs} +1 -1
  85. package/dist/{logger-BpQcwNnt.mjs → logger-C6zzu57a.mjs} +2 -2
  86. package/dist/{logger-JTcJU-uL.cjs → logger-Ockf1cjN.cjs} +2 -2
  87. package/dist/{machineMetadata-BBg_Njw3.cjs → machineMetadata-CoMYwSlG.cjs} +4 -3
  88. package/dist/{machineMetadata-CBdxABeI.mjs → machineMetadata-DmTGIZAV.mjs} +4 -3
  89. package/dist/{main-B5b1gA3K.mjs → main-B8TX9xPq.mjs} +45 -45
  90. package/dist/{main-C16fOGgn.cjs → main-CThJ9JQb.cjs} +45 -45
  91. package/dist/{manager-BQ4flvQZ.mjs → manager-BEsI4qt3.mjs} +9 -3
  92. package/dist/{manager-Cly8xVIR.cjs → manager-HrEj442o.cjs} +8 -2
  93. package/dist/{mcp-BnNiBBax.cjs → mcp-Dwku1p2I.cjs} +14 -14
  94. package/dist/{mcp-DGNWgVdv.mjs → mcp-Yw93dOiW.mjs} +14 -14
  95. package/dist/mirrorProtocol-CQ5fAUgq.mjs +1247 -0
  96. package/dist/mirrorProtocol-CdPhEBSh.cjs +1270 -0
  97. package/dist/{package-BqwrPxL0.mjs → package-5xAdq5fu.mjs} +7 -7
  98. package/dist/{package-C1XvUQFy.cjs → package-DfoyJe1O.cjs} +7 -7
  99. package/dist/{peerTools-DPvbcs8V.cjs → peerTools-BEnBvEcU.cjs} +4 -4
  100. package/dist/{peerTools-CeCe-3lk.mjs → peerTools-uDR6MG0-.mjs} +4 -4
  101. package/dist/{persistence-2Xp_o6x6.cjs → persistence-B5oT6oQ9.cjs} +147 -25
  102. package/dist/{persistence-B9LmhAE2.mjs → persistence-B6M_W5iC.mjs} +123 -12
  103. package/dist/{piRunnerArgs-DI29dDNo.cjs → piRunnerArgs-MLN46-nK.cjs} +1 -1
  104. package/dist/{piRunnerArgs-7FaTyNOq.mjs → piRunnerArgs-vNIUWHqo.mjs} +1 -1
  105. package/dist/{piRuntime-R8XVChxK.cjs → piRuntime-DkUg8_5q.cjs} +1 -1
  106. package/dist/{piRuntime-0qEK5AqE.mjs → piRuntime-WMuI7f4q.mjs} +1 -1
  107. package/dist/{piTerminal-zcQKc8Sp.mjs → piTerminal-4NBSZVxd.mjs} +16 -16
  108. package/dist/{piTerminal-Ccj0KNPr.cjs → piTerminal-Bskvs69Z.cjs} +16 -16
  109. package/dist/{rateLimitWindows-C2Jk3Ih7.cjs → rateLimitWindows-C2-Ky86q.cjs} +1 -1
  110. package/dist/{rateLimitWindows-Dhfhbtqu.mjs → rateLimitWindows-CJ1xDAxa.mjs} +1 -1
  111. package/dist/{registerCommonHandlers-DdfGsFbM.mjs → registerCommonHandlers-BLHKlk5Z.mjs} +2 -2
  112. package/dist/{registerCommonHandlers-Aha_KfM3.cjs → registerCommonHandlers-COSTo15G.cjs} +2 -2
  113. package/dist/{registerKillSessionHandler-DboQlGcH.mjs → registerKillSessionHandler-BVQfhSgm.mjs} +14 -9
  114. package/dist/{registerKillSessionHandler-CjitOpUA.cjs → registerKillSessionHandler-DDZISNzu.cjs} +14 -9
  115. package/dist/{remoteSessionClient-BwI8rpQw.cjs → remoteSessionClient-B2pOMZRw.cjs} +5 -5
  116. package/dist/{remoteSessionClient-B2DtWuNP.mjs → remoteSessionClient-Dx0M2MXV.mjs} +5 -5
  117. package/dist/{reportProgressTool-B-Rcy0s3.cjs → reportProgressTool-C5vDEv9Y.cjs} +1 -1
  118. package/dist/{reportProgressTool-DnAD8wOa.mjs → reportProgressTool-CcwFr0ek.mjs} +1 -1
  119. package/dist/{run-Bh66Xs40.cjs → run-BKTv1E-D.cjs} +323 -37
  120. package/dist/{run-DPEwJpQR.mjs → run-BZjIDOGM.mjs} +322 -36
  121. package/dist/{runClaude-DLr_nBzw.mjs → runClaude-DFa77Ffl.mjs} +87 -25
  122. package/dist/{runClaude-C-lJdAKD.cjs → runClaude-DUlFZWiK.cjs} +87 -25
  123. package/dist/{runClaudeDeps-vWWLod7J.cjs → runClaudeDeps--TnER0c3.cjs} +100 -31
  124. package/dist/{runClaudeDeps-C7JV7nXG.mjs → runClaudeDeps-BYohagQU.mjs} +105 -36
  125. package/dist/{runGemini-o-CUSayc.cjs → runGemini-BSBejXek.cjs} +32 -32
  126. package/dist/{runGemini-tH6sLw-G.mjs → runGemini-CUiq1Zei.mjs} +32 -32
  127. package/dist/{runOpenClaw-C5DZvVhn.mjs → runOpenClaw-CgwRP4gR.mjs} +16 -16
  128. package/dist/{runOpenClaw-D24f35l0.cjs → runOpenClaw-DQFEi3E1.cjs} +16 -16
  129. package/dist/{sandbox-BaL1aslA.mjs → sandbox-BTwAN7Yi.mjs} +4 -4
  130. package/dist/{sandbox-TJZJ6ngw.cjs → sandbox-DuLRfMY3.cjs} +4 -4
  131. package/dist/selfCheck-DF26lf1b.mjs +84 -0
  132. package/dist/{selfCheck-Dugi0Nk_.cjs → selfCheck-DuOLndWl.cjs} +34 -34
  133. package/dist/{send-DDcJ3ayi.mjs → send-ComZSvT5.mjs} +8 -8
  134. package/dist/{send-CkWOSYmU.cjs → send-Dl4TJ0Ia.cjs} +8 -8
  135. package/dist/{server-7qFQ8J2u.cjs → server-CWmamKcS.cjs} +6 -6
  136. package/dist/{server-CUjRvQSd.mjs → server-CXFSsyZx.mjs} +4 -4
  137. package/dist/{sessionLock-DfhNICyS.cjs → sessionLock-BFD8cFNP.cjs} +12 -3
  138. package/dist/{sessionLock-DqVyHFAQ.mjs → sessionLock-DCKf-gjd.mjs} +12 -4
  139. package/dist/{sessionModeFile-M4OpiyrF.mjs → sessionModeFile-BYxsFSvc.mjs} +1 -1
  140. package/dist/{sessionModeFile-CIznKD7O.cjs → sessionModeFile-i-MVQRcU.cjs} +1 -1
  141. package/dist/{sessionOps-DOyy4gkY.cjs → sessionOps-BAQ_80Rg.cjs} +4 -4
  142. package/dist/{sessionOps-BnaEaOKs.mjs → sessionOps-CBXsQGV5.mjs} +4 -4
  143. package/dist/{sessionScanner-CcuOn9uU.mjs → sessionScanner-CwPBvQK2.mjs} +3 -3
  144. package/dist/{sessionScanner-Cu1yKlj4.cjs → sessionScanner-Dth3iDCi.cjs} +3 -3
  145. package/dist/{sessions-BQgk5Kw8.cjs → sessions-BULd_RQt.cjs} +9 -9
  146. package/dist/{sessions-C9O91rL1.mjs → sessions-DYAqiUS0.mjs} +9 -9
  147. package/dist/{setupOfflineReconnection-Byy8aeKT.mjs → setupOfflineReconnection-Bo9xb30l.mjs} +2 -2
  148. package/dist/{setupOfflineReconnection-DFmQ8s6I.cjs → setupOfflineReconnection-DI8BQf_g.cjs} +2 -2
  149. package/dist/{spawn-EZ2yrtWd.mjs → spawn-DmXpKIOT.mjs} +13 -13
  150. package/dist/{spawn-BS7LPmSm.cjs → spawn-oikb5mUh.cjs} +13 -13
  151. package/dist/{spawnHappyCLI-BAa49m0q.mjs → spawnHappyCLI-BCnZfffk.mjs} +1 -1
  152. package/dist/{spawnHappyCLI-DyaldIe5.cjs → spawnHappyCLI-Cs177BB4.cjs} +1 -1
  153. package/dist/{specialCommands-DouFaJ_0.cjs → specialCommands-CmrwEh71.cjs} +3 -3
  154. package/dist/{specialCommands-CCWtwIGZ.mjs → specialCommands-xD4uOtdG.mjs} +3 -3
  155. package/dist/{startFileWatcher-Dfs4whzr.mjs → startFileWatcher-De7rN8QW.mjs} +1 -1
  156. package/dist/{startFileWatcher-DQbbypJv.cjs → startFileWatcher-S_Af_QPR.cjs} +1 -1
  157. package/dist/{sync-x_lI_3j_.cjs → sync-BS9_zSQ2.cjs} +1 -1
  158. package/dist/{sync-BLpH13Kb.mjs → sync-CHOB3Org.mjs} +1 -1
  159. package/dist/{systemPrompt-4erwILTB.cjs → systemPrompt-D2ICcIsu.cjs} +1 -1
  160. package/dist/{systemPrompt-BanyDihy.mjs → systemPrompt-DNLUUejs.mjs} +1 -1
  161. package/dist/{teams-DzetlGWC.cjs → teams-BUbESH6L.cjs} +6 -6
  162. package/dist/{teams-D6BOT3lR.mjs → teams-By3oBC7r.mjs} +6 -6
  163. package/dist/{time-CfDKj6Bx.mjs → time-CN0jVVir.mjs} +1 -1
  164. package/dist/{time-T0YmeOhS.cjs → time-uSKpEhew.cjs} +1 -1
  165. package/dist/{titleGenerator-CoMxqKfP.cjs → titleGenerator-CLIXjn9b.cjs} +2 -2
  166. package/dist/{titleGenerator-ChImQ4q-.mjs → titleGenerator-CegRJ47n.mjs} +1 -1
  167. package/dist/{todo-CZZebKZg.cjs → todo-Bg1vurv9.cjs} +5 -5
  168. package/dist/{todo-SVtYxGON.mjs → todo-Bl3abqvy.mjs} +5 -5
  169. package/dist/{tools-3X2z3YDe.mjs → tools-BcLUrC57.mjs} +1 -1
  170. package/dist/{tools-IJ0TAcJs.cjs → tools-DuWKlc0k.cjs} +1 -1
  171. package/dist/{uninstall-CypD-kr1.mjs → uninstall-BlpZlM9U.mjs} +3 -3
  172. package/dist/{uninstall-CqqCWj7w.cjs → uninstall-DWnj2XVT.cjs} +3 -3
  173. package/package.json +7 -7
  174. package/dist/defaultPermissionMode-BnxJPVHT.mjs +0 -4
  175. package/dist/defaultPermissionMode-CxmTXUQR.cjs +0 -7
  176. package/dist/mirrorProtocol-BEGk2--0.cjs +0 -266
  177. package/dist/mirrorProtocol-h5WHpdhh.mjs +0 -248
  178. package/dist/selfCheck-DPi4lqme.mjs +0 -84
@@ -1,10 +1,10 @@
1
1
  import { spawn } from 'node:child_process';
2
2
  import { ndJsonStream, ClientSideConnection } from '@agentclientprotocol/sdk';
3
3
  import { randomUUID } from 'node:crypto';
4
- import { l as logger } from './logger-BpQcwNnt.mjs';
5
- import { d as delay } from './time-CfDKj6Bx.mjs';
4
+ import { l as logger } from './logger-C6zzu57a.mjs';
5
+ import { d as delay } from './time-CN0jVVir.mjs';
6
6
  import { c as contentLogMetadata, e as errorLogMetadata } from './contentLogMetadata-BlWI0egu.mjs';
7
- import { p as packageJson } from './package-BqwrPxL0.mjs';
7
+ import { p as packageJson } from './package-5xAdq5fu.mjs';
8
8
 
9
9
  function acpImageBlocks(attachments, supportsImages) {
10
10
  return attachments.filter((file) => ["image/jpeg", "image/png", "image/gif", "image/webp"].includes(file.mimeType)).map((file) => {
@@ -3,10 +3,10 @@
3
3
  var node_child_process = require('node:child_process');
4
4
  var sdk = require('@agentclientprotocol/sdk');
5
5
  var node_crypto = require('node:crypto');
6
- var logger = require('./logger-JTcJU-uL.cjs');
7
- var time = require('./time-T0YmeOhS.cjs');
6
+ var logger = require('./logger-Ockf1cjN.cjs');
7
+ var time = require('./time-uSKpEhew.cjs');
8
8
  var contentLogMetadata = require('./contentLogMetadata-ZSFk_NjQ.cjs');
9
- var _package = require('./package-C1XvUQFy.cjs');
9
+ var _package = require('./package-DfoyJe1O.cjs');
10
10
 
11
11
  function acpImageBlocks(attachments, supportsImages) {
12
12
  return attachments.filter((file) => ["image/jpeg", "image/png", "image/gif", "image/webp"].includes(file.mimeType)).map((file) => {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-JTcJU-uL.cjs');
3
+ var logger = require('./logger-Ockf1cjN.cjs');
4
4
 
5
5
  class BasePermissionHandler {
6
6
  pendingRequests = /* @__PURE__ */ new Map();
@@ -1,4 +1,4 @@
1
- import { l as logger } from './logger-BpQcwNnt.mjs';
1
+ import { l as logger } from './logger-C6zzu57a.mjs';
2
2
 
3
3
  class BasePermissionHandler {
4
4
  pendingRequests = /* @__PURE__ */ new Map();
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { l as logger } from './logger-BpQcwNnt.mjs';
2
+ import { l as logger } from './logger-C6zzu57a.mjs';
3
3
 
4
4
  class BaseReasoningProcessor {
5
5
  accumulator = "";
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var node_crypto = require('node:crypto');
4
- var logger = require('./logger-JTcJU-uL.cjs');
4
+ var logger = require('./logger-Ockf1cjN.cjs');
5
5
 
6
6
  class BaseReasoningProcessor {
7
7
  accumulator = "";
@@ -1,13 +1,13 @@
1
1
  import chalk from 'chalk';
2
2
  import { homedir } from 'node:os';
3
- import { readSettings, updateSettings } from './persistence-B9LmhAE2.mjs';
3
+ import { r as readSettings, u as updateSettings } from './persistence-B6M_W5iC.mjs';
4
4
  import 'node:fs';
5
- import './logger-BpQcwNnt.mjs';
5
+ import './logger-C6zzu57a.mjs';
6
6
  import { d as describeAgentHome, p as probeLoginShellEnv, r as resolveAgentHomes, e as expandHomePath, A as AGENT_HOME_ENV_NAMES } from './loginShellEnv-Dw8M7tkI.mjs';
7
7
  import 'node:fs/promises';
8
- import './configuration-D2v3puap.mjs';
8
+ import './configuration-BZo1JWNV.mjs';
9
9
  import 'node:path';
10
- import './package-BqwrPxL0.mjs';
10
+ import './package-5xAdq5fu.mjs';
11
11
  import 'zod';
12
12
  import './authRelay-DSAvg1uv.mjs';
13
13
  import 'node:crypto';
@@ -2,14 +2,14 @@
2
2
 
3
3
  var chalk = require('chalk');
4
4
  var os = require('node:os');
5
- var persistence = require('./persistence-2Xp_o6x6.cjs');
5
+ var persistence = require('./persistence-B5oT6oQ9.cjs');
6
6
  require('node:fs');
7
- require('./logger-JTcJU-uL.cjs');
7
+ require('./logger-Ockf1cjN.cjs');
8
8
  var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
9
9
  require('node:fs/promises');
10
- require('./configuration-B0cb3xA3.cjs');
10
+ require('./configuration-DeuGrnej.cjs');
11
11
  require('node:path');
12
- require('./package-C1XvUQFy.cjs');
12
+ require('./package-DfoyJe1O.cjs');
13
13
  require('zod');
14
14
  require('./authRelay-BdYkC1Po.cjs');
15
15
  require('node:crypto');
@@ -1,22 +1,22 @@
1
1
  'use strict';
2
2
 
3
3
  var axios = require('axios');
4
- var logger = require('./logger-JTcJU-uL.cjs');
5
- var lidState = require('./lidState-D8BmnJV1.cjs');
4
+ var logger = require('./logger-Ockf1cjN.cjs');
5
+ var lidState = require('./lidState-2IT0tas7.cjs');
6
6
  var node_events = require('node:events');
7
7
  var socket_ioClient = require('socket.io-client');
8
- var attachmentLimits = require('./attachmentLimits-BfgKV5iE.cjs');
8
+ var attachmentLimits = require('./attachmentLimits-BEYEEBm8.cjs');
9
9
  var authRelay = require('./authRelay-BdYkC1Po.cjs');
10
10
  var limits = require('./limits-C-a7gr04.cjs');
11
- var time = require('./time-T0YmeOhS.cjs');
12
- var configuration = require('./configuration-B0cb3xA3.cjs');
11
+ var time = require('./time-uSKpEhew.cjs');
12
+ var configuration = require('./configuration-DeuGrnej.cjs');
13
13
  var node_crypto = require('node:crypto');
14
14
  var index = require('./index-C9hI8a10.cjs');
15
- var registerCommonHandlers = require('./registerCommonHandlers-Aha_KfM3.cjs');
15
+ var registerCommonHandlers = require('./registerCommonHandlers-COSTo15G.cjs');
16
16
  var cuid2 = require('@paralleldrive/cuid2');
17
- var sync = require('./sync-x_lI_3j_.cjs');
17
+ var sync = require('./sync-BS9_zSQ2.cjs');
18
18
  var backgroundTaskActivity = require('./backgroundTaskActivity-CBvUdj39.cjs');
19
- var controlClient = require('./controlClient-CmnHGcyl.cjs');
19
+ var controlClient = require('./controlClient-IDE3se23.cjs');
20
20
  var contentLogMetadata = require('./contentLogMetadata-ZSFk_NjQ.cjs');
21
21
  var chalk = require('chalk');
22
22
 
@@ -1590,6 +1590,14 @@ class ApiSessionClient extends node_events.EventEmitter {
1590
1590
  }
1591
1591
  }
1592
1592
  routeIncomingMessage(message, sourceLocalId) {
1593
+ if (this.inboundFrozen) {
1594
+ logger.logger.debug(`[API] Hibernating: holding inbound ${sourceLocalId ?? "(no localId)"}`);
1595
+ this.frozenInbound.push({ message, sourceLocalId });
1596
+ this.inboundRoutedDuringCommit = true;
1597
+ return;
1598
+ }
1599
+ this.inboundRoutedDuringCommit = true;
1600
+ this.noteActivity();
1593
1601
  if (sourceLocalId) this.promptQueueDrain?.onInbound(sourceLocalId);
1594
1602
  const messageWithSource = sourceLocalId && typeof message === "object" && message !== null ? { ...message, localKey: message.localKey ?? sourceLocalId } : message;
1595
1603
  const userResult = attachmentLimits.UserMessageSchema.safeParse(messageWithSource);
@@ -1835,6 +1843,7 @@ class ApiSessionClient extends node_events.EventEmitter {
1835
1843
  }
1836
1844
  }
1837
1845
  enqueueMessage(content, invalidate = true, localId) {
1846
+ this.noteActivity();
1838
1847
  const encrypted = authRelay.encodeBase64(authRelay.encrypt(this.encryptionKey, this.encryptionVariant, content));
1839
1848
  this.pendingOutbox.push({
1840
1849
  content: encrypted,
@@ -2011,6 +2020,52 @@ class ApiSessionClient extends node_events.EventEmitter {
2011
2020
  };
2012
2021
  this.enqueueMessage(content);
2013
2022
  }
2023
+ // ── B-587 hibernation support ──────────────────────────────────────────
2024
+ /** Last user/agent activity this wrapper saw (spec §2.1). */
2025
+ lastActivity = Date.now();
2026
+ inboundFrozen = false;
2027
+ frozenInbound = [];
2028
+ heartbeatsMuted = false;
2029
+ lastHeartbeat = 0;
2030
+ get lastHeartbeatAt() {
2031
+ return this.lastHeartbeat;
2032
+ }
2033
+ muteHeartbeats() {
2034
+ this.heartbeatsMuted = true;
2035
+ }
2036
+ unmuteHeartbeats() {
2037
+ this.heartbeatsMuted = false;
2038
+ }
2039
+ inboundRoutedDuringCommit = false;
2040
+ noteActivity(now = Date.now()) {
2041
+ if (now > this.lastActivity) this.lastActivity = now;
2042
+ }
2043
+ get lastActivityAt() {
2044
+ return this.lastActivity;
2045
+ }
2046
+ /** The message cursor (highest seq this wrapper has seen). */
2047
+ get messageCursor() {
2048
+ return this.lastSeq;
2049
+ }
2050
+ /** Start watching for inbound routed during the hibernation commit window. */
2051
+ beginHibernationCommit() {
2052
+ this.inboundRoutedDuringCommit = false;
2053
+ }
2054
+ /** Was any inbound message routed since beginHibernationCommit()? */
2055
+ inboundRoutedSinceCommit() {
2056
+ return this.inboundRoutedDuringCommit;
2057
+ }
2058
+ /** Stop routing inbound messages; the next wrapper replays them (spec §3/§4). */
2059
+ freezeInbound() {
2060
+ this.inboundFrozen = true;
2061
+ }
2062
+ /** An aborted hibernation: route whatever arrived while frozen, in order. */
2063
+ unfreezeInbound() {
2064
+ this.inboundFrozen = false;
2065
+ const held = this.frozenInbound;
2066
+ this.frozenInbound = [];
2067
+ for (const item of held) this.routeIncomingMessage(item.message, item.sourceLocalId);
2068
+ }
2014
2069
  /**
2015
2070
  * Send a ping message to keep the connection alive
2016
2071
  */
@@ -2029,11 +2084,14 @@ class ApiSessionClient extends node_events.EventEmitter {
2029
2084
  }));
2030
2085
  });
2031
2086
  keepAlive(thinking, mode, backgroundTasks) {
2087
+ if (this.heartbeatsMuted) return;
2088
+ this.lastHeartbeat = Date.now();
2032
2089
  if (process.env.DEBUG) {
2033
2090
  logger.logger.debug(`[API] Sending keep alive message: ${thinking}`);
2034
2091
  }
2035
2092
  this.turnReporter.observe(thinking);
2036
2093
  if (backgroundTasks) this.backgroundTaskReporter.observe(backgroundTasks);
2094
+ if (thinking || (backgroundTasks?.length ?? 0) > 0) this.noteActivity();
2037
2095
  this.socket.volatile.emit("session-alive", {
2038
2096
  sid: this.sessionId,
2039
2097
  time: Date.now(),
@@ -2226,7 +2284,26 @@ class ApiSessionClient extends node_events.EventEmitter {
2226
2284
  });
2227
2285
  }
2228
2286
  updateMetadata(handler) {
2229
- this.metadataLock.inLock(async () => {
2287
+ void this.writeMetadata(handler);
2288
+ }
2289
+ /**
2290
+ * B-587: the same write, awaitable with a ceiling — the hibernation stamp
2291
+ * must land before `session-end`. Resolves false on timeout (the write
2292
+ * itself keeps retrying in the background, exactly like updateMetadata).
2293
+ */
2294
+ async updateMetadataAndWait(handler, timeoutMs = 1e4) {
2295
+ let timer;
2296
+ const timeout = new Promise((resolve) => {
2297
+ timer = setTimeout(() => resolve(false), timeoutMs);
2298
+ });
2299
+ try {
2300
+ return await Promise.race([this.writeMetadata(handler).then(() => true), timeout]);
2301
+ } finally {
2302
+ if (timer) clearTimeout(timer);
2303
+ }
2304
+ }
2305
+ writeMetadata(handler) {
2306
+ return this.metadataLock.inLock(async () => {
2230
2307
  let rateRefusals = 0;
2231
2308
  await time.backoff(async () => {
2232
2309
  let updated = handler(this.metadata);
@@ -2272,6 +2349,7 @@ class ApiSessionClient extends node_events.EventEmitter {
2272
2349
  this.agentState = answer.agentState ? authRelay.decrypt(this.encryptionKey, this.encryptionVariant, authRelay.decodeBase64(answer.agentState)) : null;
2273
2350
  this.agentStateVersion = answer.version;
2274
2351
  rateRefusals = 0;
2352
+ if (Object.keys(this.agentState?.requests ?? {}).length > 0) this.noteActivity();
2275
2353
  logger.logger.debug("Agent state updated", this.agentState);
2276
2354
  } else if (answer.result === "version-mismatch") {
2277
2355
  if (answer.version > this.agentStateVersion) {
@@ -3088,7 +3166,7 @@ class ApiClient {
3088
3166
  return new ApiSessionClient(this.credential.token, session, opts);
3089
3167
  }
3090
3168
  async machineSyncClient(machine) {
3091
- const { ApiMachineClient } = await Promise.resolve().then(function () { return require('./apiMachine-DeoQ8QbZ.cjs'); });
3169
+ const { ApiMachineClient } = await Promise.resolve().then(function () { return require('./apiMachine-BTCUUGC6.cjs'); });
3092
3170
  return new ApiMachineClient(this.credential.token, machine);
3093
3171
  }
3094
3172
  push() {
@@ -1,20 +1,20 @@
1
1
  import axios from 'axios';
2
- import { l as logger, r as redactLogValue } from './logger-BpQcwNnt.mjs';
3
- import { R as RpcHandlerManager, a as answerSocketRequest, c as connectGuarded, s as socketConnectGuard, d as describeSocketAckDrop, b as safeAck, i as isRateQuotaCode, p as pauseForRateQuota, e as shouldReconnect } from './lidState-BfximpjX.mjs';
2
+ import { l as logger, r as redactLogValue } from './logger-C6zzu57a.mjs';
3
+ import { R as RpcHandlerManager, a as answerSocketRequest, c as connectGuarded, s as socketConnectGuard, d as describeSocketAckDrop, b as safeAck, i as isRateQuotaCode, p as pauseForRateQuota, e as shouldReconnect } from './lidState-CJ3XkJRn.mjs';
4
4
  import { EventEmitter } from 'node:events';
5
5
  import { io } from 'socket.io-client';
6
- import { A as AsyncLock, a as MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES, U as UserMessageSchema, F as FileEventMessageSchema } from './attachmentLimits-C1PCCM79.mjs';
6
+ import { A as AsyncLock, a as MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES, U as UserMessageSchema, F as FileEventMessageSchema } from './attachmentLimits-CxG3T18E.mjs';
7
7
  import { h as decrypt, d as decodeBase64, i as decryptBlob, e as encodeBase64, g as encrypt, l as libsodiumEncryptForPublicKey, j as libsodiumPublicKeyFromSecretKey, k as getRandomBytes } from './authRelay-DSAvg1uv.mjs';
8
8
  import { p as prepareClipboardText, d as prepareClipboardHistoryText } from './limits-DIo7rEBR.mjs';
9
- import { b as backoff, d as delay, e as exponentialBackoffDelay } from './time-CfDKj6Bx.mjs';
10
- import { c as configuration } from './configuration-D2v3puap.mjs';
9
+ import { b as backoff, d as delay, e as exponentialBackoffDelay } from './time-CN0jVVir.mjs';
10
+ import { c as configuration } from './configuration-BZo1JWNV.mjs';
11
11
  import { createHmac, randomUUID } from 'node:crypto';
12
12
  import { c as createEnvelope, s as streamKeyOf, R as ReleaseDrainNoticeSchema, q as RelayAssignmentResponseSchema } from './index-B0HEEYGh.mjs';
13
- import { r as registerCommonHandlers } from './registerCommonHandlers-DdfGsFbM.mjs';
13
+ import { r as registerCommonHandlers } from './registerCommonHandlers-BLHKlk5Z.mjs';
14
14
  import { createId } from '@paralleldrive/cuid2';
15
- import { I as InvalidateSync } from './sync-BLpH13Kb.mjs';
15
+ import { I as InvalidateSync } from './sync-CHOB3Org.mjs';
16
16
  import { B as BackgroundTaskReporter } from './backgroundTaskActivity-8PdPxrvy.mjs';
17
- import { j as notifyDaemonTurnEvent, k as notifyDaemonBackgroundTasks } from './controlClient-BMUJfUeF.mjs';
17
+ import { k as notifyDaemonTurnEvent, m as notifyDaemonBackgroundTasks } from './controlClient-CXD-Xdny.mjs';
18
18
  import { c as contentLogMetadata } from './contentLogMetadata-BlWI0egu.mjs';
19
19
  import chalk from 'chalk';
20
20
 
@@ -1588,6 +1588,14 @@ class ApiSessionClient extends EventEmitter {
1588
1588
  }
1589
1589
  }
1590
1590
  routeIncomingMessage(message, sourceLocalId) {
1591
+ if (this.inboundFrozen) {
1592
+ logger.debug(`[API] Hibernating: holding inbound ${sourceLocalId ?? "(no localId)"}`);
1593
+ this.frozenInbound.push({ message, sourceLocalId });
1594
+ this.inboundRoutedDuringCommit = true;
1595
+ return;
1596
+ }
1597
+ this.inboundRoutedDuringCommit = true;
1598
+ this.noteActivity();
1591
1599
  if (sourceLocalId) this.promptQueueDrain?.onInbound(sourceLocalId);
1592
1600
  const messageWithSource = sourceLocalId && typeof message === "object" && message !== null ? { ...message, localKey: message.localKey ?? sourceLocalId } : message;
1593
1601
  const userResult = UserMessageSchema.safeParse(messageWithSource);
@@ -1833,6 +1841,7 @@ class ApiSessionClient extends EventEmitter {
1833
1841
  }
1834
1842
  }
1835
1843
  enqueueMessage(content, invalidate = true, localId) {
1844
+ this.noteActivity();
1836
1845
  const encrypted = encodeBase64(encrypt(this.encryptionKey, this.encryptionVariant, content));
1837
1846
  this.pendingOutbox.push({
1838
1847
  content: encrypted,
@@ -2009,6 +2018,52 @@ class ApiSessionClient extends EventEmitter {
2009
2018
  };
2010
2019
  this.enqueueMessage(content);
2011
2020
  }
2021
+ // ── B-587 hibernation support ──────────────────────────────────────────
2022
+ /** Last user/agent activity this wrapper saw (spec §2.1). */
2023
+ lastActivity = Date.now();
2024
+ inboundFrozen = false;
2025
+ frozenInbound = [];
2026
+ heartbeatsMuted = false;
2027
+ lastHeartbeat = 0;
2028
+ get lastHeartbeatAt() {
2029
+ return this.lastHeartbeat;
2030
+ }
2031
+ muteHeartbeats() {
2032
+ this.heartbeatsMuted = true;
2033
+ }
2034
+ unmuteHeartbeats() {
2035
+ this.heartbeatsMuted = false;
2036
+ }
2037
+ inboundRoutedDuringCommit = false;
2038
+ noteActivity(now = Date.now()) {
2039
+ if (now > this.lastActivity) this.lastActivity = now;
2040
+ }
2041
+ get lastActivityAt() {
2042
+ return this.lastActivity;
2043
+ }
2044
+ /** The message cursor (highest seq this wrapper has seen). */
2045
+ get messageCursor() {
2046
+ return this.lastSeq;
2047
+ }
2048
+ /** Start watching for inbound routed during the hibernation commit window. */
2049
+ beginHibernationCommit() {
2050
+ this.inboundRoutedDuringCommit = false;
2051
+ }
2052
+ /** Was any inbound message routed since beginHibernationCommit()? */
2053
+ inboundRoutedSinceCommit() {
2054
+ return this.inboundRoutedDuringCommit;
2055
+ }
2056
+ /** Stop routing inbound messages; the next wrapper replays them (spec §3/§4). */
2057
+ freezeInbound() {
2058
+ this.inboundFrozen = true;
2059
+ }
2060
+ /** An aborted hibernation: route whatever arrived while frozen, in order. */
2061
+ unfreezeInbound() {
2062
+ this.inboundFrozen = false;
2063
+ const held = this.frozenInbound;
2064
+ this.frozenInbound = [];
2065
+ for (const item of held) this.routeIncomingMessage(item.message, item.sourceLocalId);
2066
+ }
2012
2067
  /**
2013
2068
  * Send a ping message to keep the connection alive
2014
2069
  */
@@ -2027,11 +2082,14 @@ class ApiSessionClient extends EventEmitter {
2027
2082
  }));
2028
2083
  });
2029
2084
  keepAlive(thinking, mode, backgroundTasks) {
2085
+ if (this.heartbeatsMuted) return;
2086
+ this.lastHeartbeat = Date.now();
2030
2087
  if (process.env.DEBUG) {
2031
2088
  logger.debug(`[API] Sending keep alive message: ${thinking}`);
2032
2089
  }
2033
2090
  this.turnReporter.observe(thinking);
2034
2091
  if (backgroundTasks) this.backgroundTaskReporter.observe(backgroundTasks);
2092
+ if (thinking || (backgroundTasks?.length ?? 0) > 0) this.noteActivity();
2035
2093
  this.socket.volatile.emit("session-alive", {
2036
2094
  sid: this.sessionId,
2037
2095
  time: Date.now(),
@@ -2224,7 +2282,26 @@ class ApiSessionClient extends EventEmitter {
2224
2282
  });
2225
2283
  }
2226
2284
  updateMetadata(handler) {
2227
- this.metadataLock.inLock(async () => {
2285
+ void this.writeMetadata(handler);
2286
+ }
2287
+ /**
2288
+ * B-587: the same write, awaitable with a ceiling — the hibernation stamp
2289
+ * must land before `session-end`. Resolves false on timeout (the write
2290
+ * itself keeps retrying in the background, exactly like updateMetadata).
2291
+ */
2292
+ async updateMetadataAndWait(handler, timeoutMs = 1e4) {
2293
+ let timer;
2294
+ const timeout = new Promise((resolve) => {
2295
+ timer = setTimeout(() => resolve(false), timeoutMs);
2296
+ });
2297
+ try {
2298
+ return await Promise.race([this.writeMetadata(handler).then(() => true), timeout]);
2299
+ } finally {
2300
+ if (timer) clearTimeout(timer);
2301
+ }
2302
+ }
2303
+ writeMetadata(handler) {
2304
+ return this.metadataLock.inLock(async () => {
2228
2305
  let rateRefusals = 0;
2229
2306
  await backoff(async () => {
2230
2307
  let updated = handler(this.metadata);
@@ -2270,6 +2347,7 @@ class ApiSessionClient extends EventEmitter {
2270
2347
  this.agentState = answer.agentState ? decrypt(this.encryptionKey, this.encryptionVariant, decodeBase64(answer.agentState)) : null;
2271
2348
  this.agentStateVersion = answer.version;
2272
2349
  rateRefusals = 0;
2350
+ if (Object.keys(this.agentState?.requests ?? {}).length > 0) this.noteActivity();
2273
2351
  logger.debug("Agent state updated", this.agentState);
2274
2352
  } else if (answer.result === "version-mismatch") {
2275
2353
  if (answer.version > this.agentStateVersion) {
@@ -3086,7 +3164,7 @@ class ApiClient {
3086
3164
  return new ApiSessionClient(this.credential.token, session, opts);
3087
3165
  }
3088
3166
  async machineSyncClient(machine) {
3089
- const { ApiMachineClient } = await import('./apiMachine-B6ySCFe0.mjs');
3167
+ const { ApiMachineClient } = await import('./apiMachine-BauSXWNd.mjs');
3090
3168
  return new ApiMachineClient(this.credential.token, machine);
3091
3169
  }
3092
3170
  push() {
@@ -1,43 +1,43 @@
1
1
  'use strict';
2
2
 
3
3
  var socket_ioClient = require('socket.io-client');
4
- var logger = require('./logger-JTcJU-uL.cjs');
5
- var lidState = require('./lidState-D8BmnJV1.cjs');
6
- var mirrorProtocol = require('./mirrorProtocol-BEGk2--0.cjs');
7
- var configuration = require('./configuration-B0cb3xA3.cjs');
4
+ var logger = require('./logger-Ockf1cjN.cjs');
5
+ var lidState = require('./lidState-2IT0tas7.cjs');
6
+ var mirrorProtocol = require('./mirrorProtocol-CdPhEBSh.cjs');
7
+ var configuration = require('./configuration-DeuGrnej.cjs');
8
8
  var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
9
- var registerCommonHandlers = require('./registerCommonHandlers-Aha_KfM3.cjs');
9
+ var registerCommonHandlers = require('./registerCommonHandlers-COSTo15G.cjs');
10
10
  var promises = require('node:fs/promises');
11
11
  var path = require('node:path');
12
12
  var os = require('node:os');
13
13
  var node_child_process = require('node:child_process');
14
- var persistence = require('./persistence-2Xp_o6x6.cjs');
14
+ var persistence = require('./persistence-B5oT6oQ9.cjs');
15
15
  var authRelay = require('./authRelay-BdYkC1Po.cjs');
16
16
  var limits = require('./limits-C-a7gr04.cjs');
17
- var time = require('./time-T0YmeOhS.cjs');
17
+ var time = require('./time-uSKpEhew.cjs');
18
18
  var pty = require('node-pty');
19
19
  var terminals = require('./terminals-B_bfC9c2.cjs');
20
20
  var tmuxSocket = require('./tmuxSocket-D-Xt6Vn-.cjs');
21
- var index = require('./index-DEKIgZUo.cjs');
21
+ var index = require('./index-BQU1sS9K.cjs');
22
22
  var node_crypto = require('node:crypto');
23
23
  var node_fs = require('node:fs');
24
24
  var axios = require('axios');
25
25
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
26
26
  var ids = require('./ids-B6ZC0HGt.cjs');
27
27
  var detectCLI = require('./detectCLI-DR9ZaN6B.cjs');
28
- var localHappyAgentAuth = require('./localHappyAgentAuth-d7B6S_o7.cjs');
28
+ var localHappyAgentAuth = require('./localHappyAgentAuth-CPMh61Su.cjs');
29
29
  var path$1 = require('./path-B7zW-WwE.cjs');
30
30
  var oneShotPrompts = require('./oneShotPrompts-CL0dip9C.cjs');
31
- var claudeSessionFork = require('./claudeSessionFork-Cs0I3eGI.cjs');
32
- var codexAppServerClient = require('./codexAppServerClient-BTjn2ZCZ.cjs');
31
+ var claudeSessionFork = require('./claudeSessionFork-Cq9FBfjD.cjs');
32
+ var codexAppServerClient = require('./codexAppServerClient-pllsN90-.cjs');
33
33
  var index$1 = require('./index-C9hI8a10.cjs');
34
34
  var codexThreadFork = require('./codexThreadFork-DNekT4nQ.cjs');
35
- var rateLimitWindows = require('./rateLimitWindows-C2Jk3Ih7.cjs');
35
+ var rateLimitWindows = require('./rateLimitWindows-C2-Ky86q.cjs');
36
36
  require('chalk');
37
37
  require('node:util');
38
38
  require('os');
39
39
  require('child_process');
40
- require('./package-C1XvUQFy.cjs');
40
+ require('./package-DfoyJe1O.cjs');
41
41
  require('util');
42
42
  require('fs/promises');
43
43
  require('crypto');
@@ -51,7 +51,7 @@ require('url');
51
51
  require('fs');
52
52
  require('node:readline');
53
53
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
54
- require('./manager-Cly8xVIR.cjs');
54
+ require('./manager-HrEj442o.cjs');
55
55
  require('@anthropic-ai/sandbox-runtime');
56
56
  require('@paralleldrive/cuid2');
57
57
 
@@ -10462,6 +10462,9 @@ class ApiMachineClient {
10462
10462
  registerCommonHandlers.registerCommonHandlers(this.rpcHandlerManager, process.cwd());
10463
10463
  registerFsHandlers(this.rpcHandlerManager);
10464
10464
  registerTodoHandlers(this.rpcHandlerManager);
10465
+ if (typeof configuration.configuration.happyHomeDir === "string") {
10466
+ mirrorProtocol.registerWorktreeHandlers(this.rpcHandlerManager, mirrorProtocol.configureWorktreeService({ home: configuration.configuration.happyHomeDir, machineId: this.machine.id, log: (msg, err) => logger.logger.debug(msg, err) }));
10467
+ }
10465
10468
  this.wireAutoRestoreReport();
10466
10469
  }
10467
10470
  socket;
@@ -10483,6 +10486,8 @@ class ApiMachineClient {
10483
10486
  cliUpdateState = null;
10484
10487
  cliUpdatePushChain = Promise.resolve();
10485
10488
  claudeAuthState = null;
10489
+ /** B-587: the machine's hibernation threshold, published as a capability. */
10490
+ agentHibernationIdleMs = null;
10486
10491
  rateLimitPushChain = Promise.resolve();
10487
10492
  rateLimitPublisher = new RateLimitPublisher({
10488
10493
  getCurrent: () => this.machine.daemonState?.rateLimits,
@@ -10647,6 +10652,34 @@ class ApiMachineClient {
10647
10652
  this.cliUpdatePushChain = attempt.then(() => void 0);
10648
10653
  return attempt;
10649
10654
  }
10655
+ /**
10656
+ * B-587: `agent-hibernation-set {idleMs}` (0 = off) and the
10657
+ * `daemonState.agentHibernation` capability. Call before connect().
10658
+ */
10659
+ setAgentHibernationHandlers(initialIdleMs, set) {
10660
+ this.agentHibernationIdleMs = initialIdleMs;
10661
+ this.rpcHandlerManager.registerHandler("agent-hibernation-set", async (params) => {
10662
+ const raw = params?.idleMs;
10663
+ if (typeof raw !== "number" || !Number.isFinite(raw) || raw < 0) return { error: "invalid-idle-ms" };
10664
+ const idleMs = await set(raw);
10665
+ this.agentHibernationIdleMs = idleMs;
10666
+ await this.publishAgentHibernation();
10667
+ return { agentHibernation: { idleMs } };
10668
+ });
10669
+ }
10670
+ publishAgentHibernation() {
10671
+ const idleMs = this.agentHibernationIdleMs;
10672
+ if (idleMs === null || !this.socket?.connected) return Promise.resolve();
10673
+ const attempt = this.cliUpdatePushChain.then(() => this.updateDaemonState((current) => ({
10674
+ ...current ?? {},
10675
+ status: current?.status ?? "running",
10676
+ agentHibernation: { idleMs, rpcAvailable: true, detectedAt: Date.now() }
10677
+ }))).catch((error) => {
10678
+ logger.logger.debug("[API MACHINE] Failed to publish agent hibernation:", error);
10679
+ });
10680
+ this.cliUpdatePushChain = attempt.then(() => void 0);
10681
+ return attempt;
10682
+ }
10650
10683
  /** B-276 machine RPCs. Responses always carry `claudeAuth` so the web can refresh in place. */
10651
10684
  setClaudeAuthHandlers(handlers) {
10652
10685
  this.rpcHandlerManager.registerHandler("claude-auth-probe", async () => {
@@ -11366,7 +11399,9 @@ class ApiMachineClient {
11366
11399
  closedTerminals: this.webTerminal.getClosedTerminals(),
11367
11400
  // B-276: re-ship the last preflight so a reconnect never
11368
11401
  // leaves a stale-pid value visible longer than needed.
11369
- ...this.claudeAuthState ? { claudeAuth: this.claudeAuthState } : {}
11402
+ ...this.claudeAuthState ? { claudeAuth: this.claudeAuthState } : {},
11403
+ // B-587 capability + setting (same restamp discipline).
11404
+ ...this.agentHibernationIdleMs !== null ? { agentHibernation: { idleMs: this.agentHibernationIdleMs, rpcAvailable: true, detectedAt: now } } : {}
11370
11405
  };
11371
11406
  });
11372
11407
  this.webTerminal.startListTracking((terminals) => this.pushTerminalList(terminals));