very-happy-cli 0.2.152 → 0.2.153

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 (61) hide show
  1. package/dist/{AcpBackend-CogiKCng.cjs → AcpBackend-DSt8nTYm.cjs} +2 -2
  2. package/dist/{AcpBackend-Bs3wwYbt.mjs → AcpBackend-YDGv4E-g.mjs} +2 -2
  3. package/dist/{AcpSessionManager-BT8PJMEm.mjs → AcpSessionManager-Cxf5HQX1.mjs} +1 -1
  4. package/dist/{AcpSessionManager-BazkBuFo.cjs → AcpSessionManager-uov6I9C8.cjs} +1 -1
  5. package/dist/{agentGuidance-CqBn77AI.cjs → agentGuidance-BM4kMNyr.cjs} +1 -1
  6. package/dist/{agentGuidance-Daxn5Nvj.mjs → agentGuidance-C8unGWp7.mjs} +1 -1
  7. package/dist/{agentHome-CpJjrQZc.cjs → agentHome-BJ7bde35.cjs} +3 -3
  8. package/dist/{agentHome-CCYfs8Ec.mjs → agentHome-D68Xh2ae.mjs} +3 -3
  9. package/dist/{auto-DncmTDvw.cjs → auto-C-90ojIH.cjs} +7 -7
  10. package/dist/{auto-DV5emt1-.mjs → auto-CcXxfqkC.mjs} +7 -7
  11. package/dist/codex/happyMcpStdioBridge.cjs +2 -2
  12. package/dist/codex/happyMcpStdioBridge.mjs +2 -2
  13. package/dist/{config-DbKpQpdL.mjs → config-CHJ189UJ.mjs} +5 -5
  14. package/dist/{config-DeJgSMh-.cjs → config-D23kF0_u.cjs} +5 -5
  15. package/dist/{index-CN7OF2cU.mjs → index-BXA9fxbK.mjs} +5 -5
  16. package/dist/{index-BauTv2jB.mjs → index-BacwoXzs.mjs} +61 -41
  17. package/dist/{index-DahaLbu4.mjs → index-BgYZGODP.mjs} +9 -9
  18. package/dist/{index-CRaJ9k2p.cjs → index-D49WvbDT.cjs} +5 -5
  19. package/dist/{index-imt4mC41.cjs → index-DEOVn46R.cjs} +9 -9
  20. package/dist/{index-ZIW1jrYm.cjs → index-DHrwHxHf.cjs} +83 -62
  21. package/dist/index.cjs +5 -5
  22. package/dist/index.mjs +5 -5
  23. package/dist/{install-CDR3qBhs.cjs → install-BiOXBnnS.cjs} +1 -1
  24. package/dist/{install-C1K3nrxF.mjs → install-Ca7_Z3bV.mjs} +1 -1
  25. package/dist/{installPiTools-C-Lxv4Bt.mjs → installPiTools-Cj7yU9Fc.mjs} +2 -1
  26. package/dist/{installPiTools-BKnXjrVu.cjs → installPiTools-DuZ6jZvX.cjs} +3 -2
  27. package/dist/{installTerminalHooks-BoDxpaBO.cjs → installTerminalHooks-BF0kL0ae.cjs} +7 -7
  28. package/dist/{installTerminalHooks-VvmlO6Ue.mjs → installTerminalHooks-Bpl32K75.mjs} +6 -6
  29. package/dist/lib.cjs +3 -3
  30. package/dist/lib.mjs +3 -3
  31. package/dist/{limits-CKR_HJnO.mjs → limits-BtAuKRl2.mjs} +7 -7
  32. package/dist/{limits-BNTWyUaZ.cjs → limits-DY_sFA3J.cjs} +7 -7
  33. package/dist/{mcp-D4dAo5BQ.mjs → mcp-DQkmk4VV.mjs} +14 -7
  34. package/dist/{mcp-CCKCKL6l.cjs → mcp-JpqI2POW.cjs} +14 -6
  35. package/dist/piExtension.d.mts +4 -1
  36. package/dist/piExtension.mjs +24 -1
  37. package/dist/{piRuntime-CW-XA4rz.mjs → piRuntime-DBpe12NN.mjs} +2 -2
  38. package/dist/{piRuntime-Bn5ypbjH.cjs → piRuntime-DRbbeQ72.cjs} +2 -2
  39. package/dist/{piTerminal-BLSXK1u2.mjs → piTerminal-BoHvPEZ_.mjs} +8 -7
  40. package/dist/{piTerminal-B7K75aXB.cjs → piTerminal-qdJ9KZVL.cjs} +8 -7
  41. package/dist/{runGemini-Bgg1BzDK.cjs → runGemini-CtOEFvhf.cjs} +8 -8
  42. package/dist/{runGemini-D5N11LxO.mjs → runGemini-YqH7a-7O.mjs} +7 -7
  43. package/dist/{runOpenClaw-CCpyKbrn.mjs → runOpenClaw-DSSyFQBb.mjs} +6 -6
  44. package/dist/{runOpenClaw-B9qWHybc.cjs → runOpenClaw-DoqZXBvL.cjs} +6 -6
  45. package/dist/{send-wl9ei8yG.cjs → send-9075kHZP.cjs} +5 -5
  46. package/dist/{send-C44kcXz5.mjs → send-Cs-RwqNf.mjs} +5 -5
  47. package/dist/{sessions-DXJEcUg6.mjs → sessions-iBnYzVUK.mjs} +5 -5
  48. package/dist/{sessions-Tad8elmy.cjs → sessions-qULzUzlI.cjs} +5 -5
  49. package/dist/{spawn-BOlb5y1_.mjs → spawn-C6fRkedx.mjs} +5 -5
  50. package/dist/{spawn-DA8WAFmm.cjs → spawn-od9V23cc.cjs} +5 -5
  51. package/dist/{teams-Bs8lI887.mjs → teams-CkrWQ4uM.mjs} +6 -6
  52. package/dist/{teams-qVLrFcdd.cjs → teams-CrCzU-AV.cjs} +6 -6
  53. package/dist/terminalTitleSuggest-DKgX3osW.mjs +38 -0
  54. package/dist/terminalTitleSuggest-Dji8I0Jy.cjs +45 -0
  55. package/dist/{todo-mCMoGjJk.cjs → todo-BCT_ZPuV.cjs} +2 -2
  56. package/dist/{todo-nzsqGZqp.mjs → todo-aCZmSt27.mjs} +2 -2
  57. package/dist/{types-xKrxbCRv.mjs → types-BvqOVUOW.mjs} +11 -6
  58. package/dist/{types-CN28qJl7.cjs → types-CUCU7Vw8.cjs} +13 -8
  59. package/package.json +7 -7
  60. package/dist/projectPath-CSpqWdxp.mjs +0 -10
  61. package/dist/projectPath-ChLhdOyt.cjs +0 -13
