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,35 +1,38 @@
1
- import { D as DefaultTransport, A as AcpBackend, i as isAgentExitError, a as acpNoticeMessage } from './AcpBackend-DCQXHRzT.mjs';
2
- export { b as DEFAULT_IDLE_TIMEOUT_MS, c as DEFAULT_TOOL_CALL_TIMEOUT_MS, e as extractErrorDetail, f as formatDuration, d as formatDurationMinutes, h as handleAgentMessageChunk, g as handleAgentThoughtChunk, j as handleLegacyMessageChunk, k as handlePlanUpdate, l as handleThinkingUpdate, m as handleToolCall, n as handleToolCallUpdate, p as parseArgsFromContent } from './AcpBackend-DCQXHRzT.mjs';
3
- import { l as logger } from './logger--vAVtXB_.mjs';
4
- import { A as AcpSessionManager } from './AcpSessionManager-BXrQcqwC.mjs';
5
- import { o as BUILTIN_TODO_DISCOVERY, P as PROMPT_QUEUE_CAPABILITY } from './index-Clqlu17M.mjs';
1
+ import { D as DefaultTransport, A as AcpBackend, i as isAgentExitError, a as acpNoticeMessage } from './AcpBackend-B8Zi30Zh.mjs';
2
+ export { b as DEFAULT_IDLE_TIMEOUT_MS, c as DEFAULT_TOOL_CALL_TIMEOUT_MS, e as extractErrorDetail, f as formatDuration, d as formatDurationMinutes, h as handleAgentMessageChunk, g as handleAgentThoughtChunk, j as handleLegacyMessageChunk, k as handlePlanUpdate, l as handleThinkingUpdate, m as handleToolCall, n as handleToolCallUpdate, p as parseArgsFromContent } from './AcpBackend-B8Zi30Zh.mjs';
3
+ import { l as logger } from './logger-BUngm5Xg.mjs';
4
+ import { A as AcpSessionManager } from './AcpSessionManager-i8Rab0xT.mjs';
5
+ import { q as PI_STEER_CAPABILITY, f as BUILTIN_TODO_DISCOVERY, P as PROMPT_QUEUE_CAPABILITY, a as PROJECT_SESSION_CAPABILITY } from './index-C6Vn5Eac.mjs';
6
6
  import { r as registerAgentAttachmentDownloads } from './agentAttachments-M_B5qEF2.mjs';
7
- import { c as configuration } from './configuration-DVrb61aY.mjs';
8
- import { a as stageClaudeAttachments, b as appendStagedAttachmentsToPrompt, C as CLAUDE_ATTACHMENT_KINDS } from './attachmentContent-DkkdpSSJ.mjs';
9
- import { p as preparePiTeamsRuntime } from './piRuntime-E44qTVQ4.mjs';
7
+ import { c as configuration } from './configuration-PxzEJumr.mjs';
8
+ import { a as stageClaudeAttachments, b as appendStagedAttachmentsToPrompt, C as CLAUDE_ATTACHMENT_KINDS } from './attachmentContent-CIn4iPEk.mjs';
9
+ import { p as preparePiTeamsRuntime } from './piRuntime-CdN0JAsa.mjs';
10
10
  import { randomUUID } from 'node:crypto';
11
11
  import { join } from 'node:path';
