very-happy-cli 0.2.165 → 0.2.167

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 (198) hide show
  1. package/README.md +1 -1
  2. package/dist/{AcpBackend-DCfNt9bD.cjs → AcpBackend-D1IKJGz_.cjs} +3 -3
  3. package/dist/{AcpBackend-C11FnVw5.mjs → AcpBackend-kFZlee5E.mjs} +3 -3
  4. package/dist/{AcpSessionManager-BQnDJvct.mjs → AcpSessionManager-B7FIrsys.mjs} +1 -1
  5. package/dist/{AcpSessionManager-9yN2iH4b.cjs → AcpSessionManager-Zf00QnlL.cjs} +1 -1
  6. package/dist/{BasePermissionHandler-BwQHxl6M.cjs → BasePermissionHandler-DHxYAK5L.cjs} +1 -1
  7. package/dist/{BasePermissionHandler-CwJ48yiB.mjs → BasePermissionHandler-DS0kRTNI.mjs} +1 -1
  8. package/dist/{BaseReasoningProcessor-ClF2g1qz.mjs → BaseReasoningProcessor-BRtCCt7q.mjs} +1 -1
  9. package/dist/{BaseReasoningProcessor-81lf_M8G.cjs → BaseReasoningProcessor-CsjVdt_H.cjs} +1 -1
  10. package/dist/{agentGuidance-CQuNlNx8.mjs → agentGuidance-BDYt2Qy2.mjs} +4 -2
  11. package/dist/{agentGuidance-B5NATuFa.cjs → agentGuidance-BtBx2xxE.cjs} +4 -1
  12. package/dist/{agentHome-DvR176E5.mjs → agentHome-Ct-VXFeG.mjs} +4 -4
  13. package/dist/{agentHome-D3Nn82kI.cjs → agentHome-DeAWzhSe.cjs} +4 -4
  14. package/dist/{api-AzdzTKFs.cjs → api-BZYLRDM9.cjs} +93 -13
  15. package/dist/{api-DTVPUE7g.mjs → api-CReZazeT.mjs} +93 -13
  16. package/dist/{apiMachine-B_cJldfa.cjs → apiMachine-BgMxGPsR.cjs} +2173 -66
  17. package/dist/{apiMachine-BQ-b4Lu3.mjs → apiMachine-CWndf1Vn.mjs} +2176 -69
  18. package/dist/{attachmentContent-muDCe4Gy.cjs → attachmentContent-HcJqFQW8.cjs} +2 -2
  19. package/dist/{attachmentContent-dzIs-wis.mjs → attachmentContent-j875mwU7.mjs} +2 -2
  20. package/dist/{attachmentLimits-eJZ4ZBjF.cjs → attachmentLimits-BEYEEBm8.cjs} +40 -2
  21. package/dist/{attachmentLimits-B8nzhw-i.mjs → attachmentLimits-CxG3T18E.mjs} +40 -2
  22. package/dist/{auth-Jtmvh1w4.mjs → auth-BIHuc7vY.mjs} +10 -10
  23. package/dist/{auth-BY5ujhGn.mjs → auth-CFS9Lfgv.mjs} +5 -5
  24. package/dist/{auth-DtP-B4gf.cjs → auth-Myr2Q42x.cjs} +10 -10
  25. package/dist/{auth-CfLd3phE.cjs → auth-VzWpbo5P.cjs} +5 -5
  26. package/dist/{auto-ClNnbSoF.cjs → auto-Bf6Dr7_o.cjs} +85 -21
  27. package/dist/{auto-DjWfR1UB.mjs → auto-Df9-zmuN.mjs} +84 -22
  28. package/dist/{bootstrap-D_ExGrY2.mjs → bootstrap-BSOxYpaP.mjs} +2 -2
  29. package/dist/{bootstrap-B1dMZA-u.cjs → bootstrap-Dj8WBiR2.cjs} +2 -2
  30. package/dist/{browser-mwzpOmcw.mjs → browser-BCFIHOvo.mjs} +1 -1
  31. package/dist/{browser-_gV7tcPs.cjs → browser-BoCV40yC.cjs} +1 -1
  32. package/dist/{claudeLocal-G5UmJ81F.cjs → claudeLocal-CGsq7Kul.cjs} +7 -7
  33. package/dist/{claudeLocal-BeHToEK5.mjs → claudeLocal-D5-eA9SC.mjs} +7 -7
  34. package/dist/{claudeLocalLauncher-Cq6bqAT4.mjs → claudeLocalLauncher-C9Cc438l.mjs} +15 -12
  35. package/dist/{claudeLocalLauncher-B4y2BsmO.cjs → claudeLocalLauncher-Cf9QeYDT.cjs} +15 -12
  36. package/dist/{claudeSessionFork-CDJq_b9r.cjs → claudeSessionFork-Byd8zD1U.cjs} +1 -1
  37. package/dist/{claudeSessionFork-CokUhS4r.mjs → claudeSessionFork-CMzAva8G.mjs} +1 -1
  38. package/dist/{client-Do7cGPEq.cjs → client-BKnKRLSt.cjs} +3 -3
  39. package/dist/{client-CJZKBZCE.mjs → client-C7FYMer0.mjs} +2 -2
  40. package/dist/{client-uN9d6Git.cjs → client-D0T5-6Ds.cjs} +2 -2
  41. package/dist/{client-BwaWdlCm.mjs → client-Dsfy_SAb.mjs} +3 -3
  42. package/dist/codex/happyMcpStdioBridge.cjs +23 -18
  43. package/dist/codex/happyMcpStdioBridge.mjs +22 -17
  44. package/dist/{codexAppServerClient-B0QaMQsC.mjs → codexAppServerClient-Dd_4TxHv.mjs} +48 -4
  45. package/dist/{codexAppServerClient-BuSdeUxT.cjs → codexAppServerClient-TiW9OBk4.cjs} +47 -3
  46. package/dist/{codexCommand-C3gdjMAw.mjs → codexCommand-BZSr4MKI.mjs} +170 -69
  47. package/dist/{codexCommand-YdYmykAR.cjs → codexCommand-Bxryqh90.cjs} +170 -69
  48. package/dist/{config-CGCIFRCN.mjs → config-C_Pj7yxV.mjs} +3 -3
  49. package/dist/{config-ChoHFnfO.cjs → config-DXPash-r.cjs} +3 -3
  50. package/dist/{configuration-BE61XNsg.cjs → configuration-C3piBtxY.cjs} +1 -1
  51. package/dist/{configuration-L1qcGTFM.mjs → configuration-WspKd2C2.mjs} +2 -2
  52. package/dist/{connect-D5IKfcfd.cjs → connect-BN-IBElA.cjs} +14 -14
  53. package/dist/{connect-CFD0Em6a.mjs → connect-DGPZs5px.mjs} +14 -14
  54. package/dist/{context-DaCCB4cm.mjs → context-Cr6a3NTg.mjs} +1 -1
  55. package/dist/{context-3WVw8qPz.cjs → context-Jrq4-eCZ.cjs} +1 -1
  56. package/dist/{controlClient-RWTlQA4_.cjs → controlClient-BI6Fw3fQ.cjs} +28 -5
  57. package/dist/{controlClient-Ci7HTMII.mjs → controlClient-DTheOlvC.mjs} +27 -6
  58. package/dist/{createSessionMetadata-CWR-AB2A.mjs → createSessionMetadata-BEZ4DIDA.mjs} +57 -5
  59. package/dist/{createSessionMetadata-CPGTztXP.cjs → createSessionMetadata-zQSz3hgk.cjs} +56 -3
  60. package/dist/defaultPermissionMode-Cif_RHGb.mjs +191 -0
  61. package/dist/defaultPermissionMode-DNKNzk7l.cjs +197 -0
  62. package/dist/{deterministicJson-BBwG-Ase.mjs → deterministicJson-BMMifViN.mjs} +36 -52
  63. package/dist/{deterministicJson-C4Jo2RWy.cjs → deterministicJson-C7O2ulKY.cjs} +41 -59
  64. package/dist/{doctor-ZOQLE5AH.cjs → doctor-BykBaMTr.cjs} +6 -6
  65. package/dist/{doctor-CAC6qY9Z.mjs → doctor-D1KKyPzB.mjs} +6 -6
  66. package/dist/{assistantTools-BsrG3PD-.cjs → downloadTarget-CWTb2-EM.cjs} +44 -6
  67. package/dist/{assistantTools-DPGga5lM.mjs → downloadTarget-Cp48jrIP.mjs} +45 -8
  68. package/dist/{ensureDaemonRunning-b1pvEFcS.mjs → ensureDaemonRunning-Ba5fYoxb.mjs} +5 -5
  69. package/dist/{ensureDaemonRunning-mIgX2vnc.cjs → ensureDaemonRunning-CCxX7MoP.cjs} +5 -5
  70. package/dist/{handleResumeCommand-CTGbZkCL.mjs → handleResumeCommand-BTUGlNjB.mjs} +5 -5
  71. package/dist/{handleResumeCommand-DGNhbv-3.cjs → handleResumeCommand-yPdDQHqz.cjs} +5 -5
  72. package/dist/{index-vVWpCoTr.mjs → index-B0HEEYGh.mjs} +22 -5
  73. package/dist/{index-BzIxE0Eu.cjs → index-BjhKqDa0.cjs} +3 -3
  74. package/dist/{index-BgzjPv07.mjs → index-C3_83bqS.mjs} +3 -3
  75. package/dist/{index-DqlyNgt4.cjs → index-C9hI8a10.cjs} +26 -4
  76. package/dist/{index-DjtBengz.mjs → index-CE2GgPbr.mjs} +40 -39
  77. package/dist/{index-Diu6HdWH.mjs → index-D8m8Ripb.mjs} +4 -4
  78. package/dist/{index-DrSPR59N.cjs → index-DifM62wX.cjs} +39 -38
  79. package/dist/{index-DIodyAqF.cjs → index-PNMQPKhz.cjs} +4 -4
  80. package/dist/index.cjs +2 -2
  81. package/dist/index.mjs +2 -2
  82. package/dist/{install-BO_W7VhL.mjs → install-BdvKiOQw.mjs} +2 -0
  83. package/dist/{install-Cp_aB-NQ.mjs → install-C0-QFn9s.mjs} +3 -3
  84. package/dist/{install-Cs5qAPrB.cjs → install-Cf6AFSWC.cjs} +2 -0
  85. package/dist/{install-DrUQk2DJ.cjs → install-CqZVeze8.cjs} +3 -3
  86. package/dist/lib.cjs +12 -12
  87. package/dist/lib.d.cts +116 -2
  88. package/dist/lib.d.mts +116 -2
  89. package/dist/lib.mjs +12 -12
  90. package/dist/{lidState-BLHLmhwd.mjs → lidState-B2ZxdREe.mjs} +1 -1
  91. package/dist/{lidState-z9ekRpZu.cjs → lidState-Bc2K9H9l.cjs} +1 -1
  92. package/dist/{localHappyAgentAuth-BWvmc_Hg.mjs → localHappyAgentAuth-B5XPEMwk.mjs} +1 -1
  93. package/dist/{localHappyAgentAuth-BCx0y1qW.cjs → localHappyAgentAuth-T5GOvRha.cjs} +1 -1
  94. package/dist/{logger-D0hkk7Vo.cjs → logger-B_MWPbZz.cjs} +2 -2
  95. package/dist/{logger-CknSVkIe.mjs → logger-CbBv3q_b.mjs} +2 -2
  96. package/dist/{machineMetadata-BDCYOXQg.cjs → machineMetadata-BafS4JY8.cjs} +4 -3
  97. package/dist/{machineMetadata-Cj1DoFot.mjs → machineMetadata-DHg238U4.mjs} +4 -3
  98. package/dist/{main-COAPGIso.cjs → main-DNrA0qBy.cjs} +45 -45
  99. package/dist/{main-CKUfkVG_.mjs → main-DXAK0n7x.mjs} +45 -45
  100. package/dist/{manager-BQ4flvQZ.mjs → manager-BEsI4qt3.mjs} +9 -3
  101. package/dist/{manager-Cly8xVIR.cjs → manager-HrEj442o.cjs} +8 -2
  102. package/dist/{mcp-BILnw4si.cjs → mcp-AvPOhDXy.cjs} +24 -19
  103. package/dist/{mcp-DeYUfpo8.mjs → mcp-BotAjCdD.mjs} +23 -18
  104. package/dist/mirrorProtocol-BdcN6QlN.cjs +1270 -0
  105. package/dist/mirrorProtocol-BwHm8odn.mjs +1247 -0
  106. package/dist/{package-UkmvSFsg.cjs → package-C9ZP9bpX.cjs} +7 -7
  107. package/dist/{package-VIUXrYZ1.mjs → package-DU1DxhH9.mjs} +7 -7
  108. package/dist/{peerTools-CttfOxti.cjs → peerTools-Dkbu7gag.cjs} +4 -4
  109. package/dist/{peerTools-SWITnkqz.mjs → peerTools-os2DVjA0.mjs} +4 -4
  110. package/dist/{persistence-C6ztVW1W.cjs → persistence-BYGl0QYw.cjs} +147 -25
  111. package/dist/{persistence-DujtUH94.mjs → persistence-ON0zpHfb.mjs} +123 -12
  112. package/dist/{piRunnerArgs-BVJHIjlk.mjs → piRunnerArgs-CYsnT9sV.mjs} +1 -1
  113. package/dist/{piRunnerArgs-tBQg6xDw.cjs → piRunnerArgs-DpbvstUX.cjs} +1 -1
  114. package/dist/{piRuntime-DZzjF9It.cjs → piRuntime-CDnILlCd.cjs} +1 -1
  115. package/dist/{piRuntime-DKFA8u8t.mjs → piRuntime-CmEid-wu.mjs} +1 -1
  116. package/dist/{piTerminal-BTSaFlpV.mjs → piTerminal-0eNlXSlL.mjs} +17 -17
  117. package/dist/{piTerminal-t5pQHCPT.cjs → piTerminal-B57TgMON.cjs} +17 -17
  118. package/dist/precheckCompat-CWOi5c9L.cjs +29 -0
  119. package/dist/precheckCompat-DeEbilbr.mjs +26 -0
  120. package/dist/rateLimitWindows-CusGIqlq.cjs +258 -0
  121. package/dist/rateLimitWindows-vZ9Bo7aT.mjs +248 -0
  122. package/dist/{registerCommonHandlers-BR0J4g64.mjs → registerCommonHandlers-B0PVff2U.mjs} +2 -2
  123. package/dist/{registerCommonHandlers--8ds2auE.cjs → registerCommonHandlers-DVYB3iVn.cjs} +2 -2
  124. package/dist/{registerKillSessionHandler-Czz0tdki.mjs → registerKillSessionHandler-BJMHJHXe.mjs} +15 -10
  125. package/dist/{registerKillSessionHandler-CI23l8aJ.cjs → registerKillSessionHandler-BwXGKtg_.cjs} +15 -10
  126. package/dist/{remoteSessionClient-DCAUHgPz.mjs → remoteSessionClient-BzPXSC21.mjs} +5 -5
  127. package/dist/{remoteSessionClient-BAkIwM2S.cjs → remoteSessionClient-PyUAIhwK.cjs} +5 -5
  128. package/dist/{tools-BVRoGcQH.mjs → reportProgressTool-BvB13EwC.mjs} +67 -10
  129. package/dist/{tools-mWqsE6ji.cjs → reportProgressTool-D4KB_4cP.cjs} +73 -9
  130. package/dist/{run-CkKujjn8.cjs → run-BC8jzq_h.cjs} +558 -122
  131. package/dist/{run-B75qm2I6.mjs → run-O2M8LsWf.mjs} +556 -120
  132. package/dist/{runClaude-B1T9DLLi.cjs → runClaude-C7jPa8VP.cjs} +93 -26
  133. package/dist/{runClaude-aBfBweec.mjs → runClaude-DGkr5E7s.mjs} +93 -26
  134. package/dist/{runClaudeDeps-BGjNGfuZ.cjs → runClaudeDeps-5kzncqME.cjs} +113 -35
  135. package/dist/{runClaudeDeps-BOrPP4J1.mjs → runClaudeDeps-CX_TxS78.mjs} +116 -37
  136. package/dist/{runGemini-BuAA_OQb.cjs → runGemini-BfYA4Uqc.cjs} +43 -36
  137. package/dist/{runGemini-a-V7JE-J.mjs → runGemini-CwmGBH3L.mjs} +43 -36
  138. package/dist/{runOpenClaw-DUSwXg1A.mjs → runOpenClaw-BYAPYFyL.mjs} +18 -18
  139. package/dist/{runOpenClaw-BBVffIh9.cjs → runOpenClaw-C72jut7v.cjs} +18 -18
  140. package/dist/{sandbox-Fd2G5yaq.cjs → sandbox-Bqkp8IT7.cjs} +4 -4
  141. package/dist/{sandbox-Brb_5wzc.mjs → sandbox-DlVnK1Vi.mjs} +4 -4
  142. package/dist/{selfCheck-NuJKMInJ.cjs → selfCheck-B4lLZplk.cjs} +34 -34
  143. package/dist/selfCheck-DYTGBdIO.mjs +84 -0
  144. package/dist/{send-DEQJiq_x.mjs → send-B5bWW9Tl.mjs} +8 -8
  145. package/dist/{send-4dgHKC3u.cjs → send-BCwS6n_s.cjs} +8 -8
  146. package/dist/{server-C6AlUFkw.mjs → server-CEJfRQfj.mjs} +4 -4
  147. package/dist/{server-DWGcDmHG.cjs → server-CFWZehnC.cjs} +6 -6
  148. package/dist/{sessionLock-Dm8QyGo4.mjs → sessionLock-AwOYsKT7.mjs} +12 -4
  149. package/dist/{sessionLock-B1GgaO1q.cjs → sessionLock-LBWNjpHf.cjs} +12 -3
  150. package/dist/{sessionModeFile-BvOEJ4Fl.cjs → sessionModeFile-CyPuZRIU.cjs} +1 -1
  151. package/dist/{sessionModeFile-CuNAWCKL.mjs → sessionModeFile-fvFn1JVG.mjs} +1 -1
  152. package/dist/{sessionOps-DG5MMEp_.mjs → sessionOps-DZRH4-hV.mjs} +4 -4
  153. package/dist/{sessionOps-JP64uJmc.cjs → sessionOps-DzbZI3Eq.cjs} +4 -4
  154. package/dist/{sessionScanner-DqSk5Ol_.mjs → sessionScanner-Q_Ei2flB.mjs} +75 -19
  155. package/dist/{sessionScanner-BBPEgJ5S.cjs → sessionScanner-i-cgwFVw.cjs} +75 -19
  156. package/dist/{sessions-4isbBAWi.mjs → sessions-DAmjMAZN.mjs} +9 -9
  157. package/dist/{sessions-DgJuw_i0.cjs → sessions-DYK5hD4T.cjs} +9 -9
  158. package/dist/{setupOfflineReconnection-_MoZtsro.mjs → setupOfflineReconnection-BfDBxNdo.mjs} +2 -2
  159. package/dist/{setupOfflineReconnection-CKJKVIUS.cjs → setupOfflineReconnection-C2LO3hSP.cjs} +2 -2
  160. package/dist/{spawn-BTOG4tTm.mjs → spawn-BmjG5j5Y.mjs} +15 -14
  161. package/dist/{spawn-CshERWbY.cjs → spawn-GK_sXE8h.cjs} +15 -14
  162. package/dist/{spawnAgents-Czi2VDzj.mjs → spawnAgents-HDaE3C0-.mjs} +1 -1
  163. package/dist/{spawnAgents-McixdtV1.cjs → spawnAgents-vglexX9N.cjs} +1 -1
  164. package/dist/{spawnHappyCLI-Dc4xYm8P.mjs → spawnHappyCLI-B2h0P4b5.mjs} +1 -1
  165. package/dist/{spawnHappyCLI-Dd5_8Vex.cjs → spawnHappyCLI-J4iEhfyZ.cjs} +1 -1
  166. package/dist/specialCommands-DisVxagO.mjs +93 -0
  167. package/dist/specialCommands-DmJMKspE.cjs +96 -0
  168. package/dist/{startFileWatcher-B0VlG-Fn.mjs → startFileWatcher-CeK1k5gt.mjs} +1 -1
  169. package/dist/{startFileWatcher-1LedLBY-.cjs → startFileWatcher-xKo8AoYl.cjs} +1 -1
  170. package/dist/{streamRelay-C0AffuX6.cjs → streamRelay-Ce9sgcOV.cjs} +1 -1
  171. package/dist/{streamRelay-BzMEEvJU.mjs → streamRelay-Iogsh51a.mjs} +1 -1
  172. package/dist/{sync-DwUUGGFz.cjs → sync-Bvc-vh6C.cjs} +1 -1
  173. package/dist/{sync-Dfm6K2te.mjs → sync-CCwYpJMS.mjs} +1 -1
  174. package/dist/{systemPrompt-D41Zw1a3.mjs → systemPrompt-BNIkP3tR.mjs} +3 -3
  175. package/dist/{systemPrompt-CB1Ls0AE.cjs → systemPrompt-DwOddbuG.cjs} +3 -3
  176. package/dist/{teams-D8Ly3i6u.mjs → teams-DRrLBcys.mjs} +7 -7
  177. package/dist/{teams-NWv2ji16.cjs → teams-GHMCRZOw.cjs} +7 -7
  178. package/dist/{time-BbzJ7PJQ.cjs → time-BXvtjhe9.cjs} +1 -1
  179. package/dist/{time-v1Y_qEJp.mjs → time-PG5Dfwdv.mjs} +1 -1
  180. package/dist/{titleGenerator-cH6IkPRi.cjs → titleGenerator-B07bZA0V.cjs} +2 -2
  181. package/dist/{titleGenerator-BhoblAQY.mjs → titleGenerator-CIzfpfZW.mjs} +1 -1
  182. package/dist/{todo-D1hgWV6d.cjs → todo-B0aeoNu3.cjs} +6 -6
  183. package/dist/{todo-CuNct-fw.mjs → todo-CfL7SBFc.mjs} +6 -6
  184. package/dist/{tools-jof0Bu54.mjs → tools-D91mq5Ib.mjs} +1 -1
  185. package/dist/{tools-c2fb0CF5.cjs → tools-DJIANHSh.cjs} +1 -1
  186. package/dist/transcriptCursor-B7T_gkQ0.mjs +102 -0
  187. package/dist/transcriptCursor-DcXGLeSc.cjs +106 -0
  188. package/dist/{uninstall-BB7WYYAk.mjs → uninstall-5xz3Xvhf.mjs} +3 -3
  189. package/dist/{uninstall-VPH5GfrA.cjs → uninstall-AtzOfdrj.cjs} +3 -3
  190. package/package.json +7 -7
  191. package/scripts/terminal_status_forwarder.cjs +89 -0
  192. package/dist/defaultPermissionMode-BnxJPVHT.mjs +0 -4
  193. package/dist/defaultPermissionMode-CxmTXUQR.cjs +0 -7
  194. package/dist/mirrorProtocol-BNLtoWjO.mjs +0 -170
  195. package/dist/mirrorProtocol-BUtmg1ws.cjs +0 -186
  196. package/dist/selfCheck-BgwJ3NGS.mjs +0 -84
  197. package/dist/specialCommands-BSqhYg5X.mjs +0 -52
  198. package/dist/specialCommands-DSsTeRej.cjs +0 -54
