very-happy-cli 0.2.176 → 0.2.177

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 (176) hide show
  1. package/dist/{AcpBackend-9_ZI1Bv3.cjs → AcpBackend-B-ny68XM.cjs} +188 -37
  2. package/dist/{AcpBackend-COp6D8gl.mjs → AcpBackend-B0K0WrtW.mjs} +187 -38
  3. package/dist/{BasePermissionHandler-DPvLN7aR.cjs → BasePermissionHandler-DR6nxuEn.cjs} +1 -1
  4. package/dist/{BasePermissionHandler-ChMkmsGD.mjs → BasePermissionHandler-hdY7kTqX.mjs} +1 -1
  5. package/dist/{agentHome-BKi7tsE9.cjs → agentHome-BdTXEUPe.cjs} +4 -4
  6. package/dist/{agentHome-D61ZMLXM.mjs → agentHome-GRN2VfHv.mjs} +4 -4
  7. package/dist/{api-Buc_ejoA.cjs → api-BWX10o97.cjs} +15 -8
  8. package/dist/{api-CbwDDXJt.mjs → api-CKBViqI3.mjs} +16 -9
  9. package/dist/{apiMachine--PXoXwKq.cjs → apiMachine-BYYFGgFs.cjs} +14 -13
  10. package/dist/{apiMachine-CS7t3Rg-.mjs → apiMachine-DttO4UFj.mjs} +15 -14
  11. package/dist/{attachmentContent-BQYc8KpE.mjs → attachmentContent-cPVF463_.mjs} +1 -1
  12. package/dist/{attachmentContent-CFzzTeV9.cjs → attachmentContent-kJKXpkMX.cjs} +1 -1
  13. package/dist/{auth-B3xMoveE.mjs → auth-BmESeKuM.mjs} +5 -5
  14. package/dist/{auth-CBkmRIGw.mjs → auth-CKdXb9zp.mjs} +8 -8
  15. package/dist/{auth-CpO3ZUMz.cjs → auth-CTECt2Oz.cjs} +5 -5
  16. package/dist/{auth-LPvsVriN.cjs → auth-DNxVmVbn.cjs} +8 -8
  17. package/dist/{auto-DHGch_zK.mjs → auto-Ch3203qd.mjs} +16 -15
  18. package/dist/{auto-Dm3EIKT7.cjs → auto-D1ypjjfx.cjs} +14 -13
  19. package/dist/{backgroundTaskActivity-8PdPxrvy.mjs → backgroundTaskActivity-BVwJBl02.mjs} +1 -1
  20. package/dist/{bootstrap-BboDz_w2.cjs → bootstrap-6OI698q9.cjs} +2 -2
  21. package/dist/{bootstrap-CxuBAkJU.mjs → bootstrap-C0s2bPFQ.mjs} +2 -2
  22. package/dist/{browser-BvARP-YR.mjs → browser-BlLWZUMx.mjs} +1 -1
  23. package/dist/{browser-GQZJxD2n.cjs → browser-DG6Uof5O.cjs} +1 -1
  24. package/dist/{claudeLocal-B9EhFmD7.mjs → claudeLocal-CcWcKnoo.mjs} +5 -5
  25. package/dist/{claudeLocal-D-mujSX1.cjs → claudeLocal-CemsIArT.cjs} +4 -4
  26. package/dist/{claudeLocalLauncher-Bdl-9aU_.mjs → claudeLocalLauncher-7p6y88nj.mjs} +15 -18
  27. package/dist/{claudeLocalLauncher-Tbrx6TXF.cjs → claudeLocalLauncher-A4VuevIi.cjs} +14 -17
  28. package/dist/{claudeSessionFork-D_DKvDKE.mjs → claudeSessionFork-BtROOjqf.mjs} +1 -1
  29. package/dist/{claudeSessionFork-sOz97qqW.cjs → claudeSessionFork-CbDfm8Fz.cjs} +1 -1
  30. package/dist/{client-Cg6ABRe-.mjs → client-BPMWutfs.mjs} +3 -3
  31. package/dist/{client-D9pEOhn4.cjs → client-COmgDDy0.cjs} +2 -2
  32. package/dist/{client-Ryu9fllj.mjs → client-DG5ndWLw.mjs} +2 -2
  33. package/dist/{client-D7sSU04O.cjs → client-DyvBTYee.cjs} +3 -3
  34. package/dist/codex/happyMcpStdioBridge.cjs +14 -14
  35. package/dist/codex/happyMcpStdioBridge.mjs +15 -15
  36. package/dist/{codexAppServerClient-C70pJ-BB.mjs → codexAppServerClient-D-Z8qSfI.mjs} +10 -58
  37. package/dist/{codexAppServerClient-DsIUkVnX.cjs → codexAppServerClient-R24WZZfg.cjs} +6 -54
  38. package/dist/{codexCommand-Aycux-B7.cjs → codexCommand-6hW19gsq.cjs} +41 -63
  39. package/dist/{codexCommand-DWbA3pJN.mjs → codexCommand-CVTkZJ1o.mjs} +41 -63
  40. package/dist/{BaseReasoningProcessor-Dnf16mtJ.cjs → codexTermination-BBU7e92y.cjs} +25 -1
  41. package/dist/{BaseReasoningProcessor-pjvLSTQF.mjs → codexTermination-CCIfwzcx.mjs} +25 -2
  42. package/dist/{config-Bztmzu8z.mjs → config-CvsNChKX.mjs} +3 -3
  43. package/dist/{config-BcL0bxO5.cjs → config-DhdrvOLV.cjs} +3 -3
  44. package/dist/{configuration-BAwOtWFY.mjs → configuration-D55F0t16.mjs} +1 -1
  45. package/dist/{configuration-CpBrilxV.cjs → configuration-DZPy0T9Z.cjs} +1 -1
  46. package/dist/{connect-BeWQ4MMA.mjs → connect-CwCXMRmD.mjs} +12 -12
  47. package/dist/{connect-BBNCMTi8.cjs → connect-Wz-XZYXW.cjs} +11 -11
  48. package/dist/{context-Hk0j2Y9-.cjs → context-BKbrZ55r.cjs} +1 -1
  49. package/dist/{context-j114QJre.mjs → context-CCRpVXFo.mjs} +1 -1
  50. package/dist/{controlClient-00KYAjsI.mjs → controlClient-C4xB5J6O.mjs} +4 -4
  51. package/dist/{controlClient-bs_YqwDl.cjs → controlClient-SX8gSza2.cjs} +3 -3
  52. package/dist/{createSessionMetadata-D4Sj6H95.cjs → createSessionMetadata-BCFmYlBo.cjs} +2 -2
  53. package/dist/{createSessionMetadata-xlycGog5.mjs → createSessionMetadata-Bi-m0Y_O.mjs} +2 -2
  54. package/dist/{defaultPermissionMode-CMsiaRzr.cjs → defaultPermissionMode-DMBEnXll.cjs} +2 -2
  55. package/dist/{defaultPermissionMode-B97ox9p1.mjs → defaultPermissionMode-wBcbBezm.mjs} +2 -2
  56. package/dist/{deterministicJson-ucyv8j6b.mjs → deterministicJson-BkQETt8_.mjs} +8 -8
  57. package/dist/{deterministicJson-aHxtYLha.cjs → deterministicJson-ChGfQEF6.cjs} +8 -8
  58. package/dist/{doctor-D554c6Bg.mjs → doctor-B9c2C9dF.mjs} +8 -8
  59. package/dist/{doctor-BXkNXcok.cjs → doctor-BsN3JZJn.cjs} +7 -7
  60. package/dist/{downloadTarget-2_zMvt2N.mjs → downloadTarget-ByXzbDK4.mjs} +6 -6
  61. package/dist/{downloadTarget-CmdlljZW.cjs → downloadTarget-Dj3WoVJa.cjs} +6 -6
  62. package/dist/{ensureDaemonRunning-DJlziY-m.mjs → ensureDaemonRunning--HYzs5Ce.mjs} +5 -5
  63. package/dist/{ensureDaemonRunning-CY7iC--U.cjs → ensureDaemonRunning-7Wb8M7Lv.cjs} +5 -5
  64. package/dist/{handleResumeCommand-CNTnXBXA.mjs → handleResumeCommand-DHddBkNJ.mjs} +5 -5
  65. package/dist/{handleResumeCommand-lSVnvTNC.cjs → handleResumeCommand-OmuUGYjQ.cjs} +5 -5
  66. package/dist/{index-jeD70GGH.cjs → index-BRJzH4sc.cjs} +137 -83
  67. package/dist/{index-DY3I8j0W.mjs → index-BzJNDsJq.mjs} +139 -85
  68. package/dist/{index-B6UGRQ7h.mjs → index-CEjJnq05.mjs} +3 -0
  69. package/dist/{index-59hR7nVz.mjs → index-CEm0MYiS.mjs} +3 -3
  70. package/dist/{index-DhARRePz.cjs → index-CrR4JISa.cjs} +4 -4
  71. package/dist/{index-MwTVbeGW.cjs → index-D9NoYc5I.cjs} +3 -3
  72. package/dist/{index-D3kI0hDR.cjs → index-DFPT4HOO.cjs} +3 -0
  73. package/dist/{index-CxSLrTPA.mjs → index-Dhl6_bw7.mjs} +4 -4
  74. package/dist/index.cjs +2 -2
  75. package/dist/index.mjs +2 -2
  76. package/dist/{install-DXUEtGfU.cjs → install-1qn-D9FS.cjs} +3 -3
  77. package/dist/{install-DytIJ_Ia.mjs → install-BDIUtPXi.mjs} +3 -3
  78. package/dist/lib.cjs +10 -10
  79. package/dist/lib.d.cts +7 -1
  80. package/dist/lib.d.mts +7 -1
  81. package/dist/lib.mjs +11 -11
  82. package/dist/{lidState-CduPmrM0.mjs → lidState-BqVsw7H1.mjs} +1 -1
  83. package/dist/{lidState-UasMvPzw.cjs → lidState-DxbK0qfu.cjs} +1 -1
  84. package/dist/{localHappyAgentAuth-DL8JjHTV.mjs → localHappyAgentAuth-Ce8kO2yc.mjs} +1 -1
  85. package/dist/{localHappyAgentAuth-CA02WOny.cjs → localHappyAgentAuth-D5tANdRD.cjs} +1 -1
  86. package/dist/{logger-CihCDWDw.mjs → logger-13cBr_ew.mjs} +2 -2
  87. package/dist/{logger-zoO54Zsy.cjs → logger-LvwVeATU.cjs} +2 -2
  88. package/dist/{machineMetadata-BAKVtr-k.cjs → machineMetadata-29h7vgf4.cjs} +3 -3
  89. package/dist/{machineMetadata-DEZcQ_CQ.mjs → machineMetadata-dMida2qq.mjs} +3 -3
  90. package/dist/{main-BIvxyX71.cjs → main-DpM5jaFH.cjs} +44 -44
  91. package/dist/{main-DyJfNlL_.mjs → main-x4nAhdH5.mjs} +44 -44
  92. package/dist/{manager-2Il8XJVq.mjs → manager-BEsI4qt3.mjs} +1 -1
  93. package/dist/{mcp-yoIdGe6C.mjs → mcp-DMiFGYMT.mjs} +15 -15
  94. package/dist/{mcp-Dd11vHij.cjs → mcp-DQv3caXs.cjs} +14 -14
  95. package/dist/{mirrorProtocol-D-hF_SE5.cjs → mirrorProtocol-BfrERW7Z.cjs} +2 -2
  96. package/dist/{mirrorProtocol-BukXB5s3.mjs → mirrorProtocol-Bz8tEabR.mjs} +2 -2
  97. package/dist/{package-A7zOGx8B.cjs → package-Ch9WGDV_.cjs} +7 -7
  98. package/dist/{package-ayqGDKSp.mjs → package-CjlsAaRe.mjs} +7 -7
  99. package/dist/{peerTools-DDMSViPu.mjs → peerTools-CxmrKnfV.mjs} +4 -4
  100. package/dist/{peerTools-dPc9hRC5.cjs → peerTools-DtGKWli5.cjs} +4 -4
  101. package/dist/{persistence-Dy3lmall.mjs → persistence-C_tYtOqK.mjs} +2 -2
  102. package/dist/{persistence-Cih2AWml.cjs → persistence-DXbKOHxl.cjs} +2 -2
  103. package/dist/{piRunnerArgs-BuJgnUI5.cjs → piRunnerArgs-BVRZe2AR.cjs} +1 -1
  104. package/dist/{piRunnerArgs-D3z3-1VJ.mjs → piRunnerArgs-BpHc-JZl.mjs} +1 -1
  105. package/dist/{piRuntime-B-SPcWIr.cjs → piRuntime-D7eio8Ix.cjs} +1 -1
  106. package/dist/{piRuntime-kVGue-_5.mjs → piRuntime-DOdGF395.mjs} +1 -1
  107. package/dist/{piTerminal-aEtVdCJ2.mjs → piTerminal-dpxz4Q8D.mjs} +17 -17
  108. package/dist/{piTerminal-DSxK5aAm.cjs → piTerminal-y_PRo2NY.cjs} +16 -16
  109. package/dist/processTree-CMHWlVse.cjs +66 -0
  110. package/dist/processTree-CP5IvQ2Z.mjs +61 -0
  111. package/dist/{rateLimitWindows-82izLQy8.cjs → rateLimitWindows-DFnMU2Vt.cjs} +1 -1
  112. package/dist/{rateLimitWindows-E5DRjfE6.mjs → rateLimitWindows-DYHDGuzQ.mjs} +1 -1
  113. package/dist/{registerCommonHandlers-CqO075-X.cjs → registerCommonHandlers-60VuTkdg.cjs} +2 -2
  114. package/dist/{registerCommonHandlers-Bm7CMqMv.mjs → registerCommonHandlers-D8OMpBbQ.mjs} +2 -2
  115. package/dist/{registerKillSessionHandler-D02OY4vi.mjs → registerKillSessionHandler-Drhf7-Vz.mjs} +4 -4
  116. package/dist/{registerKillSessionHandler-WQra3T9B.cjs → registerKillSessionHandler-pqChBKwO.cjs} +4 -4
  117. package/dist/{remoteSessionClient-f3DYorl8.cjs → remoteSessionClient-B7NvjHD3.cjs} +5 -5
  118. package/dist/{remoteSessionClient-Buh6NejV.mjs → remoteSessionClient-D01Hso2-.mjs} +5 -5
  119. package/dist/{reportProgressTool-C5aSoKYX.mjs → reportProgressTool-B203EZCR.mjs} +1 -1
  120. package/dist/{reportProgressTool-C2gn_HWD.cjs → reportProgressTool-Du_zAK4h.cjs} +1 -1
  121. package/dist/{run-Drxogp0j.mjs → run-DX4Zs3Ug.mjs} +31 -31
  122. package/dist/{run-CDEmq6Zs.cjs → run-DZ5jU53c.cjs} +31 -31
  123. package/dist/{runClaude-BF6U2Js7.mjs → runClaude-CgPHXP0L.mjs} +25 -21
  124. package/dist/{runClaude-yEcZTCt_.cjs → runClaude-ClRhHpwR.cjs} +24 -20
  125. package/dist/{runClaudeDeps-CnNNFjlI.cjs → runClaudeDeps-D2v_WDSL.cjs} +384 -86
  126. package/dist/{runClaudeDeps-Bl4ndq7N.mjs → runClaudeDeps-Dz2iydq4.mjs} +390 -92
  127. package/dist/{runGemini-DDVDRNg4.cjs → runGemini-BtZqGFkp.cjs} +206 -191
  128. package/dist/{runGemini-C3wt7iv7.mjs → runGemini-DBXxpoY8.mjs} +206 -191
  129. package/dist/{runOpenClaw-CY6YHAvj.mjs → runOpenClaw-BOHpzCEU.mjs} +16 -16
  130. package/dist/{runOpenClaw-BzlVA_9Q.cjs → runOpenClaw-D8q8G57u.cjs} +15 -15
  131. package/dist/{sandbox-CX_wLwpq.mjs → sandbox-C452Vrsc.mjs} +4 -4
  132. package/dist/{sandbox-0UNHR3hP.cjs → sandbox-Cu9mMzjx.cjs} +4 -4
  133. package/dist/selfCheck-BAvqBwBR.mjs +84 -0
  134. package/dist/{selfCheck-FNwMFY8p.cjs → selfCheck-gKa3uVr1.cjs} +35 -35
  135. package/dist/{send-BQkl25g0.cjs → send-2Vb5eppI.cjs} +8 -8
  136. package/dist/{send-CpEGYict.mjs → send-B8HARi7x.mjs} +9 -9
  137. package/dist/{server-DnINX_Lm.mjs → server-BBWCIZyS.mjs} +4 -4
  138. package/dist/{server-BodFZ5sW.cjs → server-Db9Wuam3.cjs} +6 -6
  139. package/dist/{sessionLock-DOj6mMXn.cjs → sessionLock-6qL_N6Rn.cjs} +3 -3
  140. package/dist/{sessionLock-Ddn-fhZ0.mjs → sessionLock-ZfvFVdUi.mjs} +3 -3
  141. package/dist/{sessionModeFile-DDbonFR_.mjs → sessionModeFile-CWVq8AT9.mjs} +1 -1
  142. package/dist/{sessionModeFile-DVukoSp7.cjs → sessionModeFile-CsLtn_PL.cjs} +1 -1
  143. package/dist/{sessionOps-B1vQ25GS.mjs → sessionOps-CdgbEJgf.mjs} +5 -5
  144. package/dist/{sessionOps-Nryt1DZt.cjs → sessionOps-Dmt7WUUs.cjs} +4 -4
  145. package/dist/{sessionScanner-DCr3ofhR.mjs → sessionScanner-CNVaSNOn.mjs} +34 -4
  146. package/dist/{sessionScanner-D1h-cdte.cjs → sessionScanner-CQL_WSaC.cjs} +34 -3
  147. package/dist/{sessions-D2HsTbLf.cjs → sessions-BJblG_Hx.cjs} +9 -9
  148. package/dist/{sessions-DpAN6Ft9.mjs → sessions-DTomHfFg.mjs} +10 -10
  149. package/dist/{setupOfflineReconnection-DQHEp330.mjs → setupOfflineReconnection-C5trsV-j.mjs} +2 -2
  150. package/dist/{setupOfflineReconnection-B9Tw1Ouj.cjs → setupOfflineReconnection-DVA0VpQL.cjs} +2 -2
  151. package/dist/{spawn-CNjm1yOi.mjs → spawn-CQJFgoOq.mjs} +14 -13
  152. package/dist/{spawn-CvDZ38hi.cjs → spawn-DRyNAqD8.cjs} +12 -11
  153. package/dist/{spawnHappyCLI-C8Vl56wB.mjs → spawnHappyCLI-B_0RWxD4.mjs} +1 -1
  154. package/dist/{spawnHappyCLI-ahi4j6Mh.cjs → spawnHappyCLI-ChniczJ5.cjs} +1 -1
  155. package/dist/{specialCommands-BpqnGrOP.cjs → specialCommands-DbntVs0d.cjs} +3 -3
  156. package/dist/{specialCommands-DfVMGXTl.mjs → specialCommands-DkdFJi4N.mjs} +3 -3
  157. package/dist/{startFileWatcher-Ddn3L0u3.cjs → startFileWatcher-C292fhra.cjs} +1 -1
  158. package/dist/{startFileWatcher-DXJXY4AE.mjs → startFileWatcher-UQyTSRAP.mjs} +1 -1
  159. package/dist/{sync-BKvgkhPs.mjs → sync-C3p7-KLn.mjs} +1 -1
  160. package/dist/{sync-BgZuthoS.cjs → sync-C7sxoUYG.cjs} +1 -1
  161. package/dist/{systemPrompt-DuPem6c9.mjs → systemPrompt-CdHOlyVW.mjs} +1 -1
  162. package/dist/{systemPrompt-C6O1cHUg.cjs → systemPrompt-DtibzbRU.cjs} +1 -1
  163. package/dist/{teams-DifEhhmk.cjs → teams-D7O7TpVU.cjs} +6 -6
  164. package/dist/{teams-CffMBBfU.mjs → teams-ujXr3AFn.mjs} +6 -6
  165. package/dist/{time-s8CaneqW.cjs → time-Dg5tVB8S.cjs} +1 -1
  166. package/dist/{time-DxCTiteK.mjs → time-yEL6wHUF.mjs} +1 -1
  167. package/dist/{titleGenerator-CXr7t6cf.cjs → titleGenerator-BMEaDTwU.cjs} +2 -2
  168. package/dist/{titleGenerator-B5T7QSzu.mjs → titleGenerator-Dr-BtjzO.mjs} +1 -1
  169. package/dist/{todo-B41GKMcI.cjs → todo-CUcFamGs.cjs} +5 -5
  170. package/dist/{todo-DNO7s8td.mjs → todo-CvJe4M2C.mjs} +5 -5
  171. package/dist/{tools-697R1uqn.mjs → tools-BrM3bZW5.mjs} +1 -1
  172. package/dist/{tools-lotMyxIE.cjs → tools-DDKTB5aQ.cjs} +1 -1
  173. package/dist/{uninstall-CRu96len.cjs → uninstall-7oLuhYIu.cjs} +3 -3
  174. package/dist/{uninstall-CYO7EDjO.mjs → uninstall-CEcMMQGz.mjs} +3 -3
  175. package/package.json +7 -7
  176. package/dist/selfCheck-ClVv8NK3.mjs +0 -84