12
- import { c as connectionState, A as ApiClient } from './api-Dib0dmqC.mjs';
13
- import { M as MessageQueue2, r as registerKillSessionHandler } from './registerKillSessionHandler-gwJ5lTf0.mjs';
14
- import { h as hashObject, s as startHappyServer } from './deterministicJson-C5ZwZ7hu.mjs';
15
- import { r as readSettings } from './persistence-DTk4sNpd.mjs';
16
- import { g as getInitialMachineMetadata } from './machineMetadata-B1H9gNbN.mjs';
17
- import { c as createSessionMetadata } from './createSessionMetadata-8Fuj2-IV.mjs';
18
- import { s as setupOfflineReconnection } from './setupOfflineReconnection-_eD4cuUT.mjs';
19
- import { n as notifyDaemonSessionStarted, j as reportSessionEditToDaemon } from './controlClient-BYKyGyxj.mjs';
20
- import { e as encodeBase64 } from './authRelay-DhQhkBvX.mjs';
21
- import { S as StreamRelay } from './streamRelay-CJoMk_d2.mjs';
12
+ import { c as connectionState, A as ApiClient } from './api-Hov8p7CA.mjs';
13
+ import { h as hashObject, s as startHappyServer, c as createProjectInjector } from './deterministicJson-CTEJDqtS.mjs';
14
+ import { s as sharedProjectsClient } from './client-Ca5Pcgy_.mjs';
15
+ import { M as MessageQueue2, r as registerKillSessionHandler } from './registerKillSessionHandler-CaqqRYq6.mjs';
16
+ import { r as readSettings } from './persistence-BFUOHW5h.mjs';
17
+ import { g as getInitialMachineMetadata } from './machineMetadata-BXN_bKU3.mjs';
18
+ import { c as createSessionMetadata } from './createSessionMetadata-DDIChCx8.mjs';
19
+ import { s as setupOfflineReconnection } from './setupOfflineReconnection-1Qlek3wl.mjs';
20
+ import { c as createSessionForStartup } from './startupSessionCreate-uZ6BM0ty.mjs';
21
+ import { n as notifyDaemonSessionStarted, j as reportSessionEditToDaemon } from './controlClient-DoeYovwP.mjs';
22
+ import { d as decodeBase64, e as encodeBase64 } from './authRelay-DhQhkBvX.mjs';
23
+ import { c as claimSessionOrExit, a as applyServerSnapshot, w as withoutServerSnapshot, m as mergeReconnectMetadata } from './sessionLock-nBXdJxJm.mjs';
24
+ import { r as readAcpReconnectEnv, n as normalizeAcpPermissionMode, p as piRestartNotice, w as writeSessionModeFile, a as removeSessionModeFile } from './acpSessionResume-B9l54P-X.mjs';
25
+ import { S as StreamRelay } from './streamRelay-DnMCMMfV.mjs';
22
26
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
23
- import { B as BasePermissionHandler } from './BasePermissionHandler-BVlrEhIi.mjs';
24
- import { T as TitleGenerator } from './titleGenerator-BGEzNWC9.mjs';
25
- import { w as writeSessionModeFile, n as normalizeAcpPermissionMode, r as removeSessionModeFile } from './sessionModeFile-ByLbXTbg.mjs';
27
+ import { B as BasePermissionHandler } from './BasePermissionHandler-26fKbRCm.mjs';
28
+ import { T as TitleGenerator } from './titleGenerator-Uzbd4utr.mjs';
26
29
  import { E as EditReportThrottle, e as extractAcpEditPaths } from './editPaths-BVfS_FFL.mjs';
27
30
  import 'node:child_process';
28
31
  import '@agentclientprotocol/sdk';
29
- import './time-BuGWTVP6.mjs';
32
+ import './time-D3ETL7Jb.mjs';
30
33
  import './contentLogMetadata-BlWI0egu.mjs';
31
34
  import './processTree-CP5IvQ2Z.mjs';
32
- import './package-B7B03ejW.mjs';
35
+ import './package-7Ld1YMhh.mjs';
33
36
  import 'chalk';
34
37
  import 'node:util';
35
38
  import 'node:fs';
@@ -37,49 +40,52 @@ import '@paralleldrive/cuid2';
37
40
  import 'zod';
38
41
  import 'node:os';
39
42
  import 'node:fs/promises';
40
- import './attachmentLimits-UyFn8fkQ.mjs';
41
- import './resources-BdFBQi8r.mjs';
43
+ import './pushNotifications-DCiBEVeC.mjs';
42
44
  import 'axios';
43
- import './lidState-DNMlIhX0.mjs';
45
+ import './resources-y9jfyO-_.mjs';
46
+ import './lidState-bBrmaQd2.mjs';
44
47
  import 'os';
45
48
  import 'child_process';
46
49
  import 'node:events';
47
50
  import 'socket.io-client';
