@zonease/happy 0.6.40 → 0.6.42

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 (87) hide show
  1. package/dist/{api-C7FyJfZ1.cjs → api-CIE4_cWd.cjs} +4 -4
  2. package/dist/{api-D6WL40-U.mjs → api-Ew6xr81i.mjs} +4 -4
  3. package/dist/{auth-DO9GexAR.mjs → auth-BzYevJo2.mjs} +4 -4
  4. package/dist/{auth-DCsIoZLT.cjs → auth-Dor79zTL.cjs} +4 -4
  5. package/dist/{auth-C7ZScWEw.cjs → auth-G9fZpVJ2.cjs} +2 -2
  6. package/dist/{auth-DxJ3VvrX.mjs → auth-Q2STUNI-.mjs} +2 -2
  7. package/dist/{browser-AoVGRX7y.mjs → browser-BI7s-V8E.mjs} +1 -1
  8. package/dist/{browser-DzgO4oaD.cjs → browser-qDIIAL7S.cjs} +1 -1
  9. package/dist/{claudeLocal-CWNGpJ0-.mjs → claudeLocal-Db2tDC4X.mjs} +1 -1
  10. package/dist/{claudeLocal-C6BdzhDx.cjs → claudeLocal-f4uBLJaM.cjs} +1 -1
  11. package/dist/{config-DZk-mJ0K.mjs → config-CHjDs8AS.mjs} +1 -1
  12. package/dist/{config-CclB3QW9.cjs → config-CSBlEik9.cjs} +1 -1
  13. package/dist/{connect-k9CqDJ-T.cjs → connect-CJoTliii.cjs} +5 -5
  14. package/dist/{connect-BXLUKJ5P.mjs → connect-O_nA5BOC.mjs} +5 -5
  15. package/dist/{controlClient-B23M-WPp.cjs → controlClient-CEz_p1zc.cjs} +1 -1
  16. package/dist/{controlClient-DB5tDU7V.mjs → controlClient-DoS9JqQC.mjs} +1 -1
  17. package/dist/cursorApprovalHook-B0v1kGa7.mjs +95 -0
  18. package/dist/cursorApprovalHook-DRAHfTXU.cjs +97 -0
  19. package/dist/cursorApprovalServer-DzY8yJlI.cjs +167 -0
  20. package/dist/cursorApprovalServer-JjPkdjGR.mjs +164 -0
  21. package/dist/{deviceKeys-BTdo34Uz.mjs → deviceKeys-B4aqjnE6.mjs} +2 -2
  22. package/dist/{deviceKeys-C540DcXl.cjs → deviceKeys-DyUn0bEx.cjs} +2 -2
  23. package/dist/{doctor-BQGLhrcI.cjs → doctor-BJSuVRUZ.cjs} +3 -3
  24. package/dist/{doctor-CU4JLGQ1.mjs → doctor-DRnft_5-.mjs} +3 -3
  25. package/dist/{downloadImage-DZXI3mXL.mjs → downloadImage-BpVF7A79.mjs} +7 -40
  26. package/dist/{downloadImage-cQ1Z7hkC.cjs → downloadImage-Cijmufpr.cjs} +5 -39
  27. package/dist/{enroll-Bo-CNio1.cjs → enroll-C2gunHdt.cjs} +3 -3
  28. package/dist/{enroll-B55BQR56.mjs → enroll-CysDL6ee.mjs} +3 -3
  29. package/dist/{evidence-DTYRAaOZ.mjs → evidence-DPutCuUr.mjs} +1 -1
  30. package/dist/{evidence-DQp8QWcv.cjs → evidence-DsQ-h-_W.cjs} +1 -1
  31. package/dist/{formatImageMessage-DbKSSjMx.mjs → formatImageMessage-6aV9YFWr.mjs} +1 -1
  32. package/dist/{formatImageMessage-CixDYY6G.cjs → formatImageMessage-BPK_Ivfe.cjs} +1 -1
  33. package/dist/gitWorktree-C6jLoaMw.cjs +39 -0
  34. package/dist/gitWorktree-CzJDU2BV.mjs +37 -0
  35. package/dist/{index-CDTNgfUf.cjs → index-BeKrqPYR.cjs} +25 -1
  36. package/dist/{index-CPKdvi7J.mjs → index-DTV7drqs.mjs} +25 -1
  37. package/dist/index.cjs +106 -41
  38. package/dist/index.mjs +106 -41
  39. package/dist/{install-B1e6rdy7.mjs → install-BsTA2tZn.mjs} +2 -2
  40. package/dist/{install-CgUPGIoF.mjs → install-DBg0xQ3g.mjs} +1 -1
  41. package/dist/{install-D7Ir7ciZ.cjs → install-DlOppA-e.cjs} +2 -2
  42. package/dist/{install-DSDufaPd.cjs → install-Tyhs6rUp.cjs} +1 -1
  43. package/dist/lib.cjs +4 -4
  44. package/dist/lib.d.cts +3 -2
  45. package/dist/lib.d.mts +3 -2
  46. package/dist/lib.mjs +4 -4
  47. package/dist/{loadableToolOutput-Bfei9wPq.mjs → loadableToolOutput-2dMPAp4N.mjs} +3 -456
  48. package/dist/{loadableToolOutput-CbLGtvST.cjs → loadableToolOutput-DPGTtKJM.cjs} +2 -458
  49. package/dist/{persistence-CBTtC_dm.cjs → persistence-BcQmjobZ.cjs} +7 -4
  50. package/dist/{persistence-DKfF81pd.mjs → persistence-D9tMm6bj.mjs} +8 -5
  51. package/dist/push-Cnm6JQMD.cjs +80 -0
  52. package/dist/push-Dxsugkes.mjs +78 -0
  53. package/dist/{run-BVZsMNwN.mjs → run-BEflQaQ2.mjs} +12 -9
  54. package/dist/{run-CURx7LhK.cjs → run-CiPWWhXt.cjs} +12 -9
  55. package/dist/{runClaude-CL3Kt5ex.cjs → runClaude-BVXsyCHb.cjs} +19 -18
  56. package/dist/{runClaude-6Gi0sYQy.mjs → runClaude-sPkSqHWY.mjs} +16 -15
  57. package/dist/{runCodex-YKyVBkJ3.cjs → runCodex-BAwhdmSA.cjs} +19 -17
  58. package/dist/{runCodex-ClwEgJ7M.mjs → runCodex-C4rHkIyw.mjs} +16 -14
  59. package/dist/runCursor-CD5wC3gA.cjs +578 -0
  60. package/dist/runCursor-DiHLWMs8.mjs +576 -0
  61. package/dist/{runGemini-BPWxVr60.mjs → runGemini-B-93gOqB.mjs} +18 -16
  62. package/dist/{runGemini-Xz2W1spn.cjs → runGemini-Cto-adir.cjs} +21 -19
  63. package/dist/{runOneShot-DjZyCvDI.cjs → runOneShot-BfIzE9W4.cjs} +3 -3
  64. package/dist/{runOneShot-CdCWiiLr.mjs → runOneShot-DGjlYVhR.mjs} +3 -3
  65. package/dist/{serve-B8vaWQA0.cjs → serve-CqL6NWDr.cjs} +7 -7
  66. package/dist/{serve-B48JttQ3.mjs → serve-ttlqF5jn.mjs} +7 -7
  67. package/dist/{session-BZO25zxp.cjs → session-BZhGpQUJ.cjs} +5 -5
  68. package/dist/{session-BXboDn2V.mjs → session-Co0REU9e.mjs} +5 -5
  69. package/dist/{sessionKeyCache-CDmexJ9p.cjs → sessionKeyCache-BwFUGgMs.cjs} +1 -1
  70. package/dist/{sessionKeyCache-B6cGadYL.mjs → sessionKeyCache-pXTjpETo.mjs} +1 -1
  71. package/dist/{sessionList-CgAYZpNj.mjs → sessionList-DaufR-sA.mjs} +2 -2
  72. package/dist/{sessionList-lQ-nqEhc.cjs → sessionList-fG5uAPzU.cjs} +2 -2
  73. package/dist/{sessionSummary-CcORiQSq.cjs → sessionSummary-CjZPt6nr.cjs} +3 -3
  74. package/dist/{sessionSummary-DCWQoaDP.mjs → sessionSummary-Dv6dPABg.mjs} +3 -3
  75. package/dist/setupOfflineReconnection-B6coH9QN.cjs +461 -0
  76. package/dist/setupOfflineReconnection-DW5il97B.mjs +457 -0
  77. package/dist/{spawnHappyCLI-KiazE3kL.cjs → spawnHappyCLI-Cfu7C1uM.cjs} +1 -1
  78. package/dist/{spawnHappyCLI-yBIP_Oqi.mjs → spawnHappyCLI-DhUeycct.mjs} +1 -1
  79. package/dist/{ssh-q5uZhqBf.mjs → ssh-8tPIKk-i.mjs} +9 -6
  80. package/dist/{ssh-yMllSHu5.cjs → ssh-C4YTSHXL.cjs} +9 -5
  81. package/dist/{task-wNX1N2i4.mjs → task-CH-oidFy.mjs} +6 -6
  82. package/dist/{task-_nr7J19j.cjs → task-DFW-PecP.cjs} +6 -6
  83. package/dist/{uninstall-Dxf6_4mQ.mjs → uninstall-CeioRZNI.mjs} +2 -2
  84. package/dist/{uninstall-Buaz7d-X.cjs → uninstall-yTSL3X6Y.cjs} +2 -2
  85. package/dist/{update-CGlIfa8e.cjs → update-Bju28vNP.cjs} +3 -3
  86. package/dist/{update-CnnoX2cV.mjs → update-Derd2hoX.mjs} +3 -3
  87. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var logger = require('./persistence-CBTtC_dm.cjs');