@@ -1,34 +1,35 @@
1
- import { D as DefaultTransport, A as AcpBackend } from './AcpBackend-COp6D8gl.mjs';
2
- export { a as DEFAULT_IDLE_TIMEOUT_MS, b as DEFAULT_TOOL_CALL_TIMEOUT_MS, e as extractErrorDetail, f as formatDuration, c as formatDurationMinutes, h as handleAgentMessageChunk, d as handleAgentThoughtChunk, g as handleLegacyMessageChunk, i as handlePlanUpdate, j as handleThinkingUpdate, k as handleToolCall, l as handleToolCallUpdate, p as parseArgsFromContent } from './AcpBackend-COp6D8gl.mjs';
3
- import { l as logger } from './logger-CihCDWDw.mjs';
1
+ import { D as DefaultTransport, A as AcpBackend, i as isAgentExitError, a as acpNoticeMessage } from './AcpBackend-B0K0WrtW.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-B0K0WrtW.mjs';
3
+ import { l as logger } from './logger-13cBr_ew.mjs';
4
4
  import { A as AcpSessionManager } from './AcpSessionManager-DykjzBM4.mjs';
5
5
  import { o as BUILTIN_TODO_DISCOVERY, P as PROMPT_QUEUE_CAPABILITY } from './index-DMy3OCBe.mjs';
