clawdlets 0.2.2 → 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.
Files changed (176) hide show
  1. package/dist/main.mjs +5037 -0
  2. package/node_modules/@clawdlets/clf-queue/package.json +4 -2
  3. package/node_modules/@clawdlets/core/package.json +1 -1
  4. package/package.json +15 -12
  5. package/dist/commands/bootstrap.d.ts +0 -43
  6. package/dist/commands/bootstrap.d.ts.map +0 -1
  7. package/dist/commands/bootstrap.js +0 -318
  8. package/dist/commands/bootstrap.js.map +0 -1
  9. package/dist/commands/bot.d.ts +0 -2
  10. package/dist/commands/bot.d.ts.map +0 -1
  11. package/dist/commands/bot.js +0 -97
  12. package/dist/commands/bot.js.map +0 -1
  13. package/dist/commands/cattle/common.d.ts +0 -29
  14. package/dist/commands/cattle/common.d.ts.map +0 -1
  15. package/dist/commands/cattle/common.js +0 -102
  16. package/dist/commands/cattle/common.js.map +0 -1
  17. package/dist/commands/cattle/destroy.d.ts +0 -33
  18. package/dist/commands/cattle/destroy.d.ts.map +0 -1
  19. package/dist/commands/cattle/destroy.js +0 -72
  20. package/dist/commands/cattle/destroy.js.map +0 -1
  21. package/dist/commands/cattle/list.d.ts +0 -20
  22. package/dist/commands/cattle/list.d.ts.map +0 -1
  23. package/dist/commands/cattle/list.js +0 -78
  24. package/dist/commands/cattle/list.js.map +0 -1
  25. package/dist/commands/cattle/logs.d.ts +0 -34
  26. package/dist/commands/cattle/logs.d.ts.map +0 -1
  27. package/dist/commands/cattle/logs.js +0 -55
  28. package/dist/commands/cattle/logs.js.map +0 -1
  29. package/dist/commands/cattle/persona.d.ts +0 -2
  30. package/dist/commands/cattle/persona.d.ts.map +0 -1
  31. package/dist/commands/cattle/persona.js +0 -85
  32. package/dist/commands/cattle/persona.js.map +0 -1
  33. package/dist/commands/cattle/reap.d.ts +0 -20
  34. package/dist/commands/cattle/reap.d.ts.map +0 -1
  35. package/dist/commands/cattle/reap.js +0 -60
  36. package/dist/commands/cattle/reap.js.map +0 -1
  37. package/dist/commands/cattle/spawn.d.ts +0 -73
  38. package/dist/commands/cattle/spawn.d.ts.map +0 -1
  39. package/dist/commands/cattle/spawn.js +0 -147
  40. package/dist/commands/cattle/spawn.js.map +0 -1
  41. package/dist/commands/cattle/ssh.d.ts +0 -20
  42. package/dist/commands/cattle/ssh.d.ts.map +0 -1
  43. package/dist/commands/cattle/ssh.js +0 -37
  44. package/dist/commands/cattle/ssh.js.map +0 -1
  45. package/dist/commands/cattle.d.ts +0 -2
  46. package/dist/commands/cattle.d.ts.map +0 -1
  47. package/dist/commands/cattle.js +0 -21
  48. package/dist/commands/cattle.js.map +0 -1
  49. package/dist/commands/config.d.ts +0 -2
  50. package/dist/commands/config.d.ts.map +0 -1
  51. package/dist/commands/config.js +0 -163
  52. package/dist/commands/config.js.map +0 -1
  53. package/dist/commands/doctor.d.ts +0 -35
  54. package/dist/commands/doctor.d.ts.map +0 -1
  55. package/dist/commands/doctor.js +0 -65
  56. package/dist/commands/doctor.js.map +0 -1
  57. package/dist/commands/env.d.ts +0 -22
  58. package/dist/commands/env.d.ts.map +0 -1
  59. package/dist/commands/env.js +0 -132
  60. package/dist/commands/env.js.map +0 -1
  61. package/dist/commands/fleet.d.ts +0 -2
  62. package/dist/commands/fleet.d.ts.map +0 -1
  63. package/dist/commands/fleet.js +0 -61
  64. package/dist/commands/fleet.js.map +0 -1
  65. package/dist/commands/host.d.ts +0 -2
  66. package/dist/commands/host.d.ts.map +0 -1
  67. package/dist/commands/host.js +0 -277
  68. package/dist/commands/host.js.map +0 -1
  69. package/dist/commands/image.d.ts +0 -2
  70. package/dist/commands/image.d.ts.map +0 -1
  71. package/dist/commands/image.js +0 -133
  72. package/dist/commands/image.js.map +0 -1
  73. package/dist/commands/infra.d.ts +0 -2
  74. package/dist/commands/infra.d.ts.map +0 -1
  75. package/dist/commands/infra.js +0 -171
  76. package/dist/commands/infra.js.map +0 -1
  77. package/dist/commands/lockdown.d.ts +0 -25
  78. package/dist/commands/lockdown.d.ts.map +0 -1
  79. package/dist/commands/lockdown.js +0 -93
  80. package/dist/commands/lockdown.js.map +0 -1
  81. package/dist/commands/project.d.ts +0 -2
  82. package/dist/commands/project.d.ts.map +0 -1
  83. package/dist/commands/project.js +0 -264
  84. package/dist/commands/project.js.map +0 -1
  85. package/dist/commands/secrets/common.d.ts +0 -8
  86. package/dist/commands/secrets/common.d.ts.map +0 -1
  87. package/dist/commands/secrets/common.js +0 -20
  88. package/dist/commands/secrets/common.js.map +0 -1
  89. package/dist/commands/secrets/init.d.ts +0 -39
  90. package/dist/commands/secrets/init.d.ts.map +0 -1
  91. package/dist/commands/secrets/init.js +0 -455
  92. package/dist/commands/secrets/init.js.map +0 -1
  93. package/dist/commands/secrets/path.d.ts +0 -11
  94. package/dist/commands/secrets/path.d.ts.map +0 -1
  95. package/dist/commands/secrets/path.js +0 -24
  96. package/dist/commands/secrets/path.js.map +0 -1
  97. package/dist/commands/secrets/sync.d.ts +0 -25
  98. package/dist/commands/secrets/sync.d.ts.map +0 -1
  99. package/dist/commands/secrets/sync.js +0 -67
  100. package/dist/commands/secrets/sync.js.map +0 -1
  101. package/dist/commands/secrets/verify.d.ts +0 -28
  102. package/dist/commands/secrets/verify.d.ts.map +0 -1
  103. package/dist/commands/secrets/verify.js +0 -118
  104. package/dist/commands/secrets/verify.js.map +0 -1
  105. package/dist/commands/secrets.d.ts +0 -2
  106. package/dist/commands/secrets.d.ts.map +0 -1
  107. package/dist/commands/secrets.js +0 -18
  108. package/dist/commands/secrets.js.map +0 -1
  109. package/dist/commands/server/common.d.ts +0 -3
  110. package/dist/commands/server/common.d.ts.map +0 -1
  111. package/dist/commands/server/common.js +0 -3
  112. package/dist/commands/server/common.js.map +0 -1
  113. package/dist/commands/server/deploy.d.ts +0 -53
  114. package/dist/commands/server/deploy.d.ts.map +0 -1
  115. package/dist/commands/server/deploy.js +0 -177
  116. package/dist/commands/server/deploy.js.map +0 -1
  117. package/dist/commands/server/github-sync.d.ts +0 -2
  118. package/dist/commands/server/github-sync.d.ts.map +0 -1
  119. package/dist/commands/server/github-sync.js +0 -166
  120. package/dist/commands/server/github-sync.js.map +0 -1
  121. package/dist/commands/server/manifest.d.ts +0 -28
  122. package/dist/commands/server/manifest.d.ts.map +0 -1
  123. package/dist/commands/server/manifest.js +0 -82
  124. package/dist/commands/server/manifest.js.map +0 -1
  125. package/dist/commands/server.d.ts +0 -2
  126. package/dist/commands/server.d.ts.map +0 -1
  127. package/dist/commands/server.js +0 -267
  128. package/dist/commands/server.js.map +0 -1
  129. package/dist/commands/ssh-target.d.ts +0 -3
  130. package/dist/commands/ssh-target.d.ts.map +0 -1
  131. package/dist/commands/ssh-target.js +0 -15
  132. package/dist/commands/ssh-target.js.map +0 -1
  133. package/dist/lib/context.d.ts +0 -21
  134. package/dist/lib/context.d.ts.map +0 -1
  135. package/dist/lib/context.js +0 -19
  136. package/dist/lib/context.js.map +0 -1
  137. package/dist/lib/deploy-gate.d.ts +0 -9
  138. package/dist/lib/deploy-gate.d.ts.map +0 -1
  139. package/dist/lib/deploy-gate.js +0 -20
  140. package/dist/lib/deploy-gate.js.map +0 -1
  141. package/dist/lib/deploy-manifest.d.ts +0 -11
  142. package/dist/lib/deploy-manifest.d.ts.map +0 -1
  143. package/dist/lib/deploy-manifest.js +0 -46
  144. package/dist/lib/deploy-manifest.js.map +0 -1
  145. package/dist/lib/doctor-render.d.ts +0 -14
  146. package/dist/lib/doctor-render.d.ts.map +0 -1
  147. package/dist/lib/doctor-render.js +0 -131
  148. package/dist/lib/doctor-render.js.map +0 -1
  149. package/dist/lib/host-resolve.d.ts +0 -6
  150. package/dist/lib/host-resolve.d.ts.map +0 -1
  151. package/dist/lib/host-resolve.js +0 -20
  152. package/dist/lib/host-resolve.js.map +0 -1
  153. package/dist/lib/linux-build.d.ts +0 -8
  154. package/dist/lib/linux-build.d.ts.map +0 -1
  155. package/dist/lib/linux-build.js +0 -15
  156. package/dist/lib/linux-build.js.map +0 -1
  157. package/dist/lib/manifest-signature.d.ts +0 -17
  158. package/dist/lib/manifest-signature.d.ts.map +0 -1
  159. package/dist/lib/manifest-signature.js +0 -52
  160. package/dist/lib/manifest-signature.js.map +0 -1
  161. package/dist/lib/template-spec.d.ts +0 -9
  162. package/dist/lib/template-spec.d.ts.map +0 -1
  163. package/dist/lib/template-spec.js +0 -50
  164. package/dist/lib/template-spec.js.map +0 -1
  165. package/dist/lib/version.d.ts +0 -3
  166. package/dist/lib/version.d.ts.map +0 -1
  167. package/dist/lib/version.js +0 -17
  168. package/dist/lib/version.js.map +0 -1
  169. package/dist/lib/wizard.d.ts +0 -10
  170. package/dist/lib/wizard.d.ts.map +0 -1
  171. package/dist/lib/wizard.js +0 -25
  172. package/dist/lib/wizard.js.map +0 -1
  173. package/dist/main.d.ts +0 -3
  174. package/dist/main.d.ts.map +0 -1
  175. package/dist/main.js +0 -50
  176. package/dist/main.js.map +0 -1