4
+ var logger = require('./persistence-BcQmjobZ.cjs');
5
5
  var z = require('zod');
6
6
  var node_child_process = require('node:child_process');
7
7
  require('node:fs/promises');
@@ -13,8 +13,8 @@ require('tweetnacl');
13
13
  require('fs');
14
14
 
15
15
  async function spawnAndWaitForDaemon() {
16
- const { spawnHappyCLI } = await Promise.resolve().then(function () { return require('./spawnHappyCLI-KiazE3kL.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
17
- const { checkIfDaemonRunningAndCleanupStaleState } = await Promise.resolve().then(function () { return require('./controlClient-B23M-WPp.cjs'); });
16
+ const { spawnHappyCLI } = await Promise.resolve().then(function () { return require('./spawnHappyCLI-Cfu7C1uM.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
17
+ const { checkIfDaemonRunningAndCleanupStaleState } = await Promise.resolve().then(function () { return require('./controlClient-CEz_p1zc.cjs'); });
18
18
  const child = spawnHappyCLI(["daemon", "start-sync"], {
19
19
  detached: true,
20
20
  stdio: "ignore"
@@ -37,7 +37,7 @@ async function spawnAndWaitForDaemon() {
37
37
  if (!args.includes("--version")) ;
38
38
  if (subcommand === "orchestrator-oneshot") {
39
39
  try {
40
- const { runOrchestratorOneShot } = await Promise.resolve().then(function () { return require('./runOneShot-DjZyCvDI.cjs'); });
40
+ const { runOrchestratorOneShot } = await Promise.resolve().then(function () { return require('./runOneShot-BfIzE9W4.cjs'); });
41
41
  const exitCode = await runOrchestratorOneShot(args.slice(1));
42
42
  process.exit(exitCode);
43
43
  } catch (error) {
@@ -50,7 +50,7 @@ async function spawnAndWaitForDaemon() {
50
50
  return;
51
51
  } else if (subcommand === "doctor") {
52
52
  const { killRunawayHappyProcesses } = await Promise.resolve().then(function () { return require('./doctor-C08m5Z9f.cjs'); });
53
- const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-BQGLhrcI.cjs'); });
53
+ const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-BJSuVRUZ.cjs'); });
54
54
  if (args[1] === "clean") {
55
55
  const result = await killRunawayHappyProcesses();
56
56
  console.log(`Cleaned up ${result.killed} runaway processes`);
@@ -63,7 +63,7 @@ async function spawnAndWaitForDaemon() {
63
63
  return;
64
64
  } else if (subcommand === "auth") {
65
65
  try {
66
- const { handleAuthCommand } = await Promise.resolve().then(function () { return require('./auth-DCsIoZLT.cjs'); });
66
+ const { handleAuthCommand } = await Promise.resolve().then(function () { return require('./auth-Dor79zTL.cjs'); });
67
67
  await handleAuthCommand(args.slice(1));
68
68
  } catch (error) {
69
69
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -75,7 +75,7 @@ async function spawnAndWaitForDaemon() {
75
75
  return;
76
76
  } else if (subcommand === "connect") {
77
77
  try {
78
- const { handleConnectCommand } = await Promise.resolve().then(function () { return require('./connect-k9CqDJ-T.cjs'); });
78
+ const { handleConnectCommand } = await Promise.resolve().then(function () { return require('./connect-CJoTliii.cjs'); });
79
79
  await handleConnectCommand(args.slice(1));
80
80
  } catch (error) {
81
81
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -86,11 +86,11 @@ async function spawnAndWaitForDaemon() {
86
86
  }
87
87
  return;
88
88
  } else if (subcommand === "codex") {
89
- const { authAndSetupMachineIfNeeded } = await Promise.resolve().then(function () { return require('./auth-C7ZScWEw.cjs'); });
90
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await Promise.resolve().then(function () { return require('./controlClient-B23M-WPp.cjs'); });
91
- const { spawnHappyCLI } = await Promise.resolve().then(function () { return require('./spawnHappyCLI-KiazE3kL.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
89
+ const { authAndSetupMachineIfNeeded } = await Promise.resolve().then(function () { return require('./auth-G9fZpVJ2.cjs'); });
90
+ const { isDaemonRunningCurrentlyInstalledHappyVersion } = await Promise.resolve().then(function () { return require('./controlClient-CEz_p1zc.cjs'); });
91
+ const { spawnHappyCLI } = await Promise.resolve().then(function () { return require('./spawnHappyCLI-Cfu7C1uM.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
92
92
  try {
93
- const { runCodex } = await Promise.resolve().then(function () { return require('./runCodex-YKyVBkJ3.cjs'); });
93
+ const { runCodex } = await Promise.resolve().then(function () { return require('./runCodex-BAwhdmSA.cjs'); });
94
94
  let startedBy = void 0;
95
95
  for (let i = 1; i < args.length; i++) {
96
96
  if (args[i] === "--started-by") {
@@ -120,10 +120,60 @@ async function spawnAndWaitForDaemon() {
120
120
  process.exit(1);
121
121
  }
122
122
  return;
123
+ } else if (subcommand === "cursor-approval-hook") {
124
+ const { runCursorApprovalHook } = await Promise.resolve().then(function () { return require('./cursorApprovalHook-DRAHfTXU.cjs'); });
125
+ await runCursorApprovalHook();
126
+ return;
127
+ } else if (subcommand === "cursor") {
128
+ const { authAndSetupMachineIfNeeded } = await Promise.resolve().then(function () { return require('./auth-G9fZpVJ2.cjs'); });
129
+ const { isDaemonRunningCurrentlyInstalledHappyVersion } = await Promise.resolve().then(function () { return require('./controlClient-CEz_p1zc.cjs'); });
130
+ const { spawnHappyCLI } = await Promise.resolve().then(function () { return require('./spawnHappyCLI-Cfu7C1uM.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
131
+ try {
132
+ const { runCursor } = await Promise.resolve().then(function () { return require('./runCursor-CD5wC3gA.cjs'); });
133
+ let startedBy = void 0;
134
+ let model = null;
135
+ const promptParts = [];
136
+ for (let i = 1; i < args.length; i++) {
137
+ if (args[i] === "--started-by") {
138
+ startedBy = args[++i];
139
+ } else if (args[i] === "--model") {
140
+ model = args[++i] ?? null;
141
+ } else if (args[i] === "--happy-starting-mode") {
142
+ i++;
143
+ } else {
144
+ promptParts.push(args[i]);
145
+ }
146
+ }
147
+ const { credentials } = await authAndSetupMachineIfNeeded();
148
+ logger.logger.debug("Ensuring Happy background service is running & matches our version...");
149
+ if (!await isDaemonRunningCurrentlyInstalledHappyVersion()) {
150
+ logger.logger.debug("Starting Happy background service...");
151
+ const daemonProcess = spawnHappyCLI(["daemon", "start-sync"], {
152
+ detached: true,
153
+ stdio: "ignore",
154
+ env: process.env
155
+ });
156
+ daemonProcess.unref();
157
+ await new Promise((resolve) => setTimeout(resolve, 200));
158
+ }
159
+ await runCursor({
160
+ credentials,
161
+ startedBy,
162
+ model,
163
+ initialPrompt: promptParts.length > 0 ? promptParts.join(" ") : void 0
164
+ });
165
+ } catch (error) {
166
+ console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
167
+ if (logger.isDebug()) {
168
+ console.error(error);
169
+ }
170
+ process.exit(1);
171
+ }
172
+ return;
123
173
  } else if (subcommand === "gemini") {
124
- const { authAndSetupMachineIfNeeded } = await Promise.resolve().then(function () { return require('./auth-C7ZScWEw.cjs'); });
125
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await Promise.resolve().then(function () { return require('./controlClient-B23M-WPp.cjs'); });
126
- const { spawnHappyCLI } = await Promise.resolve().then(function () { return require('./spawnHappyCLI-KiazE3kL.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
174
+ const { authAndSetupMachineIfNeeded } = await Promise.resolve().then(function () { return require('./auth-G9fZpVJ2.cjs'); });
175
+ const { isDaemonRunningCurrentlyInstalledHappyVersion } = await Promise.resolve().then(function () { return require('./controlClient-CEz_p1zc.cjs'); });
176
+ const { spawnHappyCLI } = await Promise.resolve().then(function () { return require('./spawnHappyCLI-Cfu7C1uM.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
127
177
  const geminiSubcommand = args[1];
128
178
  if (geminiSubcommand === "model" && args[2] === "set" && args[3]) {
129
179
  const modelName = args[3];
@@ -197,9 +247,9 @@ async function spawnAndWaitForDaemon() {
197
247
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
198
248
  const projectId = args[3];
199
249
  try {
200
- const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-CclB3QW9.cjs'); });
201
- const { readCredentials: readCredentials2 } = await Promise.resolve().then(function () { return require('./persistence-CBTtC_dm.cjs'); }).then(function (n) { return n.persistence; });
202
- const { ApiClient } = await Promise.resolve().then(function () { return require('./api-C7FyJfZ1.cjs'); }).then(function (n) { return n.api; });
250
+ const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-CSBlEik9.cjs'); });
251
+ const { readCredentials: readCredentials2 } = await Promise.resolve().then(function () { return require('./persistence-BcQmjobZ.cjs'); }).then(function (n) { return n.persistence; });
252
+ const { ApiClient } = await Promise.resolve().then(function () { return require('./api-CIE4_cWd.cjs'); }).then(function (n) { return n.api; });
203
253
  let userEmail = void 0;
204
254
  try {
205
255
  const credentials = await readCredentials2();
@@ -230,7 +280,7 @@ async function spawnAndWaitForDaemon() {
230
280
  }
231
281
  if (geminiSubcommand === "project" && args[2] === "get") {
232
282
  try {
233
- const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-CclB3QW9.cjs'); });
283
+ const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-CSBlEik9.cjs'); });
234
284
  const config = readGeminiLocalConfig();
235
285
  if (config.googleCloudProject) {
236
286
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -270,7 +320,7 @@ async function spawnAndWaitForDaemon() {
270
320
  process.exit(0);
271
321
  }
272
322
  try {
273
- const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-Xz2W1spn.cjs'); });
323
+ const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-Cto-adir.cjs'); });
274
324
  let startedBy = void 0;
275
325
  for (let i = 1; i < args.length; i++) {
276
326
  if (args[i] === "--started-by") {
@@ -302,7 +352,7 @@ async function spawnAndWaitForDaemon() {
302
352
  return;
303
353
  } else if (subcommand === "update") {
304
354
  try {
305
- const { handleUpdateCommand } = await Promise.resolve().then(function () { return require('./update-CGlIfa8e.cjs'); });
355
+ const { handleUpdateCommand } = await Promise.resolve().then(function () { return require('./update-Bju28vNP.cjs'); });
306
356
  await handleUpdateCommand();
307
357
  } catch (error) {
308
358
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -315,7 +365,7 @@ async function spawnAndWaitForDaemon() {
315
365
  } else if (subcommand === "logout") {
316
366
  console.log(chalk.yellow('Note: "happy logout" is deprecated. Use "happy auth logout" instead.\n'));
317
367
  try {
318
- const { handleAuthCommand } = await Promise.resolve().then(function () { return require('./auth-DCsIoZLT.cjs'); });
368
+ const { handleAuthCommand } = await Promise.resolve().then(function () { return require('./auth-Dor79zTL.cjs'); });
319
369
  await handleAuthCommand(["logout"]);
320
370
  } catch (error) {
321
371
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -338,7 +388,7 @@ async function spawnAndWaitForDaemon() {
338
388
  return;
339
389
  } else if (subcommand === "session") {
340
390
  try {
341
- const { handleSessionCommand } = await Promise.resolve().then(function () { return require('./session-BZO25zxp.cjs'); });
391
+ const { handleSessionCommand } = await Promise.resolve().then(function () { return require('./session-BZhGpQUJ.cjs'); });
342
392
  await handleSessionCommand(args.slice(1));
343
393
  } catch (error) {
344
394
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -350,7 +400,7 @@ async function spawnAndWaitForDaemon() {
350
400
  return;
351
401
  } else if (subcommand === "task") {
352
402
  try {
353
- const { handleTaskCommand } = await Promise.resolve().then(function () { return require('./task-_nr7J19j.cjs'); });
403
+ const { handleTaskCommand } = await Promise.resolve().then(function () { return require('./task-DFW-PecP.cjs'); });
354
404
  await handleTaskCommand(args.slice(1));
355
405
  } catch (error) {
356
406
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -398,7 +448,7 @@ async function spawnAndWaitForDaemon() {
398
448
  return;
399
449
  } else if (subcommand === "evidence") {
400
450
  try {
401
- const { handleEvidenceCommand } = await Promise.resolve().then(function () { return require('./evidence-DQp8QWcv.cjs'); });
451
+ const { handleEvidenceCommand } = await Promise.resolve().then(function () { return require('./evidence-DsQ-h-_W.cjs'); });
402
452
  await handleEvidenceCommand(args.slice(1));
403
453
  } catch (error) {
404
454
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -415,7 +465,7 @@ async function spawnAndWaitForDaemon() {
415
465
  process.exit(1);
416
466
  }
417
467
  try {
418
- const { runMcpServe } = await Promise.resolve().then(function () { return require('./serve-B8vaWQA0.cjs'); });
468
+ const { runMcpServe } = await Promise.resolve().then(function () { return require('./serve-CqL6NWDr.cjs'); });
419
469
  await runMcpServe();
420
470
  } catch (error) {
421
471
  process.stderr.write(`[happy-mcp] fatal: ${error instanceof Error ? error.message : "unknown error"}
@@ -429,7 +479,7 @@ async function spawnAndWaitForDaemon() {
429
479
  console.error(chalk.red("Error:"), 'Not authenticated. Run "happy auth" first.');
430
480
  process.exit(1);
431
481
  }
432
- const { parseSshArgs, runOnDevice, sshDevice, sshPickAndConnect } = await Promise.resolve().then(function () { return require('./ssh-yMllSHu5.cjs'); });
482
+ const { parseSshArgs, runOnDevice, sshDevice, sshPickAndConnect } = await Promise.resolve().then(function () { return require('./ssh-C4YTSHXL.cjs'); });
433
483
  const { target, command, timeoutMs, stream } = parseSshArgs(args.slice(1));
434
484
  try {
435
485
  if (command) {
@@ -449,9 +499,23 @@ async function spawnAndWaitForDaemon() {
449
499
  }
450
500
  } else if (subcommand === "device") {
451
501
  const deviceSubcommand = args[1];
502
+ if (deviceSubcommand === "push") {
503
+ const { pushToDevice } = await Promise.resolve().then(function () { return require('./push-Cnm6JQMD.cjs'); });
504
+ const credentials = await logger.readCredentials();
505
+ if (!credentials) {
506
+ console.error(chalk.red("Error:"), 'Not authenticated. Run "happy auth" first.');
507
+ process.exit(1);
508
+ }
509
+ const [target, localPath, remotePath] = args.slice(2);
510
+ if (!target || !localPath || !remotePath) {
511
+ console.error(chalk.red("Error:"), "Usage: happy device push <device> <local-file> <remote-path>");
512
+ process.exit(1);
513
+ }
514
+ process.exit(await pushToDevice(credentials, target, localPath, remotePath));
515
+ }
452
516
  if (deviceSubcommand === "enroll") {
453
- const { enrollDevice } = await Promise.resolve().then(function () { return require('./enroll-Bo-CNio1.cjs'); });
454
- const { install } = await Promise.resolve().then(function () { return require('./install-D7Ir7ciZ.cjs'); });
517
+ const { enrollDevice } = await Promise.resolve().then(function () { return require('./enroll-C2gunHdt.cjs'); });
518
+ const { install } = await Promise.resolve().then(function () { return require('./install-DlOppA-e.cjs'); });
455
519
  const token = args[2];
456
520
  if (!token) {
457
521
  console.error(chalk.red("Error:"), "Missing enrollment token. Usage: happy device enroll <token>");
@@ -476,16 +540,17 @@ async function spawnAndWaitForDaemon() {
476
540
  ${chalk.bold("happy device")} - Device enrollment
477
541
 
478
542
  ${chalk.bold("Usage:")}
479
- happy device enroll <token> Link this machine to a Happy account and start the daemon
543
+ happy device enroll <token> Link this machine to a Happy account and start the daemon
544
+ happy device push <device> <src> <dest> Copy a file to a device (no tunnel needed)
480
545
  `);
481
546
  process.exit(0);
482
547
  } else if (subcommand === "daemon") {
483
- const { startDaemon } = await Promise.resolve().then(function () { return require('./run-CURx7LhK.cjs'); }).then(function (n) { return n.run; });
484
- const { install } = await Promise.resolve().then(function () { return require('./install-D7Ir7ciZ.cjs'); });
485
- const { uninstall } = await Promise.resolve().then(function () { return require('./uninstall-Buaz7d-X.cjs'); });
486
- const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-BQGLhrcI.cjs'); });
487
- const { getLatestDaemonLog } = await Promise.resolve().then(function () { return require('./persistence-CBTtC_dm.cjs'); }).then(function (n) { return n.logger$1; });
488
- const { listDaemonSessions, stopDaemonSession, stopDaemon } = await Promise.resolve().then(function () { return require('./controlClient-B23M-WPp.cjs'); });
548
+ const { startDaemon } = await Promise.resolve().then(function () { return require('./run-CiPWWhXt.cjs'); }).then(function (n) { return n.run; });
549
+ const { install } = await Promise.resolve().then(function () { return require('./install-DlOppA-e.cjs'); });
550
+ const { uninstall } = await Promise.resolve().then(function () { return require('./uninstall-yTSL3X6Y.cjs'); });
551
+ const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-BJSuVRUZ.cjs'); });
552
+ const { getLatestDaemonLog } = await Promise.resolve().then(function () { return require('./persistence-BcQmjobZ.cjs'); }).then(function (n) { return n.logger$1; });
553
+ const { listDaemonSessions, stopDaemonSession, stopDaemon } = await Promise.resolve().then(function () { return require('./controlClient-CEz_p1zc.cjs'); });
489
554
  const daemonSubcommand = args[1];
490
555
  if (daemonSubcommand === "list") {
491
556
  try {
@@ -690,7 +755,7 @@ ${chalk.gray("\u2500".repeat(60))}
690
755
  ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
691
756
  `);
692
757
  try {
693
- const { claudeCliPath } = await Promise.resolve().then(function () { return require('./claudeLocal-C6BdzhDx.cjs'); }).then(function (n) { return n.claudeLocal$1; });
758
+ const { claudeCliPath } = await Promise.resolve().then(function () { return require('./claudeLocal-f4uBLJaM.cjs'); }).then(function (n) { return n.claudeLocal$1; });
694
759
  const claudeHelp = node_child_process.execFileSync(claudeCliPath, ["--help"], { encoding: "utf8" });
695
760
  console.log(claudeHelp);
696
761
  } catch (e) {
@@ -720,10 +785,10 @@ ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
720
785
  }
721
786
  process.exit(0);
722
787
  }
723
- const { authAndSetupMachineIfNeeded } = await Promise.resolve().then(function () { return require('./auth-C7ZScWEw.cjs'); });
724
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await Promise.resolve().then(function () { return require('./controlClient-B23M-WPp.cjs'); });
725
- const { spawnHappyCLI } = await Promise.resolve().then(function () { return require('./spawnHappyCLI-KiazE3kL.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
726
- const { runClaude } = await Promise.resolve().then(function () { return require('./runClaude-CL3Kt5ex.cjs'); });
788
+ const { authAndSetupMachineIfNeeded } = await Promise.resolve().then(function () { return require('./auth-G9fZpVJ2.cjs'); });
789
+ const { isDaemonRunningCurrentlyInstalledHappyVersion } = await Promise.resolve().then(function () { return require('./controlClient-CEz_p1zc.cjs'); });
790
+ const { spawnHappyCLI } = await Promise.resolve().then(function () { return require('./spawnHappyCLI-Cfu7C1uM.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
791
+ const { runClaude } = await Promise.resolve().then(function () { return require('./runClaude-BVXsyCHb.cjs'); });
727
792
  const {
728
793
  credentials
729
794
  } = await authAndSetupMachineIfNeeded();
@@ -797,7 +862,7 @@ ${chalk.bold("Examples:")}
797
862
  }
798
863
  console.log(chalk.blue("\u{1F4F1} Sending push notification..."));
799
864
  try {
800
- const { ApiClient } = await Promise.resolve().then(function () { return require('./api-C7FyJfZ1.cjs'); }).then(function (n) { return n.api; });
865
+ const { ApiClient } = await Promise.resolve().then(function () { return require('./api-CIE4_cWd.cjs'); }).then(function (n) { return n.api; });
801
866
  const api = await ApiClient.create(credentials);
802
867
  const notificationTitle = title || "Happy AI";
803
868
  api.push().sendToAllDevices(
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-DKfF81pd.mjs';
2
+ import { l as logger, i as isDebug, r as readCredentials, a as readSettings, p as packageJson } from './persistence-D9tMm6bj.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-yBIP_Oqi.mjs').then(function (n) { return n.a; });
15
- const { checkIfDaemonRunningAndCleanupStaleState } = await import('./controlClient-DB5tDU7V.mjs');
14
+ const { spawnHappyCLI } = await import('./spawnHappyCLI-DhUeycct.mjs').then(function (n) { return n.a; });
15
+ const { checkIfDaemonRunningAndCleanupStaleState } = await import('./controlClient-DoS9JqQC.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-CdCWiiLr.mjs');
38
+ const { runOrchestratorOneShot } = await import('./runOneShot-DGjlYVhR.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-CU4JLGQ1.mjs');
51
+ const { runDoctorCommand } = await import('./doctor-DRnft_5-.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-DO9GexAR.mjs');
64
+ const { handleAuthCommand } = await import('./auth-BzYevJo2.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-BXLUKJ5P.mjs');
76
+ const { handleConnectCommand } = await import('./connect-O_nA5BOC.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-DxJ3VvrX.mjs');
88
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-DB5tDU7V.mjs');
89
- const { spawnHappyCLI } = await import('./spawnHappyCLI-yBIP_Oqi.mjs').then(function (n) { return n.a; });
87
+ const { authAndSetupMachineIfNeeded } = await import('./auth-Q2STUNI-.mjs');
88
+ const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-DoS9JqQC.mjs');
89
+ const { spawnHappyCLI } = await import('./spawnHappyCLI-DhUeycct.mjs').then(function (n) { return n.a; });
90
90
  try {
91
- const { runCodex } = await import('./runCodex-ClwEgJ7M.mjs');
91
+ const { runCodex } = await import('./runCodex-C4rHkIyw.mjs');
92
92
  let startedBy = void 0;
93
93
  for (let i = 1; i < args.length; i++) {
94
94
  if (args[i] === "--started-by") {
@@ -118,10 +118,60 @@ async function spawnAndWaitForDaemon() {
118
118
  process.exit(1);
119
119
  }
120
120
  return;
121
+ } else if (subcommand === "cursor-approval-hook") {
122
+ const { runCursorApprovalHook } = await import('./cursorApprovalHook-B0v1kGa7.mjs');
123
+ await runCursorApprovalHook();
124
+ return;
125
+ } else if (subcommand === "cursor") {
126
+ const { authAndSetupMachineIfNeeded } = await import('./auth-Q2STUNI-.mjs');
127
+ const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-DoS9JqQC.mjs');
128
+ const { spawnHappyCLI } = await import('./spawnHappyCLI-DhUeycct.mjs').then(function (n) { return n.a; });
129
+ try {
130
+ const { runCursor } = await import('./runCursor-DiHLWMs8.mjs');
131
+ let startedBy = void 0;
132
+ let model = null;
133
+ const promptParts = [];
134
+ for (let i = 1; i < args.length; i++) {
135
+ if (args[i] === "--started-by") {
136
+ startedBy = args[++i];
137
+ } else if (args[i] === "--model") {
138
+ model = args[++i] ?? null;
139
+ } else if (args[i] === "--happy-starting-mode") {
140
+ i++;
141
+ } else {
142
+ promptParts.push(args[i]);
143
+ }
144
+ }
145
+ const { credentials } = await authAndSetupMachineIfNeeded();
146
+ logger.debug("Ensuring Happy background service is running & matches our version...");
147
+ if (!await isDaemonRunningCurrentlyInstalledHappyVersion()) {
148
+ logger.debug("Starting Happy background service...");
149
+ const daemonProcess = spawnHappyCLI(["daemon", "start-sync"], {
150
+ detached: true,
151
+ stdio: "ignore",
152
+ env: process.env
153
+ });
154
+ daemonProcess.unref();
155
+ await new Promise((resolve) => setTimeout(resolve, 200));
156
+ }
157
+ await runCursor({
158
+ credentials,
159
+ startedBy,
160
+ model,
161
+ initialPrompt: promptParts.length > 0 ? promptParts.join(" ") : void 0
162
+ });
163
+ } catch (error) {
164
+ console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
165
+ if (isDebug()) {
166
+ console.error(error);
167
+ }
168
+ process.exit(1);
169
+ }
170
+ return;
121
171
  } else if (subcommand === "gemini") {
122
- const { authAndSetupMachineIfNeeded } = await import('./auth-DxJ3VvrX.mjs');
123
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-DB5tDU7V.mjs');
124
- const { spawnHappyCLI } = await import('./spawnHappyCLI-yBIP_Oqi.mjs').then(function (n) { return n.a; });
172
+ const { authAndSetupMachineIfNeeded } = await import('./auth-Q2STUNI-.mjs');
173
+ const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-DoS9JqQC.mjs');
174
+ const { spawnHappyCLI } = await import('./spawnHappyCLI-DhUeycct.mjs').then(function (n) { return n.a; });
125
175
  const geminiSubcommand = args[1];
126
176
  if (geminiSubcommand === "model" && args[2] === "set" && args[3]) {
127
177
  const modelName = args[3];
@@ -195,9 +245,9 @@ async function spawnAndWaitForDaemon() {
195
245
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
196
246
  const projectId = args[3];
197
247
  try {
198
- const { saveGoogleCloudProjectToConfig } = await import('./config-DZk-mJ0K.mjs');
199
- const { readCredentials: readCredentials2 } = await import('./persistence-DKfF81pd.mjs').then(function (n) { return n.F; });
200
- const { ApiClient } = await import('./api-D6WL40-U.mjs').then(function (n) { return n.m; });
248
+ const { saveGoogleCloudProjectToConfig } = await import('./config-CHjDs8AS.mjs');
249
+ const { readCredentials: readCredentials2 } = await import('./persistence-D9tMm6bj.mjs').then(function (n) { return n.F; });
250
+ const { ApiClient } = await import('./api-Ew6xr81i.mjs').then(function (n) { return n.m; });
201
251
  let userEmail = void 0;
202
252
  try {
203
253
  const credentials = await readCredentials2();
@@ -228,7 +278,7 @@ async function spawnAndWaitForDaemon() {
228
278
  }
229
279
  if (geminiSubcommand === "project" && args[2] === "get") {
230
280
  try {
231
- const { readGeminiLocalConfig } = await import('./config-DZk-mJ0K.mjs');
281
+ const { readGeminiLocalConfig } = await import('./config-CHjDs8AS.mjs');
232
282
  const config = readGeminiLocalConfig();
233
283
  if (config.googleCloudProject) {
234
284
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -268,7 +318,7 @@ async function spawnAndWaitForDaemon() {
268
318
  process.exit(0);
269
319
  }
270
320
  try {
271
- const { runGemini } = await import('./runGemini-BPWxVr60.mjs');
321
+ const { runGemini } = await import('./runGemini-B-93gOqB.mjs');
272
322
  let startedBy = void 0;
273
323
  for (let i = 1; i < args.length; i++) {
274
324
  if (args[i] === "--started-by") {
@@ -300,7 +350,7 @@ async function spawnAndWaitForDaemon() {
300
350
  return;
301
351
  } else if (subcommand === "update") {
302
352
  try {
303
- const { handleUpdateCommand } = await import('./update-CnnoX2cV.mjs');
353
+ const { handleUpdateCommand } = await import('./update-Derd2hoX.mjs');
304
354
  await handleUpdateCommand();
305
355
  } catch (error) {
306
356
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -313,7 +363,7 @@ async function spawnAndWaitForDaemon() {
313
363
  } else if (subcommand === "logout") {
314
364
  console.log(chalk.yellow('Note: "happy logout" is deprecated. Use "happy auth logout" instead.\n'));
315
365
  try {
316
- const { handleAuthCommand } = await import('./auth-DO9GexAR.mjs');
366
+ const { handleAuthCommand } = await import('./auth-BzYevJo2.mjs');
317
367
  await handleAuthCommand(["logout"]);
318
368
  } catch (error) {
319
369
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -336,7 +386,7 @@ async function spawnAndWaitForDaemon() {
336
386
  return;
337
387
  } else if (subcommand === "session") {
338
388
  try {
339
- const { handleSessionCommand } = await import('./session-BXboDn2V.mjs');
389
+ const { handleSessionCommand } = await import('./session-Co0REU9e.mjs');
340
390
  await handleSessionCommand(args.slice(1));
341
391
  } catch (error) {
342
392
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -348,7 +398,7 @@ async function spawnAndWaitForDaemon() {
348
398
  return;
349
399
  } else if (subcommand === "task") {
350
400
  try {
351
- const { handleTaskCommand } = await import('./task-wNX1N2i4.mjs');
401
+ const { handleTaskCommand } = await import('./task-CH-oidFy.mjs');
352
402
  await handleTaskCommand(args.slice(1));
353
403
  } catch (error) {
354
404
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -396,7 +446,7 @@ async function spawnAndWaitForDaemon() {
396
446
  return;
397
447
  } else if (subcommand === "evidence") {
398
448
  try {
399
- const { handleEvidenceCommand } = await import('./evidence-DTYRAaOZ.mjs');
449
+ const { handleEvidenceCommand } = await import('./evidence-DPutCuUr.mjs');
400
450
  await handleEvidenceCommand(args.slice(1));
401
451
  } catch (error) {
402
452
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -413,7 +463,7 @@ async function spawnAndWaitForDaemon() {
413
463
  process.exit(1);
414
464
  }
415
465
  try {
416
- const { runMcpServe } = await import('./serve-B48JttQ3.mjs');
466
+ const { runMcpServe } = await import('./serve-ttlqF5jn.mjs');
417
467
  await runMcpServe();
418
468
  } catch (error) {
419
469
  process.stderr.write(`[happy-mcp] fatal: ${error instanceof Error ? error.message : "unknown error"}
@@ -427,7 +477,7 @@ async function spawnAndWaitForDaemon() {
427
477
  console.error(chalk.red("Error:"), 'Not authenticated. Run "happy auth" first.');
428
478
  process.exit(1);
429
479
  }
430
- const { parseSshArgs, runOnDevice, sshDevice, sshPickAndConnect } = await import('./ssh-q5uZhqBf.mjs');
480
+ const { parseSshArgs, runOnDevice, sshDevice, sshPickAndConnect } = await import('./ssh-8tPIKk-i.mjs');
431
481
  const { target, command, timeoutMs, stream } = parseSshArgs(args.slice(1));
432
482
  try {
433
483
  if (command) {
@@ -447,9 +497,23 @@ async function spawnAndWaitForDaemon() {
447
497
  }
448
498
  } else if (subcommand === "device") {
449
499
  const deviceSubcommand = args[1];
500
+ if (deviceSubcommand === "push") {
501
+ const { pushToDevice } = await import('./push-Dxsugkes.mjs');
502
+ const credentials = await readCredentials();
503
+ if (!credentials) {
504
+ console.error(chalk.red("Error:"), 'Not authenticated. Run "happy auth" first.');
505
+ process.exit(1);
506
+ }
507
+ const [target, localPath, remotePath] = args.slice(2);
508
+ if (!target || !localPath || !remotePath) {
509
+ console.error(chalk.red("Error:"), "Usage: happy device push <device> <local-file> <remote-path>");
510
+ process.exit(1);
511
+ }
512
+ process.exit(await pushToDevice(credentials, target, localPath, remotePath));
513
+ }
450
514
  if (deviceSubcommand === "enroll") {
451
- const { enrollDevice } = await import('./enroll-B55BQR56.mjs');
452
- const { install } = await import('./install-B1e6rdy7.mjs');
515
+ const { enrollDevice } = await import('./enroll-CysDL6ee.mjs');
516
+ const { install } = await import('./install-BsTA2tZn.mjs');
453
517
  const token = args[2];
454
518
  if (!token) {
455
519
  console.error(chalk.red("Error:"), "Missing enrollment token. Usage: happy device enroll <token>");
@@ -474,16 +538,17 @@ async function spawnAndWaitForDaemon() {
474
538
  ${chalk.bold("happy device")} - Device enrollment
475
539
 
476
540
  ${chalk.bold("Usage:")}
477
- happy device enroll <token> Link this machine to a Happy account and start the daemon
541
+ happy device enroll <token> Link this machine to a Happy account and start the daemon
542
+ happy device push <device> <src> <dest> Copy a file to a device (no tunnel needed)
478
543
  `);
479
544
  process.exit(0);
480
545
  } else if (subcommand === "daemon") {
481
- const { startDaemon } = await import('./run-BVZsMNwN.mjs').then(function (n) { return n.r; });
482
- const { install } = await import('./install-B1e6rdy7.mjs');
483
- const { uninstall } = await import('./uninstall-Dxf6_4mQ.mjs');
484
- const { runDoctorCommand } = await import('./doctor-CU4JLGQ1.mjs');
485
- const { getLatestDaemonLog } = await import('./persistence-DKfF81pd.mjs').then(function (n) { return n.E; });
486
- const { listDaemonSessions, stopDaemonSession, stopDaemon } = await import('./controlClient-DB5tDU7V.mjs');
546
+ const { startDaemon } = await import('./run-BEflQaQ2.mjs').then(function (n) { return n.r; });
547
+ const { install } = await import('./install-BsTA2tZn.mjs');
548
+ const { uninstall } = await import('./uninstall-CeioRZNI.mjs');
549
+ const { runDoctorCommand } = await import('./doctor-DRnft_5-.mjs');
550
+ const { getLatestDaemonLog } = await import('./persistence-D9tMm6bj.mjs').then(function (n) { return n.E; });
551
+ const { listDaemonSessions, stopDaemonSession, stopDaemon } = await import('./controlClient-DoS9JqQC.mjs');
487
552
  const daemonSubcommand = args[1];
488
553
  if (daemonSubcommand === "list") {
489
554
  try {
@@ -688,7 +753,7 @@ ${chalk.gray("\u2500".repeat(60))}
688
753
  ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
689
754
  `);
690
755
  try {
691
- const { claudeCliPath } = await import('./claudeLocal-CWNGpJ0-.mjs').then(function (n) { return n.d; });
756
+ const { claudeCliPath } = await import('./claudeLocal-Db2tDC4X.mjs').then(function (n) { return n.d; });
692
757
  const claudeHelp = execFileSync(claudeCliPath, ["--help"], { encoding: "utf8" });
693
758
  console.log(claudeHelp);
694
759
  } catch (e) {
@@ -718,10 +783,10 @@ ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
718
783
  }
719
784
  process.exit(0);
720
785
  }
721
- const { authAndSetupMachineIfNeeded } = await import('./auth-DxJ3VvrX.mjs');
722
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-DB5tDU7V.mjs');
723
- const { spawnHappyCLI } = await import('./spawnHappyCLI-yBIP_Oqi.mjs').then(function (n) { return n.a; });
724
- const { runClaude } = await import('./runClaude-6Gi0sYQy.mjs');
786
+ const { authAndSetupMachineIfNeeded } = await import('./auth-Q2STUNI-.mjs');
787
+ const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-DoS9JqQC.mjs');
788
+ const { spawnHappyCLI } = await import('./spawnHappyCLI-DhUeycct.mjs').then(function (n) { return n.a; });
789
+ const { runClaude } = await import('./runClaude-sPkSqHWY.mjs');
725
790
  const {
726
791
  credentials
727
792
  } = await authAndSetupMachineIfNeeded();
@@ -795,7 +860,7 @@ ${chalk.bold("Examples:")}
795
860
  }
796
861
  console.log(chalk.blue("\u{1F4F1} Sending push notification..."));
797
862
  try {
798
- const { ApiClient } = await import('./api-D6WL40-U.mjs').then(function (n) { return n.m; });
863
+ const { ApiClient } = await import('./api-Ew6xr81i.mjs').then(function (n) { return n.m; });
799
864
  const api = await ApiClient.create(credentials);
800
865
  const notificationTitle = title || "Happy AI";
801
866
  api.push().sendToAllDevices(
@@ -1,5 +1,5 @@
1
- import { l as logger, r as readCredentials } from './persistence-DKfF81pd.mjs';
2
- import { i as install$2 } from './install-CgUPGIoF.mjs';
1
+ import { l as logger, r as readCredentials } from './persistence-D9tMm6bj.mjs';
2
+ import { i as install$2 } from './install-DBg0xQ3g.mjs';
3
3
  import { existsSync, mkdirSync, writeFileSync } from 'fs';
4
4
  import { execSync } from 'child_process';
5
5
  import path from 'path';
@@ -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-DKfF81pd.mjs';
5
+ import { l as logger } from './persistence-D9tMm6bj.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-CBTtC_dm.cjs');
4
- var install$2 = require('./install-DSDufaPd.cjs');
3
+ var logger = require('./persistence-BcQmjobZ.cjs');
4
+ var install$2 = require('./install-Tyhs6rUp.cjs');
5
5
  var fs = require('fs');
6
6
  var child_process = require('child_process');
7
7
  var path = require('path');