zenflo 0.12.1 → 0.13.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.
@@ -30,7 +30,7 @@ async function main() {
30
30
  async function ensureHttpClient() {
31
31
  if (httpClient) return httpClient;
32
32
  const client = new index_js.Client(
33
- { name: "happy-stdio-bridge", version: "1.0.0" },
33
+ { name: "zenflo-stdio-bridge", version: "1.0.0" },
34
34
  { capabilities: { tools: {} } }
35
35
  );
36
36
  const transport = new streamableHttp_js.StreamableHTTPClientTransport(new URL(baseUrl));
@@ -39,9 +39,9 @@ async function main() {
39
39
  return client;
40
40
  }
41
41
  const server = new mcp_js.McpServer({
42
- name: "Happy MCP Bridge",
42
+ name: "ZenFlo MCP Bridge",
43
43
  version: "1.0.0",
44
- description: "STDIO bridge forwarding to Happy HTTP MCP"
44
+ description: "STDIO bridge forwarding to ZenFlo HTTP MCP"
45
45
  });
46
46
  server.registerTool(
47
47
  "change_title",
@@ -67,39 +67,12 @@ async function main() {
67
67
  }
68
68
  }
69
69
  );
70
- server.registerTool(
71
- "send_inbox_message",
72
- {
73
- description: "Send a message to Quinn's Happy app inbox for cross-session communication",
74
- title: "Send Inbox Message",
75
- inputSchema: {
76
- title: z.z.string().describe('Message title (e.g., "Task completed", "Found a bug")'),
77
- message: z.z.string().describe("Message content/details"),
78
- sessionId: z.z.string().optional().describe("Optional session ID to link the message to (makes it clickable)"),
79
- priority: z.z.enum(["low", "normal", "high"]).optional().describe("Message priority (affects icon and color)")
80
- }
81
- },
82
- async (args) => {
83
- try {
84
- const client = await ensureHttpClient();
85
- const response = await client.callTool({ name: "send_inbox_message", arguments: args });
86
- return response;
87
- } catch (error) {
88
- return {
89
- content: [
90
- { type: "text", text: `Failed to send inbox message: ${error instanceof Error ? error.message : String(error)}` }
91
- ],
92
- isError: true
93
- };
94
- }
95
- }
96
- );
97
70
  const stdio = new stdio_js.StdioServerTransport();
98
71
  await server.connect(stdio);
99
72
  }
