alasio 5.1.0 → 7.0.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 (132) hide show
  1. package/dist/cli/src/branches.js +53 -22
  2. package/dist/cli/src/branches.js.map +1 -1
  3. package/dist/cli/src/capacity.js +46 -0
  4. package/dist/cli/src/capacity.js.map +1 -0
  5. package/dist/cli/src/cluster/docker-engine.js +6 -4
  6. package/dist/cli/src/cluster/docker-engine.js.map +1 -1
  7. package/dist/cli/src/cluster/docker.js +49 -10
  8. package/dist/cli/src/cluster/docker.js.map +1 -1
  9. package/dist/cli/src/cluster/host.js +45 -19
  10. package/dist/cli/src/cluster/host.js.map +1 -1
  11. package/dist/cli/src/cluster/k3s.js +109 -9
  12. package/dist/cli/src/cluster/k3s.js.map +1 -1
  13. package/dist/cli/src/cluster/node.js +94 -50
  14. package/dist/cli/src/cluster/node.js.map +1 -1
  15. package/dist/cli/src/cluster/tar.js +43 -1
  16. package/dist/cli/src/cluster/tar.js.map +1 -1
  17. package/dist/cli/src/commands/branch.js +9 -4
  18. package/dist/cli/src/commands/branch.js.map +1 -1
  19. package/dist/cli/src/commands/restore-filer-store.js +247 -0
  20. package/dist/cli/src/commands/restore-filer-store.js.map +1 -0
  21. package/dist/cli/src/commands/status.js +141 -12
  22. package/dist/cli/src/commands/status.js.map +1 -1
  23. package/dist/cli/src/commands/uninstall.js +1 -1
  24. package/dist/cli/src/commands/uninstall.js.map +1 -1
  25. package/dist/cli/src/commands/up.js +42 -4
  26. package/dist/cli/src/commands/up.js.map +1 -1
  27. package/dist/cli/src/commands/upgrade.js +22 -6
  28. package/dist/cli/src/commands/upgrade.js.map +1 -1
  29. package/dist/cli/src/commands.js +2 -1
  30. package/dist/cli/src/commands.js.map +1 -1
  31. package/dist/cli/src/config.js +13 -4
  32. package/dist/cli/src/config.js.map +1 -1
  33. package/dist/cli/src/cpu-baseline.js +97 -0
  34. package/dist/cli/src/cpu-baseline.js.map +1 -0
  35. package/dist/cli/src/install.js +44 -11
  36. package/dist/cli/src/install.js.map +1 -1
  37. package/dist/cli/src/kept-releases.js +59 -0
  38. package/dist/cli/src/kept-releases.js.map +1 -0
  39. package/dist/cli/src/kube/api.js +13 -5
  40. package/dist/cli/src/kube/api.js.map +1 -1
  41. package/dist/cli/src/kube/apply.js +116 -13
  42. package/dist/cli/src/kube/apply.js.map +1 -1
  43. package/dist/cli/src/kube/autoscalers.js +48 -0
  44. package/dist/cli/src/kube/autoscalers.js.map +1 -0
  45. package/dist/cli/src/kube/object-store-scale.js +116 -0
  46. package/dist/cli/src/kube/object-store-scale.js.map +1 -0
  47. package/dist/cli/src/kube/rollout.js +23 -0
  48. package/dist/cli/src/kube/rollout.js.map +1 -1
  49. package/dist/cli/src/manifests/admission.js +416 -0
  50. package/dist/cli/src/manifests/admission.js.map +1 -0
  51. package/dist/cli/src/manifests/agent-sandbox.js +6 -3
  52. package/dist/cli/src/manifests/agent-sandbox.js.map +1 -1
  53. package/dist/cli/src/manifests/alasio.js +165 -25
  54. package/dist/cli/src/manifests/alasio.js.map +1 -1
  55. package/dist/cli/src/manifests/branch.js +2 -1
  56. package/dist/cli/src/manifests/branch.js.map +1 -1
  57. package/dist/cli/src/manifests/cloudeventsources.eventing.keda.sh.json +219 -0
  58. package/dist/cli/src/manifests/clustercloudeventsources.eventing.keda.sh.json +218 -0
  59. package/dist/cli/src/manifests/clustertriggerauthentications.keda.sh.json +997 -0
  60. package/dist/cli/src/manifests/collector.js +92 -45
  61. package/dist/cli/src/manifests/collector.js.map +1 -1
  62. package/dist/cli/src/manifests/common.js +34 -8
  63. package/dist/cli/src/manifests/common.js.map +1 -1
  64. package/dist/cli/src/manifests/config.js +273 -35
  65. package/dist/cli/src/manifests/config.js.map +1 -1
  66. package/dist/cli/src/manifests/controllers.js +39 -0
  67. package/dist/cli/src/manifests/controllers.js.map +1 -0
  68. package/dist/cli/src/manifests/disruption.js +47 -0
  69. package/dist/cli/src/manifests/disruption.js.map +1 -0
  70. package/dist/cli/src/manifests/grafana.js +66 -10
  71. package/dist/cli/src/manifests/grafana.js.map +1 -1
  72. package/dist/cli/src/manifests/headroom.js +40 -0
  73. package/dist/cli/src/manifests/headroom.js.map +1 -0
  74. package/dist/cli/src/manifests/index.js +20 -6
  75. package/dist/cli/src/manifests/index.js.map +1 -1
  76. package/dist/cli/src/manifests/juicefs-csi.js +9 -6
  77. package/dist/cli/src/manifests/juicefs-csi.js.map +1 -1
  78. package/dist/cli/src/manifests/keda.js +271 -0
  79. package/dist/cli/src/manifests/keda.js.map +1 -0
  80. package/dist/cli/src/manifests/lake.js +13 -5
  81. package/dist/cli/src/manifests/lake.js.map +1 -1
  82. package/dist/cli/src/manifests/neon.js +196 -51
  83. package/dist/cli/src/manifests/neon.js.map +1 -1
  84. package/dist/cli/src/manifests/network-policies.js +177 -28
  85. package/dist/cli/src/manifests/network-policies.js.map +1 -1
  86. package/dist/cli/src/manifests/node-agent.js +107 -0
  87. package/dist/cli/src/manifests/node-agent.js.map +1 -0
  88. package/dist/cli/src/manifests/object-store.js +543 -82
  89. package/dist/cli/src/manifests/object-store.js.map +1 -1
  90. package/dist/cli/src/manifests/priorities.js +31 -0
  91. package/dist/cli/src/manifests/priorities.js.map +1 -0
  92. package/dist/cli/src/manifests/scaledjobs.keda.sh.json +7507 -0
  93. package/dist/cli/src/manifests/scaledobjects.keda.sh.json +564 -0
  94. package/dist/cli/src/manifests/scalers.js +24 -0
  95. package/dist/cli/src/manifests/scalers.js.map +1 -0
  96. package/dist/cli/src/manifests/sizing.js +40 -0
  97. package/dist/cli/src/manifests/sizing.js.map +1 -0
  98. package/dist/cli/src/manifests/triggerauthentications.keda.sh.json +992 -0
  99. package/dist/cli/src/manifests/valkey.js +63 -35
  100. package/dist/cli/src/manifests/valkey.js.map +1 -1
  101. package/dist/cli/src/manifests/verticalpodautoscalercheckpoints.autoscaling.k8s.io.json +250 -0
  102. package/dist/cli/src/manifests/verticalpodautoscalers.autoscaling.k8s.io.json +837 -0
  103. package/dist/cli/src/manifests/vpa.js +220 -0
  104. package/dist/cli/src/manifests/vpa.js.map +1 -0
  105. package/dist/cli/src/manifests/workspace-storage.js +12 -2
  106. package/dist/cli/src/manifests/workspace-storage.js.map +1 -1
  107. package/dist/cli/src/object-store.js +57 -0
  108. package/dist/cli/src/object-store.js.map +1 -0
  109. package/dist/cli/src/release.js +6 -6
  110. package/dist/cli/src/target.js +1 -1
  111. package/dist/cli/src/target.js.map +1 -1
  112. package/dist/cluster/node/pins.json +6 -2
  113. package/dist/neon/control/branches.js +31 -12
  114. package/dist/neon/control/branches.js.map +1 -1
  115. package/dist/neon/control/endpoints.js +108 -0
  116. package/dist/neon/control/endpoints.js.map +1 -0
  117. package/dist/neon/control/scram.js +13 -1
  118. package/dist/neon/control/scram.js.map +1 -1
  119. package/dist/neon/control/secrets.js +52 -8
  120. package/dist/neon/control/secrets.js.map +1 -1
  121. package/dist/src/kube/busy-label.js +13 -0
  122. package/dist/src/kube/busy-label.js.map +1 -0
  123. package/dist/src/kube/config.js +30 -4
  124. package/dist/src/kube/config.js.map +1 -1
  125. package/dist/src/kube/sandbox-shape.js +98 -0
  126. package/dist/src/kube/sandbox-shape.js.map +1 -0
  127. package/dist/src/node-agent/names.js +74 -0
  128. package/dist/src/node-agent/names.js.map +1 -0
  129. package/dist/src/sandbox/names.js +44 -0
  130. package/dist/src/sandbox/names.js.map +1 -0
  131. package/package.json +2 -2
  132. package/dist/cluster/node/config-v3.toml.tmpl +0 -12
