very-happy-cli 0.2.158 → 0.2.160

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 (258) hide show
  1. package/dist/{AcpBackend-DIDRig5G.cjs → AcpBackend-Bm2rdke8.cjs} +78 -76
  2. package/dist/{AcpBackend-vDVLHuYJ.mjs → AcpBackend-mzv8Dhba.mjs} +4 -2
  3. package/dist/{AcpSessionManager-C44U99CC.cjs → AcpSessionManager-BAY1Pggx.cjs} +9 -9
  4. package/dist/{AcpSessionManager-CmRjfhn3.mjs → AcpSessionManager-CoMWFVw3.mjs} +1 -1
  5. package/dist/BasePermissionHandler-CFHAxumV.cjs +157 -0
  6. package/dist/BasePermissionHandler-m3WVholL.mjs +155 -0
  7. package/dist/BaseReasoningProcessor-BFa9_rZA.cjs +200 -0
  8. package/dist/BaseReasoningProcessor-CYrKBXGm.mjs +198 -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-Dw8Jx_CJ.cjs → agentHome-CboCeKWq.cjs} +14 -28
  16. package/dist/{agentHome-CyLmGH5L.mjs → agentHome-Dj1C43aJ.mjs} +8 -22
  17. package/dist/api-CLMUr-SX.mjs +3339 -0
  18. package/dist/api-CgundNNX.cjs +3346 -0
  19. package/dist/{types-DIBF4U0Y.mjs → apiMachine-B9dLW_p5.mjs} +9116 -16015
  20. package/dist/{types-DnrPeN80.cjs → apiMachine-Bn8482VM.cjs} +9104 -16057
  21. package/dist/assistantTools-BTqPnlFl.cjs +380 -0
  22. package/dist/assistantTools-D6tuc6o4.mjs +376 -0
  23. package/dist/attachmentContent-DpiTJZb4.cjs +88 -0
  24. package/dist/attachmentContent-_kxRznNf.mjs +82 -0
  25. package/dist/attachmentLimits-CzVrqgLR.cjs +354 -0
  26. package/dist/attachmentLimits-yba1uHFO.mjs +348 -0
  27. package/dist/auth-BDOVh5h5.cjs +220 -0
  28. package/dist/auth-Cwutmdsa.mjs +225 -0
  29. package/dist/auth-PYHZQNPp.mjs +218 -0
  30. package/dist/auth-ba4WMYrN.cjs +227 -0
  31. package/dist/authRelay-BdYkC1Po.cjs +156 -0
  32. package/dist/authRelay-DSAvg1uv.mjs +143 -0
  33. package/dist/{auto-DZbNcTXx.cjs → auto-BOX_fgmR.cjs} +70 -79
  34. package/dist/{auto-BlMZPwOk.mjs → auto-BXu14yP_.mjs} +27 -36
  35. package/dist/backgroundTaskActivity-8PdPxrvy.mjs +149 -0
  36. package/dist/backgroundTaskActivity-CBvUdj39.cjs +157 -0
  37. package/dist/bootstrap-B5G1TijC.cjs +116 -0
  38. package/dist/bootstrap-hxXPCFMx.mjs +112 -0
  39. package/dist/browser-Y6Bl8L_O.cjs +22 -0
  40. package/dist/browser-jh2P0UVZ.mjs +20 -0
  41. package/dist/claudeCliPath-BqkaH2oR.mjs +8 -0
  42. package/dist/claudeCliPath-U4HHmV4r.cjs +10 -0
  43. package/dist/claudeLocal-BaY4fZKi.mjs +339 -0
  44. package/dist/claudeLocal-CRGG4Pea.cjs +343 -0
  45. package/dist/claudeLocalLauncher-D4T7MTqd.mjs +152 -0
  46. package/dist/claudeLocalLauncher-DyEbVzUN.cjs +154 -0
  47. package/dist/cliUpdate-DsKXPFYp.cjs +120 -0
  48. package/dist/cliUpdate-Y34VGe9Y.mjs +112 -0
  49. package/dist/client-3Ac-O4pw.cjs +104 -0
  50. package/dist/client-BPNbmtvO.cjs +119 -0
  51. package/dist/client-CeGKqqcJ.mjs +100 -0
  52. package/dist/client-ClR0K8zX.mjs +112 -0
  53. package/dist/codex/happyMcpStdioBridge.cjs +33 -14
  54. package/dist/codex/happyMcpStdioBridge.mjs +26 -7
  55. package/dist/codexAppServerClient-I3teiV-N.mjs +1088 -0
  56. package/dist/codexAppServerClient-q2FjnRcK.cjs +1090 -0
  57. package/dist/codexCommand-4zcccIoq.cjs +2088 -0
  58. package/dist/codexCommand-Cc9gcbdX.mjs +2086 -0
  59. package/dist/codexThreadFork-BH9IZPqD.cjs +350 -0
  60. package/dist/codexThreadFork-slzAseLx.mjs +338 -0
  61. package/dist/{config-BtPArqRH.mjs → config-CTx_jb-C.mjs} +7 -40
  62. package/dist/{config-DG84bjwF.cjs → config-Ci9Kpgwa.cjs} +26 -59
  63. package/dist/configuration-BSYpcPwE.cjs +181 -0
  64. package/dist/configuration-RfeNjFmd.mjs +170 -0
  65. package/dist/connect-BpOdzNbE.mjs +682 -0
  66. package/dist/connect-C2CiOUFs.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-DsDr6E2t.cjs +69 -0
  72. package/dist/context-H0Bcb9S_.mjs +65 -0
  73. package/dist/controlClient-BGbDcgWS.mjs +260 -0
  74. package/dist/controlClient-Bcwv3D21.cjs +279 -0
  75. package/dist/createSessionMetadata-BJxEnM-o.cjs +58 -0
  76. package/dist/createSessionMetadata-CVVkGjxV.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-C5CYTVpm.cjs +507 -0
  82. package/dist/deterministicJson-CzkFJWw1.mjs +502 -0
  83. package/dist/doctor-BPkYWSuq.mjs +75 -0
  84. package/dist/doctor-D2YJ-Yn2.cjs +395 -0
  85. package/dist/doctor-DOvByjbk.mjs +391 -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-BCwNrMyv.cjs +64 -0
  92. package/dist/ensureDaemonRunning-Dqa2pOjY.mjs +61 -0
  93. package/dist/handleResumeCommand-BvXYf5El.mjs +240 -0
  94. package/dist/handleResumeCommand-C2cKchpX.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-DPCsWlWK.cjs → index-B6pAdvJx.cjs} +131 -91
  99. package/dist/index-Bu5Zi_a9.cjs +182 -0
  100. package/dist/index-D3kI0hDR.cjs +107 -0
  101. package/dist/index-DA7yINuk.cjs +994 -0
  102. package/dist/index-DDeHXrIX.cjs +71 -0
  103. package/dist/index-DKLU_fD0.mjs +158 -0
  104. package/dist/{index-ZChGsuB7.mjs → index-DMZqWwsP.mjs} +79 -39
  105. package/dist/index-DVkMGPyS.mjs +68 -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-DarS_Wco.mjs → install-BO_W7VhL.mjs} +37 -37
  110. package/dist/install-BgoC2e_2.cjs +88 -0
  111. package/dist/install-CFY3tYtJ.mjs +86 -0
  112. package/dist/{install-wKQGgXvN.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-DcQfee_O.cjs → installTerminalHooks-BQZbvxsZ.cjs} +5 -40
  116. package/dist/{installTerminalHooks-CpNbRFPz.mjs → installTerminalHooks-By7gBMEF.mjs} +3 -38
  117. package/dist/lib.cjs +28 -19
  118. package/dist/lib.d.cts +126 -2
  119. package/dist/lib.d.mts +126 -2
  120. package/dist/lib.mjs +23 -14
  121. package/dist/lidState-BeDfxxEX.cjs +305 -0
  122. package/dist/lidState-CeEt442o.mjs +297 -0
  123. package/dist/limits-C-a7gr04.cjs +43 -0
  124. package/dist/limits-DIo7rEBR.mjs +36 -0
  125. package/dist/localHappyAgentAuth-C-HQyiv6.mjs +82 -0
  126. package/dist/localHappyAgentAuth-D6rFhaoc.cjs +86 -0
  127. package/dist/logger-6HYUEXNk.mjs +271 -0
  128. package/dist/logger-CS0mw3fa.cjs +275 -0
  129. package/dist/loginShellEnv-BkuYtExZ.cjs +182 -0
  130. package/dist/loginShellEnv-Dw8M7tkI.mjs +167 -0
  131. package/dist/machineMetadata-DyDbODYd.cjs +41 -0
  132. package/dist/machineMetadata-oOzBfDfs.mjs +38 -0
  133. package/dist/main-BkxJP6JQ.cjs +941 -0
  134. package/dist/main-BwNIAI1A.mjs +939 -0
  135. package/dist/manager-BQ4flvQZ.mjs +101 -0
  136. package/dist/manager-Cly8xVIR.cjs +105 -0
  137. package/dist/{mcp-BN6bKIGb.mjs → mcp-B1A4I3TK.mjs} +27 -33
  138. package/dist/{mcp-DGdeUUDJ.cjs → mcp-Hszd7qpS.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-BhaKlnxz.mjs +171 -0
  146. package/dist/package-BwMrPwqH.cjs +173 -0
  147. package/dist/path-B7zW-WwE.cjs +18 -0
  148. package/dist/path-D2wdaNSk.mjs +15 -0
  149. package/dist/peerTools-BTqw97Gb.mjs +272 -0
  150. package/dist/peerTools-BvKtHXj8.cjs +283 -0
  151. package/dist/permissionMode-Cr5JCbB7.mjs +80 -0
  152. package/dist/permissionMode-CrV-XuMs.cjs +87 -0
  153. package/dist/persistence-HGW_ZVs9.mjs +372 -0
  154. package/dist/persistence-yKTH3-5X.cjs +414 -0
  155. package/dist/piExtension.mjs +2 -1
  156. package/dist/piRunnerArgs-BNloJCCg.cjs +66 -0
  157. package/dist/piRunnerArgs-BuX1UFWy.mjs +59 -0
  158. package/dist/{piRuntime-bkw2NAZU.mjs → piRuntime-CSGkwCKQ.mjs} +2 -2
  159. package/dist/{piRuntime-3qtbKujX.cjs → piRuntime-C_H7MJCM.cjs} +4 -4
  160. package/dist/{piTerminal-DilKwM7B.mjs → piTerminal-C8a1OrNQ.mjs} +32 -35
  161. package/dist/{piTerminal-BYxp3LMr.cjs → piTerminal-DNCZ6yTM.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-Ccvsz7Ou.mjs +536 -0
  167. package/dist/registerCommonHandlers-DskirN-_.cjs +538 -0
  168. package/dist/registerKillSessionHandler-DZeLXWcB.cjs +361 -0
  169. package/dist/registerKillSessionHandler-GYvHdipX.mjs +358 -0
  170. package/dist/remoteSessionClient-B0LraSB9.cjs +634 -0
  171. package/dist/remoteSessionClient-CYnXRynE.mjs +612 -0
  172. package/dist/resources-BdFBQi8r.mjs +117 -0
  173. package/dist/resources-JDPugcDq.cjs +120 -0
  174. package/dist/run-CJzxoHVh.cjs +5762 -0
  175. package/dist/run-D3ifupU3.mjs +5739 -0
  176. package/dist/runClaude-Ba01qT-u.mjs +848 -0
  177. package/dist/runClaude-Da3RirzE.cjs +850 -0
  178. package/dist/runClaudeDeps-DOt79DjU.mjs +3624 -0
  179. package/dist/runClaudeDeps-DOzEBMls.cjs +3649 -0
  180. package/dist/{runGemini-Cjii069p.mjs → runGemini-BGeTz57m.mjs} +58 -31
  181. package/dist/{runGemini-28O2sqyI.cjs → runGemini-DSr9LIxL.cjs} +202 -175
  182. package/dist/{runOpenClaw-CiMZad-H.cjs → runOpenClaw-B1mTxN35.cjs} +64 -65
  183. package/dist/{runOpenClaw-jaLr7KF1.mjs → runOpenClaw-CogSedIc.mjs} +31 -32
  184. package/dist/sandbox-CG7IyDTU.cjs +187 -0
  185. package/dist/sandbox-DTe6d54R.mjs +180 -0
  186. package/dist/selfCheck-C9mVrQwf.mjs +84 -0
  187. package/dist/selfCheck-Dc-mNSLb.cjs +87 -0
  188. package/dist/{send-D5ejHPXG.cjs → send-B7J_eaG3.cjs} +16 -9
  189. package/dist/{send-C9mOtChi.mjs → send-CBXJKc6O.mjs} +12 -5
  190. package/dist/server-CZTP_iOn.cjs +407 -0
  191. package/dist/server-DcVBv04l.mjs +404 -0
  192. package/dist/sessionLock-Bys1PNSo.cjs +205 -0
  193. package/dist/sessionLock-D-EG2CfG.mjs +197 -0
  194. package/dist/sessionModeFile-DMl3dw3r.mjs +32 -0
  195. package/dist/sessionModeFile-RSm0NQkH.cjs +36 -0
  196. package/dist/sessionOps-Dn8z85h_.cjs +783 -0
  197. package/dist/sessionOps-SuHW8Dfe.mjs +760 -0
  198. package/dist/sessionScanner-BOrGjMXL.cjs +209 -0
  199. package/dist/sessionScanner-CX3onqXh.mjs +206 -0
  200. package/dist/{sessions-W6771g3X.mjs → sessions-BEG_HTSi.mjs} +17 -8
  201. package/dist/{sessions-BNMPQoLE.cjs → sessions-D74aJbhL.cjs} +37 -28
  202. package/dist/setupOfflineReconnection-ByElY60m.cjs +74 -0
  203. package/dist/setupOfflineReconnection-DpvWTt69.mjs +72 -0
  204. package/dist/smallFastModel-BLNgMrwR.mjs +18 -0
  205. package/dist/smallFastModel-D_uxGMo3.cjs +21 -0
  206. package/dist/{spawn-D0QVhzRb.mjs → spawn-B7yro0b2.mjs} +26 -38
  207. package/dist/{spawn-Ddtom1cb.cjs → spawn-DgR0RKRs.cjs} +52 -64
  208. package/dist/spawnAgents-BGQiEF-w.cjs +52 -0
  209. package/dist/spawnAgents-DZzZ9jMI.mjs +45 -0
  210. package/dist/spawnHappyCLI-B2H5s4B_.mjs +64 -0
  211. package/dist/spawnHappyCLI-DBhwZT7O.cjs +66 -0
  212. package/dist/specialCommands-BSqhYg5X.mjs +52 -0
  213. package/dist/specialCommands-DSsTeRej.cjs +54 -0
  214. package/dist/startFileWatcher-B4VsLgjD.cjs +71 -0
  215. package/dist/startFileWatcher-DErVWZE4.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-C8gyQFMc.mjs +69 -0
  221. package/dist/sync-DccIKZ5_.cjs +71 -0
  222. package/dist/systemPrompt-BwTPWfMu.cjs +97 -0
  223. package/dist/systemPrompt-DX521JJz.mjs +94 -0
  224. package/dist/{teams-CqSwtw2O.mjs → teams-C32F1hqd.mjs} +9 -40
  225. package/dist/{teams-BZ1tayg_.cjs → teams-Dl8g8kTI.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-D0XyHOid.mjs +38 -0
  233. package/dist/time-DCuTyook.cjs +42 -0
  234. package/dist/titleGenerator-CQ8CoGhg.mjs +166 -0
  235. package/dist/titleGenerator-ChzMJsyg.cjs +172 -0
  236. package/dist/tmuxSocket-B8Yx20sT.mjs +19 -0
  237. package/dist/tmuxSocket-D-Xt6Vn-.cjs +24 -0
  238. package/dist/{todo-BYMg0fR0.cjs → todo-BvUOTa8G.cjs} +15 -12
  239. package/dist/{todo-BbusB1zM.mjs → todo-CZ6cFrrn.mjs} +11 -8
  240. package/dist/tools-BZtHF_qQ.mjs +177 -0
  241. package/dist/tools-Be3AoAwu.cjs +63 -0
  242. package/dist/tools-DQj0AeLk.cjs +180 -0
  243. package/dist/tools-DkluDcG4.mjs +60 -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-BkLzaJ6I.mjs +47 -0
  249. package/dist/uninstall-x-TUtf5H.cjs +49 -0
  250. package/package.json +7 -7
  251. package/dist/agentGuidance-CrR9l62U.mjs +0 -2145
  252. package/dist/agentGuidance-DwOWbX55.cjs +0 -2217
  253. package/dist/index-BG932eCh.cjs +0 -19655
  254. package/dist/index-CVCt3kSt.mjs +0 -19591
  255. package/dist/index-D5ScEErM.cjs +0 -58
  256. package/dist/index-DgO0FHOx.mjs +0 -52
  257. package/dist/limits-D2uN090G.mjs +0 -2528
  258. package/dist/limits-kqFqhfsh.cjs +0 -2652
@@ -2,50 +2,17 @@ import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
2
2
  import { join } from 'path';
3
3
  import { homedir } from 'os';
4
4
  import { execSync } from 'child_process';
5
- import { l as logger } from './limits-D2uN090G.mjs';
6
- import { D as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './index-CVCt3kSt.mjs';
7
- import 'zod';
8
- import '@paralleldrive/cuid2';
9
- import 'node:fs/promises';
10
- import 'node:fs';
11
- import 'node:crypto';
12
- import 'tweetnacl';
5
+ import { l as logger } from './logger-6HYUEXNk.mjs';
6
+ import { D as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './constants-BC4St0xd.mjs';
13
7
  import 'chalk';
14
8
  import 'node:util';
9
+ import './configuration-RfeNjFmd.mjs';
10
+ import 'node:fs';
15
11
  import 'node:os';
16
12
  import 'node:path';
17
- import './types-DIBF4U0Y.mjs';
18
- import 'axios';
19
- import 'node:events';
20
- import 'socket.io-client';
21
- import 'util';
22
- import 'fs/promises';
23
- import 'crypto';
24
- import 'cross-spawn';
25
- import './terminalTitleSuggest-DKgX3osW.mjs';
26
- import 'url';
27
- import 'node:child_process';
28
- import 'node-pty';
29
- import 'node:readline';
30
- import '@anthropic-ai/sandbox-runtime';
31
- import 'expo-server-sdk';
32
- import './agentGuidance-CrR9l62U.mjs';
33
- import 'ink';
34
- import 'react';
35
- import '@anthropic-ai/claude-agent-sdk';
36
- import 'ps-list';
37
- import 'tmp';
38
- import 'open';
39
- import 'fastify';
40
- import 'fastify-type-provider-zod';
41
- import 'node:module';
42
- import '@modelcontextprotocol/sdk/server/mcp.js';
43
- import 'node:http';
44
- import '@modelcontextprotocol/sdk/server/streamableHttp.js';
45
- import 'http';
46
- import 'inquirer';
47
- import 'node:url';
48
- import 'node:readline/promises';
13
+ import './package-BhaKlnxz.mjs';
14
+ import 'node:fs/promises';
15
+ import './trimIdent-BAjmv_TG.mjs';
49
16
 
50
17
  function readGeminiLocalConfig() {
51
18
  let token = null;
@@ -4,50 +4,17 @@ var fs = require('fs');
4
4
  var path = require('path');
5
5
  var os = require('os');
6
6
  var child_process = require('child_process');
7
- var persistence = require('./limits-kqFqhfsh.cjs');
8
- var index = require('./index-BG932eCh.cjs');
9
- require('zod');
10
- require('@paralleldrive/cuid2');
11
- require('node:fs/promises');
12
- require('node:fs');
13
- require('node:crypto');
14
- require('tweetnacl');
7
+ var logger = require('./logger-CS0mw3fa.cjs');
8
+ var constants = require('./constants-VJ0N6WuG.cjs');
15
9
  require('chalk');
16
10
  require('node:util');
11
+ require('./configuration-BSYpcPwE.cjs');
12
+ require('node:fs');
17
13
  require('node:os');
18
14
  require('node:path');
19
- require('./types-DnrPeN80.cjs');
20
- require('axios');
21
- require('node:events');
22
- require('socket.io-client');
23
- require('util');
24
- require('fs/promises');
25
- require('crypto');
26
- require('cross-spawn');
27
- require('./terminalTitleSuggest-Dji8I0Jy.cjs');
28
- require('url');
29
- require('node:child_process');
30
- require('node-pty');
31
- require('node:readline');
32
- require('@anthropic-ai/sandbox-runtime');
33
- require('expo-server-sdk');
34
- require('./agentGuidance-DwOWbX55.cjs');
35
- require('ink');
36
- require('react');
37
- require('@anthropic-ai/claude-agent-sdk');
38
- require('ps-list');
39
- require('tmp');
40
- require('open');
41
- require('fastify');
42
- require('fastify-type-provider-zod');
43
- require('node:module');
44
- require('@modelcontextprotocol/sdk/server/mcp.js');
45
- require('node:http');
46
- require('@modelcontextprotocol/sdk/server/streamableHttp.js');
47
- require('http');
48
- require('inquirer');
49
- require('node:url');
50
- require('node:readline/promises');
15
+ require('./package-BwMrPwqH.cjs');
16
+ require('node:fs/promises');
17
+ require('./trimIdent-4gvk9Wk6.cjs');
51
18
 
52
19
  function readGeminiLocalConfig() {
53
20
  let token = null;
@@ -70,14 +37,14 @@ function readGeminiLocalConfig() {
70
37
  const foundToken = config.access_token || config.token || config.apiKey || config.GEMINI_API_KEY;
71
38
  if (foundToken && typeof foundToken === "string") {
72
39
  token = foundToken;
73
- persistence.logger.debug(`[Gemini] Found token in ${configPath}`);
40
+ logger.logger.debug(`[Gemini] Found token in ${configPath}`);
74
41
  }
75
42
  }
76
43
  if (!model) {
77
44
  const foundModel = config.model || config.GEMINI_MODEL;
78
45
  if (foundModel && typeof foundModel === "string") {
79
46
  model = foundModel;
80
- persistence.logger.debug(`[Gemini] Found model in ${configPath}: ${model}`);
47
+ logger.logger.debug(`[Gemini] Found model in ${configPath}: ${model}`);
81
48
  }
82
49
  }
83
50
  if (!googleCloudProject) {
@@ -87,11 +54,11 @@ function readGeminiLocalConfig() {
87
54
  if (config.googleCloudProjectEmail && typeof config.googleCloudProjectEmail === "string") {
88
55
  googleCloudProjectEmail = config.googleCloudProjectEmail;
89
56
  }
90
- persistence.logger.debug(`[Gemini] Found Google Cloud Project in ${configPath}: ${googleCloudProject}${googleCloudProjectEmail ? ` (for ${googleCloudProjectEmail})` : ""}`);
57
+ logger.logger.debug(`[Gemini] Found Google Cloud Project in ${configPath}: ${googleCloudProject}${googleCloudProjectEmail ? ` (for ${googleCloudProjectEmail})` : ""}`);
91
58
  }
92
59
  }
93
60
  } catch (error) {
94
- persistence.logger.debug(`[Gemini] Failed to read config from ${configPath}:`, error);
61
+ logger.logger.debug(`[Gemini] Failed to read config from ${configPath}:`, error);
95
62
  }
96
63
  }
97
64
  }
@@ -105,10 +72,10 @@ function readGeminiLocalConfig() {
105
72
  }).trim();
106
73
  if (gcloudToken && gcloudToken.length > 0) {
107
74
  token = gcloudToken;
108
- persistence.logger.debug("[Gemini] Found token via gcloud Application Default Credentials");
75
+ logger.logger.debug("[Gemini] Found token via gcloud Application Default Credentials");
109
76
  }
110
77
  } catch (error) {
111
- persistence.logger.debug("[Gemini] gcloud Application Default Credentials not available");
78
+ logger.logger.debug("[Gemini] gcloud Application Default Credentials not available");
112
79
  }
113
80
  }
114
81
  if (!googleCloudProject) {
@@ -116,7 +83,7 @@ function readGeminiLocalConfig() {
116
83
  if (envProject) {
117
84
  googleCloudProject = envProject;
118
85
  googleCloudProjectEmail = null;
119
- persistence.logger.debug(`[Gemini] Found Google Cloud Project from env: ${googleCloudProject}`);
86
+ logger.logger.debug(`[Gemini] Found Google Cloud Project from env: ${googleCloudProject}`);
120
87
  }
121
88
  }
122
89
  return { token, model, googleCloudProject, googleCloudProjectEmail };
@@ -124,15 +91,15 @@ function readGeminiLocalConfig() {
124
91
  function determineGeminiModel(explicitModel, localConfig) {
125
92
  if (explicitModel !== void 0) {
126
93
  if (explicitModel === null) {
127
- return process.env[index.GEMINI_MODEL_ENV] || index.DEFAULT_GEMINI_MODEL;
94
+ return process.env[constants.GEMINI_MODEL_ENV] || constants.DEFAULT_GEMINI_MODEL;
128
95
  } else {
129
96
  return explicitModel;
130
97
  }
131
98
  } else {
132
- const envModel = process.env[index.GEMINI_MODEL_ENV];
133
- persistence.logger.debug(`[Gemini] Model selection: env[GEMINI_MODEL_ENV]=${envModel}, localConfig.model=${localConfig.model}, DEFAULT=${index.DEFAULT_GEMINI_MODEL}`);
134
- const model = envModel || localConfig.model || index.DEFAULT_GEMINI_MODEL;
135
- persistence.logger.debug(`[Gemini] Selected model: ${model}`);
99
+ const envModel = process.env[constants.GEMINI_MODEL_ENV];
100
+ logger.logger.debug(`[Gemini] Model selection: env[GEMINI_MODEL_ENV]=${envModel}, localConfig.model=${localConfig.model}, DEFAULT=${constants.DEFAULT_GEMINI_MODEL}`);
101
+ const model = envModel || localConfig.model || constants.DEFAULT_GEMINI_MODEL;
102
+ logger.logger.debug(`[Gemini] Selected model: ${model}`);
136
103
  return model;
137
104
  }
138
105
  }
@@ -148,15 +115,15 @@ function saveGeminiModelToConfig(model) {
148
115
  try {
149
116
  config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
150
117
  } catch (error) {
151
- persistence.logger.debug(`[Gemini] Failed to read existing config, creating new one`);
118
+ logger.logger.debug(`[Gemini] Failed to read existing config, creating new one`);
152
119
  config = {};
153
120
  }
154
121
  }
155
122
  config.model = model;
156
123
  fs.writeFileSync(configPath, JSON.stringify(config, null, 2), "utf-8");
157
- persistence.logger.debug(`[Gemini] Saved model "${model}" to ${configPath}`);
124
+ logger.logger.debug(`[Gemini] Saved model "${model}" to ${configPath}`);
158
125
  } catch (error) {
159
- persistence.logger.debug(`[Gemini] Failed to save model to config:`, error);
126
+ logger.logger.debug(`[Gemini] Failed to save model to config:`, error);
160
127
  }
161
128
  }
162
129
  function saveGoogleCloudProjectToConfig(projectId, email) {
@@ -179,20 +146,20 @@ function saveGoogleCloudProjectToConfig(projectId, email) {
179
146
  config.googleCloudProjectEmail = email;
180
147
  }
181
148
  fs.writeFileSync(configPath, JSON.stringify(config, null, 2), "utf-8");
182
- persistence.logger.debug(`[Gemini] Saved Google Cloud Project "${projectId}"${email ? ` for ${email}` : ""} to ${configPath}`);
149
+ logger.logger.debug(`[Gemini] Saved Google Cloud Project "${projectId}"${email ? ` for ${email}` : ""} to ${configPath}`);
183
150
  } catch (error) {
184
- persistence.logger.debug(`[Gemini] Failed to save Google Cloud Project to config:`, error);
151
+ logger.logger.debug(`[Gemini] Failed to save Google Cloud Project to config:`, error);
185
152
  throw error;
186
153
  }
187
154
  }
