very-happy-cli 0.2.180 → 0.2.181

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 (200) hide show
  1. package/dist/{AcpBackend-DfRDtMcG.cjs → AcpBackend-CgHb_ya5.cjs} +3 -3
  2. package/dist/{AcpBackend-B8Zi30Zh.mjs → AcpBackend-DZGCSuXF.mjs} +3 -3
  3. package/dist/{AcpSessionManager-CASKOnOj.cjs → AcpSessionManager-CacC2EVn.cjs} +1 -1
  4. package/dist/{AcpSessionManager-i8Rab0xT.mjs → AcpSessionManager-DwuPzWBh.mjs} +1 -1
  5. package/dist/{BasePermissionHandler-BlM_tfej.cjs → BasePermissionHandler-DCP8ZEB4.cjs} +1 -1
  6. package/dist/{BasePermissionHandler-26fKbRCm.mjs → BasePermissionHandler-Uo-GUjbb.mjs} +1 -1
  7. package/dist/{acpSessionResume-B9l54P-X.mjs → acpSessionResume-9OLTD6kT.mjs} +1 -1
  8. package/dist/{acpSessionResume-CR5pmgVo.cjs → acpSessionResume-BaVMD80f.cjs} +1 -1
  9. package/dist/{agentHome-CmGy0NWv.mjs → agentHome-B1BsKeqD.mjs} +4 -4
  10. package/dist/{agentHome-C7Sb7-Tz.cjs → agentHome-BtUmGcPX.cjs} +4 -4
  11. package/dist/{api-DM7b1OKj.cjs → api-COHFAkb_.cjs} +10 -10
  12. package/dist/{api-Hov8p7CA.mjs → api-Dr3wXL_7.mjs} +10 -10
  13. package/dist/{apiMachine-CwGEhQDT.mjs → apiMachine-CHEzPQdS.mjs} +54 -32
  14. package/dist/{apiMachine-DkGRj-Ai.cjs → apiMachine-D8H7CXaz.cjs} +55 -33
  15. package/dist/{attachmentContent-CIn4iPEk.mjs → attachmentContent-1YwtKgWl.mjs} +2 -2
  16. package/dist/{attachmentContent-CEm13_gF.cjs → attachmentContent-mIhbtRKl.cjs} +2 -2
  17. package/dist/{auth-rggxMpEE.mjs → auth-CbZkcMAb.mjs} +8 -8
  18. package/dist/{auth-CBXnm-Mj.cjs → auth-CgQP7d0q.cjs} +5 -5
  19. package/dist/{auth-BG1DY0gj.mjs → auth-DZsthtSk.mjs} +5 -5
  20. package/dist/{auth-Dawj7pP5.cjs → auth-Fg8fLadK.cjs} +8 -8
  21. package/dist/{auto-CbYOfoPS.cjs → auto-BB7kqSh5.cjs} +18 -18
  22. package/dist/{auto-CXXLXGeL.mjs → auto-_T-Ud-z5.mjs} +18 -18
  23. package/dist/{bootstrap-Dt5I1SOl.mjs → bootstrap-B6EkZh4u.mjs} +2 -2
  24. package/dist/{bootstrap-DoA7okld.cjs → bootstrap-CYtOtbi7.cjs} +2 -2
  25. package/dist/{browser-DUNetFT4.mjs → browser-C2qhUHSE.mjs} +1 -1
  26. package/dist/{browser-DZ6qRtfH.cjs → browser-DjNNQQk2.cjs} +1 -1
  27. package/dist/{claudeLocal-OHWQigCl.mjs → claudeLocal-BAFjWhZ8.mjs} +6 -6
  28. package/dist/{claudeLocal--DNyMOSv.cjs → claudeLocal-O_w7-fBh.cjs} +6 -6
  29. package/dist/{claudeLocalLauncher-BStvfa7M.mjs → claudeLocalLauncher-CWn30LZR.mjs} +11 -11
  30. package/dist/{claudeLocalLauncher-BhvPbcyH.cjs → claudeLocalLauncher-Df3zg1q0.cjs} +11 -11
  31. package/dist/{claudeSessionFork-GAVWhiKG.mjs → claudeSessionFork-2ZkSTOGn.mjs} +1 -1
  32. package/dist/{claudeSessionFork-Be16vzGc.cjs → claudeSessionFork-pwcKqB-e.cjs} +1 -1
  33. package/dist/{client-Ca5Pcgy_.mjs → client-BKyU66lg.mjs} +2 -2
  34. package/dist/{client-D_loZ9IK.cjs → client-CUO3ItoB.cjs} +34 -8
  35. package/dist/{client-CnB7kRCT.mjs → client-CXOnzuOy.mjs} +2 -2
  36. package/dist/{client-DJplzPjD.cjs → client-DWs6k041.cjs} +2 -2
  37. package/dist/{client-BWjaHKtj.cjs → client-D_U2VjO3.cjs} +2 -2
  38. package/dist/{client-D4uPb1uu.mjs → client-DsQcxVUV.mjs} +34 -9
  39. package/dist/codex/happyMcpStdioBridge.cjs +17 -17
  40. package/dist/codex/happyMcpStdioBridge.mjs +17 -17
  41. package/dist/{codexAppServerClient-PE-12AsW.cjs → codexAppServerClient-BRX3JZ_5.cjs} +3 -3
  42. package/dist/{codexAppServerClient-CO4G6OS4.mjs → codexAppServerClient-C3JO3pwM.mjs} +3 -3
  43. package/dist/{codexCommand-B_xUH79E.mjs → codexCommand-BZIAAqKS.mjs} +47 -45
  44. package/dist/{codexCommand-BNoD1t1C.cjs → codexCommand-dKOc5iQl.cjs} +47 -45
  45. package/dist/{codexTermination-BmBbizFK.cjs → codexTermination-BVR9HeVI.cjs} +1 -1
  46. package/dist/{codexTermination-Dx48ma6e.mjs → codexTermination-ztFkwHrG.mjs} +1 -1
  47. package/dist/{config-DSu0Blos.mjs → config-NbHjx8ge.mjs} +3 -3
  48. package/dist/{config-CtwEUxUP.cjs → config-cftYxLC7.cjs} +3 -3
  49. package/dist/{configuration-PxzEJumr.mjs → configuration-BPrfb17M.mjs} +1 -1
  50. package/dist/{configuration-CYO-kPOS.cjs → configuration-C8JgseHy.cjs} +1 -1
  51. package/dist/{connect-Dq7wndzR.cjs → connect-Br8VMrK1.cjs} +13 -13
  52. package/dist/{connect-BQrg3TB6.mjs → connect-CLD1ai0k.mjs} +13 -13
  53. package/dist/{context-6TP-iz_c.cjs → context-D1lgQTJC.cjs} +1 -1
  54. package/dist/{context-CJGRRGWW.mjs → context-_YGq8xdH.mjs} +1 -1
  55. package/dist/{controlClient-DoeYovwP.mjs → controlClient-CkNpT5zS.mjs} +3 -3
  56. package/dist/{controlClient-Bqv5v5OM.cjs → controlClient-D68Zj7Q-.cjs} +3 -3
  57. package/dist/{createSessionMetadata-DDIChCx8.mjs → createSessionMetadata-3WAj3_xl.mjs} +2 -2
  58. package/dist/{createSessionMetadata-xz767pcG.cjs → createSessionMetadata-DNIbKLHg.cjs} +2 -2
  59. package/dist/{defaultPermissionMode-PkZGsQDk.cjs → defaultPermissionMode-BmvjP32v.cjs} +2 -2
  60. package/dist/{defaultPermissionMode-i5KzdK09.mjs → defaultPermissionMode-DXMznl8v.mjs} +2 -2
  61. package/dist/{deterministicJson-xqA6DaOm.cjs → deterministicJson-BS7D7URE.cjs} +87 -22
  62. package/dist/{deterministicJson-CTEJDqtS.mjs → deterministicJson-BcBIKKf1.mjs} +87 -24
  63. package/dist/{doctor-BrgSlfXn.cjs → doctor-Be7zC0AF.cjs} +8 -7
  64. package/dist/{doctor-IctjVh9T.mjs → doctor-CoOaPq6w.mjs} +8 -8
  65. package/dist/{downloadTarget-jbOz1egC.mjs → downloadTarget-CeaAXdJj.mjs} +6 -6
  66. package/dist/{downloadTarget-CEb9che-.cjs → downloadTarget-LyOiucn_.cjs} +6 -6
  67. package/dist/{ensureDaemonRunning-b1e8LCSM.mjs → ensureDaemonRunning--98j7-17.mjs} +5 -5
  68. package/dist/{ensureDaemonRunning-D-HyjGIX.cjs → ensureDaemonRunning-B8z37VKD.cjs} +5 -5
  69. package/dist/fileStore-5qpetZS0.mjs +146 -0
  70. package/dist/fileStore-7qhnbs6N.cjs +152 -0
  71. package/dist/{handleResumeCommand-BvWVuRwH.cjs → handleResumeCommand-BFZlrFVH.cjs} +5 -5
  72. package/dist/{handleResumeCommand-DpaZvm2c.mjs → handleResumeCommand-gO8I4keP.mjs} +5 -5
  73. package/dist/{index-B2p2Mut7.cjs → index-B5PXbZjW.cjs} +77 -60
  74. package/dist/{index-F2UejqYs.cjs → index-BRMq9gOe.cjs} +3 -3
  75. package/dist/{index-C64Ufj4D.cjs → index-BkluinoS.cjs} +4 -4
  76. package/dist/{index-Bsvbgh9e.mjs → index-CO0n9ue6.mjs} +4 -4
  77. package/dist/{index-C6Vn5Eac.mjs → index-CeRXrGnH.mjs} +39 -6
  78. package/dist/{index-Dv0Q48P3.cjs → index-Df2eHm3O.cjs} +40 -6
  79. package/dist/{index-BUNnpGFF.mjs → index-DneHoQXf.mjs} +78 -61
  80. package/dist/{index-CMf5VbzG.mjs → index-WUj3954m.mjs} +4 -4
  81. package/dist/{index-wCbtF4BK.mjs → index-hQ8LP1C2.mjs} +3 -3
  82. package/dist/{index-DmTlDRSL.cjs → index-jF2t3ACW.cjs} +4 -4
  83. package/dist/index.cjs +2 -2
  84. package/dist/index.mjs +2 -2
  85. package/dist/{install-BX3lv3NO.mjs → install-D0inLCv-.mjs} +1 -1
  86. package/dist/{install-BXvf2E3o.cjs → install-D2NCbeJ-.cjs} +1 -1
  87. package/dist/{install-CdzSV7qO.mjs → install-DkYFiVK4.mjs} +3 -3
  88. package/dist/{install-C0ANcEAW.cjs → install-FqkSUjPC.cjs} +3 -3
  89. package/dist/lib.cjs +12 -12
  90. package/dist/lib.d.cts +39 -1
  91. package/dist/lib.d.mts +39 -1
  92. package/dist/lib.mjs +12 -12
  93. package/dist/{lidState-bBrmaQd2.mjs → lidState-DghbfRbr.mjs} +1 -1
  94. package/dist/{lidState-DWGnm2H4.cjs → lidState-x8cJ8J_9.cjs} +1 -1
  95. package/dist/{localHappyAgentAuth-DZHQnIW9.cjs → localHappyAgentAuth-DZ2kb9uq.cjs} +1 -1
  96. package/dist/{localHappyAgentAuth-Dn1jYDpt.mjs → localHappyAgentAuth-IKmeRpuQ.mjs} +1 -1
  97. package/dist/{logger-CphW5nUE.cjs → logger-DgBwUSgS.cjs} +2 -2
  98. package/dist/{logger-BUngm5Xg.mjs → logger-LFr8iPgl.mjs} +2 -2
  99. package/dist/{machineMetadata-BXN_bKU3.mjs → machineMetadata-BglCsfvf.mjs} +11 -4
  100. package/dist/{machineMetadata-BQm9YTcI.cjs → machineMetadata-DB03ez4K.cjs} +11 -3
  101. package/dist/{main-B2UV51nK.cjs → main-YQ-Vkakw.cjs} +45 -45
  102. package/dist/{main-DGkdYfEq.mjs → main-_1LSzlLv.mjs} +45 -45
  103. package/dist/{mcp-BFvAEIRz.cjs → mcp-BIY80jSc.cjs} +14 -14
  104. package/dist/{mcp-CbTtbs0f.mjs → mcp-Csj-mT5Y.mjs} +14 -14
  105. package/dist/{mirrorProtocol-HKPivs5o.cjs → mirrorProtocol-BphKIAK9.cjs} +16 -153
  106. package/dist/{mirrorProtocol-BR4luBC0.mjs → mirrorProtocol-CAxOMBkb.mjs} +19 -151
  107. package/dist/{package-7Ld1YMhh.mjs → package-DYGwlmXl.mjs} +8 -8
  108. package/dist/{package-KhLqBDX9.cjs → package-NoD8QOOM.cjs} +8 -8
  109. package/dist/{panels-C7IVqpJk.mjs → panels-B8zRm7_d.mjs} +5 -5
  110. package/dist/{panels-Njf6GelF.cjs → panels-DYEc1NyQ.cjs} +5 -5
  111. package/dist/{peerTools-BOlDRyhi.mjs → peerTools-CK3JYu1k.mjs} +5 -5
  112. package/dist/{peerTools-DQNlrcqM.cjs → peerTools-CP-x-Peu.cjs} +5 -5
  113. package/dist/{persistence-9BMYspxG.cjs → persistence-BY-D00wT.cjs} +2 -2
  114. package/dist/{persistence-BFUOHW5h.mjs → persistence-D2Djrf7t.mjs} +2 -2
  115. package/dist/pi-CqyoZMjI.mjs +380 -0
  116. package/dist/pi-DlsrPCTa.cjs +400 -0
  117. package/dist/{piRunnerArgs-H2pgpA5z.mjs → piRunnerArgs-IZLoL7TG.mjs} +1 -1
  118. package/dist/{piRunnerArgs-DGaq6VYM.cjs → piRunnerArgs-gxLYIZH4.cjs} +1 -1
  119. package/dist/{piRuntime-CdN0JAsa.mjs → piRuntime-D7Y4oHVL.mjs} +2 -2
  120. package/dist/{piRuntime-CT5xv_3h.cjs → piRuntime-o5L8uX-W.cjs} +2 -2
  121. package/dist/{piTerminal-0FBtXTHK.cjs → piTerminal-C_-JDkLN.cjs} +17 -17
  122. package/dist/{piTerminal-C4m9YXAV.mjs → piTerminal-Kphx8Uhw.mjs} +17 -17
  123. package/dist/{prompt-lgF9IE82.cjs → prompt-Bof2aQkI.cjs} +7 -2
  124. package/dist/{prompt-BOouDaTM.mjs → prompt-QHuFx9j6.mjs} +7 -2
  125. package/dist/{pushNotifications-DI92havG.cjs → pushNotifications-BXoOSq_G.cjs} +10 -4
  126. package/dist/{pushNotifications-DCiBEVeC.mjs → pushNotifications-DXGIhE-A.mjs} +10 -4
  127. package/dist/{query-ywZbQUzR.mjs → query-CcA6DVZK.mjs} +1 -1
  128. package/dist/{query-BETKBrnz.cjs → query-CdCxzuaB.cjs} +1 -1
  129. package/dist/{rateLimitWindows-YRIYVdo4.cjs → rateLimitWindows-OpAmdOtC.cjs} +1 -1
  130. package/dist/{rateLimitWindows-BkfuUB1a.mjs → rateLimitWindows-ZtHZHe-l.mjs} +1 -1
  131. package/dist/{registerCommonHandlers-C7a_dUWs.cjs → registerCommonHandlers-CRjBoJLK.cjs} +2 -2
  132. package/dist/{registerCommonHandlers-CTkCvjxt.mjs → registerCommonHandlers-DF6bdDtd.mjs} +2 -2
  133. package/dist/{registerKillSessionHandler-CIsvBrVe.cjs → registerKillSessionHandler-7fOm6ooh.cjs} +6 -6
  134. package/dist/{registerKillSessionHandler-CaqqRYq6.mjs → registerKillSessionHandler-DDCKL3wf.mjs} +6 -6
  135. package/dist/{remoteSessionClient-PP-mOKmw.mjs → remoteSessionClient-B2POSKFT.mjs} +5 -5
  136. package/dist/{remoteSessionClient-D843fkzL.cjs → remoteSessionClient-CFCn42bs.cjs} +5 -5
  137. package/dist/{reportProgressTool-ZOCNjWHr.mjs → reportProgressTool-tPxEvh6x.mjs} +4 -4
  138. package/dist/{reportProgressTool-14AXr959.cjs → reportProgressTool-th4trcET.cjs} +4 -4
  139. package/dist/{resources-CvIlkzpP.cjs → resources-BPyN59Iv.cjs} +23 -2
  140. package/dist/{resources-y9jfyO-_.mjs → resources-CH1iP6Cv.mjs} +22 -3
  141. package/dist/{run-CAOCYYfT.cjs → run-C_FumCQk.cjs} +618 -594
  142. package/dist/{run-Dajw2E5j.mjs → run-cKQBbVi4.mjs} +554 -530
  143. package/dist/{runClaude-C6oxWYbp.mjs → runClaude-CYnM6krL.mjs} +22 -22
  144. package/dist/{runClaude-CRRKt-tm.cjs → runClaude-z_2YC_aa.cjs} +22 -22
  145. package/dist/{runClaudeDeps-B1ysqTvx.cjs → runClaudeDeps-CLubzWnA.cjs} +43 -41
  146. package/dist/{runClaudeDeps-BcZ68cX3.mjs → runClaudeDeps-duS06Pb4.mjs} +48 -46
  147. package/dist/{runGemini-D7yKc4wD.mjs → runGemini-C_Pc2EhH.mjs} +37 -35
  148. package/dist/{runGemini-DtKFXqf-.cjs → runGemini-vEoXV6qT.cjs} +37 -35
  149. package/dist/{runOpenClaw-Cq29mryb.cjs → runOpenClaw-CXJCtMgB.cjs} +18 -18
  150. package/dist/{runOpenClaw-C8ilyLP9.mjs → runOpenClaw-Cxun1qLC.mjs} +18 -18
  151. package/dist/{sandbox-gIj-EuF4.cjs → sandbox-CO46H2tK.cjs} +4 -4
  152. package/dist/{sandbox-CbCutma4.mjs → sandbox-CsvPnTmz.mjs} +4 -4
  153. package/dist/{selfCheck-BTGBVthv.cjs → selfCheck-DIr7Gc0i.cjs} +36 -36
  154. package/dist/selfCheck-NamtBHVB.mjs +85 -0
  155. package/dist/{send-YZRMQvMJ.mjs → send-DMoFg6F1.mjs} +8 -8
  156. package/dist/{send-CZf5lLw_.cjs → send-X2mfVEyr.cjs} +8 -8
  157. package/dist/{server-CknFq6xG.cjs → server-BwTEdbkr.cjs} +6 -6
  158. package/dist/{server-BqwXRzFZ.mjs → server-CkqQ0sRH.mjs} +4 -4
  159. package/dist/{sessionLock-DRZUcKHT.cjs → sessionLock-CdIRJlHH.cjs} +3 -3
  160. package/dist/{sessionLock-nBXdJxJm.mjs → sessionLock-JIfwCqMk.mjs} +3 -3
  161. package/dist/{sessionOps-BrGiU9-s.cjs → sessionOps-DVA-00nR.cjs} +4 -4
  162. package/dist/{sessionOps-C58iDeD5.mjs → sessionOps-DqlftXxe.mjs} +4 -4
  163. package/dist/{sessionScanner-Bm57LEXe.mjs → sessionScanner-BI0Vo1xT.mjs} +3 -3
  164. package/dist/{sessionScanner-CaO8bLaG.cjs → sessionScanner-BMwgGAhY.cjs} +3 -3
  165. package/dist/{sessions-BXyBHo8n.mjs → sessions-D6IimX7b.mjs} +10 -10
  166. package/dist/{sessions-uzqPCc37.cjs → sessions-DjgEcHaT.cjs} +10 -10
  167. package/dist/{setupOfflineReconnection-DvvVX3TB.cjs → setupOfflineReconnection-CjuCiKY3.cjs} +2 -2
  168. package/dist/{setupOfflineReconnection-1Qlek3wl.mjs → setupOfflineReconnection-DgJK_4m1.mjs} +2 -2
  169. package/dist/{spawn-vn93PhYL.mjs → spawn-Dvzy-tzc.mjs} +14 -14
  170. package/dist/{spawn-DBkodJEO.cjs → spawn-rhF28shY.cjs} +14 -14
  171. package/dist/{spawnAgents-CgPMWexP.mjs → spawnAgents-CCnlq-FI.mjs} +1 -1
  172. package/dist/{spawnAgents-DLNMlhWJ.cjs → spawnAgents-iwuqrgR9.cjs} +1 -1
  173. package/dist/{spawnHappyCLI-DnUZv0X2.cjs → spawnHappyCLI-DnKmIsEt.cjs} +1 -1
  174. package/dist/{spawnHappyCLI-BjFZc_7V.mjs → spawnHappyCLI-Dq3LLXLb.mjs} +1 -1
  175. package/dist/{specialCommands-D3ND9bdg.mjs → specialCommands-CcyZ1hGA.mjs} +3 -3
  176. package/dist/{specialCommands-BRufxlqe.cjs → specialCommands-Zwr2C6A2.cjs} +3 -3
  177. package/dist/{startFileWatcher-DXJ7yB5v.mjs → startFileWatcher-4thXDK9d.mjs} +1 -1
  178. package/dist/{startFileWatcher-D9cYzZOq.cjs → startFileWatcher-K6hJSyiR.cjs} +1 -1
  179. package/dist/{startupSessionCreate-uZ6BM0ty.mjs → startupSessionCreate-BfByJ16A.mjs} +1 -1
  180. package/dist/{startupSessionCreate-kdr3m1uX.cjs → startupSessionCreate-CKEbq0tL.cjs} +1 -1
  181. package/dist/{streamRelay-Dy6amlzx.cjs → streamRelay-Gy8Xfnon.cjs} +1 -1
  182. package/dist/{streamRelay-DnMCMMfV.mjs → streamRelay-LcDvyEjK.mjs} +1 -1
  183. package/dist/{sync-Bn-idAoy.cjs → sync-1hQ5KHpL.cjs} +1 -1
  184. package/dist/{sync-BvVhDO40.mjs → sync-DO-2PU45.mjs} +1 -1
  185. package/dist/{systemPrompt-CIZcJuJF.mjs → systemPrompt-BctLfMZs.mjs} +3 -3
  186. package/dist/{systemPrompt-DlyEk35T.cjs → systemPrompt-Dj7pgkMK.cjs} +3 -3
  187. package/dist/{teams-DLY3B5yi.mjs → teams-Bu8YeOoF.mjs} +8 -8
  188. package/dist/{teams-BLeRpDxv.cjs → teams-uQxUlyyz.cjs} +8 -8
  189. package/dist/{time-D3ETL7Jb.mjs → time-BcoJaG8E.mjs} +1 -1
  190. package/dist/{time-Cjv0zxQO.cjs → time-nqa9shu8.cjs} +1 -1
  191. package/dist/{titleGenerator-Cgp5ihFb.cjs → titleGenerator-D09XyYYG.cjs} +2 -2
  192. package/dist/{titleGenerator-Uzbd4utr.mjs → titleGenerator-D5r06bhf.mjs} +1 -1
  193. package/dist/{todo-pOMcEECE.cjs → todo-CCOnL7pT.cjs} +6 -6
  194. package/dist/{todo-C9Ga-oEM.mjs → todo-D1q8146q.mjs} +6 -6
  195. package/dist/{tools-Cho7iIWf.mjs → tools-D2E--n1x.mjs} +3 -3
  196. package/dist/{tools-BL7Byl_x.cjs → tools-DiCXnAC5.cjs} +3 -3
  197. package/dist/{uninstall-CbayEVoV.cjs → uninstall-BrNwwwSD.cjs} +3 -3
  198. package/dist/{uninstall-CvZHVY9C.mjs → uninstall-CtwXi1Rt.mjs} +3 -3
  199. package/package.json +8 -8
  200. package/dist/selfCheck-Smt-5Xiq.mjs +0 -85
