very-happy-cli 0.2.82 → 0.2.84

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 (31) hide show
  1. package/dist/{AcpBackend-DMLCBDru.mjs → AcpBackend-BgOEcqMG.mjs} +1 -1
  2. package/dist/{AcpBackend-DjHJfd8y.cjs → AcpBackend-DxoxNKOM.cjs} +1 -1
  3. package/dist/{AcpSessionManager-xyImjcMI.mjs → AcpSessionManager-Ba9ON7eK.mjs} +1 -1
  4. package/dist/{AcpSessionManager-Bd-LtS2E.cjs → AcpSessionManager-_bG1kjZz.cjs} +1 -1
  5. package/dist/{config-DRjtWNd0.mjs → config-CQjk8rce.mjs} +2 -2
  6. package/dist/{config-BjgfmsPT.cjs → config-Dv2kzos6.cjs} +2 -2
  7. package/dist/{index-BTtTqsj4.cjs → index-B8UoTir2.cjs} +120 -75
  8. package/dist/{index-CR24hlKJ.cjs → index-CULwez6o.cjs} +4 -4
  9. package/dist/{index-1ZE940yd.mjs → index-Cc2VYKqa.mjs} +5 -5
  10. package/dist/{index-DZ7tAffg.mjs → index-Cnb_eI7Q.mjs} +119 -74
  11. package/dist/index.cjs +2 -2
  12. package/dist/index.mjs +2 -2
  13. package/dist/{installTerminalHooks-Do3vnipG.mjs → installTerminalHooks-C-8Vuwlu.mjs} +2 -2
  14. package/dist/{installTerminalHooks-DSfE4ui6.cjs → installTerminalHooks-mk1QIEvp.cjs} +2 -2
  15. package/dist/lib.cjs +1 -1
  16. package/dist/lib.d.cts +2 -0
  17. package/dist/lib.d.mts +2 -0
  18. package/dist/lib.mjs +1 -1
  19. package/dist/{mcp-2Ee6mSAP.mjs → mcp-BZba259A.mjs} +2 -2
  20. package/dist/{mcp-CJHJEBto.cjs → mcp-X7yyQ2d_.cjs} +2 -2
  21. package/dist/{runGemini-Dj7g2-B_.cjs → runGemini-Cf_FQOrg.cjs} +4 -4
  22. package/dist/{runGemini-DQKPf1RX.mjs → runGemini-Nig1hb70.mjs} +4 -4
  23. package/dist/{runOpenClaw-BWAVwl3x.cjs → runOpenClaw-BlZkYWEQ.cjs} +3 -3
  24. package/dist/{runOpenClaw-BNfz77EE.mjs → runOpenClaw-DllszOSy.mjs} +3 -3
  25. package/dist/{send-CIm5kZBx.mjs → send-C6-E03t-.mjs} +2 -2
  26. package/dist/{send-Cm28ijOj.cjs → send-DZIY545W.cjs} +2 -2
  27. package/dist/{spawn-BPgkpGXX.cjs → spawn-Cm52jfN6.cjs} +2 -2
  28. package/dist/{spawn-Dd8qj3l4.mjs → spawn-hjPuTkvH.mjs} +2 -2
  29. package/dist/{types-C4duxyB7.mjs → types-Bv1nc9M1.mjs} +20 -14
  30. package/dist/{types-B7qS_-8e.cjs → types-Dudpkl_i.cjs} +23 -14
  31. package/package.json +7 -7
@@ -29,7 +29,7 @@ import { SandboxManager } from '@anthropic-ai/sandbox-runtime';
29
29
  import { Expo } from 'expo-server-sdk';
30
30
 
31
31
  var name = "very-happy-cli";
32
- var version = "0.2.82";
32
+ var version = "0.2.84";
33
33
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
34
34
  var author = "Kirill Dubovitskiy";
