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.
Files changed (53) hide show
  1. package/dist/{AcpBackend-DSt8nTYm.cjs → AcpBackend-B14xNj5L.cjs} +2 -2
  2. package/dist/{AcpBackend-YDGv4E-g.mjs → AcpBackend-Ckyadhf4.mjs} +2 -2
  3. package/dist/{AcpSessionManager-uov6I9C8.cjs → AcpSessionManager-CCHmPdrR.cjs} +1 -1
  4. package/dist/{AcpSessionManager-Cxf5HQX1.mjs → AcpSessionManager-H8t4P-IW.mjs} +1 -1
  5. package/dist/{agentGuidance-BM4kMNyr.cjs → agentGuidance-DUBXppv-.cjs} +2 -1
  6. package/dist/{agentGuidance-C8unGWp7.mjs → agentGuidance-TLYQxsm2.mjs} +2 -1
  7. package/dist/{agentHome-D68Xh2ae.mjs → agentHome-B20RWdgE.mjs} +2 -2
  8. package/dist/{agentHome-BJ7bde35.cjs → agentHome-BUsLTZnz.cjs} +2 -2
  9. package/dist/{auto-CcXxfqkC.mjs → auto-BQnncDcs.mjs} +6 -6
  10. package/dist/{auto-C-90ojIH.cjs → auto-IeldARBS.cjs} +6 -6
  11. package/dist/codex/happyMcpStdioBridge.cjs +2 -2
  12. package/dist/codex/happyMcpStdioBridge.mjs +2 -2
  13. package/dist/{config-CHJ189UJ.mjs → config-B-ocQh5V.mjs} +4 -4
  14. package/dist/{config-D23kF0_u.cjs → config-DM_xI9M6.cjs} +4 -4
  15. package/dist/{index-BacwoXzs.mjs → index-BELV05ko.mjs} +248 -29
  16. package/dist/{index-DEOVn46R.cjs → index-BUxBxSxJ.cjs} +7 -7
  17. package/dist/{index-BXA9fxbK.mjs → index-CIx3248o.mjs} +4 -4
  18. package/dist/{index-BgYZGODP.mjs → index-ZKuBjvHi.mjs} +8 -8
  19. package/dist/{index-DHrwHxHf.cjs → index-eCjkm8Y2.cjs} +252 -32
  20. package/dist/{index-D49WvbDT.cjs → index-okLyUzeD.cjs} +4 -4
  21. package/dist/index.cjs +4 -4
  22. package/dist/index.mjs +4 -4
  23. package/dist/{install-BiOXBnnS.cjs → install-BZOdxfPd.cjs} +1 -1
  24. package/dist/{install-Ca7_Z3bV.mjs → install-CoLN3whR.mjs} +1 -1
  25. package/dist/{installTerminalHooks-BF0kL0ae.cjs → installTerminalHooks-CA4OcAS7.cjs} +4 -4
  26. package/dist/{installTerminalHooks-Bpl32K75.mjs → installTerminalHooks-Dde_8t36.mjs} +4 -4
  27. package/dist/lib.cjs +2 -2
  28. package/dist/lib.mjs +2 -2
  29. package/dist/{limits-DY_sFA3J.cjs → limits-CmzISka2.cjs} +7 -7
  30. package/dist/{limits-BtAuKRl2.mjs → limits-Dt7_unH4.mjs} +7 -7
  31. package/dist/{mcp-JpqI2POW.cjs → mcp-7iDHlyCI.cjs} +4 -4
  32. package/dist/{mcp-DQkmk4VV.mjs → mcp-9Ui4nQZL.mjs} +4 -4
  33. package/dist/{piRuntime-DRbbeQ72.cjs → piRuntime-BesGGPME.cjs} +2 -2
  34. package/dist/{piRuntime-DBpe12NN.mjs → piRuntime-C4E4pgye.mjs} +2 -2
  35. package/dist/{piTerminal-BoHvPEZ_.mjs → piTerminal-CCEGCQOY.mjs} +6 -6
  36. package/dist/{piTerminal-qdJ9KZVL.cjs → piTerminal-fUogwxYr.cjs} +6 -6
  37. package/dist/{runGemini-YqH7a-7O.mjs → runGemini-BW-pEklU.mjs} +6 -6
  38. package/dist/{runGemini-CtOEFvhf.cjs → runGemini-CNPGSsSK.cjs} +6 -6
  39. package/dist/{runOpenClaw-DoqZXBvL.cjs → runOpenClaw-Bsodkg_s.cjs} +5 -5
  40. package/dist/{runOpenClaw-DSSyFQBb.mjs → runOpenClaw-NRB6-_jU.mjs} +5 -5
  41. package/dist/{send-9075kHZP.cjs → send-Bd00QcHC.cjs} +55 -17
  42. package/dist/{send-Cs-RwqNf.mjs → send-DYeSFg8s.mjs} +55 -18
  43. package/dist/{sessions-iBnYzVUK.mjs → sessions-DlPOYKLU.mjs} +4 -4
  44. package/dist/{sessions-qULzUzlI.cjs → sessions-RIFUoy_g.cjs} +4 -4
  45. package/dist/{spawn-C6fRkedx.mjs → spawn-D1bhyHbH.mjs} +4 -4
  46. package/dist/{spawn-od9V23cc.cjs → spawn-DxrfHTF4.cjs} +4 -4
  47. package/dist/{teams-CrCzU-AV.cjs → teams-Cfy0VMCo.cjs} +5 -5
  48. package/dist/{teams-CkrWQ4uM.mjs → teams-pfKHpkgL.mjs} +5 -5
  49. package/dist/{todo-aCZmSt27.mjs → todo-B2CjDg_V.mjs} +2 -2
  50. package/dist/{todo-BCT_ZPuV.cjs → todo-B4cBFzHB.cjs} +2 -2
  51. package/dist/{types-CUCU7Vw8.cjs → types-Bd_TGr0F.cjs} +22 -3
  52. package/dist/{types-BvqOVUOW.mjs → types-D5RWyBE5.mjs} +22 -4
  53. 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-BacwoXzs.mjs';
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-BvqOVUOW.mjs';
12
+ import './types-D5RWyBE5.mjs';
13
13
  import 'axios';