@@ -1,12 +1,15 @@
1
1
  /** `alasio up`: makes or starts the cluster on this machine, applies alasio, and waits until it runs. */
2
- import { Console, Effect } from "effect";
2
+ import { Console, Effect, Schema } from "effect";
3
3
  import { Command } from "effect/cli";
4
4
  import { DockerCluster } from "../cluster/docker.js";
5
5
  import { HostCluster } from "../cluster/host.js";
6
6
  import { inotifyStep, requireLocalMachine } from "../cluster/machine.js";
7
7
  import { Root } from "../cluster/root.js";
8
8
  import { loadConfig } from "../config.js";
9
- import { install } from "../install.js";
9
+ import { baselineShortfalls } from "../cpu-baseline.js";
10
+ import { checkInstallation, install } from "../install.js";
11
+ import { kind, KubeApi } from "../kube/api.js";
12
+ import { NAMESPACE } from "../manifests/common.js";
10
13
  import { VERSION } from "../release.js";
11
14
  import { describeTarget, dockerCluster, kubeApi, resolveTarget } from "../target.js";
12
15
  import { timeoutFlag, waitOptions } from "./common.js";
@@ -27,9 +30,42 @@ export const ensureCluster = (target) => Effect.gen(function* () {
27
30
  yield* Effect.flatMap(Root, (root) => root.run(raise ? [raise] : []));
28
31
  yield* Effect.provide(Effect.flatMap(DockerCluster, (cluster) => cluster.up(target.kubeconfig.path)), dockerCluster(target.cluster));
29
32
  });
