very-happy-cli 0.2.149 → 0.2.150

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 (49) hide show
  1. package/dist/{AcpBackend-Baqb8dNm.mjs → AcpBackend-C-dhGJgd.mjs} +2 -2
  2. package/dist/{AcpBackend-CnZpEfGd.cjs → AcpBackend-CXawaWWx.cjs} +2 -2
  3. package/dist/{AcpSessionManager-CC6mdFXs.mjs → AcpSessionManager-DKOtSqJc.mjs} +1 -1
  4. package/dist/{AcpSessionManager-e2vxmIbj.cjs → AcpSessionManager-TrwEZR7y.cjs} +1 -1
  5. package/dist/{agentGuidance--QIi_rZ2.cjs → agentGuidance-Dla-BXO8.cjs} +1 -1
  6. package/dist/{agentGuidance-oMVJvUl7.mjs → agentGuidance-DrfhtVP1.mjs} +1 -1
  7. package/dist/{agentHome-CKSPsS8d.mjs → agentHome-Dm-Wjs38.mjs} +2 -2
  8. package/dist/{agentHome-3kRCtzOL.cjs → agentHome-rylNIkix.cjs} +2 -2
  9. package/dist/codex/happyMcpStdioBridge.cjs +2 -2
  10. package/dist/codex/happyMcpStdioBridge.mjs +2 -2
  11. package/dist/{config-CzJZcvTO.cjs → config-CgPu2wtS.cjs} +4 -4
  12. package/dist/{config-C8jpk6IA.mjs → config-Dhu6LU0h.mjs} +4 -4
  13. package/dist/{index-BPCXUrEe.mjs → index-BsYH1sjV.mjs} +4 -4
  14. package/dist/{index-Dfkyar7S.mjs → index-CpNYvMTJ.mjs} +147 -40
  15. package/dist/{index-DrVq0CqK.mjs → index-CzpooENj.mjs} +8 -8
  16. package/dist/{index-DgK4KX-Z.cjs → index-DEVkDRas.cjs} +7 -7
  17. package/dist/{index-DBN2Zpqc.cjs → index-DvfCUuDK.cjs} +4 -4
  18. package/dist/{index-CyfXsCXl.cjs → index-K6mUS0jF.cjs} +145 -38
  19. package/dist/index.cjs +4 -4
  20. package/dist/index.mjs +4 -4
  21. package/dist/{installTerminalHooks-COqkLz6f.mjs → installTerminalHooks-BF_tmw9V.mjs} +4 -4
  22. package/dist/{installTerminalHooks-kdAoTfNT.cjs → installTerminalHooks-NIbsQ1wi.cjs} +4 -4
  23. package/dist/lib.cjs +2 -2
  24. package/dist/lib.mjs +2 -2
  25. package/dist/{limits-FZWhlsBu.cjs → limits-Dyma1REp.cjs} +7 -7
  26. package/dist/{limits-BXI1Gzvd.mjs → limits-FThmm7WR.mjs} +7 -7
  27. package/dist/{mcp-Dfnoirpi.mjs → mcp-DzydgXpf.mjs} +4 -4
  28. package/dist/{mcp-DoLZbbZp.cjs → mcp-_TVUSg8W.cjs} +4 -4
  29. package/dist/{piRuntime-BK6YZm2X.mjs → piRuntime-ACOhil6t.mjs} +2 -2
  30. package/dist/{piRuntime-DmE4ysfG.cjs → piRuntime-CSAiJk0X.cjs} +2 -2
  31. package/dist/{piTerminal-Bczubq2n.mjs → piTerminal-BlE4vbvZ.mjs} +6 -6
  32. package/dist/{piTerminal-qQAzQwIU.cjs → piTerminal-DHxGB3Ic.cjs} +6 -6
  33. package/dist/{runGemini-ComTu0EB.cjs → runGemini-BMYCU16c.cjs} +6 -6
  34. package/dist/{runGemini-Cce_pjTs.mjs → runGemini-D5IV1MoF.mjs} +6 -6
  35. package/dist/{runOpenClaw-DXP5_chb.mjs → runOpenClaw-CWPXrKMJ.mjs} +5 -5
  36. package/dist/{runOpenClaw-M3YlDt8z.cjs → runOpenClaw-Qs4eFtcS.cjs} +5 -5
  37. package/dist/{send-DDD57Cr_.mjs → send-Dv0km8UI.mjs} +4 -4
  38. package/dist/{send-0LrSwGgr.cjs → send-qXWGilm8.cjs} +4 -4
  39. package/dist/{sessions-2Bkau9T4.cjs → sessions-CpIdDhH7.cjs} +4 -4
  40. package/dist/{sessions-ClBPEtz2.mjs → sessions-DoULfKui.mjs} +4 -4
  41. package/dist/{spawn-7lLymdT1.mjs → spawn-DQuOmUP7.mjs} +4 -4
  42. package/dist/{spawn-Cm3Da8Ge.cjs → spawn-DqzG1bTH.cjs} +4 -4
  43. package/dist/{teams-DyBjdXI3.mjs → teams-4mhNh5cj.mjs} +4 -4
  44. package/dist/{teams-DKKeIG-u.cjs → teams-ByEgUzsH.cjs} +4 -4
  45. package/dist/{todo-jXHGGH89.mjs → todo-C9IAUf0K.mjs} +3 -3
  46. package/dist/{todo-8RgCTDxH.cjs → todo-D7SDXL0c.cjs} +3 -3
  47. package/dist/{types-ipzMqciq.mjs → types-BD542hb1.mjs} +1 -1
  48. package/dist/{types-t1gxALVE.cjs → types-D2Gkpe0N.cjs} +1 -1
  49. package/package.json +7 -7