48
51
  import './limits-DIo7rEBR.mjs';
49
- import './registerCommonHandlers-CvIedVRf.mjs';
52
+ import './registerCommonHandlers-CTkCvjxt.mjs';
50
53
  import 'util';
51
54
  import 'fs/promises';
52
55
  import 'crypto';
53
56
  import 'path';
54
57
  import 'cross-spawn';
55
- import './sync-DbW07iQS.mjs';
56
- import './backgroundTaskActivity-BVwJBl02.mjs';
57
- import 'tweetnacl';
58
- import './types-CkqAACXx.mjs';
59
- import './client-BTX9hsbr.mjs';
60
- import './context-B3XPVJlj.mjs';
61
- import './sessionOps-BVoXe12O.mjs';
62
- import './tools-BtsrQnNS.mjs';
63
- import './reportProgressTool-D5tEoXMW.mjs';
64
- import './client-CnlkkrZO.mjs';
58
+ import './sync-BvVhDO40.mjs';
59
+ import './backgroundTaskActivity-8PdPxrvy.mjs';
60
+ import './prompt-BOouDaTM.mjs';
61
+ import './reportProgressTool-ZOCNjWHr.mjs';
62
+ import './client-CnB7kRCT.mjs';
65
63
  import './precheckCompat-DeEbilbr.mjs';
66
64
  import './agentGuidance-BDYt2Qy2.mjs';
67
65
  import './trimIdent-BAjmv_TG.mjs';
68
- import './peerTools-3R9RUARX.mjs';
66
+ import './client-D4uPb1uu.mjs';
67
+ import './context-CJGRRGWW.mjs';
68
+ import './sessionOps-C58iDeD5.mjs';
69
+ import './tools-Cho7iIWf.mjs';
70
+ import './peerTools-BOlDRyhi.mjs';
69
71
  import './ids-DU6sLx4C.mjs';
70
- import './remoteSessionClient-DRb2Jr5s.mjs';
72
+ import './remoteSessionClient-PP-mOKmw.mjs';
71
73
  import '@modelcontextprotocol/sdk/server/mcp.js';
72
74
  import 'node:http';
73
75
  import '@modelcontextprotocol/sdk/server/streamableHttp.js';
74
- import './downloadTarget-DJPwAZlu.mjs';
76
+ import './downloadTarget-jbOz1egC.mjs';
75
77
  import './terminals-Dlg0x3nY.mjs';
76
78
  import './terminalTitleSuggest-CeKsX_V6.mjs';
77
79
  import './tmuxSocket-B8Yx20sT.mjs';
78
- import './bootstrap-BUagGC_-.mjs';
80
+ import './bootstrap-Dt5I1SOl.mjs';
81
+ import './webPanels-B2_C2-3g.mjs';
79
82
  import './previewPath-CXN4Vag0.mjs';
83
+ import 'tweetnacl';
84
+ import './types-CkqAACXx.mjs';
80
85
  import './detectCLI-CSGMlV51.mjs';
81
86
  import 'fs';
82
- import './localHappyAgentAuth-BezKSFDi.mjs';
87
+ import './localHappyAgentAuth-Dn1jYDpt.mjs';
88
+ import './processTreeSnapshot-CuLJDNC-.mjs';
83
89
  import 'url';
84
90
  import 'node:module';
85
91
  import './oneShotPrompts-DT4p6RNd.mjs';
@@ -127,6 +133,113 @@ function describeAcpTurnFailure(agentName, error) {
127
133
  return { message: `${agentName} error: ${oneLine(detailOf(error))}`, exited: false };
128
134
  }
129
135
 
