very-happy-cli 0.2.159 → 0.2.161

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 (259) hide show
  1. package/dist/{AcpBackend-VsfkZiVF.mjs → AcpBackend-6U6pQgx1.mjs} +4 -2
  2. package/dist/{AcpBackend-DUYFlyfN.cjs → AcpBackend-Ba98QDif.cjs} +78 -76
  3. package/dist/{AcpSessionManager-Bdv8LWXh.cjs → AcpSessionManager-BAY1Pggx.cjs} +9 -9
  4. package/dist/{AcpSessionManager-rYtVb0kN.mjs → AcpSessionManager-CoMWFVw3.mjs} +1 -1
  5. package/dist/BasePermissionHandler-2R0uH2CI.cjs +157 -0
  6. package/dist/BasePermissionHandler-BvvhBTja.mjs +155 -0
  7. package/dist/BaseReasoningProcessor-DyhO1uoU.mjs +198 -0
  8. package/dist/BaseReasoningProcessor-fsVNmCEF.cjs +200 -0
  9. package/dist/RemoteModeDisplay-D-HewyXg.mjs +150 -0
  10. package/dist/RemoteModeDisplay-NC1gPHtj.cjs +153 -0
  11. package/dist/agentAttachments-Dbw8iMCZ.cjs +20 -0
  12. package/dist/agentAttachments-M_B5qEF2.mjs +18 -0
  13. package/dist/agentGuidance-B5NATuFa.cjs +28 -0
  14. package/dist/agentGuidance-CQuNlNx8.mjs +20 -0
  15. package/dist/{agentHome-CvsJyeQB.mjs → agentHome-Ck1i1TQB.mjs} +8 -22
  16. package/dist/{agentHome-CHh4lmjM.cjs → agentHome-DvNnGphb.cjs} +14 -28
  17. package/dist/api-B2vLMS-z.cjs +3346 -0
  18. package/dist/api-SffjRQ1b.mjs +3339 -0
  19. package/dist/{types-Dh-s4Lqs.mjs → apiMachine-BpW9t8MO.mjs} +9116 -16205
  20. package/dist/{types-BbvK1Tr_.cjs → apiMachine-gFA54X7y.cjs} +9104 -16247
  21. package/dist/assistantTools-BfA0R3_m.cjs +380 -0
  22. package/dist/assistantTools-CgiTbnWb.mjs +376 -0
  23. package/dist/attachmentContent-CSGxr71v.mjs +82 -0
  24. package/dist/attachmentContent-DMMZzevR.cjs +88 -0
  25. package/dist/attachmentLimits-CzVrqgLR.cjs +354 -0
  26. package/dist/attachmentLimits-yba1uHFO.mjs +348 -0
  27. package/dist/auth-Bt4ceBBy.cjs +227 -0
  28. package/dist/auth-CYHjQ8oQ.mjs +225 -0
  29. package/dist/auth-DdyVZSo6.mjs +218 -0
  30. package/dist/auth-x4CEoysH.cjs +220 -0
  31. package/dist/authRelay-BdYkC1Po.cjs +156 -0
  32. package/dist/authRelay-DSAvg1uv.mjs +143 -0
  33. package/dist/{auto-DKmEls8Z.cjs → auto-BDXDUnjB.cjs} +70 -79
  34. package/dist/{auto-nb8GhRRy.mjs → auto-CXLlRi3a.mjs} +27 -36
  35. package/dist/backgroundTaskActivity-8PdPxrvy.mjs +149 -0
  36. package/dist/backgroundTaskActivity-CBvUdj39.cjs +157 -0
  37. package/dist/bootstrap-BNQq05jR.mjs +112 -0
  38. package/dist/bootstrap-CkgIq8N3.cjs +116 -0
  39. package/dist/browser-9pyhQr1R.mjs +20 -0
  40. package/dist/browser-BDOlKWYe.cjs +22 -0
  41. package/dist/claudeCliPath-BqkaH2oR.mjs +8 -0
  42. package/dist/claudeCliPath-U4HHmV4r.cjs +10 -0
  43. package/dist/claudeLocal-BDuGFnjJ.cjs +343 -0
  44. package/dist/claudeLocal-CQa8qnwq.mjs +339 -0
  45. package/dist/claudeLocalLauncher-Bd5I2-j6.cjs +154 -0
  46. package/dist/claudeLocalLauncher-CDqQI9ak.mjs +152 -0
  47. package/dist/cliUpdate-DsKXPFYp.cjs +120 -0
  48. package/dist/cliUpdate-Y34VGe9Y.mjs +112 -0
  49. package/dist/client-Brn-UwVk.mjs +100 -0
  50. package/dist/client-CXb1VJui.mjs +112 -0
  51. package/dist/client-C_axwRry.cjs +104 -0
  52. package/dist/client-DOBWJL3u.cjs +119 -0
  53. package/dist/codex/happyMcpStdioBridge.cjs +33 -14
  54. package/dist/codex/happyMcpStdioBridge.mjs +26 -7
  55. package/dist/codexAppServerClient-ZzhUTWPo.cjs +1090 -0
  56. package/dist/codexAppServerClient-oeQKD6Qf.mjs +1088 -0
  57. package/dist/codexCommand-C7H0NpBe.cjs +2088 -0
  58. package/dist/codexCommand-CJ82bl3l.mjs +2086 -0
  59. package/dist/codexThreadFork-BCaEMBiM.mjs +338 -0
  60. package/dist/codexThreadFork-BZqF-9bX.cjs +350 -0
  61. package/dist/{config-ClLtM6F3.mjs → config-BglnktIo.mjs} +7 -40
  62. package/dist/{config-DLx-vW3I.cjs → config-CYpL1Ahd.cjs} +26 -59
  63. package/dist/configuration-DoWFJUPm.mjs +170 -0
  64. package/dist/configuration-v9f8LM9T.cjs +181 -0
  65. package/dist/connect-hgcNjyAB.mjs +682 -0
  66. package/dist/connect-yEvjdRvx.cjs +684 -0
  67. package/dist/constants-BC4St0xd.mjs +11 -0
  68. package/dist/constants-VJ0N6WuG.cjs +17 -0
  69. package/dist/contentLogMetadata-BlWI0egu.mjs +51 -0
  70. package/dist/contentLogMetadata-ZSFk_NjQ.cjs +54 -0
  71. package/dist/context-B45vMtSZ.cjs +69 -0
  72. package/dist/context-C9GHPLEm.mjs +65 -0
  73. package/dist/controlClient-DjoKTtgK.mjs +260 -0
  74. package/dist/controlClient-fEHE85bH.cjs +279 -0
  75. package/dist/createSessionMetadata-BRLB9CNO.cjs +58 -0
  76. package/dist/createSessionMetadata-mIeehclp.mjs +54 -0
  77. package/dist/defaultPermissionMode-BnxJPVHT.mjs +4 -0
  78. package/dist/defaultPermissionMode-CxmTXUQR.cjs +7 -0
  79. package/dist/detectCLI-CSGMlV51.mjs +58 -0
  80. package/dist/detectCLI-DR9ZaN6B.cjs +61 -0
  81. package/dist/deterministicJson-DKDP_mM-.cjs +507 -0
  82. package/dist/deterministicJson-p835AdAU.mjs +502 -0
  83. package/dist/doctor-BPkYWSuq.mjs +75 -0
  84. package/dist/doctor-BeUuQXFs.mjs +391 -0
  85. package/dist/doctor-hVNnSZJn.cjs +395 -0
  86. package/dist/doctor-u46qYYKX.cjs +79 -0
  87. package/dist/doctorReadiness-BCZGcN0a.cjs +151 -0
  88. package/dist/doctorReadiness-C208SMN9.mjs +142 -0
  89. package/dist/editPaths-BVfS_FFL.mjs +68 -0
  90. package/dist/editPaths-Bqp4OFPw.cjs +73 -0
  91. package/dist/ensureDaemonRunning-CO7d1gOC.mjs +61 -0
  92. package/dist/ensureDaemonRunning-Dg9aZfjs.cjs +64 -0
  93. package/dist/handleResumeCommand-BiTPK0qd.mjs +240 -0
  94. package/dist/handleResumeCommand-DnVmy7a3.cjs +245 -0
  95. package/dist/ids-B6ZC0HGt.cjs +13 -0
  96. package/dist/ids-DU6sLx4C.mjs +10 -0
  97. package/dist/index-B6UGRQ7h.mjs +102 -0
  98. package/dist/{index-2mCaeKyf.mjs → index-CAFwetLk.mjs} +68 -38
  99. package/dist/index-Cqx-Raq6.mjs +68 -0
  100. package/dist/index-D3kI0hDR.cjs +107 -0
  101. package/dist/index-DA7yINuk.cjs +994 -0
  102. package/dist/{index-BEOMECtE.cjs → index-LIn6nCcq.cjs} +121 -91
  103. package/dist/index-Pf2cV9cn.cjs +182 -0
  104. package/dist/index-SPGPenK5.mjs +158 -0
  105. package/dist/index-gNTWtSKN.cjs +71 -0
  106. package/dist/index-qdS1friN.mjs +949 -0
  107. package/dist/index.cjs +5 -46
  108. package/dist/index.mjs +5 -46
  109. package/dist/{install-BPhJppvd.mjs → install-BO_W7VhL.mjs} +37 -37
  110. package/dist/install-Bu85vlHD.cjs +88 -0
  111. package/dist/install-ClUUl3yp.mjs +86 -0
  112. package/dist/{install-BOHrUaFM.cjs → install-Cs5qAPrB.cjs} +38 -38
  113. package/dist/{installPiTools-DuZ6jZvX.cjs → installPiTools-BKnXjrVu.cjs} +2 -3
  114. package/dist/{installPiTools-Cj7yU9Fc.mjs → installPiTools-B_CdM5_2.mjs} +1 -2
  115. package/dist/{installTerminalHooks-Cou3WUf3.cjs → installTerminalHooks-BQZbvxsZ.cjs} +5 -40
  116. package/dist/{installTerminalHooks-WeznjkuC.mjs → installTerminalHooks-By7gBMEF.mjs} +3 -38
  117. package/dist/lib.cjs +28 -19
  118. package/dist/lib.d.cts +12 -2
  119. package/dist/lib.d.mts +12 -2
  120. package/dist/lib.mjs +23 -14
  121. package/dist/lidState-C2dI0FAN.mjs +297 -0
  122. package/dist/lidState-KHHu1015.cjs +305 -0
  123. package/dist/limits-C-a7gr04.cjs +43 -0
  124. package/dist/limits-DIo7rEBR.mjs +36 -0
  125. package/dist/localHappyAgentAuth-BXiHPXdC.cjs +86 -0
  126. package/dist/localHappyAgentAuth-DCsetiyG.mjs +82 -0
  127. package/dist/logger-Bc8-u1w0.cjs +275 -0
  128. package/dist/logger-fXoNzNuB.mjs +271 -0
  129. package/dist/loginShellEnv-BkuYtExZ.cjs +182 -0
  130. package/dist/loginShellEnv-Dw8M7tkI.mjs +167 -0
  131. package/dist/machineMetadata-BHjehxJY.mjs +38 -0
  132. package/dist/machineMetadata-BibDMFVx.cjs +41 -0
  133. package/dist/main-BktM4A1K.mjs +939 -0
  134. package/dist/main-CLaX-t-b.cjs +941 -0
  135. package/dist/manager-BQ4flvQZ.mjs +101 -0
  136. package/dist/manager-Cly8xVIR.cjs +105 -0
  137. package/dist/{mcp-Dy3f_K0h.mjs → mcp-CeUd9KDr.mjs} +27 -33
  138. package/dist/{mcp-CPYbtsYG.cjs → mcp-GBfE70nk.cjs} +42 -48
  139. package/dist/messageBuffer-BWlGgR3A.mjs +71 -0
  140. package/dist/messageBuffer-fJMH6uY8.cjs +73 -0
  141. package/dist/mirrorProtocol-BNLtoWjO.mjs +170 -0
  142. package/dist/mirrorProtocol-BUtmg1ws.cjs +186 -0
  143. package/dist/oneShotPrompts-CL0dip9C.cjs +16 -0
  144. package/dist/oneShotPrompts-DT4p6RNd.mjs +12 -0
  145. package/dist/package-Cl5BEP5x.cjs +173 -0
  146. package/dist/package-uOg9SCKi.mjs +171 -0
  147. package/dist/path-B7zW-WwE.cjs +18 -0
  148. package/dist/path-D2wdaNSk.mjs +15 -0
  149. package/dist/peerTools-CIeiy9wn.cjs +283 -0
  150. package/dist/peerTools-Dz3_7Bkk.mjs +272 -0
  151. package/dist/permissionMode-CH4FoZfU.mjs +80 -0
  152. package/dist/permissionMode-CrV-XuMs.cjs +87 -0
  153. package/dist/persistence-CBNMzSa8.cjs +414 -0
  154. package/dist/persistence-oET5n61f.mjs +372 -0
  155. package/dist/piExtension.mjs +2 -1
  156. package/dist/piRunnerArgs-Bf7RUF__.cjs +66 -0
  157. package/dist/piRunnerArgs-Dk1ncwHF.mjs +59 -0
  158. package/dist/{piRuntime-NtF0YqjH.cjs → piRuntime-B_6TE9Eb.cjs} +4 -4
  159. package/dist/{piRuntime-kLZNpAAl.mjs → piRuntime-BwRdhK_N.mjs} +2 -2
  160. package/dist/{piTerminal-B0fEOV_2.mjs → piTerminal-Bap3R8Re.mjs} +32 -35
  161. package/dist/{piTerminal-9J0GAKzb.cjs → piTerminal-CagmEoez.cjs} +32 -35
  162. package/dist/previewPath-B0rBdhy1.cjs +83 -0
  163. package/dist/previewPath-CXN4Vag0.mjs +81 -0
  164. package/dist/projectPath-BTBIMB57.mjs +10 -0
  165. package/dist/projectPath-ChLhdOyt.cjs +13 -0
  166. package/dist/registerCommonHandlers-BjSV2Skz.cjs +538 -0
  167. package/dist/registerCommonHandlers-CrgvJsOy.mjs +536 -0
  168. package/dist/registerKillSessionHandler-6TC2S3lf.cjs +366 -0
  169. package/dist/registerKillSessionHandler-Cbc8Rgtd.mjs +363 -0
  170. package/dist/remoteSessionClient-BNx78NLb.cjs +634 -0
  171. package/dist/remoteSessionClient-CO7qOjR0.mjs +612 -0
  172. package/dist/resources-BdFBQi8r.mjs +117 -0
  173. package/dist/resources-JDPugcDq.cjs +120 -0
  174. package/dist/run-2l5vSt2h.mjs +5743 -0
  175. package/dist/run-D5xAEWSB.cjs +5766 -0
  176. package/dist/runClaude-BX6ixjtW.cjs +894 -0
  177. package/dist/runClaude-BgN6xo05.mjs +892 -0
  178. package/dist/runClaudeDeps-Bp20MScE.cjs +4168 -0
  179. package/dist/runClaudeDeps-COBBhD9o.mjs +4129 -0
  180. package/dist/{runGemini-F-mqx3_K.cjs → runGemini-CSMPkt0p.cjs} +202 -175
  181. package/dist/{runGemini-DV6Ouadt.mjs → runGemini-Cc2jq-uh.mjs} +58 -31
  182. package/dist/{runOpenClaw-D7MlPS5n.mjs → runOpenClaw-CIlCwdW2.mjs} +31 -32
  183. package/dist/{runOpenClaw-Qqo9j63M.cjs → runOpenClaw-YBwua4Rf.cjs} +64 -65
  184. package/dist/sandbox-C4gXLP1p.cjs +187 -0
  185. package/dist/sandbox-CNkwOtHI.mjs +180 -0
  186. package/dist/selfCheck-CU8xSDsl.cjs +87 -0
  187. package/dist/selfCheck-hJ6PCh7v.mjs +84 -0
  188. package/dist/{send-CLhYXNgy.mjs → send-CGHcKZ-w.mjs} +12 -5
  189. package/dist/{send-4qJTCAYW.cjs → send-DY9Nr-x4.cjs} +16 -9
  190. package/dist/server-II51Mimf.cjs +407 -0
  191. package/dist/server-m2b5pamZ.mjs +404 -0
  192. package/dist/sessionLock-7ePAYDOg.cjs +205 -0
  193. package/dist/sessionLock-Cw6FmbMv.mjs +197 -0
  194. package/dist/sessionModeFile-BVCV5f7E.cjs +36 -0
  195. package/dist/sessionModeFile-CDmDyRkD.mjs +32 -0
  196. package/dist/sessionOps-C_f1wKOr.mjs +760 -0
  197. package/dist/sessionOps-DJdExmBy.cjs +783 -0
  198. package/dist/sessionScanner-CaAHLyNV.mjs +206 -0
  199. package/dist/sessionScanner-D1goKdd3.cjs +209 -0
  200. package/dist/{sessions-Bh1pyddi.cjs → sessions-DGs6ALNo.cjs} +37 -28
  201. package/dist/{sessions-CzIH2rGp.mjs → sessions-DnvmWUel.mjs} +17 -8
  202. package/dist/setupOfflineReconnection-CVViqZft.mjs +72 -0
  203. package/dist/setupOfflineReconnection-R7XuR_sj.cjs +74 -0
  204. package/dist/smallFastModel-BLNgMrwR.mjs +18 -0
  205. package/dist/smallFastModel-D_uxGMo3.cjs +21 -0
  206. package/dist/{spawn-CmFOSVdW.cjs → spawn-CXTH7qg1.cjs} +61 -65
  207. package/dist/{spawn-CPIWlPOM.mjs → spawn-DNYSvFtC.mjs} +35 -40
  208. package/dist/spawnAgents-BGQiEF-w.cjs +52 -0
  209. package/dist/spawnAgents-DZzZ9jMI.mjs +45 -0
  210. package/dist/spawnHappyCLI-BhYj84rv.cjs +66 -0
  211. package/dist/spawnHappyCLI-cqWQbwsb.mjs +64 -0
  212. package/dist/specialCommands-BSqhYg5X.mjs +52 -0
  213. package/dist/specialCommands-DSsTeRej.cjs +54 -0
  214. package/dist/startFileWatcher-CKKx-8ZO.cjs +71 -0
  215. package/dist/startFileWatcher-CdegMbJj.mjs +69 -0
  216. package/dist/startupPlan-BLMbfQIH.cjs +12 -0
  217. package/dist/startupPlan-DFMyNgAs.mjs +10 -0
  218. package/dist/streamRelay-BiKw59Cc.cjs +233 -0
  219. package/dist/streamRelay-FPVbHpbM.mjs +231 -0
  220. package/dist/sync-CVk4QERO.cjs +71 -0
  221. package/dist/sync-CxD-w_40.mjs +69 -0
  222. package/dist/systemPrompt-BygJcmbi.cjs +97 -0
  223. package/dist/systemPrompt-DmtypUc7.mjs +94 -0
  224. package/dist/{teams-CEahj4cm.mjs → teams-BOC6nIPL.mjs} +9 -40
  225. package/dist/{teams-CB1R9-Z9.cjs → teams-BsvpOBfn.cjs} +14 -45
  226. package/dist/template-BaHAmH2K.cjs +129 -0
  227. package/dist/template-CiOPa2rd.mjs +121 -0
  228. package/dist/{terminalTitleSuggest-DKgX3osW.mjs → terminalTitleSuggest-CeKsX_V6.mjs} +1 -9
  229. package/dist/{terminalTitleSuggest-Dji8I0Jy.cjs → terminalTitleSuggest-DhvRFX3H.cjs} +0 -10
  230. package/dist/terminals-B_bfC9c2.cjs +250 -0
  231. package/dist/terminals-Dlg0x3nY.mjs +235 -0
  232. package/dist/time-BZNdNiIV.mjs +38 -0
  233. package/dist/time-CNRE4ChD.cjs +42 -0
  234. package/dist/titleGenerator-CFRhU-xq.cjs +172 -0
  235. package/dist/titleGenerator-ox6ptCsp.mjs +166 -0
  236. package/dist/tmuxSocket-B8Yx20sT.mjs +19 -0
  237. package/dist/tmuxSocket-D-Xt6Vn-.cjs +24 -0
  238. package/dist/{todo-DqyRI4wP.cjs → todo-B-KB7oAB.cjs} +15 -12
  239. package/dist/{todo-Cknp5D4U.mjs → todo-C5KBVbUw.mjs} +11 -8
  240. package/dist/tools-BZabNIid.mjs +177 -0
  241. package/dist/tools-BmQQUATY.mjs +60 -0
  242. package/dist/tools-CsSovyNp.cjs +180 -0
  243. package/dist/tools-lMDra4Pv.cjs +63 -0
  244. package/dist/trimIdent-4gvk9Wk6.cjs +22 -0
  245. package/dist/trimIdent-BAjmv_TG.mjs +20 -0
  246. package/dist/types-CRS-srZK.cjs +66 -0
  247. package/dist/types-CkqAACXx.mjs +64 -0
  248. package/dist/uninstall-B1WLtC1d.mjs +47 -0
  249. package/dist/uninstall-fvA5aWpU.cjs +49 -0
  250. package/package.json +7 -7
  251. package/scripts/session_hook_forwarder.cjs +9 -2
  252. package/dist/agentGuidance-BRDN1NoZ.cjs +0 -2217
  253. package/dist/agentGuidance-KgvYuF3R.mjs +0 -2145
  254. package/dist/index-BF6WfgV5.mjs +0 -19624
  255. package/dist/index-C-JazrMB.mjs +0 -52
  256. package/dist/index-blDSadUR.cjs +0 -58
  257. package/dist/index-rH3DrQ5B.cjs +0 -19688
  258. package/dist/limits-BH5CV5vR.cjs +0 -2683
  259. package/dist/limits-CjRj8IX5.mjs +0 -2558