33
+ /** The cluster on this machine alasio made is stopped, so what an upgrade would refuse cannot be checked before it changes the machine. */
34
+ export class ClusterStopped extends Schema.TaggedError()("ClusterStopped", {
35
+ cluster: Schema.String,
36
+ }) {
37
+ get message() {
38
+ return `${this.cluster} does not answer, so alasio cannot check whether it would refuse this upgrade before it changes this machine ` +
39
+ "for it: start it as it is, with the alasio that made it (its alasio up), then upgrade";
40
+ }
41
+ }
42
+ /**
43
+ * Runs `check`, which refuses what is not to be done, before `ensureCluster` changes anything
44
+ * of this machine for the cluster on it (k3s, gVisor, alasio's stamp of them), where that
45
+ * cluster answers. One alasio has not made yet holds nothing of alasio's to refuse. One it
46
+ * made, its kubeconfig written, that does not answer, as it is stopped, holds an
47
+ * installation: `whenStopped` says whether to go on, as up does, which starts it and checks
48
+ * as it applies alasio, or to refuse, as an upgrade does, which would change the machine
49
+ * before it could check. A cluster a kubeconfig reaches, which ensureCluster leaves alone, is
50
+ * checked as alasio is applied.
51
+ */
52
+ export const refuseFirst = (target, check, whenStopped) => Effect.gen(function* () {
53
+ if (target._tag === "Kubeconfig")
54
+ return;
55
+ const answers = Effect.flatMap(KubeApi, (kube) => kube.get({ ...kind("Namespace"), name: NAMESPACE })).pipe(Effect.as(true), Effect.catchIf((error) => error.status === undefined, () => Effect.succeed(false)));
56
+ const checked = Effect.gen(function* () {
57
+ if (yield* answers)
58
+ return yield* check;
59
+ if (whenStopped === "refuse")
60
+ return yield* new ClusterStopped({ cluster: describeTarget(target) });
61
+ });
62
+ yield* Effect.provide(checked, kubeApi(target)).pipe(Effect.catchTag("KubeconfigUnusable", () => Effect.void));
63
+ });
30
64
  /** Where alasio runs, and what the operator does next. */
