very-happy-cli 0.2.103 → 0.2.105

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-Zt10QM8S.cjs → AcpBackend-CbMPn2Sx.cjs} +1 -1
  2. package/dist/{AcpBackend-C8CgzRI_.mjs → AcpBackend-zefm5lwc.mjs} +1 -1
  3. package/dist/{AcpSessionManager-BAinHcHh.mjs → AcpSessionManager-DFeZAfz4.mjs} +1 -1
  4. package/dist/{AcpSessionManager-D_iGrEbD.cjs → AcpSessionManager-lM9HBlOx.cjs} +1 -1
  5. package/dist/{config-11py0X-q.mjs → config-CRCUgh2E.mjs} +2 -2
  6. package/dist/{config-CG4aqDiu.cjs → config-CYpWD6Tc.cjs} +2 -2
  7. package/dist/{index-VvPyRTet.cjs → index-Bmv3lZU7.cjs} +2 -2
  8. package/dist/{index-CimI2p1M.cjs → index-Cietz-nU.cjs} +197 -71
  9. package/dist/{index-Dnma0J5k.mjs → index-NiUS5t0N.mjs} +193 -67
  10. package/dist/{index-BjDfS9DT.mjs → index-_t9O9dGp.mjs} +5 -5
  11. package/dist/{index-B_soRPsA.cjs → index-m9BL5ZWn.cjs} +4 -4
  12. package/dist/{index-B9SnF1mG.mjs → index-neppKLsI.mjs} +2 -2
  13. package/dist/index.cjs +2 -2
  14. package/dist/index.mjs +2 -2
  15. package/dist/{installTerminalHooks-BP9uu1Xn.cjs → installTerminalHooks-BMDcB8nc.cjs} +2 -2
  16. package/dist/{installTerminalHooks-UL5Zfif6.mjs → installTerminalHooks-Czv6GUOw.mjs} +2 -2
  17. package/dist/lib.cjs +1 -1
  18. package/dist/lib.d.cts +1 -0
  19. package/dist/lib.d.mts +1 -0
  20. package/dist/lib.mjs +1 -1
  21. package/dist/{mcp-CxepBrGm.mjs → mcp-Bt4btDMD.mjs} +2 -2
  22. package/dist/{mcp-mX6g7PpH.cjs → mcp-Cn4icOYK.cjs} +2 -2
  23. package/dist/{runGemini-BPAUC7TY.cjs → runGemini-5Rgckz_I.cjs} +4 -4
  24. package/dist/{runGemini-Cxa0Tj_7.mjs → runGemini-wMF-U7zR.mjs} +4 -4
  25. package/dist/{runOpenClaw-QJ8YzPvo.cjs → runOpenClaw-DnbKLi5s.cjs} +3 -3
  26. package/dist/{runOpenClaw-DMAn3-Hq.mjs → runOpenClaw-Za9vMsSB.mjs} +3 -3
  27. package/dist/{send-D6NLQaYt.mjs → send-DliNFuy7.mjs} +2 -2
  28. package/dist/{send-CwRV7cbV.cjs → send-v6085rvq.cjs} +2 -2
  29. package/dist/{spawn-DIW1I72G.mjs → spawn-D3D-H-VF.mjs} +2 -2
  30. package/dist/{spawn-Db22DkVT.cjs → spawn-DUU9rhJa.cjs} +2 -2
  31. package/dist/{types-D9ORBxOD.mjs → types-CFIlcwe9.mjs} +38 -8
  32. package/dist/{types-DKO60j29.cjs → types-Cq7yzNWv.cjs} +39 -9
  33. package/package.json +7 -7
@@ -2,10 +2,10 @@ import { useStdout, useInput, Box, Text, render } from 'ink';
2
2
  import React, { useState, useRef, useEffect, useCallback } from 'react';
3
3
  import { randomUUID } from 'node:crypto';
4
4
  import { join } from 'node:path';
