very-happy-cli 0.2.83 → 0.2.85

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-sS5ln9nS.cjs → AcpBackend-B1l_WyZy.cjs} +1 -1
  2. package/dist/{AcpBackend-DbS9-r10.mjs → AcpBackend-CDclNgxu.mjs} +1 -1
  3. package/dist/{AcpSessionManager-DuZN34yy.mjs → AcpSessionManager-PCdfo4gz.mjs} +1 -1
  4. package/dist/{AcpSessionManager-DX5IvruC.cjs → AcpSessionManager-dVX0uTo8.cjs} +1 -1
  5. package/dist/{config-BkxNWcwM.cjs → config-Ce5hbWlg.cjs} +2 -2
  6. package/dist/{config-3BOBElkv.mjs → config-DDsvmCxL.mjs} +2 -2
  7. package/dist/{index-08H6z21h.mjs → index-CCQ2mqkA.mjs} +5 -5
  8. package/dist/{index-BVlYjP10.cjs → index-DUcWAKZ0.cjs} +219 -79
  9. package/dist/{index-BDhR8Zbc.mjs → index-DVKieWPR.mjs} +218 -78
  10. package/dist/{index-fFNtiTSl.cjs → index-Syfrd3oP.cjs} +4 -4
  11. package/dist/index.cjs +2 -2
  12. package/dist/index.mjs +2 -2
  13. package/dist/{installTerminalHooks-C0X114sp.mjs → installTerminalHooks-BMTBsCfi.mjs} +2 -2
  14. package/dist/{installTerminalHooks-DC2wMq-X.cjs → installTerminalHooks-hcCRjxNy.cjs} +2 -2
  15. package/dist/lib.cjs +1 -1
  16. package/dist/lib.d.cts +6 -0
  17. package/dist/lib.d.mts +6 -0
  18. package/dist/lib.mjs +1 -1
  19. package/dist/{mcp-B9UtB3lP.mjs → mcp-C2bERsV2.mjs} +2 -2
  20. package/dist/{mcp-CuDdOqST.cjs → mcp-DGHMyTt-.cjs} +2 -2
  21. package/dist/{runGemini-Cvww7ebI.mjs → runGemini-CUpp6u-S.mjs} +4 -4
  22. package/dist/{runGemini-Cqstl6qb.cjs → runGemini-U5JI6rsK.cjs} +4 -4
  23. package/dist/{runOpenClaw-BXmi-UcV.mjs → runOpenClaw-BHR7emaO.mjs} +3 -3
  24. package/dist/{runOpenClaw-CHu488uC.cjs → runOpenClaw-DJYiIMrs.cjs} +3 -3
  25. package/dist/{send-C6Uqkmxr.mjs → send-AIDeVBON.mjs} +2 -2
  26. package/dist/{send-C5dWPbV6.cjs → send-iDuDd7yC.cjs} +2 -2
  27. package/dist/{spawn-D8K3uJEp.mjs → spawn-DPz_3Q6B.mjs} +2 -2
  28. package/dist/{spawn-CZAHiPE6.cjs → spawn-Kklokpjz.cjs} +2 -2
  29. package/dist/{types-RASD9X96.mjs → types-CkUHjxKz.mjs} +20 -11
  30. package/dist/{types-sFcb_Sfz.cjs → types-DJGEti9c.cjs} +23 -11
  31. package/package.json +7 -7
@@ -1,9 +1,9 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
3
  import { z } from 'zod';
4
- import { p as pushClipboardViaDaemon } from './index-BDhR8Zbc.mjs';
4
+ import { p as pushClipboardViaDaemon } from './index-DVKieWPR.mjs';
5
5
  import { C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, c as CLIPBOARD_MAX_BYTES } from './limits-CwFb5S2b.mjs';
6
- import { l as logger } from './types-RASD9X96.mjs';
6
+ import { l as logger } from './types-CkUHjxKz.mjs';
7
7
  import 'chalk';
8
8
  import 'node:os';
9
9
  import 'node:crypto';
