pinomad 0.13.0 → 0.14.1

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 (41) hide show
  1. package/dist/{chunk-kmzzjv53.js → chunk-1mjbt2z2.js} +143 -10
  2. package/dist/{chunk-90g1cg9n.js → chunk-3hfaejdx.js} +1 -1
  3. package/dist/{chunk-d9mq5d46.js → chunk-5ayqca95.js} +10 -8
  4. package/dist/{chunk-7mn38n4f.js → chunk-63ymn5c9.js} +2 -2
  5. package/dist/{chunk-563fnad9.js → chunk-6j6hkfbj.js} +8 -4
  6. package/dist/{chunk-pqe7q1s7.js → chunk-6vbp1vva.js} +2 -1
  7. package/dist/chunk-8g2e77gf.js +46 -0
  8. package/dist/{chunk-6th9xv39.js → chunk-97ssw1c0.js} +9 -7
  9. package/dist/{chunk-g3ahp7b9.js → chunk-9trbbz4r.js} +1 -1
  10. package/dist/{chunk-4fferbxw.js → chunk-e59k3bmz.js} +213 -30
  11. package/dist/{chunk-s0h7c7da.js → chunk-ega1wnkg.js} +1 -1
  12. package/dist/{chunk-maqv34cs.js → chunk-evbv1fkn.js} +3 -3
  13. package/dist/{chunk-d4tq62yr.js → chunk-f6741a5q.js} +12 -11
  14. package/dist/{chunk-m51mq8vh.js → chunk-fdhbzwxj.js} +12 -10
  15. package/dist/{chunk-aapsc9g0.js → chunk-hfwa1vt5.js} +1952 -295
  16. package/dist/{chunk-t91zt5f0.js → chunk-hg9gs396.js} +1 -1
  17. package/dist/chunk-mdjk0s0t.js +23 -0
  18. package/dist/{chunk-wd7aracm.js → chunk-mxwcnnkg.js} +1 -303
  19. package/dist/chunk-pte4peaf.js +315 -0
  20. package/dist/{chunk-53xv3fny.js → chunk-s66evzar.js} +2446 -416
  21. package/dist/chunk-vedqqhbd.js +240 -0
  22. package/dist/{chunk-ra86wjp5.js → chunk-w9zpff3n.js} +11 -6
  23. package/dist/pinomad.js +12 -12
  24. package/package.json +5 -1
  25. package/web/assets/{core-BHm2gdHL.js → core-BWHGsFpV.js} +1 -1
  26. package/web/assets/{highlighted-diff-DrHvSLK9.js → highlighted-diff-DJ7KZCpS.js} +2 -2
  27. package/web/assets/{highlights-1aLwssz-.js → highlights-CyEmo6OI.js} +1 -1
  28. package/web/assets/{highlights-themes-C1p4pFYS.js → highlights-themes-CSNkBojy.js} +1 -1
  29. package/web/assets/index-C_qkbyL7.css +1 -0
  30. package/web/assets/index-DefQtCI2.js +396 -0
  31. package/web/assets/{shiki-BwyCm3kZ.js → shiki-BzCmRG-v.js} +2 -2
  32. package/web/assets/{shiki-langs-CMlALLSg.js → shiki-langs-DOkjyV4d.js} +1 -1
  33. package/web/assets/{stream-tokenizer-BlgIhw0y.js → stream-tokenizer-CBPqFe4Z.js} +1 -1
  34. package/web/assets/{theming-themes-DDvoqEqT.js → theming-themes-wKVca0aB.js} +1 -1
  35. package/web/assets/{xterm-view-BnKOnF3C.js → xterm-view-CKa1-QCM.js} +12 -12
  36. package/web/index.html +3 -2
  37. package/web/theme-boot.js +11 -0
  38. package/dist/chunk-sd640dt7.js +0 -22
  39. package/dist/chunk-t6fw0wa9.js +0 -96
  40. package/web/assets/index-A_AUJoO6.css +0 -1
  41. package/web/assets/index-BafYMKiN.js +0 -396
