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,14 +0,0 @@
1
- import type { DoctorCheck } from "@clawdlets/core/doctor";
2
- export declare function renderDoctorReport(params: {
3
- checks: DoctorCheck[];
4
- host: string;
5
- scope: "repo" | "bootstrap" | "server-deploy" | "cattle" | "all";
6
- strict: boolean;
7
- showOk: boolean;
8
- }): string;
9
- export declare function renderDoctorGateFailure(params: {
10
- checks: DoctorCheck[];
11
- scope: "repo" | "bootstrap" | "server-deploy";
12
- strict: boolean;
13
- }): string;
14
- //# sourceMappingURL=doctor-render.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor-render.d.ts","sourceRoot":"","sources":["../../src/lib/doctor-render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAqF1D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjE,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB,GAAG,MAAM,CAiCT;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,eAAe,CAAC;IAC9C,MAAM,EAAE,OAAO,CAAC;CACjB,GAAG,MAAM,CAwBT"}
@@ -1,131 +0,0 @@
1
- import process from "node:process";
2
- const STATUS_ORDER = { missing: 0, warn: 1, ok: 2 };
3
- const SCOPE_ORDER = { repo: 0, bootstrap: 1, "server-deploy": 2, cattle: 3 };
4
- function supportsColor(out) {
5
- if (!out.isTTY)
6
- return false;
7
- if (process.env.NO_COLOR != null)
8
- return false;
9
- if (process.env.TERM === "dumb")
10
- return false;
11
- return true;
12
- }
13
- function colorize(params) {
14
- if (!params.enabled)
15
- return params.s;
16
- return `\x1b[${params.code}m${params.s}\x1b[0m`;
17
- }
18
- function formatStatusTag(status, opts) {
19
- if (status === "ok")
20
- return colorize({ enabled: opts.color, code: 32, s: "[OK]" });
21
- if (status === "warn")
22
- return colorize({ enabled: opts.color, code: 33, s: "[WARN]" });
23
- return colorize({ enabled: opts.color, code: 31, s: "[MISSING]" });
24
- }
25
- function bold(s, opts) {
26
- return colorize({ enabled: opts.color, code: 1, s });
27
- }
28
- function categoryForLabel(label) {
29
- const l = label.toLowerCase();
30
- if (l.includes("public repo hygiene") || l.includes("inline scripting") || l.includes("docs index") || l.includes("bundled skills"))
31
- return "repo hygiene";
32
- if (l.includes("fleet") || l.includes("guild") || l.includes("discord") || l.includes("routing"))
33
- return "fleet / discord";
34
- if (l.includes("sops") || l.includes("secret") || l.includes("envsecrets") || l.includes("llm api"))
35
- return "secrets";
36
- if (l.includes("deploy env file") || l.includes("env file"))
37
- return "infra";
38
- if (l.includes("hetzner") || l.includes("provisioning") || l.includes("opentofu") || l.includes("hcloud") || l.includes("nixos-anywhere"))
39
- return "infra";
40
- if (l.includes("github_token") || l.includes("base flake"))
41
- return "github";
42
- if (l.includes("ssh") || l.includes("targethost") || l.includes("authorizedkeys"))
43
- return "ssh";
44
- if (l.startsWith("nix"))
45
- return "nix";
46
- return "other";
47
- }
48
- function groupChecks(params) {
49
- const byKey = new Map();
50
- for (const c of params.checks) {
51
- if (!params.showOk && c.status === "ok")
52
- continue;
53
- const category = categoryForLabel(c.label);
54
- const key = `${c.scope}:${category}`;
55
- const existing = byKey.get(key);
56
- if (existing) {
57
- existing.checks.push(c);
58
- continue;
59
- }
60
- byKey.set(key, { scope: c.scope, category, checks: [c] });
61
- }
62
- const groups = Array.from(byKey.values()).map((g) => {
63
- const worst = g.checks.reduce((acc, c) => (STATUS_ORDER[c.status] < STATUS_ORDER[acc] ? c.status : acc), "ok");
64
- g.checks.sort((a, b) => {
65
- const d = STATUS_ORDER[a.status] - STATUS_ORDER[b.status];
66
- if (d !== 0)
67
- return d;
68
- return a.label.localeCompare(b.label);
69
- });
70
- return { ...g, worst };
71
- });
72
- groups.sort((a, b) => {
73
- const scopeOrder = SCOPE_ORDER[a.scope] - SCOPE_ORDER[b.scope];
74
- if (scopeOrder !== 0)
75
- return scopeOrder;
76
- const worstOrder = STATUS_ORDER[a.worst] - STATUS_ORDER[b.worst];
77
- if (worstOrder !== 0)
78
- return worstOrder;
79
- return a.category.localeCompare(b.category);
80
- });
81
- return groups;
82
- }
83
- export function renderDoctorReport(params) {
84
- const color = supportsColor(process.stdout);
85
- const counts = params.checks.reduce((acc, c) => {
86
- acc[c.status] += 1;
87
- return acc;
88
- }, { ok: 0, warn: 0, missing: 0 });
89
- const groups = groupChecks({ checks: params.checks, showOk: params.showOk });
90
- const lines = [];
91
- lines.push(`doctor: host=${params.host} scope=${params.scope}${params.strict ? " strict" : ""}`);
92
- lines.push(`summary: ok=${counts.ok} warn=${counts.warn} missing=${counts.missing}${!params.showOk && counts.ok > 0 ? " (ok hidden; pass --show-ok)" : ""}`);
93
- if (groups.length === 0) {
94
- lines.push("ok: no issues found");
95
- return lines.join("\n");
96
- }
97
- for (const g of groups) {
98
- lines.push("");
99
- lines.push(bold(`${g.scope} / ${g.category}`, { color }));
100
- for (const c of g.checks) {
101
- const tag = formatStatusTag(c.status, { color });
102
- lines.push(` ${tag} ${c.label}${c.detail ? ` (${c.detail})` : ""}`);
103
- }
104
- }
105
- return lines.join("\n");
106
- }
107
- export function renderDoctorGateFailure(params) {
108
- const missing = params.checks.filter((c) => c.status === "missing");
109
- const warn = params.checks.filter((c) => c.status === "warn");
110
- const failing = params.strict ? [...missing, ...warn] : missing;
111
- const groups = groupChecks({ checks: failing, showOk: true });
112
- const lines = [];
113
- lines.push(`doctor gate failed (${params.scope}${params.strict ? ", strict" : ""})`);
114
- lines.push(`missing=${missing.length}${params.strict ? ` warn=${warn.length}` : ""}`);
115
- const maxLines = 60;
116
- for (const g of groups) {
117
- if (lines.length >= maxLines)
118
- break;
119
- lines.push("");
120
- lines.push(`${g.scope} / ${g.category}`);
121
- for (const c of g.checks) {
122
- if (lines.length >= maxLines)
123
- break;
124
- lines.push(` ${c.status.toUpperCase()}: ${c.label}${c.detail ? ` (${c.detail})` : ""}`);
125
- }
126
- }
127
- lines.push("");
128
- lines.push(`hint: run clawdlets doctor --scope ${params.scope}${params.strict ? " --strict" : ""}`);
129
- return lines.join("\n");
130
- }
131
- //# sourceMappingURL=doctor-render.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor-render.js","sourceRoot":"","sources":["../../src/lib/doctor-render.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- export declare function resolveHostNameOrExit(params: {
2
- cwd: string;
3
- runtimeDir?: string;
4
- hostArg: unknown;
5
- }): string | null;
6
- //# sourceMappingURL=host-resolve.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"host-resolve.d.ts","sourceRoot":"","sources":["../../src/lib/host-resolve.ts"],"names":[],"mappings":"AAQA,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,MAAM,GAAG,IAAI,CAWhB"}
@@ -1,20 +0,0 @@
1
- import process from "node:process";
2
- import { findRepoRoot } from "@clawdlets/core/lib/repo";
3
- import { loadClawdletsConfig, resolveHostName } from "@clawdlets/core/lib/clawdlets-config";
4
- function printHostTips(lines) {
5
- for (const l of lines)
6
- console.error(`tip: ${l}`);
7
- }
8
- export function resolveHostNameOrExit(params) {
9
- const repoRoot = findRepoRoot(params.cwd);
10
- const { config } = loadClawdletsConfig({ repoRoot, runtimeDir: params.runtimeDir });
11
- const resolved = resolveHostName({ config, host: params.hostArg });
12
- if (!resolved.ok) {
13
- console.error(`warn: ${resolved.message}`);
14
- printHostTips(resolved.tips);
15
- process.exitCode = 1;
16
- return null;
17
- }
18
- return resolved.host;
19
- }
20
- //# sourceMappingURL=host-resolve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"host-resolve.js","sourceRoot":"","sources":["../../src/lib/host-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAE5F,SAAS,aAAa,CAAC,KAAe;IACpC,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAIrC;IACC,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,SAAS,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3C,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC"}
@@ -1,8 +0,0 @@
1
- export declare function linuxBuildRequiredError(params: {
2
- command: string;
3
- }): Error;
4
- export declare function requireLinuxForLocalNixosBuild(params: {
5
- platform: string;
6
- command: string;
7
- }): void;
8
- //# sourceMappingURL=linux-build.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"linux-build.d.ts","sourceRoot":"","sources":["../../src/lib/linux-build.ts"],"names":[],"mappings":"AAAA,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAU1E;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGlG"}
@@ -1,15 +0,0 @@
1
- export function linuxBuildRequiredError(params) {
2
- const cmd = params.command.trim() || "this command";
3
- return new Error([
4
- `${cmd}: local NixOS builds require Linux.`,
5
- "Use one of:",
6
- "- CI: deploy-manifest.yml publishes signed deploy manifests, then deploy.yml (or selfUpdate) deploys by manifest over tailnet",
7
- "- Linux builder: build the system on Linux and deploy with --manifest or --toplevel",
8
- ].join("\n"));
9
- }
10
- export function requireLinuxForLocalNixosBuild(params) {
11
- if (params.platform === "linux")
12
- return;
13
- throw linuxBuildRequiredError({ command: params.command });
14
- }
15
- //# sourceMappingURL=linux-build.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"linux-build.js","sourceRoot":"","sources":["../../src/lib/linux-build.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,uBAAuB,CAAC,MAA2B;IACjE,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC;IACpD,OAAO,IAAI,KAAK,CACd;QACE,GAAG,GAAG,qCAAqC;QAC3C,aAAa;QACb,+HAA+H;QAC/H,qFAAqF;KACtF,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAA6C;IAC1F,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO;IACxC,MAAM,uBAAuB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC7D,CAAC"}
@@ -1,17 +0,0 @@
1
- export declare function resolveManifestSignaturePath(params: {
2
- cwd: string;
3
- manifestPath: string;
4
- signaturePathArg?: string;
5
- }): string;
6
- export declare function resolveManifestPublicKey(params: {
7
- publicKeyArg?: string;
8
- publicKeyFileArg?: string;
9
- hostPublicKey?: string;
10
- defaultKeyPath?: string;
11
- }): string;
12
- export declare function verifyManifestSignature(params: {
13
- manifestPath: string;
14
- signaturePath: string;
15
- publicKey: string;
16
- }): Promise<void>;
17
- //# sourceMappingURL=manifest-signature.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manifest-signature.d.ts","sourceRoot":"","sources":["../../src/lib/manifest-signature.ts"],"names":[],"mappings":"AAIA,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,CAQT;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAkBT;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAahB"}
@@ -1,52 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { run } from "@clawdlets/core/lib/run";
4
- export function resolveManifestSignaturePath(params) {
5
- const sigArg = String(params.signaturePathArg || "").trim();
6
- if (sigArg) {
7
- return path.isAbsolute(sigArg) ? sigArg : path.resolve(params.cwd, sigArg);
8
- }
9
- const fallback = `${params.manifestPath}.minisig`;
10
- if (fs.existsSync(fallback))
11
- return fallback;
12
- throw new Error("manifest signature missing (provide --manifest-signature or <manifest>.minisig)");
13
- }
14
- export function resolveManifestPublicKey(params) {
15
- const direct = String(params.publicKeyArg || "").trim();
16
- if (direct)
17
- return direct;
18
- const fileArg = String(params.publicKeyFileArg || "").trim();
19
- if (fileArg) {
20
- const content = fs.readFileSync(fileArg, "utf8").trim();
21
- if (!content)
22
- throw new Error(`manifest public key file empty: ${fileArg}`);
23
- return content;
24
- }
25
- const fallbackPath = String(params.defaultKeyPath || "").trim();
26
- if (fallbackPath && fs.existsSync(fallbackPath)) {
27
- const content = fs.readFileSync(fallbackPath, "utf8").trim();
28
- if (!content)
29
- throw new Error(`manifest public key file empty: ${fallbackPath}`);
30
- return content;
31
- }
32
- const fromHost = String(params.hostPublicKey || "").trim();
33
- if (fromHost)
34
- return fromHost;
35
- throw new Error("manifest public key missing (set hosts.<host>.selfUpdate.publicKey or --manifest-public-key)");
36
- }
37
- export async function verifyManifestSignature(params) {
38
- try {
39
- await run("minisign", ["-Vm", params.manifestPath, "-P", params.publicKey, "-x", params.signaturePath], {
40
- redact: [],
41
- });
42
- }
43
- catch (e) {
44
- const err = e;
45
- const msg = String(err?.message || e);
46
- if (err?.code === "ENOENT" || msg.includes("spawn minisign ENOENT")) {
47
- throw new Error(`minisign not found (${msg}). Install minisign and retry.`);
48
- }
49
- throw new Error(`manifest signature invalid (${msg}). See minisign output above.`);
50
- }
51
- }
52
- //# sourceMappingURL=manifest-signature.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manifest-signature.js","sourceRoot":"","sources":["../../src/lib/manifest-signature.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { type TemplateSource } from "@clawdlets/core/lib/template-source";
2
- type TemplateSpecArgs = {
3
- template?: string;
4
- templatePath?: string;
5
- templateRef?: string;
6
- };
7
- export declare function resolveTemplateSpec(args: TemplateSpecArgs): TemplateSource;
8
- export {};
9
- //# sourceMappingURL=template-spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template-spec.d.ts","sourceRoot":"","sources":["../../src/lib/template-spec.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAEnG,KAAK,gBAAgB,GAAG;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAsCF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,cAAc,CAW1E"}
@@ -1,50 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- import { normalizeTemplateSource } from "@clawdlets/core/lib/template-source";
5
- function firstNonEmpty(...values) {
6
- for (const value of values) {
7
- const trimmed = String(value || "").trim();
8
- if (trimmed)
9
- return trimmed;
10
- }
11
- return undefined;
12
- }
13
- function resolveTemplateSourcePath() {
14
- const moduleDir = path.dirname(fileURLToPath(import.meta.url));
15
- const packagedPath = path.resolve(moduleDir, "..", "config", "template-source.json");
16
- if (fs.existsSync(packagedPath))
17
- return packagedPath;
18
- const repoRootPath = path.resolve(moduleDir, "..", "..", "..", "..", "config", "template-source.json");
19
- if (fs.existsSync(repoRootPath))
20
- return repoRootPath;
21
- const cwdPath = path.resolve(process.cwd(), "config", "template-source.json");
22
- if (fs.existsSync(cwdPath))
23
- return cwdPath;
24
- throw new Error("template source config missing (expected config/template-source.json)");
25
- }
26
- function loadTemplateSourceDefaults() {
27
- const configPath = resolveTemplateSourcePath();
28
- const raw = fs.readFileSync(configPath, "utf8");
29
- const parsed = JSON.parse(raw);
30
- if (!parsed || typeof parsed !== "object") {
31
- throw new Error(`template source config invalid: ${configPath}`);
32
- }
33
- return {
34
- repo: String(parsed.repo || ""),
35
- path: String(parsed.path || ""),
36
- ref: String(parsed.ref || ""),
37
- };
38
- }
39
- export function resolveTemplateSpec(args) {
40
- const defaults = loadTemplateSourceDefaults();
41
- const repo = firstNonEmpty(args.template, process.env["CLAWDLETS_TEMPLATE_REPO"], defaults.repo);
42
- const tplPath = firstNonEmpty(args.templatePath, process.env["CLAWDLETS_TEMPLATE_PATH"], defaults.path);
43
- const ref = firstNonEmpty(args.templateRef, process.env["CLAWDLETS_TEMPLATE_REF"], defaults.ref);
44
- return normalizeTemplateSource({
45
- repo: repo || "",
46
- path: tplPath || "",
47
- ref: ref || "",
48
- });
49
- }
50
- //# sourceMappingURL=template-spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template-spec.js","sourceRoot":"","sources":["../../src/lib/template-spec.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export declare function resolvePackageRoot(fromUrl?: string): string;
2
- export declare function readCliVersion(rootDir?: string): string;
3
- //# sourceMappingURL=version.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAIA,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,MAAwB,GAAG,MAAM,CAG5E;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,MAA6B,GAAG,MAAM,CAQ7E"}
@@ -1,17 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- export function resolvePackageRoot(fromUrl = import.meta.url) {
5
- const dir = path.dirname(fileURLToPath(fromUrl));
6
- return path.resolve(dir, "..");
7
- }
8
- export function readCliVersion(rootDir = resolvePackageRoot()) {
9
- const pkgPath = path.join(rootDir, "package.json");
10
- const raw = fs.readFileSync(pkgPath, "utf8");
11
- const parsed = JSON.parse(raw);
12
- if (typeof parsed.version !== "string" || parsed.version.length === 0) {
13
- throw new Error("missing version in package.json");
14
- }
15
- return parsed.version;
16
- }
17
- //# sourceMappingURL=version.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,kBAAkB,CAAC,UAAkB,MAAM,CAAC,IAAI,CAAC,GAAG;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAkB,kBAAkB,EAAE;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;IACxD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
@@ -1,10 +0,0 @@
1
- export declare const NAV_BACK: unique symbol;
2
- export declare const NAV_EXIT: unique symbol;
3
- export type Nav = typeof NAV_BACK | typeof NAV_EXIT;
4
- export declare function isNav(v: unknown): v is Nav;
5
- export declare function navOnCancel(params: {
6
- flow: string;
7
- canBack: boolean;
8
- }): Promise<Nav>;
9
- export declare function cancelFlow(): void;
10
- //# sourceMappingURL=wizard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/lib/wizard.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,eAA+B,CAAC;AACrD,eAAO,MAAM,QAAQ,eAA+B,CAAC;AACrD,MAAM,MAAM,GAAG,GAAG,OAAO,QAAQ,GAAG,OAAO,QAAQ,CAAC;AAEpD,wBAAgB,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,GAAG,CAE1C;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAc1F;AAED,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
@@ -1,25 +0,0 @@
1
- import * as p from "@clack/prompts";
2
- export const NAV_BACK = Symbol("clawdlets.nav.back");
3
- export const NAV_EXIT = Symbol("clawdlets.nav.exit");
4
- export function isNav(v) {
5
- return v === NAV_BACK || v === NAV_EXIT;
6
- }
7
- export async function navOnCancel(params) {
8
- const flow = params.flow.trim() || "setup";
9
- const options = [];
10
- if (params.canBack)
11
- options.push({ value: "back", label: "Back" });
12
- options.push({ value: "exit", label: `Exit ${flow}` });
13
- const choice = await p.select({
14
- message: "Canceled. Next?",
15
- initialValue: params.canBack ? "back" : "exit",
16
- options,
17
- });
18
- if (p.isCancel(choice) || choice === "exit")
19
- return NAV_EXIT;
20
- return NAV_BACK;
21
- }
22
- export function cancelFlow() {
23
- p.cancel("canceled");
24
- }
25
- //# sourceMappingURL=wizard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/lib/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAGrD,MAAM,UAAU,KAAK,CAAC,CAAU;IAC9B,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,QAAQ,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAA0C;IAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC;IAC3C,MAAM,OAAO,GAAqD,EAAE,CAAC;IACrE,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC;QAC5B,OAAO,EAAE,iBAAiB;QAC1B,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QAC9C,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IAC7D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACvB,CAAC"}
package/dist/main.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=main.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
package/dist/main.js DELETED
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env node
2
- import { defineCommand, runMain } from "citty";
3
- import { bot } from "./commands/bot.js";
4
- import { bootstrap } from "./commands/bootstrap.js";
5
- import { config } from "./commands/config.js";
6
- import { cattle } from "./commands/cattle.js";
7
- import { doctor } from "./commands/doctor.js";
8
- import { env } from "./commands/env.js";
9
- import { host } from "./commands/host.js";
10
- import { fleet } from "./commands/fleet.js";
11
- import { image } from "./commands/image.js";
12
- import { infra } from "./commands/infra.js";
13
- import { lockdown } from "./commands/lockdown.js";
14
- import { project } from "./commands/project.js";
15
- import { secrets } from "./commands/secrets.js";
16
- import { server } from "./commands/server.js";
17
- import { readCliVersion } from "./lib/version.js";
18
- const main = defineCommand({
19
- meta: {
20
- name: "clawdlets",
21
- description: "Clawdbot fleet helper (CLI-first; runtime state in .clawdlets/; secrets in /secrets).",
22
- },
23
- subCommands: {
24
- bot,
25
- bootstrap,
26
- cattle,
27
- config,
28
- doctor,
29
- env,
30
- host,
31
- fleet,
32
- image,
33
- infra,
34
- lockdown,
35
- project,
36
- secrets,
37
- server,
38
- },
39
- });
40
- {
41
- const [nodeBin, script, ...rest] = process.argv;
42
- const normalized = rest.filter((a) => a !== "--");
43
- if (normalized.includes("--version") || normalized.includes("-v")) {
44
- console.log(readCliVersion());
45
- process.exit(0);
46
- }
47
- process.argv = [nodeBin, script, ...normalized];
48
- }
49
- runMain(main);
50
- //# sourceMappingURL=main.js.map
package/dist/main.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,uFAAuF;KACrG;IACD,WAAW,EAAE;QACX,GAAG;QACH,SAAS;QACT,MAAM;QACN,MAAM;QACN,MAAM;QACN,GAAG;QACH,IAAI;QACJ,KAAK;QACL,KAAK;QACL,KAAK;QACL,QAAQ;QACR,OAAO;QACP,OAAO;QACP,MAAM;KACP;CACF,CAAC,CAAC;AAEH,CAAC;IACC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAClD,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,IAAI,GAAG,CAAC,OAAQ,EAAE,MAAO,EAAE,GAAG,UAAU,CAAC,CAAC;AACpD,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,CAAC"}