@@ -3,9 +3,9 @@
3
3
  var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
4
4
  var stdio_js = require('@modelcontextprotocol/sdk/server/stdio.js');
5
5
  var z = require('zod');
6
- var index = require('./index-BVlYjP10.cjs');
6
+ var index = require('./index-DUcWAKZ0.cjs');
7
7
  var limits = require('./limits-KdWKmwtH.cjs');
8
- var persistence = require('./types-sFcb_Sfz.cjs');
8
+ var persistence = require('./types-DJGEti9c.cjs');
9
9
  require('chalk');
10
10
  require('node:os');
11
11
  require('node:crypto');
@@ -2,10 +2,10 @@ import { useStdout, useInput, Box, Text, render } from 'ink';
2
2
  import React, { useState, useRef, useEffect, useCallback } from 'react';
3
3
  import { randomUUID } from 'node:crypto';
4
4
  import { join } from 'node:path';
5
- import { l as logger, h as connectionState, A as ApiClient, i as readSettings, e as errorLogMetadata, j as encodeBase64, p as projectPath, d as contentLogMetadata } from './types-RASD9X96.mjs';
6
- import { g as GEMINI_API_KEY_ENV, j as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, B as BasePermissionHandler, k as BaseReasoningProcessor, i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, l as MessageBuffer, C as CHANGE_TITLE_INSTRUCTION, r as registerKillSessionHandler, f as startHappyServer } from './index-BDhR8Zbc.mjs';
7
- import { A as AcpBackend } from './AcpBackend-DbS9-r10.mjs';
8
- import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-3BOBElkv.mjs';
5
+ import { l as logger, h as connectionState, A as ApiClient, i as readSettings, e as errorLogMetadata, j as encodeBase64, p as projectPath, d as contentLogMetadata } from './types-CkUHjxKz.mjs';
6
+ import { g as GEMINI_API_KEY_ENV, j as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, B as BasePermissionHandler, k as BaseReasoningProcessor, i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, l as MessageBuffer, C as CHANGE_TITLE_INSTRUCTION, r as registerKillSessionHandler, f as startHappyServer } from './index-DVKieWPR.mjs';
7
+ import { A as AcpBackend } from './AcpBackend-CDclNgxu.mjs';
8
+ import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-DDsvmCxL.mjs';
9
9
  import 'axios';
10
10
  import 'chalk';
11
11
  import 'node:util';
@@ -4,10 +4,10 @@ var ink = require('ink');
4
4
  var React = require('react');
5
5
  var node_crypto = require('node:crypto');
6
6
  var path = require('node:path');
7
- var persistence = require('./types-sFcb_Sfz.cjs');
8
- var index = require('./index-BVlYjP10.cjs');
9
- var AcpBackend = require('./AcpBackend-sS5ln9nS.cjs');
10
- var config = require('./config-BkxNWcwM.cjs');
7
+ var persistence = require('./types-DJGEti9c.cjs');
8
+ var index = require('./index-DUcWAKZ0.cjs');
9
+ var AcpBackend = require('./AcpBackend-B1l_WyZy.cjs');
10
+ var config = require('./config-Ce5hbWlg.cjs');
11
11
  require('axios');
12
12
  require('chalk');
13
13
  require('node:util');
@@ -3,9 +3,9 @@ import { execFileSync } from 'node:child_process';
3
3
  import os from 'node:os';
4
4
  import { existsSync, readFileSync } from 'node:fs';
5
5
  import { join } from 'node:path';
6
- import { k as ensurePrivateDirectorySync, m as hardenPrivateFileSync, w as writePrivateFileSync, e as errorLogMetadata, d as contentLogMetadata, h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, c as configuration } from './types-RASD9X96.mjs';
7
- import { A as AcpSessionManager } from './AcpSessionManager-DuZN34yy.mjs';
8
- import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, r as registerKillSessionHandler } from './index-BDhR8Zbc.mjs';
6
+ import { k as ensurePrivateDirectorySync, m as hardenPrivateFileSync, w as writePrivateFileSync, e as errorLogMetadata, d as contentLogMetadata, h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, c as configuration } from './types-CkUHjxKz.mjs';
7
+ import { A as AcpSessionManager } from './AcpSessionManager-PCdfo4gz.mjs';
8
+ import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, r as registerKillSessionHandler } from './index-DVKieWPR.mjs';
9
9
  import WebSocket from 'ws';