@@ -4,51 +4,78 @@ var ink = require('ink');
4
4
  var React = require('react');
5
5
  var node_crypto = require('node:crypto');
6
6
  var path = require('node:path');
7
- var index$1 = require('./types-BbvK1Tr_.cjs');
8
- var persistence = require('./limits-BH5CV5vR.cjs');
9
- var index = require('./index-rH3DrQ5B.cjs');
10
- var terminalTitleSuggest = require('./terminalTitleSuggest-Dji8I0Jy.cjs');
11
- var AcpBackend = require('./AcpBackend-DUYFlyfN.cjs');
12
- var config = require('./config-DLx-vW3I.cjs');
7
+ var api = require('./api-B2vLMS-z.cjs');
8
+ var logger = require('./logger-Bc8-u1w0.cjs');
9
+ var persistence = require('./persistence-CBNMzSa8.cjs');
10
+ var createSessionMetadata = require('./createSessionMetadata-BRLB9CNO.cjs');
11
+ var contentLogMetadata = require('./contentLogMetadata-ZSFk_NjQ.cjs');
12
+ var machineMetadata = require('./machineMetadata-BibDMFVx.cjs');
13
+ var registerKillSessionHandler = require('./registerKillSessionHandler-6TC2S3lf.cjs');
14
+ var deterministicJson = require('./deterministicJson-DKDP_mM-.cjs');
15
+ var projectPath = require('./projectPath-ChLhdOyt.cjs');
16
+ var messageBuffer = require('./messageBuffer-fJMH6uY8.cjs');
17
+ var controlClient = require('./controlClient-fEHE85bH.cjs');
18
+ var authRelay = require('./authRelay-BdYkC1Po.cjs');
19
+ var setupOfflineReconnection = require('./setupOfflineReconnection-R7XuR_sj.cjs');
20
+ var AcpBackend = require('./AcpBackend-Ba98QDif.cjs');
21
+ var constants = require('./constants-VJ0N6WuG.cjs');
22
+ var config = require('./config-CYpL1Ahd.cjs');
23
+ var BasePermissionHandler = require('./BasePermissionHandler-2R0uH2CI.cjs');
24
+ var BaseReasoningProcessor = require('./BaseReasoningProcessor-fsVNmCEF.cjs');
13
25
  require('axios');