14
- import './limits-BtAuKRl2.mjs';
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-C8unGWp7.mjs';
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-CUCU7Vw8.cjs');
4
- var persistence = require('./limits-DY_sFA3J.cjs');
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-BvqOVUOW.mjs';
2
- export { c as configuration, l as logger } from './limits-BtAuKRl2.mjs';
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.153";
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.153",
152
- "very-happy-tools-x64-darwin": "0.2.153",
153
- "very-happy-tools-arm64-linux": "0.2.153",
154
- "very-happy-tools-x64-linux": "0.2.153",
155
- "very-happy-tools-arm64-win32": "0.2.153",
156
- "very-happy-tools-x64-win32": "0.2.153"
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.153";
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.153",
132
- "very-happy-tools-x64-darwin": "0.2.153",
133
- "very-happy-tools-arm64-linux": "0.2.153",
134
- "very-happy-tools-x64-linux": "0.2.153",
135
- "very-happy-tools-arm64-win32": "0.2.153",
136
- "very-happy-tools-x64-win32": "0.2.153"
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-BM4kMNyr.cjs');
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-CUCU7Vw8.cjs');
8
- var persistence = require('./limits-DY_sFA3J.cjs');
9
- var index$1 = require('./index-DHrwHxHf.cjs');
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-C8unGWp7.mjs';
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-BvqOVUOW.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-BtAuKRl2.mjs';
7
- import { v as checkPreviewPath, x as registerAssistantSessionTools, y as suggestTitleForPrompt } from './index-BacwoXzs.mjs';
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-DY_sFA3J.cjs');
7
- var index = require('./index-DHrwHxHf.cjs');
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-BtAuKRl2.mjs';
5
- import { P as PI_TEAMS_EXTENSION } from './index-BacwoXzs.mjs';
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-DBpe12NN.mjs';
7
- import { registerMcpTools, registerTerminalTitleSuggest } from './mcp-DQkmk4VV.mjs';
8
- import './agentGuidance-C8unGWp7.mjs';
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-BtAuKRl2.mjs';
12
+ import './limits-Dt7_unH4.mjs';
13
13
  import 'axios';