@@ -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-BNTWyUaZ.cjs');
7
- var index = require('./index-ZIW1jrYm.cjs');
6
+ var persistence = require('./limits-DY_sFA3J.cjs');
7
+ var index = require('./index-DHrwHxHf.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-CN28qJl7.cjs');
15
+ require('./types-CUCU7Vw8.cjs');
16
16
  require('axios');
17
17
  require('node:events');
18
18
  require('socket.io-client');
@@ -22,7 +22,7 @@ require('fs/promises');
22
22
  require('crypto');
23
23
  require('path');
24
24
  require('cross-spawn');
25
- require('./projectPath-ChLhdOyt.cjs');
25
+ require('./terminalTitleSuggest-Dji8I0Jy.cjs');
26
26
  require('url');
27
27
  require('os');
28
28
  require('node:child_process');
@@ -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-CqBn77AI.cjs');
34
+ require('./agentGuidance-BM4kMNyr.cjs');
35
35
  require('ink');
36
36
  require('react');
37
37
  require('@anthropic-ai/claude-agent-sdk');
@@ -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-CKR_HJnO.mjs';
5
- import { d as sendUserMessage, e as sessionWebUrl } from './index-BauTv2jB.mjs';
4
+ import { d as readPersistedSessions, c as configuration } from './limits-BtAuKRl2.mjs';
5
+ import { d as sendUserMessage, e as sessionWebUrl } from './index-BacwoXzs.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-xKrxbCRv.mjs';
13
+ import './types-BvqOVUOW.mjs';
14
14
  import 'axios';
15
15
  import 'node:events';
16
16
  import 'socket.io-client';
@@ -20,7 +20,7 @@ import 'fs/promises';
20
20
  import 'crypto';
21
21
  import 'path';
22
22
  import 'cross-spawn';
23
- import './projectPath-CSpqWdxp.mjs';
23
+ import './terminalTitleSuggest-DKgX3osW.mjs';
24
24
  import 'url';
25
25
  import 'os';
26
26
  import 'node:child_process';
@@ -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-Daxn5Nvj.mjs';
32
+ import './agentGuidance-C8unGWp7.mjs';
33
33
  import 'ink';
34
34
  import 'react';
35
35
  import '@anthropic-ai/claude-agent-sdk';
@@ -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, a as listSessions, w as waitForTurnEnd, T as TurnWaitTimeoutError, r as readSessionTranscript, s as stopSession, b as resolvePermissionRequest, c as archiveSession } from './index-BauTv2jB.mjs';
3
- import { i as isValidSessionId } from './types-xKrxbCRv.mjs';
2
+ import { D as DEFAULT_RECENT_LIMIT, M as MAX_READ_LIMIT, l as listAccountSessions, a as listSessions, w as waitForTurnEnd, T as TurnWaitTimeoutError, r as readSessionTranscript, s as stopSession, b as resolvePermissionRequest, c as archiveSession } from './index-BacwoXzs.mjs';
3
+ import { i as isValidSessionId } from './types-BvqOVUOW.mjs';
4
4
  import 'node:os';