14
26
  require('node:events');
15
27
  require('socket.io-client');
28
+ require('./attachmentLimits-CzVrqgLR.cjs');
16
29
  require('zod');
30
+ require('./index-DA7yINuk.cjs');
31
+ require('@paralleldrive/cuid2');
32
+ require('./limits-C-a7gr04.cjs');
33
+ require('./time-CNRE4ChD.cjs');
34
+ require('./lidState-KHHu1015.cjs');
35
+ require('os');
17
36
  require('child_process');
37
+ require('./configuration-v9f8LM9T.cjs');
38
+ require('node:fs');
39
+ require('node:os');
40
+ require('./package-Cl5BEP5x.cjs');
41
+ require('node:fs/promises');
42
+ require('./registerCommonHandlers-BjSV2Skz.cjs');
18
43
  require('util');
19
44
  require('fs/promises');
20
45
  require('crypto');
21
46
  require('path');
22
47
  require('cross-spawn');
23
- require('os');
24
- require('@paralleldrive/cuid2');
25
- require('node:fs/promises');
26
- require('node:os');
27
- require('node:child_process');
28
- require('node-pty');
29
- require('node:fs');
30
- require('fs');
31
- require('tweetnacl');
32
- require('node:readline');
33
- require('@anthropic-ai/sandbox-runtime');
34
- require('expo-server-sdk');
48
+ require('./sync-CVk4QERO.cjs');
49
+ require('./backgroundTaskActivity-CBvUdj39.cjs');
35
50
  require('chalk');
36
51
  require('node:util');
37
- require('./agentGuidance-BRDN1NoZ.cjs');
38
- require('@anthropic-ai/claude-agent-sdk');
39
- require('ps-list');
40
- require('tmp');
41
- require('open');
42
- require('fastify');
43
- require('fastify-type-provider-zod');
44
- require('node:module');
52
+ require('tweetnacl');
53
+ require('./detectCLI-DR9ZaN6B.cjs');
54
+ require('fs');
55
+ require('./localHappyAgentAuth-BXiHPXdC.cjs');
56
+ require('./types-CRS-srZK.cjs');
57
+ require('./client-C_axwRry.cjs');
58
+ require('./context-B45vMtSZ.cjs');
59
+ require('./sessionOps-DJdExmBy.cjs');
60
+ require('./resources-JDPugcDq.cjs');
61
+ require('./tools-lMDra4Pv.cjs');
62
+ require('./tools-CsSovyNp.cjs');
63
+ require('./client-DOBWJL3u.cjs');
64
+ require('./peerTools-CIeiy9wn.cjs');
65
+ require('./ids-B6ZC0HGt.cjs');
66
+ require('./remoteSessionClient-BNx78NLb.cjs');
45
67
  require('@modelcontextprotocol/sdk/server/mcp.js');
46
68
  require('node:http');
47
69
  require('@modelcontextprotocol/sdk/server/streamableHttp.js');
48
- require('http');
49
- require('inquirer');
50
- require('node:url');
51
- require('node:readline/promises');
70
+ require('./assistantTools-BfA0R3_m.cjs');
71
+ require('./terminals-B_bfC9c2.cjs');
72
+ require('node:child_process');
73
+ require('./terminalTitleSuggest-DhvRFX3H.cjs');
74
+ require('./tmuxSocket-D-Xt6Vn-.cjs');
75
+ require('./bootstrap-CkgIq8N3.cjs');
76
+ require('./agentGuidance-B5NATuFa.cjs');
77
+ require('./trimIdent-4gvk9Wk6.cjs');
78
+ require('./previewPath-B0rBdhy1.cjs');
52
79
  require('url');
53
80
  require('@agentclientprotocol/sdk');
54
81
 
@@ -252,7 +279,7 @@ class GeminiTransport {
252
279
  }