@@ -1,73 +0,0 @@
1
- export declare const cattleSpawn: import("citty").CommandDef<{
2
- runtimeDir: {
3
- type: "string";
4
- description: string;
5
- };
6
- host: {
7
- type: "string";
8
- description: string;
9
- };
10
- persona: {
11
- type: "string";
12
- description: string;
13
- required: true;
14
- };
15
- taskFile: {
16
- type: "string";
17
- description: string;
18
- required: true;
19
- };
20
- ttl: {
21
- type: "string";
22
- description: string;
23
- };
24
- image: {
25
- type: "string";
26
- description: string;
27
- };
28
- serverType: {
29
- type: "string";
30
- description: string;
31
- };
32
- location: {
33
- type: "string";
34
- description: string;
35
- };
36
- autoShutdown: {
37
- type: "boolean";
38
- description: string;
39
- };
40
- withGithubToken: {
41
- type: "boolean";
42
- description: string;
43
- default: false;
44
- };
45
- socket: {
46
- type: "string";
47
- description: string;
48
- };
49
- requester: {
50
- type: "string";
51
- description: string;
52
- };
53
- idempotencyKey: {
54
- type: "string";
55
- description: string;
56
- };
57
- wait: {
58
- type: "boolean";
59
- description: string;
60
- default: true;
61
- };
62
- waitTimeout: {
63
- type: "string";
64
- description: string;
65
- default: string;
66
- };
67
- dryRun: {
68
- type: "boolean";
69
- description: string;
70
- default: false;
71
- };
72
- }>;
73
- //# sourceMappingURL=spawn.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/commands/cattle/spawn.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0JtB,CAAC"}
@@ -1,147 +0,0 @@
1
- import path from "node:path";
2
- import process from "node:process";
3
- import { defineCommand } from "citty";
4
- import { CLF_PROTOCOL_VERSION, createClfClient } from "@clawdlets/clf-queue";
5
- import { sanitizeOperatorId } from "@clawdlets/core/lib/identifiers";
6
- import { openCattleState } from "@clawdlets/core/lib/cattle-state";
7
- import { loadHostContextOrExit } from "../../lib/context.js";
8
- import { loadTaskFromFile, requireEnabled, requireFile, requireTtlSeconds, unixSecondsNow, waitForClfJobTerminal } from "./common.js";
9
- export const cattleSpawn = defineCommand({
10
- meta: { name: "spawn", description: "Enqueue a cattle.spawn job via clf-orchestrator (no secrets in user_data)." },
11
- args: {
12
- runtimeDir: { type: "string", description: "Runtime directory (default: .clawdlets)." },
13
- host: { type: "string", description: "Host name (defaults to clawdlets.json defaultHost / sole host)." },
14
- persona: { type: "string", description: "Persona name.", required: true },
15
- taskFile: { type: "string", description: "Task JSON file (schemaVersion 1).", required: true },
16
- ttl: { type: "string", description: "TTL override (default: cattle.hetzner.defaultTtl)." },
17
- image: { type: "string", description: "Hetzner image override (default: cattle.hetzner.image)." },
18
- serverType: { type: "string", description: "Hetzner server type override (default: cattle.hetzner.serverType)." },
19
- location: { type: "string", description: "Hetzner location override (default: cattle.hetzner.location)." },
20
- autoShutdown: { type: "boolean", description: "Auto poweroff after task (default: cattle.defaults.autoShutdown)." },
21
- withGithubToken: { type: "boolean", description: "Include GITHUB_TOKEN in cattle env (explicit).", default: false },
22
- socket: { type: "string", description: "clf-orchestrator unix socket path (default: /run/clf/orchestrator.sock)." },
23
- requester: { type: "string", description: "Requester id (default: $USER)." },
24
- idempotencyKey: { type: "string", description: "Idempotency key (optional)." },
25
- wait: { type: "boolean", description: "Wait for job completion.", default: true },
26
- waitTimeout: { type: "string", description: "Wait timeout seconds.", default: "300" },
27
- dryRun: { type: "boolean", description: "Print enqueue request without enqueueing.", default: false },
28
- },
29
- async run({ args }) {
30
- const cwd = process.cwd();
31
- const ctx = loadHostContextOrExit({ cwd, runtimeDir: args.runtimeDir, hostArg: args.host });
32
- if (!ctx)
33
- return;
34
- const { layout, config } = ctx;
35
- requireEnabled({
36
- enabled: Boolean(config.cattle?.enabled),
37
- hint: "cattle is disabled (set cattle.enabled=true in fleet/clawdlets.json)",
38
- });
39
- const persona = String(args.persona || "").trim();
40
- if (!persona)
41
- throw new Error("missing --persona");
42
- const taskFileRaw = String(args.taskFile || "").trim();
43
- if (!taskFileRaw)
44
- throw new Error("missing --task-file");
45
- const taskFile = path.isAbsolute(taskFileRaw) ? taskFileRaw : path.resolve(cwd, taskFileRaw);
46
- requireFile(taskFile, "task file");
47
- const taskFromFile = loadTaskFromFile(taskFile);
48
- const task = { ...taskFromFile, callbackUrl: "" };
49
- const ttlRaw = String(args.ttl || config.cattle?.hetzner?.defaultTtl || "").trim();
50
- if (ttlRaw)
51
- requireTtlSeconds(ttlRaw);
52
- const payload = {
53
- persona,
54
- task,
55
- ttl: ttlRaw,
56
- image: String(args.image || config.cattle?.hetzner?.image || "").trim(),
57
- serverType: String(args.serverType || config.cattle?.hetzner?.serverType || "").trim(),
58
- location: String(args.location || config.cattle?.hetzner?.location || "").trim(),
59
- ...(typeof args.autoShutdown === "boolean"
60
- ? { autoShutdown: Boolean(args.autoShutdown) }
61
- : typeof config.cattle?.defaults?.autoShutdown === "boolean"
62
- ? { autoShutdown: Boolean(config.cattle.defaults.autoShutdown) }
63
- : {}),
64
- ...(args.withGithubToken ? { withGithubToken: true } : {}),
65
- };
66
- const socketPath = String(args.socket || process.env.CLF_SOCKET_PATH || "/run/clf/orchestrator.sock").trim();
67
- if (!socketPath)
68
- throw new Error("missing --socket (or set CLF_SOCKET_PATH)");
69
- const requester = sanitizeOperatorId(String(args.requester || process.env.USER || "operator"));
70
- const idempotencyKey = String(args.idempotencyKey || "").trim();
71
- const request = {
72
- protocolVersion: CLF_PROTOCOL_VERSION,
73
- requester,
74
- idempotencyKey,
75
- kind: "cattle.spawn",
76
- payload,
77
- runAt: "",
78
- priority: 0,
79
- };
80
- if (args.dryRun) {
81
- console.log(JSON.stringify({ action: "clf.jobs.enqueue", socketPath, request }, null, 2));
82
- return;
83
- }
84
- const client = createClfClient({ socketPath });
85
- const res = await client.enqueue(request);
86
- const waitTimeoutRaw = String(args.waitTimeout || "300").trim();
87
- if (!/^\d+$/.test(waitTimeoutRaw) || Number(waitTimeoutRaw) <= 0) {
88
- throw new Error(`invalid --wait-timeout: ${waitTimeoutRaw}`);
89
- }
90
- const timeoutMs = Number(waitTimeoutRaw) * 1000;
91
- if (!args.wait) {
92
- console.log(res.jobId);
93
- return;
94
- }
95
- const job = await waitForClfJobTerminal({
96
- client,
97
- jobId: res.jobId,
98
- timeoutMs,
99
- pollMs: 1_000,
100
- });
101
- if (job.status !== "done") {
102
- const err = String(job.lastError || "").trim();
103
- throw new Error(`spawn job ${res.jobId} ${job.status}${err ? `: ${err}` : ""}`);
104
- }
105
- const server = job.result?.server;
106
- if (server && typeof server === "object") {
107
- const id = String(server.id || "").trim();
108
- const name = String(server.name || "").trim();
109
- const ipv4 = String(server.ipv4 || "").trim();
110
- const createdAtIso = String(server.createdAt || "").trim();
111
- const expiresAtIso = String(server.expiresAt || "").trim();
112
- const createdAt = Number.isFinite(Date.parse(createdAtIso)) ? Math.floor(Date.parse(createdAtIso) / 1000) : unixSecondsNow();
113
- const expiresAt = Number.isFinite(Date.parse(expiresAtIso)) ? Math.floor(Date.parse(expiresAtIso) / 1000) : 0;
114
- const ttlSeconds = typeof server.ttlSeconds === "number" && Number.isFinite(server.ttlSeconds)
115
- ? Math.max(0, Math.floor(server.ttlSeconds))
116
- : Math.max(0, expiresAt - createdAt);
117
- const labels = server.labels && typeof server.labels === "object" && !Array.isArray(server.labels)
118
- ? server.labels
119
- : {};
120
- if (id && name) {
121
- const st = openCattleState(layout.cattleDbPath);
122
- try {
123
- st.upsertServer({
124
- id,
125
- name,
126
- persona: String(server.persona || persona),
127
- task: String(server.taskId || task.taskId),
128
- taskId: String(server.taskId || task.taskId),
129
- ttlSeconds,
130
- createdAt,
131
- expiresAt,
132
- labels,
133
- lastStatus: String(server.status || "unknown"),
134
- lastIpv4: ipv4,
135
- });
136
- }
137
- finally {
138
- st.close();
139
- }
140
- }
141
- console.log(`ok: spawned ${name || "cattle"} (id=${id || "?"} ipv4=${ipv4 || "?"} job=${res.jobId})`);
142
- return;
143
- }
144
- console.log(`ok: spawn completed (job=${res.jobId})`);
145
- },
146
- });
147
- //# sourceMappingURL=spawn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/commands/cattle/spawn.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- export declare const cattleSsh: 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
- }>;
20
- //# sourceMappingURL=ssh.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../../src/commands/cattle/ssh.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;EA+BpB,CAAC"}
@@ -1,37 +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 { run } from "@clawdlets/core/lib/run";
6
- import { loadHostContextOrExit } from "../../lib/context.js";
7
- import { requireEnabled, resolveOne, resolveTailscaleIpv4 } from "./common.js";
8
- export const cattleSsh = defineCommand({
9
- meta: { name: "ssh", description: "SSH into a cattle VM over tailnet (admin@<tailscale-ip>)." },
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
- },
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 { 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 server = resolveOne(servers, String(args.idOrName || ""));
32
- const ip = await resolveTailscaleIpv4(server.name);
33
- const targetHost = `admin@${ip}`;
34
- await run("ssh", ["-t", "--", targetHost], { redact: [] });
35
- },
36
- });
37
- //# sourceMappingURL=ssh.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../../src/commands/cattle/ssh.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAChG,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE/E,MAAM,CAAC,MAAM,SAAS,GAAG,aAAa,CAAC;IACrC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,2DAA2D,EAAE;IAC/F,IAAI,EAAE;QACJ,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0CAA0C,EAAE;QACvF,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wDAAwD,EAAE;QAClG,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iEAAiE,EAAE;QACxG,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE;KACvF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,qBAAqB,CAAC,EAAE,GAAG,EAAE,UAAU,EAAG,IAAY,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrG,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;QAEvB,cAAc,CAAC;YACb,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;YACxC,IAAI,EAAE,sEAAsE;SAC7E,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,eAAe,CAAC,EAAE,GAAG,EAAE,UAAU,EAAG,IAAY,CAAC,UAAU,EAAE,OAAO,EAAG,IAAY,CAAC,OAAO,EAAE,CAAC,CAAC;QACnH,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzE,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;QAEtH,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;QAC3G,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAE,IAAY,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QAEzE,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,SAAS,EAAE,EAAE,CAAC;QAEjC,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;CACF,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const cattle: import("citty").CommandDef<import("citty").ArgsDef>;
2
- //# sourceMappingURL=cattle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cattle.d.ts","sourceRoot":"","sources":["../../src/commands/cattle.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,MAAM,qDAWjB,CAAC"}
@@ -1,21 +0,0 @@
1
- import { defineCommand } from "citty";
2
- import { cattleDestroy } from "./cattle/destroy.js";
3
- import { cattleList } from "./cattle/list.js";
4
- import { cattleLogs } from "./cattle/logs.js";
5
- import { cattlePersona } from "./cattle/persona.js";
6
- import { cattleReap } from "./cattle/reap.js";
7
- import { cattleSpawn } from "./cattle/spawn.js";
8
- import { cattleSsh } from "./cattle/ssh.js";
9
- export const cattle = defineCommand({
10
- meta: { name: "cattle", description: "Cattle (ephemeral agents on Hetzner Cloud)." },
11
- subCommands: {
12
- spawn: cattleSpawn,
13
- list: cattleList,
14
- destroy: cattleDestroy,
15
- reap: cattleReap,
16
- logs: cattleLogs,
17
- ssh: cattleSsh,
18
- persona: cattlePersona,
19
- },
20
- });
21
- //# sourceMappingURL=cattle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cattle.js","sourceRoot":"","sources":["../../src/commands/cattle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,MAAM,GAAG,aAAa,CAAC;IAClC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;IACpF,WAAW,EAAE;QACX,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,aAAa;QACtB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,SAAS;QACd,OAAO,EAAE,aAAa;KACvB;CACF,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const config: import("citty").CommandDef<import("citty").ArgsDef>;
2
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AA0KA,eAAO,MAAM,MAAM,qDAGjB,CAAC"}
@@ -1,163 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import process from "node:process";
4
- import { defineCommand } from "citty";
5
- import { ensureDir } from "@clawdlets/core/lib/fs-safe";
6
- import { splitDotPath } from "@clawdlets/core/lib/dot-path";
7
- import { findRepoRoot } from "@clawdlets/core/lib/repo";
8
- import { getRepoLayout } from "@clawdlets/core/repo-layout";
9
- import { createDefaultClawdletsConfig, ClawdletsConfigSchema, loadClawdletsConfig, loadClawdletsConfigRaw, writeClawdletsConfig, } from "@clawdlets/core/lib/clawdlets-config";
10
- function getAtPath(obj, parts) {
11
- let cur = obj;
12
- for (const k of parts) {
13
- if (cur == null || typeof cur !== "object")
14
- return undefined;
15
- cur = cur[k];
16
- }
17
- return cur;
18
- }
19
- function setAtPath(obj, parts, value) {
20
- let cur = obj;
21
- for (let i = 0; i < parts.length - 1; i++) {
22
- const k = parts[i];
23
- if (cur[k] == null || typeof cur[k] !== "object" || Array.isArray(cur[k]))
24
- cur[k] = {};
25
- cur = cur[k];
26
- }
27
- cur[parts[parts.length - 1]] = value;
28
- }
29
- function deleteAtPath(obj, parts) {
30
- let cur = obj;
31
- for (let i = 0; i < parts.length - 1; i++) {
32
- const k = parts[i];
33
- if (cur == null || typeof cur !== "object")
34
- return false;
35
- cur = cur[k];
36
- }
37
- const last = parts[parts.length - 1];
38
- if (cur && typeof cur === "object" && Object.prototype.hasOwnProperty.call(cur, last)) {
39
- delete cur[last];
40
- return true;
41
- }
42
- return false;
43
- }
44
- const init = defineCommand({
45
- meta: { name: "init", description: "Initialize fleet/clawdlets.json (canonical config)." },
46
- args: {
47
- host: { type: "string", description: "Initial host name.", default: "clawdbot-fleet-host" },
48
- force: { type: "boolean", description: "Overwrite existing clawdlets.json.", default: false },
49
- "dry-run": { type: "boolean", description: "Print planned writes without writing.", default: false },
50
- },
51
- async run({ args }) {
52
- const repoRoot = findRepoRoot(process.cwd());
53
- const host = String(args.host || "clawdbot-fleet-host").trim() || "clawdbot-fleet-host";
54
- const configPath = getRepoLayout(repoRoot).clawdletsConfigPath;
55
- if (fs.existsSync(configPath) && !args.force) {
56
- throw new Error(`config already exists (pass --force to overwrite): ${configPath}`);
57
- }
58
- const config = createDefaultClawdletsConfig({ host });
59
- if (args["dry-run"]) {
60
- console.log(`planned: write ${path.relative(repoRoot, configPath)}`);
61
- return;
62
- }
63
- await ensureDir(path.dirname(configPath));
64
- await writeClawdletsConfig({ configPath, config });
65
- console.log(`ok: wrote ${path.relative(repoRoot, configPath)}`);
66
- },
67
- });
68
- const show = defineCommand({
69
- meta: { name: "show", description: "Print fleet/clawdlets.json." },
70
- args: {
71
- pretty: { type: "boolean", description: "Pretty-print JSON.", default: true },
72
- },
73
- async run({ args }) {
74
- const repoRoot = findRepoRoot(process.cwd());
75
- const { config } = loadClawdletsConfig({ repoRoot });
76
- console.log(args.pretty ? JSON.stringify(config, null, 2) : JSON.stringify(config));
77
- },
78
- });
79
- const validate = defineCommand({
80
- meta: { name: "validate", description: "Validate fleet/clawdlets.json schema." },
81
- args: {},
82
- async run() {
83
- const repoRoot = findRepoRoot(process.cwd());
84
- loadClawdletsConfig({ repoRoot });
85
- console.log("ok");
86
- },
87
- });
88
- const get = defineCommand({
89
- meta: { name: "get", description: "Get a value from fleet/clawdlets.json (dot path)." },
90
- args: {
91
- path: { type: "string", description: "Dot path (e.g. fleet.botOrder)." },
92
- json: { type: "boolean", description: "JSON output.", default: false },
93
- },
94
- async run({ args }) {
95
- const repoRoot = findRepoRoot(process.cwd());
96
- const { config } = loadClawdletsConfig({ repoRoot });
97
- const parts = splitDotPath(String(args.path || ""));
98
- const v = getAtPath(config, parts);
99
- if (args.json)
100
- console.log(JSON.stringify({ path: parts.join("."), value: v }, null, 2));
101
- else
102
- console.log(typeof v === "string" ? v : JSON.stringify(v, null, 2));
103
- },
104
- });
105
- const set = defineCommand({
106
- meta: { name: "set", description: "Set a value in fleet/clawdlets.json (dot path)." },
107
- args: {
108
- path: { type: "string", description: "Dot path (e.g. fleet.botOrder)." },
109
- value: { type: "string", description: "String value." },
110
- "value-json": { type: "string", description: "JSON value (parsed)." },
111
- delete: { type: "boolean", description: "Delete the key at path.", default: false },
112
- },
113
- async run({ args }) {
114
- const repoRoot = findRepoRoot(process.cwd());
115
- const { configPath, config } = loadClawdletsConfigRaw({ repoRoot });
116
- const parts = splitDotPath(String(args.path || ""));
117
- const next = structuredClone(config);
118
- if (args.delete) {
119
- const ok = deleteAtPath(next, parts);
120
- if (!ok)
121
- throw new Error(`path not found: ${parts.join(".")}`);
122
- }
123
- else if (args["value-json"] !== undefined) {
124
- let parsed;
125
- try {
126
- parsed = JSON.parse(String(args["value-json"]));
127
- }
128
- catch {
129
- throw new Error("invalid --value-json (must be valid JSON)");
130
- }
131
- setAtPath(next, parts, parsed);
132
- }
133
- else if (args.value !== undefined) {
134
- setAtPath(next, parts, String(args.value));
135
- }
136
- else {
137
- throw new Error("set requires --value or --value-json (or --delete)");
138
- }
139
- try {
140
- const validated = ClawdletsConfigSchema.parse(next);
141
- await writeClawdletsConfig({ configPath, config: validated });
142
- console.log("ok");
143
- }
144
- catch (err) {
145
- let details = "";
146
- if (Array.isArray(err?.errors)) {
147
- details = err.errors
148
- .map((e) => (Array.isArray(e.path) ? e.path.join(".") : "") || e.message)
149
- .filter(Boolean)
150
- .join(", ");
151
- }
152
- const msg = details
153
- ? `config update failed; revert or fix validation errors: ${details}`
154
- : "config update failed; revert or fix validation errors";
155
- throw new Error(msg);
156
- }
157
- },
158
- });
159
- export const config = defineCommand({
160
- meta: { name: "config", description: "Canonical config (fleet/clawdlets.json)." },
161
- subCommands: { init, show, validate, get, set },
162
- });
163
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- export declare const doctor: 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
- scope: {
15
- type: "string";
16
- description: string;
17
- default: string;
18
- };
19
- json: {
20
- type: "boolean";
21
- description: string;
22
- default: false;
23
- };
24
- "show-ok": {
25
- type: "boolean";
26
- description: string;
27
- default: false;
28
- };
29
- strict: {
30
- type: "boolean";
31
- description: string;
32
- default: false;
33
- };
34
- }>;
35
- //# sourceMappingURL=doctor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwDjB,CAAC"}
@@ -1,65 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import process from "node:process";
4
- import { defineCommand } from "citty";
5
- import { collectDoctorChecks } from "@clawdlets/core/doctor";
6
- import { findRepoRoot } from "@clawdlets/core/lib/repo";
7
- import { resolveHostNameOrExit } from "../lib/host-resolve.js";
8
- import { renderDoctorReport } from "../lib/doctor-render.js";
9
- export const doctor = defineCommand({
10
- meta: {
11
- name: "doctor",
12
- description: "Validate repo + runtime inputs for deploying a host.",
13
- },
14
- args: {
15
- runtimeDir: { type: "string", description: "Runtime directory (default: .clawdlets)." },
16
- envFile: { type: "string", description: "Env file for deploy creds (default: <runtimeDir>/env)." },
17
- host: { type: "string", description: "Host name (defaults to clawdlets.json defaultHost / sole host)." },
18
- scope: {
19
- type: "string",
20
- description: "Which checks to run: repo | bootstrap | server-deploy | cattle | all (default: all).",
21
- default: "all",
22
- },
23
- json: { type: "boolean", description: "Output JSON.", default: false },
24
- "show-ok": { type: "boolean", description: "Show ok checks too.", default: false },
25
- strict: { type: "boolean", description: "Fail on warn too (deploy gating).", default: false },
26
- },
27
- async run({ args }) {
28
- const cwd = process.cwd();
29
- const scopeRaw = String(args.scope || "all").trim();
30
- if (scopeRaw !== "repo" && scopeRaw !== "bootstrap" && scopeRaw !== "server-deploy" && scopeRaw !== "cattle" && scopeRaw !== "all") {
31
- throw new Error(`invalid --scope: ${scopeRaw} (expected repo|bootstrap|server-deploy|cattle|all)`);
32
- }
33
- const scope = scopeRaw;
34
- if (scope === "repo") {
35
- const repoRoot = findRepoRoot(cwd);
36
- const templateSource = path.join(repoRoot, "config", "template-source.json");
37
- const clawdletsConfig = path.join(repoRoot, "fleet", "clawdlets.json");
38
- if (fs.existsSync(templateSource) && !fs.existsSync(clawdletsConfig)) {
39
- console.log("note: CLI repo detected; run doctor in a project repo or via template-e2e.");
40
- return;
41
- }
42
- }
43
- const hostName = resolveHostNameOrExit({ cwd, runtimeDir: args.runtimeDir, hostArg: args.host });
44
- if (!hostName)
45
- return;
46
- const checks = await collectDoctorChecks({
47
- cwd,
48
- runtimeDir: args.runtimeDir,
49
- envFile: args.envFile,
50
- host: hostName,
51
- scope,
52
- });
53
- if (args.json) {
54
- console.log(JSON.stringify({ scope: scopeRaw, host: hostName, checks }, null, 2));
55
- }
56
- else {
57
- console.log(renderDoctorReport({ checks, host: hostName, scope, strict: args.strict, showOk: Boolean(args["show-ok"]) }));
58
- }
59
- if (checks.some((c) => c.status === "missing"))
60
- process.exitCode = 1;
61
- if (args.strict && checks.some((c) => c.status === "warn"))
62
- process.exitCode = 1;
63
- },
64
- });
65
- //# sourceMappingURL=doctor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}