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
@@ -1,36 +1,38 @@
1
1
  'use strict';
2
2
 
3
- var AcpBackend = require('./AcpBackend-B-ny68XM.cjs');
4
- var logger = require('./logger-LvwVeATU.cjs');
5
- var AcpSessionManager = require('./AcpSessionManager-CjdJLofq.cjs');
6
- var index = require('./index-De8L5lFK.cjs');
3
+ var AcpBackend = require('./AcpBackend-DFipFF7-.cjs');
4
+ var logger = require('./logger-C1GWx3gi.cjs');
5
+ var AcpSessionManager = require('./AcpSessionManager-0zpvRJXc.cjs');
6
+ var index = require('./index-C6O2vVjm.cjs');
7
7
  var agentAttachments = require('./agentAttachments-Dbw8iMCZ.cjs');
8
- var configuration = require('./configuration-DZPy0T9Z.cjs');
9
- var attachmentContent = require('./attachmentContent-kJKXpkMX.cjs');
10
- var piRuntime = require('./piRuntime-D7eio8Ix.cjs');
8
+ var configuration = require('./configuration-CMHZnp6G.cjs');
9
+ var attachmentContent = require('./attachmentContent-Bo0UAsSu.cjs');
10
+ var piRuntime = require('./piRuntime-BG-1td_n.cjs');
11
11
  var node_crypto = require('node:crypto');
12
12
  var path = require('node:path');
13
- var api = require('./api-BWX10o97.cjs');
14
- var registerKillSessionHandler = require('./registerKillSessionHandler-pqChBKwO.cjs');
15
- var deterministicJson = require('./deterministicJson-ChGfQEF6.cjs');
16
- var persistence = require('./persistence-DXbKOHxl.cjs');
17
- var machineMetadata = require('./machineMetadata-29h7vgf4.cjs');
18
- var createSessionMetadata = require('./createSessionMetadata-BCFmYlBo.cjs');
19
- var setupOfflineReconnection = require('./setupOfflineReconnection-DVA0VpQL.cjs');
20
- var controlClient = require('./controlClient-SX8gSza2.cjs');
21
- var authRelay = require('./authRelay-BdYkC1Po.cjs');
22
- var streamRelay = require('./streamRelay-Cx01enfe.cjs');
13
+ var api = require('./api-Cmjfr8Z7.cjs');
14
+ var deterministicJson = require('./deterministicJson-B8z2GPi9.cjs');
15
+ var client = require('./client-ZjOsn6nZ.cjs');
16
+ var registerKillSessionHandler = require('./registerKillSessionHandler-qMju0ZfF.cjs');
17
+ var persistence = require('./persistence-BegE7NPa.cjs');
18
+ var machineMetadata = require('./machineMetadata-CLHS9sv_.cjs');
19
+ var createSessionMetadata = require('./createSessionMetadata-BkIzHALd.cjs');
20
+ var setupOfflineReconnection = require('./setupOfflineReconnection-CNiAt5ZP.cjs');
21
+ var controlClient = require('./controlClient-C-5qCt8W.cjs');
22
+ var authRelay = require('./authRelay-Dy1qU9td.cjs');
23
+ var sessionLock = require('./sessionLock-DokGab2R.cjs');
24
+ var acpSessionResume = require('./acpSessionResume-oiCBnAVA.cjs');
25
+ var streamRelay = require('./streamRelay-DlUWKUpo.cjs');
23
26
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
24
- var BasePermissionHandler = require('./BasePermissionHandler-DR6nxuEn.cjs');
25
- var titleGenerator = require('./titleGenerator-BMEaDTwU.cjs');
26
- var sessionModeFile = require('./sessionModeFile-CsLtn_PL.cjs');
27
+ var BasePermissionHandler = require('./BasePermissionHandler-CH3zuEkA.cjs');
28
+ var titleGenerator = require('./titleGenerator-CS_rh2_J.cjs');
27
29
  var editPaths = require('./editPaths-Bqp4OFPw.cjs');
28
30
  require('node:child_process');
29
31
  require('@agentclientprotocol/sdk');
30
- require('./time-Dg5tVB8S.cjs');
32
+ require('./time-CrwIMHta.cjs');
31
33
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
32
34
  require('./processTree-CMHWlVse.cjs');
33
- require('./package-Ch9WGDV_.cjs');
35
+ require('./package-SgqTYsjn.cjs');
34
36
  require('chalk');
35
37
  require('node:util');
36
38
  require('node:fs');
@@ -38,49 +40,52 @@ require('@paralleldrive/cuid2');
38
40
  require('zod');
39
41
  require('node:os');