100
73
  main().catch((err) => {
101
74
  try {
102
- process.stderr.write(`[happy-mcp] Fatal: ${err instanceof Error ? err.message : String(err)}
75
+ process.stderr.write(`[zenflo-mcp] Fatal: ${err instanceof Error ? err.message : String(err)}
103
76
  `);
104
77
  } finally {
105
78
  process.exit(1);
@@ -28,7 +28,7 @@ async function main() {
28
28
  async function ensureHttpClient() {
29
29
  if (httpClient) return httpClient;
30
30
  const client = new Client(
31
- { name: "happy-stdio-bridge", version: "1.0.0" },
31
+ { name: "zenflo-stdio-bridge", version: "1.0.0" },
32
32
  { capabilities: { tools: {} } }
33
33
  );
34
34
  const transport = new StreamableHTTPClientTransport(new URL(baseUrl));
@@ -37,9 +37,9 @@ async function main() {
37
37
  return client;
38
38
  }
39
39
  const server = new McpServer({
40
- name: "Happy MCP Bridge",
40
+ name: "ZenFlo MCP Bridge",
41
41
  version: "1.0.0",
42
- description: "STDIO bridge forwarding to Happy HTTP MCP"
42
+ description: "STDIO bridge forwarding to ZenFlo HTTP MCP"
43
43
  });
44
44
  server.registerTool(
45
45
  "change_title",
@@ -65,39 +65,12 @@ async function main() {
65
65
  }
66
66
  }
67
67
  );
68
- server.registerTool(
69
- "send_inbox_message",
70
- {
71
- description: "Send a message to Quinn's Happy app inbox for cross-session communication",
72
- title: "Send Inbox Message",
73
- inputSchema: {
74
- title: z.string().describe('Message title (e.g., "Task completed", "Found a bug")'),
75
- message: z.string().describe("Message content/details"),
76
- sessionId: z.string().optional().describe("Optional session ID to link the message to (makes it clickable)"),
77
- priority: z.enum(["low", "normal", "high"]).optional().describe("Message priority (affects icon and color)")
78
- }
79
- },
80
- async (args) => {
81
- try {
82
- const client = await ensureHttpClient();
83
- const response = await client.callTool({ name: "send_inbox_message", arguments: args });
84
- return response;
85
- } catch (error) {
86
- return {
87
- content: [
88
- { type: "text", text: `Failed to send inbox message: ${error instanceof Error ? error.message : String(error)}` }
89
- ],
90
- isError: true
91
- };
92
- }
93
- }
94
- );
95
68
  const stdio = new StdioServerTransport();
96
69
  await server.connect(stdio);
97
70
  }
98
71
  main().catch((err) => {
99
72
  try {
100
- process.stderr.write(`[happy-mcp] Fatal: ${err instanceof Error ? err.message : String(err)}
73
+ process.stderr.write(`[zenflo-mcp] Fatal: ${err instanceof Error ? err.message : String(err)}
101
74
  `);
102
75
  } finally {
103
76
  process.exit(1);
@@ -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-DzNSylqA.cjs');
6
+ var types = require('./types-DILJPonx.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');
@@ -236,10 +236,10 @@ const CO_AUTHORED_CREDITS = (() => trimIdent(`
236
236
  <main commit message>
237
237
 
238
238
  Generated with [Claude Code](https://claude.ai/code)
239
- via [ZenFlo](https://zenflo.app)
239
+ via [ZenFlo](https://zenflo.dev)
240
240
 
241
241
  Co-Authored-By: Claude <noreply@anthropic.com>
242
- Co-Authored-By: ZenFlo <yesreply@zenflo.app>
242
+ Co-Authored-By: ZenFlo <yesreply@zenflo.dev>
243
243
  `))();
244
244
  const systemPrompt = (() => {
245
245
  const includeCoAuthored = shouldIncludeCoAuthoredBy();
@@ -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-BCav_-KH.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-CJ8JfQbJ.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");
@@ -3544,7 +3544,7 @@ async function waitForProcessDeath(pid, timeout) {
3544
3544
  throw new Error("Process did not die within timeout");
3545
3545
  }
3546
3546
 
3547
- async function findAllHappyProcesses() {
3547
+ async function findAllZenfloProcesses() {
3548
3548
  try {
3549
3549
  const processes = await psList();
3550
3550
  const allProcesses = [];
@@ -3576,14 +3576,14 @@ async function findAllHappyProcesses() {
3576
3576
  return [];
3577
3577
  }
3578
3578
  }
3579
- async function findRunawayHappyProcesses() {
3580
- const allProcesses = await findAllHappyProcesses();
3579
+ async function findRunawayZenfloProcesses() {
3580
+ const allProcesses = await findAllZenfloProcesses();
3581
3581
  return allProcesses.filter(
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
3585
  async function killRunawayZenfloProcesses() {
3586
- const runawayProcesses = await findRunawayHappyProcesses();
3586
+ const runawayProcesses = await findRunawayZenfloProcesses();
3587
3587
  const errors = [];
3588
3588
  let killed = 0;
3589
3589
  for (const { pid, command } of runawayProcesses) {
@@ -3665,7 +3665,7 @@ async function runDoctorCommand(filter) {
3665
3665
  console.log("");
3666
3666
  console.log(chalk.bold("\u{1F527} Daemon Spawn Diagnostics"));
3667
3667
  const projectRoot = types.projectPath();
3668
- const wrapperPath = node_path.join(projectRoot, "bin", "happy.mjs");
3668
+ const wrapperPath = node_path.join(projectRoot, "bin", "zenflo.mjs");
3669
3669
  const cliEntrypoint = node_path.join(projectRoot, "dist", "index.mjs");
3670
3670
  console.log(`Project Root: ${chalk.blue(projectRoot)}`);
3671
3671
  console.log(`Wrapper Script: ${chalk.blue(wrapperPath)}`);
@@ -3674,7 +3674,7 @@ async function runDoctorCommand(filter) {
3674
3674
  console.log(`CLI Exists: ${fs.existsSync(cliEntrypoint) ? chalk.green("\u2713 Yes") : chalk.red("\u274C No")}`);
3675
3675
  console.log("");
3676
3676
  console.log(chalk.bold("\u2699\uFE0F Configuration"));
3677
- console.log(`Happy Home: ${chalk.blue(types.configuration.zenfloHomeDir)}`);
3677
+ console.log(`ZenFlo Home: ${chalk.blue(types.configuration.zenfloHomeDir)}`);
3678
3678
  console.log(`Server URL: ${chalk.blue(types.configuration.serverUrl)}`);
3679
3679
  console.log(`Logs Dir: ${chalk.blue(types.configuration.logsDir)}`);
3680
3680
  console.log(chalk.bold("\n\u{1F30D} Environment Variables"));
@@ -3726,7 +3726,7 @@ async function runDoctorCommand(filter) {
3726
3726
  console.log(chalk.blue(`Location: ${types.configuration.daemonStateFile}`));
3727
3727
  console.log(chalk.gray(JSON.stringify(state, null, 2)));
3728
3728
  }
3729
- const allProcesses = await findAllHappyProcesses();
3729
+ const allProcesses = await findAllZenfloProcesses();
3730
3730
  if (allProcesses.length > 0) {
3731
3731
  console.log(chalk.bold("\n\u{1F50D} All ZenFlo CLI Processes"));
3732
3732
  const grouped = allProcesses.reduce((groups, process2) => {
@@ -3757,11 +3757,11 @@ ${typeLabels[type] || type}:`));
3757
3757
  });
3758
3758
  });
3759
3759
  } else {
3760
- console.log(chalk.red("\u274C No happy processes found"));
3760
+ console.log(chalk.red("\u274C No zenflo processes found"));
3761
3761
  }
3762
3762
  if (filter === "all" && allProcesses.length > 1) {
3763
3763
  console.log(chalk.bold("\n\u{1F4A1} Process Management"));
3764
- console.log(chalk.gray("To clean up runaway processes: happy doctor clean"));
3764
+ console.log(chalk.gray("To clean up runaway processes: zenflo doctor clean"));
3765
3765
  }
3766
3766
  } catch (error) {
3767
3767
  console.log(chalk.red("\u274C Error checking daemon status"));
@@ -4744,7 +4744,7 @@ function registerKillSessionHandler(rpcHandlerManager, killThisHappy) {
4744
4744
  void killThisHappy();
4745
4745
  return {
4746
4746
  success: true,
4747
- message: "Killing happy-cli process"
4747
+ message: "Killing zenflo-cli process"
4748
4748
  };
4749
4749
  });
4750
4750
  }
@@ -5025,7 +5025,7 @@ async function runClaude(credentials, options = {}) {
5025
5025
  process.exit(0);
5026
5026
  }
5027
5027
 
5028
- const __filename$1 = url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-BCav_-KH.cjs', document.baseURI).href)));
5028
+ const __filename$1 = url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-CJ8JfQbJ.cjs', document.baseURI).href)));
5029
5029
  const __dirname$1 = path.dirname(__filename$1);
5030
5030
  const PLIST_LABEL$1 = "com.zenflo.daemon";
5031
5031
  const LAUNCH_AGENTS_DIR$1 = path.join(os$1.homedir(), "Library", "LaunchAgents");
@@ -6306,7 +6306,7 @@ async function handleConnectVendor(vendor, displayName) {
6306
6306
  return;
6307
6307
  } else if (subcommand === "codex") {
6308
6308
  try {
6309
- const { runCodex } = await Promise.resolve().then(function () { return require('./runCodex-BhI-aMek.cjs'); });
6309
+ const { runCodex } = await Promise.resolve().then(function () { return require('./runCodex-gxOwFxj9.cjs'); });
6310
6310
  let startedBy = void 0;
6311
6311
  for (let i = 1; i < args.length; i++) {
6312
6312
  if (args[i] === "--started-by") {
@@ -6327,7 +6327,7 @@ async function handleConnectVendor(vendor, displayName) {
6327
6327
  return;
6328
6328
  } else if (subcommand === "ccr" || subcommand === "glm") {
6329
6329
  try {
6330
- const { runCCR } = await Promise.resolve().then(function () { return require('./runCCR-CAUBpsGG.cjs'); });
6330
+ const { runCCR } = await Promise.resolve().then(function () { return require('./runCCR-CsBd9Bin.cjs'); });
6331
6331
  let startedBy = void 0;
6332
6332
  for (let i = 1; i < args.length; i++) {
6333
6333
  if (args[i] === "--started-by") {
@@ -6430,13 +6430,13 @@ async function handleConnectVendor(vendor, displayName) {
6430
6430
  let statusModule;
6431
6431
  switch (process.platform) {
6432
6432
  case "darwin":
6433
- statusModule = await Promise.resolve().then(function () { return require('./status-DMFI5EdW.cjs'); });
6433
+ statusModule = await Promise.resolve().then(function () { return require('./status-wSLqL6_S.cjs'); });
6434
6434
  break;
6435
6435
  case "win32":
6436
- statusModule = await Promise.resolve().then(function () { return require('./status-ByHnu9oN.cjs'); });
6436
+ statusModule = await Promise.resolve().then(function () { return require('./status-CmuBM9eE.cjs'); });
6437
6437
  break;
6438
6438
  case "linux":
6439
- statusModule = await Promise.resolve().then(function () { return require('./status-Dz3SVH5d.cjs'); });
6439
+ statusModule = await Promise.resolve().then(function () { return require('./status-B_tjHFOS.cjs'); });
6440
6440
  break;
6441
6441
  default:
6442
6442
  console.error(chalk.red(`Status command not supported on platform: ${process.platform}`));
@@ -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-BPoWNAha.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-cYVbBsSI.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';
@@ -214,10 +214,10 @@ const CO_AUTHORED_CREDITS = (() => trimIdent(`
214
214
  <main commit message>
215
215
 
216
216
  Generated with [Claude Code](https://claude.ai/code)
217
- via [ZenFlo](https://zenflo.app)
217
+ via [ZenFlo](https://zenflo.dev)
218
218
 
219
219
  Co-Authored-By: Claude <noreply@anthropic.com>
220
- Co-Authored-By: ZenFlo <yesreply@zenflo.app>
220
+ Co-Authored-By: ZenFlo <yesreply@zenflo.dev>
221
221
  `))();
222
222
  const systemPrompt = (() => {
223
223
  const includeCoAuthored = shouldIncludeCoAuthoredBy();
@@ -3522,7 +3522,7 @@ async function waitForProcessDeath(pid, timeout) {
3522
3522
  throw new Error("Process did not die within timeout");
3523
3523
  }
3524
3524
 
3525
- async function findAllHappyProcesses() {
3525
+ async function findAllZenfloProcesses() {
3526
3526
  try {
3527
3527
  const processes = await psList();
3528
3528
  const allProcesses = [];
@@ -3554,14 +3554,14 @@ async function findAllHappyProcesses() {
3554
3554
  return [];
3555
3555
  }
3556
3556
  }
3557
- async function findRunawayHappyProcesses() {
3558
- const allProcesses = await findAllHappyProcesses();
3557
+ async function findRunawayZenfloProcesses() {
3558
+ const allProcesses = await findAllZenfloProcesses();
3559
3559
  return allProcesses.filter(
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
3563
  async function killRunawayZenfloProcesses() {
3564
- const runawayProcesses = await findRunawayHappyProcesses();
3564
+ const runawayProcesses = await findRunawayZenfloProcesses();
3565
3565
  const errors = [];
3566
3566
  let killed = 0;
3567
3567
  for (const { pid, command } of runawayProcesses) {
@@ -3643,7 +3643,7 @@ async function runDoctorCommand(filter) {
3643
3643
  console.log("");
3644
3644
  console.log(chalk.bold("\u{1F527} Daemon Spawn Diagnostics"));
3645
3645
  const projectRoot = projectPath();
3646
- const wrapperPath = join(projectRoot, "bin", "happy.mjs");
3646
+ const wrapperPath = join(projectRoot, "bin", "zenflo.mjs");
3647
3647
  const cliEntrypoint = join(projectRoot, "dist", "index.mjs");
3648
3648
  console.log(`Project Root: ${chalk.blue(projectRoot)}`);
3649
3649
  console.log(`Wrapper Script: ${chalk.blue(wrapperPath)}`);
@@ -3652,7 +3652,7 @@ async function runDoctorCommand(filter) {
3652
3652
  console.log(`CLI Exists: ${existsSync(cliEntrypoint) ? chalk.green("\u2713 Yes") : chalk.red("\u274C No")}`);
3653
3653
  console.log("");
3654
3654
  console.log(chalk.bold("\u2699\uFE0F Configuration"));
3655
- console.log(`Happy Home: ${chalk.blue(configuration.zenfloHomeDir)}`);
3655
+ console.log(`ZenFlo Home: ${chalk.blue(configuration.zenfloHomeDir)}`);
3656
3656
  console.log(`Server URL: ${chalk.blue(configuration.serverUrl)}`);
3657
3657
  console.log(`Logs Dir: ${chalk.blue(configuration.logsDir)}`);
3658
3658
  console.log(chalk.bold("\n\u{1F30D} Environment Variables"));
@@ -3704,7 +3704,7 @@ async function runDoctorCommand(filter) {
3704
3704
  console.log(chalk.blue(`Location: ${configuration.daemonStateFile}`));
3705
3705
  console.log(chalk.gray(JSON.stringify(state, null, 2)));
3706
3706
  }
3707
- const allProcesses = await findAllHappyProcesses();
3707
+ const allProcesses = await findAllZenfloProcesses();
3708
3708
  if (allProcesses.length > 0) {
3709
3709
  console.log(chalk.bold("\n\u{1F50D} All ZenFlo CLI Processes"));
3710
3710
  const grouped = allProcesses.reduce((groups, process2) => {
@@ -3735,11 +3735,11 @@ ${typeLabels[type] || type}:`));
3735
3735
  });
3736
3736
  });
3737
3737
  } else {
3738
- console.log(chalk.red("\u274C No happy processes found"));
3738
+ console.log(chalk.red("\u274C No zenflo processes found"));
3739
3739
  }
3740
3740
  if (filter === "all" && allProcesses.length > 1) {
3741
3741
  console.log(chalk.bold("\n\u{1F4A1} Process Management"));
3742
- console.log(chalk.gray("To clean up runaway processes: happy doctor clean"));
3742
+ console.log(chalk.gray("To clean up runaway processes: zenflo doctor clean"));
3743
3743
  }
3744
3744
  } catch (error) {
3745
3745
  console.log(chalk.red("\u274C Error checking daemon status"));
@@ -4722,7 +4722,7 @@ function registerKillSessionHandler(rpcHandlerManager, killThisHappy) {
4722
4722
  void killThisHappy();
4723
4723
  return {
4724
4724
  success: true,
4725
- message: "Killing happy-cli process"
4725
+ message: "Killing zenflo-cli process"
4726
4726
  };
4727
4727
  });
4728
4728
  }
@@ -6284,7 +6284,7 @@ async function handleConnectVendor(vendor, displayName) {
6284
6284
  return;
6285
6285
  } else if (subcommand === "codex") {
6286
6286
  try {
6287
- const { runCodex } = await import('./runCodex-Bor-iohW.mjs');
6287
+ const { runCodex } = await import('./runCodex-CAfYUB9k.mjs');
6288
6288
  let startedBy = void 0;
6289
6289
  for (let i = 1; i < args.length; i++) {
6290
6290
  if (args[i] === "--started-by") {
@@ -6305,7 +6305,7 @@ async function handleConnectVendor(vendor, displayName) {
6305
6305
  return;
6306
6306
  } else if (subcommand === "ccr" || subcommand === "glm") {
6307
6307
  try {
6308
- const { runCCR } = await import('./runCCR-BSTeKn4P.mjs');
6308
+ const { runCCR } = await import('./runCCR-BUMMywJS.mjs');
6309
6309
  let startedBy = void 0;
6310
6310
  for (let i = 1; i < args.length; i++) {
6311
6311
  if (args[i] === "--started-by") {
@@ -6408,13 +6408,13 @@ async function handleConnectVendor(vendor, displayName) {
6408
6408
  let statusModule;
6409
6409
  switch (process.platform) {
6410
6410
  case "darwin":
6411
- statusModule = await import('./status-DmbS7OtX.mjs');
6411
+ statusModule = await import('./status-Ci3LMn8d.mjs');
6412
6412
  break;
6413
6413
  case "win32":
6414
- statusModule = await import('./status-Bh14_wDU.mjs');
6414
+ statusModule = await import('./status-BPrNeVH-.mjs');
6415
6415
  break;
6416
6416
  case "linux":
6417
- statusModule = await import('./status-BpN5JCxI.mjs');
6417
+ statusModule = await import('./status-CbsGtmMn.mjs');
6418
6418
  break;
6419
6419
  default:
6420
6420
  console.error(chalk.red(`Status command not supported on platform: ${process.platform}`));
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  require('chalk');
4
- require('./index-BCav_-KH.cjs');
5
- require('./types-DzNSylqA.cjs');
4
+ require('./index-CJ8JfQbJ.cjs');
5
+ require('./types-DILJPonx.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-D4H-IoO4.mjs';
3
- import './types-BPoWNAha.mjs';
2
+ import './index-HyLXtYMY.mjs';
3
+ import './types-cYVbBsSI.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-DzNSylqA.cjs');
3
+ var types = require('./types-DILJPonx.cjs');
4
4
  require('axios');
5
5
  require('chalk');
6
6
  require('fs');
package/dist/lib.d.cts CHANGED
@@ -668,7 +668,7 @@ type SpawnSessionResult = {
668
668
  };
669
669
 
670
670
  /**
671
- * WebSocket client for machine/daemon communication with Happy server
671
+ * WebSocket client for machine/daemon communication with ZenFlo server
672
672
  * Similar to ApiSessionClient but for machine-scoped connections
673
673
  */
674
674
 
package/dist/lib.d.mts CHANGED
@@ -668,7 +668,7 @@ type SpawnSessionResult = {
668
668
  };
669
669
 
670
670
  /**
671
- * WebSocket client for machine/daemon communication with Happy server
671
+ * WebSocket client for machine/daemon communication with ZenFlo server
672
672
  * Similar to ApiSessionClient but for machine-scoped connections
673
673
  */
674
674
 
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-BPoWNAha.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-cYVbBsSI.mjs';
2
2
  import 'axios';
3
3
  import 'chalk';
4
4
  import 'fs';
@@ -1,5 +1,5 @@
1
- import { r as runClaude } from './index-D4H-IoO4.mjs';
2
- import { l as logger } from './types-BPoWNAha.mjs';
1
+ import { r as runClaude } from './index-HyLXtYMY.mjs';
2
+ import { l as logger } from './types-cYVbBsSI.mjs';
3
3
  import { execSync } from 'node:child_process';
4
4
  import 'chalk';
5
5
  import 'node:os';
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-BCav_-KH.cjs');
4
- var types = require('./types-DzNSylqA.cjs');
3
+ var index = require('./index-CJ8JfQbJ.cjs');
4
+ var types = require('./types-DILJPonx.cjs');
5
5
  var node_child_process = require('node:child_process');
6
6
  require('chalk');
7
7
  require('node:os');
@@ -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-BPoWNAha.mjs';
3
+ import { l as logger, A as ApiClient, b as readSettings, p as projectPath, c as configuration, d as packageJson } from './types-cYVbBsSI.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-D4H-IoO4.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-HyLXtYMY.mjs';
11
11
  import os from 'node:os';
12
12
  import { resolve, join } from 'node:path';
13
13
  import fs from 'node:fs';
@@ -72,7 +72,7 @@ class CodexMcpClient {
72
72
  permissionHandler = null;
73
73
  constructor() {
74
74
  this.client = new Client(
75
- { name: "happy-codex-client", version: "1.0.0" },
75
+ { name: "zenflo-codex-client", version: "1.0.0" },
76
76
  { capabilities: { tools: {}, elicitation: {} } }
77
77
  );
78
78
  this.client.setNotificationHandler(z.object({
@@ -1126,7 +1126,7 @@ async function runCodex(opts) {
1126
1126
  const bridgeCommand = join(projectPath(), "bin", "zenflo-mcp.mjs");
1127
1127
  const zenModeConfig = {
1128
1128
  command: "node",
1129
- args: [join(projectPath(), "..", "zen-mcp", "zen-mode-mcp-server", "dist", "index.js")]
1129
+ args: [join(projectPath(), "..", "integrations", "mcp", "zen-mode", "zen-mode-mcp-server", "dist", "index.js")]
1130
1130
  };
1131
1131
  if (process.env.ZENFLO_AUTH_TOKEN || process.env.ZENFLO_SECRET_KEY || process.env.ZENFLO_USER_ID) {
1132
1132
  zenModeConfig.env = {};
@@ -1141,7 +1141,7 @@ async function runCodex(opts) {
1141
1141
  }
1142
1142
  }
1143
1143
  const mcpServers = {
1144
- happy: {
1144
+ zenflo: {
1145
1145
  command: bridgeCommand,
1146
1146
  args: ["--url", zenfloServer.url]
1147
1147
  },
@@ -1232,7 +1232,7 @@ async function runCodex(opts) {
1232
1232
  })();
1233
1233
  if (!wasCreated) {
1234
1234
  const startConfig = {
1235
- prompt: first ? message.message + "\n\n" + trimIdent(`Based on this message, call functions.happy__change_title to change chat session title that would represent the current task. If chat idea would change dramatically - call this function again to update the title.`) : message.message,
1235
+ prompt: first ? message.message + "\n\n" + trimIdent(`Based on this message, call functions.zenflo__change_title to change chat session title that would represent the current task. If chat idea would change dramatically - call this function again to update the title.`) : message.message,
1236
1236
  sandbox,
1237
1237
  "approval-policy": approvalPolicy,
1238
1238
  config: { mcp_servers: mcpServers }
@@ -2,14 +2,14 @@
2
2
 
3
3
  var ink = require('ink');
4
4
  var React = require('react');
5
- var types = require('./types-DzNSylqA.cjs');
5
+ var types = require('./types-DILJPonx.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-BCav_-KH.cjs');
12
+ var index = require('./index-CJ8JfQbJ.cjs');
13
13
  var os = require('node:os');
14
14
  var node_path = require('node:path');
15
15
  var fs = require('node:fs');
@@ -74,7 +74,7 @@ class CodexMcpClient {
74
74
  permissionHandler = null;
75
75
  constructor() {
76
76
  this.client = new index_js.Client(
77
- { name: "happy-codex-client", version: "1.0.0" },
77
+ { name: "zenflo-codex-client", version: "1.0.0" },
78
78
  { capabilities: { tools: {}, elicitation: {} } }
79
79
  );
80
80
  this.client.setNotificationHandler(z.z.object({
@@ -1128,7 +1128,7 @@ async function runCodex(opts) {
1128
1128
  const bridgeCommand = node_path.join(types.projectPath(), "bin", "zenflo-mcp.mjs");
1129
1129
  const zenModeConfig = {
1130
1130
  command: "node",
1131
- args: [node_path.join(types.projectPath(), "..", "zen-mcp", "zen-mode-mcp-server", "dist", "index.js")]
1131
+ args: [node_path.join(types.projectPath(), "..", "integrations", "mcp", "zen-mode", "zen-mode-mcp-server", "dist", "index.js")]
1132
1132
  };
1133
1133
  if (process.env.ZENFLO_AUTH_TOKEN || process.env.ZENFLO_SECRET_KEY || process.env.ZENFLO_USER_ID) {
1134
1134
  zenModeConfig.env = {};
@@ -1143,7 +1143,7 @@ async function runCodex(opts) {
1143
1143
  }
1144
1144
  }
1145
1145
  const mcpServers = {
1146
- happy: {
1146
+ zenflo: {
1147
1147
  command: bridgeCommand,
1148
1148
  args: ["--url", zenfloServer.url]
1149
1149
  },
@@ -1234,7 +1234,7 @@ async function runCodex(opts) {
1234
1234
  })();
1235
1235
  if (!wasCreated) {
1236
1236
  const startConfig = {
1237
- prompt: first ? message.message + "\n\n" + index.trimIdent(`Based on this message, call functions.happy__change_title to change chat session title that would represent the current task. If chat idea would change dramatically - call this function again to update the title.`) : message.message,
1237
+ prompt: first ? message.message + "\n\n" + index.trimIdent(`Based on this message, call functions.zenflo__change_title to change chat session title that would represent the current task. If chat idea would change dramatically - call this function again to update the title.`) : message.message,
1238
1238
  sandbox,
1239
1239
  "approval-policy": approvalPolicy,
1240
1240
  config: { mcp_servers: mcpServers }
@@ -1,5 +1,5 @@
1
1
  import { execSync } from 'child_process';
2
- import { r as readDaemonState, l as logger } from './types-BPoWNAha.mjs';
2
+ import { r as readDaemonState, l as logger } from './types-cYVbBsSI.mjs';
3
3
  import chalk from 'chalk';
4
4
  import 'axios';
5
5
  import 'fs';
@@ -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-DzNSylqA.cjs');
5
+ var types = require('./types-DILJPonx.cjs');
6
6
  var os = require('os');
7
7
  var path = require('path');
8
8
  var chalk = require('chalk');
@@ -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-BPoWNAha.mjs';
3
+ import { r as readDaemonState, l as logger } from './types-cYVbBsSI.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-BPoWNAha.mjs';
6
+ import { r as readDaemonState } from './types-cYVbBsSI.mjs';
7
7
  import 'axios';
8
8
  import 'node:fs';
9
9
  import 'node:os';
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var child_process = require('child_process');
4
- var types = require('./types-DzNSylqA.cjs');
4
+ var types = require('./types-DILJPonx.cjs');
5
5
  var chalk = require('chalk');
6
6
  require('axios');
7
7
  require('fs');
@@ -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-DzNSylqA.cjs');
8
+ var types = require('./types-DILJPonx.cjs');
9
9
  require('axios');
10
10
  require('node:fs');
11
11
  require('node:os');
@@ -42,7 +42,7 @@ function _interopNamespaceDefault(e) {
42
42
  var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
43
43
 
44
44
  var name = "zenflo";
45
- var version = "0.12.1";
45
+ var version = "0.13.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";
@@ -105,11 +105,9 @@ var scripts = {
105
105
  "why do we need to build before running tests / dev?": "We need the binary to be built so we run daemon commands which directly run the binary - we don't want them to go out of sync or have custom spawn logic depending how we started zenflo",
106
106
  typecheck: "tsc --noEmit",
107
107
  build: "shx rm -rf dist && npx tsc --noEmit && pkgroll",
108
- test: "yarn build && tsx --env-file .env.integration-test node_modules/.bin/vitest run",
108
+ test: "yarn build && ZENFLO_HOME_DIR=~/.zenflo-test tsx node_modules/.bin/vitest run",
109
109
  start: "yarn build && ./bin/zenflo.mjs",
110
- dev: "tsx src/index.ts",
111
- "dev:local-server": "yarn build && tsx --env-file .env.dev-local-server src/index.ts",
112
- "dev:integration-test-env": "yarn build && tsx --env-file .env.integration-test src/index.ts",
110
+ dev: "DEBUG=1 tsx src/index.ts",
113
111
  prepublishOnly: "yarn build && yarn test",
114
112
  release: "release-it",
115
113
  postinstall: "node scripts/unpack-tools.cjs"
@@ -1028,7 +1026,7 @@ class RpcHandlerManager {
1028
1026
  }
1029
1027
  }
1030
1028
 
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-DzNSylqA.cjs', document.baseURI).href))));
1029
+ 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-DILJPonx.cjs', document.baseURI).href))));
1032
1030
  function projectPath() {
1033
1031
  const path$1 = path.resolve(__dirname$1, "..");
1034
1032
  return path$1;
@@ -1847,7 +1845,7 @@ class PushNotificationClient {
1847
1845
  token;
1848
1846
  baseUrl;
1849
1847
  expo;
1850
- constructor(token, baseUrl = "https://api.cluster-fluster.com") {
1848
+ constructor(token, baseUrl = "https://api.zenflo.dev") {
1851
1849
  this.token = token;
1852
1850
  this.baseUrl = baseUrl;
1853
1851
  this.expo = new expoServerSdk.Expo();
@@ -2071,7 +2069,7 @@ class ApiClient {
2071
2069
  );
2072
2070
  if (response.status !== 200) {
2073
2071
  console.error(chalk.red(`[API] Failed to create machine: ${response.statusText}`));
2074
- console.log(chalk.yellow(`[API] Failed to create machine: ${response.statusText}, most likely you have re-authenticated, but you still have a machine associated with the old account. Now we are trying to re-associate the machine with the new account. That is not allowed. Please run 'happy doctor clean' to clean up your happy state, and try your original command again. Please create an issue on github if this is causing you problems. We apologize for the inconvenience.`));
2072
+ console.log(chalk.yellow(`[API] Failed to create machine: ${response.statusText}, most likely you have re-authenticated, but you still have a machine associated with the old account. Now we are trying to re-associate the machine with the new account. That is not allowed. Please run 'zenflo doctor clean' to clean up your state, and try your original command again. Please create an issue on github if this is causing you problems. We apologize for the inconvenience.`));
2075
2073
  process.exit(1);
2076
2074
  }
2077
2075
  const raw = response.data.machine;
@@ -21,7 +21,7 @@ import { platform } from 'os';
21
21
  import { Expo } from 'expo-server-sdk';
22
22
 
23
23
  var name = "zenflo";
24
- var version = "0.12.1";
24
+ var version = "0.13.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";
@@ -84,11 +84,9 @@ var scripts = {
84
84
  "why do we need to build before running tests / dev?": "We need the binary to be built so we run daemon commands which directly run the binary - we don't want them to go out of sync or have custom spawn logic depending how we started zenflo",
85
85
  typecheck: "tsc --noEmit",
86
86
  build: "shx rm -rf dist && npx tsc --noEmit && pkgroll",
87
- test: "yarn build && tsx --env-file .env.integration-test node_modules/.bin/vitest run",
87
+ test: "yarn build && ZENFLO_HOME_DIR=~/.zenflo-test tsx node_modules/.bin/vitest run",
88
88
  start: "yarn build && ./bin/zenflo.mjs",
89
- dev: "tsx src/index.ts",
90
- "dev:local-server": "yarn build && tsx --env-file .env.dev-local-server src/index.ts",
91
- "dev:integration-test-env": "yarn build && tsx --env-file .env.integration-test src/index.ts",
89
+ dev: "DEBUG=1 tsx src/index.ts",
92
90
  prepublishOnly: "yarn build && yarn test",
93
91
  release: "release-it",
94
92
  postinstall: "node scripts/unpack-tools.cjs"
@@ -1826,7 +1824,7 @@ class PushNotificationClient {
1826
1824
  token;
1827
1825
  baseUrl;
1828
1826
  expo;
1829
- constructor(token, baseUrl = "https://api.cluster-fluster.com") {
1827
+ constructor(token, baseUrl = "https://api.zenflo.dev") {
1830
1828
  this.token = token;
1831
1829
  this.baseUrl = baseUrl;
1832
1830
  this.expo = new Expo();
@@ -2050,7 +2048,7 @@ class ApiClient {
2050
2048
  );
2051
2049
  if (response.status !== 200) {
2052
2050
  console.error(chalk.red(`[API] Failed to create machine: ${response.statusText}`));
2053
- console.log(chalk.yellow(`[API] Failed to create machine: ${response.statusText}, most likely you have re-authenticated, but you still have a machine associated with the old account. Now we are trying to re-associate the machine with the new account. That is not allowed. Please run 'happy doctor clean' to clean up your happy state, and try your original command again. Please create an issue on github if this is causing you problems. We apologize for the inconvenience.`));
2051
+ console.log(chalk.yellow(`[API] Failed to create machine: ${response.statusText}, most likely you have re-authenticated, but you still have a machine associated with the old account. Now we are trying to re-associate the machine with the new account. That is not allowed. Please run 'zenflo doctor clean' to clean up your state, and try your original command again. Please create an issue on github if this is causing you problems. We apologize for the inconvenience.`));
2054
2052
  process.exit(1);
2055
2053
  }
2056
2054
  const raw = response.data.machine;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zenflo",
3
- "version": "0.12.1",
3
+ "version": "0.13.0",
4
4
  "description": "Mobile and Web client for Claude Code and Codex - ZenFlo edition",
5
5
  "author": "Combined Memory",
6
6
  "license": "MIT",
@@ -63,11 +63,9 @@
63
63
  "why do we need to build before running tests / dev?": "We need the binary to be built so we run daemon commands which directly run the binary - we don't want them to go out of sync or have custom spawn logic depending how we started zenflo",
64
64
  "typecheck": "tsc --noEmit",
65
65
  "build": "shx rm -rf dist && npx tsc --noEmit && pkgroll",
66
- "test": "yarn build && tsx --env-file .env.integration-test node_modules/.bin/vitest run",
66
+ "test": "yarn build && ZENFLO_HOME_DIR=~/.zenflo-test tsx node_modules/.bin/vitest run",
67
67
  "start": "yarn build && ./bin/zenflo.mjs",
68
- "dev": "tsx src/index.ts",
69
- "dev:local-server": "yarn build && tsx --env-file .env.dev-local-server src/index.ts",
70
- "dev:integration-test-env": "yarn build && tsx --env-file .env.integration-test src/index.ts",
68
+ "dev": "DEBUG=1 tsx src/index.ts",
71
69
  "prepublishOnly": "yarn build && yarn test",
72
70
  "release": "release-it",
73
71
  "postinstall": "node scripts/unpack-tools.cjs"