@@ -7,6 +7,7 @@ import {
7
7
  UNAUTHORIZED_CLOSE_CODE,
8
8
  addEarlier,
9
9
  checkoutOf,
10
+ classify,
10
11
  conversationStream,
11
12
  docStream,
12
13
  homeOf,
@@ -14,12 +15,14 @@ import {
14
15
  hostSupportsCall,
15
16
  hostSupportsFeature,
16
17
  isBusy,
18
+ isProcessesHello,
17
19
  isRtcHello,
18
20
  organize,
19
21
  parseRtcMaxMessageSize,
22
+ processStream,
20
23
  rtcSelectedPair,
21
24
  withEarlier
22
- } from "./chunk-kmzzjv53.js";
25
+ } from "./chunk-1mjbt2z2.js";
23
26
  import {
24
27
  SECURE_PROLOGUE,
25
28
  SecureSession,
@@ -28,7 +31,7 @@ import {
28
31
  initiateIK,
29
32
  isLoopbackUrl,
30
33
  parseEndpointSet
31
- } from "./chunk-pqe7q1s7.js";
34
+ } from "./chunk-6vbp1vva.js";
32
35
 
33
36
  // packages/protocol/src/remote-durable.ts
34
37
  import { applyImmutable } from "@earendil-works/chord/delta";