6
6
  import { r as registerAgentAttachmentDownloads } from './agentAttachments-M_B5qEF2.mjs';
7
- import { c as configuration } from './configuration-BAwOtWFY.mjs';
8
- import { C as CLAUDE_ATTACHMENT_KINDS, a as stageClaudeAttachments, b as appendStagedAttachmentsToPrompt } from './attachmentContent-BQYc8KpE.mjs';
9
- import { p as preparePiTeamsRuntime } from './piRuntime-kVGue-_5.mjs';
7
+ import { c as configuration } from './configuration-D55F0t16.mjs';
8
+ import { a as stageClaudeAttachments, b as appendStagedAttachmentsToPrompt, C as CLAUDE_ATTACHMENT_KINDS } from './attachmentContent-cPVF463_.mjs';
9
+ import { p as preparePiTeamsRuntime } from './piRuntime-DOdGF395.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-CbwDDXJt.mjs';
13
- import { M as MessageQueue2, r as registerKillSessionHandler } from './registerKillSessionHandler-D02OY4vi.mjs';
14
- import { h as hashObject, s as startHappyServer } from './deterministicJson-ucyv8j6b.mjs';
15
- import { r as readSettings } from './persistence-Dy3lmall.mjs';
16
- import { g as getInitialMachineMetadata } from './machineMetadata-DEZcQ_CQ.mjs';
17
- import { c as createSessionMetadata } from './createSessionMetadata-xlycGog5.mjs';
18
- import { s as setupOfflineReconnection } from './setupOfflineReconnection-DQHEp330.mjs';
19
- import { n as notifyDaemonSessionStarted, j as reportSessionEditToDaemon } from './controlClient-00KYAjsI.mjs';
12
+ import { c as connectionState, A as ApiClient } from './api-CKBViqI3.mjs';
13
+ import { M as MessageQueue2, r as registerKillSessionHandler } from './registerKillSessionHandler-Drhf7-Vz.mjs';
14
+ import { h as hashObject, s as startHappyServer } from './deterministicJson-BkQETt8_.mjs';
15
+ import { r as readSettings } from './persistence-C_tYtOqK.mjs';
16
+ import { g as getInitialMachineMetadata } from './machineMetadata-dMida2qq.mjs';
17
+ import { c as createSessionMetadata } from './createSessionMetadata-Bi-m0Y_O.mjs';
18
+ import { s as setupOfflineReconnection } from './setupOfflineReconnection-C5trsV-j.mjs';
19
+ import { n as notifyDaemonSessionStarted, j as reportSessionEditToDaemon } from './controlClient-C4xB5J6O.mjs';
20
20
  import { e as encodeBase64 } from './authRelay-DSAvg1uv.mjs';
