@zonease/happy 0.6.54 → 0.6.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/{api-DLk8tzQQ.mjs → api-9wvM_aF-.mjs} +79 -67
  2. package/dist/{api-Da8DnAgp.cjs → api-BGc484qf.cjs} +73 -61
  3. package/dist/{auth-3eHy-NiL.cjs → auth-B6vskzfm.cjs} +2 -2
  4. package/dist/{auth-Dn64MNXy.mjs → auth-BnEa31tI.mjs} +2 -2
  5. package/dist/{auth-DHyEz32d.cjs → auth-CPfJalJM.cjs} +4 -4
  6. package/dist/{auth-l0Gi002V.mjs → auth-DqAM-lIh.mjs} +4 -4
  7. package/dist/{browser-DmSfJ05Z.mjs → browser-CkQP96Zi.mjs} +1 -1
  8. package/dist/{browser-Cw-H2Ma5.cjs → browser-CnxzD1lA.cjs} +1 -1
  9. package/dist/{claudeLocal-B0Y7CBFV.mjs → claudeLocal-B5uxtoit.mjs} +1 -1
  10. package/dist/{claudeLocal-DNLVyOkk.cjs → claudeLocal-CV4fT0Gg.cjs} +1 -1
  11. package/dist/{config-CPzuub8l.mjs → config-C9hdBdfj.mjs} +1 -1
  12. package/dist/{config-B1dECrwV.cjs → config-C__p7EWC.cjs} +1 -1
  13. package/dist/{connect-C7dp_WX0.mjs → connect-BeORCRXq.mjs} +5 -5
  14. package/dist/{connect-CcqT6Eg4.cjs → connect-DQjpjfYn.cjs} +5 -5
  15. package/dist/{controlClient-4irLqjPn.cjs → controlClient-DWBW6jRF.cjs} +4 -4
  16. package/dist/{controlClient-DESWXp4N.mjs → controlClient-VY0CGL8k.mjs} +4 -4
  17. package/dist/{cursorApprovalHook-BDYPCM1A.cjs → cursorApprovalHook-BuDSRM-6.cjs} +2 -2
  18. package/dist/{cursorApprovalHook-BX5PlCLv.mjs → cursorApprovalHook-D_8btpsY.mjs} +2 -2
  19. package/dist/{cursorApprovalServer-BZyv6LZR.mjs → cursorApprovalServer-BOUd2-Fg.mjs} +1 -1
  20. package/dist/{cursorApprovalServer-gH0pwRGq.cjs → cursorApprovalServer-j9RphnEG.cjs} +1 -1
  21. package/dist/{deviceKeys-BekDRny4.mjs → deviceKeys-DvfaTff3.mjs} +2 -2
  22. package/dist/{deviceKeys-CDTA_iqA.cjs → deviceKeys-c_sN01Mm.cjs} +2 -2
  23. package/dist/{doctor-BCqchQlg.cjs → doctor-CD46A-_Y.cjs} +2 -2
  24. package/dist/{doctor-CFDWT__E.mjs → doctor-DQtQbfG-.mjs} +2 -2
  25. package/dist/{downloadImage-Bv0iPThm.mjs → downloadImage-B6A4x8Jw.mjs} +1 -1
  26. package/dist/{downloadImage-oDAqiRug.cjs → downloadImage-DGdHCFi3.cjs} +1 -1
  27. package/dist/{enroll-BEZ5llpQ.mjs → enroll-CyHWNKNt.mjs} +3 -3
  28. package/dist/{enroll-BS_DDdDI.cjs → enroll-D9CEuRI_.cjs} +3 -3
  29. package/dist/{evidence-DUqAB-YC.mjs → evidence-BuYebdrN.mjs} +1 -1
  30. package/dist/{evidence-DNxlL47R.cjs → evidence-CCrpzsTA.cjs} +1 -1
  31. package/dist/{formatImageMessage-DNrnXT9b.mjs → formatImageMessage-5qaaT_Wq.mjs} +1 -1
  32. package/dist/{formatImageMessage-9IXAYb2e.cjs → formatImageMessage-DttKW75w.cjs} +1 -1
  33. package/dist/index.cjs +49 -47
  34. package/dist/index.mjs +49 -47
  35. package/dist/{install-DRJM6rAH.mjs → install-1Y6dAcMp.mjs} +1 -1
  36. package/dist/{install-B8BRcKro.cjs → install-B0hT_tLv.cjs} +2 -2
  37. package/dist/{install-qidTS2aZ.cjs → install-C4cwObCN.cjs} +1 -1
  38. package/dist/{install-PoZjcS6c.mjs → install-eIXFuZbC.mjs} +2 -2
  39. package/dist/lib.cjs +6 -6
  40. package/dist/lib.mjs +6 -6
  41. package/dist/{loadableToolOutput-BlVR2izz.mjs → loadableToolOutput-BKDTnyoF.mjs} +2 -2
  42. package/dist/{loadableToolOutput-Dee4IYX-.cjs → loadableToolOutput-Cb-18__b.cjs} +2 -2
  43. package/dist/{persistence-CXOGgoCo.cjs → persistence-CNXsXPLm.cjs} +1 -1
  44. package/dist/{persistence-DSUgpkhC.mjs → persistence-IdEuIeMz.mjs} +1 -1
  45. package/dist/{push-CISsRYtP.cjs → push-XL6Sb0Vw.cjs} +6 -6
  46. package/dist/{push-BAhpKKZi.mjs → push-tXs96IyG.mjs} +6 -6
  47. package/dist/{registerKillSessionHandler-DYhs41SE.cjs → registerKillSessionHandler-D9tmPdw5.cjs} +3 -3
  48. package/dist/{registerKillSessionHandler-Due-xxRL.mjs → registerKillSessionHandler-vF5c8YZF.mjs} +3 -3
  49. package/dist/{run-DOdseFir.cjs → run-BKfeeheJ.cjs} +16 -10
  50. package/dist/{run-CnaW5CvS.mjs → run-BvpCwXkt.mjs} +16 -10
  51. package/dist/{runClaude-DZMQllwE.mjs → runClaude-BiVqZQOm.mjs} +15 -15
  52. package/dist/{runClaude-Bdg1uZQB.cjs → runClaude-DDsG7eMR.cjs} +16 -16
  53. package/dist/{runCodex-Btsu2b6-.cjs → runCodex-Bh519-dW.cjs} +15 -15
  54. package/dist/{runCodex-DBZcVBP-.mjs → runCodex-C-8SvnpP.mjs} +15 -15
  55. package/dist/{runCursor-BGoe6glt.mjs → runCursor-3AFNF0y2.mjs} +16 -16
  56. package/dist/{runCursor-BoqAa3cX.cjs → runCursor-CYbvOqUa.cjs} +16 -16
  57. package/dist/{runGemini-CrPFkfeE.mjs → runGemini-Dh2JRfOJ.mjs} +19 -19
  58. package/dist/{runGemini-PlEnK1qg.cjs → runGemini-ExHXGZBY.cjs} +19 -19
  59. package/dist/{runOneShot-Ck0pDOnK.cjs → runOneShot-CEVKtkx_.cjs} +2 -2
  60. package/dist/{runOneShot-CtcdFR7C.mjs → runOneShot-CVcw-K0_.mjs} +2 -2
  61. package/dist/{serve-CmDwh71O.mjs → serve-C4dOQ0jP.mjs} +6 -6
  62. package/dist/{serve-Dw2TAf7J.cjs → serve-D0IhhySV.cjs} +6 -6
  63. package/dist/{session-lvats2oo.mjs → session-CwMxRPXS.mjs} +5 -5
  64. package/dist/{session-cgCKfQlj.cjs → session-DK9eudJT.cjs} +5 -5
  65. package/dist/{sessionKeyCache-WsWILYqW.mjs → sessionKeyCache-DDzTs7E5.mjs} +1 -1
  66. package/dist/{sessionKeyCache-BcHYqqvh.cjs → sessionKeyCache-JjjYAxdf.cjs} +1 -1
  67. package/dist/{sessionList-CZe1CUNV.cjs → sessionList-DZmmAP3q.cjs} +2 -2
  68. package/dist/{sessionList-rWjYFvKo.mjs → sessionList-IYAtPIev.mjs} +2 -2
  69. package/dist/{sessionSummary-DHMo6gQp.mjs → sessionSummary-CQQyTHRC.mjs} +3 -3
  70. package/dist/{sessionSummary-B2alrCw2.cjs → sessionSummary-CsIfkyZA.cjs} +3 -3
  71. package/dist/{setupOfflineReconnection-Bgr2zrFL.mjs → setupOfflineReconnection-C1yzDMt6.mjs} +3 -3
  72. package/dist/{setupOfflineReconnection-CDKLObwx.cjs → setupOfflineReconnection-DwtIEUeJ.cjs} +3 -3
  73. package/dist/{spawnHappyCLI-DMHDwhaj.cjs → spawnHappyCLI-BbMkZhMk.cjs} +1 -1
  74. package/dist/{spawnHappyCLI-D395WmG6.mjs → spawnHappyCLI-DlTg87jS.mjs} +1 -1
  75. package/dist/{ssh-DY2t_lUb.cjs → ssh-D31o750w.cjs} +40 -28
  76. package/dist/{ssh-D4Tm8kgg.mjs → ssh-DSVjanff.mjs} +40 -28
  77. package/dist/{task-CwUcMY2G.cjs → task--Apxd9oF.cjs} +6 -6
  78. package/dist/{task-5ZowiuIL.mjs → task-D9ZjWCcw.mjs} +6 -6
  79. package/dist/{uninstall-rxjrCBV0.mjs → uninstall-Bo2uaLRP.mjs} +2 -2
  80. package/dist/{uninstall-B8pTaKP5.cjs → uninstall-CZJcoC06.cjs} +2 -2
  81. package/dist/{update-DP570X8n.mjs → update-BiV4YqG3.mjs} +3 -3
  82. package/dist/{update-DwU5c4md.cjs → update-D-bTjP2k.cjs} +3 -3
  83. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import chalk from 'chalk';