31
- export const announce = (target, { bot, claude }) => Console.log([
65
+ export const announce = (target, { bot, claude, cpuBaseline }) => Console.log([
32
66
  `alasio ${VERSION} runs in ${describeTarget(target)}.`,
67
+ // What keeps sessions from being snapshotted, or restored on a node, if anything.
68
+ ...(cpuBaseline ? baselineShortfalls(cpuBaseline) : []),
33
69
  "",
34
70
  `Message ${bot.username ? `@${bot.username}` : "your bot"} on Telegram to talk to it.`,
35
71
  ...(claude ? [] : ["Claude Code has no token yet: alasio init asks for one, which `claude setup-token` makes."]),
@@ -39,6 +75,7 @@ export const announce = (target, { bot, claude }) => Console.log([
39
75
  /** Brings up what `config` describes, waiting `timeout` at most for it to run. */
40
76
  export const bringUp = Effect.fnUntraced(function* (config, timeout) {
41
77
  const target = yield* resolveTarget(config);
78
+ yield* refuseFirst(target, Effect.asVoid(checkInstallation(config)), "go on");
42
79
  yield* ensureCluster(target);
43
80
  const installed = yield* Effect.provide(install(config, waitOptions(timeout)), kubeApi(target));
44
81
  yield* announce(target, installed);
@@ -47,6 +84,7 @@ export const up = Command.make("up", { timeout: timeoutFlag }, ({ timeout }) =>
47
84
  "Linux on x86-64: k3s on the machine itself, installing or upgrading k3s and gVisor and setting k3s as the config says, or " +
48
85
  "a cluster in Docker; for either, raising its inotify limits where they are too low for it. What it changes on the machine " +
49
86
  "it changes as root, through sudo, at once, after saying what. Then it applies alasio as the config says, " +
50
- "with this version's images; and waits until it runs, saying what it waits for. Run it again after changing the config. " +
87
+ "with this version's images, and with KEDA and VPA, which scale and size its components, unless the cluster has its own, " +
88
+ "which the config then says to use; and waits until it runs, saying what it waits for. Run it again after changing the config. " +
51
89
  "Past --timeout it says what is still not running and why."));
52
90
  //# sourceMappingURL=up.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"up.js","sourceRoot":"","sources":["../../../../src/commands/up.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"up.js","sourceRoot":"","sources":["../../../../src/commands/up.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,15 @@
1
1
  import { Console, Effect } from "effect";
2
- import { Command } from "effect/cli";
2
+ import { Command, Flag } from "effect/cli";
3
+ import { refuseBranchesOfOtherReleases } from "../branches.js";
3
4
  import { loadConfig } from "../config.js";
4
- import { install, installationObjects, installConfig } from "../install.js";
5
+ import { checkInstallation, install, installationObjects, installConfig } from "../install.js";
5
6
  import { kind, KubeApi } from "../kube/api.js";
6
7
  import { INSTALLATION_SELECTOR } from "../kube/apply.js";
7
8
  import { RELEASE } from "../manifests/common.js";
8
9
  import { VERSION } from "../release.js";
9
- import { kubeApi, resolveTarget } from "../target.js";
10
+ import { describeTarget, kubeApi, resolveTarget } from "../target.js";
10
11
  import { timeoutFlag, waitOptions } from "./common.js";
11
- import { announce, ensureCluster } from "./up.js";
12
+ import { announce, ensureCluster, refuseFirst } from "./up.js";
12
13
  const WORKLOADS = ["Deployment", "StatefulSet", "CronJob"];
13
14
  /** The images each workload of `objects` runs, by its name. */
14
15
  function imagesOf(objects) {
@@ -33,9 +34,19 @@ function imageChanges(before, after) {
33
34
  ...changed.map(([name, images]) => ` ${name}: ${before.images.get(name) ?? "(new)"} → ${images}`),
34
35
  ];
35
36
  }
36
- export const upgrade = Command.make("upgrade", { timeout: timeoutFlag }, ({ timeout }) => Effect.gen(function* () {
37
+ /** What an upgrade to this version refuses: a branch environment another release made, or what applying alasio refuses. */
38
+ const refusals = (config) => Effect.andThen(refuseBranchesOfOtherReleases(VERSION), Effect.asVoid(checkInstallation(config)));
39
+ export const upgrade = Command.make("upgrade", {
40
+ timeout: timeoutFlag,
41
+ check: Flag.Boolean("check").pipe(Flag.withDefault(false), Flag.withDescription("Check only, changing nothing, that alasio would upgrade: fail with what it would refuse, if anything")),
42
+ }, ({ timeout, check }) => Effect.gen(function* () {
37
43
  const config = yield* loadConfig;
38
44
  const target = yield* resolveTarget(config);
45
+ if (check) {
46
+ yield* Effect.provide(refusals(config), kubeApi(target));
47
+ return yield* Console.log(`alasio would upgrade ${describeTarget(target)} to ${VERSION}: it refuses nothing there now; nothing was changed.`);
48
+ }
49
+ yield* refuseFirst(target, refusals(config), "refuse");
39
50
  yield* ensureCluster(target);
40
51
  yield* Effect.provide(Effect.gen(function* () {
41
52
  const kube = yield* KubeApi;
@@ -43,9 +54,14 @@ export const upgrade = Command.make("upgrade", { timeout: timeoutFlag }, ({ time
43
54
  const version = running.find((object) => object.kind === "Deployment" && object.metadata?.name === RELEASE)?.metadata?.labels?.["app.kubernetes.io/version"] ?? null;
44
55
  const desired = installationObjects(yield* installConfig(config));
45
56
  yield* Console.log(imageChanges({ version, images: imagesOf(running) }, imagesOf(desired)).join("\n"));
57
+ yield* refuseBranchesOfOtherReleases(VERSION);
46
58
  yield* announce(target, yield* install(config, waitOptions(timeout)));
47
59
  }), kubeApi(target));
48
60
  })).pipe(Command.withShortDescription("Upgrade alasio to this version"), Command.withDescription("Does what alasio up does, with the images this version of alasio's package pins, after saying which images change " +
49
61
  "and from which version of alasio, and, for k3s on this machine, with the k3s and gVisor it pins, saying which it " +
50
- "installs in place of which. Run as npx alasio@latest upgrade to upgrade to the latest release."));
62
+ "installs in place of which. It upgrades main alone, and refuses while a branch environment another release of alasio " +
63
+ "made exists, which would not run on what it changes: delete each first, and make it again once upgraded. What it refuses " +
64
+ "it refuses before it changes anything, and with --check it checks for that alone, changing nothing; on this machine, of " +
65
+ "a cluster it made that does not answer, it can check nothing, so refuses. Run as npx alasio@latest upgrade to upgrade " +
66
+ "to the latest release."));
51
67
  //# sourceMappingURL=upgrade.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
@@ -9,11 +9,12 @@ import { lake } from "./commands/lake.js";
9
9
  import { login } from "./commands/login.js";
10
10
  import { logs } from "./commands/logs.js";
11
11
  import { restart } from "./commands/restart.js";
12
+ import { restoreFilerStore } from "./commands/restore-filer-store.js";
12
13
  import { status } from "./commands/status.js";
13
14
  import { uninstall } from "./commands/uninstall.js";
14
15
  import { up } from "./commands/up.js";
15
16
  import { upgrade } from "./commands/upgrade.js";
16
17
  import { ConfigFlag } from "./config.js";
17
18
  export const alasio = Command.make("alasio").pipe(Command.withDescription("Coding agents you talk to from Telegram: Claude Code and Codex, each conversation with a workspace of its own. " +
18
- "alasio init sets it up, alasio up starts it, in a cluster alasio makes on this machine or one a kubeconfig reaches."), Command.withSubcommands([init, up, status, logs, restart, upgrade, login, lake, grafana, branch, down, uninstall, asRoot]), Command.withGlobalFlags([ConfigFlag]));
19
+ "alasio init sets it up, alasio up starts it, in a cluster alasio makes on this machine or one a kubeconfig reaches."), Command.withSubcommands([init, up, status, logs, restart, upgrade, login, lake, grafana, branch, restoreFilerStore, down, uninstall, asRoot]), Command.withGlobalFlags([ConfigFlag]));
19
20
  //# sourceMappingURL=commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/commands.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC/C,OAAO,CAAC,eAAe,CACrB,iHAAiH;IAC/G,qHAAqH,CACxH,EACD,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,EAC1H,OAAO,CAAC,eAAe,CAAC,CAAC,UAAU,CAAC,CAAC,CACtC,CAAC"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/commands.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC/C,OAAO,CAAC,eAAe,CACrB,iHAAiH;IAC/G,qHAAqH,CACxH,EACD,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,EAC7I,OAAO,CAAC,eAAe,CAAC,CAAC,UAAU,CAAC,CAAC,CACtC,CAAC"}
@@ -92,6 +92,8 @@ const configOf = (target) => Schema.Struct({
92
92
  install: defaulted(Schema.Record(Schema.String, Schema.Unknown), {}),
93
93
  });
94
94
  const OperatorConfigSchema = configOf(Target);
95
+ /** Whether alasio may share `target`'s cluster with others: one a kubeconfig reaches, rather than one it makes. */
96
+ export const sharedCluster = (target) => "kubeconfig" in target;
95
97
  /** The config file is not what alasio runs from: where, and which key and why. */
96
98
  export class OperatorConfigError extends Schema.TaggedError()("OperatorConfigError", {
97
99
  path: Schema.String,
@@ -112,14 +114,21 @@ export class NotInitialized extends Schema.TaggedError()("NotInitialized", {
112
114
  /**
113
115
  * The install configuration of `install`, with the Secrets alasio names: the bot's,
114
116
  * and Claude Code's when `claude`, as alasio finds Claude Code's login in its home when
115
- * there is none.
117
+ * there is none. On a cluster alasio may share with others (`shared`, one a kubeconfig
118
+ * reaches), its pods take no other's place unless autoscaling.preemption says.
116
119
  */
117
- export function installConfigOf(install, { claude }) {
120
+ export function installConfigOf(install, { claude, shared }) {
118
121
  const alasio = Predicate.isObject(install["alasio"]) ? install["alasio"] : {};
119
122
  const own = ["telegram", "claude"].find((key) => Predicate.hasProperty(alasio, key));
120
123
  if (own)
121
124
  return Result.fail(`install.alasio.${own} is alasio's own to say: its Secret is the one alasio init writes`);
122
- return Result.mapBoth(decodeInstallConfig({ ...install, alasio: { ...alasio, telegram: { existingSecret: TELEGRAM_SECRET }, claude: { existingSecret: claude ? CLAUDE_SECRET : "" } } }), { onFailure: (error) => `install.${error.message}`, onSuccess: (config) => config });
125
+ // Given as anything but a map, it is refused as it is.
126
+ const autoscaling = install["autoscaling"] ?? {};
127
+ return Result.mapBoth(decodeInstallConfig({
128
+ ...install,
129
+ alasio: { ...alasio, telegram: { existingSecret: TELEGRAM_SECRET }, claude: { existingSecret: claude ? CLAUDE_SECRET : "" } },
130
+ autoscaling: Predicate.isObject(autoscaling) && !Array.isArray(autoscaling) ? { preemption: !shared, ...autoscaling } : autoscaling,
131
+ }), { onFailure: (error) => `install.${error.message}`, onSuccess: (config) => config });
123
132
  }
124
133
  /**
125
134
  * The config `input` (parsed JSON) is, checked: a key alasio does not know is refused. What
@@ -136,7 +145,7 @@ export function decodeOperatorConfig(path, input) {
136
145
  return Result.fail(new OperatorConfigError({ path, reason: describeIssue((Result.isFailure(precise) ? precise : decoded).failure.issue) }));
137
146
  }
138
147
  const { target, install } = decoded.success;
139
- const checked = installConfigOf(install, { claude: true });
148
+ const checked = installConfigOf(install, { claude: true, shared: sharedCluster(target) });
140
149
  if (Result.isFailure(checked))
141
150
  return Result.fail(new OperatorConfigError({ path, reason: checked.failure }));
142
151
  return Result.succeed({ path, file: input, target, install });
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAsB,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC3G,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa,EAAsB,QAAQ,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5I,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE9D,iFAAiF;AACjF,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC9B,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EACxB,IAAI,CAAC,eAAe,CAAC,uGAAuG,CAAC,CAC9H;CACF,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,CAAC,CAAC;AAC/H,MAAM,IAAI,GAAG,QAAQ,CAAC,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;AAC7E,MAAM,GAAG,GAAG,QAAQ,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,SAAS,CAChB,MAAM,CAAC,MAAM,CACX,QAAQ,EACR,MAAM,CAAC,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;QAC9F,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;KACzE,CAAC,CACH,EACD,EAAE,CACH;IACD,OAAO,EAAE,SAAS,CAChB,MAAM,CAAC,MAAM,CACX,QAAQ,EACR,MAAM,CAAC,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;YACjB,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;YACxC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;YAC1C,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;YACzC,kBAAkB,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;SACvD,CAAC;KACH,CAAC,CACH,EACD,EAAE,CACH;CACF,CAAC,CAAC;AAEH,mFAAmF;AACnF,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/J,mEAAmE;AACnE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;CAC3C,CAAC,CAAC;AAEH,oFAAoF;AACpF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,uCAAuC,EAAE,wDAAwD,CAAC,EAAE,QAAQ,CAAC;IACtI,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,sCAAsC,EAAE,CAAC;IACxF,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,mCAAmC,EAAE,+CAA+C,CAAC,CAAC;IAC1H,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IACvC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAChJ,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;IAC7C,wGAAwG;IACxG,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;IACnC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1H,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;CAC3C,CAAC,CAAC;AAEH,4GAA4G;AAC5G,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAE1H,kDAAkD;AAClD,MAAM,OAAO,GAAG;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AAEhF,8CAA8C;AAC9C,MAAM,QAAQ,GAAG,CAAuB,MAAS,EAAE,EAAE,CACnD,MAAM,CAAC,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,oCAAoC,EAAE,CAAC;IACvF,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;CACrE,CAAC,CAAC;AAEL,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAe9C,kFAAkF;AAClF,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,WAAW,EAAuB,CAAC,qBAAqB,EAAE;IACxG,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC;IACA,IAAa,OAAO;QAClB,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;CACF;AAED,mCAAmC;AACnC,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,WAAW,EAAkB,CAAC,gBAAgB,EAAE;IACzF,IAAI,EAAE,MAAM,CAAC,MAAM;CACpB,CAAC;IACA,IAAa,OAAO;QAClB,OAAO,gCAAgC,IAAI,CAAC,IAAI,yBAAyB,CAAC;IAC5E,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAA0C,EAAE,EAAE,MAAM,EAAgC;IAClH,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACrF,IAAI,GAAG;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,GAAG,mEAAmE,CAAC,CAAC;IACtH,OAAO,MAAM,CAAC,OAAO,CACnB,mBAAmB,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAClK,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CACpF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,KAAc;IAC/D,MAAM,OAAO,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAW,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjF,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzH,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5G,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9F,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9I,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5C,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9G,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAA2B,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,8FAA8F;AAC9F,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,QAAgB,EAA6C,EAAE,CAC5F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC;IACnE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEL,yFAAyF;AACzF,MAAM,CAAC,MAAM,UAAU,GAAuF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAChI,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IAC/B,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AACrF,CAAC,CAAC,CAAC;AAEH,6HAA6H;AAC7H,MAAM,CAAC,MAAM,kBAAkB,GAA8C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAE7K,wFAAwF;AACxF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAoC,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;AAEhI,wDAAwD;AACxD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,IAAY;IAChE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IACxC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC/B,GAAG,EAAE,GAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACpC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;KACtI,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACtE,CAAC,CAAC,CAAC;AAEH,kDAAkD;AAClD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,IAAY,EAAE,IAAwB;IAC3F,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC1E,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IACxC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjH,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,EAAE,CAAC;IAC1C,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtG,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { Effect, Result, Schema } from "effect";
2
+ import { CPU_FEATURES_CONTAINER } from "../../src/node-agent/names.js";
3
+ import { currentGvisorRelease } from "./cluster/node.js";
4
+ import { kind, KubeApi } from "./kube/api.js";
5
+ import { selectorOf } from "./kube/rollout.js";
6
+ import { recordedCpuBaseline, SANDBOX_TEMPLATES } from "./manifests/alasio.js";
7
+ import { NAMESPACE, selectorLabels } from "./manifests/common.js";
8
+ /** What a node agent's CPU_FEATURES_CONTAINER says. */
9
+ const Report = Schema.Struct({ release: Schema.String, cpuFeatures: Schema.Array(Schema.String) });
10
+ /** What the node agent's pod `pod` says of its node's CPU under gVisor's `release`. Pure, for tests. */
11
+ export function nodeCpuOf(pod, release) {
12
+ const node = pod.spec?.nodeName;
13
+ if (!node)
14
+ return null;
15
+ const said = pod.status?.initContainerStatuses?.find(({ name }) => name === CPU_FEATURES_CONTAINER);
16
+ const ended = said?.state?.terminated ?? said?.lastState?.terminated;
17
+ if (!ended)
18
+ return { node, unknown: "its node agent has not said its CPU features yet" };
19
+ if (ended.exitCode !== 0)
20
+ return { node, unknown: `its node agent could not say its CPU features: ${ended.message?.trim() || `it exited ${ended.exitCode}`}` };
21
+ const report = Schema.decodeUnknownResult(Schema.fromJsonString(Report))(ended.message ?? "");
22
+ if (Result.isFailure(report))
23
+ return { node, unknown: "its node agent said its CPU features as nothing alasio reads" };
24
+ const { release: of, cpuFeatures } = report.success;
25
+ if (of !== release)
26
+ return { node, unknown: `its node agent said its CPU features under gVisor ${of}, not ${release}` };
27
+ return { node, features: cpuFeatures };
28
+ }
29
+ /** What every node agent's pod says of its node's CPU under the current gVisor release, by node; a pod on its way out says nothing. */
30
+ export const surveyCpu = Effect.gen(function* () {
31
+ const pods = yield* (yield* KubeApi).list(kind("Pod"), { namespace: NAMESPACE, labelSelector: selectorOf(selectorLabels("node-agent")) });
32
+ const release = currentGvisorRelease();
33
+ return pods.filter((pod) => !pod.metadata?.deletionTimestamp).flatMap((pod) => nodeCpuOf(pod, release) ?? []).toSorted((a, b) => a.node.localeCompare(b.node));
34
+ });
35
+ /** The baseline the installation the cluster runs holds sessions to, as its templates' ConfigMap records it. */
36
+ export const recordedBaseline = Effect.gen(function* () {
37
+ const live = (yield* (yield* KubeApi).get({ ...kind("ConfigMap"), namespace: NAMESPACE, name: SANDBOX_TEMPLATES }))?.data?.["templates.json"];
38
+ return { live, baseline: recordedCpuBaseline(live) };
39
+ });
40
+ /**
41
+ * The baseline `survey` comes to, beside the one `recorded` before, as the module says:
42
+ * what every node has, once every node has said; `recorded` while any has not. Its
43
+ * features in order, as the annotation is compared whole. Pure, for tests.
44
+ */
45
+ export function decideCpuBaseline(survey, recorded) {
46
+ const unknown = survey.flatMap((each) => ("unknown" in each ? [each] : []));
47
+ const [first, ...others] = survey.flatMap((each) => ("features" in each ? [each] : []));
48
+ const shared = first && unknown.length === 0 ? first.features.filter((feature) => others.every(({ features }) => features.includes(feature))).toSorted() : null;
49
+ const baseline = shared === null ? recorded : shared.length > 0 ? shared : null;
50
+ const held = baseline !== null
51
+ ? null
52
+ : shared !== null
53
+ ? "the nodes share no CPU feature under gVisor"
54
+ : survey.length === 0
55
+ ? "no node agent runs yet"
56
+ : `not every node's CPU features are known yet (${unknown.map(({ node }) => node).join(", ")})`;
57
+ return { baseline, held, lacking: lackingOf(survey, baseline), unknown };
58
+ }
59
+ /** The nodes of `survey` that lack features of `baseline`, and which. */
60
+ function lackingOf(survey, baseline) {
61
+ if (baseline === null)
62
+ return [];
63
+ return survey.flatMap((each) => {
64
+ const missing = "features" in each ? baseline.filter((feature) => !each.features.includes(feature)) : [];
65
+ return missing.length > 0 ? [{ node: each.node, missing }] : [];
66
+ });
67
+ }
68
+ /**
69
+ * Where the nodes of `survey` stand against the baseline `recorded`, which the last
70
+ * `alasio up` held sessions to, as `alasio status` says it: the nodes that lack it, and
71
+ * those not known; and, where there is none, why the next up would hold sessions to none
72
+ * either, if it would. Pure, for tests.
73
+ */
74
+ export function standingOf(survey, recorded) {
75
+ const next = decideCpuBaseline(survey, null);
76
+ const held = recorded !== null ? null : (next.held ?? "alasio up has not run since every node said its CPU features");
77
+ return { baseline: recorded, held, lacking: lackingOf(survey, recorded), unknown: next.unknown };
78
+ }
79
+ /** Whether `a` and `b` are one baseline. */
80
+ export const sameBaseline = (a, b) => (a === null || b === null ? a === b : a.join(",") === b.join(","));
81
+ /** What of `decision` the operator is to act on, a line each: why sessions are not snapshotted, and which nodes lack the baseline or are not known. */
82
+ export function baselineShortfalls({ held, lacking, unknown }) {
83
+ return [
84
+ ...(held === null ? [] : [`sessions are not snapshotted: they are held to no CPU baseline, as ${held}`]),
85
+ ...lacking.map(({ node, missing }) => `node ${node} lacks ${missing.join(", ")} of the CPU baseline: snapshots taken elsewhere are not restored there, and alasio up narrows the baseline to it`),
86
+ ...unknown.map(({ node, unknown: why }) => `node ${node}: ${why}`),
87
+ ];
88
+ }
89
+ /** What `decision` says to the operator, a line each: the baseline sessions are held to, and its shortfalls. */
90
+ export function describeBaseline(decision) {
91
+ const { baseline } = decision;
92
+ return [
93
+ ...(baseline === null ? [] : [`sessions are held to ${baseline.length} CPU features, those every node had as alasio up last surveyed them`]),
94
+ ...baselineShortfalls(decision),
95
+ ];
96
+ }
97
+ //# sourceMappingURL=cpu-baseline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpu-baseline.js","sourceRoot":"","sources":["../../../src/cpu-baseline.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,20 @@
1
1
  import { Effect, Result, Schema } from "effect";
2
- import { installConfigOf, OperatorConfigError } from "./config.js";
2
+ import { gvisorReleases as gvisorReleasesOf, NODE_PINS } from "./cluster/node.js";
3
+ import { installConfigOf, OperatorConfigError, sharedCluster } from "./config.js";
4
+ import { decideCpuBaseline, recordedBaseline, sameBaseline, surveyCpu } from "./cpu-baseline.js";
5
+ import { clusterReleases } from "./kept-releases.js";
3
6
  import { KubeApi } from "./kube/api.js";
4
7
  import { applyInstallation, labelled } from "./kube/apply.js";
5
- import { labels, NAMESPACE } from "./manifests/common.js";
6
- import { manifests } from "./manifests/index.js";
8
+ import { checkAutoscalers } from "./kube/autoscalers.js";
9
+ import { checkObjectStoreLayout, checkObjectStoreScale } from "./kube/object-store-scale.js";
10
+ import { labels, NAMESPACE, nodeAgentRuns } from "./manifests/common.js";
11
+ import { carriedFrom, manifests, NOTHING_CARRIED } from "./manifests/index.js";
7
12
  import { readClaudeToken, readTelegramBot } from "./secrets.js";
8
13
  /** alasio's namespace. */
9
14
  const NAMESPACE_OBJECT = { apiVersion: "v1", kind: "Namespace", metadata: { name: NAMESPACE, labels: labels("alasio") } };
10
- /** The objects of the installation `config` describes. */
11
- export function installationObjects(config) {
12
- return [NAMESPACE_OBJECT, ...manifests(config)];
15
+ /** The objects of the installation `config` describes, with what it carries forward from the one it replaces. */
16
+ export function installationObjects(config, carried = NOTHING_CARRIED) {
17
+ return [NAMESPACE_OBJECT, ...manifests(config, carried)];
13
18
  }
14
19
  /** alasio's namespace, applied as the installation's, so its Secrets can be written before the rest of it is. */
15
20
  export const applyNamespace = Effect.flatMap(KubeApi, (kube) => kube.apply(labelled(NAMESPACE_OBJECT))).pipe(Effect.asVoid);
@@ -22,18 +27,46 @@ export class BotNotSet extends Schema.TaggedError()("BotNotSet", {}) {
22
27
  /** The install configuration of `config`, which names Claude Code's Secret when the cluster has it. */
23
28
  export const installConfig = Effect.fnUntraced(function* (config) {
24
29
  const claude = (yield* readClaudeToken) !== null;
25
- const install = installConfigOf(config.install, { claude });
30
+ const install = installConfigOf(config.install, { claude, shared: sharedCluster(config.target) });
26
31
  if (Result.isFailure(install))
27
32
  return yield* new OperatorConfigError({ path: config.path, reason: install.failure });
28
33
  return install.success;
29
34
  });
30
- /** Applies the installation `config` describes, once its bot is set, and waits until it runs. */
31
- export const install = Effect.fnUntraced(function* (config, options) {
35
+ /**
36
+ * The installation `config` describes, with its bot, refused where applying it would not do:
37
+ * with no bot set, against the cluster's own autoscalers, or its object store's layout and
38
+ * scale. Its objects carry forward what the installation they replace recorded.
39
+ */
40
+ export const checkInstallation = Effect.fnUntraced(function* (config) {
32
41
  const bot = yield* readTelegramBot;
33
42
  if (!bot)
34
43
  return yield* new BotNotSet();
35
44
  const settings = yield* installConfig(config);
36
- yield* applyInstallation(installationObjects(settings), options);
37
- return { bot, claude: settings.alasio.claude.existingSecret !== "" };
45
+ const { live, baseline: recorded } = yield* recordedBaseline;
46
+ const gvisorReleases = yield* clusterReleases(gvisorReleasesOf(NODE_PINS));
47
+ const objects = installationObjects(settings, carriedFrom(settings, live, { cpuBaseline: recorded, gvisorReleases }));
48
+ yield* checkAutoscalers(objects, settings);
49
+ yield* checkObjectStoreLayout(objects);
50
+ yield* checkObjectStoreScale(objects);
51
+ return { bot, settings, objects, live, recorded, gvisorReleases };
52
+ });
53
+ /**
54
+ * Applies the installation `config` describes, once its bot is set, and waits until it
55
+ * runs. Where sessions are snapshotted, it holds them to the CPU baseline it recorded
56
+ * before, then to the one the node agents' pods then say (./cpu-baseline.ts), applied
57
+ * again where that differs.
58
+ */
59
+ export const install = Effect.fnUntraced(function* (config, options) {
60
+ const { bot, settings, objects, live, recorded, gvisorReleases } = yield* checkInstallation(config);
61
+ yield* applyInstallation(objects, options);
62
+ const installed = { bot, claude: settings.alasio.claude.existingSecret !== "" };
63
+ if (!nodeAgentRuns(settings))
64
+ return { ...installed, cpuBaseline: null };
65
+ const decision = decideCpuBaseline(yield* surveyCpu, recorded);
66
+ // Carried from the installation before this one, as the first apply carried it.
67
+ if (!sameBaseline(decision.baseline, recorded)) {
68
+ yield* applyInstallation(installationObjects(settings, carriedFrom(settings, live, { cpuBaseline: decision.baseline, gvisorReleases })), options);
69
+ }
70
+ return { ...installed, cpuBaseline: decision };
38
71
  });
39
72
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/install.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAuB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EAAE,OAAO,EAAqB,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAmB,iBAAiB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE/E,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAoB,MAAM,cAAc,CAAC;AAElF,0BAA0B;AAC1B,MAAM,gBAAgB,GAAgB,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;AAEvI,0DAA0D;AAC1D,MAAM,UAAU,mBAAmB,CAAC,MAAqB;IACvD,OAAO,CAAC,gBAAgB,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,iHAAiH;AACjH,MAAM,CAAC,MAAM,cAAc,GAA+C,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CACtJ,MAAM,CAAC,MAAM,CACd,CAAC;AAEF,0EAA0E;AAC1E,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,WAAW,EAAa,CAAC,WAAW,EAAE,EAAE,CAAC;IAC7E,IAAa,OAAO;QAClB,OAAO,0EAA0E,CAAC;IACpF,CAAC;CACF;AAED,uGAAuG;AACvG,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,MAAsB;IAC7E,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IACjD,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACrH,OAAO,OAAO,CAAC,OAAO,CAAC;AACzB,CAAC,CAAC,CAAC;AAQH,iGAAiG;AACjG,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAChD,MAAsB,EACtB,OAAoB;IAEpB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,KAAK,CAAC,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,KAAK,EAAE,EAAE,CAAC;AACvE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { Effect } from "effect";
2
+ import { SNAPSHOT_ANNOTATION, SNAPSHOT_RELEASE_ANNOTATION } from "../../src/kube/sandbox-shape.js";
3
+ import { GVISOR_RELEASE_ANNOTATION } from "./cluster/k3s.js";
4
+ import { kind, KubeApi } from "./kube/api.js";
5
+ /**
6
+ * The snapshots of the cluster's sessions, by the release that took each, as their
7
+ * Sandboxes say; null where they cannot be read, or a Sandbox bound to a snapshot names
8
+ * no release. Pure, for tests.
9
+ */
10
+ export function snapshotReleasesOf(sandboxes) {
11
+ const named = new Map();
12
+ for (const { metadata } of sandboxes) {
13
+ const snapshot = metadata?.annotations?.[SNAPSHOT_ANNOTATION];
14
+ if (!snapshot)
15
+ continue;
16
+ const release = metadata?.annotations?.[SNAPSHOT_RELEASE_ANNOTATION];
17
+ if (!release)
18
+ return null;
19
+ named.set(release, [...(named.get(release) ?? []), `${metadata?.namespace}/${metadata?.name}`]);
20
+ }
21
+ return named;
22
+ }
23
+ /** What the cluster's Sandboxes name, as snapshotReleasesOf says; null where they cannot be read. */
24
+ export const snapshotReleases = Effect.flatMap(KubeApi, (kube) => kube.list(kind("Sandbox"), { labelSelector: "alasio.dev/workload=session" }).pipe(Effect.map(snapshotReleasesOf), Effect.timeout("15 seconds"), Effect.catch((error) => Effect.logInfo(`what the cluster's snapshots name is not known, so every gVisor release installed is kept: ${error.message}`).pipe(Effect.as(null)))));
25
+ /**
26
+ * The releases kept, of those `installed`, beside the `pinned` ones, as what the
27
+ * snapshots name (`named`, or null where it is not known) says: the pinned first, in
28
+ * their order, then those installed that a snapshot names, in theirs. Pure, for tests.
29
+ */
30
+ export function keptReleases(pinned, installed, named) {
31
+ return [...new Set([...pinned, ...installed.filter((release) => named === null || named.has(release))])];
32
+ }
33
+ /**
34
+ * The releases the cluster keeps, as its RuntimeClasses of alasio's say (the ones
35
+ * HostCluster and DockerCluster apply), beside the `pinned` ones, in keptReleases' order;
36
+ * the pinned alone where it has none, or they cannot be read, as on a cluster of a
37
+ * kubeconfig.
38
+ */
39
+ export const clusterReleases = (pinned) => Effect.flatMap(KubeApi, (kube) => kube.list(kind("RuntimeClass")).pipe(Effect.map((classes) => keptReleases(pinned, classes.flatMap(({ metadata }) => metadata?.annotations?.[GVISOR_RELEASE_ANNOTATION] ?? []), null)), Effect.catch(() => Effect.succeed([...pinned]))));
40
+ /** `count` snapshots, as a sentence says it. */
41
+ const snapshotsOf = (count) => (count === 1 ? "1 snapshot names it" : `${count} snapshots name it`);
42
+ /**
43
+ * What `alasio status` says of the gVisor releases `kept` (the current one first) and of
44
+ * those the snapshots name, `named` (null where they cannot be read), a line each: each
45
+ * release kept, with how many snapshots name it, then each release named but not kept,
46
+ * whose snapshots fall back. Pure, for tests.
47
+ */
48
+ export function describeKept(kept, named) {
49
+ const count = (release) => (named === null ? null : named.get(release)?.length ?? 0);
50
+ const said = (release) => {
51
+ const counted = count(release);
52
+ return counted === null ? "what snapshots name it is not seen" : snapshotsOf(counted);
53
+ };
54
+ return [
55
+ ...kept.map((release, index) => `gVisor ${release}, kept${index === 0 ? ", which new sessions run" : ""}: ${said(release)}`),
56
+ ...[...(named?.keys() ?? [])].filter((release) => !kept.includes(release)).map((release) => `gVisor ${release}, not kept: ${said(release)}, restored from bayma's checkpoints instead`),
57
+ ];
58
+ }
59
+ //# sourceMappingURL=kept-releases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kept-releases.js","sourceRoot":"","sources":["../../../src/kept-releases.ts"],"names":[],"mappings":"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"}