very-happy-cli 0.2.178 → 0.2.180

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 (217) hide show
  1. package/dist/{AcpBackend-DCQXHRzT.mjs → AcpBackend-B8Zi30Zh.mjs} +135 -16
  2. package/dist/{AcpBackend-CDkAQXYf.cjs → AcpBackend-DfRDtMcG.cjs} +135 -16
  3. package/dist/{AcpSessionManager-DckmUZza.cjs → AcpSessionManager-CASKOnOj.cjs} +38 -4
  4. package/dist/{AcpSessionManager-BXrQcqwC.mjs → AcpSessionManager-i8Rab0xT.mjs} +38 -4
  5. package/dist/{BasePermissionHandler-BVlrEhIi.mjs → BasePermissionHandler-26fKbRCm.mjs} +5 -2
  6. package/dist/{BasePermissionHandler-DyLmKKtO.cjs → BasePermissionHandler-BlM_tfej.cjs} +5 -2
  7. package/dist/acpSessionResume-B9l54P-X.mjs +67 -0
  8. package/dist/acpSessionResume-CR5pmgVo.cjs +74 -0
  9. package/dist/{agentHome-CEp9RMyK.cjs → agentHome-C7Sb7-Tz.cjs} +4 -4
  10. package/dist/{agentHome-C1xi37as.mjs → agentHome-CmGy0NWv.mjs} +4 -4
  11. package/dist/{api-JANhFdZV.cjs → api-DM7b1OKj.cjs} +38 -262
  12. package/dist/{api-Dib0dmqC.mjs → api-Hov8p7CA.mjs} +32 -256
  13. package/dist/{apiMachine-DNTJidYH.mjs → apiMachine-CwGEhQDT.mjs} +62 -15
  14. package/dist/{apiMachine-QhK-sKcr.cjs → apiMachine-DkGRj-Ai.cjs} +64 -17
  15. package/dist/{attachmentContent-bpQTBJ0y.cjs → attachmentContent-CEm13_gF.cjs} +4 -4
  16. package/dist/{attachmentContent-DkkdpSSJ.mjs → attachmentContent-CIn4iPEk.mjs} +2 -2
  17. package/dist/{auth-BRjd2esb.mjs → auth-BG1DY0gj.mjs} +5 -5
  18. package/dist/{auth-DgIV0Cvt.cjs → auth-CBXnm-Mj.cjs} +5 -5
  19. package/dist/{auth-omWDtgR8.cjs → auth-Dawj7pP5.cjs} +8 -8
  20. package/dist/{auth-DNct7VUi.mjs → auth-rggxMpEE.mjs} +8 -8
  21. package/dist/{auto-DKGFOJBo.mjs → auto-CXXLXGeL.mjs} +19 -18
  22. package/dist/{auto-CI16FZmX.cjs → auto-CbYOfoPS.cjs} +19 -18
  23. package/dist/{backgroundTaskActivity-BVwJBl02.mjs → backgroundTaskActivity-8PdPxrvy.mjs} +1 -1
  24. package/dist/{bootstrap-DCQ87Aan.cjs → bootstrap-DoA7okld.cjs} +2 -2
  25. package/dist/{bootstrap-BUagGC_-.mjs → bootstrap-Dt5I1SOl.mjs} +2 -2
  26. package/dist/{browser-Dj_DYQEh.mjs → browser-DUNetFT4.mjs} +1 -1
  27. package/dist/{browser-CSKhc0Bl.cjs → browser-DZ6qRtfH.cjs} +1 -1
  28. package/dist/{claudeCliPath-U4HHmV4r.cjs → claudeCliPath-GaP3UUz1.cjs} +1 -1
  29. package/dist/{claudeLocal-CdIVnOZp.cjs → claudeLocal--DNyMOSv.cjs} +8 -7
  30. package/dist/{claudeLocal-CCCvAeMd.mjs → claudeLocal-OHWQigCl.mjs} +6 -5
  31. package/dist/{claudeLocalLauncher-BmrpaRYJ.mjs → claudeLocalLauncher-BStvfa7M.mjs} +11 -10
  32. package/dist/{claudeLocalLauncher-21-xh5gc.cjs → claudeLocalLauncher-BhvPbcyH.cjs} +13 -12
  33. package/dist/{claudeSessionFork-kYCP1IJB.cjs → claudeSessionFork-Be16vzGc.cjs} +1 -1
  34. package/dist/{claudeSessionFork-DvxMKAmY.mjs → claudeSessionFork-GAVWhiKG.mjs} +1 -1
  35. package/dist/{client-C4zKGjiJ.cjs → client-BWjaHKtj.cjs} +2 -2
  36. package/dist/client-Ca5Pcgy_.mjs +71 -0
  37. package/dist/{client-CnlkkrZO.mjs → client-CnB7kRCT.mjs} +2 -2
  38. package/dist/{client-BTX9hsbr.mjs → client-D4uPb1uu.mjs} +3 -3
  39. package/dist/client-DJplzPjD.cjs +76 -0
  40. package/dist/{client-Dnza1hgN.cjs → client-D_loZ9IK.cjs} +3 -3
  41. package/dist/codex/happyMcpStdioBridge.cjs +24 -15
  42. package/dist/codex/happyMcpStdioBridge.mjs +25 -16
  43. package/dist/{codexAppServerClient-DvkpQgyv.mjs → codexAppServerClient-CO4G6OS4.mjs} +3 -3
  44. package/dist/{codexAppServerClient-CRlBWGn3.cjs → codexAppServerClient-PE-12AsW.cjs} +3 -3
  45. package/dist/{codexCommand-DzxIWXIT.cjs → codexCommand-BNoD1t1C.cjs} +127 -116
  46. package/dist/{codexCommand-BxjogBzU.mjs → codexCommand-B_xUH79E.mjs} +77 -66
  47. package/dist/{codexTermination-C28FzlLb.cjs → codexTermination-BmBbizFK.cjs} +7 -2
  48. package/dist/{codexTermination-ySDNMEhd.mjs → codexTermination-Dx48ma6e.mjs} +7 -2
  49. package/dist/{config-BFB5uJ4t.cjs → config-CtwEUxUP.cjs} +26 -26
  50. package/dist/{config-DwfEpFr3.mjs → config-DSu0Blos.mjs} +3 -3
  51. package/dist/{configuration-4TGMrjul.cjs → configuration-CYO-kPOS.cjs} +1 -1
  52. package/dist/{configuration-DVrb61aY.mjs → configuration-PxzEJumr.mjs} +1 -1
  53. package/dist/{connect-C7FPY0PI.mjs → connect-BQrg3TB6.mjs} +15 -15
  54. package/dist/{connect-QH2VJGBG.cjs → connect-Dq7wndzR.cjs} +28 -28
  55. package/dist/{context-JoKu0V54.cjs → context-6TP-iz_c.cjs} +1 -1
  56. package/dist/{context-B3XPVJlj.mjs → context-CJGRRGWW.mjs} +1 -1
  57. package/dist/{controlClient-BTaZlbC6.cjs → controlClient-Bqv5v5OM.cjs} +3 -3
  58. package/dist/{controlClient-BYKyGyxj.mjs → controlClient-DoeYovwP.mjs} +4 -4
  59. package/dist/{createSessionMetadata-8Fuj2-IV.mjs → createSessionMetadata-DDIChCx8.mjs} +2 -2
  60. package/dist/{createSessionMetadata-B2NynaWZ.cjs → createSessionMetadata-xz767pcG.cjs} +3 -3
  61. package/dist/{defaultPermissionMode-BEWCqJU-.cjs → defaultPermissionMode-PkZGsQDk.cjs} +2 -2
  62. package/dist/{defaultPermissionMode-B8kJG9uI.mjs → defaultPermissionMode-i5KzdK09.mjs} +2 -2
  63. package/dist/{detectCLI-DR9ZaN6B.cjs → detectCLI-BuYR_Qxe.cjs} +4 -4
  64. package/dist/{deterministicJson-C5ZwZ7hu.mjs → deterministicJson-CTEJDqtS.mjs} +217 -12
  65. package/dist/{deterministicJson-BjNQsAjO.cjs → deterministicJson-xqA6DaOm.cjs} +222 -16
  66. package/dist/{doctor-BshRnjLi.cjs → doctor-BrgSlfXn.cjs} +9 -9
  67. package/dist/{doctor-0BiGwJXk.mjs → doctor-IctjVh9T.mjs} +8 -8
  68. package/dist/{doctorReadiness-BCZGcN0a.cjs → doctorReadiness-Dl6yRQCy.cjs} +1 -1
  69. package/dist/{downloadTarget-BN5vZt3K.cjs → downloadTarget-CEb9che-.cjs} +6 -6
  70. package/dist/{downloadTarget-DJPwAZlu.mjs → downloadTarget-jbOz1egC.mjs} +6 -6
  71. package/dist/{ensureDaemonRunning-C5QfToCe.cjs → ensureDaemonRunning-D-HyjGIX.cjs} +6 -6
  72. package/dist/{ensureDaemonRunning-CSmb_mqt.mjs → ensureDaemonRunning-b1e8LCSM.mjs} +5 -5
  73. package/dist/{handleResumeCommand-BwnUZmbo.cjs → handleResumeCommand-BvWVuRwH.cjs} +23 -7
  74. package/dist/{handleResumeCommand-CgjpsdDe.mjs → handleResumeCommand-DpaZvm2c.mjs} +22 -6
  75. package/dist/{index-piJPsTsm.cjs → index-B2p2Mut7.cjs} +259 -53
  76. package/dist/{index-BehVbAsA.mjs → index-BUNnpGFF.mjs} +256 -50
  77. package/dist/{index-Bvldtdny.mjs → index-Bsvbgh9e.mjs} +4 -4
  78. package/dist/{index-BYOZ_8WZ.cjs → index-C64Ufj4D.cjs} +4 -4
  79. package/dist/{index-Clqlu17M.mjs → index-C6Vn5Eac.mjs} +155 -34
  80. package/dist/index-CMf5VbzG.mjs +18 -0
  81. package/dist/index-DmTlDRSL.cjs +24 -0
  82. package/dist/{index-_l1Sdmbi.cjs → index-Dv0Q48P3.cjs} +156 -33
  83. package/dist/{index-BRClDe07.cjs → index-F2UejqYs.cjs} +3 -3
  84. package/dist/{index-BYgfern_.mjs → index-wCbtF4BK.mjs} +3 -3
  85. package/dist/index.cjs +2 -2
  86. package/dist/index.mjs +2 -2
  87. package/dist/{install-BdvKiOQw.mjs → install-BX3lv3NO.mjs} +1 -1
  88. package/dist/{install-Cf6AFSWC.cjs → install-BXvf2E3o.cjs} +1 -1
  89. package/dist/{install-TO4taKW7.cjs → install-C0ANcEAW.cjs} +7 -7
  90. package/dist/{install-fYWHrPcC.mjs → install-CdzSV7qO.mjs} +3 -3
  91. package/dist/{installPiTools-BKnXjrVu.cjs → installPiTools-CL_axh_6.cjs} +1 -1
  92. package/dist/{installTerminalHooks-BQZbvxsZ.cjs → installTerminalHooks-BETLKAtd.cjs} +3 -3
  93. package/dist/lib.cjs +14 -14
  94. package/dist/lib.d.cts +239 -2
  95. package/dist/lib.d.mts +239 -2
  96. package/dist/lib.mjs +14 -14
  97. package/dist/{lidState-BeOwj6eW.cjs → lidState-DWGnm2H4.cjs} +1 -1
  98. package/dist/{lidState-DNMlIhX0.mjs → lidState-bBrmaQd2.mjs} +1 -1
  99. package/dist/{localHappyAgentAuth-Br-mgogg.cjs → localHappyAgentAuth-DZHQnIW9.cjs} +1 -1
  100. package/dist/{localHappyAgentAuth-BezKSFDi.mjs → localHappyAgentAuth-Dn1jYDpt.mjs} +1 -1
  101. package/dist/{logger--vAVtXB_.mjs → logger-BUngm5Xg.mjs} +2 -2
  102. package/dist/{logger-DXTWlPzP.cjs → logger-CphW5nUE.cjs} +2 -2
  103. package/dist/machineMetadata-BQm9YTcI.cjs +79 -0
  104. package/dist/machineMetadata-BXN_bKU3.mjs +68 -0
  105. package/dist/{main-DoMFJ2Cl.cjs → main-B2UV51nK.cjs} +112 -132
  106. package/dist/{main-CshDb5-1.mjs → main-DGkdYfEq.mjs} +106 -126
  107. package/dist/{mcp-pNc1EbQf.cjs → mcp-BFvAEIRz.cjs} +15 -15
  108. package/dist/{mcp-DKT_lrvQ.mjs → mcp-CbTtbs0f.mjs} +15 -15
  109. package/dist/{mirrorProtocol-6IFGPpjJ.mjs → mirrorProtocol-BR4luBC0.mjs} +148 -7
  110. package/dist/{mirrorProtocol-qKflWTX_.cjs → mirrorProtocol-HKPivs5o.cjs} +150 -4
  111. package/dist/{package-B7B03ejW.mjs → package-7Ld1YMhh.mjs} +8 -7
  112. package/dist/{package-DY4zTbKS.cjs → package-KhLqBDX9.cjs} +8 -7
  113. package/dist/panels-C7IVqpJk.mjs +137 -0
  114. package/dist/panels-Njf6GelF.cjs +142 -0
  115. package/dist/{peerTools-3R9RUARX.mjs → peerTools-BOlDRyhi.mjs} +60 -10
  116. package/dist/{peerTools-iy3_6Yc5.cjs → peerTools-DQNlrcqM.cjs} +60 -9
  117. package/dist/{persistence-BfX72dne.cjs → persistence-9BMYspxG.cjs} +2 -2
  118. package/dist/{persistence-DTk4sNpd.mjs → persistence-BFUOHW5h.mjs} +3 -3
  119. package/dist/{piRunnerArgs-CRQVR9o-.cjs → piRunnerArgs-DGaq6VYM.cjs} +8 -2
  120. package/dist/{piRunnerArgs-AT8QJY7x.mjs → piRunnerArgs-H2pgpA5z.mjs} +7 -1
  121. package/dist/{piRuntime-BHRT5MKO.cjs → piRuntime-CT5xv_3h.cjs} +2 -2
  122. package/dist/{piRuntime-E44qTVQ4.mjs → piRuntime-CdN0JAsa.mjs} +2 -2
  123. package/dist/{piTerminal-hI4WFdWm.cjs → piTerminal-0FBtXTHK.cjs} +18 -18
  124. package/dist/{piTerminal-De8nbciM.mjs → piTerminal-C4m9YXAV.mjs} +18 -18
  125. package/dist/processTreeSnapshot-CuLJDNC-.mjs +101 -0
  126. package/dist/processTreeSnapshot-mDbnuojn.cjs +105 -0
  127. package/dist/projectPath-C3ioB4Bu.cjs +13 -0
  128. package/dist/prompt-BOouDaTM.mjs +99 -0
  129. package/dist/prompt-lgF9IE82.cjs +105 -0
  130. package/dist/{attachmentLimits-UyFn8fkQ.mjs → pushNotifications-DCiBEVeC.mjs} +307 -3
  131. package/dist/{attachmentLimits-SqeAHrVC.cjs → pushNotifications-DI92havG.cjs} +308 -2
  132. package/dist/{index-DFPT4HOO.cjs → query-BETKBrnz.cjs} +25 -5
  133. package/dist/{index-CEjJnq05.mjs → query-ywZbQUzR.mjs} +26 -3
  134. package/dist/{rateLimitWindows-XrJiiBpU.mjs → rateLimitWindows-BkfuUB1a.mjs} +1 -1
  135. package/dist/{rateLimitWindows-Czb7_7cK.cjs → rateLimitWindows-YRIYVdo4.cjs} +1 -1
  136. package/dist/{registerCommonHandlers-C0_fyBQ0.cjs → registerCommonHandlers-C7a_dUWs.cjs} +30 -30
  137. package/dist/{registerCommonHandlers-CvIedVRf.mjs → registerCommonHandlers-CTkCvjxt.mjs} +2 -2
  138. package/dist/{registerKillSessionHandler-DYl7l4Ts.cjs → registerKillSessionHandler-CIsvBrVe.cjs} +6 -6
  139. package/dist/{registerKillSessionHandler-gwJ5lTf0.mjs → registerKillSessionHandler-CaqqRYq6.mjs} +6 -6
  140. package/dist/{remoteSessionClient-BRTIOX5b.cjs → remoteSessionClient-D843fkzL.cjs} +5 -5
  141. package/dist/{remoteSessionClient-DRb2Jr5s.mjs → remoteSessionClient-PP-mOKmw.mjs} +5 -5
  142. package/dist/{reportProgressTool-B9nCzbkL.cjs → reportProgressTool-14AXr959.cjs} +84 -2
  143. package/dist/{reportProgressTool-D5tEoXMW.mjs → reportProgressTool-ZOCNjWHr.mjs} +82 -3
  144. package/dist/{resources-JDPugcDq.cjs → resources-CvIlkzpP.cjs} +30 -0
  145. package/dist/{resources-BdFBQi8r.mjs → resources-y9jfyO-_.mjs} +30 -0
  146. package/dist/{run-CKe_WeLW.cjs → run-CAOCYYfT.cjs} +2806 -110
  147. package/dist/{run-BQ_FGaOL.mjs → run-Dajw2E5j.mjs} +2787 -91
  148. package/dist/{runClaude-zrrNcQC_.mjs → runClaude-C6oxWYbp.mjs} +49 -47
  149. package/dist/{runClaude-MHI5IKM-.cjs → runClaude-CRRKt-tm.cjs} +50 -48
  150. package/dist/{runClaudeDeps-RRw-Nusc.cjs → runClaudeDeps-B1ysqTvx.cjs} +310 -237
  151. package/dist/{runClaudeDeps-CVBCokOS.mjs → runClaudeDeps-BcZ68cX3.mjs} +297 -226
  152. package/dist/{runGemini-kipag2ag.mjs → runGemini-D7yKc4wD.mjs} +61 -55
  153. package/dist/{runGemini-D7Lg9yCr.cjs → runGemini-DtKFXqf-.cjs} +89 -83
  154. package/dist/{runOpenClaw-C_lRY3Do.mjs → runOpenClaw-C8ilyLP9.mjs} +19 -19
  155. package/dist/{runOpenClaw-DCcQ0L2N.cjs → runOpenClaw-Cq29mryb.cjs} +20 -20
  156. package/dist/{sandbox-BSyXFVFp.mjs → sandbox-CbCutma4.mjs} +4 -4
  157. package/dist/{sandbox-dMwPTmjm.cjs → sandbox-gIj-EuF4.cjs} +4 -4
  158. package/dist/{selfCheck-DkzDDUsE.cjs → selfCheck-BTGBVthv.cjs} +39 -38
  159. package/dist/selfCheck-Smt-5Xiq.mjs +85 -0
  160. package/dist/{send-dxC0miIA.cjs → send-CZf5lLw_.cjs} +8 -8
  161. package/dist/{send-C-k9nsd3.mjs → send-YZRMQvMJ.mjs} +9 -9
  162. package/dist/{server-DxoTYNlw.mjs → server-BqwXRzFZ.mjs} +4 -4
  163. package/dist/{server-B-W6P7Qr.cjs → server-CknFq6xG.cjs} +6 -6
  164. package/dist/sessionExitLifecycle-CzkLIgNZ.mjs +142 -0
  165. package/dist/sessionExitLifecycle-DFltxXU8.cjs +148 -0
  166. package/dist/{sessionLock-DWX6BbiU.cjs → sessionLock-DRZUcKHT.cjs} +38 -5
  167. package/dist/{sessionLock-DBdtZGOL.mjs → sessionLock-nBXdJxJm.mjs} +36 -5
  168. package/dist/{sessionOps-BAnr7n8t.cjs → sessionOps-BrGiU9-s.cjs} +10 -5
  169. package/dist/{sessionOps-BVoXe12O.mjs → sessionOps-C58iDeD5.mjs} +11 -6
  170. package/dist/{sessionScanner-BtxoeluY.mjs → sessionScanner-Bm57LEXe.mjs} +3 -3
  171. package/dist/{sessionScanner-CDOYsEUD.cjs → sessionScanner-CaO8bLaG.cjs} +3 -3
  172. package/dist/{sessions-C3sZJkzI.mjs → sessions-BXyBHo8n.mjs} +40 -18
  173. package/dist/{sessions-hAitoN-m.cjs → sessions-uzqPCc37.cjs} +39 -16
  174. package/dist/{setupOfflineReconnection-_eD4cuUT.mjs → setupOfflineReconnection-1Qlek3wl.mjs} +2 -2
  175. package/dist/{setupOfflineReconnection-C2EeYTFH.cjs → setupOfflineReconnection-DvvVX3TB.cjs} +2 -2
  176. package/dist/{spawn-Bc9v7pIf.cjs → spawn-DBkodJEO.cjs} +49 -18
  177. package/dist/{spawn-qNrB2CD_.mjs → spawn-vn93PhYL.mjs} +49 -18
  178. package/dist/spawnAgents-CgPMWexP.mjs +79 -0
  179. package/dist/{spawnAgents-BVEaz35W.cjs → spawnAgents-DLNMlhWJ.cjs} +37 -1
  180. package/dist/{spawnHappyCLI-C2stUioM.mjs → spawnHappyCLI-BjFZc_7V.mjs} +1 -1
  181. package/dist/{spawnHappyCLI-fzUagkKV.cjs → spawnHappyCLI-DnUZv0X2.cjs} +2 -2
  182. package/dist/{specialCommands-BJ-nqY4s.cjs → specialCommands-BRufxlqe.cjs} +3 -3
  183. package/dist/{specialCommands-C6W-rVyh.mjs → specialCommands-D3ND9bdg.mjs} +3 -3
  184. package/dist/{startFileWatcher-Bqlqjt93.cjs → startFileWatcher-D9cYzZOq.cjs} +1 -1
  185. package/dist/{startFileWatcher-CR09Snmz.mjs → startFileWatcher-DXJ7yB5v.mjs} +1 -1
  186. package/dist/startupSessionCreate-kdr3m1uX.cjs +26 -0
  187. package/dist/startupSessionCreate-uZ6BM0ty.mjs +24 -0
  188. package/dist/{streamRelay-CJoMk_d2.mjs → streamRelay-DnMCMMfV.mjs} +1 -1
  189. package/dist/{streamRelay-9kBPpbvU.cjs → streamRelay-Dy6amlzx.cjs} +1 -1
  190. package/dist/{sync-Dhmtk66S.cjs → sync-Bn-idAoy.cjs} +1 -1
  191. package/dist/{sync-DbW07iQS.mjs → sync-BvVhDO40.mjs} +1 -1
  192. package/dist/{systemPrompt-CQcuUmVp.mjs → systemPrompt-CIZcJuJF.mjs} +4 -3
  193. package/dist/{systemPrompt-3PYi3EUY.cjs → systemPrompt-DlyEk35T.cjs} +4 -3
  194. package/dist/{teams-DpxLcUU_.cjs → teams-BLeRpDxv.cjs} +8 -8
  195. package/dist/{teams-CwF4Z2fA.mjs → teams-DLY3B5yi.mjs} +8 -8
  196. package/dist/{time-A6zR3Iy6.cjs → time-Cjv0zxQO.cjs} +1 -1
  197. package/dist/{time-BuGWTVP6.mjs → time-D3ETL7Jb.mjs} +1 -1
  198. package/dist/{titleGenerator-D26gvNaS.cjs → titleGenerator-Cgp5ihFb.cjs} +10 -9
  199. package/dist/{titleGenerator-BGEzNWC9.mjs → titleGenerator-Uzbd4utr.mjs} +9 -8
  200. package/dist/{todo-DrZc76H5.mjs → todo-C9Ga-oEM.mjs} +6 -6
  201. package/dist/{todo-73g3NCIO.cjs → todo-pOMcEECE.cjs} +6 -6
  202. package/dist/{tools-CxJp4T1T.cjs → tools-BL7Byl_x.cjs} +1 -1
  203. package/dist/{tools-BtsrQnNS.mjs → tools-Cho7iIWf.mjs} +1 -1
  204. package/dist/{uninstall-DWNYvewQ.cjs → uninstall-CbayEVoV.cjs} +6 -6
  205. package/dist/{uninstall-DOb2mTwV.mjs → uninstall-CvZHVY9C.mjs} +3 -3
  206. package/dist/webPanels-B2_C2-3g.mjs +49 -0
  207. package/dist/webPanels-FCgFKvVe.cjs +53 -0
  208. package/package.json +8 -7
  209. package/dist/machineMetadata-B1H9gNbN.mjs +0 -39
  210. package/dist/machineMetadata-DcUupMje.cjs +0 -42
  211. package/dist/messageBuffer-BWlGgR3A.mjs +0 -71
  212. package/dist/messageBuffer-fJMH6uY8.cjs +0 -73
  213. package/dist/projectPath-ChLhdOyt.cjs +0 -13
  214. package/dist/selfCheck-CF7XGJPb.mjs +0 -84
  215. package/dist/sessionModeFile-ByLbXTbg.mjs +0 -32
  216. package/dist/sessionModeFile-CLLdidiJ.cjs +0 -36
  217. package/dist/spawnAgents-Bw6j4tqz.mjs +0 -45