2
- import { l as logger, i as isDebug, r as readCredentials, a as readSettings, p as packageJson } from './persistence-DSUgpkhC.mjs';
2
+ import { l as logger, i as isDebug, r as readCredentials, a as readSettings, p as packageJson } from './persistence-IdEuIeMz.mjs';
3
3
  import { z } from 'zod';
4
4
  import { execFileSync } from 'node:child_process';
5
5
  import 'node:fs/promises';
@@ -11,8 +11,8 @@ import 'tweetnacl';
11
11
  import 'fs';
12
12
 
13
13
  async function spawnAndWaitForDaemon() {
14
- const { spawnHappyCLI } = await import('./spawnHappyCLI-D395WmG6.mjs').then(function (n) { return n.a; });
15
- const { checkIfDaemonRunningAndCleanupStaleState } = await import('./controlClient-DESWXp4N.mjs');
14
+ const { spawnHappyCLI } = await import('./spawnHappyCLI-DlTg87jS.mjs').then(function (n) { return n.a; });
15
+ const { checkIfDaemonRunningAndCleanupStaleState } = await import('./controlClient-VY0CGL8k.mjs');
16
16
  const child = spawnHappyCLI(["daemon", "start-sync"], {
17
17
  detached: true,
18
18
  stdio: "ignore"
@@ -35,7 +35,7 @@ async function spawnAndWaitForDaemon() {
35
35
  if (!args.includes("--version")) ;
36
36
  if (subcommand === "orchestrator-oneshot") {
37
37
  try {
38
- const { runOrchestratorOneShot } = await import('./runOneShot-CtcdFR7C.mjs');
38
+ const { runOrchestratorOneShot } = await import('./runOneShot-CVcw-K0_.mjs');
39
39
  const exitCode = await runOrchestratorOneShot(args.slice(1));
40
40
  process.exit(exitCode);
41
41
  } catch (error) {
@@ -48,7 +48,7 @@ async function spawnAndWaitForDaemon() {
48
48
  return;
49
49
  } else if (subcommand === "doctor") {
50
50
  const { killRunawayHappyProcesses } = await import('./doctor-ON7pN5G5.mjs');
51
- const { runDoctorCommand } = await import('./doctor-CFDWT__E.mjs');
51
+ const { runDoctorCommand } = await import('./doctor-DQtQbfG-.mjs');
52
52
  if (args[1] === "clean") {
53
53
  const result = await killRunawayHappyProcesses();
54
54
  console.log(`Cleaned up ${result.killed} runaway processes`);
@@ -61,7 +61,7 @@ async function spawnAndWaitForDaemon() {
61
61
  return;
62
62
  } else if (subcommand === "auth") {
63
63
  try {
64
- const { handleAuthCommand } = await import('./auth-l0Gi002V.mjs');
64
+ const { handleAuthCommand } = await import('./auth-DqAM-lIh.mjs');
65
65
  await handleAuthCommand(args.slice(1));
66
66
  } catch (error) {
67
67
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -73,7 +73,7 @@ async function spawnAndWaitForDaemon() {
73
73
  return;
74
74
  } else if (subcommand === "connect") {
75
75
  try {
76
- const { handleConnectCommand } = await import('./connect-C7dp_WX0.mjs');
76
+ const { handleConnectCommand } = await import('./connect-BeORCRXq.mjs');
77
77
  await handleConnectCommand(args.slice(1));
78
78
  } catch (error) {
79
79
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -84,11 +84,11 @@ async function spawnAndWaitForDaemon() {
84
84
  }
85
85
  return;
86
86
  } else if (subcommand === "codex") {
87
- const { authAndSetupMachineIfNeeded } = await import('./auth-Dn64MNXy.mjs');
88
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-DESWXp4N.mjs');
89
- const { spawnHappyCLI } = await import('./spawnHappyCLI-D395WmG6.mjs').then(function (n) { return n.a; });
87
+ const { authAndSetupMachineIfNeeded } = await import('./auth-BnEa31tI.mjs');
88
+ const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-VY0CGL8k.mjs');
89
+ const { spawnHappyCLI } = await import('./spawnHappyCLI-DlTg87jS.mjs').then(function (n) { return n.a; });
90
90
  try {
91
- const { runCodex } = await import('./runCodex-DBZcVBP-.mjs');
91
+ const { runCodex } = await import('./runCodex-C-8SvnpP.mjs');
92
92
  let startedBy = void 0;
93
93
  for (let i = 1; i < args.length; i++) {
94
94
  if (args[i] === "--started-by") {
@@ -119,15 +119,15 @@ async function spawnAndWaitForDaemon() {
119
119
  }
120
120
  return;
121
121
  } else if (subcommand === "cursor-approval-hook") {
122
- const { runCursorApprovalHook } = await import('./cursorApprovalHook-BX5PlCLv.mjs');
122
+ const { runCursorApprovalHook } = await import('./cursorApprovalHook-D_8btpsY.mjs');
123
123
  await runCursorApprovalHook();
124
124
  return;
125
125
  } else if (subcommand === "cursor") {
126
- const { authAndSetupMachineIfNeeded } = await import('./auth-Dn64MNXy.mjs');
127
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-DESWXp4N.mjs');
128
- const { spawnHappyCLI } = await import('./spawnHappyCLI-D395WmG6.mjs').then(function (n) { return n.a; });
126
+ const { authAndSetupMachineIfNeeded } = await import('./auth-BnEa31tI.mjs');
127
+ const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-VY0CGL8k.mjs');
128
+ const { spawnHappyCLI } = await import('./spawnHappyCLI-DlTg87jS.mjs').then(function (n) { return n.a; });
129
129
  try {
130
- const { runCursor } = await import('./runCursor-BGoe6glt.mjs');
130
+ const { runCursor } = await import('./runCursor-3AFNF0y2.mjs');
131
131
  let startedBy = void 0;
132
132
  let model = null;
133
133
  let resumeChatId = null;
@@ -173,9 +173,9 @@ async function spawnAndWaitForDaemon() {
173
173
  }
174
174
  return;
175
175
  } else if (subcommand === "gemini") {
176
- const { authAndSetupMachineIfNeeded } = await import('./auth-Dn64MNXy.mjs');
177
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-DESWXp4N.mjs');
178
- const { spawnHappyCLI } = await import('./spawnHappyCLI-D395WmG6.mjs').then(function (n) { return n.a; });
176
+ const { authAndSetupMachineIfNeeded } = await import('./auth-BnEa31tI.mjs');
177
+ const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-VY0CGL8k.mjs');
178
+ const { spawnHappyCLI } = await import('./spawnHappyCLI-DlTg87jS.mjs').then(function (n) { return n.a; });
179
179
  const geminiSubcommand = args[1];
180
180
  if (geminiSubcommand === "model" && args[2] === "set" && args[3]) {
181
181
  const modelName = args[3];
@@ -249,9 +249,9 @@ async function spawnAndWaitForDaemon() {
249
249
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
250
250
  const projectId = args[3];
251
251
  try {
252
- const { saveGoogleCloudProjectToConfig } = await import('./config-CPzuub8l.mjs');
253
- const { readCredentials: readCredentials2 } = await import('./persistence-DSUgpkhC.mjs').then(function (n) { return n.F; });
254
- const { ApiClient } = await import('./api-DLk8tzQQ.mjs').then(function (n) { return n.m; });
252
+ const { saveGoogleCloudProjectToConfig } = await import('./config-C9hdBdfj.mjs');
253
+ const { readCredentials: readCredentials2 } = await import('./persistence-IdEuIeMz.mjs').then(function (n) { return n.F; });
254
+ const { ApiClient } = await import('./api-9wvM_aF-.mjs').then(function (n) { return n.m; });
255
255
  let userEmail = void 0;
256
256
  try {
257
257
  const credentials = await readCredentials2();
@@ -282,7 +282,7 @@ async function spawnAndWaitForDaemon() {
282
282
  }
283
283
  if (geminiSubcommand === "project" && args[2] === "get") {
284
284
  try {
285
- const { readGeminiLocalConfig } = await import('./config-CPzuub8l.mjs');
285
+ const { readGeminiLocalConfig } = await import('./config-C9hdBdfj.mjs');
286
286
  const config = readGeminiLocalConfig();
287
287
  if (config.googleCloudProject) {
288
288
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -322,7 +322,7 @@ async function spawnAndWaitForDaemon() {
322
322
  process.exit(0);
323
323
  }
324
324
  try {
325
- const { runGemini } = await import('./runGemini-CrPFkfeE.mjs');
325
+ const { runGemini } = await import('./runGemini-Dh2JRfOJ.mjs');
326
326
  let startedBy = void 0;
327
327
  for (let i = 1; i < args.length; i++) {
328
328
  if (args[i] === "--started-by") {
@@ -354,7 +354,7 @@ async function spawnAndWaitForDaemon() {
354
354
  return;
355
355
  } else if (subcommand === "update") {
356
356
  try {
357
- const { handleUpdateCommand } = await import('./update-DP570X8n.mjs');
357
+ const { handleUpdateCommand } = await import('./update-BiV4YqG3.mjs');
358
358
  await handleUpdateCommand();
359
359
  } catch (error) {
360
360
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -367,7 +367,7 @@ async function spawnAndWaitForDaemon() {
367
367
  } else if (subcommand === "logout") {
368
368
  console.log(chalk.yellow('Note: "happy logout" is deprecated. Use "happy auth logout" instead.\n'));
369
369
  try {
370
- const { handleAuthCommand } = await import('./auth-l0Gi002V.mjs');
370
+ const { handleAuthCommand } = await import('./auth-DqAM-lIh.mjs');
371
371
  await handleAuthCommand(["logout"]);
372
372
  } catch (error) {
373
373
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -390,7 +390,7 @@ async function spawnAndWaitForDaemon() {
390
390
  return;
391
391
  } else if (subcommand === "session") {
392
392
  try {
393
- const { handleSessionCommand } = await import('./session-lvats2oo.mjs');
393
+ const { handleSessionCommand } = await import('./session-CwMxRPXS.mjs');
394
394
  await handleSessionCommand(args.slice(1));
395
395
  } catch (error) {
396
396
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -402,7 +402,7 @@ async function spawnAndWaitForDaemon() {
402
402
  return;
403
403
  } else if (subcommand === "task") {
404
404
  try {
405
- const { handleTaskCommand } = await import('./task-5ZowiuIL.mjs');
405
+ const { handleTaskCommand } = await import('./task-D9ZjWCcw.mjs');
406
406
  await handleTaskCommand(args.slice(1));
407
407
  } catch (error) {
408
408
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -450,7 +450,7 @@ async function spawnAndWaitForDaemon() {
450
450
  return;
451
451
  } else if (subcommand === "evidence") {
452
452
  try {
453
- const { handleEvidenceCommand } = await import('./evidence-DUqAB-YC.mjs');
453
+ const { handleEvidenceCommand } = await import('./evidence-BuYebdrN.mjs');
454
454
  await handleEvidenceCommand(args.slice(1));
455
455
  } catch (error) {
456
456
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -467,7 +467,7 @@ async function spawnAndWaitForDaemon() {
467
467
  process.exit(1);
468
468
  }
469
469
  try {
470
- const { runMcpServe } = await import('./serve-CmDwh71O.mjs');
470
+ const { runMcpServe } = await import('./serve-C4dOQ0jP.mjs');
471
471
  await runMcpServe();
472
472
  } catch (error) {
473
473
  process.stderr.write(`[happy-mcp] fatal: ${error instanceof Error ? error.message : "unknown error"}
@@ -481,7 +481,7 @@ async function spawnAndWaitForDaemon() {
481
481
  console.error(chalk.red("Error:"), 'Not authenticated. Run "happy auth" first.');
482
482
  process.exit(1);
483
483
  }
484
- const { parseSshArgs, runOnDevice, sshDevice, sshPickAndConnect } = await import('./ssh-D4Tm8kgg.mjs');
484
+ const { parseSshArgs, runOnDevice, sshDevice, sshPickAndConnect } = await import('./ssh-DSVjanff.mjs');
485
485
  const { target, command, timeoutMs, stream } = parseSshArgs(args.slice(1));
486
486
  try {
487
487
  if (command) {
@@ -489,7 +489,9 @@ async function spawnAndWaitForDaemon() {
489
489
  console.error(chalk.red("Error:"), "Which device? Usage: happy ssh <device> -- <command>");
490
490
  process.exit(1);
491
491
  }
492
- process.exit(await runOnDevice(credentials, target, command, { timeoutMs, stream }));
492
+ const exitCode = await runOnDevice(credentials, target, command, { timeoutMs, stream });
493
+ await Promise.all([process.stdout, process.stderr].map((out) => new Promise((resolve) => out.write("", resolve))));
494
+ process.exit(exitCode);
493
495
  }
494
496
  if (!target) {
495
497
  process.exit(await sshPickAndConnect(credentials));
@@ -502,7 +504,7 @@ async function spawnAndWaitForDaemon() {
502
504
  } else if (subcommand === "device") {
503
505
  const deviceSubcommand = args[1];
504
506
  if (deviceSubcommand === "push") {
505
- const { pushToDevice } = await import('./push-BAhpKKZi.mjs');
507
+ const { pushToDevice } = await import('./push-tXs96IyG.mjs');
506
508
  const credentials = await readCredentials();
507
509
  if (!credentials) {
508
510
  console.error(chalk.red("Error:"), 'Not authenticated. Run "happy auth" first.');
@@ -516,8 +518,8 @@ async function spawnAndWaitForDaemon() {
516
518
  process.exit(await pushToDevice(credentials, target, localPath, remotePath));
517
519
  }
518
520
  if (deviceSubcommand === "enroll") {
519
- const { enrollDevice } = await import('./enroll-BEZ5llpQ.mjs');
520
- const { install } = await import('./install-PoZjcS6c.mjs');
521
+ const { enrollDevice } = await import('./enroll-CyHWNKNt.mjs');
522
+ const { install } = await import('./install-eIXFuZbC.mjs');
521
523
  const token = args[2];
522
524
  if (!token) {
523
525
  console.error(chalk.red("Error:"), "Missing enrollment token. Usage: happy device enroll <token>");
@@ -547,12 +549,12 @@ ${chalk.bold("Usage:")}
547
549
  `);
548
550
  process.exit(0);
549
551
  } else if (subcommand === "daemon") {
550
- const { startDaemon } = await import('./run-CnaW5CvS.mjs').then(function (n) { return n.r; });
551
- const { install } = await import('./install-PoZjcS6c.mjs');
552
- const { uninstall } = await import('./uninstall-rxjrCBV0.mjs');
553
- const { runDoctorCommand } = await import('./doctor-CFDWT__E.mjs');
554
- const { getLatestDaemonLog } = await import('./persistence-DSUgpkhC.mjs').then(function (n) { return n.E; });
555
- const { listDaemonSessions, stopDaemonSession, stopDaemon } = await import('./controlClient-DESWXp4N.mjs');
552
+ const { startDaemon } = await import('./run-BvpCwXkt.mjs').then(function (n) { return n.r; });
553
+ const { install } = await import('./install-eIXFuZbC.mjs');
554
+ const { uninstall } = await import('./uninstall-Bo2uaLRP.mjs');
555
+ const { runDoctorCommand } = await import('./doctor-DQtQbfG-.mjs');
556
+ const { getLatestDaemonLog } = await import('./persistence-IdEuIeMz.mjs').then(function (n) { return n.E; });
557
+ const { listDaemonSessions, stopDaemonSession, stopDaemon } = await import('./controlClient-VY0CGL8k.mjs');
556
558
  const daemonSubcommand = args[1];
557
559
  if (daemonSubcommand === "list") {
558
560
  try {
@@ -757,7 +759,7 @@ ${chalk.gray("\u2500".repeat(60))}
757
759
  ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
758
760
  `);
759
761
  try {
760
- const { claudeCliPath } = await import('./claudeLocal-B0Y7CBFV.mjs').then(function (n) { return n.d; });
762
+ const { claudeCliPath } = await import('./claudeLocal-B5uxtoit.mjs').then(function (n) { return n.d; });
761
763
  const claudeHelp = execFileSync(claudeCliPath, ["--help"], { encoding: "utf8" });
762
764
  console.log(claudeHelp);
763
765
  } catch (e) {
@@ -787,10 +789,10 @@ ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
787
789
  }
788
790
  process.exit(0);
789
791
  }
790
- const { authAndSetupMachineIfNeeded } = await import('./auth-Dn64MNXy.mjs');
791
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-DESWXp4N.mjs');
792
- const { spawnHappyCLI } = await import('./spawnHappyCLI-D395WmG6.mjs').then(function (n) { return n.a; });
793
- const { runClaude } = await import('./runClaude-DZMQllwE.mjs');
792
+ const { authAndSetupMachineIfNeeded } = await import('./auth-BnEa31tI.mjs');
793
+ const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-VY0CGL8k.mjs');
794
+ const { spawnHappyCLI } = await import('./spawnHappyCLI-DlTg87jS.mjs').then(function (n) { return n.a; });
795
+ const { runClaude } = await import('./runClaude-BiVqZQOm.mjs');
794
796
  const {
795
797
  credentials
796
798
  } = await authAndSetupMachineIfNeeded();
@@ -864,7 +866,7 @@ ${chalk.bold("Examples:")}
864
866
  }
865
867
  console.log(chalk.blue("\u{1F4F1} Sending push notification..."));
866
868
  try {
867
- const { ApiClient } = await import('./api-DLk8tzQQ.mjs').then(function (n) { return n.m; });
869
+ const { ApiClient } = await import('./api-9wvM_aF-.mjs').then(function (n) { return n.m; });
868
870
  const api = await ApiClient.create(credentials);
869
871
  const notificationTitle = title || "Happy AI";
870
872
  api.push().sendToAllDevices(
@@ -2,7 +2,7 @@ import { existsSync, mkdirSync, writeFileSync } from 'fs';
2
2
  import { execSync } from 'child_process';
3
3
  import os from 'os';
4
4
  import { join } from 'path';
5
- import { l as logger } from './persistence-DSUgpkhC.mjs';
5
+ import { l as logger } from './persistence-IdEuIeMz.mjs';
6
6
  import { t as trimIdent } from './trimIdent-BAjmv_TG.mjs';
7
7
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
8
8
 
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./persistence-CXOGgoCo.cjs');
4
- var install$2 = require('./install-qidTS2aZ.cjs');
3
+ var logger = require('./persistence-CNXsXPLm.cjs');
4
+ var install$2 = require('./install-C4cwObCN.cjs');
5
5
  var fs = require('fs');
6
6
  var child_process = require('child_process');
7
7
  var path = require('path');
@@ -4,7 +4,7 @@ var fs = require('fs');
4
4
  var child_process = require('child_process');
5
5
  var os = require('os');
6
6
  var path = require('path');
7
- var logger = require('./persistence-CXOGgoCo.cjs');
7
+ var logger = require('./persistence-CNXsXPLm.cjs');
8
8
  var trimIdent = require('./trimIdent-4gvk9Wk6.cjs');
9
9
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
10
10
 
@@ -1,5 +1,5 @@
1
- import { l as logger, r as readCredentials } from './persistence-DSUgpkhC.mjs';
2
- import { i as install$2 } from './install-DRJM6rAH.mjs';
1
+ import { l as logger, r as readCredentials } from './persistence-IdEuIeMz.mjs';
2
+ import { i as install$2 } from './install-1Y6dAcMp.mjs';
3
3
  import { existsSync, mkdirSync, writeFileSync } from 'fs';
4
4
  import { execSync } from 'child_process';
5
5
  import path from 'path';
package/dist/lib.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var api = require('./api-Da8DnAgp.cjs');
4
- var logger = require('./persistence-CXOGgoCo.cjs');
3
+ var api = require('./api-BGc484qf.cjs');
4
+ var logger = require('./persistence-CNXsXPLm.cjs');
5
5
  var types = require('./types-DWeB7aqh.cjs');
6
6
  require('axios');
7
7
  require('node:events');
@@ -11,10 +11,11 @@ require('./index-DBev4hhV.cjs');
11
11
  require('@paralleldrive/cuid2');
12
12
  require('./time-Bj2HRkKH.cjs');
13
13
  require('node:crypto');
14
- require('node:fs');
15
14
  require('node:path');
16
- require('node:child_process');
15
+ require('node:fs');
17
16
  require('node:fs/promises');
17
+ require('node:readline');
18
+ require('node:child_process');
18
19
  require('node:os');
19
20
  require('node:util');
20
21
  require('child_process');
@@ -28,9 +29,8 @@ require('ws');
28
29
  require('crypto');
29
30
  require('tweetnacl');
30
31
  require('@stablelib/base64');
31
- require('node:readline');
32
32
  require('expo-server-sdk');
33
- require('./sessionKeyCache-BcHYqqvh.cjs');
33
+ require('./sessionKeyCache-JjjYAxdf.cjs');
34
34
  require('chalk');
35
35
  require('fs');
36
36
 
package/dist/lib.mjs CHANGED
@@ -1,5 +1,5 @@
1
- export { A as ApiClient, a as ApiSessionClient } from './api-DLk8tzQQ.mjs';
2
- export { c as configuration, l as logger } from './persistence-DSUgpkhC.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient } from './api-9wvM_aF-.mjs';
2
+ export { c as configuration, l as logger } from './persistence-IdEuIeMz.mjs';
3
3
  export { R as RawJSONLinesSchema } from './types-BoJh4Qfv.mjs';
4
4
  import 'axios';
5
5
  import 'node:events';
@@ -9,10 +9,11 @@ import './index-7P6T8CE4.mjs';
9
9
  import '@paralleldrive/cuid2';
10
10
  import './time-DgsBLJA_.mjs';
11
11
  import 'node:crypto';
12
- import 'node:fs';
13
12
  import 'node:path';
14
- import 'node:child_process';
13
+ import 'node:fs';
15
14
  import 'node:fs/promises';
15
+ import 'node:readline';
16
+ import 'node:child_process';
16
17
  import 'node:os';
17
18
  import 'node:util';
18
19
  import 'child_process';
@@ -26,8 +27,7 @@ import 'ws';
26
27
  import 'crypto';
27
28
  import 'tweetnacl';
28
29
  import '@stablelib/base64';
29
- import 'node:readline';
30
30
  import 'expo-server-sdk';
31
- import './sessionKeyCache-WsWILYqW.mjs';
31
+ import './sessionKeyCache-DDzTs7E5.mjs';
32
32
  import 'chalk';
33
33
  import 'fs';
@@ -1,6 +1,6 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { l as logger } from './persistence-DSUgpkhC.mjs';
3
- import { s as saveToolOutputRecord } from './api-DLk8tzQQ.mjs';
2
+ import { l as logger } from './persistence-IdEuIeMz.mjs';
3
+ import { s as saveToolOutputRecord } from './api-9wvM_aF-.mjs';
4
4
 
5
5
  class BaseReasoningProcessor {
6
6
  accumulator = "";
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var node_crypto = require('node:crypto');
4
- var logger = require('./persistence-CXOGgoCo.cjs');
5
- var api = require('./api-Da8DnAgp.cjs');
4
+ var logger = require('./persistence-CNXsXPLm.cjs');
5
+ var api = require('./api-BGc484qf.cjs');
6
6
 
7
7
  class BaseReasoningProcessor {
8
8
  accumulator = "";
@@ -35,7 +35,7 @@ function isDebug() {
35
35
  }
36
36
 
37
37
  var name = "@zonease/happy";
38
- var version = "0.6.54";
38
+ var version = "0.6.56";
39
39
  var description = "Mobile and Web client for Claude Code, Codex, and Gemini";
40
40
  var author = "ZonEaseTech";
41
41
  var license = "MIT";
@@ -14,7 +14,7 @@ function isDebug() {
14
14
  }
15
15
 
16
16
  var name = "@zonease/happy";
17
- var version = "0.6.54";
17
+ var version = "0.6.56";
18
18
  var description = "Mobile and Web client for Claude Code, Codex, and Gemini";
19
19
  var author = "ZonEaseTech";
20
20
  var license = "MIT";
@@ -2,8 +2,8 @@
2
2
 
3
3
  var promises = require('node:fs/promises');
4
4
  var socket_ioClient = require('socket.io-client');
5
- var logger = require('./persistence-CXOGgoCo.cjs');
6
- var ssh = require('./ssh-DY2t_lUb.cjs');
5
+ var logger = require('./persistence-CNXsXPLm.cjs');
6
+ var ssh = require('./ssh-D31o750w.cjs');
7
7
  require('node:fs');
8
8
  require('node:os');
9
9
  require('node:path');
@@ -12,16 +12,16 @@ require('node:crypto');
12
12
  require('tweetnacl');
13
13
  require('chalk');
14
14
  require('fs');
15
- require('./deviceKeys-CDTA_iqA.cjs');
15
+ require('./deviceKeys-c_sN01Mm.cjs');
16
16
  require('axios');
17
- require('./auth-3eHy-NiL.cjs');
17
+ require('./auth-B6vskzfm.cjs');
18
18
  require('qrcode-terminal');
19
19
  require('./time-Bj2HRkKH.cjs');
20
- require('./browser-Cw-H2Ma5.cjs');
20
+ require('./browser-CnxzD1lA.cjs');
21
21
  require('open');
22
22
  require('react');
23
23
  require('ink');
24
- require('./controlClient-4irLqjPn.cjs');
24
+ require('./controlClient-DWBW6jRF.cjs');
25
25
  require('./projectPath-ChLhdOyt.cjs');
26
26
  require('path');
27
27
  require('url');
@@ -1,7 +1,7 @@
1
1
  import { stat, readFile } from 'node:fs/promises';
2
2
  import { io } from 'socket.io-client';
3
- import { c as configuration, e as encodeBase64, f as encrypt, g as decrypt, h as decodeBase64 } from './persistence-DSUgpkhC.mjs';
4
- import { resolveDeviceForCommand } from './ssh-D4Tm8kgg.mjs';
3
+ import { c as configuration, e as encodeBase64, f as encrypt, g as decrypt, h as decodeBase64 } from './persistence-IdEuIeMz.mjs';
4
+ import { resolveDeviceForCommand } from './ssh-DSVjanff.mjs';
5
5
  import 'node:fs';
6
6
  import 'node:os';
7
7
  import 'node:path';
@@ -10,16 +10,16 @@ import 'node:crypto';
10
10
  import 'tweetnacl';
11
11
  import 'chalk';
12
12
  import 'fs';
13
- import './deviceKeys-BekDRny4.mjs';
13
+ import './deviceKeys-DvfaTff3.mjs';
14
14
  import 'axios';
15
- import './auth-Dn64MNXy.mjs';
15
+ import './auth-BnEa31tI.mjs';
16
16
  import 'qrcode-terminal';
17
17
  import './time-DgsBLJA_.mjs';
18
- import './browser-DmSfJ05Z.mjs';
18
+ import './browser-CkQP96Zi.mjs';
19
19
  import 'open';
20
20
  import 'react';
21
21
  import 'ink';
22
- import './controlClient-DESWXp4N.mjs';
22
+ import './controlClient-VY0CGL8k.mjs';
23
23
  import './projectPath-BTBIMB57.mjs';
24
24
  import 'path';
25
25
  import 'url';
@@ -7,8 +7,8 @@ var node_http = require('node:http');
7
7
  var streamableHttp_js = require('@modelcontextprotocol/sdk/server/streamableHttp.js');
8
8
  var types_js = require('@modelcontextprotocol/sdk/types.js');
9
9
  var z = require('zod');
10
- var logger = require('./persistence-CXOGgoCo.cjs');
11
- var deviceKeys = require('./deviceKeys-CDTA_iqA.cjs');
10
+ var logger = require('./persistence-CNXsXPLm.cjs');
11
+ var deviceKeys = require('./deviceKeys-c_sN01Mm.cjs');
12
12
  var axios = require('axios');
13
13
  var promises = require('node:fs/promises');
14
14
  var node_crypto = require('node:crypto');
@@ -18,7 +18,7 @@ require('./index-DBev4hhV.cjs');
18
18
  var node_child_process = require('node:child_process');
19
19
  require('node:events');
20
20
  require('socket.io-client');
21
- require('./api-Da8DnAgp.cjs');
21
+ require('./api-BGc484qf.cjs');
22
22
  require('tweetnacl');
23
23
  require('ws');
24
24
  require('crypto');
@@ -5,8 +5,8 @@ import { createServer } from 'node:http';
5
5
  import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
6
6
  import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
7
7
  import { z } from 'zod';
8
- import { c as configuration, l as logger, r as readCredentials } from './persistence-DSUgpkhC.mjs';
9
- import { l as listDevices, d as deviceExec } from './deviceKeys-BekDRny4.mjs';
8
+ import { c as configuration, l as logger, r as readCredentials } from './persistence-IdEuIeMz.mjs';
9
+ import { l as listDevices, d as deviceExec } from './deviceKeys-DvfaTff3.mjs';
10
10
  import axios from 'axios';
11
11
  import { stat, readFile } from 'node:fs/promises';
12
12
  import { randomUUID } from 'node:crypto';
@@ -16,7 +16,7 @@ import './index-7P6T8CE4.mjs';
16
16
  import { execSync } from 'node:child_process';
17
17
  import 'node:events';
18
18
  import 'socket.io-client';
19
- import './api-DLk8tzQQ.mjs';
19
+ import './api-9wvM_aF-.mjs';
20
20
  import 'tweetnacl';
21
21
  import 'ws';
22
22
  import 'crypto';
@@ -3,15 +3,15 @@
3
3
  var fs$1 = require('fs/promises');
4
4
  var os = require('os');
5
5
  var tmp = require('tmp');
6
- var api = require('./api-Da8DnAgp.cjs');
7
- var logger = require('./persistence-CXOGgoCo.cjs');
8
- var auth = require('./auth-3eHy-NiL.cjs');
6
+ var api = require('./api-BGc484qf.cjs');
7
+ var logger = require('./persistence-CNXsXPLm.cjs');
8
+ var auth = require('./auth-B6vskzfm.cjs');
9
9
  var child_process = require('child_process');
10
- var doctor = require('./doctor-BCqchQlg.cjs');
11
- var spawnHappyCLI = require('./spawnHappyCLI-DMHDwhaj.cjs');
12
- var controlClient = require('./controlClient-4irLqjPn.cjs');
13
- var deviceKeys = require('./deviceKeys-CDTA_iqA.cjs');
14
- var install = require('./install-qidTS2aZ.cjs');
10
+ var doctor = require('./doctor-CD46A-_Y.cjs');
11
+ var spawnHappyCLI = require('./spawnHappyCLI-BbMkZhMk.cjs');
12
+ var controlClient = require('./controlClient-DWBW6jRF.cjs');
13
+ var deviceKeys = require('./deviceKeys-c_sN01Mm.cjs');
14
+ var install = require('./install-C4cwObCN.cjs');
15
15
  var fastify = require('fastify');
16
16
  var fs = require('node:fs');
17
17
  var promises = require('node:fs/promises');
@@ -2028,7 +2028,7 @@ ${error.message}
2028
2028
  requestShutdown: () => requestShutdown("happy-cli"),
2029
2029
  onHappySessionWebhook,
2030
2030
  execOnDevice: async (deviceId, command, timeoutMs) => {
2031
- if (!connectedMachine) {
2031
+ if (!connectedMachine?.rpcSocket.connected) {
2032
2032
  throw new Error("Daemon is not connected yet");
2033
2033
  }
2034
2034
  const material = await deviceKeys.readCachedDeviceKey(deviceId);
@@ -2040,7 +2040,13 @@ ${error.message}
2040
2040
  deviceKeyVariant: material.variant,
2041
2041
  timeout: timeoutMs,
2042
2042
  skipMachineLookup: true
2043
- });
2043
+ }).catch((error) => ({
2044
+ success: false,
2045
+ stdout: "",
2046
+ stderr: "",
2047
+ exitCode: 1,
2048
+ error: error instanceof Error ? error.message : String(error)
2049
+ }));
2044
2050
  }
2045
2051
  });
2046
2052
  const fileState = {
@@ -1,15 +1,15 @@
1
1
  import fs from 'fs/promises';
2
2
  import os from 'os';
3
3
  import * as tmp from 'tmp';
4
- import { A as ApiClient } from './api-DLk8tzQQ.mjs';
5
- import { c as configuration, l as logger, p as packageJson, v as acquireDaemonLock, a as readSettings, i as isDebug, e as encodeBase64, x as writeDaemonState, m as readDaemonState, y as releaseDaemonLock, z as validateProfileForAgent, A as getProfileEnvironmentVariables } from './persistence-DSUgpkhC.mjs';
6
- import { authAndSetupMachineIfNeeded } from './auth-Dn64MNXy.mjs';
4
+ import { A as ApiClient } from './api-9wvM_aF-.mjs';
5
+ import { c as configuration, l as logger, p as packageJson, v as acquireDaemonLock, a as readSettings, i as isDebug, e as encodeBase64, x as writeDaemonState, m as readDaemonState, y as releaseDaemonLock, z as validateProfileForAgent, A as getProfileEnvironmentVariables } from './persistence-IdEuIeMz.mjs';
6
+ import { authAndSetupMachineIfNeeded } from './auth-BnEa31tI.mjs';
7
7
  import { spawn, execSync, exec } from 'child_process';
8
- import { getEnvironmentInfo } from './doctor-CFDWT__E.mjs';
9
- import { s as spawnHappyCLI } from './spawnHappyCLI-D395WmG6.mjs';
10
- import { isDaemonRunningCurrentlyInstalledHappyVersion, stopDaemon, cleanupDaemonState } from './controlClient-DESWXp4N.mjs';
11
- import { a as readCachedDeviceKey, d as deviceExec } from './deviceKeys-BekDRny4.mjs';
12
- import { P as PLIST_LABEL } from './install-DRJM6rAH.mjs';
8
+ import { getEnvironmentInfo } from './doctor-DQtQbfG-.mjs';
9
+ import { s as spawnHappyCLI } from './spawnHappyCLI-DlTg87jS.mjs';
10
+ import { isDaemonRunningCurrentlyInstalledHappyVersion, stopDaemon, cleanupDaemonState } from './controlClient-VY0CGL8k.mjs';
11
+ import { a as readCachedDeviceKey, d as deviceExec } from './deviceKeys-DvfaTff3.mjs';
12
+ import { P as PLIST_LABEL } from './install-1Y6dAcMp.mjs';
13
13
  import fastify from 'fastify';
14
14
  import { createReadStream } from 'node:fs';
15
15
  import { stat } from 'node:fs/promises';
@@ -2007,7 +2007,7 @@ ${error.message}
2007
2007
  requestShutdown: () => requestShutdown("happy-cli"),
2008
2008
  onHappySessionWebhook,
2009
2009
  execOnDevice: async (deviceId, command, timeoutMs) => {
2010
- if (!connectedMachine) {
2010
+ if (!connectedMachine?.rpcSocket.connected) {
2011
2011
  throw new Error("Daemon is not connected yet");
2012
2012
  }
2013
2013
  const material = await readCachedDeviceKey(deviceId);
@@ -2019,7 +2019,13 @@ ${error.message}
2019
2019
  deviceKeyVariant: material.variant,
2020
2020
  timeout: timeoutMs,
2021
2021
  skipMachineLookup: true
2022
- });
2022
+ }).catch((error) => ({
2023
+ success: false,
2024
+ stdout: "",
2025
+ stderr: "",
2026
+ exitCode: 1,
2027
+ error: error instanceof Error ? error.message : String(error)
2028
+ }));
2023
2029
  }
2024
2030
  });
2025
2031
  const fileState = {