35
35
  var contributors = [
@@ -142,12 +142,12 @@ var dependencies = {
142
142
  zod: "^4.0.0"
143
143
  };
144
144
  var optionalDependencies = {
145
- "very-happy-tools-arm64-darwin": "0.2.82",
146
- "very-happy-tools-x64-darwin": "0.2.82",
147
- "very-happy-tools-arm64-linux": "0.2.82",
148
- "very-happy-tools-x64-linux": "0.2.82",
149
- "very-happy-tools-arm64-win32": "0.2.82",
150
- "very-happy-tools-x64-win32": "0.2.82"
145
+ "very-happy-tools-arm64-darwin": "0.2.84",
146
+ "very-happy-tools-x64-darwin": "0.2.84",
147
+ "very-happy-tools-arm64-linux": "0.2.84",
148
+ "very-happy-tools-x64-linux": "0.2.84",
149
+ "very-happy-tools-arm64-win32": "0.2.84",
150
+ "very-happy-tools-x64-win32": "0.2.84"
151
151
  };
152
152
  var devDependencies = {
153
153
  "@slopus/happy-wire": "workspace:*",
@@ -2779,6 +2779,10 @@ function usageAgentKey(agent) {
2779
2779
  return agent.toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "") || "unknown";
2780
2780
  }
2781
2781
 
2782
+ const MAX_CHAT_ATTACHMENT_SOURCE_BYTES = 50 * 1024 * 1024;
2783
+ const CHAT_ATTACHMENT_ENCRYPTION_OVERHEAD_BYTES = 40;
2784
+ const MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES = MAX_CHAT_ATTACHMENT_SOURCE_BYTES + CHAT_ATTACHMENT_ENCRYPTION_OVERHEAD_BYTES;
2785
+
2782
2786
  class ApiSessionClient extends EventEmitter {
2783
2787
  token;
2784
2788
  sessionId;
@@ -2915,7 +2919,7 @@ class ApiSessionClient extends EventEmitter {
2915
2919
  }
2916
2920
  const body = decrypt(this.encryptionKey, this.encryptionVariant, decodeBase64(data.body.message.content.c));
2917
2921
  logger.debugLargeJson("[SOCKET] [UPDATE] Received update:", body);
2918
- this.routeIncomingMessage(body);
2922
+ this.routeIncomingMessage(body, localId);
2919
2923
  if (localId) this.rememberRoutedInbound(localId);
2920
2924
  this.lastSeq = messageSeq;
2921
2925
  } else if (data.body.t === "update-session") {
@@ -3100,7 +3104,8 @@ class ApiSessionClient extends EventEmitter {
3100
3104
  responseType: "arraybuffer",
3101
3105
  timeout: 6e4,
3102
3106
  maxRedirects: 5,
3103
- maxContentLength: 10 * 1024 * 1024
3107
+ maxContentLength: MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES,
3108
+ maxBodyLength: MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES
3104
3109
  });
3105
3110
  return new Uint8Array(response.data);
3106
3111
  }
@@ -3143,8 +3148,9 @@ class ApiSessionClient extends EventEmitter {
3143
3148
  "X-Happy-Client": `cli-coding-session/${configuration.currentCliVersion}`
3144
3149
  };
3145
3150
  }