5
5
  import 'node:crypto';
6
- import './limits-CKR_HJnO.mjs';
6
+ import './limits-BtAuKRl2.mjs';
7
7
  import 'node:fs/promises';
8
8
  import 'node:fs';
9
9
  import 'node:path';
@@ -13,10 +13,10 @@ import 'node:util';
13
13
  import '@paralleldrive/cuid2';
14
14
  import 'cross-spawn';
15
15
  import 'node:readline';
16
- import './projectPath-CSpqWdxp.mjs';
16
+ import './terminalTitleSuggest-DKgX3osW.mjs';
17
17
  import 'path';
18
18
  import 'url';
19
- import './agentGuidance-Daxn5Nvj.mjs';
19
+ import './agentGuidance-C8unGWp7.mjs';
20
20
  import 'fs/promises';
21
21
  import 'ink';
22
22
  import 'react';
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var index = require('./index-ZIW1jrYm.cjs');
5
- var index$1 = require('./types-CN28qJl7.cjs');
4
+ var index = require('./index-DHrwHxHf.cjs');
5
+ var index$1 = require('./types-CUCU7Vw8.cjs');
6
6
  require('node:os');
7
7
  require('node:crypto');
8
- require('./limits-BNTWyUaZ.cjs');
8
+ require('./limits-DY_sFA3J.cjs');
9
9
  require('node:fs/promises');
10
10
  require('node:fs');
11
11
  require('node:path');
@@ -15,10 +15,10 @@ require('node:util');
15
15
  require('@paralleldrive/cuid2');
16
16
  require('cross-spawn');
17
17
  require('node:readline');
18
- require('./projectPath-ChLhdOyt.cjs');
18
+ require('./terminalTitleSuggest-Dji8I0Jy.cjs');
19
19
  require('path');
20
20
  require('url');
21
- require('./agentGuidance-CqBn77AI.cjs');
21
+ require('./agentGuidance-BM4kMNyr.cjs');
22
22
  require('fs/promises');
23
23
  require('ink');
24
24
  require('react');
@@ -1,9 +1,9 @@
1
1
  import chalk from 'chalk';