@@ -1,82 +1,83 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-D0hkk7Vo.cjs');
4
- var controlClient = require('./controlClient-RWTlQA4_.cjs');
3
+ var logger = require('./logger-B_MWPbZz.cjs');
4
+ var controlClient = require('./controlClient-BI6Fw3fQ.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-CB1Ls0AE.cjs');
11
+ var systemPrompt = require('./systemPrompt-DwOddbuG.cjs');
12
12
  var path$1 = require('node:path');
13
- var specialCommands = require('./specialCommands-DSsTeRej.cjs');
13
+ var specialCommands = require('./specialCommands-DmJMKspE.cjs');
14
14
  require('axios');
15
15
  require('node:events');
16
16
  require('socket.io-client');
17
- var attachmentLimits = require('./attachmentLimits-eJZ4ZBjF.cjs');
17
+ var attachmentLimits = require('./attachmentLimits-BEYEEBm8.cjs');
18
18
  require('tweetnacl');
19
- var configuration = require('./configuration-BE61XNsg.cjs');
20
- require('./index-DqlyNgt4.cjs');
21
- require('./registerCommonHandlers--8ds2auE.cjs');
19
+ var configuration = require('./configuration-C3piBtxY.cjs');
20
+ require('./index-C9hI8a10.cjs');
21
+ require('./registerCommonHandlers-DVYB3iVn.cjs');
22
22
  require('os');
