very-happy-cli 0.2.118 → 0.2.120

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 (33) hide show
  1. package/dist/{AcpBackend-Bk9b823B.mjs → AcpBackend-DiIJaJWG.mjs} +1 -1
  2. package/dist/{AcpBackend-p_KNJkHc.cjs → AcpBackend-tou8FQXI.cjs} +1 -1
  3. package/dist/{AcpSessionManager-CDvqVHKf.mjs → AcpSessionManager-CZ0Az0GG.mjs} +1 -1
  4. package/dist/{AcpSessionManager-B9FTbpGQ.cjs → AcpSessionManager-fF_HFB98.cjs} +1 -1
  5. package/dist/{config-CkUn1dI4.cjs → config-CEbOao_0.cjs} +2 -2
  6. package/dist/{config-CIpgmGLR.mjs → config-CGDxsTZg.mjs} +2 -2
  7. package/dist/{index-BXOXRblP.cjs → index-BlkIz9BQ.cjs} +73 -36
  8. package/dist/{index-DIXjhnV1.mjs → index-CUJ6faw1.mjs} +69 -32
  9. package/dist/{index-CxjX8DGz.cjs → index-CYizH-JC.cjs} +2 -2
  10. package/dist/{index-B6cpyG_G.mjs → index-D4_LW69g.mjs} +5 -5
  11. package/dist/{index-BUVQf9PI.mjs → index-DKj_0dqB.mjs} +2 -2
  12. package/dist/{index-BzgtwTxC.cjs → index-HKcuQ_fQ.cjs} +4 -4
  13. package/dist/index.cjs +2 -2
  14. package/dist/index.mjs +2 -2
  15. package/dist/{installTerminalHooks-BAa6LaQQ.mjs → installTerminalHooks-B3EGNaJr.mjs} +2 -2
  16. package/dist/{installTerminalHooks-lXQa6bQU.cjs → installTerminalHooks-MWVPJDxV.cjs} +2 -2
  17. package/dist/lib.cjs +1 -1
  18. package/dist/lib.mjs +1 -1
  19. package/dist/{mcp-Dwc299mU.mjs → mcp-CZ1Z6AI5.mjs} +2 -2
  20. package/dist/{mcp-DMD7FxBI.cjs → mcp-DBKk5L6_.cjs} +2 -2
  21. package/dist/{runGemini-Bj4Egq7j.cjs → runGemini-BRUmjZgV.cjs} +4 -4
  22. package/dist/{runGemini-BaxGXE9w.mjs → runGemini-C3BCKTMp.mjs} +4 -4
  23. package/dist/{runOpenClaw-BwJhbIKU.mjs → runOpenClaw-DEYzcGSV.mjs} +3 -3
  24. package/dist/{runOpenClaw-BJhSvXYy.cjs → runOpenClaw-o1ImBlcJ.cjs} +3 -3
  25. package/dist/{send-BWGUkWhi.cjs → send-B9fh96vR.cjs} +2 -2
  26. package/dist/{send-DX13svrS.mjs → send-DFGH_-s_.mjs} +2 -2
  27. package/dist/{sessions-CGhpBNqn.cjs → sessions-BNyEJ2_6.cjs} +2 -2
  28. package/dist/{sessions-L7O3ypda.mjs → sessions-CKVfXHyi.mjs} +2 -2
  29. package/dist/{spawn-DPDWZdoW.mjs → spawn-B6kP4YjA.mjs} +2 -2
  30. package/dist/{spawn-CbY233Eg.cjs → spawn-xPV7-s4S.cjs} +2 -2
  31. package/dist/{types-ClvvHves.cjs → types-7ZSxm6Pi.cjs} +49 -31
  32. package/dist/{types-BtuOM9lw.mjs → types-Di0o0BdV.mjs} +48 -31
  33. package/package.json +7 -7
