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,66 @@
1
+ 'use strict';
2
+
3
+ var z = require('zod');
4
+
5
+ const UsageSchema = z.z.object({
6
+ input_tokens: z.z.number().int().nonnegative(),
7
+ cache_creation_input_tokens: z.z.number().int().nonnegative().optional(),
8
+ cache_read_input_tokens: z.z.number().int().nonnegative().optional(),
9
+ output_tokens: z.z.number().int().nonnegative(),
10
+ service_tier: z.z.string().optional()
11
+ }).passthrough();
12
+ const RawJSONLinesSchema = z.z.discriminatedUnion("type", [
13
+ // User message - validates uuid and message.content
14
+ z.z.object({
15
+ type: z.z.literal("user"),
16
+ isSidechain: z.z.boolean().optional(),
17
+ isMeta: z.z.boolean().optional(),
18
+ uuid: z.z.string(),
19
+ // Used in getMessageKey()
20
+ message: z.z.object({
21
+ content: z.z.union([z.z.string(), z.z.any()])
22
+ // Used in sessionScanner.ts
23
+ }).passthrough()
24
+ }).passthrough(),
25
+ // Assistant message - only validates uuid and type
26
+ // message object is optional to handle synthetic error messages (isApiErrorMessage: true)
27
+ // which may have different structure than normal assistant messages
28
+ z.z.object({
29
+ uuid: z.z.string(),
30
+ type: z.z.literal("assistant"),
31
+ message: z.z.object({
32
+ usage: UsageSchema.optional(),
33
+ // Used in apiSession.ts
34
+ model: z.z.string().optional()
35
+ // Used for cost calculation
36
+ }).passthrough().optional()
37
+ }).passthrough(),
38
+ // Summary message - validates summary and leafUuid
39
+ z.z.object({
40
+ type: z.z.literal("summary"),
41
+ summary: z.z.string(),
42
+ // Used in apiSession.ts
43
+ leafUuid: z.z.string()
44
+ // Used in getMessageKey()
45
+ }).passthrough(),
46
+ // System message - validates uuid
47
+ z.z.object({
48
+ type: z.z.literal("system"),
49
+ uuid: z.z.string()
50
+ // Used in getMessageKey()
51
+ }).passthrough(),
52
+ // Result message - SDK turn-completion summary. Carries per-turn cost,
53
+ // duration, turn count and cumulative usage so the app can render them.
54
+ z.z.object({
55
+ type: z.z.literal("result"),
56
+ subtype: z.z.string().optional(),
57
+ is_error: z.z.boolean().optional(),
58
+ result: z.z.string().optional(),
59
+ total_cost_usd: z.z.number().optional(),
60
+ duration_ms: z.z.number().optional(),
61
+ num_turns: z.z.number().optional(),
62
+ usage: UsageSchema.optional()
63
+ }).passthrough()
64
+ ]);
65
+
66
+ exports.RawJSONLinesSchema = RawJSONLinesSchema;
@@ -0,0 +1,64 @@
1
+ import { z } from 'zod';
2
+
3
+ const UsageSchema = z.object({
4
+ input_tokens: z.number().int().nonnegative(),
5
+ cache_creation_input_tokens: z.number().int().nonnegative().optional(),
6
+ cache_read_input_tokens: z.number().int().nonnegative().optional(),
7
+ output_tokens: z.number().int().nonnegative(),
8
+ service_tier: z.string().optional()
9
+ }).passthrough();
10
+ const RawJSONLinesSchema = z.discriminatedUnion("type", [
11
+ // User message - validates uuid and message.content
12
+ z.object({
13
+ type: z.literal("user"),
14
+ isSidechain: z.boolean().optional(),
15
+ isMeta: z.boolean().optional(),
16
+ uuid: z.string(),
17
+ // Used in getMessageKey()
18
+ message: z.object({
19
+ content: z.union([z.string(), z.any()])
20
+ // Used in sessionScanner.ts
21
+ }).passthrough()
22
+ }).passthrough(),
23
+ // Assistant message - only validates uuid and type
24
+ // message object is optional to handle synthetic error messages (isApiErrorMessage: true)
25
+ // which may have different structure than normal assistant messages
26
+ z.object({
27
+ uuid: z.string(),
28
+ type: z.literal("assistant"),
29
+ message: z.object({
30
+ usage: UsageSchema.optional(),
31
+ // Used in apiSession.ts
32
+ model: z.string().optional()
33
+ // Used for cost calculation
34
+ }).passthrough().optional()
35
+ }).passthrough(),
36
+ // Summary message - validates summary and leafUuid
37
+ z.object({
38
+ type: z.literal("summary"),
39
+ summary: z.string(),
40
+ // Used in apiSession.ts
41
+ leafUuid: z.string()
42
+ // Used in getMessageKey()
43
+ }).passthrough(),
44
+ // System message - validates uuid
45
+ z.object({
46
+ type: z.literal("system"),
47
+ uuid: z.string()
48
+ // Used in getMessageKey()
49
+ }).passthrough(),
50
+ // Result message - SDK turn-completion summary. Carries per-turn cost,
51
+ // duration, turn count and cumulative usage so the app can render them.
52
+ z.object({
53
+ type: z.literal("result"),
54
+ subtype: z.string().optional(),
55
+ is_error: z.boolean().optional(),
56
+ result: z.string().optional(),
57
+ total_cost_usd: z.number().optional(),
58
+ duration_ms: z.number().optional(),
59
+ num_turns: z.number().optional(),
60
+ usage: UsageSchema.optional()
61
+ }).passthrough()
62
+ ]);
63
+
64
+ export { RawJSONLinesSchema as R };
@@ -0,0 +1,47 @@
1
+ import { l as logger } from './logger-fXoNzNuB.mjs';
2
+ import { existsSync, unlinkSync } from 'fs';
3
+ import { execSync } from 'child_process';
4
+ import 'chalk';
5
+ import 'node:util';
6
+ import './configuration-DoWFJUPm.mjs';
7
+ import 'node:fs';
8
+ import 'node:os';
9
+ import 'node:path';
10
+ import './package-uOg9SCKi.mjs';
11
+ import 'node:fs/promises';
12
+
13
+ const PLIST_LABEL = "com.happy-cli.daemon";
14
+ const PLIST_FILE = `/Library/LaunchDaemons/${PLIST_LABEL}.plist`;
15
+ async function uninstall$1() {
16
+ try {
17
+ if (!existsSync(PLIST_FILE)) {
18
+ logger.info("Daemon plist not found. Nothing to uninstall.");
19
+ return;
20
+ }
21
+ try {
22
+ execSync(`launchctl unload ${PLIST_FILE}`, { stdio: "inherit" });
23
+ logger.info("Daemon stopped successfully");
24
+ } catch (error) {
25
+ logger.info("Failed to unload daemon (it might not be running)");
26
+ }
27
+ unlinkSync(PLIST_FILE);
28
+ logger.info(`Removed daemon plist from ${PLIST_FILE}`);
29
+ logger.info("Daemon uninstalled successfully");
30
+ } catch (error) {
31
+ logger.debug("Failed to uninstall daemon:", error);
32
+ throw error;
33
+ }
34
+ }
35
+
36
+ async function uninstall() {
37
+ if (process.platform !== "darwin") {
38
+ throw new Error("Daemon uninstallation is currently only supported on macOS");
39
+ }
40
+ if (process.getuid && process.getuid() !== 0) {
41
+ throw new Error("Daemon uninstallation requires sudo privileges. Please run with sudo.");
42
+ }
43
+ logger.info("Uninstalling Happy CLI daemon for macOS...");
44
+ await uninstall$1();
45
+ }
46
+
47
+ export { uninstall };
@@ -0,0 +1,49 @@
1
+ 'use strict';
2
+
3
+ var logger = require('./logger-Bc8-u1w0.cjs');
4
+ var fs = require('fs');
5
+ var child_process = require('child_process');
6
+ require('chalk');
7
+ require('node:util');
8
+ require('./configuration-v9f8LM9T.cjs');
9
+ require('node:fs');
10
+ require('node:os');
11
+ require('node:path');
12
+ require('./package-Cl5BEP5x.cjs');
13
+ require('node:fs/promises');
14
+
15
+ const PLIST_LABEL = "com.happy-cli.daemon";
16
+ const PLIST_FILE = `/Library/LaunchDaemons/${PLIST_LABEL}.plist`;
17
+ async function uninstall$1() {
18
+ try {
19
+ if (!fs.existsSync(PLIST_FILE)) {
20
+ logger.logger.info("Daemon plist not found. Nothing to uninstall.");
21
+ return;
22
+ }
23
+ try {
24
+ child_process.execSync(`launchctl unload ${PLIST_FILE}`, { stdio: "inherit" });
25
+ logger.logger.info("Daemon stopped successfully");
26
+ } catch (error) {
27
+ logger.logger.info("Failed to unload daemon (it might not be running)");
28
+ }
29
+ fs.unlinkSync(PLIST_FILE);
30
+ logger.logger.info(`Removed daemon plist from ${PLIST_FILE}`);
31
+ logger.logger.info("Daemon uninstalled successfully");
32
+ } catch (error) {
33
+ logger.logger.debug("Failed to uninstall daemon:", error);
34
+ throw error;
35
+ }
36
+ }
37
+
38
+ async function uninstall() {
39
+ if (process.platform !== "darwin") {
40
+ throw new Error("Daemon uninstallation is currently only supported on macOS");
41
+ }
42
+ if (process.getuid && process.getuid() !== 0) {
43
+ throw new Error("Daemon uninstallation requires sudo privileges. Please run with sudo.");
44
+ }
45
+ logger.logger.info("Uninstalling Happy CLI daemon for macOS...");
46
+ await uninstall$1();
47
+ }
48
+
49
+ exports.uninstall = uninstall;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "very-happy-cli",
3
- "version": "0.2.159",
3
+ "version": "0.2.161",
4
4
  "description": "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.",
