very-happy-cli 0.2.177 → 0.2.179

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 (203) hide show
  1. package/dist/{AcpBackend-B0K0WrtW.mjs → AcpBackend-CHp3y7cb.mjs} +135 -16
  2. package/dist/{AcpBackend-B-ny68XM.cjs → AcpBackend-DFipFF7-.cjs} +135 -16
  3. package/dist/{AcpSessionManager-CjdJLofq.cjs → AcpSessionManager-0zpvRJXc.cjs} +38 -4
  4. package/dist/{AcpSessionManager-DykjzBM4.mjs → AcpSessionManager-d2-rKWWa.mjs} +38 -4
  5. package/dist/{BasePermissionHandler-DR6nxuEn.cjs → BasePermissionHandler-CH3zuEkA.cjs} +5 -2
  6. package/dist/{BasePermissionHandler-hdY7kTqX.mjs → BasePermissionHandler-DdZBYIR4.mjs} +5 -2
  7. package/dist/acpSessionResume-DTGmAPLt.mjs +67 -0
  8. package/dist/acpSessionResume-oiCBnAVA.cjs +74 -0
  9. package/dist/{agentHome-BdTXEUPe.cjs → agentHome-BWcz8mz0.cjs} +5 -5
  10. package/dist/{agentHome-GRN2VfHv.mjs → agentHome-CghLvL_1.mjs} +5 -5
  11. package/dist/{api-BWX10o97.cjs → api-Cmjfr8Z7.cjs} +29 -261
  12. package/dist/{api-CKBViqI3.mjs → api-CzwFpJQc.mjs} +22 -254
  13. package/dist/{apiMachine-DttO4UFj.mjs → apiMachine-DJkTEiqy.mjs} +53 -16
  14. package/dist/{apiMachine-BYYFGgFs.cjs → apiMachine-G6OogT08.cjs} +53 -16
  15. package/dist/{attachmentContent-cPVF463_.mjs → attachmentContent-B2os4HbA.mjs} +2 -2
  16. package/dist/{attachmentContent-kJKXpkMX.cjs → attachmentContent-Bo0UAsSu.cjs} +4 -4
  17. package/dist/{auth-BmESeKuM.mjs → auth-BS6PaOOG.mjs} +6 -6
  18. package/dist/{auth-CTECt2Oz.cjs → auth-D6bBUwZa.cjs} +6 -6
  19. package/dist/{auth-CKdXb9zp.mjs → auth-DMX0xPNK.mjs} +9 -9
  20. package/dist/{auth-DNxVmVbn.cjs → auth-HEhRaNgL.cjs} +9 -9
  21. package/dist/{authRelay-DSAvg1uv.mjs → authRelay-DhQhkBvX.mjs} +1 -1
  22. package/dist/{authRelay-BdYkC1Po.cjs → authRelay-Dy1qU9td.cjs} +1 -0
  23. package/dist/{auto-D1ypjjfx.cjs → auto-C6I55iOh.cjs} +19 -18
  24. package/dist/{auto-Ch3203qd.mjs → auto-Cl1SEDcD.mjs} +19 -18
  25. package/dist/{bootstrap-6OI698q9.cjs → bootstrap-exVucYav.cjs} +2 -2
  26. package/dist/{bootstrap-C0s2bPFQ.mjs → bootstrap-iuyufnp3.mjs} +2 -2
  27. package/dist/{browser-DG6Uof5O.cjs → browser-BohJK12g.cjs} +1 -1
  28. package/dist/{browser-BlLWZUMx.mjs → browser-CSYum7xH.mjs} +1 -1
  29. package/dist/{claudeLocal-CcWcKnoo.mjs → claudeLocal-Dq_R3Ax_.mjs} +6 -5
  30. package/dist/{claudeLocal-CemsIArT.cjs → claudeLocal-re4yjSTx.cjs} +6 -5
  31. package/dist/{claudeLocalLauncher-A4VuevIi.cjs → claudeLocalLauncher-B4hJHpCA.cjs} +11 -10
  32. package/dist/{claudeLocalLauncher-7p6y88nj.mjs → claudeLocalLauncher-CN67lN7-.mjs} +11 -10
  33. package/dist/{claudeSessionFork-BtROOjqf.mjs → claudeSessionFork-BihfD0Ik.mjs} +1 -1
  34. package/dist/{claudeSessionFork-CbDfm8Fz.cjs → claudeSessionFork-DiSMYerV.cjs} +1 -1
  35. package/dist/{client-DyvBTYee.cjs → client-BKcK1Bi-.cjs} +3 -3
  36. package/dist/client-BhoEBnuN.mjs +71 -0
  37. package/dist/{client-COmgDDy0.cjs → client-CuVdN6PP.cjs} +2 -2
  38. package/dist/{client-BPMWutfs.mjs → client-DuTDwWSQ.mjs} +3 -3
  39. package/dist/client-ZjOsn6nZ.cjs +76 -0
  40. package/dist/{client-DG5ndWLw.mjs → client-wo9nbxuf.mjs} +2 -2
  41. package/dist/codex/happyMcpStdioBridge.cjs +25 -16
  42. package/dist/codex/happyMcpStdioBridge.mjs +25 -16
  43. package/dist/{codexAppServerClient-D-Z8qSfI.mjs → codexAppServerClient-BK3zra_1.mjs} +3 -3
  44. package/dist/{codexAppServerClient-R24WZZfg.cjs → codexAppServerClient-Dt5zxrun.cjs} +3 -3
  45. package/dist/{codexCommand-CVTkZJ1o.mjs → codexCommand-B6pY7CMh.mjs} +66 -61
  46. package/dist/{codexCommand-6hW19gsq.cjs → codexCommand-CAZ1SLjg.cjs} +89 -84
  47. package/dist/{codexTermination-CCIfwzcx.mjs → codexTermination-Cd1Eon_4.mjs} +1 -1
  48. package/dist/{codexTermination-BBU7e92y.cjs → codexTermination-DmGbHxcD.cjs} +1 -1
  49. package/dist/{config-CvsNChKX.mjs → config-2oMG_fEI.mjs} +3 -3
  50. package/dist/{config-DhdrvOLV.cjs → config-B0uK6K7n.cjs} +3 -3
  51. package/dist/{configuration-DZPy0T9Z.cjs → configuration-CMHZnp6G.cjs} +1 -1
  52. package/dist/{configuration-D55F0t16.mjs → configuration-WMi4idBB.mjs} +1 -1
  53. package/dist/{connect-CwCXMRmD.mjs → connect-BLVHhHzA.mjs} +15 -15
  54. package/dist/{connect-Wz-XZYXW.cjs → connect-uaglGrde.cjs} +15 -15
  55. package/dist/{context-BKbrZ55r.cjs → context-DXzU5bFM.cjs} +1 -1
  56. package/dist/{context-CCRpVXFo.mjs → context-DploEcoN.mjs} +1 -1
  57. package/dist/{controlClient-C4xB5J6O.mjs → controlClient-BWUJrj3t.mjs} +3 -3
  58. package/dist/{controlClient-SX8gSza2.cjs → controlClient-C-5qCt8W.cjs} +3 -3
  59. package/dist/{createSessionMetadata-Bi-m0Y_O.mjs → createSessionMetadata-3uXrJgOW.mjs} +2 -2
  60. package/dist/{createSessionMetadata-BCFmYlBo.cjs → createSessionMetadata-BkIzHALd.cjs} +2 -2
  61. package/dist/{defaultPermissionMode-wBcbBezm.mjs → defaultPermissionMode-BzxLh20a.mjs} +2 -2
  62. package/dist/{defaultPermissionMode-DMBEnXll.cjs → defaultPermissionMode-pS3vmiSg.cjs} +2 -2
  63. package/dist/{deterministicJson-ChGfQEF6.cjs → deterministicJson-B8z2GPi9.cjs} +220 -14
  64. package/dist/{deterministicJson-BkQETt8_.mjs → deterministicJson-D_whDMFd.mjs} +217 -12
  65. package/dist/{doctor-BsN3JZJn.cjs → doctor-Br1Kcy2J.cjs} +8 -8
  66. package/dist/{doctor-B9c2C9dF.mjs → doctor-CmtSsR2-.mjs} +8 -8
  67. package/dist/{downloadTarget-Dj3WoVJa.cjs → downloadTarget-BQJK_6oH.cjs} +6 -6
  68. package/dist/{downloadTarget-ByXzbDK4.mjs → downloadTarget-BoNwTIH_.mjs} +6 -6
  69. package/dist/{ensureDaemonRunning-7Wb8M7Lv.cjs → ensureDaemonRunning-BRUmsq6J.cjs} +5 -5
  70. package/dist/{ensureDaemonRunning--HYzs5Ce.mjs → ensureDaemonRunning-Czo9IHJQ.mjs} +5 -5
  71. package/dist/{handleResumeCommand-DHddBkNJ.mjs → handleResumeCommand-C8thKjqf.mjs} +22 -6
  72. package/dist/{handleResumeCommand-OmuUGYjQ.cjs → handleResumeCommand-tKD_Hpxc.cjs} +22 -6
  73. package/dist/{index-CrR4JISa.cjs → index-B0UjHlAe.cjs} +5 -5
  74. package/dist/{index-BzJNDsJq.mjs → index-BTxHphpV.mjs} +254 -49
  75. package/dist/index-BiyC7cZ3.mjs +18 -0
  76. package/dist/{index-De8L5lFK.cjs → index-C6O2vVjm.cjs} +156 -34
  77. package/dist/index-CUuc6iCn.cjs +24 -0
  78. package/dist/{index-Dhl6_bw7.mjs → index-CdQI0C9p.mjs} +5 -5
  79. package/dist/{index-D9NoYc5I.cjs → index-D09T1m8Y.cjs} +3 -3
  80. package/dist/{index-CEm0MYiS.mjs → index-D3bidoG8.mjs} +3 -3
  81. package/dist/{index-BRJzH4sc.cjs → index-DMqDMT1Q.cjs} +257 -52
  82. package/dist/{index-DMy3OCBe.mjs → index-DPOa4NhL.mjs} +154 -35
  83. package/dist/index.cjs +2 -2
  84. package/dist/index.mjs +2 -2
  85. package/dist/{install-BdvKiOQw.mjs → install-BX3lv3NO.mjs} +1 -1
  86. package/dist/{install-Cf6AFSWC.cjs → install-BXvf2E3o.cjs} +1 -1
  87. package/dist/{install-1qn-D9FS.cjs → install-CYRZxS87.cjs} +3 -3
  88. package/dist/{install-BDIUtPXi.mjs → install-hnve_9vq.mjs} +3 -3
  89. package/dist/lib.cjs +14 -14
  90. package/dist/lib.d.cts +65 -1
  91. package/dist/lib.d.mts +65 -1
  92. package/dist/lib.mjs +14 -14
  93. package/dist/{lidState-BqVsw7H1.mjs → lidState-Bb8fgXg3.mjs} +2 -2
  94. package/dist/{lidState-DxbK0qfu.cjs → lidState-Dv2wwFTj.cjs} +2 -2
  95. package/dist/{localHappyAgentAuth-D5tANdRD.cjs → localHappyAgentAuth-DjYvkXvV.cjs} +2 -2
  96. package/dist/{localHappyAgentAuth-Ce8kO2yc.mjs → localHappyAgentAuth-NEU7fax7.mjs} +2 -2
  97. package/dist/{logger-13cBr_ew.mjs → logger-BtVhHnD8.mjs} +2 -2
  98. package/dist/{logger-LvwVeATU.cjs → logger-C1GWx3gi.cjs} +2 -2
  99. package/dist/{machineMetadata-29h7vgf4.cjs → machineMetadata-CLHS9sv_.cjs} +3 -3
  100. package/dist/{machineMetadata-dMida2qq.mjs → machineMetadata-D-g--oU_.mjs} +3 -3
  101. package/dist/{main-x4nAhdH5.mjs → main-B2LWV8DI.mjs} +59 -46
  102. package/dist/{main-DpM5jaFH.cjs → main-CWhSsbtU.cjs} +59 -46
  103. package/dist/{mcp-DQv3caXs.cjs → mcp-CARUsXHV.cjs} +15 -15
  104. package/dist/{mcp-DMiFGYMT.mjs → mcp-ext92q3Y.mjs} +15 -15
  105. package/dist/{mirrorProtocol-Bz8tEabR.mjs → mirrorProtocol-BwYibqry.mjs} +3 -3
  106. package/dist/{mirrorProtocol-BfrERW7Z.cjs → mirrorProtocol-DEy2g1CB.cjs} +3 -3
  107. package/dist/{package-CjlsAaRe.mjs → package-BPPebGQF.mjs} +7 -7
  108. package/dist/{package-Ch9WGDV_.cjs → package-SgqTYsjn.cjs} +7 -7
  109. package/dist/panels-BZ0_Tt7B.mjs +137 -0
  110. package/dist/panels-D1c7q2dD.cjs +142 -0
  111. package/dist/{peerTools-CxmrKnfV.mjs → peerTools-CWKzcQ7u.mjs} +60 -10
  112. package/dist/{peerTools-DtGKWli5.cjs → peerTools-DRQETXaz.cjs} +60 -9
  113. package/dist/{persistence-DXbKOHxl.cjs → persistence-BegE7NPa.cjs} +14 -3
  114. package/dist/{persistence-C_tYtOqK.mjs → persistence-Cr-wutZ4.mjs} +14 -4
  115. package/dist/{piRunnerArgs-BVRZe2AR.cjs → piRunnerArgs-Cs-378Vz.cjs} +8 -2
  116. package/dist/{piRunnerArgs-BpHc-JZl.mjs → piRunnerArgs-DwvM_yWA.mjs} +7 -1
  117. package/dist/{piRuntime-D7eio8Ix.cjs → piRuntime-BG-1td_n.cjs} +2 -2
  118. package/dist/{piRuntime-DOdGF395.mjs → piRuntime-Bue5mnlc.mjs} +2 -2
  119. package/dist/{piTerminal-dpxz4Q8D.mjs → piTerminal-B5x9X5yV.mjs} +18 -18
  120. package/dist/{piTerminal-y_PRo2NY.cjs → piTerminal-G4z-xVyy.cjs} +18 -18
  121. package/dist/processTreeSnapshot-CuLJDNC-.mjs +101 -0
  122. package/dist/processTreeSnapshot-mDbnuojn.cjs +105 -0
  123. package/dist/prompt-BOouDaTM.mjs +99 -0
  124. package/dist/prompt-lgF9IE82.cjs +105 -0
  125. package/dist/{attachmentLimits-Di1Z93lN.mjs → pushNotifications-BdFjDjQe.mjs} +303 -3
  126. package/dist/{attachmentLimits-DtFqqiwR.cjs → pushNotifications-DaLQUyi0.cjs} +304 -2
  127. package/dist/{index-DFPT4HOO.cjs → query-Ctfg-5gy.cjs} +25 -5
  128. package/dist/{index-CEjJnq05.mjs → query-DYP_W1wp.mjs} +26 -3
  129. package/dist/{rateLimitWindows-DYHDGuzQ.mjs → rateLimitWindows-CuEqk_0g.mjs} +1 -1
  130. package/dist/{rateLimitWindows-DFnMU2Vt.cjs → rateLimitWindows-Dj_8voBK.cjs} +1 -1
  131. package/dist/{registerCommonHandlers-D8OMpBbQ.mjs → registerCommonHandlers-BAlP7SGc.mjs} +2 -2
  132. package/dist/{registerCommonHandlers-60VuTkdg.cjs → registerCommonHandlers-Cj084Sg7.cjs} +2 -2
  133. package/dist/{registerKillSessionHandler-Drhf7-Vz.mjs → registerKillSessionHandler-PD0jWtQo.mjs} +6 -6
  134. package/dist/{registerKillSessionHandler-pqChBKwO.cjs → registerKillSessionHandler-qMju0ZfF.cjs} +6 -6
  135. package/dist/{remoteSessionClient-B7NvjHD3.cjs → remoteSessionClient-B7i7MkYV.cjs} +5 -5
  136. package/dist/{remoteSessionClient-D01Hso2-.mjs → remoteSessionClient-Bn2qu5C5.mjs} +5 -5
  137. package/dist/{reportProgressTool-Du_zAK4h.cjs → reportProgressTool-CM1JFAHg.cjs} +84 -2
  138. package/dist/{reportProgressTool-B203EZCR.mjs → reportProgressTool-gHItlSzz.mjs} +82 -3
  139. package/dist/{resources-JDPugcDq.cjs → resources-CvIlkzpP.cjs} +30 -0
  140. package/dist/{resources-BdFBQi8r.mjs → resources-y9jfyO-_.mjs} +30 -0
  141. package/dist/{run-DX4Zs3Ug.mjs → run-BM4TxiyN.mjs} +249 -45
  142. package/dist/{run-DZ5jU53c.cjs → run-CNXwIe0A.cjs} +263 -59
  143. package/dist/{runClaude-ClRhHpwR.cjs → runClaude-CWhj2V4Q.cjs} +37 -41
  144. package/dist/{runClaude-CgPHXP0L.mjs → runClaude-C_3I8hvR.mjs} +37 -41
  145. package/dist/{runClaudeDeps-D2v_WDSL.cjs → runClaudeDeps-B81cOKnH.cjs} +295 -157
  146. package/dist/{runClaudeDeps-Dz2iydq4.mjs → runClaudeDeps-QGrOeDe2.mjs} +295 -160
  147. package/dist/{runGemini-DBXxpoY8.mjs → runGemini-BEdWEZLR.mjs} +61 -55
  148. package/dist/{runGemini-BtZqGFkp.cjs → runGemini-CgRLYbt5.cjs} +61 -55
  149. package/dist/{runOpenClaw-D8q8G57u.cjs → runOpenClaw-C1NVmzOL.cjs} +19 -19
  150. package/dist/{runOpenClaw-BOHpzCEU.mjs → runOpenClaw-DdQZAYj1.mjs} +19 -19
  151. package/dist/{sandbox-C452Vrsc.mjs → sandbox-DjQUdCMG.mjs} +5 -5
  152. package/dist/{sandbox-Cu9mMzjx.cjs → sandbox-nocIjliq.cjs} +5 -5
  153. package/dist/selfCheck-CjCF4C3v.mjs +85 -0
  154. package/dist/{selfCheck-gKa3uVr1.cjs → selfCheck-DCt4Uzbq.cjs} +36 -35
  155. package/dist/{send-B8HARi7x.mjs → send-Ct7X4pPU.mjs} +9 -9
  156. package/dist/{send-2Vb5eppI.cjs → send-Dydf_hwZ.cjs} +9 -9
  157. package/dist/{server-Db9Wuam3.cjs → server-CosABFbd.cjs} +7 -7
  158. package/dist/{server-BBWCIZyS.mjs → server-DTQGZMxh.mjs} +5 -5
  159. package/dist/{sessionLock-6qL_N6Rn.cjs → sessionLock-DokGab2R.cjs} +16 -3
  160. package/dist/{sessionLock-ZfvFVdUi.mjs → sessionLock-WYIyaVO4.mjs} +16 -4
  161. package/dist/{sessionOps-CdgbEJgf.mjs → sessionOps-BIGgRube.mjs} +11 -6
  162. package/dist/{sessionOps-Dmt7WUUs.cjs → sessionOps-S-qPBLFf.cjs} +11 -6
  163. package/dist/{sessionScanner-CQL_WSaC.cjs → sessionScanner-CIMM2hvZ.cjs} +3 -3
  164. package/dist/{sessionScanner-CNVaSNOn.mjs → sessionScanner-o5hnMi5e.mjs} +3 -3
  165. package/dist/{sessions-DTomHfFg.mjs → sessions-BJHEZpi2.mjs} +40 -18
  166. package/dist/{sessions-BJblG_Hx.cjs → sessions-JchI1w3z.cjs} +40 -17
  167. package/dist/{setupOfflineReconnection-DVA0VpQL.cjs → setupOfflineReconnection-CNiAt5ZP.cjs} +2 -2
  168. package/dist/{setupOfflineReconnection-C5trsV-j.mjs → setupOfflineReconnection-DMiBO2y9.mjs} +2 -2
  169. package/dist/{spawn-DRyNAqD8.cjs → spawn-6PD7nnoC.cjs} +49 -18
  170. package/dist/{spawn-CQJFgoOq.mjs → spawn-DgvUNYEo.mjs} +49 -18
  171. package/dist/{spawnAgents-CCjJifAW.cjs → spawnAgents-DsXgegHM.cjs} +37 -1
  172. package/dist/spawnAgents-P006Hqio.mjs +79 -0
  173. package/dist/{spawnHappyCLI-B_0RWxD4.mjs → spawnHappyCLI-CCOrEtf9.mjs} +1 -1
  174. package/dist/{spawnHappyCLI-ChniczJ5.cjs → spawnHappyCLI-Dywezwk6.cjs} +1 -1
  175. package/dist/{specialCommands-DkdFJi4N.mjs → specialCommands-DPcd9edP.mjs} +3 -3
  176. package/dist/{specialCommands-DbntVs0d.cjs → specialCommands-QxPpkGKf.cjs} +3 -3
  177. package/dist/{startFileWatcher-UQyTSRAP.mjs → startFileWatcher-DghDOCO4.mjs} +1 -1
  178. package/dist/{startFileWatcher-C292fhra.cjs → startFileWatcher-RECH5qY8.cjs} +1 -1
  179. package/dist/{streamRelay-_qCd873P.mjs → streamRelay-DMV_TXfS.mjs} +1 -1
  180. package/dist/{streamRelay-Cx01enfe.cjs → streamRelay-DlUWKUpo.cjs} +1 -1
  181. package/dist/{sync-C3p7-KLn.mjs → sync-CSe0Rf45.mjs} +1 -1
  182. package/dist/{sync-C7sxoUYG.cjs → sync-D23jbqVa.cjs} +1 -1
  183. package/dist/{systemPrompt-DtibzbRU.cjs → systemPrompt-BOy4kU4P.cjs} +4 -3
  184. package/dist/{systemPrompt-CdHOlyVW.mjs → systemPrompt-CFNKnh65.mjs} +4 -3
  185. package/dist/{teams-ujXr3AFn.mjs → teams-DyY669f0.mjs} +9 -9
  186. package/dist/{teams-D7O7TpVU.cjs → teams-Ov2BDT-A.cjs} +9 -9
  187. package/dist/{time-yEL6wHUF.mjs → time-65DcU6Jx.mjs} +1 -1
  188. package/dist/{time-Dg5tVB8S.cjs → time-CrwIMHta.cjs} +1 -1
  189. package/dist/{titleGenerator-BMEaDTwU.cjs → titleGenerator-CS_rh2_J.cjs} +9 -8
  190. package/dist/{titleGenerator-Dr-BtjzO.mjs → titleGenerator-CiAMxf7s.mjs} +9 -8
  191. package/dist/{todo-CvJe4M2C.mjs → todo-BDONw0sK.mjs} +7 -7
  192. package/dist/{todo-CUcFamGs.cjs → todo-KY-okGii.cjs} +7 -7
  193. package/dist/{tools-BrM3bZW5.mjs → tools-D8-PnZEG.mjs} +1 -1
  194. package/dist/{tools-DDKTB5aQ.cjs → tools-_w52DZG6.cjs} +1 -1
  195. package/dist/{uninstall-7oLuhYIu.cjs → uninstall-8vnLN-IE.cjs} +3 -3
  196. package/dist/{uninstall-CEcMMQGz.mjs → uninstall-_fjGRP9b.mjs} +3 -3
  197. package/dist/webPanels-B2_C2-3g.mjs +49 -0
  198. package/dist/webPanels-FCgFKvVe.cjs +53 -0
  199. package/package.json +7 -7
  200. package/dist/selfCheck-BAvqBwBR.mjs +0 -84
  201. package/dist/sessionModeFile-CWVq8AT9.mjs +0 -32
  202. package/dist/sessionModeFile-CsLtn_PL.cjs +0 -36
  203. package/dist/spawnAgents-BjtmjBvP.mjs +0 -45
