alasio 4.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.
- package/dist/cli/src/cluster/docker.js +219 -0
- package/dist/cli/src/cluster/docker.js.map +1 -0
- package/dist/cli/src/cluster/local.js +392 -0
- package/dist/cli/src/cluster/local.js.map +1 -0
- package/dist/cli/src/commands/common.js +108 -0
- package/dist/cli/src/commands/common.js.map +1 -0
- package/dist/cli/src/commands/down.js +26 -0
- package/dist/cli/src/commands/down.js.map +1 -0
- package/dist/cli/src/commands/init.js +314 -0
- package/dist/cli/src/commands/init.js.map +1 -0
- package/dist/cli/src/commands/lake.js +33 -0
- package/dist/cli/src/commands/lake.js.map +1 -0
- package/dist/cli/src/commands/login.js +38 -0
- package/dist/cli/src/commands/login.js.map +1 -0
- package/dist/cli/src/commands/logs.js +27 -0
- package/dist/cli/src/commands/logs.js.map +1 -0
- package/dist/cli/src/commands/restart.js +23 -0
- package/dist/cli/src/commands/restart.js.map +1 -0
- package/dist/cli/src/commands/status.js +58 -0
- package/dist/cli/src/commands/status.js.map +1 -0
- package/dist/cli/src/commands/uninstall.js +47 -0
- package/dist/cli/src/commands/uninstall.js.map +1 -0
- package/dist/cli/src/commands/up.js +33 -0
- package/dist/cli/src/commands/up.js.map +1 -0
- package/dist/cli/src/commands/upgrade.js +50 -0
- package/dist/cli/src/commands/upgrade.js.map +1 -0
- package/dist/cli/src/commands.js +16 -0
- package/dist/cli/src/commands.js.map +1 -0
- package/dist/cli/src/config.js +169 -0
- package/dist/cli/src/config.js.map +1 -0
- package/dist/cli/src/images.js +7 -0
- package/dist/cli/src/images.js.map +1 -0
- package/dist/cli/src/install.js +39 -0
- package/dist/cli/src/install.js.map +1 -0
- package/dist/cli/src/kube/api.js +231 -0
- package/dist/cli/src/kube/api.js.map +1 -0
- package/dist/cli/src/kube/apply.js +98 -0
- package/dist/cli/src/kube/apply.js.map +1 -0
- package/dist/cli/src/kube/rollout.js +166 -0
- package/dist/cli/src/kube/rollout.js.map +1 -0
- package/dist/cli/src/main.js +30 -0
- package/dist/cli/src/main.js.map +1 -0
- package/dist/cli/src/manifests/agent-sandbox.js +89 -0
- package/dist/cli/src/manifests/agent-sandbox.js.map +1 -0
- package/dist/cli/src/manifests/alasio.js +367 -0
- package/dist/cli/src/manifests/alasio.js.map +1 -0
- package/dist/cli/src/manifests/common.js +157 -0
- package/dist/cli/src/manifests/common.js.map +1 -0
- package/dist/cli/src/manifests/config.js +283 -0
- package/dist/cli/src/manifests/config.js.map +1 -0
- package/dist/cli/src/manifests/index.js +20 -0
- package/dist/cli/src/manifests/index.js.map +1 -0
- package/dist/cli/src/manifests/lake.js +56 -0
- package/dist/cli/src/manifests/lake.js.map +1 -0
- package/dist/cli/src/manifests/neon.js +656 -0
- package/dist/cli/src/manifests/neon.js.map +1 -0
- package/dist/cli/src/manifests/network-policies.js +86 -0
- package/dist/cli/src/manifests/network-policies.js.map +1 -0
- package/dist/cli/src/manifests/object-store.js +204 -0
- package/dist/cli/src/manifests/object-store.js.map +1 -0
- package/dist/cli/src/manifests/sandboxes.agents.x-k8s.io.json +6295 -0
- package/dist/cli/src/release.js +15 -0
- package/dist/cli/src/release.js.map +1 -0
- package/dist/cli/src/secrets.js +49 -0
- package/dist/cli/src/secrets.js.map +1 -0
- package/dist/cli/src/target.js +55 -0
- package/dist/cli/src/target.js.map +1 -0
- package/dist/cli/src/telegram.js +27 -0
- package/dist/cli/src/telegram.js.map +1 -0
- package/dist/src/kube/config.js +99 -0
- package/dist/src/kube/config.js.map +1 -0
- package/package.json +32 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../../../src/cluster/local.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Duration, Effect, Schema } from "effect";
|
|
2
|
+
import { Flag } from "effect/cli";
|
|
3
|
+
import { LocalCluster } from "../cluster/local.js";
|
|
4
|
+
import { loadConfig } from "../config.js";
|
|
5
|
+
import { kind, KubeApi } from "../kube/api.js";
|
|
6
|
+
import { INSTALLATION_SELECTOR } from "../kube/apply.js";
|
|
7
|
+
import { podProblems, selectorOf } from "../kube/rollout.js";
|
|
8
|
+
import { NAMESPACE, RELEASE } from "../manifests/common.js";
|
|
9
|
+
import { kubeApi, localCluster, resolveTarget } from "../target.js";
|
|
10
|
+
/** How often a wait looks. */
|
|
11
|
+
const POLL = "2 seconds";
|
|
12
|
+
/** `text`, a duration as `30s`, `10m`, `2h` or `1d` say one. */
|
|
13
|
+
function parseDuration(text) {
|
|
14
|
+
const match = /^(\d+)(s|m|h|d)$/u.exec(text.trim());
|
|
15
|
+
if (!match)
|
|
16
|
+
throw new Error(`${text} is not a duration such as 30s, 10m, 2h or 1d`);
|
|
17
|
+
const amount = Number(match[1]);
|
|
18
|
+
return { s: Duration.seconds, m: Duration.minutes, h: Duration.hours, d: Duration.days }[match[2]](amount);
|
|
19
|
+
}
|
|
20
|
+
/** A flag of a duration, as parseDuration reads it. */
|
|
21
|
+
const durationFlag = (name) => Flag.String(name).pipe(Flag.mapTryCatch(parseDuration, (error) => (error instanceof Error ? error.message : String(error))));
|
|
22
|
+
/** --timeout: how long a command waits for alasio to run before it gives up, saying why. */
|
|
23
|
+
export const timeoutFlag = durationFlag("timeout").pipe(Flag.withDefault(Duration.minutes(15)), Flag.withMetavar("duration"), Flag.withDescription("How long to wait for alasio to run, such as 15m (the default) or 1h; past it, alasio says what it still waits for and why"));
|
|
24
|
+
/** --since: how far back logs go. */
|
|
25
|
+
export const sinceFlag = durationFlag("since").pipe(Flag.optional, Flag.withMetavar("duration"), Flag.withDescription("Only what was logged in the last duration, such as 10m or 2h"));
|
|
26
|
+
/** The waits of a command given `timeout`. */
|
|
27
|
+
export const waitOptions = (timeout) => ({ timeout, poll: POLL });
|
|
28
|
+
/** The local cluster is not running, so its API cannot be reached. */
|
|
29
|
+
export class ClusterNotRunning extends Schema.TaggedError()("ClusterNotRunning", {
|
|
30
|
+
cluster: Schema.String,
|
|
31
|
+
made: Schema.Boolean,
|
|
32
|
+
}) {
|
|
33
|
+
get message() {
|
|
34
|
+
return this.made ? `the cluster ${this.cluster} is stopped: alasio up starts it` : `there is no cluster ${this.cluster} yet: alasio up makes it`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The config, the cluster it targets, and its API to run `use` with; a local cluster
|
|
39
|
+
* must be running, as only `up` starts it.
|
|
40
|
+
*/
|
|
41
|
+
export const onCluster = (use) => Effect.gen(function* () {
|
|
42
|
+
const config = yield* loadConfig;
|
|
43
|
+
const target = yield* resolveTarget(config);
|
|
44
|
+
if (target._tag === "Local") {
|
|
45
|
+
const { nodes } = yield* Effect.provide(Effect.flatMap(LocalCluster, (cluster) => cluster.status), localCluster(target.cluster));
|
|
46
|
+
const server = nodes.find(({ role }) => role === "server");
|
|
47
|
+
if (server?.state !== "running")
|
|
48
|
+
return yield* new ClusterNotRunning({ cluster: target.cluster.name, made: server !== undefined });
|
|
49
|
+
}
|
|
50
|
+
return yield* Effect.provide(use(target), kubeApi(target));
|
|
51
|
+
});
|
|
52
|
+
/** alasio's components, its Deployments, StatefulSets and Jobs. */
|
|
53
|
+
export const components = Effect.gen(function* () {
|
|
54
|
+
const kube = yield* KubeApi;
|
|
55
|
+
const workloads = yield* Effect.forEach([kind("Deployment"), kind("StatefulSet"), kind("Job")], (each) => kube.list(each, { namespace: NAMESPACE, labelSelector: INSTALLATION_SELECTOR }));
|
|
56
|
+
return workloads.flat().map((workload) => {
|
|
57
|
+
const name = workload.metadata?.name ?? "";
|
|
58
|
+
return { name: name === RELEASE ? name : name.replace(`${RELEASE}-`, ""), workload };
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
/** alasio has no component of a name. */
|
|
62
|
+
export class UnknownComponent extends Schema.TaggedError()("UnknownComponent", {
|
|
63
|
+
component: Schema.String,
|
|
64
|
+
known: Schema.Array(Schema.String),
|
|
65
|
+
}) {
|
|
66
|
+
get message() {
|
|
67
|
+
return this.known.length > 0
|
|
68
|
+
? `alasio has no component ${this.component}; it has ${this.known.join(", ")}`
|
|
69
|
+
: "alasio is not installed in this cluster: alasio up installs it";
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** The component of `name`. */
|
|
73
|
+
export const component = Effect.fnUntraced(function* (name) {
|
|
74
|
+
const found = yield* components;
|
|
75
|
+
const match = found.find((each) => each.name === name);
|
|
76
|
+
if (!match)
|
|
77
|
+
return yield* new UnknownComponent({ component: name, known: found.map((each) => each.name).sort() });
|
|
78
|
+
return match;
|
|
79
|
+
});
|
|
80
|
+
/** The pods of `of`, the newest first. */
|
|
81
|
+
export const podsOf = (of) => Effect.flatMap(KubeApi, (kube) => kube.list(kind("Pod"), { namespace: NAMESPACE, labelSelector: selectorOf(of.workload.spec?.selector?.matchLabels ?? {}) })).pipe(Effect.map((pods) => pods.toSorted((a, b) => new Date(b.metadata?.creationTimestamp ?? 0).getTime() - new Date(a.metadata?.creationTimestamp ?? 0).getTime())));
|
|
82
|
+
/** No pod of a component runs ready, so nothing can be run in one. */
|
|
83
|
+
export class NoRunningPod extends Schema.TaggedError()("NoRunningPod", {
|
|
84
|
+
component: Schema.String,
|
|
85
|
+
why: Schema.Array(Schema.String),
|
|
86
|
+
}) {
|
|
87
|
+
get message() {
|
|
88
|
+
return `no pod of ${this.component} runs${this.why.length > 0 ? `: ${this.why.join("; ")}` : ""}; alasio status says more`;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/** The newest pod of the component `name` that runs ready. */
|
|
92
|
+
export const runningPod = Effect.fnUntraced(function* (name) {
|
|
93
|
+
const pods = yield* podsOf(yield* component(name));
|
|
94
|
+
const running = pods.find((pod) => pod.status?.phase === "Running" && podProblems(pod).length === 0);
|
|
95
|
+
if (!running?.metadata?.name)
|
|
96
|
+
return yield* new NoRunningPod({ component: name, why: pods.flatMap(podProblems) });
|
|
97
|
+
return running.metadata.name;
|
|
98
|
+
});
|
|
99
|
+
/** A command run in alasio's cluster exited with another code than 0. */
|
|
100
|
+
export class CommandFailed extends Schema.TaggedError()("CommandFailed", {
|
|
101
|
+
command: Schema.String,
|
|
102
|
+
exitCode: Schema.Number,
|
|
103
|
+
}) {
|
|
104
|
+
get message() {
|
|
105
|
+
return `${this.command} exited with ${this.exitCode}`;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/commands/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** `alasio down`: stops the cluster on this machine, keeping everything. */
|
|
2
|
+
import { Console, Effect, Schema } from "effect";
|
|
3
|
+
import { Command } from "effect/cli";
|
|
4
|
+
import { LocalCluster } from "../cluster/local.js";
|
|
5
|
+
import { loadConfig } from "../config.js";
|
|
6
|
+
import { describeTarget, localCluster, resolveTarget } from "../target.js";
|
|
7
|
+
/** The command is for the cluster alasio makes, and the config targets another. */
|
|
8
|
+
export class NotLocal extends Schema.TaggedError()("NotLocal", {
|
|
9
|
+
command: Schema.String,
|
|
10
|
+
target: Schema.String,
|
|
11
|
+
instead: Schema.String,
|
|
12
|
+
}) {
|
|
13
|
+
get message() {
|
|
14
|
+
return `alasio ${this.command} is for the cluster alasio makes on this machine, and alasio runs in ${this.target}, which alasio does not stop or start: ${this.instead}`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export const down = Command.make("down", {}, () => Effect.gen(function* () {
|
|
18
|
+
const target = yield* resolveTarget(yield* loadConfig);
|
|
19
|
+
if (target._tag !== "Local") {
|
|
20
|
+
return yield* new NotLocal({ command: "down", target: describeTarget(target), instead: "alasio uninstall removes alasio from it" });
|
|
21
|
+
}
|
|
22
|
+
yield* Effect.provide(Effect.flatMap(LocalCluster, (cluster) => cluster.down), localCluster(target.cluster));
|
|
23
|
+
yield* Console.log(`alasio is stopped, with everything kept; alasio up starts it again.`);
|
|
24
|
+
})).pipe(Command.withShortDescription("Stop the cluster on this machine"), Command.withDescription("Stops the cluster alasio made on this machine, and alasio with it, keeping everything: alasio up starts it again where it was. " +
|
|
25
|
+
"For a cluster a kubeconfig reaches it does nothing, as that cluster is not alasio's to stop."));
|
|
26
|
+
//# sourceMappingURL=down.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"down.js","sourceRoot":"","sources":["../../../../src/commands/down.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE3E,mFAAmF;AACnF,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,WAAW,EAAY,CAAC,UAAU,EAAE;IACvE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;IACA,IAAa,OAAO;QAClB,OAAO,UAAU,IAAI,CAAC,OAAO,wEAAwE,IAAI,CAAC,MAAM,0CAA0C,IAAI,CAAC,OAAO,EAAE,CAAC;IAC3K,CAAC;CACF;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,CAChD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC,CAAC;IACtI,CAAC;IACD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7G,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;AAC5F,CAAC,CAAC,CAAC,CAAC,IAAI,CACN,OAAO,CAAC,oBAAoB,CAAC,kCAAkC,CAAC,EAChE,OAAO,CAAC,eAAe,CACrB,iIAAiI;IAC/H,8FAA8F,CACjG,CACF,CAAC"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `alasio init`: asks for what alasio needs (its bot's token and who may use it, Claude
|
|
3
|
+
* Code's token, whether agents work in this machine's folders, where telemetry goes),
|
|
4
|
+
* writes the config, makes the cluster on this machine when that is where alasio runs,
|
|
5
|
+
* writes the Secrets there, and offers to start alasio.
|
|
6
|
+
*
|
|
7
|
+
* Run again, it shows what is set, and keeps what is not changed. Every question has a
|
|
8
|
+
* flag that answers it instead, and --non-interactive asks none, for scripts and CI.
|
|
9
|
+
* Secrets are never flags, as a command's arguments are visible to every user of the
|
|
10
|
+
* machine: they are read from a file, or from the environment.
|
|
11
|
+
*/
|
|
12
|
+
import { createServer } from "node:net";
|
|
13
|
+
import { homedir } from "node:os";
|
|
14
|
+
import { Config, Console, Effect, FileSystem, Option, Predicate, Redacted, Result, Schema } from "effect";
|
|
15
|
+
import { Command, Flag, Prompt } from "effect/cli";
|
|
16
|
+
import { LocalCluster } from "../cluster/local.js";
|
|
17
|
+
import { configPath, decodeOperatorConfig, defaultStoragePath, readConfig, writeConfig } from "../config.js";
|
|
18
|
+
import { applyNamespace } from "../install.js";
|
|
19
|
+
import { OptionalUrl } from "../manifests/config.js";
|
|
20
|
+
import { readClaudeToken, readTelegramBot, writeClaudeToken, writeTelegramBot } from "../secrets.js";
|
|
21
|
+
import { kubeApi, localCluster, resolveTarget } from "../target.js";
|
|
22
|
+
import { TelegramBotApi } from "../telegram.js";
|
|
23
|
+
import { timeoutFlag } from "./common.js";
|
|
24
|
+
import { bringUp } from "./up.js";
|
|
25
|
+
/** Something init must be told, and was not, with no questions to ask. */
|
|
26
|
+
export class SettingMissing extends Schema.TaggedError()("SettingMissing", {
|
|
27
|
+
setting: Schema.String,
|
|
28
|
+
give: Schema.String,
|
|
29
|
+
}) {
|
|
30
|
+
get message() {
|
|
31
|
+
return `alasio init needs ${this.setting}: give it with ${this.give}, or run alasio init without --non-interactive`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** A setting given is not one alasio takes. */
|
|
35
|
+
export class SettingInvalid extends Schema.TaggedError()("SettingInvalid", {
|
|
36
|
+
setting: Schema.String,
|
|
37
|
+
reason: Schema.String,
|
|
38
|
+
}) {
|
|
39
|
+
get message() {
|
|
40
|
+
return `${this.setting} ${this.reason}`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** A port of the loopback no one listens on now, which the local cluster's API server keeps from then on. */
|
|
44
|
+
const freePort = Effect.callback((resume) => {
|
|
45
|
+
const server = createServer();
|
|
46
|
+
server.listen(0, "127.0.0.1", () => {
|
|
47
|
+
const address = server.address();
|
|
48
|
+
server.close(() => resume(Effect.succeed(typeof address === "object" && address !== null ? address.port : 0)));
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
/** Telegram user ids, comma-separated, as the bot's Secret keeps them: null when they are not. */
|
|
52
|
+
function parseUserIds(text) {
|
|
53
|
+
const ids = text.split(",").map((id) => id.trim()).filter(Boolean);
|
|
54
|
+
return ids.length > 0 && ids.every((id) => /^\d+$/u.test(id)) ? ids : null;
|
|
55
|
+
}
|
|
56
|
+
/** Absolute paths, comma-separated: null when one is not absolute. */
|
|
57
|
+
function parsePaths(text) {
|
|
58
|
+
const paths = text.split(",").map((path) => path.trim()).filter(Boolean);
|
|
59
|
+
return paths.every((path) => path.startsWith("/")) ? paths : null;
|
|
60
|
+
}
|
|
61
|
+
/** A host mount's name for `path`: its segments, as a volume's name may have them, unlike any `taken`. */
|
|
62
|
+
function mountName(path, taken) {
|
|
63
|
+
const base = path.toLowerCase().replace(/[^a-z0-9]+/gu, "-").replace(/^-+|-+$/gu, "").slice(0, 55) || "root";
|
|
64
|
+
let name = base;
|
|
65
|
+
for (let suffix = 2; taken.has(name); suffix += 1)
|
|
66
|
+
name = `${base}-${suffix}`;
|
|
67
|
+
return name;
|
|
68
|
+
}
|
|
69
|
+
/** Whether `value` is a mount of the host profile. */
|
|
70
|
+
const isHostMount = (value) => Predicate.hasProperty(value, "name") && Predicate.isString(value.name) &&
|
|
71
|
+
Predicate.hasProperty(value, "hostPath") && Predicate.isString(value.hostPath) &&
|
|
72
|
+
Predicate.hasProperty(value, "mountPath") && Predicate.isString(value.mountPath);
|
|
73
|
+
/**
|
|
74
|
+
* The host profile of the install configuration `host` is, with `access`, or without
|
|
75
|
+
* folder workspaces when it is null; its other keys kept. A folder it mounts already
|
|
76
|
+
* keeps its mount as written (where in the pods, its type, read-only), and a new one is
|
|
77
|
+
* mounted at its own path. The home is always in the pods, as alasio keeps its state
|
|
78
|
+
* there, and bayma's in it: mounted, unless a mount already puts it there.
|
|
79
|
+
*/
|
|
80
|
+
function hostSettings(host, access) {
|
|
81
|
+
if (!access)
|
|
82
|
+
return { ...host, enabled: false };
|
|
83
|
+
const existing = (Array.isArray(host["mounts"]) ? host["mounts"] : []).filter(isHostMount);
|
|
84
|
+
const chosen = [...new Set([access.home, ...access.folders])];
|
|
85
|
+
const kept = existing.filter(({ hostPath }) => chosen.includes(hostPath));
|
|
86
|
+
const placed = (path) => kept.some(({ mountPath }) => path === mountPath || path.startsWith(`${mountPath.replace(/\/$/u, "")}/`));
|
|
87
|
+
const taken = new Set(kept.map(({ name }) => name));
|
|
88
|
+
const added = chosen
|
|
89
|
+
.filter((path) => !kept.some(({ hostPath }) => hostPath === path) && !(path === access.home && placed(path)))
|
|
90
|
+
.map((path) => {
|
|
91
|
+
const name = mountName(path, taken);
|
|
92
|
+
taken.add(name);
|
|
93
|
+
return { name, hostPath: path, mountPath: path };
|
|
94
|
+
});
|
|
95
|
+
const stateRoot = host["stateRoot"];
|
|
96
|
+
return {
|
|
97
|
+
...host,
|
|
98
|
+
enabled: true,
|
|
99
|
+
uid: access.uid,
|
|
100
|
+
gid: access.gid,
|
|
101
|
+
home: access.home,
|
|
102
|
+
stateRoot: Predicate.isString(stateRoot) && stateRoot.startsWith(`${access.home}/`) ? stateRoot : `${access.home}/.alasio/bayma`,
|
|
103
|
+
mounts: [...kept, ...added],
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/** The record `key` of `parent`; empty when it is not one. */
|
|
107
|
+
function record(parent, key) {
|
|
108
|
+
const value = parent[key];
|
|
109
|
+
return Predicate.isObject(value) && !Array.isArray(value) ? value : {};
|
|
110
|
+
}
|
|
111
|
+
/** `record` without `key`. */
|
|
112
|
+
function without(of, key) {
|
|
113
|
+
return Object.fromEntries(Object.entries(of).filter(([each]) => each !== key));
|
|
114
|
+
}
|
|
115
|
+
/** A prompt's validation by `check`, which says what is wrong with a value, or null. */
|
|
116
|
+
const validating = (check) => (value) => {
|
|
117
|
+
const refusal = check(value);
|
|
118
|
+
return refusal === null ? Effect.succeed(value) : Effect.fail(refusal);
|
|
119
|
+
};
|
|
120
|
+
const flags = {
|
|
121
|
+
kubeconfig: Flag.String("kubeconfig").pipe(Flag.optional, Flag.withMetavar("path"), Flag.withDescription("Run alasio in the cluster this kubeconfig reaches, rather than one alasio makes on this machine")),
|
|
122
|
+
context: Flag.String("context").pipe(Flag.optional, Flag.withMetavar("name"), Flag.withDescription("The kubeconfig's context to use, rather than its current one")),
|
|
123
|
+
botTokenFile: Flag.String("bot-token-file").pipe(Flag.optional, Flag.withMetavar("path"), Flag.withDescription("A file holding the bot's token, from @BotFather; or set TELEGRAM_BOT_TOKEN")),
|
|
124
|
+
allowedUserIds: Flag.String("allowed-user-ids").pipe(Flag.optional, Flag.withMetavar("ids"), Flag.withDescription("The Telegram user ids allowed to use the bot, comma-separated")),
|
|
125
|
+
claudeTokenFile: Flag.String("claude-token-file").pipe(Flag.optional, Flag.withMetavar("path"), Flag.withDescription("A file holding Claude Code's token, from claude setup-token; or set CLAUDE_CODE_OAUTH_TOKEN")),
|
|
126
|
+
folderWorkspaces: Flag.Boolean("folder-workspaces").pipe(Flag.optional, Flag.withDescription("Let agents work in this machine's folders, as you; --no-folder-workspaces does not")),
|
|
127
|
+
user: Flag.String("user").pipe(Flag.optional, Flag.withMetavar("uid:gid"), Flag.withDescription("Whom agents in folders run as; you, unless given")),
|
|
128
|
+
home: Flag.String("home").pipe(Flag.optional, Flag.withMetavar("path"), Flag.withDescription("Their home, always among the folders they see; yours, unless given")),
|
|
129
|
+
folders: Flag.String("folders").pipe(Flag.optional, Flag.withMetavar("paths"), Flag.withDescription("The other folders they see, comma-separated absolute paths")),
|
|
130
|
+
telemetryEndpoint: Flag.String("telemetry-endpoint").pipe(Flag.optional, Flag.withMetavar("url"), Flag.withDescription("Where alasio sends OpenTelemetry, an OTLP/HTTP endpoint; an empty one sends nothing")),
|
|
131
|
+
nonInteractive: Flag.Boolean("non-interactive").pipe(Flag.withDefault(false), Flag.withDescription("Ask nothing: what is not given keeps its current value or default, and what has neither fails")),
|
|
132
|
+
up: Flag.Boolean("up").pipe(Flag.optional, Flag.withDescription("Start alasio afterwards without asking; --no-up does not")),
|
|
133
|
+
timeout: timeoutFlag,
|
|
134
|
+
};
|
|
135
|
+
/** The answer of `flag`, else of the question `asked` when questions are asked, else `otherwise`. */
|
|
136
|
+
const answer = (flag, ask, asked, otherwise) => (Option.isSome(flag) ? Effect.succeed(flag.value) : ask ? asked() : otherwise());
|
|
137
|
+
/** Where alasio runs: as the flags say, else as the config does, else as the operator answers; here unless they say otherwise. */
|
|
138
|
+
const chooseTarget = Effect.fnUntraced(function* (given, ask, existing) {
|
|
139
|
+
if (Option.isSome(given.kubeconfig) || Option.isSome(given.context)) {
|
|
140
|
+
return { kubeconfig: { ...Option.match(given.kubeconfig, { onNone: () => ({}), onSome: (path) => ({ path }) }), ...Option.match(given.context, { onNone: () => ({}), onSome: (context) => ({ context }) }) } };
|
|
141
|
+
}
|
|
142
|
+
if (existing)
|
|
143
|
+
return existing.target;
|
|
144
|
+
const where = ask
|
|
145
|
+
? yield* Prompt.Select({
|
|
146
|
+
message: "Where should alasio run?",
|
|
147
|
+
choices: [
|
|
148
|
+
{ title: "Here", value: "local", description: "in a cluster alasio makes on this machine, in Docker" },
|
|
149
|
+
{ title: "In a cluster of mine", value: "kubeconfig", description: "one a kubeconfig reaches" },
|
|
150
|
+
],
|
|
151
|
+
})
|
|
152
|
+
: "local";
|
|
153
|
+
if (where === "kubeconfig") {
|
|
154
|
+
const path = yield* Prompt.String({
|
|
155
|
+
message: "Its kubeconfig (empty for $KUBECONFIG, or ~/.kube/config)",
|
|
156
|
+
validate: validating((value) => (value === "" || value.startsWith("/") ? null : "must be an absolute path")),
|
|
157
|
+
});
|
|
158
|
+
const context = yield* Prompt.String({ message: "Its context (empty for the kubeconfig's current one)" });
|
|
159
|
+
return { kubeconfig: { ...(path ? { path } : {}), ...(context ? { context } : {}) } };
|
|
160
|
+
}
|
|
161
|
+
return { local: { name: "alasio", apiPort: yield* freePort, storagePath: yield* defaultStoragePath } };
|
|
162
|
+
});
|
|
163
|
+
/** The Secrets the cluster has now, when it can be reached without being started: none for a local cluster not running. */
|
|
164
|
+
const currentSecrets = Effect.fnUntraced(function* (target) {
|
|
165
|
+
if (target._tag === "Local") {
|
|
166
|
+
const { nodes } = yield* Effect.provide(Effect.flatMap(LocalCluster, (cluster) => cluster.status), localCluster(target.cluster));
|
|
167
|
+
if (!nodes.some(({ role, state }) => role === "server" && state === "running"))
|
|
168
|
+
return { bot: null, claude: null };
|
|
169
|
+
}
|
|
170
|
+
return yield* Effect.provide(Effect.all({ bot: readTelegramBot, claude: readClaudeToken }), kubeApi(target));
|
|
171
|
+
});
|
|
172
|
+
/** The bot: its token from a file, the environment or the operator, checked with Telegram, or the current one; and who may use it. */
|
|
173
|
+
const chooseBot = Effect.fnUntraced(function* (given, ask, current) {
|
|
174
|
+
const fs = yield* FileSystem.FileSystem;
|
|
175
|
+
const telegram = yield* TelegramBotApi;
|
|
176
|
+
const fromFlagOrEnv = Option.isSome(given.botTokenFile)
|
|
177
|
+
? Option.some(Redacted.make((yield* fs.readFileString(given.botTokenFile.value)).trim()))
|
|
178
|
+
: yield* Config.option(Config.Redacted("TELEGRAM_BOT_TOKEN"));
|
|
179
|
+
let token;
|
|
180
|
+
let username;
|
|
181
|
+
if (Option.isSome(fromFlagOrEnv)) {
|
|
182
|
+
token = fromFlagOrEnv.value;
|
|
183
|
+
username = yield* telegram.getMe(token);
|
|
184
|
+
}
|
|
185
|
+
else if (ask) {
|
|
186
|
+
// The prompt checks a token with Telegram before it takes it, learning its bot.
|
|
187
|
+
let checked = current?.username ?? "";
|
|
188
|
+
const entered = Redacted.value(yield* Prompt.Password({
|
|
189
|
+
message: `The bot's token, from @BotFather${current ? ` (empty keeps @${current.username})` : ""}`,
|
|
190
|
+
validate: (value) => value.trim() === "" && current
|
|
191
|
+
? Effect.succeed(value)
|
|
192
|
+
: telegram.getMe(Redacted.make(value.trim())).pipe(Effect.map((name) => {
|
|
193
|
+
checked = name;
|
|
194
|
+
return value;
|
|
195
|
+
}), Effect.mapError((error) => error.message)),
|
|
196
|
+
})).trim();
|
|
197
|
+
token = entered === "" && current ? current.token : Redacted.make(entered);
|
|
198
|
+
username = checked;
|
|
199
|
+
}
|
|
200
|
+
else if (current) {
|
|
201
|
+
({ token, username } = current);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
return yield* new SettingMissing({ setting: "the bot's token", give: "--bot-token-file or TELEGRAM_BOT_TOKEN" });
|
|
205
|
+
}
|
|
206
|
+
const idsText = yield* answer(given.allowedUserIds, ask, () => Prompt.String({
|
|
207
|
+
message: "The Telegram user ids allowed to use it, comma-separated (@userinfobot tells yours)",
|
|
208
|
+
default: current?.allowedUserIds.join(",") ?? "",
|
|
209
|
+
validate: validating((value) => (parseUserIds(value) ? null : "must be Telegram user ids, comma-separated")),
|
|
210
|
+
}), () => (current ? Effect.succeed(current.allowedUserIds.join(",")) : Effect.fail(new SettingMissing({ setting: "the Telegram users allowed to use the bot", give: "--allowed-user-ids" }))));
|
|
211
|
+
const allowedUserIds = parseUserIds(idsText);
|
|
212
|
+
if (!allowedUserIds)
|
|
213
|
+
return yield* new SettingInvalid({ setting: "--allowed-user-ids", reason: "must be Telegram user ids, comma-separated" });
|
|
214
|
+
return { token, username, allowedUserIds };
|
|
215
|
+
});
|
|
216
|
+
/** Claude Code's token, from a file, the environment or the operator; none to keep the current one, or to leave it for later. */
|
|
217
|
+
const chooseClaudeToken = Effect.fnUntraced(function* (given, ask, current) {
|
|
218
|
+
const fs = yield* FileSystem.FileSystem;
|
|
219
|
+
if (Option.isSome(given.claudeTokenFile))
|
|
220
|
+
return Option.some(Redacted.make((yield* fs.readFileString(given.claudeTokenFile.value)).trim()));
|
|
221
|
+
const fromEnv = yield* Config.option(Config.Redacted("CLAUDE_CODE_OAUTH_TOKEN"));
|
|
222
|
+
if (Option.isSome(fromEnv) || !ask)
|
|
223
|
+
return fromEnv;
|
|
224
|
+
const entered = Redacted.value(yield* Prompt.Password({
|
|
225
|
+
message: `Claude Code's token, from claude setup-token (empty ${current ? "keeps the current one" : "leaves it for later"})`,
|
|
226
|
+
validate: validating((value) => (/\s/u.test(value.trim()) ? "must be one token, without spaces" : null)),
|
|
227
|
+
})).trim();
|
|
228
|
+
return entered ? Option.some(Redacted.make(entered)) : Option.none();
|
|
229
|
+
});
|
|
230
|
+
/** Whether agents work in this machine's folders, and if so as whom, in which. */
|
|
231
|
+
const chooseFolderAccess = Effect.fnUntraced(function* (given, ask, host) {
|
|
232
|
+
const wanted = yield* answer(given.folderWorkspaces, ask, () => Prompt.Confirm({ message: "Should agents also be able to work in this machine's folders, as you?", initial: host["enabled"] === true }), () => Effect.succeed(host["enabled"] === true));
|
|
233
|
+
if (!wanted)
|
|
234
|
+
return null;
|
|
235
|
+
const uid = Predicate.isNumber(host["uid"]) ? host["uid"] : process.getuid?.() ?? 1000;
|
|
236
|
+
const gid = Predicate.isNumber(host["gid"]) ? host["gid"] : process.getgid?.() ?? 1000;
|
|
237
|
+
const userText = yield* answer(given.user, ask, () => Prompt.String({ message: "Whom they run as, uid:gid", default: `${uid}:${gid}`, validate: validating((value) => (/^\d+:\d+$/u.test(value) ? null : "must be uid:gid")) }), () => Effect.succeed(`${uid}:${gid}`));
|
|
238
|
+
const user = /^(\d+):(\d+)$/u.exec(userText);
|
|
239
|
+
if (!user)
|
|
240
|
+
return yield* new SettingInvalid({ setting: "--user", reason: "must be uid:gid" });
|
|
241
|
+
const currentHome = Predicate.isString(host["home"]) ? host["home"] : homedir();
|
|
242
|
+
const home = yield* answer(given.home, ask, () => Prompt.String({ message: "Their home, which alasio keeps its state in", default: currentHome, validate: validating((value) => (value.startsWith("/") ? null : "must be an absolute path")) }), () => Effect.succeed(currentHome));
|
|
243
|
+
if (!home.startsWith("/"))
|
|
244
|
+
return yield* new SettingInvalid({ setting: "--home", reason: "must be an absolute path" });
|
|
245
|
+
const currentFolders = (Array.isArray(host["mounts"]) ? host["mounts"] : [])
|
|
246
|
+
.flatMap((mount) => (Predicate.hasProperty(mount, "hostPath") && Predicate.isString(mount.hostPath) && mount.hostPath !== home ? [mount.hostPath] : []));
|
|
247
|
+
const foldersText = yield* answer(given.folders, ask, () => Prompt.String({
|
|
248
|
+
message: "Which other folders they see, comma-separated (empty for none)",
|
|
249
|
+
default: currentFolders.join(","),
|
|
250
|
+
validate: validating((value) => (parsePaths(value) ? null : "must be absolute paths")),
|
|
251
|
+
}), () => Effect.succeed(currentFolders.join(",")));
|
|
252
|
+
const folders = parsePaths(foldersText);
|
|
253
|
+
if (!folders)
|
|
254
|
+
return yield* new SettingInvalid({ setting: "--folders", reason: "must be absolute paths" });
|
|
255
|
+
return { uid: Number(user[1]), gid: Number(user[2]), home, folders };
|
|
256
|
+
});
|
|
257
|
+
/** Where telemetry goes: an OTLP/HTTP endpoint, or empty for nowhere. */
|
|
258
|
+
const chooseTelemetryEndpoint = Effect.fnUntraced(function* (given, ask, current) {
|
|
259
|
+
const check = (value) => (Result.isSuccess(Schema.decodeUnknownResult(OptionalUrl)(value)) ? null : "must be an http(s) URL, or empty");
|
|
260
|
+
const endpoint = yield* answer(given.telemetryEndpoint, ask, () => Prompt.String({ message: "Where alasio sends OpenTelemetry, an OTLP/HTTP endpoint (empty for nowhere)", default: current, validate: validating(check) }), () => Effect.succeed(current));
|
|
261
|
+
const refused = check(endpoint);
|
|
262
|
+
if (refused)
|
|
263
|
+
return yield* new SettingInvalid({ setting: "--telemetry-endpoint", reason: refused });
|
|
264
|
+
return endpoint;
|
|
265
|
+
});
|
|
266
|
+
export const init = Command.make("init", flags, (given) => Effect.gen(function* () {
|
|
267
|
+
const ask = !given.nonInteractive;
|
|
268
|
+
const path = yield* configPath;
|
|
269
|
+
const existing = yield* readConfig(path);
|
|
270
|
+
if (existing)
|
|
271
|
+
yield* Console.log(`alasio's config is ${path}; what you leave as it is stays.`);
|
|
272
|
+
const install = existing?.install ?? {};
|
|
273
|
+
const target = yield* chooseTarget(given, ask, existing?.file ?? null);
|
|
274
|
+
const current = yield* currentSecrets(yield* resolveTarget(yield* Effect.fromResult(decodeOperatorConfig(path, { target, install }))));
|
|
275
|
+
const bot = yield* chooseBot(given, ask, current.bot);
|
|
276
|
+
const claude = yield* chooseClaudeToken(given, ask, current.claude);
|
|
277
|
+
const host = record(install, "host");
|
|
278
|
+
const access = yield* chooseFolderAccess(given, ask, host);
|
|
279
|
+
const telemetry = record(install, "telemetry");
|
|
280
|
+
const endpoint = yield* chooseTelemetryEndpoint(given, ask, Predicate.isString(telemetry["otlpEndpoint"]) ? telemetry["otlpEndpoint"] : "");
|
|
281
|
+
const telemetrySettings = endpoint ? { ...telemetry, otlpEndpoint: endpoint } : without(telemetry, "otlpEndpoint");
|
|
282
|
+
const config = yield* writeConfig(path, {
|
|
283
|
+
target,
|
|
284
|
+
install: {
|
|
285
|
+
...without(without(install, "host"), "telemetry"),
|
|
286
|
+
...(access || Object.keys(host).length > 0 ? { host: hostSettings(host, access) } : {}),
|
|
287
|
+
...(Object.keys(telemetrySettings).length > 0 ? { telemetry: telemetrySettings } : {}),
|
|
288
|
+
},
|
|
289
|
+
});
|
|
290
|
+
yield* Console.log(`wrote ${path}`);
|
|
291
|
+
const cluster = yield* resolveTarget(config);
|
|
292
|
+
if (cluster._tag === "Local") {
|
|
293
|
+
yield* Effect.provide(Effect.flatMap(LocalCluster, (local) => local.up(cluster.kubeconfig.path)), localCluster(cluster.cluster));
|
|
294
|
+
}
|
|
295
|
+
yield* Effect.provide(Effect.gen(function* () {
|
|
296
|
+
yield* applyNamespace;
|
|
297
|
+
yield* writeTelegramBot(bot);
|
|
298
|
+
if (Option.isSome(claude))
|
|
299
|
+
yield* writeClaudeToken(claude.value);
|
|
300
|
+
}), kubeApi(cluster));
|
|
301
|
+
const hasClaude = Option.isSome(claude) || current.claude !== null;
|
|
302
|
+
yield* Console.log(`alasio's Secrets are in its cluster: the bot @${bot.username}'s token${hasClaude ? ", and Claude Code's" : ""}.`);
|
|
303
|
+
const start = yield* answer(given.up, ask, () => Prompt.Confirm({ message: "Start alasio now?", initial: true }), () => Effect.succeed(false));
|
|
304
|
+
if (start)
|
|
305
|
+
yield* bringUp(config, given.timeout);
|
|
306
|
+
else
|
|
307
|
+
yield* Console.log("alasio up starts it.");
|
|
308
|
+
})).pipe(Command.withShortDescription("Set alasio up: its bot, its tokens, and where it runs"), Command.withDescription("Asks for the bot's token (checked with Telegram) and who may use it, Claude Code's token, whether agents may work in this " +
|
|
309
|
+
"machine's folders and as whom, and where telemetry goes; writes the config, which holds no secret; makes the cluster on " +
|
|
310
|
+
"this machine, unless --kubeconfig names another; writes the tokens there, as Secrets; and offers to start alasio. Run it " +
|
|
311
|
+
"again to change something: it shows what is set and keeps what you leave. Tokens are never flags, which other users of " +
|
|
312
|
+
"the machine can see: give them in files (--bot-token-file, --claude-token-file), or as TELEGRAM_BOT_TOKEN and " +
|
|
313
|
+
"CLAUDE_CODE_OAUTH_TOKEN."));
|
|
314
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** `alasio lake [--format table|csv|json] <sql>`: a read-only query of the analytics lake, in the lake's pod. */
|
|
2
|
+
import { PassThrough } from "node:stream";
|
|
3
|
+
import { NodeStream } from "@effect/platform-node";
|
|
4
|
+
import { Effect, Stdio, Stream } from "effect";
|
|
5
|
+
import { Argument, Command, Flag } from "effect/cli";
|
|
6
|
+
import { KubeApi } from "../kube/api.js";
|
|
7
|
+
import { NAMESPACE } from "../manifests/common.js";
|
|
8
|
+
import { CommandFailed, onCluster, runningPod } from "./common.js";
|
|
9
|
+
/** The lake's query, as its image has it (neon/lake). */
|
|
10
|
+
const QUERY = ["node", "/opt/lake/src/query.ts"];
|
|
11
|
+
export const lake = Command.make("lake", {
|
|
12
|
+
sql: Argument.String("sql").pipe(Argument.withDescription("The query, in DuckDB's SQL, such as \"SELECT count(*) FROM claude.entries\"")),
|
|
13
|
+
format: Flag.Literals("format", ["table", "csv", "json"]).pipe(Flag.withDefault("table"), Flag.withDescription("How its rows are printed: a table (the default), CSV, or a JSON object a line")),
|
|
14
|
+
}, ({ sql, format }) => onCluster(() => Effect.gen(function* () {
|
|
15
|
+
const kube = yield* KubeApi;
|
|
16
|
+
const stdio = yield* Stdio.Stdio;
|
|
17
|
+
const pod = yield* runningPod("lake");
|
|
18
|
+
const stdout = new PassThrough();
|
|
19
|
+
const stderr = new PassThrough();
|
|
20
|
+
const forward = (stream, sink) => NodeStream.fromReadable({ evaluate: () => stream, onError: (cause) => cause }).pipe(Stream.run(sink), Effect.orDie);
|
|
21
|
+
const [exitCode] = yield* Effect.all([
|
|
22
|
+
kube.exec({ namespace: NAMESPACE, pod, container: "lake" }, [...QUERY, "--format", format, sql], { stdin: null, stdout, stderr, tty: false }).pipe(Effect.ensuring(Effect.sync(() => {
|
|
23
|
+
stdout.end();
|
|
24
|
+
stderr.end();
|
|
25
|
+
}))),
|
|
26
|
+
forward(stdout, stdio.stdout()),
|
|
27
|
+
forward(stderr, stdio.stderr()),
|
|
28
|
+
], { concurrency: "unbounded" });
|
|
29
|
+
if (exitCode !== 0)
|
|
30
|
+
return yield* new CommandFailed({ command: "the lake's query", exitCode });
|
|
31
|
+
}))).pipe(Command.withShortDescription("Query the analytics lake"), Command.withDescription("Runs a read-only SQL query of the analytics lake, where every Claude Code transcript entry and Codex rollout line is a row, " +
|
|
32
|
+
"in the lake's pod, and prints its rows, as a table unless --format says CSV or JSON."));
|
|
33
|
+
//# sourceMappingURL=lake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lake.js","sourceRoot":"","sources":["../../../../src/commands/lake.ts"],"names":[],"mappings":"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"}
|