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
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-ZIW1jrYm.cjs');
3
+ var index = require('./index-DHrwHxHf.cjs');
4
4
  var claudeAgentSdk = require('@anthropic-ai/claude-agent-sdk');
5
5
  require('chalk');
6
6
  require('node:os');
7
7
  require('node:crypto');
8
- require('./types-CN28qJl7.cjs');
8
+ require('./types-CUCU7Vw8.cjs');
9
9
  require('axios');
10
- require('./limits-BNTWyUaZ.cjs');
10
+ require('./limits-DY_sFA3J.cjs');
11
11
  require('node:fs/promises');
12
12
  require('node:fs');
13
13
  require('node:path');
@@ -23,7 +23,7 @@ require('fs/promises');
23
23
  require('crypto');
24
24
  require('path');
25
25
  require('cross-spawn');
26
- require('./projectPath-ChLhdOyt.cjs');
26
+ require('./terminalTitleSuggest-Dji8I0Jy.cjs');
27
27
  require('url');
28
28
  require('os');
29
29
  require('node:child_process');
@@ -32,7 +32,7 @@ require('fs');
32
32
  require('node:readline');
33
33
  require('@anthropic-ai/sandbox-runtime');
34
34
  require('expo-server-sdk');
35
- require('./agentGuidance-CqBn77AI.cjs');
35
+ require('./agentGuidance-BM4kMNyr.cjs');
36
36
  require('ink');
37
37
  require('react');
38
38
  require('ps-list');
@@ -1,14 +1,14 @@
1
1
  'use strict';
2
2
 
3
- var AcpBackend = require('./AcpBackend-CogiKCng.cjs');
4
- var persistence = require('./limits-BNTWyUaZ.cjs');
5
- var AcpSessionManager = require('./AcpSessionManager-BazkBuFo.cjs');
6
- var index$1 = require('./index-ZIW1jrYm.cjs');
7
- var piRuntime = require('./piRuntime-Bn5ypbjH.cjs');
3
+ var AcpBackend = require('./AcpBackend-DSt8nTYm.cjs');
4
+ var persistence = require('./limits-DY_sFA3J.cjs');
5
+ var AcpSessionManager = require('./AcpSessionManager-uov6I9C8.cjs');
6
+ var index$1 = require('./index-DHrwHxHf.cjs');
7
+ var piRuntime = require('./piRuntime-DRbbeQ72.cjs');
8
8
  var node_crypto = require('node:crypto');
9
9
  var path = require('node:path');
10
- var index = require('./types-CN28qJl7.cjs');
11
- var projectPath = require('./projectPath-ChLhdOyt.cjs');
10
+ var index = require('./types-CUCU7Vw8.cjs');
11
+ var terminalTitleSuggest = require('./terminalTitleSuggest-Dji8I0Jy.cjs');
12
12
  require('node:child_process');
13
13
  require('@agentclientprotocol/sdk');
14
14
  require('node:fs/promises');
@@ -21,7 +21,7 @@ require('node:util');
21
21
  require('@paralleldrive/cuid2');
22
22
  require('cross-spawn');
23
23
  require('node:readline');
24
- require('./agentGuidance-CqBn77AI.cjs');
24
+ require('./agentGuidance-BM4kMNyr.cjs');
25
25
  require('fs/promises');
26
26
  require('ink');
27
27
  require('react');
@@ -688,7 +688,7 @@ async function runAcp(opts) {
688
688
  if (opts.agentName === "pi") session.updateAgentState((state2) => ({ ...state2, contextUsage: null }));
689
689
  const mcpServers = {
690
690
  happy: {
691
- command: path.join(projectPath.projectPath(), "bin", "very-happy-mcp.mjs"),
691
+ command: path.join(terminalTitleSuggest.projectPath(), "bin", "very-happy-mcp.mjs"),
692
692
  args: ["--url", happyServer.url]
693
693
  }
694
694
  };
@@ -3,14 +3,14 @@
3
3
  var chalk = require('chalk');
4
4
  var os = require('node:os');
5
5
  var node_crypto = require('node:crypto');
6
- var index = require('./types-CN28qJl7.cjs');
7
- var persistence = require('./limits-BNTWyUaZ.cjs');
6
+ var index = require('./types-CUCU7Vw8.cjs');
7
+ var persistence = require('./limits-DY_sFA3J.cjs');
8
8
  var spawn = require('cross-spawn');
9
9
  var path = require('node:path');
10
10
  var node_readline = require('node:readline');
11
11
  var node_fs = require('node:fs');
12
- var projectPath = require('./projectPath-ChLhdOyt.cjs');
13
- var agentGuidance = require('./agentGuidance-CqBn77AI.cjs');
12
+ var terminalTitleSuggest = require('./terminalTitleSuggest-Dji8I0Jy.cjs');
13
+ var agentGuidance = require('./agentGuidance-BM4kMNyr.cjs');
14
14
  var promises = require('node:fs/promises');
15
15
  var fs = require('fs/promises');
16
16
  var ink = require('ink');
@@ -522,7 +522,7 @@ class ExitCodeError extends Error {
522
522
  this.exitCode = exitCode;
523
523
  }
524
524
  }
