@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
@@ -0,0 +1,78 @@
1
+ import { stat, readFile } from 'node:fs/promises';
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-D9tMm6bj.mjs';
4
+ import { resolveDeviceForCommand } from './ssh-8tPIKk-i.mjs';
5
+ import 'node:fs';
6
+ import 'node:os';
7
+ import 'node:path';
8
+ import 'zod';
9
+ import 'node:crypto';
10
+ import 'tweetnacl';
11
+ import 'chalk';
12
+ import 'fs';
13
+ import './deviceKeys-B4aqjnE6.mjs';
14
+ import 'axios';
15
+ import './auth-Q2STUNI-.mjs';
16
+ import 'qrcode-terminal';
17
+ import './time-DgsBLJA_.mjs';
18
+ import './browser-BI7s-V8E.mjs';
19
+ import 'open';
20
+ import 'react';
21
+ import 'ink';
22
+ import './controlClient-DoS9JqQC.mjs';
23
+ import './projectPath-BTBIMB57.mjs';
24
+ import 'path';
25
+ import 'url';
26
+
27
+ const CHUNK_BYTES = 8 * 1024 * 1024;
28
+ async function pushToDevice(credentials, query, localPath, remotePath) {
29
+ const resolved = await resolveDeviceForCommand(credentials, query);
30
+ if (!resolved) return 1;
31
+ const { device, key, variant } = resolved;
32
+ const info = await stat(localPath).catch(() => null);
33
+ if (!info?.isFile()) {
34
+ console.error(`Not a file: ${localPath}`);
35
+ return 1;
36
+ }
37
+ const contents = await readFile(localPath);
38
+ const socket = io(configuration.serverUrl, {
39
+ auth: { token: credentials.token, clientType: "user-scoped" },
40
+ path: "/v1/updates",
41
+ transports: ["websocket"]
42
+ });
43
+ await new Promise((resolve, reject) => {
44
+ socket.once("connect", () => resolve());
45
+ socket.once("connect_error", reject);
46
+ });
47
+ const writeChunk = async (path, chunk) => {
48
+ const answer = await socket.timeout(12e4).emitWithAck("rpc-call", {
49
+ method: `${device.id}:writeFile`,
50
+ params: encodeBase64(encrypt(key, variant, { path, content: chunk.toString("base64") }))
51
+ });
52
+ if (!answer?.ok) throw new Error(answer?.error || "writeFile failed");
53
+ const result = decrypt(key, variant, decodeBase64(answer.result));
54
+ if (!result?.success) throw new Error(result?.error || "Device refused the write");
55
+ };
56
+ try {
57
+ if (contents.length <= CHUNK_BYTES) {
58
+ await writeChunk(remotePath, contents);
59
+ console.error(`pushed ${contents.length} bytes to ${device.name}:${remotePath}`);
60
+ return 0;
61
+ }
62
+ const parts = Math.ceil(contents.length / CHUNK_BYTES);
63
+ for (let i = 0; i < parts; i++) {
64
+ await writeChunk(`${remotePath}.part-${i}`, contents.subarray(i * CHUNK_BYTES, (i + 1) * CHUNK_BYTES));
65
+ console.error(` part ${i + 1}/${parts}`);
66
+ }
67
+ console.error(`pushed ${contents.length} bytes to ${device.name}:${remotePath}.part-0..${parts - 1}`);
68
+ console.error(`join with: cat '${remotePath}'.part-* > '${remotePath}' && rm -f '${remotePath}'.part-*`);
69
+ return 0;
70
+ } catch (error) {
71
+ console.error(error instanceof Error ? error.message : String(error));
72
+ return 1;
73
+ } finally {
74
+ socket.close();
75
+ }
76
+ }
77
+
78
+ export { pushToDevice };
@@ -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-D6WL40-U.mjs';
5
- import { c as configuration, l as logger, p as packageJson, v as acquireDaemonLock, a as readSettings, i as isDebug, g as encodeBase64, x as writeDaemonState, j as readDaemonState, y as releaseDaemonLock, z as validateProfileForAgent, A as getProfileEnvironmentVariables } from './persistence-DKfF81pd.mjs';
6
- import { authAndSetupMachineIfNeeded } from './auth-DxJ3VvrX.mjs';
4
+ import { A as ApiClient } from './api-Ew6xr81i.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-D9tMm6bj.mjs';
6
+ import { authAndSetupMachineIfNeeded } from './auth-Q2STUNI-.mjs';
7
7
  import { spawn, execSync, exec } from 'child_process';