@@ -454,6 +457,7 @@ class RemoteClient {
454
457
  #state;
455
458
  #current;
456
459
  #side;
460
+ #acquiring = new Map;
457
461
  #nextCall = 1;
458
462
  #nextNotice = 1;
459
463
  #submissions = new Map;
@@ -466,10 +470,14 @@ class RemoteClient {
466
470
  #helloDefaults = {};
467
471
  #hostVersion;
468
472
  #hostTerminals;
473
+ #hostProcesses;
469
474
  #terminalWatchers = new Map;
470
475
  #terminalSinks = new Map;
471
476
  #terminalPositions = new Map;
472
477
  #terminalSizes = new Map;
478
+ #processWatchers = new Map;
479
+ #processSinks = new Map;
480
+ #processPositions = new Map;
473
481
  #attempt = 0;
474
482
  #rtcAttemptNonce = randomHex(8);
475
483
  #closed = false;
@@ -723,6 +731,7 @@ class RemoteClient {
723
731
  this.#helloDefaults = frame.defaults ?? {};
724
732
  this.#hostVersion = frame.hostVersion;
725
733
  this.#hostTerminals = isTerminalsHello(frame.terminals) ? frame.terminals : undefined;
734
+ this.#hostProcesses = isProcessesHello(frame.processes) ? frame.processes : undefined;
726
735
  this.#fresh.clear();
727
736
  const covered = new Set(hostStreams(hostMinor));
728
737
  for (const name of HOST_STREAM_NAMES) {
@@ -741,6 +750,7 @@ class RemoteClient {
741
750
  for (const stream of this.#conversationStreams(this.#side))
742
751
  this.#wanted.add(stream);
743
752
  this.#terminalsAvailability();
753
+ this.#processesAvailability();
744
754
  for (const stream of this.#wanted)
745
755
  this.#subscribe(stream);
746
756
  if (frame.endpointSet !== undefined) {
@@ -823,6 +833,7 @@ class RemoteClient {
823
833
  providers: null,
824
834
  settings: null,
825
835
  agents: null,
836
+ upgrade: null,
826
837
  host: this.#hostInfo()
827
838
  };
828
839
  this.#refresh();
@@ -830,6 +841,7 @@ class RemoteClient {
830
841
  view: this.#viewSource(),
831
842
  controller: this.#controller(),
832
843
  terminals: this.#terminals(),
844
+ processes: this.#processes(),
833
845
  setConnectionMode: (mode) => this.setConnectionMode(mode),
834
846
  rtcDiagnostics: () => this.rtcDiagnostics(),
835
847
  close: () => this.#close()
@@ -1990,6 +2002,8 @@ class RemoteClient {
1990
2002
  this.#fresh.add(frame.stream);
1991
2003
  this.#streamVersions.set(frame.stream, (this.#streamVersions.get(frame.stream) ?? 0) + 1);
1992
2004
  this.#refresh();
2005
+ if (this.#processWatchers.has(frame.stream))
2006
+ this.#notifyProcesses(frame.stream);
1993
2007
  for (const waiter of this.#snapshotWaiters.get(frame.stream)?.splice(0) ?? [])
1994
2008
  waiter.resolve();
1995
2009
  return;
@@ -1998,12 +2012,18 @@ class RemoteClient {
1998
2012
  return;
1999
2013
  this.#values.set(frame.stream, applyImmutable(this.#values.get(frame.stream), frame.ops));
2000
2014
  this.#refresh();
2015
+ if (this.#processWatchers.has(frame.stream))
2016
+ this.#notifyProcesses(frame.stream);
2001
2017
  return;
2002
2018
  case "output": {
2003
- const sink = this.#terminalSinks.get(frame.stream);
2019
+ const processSink = this.#processSinks.get(frame.stream);
2020
+ const sink = processSink ?? this.#terminalSinks.get(frame.stream);
2004
2021
  if (sink === undefined || !this.#wanted.has(frame.stream))
2005
2022
  return;
2006
- this.#terminalPositions.set(frame.stream, frame.seq);
2023
+ if (processSink === undefined)
2024
+ this.#terminalPositions.set(frame.stream, frame.seq);
2025
+ else
2026
+ this.#processPositions.set(frame.stream, frame.seq);
2007
2027
  sink.output(frame.data, frame.reset === true);
2008
2028
  return;
2009
2029
  }
@@ -2012,6 +2032,10 @@ class RemoteClient {
2012
2032
  this.#endTerminalStream(frame.stream, frame.reason);
2013
2033
  return;
2014
2034
  }
2035
+ if (frame.stream.startsWith("process:")) {
2036
+ this.#endProcessStream(frame.stream, frame.reason);
2037
+ return;
2038
+ }
2015
2039
  this.#wanted.delete(frame.stream);
2016
2040
  this.#values.delete(frame.stream);
2017
2041
  this.#earlier.delete(frame.stream);
@@ -2030,6 +2054,8 @@ class RemoteClient {
2030
2054
  this.#side = undefined;
2031
2055
  }
2032
2056
  this.#refresh();
2057
+ if (this.#processWatchers.has(frame.stream))
2058
+ this.#notifyProcesses(frame.stream);
2033
2059
  return;
2034
2060
  }
2035
2061
  case "result": {
@@ -2083,35 +2109,55 @@ class RemoteClient {
2083
2109
  return [conversationStream(id), ...this.#docs.map((doc) => docStream(doc.kind, id))];
2084
2110
  }
2085
2111
  async#acquire(id) {
2086
- const missing = this.#conversationStreams(id).filter((stream) => !this.#wanted.has(stream));
2087
- const stale = this.#conversationStreams(id).filter((stream) => this.#wanted.has(stream) && !this.#fresh.has(stream));
2088
- for (const stream of missing)
2089
- this.#wanted.add(stream);
2090
- const shown = Promise.all([...missing, ...stale].map((stream) => this.#snapshot(stream)));
2091
- for (const stream of missing) {
2092
- if (this.#helloReceived)
2093
- this.#subscribe(stream);
2094
- }
2095
- await shown;
2096
- }
2097
- #release(id, other) {
2098
- const keep = new Set(other === undefined ? [] : this.#conversationStreams(other));
2112
+ this.#acquiring.set(id, (this.#acquiring.get(id) ?? 0) + 1);
2113
+ try {
2114
+ const missing = this.#conversationStreams(id).filter((stream) => !this.#wanted.has(stream));
2115
+ const stale = this.#conversationStreams(id).filter((stream) => this.#wanted.has(stream) && !this.#fresh.has(stream));
2116
+ for (const stream of missing)
2117
+ this.#wanted.add(stream);
2118
+ const shown = Promise.all([...missing, ...stale].map((stream) => this.#snapshot(stream)));
2119
+ for (const stream of missing) {
2120
+ if (this.#helloReceived)
2121
+ this.#subscribe(stream);
2122
+ }
2123
+ await shown;
2124
+ } finally {
2125
+ const left = (this.#acquiring.get(id) ?? 1) - 1;
2126
+ if (left > 0)
2127
+ this.#acquiring.set(id, left);
2128
+ else
2129
+ this.#acquiring.delete(id);
2130
+ }
2131
+ }
2132
+ #streamStillWanted(stream) {
2133
+ if (this.#processWatchers.has(stream))
2134
+ return true;
2135
+ for (const id of [this.#current, this.#side, ...this.#acquiring.keys()]) {
2136
+ if (id !== undefined && this.#conversationStreams(id).includes(stream))
2137
+ return true;
2138
+ }
2139
+ return false;
2140
+ }
2141
+ #releaseStream(stream) {
2142
+ this.#wanted.delete(stream);
2143
+ this.#values.delete(stream);
2144
+ this.#earlier.delete(stream);
2145
+ this.#loadingEarlier.delete(stream);
2146
+ this.#fresh.delete(stream);
2147
+ for (const waiter of this.#snapshotWaiters.get(stream)?.splice(0) ?? [])
2148
+ waiter.resolve();
2149
+ this.#send({ type: "unsubscribe", stream });
2150
+ }
2151
+ #release(id) {
2099
2152
  for (const stream of this.#conversationStreams(id)) {
2100
- if (keep.has(stream))
2153
+ if (this.#streamStillWanted(stream))
2101
2154
  continue;
2102
- this.#wanted.delete(stream);
2103
- this.#values.delete(stream);
2104
- this.#earlier.delete(stream);
2105
- this.#loadingEarlier.delete(stream);
2106
- this.#fresh.delete(stream);
2107
- for (const waiter of this.#snapshotWaiters.get(stream)?.splice(0) ?? [])
2108
- waiter.resolve();
2109
- this.#send({ type: "unsubscribe", stream });
2155
+ this.#releaseStream(stream);
2110
2156
  }
2111
2157
  }
2112
2158
  #subscribe(stream) {
2113
2159
  const refs = stream.startsWith("conversation:") && hostSupportsFeature(this.#hostMinor, "imageRefs");
2114
- const since = this.#terminalPositions.get(stream);
2160
+ const since = stream.startsWith("process:") ? this.#processPositions.get(stream) : this.#terminalPositions.get(stream);
2115
2161
  const window = this.#window(stream);
2116
2162
  this.#send({
2117
2163
  type: "subscribe",
@@ -2268,6 +2314,122 @@ class RemoteClient {
2268
2314
  close: (terminalId) => this.#terminalCall("closeTerminal", { terminalId }).then(() => {})
2269
2315
  };
2270
2316
  }
2317
+ #processesUnavailable() {
2318
+ if (!hostSupportsFeature(this.#hostMinor, "processes")) {
2319
+ return "The host is too old for background processes (needs protocol 5.32); run `pinomad upgrade` on the host";
2320
+ }
2321
+ if (this.#hostProcesses === undefined)
2322
+ return "The host couldn't load its process module; its log says which package is missing";
2323
+ return;
2324
+ }
2325
+ #processDocDeclared() {
2326
+ return this.#docs.some((doc) => doc.kind === "pinomad.processes");
2327
+ }
2328
+ #processesAvailability() {
2329
+ const listable = hostSupportsFeature(this.#hostMinor, "processes") && this.#processDocDeclared();
2330
+ for (const stream of [...this.#processWatchers.keys()]) {
2331
+ if (listable) {
2332
+ this.#wanted.add(stream);
2333
+ } else {
2334
+ this.#wanted.delete(stream);
2335
+ this.#values.delete(stream);
2336
+ for (const waiter of this.#snapshotWaiters.get(stream)?.splice(0) ?? [])
2337
+ waiter.resolve();
2338
+ }
2339
+ this.#notifyProcesses(stream);
2340
+ }
2341
+ const reason = this.#processesUnavailable();
2342
+ if (reason === undefined) {
2343
+ for (const stream of this.#processSinks.keys())
2344
+ this.#wanted.add(stream);
2345
+ return;
2346
+ }
2347
+ for (const stream of [...this.#processSinks.keys()])
2348
+ this.#endProcessStream(stream, reason);
2349
+ }
2350
+ #notifyProcesses(stream) {
2351
+ const state = this.#processState(stream);
2352
+ for (const listener of [...this.#processWatchers.get(stream) ?? []])
2353
+ listener(state);
2354
+ }
2355
+ #processState(stream) {
2356
+ const value = this.#values.get(stream);
2357
+ const presentation = this.#docs.find((doc) => doc.kind === "pinomad.processes")?.presentation ?? "pinomad.processes";
2358
+ const classified = classify(presentation, value);
2359
+ const processes = classified.type === "pinomad.processes" ? classified.value.processes : [];
2360
+ const reason = this.#processesUnavailable();
2361
+ return {
2362
+ processes: [...processes],
2363
+ ...reason === undefined ? {} : { unavailable: reason }
2364
+ };
2365
+ }
2366
+ #endProcessStream(stream, reason) {
2367
+ this.#wanted.delete(stream);
2368
+ const sink = this.#processSinks.get(stream);
2369
+ this.#processSinks.delete(stream);
2370
+ this.#processPositions.delete(stream);
2371
+ sink?.ended(reason);
2372
+ }
2373
+ #processCall(method, args) {
2374
+ const reason = this.#processesUnavailable();
2375
+ return reason === undefined ? this.#call(method, args) : Promise.reject(new Error(reason));
2376
+ }
2377
+ #processes() {
2378
+ return {
2379
+ watch: (conversationId, listener) => {
2380
+ const stream = docStream("pinomad.processes", conversationId);
2381
+ let listeners = this.#processWatchers.get(stream);
2382
+ const first = listeners === undefined;
2383
+ if (listeners === undefined)
2384
+ this.#processWatchers.set(stream, listeners = new Set);
2385
+ listeners.add(listener);
2386
+ listener(this.#processState(stream));
2387
+ if (first && hostSupportsFeature(this.#hostMinor, "processes") && this.#processDocDeclared()) {
2388
+ this.#wanted.add(stream);
2389
+ if (this.#helloReceived)
2390
+ this.#subscribe(stream);
2391
+ }
2392
+ return () => {
2393
+ if (!listeners.delete(listener) || listeners.size > 0)
2394
+ return;
2395
+ this.#processWatchers.delete(stream);
2396
+ if (this.#streamStillWanted(stream))
2397
+ return;
2398
+ if (!this.#wanted.has(stream))
2399
+ return;
2400
+ this.#releaseStream(stream);
2401
+ };
2402
+ },
2403
+ attach: (processId, since, sink) => {
2404
+ const stream = processStream(processId);
2405
+ const reason = this.#processesUnavailable();
2406
+ if (reason !== undefined) {
2407
+ sink.ended(reason);
2408
+ return () => {};
2409
+ }
2410
+ if (this.#processSinks.has(stream) && this.#wanted.has(stream))
2411
+ this.#send({ type: "unsubscribe", stream });
2412
+ this.#processSinks.set(stream, sink);
2413
+ if (since === undefined)
2414
+ this.#processPositions.delete(stream);
2415
+ else
2416
+ this.#processPositions.set(stream, since);
2417
+ this.#wanted.add(stream);
2418
+ if (this.#helloReceived)
2419
+ this.#subscribe(stream);
2420
+ return () => {
2421
+ if (this.#processSinks.get(stream) !== sink)
2422
+ return;
2423
+ this.#processSinks.delete(stream);
2424
+ this.#processPositions.delete(stream);
2425
+ if (this.#wanted.delete(stream))
2426
+ this.#send({ type: "unsubscribe", stream });
2427
+ };
2428
+ },
2429
+ stop: (conversationId, processId) => this.#processCall("stopProcess", { conversationId, id: processId }).then(({ state }) => state),
2430
+ unavailable: () => this.#processesUnavailable()
2431
+ };
2432
+ }
2271
2433
  #host(name) {
2272
2434
  return this.#values.get(name);
2273
2435
  }
@@ -2782,6 +2944,7 @@ class RemoteClient {
2782
2944
  providers: this.#host("providers") ?? null,
2783
2945
  settings: this.#host("settings") ?? null,
2784
2946
  agents: this.#host("agents") ?? null,
2947
+ upgrade: this.#host("upgrade") ?? null,
2785
2948
  defaults: this.#effectiveDefaults(this.#helloDefaults)
2786
2949
  });
2787
2950
  }
@@ -2846,6 +3009,11 @@ class RemoteClient {
2846
3009
  }
2847
3010
  });
2848
3011
  }
3012
+ #requireUpgrade() {
3013
+ if (!hostSupportsCall(this.#hostMinor, "startUpgrade")) {
3014
+ throw new Error("The host is too old for this (needs protocol 5.30); run `pinomad upgrade` on the host");
3015
+ }
3016
+ }
2849
3017
  #command(operation) {
2850
3018
  this.#commands = this.#commands.then(operation).then(() => {}, (error) => this.#notice("error", error instanceof Error ? error.message : String(error)));
2851
3019
  return this.#commands;
@@ -3133,8 +3301,23 @@ class RemoteClient {
3133
3301
  if (patch.hostName !== undefined && !hostSupportsFeature(this.#hostMinor, "hostName")) {
3134
3302
  throw new Error("The host is too old for this (needs protocol 5.12); run `pinomad upgrade` on the host");
3135
3303
  }
3304
+ if (patch.autoUpgrade !== undefined && !hostSupportsFeature(this.#hostMinor, "autoUpgrade")) {
3305
+ throw new Error("The host is too old for this (needs protocol 5.30); run `pinomad upgrade` on the host");
3306
+ }
3136
3307
  return this.#call("updateSettings", { patch });
3137
3308
  }),
3309
+ startUpgrade: async (when) => {
3310
+ this.#requireUpgrade();
3311
+ await this.#call("startUpgrade", { when });
3312
+ },
3313
+ cancelUpgrade: async () => {
3314
+ this.#requireUpgrade();
3315
+ await this.#call("cancelUpgrade", {});
3316
+ },
3317
+ checkUpgrade: async () => {
3318
+ this.#requireUpgrade();
3319
+ await this.#call("checkUpgrade", {});
3320
+ },
3138
3321
  createAgent: (role) => this.#request(async () => {
3139
3322
  if (!hostSupportsCall(this.#hostMinor, "createAgent")) {
3140
3323
  throw new Error("The host is too old for this (needs protocol 5.6); run `pinomad upgrade` on the host");
@@ -3171,7 +3354,7 @@ class RemoteClient {
3171
3354
  await this.#acquire(id);
3172
3355
  this.#current = id;
3173
3356
  if (previous !== undefined)
3174
- this.#release(previous, this.#side);
3357
+ this.#release(previous);
3175
3358
  this.#refresh();
3176
3359
  }
3177
3360
  #unshow() {
@@ -3179,7 +3362,7 @@ class RemoteClient {
3179
3362
  if (previous === undefined)
3180
3363
  return;
3181
3364
  this.#current = undefined;
3182
- this.#release(previous, this.#side);
3365
+ this.#release(previous);
3183
3366
  this.#refresh();
3184
3367
  }
3185
3368
  async#clear() {
@@ -3194,7 +3377,7 @@ class RemoteClient {
3194
3377
  await this.#acquire(id);
3195
3378
  this.#side = id;
3196
3379
  if (previous !== undefined)
3197
- this.#release(previous, this.#current);
3380
+ this.#release(previous);
3198
3381
  this.#refresh();
3199
3382
  }
3200
3383
  #close() {
@@ -1,6 +1,6 @@
1
1
  // apps/host/src/distribution.ts
2
2
  import { fileURLToPath } from "node:url";
3
- var packagedVersion = "0.13.0";
3
+ var packagedVersion = "0.14.1";
4
4
  var webRoot = fileURLToPath(new URL(packagedVersion === undefined ? "../../web/dist" : "../web/", import.meta.url));
5
5
  var hostEntry = packagedVersion === undefined ? { script: fileURLToPath(new URL("./main.ts", import.meta.url)), args: [] } : { script: fileURLToPath(new URL("./pinomad.js", import.meta.url)), args: ["host"] };
6
6
  var commandHint = (name) => packagedVersion === undefined ? `bun run ${name}` : `pinomad ${name}`;
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  connectRemoteDurable
3
- } from "./chunk-4fferbxw.js";
4
- import"./chunk-kmzzjv53.js";
3
+ } from "./chunk-e59k3bmz.js";
4
+ import"./chunk-1mjbt2z2.js";
5
5
  import {
6
6
  isLoopbackUrl
7
- } from "./chunk-pqe7q1s7.js";
7
+ } from "./chunk-6vbp1vva.js";
8
8
  import {
9
9
  hostAddress
10
10
  } from "./chunk-ngf1zatm.js";
@@ -3,16 +3,19 @@ import {
3
3
  joinServer,
4
4
  openServiceSlot,
5
5
  writeService
6
- } from "./chunk-d9mq5d46.js";
7
- import"./chunk-7mn38n4f.js";
8
- import"./chunk-563fnad9.js";
9
- import"./chunk-t91zt5f0.js";
6
+ } from "./chunk-5ayqca95.js";
7
+ import"./chunk-63ymn5c9.js";
8
+ import"./chunk-6j6hkfbj.js";
9
+ import"./chunk-hg9gs396.js";
10
10
  import {
11
11
  normalizeOrigin,
12
12
  readRemovalNotice,
13
13
  readServerConfig
14
14
  } from "./chunk-nq57fdnq.js";
15
- import"./chunk-g3ahp7b9.js";
15
+ import"./chunk-9trbbz4r.js";
16
+ import"./chunk-pte4peaf.js";
17
+ import"./chunk-e59k3bmz.js";
18
+ import"./chunk-kzbzacz9.js";
16
19
  import {
17
20
  LAUNCHER_EXECUTABLE,
18
21
  argValue,
@@ -20,17 +23,15 @@ import {
20
23
  serviceManager,
21
24
  withoutArg,
22
25
  withoutRelayArgs
23
- } from "./chunk-wd7aracm.js";
24
- import"./chunk-4fferbxw.js";
25
- import"./chunk-kzbzacz9.js";
26
- import"./chunk-kmzzjv53.js";
27
- import"./chunk-pqe7q1s7.js";
26
+ } from "./chunk-mxwcnnkg.js";
27
+ import"./chunk-1mjbt2z2.js";
28
+ import"./chunk-6vbp1vva.js";
28
29
  import {
29
30
  DEFAULT_DATA_DIR
30
31
  } from "./chunk-ngf1zatm.js";
31
32
  import {
32
33
  commandHint
33
- } from "./chunk-s0h7c7da.js";
34
+ } from "./chunk-ega1wnkg.js";
34
35
  import"./chunk-df32avw6.js";
35
36
 
36
37
  // apps/host/src/cli/up.ts
@@ -3,11 +3,11 @@ import {
3
3
  assertSecureServerOrigin,
4
4
  probeServerAccounts,
5
5
  runServerOperation
6
- } from "./chunk-7mn38n4f.js";
6
+ } from "./chunk-63ymn5c9.js";
7
7
  import {
8
8
  loadHostKey,
9
9
  loadRelayKey
10
- } from "./chunk-t91zt5f0.js";
10
+ } from "./chunk-hg9gs396.js";
11
11
  import {
12
12
  readRemovalNotice,
13
13
  readServerConfig,
@@ -15,23 +15,25 @@ import {
15
15
  } from "./chunk-nq57fdnq.js";
16
16
  import {
17
17
  relayHostId
18
- } from "./chunk-g3ahp7b9.js";
18
+ } from "./chunk-9trbbz4r.js";
19
+ import {
20
+ restartService
21
+ } from "./chunk-pte4peaf.js";
22
+ import"./chunk-e59k3bmz.js";
23
+ import"./chunk-kzbzacz9.js";
19
24
  import {
20
25
  argValue,
21
- restartService,
22
26
  serviceManager,
23
27
  withoutRelayArgs
24
- } from "./chunk-wd7aracm.js";
25
- import"./chunk-4fferbxw.js";
26
- import"./chunk-kzbzacz9.js";
27
- import"./chunk-kmzzjv53.js";
28
- import"./chunk-pqe7q1s7.js";
28
+ } from "./chunk-mxwcnnkg.js";
29
+ import"./chunk-1mjbt2z2.js";
30
+ import"./chunk-6vbp1vva.js";
29
31
  import {
30
32
  DEFAULT_DATA_DIR
31
33
  } from "./chunk-ngf1zatm.js";
32
34
  import {
33
35
  commandHint
34
- } from "./chunk-s0h7c7da.js";
36
+ } from "./chunk-ega1wnkg.js";
35
37
  import"./chunk-df32avw6.js";
36
38
 
37
39
  // apps/host/src/cli/leave.ts