very-happy-cli 0.2.128 → 0.2.129

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 (45) hide show
  1. package/dist/{AcpBackend-D7987ody.mjs → AcpBackend-MAU4POiE.mjs} +16 -4
  2. package/dist/{AcpBackend-BYU6J2n0.cjs → AcpBackend-kU2VqiYx.cjs} +16 -4
  3. package/dist/{AcpSessionManager-artXJgqb.cjs → AcpSessionManager-BWasT5jq.cjs} +1 -1
  4. package/dist/{AcpSessionManager-BwrjVZyn.mjs → AcpSessionManager-uSGDDRqF.mjs} +1 -1
  5. package/dist/{agentGuidance-B1xYgHx6.cjs → agentGuidance-B1PsijGg.cjs} +1 -1
  6. package/dist/{agentGuidance-BPGPaNlo.mjs → agentGuidance-DlZ5s0Om.mjs} +1 -1
  7. package/dist/codex/happyMcpStdioBridge.cjs +2 -2
  8. package/dist/codex/happyMcpStdioBridge.mjs +2 -2
  9. package/dist/{config-Dmkzs3o4.cjs → config-DswZvA8V.cjs} +4 -4
  10. package/dist/{config-DSBE0Az0.mjs → config-_DKtp9qs.mjs} +4 -4
  11. package/dist/{index-35FahgEU.mjs → index-1QwKRLYG.mjs} +4 -4
  12. package/dist/{index-D_YVlpsW.cjs → index-BdZ7Dlg0.cjs} +184 -86
  13. package/dist/{index-m0Dnccc_.mjs → index-FMMrmSa2.mjs} +115 -32
  14. package/dist/{index-vyTJsT_R.cjs → index-dqKLs4dZ.cjs} +114 -31
  15. package/dist/{index-CJmXLSQc.cjs → index-lwOIU7K9.cjs} +4 -4
  16. package/dist/{index-CfM6ewd8.mjs → index-tr2Fqhby.mjs} +177 -83
  17. package/dist/index.cjs +4 -4
  18. package/dist/index.mjs +4 -4
  19. package/dist/{installTerminalHooks-ClrFe2fA.mjs → installTerminalHooks-B3a0ugvz.mjs} +4 -4
  20. package/dist/{installTerminalHooks-C1zwiJJ2.cjs → installTerminalHooks-CV2LAKXO.cjs} +4 -4
  21. package/dist/lib.cjs +2 -2
  22. package/dist/lib.d.cts +5 -0
  23. package/dist/lib.d.mts +5 -0
  24. package/dist/lib.mjs +2 -2
  25. package/dist/{limits-CrwtFbi8.cjs → limits-B5wJ5Slz.cjs} +7 -7
  26. package/dist/{limits-BNTLh2lw.mjs → limits-C41sn_OJ.mjs} +7 -7
  27. package/dist/{mcp-Bc_mmJt8.cjs → mcp-B7lwVQT8.cjs} +4 -4
  28. package/dist/{mcp-BsohER5A.mjs → mcp-BHNVwrwS.mjs} +4 -4
  29. package/dist/{runGemini-B9S85Vms.mjs → runGemini-FNZrH8yX.mjs} +6 -6
  30. package/dist/{runGemini-B2GesRWm.cjs → runGemini-gbflWQ3_.cjs} +6 -6
  31. package/dist/{runOpenClaw-Byhq-B1y.mjs → runOpenClaw-3EF_Rqv_.mjs} +5 -5
  32. package/dist/{runOpenClaw-DCK-R8qe.cjs → runOpenClaw-CmhYI7OB.cjs} +5 -5
  33. package/dist/{send-DQS1zNWp.mjs → send-DV7IeBAv.mjs} +4 -4
  34. package/dist/{send-CPdT1nOg.cjs → send-DqedYZtc.cjs} +4 -4
  35. package/dist/{sessions-DC0IKaD9.cjs → sessions-Bz243hZ9.cjs} +4 -4
  36. package/dist/{sessions-DIOdWnPe.mjs → sessions-ieB0bLb5.mjs} +4 -4
  37. package/dist/{spawn-DrnCW2QK.cjs → spawn-BXwwueEs.cjs} +4 -4
  38. package/dist/{spawn-DV4pIAHZ.mjs → spawn-CcqzmjhT.mjs} +4 -4
  39. package/dist/{teams-CwXEJs9I.cjs → teams-BtI6h4Dw.cjs} +4 -4
  40. package/dist/{teams-DlTHOiCk.mjs → teams-Bx79Wr9-.mjs} +4 -4
  41. package/dist/{todo-DrME15xq.cjs → todo-B-Kj9lXl.cjs} +3 -3
  42. package/dist/{todo-BwXURAbQ.mjs → todo-CGRuBaiH.mjs} +3 -3
  43. package/dist/{types-DfatCoQL.cjs → types-Ba9u0uZL.cjs} +19 -5
  44. package/dist/{types-CFs8FmiY.mjs → types-BvYEAHds.mjs} +19 -5
  45. package/package.json +7 -7
package/dist/lib.d.mts CHANGED
@@ -561,6 +561,9 @@ type Metadata = {
561
561
  code: string;
562
562
  value: string;
563
563
  description?: string | null;
564
+ resolvedModel?: string;
565
+ reasoningEfforts?: string[];
566
+ defaultReasoningEffort?: string;
564
567
  }>;