2
2
  import { readFileSync, statSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
- import { f as forkSession, g as getProjectPath, F as ForkSourceMissingError, C as CodexAppServerClient, h as forkCodexThread, j as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, k as stopDaemonSession } from './types-xKrxbCRv.mjs';
5
- import { d as readPersistedSessions, l as logger } from './limits-CKR_HJnO.mjs';
6
- import { k as readSessionMetadata, m as resolveSpawnPermissionMode, e as sessionWebUrl, n as resolveFirstMessageMeta, o as isValidSpawnOrigin, i as sanitizeSpawnPermissionMode, A as ALLOWED_SPAWN_PERMISSION_MODES, S as SPAWN_AGENTS, u as waitForSessionKey, d as sendUserMessage } from './index-BauTv2jB.mjs';
4
+ import { f as forkSession, g as getProjectPath, F as ForkSourceMissingError, C as CodexAppServerClient, h as forkCodexThread, j as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, k as stopDaemonSession } from './types-BvqOVUOW.mjs';
5
+ import { d as readPersistedSessions, l as logger } from './limits-BtAuKRl2.mjs';
6
+ import { k as readSessionMetadata, m as resolveSpawnPermissionMode, e as sessionWebUrl, n as resolveFirstMessageMeta, o as isValidSpawnOrigin, i as sanitizeSpawnPermissionMode, A as ALLOWED_SPAWN_PERMISSION_MODES, S as SPAWN_AGENTS, u as waitForSessionKey, d as sendUserMessage } from './index-BacwoXzs.mjs';
7
7
  import 'axios';
8
8
  import 'node:events';
9
9
  import 'socket.io-client';
@@ -15,7 +15,7 @@ import 'fs/promises';
15
15
  import 'crypto';
16
16
  import 'path';
17
17
  import 'cross-spawn';
18
- import './projectPath-CSpqWdxp.mjs';
18
+ import './terminalTitleSuggest-DKgX3osW.mjs';
19
19
  import 'url';
20
20
  import 'os';
21
21
  import '@paralleldrive/cuid2';
@@ -29,7 +29,7 @@ import 'node:readline';
29
29
  import '@anthropic-ai/sandbox-runtime';
30
30
  import 'expo-server-sdk';
31
31
  import 'node:util';
32
- import './agentGuidance-Daxn5Nvj.mjs';
32
+ import './agentGuidance-C8unGWp7.mjs';
33
33
  import 'ink';
34
34
  import 'react';
35
35
  import '@anthropic-ai/claude-agent-sdk';
@@ -3,9 +3,9 @@
3
3
  var chalk = require('chalk');
4
4
  var node_fs = require('node:fs');
5
5
  var path = require('node:path');
6
- var index$1 = require('./types-CN28qJl7.cjs');
7
- var persistence = require('./limits-BNTWyUaZ.cjs');
8
- var index = require('./index-ZIW1jrYm.cjs');
6
+ var index$1 = require('./types-CUCU7Vw8.cjs');
7
+ var persistence = require('./limits-DY_sFA3J.cjs');
8
+ var index = require('./index-DHrwHxHf.cjs');
9
9
  require('axios');
10
10
  require('node:events');
11
11
  require('socket.io-client');
@@ -17,7 +17,7 @@ require('fs/promises');
17
17
  require('crypto');
18
18
  require('path');
19
19
  require('cross-spawn');
20
- require('./projectPath-ChLhdOyt.cjs');
20
+ require('./terminalTitleSuggest-Dji8I0Jy.cjs');
21
21
  require('url');
22
22
  require('os');
23
23
  require('@paralleldrive/cuid2');
@@ -31,7 +31,7 @@ require('node:readline');
31
31
  require('@anthropic-ai/sandbox-runtime');
32
32
  require('expo-server-sdk');
33
33
  require('node:util');
34
- require('./agentGuidance-CqBn77AI.cjs');
34
+ require('./agentGuidance-BM4kMNyr.cjs');
35
35
  require('ink');
36
36
  require('react');
37
37
  require('@anthropic-ai/claude-agent-sdk');
@@ -2,17 +2,17 @@ import { homedir } from 'node:os';
2
2
  import { readFile } from 'node:fs/promises';
3
3
  import { z } from 'zod';
4
4
  import { randomUUID } from 'node:crypto';
5
- import { g as teamRequest, h as createTeamsClient } from './agentGuidance-Daxn5Nvj.mjs';
6
- import { f as readCredentialsForConfiguredRelay } from './limits-CKR_HJnO.mjs';
7
- import { a as installTeamSkill, i as installAutomationSkill } from './install-C1K3nrxF.mjs';
5
+ import { g as teamRequest, h as createTeamsClient } from './agentGuidance-C8unGWp7.mjs';
6
+ import { f as readCredentialsForConfiguredRelay } from './limits-BtAuKRl2.mjs';
7
+ import { a as installTeamSkill, i as installAutomationSkill } from './install-Ca7_Z3bV.mjs';
8
8
  import 'node:fs';
9
9
  import 'node:path';
10
10
  import 'tweetnacl';
11
11
  import 'chalk';
12
12
  import 'node:util';
13
13
  import '@paralleldrive/cuid2';
14
- import './index-BauTv2jB.mjs';
15
- import './types-xKrxbCRv.mjs';
14
+ import './index-BacwoXzs.mjs';
15
+ import './types-BvqOVUOW.mjs';
16
16
  import 'axios';
17
17
  import 'node:events';
18
18
  import 'socket.io-client';
@@ -22,7 +22,7 @@ import 'fs/promises';
22
22
  import 'crypto';
23
23
  import 'path';
24
24
  import 'cross-spawn';
25
- import './projectPath-CSpqWdxp.mjs';
25
+ import './terminalTitleSuggest-DKgX3osW.mjs';
26
26
  import 'url';
27
27
  import 'os';
28
28
  import 'node:child_process';
@@ -4,17 +4,17 @@ 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-CqBn77AI.cjs');
8
- var persistence = require('./limits-BNTWyUaZ.cjs');
9
- var install = require('./install-CDR3qBhs.cjs');
7
+ var agentGuidance = require('./agentGuidance-BM4kMNyr.cjs');
8
+ var persistence = require('./limits-DY_sFA3J.cjs');
9
+ var install = require('./install-BiOXBnnS.cjs');
10
10
  require('node:fs');
11
11
  require('node:path');
12
12
  require('tweetnacl');
13
13
  require('chalk');
14
14
  require('node:util');
15
15
  require('@paralleldrive/cuid2');
16
- require('./index-ZIW1jrYm.cjs');
17
- require('./types-CN28qJl7.cjs');
16
+ require('./index-DHrwHxHf.cjs');
17
+ require('./types-CUCU7Vw8.cjs');
18
18
  require('axios');
19
19
  require('node:events');
20
20
  require('socket.io-client');
@@ -24,7 +24,7 @@ require('fs/promises');
24
24
  require('crypto');
25
25
  require('path');
26
26
  require('cross-spawn');
27
- require('./projectPath-ChLhdOyt.cjs');
27
+ require('./terminalTitleSuggest-Dji8I0Jy.cjs');
28
28
  require('url');
29
29
  require('os');
30
30
  require('node:child_process');
@@ -0,0 +1,38 @@
1
+ import { dirname, resolve } from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ import { z } from 'zod';
4
+
5
+ const __dirname$1 = dirname(fileURLToPath(import.meta.url));
6
+ function projectPath() {
7
+ const path = resolve(__dirname$1, "..");
8
+ return path;
9
+ }
10
+
11
+ const TERMINAL_TITLE_SUGGEST_METHOD = "very-happy/terminal-title-suggest";
12
+ const TerminalTitleSuggestRequestSchema = z.object({
13
+ method: z.literal(TERMINAL_TITLE_SUGGEST_METHOD),
14
+ params: z.object({
15
+ /** The user's first prompt; the bridge samples its head (buildPrompt). */
16
+ prompt: z.string().min(1).max(2e4)
17
+ })
18
+ });
19
+ const TerminalTitleSuggestResultSchema = z.object({
20
+ /** Sanitized title, or null when nothing usable came back (keep the old title). */
21
+ title: z.string().nullable()
22
+ });
23
+ function baseName(cwd) {
24
+ const trimmed = cwd.replace(/[\\/]+$/, "");
25
+ const idx = Math.max(trimmed.lastIndexOf("/"), trimmed.lastIndexOf("\\"));
26
+ return idx >= 0 ? trimmed.slice(idx + 1) : trimmed;
27
+ }
28
+ function piSessionNameFromTitle(title, cwd) {
29
+ const m = /^(?:π|pi) - (.+)$/u.exec(title);
30
+ if (!m || !cwd) return void 0;
31
+ const suffix = ` - ${baseName(cwd)}`;
32
+ const rest = m[1];
33
+ if (!rest.endsWith(suffix)) return void 0;
34
+ const name = rest.slice(0, -suffix.length).trim();
35
+ return name || void 0;
36
+ }
37
+
38
+ export { TERMINAL_TITLE_SUGGEST_METHOD as T, TerminalTitleSuggestResultSchema as a, TerminalTitleSuggestRequestSchema as b, piSessionNameFromTitle as c, projectPath as p };
@@ -0,0 +1,45 @@
1
+ 'use strict';
2
+
3
+ var path = require('path');
4
+ var url = require('url');
5
+ var z = require('zod');
6
+
7
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
8
+ 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('terminalTitleSuggest-Dji8I0Jy.cjs', document.baseURI).href))));
9
+ function projectPath() {
10
+ const path$1 = path.resolve(__dirname$1, "..");
11
+ return path$1;
12
+ }
13
+
14
+ const TERMINAL_TITLE_SUGGEST_METHOD = "very-happy/terminal-title-suggest";
15
+ const TerminalTitleSuggestRequestSchema = z.z.object({
16
+ method: z.z.literal(TERMINAL_TITLE_SUGGEST_METHOD),
17
+ params: z.z.object({
18
+ /** The user's first prompt; the bridge samples its head (buildPrompt). */
19
+ prompt: z.z.string().min(1).max(2e4)
20
+ })
21
+ });
22
+ const TerminalTitleSuggestResultSchema = z.z.object({
23
+ /** Sanitized title, or null when nothing usable came back (keep the old title). */
24
+ title: z.z.string().nullable()
25
+ });
26
+ function baseName(cwd) {
27
+ const trimmed = cwd.replace(/[\\/]+$/, "");
28
+ const idx = Math.max(trimmed.lastIndexOf("/"), trimmed.lastIndexOf("\\"));
29
+ return idx >= 0 ? trimmed.slice(idx + 1) : trimmed;
30
+ }
31
+ function piSessionNameFromTitle(title, cwd) {
32
+ const m = /^(?:π|pi) - (.+)$/u.exec(title);
33
+ if (!m || !cwd) return void 0;
34
+ const suffix = ` - ${baseName(cwd)}`;
35
+ const rest = m[1];
36
+ if (!rest.endsWith(suffix)) return void 0;
37
+ const name = rest.slice(0, -suffix.length).trim();
38
+ return name || void 0;
39
+ }
40
+
41
+ exports.TERMINAL_TITLE_SUGGEST_METHOD = TERMINAL_TITLE_SUGGEST_METHOD;
42
+ exports.TerminalTitleSuggestRequestSchema = TerminalTitleSuggestRequestSchema;
43
+ exports.TerminalTitleSuggestResultSchema = TerminalTitleSuggestResultSchema;
44
+ exports.piSessionNameFromTitle = piSessionNameFromTitle;
45
+ exports.projectPath = projectPath;
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var persistence = require('./limits-BNTWyUaZ.cjs');
4
- var agentGuidance = require('./agentGuidance-CqBn77AI.cjs');
3
+ var persistence = require('./limits-DY_sFA3J.cjs');
4
+ var agentGuidance = require('./agentGuidance-BM4kMNyr.cjs');
5
5
  require('node:fs/promises');
