very-happy-cli 0.2.147 → 0.2.149

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 (51) hide show
  1. package/dist/{AcpBackend-CtoDlI4b.mjs → AcpBackend-Baqb8dNm.mjs} +2 -2
  2. package/dist/{AcpBackend-DYAbnvv0.cjs → AcpBackend-CnZpEfGd.cjs} +2 -2
  3. package/dist/{AcpSessionManager-BHnqkhBf.mjs → AcpSessionManager-CC6mdFXs.mjs} +1 -1
  4. package/dist/{AcpSessionManager-Cn2214Af.cjs → AcpSessionManager-e2vxmIbj.cjs} +1 -1
  5. package/dist/{agentGuidance-FDBKJgGC.cjs → agentGuidance--QIi_rZ2.cjs} +1 -1
  6. package/dist/{agentGuidance-CK792QWi.mjs → agentGuidance-oMVJvUl7.mjs} +1 -1
  7. package/dist/{agentHome-z_h7cVnq.cjs → agentHome-3kRCtzOL.cjs} +2 -2
  8. package/dist/{agentHome-Cj4LYQV-.mjs → agentHome-CKSPsS8d.mjs} +2 -2
  9. package/dist/codex/happyMcpStdioBridge.cjs +2 -2
  10. package/dist/codex/happyMcpStdioBridge.mjs +2 -2
  11. package/dist/{config-CVvEoSGv.mjs → config-C8jpk6IA.mjs} +4 -4
  12. package/dist/{config-C1ysAgX3.cjs → config-CzJZcvTO.cjs} +4 -4
  13. package/dist/{index-DUw34UHh.mjs → index-BPCXUrEe.mjs} +4 -4
  14. package/dist/{index-CXc3BQNG.cjs → index-CyfXsCXl.cjs} +76 -53
  15. package/dist/{index-C1QWpPoB.cjs → index-DBN2Zpqc.cjs} +4 -4
  16. package/dist/{index-B7UauKjp.mjs → index-Dfkyar7S.mjs} +72 -49
  17. package/dist/{index-DhcgPLDK.cjs → index-DgK4KX-Z.cjs} +7 -7
  18. package/dist/{index-EH6Pjsic.mjs → index-DrVq0CqK.mjs} +8 -8
  19. package/dist/index.cjs +4 -4
  20. package/dist/index.mjs +4 -4
  21. package/dist/{installTerminalHooks-AUERBJd4.mjs → installTerminalHooks-COqkLz6f.mjs} +4 -4
  22. package/dist/{installTerminalHooks-BMpt_X5L.cjs → installTerminalHooks-kdAoTfNT.cjs} +4 -4
  23. package/dist/lib.cjs +2 -2
  24. package/dist/lib.d.cts +10 -0
  25. package/dist/lib.d.mts +10 -0
  26. package/dist/lib.mjs +2 -2
  27. package/dist/{limits-Dh0u29C4.mjs → limits-BXI1Gzvd.mjs} +8 -8
  28. package/dist/{limits-WZLbGgEg.cjs → limits-FZWhlsBu.cjs} +8 -8
  29. package/dist/{mcp-3lcIERfY.mjs → mcp-Dfnoirpi.mjs} +4 -4
  30. package/dist/{mcp-D-Crar0K.cjs → mcp-DoLZbbZp.cjs} +4 -4
  31. package/dist/{piRuntime-dQ6fN-W9.mjs → piRuntime-BK6YZm2X.mjs} +2 -2
  32. package/dist/{piRuntime-Dkk0SGGN.cjs → piRuntime-DmE4ysfG.cjs} +2 -2
  33. package/dist/{piTerminal-YoY7Z7sP.mjs → piTerminal-Bczubq2n.mjs} +6 -6
  34. package/dist/{piTerminal-C1gXyJA1.cjs → piTerminal-qQAzQwIU.cjs} +6 -6
  35. package/dist/{runGemini-D2Hr4-Xz.mjs → runGemini-Cce_pjTs.mjs} +6 -6
  36. package/dist/{runGemini-Cj284Qhk.cjs → runGemini-ComTu0EB.cjs} +6 -6
  37. package/dist/{runOpenClaw-0tleKtRj.mjs → runOpenClaw-DXP5_chb.mjs} +5 -5
  38. package/dist/{runOpenClaw-USGbHPm-.cjs → runOpenClaw-M3YlDt8z.cjs} +5 -5
  39. package/dist/{send-Bt9iWhWx.cjs → send-0LrSwGgr.cjs} +4 -4
  40. package/dist/{send-vmjOSMYO.mjs → send-DDD57Cr_.mjs} +4 -4
  41. package/dist/{sessions-lzuQguqk.cjs → sessions-2Bkau9T4.cjs} +4 -4
  42. package/dist/{sessions-BeqWzIdm.mjs → sessions-ClBPEtz2.mjs} +4 -4
  43. package/dist/{spawn-13v957Zv.mjs → spawn-7lLymdT1.mjs} +4 -4
  44. package/dist/{spawn-B9kfeZZL.cjs → spawn-Cm3Da8Ge.cjs} +4 -4
  45. package/dist/{teams-DQ1pAIhZ.cjs → teams-DKKeIG-u.cjs} +4 -4
  46. package/dist/{teams-BkFamplo.mjs → teams-DyBjdXI3.mjs} +4 -4
  47. package/dist/{todo-Ba0Wpu2G.cjs → todo-8RgCTDxH.cjs} +3 -3
  48. package/dist/{todo-CxQEUY9J.mjs → todo-jXHGGH89.mjs} +3 -3
  49. package/dist/{types-DFYgWw3-.mjs → types-ipzMqciq.mjs} +116 -9
  50. package/dist/{types-CGACQD3M.cjs → types-t1gxALVE.cjs} +116 -9
  51. package/package.json +8 -8
@@ -1,14 +1,14 @@
1
1
  import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import chalk from 'chalk';
2
2
  import os, { homedir, userInfo, tmpdir } from 'node:os';
3
3
  import { randomUUID, randomInt, randomBytes, createHash as createHash$1, timingSafeEqual } from 'node:crypto';
