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
@@ -0,0 +1,170 @@
1
+ function summarizeSpawnSessionForLog(value) {
2
+ const input = value && typeof value === "object" ? value : {};
3
+ const environmentVariables = input.environmentVariables && typeof input.environmentVariables === "object" ? input.environmentVariables : {};
4
+ return {
5
+ ...typeof input.agent === "string" ? { agent: input.agent } : {},
6
+ ...typeof input.variant === "string" ? { variant: input.variant } : {},
7
+ ...typeof input.sessionId === "string" ? { sessionId: input.sessionId } : {},
8
+ hasDirectory: typeof input.directory === "string" && input.directory.length > 0,
9
+ hasToken: typeof input.token === "string" && input.token.length > 0,
10
+ environmentVariableNames: Object.keys(environmentVariables).sort(),
11
+ resumesClaude: typeof input.resumeClaudeSessionId === "string" && input.resumeClaudeSessionId.length > 0,
12
+ resumesCodex: typeof input.resumeCodexThreadId === "string" && input.resumeCodexThreadId.length > 0,
13
+ importsClaude: typeof input.importedFromClaudeSessionId === "string" && input.importedFromClaudeSessionId.length > 0,
14
+ forceNew: input.forceNew === true,
15
+ ...typeof input.permissionMode === "string" ? { permissionMode: input.permissionMode } : {}
16
+ };
17
+ }
18
+
19
+ function sanitizeGeometry(cols, rows) {
20
+ const ok = (v) => typeof v === "number" && Number.isInteger(v) && v >= 2 && v <= 1e4;
21
+ return ok(cols) && ok(rows) ? { cols, rows } : void 0;
22
+ }
23
+ function sanitizeTagList(value) {
24
+ if (!Array.isArray(value)) return void 0;
25
+ const out = [];
26
+ for (const tag of value) {
27
+ if (typeof tag !== "string") continue;
28
+ const clean = tag.trim();
29
+ if (clean && !out.includes(clean)) out.push(clean);
30
+ if (out.length >= 64) break;
31
+ }
32
+ return out;
33
+ }
34
+ const LIVE_SNAPSHOT_TTL_MS = 14 * 24 * 60 * 60 * 1e3;
35
+ const LIVE_SNAPSHOT_MAX = 100;
36
+ function sanitizeLiveSnapshot(raw, now, ttlMs = LIVE_SNAPSHOT_TTL_MS, max = LIVE_SNAPSHOT_MAX) {
37
+ const out = /* @__PURE__ */ new Map();
38
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) return out;
39
+ const rows = [];
40
+ for (const [id, value] of Object.entries(raw)) {
41
+ if (!id || !value || typeof value !== "object") continue;
42
+ const { title, cwd, seenAt, tags, manual, attachTmux, cols: rawCols, rows: rawRows } = value;
43
+ if (typeof seenAt !== "number" || !Number.isFinite(seenAt)) continue;
44
+ if (now - seenAt >= ttlMs) continue;
45
+ const tagList = sanitizeTagList(tags);
46
+ rows.push([id, {
47
+ title: typeof title === "string" && title.trim() ? title : void 0,
48
+ cwd: typeof cwd === "string" && cwd ? cwd : void 0,
49
+ ...tagList !== void 0 ? { tags: tagList } : {},
50
+ ...manual === true ? { manual: true } : {},
51
+ ...typeof attachTmux === "string" && attachTmux ? { attachTmux } : {},
52
+ ...sanitizeGeometry(rawCols, rawRows) ?? {},
53
+ seenAt
54
+ }]);
55
+ }
56
+ rows.sort((a, b) => b[1].seenAt - a[1].seenAt);
57
+ for (const [id, info] of rows.slice(0, max)) out.set(id, info);
58
+ return out;
59
+ }
60
+ function serializeLiveSnapshot(map, max = LIVE_SNAPSHOT_MAX) {
61
+ const rows = [...map.entries()].sort((a, b) => b[1].seenAt - a[1].seenAt).slice(0, max);
62
+ const out = {};
63
+ for (const [id, info] of rows) out[id] = info;
64
+ return out;
65
+ }
66
+ function liveSnapshotChanged(prev, next) {
67
+ if (prev.size !== next.size) return true;
68
+ for (const [id, info] of next) {
69
+ const before = prev.get(id);
70
+ if (!before) return true;
71
+ if (before.title !== info.title || before.cwd !== info.cwd) return true;
72
+ if (!!before.manual !== !!info.manual) return true;
73
+ if ((before.attachTmux ?? "") !== (info.attachTmux ?? "")) return true;
74
+ if ((before.tags ?? []).join("\0") !== (info.tags ?? []).join("\0")) return true;
75
+ if (before.cols !== info.cols || before.rows !== info.rows) return true;
76
+ }
77
+ return false;
78
+ }
79
+ const CLAUDE_SESSION_ID_RE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
80
+ function isClaudeSessionId(value) {
81
+ return typeof value === "string" && CLAUDE_SESSION_ID_RE.test(value);
82
+ }
83
+ function pickMirrorForTerminal(sessions, terminalId) {
84
+ if (!terminalId) return null;
85
+ let best = null;
86
+ for (const [id, session] of Object.entries(sessions || {})) {
87
+ const meta = session?.metadata;
88
+ if (!meta || meta.terminalId !== terminalId) continue;
89
+ const savedAt = typeof session.savedAt === "number" ? session.savedAt : 0;
90
+ if (best && savedAt <= best.savedAt) continue;
91
+ best = {
92
+ id,
93
+ savedAt,
94
+ claude: isClaudeSessionId(meta.claudeSessionId) ? meta.claudeSessionId : void 0
95
+ };
96
+ }
97
+ return best ? { sessionId: best.id, claudeSessionId: best.claude } : null;
98
+ }
99
+
100
+ function parseTerminalHookPayload(body) {
101
+ if (!body || typeof body !== "object") return null;
102
+ const raw = body;
103
+ const eventName = raw.hook_event_name;
104
+ if (eventName !== "SessionStart" && eventName !== "SessionEnd") return null;
105
+ const claudeSessionId = typeof raw.session_id === "string" && raw.session_id.length > 0 ? raw.session_id : typeof raw.sessionId === "string" && raw.sessionId.length > 0 ? raw.sessionId : null;
106
+ if (!claudeSessionId) return null;
107
+ const terminalId = typeof raw.terminalId === "string" && raw.terminalId.length > 0 ? raw.terminalId : null;
108
+ if (!terminalId) return null;
109
+ return {
110
+ event: eventName,
111
+ claudeSessionId,
112
+ terminalId,
113
+ transcriptPath: typeof raw.transcript_path === "string" && raw.transcript_path.length > 0 ? raw.transcript_path : void 0,
114
+ cwd: typeof raw.cwd === "string" && raw.cwd.length > 0 ? raw.cwd : void 0,
115
+ source: typeof raw.source === "string" && raw.source.length > 0 ? raw.source : void 0
116
+ };
117
+ }
118
+ const FRESH_CONVERSATION_SOURCES = /* @__PURE__ */ new Set(["startup", "clear"]);
119
+ function decideMirrorBinding(event, binding) {
120
+ if (event.event === "SessionEnd") {
121
+ if (!binding) return { action: "ignore", reason: "no binding for terminal" };
122
+ if (binding.claudeSessionId !== event.claudeSessionId) {
123
+ return { action: "ignore", reason: "stale SessionEnd for a superseded claude session" };
124
+ }
125
+ if (binding.status === "ended") return { action: "ignore", reason: "already ended" };
126
+ return { action: "end" };
127
+ }
128
+ if (!binding) return { action: "create" };
129
+ if (binding.status === "active" && binding.claudeSessionId === event.claudeSessionId) {
130
+ return { action: "ignore", reason: "duplicate SessionStart for the bound session" };
131
+ }
132
+ if (FRESH_CONVERSATION_SOURCES.has(event.source ?? "startup")) {
133
+ return { action: "create", replaces: binding };
134
+ }
135
+ return { action: "continue" };
136
+ }
137
+ function mirrorLineKey(message) {
138
+ if (message.type === "summary") return `summary-${message.leafUuid}`;
139
+ if (message.type === "user" || message.type === "assistant" || message.type === "system") {
140
+ return message.uuid;
141
+ }
142
+ return null;
143
+ }
144
+ function mirrorLocalId(lineKey, envelopeIndex) {
145
+ return `mirror:${lineKey}:${envelopeIndex}`;
146
+ }
147
+ function extractCompleteLines(buf) {
148
+ const lastNl = buf.lastIndexOf(10);
149
+ if (lastNl === -1) return { lines: [], consumedBytes: 0 };
150
+ const text = buf.subarray(0, lastNl).toString("utf-8");
151
+ const lines = text.split("\n").filter((l) => l.trim().length > 0);
152
+ return { lines, consumedBytes: lastNl + 1 };
153
+ }
154
+ const MIRROR_SEND_MAX_CHARS = 16384;
155
+ function parseMirrorSendParams(params, isValidTerminalId) {
156
+ if (!params || typeof params !== "object") return { error: "invalid params" };
157
+ const { terminalId, text, submit } = params;
158
+ if (!isValidTerminalId(terminalId)) return { error: "invalid terminalId" };
159
+ if (typeof text !== "string" || text.length === 0) return { error: "text is required" };
160
+ if (text.length > MIRROR_SEND_MAX_CHARS) return { error: `text too long (max ${MIRROR_SEND_MAX_CHARS} chars)` };
161
+ return { terminalId, text, submit: submit !== false };
162
+ }
163
+ const MIRROR_BACKFILL_LINES_DEFAULT = 500;
164
+ function decideBackfill(messages, maxLines) {
165
+ const cap = Math.max(0, Math.floor(maxLines));
166
+ if (messages.length <= cap) return { replay: messages, truncated: false };
167
+ return { replay: messages.slice(messages.length - cap), truncated: true };
168
+ }
169
+
170
+ export { MIRROR_BACKFILL_LINES_DEFAULT as M, sanitizeLiveSnapshot as a, serializeLiveSnapshot as b, summarizeSpawnSessionForLog as c, parseMirrorSendParams as d, extractCompleteLines as e, decideBackfill as f, parseTerminalHookPayload as g, decideMirrorBinding as h, isClaudeSessionId as i, mirrorLocalId as j, liveSnapshotChanged as l, mirrorLineKey as m, pickMirrorForTerminal as p, sanitizeTagList as s };
@@ -0,0 +1,186 @@
1
+ 'use strict';
2
+
3
+ function summarizeSpawnSessionForLog(value) {
4
+ const input = value && typeof value === "object" ? value : {};
5
+ const environmentVariables = input.environmentVariables && typeof input.environmentVariables === "object" ? input.environmentVariables : {};
6
+ return {
7
+ ...typeof input.agent === "string" ? { agent: input.agent } : {},
8
+ ...typeof input.variant === "string" ? { variant: input.variant } : {},
9
+ ...typeof input.sessionId === "string" ? { sessionId: input.sessionId } : {},
10
+ hasDirectory: typeof input.directory === "string" && input.directory.length > 0,
11
+ hasToken: typeof input.token === "string" && input.token.length > 0,
12
+ environmentVariableNames: Object.keys(environmentVariables).sort(),
13
+ resumesClaude: typeof input.resumeClaudeSessionId === "string" && input.resumeClaudeSessionId.length > 0,
14
+ resumesCodex: typeof input.resumeCodexThreadId === "string" && input.resumeCodexThreadId.length > 0,
15
+ importsClaude: typeof input.importedFromClaudeSessionId === "string" && input.importedFromClaudeSessionId.length > 0,
16
+ forceNew: input.forceNew === true,
17
+ ...typeof input.permissionMode === "string" ? { permissionMode: input.permissionMode } : {}
18
+ };
19
+ }
20
+
21
+ function sanitizeGeometry(cols, rows) {
22
+ const ok = (v) => typeof v === "number" && Number.isInteger(v) && v >= 2 && v <= 1e4;
23
+ return ok(cols) && ok(rows) ? { cols, rows } : void 0;
24
+ }
25
+ function sanitizeTagList(value) {
26
+ if (!Array.isArray(value)) return void 0;
27
+ const out = [];
28
+ for (const tag of value) {
29
+ if (typeof tag !== "string") continue;
30
+ const clean = tag.trim();
31
+ if (clean && !out.includes(clean)) out.push(clean);
32
+ if (out.length >= 64) break;
33
+ }
34
+ return out;
35
+ }
36
+ const LIVE_SNAPSHOT_TTL_MS = 14 * 24 * 60 * 60 * 1e3;
37
+ const LIVE_SNAPSHOT_MAX = 100;
38
+ function sanitizeLiveSnapshot(raw, now, ttlMs = LIVE_SNAPSHOT_TTL_MS, max = LIVE_SNAPSHOT_MAX) {
39
+ const out = /* @__PURE__ */ new Map();
40
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) return out;
41
+ const rows = [];
42
+ for (const [id, value] of Object.entries(raw)) {
43
+ if (!id || !value || typeof value !== "object") continue;
44
+ const { title, cwd, seenAt, tags, manual, attachTmux, cols: rawCols, rows: rawRows } = value;
45
+ if (typeof seenAt !== "number" || !Number.isFinite(seenAt)) continue;
46
+ if (now - seenAt >= ttlMs) continue;
47
+ const tagList = sanitizeTagList(tags);
48
+ rows.push([id, {
49
+ title: typeof title === "string" && title.trim() ? title : void 0,
50
+ cwd: typeof cwd === "string" && cwd ? cwd : void 0,
51
+ ...tagList !== void 0 ? { tags: tagList } : {},
52
+ ...manual === true ? { manual: true } : {},
53
+ ...typeof attachTmux === "string" && attachTmux ? { attachTmux } : {},
54
+ ...sanitizeGeometry(rawCols, rawRows) ?? {},
55
+ seenAt
56
+ }]);
57
+ }
58
+ rows.sort((a, b) => b[1].seenAt - a[1].seenAt);
59
+ for (const [id, info] of rows.slice(0, max)) out.set(id, info);
60
+ return out;
61
+ }
62
+ function serializeLiveSnapshot(map, max = LIVE_SNAPSHOT_MAX) {
63
+ const rows = [...map.entries()].sort((a, b) => b[1].seenAt - a[1].seenAt).slice(0, max);
64
+ const out = {};
65
+ for (const [id, info] of rows) out[id] = info;
66
+ return out;
67
+ }
68
+ function liveSnapshotChanged(prev, next) {
69
+ if (prev.size !== next.size) return true;
70
+ for (const [id, info] of next) {
71
+ const before = prev.get(id);
72
+ if (!before) return true;
73
+ if (before.title !== info.title || before.cwd !== info.cwd) return true;
74
+ if (!!before.manual !== !!info.manual) return true;
75
+ if ((before.attachTmux ?? "") !== (info.attachTmux ?? "")) return true;
76
+ if ((before.tags ?? []).join("\0") !== (info.tags ?? []).join("\0")) return true;
77
+ if (before.cols !== info.cols || before.rows !== info.rows) return true;
78
+ }
79
+ return false;
80
+ }
81
+ const CLAUDE_SESSION_ID_RE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
82
+ function isClaudeSessionId(value) {
83
+ return typeof value === "string" && CLAUDE_SESSION_ID_RE.test(value);
84
+ }
85
+ function pickMirrorForTerminal(sessions, terminalId) {
86
+ if (!terminalId) return null;
87
+ let best = null;
88
+ for (const [id, session] of Object.entries(sessions || {})) {
89
+ const meta = session?.metadata;
90
+ if (!meta || meta.terminalId !== terminalId) continue;
91
+ const savedAt = typeof session.savedAt === "number" ? session.savedAt : 0;
92
+ if (best && savedAt <= best.savedAt) continue;
93
+ best = {
94
+ id,
95
+ savedAt,
96
+ claude: isClaudeSessionId(meta.claudeSessionId) ? meta.claudeSessionId : void 0
97
+ };
98
+ }
99
+ return best ? { sessionId: best.id, claudeSessionId: best.claude } : null;
100
+ }
101
+
102
+ function parseTerminalHookPayload(body) {
103
+ if (!body || typeof body !== "object") return null;
104
+ const raw = body;
105
+ const eventName = raw.hook_event_name;
106
+ if (eventName !== "SessionStart" && eventName !== "SessionEnd") return null;
107
+ const claudeSessionId = typeof raw.session_id === "string" && raw.session_id.length > 0 ? raw.session_id : typeof raw.sessionId === "string" && raw.sessionId.length > 0 ? raw.sessionId : null;
108
+ if (!claudeSessionId) return null;
109
+ const terminalId = typeof raw.terminalId === "string" && raw.terminalId.length > 0 ? raw.terminalId : null;
110
+ if (!terminalId) return null;
111
+ return {
112
+ event: eventName,
113
+ claudeSessionId,
114
+ terminalId,
115
+ transcriptPath: typeof raw.transcript_path === "string" && raw.transcript_path.length > 0 ? raw.transcript_path : void 0,
116
+ cwd: typeof raw.cwd === "string" && raw.cwd.length > 0 ? raw.cwd : void 0,
117
+ source: typeof raw.source === "string" && raw.source.length > 0 ? raw.source : void 0
118
+ };
119
+ }
120
+ const FRESH_CONVERSATION_SOURCES = /* @__PURE__ */ new Set(["startup", "clear"]);
121
+ function decideMirrorBinding(event, binding) {
122
+ if (event.event === "SessionEnd") {
123
+ if (!binding) return { action: "ignore", reason: "no binding for terminal" };
124
+ if (binding.claudeSessionId !== event.claudeSessionId) {
125
+ return { action: "ignore", reason: "stale SessionEnd for a superseded claude session" };
126
+ }
127
+ if (binding.status === "ended") return { action: "ignore", reason: "already ended" };
128
+ return { action: "end" };
129
+ }
130
+ if (!binding) return { action: "create" };
131
+ if (binding.status === "active" && binding.claudeSessionId === event.claudeSessionId) {
132
+ return { action: "ignore", reason: "duplicate SessionStart for the bound session" };
133
+ }
134
+ if (FRESH_CONVERSATION_SOURCES.has(event.source ?? "startup")) {
135
+ return { action: "create", replaces: binding };
136
+ }
137
+ return { action: "continue" };
138
+ }
139
+ function mirrorLineKey(message) {
140
+ if (message.type === "summary") return `summary-${message.leafUuid}`;
141
+ if (message.type === "user" || message.type === "assistant" || message.type === "system") {
142
+ return message.uuid;
143
+ }
144
+ return null;
145
+ }
146
+ function mirrorLocalId(lineKey, envelopeIndex) {
147
+ return `mirror:${lineKey}:${envelopeIndex}`;
148
+ }
149
+ function extractCompleteLines(buf) {
150
+ const lastNl = buf.lastIndexOf(10);
151
+ if (lastNl === -1) return { lines: [], consumedBytes: 0 };
152
+ const text = buf.subarray(0, lastNl).toString("utf-8");
153
+ const lines = text.split("\n").filter((l) => l.trim().length > 0);
154
+ return { lines, consumedBytes: lastNl + 1 };
155
+ }
156
+ const MIRROR_SEND_MAX_CHARS = 16384;
157
+ function parseMirrorSendParams(params, isValidTerminalId) {
158
+ if (!params || typeof params !== "object") return { error: "invalid params" };
159
+ const { terminalId, text, submit } = params;
160
+ if (!isValidTerminalId(terminalId)) return { error: "invalid terminalId" };
161
+ if (typeof text !== "string" || text.length === 0) return { error: "text is required" };
162
+ if (text.length > MIRROR_SEND_MAX_CHARS) return { error: `text too long (max ${MIRROR_SEND_MAX_CHARS} chars)` };
163
+ return { terminalId, text, submit: submit !== false };
164
+ }
165
+ const MIRROR_BACKFILL_LINES_DEFAULT = 500;
166
+ function decideBackfill(messages, maxLines) {
167
+ const cap = Math.max(0, Math.floor(maxLines));
168
+ if (messages.length <= cap) return { replay: messages, truncated: false };
169
+ return { replay: messages.slice(messages.length - cap), truncated: true };
170
+ }
171
+
172
+ exports.MIRROR_BACKFILL_LINES_DEFAULT = MIRROR_BACKFILL_LINES_DEFAULT;
173
+ exports.decideBackfill = decideBackfill;
174
+ exports.decideMirrorBinding = decideMirrorBinding;
175
+ exports.extractCompleteLines = extractCompleteLines;
176
+ exports.isClaudeSessionId = isClaudeSessionId;
177
+ exports.liveSnapshotChanged = liveSnapshotChanged;
178
+ exports.mirrorLineKey = mirrorLineKey;
179
+ exports.mirrorLocalId = mirrorLocalId;
180
+ exports.parseMirrorSendParams = parseMirrorSendParams;
181
+ exports.parseTerminalHookPayload = parseTerminalHookPayload;
182
+ exports.pickMirrorForTerminal = pickMirrorForTerminal;
183
+ exports.sanitizeLiveSnapshot = sanitizeLiveSnapshot;
184
+ exports.sanitizeTagList = sanitizeTagList;
185
+ exports.serializeLiveSnapshot = serializeLiveSnapshot;
186
+ exports.summarizeSpawnSessionForLog = summarizeSpawnSessionForLog;
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ const TITLE_PROMPT_PREFIX = "Summarize the SPECIFIC topic/request of this message into a 3-6 word title";
4
+ const BOARD_ANALYZER_PROMPT_PREFIX = "You are a status analyzer for a task board of coding-agent sessions.";
5
+ const VERY_HAPPY_ONE_SHOT_PROMPT_PREFIXES = [
6
+ TITLE_PROMPT_PREFIX,
7
+ BOARD_ANALYZER_PROMPT_PREFIX
8
+ ];
9
+ function isVeryHappyOneShotPrompt(firstPrompt) {
10
+ const text = firstPrompt.trimStart();
11
+ return VERY_HAPPY_ONE_SHOT_PROMPT_PREFIXES.some((prefix) => text.startsWith(prefix));
12
+ }
13
+
14
+ exports.BOARD_ANALYZER_PROMPT_PREFIX = BOARD_ANALYZER_PROMPT_PREFIX;
15
+ exports.TITLE_PROMPT_PREFIX = TITLE_PROMPT_PREFIX;
16
+ exports.isVeryHappyOneShotPrompt = isVeryHappyOneShotPrompt;
@@ -0,0 +1,12 @@
1
+ const TITLE_PROMPT_PREFIX = "Summarize the SPECIFIC topic/request of this message into a 3-6 word title";
2
+ const BOARD_ANALYZER_PROMPT_PREFIX = "You are a status analyzer for a task board of coding-agent sessions.";
3
+ const VERY_HAPPY_ONE_SHOT_PROMPT_PREFIXES = [
4
+ TITLE_PROMPT_PREFIX,
5
+ BOARD_ANALYZER_PROMPT_PREFIX
6
+ ];
7
+ function isVeryHappyOneShotPrompt(firstPrompt) {
8
+ const text = firstPrompt.trimStart();
9
+ return VERY_HAPPY_ONE_SHOT_PROMPT_PREFIXES.some((prefix) => text.startsWith(prefix));
10
+ }
11
+
12
+ export { BOARD_ANALYZER_PROMPT_PREFIX as B, TITLE_PROMPT_PREFIX as T, isVeryHappyOneShotPrompt as i };
@@ -0,0 +1,173 @@
1
+ 'use strict';
2
+
3
+ var name = "very-happy-cli";
4
+ var version = "0.2.161";
5
+ var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
6
+ var author = "Kirill Dubovitskiy";
7
+ var contributors = [
8
+ "Mereith (very-happy-cli fork)"
9
+ ];
10
+ var license = "MIT";
11
+ var engines = {
12
+ node: "^20.19.0 || ^22.13.0 || >=24.0.0"
13
+ };
14
+ var type = "module";
15
+ var homepage = "https://github.com/Mereithhh/very-happy";
16
+ var bugs = "https://github.com/Mereithhh/very-happy/issues";
17
+ var repository = {
18
+ type: "git",
19
+ url: "git+https://github.com/Mereithhh/very-happy.git"
20
+ };
21
+ var bin = {
22
+ "very-happy": "./bin/very-happy.mjs",
23
+ "very-happy-mcp": "./bin/very-happy-mcp.mjs"
24
+ };
25
+ var main = "./dist/index.cjs";
26
+ var module$1 = "./dist/index.mjs";
27
+ var types = "./dist/index.d.cts";
28
+ var exports$1 = {
29
+ "./pi-extension": {
30
+ types: "./dist/piExtension.d.mts",
31
+ "default": "./dist/piExtension.mjs"
32
+ },
33
+ ".": {
34
+ require: {
35
+ types: "./dist/index.d.cts",
36
+ "default": "./dist/index.cjs"
37
+ },
38
+ "import": {
39
+ types: "./dist/index.d.mts",
40
+ "default": "./dist/index.mjs"
41
+ }
42
+ },
43
+ "./lib": {
44
+ require: {
45
+ types: "./dist/lib.d.cts",
46
+ "default": "./dist/lib.cjs"
47
+ },
48
+ "import": {
49
+ types: "./dist/lib.d.mts",
50
+ "default": "./dist/lib.mjs"
51
+ }
52
+ },
53
+ "./codex/happyMcpStdioBridge": {
54
+ require: {
55
+ types: "./dist/codex/happyMcpStdioBridge.d.cts",
56
+ "default": "./dist/codex/happyMcpStdioBridge.cjs"
57
+ },
58
+ "import": {
59
+ types: "./dist/codex/happyMcpStdioBridge.d.mts",
60
+ "default": "./dist/codex/happyMcpStdioBridge.mjs"
61
+ }
62
+ }
63
+ };
64
+ var files = [
65
+ "dist",
66
+ "bin",
67
+ "scripts",
68
+ "tools/licenses",
69
+ "package.json",
70
+ "README.md",
71
+ "LICENSE"
72
+ ];
73
+ var scripts = {
74
+ typecheck: "tsc --noEmit",
75
+ "bundle:server": "node scripts/bundle-server.cjs",
76
+ "bundle:server:all": "node scripts/bundle-server.cjs --all-platforms",
77
+ "bundle:webapp": "node scripts/bundle-webapp.cjs",
78
+ build: "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc --noEmit && pkgroll",
79
+ test: "pnpm run build && vitest run --project unit",
80
+ "test:integration": "pnpm run build && vitest run --project integration-empty --project integration-plan-mode --project integration-authenticated",
81
+ "cli:install": "node scripts/install-local.cjs",
82
+ prepublishOnly: "pnpm test",
83
+ postinstall: "node scripts/unpack-tools.cjs && node scripts/fix-pty-perms.cjs"
84
+ };
85
+ var dependencies = {
86
+ "@agentclientprotocol/sdk": "^0.14.1",
87
+ "@anthropic-ai/claude-agent-sdk": "0.3.281",
88
+ "@anthropic-ai/sandbox-runtime": "^0.0.37",
89
+ "@modelcontextprotocol/sdk": "1.30.0",
90
+ "@noble/ed25519": "^3.0.0",
91
+ "@noble/hashes": "^2.0.1",
92
+ "@paralleldrive/cuid2": "^2.2.2",
93
+ "@stablelib/base64": "^2.0.1",
94
+ "@stablelib/hex": "^2.0.1",
95
+ "@types/cross-spawn": "^6.0.6",
96
+ "@types/http-proxy": "^1.17.17",
97
+ "@types/react": "^19.2.7",
98
+ "@types/tmp": "^0.2.6",
99
+ axios: "^1.13.2",
100
+ chalk: "^5.6.2",
101
+ "cross-spawn": "^7.0.6",
102
+ "expo-server-sdk": "^3.15.0",
103
+ fastify: "5.8.5",
104
+ "fastify-type-provider-zod": "^6.1.0",
105
+ "http-proxy": "^1.18.1",
106
+ "http-proxy-middleware": "^3.0.7",
107
+ ink: "^6.5.1",
108
+ inquirer: "^13.2.2",
109
+ "node-pty": "^1.0.0",
110
+ open: "^10.2.0",
111
+ "ps-list": "^8.1.1",
112
+ react: "^19.2.0",
113
+ "socket.io-client": "^4.8.1",
114
+ tar: "^7.5.22",
115
+ tmp: "^0.2.7",
116
+ tweetnacl: "^1.0.3",
117
+ ws: "^8.21.3",
118
+ zod: "^4.0.0"
119
+ };
120
+ var optionalDependencies = {
121
+ "very-happy-tools-arm64-darwin": "0.2.161",
122
+ "very-happy-tools-x64-darwin": "0.2.161",
123
+ "very-happy-tools-arm64-linux": "0.2.161",
124
+ "very-happy-tools-x64-linux": "0.2.161",
125
+ "very-happy-tools-arm64-win32": "0.2.161",
126
+ "very-happy-tools-x64-win32": "0.2.161"
127
+ };
128
+ var devDependencies = {
129
+ "@slopus/happy-wire": "workspace:*",
130
+ "@xterm/addon-serialize": "0.13.0",
131
+ "@xterm/headless": "5.5.0",
132
+ "@types/inquirer": "^9.0.9",
133
+ "@types/node": ">=20",
134
+ "@types/ws": "^8.18.1",
135
+ "cross-env": "^10.1.0",
136
+ dotenv: "^16.6.1",
137
+ pkgroll: "^2.14.2",
138
+ "ts-node": "^10",
139
+ tsx: "^4.20.6",
140
+ typescript: "5.9.3",
141
+ vitest: "3.2.6"
142
+ };
143
+ var publishConfig = {
144
+ registry: "https://registry.npmjs.org"
145
+ };
146
+ var packageManager = "pnpm@10.11.0";
147
+ var packageJson = {
148
+ name: name,
149
+ version: version,
150
+ description: description,
151
+ author: author,
152
+ contributors: contributors,
153
+ license: license,
154
+ engines: engines,
155
+ type: type,
156
+ homepage: homepage,
157
+ bugs: bugs,
158
+ repository: repository,
159
+ bin: bin,
160
+ main: main,
161
+ module: module$1,
162
+ types: types,
163
+ exports: exports$1,
164
+ files: files,
165
+ scripts: scripts,
166
+ dependencies: dependencies,
167
+ optionalDependencies: optionalDependencies,
168
+ devDependencies: devDependencies,
169
+ publishConfig: publishConfig,
170
+ packageManager: packageManager
171
+ };
172
+
173
+ exports.packageJson = packageJson;