40
42
  require('node:fs/promises');
41
- require('./attachmentLimits-DtFqqiwR.cjs');
42
- require('./resources-JDPugcDq.cjs');
43
+ require('./pushNotifications-DaLQUyi0.cjs');
43
44
  require('axios');
44
- require('./lidState-DxbK0qfu.cjs');
45
+ require('./resources-CvIlkzpP.cjs');
46
+ require('./lidState-Dv2wwFTj.cjs');
45
47
  require('os');
46
48
  require('child_process');
47
49
  require('node:events');
48
50
  require('socket.io-client');
49
51
  require('./limits-C-a7gr04.cjs');
50
- require('./registerCommonHandlers-60VuTkdg.cjs');
52
+ require('./registerCommonHandlers-Cj084Sg7.cjs');
51
53
  require('util');
52
54
  require('fs/promises');
53
55
  require('crypto');
54
56
  require('path');
55
57
  require('cross-spawn');
56
- require('./sync-C7sxoUYG.cjs');
58
+ require('./sync-D23jbqVa.cjs');
57
59
  require('./backgroundTaskActivity-CBvUdj39.cjs');
58
- require('tweetnacl');
59
- require('./types-CRS-srZK.cjs');
60
- require('./client-DyvBTYee.cjs');
61
- require('./context-BKbrZ55r.cjs');
62
- require('./sessionOps-Dmt7WUUs.cjs');
63
- require('./tools-DDKTB5aQ.cjs');
64
- require('./reportProgressTool-Du_zAK4h.cjs');
65
- require('./client-COmgDDy0.cjs');
60
+ require('./prompt-lgF9IE82.cjs');
61
+ require('./reportProgressTool-CM1JFAHg.cjs');
62
+ require('./client-CuVdN6PP.cjs');
66
63
  require('./precheckCompat-CWOi5c9L.cjs');
67
64
  require('./agentGuidance-BtBx2xxE.cjs');
68
65
  require('./trimIdent-4gvk9Wk6.cjs');
69
- require('./peerTools-DtGKWli5.cjs');
66
+ require('./client-BKcK1Bi-.cjs');
67
+ require('./context-DXzU5bFM.cjs');
68
+ require('./sessionOps-S-qPBLFf.cjs');
69
+ require('./tools-_w52DZG6.cjs');
70
+ require('./peerTools-DRQETXaz.cjs');
70
71
  require('./ids-B6ZC0HGt.cjs');
71
- require('./remoteSessionClient-B7NvjHD3.cjs');
72
+ require('./remoteSessionClient-B7i7MkYV.cjs');
72
73
  require('@modelcontextprotocol/sdk/server/mcp.js');
73
74
  require('node:http');
74
75
  require('@modelcontextprotocol/sdk/server/streamableHttp.js');
75
- require('./downloadTarget-Dj3WoVJa.cjs');
76
+ require('./downloadTarget-BQJK_6oH.cjs');
76
77
  require('./terminals-B_bfC9c2.cjs');
77
78
  require('./terminalTitleSuggest-DhvRFX3H.cjs');
78
79
  require('./tmuxSocket-D-Xt6Vn-.cjs');
79
- require('./bootstrap-6OI698q9.cjs');
80
+ require('./bootstrap-exVucYav.cjs');
81
+ require('./webPanels-FCgFKvVe.cjs');
80
82
  require('./previewPath-B0rBdhy1.cjs');
83
+ require('tweetnacl');
84
+ require('./types-CRS-srZK.cjs');
81
85
  require('./detectCLI-DR9ZaN6B.cjs');
82
86
  require('fs');
83
- require('./localHappyAgentAuth-D5tANdRD.cjs');
87
+ require('./localHappyAgentAuth-DjYvkXvV.cjs');
88
+ require('./processTreeSnapshot-mDbnuojn.cjs');
84
89
  require('url');
85
90
  require('node:module');
86
91
  require('./oneShotPrompts-CL0dip9C.cjs');
@@ -128,6 +133,113 @@ function describeAcpTurnFailure(agentName, error) {
128
133
  return { message: `${agentName} error: ${oneLine(detailOf(error))}`, exited: false };
129
134
  }
130
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
+
131
243
  const SUPPORTED_CATEGORIES = /* @__PURE__ */ new Set(["mode", "model", "thought_level"]);
132
244
  function isRecord$1(value) {
133
245
  return !!value && typeof value === "object";
@@ -637,6 +749,7 @@ class GenericAcpPermissionHandler extends BasePermissionHandler.BasePermissionHa
637
749
  });
638
750
  }
639
751
  }