23
23
  require('child_process');
24
24
  require('@paralleldrive/cuid2');
25
- require('./persistence-C6ztVW1W.cjs');
25
+ require('./persistence-BYGl0QYw.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-BbzJ7PJQ.cjs');
31
+ var time = require('./time-BXvtjhe9.cjs');
32
32
  var node_fs = require('node:fs');
33
- var deterministicJson = require('./deterministicJson-C4Jo2RWy.cjs');
34
- var sessionScanner = require('./sessionScanner-BBPEgJ5S.cjs');
33
+ var deterministicJson = require('./deterministicJson-C7O2ulKY.cjs');
34
+ var sessionScanner = require('./sessionScanner-i-cgwFVw.cjs');
35
35
  var node_child_process = require('node:child_process');
36
- var streamRelay = require('./streamRelay-C0AffuX6.cjs');
37
- var attachmentContent = require('./attachmentContent-muDCe4Gy.cjs');
36
+ var streamRelay = require('./streamRelay-Ce9sgcOV.cjs');
37
+ var attachmentContent = require('./attachmentContent-HcJqFQW8.cjs');
38
38
  var promises = require('node:fs/promises');
39
- var claudeSessionFork = require('./claudeSessionFork-CDJq_b9r.cjs');
40
- var registerKillSessionHandler = require('./registerKillSessionHandler-CI23l8aJ.cjs');
41
- var doctor = require('./doctor-ZOQLE5AH.cjs');
39
+ var claudeSessionFork = require('./claudeSessionFork-Byd8zD1U.cjs');
40
+ var registerKillSessionHandler = require('./registerKillSessionHandler-BwXGKtg_.cjs');
41
+ var doctor = require('./doctor-BykBaMTr.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-cH6IkPRi.cjs');
45
+ var titleGenerator = require('./titleGenerator-B07bZA0V.cjs');
46
46
  var oneShotPrompts = require('./oneShotPrompts-CL0dip9C.cjs');