@@ -1,27 +1,125 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-_l1Sdmbi.cjs');
3
+ var logger = require('./logger-CphW5nUE.cjs');
4
+ var prompt = require('./prompt-lgF9IE82.cjs');
5
+ var client = require('./client-DJplzPjD.cjs');
6
+ var reportProgressTool = require('./reportProgressTool-14AXr959.cjs');
7
+ var index = require('./index-Dv0Q48P3.cjs');
4
8
  var promises = require('node:fs/promises');
5
9
  var node_crypto = require('node:crypto');
6
10
  var node_fs = require('node:fs');
7
11
  var path = require('node:path');
8
12
  var z = require('zod');
9
- var client = require('./client-Dnza1hgN.cjs');
10
- var context = require('./context-JoKu0V54.cjs');
11
- var sessionOps = require('./sessionOps-BAnr7n8t.cjs');
12
- var resources = require('./resources-JDPugcDq.cjs');
13
- var tools = require('./tools-CxJp4T1T.cjs');
14
- var reportProgressTool = require('./reportProgressTool-B9nCzbkL.cjs');
15
- var peerTools = require('./peerTools-iy3_6Yc5.cjs');
13
+ var client$1 = require('./client-D_loZ9IK.cjs');
14
+ var context = require('./context-6TP-iz_c.cjs');
15
+ var sessionOps = require('./sessionOps-BrGiU9-s.cjs');
16
+ var resources = require('./resources-CvIlkzpP.cjs');
17
+ var tools = require('./tools-BL7Byl_x.cjs');
18
+ var peerTools = require('./peerTools-DQNlrcqM.cjs');
16
19
  var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
