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
@@ -3,8 +3,8 @@
3
3
  var node_crypto = require('node:crypto');
4
4
  var promises = require('node:fs/promises');
5
5
  var path = require('node:path');
6
- var attachmentLimits = require('./attachmentLimits-eJZ4ZBjF.cjs');
7
- var configuration = require('./configuration-BE61XNsg.cjs');
6
+ var attachmentLimits = require('./attachmentLimits-BEYEEBm8.cjs');
7
+ var configuration = require('./configuration-C3piBtxY.cjs');
8
8
 
9
9
  const CLAUDE_ATTACHMENT_KINDS = [
10
10
  "image/jpeg",
@@ -1,8 +1,8 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import { writeFile, rename, unlink } from 'node:fs/promises';
3
3
  import { join, basename } from 'node:path';
4
- import { M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES } from './attachmentLimits-B8nzhw-i.mjs';
5
- import { e as ensurePrivateDirectory, b as hardenPrivateFile } from './configuration-L1qcGTFM.mjs';
4
+ import { M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES } from './attachmentLimits-CxG3T18E.mjs';
5
+ import { e as ensurePrivateDirectory, h as hardenPrivateFile } from './configuration-WspKd2C2.mjs';
6
6
 
7
7
  const CLAUDE_ATTACHMENT_KINDS = [
8
8
  "image/jpeg",
@@ -1,11 +1,13 @@
1
1
  'use strict';
2
2
 
3
3
  var z = require('zod');
4
- var index = require('./index-DqlyNgt4.cjs');
4
+ var index = require('./index-C9hI8a10.cjs');
5
5
 
6
6
  z.z.object({
7
7
  teamsVersion: z.z.number().int().positive().optional(),
8
8
  teamLaunchVersion: z.z.number().int().positive().optional(),
9
+ /** B-586: daemon serves the `worktree-*` RPCs. Absent on old daemons. */
10
+ worktreeVersion: z.z.number().int().positive().optional(),
9
11
  host: z.z.string(),
10
12
  platform: z.z.string(),
11
13
  happyCliVersion: z.z.string(),
@@ -115,6 +117,21 @@ const ClosedTerminalRecordSchema = z.z.object({
115
117
  attachTmux: z.z.string().optional(),
116
118
  closedAt: z.z.number()
117
119
  });
120
+ const RateLimitsStateSchema = z.z.object({
121
+ v: z.z.literal(1),
122
+ updatedAt: z.z.number(),
123
+ providers: z.z.record(z.z.string(), z.z.object({
124
+ observedAt: z.z.number(),
125
+ status: z.z.string().optional(),
126
+ windows: z.z.array(z.z.object({
127
+ kind: z.z.string(),
128
+ usedPercent: z.z.number(),
129
+ resetsAt: z.z.number().nullable(),
130
+ windowMinutes: z.z.number().optional(),
131
+ observedAt: z.z.number()
132
+ }))
133
+ }))
134
+ });
118
135
  z.z.object({
119
136
  agentVersions: index.AgentVersionsSchema.optional(),
120
137
  agentVersionEpoch: z.z.number().optional(),
@@ -198,6 +215,15 @@ z.z.object({
198
215
  rpcAvailable: z.z.boolean(),
199
216
  detectedAt: z.z.number()
200
217
  }).optional(),
218
+ /**
219
+ * B-549 capability flag: this daemon answers `history-search` (full-text
220
+ * search over the machine's Claude Code / Codex history, indexed locally).
221
+ * Same trust rule (`detectedAt >= startedAt`); old webs ignore it.
222
+ */
223
+ historySearch: z.z.object({
224
+ rpcAvailable: z.z.boolean(),
225
+ detectedAt: z.z.number()
226
+ }).optional(),
201
227
  /**
202
228
  * B-486: can web terminals on this machine be durable? `tmuxAvailable:
203
229
  * false` ⇒ every new terminal is a direct shell that dies with the daemon,
@@ -218,7 +244,19 @@ z.z.object({
218
244
  * restarts (the server returns the existing row and connect spreads it
219
245
  * forward), so a downgraded daemon carries this field along unchanged.
220
246
  */
221
- claudeAuth: ClaudeAuthStateSchema.optional()
247
+ claudeAuth: ClaudeAuthStateSchema.optional(),
248
+ /** B-555: see RateLimitsStateSchema. Old webs ignore it; old daemons carry it forward unchanged. */
249
+ rateLimits: RateLimitsStateSchema.optional(),
250
+ /**
251
+ * B-587 capability + setting: this daemon answers `agent-hibernation-set`
252
+ * and hibernates idle UI sessions after `idleMs` (0 = off). Same trust rule
253
+ * as the other capability flags (`detectedAt >= startedAt`).
254
+ */
255
+ agentHibernation: z.z.object({
256
+ idleMs: z.z.number(),
257
+ rpcAvailable: z.z.boolean(),
258
+ detectedAt: z.z.number()
259
+ }).passthrough().optional()
222
260
  });
223
261
  const MessageMetaSchema = z.z.object({
224
262
  sentFrom: z.z.string().optional(),
@@ -1,9 +1,11 @@
1
1
  import { z } from 'zod';
2
- import { k as AgentVersionsSchema } from './index-vVWpCoTr.mjs';
2
+ import { m as AgentVersionsSchema } from './index-B0HEEYGh.mjs';
3
3
 
4
4
  z.object({
5
5
  teamsVersion: z.number().int().positive().optional(),
6
6
  teamLaunchVersion: z.number().int().positive().optional(),
7
+ /** B-586: daemon serves the `worktree-*` RPCs. Absent on old daemons. */
8
+ worktreeVersion: z.number().int().positive().optional(),
7
9
  host: z.string(),
8
10
  platform: z.string(),
9
11
  happyCliVersion: z.string(),
@@ -113,6 +115,21 @@ const ClosedTerminalRecordSchema = z.object({
113
115
  attachTmux: z.string().optional(),
114
116
  closedAt: z.number()
115
117
  });
118
+ const RateLimitsStateSchema = z.object({
119
+ v: z.literal(1),
120
+ updatedAt: z.number(),
121
+ providers: z.record(z.string(), z.object({
122
+ observedAt: z.number(),
123
+ status: z.string().optional(),
124
+ windows: z.array(z.object({
125
+ kind: z.string(),
126
+ usedPercent: z.number(),
127
+ resetsAt: z.number().nullable(),
128
+ windowMinutes: z.number().optional(),
129
+ observedAt: z.number()
130
+ }))
131
+ }))
132
+ });
116
133
  z.object({
117
134
  agentVersions: AgentVersionsSchema.optional(),
118
135
  agentVersionEpoch: z.number().optional(),
@@ -196,6 +213,15 @@ z.object({
196
213
  rpcAvailable: z.boolean(),
197
214
  detectedAt: z.number()
198
215
  }).optional(),
216
+ /**
217
+ * B-549 capability flag: this daemon answers `history-search` (full-text
218
+ * search over the machine's Claude Code / Codex history, indexed locally).
219
+ * Same trust rule (`detectedAt >= startedAt`); old webs ignore it.
220
+ */
221
+ historySearch: z.object({
222
+ rpcAvailable: z.boolean(),
223
+ detectedAt: z.number()
224
+ }).optional(),
199
225
  /**
200
226
  * B-486: can web terminals on this machine be durable? `tmuxAvailable:
201
227
  * false` ⇒ every new terminal is a direct shell that dies with the daemon,
@@ -216,7 +242,19 @@ z.object({
216
242
  * restarts (the server returns the existing row and connect spreads it
217
243
  * forward), so a downgraded daemon carries this field along unchanged.
218
244
  */
219
- claudeAuth: ClaudeAuthStateSchema.optional()
245
+ claudeAuth: ClaudeAuthStateSchema.optional(),
246
+ /** B-555: see RateLimitsStateSchema. Old webs ignore it; old daemons carry it forward unchanged. */
247
+ rateLimits: RateLimitsStateSchema.optional(),
248
+ /**
249
+ * B-587 capability + setting: this daemon answers `agent-hibernation-set`
250
+ * and hibernates idle UI sessions after `idleMs` (0 = off). Same trust rule
251
+ * as the other capability flags (`detectedAt >= startedAt`).
252
+ */
253
+ agentHibernation: z.object({
254
+ idleMs: z.number(),
255
+ rpcAvailable: z.boolean(),
256
+ detectedAt: z.number()
257
+ }).passthrough().optional()
220
258
  });
221
259
  const MessageMetaSchema = z.object({
222
260
  sentFrom: z.string().optional(),
@@ -1,24 +1,24 @@
1
1
  import chalk from 'chalk';
2
- import { readCredentials, readSettings, clearCredentials, clearMachineId } from './persistence-DujtUH94.mjs';
3
- import { a as authAndSetupMachineIfNeeded } from './auth-BY5ujhGn.mjs';
4
- import { c as configuration } from './configuration-L1qcGTFM.mjs';
2
+ import { g as readCredentials, r as readSettings, h as clearCredentials, i as clearMachineId } from './persistence-ON0zpHfb.mjs';
3
+ import { a as authAndSetupMachineIfNeeded } from './auth-CFS9Lfgv.mjs';
4
+ import { c as configuration } from './configuration-WspKd2C2.mjs';
5
5
  import { existsSync, rmSync } from 'node:fs';
6
6
  import { createInterface } from 'node:readline';
7
- import { c as checkIfDaemonRunningAndCleanupStaleState, a as stopDaemon } from './controlClient-Ci7HTMII.mjs';
8
- import { l as logger } from './logger-CknSVkIe.mjs';
7
+ import { a as checkIfDaemonRunningAndCleanupStaleState, b as stopDaemon } from './controlClient-DTheOlvC.mjs';
8
+ import { l as logger } from './logger-CbBv3q_b.mjs';
9
9
  import os from 'node:os';
10
10
  import { c as credentialRelayProblem } from './authRelay-DSAvg1uv.mjs';
11
11
  import 'node:fs/promises';
12
12
  import 'zod';
13
- import 'node:path';
14
- import './package-VIUXrYZ1.mjs';
15
13
  import 'node:crypto';
16
14
  import 'tweetnacl';
17
- import 'node:util';
18
15
  import 'axios';
19
- import './time-v1Y_qEJp.mjs';
20
- import './browser-mwzpOmcw.mjs';
16
+ import './time-PG5Dfwdv.mjs';
17
+ import './browser-BCFIHOvo.mjs';
21
18
  import 'open';
19
+ import 'node:path';
20
+ import './package-DU1DxhH9.mjs';
21
+ import 'node:util';
22
22
 
23
23
  function localMachineIdentityStatus(machineId) {
24
24
  if (machineId) {
@@ -1,12 +1,12 @@
1
1
  import { e as encodeBase64, c as credentialRelayProblem, f as encodeBase64Url, d as decodeBase64 } from './authRelay-DSAvg1uv.mjs';
2
- import { c as configuration } from './configuration-L1qcGTFM.mjs';
2
+ import { c as configuration } from './configuration-WspKd2C2.mjs';
3
3
  import { randomUUID, randomBytes } from 'node:crypto';
4
4
  import tweetnacl from 'tweetnacl';
5
5
  import axios from 'axios';
6
- import { d as delay } from './time-v1Y_qEJp.mjs';
7
- import { readCredentials, readSettingsOutcome, updateSettings, writeCredentialsLegacy, writeCredentialsDataKey } from './persistence-DujtUH94.mjs';
8
- import { o as openBrowser } from './browser-mwzpOmcw.mjs';
9
- import { l as logger } from './logger-CknSVkIe.mjs';
6
+ import { d as delay } from './time-PG5Dfwdv.mjs';
7
+ import { g as readCredentials, m as readSettingsOutcome, u as updateSettings, w as writeCredentialsLegacy, n as writeCredentialsDataKey } from './persistence-ON0zpHfb.mjs';
8
+ import { o as openBrowser } from './browser-BCFIHOvo.mjs';
9
+ import { l as logger } from './logger-CbBv3q_b.mjs';
10
10
 
11
11
  function generateWebAuthUrl(publicKey) {
12
12
  const publicKeyBase64 = encodeBase64(publicKey, "base64url");
@@ -1,26 +1,26 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var persistence = require('./persistence-C6ztVW1W.cjs');
5
- var auth = require('./auth-CfLd3phE.cjs');
6
- var configuration = require('./configuration-BE61XNsg.cjs');
4
+ var persistence = require('./persistence-BYGl0QYw.cjs');
5
+ var auth = require('./auth-VzWpbo5P.cjs');
6
+ var configuration = require('./configuration-C3piBtxY.cjs');
7
7
  var node_fs = require('node:fs');
8
8
  var node_readline = require('node:readline');
9
- var controlClient = require('./controlClient-RWTlQA4_.cjs');
10
- var logger = require('./logger-D0hkk7Vo.cjs');
9
+ var controlClient = require('./controlClient-BI6Fw3fQ.cjs');
10
+ var logger = require('./logger-B_MWPbZz.cjs');
11
11
  var os = require('node:os');
12
12
  var authRelay = require('./authRelay-BdYkC1Po.cjs');
13
13
  require('node:fs/promises');
14
14
  require('zod');
15
- require('node:path');
16
- require('./package-UkmvSFsg.cjs');
17
15
  require('node:crypto');
18
16
  require('tweetnacl');
19
- require('node:util');
20
17
  require('axios');
21
- require('./time-BbzJ7PJQ.cjs');
22
- require('./browser-_gV7tcPs.cjs');
18
+ require('./time-BXvtjhe9.cjs');
19
+ require('./browser-BoCV40yC.cjs');
23
20
  require('open');
21
+ require('node:path');
22
+ require('./package-C9ZP9bpX.cjs');
23
+ require('node:util');
24
24
 
25
25
  function localMachineIdentityStatus(machineId) {
26
26
  if (machineId) {
@@ -1,14 +1,14 @@
1
1
  'use strict';
2
2
 
3
3
  var authRelay = require('./authRelay-BdYkC1Po.cjs');
4
- var configuration = require('./configuration-BE61XNsg.cjs');
4
+ var configuration = require('./configuration-C3piBtxY.cjs');
5
5
  var node_crypto = require('node:crypto');
6
6
  var tweetnacl = require('tweetnacl');
7
7
  var axios = require('axios');
8
- var time = require('./time-BbzJ7PJQ.cjs');
9
- var persistence = require('./persistence-C6ztVW1W.cjs');
10
- var browser = require('./browser-_gV7tcPs.cjs');
11
- var logger = require('./logger-D0hkk7Vo.cjs');
8
+ var time = require('./time-BXvtjhe9.cjs');
9
+ var persistence = require('./persistence-BYGl0QYw.cjs');
10
+ var browser = require('./browser-BoCV40yC.cjs');
11
+ var logger = require('./logger-B_MWPbZz.cjs');
12
12
 
13
13
  function generateWebAuthUrl(publicKey) {
14
14
  const publicKeyBase64 = authRelay.encodeBase64(publicKey, "base64url");
@@ -4,49 +4,51 @@ var chalk = require('chalk');
4
4
  var os = require('node:os');
5
5
  var node_fs = require('node:fs');
6
6
  var path = require('node:path');
7
- var index = require('./index-DqlyNgt4.cjs');
8
- var configuration = require('./configuration-BE61XNsg.cjs');
9
- var client = require('./client-uN9d6Git.cjs');
7
+ var index = require('./index-C9hI8a10.cjs');
8
+ var configuration = require('./configuration-C3piBtxY.cjs');
9
+ var client = require('./client-D0T5-6Ds.cjs');
10
10
  var template = require('./template-BaHAmH2K.cjs');
11
- var install = require('./install-Cs5qAPrB.cjs');
12
- var sessionOps = require('./sessionOps-JP64uJmc.cjs');
13
- var spawn = require('./spawn-CshERWbY.cjs');
14
- var spawnAgents = require('./spawnAgents-McixdtV1.cjs');
15
- var time = require('./time-BbzJ7PJQ.cjs');
11
+ var install = require('./install-Cf6AFSWC.cjs');
12
+ var precheckCompat = require('./precheckCompat-CWOi5c9L.cjs');
13
+ var sessionOps = require('./sessionOps-DzbZI3Eq.cjs');
14
+ var spawn = require('./spawn-GK_sXE8h.cjs');
15
+ var spawnAgents = require('./spawnAgents-vglexX9N.cjs');
16
+ var time = require('./time-BXvtjhe9.cjs');
16
17
  require('zod');
17
18
  require('@paralleldrive/cuid2');
18
- require('./package-UkmvSFsg.cjs');
19
+ require('./package-C9ZP9bpX.cjs');
19
20
  require('node:fs/promises');
20
- require('./persistence-C6ztVW1W.cjs');
21
+ require('./persistence-BYGl0QYw.cjs');
21
22
  require('./authRelay-BdYkC1Po.cjs');
22
23
  require('node:crypto');
23
24
  require('tweetnacl');
24
- require('./logger-D0hkk7Vo.cjs');
25
+ require('./logger-B_MWPbZz.cjs');
25
26
  require('node:util');
26
27
  require('./resources-JDPugcDq.cjs');
27
28
  require('axios');
28
- require('./controlClient-RWTlQA4_.cjs');
29
+ require('./controlClient-BI6Fw3fQ.cjs');
29
30
  require('socket.io-client');
30
31
  require('./backgroundTaskActivity-CBvUdj39.cjs');
31
32
  require('./path-B7zW-WwE.cjs');
32
- require('./claudeSessionFork-CDJq_b9r.cjs');
33
+ require('./claudeSessionFork-Byd8zD1U.cjs');
33
34
  require('node:readline');
34
- require('./codexAppServerClient-BuSdeUxT.cjs');
35
+ require('./codexAppServerClient-TiW9OBk4.cjs');
35
36
  require('node:child_process');
36
37
  require('cross-spawn');
37
38
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
38
- require('./manager-Cly8xVIR.cjs');
39
+ require('./manager-HrEj442o.cjs');
39
40
  require('@anthropic-ai/sandbox-runtime');
41
+ require('./rateLimitWindows-CusGIqlq.cjs');
40
42
  require('./codexThreadFork-DNekT4nQ.cjs');
41
- require('./createSessionMetadata-CPGTztXP.cjs');
43
+ require('./createSessionMetadata-zQSz3hgk.cjs');
42
44
  require('./projectPath-ChLhdOyt.cjs');
43
45
  require('path');
44
46
  require('url');
45
47
  require('./forkBackfill-8eLDeS73.cjs');
46
48
 
47
49
  const AUTO_ACTIONS = ["list", "show", "create", "edit", "pause", "resume", "rm", "run", "fire", "runs", "cancel", "ack", "report", "skill", "install", "uninstall", "help"];
48
- const VALUE_FLAGS = ["--name", "--rename", "--description", "--machine", "--cron", "--tz", "--every", "--at", "--spawn-dir", "--prompt", "--prompt-file", "--agent", "--model", "--permission-mode", "--sticky-key", "--send-session", "--cwd", "--env", "--timeout", "--concurrency", "--max-runtime", "--payload", "--payload-json", "--payload-file", "--dedupe-key", "--status", "--limit", "--run", "--summary", "--error", "--attention", "--host", "--home"];
49
- const BOOL_FLAGS = ["--manual", "--script", "--worktree", "--paused", "--wait", "--json", "--apply", "--all-machines", "--all", "--attention", "--help", "-h"];
50
+ const VALUE_FLAGS = ["--name", "--rename", "--description", "--machine", "--cron", "--tz", "--every", "--at", "--spawn-dir", "--prompt", "--prompt-file", "--agent", "--model", "--permission-mode", "--sticky-key", "--send-session", "--cwd", "--env", "--timeout", "--concurrency", "--max-runtime", "--payload", "--payload-json", "--payload-file", "--dedupe-key", "--status", "--limit", "--run", "--summary", "--error", "--attention", "--host", "--home", "--precheck-shell", "--precheck-argv", "--precheck-cwd", "--precheck-timeout"];
51
+ const BOOL_FLAGS = ["--manual", "--script", "--worktree", "--paused", "--wait", "--json", "--apply", "--all-machines", "--all", "--attention", "--precheck-output", "--no-precheck", "--help", "-h"];
50
52
  function parseAutoArgs(args) {
51
53
  const command = { action: "help", flags: {}, env: [], bools: /* @__PURE__ */ new Set(), argv: [] };
52
54
  if (args.length === 0) return command;
@@ -141,6 +143,52 @@ function actionFromCommand(command, current) {
141
143
  }
142
144
  return { kind: "spawn", agent: flags["--agent"] ?? "claude", directory: path.resolve(flags["--spawn-dir"]), prompt, ...spawnDetails(command) };
143
145
  }
146
+ function precheckFromCommand(command, current) {
147
+ const { flags, bools } = command;
148
+ const shell = flags["--precheck-shell"];
149
+ const argvJson = flags["--precheck-argv"];
150
+ const modifiers = ["--precheck-cwd", "--precheck-timeout"].filter((flag) => flags[flag] !== void 0).concat(bools.has("--precheck-output") ? ["--precheck-output"] : []);
151
+ if (bools.has("--no-precheck")) {
152
+ if (shell !== void 0 || argvJson !== void 0 || modifiers.length) throw new Error("--no-precheck cannot be combined with other --precheck-* options");
153
+ return null;
154
+ }
155
+ if (shell === void 0 && argvJson === void 0 && modifiers.length === 0) return void 0;
156
+ if (shell !== void 0 && argvJson !== void 0) throw new Error("Use only one of --precheck-shell and --precheck-argv");
157
+ let base;
158
+ if (shell !== void 0) base = { shell };
159
+ else if (argvJson !== void 0) {
160
+ let argv;
161
+ try {
162
+ argv = JSON.parse(argvJson);
163
+ } catch {
164
+ throw new Error(`--precheck-argv must be a JSON array of strings, e.g. '["./has-new.sh","--since","5m"]'`);
165
+ }
166
+ if (!Array.isArray(argv) || argv.length === 0 || !argv.every((part) => typeof part === "string" && part.length > 0)) throw new Error("--precheck-argv must be a non-empty JSON array of non-empty strings");
167
+ base = { command: argv };
168
+ } else {
169
+ if (!current) throw new Error(`${modifiers.join(", ")} need a precheck: give --precheck-shell <line> or --precheck-argv <json>`);
170
+ base = current;
171
+ }
172
+ let timeoutMs;
173
+ if (flags["--precheck-timeout"] !== void 0) {
174
+ timeoutMs = template.parseDuration(flags["--precheck-timeout"]);
175
+ if (timeoutMs < 1e3 || timeoutMs > index.AUTOMATION_PRECHECK_MAX_TIMEOUT_MS) throw new Error(`--precheck-timeout must be between 1s and ${index.AUTOMATION_PRECHECK_MAX_TIMEOUT_MS / 6e4}m`);
176
+ }
177
+ const precheck = {
178
+ ...base,
179
+ ...flags["--precheck-cwd"] !== void 0 ? { cwd: flags["--precheck-cwd"] } : {},
180
+ ...timeoutMs !== void 0 ? { timeoutMs } : {},
181
+ ...bools.has("--precheck-output") ? { includeOutput: true } : {}
182
+ };
183
+ const parsed = index.AutomationPrecheckSchema.safeParse(precheck);
184
+ if (!parsed.success) throw new Error(`Invalid precheck: ${parsed.error.issues[0]?.message ?? "check the --precheck-* options"}`);
185
+ return parsed.data;
186
+ }
187
+ function describePrecheck(precheck) {
188
+ const what = precheck.shell !== void 0 ? `sh: ${precheck.shell}` : `argv: ${JSON.stringify(precheck.command)}`;
189
+ const extras = [precheck.cwd ? `cwd ${precheck.cwd}` : null, precheck.timeoutMs ? `timeout ${Math.round(precheck.timeoutMs / 1e3)}s` : null, precheck.includeOutput ? "output \u2192 prompt" : null].filter(Boolean);
190
+ return extras.length ? `${what} (${extras.join(", ")})` : what;
191
+ }
144
192
  function spawnDetails(command) {
145
193
  const { flags, bools } = command;
146
194
  if (flags["--agent"] !== void 0 && !spawnAgents.SPAWN_AGENTS.includes(flags["--agent"])) throw new Error(`--agent must be one of: ${spawnAgents.SPAWN_AGENTS.join(", ")}`);
@@ -182,6 +230,14 @@ ${chalk.bold("Action (one):")}
182
230
  --send-session <id> --prompt <text>|--prompt-file <file>
183
231
  --script -- <argv\u2026> [--cwd <dir>] [--env K=V]... [--timeout <dur>]
184
232
 
233
+ ${chalk.bold("Precheck (optional, runs before the action; exit 0 runs it, anything else records a skip):")}
234
+ --precheck-shell '<command line>' | --precheck-argv '<json array>'
235
+ [--precheck-cwd <dir>] [--precheck-timeout <dur>] (default 60s, max 10m)
236
+ [--precheck-output] append the precheck's stdout to the spawn/send prompt
237
+ --no-precheck edit: remove the precheck
238
+ A shell line is not template-rendered; read the payload from $VH_AUTOMATION_PAYLOAD.
239
+ Consecutive scheduled skips for the same reason fold into one run shown as \xD7N.
240
+
185
241
  ${chalk.bold("Options:")}
186
242
  --machine <id>|this Executing machine (default: this machine)
187
243
  --description <text>
@@ -206,12 +262,14 @@ function printAutomation(a) {
206
262
  if (a.description) console.log(` ${a.description}`);
207
263
  console.log(` trigger: ${template.describeTrigger(a.trigger)} next: ${fmtTime(a.nextRunAt)}`);
208
264
  console.log(` action: ${template.describeAction(a.action)}`);
265
+ if (a.precheck) console.log(` precheck: ${describePrecheck(a.precheck)}`);
209
266
  console.log(` machine: ${a.machineId} concurrency: ${a.concurrency} max runtime: ${Math.round(a.maxRuntimeMs / 6e4)}m`);
210
267
  console.log(` last run: ${fmtTime(a.lastRunAt)} ${a.lastRunStatus ?? ""}`);
211
268
  }
212
269
  function runLine(run) {
213
270
  const status = run.status === "done" ? chalk.green(run.status) : ["failed", "expired"].includes(run.status) ? chalk.red(run.status) : run.status === "running" ? chalk.cyan(run.status) : run.status;
214
- return `${fmtTime(run.createdAt)} ${status.padEnd(9)} ${run.automationName.padEnd(20)} ${run.source.padEnd(8)} ${run.id}${run.needsAttention ? chalk.yellow(` ! ${run.attentionReason ?? "attention"}`) : ""}`;
271
+ const folded = (run.occurrenceCount ?? 1) > 1 ? ` \xD7${run.occurrenceCount}` : "";
272
+ return `${fmtTime(run.createdAt)} ${status.padEnd(9)} ${run.automationName.padEnd(20)} ${run.source.padEnd(8)} ${run.id}${folded}${run.status === "skipped" && run.error ? chalk.dim(` ${run.error}`) : ""}${run.needsAttention ? chalk.yellow(` ! ${run.attentionReason ?? "attention"}`) : ""}`;
215
273
  }
216
274
  function printRun(run) {
217
275
  console.log(runLine(run));
@@ -313,7 +371,9 @@ async function handleAutoCommand(args) {
313
371
  ...command.flags["--max-runtime"] !== void 0 ? { maxRuntimeMs: template.parseDuration(command.flags["--max-runtime"]) } : {},
314
372
  ...command.bools.has("--paused") ? { status: "paused" } : {}
315
373
  };
316
- const automation = await client$1.create(input);
374
+ const precheck = precheckFromCommand(command);
375
+ if (precheck) input.precheck = precheck;
376
+ const automation = await precheckCompat.createAutomationChecked(client$1, input);
317
377
  if (json) {
318
378
  console.log(JSON.stringify({ automation }));
319
379
  return;
@@ -336,8 +396,10 @@ async function handleAutoCommand(args) {
336
396
  ...command.flags["--concurrency"] !== void 0 ? { concurrency: concurrency(command.flags["--concurrency"]) } : {},
337
397
  ...command.flags["--max-runtime"] !== void 0 ? { maxRuntimeMs: template.parseDuration(command.flags["--max-runtime"]) } : {}
338
398
  };
399
+ const precheck = precheckFromCommand(command, current.precheck);
400
+ if (precheck !== void 0) input.precheck = precheck;
339
401
  if (Object.keys(input).length === 1) throw new Error("Nothing to change");
340
- const automation = await client$1.update(current.id, input);
402
+ const automation = await precheckCompat.updateAutomationChecked(client$1, current.id, input);
341
403
  if (json) {
342
404
  console.log(JSON.stringify({ automation }));
343
405
  return;
@@ -470,5 +532,7 @@ function concurrency(value) {
470
532
  exports.AUTO_ACTIONS = AUTO_ACTIONS;
471
533
  exports.AUTO_HELP = AUTO_HELP;
472
534
  exports.actionFromCommand = actionFromCommand;
535
+ exports.describePrecheck = describePrecheck;
473
536
  exports.handleAutoCommand = handleAutoCommand;
474
537
  exports.parseAutoArgs = parseAutoArgs;
538
+ exports.precheckFromCommand = precheckFromCommand;