3146
- routeIncomingMessage(message) {
3147
- const userResult = UserMessageSchema.safeParse(message);
3151
+ routeIncomingMessage(message, sourceLocalId) {
3152
+ const messageWithSource = sourceLocalId && typeof message === "object" && message !== null ? { ...message, localKey: message.localKey ?? sourceLocalId } : message;
3153
+ const userResult = UserMessageSchema.safeParse(messageWithSource);
3148
3154
  if (userResult.success) {
3149
3155
  if (this.pendingMessageCallback) {
3150
3156
  this.pendingMessageCallback(userResult.data);
@@ -3199,7 +3205,7 @@ class ApiSessionClient extends EventEmitter {
3199
3205
  }
3200
3206
  try {
3201
3207
  const body = decrypt(this.encryptionKey, this.encryptionVariant, decodeBase64(message.content.c));
3202
- this.routeIncomingMessage(body);
3208
+ this.routeIncomingMessage(body, message.localId);
3203
3209
  if (message.localId) this.rememberRoutedInbound(message.localId);
3204
3210
  } catch (error) {
3205
3211
  logger.debug("[API] Failed to decrypt fetched message", {
@@ -3319,7 +3325,7 @@ class ApiSessionClient extends EventEmitter {
3319
3325
  for (const item of batch) {
3320
3326
  if (this.routedInboundLocalIds.has(item.localId)) continue;
3321
3327
  const body = decrypt(this.encryptionKey, this.encryptionVariant, decodeBase64(item.content));
3322
- this.routeIncomingMessage(body);
3328
+ this.routeIncomingMessage(body, item.localId);
3323
3329
  this.rememberRoutedInbound(item.localId);
3324
3330
  }
3325
3331
  callback({ ok: true, messages: stored });
@@ -15135,4 +15141,4 @@ const RawJSONLinesSchema = z$1.discriminatedUnion("type", [
15135
15141
  }).passthrough()
15136
15142
  ]);
15137
15143
 
15138
- export { writeDaemonState as $, ApiClient as A, encodeBase64Url as B, decodeBase64 as C, writeCredentialsLegacy as D, writeCredentialsDataKey as E, readCredentialsForConfiguredRelay as F, encrypt as G, getLocalHappyAgentCredentialPath as H, InvalidateSync as I, readLocalHappyAgentCredentials as J, decryptWithDataKey as K, decryptLegacy as L, extractCompleteLines as M, decideBackfill as N, parseTerminalHookPayload as O, decideMirrorBinding as P, persistSession as Q, RawJSONLinesSchema as R, MIRROR_BACKFILL_LINES_DEFAULT as S, mirrorLineKey as T, mirrorLocalId as U, detectResumeSupport as V, detectCLIAvailability as W, acquireDaemonLock as X, summarizeSpawnSessionForLog as Y, deletePersistedSessions as Z, decrypt as _, ApiSessionClient as a, fetchCliUpdateState as a0, resolveCliUpdateCheckInterval as a1, DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS as a2, releaseDaemonLock as a3, isValidSessionId as a4, listVhTerminals as a5, isValidTerminalId as a6, readVhTerminal as a7, sendToVhTerminal as a8, startOfflineReconnection as a9, clearCredentials as aa, clearMachineId as ab, SandboxConfigSchema as ac, CodexAppServerClient as ad, getLatestDaemonLog as ae, persistence as af, api as ag, createEnvelope as b, configuration as c, contentLogMetadata as d, errorLogMetadata as e, packageJson as f, delay as g, connectionState as h, readSettings as i, encodeBase64 as j, ensurePrivateDirectorySync as k, logger as l, hardenPrivateFileSync as m, readDaemonState as n, clearDaemonState as o, projectPath as p, getProjectPath as q, readPersistedSessions as r, initializeSandbox as s, wrapCommand as t, AsyncLock as u, readCredentials as v, writePrivateFileSync as w, credentialRelayProblem as x, deriveLocalCliUpdateSummary as y, updateSettings as z };
15144
+ export { summarizeSpawnSessionForLog as $, ApiClient as A, deriveLocalCliUpdateSummary as B, updateSettings as C, encodeBase64Url as D, decodeBase64 as E, writeCredentialsLegacy as F, writeCredentialsDataKey as G, readCredentialsForConfiguredRelay as H, InvalidateSync as I, encrypt as J, getLocalHappyAgentCredentialPath as K, readLocalHappyAgentCredentials as L, MAX_CHAT_ATTACHMENT_SOURCE_BYTES as M, decryptWithDataKey as N, decryptLegacy as O, extractCompleteLines as P, decideBackfill as Q, RawJSONLinesSchema as R, parseTerminalHookPayload as S, decideMirrorBinding as T, persistSession as U, MIRROR_BACKFILL_LINES_DEFAULT as V, mirrorLineKey as W, mirrorLocalId as X, detectResumeSupport as Y, detectCLIAvailability as Z, acquireDaemonLock as _, ApiSessionClient as a, deletePersistedSessions as a0, decrypt as a1, writeDaemonState as a2, fetchCliUpdateState as a3, resolveCliUpdateCheckInterval as a4, DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS as a5, releaseDaemonLock as a6, isValidSessionId as a7, listVhTerminals as a8, isValidTerminalId as a9, readVhTerminal as aa, sendToVhTerminal as ab, startOfflineReconnection as ac, clearCredentials as ad, clearMachineId as ae, SandboxConfigSchema as af, CodexAppServerClient as ag, getLatestDaemonLog as ah, persistence as ai, api as aj, createEnvelope as b, configuration as c, contentLogMetadata as d, errorLogMetadata as e, packageJson as f, delay as g, connectionState as h, readSettings as i, encodeBase64 as j, ensurePrivateDirectorySync as k, logger as l, hardenPrivateFileSync as m, readDaemonState as n, clearDaemonState as o, projectPath as p, getProjectPath as q, readPersistedSessions as r, initializeSandbox as s, wrapCommand as t, AsyncLock as u, ensurePrivateDirectory as v, writePrivateFileSync as w, hardenPrivateFile as x, readCredentials as y, credentialRelayProblem as z };
@@ -51,7 +51,7 @@ var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
51
51
  var pty__namespace = /*#__PURE__*/_interopNamespaceDefault(pty);
52
52
 
53
53
  var name = "very-happy-cli";
54
- var version = "0.2.82";
54
+ var version = "0.2.84";
55
55
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
56
56
  var author = "Kirill Dubovitskiy";
57
57
  var contributors = [
@@ -164,12 +164,12 @@ var dependencies = {
164
164
  zod: "^4.0.0"
165
165
  };
166
166
  var optionalDependencies = {
167
- "very-happy-tools-arm64-darwin": "0.2.82",
168
- "very-happy-tools-x64-darwin": "0.2.82",
169
- "very-happy-tools-arm64-linux": "0.2.82",
170
- "very-happy-tools-x64-linux": "0.2.82",
171
- "very-happy-tools-arm64-win32": "0.2.82",
172
- "very-happy-tools-x64-win32": "0.2.82"
167
+ "very-happy-tools-arm64-darwin": "0.2.84",
168
+ "very-happy-tools-x64-darwin": "0.2.84",
169
+ "very-happy-tools-arm64-linux": "0.2.84",
170
+ "very-happy-tools-x64-linux": "0.2.84",
171
+ "very-happy-tools-arm64-win32": "0.2.84",
172
+ "very-happy-tools-x64-win32": "0.2.84"
173
173
  };
174
174
  var devDependencies = {
175
175
  "@slopus/happy-wire": "workspace:*",
@@ -1480,7 +1480,7 @@ class RpcHandlerManager {
1480
1480
  }
1481
1481
  }
1482
1482
 
1483
- const __dirname$1 = path$1.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('types-B7qS_-8e.cjs', document.baseURI).href))));
1483
+ const __dirname$1 = path$1.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('types-Dudpkl_i.cjs', document.baseURI).href))));
1484
1484
  function projectPath() {
1485
1485
  const path = path$1.resolve(__dirname$1, "..");
1486
1486
  return path;
@@ -2801,6 +2801,10 @@ function usageAgentKey(agent) {
2801
2801
  return agent.toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "") || "unknown";
2802
2802
  }