5
- import { l as logger, h as connectionState, A as ApiClient, i as readSettings, e as errorLogMetadata, j as encodeBase64, p as projectPath, d as contentLogMetadata } from './types-D9ORBxOD.mjs';
6
- import { g as GEMINI_API_KEY_ENV, j as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, B as BasePermissionHandler, k as BaseReasoningProcessor, i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, l as MessageBuffer, C as CHANGE_TITLE_INSTRUCTION, r as registerKillSessionHandler, f as startHappyServer } from './index-Dnma0J5k.mjs';
7
- import { A as AcpBackend } from './AcpBackend-C8CgzRI_.mjs';
8
- import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-11py0X-q.mjs';
5
+ import { l as logger, h as connectionState, A as ApiClient, i as readSettings, e as errorLogMetadata, j as encodeBase64, p as projectPath, d as contentLogMetadata } from './types-CFIlcwe9.mjs';
6
+ import { g as GEMINI_API_KEY_ENV, j as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, B as BasePermissionHandler, k as BaseReasoningProcessor, i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, l as MessageBuffer, C as CHANGE_TITLE_INSTRUCTION, r as registerKillSessionHandler, f as startHappyServer } from './index-NiUS5t0N.mjs';
7
+ import { A as AcpBackend } from './AcpBackend-zefm5lwc.mjs';
8
+ import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-CRCUgh2E.mjs';
9
9
  import 'axios';
10
10
  import 'chalk';
11
11
  import 'node:util';
@@ -5,9 +5,9 @@ var node_child_process = require('node:child_process');
5
5
  var os = require('node:os');
6
6
  var node_fs = require('node:fs');
7
7
  var path = require('node:path');
8
- var persistence = require('./types-DKO60j29.cjs');
9
- var AcpSessionManager = require('./AcpSessionManager-D_iGrEbD.cjs');
10
- var index = require('./index-CimI2p1M.cjs');
8
+ var persistence = require('./types-Cq7yzNWv.cjs');
9
+ var AcpSessionManager = require('./AcpSessionManager-lM9HBlOx.cjs');
10
+ var index = require('./index-Cietz-nU.cjs');
11
11
  var WebSocket = require('ws');
12
12
  var ed = require('@noble/ed25519');
13
13
  var sha2_js = require('@noble/hashes/sha2.js');
@@ -3,9 +3,9 @@ import { execFileSync } from 'node:child_process';
3
3
  import os from 'node:os';
4
4
  import { existsSync, readFileSync } from 'node:fs';
5
5
  import { join } from 'node:path';
6
- import { k as ensurePrivateDirectorySync, m as hardenPrivateFileSync, w as writePrivateFileSync, e as errorLogMetadata, d as contentLogMetadata, h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, c as configuration } from './types-D9ORBxOD.mjs';
7
- import { A as AcpSessionManager } from './AcpSessionManager-BAinHcHh.mjs';
8
- import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, r as registerKillSessionHandler } from './index-Dnma0J5k.mjs';
6
+ import { k as ensurePrivateDirectorySync, m as hardenPrivateFileSync, w as writePrivateFileSync, e as errorLogMetadata, d as contentLogMetadata, h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, c as configuration } from './types-CFIlcwe9.mjs';
7
+ import { A as AcpSessionManager } from './AcpSessionManager-DFeZAfz4.mjs';
8
+ import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, r as registerKillSessionHandler } from './index-NiUS5t0N.mjs';
9
9
  import WebSocket from 'ws';
10
10
  import * as ed from '@noble/ed25519';
11
11
  import { sha512 } from '@noble/hashes/sha2.js';
@@ -1,8 +1,8 @@
1
1
  import chalk from 'chalk';
