@nervekit/desktop 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +5 -0
  3. package/build/README.md +1 -0
  4. package/build/icons/1024x1024.png +0 -0
  5. package/build/icons/128x128.png +0 -0
  6. package/build/icons/16x16.png +0 -0
  7. package/build/icons/24x24.png +0 -0
  8. package/build/icons/256x256.png +0 -0
  9. package/build/icons/32x32.png +0 -0
  10. package/build/icons/48x48.png +0 -0
  11. package/build/icons/512x512.png +0 -0
  12. package/build/icons/64x64.png +0 -0
  13. package/build/tray/tray-dark-16.png +0 -0
  14. package/build/tray/tray-dark-24.png +0 -0
  15. package/build/tray/tray-dark.png +0 -0
  16. package/build/tray/tray-light-16.png +0 -0
  17. package/build/tray/tray-light-24.png +0 -0
  18. package/build/tray/tray-light.png +0 -0
  19. package/build/tray/tray-template-16.png +0 -0
  20. package/build/tray/tray-template-24.png +0 -0
  21. package/build/tray/tray-template.png +0 -0
  22. package/dist/app/cli-options.d.ts +7 -0
  23. package/dist/app/cli-options.d.ts.map +1 -0
  24. package/dist/app/cli-options.js +101 -0
  25. package/dist/app/cli-options.js.map +1 -0
  26. package/dist/bin.d.ts +3 -0
  27. package/dist/bin.d.ts.map +1 -0
  28. package/dist/bin.js +75 -0
  29. package/dist/bin.js.map +1 -0
  30. package/dist/daemon-helpers.d.ts +31 -0
  31. package/dist/daemon-helpers.d.ts.map +1 -0
  32. package/dist/daemon-helpers.js +224 -0
  33. package/dist/daemon-helpers.js.map +1 -0
  34. package/dist/daemon.d.ts +38 -0
  35. package/dist/daemon.d.ts.map +1 -0
  36. package/dist/daemon.js +494 -0
  37. package/dist/daemon.js.map +1 -0
  38. package/dist/electron.d.ts +3 -0
  39. package/dist/electron.d.ts.map +1 -0
  40. package/dist/electron.js +4 -0
  41. package/dist/electron.js.map +1 -0
  42. package/dist/ipc/notifications-ipc.d.ts +4 -0
  43. package/dist/ipc/notifications-ipc.d.ts.map +1 -0
  44. package/dist/ipc/notifications-ipc.js +42 -0
  45. package/dist/ipc/notifications-ipc.js.map +1 -0
  46. package/dist/ipc/window-ipc.d.ts +15 -0
  47. package/dist/ipc/window-ipc.d.ts.map +1 -0
  48. package/dist/ipc/window-ipc.js +71 -0
  49. package/dist/ipc/window-ipc.js.map +1 -0
  50. package/dist/logging.d.ts +7 -0
  51. package/dist/logging.d.ts.map +1 -0
  52. package/dist/logging.js +61 -0
  53. package/dist/logging.js.map +1 -0
  54. package/dist/main.d.ts +2 -0
  55. package/dist/main.d.ts.map +1 -0
  56. package/dist/main.js +328 -0
  57. package/dist/main.js.map +1 -0
  58. package/dist/preload.cjs +44 -0
  59. package/dist/settings/desktop-settings.d.ts +4 -0
  60. package/dist/settings/desktop-settings.d.ts.map +1 -0
  61. package/dist/settings/desktop-settings.js +45 -0
  62. package/dist/settings/desktop-settings.js.map +1 -0
  63. package/dist/shared/ozone-platform.d.ts +3 -0
  64. package/dist/shared/ozone-platform.d.ts.map +1 -0
  65. package/dist/shared/ozone-platform.js +16 -0
  66. package/dist/shared/ozone-platform.js.map +1 -0
  67. package/dist/tray/tray.d.ts +21 -0
  68. package/dist/tray/tray.d.ts.map +1 -0
  69. package/dist/tray/tray.js +122 -0
  70. package/dist/tray/tray.js.map +1 -0
  71. package/dist/types.d.ts +26 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +2 -0
  74. package/dist/types.js.map +1 -0
  75. package/dist/window/loading-pages.d.ts +4 -0
  76. package/dist/window/loading-pages.d.ts.map +1 -0
  77. package/dist/window/loading-pages.js +137 -0
  78. package/dist/window/loading-pages.js.map +1 -0
  79. package/dist/window/navigation-guards.d.ts +3 -0
  80. package/dist/window/navigation-guards.d.ts.map +1 -0
  81. package/dist/window/navigation-guards.js +53 -0
  82. package/dist/window/navigation-guards.js.map +1 -0
  83. package/dist/window/preload-paths.d.ts +5 -0
  84. package/dist/window/preload-paths.d.ts.map +1 -0
  85. package/dist/window/preload-paths.js +31 -0
  86. package/dist/window/preload-paths.js.map +1 -0
  87. package/package.json +54 -0