2803
2803
 
2804
+ const MAX_CHAT_ATTACHMENT_SOURCE_BYTES = 50 * 1024 * 1024;
2805
+ const CHAT_ATTACHMENT_ENCRYPTION_OVERHEAD_BYTES = 40;
2806
+ const MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES = MAX_CHAT_ATTACHMENT_SOURCE_BYTES + CHAT_ATTACHMENT_ENCRYPTION_OVERHEAD_BYTES;
2807
+
2804
2808
  class ApiSessionClient extends node_events.EventEmitter {
2805
2809
  token;
2806
2810
  sessionId;
@@ -2937,7 +2941,7 @@ class ApiSessionClient extends node_events.EventEmitter {
2937
2941
  }
2938
2942
  const body = decrypt(this.encryptionKey, this.encryptionVariant, decodeBase64(data.body.message.content.c));
2939
2943
  logger.debugLargeJson("[SOCKET] [UPDATE] Received update:", body);
2940
- this.routeIncomingMessage(body);
2944
+ this.routeIncomingMessage(body, localId);
2941
2945
  if (localId) this.rememberRoutedInbound(localId);
2942
2946
  this.lastSeq = messageSeq;
2943
2947
  } else if (data.body.t === "update-session") {
@@ -3122,7 +3126,8 @@ class ApiSessionClient extends node_events.EventEmitter {
3122
3126
  responseType: "arraybuffer",
3123
3127
  timeout: 6e4,
3124
3128
  maxRedirects: 5,
3125
- maxContentLength: 10 * 1024 * 1024
3129
+ maxContentLength: MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES,
3130
+ maxBodyLength: MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES
3126
3131
  });
3127
3132
  return new Uint8Array(response.data);
3128
3133
  }
@@ -3165,8 +3170,9 @@ class ApiSessionClient extends node_events.EventEmitter {
3165
3170
  "X-Happy-Client": `cli-coding-session/${configuration.currentCliVersion}`
3166
3171
  };
3167
3172
  }
