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,83 +1,83 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-JTcJU-uL.cjs');
4
- var controlClient = require('./controlClient-CmnHGcyl.cjs');
3
+ var logger = require('./logger-Ockf1cjN.cjs');
4
+ var controlClient = require('./controlClient-IDE3se23.cjs');
5
5
  var backgroundTaskActivity = require('./backgroundTaskActivity-CBvUdj39.cjs');
6
6
  var node_crypto = require('node:crypto');
7
7
  var messageBuffer = require('./messageBuffer-fJMH6uY8.cjs');
8
8
  var index = require('./index-D3kI0hDR.cjs');
9
9
  var claudeAgentSdk = require('@anthropic-ai/claude-agent-sdk');
10
10
  var permissionMode = require('./permissionMode-CrV-XuMs.cjs');
11
- var systemPrompt = require('./systemPrompt-4erwILTB.cjs');
11
+ var systemPrompt = require('./systemPrompt-D2ICcIsu.cjs');
12
12
  var path$1 = require('node:path');
13
- var specialCommands = require('./specialCommands-DouFaJ_0.cjs');
13
+ var specialCommands = require('./specialCommands-CmrwEh71.cjs');
14
14
  require('axios');
15
15
  require('node:events');
16
16
  require('socket.io-client');
17
- var attachmentLimits = require('./attachmentLimits-BfgKV5iE.cjs');
17
+ var attachmentLimits = require('./attachmentLimits-BEYEEBm8.cjs');
18
18
  require('tweetnacl');
19
- var configuration = require('./configuration-B0cb3xA3.cjs');
19
+ var configuration = require('./configuration-DeuGrnej.cjs');
20
20
  require('./index-C9hI8a10.cjs');
21
- require('./registerCommonHandlers-Aha_KfM3.cjs');
21
+ require('./registerCommonHandlers-COSTo15G.cjs');
22
22
  require('os');
23
23
  require('child_process');
24
24
  require('@paralleldrive/cuid2');
25
- require('./persistence-2Xp_o6x6.cjs');
25
+ require('./persistence-B5oT6oQ9.cjs');
26
26
  var contentLogMetadata = require('./contentLogMetadata-ZSFk_NjQ.cjs');
27
27
  require('chalk');
28
28
  var types = require('./types-CRS-srZK.cjs');
29
29
  var path = require('./path-B7zW-WwE.cjs');
30
30
  var fs = require('fs/promises');
31
- var time = require('./time-T0YmeOhS.cjs');
31
+ var time = require('./time-uSKpEhew.cjs');
32
32
  var node_fs = require('node:fs');
33
- var deterministicJson = require('./deterministicJson-Dp3TVyap.cjs');
34
- var sessionScanner = require('./sessionScanner-Cu1yKlj4.cjs');
33
+ var deterministicJson = require('./deterministicJson-BqQKrUzw.cjs');
34
+ var sessionScanner = require('./sessionScanner-Dth3iDCi.cjs');
35
35
  var node_child_process = require('node:child_process');
36
36
  var streamRelay = require('./streamRelay-Ce9sgcOV.cjs');
37
- var attachmentContent = require('./attachmentContent-DPWxHgX4.cjs');
37
+ var attachmentContent = require('./attachmentContent-BCK0AxDS.cjs');
38
38
  var promises = require('node:fs/promises');
39
- var claudeSessionFork = require('./claudeSessionFork-Cs0I3eGI.cjs');
40
- var registerKillSessionHandler = require('./registerKillSessionHandler-CjitOpUA.cjs');
41
- var doctor = require('./doctor-CkJmdPbi.cjs');
39
+ var claudeSessionFork = require('./claudeSessionFork-Cq9FBfjD.cjs');
40
+ var registerKillSessionHandler = require('./registerKillSessionHandler-DDZISNzu.cjs');
41
+ var doctor = require('./doctor-D61ncaeL.cjs');
42
42
  var node_http = require('node:http');
43
43
  var editPaths = require('./editPaths-Bqp4OFPw.cjs');
44
44
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
45
- var titleGenerator = require('./titleGenerator-CoMxqKfP.cjs');
45
+ var titleGenerator = require('./titleGenerator-CLIXjn9b.cjs');
46
46
  var oneShotPrompts = require('./oneShotPrompts-CL0dip9C.cjs');
47
- var reportProgressTool = require('./reportProgressTool-B-Rcy0s3.cjs');
47
+ var reportProgressTool = require('./reportProgressTool-C5vDEv9Y.cjs');
48
48
  require('node:util');
49
49
  require('./smallFastModel-D_uxGMo3.cjs');
50
50
  require('./trimIdent-4gvk9Wk6.cjs');
51
51
  require('node:os');
