very-happy-cli 0.2.153 → 0.2.154
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-DSt8nTYm.cjs → AcpBackend-B14xNj5L.cjs} +2 -2
- package/dist/{AcpBackend-YDGv4E-g.mjs → AcpBackend-Ckyadhf4.mjs} +2 -2
- package/dist/{AcpSessionManager-uov6I9C8.cjs → AcpSessionManager-CCHmPdrR.cjs} +1 -1
- package/dist/{AcpSessionManager-Cxf5HQX1.mjs → AcpSessionManager-H8t4P-IW.mjs} +1 -1
- package/dist/{agentGuidance-BM4kMNyr.cjs → agentGuidance-DUBXppv-.cjs} +2 -1
- package/dist/{agentGuidance-C8unGWp7.mjs → agentGuidance-TLYQxsm2.mjs} +2 -1
- package/dist/{agentHome-D68Xh2ae.mjs → agentHome-B20RWdgE.mjs} +2 -2
- package/dist/{agentHome-BJ7bde35.cjs → agentHome-BUsLTZnz.cjs} +2 -2
- package/dist/{auto-CcXxfqkC.mjs → auto-BQnncDcs.mjs} +6 -6
- package/dist/{auto-C-90ojIH.cjs → auto-IeldARBS.cjs} +6 -6
- package/dist/codex/happyMcpStdioBridge.cjs +2 -2
- package/dist/codex/happyMcpStdioBridge.mjs +2 -2
- package/dist/{config-CHJ189UJ.mjs → config-B-ocQh5V.mjs} +4 -4
- package/dist/{config-D23kF0_u.cjs → config-DM_xI9M6.cjs} +4 -4
- package/dist/{index-BacwoXzs.mjs → index-BELV05ko.mjs} +248 -29
- package/dist/{index-DEOVn46R.cjs → index-BUxBxSxJ.cjs} +7 -7
- package/dist/{index-BXA9fxbK.mjs → index-CIx3248o.mjs} +4 -4
- package/dist/{index-BgYZGODP.mjs → index-ZKuBjvHi.mjs} +8 -8
- package/dist/{index-DHrwHxHf.cjs → index-eCjkm8Y2.cjs} +252 -32
- package/dist/{index-D49WvbDT.cjs → index-okLyUzeD.cjs} +4 -4
- package/dist/index.cjs +4 -4
- package/dist/index.mjs +4 -4
- package/dist/{install-BiOXBnnS.cjs → install-BZOdxfPd.cjs} +1 -1
- package/dist/{install-Ca7_Z3bV.mjs → install-CoLN3whR.mjs} +1 -1
- package/dist/{installTerminalHooks-BF0kL0ae.cjs → installTerminalHooks-CA4OcAS7.cjs} +4 -4
- package/dist/{installTerminalHooks-Bpl32K75.mjs → installTerminalHooks-Dde_8t36.mjs} +4 -4
- package/dist/lib.cjs +2 -2
- package/dist/lib.mjs +2 -2
- package/dist/{limits-DY_sFA3J.cjs → limits-CmzISka2.cjs} +7 -7
- package/dist/{limits-BtAuKRl2.mjs → limits-Dt7_unH4.mjs} +7 -7
- package/dist/{mcp-JpqI2POW.cjs → mcp-7iDHlyCI.cjs} +4 -4
- package/dist/{mcp-DQkmk4VV.mjs → mcp-9Ui4nQZL.mjs} +4 -4
- package/dist/{piRuntime-DRbbeQ72.cjs → piRuntime-BesGGPME.cjs} +2 -2
- package/dist/{piRuntime-DBpe12NN.mjs → piRuntime-C4E4pgye.mjs} +2 -2
- package/dist/{piTerminal-BoHvPEZ_.mjs → piTerminal-CCEGCQOY.mjs} +6 -6
- package/dist/{piTerminal-qdJ9KZVL.cjs → piTerminal-fUogwxYr.cjs} +6 -6
- package/dist/{runGemini-YqH7a-7O.mjs → runGemini-BW-pEklU.mjs} +6 -6
- package/dist/{runGemini-CtOEFvhf.cjs → runGemini-CNPGSsSK.cjs} +6 -6
- package/dist/{runOpenClaw-DoqZXBvL.cjs → runOpenClaw-Bsodkg_s.cjs} +5 -5
- package/dist/{runOpenClaw-DSSyFQBb.mjs → runOpenClaw-NRB6-_jU.mjs} +5 -5
- package/dist/{send-9075kHZP.cjs → send-Bd00QcHC.cjs} +55 -17
- package/dist/{send-Cs-RwqNf.mjs → send-DYeSFg8s.mjs} +55 -18
- package/dist/{sessions-iBnYzVUK.mjs → sessions-DlPOYKLU.mjs} +4 -4
- package/dist/{sessions-qULzUzlI.cjs → sessions-RIFUoy_g.cjs} +4 -4
- package/dist/{spawn-C6fRkedx.mjs → spawn-D1bhyHbH.mjs} +4 -4
- package/dist/{spawn-od9V23cc.cjs → spawn-DxrfHTF4.cjs} +4 -4
- package/dist/{teams-CrCzU-AV.cjs → teams-Cfy0VMCo.cjs} +5 -5
- package/dist/{teams-CkrWQ4uM.mjs → teams-pfKHpkgL.mjs} +5 -5
- package/dist/{todo-aCZmSt27.mjs → todo-B2CjDg_V.mjs} +2 -2
- package/dist/{todo-BCT_ZPuV.cjs → todo-B4cBFzHB.cjs} +2 -2
- package/dist/{types-CUCU7Vw8.cjs → types-Bd_TGr0F.cjs} +22 -3
- package/dist/{types-BvqOVUOW.mjs → types-D5RWyBE5.mjs} +22 -4
- package/package.json +7 -7
|
@@ -4,14 +4,14 @@ import { homedir } from 'node:os';
|
|
|
4
4
|
import { spawnSync } from 'node:child_process';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import { p as projectPath } from './terminalTitleSuggest-DKgX3osW.mjs';
|
|
7
|
-
import { j as tmuxSupportsSessionEnv } from './index-
|
|
7
|
+
import { j as tmuxSupportsSessionEnv } from './index-BELV05ko.mjs';
|
|
8
8
|
import 'path';
|
|
9
9
|
import 'url';
|
|
10
10
|
import 'zod';
|
|
11
11
|
import 'node:crypto';
|
|
12
|
-
import './types-
|
|
12
|
+
import './types-D5RWyBE5.mjs';
|
|
13
13
|
import 'axios';
|
|
14
|
-
import './limits-
|
|
14
|
+
import './limits-Dt7_unH4.mjs';
|
|
15
15
|
import 'node:fs/promises';
|
|
16
16
|
import 'tweetnacl';
|
|
17
17
|
import 'node:util';
|
|
@@ -29,7 +29,7 @@ import 'fs';
|
|
|
29
29
|
import 'node:readline';
|
|
30
30
|
import '@anthropic-ai/sandbox-runtime';
|
|
31
31
|
import 'expo-server-sdk';
|
|
32
|
-
import './agentGuidance-
|
|
32
|
+
import './agentGuidance-TLYQxsm2.mjs';
|
|
33
33
|
import 'ink';
|
|
34
34
|
import 'react';
|
|
35
35
|
import '@anthropic-ai/claude-agent-sdk';
|
package/dist/lib.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./types-
|
|
4
|
-
var persistence = require('./limits-
|
|
3
|
+
var index = require('./types-Bd_TGr0F.cjs');
|
|
4
|
+
var persistence = require('./limits-CmzISka2.cjs');
|
|
5
5
|
require('axios');
|
|
6
6
|
require('node:events');
|
|
7
7
|
require('socket.io-client');
|
package/dist/lib.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema } from './types-
|
|
2
|
-
export { c as configuration, l as logger } from './limits-
|
|
1
|
+
export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema } from './types-D5RWyBE5.mjs';
|
|
2
|
+
export { c as configuration, l as logger } from './limits-Dt7_unH4.mjs';
|
|
3
3
|
import 'axios';
|
|
4
4
|
import 'node:events';
|
|
5
5
|
import 'socket.io-client';
|
|
@@ -31,7 +31,7 @@ function _interopNamespaceDefault(e) {
|
|
|
31
31
|
var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
|
|
32
32
|
|
|
33
33
|
var name = "very-happy-cli";
|
|
34
|
-
var version = "0.2.
|
|
34
|
+
var version = "0.2.154";
|
|
35
35
|
var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
|
|
36
36
|
var author = "Kirill Dubovitskiy";
|
|
37
37
|
var contributors = [
|
|
@@ -148,12 +148,12 @@ var dependencies = {
|
|
|
148
148
|
zod: "^4.0.0"
|
|
149
149
|
};
|
|
150
150
|
var optionalDependencies = {
|
|
151
|
-
"very-happy-tools-arm64-darwin": "0.2.
|
|
152
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
153
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
154
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
155
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
156
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
151
|
+
"very-happy-tools-arm64-darwin": "0.2.154",
|
|
152
|
+
"very-happy-tools-x64-darwin": "0.2.154",
|
|
153
|
+
"very-happy-tools-arm64-linux": "0.2.154",
|
|
154
|
+
"very-happy-tools-x64-linux": "0.2.154",
|
|
155
|
+
"very-happy-tools-arm64-win32": "0.2.154",
|
|
156
|
+
"very-happy-tools-x64-win32": "0.2.154"
|
|
157
157
|
};
|
|
158
158
|
var devDependencies = {
|
|
159
159
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -11,7 +11,7 @@ import { inspect } from 'node:util';
|
|
|
11
11
|
import { isCuid, createId } from '@paralleldrive/cuid2';
|
|
12
12
|
|
|
13
13
|
var name = "very-happy-cli";
|
|
14
|
-
var version = "0.2.
|
|
14
|
+
var version = "0.2.154";
|
|
15
15
|
var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
|
|
16
16
|
var author = "Kirill Dubovitskiy";
|
|
17
17
|
var contributors = [
|
|
@@ -128,12 +128,12 @@ var dependencies = {
|
|
|
128
128
|
zod: "^4.0.0"
|
|
129
129
|
};
|
|
130
130
|
var optionalDependencies = {
|
|
131
|
-
"very-happy-tools-arm64-darwin": "0.2.
|
|
132
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
133
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
134
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
135
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
136
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
131
|
+
"very-happy-tools-arm64-darwin": "0.2.154",
|
|
132
|
+
"very-happy-tools-x64-darwin": "0.2.154",
|
|
133
|
+
"very-happy-tools-arm64-linux": "0.2.154",
|
|
134
|
+
"very-happy-tools-x64-linux": "0.2.154",
|
|
135
|
+
"very-happy-tools-arm64-win32": "0.2.154",
|
|
136
|
+
"very-happy-tools-x64-win32": "0.2.154"
|
|
137
137
|
};
|
|
138
138
|
var devDependencies = {
|
|
139
139
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var agentGuidance = require('./agentGuidance-
|
|
3
|
+
var agentGuidance = require('./agentGuidance-DUBXppv-.cjs');
|
|
4
4
|
var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
5
5
|
var stdio_js = require('@modelcontextprotocol/sdk/server/stdio.js');
|
|
6
6
|
var z = require('zod');
|
|
7
|
-
var index = require('./types-
|
|
8
|
-
var persistence = require('./limits-
|
|
9
|
-
var index$1 = require('./index-
|
|
7
|
+
var index = require('./types-Bd_TGr0F.cjs');
|
|
8
|
+
var persistence = require('./limits-CmzISka2.cjs');
|
|
9
|
+
var index$1 = require('./index-eCjkm8Y2.cjs');
|
|
10
10
|
require('node:fs/promises');
|
|
11
11
|
require('node:os');
|
|
12
12
|
require('node:crypto');
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { r as registerTeamsTools, P as PREVIEW_TOOL_NAME, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION } from './agentGuidance-
|
|
1
|
+
import { r as registerTeamsTools, P as PREVIEW_TOOL_NAME, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION } from './agentGuidance-TLYQxsm2.mjs';
|
|
2
2
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { l as pushClipboardViaDaemon, m as pushFilePreviewViaDaemon, n as setTerminalTitleViaDaemon } from './types-
|
|
6
|
-
import { l as logger, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, h as CLIPBOARD_MAX_BYTES } from './limits-
|
|
7
|
-
import {
|
|
5
|
+
import { l as pushClipboardViaDaemon, m as pushFilePreviewViaDaemon, n as setTerminalTitleViaDaemon } from './types-D5RWyBE5.mjs';
|
|
6
|
+
import { l as logger, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, h as CLIPBOARD_MAX_BYTES } from './limits-Dt7_unH4.mjs';
|
|
7
|
+
import { x as checkPreviewPath, y as registerAssistantSessionTools, z as suggestTitleForPrompt } from './index-BELV05ko.mjs';
|
|
8
8
|
import 'node:fs/promises';
|
|
9
9
|
import 'node:os';
|
|
10
10
|
import 'node:crypto';
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
var promises = require('node:fs/promises');
|
|
4
4
|
var node_crypto = require('node:crypto');
|
|
5
5
|
var path = require('node:path');
|
|
6
|
-
var persistence = require('./limits-
|
|
7
|
-
var index = require('./index-
|
|
6
|
+
var persistence = require('./limits-CmzISka2.cjs');
|
|
7
|
+
var index = require('./index-eCjkm8Y2.cjs');
|
|
8
8
|
|
|
9
9
|
async function publish(path, content, mode) {
|
|
10
10
|
const temporary = `${path}.${node_crypto.randomUUID()}.new`;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { mkdir, chmod, writeFile, rename } from 'node:fs/promises';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { c as configuration } from './limits-
|
|
5
|
-
import { P as PI_TEAMS_EXTENSION } from './index-
|
|
4
|
+
import { c as configuration } from './limits-Dt7_unH4.mjs';
|
|
5
|
+
import { P as PI_TEAMS_EXTENSION } from './index-BELV05ko.mjs';
|
|
6
6
|
|
|
7
7
|
async function publish(path, content, mode) {
|
|
8
8
|
const temporary = `${path}.${randomUUID()}.new`;
|
|
@@ -3,21 +3,21 @@ import { randomUUID } from 'node:crypto';
|
|
|
3
3
|
import { createServer } from 'node:http';
|
|
4
4
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
5
5
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
6
|
-
import { p as preparePiTeamsRuntime } from './piRuntime-
|
|
7
|
-
import { registerMcpTools, registerTerminalTitleSuggest } from './mcp-
|
|
8
|
-
import './agentGuidance-
|
|
6
|
+
import { p as preparePiTeamsRuntime } from './piRuntime-C4E4pgye.mjs';
|
|
7
|
+
import { registerMcpTools, registerTerminalTitleSuggest } from './mcp-9Ui4nQZL.mjs';
|
|
8
|
+
import './agentGuidance-TLYQxsm2.mjs';
|
|
9
9
|
import 'node:fs/promises';
|
|
10
10
|
import 'node:os';
|
|
11
11
|
import 'zod';
|
|
12
|
-
import './limits-
|
|
12
|
+
import './limits-Dt7_unH4.mjs';
|
|
13
13
|
import 'axios';
|
|
14
14
|
import 'tweetnacl';
|
|
15
15
|
import 'socket.io-client';
|
|
16
|
-
import './types-
|
|
16
|
+
import './types-D5RWyBE5.mjs';
|
|
17
17
|
import 'node:fs';
|
|
18
18
|
import 'node:path';
|
|
19
19
|
import { r as resolveMcpTerminalId } from './terminalToolContext-CFeGeaNm.mjs';
|
|
20
|
-
import './index-
|
|
20
|
+
import './index-BELV05ko.mjs';
|
|
21
21
|
import 'chalk';
|
|
22
22
|
import 'cross-spawn';
|
|
23
23
|
import 'node:readline';
|
|
@@ -5,21 +5,21 @@ var node_crypto = require('node:crypto');
|
|
|
5
5
|
var node_http = require('node:http');
|
|
6
6
|
var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
7
7
|
var streamableHttp_js = require('@modelcontextprotocol/sdk/server/streamableHttp.js');
|
|
8
|
-
var piRuntime = require('./piRuntime-
|
|
9
|
-
var mcp = require('./mcp-
|
|
10
|
-
require('./agentGuidance-
|
|
8
|
+
var piRuntime = require('./piRuntime-BesGGPME.cjs');
|
|
9
|
+
var mcp = require('./mcp-7iDHlyCI.cjs');
|
|
10
|
+
require('./agentGuidance-DUBXppv-.cjs');
|
|
11
11
|
require('node:fs/promises');
|
|
12
12
|
require('node:os');
|
|
13
13
|
require('zod');
|
|
14
|
-
require('./limits-
|
|
14
|
+
require('./limits-CmzISka2.cjs');
|
|
15
15
|
require('axios');
|
|
16
16
|
require('tweetnacl');
|
|
17
17
|
require('socket.io-client');
|
|
18
|
-
require('./types-
|
|
18
|
+
require('./types-Bd_TGr0F.cjs');
|
|
19
19
|
require('node:fs');
|
|
20
20
|
require('node:path');
|
|
21
21
|
var terminalToolContext = require('./terminalToolContext-DoV9Gs7K.cjs');
|
|
22
|
-
require('./index-
|
|
22
|
+
require('./index-eCjkm8Y2.cjs');
|
|
23
23
|
require('chalk');
|
|
24
24
|
require('cross-spawn');
|
|
25
25
|
require('node:readline');
|
|
@@ -2,12 +2,12 @@ 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 { o as connectionState, A as ApiClient, t as errorLogMetadata, q as notifyDaemonSessionStarted, u as contentLogMetadata } from './types-
|
|
6
|
-
import { l as logger, r as readSettings, j as encodeBase64 } from './limits-
|
|
7
|
-
import {
|
|
5
|
+
import { o as connectionState, A as ApiClient, t as errorLogMetadata, q as notifyDaemonSessionStarted, u as contentLogMetadata } from './types-D5RWyBE5.mjs';
|
|
6
|
+
import { l as logger, r as readSettings, j as encodeBase64 } from './limits-Dt7_unH4.mjs';
|
|
7
|
+
import { Z as GEMINI_API_KEY_ENV, _ as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, V as BasePermissionHandler, $ as BaseReasoningProcessor, C as initialMachineMetadata, E as createSessionMetadata, F as setupOfflineReconnection, I as MessageQueue2, J as hashObject, a0 as MessageBuffer, a1 as CHANGE_TITLE_INSTRUCTION, O as registerKillSessionHandler, K as startHappyServer } from './index-BELV05ko.mjs';
|
|
8
8
|
import { p as projectPath } from './terminalTitleSuggest-DKgX3osW.mjs';
|
|
9
|
-
import { A as AcpBackend } from './AcpBackend-
|
|
10
|
-
import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-
|
|
9
|
+
import { A as AcpBackend } from './AcpBackend-Ckyadhf4.mjs';
|
|
10
|
+
import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-B-ocQh5V.mjs';
|
|
11
11
|
import 'axios';
|
|
12
12
|
import 'node:events';
|
|
13
13
|
import 'socket.io-client';
|
|
@@ -32,7 +32,7 @@ import '@anthropic-ai/sandbox-runtime';
|
|
|
32
32
|
import 'expo-server-sdk';
|
|
33
33
|
import 'chalk';
|
|
34
34
|
import 'node:util';
|
|
35
|
-
import './agentGuidance-
|
|
35
|
+
import './agentGuidance-TLYQxsm2.mjs';
|
|
36
36
|
import '@anthropic-ai/claude-agent-sdk';
|
|
37
37
|
import 'ps-list';
|
|
38
38
|
import 'tmp';
|
|
@@ -4,12 +4,12 @@ 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 index$1 = require('./types-
|
|
8
|
-
var persistence = require('./limits-
|
|
9
|
-
var index = require('./index-
|
|
7
|
+
var index$1 = require('./types-Bd_TGr0F.cjs');
|
|
8
|
+
var persistence = require('./limits-CmzISka2.cjs');
|
|
9
|
+
var index = require('./index-eCjkm8Y2.cjs');
|
|
10
10
|
var terminalTitleSuggest = require('./terminalTitleSuggest-Dji8I0Jy.cjs');
|
|
11
|
-
var AcpBackend = require('./AcpBackend-
|
|
12
|
-
var config = require('./config-
|
|
11
|
+
var AcpBackend = require('./AcpBackend-B14xNj5L.cjs');
|
|
12
|
+
var config = require('./config-DM_xI9M6.cjs');
|
|
13
13
|
require('axios');
|
|
14
14
|
require('node:events');
|
|
15
15
|
require('socket.io-client');
|
|
@@ -34,7 +34,7 @@ require('@anthropic-ai/sandbox-runtime');
|
|
|
34
34
|
require('expo-server-sdk');
|
|
35
35
|
require('chalk');
|
|
36
36
|
require('node:util');
|
|
37
|
-
require('./agentGuidance-
|
|
37
|
+
require('./agentGuidance-DUBXppv-.cjs');
|
|
38
38
|
require('@anthropic-ai/claude-agent-sdk');
|
|
39
39
|
require('ps-list');
|
|
40
40
|
require('tmp');
|
|
@@ -5,10 +5,10 @@ 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 index = require('./types-
|
|
9
|
-
var AcpSessionManager = require('./AcpSessionManager-
|
|
10
|
-
var persistence = require('./limits-
|
|
11
|
-
var index$1 = require('./index-
|
|
8
|
+
var index = require('./types-Bd_TGr0F.cjs');
|
|
9
|
+
var AcpSessionManager = require('./AcpSessionManager-CCHmPdrR.cjs');
|
|
10
|
+
var persistence = require('./limits-CmzISka2.cjs');
|
|
11
|
+
var index$1 = require('./index-eCjkm8Y2.cjs');
|
|
12
12
|
var WebSocket = require('ws');
|
|
13
13
|
var ed = require('@noble/ed25519');
|
|
14
14
|
var sha2_js = require('@noble/hashes/sha2.js');
|
|
@@ -35,7 +35,7 @@ require('@anthropic-ai/sandbox-runtime');
|
|
|
35
35
|
require('expo-server-sdk');
|
|
36
36
|
require('chalk');
|
|
37
37
|
require('node:util');
|
|
38
|
-
require('./agentGuidance-
|
|
38
|
+
require('./agentGuidance-DUBXppv-.cjs');
|
|
39
39
|
require('ink');
|
|
40
40
|
require('react');
|
|
41
41
|
require('@anthropic-ai/claude-agent-sdk');
|
|
@@ -3,10 +3,10 @@ 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 { t as errorLogMetadata, u as contentLogMetadata, o as connectionState, A as ApiClient, q as notifyDaemonSessionStarted } from './types-
|
|
7
|
-
import { A as AcpSessionManager } from './AcpSessionManager-
|
|
8
|
-
import { m as ensurePrivateDirectorySync, n as hardenPrivateFileSync, w as writePrivateFileSync, r as readSettings, j as encodeBase64, l as logger, c as configuration } from './limits-
|
|
9
|
-
import {
|
|
6
|
+
import { t as errorLogMetadata, u as contentLogMetadata, o as connectionState, A as ApiClient, q as notifyDaemonSessionStarted } from './types-D5RWyBE5.mjs';
|
|
7
|
+
import { A as AcpSessionManager } from './AcpSessionManager-H8t4P-IW.mjs';
|
|
8
|
+
import { m as ensurePrivateDirectorySync, n as hardenPrivateFileSync, w as writePrivateFileSync, r as readSettings, j as encodeBase64, l as logger, c as configuration } from './limits-Dt7_unH4.mjs';
|
|
9
|
+
import { C as initialMachineMetadata, E as createSessionMetadata, F as setupOfflineReconnection, I as MessageQueue2, O as registerKillSessionHandler } from './index-BELV05ko.mjs';
|
|
10
10
|
import WebSocket from 'ws';
|
|
11
11
|
import * as ed from '@noble/ed25519';
|
|
12
12
|
import { sha512 } from '@noble/hashes/sha2.js';
|
|
@@ -33,7 +33,7 @@ import '@anthropic-ai/sandbox-runtime';
|
|
|
33
33
|
import 'expo-server-sdk';
|
|
34
34
|
import 'chalk';
|
|
35
35
|
import 'node:util';
|
|
36
|
-
import './agentGuidance-
|
|
36
|
+
import './agentGuidance-TLYQxsm2.mjs';
|
|
37
37
|
import 'ink';
|
|
38
38
|
import 'react';
|
|
39
39
|
import '@anthropic-ai/claude-agent-sdk';
|
|
@@ -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('./limits-
|
|
7
|
-
var index = require('./index-
|
|
6
|
+
var persistence = require('./limits-CmzISka2.cjs');
|
|
7
|
+
var index = require('./index-eCjkm8Y2.cjs');
|
|
8
8
|
require('node:fs/promises');
|
|
9
9
|
require('node:os');
|
|
10
10
|
require('zod');
|
|
@@ -12,7 +12,7 @@ require('node:crypto');
|
|
|
12
12
|
require('tweetnacl');
|
|
13
13
|
require('node:util');
|
|
14
14
|
require('@paralleldrive/cuid2');
|
|
15
|
-
require('./types-
|
|
15
|
+
require('./types-Bd_TGr0F.cjs');
|
|
16
16
|
require('axios');
|
|
17
17
|
require('node:events');
|
|
18
18
|
require('socket.io-client');
|
|
@@ -31,7 +31,7 @@ require('fs');
|
|
|
31
31
|
require('node:readline');
|
|
32
32
|
require('@anthropic-ai/sandbox-runtime');
|
|
33
33
|
require('expo-server-sdk');
|
|
34
|
-
require('./agentGuidance-
|
|
34
|
+
require('./agentGuidance-DUBXppv-.cjs');
|
|
35
35
|
require('ink');
|
|
36
36
|
require('react');
|
|
37
37
|
require('@anthropic-ai/claude-agent-sdk');
|
|
@@ -49,8 +49,9 @@ require('inquirer');
|
|
|
49
49
|
require('node:url');
|
|
50
50
|
require('node:readline/promises');
|
|
51
51
|
|
|
52
|
+
const EXIT_SESSION_NOT_LIVE = 3;
|
|
52
53
|
function parseSendArgs(args) {
|
|
53
|
-
const options = { json: false, help: false };
|
|
54
|
+
const options = { resume: false, json: false, help: false };
|
|
54
55
|
for (let i = 0; i < args.length; i++) {
|
|
55
56
|
const arg = args[i];
|
|
56
57
|
if (arg === "--session" || arg === "-s") {
|
|
@@ -69,6 +70,8 @@ function parseSendArgs(args) {
|
|
|
69
70
|
const value = args[++i];
|
|
70
71
|
if (value === void 0 || value.trim().length === 0) throw new Error("--model requires a value");
|
|
71
72
|
options.model = value;
|
|
73
|
+
} else if (arg === "--resume") {
|
|
74
|
+
options.resume = true;
|
|
72
75
|
} else if (arg === "--json") {
|
|
73
76
|
options.json = true;
|
|
74
77
|
} else if (arg === "--help" || arg === "-h") {
|
|
@@ -88,7 +91,7 @@ ${chalk.bold("very-happy send")} - Send a message into an existing session (for
|
|
|
88
91
|
|
|
89
92
|
${chalk.bold("Usage:")}
|
|
90
93
|
very-happy send --session <id> (--prompt <text> | --prompt-file <file>)
|
|
91
|
-
[--model <id>] [--json]
|
|
94
|
+
[--model <id>] [--resume] [--json]
|
|
92
95
|
|
|
93
96
|
${chalk.bold("Options:")}
|
|
94
97
|
--session, -s <id> Target session id (required)
|
|
@@ -97,7 +100,10 @@ ${chalk.bold("Options:")}
|
|
|
97
100
|
--model, -m <id> Switch the session to this model with this message
|
|
98
101
|
('default' = the machine default). Without it the
|
|
99
102
|
session keeps whatever model it is on.
|
|
100
|
-
--
|
|
103
|
+
--resume If the session is archived or offline, bring it back
|
|
104
|
+
on THIS machine first (same as the web's Restore),
|
|
105
|
+
wait until it is live, then send.
|
|
106
|
+
--json Machine-readable output (see below)
|
|
101
107
|
-h, --help Show this help
|
|
102
108
|
|
|
103
109
|
${chalk.bold("Behavior:")}
|
|
@@ -105,9 +111,23 @@ ${chalk.bold("Behavior:")}
|
|
|
105
111
|
encryption key must be in ${persistence.configuration.sessionsFile}); sessions from
|
|
106
112
|
other machines or from daemons too old to persist keys cannot be reached.
|
|
107
113
|
|
|
114
|
+
Before sending, the session is classified from the local daemon and the
|
|
115
|
+
server: live (a wrapper is attached, here or on another machine), archived,
|
|
116
|
+
offline (wrapper exited / presence timed out) or not_found. The server
|
|
117
|
+
stores messages for any session, so only "live" means someone will read it;
|
|
118
|
+
anything else is refused with exit 3 unless --resume is given.
|
|
119
|
+
|
|
120
|
+
${chalk.bold("JSON output:")}
|
|
121
|
+
delivered {"sessionId","url","delivered":true,"status":"live","resumed":false|true}
|
|
122
|
+
refused {"sessionId","url","delivered":false,"status":"archived"|"offline"|"not_found",
|
|
123
|
+
"error":"...","resume":{"ok":false,"error":"..."}} (resume only with --resume)
|
|
124
|
+
dropped {"delivered":false,"stored":true,...} the POST succeeded but the wrapper
|
|
125
|
+
went away meanwhile: the message is stored server-side, unread
|
|
126
|
+
|
|
108
127
|
${chalk.bold("Exit codes:")}
|
|
109
|
-
0 message delivered
|
|
110
|
-
1 bad arguments, unknown session, or
|
|
128
|
+
0 message delivered to a live wrapper
|
|
129
|
+
1 bad arguments, unknown session, or transport failure
|
|
130
|
+
3 session not live (archived / offline / not found) or resume failed
|
|
111
131
|
`);
|
|
112
132
|
}
|
|
113
133
|
function fail(options, sessionId, message) {
|
|
@@ -166,27 +186,45 @@ async function handleSendCommand(args) {
|
|
|
166
186
|
`Session ${sessionId} has no encryption key in ${persistence.configuration.sessionsFile}. It was not spawned by this machine's daemon, or the daemon is too old to persist session keys.`
|
|
167
187
|
);
|
|
168
188
|
}
|
|
189
|
+
let result;
|
|
169
190
|
try {
|
|
170
|
-
await index.
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
"cli-send",
|
|
175
|
-
options.model !== void 0 ? { model: options.model === "default" ? null : options.model } : {}
|
|
176
|
-
);
|
|
191
|
+
result = await index.deliverToSession(sessionId, persisted, prompt, "cli-send", {
|
|
192
|
+
resume: options.resume,
|
|
193
|
+
...options.model !== void 0 ? { model: options.model === "default" ? null : options.model } : {}
|
|
194
|
+
});
|
|
177
195
|
} catch (error) {
|
|
178
196
|
fail(options, sessionId, `Failed to send message: ${error instanceof Error ? error.message : String(error)}`);
|
|
179
197
|
}
|
|
180
198
|
const url = index.sessionWebUrl(sessionId);
|
|
199
|
+
if (!result.delivered) {
|
|
200
|
+
if (options.json) {
|
|
201
|
+
console.log(JSON.stringify({
|
|
202
|
+
sessionId,
|
|
203
|
+
url,
|
|
204
|
+
delivered: false,
|
|
205
|
+
status: result.status,
|
|
206
|
+
resumed: result.resumed,
|
|
207
|
+
stored: result.stored,
|
|
208
|
+
error: result.error,
|
|
209
|
+
...result.resume ? { resume: result.resume } : {}
|
|
210
|
+
}));
|
|
211
|
+
} else {
|
|
212
|
+
console.error(chalk.red("Not delivered:"), result.error ?? `session is ${result.status}`);
|
|
213
|
+
if (result.stored) console.error(chalk.yellow("The message is stored server-side; nothing is reading it."));
|
|
214
|
+
}
|
|
215
|
+
process.exit(EXIT_SESSION_NOT_LIVE);
|
|
216
|
+
}
|
|
181
217
|
if (options.json) {
|
|
182
|
-
console.log(JSON.stringify({ sessionId, url, delivered: true }));
|
|
218
|
+
console.log(JSON.stringify({ sessionId, url, delivered: true, status: "live", resumed: result.resumed }));
|
|
183
219
|
} else {
|
|
184
220
|
console.log(`${chalk.bold("Session:")} ${sessionId}`);
|
|
185
221
|
console.log(`${chalk.bold("URL:")} ${url}`);
|
|
222
|
+
if (result.resumed) console.log(chalk.green("Session resumed on this machine."));
|
|
186
223
|
console.log(chalk.green("Message sent."));
|
|
187
224
|
}
|
|
188
225
|
process.exit(0);
|
|
189
226
|
}
|
|
190
227
|
|
|
228
|
+
exports.EXIT_SESSION_NOT_LIVE = EXIT_SESSION_NOT_LIVE;
|
|
191
229
|
exports.handleSendCommand = handleSendCommand;
|
|
192
230
|
exports.parseSendArgs = parseSendArgs;
|
|
@@ -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 { d as readPersistedSessions, c as configuration } from './limits-
|
|
5
|
-
import { d as
|
|
4
|
+
import { d as readPersistedSessions, c as configuration } from './limits-Dt7_unH4.mjs';
|
|
5
|
+
import { d as deliverToSession, e as sessionWebUrl } from './index-BELV05ko.mjs';
|
|
6
6
|
import 'node:fs/promises';
|
|
7
7
|
import 'node:os';
|
|
8
8
|
import 'zod';
|
|
@@ -10,7 +10,7 @@ import 'node:crypto';
|
|
|
10
10
|
import 'tweetnacl';
|
|
11
11
|
import 'node:util';
|
|
12
12
|
import '@paralleldrive/cuid2';
|
|
13
|
-
import './types-
|
|
13
|
+
import './types-D5RWyBE5.mjs';
|
|
14
14
|
import 'axios';
|
|
15
15
|
import 'node:events';
|
|
16
16
|
import 'socket.io-client';
|
|
@@ -29,7 +29,7 @@ import 'fs';
|
|
|
29
29
|
import 'node:readline';
|
|
30
30
|
import '@anthropic-ai/sandbox-runtime';
|
|
31
31
|
import 'expo-server-sdk';
|
|
32
|
-
import './agentGuidance-
|
|
32
|
+
import './agentGuidance-TLYQxsm2.mjs';
|
|
33
33
|
import 'ink';
|
|
34
34
|
import 'react';
|
|
35
35
|
import '@anthropic-ai/claude-agent-sdk';
|
|
@@ -47,8 +47,9 @@ import 'inquirer';
|
|
|
47
47
|
import 'node:url';
|
|
48
48
|
import 'node:readline/promises';
|
|
49
49
|
|
|
50
|
+
const EXIT_SESSION_NOT_LIVE = 3;
|
|
50
51
|
function parseSendArgs(args) {
|
|
51
|
-
const options = { json: false, help: false };
|
|
52
|
+
const options = { resume: false, json: false, help: false };
|
|
52
53
|
for (let i = 0; i < args.length; i++) {
|
|
53
54
|
const arg = args[i];
|
|
54
55
|
if (arg === "--session" || arg === "-s") {
|
|
@@ -67,6 +68,8 @@ function parseSendArgs(args) {
|
|
|
67
68
|
const value = args[++i];
|
|
68
69
|
if (value === void 0 || value.trim().length === 0) throw new Error("--model requires a value");
|
|
69
70
|
options.model = value;
|
|
71
|
+
} else if (arg === "--resume") {
|
|
72
|
+
options.resume = true;
|
|
70
73
|
} else if (arg === "--json") {
|
|
71
74
|
options.json = true;
|
|
72
75
|
} else if (arg === "--help" || arg === "-h") {
|
|
@@ -86,7 +89,7 @@ ${chalk.bold("very-happy send")} - Send a message into an existing session (for
|
|
|
86
89
|
|
|
87
90
|
${chalk.bold("Usage:")}
|
|
88
91
|
very-happy send --session <id> (--prompt <text> | --prompt-file <file>)
|
|
89
|
-
[--model <id>] [--json]
|
|
92
|
+
[--model <id>] [--resume] [--json]
|
|
90
93
|
|
|
91
94
|
${chalk.bold("Options:")}
|
|
92
95
|
--session, -s <id> Target session id (required)
|
|
@@ -95,7 +98,10 @@ ${chalk.bold("Options:")}
|
|
|
95
98
|
--model, -m <id> Switch the session to this model with this message
|
|
96
99
|
('default' = the machine default). Without it the
|
|
97
100
|
session keeps whatever model it is on.
|
|
98
|
-
--
|
|
101
|
+
--resume If the session is archived or offline, bring it back
|
|
102
|
+
on THIS machine first (same as the web's Restore),
|
|
103
|
+
wait until it is live, then send.
|
|
104
|
+
--json Machine-readable output (see below)
|
|
99
105
|
-h, --help Show this help
|
|
100
106
|
|
|
101
107
|
${chalk.bold("Behavior:")}
|
|
@@ -103,9 +109,23 @@ ${chalk.bold("Behavior:")}
|
|
|
103
109
|
encryption key must be in ${configuration.sessionsFile}); sessions from
|
|
104
110
|
other machines or from daemons too old to persist keys cannot be reached.
|
|
105
111
|
|
|
112
|
+
Before sending, the session is classified from the local daemon and the
|
|
113
|
+
server: live (a wrapper is attached, here or on another machine), archived,
|
|
114
|
+
offline (wrapper exited / presence timed out) or not_found. The server
|
|
115
|
+
stores messages for any session, so only "live" means someone will read it;
|
|
116
|
+
anything else is refused with exit 3 unless --resume is given.
|
|
117
|
+
|
|
118
|
+
${chalk.bold("JSON output:")}
|
|
119
|
+
delivered {"sessionId","url","delivered":true,"status":"live","resumed":false|true}
|
|
120
|
+
refused {"sessionId","url","delivered":false,"status":"archived"|"offline"|"not_found",
|
|
121
|
+
"error":"...","resume":{"ok":false,"error":"..."}} (resume only with --resume)
|
|
122
|
+
dropped {"delivered":false,"stored":true,...} the POST succeeded but the wrapper
|
|
123
|
+
went away meanwhile: the message is stored server-side, unread
|
|
124
|
+
|
|
106
125
|
${chalk.bold("Exit codes:")}
|
|
107
|
-
0 message delivered
|
|
108
|
-
1 bad arguments, unknown session, or
|
|
126
|
+
0 message delivered to a live wrapper
|
|
127
|
+
1 bad arguments, unknown session, or transport failure
|
|
128
|
+
3 session not live (archived / offline / not found) or resume failed
|
|
109
129
|
`);
|
|
110
130
|
}
|
|
111
131
|
function fail(options, sessionId, message) {
|
|
@@ -164,26 +184,43 @@ async function handleSendCommand(args) {
|
|
|
164
184
|
`Session ${sessionId} has no encryption key in ${configuration.sessionsFile}. It was not spawned by this machine's daemon, or the daemon is too old to persist session keys.`
|
|
165
185
|
);
|
|
166
186
|
}
|
|
187
|
+
let result;
|
|
167
188
|
try {
|
|
168
|
-
await
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
"cli-send",
|
|
173
|
-
options.model !== void 0 ? { model: options.model === "default" ? null : options.model } : {}
|
|
174
|
-
);
|
|
189
|
+
result = await deliverToSession(sessionId, persisted, prompt, "cli-send", {
|
|
190
|
+
resume: options.resume,
|
|
191
|
+
...options.model !== void 0 ? { model: options.model === "default" ? null : options.model } : {}
|
|
192
|
+
});
|
|
175
193
|
} catch (error) {
|
|
176
194
|
fail(options, sessionId, `Failed to send message: ${error instanceof Error ? error.message : String(error)}`);
|
|
177
195
|
}
|
|
178
196
|
const url = sessionWebUrl(sessionId);
|
|
197
|
+
if (!result.delivered) {
|
|
198
|
+
if (options.json) {
|
|
199
|
+
console.log(JSON.stringify({
|
|
200
|
+
sessionId,
|
|
201
|
+
url,
|
|
202
|
+
delivered: false,
|
|
203
|
+
status: result.status,
|
|
204
|
+
resumed: result.resumed,
|
|
205
|
+
stored: result.stored,
|
|
206
|
+
error: result.error,
|
|
207
|
+
...result.resume ? { resume: result.resume } : {}
|
|
208
|
+
}));
|
|
209
|
+
} else {
|
|
210
|
+
console.error(chalk.red("Not delivered:"), result.error ?? `session is ${result.status}`);
|
|
211
|
+
if (result.stored) console.error(chalk.yellow("The message is stored server-side; nothing is reading it."));
|
|
212
|
+
}
|
|
213
|
+
process.exit(EXIT_SESSION_NOT_LIVE);
|
|
214
|
+
}
|
|
179
215
|
if (options.json) {
|
|
180
|
-
console.log(JSON.stringify({ sessionId, url, delivered: true }));
|
|
216
|
+
console.log(JSON.stringify({ sessionId, url, delivered: true, status: "live", resumed: result.resumed }));
|
|
181
217
|
} else {
|
|
182
218
|
console.log(`${chalk.bold("Session:")} ${sessionId}`);
|
|
183
219
|
console.log(`${chalk.bold("URL:")} ${url}`);
|
|
220
|
+
if (result.resumed) console.log(chalk.green("Session resumed on this machine."));
|
|
184
221
|
console.log(chalk.green("Message sent."));
|
|
185
222
|
}
|
|
186
223
|
process.exit(0);
|
|
187
224
|
}
|
|
188
225
|
|
|
189
|
-
export { handleSendCommand, parseSendArgs };
|
|
226
|
+
export { EXIT_SESSION_NOT_LIVE, handleSendCommand, parseSendArgs };
|