@@ -1,10 +1,10 @@
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';
1
+ import { D as DefaultTransport, A as AcpBackend } from './AcpBackend-C-dhGJgd.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-C-dhGJgd.mjs';
3
+ import { r as readSettings, g as encodeBase64, l as logger, c as configuration } from './limits-FThmm7WR.mjs';
4
+ import { A as AcpSessionManager } from './AcpSessionManager-DKOtSqJc.mjs';
5
+ import { m as connectionState, A as ApiClient, n as notifyDaemonSessionStarted, o as BUILTIN_TODO_DISCOVERY } from './types-BD542hb1.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-CpNYvMTJ.mjs';
7
+ import { p as preparePiTeamsRuntime } from './piRuntime-ACOhil6t.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-oMVJvUl7.mjs';
36
+ import './agentGuidance-DrfhtVP1.mjs';
37
37
  import 'ink';
38
38
  import 'react';
39
39
  import '@anthropic-ai/claude-agent-sdk';
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
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');
3
+ var AcpBackend = require('./AcpBackend-CXawaWWx.cjs');
4
+ var persistence = require('./limits-Dyma1REp.cjs');
5
+ var AcpSessionManager = require('./AcpSessionManager-TrwEZR7y.cjs');
6
+ var index = require('./types-D2Gkpe0N.cjs');
7
+ var index$1 = require('./index-K6mUS0jF.cjs');
8
+ var piRuntime = require('./piRuntime-CSAiJk0X.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--QIi_rZ2.cjs');
37
+ require('./agentGuidance-Dla-BXO8.cjs');
38
38
  require('ink');
39
39
  require('react');
40
40
  require('@anthropic-ai/claude-agent-sdk');
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-CyfXsCXl.cjs');
3
+ var index = require('./index-K6mUS0jF.cjs');
4
4
  var claudeAgentSdk = require('@anthropic-ai/claude-agent-sdk');
5
5
  require('chalk');
6
6
  require('node:os');
7
7
  require('node:crypto');
8
- require('./types-t1gxALVE.cjs');
8
+ require('./types-D2Gkpe0N.cjs');
9
9
  require('axios');
10
- require('./limits-FZWhlsBu.cjs');
10
+ require('./limits-Dyma1REp.cjs');
11
11
  require('node:fs/promises');
12
12
  require('node:fs');
13
13
  require('node:path');
@@ -32,7 +32,7 @@ require('fs');
32
32
  require('node:readline');
33
33
  require('@anthropic-ai/sandbox-runtime');
34
34
  require('expo-server-sdk');
35
- require('./agentGuidance--QIi_rZ2.cjs');
35
+ require('./agentGuidance-Dla-BXO8.cjs');
36
36
  require('ink');
37
37
  require('react');
38
38
  require('ps-list');
@@ -3,14 +3,14 @@
3
3
  var chalk = require('chalk');
4
4
  var os = require('node:os');
5
5
  var node_crypto = require('node:crypto');
6
- var index = require('./types-t1gxALVE.cjs');
7
- var persistence = require('./limits-FZWhlsBu.cjs');
6
+ var index = require('./types-D2Gkpe0N.cjs');
7
+ var persistence = require('./limits-Dyma1REp.cjs');
8
8
  var spawn = require('cross-spawn');
9
9
  var path = require('node:path');
10
10
  var node_readline = require('node:readline');
11
11
  var node_fs = require('node:fs');
12
12
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
13
- var agentGuidance = require('./agentGuidance--QIi_rZ2.cjs');
13
+ var agentGuidance = require('./agentGuidance-Dla-BXO8.cjs');
14
14
  var promises = require('node:fs/promises');
15
15
  var fs = require('fs/promises');
16
16
  var ink = require('ink');
