@zonease/happy 0.6.39 → 0.6.40

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 (76) hide show
  1. package/bin/happy.mjs +10 -0
  2. package/dist/{api-CwOCQeLH.cjs → api-C7FyJfZ1.cjs} +87 -7
  3. package/dist/{api-CIZKyfSn.mjs → api-D6WL40-U.mjs} +86 -6
  4. package/dist/{auth-BIleVCw0.cjs → auth-C7ZScWEw.cjs} +2 -2
  5. package/dist/{auth-Cas9DR3b.cjs → auth-DCsIoZLT.cjs} +4 -4
  6. package/dist/{auth-0VnlXT9f.mjs → auth-DO9GexAR.mjs} +4 -4
  7. package/dist/{auth-BE8dD20T.mjs → auth-DxJ3VvrX.mjs} +2 -2
  8. package/dist/{browser-Dll5hxOV.mjs → browser-AoVGRX7y.mjs} +1 -1
  9. package/dist/{browser-Cc08m7of.cjs → browser-DzgO4oaD.cjs} +1 -1
  10. package/dist/{claudeLocal-WkgLbl1a.cjs → claudeLocal-C6BdzhDx.cjs} +1 -1
  11. package/dist/{claudeLocal-CPT3zcIU.mjs → claudeLocal-CWNGpJ0-.mjs} +1 -1
  12. package/dist/{config-Draa-5XC.cjs → config-CclB3QW9.cjs} +1 -1
  13. package/dist/{config-rTT4qTU5.mjs → config-DZk-mJ0K.mjs} +1 -1
  14. package/dist/{connect-BfC1tYP_.mjs → connect-BXLUKJ5P.mjs} +4 -4
  15. package/dist/{connect-CJZ73syK.cjs → connect-k9CqDJ-T.cjs} +4 -4
  16. package/dist/{controlClient-DZMIsKsT.cjs → controlClient-B23M-WPp.cjs} +10 -1
  17. package/dist/{controlClient-CM_QcJnB.mjs → controlClient-DB5tDU7V.mjs} +10 -2
  18. package/dist/deviceKeys-BTdo34Uz.mjs +175 -0
  19. package/dist/deviceKeys-C540DcXl.cjs +182 -0
  20. package/dist/{doctor-Cya9YSA0.cjs → doctor-BQGLhrcI.cjs} +2 -2
  21. package/dist/{doctor-DZYB6IVc.mjs → doctor-CU4JLGQ1.mjs} +2 -2
  22. package/dist/{downloadImage-DfSFLb-h.mjs → downloadImage-DZXI3mXL.mjs} +3 -3
  23. package/dist/{downloadImage-MQMrUUxS.cjs → downloadImage-cQ1Z7hkC.cjs} +5 -5
  24. package/dist/{enroll-C52x8oly.mjs → enroll-B55BQR56.mjs} +3 -3
  25. package/dist/{enroll-BxlbVftP.cjs → enroll-Bo-CNio1.cjs} +3 -3
  26. package/dist/{evidence-CjWBG5rX.cjs → evidence-DQp8QWcv.cjs} +1 -1
  27. package/dist/{evidence-Ccd9iYcj.mjs → evidence-DTYRAaOZ.mjs} +1 -1
  28. package/dist/{formatImageMessage-DbyG8c2j.cjs → formatImageMessage-CixDYY6G.cjs} +1 -1
  29. package/dist/{formatImageMessage-B4lSxlk2.mjs → formatImageMessage-DbKSSjMx.mjs} +1 -1
  30. package/dist/index.cjs +42 -42
  31. package/dist/index.mjs +42 -42
  32. package/dist/{install-DAeCn8ae.mjs → install-B1e6rdy7.mjs} +2 -2
  33. package/dist/{install-oRAjVLjP.mjs → install-CgUPGIoF.mjs} +1 -1
  34. package/dist/{install-C_cp8b2-.cjs → install-D7Ir7ciZ.cjs} +2 -2
  35. package/dist/{install-BokHRgFW.cjs → install-DSDufaPd.cjs} +1 -1
  36. package/dist/lib.cjs +3 -3
  37. package/dist/lib.d.cts +77 -0
  38. package/dist/lib.d.mts +77 -0
  39. package/dist/lib.mjs +3 -3
  40. package/dist/{loadableToolOutput-Cuygmd4K.mjs → loadableToolOutput-Bfei9wPq.mjs} +3 -3
  41. package/dist/{loadableToolOutput-DDCJjywt.cjs → loadableToolOutput-CbLGtvST.cjs} +3 -3
  42. package/dist/{persistence-JLUn_Nou.cjs → persistence-CBTtC_dm.cjs} +1 -1
  43. package/dist/{persistence-BFjvtUad.mjs → persistence-DKfF81pd.mjs} +2 -2
  44. package/dist/{run-DBZqN6Kn.mjs → run-BVZsMNwN.mjs} +45 -9
  45. package/dist/{run-BDn2aE3Q.cjs → run-CURx7LhK.cjs} +45 -9
  46. package/dist/{runClaude-DNHvERX0.mjs → runClaude-6Gi0sYQy.mjs} +14 -14
  47. package/dist/{runClaude-uaKxPZPm.cjs → runClaude-CL3Kt5ex.cjs} +15 -15
  48. package/dist/{runCodex-C-RTM0wA.mjs → runCodex-ClwEgJ7M.mjs} +13 -13
  49. package/dist/{runCodex-82UrZLme.cjs → runCodex-YKyVBkJ3.cjs} +13 -13
  50. package/dist/{runGemini-Bm6-4Xm2.mjs → runGemini-BPWxVr60.mjs} +15 -15
  51. package/dist/{runGemini-CXMr4Jwb.cjs → runGemini-Xz2W1spn.cjs} +15 -15
  52. package/dist/{runOneShot-ioARRHrx.mjs → runOneShot-CdCWiiLr.mjs} +2 -2
  53. package/dist/{runOneShot-1B6RMYT7.cjs → runOneShot-DjZyCvDI.cjs} +2 -2
  54. package/dist/{serve-CwibwU6N.mjs → serve-B48JttQ3.mjs} +6 -6
  55. package/dist/{serve-BtdAhkIE.cjs → serve-B8vaWQA0.cjs} +6 -6
  56. package/dist/{session-2sU4Bu1R.mjs → session-BXboDn2V.mjs} +5 -5
  57. package/dist/{session-D--F87zL.cjs → session-BZO25zxp.cjs} +5 -5
  58. package/dist/{sessionKeyCache-D2BwO91C.mjs → sessionKeyCache-B6cGadYL.mjs} +1 -1
  59. package/dist/{sessionKeyCache-4Tp8pJ3N.cjs → sessionKeyCache-CDmexJ9p.cjs} +1 -1
  60. package/dist/{sessionList-BCSw3qYt.mjs → sessionList-CgAYZpNj.mjs} +2 -2
  61. package/dist/{sessionList-ICJsjNtJ.cjs → sessionList-lQ-nqEhc.cjs} +2 -2
  62. package/dist/{sessionSummary-Bkz52BPh.cjs → sessionSummary-CcORiQSq.cjs} +3 -3
  63. package/dist/{sessionSummary-lHGBWQSb.mjs → sessionSummary-DCWQoaDP.mjs} +3 -3
  64. package/dist/{spawnHappyCLI-D_V-AAoP.cjs → spawnHappyCLI-KiazE3kL.cjs} +1 -1
  65. package/dist/{spawnHappyCLI-CoORX0YW.mjs → spawnHappyCLI-yBIP_Oqi.mjs} +1 -1
  66. package/dist/{ssh-DL_AkRAD.mjs → ssh-q5uZhqBf.mjs} +134 -103
  67. package/dist/{ssh-BTOlhhxi.cjs → ssh-yMllSHu5.cjs} +138 -106
  68. package/dist/{task-CSpaC9HX.cjs → task-_nr7J19j.cjs} +6 -6
  69. package/dist/{task-CQzrHRZe.mjs → task-wNX1N2i4.mjs} +6 -6
  70. package/dist/{uninstall-BiKyRAb1.cjs → uninstall-Buaz7d-X.cjs} +2 -2
  71. package/dist/{uninstall-nFMFGUVM.mjs → uninstall-Dxf6_4mQ.mjs} +2 -2
  72. package/dist/{update-Dw8pgsAT.cjs → update-CGlIfa8e.cjs} +3 -3
  73. package/dist/{update-BcqRHXf2.mjs → update-CnnoX2cV.mjs} +3 -3
  74. package/package.json +1 -1
  75. package/dist/deviceExec-CU1R9CRb.cjs +0 -84
  76. package/dist/deviceExec-D93AOVV4.mjs +0 -81
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-JLUn_Nou.cjs');
4
+ var logger = require('./persistence-CBTtC_dm.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-D_V-AAoP.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
17
- const { checkIfDaemonRunningAndCleanupStaleState } = await Promise.resolve().then(function () { return require('./controlClient-DZMIsKsT.cjs'); });
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'); });
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-1B6RMYT7.cjs'); });
40
+ const { runOrchestratorOneShot } = await Promise.resolve().then(function () { return require('./runOneShot-DjZyCvDI.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-Cya9YSA0.cjs'); });
53
+ const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-BQGLhrcI.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-Cas9DR3b.cjs'); });
66
+ const { handleAuthCommand } = await Promise.resolve().then(function () { return require('./auth-DCsIoZLT.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-CJZ73syK.cjs'); });
78
+ const { handleConnectCommand } = await Promise.resolve().then(function () { return require('./connect-k9CqDJ-T.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-BIleVCw0.cjs'); });
90
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await Promise.resolve().then(function () { return require('./controlClient-DZMIsKsT.cjs'); });
91
- const { spawnHappyCLI } = await Promise.resolve().then(function () { return require('./spawnHappyCLI-D_V-AAoP.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
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; });
92
92
  try {
93
- const { runCodex } = await Promise.resolve().then(function () { return require('./runCodex-82UrZLme.cjs'); });
93
+ const { runCodex } = await Promise.resolve().then(function () { return require('./runCodex-YKyVBkJ3.cjs'); });
94
94
  let startedBy = void 0;
95
95
  for (let i = 1; i < args.length; i++) {
96
96
  if (args[i] === "--started-by") {
@@ -121,9 +121,9 @@ async function spawnAndWaitForDaemon() {
121
121
  }
122
122
  return;
123
123
  } else if (subcommand === "gemini") {
124
- const { authAndSetupMachineIfNeeded } = await Promise.resolve().then(function () { return require('./auth-BIleVCw0.cjs'); });
125
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await Promise.resolve().then(function () { return require('./controlClient-DZMIsKsT.cjs'); });
126
- const { spawnHappyCLI } = await Promise.resolve().then(function () { return require('./spawnHappyCLI-D_V-AAoP.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
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; });
127
127
  const geminiSubcommand = args[1];
128
128
  if (geminiSubcommand === "model" && args[2] === "set" && args[3]) {
129
129
  const modelName = args[3];
@@ -197,9 +197,9 @@ async function spawnAndWaitForDaemon() {
197
197
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
198
198
  const projectId = args[3];
199
199
  try {
200
- const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-Draa-5XC.cjs'); });
201
- const { readCredentials: readCredentials2 } = await Promise.resolve().then(function () { return require('./persistence-JLUn_Nou.cjs'); }).then(function (n) { return n.persistence; });
202
- const { ApiClient } = await Promise.resolve().then(function () { return require('./api-CwOCQeLH.cjs'); }).then(function (n) { return n.api; });
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; });
203
203
  let userEmail = void 0;
204
204
  try {
205
205
  const credentials = await readCredentials2();
@@ -230,7 +230,7 @@ async function spawnAndWaitForDaemon() {
230
230
  }
231
231
  if (geminiSubcommand === "project" && args[2] === "get") {
232
232
  try {
233
- const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-Draa-5XC.cjs'); });
233
+ const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-CclB3QW9.cjs'); });
234
234
  const config = readGeminiLocalConfig();
235
235
  if (config.googleCloudProject) {
236
236
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -270,7 +270,7 @@ async function spawnAndWaitForDaemon() {
270
270
  process.exit(0);
271
271
  }
272
272
  try {
273
- const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-CXMr4Jwb.cjs'); });
273
+ const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-Xz2W1spn.cjs'); });
274
274
  let startedBy = void 0;
275
275
  for (let i = 1; i < args.length; i++) {
276
276
  if (args[i] === "--started-by") {
@@ -302,7 +302,7 @@ async function spawnAndWaitForDaemon() {
302
302
  return;
303
303
  } else if (subcommand === "update") {
304
304
  try {
305
- const { handleUpdateCommand } = await Promise.resolve().then(function () { return require('./update-Dw8pgsAT.cjs'); });
305
+ const { handleUpdateCommand } = await Promise.resolve().then(function () { return require('./update-CGlIfa8e.cjs'); });
306
306
  await handleUpdateCommand();
307
307
  } catch (error) {
308
308
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -315,7 +315,7 @@ async function spawnAndWaitForDaemon() {
315
315
  } else if (subcommand === "logout") {
316
316
  console.log(chalk.yellow('Note: "happy logout" is deprecated. Use "happy auth logout" instead.\n'));
317
317
  try {
318
- const { handleAuthCommand } = await Promise.resolve().then(function () { return require('./auth-Cas9DR3b.cjs'); });
318
+ const { handleAuthCommand } = await Promise.resolve().then(function () { return require('./auth-DCsIoZLT.cjs'); });
319
319
  await handleAuthCommand(["logout"]);
320
320
  } catch (error) {
321
321
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -338,7 +338,7 @@ async function spawnAndWaitForDaemon() {
338
338
  return;
339
339
  } else if (subcommand === "session") {
340
340
  try {
341
- const { handleSessionCommand } = await Promise.resolve().then(function () { return require('./session-D--F87zL.cjs'); });
341
+ const { handleSessionCommand } = await Promise.resolve().then(function () { return require('./session-BZO25zxp.cjs'); });
342
342
  await handleSessionCommand(args.slice(1));
343
343
  } catch (error) {
344
344
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -350,7 +350,7 @@ async function spawnAndWaitForDaemon() {
350
350
  return;
351
351
  } else if (subcommand === "task") {
352
352
  try {
353
- const { handleTaskCommand } = await Promise.resolve().then(function () { return require('./task-CSpaC9HX.cjs'); });
353
+ const { handleTaskCommand } = await Promise.resolve().then(function () { return require('./task-_nr7J19j.cjs'); });
354
354
  await handleTaskCommand(args.slice(1));
355
355
  } catch (error) {
356
356
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -398,7 +398,7 @@ async function spawnAndWaitForDaemon() {
398
398
  return;
399
399
  } else if (subcommand === "evidence") {
400
400
  try {
401
- const { handleEvidenceCommand } = await Promise.resolve().then(function () { return require('./evidence-CjWBG5rX.cjs'); });
401
+ const { handleEvidenceCommand } = await Promise.resolve().then(function () { return require('./evidence-DQp8QWcv.cjs'); });
402
402
  await handleEvidenceCommand(args.slice(1));
403
403
  } catch (error) {
404
404
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -415,7 +415,7 @@ async function spawnAndWaitForDaemon() {
415
415
  process.exit(1);
416
416
  }
417
417
  try {
418
- const { runMcpServe } = await Promise.resolve().then(function () { return require('./serve-BtdAhkIE.cjs'); });
418
+ const { runMcpServe } = await Promise.resolve().then(function () { return require('./serve-B8vaWQA0.cjs'); });
419
419
  await runMcpServe();
420
420
  } catch (error) {
421
421
  process.stderr.write(`[happy-mcp] fatal: ${error instanceof Error ? error.message : "unknown error"}
@@ -429,15 +429,15 @@ async function spawnAndWaitForDaemon() {
429
429
  console.error(chalk.red("Error:"), 'Not authenticated. Run "happy auth" first.');
430
430
  process.exit(1);
431
431
  }
432
- const { parseSshArgs, runOnDevice, sshDevice, sshPickAndConnect } = await Promise.resolve().then(function () { return require('./ssh-BTOlhhxi.cjs'); });
433
- const { target, command, timeoutMs } = parseSshArgs(args.slice(1));
432
+ const { parseSshArgs, runOnDevice, sshDevice, sshPickAndConnect } = await Promise.resolve().then(function () { return require('./ssh-yMllSHu5.cjs'); });
433
+ const { target, command, timeoutMs, stream } = parseSshArgs(args.slice(1));
434
434
  try {
435
435
  if (command) {
436
436
  if (!target) {
437
437
  console.error(chalk.red("Error:"), "Which device? Usage: happy ssh <device> -- <command>");
438
438
  process.exit(1);
439
439
  }
440
- process.exit(await runOnDevice(credentials, target, command, { timeoutMs }));
440
+ process.exit(await runOnDevice(credentials, target, command, { timeoutMs, stream }));
441
441
  }
442
442
  if (!target) {
443
443
  process.exit(await sshPickAndConnect(credentials));
@@ -450,8 +450,8 @@ async function spawnAndWaitForDaemon() {
450
450
  } else if (subcommand === "device") {
451
451
  const deviceSubcommand = args[1];
452
452
  if (deviceSubcommand === "enroll") {
453
- const { enrollDevice } = await Promise.resolve().then(function () { return require('./enroll-BxlbVftP.cjs'); });
454
- const { install } = await Promise.resolve().then(function () { return require('./install-C_cp8b2-.cjs'); });
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'); });
455
455
  const token = args[2];
456
456
  if (!token) {
457
457
  console.error(chalk.red("Error:"), "Missing enrollment token. Usage: happy device enroll <token>");
@@ -480,12 +480,12 @@ ${chalk.bold("Usage:")}
480
480
  `);
481
481
  process.exit(0);
482
482
  } else if (subcommand === "daemon") {
483
- const { startDaemon } = await Promise.resolve().then(function () { return require('./run-BDn2aE3Q.cjs'); }).then(function (n) { return n.run; });
484
- const { install } = await Promise.resolve().then(function () { return require('./install-C_cp8b2-.cjs'); });
485
- const { uninstall } = await Promise.resolve().then(function () { return require('./uninstall-BiKyRAb1.cjs'); });
486
- const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-Cya9YSA0.cjs'); });
487
- const { getLatestDaemonLog } = await Promise.resolve().then(function () { return require('./persistence-JLUn_Nou.cjs'); }).then(function (n) { return n.logger$1; });
488
- const { listDaemonSessions, stopDaemonSession, stopDaemon } = await Promise.resolve().then(function () { return require('./controlClient-DZMIsKsT.cjs'); });
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'); });
489
489
  const daemonSubcommand = args[1];
490
490
  if (daemonSubcommand === "list") {
491
491
  try {
@@ -690,7 +690,7 @@ ${chalk.gray("\u2500".repeat(60))}
690
690
  ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
691
691
  `);
692
692
  try {
693
- const { claudeCliPath } = await Promise.resolve().then(function () { return require('./claudeLocal-WkgLbl1a.cjs'); }).then(function (n) { return n.claudeLocal$1; });
693
+ const { claudeCliPath } = await Promise.resolve().then(function () { return require('./claudeLocal-C6BdzhDx.cjs'); }).then(function (n) { return n.claudeLocal$1; });
694
694
  const claudeHelp = node_child_process.execFileSync(claudeCliPath, ["--help"], { encoding: "utf8" });
695
695
  console.log(claudeHelp);
696
696
  } catch (e) {
@@ -720,10 +720,10 @@ ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
720
720
  }
721
721
  process.exit(0);
722
722
  }
723
- const { authAndSetupMachineIfNeeded } = await Promise.resolve().then(function () { return require('./auth-BIleVCw0.cjs'); });
724
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await Promise.resolve().then(function () { return require('./controlClient-DZMIsKsT.cjs'); });
725
- const { spawnHappyCLI } = await Promise.resolve().then(function () { return require('./spawnHappyCLI-D_V-AAoP.cjs'); }).then(function (n) { return n.spawnHappyCLI$1; });
726
- const { runClaude } = await Promise.resolve().then(function () { return require('./runClaude-uaKxPZPm.cjs'); });
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'); });
727
727
  const {
728
728
  credentials
729
729
  } = await authAndSetupMachineIfNeeded();
@@ -797,7 +797,7 @@ ${chalk.bold("Examples:")}
797
797
  }
798
798
  console.log(chalk.blue("\u{1F4F1} Sending push notification..."));
799
799
  try {
800
- const { ApiClient } = await Promise.resolve().then(function () { return require('./api-CwOCQeLH.cjs'); }).then(function (n) { return n.api; });
800
+ const { ApiClient } = await Promise.resolve().then(function () { return require('./api-C7FyJfZ1.cjs'); }).then(function (n) { return n.api; });
801
801
  const api = await ApiClient.create(credentials);
802
802
  const notificationTitle = title || "Happy AI";
803
803
  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-BFjvtUad.mjs';
2
+ import { l as logger, i as isDebug, r as readCredentials, a as readSettings, p as packageJson } from './persistence-DKfF81pd.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-CoORX0YW.mjs').then(function (n) { return n.a; });
15
- const { checkIfDaemonRunningAndCleanupStaleState } = await import('./controlClient-CM_QcJnB.mjs');
14
+ const { spawnHappyCLI } = await import('./spawnHappyCLI-yBIP_Oqi.mjs').then(function (n) { return n.a; });
15
+ const { checkIfDaemonRunningAndCleanupStaleState } = await import('./controlClient-DB5tDU7V.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-ioARRHrx.mjs');
38
+ const { runOrchestratorOneShot } = await import('./runOneShot-CdCWiiLr.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-DZYB6IVc.mjs');
51
+ const { runDoctorCommand } = await import('./doctor-CU4JLGQ1.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-0VnlXT9f.mjs');
64
+ const { handleAuthCommand } = await import('./auth-DO9GexAR.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-BfC1tYP_.mjs');
76
+ const { handleConnectCommand } = await import('./connect-BXLUKJ5P.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-BE8dD20T.mjs');
88
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-CM_QcJnB.mjs');
89
- const { spawnHappyCLI } = await import('./spawnHappyCLI-CoORX0YW.mjs').then(function (n) { return n.a; });
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; });
90
90
  try {
91
- const { runCodex } = await import('./runCodex-C-RTM0wA.mjs');
91
+ const { runCodex } = await import('./runCodex-ClwEgJ7M.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,9 +119,9 @@ async function spawnAndWaitForDaemon() {
119
119
  }
120
120
  return;
121
121
  } else if (subcommand === "gemini") {
122
- const { authAndSetupMachineIfNeeded } = await import('./auth-BE8dD20T.mjs');
123
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-CM_QcJnB.mjs');
124
- const { spawnHappyCLI } = await import('./spawnHappyCLI-CoORX0YW.mjs').then(function (n) { return n.a; });
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; });
125
125
  const geminiSubcommand = args[1];
126
126
  if (geminiSubcommand === "model" && args[2] === "set" && args[3]) {
127
127
  const modelName = args[3];
@@ -195,9 +195,9 @@ async function spawnAndWaitForDaemon() {
195
195
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
196
196
  const projectId = args[3];
197
197
  try {
198
- const { saveGoogleCloudProjectToConfig } = await import('./config-rTT4qTU5.mjs');
199
- const { readCredentials: readCredentials2 } = await import('./persistence-BFjvtUad.mjs').then(function (n) { return n.F; });
200
- const { ApiClient } = await import('./api-CIZKyfSn.mjs').then(function (n) { return n.m; });
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; });
201
201
  let userEmail = void 0;
202
202
  try {
203
203
  const credentials = await readCredentials2();
@@ -228,7 +228,7 @@ async function spawnAndWaitForDaemon() {
228
228
  }
229
229
  if (geminiSubcommand === "project" && args[2] === "get") {
230
230
  try {
231
- const { readGeminiLocalConfig } = await import('./config-rTT4qTU5.mjs');
231
+ const { readGeminiLocalConfig } = await import('./config-DZk-mJ0K.mjs');
232
232
  const config = readGeminiLocalConfig();
233
233
  if (config.googleCloudProject) {
234
234
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -268,7 +268,7 @@ async function spawnAndWaitForDaemon() {
268
268
  process.exit(0);
269
269
  }
270
270
  try {
271
- const { runGemini } = await import('./runGemini-Bm6-4Xm2.mjs');
271
+ const { runGemini } = await import('./runGemini-BPWxVr60.mjs');
272
272
  let startedBy = void 0;
273
273
  for (let i = 1; i < args.length; i++) {
274
274
  if (args[i] === "--started-by") {
@@ -300,7 +300,7 @@ async function spawnAndWaitForDaemon() {
300
300
  return;
301
301
  } else if (subcommand === "update") {
302
302
  try {
303
- const { handleUpdateCommand } = await import('./update-BcqRHXf2.mjs');
303
+ const { handleUpdateCommand } = await import('./update-CnnoX2cV.mjs');
304
304
  await handleUpdateCommand();
305
305
  } catch (error) {
306
306
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -313,7 +313,7 @@ async function spawnAndWaitForDaemon() {
313
313
  } else if (subcommand === "logout") {
314
314
  console.log(chalk.yellow('Note: "happy logout" is deprecated. Use "happy auth logout" instead.\n'));
315
315
  try {
316
- const { handleAuthCommand } = await import('./auth-0VnlXT9f.mjs');
316
+ const { handleAuthCommand } = await import('./auth-DO9GexAR.mjs');
317
317
  await handleAuthCommand(["logout"]);
318
318
  } catch (error) {
319
319
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -336,7 +336,7 @@ async function spawnAndWaitForDaemon() {
336
336
  return;
337
337
  } else if (subcommand === "session") {
338
338
  try {
339
- const { handleSessionCommand } = await import('./session-2sU4Bu1R.mjs');
339
+ const { handleSessionCommand } = await import('./session-BXboDn2V.mjs');
340
340
  await handleSessionCommand(args.slice(1));
341
341
  } catch (error) {
342
342
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -348,7 +348,7 @@ async function spawnAndWaitForDaemon() {
348
348
  return;
349
349
  } else if (subcommand === "task") {
350
350
  try {
351
- const { handleTaskCommand } = await import('./task-CQzrHRZe.mjs');
351
+ const { handleTaskCommand } = await import('./task-wNX1N2i4.mjs');
352
352
  await handleTaskCommand(args.slice(1));
353
353
  } catch (error) {
354
354
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -396,7 +396,7 @@ async function spawnAndWaitForDaemon() {
396
396
  return;
397
397
  } else if (subcommand === "evidence") {
398
398
  try {
399
- const { handleEvidenceCommand } = await import('./evidence-Ccd9iYcj.mjs');
399
+ const { handleEvidenceCommand } = await import('./evidence-DTYRAaOZ.mjs');
400
400
  await handleEvidenceCommand(args.slice(1));
401
401
  } catch (error) {
402
402
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -413,7 +413,7 @@ async function spawnAndWaitForDaemon() {
413
413
  process.exit(1);
414
414
  }
415
415
  try {
416
- const { runMcpServe } = await import('./serve-CwibwU6N.mjs');
416
+ const { runMcpServe } = await import('./serve-B48JttQ3.mjs');
417
417
  await runMcpServe();
418
418
  } catch (error) {
419
419
  process.stderr.write(`[happy-mcp] fatal: ${error instanceof Error ? error.message : "unknown error"}
@@ -427,15 +427,15 @@ async function spawnAndWaitForDaemon() {
427
427
  console.error(chalk.red("Error:"), 'Not authenticated. Run "happy auth" first.');
428
428
  process.exit(1);
429
429
  }
430
- const { parseSshArgs, runOnDevice, sshDevice, sshPickAndConnect } = await import('./ssh-DL_AkRAD.mjs');
431
- const { target, command, timeoutMs } = parseSshArgs(args.slice(1));
430
+ const { parseSshArgs, runOnDevice, sshDevice, sshPickAndConnect } = await import('./ssh-q5uZhqBf.mjs');
431
+ const { target, command, timeoutMs, stream } = parseSshArgs(args.slice(1));
432
432
  try {
433
433
  if (command) {
434
434
  if (!target) {
435
435
  console.error(chalk.red("Error:"), "Which device? Usage: happy ssh <device> -- <command>");
436
436
  process.exit(1);
437
437
  }
438
- process.exit(await runOnDevice(credentials, target, command, { timeoutMs }));
438
+ process.exit(await runOnDevice(credentials, target, command, { timeoutMs, stream }));
439
439
  }
440
440
  if (!target) {
441
441
  process.exit(await sshPickAndConnect(credentials));
@@ -448,8 +448,8 @@ async function spawnAndWaitForDaemon() {
448
448
  } else if (subcommand === "device") {
449
449
  const deviceSubcommand = args[1];
450
450
  if (deviceSubcommand === "enroll") {
451
- const { enrollDevice } = await import('./enroll-C52x8oly.mjs');
452
- const { install } = await import('./install-DAeCn8ae.mjs');
451
+ const { enrollDevice } = await import('./enroll-B55BQR56.mjs');
452
+ const { install } = await import('./install-B1e6rdy7.mjs');
453
453
  const token = args[2];
454
454
  if (!token) {
455
455
  console.error(chalk.red("Error:"), "Missing enrollment token. Usage: happy device enroll <token>");
@@ -478,12 +478,12 @@ ${chalk.bold("Usage:")}
478
478
  `);
479
479
  process.exit(0);
480
480
  } else if (subcommand === "daemon") {
481
- const { startDaemon } = await import('./run-DBZqN6Kn.mjs').then(function (n) { return n.r; });
482
- const { install } = await import('./install-DAeCn8ae.mjs');
483
- const { uninstall } = await import('./uninstall-nFMFGUVM.mjs');
484
- const { runDoctorCommand } = await import('./doctor-DZYB6IVc.mjs');
485
- const { getLatestDaemonLog } = await import('./persistence-BFjvtUad.mjs').then(function (n) { return n.E; });
486
- const { listDaemonSessions, stopDaemonSession, stopDaemon } = await import('./controlClient-CM_QcJnB.mjs');
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');
487
487
  const daemonSubcommand = args[1];
488
488
  if (daemonSubcommand === "list") {
489
489
  try {
@@ -688,7 +688,7 @@ ${chalk.gray("\u2500".repeat(60))}
688
688
  ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
689
689
  `);
690
690
  try {
691
- const { claudeCliPath } = await import('./claudeLocal-CPT3zcIU.mjs').then(function (n) { return n.d; });
691
+ const { claudeCliPath } = await import('./claudeLocal-CWNGpJ0-.mjs').then(function (n) { return n.d; });
692
692
  const claudeHelp = execFileSync(claudeCliPath, ["--help"], { encoding: "utf8" });
693
693
  console.log(claudeHelp);
694
694
  } catch (e) {
@@ -718,10 +718,10 @@ ${chalk.bold.cyan("Claude Code Options (from `claude --help`):")}
718
718
  }
719
719
  process.exit(0);
720
720
  }
721
- const { authAndSetupMachineIfNeeded } = await import('./auth-BE8dD20T.mjs');
722
- const { isDaemonRunningCurrentlyInstalledHappyVersion } = await import('./controlClient-CM_QcJnB.mjs');
723
- const { spawnHappyCLI } = await import('./spawnHappyCLI-CoORX0YW.mjs').then(function (n) { return n.a; });
724
- const { runClaude } = await import('./runClaude-DNHvERX0.mjs');
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');
725
725
  const {
726
726
  credentials
727
727
  } = await authAndSetupMachineIfNeeded();
@@ -795,7 +795,7 @@ ${chalk.bold("Examples:")}
795
795
  }
796
796
  console.log(chalk.blue("\u{1F4F1} Sending push notification..."));
797
797
  try {
798
- const { ApiClient } = await import('./api-CIZKyfSn.mjs').then(function (n) { return n.m; });
798
+ const { ApiClient } = await import('./api-D6WL40-U.mjs').then(function (n) { return n.m; });
799
799
  const api = await ApiClient.create(credentials);
800
800
  const notificationTitle = title || "Happy AI";
801
801
  api.push().sendToAllDevices(
@@ -1,5 +1,5 @@
1
- import { l as logger, r as readCredentials } from './persistence-BFjvtUad.mjs';
2
- import { i as install$2 } from './install-oRAjVLjP.mjs';
1
+ import { l as logger, r as readCredentials } from './persistence-DKfF81pd.mjs';
2
+ import { i as install$2 } from './install-CgUPGIoF.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-BFjvtUad.mjs';
5
+ import { l as logger } from './persistence-DKfF81pd.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-JLUn_Nou.cjs');
4
- var install$2 = require('./install-BokHRgFW.cjs');
3
+ var logger = require('./persistence-CBTtC_dm.cjs');
4
+ var install$2 = require('./install-DSDufaPd.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-JLUn_Nou.cjs');
7
+ var logger = require('./persistence-CBTtC_dm.cjs');
8
8
  var trimIdent = require('./trimIdent-4gvk9Wk6.cjs');
9
9
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
10
10
 
package/dist/lib.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var api = require('./api-CwOCQeLH.cjs');
4
- var logger = require('./persistence-JLUn_Nou.cjs');
3
+ var api = require('./api-C7FyJfZ1.cjs');
4
+ var logger = require('./persistence-CBTtC_dm.cjs');
5
5
  var types = require('./types-DWeB7aqh.cjs');
6
6
  require('axios');
7
7
  require('node:events');
@@ -30,7 +30,7 @@ require('tweetnacl');
30
30
  require('@stablelib/base64');
31
31
  require('node:readline');
32
32
  require('expo-server-sdk');
33
- require('./sessionKeyCache-4Tp8pJ3N.cjs');
33
+ require('./sessionKeyCache-CDmexJ9p.cjs');
34
34
  require('chalk');
35
35
  require('fs');
36
36
 
package/dist/lib.d.cts CHANGED
@@ -1606,6 +1606,80 @@ type SpawnSessionResult = {
1606
1606
  * Similar to ApiSessionClient but for machine-scoped connections
1607
1607
  */
1608
1608
 
1609
+ interface ServerToDaemonEvents {
1610
+ update: (data: Update) => void;
1611
+ 'rpc-request': (data: {
1612
+ method: string;
1613
+ params: string;
1614
+ }, callback: (response: string) => void) => void;
1615
+ 'rpc-registered': (data: {
1616
+ method: string;
1617
+ }) => void;
1618
+ 'rpc-unregistered': (data: {
1619
+ method: string;
1620
+ }) => void;
1621
+ 'rpc-error': (data: {
1622
+ type: string;
1623
+ error: string;
1624
+ }) => void;
1625
+ auth: (data: {
1626
+ success: boolean;
1627
+ user: string;
1628
+ }) => void;
1629
+ error: (data: {
1630
+ message: string;
1631
+ }) => void;
1632
+ }
1633
+ interface DaemonToServerEvents {
1634
+ 'machine-alive': (data: {
1635
+ machineId: string;
1636
+ time: number;
1637
+ }) => void;
1638
+ 'machine-update-metadata': (data: {
1639
+ machineId: string;
1640
+ metadata: string;
1641
+ expectedVersion: number;
1642
+ }, cb: (answer: {
1643
+ result: 'error';
1644
+ } | {
1645
+ result: 'version-mismatch';
1646
+ version: number;
1647
+ metadata: string;
1648
+ } | {
1649
+ result: 'success';
1650
+ version: number;
1651
+ metadata: string;
1652
+ }) => void) => void;
1653
+ 'machine-update-state': (data: {
1654
+ machineId: string;
1655
+ daemonState: string;
1656
+ expectedVersion: number;
1657
+ }, cb: (answer: {
1658
+ result: 'error';
1659
+ } | {
1660
+ result: 'version-mismatch';
1661
+ version: number;
1662
+ daemonState: string;
1663
+ } | {
1664
+ result: 'success';
1665
+ version: number;
1666
+ daemonState: string;
1667
+ }) => void) => void;
1668
+ 'rpc-register': (data: {
1669
+ method: string;
1670
+ }) => void;
1671
+ 'rpc-unregister': (data: {
1672
+ method: string;
1673
+ }) => void;
1674
+ 'rpc-call': (data: {
1675
+ method: string;
1676
+ params: any;
1677
+ }, callback: (response: {
1678
+ ok: boolean;
1679
+ result?: any;
1680
+ error?: string;
1681
+ }) => void) => void;
1682
+ }
1609
1683
  type MachineRpcHandlers = {
1610
1684
  spawnSession: (options: SpawnSessionOptions) => Promise<SpawnSessionResult>;
1611
1685
  stopSession: (sessionId: string) => boolean;
@@ -1641,6 +1715,9 @@ declare class ApiMachineClient {
1641
1715
  private machine;
1642
1716
  private currentRuntimeDaemonState?;
1643
1717
  private socket;
1718
+ /** The daemon's live connection. Reused for device RPC so a CLI command does
1719
+ * not spend ~500ms building its own TLS + WebSocket handshake. */
1720
+ get rpcSocket(): Socket<ServerToDaemonEvents, DaemonToServerEvents>;
1644
1721
  private keepAliveInterval;
1645
1722
  private rpcHandlerManager;
1646
1723
  private claudeCache;