4
- import { v as notifyDaemonSessionEvent, w as getProjectPath, o as BUILTIN_TODO_DISCOVERY, x as initializeSandbox, y as wrapCommand, t as contentLogMetadata, I as InvalidateSync, R as RawJSONLinesSchema, u as delay, z as AsyncLock, S as STREAM_DELTA_MAX_CHARS, M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES, C as notifyDaemonClaudeAuthFailed, D as commandOnPath, c as checkIfDaemonRunningAndCleanupStaleState, E as deriveLocalCliUpdateSummary, F as AGENT_VERSION_SOURCES, G as isClaudeSessionId, H as getLocalHappyAgentCredentialPath, J as readLocalHappyAgentCredentials, K as parseExactVersion, L as compareExactVersions, N as extractCompleteLines, O as decideBackfill, P as parseTerminalHookPayload, Q as tmuxArgs, T as scrubTmuxClientEnv, U as decideMirrorBinding, V as MIRROR_BACKFILL_LINES_DEFAULT, W as mirrorLineKey, X as mirrorLocalId, Y as listDaemonSessions, Z as stopDaemonSession, _ as detectCLIAvailability, $ as detectResumeSupport, a0 as refreshAgentHomes, d as describeAgentHome, a1 as isDaemonRunningCurrentlyInstalledHappyVersion, a2 as stopDaemon, a3 as TurnActivityTracker, a4 as summarizeSpawnSessionForLog, a5 as locateClaudeConversation, a6 as agentHomeSpawnEnv, a7 as shellescape, A as ApiClient, a8 as fetchCliUpdateState, a9 as resolveCliUpdateCheckInterval, aa as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, ab as cleanupDaemonState, i as isValidSessionId, s as spawnDaemonSession, ac as listVhTerminals, ad as isValidTerminalId, ae as readVhTerminal, af as sendToVhTerminal, ag as ContextUsageSchema, ah as TITLE_PROMPT_PREFIX, ai as BOARD_ANALYZER_PROMPT_PREFIX, m as connectionState, aj as startOfflineReconnection, n as notifyDaemonSessionStarted, g as createEnvelope, ak as CodexAppServerClient } from './types-DFYgWw3-.mjs';
5
- import { l as logger, F as ensurePrivateDirectory, G as hardenPrivateFile, c as configuration, p as packageJson, r as readSettings, H as readCredentials, x as credentialRelayProblem, o as readDaemonState, g as encodeBase64, I as readSettingsOutcome, u as updateSettings, J as encodeBase64Url, m as decodeBase64, K as writeCredentialsLegacy, L as writeCredentialsDataKey, e as readCredentialsForConfiguredRelay, j as encrypt, d as readPersistedSessions, w as writePrivateFileSync, M as decryptWithDataKey, N as decryptLegacy, O as persistSession, k as decrypt, h as ensurePrivateDirectorySync, P as acquireDaemonLock, Q as deletePersistedSessions, R as writeDaemonState, S as writeSettings, T as releaseDaemonLock, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, f as CLIPBOARD_MAX_BYTES, U as clearCredentials, V as clearMachineId, W as SandboxConfigSchema, X as getLatestDaemonLog } from './limits-Dh0u29C4.mjs';
4
+ import { v as notifyDaemonSessionEvent, w as getProjectPath, o as BUILTIN_TODO_DISCOVERY, x as initializeSandbox, y as wrapCommand, t as contentLogMetadata, I as InvalidateSync, R as RawJSONLinesSchema, u as delay, z as AsyncLock, S as STREAM_DELTA_MAX_CHARS, M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES, C as notifyDaemonClaudeAuthFailed, D as commandOnPath, c as checkIfDaemonRunningAndCleanupStaleState, E as deriveLocalCliUpdateSummary, F as AGENT_VERSION_SOURCES, G as isClaudeSessionId, H as getLocalHappyAgentCredentialPath, J as readLocalHappyAgentCredentials, K as parseExactVersion, L as compareExactVersions, N as extractCompleteLines, O as decideBackfill, P as parseTerminalHookPayload, Q as tmuxArgs, T as scrubTmuxClientEnv, U as decideMirrorBinding, V as MIRROR_BACKFILL_LINES_DEFAULT, W as mirrorLineKey, X as mirrorLocalId, Y as listDaemonSessions, Z as stopDaemonSession, _ as detectCLIAvailability, $ as detectResumeSupport, a0 as refreshAgentHomes, d as describeAgentHome, a1 as isDaemonRunningCurrentlyInstalledHappyVersion, a2 as stopDaemon, a3 as TurnActivityTracker, a4 as summarizeSpawnSessionForLog, a5 as locateClaudeConversation, a6 as agentHomeSpawnEnv, a7 as shellescape, A as ApiClient, a8 as fetchCliUpdateState, a9 as resolveCliUpdateCheckInterval, aa as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, ab as cleanupDaemonState, i as isValidSessionId, s as spawnDaemonSession, ac as listVhTerminals, ad as isValidTerminalId, ae as readVhTerminal, af as sendToVhTerminal, ag as ContextUsageSchema, ah as TITLE_PROMPT_PREFIX, ai as BOARD_ANALYZER_PROMPT_PREFIX, m as connectionState, aj as startOfflineReconnection, n as notifyDaemonSessionStarted, g as createEnvelope, ak as CodexAppServerClient } from './types-ipzMqciq.mjs';
5
+ import { l as logger, F as ensurePrivateDirectory, G as hardenPrivateFile, c as configuration, p as packageJson, r as readSettings, H as readCredentials, x as credentialRelayProblem, o as readDaemonState, g as encodeBase64, I as readSettingsOutcome, u as updateSettings, J as encodeBase64Url, m as decodeBase64, K as writeCredentialsLegacy, L as writeCredentialsDataKey, e as readCredentialsForConfiguredRelay, j as encrypt, d as readPersistedSessions, w as writePrivateFileSync, M as decryptWithDataKey, N as decryptLegacy, O as persistSession, k as decrypt, h as ensurePrivateDirectorySync, P as acquireDaemonLock, Q as deletePersistedSessions, R as writeDaemonState, S as writeSettings, T as releaseDaemonLock, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, f as CLIPBOARD_MAX_BYTES, U as clearCredentials, V as clearMachineId, W as SandboxConfigSchema, X as getLatestDaemonLog } from './limits-BXI1Gzvd.mjs';
6
6
  import spawn$1, { spawn } from 'cross-spawn';
7
7
  import path, { join, resolve, basename, isAbsolute, sep, dirname, delimiter, normalize } from 'node:path';
8
8
  import { createInterface } from 'node:readline';