136
+ const OUT_OF_TURN_QUIET_MS = 6e4;
137
+ function isAcpTurnContent(msg) {
138
+ if (msg.type === "model-output") return typeof msg.textDelta === "string" && msg.textDelta.length > 0;
139
+ if (msg.type === "tool-call" || msg.type === "tool-result") return true;
140
+ return msg.type === "event" && msg.name === "thinking";
141
+ }
142
+ function outOfTurnAction(msg, state) {
143
+ if (state.inPromptTurn || !state.backendStarted) return null;
144
+ if (msg.type === "status" && msg.status === "idle") return state.open ? "end" : null;
145
+ if (!isAcpTurnContent(msg)) return null;
146
+ return state.open ? "touch" : "start";
147
+ }
148
+
149
+ function createPiSteerChannel() {
150
+ let nextId = 0;
151
+ const pending = [];
152
+ const waiters = /* @__PURE__ */ new Set();
153
+ const offers = /* @__PURE__ */ new Map();
154
+ let ready = false;
155
+ const readyListeners = [];
156
+ const hand = () => {
157
+ while (pending.length > 0 && waiters.size > 0) {
158
+ const waiter = waiters.values().next().value;
159
+ waiters.delete(waiter);
160
+ const item = pending.shift();
161
+ const offer = offers.get(item.id);
162
+ if (offer) offer.taken = true;
163
+ waiter(item);
164
+ }
165
+ };
166
+ return {
167
+ get ready() {
168
+ return ready;
169
+ },
170
+ /** The extension announced itself (first contact). */
171
+ hello() {
172
+ if (ready) return;
173
+ ready = true;
174
+ for (const listener of readyListeners.splice(0)) listener();
175
+ },
176
+ onReady(listener) {
177
+ if (ready) listener();
178
+ else readyListeners.push(listener);
179
+ },
180
+ /** Wrapper side: hand `text` to the running turn; true = pi took it. */
181
+ offer(text, timeoutMs) {
182
+ const item = { id: ++nextId, text };
183
+ return new Promise((resolve) => {
184
+ const timer = setTimeout(() => {
185
+ const offer = offers.get(item.id);
186
+ offers.delete(item.id);
187
+ const index = pending.findIndex((p) => p.id === item.id);
188
+ if (index >= 0) pending.splice(index, 1);
189
+ resolve(offer?.taken === true);
190
+ }, timeoutMs);
191
+ timer.unref?.();
192
+ offers.set(item.id, {
193
+ taken: false,
194
+ settle: (delivered) => {
195
+ clearTimeout(timer);
196
+ offers.delete(item.id);
197
+ resolve(delivered);
198
+ }
199
+ });
200
+ pending.push(item);
201
+ hand();
202
+ });
203
+ },
204
+ /** Extension side (long poll): the next message, or null after `waitMs`. */
205
+ take(waitMs, signal) {
206
+ return new Promise((resolve) => {
207
+ const done = () => {
208
+ clearTimeout(timer);
209
+ signal?.removeEventListener("abort", onAbort);
210
+ };
211
+ const waiter = (item) => {
212
+ done();
213
+ resolve(item);
214
+ };
215
+ const onAbort = () => {
216
+ waiters.delete(waiter);
217
+ done();
218
+ resolve(null);
219
+ };
220
+ const timer = setTimeout(() => {
221
+ waiters.delete(waiter);
222
+ done();
223
+ resolve(null);
224
+ }, waitMs);
225
+ timer.unref?.();
226
+ if (signal?.aborted) {
227
+ resolve(null);
228
+ clearTimeout(timer);
229
+ return;
230
+ }
231
+ signal?.addEventListener("abort", onAbort, { once: true });
232
+ waiters.add(waiter);
233
+ hand();
234
+ });
235
+ },
236
+ /** Extension side: what happened to a taken message (false: pi was no longer running). */
237
+ ack(id, delivered) {
238
+ offers.get(id)?.settle(delivered);
239
+ }
240
+ };
241
+ }
242
+
130
243
  const SUPPORTED_CATEGORIES = /* @__PURE__ */ new Set(["mode", "model", "thought_level"]);
131
244
  function isRecord$1(value) {
132
245
  return !!value && typeof value === "object";
@@ -636,6 +749,7 @@ class GenericAcpPermissionHandler extends BasePermissionHandler {
636
749
  });
637
750
  }
638
751
  }