17
20
  var node_http = require('node:http');
18
21
  var streamableHttp_js = require('@modelcontextprotocol/sdk/server/streamableHttp.js');
19
- var logger = require('./logger-DXTWlPzP.cjs');
20
22
  var limits = require('./limits-C-a7gr04.cjs');
21
- var downloadTarget = require('./downloadTarget-BN5vZt3K.cjs');
23
+ var downloadTarget = require('./downloadTarget-CEb9che-.cjs');
22
24
  var agentGuidance = require('./agentGuidance-BtBx2xxE.cjs');
25
+ var webPanels = require('./webPanels-FCgFKvVe.cjs');
26
+ var persistence = require('./persistence-9BMYspxG.cjs');
27
+ var pushNotifications = require('./pushNotifications-DI92havG.cjs');
23
28
  var previewPath = require('./previewPath-B0rBdhy1.cjs');
24
- var crypto = require('crypto');
29
+ var require$$3 = require('crypto');
30
+
31
+ function createProjectInjector(deps) {
32
+ const timeoutMs = deps.timeoutMs ?? 1500;
33
+ const now = deps.now ?? Date.now;
34
+ const presenceEvery = deps.presenceMinIntervalMs ?? 3e4;
35
+ const state = { projectId: null, prefixSent: false, cursor: 0, injectedVersion: null };
36
+ const titles = /* @__PURE__ */ new Map();
37
+ let lastPresenceAt = 0;
38
+ let lastPresenceVersion = null;
39
+ const label = (id) => titles.get(id) ?? id.slice(0, 8);
40
+ function withTimeout(p) {
41
+ return Promise.race([p, new Promise((_, reject) => setTimeout(() => reject(new Error("project injection timeout")), timeoutMs).unref?.())]);
42
+ }
43
+ function reportPresence(force) {
44
+ const sid = deps.sessionId();
45
+ const meta = deps.metadata?.() ?? null;
46
+ const machineId = typeof meta?.machineId === "string" ? meta.machineId : null;
47
+ if (!sid || !machineId || !state.projectId) return;
48
+ const t = now();
49
+ if (!force && state.injectedVersion === lastPresenceVersion && t - lastPresenceAt < presenceEvery) return;
50
+ lastPresenceAt = t;
51
+ lastPresenceVersion = state.injectedVersion;
52
+ const entry = {
53
+ sessionId: sid,
54
+ agent: deps.agent,
55
+ state: "running",
56
+ injectedInstructionsVersion: state.injectedVersion,
57
+ ...typeof meta?.summary?.text === "string" ? { title: String(meta.summary.text).slice(0, 200) } : {},
58
+ ...typeof meta?.board?.progress === "string" ? { doing: String(meta.board.progress).slice(0, 200) } : {},
59
+ ...typeof meta?.worktree?.branch === "string" ? { branch: String(meta.worktree.branch).slice(0, 200) } : {},
60
+ ...typeof meta?.host === "string" ? { machine: String(meta.host).slice(0, 200) } : {},
61
+ ...Array.isArray(meta?.capabilities) ? { capabilities: meta.capabilities.filter((c) => typeof c === "string").slice(0, 32) } : {}
62
+ };
63
+ void deps.client.presence(machineId, [entry]).catch((error) => logger.logger.debug(`[projects] presence write skipped: ${String(error)}`));
64
+ }
65
+ function markDelivered(sid, ids) {
66
+ if (ids.length) void deps.client.delivered(sid, ids).catch((error) => logger.logger.debug(`[projects] delivered ack skipped: ${String(error)}`));
67
+ }
68
+ async function firstTurn(sid, message) {
69
+ const ctx = await withTimeout(deps.client.context(sid, {}, timeoutMs));
70
+ for (const s of ctx.sessions) if (s.title) titles.set(s.sessionId, s.title);
71
+ const built = prompt.buildFirstTurnPrefix(ctx, { label });
72
+ if (!built || !ctx.project) {
73
+ state.projectId = null;
74
+ return message;
75
+ }
76
+ state.projectId = ctx.project.id;
77
+ state.prefixSent = true;
78
+ state.cursor = ctx.asOf;
79
+ state.injectedVersion = built.instructionsVersion;
80
+ markDelivered(sid, ctx.unread.map((u) => u.id));
81
+ reportPresence(true);
82
+ return prompt.prependToMessage(message, built.prefix);
83
+ }
84
+ async function laterTurn(sid, message) {
85
+ const d = await withTimeout(deps.client.digest(sid, state.cursor, timeoutMs));
86
+ if (!d.projectId) {
87
+ state.projectId = null;
88
+ state.prefixSent = false;
89
+ state.injectedVersion = null;
90
+ return message;
91
+ }
92
+ if (d.projectId !== state.projectId) {
93
+ state.prefixSent = false;
94
+ return firstTurn(sid, message);
95
+ }
96
+ state.cursor = d.asOf;
97
+ if (d.instructions) state.injectedVersion = d.instructions.version;
98
+ markDelivered(sid, d.messages.map((m) => m.id));
99
+ reportPresence(!!d.instructions);
100
+ return prompt.prependToMessage(message, prompt.buildDigestLine(d, { label }));
101
+ }
102
+ return {
103
+ state: () => ({ ...state }),
104
+ /** A fresh agent with no memory of earlier turns (ACP backend restart, new Claude conversation) needs P again. */
105
+ reset() {
106
+ state.prefixSent = false;
107
+ state.cursor = 0;
108
+ },
109
+ async decorate(message) {
110
+ if (typeof message !== "string") return message;
111
+ const sid = deps.sessionId();
112
+ if (!sid || deps.client.isDisabled()) return message;
113
+ try {
114
+ const out = state.prefixSent ? await laterTurn(sid, message) : await firstTurn(sid, message);
115
+ return out;
116
+ } catch (error) {
117
+ if (!(error instanceof client.ProjectsUnsupportedError)) logger.logger.debug(`[projects] injection skipped: ${String(error)}`);
118
+ return message;
119
+ }
120
+ }
121
+ };
122
+ }
25
123
 