8
- import { getEnvironmentInfo } from './doctor-CU4JLGQ1.mjs';
9
- import { s as spawnHappyCLI } from './spawnHappyCLI-yBIP_Oqi.mjs';
10
- import { isDaemonRunningCurrentlyInstalledHappyVersion, stopDaemon, cleanupDaemonState } from './controlClient-DB5tDU7V.mjs';
11
- import { a as readCachedDeviceKey, d as deviceExec } from './deviceKeys-BTdo34Uz.mjs';
12
- import { P as PLIST_LABEL } from './install-CgUPGIoF.mjs';
8
+ import { getEnvironmentInfo } from './doctor-DRnft_5-.mjs';
9
+ import { s as spawnHappyCLI } from './spawnHappyCLI-DhUeycct.mjs';
10
+ import { isDaemonRunningCurrentlyInstalledHappyVersion, stopDaemon, cleanupDaemonState } from './controlClient-DoS9JqQC.mjs';
11
+ import { a as readCachedDeviceKey, d as deviceExec } from './deviceKeys-B4aqjnE6.mjs';
12
+ import { P as PLIST_LABEL } from './install-DBg0xQ3g.mjs';
13
13
  import fastify from 'fastify';
14
14
  import { createReadStream } from 'node:fs';
15
15
  import { stat } from 'node:fs/promises';
@@ -1759,7 +1759,7 @@ ${error.message}
1759
1759
  logger.debug(`[DAEMON RUN] Attempting to spawn session in tmux: ${sessionDesc}`);
1760
1760
  const tmux = getTmuxUtilities(tmuxSessionName);
1761
1761
  const cliPath = join(projectPath(), "dist", "index.mjs");
1762
- const agent = options.agent === "gemini" ? "gemini" : options.agent === "codex" ? "codex" : "claude";
1762
+ const agent = options.agent === "gemini" ? "gemini" : options.agent === "codex" ? "codex" : options.agent === "cursor" ? "cursor" : "claude";
1763
1763
  const forkFlag = skipForkSession ? "" : " --fork-session";
1764
1764
  const resumeArgs = resumeSessionId && isClaudeAgent ? ` --resume ${resumeSessionId}${forkFlag}` : "";
1765
1765
  const fullCommand = `node --no-warnings --no-deprecation ${cliPath} ${agent} --happy-starting-mode remote --started-by daemon${resumeArgs}`;
@@ -1830,6 +1830,9 @@ ${error.message}
1830
1830
  case "gemini":
1831
1831
  agentCommand = "gemini";
1832
1832
  break;
1833
+ case "cursor":
1834
+ agentCommand = "cursor";
1835
+ break;
1833
1836
  default:
1834
1837
  return {
1835
1838
  type: "error",
@@ -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-C7FyJfZ1.cjs');
7
- var logger = require('./persistence-CBTtC_dm.cjs');
8
- var auth = require('./auth-C7ZScWEw.cjs');
6
+ var api = require('./api-CIE4_cWd.cjs');
7
+ var logger = require('./persistence-BcQmjobZ.cjs');
8
+ var auth = require('./auth-G9fZpVJ2.cjs');
9
9
  var child_process = require('child_process');
10
- var doctor = require('./doctor-BQGLhrcI.cjs');
11
- var spawnHappyCLI = require('./spawnHappyCLI-KiazE3kL.cjs');
12
- var controlClient = require('./controlClient-B23M-WPp.cjs');
13
- var deviceKeys = require('./deviceKeys-C540DcXl.cjs');
14
- var install = require('./install-DSDufaPd.cjs');
10
+ var doctor = require('./doctor-BJSuVRUZ.cjs');
11
+ var spawnHappyCLI = require('./spawnHappyCLI-Cfu7C1uM.cjs');
12
+ var controlClient = require('./controlClient-CEz_p1zc.cjs');
13
+ var deviceKeys = require('./deviceKeys-DyUn0bEx.cjs');
14
+ var install = require('./install-Tyhs6rUp.cjs');
15
15
  var fastify = require('fastify');
16
16
  var fs = require('node:fs');
17
17
  var promises = require('node:fs/promises');
@@ -1780,7 +1780,7 @@ ${error.message}
1780
1780
  logger.logger.debug(`[DAEMON RUN] Attempting to spawn session in tmux: ${sessionDesc}`);
1781
1781
  const tmux = getTmuxUtilities(tmuxSessionName);
1782
1782
  const cliPath = path$1.join(projectPath.projectPath(), "dist", "index.mjs");
1783
- const agent = options.agent === "gemini" ? "gemini" : options.agent === "codex" ? "codex" : "claude";
1783
+ const agent = options.agent === "gemini" ? "gemini" : options.agent === "codex" ? "codex" : options.agent === "cursor" ? "cursor" : "claude";
1784
1784
  const forkFlag = skipForkSession ? "" : " --fork-session";
1785
1785
  const resumeArgs = resumeSessionId && isClaudeAgent ? ` --resume ${resumeSessionId}${forkFlag}` : "";
1786
1786
  const fullCommand = `node --no-warnings --no-deprecation ${cliPath} ${agent} --happy-starting-mode remote --started-by daemon${resumeArgs}`;
@@ -1851,6 +1851,9 @@ ${error.message}
1851
1851
  case "gemini":
1852
1852
  agentCommand = "gemini";
1853
1853
  break;
1854
+ case "cursor":
1855
+ agentCommand = "cursor";
1856
+ break;
1854
1857
  default:
1855
1858
  return {
1856
1859
  type: "error",
@@ -4,20 +4,20 @@ var os = require('node:os');
4
4
  var node_crypto = require('node:crypto');
5
5
  var fs$1 = require('node:fs');
6
6
  var promises = require('node:fs/promises');
7
- var api = require('./api-C7FyJfZ1.cjs');
8
- var logger = require('./persistence-CBTtC_dm.cjs');
9
- var claudeLocal = require('./claudeLocal-C6BdzhDx.cjs');
7
+ var api = require('./api-CIE4_cWd.cjs');
8
+ var logger = require('./persistence-BcQmjobZ.cjs');
9
+ var claudeLocal = require('./claudeLocal-f4uBLJaM.cjs');
10
10
  var types = require('./types-DWeB7aqh.cjs');
11
11
  var path = require('node:path');
12
12
  var time = require('./time-Bj2HRkKH.cjs');
13
13
  var fs = require('fs/promises');
14
14
  var ink = require('ink');
15
- var downloadImage = require('./downloadImage-cQ1Z7hkC.cjs');
15
+ var downloadImage = require('./downloadImage-Cijmufpr.cjs');
16
16
  var React = require('react');
17
17
  var node_child_process = require('node:child_process');
18
18
  var node_readline = require('node:readline');
19
19
  var node_url = require('node:url');
20
- var spawnHappyCLI = require('./spawnHappyCLI-KiazE3kL.cjs');
20
+ var spawnHappyCLI = require('./spawnHappyCLI-Cfu7C1uM.cjs');
21
21
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
22
22
  require('axios');
23
23
  require('node:events');
@@ -28,20 +28,21 @@ require('crypto');
28
28
  require('@stablelib/base64');
29
29
  require('expo-server-sdk');
30
30
  require('chalk');
31
- var formatImageMessage = require('./formatImageMessage-CixDYY6G.cjs');
31
+ var formatImageMessage = require('./formatImageMessage-BPK_Ivfe.cjs');
32
32
  var node_util = require('node:util');
33
- var run = require('./run-CURx7LhK.cjs');
34
- var doctor = require('./doctor-BQGLhrcI.cjs');
35
- var controlClient = require('./controlClient-B23M-WPp.cjs');
33
+ var run = require('./run-CiPWWhXt.cjs');
34
+ var doctor = require('./doctor-BJSuVRUZ.cjs');
35
+ var controlClient = require('./controlClient-CEz_p1zc.cjs');
36
36
  var node_http = require('node:http');
37
+ var gitWorktree = require('./gitWorktree-C6jLoaMw.cjs');
37
38
  require('zod');
38
- require('./index-CDTNgfUf.cjs');
39
+ require('./index-BeKrqPYR.cjs');
39
40
  require('@paralleldrive/cuid2');
40
41
  require('child_process');
41
42
  require('util');
42
43
  require('path');
43
44
  require('node:module');
44
- require('./sessionKeyCache-CDmexJ9p.cjs');
45
+ require('./sessionKeyCache-BwFUGgMs.cjs');
45
46
  require('fs');
46
47
  require('./prompt-BTWDZZO0.cjs');
47
48
  require('./trimIdent-4gvk9Wk6.cjs');
@@ -49,16 +50,16 @@ require('./common-CZvSRU4p.cjs');
49
50
  require('@modelcontextprotocol/sdk/server/mcp.js');
50
51
  require('@modelcontextprotocol/sdk/server/streamableHttp.js');
51
52
  require('@modelcontextprotocol/sdk/types.js');
52
- require('./deviceKeys-C540DcXl.cjs');
53
- require('./auth-C7ZScWEw.cjs');
53
+ require('./deviceKeys-DyUn0bEx.cjs');
54
+ require('./auth-G9fZpVJ2.cjs');
54
55
  require('qrcode-terminal');
55
- require('./browser-DzgO4oaD.cjs');
56
+ require('./browser-qDIIAL7S.cjs');
56
57
  require('open');
57
58
  require('./mcpToolSchemas-DK42yoZ_.cjs');
58
59
  require('url');
59
60
  require('os');
60
61
  require('tmp');
61
- require('./install-DSDufaPd.cjs');
62
+ require('./install-Tyhs6rUp.cjs');
62
63
  require('fastify');
63
64
  require('fastify-type-provider-zod');
64
65
  require('./doctor-C08m5Z9f.cjs');
@@ -731,7 +732,7 @@ class AbortError extends Error {
731
732
  }
732
733
  }
733
734
 
734
- const __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('runClaude-CL3Kt5ex.cjs', document.baseURI).href)));
735
+ const __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('runClaude-BVXsyCHb.cjs', document.baseURI).href)));
735
736
  const __dirname$1 = path.join(__filename$1, "..");
