very-happy-cli 0.2.105 → 0.2.106
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-CbMPn2Sx.cjs → AcpBackend-DMmvLNNM.cjs} +1 -1
- package/dist/{AcpBackend-zefm5lwc.mjs → AcpBackend-Ux5FD_6F.mjs} +1 -1
- package/dist/{AcpSessionManager-DFeZAfz4.mjs → AcpSessionManager-C1hoU_rK.mjs} +1 -1
- package/dist/{AcpSessionManager-lM9HBlOx.cjs → AcpSessionManager-RYkxYWDn.cjs} +1 -1
- package/dist/{config-CRCUgh2E.mjs → config-DAb5saOC.mjs} +2 -2
- package/dist/{config-CYpWD6Tc.cjs → config-Dkn5KcXp.cjs} +2 -2
- package/dist/{index-Cietz-nU.cjs → index-BLW-smJu.cjs} +29 -17
- package/dist/{index-NiUS5t0N.mjs → index-CgWdwkhB.mjs} +25 -13
- package/dist/{index-_t9O9dGp.mjs → index-D2ZzPm58.mjs} +5 -5
- package/dist/{index-Bmv3lZU7.cjs → index-D48mWUTN.cjs} +2 -2
- package/dist/{index-neppKLsI.mjs → index-DCpgRGWy.mjs} +2 -2
- package/dist/{index-m9BL5ZWn.cjs → index-Do3JnAi7.cjs} +4 -4
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{installTerminalHooks-BMDcB8nc.cjs → installTerminalHooks-9rn15uP8.cjs} +2 -2
- package/dist/{installTerminalHooks-Czv6GUOw.mjs → installTerminalHooks-l1B-nbWa.mjs} +2 -2
- package/dist/lib.cjs +1 -1
- package/dist/lib.d.cts +5 -0
- package/dist/lib.d.mts +5 -0
- package/dist/lib.mjs +1 -1
- package/dist/{mcp-Cn4icOYK.cjs → mcp-C3zpbx-m.cjs} +2 -2
- package/dist/{mcp-Bt4btDMD.mjs → mcp-ZvHzv_lJ.mjs} +2 -2
- package/dist/{runGemini-wMF-U7zR.mjs → runGemini-0QqaFN1l.mjs} +4 -4
- package/dist/{runGemini-5Rgckz_I.cjs → runGemini-q20IdxQV.cjs} +4 -4
- package/dist/{runOpenClaw-Za9vMsSB.mjs → runOpenClaw-C6Z6MLHq.mjs} +3 -3
- package/dist/{runOpenClaw-DnbKLi5s.cjs → runOpenClaw-CtWkyvDJ.cjs} +3 -3
- package/dist/{send-v6085rvq.cjs → send-B8YQyV3D.cjs} +2 -2
- package/dist/{send-DliNFuy7.mjs → send-DEhUWg8v.mjs} +2 -2
- package/dist/{spawn-D3D-H-VF.mjs → spawn-BzbPyTHU.mjs} +2 -2
- package/dist/{spawn-DUU9rhJa.cjs → spawn-ChmlP1Z_.cjs} +2 -2
- package/dist/{types-Cq7yzNWv.cjs → types-C8-WODFE.cjs} +15 -10
- package/dist/{types-CFIlcwe9.mjs → types-lSeHEzPR.mjs} +14 -9
- package/package.json +7 -7
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var node_child_process = require('node:child_process');
|
|
4
4
|
var sdk = require('@agentclientprotocol/sdk');
|
|
5
5
|
var node_crypto = require('node:crypto');
|
|
6
|
-
var persistence = require('./types-
|
|
6
|
+
var persistence = require('./types-C8-WODFE.cjs');
|
|
7
7
|
|
|
8
8
|
const DEFAULT_TIMEOUTS = {
|
|
9
9
|
/** Default initialization timeout: 60 seconds */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
2
|
import { ndJsonStream, ClientSideConnection } from '@agentclientprotocol/sdk';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
|
-
import { l as logger, d as contentLogMetadata, e as errorLogMetadata, f as packageJson, g as delay } from './types-
|
|
4
|
+
import { l as logger, d as contentLogMetadata, e as errorLogMetadata, f as packageJson, g as delay } from './types-lSeHEzPR.mjs';
|
|
5
5
|
|
|
6
6
|
const DEFAULT_TIMEOUTS = {
|
|
7
7
|
/** 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-lSeHEzPR.mjs';
|
|
6
|
+
import { D as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './index-CgWdwkhB.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-C8-WODFE.cjs');
|
|
8
|
+
var index = require('./index-BLW-smJu.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-C8-WODFE.cjs');
|
|
7
7
|
var spawn = require('cross-spawn');
|
|
8
8
|
var path = require('node:path');
|
|
9
9
|
var node_readline = require('node:readline');
|
|
@@ -6913,7 +6913,7 @@ function parseJsonObject(text) {
|
|
|
6913
6913
|
return null;
|
|
6914
6914
|
}
|
|
6915
6915
|
}
|
|
6916
|
-
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-
|
|
6916
|
+
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-BLW-smJu.cjs', document.baseURI).href))).resolve(s)) {
|
|
6917
6917
|
const platformArch = `${platform}-${arch}`;
|
|
6918
6918
|
const candidates = [
|
|
6919
6919
|
`@anthropic-ai/claude-agent-sdk-${platformArch}/claude`,
|
|
@@ -7993,6 +7993,12 @@ async function claimSessionOrExit(happySessionId, options) {
|
|
|
7993
7993
|
}
|
|
7994
7994
|
|
|
7995
7995
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
7996
|
+
function sanitizeImportTitle(value) {
|
|
7997
|
+
if (typeof value !== "string") return null;
|
|
7998
|
+
const collapsed = value.replace(/[\u0000-\u001f\u007f]/g, " ").replace(/\s+/g, " ").trim();
|
|
7999
|
+
if (collapsed.length === 0) return null;
|
|
8000
|
+
return collapsed.length > 200 ? `${collapsed.slice(0, 199)}\u2026` : collapsed;
|
|
8001
|
+
}
|
|
7996
8002
|
const hostSuffix = process.env.HAPPY_VARIANT === "dev" ? "-dev" : "";
|
|
7997
8003
|
const initialMachineMetadata = {
|
|
7998
8004
|
host: os$1.hostname() + hostSuffix,
|
|
@@ -8331,6 +8337,10 @@ async function startDaemon() {
|
|
|
8331
8337
|
if (options.importedFromClaudeSessionId && UUID_RE.test(options.importedFromClaudeSessionId)) {
|
|
8332
8338
|
extraEnv.HAPPY_IMPORTED_FROM_CLAUDE_SESSION_ID = options.importedFromClaudeSessionId;
|
|
8333
8339
|
}
|
|
8340
|
+
const importTitle = sanitizeImportTitle(options.importTitle);
|
|
8341
|
+
if (importTitle) {
|
|
8342
|
+
extraEnv.HAPPY_IMPORT_TITLE = importTitle;
|
|
8343
|
+
}
|
|
8334
8344
|
if (options.resumeCodexThreadId) {
|
|
8335
8345
|
extraEnv.HAPPY_FORK_CODEX_THREAD_ID = options.resumeCodexThreadId;
|
|
8336
8346
|
}
|
|
@@ -10192,7 +10202,7 @@ function registerSideQuestionHandler(rpc, deps) {
|
|
|
10192
10202
|
const retainMs = deps.retainMs ?? SIDE_QUESTION_RETAIN_MS;
|
|
10193
10203
|
const maxRunMs = deps.maxRunMs ?? SIDE_QUESTION_MAX_RUN_MS;
|
|
10194
10204
|
const run = deps.run ?? (async (input) => {
|
|
10195
|
-
const { query } = await Promise.resolve().then(function () { return require('./index-
|
|
10205
|
+
const { query } = await Promise.resolve().then(function () { return require('./index-D48mWUTN.cjs'); });
|
|
10196
10206
|
return runSideQuestion(query, input);
|
|
10197
10207
|
});
|
|
10198
10208
|
const slots = /* @__PURE__ */ new Map();
|
|
@@ -10294,7 +10304,7 @@ const MAX_TITLE_CHARS = 60;
|
|
|
10294
10304
|
const GENERATION_TIMEOUT_MS = 3e4;
|
|
10295
10305
|
function resolveClaudeBinary() {
|
|
10296
10306
|
try {
|
|
10297
|
-
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-
|
|
10307
|
+
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-BLW-smJu.cjs', document.baseURI).href)));
|
|
10298
10308
|
const utilsPath = path.resolve(path.join(persistence.projectPath(), "scripts", "claude_version_utils.cjs"));
|
|
10299
10309
|
const { getClaudeCliPath } = require$1(utilsPath);
|
|
10300
10310
|
const path$1 = getClaudeCliPath();
|
|
@@ -10731,6 +10741,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
10731
10741
|
const forkedFromSessionId = process.env.HAPPY_FORKED_FROM_SESSION_ID;
|
|
10732
10742
|
const forkedFromMessageId = process.env.HAPPY_FORKED_FROM_MESSAGE_ID;
|
|
10733
10743
|
const importedFromClaudeSessionId = process.env.HAPPY_IMPORTED_FROM_CLAUDE_SESSION_ID;
|
|
10744
|
+
const importTitle = process.env.HAPPY_IMPORT_TITLE;
|
|
10734
10745
|
let metadata = {
|
|
10735
10746
|
path: workingDirectory,
|
|
10736
10747
|
host: os.hostname(),
|
|
@@ -10761,6 +10772,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
10761
10772
|
...forkedFromSessionId ? { parentSessionId: forkedFromSessionId } : {},
|
|
10762
10773
|
...forkedFromMessageId ? { forkedFromMessageId } : {},
|
|
10763
10774
|
...importedFromClaudeSessionId ? { importedFromClaudeSessionId } : {},
|
|
10775
|
+
...importTitle ? { summary: { text: importTitle, updatedAt: Date.now() } } : {},
|
|
10764
10776
|
...isAssistantVariant ? { variant: "assistant" } : {},
|
|
10765
10777
|
// B-091: sessions the assistant dispatched (daemon spawn RPC exports
|
|
10766
10778
|
// HAPPY_SPAWNED_BY, B-069) are born with the 'assistant' tag so every
|
|
@@ -12492,9 +12504,9 @@ function resolveLocalSignupBootstrap(configuredMode, configuredInviteCodes, gene
|
|
|
12492
12504
|
};
|
|
12493
12505
|
}
|
|
12494
12506
|
|
|
12495
|
-
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-
|
|
12507
|
+
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-BLW-smJu.cjs', document.baseURI).href)));
|
|
12496
12508
|
const __dirname$1 = path.dirname(__filename$1);
|
|
12497
|
-
const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-
|
|
12509
|
+
const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-BLW-smJu.cjs', document.baseURI).href)));
|
|
12498
12510
|
const PRISMA_QUERY_ENGINE_FILES = {
|
|
12499
12511
|
"arm64-darwin": "libquery_engine-darwin-arm64.dylib.node",
|
|
12500
12512
|
"x64-darwin": "libquery_engine-darwin.dylib.node",
|
|
@@ -15118,7 +15130,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15118
15130
|
process.exit(0);
|
|
15119
15131
|
} else if (subcommand === "install-terminal-hooks") {
|
|
15120
15132
|
try {
|
|
15121
|
-
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-
|
|
15133
|
+
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-9rn15uP8.cjs'); });
|
|
15122
15134
|
const command = parseTerminalHooksArgs(args.slice(1));
|
|
15123
15135
|
if (command.action === "help") {
|
|
15124
15136
|
console.log(TERMINAL_HOOKS_HELP);
|
|
@@ -15135,7 +15147,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15135
15147
|
}
|
|
15136
15148
|
} else if (subcommand === "spawn") {
|
|
15137
15149
|
try {
|
|
15138
|
-
const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-
|
|
15150
|
+
const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-ChmlP1Z_.cjs'); });
|
|
15139
15151
|
await handleSpawnCommand(args.slice(1));
|
|
15140
15152
|
} catch (error) {
|
|
15141
15153
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -15147,7 +15159,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15147
15159
|
return;
|
|
15148
15160
|
} else if (subcommand === "send") {
|
|
15149
15161
|
try {
|
|
15150
|
-
const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-
|
|
15162
|
+
const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-B8YQyV3D.cjs'); });
|
|
15151
15163
|
await handleSendCommand(args.slice(1));
|
|
15152
15164
|
} catch (error) {
|
|
15153
15165
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -15253,9 +15265,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15253
15265
|
if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
|
|
15254
15266
|
const projectId = args[3];
|
|
15255
15267
|
try {
|
|
15256
|
-
const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-
|
|
15257
|
-
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-
|
|
15258
|
-
const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-
|
|
15268
|
+
const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-Dkn5KcXp.cjs'); });
|
|
15269
|
+
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-C8-WODFE.cjs'); }).then(function (n) { return n.persistence; });
|
|
15270
|
+
const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-C8-WODFE.cjs'); }).then(function (n) { return n.api; });
|
|
15259
15271
|
let userEmail = void 0;
|
|
15260
15272
|
try {
|
|
15261
15273
|
const credentials = await readCredentialsForConfiguredRelay2();
|
|
@@ -15286,7 +15298,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15286
15298
|
}
|
|
15287
15299
|
if (geminiSubcommand === "project" && args[2] === "get") {
|
|
15288
15300
|
try {
|
|
15289
|
-
const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-
|
|
15301
|
+
const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-Dkn5KcXp.cjs'); });
|
|
15290
15302
|
const config = readGeminiLocalConfig();
|
|
15291
15303
|
if (config.googleCloudProject) {
|
|
15292
15304
|
console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
|
|
@@ -15326,7 +15338,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15326
15338
|
process.exit(0);
|
|
15327
15339
|
}
|
|
15328
15340
|
try {
|
|
15329
|
-
const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-
|
|
15341
|
+
const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-q20IdxQV.cjs'); });
|
|
15330
15342
|
let startedBy = void 0;
|
|
15331
15343
|
for (let i = 1; i < args.length; i++) {
|
|
15332
15344
|
if (args[i] === "--started-by") {
|
|
@@ -15348,7 +15360,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15348
15360
|
return;
|
|
15349
15361
|
} else if (subcommand === "acp") {
|
|
15350
15362
|
try {
|
|
15351
|
-
const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-
|
|
15363
|
+
const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-Do3JnAi7.cjs'); });
|
|
15352
15364
|
let startedBy = void 0;
|
|
15353
15365
|
let verbose = false;
|
|
15354
15366
|
const acpArgs = [];
|
|
@@ -15388,7 +15400,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15388
15400
|
return;
|
|
15389
15401
|
} else if (subcommand === "openclaw") {
|
|
15390
15402
|
try {
|
|
15391
|
-
const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-
|
|
15403
|
+
const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-CtWkyvDJ.cjs'); });
|
|
15392
15404
|
let startedBy = void 0;
|
|
15393
15405
|
let verbose = false;
|
|
15394
15406
|
let gatewayUrl;
|
|
@@ -15439,7 +15451,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15439
15451
|
return;
|
|
15440
15452
|
} else if (subcommand === "mcp" && args.length === 1) {
|
|
15441
15453
|
try {
|
|
15442
|
-
const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-
|
|
15454
|
+
const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-C3zpbx-m.cjs'); });
|
|
15443
15455
|
await handleMcpCommand();
|
|
15444
15456
|
} catch (error) {
|
|
15445
15457
|
process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
|
|
@@ -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, ah as TITLE_PROMPT_PREFIX, ai as BOARD_ANALYZER_PROMPT_PREFIX, h as connectionState, aj as startOfflineReconnection, ak as clearCredentials, al as clearMachineId, k as ensurePrivateDirectorySync, am as SandboxConfigSchema, b as createEnvelope, an as CodexAppServerClient, ao 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, ah as TITLE_PROMPT_PREFIX, ai as BOARD_ANALYZER_PROMPT_PREFIX, h as connectionState, aj as startOfflineReconnection, ak as clearCredentials, al as clearMachineId, k as ensurePrivateDirectorySync, am as SandboxConfigSchema, b as createEnvelope, an as CodexAppServerClient, ao as getLatestDaemonLog } from './types-lSeHEzPR.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';
|
|
@@ -7971,6 +7971,12 @@ async function claimSessionOrExit(happySessionId, options) {
|
|
|
7971
7971
|
}
|
|
7972
7972
|
|
|
7973
7973
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
7974
|
+
function sanitizeImportTitle(value) {
|
|
7975
|
+
if (typeof value !== "string") return null;
|
|
7976
|
+
const collapsed = value.replace(/[\u0000-\u001f\u007f]/g, " ").replace(/\s+/g, " ").trim();
|
|
7977
|
+
if (collapsed.length === 0) return null;
|
|
7978
|
+
return collapsed.length > 200 ? `${collapsed.slice(0, 199)}\u2026` : collapsed;
|
|
7979
|
+
}
|
|
7974
7980
|
const hostSuffix = process.env.HAPPY_VARIANT === "dev" ? "-dev" : "";
|
|
7975
7981
|
const initialMachineMetadata = {
|
|
7976
7982
|
host: os$1.hostname() + hostSuffix,
|
|
@@ -8309,6 +8315,10 @@ async function startDaemon() {
|
|
|
8309
8315
|
if (options.importedFromClaudeSessionId && UUID_RE.test(options.importedFromClaudeSessionId)) {
|
|
8310
8316
|
extraEnv.HAPPY_IMPORTED_FROM_CLAUDE_SESSION_ID = options.importedFromClaudeSessionId;
|
|
8311
8317
|
}
|
|
8318
|
+
const importTitle = sanitizeImportTitle(options.importTitle);
|
|
8319
|
+
if (importTitle) {
|
|
8320
|
+
extraEnv.HAPPY_IMPORT_TITLE = importTitle;
|
|
8321
|
+
}
|
|
8312
8322
|
if (options.resumeCodexThreadId) {
|
|
8313
8323
|
extraEnv.HAPPY_FORK_CODEX_THREAD_ID = options.resumeCodexThreadId;
|
|
8314
8324
|
}
|
|
@@ -10170,7 +10180,7 @@ function registerSideQuestionHandler(rpc, deps) {
|
|
|
10170
10180
|
const retainMs = deps.retainMs ?? SIDE_QUESTION_RETAIN_MS;
|
|
10171
10181
|
const maxRunMs = deps.maxRunMs ?? SIDE_QUESTION_MAX_RUN_MS;
|
|
10172
10182
|
const run = deps.run ?? (async (input) => {
|
|
10173
|
-
const { query } = await import('./index-
|
|
10183
|
+
const { query } = await import('./index-DCpgRGWy.mjs');
|
|
10174
10184
|
return runSideQuestion(query, input);
|
|
10175
10185
|
});
|
|
10176
10186
|
const slots = /* @__PURE__ */ new Map();
|
|
@@ -10709,6 +10719,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
10709
10719
|
const forkedFromSessionId = process.env.HAPPY_FORKED_FROM_SESSION_ID;
|
|
10710
10720
|
const forkedFromMessageId = process.env.HAPPY_FORKED_FROM_MESSAGE_ID;
|
|
10711
10721
|
const importedFromClaudeSessionId = process.env.HAPPY_IMPORTED_FROM_CLAUDE_SESSION_ID;
|
|
10722
|
+
const importTitle = process.env.HAPPY_IMPORT_TITLE;
|
|
10712
10723
|
let metadata = {
|
|
10713
10724
|
path: workingDirectory,
|
|
10714
10725
|
host: os.hostname(),
|
|
@@ -10739,6 +10750,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
10739
10750
|
...forkedFromSessionId ? { parentSessionId: forkedFromSessionId } : {},
|
|
10740
10751
|
...forkedFromMessageId ? { forkedFromMessageId } : {},
|
|
10741
10752
|
...importedFromClaudeSessionId ? { importedFromClaudeSessionId } : {},
|
|
10753
|
+
...importTitle ? { summary: { text: importTitle, updatedAt: Date.now() } } : {},
|
|
10742
10754
|
...isAssistantVariant ? { variant: "assistant" } : {},
|
|
10743
10755
|
// B-091: sessions the assistant dispatched (daemon spawn RPC exports
|
|
10744
10756
|
// HAPPY_SPAWNED_BY, B-069) are born with the 'assistant' tag so every
|
|
@@ -15096,7 +15108,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15096
15108
|
process.exit(0);
|
|
15097
15109
|
} else if (subcommand === "install-terminal-hooks") {
|
|
15098
15110
|
try {
|
|
15099
|
-
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-
|
|
15111
|
+
const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-l1B-nbWa.mjs');
|
|
15100
15112
|
const command = parseTerminalHooksArgs(args.slice(1));
|
|
15101
15113
|
if (command.action === "help") {
|
|
15102
15114
|
console.log(TERMINAL_HOOKS_HELP);
|
|
@@ -15113,7 +15125,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15113
15125
|
}
|
|
15114
15126
|
} else if (subcommand === "spawn") {
|
|
15115
15127
|
try {
|
|
15116
|
-
const { handleSpawnCommand } = await import('./spawn-
|
|
15128
|
+
const { handleSpawnCommand } = await import('./spawn-BzbPyTHU.mjs');
|
|
15117
15129
|
await handleSpawnCommand(args.slice(1));
|
|
15118
15130
|
} catch (error) {
|
|
15119
15131
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -15125,7 +15137,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15125
15137
|
return;
|
|
15126
15138
|
} else if (subcommand === "send") {
|
|
15127
15139
|
try {
|
|
15128
|
-
const { handleSendCommand } = await import('./send-
|
|
15140
|
+
const { handleSendCommand } = await import('./send-DEhUWg8v.mjs');
|
|
15129
15141
|
await handleSendCommand(args.slice(1));
|
|
15130
15142
|
} catch (error) {
|
|
15131
15143
|
console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
|
|
@@ -15231,9 +15243,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15231
15243
|
if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
|
|
15232
15244
|
const projectId = args[3];
|
|
15233
15245
|
try {
|
|
15234
|
-
const { saveGoogleCloudProjectToConfig } = await import('./config-
|
|
15235
|
-
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-
|
|
15236
|
-
const { ApiClient: ApiClient2 } = await import('./types-
|
|
15246
|
+
const { saveGoogleCloudProjectToConfig } = await import('./config-DAb5saOC.mjs');
|
|
15247
|
+
const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-lSeHEzPR.mjs').then(function (n) { return n.ap; });
|
|
15248
|
+
const { ApiClient: ApiClient2 } = await import('./types-lSeHEzPR.mjs').then(function (n) { return n.aq; });
|
|
15237
15249
|
let userEmail = void 0;
|
|
15238
15250
|
try {
|
|
15239
15251
|
const credentials = await readCredentialsForConfiguredRelay2();
|
|
@@ -15264,7 +15276,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15264
15276
|
}
|
|
15265
15277
|
if (geminiSubcommand === "project" && args[2] === "get") {
|
|
15266
15278
|
try {
|
|
15267
|
-
const { readGeminiLocalConfig } = await import('./config-
|
|
15279
|
+
const { readGeminiLocalConfig } = await import('./config-DAb5saOC.mjs');
|
|
15268
15280
|
const config = readGeminiLocalConfig();
|
|
15269
15281
|
if (config.googleCloudProject) {
|
|
15270
15282
|
console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
|
|
@@ -15304,7 +15316,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15304
15316
|
process.exit(0);
|
|
15305
15317
|
}
|
|
15306
15318
|
try {
|
|
15307
|
-
const { runGemini } = await import('./runGemini-
|
|
15319
|
+
const { runGemini } = await import('./runGemini-0QqaFN1l.mjs');
|
|
15308
15320
|
let startedBy = void 0;
|
|
15309
15321
|
for (let i = 1; i < args.length; i++) {
|
|
15310
15322
|
if (args[i] === "--started-by") {
|
|
@@ -15326,7 +15338,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15326
15338
|
return;
|
|
15327
15339
|
} else if (subcommand === "acp") {
|
|
15328
15340
|
try {
|
|
15329
|
-
const { runAcp, resolveAcpAgentConfig } = await import('./index-
|
|
15341
|
+
const { runAcp, resolveAcpAgentConfig } = await import('./index-D2ZzPm58.mjs');
|
|
15330
15342
|
let startedBy = void 0;
|
|
15331
15343
|
let verbose = false;
|
|
15332
15344
|
const acpArgs = [];
|
|
@@ -15366,7 +15378,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15366
15378
|
return;
|
|
15367
15379
|
} else if (subcommand === "openclaw") {
|
|
15368
15380
|
try {
|
|
15369
|
-
const { runOpenClaw } = await import('./runOpenClaw-
|
|
15381
|
+
const { runOpenClaw } = await import('./runOpenClaw-C6Z6MLHq.mjs');
|
|
15370
15382
|
let startedBy = void 0;
|
|
15371
15383
|
let verbose = false;
|
|
15372
15384
|
let gatewayUrl;
|
|
@@ -15417,7 +15429,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
|
|
|
15417
15429
|
return;
|
|
15418
15430
|
} else if (subcommand === "mcp" && args.length === 1) {
|
|
15419
15431
|
try {
|
|
15420
|
-
const { handleMcpCommand } = await import('./mcp-
|
|
15432
|
+
const { handleMcpCommand } = await import('./mcp-ZvHzv_lJ.mjs');
|
|
15421
15433
|
await handleMcpCommand();
|
|
15422
15434
|
} catch (error) {
|
|
15423
15435
|
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-Ux5FD_6F.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-Ux5FD_6F.mjs';
|
|
3
|
+
import { h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, p as projectPath } from './types-lSeHEzPR.mjs';
|
|
4
|
+
import { A as AcpSessionManager } from './AcpSessionManager-C1hoU_rK.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-CgWdwkhB.mjs';
|
|
8
8
|
import 'node:child_process';
|
|
9
9
|
import '@agentclientprotocol/sdk';
|
|
10
10
|
import 'axios';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-BLW-smJu.cjs');
|
|
4
4
|
var claudeAgentSdk = require('@anthropic-ai/claude-agent-sdk');
|
|
5
5
|
require('chalk');
|
|
6
6
|
require('node:os');
|
|
7
7
|
require('node:crypto');
|
|
8
|
-
require('./types-
|
|
8
|
+
require('./types-C8-WODFE.cjs');
|
|
9
9
|
require('axios');
|
|
10
10
|
require('node:util');
|
|
11
11
|
require('node:fs');
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { q as query } from './index-
|
|
1
|
+
import { q as query } from './index-CgWdwkhB.mjs';
|
|
2
2
|
export { AbortError } from '@anthropic-ai/claude-agent-sdk';
|
|
3
3
|
import 'chalk';
|
|
4
4
|
import 'node:os';
|
|
5
5
|
import 'node:crypto';
|
|
6
|
-
import './types-
|
|
6
|
+
import './types-lSeHEzPR.mjs';
|
|
7
7
|
import 'axios';
|
|
8
8
|
import 'node:util';
|
|
9
9
|
import 'node:fs';
|
|
@@ -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-DMmvLNNM.cjs');
|
|
4
|
+
var persistence = require('./types-C8-WODFE.cjs');
|
|
5
|
+
var AcpSessionManager = require('./AcpSessionManager-RYkxYWDn.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-BLW-smJu.cjs');
|
|
9
9
|
require('node:child_process');
|
|
10
10
|
require('@agentclientprotocol/sdk');
|
|
11
11
|
require('axios');
|
package/dist/index.cjs
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -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-C8-WODFE.cjs');
|
|
9
|
+
var index = require('./index-BLW-smJu.cjs');
|
|
10
10
|
require('axios');
|
|
11
11
|
require('node:util');
|
|
12
12
|
require('node:fs/promises');
|
|
@@ -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-lSeHEzPR.mjs';
|
|
7
|
+
import { t as tmuxSupportsSessionEnv } from './index-CgWdwkhB.mjs';
|
|
8
8
|
import 'axios';
|
|
9
9
|
import 'node:util';
|
|
10
10
|
import 'node:fs/promises';
|
package/dist/lib.cjs
CHANGED
package/dist/lib.d.cts
CHANGED
|
@@ -1002,6 +1002,11 @@ interface SpawnSessionOptions {
|
|
|
1002
1002
|
* metadata so the import picker hides it. Old daemons ignore the field.
|
|
1003
1003
|
*/
|
|
1004
1004
|
importedFromClaudeSessionId?: string;
|
|
1005
|
+
/**
|
|
1006
|
+
* B-294: title to stamp on the imported session's metadata (the source
|
|
1007
|
+
* conversation's summary / first prompt). Sanitized daemon-side.
|
|
1008
|
+
*/
|
|
1009
|
+
importTitle?: string;
|
|
1005
1010
|
/**
|
|
1006
1011
|
* B-051: spawn the machine's assistant (meta-agent) session. The daemon
|
|
1007
1012
|
* forces cwd to ~/.happy/assistant (the passed `directory` is ignored),
|
package/dist/lib.d.mts
CHANGED
|
@@ -1002,6 +1002,11 @@ interface SpawnSessionOptions {
|
|
|
1002
1002
|
* metadata so the import picker hides it. Old daemons ignore the field.
|
|
1003
1003
|
*/
|
|
1004
1004
|
importedFromClaudeSessionId?: string;
|
|
1005
|
+
/**
|
|
1006
|
+
* B-294: title to stamp on the imported session's metadata (the source
|
|
1007
|
+
* conversation's summary / first prompt). Sanitized daemon-side.
|
|
1008
|
+
*/
|
|
1009
|
+
importTitle?: string;
|
|
1005
1010
|
/**
|
|
1006
1011
|
* B-051: spawn the machine's assistant (meta-agent) session. The daemon
|
|
1007
1012
|
* forces cwd to ~/.happy/assistant (the passed `directory` is ignored),
|
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-lSeHEzPR.mjs';
|
|
2
2
|
import 'axios';
|
|
3
3
|
import 'chalk';
|
|
4
4
|
import 'node:util';
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
4
4
|
var stdio_js = require('@modelcontextprotocol/sdk/server/stdio.js');
|
|
5
5
|
var z = require('zod');
|
|
6
|
-
var index = require('./index-
|
|
6
|
+
var index = require('./index-BLW-smJu.cjs');
|
|
7
7
|
var limits = require('./limits-KdWKmwtH.cjs');
|
|
8
|
-
var persistence = require('./types-
|
|
8
|
+
var persistence = require('./types-C8-WODFE.cjs');
|
|
9
9
|
require('chalk');
|
|
10
10
|
require('node:os');
|
|
11
11
|
require('node:crypto');
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import { p as pushClipboardViaDaemon } from './index-
|
|
4
|
+
import { p as pushClipboardViaDaemon } from './index-CgWdwkhB.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-lSeHEzPR.mjs';
|
|
7
7
|
import 'chalk';
|
|
8
8
|
import 'node:os';
|
|
9
9
|
import 'node:crypto';
|
|
@@ -2,10 +2,10 @@ import { useStdout, useInput, Box, Text, render } from 'ink';
|
|
|
2
2
|
import React, { useState, useRef, useEffect, useCallback } from 'react';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
-
import { l as logger, h as connectionState, A as ApiClient, i as readSettings, e as errorLogMetadata, j as encodeBase64, p as projectPath, d as contentLogMetadata } from './types-
|
|
6
|
-
import { g as GEMINI_API_KEY_ENV, j as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, B as BasePermissionHandler, k as BaseReasoningProcessor, i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, l as MessageBuffer, C as CHANGE_TITLE_INSTRUCTION, r as registerKillSessionHandler, f as startHappyServer } from './index-
|
|
7
|
-
import { A as AcpBackend } from './AcpBackend-
|
|
8
|
-
import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-
|
|
5
|
+
import { l as logger, h as connectionState, A as ApiClient, i as readSettings, e as errorLogMetadata, j as encodeBase64, p as projectPath, d as contentLogMetadata } from './types-lSeHEzPR.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-CgWdwkhB.mjs';
|
|
7
|
+
import { A as AcpBackend } from './AcpBackend-Ux5FD_6F.mjs';
|
|
8
|
+
import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-DAb5saOC.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-C8-WODFE.cjs');
|
|
8
|
+
var index = require('./index-BLW-smJu.cjs');
|
|
9
|
+
var AcpBackend = require('./AcpBackend-DMmvLNNM.cjs');
|
|
10
|
+
var config = require('./config-Dkn5KcXp.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-lSeHEzPR.mjs';
|
|
7
|
+
import { A as AcpSessionManager } from './AcpSessionManager-C1hoU_rK.mjs';
|
|
8
|
+
import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, r as registerKillSessionHandler } from './index-CgWdwkhB.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-C8-WODFE.cjs');
|
|
9
|
+
var AcpSessionManager = require('./AcpSessionManager-RYkxYWDn.cjs');
|
|
10
|
+
var index = require('./index-BLW-smJu.cjs');
|
|
11
11
|
var WebSocket = require('ws');
|
|
12
12
|
var ed = require('@noble/ed25519');
|
|
13
13
|
var sha2_js = require('@noble/hashes/sha2.js');
|
|
@@ -3,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-C8-WODFE.cjs');
|
|
7
|
+
var index = require('./index-BLW-smJu.cjs');
|
|
8
8
|
require('axios');
|
|
9
9
|
require('node:util');
|
|
10
10
|
require('node:os');
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { readFileSync } from 'node:fs';
|
|
3
3
|
import { resolve } from 'node:path';
|
|
4
|
-
import { r as readPersistedSessions, c as configuration } from './types-
|
|
5
|
-
import { b as sendUserMessage, a as sessionWebUrl } from './index-
|
|
4
|
+
import { r as readPersistedSessions, c as configuration } from './types-lSeHEzPR.mjs';
|
|
5
|
+
import { b as sendUserMessage, a as sessionWebUrl } from './index-CgWdwkhB.mjs';
|
|
6
6
|
import 'axios';
|
|
7
7
|
import 'node:util';
|
|
8
8
|
import '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-CgWdwkhB.mjs';
|
|
5
|
+
import { l as logger } from './types-lSeHEzPR.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-BLW-smJu.cjs');
|
|
7
|
+
var persistence = require('./types-C8-WODFE.cjs');
|
|
8
8
|
require('node:os');
|
|
9
9
|
require('node:crypto');
|
|
10
10
|
require('cross-spawn');
|
|
@@ -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.106";
|
|
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.106",
|
|
168
|
+
"very-happy-tools-x64-darwin": "0.2.106",
|
|
169
|
+
"very-happy-tools-arm64-linux": "0.2.106",
|
|
170
|
+
"very-happy-tools-x64-linux": "0.2.106",
|
|
171
|
+
"very-happy-tools-arm64-win32": "0.2.106",
|
|
172
|
+
"very-happy-tools-x64-win32": "0.2.106"
|
|
173
173
|
};
|
|
174
174
|
var devDependencies = {
|
|
175
175
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -1603,7 +1603,7 @@ class RpcHandlerManager {
|
|
|
1603
1603
|
}
|
|
1604
1604
|
}
|
|
1605
1605
|
|
|
1606
|
-
const __dirname$1 = path$1.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('types-
|
|
1606
|
+
const __dirname$1 = path$1.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('types-C8-WODFE.cjs', document.baseURI).href))));
|
|
1607
1607
|
function projectPath() {
|
|
1608
1608
|
const path = path$1.resolve(__dirname$1, "..");
|
|
1609
1609
|
return path;
|
|
@@ -14421,7 +14421,7 @@ class ApiMachineClient {
|
|
|
14421
14421
|
}
|
|
14422
14422
|
});
|
|
14423
14423
|
this.rpcHandlerManager.registerHandler("claude-import-session", async (params) => {
|
|
14424
|
-
const { directory, claudeSessionId, approvedNewDirectoryCreation, permissionMode } = params || {};
|
|
14424
|
+
const { directory, claudeSessionId, approvedNewDirectoryCreation, permissionMode, title } = params || {};
|
|
14425
14425
|
if (typeof directory !== "string" || directory.length === 0) {
|
|
14426
14426
|
throw new Error("directory is required");
|
|
14427
14427
|
}
|
|
@@ -14447,7 +14447,12 @@ class ApiMachineClient {
|
|
|
14447
14447
|
agent: "claude",
|
|
14448
14448
|
resumeClaudeSessionId: newClaudeSessionId,
|
|
14449
14449
|
importedFromClaudeSessionId: claudeSessionId,
|
|
14450
|
-
permissionMode: typeof permissionMode === "string" ? permissionMode : void 0
|
|
14450
|
+
permissionMode: typeof permissionMode === "string" ? permissionMode : void 0,
|
|
14451
|
+
// B-294: the imported session carries the source title from the
|
|
14452
|
+
// start. The CLI's own title generator only fires on a new user
|
|
14453
|
+
// message and skips a session that already has a summary, so an
|
|
14454
|
+
// import without this stays "New chat" forever.
|
|
14455
|
+
importTitle: typeof title === "string" ? title : void 0
|
|
14451
14456
|
});
|
|
14452
14457
|
} catch (error) {
|
|
14453
14458
|
await discardForkedSession(projectDir, newClaudeSessionId);
|
|
@@ -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.106";
|
|
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.106",
|
|
146
|
+
"very-happy-tools-x64-darwin": "0.2.106",
|
|
147
|
+
"very-happy-tools-arm64-linux": "0.2.106",
|
|
148
|
+
"very-happy-tools-x64-linux": "0.2.106",
|
|
149
|
+
"very-happy-tools-arm64-win32": "0.2.106",
|
|
150
|
+
"very-happy-tools-x64-win32": "0.2.106"
|
|
151
151
|
};
|
|
152
152
|
var devDependencies = {
|
|
153
153
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -14399,7 +14399,7 @@ class ApiMachineClient {
|
|
|
14399
14399
|
}
|
|
14400
14400
|
});
|
|
14401
14401
|
this.rpcHandlerManager.registerHandler("claude-import-session", async (params) => {
|
|
14402
|
-
const { directory, claudeSessionId, approvedNewDirectoryCreation, permissionMode } = params || {};
|
|
14402
|
+
const { directory, claudeSessionId, approvedNewDirectoryCreation, permissionMode, title } = params || {};
|
|
14403
14403
|
if (typeof directory !== "string" || directory.length === 0) {
|
|
14404
14404
|
throw new Error("directory is required");
|
|
14405
14405
|
}
|
|
@@ -14425,7 +14425,12 @@ class ApiMachineClient {
|
|
|
14425
14425
|
agent: "claude",
|
|
14426
14426
|
resumeClaudeSessionId: newClaudeSessionId,
|
|
14427
14427
|
importedFromClaudeSessionId: claudeSessionId,
|
|
14428
|
-
permissionMode: typeof permissionMode === "string" ? permissionMode : void 0
|
|
14428
|
+
permissionMode: typeof permissionMode === "string" ? permissionMode : void 0,
|
|
14429
|
+
// B-294: the imported session carries the source title from the
|
|
14430
|
+
// start. The CLI's own title generator only fires on a new user
|
|
14431
|
+
// message and skips a session that already has a summary, so an
|
|
14432
|
+
// import without this stays "New chat" forever.
|
|
14433
|
+
importTitle: typeof title === "string" ? title : void 0
|
|
14429
14434
|
});
|
|
14430
14435
|
} catch (error) {
|
|
14431
14436
|
await discardForkedSession(projectDir, newClaudeSessionId);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "very-happy-cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.106",
|
|
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.106",
|
|
117
|
+
"very-happy-tools-x64-darwin": "0.2.106",
|
|
118
|
+
"very-happy-tools-arm64-linux": "0.2.106",
|
|
119
|
+
"very-happy-tools-x64-linux": "0.2.106",
|
|
120
|
+
"very-happy-tools-arm64-win32": "0.2.106",
|
|
121
|
+
"very-happy-tools-x64-win32": "0.2.106"
|
|
122
122
|
},
|
|
123
123
|
"devDependencies": {
|
|
124
124
|
"@slopus/happy-wire": "workspace:*",
|