47
+ var reportProgressTool = require('./reportProgressTool-D4KB_4cP.cjs');
47
48
  require('node:util');
48
49
  require('./smallFastModel-D_uxGMo3.cjs');
49
50
  require('./trimIdent-4gvk9Wk6.cjs');
50
51
  require('node:os');
51
- require('./agentGuidance-B5NATuFa.cjs');
52
+ require('./agentGuidance-BtBx2xxE.cjs');
53
+ require('./rateLimitWindows-CusGIqlq.cjs');
52
54
  require('zod');
53
- require('./package-UkmvSFsg.cjs');
55
+ require('./package-C9ZP9bpX.cjs');
54
56
  require('util');
55
57
  require('crypto');
56
58
  require('path');
57
59
  require('cross-spawn');
58
60
  require('./authRelay-BdYkC1Po.cjs');
59
- require('./client-Do7cGPEq.cjs');
60
- require('./context-3WVw8qPz.cjs');
61
- require('./sessionOps-JP64uJmc.cjs');
61
+ require('./client-BKnKRLSt.cjs');
62
+ require('./context-Jrq4-eCZ.cjs');
63
+ require('./sessionOps-DzbZI3Eq.cjs');
62
64
  require('./resources-JDPugcDq.cjs');
63
- require('./tools-c2fb0CF5.cjs');
64
- require('./tools-mWqsE6ji.cjs');
65
- require('./client-uN9d6Git.cjs');
66
- require('./peerTools-CttfOxti.cjs');
65
+ require('./tools-DJIANHSh.cjs');
66
+ require('./peerTools-Dkbu7gag.cjs');
67
67
  require('./ids-B6ZC0HGt.cjs');