736
737
  function getGlobalClaudeVersion() {
737
738
  try {
@@ -3287,7 +3288,7 @@ function detectWorktreeMetadata(cwd) {
3287
3288
  worktreeBranchName: process.env.HAPPY_WORKTREE_BRANCH_NAME
3288
3289
  };
3289
3290
  }
3290
- const info = downloadImage.detectGitWorktree(cwd);
3291
+ const info = gitWorktree.detectGitWorktree(cwd);
3291
3292
  if (info.isWorktree) {
3292
3293
  return {
3293
3294
  isWorktree: true,
@@ -3301,7 +3302,7 @@ function detectWorktreeMetadata(cwd) {
3301
3302
  for (const entry of entries) {
3302
3303
  if (!entry.isDirectory() || entry.name.startsWith(".")) continue;
3303
3304
  const subDir = path.join(cwd, entry.name);
3304
- const sub = downloadImage.detectGitWorktree(subDir);
3305
+ const sub = gitWorktree.detectGitWorktree(subDir);
3305
3306
  if (sub.isWorktree && sub.worktreeBasePath && sub.worktreeBranchName) {
3306
3307
  repos.push({
3307
3308
  path: subDir,
@@ -2,20 +2,20 @@ import os, { homedir } from 'node:os';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { existsSync, mkdirSync, writeFileSync, unlinkSync, readdirSync } from 'node:fs';
4
4
  import { readFile, mkdir, writeFile, stat, copyFile } from 'node:fs/promises';
5
- import { I as InvalidateSync, k as AsyncLock, d as connectionState, A as ApiClient, r as resolveToolsDir, s as startOfflineReconnection, l as findClaudeProjectId } from './api-D6WL40-U.mjs';
6
- import { l as logger, i as isDebug, c as configuration, a as readSettings, p as packageJson } from './persistence-DKfF81pd.mjs';
7
- import { g as getProjectPath, a as claudeLocal, E as ExitCodeError, b as claudeCheckSession, s as systemPrompt } from './claudeLocal-CWNGpJ0-.mjs';
5
+ import { I as InvalidateSync, k as AsyncLock, d as connectionState, A as ApiClient, r as resolveToolsDir, b as startOfflineReconnection, l as findClaudeProjectId } from './api-Ew6xr81i.mjs';
6
+ import { l as logger, i as isDebug, c as configuration, a as readSettings, p as packageJson } from './persistence-D9tMm6bj.mjs';
7
+ import { g as getProjectPath, a as claudeLocal, E as ExitCodeError, b as claudeCheckSession, s as systemPrompt } from './claudeLocal-Db2tDC4X.mjs';
8
8
  import { R as RawJSONLinesSchema } from './types-BoJh4Qfv.mjs';
9
9
  import { join, resolve } from 'node:path';
10
10
  import { d as delay } from './time-DgsBLJA_.mjs';
11
11
  import { watch, access } from 'fs/promises';
12
12
  import { useStdout, useInput, Box, Text, render } from 'ink';
13
- import { e as parseSpecialCommand, b as MessageBuffer, c as createMcpContext, M as MessageQueue2, h as hashObject, r as registerKillSessionHandler, a as detectGitWorktree } from './downloadImage-DZXI3mXL.mjs';
13
+ import { b as parseSpecialCommand, a as MessageBuffer, c as createMcpContext, M as MessageQueue2, h as hashObject, r as registerKillSessionHandler } from './downloadImage-BpVF7A79.mjs';
14
14
  import React, { useState, useRef, useEffect, useCallback } from 'react';
15
15
  import { execSync, spawn } from 'node:child_process';
16
16
  import { createInterface } from 'node:readline';
17
17
  import { fileURLToPath } from 'node:url';
18
- import { i as isBun } from './spawnHappyCLI-yBIP_Oqi.mjs';
18
+ import { i as isBun } from './spawnHappyCLI-DhUeycct.mjs';
19
19
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
20
20
  import 'axios';
21
21
  import 'node:events';
@@ -26,20 +26,21 @@ import 'crypto';
26
26
  import '@stablelib/base64';
27
27
  import 'expo-server-sdk';
28
28
  import 'chalk';
29
- import { a as formatMessageForClaude } from './formatImageMessage-DbKSSjMx.mjs';
29
+ import { a as formatMessageForClaude } from './formatImageMessage-6aV9YFWr.mjs';
30
30
  import { isDeepStrictEqual } from 'node:util';
31
- import { i as initialMachineMetadata, s as stopCaffeinate, a as startCaffeinate } from './run-BVZsMNwN.mjs';
32
- import { getEnvironmentInfo } from './doctor-CU4JLGQ1.mjs';
33
- import { notifyDaemonSessionStarted } from './controlClient-DB5tDU7V.mjs';
31
+ import { i as initialMachineMetadata, s as stopCaffeinate, a as startCaffeinate } from './run-BEflQaQ2.mjs';
32
+ import { getEnvironmentInfo } from './doctor-DRnft_5-.mjs';
33
+ import { notifyDaemonSessionStarted } from './controlClient-DoS9JqQC.mjs';
34
34
  import { createServer } from 'node:http';
35
+ import { d as detectGitWorktree } from './gitWorktree-CzJDU2BV.mjs';
35
36
  import 'zod';
36
- import './index-CPKdvi7J.mjs';
37
+ import './index-DTV7drqs.mjs';
37
38
  import '@paralleldrive/cuid2';
38
39
  import 'child_process';
39
40
  import 'util';
40
41
  import 'path';
41
42
  import 'node:module';
42
- import './sessionKeyCache-B6cGadYL.mjs';
43
+ import './sessionKeyCache-pXTjpETo.mjs';
43
44
  import 'fs';
44
45
  import './prompt-BsAZsPbo.mjs';
45
46
  import './trimIdent-BAjmv_TG.mjs';
@@ -47,16 +48,16 @@ import './common-BdNgghUJ.mjs';
47
48
  import '@modelcontextprotocol/sdk/server/mcp.js';
48
49
  import '@modelcontextprotocol/sdk/server/streamableHttp.js';
49
50
  import '@modelcontextprotocol/sdk/types.js';
50
- import './deviceKeys-BTdo34Uz.mjs';
51
- import './auth-DxJ3VvrX.mjs';
51
+ import './deviceKeys-B4aqjnE6.mjs';
52
+ import './auth-Q2STUNI-.mjs';
52
53
  import 'qrcode-terminal';
53
- import './browser-AoVGRX7y.mjs';
54
+ import './browser-BI7s-V8E.mjs';
54
55
  import 'open';
55
56
  import './mcpToolSchemas-CjeTfrAs.mjs';
56
57
  import 'url';
57
58
  import 'os';
58
59
  import 'tmp';
59
- import './install-CgUPGIoF.mjs';
60
+ import './install-DBg0xQ3g.mjs';
60
61
  import 'fastify';
61
62
  import 'fastify-type-provider-zod';
62
63
  import './doctor-ON7pN5G5.mjs';
@@ -2,16 +2,17 @@
2
2
 
3
3
  var ink = require('ink');
4
4
  var React = require('react');
5
- var api = require('./api-C7FyJfZ1.cjs');
5
+ var api = require('./api-CIE4_cWd.cjs');
6
6
  var node_child_process = require('node:child_process');
7
7
  var node_readline = require('node:readline');
8
- var logger = require('./persistence-CBTtC_dm.cjs');
9
- var loadableToolOutput = require('./loadableToolOutput-CbLGtvST.cjs');
8
+ var logger = require('./persistence-BcQmjobZ.cjs');
9
+ var setupOfflineReconnection = require('./setupOfflineReconnection-B6coH9QN.cjs');
10
+ var loadableToolOutput = require('./loadableToolOutput-DPGTtKJM.cjs');
10
11
  var node_crypto = require('node:crypto');
11
- var downloadImage = require('./downloadImage-cQ1Z7hkC.cjs');
12
- var run = require('./run-CURx7LhK.cjs');
12
+ var downloadImage = require('./downloadImage-Cijmufpr.cjs');
13
+ var run = require('./run-CiPWWhXt.cjs');
13
14
  var constants = require('./constants-E_UWYTo3.cjs');
14
- var controlClient = require('./controlClient-B23M-WPp.cjs');
15
+ var controlClient = require('./controlClient-CEz_p1zc.cjs');
15
16
  var node_util = require('node:util');
16
17
  var promises = require('node:fs/promises');
17
18
  var path = require('node:path');
@@ -19,7 +20,7 @@ require('axios');
19
20
  require('node:events');
20
21
  require('socket.io-client');
21
22
  require('zod');
22
- require('./index-CDTNgfUf.cjs');
23
+ require('./index-BeKrqPYR.cjs');
23
24
  require('@paralleldrive/cuid2');
24
25
  require('./time-Bj2HRkKH.cjs');
25
26
  require('node:fs');
@@ -36,17 +37,18 @@ require('crypto');
36
37
  require('tweetnacl');
37
38
  require('@stablelib/base64');
38
39
  require('expo-server-sdk');
39
- require('./sessionKeyCache-CDmexJ9p.cjs');
40
+ require('./sessionKeyCache-BwFUGgMs.cjs');
40
41
  require('chalk');
41
42
  require('fs');
43
+ require('./gitWorktree-C6jLoaMw.cjs');
42
44
  require('@modelcontextprotocol/sdk/server/mcp.js');
43
45
  require('node:http');
44
46
  require('@modelcontextprotocol/sdk/server/streamableHttp.js');
45
47
  require('@modelcontextprotocol/sdk/types.js');
46
- require('./deviceKeys-C540DcXl.cjs');
47
- require('./auth-C7ZScWEw.cjs');
48
+ require('./deviceKeys-DyUn0bEx.cjs');
49
+ require('./auth-G9fZpVJ2.cjs');
48
50
  require('qrcode-terminal');
49
- require('./browser-DzgO4oaD.cjs');
51
+ require('./browser-qDIIAL7S.cjs');
50
52
  require('open');
51
53
  require('./prompt-BTWDZZO0.cjs');
52
54
  require('./trimIdent-4gvk9Wk6.cjs');
@@ -55,12 +57,12 @@ require('./mcpToolSchemas-DK42yoZ_.cjs');
55
57
  require('./types-DWeB7aqh.cjs');
56
58
  require('os');
57
59
  require('tmp');
58
- require('./doctor-BQGLhrcI.cjs');
60
+ require('./doctor-BJSuVRUZ.cjs');
59
61
  require('./doctor-C08m5Z9f.cjs');
60
62
  require('ps-list');
61
63
  require('cross-spawn');
62
- require('./spawnHappyCLI-KiazE3kL.cjs');
63
- require('./install-DSDufaPd.cjs');
64
+ require('./spawnHappyCLI-Cfu7C1uM.cjs');
65
+ require('./install-Tyhs6rUp.cjs');
64
66
  require('fastify');
65
67
  require('fastify-type-provider-zod');
66
68
 
@@ -1323,7 +1325,7 @@ function createCodexBackend(options) {
1323
1325
  };
1324
1326
  }
1325
1327
 
1326
- class CodexPermissionHandler extends loadableToolOutput.BasePermissionHandler {
1328
+ class CodexPermissionHandler extends setupOfflineReconnection.BasePermissionHandler {
1327
1329
  currentPermissionMode = "default";
1328
1330
  constructor(session, pushClient) {
1329
1331
  super(session, pushClient);
@@ -1895,7 +1897,7 @@ async function runCodex(opts) {
1895
1897
  machineId,
1896
1898
  metadata: run.initialMachineMetadata
1897
1899
  });
1898
- const { state, metadata } = loadableToolOutput.createSessionMetadata({
1900
+ const { state, metadata } = setupOfflineReconnection.createSessionMetadata({
1899
1901
  flavor: "codex",
1900
1902
  machineId,
1901
1903
  startedBy: opts.startedBy
@@ -1903,7 +1905,7 @@ async function runCodex(opts) {
1903
1905
  const response = await api$1.getOrCreateSession({ tag: sessionTag, metadata, state });
1904
1906
  let session;
1905
1907
  let permissionHandler;
1906
- const { session: initialSession, reconnectionHandle } = loadableToolOutput.setupOfflineReconnection({
1908
+ const { session: initialSession, reconnectionHandle } = setupOfflineReconnection.setupOfflineReconnection({
1907
1909
  api: api$1,
1908
1910
  sessionTag,
1909
1911
  metadata,
@@ -1,15 +1,16 @@
1
1
  import { useStdout, useInput, Box, Text, render } from 'ink';
2
2
  import React, { useState, useRef, useEffect, useCallback } from 'react';
3
- import { c as saveDiffRecords, e as extractUserText, i as isSystemMessage, g as generateStableUuid, f as findCodexSessionFile, d as connectionState, A as ApiClient } from './api-D6WL40-U.mjs';
3
+ import { c as saveDiffRecords, e as extractUserText, i as isSystemMessage, g as generateStableUuid, f as findCodexSessionFile, d as connectionState, A as ApiClient } from './api-Ew6xr81i.mjs';
4
4
  import { spawn, execSync } from 'node:child_process';
5
5
  import { createInterface } from 'node:readline';
6
- import { l as logger, i as isDebug, a as readSettings } from './persistence-DKfF81pd.mjs';
7
- import { B as BasePermissionHandler, a as BaseReasoningProcessor, c as createSessionMetadata, s as setupOfflineReconnection, h as handleConfigMetadataEvent, b as summarizeBashToolOutput } from './loadableToolOutput-Bfei9wPq.mjs';
6
+ import { l as logger, i as isDebug, a as readSettings } from './persistence-D9tMm6bj.mjs';
7
+ import { B as BasePermissionHandler, c as createSessionMetadata, s as setupOfflineReconnection } from './setupOfflineReconnection-DW5il97B.mjs';
8
+ import { B as BaseReasoningProcessor, h as handleConfigMetadataEvent, s as summarizeBashToolOutput } from './loadableToolOutput-2dMPAp4N.mjs';
8
9
  import { randomUUID } from 'node:crypto';
9
- import { M as MessageQueue2, h as hashObject, c as createMcpContext, r as registerKillSessionHandler, b as MessageBuffer, p as parseClear, d as downloadImage } from './downloadImage-DZXI3mXL.mjs';
10
- import { i as initialMachineMetadata, s as stopCaffeinate } from './run-BVZsMNwN.mjs';
10
+ import { M as MessageQueue2, h as hashObject, c as createMcpContext, r as registerKillSessionHandler, a as MessageBuffer, p as parseClear, d as downloadImage } from './downloadImage-BpVF7A79.mjs';
11
+ import { i as initialMachineMetadata, s as stopCaffeinate } from './run-BEflQaQ2.mjs';
11
12
  import { g as getFirstTurnInstruction } from './constants-pmXZGibX.mjs';
12
- import { notifyDaemonSessionStarted } from './controlClient-DB5tDU7V.mjs';
13
+ import { notifyDaemonSessionStarted } from './controlClient-DoS9JqQC.mjs';
13
14
  import { inspect } from 'node:util';
14
15
  import { readFile } from 'node:fs/promises';
15
16
  import { basename, isAbsolute } from 'node:path';
@@ -17,7 +18,7 @@ import 'axios';
17
18
  import 'node:events';
18
19
  import 'socket.io-client';
19
20
  import 'zod';
20
- import './index-CPKdvi7J.mjs';
21
+ import './index-DTV7drqs.mjs';
21
22
  import '@paralleldrive/cuid2';
22
23
  import './time-DgsBLJA_.mjs';
23
24
  import 'node:fs';
@@ -34,17 +35,18 @@ import 'crypto';
34
35
  import 'tweetnacl';
35
36
  import '@stablelib/base64';
36
37
  import 'expo-server-sdk';
37
- import './sessionKeyCache-B6cGadYL.mjs';
38
+ import './sessionKeyCache-pXTjpETo.mjs';
38
39
  import 'chalk';
39
40
  import 'fs';
41
+ import './gitWorktree-CzJDU2BV.mjs';
40
42
  import '@modelcontextprotocol/sdk/server/mcp.js';
41
43
  import 'node:http';
42
44
  import '@modelcontextprotocol/sdk/server/streamableHttp.js';
43
45
  import '@modelcontextprotocol/sdk/types.js';
44
- import './deviceKeys-BTdo34Uz.mjs';
45
- import './auth-DxJ3VvrX.mjs';
46
+ import './deviceKeys-B4aqjnE6.mjs';
47
+ import './auth-Q2STUNI-.mjs';
46
48
  import 'qrcode-terminal';
47
- import './browser-AoVGRX7y.mjs';
49
+ import './browser-BI7s-V8E.mjs';
48
50
  import 'open';
49
51
  import './prompt-BsAZsPbo.mjs';
50
52
  import './trimIdent-BAjmv_TG.mjs';
@@ -53,12 +55,12 @@ import './mcpToolSchemas-CjeTfrAs.mjs';
53
55
  import './types-BoJh4Qfv.mjs';
54
56
  import 'os';
55
57
  import 'tmp';
56
- import './doctor-CU4JLGQ1.mjs';
58
+ import './doctor-DRnft_5-.mjs';
57
59
  import './doctor-ON7pN5G5.mjs';
58
60
  import 'ps-list';
59
61
  import 'cross-spawn';
60
- import './spawnHappyCLI-yBIP_Oqi.mjs';
61
- import './install-CgUPGIoF.mjs';
62
+ import './spawnHappyCLI-DhUeycct.mjs';
63
+ import './install-DBg0xQ3g.mjs';
62
64
  import 'fastify';
63
65
  import 'fastify-type-provider-zod';
64
66