52
52
  require('./agentGuidance-BtBx2xxE.cjs');
53
- require('./rateLimitWindows-C2Jk3Ih7.cjs');
53
+ require('./rateLimitWindows-C2-Ky86q.cjs');
54
54
  require('zod');
55
- require('./package-C1XvUQFy.cjs');
55
+ require('./package-DfoyJe1O.cjs');
56
56
  require('util');
57
57
  require('crypto');
58
58
  require('path');
59
59
  require('cross-spawn');
60
60
  require('./authRelay-BdYkC1Po.cjs');
61
- require('./client-JISJx2f-.cjs');
62
- require('./context-BFUpYT39.cjs');
63
- require('./sessionOps-DOyy4gkY.cjs');
61
+ require('./client-DZpkmS5l.cjs');
62
+ require('./context-BhvZtm3j.cjs');
63
+ require('./sessionOps-BAQ_80Rg.cjs');
64
64
  require('./resources-JDPugcDq.cjs');
65
- require('./tools-IJ0TAcJs.cjs');
66
- require('./peerTools-DPvbcs8V.cjs');
65
+ require('./tools-DuWKlc0k.cjs');
66
+ require('./peerTools-BEnBvEcU.cjs');
67
67
  require('./ids-B6ZC0HGt.cjs');
68
- require('./remoteSessionClient-BwI8rpQw.cjs');
68
+ require('./remoteSessionClient-B2pOMZRw.cjs');
69
69
  require('@modelcontextprotocol/sdk/server/mcp.js');
70
70
  require('@modelcontextprotocol/sdk/server/streamableHttp.js');
71
71
  require('./limits-C-a7gr04.cjs');
72
- require('./downloadTarget-CiQqRIc-.cjs');
72
+ require('./downloadTarget-Dist9t2e.cjs');
73
73
  require('./terminals-B_bfC9c2.cjs');
74
74
  require('./terminalTitleSuggest-DhvRFX3H.cjs');
75
75
  require('./tmuxSocket-D-Xt6Vn-.cjs');
76
- require('./bootstrap-BpXIc2wn.cjs');
76
+ require('./bootstrap-DSX64t23.cjs');
77
77
  require('./previewPath-B0rBdhy1.cjs');
78
- require('./sync-x_lI_3j_.cjs');
78
+ require('./sync-BS9_zSQ2.cjs');
79
79
  require('./transcriptCursor-DcXGLeSc.cjs');
80
- require('./startFileWatcher-DQbbypJv.cjs');
80
+ require('./startFileWatcher-S_Af_QPR.cjs');
81
81
  require('node:readline');
82
82
  require('./doctor-u46qYYKX.cjs');
83
83
  require('ps-list');
@@ -87,9 +87,44 @@ require('fs');
87
87
  require('./cliUpdate-DsKXPFYp.cjs');
88
88
  require('url');
89
89
  require('node:module');
90
- require('./client-DJ0kX_8M.cjs');
90
+ require('./client-EnFomCjx.cjs');
91
91
  require('./precheckCompat-CWOi5c9L.cjs');
92
92
 
