very-happy-cli 0.2.98 → 0.2.99
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-BXiGiFC7.mjs → AcpBackend-C9LtzYSx.mjs} +1 -1
- package/dist/{AcpBackend-DhR8ml8L.cjs → AcpBackend-DkvV2nhl.cjs} +1 -1
- package/dist/{AcpSessionManager-CDnrxAfQ.mjs → AcpSessionManager-B5rJcE82.mjs} +1 -1
- package/dist/{AcpSessionManager-Ckc0NFmf.cjs → AcpSessionManager-gsp_-PGy.cjs} +1 -1
- package/dist/{config-B3pA9YsN.mjs → config-BcCVR-Wx.mjs} +2 -2
- package/dist/{config-GJQc_kpD.cjs → config-Bidi0Yeq.cjs} +2 -2
- package/dist/{index-CuUVSZnK.mjs → index-B87z2DOo.mjs} +12 -12
- package/dist/{index-BBm2b34F.cjs → index-CxdGnaov.cjs} +4 -4
- package/dist/{index-CO1gNtuP.cjs → index-Dp1EYEyF.cjs} +16 -16
- package/dist/{index-Bh5Rcy0s.mjs → index-Wfds4scC.mjs} +5 -5
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{installTerminalHooks-Ru0dn_zF.mjs → installTerminalHooks-DkOh088o.mjs} +2 -2
- package/dist/{installTerminalHooks-Cp9JVxQ-.cjs → installTerminalHooks-jaCruGfR.cjs} +2 -2
- package/dist/lib.cjs +1 -1
- package/dist/lib.d.cts +1 -0
- package/dist/lib.d.mts +1 -0
- package/dist/lib.mjs +1 -1
- package/dist/{mcp-CQoVN0u2.mjs → mcp-DhftF_XE.mjs} +2 -2
- package/dist/{mcp-B5HMF24K.cjs → mcp-ZQbu8tL1.cjs} +2 -2
- package/dist/{runGemini-CwZXQsgu.mjs → runGemini-3-xWWBRA.mjs} +4 -4
- package/dist/{runGemini-BBzPVzuc.cjs → runGemini-Ce7Maf-D.cjs} +4 -4
- package/dist/{runOpenClaw-C-jz4rWr.mjs → runOpenClaw-DZhGhihh.mjs} +3 -3
- package/dist/{runOpenClaw-B4nC6XGL.cjs → runOpenClaw-q3inEsDr.cjs} +3 -3
- package/dist/{send-DN-nVBEI.mjs → send-B3NOqi9-.mjs} +2 -2
- package/dist/{send-CWgaINHC.cjs → send-BdEJeVye.cjs} +2 -2
- package/dist/{spawn-CqcfbOnk.mjs → spawn-CCYAeBfN.mjs} +2 -2
- package/dist/{spawn-C0NSP84Y.cjs → spawn-DEVUh4iW.cjs} +2 -2
- package/dist/{types-Cl4vWuDY.mjs → types-CrJj-daH.mjs} +23 -12
- package/dist/{types-BP-4phS_.cjs → types-DhxxJFD0.cjs} +24 -13
- package/package.json +7 -7
|
@@ -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-CrJj-daH.mjs';
|
|
5
5
|
|
|
6
6
|
const DEFAULT_TIMEOUTS = {
|
|
7
7
|
/** Default initialization timeout: 60 seconds */
|
|
@@ -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-DhxxJFD0.cjs');
|
|
7
7
|
|
|
8
8
|
const DEFAULT_TIMEOUTS = {
|
|
9
9
|
/** Default initialization timeout: 60 seconds */
|
|
@@ -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-CrJj-daH.mjs';
|
|
6
|
+
import { D as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './index-B87z2DOo.mjs';
|
|
7
7
|
import 'axios';
|
|
8
8
|
import 'chalk';
|
|
9
9
|
import 'node:util';
|
|
@@ -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-DhxxJFD0.cjs');
|
|
8
|
+
var index = require('./index-Dp1EYEyF.cjs');
|
|
9
9
|
require('axios');
|
|
10
10
|
require('chalk');
|
|
11
11
|
require('node:util');
|
|
@@ -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, userInfo } 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, v as ensurePrivateDirectory, M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES, x as hardenPrivateFile, f as packageJson, i as readSettings, y as readCredentials, z as credentialRelayProblem, B as deriveLocalCliUpdateSummary, j as encodeBase64, C as updateSettings, D as encodeBase64Url, E as decodeBase64, F as writeCredentialsLegacy, G as writeCredentialsDataKey, H as readCredentialsForConfiguredRelay, J as encrypt, r as readPersistedSessions, K as isClaudeSessionId, L as getLocalHappyAgentCredentialPath, N as readLocalHappyAgentCredentials, O as decryptWithDataKey, P as decryptLegacy, Q as extractCompleteLines, S as decideBackfill, T as parseTerminalHookPayload, U as tmuxArgs, V as scrubTmuxClientEnv, W as decideMirrorBinding, X as MIRROR_BACKFILL_LINES_DEFAULT, Y as persistSession, Z as mirrorLineKey, _ as mirrorLocalId, w as writePrivateFileSync, $ as detectResumeSupport, a0 as detectCLIAvailability, a1 as acquireDaemonLock, a2 as summarizeSpawnSessionForLog, a3 as deletePersistedSessions, a4 as shellescape, a5 as decrypt, a6 as writeDaemonState, A as ApiClient, a7 as writeSettings, a8 as fetchCliUpdateState, a9 as resolveCliUpdateCheckInterval, aa as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, ab as releaseDaemonLock, ac as isValidSessionId, ad as listVhTerminals, ae as isValidTerminalId, af as readVhTerminal, ag as sendToVhTerminal, h as connectionState, ah as startOfflineReconnection, ai as clearCredentials, aj as clearMachineId, k as ensurePrivateDirectorySync, ak as SandboxConfigSchema, b as createEnvelope, al as CodexAppServerClient, am 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, v as ensurePrivateDirectory, M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES, x as hardenPrivateFile, f as packageJson, i as readSettings, y as readCredentials, z as credentialRelayProblem, B as deriveLocalCliUpdateSummary, j as encodeBase64, C as updateSettings, D as encodeBase64Url, E as decodeBase64, F as writeCredentialsLegacy, G as writeCredentialsDataKey, H as readCredentialsForConfiguredRelay, J as encrypt, r as readPersistedSessions, K as isClaudeSessionId, L as getLocalHappyAgentCredentialPath, N as readLocalHappyAgentCredentials, O as decryptWithDataKey, P as decryptLegacy, Q as extractCompleteLines, S as decideBackfill, T as parseTerminalHookPayload, U as tmuxArgs, V as scrubTmuxClientEnv, W as decideMirrorBinding, X as MIRROR_BACKFILL_LINES_DEFAULT, Y as persistSession, Z as mirrorLineKey, _ as mirrorLocalId, w as writePrivateFileSync, $ as detectResumeSupport, a0 as detectCLIAvailability, a1 as acquireDaemonLock, a2 as summarizeSpawnSessionForLog, a3 as deletePersistedSessions, a4 as shellescape, a5 as decrypt, a6 as writeDaemonState, A as ApiClient, a7 as writeSettings, a8 as fetchCliUpdateState, a9 as resolveCliUpdateCheckInterval, aa as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, ab as releaseDaemonLock, ac as isValidSessionId, ad as listVhTerminals, ae as isValidTerminalId, af as readVhTerminal, ag as sendToVhTerminal, h as connectionState, ah as startOfflineReconnection, ai as clearCredentials, aj as clearMachineId, k as ensurePrivateDirectorySync, ak as SandboxConfigSchema, b as createEnvelope, al as CodexAppServerClient, am as getLatestDaemonLog } from './types-CrJj-daH.mjs';
|
|
5
5
|
import spawn$1, { spawn } from 'cross-spawn';
|
|
6
6
|
import path, { join, resolve, basename, delimiter, isAbsolute, normalize, sep, dirname } from 'node:path';
|
|
7
7
|
import { createInterface } from 'node:readline';
|
|
@@ -14738,7 +14738,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14738
14738
|
process.exit(0);
|
|
14739
14739
|
} else if (subcommand === "install-terminal-hooks") {
|
|
14740
14740
|
try {
|
|
14741
|
-
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-
|
|
14741
|
+
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-DkOh088o.mjs');
|
|
14742
14742
|
const command = parseTerminalHooksArgs(args.slice(1));
|
|
14743
14743
|
if (command.action === "help") {
|
|
14744
14744
|
console.log(TERMINAL_HOOKS_HELP);
|
|
@@ -14755,7 +14755,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14755
14755
|
}
|
|
14756
14756
|
} else if (subcommand === "spawn") {
|
|
14757
14757
|
try {
|
|
14758
|
-
const { handleSpawnCommand } = await import('./spawn-
|
|
14758
|
+
const { handleSpawnCommand } = await import('./spawn-CCYAeBfN.mjs');
|
|
14759
14759
|
await handleSpawnCommand(args.slice(1));
|
|
14760
14760
|
} catch (error) {
|
|
14761
14761
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -14767,7 +14767,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14767
14767
|
return;
|
|
14768
14768
|
} else if (subcommand === "send") {
|
|
14769
14769
|
try {
|
|
14770
|
-
const { handleSendCommand } = await import('./send-
|
|
14770
|
+
const { handleSendCommand } = await import('./send-B3NOqi9-.mjs');
|
|
14771
14771
|
await handleSendCommand(args.slice(1));
|
|
14772
14772
|
} catch (error) {
|
|
14773
14773
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -14873,9 +14873,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14873
14873
|
if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
|
|
14874
14874
|
const projectId = args[3];
|
|
14875
14875
|
try {
|
|
14876
|
-
const { saveGoogleCloudProjectToConfig } = await import('./config-
|
|
14877
|
-
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-
|
|
14878
|
-
const { ApiClient: ApiClient2 } = await import('./types-
|
|
14876
|
+
const { saveGoogleCloudProjectToConfig } = await import('./config-BcCVR-Wx.mjs');
|
|
14877
|
+
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-CrJj-daH.mjs').then(function (n) { return n.an; });
|
|
14878
|
+
const { ApiClient: ApiClient2 } = await import('./types-CrJj-daH.mjs').then(function (n) { return n.ao; });
|
|
14879
14879
|
let userEmail = void 0;
|
|
14880
14880
|
try {
|
|
14881
14881
|
const credentials = await readCredentialsForConfiguredRelay2();
|
|
@@ -14906,7 +14906,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14906
14906
|
}
|
|
14907
14907
|
if (geminiSubcommand === "project" && args[2] === "get") {
|
|
14908
14908
|
try {
|
|
14909
|
-
const { readGeminiLocalConfig } = await import('./config-
|
|
14909
|
+
const { readGeminiLocalConfig } = await import('./config-BcCVR-Wx.mjs');
|
|
14910
14910
|
const config = readGeminiLocalConfig();
|
|
14911
14911
|
if (config.googleCloudProject) {
|
|
14912
14912
|
console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
|
|
@@ -14946,7 +14946,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14946
14946
|
process.exit(0);
|
|
14947
14947
|
}
|
|
14948
14948
|
try {
|
|
14949
|
-
const { runGemini } = await import('./runGemini-
|
|
14949
|
+
const { runGemini } = await import('./runGemini-3-xWWBRA.mjs');
|
|
14950
14950
|
let startedBy = void 0;
|
|
14951
14951
|
for (let i = 1; i < args.length; i++) {
|
|
14952
14952
|
if (args[i] === "--started-by") {
|
|
@@ -14968,7 +14968,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14968
14968
|
return;
|
|
14969
14969
|
} else if (subcommand === "acp") {
|
|
14970
14970
|
try {
|
|
14971
|
-
const { runAcp, resolveAcpAgentConfig } = await import('./index-
|
|
14971
|
+
const { runAcp, resolveAcpAgentConfig } = await import('./index-Wfds4scC.mjs');
|
|
14972
14972
|
let startedBy = void 0;
|
|
14973
14973
|
let verbose = false;
|
|
14974
14974
|
const acpArgs = [];
|
|
@@ -15008,7 +15008,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15008
15008
|
return;
|
|
15009
15009
|
} else if (subcommand === "openclaw") {
|
|
15010
15010
|
try {
|
|
15011
|
-
const { runOpenClaw } = await import('./runOpenClaw-
|
|
15011
|
+
const { runOpenClaw } = await import('./runOpenClaw-DZhGhihh.mjs');
|
|
15012
15012
|
let startedBy = void 0;
|
|
15013
15013
|
let verbose = false;
|
|
15014
15014
|
let gatewayUrl;
|
|
@@ -15059,7 +15059,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15059
15059
|
return;
|
|
15060
15060
|
} else if (subcommand === "mcp" && args.length === 1) {
|
|
15061
15061
|
try {
|
|
15062
|
-
const { handleMcpCommand } = await import('./mcp-
|
|
15062
|
+
const { handleMcpCommand } = await import('./mcp-DhftF_XE.mjs');
|
|
15063
15063
|
await handleMcpCommand();
|
|
15064
15064
|
} catch (error) {
|
|
15065
15065
|
process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var AcpBackend = require('./AcpBackend-
|
|
4
|
-
var persistence = require('./types-
|
|
5
|
-
var AcpSessionManager = require('./AcpSessionManager-
|
|
3
|
+
var AcpBackend = require('./AcpBackend-DkvV2nhl.cjs');
|
|
4
|
+
var persistence = require('./types-DhxxJFD0.cjs');
|
|
5
|
+
var AcpSessionManager = require('./AcpSessionManager-gsp_-PGy.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-Dp1EYEyF.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-DhxxJFD0.cjs');
|
|
7
7
|
var spawn = require('cross-spawn');
|
|
8
8
|
var path = require('node:path');
|
|
9
9
|
var node_readline = require('node:readline');
|
|
@@ -6771,7 +6771,7 @@ function parseJsonObject(text) {
|
|
|
6771
6771
|
return null;
|
|
6772
6772
|
}
|
|
6773
6773
|
}
|
|
6774
|
-
function resolveSdkClaudeBinary(platform = process.platform, arch = process.arch, resolver = (s) => node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-
|
|
6774
|
+
function resolveSdkClaudeBinary(platform = process.platform, arch = process.arch, resolver = (s) => node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-Dp1EYEyF.cjs', document.baseURI).href))).resolve(s)) {
|
|
6775
6775
|
const platformArch = `${platform}-${arch}`;
|
|
6776
6776
|
const candidates = [
|
|
6777
6777
|
`@anthropic-ai/claude-agent-sdk-${platformArch}/claude`,
|
|
@@ -9939,7 +9939,7 @@ const MAX_TITLE_CHARS = 60;
|
|
|
9939
9939
|
const GENERATION_TIMEOUT_MS = 3e4;
|
|
9940
9940
|
function resolveClaudeBinary() {
|
|
9941
9941
|
try {
|
|
9942
|
-
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-
|
|
9942
|
+
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-Dp1EYEyF.cjs', document.baseURI).href)));
|
|
9943
9943
|
const utilsPath = path.resolve(path.join(persistence.projectPath(), "scripts", "claude_version_utils.cjs"));
|
|
9944
9944
|
const { getClaudeCliPath } = require$1(utilsPath);
|
|
9945
9945
|
const path$1 = getClaudeCliPath();
|
|
@@ -12134,9 +12134,9 @@ function resolveLocalSignupBootstrap(configuredMode, configuredInviteCodes, gene
|
|
|
12134
12134
|
};
|
|
12135
12135
|
}
|
|
12136
12136
|
|
|
12137
|
-
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-
|
|
12137
|
+
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-Dp1EYEyF.cjs', document.baseURI).href)));
|
|
12138
12138
|
const __dirname$1 = path.dirname(__filename$1);
|
|
12139
|
-
const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-
|
|
12139
|
+
const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-Dp1EYEyF.cjs', document.baseURI).href)));
|
|
12140
12140
|
const PRISMA_QUERY_ENGINE_FILES = {
|
|
12141
12141
|
"arm64-darwin": "libquery_engine-darwin-arm64.dylib.node",
|
|
12142
12142
|
"x64-darwin": "libquery_engine-darwin.dylib.node",
|
|
@@ -14760,7 +14760,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14760
14760
|
process.exit(0);
|
|
14761
14761
|
} else if (subcommand === "install-terminal-hooks") {
|
|
14762
14762
|
try {
|
|
14763
|
-
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-
|
|
14763
|
+
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-jaCruGfR.cjs'); });
|
|
14764
14764
|
const command = parseTerminalHooksArgs(args.slice(1));
|
|
14765
14765
|
if (command.action === "help") {
|
|
14766
14766
|
console.log(TERMINAL_HOOKS_HELP);
|
|
@@ -14777,7 +14777,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14777
14777
|
}
|
|
14778
14778
|
} else if (subcommand === "spawn") {
|
|
14779
14779
|
try {
|
|
14780
|
-
const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-
|
|
14780
|
+
const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-DEVUh4iW.cjs'); });
|
|
14781
14781
|
await handleSpawnCommand(args.slice(1));
|
|
14782
14782
|
} catch (error) {
|
|
14783
14783
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -14789,7 +14789,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14789
14789
|
return;
|
|
14790
14790
|
} else if (subcommand === "send") {
|
|
14791
14791
|
try {
|
|
14792
|
-
const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-
|
|
14792
|
+
const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-BdEJeVye.cjs'); });
|
|
14793
14793
|
await handleSendCommand(args.slice(1));
|
|
14794
14794
|
} catch (error) {
|
|
14795
14795
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -14895,9 +14895,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14895
14895
|
if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
|
|
14896
14896
|
const projectId = args[3];
|
|
14897
14897
|
try {
|
|
14898
|
-
const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-
|
|
14899
|
-
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-
|
|
14900
|
-
const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-
|
|
14898
|
+
const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-Bidi0Yeq.cjs'); });
|
|
14899
|
+
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-DhxxJFD0.cjs'); }).then(function (n) { return n.persistence; });
|
|
14900
|
+
const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-DhxxJFD0.cjs'); }).then(function (n) { return n.api; });
|
|
14901
14901
|
let userEmail = void 0;
|
|
14902
14902
|
try {
|
|
14903
14903
|
const credentials = await readCredentialsForConfiguredRelay2();
|
|
@@ -14928,7 +14928,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14928
14928
|
}
|
|
14929
14929
|
if (geminiSubcommand === "project" && args[2] === "get") {
|
|
14930
14930
|
try {
|
|
14931
|
-
const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-
|
|
14931
|
+
const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-Bidi0Yeq.cjs'); });
|
|
14932
14932
|
const config = readGeminiLocalConfig();
|
|
14933
14933
|
if (config.googleCloudProject) {
|
|
14934
14934
|
console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
|
|
@@ -14968,7 +14968,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14968
14968
|
process.exit(0);
|
|
14969
14969
|
}
|
|
14970
14970
|
try {
|
|
14971
|
-
const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-
|
|
14971
|
+
const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-Ce7Maf-D.cjs'); });
|
|
14972
14972
|
let startedBy = void 0;
|
|
14973
14973
|
for (let i = 1; i < args.length; i++) {
|
|
14974
14974
|
if (args[i] === "--started-by") {
|
|
@@ -14990,7 +14990,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
14990
14990
|
return;
|
|
14991
14991
|
} else if (subcommand === "acp") {
|
|
14992
14992
|
try {
|
|
14993
|
-
const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-
|
|
14993
|
+
const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-CxdGnaov.cjs'); });
|
|
14994
14994
|
let startedBy = void 0;
|
|
14995
14995
|
let verbose = false;
|
|
14996
14996
|
const acpArgs = [];
|
|
@@ -15030,7 +15030,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15030
15030
|
return;
|
|
15031
15031
|
} else if (subcommand === "openclaw") {
|
|
15032
15032
|
try {
|
|
15033
|
-
const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-
|
|
15033
|
+
const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-q3inEsDr.cjs'); });
|
|
15034
15034
|
let startedBy = void 0;
|
|
15035
15035
|
let verbose = false;
|
|
15036
15036
|
let gatewayUrl;
|
|
@@ -15081,7 +15081,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15081
15081
|
return;
|
|
15082
15082
|
} else if (subcommand === "mcp" && args.length === 1) {
|
|
15083
15083
|
try {
|
|
15084
|
-
const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-
|
|
15084
|
+
const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-ZQbu8tL1.cjs'); });
|
|
15085
15085
|
await handleMcpCommand();
|
|
15086
15086
|
} catch (error) {
|
|
15087
15087
|
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-C9LtzYSx.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-C9LtzYSx.mjs';
|
|
3
|
+
import { h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, p as projectPath } from './types-CrJj-daH.mjs';
|
|
4
|
+
import { A as AcpSessionManager } from './AcpSessionManager-B5rJcE82.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-B87z2DOo.mjs';
|
|
8
8
|
import 'node:child_process';
|
|
9
9
|
import '@agentclientprotocol/sdk';
|
|
10
10
|
import 'axios';
|
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-CrJj-daH.mjs';
|
|
7
|
+
import { t as tmuxSupportsSessionEnv } from './index-B87z2DOo.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-DhxxJFD0.cjs');
|
|
9
|
+
var index = require('./index-Dp1EYEyF.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
|
@@ -369,6 +369,7 @@ declare const DaemonStateSchema: z$1.ZodObject<{
|
|
|
369
369
|
tmuxSessions: z$1.ZodOptional<z$1.ZodObject<{
|
|
370
370
|
rpcAvailable: z$1.ZodBoolean;
|
|
371
371
|
detectedAt: z$1.ZodNumber;
|
|
372
|
+
killAttached: z$1.ZodOptional<z$1.ZodBoolean>;
|
|
372
373
|
}, z$1.core.$strip>>;
|
|
373
374
|
cliUpdate: z$1.ZodOptional<z$1.ZodObject<{
|
|
374
375
|
currentVersion: z$1.ZodString;
|
package/dist/lib.d.mts
CHANGED
|
@@ -369,6 +369,7 @@ declare const DaemonStateSchema: z$1.ZodObject<{
|
|
|
369
369
|
tmuxSessions: z$1.ZodOptional<z$1.ZodObject<{
|
|
370
370
|
rpcAvailable: z$1.ZodBoolean;
|
|
371
371
|
detectedAt: z$1.ZodNumber;
|
|
372
|
+
killAttached: z$1.ZodOptional<z$1.ZodBoolean>;
|
|
372
373
|
}, z$1.core.$strip>>;
|
|
373
374
|
cliUpdate: z$1.ZodOptional<z$1.ZodObject<{
|
|
374
375
|
currentVersion: z$1.ZodString;
|
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-CrJj-daH.mjs';
|
|
2
2
|
import 'axios';
|
|
3
3
|
import 'chalk';
|
|
4
4
|
import 'node:util';
|
|
@@ -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-B87z2DOo.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-CrJj-daH.mjs';
|
|
7
7
|
import 'chalk';
|
|
8
8
|
import 'node:os';
|
|
9
9
|
import 'node:crypto';
|
|
@@ -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-Dp1EYEyF.cjs');
|
|
7
7
|
var limits = require('./limits-KdWKmwtH.cjs');
|
|
8
|
-
var persistence = require('./types-
|
|
8
|
+
var persistence = require('./types-DhxxJFD0.cjs');
|
|
9
9
|
require('chalk');
|
|
10
10
|
require('node:os');
|
|
11
11
|
require('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-CrJj-daH.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-B87z2DOo.mjs';
|
|
7
|
+
import { A as AcpBackend } from './AcpBackend-C9LtzYSx.mjs';
|
|
8
|
+
import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-BcCVR-Wx.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-DhxxJFD0.cjs');
|
|
8
|
+
var index = require('./index-Dp1EYEyF.cjs');
|
|
9
|
+
var AcpBackend = require('./AcpBackend-DkvV2nhl.cjs');
|
|
10
|
+
var config = require('./config-Bidi0Yeq.cjs');
|
|
11
11
|
require('axios');
|
|
12
12
|
require('chalk');
|
|
13
13
|
require('node:util');
|
|
@@ -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-CrJj-daH.mjs';
|
|
7
|
+
import { A as AcpSessionManager } from './AcpSessionManager-B5rJcE82.mjs';
|
|
8
|
+
import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, r as registerKillSessionHandler } from './index-B87z2DOo.mjs';
|
|
9
9
|
import WebSocket from 'ws';
|
|
10
10
|
import * as ed from '@noble/ed25519';
|
|
11
11
|
import { sha512 } from '@noble/hashes/sha2.js';
|
|
@@ -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-DhxxJFD0.cjs');
|
|
9
|
+
var AcpSessionManager = require('./AcpSessionManager-gsp_-PGy.cjs');
|
|
10
|
+
var index = require('./index-Dp1EYEyF.cjs');
|
|
11
11
|
var WebSocket = require('ws');
|
|
12
12
|
var ed = require('@noble/ed25519');
|
|
13
13
|
var sha2_js = require('@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-
|
|
5
|
-
import { b as sendUserMessage, a as sessionWebUrl } from './index-
|
|
4
|
+
import { r as readPersistedSessions, c as configuration } from './types-CrJj-daH.mjs';
|
|
5
|
+
import { b as sendUserMessage, a as sessionWebUrl } from './index-B87z2DOo.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-
|
|
7
|
-
var index = require('./index-
|
|
6
|
+
var persistence = require('./types-DhxxJFD0.cjs');
|
|
7
|
+
var index = require('./index-Dp1EYEyF.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-
|
|
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-B87z2DOo.mjs';
|
|
5
|
+
import { l as logger } from './types-CrJj-daH.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-
|
|
7
|
-
var persistence = require('./types-
|
|
6
|
+
var index = require('./index-Dp1EYEyF.cjs');
|
|
7
|
+
var persistence = require('./types-DhxxJFD0.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.
|
|
32
|
+
var version = "0.2.99";
|
|
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.99",
|
|
146
|
+
"very-happy-tools-x64-darwin": "0.2.99",
|
|
147
|
+
"very-happy-tools-arm64-linux": "0.2.99",
|
|
148
|
+
"very-happy-tools-x64-linux": "0.2.99",
|
|
149
|
+
"very-happy-tools-arm64-win32": "0.2.99",
|
|
150
|
+
"very-happy-tools-x64-win32": "0.2.99"
|
|
151
151
|
};
|
|
152
152
|
var devDependencies = {
|
|
153
153
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -1101,7 +1101,9 @@ z$1.object({
|
|
|
1101
1101
|
*/
|
|
1102
1102
|
tmuxSessions: z$1.object({
|
|
1103
1103
|
rpcAvailable: z$1.boolean(),
|
|
1104
|
-
detectedAt: z$1.number()
|
|
1104
|
+
detectedAt: z$1.number(),
|
|
1105
|
+
/** B-282: `kill-terminal` honours `alsoAttached`. */
|
|
1106
|
+
killAttached: z$1.boolean().optional()
|
|
1105
1107
|
}).optional(),
|
|
1106
1108
|
/** Relay-owned CLI compatibility/update policy last checked by this daemon. */
|
|
1107
1109
|
cliUpdate: CliUpdateStateSchema.optional(),
|
|
@@ -11934,7 +11936,7 @@ class WebTerminalManager {
|
|
|
11934
11936
|
/** Permanently destroy the terminal: detach the pty AND kill the tmux
|
|
11935
11937
|
* session (so a local `tmux attach` won't find it either). Used when the
|
|
11936
11938
|
* user deletes the terminal from the sidebar. */
|
|
11937
|
-
killSession(terminalId) {
|
|
11939
|
+
killSession(terminalId, opts) {
|
|
11938
11940
|
const info = this.lastSeenInfo.get(terminalId) ?? this.listSessions().find((t) => t.id === terminalId);
|
|
11939
11941
|
const target = `=vh-${terminalId}:`;
|
|
11940
11942
|
const killed = spawnSync("tmux", tmuxArgs(["kill-session", "-t", target]), { stdio: "ignore", env: ptyEnv() });
|
|
@@ -11943,6 +11945,15 @@ class WebTerminalManager {
|
|
|
11943
11945
|
logger.debug(`[WEB TERMINAL] failed to verify tmux session removal ${target}`);
|
|
11944
11946
|
return false;
|
|
11945
11947
|
}
|
|
11948
|
+
if (opts?.alsoAttached && info?.attachTmux) {
|
|
11949
|
+
const matches = this.listUserTmuxSessions(Infinity).filter((s) => s.name === info.attachTmux);
|
|
11950
|
+
if (matches.length === 1) {
|
|
11951
|
+
spawnSync("tmux", tmuxArgs(["kill-session", "-t", matches[0].id]), { stdio: "ignore", timeout: TMUX_PROBE_TIMEOUT_MS, env: ptyEnv() });
|
|
11952
|
+
logger.info(`[WEB TERMINAL] killed attached user tmux session ${matches[0].id} (${info.attachTmux}) with ${terminalId}`);
|
|
11953
|
+
} else {
|
|
11954
|
+
logger.debug(`[WEB TERMINAL] alsoAttached: no unique session named ${info.attachTmux} (${matches.length} matches)`);
|
|
11955
|
+
}
|
|
11956
|
+
}
|
|
11946
11957
|
if (info) {
|
|
11947
11958
|
const mirror = pickMirrorForTerminal(readPersistedSessions(), terminalId);
|
|
11948
11959
|
this.recordClosed({
|
|
@@ -14198,11 +14209,11 @@ class ApiMachineClient {
|
|
|
14198
14209
|
return { type: "success" };
|
|
14199
14210
|
});
|
|
14200
14211
|
this.rpcHandlerManager.registerHandler("kill-terminal", async (params) => {
|
|
14201
|
-
const { terminalId } = params || {};
|
|
14212
|
+
const { terminalId, alsoAttached } = params || {};
|
|
14202
14213
|
if (typeof terminalId !== "string" || !terminalId) {
|
|
14203
14214
|
return { type: "error", errorMessage: "Terminal ID is required" };
|
|
14204
14215
|
}
|
|
14205
|
-
if (!this.webTerminal.killSession(terminalId)) {
|
|
14216
|
+
if (!this.webTerminal.killSession(terminalId, { alsoAttached: alsoAttached === true })) {
|
|
14206
14217
|
return { type: "error", errorMessage: "tmux session is still running" };
|
|
14207
14218
|
}
|
|
14208
14219
|
this.encTerminals.delete(terminalId);
|
|
@@ -14616,7 +14627,7 @@ class ApiMachineClient {
|
|
|
14616
14627
|
// web's `detectedAt >= startedAt` trust rule holds.
|
|
14617
14628
|
terminalRestore: { rpcAvailable: true, detectedAt: now },
|
|
14618
14629
|
// B-273 capability flag (same restamp discipline).
|
|
14619
|
-
tmuxSessions: { rpcAvailable: true, detectedAt: now },
|
|
14630
|
+
tmuxSessions: { rpcAvailable: true, detectedAt: now, killAttached: true },
|
|
14620
14631
|
// B-084: closed records survive daemon restarts (persisted
|
|
14621
14632
|
// in closed-terminals.json), so the connect snapshot ships
|
|
14622
14633
|
// them too — not just the incremental pushes.
|
|
@@ -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.99";
|
|
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.99",
|
|
168
|
+
"very-happy-tools-x64-darwin": "0.2.99",
|
|
169
|
+
"very-happy-tools-arm64-linux": "0.2.99",
|
|
170
|
+
"very-happy-tools-x64-linux": "0.2.99",
|
|
171
|
+
"very-happy-tools-arm64-win32": "0.2.99",
|
|
172
|
+
"very-happy-tools-x64-win32": "0.2.99"
|
|
173
173
|
};
|
|
174
174
|
var devDependencies = {
|
|
175
175
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -1123,7 +1123,9 @@ z.z.object({
|
|
|
1123
1123
|
*/
|
|
1124
1124
|
tmuxSessions: z.z.object({
|
|
1125
1125
|
rpcAvailable: z.z.boolean(),
|
|
1126
|
-
detectedAt: z.z.number()
|
|
1126
|
+
detectedAt: z.z.number(),
|
|
1127
|
+
/** B-282: `kill-terminal` honours `alsoAttached`. */
|
|
1128
|
+
killAttached: z.z.boolean().optional()
|
|
1127
1129
|
}).optional(),
|
|
1128
1130
|
/** Relay-owned CLI compatibility/update policy last checked by this daemon. */
|
|
1129
1131
|
cliUpdate: CliUpdateStateSchema.optional(),
|
|
@@ -1583,7 +1585,7 @@ class RpcHandlerManager {
|
|
|
1583
1585
|
}
|
|
1584
1586
|
}
|
|
1585
1587
|
|
|
1586
|
-
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-
|
|
1588
|
+
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-DhxxJFD0.cjs', document.baseURI).href))));
|
|
1587
1589
|
function projectPath() {
|
|
1588
1590
|
const path = path$1.resolve(__dirname$1, "..");
|
|
1589
1591
|
return path;
|
|
@@ -11956,7 +11958,7 @@ class WebTerminalManager {
|
|
|
11956
11958
|
/** Permanently destroy the terminal: detach the pty AND kill the tmux
|
|
11957
11959
|
* session (so a local `tmux attach` won't find it either). Used when the
|
|
11958
11960
|
* user deletes the terminal from the sidebar. */
|
|
11959
|
-
killSession(terminalId) {
|
|
11961
|
+
killSession(terminalId, opts) {
|
|
11960
11962
|
const info = this.lastSeenInfo.get(terminalId) ?? this.listSessions().find((t) => t.id === terminalId);
|
|
11961
11963
|
const target = `=vh-${terminalId}:`;
|
|
11962
11964
|
const killed = node_child_process.spawnSync("tmux", tmuxArgs(["kill-session", "-t", target]), { stdio: "ignore", env: ptyEnv() });
|
|
@@ -11965,6 +11967,15 @@ class WebTerminalManager {
|
|
|
11965
11967
|
logger.debug(`[WEB TERMINAL] failed to verify tmux session removal ${target}`);
|
|
11966
11968
|
return false;
|
|
11967
11969
|
}
|
|
11970
|
+
if (opts?.alsoAttached && info?.attachTmux) {
|
|
11971
|
+
const matches = this.listUserTmuxSessions(Infinity).filter((s) => s.name === info.attachTmux);
|
|
11972
|
+
if (matches.length === 1) {
|
|
11973
|
+
node_child_process.spawnSync("tmux", tmuxArgs(["kill-session", "-t", matches[0].id]), { stdio: "ignore", timeout: TMUX_PROBE_TIMEOUT_MS, env: ptyEnv() });
|
|
11974
|
+
logger.info(`[WEB TERMINAL] killed attached user tmux session ${matches[0].id} (${info.attachTmux}) with ${terminalId}`);
|
|
11975
|
+
} else {
|
|
11976
|
+
logger.debug(`[WEB TERMINAL] alsoAttached: no unique session named ${info.attachTmux} (${matches.length} matches)`);
|
|
11977
|
+
}
|
|
11978
|
+
}
|
|
11968
11979
|
if (info) {
|
|
11969
11980
|
const mirror = pickMirrorForTerminal(readPersistedSessions(), terminalId);
|
|
11970
11981
|
this.recordClosed({
|
|
@@ -14220,11 +14231,11 @@ class ApiMachineClient {
|
|
|
14220
14231
|
return { type: "success" };
|
|
14221
14232
|
});
|
|
14222
14233
|
this.rpcHandlerManager.registerHandler("kill-terminal", async (params) => {
|
|
14223
|
-
const { terminalId } = params || {};
|
|
14234
|
+
const { terminalId, alsoAttached } = params || {};
|
|
14224
14235
|
if (typeof terminalId !== "string" || !terminalId) {
|
|
14225
14236
|
return { type: "error", errorMessage: "Terminal ID is required" };
|
|
14226
14237
|
}
|
|
14227
|
-
if (!this.webTerminal.killSession(terminalId)) {
|
|
14238
|
+
if (!this.webTerminal.killSession(terminalId, { alsoAttached: alsoAttached === true })) {
|
|
14228
14239
|
return { type: "error", errorMessage: "tmux session is still running" };
|
|
14229
14240
|
}
|
|
14230
14241
|
this.encTerminals.delete(terminalId);
|
|
@@ -14638,7 +14649,7 @@ class ApiMachineClient {
|
|
|
14638
14649
|
// web's `detectedAt >= startedAt` trust rule holds.
|
|
14639
14650
|
terminalRestore: { rpcAvailable: true, detectedAt: now },
|
|
14640
14651
|
// B-273 capability flag (same restamp discipline).
|
|
14641
|
-
tmuxSessions: { rpcAvailable: true, detectedAt: now },
|
|
14652
|
+
tmuxSessions: { rpcAvailable: true, detectedAt: now, killAttached: true },
|
|
14642
14653
|
// B-084: closed records survive daemon restarts (persisted
|
|
14643
14654
|
// in closed-terminals.json), so the connect snapshot ships
|
|
14644
14655
|
// them too — not just the incremental pushes.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "very-happy-cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.99",
|
|
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.99",
|
|
117
|
+
"very-happy-tools-x64-darwin": "0.2.99",
|
|
118
|
+
"very-happy-tools-arm64-linux": "0.2.99",
|
|
119
|
+
"very-happy-tools-x64-linux": "0.2.99",
|
|
120
|
+
"very-happy-tools-arm64-win32": "0.2.99",
|
|
121
|
+
"very-happy-tools-x64-win32": "0.2.99"
|
|
122
122
|
},
|
|
123
123
|
"devDependencies": {
|
|
124
124
|
"@slopus/happy-wire": "workspace:*",
|