10
10
  import * as ed from '@noble/ed25519';
11
11
  import { sha512 } from '@noble/hashes/sha2.js';
@@ -5,9 +5,9 @@ var node_child_process = require('node:child_process');
5
5
  var os = require('node:os');
6
6
  var node_fs = require('node:fs');
7
7
  var path = require('node:path');
8
- var persistence = require('./types-sFcb_Sfz.cjs');
9
- var AcpSessionManager = require('./AcpSessionManager-DX5IvruC.cjs');
10
- var index = require('./index-BVlYjP10.cjs');
8
+ var persistence = require('./types-DJGEti9c.cjs');
9
+ var AcpSessionManager = require('./AcpSessionManager-dVX0uTo8.cjs');
10
+ var index = require('./index-DUcWAKZ0.cjs');
11
11
  var WebSocket = require('ws');
12
12
  var ed = require('@noble/ed25519');
13
13
  var sha2_js = require('@noble/hashes/sha2.js');
@@ -1,8 +1,8 @@
1
1
  import chalk from 'chalk';
2
2
  import { readFileSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
- import { r as readPersistedSessions, c as configuration } from './types-RASD9X96.mjs';
5
- import { b as sendUserMessage, a as sessionWebUrl } from './index-BDhR8Zbc.mjs';
4
+ import { r as readPersistedSessions, c as configuration } from './types-CkUHjxKz.mjs';
5
+ import { b as sendUserMessage, a as sessionWebUrl } from './index-DVKieWPR.mjs';
6
6
  import 'axios';
7
7
  import 'node:util';
8
8
  import 'node:os';
@@ -3,8 +3,8 @@
3
3
  var chalk = require('chalk');
4
4
  var node_fs = require('node:fs');
5
5
  var path = require('node:path');
6
- var persistence = require('./types-sFcb_Sfz.cjs');
7
- var index = require('./index-BVlYjP10.cjs');
6
+ var persistence = require('./types-DJGEti9c.cjs');
7
+ var index = require('./index-DUcWAKZ0.cjs');
8
8
  require('axios');
9
9
  require('node:util');
10
10
  require('node:os');
@@ -1,8 +1,8 @@
1
1
  import chalk from 'chalk';
2
2
  import { readFileSync, statSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
- import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, w as waitForSessionKey, b as sendUserMessage } from './index-BDhR8Zbc.mjs';
5
- import { l as logger } from './types-RASD9X96.mjs';
4
+ import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, w as waitForSessionKey, b as sendUserMessage } from './index-DVKieWPR.mjs';
5
+ import { l as logger } from './types-CkUHjxKz.mjs';
6
6
  import 'node:os';
7
7
  import 'node:crypto';
8
8
  import 'cross-spawn';
@@ -3,8 +3,8 @@
3
3
  var chalk = require('chalk');
4
4
  var node_fs = require('node:fs');
5
5
  var path = require('node:path');
6
- var index = require('./index-BVlYjP10.cjs');
7
- var persistence = require('./types-sFcb_Sfz.cjs');
6
+ var index = require('./index-DUcWAKZ0.cjs');
7
+ var persistence = require('./types-DJGEti9c.cjs');
8
8
  require('node:os');
9
9
  require('node:crypto');
10
10
  require('cross-spawn');