68
- require('./remoteSessionClient-BAkIwM2S.cjs');
68
+ require('./remoteSessionClient-PyUAIhwK.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('./assistantTools-BsrG3PD-.cjs');
72
+ require('./downloadTarget-CWTb2-EM.cjs');
73
73
  require('./terminals-B_bfC9c2.cjs');
74
74
  require('./terminalTitleSuggest-DhvRFX3H.cjs');
75
75
  require('./tmuxSocket-D-Xt6Vn-.cjs');
76
- require('./bootstrap-B1dMZA-u.cjs');
76
+ require('./bootstrap-Dj8WBiR2.cjs');
77
77
  require('./previewPath-B0rBdhy1.cjs');
78
- require('./sync-DwUUGGFz.cjs');
79
- require('./startFileWatcher-1LedLBY-.cjs');
78
+ require('./sync-Bvc-vh6C.cjs');
79
+ require('./transcriptCursor-DcXGLeSc.cjs');
80
+ require('./startFileWatcher-xKo8AoYl.cjs');
80
81
  require('node:readline');
81
82
  require('./doctor-u46qYYKX.cjs');
82
83
  require('ps-list');
@@ -86,6 +87,43 @@ require('fs');
86
87
  require('./cliUpdate-DsKXPFYp.cjs');
87
88
  require('url');
88
89
  require('node:module');
90
+ require('./client-D0T5-6Ds.cjs');
91
+ require('./precheckCompat-CWOi5c9L.cjs');
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
+ }
89
127
 