525
- const claudeCliPath = path.resolve(path.join(projectPath.projectPath(), "scripts", "claude_local_launcher.cjs"));
525
+ const claudeCliPath = path.resolve(path.join(terminalTitleSuggest.projectPath(), "scripts", "claude_local_launcher.cjs"));
526
526
  function quoteShellArg(value) {
527
527
  return `'${value.replace(/'/g, `'\\''`)}'`;
528
528
  }
@@ -4878,8 +4878,8 @@ function createSessionMetadata(opts) {
4878
4878
  ...opts.teamOperationId ? { teamOperationId: opts.teamOperationId } : {},
4879
4879
  homeDir: os.homedir(),
4880
4880
  happyHomeDir: persistence.configuration.happyHomeDir,
4881
- happyLibDir: projectPath.projectPath(),
4882
- happyToolsDir: path.resolve(projectPath.projectPath(), "tools", "unpacked"),
4881
+ happyLibDir: terminalTitleSuggest.projectPath(),
4882
+ happyToolsDir: path.resolve(terminalTitleSuggest.projectPath(), "tools", "unpacked"),
4883
4883
  startedFromDaemon: opts.startedBy === "daemon",
4884
4884
  hostPid: process.pid,
4885
4885
  startedBy: opts.startedBy || "terminal",
@@ -5206,7 +5206,7 @@ function printCliUpdateStatus(state) {
5206
5206
  console.log(chalk.yellow(" \u25B3 A newer CLI is available."));
5207
5207
  }
5208
5208
  if (summary.installCommand) console.log(` Update: ${summary.installCommand}`);
5209
- const facts = gatherInstallLocationFacts(projectPath.projectPath());
5209
+ const facts = gatherInstallLocationFacts(terminalTitleSuggest.projectPath());
5210
5210
  for (const warning of facts ? installLocationWarnings(facts, state?.cliUpdate?.recommendedVersion ?? void 0) : []) {
5211
5211
  console.log(chalk.yellow(` \u26A0 ${warning}`));
5212
5212
  }
@@ -5338,7 +5338,7 @@ ${typeLabels[type] || type}:`));
5338
5338
  console.log(chalk.yellow("No log files found"));
5339
5339
  }
5340
5340
  console.log(chalk.bold("\n\u{1F527} Daemon Spawn Diagnostics"));
5341
- const projectRoot = projectPath.projectPath();
5341
+ const projectRoot = terminalTitleSuggest.projectPath();
5342
5342
  const wrapperPath = path.join(projectRoot, "bin", "very-happy.mjs");
5343
5343
  const cliEntrypoint = path.join(projectRoot, "dist", "index.mjs");
5344
5344
  console.log(`Project Root: ${chalk.blue(projectRoot)}`);