21
21
  import { S as StreamRelay } from './streamRelay-_qCd873P.mjs';
22
22
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
23
- import { B as BasePermissionHandler } from './BasePermissionHandler-ChMkmsGD.mjs';
24
- import { T as TitleGenerator } from './titleGenerator-B5T7QSzu.mjs';
25
- import { w as writeSessionModeFile, n as normalizeAcpPermissionMode, r as removeSessionModeFile } from './sessionModeFile-DDbonFR_.mjs';
23
+ import { B as BasePermissionHandler } from './BasePermissionHandler-hdY7kTqX.mjs';
24
+ import { T as TitleGenerator } from './titleGenerator-Dr-BtjzO.mjs';
25
+ import { w as writeSessionModeFile, n as normalizeAcpPermissionMode, r as removeSessionModeFile } from './sessionModeFile-CWVq8AT9.mjs';
26
26
  import { E as EditReportThrottle, e as extractAcpEditPaths } from './editPaths-BVfS_FFL.mjs';
27
27
  import 'node:child_process';
28
28
  import '@agentclientprotocol/sdk';
29
- import './time-DxCTiteK.mjs';
29
+ import './time-yEL6wHUF.mjs';
30
30
  import './contentLogMetadata-BlWI0egu.mjs';
31
- import './package-ayqGDKSp.mjs';
31
+ import './processTree-CP5IvQ2Z.mjs';
32
+ import './package-CjlsAaRe.mjs';
32
33
  import 'chalk';
33
34
  import 'node:util';
34
35
  import 'node:fs';
@@ -39,46 +40,46 @@ import 'node:fs/promises';
39
40
  import './attachmentLimits-Di1Z93lN.mjs';
40
41
  import './resources-BdFBQi8r.mjs';
41
42
  import 'axios';
42
- import './lidState-CduPmrM0.mjs';
43
+ import './lidState-BqVsw7H1.mjs';
43
44
  import 'os';
44
45
  import 'child_process';
45
46
  import 'node:events';
46
47
  import 'socket.io-client';
47
48
  import './limits-DIo7rEBR.mjs';
48
- import './registerCommonHandlers-Bm7CMqMv.mjs';
49
+ import './registerCommonHandlers-D8OMpBbQ.mjs';
49
50
  import 'util';
50
51
  import 'fs/promises';
51
52
  import 'crypto';
52
53
  import 'path';
53
54
  import 'cross-spawn';
54
- import './sync-BKvgkhPs.mjs';
55
- import './backgroundTaskActivity-8PdPxrvy.mjs';
55
+ import './sync-C3p7-KLn.mjs';
56
+ import './backgroundTaskActivity-BVwJBl02.mjs';
56
57
  import 'tweetnacl';