90
128
  class Session {
91
129
  path;
@@ -113,6 +151,8 @@ class Session {
113
151
  * for the Claude runner: an empty one says "nothing running", which is a
114
152
  * different statement from a runner that has no such notion (undefined). */
115
153
  backgroundTasks = [];
154
+ /** B-587 review P3-4: CronCreate / ScheduleWakeup pending in this Claude process. */
155
+ scheduledWakeups = createScheduledWakeupTracker();
116
156
  /**
117
157
  * Window after a user-initiated abort during which stray promise rejections
118
158
  * from tearing down the SDK query (MCP transports, in-flight tool calls,
@@ -159,6 +199,9 @@ class Session {
159
199
  return null;
160
200
  }
161
201
  };
202
+ /** B-551: transcript paths reported by Claude's SessionStart hook (set by
203
+ * runClaude); scanners prefer them over the cwd-derived path. */
204
+ transcriptPathHints = null;
162
205
  /** Callbacks to be notified when session ID is found/changed */
163
206
  sessionFoundCallbacks = [];
164
207
  /** Keep alive interval reference for cleanup */
@@ -3493,9 +3536,13 @@ async function claudeRemoteLauncher(session, onPermissionModeChange, onEffective
3493
3536
  let ongoingToolCalls = /* @__PURE__ */ new Map();
3494
3537
  let notifiedQuestionToolCalls = /* @__PURE__ */ new Set();
3495
3538
  function onMessage(message) {
3539
+ if (message.type === "rate_limit_event") {
3540
+ specialCommands.wrapperRateLimitReporter().observeClaude(message.rate_limit_info);
3541
+ }
3496
3542
  runtimeControls.observe(message);
3497
3543
  backgroundTasks.observe(message);
3498
3544
  session.setBackgroundTasks(backgroundTasks.list());
3545
+ session.scheduledWakeups.observe(message);
3499
3546
  if (isRuntimeCheckpointReplay(message)) return;
3500
3547
  if (message.type === "user" && isClaudeInterruptSentinelContent(message.message.content)) {
3501
3548
  sdkToLogConverter.convert(message);
@@ -3916,7 +3963,7 @@ async function loop(opts) {
3916
3963
  logger.logger.debug(`[loop] Iteration with mode: ${mode}`);
3917
3964
  switch (mode) {
3918
3965
  case "local": {
3919
- const { claudeLocalLauncher } = await Promise.resolve().then(function () { return require('./claudeLocalLauncher-B4y2BsmO.cjs'); });
3966
+ const { claudeLocalLauncher } = await Promise.resolve().then(function () { return require('./claudeLocalLauncher-Cf9QeYDT.cjs'); });
3920
3967
  const result = await claudeLocalLauncher(session);
3921
3968
  switch (result.type) {
3922
3969
  case "switch":
@@ -4091,6 +4138,12 @@ async function settleSessionOnExit(sessionId, intent, deps) {
4091
4138
  archiveReason: "User terminated"
4092
4139
  }));
4093
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
+ }
4094
4147
  deps.sendSessionDeath();
4095
4148
  try {
4096
4149
  if (intent === "archive") await deps.archiveSession(sessionId);
@@ -4101,8 +4154,14 @@ async function settleSessionOnExit(sessionId, intent, deps) {
4101
4154
  }
4102
4155
  class SessionExitGate {
4103
4156
  decided = null;
4157
+ hibernateCommitted = false;
4158
+ deferred = null;
4104
4159
  /** Returns the intent to act on, or null when cleanup already started. */
4105
4160
  claim(intent) {
4161
+ if (this.decided === "hibernate" && !this.hibernateCommitted && intent !== "hibernate") {
4162
+ if (this.deferred !== "archive") this.deferred = intent;
4163
+ return null;
4164
+ }
4106
4165
  if (this.decided !== null) return null;
4107
4166
  this.decided = intent;
4108
4167
  return intent;
@@ -4110,6 +4169,25 @@ class SessionExitGate {
4110
4169
  get current() {
4111
4170
  return this.decided;
4112
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
+ }
4113
4191
  }
4114
4192
  function exitIntentFromArchiveFlag(archive) {
4115
4193
  return archive ?? true ? "archive" : "offline";
@@ -4597,7 +4675,7 @@ class BoardAnalyzer {
4597
4675
  };
4598
4676
  const hash = computeInputHash(input);
4599
4677
  const now = Date.now();
4600
- if (this.options.selfReportState && deterministicJson.isSelfReportFresh(this.options.selfReportState, now)) {
4678
+ if (this.options.selfReportState && reportProgressTool.isSelfReportFresh(this.options.selfReportState, now)) {
4601
4679
  logger.logger.debug("[boardAnalyzer] recent self-report; skipping LLM analysis");
4602
4680
  return;
4603
4681
  }
@@ -4699,7 +4777,6 @@ exports.parseSpecialCommand = specialCommands.parseSpecialCommand;
4699
4777
  exports.contentLogMetadata = contentLogMetadata.contentLogMetadata;
4700
4778
  exports.RawJSONLinesSchema = types.RawJSONLinesSchema;
4701
4779
  exports.getProjectPath = path.getProjectPath;
4702
- exports.createSelfReportState = deterministicJson.createSelfReportState;
4703
4780
  exports.startHappyServer = deterministicJson.startHappyServer;
4704
4781
  exports.createSessionScanner = sessionScanner.createSessionScanner;
4705
4782
  exports.MessageQueue2 = registerKillSessionHandler.MessageQueue2;
@@ -4708,6 +4785,7 @@ exports.getEnvironmentInfo = doctor.getEnvironmentInfo;
4708
4785
  exports.EditReportThrottle = editPaths.EditReportThrottle;
4709
4786
  exports.extractClaudeEditPaths = editPaths.extractClaudeEditPaths;
4710
4787
  exports.TitleGenerator = titleGenerator.TitleGenerator;
4788
+ exports.createSelfReportState = reportProgressTool.createSelfReportState;
4711
4789
  exports.BoardAnalyzer = BoardAnalyzer;
4712
4790
  exports.FileRateLimiter = FileRateLimiter;
4713
4791
  exports.PrewarmHookGate = PrewarmHookGate;
@@ -1,84 +1,86 @@
1
- import { l as logger } from './logger-CknSVkIe.mjs';
2
- import { k as notifyDaemonSessionEvent, m as notifyDaemonClaudeAuthFailed } from './controlClient-Ci7HTMII.mjs';
3
- export { g as reportSessionEditToDaemon } from './controlClient-Ci7HTMII.mjs';
1
+ import { l as logger } from './logger-CbBv3q_b.mjs';
2
+ import { o as notifyDaemonSessionEvent, q as notifyDaemonClaudeAuthFailed } from './controlClient-DTheOlvC.mjs';
3
+ export { j as reportSessionEditToDaemon } from './controlClient-DTheOlvC.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-D41Zw1a3.mjs';
10
+ import { c as claudeCheckSession, s as systemPrompt } from './systemPrompt-BNIkP3tR.mjs';
11
11
  import { join, resolve, dirname } from 'node:path';
12
- import { p as parseSpecialCommand } from './specialCommands-BSqhYg5X.mjs';
12
+ import { p as parseSpecialCommand, w as wrapperRateLimitReporter } from './specialCommands-DisVxagO.mjs';
13
13
  import 'axios';
14
14
  import 'node:events';
15
15
  import 'socket.io-client';
16
- import { A as AsyncLock } from './attachmentLimits-B8nzhw-i.mjs';
16
+ import { A as AsyncLock } from './attachmentLimits-CxG3T18E.mjs';
17
17
  import 'tweetnacl';
18
- import { c as configuration, e as ensurePrivateDirectory } from './configuration-L1qcGTFM.mjs';
19
- import './index-vVWpCoTr.mjs';
20
- import './registerCommonHandlers-BR0J4g64.mjs';
18
+ import { c as configuration, e as ensurePrivateDirectory } from './configuration-WspKd2C2.mjs';
19
+ import './index-B0HEEYGh.mjs';
20
+ import './registerCommonHandlers-B0PVff2U.mjs';
21
21
  import 'os';
22
22
  import 'child_process';
23
23
  import '@paralleldrive/cuid2';
24
- import './persistence-DujtUH94.mjs';
24
+ import './persistence-ON0zpHfb.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-v1Y_qEJp.mjs';
30
+ import { d as delay } from './time-PG5Dfwdv.mjs';
31
31
  import { mkdirSync, writeFileSync, readFileSync, unlinkSync, renameSync, statSync, existsSync } from 'node:fs';
32
- import { h as hashObject, i as isSelfReportFresh } from './deterministicJson-BBwG-Ase.mjs';
33
- export { c as createSelfReportState, s as startHappyServer } from './deterministicJson-BBwG-Ase.mjs';
34
- import { F as Future } from './sessionScanner-DqSk5Ol_.mjs';
35
- export { c as createSessionScanner } from './sessionScanner-DqSk5Ol_.mjs';
32
+ import { h as hashObject } from './deterministicJson-BMMifViN.mjs';
33
+ export { s as startHappyServer } from './deterministicJson-BMMifViN.mjs';
34
+ import { F as Future } from './sessionScanner-Q_Ei2flB.mjs';
35
+ export { c as createSessionScanner } from './sessionScanner-Q_Ei2flB.mjs';
36
36
  import { execSync } from 'node:child_process';
37
- import { S as StreamRelay } from './streamRelay-BzMEEvJU.mjs';
38
- import { C as CLAUDE_ATTACHMENT_KINDS, c as chatAttachmentDirectory, a as stageClaudeAttachments, b as appendStagedAttachmentsToPrompt } from './attachmentContent-dzIs-wis.mjs';
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-j875mwU7.mjs';
39
39
  import { writeFile, rename, unlink, readFile } from 'node:fs/promises';
40
- import { F as ForkSourceMissingError } from './claudeSessionFork-CokUhS4r.mjs';
41
- export { M as MessageQueue2, r as registerKillSessionHandler } from './registerKillSessionHandler-Czz0tdki.mjs';
42
- export { g as getEnvironmentInfo } from './doctor-CAC6qY9Z.mjs';
40
+ import { F as ForkSourceMissingError } from './claudeSessionFork-CMzAva8G.mjs';
41
+ export { M as MessageQueue2, r as registerKillSessionHandler } from './registerKillSessionHandler-BJMHJHXe.mjs';
42
+ export { g as getEnvironmentInfo } from './doctor-D1KKyPzB.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-BhoblAQY.mjs';
47
- export { T as TitleGenerator } from './titleGenerator-BhoblAQY.mjs';
46
+ import { r as resolveClaudeBinary, a as runClaudeOneShot } from './titleGenerator-CIzfpfZW.mjs';
47
+ export { T as TitleGenerator } from './titleGenerator-CIzfpfZW.mjs';
48
48
  import { B as BOARD_ANALYZER_PROMPT_PREFIX } from './oneShotPrompts-DT4p6RNd.mjs';
49
+ import { i as isSelfReportFresh } from './reportProgressTool-BvB13EwC.mjs';
50
+ export { c as createSelfReportState } from './reportProgressTool-BvB13EwC.mjs';
49
51
  import 'node:util';
50
52
  import './smallFastModel-BLNgMrwR.mjs';
51
53
  import './trimIdent-BAjmv_TG.mjs';
52
54
  import 'node:os';
53
- import './agentGuidance-CQuNlNx8.mjs';
55
+ import './agentGuidance-BDYt2Qy2.mjs';
56
+ import './rateLimitWindows-vZ9Bo7aT.mjs';
54
57
  import 'zod';
55
- import './package-VIUXrYZ1.mjs';
58
+ import './package-DU1DxhH9.mjs';
56
59
  import 'util';
57
60
  import 'crypto';
58
61
  import 'path';
59
62
  import 'cross-spawn';
60
63
  import './authRelay-DSAvg1uv.mjs';
61
- import './client-BwaWdlCm.mjs';
62
- import './context-DaCCB4cm.mjs';
63
- import './sessionOps-DG5MMEp_.mjs';
64
+ import './client-Dsfy_SAb.mjs';
65
+ import './context-Cr6a3NTg.mjs';
66
+ import './sessionOps-DZRH4-hV.mjs';
64
67
  import './resources-BdFBQi8r.mjs';
65
- import './tools-jof0Bu54.mjs';
66
- import './tools-BVRoGcQH.mjs';
67
- import './client-CJZKBZCE.mjs';
68
- import './peerTools-SWITnkqz.mjs';
68
+ import './tools-D91mq5Ib.mjs';
69
+ import './peerTools-os2DVjA0.mjs';
69
70
  import './ids-DU6sLx4C.mjs';
70
- import './remoteSessionClient-DCAUHgPz.mjs';
71
+ import './remoteSessionClient-BzPXSC21.mjs';
71
72
  import '@modelcontextprotocol/sdk/server/mcp.js';
72
73
  import '@modelcontextprotocol/sdk/server/streamableHttp.js';
73
74
  import './limits-DIo7rEBR.mjs';
74
- import './assistantTools-DPGga5lM.mjs';
75
+ import './downloadTarget-Cp48jrIP.mjs';
75
76
  import './terminals-Dlg0x3nY.mjs';
76
77
  import './terminalTitleSuggest-CeKsX_V6.mjs';
77
78
  import './tmuxSocket-B8Yx20sT.mjs';
78
- import './bootstrap-D_ExGrY2.mjs';
79
+ import './bootstrap-BSOxYpaP.mjs';
79
80
  import './previewPath-CXN4Vag0.mjs';
80
- import './sync-Dfm6K2te.mjs';
81
- import './startFileWatcher-B0VlG-Fn.mjs';
81
+ import './sync-CCwYpJMS.mjs';
82
+ import './transcriptCursor-B7T_gkQ0.mjs';
83
+ import './startFileWatcher-CeK1k5gt.mjs';
82
84
  import 'node:readline';
83
85
  import './doctor-BPkYWSuq.mjs';
84
86
  import 'ps-list';
@@ -88,6 +90,43 @@ import 'fs';
88
90
  import './cliUpdate-Y34VGe9Y.mjs';
89
91
  import 'url';
90
92
  import 'node:module';
93
+ import './client-C7FYMer0.mjs';
94
+ import './precheckCompat-DeEbilbr.mjs';
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
+ }
91
130
 
92
131
  class Session {
93
132
  path;
@@ -115,6 +154,8 @@ class Session {
115
154
  * for the Claude runner: an empty one says "nothing running", which is a
116
155
  * different statement from a runner that has no such notion (undefined). */
117
156
  backgroundTasks = [];
157
+ /** B-587 review P3-4: CronCreate / ScheduleWakeup pending in this Claude process. */
158
+ scheduledWakeups = createScheduledWakeupTracker();
118
159
  /**
119
160
  * Window after a user-initiated abort during which stray promise rejections
120
161
  * from tearing down the SDK query (MCP transports, in-flight tool calls,
@@ -161,6 +202,9 @@ class Session {
161
202
  return null;
162
203
  }
163
204
  };
205
+ /** B-551: transcript paths reported by Claude's SessionStart hook (set by
206
+ * runClaude); scanners prefer them over the cwd-derived path. */
207
+ transcriptPathHints = null;
164
208
  /** Callbacks to be notified when session ID is found/changed */
165
209
  sessionFoundCallbacks = [];
166
210
  /** Keep alive interval reference for cleanup */
@@ -3495,9 +3539,13 @@ async function claudeRemoteLauncher(session, onPermissionModeChange, onEffective
3495
3539
  let ongoingToolCalls = /* @__PURE__ */ new Map();
3496
3540
  let notifiedQuestionToolCalls = /* @__PURE__ */ new Set();
3497
3541
  function onMessage(message) {
3542
+ if (message.type === "rate_limit_event") {
3543
+ wrapperRateLimitReporter().observeClaude(message.rate_limit_info);
3544
+ }
3498
3545
  runtimeControls.observe(message);
3499
3546
  backgroundTasks.observe(message);
3500
3547
  session.setBackgroundTasks(backgroundTasks.list());
3548
+ session.scheduledWakeups.observe(message);
3501
3549
  if (isRuntimeCheckpointReplay(message)) return;
3502
3550
  if (message.type === "user" && isClaudeInterruptSentinelContent(message.message.content)) {
3503
3551
  sdkToLogConverter.convert(message);
@@ -3918,7 +3966,7 @@ async function loop(opts) {
3918
3966
  logger.debug(`[loop] Iteration with mode: ${mode}`);
3919
3967
  switch (mode) {
3920
3968
  case "local": {
3921
- const { claudeLocalLauncher } = await import('./claudeLocalLauncher-Cq6bqAT4.mjs');
3969
+ const { claudeLocalLauncher } = await import('./claudeLocalLauncher-C9Cc438l.mjs');
3922
3970
  const result = await claudeLocalLauncher(session);
3923
3971
  switch (result.type) {
3924
3972
  case "switch":
@@ -4093,6 +4141,12 @@ async function settleSessionOnExit(sessionId, intent, deps) {
4093
4141
  archiveReason: "User terminated"
4094
4142
  }));
4095
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
+ }
4096
4150
  deps.sendSessionDeath();
4097
4151
  try {
4098
4152
  if (intent === "archive") await deps.archiveSession(sessionId);
@@ -4103,8 +4157,14 @@ async function settleSessionOnExit(sessionId, intent, deps) {
4103
4157
  }
4104
4158
  class SessionExitGate {
4105
4159
  decided = null;
4160
+ hibernateCommitted = false;
4161
+ deferred = null;
4106
4162
  /** Returns the intent to act on, or null when cleanup already started. */
4107
4163
  claim(intent) {
4164
+ if (this.decided === "hibernate" && !this.hibernateCommitted && intent !== "hibernate") {
4165
+ if (this.deferred !== "archive") this.deferred = intent;
4166
+ return null;
4167
+ }
4108
4168
  if (this.decided !== null) return null;
4109
4169
  this.decided = intent;
4110
4170
  return intent;
@@ -4112,6 +4172,25 @@ class SessionExitGate {
4112
4172
  get current() {
4113
4173
  return this.decided;
4114
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
+ }
4115
4194
  }
4116
4195
  function exitIntentFromArchiveFlag(archive) {
4117
4196
  return archive ?? true ? "archive" : "offline";