2
2
  import { readFileSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
- import { r as readPersistedSessions, c as configuration } from './types-D9ORBxOD.mjs';
5
- import { b as sendUserMessage, a as sessionWebUrl } from './index-Dnma0J5k.mjs';
4
+ import { r as readPersistedSessions, c as configuration } from './types-CFIlcwe9.mjs';
5
+ import { b as sendUserMessage, a as sessionWebUrl } from './index-NiUS5t0N.mjs';
6
6
  import 'axios';
7
7
  import 'node:util';
8
8
  import 'node:os';
@@ -3,8 +3,8 @@
3
3
  var chalk = require('chalk');
4
4
  var node_fs = require('node:fs');
5
5
  var path = require('node:path');
6
- var persistence = require('./types-DKO60j29.cjs');
7
- var index = require('./index-CimI2p1M.cjs');
6
+ var persistence = require('./types-Cq7yzNWv.cjs');
7
+ var index = require('./index-Cietz-nU.cjs');
8
8
  require('axios');
9
9
  require('node:util');
10
10
  require('node:os');
@@ -1,8 +1,8 @@
1
1
  import chalk from 'chalk';
2
2
  import { readFileSync, statSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
- import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, w as waitForSessionKey, b as sendUserMessage } from './index-Dnma0J5k.mjs';
5
- import { l as logger } from './types-D9ORBxOD.mjs';
4
+ import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, w as waitForSessionKey, b as sendUserMessage } from './index-NiUS5t0N.mjs';
5
+ import { l as logger } from './types-CFIlcwe9.mjs';
6
6
  import 'node:os';
7
7
  import 'node:crypto';
8
8
  import 'cross-spawn';
@@ -3,8 +3,8 @@
3
3
  var chalk = require('chalk');
4
4
  var node_fs = require('node:fs');
5
5
  var path = require('node:path');
6
- var index = require('./index-CimI2p1M.cjs');
7
- var persistence = require('./types-DKO60j29.cjs');
6
+ var index = require('./index-Cietz-nU.cjs');
7
+ var persistence = require('./types-Cq7yzNWv.cjs');
8
8
  require('node:os');
9
9
  require('node:crypto');
10
10
  require('cross-spawn');
@@ -29,7 +29,7 @@ import { SandboxManager } from '@anthropic-ai/sandbox-runtime';
29
29
  import { Expo } from 'expo-server-sdk';
30
30
 
31
31
  var name = "very-happy-cli";
32
- var version = "0.2.103";
32
+ var version = "0.2.105";
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.103",
146
- "very-happy-tools-x64-darwin": "0.2.103",
147
- "very-happy-tools-arm64-linux": "0.2.103",
148
- "very-happy-tools-x64-linux": "0.2.103",
149
- "very-happy-tools-arm64-win32": "0.2.103",
150
- "very-happy-tools-x64-win32": "0.2.103"
145
+ "very-happy-tools-arm64-darwin": "0.2.105",
146
+ "very-happy-tools-x64-darwin": "0.2.105",
147
+ "very-happy-tools-arm64-linux": "0.2.105",
148
+ "very-happy-tools-x64-linux": "0.2.105",
149
+ "very-happy-tools-arm64-win32": "0.2.105",
150
+ "very-happy-tools-x64-win32": "0.2.105"
151
151
  };
152
152
  var devDependencies = {
153
153
  "@slopus/happy-wire": "workspace:*",
@@ -1142,6 +1142,15 @@ const MessageMetaSchema = z$1.object({
1142
1142
  // Allowed tools for this message (null = reset)
1143
1143
  disallowedTools: z$1.array(z$1.string()).nullable().optional(),
1144
1144
  // Disallowed tools for this message (null = reset)
1145
+ /**
1146
+ * Thinking depth for this message (null = reset to the machine default).
1147
+ * Deliberately a plain string, not an enum: an unknown value must not make
1148
+ * zod reject the WHOLE message the way the `dontAsk` permission enum did
1149
+ * (AGENTS 铁律 14). runClaude validates it against its own allow-list and
1150
+ * ignores anything else. Absent here until 0.2.105, which is why every
1151
+ * released CLI silently dropped the web's effort selection.
1152
+ */
1153
+ effort: z$1.string().nullable().optional(),
1145
1154
  /** Omitted/queue waits for the current turn; steer targets the live turn. */
1146
1155
  delivery: z$1.enum(["queue", "steer"]).optional()
1147
1156
  });
@@ -4545,6 +4554,23 @@ function readPersistedSessions() {
4545
4554
  return {};
4546
4555
  }
4547
4556
  }