14
14
  import 'tweetnacl';
15
15
  import 'socket.io-client';
16
- import './types-BvqOVUOW.mjs';
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-BacwoXzs.mjs';
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-DRbbeQ72.cjs');
9
- var mcp = require('./mcp-JpqI2POW.cjs');
10
- require('./agentGuidance-BM4kMNyr.cjs');
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-DY_sFA3J.cjs');
14
+ require('./limits-CmzISka2.cjs');
15
15
  require('axios');
16
16
  require('tweetnacl');
17
17
  require('socket.io-client');
18
- require('./types-CUCU7Vw8.cjs');
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-DHrwHxHf.cjs');
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-BvqOVUOW.mjs';
6
- import { l as logger, r as readSettings, j as encodeBase64 } from './limits-BtAuKRl2.mjs';
7
- import { Y as GEMINI_API_KEY_ENV, Z as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, U as BasePermissionHandler, _ as BaseReasoningProcessor, B as initialMachineMetadata, C as createSessionMetadata, E as setupOfflineReconnection, H as MessageQueue2, I as hashObject, $ as MessageBuffer, a0 as CHANGE_TITLE_INSTRUCTION, N as registerKillSessionHandler, J as startHappyServer } from './index-BacwoXzs.mjs';
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-YDGv4E-g.mjs';
10
- import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-CHJ189UJ.mjs';
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-C8unGWp7.mjs';
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-CUCU7Vw8.cjs');
8
- var persistence = require('./limits-DY_sFA3J.cjs');
9
- var index = require('./index-DHrwHxHf.cjs');
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-DSt8nTYm.cjs');
12
- var config = require('./config-D23kF0_u.cjs');
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-BM4kMNyr.cjs');
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-CUCU7Vw8.cjs');
9
- var AcpSessionManager = require('./AcpSessionManager-uov6I9C8.cjs');
10
- var persistence = require('./limits-DY_sFA3J.cjs');
11
- var index$1 = require('./index-DHrwHxHf.cjs');
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-BM4kMNyr.cjs');
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-BvqOVUOW.mjs';
7
- import { A as AcpSessionManager } from './AcpSessionManager-Cxf5HQX1.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-BtAuKRl2.mjs';
9
- import { B as initialMachineMetadata, C as createSessionMetadata, E as setupOfflineReconnection, H as MessageQueue2, N as registerKillSessionHandler } from './index-BacwoXzs.mjs';
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-C8unGWp7.mjs';
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-DY_sFA3J.cjs');
7
- var index = require('./index-DHrwHxHf.cjs');
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-CUCU7Vw8.cjs');
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-BM4kMNyr.cjs');
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
- --json Machine-readable output: {"sessionId", "url", "delivered"}
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 delivery failed
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.sendUserMessage(
171
- sessionId,
172
- persisted,
173
- prompt,
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-BtAuKRl2.mjs';
5
- import { d as sendUserMessage, e as sessionWebUrl } from './index-BacwoXzs.mjs';
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-BvqOVUOW.mjs';
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-C8unGWp7.mjs';
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
- --json Machine-readable output: {"sessionId", "url", "delivered"}
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 delivery failed
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 sendUserMessage(
169
- sessionId,
170
- persisted,
171
- prompt,
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 };