752
+ const PI_STEER_OFFER_TIMEOUT_MS = 5e3;
639
753
  function resolveSessionFlavor(agentName) {
640
754
  if (agentName === "gemini") {
641
755
  return "gemini";
@@ -664,12 +778,45 @@ async function runAcp(opts) {
664
778
  machineId: settings.machineId,
665
779
  startedBy: opts.startedBy,
666
780
  sandbox: settings.sandboxConfig,
667
- capabilities: [PROMPT_QUEUE_CAPABILITY]
781
+ capabilities: [PROMPT_QUEUE_CAPABILITY, PROJECT_SESSION_CAPABILITY]
668
782
  });
669
783
  metadata.attachmentKinds = [];
670
- const response = await api.getOrCreateSession({ tag: sessionTag, metadata, state });
784
+ const reconnect = readAcpReconnectEnv(process.env);
785
+ let response;
786
+ if (reconnect) {
787
+ logger.debug(`[acp] Reconnecting to existing session ${reconnect.sessionId}`);
788
+ response = {
789
+ id: reconnect.sessionId,
790
+ seq: reconnect.seq,
791
+ encryptionKey: decodeBase64(reconnect.encryptionKey),
792
+ encryptionVariant: reconnect.encryptionVariant,
793
+ metadata,
794
+ metadataVersion: reconnect.metadataVersion,
795
+ agentState: state,
796
+ agentStateVersion: reconnect.agentStateVersion
797
+ };
798
+ } else {
799
+ response = await createSessionForStartup(() => api.getOrCreateSession({ tag: sessionTag, metadata, state }), { startedBy: opts.startedBy, log: (m) => logger.debug(m) });
800
+ }
671
801
  if (response) {
672
802
  logAcp("muted", `Happy Session ID: ${response.id}`);
803
+ await claimSessionOrExit(response.id, { takeover: !!reconnect, flavor: resolveSessionFlavor(opts.agentName) });
804
+ }
805
+ if (reconnect && response && !await api.reactivateSession(response.id)) {
806
+ throw new Error(`Failed to reactivate archived session ${response.id}`);
807
+ }
808
+ let reconnectSeeded = false;
809
+ let resumedPermissionMode = null;
810
+ if (reconnect && response) {
811
+ const snapshot = await api.getSession(response.id, response.encryptionKey, response.encryptionVariant);
812
+ if (snapshot.ok) {
813
+ response = applyServerSnapshot(response, snapshot.session);
814
+ reconnectSeeded = true;
815
+ resumedPermissionMode = normalizeAcpPermissionMode(snapshot.session.metadata?.permissionMode) ?? null;
816
+ } else {
817
+ response = withoutServerSnapshot(response);
818
+ logger.debug(`[acp] Reconnect without server snapshot (${snapshot.reason}); skipping existing messages`);
819
+ }
673
820
  }
674
821
  let session;
675
822
  let permissionHandler;
@@ -679,6 +826,7 @@ async function runAcp(opts) {
679
826
  metadata,
680
827
  state,
681
828
  response,
829
+ sessionClientOptions: reconnectSeeded && response ? { initialSeq: response.seq } : void 0,
682
830
  onSessionSwap: (newSession) => {
683
831
  session = newSession;
684
832
  if (permissionHandler) {
@@ -688,6 +836,12 @@ async function runAcp(opts) {
688
836
  }
689
837
  });
690
838
  session = initialSession;
839
+ if (reconnect) {
840
+ session.suppressNextArchiveSignal();
841
+ if (!reconnectSeeded) session.skipExistingMessages();
842
+ void session.cancelUndeliveredQueuedInputs();
843
+ session.updateMetadata((meta) => mergeReconnectMetadata(meta, metadata, Date.now()));
844
+ }
691
845
  if (response) {
692
846
  try {
693
847
  await notifyDaemonSessionStarted(response.id, metadata, {
@@ -727,7 +881,7 @@ async function runAcp(opts) {
727
881
  let sawSlashCommands = false;
728
882
  let sawModes = false;
729
883
  let sawModels = false;
730
- const initialPermissionMode = opts.permissionMode ?? "default";
884
+ const initialPermissionMode = opts.permissionMode ?? resumedPermissionMode ?? "default";
731
885
  let fileBackedModeActive = false;
732
886
  const permissionModeIsFileBacked = () => opts.agentName === "pi" || !modeSelector && !legacyModes;
733
887
  let fileBackedPermissionMode = null;
@@ -747,8 +901,15 @@ async function runAcp(opts) {
747
901
  return true;
748
902
  };
749
903
  const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
904
+ const piSteer = opts.agentName === "pi" ? createPiSteerChannel() : null;
905
+ piSteer?.onReady(() => {
906
+ logger.debug(`[${opts.agentName}] pi extension connected to the steer channel`);
907
+ session.updateMetadata((current) => ({ ...current, capabilities: [.../* @__PURE__ */ new Set([...current.capabilities ?? [], PI_STEER_CAPABILITY])] }));
908
+ });
750
909
  const happyServer = await startHappyServer(session, {
751
910
  assistant: isAssistantVariant,
911
+ ...piSteer ? { piSteer } : {},
912
+ push: { sendAttention: (input) => api.push().sendAttention(input) },
752
913
  ...opts.agentName === "pi" ? { onContextUsage: (contextUsage) => {
753
914
  session.updateAgentState((state2) => ({ ...state2, contextUsage }));
754
915
  } } : {}
@@ -770,6 +931,7 @@ async function runAcp(opts) {
770
931
  ...teamsPiEnv,
771
932
  HAPPY_MCP_URL: happyServer.url,
772
933
  ...happyServer.contextUsageUrl ? { HAPPY_CONTEXT_USAGE_URL: happyServer.contextUsageUrl } : {},
934
+ ...happyServer.steerUrl ? { HAPPY_PI_STEER_URL: happyServer.steerUrl } : {},
773
935
  HAPPY_SESSION_ID: session.sessionId,
774
936
  // B-497: sender identity for `very-happy sessions message|peers` in this shell.
775
937
  VH_PEER_SESSION_ID: session.sessionId,
@@ -782,6 +944,15 @@ async function runAcp(opts) {
782
944
  });
783
945
  let backend = createBackend();
784
946
  let thinking = false;
947
+ let outOfTurnTimer = null;
948
+ const endOutOfTurn = (reason) => {
949
+ if (!outOfTurnTimer) return;
950
+ clearTimeout(outOfTurnTimer);
951
+ outOfTurnTimer = null;
952
+ logger.debug(`[${opts.agentName}] Out-of-turn output ended (${reason})`);
953
+ sendEnvelopes(sessionManager.endTurn("completed"));
954
+ setThinking(false);
955
+ };
785
956
  const setThinking = (next) => {
786
957
  if (thinking === next) {
787
958
  return;
@@ -796,6 +967,7 @@ async function runAcp(opts) {
796
967
  let backendStarted = false;
797
968
  let backendGone = null;
798
969
  let todoDiscoverySent = false;
970
+ const projectInjector = createProjectInjector({ client: sharedProjectsClient(), sessionId: () => session?.sessionId, metadata: () => session?.getMetadata?.() ?? null, agent: opts.agentName });
799
971
  const stopRunnerFromBackendStatus = (status, detail) => {
800
972
  const reason = detail ? `${opts.agentName} backend ${status}: ${detail}` : `${opts.agentName} backend ${status}`;
801
973
  logger.debug(`[${opts.agentName}] ${reason}; stopping ACP runner`);
@@ -1093,7 +1265,18 @@ async function runAcp(opts) {
1093
1265
  reportSessionEditToDaemon({ sessionId: session.sessionId, path: edit.path, tool: edit.tool, cwd: process.cwd() });
1094
1266
  }
1095
1267
  }
1268
+ const action = outOfTurnAction(msg, { open: outOfTurnTimer !== null, inPromptTurn: thinking && outOfTurnTimer === null, backendStarted });
1269
+ if (action === "start") {
1270
+ sendEnvelopes(sessionManager.startTurn());
1271
+ setThinking(true);
1272
+ }
1273
+ if (action === "start" || action === "touch") {
1274
+ if (outOfTurnTimer) clearTimeout(outOfTurnTimer);
1275
+ outOfTurnTimer = setTimeout(() => endOutOfTurn("quiet"), OUT_OF_TURN_QUIET_MS);
1276
+ outOfTurnTimer.unref?.();
1277
+ }
1096
1278
  sendEnvelopes(sessionManager.mapMessage(msg));
1279
+ if (action === "end") endOutOfTurn("idle");
1097
1280
  };
1098
1281
  backend.onMessage(onBackendMessage);
1099
1282
  const titleGenerator = new TitleGenerator(session);
@@ -1118,6 +1301,13 @@ async function runAcp(opts) {
1118
1301
  if (message.meta && Object.prototype.hasOwnProperty.call(message.meta, "effort")) {
1119
1302
  currentEffort = message.meta.effort ?? null;
1120
1303
  }
1304
+ if (message.meta?.delivery === "steer" && piSteer?.ready && thinking && !attachments?.length) {
1305
+ if (await piSteer.offer(message.content.text, PI_STEER_OFFER_TIMEOUT_MS)) {
1306
+ logger.debug(`[${opts.agentName}] User message steered into the running turn`);
1307
+ return;
1308
+ }
1309
+ logger.debug(`[${opts.agentName}] Steer not taken; queued for the next turn`);
1310
+ }
1121
1311
  messageQueue.push(message.content.text, {
1122
1312
  permissionMode: currentPermissionMode,
1123
1313
  model: currentModel,
@@ -1184,6 +1374,12 @@ async function runAcp(opts) {
1184
1374
  publishFileBackedPermissionMode(fileBackedPermissionMode ?? initialPermissionMode);
1185
1375
  }
1186
1376
  };
1377
+ let agentSessionId = opts.resumeAgentSessionId ?? null;
1378
+ const rememberAgentSession = (id) => {
1379
+ if (!id || opts.agentName !== "pi") return;
1380
+ agentSessionId = id;
1381
+ session.updateMetadata((current) => current.piSessionId === id ? current : { ...current, piSessionId: id });
1382
+ };
1187
1383
  const restartBackend = async () => {
1188
1384
  const gone = backendGone;
1189
1385
  backend.offMessage?.(onBackendMessage);
@@ -1195,19 +1391,27 @@ async function runAcp(opts) {
1195
1391
  }
1196
1392
  backend = createBackend();
1197
1393
  backend.onMessage(onBackendMessage);
1198
- const started = await backend.startSession();
1394
+ const started = await backend.startSession(void 0, agentSessionId ? { loadSessionId: agentSessionId } : {});
1199
1395
  acpSessionId = started.sessionId;
1396
+ rememberAgentSession(started.agentSessionId);
1200
1397
  backendGone = null;
1201
1398
  todoDiscoverySent = false;
1399
+ projectInjector.reset();
1202
1400
  await afterSessionStarted(currentModel ?? opts.model);
1203
- logger.debug(`[${opts.agentName}] Restarted the agent after it exited: ${gone?.message ?? "unknown"}`);
1204
- session.sendSessionEvent({ type: "message", message: `${opts.agentName} was restarted after its process exited; it does not remember the earlier conversation (the transcript here is kept).` });
1401
+ logger.debug(`[${opts.agentName}] Restarted the agent after it exited: ${gone?.message ?? "unknown"} (conversation: ${started.resumed ?? "new"}${started.loadFailure ? `, ${started.loadFailure}` : ""})`);
1402
+ session.sendSessionEvent({ type: "message", message: piRestartNotice(opts.agentName, "agent-exit", started) });
1205
1403
  };
1206
1404
  try {
1207
- const started = await backend.startSession();
1405
+ const resumeId = opts.resumeAgentSessionId;
1406
+ const started = await backend.startSession(void 0, resumeId ? { loadSessionId: resumeId } : {});
1208
1407
  acpSessionId = started.sessionId;
1408
+ rememberAgentSession(started.agentSessionId);
1209
1409
  backendStarted = true;
1210
1410
  await afterSessionStarted(opts.model);
1411
+ if (resumeId) {
1412
+ logger.debug(`[${opts.agentName}] Resume of agent session ${resumeId}: ${started.resumed ?? "new"}${started.loadFailure ? ` (${started.loadFailure})` : ""}`);
1413
+ if (started.resumed !== "loaded") session.sendSessionEvent({ type: "message", message: piRestartNotice(opts.agentName, "resume", started) });
1414
+ }
1211
1415
  if (verbose) {
1212
1416
  if (!sawSlashCommands) {
1213
1417
  logAcp("muted", `Outgoing slash commands from ${opts.agentName}: not reported yet`);
@@ -1232,6 +1436,7 @@ async function runAcp(opts) {
1232
1436
  break;
1233
1437
  }
1234
1438
  logAcp("incoming", `Incoming prompt: ${formatUnknownForConsole(batch.message, ACP_EVENT_PREVIEW_CHARS)}`);
1439
+ endOutOfTurn("prompt");
1235
1440
  sendEnvelopes(sessionManager.startTurn());
1236
1441
  turnCancelled = false;
1237
1442
  setThinking(true);
@@ -1249,7 +1454,8 @@ async function runAcp(opts) {
1249
1454
  if (typeof batch.mode.effort === "string") {
1250
1455
  await switchEffortIfRequested(batch.mode.effort, modelChanged);
1251
1456
  }
1252
- const prompt = todoDiscoverySent ? batch.message : `${batch.message}
1457
+ const projected = await projectInjector.decorate(batch.message);
1458
+ const prompt = todoDiscoverySent ? projected : `${projected}
1253
1459
 
1254
1460
  ${BUILTIN_TODO_DISCOVERY}`;
1255
1461
  const attachments = batch.attachments ?? [];
@@ -1,14 +1,14 @@
1
1
  import { statSync, readdirSync } from 'node:fs';
2
2
  import { homedir } from 'node:os';
3
- import { l as logger } from './logger--vAVtXB_.mjs';
4
- import { r as readSettings } from './persistence-DTk4sNpd.mjs';
3
+ import { l as logger } from './logger-BUngm5Xg.mjs';
4
+ import { r as readSettings } from './persistence-BFUOHW5h.mjs';
5
5
  import { d as describeAgentHome, C as CLAUDE_CONFIG_DIR_ENV, a as CODEX_HOME_ENV, f as findClaudeConversation, b as agentHomeCandidates, c as findCodexThread, r as resolveAgentHomes, A as AGENT_HOME_ENV_NAMES, g as agentHomeEnv, p as probeLoginShellEnv } from './loginShellEnv-Dw8M7tkI.mjs';
6
6
  export { h as claudeConversationPath, i as claudeProjectDirName, j as codexRolloutFileMatches, e as expandHomePath } from './loginShellEnv-Dw8M7tkI.mjs';
7
7
  import 'chalk';
8
8
  import 'node:util';
9
- import './configuration-DVrb61aY.mjs';
9
+ import './configuration-PxzEJumr.mjs';
10
10
  import 'node:path';
11
- import './package-B7B03ejW.mjs';
11
+ import './package-7Ld1YMhh.mjs';
12
12
  import 'node:fs/promises';
13
13
  import 'zod';
14
14
  import './authRelay-DhQhkBvX.mjs';
@@ -2,14 +2,14 @@
2
2
 
3
3
  var node_fs = require('node:fs');
4
4
  var os = require('node:os');
5
- var logger = require('./logger-DXTWlPzP.cjs');
6
- var persistence = require('./persistence-BfX72dne.cjs');
5
+ var logger = require('./logger-CphW5nUE.cjs');
6
+ var persistence = require('./persistence-9BMYspxG.cjs');
7
7
  var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
8
8
  require('chalk');
9
9
  require('node:util');
10
- require('./configuration-4TGMrjul.cjs');
10
+ require('./configuration-CYO-kPOS.cjs');
11
11
  require('node:path');
12
- require('./package-DY4zTbKS.cjs');
12
+ require('./package-KhLqBDX9.cjs');
13
13
  require('node:fs/promises');
14
14
  require('zod');
15
15
  require('./authRelay-Dy1qU9td.cjs');