9
9
  import { existsSync, readFileSync, readdirSync, statSync, mkdirSync, unlinkSync, renameSync, writeFileSync, accessSync, constants, openSync, fsyncSync, closeSync, rmSync as rmSync$1, chmodSync as chmodSync$1 } from 'node:fs';
10
10
  import { p as projectPath } from './projectPath-CSpqWdxp.mjs';
11
- import { f as trimIdent, A as AGENT_GUIDANCE, t as teamScopePath, T as TeamConnectionPreflightError, e as createTeamsClient, P as PREVIEW_TOOL_NAME, R as REPORT_PROGRESS_TOOL_NAME, g as TEAM_TOOL_NAMES, r as registerTeamsTools, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION, h as REPORT_PROGRESS_TOOL_TITLE, i as REPORT_PROGRESS_TOOL_DESCRIPTION } from './agentGuidance-CK792QWi.mjs';
11
+ import { f as trimIdent, A as AGENT_GUIDANCE, t as teamScopePath, T as TeamConnectionPreflightError, e as createTeamsClient, P as PREVIEW_TOOL_NAME, R as REPORT_PROGRESS_TOOL_NAME, g as TEAM_TOOL_NAMES, r as registerTeamsTools, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION, h as REPORT_PROGRESS_TOOL_TITLE, i as REPORT_PROGRESS_TOOL_DESCRIPTION } from './agentGuidance-oMVJvUl7.mjs';
12
12
  import { readFile, writeFile, rename, unlink, mkdir, symlink, rm, readlink, lstat, stat, open as open$1, appendFile } from 'node:fs/promises';
13
13
  import fs, { watch, access } from 'fs/promises';
14
14
  import { useStdout, useInput, Box, Text, render } from 'ink';