package/dist/daemon.js ADDED
@@ -0,0 +1,494 @@
1
+ import { spawn } from "node:child_process";
2
+ import { access } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { assertHealthy, buildOrchestratorEnv, buildShareUrls, findHealthyDaemon, isHealthy, isLoopbackHost, normalizeRemoteDaemonUrl, resolveDaemonPaths, resolveOrchestratorMainPath, resolveReadinessTimeoutMs, wantsLanAccess, } from "./daemon-helpers.js";
5
+ import { desktopLog } from "./logging.js";
6
+ const shutdownTimeoutMs = 5000;
7
+ const healthPollIntervalMs = 5000;
8
+ const unhealthyThreshold = 3;
9
+ const restartBackoffMs = [500, 1000, 2000, 5000, 10_000];
10
+ const maxRestartAttempts = 5;
11
+ const healthyResetMs = 60_000;
12
+ class OutputBuffer {
13
+ lines = [];
14
+ append(stream, chunk) {
15
+ const text = Buffer.isBuffer(chunk)
16
+ ? chunk.toString("utf8")
17
+ : String(chunk);
18
+ for (const line of text.split(/\r?\n/)) {
19
+ if (!line.trim())
20
+ continue;
21
+ this.lines.push(`[${stream}] ${line}`);
22
+ }
23
+ if (this.lines.length > 200)
24
+ this.lines.splice(0, this.lines.length - 200);
25
+ }
26
+ tail() {
27
+ return this.lines.length > 0 ? this.lines.join("\n") : "(no output)";
28
+ }
29
+ }
30
+ export async function ensureDaemon(options = {}) {
31
+ if (options.mode === "remote" || options.remoteUrl) {
32
+ void desktopLog("info", "daemon", "Connecting to remote daemon", {
33
+ context: { url: options.remoteUrl },
34
+ });
35
+ return connectRemoteDaemon(options);
36
+ }
37
+ void desktopLog("info", "daemon", "Ensuring local daemon");
38
+ return ensureLocalDaemon(options);
39
+ }
40
+ async function connectRemoteDaemon(options) {
41
+ if (!options.remoteUrl) {
42
+ throw new Error("Missing remote daemon URL. Use --connect <url>.");
43
+ }
44
+ const url = normalizeRemoteDaemonUrl(options.remoteUrl);
45
+ const token = options.token?.trim() || process.env.NERVE_DAEMON_TOKEN?.trim();
46
+ if (!token) {
47
+ throw new Error("Missing remote daemon token. Use --token <token> or NERVE_DAEMON_TOKEN.");
48
+ }
49
+ await assertHealthy(url, token, "remote Nerve daemon");
50
+ const supervisor = new DaemonSupervisor({
51
+ mode: "remote",
52
+ owned: false,
53
+ options,
54
+ readinessTimeoutMs: resolveReadinessTimeoutMs(),
55
+ });
56
+ return supervisor.initMonitorOnly({ url, token });
57
+ }
58
+ async function ensureLocalDaemon(options) {
59
+ const paths = resolveDaemonPaths();
60
+ const readinessTimeoutMs = resolveReadinessTimeoutMs();
61
+ const existing = await findHealthyDaemon(paths);
62
+ if (existing) {
63
+ if (wantsLanAccess(options) && isLoopbackHost(existing.daemon.host)) {
64
+ throw new Error(`A Nerve daemon is already running at ${existing.url}, but it is bound to ${existing.daemon.host} and cannot accept LAN clients. Stop the existing daemon, then run pnpm desktop again.`);
65
+ }
66
+ if (options.mobileHttps && !existing.daemon.mobileHttps) {
67
+ throw new Error(`A Nerve daemon is already running at ${existing.url}, but mobile HTTPS is not enabled. Stop the existing daemon, then run with --mobile-https again.`);
68
+ }
69
+ void desktopLog("info", "daemon", "Using existing healthy local daemon", {
70
+ context: { url: existing.url },
71
+ });
72
+ const supervisor = new DaemonSupervisor({
73
+ mode: "local",
74
+ owned: false,
75
+ options,
76
+ paths,
77
+ readinessTimeoutMs,
78
+ });
79
+ return supervisor.initMonitorOnly(existing);
80
+ }
81
+ const orchestratorMain = resolveOrchestratorMainPath();
82
+ await access(orchestratorMain).catch(() => {
83
+ throw new Error(`Nerve orchestrator build was not found at ${orchestratorMain}. Run pnpm --filter @nervekit/orchestrator build first.`);
84
+ });
85
+ const supervisor = new DaemonSupervisor({
86
+ mode: "local",
87
+ owned: true,
88
+ options,
89
+ paths,
90
+ orchestratorMain,
91
+ readinessTimeoutMs,
92
+ });
93
+ return supervisor.startOwned();
94
+ }
95
+ /**
96
+ * Supervises the lifecycle of the connected daemon.
97
+ *
98
+ * For owned local daemons it spawns the orchestrator child, watches for crashes
99
+ * and unhealthy states, and restarts with exponential backoff. For existing
100
+ * local daemons and remote daemons it only health-monitors and reports
101
+ * `restarting`/`ready` transitions so the desktop window overlay and tray stay
102
+ * accurate (it never spawns a child it does not own).
103
+ */
104
+ class DaemonSupervisor {
105
+ config;
106
+ status = "ready";
107
+ listeners = new Set();
108
+ child;
109
+ childExited = false;
110
+ childOutput;
111
+ detachChildExit;
112
+ removeParentExitHook;
113
+ healthTimer;
114
+ consecutiveFailures = 0;
115
+ restartAttempts = 0;
116
+ lastHealthyAt = Date.now();
117
+ restarting = false;
118
+ stopped = false;
119
+ restartChain = Promise.resolve();
120
+ url = "";
121
+ token;
122
+ shareUrls = {};
123
+ constructor(config) {
124
+ this.config = config;
125
+ }
126
+ /** Spawn the owned orchestrator child, wait until healthy, then monitor. */
127
+ async startOwned() {
128
+ const healthy = await this.spawnAndWait();
129
+ this.applyHealthy(healthy);
130
+ this.attachChildMonitor();
131
+ this.startHealthMonitor();
132
+ return this.toManagedDaemon();
133
+ }
134
+ /** Attach monitoring to an already-running (existing/remote) daemon. */
135
+ initMonitorOnly(connection) {
136
+ this.url = connection.url;
137
+ this.token = connection.token;
138
+ this.startHealthMonitor();
139
+ return this.toManagedDaemon();
140
+ }
141
+ getStatus() {
142
+ return this.status;
143
+ }
144
+ onStatusChange(listener) {
145
+ this.listeners.add(listener);
146
+ return () => this.listeners.delete(listener);
147
+ }
148
+ setStatus(status, info) {
149
+ if (this.status === status && status !== "restarting")
150
+ return;
151
+ this.status = status;
152
+ for (const listener of this.listeners) {
153
+ try {
154
+ listener(status, info);
155
+ }
156
+ catch (error) {
157
+ void desktopLog("warn", "daemon", "Daemon status listener failed", {
158
+ error,
159
+ });
160
+ }
161
+ }
162
+ }
163
+ applyHealthy(healthy) {
164
+ this.url = healthy.url;
165
+ this.token = healthy.token;
166
+ this.shareUrls = buildShareUrls(healthy.daemon, healthy.token);
167
+ this.lastHealthyAt = Date.now();
168
+ this.consecutiveFailures = 0;
169
+ }
170
+ toManagedDaemon() {
171
+ const supervisor = this;
172
+ return {
173
+ get url() {
174
+ return supervisor.url;
175
+ },
176
+ get token() {
177
+ return supervisor.token;
178
+ },
179
+ get shareUrl() {
180
+ return supervisor.shareUrls.shareUrl;
181
+ },
182
+ get mobileSetupUrl() {
183
+ return supervisor.shareUrls.mobileSetupUrl;
184
+ },
185
+ get secureShareUrl() {
186
+ return supervisor.shareUrls.secureShareUrl;
187
+ },
188
+ get caCertUrl() {
189
+ return supervisor.shareUrls.caCertUrl;
190
+ },
191
+ owned: supervisor.config.owned,
192
+ mode: supervisor.config.mode,
193
+ getStatus: () => supervisor.getStatus(),
194
+ onStatusChange: (listener) => supervisor.onStatusChange(listener),
195
+ restart: () => supervisor.requestManualRestart(),
196
+ stop: () => supervisor.stop(),
197
+ };
198
+ }
199
+ // --- owned-child spawn / readiness ---
200
+ async spawnAndWait() {
201
+ const { paths, orchestratorMain, options, readinessTimeoutMs } = this.requireOwnedConfig();
202
+ const output = new OutputBuffer();
203
+ this.childOutput = output;
204
+ void desktopLog("info", "daemon", "Starting owned local daemon", {
205
+ context: {
206
+ orchestratorMain,
207
+ dataDir: paths.home,
208
+ readinessTimeoutMs,
209
+ },
210
+ });
211
+ const child = spawn(process.execPath, [orchestratorMain], {
212
+ env: buildOrchestratorEnv(options),
213
+ stdio: ["ignore", "pipe", "pipe"],
214
+ windowsHide: true,
215
+ });
216
+ this.child = child;
217
+ this.childExited = false;
218
+ child.stdout?.on("data", (chunk) => output.append("stdout", chunk));
219
+ child.stderr?.on("data", (chunk) => output.append("stderr", chunk));
220
+ let spawnError;
221
+ let childExit;
222
+ const killOnParentExit = () => {
223
+ if (!childExit)
224
+ child.kill("SIGTERM");
225
+ };
226
+ process.once("exit", killOnParentExit);
227
+ this.removeParentExitHook = () => process.off("exit", killOnParentExit);
228
+ child.once("error", (error) => {
229
+ spawnError = error;
230
+ });
231
+ child.once("exit", (code, signal) => {
232
+ childExit = { code, signal };
233
+ this.childExited = true;
234
+ });
235
+ const deadline = Date.now() + readinessTimeoutMs;
236
+ while (Date.now() < deadline) {
237
+ if (spawnError) {
238
+ throw daemonStartupError(`Failed to start the Nerve daemon: ${spawnError.message}`, output, { dataDir: paths.home, readinessTimeoutMs });
239
+ }
240
+ if (childExit) {
241
+ throw daemonStartupError(`Nerve daemon exited before it became ready${formatExit(childExit)}.`, output, { dataDir: paths.home, readinessTimeoutMs });
242
+ }
243
+ const daemon = await findHealthyDaemon(paths);
244
+ if (daemon) {
245
+ void desktopLog("info", "daemon", "Owned local daemon became ready", {
246
+ context: { url: daemon.url },
247
+ });
248
+ return daemon;
249
+ }
250
+ await delay(200);
251
+ }
252
+ await stopOwnedChild(child, () => this.childExited);
253
+ const error = daemonStartupError(`Nerve daemon did not become ready within ${readinessTimeoutMs}ms.`, output, { dataDir: paths.home, readinessTimeoutMs });
254
+ void desktopLog("error", "daemon", "Owned local daemon startup timed out", {
255
+ error,
256
+ context: {
257
+ output: output.tail(),
258
+ dataDir: paths.home,
259
+ readinessTimeoutMs,
260
+ },
261
+ });
262
+ throw error;
263
+ }
264
+ attachChildMonitor() {
265
+ const child = this.child;
266
+ if (!child)
267
+ return;
268
+ const onExit = (code, signal) => {
269
+ this.childExited = true;
270
+ if (this.stopped)
271
+ return;
272
+ void desktopLog("warn", "daemon", "Owned daemon child exited", {
273
+ context: {
274
+ code,
275
+ signal,
276
+ output: this.childOutput?.tail() ?? "(no output)",
277
+ },
278
+ });
279
+ this.scheduleRestart(`Daemon process exited${formatExit({ code, signal })}.`);
280
+ };
281
+ child.on("exit", onExit);
282
+ this.detachChildExit = () => child.off("exit", onExit);
283
+ }
284
+ // --- health monitoring ---
285
+ startHealthMonitor() {
286
+ this.stopHealthMonitor();
287
+ this.healthTimer = setInterval(() => {
288
+ void this.runHealthCheck();
289
+ }, healthPollIntervalMs);
290
+ this.healthTimer.unref?.();
291
+ }
292
+ stopHealthMonitor() {
293
+ if (!this.healthTimer)
294
+ return;
295
+ clearInterval(this.healthTimer);
296
+ this.healthTimer = undefined;
297
+ }
298
+ async runHealthCheck() {
299
+ if (this.stopped || this.restarting)
300
+ return;
301
+ if (!this.url || !this.token)
302
+ return;
303
+ const healthy = await isHealthy(this.url, this.token);
304
+ if (healthy) {
305
+ this.consecutiveFailures = 0;
306
+ this.lastHealthyAt = Date.now();
307
+ // Sustained health resets the restart budget.
308
+ this.restartAttempts = 0;
309
+ if (this.status !== "ready")
310
+ this.setStatus("ready");
311
+ return;
312
+ }
313
+ this.consecutiveFailures += 1;
314
+ if (this.consecutiveFailures < unhealthyThreshold)
315
+ return;
316
+ if (this.config.owned && this.childExited)
317
+ return; // child-exit path handles it
318
+ this.scheduleRestart(`Daemon stopped responding after ${this.consecutiveFailures} failed health checks.`);
319
+ }
320
+ // --- restart orchestration ---
321
+ requestManualRestart() {
322
+ if (!this.config.owned) {
323
+ void desktopLog("info", "daemon", "Manual restart ignored for non-owned daemon");
324
+ return Promise.resolve();
325
+ }
326
+ this.restartAttempts = 0;
327
+ return this.scheduleRestart("Manual restart requested.", true);
328
+ }
329
+ scheduleRestart(reason, manual = false) {
330
+ if (this.stopped)
331
+ return Promise.resolve();
332
+ if (!this.config.owned) {
333
+ // Existing/remote: we cannot respawn; reflect waiting state and let the
334
+ // health monitor flip back to ready when the daemon recovers.
335
+ this.setStatus("restarting", { error: reason });
336
+ return Promise.resolve();
337
+ }
338
+ this.restartChain = this.restartChain.then(() => this.performRestart(reason, manual));
339
+ return this.restartChain;
340
+ }
341
+ async performRestart(reason, manual) {
342
+ if (this.stopped)
343
+ return;
344
+ if (this.status === "ready" && this.childExited === false && !manual) {
345
+ // Already recovered by a previous chained restart.
346
+ const healthy = this.url && this.token ? await isHealthy(this.url, this.token) : false;
347
+ if (healthy)
348
+ return;
349
+ }
350
+ this.restarting = true;
351
+ if (Date.now() - this.lastHealthyAt > healthyResetMs) {
352
+ this.restartAttempts = 0;
353
+ }
354
+ // Clean up the previous child before respawning.
355
+ this.detachChildExit?.();
356
+ this.detachChildExit = undefined;
357
+ this.removeParentExitHook?.();
358
+ this.removeParentExitHook = undefined;
359
+ if (this.child && !this.childExited) {
360
+ await stopOwnedChild(this.child, () => this.childExited).catch(() => undefined);
361
+ }
362
+ this.child = undefined;
363
+ while (!this.stopped && this.restartAttempts < maxRestartAttempts) {
364
+ const attempt = this.restartAttempts + 1;
365
+ this.setStatus("restarting", { error: reason, attempt });
366
+ const backoff = restartBackoffMs[Math.min(attempt - 1, restartBackoffMs.length - 1)] ??
367
+ 10_000;
368
+ void desktopLog("info", "daemon", "Restarting owned daemon", {
369
+ context: { attempt, backoffMs: backoff, reason },
370
+ });
371
+ await delay(backoff);
372
+ if (this.stopped)
373
+ break;
374
+ this.restartAttempts = attempt;
375
+ try {
376
+ const healthy = await this.spawnAndWait();
377
+ this.applyHealthy(healthy);
378
+ this.attachChildMonitor();
379
+ this.restarting = false;
380
+ this.restartAttempts = 0;
381
+ this.consecutiveFailures = 0;
382
+ void desktopLog("info", "daemon", "Owned daemon restarted", {
383
+ context: { url: healthy.url, attempt },
384
+ });
385
+ this.setStatus("ready");
386
+ return;
387
+ }
388
+ catch (error) {
389
+ void desktopLog("error", "daemon", "Daemon restart attempt failed", {
390
+ error,
391
+ context: { attempt },
392
+ });
393
+ }
394
+ }
395
+ this.restarting = false;
396
+ if (this.stopped)
397
+ return;
398
+ void desktopLog("error", "daemon", "Daemon restart gave up", {
399
+ context: { attempts: this.restartAttempts },
400
+ });
401
+ this.setStatus("failed", {
402
+ error: `Could not restart the Nerve daemon after ${this.restartAttempts} attempts. ${reason}`,
403
+ });
404
+ }
405
+ // --- teardown ---
406
+ async stop() {
407
+ if (this.stopped)
408
+ return;
409
+ this.stopped = true;
410
+ this.stopHealthMonitor();
411
+ this.detachChildExit?.();
412
+ this.detachChildExit = undefined;
413
+ this.removeParentExitHook?.();
414
+ this.removeParentExitHook = undefined;
415
+ if (!this.config.owned)
416
+ return;
417
+ if (!this.child)
418
+ return;
419
+ await stopOwnedChild(this.child, () => this.childExited);
420
+ }
421
+ requireOwnedConfig() {
422
+ if (!this.config.paths || !this.config.orchestratorMain) {
423
+ throw new Error("Owned daemon supervisor is missing spawn configuration.");
424
+ }
425
+ return {
426
+ paths: this.config.paths,
427
+ orchestratorMain: this.config.orchestratorMain,
428
+ options: this.config.options,
429
+ readinessTimeoutMs: this.config.readinessTimeoutMs,
430
+ };
431
+ }
432
+ }
433
+ async function stopOwnedChild(child, hasExited) {
434
+ if (hasExited()) {
435
+ void desktopLog("info", "daemon", "Owned child already exited before stop");
436
+ return;
437
+ }
438
+ const startedAt = Date.now();
439
+ let forced = false;
440
+ let fallbackResolved = false;
441
+ await new Promise((resolveStop) => {
442
+ let settled = false;
443
+ const finish = () => {
444
+ if (settled)
445
+ return;
446
+ settled = true;
447
+ clearTimeout(forceTimer);
448
+ clearTimeout(resolveTimer);
449
+ resolveStop();
450
+ };
451
+ const forceTimer = setTimeout(() => {
452
+ if (!hasExited()) {
453
+ forced = true;
454
+ child.kill("SIGKILL");
455
+ }
456
+ }, shutdownTimeoutMs);
457
+ const resolveTimer = setTimeout(() => {
458
+ fallbackResolved = true;
459
+ finish();
460
+ }, shutdownTimeoutMs + 1000);
461
+ child.once("exit", finish);
462
+ if (!child.kill("SIGTERM"))
463
+ finish();
464
+ });
465
+ void desktopLog("info", "daemon", "Owned child stop completed", {
466
+ durationMs: Date.now() - startedAt,
467
+ context: { forced, fallbackResolved, exited: hasExited() },
468
+ });
469
+ }
470
+ function daemonStartupError(message, output, context) {
471
+ const diagnostics = [
472
+ context?.readinessTimeoutMs
473
+ ? `Startup timeout: ${context.readinessTimeoutMs}ms`
474
+ : undefined,
475
+ context?.dataDir ? `Data dir: ${context.dataDir}` : undefined,
476
+ context?.dataDir
477
+ ? `Application log: ${join(context.dataDir, "logs", `application-${new Date().toISOString().slice(0, 10)}.jsonl`)}`
478
+ : undefined,
479
+ ].filter((line) => Boolean(line));
480
+ return new Error(`${message}\n\nDaemon output:\n${output.tail()}${diagnostics.length > 0
481
+ ? `\n\nDiagnostics:\n${diagnostics.map((line) => `- ${line}`).join("\n")}`
482
+ : ""}`);
483
+ }
484
+ function formatExit(exit) {
485
+ if (exit.signal)
486
+ return ` after signal ${exit.signal}`;
487
+ if (exit.code !== null)
488
+ return ` with code ${exit.code}`;
489
+ return "";
490
+ }
491
+ function delay(ms) {
492
+ return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));
493
+ }
494
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const app: Electron.App, BrowserWindow: typeof Electron.CrossProcessExports.BrowserWindow, clipboard: Electron.Clipboard, ipcMain: Electron.IpcMain, Menu: typeof Electron.CrossProcessExports.Menu, Notification: typeof Electron.CrossProcessExports.Notification, nativeImage: typeof Electron.NativeImage, nativeTheme: Electron.NativeTheme, session: typeof Electron.Session, shell: Electron.Shell, Tray: typeof Electron.CrossProcessExports.Tray;
2
+ export type { BrowserWindow as BrowserWindowType, IpcMainInvokeEvent, NativeImage, Tray as TrayType, } from "electron";
3
+ //# sourceMappingURL=electron.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"electron.d.ts","sourceRoot":"","sources":["../src/electron.ts"],"names":[],"mappings":"AAIA,eAAO,MACL,GAAG,gBACH,aAAa,qDACb,SAAS,sBACT,OAAO,oBACP,IAAI,4CACJ,YAAY,oDACZ,WAAW,+BACX,WAAW,wBACX,OAAO,2BACP,KAAK,kBACL,IAAI,0CAC8C,CAAC;AAErD,YAAY,EACV,aAAa,IAAI,iBAAiB,EAClC,kBAAkB,EAClB,WAAW,EACX,IAAI,IAAI,QAAQ,GACjB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { createRequire } from "node:module";
2
+ const require = createRequire(import.meta.url);
3
+ export const { app, BrowserWindow, clipboard, ipcMain, Menu, Notification, nativeImage, nativeTheme, session, shell, Tray, } = require("electron");
4
+ //# sourceMappingURL=electron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"electron.js","sourceRoot":"","sources":["../src/electron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,EACX,GAAG,EACH,aAAa,EACb,SAAS,EACT,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,OAAO,EACP,KAAK,EACL,IAAI,GACL,GAAG,OAAO,CAAC,UAAU,CAA8B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function showDesktopNotification(payload: unknown, showMainWindow: () => void | Promise<void>): {
2
+ shown: boolean;
3
+ };
4
+ //# sourceMappingURL=notifications-ipc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications-ipc.d.ts","sourceRoot":"","sources":["../../src/ipc/notifications-ipc.ts"],"names":[],"mappings":"AAGA,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACzC;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,CAiBpB"}
@@ -0,0 +1,42 @@
1
+ import { Notification } from "../electron.js";
2
+ export function showDesktopNotification(payload, showMainWindow) {
3
+ const notificationPayload = parseNotificationPayload(payload);
4
+ if (!notificationPayload || !Notification.isSupported()) {
5
+ return { shown: false };
6
+ }
7
+ const notification = new Notification({
8
+ title: notificationPayload.title,
9
+ body: notificationPayload.body,
10
+ urgency: notificationPayload.urgency === "attention" ? "critical" : "normal",
11
+ });
12
+ notification.on("click", () => {
13
+ void showMainWindow();
14
+ });
15
+ notification.show();
16
+ return { shown: true };
17
+ }
18
+ function parseNotificationPayload(payload) {
19
+ if (!payload || typeof payload !== "object")
20
+ return undefined;
21
+ const candidate = payload;
22
+ if (typeof candidate.title !== "string" || !candidate.title.trim()) {
23
+ return undefined;
24
+ }
25
+ const urgency = candidate.urgency === "attention" || candidate.urgency === "normal"
26
+ ? candidate.urgency
27
+ : "normal";
28
+ return {
29
+ title: truncateNotificationText(candidate.title, 120),
30
+ body: typeof candidate.body === "string"
31
+ ? truncateNotificationText(candidate.body, 280)
32
+ : undefined,
33
+ urgency,
34
+ };
35
+ }
36
+ function truncateNotificationText(value, maxLength) {
37
+ const trimmed = value.trim();
38
+ if (trimmed.length <= maxLength)
39
+ return trimmed;
40
+ return `${trimmed.slice(0, maxLength - 1)}…`;
41
+ }
42
+ //# sourceMappingURL=notifications-ipc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications-ipc.js","sourceRoot":"","sources":["../../src/ipc/notifications-ipc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,UAAU,uBAAuB,CACrC,OAAgB,EAChB,cAA0C;IAE1C,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC9D,IAAI,CAAC,mBAAmB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;QACxD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;QACpC,KAAK,EAAE,mBAAmB,CAAC,KAAK;QAChC,IAAI,EAAE,mBAAmB,CAAC,IAAI;QAC9B,OAAO,EACL,mBAAmB,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;KACtE,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAC5B,KAAK,cAAc,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,IAAI,EAAE,CAAC;IACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAgB;IAEhB,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,SAAS,GAAG,OAAkC,CAAC;IACrD,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACnE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GACX,SAAS,CAAC,OAAO,KAAK,WAAW,IAAI,SAAS,CAAC,OAAO,KAAK,QAAQ;QACjE,CAAC,CAAC,SAAS,CAAC,OAAO;QACnB,CAAC,CAAC,QAAQ,CAAC;IACf,OAAO;QACL,KAAK,EAAE,wBAAwB,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;QACrD,IAAI,EACF,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;YAChC,CAAC,CAAC,wBAAwB,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC;YAC/C,CAAC,CAAC,SAAS;QACf,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa,EAAE,SAAiB;IAChE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,OAAO,CAAC;IAChD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { BrowserWindowType } from "../electron.js";
2
+ import type { DesktopWindowState, QuitSource } from "../types.js";
3
+ interface RegisterDesktopIpcOptions {
4
+ getCloseToTray: () => boolean;
5
+ setCloseToTray: (value: boolean) => void;
6
+ closeWindowOrQuit: (window: BrowserWindowType, source?: QuitSource) => void;
7
+ sendWindowState: (window: BrowserWindowType) => void;
8
+ showDesktopNotification: (payload: unknown) => {
9
+ shown: boolean;
10
+ };
11
+ }
12
+ export declare function registerDesktopIpc(options: RegisterDesktopIpcOptions): void;
13
+ export declare function windowState(window: BrowserWindowType): DesktopWindowState;
14
+ export {};
15
+ //# sourceMappingURL=window-ipc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window-ipc.d.ts","sourceRoot":"","sources":["../../src/ipc/window-ipc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAsB,MAAM,gBAAgB,CAAC;AAG5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAElE,UAAU,yBAAyB;IACjC,cAAc,EAAE,MAAM,OAAO,CAAC;IAC9B,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,iBAAiB,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5E,eAAe,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACrD,uBAAuB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CACnE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAsD3E;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,CAKzE"}