@@ -5402,8 +5402,8 @@ ${typeLabels[type] || type}:`));
5402
5402
  }
5403
5403
  console.log(chalk.gray(" An external claude command is only needed for native terminal/mirror use."));
5404
5404
  try {
5405
- const { resolveAgentHomesForCli } = await Promise.resolve().then(function () { return require('./agentHome-CpJjrQZc.cjs'); });
5406
- const { describeAgentHome } = await Promise.resolve().then(function () { return require('./types-CN28qJl7.cjs'); }).then(function (n) { return n.index; });
5405
+ const { resolveAgentHomesForCli } = await Promise.resolve().then(function () { return require('./agentHome-BJ7bde35.cjs'); });
5406
+ const { describeAgentHome } = await Promise.resolve().then(function () { return require('./types-CUCU7Vw8.cjs'); }).then(function (n) { return n.index; });
5407
5407
  const homes = await resolveAgentHomesForCli();
5408
5408
  console.log(chalk.green(`\u2713 Claude config dir: ${describeAgentHome(homes.claudeConfigDir)}`));
5409
5409
  console.log(chalk.green(`\u2713 Codex home: ${describeAgentHome(homes.codexHome)}`));
@@ -5953,7 +5953,7 @@ function getRuntime() {
5953
5953
  const isBun = () => getRuntime() === "bun";
5954
5954
 
5955
5955
  function spawnHappyCLI(args, options = {}) {
5956
- const projectRoot = projectPath.projectPath();
5956
+ const projectRoot = terminalTitleSuggest.projectPath();
5957
5957
  const entrypoint = path.join(projectRoot, "dist", "index.mjs");
5958
5958
  let directory;
5959
5959
  if ("cwd" in options) {
@@ -7784,7 +7784,7 @@ const defaults = {
7784
7784
  npm: runNpm,
7785
7785
  fs: { lstat: promises.lstat, readlink: promises.readlink, unlink: promises.unlink, rm: promises.rm, readFile: promises.readFile, symlink: promises.symlink, access: promises.access },
7786
7786
  platform: process.platform,
7787
- runningPackageDir: projectPath.projectPath()
7787
+ runningPackageDir: terminalTitleSuggest.projectPath()
7788
7788
  };
7789
7789
  async function runningVersion(deps) {
7790
7790
  if (!deps.runningPackageDir) return null;
@@ -8144,7 +8144,7 @@ function parseJsonObject(text) {
8144
8144
  return null;
8145
8145
  }
8146
8146
  }
8147
- function resolveSdkClaudeBinary(platform = process.platform, arch = process.arch, resolver = (s) => node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-ZIW1jrYm.cjs', document.baseURI).href))).resolve(s)) {
8147
+ function resolveSdkClaudeBinary(platform = process.platform, arch = process.arch, resolver = (s) => node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-DHrwHxHf.cjs', document.baseURI).href))).resolve(s)) {
8148
8148
  const platformArch = `${platform}-${arch}`;
8149
8149
  const candidates = [
8150
8150
  `@anthropic-ai/claude-agent-sdk-${platformArch}/claude`,
@@ -8857,8 +8857,8 @@ function createMirrorManager(deps) {
8857
8857
  machineId: deps.machineId,
8858
8858
  homeDir: os.homedir(),
8859
8859
  happyHomeDir: persistence.configuration.happyHomeDir,
8860
- happyLibDir: projectPath.projectPath(),
8861
- happyToolsDir: path.resolve(projectPath.projectPath(), "tools", "unpacked"),
8860
+ happyLibDir: terminalTitleSuggest.projectPath(),
8861
+ happyToolsDir: path.resolve(terminalTitleSuggest.projectPath(), "tools", "unpacked"),
8862
8862
  startedBy: "terminal",
8863
8863
  lifecycleState: "running",
8864
8864
  lifecycleStateSince: Date.now(),
@@ -9380,6 +9380,20 @@ export default async function(pi) {
9380
9380
  return data.result;
9381
9381
  }
9382
9382
  await rpc('initialize', {protocolVersion:'2024-11-05',capabilities:{},clientInfo:{name:'very-happy-pi-teams',version:'1'}});
9383
+ if (!managed && pi.setSessionName) {
9384
+ // B-500: name the pi session from its first prompt (managed sessions are titled by TitleGenerator).
9385
+ let titleArmed = false, generation = 0;
9386
+ pi.on('session_start', async () => { generation += 1; titleArmed = !pi.getSessionName?.(); });
9387
+ pi.on('before_agent_start', async (event) => {
9388
+ const prompt = event && typeof event.prompt === 'string' ? event.prompt : '';
9389
+ if (!titleArmed || !prompt.trim()) return;
9390
+ titleArmed = false;
9391
+ const expected = generation;
9392
+ rpc('very-happy/terminal-title-suggest', {prompt}).then(result => {
9393
+ if (result && result.title && expected === generation && !pi.getSessionName?.()) pi.setSessionName(result.title);
9394
+ }).catch(() => {});
9395
+ });
9396
+ }
9383
9397
  const available = await rpc('tools/list', {});
9384
9398
  for (const tool of available.tools || []) {
9385
9399
  pi.registerTool({name:tool.name,label:tool.name,description:tool.description || tool.name,parameters:tool.inputSchema,
@@ -10993,7 +11007,7 @@ const initialMachineMetadata = {
10993
11007
  happyCliVersion: persistence.packageJson.version,
10994
11008
  homeDir: os$1.homedir(),
10995
11009
  happyHomeDir: persistence.configuration.happyHomeDir,
10996
- happyLibDir: projectPath.projectPath(),
11010
+ happyLibDir: terminalTitleSuggest.projectPath(),
10997
11011
  cliAvailability: startupCliAvailability,
10998
11012
  resumeSupport: { ...index.detectResumeSupport(), rpcAvailable: true }
10999
11013
  };
@@ -11451,7 +11465,7 @@ async function startDaemon() {
11451
11465
  const sessionDesc = tmuxSessionName || "current/most recent session";
11452
11466
  persistence.logger.debug(`[DAEMON RUN] Attempting to spawn session in tmux: ${sessionDesc}`);
11453
11467
  const tmux = getTmuxUtilities(tmuxSessionName);
11454
- const cliPath = path$1.join(projectPath.projectPath(), "dist", "index.mjs");
11468
+ const cliPath = path$1.join(terminalTitleSuggest.projectPath(), "dist", "index.mjs");
11455
11469
  const agent = options.agent ?? "claude";
11456
11470
  if (!isSpawnAgent(agent)) {
11457
11471
  return {
@@ -12104,7 +12118,7 @@ async function startDaemon() {
12104
12118
  };
12105
12119
  persistence.writeDaemonState(fileState);
12106
12120
  persistence.logger.debug("[DAEMON RUN] Daemon state written");
12107
- const bundlePath = path$1.join(projectPath.projectPath(), "dist", "index.mjs");
12121
+ const bundlePath = path$1.join(terminalTitleSuggest.projectPath(), "dist", "index.mjs");
12108
12122
  let initialBundleMtimeMs = 0;
12109
12123
  try {
12110
12124
  initialBundleMtimeMs = fs$1.statSync(bundlePath).mtimeMs;
@@ -12160,7 +12174,7 @@ async function startDaemon() {
12160
12174
  });
12161
12175
  const claudeAuthService = new ClaudeAuthService({
12162
12176
  happyHomeDir: persistence.configuration.happyHomeDir,
12163
- happyLibDir: projectPath.projectPath(),
12177
+ happyLibDir: terminalTitleSuggest.projectPath(),
12164
12178
  credentialSource: daemonClaudeCredentials.source,
12165
12179
  getCredentialStore: () => claudeCredentialStoreSetting,
12166
12180
  setCredentialStore: async (store) => {
@@ -13176,7 +13190,7 @@ function generateHookSettingsFile(port) {
13176
13190
  node_fs.mkdirSync(hooksDir, { recursive: true });
13177
13191
  const filename = `session-hook-${process.pid}.json`;
13178
13192
  const filepath = path.join(hooksDir, filename);
13179
- const forwarderScript = path.resolve(projectPath.projectPath(), "scripts", "session_hook_forwarder.cjs");
13193
+ const forwarderScript = path.resolve(terminalTitleSuggest.projectPath(), "scripts", "session_hook_forwarder.cjs");
13180
13194
  const hookCommand = `node "${forwarderScript}" ${port}`;
13181
13195
  const settings = {
13182
13196
  hooks: {
@@ -13413,7 +13427,7 @@ function registerSideQuestionHandler(rpc, deps) {
13413
13427
  const retainMs = deps.retainMs ?? SIDE_QUESTION_RETAIN_MS;
13414
13428
  const maxRunMs = deps.maxRunMs ?? SIDE_QUESTION_MAX_RUN_MS;
13415
13429
  const fork = deps.run ?? (async (input) => {
13416
- const { query } = await Promise.resolve().then(function () { return require('./index-CRaJ9k2p.cjs'); });
13430
+ const { query } = await Promise.resolve().then(function () { return require('./index-D49WvbDT.cjs'); });
13417
13431
  return runSideQuestion(query, input);
13418
13432
  });
13419
13433
  const run = async (input, live) => {
@@ -13532,8 +13546,8 @@ const MAX_TITLE_CHARS = 60;
13532
13546
  const GENERATION_TIMEOUT_MS = 3e4;
13533
13547
  function resolveClaudeBinary() {
13534
13548
  try {
13535
- const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-ZIW1jrYm.cjs', document.baseURI).href)));
13536
- const utilsPath = path.resolve(path.join(projectPath.projectPath(), "scripts", "claude_version_utils.cjs"));
13549
+ const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-DHrwHxHf.cjs', document.baseURI).href)));
13550
+ const utilsPath = path.resolve(path.join(terminalTitleSuggest.projectPath(), "scripts", "claude_version_utils.cjs"));
13537
13551
  const { getClaudeCliPath } = require$1(utilsPath);
13538
13552
  const path$1 = getClaudeCliPath();
13539
13553
  if (typeof path$1 === "string" && path$1.length > 0) return path$1;
@@ -13590,7 +13604,12 @@ function runClaudeOneShot(binary, prompt) {
13590
13604
  try {
13591
13605
  child = node_child_process.spawn(binary, ["-p", "--model", "haiku", prompt], {
13592
13606
  stdio: ["ignore", "pipe", "ignore"],
13593
- env: process.env
13607
+ // HAPPY_MANAGED=1: this claude is run BY happy. The user-wide
13608
+ // terminal-mirror SessionStart hook exits on it, so a one-shot
13609
+ // spawned from inside a vh web terminal (VH_TERMINAL_ID
13610
+ // inherited — B-500's pi terminal bridge, or `very-happy` typed
13611
+ // in a terminal) never binds a mirror session to itself.
13612
+ env: { ...process.env, HAPPY_MANAGED: "1" }
13594
13613
  });
13595
13614
  } catch (error) {
13596
13615
  persistence.logger.debug("[titleGenerator] spawn failed", { error: String(error) });
@@ -13625,6 +13644,18 @@ function runClaudeOneShot(binary, prompt) {
13625
13644
  });
13626
13645
  });
13627
13646
  }
13647
+ async function suggestTitleForPrompt(prompt) {
13648
+ const binary = resolveClaudeBinary();
13649
+ if (!binary) {
13650
+ persistence.logger.debug("[titleGenerator] no claude binary; skipping auto-title");
13651
+ return null;
13652
+ }
13653
+ const stdout = await runClaudeOneShot(binary, buildPrompt(prompt));
13654
+ if (stdout == null) return null;
13655
+ const title = sanitizeTitle(stdout);
13656
+ if (!title) persistence.logger.debug("[titleGenerator] empty/unusable title output; skipping");
13657
+ return title;
13658
+ }
13628
13659
  class TitleGenerator {
13629
13660
  constructor(session) {
13630
13661
  this.session = session;
@@ -13648,23 +13679,12 @@ class TitleGenerator {
13648
13679
  });
13649
13680
  }
13650
13681
  async generate(firstUserMessage) {
13651
- const binary = resolveClaudeBinary();
13652
- if (!binary) {
13653
- persistence.logger.debug("[titleGenerator] no claude binary; skipping auto-title");
13654
- return;
13655
- }
13656
13682
  if (this.session.getMetadata()?.summary?.text) {
13657
13683
  persistence.logger.debug("[titleGenerator] summary appeared before generation; skipping");
13658
13684
  return;
13659
13685
  }
13660
- const prompt = buildPrompt(firstUserMessage);
13661
- const stdout = await runClaudeOneShot(binary, prompt);
13662
- if (stdout == null) return;
13663
- const title = sanitizeTitle(stdout);
13664
- if (!title) {
13665
- persistence.logger.debug("[titleGenerator] empty/unusable title output; skipping");
13666
- return;
13667
- }
13686
+ const title = await suggestTitleForPrompt(firstUserMessage);
13687
+ if (!title) return;
13668
13688
  if (this.session.getMetadata()?.summary?.text) {
13669
13689
  persistence.logger.debug("[titleGenerator] summary set during generation; not overwriting");
13670
13690
  return;
@@ -13979,8 +13999,8 @@ async function runClaude(credentials, options = {}) {
13979
13999
  machineId,
13980
14000
  homeDir: os.homedir(),
13981
14001
  happyHomeDir: persistence.configuration.happyHomeDir,
13982
- happyLibDir: projectPath.projectPath(),
13983
- happyToolsDir: path.resolve(projectPath.projectPath(), "tools", "unpacked"),
14002
+ happyLibDir: terminalTitleSuggest.projectPath(),
14003
+ happyToolsDir: path.resolve(terminalTitleSuggest.projectPath(), "tools", "unpacked"),
13984
14004
  startedFromDaemon: options.startedBy === "daemon",
13985
14005
  hostPid: process.pid,
13986
14006
  startedBy: options.startedBy || "terminal",
@@ -15761,9 +15781,9 @@ function resolveLocalSignupBootstrap(configuredMode, configuredInviteCodes, gene
15761
15781
  };
15762
15782
  }
15763
15783
 
15764
- const __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-ZIW1jrYm.cjs', document.baseURI).href)));
15784
+ const __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-DHrwHxHf.cjs', document.baseURI).href)));
15765
15785
  const __dirname$1 = path.dirname(__filename$1);
15766
- const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-ZIW1jrYm.cjs', document.baseURI).href)));
15786
+ const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-DHrwHxHf.cjs', document.baseURI).href)));
15767
15787
  const PRISMA_QUERY_ENGINE_FILES = {
15768
15788
  "arm64-darwin": "libquery_engine-darwin-arm64.dylib.node",
15769
15789
  "x64-darwin": "libquery_engine-darwin.dylib.node",
@@ -18279,7 +18299,7 @@ async function runCodex(opts) {
18279
18299
  }
18280
18300
  });
18281
18301
  const happyServer = await startHappyServer(session);
18282
- const bridgeEntrypoint = path.join(projectPath.projectPath(), "bin", "very-happy-mcp.mjs");
18302
+ const bridgeEntrypoint = path.join(terminalTitleSuggest.projectPath(), "bin", "very-happy-mcp.mjs");
18283
18303
  const mcpServers = {
18284
18304
  happy: {
18285
18305
  command: process.execPath,
@@ -18692,7 +18712,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18692
18712
  process.exit(0);
18693
18713
  } else if (subcommand === "install-pi-tools") {
18694
18714
  try {
18695
- const { handleInstallPiTools } = await Promise.resolve().then(function () { return require('./installPiTools-BKnXjrVu.cjs'); });
18715
+ const { handleInstallPiTools } = await Promise.resolve().then(function () { return require('./installPiTools-DuZ6jZvX.cjs'); });
18696
18716
  await handleInstallPiTools(args.slice(1));
18697
18717
  } catch (error) {
18698
18718
  console.error(error instanceof Error ? error.message : "Pi tools installation failed");
@@ -18701,7 +18721,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18701
18721
  return;
18702
18722
  } else if (subcommand === "install-terminal-hooks") {
18703
18723
  try {
18704
- const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-BoDxpaBO.cjs'); });
18724
+ const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-BF0kL0ae.cjs'); });
18705
18725
  const command = parseTerminalHooksArgs(args.slice(1));
18706
18726
  if (command.action === "help") {
18707
18727
  console.log(TERMINAL_HOOKS_HELP);
@@ -18718,7 +18738,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18718
18738
  }
18719
18739
  } else if (subcommand === "agent-home") {
18720
18740
  try {
18721
- const { parseAgentHomeArgs, runAgentHomeCommand } = await Promise.resolve().then(function () { return require('./agentHome-CpJjrQZc.cjs'); });
18741
+ const { parseAgentHomeArgs, runAgentHomeCommand } = await Promise.resolve().then(function () { return require('./agentHome-BJ7bde35.cjs'); });
18722
18742
  await runAgentHomeCommand(parseAgentHomeArgs(args.slice(1)));
18723
18743
  process.exit(0);
18724
18744
  } catch (error) {
@@ -18727,7 +18747,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18727
18747
  }
18728
18748
  } else if (subcommand === "spawn") {
18729
18749
  try {
18730
- const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-DA8WAFmm.cjs'); });
18750
+ const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-od9V23cc.cjs'); });
18731
18751
  await handleSpawnCommand(args.slice(1));
18732
18752
  } catch (error) {
18733
18753
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -18739,7 +18759,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18739
18759
  return;
18740
18760
  } else if (subcommand === "sessions") {
18741
18761
  try {
18742
- const { handleSessionsCommand } = await Promise.resolve().then(function () { return require('./sessions-Tad8elmy.cjs'); });
18762
+ const { handleSessionsCommand } = await Promise.resolve().then(function () { return require('./sessions-qULzUzlI.cjs'); });
18743
18763
  await handleSessionsCommand(args.slice(1));
18744
18764
  } catch (error) {
18745
18765
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -18751,7 +18771,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18751
18771
  return;
18752
18772
  } else if (subcommand === "send") {
18753
18773
  try {
18754
- const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-wl9ei8yG.cjs'); });
18774
+ const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-9075kHZP.cjs'); });
18755
18775
  await handleSendCommand(args.slice(1));
18756
18776
  } catch (error) {
18757
18777
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -18857,9 +18877,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18857
18877
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
18858
18878
  const projectId = args[3];
18859
18879
  try {
18860
- const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-DeJgSMh-.cjs'); });
18861
- const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./limits-BNTWyUaZ.cjs'); }).then(function (n) { return n.persistence; });
18862
- const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-CN28qJl7.cjs'); }).then(function (n) { return n.api; });
18880
+ const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-D23kF0_u.cjs'); });
18881
+ const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./limits-DY_sFA3J.cjs'); }).then(function (n) { return n.persistence; });
18882
+ const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-CUCU7Vw8.cjs'); }).then(function (n) { return n.api; });
18863
18883
  let userEmail = void 0;
18864
18884
  try {
18865
18885
  const credentials = await readCredentialsForConfiguredRelay2();
@@ -18890,7 +18910,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18890
18910
  }
18891
18911
  if (geminiSubcommand === "project" && args[2] === "get") {
18892
18912
  try {
18893
- const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-DeJgSMh-.cjs'); });
18913
+ const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-D23kF0_u.cjs'); });
18894
18914
  const config = readGeminiLocalConfig();
18895
18915
  if (config.googleCloudProject) {
18896
18916
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -18930,7 +18950,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18930
18950
  process.exit(0);
18931
18951
  }
18932
18952
  try {
18933
- const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-Bgg1BzDK.cjs'); });
18953
+ const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-CtOEFvhf.cjs'); });
18934
18954
  let startedBy = void 0;
18935
18955
  for (let i = 1; i < args.length; i++) {
18936
18956
  if (args[i] === "--started-by") {
@@ -18953,7 +18973,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18953
18973
  } else if (subcommand === "pi") {
18954
18974
  if (args[1] === "--terminal") {
18955
18975
  try {
18956
- const { runPiTerminal } = await Promise.resolve().then(function () { return require('./piTerminal-B7K75aXB.cjs'); });
18976
+ const { runPiTerminal } = await Promise.resolve().then(function () { return require('./piTerminal-qdJ9KZVL.cjs'); });
18957
18977
  process.exitCode = await runPiTerminal(args.slice(2));
18958
18978
  } catch (error) {
18959
18979
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -18970,7 +18990,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18970
18990
  }
18971
18991
  };
18972
18992
  try {
18973
- const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-imt4mC41.cjs'); });
18993
+ const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-DEOVn46R.cjs'); });
18974
18994
  const parsed = parsePiRunnerArgs(args.slice(1));
18975
18995
  const resolved = resolveAcpAgentConfig(["pi", ...parsed.passthrough]);
18976
18996
  const { credentials } = await authAndSetupMachineIfNeeded();
@@ -18998,7 +19018,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
18998
19018
  return;
18999
19019
  } else if (subcommand === "acp") {
19000
19020
  try {
19001
- const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-imt4mC41.cjs'); });
19021
+ const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-DEOVn46R.cjs'); });
19002
19022
  let startedBy = void 0;
19003
19023
  let verbose = false;
19004
19024
  const acpArgs = [];
@@ -19038,7 +19058,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
19038
19058
  return;
19039
19059
  } else if (subcommand === "openclaw") {
19040
19060
  try {
19041
- const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-B9qWHybc.cjs'); });
19061
+ const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-DoqZXBvL.cjs'); });
19042
19062
  let startedBy = void 0;
19043
19063
  let verbose = false;
19044
19064
  let gatewayUrl;
@@ -19089,7 +19109,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
19089
19109
  return;
19090
19110
  } else if (subcommand === "todo") {
19091
19111
  try {
19092
- const { handleTodoCommand } = await Promise.resolve().then(function () { return require('./todo-mCMoGjJk.cjs'); });
19112
+ const { handleTodoCommand } = await Promise.resolve().then(function () { return require('./todo-BCT_ZPuV.cjs'); });
19093
19113
  await handleTodoCommand(args.slice(1));
19094
19114
  } catch (error) {
19095
19115
  console.error(JSON.stringify({ error: error instanceof Error ? error.message : "Todo command failed" }));
@@ -19098,7 +19118,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
19098
19118
  return;
19099
19119
  } else if (subcommand === "teams") {
19100
19120
  try {
19101
- const { handleTeamsCommand } = await Promise.resolve().then(function () { return require('./teams-qVLrFcdd.cjs'); });
19121
+ const { handleTeamsCommand } = await Promise.resolve().then(function () { return require('./teams-CrCzU-AV.cjs'); });
19102
19122
  await handleTeamsCommand(args.slice(1));
19103
19123
  } catch (error) {
19104
19124
  console.error(error instanceof Error ? error.message : "Teams command failed");
@@ -19107,7 +19127,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
19107
19127
  return;
19108
19128
  } else if (subcommand === "auto") {
19109
19129
  try {
19110
- const { handleAutoCommand } = await Promise.resolve().then(function () { return require('./auto-DncmTDvw.cjs'); });
19130
+ const { handleAutoCommand } = await Promise.resolve().then(function () { return require('./auto-C-90ojIH.cjs'); });
19111
19131
  await handleAutoCommand(args.slice(1));
19112
19132
  } catch (error) {
19113
19133
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Automation command failed");
@@ -19119,7 +19139,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
19119
19139
  return;
19120
19140
  } else if (subcommand === "mcp" && (args.length === 1 || args.length === 2 && args[1] === "--terminal-tools")) {
19121
19141
  try {
19122
- const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-CCKCKL6l.cjs'); });
19142
+ const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-JpqI2POW.cjs'); });
19123
19143
  await handleMcpCommand(args[1] === "--terminal-tools");
19124
19144
  } catch (error) {
19125
19145
  process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
@@ -19538,6 +19558,7 @@ exports.setupOfflineReconnection = setupOfflineReconnection;
19538
19558
  exports.stageClaudeAttachments = stageClaudeAttachments;
19539
19559
  exports.startHappyServer = startHappyServer;
19540
19560
  exports.stopSession = stopSession;
19561
+ exports.suggestTitleForPrompt = suggestTitleForPrompt;
19541
19562
  exports.tmuxSupportsSessionEnv = tmuxSupportsSessionEnv;
19542
19563
  exports.triggerFromFlags = triggerFromFlags;
19543
19564
  exports.waitForSessionKey = waitForSessionKey;
package/dist/index.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  require('chalk');
4
- require('./index-ZIW1jrYm.cjs');
5
- require('./limits-BNTWyUaZ.cjs');
4
+ require('./index-DHrwHxHf.cjs');
5
+ require('./limits-DY_sFA3J.cjs');
6
6
  require('zod');
7
- require('./types-CN28qJl7.cjs');
7
+ require('./types-CUCU7Vw8.cjs');
8
8
  require('node:child_process');
9
9
  require('node:os');
10
10
  require('node:crypto');
@@ -12,10 +12,10 @@ require('cross-spawn');
12
12
  require('node:path');
13
13
  require('node:readline');
14
14
  require('node:fs');
15
- require('./projectPath-ChLhdOyt.cjs');
15
+ require('./terminalTitleSuggest-Dji8I0Jy.cjs');
16
16
  require('path');
17
17
  require('url');
18
- require('./agentGuidance-CqBn77AI.cjs');
18
+ require('./agentGuidance-BM4kMNyr.cjs');
19
19
  require('node:fs/promises');
20
20
  require('fs/promises');
21
21
  require('ink');
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import 'chalk';
2
- import './index-BauTv2jB.mjs';
3
- import './limits-CKR_HJnO.mjs';
2
+ import './index-BacwoXzs.mjs';
3
+ import './limits-BtAuKRl2.mjs';
4
4
  import 'zod';
5
- import './types-xKrxbCRv.mjs';
5
+ import './types-BvqOVUOW.mjs';
6
6
  import 'node:child_process';
7
7
  import 'node:os';
8
8
  import 'node:crypto';
@@ -10,10 +10,10 @@ import 'cross-spawn';
10
10
  import 'node:path';
11
11
  import 'node:readline';
12
12
  import 'node:fs';
13
- import './projectPath-CSpqWdxp.mjs';
13
+ import './terminalTitleSuggest-DKgX3osW.mjs';
14
14
  import 'path';
15
15
  import 'url';
16
- import './agentGuidance-Daxn5Nvj.mjs';
16
+ import './agentGuidance-C8unGWp7.mjs';
17
17
  import 'node:fs/promises';
18
18
  import 'fs/promises';
19
19
  import 'ink';
@@ -3,7 +3,7 @@
3
3
  var node_crypto = require('node:crypto');
4
4
  var promises = require('node:fs/promises');
5
5
  var path = require('node:path');
6
- var index = require('./index-ZIW1jrYm.cjs');
6
+ var index = require('./index-DHrwHxHf.cjs');
7
7
 
8
8
  async function assertPrivateDestination(directory) {
9
9
  for (let path$1 = directory; ; path$1 = path.dirname(path$1)) {
@@ -1,7 +1,7 @@
1
1
  import { createHash, randomUUID } from 'node:crypto';
2
2
  import { unlink, rmdir, mkdir, lstat, readFile, writeFile, rename } from 'node:fs/promises';
3
3
  import { join, resolve, dirname } from 'node:path';
4
- import { y as TEAM_SKILL } from './index-BauTv2jB.mjs';
4
+ import { z as TEAM_SKILL } from './index-BacwoXzs.mjs';
5
5
 
6
6
  async function assertPrivateDestination(directory) {
7
7
  for (let path = directory; ; path = dirname(path)) {
@@ -3,9 +3,10 @@ import { homedir } from 'node:os';
3
3
  import { join, resolve, dirname } from 'node:path';
4
4
  import { pathToFileURL } from 'node:url';
5
5
  import { randomUUID } from 'node:crypto';
6
- import { p as projectPath } from './projectPath-CSpqWdxp.mjs';
6
+ import { p as projectPath } from './terminalTitleSuggest-DKgX3osW.mjs';
7
7
  import 'path';
8
8
  import 'url';
9
+ import 'zod';
9
10
 
10
11
  const HEADER = "// Managed by Very Happy: native Pi terminal tools.\n";
11
12
  const PI_TOOLS_HELP = `very-happy install-pi-tools - enable tools in native Pi
@@ -5,9 +5,10 @@ var os = require('node:os');
5
5
  var path = require('node:path');
6
6
  var node_url = require('node:url');
7
7
  var node_crypto = require('node:crypto');
8
- var projectPath = require('./projectPath-ChLhdOyt.cjs');
8
+ var terminalTitleSuggest = require('./terminalTitleSuggest-Dji8I0Jy.cjs');
9
9
  require('path');
10
10
  require('url');
11
+ require('zod');
11
12
 
12
13
  const HEADER = "// Managed by Very Happy: native Pi terminal tools.\n";
13
14
  const PI_TOOLS_HELP = `very-happy install-pi-tools - enable tools in native Pi
@@ -51,7 +52,7 @@ async function installPiTools(remove = false) {
51
52
  await promises.unlink(target);
52
53
  return target;
53
54
  }
54
- const content = piToolsLoader(path.resolve(projectPath.projectPath(), "dist/piExtension.mjs"));
55
+ const content = piToolsLoader(path.resolve(terminalTitleSuggest.projectPath(), "dist/piExtension.mjs"));
55
56
  await promises.mkdir(path.dirname(target), { recursive: true, mode: 448 });
56
57
  const temporary = `${target}.${node_crypto.randomUUID()}.new`;
57
58
  try {