@@ -3,11 +3,11 @@
3
3
  var node_child_process = require('node:child_process');
4
4
  var sdk = require('@agentclientprotocol/sdk');
5
5
  var node_crypto = require('node:crypto');
6
- var logger = require('./logger-CphW5nUE.cjs');
7
- var time = require('./time-Cjv0zxQO.cjs');
6
+ var logger = require('./logger-DgBwUSgS.cjs');
7
+ var time = require('./time-nqa9shu8.cjs');
8
8
  var contentLogMetadata = require('./contentLogMetadata-ZSFk_NjQ.cjs');
9
9
  var processTree = require('./processTree-CMHWlVse.cjs');
10
- var _package = require('./package-KhLqBDX9.cjs');
10
+ var _package = require('./package-NoD8QOOM.cjs');
11
11
 
12
12
  function acpImageBlocks(attachments, supportsImages) {
13
13
  return attachments.filter((file) => ["image/jpeg", "image/png", "image/gif", "image/webp"].includes(file.mimeType)).map((file) => {
@@ -1,11 +1,11 @@
1
1
  import { spawn } from 'node:child_process';
2
2
  import { ndJsonStream, ClientSideConnection } from '@agentclientprotocol/sdk';
3
3
  import { randomUUID } from 'node:crypto';
4
- import { l as logger } from './logger-BUngm5Xg.mjs';
5
- import { d as delay } from './time-D3ETL7Jb.mjs';
4
+ import { l as logger } from './logger-LFr8iPgl.mjs';
5
+ import { d as delay } from './time-BcoJaG8E.mjs';
6
6
  import { c as contentLogMetadata, e as errorLogMetadata } from './contentLogMetadata-BlWI0egu.mjs';
7
7
  import { r as readableStderrTail, a as appendStderrRing, s as stopProcessGracefully, k as killProcessTree } from './processTree-CP5IvQ2Z.mjs';
8
- import { p as packageJson } from './package-7Ld1YMhh.mjs';
8
+ import { p as packageJson } from './package-DYGwlmXl.mjs';
9
9
 
10
10
  function acpImageBlocks(attachments, supportsImages) {
11
11
  return attachments.filter((file) => ["image/jpeg", "image/png", "image/gif", "image/webp"].includes(file.mimeType)).map((file) => {
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var cuid2 = require('@paralleldrive/cuid2');
4
- var index = require('./index-Dv0Q48P3.cjs');
4
+ var index = require('./index-Df2eHm3O.cjs');
5
5
 
6
6
  function turnOptions(turnId, time) {
7
7
  return turnId ? { turn: turnId, time } : { time };
@@ -1,5 +1,5 @@
1
1
  import { createId } from '@paralleldrive/cuid2';
2
- import { s as streamKeyOf, d as createEnvelope } from './index-C6Vn5Eac.mjs';
2
+ import { s as streamKeyOf, d as createEnvelope } from './index-CeRXrGnH.mjs';
3
3
 
4
4
  function turnOptions(turnId, time) {
5
5
  return turnId ? { turn: turnId, time } : { time };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-CphW5nUE.cjs');
3
+ var logger = require('./logger-DgBwUSgS.cjs');
4
4
 
5
5
  class BasePermissionHandler {
6
6
  pendingRequests = /* @__PURE__ */ new Map();
@@ -1,4 +1,4 @@
1
- import { l as logger } from './logger-BUngm5Xg.mjs';
1
+ import { l as logger } from './logger-LFr8iPgl.mjs';
2
2
 
3
3
  class BasePermissionHandler {
4
4
  pendingRequests = /* @__PURE__ */ new Map();
@@ -1,6 +1,6 @@
1
1
  import { mkdirSync, renameSync, existsSync, unlinkSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- import { w as writePrivateFileSync, c as configuration } from './configuration-PxzEJumr.mjs';
3
+ import { w as writePrivateFileSync, c as configuration } from './configuration-BPrfb17M.mjs';
4
4
 
5
5
  const SESSION_MODE_DIR = "session-modes";
6
6
  const ACP_PERMISSION_MODES = ["default", "acceptEdits", "plan", "bypassPermissions"];
@@ -2,7 +2,7 @@
2
2
 
3
3
  var node_fs = require('node:fs');
4
4
  var path = require('node:path');
5
- var configuration = require('./configuration-CYO-kPOS.cjs');
5
+ var configuration = require('./configuration-C8JgseHy.cjs');
6
6
 
7
7
  const SESSION_MODE_DIR = "session-modes";
8
8
  const ACP_PERMISSION_MODES = ["default", "acceptEdits", "plan", "bypassPermissions"];
@@ -1,13 +1,13 @@
1
1
  import chalk from 'chalk';
2
2
  import { homedir } from 'node:os';
3
- import { r as readSettings, u as updateSettings } from './persistence-BFUOHW5h.mjs';
3
+ import { r as readSettings, u as updateSettings } from './persistence-D2Djrf7t.mjs';
4
4
  import 'node:fs';
5
- import './logger-BUngm5Xg.mjs';
5
+ import './logger-LFr8iPgl.mjs';
6
6
  import { d as describeAgentHome, p as probeLoginShellEnv, r as resolveAgentHomes, e as expandHomePath, A as AGENT_HOME_ENV_NAMES } from './loginShellEnv-Dw8M7tkI.mjs';
7
7
  import 'node:fs/promises';
8
- import './configuration-PxzEJumr.mjs';
8
+ import './configuration-BPrfb17M.mjs';
9
9
  import 'node:path';
10
- import './package-7Ld1YMhh.mjs';
10
+ import './package-DYGwlmXl.mjs';
11
11
  import 'zod';
12
12
  import './authRelay-DhQhkBvX.mjs';
13
13
  import 'node:crypto';
@@ -2,14 +2,14 @@
2
2
 
3
3
  var chalk = require('chalk');
4
4
  var os = require('node:os');
5
- var persistence = require('./persistence-9BMYspxG.cjs');
5
+ var persistence = require('./persistence-BY-D00wT.cjs');
6
6
  require('node:fs');
7
- require('./logger-CphW5nUE.cjs');
7
+ require('./logger-DgBwUSgS.cjs');
8
8
  var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
9
9
  require('node:fs/promises');
10
- require('./configuration-CYO-kPOS.cjs');
10
+ require('./configuration-C8JgseHy.cjs');
11
11
  require('node:path');
12
- require('./package-KhLqBDX9.cjs');
12
+ require('./package-NoD8QOOM.cjs');
13
13
  require('zod');
14
14
  require('./authRelay-Dy1qU9td.cjs');
15
15
  require('node:crypto');
@@ -1,22 +1,22 @@
1
1
  'use strict';
2
2
 
3
3
  var axios = require('axios');
4
- var logger = require('./logger-CphW5nUE.cjs');
5
- var lidState = require('./lidState-DWGnm2H4.cjs');
4
+ var logger = require('./logger-DgBwUSgS.cjs');
5
+ var lidState = require('./lidState-x8cJ8J_9.cjs');
6
6
  var node_events = require('node:events');
7
7
  var socket_ioClient = require('socket.io-client');
8
- var pushNotifications = require('./pushNotifications-DI92havG.cjs');
8
+ var pushNotifications = require('./pushNotifications-BXoOSq_G.cjs');
9
9
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
10
10
  var limits = require('./limits-C-a7gr04.cjs');
11
- var time = require('./time-Cjv0zxQO.cjs');
12
- var configuration = require('./configuration-CYO-kPOS.cjs');
11
+ var time = require('./time-nqa9shu8.cjs');
12
+ var configuration = require('./configuration-C8JgseHy.cjs');
13
13
  var node_crypto = require('node:crypto');
14
- var index = require('./index-Dv0Q48P3.cjs');
15
- var registerCommonHandlers = require('./registerCommonHandlers-C7a_dUWs.cjs');
14
+ var index = require('./index-Df2eHm3O.cjs');
15
+ var registerCommonHandlers = require('./registerCommonHandlers-CRjBoJLK.cjs');
16
16
  var cuid2 = require('@paralleldrive/cuid2');
17
- var sync = require('./sync-Bn-idAoy.cjs');
17
+ var sync = require('./sync-1hQ5KHpL.cjs');
18
18
  var backgroundTaskActivity = require('./backgroundTaskActivity-CBvUdj39.cjs');
19
- var controlClient = require('./controlClient-Bqv5v5OM.cjs');
19
+ var controlClient = require('./controlClient-D68Zj7Q-.cjs');
20
20
  var chalk = require('chalk');
21
21
 
22
22
  async function hmac_sha512(key, data) {
@@ -2949,7 +2949,7 @@ class ApiClient {
2949
2949
  return new ApiSessionClient(this.credential.token, session, opts);
2950
2950
  }
2951
2951
  async machineSyncClient(machine) {
2952
- const { ApiMachineClient } = await Promise.resolve().then(function () { return require('./apiMachine-DkGRj-Ai.cjs'); });
2952
+ const { ApiMachineClient } = await Promise.resolve().then(function () { return require('./apiMachine-D8H7CXaz.cjs'); });
2953
2953
  return new ApiMachineClient(this.credential.token, machine);
2954
2954
  }
2955
2955
  push() {
@@ -1,20 +1,20 @@
1
1
  import axios from 'axios';
2
- import { l as logger, r as redactLogValue } from './logger-BUngm5Xg.mjs';
3
- import { R as RpcHandlerManager, a as answerSocketRequest, c as connectGuarded, s as socketConnectGuard, d as describeSocketAckDrop, b as safeAck, i as isRateQuotaCode, p as pauseForRateQuota, e as shouldReconnect } from './lidState-bBrmaQd2.mjs';
2
+ import { l as logger, r as redactLogValue } from './logger-LFr8iPgl.mjs';
3
+ import { R as RpcHandlerManager, a as answerSocketRequest, c as connectGuarded, s as socketConnectGuard, d as describeSocketAckDrop, b as safeAck, i as isRateQuotaCode, p as pauseForRateQuota, e as shouldReconnect } from './lidState-DghbfRbr.mjs';
4
4
  import { EventEmitter } from 'node:events';
5
5
  import { io } from 'socket.io-client';
6
- import { A as AsyncLock, a as MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES, U as UserMessageSchema, F as FileEventMessageSchema, P as PushNotificationClient } from './pushNotifications-DCiBEVeC.mjs';
6
+ import { A as AsyncLock, a as MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES, U as UserMessageSchema, F as FileEventMessageSchema, P as PushNotificationClient } from './pushNotifications-DXGIhE-A.mjs';
7
7
  import { h as decrypt, d as decodeBase64, i as decryptBlob, e as encodeBase64, g as encrypt, l as libsodiumEncryptForPublicKey, j as libsodiumPublicKeyFromSecretKey, k as getRandomBytes } from './authRelay-DhQhkBvX.mjs';
8
8
  import { p as prepareClipboardText, d as prepareClipboardHistoryText } from './limits-DIo7rEBR.mjs';
9
- import { b as backoff, d as delay, e as exponentialBackoffDelay } from './time-D3ETL7Jb.mjs';
10
- import { c as configuration } from './configuration-PxzEJumr.mjs';
9
+ import { b as backoff, d as delay, e as exponentialBackoffDelay } from './time-BcoJaG8E.mjs';
10
+ import { c as configuration } from './configuration-BPrfb17M.mjs';
11
11
  import { createHmac, randomUUID } from 'node:crypto';
12
- import { d as createEnvelope, s as streamKeyOf, R as ReleaseDrainNoticeSchema, t as RelayAssignmentResponseSchema } from './index-C6Vn5Eac.mjs';
13
- import { r as registerCommonHandlers } from './registerCommonHandlers-CTkCvjxt.mjs';
12
+ import { d as createEnvelope, s as streamKeyOf, R as ReleaseDrainNoticeSchema, t as RelayAssignmentResponseSchema } from './index-CeRXrGnH.mjs';
13
+ import { r as registerCommonHandlers } from './registerCommonHandlers-DF6bdDtd.mjs';
14
14
  import { createId } from '@paralleldrive/cuid2';
15
- import { I as InvalidateSync } from './sync-BvVhDO40.mjs';
15
+ import { I as InvalidateSync } from './sync-DO-2PU45.mjs';
16
16
  import { B as BackgroundTaskReporter } from './backgroundTaskActivity-8PdPxrvy.mjs';
17
- import { k as notifyDaemonTurnEvent, m as notifyDaemonBackgroundTasks } from './controlClient-DoeYovwP.mjs';
17
+ import { k as notifyDaemonTurnEvent, m as notifyDaemonBackgroundTasks } from './controlClient-CkNpT5zS.mjs';
18
18
  import chalk from 'chalk';
19
19
 
20
20
  async function hmac_sha512(key, data) {
@@ -2947,7 +2947,7 @@ class ApiClient {
2947
2947
  return new ApiSessionClient(this.credential.token, session, opts);
2948
2948
  }
2949
2949
  async machineSyncClient(machine) {
2950
- const { ApiMachineClient } = await import('./apiMachine-CwGEhQDT.mjs');
2950
+ const { ApiMachineClient } = await import('./apiMachine-CHEzPQdS.mjs');
2951
2951
  return new ApiMachineClient(this.credential.token, machine);
2952
2952
  }
2953
2953
  push() {
@@ -1,42 +1,43 @@
1
1
  import { io } from 'socket.io-client';
2
2
  import { a as webPanelsSignature } from './webPanels-B2_C2-3g.mjs';
3
- import { l as logger } from './logger-BUngm5Xg.mjs';
4
- import { R as RpcHandlerManager, i as isRateQuotaCode, p as pauseForRateQuota, s as socketConnectGuard, c as connectGuarded, a as answerSocketRequest, e as shouldReconnect, d as describeSocketAckDrop } from './lidState-bBrmaQd2.mjs';
5
- import { M as ModelConfigError, i as isClaudeSessionId, s as stableVersion, a as sanitizeTagList, p as pickMirrorForTerminal, l as liveSnapshotChanged, b as sanitizeLiveSnapshot, c as serializeLiveSnapshot, r as registerWorktreeHandlers, d as configureWorktreeService, e as summarizeSpawnSessionForLog, f as parseMirrorSendParams } from './mirrorProtocol-BR4luBC0.mjs';
6
- import { c as configuration } from './configuration-PxzEJumr.mjs';
3
+ import { l as logger } from './logger-LFr8iPgl.mjs';
4
+ import { R as RpcHandlerManager, i as isRateQuotaCode, p as pauseForRateQuota, s as socketConnectGuard, c as connectGuarded, a as answerSocketRequest, e as shouldReconnect, d as describeSocketAckDrop } from './lidState-DghbfRbr.mjs';
5
+ import { i as isClaudeSessionId, s as stableVersion, a as sanitizeTagList, p as pickMirrorForTerminal, l as liveSnapshotChanged, b as sanitizeLiveSnapshot, c as serializeLiveSnapshot, r as registerWorktreeHandlers, d as configureWorktreeService, e as summarizeSpawnSessionForLog, f as parseMirrorSendParams } from './mirrorProtocol-CAxOMBkb.mjs';
6
+ import { c as configuration } from './configuration-BPrfb17M.mjs';
7
7
  import { w as withCurrentCliUpdateState } from './cliUpdate-Y34VGe9Y.mjs';
8
- import { r as registerCommonHandlers } from './registerCommonHandlers-CTkCvjxt.mjs';
8
+ import { r as registerCommonHandlers } from './registerCommonHandlers-DF6bdDtd.mjs';
9
9
  import { stat, readdir, lstat, open, readFile, rm, mkdir, chmod, writeFile, rename } from 'node:fs/promises';
10
10
  import { join, isAbsolute, resolve } from 'node:path';
11
11
  import os, { homedir } from 'node:os';
12
12
  import { spawn, execFile, spawnSync } from 'node:child_process';
13
- import { r as readSettings, c as readPersistedSessions, o as readTrackedClaudeSessionIds, p as readTrackedCodexThreadIds } from './persistence-BFUOHW5h.mjs';
13
+ import { r as readSettings, c as readPersistedSessions, o as readTrackedClaudeSessionIds, p as readTrackedCodexThreadIds } from './persistence-D2Djrf7t.mjs';
14
+ import { M as ModelConfigError } from './fileStore-5qpetZS0.mjs';
14
15
  import { e as encodeBase64, g as encrypt, h as decrypt, d as decodeBase64 } from './authRelay-DhQhkBvX.mjs';
15
16
  import { p as prepareClipboardText, d as prepareClipboardHistoryText } from './limits-DIo7rEBR.mjs';
16
- import { b as backoff, d as delay } from './time-D3ETL7Jb.mjs';
17
+ import { b as backoff, d as delay } from './time-BcoJaG8E.mjs';
17
18
  import * as pty from 'node-pty';
18
19
  import { a as attachStartupCommand, v as validateTerminalTags, d as deriveAutoTitle, T as TMUX_SESSION_ID_RE, i as isSafeTmuxSessionName, b as isVhSessionName, U as USER_SESSIONS_FORMAT, p as parseUserSessions, L as LIST_SESSIONS_FORMAT, c as parseSessionListLine, e as LIST_FIELD_SEP, s as sendToVhTerminal } from './terminals-Dlg0x3nY.mjs';
19
20
  import { t as tmuxArgs, V as VH_TMUX_SOCKET_ENV, a as scrubTmuxClientEnv } from './tmuxSocket-B8Yx20sT.mjs';
20
- import { locateClaudeConversation, refreshAgentHomes } from './index-Bsvbgh9e.mjs';
21
+ import { locateClaudeConversation, refreshAgentHomes } from './index-CO0n9ue6.mjs';
21
22
  import { randomBytes } from 'node:crypto';
22
23
  import { readdirSync, unlinkSync, existsSync, mkdirSync, writeFileSync, readFileSync, statSync, chmodSync, renameSync, rmSync, accessSync, constants } from 'node:fs';
23
24
  import axios from 'axios';
24
25
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
25
26
  import { a as isValidTerminalId } from './ids-DU6sLx4C.mjs';
26
27
  import { d as detectCLIAvailability } from './detectCLI-CSGMlV51.mjs';
27
- import { d as detectResumeSupport } from './localHappyAgentAuth-Dn1jYDpt.mjs';
28
+ import { d as detectResumeSupport } from './localHappyAgentAuth-IKmeRpuQ.mjs';
28
29
  import { g as getProjectPath, a as getClaudeProjectsRoot } from './path-D2wdaNSk.mjs';
29
30
  import { i as isVeryHappyOneShotPrompt } from './oneShotPrompts-DT4p6RNd.mjs';
30
- import { f as forkSession, F as ForkSourceMissingError, d as discardForkedSession, l as listClaudeRewindPoints, a as forkAndTruncateSession, b as ForkTruncateUuidNotFoundError, c as forkBeforeUserMessage } from './claudeSessionFork-GAVWhiKG.mjs';
31
- import { C as CodexAppServerClient } from './codexAppServerClient-CO4G6OS4.mjs';
32
- import { v as RelayCandidatesResponseSchema, t as RelayAssignmentResponseSchema, R as ReleaseDrainNoticeSchema } from './index-C6Vn5Eac.mjs';
31
+ import { f as forkSession, F as ForkSourceMissingError, d as discardForkedSession, l as listClaudeRewindPoints, a as forkAndTruncateSession, b as ForkTruncateUuidNotFoundError, c as forkBeforeUserMessage } from './claudeSessionFork-2ZkSTOGn.mjs';
32
+ import { C as CodexAppServerClient } from './codexAppServerClient-C3JO3pwM.mjs';
33
+ import { u as RelayCandidatesResponseSchema, t as RelayAssignmentResponseSchema, R as ReleaseDrainNoticeSchema } from './index-CeRXrGnH.mjs';
33
34
  import { f as forkCodexThread, C as CodexForkRewindPointNotFoundError, l as listCodexRewindPoints, a as forkCodexBeforeUserMessage } from './codexThreadFork-R76RU5H0.mjs';
34
- import { p as planRateLimitWrite, m as mergeRateLimitReports } from './rateLimitWindows-BkfuUB1a.mjs';
35
+ import { p as planRateLimitWrite, m as mergeRateLimitReports } from './rateLimitWindows-ZtHZHe-l.mjs';
35
36
  import 'chalk';
36
37
  import 'node:util';
37
38
  import 'os';
38
39
  import 'child_process';
39
- import './package-7Ld1YMhh.mjs';
40
+ import './package-DYGwlmXl.mjs';
40
41
  import 'util';
41
42
  import 'fs/promises';
42
43
  import 'crypto';
@@ -10600,6 +10601,10 @@ class ApiMachineClient {
10600
10601
  setCliUpdateRequestHandler(handler) {
10601
10602
  this.rpcHandlerManager.registerHandler("cli-update-request", (params) => handler(params && typeof params === "object" ? params.version : void 0));
10602
10603
  }
10604
+ /** B-719: `harness-install` — the owner asked this machine to install one harness id. */
10605
+ setHarnessInstallHandler(handler) {
10606
+ this.rpcHandlerManager.registerHandler("harness-install", (params) => handler(params));
10607
+ }
10603
10608
  setCliUpdateRetryHandler(handler) {
10604
10609
  this.rpcHandlerManager.registerHandler("cli-update-retry", (params) => handler(params && typeof params === "object" ? params.version : void 0));
10605
10610
  }
@@ -11474,6 +11479,15 @@ class ApiMachineClient {
11474
11479
  if (this.socket !== socket) return;
11475
11480
  this.serverMigrateHandler?.(data);
11476
11481
  });
11482
+ socket.on("cli-update-policy", (data) => {
11483
+ if (this.socket !== socket) return;
11484
+ this.cliUpdatePolicyHandler?.(data);
11485
+ });
11486
+ }
11487
+ cliUpdatePolicyHandler = null;
11488
+ /** B-718: the daemon decides what a policy announcement means (update/policyAnnouncement.ts). */
11489
+ setCliUpdatePolicyHandler(handler) {
11490
+ this.cliUpdatePolicyHandler = handler;
11477
11491
  }
11478
11492
  serverMigrateHandler = null;
11479
11493
  /** B-635: the daemon decides what to do with a relay-migration notice (daemon/serverMigration.ts). */
@@ -11559,27 +11573,35 @@ class ApiMachineClient {
11559
11573
  if (Date.now() - this.lastCliProbeAt < CLI_AVAILABILITY_RECHECK_MS) {
11560
11574
  return;
11561
11575
  }
11562
- this.lastCliProbeAt = Date.now();
11563
- const newAvailability = detectCLIAvailability();
11564
- const prev = this.lastKnownCLIAvailability;
11565
- const newResumeSupport = detectResumeSupport();
11566
- const prevResume = this.lastKnownResumeSupport;
11567
- const cliAvailabilityChanged = !prev || prev.claude !== newAvailability.claude || prev.codex !== newAvailability.codex || prev.gemini !== newAvailability.gemini || prev.openclaw !== newAvailability.openclaw || prev.pi !== newAvailability.pi;
11568
- const resumeSupportChanged = !prevResume || prevResume.rpcAvailable !== newResumeSupport.rpcAvailable || prevResume.happyAgentAuthenticated !== newResumeSupport.happyAgentAuthenticated;
11569
- if (cliAvailabilityChanged || resumeSupportChanged) {
11570
- this.lastKnownCLIAvailability = newAvailability;
11571
- this.lastKnownResumeSupport = newResumeSupport;
11572
- this.updateMachineMetadata((metadata) => ({
11573
- ...metadata || {},
11574
- cliAvailability: newAvailability,
11575
- resumeSupport: { ...newResumeSupport, rpcAvailable: !!this.resumeSessionHandler }
11576
- })).catch((err) => {
11577
- logger.debug("[API MACHINE] Failed to update machine capabilities:", err);
11578
- });
11579
- }
11576
+ this.recheckCliAvailability();
11580
11577
  }, 2e4);
11581
11578
  logger.debug("[API MACHINE] Keep-alive started (20s interval)");
11582
11579
  }
11580
+ /**
11581
+ * Re-detect CLI availability and publish it when it changed. Called on the
11582
+ * throttled keep-alive and, B-719, right after the owner installed a
11583
+ * harness so the launcher enables it without waiting up to five minutes.
11584
+ */
11585
+ recheckCliAvailability() {
11586
+ this.lastCliProbeAt = Date.now();
11587
+ const newAvailability = detectCLIAvailability();
11588
+ const prev = this.lastKnownCLIAvailability;
11589
+ const newResumeSupport = detectResumeSupport();
11590
+ const prevResume = this.lastKnownResumeSupport;
11591
+ const cliAvailabilityChanged = !prev || prev.claude !== newAvailability.claude || prev.codex !== newAvailability.codex || prev.gemini !== newAvailability.gemini || prev.openclaw !== newAvailability.openclaw || prev.pi !== newAvailability.pi;
11592
+ const resumeSupportChanged = !prevResume || prevResume.rpcAvailable !== newResumeSupport.rpcAvailable || prevResume.happyAgentAuthenticated !== newResumeSupport.happyAgentAuthenticated;
11593
+ if (cliAvailabilityChanged || resumeSupportChanged) {
11594
+ this.lastKnownCLIAvailability = newAvailability;
11595
+ this.lastKnownResumeSupport = newResumeSupport;
11596
+ this.updateMachineMetadata((metadata) => ({
11597
+ ...metadata || {},
11598
+ cliAvailability: newAvailability,
11599
+ resumeSupport: { ...newResumeSupport, rpcAvailable: !!this.resumeSessionHandler }
11600
+ })).catch((err) => {
11601
+ logger.debug("[API MACHINE] Failed to update machine capabilities:", err);
11602
+ });
11603
+ }
11604
+ }
11583
11605
  bindRpcRequestHandler(socket, transport) {
11584
11606
  socket.on("rpc-request", async (data, callback) => {
11585
11607
  if (typeof data?.method === "string" && this.rpcHandlerManager.isPlainMethod(data.method)) {
@@ -2,43 +2,44 @@
2
2
 
3
3
  var socket_ioClient = require('socket.io-client');
4
4
  var webPanels = require('./webPanels-FCgFKvVe.cjs');
5
- var logger = require('./logger-CphW5nUE.cjs');
6
- var lidState = require('./lidState-DWGnm2H4.cjs');
7
- var mirrorProtocol = require('./mirrorProtocol-HKPivs5o.cjs');
8
- var configuration = require('./configuration-CYO-kPOS.cjs');
5
+ var logger = require('./logger-DgBwUSgS.cjs');
6
+ var lidState = require('./lidState-x8cJ8J_9.cjs');
7
+ var mirrorProtocol = require('./mirrorProtocol-BphKIAK9.cjs');
8
+ var configuration = require('./configuration-C8JgseHy.cjs');
9
9
  var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
10
- var registerCommonHandlers = require('./registerCommonHandlers-C7a_dUWs.cjs');
10
+ var registerCommonHandlers = require('./registerCommonHandlers-CRjBoJLK.cjs');
11
11
  var promises = require('node:fs/promises');
12
12
  var path = require('node:path');
13
13
  var os = require('node:os');
14
14
  var node_child_process = require('node:child_process');
15
- var persistence = require('./persistence-9BMYspxG.cjs');
15
+ var persistence = require('./persistence-BY-D00wT.cjs');
16
+ var fileStore = require('./fileStore-7qhnbs6N.cjs');
16
17
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
17
18
  var limits = require('./limits-C-a7gr04.cjs');
18
- var time = require('./time-Cjv0zxQO.cjs');
19
+ var time = require('./time-nqa9shu8.cjs');
19
20
  var pty = require('node-pty');
20
21
  var terminals = require('./terminals-B_bfC9c2.cjs');
21
22
  var tmuxSocket = require('./tmuxSocket-D-Xt6Vn-.cjs');
22
- var index = require('./index-C64Ufj4D.cjs');
23
+ var index = require('./index-BkluinoS.cjs');
23
24
  var node_crypto = require('node:crypto');
24
25
  var node_fs = require('node:fs');
25
26
  var axios = require('axios');
26
27
  var projectPath = require('./projectPath-C3ioB4Bu.cjs');
27
28
  var ids = require('./ids-B6ZC0HGt.cjs');
28
29
  var detectCLI = require('./detectCLI-BuYR_Qxe.cjs');
29
- var localHappyAgentAuth = require('./localHappyAgentAuth-DZHQnIW9.cjs');
30
+ var localHappyAgentAuth = require('./localHappyAgentAuth-DZ2kb9uq.cjs');
30
31
  var path$1 = require('./path-B7zW-WwE.cjs');
31
32
  var oneShotPrompts = require('./oneShotPrompts-CL0dip9C.cjs');
32
- var claudeSessionFork = require('./claudeSessionFork-Be16vzGc.cjs');
33
- var codexAppServerClient = require('./codexAppServerClient-PE-12AsW.cjs');
34
- var index$1 = require('./index-Dv0Q48P3.cjs');
33
+ var claudeSessionFork = require('./claudeSessionFork-pwcKqB-e.cjs');
34
+ var codexAppServerClient = require('./codexAppServerClient-BRX3JZ_5.cjs');
35
+ var index$1 = require('./index-Df2eHm3O.cjs');
35
36
  var codexThreadFork = require('./codexThreadFork-DNekT4nQ.cjs');
36
- var rateLimitWindows = require('./rateLimitWindows-YRIYVdo4.cjs');
37
+ var rateLimitWindows = require('./rateLimitWindows-OpAmdOtC.cjs');
37
38
  require('chalk');
38
39
  require('node:util');
39
40
  require('os');
40
41
  require('child_process');
41
- require('./package-KhLqBDX9.cjs');
42
+ require('./package-NoD8QOOM.cjs');
42
43
  require('util');
43
44
  require('fs/promises');
44
45
  require('crypto');
@@ -372,7 +373,7 @@ async function guarded(fn) {
372
373
  try {
373
374
  return await fn();
374
375
  } catch (error) {
375
- if (error instanceof mirrorProtocol.ModelConfigError) return { error: error.message, code: error.code };
376
+ if (error instanceof fileStore.ModelConfigError) return { error: error.message, code: error.code };
376
377
  return { error: error instanceof Error ? error.message : "Unknown error", code: "internal" };
377
378
  }
378
379
  }
@@ -10621,6 +10622,10 @@ class ApiMachineClient {
10621
10622
  setCliUpdateRequestHandler(handler) {
10622
10623
  this.rpcHandlerManager.registerHandler("cli-update-request", (params) => handler(params && typeof params === "object" ? params.version : void 0));
10623
10624
  }
10625
+ /** B-719: `harness-install` — the owner asked this machine to install one harness id. */
10626
+ setHarnessInstallHandler(handler) {
10627
+ this.rpcHandlerManager.registerHandler("harness-install", (params) => handler(params));
10628
+ }
10624
10629
  setCliUpdateRetryHandler(handler) {
10625
10630
  this.rpcHandlerManager.registerHandler("cli-update-retry", (params) => handler(params && typeof params === "object" ? params.version : void 0));
10626
10631
  }
@@ -11495,6 +11500,15 @@ class ApiMachineClient {
11495
11500
  if (this.socket !== socket) return;
11496
11501
  this.serverMigrateHandler?.(data);
11497
11502
  });
11503
+ socket.on("cli-update-policy", (data) => {
11504
+ if (this.socket !== socket) return;
11505
+ this.cliUpdatePolicyHandler?.(data);
11506
+ });
11507
+ }
11508
+ cliUpdatePolicyHandler = null;
11509
+ /** B-718: the daemon decides what a policy announcement means (update/policyAnnouncement.ts). */
11510
+ setCliUpdatePolicyHandler(handler) {
11511
+ this.cliUpdatePolicyHandler = handler;
11498
11512
  }
11499
11513
  serverMigrateHandler = null;
11500
11514
  /** B-635: the daemon decides what to do with a relay-migration notice (daemon/serverMigration.ts). */
@@ -11580,27 +11594,35 @@ class ApiMachineClient {
11580
11594
  if (Date.now() - this.lastCliProbeAt < CLI_AVAILABILITY_RECHECK_MS) {
11581
11595
  return;
11582
11596
  }
11583
- this.lastCliProbeAt = Date.now();
11584
- const newAvailability = detectCLI.detectCLIAvailability();
11585
- const prev = this.lastKnownCLIAvailability;
11586
- const newResumeSupport = localHappyAgentAuth.detectResumeSupport();
11587
- const prevResume = this.lastKnownResumeSupport;
11588
- const cliAvailabilityChanged = !prev || prev.claude !== newAvailability.claude || prev.codex !== newAvailability.codex || prev.gemini !== newAvailability.gemini || prev.openclaw !== newAvailability.openclaw || prev.pi !== newAvailability.pi;
11589
- const resumeSupportChanged = !prevResume || prevResume.rpcAvailable !== newResumeSupport.rpcAvailable || prevResume.happyAgentAuthenticated !== newResumeSupport.happyAgentAuthenticated;
11590
- if (cliAvailabilityChanged || resumeSupportChanged) {
11591
- this.lastKnownCLIAvailability = newAvailability;
11592
- this.lastKnownResumeSupport = newResumeSupport;
11593
- this.updateMachineMetadata((metadata) => ({
11594
- ...metadata || {},
11595
- cliAvailability: newAvailability,
11596
- resumeSupport: { ...newResumeSupport, rpcAvailable: !!this.resumeSessionHandler }
11597
- })).catch((err) => {
11598
- logger.logger.debug("[API MACHINE] Failed to update machine capabilities:", err);
11599
- });
11600
- }
11597
+ this.recheckCliAvailability();
11601
11598
  }, 2e4);
11602
11599
  logger.logger.debug("[API MACHINE] Keep-alive started (20s interval)");
11603
11600
  }
11601
+ /**
11602
+ * Re-detect CLI availability and publish it when it changed. Called on the
11603
+ * throttled keep-alive and, B-719, right after the owner installed a
11604
+ * harness so the launcher enables it without waiting up to five minutes.
11605
+ */
11606
+ recheckCliAvailability() {
11607
+ this.lastCliProbeAt = Date.now();
11608
+ const newAvailability = detectCLI.detectCLIAvailability();
11609
+ const prev = this.lastKnownCLIAvailability;
11610
+ const newResumeSupport = localHappyAgentAuth.detectResumeSupport();
11611
+ const prevResume = this.lastKnownResumeSupport;
11612
+ const cliAvailabilityChanged = !prev || prev.claude !== newAvailability.claude || prev.codex !== newAvailability.codex || prev.gemini !== newAvailability.gemini || prev.openclaw !== newAvailability.openclaw || prev.pi !== newAvailability.pi;
11613
+ const resumeSupportChanged = !prevResume || prevResume.rpcAvailable !== newResumeSupport.rpcAvailable || prevResume.happyAgentAuthenticated !== newResumeSupport.happyAgentAuthenticated;
11614
+ if (cliAvailabilityChanged || resumeSupportChanged) {
11615
+ this.lastKnownCLIAvailability = newAvailability;
11616
+ this.lastKnownResumeSupport = newResumeSupport;
11617
+ this.updateMachineMetadata((metadata) => ({
11618
+ ...metadata || {},
11619
+ cliAvailability: newAvailability,
11620
+ resumeSupport: { ...newResumeSupport, rpcAvailable: !!this.resumeSessionHandler }
11621
+ })).catch((err) => {
11622
+ logger.logger.debug("[API MACHINE] Failed to update machine capabilities:", err);
11623
+ });
11624
+ }
11625
+ }
11604
11626
  bindRpcRequestHandler(socket, transport) {
11605
11627
  socket.on("rpc-request", async (data, callback) => {
11606
11628
  if (typeof data?.method === "string" && this.rpcHandlerManager.isPlainMethod(data.method)) {
@@ -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 './pushNotifications-DCiBEVeC.mjs';
5
- import { e as ensurePrivateDirectory, h as hardenPrivateFile } from './configuration-PxzEJumr.mjs';
4
+ import { M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES } from './pushNotifications-DXGIhE-A.mjs';
5
+ import { e as ensurePrivateDirectory, h as hardenPrivateFile } from './configuration-BPrfb17M.mjs';
6
6
 
7
7
  const CLAUDE_ATTACHMENT_KINDS = [
8
8
  "image/jpeg",
@@ -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 pushNotifications = require('./pushNotifications-DI92havG.cjs');
7
- var configuration = require('./configuration-CYO-kPOS.cjs');
6
+ var pushNotifications = require('./pushNotifications-BXoOSq_G.cjs');
7
+ var configuration = require('./configuration-C8JgseHy.cjs');
8
8
 
9
9
  const CLAUDE_ATTACHMENT_KINDS = [
10
10
  "image/jpeg",
@@ -1,11 +1,11 @@
1
1
  import chalk from 'chalk';
2
- import { g as readCredentials, r as readSettings, h as clearCredentials, i as clearMachineId } from './persistence-BFUOHW5h.mjs';
3
- import { a as authAndSetupMachineIfNeeded } from './auth-BG1DY0gj.mjs';
4
- import { c as configuration } from './configuration-PxzEJumr.mjs';
2
+ import { g as readCredentials, r as readSettings, h as clearCredentials, i as clearMachineId } from './persistence-D2Djrf7t.mjs';
3
+ import { a as authAndSetupMachineIfNeeded } from './auth-DZsthtSk.mjs';
4
+ import { c as configuration } from './configuration-BPrfb17M.mjs';
5
5
  import { existsSync, rmSync } from 'node:fs';
6
6
  import { createInterface } from 'node:readline';
7
- import { a as checkIfDaemonRunningAndCleanupStaleState, s as stopDaemon } from './controlClient-DoeYovwP.mjs';
8
- import { l as logger } from './logger-BUngm5Xg.mjs';
7
+ import { a as checkIfDaemonRunningAndCleanupStaleState, s as stopDaemon } from './controlClient-CkNpT5zS.mjs';
8
+ import { l as logger } from './logger-LFr8iPgl.mjs';
9
9
  import os from 'node:os';
10
10
  import { c as credentialRelayProblem } from './authRelay-DhQhkBvX.mjs';
11
11
  import 'node:fs/promises';
@@ -13,11 +13,11 @@ import 'zod';
13
13
  import 'node:crypto';
14
14
  import 'tweetnacl';
15
15
  import 'axios';
16
- import './time-D3ETL7Jb.mjs';
17
- import './browser-DUNetFT4.mjs';
16
+ import './time-BcoJaG8E.mjs';
17
+ import './browser-C2qhUHSE.mjs';
18
18
  import 'open';
19
19
  import 'node:path';
20
- import './package-7Ld1YMhh.mjs';
20
+ import './package-DYGwlmXl.mjs';
21
21
  import 'node:util';
22
22
 
23
23
  function localMachineIdentityStatus(machineId) {
@@ -1,14 +1,14 @@
1
1
  'use strict';
2
2
 
3
3
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
4
- var configuration = require('./configuration-CYO-kPOS.cjs');
4
+ var configuration = require('./configuration-C8JgseHy.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-Cjv0zxQO.cjs');
9
- var persistence = require('./persistence-9BMYspxG.cjs');
10
- var browser = require('./browser-DZ6qRtfH.cjs');
11
- var logger = require('./logger-CphW5nUE.cjs');
8
+ var time = require('./time-nqa9shu8.cjs');
9
+ var persistence = require('./persistence-BY-D00wT.cjs');
10
+ var browser = require('./browser-DjNNQQk2.cjs');
11
+ var logger = require('./logger-DgBwUSgS.cjs');
12
12
 
13
13
  function generateWebAuthUrl(publicKey) {
14
14
  const publicKeyBase64 = authRelay.encodeBase64(publicKey, "base64url");
@@ -1,12 +1,12 @@
1
1
  import { e as encodeBase64, c as credentialRelayProblem, f as encodeBase64Url, d as decodeBase64 } from './authRelay-DhQhkBvX.mjs';
2
- import { c as configuration } from './configuration-PxzEJumr.mjs';
2
+ import { c as configuration } from './configuration-BPrfb17M.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-D3ETL7Jb.mjs';
7
- import { g as readCredentials, k as readSettingsOutcome, u as updateSettings, w as writeCredentialsLegacy, m as writeCredentialsDataKey } from './persistence-BFUOHW5h.mjs';
8
- import { o as openBrowser } from './browser-DUNetFT4.mjs';
9
- import { l as logger } from './logger-BUngm5Xg.mjs';
6
+ import { d as delay } from './time-BcoJaG8E.mjs';
7
+ import { g as readCredentials, k as readSettingsOutcome, u as updateSettings, w as writeCredentialsLegacy, m as writeCredentialsDataKey } from './persistence-D2Djrf7t.mjs';
8
+ import { o as openBrowser } from './browser-C2qhUHSE.mjs';
9
+ import { l as logger } from './logger-LFr8iPgl.mjs';
10
10
 
11
11
  function generateWebAuthUrl(publicKey) {
12
12
  const publicKeyBase64 = encodeBase64(publicKey, "base64url");
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var persistence = require('./persistence-9BMYspxG.cjs');
5
- var auth = require('./auth-CBXnm-Mj.cjs');
6
- var configuration = require('./configuration-CYO-kPOS.cjs');
4
+ var persistence = require('./persistence-BY-D00wT.cjs');
5
+ var auth = require('./auth-CgQP7d0q.cjs');
6
+ var configuration = require('./configuration-C8JgseHy.cjs');
7
7
  var node_fs = require('node:fs');
8
8
  var node_readline = require('node:readline');
9
- var controlClient = require('./controlClient-Bqv5v5OM.cjs');
10
- var logger = require('./logger-CphW5nUE.cjs');
9
+ var controlClient = require('./controlClient-D68Zj7Q-.cjs');
10
+ var logger = require('./logger-DgBwUSgS.cjs');
11
11
  var os = require('node:os');
12
12
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
13
13
  require('node:fs/promises');
@@ -15,11 +15,11 @@ require('zod');
15
15
  require('node:crypto');
16
16
  require('tweetnacl');
17
17
  require('axios');
18
- require('./time-Cjv0zxQO.cjs');
19
- require('./browser-DZ6qRtfH.cjs');
18
+ require('./time-nqa9shu8.cjs');
19
+ require('./browser-DjNNQQk2.cjs');
20
20
  require('open');
21
21
  require('node:path');
22
- require('./package-KhLqBDX9.cjs');
22
+ require('./package-NoD8QOOM.cjs');
23
23
  require('node:util');
24
24
 
25
25
  function localMachineIdentityStatus(machineId) {