5
5
  "author": "Kirill Dubovitskiy",
6
6
  "contributors": [
@@ -117,12 +117,12 @@
117
117
  "zod": "^4.0.0"
118
118
  },
119
119
  "optionalDependencies": {
120
- "very-happy-tools-arm64-darwin": "0.2.159",
121
- "very-happy-tools-x64-darwin": "0.2.159",
122
- "very-happy-tools-arm64-linux": "0.2.159",
123
- "very-happy-tools-x64-linux": "0.2.159",
124
- "very-happy-tools-arm64-win32": "0.2.159",
125
- "very-happy-tools-x64-win32": "0.2.159"
120
+ "very-happy-tools-arm64-darwin": "0.2.161",
121
+ "very-happy-tools-x64-darwin": "0.2.161",
122
+ "very-happy-tools-arm64-linux": "0.2.161",
123
+ "very-happy-tools-x64-linux": "0.2.161",
124
+ "very-happy-tools-arm64-win32": "0.2.161",
125
+ "very-happy-tools-x64-win32": "0.2.161"
126
126
  },
127
127
  "devDependencies": {
128
128
  "@slopus/happy-wire": "workspace:*",
@@ -5,12 +5,19 @@
5
5
  * This script is executed by Claude's SessionStart hook.
6
6
  * It reads JSON data from stdin and forwards it to Happy's hook server.
7
7
  *
8
- * Usage: echo '{"session_id":"..."}' | node session_hook_forwarder.cjs <port>
8
+ * Usage: echo '{"session_id":"..."}' | node session_hook_forwarder.cjs <port> [source]
9
+ *
10
+ * `source` (optional, B-515) tags the request as `?source=<source>` so the
11
+ * hook server can tell which Claude process of the wrapper reported it.
9
12
  */
10
13
 
11
14
  const http = require('http');
12
15
 
13
16
  const port = parseInt(process.argv[2], 10);
17
+ const source = process.argv[3];
18
+ const hookPath = source && /^[A-Za-z0-9_.-]{1,64}$/.test(source)
19
+ ? '/hook/session-start?source=' + encodeURIComponent(source)
20
+ : '/hook/session-start';
14
21
 
15
22
  if (!port || isNaN(port)) {
16
23
  process.exit(1);
@@ -29,7 +36,7 @@ process.stdin.on('end', () => {
29
36
  host: '127.0.0.1',
30
37
  port: port,
31
38
  method: 'POST',
32
- path: '/hook/session-start',
39
+ path: hookPath,
33
40
  headers: {
34
41
  'Content-Type': 'application/json',
35
42
  'Content-Length': body.length