zenflo 0.11.16 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  [![Node](https://img.shields.io/badge/Node-%3E%3D20-brightgreen)](https://nodejs.org/)
12
12
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue)](https://www.typescriptlang.org/)
13
13
 
14
- [Website](https://zenflo.app) • [Documentation](./CLAUDE.md) • [Report Bug](https://github.com/quinnbmay/zenflo/issues)
14
+ [Website](https://zenflo.dev) • [Documentation](./CLAUDE.md) • [Report Bug](https://github.com/quinnbmay/zenflo/issues)
15
15
 
16
16
  </div>
17
17
 
@@ -120,8 +120,9 @@ zenflo connect gemini # Store Gemini API key
120
120
 
121
121
  ```bash
122
122
  # Server Configuration
123
- ZENFLO_SERVER_URL=https://zenflo.combinedmemory.com
124
- ZENFLO_WEBAPP_URL=https://app.combinedmemory.com
123
+ ZENFLO_SERVER_URL=https://api.zenflo.dev # REST API endpoint
124
+ ZENFLO_WEBSOCKET_URL=wss://api.zenflo.dev # WebSocket endpoint (auto-derived if not set)
125
+ ZENFLO_WEBAPP_URL=https://app.zenflo.dev # Web interface
125
126
 
126
127
  # Local Development
127
128
  ZENFLO_HOME_DIR=~/.zenflo
@@ -139,7 +140,8 @@ Create `~/.zenflo/config.json` for persistent settings:
139
140
  {
140
141
  "defaultModel": "sonnet",
141
142
  "permissionMode": "default",
142
- "serverUrl": "https://zenflo.combinedmemory.com",
143
+ "serverUrl": "https://api.zenflo.dev",
144
+ "websocketUrl": "wss://api.zenflo.dev",
143
145
  "experimental": false
144
146
  }
145
147
  ```
@@ -300,7 +302,7 @@ zenflo auth login
300
302
  **"Connection timeout"**
301
303
  ```bash
302
304
  # Check server status
303
- curl https://zenflo.combinedmemory.com/health
305
+ curl https://api.zenflo.dev/health
304
306
 
305
307
  # Use local server for development
306
308
  ZENFLO_SERVER_URL=http://localhost:3005 zenflo
@@ -352,8 +354,10 @@ claude auth login
352
354
 
353
355
 
354
356
  ┌─────────────────┐ ┌──────────────────┐
355
- │ ZenFlo Server │◄────►│ Mobile App
356
- │ (Encrypted API) │ │ (iOS/Android)
357
+ │ ZenFlo Server │◄────►│ Mobile/Web App
358
+ │ (Encrypted API) │ │ (iOS/Android/Web)│
359
+ │ api.zenflo.dev │ │ │
360
+ │ wss:// (sync) │ │ │
357
361
  └─────────────────┘ └──────────────────┘
358
362
  ```
359
363
 
@@ -372,8 +376,8 @@ claude auth login
372
376
 
373
377
  - [CLI Development Guide](./CLAUDE.md)
374
378
  - [Architecture Overview](../docs/ARCHITECTURE.md)
375
- - [API Documentation](../backend/README.md)
376
- - [Mobile App Guide](../mobile/README.md)
379
+ - [API Documentation](../server/README.md)
380
+ - [UI Guide (iOS/Android/Web)](../UI/README.md)
377
381
 
378
382
  ---
379
383
 
@@ -425,8 +429,7 @@ MIT License - See [LICENSE](../LICENSE) for details.
425
429
 
426
430
  ## 🙏 Acknowledgments
427
431
 
428
- - Built on top of [Anthropic Claude](https://www.anthropic.com/)
429
- - Inspired by [Happy](https://github.com/slopus/happy) by slopus
432
+ - Powered by [Anthropic Claude](https://www.anthropic.com/)
430
433
  - Icons from [Claude Code](https://claude.ai/code)
431
434
 
432
435
  ---
@@ -435,7 +438,7 @@ MIT License - See [LICENSE](../LICENSE) for details.
435
438
 
436
439
  **Part of the ZenFlo Platform**
437
440
 
438
- [Website](https://zenflo.app) • [GitHub](https://github.com/quinnbmay/zenflo) • [Support](mailto:yesreply@zenflo.app)
441
+ [Website](https://zenflo.dev) • [GitHub](https://github.com/quinnbmay/zenflo) • [Support](mailto:yesreply@zenflo.dev)
439
442
 
440
443
  ⭐ Star us on GitHub if you find ZenFlo helpful!
441
444
 
@@ -10,7 +10,7 @@ const hasNoDeprecation = process.execArgv.includes('--no-deprecation');
10
10
 
11
11
  if (!hasNoWarnings || !hasNoDeprecation) {
12
12
  const projectRoot = dirname(dirname(fileURLToPath(import.meta.url)));
13
- const entrypoint = join(projectRoot, 'dist', 'codex', 'happyMcpStdioBridge.mjs');
13
+ const entrypoint = join(projectRoot, 'dist', 'codex', 'zenfloMcpStdioBridge.mjs');
14
14
 
15
15
  try {
16
16
  execFileSync(process.execPath, [
@@ -27,6 +27,6 @@ if (!hasNoWarnings || !hasNoDeprecation) {
27
27
  }
28
28
  } else {
29
29
  // Already have desired flags; import module directly
30
- import('../dist/codex/happyMcpStdioBridge.mjs');
30
+ import('../dist/codex/zenfloMcpStdioBridge.mjs');
31
31
  }
32
32
 
@@ -1,7 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import os$1, { homedir } from 'node:os';
3
3
  import { randomUUID, randomBytes } from 'node:crypto';
4
- import { l as logger, p as projectPath, e as backoff, f as delay, R as RawJSONLinesSchema, g as AsyncLock, c as configuration, r as readDaemonState, h as clearDaemonState, d as packageJson, b as readSettings, i as readCredentials, j as encodeBase64, u as updateSettings, k as encodeBase64Url, m as decodeBase64, w as writeCredentialsLegacy, n as writeCredentialsDataKey, o as acquireDaemonLock, q as writeDaemonState, A as ApiClient, s as releaseDaemonLock, t as clearCredentials, v as clearMachineId, x as getLatestDaemonLog } from './types-Csm1mdNY.mjs';
4
+ import { l as logger, p as projectPath, e as backoff, f as delay, R as RawJSONLinesSchema, g as AsyncLock, c as configuration, r as readDaemonState, h as clearDaemonState, d as packageJson, b as readSettings, i as readCredentials, j as encodeBase64, u as updateSettings, k as encodeBase64Url, m as decodeBase64, w as writeCredentialsLegacy, n as writeCredentialsDataKey, o as acquireDaemonLock, q as writeDaemonState, A as ApiClient, s as releaseDaemonLock, t as clearCredentials, v as clearMachineId, x as getLatestDaemonLog } from './types-Bm-nJvHk.mjs';
5
5
  import { spawn, execSync, execFileSync } from 'node:child_process';
6
6
  import { resolve, join } from 'node:path';
7
7
  import { createInterface } from 'node:readline';
@@ -3452,7 +3452,7 @@ async function checkIfDaemonRunningAndCleanupStaleState() {
3452
3452
  return false;
3453
3453
  }
3454
3454
  }
3455
- async function isDaemonRunningCurrentlyInstalledHappyVersion() {
3455
+ async function isDaemonRunningCurrentlyInstalledZenfloVersion() {
3456
3456
  logger.debug("[DAEMON CONTROL] Checking if daemon is running same version");
3457
3457
  const runningDaemon = await checkIfDaemonRunningAndCleanupStaleState();
3458
3458
  if (!runningDaemon) {
@@ -3529,8 +3529,8 @@ async function findAllHappyProcesses() {
3529
3529
  for (const proc of processes) {
3530
3530
  const cmd = proc.cmd || "";
3531
3531
  const name = proc.name || "";
3532
- const isHappy = name.includes("happy") || name === "node" && (cmd.includes("happy-cli") || cmd.includes("dist/index.mjs")) || cmd.includes("happy.mjs") || cmd.includes("zenflo") || cmd.includes("tsx") && cmd.includes("src/index.ts") && cmd.includes("happy-cli");
3533
- if (!isHappy) continue;
3532
+ const isZenflo = name.includes("zenflo") || name === "node" && (cmd.includes("zenflo") || cmd.includes("dist/index.mjs")) || cmd.includes("zenflo.mjs") || cmd.includes("tsx") && cmd.includes("src/index.ts");
3533
+ if (!isZenflo) continue;
3534
3534
  let type = "unknown";
3535
3535
  if (proc.pid === process.pid) {
3536
3536
  type = "current";
@@ -3560,7 +3560,7 @@ async function findRunawayHappyProcesses() {
3560
3560
  (p) => p.pid !== process.pid && (p.type === "daemon" || p.type === "dev-daemon" || p.type === "daemon-spawned-session" || p.type === "dev-daemon-spawned" || p.type === "daemon-version-check" || p.type === "dev-daemon-version-check")
3561
3561
  ).map((p) => ({ pid: p.pid, command: p.command }));
3562
3562
  }
3563
- async function killRunawayHappyProcesses() {
3563
+ async function killRunawayZenfloProcesses() {
3564
3564
  const runawayProcesses = await findRunawayHappyProcesses();
3565
3565
  const errors = [];
3566
3566
  let killed = 0;
@@ -3778,8 +3778,8 @@ ${typeLabels[type] || type}:`));
3778
3778
  console.log(chalk.yellow("No log files found"));
3779
3779
  }
3780
3780
  console.log(chalk.bold("\n\u{1F41B} Support & Bug Reports"));
3781
- console.log(`Report issues: ${chalk.blue("https://github.com/slopus/happy-cli/issues")}`);
3782
- console.log(`Documentation: ${chalk.blue("https://happy.engineering/")}`);
3781
+ console.log(`Report issues: ${chalk.blue("https://github.com/zenflo/zenflo/issues")}`);
3782
+ console.log(`Documentation: ${chalk.blue("https://zenflo.dev/docs")}`);
3783
3783
  }
3784
3784
  console.log(chalk.green("\n\u2705 Doctor diagnosis complete!\n"));
3785
3785
  }
@@ -4286,7 +4286,7 @@ async function startDaemon() {
4286
4286
  });
4287
4287
  logger.debug("[DAEMON RUN] Starting daemon process...");
4288
4288
  logger.debugLargeJson("[DAEMON RUN] Environment", getEnvironmentInfo());
4289
- const runningDaemonVersionMatches = await isDaemonRunningCurrentlyInstalledHappyVersion();
4289
+ const runningDaemonVersionMatches = await isDaemonRunningCurrentlyInstalledZenfloVersion();
4290
4290
  if (!runningDaemonVersionMatches) {
4291
4291
  logger.debug("[DAEMON RUN] Daemon version mismatch detected, restarting daemon with current CLI version");
4292
4292
  await stopDaemon();
@@ -4782,7 +4782,7 @@ async function runClaude(credentials, options = {}) {
4782
4782
  const settings = await readSettings();
4783
4783
  let machineId = settings?.machineId;
4784
4784
  if (!machineId) {
4785
- console.error(`[START] No machine ID found in settings, which is unexepcted since authAndSetupMachineIfNeeded should have created it. Please report this issue on https://github.com/slopus/happy-cli/issues`);
4785
+ console.error(`[START] No machine ID found in settings, which is unexpected since authAndSetupMachineIfNeeded should have created it. Please report this issue on https://github.com/zenflo/zenflo/issues`);
4786
4786
  process.exit(1);
4787
4787
  }
4788
4788
  logger.debug(`Using machineId: ${machineId}`);
@@ -5598,14 +5598,14 @@ async function handleAuthCommand(args) {
5598
5598
  }
5599
5599
  function showAuthHelp() {
5600
5600
  console.log(`
5601
- ${chalk.bold("happy auth")} - Authentication management
5601
+ ${chalk.bold("zenflo auth")} - Authentication management
5602
5602
 
5603
5603
  ${chalk.bold("Usage:")}
5604
- happy auth login [--force] Authenticate with Happy
5605
- happy auth logout Remove authentication and machine data
5606
- happy auth status Show authentication status
5607
- happy auth show-backup Display backup key for mobile/web clients
5608
- happy auth help Show this help message
5604
+ zenflo auth login [--force] Authenticate with ZenFlo
5605
+ zenflo auth logout Remove authentication and machine data
5606
+ zenflo auth status Show authentication status
5607
+ zenflo auth show-backup Display backup key for mobile/web clients
5608
+ zenflo auth help Show this help message
5609
5609
 
5610
5610
  ${chalk.bold("Options:")}
5611
5611
  --force Clear credentials, machine ID, and stop daemon before re-auth
@@ -5640,7 +5640,7 @@ async function handleAuthLogin(args) {
5640
5640
  console.log(chalk.green("\u2713 Already authenticated"));
5641
5641
  console.log(chalk.gray(` Machine ID: ${settings.machineId}`));
5642
5642
  console.log(chalk.gray(` Host: ${os$1.hostname()}`));
5643
- console.log(chalk.gray(` Use 'happy auth login --force' to re-authenticate`));
5643
+ console.log(chalk.gray(` Use 'zenflo auth login --force' to re-authenticate`));
5644
5644
  return;
5645
5645
  } else if (existingCreds && !settings?.machineId) {
5646
5646
  console.log(chalk.yellow("\u26A0\uFE0F Credentials exist but machine ID is missing"));
@@ -5658,14 +5658,14 @@ async function handleAuthLogin(args) {
5658
5658
  }
5659
5659
  }
5660
5660
  async function handleAuthLogout() {
5661
- const happyDir = configuration.zenfloHomeDir;
5661
+ const zenfloDir = configuration.zenfloHomeDir;
5662
5662
  const credentials = await readCredentials();
5663
5663
  if (!credentials) {
5664
5664
  console.log(chalk.yellow("Not currently authenticated"));
5665
5665
  return;
5666
5666
  }
5667
- console.log(chalk.blue("This will log you out of Happy"));
5668
- console.log(chalk.yellow("\u26A0\uFE0F You will need to re-authenticate to use Happy again"));
5667
+ console.log(chalk.blue("This will log you out of ZenFlo"));
5668
+ console.log(chalk.yellow("\u26A0\uFE0F You will need to re-authenticate to use ZenFlo again"));
5669
5669
  const rl = createInterface({
5670
5670
  input: process.stdin,
5671
5671
  output: process.stdout
@@ -5681,11 +5681,11 @@ async function handleAuthLogout() {
5681
5681
  console.log(chalk.gray("Stopped daemon"));
5682
5682
  } catch {
5683
5683
  }
5684
- if (existsSync(happyDir)) {
5685
- rmSync(happyDir, { recursive: true, force: true });
5684
+ if (existsSync(zenfloDir)) {
5685
+ rmSync(zenfloDir, { recursive: true, force: true });
5686
5686
  }
5687
5687
  console.log(chalk.green("\u2713 Successfully logged out"));
5688
- console.log(chalk.gray(' Run "happy auth login" to authenticate again'));
5688
+ console.log(chalk.gray(' Run "zenflo auth login" to authenticate again'));
5689
5689
  } catch (error) {
5690
5690
  throw new Error(`Failed to logout: ${error instanceof Error ? error.message : "Unknown error"}`);
5691
5691
  }
@@ -5699,7 +5699,7 @@ async function handleAuthStatus() {
5699
5699
  console.log(chalk.bold("\nAuthentication Status\n"));
5700
5700
  if (!credentials) {
5701
5701
  console.log(chalk.red("\u2717 Not authenticated"));
5702
- console.log(chalk.gray(' Run "happy auth login" to authenticate'));
5702
+ console.log(chalk.gray(' Run "zenflo auth login" to authenticate'));
5703
5703
  return;
5704
5704
  }
5705
5705
  console.log(chalk.green("\u2713 Authenticated"));
@@ -5711,7 +5711,7 @@ async function handleAuthStatus() {
5711
5711
  console.log(chalk.gray(` Host: ${os$1.hostname()}`));
5712
5712
  } else {
5713
5713
  console.log(chalk.yellow("\u26A0\uFE0F Machine not registered"));
5714
- console.log(chalk.gray(' Run "happy auth login --force" to fix this'));
5714
+ console.log(chalk.gray(' Run "zenflo auth login --force" to fix this'));
5715
5715
  }
5716
5716
  console.log(chalk.gray(`
5717
5717
  Data directory: ${configuration.zenfloHomeDir}`));
@@ -6246,7 +6246,7 @@ ${chalk.bold("Examples:")}
6246
6246
  ${chalk.bold("Notes:")}
6247
6247
  \u2022 You must be authenticated with Happy first (run 'happy auth login')
6248
6248
  \u2022 API keys are encrypted and stored securely in Happy cloud
6249
- \u2022 You can manage your stored keys at app.combinedmemory.com
6249
+ \u2022 You can manage your stored keys at app.zenflo.dev
6250
6250
  `);
6251
6251
  }
6252
6252
  async function handleConnectVendor(vendor, displayName) {
@@ -6291,7 +6291,7 @@ async function handleConnectVendor(vendor, displayName) {
6291
6291
  const subcommand = args[0];
6292
6292
  if (subcommand === "doctor") {
6293
6293
  if (args[1] === "clean") {
6294
- const result = await killRunawayHappyProcesses();
6294
+ const result = await killRunawayZenfloProcesses();
6295
6295
  console.log(`Cleaned up ${result.killed} runaway processes`);
6296
6296
  if (result.errors.length > 0) {
6297
6297
  console.log("Errors:", result.errors);
@@ -6324,7 +6324,7 @@ async function handleConnectVendor(vendor, displayName) {
6324
6324
  return;
6325
6325
  } else if (subcommand === "codex") {
6326
6326
  try {
6327
- const { runCodex } = await import('./runCodex-EDzqEq9k.mjs');
6327
+ const { runCodex } = await import('./runCodex-DU0XMdXX.mjs');
6328
6328
  let startedBy = void 0;
6329
6329
  for (let i = 1; i < args.length; i++) {
6330
6330
  if (args[i] === "--started-by") {
@@ -6345,7 +6345,7 @@ async function handleConnectVendor(vendor, displayName) {
6345
6345
  return;
6346
6346
  } else if (subcommand === "ccr" || subcommand === "glm") {
6347
6347
  try {
6348
- const { runCCR } = await import('./runCCR-aIqxCd98.mjs');
6348
+ const { runCCR } = await import('./runCCR-DHyrfvNo.mjs');
6349
6349
  let startedBy = void 0;
6350
6350
  for (let i = 1; i < args.length; i++) {
6351
6351
  if (args[i] === "--started-by") {
@@ -6365,7 +6365,7 @@ async function handleConnectVendor(vendor, displayName) {
6365
6365
  }
6366
6366
  return;
6367
6367
  } else if (subcommand === "logout") {
6368
- console.log(chalk.yellow('Note: "happy logout" is deprecated. Use "happy auth logout" instead.\n'));
6368
+ console.log(chalk.yellow('Note: "zenflo logout" is deprecated. Use "zenflo auth logout" instead.\n'));
6369
6369
  try {
6370
6370
  await handleAuthCommand(["logout"]);
6371
6371
  } catch (error) {
@@ -6448,13 +6448,13 @@ async function handleConnectVendor(vendor, displayName) {
6448
6448
  let statusModule;
6449
6449
  switch (process.platform) {
6450
6450
  case "darwin":
6451
- statusModule = await import('./status-Bg8Poq8F.mjs');
6451
+ statusModule = await import('./status-VT6VbsEc.mjs');
6452
6452
  break;
6453
6453
  case "win32":
6454
- statusModule = await import('./status-BjpQpi-v.mjs');
6454
+ statusModule = await import('./status-DcMExT1x.mjs');
6455
6455
  break;
6456
6456
  case "linux":
6457
- statusModule = await import('./status-DZxquRN1.mjs');
6457
+ statusModule = await import('./status-DgMMF-7E.mjs');
6458
6458
  break;
6459
6459
  default:
6460
6460
  console.error(chalk.red(`Status command not supported on platform: ${process.platform}`));
@@ -6490,20 +6490,20 @@ async function handleConnectVendor(vendor, displayName) {
6490
6490
  }
6491
6491
  } else {
6492
6492
  console.log(`
6493
- ${chalk.bold("happy daemon")} - Daemon management
6493
+ ${chalk.bold("zenflo daemon")} - Daemon management
6494
6494
 
6495
6495
  ${chalk.bold("Usage:")}
6496
- happy daemon start Start the daemon (detached)
6497
- happy daemon stop Stop the daemon (sessions stay alive)
6498
- happy daemon status Show daemon status
6499
- happy daemon list List active sessions
6496
+ zenflo daemon start Start the daemon (detached)
6497
+ zenflo daemon stop Stop the daemon (sessions stay alive)
6498
+ zenflo daemon status Show daemon status
6499
+ zenflo daemon list List active sessions
6500
6500
 
6501
- If you want to kill all happy related processes run
6502
- ${chalk.cyan("happy doctor clean")}
6501
+ If you want to kill all zenflo related processes run
6502
+ ${chalk.cyan("zenflo doctor clean")}
6503
6503
 
6504
6504
  ${chalk.bold("Note:")} The daemon runs in the background and manages Claude sessions.
6505
6505
 
6506
- ${chalk.bold("To clean up runaway processes:")} Use ${chalk.cyan("happy doctor clean")}
6506
+ ${chalk.bold("To clean up runaway processes:")} Use ${chalk.cyan("zenflo doctor clean")}
6507
6507
  `);
6508
6508
  }
6509
6509
  return;
@@ -6541,29 +6541,28 @@ ${chalk.bold("To clean up runaway processes:")} Use ${chalk.cyan("happy doctor c
6541
6541
  }
6542
6542
  if (showHelp) {
6543
6543
  console.log(`
6544
- ${chalk.bold("happy")} - Claude Code On the Go
6544
+ ${chalk.bold("zenflo")} - Claude Code On the Go
6545
6545
 
6546
6546
  ${chalk.bold("Usage:")}
6547
- happy [options] Start Claude with mobile control
6548
- happy auth Manage authentication
6549
- happy codex Start Codex mode
6550
- happy connect Connect AI vendor API keys
6551
- happy notify Send push notification
6552
- happy daemon Manage background service that allows
6547
+ zenflo [options] Start Claude with mobile control
6548
+ zenflo auth Manage authentication
6549
+ zenflo codex Start Codex mode
6550
+ zenflo connect Connect AI vendor API keys
6551
+ zenflo notify Send push notification
6552
+ zenflo daemon Manage background service that allows
6553
6553
  to spawn new sessions away from your computer
6554
- happy doctor System diagnostics & troubleshooting
6554
+ zenflo doctor System diagnostics & troubleshooting
6555
6555
 
6556
6556
  ${chalk.bold("Examples:")}
6557
- happy Start session
6558
- happy --yolo Start with bypassing permissions
6559
- happy sugar for --dangerously-skip-permissions
6560
- happy auth login --force Authenticate
6561
- happy doctor Run diagnostics
6557
+ zenflo Start session
6558
+ zenflo --yolo Start with bypassing permissions
6559
+ zenflo auth login --force Authenticate
6560
+ zenflo doctor Run diagnostics
6562
6561
 
6563
- ${chalk.bold("Happy supports ALL Claude options!")}
6564
- Use any claude flag with happy as you would with claude. Our favorite:
6562
+ ${chalk.bold("ZenFlo supports ALL Claude options!")}
6563
+ Use any claude flag with zenflo as you would with claude. Our favorite:
6565
6564
 
6566
- happy --resume
6565
+ zenflo --resume
6567
6566
 
6568
6567
  ${chalk.gray("\u2500".repeat(60))}
6569
6568
  ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
@@ -6583,7 +6582,7 @@ ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
6583
6582
  credentials
6584
6583
  } = await authAndSetupMachineIfNeeded();
6585
6584
  logger.debug("Ensuring ZenFlo background service is running & matches our version...");
6586
- if (!await isDaemonRunningCurrentlyInstalledHappyVersion()) {
6585
+ if (!await isDaemonRunningCurrentlyInstalledZenfloVersion()) {
6587
6586
  logger.debug("Starting ZenFlo background service...");
6588
6587
  const daemonProcess = spawnZenfloCLI(["daemon", "start-sync"], {
6589
6588
  detached: true,
@@ -6623,37 +6622,37 @@ async function handleNotifyCommand(args) {
6623
6622
  }
6624
6623
  if (showHelp) {
6625
6624
  console.log(`
6626
- ${chalk.bold("happy notify")} - Send notification
6625
+ ${chalk.bold("zenflo notify")} - Send notification
6627
6626
 
6628
6627
  ${chalk.bold("Usage:")}
6629
- happy notify -p <message> [-t <title>] Send notification with custom message and optional title
6630
- happy notify -h, --help Show this help
6628
+ zenflo notify -p <message> [-t <title>] Send notification with custom message and optional title
6629
+ zenflo notify -h, --help Show this help
6631
6630
 
6632
6631
  ${chalk.bold("Options:")}
6633
6632
  -p <message> Notification message (required)
6634
- -t <title> Notification title (optional, defaults to "Happy")
6633
+ -t <title> Notification title (optional, defaults to "ZenFlo")
6635
6634
 
6636
6635
  ${chalk.bold("Examples:")}
6637
- happy notify -p "Deployment complete!"
6638
- happy notify -p "System update complete" -t "Server Status"
6639
- happy notify -t "Alert" -p "Database connection restored"
6636
+ zenflo notify -p "Deployment complete!"
6637
+ zenflo notify -p "System update complete" -t "Server Status"
6638
+ zenflo notify -t "Alert" -p "Database connection restored"
6640
6639
  `);
6641
6640
  return;
6642
6641
  }
6643
6642
  if (!message) {
6644
6643
  console.error(chalk.red('Error: Message is required. Use -p "your message" to specify the notification text.'));
6645
- console.log(chalk.gray('Run "happy notify --help" for usage information.'));
6644
+ console.log(chalk.gray('Run "zenflo notify --help" for usage information.'));
6646
6645
  process.exit(1);
6647
6646
  }
6648
6647
  let credentials = await readCredentials();
6649
6648
  if (!credentials) {
6650
- console.error(chalk.red('Error: Not authenticated. Please run "happy auth login" first.'));
6649
+ console.error(chalk.red('Error: Not authenticated. Please run "zenflo auth login" first.'));
6651
6650
  process.exit(1);
6652
6651
  }
6653
6652
  console.log(chalk.blue("\u{1F4F1} Sending push notification..."));
6654
6653
  try {
6655
6654
  const api = await ApiClient.create(credentials);
6656
- const notificationTitle = title || "Happy";
6655
+ const notificationTitle = title || "ZenFlo";
6657
6656
  api.push().sendToAllDevices(
6658
6657
  notificationTitle,
6659
6658
  message,
@@ -3,7 +3,7 @@
3
3
  var chalk = require('chalk');
4
4
  var os = require('node:os');
5
5
  var node_crypto = require('node:crypto');
6
- var types = require('./types-xeDL1zwI.cjs');
6
+ var types = require('./types-C0K47bQB.cjs');
7
7
  var node_child_process = require('node:child_process');
8
8
  var node_path = require('node:path');
9
9
  var node_readline = require('node:readline');
@@ -1046,7 +1046,7 @@ class AbortError extends Error {
1046
1046
  }
1047
1047
  }
1048
1048
 
1049
- const __filename$2 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-CXpvXqBN.cjs', document.baseURI).href)));
1049
+ const __filename$2 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-LeMT1COL.cjs', document.baseURI).href)));
1050
1050
  const __dirname$2 = node_path.join(__filename$2, "..");
1051
1051
  function getDefaultClaudeCodePath() {
1052
1052
  return node_path.join(__dirname$2, "..", "..", "..", "node_modules", "@anthropic-ai", "claude-code", "cli.js");
@@ -3474,7 +3474,7 @@ async function checkIfDaemonRunningAndCleanupStaleState() {
3474
3474
  return false;
3475
3475
  }
3476
3476
  }
3477
- async function isDaemonRunningCurrentlyInstalledHappyVersion() {
3477
+ async function isDaemonRunningCurrentlyInstalledZenfloVersion() {
3478
3478
  types.logger.debug("[DAEMON CONTROL] Checking if daemon is running same version");
3479
3479
  const runningDaemon = await checkIfDaemonRunningAndCleanupStaleState();
3480
3480
  if (!runningDaemon) {
@@ -3551,8 +3551,8 @@ async function findAllHappyProcesses() {
3551
3551
  for (const proc of processes) {
3552
3552
  const cmd = proc.cmd || "";
3553
3553
  const name = proc.name || "";
3554
- const isHappy = name.includes("happy") || name === "node" && (cmd.includes("happy-cli") || cmd.includes("dist/index.mjs")) || cmd.includes("happy.mjs") || cmd.includes("zenflo") || cmd.includes("tsx") && cmd.includes("src/index.ts") && cmd.includes("happy-cli");
3555
- if (!isHappy) continue;
3554
+ const isZenflo = name.includes("zenflo") || name === "node" && (cmd.includes("zenflo") || cmd.includes("dist/index.mjs")) || cmd.includes("zenflo.mjs") || cmd.includes("tsx") && cmd.includes("src/index.ts");
3555
+ if (!isZenflo) continue;
3556
3556
  let type = "unknown";
3557
3557
  if (proc.pid === process.pid) {
3558
3558
  type = "current";
@@ -3582,7 +3582,7 @@ async function findRunawayHappyProcesses() {
3582
3582
  (p) => p.pid !== process.pid && (p.type === "daemon" || p.type === "dev-daemon" || p.type === "daemon-spawned-session" || p.type === "dev-daemon-spawned" || p.type === "daemon-version-check" || p.type === "dev-daemon-version-check")
3583
3583
  ).map((p) => ({ pid: p.pid, command: p.command }));
3584
3584
  }
3585
- async function killRunawayHappyProcesses() {
3585
+ async function killRunawayZenfloProcesses() {
3586
3586
  const runawayProcesses = await findRunawayHappyProcesses();
3587
3587
  const errors = [];
3588
3588
  let killed = 0;
@@ -3800,8 +3800,8 @@ ${typeLabels[type] || type}:`));
3800
3800
  console.log(chalk.yellow("No log files found"));
3801
3801
  }
3802
3802
  console.log(chalk.bold("\n\u{1F41B} Support & Bug Reports"));
3803
- console.log(`Report issues: ${chalk.blue("https://github.com/slopus/happy-cli/issues")}`);
3804
- console.log(`Documentation: ${chalk.blue("https://happy.engineering/")}`);
3803
+ console.log(`Report issues: ${chalk.blue("https://github.com/zenflo/zenflo/issues")}`);
3804
+ console.log(`Documentation: ${chalk.blue("https://zenflo.dev/docs")}`);
3805
3805
  }
3806
3806
  console.log(chalk.green("\n\u2705 Doctor diagnosis complete!\n"));
3807
3807
  }
@@ -4308,7 +4308,7 @@ async function startDaemon() {
4308
4308
  });
4309
4309
  types.logger.debug("[DAEMON RUN] Starting daemon process...");
4310
4310
  types.logger.debugLargeJson("[DAEMON RUN] Environment", getEnvironmentInfo());
4311
- const runningDaemonVersionMatches = await isDaemonRunningCurrentlyInstalledHappyVersion();
4311
+ const runningDaemonVersionMatches = await isDaemonRunningCurrentlyInstalledZenfloVersion();
4312
4312
  if (!runningDaemonVersionMatches) {
4313
4313
  types.logger.debug("[DAEMON RUN] Daemon version mismatch detected, restarting daemon with current CLI version");
4314
4314
  await stopDaemon();
@@ -4804,7 +4804,7 @@ async function runClaude(credentials, options = {}) {
4804
4804
  const settings = await types.readSettings();
4805
4805
  let machineId = settings?.machineId;
4806
4806
  if (!machineId) {
4807
- console.error(`[START] No machine ID found in settings, which is unexepcted since authAndSetupMachineIfNeeded should have created it. Please report this issue on https://github.com/slopus/happy-cli/issues`);
4807
+ console.error(`[START] No machine ID found in settings, which is unexpected since authAndSetupMachineIfNeeded should have created it. Please report this issue on https://github.com/zenflo/zenflo/issues`);
4808
4808
  process.exit(1);
4809
4809
  }
4810
4810
  types.logger.debug(`Using machineId: ${machineId}`);
@@ -5065,7 +5065,7 @@ async function runClaude(credentials, options = {}) {
5065
5065
  process.exit(0);
5066
5066
  }
5067
5067
 
5068
- const __filename$1 = url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-CXpvXqBN.cjs', document.baseURI).href)));
5068
+ const __filename$1 = url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-LeMT1COL.cjs', document.baseURI).href)));
5069
5069
  const __dirname$1 = path.dirname(__filename$1);
5070
5070
  const PLIST_LABEL$1 = "com.zenflo.daemon";
5071
5071
  const LAUNCH_AGENTS_DIR$1 = path.join(os$1.homedir(), "Library", "LaunchAgents");
@@ -5620,14 +5620,14 @@ async function handleAuthCommand(args) {
5620
5620
  }
5621
5621
  function showAuthHelp() {
5622
5622
  console.log(`
5623
- ${chalk.bold("happy auth")} - Authentication management
5623
+ ${chalk.bold("zenflo auth")} - Authentication management
5624
5624
 
5625
5625
  ${chalk.bold("Usage:")}
5626
- happy auth login [--force] Authenticate with Happy
5627
- happy auth logout Remove authentication and machine data
5628
- happy auth status Show authentication status
5629
- happy auth show-backup Display backup key for mobile/web clients
5630
- happy auth help Show this help message
5626
+ zenflo auth login [--force] Authenticate with ZenFlo
5627
+ zenflo auth logout Remove authentication and machine data
5628
+ zenflo auth status Show authentication status
5629
+ zenflo auth show-backup Display backup key for mobile/web clients
5630
+ zenflo auth help Show this help message
5631
5631
 
5632
5632
  ${chalk.bold("Options:")}
5633
5633
  --force Clear credentials, machine ID, and stop daemon before re-auth
@@ -5662,7 +5662,7 @@ async function handleAuthLogin(args) {
5662
5662
  console.log(chalk.green("\u2713 Already authenticated"));
5663
5663
  console.log(chalk.gray(` Machine ID: ${settings.machineId}`));
5664
5664
  console.log(chalk.gray(` Host: ${os.hostname()}`));
5665
- console.log(chalk.gray(` Use 'happy auth login --force' to re-authenticate`));
5665
+ console.log(chalk.gray(` Use 'zenflo auth login --force' to re-authenticate`));
5666
5666
  return;
5667
5667
  } else if (existingCreds && !settings?.machineId) {
5668
5668
  console.log(chalk.yellow("\u26A0\uFE0F Credentials exist but machine ID is missing"));
@@ -5680,14 +5680,14 @@ async function handleAuthLogin(args) {
5680
5680
  }
5681
5681
  }
5682
5682
  async function handleAuthLogout() {
5683
- const happyDir = types.configuration.zenfloHomeDir;
5683
+ const zenfloDir = types.configuration.zenfloHomeDir;
5684
5684
  const credentials = await types.readCredentials();
5685
5685
  if (!credentials) {
5686
5686
  console.log(chalk.yellow("Not currently authenticated"));
5687
5687
  return;
5688
5688
  }
5689
- console.log(chalk.blue("This will log you out of Happy"));
5690
- console.log(chalk.yellow("\u26A0\uFE0F You will need to re-authenticate to use Happy again"));
5689
+ console.log(chalk.blue("This will log you out of ZenFlo"));
5690
+ console.log(chalk.yellow("\u26A0\uFE0F You will need to re-authenticate to use ZenFlo again"));
5691
5691
  const rl = node_readline.createInterface({
5692
5692
  input: process.stdin,
5693
5693
  output: process.stdout
@@ -5703,11 +5703,11 @@ async function handleAuthLogout() {
5703
5703
  console.log(chalk.gray("Stopped daemon"));
5704
5704
  } catch {
5705
5705
  }
5706
- if (fs.existsSync(happyDir)) {
5707
- fs.rmSync(happyDir, { recursive: true, force: true });
5706
+ if (fs.existsSync(zenfloDir)) {
5707
+ fs.rmSync(zenfloDir, { recursive: true, force: true });
5708
5708
  }
5709
5709
  console.log(chalk.green("\u2713 Successfully logged out"));
5710
- console.log(chalk.gray(' Run "happy auth login" to authenticate again'));
5710
+ console.log(chalk.gray(' Run "zenflo auth login" to authenticate again'));
5711
5711
  } catch (error) {
5712
5712
  throw new Error(`Failed to logout: ${error instanceof Error ? error.message : "Unknown error"}`);
5713
5713
  }
@@ -5721,7 +5721,7 @@ async function handleAuthStatus() {
5721
5721
  console.log(chalk.bold("\nAuthentication Status\n"));
5722
5722
  if (!credentials) {
5723
5723
  console.log(chalk.red("\u2717 Not authenticated"));
5724
- console.log(chalk.gray(' Run "happy auth login" to authenticate'));
5724
+ console.log(chalk.gray(' Run "zenflo auth login" to authenticate'));
5725
5725
  return;
5726
5726
  }
5727
5727
  console.log(chalk.green("\u2713 Authenticated"));
@@ -5733,7 +5733,7 @@ async function handleAuthStatus() {
5733
5733
  console.log(chalk.gray(` Host: ${os.hostname()}`));
5734
5734
  } else {
5735
5735
  console.log(chalk.yellow("\u26A0\uFE0F Machine not registered"));
5736
- console.log(chalk.gray(' Run "happy auth login --force" to fix this'));
5736
+ console.log(chalk.gray(' Run "zenflo auth login --force" to fix this'));
5737
5737
  }
5738
5738
  console.log(chalk.gray(`
5739
5739
  Data directory: ${types.configuration.zenfloHomeDir}`));
@@ -6268,7 +6268,7 @@ ${chalk.bold("Examples:")}
6268
6268
  ${chalk.bold("Notes:")}
6269
6269
  \u2022 You must be authenticated with Happy first (run 'happy auth login')
6270
6270
  \u2022 API keys are encrypted and stored securely in Happy cloud
6271
- \u2022 You can manage your stored keys at app.combinedmemory.com
6271
+ \u2022 You can manage your stored keys at app.zenflo.dev
6272
6272
  `);
6273
6273
  }
6274
6274
  async function handleConnectVendor(vendor, displayName) {
@@ -6313,7 +6313,7 @@ async function handleConnectVendor(vendor, displayName) {
6313
6313
  const subcommand = args[0];
6314
6314
  if (subcommand === "doctor") {
6315
6315
  if (args[1] === "clean") {
6316
- const result = await killRunawayHappyProcesses();
6316
+ const result = await killRunawayZenfloProcesses();
6317
6317
  console.log(`Cleaned up ${result.killed} runaway processes`);
6318
6318
  if (result.errors.length > 0) {
6319
6319
  console.log("Errors:", result.errors);
@@ -6346,7 +6346,7 @@ async function handleConnectVendor(vendor, displayName) {
6346
6346
  return;
6347
6347
  } else if (subcommand === "codex") {
6348
6348
  try {
6349
- const { runCodex } = await Promise.resolve().then(function () { return require('./runCodex-Ditb3yDm.cjs'); });
6349
+ const { runCodex } = await Promise.resolve().then(function () { return require('./runCodex-BED95lb3.cjs'); });
6350
6350
  let startedBy = void 0;
6351
6351
  for (let i = 1; i < args.length; i++) {
6352
6352
  if (args[i] === "--started-by") {
@@ -6367,7 +6367,7 @@ async function handleConnectVendor(vendor, displayName) {
6367
6367
  return;
6368
6368
  } else if (subcommand === "ccr" || subcommand === "glm") {
6369
6369
  try {
6370
- const { runCCR } = await Promise.resolve().then(function () { return require('./runCCR-dvxR8pMF.cjs'); });
6370
+ const { runCCR } = await Promise.resolve().then(function () { return require('./runCCR-CokU0NUY.cjs'); });
6371
6371
  let startedBy = void 0;
6372
6372
  for (let i = 1; i < args.length; i++) {
6373
6373
  if (args[i] === "--started-by") {
@@ -6387,7 +6387,7 @@ async function handleConnectVendor(vendor, displayName) {
6387
6387
  }
6388
6388
  return;
6389
6389
  } else if (subcommand === "logout") {
6390
- console.log(chalk.yellow('Note: "happy logout" is deprecated. Use "happy auth logout" instead.\n'));
6390
+ console.log(chalk.yellow('Note: "zenflo logout" is deprecated. Use "zenflo auth logout" instead.\n'));
6391
6391
  try {
6392
6392
  await handleAuthCommand(["logout"]);
6393
6393
  } catch (error) {
@@ -6470,13 +6470,13 @@ async function handleConnectVendor(vendor, displayName) {
6470
6470
  let statusModule;
6471
6471
  switch (process.platform) {
6472
6472
  case "darwin":
6473
- statusModule = await Promise.resolve().then(function () { return require('./status-vXdYG5Y7.cjs'); });
6473
+ statusModule = await Promise.resolve().then(function () { return require('./status-6nX5obxE.cjs'); });
6474
6474
  break;
6475
6475
  case "win32":
6476
- statusModule = await Promise.resolve().then(function () { return require('./status-CZLPKuUC.cjs'); });
6476
+ statusModule = await Promise.resolve().then(function () { return require('./status-DUnHkBDq.cjs'); });
6477
6477
  break;
6478
6478
  case "linux":
6479
- statusModule = await Promise.resolve().then(function () { return require('./status-D26CPR_t.cjs'); });
6479
+ statusModule = await Promise.resolve().then(function () { return require('./status-CES2ft-F.cjs'); });
6480
6480
  break;
6481
6481
  default:
6482
6482
  console.error(chalk.red(`Status command not supported on platform: ${process.platform}`));
@@ -6512,20 +6512,20 @@ async function handleConnectVendor(vendor, displayName) {
6512
6512
  }
6513
6513
  } else {
6514
6514
  console.log(`
6515
- ${chalk.bold("happy daemon")} - Daemon management
6515
+ ${chalk.bold("zenflo daemon")} - Daemon management
6516
6516
 
6517
6517
  ${chalk.bold("Usage:")}
6518
- happy daemon start Start the daemon (detached)
6519
- happy daemon stop Stop the daemon (sessions stay alive)
6520
- happy daemon status Show daemon status
6521
- happy daemon list List active sessions
6518
+ zenflo daemon start Start the daemon (detached)
6519
+ zenflo daemon stop Stop the daemon (sessions stay alive)
6520
+ zenflo daemon status Show daemon status
6521
+ zenflo daemon list List active sessions
6522
6522
 
6523
- If you want to kill all happy related processes run
6524
- ${chalk.cyan("happy doctor clean")}
6523
+ If you want to kill all zenflo related processes run
6524
+ ${chalk.cyan("zenflo doctor clean")}
6525
6525
 
6526
6526
  ${chalk.bold("Note:")} The daemon runs in the background and manages Claude sessions.
6527
6527
 
6528
- ${chalk.bold("To clean up runaway processes:")} Use ${chalk.cyan("happy doctor clean")}
6528
+ ${chalk.bold("To clean up runaway processes:")} Use ${chalk.cyan("zenflo doctor clean")}
6529
6529
  `);
6530
6530
  }
6531
6531
  return;
@@ -6563,29 +6563,28 @@ ${chalk.bold("To clean up runaway processes:")} Use ${chalk.cyan("happy doctor c
6563
6563
  }
6564
6564
  if (showHelp) {
6565
6565
  console.log(`
6566
- ${chalk.bold("happy")} - Claude Code On the Go
6566
+ ${chalk.bold("zenflo")} - Claude Code On the Go
6567
6567
 
6568
6568
  ${chalk.bold("Usage:")}
6569
- happy [options] Start Claude with mobile control
6570
- happy auth Manage authentication
6571
- happy codex Start Codex mode
6572
- happy connect Connect AI vendor API keys
6573
- happy notify Send push notification
6574
- happy daemon Manage background service that allows
6569
+ zenflo [options] Start Claude with mobile control
6570
+ zenflo auth Manage authentication
6571
+ zenflo codex Start Codex mode
6572
+ zenflo connect Connect AI vendor API keys
6573
+ zenflo notify Send push notification
6574
+ zenflo daemon Manage background service that allows
6575
6575
  to spawn new sessions away from your computer
6576
- happy doctor System diagnostics & troubleshooting
6576
+ zenflo doctor System diagnostics & troubleshooting
6577
6577
 
6578
6578
  ${chalk.bold("Examples:")}
6579
- happy Start session
6580
- happy --yolo Start with bypassing permissions
6581
- happy sugar for --dangerously-skip-permissions
6582
- happy auth login --force Authenticate
6583
- happy doctor Run diagnostics
6579
+ zenflo Start session
6580
+ zenflo --yolo Start with bypassing permissions
6581
+ zenflo auth login --force Authenticate
6582
+ zenflo doctor Run diagnostics
6584
6583
 
6585
- ${chalk.bold("Happy supports ALL Claude options!")}
6586
- Use any claude flag with happy as you would with claude. Our favorite:
6584
+ ${chalk.bold("ZenFlo supports ALL Claude options!")}
6585
+ Use any claude flag with zenflo as you would with claude. Our favorite:
6587
6586
 
6588
- happy --resume
6587
+ zenflo --resume
6589
6588
 
6590
6589
  ${chalk.gray("\u2500".repeat(60))}
6591
6590
  ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
@@ -6605,7 +6604,7 @@ ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
6605
6604
  credentials
6606
6605
  } = await authAndSetupMachineIfNeeded();
6607
6606
  types.logger.debug("Ensuring ZenFlo background service is running & matches our version...");
6608
- if (!await isDaemonRunningCurrentlyInstalledHappyVersion()) {
6607
+ if (!await isDaemonRunningCurrentlyInstalledZenfloVersion()) {
6609
6608
  types.logger.debug("Starting ZenFlo background service...");
6610
6609
  const daemonProcess = spawnZenfloCLI(["daemon", "start-sync"], {
6611
6610
  detached: true,
@@ -6645,37 +6644,37 @@ async function handleNotifyCommand(args) {
6645
6644
  }
6646
6645
  if (showHelp) {
6647
6646
  console.log(`
6648
- ${chalk.bold("happy notify")} - Send notification
6647
+ ${chalk.bold("zenflo notify")} - Send notification
6649
6648
 
6650
6649
  ${chalk.bold("Usage:")}
6651
- happy notify -p <message> [-t <title>] Send notification with custom message and optional title
6652
- happy notify -h, --help Show this help
6650
+ zenflo notify -p <message> [-t <title>] Send notification with custom message and optional title
6651
+ zenflo notify -h, --help Show this help
6653
6652
 
6654
6653
  ${chalk.bold("Options:")}
6655
6654
  -p <message> Notification message (required)
6656
- -t <title> Notification title (optional, defaults to "Happy")
6655
+ -t <title> Notification title (optional, defaults to "ZenFlo")
6657
6656
 
6658
6657
  ${chalk.bold("Examples:")}
6659
- happy notify -p "Deployment complete!"
6660
- happy notify -p "System update complete" -t "Server Status"
6661
- happy notify -t "Alert" -p "Database connection restored"
6658
+ zenflo notify -p "Deployment complete!"
6659
+ zenflo notify -p "System update complete" -t "Server Status"
6660
+ zenflo notify -t "Alert" -p "Database connection restored"
6662
6661
  `);
6663
6662
  return;
6664
6663
  }
6665
6664
  if (!message) {
6666
6665
  console.error(chalk.red('Error: Message is required. Use -p "your message" to specify the notification text.'));
6667
- console.log(chalk.gray('Run "happy notify --help" for usage information.'));
6666
+ console.log(chalk.gray('Run "zenflo notify --help" for usage information.'));
6668
6667
  process.exit(1);
6669
6668
  }
6670
6669
  let credentials = await types.readCredentials();
6671
6670
  if (!credentials) {
6672
- console.error(chalk.red('Error: Not authenticated. Please run "happy auth login" first.'));
6671
+ console.error(chalk.red('Error: Not authenticated. Please run "zenflo auth login" first.'));
6673
6672
  process.exit(1);
6674
6673
  }
6675
6674
  console.log(chalk.blue("\u{1F4F1} Sending push notification..."));
6676
6675
  try {
6677
6676
  const api = await types.ApiClient.create(credentials);
6678
- const notificationTitle = title || "Happy";
6677
+ const notificationTitle = title || "ZenFlo";
6679
6678
  api.push().sendToAllDevices(
6680
6679
  notificationTitle,
6681
6680
  message,
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  require('chalk');
4
- require('./index-CXpvXqBN.cjs');
5
- require('./types-xeDL1zwI.cjs');
4
+ require('./index-LeMT1COL.cjs');
5
+ require('./types-C0K47bQB.cjs');
6
6
  require('zod');
7
7
  require('node:child_process');
8
8
  require('node:os');
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import 'chalk';
2
- import './index-CfhvLEiF.mjs';
3
- import './types-Csm1mdNY.mjs';
2
+ import './index-BmkLkj0P.mjs';
3
+ import './types-Bm-nJvHk.mjs';
4
4
  import 'zod';
5
5
  import 'node:child_process';
6
6
  import 'node:os';
package/dist/lib.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var types = require('./types-xeDL1zwI.cjs');
3
+ var types = require('./types-C0K47bQB.cjs');
4
4
  require('axios');
5
5
  require('chalk');
6
6
  require('fs');
package/dist/lib.d.cts CHANGED
@@ -734,7 +734,7 @@ declare class PushNotificationClient {
734
734
  /**
735
735
  * Minimal persistence functions for ZenFlo CLI
736
736
  *
737
- * Handles settings and private key storage in ~/.happy/ or local .happy/
737
+ * Handles settings and private key storage in ~/.zenflo/ or local .zenflo/
738
738
  */
739
739
 
740
740
  type Credentials = {
package/dist/lib.d.mts CHANGED
@@ -734,7 +734,7 @@ declare class PushNotificationClient {
734
734
  /**
735
735
  * Minimal persistence functions for ZenFlo CLI
736
736
  *
737
- * Handles settings and private key storage in ~/.happy/ or local .happy/
737
+ * Handles settings and private key storage in ~/.zenflo/ or local .zenflo/
738
738
  */
739
739
 
740
740
  type Credentials = {
package/dist/lib.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-Csm1mdNY.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-Bm-nJvHk.mjs';
2
2
  import 'axios';
3
3
  import 'chalk';
4
4
  import 'fs';
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-CXpvXqBN.cjs');
4
- var types = require('./types-xeDL1zwI.cjs');
3
+ var index = require('./index-LeMT1COL.cjs');
4
+ var types = require('./types-C0K47bQB.cjs');
5
5
  var node_child_process = require('node:child_process');
6
6
  require('chalk');
7
7
  require('node:os');
@@ -1,5 +1,5 @@
1
- import { r as runClaude } from './index-CfhvLEiF.mjs';
2
- import { l as logger } from './types-Csm1mdNY.mjs';
1
+ import { r as runClaude } from './index-BmkLkj0P.mjs';
2
+ import { l as logger } from './types-Bm-nJvHk.mjs';
3
3
  import { execSync } from 'node:child_process';
4
4
  import 'chalk';
5
5
  import 'node:os';
@@ -2,14 +2,14 @@
2
2
 
3
3
  var ink = require('ink');
4
4
  var React = require('react');
5
- var types = require('./types-xeDL1zwI.cjs');
5
+ var types = require('./types-C0K47bQB.cjs');
6
6
  var index_js = require('@modelcontextprotocol/sdk/client/index.js');
7
7
  var stdio_js = require('@modelcontextprotocol/sdk/client/stdio.js');
8
8
  var z = require('zod');
9
9
  var types_js = require('@modelcontextprotocol/sdk/types.js');
10
10
  var child_process = require('child_process');
11
11
  var node_crypto = require('node:crypto');
12
- var index = require('./index-CXpvXqBN.cjs');
12
+ var index = require('./index-LeMT1COL.cjs');
13
13
  var os = require('node:os');
14
14
  var node_path = require('node:path');
15
15
  var fs = require('node:fs');
@@ -774,7 +774,7 @@ async function runCodex(opts) {
774
774
  const settings = await types.readSettings();
775
775
  let machineId = settings?.machineId;
776
776
  if (!machineId) {
777
- console.error(`[START] No machine ID found in settings, which is unexpected since authAndSetupMachineIfNeeded should have created it. Please report this issue on https://github.com/slopus/happy-cli/issues`);
777
+ console.error(`[START] No machine ID found in settings, which is unexpected since authAndSetupMachineIfNeeded should have created it. Please report this issue on https://github.com/zenflo/zenflo/issues`);
778
778
  process.exit(1);
779
779
  }
780
780
  types.logger.debug(`Using machineId: ${machineId}`);
@@ -1,13 +1,13 @@
1
1
  import { useStdout, useInput, Box, Text, render } from 'ink';
2
2
  import React, { useState, useRef, useEffect, useCallback } from 'react';
3
- import { l as logger, A as ApiClient, b as readSettings, p as projectPath, c as configuration, d as packageJson } from './types-Csm1mdNY.mjs';
3
+ import { l as logger, A as ApiClient, b as readSettings, p as projectPath, c as configuration, d as packageJson } from './types-Bm-nJvHk.mjs';
4
4
  import { Client } from '@modelcontextprotocol/sdk/client/index.js';
5
5
  import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
6
6
  import { z } from 'zod';
7
7
  import { ElicitRequestSchema } from '@modelcontextprotocol/sdk/types.js';
8
8
  import { execSync } from 'child_process';
9
9
  import { randomUUID } from 'node:crypto';
10
- import { i as initialMachineMetadata, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, a as registerKillSessionHandler, b as MessageBuffer, s as startZenfloServer, t as trimIdent, c as stopCaffeinate } from './index-CfhvLEiF.mjs';
10
+ import { i as initialMachineMetadata, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, a as registerKillSessionHandler, b as MessageBuffer, s as startZenfloServer, t as trimIdent, c as stopCaffeinate } from './index-BmkLkj0P.mjs';
11
11
  import os from 'node:os';
12
12
  import { resolve, join } from 'node:path';
13
13
  import fs from 'node:fs';
@@ -772,7 +772,7 @@ async function runCodex(opts) {
772
772
  const settings = await readSettings();
773
773
  let machineId = settings?.machineId;
774
774
  if (!machineId) {
775
- console.error(`[START] No machine ID found in settings, which is unexpected since authAndSetupMachineIfNeeded should have created it. Please report this issue on https://github.com/slopus/happy-cli/issues`);
775
+ console.error(`[START] No machine ID found in settings, which is unexpected since authAndSetupMachineIfNeeded should have created it. Please report this issue on https://github.com/zenflo/zenflo/issues`);
776
776
  process.exit(1);
777
777
  }
778
778
  logger.debug(`Using machineId: ${machineId}`);
@@ -5,7 +5,7 @@ var child_process = require('child_process');
5
5
  var os = require('os');
6
6
  var path = require('path');
7
7
  var chalk = require('chalk');
8
- var types = require('./types-xeDL1zwI.cjs');
8
+ var types = require('./types-C0K47bQB.cjs');
9
9
  require('axios');
10
10
  require('node:fs');
11
11
  require('node:os');
@@ -2,7 +2,7 @@
2
2
 
3
3
  var fs = require('fs');
4
4
  var child_process = require('child_process');
5
- var types = require('./types-xeDL1zwI.cjs');
5
+ var types = require('./types-C0K47bQB.cjs');
6
6
  var os = require('os');
7
7
  var path = require('path');
8
8
  var chalk = require('chalk');
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var child_process = require('child_process');
4
- var types = require('./types-xeDL1zwI.cjs');
4
+ var types = require('./types-C0K47bQB.cjs');
5
5
  var chalk = require('chalk');
6
6
  require('axios');
7
7
  require('fs');
@@ -1,5 +1,5 @@
1
1
  import { execSync } from 'child_process';
2
- import { r as readDaemonState, l as logger } from './types-Csm1mdNY.mjs';
2
+ import { r as readDaemonState, l as logger } from './types-Bm-nJvHk.mjs';
3
3
  import chalk from 'chalk';
4
4
  import 'axios';
5
5
  import 'fs';
@@ -1,6 +1,6 @@
1
1
  import { existsSync } from 'fs';
2
2
  import { execSync } from 'child_process';
3
- import { r as readDaemonState, l as logger } from './types-Csm1mdNY.mjs';
3
+ import { r as readDaemonState, l as logger } from './types-Bm-nJvHk.mjs';
4
4
  import os from 'os';
5
5
  import path from 'path';
6
6
  import chalk from 'chalk';
@@ -3,7 +3,7 @@ import { execSync } from 'child_process';
3
3
  import os from 'os';
4
4
  import path from 'path';
5
5
  import chalk from 'chalk';
6
- import { r as readDaemonState } from './types-Csm1mdNY.mjs';
6
+ import { r as readDaemonState } from './types-Bm-nJvHk.mjs';
7
7
  import 'axios';
8
8
  import 'node:fs';
9
9
  import 'node:os';
@@ -21,17 +21,22 @@ import { platform } from 'os';
21
21
  import { Expo } from 'expo-server-sdk';
22
22
 
23
23
  var name = "zenflo";
24
- var version = "0.11.16";
24
+ var version = "0.12.0";
25
25
  var description = "Mobile and Web client for Claude Code and Codex - ZenFlo edition";
26
26
  var author = "Combined Memory";
27
27
  var license = "MIT";
28
28
  var type = "module";
29
- var homepage = "https://github.com/combinedmemory/zenflo";
30
- var bugs = "https://github.com/combinedmemory/zenflo/issues";
31
- var repository = "combinedmemory/zenflo";
29
+ var homepage = "https://zenflo.dev";
30
+ var bugs = {
31
+ url: "https://github.com/zenflo/zenflo/issues"
32
+ };
33
+ var repository = {
34
+ type: "git",
35
+ url: "git+https://github.com/zenflo/zenflo.git"
36
+ };
32
37
  var bin = {
33
- zenflo: "./bin/zenflo.mjs",
34
- "zenflo-mcp": "./bin/zenflo-mcp.mjs"
38
+ zenflo: "bin/zenflo.mjs",
39
+ "zenflo-mcp": "bin/zenflo-mcp.mjs"
35
40
  };
36
41
  var main = "./dist/index.cjs";
37
42
  var module$1 = "./dist/index.mjs";
@@ -144,6 +149,8 @@ var publishConfig = {
144
149
  registry: "https://registry.npmjs.org"
145
150
  };
146
151
  var packageManager = "yarn@1.22.22";
152
+ var keywords = [
153
+ ];
147
154
  var packageJson = {
148
155
  name: name,
149
156
  version: version,
@@ -165,7 +172,8 @@ var packageJson = {
165
172
  devDependencies: devDependencies,
166
173
  resolutions: resolutions,
167
174
  publishConfig: publishConfig,
168
- packageManager: packageManager
175
+ packageManager: packageManager,
176
+ keywords: keywords
169
177
  };
170
178
 
171
179
  class Configuration {
@@ -183,8 +191,8 @@ class Configuration {
183
191
  isExperimentalEnabled;
184
192
  disableCaffeinate;
185
193
  constructor() {
186
- this.serverUrl = process.env.ZENFLO_SERVER_URL || "https://zenflo.combinedmemory.com";
187
- this.webappUrl = process.env.ZENFLO_WEBAPP_URL || "https://app.combinedmemory.com";
194
+ this.serverUrl = process.env.ZENFLO_SERVER_URL || "https://api.zenflo.dev";
195
+ this.webappUrl = process.env.ZENFLO_WEBAPP_URL || "https://app.zenflo.dev";
188
196
  const args = process.argv.slice(2);
189
197
  this.isDaemonProcess = args.length >= 2 && args[0] === "daemon" && args[1] === "start-sync";
190
198
  if (process.env.ZENFLO_HOME_DIR) {
@@ -1633,7 +1641,7 @@ class ApiMachineClient {
1633
1641
  stopSession,
1634
1642
  requestShutdown
1635
1643
  }) {
1636
- this.rpcHandlerManager.registerHandler("spawn-happy-session", async (params) => {
1644
+ this.rpcHandlerManager.registerHandler("spawn-zenflo-session", async (params) => {
1637
1645
  const { directory, sessionId, machineId, approvedNewDirectoryCreation, agent, token } = params || {};
1638
1646
  logger.debug(`[API MACHINE] Spawning session with params: ${JSON.stringify(params)}`);
1639
1647
  if (!directory) {
@@ -42,17 +42,22 @@ function _interopNamespaceDefault(e) {
42
42
  var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
43
43
 
44
44
  var name = "zenflo";
45
- var version = "0.11.16";
45
+ var version = "0.12.0";
46
46
  var description = "Mobile and Web client for Claude Code and Codex - ZenFlo edition";
47
47
  var author = "Combined Memory";
48
48
  var license = "MIT";
49
49
  var type = "module";
50
- var homepage = "https://github.com/combinedmemory/zenflo";
51
- var bugs = "https://github.com/combinedmemory/zenflo/issues";
52
- var repository = "combinedmemory/zenflo";
50
+ var homepage = "https://zenflo.dev";
51
+ var bugs = {
52
+ url: "https://github.com/zenflo/zenflo/issues"
53
+ };
54
+ var repository = {
55
+ type: "git",
56
+ url: "git+https://github.com/zenflo/zenflo.git"
57
+ };
53
58
  var bin = {
54
- zenflo: "./bin/zenflo.mjs",
55
- "zenflo-mcp": "./bin/zenflo-mcp.mjs"
59
+ zenflo: "bin/zenflo.mjs",
60
+ "zenflo-mcp": "bin/zenflo-mcp.mjs"
56
61
  };
57
62
  var main = "./dist/index.cjs";
58
63
  var module$1 = "./dist/index.mjs";
@@ -165,6 +170,8 @@ var publishConfig = {
165
170
  registry: "https://registry.npmjs.org"
166
171
  };
167
172
  var packageManager = "yarn@1.22.22";
173
+ var keywords = [
174
+ ];
168
175
  var packageJson = {
169
176
  name: name,
170
177
  version: version,
@@ -186,7 +193,8 @@ var packageJson = {
186
193
  devDependencies: devDependencies,
187
194
  resolutions: resolutions,
188
195
  publishConfig: publishConfig,
189
- packageManager: packageManager
196
+ packageManager: packageManager,
197
+ keywords: keywords
190
198
  };
191
199
 
192
200
  class Configuration {
@@ -204,8 +212,8 @@ class Configuration {
204
212
  isExperimentalEnabled;
205
213
  disableCaffeinate;
206
214
  constructor() {
207
- this.serverUrl = process.env.ZENFLO_SERVER_URL || "https://zenflo.combinedmemory.com";
208
- this.webappUrl = process.env.ZENFLO_WEBAPP_URL || "https://app.combinedmemory.com";
215
+ this.serverUrl = process.env.ZENFLO_SERVER_URL || "https://api.zenflo.dev";
216
+ this.webappUrl = process.env.ZENFLO_WEBAPP_URL || "https://app.zenflo.dev";
209
217
  const args = process.argv.slice(2);
210
218
  this.isDaemonProcess = args.length >= 2 && args[0] === "daemon" && args[1] === "start-sync";
211
219
  if (process.env.ZENFLO_HOME_DIR) {
@@ -1020,7 +1028,7 @@ class RpcHandlerManager {
1020
1028
  }
1021
1029
  }
1022
1030
 
1023
- 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-xeDL1zwI.cjs', document.baseURI).href))));
1031
+ 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-C0K47bQB.cjs', document.baseURI).href))));
1024
1032
  function projectPath() {
1025
1033
  const path$1 = path.resolve(__dirname$1, "..");
1026
1034
  return path$1;
@@ -1654,7 +1662,7 @@ class ApiMachineClient {
1654
1662
  stopSession,
1655
1663
  requestShutdown
1656
1664
  }) {
1657
- this.rpcHandlerManager.registerHandler("spawn-happy-session", async (params) => {
1665
+ this.rpcHandlerManager.registerHandler("spawn-zenflo-session", async (params) => {
1658
1666
  const { directory, sessionId, machineId, approvedNewDirectoryCreation, agent, token } = params || {};
1659
1667
  logger.debug(`[API MACHINE] Spawning session with params: ${JSON.stringify(params)}`);
1660
1668
  if (!directory) {
package/package.json CHANGED
@@ -1,16 +1,21 @@
1
1
  {
2
2
  "name": "zenflo",
3
- "version": "0.11.16",
3
+ "version": "0.12.0",
4
4
  "description": "Mobile and Web client for Claude Code and Codex - ZenFlo edition",
5
5
  "author": "Combined Memory",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
- "homepage": "https://github.com/combinedmemory/zenflo",
9
- "bugs": "https://github.com/combinedmemory/zenflo/issues",
10
- "repository": "combinedmemory/zenflo",
8
+ "homepage": "https://zenflo.dev",
9
+ "bugs": {
10
+ "url": "https://github.com/zenflo/zenflo/issues"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/zenflo/zenflo.git"
15
+ },
11
16
  "bin": {
12
- "zenflo": "./bin/zenflo.mjs",
13
- "zenflo-mcp": "./bin/zenflo-mcp.mjs"
17
+ "zenflo": "bin/zenflo.mjs",
18
+ "zenflo-mcp": "bin/zenflo-mcp.mjs"
14
19
  },
15
20
  "main": "./dist/index.cjs",
16
21
  "module": "./dist/index.mjs",
@@ -122,5 +127,6 @@
122
127
  "publishConfig": {
123
128
  "registry": "https://registry.npmjs.org"
124
129
  },
125
- "packageManager": "yarn@1.22.22"
130
+ "packageManager": "yarn@1.22.22",
131
+ "keywords": []
126
132
  }