@@ -5126,6 +5126,61 @@ function shareSafeEnvironmentInfo(env = process.env, runtime = process) {
5126
5126
  };
5127
5127
  }
5128
5128
 
5129
+ const NPM_SAFE_ARG = /^[A-Za-z0-9@=.,+/_-]+$/;
5130
+ function globalPrefixForPackage(packageDir) {
5131
+ if (!path.isAbsolute(packageDir)) return null;
5132
+ const dir = path.resolve(packageDir);
5133
+ const nodeModules = path.dirname(dir);
5134
+ const lib = path.dirname(nodeModules);
5135
+ const prefix = path.dirname(lib);
5136
+ if (path.basename(dir) !== "very-happy-cli" || path.basename(nodeModules) !== "node_modules" || path.basename(lib) !== "lib") return null;
5137
+ if (prefix === lib || path.resolve(prefix) === "/" || !NPM_SAFE_ARG.test(prefix)) return null;
5138
+ return prefix;
5139
+ }
5140
+ function packageDirForBin(realBin) {
5141
+ const packageDir = path.dirname(path.dirname(realBin));
5142
+ return path.basename(path.dirname(realBin)) === "bin" && path.basename(packageDir) === "very-happy-cli" ? packageDir : null;
5143
+ }
5144
+ function installLocationWarnings(facts, version) {
5145
+ const warnings = [];
5146
+ const running = path.resolve(facts.runningPackageDir);
5147
+ const packages = [...new Set(facts.onPath.map(packageDirForBin).filter((dir) => Boolean(dir)).map((dir) => path.resolve(dir)))];
5148
+ if (packages.length > 1) {
5149
+ warnings.push(`Found ${packages.length} very-happy installs on PATH (first one wins): ${packages.join(", ")}. Updating one does not update the others; remove the ones you do not use.`);
5150
+ }
5151
+ if (packages[0] && packages[0] !== running) {
5152
+ warnings.push(`The very-happy command runs ${packages[0]}, but this CLI runs from ${running}.`);
5153
+ }
5154
+ const prefix = globalPrefixForPackage(running);
5155
+ if (prefix && facts.npmGlobalPrefix && path.resolve(facts.npmGlobalPrefix) !== path.resolve(prefix)) {
5156
+ const target = version ? `very-happy-cli@${version}` : "very-happy-cli@latest";
5157
+ warnings.push(`npm install -g writes to ${facts.npmGlobalPrefix}, but this CLI runs from ${prefix}; a plain update will not take effect. Update with: npm install -g --prefix ${prefix} --allow-scripts=very-happy-cli,node-pty ${target} && very-happy daemon start`);
5158
+ }
5159
+ return warnings;
5160
+ }
5161
+ function gatherInstallLocationFacts(runningPackageDir, env = process.env) {
5162
+ if (process.platform === "win32") return null;
5163
+ const onPath = [];
5164
+ for (const dir of (env.PATH ?? "").split(path.delimiter)) {
5165
+ if (!dir) continue;
5166
+ try {
5167
+ const candidate = path.join(dir, "very-happy");
5168
+ if (!node_fs.statSync(candidate).isFile()) continue;
5169
+ const real = node_fs.realpathSync(candidate);
5170
+ if (!onPath.includes(real)) onPath.push(real);
5171
+ } catch {
5172
+ }
5173
+ }
5174
+ let npmGlobalPrefix = null;
5175
+ try {
5176
+ const result = node_child_process.spawnSync("npm", ["prefix", "-g"], { encoding: "utf8", timeout: 5e3, env });
5177
+ const out = result.status === 0 ? result.stdout.trim() : "";
5178
+ npmGlobalPrefix = out && path.isAbsolute(out) && !out.includes("\n") ? out : null;
5179
+ } catch {
5180
+ }
5181
+ return { runningPackageDir, onPath, npmGlobalPrefix };
5182
+ }
5183
+
5129
5184
  function printCliUpdateStatus(state) {
5130
5185
  const installed = persistence.configuration.currentCliVersion;
5131
5186
  const running = state?.startedWithCliVersion ?? null;
@@ -5143,6 +5198,10 @@ function printCliUpdateStatus(state) {
5143
5198
  console.log(chalk.yellow(" \u25B3 A newer CLI is available."));
5144
5199
  }
5145
5200
  if (summary.installCommand) console.log(` Update: ${summary.installCommand}`);
5201
+ const facts = gatherInstallLocationFacts(projectPath.projectPath());
5202
+ for (const warning of facts ? installLocationWarnings(facts, state?.cliUpdate?.recommendedVersion ?? void 0) : []) {
5203
+ console.log(chalk.yellow(` \u26A0 ${warning}`));
5204
+ }
5146
5205
  }