3168
- routeIncomingMessage(message) {
3169
- const userResult = UserMessageSchema.safeParse(message);
3173
+ routeIncomingMessage(message, sourceLocalId) {
3174
+ const messageWithSource = sourceLocalId && typeof message === "object" && message !== null ? { ...message, localKey: message.localKey ?? sourceLocalId } : message;
3175
+ const userResult = UserMessageSchema.safeParse(messageWithSource);
3170
3176
  if (userResult.success) {
3171
3177
  if (this.pendingMessageCallback) {
3172
3178
  this.pendingMessageCallback(userResult.data);
@@ -3221,7 +3227,7 @@ class ApiSessionClient extends node_events.EventEmitter {
3221
3227
  }
3222
3228
  try {
3223
3229
  const body = decrypt(this.encryptionKey, this.encryptionVariant, decodeBase64(message.content.c));
3224
- this.routeIncomingMessage(body);
3230
+ this.routeIncomingMessage(body, message.localId);
3225
3231
  if (message.localId) this.rememberRoutedInbound(message.localId);
3226
3232
  } catch (error) {
3227
3233
  logger.debug("[API] Failed to decrypt fetched message", {
@@ -3341,7 +3347,7 @@ class ApiSessionClient extends node_events.EventEmitter {
3341
3347
  for (const item of batch) {
3342
3348
  if (this.routedInboundLocalIds.has(item.localId)) continue;
3343
3349
  const body = decrypt(this.encryptionKey, this.encryptionVariant, decodeBase64(item.content));
3344
- this.routeIncomingMessage(body);
3350
+ this.routeIncomingMessage(body, item.localId);
3345
3351
  this.rememberRoutedInbound(item.localId);
3346
3352
  }
3347
3353
  callback({ ok: true, messages: stored });
@@ -15163,6 +15169,7 @@ exports.AsyncLock = AsyncLock;
15163
15169
  exports.CodexAppServerClient = CodexAppServerClient;
15164
15170
  exports.DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS = DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS;
15165
15171
  exports.InvalidateSync = InvalidateSync;
15172
+ exports.MAX_CHAT_ATTACHMENT_SOURCE_BYTES = MAX_CHAT_ATTACHMENT_SOURCE_BYTES;
15166
15173
  exports.MIRROR_BACKFILL_LINES_DEFAULT = MIRROR_BACKFILL_LINES_DEFAULT;
15167
15174
  exports.RawJSONLinesSchema = RawJSONLinesSchema;
15168
15175
  exports.SandboxConfigSchema = SandboxConfigSchema;
@@ -15190,6 +15197,7 @@ exports.detectResumeSupport = detectResumeSupport;
15190
15197
  exports.encodeBase64 = encodeBase64;
15191
15198
  exports.encodeBase64Url = encodeBase64Url;
15192
15199
  exports.encrypt = encrypt;
15200
+ exports.ensurePrivateDirectory = ensurePrivateDirectory;
15193
15201
  exports.ensurePrivateDirectorySync = ensurePrivateDirectorySync;
15194
15202
  exports.errorLogMetadata = errorLogMetadata;
15195
15203
  exports.extractCompleteLines = extractCompleteLines;
@@ -15197,6 +15205,7 @@ exports.fetchCliUpdateState = fetchCliUpdateState;
15197
15205
  exports.getLatestDaemonLog = getLatestDaemonLog;
15198
15206
  exports.getLocalHappyAgentCredentialPath = getLocalHappyAgentCredentialPath;
15199
15207
  exports.getProjectPath = getProjectPath;
15208
+ exports.hardenPrivateFile = hardenPrivateFile;
15200
15209
  exports.hardenPrivateFileSync = hardenPrivateFileSync;
15201
15210
  exports.initializeSandbox = initializeSandbox;
15202
15211
  exports.isValidSessionId = isValidSessionId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "very-happy-cli",
3
- "version": "0.2.82",
3
+ "version": "0.2.84",
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": [
@@ -113,12 +113,12 @@
113
113
  "zod": "^4.0.0"
114
114
  },
115
115
  "optionalDependencies": {
116
- "very-happy-tools-arm64-darwin": "0.2.82",
117
- "very-happy-tools-x64-darwin": "0.2.82",
118
- "very-happy-tools-arm64-linux": "0.2.82",
119
- "very-happy-tools-x64-linux": "0.2.82",
120
- "very-happy-tools-arm64-win32": "0.2.82",
121
- "very-happy-tools-x64-win32": "0.2.82"
116
+ "very-happy-tools-arm64-darwin": "0.2.84",
117
+ "very-happy-tools-x64-darwin": "0.2.84",
118
+ "very-happy-tools-arm64-linux": "0.2.84",
119
+ "very-happy-tools-x64-linux": "0.2.84",
120
+ "very-happy-tools-arm64-win32": "0.2.84",
121
+ "very-happy-tools-x64-win32": "0.2.84"
122
122
  },
123
123
  "devDependencies": {
124
124
  "@slopus/happy-wire": "workspace:*",