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.
- package/dist/{AcpBackend-DMLCBDru.mjs → AcpBackend-BgOEcqMG.mjs} +1 -1
- package/dist/{AcpBackend-DjHJfd8y.cjs → AcpBackend-DxoxNKOM.cjs} +1 -1
- package/dist/{AcpSessionManager-xyImjcMI.mjs → AcpSessionManager-Ba9ON7eK.mjs} +1 -1
- package/dist/{AcpSessionManager-Bd-LtS2E.cjs → AcpSessionManager-_bG1kjZz.cjs} +1 -1
- package/dist/{config-DRjtWNd0.mjs → config-CQjk8rce.mjs} +2 -2
- package/dist/{config-BjgfmsPT.cjs → config-Dv2kzos6.cjs} +2 -2
- package/dist/{index-BTtTqsj4.cjs → index-B8UoTir2.cjs} +120 -75
- package/dist/{index-CR24hlKJ.cjs → index-CULwez6o.cjs} +4 -4
- package/dist/{index-1ZE940yd.mjs → index-Cc2VYKqa.mjs} +5 -5
- package/dist/{index-DZ7tAffg.mjs → index-Cnb_eI7Q.mjs} +119 -74
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{installTerminalHooks-Do3vnipG.mjs → installTerminalHooks-C-8Vuwlu.mjs} +2 -2
- package/dist/{installTerminalHooks-DSfE4ui6.cjs → installTerminalHooks-mk1QIEvp.cjs} +2 -2
- package/dist/lib.cjs +1 -1
- package/dist/lib.d.cts +2 -0
- package/dist/lib.d.mts +2 -0
- package/dist/lib.mjs +1 -1
- package/dist/{mcp-2Ee6mSAP.mjs → mcp-BZba259A.mjs} +2 -2
- package/dist/{mcp-CJHJEBto.cjs → mcp-X7yyQ2d_.cjs} +2 -2
- package/dist/{runGemini-Dj7g2-B_.cjs → runGemini-Cf_FQOrg.cjs} +4 -4
- package/dist/{runGemini-DQKPf1RX.mjs → runGemini-Nig1hb70.mjs} +4 -4
- package/dist/{runOpenClaw-BWAVwl3x.cjs → runOpenClaw-BlZkYWEQ.cjs} +3 -3
- package/dist/{runOpenClaw-BNfz77EE.mjs → runOpenClaw-DllszOSy.mjs} +3 -3
- package/dist/{send-CIm5kZBx.mjs → send-C6-E03t-.mjs} +2 -2
- package/dist/{send-Cm28ijOj.cjs → send-DZIY545W.cjs} +2 -2
- package/dist/{spawn-BPgkpGXX.cjs → spawn-Cm52jfN6.cjs} +2 -2
- package/dist/{spawn-Dd8qj3l4.mjs → spawn-hjPuTkvH.mjs} +2 -2
- package/dist/{types-C4duxyB7.mjs → types-Bv1nc9M1.mjs} +20 -14
- package/dist/{types-B7qS_-8e.cjs → types-Dudpkl_i.cjs} +23 -14
- 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.
|
|
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.
|
|
146
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
147
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
148
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
149
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
150
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
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:
|
|
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
|
|
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 {
|
|
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.
|
|
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.
|
|
168
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
169
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
170
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
171
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
172
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
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-
|
|
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:
|
|
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
|
|
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.
|
|
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.
|
|
117
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
118
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
119
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
120
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
121
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
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:*",
|