package/dist/lib.d.mts CHANGED
@@ -588,6 +588,15 @@ declare const DaemonStateSchema: z$1.ZodObject<{
588
588
  rpcAvailable: z$1.ZodBoolean;
589
589
  detectedAt: z$1.ZodNumber;
590
590
  }, z$1.core.$loose>>;
591
+ webPanels: z$1.ZodOptional<z$1.ZodObject<{
592
+ panels: z$1.ZodArray<z$1.ZodObject<{
593
+ id: z$1.ZodString;
594
+ title: z$1.ZodString;
595
+ url: z$1.ZodString;
596
+ embed: z$1.ZodBoolean;
597
+ }, z$1.core.$strip>>;
598
+ updatedAt: z$1.ZodNumber;
599
+ }, z$1.core.$strip>>;
591
600
  }, z$1.core.$strip>;
592
601
  type DaemonState = z$1.infer<typeof DaemonStateSchema>;
593
602
  type ClaudeAuthState = ClaudeAuthState$1;
@@ -707,6 +716,7 @@ type Metadata = {
707
716
  */
708
717
  terminalId?: string;
709
718
  codexThreadId?: string;
719
+ piSessionId?: string;
710
720
  tools?: string[];
711
721
  slashCommands?: string[];
712
722
  mcpServers?: Array<{
@@ -1291,6 +1301,11 @@ declare class ApiSessionClient extends EventEmitter {
1291
1301
  * own line, so a launcher sends the matching session event only when this
1292
1302
  * says the turn-end did not carry it).
1293
1303
  */
1304
+ /**
1305
+ * B-495: close the turn a fork backfill left open. History, not a live
1306
+ * turn end — so no `turn-ended` tap (board analyzer, completion hooks).
1307
+ */
1308
+ closeReplayedClaudeTurn(): void;
1294
1309
  closeClaudeSessionTurn(status?: SessionTurnEndStatus, meta?: {
1295
1310
  error?: string;
1296
1311
  }): boolean;
@@ -1453,6 +1468,26 @@ declare class ApiSessionClient extends EventEmitter {
1453
1468
  private startSmartReconnect;
1454
1469
  }
1455
1470
 
1471
+ /**
1472
+ * B-510: machine web panels — local web pages a person may need to look at
1473
+ * (noVNC, an agent-browser dashboard, Grafana, a dev server), declared ONLY in
1474
+ * this machine's `~/.happy/settings.json` (`webPanels`) and mirrored to the web
1475
+ * through `daemonState.webPanels`. Spec: specs/2026-09-machine-web-panels.md.
1476
+ *
1477
+ * The web, RPC and server have no write path (same rule as `todoProvider`):
1478
+ * the URL is opened by the viewer's browser, so whoever can write it chooses
1479
+ * what the user's browser loads. Only the machine owner can.
1480
+ *
1481
+ * Nothing is proxied: the viewer's browser connects to the URL directly.
1482
+ */
1483
+ interface WebPanel {
1484
+ id: string;
1485
+ title: string;
1486
+ url: string;
1487
+ /** false = the web only offers "open in new window" (site forbids framing). */
1488
+ embed: boolean;
1489
+ }
1490
+
1456
1491
  /**
1457
1492
  * The backends the daemon can spawn as a remote session.
1458
1493
  *
@@ -1691,6 +1726,9 @@ declare class ApiMachineClient {
1691
1726
  private claudeAuthState;
1692
1727
  /** B-587: the machine's hibernation threshold, published as a capability. */
1693
1728
  private agentHibernationIdleMs;
1729
+ /** B-510: last normalized `webPanels` (null = never set → field not written). */
1730
+ private webPanels;
1731
+ private webPanelsSignatureSent;
1694
1732
  private rateLimitPushChain;
1695
1733
  private readonly rateLimitPublisher;
1696
1734
  private rpcHandlerManager;
@@ -1770,6 +1808,12 @@ declare class ApiMachineClient {
1770
1808
  * `daemonState.agentHibernation` capability. Call before connect().
1771
1809
  */
1772
1810
  setAgentHibernationHandlers(initialIdleMs: number, set: (idleMs: number) => Promise<number>): void;
1811
+ /**
1812
+ * B-510: mirror the local `webPanels` declaration into daemonState. Every
1813
+ * daemonState write is a CAS + DB write + broadcast, so an unchanged list
1814
+ * (same signature as the last one sent) writes nothing.
1815
+ */
1816
+ setWebPanels(panels: WebPanel[]): Promise<void>;
1773
1817
  private publishAgentHibernation;
1774
1818
  /** B-276 machine RPCs. Responses always carry `claudeAuth` so the web can refresh in place. */
1775
1819
  setClaudeAuthHandlers(handlers: {
@@ -1835,6 +1879,9 @@ declare class ApiMachineClient {
1835
1879
  private createControlSocket;
1836
1880
  private activateControlSocket;
1837
1881
  private bindControlDataHandlers;
1882
+ private serverMigrateHandler;
1883
+ /** B-635: the daemon decides what to do with a relay-migration notice (daemon/serverMigration.ts). */
1884
+ setServerMigrateHandler(handler: ((notice: unknown) => void) | null): void;
1838
1885
  private startReleaseHandover;
1839
1886
  private releaseHandover;
1840
1887
  private startKeepAlive;
@@ -1859,7 +1906,7 @@ interface PushToken {
1859
1906
  createdAt: number;
1860
1907
  updatedAt: number;
1861
1908
  }
1862
- type SessionNotificationKind = 'done' | 'permission' | 'question';
1909
+ type SessionNotificationKind = 'done' | 'permission' | 'question' | 'attention';
1863
1910
  declare class PushNotificationClient {
1864
1911
  private readonly token;
1865
1912
  private readonly baseUrl;
@@ -1894,6 +1941,23 @@ declare class PushNotificationClient {
1894
1941
  metadata: Metadata | null | undefined;
1895
1942
  data?: Record<string, any>;
1896
1943
  }): void;
1944
+ /**
1945
+ * B-510 `request_human` / `very-happy attention --session`: an awaited
1946
+ * push-event `attention` (title "Needs you", body = the reason, data.url =
1947
+ * panel deep link or the session). A server that predates the kind answers
1948
+ * 400; then the same push goes out as `question`, so the person is still
1949
+ * reached (compat matrix in specs/2026-09-machine-web-panels.md).
1950
+ */
1951
+ sendAttention(params: {
1952
+ sessionId: string;
1953
+ reason: string;
1954
+ url: string;
1955
+ sessionTitle?: string;
1956
+ }): Promise<{
1957
+ sent: boolean;
1958
+ kind?: SessionNotificationKind;
1959
+ error?: string;
1960
+ }>;
1897
1961
  }
1898
1962
 
1899
1963
  /**
package/dist/lib.mjs CHANGED
@@ -1,23 +1,24 @@
1
- export { A as ApiClient, a as ApiSessionClient } from './api-CKBViqI3.mjs';
2
- export { l as logger } from './logger-13cBr_ew.mjs';
3
- export { c as configuration } from './configuration-D55F0t16.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient } from './api-CzwFpJQc.mjs';
2
+ export { l as logger } from './logger-BtVhHnD8.mjs';
3
+ export { c as configuration } from './configuration-WMi4idBB.mjs';
4
4
  export { R as RawJSONLinesSchema } from './types-CkqAACXx.mjs';
5
5
  import 'axios';
6
- import './lidState-BqVsw7H1.mjs';
7
- import './authRelay-DSAvg1uv.mjs';
6
+ import './lidState-Bb8fgXg3.mjs';
7
+ import './authRelay-DhQhkBvX.mjs';
8
8
  import 'node:crypto';
9
9
  import 'tweetnacl';
10
10
  import 'os';
11
11
  import 'child_process';
12
12
  import 'node:events';
13
13
  import 'socket.io-client';
14
- import './attachmentLimits-Di1Z93lN.mjs';
14
+ import './pushNotifications-BdFjDjQe.mjs';
15
15
  import 'zod';
16
- import './index-DMy3OCBe.mjs';
16
+ import './index-DPOa4NhL.mjs';
17
17
  import '@paralleldrive/cuid2';
18
+ import './contentLogMetadata-BlWI0egu.mjs';
18
19
  import './limits-DIo7rEBR.mjs';
19
- import './time-yEL6wHUF.mjs';
20
- import './registerCommonHandlers-D8OMpBbQ.mjs';
20
+ import './time-65DcU6Jx.mjs';
21
+ import './registerCommonHandlers-BAlP7SGc.mjs';
21
22
  import 'util';
22
23
  import 'fs/promises';
23
24
  import 'crypto';
@@ -25,15 +26,14 @@ import 'path';
25
26
  import 'cross-spawn';
26
27
  import './projectPath-BTBIMB57.mjs';
27
28
  import 'url';
28
- import './sync-C3p7-KLn.mjs';
29
+ import './sync-CSe0Rf45.mjs';
29
30
  import './backgroundTaskActivity-BVwJBl02.mjs';
30
- import './controlClient-C4xB5J6O.mjs';
31
- import './persistence-C_tYtOqK.mjs';
31
+ import './controlClient-BWUJrj3t.mjs';
32
+ import './persistence-Cr-wutZ4.mjs';
32
33
  import 'node:fs/promises';
33
34
  import 'node:fs';
34
- import './contentLogMetadata-BlWI0egu.mjs';
35
35
  import 'chalk';
36
36
  import 'node:util';
37
37
  import 'node:path';
38
38
  import 'node:os';
39
- import './package-CjlsAaRe.mjs';
39
+ import './package-BPPebGQF.mjs';
@@ -1,5 +1,5 @@
1
- import { l as logger } from './logger-13cBr_ew.mjs';
2
- import { e as encodeBase64, g as encrypt, h as decrypt, d as decodeBase64 } from './authRelay-DSAvg1uv.mjs';
1
+ import { l as logger } from './logger-BtVhHnD8.mjs';
2
+ import { e as encodeBase64, g as encrypt, h as decrypt, d as decodeBase64 } from './authRelay-DhQhkBvX.mjs';
3
3
  import os from 'os';
4
4
  import { execSync } from 'child_process';
5
5
 
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-LvwVeATU.cjs');
4
- var authRelay = require('./authRelay-BdYkC1Po.cjs');
3
+ var logger = require('./logger-C1GWx3gi.cjs');
4
+ var authRelay = require('./authRelay-Dy1qU9td.cjs');
5
5
  var os = require('os');
6
6
  var child_process = require('child_process');
7
7
 
@@ -5,8 +5,8 @@ var node_fs = require('node:fs');
5
5
  var path = require('node:path');
6
6
  var tweetnacl = require('tweetnacl');
7
7
  var z = require('zod');
8
- var authRelay = require('./authRelay-BdYkC1Po.cjs');
9
- var configuration = require('./configuration-DZPy0T9Z.cjs');
8
+ var authRelay = require('./authRelay-Dy1qU9td.cjs');
9
+ var configuration = require('./configuration-CMHZnp6G.cjs');
10
10
 
11
11
  const AgentCredentialsSchema = z.z.object({
12
12
  token: z.z.string().min(1),
@@ -3,8 +3,8 @@ import { existsSync, readFileSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import tweetnacl from 'tweetnacl';
5
5
  import { z } from 'zod';
6
- import { c as credentialRelayProblem, d as decodeBase64 } from './authRelay-DSAvg1uv.mjs';
7
- import { c as configuration } from './configuration-D55F0t16.mjs';
6
+ import { c as credentialRelayProblem, d as decodeBase64 } from './authRelay-DhQhkBvX.mjs';
7
+ import { c as configuration } from './configuration-WMi4idBB.mjs';
8
8
 
9
9
  const AgentCredentialsSchema = z.object({
10
10
  token: z.string().min(1),
@@ -1,6 +1,6 @@
1
1
  import chalk from 'chalk';
2
2
  import { inspect } from 'node:util';
3
- import { d as appendPrivateFileSync, c as configuration } from './configuration-D55F0t16.mjs';
3
+ import { d as appendPrivateFileSync, c as configuration } from './configuration-WMi4idBB.mjs';
4
4
  import { existsSync, readdirSync, statSync } from 'node:fs';
5
5
  import { join, basename } from 'node:path';
6
6
 
@@ -236,7 +236,7 @@ async function listDaemonLogFiles(limit = 50) {
236
236
  return { file, path: fullPath, modified: stats.mtime };
237
237
  }).sort((a, b) => b.modified.getTime() - a.modified.getTime());
238
238
  try {
239
- const { readDaemonState } = await import('./persistence-C_tYtOqK.mjs').then(function (n) { return n.E; });
239
+ const { readDaemonState } = await import('./persistence-Cr-wutZ4.mjs').then(function (n) { return n.F; });
240
240
  const state = await readDaemonState();
241
241
  if (!state) {
242
242
  return logs;
@@ -2,7 +2,7 @@
2
2
 
3
3
  var chalk = require('chalk');
4
4
  var node_util = require('node:util');
5
- var configuration = require('./configuration-DZPy0T9Z.cjs');
5
+ var configuration = require('./configuration-CMHZnp6G.cjs');
6
6
  var node_fs = require('node:fs');
7
7
  var path = require('node:path');
8
8
 
@@ -238,7 +238,7 @@ async function listDaemonLogFiles(limit = 50) {
238
238
  return { file, path: fullPath, modified: stats.mtime };
239
239
  }).sort((a, b) => b.modified.getTime() - a.modified.getTime());
240
240
  try {
241
- const { readDaemonState } = await Promise.resolve().then(function () { return require('./persistence-DXbKOHxl.cjs'); }).then(function (n) { return n.persistence; });
241
+ const { readDaemonState } = await Promise.resolve().then(function () { return require('./persistence-BegE7NPa.cjs'); }).then(function (n) { return n.persistence; });
242
242
  const state = await readDaemonState();
243
243
  if (!state) {
244
244
  return logs;
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  var os = require('node:os');
4
- var _package = require('./package-Ch9WGDV_.cjs');
5
- var configuration = require('./configuration-DZPy0T9Z.cjs');
4
+ var _package = require('./package-SgqTYsjn.cjs');
5
+ var configuration = require('./configuration-CMHZnp6G.cjs');
6
6
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
7
7
  var detectCLI = require('./detectCLI-DR9ZaN6B.cjs');
8
- var localHappyAgentAuth = require('./localHappyAgentAuth-D5tANdRD.cjs');
8
+ var localHappyAgentAuth = require('./localHappyAgentAuth-DjYvkXvV.cjs');
9
9
 
10
10
  function buildInitialMachineMetadata(cliAvailability) {
11
11
  const hostSuffix = process.env.HAPPY_VARIANT === "dev" ? "-dev" : "";
@@ -1,9 +1,9 @@
1
1
  import os from 'node:os';
2
- import { p as packageJson } from './package-CjlsAaRe.mjs';
3
- import { c as configuration } from './configuration-D55F0t16.mjs';
2
+ import { p as packageJson } from './package-BPPebGQF.mjs';
3
+ import { c as configuration } from './configuration-WMi4idBB.mjs';
4
4
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
5
5
  import { d as detectCLIAvailability } from './detectCLI-CSGMlV51.mjs';
6
- import { d as detectResumeSupport } from './localHappyAgentAuth-Ce8kO2yc.mjs';
6
+ import { d as detectResumeSupport } from './localHappyAgentAuth-NEU7fax7.mjs';
7
7
 
8
8
  function buildInitialMachineMetadata(cliAvailability) {
9
9
  const hostSuffix = process.env.HAPPY_VARIANT === "dev" ? "-dev" : "";
@@ -1,30 +1,30 @@
1
1
  import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import chalk from 'chalk';
2
- import { l as logger, g as getLatestDaemonLog } from './logger-13cBr_ew.mjs';
3
- import { d as readDaemonState, r as readSettings, c as readCredentialsForConfiguredRelay } from './persistence-C_tYtOqK.mjs';
4
- import { a as authAndSetupMachineIfNeeded } from './auth-BmESeKuM.mjs';
5
- import { p as packageJson } from './package-CjlsAaRe.mjs';
2
+ import { l as logger, g as getLatestDaemonLog } from './logger-BtVhHnD8.mjs';
3
+ import { d as readDaemonState, r as readSettings, b as readCredentialsForConfiguredRelay } from './persistence-Cr-wutZ4.mjs';
4
+ import { a as authAndSetupMachineIfNeeded } from './auth-BS6PaOOG.mjs';
5
+ import { p as packageJson } from './package-BPPebGQF.mjs';
6
6
  import { z } from 'zod';
7
- import { l as listDaemonSessions, s as stopDaemonSession, a as checkIfDaemonRunningAndCleanupStaleState, b as stopDaemon } from './controlClient-C4xB5J6O.mjs';
7
+ import { l as listDaemonSessions, s as stopDaemonSession, a as checkIfDaemonRunningAndCleanupStaleState, b as stopDaemon } from './controlClient-BWUJrj3t.mjs';
8
8
  import { S as SYSTEMD_RESTART_HINT } from './daemonSupervisor-C6urv3_8.mjs';
9
- import { s as spawnHappyCLI } from './spawnHappyCLI-B_0RWxD4.mjs';
9
+ import { s as spawnHappyCLI } from './spawnHappyCLI-CCOrEtf9.mjs';
10
10
  import { execFileSync } from 'node:child_process';
11
- import { e as ensureDaemonRunning, a as extractNoSandboxFlag } from './ensureDaemonRunning--HYzs5Ce.mjs';
11
+ import { e as ensureDaemonRunning, a as extractNoSandboxFlag } from './ensureDaemonRunning-Czo9IHJQ.mjs';
12
12
  import { p as planClaudeStartup } from './startupPlan-DFMyNgAs.mjs';
13
- import { i as isStandaloneVersionRequest } from './index-CEm0MYiS.mjs';
14
- import { c as configuration } from './configuration-D55F0t16.mjs';
13
+ import { i as isStandaloneVersionRequest } from './index-D3bidoG8.mjs';
14
+ import { c as configuration } from './configuration-WMi4idBB.mjs';
15
15
  import { d as daemonEndpointsMatch } from './doctorReadiness-C208SMN9.mjs';
16
- import { p as parsePiRunnerArgs, m as missingPiPrerequisites, a as piSetupMessage, b as piAdapterMissingHint } from './piRunnerArgs-BpHc-JZl.mjs';
16
+ import { p as parsePiRunnerArgs, m as missingPiPrerequisites, a as piSetupMessage, b as piAdapterMissingHint } from './piRunnerArgs-DwvM_yWA.mjs';
17
17
  import { c as commandOnPath } from './detectCLI-CSGMlV51.mjs';
18
18
  import 'node:util';
19
19
  import 'node:fs';
20
20
  import 'node:path';
21
21
  import 'node:fs/promises';
22
- import './authRelay-DSAvg1uv.mjs';
22
+ import './authRelay-DhQhkBvX.mjs';
23
23
  import 'node:crypto';
24
24
  import 'tweetnacl';
25
25
  import 'axios';
26
- import './time-yEL6wHUF.mjs';
27
- import './browser-BlLWZUMx.mjs';
26
+ import './time-65DcU6Jx.mjs';
27
+ import './browser-CSYum7xH.mjs';
28
28
  import 'open';
29
29
  import 'cross-spawn';
30
30
  import './projectPath-BTBIMB57.mjs';
@@ -32,7 +32,7 @@ import 'path';
32
32
  import 'url';
33
33
  import 'node:module';
34
34
  import 'node:os';
35
- import './sessionModeFile-CWVq8AT9.mjs';
35
+ import './acpSessionResume-DTGmAPLt.mjs';
36
36
  import 'child_process';
37
37
  import 'os';
38
38
  import 'fs';
@@ -74,11 +74,11 @@ Conversation history is preserved on the server, but in-flight tool calls are in
74
74
  }
75
75
  process.exit(0);
76
76
  }
77
- await (await import('./doctor-B9c2C9dF.mjs').then(function (n) { return n.d; })).runDoctorCommand();
77
+ await (await import('./doctor-CmtSsR2-.mjs').then(function (n) { return n.d; })).runDoctorCommand();
78
78
  return;
79
79
  } else if (subcommand === "auth") {
80
80
  try {
81
- await (await import('./auth-CKdXb9zp.mjs')).handleAuthCommand(args.slice(1));
81
+ await (await import('./auth-DMX0xPNK.mjs')).handleAuthCommand(args.slice(1));
82
82
  } catch (error) {
83
83
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
84
84
  if (process.env.DEBUG) {
@@ -89,7 +89,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
89
89
  return;
90
90
  } else if (subcommand === "connect") {
91
91
  try {
92
- await (await import('./connect-CwCXMRmD.mjs')).handleConnectCommand(args.slice(1));
92
+ await (await import('./connect-BLVHhHzA.mjs')).handleConnectCommand(args.slice(1));
93
93
  } catch (error) {
94
94
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
95
95
  if (process.env.DEBUG) {
@@ -100,7 +100,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
100
100
  return;
101
101
  } else if (subcommand === "sandbox") {
102
102
  try {
103
- await (await import('./sandbox-C452Vrsc.mjs')).handleSandboxCommand(args.slice(1));
103
+ await (await import('./sandbox-DjQUdCMG.mjs')).handleSandboxCommand(args.slice(1));
104
104
  } catch (error) {
105
105
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
106
106
  if (process.env.DEBUG) {
@@ -111,7 +111,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
111
111
  return;
112
112
  } else if (subcommand === "server") {
113
113
  try {
114
- await (await import('./server-BBWCIZyS.mjs')).handleServerCommand(args.slice(1));
114
+ await (await import('./server-DTQGZMxh.mjs')).handleServerCommand(args.slice(1));
115
115
  } catch (error) {
116
116
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
117
117
  if (process.env.DEBUG) {
@@ -151,7 +151,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
151
151
  }
152
152
  } else if (subcommand === "agent-home") {
153
153
  try {
154
- const { parseAgentHomeArgs, runAgentHomeCommand } = await import('./agentHome-GRN2VfHv.mjs');
154
+ const { parseAgentHomeArgs, runAgentHomeCommand } = await import('./agentHome-CghLvL_1.mjs');
155
155
  await runAgentHomeCommand(parseAgentHomeArgs(args.slice(1)));
156
156
  process.exit(0);
157
157
  } catch (error) {
@@ -160,7 +160,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
160
160
  }
161
161
  } else if (subcommand === "spawn") {
162
162
  try {
163
- const { handleSpawnCommand } = await import('./spawn-CQJFgoOq.mjs');
163
+ const { handleSpawnCommand } = await import('./spawn-DgvUNYEo.mjs');
164
164
  await handleSpawnCommand(args.slice(1));
165
165
  } catch (error) {
166
166
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -172,7 +172,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
172
172
  return;
173
173
  } else if (subcommand === "sessions") {
174
174
  try {
175
- const { handleSessionsCommand } = await import('./sessions-DTomHfFg.mjs');
175
+ const { handleSessionsCommand } = await import('./sessions-BJHEZpi2.mjs');
176
176
  await handleSessionsCommand(args.slice(1));
177
177
  } catch (error) {
178
178
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -184,7 +184,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
184
184
  return;
185
185
  } else if (subcommand === "send") {
186
186
  try {
187
- const { handleSendCommand } = await import('./send-B8HARi7x.mjs');
187
+ const { handleSendCommand } = await import('./send-Ct7X4pPU.mjs');
188
188
  await handleSendCommand(args.slice(1));
189
189
  } catch (error) {
190
190
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -196,7 +196,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
196
196
  return;
197
197
  } else if (subcommand === "resume") {
198
198
  try {
199
- await (await import('./handleResumeCommand-DHddBkNJ.mjs')).handleResumeCommand(args.slice(1));
199
+ await (await import('./handleResumeCommand-C8thKjqf.mjs')).handleResumeCommand(args.slice(1));
200
200
  } catch (error) {
201
201
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
202
202
  if (process.env.DEBUG) {
@@ -207,7 +207,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
207
207
  return;
208
208
  } else if (subcommand === "codex") {
209
209
  try {
210
- await (await import('./codexCommand-CVTkZJ1o.mjs')).handleCodexCommand(args.slice(1));
210
+ await (await import('./codexCommand-B6pY7CMh.mjs')).handleCodexCommand(args.slice(1));
211
211
  } catch (error) {
212
212
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
213
213
  if (process.env.DEBUG) {
@@ -290,9 +290,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
290
290
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
291
291
  const projectId = args[3];
292
292
  try {
293
- const { saveGoogleCloudProjectToConfig } = await import('./config-CvsNChKX.mjs');
294
- const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./persistence-C_tYtOqK.mjs').then(function (n) { return n.E; });
295
- const { ApiClient } = await import('./api-CKBViqI3.mjs').then(function (n) { return n.b; });
293
+ const { saveGoogleCloudProjectToConfig } = await import('./config-2oMG_fEI.mjs');
294
+ const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./persistence-Cr-wutZ4.mjs').then(function (n) { return n.F; });
295
+ const { ApiClient } = await import('./api-CzwFpJQc.mjs').then(function (n) { return n.b; });
296
296
  let userEmail = void 0;
297
297
  try {
298
298
  const credentials = await readCredentialsForConfiguredRelay2();
@@ -323,7 +323,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
323
323
  }
324
324
  if (geminiSubcommand === "project" && args[2] === "get") {
325
325
  try {
326
- const { readGeminiLocalConfig } = await import('./config-CvsNChKX.mjs');
326
+ const { readGeminiLocalConfig } = await import('./config-2oMG_fEI.mjs');
327
327
  const config = readGeminiLocalConfig();
328
328
  if (config.googleCloudProject) {
329
329
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -363,7 +363,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
363
363
  process.exit(0);
364
364
  }
365
365
  try {
366
- const { runGemini } = await import('./runGemini-DBXxpoY8.mjs');
366
+ const { runGemini } = await import('./runGemini-BEdWEZLR.mjs');
367
367
  let startedBy = void 0;
368
368
  for (let i = 1; i < args.length; i++) {
369
369
  if (args[i] === "--started-by") {
@@ -386,7 +386,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
386
386
  } else if (subcommand === "pi") {
387
387
  if (args[1] === "--terminal") {
388
388
  try {
389
- const { runPiTerminal } = await import('./piTerminal-dpxz4Q8D.mjs');
389
+ const { runPiTerminal } = await import('./piTerminal-B5x9X5yV.mjs');
390
390
  process.exitCode = await runPiTerminal(args.slice(2));
391
391
  } catch (error) {
392
392
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -411,7 +411,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
411
411
  process.exit(1);
412
412
  }
413
413
  }
414
- const { runAcp, resolveAcpAgentConfig } = await import('./index-BzJNDsJq.mjs');
414
+ const { runAcp, resolveAcpAgentConfig } = await import('./index-BTxHphpV.mjs');
415
415
  const resolved = resolveAcpAgentConfig(["pi", ...parsed.passthrough]);
416
416
  const { credentials } = await authAndSetupMachineIfNeeded();
417
417
  await ensureDaemonRunning();
@@ -424,7 +424,8 @@ Conversation history is preserved on the server, but in-flight tool calls are in
424
424
  agentName: resolved.agentName,
425
425
  command: resolved.command,
426
426
  args: resolved.args,
427
- onBackendError: printHint
427
+ onBackendError: printHint,
428
+ resumeAgentSessionId: parsed.resume
428
429
  });
429
430
  if (hintPrinted) process.exit(1);
430
431
  } catch (error) {
@@ -438,7 +439,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
438
439
  return;
439
440
  } else if (subcommand === "acp") {
440
441
  try {
441
- const { runAcp, resolveAcpAgentConfig } = await import('./index-BzJNDsJq.mjs');
442
+ const { runAcp, resolveAcpAgentConfig } = await import('./index-BTxHphpV.mjs');
442
443
  let startedBy = void 0;
443
444
  let verbose = false;
444
445
  const acpArgs = [];
@@ -478,7 +479,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
478
479
  return;
479
480
  } else if (subcommand === "openclaw") {
480
481
  try {
481
- const { runOpenClaw } = await import('./runOpenClaw-BOHpzCEU.mjs');
482
+ const { runOpenClaw } = await import('./runOpenClaw-DdQZAYj1.mjs');
482
483
  let startedBy = void 0;
483
484
  let verbose = false;
484
485
  let gatewayUrl;
@@ -518,7 +519,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
518
519
  } else if (subcommand === "logout") {
519
520
  console.log(chalk.yellow('Note: "very-happy logout" is deprecated. Use "very-happy auth logout" instead.\n'));
520
521
  try {
521
- await (await import('./auth-CKdXb9zp.mjs')).handleAuthCommand(["logout"]);
522
+ await (await import('./auth-DMX0xPNK.mjs')).handleAuthCommand(["logout"]);
522
523
  } catch (error) {
523
524
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
524
525
  if (process.env.DEBUG) {
@@ -529,7 +530,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
529
530
  return;
530
531
  } else if (subcommand === "todo") {
531
532
  try {
532
- const { handleTodoCommand } = await import('./todo-CvJe4M2C.mjs');
533
+ const { handleTodoCommand } = await import('./todo-BDONw0sK.mjs');
533
534
  await handleTodoCommand(args.slice(1));
534
535
  } catch (error) {
535
536
  console.error(JSON.stringify({ error: error instanceof Error ? error.message : "Todo command failed" }));
@@ -538,7 +539,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
538
539
  return;
539
540
  } else if (subcommand === "teams") {
540
541
  try {
541
- const { handleTeamsCommand } = await import('./teams-ujXr3AFn.mjs');
542
+ const { handleTeamsCommand } = await import('./teams-DyY669f0.mjs');
542
543
  await handleTeamsCommand(args.slice(1));
543
544
  } catch (error) {
544
545
  console.error(error instanceof Error ? error.message : "Teams command failed");
@@ -547,7 +548,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
547
548
  return;
548
549
  } else if (subcommand === "auto") {
549
550
  try {
550
- const { handleAutoCommand } = await import('./auto-Ch3203qd.mjs');
551
+ const { handleAutoCommand } = await import('./auto-Cl1SEDcD.mjs');
551
552
  await handleAutoCommand(args.slice(1));
552
553
  } catch (error) {
553
554
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Automation command failed");
@@ -559,7 +560,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
559
560
  return;
560
561
  } else if (subcommand === "mcp" && (args.length === 1 || args.length === 2 && args[1] === "--terminal-tools")) {
561
562
  try {
562
- const { handleMcpCommand } = await import('./mcp-DMiFGYMT.mjs');
563
+ const { handleMcpCommand } = await import('./mcp-ext92q3Y.mjs');
563
564
  await handleMcpCommand(args[1] === "--terminal-tools");
564
565
  } catch (error) {
565
566
  process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
@@ -567,6 +568,16 @@ Conversation history is preserved on the server, but in-flight tool calls are in
567
568
  process.exit(1);
568
569
  }
569
570
  return;
571
+ } else if (subcommand === "panels" || subcommand === "attention") {
572
+ try {
573
+ const { handlePanelsCommand, handleAttentionCommand } = await import('./panels-BZ0_Tt7B.mjs');
574
+ if (subcommand === "panels") await handlePanelsCommand(args.slice(1));
575
+ else await handleAttentionCommand(args.slice(1));
576
+ } catch (error) {
577
+ console.error(chalk.red("Error:"), error instanceof Error ? error.message : String(error));
578
+ process.exitCode = 1;
579
+ }
580
+ return;
570
581
  } else if (subcommand === "notify") {
571
582
  try {
572
583
  await handleNotifyCommand(args.slice(1));
@@ -651,13 +662,13 @@ Conversation history is preserved on the server, but in-flight tool calls are in
651
662
  }
652
663
  process.exit(0);
653
664
  } else if (daemonSubcommand === "start-sync") {
654
- await (await import('./run-DX4Zs3Ug.mjs')).startDaemon();
665
+ await (await import('./run-BM4TxiyN.mjs')).startDaemon();
655
666
  process.exit(0);
656
667
  } else if (daemonSubcommand === "stop") {
657
668
  await stopDaemon();
658
669
  process.exit(0);
659
670
  } else if (daemonSubcommand === "status") {
660
- await (await import('./doctor-B9c2C9dF.mjs').then(function (n) { return n.d; })).runDoctorDaemon();
671
+ await (await import('./doctor-CmtSsR2-.mjs').then(function (n) { return n.d; })).runDoctorDaemon();
661
672
  process.exit(0);
662
673
  } else if (daemonSubcommand === "logs") {
663
674
  const latest = await getLatestDaemonLog();
@@ -669,14 +680,14 @@ Conversation history is preserved on the server, but in-flight tool calls are in
669
680
  process.exit(0);
670
681
  } else if (daemonSubcommand === "install") {
671
682
  try {
672
- await (await import('./install-BDIUtPXi.mjs')).install();
683
+ await (await import('./install-hnve_9vq.mjs')).install();
673
684
  } catch (error) {
674
685
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
675
686
  process.exit(1);
676
687
  }
677
688
  } else if (daemonSubcommand === "uninstall") {
678
689
  try {
679
- await (await import('./uninstall-CEcMMQGz.mjs')).uninstall();
690
+ await (await import('./uninstall-_fjGRP9b.mjs')).uninstall();
680
691
  } catch (error) {
681
692
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
682
693
  process.exit(1);
@@ -807,6 +818,8 @@ ${chalk.bold("Usage:")}
807
818
  sessions or scripts with tracked runs (auto --help)
808
819
  very-happy sandbox Configure and manage OS-level sandboxing
809
820
  very-happy notify Send push notification
821
+ very-happy panels Web panels declared in settings.json (panels list|check)
822
+ very-happy attention Ask a person to step in (attention "<reason>" [--panel id])
810
823
  very-happy mcp Stdio MCP server exposing copy_to_clipboard for a
811
824
  plain claude CLI (register once with:
812
825
  claude mcp add --scope user very-happy-clipboard -- very-happy mcp)
@@ -863,7 +876,7 @@ ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
863
876
  await ensureDaemonRunning();
864
877
  }
865
878
  try {
866
- const { runClaude } = await import('./runClaude-CgPHXP0L.mjs');
879
+ const { runClaude } = await import('./runClaude-C_3I8hvR.mjs');
867
880
  await runClaude(credentials, options);
868
881
  } catch (error) {
869
882
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -922,7 +935,7 @@ ${chalk.bold("Examples:")}
922
935
  }
923
936
  console.log(chalk.blue("\u{1F4F1} Sending push notification..."));
924
937
  try {
925
- const { ApiClient } = await import('./api-CKBViqI3.mjs').then(function (n) { return n.b; });
938
+ const { ApiClient } = await import('./api-CzwFpJQc.mjs').then(function (n) { return n.b; });
926
939
  const api = await ApiClient.create(credentials);
927
940
  const notificationTitle = title || "Happy";
928
941
  api.push().sendToAllDevices(