5147
5206
  function getEnvironmentInfo() {
5148
5207
  return shareSafeEnvironmentInfo();
@@ -5335,8 +5394,8 @@ ${typeLabels[type] || type}:`));
5335
5394
  }
5336
5395
  console.log(chalk.gray(" An external claude command is only needed for native terminal/mirror use."));
5337
5396
  try {
5338
- const { resolveAgentHomesForCli } = await Promise.resolve().then(function () { return require('./agentHome-3kRCtzOL.cjs'); });
5339
- const { describeAgentHome } = await Promise.resolve().then(function () { return require('./types-t1gxALVE.cjs'); }).then(function (n) { return n.index; });
5397
+ const { resolveAgentHomesForCli } = await Promise.resolve().then(function () { return require('./agentHome-rylNIkix.cjs'); });
5398
+ const { describeAgentHome } = await Promise.resolve().then(function () { return require('./types-D2Gkpe0N.cjs'); }).then(function (n) { return n.index; });
5340
5399
  const homes = await resolveAgentHomesForCli();
5341
5400
  console.log(chalk.green(`\u2713 Claude config dir: ${describeAgentHome(homes.claudeConfigDir)}`));
5342
5401
  console.log(chalk.green(`\u2713 Codex home: ${describeAgentHome(homes.codexHome)}`));
@@ -7639,8 +7698,8 @@ function serialTask(task) {
7639
7698
  };
7640
7699
  }
7641
7700
 
7642
- function autoUpdateInstallArgs(version) {
7643
- return ["i", "-g", "--allow-scripts=very-happy-cli,node-pty", `very-happy-cli@${version}`];
7701
+ function autoUpdateInstallArgs(version, prefix) {
7702
+ return ["i", "-g", ...prefix ? [`--prefix=${prefix}`] : [], "--allow-scripts=very-happy-cli,node-pty", `very-happy-cli@${version}`];
7644
7703
  }
7645
7704
 
7646
7705
  const processDefaults = {
@@ -7700,7 +7759,34 @@ const runNpmProcess = (args, deps = processDefaults) => new Promise((resolveResu
7700
7759
  child.on("close", (code) => done({ code: timedOut ? null : code, stdout, stderr, terminationConfirmed: !timedOut || treeKilled }));
7701
7760
  });
7702
7761
  const runNpm = (args) => runNpmProcess(args);
7703
- const defaults = { npm: runNpm, fs: { lstat: promises.lstat, readlink: promises.readlink, unlink: promises.unlink, rm: promises.rm, readFile: promises.readFile, symlink: promises.symlink }, platform: process.platform };
7762
+ const defaults = {
7763
+ npm: runNpm,
7764
+ fs: { lstat: promises.lstat, readlink: promises.readlink, unlink: promises.unlink, rm: promises.rm, readFile: promises.readFile, symlink: promises.symlink, access: promises.access },
7765
+ platform: process.platform,
7766
+ runningPackageDir: projectPath.projectPath()
7767
+ };
7768
+ async function runningVersion(deps) {
7769
+ if (!deps.runningPackageDir) return null;
7770
+ try {
7771
+ const manifest = JSON.parse(await deps.fs.readFile(path.join(deps.runningPackageDir, "package.json"), "utf8"));
7772
+ return manifest?.name === "very-happy-cli" && typeof manifest.version === "string" ? manifest.version : null;
7773
+ } catch {
7774
+ return null;
7775
+ }
7776
+ }
7777
+ async function verifyRunningCopy(code, version, deps) {
7778
+ if (code !== 0 || !deps.runningPackageDir) return code;
7779
+ return await runningVersion(deps) === version ? 0 : { failed: "installed_elsewhere" };
7780
+ }
7781
+ async function writable(path, deps) {
7782
+ if (!deps.fs.access) return true;
7783
+ try {
7784
+ await deps.fs.access(path, promises.constants.W_OK);
7785
+ return true;
7786
+ } catch (error) {
7787
+ return error.code === "ENOENT";
7788
+ }
7789
+ }
7704
7790
  function ownedCliLink(link, target, packageDir) {
7705
7791
  const resolved = path.resolve(path.dirname(link), target);
7706
7792
  return resolved.startsWith(path.join(packageDir, "bin") + path.sep);
@@ -7708,14 +7794,27 @@ function ownedCliLink(link, target, packageDir) {
7708
7794
  async function installCliSafely(version, deps = defaults) {
7709
7795
  const parsed = index.parseExactVersion(version);
7710
7796
  if (!parsed) throw new Error("Invalid exact CLI version");
7711
- const args = autoUpdateInstallArgs(parsed.exact);
7712
7797
  if (deps.platform === "win32") {
7713
- const result2 = await deps.npm(args);
7714
- return result2.terminationConfirmed === false ? "blocked" : result2.code;
7798
+ const result2 = await deps.npm(autoUpdateInstallArgs(parsed.exact));
7799
+ return result2.terminationConfirmed === false ? "blocked" : verifyRunningCopy(result2.code, parsed.exact, deps);
7800
+ }
7801
+ let pinnedPrefix;
7802
+ if (deps.runningPackageDir) {
7803
+ const running = globalPrefixForPackage(deps.runningPackageDir);
7804
+ const runningStat = running ? await deps.fs.lstat(deps.runningPackageDir).catch(() => null) : null;
7805
+ if (!running || !runningStat?.isDirectory() || runningStat.isSymbolicLink() || !await runningVersion(deps)) {
7806
+ return { manual: "install_location_unverified" };
7807
+ }
7808
+ for (const path$1 of [path.dirname(deps.runningPackageDir), deps.runningPackageDir, path.join(running, "bin")]) {
7809
+ if (!await writable(path$1, deps)) return { manual: "install_location_not_writable" };
7810
+ }
7811
+ pinnedPrefix = running;
7715
7812
  }
7716
- const rootResult = await deps.npm(["root", "-g"]);
7813
+ const prefixArgs = pinnedPrefix ? [`--prefix=${pinnedPrefix}`] : [];
7814
+ const args = autoUpdateInstallArgs(parsed.exact, pinnedPrefix);
7815
+ const rootResult = await deps.npm(["root", "-g", ...prefixArgs]);
7717
7816
  if (rootResult.terminationConfirmed === false) return "blocked";
7718
- const prefixResult = await deps.npm(["prefix", "-g"]);
7817
+ const prefixResult = await deps.npm(["prefix", "-g", ...prefixArgs]);
7719
7818
  if (prefixResult.terminationConfirmed === false) return "blocked";
7720
7819
  const root = rootResult.stdout.trim();
7721
7820
  const prefix = prefixResult.stdout.trim();
@@ -7724,6 +7823,9 @@ async function installCliSafely(version, deps = defaults) {
7724
7823
  }
7725
7824
  if (path.resolve(root) !== path.resolve(prefix, "lib/node_modules")) throw new Error("Unexpected npm root/prefix relationship");
7726
7825
  const packageDir = path.join(root, "very-happy-cli");
7826
+ if (deps.runningPackageDir && path.resolve(packageDir) !== path.resolve(deps.runningPackageDir)) {
7827
+ return { manual: "install_location_unverified" };
7828
+ }
7727
7829
  const packageStat = await deps.fs.lstat(packageDir).catch((error) => {
7728
7830
  if (error.code === "ENOENT") return null;
7729
7831
  throw error;
@@ -7758,7 +7860,7 @@ async function installCliSafely(version, deps = defaults) {
7758
7860
  return "blocked";
7759
7861
  }
7760
7862
  result = first.code;
7761
- if (first.code === 0 || first.code === null) return first.code;
7863
+ if (first.code === 0 || first.code === null) return await verifyRunningCopy(first.code, parsed.exact, deps);
7762
7864
  if (!/\b(?:EEXIST|ENOTEMPTY)\b/.test(first.stderr ?? "")) return first.code;
7763
7865
  const failedStat = await deps.fs.lstat(packageDir).catch((error) => {
7764
7866
  if (error.code === "ENOENT") return null;
@@ -7774,7 +7876,7 @@ async function installCliSafely(version, deps = defaults) {
7774
7876
  safeToRestore = false;
7775
7877
  return "blocked";
7776
7878
  }
7777
- return result;
7879
+ return await verifyRunningCopy(result, parsed.exact, deps);
7778
7880
  } finally {
7779
7881
  if (result !== 0 && safeToRestore) {
7780
7882
  for (const { link, target } of ownLinks) {
@@ -7810,7 +7912,7 @@ function createUpdateController(deps) {
7810
7912
  async function evaluate() {
7811
7913
  if (!policy || running) return;
7812
7914
  const target = manualVersion ?? policy.autoUpdateVersion ?? null;
7813
- if (outcome?.version === target && ["failed", "installed"].includes(outcome.state)) {
7915
+ if (outcome?.version === target && ["failed", "installed", "manual_required"].includes(outcome.state)) {
7814
7916
  const fingerprint = JSON.stringify([policy.checkedAt, outcome.state, outcome.version, outcome.detail, manualVersion]);
7815
7917
  if (fingerprint !== lastPublished) {
7816
7918
  lastPublished = fingerprint;
@@ -7848,6 +7950,11 @@ function createUpdateController(deps) {
7848
7950
  publish("installing", target);
7849
7951
  try {
7850
7952
  const code = await deps.install(target);
7953
+ if (code && typeof code === "object") {
7954
+ if ("manual" in code) publish("manual_required", target, code.manual);
7955
+ else publish("failed", target, code.failed);
7956
+ return;
7957
+ }
7851
7958
  blocked = code === "blocked";
7852
7959
  publish(
7853
7960
  blocked ? "manual_required" : code === 0 ? "installed" : "failed",
@@ -8016,7 +8123,7 @@ function parseJsonObject(text) {
8016
8123
  return null;
8017
8124
  }
8018
8125
  }
8019
- function resolveSdkClaudeBinary(platform = process.platform, arch = process.arch, resolver = (s) => node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-CyfXsCXl.cjs', document.baseURI).href))).resolve(s)) {
8126
+ function resolveSdkClaudeBinary(platform = process.platform, arch = process.arch, resolver = (s) => node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-K6mUS0jF.cjs', document.baseURI).href))).resolve(s)) {
8020
8127
  const platformArch = `${platform}-${arch}`;
8021
8128
  const candidates = [
8022
8129
  `@anthropic-ai/claude-agent-sdk-${platformArch}/claude`,
@@ -12492,7 +12599,7 @@ function registerSideQuestionHandler(rpc, deps) {
12492
12599
  const retainMs = deps.retainMs ?? SIDE_QUESTION_RETAIN_MS;
12493
12600
  const maxRunMs = deps.maxRunMs ?? SIDE_QUESTION_MAX_RUN_MS;
12494
12601
  const fork = deps.run ?? (async (input) => {
12495
- const { query } = await Promise.resolve().then(function () { return require('./index-DBN2Zpqc.cjs'); });
12602
+ const { query } = await Promise.resolve().then(function () { return require('./index-DvfCUuDK.cjs'); });
12496
12603
  return runSideQuestion(query, input);
12497
12604
  });
12498
12605
  const run = async (input, live) => {
@@ -12611,7 +12718,7 @@ const MAX_TITLE_CHARS = 60;
12611
12718
  const GENERATION_TIMEOUT_MS = 3e4;
12612
12719
  function resolveClaudeBinary() {
12613
12720
  try {
12614
- const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-CyfXsCXl.cjs', document.baseURI).href)));
12721
+ const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-K6mUS0jF.cjs', document.baseURI).href)));
12615
12722
  const utilsPath = path.resolve(path.join(projectPath.projectPath(), "scripts", "claude_version_utils.cjs"));
12616
12723
  const { getClaudeCliPath } = require$1(utilsPath);
12617
12724
  const path$1 = getClaudeCliPath();
@@ -14840,9 +14947,9 @@ function resolveLocalSignupBootstrap(configuredMode, configuredInviteCodes, gene
14840
14947
  };
14841
14948
  }
14842
14949
 
14843
- const __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-CyfXsCXl.cjs', document.baseURI).href)));
14950
+ const __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-K6mUS0jF.cjs', document.baseURI).href)));
14844
14951
  const __dirname$1 = path.dirname(__filename$1);
14845
- const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-CyfXsCXl.cjs', document.baseURI).href)));
14952
+ const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-K6mUS0jF.cjs', document.baseURI).href)));
14846
14953
  const PRISMA_QUERY_ENGINE_FILES = {
14847
14954
  "arm64-darwin": "libquery_engine-darwin-arm64.dylib.node",
14848
14955
  "x64-darwin": "libquery_engine-darwin.dylib.node",
@@ -17780,7 +17887,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17780
17887
  return;
17781
17888
  } else if (subcommand === "install-terminal-hooks") {
17782
17889
  try {
17783
- const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-kdAoTfNT.cjs'); });
17890
+ const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-NIbsQ1wi.cjs'); });
17784
17891
  const command = parseTerminalHooksArgs(args.slice(1));
17785
17892
  if (command.action === "help") {
17786
17893
  console.log(TERMINAL_HOOKS_HELP);
@@ -17797,7 +17904,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17797
17904
  }
17798
17905
  } else if (subcommand === "agent-home") {
17799
17906
  try {
17800
- const { parseAgentHomeArgs, runAgentHomeCommand } = await Promise.resolve().then(function () { return require('./agentHome-3kRCtzOL.cjs'); });
17907
+ const { parseAgentHomeArgs, runAgentHomeCommand } = await Promise.resolve().then(function () { return require('./agentHome-rylNIkix.cjs'); });
17801
17908
  await runAgentHomeCommand(parseAgentHomeArgs(args.slice(1)));
17802
17909
  process.exit(0);
17803
17910
  } catch (error) {
@@ -17806,7 +17913,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17806
17913
  }
17807
17914
  } else if (subcommand === "spawn") {
17808
17915
  try {
17809
- const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-Cm3Da8Ge.cjs'); });
17916
+ const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-DqzG1bTH.cjs'); });
17810
17917
  await handleSpawnCommand(args.slice(1));
17811
17918
  } catch (error) {
17812
17919
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -17818,7 +17925,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17818
17925
  return;
17819
17926
  } else if (subcommand === "sessions") {
17820
17927
  try {
17821
- const { handleSessionsCommand } = await Promise.resolve().then(function () { return require('./sessions-2Bkau9T4.cjs'); });
17928
+ const { handleSessionsCommand } = await Promise.resolve().then(function () { return require('./sessions-CpIdDhH7.cjs'); });
17822
17929
  await handleSessionsCommand(args.slice(1));
17823
17930
  } catch (error) {
17824
17931
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -17830,7 +17937,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17830
17937
  return;
17831
17938
  } else if (subcommand === "send") {
17832
17939
  try {
17833
- const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-0LrSwGgr.cjs'); });
17940
+ const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-qXWGilm8.cjs'); });
17834
17941
  await handleSendCommand(args.slice(1));
17835
17942
  } catch (error) {
17836
17943
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -17936,9 +18043,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17936
18043
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
17937
18044
  const projectId = args[3];
17938
18045
  try {
17939
- const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-CzJZcvTO.cjs'); });
17940
- const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./limits-FZWhlsBu.cjs'); }).then(function (n) { return n.persistence; });
17941
- const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-t1gxALVE.cjs'); }).then(function (n) { return n.api; });
18046
+ const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-CgPu2wtS.cjs'); });
18047
+ const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./limits-Dyma1REp.cjs'); }).then(function (n) { return n.persistence; });
18048
+ const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-D2Gkpe0N.cjs'); }).then(function (n) { return n.api; });
17942
18049
  let userEmail = void 0;
17943
18050
  try {
17944
18051
  const credentials = await readCredentialsForConfiguredRelay2();
@@ -17969,7 +18076,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17969
18076
  }
17970
18077
  if (geminiSubcommand === "project" && args[2] === "get") {
17971
18078
  try {
17972
- const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-CzJZcvTO.cjs'); });
18079
+ const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-CgPu2wtS.cjs'); });
17973
18080
  const config = readGeminiLocalConfig();
17974
18081
  if (config.googleCloudProject) {
17975
18082
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -18009,7 +18116,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18009
18116
  process.exit(0);
18010
18117
  }
18011
18118
  try {
18012
- const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-ComTu0EB.cjs'); });
18119
+ const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-BMYCU16c.cjs'); });
18013
18120
  let startedBy = void 0;
18014
18121
  for (let i = 1; i < args.length; i++) {
18015
18122
  if (args[i] === "--started-by") {
@@ -18032,7 +18139,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18032
18139
  } else if (subcommand === "pi") {
18033
18140
  if (args[1] === "--terminal") {
18034
18141
  try {
18035
- const { runPiTerminal } = await Promise.resolve().then(function () { return require('./piTerminal-qQAzQwIU.cjs'); });
18142
+ const { runPiTerminal } = await Promise.resolve().then(function () { return require('./piTerminal-DHxGB3Ic.cjs'); });
18036
18143
  process.exitCode = await runPiTerminal(args.slice(2));
18037
18144
  } catch (error) {
18038
18145
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -18049,7 +18156,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18049
18156
  }
18050
18157
  };
18051
18158
  try {
18052
- const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-DgK4KX-Z.cjs'); });
18159
+ const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-DEVkDRas.cjs'); });
18053
18160
  const parsed = parsePiRunnerArgs(args.slice(1));
18054
18161
  const resolved = resolveAcpAgentConfig(["pi", ...parsed.passthrough]);
18055
18162
  const { credentials } = await authAndSetupMachineIfNeeded();
@@ -18077,7 +18184,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18077
18184
  return;
18078
18185
  } else if (subcommand === "acp") {
18079
18186
  try {
18080
- const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-DgK4KX-Z.cjs'); });
18187
+ const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-DEVkDRas.cjs'); });
18081
18188
  let startedBy = void 0;
18082
18189
  let verbose = false;
18083
18190
  const acpArgs = [];
@@ -18117,7 +18224,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18117
18224
  return;
18118
18225
  } else if (subcommand === "openclaw") {
18119
18226
  try {
18120
- const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-M3YlDt8z.cjs'); });
18227
+ const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-Qs4eFtcS.cjs'); });
18121
18228
  let startedBy = void 0;
18122
18229
  let verbose = false;
18123
18230
  let gatewayUrl;
@@ -18168,7 +18275,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18168
18275
  return;
18169
18276
  } else if (subcommand === "todo") {
18170
18277
  try {
18171
- const { handleTodoCommand } = await Promise.resolve().then(function () { return require('./todo-8RgCTDxH.cjs'); });
18278
+ const { handleTodoCommand } = await Promise.resolve().then(function () { return require('./todo-D7SDXL0c.cjs'); });
18172
18279
  await handleTodoCommand(args.slice(1));
18173
18280
  } catch (error) {
18174
18281
  console.error(JSON.stringify({ error: error instanceof Error ? error.message : "Todo command failed" }));
@@ -18177,7 +18284,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18177
18284
  return;
18178
18285
  } else if (subcommand === "teams") {
18179
18286
  try {
18180
- const { handleTeamsCommand } = await Promise.resolve().then(function () { return require('./teams-DKKeIG-u.cjs'); });
18287
+ const { handleTeamsCommand } = await Promise.resolve().then(function () { return require('./teams-ByEgUzsH.cjs'); });
18181
18288
  await handleTeamsCommand(args.slice(1));
18182
18289
  } catch (error) {
18183
18290
  console.error(error instanceof Error ? error.message : "Teams command failed");
@@ -18186,7 +18293,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18186
18293
  return;
18187
18294
  } else if (subcommand === "mcp" && (args.length === 1 || args.length === 2 && args[1] === "--terminal-tools")) {
18188
18295
  try {
18189
- const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-DoLZbbZp.cjs'); });
18296
+ const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-_TVUSg8W.cjs'); });
18190
18297
  await handleMcpCommand(args[1] === "--terminal-tools");
18191
18298
  } catch (error) {
18192
18299
  process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
package/dist/index.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  require('chalk');
4
- require('./index-CyfXsCXl.cjs');
5
- require('./limits-FZWhlsBu.cjs');
4
+ require('./index-K6mUS0jF.cjs');
5
+ require('./limits-Dyma1REp.cjs');
6
6
  require('zod');
7
- require('./types-t1gxALVE.cjs');
7
+ require('./types-D2Gkpe0N.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--QIi_rZ2.cjs');
18
+ require('./agentGuidance-Dla-BXO8.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-Dfkyar7S.mjs';
3
- import './limits-BXI1Gzvd.mjs';
2
+ import './index-CpNYvMTJ.mjs';
3
+ import './limits-FThmm7WR.mjs';
4
4
  import 'zod';
5
- import './types-ipzMqciq.mjs';
5
+ import './types-BD542hb1.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-oMVJvUl7.mjs';
16
+ import './agentGuidance-DrfhtVP1.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-Dfkyar7S.mjs';
7
+ import { t as tmuxSupportsSessionEnv } from './index-CpNYvMTJ.mjs';
8
8
  import 'path';
9
9
  import 'url';
10
10
  import 'node:crypto';
11
- import './types-ipzMqciq.mjs';
11
+ import './types-BD542hb1.mjs';
12
12
  import 'axios';
13
- import './limits-BXI1Gzvd.mjs';
13
+ import './limits-FThmm7WR.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-oMVJvUl7.mjs';
32
+ import './agentGuidance-DrfhtVP1.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-CyfXsCXl.cjs');
9
+ var index = require('./index-K6mUS0jF.cjs');
10
10
  require('path');
11
11
  require('url');
12
12
  require('node:crypto');
13
- require('./types-t1gxALVE.cjs');
13
+ require('./types-D2Gkpe0N.cjs');
14
14
  require('axios');
15
- require('./limits-FZWhlsBu.cjs');
15
+ require('./limits-Dyma1REp.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--QIi_rZ2.cjs');
34
+ require('./agentGuidance-Dla-BXO8.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-t1gxALVE.cjs');
4
- var persistence = require('./limits-FZWhlsBu.cjs');
3
+ var index = require('./types-D2Gkpe0N.cjs');
4
+ var persistence = require('./limits-Dyma1REp.cjs');
5
5
  require('axios');
6
6
  require('node:events');
7
7
  require('socket.io-client');
package/dist/lib.mjs CHANGED
@@ -1,5 +1,5 @@
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';
1
+ export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema } from './types-BD542hb1.mjs';
2
+ export { c as configuration, l as logger } from './limits-FThmm7WR.mjs';
3
3
  import 'axios';
4
4
  import 'node:events';
5
5
  import 'socket.io-client';
@@ -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.149";
33
+ var version = "0.2.150";
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 = [
@@ -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.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"
150
+ "very-happy-tools-arm64-darwin": "0.2.150",
151
+ "very-happy-tools-x64-darwin": "0.2.150",
152
+ "very-happy-tools-arm64-linux": "0.2.150",
153
+ "very-happy-tools-x64-linux": "0.2.150",
154
+ "very-happy-tools-arm64-win32": "0.2.150",
155
+ "very-happy-tools-x64-win32": "0.2.150"
156
156
  };
157
157
  var devDependencies = {
158
158
  "@slopus/happy-wire": "workspace:*",