26
124
  const TEAMS_ADOPT_CAPABILITY = "teams-adopt-v1";
27
125
  const TeamAdoptSchema = z.z.object({
@@ -78,7 +176,7 @@ async function retainTeam(path, input, resolvedTeamId, guidanceDelivered = false
78
176
  }
79
177
  }
80
178
  function createTeamAdoption(sessionId) {
81
- const client$1 = client.createTeamsClient(sessionId);
179
+ const client = client$1.createTeamsClient(sessionId);
82
180
  let current;
83
181
  return (raw) => {
84
182
  const parsed = TeamAdoptSchema.safeParse(raw);
@@ -107,7 +205,7 @@ function createTeamAdoption(sessionId) {
107
205
  let intent;
108
206
  try {
109
207
  intent = await retainIntent(path, input);
110
- const connected = await client$1.initialize(input, { resumeAdoption: true, expectedTeamId: intent.resolvedTeamId, onTeamResolved: (teamId) => retainTeam(path, input, teamId, intent?.guidanceDelivered) });
208
+ const connected = await client.initialize(input, { resumeAdoption: true, expectedTeamId: intent.resolvedTeamId, onTeamResolved: (teamId) => retainTeam(path, input, teamId, intent?.guidanceDelivered) });
111
209
  const instructions = `${resources.TEAM_SKILL}
112
210
 
113
211
  This session is now connected as the team lead. Call team_inspect to read the authoritative state before continuing the user's goal. Do not call team_create or team_join again.`;
@@ -118,7 +216,7 @@ This session is now connected as the team lead. Call team_inspect to read the au
118
216
  }
119
217
  operation.result = { status: "connected", teamId: connected.team.id, botId: connected.botId, instructions };
120
218
  } catch (error) {
121
- if (error instanceof client.TeamConnectionPreflightError && intent?.fresh && !intent.resolvedTeamId) {
219
+ if (error instanceof client$1.TeamConnectionPreflightError && intent?.fresh && !intent.resolvedTeamId) {
122
220
  await promises.unlink(path).catch(() => {
123
221
  });
124
222
  operation.safeToChange = true;
@@ -130,6 +228,41 @@ This session is now connected as the team lead. Call team_inspect to read the au
130
228
  };
131
229
  }
132
230
 
231
+ const REQUEST_HUMAN_TOOL_NAME = "request_human";
232
+ const REQUEST_HUMAN_REASON_MAX = 200;
233
+ const REQUEST_HUMAN_DEDUPE_MS = 6e4;
234
+ const REQUEST_HUMAN_TOOL_DESCRIPTION = "Ask the user to step in when you cannot continue on your own: a captcha, 2FA code, QR scan, OAuth consent page, or a decision only they can make. Sends a push notification and marks the task board as blocked. Give a short reason (no secrets; the server can read it). If this machine declares a web panel showing what you are working in (e.g. a remote desktop or browser dashboard), pass its id as `panel` so the notification opens it. Afterwards, poll for your own completion condition (the page changed, the element disappeared) instead of waiting for a reply.";
235
+ function createRequestHuman(deps) {
236
+ const now = deps.now ?? Date.now;
237
+ let last = null;
238
+ return async (rawReason, panel) => {
239
+ const reason = rawReason.replace(/\s+/g, " ").trim().slice(0, REQUEST_HUMAN_REASON_MAX);
240
+ if (!reason) return { notified: false, error: "reason must be a non-empty string" };
241
+ await deps.reportBlocked(reason);
242
+ const at = now();
243
+ if (last && last.reason === reason && at - last.at < REQUEST_HUMAN_DEDUPE_MS) {
244
+ return { notified: true, deduped: true };
245
+ }
246
+ let url = `/session/${encodeURIComponent(deps.sessionId)}`;
247
+ let unknownPanel;
248
+ if (panel) {
249
+ const machineId = deps.machineId();
250
+ const { panels } = webPanels.normalizeWebPanels(await deps.readPanels().catch(() => void 0));
251
+ if (machineId && panels.some((p) => p.id === panel)) url = webPanels.webPanelPath(machineId, panel);
252
+ else unknownPanel = panel;
253
+ }
254
+ const sent = await deps.sendAttention({ sessionId: deps.sessionId, reason, url });
255
+ if (sent.sent) last = { reason, at };
256
+ return { notified: sent.sent, url, ...unknownPanel ? { unknownPanel } : {}, ...sent.error ? { error: sent.error } : {} };
257
+ };
258
+ }
259
+ function requestHumanResultText(r) {
260
+ if (r.deduped) return "Already asked for this in the last minute; the board still shows it. Keep polling your completion condition.";
261
+ if (!r.notified) return `Could not notify the user: ${r.error ?? "unknown error"}. The task board is marked blocked.`;
262
+ const panelNote = r.unknownPanel ? ` (panel "${r.unknownPanel}" is not declared on this machine, so the notification opens the session instead)` : "";
263
+ return `Notified the user${panelNote}. This does not mean they have seen it. Poll your own completion condition (URL changed, element gone) instead of waiting for a reply.`;
264
+ }
265
+
133
266
  function createMcpServer(handlers, options, sessionId, client) {
134
267
  const mcp = new mcp_js.McpServer({
135
268
  name: "Very Happy Tools",
@@ -138,6 +271,7 @@ function createMcpServer(handlers, options, sessionId, client) {
138
271
  tools.registerTeamsTools(mcp, sessionId);
139
272
  reportProgressTool.registerAutomationTools(mcp);
140
273
  if (client) peerTools.registerSessionPeerTools(mcp, peerTools.createSessionPeerToolExecutor(client));
274
+ if (client) reportProgressTool.registerProjectTools(mcp, reportProgressTool.createProjectToolExecutor(() => client.sessionId));
141
275
  mcp.registerTool("change_title", {
142
276
  description: "Change the title of the current chat session",
143
277
  title: "Change Chat Title",
@@ -224,6 +358,18 @@ function createMcpServer(handlers, options, sessionId, client) {
224
358
  isError: true
225
359
  };
226
360
  });
361
+ mcp.registerTool(REQUEST_HUMAN_TOOL_NAME, {
362
+ description: REQUEST_HUMAN_TOOL_DESCRIPTION,
363
+ title: "Ask the user to step in",
364
+ inputSchema: {
365
+ reason: z.z.string().describe("What you need from the user, one short line (no secrets)"),
366
+ panel: z.z.string().optional().describe("Id of this machine's web panel that shows what you are working in (from ~/.happy/settings.json webPanels)")
367
+ }
368
+ }, async (args) => {
369
+ const response = await handlers.requestHuman(String(args.reason ?? ""), args.panel);
370
+ logger.logger.debug("[happyMCP] request_human response:", response);
371
+ return { content: [{ type: "text", text: requestHumanResultText(response) }], isError: response.error === "reason must be a non-empty string" };
372
+ });
227
373
  reportProgressTool.registerReportProgressTool(mcp, async (args) => {
228
374
  const response = await handlers.reportProgress(String(args.progress ?? ""), reportProgressTool.normalizeAttention(args.attention), reportProgressTool.normalizePhase(args.phase));
229
375
  logger.logger.debug("[happyMCP] report_progress response:", response);
@@ -321,10 +467,66 @@ async function startHappyServer(client, options) {
321
467
  } catch (error) {
322
468
  return { delivered: false, truncated: false, totalBytes: 0, error: String(error) };
323
469
  }
324
- }
470
+ },
471
+ requestHuman: createRequestHuman({
472
+ sessionId: client.sessionId,
473
+ machineId: () => client.getMetadata()?.machineId,
474
+ readPanels: async () => (await persistence.readSettings()).webPanels,
475
+ // Same board write (and attention-change throttle bypass) as report_progress.
476
+ reportBlocked: (reason) => handlers.reportProgress(reason, "blocked"),
477
+ sendAttention: (input) => options?.push ? options.push.sendAttention({ ...input, sessionTitle: pushNotifications.getSessionNotificationBody(client.getMetadata()) }) : Promise.resolve({ sent: false, error: "push is not available in this runner" })
478
+ })
325
479
  };
326
480
  const contextPath = "/runtime-context/" + node_crypto.randomUUID();
481
+ const steerPath = "/runtime-steer/" + node_crypto.randomUUID();
327
482
  const server = node_http.createServer(async (req, res) => {
483
+ if (req.url?.startsWith("/runtime-steer/")) {
484
+ const steer = options?.piSteer;
485
+ if (!steer || req.headers.origin) {
486
+ res.writeHead(403).end();
487
+ return;
488
+ }
489
+ if (req.method === "GET" && req.url === steerPath) {
490
+ const gone = new AbortController();
491
+ res.on("close", () => gone.abort());
492
+ const item = await steer.take(25e3, gone.signal);
493
+ if (res.writableEnded || gone.signal.aborted) {
494
+ return;
495
+ }
496
+ if (!item) {
497
+ res.writeHead(204).end();
498
+ return;
499
+ }
500
+ res.writeHead(200, { "content-type": "application/json" }).end(JSON.stringify(item));
501
+ return;
502
+ }
503
+ if (req.method === "POST" && (req.url === steerPath + "/hello" || req.url === steerPath + "/ack")) {
504
+ let body = "";
505
+ for await (const chunk of req) {
506
+ body += chunk.toString();
507
+ if (Buffer.byteLength(body) > 1024) {
508
+ res.writeHead(413).end();
509
+ return;
510
+ }
511
+ }
512
+ if (req.url.endsWith("/hello")) {
513
+ steer.hello();
514
+ res.writeHead(204).end();
515
+ return;
516
+ }
517
+ try {
518
+ const ack = JSON.parse(body);
519
+ if (typeof ack.id !== "number") throw new Error("id");
520
+ steer.ack(ack.id, ack.delivered === true);
521
+ res.writeHead(204).end();
522
+ } catch {
523
+ res.writeHead(400).end();
524
+ }
525
+ return;
526
+ }
527
+ res.writeHead(403).end();
528
+ return;
529
+ }
328
530
  if (req.url?.startsWith("/runtime-context/")) {
329
531
  if (!options?.onContextUsage || req.url !== contextPath || req.method !== "POST" || req.headers.origin) {
330
532
  res.writeHead(403).end();
@@ -381,14 +583,17 @@ async function startHappyServer(client, options) {
381
583
  return {
382
584
  url: baseUrl.toString(),
383
585
  contextUsageUrl: options?.onContextUsage ? new URL(contextPath, baseUrl).toString() : void 0,
586
+ steerUrl: options?.piSteer ? new URL(steerPath, baseUrl).toString() : void 0,
384
587
  toolNames: [
385
588
  "change_title",
386
589
  limits.CLIPBOARD_TOOL_NAME,
387
590
  agentGuidance.PREVIEW_TOOL_NAME,
388
591
  agentGuidance.REPORT_PROGRESS_TOOL_NAME,
592
+ REQUEST_HUMAN_TOOL_NAME,
389
593
  ...tools.TEAM_TOOL_NAMES,
390
594
  ...reportProgressTool.AUTOMATION_TOOL_NAMES,
391
595
  ...peerTools.SESSION_PEER_TOOL_NAMES,
596
+ ...reportProgressTool.PROJECT_TOOL_NAMES,
392
597
  ...options?.assistant && !process.env.VH_TEAM_SCOPE_FILE ? downloadTarget.ASSISTANT_TOOL_NAMES : []
393
598
  ],
394
599
  stop: () => {
@@ -482,8 +687,9 @@ function deterministicStringify(obj, options = {}) {
482
687
  }
483
688
  function hashObject(obj, options, encoding = "hex") {
484
689
  const jsonString = deterministicStringify(obj, options);
485
- return crypto.createHash("sha256").update(jsonString).digest(encoding);
690
+ return require$$3.createHash("sha256").update(jsonString).digest(encoding);
486
691
  }
487
692
 
693
+ exports.createProjectInjector = createProjectInjector;
488
694
  exports.hashObject = hashObject;
489
695
  exports.startHappyServer = startHappyServer;
@@ -1,19 +1,19 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var configuration = require('./configuration-4TGMrjul.cjs');
5
- var persistence = require('./persistence-BfX72dne.cjs');
6
- var controlClient = require('./controlClient-BTaZlbC6.cjs');
4
+ var configuration = require('./configuration-CYO-kPOS.cjs');
5
+ var persistence = require('./persistence-9BMYspxG.cjs');
6
+ var controlClient = require('./controlClient-Bqv5v5OM.cjs');
7
7
  var doctor$1 = require('./doctor-u46qYYKX.cjs');
8
8
  var node_fs = require('node:fs');
9
9
  var path = require('node:path');
10
- var projectPath = require('./projectPath-ChLhdOyt.cjs');
11
- var _package = require('./package-DY4zTbKS.cjs');
12
- var doctorReadiness = require('./doctorReadiness-BCZGcN0a.cjs');
10
+ var projectPath = require('./projectPath-C3ioB4Bu.cjs');
11
+ var _package = require('./package-KhLqBDX9.cjs');
12
+ var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
13
13
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
14
14
  var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
15
15
  var node_child_process = require('node:child_process');
16
- var piRunnerArgs = require('./piRunnerArgs-CRQVR9o-.cjs');
16
+ var piRunnerArgs = require('./piRunnerArgs-DGaq6VYM.cjs');
17
17
 
18
18
  function shareSafeProcessLine(process2) {
19
19
  return `PID ${process2.pid}: command arguments hidden for privacy`;
@@ -313,8 +313,8 @@ ${typeLabels[type] || type}:`));
313
313
  }
314
314
  console.log(chalk.gray(" An external claude command is only needed for native terminal/mirror use."));
315
315
  try {
316
- const { resolveAgentHomesForCli } = await Promise.resolve().then(function () { return require('./agentHome-CEp9RMyK.cjs'); });
317
- const { describeAgentHome } = await Promise.resolve().then(function () { return require('./index-BYOZ_8WZ.cjs'); });
316
+ const { resolveAgentHomesForCli } = await Promise.resolve().then(function () { return require('./agentHome-C7Sb7-Tz.cjs'); });
317
+ const { describeAgentHome } = await Promise.resolve().then(function () { return require('./index-C64Ufj4D.cjs'); });
318
318
  const homes = await resolveAgentHomesForCli();
319
319
  console.log(chalk.green(`\u2713 Claude config dir: ${describeAgentHome(homes.claudeConfigDir)}`));
320
320
  console.log(chalk.green(`\u2713 Codex home: ${describeAgentHome(homes.codexHome)}`));
@@ -1,17 +1,17 @@
1
1
  import chalk from 'chalk';
2
- import { c as configuration } from './configuration-DVrb61aY.mjs';
3
- import { r as readSettings, g as readCredentials, d as readDaemonState } from './persistence-DTk4sNpd.mjs';
4
- import { a as checkIfDaemonRunningAndCleanupStaleState } from './controlClient-BYKyGyxj.mjs';
2
+ import { c as configuration } from './configuration-PxzEJumr.mjs';
3
+ import { r as readSettings, g as readCredentials, d as readDaemonState } from './persistence-BFUOHW5h.mjs';
4
+ import { a as checkIfDaemonRunningAndCleanupStaleState } from './controlClient-DoeYovwP.mjs';
5
5
  import { findAllHappyProcesses } from './doctor-BPkYWSuq.mjs';
6
6
  import { statSync, realpathSync, existsSync, readdirSync } from 'node:fs';
7
7
  import { isAbsolute, resolve, dirname, basename, delimiter, join } from 'node:path';
8
8
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
9
- import { p as packageJson } from './package-B7B03ejW.mjs';
9
+ import { p as packageJson } from './package-7Ld1YMhh.mjs';
10
10
  import { s as shareableSettingsSummary, c as collectRuntimeReadiness, S as SUPPORTED_NODE_LABEL, r as resolveClaudeCredentialReadiness, a as toolProbeLabel, b as daemonReadiness, d as daemonEndpointsMatch } from './doctorReadiness-C208SMN9.mjs';
11
11
  import { c as credentialRelayProblem } from './authRelay-DhQhkBvX.mjs';
12
12
  import { d as deriveLocalCliUpdateSummary } from './cliUpdate-Y34VGe9Y.mjs';
13
13
  import { spawnSync } from 'node:child_process';
14
- import { c as piInstallCommand } from './piRunnerArgs-AT8QJY7x.mjs';
14
+ import { c as piInstallCommand } from './piRunnerArgs-H2pgpA5z.mjs';
15
15
 
16
16
  function shareSafeProcessLine(process2) {
17
17
  return `PID ${process2.pid}: command arguments hidden for privacy`;
@@ -311,8 +311,8 @@ ${typeLabels[type] || type}:`));
311
311
  }
312
312
  console.log(chalk.gray(" An external claude command is only needed for native terminal/mirror use."));
313
313
  try {
314
- const { resolveAgentHomesForCli } = await import('./agentHome-C1xi37as.mjs');
315
- const { describeAgentHome } = await import('./index-Bvldtdny.mjs');
314
+ const { resolveAgentHomesForCli } = await import('./agentHome-CmGy0NWv.mjs');
315
+ const { describeAgentHome } = await import('./index-Bsvbgh9e.mjs');
316
316
  const homes = await resolveAgentHomesForCli();
317
317
  console.log(chalk.green(`\u2713 Claude config dir: ${describeAgentHome(homes.claudeConfigDir)}`));
318
318
  console.log(chalk.green(`\u2713 Codex home: ${describeAgentHome(homes.codexHome)}`));
@@ -389,4 +389,4 @@ var doctor = /*#__PURE__*/Object.freeze({
389
389
  runDoctorDaemon: runDoctorDaemon
390
390
  });
391
391
 
392
- export { getEnvironmentInfo as a, doctor as d, globalPrefixForPackage as g };
392
+ export { globalPrefixForPackage as a, doctor as d, getEnvironmentInfo as g };
@@ -4,7 +4,7 @@ var node_child_process = require('node:child_process');
4
4
  var node_fs = require('node:fs');
5
5
  var os = require('node:os');
6
6
  var path = require('node:path');
7
- var detectCLI = require('./detectCLI-DR9ZaN6B.cjs');
7
+ var detectCLI = require('./detectCLI-BuYR_Qxe.cjs');
8
8
 
9
9
  const SUPPORTED_NODE_LABEL = "20.19+ within 20.x, 22.13+ within 22.x, or 24+";
10
10
  const MIN_TMUX_ENV_MAJOR = 3;
@@ -3,14 +3,14 @@
3
3
  var promises = require('node:fs/promises');
4
4
  var os = require('node:os');
5
5
  var z = require('zod');
6
- var logger = require('./logger-DXTWlPzP.cjs');
7
- var persistence = require('./persistence-BfX72dne.cjs');
8
- var controlClient = require('./controlClient-BTaZlbC6.cjs');
9
- var sessionOps = require('./sessionOps-BAnr7n8t.cjs');
10
- var remoteSessionClient = require('./remoteSessionClient-BRTIOX5b.cjs');
6
+ var logger = require('./logger-CphW5nUE.cjs');
7
+ var persistence = require('./persistence-9BMYspxG.cjs');
8
+ var controlClient = require('./controlClient-Bqv5v5OM.cjs');
9
+ var sessionOps = require('./sessionOps-BrGiU9-s.cjs');
10
+ var remoteSessionClient = require('./remoteSessionClient-D843fkzL.cjs');
11
11
  var ids = require('./ids-B6ZC0HGt.cjs');
12
12
  var terminals = require('./terminals-B_bfC9c2.cjs');
13
- var bootstrap = require('./bootstrap-DCQ87Aan.cjs');
13
+ var bootstrap = require('./bootstrap-DoA7okld.cjs');
14
14
  var path = require('node:path');
15
15
 
16
16
  const PERSONAL_MEMORY_SOFT_LIMIT_CHARS = 2e3;
@@ -1,14 +1,14 @@
1
1
  import { readFile, writeFile, appendFile, stat } from 'node:fs/promises';
2
2
  import os from 'node:os';
3
3
  import { z } from 'zod';
4
- import { l as logger } from './logger--vAVtXB_.mjs';
5
- import { b as readPersistedSessions } from './persistence-DTk4sNpd.mjs';
6
- import { f as spawnDaemonSession } from './controlClient-BYKyGyxj.mjs';
7
- import { a as listSessions, r as readSessionTranscript, s as sessionWebUrl, g as waitForSessionKey, e as sendUserMessage, b as stopSession, d as archiveSession } from './sessionOps-BVoXe12O.mjs';
8
- import { r as readRemoteTranscript, s as sendRemoteMessage, d as deliverToSession, R as RemoteSessionOpsError } from './remoteSessionClient-DRb2Jr5s.mjs';
4
+ import { l as logger } from './logger-BUngm5Xg.mjs';
5
+ import { c as readPersistedSessions } from './persistence-BFUOHW5h.mjs';
6
+ import { e as spawnDaemonSession } from './controlClient-DoeYovwP.mjs';
7
+ import { a as listSessions, r as readSessionTranscript, s as sessionWebUrl, g as waitForSessionKey, e as sendUserMessage, b as stopSession, d as archiveSession } from './sessionOps-C58iDeD5.mjs';
8
+ import { r as readRemoteTranscript, s as sendRemoteMessage, d as deliverToSession, R as RemoteSessionOpsError } from './remoteSessionClient-PP-mOKmw.mjs';
9
9
  import { i as isValidSessionId, a as isValidTerminalId } from './ids-DU6sLx4C.mjs';
10
10
  import { l as listVhTerminals, r as readVhTerminal, s as sendToVhTerminal } from './terminals-Dlg0x3nY.mjs';
11
- import { bootstrapAssistantHome, assistantPersonalMemoryPath } from './bootstrap-BUagGC_-.mjs';
11
+ import { bootstrapAssistantHome, assistantPersonalMemoryPath } from './bootstrap-Dt5I1SOl.mjs';
12
12
  import { join, isAbsolute, normalize } from 'node:path';
13
13
 
14
14
  const PERSONAL_MEMORY_SOFT_LIMIT_CHARS = 2e3;
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-DXTWlPzP.cjs');
4
- var controlClient = require('./controlClient-BTaZlbC6.cjs');
5
- var spawnHappyCLI = require('./spawnHappyCLI-fzUagkKV.cjs');
6
- var persistence = require('./persistence-BfX72dne.cjs');
7
- var configuration = require('./configuration-4TGMrjul.cjs');
8
- var doctorReadiness = require('./doctorReadiness-BCZGcN0a.cjs');
3
+ var logger = require('./logger-CphW5nUE.cjs');
4
+ var controlClient = require('./controlClient-Bqv5v5OM.cjs');
5
+ var spawnHappyCLI = require('./spawnHappyCLI-DnUZv0X2.cjs');
6
+ var persistence = require('./persistence-9BMYspxG.cjs');
7
+ var configuration = require('./configuration-CYO-kPOS.cjs');
8
+ var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
9
9
 
10
10
  function extractNoSandboxFlag(args) {
11
11
  let noSandbox = false;
@@ -1,8 +1,8 @@
1
- import { l as logger } from './logger--vAVtXB_.mjs';
2
- import { i as isDaemonRunningCurrentlyInstalledHappyVersion, a as checkIfDaemonRunningAndCleanupStaleState, b as stopDaemon } from './controlClient-BYKyGyxj.mjs';
3
- import { s as spawnHappyCLI } from './spawnHappyCLI-C2stUioM.mjs';
4
- import { d as readDaemonState } from './persistence-DTk4sNpd.mjs';
5
- import { c as configuration } from './configuration-DVrb61aY.mjs';
1
+ import { l as logger } from './logger-BUngm5Xg.mjs';
2
+ import { i as isDaemonRunningCurrentlyInstalledHappyVersion, a as checkIfDaemonRunningAndCleanupStaleState, s as stopDaemon } from './controlClient-DoeYovwP.mjs';
3
+ import { s as spawnHappyCLI } from './spawnHappyCLI-BjFZc_7V.mjs';
4
+ import { d as readDaemonState } from './persistence-BFUOHW5h.mjs';
5
+ import { c as configuration } from './configuration-PxzEJumr.mjs';
6
6
  import { d as daemonEndpointsMatch } from './doctorReadiness-C208SMN9.mjs';
7
7
 
8
8
  function extractNoSandboxFlag(args) {
@@ -1,24 +1,24 @@
1
1
  'use strict';
2
2
 
3
3
  var node_fs = require('node:fs');
4
- var spawnHappyCLI = require('./spawnHappyCLI-fzUagkKV.cjs');
4
+ var spawnHappyCLI = require('./spawnHappyCLI-DnUZv0X2.cjs');
5
5
  var axios = require('axios');
6
6
  var tweetnacl = require('tweetnacl');
7
7
  var z = require('zod');
8
8
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
9
- var configuration = require('./configuration-4TGMrjul.cjs');
10
- var localHappyAgentAuth = require('./localHappyAgentAuth-Br-mgogg.cjs');
9
+ var configuration = require('./configuration-CYO-kPOS.cjs');
10
+ var localHappyAgentAuth = require('./localHappyAgentAuth-DZHQnIW9.cjs');
11
11
  require('cross-spawn');
12
12
  require('node:path');
13
- require('./projectPath-ChLhdOyt.cjs');
13
+ require('./projectPath-C3ioB4Bu.cjs');
14
14
  require('path');
15
15
  require('url');
16
- require('./logger-DXTWlPzP.cjs');
16
+ require('./logger-CphW5nUE.cjs');
17
17
  require('chalk');
18
18
  require('node:util');
19
19
  require('node:crypto');
20
20
  require('node:os');
21
- require('./package-DY4zTbKS.cjs');
21
+ require('./package-KhLqBDX9.cjs');
22
22
  require('node:fs/promises');
23
23
 
24
24
  const ResumableMetadataSchema = z.z.object({
@@ -142,10 +142,13 @@ function parseResumeCommandArgs(args) {
142
142
  };
143
143
  }
144
144
  function resolveFlavor(metadata) {
145
+ if (metadata.flavor === "acp" && metadata.piSessionId) {
146
+ return "pi";
147
+ }
145
148
  if (metadata.flavor === "codex" || metadata.codexThreadId) {
146
149
  return "codex";
147
150
  }
148
- if (metadata.flavor === "claude" || metadata.claudeSessionId) {
151
+ if (metadata.flavor === "claude" || metadata.claudeSessionId || metadata.flavor === void 0) {
149
152
  return "claude";
150
153
  }
151
154
  return null;
@@ -169,6 +172,19 @@ function buildResumeLaunch(session, options = {}) {
169
172
  args
170
173
  };
171
174
  }
175
+ if (flavor === "pi") {
176
+ const args = ["pi"];
177
+ if (options.startedBy) {
178
+ args.push("--started-by", options.startedBy);
179
+ }
180
+ if (!options.freshConversation) {
181
+ args.push("--resume", metadata.piSessionId);
182
+ }
183
+ return {
184
+ cwd: metadata.path,
185
+ args
186
+ };
187
+ }
172
188
  if (flavor === "claude") {
173
189
  const args = ["claude"];
174
190
  if (options.claudeStartingMode) {
@@ -1,22 +1,22 @@
1
1
  import { existsSync } from 'node:fs';
2
- import { s as spawnHappyCLI } from './spawnHappyCLI-C2stUioM.mjs';
2
+ import { s as spawnHappyCLI } from './spawnHappyCLI-BjFZc_7V.mjs';
3
3
  import axios, { AxiosError } from 'axios';
4
4
  import tweetnacl from 'tweetnacl';
5
5
  import { z } from 'zod';
6
6
  import { d as decodeBase64, a as decryptWithDataKey, b as decryptLegacy } from './authRelay-DhQhkBvX.mjs';
7
- import { c as configuration } from './configuration-DVrb61aY.mjs';
8
- import { g as getLocalHappyAgentCredentialPath, r as readLocalHappyAgentCredentials } from './localHappyAgentAuth-BezKSFDi.mjs';
7
+ import { c as configuration } from './configuration-PxzEJumr.mjs';
8
+ import { g as getLocalHappyAgentCredentialPath, r as readLocalHappyAgentCredentials } from './localHappyAgentAuth-Dn1jYDpt.mjs';
9
9
  import 'cross-spawn';
10
10
  import 'node:path';
11
11
  import './projectPath-BTBIMB57.mjs';
12
12
  import 'path';
13
13
  import 'url';
14
- import './logger--vAVtXB_.mjs';
14
+ import './logger-BUngm5Xg.mjs';
15
15
  import 'chalk';
16
16
  import 'node:util';
17
17
  import 'node:crypto';
18
18
  import 'node:os';
19
- import './package-B7B03ejW.mjs';
19
+ import './package-7Ld1YMhh.mjs';
20
20
  import 'node:fs/promises';
21
21
 
22
22
  const ResumableMetadataSchema = z.object({
@@ -140,10 +140,13 @@ function parseResumeCommandArgs(args) {
140
140
  };
141
141
  }
142
142
  function resolveFlavor(metadata) {
143
+ if (metadata.flavor === "acp" && metadata.piSessionId) {
144
+ return "pi";
145
+ }
143
146
  if (metadata.flavor === "codex" || metadata.codexThreadId) {
144
147
  return "codex";
145
148
  }
146
- if (metadata.flavor === "claude" || metadata.claudeSessionId) {
149
+ if (metadata.flavor === "claude" || metadata.claudeSessionId || metadata.flavor === void 0) {
147
150
  return "claude";
148
151
  }
149
152
  return null;
@@ -167,6 +170,19 @@ function buildResumeLaunch(session, options = {}) {
167
170
  args
168
171
  };
169
172
  }
173
+ if (flavor === "pi") {
174
+ const args = ["pi"];
175
+ if (options.startedBy) {
176
+ args.push("--started-by", options.startedBy);
177
+ }
178
+ if (!options.freshConversation) {
179
+ args.push("--resume", metadata.piSessionId);
180
+ }
181
+ return {
182
+ cwd: metadata.path,
183
+ args
184
+ };
185
+ }
170
186
  if (flavor === "claude") {
171
187
  const args = ["claude"];
172
188
  if (options.claudeStartingMode) {