57
58
  import './types-CkqAACXx.mjs';
58
- import './client-Cg6ABRe-.mjs';
59
- import './context-j114QJre.mjs';
60
- import './sessionOps-B1vQ25GS.mjs';
61
- import './tools-697R1uqn.mjs';
62
- import './reportProgressTool-C5aSoKYX.mjs';
63
- import './client-Ryu9fllj.mjs';
59
+ import './client-BPMWutfs.mjs';
60
+ import './context-CCRpVXFo.mjs';
61
+ import './sessionOps-CdgbEJgf.mjs';
62
+ import './tools-BrM3bZW5.mjs';
63
+ import './reportProgressTool-B203EZCR.mjs';
64
+ import './client-DG5ndWLw.mjs';
64
65
  import './precheckCompat-DeEbilbr.mjs';
65
66
  import './agentGuidance-BDYt2Qy2.mjs';
66
67
  import './trimIdent-BAjmv_TG.mjs';
67
- import './peerTools-DDMSViPu.mjs';
68
+ import './peerTools-CxmrKnfV.mjs';
68
69
  import './ids-DU6sLx4C.mjs';
69
- import './remoteSessionClient-Buh6NejV.mjs';
70
+ import './remoteSessionClient-D01Hso2-.mjs';
70
71
  import '@modelcontextprotocol/sdk/server/mcp.js';
71
72
  import 'node:http';
72
73
  import '@modelcontextprotocol/sdk/server/streamableHttp.js';
73
- import './downloadTarget-2_zMvt2N.mjs';
74
+ import './downloadTarget-ByXzbDK4.mjs';
74
75
  import './terminals-Dlg0x3nY.mjs';
75
76
  import './terminalTitleSuggest-CeKsX_V6.mjs';
76
77
  import './tmuxSocket-B8Yx20sT.mjs';
77
- import './bootstrap-CxuBAkJU.mjs';
78
+ import './bootstrap-C0s2bPFQ.mjs';
78
79
  import './previewPath-CXN4Vag0.mjs';
79
80
  import './detectCLI-CSGMlV51.mjs';
80
81
  import 'fs';
81
- import './localHappyAgentAuth-DL8JjHTV.mjs';
82
+ import './localHappyAgentAuth-Ce8kO2yc.mjs';
82
83
  import 'url';
83
84
  import 'node:module';
84
85
  import './oneShotPrompts-DT4p6RNd.mjs';
@@ -97,6 +98,35 @@ function createAcpBackend(options) {
97
98
  return new AcpBackend(backendOptions);
98
99
  }
99
100
 
101
+ const MAX_DETAIL_CHARS = 400;
102
+ function detailOf(error) {
103
+ if (error instanceof Error) return error.message;
104
+ if (error && typeof error === "object") {
105
+ const record = error;
106
+ const data = record.data && typeof record.data === "object" ? record.data : null;
107
+ const details = typeof data?.details === "string" ? data.details : null;
108
+ const message = typeof record.message === "string" ? record.message : null;
109
+ const text = details && message && details !== message ? `${message}: ${details}` : details ?? message;
110
+ if (text) return text;
111
+ try {
112
+ return JSON.stringify(error);
113
+ } catch {
114
+ return String(error);
115
+ }
116
+ }
117
+ return String(error);
118
+ }
119
+ function oneLine(text) {
120
+ const folded = text.replace(/\s+/g, " ").trim();
121
+ return folded.length > MAX_DETAIL_CHARS ? `${folded.slice(0, MAX_DETAIL_CHARS - 1)}\u2026` : folded;
122
+ }
123
+ function describeAcpTurnFailure(agentName, error) {
124
+ if (isAgentExitError(error)) {
125
+ return { message: `Process exited unexpectedly: ${oneLine(error.message)}`, exited: true };
126
+ }
127
+ return { message: `${agentName} error: ${oneLine(detailOf(error))}`, exited: false };
128
+ }
129
+
100
130
  const SUPPORTED_CATEGORIES = /* @__PURE__ */ new Set(["mode", "model", "thought_level"]);
101
131
  function isRecord$1(value) {
102
132
  return !!value && typeof value === "object";
@@ -264,7 +294,6 @@ function mergeAcpSessionConfigIntoMetadata(metadata, snapshot) {
264
294
  return next;
265
295
  }
266
296
 
267
- const TURN_TIMEOUT_MS = 5 * 60 * 1e3;
268
297
  const ACP_EVENT_PREVIEW_CHARS = 240;
269
298
  const ACP_RAW_PREVIEW_CHARS = 2e3;
270
299
  const ACP_COLOR_RESET = "\x1B[0m";
@@ -732,7 +761,7 @@ async function runAcp(opts) {
732
761
  }
733
762
  };
734
763
  const teamsPiEnv = opts.agentName === "pi" ? await preparePiTeamsRuntime() : {};