752
+ const PI_STEER_OFFER_TIMEOUT_MS = 5e3;
640
753
  function resolveSessionFlavor(agentName) {
641
754
  if (agentName === "gemini") {
642
755
  return "gemini";
@@ -665,12 +778,45 @@ async function runAcp(opts) {
665
778
  machineId: settings.machineId,
666
779
  startedBy: opts.startedBy,
667
780
  sandbox: settings.sandboxConfig,
668
- capabilities: [index.PROMPT_QUEUE_CAPABILITY]
781
+ capabilities: [index.PROMPT_QUEUE_CAPABILITY, index.PROJECT_SESSION_CAPABILITY]
669
782
  });
670
783
  metadata.attachmentKinds = [];
671
- const response = await api$1.getOrCreateSession({ tag: sessionTag, metadata, state });
784
+ const reconnect = acpSessionResume.readAcpReconnectEnv(process.env);
785
+ let response;
786
+ if (reconnect) {
787
+ logger.logger.debug(`[acp] Reconnecting to existing session ${reconnect.sessionId}`);
788
+ response = {
789
+ id: reconnect.sessionId,
790
+ seq: reconnect.seq,
791
+ encryptionKey: authRelay.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 api$1.getOrCreateSession({ tag: sessionTag, metadata, state });
800
+ }
672
801
  if (response) {
673
802
  logAcp("muted", `Happy Session ID: ${response.id}`);
803
+ await sessionLock.claimSessionOrExit(response.id, { takeover: !!reconnect, flavor: resolveSessionFlavor(opts.agentName) });
804
+ }
805
+ if (reconnect && response && !await api$1.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$1.getSession(response.id, response.encryptionKey, response.encryptionVariant);
812
+ if (snapshot.ok) {
813
+ response = sessionLock.applyServerSnapshot(response, snapshot.session);
814
+ reconnectSeeded = true;
815
+ resumedPermissionMode = acpSessionResume.normalizeAcpPermissionMode(snapshot.session.metadata?.permissionMode) ?? null;
816
+ } else {
817
+ response = sessionLock.withoutServerSnapshot(response);
818
+ logger.logger.debug(`[acp] Reconnect without server snapshot (${snapshot.reason}); skipping existing messages`);
819
+ }
674
820
  }
675
821
  let session;
676
822
  let permissionHandler;
@@ -680,6 +826,7 @@ async function runAcp(opts) {
680
826
  metadata,
681
827
  state,
682
828
  response,
829
+ sessionClientOptions: reconnectSeeded && response ? { initialSeq: response.seq } : void 0,
683
830
  onSessionSwap: (newSession) => {
684
831
  session = newSession;
685
832
  if (permissionHandler) {
@@ -689,6 +836,12 @@ async function runAcp(opts) {
689
836
  }
690
837
  });
691
838
  session = initialSession;
839
+ if (reconnect) {
840
+ session.suppressNextArchiveSignal();
841
+ if (!reconnectSeeded) session.skipExistingMessages();
842
+ void session.cancelUndeliveredQueuedInputs();
843
+ session.updateMetadata((meta) => sessionLock.mergeReconnectMetadata(meta, metadata, Date.now()));
844
+ }
692
845
  if (response) {
693
846
  try {
694
847
  await controlClient.notifyDaemonSessionStarted(response.id, metadata, {
@@ -728,7 +881,7 @@ async function runAcp(opts) {
728
881
  let sawSlashCommands = false;
729
882
  let sawModes = false;
730
883
  let sawModels = false;
731
- const initialPermissionMode = opts.permissionMode ?? "default";
884
+ const initialPermissionMode = opts.permissionMode ?? resumedPermissionMode ?? "default";
732
885
  let fileBackedModeActive = false;
733
886
  const permissionModeIsFileBacked = () => opts.agentName === "pi" || !modeSelector && !legacyModes;
734
887
  let fileBackedPermissionMode = null;
@@ -737,7 +890,7 @@ async function runAcp(opts) {
737
890
  return true;
738
891
  }
739
892
  try {
740
- sessionModeFile.writeSessionModeFile(session.sessionId, mode);
893
+ acpSessionResume.writeSessionModeFile(session.sessionId, mode);
741
894
  } catch (error) {
742
895
  logger.logger.debug(`[${opts.agentName}] Failed to write session mode file:`, error);
743
896
  return false;
@@ -748,8 +901,15 @@ async function runAcp(opts) {
748
901
  return true;
749
902
  };
750
903
  const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
904
+ const piSteer = opts.agentName === "pi" ? createPiSteerChannel() : null;
905
+ piSteer?.onReady(() => {
906
+ logger.logger.debug(`[${opts.agentName}] pi extension connected to the steer channel`);
907
+ session.updateMetadata((current) => ({ ...current, capabilities: [.../* @__PURE__ */ new Set([...current.capabilities ?? [], index.PI_STEER_CAPABILITY])] }));
908
+ });
751
909
  const happyServer = await deterministicJson.startHappyServer(session, {
752
910
  assistant: isAssistantVariant,
911
+ ...piSteer ? { piSteer } : {},
912
+ push: { sendAttention: (input) => api$1.push().sendAttention(input) },
753
913
  ...opts.agentName === "pi" ? { onContextUsage: (contextUsage) => {
754
914
  session.updateAgentState((state2) => ({ ...state2, contextUsage }));
755
915
  } } : {}
@@ -771,6 +931,7 @@ async function runAcp(opts) {
771
931
  ...teamsPiEnv,
772
932
  HAPPY_MCP_URL: happyServer.url,
773
933
  ...happyServer.contextUsageUrl ? { HAPPY_CONTEXT_USAGE_URL: happyServer.contextUsageUrl } : {},
934
+ ...happyServer.steerUrl ? { HAPPY_PI_STEER_URL: happyServer.steerUrl } : {},
774
935
  HAPPY_SESSION_ID: session.sessionId,
775
936
  // B-497: sender identity for `very-happy sessions message|peers` in this shell.
776
937
  VH_PEER_SESSION_ID: session.sessionId,
@@ -783,6 +944,15 @@ async function runAcp(opts) {
783
944
  });
784
945
  let backend = createBackend();
785
946
  let thinking = false;
947
+ let outOfTurnTimer = null;
948
+ const endOutOfTurn = (reason) => {
949
+ if (!outOfTurnTimer) return;
950
+ clearTimeout(outOfTurnTimer);
951
+ outOfTurnTimer = null;
952
+ logger.logger.debug(`[${opts.agentName}] Out-of-turn output ended (${reason})`);
953
+ sendEnvelopes(sessionManager.endTurn("completed"));
954
+ setThinking(false);
955
+ };
786
956
  const setThinking = (next) => {
787
957
  if (thinking === next) {
788
958
  return;
@@ -797,6 +967,7 @@ async function runAcp(opts) {
797
967
  let backendStarted = false;
798
968
  let backendGone = null;
799
969
  let todoDiscoverySent = false;
970
+ const projectInjector = deterministicJson.createProjectInjector({ client: client.sharedProjectsClient(), sessionId: () => session?.sessionId, metadata: () => session?.getMetadata?.() ?? null, agent: opts.agentName });
800
971
  const stopRunnerFromBackendStatus = (status, detail) => {
801
972
  const reason = detail ? `${opts.agentName} backend ${status}: ${detail}` : `${opts.agentName} backend ${status}`;
802
973
  logger.logger.debug(`[${opts.agentName}] ${reason}; stopping ACP runner`);
@@ -820,7 +991,7 @@ async function runAcp(opts) {
820
991
  return;
821
992
  }
822
993
  if (permissionModeIsFileBacked()) {
823
- const mode = sessionModeFile.normalizeAcpPermissionMode(requestedMode);
994
+ const mode = acpSessionResume.normalizeAcpPermissionMode(requestedMode);
824
995
  if (!mode) {
825
996
  logger.logger.debug(`[${opts.agentName}] Ignoring unknown file-backed permission mode request: ${requestedMode}`);
826
997
  return;
@@ -1094,7 +1265,18 @@ async function runAcp(opts) {
1094
1265
  controlClient.reportSessionEditToDaemon({ sessionId: session.sessionId, path: edit.path, tool: edit.tool, cwd: process.cwd() });
1095
1266
  }
1096
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
+ }
1097
1278
  sendEnvelopes(sessionManager.mapMessage(msg));
1279
+ if (action === "end") endOutOfTurn("idle");
1098
1280
  };
1099
1281
  backend.onMessage(onBackendMessage);
1100
1282
  const titleGenerator$1 = new titleGenerator.TitleGenerator(session);
@@ -1119,6 +1301,13 @@ async function runAcp(opts) {
1119
1301
  if (message.meta && Object.prototype.hasOwnProperty.call(message.meta, "effort")) {
1120
1302
  currentEffort = message.meta.effort ?? null;
1121
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.logger.debug(`[${opts.agentName}] User message steered into the running turn`);
1307
+ return;
1308
+ }
1309
+ logger.logger.debug(`[${opts.agentName}] Steer not taken; queued for the next turn`);
1310
+ }
1122
1311
  messageQueue.push(message.content.text, {
1123
1312
  permissionMode: currentPermissionMode,
1124
1313
  model: currentModel,
@@ -1155,7 +1344,7 @@ async function runAcp(opts) {
1155
1344
  if (!fileBackedModeActive) {
1156
1345
  throw new Error(`${opts.agentName} does not support live permission mode changes`);
1157
1346
  }
1158
- const mode = typeof request?.mode === "string" ? sessionModeFile.normalizeAcpPermissionMode(request.mode) : null;
1347
+ const mode = typeof request?.mode === "string" ? acpSessionResume.normalizeAcpPermissionMode(request.mode) : null;
1159
1348
  if (!mode) {
1160
1349
  throw new Error("Invalid permission mode");
1161
1350
  }
@@ -1185,6 +1374,12 @@ async function runAcp(opts) {
1185
1374
  publishFileBackedPermissionMode(fileBackedPermissionMode ?? initialPermissionMode);
1186
1375
  }
1187
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
+ };
1188
1383
  const restartBackend = async () => {
1189
1384
  const gone = backendGone;
1190
1385
  backend.offMessage?.(onBackendMessage);
@@ -1196,19 +1391,27 @@ async function runAcp(opts) {
1196
1391
  }
1197
1392
  backend = createBackend();
1198
1393
  backend.onMessage(onBackendMessage);
1199
- const started = await backend.startSession();
1394
+ const started = await backend.startSession(void 0, agentSessionId ? { loadSessionId: agentSessionId } : {});
1200
1395
  acpSessionId = started.sessionId;
1396
+ rememberAgentSession(started.agentSessionId);
1201
1397
  backendGone = null;
1202
1398
  todoDiscoverySent = false;
1399
+ projectInjector.reset();
1203
1400
  await afterSessionStarted(currentModel ?? opts.model);
1204
- logger.logger.debug(`[${opts.agentName}] Restarted the agent after it exited: ${gone?.message ?? "unknown"}`);
1205
- 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.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: acpSessionResume.piRestartNotice(opts.agentName, "agent-exit", started) });
1206
1403
  };
1207
1404
  try {
1208
- const started = await backend.startSession();
1405
+ const resumeId = opts.resumeAgentSessionId;
1406
+ const started = await backend.startSession(void 0, resumeId ? { loadSessionId: resumeId } : {});
1209
1407
  acpSessionId = started.sessionId;
1408
+ rememberAgentSession(started.agentSessionId);
1210
1409
  backendStarted = true;
1211
1410
  await afterSessionStarted(opts.model);
1411
+ if (resumeId) {
1412
+ logger.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: acpSessionResume.piRestartNotice(opts.agentName, "resume", started) });
1414
+ }
1212
1415
  if (verbose) {
1213
1416
  if (!sawSlashCommands) {
1214
1417
  logAcp("muted", `Outgoing slash commands from ${opts.agentName}: not reported yet`);
@@ -1233,6 +1436,7 @@ async function runAcp(opts) {
1233
1436
  break;
1234
1437
  }
1235
1438
  logAcp("incoming", `Incoming prompt: ${formatUnknownForConsole(batch.message, ACP_EVENT_PREVIEW_CHARS)}`);
1439
+ endOutOfTurn("prompt");
1236
1440
  sendEnvelopes(sessionManager.startTurn());
1237
1441
  turnCancelled = false;
1238
1442
  setThinking(true);
@@ -1250,7 +1454,8 @@ async function runAcp(opts) {
1250
1454
  if (typeof batch.mode.effort === "string") {
1251
1455
  await switchEffortIfRequested(batch.mode.effort, modelChanged);
1252
1456
  }
1253
- const prompt = todoDiscoverySent ? batch.message : `${batch.message}
1457
+ const projected = await projectInjector.decorate(batch.message);
1458
+ const prompt = todoDiscoverySent ? projected : `${projected}
1254
1459
 
1255
1460
  ${index.BUILTIN_TODO_DISCOVERY}`;
1256
1461
  const attachments = batch.attachments ?? [];
@@ -1310,7 +1515,7 @@ ${index.BUILTIN_TODO_DISCOVERY}`;
1310
1515
  await backend.dispose();
1311
1516
  if (fileBackedPermissionMode) {
1312
1517
  try {
1313
- sessionModeFile.removeSessionModeFile(session.sessionId);
1518
+ acpSessionResume.removeSessionModeFile(session.sessionId);
1314
1519
  } catch (error) {
1315
1520
  logger.logger.debug(`[${opts.agentName}] Failed to remove session mode file:`, error);
1316
1521
  }