6
6
  require('node:fs');
7
7
  require('node:os');
@@ -1,5 +1,5 @@
1
- import { f as readCredentialsForConfiguredRelay, g as createBuiltinTodoClient, c as configuration, B as BUILTIN_TODO_SKILL } from './limits-CKR_HJnO.mjs';
2
- import { f as readTeamScope, t as teamScopePath } from './agentGuidance-Daxn5Nvj.mjs';
1
+ import { f as readCredentialsForConfiguredRelay, g as createBuiltinTodoClient, c as configuration, B as BUILTIN_TODO_SKILL } from './limits-BtAuKRl2.mjs';
2
+ import { f as readTeamScope, t as teamScopePath } from './agentGuidance-C8unGWp7.mjs';
3
3
  import 'node:fs/promises';
4
4
  import 'node:fs';
5
5
  import 'node:os';
@@ -1,5 +1,5 @@
1
1
  import axios from 'axios';
2
- import { y as AgentVersionsSchema, l as logger, j as encodeBase64, z as encrypt, D as decrypt, E as decodeBase64, c as configuration, e as createEnvelope, s as streamKeyOf, F as readDaemonState, G as clearDaemonState, R as ReleaseDrainNoticeSchema, H as decryptBlob, I as RelayAssignmentResponseSchema, J as prepareClipboardText, K as prepareClipboardHistoryText, r as readSettings, d as readPersistedSessions, L as credentialRelayProblem, p as packageJson, M as RelayCandidatesResponseSchema, N as readTrackedClaudeSessionIds, O as readTrackedCodexThreadIds, P as libsodiumEncryptForPublicKey, Q as libsodiumPublicKeyFromSecretKey, S as getRandomBytes, T as redactLogValue } from './limits-CKR_HJnO.mjs';
2
+ import { y as AgentVersionsSchema, l as logger, j as encodeBase64, z as encrypt, D as decrypt, E as decodeBase64, c as configuration, e as createEnvelope, s as streamKeyOf, F as readDaemonState, G as clearDaemonState, R as ReleaseDrainNoticeSchema, H as decryptBlob, I as RelayAssignmentResponseSchema, J as prepareClipboardText, K as prepareClipboardHistoryText, r as readSettings, d as readPersistedSessions, L as credentialRelayProblem, p as packageJson, M as RelayCandidatesResponseSchema, N as readTrackedClaudeSessionIds, O as readTrackedCodexThreadIds, P as libsodiumEncryptForPublicKey, Q as libsodiumPublicKeyFromSecretKey, S as getRandomBytes, T as redactLogValue } from './limits-BtAuKRl2.mjs';
3
3
  import { EventEmitter } from 'node:events';
