clawdlets 0.2.1 → 0.2.4
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/main.mjs +5037 -0
- package/node_modules/@clawdlets/clf-queue/package.json +5 -3
- package/node_modules/@clawdlets/core/dist/lib/clawdlets-config.d.ts +8 -0
- package/node_modules/@clawdlets/core/dist/lib/clawdlets-config.d.ts.map +1 -1
- package/node_modules/@clawdlets/core/dist/lib/clawdlets-config.js +6 -2
- package/node_modules/@clawdlets/core/dist/lib/clawdlets-config.js.map +1 -1
- package/node_modules/@clawdlets/core/package.json +1 -1
- package/package.json +16 -13
- package/dist/commands/bootstrap.d.ts +0 -43
- package/dist/commands/bootstrap.d.ts.map +0 -1
- package/dist/commands/bootstrap.js +0 -318
- package/dist/commands/bootstrap.js.map +0 -1
- package/dist/commands/bot.d.ts +0 -2
- package/dist/commands/bot.d.ts.map +0 -1
- package/dist/commands/bot.js +0 -97
- package/dist/commands/bot.js.map +0 -1
- package/dist/commands/cattle/common.d.ts +0 -29
- package/dist/commands/cattle/common.d.ts.map +0 -1
- package/dist/commands/cattle/common.js +0 -102
- package/dist/commands/cattle/common.js.map +0 -1
- package/dist/commands/cattle/destroy.d.ts +0 -33
- package/dist/commands/cattle/destroy.d.ts.map +0 -1
- package/dist/commands/cattle/destroy.js +0 -72
- package/dist/commands/cattle/destroy.js.map +0 -1
- package/dist/commands/cattle/list.d.ts +0 -20
- package/dist/commands/cattle/list.d.ts.map +0 -1
- package/dist/commands/cattle/list.js +0 -78
- package/dist/commands/cattle/list.js.map +0 -1
- package/dist/commands/cattle/logs.d.ts +0 -34
- package/dist/commands/cattle/logs.d.ts.map +0 -1
- package/dist/commands/cattle/logs.js +0 -55
- package/dist/commands/cattle/logs.js.map +0 -1
- package/dist/commands/cattle/persona.d.ts +0 -2
- package/dist/commands/cattle/persona.d.ts.map +0 -1
- package/dist/commands/cattle/persona.js +0 -85
- package/dist/commands/cattle/persona.js.map +0 -1
- package/dist/commands/cattle/reap.d.ts +0 -20
- package/dist/commands/cattle/reap.d.ts.map +0 -1
- package/dist/commands/cattle/reap.js +0 -60
- package/dist/commands/cattle/reap.js.map +0 -1
- package/dist/commands/cattle/spawn.d.ts +0 -73
- package/dist/commands/cattle/spawn.d.ts.map +0 -1
- package/dist/commands/cattle/spawn.js +0 -147
- package/dist/commands/cattle/spawn.js.map +0 -1
- package/dist/commands/cattle/ssh.d.ts +0 -20
- package/dist/commands/cattle/ssh.d.ts.map +0 -1
- package/dist/commands/cattle/ssh.js +0 -37
- package/dist/commands/cattle/ssh.js.map +0 -1
- package/dist/commands/cattle.d.ts +0 -2
- package/dist/commands/cattle.d.ts.map +0 -1
- package/dist/commands/cattle.js +0 -21
- package/dist/commands/cattle.js.map +0 -1
- package/dist/commands/config.d.ts +0 -2
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -148
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -35
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -65
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/env.d.ts +0 -22
- package/dist/commands/env.d.ts.map +0 -1
- package/dist/commands/env.js +0 -132
- package/dist/commands/env.js.map +0 -1
- package/dist/commands/fleet.d.ts +0 -2
- package/dist/commands/fleet.d.ts.map +0 -1
- package/dist/commands/fleet.js +0 -61
- package/dist/commands/fleet.js.map +0 -1
- package/dist/commands/host.d.ts +0 -2
- package/dist/commands/host.d.ts.map +0 -1
- package/dist/commands/host.js +0 -277
- package/dist/commands/host.js.map +0 -1
- package/dist/commands/image.d.ts +0 -2
- package/dist/commands/image.d.ts.map +0 -1
- package/dist/commands/image.js +0 -133
- package/dist/commands/image.js.map +0 -1
- package/dist/commands/infra.d.ts +0 -2
- package/dist/commands/infra.d.ts.map +0 -1
- package/dist/commands/infra.js +0 -171
- package/dist/commands/infra.js.map +0 -1
- package/dist/commands/lockdown.d.ts +0 -25
- package/dist/commands/lockdown.d.ts.map +0 -1
- package/dist/commands/lockdown.js +0 -93
- package/dist/commands/lockdown.js.map +0 -1
- package/dist/commands/project.d.ts +0 -2
- package/dist/commands/project.d.ts.map +0 -1
- package/dist/commands/project.js +0 -264
- package/dist/commands/project.js.map +0 -1
- package/dist/commands/secrets/common.d.ts +0 -8
- package/dist/commands/secrets/common.d.ts.map +0 -1
- package/dist/commands/secrets/common.js +0 -20
- package/dist/commands/secrets/common.js.map +0 -1
- package/dist/commands/secrets/init.d.ts +0 -39
- package/dist/commands/secrets/init.d.ts.map +0 -1
- package/dist/commands/secrets/init.js +0 -455
- package/dist/commands/secrets/init.js.map +0 -1
- package/dist/commands/secrets/path.d.ts +0 -11
- package/dist/commands/secrets/path.d.ts.map +0 -1
- package/dist/commands/secrets/path.js +0 -24
- package/dist/commands/secrets/path.js.map +0 -1
- package/dist/commands/secrets/sync.d.ts +0 -25
- package/dist/commands/secrets/sync.d.ts.map +0 -1
- package/dist/commands/secrets/sync.js +0 -67
- package/dist/commands/secrets/sync.js.map +0 -1
- package/dist/commands/secrets/verify.d.ts +0 -28
- package/dist/commands/secrets/verify.d.ts.map +0 -1
- package/dist/commands/secrets/verify.js +0 -118
- package/dist/commands/secrets/verify.js.map +0 -1
- package/dist/commands/secrets.d.ts +0 -2
- package/dist/commands/secrets.d.ts.map +0 -1
- package/dist/commands/secrets.js +0 -18
- package/dist/commands/secrets.js.map +0 -1
- package/dist/commands/server/common.d.ts +0 -3
- package/dist/commands/server/common.d.ts.map +0 -1
- package/dist/commands/server/common.js +0 -3
- package/dist/commands/server/common.js.map +0 -1
- package/dist/commands/server/deploy.d.ts +0 -53
- package/dist/commands/server/deploy.d.ts.map +0 -1
- package/dist/commands/server/deploy.js +0 -177
- package/dist/commands/server/deploy.js.map +0 -1
- package/dist/commands/server/github-sync.d.ts +0 -2
- package/dist/commands/server/github-sync.d.ts.map +0 -1
- package/dist/commands/server/github-sync.js +0 -166
- package/dist/commands/server/github-sync.js.map +0 -1
- package/dist/commands/server/manifest.d.ts +0 -28
- package/dist/commands/server/manifest.d.ts.map +0 -1
- package/dist/commands/server/manifest.js +0 -82
- package/dist/commands/server/manifest.js.map +0 -1
- package/dist/commands/server.d.ts +0 -2
- package/dist/commands/server.d.ts.map +0 -1
- package/dist/commands/server.js +0 -267
- package/dist/commands/server.js.map +0 -1
- package/dist/commands/ssh-target.d.ts +0 -3
- package/dist/commands/ssh-target.d.ts.map +0 -1
- package/dist/commands/ssh-target.js +0 -15
- package/dist/commands/ssh-target.js.map +0 -1
- package/dist/lib/context.d.ts +0 -21
- package/dist/lib/context.d.ts.map +0 -1
- package/dist/lib/context.js +0 -19
- package/dist/lib/context.js.map +0 -1
- package/dist/lib/deploy-gate.d.ts +0 -9
- package/dist/lib/deploy-gate.d.ts.map +0 -1
- package/dist/lib/deploy-gate.js +0 -20
- package/dist/lib/deploy-gate.js.map +0 -1
- package/dist/lib/deploy-manifest.d.ts +0 -11
- package/dist/lib/deploy-manifest.d.ts.map +0 -1
- package/dist/lib/deploy-manifest.js +0 -46
- package/dist/lib/deploy-manifest.js.map +0 -1
- package/dist/lib/doctor-render.d.ts +0 -14
- package/dist/lib/doctor-render.d.ts.map +0 -1
- package/dist/lib/doctor-render.js +0 -131
- package/dist/lib/doctor-render.js.map +0 -1
- package/dist/lib/host-resolve.d.ts +0 -6
- package/dist/lib/host-resolve.d.ts.map +0 -1
- package/dist/lib/host-resolve.js +0 -20
- package/dist/lib/host-resolve.js.map +0 -1
- package/dist/lib/linux-build.d.ts +0 -8
- package/dist/lib/linux-build.d.ts.map +0 -1
- package/dist/lib/linux-build.js +0 -15
- package/dist/lib/linux-build.js.map +0 -1
- package/dist/lib/manifest-signature.d.ts +0 -17
- package/dist/lib/manifest-signature.d.ts.map +0 -1
- package/dist/lib/manifest-signature.js +0 -52
- package/dist/lib/manifest-signature.js.map +0 -1
- package/dist/lib/template-spec.d.ts +0 -9
- package/dist/lib/template-spec.d.ts.map +0 -1
- package/dist/lib/template-spec.js +0 -50
- package/dist/lib/template-spec.js.map +0 -1
- package/dist/lib/version.d.ts +0 -3
- package/dist/lib/version.d.ts.map +0 -1
- package/dist/lib/version.js +0 -17
- package/dist/lib/version.js.map +0 -1
- package/dist/lib/wizard.d.ts +0 -10
- package/dist/lib/wizard.d.ts.map +0 -1
- package/dist/lib/wizard.js +0 -25
- package/dist/lib/wizard.js.map +0 -1
- package/dist/main.d.ts +0 -3
- package/dist/main.d.ts.map +0 -1
- package/dist/main.js +0 -50
- package/dist/main.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../src/commands/bot.ts"],"names":[],"mappings":"AA6FA,eAAO,MAAM,GAAG,qDAGd,CAAC"}
|
package/dist/commands/bot.js
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import process from "node:process";
|
|
2
|
-
import { defineCommand } from "citty";
|
|
3
|
-
import * as p from "@clack/prompts";
|
|
4
|
-
import { findRepoRoot } from "@clawdlets/core/lib/repo";
|
|
5
|
-
import { ClawdletsConfigSchema, loadClawdletsConfig, writeClawdletsConfig } from "@clawdlets/core/lib/clawdlets-config";
|
|
6
|
-
import { cancelFlow, navOnCancel, NAV_EXIT } from "../lib/wizard.js";
|
|
7
|
-
function validateBotId(value) {
|
|
8
|
-
const v = value.trim();
|
|
9
|
-
if (!v)
|
|
10
|
-
return "bot id required";
|
|
11
|
-
if (!/^[a-z][a-z0-9_-]*$/.test(v))
|
|
12
|
-
return "use: [a-z][a-z0-9_-]*";
|
|
13
|
-
return undefined;
|
|
14
|
-
}
|
|
15
|
-
const list = defineCommand({
|
|
16
|
-
meta: { name: "list", description: "List bots (from fleet/clawdlets.json)." },
|
|
17
|
-
args: {},
|
|
18
|
-
async run({ args }) {
|
|
19
|
-
const repoRoot = findRepoRoot(process.cwd());
|
|
20
|
-
const { config } = loadClawdletsConfig({ repoRoot });
|
|
21
|
-
console.log((config.fleet.botOrder || []).join("\n"));
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
const add = defineCommand({
|
|
25
|
-
meta: { name: "add", description: "Add a bot id to fleet/clawdlets.json." },
|
|
26
|
-
args: {
|
|
27
|
-
bot: { type: "string", description: "Bot id (e.g. maren)." },
|
|
28
|
-
interactive: { type: "boolean", description: "Prompt for missing inputs (requires TTY).", default: false },
|
|
29
|
-
},
|
|
30
|
-
async run({ args }) {
|
|
31
|
-
const repoRoot = findRepoRoot(process.cwd());
|
|
32
|
-
const { configPath, config } = loadClawdletsConfig({ repoRoot });
|
|
33
|
-
let botId = String(args.bot || "").trim();
|
|
34
|
-
if (!botId) {
|
|
35
|
-
if (!args.interactive)
|
|
36
|
-
throw new Error("missing --bot (or pass --interactive)");
|
|
37
|
-
if (!process.stdout.isTTY)
|
|
38
|
-
throw new Error("--interactive requires a TTY");
|
|
39
|
-
p.intro("clawdlets bot add");
|
|
40
|
-
const v = await p.text({ message: "Bot id", placeholder: "maren", validate: validateBotId });
|
|
41
|
-
if (p.isCancel(v)) {
|
|
42
|
-
const nav = await navOnCancel({ flow: "bot add", canBack: false });
|
|
43
|
-
if (nav === NAV_EXIT)
|
|
44
|
-
cancelFlow();
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
botId = String(v).trim();
|
|
48
|
-
}
|
|
49
|
-
const err = validateBotId(botId);
|
|
50
|
-
if (err)
|
|
51
|
-
throw new Error(err);
|
|
52
|
-
const existingBots = config.fleet.botOrder;
|
|
53
|
-
if (existingBots.includes(botId) || config.fleet.bots[botId]) {
|
|
54
|
-
console.log(`ok: already present: ${botId}`);
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
const next = {
|
|
58
|
-
...config,
|
|
59
|
-
fleet: {
|
|
60
|
-
...config.fleet,
|
|
61
|
-
botOrder: [...existingBots, botId],
|
|
62
|
-
bots: { ...config.fleet.bots, [botId]: {} },
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
const validated = ClawdletsConfigSchema.parse(next);
|
|
66
|
-
await writeClawdletsConfig({ configPath, config: validated });
|
|
67
|
-
console.log(`ok: added bot ${botId}`);
|
|
68
|
-
},
|
|
69
|
-
});
|
|
70
|
-
const rm = defineCommand({
|
|
71
|
-
meta: { name: "rm", description: "Remove a bot id from fleet/clawdlets.json." },
|
|
72
|
-
args: {
|
|
73
|
-
bot: { type: "string", description: "Bot id to remove.", },
|
|
74
|
-
},
|
|
75
|
-
async run({ args }) {
|
|
76
|
-
const repoRoot = findRepoRoot(process.cwd());
|
|
77
|
-
const { configPath, config } = loadClawdletsConfig({ repoRoot });
|
|
78
|
-
const botId = String(args.bot || "").trim();
|
|
79
|
-
if (!botId)
|
|
80
|
-
throw new Error("missing --bot");
|
|
81
|
-
const existingBots = config.fleet.botOrder;
|
|
82
|
-
if (!existingBots.includes(botId) && !config.fleet.bots[botId])
|
|
83
|
-
throw new Error(`bot not found: ${botId}`);
|
|
84
|
-
const nextBots = existingBots.filter((b) => b !== botId);
|
|
85
|
-
const nextBotsRecord = { ...config.fleet.bots };
|
|
86
|
-
delete nextBotsRecord[botId];
|
|
87
|
-
const next = { ...config, fleet: { ...config.fleet, botOrder: nextBots, bots: nextBotsRecord } };
|
|
88
|
-
const validated = ClawdletsConfigSchema.parse(next);
|
|
89
|
-
await writeClawdletsConfig({ configPath, config: validated });
|
|
90
|
-
console.log(`ok: removed bot ${botId}`);
|
|
91
|
-
},
|
|
92
|
-
});
|
|
93
|
-
export const bot = defineCommand({
|
|
94
|
-
meta: { name: "bot", description: "Manage fleet bots." },
|
|
95
|
-
subCommands: { add, list, rm },
|
|
96
|
-
});
|
|
97
|
-
//# sourceMappingURL=bot.js.map
|
package/dist/commands/bot.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../../src/commands/bot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { type CattleTask } from "@clawdlets/core/lib/cattle-task";
|
|
2
|
-
import type { CattleServer } from "@clawdlets/core/lib/hcloud-cattle";
|
|
3
|
-
export declare function requireEnabled(params: {
|
|
4
|
-
enabled: boolean;
|
|
5
|
-
hint: string;
|
|
6
|
-
}): void;
|
|
7
|
-
export declare function requireFile(pathname: string, label: string): void;
|
|
8
|
-
export declare function readJsonFile(filePath: string): unknown;
|
|
9
|
-
export declare function requireTtlSeconds(ttlRaw: string): {
|
|
10
|
-
seconds: number;
|
|
11
|
-
normalized: string;
|
|
12
|
-
};
|
|
13
|
-
export declare function unixSecondsNow(): number;
|
|
14
|
-
export declare function formatAgeSeconds(seconds: number): string;
|
|
15
|
-
export declare function formatTable(rows: string[][]): string;
|
|
16
|
-
export declare function resolveTailscaleIpv4(hostname: string): Promise<string>;
|
|
17
|
-
export declare function loadTaskFromFile(taskFile: string): CattleTask;
|
|
18
|
-
export declare function waitForClfJobTerminal(params: {
|
|
19
|
-
client: {
|
|
20
|
-
show: (jobId: string) => Promise<{
|
|
21
|
-
job: any;
|
|
22
|
-
}>;
|
|
23
|
-
};
|
|
24
|
-
jobId: string;
|
|
25
|
-
timeoutMs: number;
|
|
26
|
-
pollMs: number;
|
|
27
|
-
}): Promise<any>;
|
|
28
|
-
export declare function resolveOne(servers: CattleServer[], idOrName: string): CattleServer;
|
|
29
|
-
//# sourceMappingURL=common.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/commands/cattle/common.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgD,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAChH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,wBAAgB,cAAc,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAG/E;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAGjE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOtD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAIzF;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAWpD;AAED,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAK7D;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,MAAM,EAAE;QAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,GAAG,EAAE,GAAG,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,GAAG,CAAC,CAWf;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAQlF"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import { capture } from "@clawdlets/core/lib/run";
|
|
3
|
-
import { parseTtlToSeconds } from "@clawdlets/core/lib/ttl";
|
|
4
|
-
import { CattleTaskSchema, CATTLE_TASK_SCHEMA_VERSION } from "@clawdlets/core/lib/cattle-task";
|
|
5
|
-
export function requireEnabled(params) {
|
|
6
|
-
if (params.enabled)
|
|
7
|
-
return;
|
|
8
|
-
throw new Error(params.hint);
|
|
9
|
-
}
|
|
10
|
-
export function requireFile(pathname, label) {
|
|
11
|
-
if (fs.existsSync(pathname))
|
|
12
|
-
return;
|
|
13
|
-
throw new Error(`${label} missing: ${pathname}`);
|
|
14
|
-
}
|
|
15
|
-
export function readJsonFile(filePath) {
|
|
16
|
-
const raw = fs.readFileSync(filePath, "utf8");
|
|
17
|
-
try {
|
|
18
|
-
return JSON.parse(raw);
|
|
19
|
-
}
|
|
20
|
-
catch (e) {
|
|
21
|
-
throw new Error(`invalid JSON: ${filePath} (${String(e?.message || e)})`);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
export function requireTtlSeconds(ttlRaw) {
|
|
25
|
-
const parsed = parseTtlToSeconds(ttlRaw);
|
|
26
|
-
if (!parsed)
|
|
27
|
-
throw new Error(`invalid --ttl: ${ttlRaw} (expected e.g. 30m, 2h, 1d)`);
|
|
28
|
-
return { seconds: parsed.seconds, normalized: parsed.raw };
|
|
29
|
-
}
|
|
30
|
-
export function unixSecondsNow() {
|
|
31
|
-
return Math.floor(Date.now() / 1000);
|
|
32
|
-
}
|
|
33
|
-
export function formatAgeSeconds(seconds) {
|
|
34
|
-
const s = Math.max(0, Math.floor(seconds));
|
|
35
|
-
const d = Math.floor(s / 86400);
|
|
36
|
-
const h = Math.floor((s % 86400) / 3600);
|
|
37
|
-
const m = Math.floor((s % 3600) / 60);
|
|
38
|
-
const ss = s % 60;
|
|
39
|
-
if (d > 0)
|
|
40
|
-
return `${d}d${h}h`;
|
|
41
|
-
if (h > 0)
|
|
42
|
-
return `${h}h${m}m`;
|
|
43
|
-
if (m > 0)
|
|
44
|
-
return `${m}m${ss}s`;
|
|
45
|
-
return `${ss}s`;
|
|
46
|
-
}
|
|
47
|
-
export function formatTable(rows) {
|
|
48
|
-
if (rows.length === 0)
|
|
49
|
-
return "";
|
|
50
|
-
const widths = [];
|
|
51
|
-
for (const r of rows) {
|
|
52
|
-
for (let i = 0; i < r.length; i++) {
|
|
53
|
-
widths[i] = Math.max(widths[i] || 0, String(r[i] ?? "").length);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return rows
|
|
57
|
-
.map((r) => r.map((c, i) => String(c ?? "").padEnd(widths[i] || 0)).join(" ").trimEnd())
|
|
58
|
-
.join("\n");
|
|
59
|
-
}
|
|
60
|
-
export async function resolveTailscaleIpv4(hostname) {
|
|
61
|
-
const name = String(hostname || "").trim();
|
|
62
|
-
if (!name)
|
|
63
|
-
throw new Error("hostname missing for tailscale ip resolution");
|
|
64
|
-
const out = await capture("tailscale", ["ip", "--1", "--4", name], { maxOutputBytes: 4096 });
|
|
65
|
-
const ip = out.trim();
|
|
66
|
-
if (!ip)
|
|
67
|
-
throw new Error(`tailscale ip returned empty output for ${name}`);
|
|
68
|
-
return ip;
|
|
69
|
-
}
|
|
70
|
-
export function loadTaskFromFile(taskFile) {
|
|
71
|
-
const raw = readJsonFile(taskFile);
|
|
72
|
-
const parsed = CattleTaskSchema.safeParse(raw);
|
|
73
|
-
if (!parsed.success)
|
|
74
|
-
throw new Error(`invalid task file (expected schemaVersion ${CATTLE_TASK_SCHEMA_VERSION}): ${taskFile}`);
|
|
75
|
-
return parsed.data;
|
|
76
|
-
}
|
|
77
|
-
export async function waitForClfJobTerminal(params) {
|
|
78
|
-
const start = Date.now();
|
|
79
|
-
while (true) {
|
|
80
|
-
const res = await params.client.show(params.jobId);
|
|
81
|
-
const job = res.job;
|
|
82
|
-
if (job?.status === "done" || job?.status === "failed" || job?.status === "canceled")
|
|
83
|
-
return job;
|
|
84
|
-
if (Date.now() - start > params.timeoutMs) {
|
|
85
|
-
throw new Error(`timeout waiting for job ${params.jobId} (last=${String(job?.status || "")})`);
|
|
86
|
-
}
|
|
87
|
-
await new Promise((r) => setTimeout(r, params.pollMs));
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
export function resolveOne(servers, idOrName) {
|
|
91
|
-
const v = String(idOrName || "").trim();
|
|
92
|
-
if (!v)
|
|
93
|
-
throw new Error("missing id/name");
|
|
94
|
-
const byId = servers.find((s) => s.id === v);
|
|
95
|
-
if (byId)
|
|
96
|
-
return byId;
|
|
97
|
-
const byName = servers.find((s) => s.name === v);
|
|
98
|
-
if (byName)
|
|
99
|
-
return byName;
|
|
100
|
-
throw new Error(`cattle server not found: ${v}`);
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=common.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/commands/cattle/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export declare const cattleDestroy: import("citty").CommandDef<{
|
|
2
|
-
runtimeDir: {
|
|
3
|
-
type: "string";
|
|
4
|
-
description: string;
|
|
5
|
-
};
|
|
6
|
-
envFile: {
|
|
7
|
-
type: "string";
|
|
8
|
-
description: string;
|
|
9
|
-
};
|
|
10
|
-
host: {
|
|
11
|
-
type: "string";
|
|
12
|
-
description: string;
|
|
13
|
-
};
|
|
14
|
-
idOrName: {
|
|
15
|
-
type: "string";
|
|
16
|
-
description: string;
|
|
17
|
-
};
|
|
18
|
-
all: {
|
|
19
|
-
type: "boolean";
|
|
20
|
-
description: string;
|
|
21
|
-
default: false;
|
|
22
|
-
};
|
|
23
|
-
persona: {
|
|
24
|
-
type: "string";
|
|
25
|
-
description: string;
|
|
26
|
-
};
|
|
27
|
-
dryRun: {
|
|
28
|
-
type: "boolean";
|
|
29
|
-
description: string;
|
|
30
|
-
default: false;
|
|
31
|
-
};
|
|
32
|
-
}>;
|
|
33
|
-
//# sourceMappingURL=destroy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../src/commands/cattle/destroy.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkExB,CAAC"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import process from "node:process";
|
|
2
|
-
import { defineCommand } from "citty";
|
|
3
|
-
import { loadDeployCreds } from "@clawdlets/core/lib/deploy-creds";
|
|
4
|
-
import { safeCattleLabelValue } from "@clawdlets/core/lib/cattle-planner";
|
|
5
|
-
import { openCattleState } from "@clawdlets/core/lib/cattle-state";
|
|
6
|
-
import { CATTLE_LABEL_PERSONA, buildCattleLabelSelector, destroyCattleServer, listCattleServers, } from "@clawdlets/core/lib/hcloud-cattle";
|
|
7
|
-
import { loadHostContextOrExit } from "../../lib/context.js";
|
|
8
|
-
import { formatTable, requireEnabled, resolveOne, unixSecondsNow } from "./common.js";
|
|
9
|
-
export const cattleDestroy = defineCommand({
|
|
10
|
-
meta: { name: "destroy", description: "Destroy cattle servers (Hetzner delete)." },
|
|
11
|
-
args: {
|
|
12
|
-
runtimeDir: { type: "string", description: "Runtime directory (default: .clawdlets)." },
|
|
13
|
-
envFile: { type: "string", description: "Env file for deploy creds (default: <runtimeDir>/env)." },
|
|
14
|
-
host: { type: "string", description: "Host name (defaults to clawdlets.json defaultHost / sole host)." },
|
|
15
|
-
idOrName: { type: "string", description: "Cattle server id or name." },
|
|
16
|
-
all: { type: "boolean", description: "Destroy all cattle servers.", default: false },
|
|
17
|
-
persona: { type: "string", description: "Filter by persona (with --all)." },
|
|
18
|
-
dryRun: { type: "boolean", description: "Print plan without deleting.", default: false },
|
|
19
|
-
},
|
|
20
|
-
async run({ args }) {
|
|
21
|
-
const cwd = process.cwd();
|
|
22
|
-
const ctx = loadHostContextOrExit({ cwd, runtimeDir: args.runtimeDir, hostArg: args.host });
|
|
23
|
-
if (!ctx)
|
|
24
|
-
return;
|
|
25
|
-
const { layout, config } = ctx;
|
|
26
|
-
requireEnabled({
|
|
27
|
-
enabled: Boolean(config.cattle?.enabled),
|
|
28
|
-
hint: "cattle is disabled (set cattle.enabled=true in fleet/clawdlets.json)",
|
|
29
|
-
});
|
|
30
|
-
const deployCreds = loadDeployCreds({ cwd, runtimeDir: args.runtimeDir, envFile: args.envFile });
|
|
31
|
-
const hcloudToken = String(deployCreds.values.HCLOUD_TOKEN || "").trim();
|
|
32
|
-
if (!hcloudToken)
|
|
33
|
-
throw new Error("missing HCLOUD_TOKEN (set in .clawdlets/env or env var; run: clawdlets env init)");
|
|
34
|
-
const personaFilterRaw = String(args.persona || "").trim();
|
|
35
|
-
const personaFilter = personaFilterRaw ? safeCattleLabelValue(personaFilterRaw, "persona") : "";
|
|
36
|
-
const servers = await listCattleServers({
|
|
37
|
-
token: hcloudToken,
|
|
38
|
-
labelSelector: buildCattleLabelSelector(personaFilter ? { [CATTLE_LABEL_PERSONA]: personaFilter } : {}),
|
|
39
|
-
});
|
|
40
|
-
const targets = [];
|
|
41
|
-
if (args.all) {
|
|
42
|
-
targets.push(...servers);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
const idOrName = String(args.idOrName || "").trim();
|
|
46
|
-
if (!idOrName)
|
|
47
|
-
throw new Error("missing <idOrName> (or pass --all)");
|
|
48
|
-
targets.push(resolveOne(servers, idOrName));
|
|
49
|
-
}
|
|
50
|
-
if (targets.length === 0) {
|
|
51
|
-
console.log("ok: no matching cattle servers");
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const st = openCattleState(layout.cattleDbPath);
|
|
55
|
-
try {
|
|
56
|
-
if (args.dryRun) {
|
|
57
|
-
console.log(formatTable([["ID", "NAME", "PERSONA", "TASK", "STATUS"], ...targets.map((s) => [s.id, s.name, s.persona || "-", s.taskId || "-", s.status])]));
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
const now = unixSecondsNow();
|
|
61
|
-
for (const t of targets) {
|
|
62
|
-
await destroyCattleServer({ token: hcloudToken, id: t.id });
|
|
63
|
-
st.markDeletedById(t.id, now);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
finally {
|
|
67
|
-
st.close();
|
|
68
|
-
}
|
|
69
|
-
console.log(`ok: destroyed ${targets.length} cattle server(s)`);
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
//# sourceMappingURL=destroy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"destroy.js","sourceRoot":"","sources":["../../../src/commands/cattle/destroy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export declare const cattleList: import("citty").CommandDef<{
|
|
2
|
-
runtimeDir: {
|
|
3
|
-
type: "string";
|
|
4
|
-
description: string;
|
|
5
|
-
};
|
|
6
|
-
envFile: {
|
|
7
|
-
type: "string";
|
|
8
|
-
description: string;
|
|
9
|
-
};
|
|
10
|
-
host: {
|
|
11
|
-
type: "string";
|
|
12
|
-
description: string;
|
|
13
|
-
};
|
|
14
|
-
json: {
|
|
15
|
-
type: "boolean";
|
|
16
|
-
description: string;
|
|
17
|
-
default: false;
|
|
18
|
-
};
|
|
19
|
-
}>;
|
|
20
|
-
//# sourceMappingURL=list.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/cattle/list.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;EA0ErB,CAAC"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import process from "node:process";
|
|
2
|
-
import { defineCommand } from "citty";
|
|
3
|
-
import { loadDeployCreds } from "@clawdlets/core/lib/deploy-creds";
|
|
4
|
-
import { openCattleState } from "@clawdlets/core/lib/cattle-state";
|
|
5
|
-
import { buildCattleLabelSelector, listCattleServers } from "@clawdlets/core/lib/hcloud-cattle";
|
|
6
|
-
import { loadHostContextOrExit } from "../../lib/context.js";
|
|
7
|
-
import { formatAgeSeconds, formatTable, requireEnabled, unixSecondsNow } from "./common.js";
|
|
8
|
-
export const cattleList = defineCommand({
|
|
9
|
-
meta: { name: "list", description: "List active cattle servers (Hetzner + local state reconciliation)." },
|
|
10
|
-
args: {
|
|
11
|
-
runtimeDir: { type: "string", description: "Runtime directory (default: .clawdlets)." },
|
|
12
|
-
envFile: { type: "string", description: "Env file for deploy creds (default: <runtimeDir>/env)." },
|
|
13
|
-
host: { type: "string", description: "Host name (defaults to clawdlets.json defaultHost / sole host)." },
|
|
14
|
-
json: { type: "boolean", description: "Output JSON.", default: false },
|
|
15
|
-
},
|
|
16
|
-
async run({ args }) {
|
|
17
|
-
const cwd = process.cwd();
|
|
18
|
-
const ctx = loadHostContextOrExit({ cwd, runtimeDir: args.runtimeDir, hostArg: args.host });
|
|
19
|
-
if (!ctx)
|
|
20
|
-
return;
|
|
21
|
-
const { layout, config } = ctx;
|
|
22
|
-
requireEnabled({
|
|
23
|
-
enabled: Boolean(config.cattle?.enabled),
|
|
24
|
-
hint: "cattle is disabled (set cattle.enabled=true in fleet/clawdlets.json)",
|
|
25
|
-
});
|
|
26
|
-
const deployCreds = loadDeployCreds({ cwd, runtimeDir: args.runtimeDir, envFile: args.envFile });
|
|
27
|
-
const hcloudToken = String(deployCreds.values.HCLOUD_TOKEN || "").trim();
|
|
28
|
-
if (!hcloudToken)
|
|
29
|
-
throw new Error("missing HCLOUD_TOKEN (set in .clawdlets/env or env var; run: clawdlets env init)");
|
|
30
|
-
const servers = await listCattleServers({ token: hcloudToken, labelSelector: buildCattleLabelSelector() });
|
|
31
|
-
const now = unixSecondsNow();
|
|
32
|
-
const byId = new Map();
|
|
33
|
-
for (const s of servers)
|
|
34
|
-
byId.set(s.id, s);
|
|
35
|
-
const st = openCattleState(layout.cattleDbPath);
|
|
36
|
-
try {
|
|
37
|
-
const activeLocal = st.listActive();
|
|
38
|
-
const remoteIds = new Set(servers.map((s) => s.id));
|
|
39
|
-
for (const local of activeLocal) {
|
|
40
|
-
if (!remoteIds.has(local.id))
|
|
41
|
-
st.markDeletedById(local.id, now);
|
|
42
|
-
}
|
|
43
|
-
for (const s of servers) {
|
|
44
|
-
const existing = st.findActiveByIdOrName(s.id);
|
|
45
|
-
st.upsertServer({
|
|
46
|
-
id: s.id,
|
|
47
|
-
name: s.name,
|
|
48
|
-
persona: s.persona || existing?.persona || "",
|
|
49
|
-
task: existing?.task || s.taskId || "",
|
|
50
|
-
taskId: s.taskId || existing?.taskId || "",
|
|
51
|
-
ttlSeconds: s.ttlSeconds,
|
|
52
|
-
createdAt: Math.floor(s.createdAt.getTime() / 1000),
|
|
53
|
-
expiresAt: Math.floor(s.expiresAt.getTime() / 1000),
|
|
54
|
-
labels: s.labels || existing?.labels || {},
|
|
55
|
-
lastStatus: s.status,
|
|
56
|
-
lastIpv4: s.ipv4,
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
finally {
|
|
61
|
-
st.close();
|
|
62
|
-
}
|
|
63
|
-
const sorted = [...servers].sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime() || a.id.localeCompare(b.id));
|
|
64
|
-
if (args.json) {
|
|
65
|
-
console.log(JSON.stringify({ servers: sorted }, null, 2));
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
const rows = [
|
|
69
|
-
["ID", "NAME", "PERSONA", "TASK", "STATUS", "TTL"],
|
|
70
|
-
...sorted.map((s) => {
|
|
71
|
-
const ttlLeft = Math.max(0, Math.floor(s.expiresAt.getTime() / 1000) - now);
|
|
72
|
-
return [s.id, s.name, s.persona || "-", s.taskId || "-", s.status, formatAgeSeconds(ttlLeft)];
|
|
73
|
-
}),
|
|
74
|
-
];
|
|
75
|
-
console.log(formatTable(rows));
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
//# sourceMappingURL=list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/cattle/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export declare const cattleLogs: import("citty").CommandDef<{
|
|
2
|
-
runtimeDir: {
|
|
3
|
-
type: "string";
|
|
4
|
-
description: string;
|
|
5
|
-
};
|
|
6
|
-
envFile: {
|
|
7
|
-
type: "string";
|
|
8
|
-
description: string;
|
|
9
|
-
};
|
|
10
|
-
host: {
|
|
11
|
-
type: "string";
|
|
12
|
-
description: string;
|
|
13
|
-
};
|
|
14
|
-
idOrName: {
|
|
15
|
-
type: "string";
|
|
16
|
-
description: string;
|
|
17
|
-
required: true;
|
|
18
|
-
};
|
|
19
|
-
lines: {
|
|
20
|
-
type: "string";
|
|
21
|
-
description: string;
|
|
22
|
-
default: string;
|
|
23
|
-
};
|
|
24
|
-
since: {
|
|
25
|
-
type: "string";
|
|
26
|
-
description: string;
|
|
27
|
-
};
|
|
28
|
-
follow: {
|
|
29
|
-
type: "boolean";
|
|
30
|
-
description: string;
|
|
31
|
-
default: false;
|
|
32
|
-
};
|
|
33
|
-
}>;
|
|
34
|
-
//# sourceMappingURL=logs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/commands/cattle/logs.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkDrB,CAAC"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import process from "node:process";
|
|
2
|
-
import { defineCommand } from "citty";
|
|
3
|
-
import { loadDeployCreds } from "@clawdlets/core/lib/deploy-creds";
|
|
4
|
-
import { buildCattleLabelSelector, listCattleServers } from "@clawdlets/core/lib/hcloud-cattle";
|
|
5
|
-
import { shellQuote, sshRun } from "@clawdlets/core/lib/ssh-remote";
|
|
6
|
-
import { loadHostContextOrExit } from "../../lib/context.js";
|
|
7
|
-
import { requireEnabled, resolveOne, resolveTailscaleIpv4 } from "./common.js";
|
|
8
|
-
export const cattleLogs = defineCommand({
|
|
9
|
-
meta: { name: "logs", description: "Stream logs from a cattle VM over tailnet SSH." },
|
|
10
|
-
args: {
|
|
11
|
-
runtimeDir: { type: "string", description: "Runtime directory (default: .clawdlets)." },
|
|
12
|
-
envFile: { type: "string", description: "Env file for deploy creds (default: <runtimeDir>/env)." },
|
|
13
|
-
host: { type: "string", description: "Host name (defaults to clawdlets.json defaultHost / sole host)." },
|
|
14
|
-
idOrName: { type: "string", description: "Cattle server id or name.", required: true },
|
|
15
|
-
lines: { type: "string", description: "Number of lines (default: 200).", default: "200" },
|
|
16
|
-
since: { type: "string", description: "Time window (journalctl syntax, e.g. '10m ago')." },
|
|
17
|
-
follow: { type: "boolean", description: "Follow logs.", default: false },
|
|
18
|
-
},
|
|
19
|
-
async run({ args }) {
|
|
20
|
-
const cwd = process.cwd();
|
|
21
|
-
const ctx = loadHostContextOrExit({ cwd, runtimeDir: args.runtimeDir, hostArg: args.host });
|
|
22
|
-
if (!ctx)
|
|
23
|
-
return;
|
|
24
|
-
const { config } = ctx;
|
|
25
|
-
requireEnabled({
|
|
26
|
-
enabled: Boolean(config.cattle?.enabled),
|
|
27
|
-
hint: "cattle is disabled (set cattle.enabled=true in fleet/clawdlets.json)",
|
|
28
|
-
});
|
|
29
|
-
const deployCreds = loadDeployCreds({ cwd, runtimeDir: args.runtimeDir, envFile: args.envFile });
|
|
30
|
-
const hcloudToken = String(deployCreds.values.HCLOUD_TOKEN || "").trim();
|
|
31
|
-
if (!hcloudToken)
|
|
32
|
-
throw new Error("missing HCLOUD_TOKEN (set in .clawdlets/env or env var; run: clawdlets env init)");
|
|
33
|
-
const servers = await listCattleServers({ token: hcloudToken, labelSelector: buildCattleLabelSelector() });
|
|
34
|
-
const server = resolveOne(servers, String(args.idOrName || ""));
|
|
35
|
-
const ip = await resolveTailscaleIpv4(server.name);
|
|
36
|
-
const targetHost = `admin@${ip}`;
|
|
37
|
-
const n = String(args.lines || "200").trim() || "200";
|
|
38
|
-
if (!/^\d+$/.test(n) || Number(n) <= 0)
|
|
39
|
-
throw new Error(`invalid --lines: ${n}`);
|
|
40
|
-
const since = args.since ? String(args.since).trim() : "";
|
|
41
|
-
const remoteCmd = [
|
|
42
|
-
"sudo",
|
|
43
|
-
"journalctl",
|
|
44
|
-
"-u",
|
|
45
|
-
shellQuote("clawdlets-cattle.service"),
|
|
46
|
-
"-n",
|
|
47
|
-
shellQuote(n),
|
|
48
|
-
...(since ? ["--since", shellQuote(since)] : []),
|
|
49
|
-
...(args.follow ? ["-f"] : []),
|
|
50
|
-
"--no-pager",
|
|
51
|
-
].join(" ");
|
|
52
|
-
await sshRun(targetHost, remoteCmd, { redact: [] });
|
|
53
|
-
},
|
|
54
|
-
});
|
|
55
|
-
//# sourceMappingURL=logs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/commands/cattle/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"persona.d.ts","sourceRoot":"","sources":["../../../src/commands/cattle/persona.ts"],"names":[],"mappings":"AAoFA,eAAO,MAAM,aAAa,qDAGxB,CAAC"}
|