565
568
  currentModelCode?: string;
566
569
  /** Resolved SDK model when no per-message model override was supplied. */
@@ -1087,6 +1090,8 @@ declare const SPAWN_AGENTS: readonly ["claude", "codex", "gemini", "openclaw", "
1087
1090
  type SpawnAgent = (typeof SPAWN_AGENTS)[number];
1088
1091
 
1089
1092
  interface SpawnSessionOptions {
1093
+ /** Optional initial model; absent preserves the runner default. */
1094
+ model?: string;
1090
1095
  machineId?: string;
1091
1096
  directory: string;
1092
1097
  sessionId?: string;
package/dist/lib.mjs CHANGED
@@ -1,5 +1,5 @@
1
- export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema } from './types-CFs8FmiY.mjs';
2
- export { c as configuration, l as logger } from './limits-BNTLh2lw.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema } from './types-BvYEAHds.mjs';
2
+ export { c as configuration, l as logger } from './limits-C41sn_OJ.mjs';
3
3
  import 'axios';
4
4
  import 'node:events';
5
5
  import 'socket.io-client';
@@ -30,7 +30,7 @@ function _interopNamespaceDefault(e) {
30
30
  var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
31
31
 
32
32
  var name = "very-happy-cli";
33
- var version = "0.2.128";
33
+ var version = "0.2.129";
34
34
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
35
35
  var author = "Kirill Dubovitskiy";
36
36
  var contributors = [
@@ -143,12 +143,12 @@ var dependencies = {
143
143
  zod: "^4.0.0"
144
144
  };
145
145
  var optionalDependencies = {
146
- "very-happy-tools-arm64-darwin": "0.2.128",
147
- "very-happy-tools-x64-darwin": "0.2.128",
148
- "very-happy-tools-arm64-linux": "0.2.128",
149
- "very-happy-tools-x64-linux": "0.2.128",
150
- "very-happy-tools-arm64-win32": "0.2.128",
151
- "very-happy-tools-x64-win32": "0.2.128"
146
+ "very-happy-tools-arm64-darwin": "0.2.129",
147
+ "very-happy-tools-x64-darwin": "0.2.129",
148
+ "very-happy-tools-arm64-linux": "0.2.129",
149
+ "very-happy-tools-x64-linux": "0.2.129",
150
+ "very-happy-tools-arm64-win32": "0.2.129",
151
+ "very-happy-tools-x64-win32": "0.2.129"
152
152
  };
153
153
  var devDependencies = {
154
154
  "@slopus/happy-wire": "workspace:*",
@@ -9,7 +9,7 @@ import chalk from 'chalk';
9
9
  import { inspect } from 'node:util';
10
10
 
11
11
  var name = "very-happy-cli";
12
- var version = "0.2.128";
12
+ var version = "0.2.129";
13
13
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
14
14
  var author = "Kirill Dubovitskiy";
15
15
  var contributors = [
@@ -122,12 +122,12 @@ var dependencies = {
122
122
  zod: "^4.0.0"
123
123
  };
124
124
  var optionalDependencies = {
125
- "very-happy-tools-arm64-darwin": "0.2.128",
126
- "very-happy-tools-x64-darwin": "0.2.128",
127
- "very-happy-tools-arm64-linux": "0.2.128",
128
- "very-happy-tools-x64-linux": "0.2.128",
129
- "very-happy-tools-arm64-win32": "0.2.128",
130
- "very-happy-tools-x64-win32": "0.2.128"
125
+ "very-happy-tools-arm64-darwin": "0.2.129",
126
+ "very-happy-tools-x64-darwin": "0.2.129",
127
+ "very-happy-tools-arm64-linux": "0.2.129",
128
+ "very-happy-tools-x64-linux": "0.2.129",
129
+ "very-happy-tools-arm64-win32": "0.2.129",
130
+ "very-happy-tools-x64-win32": "0.2.129"
131
131
  };
132
132
  var devDependencies = {
133
133
  "@slopus/happy-wire": "workspace:*",
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var agentGuidance = require('./agentGuidance-B1xYgHx6.cjs');
3
+ var agentGuidance = require('./agentGuidance-B1PsijGg.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('./index-D_YVlpsW.cjs');
8
- var persistence = require('./limits-CrwtFbi8.cjs');
7
+ var index = require('./index-BdZ7Dlg0.cjs');
8
+ var persistence = require('./limits-B5wJ5Slz.cjs');
9
9
  require('node:fs/promises');
10
10
  require('node:os');
11
11
  require('node:crypto');
@@ -13,7 +13,7 @@ require('axios');
13
13
  require('tweetnacl');
14
14
  require('socket.io-client');
15
15
  require('node:child_process');
16
- require('./types-DfatCoQL.cjs');
16
+ require('./types-Ba9u0uZL.cjs');
17
17
  require('node:fs');
18
18
  require('node:path');
19
19
  require('chalk');
@@ -1,9 +1,9 @@
1
- import { r as registerTeamsTools } from './agentGuidance-BPGPaNlo.mjs';
1
+ import { r as registerTeamsTools } from './agentGuidance-DlZ5s0Om.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 { p as pushClipboardViaDaemon, k as setTerminalTitleViaDaemon, m as registerAssistantSessionTools } from './index-CfM6ewd8.mjs';
6
- import { l as logger, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, e as CLIPBOARD_MAX_BYTES } from './limits-BNTLh2lw.mjs';
5
+ import { p as pushClipboardViaDaemon, k as setTerminalTitleViaDaemon, m as registerAssistantSessionTools } from './index-tr2Fqhby.mjs';
6
+ import { l as logger, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, e as CLIPBOARD_MAX_BYTES } from './limits-C41sn_OJ.mjs';
7
7
  import 'node:fs/promises';
8
8
  import 'node:os';
9
9
  import 'node:crypto';
@@ -11,7 +11,7 @@ import 'axios';
11
11
  import 'tweetnacl';
12
12
  import 'socket.io-client';
13
13
  import 'node:child_process';
14
- import './types-CFs8FmiY.mjs';
14
+ import './types-BvYEAHds.mjs';
15
15
  import 'node:fs';
16
16
  import 'node:path';
17
17
  import 'chalk';
@@ -2,11 +2,11 @@ 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 { g as connectionState, A as ApiClient, e as errorLogMetadata, p as projectPath, d as contentLogMetadata } from './types-CFs8FmiY.mjs';
6
- import { l as logger, g as readSettings, i as encodeBase64 } from './limits-BNTLh2lw.mjs';
7
- import { K as GEMINI_API_KEY_ENV, L as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, F as BasePermissionHandler, N as BaseReasoningProcessor, n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, B as hashObject, O as MessageBuffer, Q as CHANGE_TITLE_INSTRUCTION, y as registerKillSessionHandler, C as startHappyServer } from './index-CfM6ewd8.mjs';
8
- import { A as AcpBackend } from './AcpBackend-D7987ody.mjs';
9
- import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-DSBE0Az0.mjs';
5
+ import { f as connectionState, A as ApiClient, e as errorLogMetadata, p as projectPath, d as contentLogMetadata } from './types-BvYEAHds.mjs';
6
+ import { l as logger, g as readSettings, i as encodeBase64 } from './limits-C41sn_OJ.mjs';
7
+ import { Q as GEMINI_API_KEY_ENV, R as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, K as BasePermissionHandler, U as BaseReasoningProcessor, n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, B as hashObject, V as MessageBuffer, W as CHANGE_TITLE_INSTRUCTION, y as registerKillSessionHandler, C as startHappyServer } from './index-tr2Fqhby.mjs';
8
+ import { A as AcpBackend } from './AcpBackend-MAU4POiE.mjs';
9
+ import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-_DKtp9qs.mjs';
10
10
  import 'axios';
11
11
  import 'node:events';
12
12
  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-BPGPaNlo.mjs';
35
+ import './agentGuidance-DlZ5s0Om.mjs';
36
36
  import '@anthropic-ai/claude-agent-sdk';
37
37
  import 'ps-list';
38
38
  import 'tmp';
@@ -4,11 +4,11 @@ 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 api = require('./types-DfatCoQL.cjs');
8
- var persistence = require('./limits-CrwtFbi8.cjs');
9
- var index = require('./index-D_YVlpsW.cjs');
10
- var AcpBackend = require('./AcpBackend-BYU6J2n0.cjs');
11
- var config = require('./config-Dmkzs3o4.cjs');
7
+ var api = require('./types-Ba9u0uZL.cjs');
8
+ var persistence = require('./limits-B5wJ5Slz.cjs');
9
+ var index = require('./index-BdZ7Dlg0.cjs');
10
+ var AcpBackend = require('./AcpBackend-kU2VqiYx.cjs');
11
+ var config = require('./config-DswZvA8V.cjs');
12
12
  require('axios');
13
13
  require('node:events');
14
14
  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-B1xYgHx6.cjs');
37
+ require('./agentGuidance-B1PsijGg.cjs');
38
38
  require('@anthropic-ai/claude-agent-sdk');
39
39
  require('ps-list');
40
40
  require('tmp');
@@ -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 { e as errorLogMetadata, d as contentLogMetadata, g as connectionState, A as ApiClient } from './types-CFs8FmiY.mjs';
7
- import { A as AcpSessionManager } from './AcpSessionManager-BwrjVZyn.mjs';
8
- import { f as ensurePrivateDirectorySync, h as hardenPrivateFileSync, w as writePrivateFileSync, g as readSettings, i as encodeBase64, l as logger, c as configuration } from './limits-BNTLh2lw.mjs';
9
- import { n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, y as registerKillSessionHandler } from './index-CfM6ewd8.mjs';
6
+ import { e as errorLogMetadata, d as contentLogMetadata, f as connectionState, A as ApiClient } from './types-BvYEAHds.mjs';
7
+ import { A as AcpSessionManager } from './AcpSessionManager-uSGDDRqF.mjs';
8
+ import { f as ensurePrivateDirectorySync, h as hardenPrivateFileSync, w as writePrivateFileSync, g as readSettings, i as encodeBase64, l as logger, c as configuration } from './limits-C41sn_OJ.mjs';
9
+ import { n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, y as registerKillSessionHandler } from './index-tr2Fqhby.mjs';
10
10
  import WebSocket from 'ws';
11
11
  import * as ed from '@noble/ed25519';
12
12
  import { sha512 } from '@noble/hashes/sha2.js';
@@ -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-BPGPaNlo.mjs';
35
+ import './agentGuidance-DlZ5s0Om.mjs';
36
36
  import 'ink';
37
37
  import 'react';
38
38
  import '@anthropic-ai/claude-agent-sdk';
@@ -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 api = require('./types-DfatCoQL.cjs');
9
- var AcpSessionManager = require('./AcpSessionManager-artXJgqb.cjs');
10
- var persistence = require('./limits-CrwtFbi8.cjs');
11
- var index = require('./index-D_YVlpsW.cjs');
8
+ var api = require('./types-Ba9u0uZL.cjs');
9
+ var AcpSessionManager = require('./AcpSessionManager-BWasT5jq.cjs');
10
+ var persistence = require('./limits-B5wJ5Slz.cjs');
11
+ var index = require('./index-BdZ7Dlg0.cjs');
12
12
  var WebSocket = require('ws');
13
13
  var ed = require('@noble/ed25519');
14
14
  var sha2_js = require('@noble/hashes/sha2.js');
@@ -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-B1xYgHx6.cjs');
37
+ require('./agentGuidance-B1PsijGg.cjs');
38
38
  require('ink');
39
39
  require('react');
40
40
  require('@anthropic-ai/claude-agent-sdk');
@@ -1,15 +1,15 @@
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 './limits-BNTLh2lw.mjs';
5
- import { d as sendUserMessage, a as sessionWebUrl } from './index-CfM6ewd8.mjs';
4
+ import { r as readPersistedSessions, c as configuration } from './limits-C41sn_OJ.mjs';
5
+ import { d as sendUserMessage, a as sessionWebUrl } from './index-tr2Fqhby.mjs';
6
6
  import 'node:fs/promises';
7
7
  import 'node:os';
8
8
  import 'zod';
9
9
  import 'node:crypto';
10
10
  import 'tweetnacl';
11
11
  import 'node:util';
12
- import './types-CFs8FmiY.mjs';
12
+ import './types-BvYEAHds.mjs';
13
13
  import 'axios';
14
14
  import 'node:events';
15
15
  import 'socket.io-client';
@@ -28,7 +28,7 @@ import 'fs';
28
28
  import 'node:readline';
29
29
  import '@anthropic-ai/sandbox-runtime';
30
30
  import 'expo-server-sdk';
31
- import './agentGuidance-BPGPaNlo.mjs';
31
+ import './agentGuidance-DlZ5s0Om.mjs';
32
32
  import 'ink';
33
33
  import 'react';
34
34
  import '@anthropic-ai/claude-agent-sdk';
@@ -3,15 +3,15 @@
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-CrwtFbi8.cjs');
7
- var index = require('./index-D_YVlpsW.cjs');
6
+ var persistence = require('./limits-B5wJ5Slz.cjs');
7
+ var index = require('./index-BdZ7Dlg0.cjs');
8
8
  require('node:fs/promises');
9
9
  require('node:os');
10
10
  require('zod');
11
11
  require('node:crypto');
12
12
  require('tweetnacl');
13
13
  require('node:util');
14
- require('./types-DfatCoQL.cjs');
14
+ require('./types-Ba9u0uZL.cjs');
15
15
  require('axios');
16
16
  require('node:events');
17
17
  require('socket.io-client');
@@ -30,7 +30,7 @@ require('fs');
30
30
  require('node:readline');
31
31
  require('@anthropic-ai/sandbox-runtime');
32
32
  require('expo-server-sdk');
33
- require('./agentGuidance-B1xYgHx6.cjs');
33
+ require('./agentGuidance-B1PsijGg.cjs');
34
34
  require('ink');
35
35
  require('react');
36
36
  require('@anthropic-ai/claude-agent-sdk');
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var index = require('./index-D_YVlpsW.cjs');
5
- var api = require('./types-DfatCoQL.cjs');
4
+ var index = require('./index-BdZ7Dlg0.cjs');
5
+ var api = require('./types-Ba9u0uZL.cjs');
6
6
  require('node:os');
7
7
  require('node:crypto');
8
- require('./limits-CrwtFbi8.cjs');
8
+ require('./limits-B5wJ5Slz.cjs');
9
9
  require('node:fs/promises');
10
10
  require('node:fs');
11
11
  require('node:path');
@@ -14,7 +14,7 @@ require('tweetnacl');
14
14
  require('node:util');
15
15
  require('cross-spawn');
16
16
  require('node:readline');
17
- require('./agentGuidance-B1xYgHx6.cjs');
17
+ require('./agentGuidance-B1PsijGg.cjs');
18
18
  require('fs/promises');
19
19
  require('ink');
20
20
  require('react');
@@ -1,9 +1,9 @@
1
1
  import chalk from 'chalk';
2
- import { D as DEFAULT_RECENT_LIMIT, M as MAX_READ_LIMIT, l as listAccountSessions, e as listSessions, r as readSessionTranscript, f as stopSession, g as resolvePermissionRequest, h as archiveSession } from './index-CfM6ewd8.mjs';
3
- import { i as isValidSessionId } from './types-CFs8FmiY.mjs';
2
+ import { D as DEFAULT_RECENT_LIMIT, M as MAX_READ_LIMIT, l as listAccountSessions, e as listSessions, r as readSessionTranscript, f as stopSession, g as resolvePermissionRequest, h as archiveSession } from './index-tr2Fqhby.mjs';
3
+ import { i as isValidSessionId } from './types-BvYEAHds.mjs';
4
4
  import 'node:os';
5
5
  import 'node:crypto';
6
- import './limits-BNTLh2lw.mjs';
6
+ import './limits-C41sn_OJ.mjs';
7
7
  import 'node:fs/promises';
8
8
  import 'node:fs';
9
9
  import 'node:path';
@@ -12,7 +12,7 @@ import 'tweetnacl';
12
12
  import 'node:util';
13
13
  import 'cross-spawn';
14
14
  import 'node:readline';
15
- import './agentGuidance-BPGPaNlo.mjs';
15
+ import './agentGuidance-DlZ5s0Om.mjs';
16
16
  import 'fs/promises';
17
17
  import 'ink';
18
18
  import 'react';
@@ -3,11 +3,11 @@
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-D_YVlpsW.cjs');
7
- var persistence = require('./limits-CrwtFbi8.cjs');
6
+ var index = require('./index-BdZ7Dlg0.cjs');
7
+ var persistence = require('./limits-B5wJ5Slz.cjs');
8
8
  require('node:os');
9
9
  require('node:crypto');
10
- require('./types-DfatCoQL.cjs');
10
+ require('./types-Ba9u0uZL.cjs');
11
11
  require('axios');
12
12
  require('node:events');
13
13
  require('socket.io-client');
@@ -29,7 +29,7 @@ require('tweetnacl');
29
29
  require('node:readline');
30
30
  require('@anthropic-ai/sandbox-runtime');
31
31
  require('expo-server-sdk');
32
- require('./agentGuidance-B1xYgHx6.cjs');
32
+ require('./agentGuidance-B1PsijGg.cjs');
33
33
  require('ink');
34
34
  require('react');
35
35
  require('@anthropic-ai/claude-agent-sdk');
@@ -1,11 +1,11 @@
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, i as isValidSpawnOrigin, b as sanitizeSpawnPermissionMode, A as ALLOWED_SPAWN_PERMISSION_MODES, S as SPAWN_AGENTS, w as waitForSessionKey, d as sendUserMessage } from './index-CfM6ewd8.mjs';
5
- import { l as logger } from './limits-BNTLh2lw.mjs';
4
+ import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, i as isValidSpawnOrigin, b as sanitizeSpawnPermissionMode, A as ALLOWED_SPAWN_PERMISSION_MODES, S as SPAWN_AGENTS, w as waitForSessionKey, d as sendUserMessage } from './index-tr2Fqhby.mjs';
5
+ import { l as logger } from './limits-C41sn_OJ.mjs';
6
6
  import 'node:os';
7
7
  import 'node:crypto';
8
- import './types-CFs8FmiY.mjs';
8
+ import './types-BvYEAHds.mjs';
9
9
  import 'axios';
10
10
  import 'node:events';
11
11
  import 'socket.io-client';
@@ -27,7 +27,7 @@ import 'tweetnacl';
27
27
  import 'node:readline';
28
28
  import '@anthropic-ai/sandbox-runtime';
29
29
  import 'expo-server-sdk';
30
- import './agentGuidance-BPGPaNlo.mjs';
30
+ import './agentGuidance-DlZ5s0Om.mjs';
31
31
  import 'ink';
32
32
  import 'react';
33
33
  import '@anthropic-ai/claude-agent-sdk';
@@ -4,15 +4,15 @@ var os = require('node:os');
4
4
  var promises = require('node:fs/promises');
5
5
  var z = require('zod');
6
6
  var node_crypto = require('node:crypto');
7
- var agentGuidance = require('./agentGuidance-B1xYgHx6.cjs');
8
- var persistence = require('./limits-CrwtFbi8.cjs');
7
+ var agentGuidance = require('./agentGuidance-B1PsijGg.cjs');
8
+ var persistence = require('./limits-B5wJ5Slz.cjs');
9
9
  var path = require('node:path');
10
- var index = require('./index-D_YVlpsW.cjs');
10
+ var index = require('./index-BdZ7Dlg0.cjs');
11
11
  require('node:fs');
12
12
  require('tweetnacl');
13
13
  require('chalk');
14
14
  require('node:util');
15
- require('./types-DfatCoQL.cjs');
15
+ require('./types-Ba9u0uZL.cjs');
16
16
  require('axios');
17
17
  require('node:events');
18
18
  require('socket.io-client');
@@ -2,15 +2,15 @@ import { homedir } from 'node:os';
2
2
  import { unlink, rmdir, mkdir, lstat, readFile, writeFile, rename } from 'node:fs/promises';
3
3
  import { z } from 'zod';
4
4
  import { createHash, randomUUID } from 'node:crypto';
5
- import { d as teamRequest, e as createTeamsClient } from './agentGuidance-BPGPaNlo.mjs';
6
- import { d as readCredentialsForConfiguredRelay } from './limits-BNTLh2lw.mjs';
5
+ import { d as teamRequest, e as createTeamsClient } from './agentGuidance-DlZ5s0Om.mjs';
6
+ import { d as readCredentialsForConfiguredRelay } from './limits-C41sn_OJ.mjs';
7
7
  import { join, resolve, dirname } from 'node:path';
8
- import { T as TEAM_SKILL } from './index-CfM6ewd8.mjs';
8
+ import { T as TEAM_SKILL } from './index-tr2Fqhby.mjs';
9
9
  import 'node:fs';
10
10
  import 'tweetnacl';
11
11
  import 'chalk';
12
12
  import 'node:util';
13
- import './types-CFs8FmiY.mjs';
13
+ import './types-BvYEAHds.mjs';
14
14
  import 'axios';
15
15
  import 'node:events';
16
16
  import 'socket.io-client';
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var persistence = require('./limits-CrwtFbi8.cjs');
4
- var api = require('./types-DfatCoQL.cjs');
5
- var agentGuidance = require('./agentGuidance-B1xYgHx6.cjs');
3
+ var persistence = require('./limits-B5wJ5Slz.cjs');
4
+ var api = require('./types-Ba9u0uZL.cjs');
5
+ var agentGuidance = require('./agentGuidance-B1PsijGg.cjs');
6
6
  require('node:fs/promises');
7
7
  require('node:fs');
8
8
  require('node:os');
@@ -1,6 +1,6 @@
1
- import { d as readCredentialsForConfiguredRelay, c as configuration } from './limits-BNTLh2lw.mjs';
2
- import { b as createBuiltinTodoClient, B as BUILTIN_TODO_SKILL } from './types-CFs8FmiY.mjs';
3
- import { c as readTeamScope, t as teamScopePath } from './agentGuidance-BPGPaNlo.mjs';
1
+ import { d as readCredentialsForConfiguredRelay, c as configuration } from './limits-C41sn_OJ.mjs';
2
+ import { b as createBuiltinTodoClient, B as BUILTIN_TODO_SKILL } from './types-BvYEAHds.mjs';
3
+ import { c as readTeamScope, t as teamScopePath } from './agentGuidance-DlZ5s0Om.mjs';
4
4
  import 'node:fs/promises';
5
5
  import 'node:fs';
6
6
  import 'node:os';
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var axios = require('axios');
4
- var persistence = require('./limits-CrwtFbi8.cjs');
4
+ var persistence = require('./limits-B5wJ5Slz.cjs');
5
5
  var node_events = require('node:events');
6
6
  var socket_ioClient = require('socket.io-client');
7
7
  var z = require('zod');
@@ -1335,7 +1335,7 @@ class RpcHandlerManager {
1335
1335
  }
1336
1336
  }
1337
1337
 
1338
- const __dirname$1 = path.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('types-DfatCoQL.cjs', document.baseURI).href))));
1338
+ const __dirname$1 = path.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('types-Ba9u0uZL.cjs', document.baseURI).href))));
1339
1339
  function projectPath() {
1340
1340
  const path$1 = path.resolve(__dirname$1, "..");
1341
1341
  return path$1;
@@ -13414,7 +13414,8 @@ class CodexAppServerClient {
13414
13414
  throw new Error("No active thread. Call startThread first.");
13415
13415
  }
13416
13416
  const input = [
13417
- { type: "text", text: prompt }
13417
+ { type: "text", text: prompt },
13418
+ ...(opts?.images ?? []).map((path) => ({ type: "localImage", path }))
13418
13419
  ];
13419
13420
  const params = {
13420
13421
  threadId: this._threadId,
@@ -13522,6 +13523,19 @@ class CodexAppServerClient {
13522
13523
  // ─── JSON-RPC transport ─────────────────────────────────────
13523
13524
  /** Default timeout for RPC requests (ms). */
13524
13525
  static REQUEST_TIMEOUT_MS = 3e4;
13526
+ async listModels() {
13527
+ const models = [];
13528
+ let cursor = null;
13529
+ const seenCursors = /* @__PURE__ */ new Set();
13530
+ do {
13531
+ const response = await this.request("model/list", { limit: 100, cursor, includeHidden: false });
13532
+ models.push(...response.data.filter((model) => !model.hidden));
13533
+ cursor = response.nextCursor ?? null;
13534
+ if (cursor && seenCursors.has(cursor)) throw new Error("Repeated model/list cursor");
13535
+ if (cursor) seenCursors.add(cursor);
13536
+ } while (cursor);
13537
+ return models;
13538
+ }
13525
13539
  request(method, params, timeoutMs) {
13526
13540
  const timeout = timeoutMs ?? CodexAppServerClient.REQUEST_TIMEOUT_MS;
13527
13541
  return new Promise((resolve, reject) => {
@@ -14228,12 +14242,12 @@ class ApiMachineClient {
14228
14242
  this.stopSessionHandler = stopSession;
14229
14243
  this.listTrackedSessionIds = listTrackedSessionIds ?? null;
14230
14244
  this.rpcHandlerManager.registerHandler("spawn-happy-session", async (params) => {
14231
- const { directory, sessionId, machineId, approvedNewDirectoryCreation, agent, environmentVariables, token, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, forkedFromMessageId, importedFromClaudeSessionId, variant, forceNew, permissionMode } = params || {};
14245
+ const { directory, sessionId, machineId, approvedNewDirectoryCreation, agent, environmentVariables, token, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, forkedFromMessageId, importedFromClaudeSessionId, variant, forceNew, permissionMode, model } = params || {};
14232
14246
  persistence.logger.debug("[API MACHINE] Spawning session:", summarizeSpawnSessionForLog(params));
14233
14247
  if (!directory && variant !== "assistant") {
14234
14248
  throw new Error("Directory is required");
14235
14249
  }
14236
- const result = await spawnSession({ directory: directory || "", sessionId, machineId, approvedNewDirectoryCreation, agent, environmentVariables, token, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, forkedFromMessageId, importedFromClaudeSessionId: typeof importedFromClaudeSessionId === "string" ? importedFromClaudeSessionId : void 0, variant: variant === "assistant" ? "assistant" : void 0, forceNew: forceNew === true, permissionMode: typeof permissionMode === "string" ? permissionMode : void 0 });
14250
+ const result = await spawnSession({ directory: directory || "", sessionId, machineId, approvedNewDirectoryCreation, agent, environmentVariables, token, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, forkedFromMessageId, importedFromClaudeSessionId: typeof importedFromClaudeSessionId === "string" ? importedFromClaudeSessionId : void 0, variant: variant === "assistant" ? "assistant" : void 0, forceNew: forceNew === true, model: typeof model === "string" ? model : void 0, permissionMode: typeof permissionMode === "string" ? permissionMode : void 0 });
14237
14251
  switch (result.type) {
14238
14252
  case "success":
14239
14253
  persistence.logger.debug(`[API MACHINE] Spawned session ${result.sessionId}`);
@@ -1,5 +1,5 @@
1
1
  import axios from 'axios';
2
- import { l as logger, i as encodeBase64, j as encrypt, k as decrypt, m as decodeBase64, c as configuration, o as decryptBlob, q as prepareClipboardText, g as readSettings, r as readPersistedSessions, s as credentialRelayProblem, p as packageJson, t as readTrackedClaudeSessionIds, u as libsodiumEncryptForPublicKey, v as libsodiumPublicKeyFromSecretKey, x as getRandomBytes, y as redactLogValue } from './limits-BNTLh2lw.mjs';
2
+ import { l as logger, i as encodeBase64, j as encrypt, k as decrypt, m as decodeBase64, c as configuration, o as decryptBlob, q as prepareClipboardText, g as readSettings, r as readPersistedSessions, s as credentialRelayProblem, p as packageJson, t as readTrackedClaudeSessionIds, u as libsodiumEncryptForPublicKey, v as libsodiumPublicKeyFromSecretKey, x as getRandomBytes, y as redactLogValue } from './limits-C41sn_OJ.mjs';
3
3
  import { EventEmitter } from 'node:events';
4
4
  import { io } from 'socket.io-client';
5
5
  import * as z from 'zod';
@@ -13392,7 +13392,8 @@ class CodexAppServerClient {
13392
13392
  throw new Error("No active thread. Call startThread first.");
13393
13393
  }
13394
13394
  const input = [
13395
- { type: "text", text: prompt }
13395
+ { type: "text", text: prompt },
13396
+ ...(opts?.images ?? []).map((path) => ({ type: "localImage", path }))
13396
13397
  ];
13397
13398
  const params = {
13398
13399
  threadId: this._threadId,
@@ -13500,6 +13501,19 @@ class CodexAppServerClient {
13500
13501
  // ─── JSON-RPC transport ─────────────────────────────────────
13501
13502
  /** Default timeout for RPC requests (ms). */
13502
13503
  static REQUEST_TIMEOUT_MS = 3e4;
13504
+ async listModels() {
13505
+ const models = [];
13506
+ let cursor = null;
13507
+ const seenCursors = /* @__PURE__ */ new Set();
13508
+ do {
13509
+ const response = await this.request("model/list", { limit: 100, cursor, includeHidden: false });
13510
+ models.push(...response.data.filter((model) => !model.hidden));
13511
+ cursor = response.nextCursor ?? null;
13512
+ if (cursor && seenCursors.has(cursor)) throw new Error("Repeated model/list cursor");
13513
+ if (cursor) seenCursors.add(cursor);
13514
+ } while (cursor);
13515
+ return models;
13516
+ }
13503
13517
  request(method, params, timeoutMs) {
13504
13518
  const timeout = timeoutMs ?? CodexAppServerClient.REQUEST_TIMEOUT_MS;
13505
13519
  return new Promise((resolve, reject) => {
@@ -14206,12 +14220,12 @@ class ApiMachineClient {
14206
14220
  this.stopSessionHandler = stopSession;
14207
14221
  this.listTrackedSessionIds = listTrackedSessionIds ?? null;
14208
14222
  this.rpcHandlerManager.registerHandler("spawn-happy-session", async (params) => {
14209
- const { directory, sessionId, machineId, approvedNewDirectoryCreation, agent, environmentVariables, token, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, forkedFromMessageId, importedFromClaudeSessionId, variant, forceNew, permissionMode } = params || {};
14223
+ const { directory, sessionId, machineId, approvedNewDirectoryCreation, agent, environmentVariables, token, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, forkedFromMessageId, importedFromClaudeSessionId, variant, forceNew, permissionMode, model } = params || {};
14210
14224
  logger.debug("[API MACHINE] Spawning session:", summarizeSpawnSessionForLog(params));
14211
14225
  if (!directory && variant !== "assistant") {
14212
14226
  throw new Error("Directory is required");
14213
14227
  }
14214
- const result = await spawnSession({ directory: directory || "", sessionId, machineId, approvedNewDirectoryCreation, agent, environmentVariables, token, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, forkedFromMessageId, importedFromClaudeSessionId: typeof importedFromClaudeSessionId === "string" ? importedFromClaudeSessionId : void 0, variant: variant === "assistant" ? "assistant" : void 0, forceNew: forceNew === true, permissionMode: typeof permissionMode === "string" ? permissionMode : void 0 });
14228
+ const result = await spawnSession({ directory: directory || "", sessionId, machineId, approvedNewDirectoryCreation, agent, environmentVariables, token, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, forkedFromMessageId, importedFromClaudeSessionId: typeof importedFromClaudeSessionId === "string" ? importedFromClaudeSessionId : void 0, variant: variant === "assistant" ? "assistant" : void 0, forceNew: forceNew === true, model: typeof model === "string" ? model : void 0, permissionMode: typeof permissionMode === "string" ? permissionMode : void 0 });
14215
14229
  switch (result.type) {
14216
14230
  case "success":
14217
14231
  logger.debug(`[API MACHINE] Spawned session ${result.sessionId}`);
@@ -16179,4 +16193,4 @@ const RawJSONLinesSchema = z$1.discriminatedUnion("type", [
16179
16193
  }).passthrough()
16180
16194
  ]);
16181
16195
 
16182
- export { ApiClient as A, BUILTIN_TODO_SKILL as B, scrubTmuxClientEnv as C, decideMirrorBinding as D, MIRROR_BACKFILL_LINES_DEFAULT as E, mirrorLineKey as F, mirrorLocalId as G, detectCLIAvailability as H, InvalidateSync as I, detectResumeSupport as J, summarizeSpawnSessionForLog as K, shellescape as L, MAX_CHAT_ATTACHMENT_SOURCE_BYTES as M, fetchCliUpdateState as N, resolveCliUpdateCheckInterval as O, DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS as P, listVhTerminals as Q, RawJSONLinesSchema as R, STREAM_DELTA_MAX_CHARS as S, isValidTerminalId as T, readVhTerminal as U, sendToVhTerminal as V, TITLE_PROMPT_PREFIX as W, BOARD_ANALYZER_PROMPT_PREFIX as X, startOfflineReconnection as Y, CodexAppServerClient as Z, api as _, ApiSessionClient as a, createBuiltinTodoClient as b, createEnvelope as c, contentLogMetadata as d, errorLogMetadata as e, delay as f, connectionState as g, BUILTIN_TODO_DISCOVERY as h, isValidSessionId as i, getProjectPath as j, initializeSandbox as k, AsyncLock as l, commandOnPath as m, deriveLocalCliUpdateSummary as n, isClaudeSessionId as o, projectPath as p, getLocalHappyAgentCredentialPath as q, readLocalHappyAgentCredentials as r, streamKeyOf as s, parseExactVersion as t, compareExactVersions as u, extractCompleteLines as v, wrapCommand as w, decideBackfill as x, parseTerminalHookPayload as y, tmuxArgs as z };
16196
+ export { ApiClient as A, BUILTIN_TODO_SKILL as B, scrubTmuxClientEnv as C, decideMirrorBinding as D, MIRROR_BACKFILL_LINES_DEFAULT as E, mirrorLineKey as F, mirrorLocalId as G, detectCLIAvailability as H, InvalidateSync as I, detectResumeSupport as J, summarizeSpawnSessionForLog as K, shellescape as L, MAX_CHAT_ATTACHMENT_SOURCE_BYTES as M, fetchCliUpdateState as N, resolveCliUpdateCheckInterval as O, DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS as P, listVhTerminals as Q, RawJSONLinesSchema as R, STREAM_DELTA_MAX_CHARS as S, isValidTerminalId as T, readVhTerminal as U, sendToVhTerminal as V, TITLE_PROMPT_PREFIX as W, BOARD_ANALYZER_PROMPT_PREFIX as X, startOfflineReconnection as Y, CodexAppServerClient as Z, api as _, ApiSessionClient as a, createBuiltinTodoClient as b, createEnvelope as c, contentLogMetadata as d, errorLogMetadata as e, connectionState as f, BUILTIN_TODO_DISCOVERY as g, delay as h, isValidSessionId as i, getProjectPath as j, initializeSandbox as k, AsyncLock as l, commandOnPath as m, deriveLocalCliUpdateSummary as n, isClaudeSessionId as o, projectPath as p, getLocalHappyAgentCredentialPath as q, readLocalHappyAgentCredentials as r, streamKeyOf as s, parseExactVersion as t, compareExactVersions as u, extractCompleteLines as v, wrapCommand as w, decideBackfill as x, parseTerminalHookPayload as y, tmuxArgs as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "very-happy-cli",
3
- "version": "0.2.128",
3
+ "version": "0.2.129",
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.128",
117
- "very-happy-tools-x64-darwin": "0.2.128",
118
- "very-happy-tools-arm64-linux": "0.2.128",
119
- "very-happy-tools-x64-linux": "0.2.128",
120
- "very-happy-tools-arm64-win32": "0.2.128",
121
- "very-happy-tools-x64-win32": "0.2.128"
116
+ "very-happy-tools-arm64-darwin": "0.2.129",
117
+ "very-happy-tools-x64-darwin": "0.2.129",
118
+ "very-happy-tools-arm64-linux": "0.2.129",
119
+ "very-happy-tools-x64-linux": "0.2.129",
120
+ "very-happy-tools-arm64-win32": "0.2.129",
121
+ "very-happy-tools-x64-win32": "0.2.129"
122
122
  },
123
123
  "devDependencies": {
124
124
  "@slopus/happy-wire": "workspace:*",