735
- const backend = new AcpBackend({
764
+ const createBackend = () => new AcpBackend({
736
765
  agentName: opts.agentName,
737
766
  cwd: process.cwd(),
738
767
  command: opts.command,
@@ -751,6 +780,7 @@ async function runAcp(opts) {
751
780
  transportHandler: new DefaultTransport(opts.agentName),
752
781
  verbose
753
782
  });
783
+ let backend = createBackend();
754
784
  let thinking = false;
755
785
  const setThinking = (next) => {
756
786
  if (thinking === next) {
@@ -762,34 +792,15 @@ async function runAcp(opts) {
762
792
  let acpSessionId = null;
763
793
  let shouldExit = false;
764
794
  let abortController = new AbortController();
765
- let pendingTurn = null;
766
795
  let turnCancelled = false;
767
- const clearPendingTurn = (error) => {
768
- if (!pendingTurn) {
769
- return;
770
- }
771
- clearTimeout(pendingTurn.timeout);
772
- const current = pendingTurn;
773
- pendingTurn = null;
774
- if (error) {
775
- current.reject(error);
776
- return;
777
- }
778
- current.resolve();
779
- };
780
- const waitForTurnEnd = () => new Promise((resolve, reject) => {
781
- const timeout = setTimeout(() => {
782
- pendingTurn = null;
783
- reject(new Error(`Timed out waiting for ${opts.agentName} to finish the turn`));
784
- }, TURN_TIMEOUT_MS);
785
- pendingTurn = { resolve, reject, timeout };
786
- });
796
+ let backendStarted = false;
797
+ let backendGone = null;
798
+ let todoDiscoverySent = false;
787
799
  const stopRunnerFromBackendStatus = (status, detail) => {
788
800
  const reason = detail ? `${opts.agentName} backend ${status}: ${detail}` : `${opts.agentName} backend ${status}`;
789
801
  logger.debug(`[${opts.agentName}] ${reason}; stopping ACP runner`);
790
802
  shouldExit = true;
791
803
  messageQueue.close();
792
- clearPendingTurn(new Error(reason));
793
804
  };
794
805
  const sendEnvelopes = (envelopes) => {
795
806
  for (const envelope of envelopes) {
@@ -1055,14 +1066,21 @@ async function runAcp(opts) {
1055
1066
  const suffix = msg.detail ? `: ${msg.detail}` : "";
1056
1067
  const statusLine = `Status: ${msg.status}${suffix}`;
1057
1068
  logAcp("muted", statusLine);
1058
- if (msg.status === "idle") {
1059
- clearPendingTurn();
1060
- }
1061
1069
  if (msg.status === "error" || msg.status === "stopped") {
1062
1070
  if (msg.status === "error") opts.onBackendError?.(msg.detail);
1063
- stopRunnerFromBackendStatus(msg.status, msg.detail);
1071
+ if (!backendStarted) {
1072
+ stopRunnerFromBackendStatus(msg.status, msg.detail);
1073
+ } else if (msg.status === "stopped") {
1074
+ backendGone = new Error(msg.detail ?? `${opts.agentName} process exited`);
1075
+ }
1064
1076
  }
1065
1077
  }
1078
+ if (msg.type === "event" && msg.name === "notice") {
1079
+ const message = acpNoticeMessage(opts.agentName, msg.payload);
1080
+ logAcp("muted", message);
1081
+ session.sendSessionEvent({ type: "message", message });
1082
+ return;
1083
+ }
1066
1084
  const frontendMessage = formatAcpMessageForFrontend(opts.agentName, msg, verbose);
1067
1085
  if (frontendMessage) {
1068
1086
  logAcp(frontendMessage.kind, frontendMessage.text);
@@ -1114,8 +1132,9 @@ async function runAcp(opts) {
1114
1132
  const keepAliveInterval = setInterval(() => {
1115
1133
  session.keepAlive(thinking, "remote");
1116
1134
  }, 2e3);
1135
+ let promptInFlight = false;
1117
1136
  async function handleAbort() {
1118
- turnCancelled = thinking;
1137
+ turnCancelled = thinking && promptInFlight;
1119
1138
  try {
1120
1139
  if (acpSessionId) {
1121
1140
  await backend.cancel(acpSessionId);
@@ -1148,15 +1167,12 @@ async function runAcp(opts) {
1148
1167
  const disposeTermination = registerKillSessionHandler(session.rpcHandlerManager, async () => {
1149
1168
  shouldExit = true;
1150
1169
  messageQueue.close();
1151
- clearPendingTurn(new Error("Session terminated"));
1152
1170
  await handleAbort();
1153
1171
  }, session, { processSignals: true });
1154
- try {
1155
- const started = await backend.startSession();
1156
- acpSessionId = started.sessionId;
1157
- if (opts.model) {
1158
- await switchModelIfRequested(opts.model);
1159
- const applied = isCurrentRequestedModel(opts.model);
1172
+ const afterSessionStarted = async (requestedModel) => {
1173
+ if (requestedModel) {
1174
+ await switchModelIfRequested(requestedModel);
1175
+ const applied = isCurrentRequestedModel(requestedModel);
1160
1176
  if (!applied) session.sendSessionEvent({ type: "message", message: "The saved model is unavailable for this agent; using its current model." });
1161
1177
  }
1162
1178
  session.updateMetadata((current) => ({
@@ -1165,8 +1181,33 @@ async function runAcp(opts) {
1165
1181
  }));
1166
1182
  if (permissionModeIsFileBacked()) {
1167
1183
  fileBackedModeActive = true;
1168
- publishFileBackedPermissionMode(initialPermissionMode);
1184
+ publishFileBackedPermissionMode(fileBackedPermissionMode ?? initialPermissionMode);
1185
+ }
1186
+ };
1187
+ const restartBackend = async () => {
1188
+ const gone = backendGone;
1189
+ backend.offMessage?.(onBackendMessage);
1190
+ acpSessionId = null;
1191
+ try {
1192
+ await backend.dispose();
1193
+ } catch (error) {
1194
+ logger.debug(`[${opts.agentName}] dispose of the dead backend failed:`, error);
1169
1195
  }
1196
+ backend = createBackend();
1197
+ backend.onMessage(onBackendMessage);
1198
+ const started = await backend.startSession();
1199
+ acpSessionId = started.sessionId;
1200
+ backendGone = null;
1201
+ todoDiscoverySent = false;
1202
+ 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).` });
1205
+ };
1206
+ try {
1207
+ const started = await backend.startSession();
1208
+ acpSessionId = started.sessionId;
1209
+ backendStarted = true;
1210
+ await afterSessionStarted(opts.model);
1170
1211
  if (verbose) {
1171
1212
  if (!sawSlashCommands) {
1172
1213
  logAcp("muted", `Outgoing slash commands from ${opts.agentName}: not reported yet`);
@@ -1178,7 +1219,6 @@ async function runAcp(opts) {
1178
1219
  logAcp("muted", `Outgoing models from ${opts.agentName}: not reported yet`);
1179
1220
  }
1180
1221
  }
1181
- let todoDiscoverySent = false;
1182
1222
  while (!shouldExit) {
1183
1223
  const waitSignal = abortController.signal;
1184
1224
  const batch = await messageQueue.waitForMessagesAndGetAsString(waitSignal);
@@ -1191,17 +1231,17 @@ async function runAcp(opts) {
1191
1231
  }
1192
1232
  break;
1193
1233
  }
1194
- if (!acpSessionId) {
1195
- throw new Error("ACP session is not started");
1196
- }
1197
1234
  logAcp("incoming", `Incoming prompt: ${formatUnknownForConsole(batch.message, ACP_EVENT_PREVIEW_CHARS)}`);
1198
1235
  sendEnvelopes(sessionManager.startTurn());
1199
1236
  turnCancelled = false;
1200
1237
  setThinking(true);
1201
- const turnEnded = waitForTurnEnd();
1202
- void turnEnded.catch(() => {
1203
- });
1204
1238
  try {
1239
+ if (backendGone) {
1240
+ await restartBackend();
1241
+ }
1242
+ if (!acpSessionId) {
1243
+ throw new Error("ACP session is not started");
1244
+ }
1205
1245
  if (typeof batch.mode.permissionMode === "string" && batch.mode.permissionMode.length > 0) {
1206
1246
  await switchPermissionModeIfRequested(batch.mode.permissionMode);
1207
1247
  }
@@ -1217,10 +1257,23 @@ ${BUILTIN_TODO_DISCOVERY}`;
1217
1257
  happyHomeDir: configuration.happyHomeDir,
1218
1258
  sessionId: session.sessionId
1219
1259
  }) : [];
1220
- await backend.sendPrompt(acpSessionId, appendStagedAttachmentsToPrompt(prompt, staged), attachments);
1260
+ promptInFlight = true;
1261
+ let outcome;
1262
+ try {
1263
+ outcome = await backend.sendPrompt(acpSessionId, appendStagedAttachmentsToPrompt(prompt, staged), attachments);
1264
+ } finally {
1265
+ promptInFlight = false;
1266
+ }
1221
1267
  todoDiscoverySent = true;
1222
- await turnEnded;
1223
- sendEnvelopes(sessionManager.endTurn(turnCancelled ? "cancelled" : "completed"));
1268
+ const stopReason = outcome && typeof outcome === "object" ? outcome.stopReason : void 0;
1269
+ if (stopReason === "error") {
1270
+ throw new Error("the turn ended with an error reported by the agent");
1271
+ }
1272
+ const cancelled = turnCancelled || stopReason === "cancelled";
1273
+ sendEnvelopes(sessionManager.endTurn(cancelled ? "cancelled" : "completed"));
1274
+ if (!cancelled && stopReason && stopReason !== "end_turn") {
1275
+ session.sendSessionEvent({ type: "message", message: `${opts.agentName} stopped the turn: ${stopReason}` });
1276
+ }
1224
1277
  streamRelay.endTurn();
1225
1278
  setThinking(false);
1226
1279
  session.sendSessionEvent({ type: "ready" });
@@ -1228,14 +1281,16 @@ ${BUILTIN_TODO_DISCOVERY}`;
1228
1281
  logAcp("muted", `Outgoing prompt completion from ${opts.agentName}`);
1229
1282
  }
1230
1283
  } catch (error) {
1231
- session.sendSessionEvent({ type: "message", message: "The agent could not process this message or its attachments. Please check the agent and try again." });
1284
+ const failure = describeAcpTurnFailure(opts.agentName, error);
1285
+ session.sendSessionEvent({ type: "message", message: failure.message });
1232
1286
  sendEnvelopes(sessionManager.endTurn("failed"));
1233
1287
  streamRelay.endTurn();
1234
1288
  setThinking(false);
1235
1289
  session.sendSessionEvent({ type: "ready" });
1236
1290
  logAcp("error", `Prompt error from ${opts.agentName}: ${error instanceof Error ? error.message : String(error)}`);
1237
- clearPendingTurn(error instanceof Error ? error : new Error(String(error)));
1238
- throw error;
1291
+ if (failure.exited && error instanceof Error) {
1292
+ backendGone = error;
1293
+ }
1239
1294
  }
1240
1295
  }
1241
1296
  } finally {
@@ -1245,7 +1300,6 @@ ${BUILTIN_TODO_DISCOVERY}`;
1245
1300
  streamRelay.endTurn();
1246
1301
  streamRelay.dispose();
1247
1302
  reconnectionHandle?.cancel();
1248
- clearPendingTurn(new Error("ACP runner shutting down"));
1249
1303
  try {
1250
1304
  permissionHandler.reset();
1251
1305
  } catch (error) {
@@ -79,6 +79,9 @@ function query(params) {
79
79
  if (typeof value === "string") env[key] = value;
80
80
  }
81
81
  env.CLAUDE_CODE_ENTRYPOINT = resolveHappyEntrypoint(env.CLAUDE_CODE_ENTRYPOINT);
82
+ if (env.CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS === void 0) {
83
+ env.CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS = "1";
84
+ }
82
85
  pinSmallFastModel(env);
83
86
  if (opts?.mcpServers && Object.keys(opts.mcpServers).length > 0) {
84
87
  ensureLocalProxyBypass(env);
@@ -1,4 +1,4 @@
1
- import { p as packageJson } from './package-ayqGDKSp.mjs';
1
+ import { p as packageJson } from './package-CjlsAaRe.mjs';
2
2
  import module$1 from 'node:module';
3
3
  import { existsSync } from 'node:fs';
4
4
  import { readdir, rm } from 'node:fs/promises';
@@ -57,10 +57,10 @@ async function pruneStaleCompileCaches(happyHomeDir, cliVersion) {
57
57
  async function run(args) {
58
58
  enableCompileCacheIfPossible(packageJson.version);
59
59
  if (isStandaloneVersionRequest(args) || isSelfCheckRequest(args)) {
60
- const { selfCheckMain } = await import('./selfCheck-ClVv8NK3.mjs');
60
+ const { selfCheckMain } = await import('./selfCheck-BAvqBwBR.mjs');
61
61
  process.exit(await selfCheckMain({ verbose: isSelfCheckRequest(args) }));
62
62
  }
63
- const { main } = await import('./main-DyJfNlL_.mjs');
63
+ const { main } = await import('./main-x4nAhdH5.mjs');
64
64
  await main();
65
65
  }
66
66
  void run(process.argv.slice(2));
@@ -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-zoO54Zsy.cjs');
6
- var persistence = require('./persistence-Cih2AWml.cjs');
5
+ var logger = require('./logger-LvwVeATU.cjs');
6
+ var persistence = require('./persistence-DXbKOHxl.cjs');
7
7
  var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
8
8
  require('chalk');
9
9
  require('node:util');
10
- require('./configuration-CpBrilxV.cjs');
10
+ require('./configuration-DZPy0T9Z.cjs');
11
11
  require('node:path');
12
- require('./package-A7zOGx8B.cjs');
12
+ require('./package-Ch9WGDV_.cjs');
13
13
  require('node:fs/promises');
14
14
  require('zod');
15
15
  require('./authRelay-BdYkC1Po.cjs');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var _package = require('./package-A7zOGx8B.cjs');
3
+ var _package = require('./package-Ch9WGDV_.cjs');
4
4
  var module$1 = require('node:module');
5
5
  var node_fs = require('node:fs');
6
6
  var promises = require('node:fs/promises');
@@ -59,10 +59,10 @@ async function pruneStaleCompileCaches(happyHomeDir, cliVersion) {
59
59
  async function run(args) {
60
60
  enableCompileCacheIfPossible(_package.packageJson.version);
61
61
  if (isStandaloneVersionRequest(args) || isSelfCheckRequest(args)) {
62
- const { selfCheckMain } = await Promise.resolve().then(function () { return require('./selfCheck-FNwMFY8p.cjs'); });
62
+ const { selfCheckMain } = await Promise.resolve().then(function () { return require('./selfCheck-gKa3uVr1.cjs'); });
63
63
  process.exit(await selfCheckMain({ verbose: isSelfCheckRequest(args) }));
64
64
  }
65
- const { main } = await Promise.resolve().then(function () { return require('./main-BIvxyX71.cjs'); });
65
+ const { main } = await Promise.resolve().then(function () { return require('./main-DpM5jaFH.cjs'); });
66
66
  await main();
67
67
  }
68
68
  void run(process.argv.slice(2));
@@ -80,6 +80,9 @@ function query(params) {
80
80
  if (typeof value === "string") env[key] = value;
81
81
  }
82
82
  env.CLAUDE_CODE_ENTRYPOINT = resolveHappyEntrypoint(env.CLAUDE_CODE_ENTRYPOINT);
83
+ if (env.CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS === void 0) {
84
+ env.CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS = "1";
85
+ }
83
86
  smallFastModel.pinSmallFastModel(env);
84
87
  if (opts?.mcpServers && Object.keys(opts.mcpServers).length > 0) {
85
88
  smallFastModel.ensureLocalProxyBypass(env);
@@ -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-CihCDWDw.mjs';
4
- import { r as readSettings } from './persistence-Dy3lmall.mjs';
3
+ import { l as logger } from './logger-13cBr_ew.mjs';
4
+ import { r as readSettings } from './persistence-C_tYtOqK.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-BAwOtWFY.mjs';
9
+ import './configuration-D55F0t16.mjs';
10
10
  import 'node:path';
11
- import './package-ayqGDKSp.mjs';
11
+ import './package-CjlsAaRe.mjs';
12
12
  import 'node:fs/promises';
13
13
  import 'zod';
14
14
  import './authRelay-DSAvg1uv.mjs';
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- require('./package-A7zOGx8B.cjs');
4
- require('./index-MwTVbeGW.cjs');
3
+ require('./package-Ch9WGDV_.cjs');
4
+ require('./index-D9NoYc5I.cjs');
5
5
  require('node:module');
6
6
  require('node:fs');
7
7
  require('node:fs/promises');
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import './package-ayqGDKSp.mjs';
2
- import './index-59hR7nVz.mjs';
1
+ import './package-CjlsAaRe.mjs';
2
+ import './index-CEm0MYiS.mjs';
3
3
  import 'node:module';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
@@ -1,17 +1,17 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-zoO54Zsy.cjs');
3
+ var logger = require('./logger-LvwVeATU.cjs');
4
4
  var fs = require('fs');
5
5
  var child_process = require('child_process');
6
6
  var trimIdent = require('./trimIdent-4gvk9Wk6.cjs');
7
7
  var os = require('os');
8
8
  require('chalk');
9
9
  require('node:util');
10
- require('./configuration-CpBrilxV.cjs');
10
+ require('./configuration-DZPy0T9Z.cjs');
11
11
  require('node:fs');
12
12
  require('node:os');
13
13
  require('node:path');
14
- require('./package-A7zOGx8B.cjs');
14
+ require('./package-Ch9WGDV_.cjs');
15
15
  require('node:fs/promises');
16
16
 
17
17
  const PLIST_LABEL = "com.happy-cli.daemon";
@@ -1,15 +1,15 @@
1
- import { l as logger } from './logger-CihCDWDw.mjs';
1
+ import { l as logger } from './logger-13cBr_ew.mjs';
2
2
  import { existsSync, writeFileSync, chmodSync } from 'fs';
3
3
  import { execSync } from 'child_process';
4
4
  import { t as trimIdent } from './trimIdent-BAjmv_TG.mjs';
5
5
  import os from 'os';
6
6
  import 'chalk';
7
7
  import 'node:util';
8
- import './configuration-BAwOtWFY.mjs';
8
+ import './configuration-D55F0t16.mjs';
9
9
  import 'node:fs';
10
10
  import 'node:os';
11
11
  import 'node:path';
12
- import './package-ayqGDKSp.mjs';
12
+ import './package-CjlsAaRe.mjs';
13
13
  import 'node:fs/promises';
14
14
 
15
15
  const PLIST_LABEL = "com.happy-cli.daemon";
package/dist/lib.cjs CHANGED
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var api = require('./api-Buc_ejoA.cjs');
4
- var logger = require('./logger-zoO54Zsy.cjs');
5
- var configuration = require('./configuration-CpBrilxV.cjs');
3
+ var api = require('./api-BWX10o97.cjs');
4
+ var logger = require('./logger-LvwVeATU.cjs');
5
+ var configuration = require('./configuration-DZPy0T9Z.cjs');
6
6
  var types = require('./types-CRS-srZK.cjs');
7
7
  require('axios');
8
- require('./lidState-UasMvPzw.cjs');
8
+ require('./lidState-DxbK0qfu.cjs');
9
9
  require('./authRelay-BdYkC1Po.cjs');
10
10
  require('node:crypto');
11
11
  require('tweetnacl');
@@ -18,8 +18,8 @@ require('zod');
18
18
  require('./index-De8L5lFK.cjs');
19
19
  require('@paralleldrive/cuid2');
20
20
  require('./limits-C-a7gr04.cjs');
21
- require('./time-s8CaneqW.cjs');
22
- require('./registerCommonHandlers-CqO075-X.cjs');
21
+ require('./time-Dg5tVB8S.cjs');
22
+ require('./registerCommonHandlers-60VuTkdg.cjs');
23
23
  require('util');
24
24
  require('fs/promises');
25
25
  require('crypto');
@@ -27,10 +27,10 @@ require('path');
27
27
  require('cross-spawn');
28
28
  require('./projectPath-ChLhdOyt.cjs');
29
29
  require('url');
30
- require('./sync-BgZuthoS.cjs');
30
+ require('./sync-C7sxoUYG.cjs');
31
31
  require('./backgroundTaskActivity-CBvUdj39.cjs');
32
- require('./controlClient-bs_YqwDl.cjs');
33
- require('./persistence-Cih2AWml.cjs');
32
+ require('./controlClient-SX8gSza2.cjs');
33
+ require('./persistence-DXbKOHxl.cjs');
34
34
  require('node:fs/promises');
35
35
  require('node:fs');
36
36
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
@@ -38,7 +38,7 @@ require('chalk');
38
38
  require('node:util');
39
39
  require('node:path');
40
40
  require('node:os');
41
- require('./package-A7zOGx8B.cjs');
41
+ require('./package-Ch9WGDV_.cjs');
42
42
 
43
43
 
44
44
 
package/dist/lib.d.cts CHANGED
@@ -1285,9 +1285,15 @@ declare class ApiSessionClient extends EventEmitter {
1285
1285
  * unique constraint swallow every envelope after the first. */
1286
1286
  localIdFor?: (envelopeIndex: number) => string;
1287
1287
  }): void;
1288
+ /**
1289
+ * Returns true when a `turn-end` envelope went out, false when no turn was
1290
+ * open to close (B-631: the web renders a failed turn-end's `error` as its
1291
+ * own line, so a launcher sends the matching session event only when this
1292
+ * says the turn-end did not carry it).
1293
+ */
1288
1294
  closeClaudeSessionTurn(status?: SessionTurnEndStatus, meta?: {
1289
1295
  error?: string;
1290
- }): void;
1296
+ }): boolean;
1291
1297
  sendCodexMessage(body: any): void;
1292
1298
  private enqueueSessionProtocolEnvelope;
1293
1299
  sendSessionProtocolMessage(envelope: SessionEnvelope, localId?: string): void;
package/dist/lib.d.mts CHANGED
@@ -1285,9 +1285,15 @@ declare class ApiSessionClient extends EventEmitter {
1285
1285
  * unique constraint swallow every envelope after the first. */
1286
1286
  localIdFor?: (envelopeIndex: number) => string;
1287
1287
  }): void;
1288
+ /**
1289
+ * Returns true when a `turn-end` envelope went out, false when no turn was
1290
+ * open to close (B-631: the web renders a failed turn-end's `error` as its
1291
+ * own line, so a launcher sends the matching session event only when this
1292
+ * says the turn-end did not carry it).
1293
+ */
1288
1294
  closeClaudeSessionTurn(status?: SessionTurnEndStatus, meta?: {
1289
1295
  error?: string;
1290
- }): void;
1296
+ }): boolean;
1291
1297
  sendCodexMessage(body: any): void;
1292
1298
  private enqueueSessionProtocolEnvelope;
1293
1299
  sendSessionProtocolMessage(envelope: SessionEnvelope, localId?: string): void;