@@ -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.83";
32
+ var version = "0.2.85";
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.83",
146
- "very-happy-tools-x64-darwin": "0.2.83",
147
- "very-happy-tools-arm64-linux": "0.2.83",
148
- "very-happy-tools-x64-linux": "0.2.83",
149
- "very-happy-tools-arm64-win32": "0.2.83",
150
- "very-happy-tools-x64-win32": "0.2.83"
145
+ "very-happy-tools-arm64-darwin": "0.2.85",
146
+ "very-happy-tools-x64-darwin": "0.2.85",
147
+ "very-happy-tools-arm64-linux": "0.2.85",
148
+ "very-happy-tools-x64-linux": "0.2.85",
149
+ "very-happy-tools-arm64-win32": "0.2.85",
150
+ "very-happy-tools-x64-win32": "0.2.85"
151
151
  };
152
152
  var devDependencies = {
153
153
  "@slopus/happy-wire": "workspace:*",
@@ -755,6 +755,8 @@ const MessageMetaSchema$1 = z.object({
755
755
  appendSystemPrompt: z.string().nullable().optional(),
756
756
  allowedTools: z.array(z.string()).nullable().optional(),
757
757
  disallowedTools: z.array(z.string()).nullable().optional(),
758
+ /** Omitted/queue waits for the current turn; steer targets the live turn. */
759
+ delivery: z.enum(["queue", "steer"]).optional(),
758
760
  displayText: z.string().optional()
759
761
  });
760
762
  const UserMessageSchema$1 = z.object({
@@ -1028,8 +1030,10 @@ const MessageMetaSchema = z$1.object({
1028
1030
  // Append to system prompt for this message (null = reset)
1029
1031
  allowedTools: z$1.array(z$1.string()).nullable().optional(),
1030
1032
  // Allowed tools for this message (null = reset)
1031
- disallowedTools: z$1.array(z$1.string()).nullable().optional()
1033
+ disallowedTools: z$1.array(z$1.string()).nullable().optional(),
1032
1034
  // Disallowed tools for this message (null = reset)
1035
+ /** Omitted/queue waits for the current turn; steer targets the live turn. */
1036
+ delivery: z$1.enum(["queue", "steer"]).optional()
1033
1037
  });
1034
1038
  z$1.object({
1035
1039
  session: z$1.object({
@@ -2645,7 +2649,7 @@ function mapClaudeLogMessageToSessionEnvelopesInternal(message, state) {
2645
2649
  }
2646
2650
  if (message.type === "result") {
2647
2651
  const raw = message;
2648
- const status = raw.is_error === true ? "failed" : "completed";
2652
+ const status = raw.interrupted === true ? "cancelled" : raw.is_error === true ? "failed" : "completed";
2649
2653
  const error = status === "failed" ? raw.errors?.filter((item) => typeof item === "string" && item.trim()).join("\n") || state.pendingAssistantError || raw.subtype || "Claude turn failed" : void 0;
2650
2654
  if (status === "failed" && !state.currentTurnId) {
2651
2655
  ensureTurn(state, envelopes);
@@ -2779,6 +2783,10 @@ function usageAgentKey(agent) {
2779
2783
  return agent.toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "") || "unknown";
2780
2784
  }
2781
2785
 
2786
+ const MAX_CHAT_ATTACHMENT_SOURCE_BYTES = 50 * 1024 * 1024;
2787
+ const CHAT_ATTACHMENT_ENCRYPTION_OVERHEAD_BYTES = 40;
2788
+ const MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES = MAX_CHAT_ATTACHMENT_SOURCE_BYTES + CHAT_ATTACHMENT_ENCRYPTION_OVERHEAD_BYTES;
2789
+
2782
2790
  class ApiSessionClient extends EventEmitter {
2783
2791
  token;
2784
2792
  sessionId;
@@ -3100,7 +3108,8 @@ class ApiSessionClient extends EventEmitter {
3100
3108
  responseType: "arraybuffer",
3101
3109
  timeout: 6e4,
3102
3110
  maxRedirects: 5,
3103
- maxContentLength: 10 * 1024 * 1024
3111
+ maxContentLength: MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES,
3112
+ maxBodyLength: MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES
3104
3113
  });
3105
3114
  return new Uint8Array(response.data);
3106
3115
  }
@@ -15136,4 +15145,4 @@ const RawJSONLinesSchema = z$1.discriminatedUnion("type", [
15136
15145
  }).passthrough()
15137
15146
  ]);
15138
15147
 
15139
- 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 };
15148
+ 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.83";
54
+ var version = "0.2.85";
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.83",
168
- "very-happy-tools-x64-darwin": "0.2.83",
169
- "very-happy-tools-arm64-linux": "0.2.83",
170
- "very-happy-tools-x64-linux": "0.2.83",
171
- "very-happy-tools-arm64-win32": "0.2.83",
172
- "very-happy-tools-x64-win32": "0.2.83"
167
+ "very-happy-tools-arm64-darwin": "0.2.85",
168
+ "very-happy-tools-x64-darwin": "0.2.85",
169
+ "very-happy-tools-arm64-linux": "0.2.85",
170
+ "very-happy-tools-x64-linux": "0.2.85",
171
+ "very-happy-tools-arm64-win32": "0.2.85",
172
+ "very-happy-tools-x64-win32": "0.2.85"
173
173
  };
174
174
  var devDependencies = {
175
175
  "@slopus/happy-wire": "workspace:*",
@@ -777,6 +777,8 @@ const MessageMetaSchema$1 = z__namespace.object({
777
777
  appendSystemPrompt: z__namespace.string().nullable().optional(),
778
778
  allowedTools: z__namespace.array(z__namespace.string()).nullable().optional(),
779
779
  disallowedTools: z__namespace.array(z__namespace.string()).nullable().optional(),
780
+ /** Omitted/queue waits for the current turn; steer targets the live turn. */
781
+ delivery: z__namespace.enum(["queue", "steer"]).optional(),
780
782
  displayText: z__namespace.string().optional()
781
783
  });
782
784
  const UserMessageSchema$1 = z__namespace.object({
@@ -1050,8 +1052,10 @@ const MessageMetaSchema = z.z.object({
1050
1052
  // Append to system prompt for this message (null = reset)
1051
1053
  allowedTools: z.z.array(z.z.string()).nullable().optional(),
1052
1054
  // Allowed tools for this message (null = reset)
1053
- disallowedTools: z.z.array(z.z.string()).nullable().optional()
1055
+ disallowedTools: z.z.array(z.z.string()).nullable().optional(),
1054
1056
  // Disallowed tools for this message (null = reset)
1057
+ /** Omitted/queue waits for the current turn; steer targets the live turn. */
1058
+ delivery: z.z.enum(["queue", "steer"]).optional()
1055
1059
  });
1056
1060
  z.z.object({
1057
1061
  session: z.z.object({
@@ -1480,7 +1484,7 @@ class RpcHandlerManager {
1480
1484
  }
1481
1485
  }
1482
1486
 
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-sFcb_Sfz.cjs', document.baseURI).href))));
1487
+ 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-DJGEti9c.cjs', document.baseURI).href))));
1484
1488
  function projectPath() {
1485
1489
  const path = path$1.resolve(__dirname$1, "..");
1486
1490
  return path;
@@ -2667,7 +2671,7 @@ function mapClaudeLogMessageToSessionEnvelopesInternal(message, state) {
2667
2671
  }
2668
2672
  if (message.type === "result") {
2669
2673
  const raw = message;
2670
- const status = raw.is_error === true ? "failed" : "completed";
2674
+ const status = raw.interrupted === true ? "cancelled" : raw.is_error === true ? "failed" : "completed";
2671
2675
  const error = status === "failed" ? raw.errors?.filter((item) => typeof item === "string" && item.trim()).join("\n") || state.pendingAssistantError || raw.subtype || "Claude turn failed" : void 0;
2672
2676
  if (status === "failed" && !state.currentTurnId) {
2673
2677
  ensureTurn(state, envelopes);
@@ -2801,6 +2805,10 @@ function usageAgentKey(agent) {
2801
2805
  return agent.toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "") || "unknown";
2802
2806
  }
2803
2807
 
2808
+ const MAX_CHAT_ATTACHMENT_SOURCE_BYTES = 50 * 1024 * 1024;
2809
+ const CHAT_ATTACHMENT_ENCRYPTION_OVERHEAD_BYTES = 40;
2810
+ const MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES = MAX_CHAT_ATTACHMENT_SOURCE_BYTES + CHAT_ATTACHMENT_ENCRYPTION_OVERHEAD_BYTES;
2811
+
2804
2812
  class ApiSessionClient extends node_events.EventEmitter {
2805
2813
  token;
2806
2814
  sessionId;
@@ -3122,7 +3130,8 @@ class ApiSessionClient extends node_events.EventEmitter {
3122
3130
  responseType: "arraybuffer",
3123
3131
  timeout: 6e4,
3124
3132
  maxRedirects: 5,
3125
- maxContentLength: 10 * 1024 * 1024
3133
+ maxContentLength: MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES,
3134
+ maxBodyLength: MAX_CHAT_ATTACHMENT_ENCRYPTED_BYTES
3126
3135
  });
3127
3136
  return new Uint8Array(response.data);
3128
3137
  }
@@ -15164,6 +15173,7 @@ exports.AsyncLock = AsyncLock;
15164
15173
  exports.CodexAppServerClient = CodexAppServerClient;
15165
15174
  exports.DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS = DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS;
15166
15175
  exports.InvalidateSync = InvalidateSync;
15176
+ exports.MAX_CHAT_ATTACHMENT_SOURCE_BYTES = MAX_CHAT_ATTACHMENT_SOURCE_BYTES;
15167
15177
  exports.MIRROR_BACKFILL_LINES_DEFAULT = MIRROR_BACKFILL_LINES_DEFAULT;
15168
15178
  exports.RawJSONLinesSchema = RawJSONLinesSchema;
15169
15179
  exports.SandboxConfigSchema = SandboxConfigSchema;
@@ -15191,6 +15201,7 @@ exports.detectResumeSupport = detectResumeSupport;
15191
15201
  exports.encodeBase64 = encodeBase64;
15192
15202
  exports.encodeBase64Url = encodeBase64Url;
15193
15203
  exports.encrypt = encrypt;
15204
+ exports.ensurePrivateDirectory = ensurePrivateDirectory;
15194
15205
  exports.ensurePrivateDirectorySync = ensurePrivateDirectorySync;
15195
15206
  exports.errorLogMetadata = errorLogMetadata;
15196
15207
  exports.extractCompleteLines = extractCompleteLines;
@@ -15198,6 +15209,7 @@ exports.fetchCliUpdateState = fetchCliUpdateState;
15198
15209
  exports.getLatestDaemonLog = getLatestDaemonLog;
15199
15210
  exports.getLocalHappyAgentCredentialPath = getLocalHappyAgentCredentialPath;
15200
15211
  exports.getProjectPath = getProjectPath;
15212
+ exports.hardenPrivateFile = hardenPrivateFile;
15201
15213
  exports.hardenPrivateFileSync = hardenPrivateFileSync;
15202
15214
  exports.initializeSandbox = initializeSandbox;
15203
15215
  exports.isValidSessionId = isValidSessionId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "very-happy-cli",
3
- "version": "0.2.83",
3
+ "version": "0.2.85",
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.83",
117
- "very-happy-tools-x64-darwin": "0.2.83",
118
- "very-happy-tools-arm64-linux": "0.2.83",
119
- "very-happy-tools-x64-linux": "0.2.83",
120
- "very-happy-tools-arm64-win32": "0.2.83",
121
- "very-happy-tools-x64-win32": "0.2.83"
116
+ "very-happy-tools-arm64-darwin": "0.2.85",
117
+ "very-happy-tools-x64-darwin": "0.2.85",
118
+ "very-happy-tools-arm64-linux": "0.2.85",
119
+ "very-happy-tools-x64-linux": "0.2.85",
120
+ "very-happy-tools-arm64-win32": "0.2.85",
121
+ "very-happy-tools-x64-win32": "0.2.85"
122
122
  },
123
123
  "devDependencies": {
124
124
  "@slopus/happy-wire": "workspace:*",