@@ -5313,8 +5313,8 @@ ${typeLabels[type] || type}:`));
5313
5313
  }
5314
5314
  console.log(chalk.gray(" An external claude command is only needed for native terminal/mirror use."));
5315
5315
  try {
5316
- const { resolveAgentHomesForCli } = await import('./agentHome-Cj4LYQV-.mjs');
5317
- const { describeAgentHome } = await import('./types-DFYgWw3-.mjs').then(function (n) { return n.al; });
5316
+ const { resolveAgentHomesForCli } = await import('./agentHome-CKSPsS8d.mjs');
5317
+ const { describeAgentHome } = await import('./types-ipzMqciq.mjs').then(function (n) { return n.al; });
5318
5318
  const homes = await resolveAgentHomesForCli();
5319
5319
  console.log(chalk.green(`\u2713 Claude config dir: ${describeAgentHome(homes.claudeConfigDir)}`));
5320
5320
  console.log(chalk.green(`\u2713 Codex home: ${describeAgentHome(homes.codexHome)}`));
@@ -12470,7 +12470,7 @@ function registerSideQuestionHandler(rpc, deps) {
12470
12470
  const retainMs = deps.retainMs ?? SIDE_QUESTION_RETAIN_MS;
12471
12471
  const maxRunMs = deps.maxRunMs ?? SIDE_QUESTION_MAX_RUN_MS;
12472
12472
  const fork = deps.run ?? (async (input) => {
12473
- const { query } = await import('./index-DUw34UHh.mjs');
12473
+ const { query } = await import('./index-BPCXUrEe.mjs');
12474
12474
  return runSideQuestion(query, input);
12475
12475
  });
12476
12476
  const run = async (input, live) => {
@@ -13050,7 +13050,7 @@ async function runClaude(credentials, options = {}) {
13050
13050
  // a brand-new session cannot pick a PDF until after sending once.
13051
13051
  attachmentKinds: [...CLAUDE_ATTACHMENT_KINDS],
13052
13052
  queueCancellation: true,
13053
- capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2", "claude-btw-v1", "claude-runtime-controls-v1"],
13053
+ capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2", "claude-btw-v1", "claude-runtime-controls-v1", "claude-opus-5-5-v1"],
13054
13054
  // Effective mode this process enforces. Kept current by
13055
13055
  // publishPermissionMode below; the web renders it instead of guessing.
13056
13056
  permissionMode: mapToClaudeMode(initialPermissionMode ?? "default"),
@@ -16563,6 +16563,43 @@ function resolveCodexExecutionPolicy(permissionMode, sandboxManagedByHappy) {
16563
16563
  return { approvalPolicy, sandbox };
16564
16564
  }
16565
16565
 
16566
+ function unsupportedEffortReason(catalog, model, effort) {
16567
+ if (!effort) return null;
16568
+ const selected = catalog.find((entry) => model ? entry.model === model : entry.isDefault);
16569
+ if (!selected) return null;
16570
+ if (selected.supportedReasoningEfforts.some((option) => option.reasoningEffort === effort)) return null;
16571
+ return `Reasoning effort "${effort}" is not supported by ${model ?? "the default model"}. Choose a supported level.`;
16572
+ }
16573
+
16574
+ function readableCodexErrorText(text) {
16575
+ const trimmed = text.trim();
16576
+ if (!trimmed.startsWith("{")) return trimmed;
16577
+ try {
16578
+ const body = JSON.parse(trimmed);
16579
+ const inner = typeof body.error === "object" && body.error ? body.error.message : void 0;
16580
+ const message = typeof inner === "string" && inner.trim() ? inner : typeof body.error === "string" && body.error.trim() ? body.error : typeof body.message === "string" && body.message.trim() ? body.message : null;
16581
+ return message ? message.trim() : trimmed;
16582
+ } catch {
16583
+ return trimmed;
16584
+ }
16585
+ }
16586
+ function describeCodexFailure(msg) {
16587
+ const hasFailure = msg?.status === "failed" || msg?.error !== void 0 && msg?.error !== null;
16588
+ if (!hasFailure) return null;
16589
+ const err = msg.error;
16590
+ if (typeof err === "string" && err.length > 0) return readableCodexErrorText(err);
16591
+ if (err && typeof err === "object" && typeof err.message === "string" && err.message.length > 0) {
16592
+ return readableCodexErrorText(err.message);
16593
+ }
16594
+ return "Unknown error";
16595
+ }
16596
+ const TRANSPORT_LOSS = /^Codex process (exited|disconnected)\b|stdin not writable| timed out after \d+ms/;
16597
+ function describeThrownTurnError(error) {
16598
+ const message = error instanceof Error ? error.message : typeof error === "string" ? error : "";
16599
+ if (!message.trim() || TRANSPORT_LOSS.test(message)) return null;
16600
+ return readableCodexErrorText(message);
16601
+ }
16602
+
16566
16603
  async function resumeExistingThread(opts) {
16567
16604
  try {
16568
16605
  const resumedThread = await opts.client.resumeThread({
@@ -16781,16 +16818,6 @@ function safeCodexErrorMetadata(value) {
16781
16818
  };
16782
16819
  }
16783
16820
 
16784
- function describeCodexFailure(msg) {
16785
- const hasFailure = msg?.status === "failed" || msg?.error !== void 0 && msg?.error !== null;
16786
- if (!hasFailure) return null;
16787
- const err = msg.error;
16788
- if (typeof err === "string" && err.length > 0) return err;
16789
- if (err && typeof err === "object" && typeof err.message === "string" && err.message.length > 0) {
16790
- return err.message;
16791
- }
16792
- return "Unknown error";
16793
- }
16794
16821
  const DEFAULT_CODEX_MODEL = "gpt-5.5";
16795
16822
  const DEFAULT_CODEX_EFFORT = "medium";
16796
16823
  async function runCodex(opts) {
@@ -16952,15 +16979,6 @@ async function runCodex(opts) {
16952
16979
  "yolo"
16953
16980
  ];
16954
16981
  let discoveredModels = [];
16955
- const VALID_REMOTE_EFFORTS = [
16956
- "none",
16957
- "minimal",
16958
- "low",
16959
- "medium",
16960
- "high",
16961
- "xhigh",
16962
- "max"
16963
- ];
16964
16982
  registerAgentAttachmentDownloads(session);
16965
16983
  let userMessageDelivery = Promise.resolve();
16966
16984
  session.onUserMessage((message) => {
@@ -17455,10 +17473,9 @@ async function runCodex(opts) {
17455
17473
  message.mode.permissionMode,
17456
17474
  sandboxManagedByHappy
17457
17475
  );
17458
- const selectedModel = discoveredModels.find((model) => message.mode.model ? model.model === message.mode.model : model.isDefault);
17459
- const supportedEfforts = selectedModel?.supportedReasoningEfforts.map((option) => option.reasoningEffort) ?? VALID_REMOTE_EFFORTS;
17460
- if (message.mode.effort && !supportedEfforts.includes(message.mode.effort)) {
17461
- throw new Error(`Reasoning effort "${message.mode.effort}" is not supported by ${message.mode.model ?? "the default model"}. Choose a supported level.`);
17476
+ const effortRefusal = unsupportedEffortReason(discoveredModels, message.mode.model, message.mode.effort);
17477
+ if (effortRefusal) {
17478
+ throw new Error(effortRefusal);
17462
17479
  }
17463
17480
  if (!client.hasActiveThread()) {
17464
17481
  const startedThread = await client.startThread({
@@ -17502,8 +17519,14 @@ async function runCodex(opts) {
17502
17519
  }
17503
17520
  } catch (error) {
17504
17521
  logger.warn("Error in codex session", safeCodexErrorMetadata(error));
17505
- messageBuffer.addMessage("Process exited unexpectedly", "status");
17506
- session.sendSessionEvent({ type: "message", message: "Process exited unexpectedly" });
17522
+ const reason = describeThrownTurnError(error);
17523
+ if (reason) {
17524
+ messageBuffer.addMessage(`Task failed: ${reason}`, "status");
17525
+ session.sendSessionEvent({ type: "message", message: `Codex error: ${reason}` });
17526
+ } else {
17527
+ messageBuffer.addMessage("Process exited unexpectedly", "status");
17528
+ session.sendSessionEvent({ type: "message", message: "Process exited unexpectedly" });
17529
+ }
17507
17530
  } finally {
17508
17531
  permissionHandler.reset();
17509
17532
  reasoningProcessor.abort();
@@ -17735,7 +17758,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17735
17758
  return;
17736
17759
  } else if (subcommand === "install-terminal-hooks") {
17737
17760
  try {
17738
- const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-AUERBJd4.mjs');
17761
+ const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-COqkLz6f.mjs');
17739
17762
  const command = parseTerminalHooksArgs(args.slice(1));
17740
17763
  if (command.action === "help") {
17741
17764
  console.log(TERMINAL_HOOKS_HELP);
@@ -17752,7 +17775,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17752
17775
  }
17753
17776
  } else if (subcommand === "agent-home") {
17754
17777
  try {
17755
- const { parseAgentHomeArgs, runAgentHomeCommand } = await import('./agentHome-Cj4LYQV-.mjs');
17778
+ const { parseAgentHomeArgs, runAgentHomeCommand } = await import('./agentHome-CKSPsS8d.mjs');
17756
17779
  await runAgentHomeCommand(parseAgentHomeArgs(args.slice(1)));
17757
17780
  process.exit(0);
17758
17781
  } catch (error) {
@@ -17761,7 +17784,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17761
17784
  }
17762
17785
  } else if (subcommand === "spawn") {
17763
17786
  try {
17764
- const { handleSpawnCommand } = await import('./spawn-13v957Zv.mjs');
17787
+ const { handleSpawnCommand } = await import('./spawn-7lLymdT1.mjs');
17765
17788
  await handleSpawnCommand(args.slice(1));
17766
17789
  } catch (error) {
17767
17790
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -17773,7 +17796,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17773
17796
  return;
17774
17797
  } else if (subcommand === "sessions") {
17775
17798
  try {
17776
- const { handleSessionsCommand } = await import('./sessions-BeqWzIdm.mjs');
17799
+ const { handleSessionsCommand } = await import('./sessions-ClBPEtz2.mjs');
17777
17800
  await handleSessionsCommand(args.slice(1));
17778
17801
  } catch (error) {
17779
17802
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -17785,7 +17808,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17785
17808
  return;
17786
17809
  } else if (subcommand === "send") {
17787
17810
  try {
17788
- const { handleSendCommand } = await import('./send-vmjOSMYO.mjs');
17811
+ const { handleSendCommand } = await import('./send-DDD57Cr_.mjs');
17789
17812
  await handleSendCommand(args.slice(1));
17790
17813
  } catch (error) {
17791
17814
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -17891,9 +17914,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17891
17914
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
17892
17915
  const projectId = args[3];
17893
17916
  try {
17894
- const { saveGoogleCloudProjectToConfig } = await import('./config-CVvEoSGv.mjs');
17895
- const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./limits-Dh0u29C4.mjs').then(function (n) { return n.Y; });
17896
- const { ApiClient: ApiClient2 } = await import('./types-DFYgWw3-.mjs').then(function (n) { return n.am; });
17917
+ const { saveGoogleCloudProjectToConfig } = await import('./config-C8jpk6IA.mjs');
17918
+ const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./limits-BXI1Gzvd.mjs').then(function (n) { return n.Y; });
17919
+ const { ApiClient: ApiClient2 } = await import('./types-ipzMqciq.mjs').then(function (n) { return n.am; });
17897
17920
  let userEmail = void 0;
17898
17921
  try {
17899
17922
  const credentials = await readCredentialsForConfiguredRelay2();
@@ -17924,7 +17947,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17924
17947
  }
17925
17948
  if (geminiSubcommand === "project" && args[2] === "get") {
17926
17949
  try {
17927
- const { readGeminiLocalConfig } = await import('./config-CVvEoSGv.mjs');
17950
+ const { readGeminiLocalConfig } = await import('./config-C8jpk6IA.mjs');
17928
17951
  const config = readGeminiLocalConfig();
17929
17952
  if (config.googleCloudProject) {
17930
17953
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -17964,7 +17987,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17964
17987
  process.exit(0);
17965
17988
  }
17966
17989
  try {
17967
- const { runGemini } = await import('./runGemini-D2Hr4-Xz.mjs');
17990
+ const { runGemini } = await import('./runGemini-Cce_pjTs.mjs');
17968
17991
  let startedBy = void 0;
17969
17992
  for (let i = 1; i < args.length; i++) {
17970
17993
  if (args[i] === "--started-by") {
@@ -17987,7 +18010,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17987
18010
  } else if (subcommand === "pi") {
17988
18011
  if (args[1] === "--terminal") {
17989
18012
  try {
17990
- const { runPiTerminal } = await import('./piTerminal-YoY7Z7sP.mjs');
18013
+ const { runPiTerminal } = await import('./piTerminal-Bczubq2n.mjs');
17991
18014
  process.exitCode = await runPiTerminal(args.slice(2));
17992
18015
  } catch (error) {
17993
18016
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -18004,7 +18027,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18004
18027
  }
18005
18028
  };
18006
18029
  try {
18007
- const { runAcp, resolveAcpAgentConfig } = await import('./index-EH6Pjsic.mjs');
18030
+ const { runAcp, resolveAcpAgentConfig } = await import('./index-DrVq0CqK.mjs');
18008
18031
  const parsed = parsePiRunnerArgs(args.slice(1));
18009
18032
  const resolved = resolveAcpAgentConfig(["pi", ...parsed.passthrough]);
18010
18033
  const { credentials } = await authAndSetupMachineIfNeeded();
@@ -18032,7 +18055,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18032
18055
  return;
18033
18056
  } else if (subcommand === "acp") {
18034
18057
  try {
18035
- const { runAcp, resolveAcpAgentConfig } = await import('./index-EH6Pjsic.mjs');
18058
+ const { runAcp, resolveAcpAgentConfig } = await import('./index-DrVq0CqK.mjs');
18036
18059
  let startedBy = void 0;
18037
18060
  let verbose = false;
18038
18061
  const acpArgs = [];
@@ -18072,7 +18095,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18072
18095
  return;
18073
18096
  } else if (subcommand === "openclaw") {
18074
18097
  try {
18075
- const { runOpenClaw } = await import('./runOpenClaw-0tleKtRj.mjs');
18098
+ const { runOpenClaw } = await import('./runOpenClaw-DXP5_chb.mjs');
18076
18099
  let startedBy = void 0;
18077
18100
  let verbose = false;
18078
18101
  let gatewayUrl;
@@ -18123,7 +18146,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18123
18146
  return;
18124
18147
  } else if (subcommand === "todo") {
18125
18148
  try {
18126
- const { handleTodoCommand } = await import('./todo-CxQEUY9J.mjs');
18149
+ const { handleTodoCommand } = await import('./todo-jXHGGH89.mjs');
18127
18150
  await handleTodoCommand(args.slice(1));
18128
18151
  } catch (error) {
18129
18152
  console.error(JSON.stringify({ error: error instanceof Error ? error.message : "Todo command failed" }));
@@ -18132,7 +18155,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18132
18155
  return;
18133
18156
  } else if (subcommand === "teams") {
18134
18157
  try {
18135
- const { handleTeamsCommand } = await import('./teams-BkFamplo.mjs');
18158
+ const { handleTeamsCommand } = await import('./teams-DyBjdXI3.mjs');
18136
18159
  await handleTeamsCommand(args.slice(1));
18137
18160
  } catch (error) {
18138
18161
  console.error(error instanceof Error ? error.message : "Teams command failed");
@@ -18141,7 +18164,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18141
18164
  return;
18142
18165
  } else if (subcommand === "mcp" && (args.length === 1 || args.length === 2 && args[1] === "--terminal-tools")) {
18143
18166
  try {
18144
- const { handleMcpCommand } = await import('./mcp-3lcIERfY.mjs');
18167
+ const { handleMcpCommand } = await import('./mcp-Dfnoirpi.mjs');
18145
18168
  await handleMcpCommand(args[1] === "--terminal-tools");
18146
18169
  } catch (error) {
18147
18170
  process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var AcpBackend = require('./AcpBackend-DYAbnvv0.cjs');
4
- var persistence = require('./limits-WZLbGgEg.cjs');
5
- var AcpSessionManager = require('./AcpSessionManager-Cn2214Af.cjs');
6
- var index = require('./types-CGACQD3M.cjs');
7
- var index$1 = require('./index-CXc3BQNG.cjs');
8
- var piRuntime = require('./piRuntime-Dkk0SGGN.cjs');
3
+ var AcpBackend = require('./AcpBackend-CnZpEfGd.cjs');
4
+ var persistence = require('./limits-FZWhlsBu.cjs');
5
+ var AcpSessionManager = require('./AcpSessionManager-e2vxmIbj.cjs');
6
+ var index = require('./types-t1gxALVE.cjs');
7
+ var index$1 = require('./index-CyfXsCXl.cjs');
8
+ var piRuntime = require('./piRuntime-DmE4ysfG.cjs');
9
9
  var node_crypto = require('node:crypto');
10
10
  var path = require('node:path');
11
11
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
@@ -34,7 +34,7 @@ require('fs');
34
34
  require('node:readline');
35
35
  require('@anthropic-ai/sandbox-runtime');
36
36
  require('expo-server-sdk');
37
- require('./agentGuidance-FDBKJgGC.cjs');
37
+ require('./agentGuidance--QIi_rZ2.cjs');
38
38
  require('ink');
39
39
  require('react');
40
40
  require('@anthropic-ai/claude-agent-sdk');
@@ -1,10 +1,10 @@
1
- import { D as DefaultTransport, A as AcpBackend } from './AcpBackend-CtoDlI4b.mjs';
2
- export { a as DEFAULT_IDLE_TIMEOUT_MS, b as DEFAULT_TOOL_CALL_TIMEOUT_MS, e as extractErrorDetail, f as formatDuration, c as formatDurationMinutes, h as handleAgentMessageChunk, d as handleAgentThoughtChunk, g as handleLegacyMessageChunk, i as handlePlanUpdate, j as handleThinkingUpdate, k as handleToolCall, l as handleToolCallUpdate, p as parseArgsFromContent } from './AcpBackend-CtoDlI4b.mjs';
3
- import { r as readSettings, g as encodeBase64, l as logger, c as configuration } from './limits-Dh0u29C4.mjs';
4
- import { A as AcpSessionManager } from './AcpSessionManager-BHnqkhBf.mjs';
5
- import { m as connectionState, A as ApiClient, n as notifyDaemonSessionStarted, o as BUILTIN_TODO_DISCOVERY } from './types-DFYgWw3-.mjs';
6
- import { k as initialMachineMetadata, m as createSessionMetadata, n as setupOfflineReconnection, o as StreamRelay, p as MessageQueue2, u as hashObject, v as startHappyServer, x as registerAgentAttachmentDownloads, T as TitleGenerator, y as registerKillSessionHandler, C as CLAUDE_ATTACHMENT_KINDS, z as stageClaudeAttachments, B as appendStagedAttachmentsToPrompt, E as BasePermissionHandler, F as writeSessionModeFile, H as normalizeAcpPermissionMode, I as removeSessionModeFile } from './index-B7UauKjp.mjs';
7
- import { p as preparePiTeamsRuntime } from './piRuntime-dQ6fN-W9.mjs';
1
+ import { D as DefaultTransport, A as AcpBackend } from './AcpBackend-Baqb8dNm.mjs';
2
+ export { a as DEFAULT_IDLE_TIMEOUT_MS, b as DEFAULT_TOOL_CALL_TIMEOUT_MS, e as extractErrorDetail, f as formatDuration, c as formatDurationMinutes, h as handleAgentMessageChunk, d as handleAgentThoughtChunk, g as handleLegacyMessageChunk, i as handlePlanUpdate, j as handleThinkingUpdate, k as handleToolCall, l as handleToolCallUpdate, p as parseArgsFromContent } from './AcpBackend-Baqb8dNm.mjs';
3
+ import { r as readSettings, g as encodeBase64, l as logger, c as configuration } from './limits-BXI1Gzvd.mjs';
4
+ import { A as AcpSessionManager } from './AcpSessionManager-CC6mdFXs.mjs';
5
+ import { m as connectionState, A as ApiClient, n as notifyDaemonSessionStarted, o as BUILTIN_TODO_DISCOVERY } from './types-ipzMqciq.mjs';
6
+ import { k as initialMachineMetadata, m as createSessionMetadata, n as setupOfflineReconnection, o as StreamRelay, p as MessageQueue2, u as hashObject, v as startHappyServer, x as registerAgentAttachmentDownloads, T as TitleGenerator, y as registerKillSessionHandler, C as CLAUDE_ATTACHMENT_KINDS, z as stageClaudeAttachments, B as appendStagedAttachmentsToPrompt, E as BasePermissionHandler, F as writeSessionModeFile, H as normalizeAcpPermissionMode, I as removeSessionModeFile } from './index-Dfkyar7S.mjs';
7
+ import { p as preparePiTeamsRuntime } from './piRuntime-BK6YZm2X.mjs';
8
8
  import { randomUUID } from 'node:crypto';
9
9
  import { join } from 'node:path';
10
10
  import { p as projectPath } from './projectPath-CSpqWdxp.mjs';
@@ -33,7 +33,7 @@ import 'fs';
33
33
  import 'node:readline';
34
34
  import '@anthropic-ai/sandbox-runtime';
35
35
  import 'expo-server-sdk';
36
- import './agentGuidance-CK792QWi.mjs';
36
+ import './agentGuidance-oMVJvUl7.mjs';
37
37
  import 'ink';
38
38
  import 'react';
39
39
  import '@anthropic-ai/claude-agent-sdk';
package/dist/index.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  require('chalk');
4
- require('./index-CXc3BQNG.cjs');
5
- require('./limits-WZLbGgEg.cjs');
4
+ require('./index-CyfXsCXl.cjs');
5
+ require('./limits-FZWhlsBu.cjs');
6
6
  require('zod');
7
- require('./types-CGACQD3M.cjs');
7
+ require('./types-t1gxALVE.cjs');
8
8
  require('node:child_process');
9
9
  require('node:os');
10
10
  require('node:crypto');
@@ -15,7 +15,7 @@ require('node:fs');
15
15
  require('./projectPath-ChLhdOyt.cjs');
16
16
  require('path');
17
17
  require('url');
18
- require('./agentGuidance-FDBKJgGC.cjs');
18
+ require('./agentGuidance--QIi_rZ2.cjs');
19
19
  require('node:fs/promises');
20
20
  require('fs/promises');
21
21
  require('ink');
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import 'chalk';
2
- import './index-B7UauKjp.mjs';
3
- import './limits-Dh0u29C4.mjs';
2
+ import './index-Dfkyar7S.mjs';
3
+ import './limits-BXI1Gzvd.mjs';
4
4
  import 'zod';
5
- import './types-DFYgWw3-.mjs';
5
+ import './types-ipzMqciq.mjs';
6
6
  import 'node:child_process';
7
7
  import 'node:os';
8
8
  import 'node:crypto';
@@ -13,7 +13,7 @@ import 'node:fs';
13
13
  import './projectPath-CSpqWdxp.mjs';
14
14
  import 'path';
15
15
  import 'url';
16
- import './agentGuidance-CK792QWi.mjs';
16
+ import './agentGuidance-oMVJvUl7.mjs';
17
17
  import 'node:fs/promises';
18
18
  import 'fs/promises';
19
19
  import 'ink';
@@ -4,13 +4,13 @@ import { homedir } from 'node:os';
4
4
  import { spawnSync } from 'node:child_process';
5
5
  import chalk from 'chalk';
6
6
  import { p as projectPath } from './projectPath-CSpqWdxp.mjs';
7
- import { t as tmuxSupportsSessionEnv } from './index-B7UauKjp.mjs';
7
+ import { t as tmuxSupportsSessionEnv } from './index-Dfkyar7S.mjs';
8
8
  import 'path';
9
9
  import 'url';
10
10
  import 'node:crypto';
11
- import './types-DFYgWw3-.mjs';
11
+ import './types-ipzMqciq.mjs';
12
12
  import 'axios';
13
- import './limits-Dh0u29C4.mjs';
13
+ import './limits-BXI1Gzvd.mjs';
14
14
  import 'node:fs/promises';
15
15
  import 'zod';
16
16
  import 'tweetnacl';
@@ -29,7 +29,7 @@ import 'fs';
29
29
  import 'node:readline';
30
30
  import '@anthropic-ai/sandbox-runtime';
31
31
  import 'expo-server-sdk';
32
- import './agentGuidance-CK792QWi.mjs';
32
+ import './agentGuidance-oMVJvUl7.mjs';
33
33
  import 'ink';
34
34
  import 'react';
35
35
  import '@anthropic-ai/claude-agent-sdk';
@@ -6,13 +6,13 @@ var os = require('node:os');
6
6
  var node_child_process = require('node:child_process');
7
7
  var chalk = require('chalk');
8
8
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
9
- var index = require('./index-CXc3BQNG.cjs');
9
+ var index = require('./index-CyfXsCXl.cjs');
10
10
  require('path');
11
11
  require('url');
12
12
  require('node:crypto');
13
- require('./types-CGACQD3M.cjs');
13
+ require('./types-t1gxALVE.cjs');
14
14
  require('axios');
15
- require('./limits-WZLbGgEg.cjs');
15
+ require('./limits-FZWhlsBu.cjs');
16
16
  require('node:fs/promises');
17
17
  require('zod');
18
18
  require('tweetnacl');
@@ -31,7 +31,7 @@ require('fs');
31
31
  require('node:readline');
32
32
  require('@anthropic-ai/sandbox-runtime');
33
33
  require('expo-server-sdk');
34
- require('./agentGuidance-FDBKJgGC.cjs');
34
+ require('./agentGuidance--QIi_rZ2.cjs');
35
35
  require('ink');
36
36
  require('react');
37
37
  require('@anthropic-ai/claude-agent-sdk');
package/dist/lib.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./types-CGACQD3M.cjs');
4
- var persistence = require('./limits-WZLbGgEg.cjs');
3
+ var index = require('./types-t1gxALVE.cjs');
4
+ var persistence = require('./limits-FZWhlsBu.cjs');
5
5
  require('axios');
6
6
  require('node:events');
7
7
  require('socket.io-client');
package/dist/lib.d.cts CHANGED
@@ -426,6 +426,7 @@ declare const DaemonStateSchema: z$1.ZodObject<{
426
426
  restoredAt: z$1.ZodOptional<z$1.ZodNumber>;
427
427
  manual: z$1.ZodOptional<z$1.ZodBoolean>;
428
428
  attachTmux: z$1.ZodOptional<z$1.ZodString>;
429
+ direct: z$1.ZodOptional<z$1.ZodBoolean>;
429
430
  }, z$1.core.$strip>>;
430
431
  }, z$1.core.$strip>>;
431
432
  closedTerminals: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{
@@ -460,6 +461,11 @@ declare const DaemonStateSchema: z$1.ZodObject<{
460
461
  rpcAvailable: z$1.ZodBoolean;
461
462
  detectedAt: z$1.ZodNumber;
462
463
  }, z$1.core.$strip>>;
464
+ terminalHost: z$1.ZodOptional<z$1.ZodObject<{
465
+ tmuxAvailable: z$1.ZodBoolean;
466
+ tmuxVersion: z$1.ZodOptional<z$1.ZodString>;
467
+ detectedAt: z$1.ZodNumber;
468
+ }, z$1.core.$strip>>;
463
469
  cliUpdate: z$1.ZodOptional<z$1.ZodObject<{
464
470
  currentVersion: z$1.ZodString;
465
471
  recommendedVersion: z$1.ZodNullable<z$1.ZodString>;
@@ -1274,6 +1280,10 @@ interface TerminalListItem {
1274
1280
  * it last had. */
1275
1281
  paneCols?: number;
1276
1282
  paneRows?: number;
1283
+ /** B-486: a direct-pty shell (no tmux). Listed from the daemon's own
1284
+ * session map; dies with the daemon, so the web marks it non-restorable.
1285
+ * Old webs ignore it. */
1286
+ direct?: boolean;
1277
1287
  }
1278
1288
 
1279
1289
  interface CLIAvailability {
package/dist/lib.d.mts CHANGED
@@ -426,6 +426,7 @@ declare const DaemonStateSchema: z$1.ZodObject<{
426
426
  restoredAt: z$1.ZodOptional<z$1.ZodNumber>;
427
427
  manual: z$1.ZodOptional<z$1.ZodBoolean>;
428
428
  attachTmux: z$1.ZodOptional<z$1.ZodString>;
429
+ direct: z$1.ZodOptional<z$1.ZodBoolean>;
429
430
  }, z$1.core.$strip>>;
430
431
  }, z$1.core.$strip>>;
431
432
  closedTerminals: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{
@@ -460,6 +461,11 @@ declare const DaemonStateSchema: z$1.ZodObject<{
460
461
  rpcAvailable: z$1.ZodBoolean;
461
462
  detectedAt: z$1.ZodNumber;
462
463
  }, z$1.core.$strip>>;
464
+ terminalHost: z$1.ZodOptional<z$1.ZodObject<{
465
+ tmuxAvailable: z$1.ZodBoolean;
466
+ tmuxVersion: z$1.ZodOptional<z$1.ZodString>;
467
+ detectedAt: z$1.ZodNumber;
468
+ }, z$1.core.$strip>>;
463
469
  cliUpdate: z$1.ZodOptional<z$1.ZodObject<{
464
470
  currentVersion: z$1.ZodString;
465
471
  recommendedVersion: z$1.ZodNullable<z$1.ZodString>;
@@ -1274,6 +1280,10 @@ interface TerminalListItem {
1274
1280
  * it last had. */
1275
1281
  paneCols?: number;
1276
1282
  paneRows?: number;
1283
+ /** B-486: a direct-pty shell (no tmux). Listed from the daemon's own
1284
+ * session map; dies with the daemon, so the web marks it non-restorable.
1285
+ * Old webs ignore it. */
1286
+ direct?: boolean;
1277
1287
  }
1278
1288
 
1279
1289
  interface CLIAvailability {
package/dist/lib.mjs CHANGED
@@ -1,5 +1,5 @@
1
- export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema } from './types-DFYgWw3-.mjs';
2
- export { c as configuration, l as logger } from './limits-Dh0u29C4.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema } from './types-ipzMqciq.mjs';
2
+ export { c as configuration, l as logger } from './limits-BXI1Gzvd.mjs';
3
3
  import 'axios';
4
4
  import 'node:events';
5
5
  import 'socket.io-client';
@@ -9,7 +9,7 @@ import chalk from 'chalk';
9
9
  import { inspect } from 'node:util';
10
10
 
11
11
  var name = "very-happy-cli";
12
- var version = "0.2.147";
12
+ var version = "0.2.149";
13
13
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
14
14
  var author = "Kirill Dubovitskiy";
15
15
  var contributors = [
@@ -92,7 +92,7 @@ var scripts = {
92
92
  };
93
93
  var dependencies = {
94
94
  "@agentclientprotocol/sdk": "^0.14.1",
95
- "@anthropic-ai/claude-agent-sdk": "0.3.267",
95
+ "@anthropic-ai/claude-agent-sdk": "0.3.281",
96
96
  "@anthropic-ai/sandbox-runtime": "^0.0.37",
97
97
  "@modelcontextprotocol/sdk": "1.30.0",
98
98
  "@noble/ed25519": "^3.0.0",
@@ -126,12 +126,12 @@ var dependencies = {
126
126
  zod: "^4.0.0"
127
127
  };
128
128
  var optionalDependencies = {
129
- "very-happy-tools-arm64-darwin": "0.2.147",
130
- "very-happy-tools-x64-darwin": "0.2.147",
131
- "very-happy-tools-arm64-linux": "0.2.147",
132
- "very-happy-tools-x64-linux": "0.2.147",
133
- "very-happy-tools-arm64-win32": "0.2.147",
134
- "very-happy-tools-x64-win32": "0.2.147"
129
+ "very-happy-tools-arm64-darwin": "0.2.149",
130
+ "very-happy-tools-x64-darwin": "0.2.149",
131
+ "very-happy-tools-arm64-linux": "0.2.149",
132
+ "very-happy-tools-x64-linux": "0.2.149",
133
+ "very-happy-tools-arm64-win32": "0.2.149",
134
+ "very-happy-tools-x64-win32": "0.2.149"
135
135
  };
136
136
  var devDependencies = {
137
137
  "@slopus/happy-wire": "workspace:*",
@@ -30,7 +30,7 @@ function _interopNamespaceDefault(e) {
30
30
  var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
31
31
 
32
32
  var name = "very-happy-cli";
33
- var version = "0.2.147";
33
+ var version = "0.2.149";
34
34
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
35
35
  var author = "Kirill Dubovitskiy";
36
36
  var contributors = [
@@ -113,7 +113,7 @@ var scripts = {
113
113
  };
114
114
  var dependencies = {
115
115
  "@agentclientprotocol/sdk": "^0.14.1",
116
- "@anthropic-ai/claude-agent-sdk": "0.3.267",
116
+ "@anthropic-ai/claude-agent-sdk": "0.3.281",
117
117
  "@anthropic-ai/sandbox-runtime": "^0.0.37",
118
118
  "@modelcontextprotocol/sdk": "1.30.0",
119
119
  "@noble/ed25519": "^3.0.0",
@@ -147,12 +147,12 @@ var dependencies = {
147
147
  zod: "^4.0.0"
148
148
  };
149
149
  var optionalDependencies = {
150
- "very-happy-tools-arm64-darwin": "0.2.147",
151
- "very-happy-tools-x64-darwin": "0.2.147",
152
- "very-happy-tools-arm64-linux": "0.2.147",
153
- "very-happy-tools-x64-linux": "0.2.147",
154
- "very-happy-tools-arm64-win32": "0.2.147",
155
- "very-happy-tools-x64-win32": "0.2.147"
150
+ "very-happy-tools-arm64-darwin": "0.2.149",
151
+ "very-happy-tools-x64-darwin": "0.2.149",
152
+ "very-happy-tools-arm64-linux": "0.2.149",
153
+ "very-happy-tools-x64-linux": "0.2.149",
154
+ "very-happy-tools-arm64-win32": "0.2.149",
155
+ "very-happy-tools-x64-win32": "0.2.149"
156
156
  };
157
157
  var devDependencies = {
158
158
  "@slopus/happy-wire": "workspace:*",
@@ -1,10 +1,10 @@
1
- import { r as registerTeamsTools, P as PREVIEW_TOOL_NAME, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION } from './agentGuidance-CK792QWi.mjs';
1
+ import { r as registerTeamsTools, P as PREVIEW_TOOL_NAME, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION } from './agentGuidance-oMVJvUl7.mjs';
2
2
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
4
  import { z } from 'zod';
5
- import { j as pushClipboardViaDaemon, k as pushFilePreviewViaDaemon, l as setTerminalTitleViaDaemon } from './types-DFYgWw3-.mjs';
6
- import { l as logger, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, f as CLIPBOARD_MAX_BYTES } from './limits-Dh0u29C4.mjs';
7
- import { h as checkPreviewPath, j as registerAssistantSessionTools } from './index-B7UauKjp.mjs';
5
+ import { j as pushClipboardViaDaemon, k as pushFilePreviewViaDaemon, l as setTerminalTitleViaDaemon } from './types-ipzMqciq.mjs';
6
+ import { l as logger, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, f as CLIPBOARD_MAX_BYTES } from './limits-BXI1Gzvd.mjs';
7
+ import { h as checkPreviewPath, j as registerAssistantSessionTools } from './index-Dfkyar7S.mjs';
8
8
  import 'node:fs/promises';
9
9
  import 'node:os';
10
10
  import 'node:crypto';