@@ -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.118";
54
+ var version = "0.2.120";
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.118",
168
- "very-happy-tools-x64-darwin": "0.2.118",
169
- "very-happy-tools-arm64-linux": "0.2.118",
170
- "very-happy-tools-x64-linux": "0.2.118",
171
- "very-happy-tools-arm64-win32": "0.2.118",
172
- "very-happy-tools-x64-win32": "0.2.118"
167
+ "very-happy-tools-arm64-darwin": "0.2.120",
168
+ "very-happy-tools-x64-darwin": "0.2.120",
169
+ "very-happy-tools-arm64-linux": "0.2.120",
170
+ "very-happy-tools-x64-linux": "0.2.120",
171
+ "very-happy-tools-arm64-win32": "0.2.120",
172
+ "very-happy-tools-x64-win32": "0.2.120"
173
173
  };
174
174
  var devDependencies = {
175
175
  "@slopus/happy-wire": "workspace:*",
@@ -1685,7 +1685,7 @@ class RpcHandlerManager {
1685
1685
  }
1686
1686
  }
1687
1687
 
1688
- 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-ClvvHves.cjs', document.baseURI).href))));
1688
+ 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-7ZSxm6Pi.cjs', document.baseURI).href))));
1689
1689
  function projectPath() {
1690
1690
  const path = path$1.resolve(__dirname$1, "..");
1691
1691
  return path;
@@ -4472,33 +4472,43 @@ function migrateSettings(raw, fromVersion) {
4472
4472
  let migrated = { ...raw };
4473
4473
  return migrated;
4474
4474
  }
4475
- async function readSettings() {
4475
+ async function readSettingsOutcome() {
4476
4476
  if (!node_fs.existsSync(configuration.settingsFile)) {
4477
- return { ...defaultSettings };
4477
+ return { kind: "absent" };
4478
4478
  }
4479
4479
  try {
4480
- const content = await promises.readFile(configuration.settingsFile, "utf8");
4481
- const raw = JSON.parse(content);
4482
- const schemaVersion = raw.schemaVersion ?? 1;
4483
- if (schemaVersion > SUPPORTED_SCHEMA_VERSION) {
4484
- logger.warn(
4485
- `\u26A0\uFE0F Settings schema v${schemaVersion} > supported v${SUPPORTED_SCHEMA_VERSION}. Update happy-cli for full functionality.`
4486
- );
4487
- }
4488
- const migrated = migrateSettings(raw, schemaVersion);
4489
- if (migrated.sandboxConfig !== void 0) {
4490
- try {
4491
- migrated.sandboxConfig = SandboxConfigSchema.parse(migrated.sandboxConfig);
4492
- } catch (error) {
4493
- logger.warn(`\u26A0\uFE0F Invalid sandbox config - skipping. Error: ${error.message}`);
4494
- migrated.sandboxConfig = void 0;
4495
- }
4496
- }
4497
- return { ...defaultSettings, ...migrated };
4480
+ return { kind: "ok", settings: await parseSettingsFile() };
4498
4481
  } catch (error) {
4499
- logger.warn(`Failed to read settings: ${error.message}`);
4500
- return { ...defaultSettings };
4482
+ return { kind: "unreadable", error: error?.message ?? String(error) };
4483
+ }
4484
+ }
4485
+ async function readSettings() {
4486
+ const outcome = await readSettingsOutcome();
4487
+ if (outcome.kind === "ok") return outcome.settings;
4488
+ if (outcome.kind === "unreadable") {
4489
+ logger.warn(`Failed to read settings: ${outcome.error}`);
4490
+ }
4491
+ return { ...defaultSettings };
4492
+ }
4493
+ async function parseSettingsFile() {
4494
+ const content = await promises.readFile(configuration.settingsFile, "utf8");
4495
+ const raw = JSON.parse(content);
4496
+ const schemaVersion = raw.schemaVersion ?? 1;
4497
+ if (schemaVersion > SUPPORTED_SCHEMA_VERSION) {
4498
+ logger.warn(
4499
+ `\u26A0\uFE0F Settings schema v${schemaVersion} > supported v${SUPPORTED_SCHEMA_VERSION}. Update happy-cli for full functionality.`
4500
+ );
4501
4501
  }
4502
+ const migrated = migrateSettings(raw);
4503
+ if (migrated.sandboxConfig !== void 0) {
4504
+ try {
4505
+ migrated.sandboxConfig = SandboxConfigSchema.parse(migrated.sandboxConfig);
4506
+ } catch (error) {
4507
+ logger.warn(`\u26A0\uFE0F Invalid sandbox config - skipping. Error: ${error.message}`);
4508
+ migrated.sandboxConfig = void 0;
4509
+ }
4510
+ }
4511
+ return { ...defaultSettings, ...migrated };
4502
4512
  }
4503
4513
  async function writeSettings(settings) {
4504
4514
  await ensurePrivateDirectory(configuration.happyHomeDir);
@@ -4541,7 +4551,13 @@ async function updateSettings(updater) {
4541
4551
  throw new Error(`Failed to acquire settings lock after ${MAX_LOCK_ATTEMPTS * LOCK_RETRY_INTERVAL_MS / 1e3} seconds`);
4542
4552
  }
4543
4553
  try {
4544
- const current = await readSettings() || { ...defaultSettings };
4554
+ const outcome = await readSettingsOutcome();
4555
+ if (outcome.kind === "unreadable") {
4556
+ throw new Error(
4557
+ `Settings file ${configuration.settingsFile} exists but could not be read (${outcome.error}). Refusing to overwrite it \u2014 fix or remove the file (a removed file is recreated with defaults).`
4558
+ );
4559
+ }
4560
+ const current = outcome.kind === "ok" ? outcome.settings : { ...defaultSettings };
4545
4561
  const updated = await updater(current);
4546
4562
  await ensurePrivateDirectory(configuration.happyHomeDir);
4547
4563
  await writePrivateFile(tmpFile, JSON.stringify(updated, null, 2));
@@ -4788,6 +4804,7 @@ var persistence = /*#__PURE__*/Object.freeze({
4788
4804
  readDaemonState: readDaemonState,
4789
4805
  readPersistedSessions: readPersistedSessions,
4790
4806
  readSettings: readSettings,
4807
+ readSettingsOutcome: readSettingsOutcome,
4791
4808
  readTrackedClaudeSessionIds: readTrackedClaudeSessionIds,
4792
4809
  releaseDaemonLock: releaseDaemonLock,
4793
4810
  updateSettings: updateSettings,
@@ -16720,6 +16737,7 @@ exports.readDaemonState = readDaemonState;
16720
16737
  exports.readLocalHappyAgentCredentials = readLocalHappyAgentCredentials;
16721
16738
  exports.readPersistedSessions = readPersistedSessions;
16722
16739
  exports.readSettings = readSettings;
16740
+ exports.readSettingsOutcome = readSettingsOutcome;
16723
16741
  exports.readVhTerminal = readVhTerminal;
16724
16742
  exports.releaseDaemonLock = releaseDaemonLock;
16725
16743
  exports.resolveCliUpdateCheckInterval = resolveCliUpdateCheckInterval;
@@ -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.118";
32
+ var version = "0.2.120";
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.118",
146
- "very-happy-tools-x64-darwin": "0.2.118",
147
- "very-happy-tools-arm64-linux": "0.2.118",
148
- "very-happy-tools-x64-linux": "0.2.118",
149
- "very-happy-tools-arm64-win32": "0.2.118",
150
- "very-happy-tools-x64-win32": "0.2.118"
145
+ "very-happy-tools-arm64-darwin": "0.2.120",
146
+ "very-happy-tools-x64-darwin": "0.2.120",
147
+ "very-happy-tools-arm64-linux": "0.2.120",
148
+ "very-happy-tools-x64-linux": "0.2.120",
149
+ "very-happy-tools-arm64-win32": "0.2.120",
150
+ "very-happy-tools-x64-win32": "0.2.120"
151
151
  };
152
152
  var devDependencies = {
153
153
  "@slopus/happy-wire": "workspace:*",
@@ -4450,33 +4450,43 @@ function migrateSettings(raw, fromVersion) {
4450
4450
  let migrated = { ...raw };
4451
4451
  return migrated;
4452
4452
  }
4453
- async function readSettings() {
4453
+ async function readSettingsOutcome() {
4454
4454
  if (!existsSync(configuration.settingsFile)) {
4455
- return { ...defaultSettings };
4455
+ return { kind: "absent" };
4456
4456
  }
4457
4457
  try {
4458
- const content = await readFile$1(configuration.settingsFile, "utf8");
4459
- const raw = JSON.parse(content);
4460
- const schemaVersion = raw.schemaVersion ?? 1;
4461
- if (schemaVersion > SUPPORTED_SCHEMA_VERSION) {
4462
- logger.warn(
4463
- `\u26A0\uFE0F Settings schema v${schemaVersion} > supported v${SUPPORTED_SCHEMA_VERSION}. Update happy-cli for full functionality.`
4464
- );
4465
- }
4466
- const migrated = migrateSettings(raw, schemaVersion);
4467
- if (migrated.sandboxConfig !== void 0) {
4468
- try {
4469
- migrated.sandboxConfig = SandboxConfigSchema.parse(migrated.sandboxConfig);
4470
- } catch (error) {
4471
- logger.warn(`\u26A0\uFE0F Invalid sandbox config - skipping. Error: ${error.message}`);
4472
- migrated.sandboxConfig = void 0;
4473
- }
4474
- }
4475
- return { ...defaultSettings, ...migrated };
4458
+ return { kind: "ok", settings: await parseSettingsFile() };
4476
4459
  } catch (error) {
4477
- logger.warn(`Failed to read settings: ${error.message}`);
4478
- return { ...defaultSettings };
4460
+ return { kind: "unreadable", error: error?.message ?? String(error) };
4461
+ }
4462
+ }
4463
+ async function readSettings() {
4464
+ const outcome = await readSettingsOutcome();
4465
+ if (outcome.kind === "ok") return outcome.settings;
4466
+ if (outcome.kind === "unreadable") {
4467
+ logger.warn(`Failed to read settings: ${outcome.error}`);
4468
+ }
4469
+ return { ...defaultSettings };
4470
+ }
4471
+ async function parseSettingsFile() {
4472
+ const content = await readFile$1(configuration.settingsFile, "utf8");
4473
+ const raw = JSON.parse(content);
4474
+ const schemaVersion = raw.schemaVersion ?? 1;
4475
+ if (schemaVersion > SUPPORTED_SCHEMA_VERSION) {
4476
+ logger.warn(
4477
+ `\u26A0\uFE0F Settings schema v${schemaVersion} > supported v${SUPPORTED_SCHEMA_VERSION}. Update happy-cli for full functionality.`
4478
+ );
4479
4479
  }
4480
+ const migrated = migrateSettings(raw);
4481
+ if (migrated.sandboxConfig !== void 0) {
4482
+ try {
4483
+ migrated.sandboxConfig = SandboxConfigSchema.parse(migrated.sandboxConfig);
4484
+ } catch (error) {
4485
+ logger.warn(`\u26A0\uFE0F Invalid sandbox config - skipping. Error: ${error.message}`);
4486
+ migrated.sandboxConfig = void 0;
4487
+ }
4488
+ }
4489
+ return { ...defaultSettings, ...migrated };
4480
4490
  }
4481
4491
  async function writeSettings(settings) {
4482
4492
  await ensurePrivateDirectory(configuration.happyHomeDir);
@@ -4519,7 +4529,13 @@ async function updateSettings(updater) {
4519
4529
  throw new Error(`Failed to acquire settings lock after ${MAX_LOCK_ATTEMPTS * LOCK_RETRY_INTERVAL_MS / 1e3} seconds`);
4520
4530
  }
4521
4531
  try {
4522
- const current = await readSettings() || { ...defaultSettings };
4532
+ const outcome = await readSettingsOutcome();
4533
+ if (outcome.kind === "unreadable") {
4534
+ throw new Error(
4535
+ `Settings file ${configuration.settingsFile} exists but could not be read (${outcome.error}). Refusing to overwrite it \u2014 fix or remove the file (a removed file is recreated with defaults).`
4536
+ );
4537
+ }
4538
+ const current = outcome.kind === "ok" ? outcome.settings : { ...defaultSettings };
4523
4539
  const updated = await updater(current);
4524
4540
  await ensurePrivateDirectory(configuration.happyHomeDir);
4525
4541
  await writePrivateFile(tmpFile, JSON.stringify(updated, null, 2));
@@ -4766,6 +4782,7 @@ var persistence = /*#__PURE__*/Object.freeze({
4766
4782
  readDaemonState: readDaemonState,
4767
4783
  readPersistedSessions: readPersistedSessions,
4768
4784
  readSettings: readSettings,
4785
+ readSettingsOutcome: readSettingsOutcome,
4769
4786
  readTrackedClaudeSessionIds: readTrackedClaudeSessionIds,
4770
4787
  releaseDaemonLock: releaseDaemonLock,
4771
4788
  updateSettings: updateSettings,
@@ -16630,4 +16647,4 @@ const RawJSONLinesSchema = z$1.discriminatedUnion("type", [
16630
16647
  }).passthrough()
16631
16648
  ]);
16632
16649
 
16633
- export { MIRROR_BACKFILL_LINES_DEFAULT as $, ApiClient as A, readCredentials as B, credentialRelayProblem as C, deriveLocalCliUpdateSummary as D, updateSettings as E, encodeBase64Url as F, decodeBase64 as G, writeCredentialsLegacy as H, InvalidateSync as I, writeCredentialsDataKey as J, readCredentialsForConfiguredRelay as K, encrypt as L, MAX_CHAT_ATTACHMENT_SOURCE_BYTES as M, isClaudeSessionId as N, getLocalHappyAgentCredentialPath as O, readLocalHappyAgentCredentials as P, decryptWithDataKey as Q, RawJSONLinesSchema as R, STREAM_DELTA_MAX_CHARS as S, decryptLegacy as T, compareExactVersions as U, extractCompleteLines as V, decideBackfill as W, parseTerminalHookPayload as X, tmuxArgs as Y, scrubTmuxClientEnv as Z, decideMirrorBinding as _, ApiSessionClient as a, persistSession as a0, mirrorLineKey as a1, mirrorLocalId as a2, detectCLIAvailability as a3, detectResumeSupport as a4, acquireDaemonLock as a5, summarizeSpawnSessionForLog as a6, deletePersistedSessions as a7, shellescape as a8, decrypt as a9, writeDaemonState as aa, writeSettings as ab, fetchCliUpdateState as ac, resolveCliUpdateCheckInterval as ad, DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS as ae, releaseDaemonLock as af, listVhTerminals as ag, isValidTerminalId as ah, readVhTerminal as ai, sendToVhTerminal as aj, TITLE_PROMPT_PREFIX as ak, BOARD_ANALYZER_PROMPT_PREFIX as al, startOfflineReconnection as am, clearCredentials as an, clearMachineId as ao, SandboxConfigSchema as ap, CodexAppServerClient as aq, getLatestDaemonLog as ar, persistence as as, api as at, createEnvelope as b, configuration as c, connectionState as d, readSettings as e, encodeBase64 as f, contentLogMetadata as g, errorLogMetadata as h, isValidSessionId as i, packageJson as j, delay as k, logger as l, ensurePrivateDirectorySync as m, hardenPrivateFileSync as n, readDaemonState as o, projectPath as p, clearDaemonState as q, readPersistedSessions as r, getProjectPath as s, initializeSandbox as t, wrapCommand as u, AsyncLock as v, writePrivateFileSync as w, ensurePrivateDirectory as x, hardenPrivateFile as y, commandOnPath as z };
16650
+ export { decideMirrorBinding as $, ApiClient as A, readCredentials as B, credentialRelayProblem as C, deriveLocalCliUpdateSummary as D, readSettingsOutcome as E, updateSettings as F, encodeBase64Url as G, decodeBase64 as H, InvalidateSync as I, writeCredentialsLegacy as J, writeCredentialsDataKey as K, readCredentialsForConfiguredRelay as L, MAX_CHAT_ATTACHMENT_SOURCE_BYTES as M, encrypt as N, isClaudeSessionId as O, getLocalHappyAgentCredentialPath as P, readLocalHappyAgentCredentials as Q, RawJSONLinesSchema as R, STREAM_DELTA_MAX_CHARS as S, decryptWithDataKey as T, decryptLegacy as U, compareExactVersions as V, extractCompleteLines as W, decideBackfill as X, parseTerminalHookPayload as Y, tmuxArgs as Z, scrubTmuxClientEnv as _, ApiSessionClient as a, MIRROR_BACKFILL_LINES_DEFAULT as a0, persistSession as a1, mirrorLineKey as a2, mirrorLocalId as a3, detectCLIAvailability as a4, detectResumeSupport as a5, acquireDaemonLock as a6, summarizeSpawnSessionForLog as a7, deletePersistedSessions as a8, shellescape as a9, decrypt as aa, writeDaemonState as ab, writeSettings as ac, fetchCliUpdateState as ad, resolveCliUpdateCheckInterval as ae, DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS as af, releaseDaemonLock as ag, listVhTerminals as ah, isValidTerminalId as ai, readVhTerminal as aj, sendToVhTerminal as ak, TITLE_PROMPT_PREFIX as al, BOARD_ANALYZER_PROMPT_PREFIX as am, startOfflineReconnection as an, clearCredentials as ao, clearMachineId as ap, SandboxConfigSchema as aq, CodexAppServerClient as ar, getLatestDaemonLog as as, persistence as at, api as au, createEnvelope as b, configuration as c, connectionState as d, readSettings as e, encodeBase64 as f, contentLogMetadata as g, errorLogMetadata as h, isValidSessionId as i, packageJson as j, delay as k, logger as l, ensurePrivateDirectorySync as m, hardenPrivateFileSync as n, readDaemonState as o, projectPath as p, clearDaemonState as q, readPersistedSessions as r, getProjectPath as s, initializeSandbox as t, wrapCommand as u, AsyncLock as v, writePrivateFileSync as w, ensurePrivateDirectory as x, hardenPrivateFile as y, commandOnPath as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "very-happy-cli",
3
- "version": "0.2.118",
3
+ "version": "0.2.120",
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.118",
117
- "very-happy-tools-x64-darwin": "0.2.118",
118
- "very-happy-tools-arm64-linux": "0.2.118",
119
- "very-happy-tools-x64-linux": "0.2.118",
120
- "very-happy-tools-arm64-win32": "0.2.118",
121
- "very-happy-tools-x64-win32": "0.2.118"
116
+ "very-happy-tools-arm64-darwin": "0.2.120",
117
+ "very-happy-tools-x64-darwin": "0.2.120",
118
+ "very-happy-tools-arm64-linux": "0.2.120",
119
+ "very-happy-tools-x64-linux": "0.2.120",
120
+ "very-happy-tools-arm64-win32": "0.2.120",
121
+ "very-happy-tools-x64-win32": "0.2.120"
122
122
  },
123
123
  "devDependencies": {
124
124
  "@slopus/happy-wire": "workspace:*",