very-happy-cli 0.2.77 → 0.2.78
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.
- package/dist/{AcpBackend-CsLnh1So.cjs → AcpBackend-BxZ-KvBy.cjs} +1 -1
- package/dist/{AcpBackend-BFFC77vV.mjs → AcpBackend-CDngyx5G.mjs} +1 -1
- package/dist/{AcpSessionManager--CixPN-p.cjs → AcpSessionManager-BWFM_8f9.cjs} +1 -1
- package/dist/{AcpSessionManager-CU5vsxgF.mjs → AcpSessionManager-Dcq8dl4l.mjs} +1 -1
- package/dist/{config-pv17N6Kg.cjs → config-Byay91xM.cjs} +2 -2
- package/dist/{config-CRFTYuTN.mjs → config-Co1Tpb5e.mjs} +2 -2
- package/dist/{index-C1OnwMx0.cjs → index-CkjEzh-Y.cjs} +4 -4
- package/dist/{index-Dcv1RKe8.cjs → index-CuvhWx_d.cjs} +15 -15
- package/dist/{index-BkvUwyIU.mjs → index-DdOYA0qe.mjs} +5 -5
- package/dist/{index-DOb57EGb.mjs → index-w0zkr6EM.mjs} +12 -12
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{installTerminalHooks-IXvZMGJq.mjs → installTerminalHooks-DFmjn6EQ.mjs} +2 -2
- package/dist/{installTerminalHooks-YyT3fv6w.cjs → installTerminalHooks-nXjKPP3D.cjs} +2 -2
- package/dist/lib.cjs +1 -1
- package/dist/lib.d.cts +3 -0
- package/dist/lib.d.mts +3 -0
- package/dist/lib.mjs +1 -1
- package/dist/{mcp-CsKnmeE5.cjs → mcp-BreMIH5r.cjs} +2 -2
- package/dist/{mcp-B-GdhlKD.mjs → mcp-nlZLEkmO.mjs} +2 -2
- package/dist/{runGemini-D0lddF43.mjs → runGemini-DEZ0neEl.mjs} +4 -4
- package/dist/{runGemini-DuUdmlVZ.cjs → runGemini-by29Tp8r.cjs} +4 -4
- package/dist/{runOpenClaw-DEMCYSoD.cjs → runOpenClaw-DENpTXhw.cjs} +3 -3
- package/dist/{runOpenClaw-BiwwYnYf.mjs → runOpenClaw-DyJQFzoX.mjs} +3 -3
- package/dist/{send-DijSXAMp.cjs → send-e6BSMl0m.cjs} +2 -2
- package/dist/{send-DM8oqJFp.mjs → send-pX36Sd4p.mjs} +2 -2
- package/dist/{spawn-De3b5Hsu.cjs → spawn-C87d_KDj.cjs} +2 -2
- package/dist/{spawn-nISXbZD5.mjs → spawn-Da-94Ejo.mjs} +2 -2
- package/dist/{types-D2qSKjsO.mjs → types-Clmu74iY.mjs} +74 -10
- package/dist/{types-NwtcBgfS.cjs → types-Dua2iF5S.cjs} +75 -11
- package/package.json +7 -7
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var node_child_process = require('node:child_process');
|
|
4
4
|
var sdk = require('@agentclientprotocol/sdk');
|
|
5
5
|
var node_crypto = require('node:crypto');
|
|
6
|
-
var persistence = require('./types-
|
|
6
|
+
var persistence = require('./types-Dua2iF5S.cjs');
|
|
7
7
|
|
|
8
8
|
const DEFAULT_TIMEOUTS = {
|
|
9
9
|
/** Default initialization timeout: 60 seconds */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
2
|
import { ndJsonStream, ClientSideConnection } from '@agentclientprotocol/sdk';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
|
-
import { l as logger, d as contentLogMetadata, e as errorLogMetadata, f as packageJson, g as delay } from './types-
|
|
4
|
+
import { l as logger, d as contentLogMetadata, e as errorLogMetadata, f as packageJson, g as delay } from './types-Clmu74iY.mjs';
|
|
5
5
|
|
|
6
6
|
const DEFAULT_TIMEOUTS = {
|
|
7
7
|
/** Default initialization timeout: 60 seconds */
|
|
@@ -4,8 +4,8 @@ var fs = require('fs');
|
|
|
4
4
|
var path = require('path');
|
|
5
5
|
var os = require('os');
|
|
6
6
|
var child_process = require('child_process');
|
|
7
|
-
var persistence = require('./types-
|
|
8
|
-
var index = require('./index-
|
|
7
|
+
var persistence = require('./types-Dua2iF5S.cjs');
|
|
8
|
+
var index = require('./index-CuvhWx_d.cjs');
|
|
9
9
|
require('axios');
|
|
10
10
|
require('chalk');
|
|
11
11
|
require('node:util');
|
|
@@ -2,8 +2,8 @@ import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
|
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { homedir } from 'os';
|
|
4
4
|
import { execSync } from 'child_process';
|
|
5
|
-
import { l as logger } from './types-
|
|
6
|
-
import { D as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './index-
|
|
5
|
+
import { l as logger } from './types-Clmu74iY.mjs';
|
|
6
|
+
import { D as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './index-w0zkr6EM.mjs';
|
|
7
7
|
import 'axios';
|
|
8
8
|
import 'chalk';
|
|
9
9
|
import 'node:util';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var AcpBackend = require('./AcpBackend-
|
|
4
|
-
var persistence = require('./types-
|
|
5
|
-
var AcpSessionManager = require('./AcpSessionManager
|
|
3
|
+
var AcpBackend = require('./AcpBackend-BxZ-KvBy.cjs');
|
|
4
|
+
var persistence = require('./types-Dua2iF5S.cjs');
|
|
5
|
+
var AcpSessionManager = require('./AcpSessionManager-BWFM_8f9.cjs');
|
|
6
6
|
var node_crypto = require('node:crypto');
|
|
7
7
|
var path = require('node:path');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-CuvhWx_d.cjs');
|
|
9
9
|
require('node:child_process');
|
|
10
10
|
require('@agentclientprotocol/sdk');
|
|
11
11
|
require('axios');
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var chalk = require('chalk');
|
|
4
4
|
var os = require('node:os');
|
|
5
5
|
var node_crypto = require('node:crypto');
|
|
6
|
-
var persistence = require('./types-
|
|
6
|
+
var persistence = require('./types-Dua2iF5S.cjs');
|
|
7
7
|
var spawn = require('cross-spawn');
|
|
8
8
|
var path = require('node:path');
|
|
9
9
|
var node_readline = require('node:readline');
|
|
@@ -8274,7 +8274,7 @@ const MAX_TITLE_CHARS = 60;
|
|
|
8274
8274
|
const GENERATION_TIMEOUT_MS = 3e4;
|
|
8275
8275
|
function resolveClaudeBinary() {
|
|
8276
8276
|
try {
|
|
8277
|
-
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-
|
|
8277
|
+
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-CuvhWx_d.cjs', document.baseURI).href)));
|
|
8278
8278
|
const utilsPath = path.resolve(path.join(persistence.projectPath(), "scripts", "claude_version_utils.cjs"));
|
|
8279
8279
|
const { getClaudeCliPath } = require$1(utilsPath);
|
|
8280
8280
|
const path$1 = getClaudeCliPath();
|
|
@@ -10391,9 +10391,9 @@ function resolveLocalSignupBootstrap(configuredMode, configuredInviteCodes, gene
|
|
|
10391
10391
|
};
|
|
10392
10392
|
}
|
|
10393
10393
|
|
|
10394
|
-
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-
|
|
10394
|
+
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-CuvhWx_d.cjs', document.baseURI).href)));
|
|
10395
10395
|
const __dirname$1 = path.dirname(__filename$1);
|
|
10396
|
-
const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-
|
|
10396
|
+
const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-CuvhWx_d.cjs', document.baseURI).href)));
|
|
10397
10397
|
const PRISMA_QUERY_ENGINE_FILES = {
|
|
10398
10398
|
"arm64-darwin": "libquery_engine-darwin-arm64.dylib.node",
|
|
10399
10399
|
"x64-darwin": "libquery_engine-darwin.dylib.node",
|
|
@@ -13005,7 +13005,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13005
13005
|
process.exit(0);
|
|
13006
13006
|
} else if (subcommand === "install-terminal-hooks") {
|
|
13007
13007
|
try {
|
|
13008
|
-
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-
|
|
13008
|
+
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-nXjKPP3D.cjs'); });
|
|
13009
13009
|
const command = parseTerminalHooksArgs(args.slice(1));
|
|
13010
13010
|
if (command.action === "help") {
|
|
13011
13011
|
console.log(TERMINAL_HOOKS_HELP);
|
|
@@ -13022,7 +13022,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13022
13022
|
}
|
|
13023
13023
|
} else if (subcommand === "spawn") {
|
|
13024
13024
|
try {
|
|
13025
|
-
const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-
|
|
13025
|
+
const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-C87d_KDj.cjs'); });
|
|
13026
13026
|
await handleSpawnCommand(args.slice(1));
|
|
13027
13027
|
} catch (error) {
|
|
13028
13028
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -13034,7 +13034,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13034
13034
|
return;
|
|
13035
13035
|
} else if (subcommand === "send") {
|
|
13036
13036
|
try {
|
|
13037
|
-
const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-
|
|
13037
|
+
const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-e6BSMl0m.cjs'); });
|
|
13038
13038
|
await handleSendCommand(args.slice(1));
|
|
13039
13039
|
} catch (error) {
|
|
13040
13040
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -13140,9 +13140,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13140
13140
|
if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
|
|
13141
13141
|
const projectId = args[3];
|
|
13142
13142
|
try {
|
|
13143
|
-
const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-
|
|
13144
|
-
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-
|
|
13145
|
-
const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-
|
|
13143
|
+
const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-Byay91xM.cjs'); });
|
|
13144
|
+
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-Dua2iF5S.cjs'); }).then(function (n) { return n.persistence; });
|
|
13145
|
+
const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-Dua2iF5S.cjs'); }).then(function (n) { return n.api; });
|
|
13146
13146
|
let userEmail = void 0;
|
|
13147
13147
|
try {
|
|
13148
13148
|
const credentials = await readCredentialsForConfiguredRelay2();
|
|
@@ -13173,7 +13173,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13173
13173
|
}
|
|
13174
13174
|
if (geminiSubcommand === "project" && args[2] === "get") {
|
|
13175
13175
|
try {
|
|
13176
|
-
const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-
|
|
13176
|
+
const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-Byay91xM.cjs'); });
|
|
13177
13177
|
const config = readGeminiLocalConfig();
|
|
13178
13178
|
if (config.googleCloudProject) {
|
|
13179
13179
|
console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
|
|
@@ -13213,7 +13213,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13213
13213
|
process.exit(0);
|
|
13214
13214
|
}
|
|
13215
13215
|
try {
|
|
13216
|
-
const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-
|
|
13216
|
+
const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-by29Tp8r.cjs'); });
|
|
13217
13217
|
let startedBy = void 0;
|
|
13218
13218
|
for (let i = 1; i < args.length; i++) {
|
|
13219
13219
|
if (args[i] === "--started-by") {
|
|
@@ -13235,7 +13235,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13235
13235
|
return;
|
|
13236
13236
|
} else if (subcommand === "acp") {
|
|
13237
13237
|
try {
|
|
13238
|
-
const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-
|
|
13238
|
+
const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-CkjEzh-Y.cjs'); });
|
|
13239
13239
|
let startedBy = void 0;
|
|
13240
13240
|
let verbose = false;
|
|
13241
13241
|
const acpArgs = [];
|
|
@@ -13275,7 +13275,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13275
13275
|
return;
|
|
13276
13276
|
} else if (subcommand === "openclaw") {
|
|
13277
13277
|
try {
|
|
13278
|
-
const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-
|
|
13278
|
+
const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-DENpTXhw.cjs'); });
|
|
13279
13279
|
let startedBy = void 0;
|
|
13280
13280
|
let verbose = false;
|
|
13281
13281
|
let gatewayUrl;
|
|
@@ -13326,7 +13326,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13326
13326
|
return;
|
|
13327
13327
|
} else if (subcommand === "mcp" && args.length === 1) {
|
|
13328
13328
|
try {
|
|
13329
|
-
const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-
|
|
13329
|
+
const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-BreMIH5r.cjs'); });
|
|
13330
13330
|
await handleMcpCommand();
|
|
13331
13331
|
} catch (error) {
|
|
13332
13332
|
process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { D as DefaultTransport, A as AcpBackend } from './AcpBackend-
|
|
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-
|
|
3
|
-
import { h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, p as projectPath } from './types-
|
|
4
|
-
import { A as AcpSessionManager } from './AcpSessionManager-
|
|
1
|
+
import { D as DefaultTransport, A as AcpBackend } from './AcpBackend-CDngyx5G.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-CDngyx5G.mjs';
|
|
3
|
+
import { h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, p as projectPath } from './types-Clmu74iY.mjs';
|
|
4
|
+
import { A as AcpSessionManager } from './AcpSessionManager-Dcq8dl4l.mjs';
|
|
5
5
|
import { randomUUID } from 'node:crypto';
|
|
6
6
|
import { join } from 'node:path';
|
|
7
|
-
import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, f as startHappyServer, r as registerKillSessionHandler, B as BasePermissionHandler } from './index-
|
|
7
|
+
import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, f as startHappyServer, r as registerKillSessionHandler, B as BasePermissionHandler } from './index-w0zkr6EM.mjs';
|
|
8
8
|
import 'node:child_process';
|
|
9
9
|
import '@agentclientprotocol/sdk';
|
|
10
10
|
import 'axios';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import chalk from 'chalk';
|
|
2
2
|
import os, { homedir } from 'node:os';
|
|
3
3
|
import { randomUUID, randomBytes, createHash as createHash$1, timingSafeEqual } from 'node:crypto';
|
|
4
|
-
import { n as readDaemonState, l as logger, c as configuration, o as clearDaemonState, q as getProjectPath, p as projectPath, s as initializeSandbox, t as wrapCommand, d as contentLogMetadata, I as InvalidateSync, R as RawJSONLinesSchema, g as delay, u as AsyncLock, f as packageJson, i as readSettings, v as readCredentials, x as credentialRelayProblem, y as deriveLocalCliUpdateSummary, j as encodeBase64, z as updateSettings, B as encodeBase64Url, C as decodeBase64, D as writeCredentialsLegacy, E as writeCredentialsDataKey, F as readCredentialsForConfiguredRelay, G as encrypt, r as readPersistedSessions, H as getLocalHappyAgentCredentialPath, J as readLocalHappyAgentCredentials, K as decryptWithDataKey, L as decryptLegacy, M as extractCompleteLines, N as decideBackfill, O as parseTerminalHookPayload, P as decideMirrorBinding, Q as persistSession, S as MIRROR_BACKFILL_LINES_DEFAULT, T as mirrorLineKey, U as mirrorLocalId, V as detectResumeSupport, W as detectCLIAvailability, X as acquireDaemonLock, Y as summarizeSpawnSessionForLog, Z as deletePersistedSessions, _ as decrypt, $ as writeDaemonState, A as ApiClient, a0 as fetchCliUpdateState, a1 as resolveCliUpdateCheckInterval, a2 as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, a3 as releaseDaemonLock, a4 as isValidSessionId, a5 as listVhTerminals, a6 as isValidTerminalId, a7 as readVhTerminal, a8 as sendToVhTerminal, h as connectionState, a9 as startOfflineReconnection, aa as clearCredentials, ab as clearMachineId, k as ensurePrivateDirectorySync, w as writePrivateFileSync, ac as SandboxConfigSchema, b as createEnvelope, ad as CodexAppServerClient, ae as getLatestDaemonLog } from './types-
|
|
4
|
+
import { n as readDaemonState, l as logger, c as configuration, o as clearDaemonState, q as getProjectPath, p as projectPath, s as initializeSandbox, t as wrapCommand, d as contentLogMetadata, I as InvalidateSync, R as RawJSONLinesSchema, g as delay, u as AsyncLock, f as packageJson, i as readSettings, v as readCredentials, x as credentialRelayProblem, y as deriveLocalCliUpdateSummary, j as encodeBase64, z as updateSettings, B as encodeBase64Url, C as decodeBase64, D as writeCredentialsLegacy, E as writeCredentialsDataKey, F as readCredentialsForConfiguredRelay, G as encrypt, r as readPersistedSessions, H as getLocalHappyAgentCredentialPath, J as readLocalHappyAgentCredentials, K as decryptWithDataKey, L as decryptLegacy, M as extractCompleteLines, N as decideBackfill, O as parseTerminalHookPayload, P as decideMirrorBinding, Q as persistSession, S as MIRROR_BACKFILL_LINES_DEFAULT, T as mirrorLineKey, U as mirrorLocalId, V as detectResumeSupport, W as detectCLIAvailability, X as acquireDaemonLock, Y as summarizeSpawnSessionForLog, Z as deletePersistedSessions, _ as decrypt, $ as writeDaemonState, A as ApiClient, a0 as fetchCliUpdateState, a1 as resolveCliUpdateCheckInterval, a2 as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, a3 as releaseDaemonLock, a4 as isValidSessionId, a5 as listVhTerminals, a6 as isValidTerminalId, a7 as readVhTerminal, a8 as sendToVhTerminal, h as connectionState, a9 as startOfflineReconnection, aa as clearCredentials, ab as clearMachineId, k as ensurePrivateDirectorySync, w as writePrivateFileSync, ac as SandboxConfigSchema, b as createEnvelope, ad as CodexAppServerClient, ae as getLatestDaemonLog } from './types-Clmu74iY.mjs';
|
|
5
5
|
import spawn$1, { spawn } from 'cross-spawn';
|
|
6
6
|
import path, { join, resolve, isAbsolute, normalize, sep, dirname } from 'node:path';
|
|
7
7
|
import { createInterface } from 'node:readline';
|
|
@@ -12983,7 +12983,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
12983
12983
|
process.exit(0);
|
|
12984
12984
|
} else if (subcommand === "install-terminal-hooks") {
|
|
12985
12985
|
try {
|
|
12986
|
-
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-
|
|
12986
|
+
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-DFmjn6EQ.mjs');
|
|
12987
12987
|
const command = parseTerminalHooksArgs(args.slice(1));
|
|
12988
12988
|
if (command.action === "help") {
|
|
12989
12989
|
console.log(TERMINAL_HOOKS_HELP);
|
|
@@ -13000,7 +13000,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13000
13000
|
}
|
|
13001
13001
|
} else if (subcommand === "spawn") {
|
|
13002
13002
|
try {
|
|
13003
|
-
const { handleSpawnCommand } = await import('./spawn-
|
|
13003
|
+
const { handleSpawnCommand } = await import('./spawn-Da-94Ejo.mjs');
|
|
13004
13004
|
await handleSpawnCommand(args.slice(1));
|
|
13005
13005
|
} catch (error) {
|
|
13006
13006
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -13012,7 +13012,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13012
13012
|
return;
|
|
13013
13013
|
} else if (subcommand === "send") {
|
|
13014
13014
|
try {
|
|
13015
|
-
const { handleSendCommand } = await import('./send-
|
|
13015
|
+
const { handleSendCommand } = await import('./send-pX36Sd4p.mjs');
|
|
13016
13016
|
await handleSendCommand(args.slice(1));
|
|
13017
13017
|
} catch (error) {
|
|
13018
13018
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -13118,9 +13118,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13118
13118
|
if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
|
|
13119
13119
|
const projectId = args[3];
|
|
13120
13120
|
try {
|
|
13121
|
-
const { saveGoogleCloudProjectToConfig } = await import('./config-
|
|
13122
|
-
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-
|
|
13123
|
-
const { ApiClient: ApiClient2 } = await import('./types-
|
|
13121
|
+
const { saveGoogleCloudProjectToConfig } = await import('./config-Co1Tpb5e.mjs');
|
|
13122
|
+
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-Clmu74iY.mjs').then(function (n) { return n.af; });
|
|
13123
|
+
const { ApiClient: ApiClient2 } = await import('./types-Clmu74iY.mjs').then(function (n) { return n.ag; });
|
|
13124
13124
|
let userEmail = void 0;
|
|
13125
13125
|
try {
|
|
13126
13126
|
const credentials = await readCredentialsForConfiguredRelay2();
|
|
@@ -13151,7 +13151,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13151
13151
|
}
|
|
13152
13152
|
if (geminiSubcommand === "project" && args[2] === "get") {
|
|
13153
13153
|
try {
|
|
13154
|
-
const { readGeminiLocalConfig } = await import('./config-
|
|
13154
|
+
const { readGeminiLocalConfig } = await import('./config-Co1Tpb5e.mjs');
|
|
13155
13155
|
const config = readGeminiLocalConfig();
|
|
13156
13156
|
if (config.googleCloudProject) {
|
|
13157
13157
|
console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
|
|
@@ -13191,7 +13191,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13191
13191
|
process.exit(0);
|
|
13192
13192
|
}
|
|
13193
13193
|
try {
|
|
13194
|
-
const { runGemini } = await import('./runGemini-
|
|
13194
|
+
const { runGemini } = await import('./runGemini-DEZ0neEl.mjs');
|
|
13195
13195
|
let startedBy = void 0;
|
|
13196
13196
|
for (let i = 1; i < args.length; i++) {
|
|
13197
13197
|
if (args[i] === "--started-by") {
|
|
@@ -13213,7 +13213,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13213
13213
|
return;
|
|
13214
13214
|
} else if (subcommand === "acp") {
|
|
13215
13215
|
try {
|
|
13216
|
-
const { runAcp, resolveAcpAgentConfig } = await import('./index-
|
|
13216
|
+
const { runAcp, resolveAcpAgentConfig } = await import('./index-DdOYA0qe.mjs');
|
|
13217
13217
|
let startedBy = void 0;
|
|
13218
13218
|
let verbose = false;
|
|
13219
13219
|
const acpArgs = [];
|
|
@@ -13253,7 +13253,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13253
13253
|
return;
|
|
13254
13254
|
} else if (subcommand === "openclaw") {
|
|
13255
13255
|
try {
|
|
13256
|
-
const { runOpenClaw } = await import('./runOpenClaw-
|
|
13256
|
+
const { runOpenClaw } = await import('./runOpenClaw-DyJQFzoX.mjs');
|
|
13257
13257
|
let startedBy = void 0;
|
|
13258
13258
|
let verbose = false;
|
|
13259
13259
|
let gatewayUrl;
|
|
@@ -13304,7 +13304,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13304
13304
|
return;
|
|
13305
13305
|
} else if (subcommand === "mcp" && args.length === 1) {
|
|
13306
13306
|
try {
|
|
13307
|
-
const { handleMcpCommand } = await import('./mcp-
|
|
13307
|
+
const { handleMcpCommand } = await import('./mcp-nlZLEkmO.mjs');
|
|
13308
13308
|
await handleMcpCommand();
|
|
13309
13309
|
} catch (error) {
|
|
13310
13310
|
process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
|
package/dist/index.cjs
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -3,8 +3,8 @@ import { join, resolve } from 'node:path';
|
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { spawnSync } from 'node:child_process';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
|
-
import { p as projectPath } from './types-
|
|
7
|
-
import { t as tmuxSupportsSessionEnv } from './index-
|
|
6
|
+
import { p as projectPath } from './types-Clmu74iY.mjs';
|
|
7
|
+
import { t as tmuxSupportsSessionEnv } from './index-w0zkr6EM.mjs';
|
|
8
8
|
import 'axios';
|
|
9
9
|
import 'node:util';
|
|
10
10
|
import 'node:fs/promises';
|
|
@@ -5,8 +5,8 @@ var path = require('node:path');
|
|
|
5
5
|
var os = require('node:os');
|
|
6
6
|
var node_child_process = require('node:child_process');
|
|
7
7
|
var chalk = require('chalk');
|
|
8
|
-
var persistence = require('./types-
|
|
9
|
-
var index = require('./index-
|
|
8
|
+
var persistence = require('./types-Dua2iF5S.cjs');
|
|
9
|
+
var index = require('./index-CuvhWx_d.cjs');
|
|
10
10
|
require('axios');
|
|
11
11
|
require('node:util');
|
|
12
12
|
require('node:fs/promises');
|
package/dist/lib.cjs
CHANGED
package/dist/lib.d.cts
CHANGED
|
@@ -273,6 +273,7 @@ declare const DaemonStateSchema: z$1.ZodObject<{
|
|
|
273
273
|
terminals: z$1.ZodArray<z$1.ZodObject<{
|
|
274
274
|
id: z$1.ZodString;
|
|
275
275
|
title: z$1.ZodOptional<z$1.ZodString>;
|
|
276
|
+
tags: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
|
|
276
277
|
cwd: z$1.ZodOptional<z$1.ZodString>;
|
|
277
278
|
createdAt: z$1.ZodOptional<z$1.ZodNumber>;
|
|
278
279
|
activityAt: z$1.ZodOptional<z$1.ZodNumber>;
|
|
@@ -974,6 +975,8 @@ type AgentState = 'working' | 'needs_input' | 'idle' | 'shell';
|
|
|
974
975
|
interface TerminalListItem {
|
|
975
976
|
id: string;
|
|
976
977
|
title?: string;
|
|
978
|
+
/** Always present in new daemon output; optional for old persisted state. */
|
|
979
|
+
tags?: string[];
|
|
977
980
|
cwd?: string;
|
|
978
981
|
createdAt?: number;
|
|
979
982
|
activityAt?: number;
|
package/dist/lib.d.mts
CHANGED
|
@@ -273,6 +273,7 @@ declare const DaemonStateSchema: z$1.ZodObject<{
|
|
|
273
273
|
terminals: z$1.ZodArray<z$1.ZodObject<{
|
|
274
274
|
id: z$1.ZodString;
|
|
275
275
|
title: z$1.ZodOptional<z$1.ZodString>;
|
|
276
|
+
tags: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
|
|
276
277
|
cwd: z$1.ZodOptional<z$1.ZodString>;
|
|
277
278
|
createdAt: z$1.ZodOptional<z$1.ZodNumber>;
|
|
278
279
|
activityAt: z$1.ZodOptional<z$1.ZodNumber>;
|
|
@@ -974,6 +975,8 @@ type AgentState = 'working' | 'needs_input' | 'idle' | 'shell';
|
|
|
974
975
|
interface TerminalListItem {
|
|
975
976
|
id: string;
|
|
976
977
|
title?: string;
|
|
978
|
+
/** Always present in new daemon output; optional for old persisted state. */
|
|
979
|
+
tags?: string[];
|
|
977
980
|
cwd?: string;
|
|
978
981
|
createdAt?: number;
|
|
979
982
|
activityAt?: number;
|
package/dist/lib.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-
|
|
1
|
+
export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-Clmu74iY.mjs';
|
|
2
2
|
import 'axios';
|
|
3
3
|
import 'chalk';
|
|
4
4
|
import 'node:util';
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
4
4
|
var stdio_js = require('@modelcontextprotocol/sdk/server/stdio.js');
|
|
5
5
|
var z = require('zod');
|
|
6
|
-
var index = require('./index-
|
|
6
|
+
var index = require('./index-CuvhWx_d.cjs');
|
|
7
7
|
var limits = require('./limits-KdWKmwtH.cjs');
|
|
8
|
-
var persistence = require('./types-
|
|
8
|
+
var persistence = require('./types-Dua2iF5S.cjs');
|
|
9
9
|
require('chalk');
|
|
10
10
|
require('node:os');
|
|
11
11
|
require('node:crypto');
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import { p as pushClipboardViaDaemon } from './index-
|
|
4
|
+
import { p as pushClipboardViaDaemon } from './index-w0zkr6EM.mjs';
|
|
5
5
|
import { C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, c as CLIPBOARD_MAX_BYTES } from './limits-CwFb5S2b.mjs';
|
|
6
|
-
import { l as logger } from './types-
|
|
6
|
+
import { l as logger } from './types-Clmu74iY.mjs';
|
|
7
7
|
import 'chalk';
|
|
8
8
|
import 'node:os';
|
|
9
9
|
import 'node:crypto';
|
|
@@ -2,10 +2,10 @@ import { useStdout, useInput, Box, Text, render } from 'ink';
|
|
|
2
2
|
import React, { useState, useRef, useEffect, useCallback } from 'react';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
-
import { l as logger, h as connectionState, A as ApiClient, i as readSettings, e as errorLogMetadata, j as encodeBase64, p as projectPath, d as contentLogMetadata } from './types-
|
|
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-
|
|
7
|
-
import { A as AcpBackend } from './AcpBackend-
|
|
8
|
-
import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-
|
|
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-Clmu74iY.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-w0zkr6EM.mjs';
|
|
7
|
+
import { A as AcpBackend } from './AcpBackend-CDngyx5G.mjs';
|
|
8
|
+
import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-Co1Tpb5e.mjs';
|
|
9
9
|
import 'axios';
|
|
10
10
|
import 'chalk';
|
|
11
11
|
import 'node:util';
|
|
@@ -4,10 +4,10 @@ var ink = require('ink');
|
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var node_crypto = require('node:crypto');
|
|
6
6
|
var path = require('node:path');
|
|
7
|
-
var persistence = require('./types-
|
|
8
|
-
var index = require('./index-
|
|
9
|
-
var AcpBackend = require('./AcpBackend-
|
|
10
|
-
var config = require('./config-
|
|
7
|
+
var persistence = require('./types-Dua2iF5S.cjs');
|
|
8
|
+
var index = require('./index-CuvhWx_d.cjs');
|
|
9
|
+
var AcpBackend = require('./AcpBackend-BxZ-KvBy.cjs');
|
|
10
|
+
var config = require('./config-Byay91xM.cjs');
|
|
11
11
|
require('axios');
|
|
12
12
|
require('chalk');
|
|
13
13
|
require('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-
|
|
9
|
-
var AcpSessionManager = require('./AcpSessionManager
|
|
10
|
-
var index = require('./index-
|
|
8
|
+
var persistence = require('./types-Dua2iF5S.cjs');
|
|
9
|
+
var AcpSessionManager = require('./AcpSessionManager-BWFM_8f9.cjs');
|
|
10
|
+
var index = require('./index-CuvhWx_d.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-
|
|
7
|
-
import { A as AcpSessionManager } from './AcpSessionManager-
|
|
8
|
-
import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, r as registerKillSessionHandler } from './index-
|
|
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-Clmu74iY.mjs';
|
|
7
|
+
import { A as AcpSessionManager } from './AcpSessionManager-Dcq8dl4l.mjs';
|
|
8
|
+
import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, r as registerKillSessionHandler } from './index-w0zkr6EM.mjs';
|
|
9
9
|
import WebSocket from 'ws';
|
|
10
10
|
import * as ed from '@noble/ed25519';
|
|
11
11
|
import { sha512 } from '@noble/hashes/sha2.js';
|
|
@@ -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-
|
|
7
|
-
var index = require('./index-
|
|
6
|
+
var persistence = require('./types-Dua2iF5S.cjs');
|
|
7
|
+
var index = require('./index-CuvhWx_d.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 } from 'node:fs';
|
|
3
3
|
import { resolve } from 'node:path';
|
|
4
|
-
import { r as readPersistedSessions, c as configuration } from './types-
|
|
5
|
-
import { b as sendUserMessage, a as sessionWebUrl } from './index-
|
|
4
|
+
import { r as readPersistedSessions, c as configuration } from './types-Clmu74iY.mjs';
|
|
5
|
+
import { b as sendUserMessage, a as sessionWebUrl } from './index-w0zkr6EM.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 index = require('./index-
|
|
7
|
-
var persistence = require('./types-
|
|
6
|
+
var index = require('./index-CuvhWx_d.cjs');
|
|
7
|
+
var persistence = require('./types-Dua2iF5S.cjs');
|
|
8
8
|
require('node:os');
|
|
9
9
|
require('node:crypto');
|
|
10
10
|
require('cross-spawn');
|
|
@@ -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-
|
|
5
|
-
import { l as logger } from './types-
|
|
4
|
+
import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, w as waitForSessionKey, b as sendUserMessage } from './index-w0zkr6EM.mjs';
|
|
5
|
+
import { l as logger } from './types-Clmu74iY.mjs';
|
|
6
6
|
import 'node:os';
|
|
7
7
|
import 'node:crypto';
|
|
8
8
|
import '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.
|
|
32
|
+
var version = "0.2.78";
|
|
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.
|
|
146
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
147
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
148
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
149
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
150
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
145
|
+
"very-happy-tools-arm64-darwin": "0.2.78",
|
|
146
|
+
"very-happy-tools-x64-darwin": "0.2.78",
|
|
147
|
+
"very-happy-tools-arm64-linux": "0.2.78",
|
|
148
|
+
"very-happy-tools-x64-linux": "0.2.78",
|
|
149
|
+
"very-happy-tools-arm64-win32": "0.2.78",
|
|
150
|
+
"very-happy-tools-x64-win32": "0.2.78"
|
|
151
151
|
};
|
|
152
152
|
var devDependencies = {
|
|
153
153
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -938,6 +938,9 @@ const CliUpdateStateSchema = z$1.object({
|
|
|
938
938
|
const WebTerminalListItemSchema = z$1.object({
|
|
939
939
|
id: z$1.string(),
|
|
940
940
|
title: z$1.string().optional(),
|
|
941
|
+
/** New daemons always send an array (including []); absence identifies an
|
|
942
|
+
* old daemon that cannot persist terminal tags. */
|
|
943
|
+
tags: z$1.array(z$1.string()).optional(),
|
|
941
944
|
cwd: z$1.string().optional(),
|
|
942
945
|
createdAt: z$1.number().optional(),
|
|
943
946
|
activityAt: z$1.number().optional(),
|
|
@@ -9786,6 +9789,7 @@ function terminalListSignature(items) {
|
|
|
9786
9789
|
const canon = [...items].sort((a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : 0).map((t) => [
|
|
9787
9790
|
t.id,
|
|
9788
9791
|
t.title ?? "",
|
|
9792
|
+
t.tags ?? [],
|
|
9789
9793
|
t.cwd ?? "",
|
|
9790
9794
|
t.createdAt ?? 0,
|
|
9791
9795
|
Math.floor((t.activityAt ?? 0) / ACTIVITY_SIGNATURE_BUCKET_MS),
|
|
@@ -9819,6 +9823,7 @@ const LIST_SESSIONS_FORMAT = [
|
|
|
9819
9823
|
"#{pane_current_path}",
|
|
9820
9824
|
"#{@vh_title}",
|
|
9821
9825
|
"#{@vh_title_manual}",
|
|
9826
|
+
"#{@vh_tags}",
|
|
9822
9827
|
// B-121: the control-mode client has no `pty.process`, so the agent-state
|
|
9823
9828
|
// fast path lost its live `#{pane_current_command}` equivalent. Carry it in
|
|
9824
9829
|
// the ONE list-sessions call the tracker already makes — the value goes
|
|
@@ -9833,8 +9838,8 @@ const LIST_SESSIONS_FORMAT = [
|
|
|
9833
9838
|
function parseSessionListLine(line) {
|
|
9834
9839
|
if (!line) return void 0;
|
|
9835
9840
|
const parts = line.split(LIST_FIELD_SEP);
|
|
9836
|
-
if (parts.length <
|
|
9837
|
-
const [name, created, activity, cwd, vhTitle, manual, paneCommand] = parts;
|
|
9841
|
+
if (parts.length < 9) return void 0;
|
|
9842
|
+
const [name, created, activity, cwd, vhTitle, manual, vhTags, paneCommand] = parts;
|
|
9838
9843
|
if (!name) return void 0;
|
|
9839
9844
|
return {
|
|
9840
9845
|
name,
|
|
@@ -9843,12 +9848,40 @@ function parseSessionListLine(line) {
|
|
|
9843
9848
|
cwd: cwd || void 0,
|
|
9844
9849
|
vhTitle: vhTitle.trim() || void 0,
|
|
9845
9850
|
manual: manual.trim().length > 0,
|
|
9851
|
+
tags: parseTerminalTags(vhTags),
|
|
9846
9852
|
paneCurrentCommand: paneCommand.trim() || void 0,
|
|
9847
9853
|
// pane_title is last, so anything after field 8 is title content that
|
|
9848
9854
|
// contained the separator — rejoin it rather than dropping it.
|
|
9849
|
-
paneTitle: parts.slice(
|
|
9855
|
+
paneTitle: parts.slice(8).join(LIST_FIELD_SEP) || void 0
|
|
9850
9856
|
};
|
|
9851
9857
|
}
|
|
9858
|
+
const TERMINAL_TAG_MAX_COUNT = 64;
|
|
9859
|
+
const TERMINAL_TAG_MAX_LENGTH = 24;
|
|
9860
|
+
const TERMINAL_TAGS_MAX_BYTES = 4096;
|
|
9861
|
+
function validateTerminalTags(value) {
|
|
9862
|
+
if (!Array.isArray(value) || value.length > TERMINAL_TAG_MAX_COUNT) return void 0;
|
|
9863
|
+
const seen = /* @__PURE__ */ new Set();
|
|
9864
|
+
const out = [];
|
|
9865
|
+
for (const valueTag of value) {
|
|
9866
|
+
if (typeof valueTag !== "string") return void 0;
|
|
9867
|
+
const tag = valueTag.trim().replace(/^#+/, "").trim().replace(/\s+/g, "-").slice(0, TERMINAL_TAG_MAX_LENGTH);
|
|
9868
|
+
if (!tag || tag !== valueTag) return void 0;
|
|
9869
|
+
const key = tag.toLowerCase();
|
|
9870
|
+
if (seen.has(key)) return void 0;
|
|
9871
|
+
seen.add(key);
|
|
9872
|
+
out.push(tag);
|
|
9873
|
+
}
|
|
9874
|
+
if (Buffer.byteLength(JSON.stringify(out), "utf8") > TERMINAL_TAGS_MAX_BYTES) return void 0;
|
|
9875
|
+
return out;
|
|
9876
|
+
}
|
|
9877
|
+
function parseTerminalTags(raw) {
|
|
9878
|
+
if (typeof raw !== "string" || !raw.trim()) return [];
|
|
9879
|
+
try {
|
|
9880
|
+
return validateTerminalTags(JSON.parse(raw)) ?? [];
|
|
9881
|
+
} catch {
|
|
9882
|
+
return [];
|
|
9883
|
+
}
|
|
9884
|
+
}
|
|
9852
9885
|
function classifyPane(currentCommand, tail) {
|
|
9853
9886
|
const cmd = (currentCommand || "").trim().replace(/^-/, "").toLowerCase();
|
|
9854
9887
|
const isShell = SHELL_COMMANDS.has(cmd);
|
|
@@ -11281,6 +11314,8 @@ class WebTerminalManager {
|
|
|
11281
11314
|
out.push({
|
|
11282
11315
|
id,
|
|
11283
11316
|
title,
|
|
11317
|
+
// Always include [] so Web can feature-detect tag support.
|
|
11318
|
+
tags: s.tags,
|
|
11284
11319
|
cwd: s.cwd,
|
|
11285
11320
|
createdAt: s.created,
|
|
11286
11321
|
// tmux last-activity (epoch s) → ms; optional so old daemons
|
|
@@ -11458,6 +11493,25 @@ class WebTerminalManager {
|
|
|
11458
11493
|
return false;
|
|
11459
11494
|
}
|
|
11460
11495
|
}
|
|
11496
|
+
/** Persist terminal tags in tmux, parallel to @vh_title. */
|
|
11497
|
+
setTags(terminalId, tags) {
|
|
11498
|
+
if (!isTmuxAvailable()) return false;
|
|
11499
|
+
if (!/^[a-zA-Z0-9_-]{1,64}$/.test(terminalId)) return false;
|
|
11500
|
+
const valid = validateTerminalTags(tags);
|
|
11501
|
+
if (!valid) return false;
|
|
11502
|
+
const name = `vh-${terminalId}`;
|
|
11503
|
+
try {
|
|
11504
|
+
const r = spawnSync("tmux", ["set-option", "-t", name, "@vh_tags", JSON.stringify(valid)], {
|
|
11505
|
+
stdio: "ignore",
|
|
11506
|
+
env: ptyEnv()
|
|
11507
|
+
});
|
|
11508
|
+
if (r.status !== 0) return false;
|
|
11509
|
+
this.kickListRefresh();
|
|
11510
|
+
return true;
|
|
11511
|
+
} catch {
|
|
11512
|
+
return false;
|
|
11513
|
+
}
|
|
11514
|
+
}
|
|
11461
11515
|
}
|
|
11462
11516
|
|
|
11463
11517
|
const TMUX_TIMEOUT_MS = 3e3;
|
|
@@ -13406,6 +13460,16 @@ class ApiMachineClient {
|
|
|
13406
13460
|
}
|
|
13407
13461
|
return { type: "success" };
|
|
13408
13462
|
});
|
|
13463
|
+
this.rpcHandlerManager.registerHandler("set-terminal-tags", async (params) => {
|
|
13464
|
+
const { terminalId, tags } = params || {};
|
|
13465
|
+
if (!terminalId || !Array.isArray(tags)) {
|
|
13466
|
+
throw new Error("terminalId and tags are required");
|
|
13467
|
+
}
|
|
13468
|
+
if (!this.webTerminal.setTags(terminalId, tags)) {
|
|
13469
|
+
throw new Error("Failed to set terminal tags (invalid tags, tmux unavailable, or session gone)");
|
|
13470
|
+
}
|
|
13471
|
+
return { type: "success" };
|
|
13472
|
+
});
|
|
13409
13473
|
this.rpcHandlerManager.registerHandler("stop-session", (params) => {
|
|
13410
13474
|
const { sessionId } = params || {};
|
|
13411
13475
|
if (!sessionId) {
|
|
@@ -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.
|
|
54
|
+
var version = "0.2.78";
|
|
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.
|
|
168
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
169
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
170
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
171
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
172
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
167
|
+
"very-happy-tools-arm64-darwin": "0.2.78",
|
|
168
|
+
"very-happy-tools-x64-darwin": "0.2.78",
|
|
169
|
+
"very-happy-tools-arm64-linux": "0.2.78",
|
|
170
|
+
"very-happy-tools-x64-linux": "0.2.78",
|
|
171
|
+
"very-happy-tools-arm64-win32": "0.2.78",
|
|
172
|
+
"very-happy-tools-x64-win32": "0.2.78"
|
|
173
173
|
};
|
|
174
174
|
var devDependencies = {
|
|
175
175
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -960,6 +960,9 @@ const CliUpdateStateSchema = z.z.object({
|
|
|
960
960
|
const WebTerminalListItemSchema = z.z.object({
|
|
961
961
|
id: z.z.string(),
|
|
962
962
|
title: z.z.string().optional(),
|
|
963
|
+
/** New daemons always send an array (including []); absence identifies an
|
|
964
|
+
* old daemon that cannot persist terminal tags. */
|
|
965
|
+
tags: z.z.array(z.z.string()).optional(),
|
|
963
966
|
cwd: z.z.string().optional(),
|
|
964
967
|
createdAt: z.z.number().optional(),
|
|
965
968
|
activityAt: z.z.number().optional(),
|
|
@@ -1474,7 +1477,7 @@ class RpcHandlerManager {
|
|
|
1474
1477
|
}
|
|
1475
1478
|
}
|
|
1476
1479
|
|
|
1477
|
-
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-
|
|
1480
|
+
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-Dua2iF5S.cjs', document.baseURI).href))));
|
|
1478
1481
|
function projectPath() {
|
|
1479
1482
|
const path = path$1.resolve(__dirname$1, "..");
|
|
1480
1483
|
return path;
|
|
@@ -9808,6 +9811,7 @@ function terminalListSignature(items) {
|
|
|
9808
9811
|
const canon = [...items].sort((a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : 0).map((t) => [
|
|
9809
9812
|
t.id,
|
|
9810
9813
|
t.title ?? "",
|
|
9814
|
+
t.tags ?? [],
|
|
9811
9815
|
t.cwd ?? "",
|
|
9812
9816
|
t.createdAt ?? 0,
|
|
9813
9817
|
Math.floor((t.activityAt ?? 0) / ACTIVITY_SIGNATURE_BUCKET_MS),
|
|
@@ -9841,6 +9845,7 @@ const LIST_SESSIONS_FORMAT = [
|
|
|
9841
9845
|
"#{pane_current_path}",
|
|
9842
9846
|
"#{@vh_title}",
|
|
9843
9847
|
"#{@vh_title_manual}",
|
|
9848
|
+
"#{@vh_tags}",
|
|
9844
9849
|
// B-121: the control-mode client has no `pty.process`, so the agent-state
|
|
9845
9850
|
// fast path lost its live `#{pane_current_command}` equivalent. Carry it in
|
|
9846
9851
|
// the ONE list-sessions call the tracker already makes — the value goes
|
|
@@ -9855,8 +9860,8 @@ const LIST_SESSIONS_FORMAT = [
|
|
|
9855
9860
|
function parseSessionListLine(line) {
|
|
9856
9861
|
if (!line) return void 0;
|
|
9857
9862
|
const parts = line.split(LIST_FIELD_SEP);
|
|
9858
|
-
if (parts.length <
|
|
9859
|
-
const [name, created, activity, cwd, vhTitle, manual, paneCommand] = parts;
|
|
9863
|
+
if (parts.length < 9) return void 0;
|
|
9864
|
+
const [name, created, activity, cwd, vhTitle, manual, vhTags, paneCommand] = parts;
|
|
9860
9865
|
if (!name) return void 0;
|
|
9861
9866
|
return {
|
|
9862
9867
|
name,
|
|
@@ -9865,12 +9870,40 @@ function parseSessionListLine(line) {
|
|
|
9865
9870
|
cwd: cwd || void 0,
|
|
9866
9871
|
vhTitle: vhTitle.trim() || void 0,
|
|
9867
9872
|
manual: manual.trim().length > 0,
|
|
9873
|
+
tags: parseTerminalTags(vhTags),
|
|
9868
9874
|
paneCurrentCommand: paneCommand.trim() || void 0,
|
|
9869
9875
|
// pane_title is last, so anything after field 8 is title content that
|
|
9870
9876
|
// contained the separator — rejoin it rather than dropping it.
|
|
9871
|
-
paneTitle: parts.slice(
|
|
9877
|
+
paneTitle: parts.slice(8).join(LIST_FIELD_SEP) || void 0
|
|
9872
9878
|
};
|
|
9873
9879
|
}
|
|
9880
|
+
const TERMINAL_TAG_MAX_COUNT = 64;
|
|
9881
|
+
const TERMINAL_TAG_MAX_LENGTH = 24;
|
|
9882
|
+
const TERMINAL_TAGS_MAX_BYTES = 4096;
|
|
9883
|
+
function validateTerminalTags(value) {
|
|
9884
|
+
if (!Array.isArray(value) || value.length > TERMINAL_TAG_MAX_COUNT) return void 0;
|
|
9885
|
+
const seen = /* @__PURE__ */ new Set();
|
|
9886
|
+
const out = [];
|
|
9887
|
+
for (const valueTag of value) {
|
|
9888
|
+
if (typeof valueTag !== "string") return void 0;
|
|
9889
|
+
const tag = valueTag.trim().replace(/^#+/, "").trim().replace(/\s+/g, "-").slice(0, TERMINAL_TAG_MAX_LENGTH);
|
|
9890
|
+
if (!tag || tag !== valueTag) return void 0;
|
|
9891
|
+
const key = tag.toLowerCase();
|
|
9892
|
+
if (seen.has(key)) return void 0;
|
|
9893
|
+
seen.add(key);
|
|
9894
|
+
out.push(tag);
|
|
9895
|
+
}
|
|
9896
|
+
if (Buffer.byteLength(JSON.stringify(out), "utf8") > TERMINAL_TAGS_MAX_BYTES) return void 0;
|
|
9897
|
+
return out;
|
|
9898
|
+
}
|
|
9899
|
+
function parseTerminalTags(raw) {
|
|
9900
|
+
if (typeof raw !== "string" || !raw.trim()) return [];
|
|
9901
|
+
try {
|
|
9902
|
+
return validateTerminalTags(JSON.parse(raw)) ?? [];
|
|
9903
|
+
} catch {
|
|
9904
|
+
return [];
|
|
9905
|
+
}
|
|
9906
|
+
}
|
|
9874
9907
|
function classifyPane(currentCommand, tail) {
|
|
9875
9908
|
const cmd = (currentCommand || "").trim().replace(/^-/, "").toLowerCase();
|
|
9876
9909
|
const isShell = SHELL_COMMANDS.has(cmd);
|
|
@@ -11303,6 +11336,8 @@ class WebTerminalManager {
|
|
|
11303
11336
|
out.push({
|
|
11304
11337
|
id,
|
|
11305
11338
|
title,
|
|
11339
|
+
// Always include [] so Web can feature-detect tag support.
|
|
11340
|
+
tags: s.tags,
|
|
11306
11341
|
cwd: s.cwd,
|
|
11307
11342
|
createdAt: s.created,
|
|
11308
11343
|
// tmux last-activity (epoch s) → ms; optional so old daemons
|
|
@@ -11480,6 +11515,25 @@ class WebTerminalManager {
|
|
|
11480
11515
|
return false;
|
|
11481
11516
|
}
|
|
11482
11517
|
}
|
|
11518
|
+
/** Persist terminal tags in tmux, parallel to @vh_title. */
|
|
11519
|
+
setTags(terminalId, tags) {
|
|
11520
|
+
if (!isTmuxAvailable()) return false;
|
|
11521
|
+
if (!/^[a-zA-Z0-9_-]{1,64}$/.test(terminalId)) return false;
|
|
11522
|
+
const valid = validateTerminalTags(tags);
|
|
11523
|
+
if (!valid) return false;
|
|
11524
|
+
const name = `vh-${terminalId}`;
|
|
11525
|
+
try {
|
|
11526
|
+
const r = node_child_process.spawnSync("tmux", ["set-option", "-t", name, "@vh_tags", JSON.stringify(valid)], {
|
|
11527
|
+
stdio: "ignore",
|
|
11528
|
+
env: ptyEnv()
|
|
11529
|
+
});
|
|
11530
|
+
if (r.status !== 0) return false;
|
|
11531
|
+
this.kickListRefresh();
|
|
11532
|
+
return true;
|
|
11533
|
+
} catch {
|
|
11534
|
+
return false;
|
|
11535
|
+
}
|
|
11536
|
+
}
|
|
11483
11537
|
}
|
|
11484
11538
|
|
|
11485
11539
|
const TMUX_TIMEOUT_MS = 3e3;
|
|
@@ -13428,6 +13482,16 @@ class ApiMachineClient {
|
|
|
13428
13482
|
}
|
|
13429
13483
|
return { type: "success" };
|
|
13430
13484
|
});
|
|
13485
|
+
this.rpcHandlerManager.registerHandler("set-terminal-tags", async (params) => {
|
|
13486
|
+
const { terminalId, tags } = params || {};
|
|
13487
|
+
if (!terminalId || !Array.isArray(tags)) {
|
|
13488
|
+
throw new Error("terminalId and tags are required");
|
|
13489
|
+
}
|
|
13490
|
+
if (!this.webTerminal.setTags(terminalId, tags)) {
|
|
13491
|
+
throw new Error("Failed to set terminal tags (invalid tags, tmux unavailable, or session gone)");
|
|
13492
|
+
}
|
|
13493
|
+
return { type: "success" };
|
|
13494
|
+
});
|
|
13431
13495
|
this.rpcHandlerManager.registerHandler("stop-session", (params) => {
|
|
13432
13496
|
const { sessionId } = params || {};
|
|
13433
13497
|
if (!sessionId) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "very-happy-cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.78",
|
|
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.
|
|
117
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
118
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
119
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
120
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
121
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
116
|
+
"very-happy-tools-arm64-darwin": "0.2.78",
|
|
117
|
+
"very-happy-tools-x64-darwin": "0.2.78",
|
|
118
|
+
"very-happy-tools-arm64-linux": "0.2.78",
|
|
119
|
+
"very-happy-tools-x64-linux": "0.2.78",
|
|
120
|
+
"very-happy-tools-arm64-win32": "0.2.78",
|
|
121
|
+
"very-happy-tools-x64-win32": "0.2.78"
|
|
122
122
|
},
|
|
123
123
|
"devDependencies": {
|
|
124
124
|
"@slopus/happy-wire": "workspace:*",
|