4
4
  import { io } from 'socket.io-client';
5
5
  import { z } from 'zod';
@@ -10,7 +10,7 @@ import { mkdir, writeFile, appendFile, stat, rename, unlink, readdir, readFile }
10
10
  import { randomUUID, createHash } from 'crypto';
11
11
  import { resolve, join, sep } from 'path';
12
12
  import { spawn } from 'cross-spawn';
13
- import { p as projectPath } from './projectPath-CSpqWdxp.mjs';
13
+ import { p as projectPath, c as piSessionNameFromTitle } from './terminalTitleSuggest-DKgX3osW.mjs';
14
14
  import os, { platform } from 'os';
15
15
  import { createId } from '@paralleldrive/cuid2';
16
16
  import { stat as stat$1, readdir as readdir$1, lstat, open, copyFile, unlink as unlink$1, readFile as readFile$1, rename as rename$1, writeFile as writeFile$1 } from 'node:fs/promises';
@@ -9889,10 +9889,15 @@ function hostListSignature(items) {
9889
9889
  const SHELL_COMMANDS = /* @__PURE__ */ new Set(["zsh", "bash", "fish", "sh", "dash", "ksh", "tcsh", "csh"]);
9890
9890
  const TITLE_MAX_CHARS = 60;
9891
9891
  const JUNK_TITLES = /* @__PURE__ */ new Set(["tmux", "claude", "node", ...SHELL_COMMANDS]);
9892
- function deriveAutoTitle(paneTitle, hostname) {
9892
+ function deriveAutoTitle(paneTitle, hostname, cwd) {
9893
9893
  if (typeof paneTitle !== "string") return void 0;
9894
9894
  const t = paneTitle.replace(/^[^\p{L}\p{N}]+/u, "").replace(/\s+/g, " ").trim();
9895
9895
  if (!t) return void 0;
9896
+ const piName = piSessionNameFromTitle(t, cwd);
9897
+ if (piName) {
9898
+ const chars2 = Array.from(piName);
9899
+ return chars2.length > TITLE_MAX_CHARS ? chars2.slice(0, TITLE_MAX_CHARS).join("") : piName;
9900
+ }
9896
9901
  const lower = t.toLowerCase();
9897
9902
  const host = (hostname || "").toLowerCase();
9898
9903
  const shortHost = host.split(".")[0];
@@ -11322,7 +11327,7 @@ class WebTerminalManager {
11322
11327
  const created = new TerminalSession(id, { kind: "pty", pty: proc }, void 0, cols, rows);
11323
11328
  created.direct = { cwd, createdAt: Date.now() };
11324
11329
  created.onTitleChange((title) => {
11325
- if (created.direct && !created.direct.manual) created.direct.title = deriveAutoTitle(title, os$1.hostname());
11330
+ if (created.direct && !created.direct.manual) created.direct.title = deriveAutoTitle(title, os$1.hostname(), created.direct.cwd);
11326
11331
  });
11327
11332
  created.onOutputChunk = (chunk) => {
11328
11333
  this.emit("terminal-output", { terminalId: id, data: chunk.data, seq: chunk.seq });
@@ -11788,7 +11793,7 @@ class WebTerminalManager {
11788
11793
  if (!s || !s.name.startsWith("vh-")) continue;
11789
11794
  const id = s.name.slice(3);
11790
11795
  let title = s.vhTitle;
11791
- const auto = deriveAutoTitle(s.paneTitle, hostname);
11796
+ const auto = deriveAutoTitle(s.paneTitle, hostname, s.cwd);
11792
11797
  if (auto && !s.manual && auto !== title) {
11793
11798
  try {
11794
11799
  const w = spawnSync(
@@ -12046,7 +12051,7 @@ function parseVhTerminals(stdout, hostname = os$1.hostname()) {
12046
12051
  if (!s || !s.name.startsWith("vh-")) continue;
12047
12052
  out.push({
12048
12053
  id: s.name.slice(3),
12049
- title: s.vhTitle ?? deriveAutoTitle(s.paneTitle, hostname),
12054
+ title: s.vhTitle ?? deriveAutoTitle(s.paneTitle, hostname, s.cwd),
12050
12055
  cwd: s.cwd,
12051
12056
  createdAt: s.created,
12052
12057
  activityAt: s.activity
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var axios = require('axios');
4
- var persistence = require('./limits-BNTWyUaZ.cjs');
4
+ var persistence = require('./limits-DY_sFA3J.cjs');
5
5
  var node_events = require('node:events');
6
6
  var socket_ioClient = require('socket.io-client');
7
7
  var z = require('zod');
@@ -12,7 +12,7 @@ var fs = require('fs/promises');
12
12
  var crypto = require('crypto');
13
13
  var path = require('path');
14
14
  var spawn = require('cross-spawn');
15
- var projectPath = require('./projectPath-ChLhdOyt.cjs');
15
+ var terminalTitleSuggest = require('./terminalTitleSuggest-Dji8I0Jy.cjs');
16
16
  var os = require('os');
17
17
  var cuid2 = require('@paralleldrive/cuid2');
18
18
  var promises = require('node:fs/promises');
@@ -652,7 +652,7 @@ async function answerSocketRequest(ack, run, onDrop) {
652
652
  }
653
653
 
654
654
  function run$1(args, options) {
655
- const RUNNER_PATH = path.resolve(path.join(projectPath.projectPath(), "scripts", "ripgrep_launcher.cjs"));
655
+ const RUNNER_PATH = path.resolve(path.join(terminalTitleSuggest.projectPath(), "scripts", "ripgrep_launcher.cjs"));
656
656
  return new Promise((resolve2, reject) => {
657
657
  const child = spawn.spawn("node", [RUNNER_PATH, JSON.stringify(args)], {
658
658
  stdio: ["pipe", "pipe", "pipe"],
@@ -683,7 +683,7 @@ function run$1(args, options) {
683
683
  function getBinaryPath() {
684
684
  const platformName = os.platform();
685
685
  const binaryName = platformName === "win32" ? "difft.exe" : "difft";
686
- return path.resolve(path.join(projectPath.projectPath(), "tools", "unpacked", binaryName));
686
+ return path.resolve(path.join(terminalTitleSuggest.projectPath(), "tools", "unpacked", binaryName));
687
687
  }
688
688
  function run(args, options) {
689
689
  const binaryPath = getBinaryPath();
@@ -9910,10 +9910,15 @@ function hostListSignature(items) {
9910
9910
  const SHELL_COMMANDS = /* @__PURE__ */ new Set(["zsh", "bash", "fish", "sh", "dash", "ksh", "tcsh", "csh"]);
9911
9911
  const TITLE_MAX_CHARS = 60;
9912
9912
  const JUNK_TITLES = /* @__PURE__ */ new Set(["tmux", "claude", "node", ...SHELL_COMMANDS]);
9913
- function deriveAutoTitle(paneTitle, hostname) {
9913
+ function deriveAutoTitle(paneTitle, hostname, cwd) {
9914
9914
  if (typeof paneTitle !== "string") return void 0;
9915
9915
  const t = paneTitle.replace(/^[^\p{L}\p{N}]+/u, "").replace(/\s+/g, " ").trim();
9916
9916
  if (!t) return void 0;
9917
+ const piName = terminalTitleSuggest.piSessionNameFromTitle(t, cwd);
9918
+ if (piName) {
9919
+ const chars2 = Array.from(piName);
9920
+ return chars2.length > TITLE_MAX_CHARS ? chars2.slice(0, TITLE_MAX_CHARS).join("") : piName;
9921
+ }
9917
9922
  const lower = t.toLowerCase();
9918
9923
  const host = (hostname || "").toLowerCase();
9919
9924
  const shortHost = host.split(".")[0];
@@ -11343,7 +11348,7 @@ class WebTerminalManager {
11343
11348
  const created = new TerminalSession(id, { kind: "pty", pty: proc }, void 0, cols, rows);
11344
11349
  created.direct = { cwd, createdAt: Date.now() };
11345
11350
  created.onTitleChange((title) => {
11346
- if (created.direct && !created.direct.manual) created.direct.title = deriveAutoTitle(title, os$1.hostname());
11351
+ if (created.direct && !created.direct.manual) created.direct.title = deriveAutoTitle(title, os$1.hostname(), created.direct.cwd);
11347
11352
  });
11348
11353
  created.onOutputChunk = (chunk) => {
11349
11354
  this.emit("terminal-output", { terminalId: id, data: chunk.data, seq: chunk.seq });
@@ -11809,7 +11814,7 @@ class WebTerminalManager {
11809
11814
  if (!s || !s.name.startsWith("vh-")) continue;
11810
11815
  const id = s.name.slice(3);
11811
11816
  let title = s.vhTitle;
11812
- const auto = deriveAutoTitle(s.paneTitle, hostname);
11817
+ const auto = deriveAutoTitle(s.paneTitle, hostname, s.cwd);
11813
11818
  if (auto && !s.manual && auto !== title) {
11814
11819
  try {
11815
11820
  const w = node_child_process.spawnSync(
@@ -12067,7 +12072,7 @@ function parseVhTerminals(stdout, hostname = os$1.hostname()) {
12067
12072
  if (!s || !s.name.startsWith("vh-")) continue;
12068
12073
  out.push({
12069
12074
  id: s.name.slice(3),
12070
- title: s.vhTitle ?? deriveAutoTitle(s.paneTitle, hostname),
12075
+ title: s.vhTitle ?? deriveAutoTitle(s.paneTitle, hostname, s.cwd),
12071
12076
  cwd: s.cwd,
12072
12077
  createdAt: s.created,
12073
12078
  activityAt: s.activity
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "very-happy-cli",
3
- "version": "0.2.152",
3
+ "version": "0.2.153",
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": [
@@ -117,12 +117,12 @@
117
117
  "zod": "^4.0.0"
118
118
  },
119
119
  "optionalDependencies": {
120
- "very-happy-tools-arm64-darwin": "0.2.152",
121
- "very-happy-tools-x64-darwin": "0.2.152",
122
- "very-happy-tools-arm64-linux": "0.2.152",
123
- "very-happy-tools-x64-linux": "0.2.152",
124
- "very-happy-tools-arm64-win32": "0.2.152",
125
- "very-happy-tools-x64-win32": "0.2.152"
120
+ "very-happy-tools-arm64-darwin": "0.2.153",
121
+ "very-happy-tools-x64-darwin": "0.2.153",
122
+ "very-happy-tools-arm64-linux": "0.2.153",
123
+ "very-happy-tools-x64-linux": "0.2.153",
124
+ "very-happy-tools-arm64-win32": "0.2.153",
125
+ "very-happy-tools-x64-win32": "0.2.153"
126
126
  },
127
127
  "devDependencies": {
128
128
  "@slopus/happy-wire": "workspace:*",
@@ -1,10 +0,0 @@
1
- import { dirname, resolve } from 'path';
2
- import { fileURLToPath } from 'url';
3
-
4
- const __dirname$1 = dirname(fileURLToPath(import.meta.url));
5
- function projectPath() {
6
- const path = resolve(__dirname$1, "..");
7
- return path;
8
- }
9
-
10
- export { projectPath as p };
@@ -1,13 +0,0 @@
1
- 'use strict';
2
-
3
- var path = require('path');
4
- var url = require('url');
5
-
6
- var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
7
- 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('projectPath-ChLhdOyt.cjs', document.baseURI).href))));
8
- function projectPath() {
9
- const path$1 = path.resolve(__dirname$1, "..");
10
- return path$1;
11
- }
12
-
13
- exports.projectPath = projectPath;