4557
+ function readTrackedClaudeSessionIds() {
4558
+ try {
4559
+ if (!existsSync(configuration.sessionsFile)) return [];
4560
+ const data = JSON.parse(readFileSync(configuration.sessionsFile, "utf-8"));
4561
+ if (!data?.sessions || typeof data.sessions !== "object") return [];
4562
+ const ids = /* @__PURE__ */ new Set();
4563
+ for (const session of Object.values(data.sessions)) {
4564
+ const metadata = (session ?? {}).metadata;
4565
+ for (const id of [metadata?.claudeSessionId, metadata?.importedFromClaudeSessionId]) {
4566
+ if (typeof id === "string" && id.length > 0) ids.add(id.toLowerCase());
4567
+ }
4568
+ }
4569
+ return [...ids];
4570
+ } catch {
4571
+ return [];
4572
+ }
4573
+ }
4548
4574
  function persistSession(sessionId, session) {
4549
4575
  try {
4550
4576
  const existing = readPersistedSessions();
@@ -4592,6 +4618,7 @@ var persistence = /*#__PURE__*/Object.freeze({
4592
4618
  readDaemonState: readDaemonState,
4593
4619
  readPersistedSessions: readPersistedSessions,
4594
4620
  readSettings: readSettings,
4621
+ readTrackedClaudeSessionIds: readTrackedClaudeSessionIds,
4595
4622
  releaseDaemonLock: releaseDaemonLock,
4596
4623
  updateSettings: updateSettings,
4597
4624
  writeCredentialsDataKey: writeCredentialsDataKey,
@@ -14608,7 +14635,10 @@ class ApiMachineClient {
14608
14635
  throw new Error("directory must be a non-empty string when provided");
14609
14636
  }
14610
14637
  const projectDirs = typeof directory === "string" ? [getProjectPath(directory)] : await listClaudeProjectDirs(getClaudeProjectsRoot());
14611
- const excludeIds = Array.isArray(exclude) ? exclude.filter((id) => typeof id === "string" && UUID_RE.test(id)) : [];
14638
+ const excludeIds = [
14639
+ ...Array.isArray(exclude) ? exclude.filter((id) => typeof id === "string" && UUID_RE.test(id)) : [],
14640
+ ...readTrackedClaudeSessionIds()
14641
+ ];
14612
14642
  const result = await listClaudeSessionHistory({
14613
14643
  projectDirs,
14614
14644
  limit: typeof limit === "number" && Number.isFinite(limit) ? Math.max(1, Math.min(Math.floor(limit), 200)) : 60,
@@ -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.103";
54
+ var version = "0.2.105";
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.103",
168
- "very-happy-tools-x64-darwin": "0.2.103",
169
- "very-happy-tools-arm64-linux": "0.2.103",
170
- "very-happy-tools-x64-linux": "0.2.103",
171
- "very-happy-tools-arm64-win32": "0.2.103",
172
- "very-happy-tools-x64-win32": "0.2.103"
167
+ "very-happy-tools-arm64-darwin": "0.2.105",
168
+ "very-happy-tools-x64-darwin": "0.2.105",
169
+ "very-happy-tools-arm64-linux": "0.2.105",
170
+ "very-happy-tools-x64-linux": "0.2.105",
171
+ "very-happy-tools-arm64-win32": "0.2.105",
172
+ "very-happy-tools-x64-win32": "0.2.105"
173
173
  };
174
174
  var devDependencies = {
175
175
  "@slopus/happy-wire": "workspace:*",
@@ -1164,6 +1164,15 @@ const MessageMetaSchema = z.z.object({
1164
1164
  // Allowed tools for this message (null = reset)
1165
1165
  disallowedTools: z.z.array(z.z.string()).nullable().optional(),
1166
1166
  // Disallowed tools for this message (null = reset)
1167
+ /**
1168
+ * Thinking depth for this message (null = reset to the machine default).
1169
+ * Deliberately a plain string, not an enum: an unknown value must not make
1170
+ * zod reject the WHOLE message the way the `dontAsk` permission enum did
1171
+ * (AGENTS 铁律 14). runClaude validates it against its own allow-list and
1172
+ * ignores anything else. Absent here until 0.2.105, which is why every
1173
+ * released CLI silently dropped the web's effort selection.
1174
+ */
1175
+ effort: z.z.string().nullable().optional(),
1167
1176
  /** Omitted/queue waits for the current turn; steer targets the live turn. */
1168
1177
  delivery: z.z.enum(["queue", "steer"]).optional()
1169
1178
  });
@@ -1594,7 +1603,7 @@ class RpcHandlerManager {
1594
1603
  }
1595
1604
  }
1596
1605
 
1597
- 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-DKO60j29.cjs', document.baseURI).href))));
1606
+ 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-Cq7yzNWv.cjs', document.baseURI).href))));
1598
1607
  function projectPath() {
1599
1608
  const path = path$1.resolve(__dirname$1, "..");
1600
1609
  return path;
@@ -4567,6 +4576,23 @@ function readPersistedSessions() {
4567
4576
  return {};
4568
4577
  }
4569
4578
  }
4579
+ function readTrackedClaudeSessionIds() {
4580
+ try {
4581
+ if (!node_fs.existsSync(configuration.sessionsFile)) return [];
4582
+ const data = JSON.parse(node_fs.readFileSync(configuration.sessionsFile, "utf-8"));
4583
+ if (!data?.sessions || typeof data.sessions !== "object") return [];
4584
+ const ids = /* @__PURE__ */ new Set();
4585
+ for (const session of Object.values(data.sessions)) {
4586
+ const metadata = (session ?? {}).metadata;
4587
+ for (const id of [metadata?.claudeSessionId, metadata?.importedFromClaudeSessionId]) {
4588
+ if (typeof id === "string" && id.length > 0) ids.add(id.toLowerCase());
4589
+ }
4590
+ }
4591
+ return [...ids];
4592
+ } catch {
4593
+ return [];
4594
+ }
4595
+ }
4570
4596
  function persistSession(sessionId, session) {
4571
4597
  try {
4572
4598
  const existing = readPersistedSessions();
@@ -4614,6 +4640,7 @@ var persistence = /*#__PURE__*/Object.freeze({
4614
4640
  readDaemonState: readDaemonState,
4615
4641
  readPersistedSessions: readPersistedSessions,
4616
4642
  readSettings: readSettings,
4643
+ readTrackedClaudeSessionIds: readTrackedClaudeSessionIds,
4617
4644
  releaseDaemonLock: releaseDaemonLock,
4618
4645
  updateSettings: updateSettings,
4619
4646
  writeCredentialsDataKey: writeCredentialsDataKey,
@@ -14630,7 +14657,10 @@ class ApiMachineClient {
14630
14657
  throw new Error("directory must be a non-empty string when provided");
14631
14658
  }
14632
14659
  const projectDirs = typeof directory === "string" ? [getProjectPath(directory)] : await listClaudeProjectDirs(getClaudeProjectsRoot());
14633
- const excludeIds = Array.isArray(exclude) ? exclude.filter((id) => typeof id === "string" && UUID_RE.test(id)) : [];
14660
+ const excludeIds = [
14661
+ ...Array.isArray(exclude) ? exclude.filter((id) => typeof id === "string" && UUID_RE.test(id)) : [],
14662
+ ...readTrackedClaudeSessionIds()
14663
+ ];
14634
14664
  const result = await listClaudeSessionHistory({
14635
14665
  projectDirs,
14636
14666
  limit: typeof limit === "number" && Number.isFinite(limit) ? Math.max(1, Math.min(Math.floor(limit), 200)) : 60,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "very-happy-cli",
3
- "version": "0.2.103",
3
+ "version": "0.2.105",
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.103",
117
- "very-happy-tools-x64-darwin": "0.2.103",
118
- "very-happy-tools-arm64-linux": "0.2.103",
119
- "very-happy-tools-x64-linux": "0.2.103",
120
- "very-happy-tools-arm64-win32": "0.2.103",
121
- "very-happy-tools-x64-win32": "0.2.103"
116
+ "very-happy-tools-arm64-darwin": "0.2.105",
117
+ "very-happy-tools-x64-darwin": "0.2.105",
118
+ "very-happy-tools-arm64-linux": "0.2.105",
119
+ "very-happy-tools-x64-linux": "0.2.105",
120
+ "very-happy-tools-arm64-win32": "0.2.105",
121
+ "very-happy-tools-x64-win32": "0.2.105"
122
122
  },
123
123
  "devDependencies": {
124
124
  "@slopus/happy-wire": "workspace:*",