very-happy-cli 0.2.89 → 0.2.90
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-DuxcHPyn.mjs → AcpBackend-BV4wSnJ3.mjs} +1 -1
- package/dist/{AcpBackend-ClEvE-A-.cjs → AcpBackend-CnYZFdd0.cjs} +1 -1
- package/dist/{AcpSessionManager-DgbEf8FX.cjs → AcpSessionManager-BPBdrrME.cjs} +1 -1
- package/dist/{AcpSessionManager-CGrA8bTm.mjs → AcpSessionManager-Cyne6Rmg.mjs} +1 -1
- package/dist/{config-CdoGLla8.mjs → config-BEdyyciP.mjs} +2 -2
- package/dist/{config-BZNnPK1L.cjs → config-CgXitj0f.cjs} +2 -2
- package/dist/{index-DYDAFqAN.cjs → index-4YmVbx7j.cjs} +70 -24
- package/dist/{index-Bx-UTV3I.cjs → index-B1wTVXjt.cjs} +4 -4
- package/dist/{index-BP2wylez.mjs → index-Dfu5uvjk.mjs} +5 -5
- package/dist/{index-vCgb7QnZ.mjs → index-an09rejO.mjs} +67 -21
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{installTerminalHooks-C7JS6CBM.mjs → installTerminalHooks-C-OgZr5k.mjs} +2 -2
- package/dist/{installTerminalHooks-T4NE5fmC.cjs → installTerminalHooks-DDpVxk8-.cjs} +2 -2
- package/dist/lib.cjs +1 -1
- package/dist/lib.d.cts +8 -0
- package/dist/lib.d.mts +8 -0
- package/dist/lib.mjs +1 -1
- package/dist/{mcp-DgPg5mKa.cjs → mcp-B6Nq-RUL.cjs} +2 -2
- package/dist/{mcp-B3EgenZh.mjs → mcp-Du-N0qlK.mjs} +2 -2
- package/dist/{runGemini-xZnGj7jx.cjs → runGemini-ChG7cGMC.cjs} +4 -4
- package/dist/{runGemini-B3iv1QRL.mjs → runGemini-DBr_TiTL.mjs} +4 -4
- package/dist/{runOpenClaw-CmM4ZLYi.mjs → runOpenClaw-Cbde8t92.mjs} +3 -3
- package/dist/{runOpenClaw-6ZLPeYYZ.cjs → runOpenClaw-D2jtVgpC.cjs} +3 -3
- package/dist/{send-M2ax7UGy.mjs → send-BHliX59m.mjs} +2 -2
- package/dist/{send-S9ibMiAt.cjs → send-Bjen1TUE.cjs} +2 -2
- package/dist/{spawn-ie_kfwQe.cjs → spawn-CH1Rq-LW.cjs} +2 -2
- package/dist/{spawn-Dx_xnLlg.mjs → spawn-JxaPHAoP.mjs} +2 -2
- package/dist/{types-DLI6sss2.cjs → types-BNGeiP1C.cjs} +62 -44
- package/dist/{types-d_104eQF.mjs → types-DS3i_5LV.mjs} +60 -44
- 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-DS3i_5LV.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-BNGeiP1C.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-DS3i_5LV.mjs';
|
|
6
|
+
import { D as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './index-an09rejO.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-BNGeiP1C.cjs');
|
|
8
|
+
var index = require('./index-4YmVbx7j.cjs');
|
|
9
9
|
require('axios');
|
|
10
10
|
require('chalk');
|
|
11
11
|
require('node:util');
|
|
@@ -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-BNGeiP1C.cjs');
|
|
7
7
|
var spawn = require('cross-spawn');
|
|
8
8
|
var path = require('node:path');
|
|
9
9
|
var node_readline = require('node:readline');
|
|
@@ -2087,6 +2087,8 @@ class PermissionHandler {
|
|
|
2087
2087
|
setPermissionModeCallback;
|
|
2088
2088
|
modeChangeQueue = Promise.resolve();
|
|
2089
2089
|
deferredPermissionMode;
|
|
2090
|
+
/** Fired when an approval response (plan approval / approve-with-mode) moved the mode. */
|
|
2091
|
+
onModeChangedCallback;
|
|
2090
2092
|
constructor(session) {
|
|
2091
2093
|
this.session = session;
|
|
2092
2094
|
this.setupClientHandler();
|
|
@@ -2100,6 +2102,18 @@ class PermissionHandler {
|
|
|
2100
2102
|
handleModeChange(mode) {
|
|
2101
2103
|
this.permissionMode = mapToClaudeMode(mode);
|
|
2102
2104
|
}
|
|
2105
|
+
/** Current locally enforced mode (what canUseTool applies right now). */
|
|
2106
|
+
getPermissionMode() {
|
|
2107
|
+
return this.permissionMode;
|
|
2108
|
+
}
|
|
2109
|
+
/**
|
|
2110
|
+
* Observe mode transitions that originate inside the approval flow
|
|
2111
|
+
* (ExitPlanMode approval, approve-with-mode). Live/idle RPC changes and
|
|
2112
|
+
* queue-driven changes are owned by the launcher and do not fire this.
|
|
2113
|
+
*/
|
|
2114
|
+
setOnModeChanged(callback) {
|
|
2115
|
+
this.onModeChangedCallback = callback;
|
|
2116
|
+
}
|
|
2103
2117
|
/**
|
|
2104
2118
|
* Set callback to dynamically change permission mode on the active query.
|
|
2105
2119
|
* Called by claudeRemote after the Query object is created.
|
|
@@ -2188,9 +2202,10 @@ class PermissionHandler {
|
|
|
2188
2202
|
updatedInput: persistence.contentLogMetadata(response.updatedInput)
|
|
2189
2203
|
});
|
|
2190
2204
|
if (response.approved) {
|
|
2191
|
-
const newMode = response.mode && ["default", "acceptEdits", "bypassPermissions"].includes(response.mode) ? response.mode : "
|
|
2205
|
+
const newMode = response.mode && ["default", "acceptEdits", "bypassPermissions"].includes(response.mode) ? response.mode : "bypassPermissions";
|
|
2192
2206
|
persistence.logger.debug(`Plan approved - allowing ExitPlanMode with ${newMode} as the local follow-up mode`);
|
|
2193
2207
|
this.permissionMode = newMode;
|
|
2208
|
+
this.onModeChangedCallback?.(newMode);
|
|
2194
2209
|
pending.resolve({ behavior: "allow", updatedInput: pending.input || {} });
|
|
2195
2210
|
} else {
|
|
2196
2211
|
pending.resolve({ behavior: "deny", message: response.reason || "Plan rejected" });
|
|
@@ -2201,6 +2216,7 @@ class PermissionHandler {
|
|
|
2201
2216
|
if (!this.setPermissionModeCallback) throw new Error("permission mode updater unavailable");
|
|
2202
2217
|
await this.setPermissionModeCallback(response.mode);
|
|
2203
2218
|
this.permissionMode = response.mode;
|
|
2219
|
+
this.onModeChangedCallback?.(response.mode);
|
|
2204
2220
|
} catch (err) {
|
|
2205
2221
|
const reason = `Failed to switch permission mode: ${err instanceof Error ? err.message : String(err)}`;
|
|
2206
2222
|
pending.resolve({ behavior: "deny", message: reason });
|
|
@@ -3373,16 +3389,23 @@ async function claudeRemoteLauncher(session, onPermissionModeChange) {
|
|
|
3373
3389
|
});
|
|
3374
3390
|
session.client.rpcHandlerManager.registerHandler("switch", doSwitch);
|
|
3375
3391
|
let livePermissionModeHandler = null;
|
|
3392
|
+
let idlePermissionModeHandler = null;
|
|
3376
3393
|
session.client.rpcHandlerManager.registerHandler(
|
|
3377
3394
|
"set-permission-mode",
|
|
3378
3395
|
async (request) => {
|
|
3379
3396
|
const requestedMode = parseClaudePermissionMode(request?.mode);
|
|
3380
3397
|
if (!requestedMode) throw new Error("Invalid Claude permission mode");
|
|
3381
|
-
if (
|
|
3382
|
-
return { mode:
|
|
3398
|
+
if (livePermissionModeHandler) return { mode: await livePermissionModeHandler(requestedMode) };
|
|
3399
|
+
if (idlePermissionModeHandler) return { mode: idlePermissionModeHandler(requestedMode) };
|
|
3400
|
+
throw new Error("No active Claude query");
|
|
3383
3401
|
}
|
|
3384
3402
|
);
|
|
3385
3403
|
const permissionHandler = new PermissionHandler(session);
|
|
3404
|
+
idlePermissionModeHandler = (nextMode) => {
|
|
3405
|
+
permissionHandler.handleModeChange(nextMode);
|
|
3406
|
+
onPermissionModeChange?.(nextMode);
|
|
3407
|
+
return nextMode;
|
|
3408
|
+
};
|
|
3386
3409
|
permissionHandler.reset("Previous CLI process exited before responding");
|
|
3387
3410
|
const messageQueue = new OutgoingMessageQueue(
|
|
3388
3411
|
(logMessage) => session.client.sendClaudeSessionMessage(logMessage)
|
|
@@ -3532,6 +3555,19 @@ async function claudeRemoteLauncher(session, onPermissionModeChange) {
|
|
|
3532
3555
|
abortFuture = new Future();
|
|
3533
3556
|
let modeHash = null;
|
|
3534
3557
|
let mode = null;
|
|
3558
|
+
const commitPermissionMode = (nextMode) => {
|
|
3559
|
+
permissionHandler.handleModeChange(nextMode);
|
|
3560
|
+
if (mode) {
|
|
3561
|
+
mode = { ...mode, permissionMode: nextMode };
|
|
3562
|
+
modeHash = session.queue.modeHasher(mode);
|
|
3563
|
+
}
|
|
3564
|
+
onPermissionModeChange?.(nextMode);
|
|
3565
|
+
return nextMode;
|
|
3566
|
+
};
|
|
3567
|
+
idlePermissionModeHandler = commitPermissionMode;
|
|
3568
|
+
permissionHandler.setOnModeChanged((nextMode) => {
|
|
3569
|
+
commitPermissionMode(nextMode);
|
|
3570
|
+
});
|
|
3535
3571
|
try {
|
|
3536
3572
|
const attachmentDirectory = chatAttachmentDirectory(persistence.configuration.happyHomeDir, session.client.sessionId);
|
|
3537
3573
|
await persistence.ensurePrivateDirectory(attachmentDirectory);
|
|
@@ -6636,7 +6672,7 @@ function createMirrorManager(deps) {
|
|
|
6636
6672
|
let chain = Promise.resolve();
|
|
6637
6673
|
const isTerminalAlive = deps.isTerminalAlive ?? ((terminalId) => {
|
|
6638
6674
|
try {
|
|
6639
|
-
return node_child_process.spawnSync("tmux", ["has-session", "-t", `=vh-${terminalId}:`], { stdio: "ignore", timeout: 3e3 }).status === 0;
|
|
6675
|
+
return node_child_process.spawnSync("tmux", persistence.tmuxArgs(["has-session", "-t", `=vh-${terminalId}:`]), { stdio: "ignore", timeout: 3e3, env: persistence.scrubTmuxClientEnv({ ...process.env }) }).status === 0;
|
|
6640
6676
|
} catch {
|
|
6641
6677
|
return false;
|
|
6642
6678
|
}
|
|
@@ -8807,7 +8843,7 @@ const MAX_TITLE_CHARS = 60;
|
|
|
8807
8843
|
const GENERATION_TIMEOUT_MS = 3e4;
|
|
8808
8844
|
function resolveClaudeBinary() {
|
|
8809
8845
|
try {
|
|
8810
|
-
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-
|
|
8846
|
+
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-4YmVbx7j.cjs', document.baseURI).href)));
|
|
8811
8847
|
const utilsPath = path.resolve(path.join(persistence.projectPath(), "scripts", "claude_version_utils.cjs"));
|
|
8812
8848
|
const { getClaudeCliPath } = require$1(utilsPath);
|
|
8813
8849
|
const path$1 = getClaudeCliPath();
|
|
@@ -9264,7 +9300,10 @@ async function runClaude(credentials, options = {}) {
|
|
|
9264
9300
|
// a brand-new session cannot pick a PDF until after sending once.
|
|
9265
9301
|
attachmentKinds: [...CLAUDE_ATTACHMENT_KINDS],
|
|
9266
9302
|
queueCancellation: true,
|
|
9267
|
-
capabilities: ["claude-steer-v1", "claude-live-permission-v1"],
|
|
9303
|
+
capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2"],
|
|
9304
|
+
// Effective mode this process enforces. Kept current by
|
|
9305
|
+
// publishPermissionMode below; the web renders it instead of guessing.
|
|
9306
|
+
permissionMode: mapToClaudeMode(initialPermissionMode ?? "default"),
|
|
9268
9307
|
sandbox: sandboxConfig?.enabled ? sandboxConfig : null,
|
|
9269
9308
|
dangerouslySkipPermissions,
|
|
9270
9309
|
...forkedFromSessionId ? { parentSessionId: forkedFromSessionId } : {},
|
|
@@ -9501,6 +9540,14 @@ async function runClaude(credentials, options = {}) {
|
|
|
9501
9540
|
)
|
|
9502
9541
|
}));
|
|
9503
9542
|
let currentPermissionMode = initialPermissionMode;
|
|
9543
|
+
let publishedPermissionMode = mapToClaudeMode(initialPermissionMode ?? "default");
|
|
9544
|
+
const publishPermissionMode = (mode) => {
|
|
9545
|
+
currentPermissionMode = mode;
|
|
9546
|
+
const published = mapToClaudeMode(mode ?? "default");
|
|
9547
|
+
if (published === publishedPermissionMode) return;
|
|
9548
|
+
publishedPermissionMode = published;
|
|
9549
|
+
session.updateMetadata((meta) => ({ ...meta, permissionMode: published }));
|
|
9550
|
+
};
|
|
9504
9551
|
let currentModel = options.model ?? DEFAULT_CLAUDE_MODEL;
|
|
9505
9552
|
let currentFallbackModel = void 0;
|
|
9506
9553
|
let currentCustomSystemPrompt = void 0;
|
|
@@ -9509,7 +9556,6 @@ async function runClaude(credentials, options = {}) {
|
|
|
9509
9556
|
let currentDisallowedTools = withAssistantDenylist(void 0, isAssistantVariant);
|
|
9510
9557
|
let currentEffort = DEFAULT_CLAUDE_EFFORT;
|
|
9511
9558
|
const resetCurrentModeDefaults = () => {
|
|
9512
|
-
currentPermissionMode = initialPermissionMode;
|
|
9513
9559
|
currentModel = options.model ?? DEFAULT_CLAUDE_MODEL;
|
|
9514
9560
|
currentFallbackModel = void 0;
|
|
9515
9561
|
currentCustomSystemPrompt = void 0;
|
|
@@ -9553,7 +9599,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
9553
9599
|
message.meta.permissionMode,
|
|
9554
9600
|
sandboxEnabled
|
|
9555
9601
|
);
|
|
9556
|
-
|
|
9602
|
+
publishPermissionMode(messagePermissionMode);
|
|
9557
9603
|
const ignoredDefaultDowngrade = (previousPermissionMode === "bypassPermissions" || previousPermissionMode === "yolo") && message.meta.permissionMode === "default" && currentPermissionMode === previousPermissionMode;
|
|
9558
9604
|
if (ignoredDefaultDowngrade) {
|
|
9559
9605
|
persistence.logger.debug(`[loop] Ignoring permission mode downgrade from ${previousPermissionMode} to default`);
|
|
@@ -9810,8 +9856,8 @@ async function runClaude(credentials, options = {}) {
|
|
|
9810
9856
|
},
|
|
9811
9857
|
onAbort: resetCurrentModeDefaults,
|
|
9812
9858
|
onPermissionModeChange: (mode) => {
|
|
9813
|
-
|
|
9814
|
-
persistence.logger.debug(`[loop] Permission mode updated from
|
|
9859
|
+
publishPermissionMode(mode);
|
|
9860
|
+
persistence.logger.debug(`[loop] Permission mode updated from session RPC / approval to: ${mode}`);
|
|
9815
9861
|
},
|
|
9816
9862
|
mcpServers: {
|
|
9817
9863
|
"happy": {
|
|
@@ -10955,9 +11001,9 @@ function resolveLocalSignupBootstrap(configuredMode, configuredInviteCodes, gene
|
|
|
10955
11001
|
};
|
|
10956
11002
|
}
|
|
10957
11003
|
|
|
10958
|
-
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-
|
|
11004
|
+
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-4YmVbx7j.cjs', document.baseURI).href)));
|
|
10959
11005
|
const __dirname$1 = path.dirname(__filename$1);
|
|
10960
|
-
const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-
|
|
11006
|
+
const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-4YmVbx7j.cjs', document.baseURI).href)));
|
|
10961
11007
|
const PRISMA_QUERY_ENGINE_FILES = {
|
|
10962
11008
|
"arm64-darwin": "libquery_engine-darwin-arm64.dylib.node",
|
|
10963
11009
|
"x64-darwin": "libquery_engine-darwin.dylib.node",
|
|
@@ -13569,7 +13615,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13569
13615
|
process.exit(0);
|
|
13570
13616
|
} else if (subcommand === "install-terminal-hooks") {
|
|
13571
13617
|
try {
|
|
13572
|
-
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-
|
|
13618
|
+
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-DDpVxk8-.cjs'); });
|
|
13573
13619
|
const command = parseTerminalHooksArgs(args.slice(1));
|
|
13574
13620
|
if (command.action === "help") {
|
|
13575
13621
|
console.log(TERMINAL_HOOKS_HELP);
|
|
@@ -13586,7 +13632,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13586
13632
|
}
|
|
13587
13633
|
} else if (subcommand === "spawn") {
|
|
13588
13634
|
try {
|
|
13589
|
-
const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-
|
|
13635
|
+
const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-CH1Rq-LW.cjs'); });
|
|
13590
13636
|
await handleSpawnCommand(args.slice(1));
|
|
13591
13637
|
} catch (error) {
|
|
13592
13638
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -13598,7 +13644,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13598
13644
|
return;
|
|
13599
13645
|
} else if (subcommand === "send") {
|
|
13600
13646
|
try {
|
|
13601
|
-
const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-
|
|
13647
|
+
const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-Bjen1TUE.cjs'); });
|
|
13602
13648
|
await handleSendCommand(args.slice(1));
|
|
13603
13649
|
} catch (error) {
|
|
13604
13650
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -13704,9 +13750,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13704
13750
|
if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
|
|
13705
13751
|
const projectId = args[3];
|
|
13706
13752
|
try {
|
|
13707
|
-
const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-
|
|
13708
|
-
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-
|
|
13709
|
-
const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-
|
|
13753
|
+
const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-CgXitj0f.cjs'); });
|
|
13754
|
+
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-BNGeiP1C.cjs'); }).then(function (n) { return n.persistence; });
|
|
13755
|
+
const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-BNGeiP1C.cjs'); }).then(function (n) { return n.api; });
|
|
13710
13756
|
let userEmail = void 0;
|
|
13711
13757
|
try {
|
|
13712
13758
|
const credentials = await readCredentialsForConfiguredRelay2();
|
|
@@ -13737,7 +13783,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13737
13783
|
}
|
|
13738
13784
|
if (geminiSubcommand === "project" && args[2] === "get") {
|
|
13739
13785
|
try {
|
|
13740
|
-
const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-
|
|
13786
|
+
const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-CgXitj0f.cjs'); });
|
|
13741
13787
|
const config = readGeminiLocalConfig();
|
|
13742
13788
|
if (config.googleCloudProject) {
|
|
13743
13789
|
console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
|
|
@@ -13777,7 +13823,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13777
13823
|
process.exit(0);
|
|
13778
13824
|
}
|
|
13779
13825
|
try {
|
|
13780
|
-
const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-
|
|
13826
|
+
const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-ChG7cGMC.cjs'); });
|
|
13781
13827
|
let startedBy = void 0;
|
|
13782
13828
|
for (let i = 1; i < args.length; i++) {
|
|
13783
13829
|
if (args[i] === "--started-by") {
|
|
@@ -13799,7 +13845,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13799
13845
|
return;
|
|
13800
13846
|
} else if (subcommand === "acp") {
|
|
13801
13847
|
try {
|
|
13802
|
-
const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-
|
|
13848
|
+
const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-B1wTVXjt.cjs'); });
|
|
13803
13849
|
let startedBy = void 0;
|
|
13804
13850
|
let verbose = false;
|
|
13805
13851
|
const acpArgs = [];
|
|
@@ -13839,7 +13885,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13839
13885
|
return;
|
|
13840
13886
|
} else if (subcommand === "openclaw") {
|
|
13841
13887
|
try {
|
|
13842
|
-
const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-
|
|
13888
|
+
const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-D2jtVgpC.cjs'); });
|
|
13843
13889
|
let startedBy = void 0;
|
|
13844
13890
|
let verbose = false;
|
|
13845
13891
|
let gatewayUrl;
|
|
@@ -13890,7 +13936,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13890
13936
|
return;
|
|
13891
13937
|
} else if (subcommand === "mcp" && args.length === 1) {
|
|
13892
13938
|
try {
|
|
13893
|
-
const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-
|
|
13939
|
+
const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-B6Nq-RUL.cjs'); });
|
|
13894
13940
|
await handleMcpCommand();
|
|
13895
13941
|
} catch (error) {
|
|
13896
13942
|
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-CnYZFdd0.cjs');
|
|
4
|
+
var persistence = require('./types-BNGeiP1C.cjs');
|
|
5
|
+
var AcpSessionManager = require('./AcpSessionManager-BPBdrrME.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-4YmVbx7j.cjs');
|
|
9
9
|
require('node:child_process');
|
|
10
10
|
require('@agentclientprotocol/sdk');
|
|
11
11
|
require('axios');
|
|
@@ -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-BV4wSnJ3.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-BV4wSnJ3.mjs';
|
|
3
|
+
import { h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, p as projectPath } from './types-DS3i_5LV.mjs';
|
|
4
|
+
import { A as AcpSessionManager } from './AcpSessionManager-Cyne6Rmg.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-an09rejO.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, 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 getLocalHappyAgentCredentialPath, L as readLocalHappyAgentCredentials, N as decryptWithDataKey, O as decryptLegacy, P as extractCompleteLines, Q as decideBackfill, S as parseTerminalHookPayload, T as
|
|
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 getLocalHappyAgentCredentialPath, L as readLocalHappyAgentCredentials, N as decryptWithDataKey, O as decryptLegacy, P as extractCompleteLines, Q as decideBackfill, S as parseTerminalHookPayload, T as tmuxArgs, U as scrubTmuxClientEnv, V as decideMirrorBinding, W as persistSession, X as MIRROR_BACKFILL_LINES_DEFAULT, Y as mirrorLineKey, Z as mirrorLocalId, _ as detectResumeSupport, $ as detectCLIAvailability, a0 as acquireDaemonLock, a1 as summarizeSpawnSessionForLog, a2 as deletePersistedSessions, a3 as decrypt, a4 as writeDaemonState, A as ApiClient, a5 as fetchCliUpdateState, a6 as resolveCliUpdateCheckInterval, a7 as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, a8 as releaseDaemonLock, a9 as isValidSessionId, aa as listVhTerminals, ab as isValidTerminalId, ac as readVhTerminal, ad as sendToVhTerminal, h as connectionState, ae as startOfflineReconnection, af as clearCredentials, ag as clearMachineId, k as ensurePrivateDirectorySync, w as writePrivateFileSync, ah as SandboxConfigSchema, b as createEnvelope, ai as CodexAppServerClient, aj as getLatestDaemonLog } from './types-DS3i_5LV.mjs';
|
|
5
5
|
import spawn$1, { spawn } from 'cross-spawn';
|
|
6
6
|
import path, { join, resolve, basename, isAbsolute, normalize, sep, dirname } from 'node:path';
|
|
7
7
|
import { createInterface } from 'node:readline';
|
|
@@ -2065,6 +2065,8 @@ class PermissionHandler {
|
|
|
2065
2065
|
setPermissionModeCallback;
|
|
2066
2066
|
modeChangeQueue = Promise.resolve();
|
|
2067
2067
|
deferredPermissionMode;
|
|
2068
|
+
/** Fired when an approval response (plan approval / approve-with-mode) moved the mode. */
|
|
2069
|
+
onModeChangedCallback;
|
|
2068
2070
|
constructor(session) {
|
|
2069
2071
|
this.session = session;
|
|
2070
2072
|
this.setupClientHandler();
|
|
@@ -2078,6 +2080,18 @@ class PermissionHandler {
|
|
|
2078
2080
|
handleModeChange(mode) {
|
|
2079
2081
|
this.permissionMode = mapToClaudeMode(mode);
|
|
2080
2082
|
}
|
|
2083
|
+
/** Current locally enforced mode (what canUseTool applies right now). */
|
|
2084
|
+
getPermissionMode() {
|
|
2085
|
+
return this.permissionMode;
|
|
2086
|
+
}
|
|
2087
|
+
/**
|
|
2088
|
+
* Observe mode transitions that originate inside the approval flow
|
|
2089
|
+
* (ExitPlanMode approval, approve-with-mode). Live/idle RPC changes and
|
|
2090
|
+
* queue-driven changes are owned by the launcher and do not fire this.
|
|
2091
|
+
*/
|
|
2092
|
+
setOnModeChanged(callback) {
|
|
2093
|
+
this.onModeChangedCallback = callback;
|
|
2094
|
+
}
|
|
2081
2095
|
/**
|
|
2082
2096
|
* Set callback to dynamically change permission mode on the active query.
|
|
2083
2097
|
* Called by claudeRemote after the Query object is created.
|
|
@@ -2166,9 +2180,10 @@ class PermissionHandler {
|
|
|
2166
2180
|
updatedInput: contentLogMetadata(response.updatedInput)
|
|
2167
2181
|
});
|
|
2168
2182
|
if (response.approved) {
|
|
2169
|
-
const newMode = response.mode && ["default", "acceptEdits", "bypassPermissions"].includes(response.mode) ? response.mode : "
|
|
2183
|
+
const newMode = response.mode && ["default", "acceptEdits", "bypassPermissions"].includes(response.mode) ? response.mode : "bypassPermissions";
|
|
2170
2184
|
logger.debug(`Plan approved - allowing ExitPlanMode with ${newMode} as the local follow-up mode`);
|
|
2171
2185
|
this.permissionMode = newMode;
|
|
2186
|
+
this.onModeChangedCallback?.(newMode);
|
|
2172
2187
|
pending.resolve({ behavior: "allow", updatedInput: pending.input || {} });
|
|
2173
2188
|
} else {
|
|
2174
2189
|
pending.resolve({ behavior: "deny", message: response.reason || "Plan rejected" });
|
|
@@ -2179,6 +2194,7 @@ class PermissionHandler {
|
|
|
2179
2194
|
if (!this.setPermissionModeCallback) throw new Error("permission mode updater unavailable");
|
|
2180
2195
|
await this.setPermissionModeCallback(response.mode);
|
|
2181
2196
|
this.permissionMode = response.mode;
|
|
2197
|
+
this.onModeChangedCallback?.(response.mode);
|
|
2182
2198
|
} catch (err) {
|
|
2183
2199
|
const reason = `Failed to switch permission mode: ${err instanceof Error ? err.message : String(err)}`;
|
|
2184
2200
|
pending.resolve({ behavior: "deny", message: reason });
|
|
@@ -3351,16 +3367,23 @@ async function claudeRemoteLauncher(session, onPermissionModeChange) {
|
|
|
3351
3367
|
});
|
|
3352
3368
|
session.client.rpcHandlerManager.registerHandler("switch", doSwitch);
|
|
3353
3369
|
let livePermissionModeHandler = null;
|
|
3370
|
+
let idlePermissionModeHandler = null;
|
|
3354
3371
|
session.client.rpcHandlerManager.registerHandler(
|
|
3355
3372
|
"set-permission-mode",
|
|
3356
3373
|
async (request) => {
|
|
3357
3374
|
const requestedMode = parseClaudePermissionMode(request?.mode);
|
|
3358
3375
|
if (!requestedMode) throw new Error("Invalid Claude permission mode");
|
|
3359
|
-
if (
|
|
3360
|
-
return { mode:
|
|
3376
|
+
if (livePermissionModeHandler) return { mode: await livePermissionModeHandler(requestedMode) };
|
|
3377
|
+
if (idlePermissionModeHandler) return { mode: idlePermissionModeHandler(requestedMode) };
|
|
3378
|
+
throw new Error("No active Claude query");
|
|
3361
3379
|
}
|
|
3362
3380
|
);
|
|
3363
3381
|
const permissionHandler = new PermissionHandler(session);
|
|
3382
|
+
idlePermissionModeHandler = (nextMode) => {
|
|
3383
|
+
permissionHandler.handleModeChange(nextMode);
|
|
3384
|
+
onPermissionModeChange?.(nextMode);
|
|
3385
|
+
return nextMode;
|
|
3386
|
+
};
|
|
3364
3387
|
permissionHandler.reset("Previous CLI process exited before responding");
|
|
3365
3388
|
const messageQueue = new OutgoingMessageQueue(
|
|
3366
3389
|
(logMessage) => session.client.sendClaudeSessionMessage(logMessage)
|
|
@@ -3510,6 +3533,19 @@ async function claudeRemoteLauncher(session, onPermissionModeChange) {
|
|
|
3510
3533
|
abortFuture = new Future();
|
|
3511
3534
|
let modeHash = null;
|
|
3512
3535
|
let mode = null;
|
|
3536
|
+
const commitPermissionMode = (nextMode) => {
|
|
3537
|
+
permissionHandler.handleModeChange(nextMode);
|
|
3538
|
+
if (mode) {
|
|
3539
|
+
mode = { ...mode, permissionMode: nextMode };
|
|
3540
|
+
modeHash = session.queue.modeHasher(mode);
|
|
3541
|
+
}
|
|
3542
|
+
onPermissionModeChange?.(nextMode);
|
|
3543
|
+
return nextMode;
|
|
3544
|
+
};
|
|
3545
|
+
idlePermissionModeHandler = commitPermissionMode;
|
|
3546
|
+
permissionHandler.setOnModeChanged((nextMode) => {
|
|
3547
|
+
commitPermissionMode(nextMode);
|
|
3548
|
+
});
|
|
3513
3549
|
try {
|
|
3514
3550
|
const attachmentDirectory = chatAttachmentDirectory(configuration.happyHomeDir, session.client.sessionId);
|
|
3515
3551
|
await ensurePrivateDirectory(attachmentDirectory);
|
|
@@ -6614,7 +6650,7 @@ function createMirrorManager(deps) {
|
|
|
6614
6650
|
let chain = Promise.resolve();
|
|
6615
6651
|
const isTerminalAlive = deps.isTerminalAlive ?? ((terminalId) => {
|
|
6616
6652
|
try {
|
|
6617
|
-
return spawnSync("tmux", ["has-session", "-t", `=vh-${terminalId}:`], { stdio: "ignore", timeout: 3e3 }).status === 0;
|
|
6653
|
+
return spawnSync("tmux", tmuxArgs(["has-session", "-t", `=vh-${terminalId}:`]), { stdio: "ignore", timeout: 3e3, env: scrubTmuxClientEnv({ ...process.env }) }).status === 0;
|
|
6618
6654
|
} catch {
|
|
6619
6655
|
return false;
|
|
6620
6656
|
}
|
|
@@ -9242,7 +9278,10 @@ async function runClaude(credentials, options = {}) {
|
|
|
9242
9278
|
// a brand-new session cannot pick a PDF until after sending once.
|
|
9243
9279
|
attachmentKinds: [...CLAUDE_ATTACHMENT_KINDS],
|
|
9244
9280
|
queueCancellation: true,
|
|
9245
|
-
capabilities: ["claude-steer-v1", "claude-live-permission-v1"],
|
|
9281
|
+
capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2"],
|
|
9282
|
+
// Effective mode this process enforces. Kept current by
|
|
9283
|
+
// publishPermissionMode below; the web renders it instead of guessing.
|
|
9284
|
+
permissionMode: mapToClaudeMode(initialPermissionMode ?? "default"),
|
|
9246
9285
|
sandbox: sandboxConfig?.enabled ? sandboxConfig : null,
|
|
9247
9286
|
dangerouslySkipPermissions,
|
|
9248
9287
|
...forkedFromSessionId ? { parentSessionId: forkedFromSessionId } : {},
|
|
@@ -9479,6 +9518,14 @@ async function runClaude(credentials, options = {}) {
|
|
|
9479
9518
|
)
|
|
9480
9519
|
}));
|
|
9481
9520
|
let currentPermissionMode = initialPermissionMode;
|
|
9521
|
+
let publishedPermissionMode = mapToClaudeMode(initialPermissionMode ?? "default");
|
|
9522
|
+
const publishPermissionMode = (mode) => {
|
|
9523
|
+
currentPermissionMode = mode;
|
|
9524
|
+
const published = mapToClaudeMode(mode ?? "default");
|
|
9525
|
+
if (published === publishedPermissionMode) return;
|
|
9526
|
+
publishedPermissionMode = published;
|
|
9527
|
+
session.updateMetadata((meta) => ({ ...meta, permissionMode: published }));
|
|
9528
|
+
};
|
|
9482
9529
|
let currentModel = options.model ?? DEFAULT_CLAUDE_MODEL;
|
|
9483
9530
|
let currentFallbackModel = void 0;
|
|
9484
9531
|
let currentCustomSystemPrompt = void 0;
|
|
@@ -9487,7 +9534,6 @@ async function runClaude(credentials, options = {}) {
|
|
|
9487
9534
|
let currentDisallowedTools = withAssistantDenylist(void 0, isAssistantVariant);
|
|
9488
9535
|
let currentEffort = DEFAULT_CLAUDE_EFFORT;
|
|
9489
9536
|
const resetCurrentModeDefaults = () => {
|
|
9490
|
-
currentPermissionMode = initialPermissionMode;
|
|
9491
9537
|
currentModel = options.model ?? DEFAULT_CLAUDE_MODEL;
|
|
9492
9538
|
currentFallbackModel = void 0;
|
|
9493
9539
|
currentCustomSystemPrompt = void 0;
|
|
@@ -9531,7 +9577,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
9531
9577
|
message.meta.permissionMode,
|
|
9532
9578
|
sandboxEnabled
|
|
9533
9579
|
);
|
|
9534
|
-
|
|
9580
|
+
publishPermissionMode(messagePermissionMode);
|
|
9535
9581
|
const ignoredDefaultDowngrade = (previousPermissionMode === "bypassPermissions" || previousPermissionMode === "yolo") && message.meta.permissionMode === "default" && currentPermissionMode === previousPermissionMode;
|
|
9536
9582
|
if (ignoredDefaultDowngrade) {
|
|
9537
9583
|
logger.debug(`[loop] Ignoring permission mode downgrade from ${previousPermissionMode} to default`);
|
|
@@ -9788,8 +9834,8 @@ async function runClaude(credentials, options = {}) {
|
|
|
9788
9834
|
},
|
|
9789
9835
|
onAbort: resetCurrentModeDefaults,
|
|
9790
9836
|
onPermissionModeChange: (mode) => {
|
|
9791
|
-
|
|
9792
|
-
logger.debug(`[loop] Permission mode updated from
|
|
9837
|
+
publishPermissionMode(mode);
|
|
9838
|
+
logger.debug(`[loop] Permission mode updated from session RPC / approval to: ${mode}`);
|
|
9793
9839
|
},
|
|
9794
9840
|
mcpServers: {
|
|
9795
9841
|
"happy": {
|
|
@@ -13547,7 +13593,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13547
13593
|
process.exit(0);
|
|
13548
13594
|
} else if (subcommand === "install-terminal-hooks") {
|
|
13549
13595
|
try {
|
|
13550
|
-
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-
|
|
13596
|
+
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-C-OgZr5k.mjs');
|
|
13551
13597
|
const command = parseTerminalHooksArgs(args.slice(1));
|
|
13552
13598
|
if (command.action === "help") {
|
|
13553
13599
|
console.log(TERMINAL_HOOKS_HELP);
|
|
@@ -13564,7 +13610,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13564
13610
|
}
|
|
13565
13611
|
} else if (subcommand === "spawn") {
|
|
13566
13612
|
try {
|
|
13567
|
-
const { handleSpawnCommand } = await import('./spawn-
|
|
13613
|
+
const { handleSpawnCommand } = await import('./spawn-JxaPHAoP.mjs');
|
|
13568
13614
|
await handleSpawnCommand(args.slice(1));
|
|
13569
13615
|
} catch (error) {
|
|
13570
13616
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -13576,7 +13622,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13576
13622
|
return;
|
|
13577
13623
|
} else if (subcommand === "send") {
|
|
13578
13624
|
try {
|
|
13579
|
-
const { handleSendCommand } = await import('./send-
|
|
13625
|
+
const { handleSendCommand } = await import('./send-BHliX59m.mjs');
|
|
13580
13626
|
await handleSendCommand(args.slice(1));
|
|
13581
13627
|
} catch (error) {
|
|
13582
13628
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -13682,9 +13728,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13682
13728
|
if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
|
|
13683
13729
|
const projectId = args[3];
|
|
13684
13730
|
try {
|
|
13685
|
-
const { saveGoogleCloudProjectToConfig } = await import('./config-
|
|
13686
|
-
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-
|
|
13687
|
-
const { ApiClient: ApiClient2 } = await import('./types-
|
|
13731
|
+
const { saveGoogleCloudProjectToConfig } = await import('./config-BEdyyciP.mjs');
|
|
13732
|
+
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-DS3i_5LV.mjs').then(function (n) { return n.ak; });
|
|
13733
|
+
const { ApiClient: ApiClient2 } = await import('./types-DS3i_5LV.mjs').then(function (n) { return n.al; });
|
|
13688
13734
|
let userEmail = void 0;
|
|
13689
13735
|
try {
|
|
13690
13736
|
const credentials = await readCredentialsForConfiguredRelay2();
|
|
@@ -13715,7 +13761,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13715
13761
|
}
|
|
13716
13762
|
if (geminiSubcommand === "project" && args[2] === "get") {
|
|
13717
13763
|
try {
|
|
13718
|
-
const { readGeminiLocalConfig } = await import('./config-
|
|
13764
|
+
const { readGeminiLocalConfig } = await import('./config-BEdyyciP.mjs');
|
|
13719
13765
|
const config = readGeminiLocalConfig();
|
|
13720
13766
|
if (config.googleCloudProject) {
|
|
13721
13767
|
console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
|
|
@@ -13755,7 +13801,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13755
13801
|
process.exit(0);
|
|
13756
13802
|
}
|
|
13757
13803
|
try {
|
|
13758
|
-
const { runGemini } = await import('./runGemini-
|
|
13804
|
+
const { runGemini } = await import('./runGemini-DBr_TiTL.mjs');
|
|
13759
13805
|
let startedBy = void 0;
|
|
13760
13806
|
for (let i = 1; i < args.length; i++) {
|
|
13761
13807
|
if (args[i] === "--started-by") {
|
|
@@ -13777,7 +13823,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13777
13823
|
return;
|
|
13778
13824
|
} else if (subcommand === "acp") {
|
|
13779
13825
|
try {
|
|
13780
|
-
const { runAcp, resolveAcpAgentConfig } = await import('./index-
|
|
13826
|
+
const { runAcp, resolveAcpAgentConfig } = await import('./index-Dfu5uvjk.mjs');
|
|
13781
13827
|
let startedBy = void 0;
|
|
13782
13828
|
let verbose = false;
|
|
13783
13829
|
const acpArgs = [];
|
|
@@ -13817,7 +13863,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13817
13863
|
return;
|
|
13818
13864
|
} else if (subcommand === "openclaw") {
|
|
13819
13865
|
try {
|
|
13820
|
-
const { runOpenClaw } = await import('./runOpenClaw-
|
|
13866
|
+
const { runOpenClaw } = await import('./runOpenClaw-Cbde8t92.mjs');
|
|
13821
13867
|
let startedBy = void 0;
|
|
13822
13868
|
let verbose = false;
|
|
13823
13869
|
let gatewayUrl;
|
|
@@ -13868,7 +13914,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
13868
13914
|
return;
|
|
13869
13915
|
} else if (subcommand === "mcp" && args.length === 1) {
|
|
13870
13916
|
try {
|
|
13871
|
-
const { handleMcpCommand } = await import('./mcp-
|
|
13917
|
+
const { handleMcpCommand } = await import('./mcp-Du-N0qlK.mjs');
|
|
13872
13918
|
await handleMcpCommand();
|
|
13873
13919
|
} catch (error) {
|
|
13874
13920
|
process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
|
package/dist/index.cjs
CHANGED
package/dist/index.mjs
CHANGED