93
+ const SCHEDULE_WAKEUP_GRACE_MS = 6e4;
94
+ function createScheduledWakeupTracker() {
95
+ const crons = /* @__PURE__ */ new Set();
96
+ const wakeups = /* @__PURE__ */ new Map();
97
+ let cronDeletes = 0;
98
+ function observe(message, now = Date.now()) {
99
+ const m = message;
100
+ const content = Array.isArray(m?.message?.content) ? m.message.content : [];
101
+ if (m?.type === "assistant") {
102
+ for (const block of content) {
103
+ if (block?.type !== "tool_use" || typeof block.id !== "string") continue;
104
+ if (block.name === "CronCreate") crons.add(block.id);
105
+ if (block.name === "CronDelete") cronDeletes += 1;
106
+ if (block.name === "ScheduleWakeup") {
107
+ const delay = Number(block.input?.delaySeconds);
108
+ wakeups.set(block.id, now + (Number.isFinite(delay) && delay > 0 ? delay * 1e3 : 0) + SCHEDULE_WAKEUP_GRACE_MS);
109
+ }
110
+ }
111
+ }
112
+ if (m?.type === "user") {
113
+ for (const block of content) {
114
+ if (block?.type === "tool_result" && block.is_error === true && typeof block.tool_use_id === "string") {
115
+ crons.delete(block.tool_use_id);
116
+ wakeups.delete(block.tool_use_id);
117
+ }
118
+ }
119
+ }
120
+ }
121
+ function pending(now = Date.now()) {
122
+ for (const [id, until] of wakeups) if (until <= now) wakeups.delete(id);
123
+ return Math.max(0, crons.size - cronDeletes) + wakeups.size;
124
+ }
125
+ return { observe, pending };
126
+ }
127
+
93
128
  class Session {
94
129
  path;
95
130
  logPath;
@@ -116,6 +151,8 @@ class Session {
116
151
  * for the Claude runner: an empty one says "nothing running", which is a
117
152
  * different statement from a runner that has no such notion (undefined). */
118
153
  backgroundTasks = [];
154
+ /** B-587 review P3-4: CronCreate / ScheduleWakeup pending in this Claude process. */
155
+ scheduledWakeups = createScheduledWakeupTracker();
119
156
  /**
120
157
  * Window after a user-initiated abort during which stray promise rejections
121
158
  * from tearing down the SDK query (MCP transports, in-flight tool calls,
@@ -3505,6 +3542,7 @@ async function claudeRemoteLauncher(session, onPermissionModeChange, onEffective
3505
3542
  runtimeControls.observe(message);
3506
3543
  backgroundTasks.observe(message);
3507
3544
  session.setBackgroundTasks(backgroundTasks.list());
3545
+ session.scheduledWakeups.observe(message);
3508
3546
  if (isRuntimeCheckpointReplay(message)) return;
3509
3547
  if (message.type === "user" && isClaudeInterruptSentinelContent(message.message.content)) {
3510
3548
  sdkToLogConverter.convert(message);
@@ -3925,7 +3963,7 @@ async function loop(opts) {
3925
3963
  logger.logger.debug(`[loop] Iteration with mode: ${mode}`);
3926
3964
  switch (mode) {
3927
3965
  case "local": {
3928
- const { claudeLocalLauncher } = await Promise.resolve().then(function () { return require('./claudeLocalLauncher-C41Y6Kp4.cjs'); });
3966
+ const { claudeLocalLauncher } = await Promise.resolve().then(function () { return require('./claudeLocalLauncher-B-ta13pT.cjs'); });
3929
3967
  const result = await claudeLocalLauncher(session);
3930
3968
  switch (result.type) {
3931
3969
  case "switch":
@@ -4100,6 +4138,12 @@ async function settleSessionOnExit(sessionId, intent, deps) {
4100
4138
  archiveReason: "User terminated"
4101
4139
  }));
4102
4140
  }
4141
+ if (intent === "hibernate" && deps.hibernation) {
4142
+ const stamp = deps.hibernation;
4143
+ const handler = (currentMetadata) => ({ ...currentMetadata, hibernation: stamp });
4144
+ const landed = deps.updateMetadataAndWait ? await deps.updateMetadataAndWait(handler) : (deps.updateMetadata(handler), false);
4145
+ if (!landed) deps.log?.("[START] hibernation stamp not confirmed before going offline");
4146
+ }
4103
4147
  deps.sendSessionDeath();
4104
4148
  try {
4105
4149
  if (intent === "archive") await deps.archiveSession(sessionId);
@@ -4110,8 +4154,14 @@ async function settleSessionOnExit(sessionId, intent, deps) {
4110
4154
  }
4111
4155
  class SessionExitGate {
4112
4156
  decided = null;
4157
+ hibernateCommitted = false;
4158
+ deferred = null;
4113
4159
  /** Returns the intent to act on, or null when cleanup already started. */
4114
4160
  claim(intent) {
4161
+ if (this.decided === "hibernate" && !this.hibernateCommitted && intent !== "hibernate") {
4162
+ if (this.deferred !== "archive") this.deferred = intent;
4163
+ return null;
4164
+ }
4115
4165
  if (this.decided !== null) return null;
4116
4166
  this.decided = intent;
4117
4167
  return intent;
@@ -4119,6 +4169,25 @@ class SessionExitGate {
4119
4169
  get current() {
4120
4170
  return this.decided;
4121
4171
  }
4172
+ /** B-587: an exit was requested while the hibernation was deciding. */
4173
+ get exitRequested() {
4174
+ return this.deferred !== null;
4175
+ }
4176
+ /** B-587: the hibernation passed its last check — no more deferral. */
4177
+ commitHibernate() {
4178
+ if (this.decided === "hibernate") this.hibernateCommitted = true;
4179
+ }
4180
+ /**
4181
+ * B-587: a hibernation that aborted hands the exit back. Returns the exit
4182
+ * deferred meanwhile (the caller must run it now), or null.
4183
+ */
4184
+ release(intent) {
4185
+ if (this.decided !== intent || intent === "hibernate" && this.hibernateCommitted) return null;
4186
+ this.decided = null;
4187
+ const deferred = this.deferred;
4188
+ this.deferred = null;
4189
+ return deferred;
4190
+ }
4122
4191
  }
4123
4192
  function exitIntentFromArchiveFlag(archive) {
4124
4193
  return archive ?? true ? "archive" : "offline";
@@ -1,86 +1,86 @@
1
- import { l as logger } from './logger-BpQcwNnt.mjs';
2
- import { m as notifyDaemonSessionEvent, o as notifyDaemonClaudeAuthFailed } from './controlClient-BMUJfUeF.mjs';
3
- export { h as reportSessionEditToDaemon } from './controlClient-BMUJfUeF.mjs';
1
+ import { l as logger } from './logger-C6zzu57a.mjs';
2
+ import { o as notifyDaemonSessionEvent, q as notifyDaemonClaudeAuthFailed } from './controlClient-CXD-Xdny.mjs';
3
+ export { j as reportSessionEditToDaemon } from './controlClient-CXD-Xdny.mjs';
4
4
  import { s as sameBackgroundTasks, c as createBackgroundTaskTracker } from './backgroundTaskActivity-8PdPxrvy.mjs';
5
5
  import { randomInt, randomUUID, createHash } from 'node:crypto';
6
6
  import { M as MessageBuffer } from './messageBuffer-BWlGgR3A.mjs';
7
7
  import { query } from './index-B6UGRQ7h.mjs';
8
8
  import { AbortError } from '@anthropic-ai/claude-agent-sdk';
9
9
  import { m as mapToClaudeMode, p as parseClaudePermissionMode, c as resolveRemoteClaudePermissionMode } from './permissionMode-CH4FoZfU.mjs';
10
- import { c as claudeCheckSession, s as systemPrompt } from './systemPrompt-BanyDihy.mjs';
10
+ import { c as claudeCheckSession, s as systemPrompt } from './systemPrompt-DNLUUejs.mjs';
11
11
  import { join, resolve, dirname } from 'node:path';
12
- import { p as parseSpecialCommand, w as wrapperRateLimitReporter } from './specialCommands-CCWtwIGZ.mjs';
12
+ import { p as parseSpecialCommand, w as wrapperRateLimitReporter } from './specialCommands-xD4uOtdG.mjs';
13
13
  import 'axios';
14
14
  import 'node:events';
15
15
  import 'socket.io-client';
16
- import { A as AsyncLock } from './attachmentLimits-C1PCCM79.mjs';
16
+ import { A as AsyncLock } from './attachmentLimits-CxG3T18E.mjs';
17
17
  import 'tweetnacl';
18
- import { c as configuration, e as ensurePrivateDirectory } from './configuration-D2v3puap.mjs';
18
+ import { c as configuration, e as ensurePrivateDirectory } from './configuration-BZo1JWNV.mjs';
19
19
  import './index-B0HEEYGh.mjs';
20
- import './registerCommonHandlers-DdfGsFbM.mjs';
20
+ import './registerCommonHandlers-BLHKlk5Z.mjs';
21
21
  import 'os';
22
22
  import 'child_process';
23
23
  import '@paralleldrive/cuid2';
24
- import './persistence-B9LmhAE2.mjs';
24
+ import './persistence-B6M_W5iC.mjs';
25
25
  import { c as contentLogMetadata } from './contentLogMetadata-BlWI0egu.mjs';
26
26
  import 'chalk';
27
27
  export { R as RawJSONLinesSchema } from './types-CkqAACXx.mjs';
28
28
  import { g as getProjectPath } from './path-D2wdaNSk.mjs';
29
29
  import { access } from 'fs/promises';
30
- import { d as delay } from './time-CfDKj6Bx.mjs';
30
+ import { d as delay } from './time-CN0jVVir.mjs';
31
31
  import { mkdirSync, writeFileSync, readFileSync, unlinkSync, renameSync, statSync, existsSync } from 'node:fs';
32
- import { h as hashObject } from './deterministicJson-D-WPUrZb.mjs';
33
- export { s as startHappyServer } from './deterministicJson-D-WPUrZb.mjs';
34
- import { F as Future } from './sessionScanner-CcuOn9uU.mjs';
35
- export { c as createSessionScanner } from './sessionScanner-CcuOn9uU.mjs';
32
+ import { h as hashObject } from './deterministicJson-CF1fJMaM.mjs';
33
+ export { s as startHappyServer } from './deterministicJson-CF1fJMaM.mjs';
34
+ import { F as Future } from './sessionScanner-CwPBvQK2.mjs';
35
+ export { c as createSessionScanner } from './sessionScanner-CwPBvQK2.mjs';
36
36
  import { execSync } from 'node:child_process';
37
37
  import { S as StreamRelay } from './streamRelay-Iogsh51a.mjs';
38
- import { C as CLAUDE_ATTACHMENT_KINDS, c as chatAttachmentDirectory, a as stageClaudeAttachments, b as appendStagedAttachmentsToPrompt } from './attachmentContent-CTXapi-_.mjs';
38
+ import { C as CLAUDE_ATTACHMENT_KINDS, c as chatAttachmentDirectory, a as stageClaudeAttachments, b as appendStagedAttachmentsToPrompt } from './attachmentContent-CS0B2N0Q.mjs';
39
39
  import { writeFile, rename, unlink, readFile } from 'node:fs/promises';
40
- import { F as ForkSourceMissingError } from './claudeSessionFork-BdLnc2Hv.mjs';
41
- export { M as MessageQueue2, r as registerKillSessionHandler } from './registerKillSessionHandler-DboQlGcH.mjs';
42
- export { g as getEnvironmentInfo } from './doctor-BlXXyQ1L.mjs';
40
+ import { F as ForkSourceMissingError } from './claudeSessionFork-BQPBKEHk.mjs';
41
+ export { M as MessageQueue2, r as registerKillSessionHandler } from './registerKillSessionHandler-BVQfhSgm.mjs';
42
+ export { g as getEnvironmentInfo } from './doctor-C98yYhYr.mjs';
43
43
  import { createServer } from 'node:http';
44
44
  export { E as EditReportThrottle, b as extractClaudeEditPaths } from './editPaths-BVfS_FFL.mjs';
45
45
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
46
- import { r as resolveClaudeBinary, a as runClaudeOneShot } from './titleGenerator-ChImQ4q-.mjs';
47
- export { T as TitleGenerator } from './titleGenerator-ChImQ4q-.mjs';
46
+ import { r as resolveClaudeBinary, a as runClaudeOneShot } from './titleGenerator-CegRJ47n.mjs';
47
+ export { T as TitleGenerator } from './titleGenerator-CegRJ47n.mjs';
48
48
  import { B as BOARD_ANALYZER_PROMPT_PREFIX } from './oneShotPrompts-DT4p6RNd.mjs';
49
- import { i as isSelfReportFresh } from './reportProgressTool-DnAD8wOa.mjs';
50
- export { c as createSelfReportState } from './reportProgressTool-DnAD8wOa.mjs';
49
+ import { i as isSelfReportFresh } from './reportProgressTool-CcwFr0ek.mjs';
50
+ export { c as createSelfReportState } from './reportProgressTool-CcwFr0ek.mjs';
51
51
  import 'node:util';
52
52
  import './smallFastModel-BLNgMrwR.mjs';
53
53
  import './trimIdent-BAjmv_TG.mjs';
54
54
  import 'node:os';
55
55
  import './agentGuidance-BDYt2Qy2.mjs';
56
- import './rateLimitWindows-Dhfhbtqu.mjs';
56
+ import './rateLimitWindows-CJ1xDAxa.mjs';
57
57
  import 'zod';
58
- import './package-BqwrPxL0.mjs';
58
+ import './package-5xAdq5fu.mjs';
59
59
  import 'util';
60
60
  import 'crypto';
61
61
  import 'path';
62
62
  import 'cross-spawn';
63
63
  import './authRelay-DSAvg1uv.mjs';
64
- import './client-CbK33y_s.mjs';
65
- import './context-DjfqLWzE.mjs';
66
- import './sessionOps-BnaEaOKs.mjs';
64
+ import './client-Bg6-mQKO.mjs';
65
+ import './context-DZIIcfld.mjs';
66
+ import './sessionOps-CBXsQGV5.mjs';
67
67
  import './resources-BdFBQi8r.mjs';
68
- import './tools-3X2z3YDe.mjs';
69
- import './peerTools-CeCe-3lk.mjs';
68
+ import './tools-BcLUrC57.mjs';
69
+ import './peerTools-uDR6MG0-.mjs';
70
70
  import './ids-DU6sLx4C.mjs';
71
- import './remoteSessionClient-B2DtWuNP.mjs';
71
+ import './remoteSessionClient-Dx0M2MXV.mjs';
72
72
  import '@modelcontextprotocol/sdk/server/mcp.js';
73
73
  import '@modelcontextprotocol/sdk/server/streamableHttp.js';
74
74
  import './limits-DIo7rEBR.mjs';
75
- import './downloadTarget-DjSwMHun.mjs';
75
+ import './downloadTarget-CaISZbNy.mjs';
76
76
  import './terminals-Dlg0x3nY.mjs';
77
77
  import './terminalTitleSuggest-CeKsX_V6.mjs';
78
78
  import './tmuxSocket-B8Yx20sT.mjs';
79
- import './bootstrap-XE8A7Ut2.mjs';
79
+ import './bootstrap-DklT121U.mjs';
80
80
  import './previewPath-CXN4Vag0.mjs';
81
- import './sync-BLpH13Kb.mjs';
81
+ import './sync-CHOB3Org.mjs';
82
82
  import './transcriptCursor-B7T_gkQ0.mjs';
83
- import './startFileWatcher-Dfs4whzr.mjs';
83
+ import './startFileWatcher-De7rN8QW.mjs';
84
84
  import 'node:readline';
85
85
  import './doctor-BPkYWSuq.mjs';
86
86
  import 'ps-list';
@@ -90,9 +90,44 @@ import 'fs';
90
90
  import './cliUpdate-Y34VGe9Y.mjs';
91
91
  import 'url';
92
92
  import 'node:module';
93
- import './client-GjTnsq6F.mjs';
93
+ import './client-Cbl3ejoq.mjs';
94
94
  import './precheckCompat-DeEbilbr.mjs';
95
95
 
96
+ const SCHEDULE_WAKEUP_GRACE_MS = 6e4;
97
+ function createScheduledWakeupTracker() {
98
+ const crons = /* @__PURE__ */ new Set();
99
+ const wakeups = /* @__PURE__ */ new Map();
100
+ let cronDeletes = 0;
101
+ function observe(message, now = Date.now()) {
102
+ const m = message;
103
+ const content = Array.isArray(m?.message?.content) ? m.message.content : [];
104
+ if (m?.type === "assistant") {
105
+ for (const block of content) {
106
+ if (block?.type !== "tool_use" || typeof block.id !== "string") continue;
107
+ if (block.name === "CronCreate") crons.add(block.id);
108
+ if (block.name === "CronDelete") cronDeletes += 1;
109
+ if (block.name === "ScheduleWakeup") {
110
+ const delay = Number(block.input?.delaySeconds);
111
+ wakeups.set(block.id, now + (Number.isFinite(delay) && delay > 0 ? delay * 1e3 : 0) + SCHEDULE_WAKEUP_GRACE_MS);
112
+ }
113
+ }
114
+ }
115
+ if (m?.type === "user") {
116
+ for (const block of content) {
117
+ if (block?.type === "tool_result" && block.is_error === true && typeof block.tool_use_id === "string") {
118
+ crons.delete(block.tool_use_id);
119
+ wakeups.delete(block.tool_use_id);
120
+ }
121
+ }
122
+ }
123
+ }
124
+ function pending(now = Date.now()) {
125
+ for (const [id, until] of wakeups) if (until <= now) wakeups.delete(id);
126
+ return Math.max(0, crons.size - cronDeletes) + wakeups.size;
127
+ }
128
+ return { observe, pending };
129
+ }
130
+
96
131
  class Session {
97
132
  path;
98
133
  logPath;
@@ -119,6 +154,8 @@ class Session {
119
154
  * for the Claude runner: an empty one says "nothing running", which is a
120
155
  * different statement from a runner that has no such notion (undefined). */
121
156
  backgroundTasks = [];
157
+ /** B-587 review P3-4: CronCreate / ScheduleWakeup pending in this Claude process. */
158
+ scheduledWakeups = createScheduledWakeupTracker();
122
159
  /**
123
160
  * Window after a user-initiated abort during which stray promise rejections
124
161
  * from tearing down the SDK query (MCP transports, in-flight tool calls,
@@ -3508,6 +3545,7 @@ async function claudeRemoteLauncher(session, onPermissionModeChange, onEffective
3508
3545
  runtimeControls.observe(message);
3509
3546
  backgroundTasks.observe(message);
3510
3547
  session.setBackgroundTasks(backgroundTasks.list());
3548
+ session.scheduledWakeups.observe(message);
3511
3549
  if (isRuntimeCheckpointReplay(message)) return;
3512
3550
  if (message.type === "user" && isClaudeInterruptSentinelContent(message.message.content)) {
3513
3551
  sdkToLogConverter.convert(message);
@@ -3928,7 +3966,7 @@ async function loop(opts) {
3928
3966
  logger.debug(`[loop] Iteration with mode: ${mode}`);
3929
3967
  switch (mode) {
3930
3968
  case "local": {
3931
- const { claudeLocalLauncher } = await import('./claudeLocalLauncher-Cs4eUC3P.mjs');
3969
+ const { claudeLocalLauncher } = await import('./claudeLocalLauncher-AtUe2tM-.mjs');
3932
3970
  const result = await claudeLocalLauncher(session);
3933
3971
  switch (result.type) {
3934
3972
  case "switch":
@@ -4103,6 +4141,12 @@ async function settleSessionOnExit(sessionId, intent, deps) {
4103
4141
  archiveReason: "User terminated"
4104
4142
  }));
4105
4143
  }
4144
+ if (intent === "hibernate" && deps.hibernation) {
4145
+ const stamp = deps.hibernation;
4146
+ const handler = (currentMetadata) => ({ ...currentMetadata, hibernation: stamp });
4147
+ const landed = deps.updateMetadataAndWait ? await deps.updateMetadataAndWait(handler) : (deps.updateMetadata(handler), false);
4148
+ if (!landed) deps.log?.("[START] hibernation stamp not confirmed before going offline");
4149
+ }
4106
4150
  deps.sendSessionDeath();
4107
4151
  try {
4108
4152
  if (intent === "archive") await deps.archiveSession(sessionId);
@@ -4113,8 +4157,14 @@ async function settleSessionOnExit(sessionId, intent, deps) {
4113
4157
  }
4114
4158
  class SessionExitGate {
4115
4159
  decided = null;
4160
+ hibernateCommitted = false;
4161
+ deferred = null;
4116
4162
  /** Returns the intent to act on, or null when cleanup already started. */
4117
4163
  claim(intent) {
4164
+ if (this.decided === "hibernate" && !this.hibernateCommitted && intent !== "hibernate") {
4165
+ if (this.deferred !== "archive") this.deferred = intent;
4166
+ return null;
4167
+ }
4118
4168
  if (this.decided !== null) return null;
4119
4169
  this.decided = intent;
4120
4170
  return intent;
@@ -4122,6 +4172,25 @@ class SessionExitGate {
4122
4172
  get current() {
4123
4173
  return this.decided;
4124
4174
  }
4175
+ /** B-587: an exit was requested while the hibernation was deciding. */
4176
+ get exitRequested() {
4177
+ return this.deferred !== null;
4178
+ }
4179
+ /** B-587: the hibernation passed its last check — no more deferral. */
4180
+ commitHibernate() {
4181
+ if (this.decided === "hibernate") this.hibernateCommitted = true;
4182
+ }
4183
+ /**
4184
+ * B-587: a hibernation that aborted hands the exit back. Returns the exit
4185
+ * deferred meanwhile (the caller must run it now), or null.
4186
+ */
4187
+ release(intent) {
4188
+ if (this.decided !== intent || intent === "hibernate" && this.hibernateCommitted) return null;
4189
+ this.decided = null;
4190
+ const deferred = this.deferred;
4191
+ this.deferred = null;
4192
+ return deferred;
4193
+ }
4125
4194
  }
4126
4195
  function exitIntentFromArchiveFlag(archive) {
4127
4196
  return archive ?? true ? "archive" : "offline";
@@ -4,78 +4,78 @@ var ink = require('ink');
4
4
  var React = require('react');
5
5
  var node_crypto = require('node:crypto');
6
6
  var path = require('node:path');
7
- var api = require('./api-DnNL5fLw.cjs');
8
- var logger = require('./logger-JTcJU-uL.cjs');
9
- var persistence = require('./persistence-2Xp_o6x6.cjs');
10
- var createSessionMetadata = require('./createSessionMetadata-DbfRBhRu.cjs');
7
+ var api = require('./api-COSJ3Yb7.cjs');
8
+ var logger = require('./logger-Ockf1cjN.cjs');
9
+ var persistence = require('./persistence-B5oT6oQ9.cjs');
10
+ var createSessionMetadata = require('./createSessionMetadata-BCHFLSLk.cjs');
11
11
  var contentLogMetadata = require('./contentLogMetadata-ZSFk_NjQ.cjs');
12
- var machineMetadata = require('./machineMetadata-BBg_Njw3.cjs');
13
- var registerKillSessionHandler = require('./registerKillSessionHandler-CjitOpUA.cjs');
14
- var deterministicJson = require('./deterministicJson-Dp3TVyap.cjs');
12
+ var machineMetadata = require('./machineMetadata-CoMYwSlG.cjs');
13
+ var registerKillSessionHandler = require('./registerKillSessionHandler-DDZISNzu.cjs');
14
+ var deterministicJson = require('./deterministicJson-BqQKrUzw.cjs');
15
15
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
16
16
  var messageBuffer = require('./messageBuffer-fJMH6uY8.cjs');
17
- var controlClient = require('./controlClient-CmnHGcyl.cjs');
17
+ var controlClient = require('./controlClient-IDE3se23.cjs');
18
18
  var authRelay = require('./authRelay-BdYkC1Po.cjs');
19
- var setupOfflineReconnection = require('./setupOfflineReconnection-DFmQ8s6I.cjs');
20
- var AcpBackend = require('./AcpBackend-20VHOXwb.cjs');
19
+ var setupOfflineReconnection = require('./setupOfflineReconnection-DI8BQf_g.cjs');
20
+ var AcpBackend = require('./AcpBackend-r83MMm-i.cjs');
21
21
  var constants = require('./constants-VJ0N6WuG.cjs');
22
- var config = require('./config-DuLL0Ppe.cjs');
23
- var BasePermissionHandler = require('./BasePermissionHandler-COKc4pmt.cjs');
24
- var BaseReasoningProcessor = require('./BaseReasoningProcessor-DAGQdkNp.cjs');
22
+ var config = require('./config-BuIIZPZK.cjs');
23
+ var BasePermissionHandler = require('./BasePermissionHandler-CS0eRtT-.cjs');
24
+ var BaseReasoningProcessor = require('./BaseReasoningProcessor-RJiBhA8h.cjs');
25
25
  require('axios');
26
- require('./lidState-D8BmnJV1.cjs');
26
+ require('./lidState-2IT0tas7.cjs');
27
27
  require('os');
28
28
  require('child_process');
29
29
  require('node:events');
30
30
  require('socket.io-client');
31
- require('./attachmentLimits-BfgKV5iE.cjs');
31
+ require('./attachmentLimits-BEYEEBm8.cjs');
32
32
  require('zod');
33
33
  require('./index-C9hI8a10.cjs');
34
34
  require('@paralleldrive/cuid2');
35
35
  require('./limits-C-a7gr04.cjs');
36
- require('./time-T0YmeOhS.cjs');
37
- require('./configuration-B0cb3xA3.cjs');
36
+ require('./time-uSKpEhew.cjs');
37
+ require('./configuration-DeuGrnej.cjs');
38
38
  require('node:fs');
39
39
  require('node:os');
40
- require('./package-C1XvUQFy.cjs');
40
+ require('./package-DfoyJe1O.cjs');
41
41
  require('node:fs/promises');
42
- require('./registerCommonHandlers-Aha_KfM3.cjs');
42
+ require('./registerCommonHandlers-COSTo15G.cjs');
43
43
  require('util');
44
44
  require('fs/promises');
45
45
  require('crypto');
46
46
  require('path');
47
47
  require('cross-spawn');
48
- require('./sync-x_lI_3j_.cjs');
48
+ require('./sync-BS9_zSQ2.cjs');
49
49
  require('./backgroundTaskActivity-CBvUdj39.cjs');
50
50
  require('chalk');
51
51
  require('node:util');
52
- require('tweetnacl');
53
52
  require('./detectCLI-DR9ZaN6B.cjs');
54
53
  require('fs');
55
- require('./localHappyAgentAuth-d7B6S_o7.cjs');
54
+ require('./localHappyAgentAuth-CPMh61Su.cjs');
55
+ require('tweetnacl');
56
56
  require('./types-CRS-srZK.cjs');
57
- require('./client-JISJx2f-.cjs');
58
- require('./context-BFUpYT39.cjs');
59
- require('./sessionOps-DOyy4gkY.cjs');
57
+ require('./client-DZpkmS5l.cjs');
58
+ require('./context-BhvZtm3j.cjs');
59
+ require('./sessionOps-BAQ_80Rg.cjs');
60
60
  require('./resources-JDPugcDq.cjs');
61
- require('./tools-IJ0TAcJs.cjs');
62
- require('./reportProgressTool-B-Rcy0s3.cjs');
63
- require('./client-DJ0kX_8M.cjs');
61
+ require('./tools-DuWKlc0k.cjs');
62
+ require('./reportProgressTool-C5vDEv9Y.cjs');
63
+ require('./client-EnFomCjx.cjs');
64
64
  require('./precheckCompat-CWOi5c9L.cjs');
65
65
  require('./agentGuidance-BtBx2xxE.cjs');
66
66
  require('./trimIdent-4gvk9Wk6.cjs');
67
- require('./peerTools-DPvbcs8V.cjs');
67
+ require('./peerTools-BEnBvEcU.cjs');
68
68
  require('./ids-B6ZC0HGt.cjs');
69
- require('./remoteSessionClient-BwI8rpQw.cjs');
69
+ require('./remoteSessionClient-B2pOMZRw.cjs');
70
70
  require('@modelcontextprotocol/sdk/server/mcp.js');
71
71
  require('node:http');
72
72
  require('@modelcontextprotocol/sdk/server/streamableHttp.js');
73
- require('./downloadTarget-CiQqRIc-.cjs');
73
+ require('./downloadTarget-Dist9t2e.cjs');
74
74
  require('./terminals-B_bfC9c2.cjs');
75
75
  require('node:child_process');
76
76
  require('./terminalTitleSuggest-DhvRFX3H.cjs');
77
77
  require('./tmuxSocket-D-Xt6Vn-.cjs');
78
- require('./bootstrap-BpXIc2wn.cjs');
78
+ require('./bootstrap-DSX64t23.cjs');
79
79
  require('./previewPath-B0rBdhy1.cjs');
80
80
  require('url');
81
81
  require('@agentclientprotocol/sdk');