188
155
  function getInitialGeminiModel() {
189
156
  const localConfig = readGeminiLocalConfig();
190
- return process.env[index.GEMINI_MODEL_ENV] || localConfig.model || index.DEFAULT_GEMINI_MODEL;
157
+ return process.env[constants.GEMINI_MODEL_ENV] || localConfig.model || constants.DEFAULT_GEMINI_MODEL;
191
158
  }
192
159
  function getGeminiModelSource(explicitModel, localConfig) {
193
160
  if (explicitModel !== void 0 && explicitModel !== null) {
194
161
  return "explicit";
195
- } else if (process.env[index.GEMINI_MODEL_ENV]) {
162
+ } else if (process.env[constants.GEMINI_MODEL_ENV]) {
196
163
  return "env-var";
197
164
  } else if (localConfig.model) {
198
165
  return "local-config";
@@ -0,0 +1,181 @@
1
+ 'use strict';
2
+
3
+ var node_fs = require('node:fs');
4
+ var os = require('node:os');
5
+ var path = require('node:path');
6
+ var _package = require('./package-BwMrPwqH.cjs');
7
+ var promises = require('node:fs/promises');
8
+
9
+ const PRIVATE_DIRECTORY_MODE = 448;
10
+ const PRIVATE_FILE_MODE = 384;
11
+ function ignoreUnsupportedPermissions(error) {
12
+ if (process.platform !== "win32") throw error;
13
+ }
14
+ function ensurePrivateDirectorySync(path) {
15
+ node_fs.mkdirSync(path, { recursive: true, mode: PRIVATE_DIRECTORY_MODE });
16
+ try {
17
+ node_fs.chmodSync(path, PRIVATE_DIRECTORY_MODE);
18
+ } catch (error) {
19
+ ignoreUnsupportedPermissions(error);
20
+ }
21
+ }
22
+ async function ensurePrivateDirectory(path) {
23
+ await promises.mkdir(path, { recursive: true, mode: PRIVATE_DIRECTORY_MODE });
24
+ try {
25
+ await promises.chmod(path, PRIVATE_DIRECTORY_MODE);
26
+ } catch (error) {
27
+ ignoreUnsupportedPermissions(error);
28
+ }
29
+ }
30
+ function hardenPrivateFileSync(path) {
31
+ try {
32
+ node_fs.chmodSync(path, PRIVATE_FILE_MODE);
33
+ } catch (error) {
34
+ ignoreUnsupportedPermissions(error);
35
+ }
36
+ }
37
+ function hardenPrivateDirectoryFilesSync(path$1) {
38
+ for (const name of node_fs.readdirSync(path$1)) {
39
+ const candidate = path.join(path$1, name);
40
+ try {
41
+ if (node_fs.statSync(candidate).isFile()) hardenPrivateFileSync(candidate);
42
+ } catch {
43
+ }
44
+ }
45
+ }
46
+ async function hardenPrivateFile(path) {
47
+ try {
48
+ await promises.chmod(path, PRIVATE_FILE_MODE);
49
+ } catch (error) {
50
+ ignoreUnsupportedPermissions(error);
51
+ }
52
+ }
53
+ function writePrivateFileSync(path, data) {
54
+ node_fs.writeFileSync(path, data, { encoding: "utf8", mode: PRIVATE_FILE_MODE });
55
+ hardenPrivateFileSync(path);
56
+ }
57
+ async function writePrivateFile(path, data) {
58
+ await promises.writeFile(path, data, { encoding: "utf8", mode: PRIVATE_FILE_MODE });
59
+ await hardenPrivateFile(path);
60
+ }
61
+ function appendPrivateFileSync(path, data) {
62
+ node_fs.appendFileSync(path, data, { encoding: "utf8", mode: PRIVATE_FILE_MODE });
63
+ hardenPrivateFileSync(path);
64
+ }
65
+
66
+ const DEFAULT_RELAY_URL = "https://veryhappy.dev";
67
+ function normalizeHttpEndpoint(value, source) {
68
+ const trimmed = value.trim();
69
+ let parsed;
70
+ try {
71
+ parsed = new URL(trimmed);
72
+ } catch {
73
+ throw new Error(`${source} must be an absolute http(s) origin`);
74
+ }
75
+ const onlyOriginPath = /^\/+$/u.test(parsed.pathname);
76
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:" || parsed.username.length > 0 || parsed.password.length > 0 || !onlyOriginPath || parsed.search.length > 0 || parsed.hash.length > 0) {
77
+ throw new Error(`${source} must be an http(s) origin without credentials, path, query, or fragment`);
78
+ }
79
+ return parsed.origin;
80
+ }
81
+ function resolveHttpEndpoint(environmentValue, settingsValue, environmentName, settingsName) {
82
+ if (environmentValue !== void 0) {
83
+ return normalizeHttpEndpoint(environmentValue, environmentName);
84
+ }
85
+ if (settingsValue !== void 0) {
86
+ return normalizeHttpEndpoint(settingsValue, `settings.${settingsName}`);
87
+ }
88
+ return DEFAULT_RELAY_URL;
89
+ }
90
+ class Configuration {
91
+ serverUrl;
92
+ webappUrl;
93
+ isDaemonProcess;
94
+ // Directories and paths (from persistence)
95
+ happyHomeDir;
96
+ logsDir;
97
+ settingsFile;
98
+ privateKeyFile;
99
+ daemonStateFile;
100
+ daemonLockFile;
101
+ sessionsFile;
102
+ currentCliVersion;
103
+ isExperimentalEnabled;
104
+ disableCaffeinate;
105
+ constructor() {
106
+ const args = process.argv.slice(2);
107
+ this.isDaemonProcess = args.length >= 2 && args[0] === "daemon" && args[1] === "start-sync";
108
+ if (process.env.HAPPY_HOME_DIR) {
109
+ const expandedPath = process.env.HAPPY_HOME_DIR.replace(/^~/, os.homedir());
110
+ this.happyHomeDir = expandedPath;
111
+ } else {
112
+ this.happyHomeDir = path.join(os.homedir(), ".happy");
113
+ }
114
+ this.logsDir = path.join(this.happyHomeDir, "logs");
115
+ this.settingsFile = path.join(this.happyHomeDir, "settings.json");
116
+ this.privateKeyFile = path.join(this.happyHomeDir, "access.key");
117
+ this.daemonStateFile = path.join(this.happyHomeDir, "daemon.state.json");
118
+ this.daemonLockFile = path.join(this.happyHomeDir, "daemon.state.json.lock");
119
+ this.sessionsFile = path.join(this.happyHomeDir, "sessions.json");
120
+ try {
121
+ this.serverUrl = resolveHttpEndpoint(
122
+ process.env.HAPPY_SERVER_URL,
123
+ readSettingsStringSync(this.settingsFile, "serverUrl"),
124
+ "HAPPY_SERVER_URL",
125
+ "serverUrl"
126
+ );
127
+ this.webappUrl = resolveHttpEndpoint(
128
+ process.env.HAPPY_WEBAPP_URL,
129
+ readSettingsStringSync(this.settingsFile, "webappUrl"),
130
+ "HAPPY_WEBAPP_URL",
131
+ "webappUrl"
132
+ );
133
+ } catch (error) {
134
+ const message = error instanceof Error ? error.message : "invalid client endpoint";
135
+ process.stderr.write(`[very-happy] Configuration error: ${message}
136
+ `);
137
+ process.exit(1);
138
+ }
139
+ this.isExperimentalEnabled = ["true", "1", "yes"].includes(process.env.HAPPY_EXPERIMENTAL?.toLowerCase() || "");
140
+ this.disableCaffeinate = ["true", "1", "yes"].includes(process.env.HAPPY_DISABLE_CAFFEINATE?.toLowerCase() || "");
141
+ this.currentCliVersion = _package.packageJson.version;
142
+ const variant = process.env.HAPPY_VARIANT || "stable";
143
+ if (!this.isDaemonProcess && variant === "dev") {
144
+ console.log("\x1B[33m\u{1F527} DEV MODE\x1B[0m - Data: " + this.happyHomeDir);
145
+ }
146
+ ensurePrivateDirectorySync(this.happyHomeDir);
147
+ ensurePrivateDirectorySync(this.logsDir);
148
+ for (const privateFile of [
149
+ this.settingsFile,
150
+ this.privateKeyFile,
151
+ this.daemonStateFile,
152
+ this.daemonLockFile,
153
+ this.sessionsFile
154
+ ]) {
155
+ if (node_fs.existsSync(privateFile)) hardenPrivateFileSync(privateFile);
156
+ }
157
+ hardenPrivateDirectoryFilesSync(this.logsDir);
158
+ }
159
+ }
160
+ function readSettingsStringSync(settingsFile, key) {
161
+ try {
162
+ if (!node_fs.existsSync(settingsFile)) return void 0;
163
+ const raw = JSON.parse(node_fs.readFileSync(settingsFile, "utf8"));
164
+ const value = raw?.[key];
165
+ return typeof value === "string" && value.length > 0 ? value : void 0;
166
+ } catch {
167
+ return void 0;
168
+ }
169
+ }
170
+ const configuration = new Configuration();
171
+
172
+ exports.PRIVATE_FILE_MODE = PRIVATE_FILE_MODE;
173
+ exports.appendPrivateFileSync = appendPrivateFileSync;
174
+ exports.configuration = configuration;
175
+ exports.ensurePrivateDirectory = ensurePrivateDirectory;
176
+ exports.ensurePrivateDirectorySync = ensurePrivateDirectorySync;
177
+ exports.hardenPrivateFile = hardenPrivateFile;
178
+ exports.hardenPrivateFileSync = hardenPrivateFileSync;
179
+ exports.normalizeHttpEndpoint = normalizeHttpEndpoint;
180
+ exports.writePrivateFile = writePrivateFile;
181
+ exports.writePrivateFileSync = writePrivateFileSync;
@@ -0,0 +1,170 @@
1
+ import { mkdirSync, chmodSync, readdirSync, statSync, appendFileSync, writeFileSync, existsSync, readFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { p as packageJson } from './package-BhaKlnxz.mjs';
5
+ import { mkdir, chmod, writeFile } from 'node:fs/promises';
6
+
7
+ const PRIVATE_DIRECTORY_MODE = 448;
8
+ const PRIVATE_FILE_MODE = 384;
9
+ function ignoreUnsupportedPermissions(error) {
10
+ if (process.platform !== "win32") throw error;
11
+ }
12
+ function ensurePrivateDirectorySync(path) {
13
+ mkdirSync(path, { recursive: true, mode: PRIVATE_DIRECTORY_MODE });
14
+ try {
15
+ chmodSync(path, PRIVATE_DIRECTORY_MODE);
16
+ } catch (error) {
17
+ ignoreUnsupportedPermissions(error);
18
+ }
19
+ }
20
+ async function ensurePrivateDirectory(path) {
21
+ await mkdir(path, { recursive: true, mode: PRIVATE_DIRECTORY_MODE });
22
+ try {
23
+ await chmod(path, PRIVATE_DIRECTORY_MODE);
24
+ } catch (error) {
25
+ ignoreUnsupportedPermissions(error);
26
+ }
27
+ }
28
+ function hardenPrivateFileSync(path) {
29
+ try {
30
+ chmodSync(path, PRIVATE_FILE_MODE);
31
+ } catch (error) {
32
+ ignoreUnsupportedPermissions(error);
33
+ }
34
+ }
35
+ function hardenPrivateDirectoryFilesSync(path) {
36
+ for (const name of readdirSync(path)) {
37
+ const candidate = join(path, name);
38
+ try {
39
+ if (statSync(candidate).isFile()) hardenPrivateFileSync(candidate);
40
+ } catch {
41
+ }
42
+ }
43
+ }
44
+ async function hardenPrivateFile(path) {
45
+ try {
46
+ await chmod(path, PRIVATE_FILE_MODE);
47
+ } catch (error) {
48
+ ignoreUnsupportedPermissions(error);
49
+ }
50
+ }
51
+ function writePrivateFileSync(path, data) {
52
+ writeFileSync(path, data, { encoding: "utf8", mode: PRIVATE_FILE_MODE });
53
+ hardenPrivateFileSync(path);
54
+ }
55
+ async function writePrivateFile(path, data) {
56
+ await writeFile(path, data, { encoding: "utf8", mode: PRIVATE_FILE_MODE });
57
+ await hardenPrivateFile(path);
58
+ }
59
+ function appendPrivateFileSync(path, data) {
60
+ appendFileSync(path, data, { encoding: "utf8", mode: PRIVATE_FILE_MODE });
61
+ hardenPrivateFileSync(path);
62
+ }
63
+
64
+ const DEFAULT_RELAY_URL = "https://veryhappy.dev";
65
+ function normalizeHttpEndpoint(value, source) {
66
+ const trimmed = value.trim();
67
+ let parsed;
68
+ try {
69
+ parsed = new URL(trimmed);
70
+ } catch {
71
+ throw new Error(`${source} must be an absolute http(s) origin`);
72
+ }
73
+ const onlyOriginPath = /^\/+$/u.test(parsed.pathname);
74
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:" || parsed.username.length > 0 || parsed.password.length > 0 || !onlyOriginPath || parsed.search.length > 0 || parsed.hash.length > 0) {
75
+ throw new Error(`${source} must be an http(s) origin without credentials, path, query, or fragment`);
76
+ }
77
+ return parsed.origin;
78
+ }
79
+ function resolveHttpEndpoint(environmentValue, settingsValue, environmentName, settingsName) {
80
+ if (environmentValue !== void 0) {
81
+ return normalizeHttpEndpoint(environmentValue, environmentName);
82
+ }
83
+ if (settingsValue !== void 0) {
84
+ return normalizeHttpEndpoint(settingsValue, `settings.${settingsName}`);
85
+ }
86
+ return DEFAULT_RELAY_URL;
87
+ }
88
+ class Configuration {
89
+ serverUrl;
90
+ webappUrl;
91
+ isDaemonProcess;
92
+ // Directories and paths (from persistence)
93
+ happyHomeDir;
94
+ logsDir;
95
+ settingsFile;
96
+ privateKeyFile;
97
+ daemonStateFile;
98
+ daemonLockFile;
99
+ sessionsFile;
100
+ currentCliVersion;
101
+ isExperimentalEnabled;
102
+ disableCaffeinate;
103
+ constructor() {
104
+ const args = process.argv.slice(2);
105
+ this.isDaemonProcess = args.length >= 2 && args[0] === "daemon" && args[1] === "start-sync";
106
+ if (process.env.HAPPY_HOME_DIR) {
107
+ const expandedPath = process.env.HAPPY_HOME_DIR.replace(/^~/, homedir());
108
+ this.happyHomeDir = expandedPath;
109
+ } else {
110
+ this.happyHomeDir = join(homedir(), ".happy");
111
+ }
112
+ this.logsDir = join(this.happyHomeDir, "logs");
113
+ this.settingsFile = join(this.happyHomeDir, "settings.json");
114
+ this.privateKeyFile = join(this.happyHomeDir, "access.key");
115
+ this.daemonStateFile = join(this.happyHomeDir, "daemon.state.json");
116
+ this.daemonLockFile = join(this.happyHomeDir, "daemon.state.json.lock");
117
+ this.sessionsFile = join(this.happyHomeDir, "sessions.json");
118
+ try {
119
+ this.serverUrl = resolveHttpEndpoint(
120
+ process.env.HAPPY_SERVER_URL,
121
+ readSettingsStringSync(this.settingsFile, "serverUrl"),
122
+ "HAPPY_SERVER_URL",
123
+ "serverUrl"
124
+ );
125
+ this.webappUrl = resolveHttpEndpoint(
126
+ process.env.HAPPY_WEBAPP_URL,
127
+ readSettingsStringSync(this.settingsFile, "webappUrl"),
128
+ "HAPPY_WEBAPP_URL",
129
+ "webappUrl"
130
+ );
131
+ } catch (error) {
132
+ const message = error instanceof Error ? error.message : "invalid client endpoint";
133
+ process.stderr.write(`[very-happy] Configuration error: ${message}
134
+ `);
135
+ process.exit(1);
136
+ }
137
+ this.isExperimentalEnabled = ["true", "1", "yes"].includes(process.env.HAPPY_EXPERIMENTAL?.toLowerCase() || "");
138
+ this.disableCaffeinate = ["true", "1", "yes"].includes(process.env.HAPPY_DISABLE_CAFFEINATE?.toLowerCase() || "");
139
+ this.currentCliVersion = packageJson.version;
140
+ const variant = process.env.HAPPY_VARIANT || "stable";
141
+ if (!this.isDaemonProcess && variant === "dev") {
142
+ console.log("\x1B[33m\u{1F527} DEV MODE\x1B[0m - Data: " + this.happyHomeDir);
143
+ }
144
+ ensurePrivateDirectorySync(this.happyHomeDir);
145
+ ensurePrivateDirectorySync(this.logsDir);
146
+ for (const privateFile of [
147
+ this.settingsFile,
148
+ this.privateKeyFile,
149
+ this.daemonStateFile,
150
+ this.daemonLockFile,
151
+ this.sessionsFile
152
+ ]) {
153
+ if (existsSync(privateFile)) hardenPrivateFileSync(privateFile);
154
+ }
155
+ hardenPrivateDirectoryFilesSync(this.logsDir);
156
+ }
157
+ }
158
+ function readSettingsStringSync(settingsFile, key) {
159
+ try {
160
+ if (!existsSync(settingsFile)) return void 0;
161
+ const raw = JSON.parse(readFileSync(settingsFile, "utf8"));
162
+ const value = raw?.[key];
163
+ return typeof value === "string" && value.length > 0 ? value : void 0;
164
+ } catch {
165
+ return void 0;
166
+ }
167
+ }
168
+ const configuration = new Configuration();
169
+
170
+ export { PRIVATE_FILE_MODE as P, writePrivateFile as a, hardenPrivateFile as b, configuration as c, appendPrivateFileSync as d, ensurePrivateDirectory as e, ensurePrivateDirectorySync as f, hardenPrivateFileSync as h, normalizeHttpEndpoint as n, writePrivateFileSync as w };