253
280
  if (toolName === "other" || toolName === "Unknown tool") {
254
281
  const inputKeys = input && typeof input === "object" ? Object.keys(input) : [];
255
- persistence.logger.debug(
282
+ logger.logger.debug(
256
283
  `[GeminiTransport] Unknown tool pattern - toolCallId: "${toolCallId}", toolName: "${toolName}", inputKeys: [${inputKeys.join(", ")}]. Consider adding a new pattern to GEMINI_TOOL_PATTERNS if this tool appears frequently.`
257
284
  );
258
285
  }
@@ -263,9 +290,9 @@ const geminiTransport = new GeminiTransport();
263
290
 
264
291
  function createGeminiBackend(options) {
265
292
  const localConfig = config.readGeminiLocalConfig();
266
- let apiKey = options.cloudToken || localConfig.token || process.env[index.GEMINI_API_KEY_ENV] || process.env[index.GOOGLE_API_KEY_ENV] || options.apiKey;
293
+ let apiKey = options.cloudToken || localConfig.token || process.env[constants.GEMINI_API_KEY_ENV] || process.env[constants.GOOGLE_API_KEY_ENV] || options.apiKey;
267
294
  if (!apiKey) {
268
- persistence.logger.warn(`[Gemini] No API key found. Run 'very-happy connect gemini' to authenticate via Google OAuth, or set ${index.GEMINI_API_KEY_ENV} environment variable.`);
295
+ logger.logger.warn(`[Gemini] No API key found. Run 'very-happy connect gemini' to authenticate via Google OAuth, or set ${constants.GEMINI_API_KEY_ENV} environment variable.`);
269
296
  }
270
297
  const geminiCommand = "gemini";
271
298
  const model = config.determineGeminiModel(options.model, localConfig);
@@ -276,9 +303,9 @@ function createGeminiBackend(options) {
276
303
  const currentEmail = options.currentUserEmail;
277
304
  if (!storedEmail || storedEmail === currentEmail) {
278
305
  googleCloudProject = localConfig.googleCloudProject;
279
- persistence.logger.debug(`[Gemini] Using Google Cloud Project: ${googleCloudProject}${storedEmail ? ` (for ${storedEmail})` : " (global)"}`);
306
+ logger.logger.debug(`[Gemini] Using Google Cloud Project: ${googleCloudProject}${storedEmail ? ` (for ${storedEmail})` : " (global)"}`);
280
307
  } else {
281
- persistence.logger.debug(`[Gemini] Skipping stored Google Cloud Project (stored for ${storedEmail}, current user is ${currentEmail || "unknown"})`);
308
+ logger.logger.debug(`[Gemini] Skipping stored Google Cloud Project (stored for ${storedEmail}, current user is ${currentEmail || "unknown"})`);
282
309
  }
283
310
  }
284
311
  const backendOptions = {
@@ -288,9 +315,9 @@ function createGeminiBackend(options) {
288
315
  args: geminiArgs,
289
316
  env: {
290
317
  ...options.env,
291
- ...apiKey ? { [index.GEMINI_API_KEY_ENV]: apiKey, [index.GOOGLE_API_KEY_ENV]: apiKey } : {},
318
+ ...apiKey ? { [constants.GEMINI_API_KEY_ENV]: apiKey, [constants.GOOGLE_API_KEY_ENV]: apiKey } : {},
292
319
  // Pass model via env var - gemini CLI reads GEMINI_MODEL automatically
293
- [index.GEMINI_MODEL_ENV]: model,
320
+ [constants.GEMINI_MODEL_ENV]: model,
294
321
  // Pass Google Cloud Project for Workspace accounts
295
322
  ...googleCloudProject ? {
296
323
  GOOGLE_CLOUD_PROJECT: googleCloudProject,
@@ -310,7 +337,7 @@ function createGeminiBackend(options) {
310
337
  }
311
338
  };
312
339
  const modelSource = config.getGeminiModelSource(options.model, localConfig);
313
- persistence.logger.debug("[Gemini] Creating ACP SDK backend with options:", {
340
+ logger.logger.debug("[Gemini] Creating ACP SDK backend with options:", {
314
341
  cwd: backendOptions.cwd,
315
342
  command: backendOptions.command,
316
343
  args: backendOptions.args,
@@ -469,7 +496,7 @@ const GeminiDisplay = ({ messageBuffer, logPath, currentModel, onExit }) => {
469
496
  ));
470
497
  };
471
498
 
472
- class GeminiPermissionHandler extends index.BasePermissionHandler {
499
+ class GeminiPermissionHandler extends BasePermissionHandler.BasePermissionHandler {
473
500
  currentPermissionMode = "default";
474
501
  constructor(session) {
475
502
  super(session);
@@ -489,7 +516,7 @@ class GeminiPermissionHandler extends index.BasePermissionHandler {
489
516
  */
490
517
  setPermissionMode(mode) {
491
518
  this.currentPermissionMode = mode;
492
- persistence.logger.debug(`${this.getLogPrefix()} Permission mode set to: ${mode}`);
519
+ logger.logger.debug(`${this.getLogPrefix()} Permission mode set to: ${mode}`);
493
520
  }
494
521
  /**
495
522
  * Check if a tool should be auto-approved based on permission mode
@@ -536,7 +563,7 @@ class GeminiPermissionHandler extends index.BasePermissionHandler {
536
563
  */
537
564
  async handleToolCall(toolCallId, toolName, input) {
538
565
  if (this.shouldAutoApprove(toolName, toolCallId, input)) {
539
- persistence.logger.debug(`${this.getLogPrefix()} Auto-approving tool ${toolName} (${toolCallId}) in ${this.currentPermissionMode} mode`);
566
+ logger.logger.debug(`${this.getLogPrefix()} Auto-approving tool ${toolName} (${toolCallId}) in ${this.currentPermissionMode} mode`);
540
567
  this.session.updateAgentState((currentState) => ({
541
568
  ...currentState,
542
569
  completedRequests: {
@@ -563,12 +590,12 @@ class GeminiPermissionHandler extends index.BasePermissionHandler {
563
590
  input
564
591
  });
565
592
  this.addPendingRequestToState(toolCallId, toolName, input);
566
- persistence.logger.debug(`${this.getLogPrefix()} Permission request sent for tool: ${toolName} (${toolCallId}) in ${this.currentPermissionMode} mode`);
593
+ logger.logger.debug(`${this.getLogPrefix()} Permission request sent for tool: ${toolName} (${toolCallId}) in ${this.currentPermissionMode} mode`);
567
594
  });
568
595
  }
569
596
  }
570
597
 
571
- class GeminiReasoningProcessor extends index.BaseReasoningProcessor {
598
+ class GeminiReasoningProcessor extends BaseReasoningProcessor.BaseReasoningProcessor {
572
599
  getToolName() {
573
600
  return "GeminiReasoning";
574
601
  }
@@ -603,7 +630,7 @@ class GeminiDiffProcessor {
603
630
  * Process an fs-edit event and check if it contains diff information
604
631
  */
605
632
  processFsEdit(path, description, diff) {
606
- persistence.logger.debug(`[GeminiDiffProcessor] Processing fs-edit for path: ${path}`);
633
+ logger.logger.debug(`[GeminiDiffProcessor] Processing fs-edit for path: ${path}`);
607
634
  if (diff) {
608
635
  this.processDiff(path, diff, description);
609
636
  } else {
@@ -619,7 +646,7 @@ class GeminiDiffProcessor {
619
646
  const diff = result.diff || result.unified_diff || result.patch;
620
647
  const path = result.path || result.file;
621
648
  if (diff && path) {
622
- persistence.logger.debug(`[GeminiDiffProcessor] Found diff in tool result: ${toolName} (${callId})`);
649
+ logger.logger.debug(`[GeminiDiffProcessor] Found diff in tool result: ${toolName} (${callId})`);
623
650
  this.processDiff(path, diff, result.description);
624
651
  } else if (result.changes && typeof result.changes === "object") {
625
652
  for (const [filePath, change] of Object.entries(result.changes)) {
@@ -635,7 +662,7 @@ class GeminiDiffProcessor {
635
662
  processDiff(path, unifiedDiff, description) {
636
663
  const previousDiff = this.previousDiffs.get(path);
637
664
  if (previousDiff !== unifiedDiff) {
638
- persistence.logger.debug(`[GeminiDiffProcessor] Unified diff changed for ${path}, sending GeminiDiff tool call`);
665
+ logger.logger.debug(`[GeminiDiffProcessor] Unified diff changed for ${path}, sending GeminiDiff tool call`);
639
666
  const callId = node_crypto.randomUUID();
640
667
  const toolCall = {
641
668
  type: "tool-call",
@@ -660,13 +687,13 @@ class GeminiDiffProcessor {
660
687
  this.onMessage?.(toolResult);
661
688
  }
662
689
  this.previousDiffs.set(path, unifiedDiff);
663
- persistence.logger.debug(`[GeminiDiffProcessor] Updated stored diff for ${path}`);
690
+ logger.logger.debug(`[GeminiDiffProcessor] Updated stored diff for ${path}`);
664
691
  }
665
692
  /**
666
693
  * Reset the processor state (called on task_complete or turn_aborted)
667
694
  */
668
695
  reset() {
669
- persistence.logger.debug("[GeminiDiffProcessor] Resetting diff state");
696
+ logger.logger.debug("[GeminiDiffProcessor] Resetting diff state");
670
697
  this.previousDiffs.clear();
671
698
  }
672
699
  /**
@@ -759,7 +786,7 @@ class ConversationHistory {
759
786
  if (!content.trim()) return;
760
787
  const trimmedContent = content.trim();
761
788
  if (this.isDuplicate("user", trimmedContent)) {
762
- persistence.logger.debug(`[ConversationHistory] Skipping duplicate user message (${trimmedContent.length} chars)`);
789
+ logger.logger.debug(`[ConversationHistory] Skipping duplicate user message (${trimmedContent.length} chars)`);
763
790
  return;
764
791
  }
765
792
  this.messages.push({
@@ -768,7 +795,7 @@ class ConversationHistory {
768
795
  timestamp: Date.now()
769
796
  });
770
797
  this.trimHistory();
771
- persistence.logger.debug(`[ConversationHistory] Added user message (${trimmedContent.length} chars), total: ${this.messages.length}`);
798
+ logger.logger.debug(`[ConversationHistory] Added user message (${trimmedContent.length} chars), total: ${this.messages.length}`);
772
799
  }
773
800
  /**
774
801
  * Add an assistant response to history
@@ -778,7 +805,7 @@ class ConversationHistory {
778
805
  if (!content.trim()) return;
779
806
  const trimmedContent = content.trim();
780
807
  if (this.isDuplicate("assistant", trimmedContent)) {
781
- persistence.logger.debug(`[ConversationHistory] Skipping duplicate assistant message (${trimmedContent.length} chars)`);
808
+ logger.logger.debug(`[ConversationHistory] Skipping duplicate assistant message (${trimmedContent.length} chars)`);
782
809
  return;
783
810
  }
784
811
  this.messages.push({
@@ -788,7 +815,7 @@ class ConversationHistory {
788
815
  model: this.currentModel
789
816
  });
790
817
  this.trimHistory();
791
- persistence.logger.debug(`[ConversationHistory] Added assistant message (${trimmedContent.length} chars), total: ${this.messages.length}`);
818
+ logger.logger.debug(`[ConversationHistory] Added assistant message (${trimmedContent.length} chars), total: ${this.messages.length}`);
792
819
  }
793
820
  /**
794
821
  * Get the number of messages in history
@@ -807,7 +834,7 @@ class ConversationHistory {
807
834
  */
808
835
  clear() {
809
836
  this.messages = [];
810
- persistence.logger.debug("[ConversationHistory] History cleared");
837
+ logger.logger.debug("[ConversationHistory] History cleared");
811
838
  }
812
839
  /**
813
840
  * Get formatted context for injecting into a new session.
@@ -861,8 +888,8 @@ ${formattedMessages}
861
888
 
862
889
  async function runGemini(opts) {
863
890
  const sessionTag = node_crypto.randomUUID();
864
- index$1.connectionState.setBackend("Gemini");
865
- const api = await index$1.ApiClient.create(opts.credentials);
891
+ api.connectionState.setBackend("Gemini");
892
+ const api$1 = await api.ApiClient.create(opts.credentials);
866
893
  const settings = await persistence.readSettings();
867
894
  const machineId = settings?.machineId;
868
895
  const sandboxConfig = settings?.sandboxConfig;
@@ -870,18 +897,18 @@ async function runGemini(opts) {
870
897
  console.error(`[START] No machine ID found in settings, which is unexpected since authAndSetupMachineIfNeeded should have created it. Please report this issue on https://github.com/Mereithhh/very-happy/issues`);
871
898
  process.exit(1);
872
899
  }
873
- persistence.logger.debug(`Using machineId: ${machineId}`);
874
- await api.getOrCreateMachine({
900
+ logger.logger.debug(`Using machineId: ${machineId}`);
901
+ await api$1.getOrCreateMachine({
875
902
  machineId,
876
- metadata: index.initialMachineMetadata
903
+ metadata: machineMetadata.getInitialMachineMetadata()
877
904
  });
878
905
  let cloudToken = void 0;
879
906
  let currentUserEmail = void 0;
880
907
  try {
881
- const vendorToken = await api.getVendorToken("gemini");
908
+ const vendorToken = await api$1.getVendorToken("gemini");
882
909
  if (vendorToken?.oauth?.access_token) {
883
910
  cloudToken = vendorToken.oauth.access_token;
884
- persistence.logger.debug("[Gemini] Using OAuth token from Happy cloud");
911
+ logger.logger.debug("[Gemini] Using OAuth token from Happy cloud");
885
912
  if (vendorToken.oauth.id_token) {
886
913
  try {
887
914
  const parts = vendorToken.oauth.id_token.split(".");
@@ -889,31 +916,31 @@ async function runGemini(opts) {
889
916
  const payload = JSON.parse(Buffer.from(parts[1], "base64url").toString("utf8"));
890
917
  if (payload.email) {
891
918
  currentUserEmail = payload.email;
892
- persistence.logger.debug("[Gemini] Cloud identity includes an email claim");
919
+ logger.logger.debug("[Gemini] Cloud identity includes an email claim");
893
920
  }
894
921
  }
895
922
  } catch {
896
- persistence.logger.debug("[Gemini] Failed to decode id_token for email");
923
+ logger.logger.debug("[Gemini] Failed to decode id_token for email");
897
924
  }
898
925
  }
899
926
  }
900
927
  } catch (error) {
901
- persistence.logger.debug("[Gemini] Failed to fetch cloud token:", index$1.errorLogMetadata(error));
928
+ logger.logger.debug("[Gemini] Failed to fetch cloud token:", contentLogMetadata.errorLogMetadata(error));
902
929
  }
903
- const { state, metadata } = index.createSessionMetadata({
930
+ const { state, metadata } = createSessionMetadata.createSessionMetadata({
904
931
  flavor: "gemini",
905
932
  machineId,
906
933
  startedBy: opts.startedBy,
907
934
  sandbox: sandboxConfig
908
935
  });
909
- const response = await api.getOrCreateSession({ tag: sessionTag, metadata, state });
936
+ const response = await api$1.getOrCreateSession({ tag: sessionTag, metadata, state });
910
937
  let session;
911
938
  let permissionHandler;
912
939
  let isProcessingMessage = false;
913
940
  let pendingSessionSwap = null;
914
941
  const applyPendingSessionSwap = () => {
915
942
  if (pendingSessionSwap) {
916
- persistence.logger.debug("[gemini] Applying pending session swap");
943
+ logger.logger.debug("[gemini] Applying pending session swap");
917
944
  session = pendingSessionSwap;
918
945
  if (permissionHandler) {
919
946
  permissionHandler.updateSession(pendingSessionSwap);
@@ -921,15 +948,15 @@ async function runGemini(opts) {
921
948
  pendingSessionSwap = null;
922
949
  }
923
950
  };
924
- const { session: initialSession, reconnectionHandle } = index.setupOfflineReconnection({
925
- api,
951
+ const { session: initialSession, reconnectionHandle } = setupOfflineReconnection.setupOfflineReconnection({
952
+ api: api$1,
926
953
  sessionTag,
927
954
  metadata,
928
955
  state,
929
956
  response,
930
957
  onSessionSwap: (newSession) => {
931
958
  if (isProcessingMessage) {
932
- persistence.logger.debug("[gemini] Session swap requested during message processing - queueing");
959
+ logger.logger.debug("[gemini] Session swap requested during message processing - queueing");
933
960
  pendingSessionSwap = newSession;
934
961
  } else {
935
962
  session = newSession;
@@ -942,24 +969,24 @@ async function runGemini(opts) {
942
969
  session = initialSession;
943
970
  if (response) {
944
971
  try {
945
- persistence.logger.debug(`[START] Reporting session ${response.id} to daemon`);
946
- const result = await persistence.notifyDaemonSessionStarted(response.id, metadata, {
947
- encryptionKey: persistence.encodeBase64(response.encryptionKey),
972
+ logger.logger.debug(`[START] Reporting session ${response.id} to daemon`);
973
+ const result = await controlClient.notifyDaemonSessionStarted(response.id, metadata, {
974
+ encryptionKey: authRelay.encodeBase64(response.encryptionKey),
948
975
  encryptionVariant: response.encryptionVariant,
949
976
  seq: response.seq,
950
977
  metadataVersion: response.metadataVersion,
951
978
  agentStateVersion: response.agentStateVersion
952
979
  });
953
980
  if (result.error) {
954
- persistence.logger.debug(`[START] Failed to report to daemon (may not be running):`, result.error);
981
+ logger.logger.debug(`[START] Failed to report to daemon (may not be running):`, result.error);
955
982
  } else {
956
- persistence.logger.debug(`[START] Reported session ${response.id} to daemon`);
983
+ logger.logger.debug(`[START] Reported session ${response.id} to daemon`);
957
984
  }
958
985
  } catch (error) {
959
- persistence.logger.debug("[START] Failed to report to daemon (may not be running):", error);
986
+ logger.logger.debug("[START] Failed to report to daemon (may not be running):", error);
960
987
  }
961
988
  }
962
- const messageQueue = new index.MessageQueue2((mode) => index.hashObject({
989
+ const messageQueue = new registerKillSessionHandler.MessageQueue2((mode) => deterministicJson.hashObject({
963
990
  permissionMode: mode.permissionMode,
964
991
  model: mode.model
965
992
  }));
@@ -978,12 +1005,12 @@ async function runGemini(opts) {
978
1005
  messagePermissionMode = message.meta.permissionMode;
979
1006
  currentPermissionMode = messagePermissionMode;
980
1007
  updatePermissionMode(messagePermissionMode);
981
- persistence.logger.debug(`[Gemini] Permission mode updated from user message to: ${currentPermissionMode}`);
1008
+ logger.logger.debug(`[Gemini] Permission mode updated from user message to: ${currentPermissionMode}`);
982
1009
  } else {
983
- persistence.logger.debug(`[Gemini] Invalid permission mode received: ${message.meta.permissionMode}`);
1010
+ logger.logger.debug(`[Gemini] Invalid permission mode received: ${message.meta.permissionMode}`);
984
1011
  }
985
1012
  } else {
986
- persistence.logger.debug(`[Gemini] User message received with no permission mode override, using current: ${currentPermissionMode ?? "default (effective)"}`);
1013
+ logger.logger.debug(`[Gemini] User message received with no permission mode override, using current: ${currentPermissionMode ?? "default (effective)"}`);
987
1014
  }
988
1015
  if (currentPermissionMode === void 0) {
989
1016
  currentPermissionMode = "default";
@@ -1000,15 +1027,15 @@ async function runGemini(opts) {
1000
1027
  currentModel = messageModel;
1001
1028
  if (previousModel !== messageModel) {
1002
1029
  updateDisplayedModel(messageModel, true);
1003
- messageBuffer.addMessage(`Model changed to: ${messageModel}`, "system");
1004
- persistence.logger.debug(`[Gemini] Model changed from ${previousModel} to ${messageModel}`);
1030
+ messageBuffer$1.addMessage(`Model changed to: ${messageModel}`, "system");
1031
+ logger.logger.debug(`[Gemini] Model changed from ${previousModel} to ${messageModel}`);
1005
1032
  }
1006
1033
  }
1007
1034
  }
1008
1035
  const originalUserMessage = message.content.text;
1009
1036
  let fullPrompt = originalUserMessage;
1010
1037
  if (isFirstMessage && message.meta?.appendSystemPrompt) {
1011
- fullPrompt = message.meta.appendSystemPrompt + "\n\n" + originalUserMessage + "\n\n" + index.CHANGE_TITLE_INSTRUCTION;
1038
+ fullPrompt = message.meta.appendSystemPrompt + "\n\n" + originalUserMessage + "\n\n" + constants.CHANGE_TITLE_INSTRUCTION;
1012
1039
  isFirstMessage = false;
1013
1040
  }
1014
1041
  const mode = {
@@ -1029,7 +1056,7 @@ async function runGemini(opts) {
1029
1056
  const sendReady = () => {
1030
1057
  session.sendSessionEvent({ type: "ready" });
1031
1058
  try {
1032
- api.push().sendSessionNotification({
1059
+ api$1.push().sendSessionNotification({
1033
1060
  kind: "done",
1034
1061
  metadata: session.getMetadata(),
1035
1062
  data: {
@@ -1039,7 +1066,7 @@ async function runGemini(opts) {
1039
1066
  }
1040
1067
  });
1041
1068
  } catch (pushError) {
1042
- persistence.logger.debug("[Gemini] Failed to send ready push", pushError);
1069
+ logger.logger.debug("[Gemini] Failed to send ready push", pushError);
1043
1070
  }
1044
1071
  };
1045
1072
  const emitReadyIfIdle = () => {
@@ -1064,7 +1091,7 @@ async function runGemini(opts) {
1064
1091
  let acpSessionId = null;
1065
1092
  let wasSessionCreated = false;
1066
1093
  async function handleAbort() {
1067
- persistence.logger.debug("[Gemini] Abort requested - stopping current task");
1094
+ logger.logger.debug("[Gemini] Abort requested - stopping current task");
1068
1095
  session.sendAgentMessage("gemini", {
1069
1096
  type: "turn_aborted",
1070
1097
  id: node_crypto.randomUUID()
@@ -1077,17 +1104,17 @@ async function runGemini(opts) {
1077
1104
  if (geminiBackend && acpSessionId) {
1078
1105
  await geminiBackend.cancel(acpSessionId);
1079
1106
  }
1080
- persistence.logger.debug("[Gemini] Abort completed - session remains active");
1107
+ logger.logger.debug("[Gemini] Abort completed - session remains active");
1081
1108
  } catch (error) {
1082
- persistence.logger.debug("[Gemini] Error during abort:", error);
1109
+ logger.logger.debug("[Gemini] Error during abort:", error);
1083
1110
  } finally {
1084
1111
  abortController = new AbortController();
1085
1112
  }
1086
1113
  }
1087
1114
  const handleKillSession = async () => {
1088
- persistence.logger.debug("[Gemini] Kill session requested - terminating process");
1115
+ logger.logger.debug("[Gemini] Kill session requested - terminating process");
1089
1116
  await handleAbort();
1090
- persistence.logger.debug("[Gemini] Abort completed, proceeding with termination");
1117
+ logger.logger.debug("[Gemini] Abort completed, proceeding with termination");
1091
1118
  try {
1092
1119
  if (session) {
1093
1120
  session.updateMetadata((currentMetadata) => ({
@@ -1105,37 +1132,37 @@ async function runGemini(opts) {
1105
1132
  if (geminiBackend) {
1106
1133
  await geminiBackend.dispose();
1107
1134
  }
1108
- persistence.logger.debug("[Gemini] Session termination complete, exiting");
1135
+ logger.logger.debug("[Gemini] Session termination complete, exiting");
1109
1136
  process.exit(0);
1110
1137
  } catch (error) {
1111
- persistence.logger.debug("[Gemini] Error during session termination:", error);
1138
+ logger.logger.debug("[Gemini] Error during session termination:", error);
1112
1139
  process.exit(1);
1113
1140
  }
1114
1141
  };
1115
1142
  session.rpcHandlerManager.registerHandler("abort", handleAbort);
1116
- index.registerKillSessionHandler(session.rpcHandlerManager, handleKillSession, session);
1117
- const messageBuffer = new index.MessageBuffer();
1143
+ registerKillSessionHandler.registerKillSessionHandler(session.rpcHandlerManager, handleKillSession, session);
1144
+ const messageBuffer$1 = new messageBuffer.MessageBuffer();
1118
1145
  const hasTTY = process.stdout.isTTY && process.stdin.isTTY;
1119
1146
  let inkInstance = null;
1120
1147
  let displayedModel = config.getInitialGeminiModel();
1121
1148
  const localConfig = config.readGeminiLocalConfig();
1122
- persistence.logger.debug(`[gemini] Initial model setup: env[GEMINI_MODEL_ENV]=${process.env[index.GEMINI_MODEL_ENV] || "not set"}, localConfig=${localConfig.model || "not set"}, displayedModel=${displayedModel}`);
1149
+ logger.logger.debug(`[gemini] Initial model setup: env[GEMINI_MODEL_ENV]=${process.env[constants.GEMINI_MODEL_ENV] || "not set"}, localConfig=${localConfig.model || "not set"}, displayedModel=${displayedModel}`);
1123
1150
  const updateDisplayedModel = (model, saveToConfig = false) => {
1124
1151
  if (model === void 0) {
1125
- persistence.logger.debug(`[gemini] updateDisplayedModel called with undefined, skipping update`);
1152
+ logger.logger.debug(`[gemini] updateDisplayedModel called with undefined, skipping update`);
1126
1153
  return;
1127
1154
  }
1128
1155
  const oldModel = displayedModel;
1129
1156
  displayedModel = model;
1130
- persistence.logger.debug(`[gemini] updateDisplayedModel called: oldModel=${oldModel}, newModel=${model}, saveToConfig=${saveToConfig}`);
1157
+ logger.logger.debug(`[gemini] updateDisplayedModel called: oldModel=${oldModel}, newModel=${model}, saveToConfig=${saveToConfig}`);
1131
1158
  if (saveToConfig) {
1132
1159
  config.saveGeminiModelToConfig(model);
1133
1160
  }
1134
1161
  if (hasTTY && oldModel !== model) {
1135
- persistence.logger.debug(`[gemini] Adding model update message to buffer: [MODEL:${model}]`);
1136
- messageBuffer.addMessage(`[MODEL:${model}]`, "system");
1162
+ logger.logger.debug(`[gemini] Adding model update message to buffer: [MODEL:${model}]`);
1163
+ messageBuffer$1.addMessage(`[MODEL:${model}]`, "system");
1137
1164
  } else if (hasTTY) {
1138
- persistence.logger.debug(`[gemini] Model unchanged, skipping update message`);
1165
+ logger.logger.debug(`[gemini] Model unchanged, skipping update message`);
1139
1166
  }
1140
1167
  };
1141
1168
  if (hasTTY) {
@@ -1143,11 +1170,11 @@ async function runGemini(opts) {
1143
1170
  const DisplayComponent = () => {
1144
1171
  const currentModelValue = displayedModel || "gemini-2.5-pro";
1145
1172
  return React.createElement(GeminiDisplay, {
1146
- messageBuffer,
1147
- logPath: process.env.DEBUG ? persistence.logger.getLogPath() : void 0,
1173
+ messageBuffer: messageBuffer$1,
1174
+ logPath: process.env.DEBUG ? logger.logger.getLogPath() : void 0,
1148
1175
  currentModel: currentModelValue,
1149
1176
  onExit: async () => {
1150
- persistence.logger.debug("[gemini]: Exiting agent via Ctrl-C");
1177
+ logger.logger.debug("[gemini]: Exiting agent via Ctrl-C");
1151
1178
  shouldExit = true;
1152
1179
  await handleAbort();
1153
1180
  }
@@ -1158,8 +1185,8 @@ async function runGemini(opts) {
1158
1185
  patchConsole: false
1159
1186
  });
1160
1187
  const initialModelName = displayedModel || "gemini-2.5-pro";
1161
- persistence.logger.debug(`[gemini] Sending initial model to UI: ${initialModelName}`);
1162
- messageBuffer.addMessage(`[MODEL:${initialModelName}]`, "system");
1188
+ logger.logger.debug(`[gemini] Sending initial model to UI: ${initialModelName}`);
1189
+ messageBuffer$1.addMessage(`[MODEL:${initialModelName}]`, "system");
1163
1190
  }
1164
1191
  if (hasTTY) {
1165
1192
  process.stdin.resume();
@@ -1168,8 +1195,8 @@ async function runGemini(opts) {
1168
1195
  }
1169
1196
  process.stdin.setEncoding("utf8");
1170
1197
  }
1171
- const happyServer = await index.startHappyServer(session);
1172
- const bridgeCommand = path.join(terminalTitleSuggest.projectPath(), "bin", "very-happy-mcp.mjs");
1198
+ const happyServer = await deterministicJson.startHappyServer(session);
1199
+ const bridgeCommand = path.join(projectPath.projectPath(), "bin", "very-happy-mcp.mjs");
1173
1200
  const mcpServers = {
1174
1201
  happy: {
1175
1202
  command: bridgeCommand,
@@ -1198,24 +1225,24 @@ async function runGemini(opts) {
1198
1225
  case "model-output":
1199
1226
  if (msg.textDelta) {
1200
1227
  if (!isResponseInProgress) {
1201
- messageBuffer.removeLastMessage("system");
1202
- messageBuffer.addMessage(msg.textDelta, "assistant");
1228
+ messageBuffer$1.removeLastMessage("system");
1229
+ messageBuffer$1.addMessage(msg.textDelta, "assistant");
1203
1230
  isResponseInProgress = true;
1204
- persistence.logger.debug(`[gemini] Started new response, first chunk length: ${msg.textDelta.length}`);
1231
+ logger.logger.debug(`[gemini] Started new response, first chunk length: ${msg.textDelta.length}`);
1205
1232
  } else {
1206
- messageBuffer.updateLastMessage(msg.textDelta, "assistant");
1207
- persistence.logger.debug(`[gemini] Updated response, chunk length: ${msg.textDelta.length}, total accumulated: ${accumulatedResponse.length + msg.textDelta.length}`);
1233
+ messageBuffer$1.updateLastMessage(msg.textDelta, "assistant");
1234
+ logger.logger.debug(`[gemini] Updated response, chunk length: ${msg.textDelta.length}, total accumulated: ${accumulatedResponse.length + msg.textDelta.length}`);
1208
1235
  }
1209
1236
  accumulatedResponse += msg.textDelta;
1210
1237
  }
1211
1238
  break;
1212
1239
  case "status":
1213
1240
  const statusDetail = msg.detail ? typeof msg.detail === "object" ? JSON.stringify(msg.detail) : String(msg.detail) : "";
1214
- persistence.logger.debug(`[gemini] Status changed: ${msg.status}`, {
1215
- detail: index$1.contentLogMetadata(statusDetail)
1241
+ logger.logger.debug(`[gemini] Status changed: ${msg.status}`, {
1242
+ detail: contentLogMetadata.contentLogMetadata(statusDetail)
1216
1243
  });
1217
1244
  if (msg.status === "error") {
1218
- persistence.logger.debug("[gemini] Error status received:", index$1.contentLogMetadata(statusDetail));
1245
+ logger.logger.debug("[gemini] Error status received:", contentLogMetadata.contentLogMetadata(statusDetail));
1219
1246
  session.sendAgentMessage("gemini", {
1220
1247
  type: "turn_aborted",
1221
1248
  id: node_crypto.randomUUID()
@@ -1231,7 +1258,7 @@ async function runGemini(opts) {
1231
1258
  });
1232
1259
  taskStartedSent = true;
1233
1260
  }
1234
- messageBuffer.addMessage("Thinking...", "system");
1261
+ messageBuffer$1.addMessage("Thinking...", "system");
1235
1262
  } else if (msg.status === "idle" || msg.status === "stopped") {
1236
1263
  reasoningProcessor.complete();
1237
1264
  } else if (msg.status === "error") {
@@ -1254,7 +1281,7 @@ For Google Workspace accounts, run: very-happy gemini project set <project-id>
1254
1281
  Or use a different Google account: very-happy connect gemini
1255
1282
  Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1256
1283
  }
1257
- messageBuffer.addMessage(`Error: ${errorMessage}`, "status");
1284
+ messageBuffer$1.addMessage(`Error: ${errorMessage}`, "status");
1258
1285
  session.sendAgentMessage("gemini", {
1259
1286
  type: "message",
1260
1287
  message: `Error: ${errorMessage}`
@@ -1265,11 +1292,11 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1265
1292
  hadToolCallInTurn = true;
1266
1293
  const toolArgs = msg.args ? JSON.stringify(msg.args).substring(0, 100) : "";
1267
1294
  const isInvestigationTool = msg.toolName === "codebase_investigator" || typeof msg.toolName === "string" && msg.toolName.includes("investigator");
1268
- persistence.logger.debug(`[gemini] \u{1F527} Tool call received: ${msg.toolName} (${msg.callId})${isInvestigationTool ? " [INVESTIGATION]" : ""}`);
1295
+ logger.logger.debug(`[gemini] \u{1F527} Tool call received: ${msg.toolName} (${msg.callId})${isInvestigationTool ? " [INVESTIGATION]" : ""}`);
1269
1296
  if (isInvestigationTool && msg.args && typeof msg.args === "object" && "objective" in msg.args) {
1270
- persistence.logger.debug("[gemini] Investigation objective received:", index$1.contentLogMetadata(msg.args.objective));
1297
+ logger.logger.debug("[gemini] Investigation objective received:", contentLogMetadata.contentLogMetadata(msg.args.objective));
1271
1298
  }
1272
- messageBuffer.addMessage(`Executing: ${msg.toolName}${toolArgs ? ` ${toolArgs}${toolArgs.length >= 100 ? "..." : ""}` : ""}`, "tool");
1299
+ messageBuffer$1.addMessage(`Executing: ${msg.toolName}${toolArgs ? ` ${toolArgs}${toolArgs.length >= 100 ? "..." : ""}` : ""}`, "tool");
1273
1300
  session.sendAgentMessage("gemini", {
1274
1301
  type: "tool-call",
1275
1302
  name: msg.toolName,
@@ -1281,25 +1308,25 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1281
1308
  case "tool-result":
1282
1309
  if (msg.toolName === "change_title" || msg.callId?.includes("change_title") || msg.toolName === "happy__change_title") {
1283
1310
  changeTitleCompleted = true;
1284
- persistence.logger.debug("[gemini] change_title completed");
1311
+ logger.logger.debug("[gemini] change_title completed");
1285
1312
  }
1286
1313
  const isError = msg.result && typeof msg.result === "object" && "error" in msg.result;
1287
1314
  const resultText = typeof msg.result === "string" ? msg.result.substring(0, 200) : JSON.stringify(msg.result).substring(0, 200);
1288
1315
  const truncatedResult = resultText + (typeof msg.result === "string" && msg.result.length > 200 ? "..." : "");
1289
1316
  const resultSize = typeof msg.result === "string" ? msg.result.length : JSON.stringify(msg.result).length;
1290
- persistence.logger.debug(`[gemini] ${isError ? "\u274C" : "\u2705"} Tool result received: ${msg.toolName} (${msg.callId}) - Size: ${resultSize} bytes${isError ? " [ERROR]" : ""}`);
1317
+ logger.logger.debug(`[gemini] ${isError ? "\u274C" : "\u2705"} Tool result received: ${msg.toolName} (${msg.callId}) - Size: ${resultSize} bytes${isError ? " [ERROR]" : ""}`);
1291
1318
  if (!isError) {
1292
1319
  diffProcessor.processToolResult(msg.toolName, msg.result, msg.callId);
1293
1320
  }
1294
1321
  if (isError) {
1295
1322
  const errorMsg = msg.result.error || "Tool call failed";
1296
- persistence.logger.debug("[gemini] Tool call error received:", index$1.contentLogMetadata(errorMsg));
1297
- messageBuffer.addMessage(`Error: ${errorMsg}`, "status");
1323
+ logger.logger.debug("[gemini] Tool call error received:", contentLogMetadata.contentLogMetadata(errorMsg));
1324
+ messageBuffer$1.addMessage(`Error: ${errorMsg}`, "status");
1298
1325
  } else {
1299
1326
  if (resultSize > 1e3) {
1300
- persistence.logger.debug(`[gemini] Large tool result received (${resultSize} bytes)`);
1327
+ logger.logger.debug(`[gemini] Large tool result received (${resultSize} bytes)`);
1301
1328
  }
1302
- messageBuffer.addMessage(`Result: ${truncatedResult}`, "result");
1329
+ messageBuffer$1.addMessage(`Result: ${truncatedResult}`, "result");
1303
1330
  }
1304
1331
  session.sendAgentMessage("gemini", {
1305
1332
  type: "tool-result",
@@ -1309,7 +1336,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1309
1336
  });
1310
1337
  break;
1311
1338
  case "fs-edit":
1312
- messageBuffer.addMessage(`File edit: ${msg.description}`, "tool");
1339
+ messageBuffer$1.addMessage(`File edit: ${msg.description}`, "tool");
1313
1340
  diffProcessor.processFsEdit(msg.path || "", msg.description, msg.diff);
1314
1341
  session.sendAgentMessage("gemini", {
1315
1342
  type: "file-edit",
@@ -1330,7 +1357,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1330
1357
  }
1331
1358
  break;
1332
1359
  case "terminal-output":
1333
- messageBuffer.addMessage(msg.data, "result");
1360
+ messageBuffer$1.addMessage(msg.data, "result");
1334
1361
  session.sendAgentMessage("gemini", {
1335
1362
  type: "terminal-output",
1336
1363
  data: msg.data,
@@ -1351,8 +1378,8 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1351
1378
  const execApprovalMsg = msg;
1352
1379
  const callId = execApprovalMsg.call_id || execApprovalMsg.callId || node_crypto.randomUUID();
1353
1380
  const { call_id, type, ...inputs } = execApprovalMsg;
1354
- persistence.logger.debug(`[gemini] Exec approval request received: ${callId}`);
1355
- messageBuffer.addMessage(`Exec approval requested: ${callId}`, "tool");
1381
+ logger.logger.debug(`[gemini] Exec approval request received: ${callId}`);
1382
+ messageBuffer$1.addMessage(`Exec approval requested: ${callId}`, "tool");
1356
1383
  session.sendAgentMessage("gemini", {
1357
1384
  type: "tool-call",
1358
1385
  name: "GeminiBash",
@@ -1368,8 +1395,8 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1368
1395
  const { call_id: patchCallIdVar, type: patchType, auto_approved, changes } = patchBeginMsg;
1369
1396
  const changeCount = changes ? Object.keys(changes).length : 0;
1370
1397
  const filesMsg = changeCount === 1 ? "1 file" : `${changeCount} files`;
1371
- messageBuffer.addMessage(`Modifying ${filesMsg}...`, "tool");
1372
- persistence.logger.debug(`[gemini] Patch apply begin: ${patchCallId}, files: ${changeCount}`);
1398
+ messageBuffer$1.addMessage(`Modifying ${filesMsg}...`, "tool");
1399
+ logger.logger.debug(`[gemini] Patch apply begin: ${patchCallId}, files: ${changeCount}`);
1373
1400
  session.sendAgentMessage("gemini", {
1374
1401
  type: "tool-call",
1375
1402
  name: "GeminiPatch",
@@ -1388,12 +1415,12 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1388
1415
  const { call_id: patchEndCallIdVar, type: patchEndType, stdout, stderr, success } = patchEndMsg;
1389
1416
  if (success) {
1390
1417
  const message = stdout || "Files modified successfully";
1391
- messageBuffer.addMessage(message.substring(0, 200), "result");
1418
+ messageBuffer$1.addMessage(message.substring(0, 200), "result");
1392
1419
  } else {
1393
1420
  const errorMsg = stderr || "Failed to modify files";
1394
- messageBuffer.addMessage(`Error: ${errorMsg.substring(0, 200)}`, "result");
1421
+ messageBuffer$1.addMessage(`Error: ${errorMsg.substring(0, 200)}`, "result");
1395
1422
  }
1396
- persistence.logger.debug(`[gemini] Patch apply end: ${patchEndCallId}, success: ${success}`);
1423
+ logger.logger.debug(`[gemini] Patch apply end: ${patchEndCallId}, success: ${success}`);
1397
1424
  session.sendAgentMessage("gemini", {
1398
1425
  type: "tool-result",
1399
1426
  callId: patchEndCallId,
@@ -1411,10 +1438,10 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1411
1438
  const thinkingText = thinkingPayload && typeof thinkingPayload === "object" && "text" in thinkingPayload ? String(thinkingPayload.text || "") : "";
1412
1439
  if (thinkingText) {
1413
1440
  reasoningProcessor.processChunk(thinkingText);
1414
- persistence.logger.debug("[gemini] Thinking chunk received:", index$1.contentLogMetadata(thinkingText));
1441
+ logger.logger.debug("[gemini] Thinking chunk received:", contentLogMetadata.contentLogMetadata(thinkingText));
1415
1442
  if (!thinkingText.startsWith("**")) {
1416
1443
  const thinkingPreview = thinkingText.substring(0, 100);
1417
- messageBuffer.updateLastMessage(`[Thinking] ${thinkingPreview}...`, "system");
1444
+ messageBuffer$1.updateLastMessage(`[Thinking] ${thinkingPreview}...`, "system");
1418
1445
  }
1419
1446
  }
1420
1447
  session.sendAgentMessage("gemini", {
@@ -1434,18 +1461,18 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1434
1461
  let message = pending;
1435
1462
  pending = null;
1436
1463
  if (!message) {
1437
- persistence.logger.debug("[gemini] Main loop: waiting for messages from queue...");
1464
+ logger.logger.debug("[gemini] Main loop: waiting for messages from queue...");
1438
1465
  const waitSignal = abortController.signal;
1439
1466
  const batch = await messageQueue.waitForMessagesAndGetAsString(waitSignal);
1440
1467
  if (!batch) {
1441
1468
  if (waitSignal.aborted && !shouldExit) {
1442
- persistence.logger.debug("[gemini] Main loop: wait aborted, continuing...");
1469
+ logger.logger.debug("[gemini] Main loop: wait aborted, continuing...");
1443
1470
  continue;
1444
1471
  }
1445
- persistence.logger.debug("[gemini] Main loop: no batch received, breaking...");
1472
+ logger.logger.debug("[gemini] Main loop: no batch received, breaking...");
1446
1473
  break;
1447
1474
  }
1448
- persistence.logger.debug(`[gemini] Main loop: received message from queue (length: ${batch.message.length})`);
1475
+ logger.logger.debug(`[gemini] Main loop: received message from queue (length: ${batch.message.length})`);
1449
1476
  message = batch;
1450
1477
  }
1451
1478
  if (!message) {
@@ -1453,14 +1480,14 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1453
1480
  }
1454
1481
  let injectHistoryContext = false;
1455
1482
  if (wasSessionCreated && currentModeHash && message.hash !== currentModeHash) {
1456
- persistence.logger.debug("[Gemini] Mode changed \u2013 restarting Gemini session");
1457
- messageBuffer.addMessage("\u2550".repeat(40), "status");
1483
+ logger.logger.debug("[Gemini] Mode changed \u2013 restarting Gemini session");
1484
+ messageBuffer$1.addMessage("\u2550".repeat(40), "status");
1458
1485
  if (conversationHistory.hasHistory()) {
1459
- messageBuffer.addMessage(`Switching model (preserving ${conversationHistory.size()} messages of context)...`, "status");
1486
+ messageBuffer$1.addMessage(`Switching model (preserving ${conversationHistory.size()} messages of context)...`, "status");
1460
1487
  injectHistoryContext = true;
1461
- persistence.logger.debug("[Gemini] Will inject conversation history");
1488
+ logger.logger.debug("[Gemini] Will inject conversation history");
1462
1489
  } else {
1463
- messageBuffer.addMessage("Starting new Gemini session (mode changed)...", "status");
1490
+ messageBuffer$1.addMessage("Starting new Gemini session (mode changed)...", "status");
1464
1491
  }
1465
1492
  permissionHandler.reset();
1466
1493
  reasoningProcessor.abort();
@@ -1482,13 +1509,13 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1482
1509
  geminiBackend = backendResult.backend;
1483
1510
  setupGeminiMessageHandler(geminiBackend);
1484
1511
  const actualModel = backendResult.model;
1485
- persistence.logger.debug(`[gemini] Model change - modelToUse=${modelToUse}, actualModel=${actualModel} (from ${backendResult.modelSource})`);
1512
+ logger.logger.debug(`[gemini] Model change - modelToUse=${modelToUse}, actualModel=${actualModel} (from ${backendResult.modelSource})`);
1486
1513
  conversationHistory.setCurrentModel(actualModel);
1487
- persistence.logger.debug("[gemini] Starting new ACP session with model:", actualModel);
1514
+ logger.logger.debug("[gemini] Starting new ACP session with model:", actualModel);
1488
1515
  const { sessionId } = await geminiBackend.startSession();
1489
1516
  acpSessionId = sessionId;
1490
- persistence.logger.debug(`[gemini] New ACP session started: ${acpSessionId}`);
1491
- persistence.logger.debug(`[gemini] Calling updateDisplayedModel with: ${actualModel}`);
1517
+ logger.logger.debug(`[gemini] New ACP session started: ${acpSessionId}`);
1518
+ logger.logger.debug(`[gemini] Calling updateDisplayedModel with: ${actualModel}`);
1492
1519
  updateDisplayedModel(actualModel, false);
1493
1520
  updatePermissionMode(message.mode.permissionMode);
1494
1521
  wasSessionCreated = true;
@@ -1497,7 +1524,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1497
1524
  }
1498
1525
  currentModeHash = message.hash;
1499
1526
  const userMessageToShow = message.mode?.originalUserMessage || message.message;
1500
- messageBuffer.addMessage(userMessageToShow, "user");
1527
+ messageBuffer$1.addMessage(userMessageToShow, "user");
1501
1528
  isProcessingMessage = true;
1502
1529
  try {
1503
1530
  if (first || !wasSessionCreated) {
@@ -1516,20 +1543,20 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1516
1543
  geminiBackend = backendResult.backend;
1517
1544
  setupGeminiMessageHandler(geminiBackend);
1518
1545
  const actualModel = backendResult.model;
1519
- persistence.logger.debug(`[gemini] Backend created, model will be: ${actualModel} (from ${backendResult.modelSource})`);
1520
- persistence.logger.debug(`[gemini] Calling updateDisplayedModel with: ${actualModel}`);
1546
+ logger.logger.debug(`[gemini] Backend created, model will be: ${actualModel} (from ${backendResult.modelSource})`);
1547
+ logger.logger.debug(`[gemini] Calling updateDisplayedModel with: ${actualModel}`);
1521
1548
  updateDisplayedModel(actualModel, false);
1522
1549
  conversationHistory.setCurrentModel(actualModel);
1523
1550
  }
1524
1551
  if (!acpSessionId) {
1525
- persistence.logger.debug("[gemini] Starting ACP session...");
1552
+ logger.logger.debug("[gemini] Starting ACP session...");
1526
1553
  updatePermissionMode(message.mode.permissionMode);
1527
1554
  const { sessionId } = await geminiBackend.startSession();
1528
1555
  acpSessionId = sessionId;
1529
- persistence.logger.debug(`[gemini] ACP session started: ${acpSessionId}`);
1556
+ logger.logger.debug(`[gemini] ACP session started: ${acpSessionId}`);
1530
1557
  wasSessionCreated = true;
1531
1558
  currentModeHash = message.hash;
1532
- persistence.logger.debug(`[gemini] Displaying model in UI: ${displayedModel || "gemini-2.5-pro"}, displayedModel: ${displayedModel}`);
1559
+ logger.logger.debug(`[gemini] Displaying model in UI: ${displayedModel || "gemini-2.5-pro"}, displayedModel: ${displayedModel}`);
1533
1560
  }
1534
1561
  }
1535
1562
  if (!acpSessionId) {
@@ -1548,19 +1575,19 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1548
1575
  if (injectHistoryContext && conversationHistory.hasHistory()) {
1549
1576
  const historyContext = conversationHistory.getContextForNewSession();
1550
1577
  promptToSend = historyContext + promptToSend;
1551
- persistence.logger.debug(`[gemini] Injected conversation history context (${historyContext.length} chars)`);
1578
+ logger.logger.debug(`[gemini] Injected conversation history context (${historyContext.length} chars)`);
1552
1579
  }
1553
- persistence.logger.debug("[gemini] Sending prompt to Gemini:", index$1.contentLogMetadata(promptToSend));
1580
+ logger.logger.debug("[gemini] Sending prompt to Gemini:", contentLogMetadata.contentLogMetadata(promptToSend));
1554
1581
  const MAX_RETRIES = 3;
1555
1582
  const RETRY_DELAY_MS = 2e3;
1556
1583
  let lastError = null;
1557
1584
  for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
1558
1585
  try {
1559
1586
  await geminiBackend.sendPrompt(acpSessionId, promptToSend);
1560
- persistence.logger.debug("[gemini] Prompt sent successfully");
1587
+ logger.logger.debug("[gemini] Prompt sent successfully");
1561
1588
  if (geminiBackend.waitForResponseComplete) {
1562
1589
  await geminiBackend.waitForResponseComplete(12e4);
1563
- persistence.logger.debug("[gemini] Response complete");
1590
+ logger.logger.debug("[gemini] Response complete");
1564
1591
  }
1565
1592
  break;
1566
1593
  } catch (promptError) {
@@ -1577,7 +1604,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1577
1604
  resetTimeMsg = ` Quota resets in ${parts}.`;
1578
1605
  }
1579
1606
  const quotaMsg = `Gemini quota exceeded.${resetTimeMsg} Try using a different model (gemini-2.5-flash-lite) or wait for quota reset.`;
1580
- messageBuffer.addMessage(quotaMsg, "status");
1607
+ messageBuffer$1.addMessage(quotaMsg, "status");
1581
1608
  session.sendAgentMessage("gemini", { type: "message", message: quotaMsg });
1582
1609
  throw promptError;
1583
1610
  }
@@ -1585,8 +1612,8 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1585
1612
  const isInternalError = errorCode === -32603;
1586
1613
  const isRetryable = isEmptyResponseError || isInternalError;
1587
1614
  if (isRetryable && attempt < MAX_RETRIES) {
1588
- persistence.logger.debug(`[gemini] Retryable error on attempt ${attempt}/${MAX_RETRIES}:`, index$1.contentLogMetadata(errorDetails));
1589
- messageBuffer.addMessage(`Gemini returned empty response, retrying (${attempt}/${MAX_RETRIES})...`, "status");
1615
+ logger.logger.debug(`[gemini] Retryable error on attempt ${attempt}/${MAX_RETRIES}:`, contentLogMetadata.contentLogMetadata(errorDetails));
1616
+ messageBuffer$1.addMessage(`Gemini returned empty response, retrying (${attempt}/${MAX_RETRIES})...`, "status");
1590
1617
  await new Promise((resolve2) => setTimeout(resolve2, RETRY_DELAY_MS * attempt));
1591
1618
  continue;
1592
1619
  }
@@ -1594,16 +1621,16 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1594
1621
  }
1595
1622
  }
1596
1623
  if (lastError && MAX_RETRIES > 1) {
1597
- persistence.logger.debug("[gemini] Prompt succeeded after retries");
1624
+ logger.logger.debug("[gemini] Prompt succeeded after retries");
1598
1625
  }
1599
1626
  if (first) {
1600
1627
  first = false;
1601
1628
  }
1602
1629
  } catch (error) {
1603
- persistence.logger.debug("[gemini] Error in gemini session:", index$1.errorLogMetadata(error));
1630
+ logger.logger.debug("[gemini] Error in gemini session:", contentLogMetadata.errorLogMetadata(error));
1604
1631
  const isAbortError = error instanceof Error && error.name === "AbortError";
1605
1632
  if (isAbortError) {
1606
- messageBuffer.addMessage("Aborted by user", "status");
1633
+ messageBuffer$1.addMessage("Aborted by user", "status");
1607
1634
  session.sendSessionEvent({ type: "message", message: "Aborted by user" });
1608
1635
  } else {
1609
1636
  let errorMsg = "Process error occurred";
@@ -1641,7 +1668,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1641
1668
  } else if (error instanceof Error) {
1642
1669
  errorMsg = error.message;
1643
1670
  }
1644
- messageBuffer.addMessage(errorMsg, "status");
1671
+ messageBuffer$1.addMessage(errorMsg, "status");
1645
1672
  session.sendAgentMessage("gemini", {
1646
1673
  type: "message",
1647
1674
  message: errorMsg
@@ -1658,9 +1685,9 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1658
1685
  if (options.length > 0) {
1659
1686
  const optionsXml = formatOptionsXml(options);
1660
1687
  finalMessageText = messageText + optionsXml;
1661
- persistence.logger.debug(`[gemini] Found ${options.length} options in response`);
1688
+ logger.logger.debug(`[gemini] Found ${options.length} options in response`);
1662
1689
  } else if (hasIncompleteOptions(accumulatedResponse)) {
1663
- persistence.logger.debug(`[gemini] Warning: Incomplete options block detected`);
1690
+ logger.logger.debug(`[gemini] Warning: Incomplete options block detected`);
1664
1691
  }
1665
1692
  const messagePayload = {
1666
1693
  type: "message",
@@ -1668,7 +1695,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1668
1695
  id: node_crypto.randomUUID(),
1669
1696
  ...options.length > 0 && { options }
1670
1697
  };
1671
- persistence.logger.debug("[gemini] Sending complete message to mobile:", index$1.contentLogMetadata(finalMessageText));
1698
+ logger.logger.debug("[gemini] Sending complete message to mobile:", contentLogMetadata.contentLogMetadata(finalMessageText));
1672
1699
  session.sendAgentMessage("gemini", messagePayload);
1673
1700
  accumulatedResponse = "";
1674
1701
  isResponseInProgress = false;
@@ -1686,13 +1713,13 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1686
1713
  emitReadyIfIdle();
1687
1714
  isProcessingMessage = false;
1688
1715
  applyPendingSessionSwap();
1689
- persistence.logger.debug(`[gemini] Main loop: turn completed, continuing to next iteration (queue size: ${messageQueue.size()})`);
1716
+ logger.logger.debug(`[gemini] Main loop: turn completed, continuing to next iteration (queue size: ${messageQueue.size()})`);
1690
1717
  }
1691
1718
  }
1692
1719
  } finally {
1693
- persistence.logger.debug("[gemini]: Final cleanup start");
1720
+ logger.logger.debug("[gemini]: Final cleanup start");
1694
1721
  if (reconnectionHandle) {
1695
- persistence.logger.debug("[gemini]: Cancelling offline reconnection");
1722
+ logger.logger.debug("[gemini]: Cancelling offline reconnection");
1696
1723
  reconnectionHandle.cancel();
1697
1724
  }
1698
1725
  try {
@@ -1700,7 +1727,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1700
1727
  await session.flush();
1701
1728
  await session.close();
1702
1729
  } catch (e) {
1703
- persistence.logger.debug("[gemini]: Error while closing session", e);
1730
+ logger.logger.debug("[gemini]: Error while closing session", e);
1704
1731
  }
1705
1732
  if (geminiBackend) {
1706
1733
  await geminiBackend.dispose();
@@ -1722,8 +1749,8 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1722
1749
  if (inkInstance) {
1723
1750
  inkInstance.unmount();
1724
1751
  }
1725
- messageBuffer.clear();
1726
- persistence.logger.debug("[gemini]: Final cleanup completed");
1752
+ messageBuffer$1.clear();
1753
+ logger.logger.debug("[gemini]: Final cleanup completed");
1727
1754
  }
1728
1755
  }
1729
1756